Subversion Repositories spacemission

Compare Revisions

No changes between revisions

Regard whitespace Rev 1 → Rev HEAD

/SplCheat.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/SplCheat.dfm
File deleted
/LevText.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/SplSpeicherung.pas
File deleted
/SplInfo.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/SplText.pas
File deleted
/ComMain.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevInfo.pas
File deleted
/SplSplash.dfm
File deleted
/SplSplash.ddp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/SpaceMission.identcache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/SplSplash.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Compiler.bdsproj
File deleted
/SplMain.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevEdit.dof
File deleted
/SpaceMission.bdsproj.local
File deleted
/SplText.dfm
File deleted
/Compiler.identcache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevInfo.dfm
File deleted
/SplSpeicherung.dfm
File deleted
/SpaceMission.cfg
File deleted
/SpaceMission.dof
File deleted
/Musik/Title.MID
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Musik/Boss.MID
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Musik/Game.MID
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Musik/Scene.MID
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevEdit.identcache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevEdit.cfg
File deleted
/Dokumentation.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevSource.pas
File deleted
/SplText.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevInfo.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevSpeicherung.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevText.pas
File deleted
/LevEdit.todo
File deleted
\ No newline at end of file
/SplSpeicherung.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/SpaceMission.bdsproj
File deleted
/SplInfo.pas
File deleted
/ComMain.pas
File deleted
/LevSplash.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevMain.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/SplSplash.pas
File deleted
/LevText.dfm
File deleted
/Unit1.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/SplInfo.dfm
File deleted
/SplMain.pas
File deleted
/_Projektgruppe.bdsgroup.local
File deleted
/ComMain.dfm
File deleted
/LevOptions.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/_Projektgruppe.bdsgroup
File deleted
/LevEdit.bdsproj
File deleted
/Compiler.bdsproj.local
File deleted
/Bilder/LevSplash.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Bilder/Auswahl.bmp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Bilder/Delphi.bmp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Bilder/Thumbs.db
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Bilder/SplSplash.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevEdit.bdsproj.local
File deleted
/VCL_PJVERSIONINFO/PJVersionInfo.pas
File deleted
/VCL_PJVERSIONINFO/PJVersionInfo.htm
File deleted
/VCL_PJVERSIONINFO/PJVersionInfo.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/LevSource.dfm
File deleted
/Compiler.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Compiler.cfg
File deleted
/Texte/Mitwirkende.txt
File deleted
/SplMain.dfm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Compiler.dof
File deleted
/Compiler.dpr
File deleted
/LevSource.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/Einstellungen/SpaceMission.ini
File deleted
/SplCheat.pas
File deleted
/VCL_DELPHIX_D6/DXGUIDEdit.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX_for6.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXPlayFm.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DAnim.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXReg_original.pas
File deleted
/VCL_DELPHIX_D6/DXFFBEdit.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXPlay.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXDraws.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXETable.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DIB.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DirectX.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXPictEdit.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXConsts.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXRender.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DirectX.txt
File deleted
/VCL_DELPHIX_D6/DXInput.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/Wave.pas
File deleted
/VCL_DELPHIX_D6/Wave.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXInptEdit.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXSounds.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DShow.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXSprite.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXTexImg.pas
File deleted
/VCL_DELPHIX_D6/DXClass.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXReg.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXTexImg.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXWaveEdit.dcu
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DXDraws.pas
1,3 → 1,95
(*******************************************************************************
EXTEND UNIT DXDRAWS FROM DELPHIX PACK
 
* Copyright (c) 2004-2010 Jaro Benes
* All Rights Reserved
* Version 1.09
* D2D Hardware module
* web site: www.micrel.cz/Dx
* e-mail: delphix_d2d@micrel.cz
 
* Enhanced by User137
 
* DISCLAIMER:
This software is provided "as is" and is without warranty of any kind.
The author of this software does not warrant, guarantee or make any
representations regarding the use or results of use of this software
in terms of reliability, accuracy or fitness for purpose. You assume
the entire risk of direct or indirect, consequential or inconsequential
results from the correct or incorrect usage of this software even if the
author has been informed of the possibilities of such damage. Neither
the author nor anybody connected to this software in any way can assume
any responsibility.
 
Tested in Delphi 4, 5, 6, 7 and Delphi 2005/2006/2007/2009/2010
 
* FEATURES:
a) Implement Hardware acceleration for critical function like DrawAlpha {Blend},
DrawSub and DrawAdd for both way DXIMAGELIST and DIRECTDRAWSURFACE with rotation too.
b) Automatic adjustement for texture size different 2^n.
c) Minimum current source code change, all accelerated code added into:
DXDraw.BeginScene;
//code here
DXDraw.EndScene;
d) DelphiX facade continues using still.
 
* HOW TO USE
a) Design code like as DelphiX and drawing routine put into
DXDraw.BeginScene;
//code here
DXDraw.EndScene;
b) setup options in code or property for turn-on acceleration like:
DXDraw.Finalize; {done DXDraw}
If HardwareSwitch Then
{hardware}
Begin
if NOT (doDirectX7Mode in DXDraw.Options) then
DXDraw.Options := DXDraw.Options + [doDirectX7Mode];
if NOT (doHardware in DXDraw.Options) then
DXDraw.Options := DXDraw.Options + [doHardware];
if NOT (do3D in DXDraw.Options) then
DXDraw.Options := DXDraw.Options + [do3D];
if doSystemMemory in DXDraw.Options then
DXDraw.Options := DXDraw.Options - [doSystemMemory];
End
Else
{software}
Begin
if doDirectX7Mode in DXDraw.Options then
DXDraw.Options := DXDraw.Options - [doDirectX7Mode];
if do3D in DXDraw.Options then
DXDraw.Options := DXDraw.Options - [do3D];
if doHardware in DXDraw.Options then
DXDraw.Options := DXDraw.Options - [doHardware];
if NOT (doSystemMemory in DXDraw.Options) then
DXDraw.Options := DXDraw.Options + [doSystemMemory];
End;
{to fullscreen}
if doFullScreen in DXDraw.Options then
begin
RestoreWindow;
DXDraw.Cursor := crDefault;
BorderStyle := bsSingle;
DXDraw.Options := DXDraw.Options - [doFullScreen];
DXDraw.Options := DXDraw.Options + [doFlip];
end else
begin
StoreWindow;
DXDraw.Cursor := crNone;
BorderStyle := bsNone;
DXDraw.Options := DXDraw.Options + [doFullScreen];
DXDraw.Options := DXDraw.Options - [doFlip];
end;
DXDraw1.Initialize; {up DXDraw now}
 
* NOTE Main form has to declare like:
TForm1 = class(TDXForm)
 
* KNOWN BUGS OR RESTRICTION:
1/ Cannot be use DirectDrawSurface other from DXDraw.Surface in HW mode.
2/ New functions was not tested for two and more DXDraws on form. Sorry.
 
******************************************************************************)
unit DXDraws;
 
interface
6,10 → 98,56
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
DXClass, DIB, DXTexImg, DirectX;
{$IFDEF VER14UP}
DXTypes,
{$ENDIF}
{$IFDEF VER17UP}System.Types, System.UITypes,{$ENDIF}
{$IFDEF DXTextureImage_UseZLIB}
ZLIB,
{$ENDIF}
DXClass, DIB,
{$IFDEF StandardDX}
DirectDraw, DirectSound,
{$IFDEF DX7}
{$IFDEF D3DRM}
Direct3DRM,
{$ENDIF}
Direct3D;
{$ENDIF}
{$IFDEF DX9}
Direct3D9, Direct3D, D3DX9, {Direct3D8,} DX7toDX8;
{$ENDIF}
{$ELSE}
DirectX;
{$ENDIF}
 
const
maxTexBlock = 2048; {maximum textures}
maxVideoBlockSize: Integer = 2048; {maximum size block of one texture}
SurfaceDivWidth: Integer = 2048;
SurfaceDivHeight: Integer = 2048;
{This conditional is for force set square texture when use it alphachannel from DIB32}
{$DEFINE FORCE_SQUARE}
DXTextureImageGroupType_Normal = 0; // Normal group
DXTextureImageGroupType_Mipmap = 1; // Mipmap group
 
Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ"at 0123456789<>=()-''!_+\/{}^&%.=$#ÅÖÄ?*';
PowerAlphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`1234567890-=~!@#$%^&*()_+[];'',./\{}:"<>?|©®™ ';
ccDefaultSpecular = $FFFFFFFF;
 
ZeroRect: TRect = (Left: 0; Top: 0; Right: 0; Bottom: 0);
 
type
 
{ TRenderType }
 
TRenderType = (rtDraw, rtBlend, rtAdd, rtSub);
 
{ TRenderMirrorFlip }
 
TRenderMirrorFlip = (rmfMirror, rmfFlip);
TRenderMirrorFlipSet = set of TRenderMirrorFlip;
 
{ EDirectDrawError }
 
EDirectDrawError = class(EDirectXError);
25,8 → 163,10
 
TDirectDraw = class(TDirectX)
private
{$IFDEF D3D_deprecated}
FIDDraw: IDirectDraw;
FIDDraw4: IDirectDraw4;
{$ENDIF}
FIDDraw7: IDirectDraw7;
FDriverCaps: TDDCaps;
FHELCaps: TDDCaps;
35,12 → 175,16
FSurfaces: TList;
function GetClipper(Index: Integer): TDirectDrawClipper;
function GetClipperCount: Integer;
function GetDisplayMode: TDDSurfaceDesc;
function GetDisplayMode: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
{$IFDEF D3D_deprecated}
function GetIDDraw: IDirectDraw;
function GetIDDraw4: IDirectDraw4;
{$ENDIF}
function GetIDDraw7: IDirectDraw7;
{$IFDEF D3D_deprecated}
function GetIDraw: IDirectDraw;
function GetIDraw4: IDirectDraw4;
{$ENDIF}
function GetIDraw7: IDirectDraw7;
function GetPalette(Index: Integer): TDirectDrawPalette;
function GetPaletteCount: Integer;
51,16 → 195,21
constructor CreateEx(GUID: PGUID; DirectX7Mode: Boolean);
destructor Destroy; override;
class function Drivers: TDirectXDrivers;
{$IFDEF _DMO_}class function DriversEx: TDirectXDriversEx;{$ENDIF}
property ClipperCount: Integer read GetClipperCount;
property Clippers[Index: Integer]: TDirectDrawClipper read GetClipper;
property DisplayMode: TDDSurfaceDesc read GetDisplayMode;
property DisplayMode: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF} read GetDisplayMode;
property DriverCaps: TDDCaps read FDriverCaps;
property HELCaps: TDDCaps read FHELCaps;
{$IFDEF D3D_deprecated}
property IDDraw: IDirectDraw read GetIDDraw;
property IDDraw4: IDirectDraw4 read GetIDDraw4;
{$ENDIF}
property IDDraw7: IDirectDraw7 read GetIDDraw7;
{$IFDEF D3D_deprecated}
property IDraw: IDirectDraw read GetIDraw;
property IDraw4: IDirectDraw4 read GetIDraw4;
{$ENDIF}
property IDraw7: IDirectDraw7 read GetIDraw7;
property PaletteCount: Integer read GetPaletteCount;
property Palettes[Index: Integer]: TDirectDrawPalette read GetPalette;
135,35 → 284,63
FCanvas: TDirectDrawSurfaceCanvas;
FHasClipper: Boolean;
FDDraw: TDirectDraw;
{$IFDEF D3D_deprecated}
FIDDSurface: IDirectDrawSurface;
FIDDSurface4: IDirectDrawSurface4;
{$ENDIF}
FIDDSurface7: IDirectDrawSurface7;
FSystemMemory: Boolean;
FStretchDrawClipper: IDirectDrawClipper;
FSurfaceDesc: TDDSurfaceDesc;
FSurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
FGammaControl: IDirectDrawGammaControl;
FLockSurfaceDesc: TDDSurfaceDesc;
FLockSurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
FLockCount: Integer;
FIsLocked: Boolean;
FModified: Boolean;
FCaption: TCaption;
DIB_COLMATCH: TDIB;
function GetBitCount: Integer;
function GetCanvas: TDirectDrawSurfaceCanvas;
function GetClientRect: TRect;
function GetHeight: Integer;
function GetIDDSurface: IDirectDrawSurface;
function GetIDDSurface4: IDirectDrawSurface4;
function GetIDDSurface7: IDirectDrawSurface7;
{$IFDEF D3D_deprecated}
function GetIDDSurface: IDirectDrawSurface; {$IFDEF VER9UP}inline;{$ENDIF}
function GetIDDSurface4: IDirectDrawSurface4; {$IFDEF VER9UP}inline;{$ENDIF}
{$ENDIF}
function GetIDDSurface7: IDirectDrawSurface7; {$IFDEF VER9UP}inline;{$ENDIF}
{$IFDEF D3D_deprecated}
function GetISurface: IDirectDrawSurface;
function GetISurface4: IDirectDrawSurface4;
{$ENDIF}
function GetISurface7: IDirectDrawSurface7;
function GetPixel(X, Y: Integer): Longint;
function GetWidth: Integer;
procedure SetClipper(Value: TDirectDrawClipper);
procedure SetColorKey(Flags: DWORD; const Value: TDDColorKey);
{$IFDEF D3D_deprecated}
procedure SetIDDSurface(Value: IDirectDrawSurface);
procedure SetIDDSurface4(Value: IDirectDrawSurface4);
{$ENDIF}
procedure SetIDDSurface7(Value: IDirectDrawSurface7);
procedure SetPalette(Value: TDirectDrawPalette);
procedure SetPixel(X, Y: Integer; Value: Longint);
procedure SetTransparentColor(Col: Longint);
{support RGB routines}
procedure LoadRGB(Color: cardinal; var R, G, B: Byte);
function SaveRGB(const R, G, B: Byte): cardinal;
{asm routine for direct surface by pixel}
{no clipping}
function GetPixel16(x, y: Integer): Integer; register;
function GetPixel24(x, y: Integer): Integer; register;
function GetPixel32(x, y: Integer): Integer; register;
function GetPixel8(x, y: Integer): Integer; register;
procedure PutPixel16(x, y, color: Integer); register;
procedure PutPixel24(x, y, color: Integer); register;
procedure PutPixel32(x, y, color: Integer); register;
procedure PutPixel8(x, y, color: Integer); register;
{routines calls asm pixel routine}
function Peek(X, Y: Integer): LongInt; {$IFDEF VER9UP} inline; {$ENDIF}
procedure Poke(X, Y: Integer; const Value: LongInt); {$IFDEF VER9UP} inline; {$ENDIF}
public
constructor Create(ADirectDraw: TDirectDraw);
destructor Destroy; override;
170,17 → 347,22
procedure Assign(Source: TPersistent); override;
procedure AssignTo(Dest: TPersistent); override;
function Blt(const DestRect, SrcRect: TRect; Flags: DWORD;
const DF: TDDBltFX; Source: TDirectDrawSurface): Boolean;
const DF: TDDBltFX; Source: TDirectDrawSurface): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function BltFast(X, Y: Integer; const SrcRect: TRect;
Flags: DWORD; Source: TDirectDrawSurface): Boolean;
function ColorMatch(Col: TColor): Integer;
{$IFDEF DelphiX_Spt4}
function CreateSurface(const SurfaceDesc: TDDSurfaceDesc): Boolean; overload;
function CreateSurface(const SurfaceDesc: TDDSurfaceDesc2): Boolean; overload;
Flags: DWORD; Source: TDirectDrawSurface): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function ColorMatch(Col: TColor): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
{$IFDEF VER4UP}
{$IFDEF D3D_deprecated}
function CreateSurface(SurfaceDesc: TDDSurfaceDesc): Boolean; overload;
{$ENDIF}
function CreateSurface(SurfaceDesc: TDDSurfaceDesc2): Boolean; overload;
{$ELSE}
function CreateSurface(const SurfaceDesc: TDDSurfaceDesc): Boolean;
function CreateSurface(SurfaceDesc: TDDSurfaceDesc): Boolean;
{$ENDIF}
{$IFDEF DelphiX_Spt4}
 
procedure MirrorFlip(Value: TRenderMirrorFlipSet);
 
{$IFDEF VER4UP}
procedure Draw(X, Y: Integer; SrcRect: TRect; Source: TDirectDrawSurface; Transparent: Boolean=True); overload;
procedure Draw(X, Y: Integer; Source: TDirectDrawSurface; Transparent: Boolean=True); overload;
procedure StretchDraw(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
194,38 → 376,94
Transparent: Boolean);
{$ENDIF}
procedure DrawAdd(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean; Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
Transparent: Boolean; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawAlpha(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean; Alpha: Integer);
procedure DrawSub(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean; Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
Transparent: Boolean; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
 
procedure DrawAddCol(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean; Color, Alpha: Integer);
procedure DrawAlphaCol(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean; Color, Alpha: Integer);
procedure DrawSubCol(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean; Color, Alpha: Integer);
 
{Rotate}
procedure DrawRotate(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: Integer);
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: single);
procedure DrawRotateAdd(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: Integer;
Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: single;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawRotateAlpha(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: Integer;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: single;
Alpha: Integer);
procedure DrawRotateSub(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: Integer;
Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: single;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
 
procedure DrawRotateAddCol(X, Y, Width, Height: Integer;
const SrcRect: TRect; Source: TDirectDrawSurface; CenterX,
CenterY: Double; Transparent: Boolean; Angle: Single; Color: Integer;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawRotateAlphaCol(X, Y, Width, Height: Integer;
const SrcRect: TRect; Source: TDirectDrawSurface; CenterX,
CenterY: Double; Transparent: Boolean; Angle: Single; Color: Integer;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawRotateCol(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double;
Transparent: Boolean; Angle: Single; Color: Integer);
procedure DrawRotateSubCol(X, Y, Width, Height: Integer;
const SrcRect: TRect; Source: TDirectDrawSurface; CenterX,
CenterY: Double; Transparent: Boolean; Angle: Single; Color: Integer;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
{WaveX}
procedure DrawWaveX(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph: Integer);
procedure DrawWaveXAdd(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph: Integer;
Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawWaveXAlpha(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph: Integer;
Alpha: Integer);
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawWaveXSub(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph: Integer;
Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
{WaveY}
procedure DrawWaveY(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph: Integer);
procedure DrawWaveYAdd(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph: Integer;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawWaveYAlpha(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph: Integer;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawWaveYSub(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph: Integer;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
{Poke function}
procedure PokeLine(X1, Y1, X2, Y2: Integer; Color: cardinal); {$IFDEF VER9UP} inline; {$ENDIF}
procedure PokeLinePolar(x, y: Integer; angle, length: extended;
Color: cardinal); {$IFDEF VER9UP} inline; {$ENDIF}
procedure PokeBox(xs, ys, xd, yd: Integer; Color: cardinal);
procedure PokeBlendPixel(const X, Y: Integer; aColor: cardinal;
Alpha: byte);
procedure PokeWuLine(X1, Y1, X2, Y2, aColor: Integer);
procedure Noise(Oblast: TRect; Density: Byte);
procedure Blur;
procedure DoRotate(cent1, cent2, angle: Integer; coord1, coord2: Real;
color: word);
procedure PokeCircle(X, Y, Radius, Color: Integer);
procedure PokeEllipse(exc, eyc, ea, eb, angle, color: Integer);
procedure PokeFilledEllipse(exc, eyc, ea, eb, color: Integer);
procedure PokeVLine(x, y1, y2: Integer; Color: cardinal);
{Fill}
procedure Fill(DevColor: Longint);
procedure FillRect(const Rect: TRect; DevColor: Longint);
procedure FillRectAdd(const DestRect: TRect; Color: TColor);
procedure FillRectAdd(const DestRect: TRect; Color: TColor; Alpha: Byte{$IFDEF VER4UP} = 128{$ENDIF});
procedure FillRectAlpha(const DestRect: TRect; Color: TColor; Alpha: Integer);
procedure FillRectSub(const DestRect: TRect; Color: TColor);
procedure FillRectSub(const DestRect: TRect; Color: TColor; Alpha: Byte{$IFDEF VER4UP} = 128{$ENDIF});
{Load}
procedure LoadFromDIB(DIB: TDIB);
procedure LoadFromDIBRect(DIB: TDIB; AWidth, AHeight: Integer; const SrcRect: TRect);
procedure LoadFromGraphic(Graphic: TGraphic);
232,15 → 470,19
procedure LoadFromGraphicRect(Graphic: TGraphic; AWidth, AHeight: Integer; const SrcRect: TRect);
procedure LoadFromFile(const FileName: string);
procedure LoadFromStream(Stream: TStream);
{$IFDEF DelphiX_Spt4}
function Lock(const Rect: TRect; var SurfaceDesc: TDDSurfaceDesc): Boolean; overload;
function Lock(var SurfaceDesc: TDDSurfaceDesc): Boolean; overload;
{$IFDEF VER4UP}
function Lock(const Rect: TRect; var SurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF}): Boolean; overload;
function Lock(var SurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF}): Boolean; overload;
function Lock: Boolean; overload;
{$ELSE}
function LockSurface: Boolean;
function Lock(const Rect: TRect; var SurfaceDesc: TDDSurfaceDesc): Boolean;
{$ENDIF}
procedure UnLock;
function Restore: Boolean;
property IsLocked: Boolean read FIsLocked;
procedure SetSize(AWidth, AHeight: Integer);
property Modified: Boolean read FModified write FModified;
property BitCount: Integer read GetBitCount;
property Canvas: TDirectDrawSurfaceCanvas read GetCanvas;
property ClientRect: TRect read GetClientRect;
249,18 → 491,24
property DDraw: TDirectDraw read FDDraw;
property GammaControl: IDirectDrawGammaControl read FGammaControl;
property Height: Integer read GetHeight;
{$IFDEF D3D_deprecated}
property IDDSurface: IDirectDrawSurface read GetIDDSurface write SetIDDSurface;
property IDDSurface4: IDirectDrawSurface4 read GetIDDSurface4 write SetIDDSurface4;
{$ENDIF}
property IDDSurface7: IDirectDrawSurface7 read GetIDDSurface7 write SetIDDSurface7;
{$IFDEF D3D_deprecated}
property ISurface: IDirectDrawSurface read GetISurface;
property ISurface4: IDirectDrawSurface4 read GetISurface4;
{$ENDIF}
property ISurface7: IDirectDrawSurface7 read GetISurface7;
property Palette: TDirectDrawPalette write SetPalette;
property Pixels[X, Y: Integer]: Longint read GetPixel write SetPixel;
property SurfaceDesc: TDDSurfaceDesc read FSurfaceDesc;
property Pixel[X, Y: Integer]: LongInt read Peek write Poke;
property SurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF} read FSurfaceDesc;
property SystemMemory: Boolean read FSystemMemory write FSystemMemory;
property TransparentColor: Longint write SetTransparentColor;
property Width: Integer read GetWidth;
property Caption: TCaption read FCaption write FCaption;
end;
 
{ TDXDrawDisplay }
297,7 → 545,7
procedure SetBitCount(Value: Integer);
procedure SetHeight(Value: Integer);
procedure SetWidth(Value: Integer);
function SetSize(AWidth, AHeight, ABitCount: Integer): Boolean;
function SetSize(AWidth, AHeight, ABitCount{$IFNDEF D3D_deprecated}, ARefreshRate, AFlags{$ENDIF}: Integer): Boolean;
function DynSetSize(AWidth, AHeight, ABitCount: Integer): Boolean;
public
constructor Create(ADXDraw: TCustomDXDraw);
308,7 → 556,7
property Mode: TDXDrawDisplayMode read GetMode;
property Modes[Index: Integer]: TDXDrawDisplayMode read GetMode2; default;
published
property BitCount: Integer read FBitCount write SetBitCount default 8;
property BitCount: Integer read FBitCount write SetBitCount default 16;
property FixedBitCount: Boolean read FFixedBitCount write FFixedBitCount;
property FixedRatio: Boolean read FFixedRatio write FFixedRatio;
property FixedSize: Boolean read FFixedSize write FFixedSize;
323,11 → 571,23
 
EDXDrawError = class(Exception);
 
{ TD2D HW acceleration}
 
TD2D = class;
 
{ TTracerCollection }
 
TTraces = class;
 
{ TCustomDXDraw }
 
TD2DTextureFilter = (D2D_POINT, D2D_LINEAR, D2D_FLATCUBIC, D2D_GAUSSIANCUBIC, D2D_ANISOTROPIC);
 
 
TDXDrawOption = (doFullScreen, doNoWindowChange, doAllowReboot, doWaitVBlank,
doAllowPalette256, doSystemMemory, doStretch, doCenter, doFlip,
do3D, doDirectX7Mode, doRetainedMode, doHardware, doSelectDriver, doZBuffer);
{$IFDEF D3D_deprecated}do3D, doDirectX7Mode,{$ENDIF} {$IFDEF D3DRM} doRetainedMode,{$ENDIF}
doHardware, doSelectDriver, doZBuffer);
 
TDXDrawOptions = set of TDXDrawOption;
 
336,6 → 596,16
 
TDXDrawNotifyEvent = procedure(Sender: TCustomDXDraw; NotifyType: TDXDrawNotifyType) of object;
 
TD2DTextures = class;
TOnUpdateTextures = procedure(const Sender: TD2DTextures; var Changed: Boolean) of object;
 
TPictureCollectionItem = class;
 
{$IFNDEF D3D_deprecated}
TD3DDeviceType = (dtTnLHAL, dtHAL,dtMMX,dtRGB,dtRamp,dtRef);
TD3DDeviceTypeSet = Set of TD3DDeviceType;
{$ENDIF}
 
TCustomDXDraw = class(TCustomControl)
private
FAutoInitialize: Boolean;
364,6 → 634,9
FDriverGUID: TGUID;
FDDraw: TDirectDraw;
FDisplay: TDXDrawDisplay;
{$IFNDEF D3D_deprecated}
FDeviceTypeSet: TD3DDeviceTypeSet;{$ENDIF}
{$IFDEF _DMO_}FAdapters: TDirectXDriversEx;{$ENDIF}
FClipper: TDirectDrawClipper;
FPalette: TDirectDrawPalette;
FPrimary: TDirectDrawSurface;
371,14 → 644,19
FSurfaceWidth: Integer;
FSurfaceHeight: Integer;
{ Direct3D }
{$IFDEF D3D_deprecated}
FD3D: IDirect3D;
FD3D2: IDirect3D2;
FD3D3: IDirect3D3;
{$ENDIF}
FD3D7: IDirect3D7;
{$IFDEF D3D_deprecated}
FD3DDevice: IDirect3DDevice;
FD3DDevice2: IDirect3DDevice2;
FD3DDevice3: IDirect3DDevice3;
{$ENDIF}
FD3DDevice7: IDirect3DDevice7;
{$IFDEF D3DRM}
FD3DRM: IDirect3DRM;
FD3DRM2: IDirect3DRM2;
FD3DRM3: IDirect3DRM3;
388,14 → 666,18
FCamera: IDirect3DRMFrame;
FScene: IDirect3DRMFrame;
FViewport: IDirect3DRMViewport;
{$ENDIF}
FZBuffer: TDirectDrawSurface;
FD2D: TD2D;
FOnUpdateTextures: TOnUpdateTextures;
FTraces: TTraces;
FOnRender: TNotifyEvent;
procedure FormWndProc(var Message: TMessage; DefWindowProc: TWndMethod);
function GetCanDraw: Boolean;
function GetCanDraw: Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function GetCanPaletteAnimation: Boolean;
function GetSurfaceHeight: Integer;
function GetSurfaceWidth: Integer;
procedure NotifyEventList(NotifyType: TDXDrawNotifyType);
procedure SetAutoSize(Value: Boolean);
procedure SetColorTable(const ColorTable: TRGBQuads);
procedure SetCooperativeLevel;
procedure SetDisplay(Value: TDXDrawDisplay);
405,6 → 687,11
procedure SetSurfaceWidth(Value: Integer);
function TryRestore: Boolean;
procedure WMCreate(var Message: TMessage); message WM_CREATE;
function Fade2Color(colorfrom, colorto: Integer): LongInt;
function Grey2Fade(shadefrom, shadeto: Integer): Integer;
procedure SetTraces(const Value: TTraces);
function CheckD3: Boolean;
function CheckD3D(Dest: TDirectDrawSurface): Boolean;
protected
procedure DoFinalize; virtual;
procedure DoFinalizeSurface; virtual;
416,38 → 703,68
procedure Paint; override;
function PaletteChanged(Foreground: Boolean): Boolean; override;
procedure SetParent(AParent: TWinControl); override;
procedure SetAutoSize(Value: Boolean); {$IFDEF D6UP} override; {$ENDIF}
property OnUpdateTextures: TOnUpdateTextures read FOnUpdateTextures write FOnUpdateTextures;
property OnRender: TNotifyEvent read FOnRender write FOnRender;
public
ColorTable: TRGBQuads;
DefColorTable: TRGBQuads;
//
function Fade2Black(colorfrom: Integer): Longint;
function Fade2White(colorfrom: Integer): Longint;
//
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
class function Drivers: TDirectXDrivers;
{$IFDEF _DMO_}class function DriversEx: TDirectXDriversEx;{$ENDIF}
procedure Finalize;
procedure Flip;
procedure Initialize;
procedure Render;
procedure Render(LagCount: Integer{$IFDEF VER4UP} = 0{$ENDIF});
procedure Restore;
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
procedure SetSize(ASurfaceWidth, ASurfaceHeight: Integer);
procedure BeginScene;
procedure EndScene;
procedure TextureFilter(Grade: TD2DTextureFilter);
procedure AntialiasFilter(Grade: TD3DAntialiasMode);
procedure MirrorFlip(Value: TRenderMirrorFlipSet);
procedure SaveTextures(path: string);
procedure ClearStack;
procedure UpdateTextures;
{grab images}
procedure PasteImage(sdib: TDIB; x, y: Integer);
procedure GrabImage(iX, iY, iWidth, iHeight: Integer; ddib: TDIB);
{fades}
function Black2Screen(oldcolor: Integer): Longint;
function Fade2Screen(oldcolor, newcolour: Integer): LongInt;
function White2Screen(oldcolor: Integer): LongInt;
function FadeGrey2Screen(oldcolor, newcolour: LongInt): LongInt;
procedure UpdatePalette;
procedure RegisterNotifyEvent(NotifyEvent: TDXDrawNotifyEvent);
procedure UnRegisterNotifyEvent(NotifyEvent: TDXDrawNotifyEvent);
 
property AutoInitialize: Boolean read FAutoInitialize write FAutoInitialize;
property AutoSize: Boolean read FAutoSize write SetAutoSize;
property Camera: IDirect3DRMFrame read FCamera;
{$IFDEF D3DRM}property Camera: IDirect3DRMFrame read FCamera; {$ENDIF}
property CanDraw: Boolean read GetCanDraw;
property CanPaletteAnimation: Boolean read GetCanPaletteAnimation;
property Clipper: TDirectDrawClipper read FClipper;
property Color;
{$IFDEF D3D_deprecated}
property D3D: IDirect3D read FD3D;
property D3D2: IDirect3D2 read FD3D2;
property D3D3: IDirect3D3 read FD3D3;
{$ENDIF}
property D3D7: IDirect3D7 read FD3D7;
{$IFDEF D3D_deprecated}
property D3DDevice: IDirect3DDevice read FD3DDevice;
property D3DDevice2: IDirect3DDevice2 read FD3DDevice2;
property D3DDevice3: IDirect3DDevice3 read FD3DDevice3;
{$ENDIF}
property D3DDevice7: IDirect3DDevice7 read FD3DDevice7;
{$IFNDEF D3D_deprecated}
property D3DDeviceTypeSet: TD3DDeviceTypeSet read FDeviceTypeSet;{$ENDIF}
{$IFDEF D3DRM}
property D3DRM: IDirect3DRM read FD3DRM;
property D3DRM2: IDirect3DRM2 read FD3DRM2;
property D3DRM3: IDirect3DRM3 read FD3DRM3;
454,8 → 771,10
property D3DRMDevice: IDirect3DRMDevice read FD3DRMDevice;
property D3DRMDevice2: IDirect3DRMDevice2 read FD3DRMDevice2;
property D3DRMDevice3: IDirect3DRMDevice3 read FD3DRMDevice3;
{$ENDIF}
property DDraw: TDirectDraw read FDDraw;
property Display: TDXDrawDisplay read FDisplay write SetDisplay;
{$IFDEF _DMO_}property Adapter: TDirectXDriversEx read FAdapters write FAdapters;{$ENDIF}
property Driver: PGUID read FDriver write SetDriver;
property Initialized: Boolean read FInitialized;
property NowOptions: TDXDrawOptions read FNowOptions;
468,12 → 787,14
property Options: TDXDrawOptions read FOptions write SetOptions;
property Palette: TDirectDrawPalette read FPalette;
property Primary: TDirectDrawSurface read FPrimary;
property Scene: IDirect3DRMFrame read FScene;
{$IFDEF D3DRM}property Scene: IDirect3DRMFrame read FScene; {$ENDIF}
property Surface: TDirectDrawSurface read FSurface;
property SurfaceHeight: Integer read GetSurfaceHeight write SetSurfaceHeight default 480;
property SurfaceWidth: Integer read GetSurfaceWidth write SetSurfaceWidth default 640;
property Viewport: IDirect3DRMViewport read FViewport;
{$IFDEF D3DRM}property Viewport: IDirect3DRMViewport read FViewport; {$ENDIF}
property ZBuffer: TDirectDrawSurface read FZBuffer;
property D2D1: TD2D read FD2D; {public object is here}
property Traces: TTraces read FTraces write SetTraces;
end;
 
{ TDXDraw }
480,6 → 801,7
 
TDXDraw = class(TCustomDXDraw)
published
{$IFDEF _DMO_}property Adapter;{$ENDIF}
property AutoInitialize;
property AutoSize;
property Color;
493,10 → 815,12
property OnInitializeSurface;
property OnInitializing;
property OnRestoreSurface;
property OnUpdateTextures;
property OnRender;
 
property Align;
{$IFDEF DelphiX_Spt4}property Anchors;{$ENDIF}
{$IFDEF DelphiX_Spt4}property Constraints;{$ENDIF}
{$IFDEF VER4UP}property Anchors; {$ENDIF}
{$IFDEF VER4UP}property Constraints; {$ENDIF}
property DragCursor;
property DragMode;
property Enabled;
505,6 → 829,7
property ShowHint;
property TabOrder;
property TabStop;
property Traces;
property Visible;
property OnClick;
property OnDblClick;
519,7 → 844,12
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
{$IFDEF DelphiX_Spt4}property OnResize;{$ENDIF}
{$IFDEF VER9UP}
property OnMouseWheel;
property OnMouseWheelUp;
property OnMouseWheelDown;
{$ENDIF}
{$IFDEF VER4UP}property OnResize; {$ENDIF}
property OnStartDrag;
end;
 
527,6 → 857,314
 
EDX3DError = class(Exception);
 
{ DxTracer }
 
EDXTracerError = class(Exception);
EDXBlitError = class(Exception);
 
TTracePointsType = (tptDot, tptLine, tptCircle, tptCurve);
 
TBlitMoveEvent = procedure(Sender: TObject; LagCount: Integer; var MoveIt: Boolean) of object;
TWaveType = (wtWaveNone, wtWaveX, wtWaveY);
TBlitRec = packed record
FCollisioned: Boolean;
FMoved: Boolean;
FVisible: Boolean;
FX: Double;
FY: Double;
FZ: Integer;
FWidth: Integer;
FHeight: Integer;
//--
FAnimCount: Integer;
FAnimLooped: Boolean;
FAnimPos: Double;
FAnimSpeed: Double;
FAnimStart: Integer;
//FTile: Boolean;
FAngle: Single;
FAlpha: Integer;
FCenterX: Double;
FCenterY: Double;
FScale: Double;
FBlendMode: TRenderType;
FAmplitude: Integer;
FAmpLength: Integer;
FPhase: Integer;
FWaveType: TWaveType;
FSpeedX, FSpeedY: Single;
FGravityX, FGravityY: Single;
FEnergy: Single;
FBlurImage: Boolean;
FMirror: Boolean;
FFlip: Boolean;
FTextureFilter: TD2DTextureFilter;
end;
TBlurImageProp = packed record
eActive: Boolean;
eX, eY: Integer;
ePatternIndex: Integer; {when animated or 0 always}
eAngle: Single; //angle can be saved too
eBlendMode: TRenderType; //blend mode
eIntensity: Byte; {intensity of Blur/Add/Sub}
end;
 
TPath = packed record
X, Y, Z: Single;
StayOn: Integer; {in milisecond}
Reserved: string[28]; {for future use}
Tag: Integer;
end;
TPathArr = array{$IFNDEF VER4UP} [0..0]{$ENDIF} of TPath;
{$IFNDEF VER4UP}
PPathArr = ^TPathArr;
{$ENDIF}
TBlit = class;
 
TOnRender = procedure(Sender: TBlit) of object;
 
TBlurImageArr = array[0..7] of TBlurImageProp;
TBlit = class(TPersistent)
private
FPathArr: {$IFNDEF VER4UP}PPathArr{$ELSE}TPathArr{$ENDIF};
{$IFNDEF VER4UP}
FPathLen: Integer;
{$ENDIF}
FParent: TBlit;
FBlitRec: TBlitRec;
FBlurImageArr: TBlurImageArr;
FActive: Boolean;
//--
FImage: TPictureCollectionItem;
FOnMove: TBlitMoveEvent;
FOnDraw: TNotifyEvent;
FOnCollision: TNotifyEvent;
FOnGetImage: TNotifyEvent;
FEngine: TCustomDXDraw;
FMovingRepeatly: Boolean;
FBustrofedon: Boolean;
FOnRender: TOnRender;
function GetWorldX: Double;
function GetWorldY: Double;
function GetDrawImageIndex: Integer;
function GetAlpha: Byte;
function GetAmpLength: Integer;
function GetAmplitude: Integer;
function GetAngle: Single;
function GetAnimCount: Integer;
function GetAnimLooped: Boolean;
function GetAnimPos: Double;
function GetAnimSpeed: Double;
function GetAnimStart: Integer;
function GetBlendMode: TRenderType;
function GetBlurImage: Boolean;
function GetCenterX: Double;
function GetCenterY: Double;
function GetCollisioned: Boolean;
function GetEnergy: Single;
function GetFlip: Boolean;
function GetGravityX: Single;
function GetGravityY: Single;
function GetHeight: Integer;
function GetMirror: Boolean;
function GetMoved: Boolean;
function GetPhase: Integer;
function GetScale: Double;
function GetSpeedX: Single;
function GetSpeedY: Single;
function GetVisible: Boolean;
function GetWaveType: TWaveType;
function GetWidth: Integer;
function GetX: Double;
function GetY: Double;
function GetZ: Integer;
procedure SetAlpha(const Value: Byte);
procedure SetAmpLength(const Value: Integer);
procedure SetAmplitude(const Value: Integer);
procedure SetAngle(const Value: Single);
procedure SetAnimCount(const Value: Integer);
procedure SetAnimLooped(const Value: Boolean);
procedure SetAnimPos(const Value: Double);
procedure SetAnimSpeed(const Value: Double);
procedure SetAnimStart(const Value: Integer);
procedure SetBlendMode(const Value: TRenderType);
procedure SetBlurImage(const Value: Boolean);
procedure SetCenterX(const Value: Double);
procedure SetCenterY(const Value: Double);
procedure SetCollisioned(const Value: Boolean);
procedure SetEnergy(const Value: Single);
procedure SetFlip(const Value: Boolean);
procedure SetGravityX(const Value: Single);
procedure SetGravityY(const Value: Single);
procedure SetHeight(const Value: Integer);
procedure SetMirror(const Value: Boolean);
procedure SetMoved(const Value: Boolean);
procedure SetPhase(const Value: Integer);
procedure SetScale(const Value: Double);
procedure SetSpeedX(const Value: Single);
procedure SetSpeedY(const Value: Single);
procedure SetVisible(const Value: Boolean);
procedure SetWaveType(const Value: TWaveType);
procedure SetWidth(const Value: Integer);
procedure SetX(const Value: Double);
procedure SetY(const Value: Double);
procedure SetZ(const Value: Integer);
function StoreAngle: Boolean;
function StoreAnimPos: Boolean;
function StoreAnimSpeed: Boolean;
function StoreCenterX: Boolean;
function StoreCenterY: Boolean;
function StoreEnergy: Boolean;
function StoreGravityX: Boolean;
function StoreGravityY: Boolean;
function StoreScale: Boolean;
function StoreSpeedX: Boolean;
function StoreSpeedY: Boolean;
function GetBoundsRect: TRect;
function GetClientRect: TRect;
function GetPath(index: Integer): TPath;
procedure SetPath(index: Integer; const Value: TPath);
procedure ReadPaths(Stream: TStream);
procedure WritePaths(Stream: TStream);
function GetMovingRepeatly: Boolean;
procedure SetMovingRepeatly(const Value: Boolean);
function GetBustrofedon: Boolean;
procedure SetBustrofedon(const Value: Boolean);
function GetTextureFilter: TD2DTextureFilter;
procedure SetTextureFilter(const Value: TD2DTextureFilter);
protected
procedure DoDraw; virtual;
procedure DoMove(LagCount: Integer);
function DoCollision: TBlit; virtual;
procedure DoGetImage; virtual;
procedure DefineProperties(Filer: TFiler); override;
public
FCurrentPosition, FCurrentTime: Integer;
FCurrentDirection: Boolean;
constructor Create(AParent: TObject); virtual;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
property Engine: TCustomDXDraw read FEngine write FEngine;
property Parent: TBlit read FParent;
property WorldX: Double read GetWorldX;
property WorldY: Double read GetWorldY;
procedure ReAnimate(MoveCount: Integer); virtual;
property Image: TPictureCollectionItem read FImage write FImage;
property BoundsRect: TRect read GetBoundsRect;
property ClientRect: TRect read GetClientRect;
procedure SetPathLen(Len: Integer);
function IsPathEmpty: Boolean;
function GetPathCount: Integer;
function GetBlitAt(X, Y: Integer): TBlit;
property Path[index: Integer]: TPath read GetPath write SetPath; default;
published
property Active: Boolean read FActive write FActive default False;
//--
property Collisioned: Boolean read GetCollisioned write SetCollisioned default True;
property Moved: Boolean read GetMoved write SetMoved default True;
property Visible: Boolean read GetVisible write SetVisible default True;
property X: Double read GetX write SetX;
property Y: Double read GetY write SetY;
property Z: Integer read GetZ write SetZ;
property Width: Integer read GetWidth write SetWidth;
property Height: Integer read GetHeight write SetHeight;
property MovingRepeatly: Boolean read GetMovingRepeatly write SetMovingRepeatly default True;
property Bustrofedon: Boolean read GetBustrofedon write SetBustrofedon default False;
//--
property AnimCount: Integer read GetAnimCount write SetAnimCount default 0;
property AnimLooped: Boolean read GetAnimLooped write SetAnimLooped default False;
property AnimPos: Double read GetAnimPos write SetAnimPos stored StoreAnimPos;
property AnimSpeed: Double read GetAnimSpeed write SetAnimSpeed stored StoreAnimSpeed;
property AnimStart: Integer read GetAnimStart write SetAnimStart default 0;
property Angle: Single read GetAngle write SetAngle stored StoreAngle;
property Alpha: Byte read GetAlpha write SetAlpha default $FF;
property CenterX: Double read GetCenterX write SetCenterX stored StoreCenterX;
property CenterY: Double read GetCenterY write SetCenterY stored StoreCenterY;
property Scale: Double read GetScale write SetScale stored StoreScale;
property BlendMode: TRenderType read GetBlendMode write SetBlendMode default rtDraw;
property Amplitude: Integer read GetAmplitude write SetAmplitude default 0;
property AmpLength: Integer read GetAmpLength write SetAmpLength default 0;
property Phase: Integer read GetPhase write SetPhase default 0;
property WaveType: TWaveType read GetWaveType write SetWaveType default wtWaveNone;
property SpeedX: Single read GetSpeedX write SetSpeedX stored StoreSpeedX;
property SpeedY: Single read GetSpeedY write SetSpeedY stored StoreSpeedY;
property GravityX: Single read GetGravityX write SetGravityX stored StoreGravityX;
property GravityY: Single read GetGravityY write SetGravityY stored StoreGravityY;
property Energy: Single read GetEnergy write SetEnergy stored StoreEnergy;
property BlurImage: Boolean read GetBlurImage write SetBlurImage default False;
property Mirror: Boolean read GetMirror write SetMirror default False;
property Flip: Boolean read GetFlip write SetFlip default False;
property TextureFilter: TD2DTextureFilter read GetTextureFilter write SetTextureFilter default D2D_POINT;
 
property OnGetImage: TNotifyEvent read FOnGetImage write FOnGetImage;
property OnMove: TBlitMoveEvent read FOnMove write FOnMove;
property OnDraw: TNotifyEvent read FOnDraw write FOnDraw;
property OnCollision: TNotifyEvent read FOnCollision write FOnCollision;
property OnRender: TOnRender read FOnRender write FOnRender;
end;
 
TTrace = class(THashCollectionItem)
private
FActualized: Boolean;
FTag: Integer;
FBlit: TBlit;
function GetTraces: TTraces;
function GetOnCollision: TNotifyEvent;
function GetOnDraw: TNotifyEvent;
function GetOnGetImage: TNotifyEvent;
function GetOnMove: TBlitMoveEvent;
procedure SetOnCollision(const Value: TNotifyEvent);
procedure SetOnDraw(const Value: TNotifyEvent);
procedure SetOnGetImage(const Value: TNotifyEvent);
procedure SetOnMove(const Value: TBlitMoveEvent);
function GetActive: Boolean;
procedure SetActive(const Value: Boolean);
function GetOnRender: TOnRender;
procedure SetOnRender(const Value: TOnRender);
protected
function GetDisplayName: string; override;
procedure SetDisplayName(const Value: string); override;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
procedure Render(const LagCount: Integer);
function IsActualized: Boolean;
procedure Assign(Source: TPersistent); override;
property Traces: TTraces read GetTraces;
function Clone(NewName: string; OffsetX: Integer{$IFDEF VER4UP} = 0{$ENDIF}; OffsetY: Integer{$IFDEF VER4UP} = 0{$ENDIF}; Angle: Single{$IFDEF VER4UP} = 0{$ENDIF}): TTrace;
published
property Active: Boolean read GetActive write SetActive;
property Tag: Integer read FTag write FTag;
property Blit: TBlit read FBlit write FBlit;
{events}
property OnGetImage: TNotifyEvent read GetOnGetImage write SetOnGetImage;
property OnMove: TBlitMoveEvent read GetOnMove write SetOnMove;
property OnDraw: TNotifyEvent read GetOnDraw write SetOnDraw;
property OnCollision: TNotifyEvent read GetOnCollision write SetOnCollision;
property OnRender: TOnRender read GetOnRender write SetOnRender;
end;
 
TTraces = class(THashCollection)
private
FOwner: TPersistent;
function GetItem(Index: Integer): TTrace;
procedure SetItem(Index: Integer; Value: TTrace);
protected
function GetOwner: TPersistent; override;
public
constructor Create(AOwner: TComponent);
function Add: TTrace;
function Find(const Name: string): TTrace;
{$IFDEF VER4UP}
function Insert(Index: Integer): TTrace;
{$ENDIF}
procedure Update(Item: TCollectionItem); override;
property Items[Index: Integer]: TTrace read GetItem write SetItem;
destructor Destroy; override;
end;
 
{$IFDEF DX3D_deprecated}
 
{ TCustomDX3D }
 
TDX3DOption = (toRetainedMode, toSystemMemory, toHardware, toSelectDriver, toZBuffer);
536,15 → 1174,20
TCustomDX3D = class(TComponent)
private
FAutoSize: Boolean;
FCamera: IDirect3DRMFrame;
{$IFDEF D3DRM}FCamera: IDirect3DRMFrame; {$ENDIF}
{$IFDEF D3D_deprecated}
FD3D: IDirect3D;
FD3D2: IDirect3D2;
FD3D3: IDirect3D3;
{$ENDIF}
FD3D7: IDirect3D7;
{$IFDEF D3D_deprecated}
FD3DDevice: IDirect3DDevice;
FD3DDevice2: IDirect3DDevice2;
FD3DDevice3: IDirect3DDevice3;
{$ENDIF}
FD3DDevice7: IDirect3DDevice7;
{$IFDEF D3DRM}
FD3DRM: IDirect3DRM;
FD3DRM2: IDirect3DRM2;
FD3DRM3: IDirect3DRM3;
551,6 → 1194,7
FD3DRMDevice: IDirect3DRMDevice;
FD3DRMDevice2: IDirect3DRMDevice2;
FD3DRMDevice3: IDirect3DRMDevice3;
{$ENDIF}
FDXDraw: TCustomDXDraw;
FInitFlag: Boolean;
FInitialized: Boolean;
558,11 → 1202,11
FOnFinalize: TNotifyEvent;
FOnInitialize: TNotifyEvent;
FOptions: TDX3DOptions;
FScene: IDirect3DRMFrame;
{$IFDEF D3DRM}FScene: IDirect3DRMFrame; {$ENDIF}
FSurface: TDirectDrawSurface;
FSurfaceHeight: Integer;
FSurfaceWidth: Integer;
FViewport: IDirect3DRMViewport;
{$IFDEF D3DRM}FViewport: IDirect3DRMViewport; {$ENDIF}
FZBuffer: TDirectDrawSurface;
procedure Finalize;
procedure Initialize;
572,7 → 1216,7
function GetSurfaceWidth: Integer;
procedure SetAutoSize(Value: Boolean);
procedure SetDXDraw(Value: TCustomDXDraw);
procedure SetOptions(Value: TDX3DOptions);
procedure SetOptions(Value: TDX3DOptions); virtual; {TridenT}
procedure SetSurfaceHeight(Value: Integer);
procedure SetSurfaceWidth(Value: Integer);
protected
585,16 → 1229,19
procedure Render;
procedure SetSize(ASurfaceWidth, ASurfaceHeight: Integer);
property AutoSize: Boolean read FAutoSize write SetAutoSize;
property Camera: IDirect3DRMFrame read FCamera;
{$IFDEF D3DRM}property Camera: IDirect3DRMFrame read FCamera; {$ENDIF}
property CanDraw: Boolean read GetCanDraw;
property D3D: IDirect3D read FD3D;
property D3D2: IDirect3D2 read FD3D2;
property D3D3: IDirect3D3 read FD3D3;
property D3D7: IDirect3D7 read FD3D7;
{$IFDEF D3D_deprecated}
property D3DDevice: IDirect3DDevice read FD3DDevice;
property D3DDevice2: IDirect3DDevice2 read FD3DDevice2;
property D3DDevice3: IDirect3DDevice3 read FD3DDevice3;
{$ENDIF}
property D3DDevice7: IDirect3DDevice7 read FD3DDevice7;
{$IFDEF D3DRM}
property D3DRM: IDirect3DRM read FD3DRM;
property D3DRM2: IDirect3DRM2 read FD3DRM2;
property D3DRM3: IDirect3DRM3 read FD3DRM3;
601,6 → 1248,7
property D3DRMDevice: IDirect3DRMDevice read FD3DRMDevice;
property D3DRMDevice2: IDirect3DRMDevice2 read FD3DRMDevice2;
property D3DRMDevice3: IDirect3DRMDevice3 read FD3DRMDevice3;
{$ENDIF}
property DXDraw: TCustomDXDraw read FDXDraw write SetDXDraw;
property Initialized: Boolean read FInitialized;
property NowOptions: TDX3DOptions read FNowOptions;
607,11 → 1255,11
property OnFinalize: TNotifyEvent read FOnFinalize write FOnFinalize;
property OnInitialize: TNotifyEvent read FOnInitialize write FOnInitialize;
property Options: TDX3DOptions read FOptions write SetOptions;
property Scene: IDirect3DRMFrame read FScene;
{$IFDEF D3DRM}property Scene: IDirect3DRMFrame read FScene; {$ENDIF}
property Surface: TDirectDrawSurface read FSurface;
property SurfaceHeight: Integer read GetSurfaceHeight write SetSurfaceHeight default 480;
property SurfaceWidth: Integer read GetSurfaceWidth write SetSurfaceWidth default 640;
property Viewport: IDirect3DRMViewport read FViewport;
{$IFDEF D3DRM}property Viewport: IDirect3DRMViewport read FViewport; {$ENDIF}
property ZBuffer: TDirectDrawSurface read FZBuffer;
end;
 
627,6 → 1275,7
property OnFinalize;
property OnInitialize;
end;
{$ENDIF}
 
{ EDirect3DTextureError }
 
644,13 → 1293,13
FHandle: TD3DTextureHandle;
FPaletteEntries: TPaletteEntries;
FSurface: TDirectDrawSurface;
FTexture: IDirect3DTexture;
FTexture: {$IFDEF D3D_deprecated}IDirect3DTexture{$ELSE}IDirect3DTexture2{$ENDIF};
FTransparentColor: TColor;
procedure Clear;
procedure DXDrawNotifyEvent(Sender: TCustomDXDraw; NotifyType: TDXDrawNotifyType);
function GetHandle: TD3DTextureHandle;
function GetSurface: TDirectDrawSurface;
function GetTexture: IDirect3DTexture;
function GetTexture: {$IFDEF D3D_deprecated}IDirect3DTexture{$ELSE}IDirect3DTexture2{$ENDIF};
procedure SetTransparentColor(Value: TColor);
public
constructor Create(Graphic: TGraphic; DXDraw: TComponent);
659,9 → 1308,133
property Handle: TD3DTextureHandle read GetHandle;
property Surface: TDirectDrawSurface read GetSurface;
property TransparentColor: TColor read FTransparentColor write SetTransparentColor;
property Texture: IDirect3DTexture read GetTexture;
property Texture: {$IFDEF D3D_deprecated}IDirect3DTexture{$ELSE}IDirect3DTexture2{$ENDIF} read GetTexture;
end;
 
{ EDXTextureImageError }
 
EDXTextureImageError = class(Exception);
 
{ channel structure }
 
TDXTextureImageChannel = record
Mask: DWORD;
BitCount: Integer;
 
{ Internal use }
_Mask2: DWORD;
_rshift: Integer;
_lshift: Integer;
_BitCount2: Integer;
end;
 
TDXTextureImage_PaletteEntries = array[0..255] of TPaletteEntry;
 
TDXTextureImageType = (
DXTextureImageType_PaletteIndexedColor,
DXTextureImageType_RGBColor
);
 
TDXTextureImageFileCompressType = (
DXTextureImageFileCompressType_None,
DXTextureImageFileCompressType_ZLIB
);
 
{forward}
 
TDXTextureImage = class;
 
{ TDXTextureImageLoadFunc }
 
TDXTextureImageLoadFunc = procedure(Stream: TStream; Image: TDXTextureImage);
 
{ TDXTextureImageProgressEvent }
 
TDXTextureImageProgressEvent = procedure(Sender: TObject; Progress, ProgressCount: Integer) of object;
 
{ TDXTextureImage }
 
TDXTextureImage = class
private
FOwner: TDXTextureImage;
FFileCompressType: TDXTextureImageFileCompressType;
FOnSaveProgress: TDXTextureImageProgressEvent;
FSubImage: TList;
FImageType: TDXTextureImageType;
FWidth: Integer;
FHeight: Integer;
FPBits: Pointer;
FBitCount: Integer;
FPackedPixelOrder: Boolean;
FWidthBytes: Integer;
FNextLine: Integer;
FSize: Integer;
FTopPBits: Pointer;
FTransparent: Boolean;
FTransparentColor: DWORD;
FImageGroupType: DWORD;
FImageID: DWORD;
FImageName: string;
FAutoFreeImage: Boolean;
procedure ClearImage;
function GetPixel(x, y: Integer): DWORD;
procedure SetPixel(x, y: Integer; c: DWORD);
function GetScanLine(y: Integer): Pointer;
function GetSubGroupImageCount(GroupTypeID: DWORD): Integer;
function GetSubGroupImage(GroupTypeID: DWORD; Index: Integer): TDXTextureImage;
function GetSubImageCount: Integer;
function GetSubImage(Index: Integer): TDXTextureImage;
protected
procedure DoSaveProgress(Progress, ProgressCount: Integer); virtual;
public
idx_index: TDXTextureImageChannel;
idx_alpha: TDXTextureImageChannel;
idx_palette: TDXTextureImage_PaletteEntries;
rgb_red: TDXTextureImageChannel;
rgb_green: TDXTextureImageChannel;
rgb_blue: TDXTextureImageChannel;
rgb_alpha: TDXTextureImageChannel;
constructor Create;
constructor CreateSub(AOwner: TDXTextureImage);
destructor Destroy; override;
procedure Assign(Source: TDXTextureImage);
procedure Clear;
procedure SetImage(ImageType: TDXTextureImageType; Width, Height, BitCount, WidthBytes, NextLine: Integer;
PBits, TopPBits: Pointer; Size: Integer; AutoFree: Boolean);
procedure SetSize(ImageType: TDXTextureImageType; Width, Height, BitCount, WidthBytes: Integer);
procedure LoadFromFile(const FileName: string);
procedure LoadFromStream(Stream: TStream);
procedure SaveToFile(const FileName: string);
procedure SaveToStream(Stream: TStream);
function EncodeColor(R, G, B, A: Byte): DWORD;
function PaletteIndex(R, G, B: Byte): DWORD;
class procedure RegisterLoadFunc(LoadFunc: TDXTextureImageLoadFunc);
class procedure UnRegisterLoadFunc(LoadFunc: TDXTextureImageLoadFunc);
property BitCount: Integer read FBitCount;
property PackedPixelOrder: Boolean read FPackedPixelOrder write FPackedPixelOrder;
property Height: Integer read FHeight;
property ImageType: TDXTextureImageType read FImageType;
property ImageGroupType: DWORD read FImageGroupType write FImageGroupType;
property ImageID: DWORD read FImageID write FImageID;
property ImageName: string read FImageName write FImageName;
property NextLine: Integer read FNextLine;
property PBits: Pointer read FPBits;
property Pixels[x, y: Integer]: DWORD read GetPixel write SetPixel;
property ScanLine[y: Integer]: Pointer read GetScanLine;
property Size: Integer read FSize;
property SubGroupImageCount[GroupTypeID: DWORD]: Integer read GetSubGroupImageCount;
property SubGroupImages[GroupTypeID: DWORD; Index: Integer]: TDXTextureImage read GetSubGroupImage;
property SubImageCount: Integer read GetSubImageCount;
property SubImages[Index: Integer]: TDXTextureImage read GetSubImage;
property TopPBits: Pointer read FTopPBits;
property Transparent: Boolean read FTransparent write FTransparent;
property TransparentColor: DWORD read FTransparentColor write FTransparentColor;
property Width: Integer read FWidth;
property WidthBytes: Integer read FWidthBytes;
property FileCompressType: TDXTextureImageFileCompressType read FFileCompressType write FFileCompressType;
property OnSaveProgress: TDXTextureImageProgressEvent read FOnSaveProgress write FOnSaveProgress;
end;
 
{ TDirect3DTexture2 }
 
TDirect3DTexture2 = class
684,18 → 1457,20
FD3DDevDesc: TD3DDeviceDesc;
procedure DXDrawNotifyEvent(Sender: TCustomDXDraw; NotifyType: TDXDrawNotifyType);
procedure SetDXDraw(ADXDraw: TCustomDXDraw);
procedure LoadSubTexture(Dest: IDirectDrawSurface4; SrcImage: TDXTextureImage);
procedure LoadSubTexture(Dest: {$IFDEF D3D_deprecated}IDirectDrawSurface4{$ELSE}IDirectDrawSurface7{$ENDIF}; SrcImage: TDXTextureImage);
procedure SetColorKey;
procedure SetDIB(DIB: TDIB);
function GetIsMipmap: Boolean;
function GetSurface: TDirectDrawSurface;
function GetTransparent: Boolean;
procedure SetTransparent(Value: Boolean);
procedure SetTransparentColor(Value: TColorRef);
function GetIsMipmap: Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function GetSurface: TDirectDrawSurface; {$IFDEF VER9UP}inline;{$ENDIF}
function GetTransparent: Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
procedure SetTransparent(Value: Boolean); {$IFDEF VER9UP}inline;{$ENDIF}
procedure SetTransparentColor(Value: TColorRef); {$IFDEF VER9UP}inline;{$ENDIF}
function GetHeight: Integer;
function GetWidth: Integer;
protected
procedure DoRestoreSurface; virtual;
public
constructor Create(ADXDraw: TCustomDXDraw; Graphic: TObject; AutoFreeGraphic: Boolean);
constructor Create(ADXDraw: TCustomDXDraw; Graphic: TObject; AutoFreeGraphic: Boolean{$IFDEF VER4UP} = False{$ENDIF});
constructor CreateFromFile(ADXDraw: TCustomDXDraw; const FileName: string);
constructor CreateVideoTexture(ADXDraw: TCustomDXDraw);
destructor Destroy; override;
702,6 → 1477,8
procedure Finalize;
procedure Load;
procedure Initialize;
property Height: Integer read GetHeight;
property Width: Integer read GetWidth;
property IsMipmap: Boolean read GetIsMipmap;
property Surface: TDirectDrawSurface read GetSurface;
property TextureFormat: TDDSurfaceDesc2 read FTextureFormat write FTextureFormat;
710,6 → 1487,103
property OnRestoreSurface: TNotifyEvent read FOnRestoreSurface write FOnRestoreSurface;
end;
 
{ EDXTBaseError }
 
EDXTBaseError = class(Exception);
 
{ parameters for DXT generator }
 
TDXTImageChannel = (rgbNone, rgbRed, rgbGreen, rgbBlue, rgbAlpha, yuvY);
TDXTImageChannels = set of TDXTImageChannel;
 
TDXTImageChannelInfo = packed record
Image: TDXTextureImage;
BitCount: Integer;
end;
 
TDXTImageFormat = packed record
ImageType: TDXTextureImageType;
Width: Integer;
Height: Integer;
Bits: Pointer;
BitCount: Integer;
WidthBytes: Integer;
{transparent}
Transparent: Boolean;
TransparentColor: TColorRef;
{texture channels}
idx_index: TDXTextureImageChannel;
idx_alpha: TDXTextureImageChannel;
idx_palette: TDXTextureImage_PaletteEntries;
rgb_red: TDXTextureImageChannel;
rgb_green: TDXTextureImageChannel;
rgb_blue: TDXTextureImageChannel;
rgb_alpha: TDXTextureImageChannel;
{compress level}
Compress: TDXTextureImageFileCompressType;
MipmapCount: Integer;
Name: string;
end;
 
{ TDXTBase }
 
{Note JB.}
{Class for DXT generation files, primary use for load bitmap 32 with alphachannel}
{recoded and class created by JB.}
TDXTBase = class
private
FHasChannels: TDXTImageChannels;
FHasChannelImages: array[TDXTImageChannel] of TDXTImageChannelInfo;
FChannelChangeTable: array[TDXTImageChannel] of TDXTImageChannel;
FHasImageList: TList;
FParamsFormat: TDXTImageFormat;
FStrImageFileName: string;
FDIB: TDIB;
function GetCompression: TDXTextureImageFileCompressType;
function GetHeight: Integer;
function GetMipmap: Integer;
function GetTransparentColor: TColorRef;
function GetWidth: Integer;
procedure SetCompression(const Value: TDXTextureImageFileCompressType);
procedure SetHeight(const Value: Integer);
procedure SetMipmap(const Value: Integer);
procedure SetTransparentColor(const Value: TColorRef);
procedure SetWidth(const Value: Integer);
procedure SetTransparentColorIndexed(const Value: TColorRef);
function GetTexture: TDXTextureImage;
procedure Resize(Image: TDXTextureImage; NewWidth, NewHeight: Integer;
FilterTypeResample: TFilterTypeResample);
procedure EvaluateChannels(const CheckChannelUsed: TDXTImageChannels;
const CheckChannelChanged, CheckBitCountForChannel: string);
function GetPicture: TDXTextureImage;
protected
procedure CalcOutputBitFormat;
procedure BuildImage(Image: TDXTextureImage);
public
constructor Create;
destructor Destroy; override;
procedure SetChannelR(T: TDIB);
procedure SetChannelG(T: TDIB);
procedure SetChannelB(T: TDIB);
procedure SetChannelA(T: TDIB);
procedure LoadChannelAFromFile(const FileName: string);
procedure SetChannelY(T: TDIB);
procedure SetChannelRGB(T: TDIB);
procedure LoadChannelRGBFromFile(const FileName: string);
procedure SetChannelRGBA(T: TDIB);
procedure LoadChannelRGBAFromFile(const FileName: string);
procedure SaveToFile(iFilename: string {$IFDEF VER4UP} = ''{$ENDIF});
function LoadFromFile(iFilename: string): Boolean;
property TransparentColor: TColorRef read GetTransparentColor write SetTransparentColor;
property TransparentColorIndexed: TColorRef read GetTransparentColor write SetTransparentColorIndexed;
property Width: Integer read GetWidth write SetWidth;
property Height: Integer read GetHeight write SetHeight;
property Compression: TDXTextureImageFileCompressType read GetCompression write SetCompression;
property Mipmap: Integer read GetMipmap write SetMipmap;
property Texture: TDXTextureImage read GetTexture;
end;
 
{$IFDEF D3DRM}
{ EDirect3DRMUserVisualError }
 
EDirect3DRMUserVisualError = class(Exception);
727,6 → 1601,7
destructor Destroy; override;
property UserVisual: IDirect3DRMUserVisual read FUserVisual;
end;
{$ENDIF}
 
{ EPictureCollectionError }
 
756,7 → 1631,7
function GetPictureCollection: TPictureCollection;
function GetPatternRect(Index: Integer): TRect;
function GetPatternSurface(Index: Integer): TDirectDrawSurface;
function GetPatternCount: Integer;
function GetPatternCount: Integer; {$IFDEF VER9UP}inline;{$ENDIF}
function GetWidth: Integer;
procedure SetPicture(Value: TPicture);
procedure SetTransparentColor(Value: TColor);
763,34 → 1638,82
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
procedure UpdateTag;
procedure Assign(Source: TPersistent); override;
procedure Draw(Dest: TDirectDrawSurface; X, Y: Integer; PatternIndex: Integer);
// Modifier par MKost d'Uk@Team tous droit réservé.
// 22:02 04/11/2005
// Ajouté :
// Dans TPictureCollectionItem
// procedure DrawFlipH(Dest: TDirectDrawSurface; X, Y: Integer; PatternIndex: Integer);
// -Effectue un flip Horizontale de l'image
// procedure DrawFlipHV(Dest: TDirectDrawSurface; X, Y: Integer; PatternIndex: Integer);
// -Effectue un flip Oblique de l'image
// procedure DrawFlipV(Dest: TDirectDrawSurface; X, Y: Integer; PatternIndex: Integer);
// -Effectue un flip Verticale de l'image
procedure DrawFlipH(Dest: TDirectDrawSurface; X, Y: Integer; PatternIndex: Integer);
procedure DrawFlipHV(Dest: TDirectDrawSurface; X, Y: Integer; PatternIndex: Integer);
procedure DrawFlipV(Dest: TDirectDrawSurface; X, Y: Integer; PatternIndex: Integer);
procedure StretchDraw(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer);
procedure DrawAdd(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer;
Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawAddCol(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer;
Color: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawAlpha(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer;
Alpha: Integer);
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawAlphaCol(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer;
Color: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawSub(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer;
Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawSubCol(Dest: TDirectDrawSurface; const DestRect: TRect;
PatternIndex, Color: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
{Rotate}
procedure DrawRotate(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
CenterX, CenterY: Double; Angle: Integer);
CenterX, CenterY: Double; Angle: single);
procedure DrawRotateAdd(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
CenterX, CenterY: Double; Angle: Integer;
Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
CenterX, CenterY: Double; Angle: single;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawRotateAddCol(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
CenterX, CenterY: Double; Angle: single;
Color: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawRotateAlpha(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
CenterX, CenterY: Double; Angle: Integer;
Alpha: Integer);
CenterX, CenterY: Double; Angle: single;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawRotateAlphaCol(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
CenterX, CenterY: Double; Angle: single;
Color: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawRotateSub(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
CenterX, CenterY: Double; Angle: Integer;
Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
CenterX, CenterY: Double; Angle: single;
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawRotateSubCol(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
CenterX, CenterY: Double; Angle: single;
Color: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
{WaveX}
procedure DrawWaveX(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
amp, Len, ph: Integer);
procedure DrawWaveXAdd(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
amp, Len, ph: Integer; Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
amp, Len, ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawWaveXAlpha(Dest: TDirectDrawSurface; X, Y, Width, Height, PatternIndex: Integer;
amp, Len, ph: Integer; Alpha: Integer);
amp, Len, ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawWaveXSub(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
amp, Len, ph: Integer; Alpha: Integer{$IFDEF DelphiX_Spt4}=255{$ENDIF});
amp, Len, ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
{WaveY}
procedure DrawWaveY(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
amp, Len, ph: Integer);
procedure DrawWaveYAdd(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
amp, Len, ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawWaveYAlpha(Dest: TDirectDrawSurface; X, Y, Width, Height, PatternIndex: Integer;
amp, Len, ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawWaveYSub(Dest: TDirectDrawSurface; X, Y, Width, Height: Integer; PatternIndex: Integer;
amp, Len, ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
{SpecialDraw}
procedure DrawCol(Dest: TDirectDrawSurface; const DestRect, SourceRect: TRect;
PatternIndex: Integer; Faded: Boolean; RenderType: TRenderType; Color,
Specular: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure DrawRect(Dest: TDirectDrawSurface;
const DestRect, SourceRect: TRect; PatternIndex: Integer;
RenderType: TRenderType; Transparent: Boolean{$IFDEF VER4UP} = True{$ENDIF};
Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF});
procedure Restore;
property Height: Integer read GetHeight;
property Initialized: Boolean read FInitialized;
830,6 → 1753,7
function Find(const Name: string): TPictureCollectionItem;
procedure Finalize;
procedure Initialize(DXDraw: TCustomDXDraw);
procedure InitializeImages(DXDraw: TCustomDXDraw; Id : Integer);
procedure LoadFromFile(const FileName: string);
procedure LoadFromStream(Stream: TStream);
procedure MakeColorTable;
891,7 → 1815,7
constructor CreateWindowed(WindowHandle: HWND);
destructor Destroy; override;
procedure Finalize;
procedure Initialize(const SurfaceDesc: TDDSurfaceDesc);
procedure Initialize(const SurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF});
procedure Flip;
property OverlayColorKey: TColor read FOverlayColorKey write SetOverlayColorKey;
property OverlayRect: TRect read FOverlayRect write SetOverlayRect;
900,27 → 1824,542
property Visible: Boolean read FVisible write SetVisible;
end;
 
{
Modified by Michael Wilson 2/05/2001
- re-added redundant assignment to Offset
Modified by Marcus Knight 19/12/2000
- replaces all referaces to 'pos' with 'AnsiPos' <- faster
- replaces all referaces to 'uppercase' with 'Ansiuppercase' <- faster
- Now only uppercases outside the loop
- Fixed the non-virtual contructor
- renamed & moved Offset to private(fOffSet), and added the property OffSet
- Commented out the redundant assignment to Offset<- not needed, as Offset is now a readonly property
- Added the Notification method to catch when the image list is destroyed
- removed DXclasses from used list
}
 
TDXFont = class(TComponent)
private
FDXImageList: TDXImageList;
FFont: string;
FFontIndex: Integer;
FOffset: Integer; // renamed from Offset -> fOffset
procedure SetFont(const Value: string);
procedure SetFontIndex(const Value: Integer);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override; // added
public
constructor Create(AOwner: TComponent); override; // Modified
destructor Destroy; override;
procedure TextOut(DirectDrawSurface: TDirectDrawSurface; X, Y: Integer; const Text: string);
property Offset: Integer read FOffset write FOffset; // added
published
property Font: string read FFont write SetFont;
property FontIndex: Integer read FFontIndex write SetFontIndex;
property DXImageList: TDXImageList read FDXImageList write FDXImageList;
end;
 
(*******************************************************************************
* Unit Name: DXPowerFont.pas
* Information: Writed By Ramin.S.Zaghi (Based On Wilson's DXFont Unit)
* Last Changes: Dec 25 2000;
* Unit Information:
* This unit includes a VCL-Component for DelphiX. This component draws the
* Character-Strings on a TDirectDrawSurface. This component helps the
* progarmmers to using custom fonts and printing texts easily such as
* TCanvas.TextOut function...
* Includes:
* 1. TDXPowerFontTextOutEffect ==> The kinds of drawing effects.
* - teNormal: Uses the Draw function. (Normal output)
* - teRotat: Uses the DrawRotate function. (Rotates each character)
* - teAlphaBlend: Uses DrawAlpha function. (Blends each character)
* - teWaveX: Uses DrawWaveX function. (Adds a Wave effect to the each character)
*
* 2. TDXPowerFontTextOutType ==> The kinds of each caracter.
* - ttUpperCase: Uppers all characters automaticaly.
* - ttLowerCase: Lowers all characters automaticaly.
* - ttNormal: Uses all characters with out any converting.
*
* 3. TDXPowerFontEffectsParameters ==> Includes the parameters for adding effects to the characters.
* - (CenterX, CenterY): The rotating center point.
* - (Width, Height): The new size of each character.
* - Angle: The angle of rotate.
* - AlphaValue: The value of Alpha-Chanel.
* - WAmplitude: The Amplitude of Wave function. (See The Help Of DelphiX)
* - WLenght: The Lenght Of Wave function. (See The Help Of DelphiX)
* - WPhase: The Phase Of Wave function. (See The Help Of DelphiX)
*
* 4. TDXPowerFontBeforeTextOutEvent ==> This is an event that occures before
* drawing texts on to TDirectDrawSurface object.
* - Sender: Retrieves the event caller object.
* - Text: Retrieves the text sended text for drawing.
* (NOTE: The changes will have effect)
* - DoTextOut: The False value means that the TextOut function must be stopped.
* (NOTE: The changes will have effect)
*
* 5. TDXPowerFontAfterTextOutEvent ==> This is an event that occures after
* drawing texts on to TDirectDrawSurface object.
* - Sender: Retrieves the event caller object.
* - Text: Retrieves the text sended text for drawing.
* (NOTE: The changes will not have any effects)
*
* 6. TDXPowerFont ==> I sthe main class of PowerFont VCL-Component.
* - property Font: string; The name of custom-font's image in the TDXImageList items.
* - property FontIndex: Integer; The index of custom-font's image in the TDXImageList items.
* - property DXImageList: TDXImageList; The TDXImageList that includes the image of custom-fonts.
* - property UseEnterChar: Boolean; When the value of this property is True, The component caculates Enter character.
* - property EnterCharacter: String;
*==> Note that TDXPowerFont calculates tow kinds of enter character:
*==> E1. The Enter character that draws the characters after it self in a new line and after last drawed character, ONLY.
*==> E2. The Enter character that draws the characters after it self in a new line such as #13#10 enter code in delphi.
*==> Imporatant::
*==> (E1) TDXPowerFont uses the first caracter of EnterCharacter string as the first enter caracter (Default value is '|').
*==> (E2) and uses the second character as the scond enter caracter (Default value is '<')
* - property BeforeTextOut: TDXPowerFontBeforeTextOutEvent; See TDXPowerFontBeforeTextOutEvent.
* - property AfterTextOut: TDXPowerFontAfterTextOutEvent; See TDXPowerFontAfterTextOutEvent.
* - property Alphabets: string; TDXPowerFont uses this character-string for retrieving the pattern number of each character.
* - property TextOutType: TDXPowerFontTextOutType; See TDXPowerFontTextOutType.
* - property TextOutEffect: TDXPowerFontTextOutEffect; See TDXPowerFontTextOutEffect.
* - property EffectsParameters: TDXPowerFontEffectsParameters; See TDXPowerFontEffectsParameters.
*
* - function TextOut(DirectDrawSurface: TDirectDrawSurface; X, Y: Integer; const Text: string): Boolean;
* This function draws/prints the given text on the given TDirectDrawSurface.
* - DirectDrawSurface: The surface for drawing text (character-string).
* - (X , Y): The first point of outputed text. (Such as X,Y parameters in TCanvas.TextOut function)
* - Text: The text for printing.
* Return values: This function returns False when an error occured or...
* - function TextOutFast(DirectDrawSurface: TDirectDrawSurface; X, Y: Integer; const Text: string): Boolean;
* This function works such as TextOut function but,
* with out calculating any Parameters/Effects/Enter-Characters/etc...
* This function calculates the TextOutType, ONLY.
*
* Ramin.S.Zaghi (ramin_zaghi@yahoo.com)
* (Based on wilson's code for TDXFont VCL-Component/Add-On)
* (wilson@no2games.com)
*
* For more information visit:
* www.no2games.com
* turbo.gamedev.net
******************************************************************************)
 
{ DXPowerFont types }
 
TDXPowerFontTextOutEffect = (teNormal, teRotat, teAlphaBlend, teWaveX);
TDXPowerFontTextOutType = (ttUpperCase, ttLowerCase, ttNormal);
TDXPowerFontBeforeTextOutEvent = procedure(Sender: TObject; var Text: string; var DoTextOut: Boolean) of object;
TDXPowerFontAfterTextOutEvent = procedure(Sender: TObject; Text: string) of object;
 
{ TDXPowerFontEffectsParameters }
 
TDXPowerFontEffectsParameters = class(TPersistent)
private
FCenterX: Integer;
FCenterY: Integer;
FHeight: Integer;
FWidth: Integer;
FAngle: Integer;
FAlphaValue: Integer;
FWPhase: Integer;
FWAmplitude: Integer;
FWLenght: Integer;
procedure SetAngle(const Value: Integer);
procedure SetCenterX(const Value: Integer);
procedure SetCenterY(const Value: Integer);
procedure SetHeight(const Value: Integer);
procedure SetWidth(const Value: Integer);
procedure SetAlphaValue(const Value: Integer);
procedure SetWAmplitude(const Value: Integer);
procedure SetWLenght(const Value: Integer);
procedure SetWPhase(const Value: Integer);
published
property CenterX: Integer read FCenterX write SetCenterX;
property CenterY: Integer read FCenterY write SetCenterY;
property Width: Integer read FWidth write SetWidth;
property Height: Integer read FHeight write SetHeight;
property Angle: Integer read FAngle write SetAngle;
property AlphaValue: Integer read FAlphaValue write SetAlphaValue;
property WAmplitude: Integer read FWAmplitude write SetWAmplitude;
property WLenght: Integer read FWLenght write SetWLenght;
property WPhase: Integer read FWPhase write SetWPhase;
end;
 
{ TDXPowerFont }
 
TDXPowerFont = class(TComponent)
private
FDXImageList: TDXImageList;
FFont: string;
FFontIndex: Integer;
FUseEnterChar: Boolean;
FEnterCharacter: string;
FAfterTextOut: TDXPowerFontAfterTextOutEvent;
FBeforeTextOut: TDXPowerFontBeforeTextOutEvent;
FAlphabets: string;
FTextOutType: TDXPowerFontTextOutType;
FTextOutEffect: TDXPowerFontTextOutEffect;
FEffectsParameters: TDXPowerFontEffectsParameters;
procedure SetFont(const Value: string);
procedure SetFontIndex(const Value: Integer);
procedure SetUseEnterChar(const Value: Boolean);
procedure SetEnterCharacter(const Value: string);
procedure SetAlphabets(const Value: string);
procedure SetTextOutType(const Value: TDXPowerFontTextOutType);
procedure SetTextOutEffect(const Value: TDXPowerFontTextOutEffect);
procedure SetEffectsParameters(const Value: TDXPowerFontEffectsParameters);
published
property Font: string read FFont write SetFont;
property FontIndex: Integer read FFontIndex write SetFontIndex;
property DXImageList: TDXImageList read FDXImageList write FDXImageList;
property UseEnterChar: Boolean read FUseEnterChar write SetUseEnterChar;
property EnterCharacter: string read FEnterCharacter write SetEnterCharacter;
property BeforeTextOut: TDXPowerFontBeforeTextOutEvent read FBeforeTextOut write FBeforeTextOut;
property AfterTextOut: TDXPowerFontAfterTextOutEvent read FAfterTextOut write FAfterTextOut;
property Alphabets: string read FAlphabets write SetAlphabets;
property TextOutType: TDXPowerFontTextOutType read FTextOutType write SetTextOutType;
property TextOutEffect: TDXPowerFontTextOutEffect read FTextOutEffect write SetTextOutEffect;
property EffectsParameters: TDXPowerFontEffectsParameters read FEffectsParameters write SetEffectsParameters;
public
Offset: Integer;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function TextOut(DirectDrawSurface: TDirectDrawSurface; X, Y: Integer; const Text: string): Boolean;
function TextOutFast(DirectDrawSurface: TDirectDrawSurface; X, Y: Integer; const Text: string): Boolean;
end;
 
{D2D unit for pure HW support
* Copyright (c) 2004-2010 Jaro Benes
* All Rights Reserved
* Version 1.09
* D2D Hardware module - interface part
* web site: www.micrel.cz/Dx
* e-mail: delphix_d2d@micrel.cz
}
 
{supported texture vertex as substitute type from DirectX}
 
{TD2D4Vertex - used with D2DTexturedOn}
 
TD2D4Vertex = array[0..3] of TD3DTLVERTEX;
 
{TD2DTextures - texture storage used with Direct3D}
TTextureRec = packed record
{$IFDEF VIDEOTEX}
VDIB: TDIB;
{$ENDIF}
D2DTexture: TDirect3DTexture2;
FloatX1, FloatY1, FloatX2, FloatY2: Double; //uschov vyrez
Name: string{$IFNDEF VER4UP} [255]{$ENDIF}; //jmeno obrazku pro snadne dohledani
Width, Height: Integer;
AlphaChannel: Boolean; //.06c
end;
PTextureRec = ^TTextureRec;
TTextureArr = array{$IFNDEF VER4UP} [0..0]{$ENDIF} of TTextureRec;
{$IFNDEF VER4UP}
PTextureArr = ^TTextureArr;
EMaxTexturesError = class(Exception);
{$ENDIF}
TD2DTextures = class
private
FDDraw: TCustomDXDraw;
{$IFNDEF VER4UP}
TexLen: Integer;
Texture: PTextureArr;
{$ELSE}
Texture: TTextureArr;
{$ENDIF}
function GetD2DMaxTextures: Integer;
procedure SetD2DMaxTextures(const Value: Integer);
procedure D2DPruneTextures;
procedure D2DPruneAllTextures;
procedure SizeAdjust(var DIB: TDIB; var FloatX1, FloatY1, FloatX2,
FloatY2: Double);
function SetTransparentColor(dds: TDirectDrawSurface; PixelColor: Integer;
Transparent: Boolean): Integer;
{$IFDEF VIDEOTEX}
function GetTexLayoutByName(name: string): TDIB;
{$ENDIF}
procedure SaveTextures(path: string);
public
constructor Create(DDraw: TCustomDXDraw);
destructor Destroy; override;
procedure D2DFreeTextures;
function Find(byName: string): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
function GetTextureByName(const byName: string): TDirect3DTexture2;
function GetTextureByIndex(const byIndex: Integer): TDirect3DTexture2;
function GetTextureNameByIndex(const byIndex: Integer): string;
function Count: Integer;
{functions support loading image or DDS}
{$IFDEF VER4UP}
function CanFindTexture(aImage: TPictureCollectionItem): Boolean; overload; {$IFDEF VER9UP}inline;{$ENDIF}
function CanFindTexture(const TexName: string): Boolean; overload; {$IFDEF VER9UP}inline;{$ENDIF}
function CanFindTexture(const Color: LongInt): Boolean; overload;{$IFDEF VER9UP}inline;{$ENDIF}
function LoadTextures(aImage: TPictureCollectionItem): Boolean; overload; {$IFDEF VER9UP}inline;{$ENDIF}
function LoadTextures(dds: TDirectDrawSurface; Transparent: Boolean; asTexName: string): Boolean; overload;
function LoadTextures(dds: TDirectDrawSurface; Transparent: Boolean; TransparentColor: Integer; asTexName: string): Boolean; overload;
function LoadTextures(Color: Integer): Boolean; overload;
{$ELSE}
function CanFindTexture(aImage: TPictureCollectionItem): Boolean;
function CanFindTexture2(const TexName: string): Boolean;
function CanFindTexture3(const Color: LongInt): Boolean;
function LoadTextures(aImage: TPictureCollectionItem): Boolean;
function LoadTextures2(dds: TDirectDrawSurface; Transparent: Boolean; asTexName: string): Boolean;
function LoadTextures3(dds: TDirectDrawSurface; Transparent: Boolean; TransparentColor: Integer; asTexName: string): Boolean;
function LoadTextures4(Color: Integer): Boolean;
{$ENDIF}
{$IFDEF VIDEOTEX}
property TexLayoutByName[name: string]: TDIB read GetTexLayoutByName;
{$ENDIF}
//published
property D2DMaxTextures: Integer read GetD2DMaxTextures write SetD2DMaxTextures;
end;
 
{Main component for HW support}
 
TD2D = class
private
FDDraw: TCustomDXDraw;
FCanUseD2D: Boolean;
FBitCount: Integer;
FMirrorFlipSet: TRenderMirrorFlipSet;
FD2DTextureFilter: TD2DTextureFilter;
FD2DAntialiasFilter: TD3DAntialiasMode;
FVertex: TD2D4Vertex;
FD2DTexture: TD2DTextures;
FDIB: TDIB;
FD3DDevDesc7: TD3DDeviceDesc7;
FInitialized: Boolean;
{ukazuje pocet textur}
procedure D2DUpdateTextures; {$IFDEF VER9UP}inline;{$ENDIF}
 
procedure SetCanUseD2D(const Value: Boolean);
function GetCanUseD2D: Boolean;
{create the component}
constructor Create(DDraw: TCustomDXDraw);
procedure SetD2DTextureFilter(const Value: TD2DTextureFilter);
procedure SetD2DAntialiasFilter(const Value: TD3DAntialiasMode);
procedure D2DEffectSolid; {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DEffectAdd; {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DEffectSub; {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DEffectBlend; {$IFDEF VER9UP}inline;{$ENDIF}// used with alpha
 
{verticies}
procedure InitVertex; {$IFDEF VER9UP}inline;{$ENDIF}
function D2DWhite: Integer; {$IFDEF VER9UP}inline;{$ENDIF}
function D2DVertColor(RenderType: TRenderType; Alpha: Byte): DWORD; {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DColoredVertex(C: Integer); {$IFDEF VER9UP}inline;{$ENDIF}
function D2DAlphaVertex(Alpha: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DSpecularVertex(C: Integer); {$IFDEF VER9UP}inline;{$ENDIF}
{Fade used with Add and Sub}
function D2DFade(Alpha: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DFadeColored(C, Alpha: Integer); {$IFDEF VER9UP}inline;{$ENDIF}
 
function RenderQuad: Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
procedure D2DRect(R: TRect); {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DTU(T: TTextureRec); {$IFDEF VER9UP}inline;{$ENDIF}
{low lever version texturing for DDS}
function D2DTexturedOnDDSTex(dds: TDirectDrawSurface; SubPatternRect: TRect;
Transparent: Boolean): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
{texturing}
function D2DTexturedOn(Image: TPictureCollectionItem; Pattern: Integer; SubPatternRect: TRect; RenderType: TRenderType; Alpha: Byte): Boolean;
function D2DTexturedOnDDS(dds: TDirectDrawSurface; SubPatternRect: TRect; Transparent: Boolean; RenderType: TRenderType; Alpha: Byte): Boolean;
function D2DTexturedOnRect(Rect: TRect; Color: Integer): Boolean;
function D2DTexturedOnSubRect(Image: TPictureCollectionItem; Pattern: Integer; SubPatternRect, SubRect: TRect; RenderType: TRenderType; Alpha: Byte): Boolean;
 
{low level for rotate mesh}
procedure D2DRotate(X, Y, W, H: Integer; Px, Py: Double; Angle: single);
{low lever routine for mesh mapping}
function D2DMeshMapToWave(dds: TDirectDrawSurface; Transparent: Boolean;
TransparentColor: Integer; X, Y, iWidth, iHeight, PatternIndex: Integer;
PatternRect: TRect;
Amp, Len, Ph, Alpha: Integer;
Effect: TRenderType; DoY: Boolean{$IFDEF VER4UP} = False{$ENDIF}): Boolean;
property D2DTextures: TD2DTextures read FD2DTexture;
public
//added to public
procedure D2DColAlpha(C, Alpha: Integer); {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DCol4Alpha(C1, C2, C3, C4, Alpha: Integer); {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DFade4Colored(C1, C2, C3, C4, Alpha: Integer); {$IFDEF VER9UP}inline;{$ENDIF}
function RenderTri: Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
procedure D2DMeshMapToRect(R: TRect);
//
{destruction textures and supported objects here}
destructor Destroy; override;
{use before starting rendering}
procedure BeginScene;
{use after all images have been rendered}
procedure EndScene;
{set directly of texture filter}
property TextureFilter: TD2DTextureFilter write SetD2DTextureFilter;
property AntialiasFilter: TD3DAntialiasMode write SetD2DAntialiasFilter;
{indicate using of this object}
property CanUseD2D: Boolean read GetCanUseD2D write SetCanUseD2D;
 
{set property mirror-flip}
property MirrorFlip: TRenderMirrorFlipSet read FMirrorFlipSet write FMirrorFlipSet;
 
{initialize surface}
function D2DInitializeSurface: Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
{Render routines}
function D2DRender(Image: TPictureCollectionItem; DestRect: TRect;
Pattern: Integer; SourceRect: TRect; RenderType: TRenderType; Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean;{$IFDEF VER4UP} overload; {$ENDIF}{$IFDEF VER9UP}inline;{$ENDIF}
 
function {$IFDEF VER4UP}D2DRender{$ELSE}D2DRender2{$ENDIF}(Image: TPictureCollectionItem; R: TRect;
Pattern: Integer; RenderType: TRenderType; Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER4UP} overload; {$ENDIF}{$IFDEF VER9UP}inline;{$ENDIF}
 
function D2DRenderDDS(Source: TDirectDrawSurface; SourceRect, DestRect: TRect; Transparent: Boolean;
Pattern: Integer; RenderType: TRenderType; Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
function D2DRenderCol(Image: TPictureCollectionItem; R: TRect;
Pattern, Color: Integer; RenderType: TRenderType; Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function D2DRenderColDDS(Source: TDirectDrawSurface; SourceRect, DestRect: TRect;
Transparent: Boolean; Pattern, Color: Integer; RenderType:
TRenderType; Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
function D2DRenderDrawDDSXY(Source: TDirectDrawSurface; X, Y: Integer;
Transparent: Boolean; Pattern: Integer; RenderType: TRenderType; Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean;
{$IFDEF VER4UP} overload; {$IFDEF VER9UP}inline;{$ENDIF}
function D2DRenderDrawDDSXY(Source: TDirectDrawSurface; X, Y: Integer;
SrcRect: TRect; Transparent: Boolean; Pattern: Integer; RenderType: TRenderType; Alpha: Byte{$IFDEF Ver4UP} = 255{$ENDIF}): Boolean; overload; {$IFDEF VER9UP}inline;{$ENDIF}
{$ENDIF}
function D2DRenderDrawXY(Image: TPictureCollectionItem; X, Y: Integer;
Pattern: Integer; RenderType: TRenderType; Alpha: Byte{$IFDEF VEr4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
{Rotate}
function D2DRenderRotate(Image: TPictureCollectionItem; RotX, RotY,
PictWidth, PictHeight, PatternIndex: Integer; RenderType: TRenderType;
CenterX, CenterY: Double; Angle: single; Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function D2DRenderRotateDDS(Image: TDirectDrawSurface; SourceRect: TRect; RotX, RotY,
PictWidth, PictHeight: Integer; RenderType: TRenderType;
CenterX, CenterY: Double; Angle: single; Alpha: Byte;
Transparent: Boolean): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
function D2DRenderRotateModeCol(Image: TPictureCollectionItem; RenderType: TRenderType; RotX, RotY,
PictWidth, PictHeight, PatternIndex: Integer; CenterX, CenterY: Double;
Angle: single; Color: Integer; Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function D2DRenderRotateModeColDDS(Image: TDirectDrawSurface;
RotX, RotY, PictWidth, PictHeight: Integer; RenderType: TRenderType;
CenterX, CenterY: Double; Angle: Single; Color: Integer; Alpha: Byte;
Transparent: Boolean): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
{WaveX}
function D2DRenderWaveX(Image: TPictureCollectionItem; X, Y, Width, Height,
PatternIndex: Integer; RenderType: TRenderType; Transparent: Boolean;
Amp, Len, Ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function D2DRenderWaveXDDS(Source: TDirectDrawSurface; X, Y, Width,
Height: Integer; RenderType: TRenderType; Transparent: Boolean;
Amp, Len, Ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
{WaveY}
function D2DRenderWaveY(Image: TPictureCollectionItem; X, Y, Width, Height,
PatternIndex: Integer; RenderType: TRenderType; Transparent: Boolean;
Amp, Len, Ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function D2DRenderWaveYDDS(Source: TDirectDrawSurface; X, Y, Width,
Height: Integer; RenderType: TRenderType; Transparent: Boolean;
Amp, Len, Ph: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
{Rect}
function D2DRenderFillRect(Rect: TRect; RGBColor: LongInt;
RenderType: TRenderType; Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
{addmod}
function D2DRenderColoredPartition(Image: TPictureCollectionItem; DestRect: TRect; PatternIndex,
Color, Specular: Integer; Faded: Boolean;
SourceRect: TRect;
RenderType: TRenderType;
Alpha: Byte{$IFDEF VER4UP} = 255{$ENDIF}): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
procedure SaveTextures(path: string);
end;
 
{ Support functions for texturing }
function dxtMakeChannel(Mask: DWORD; indexed: Boolean): TDXTextureImageChannel;
function dxtEncodeChannel(const Channel: TDXTextureImageChannel; c: DWORD): DWORD;
function dxtDecodeChannel(const Channel: TDXTextureImageChannel; c: DWORD): DWORD;
 
{ Single support routine for convert DIB32 to DXT in one line }
procedure dib2dxt(DIBImage: TDIB; out DXTImage: TDXTextureImage{$IFDEF DXTextureImage_UseZLIB}; const Shrink: Boolean = True{$ENDIF});
 
{ One line call drawing with attributes }
{$IFDEF VER4UP}
procedure DXDraw_Draw(DXDraw: TCustomDXDraw; Image: TPictureCollectionItem;
Rect: TRect; Pattern: Integer; TextureFilter: TD2DTextureFilter = D2D_POINT;
MirrorFlip: TRenderMirrorFlipSet = [];
BlendMode: TRenderType = rtDraw; Angle: Single = 0; Alpha: Byte = 255;
CenterX: Double = 0.5; CenterY: Double = 0.5;
Scale: Single = 1.0); {$IFDEF VER9UP}inline;{$ENDIF}
procedure DXDraw_Paint(DXDraw: TCustomDXDraw; Image: TPictureCollectionItem;
Rect: TRect; Pattern: Integer; var BlurImageArr: TBlurImageArr; BlurImage: Boolean = False;
TextureFilter: TD2DTextureFilter = D2D_POINT;
MirrorFlip: TRenderMirrorFlipSet = [];
BlendMode: TRenderType = rtDraw;
Angle: Single = 0;
Alpha: Byte = 255;
CenterX: Double = 0.5; CenterY: Double = 0.5); {$IFDEF VER9UP}inline;{$ENDIF}
procedure DXDraw_Render(DXDraw: TCustomDXDraw; Image: TPictureCollectionItem;
Rect: TRect; Pattern: Integer; var BlurImageArr: TBlurImageArr; BlurImage: Boolean = False;
TextureFilter: TD2DTextureFilter = D2D_POINT;
MirrorFlip: TRenderMirrorFlipSet = [];
BlendMode: TRenderType = rtDraw;
Angle: Single = 0;
Alpha: Byte = 255;
CenterX: Double = 0.5; CenterY: Double = 0.5;
Scale: Single = 1.0;
WaveType: TWaveType = wtWaveNone;
Amplitude: Integer = 0; AmpLength: Integer = 0; Phase: Integer = 0); {$IFDEF VER9UP}inline;{$ENDIF}
{$ELSE}
procedure DXDraw_Draw(DXDraw: TCustomDXDraw; Image: TPictureCollectionItem;
Rect: TRect; Pattern: Integer; TextureFilter: TD2DTextureFilter;
MirrorFlip: TRenderMirrorFlipSet;
BlendMode: TRenderType; Angle: Single; Alpha: Byte;
CenterX: Double; CenterY: Double;
Scale: Single);
procedure DXDraw_Paint(DXDraw: TCustomDXDraw; Image: TPictureCollectionItem;
Rect: TRect; Pattern: Integer; var BlurImageArr: TBlurImageArr; BlurImage: Boolean;
TextureFilter: TD2DTextureFilter;
MirrorFlip: TRenderMirrorFlipSet;
BlendMode: TRenderType;
Angle: Single;
Alpha: Byte;
CenterX: Double; CenterY: Double);
procedure DXDraw_Render(DXDraw: TCustomDXDraw; Image: TPictureCollectionItem;
Rect: TRect; Pattern: Integer; var BlurImageArr: TBlurImageArr; BlurImage: Boolean;
TextureFilter: TD2DTextureFilter;
MirrorFlip: TRenderMirrorFlipSet;
BlendMode: TRenderType;
Angle: Single;
Alpha: Byte;
CenterX: Double; CenterY: Double;
Scale: Single;
WaveType: TWaveType;
Amplitude: Integer; AmpLength: Integer; Phase: Integer);
{$ENDIF}
 
implementation
 
uses DXConsts, DXRender;
uses DXConsts{$IFDEF DXR_deprecated}, DXRender{$ENDIF}, D3DUtils;
function DXDirectDrawEnumerate(lpCallback: TDDEnumCallbackA;
function DXDirectDrawEnumerate(lpCallback: {$IFDEF UNICODE}TDDEnumCallbackW{$ELSE}TDDEnumCallbackA{$ENDIF};
lpContext: Pointer): HRESULT;
type
TDirectDrawEnumerate = function(lpCallback: TDDEnumCallbackA;
TDirectDrawEnumerate = function(lpCallback: {$IFDEF UNICODE}TDDEnumCallbackW{$ELSE}TDDEnumCallbackA{$ENDIF};
lpContext: Pointer): HRESULT; stdcall;
begin
Result := TDirectDrawEnumerate(DXLoadLibrary('DDraw.dll', 'DirectDrawEnumerateA'))
Result := TDirectDrawEnumerate(DXLoadLibrary('DDraw.dll', {$IFDEF UNICODE}'DirectDrawEnumerateW'{$ELSE}'DirectDrawEnumerateA'{$ENDIF}))
(lpCallback, lpContext);
end;
 
var
DirectDrawDrivers: TDirectXDrivers;
{$IFDEF _DMO_}DirectDrawDriversEx: TDirectXDriversEx;{$ENDIF}
D2D: TD2D = nil; {for internal use only, }
RenderError: Boolean = false;
 
function EnumDirectDrawDrivers: TDirectXDrivers;
 
function DDENUMCALLBACK(lpGuid: PGUID; lpstrDescription: LPCSTR;
lpstrModule: LPCSTR; lpContext: Pointer): BOOL; stdcall;
function DDENUMCALLBACK(lpGuid: PGUID; lpstrDescription: {$IFDEF UNICODE}LPCTSTR{$ELSE}LPCSTR{$ENDIF};
lpstrModule: {$IFDEF UNICODE}LPCTSTR{$ELSE}LPCSTR{$ENDIF}; lpContext: Pointer): BOOL; stdcall;
begin
Result := True;
with TDirectXDriver.Create(TDirectXDrivers(lpContext)) do
946,6 → 2385,45
Result := DirectDrawDrivers;
end;
 
{$IFDEF _DMO_}
function EnumDirectDrawDriversEx: TDirectXDriversEx;
 
function DDENUMCALLBACKEX(lpGuid: PGUID; lpstrDescription: {$IFDEF UNICODE}LPCTSTR{$ELSE}LPCSTR{$ENDIF};
lpDriverName: {$IFDEF UNICODE}LPCTSTR{$ELSE}LPCSTR{$ENDIF}; lpContext: Pointer; iMonitor: HMonitor): BOOL; stdcall;
var
X: TDirectXDriverEx;
begin
Result := True;
X := TDirectXDriverEx(DirectDrawDriversEx.Add);
with X do
begin
Guid := lpGuid;
Description := lpstrDescription;
Monitor := iMonitor;
DriverName := lpDriverName;
//GetPhysicalMonitorsFromHMONITOR()
end;
end;
 
//var
// DevMode: TDeviceMode;
begin
if DirectDrawDriversEx = nil then DirectDrawDriversEx := TDirectXDriversEx.Create;
if Assigned(DirectDrawDriversEx) then
begin
//FMonitors.Clear;
try
//FillChar(DevMode, SizeOf(TDeviceMode), 0);
if DirectDrawEnumerateEx(@DDENUMCALLBACKEX, nil{DeviceContext}, DDENUM_ATTACHEDSECONDARYDEVICES or DDENUM_DETACHEDSECONDARYDEVICES or DDENUM_NONDISPLAYDEVICES) = DD_OK then;
except
DirectDrawDriversEx.Free; DirectDrawDriversEx := nil;
raise;
end;
end;
Result := DirectDrawDriversEx;
end;
{$ENDIF}
 
function ClipRect(var DestRect: TRect; const DestRect2: TRect): Boolean;
begin
with DestRect do
1033,11 → 2511,13
FPalettes := TList.Create;
FSurfaces := TList.Create;
 
{$IFDEF D3D_deprecated}
if DirectX7Mode then
begin
begin {$ENDIF}
{ DirectX 7 }
if TDirectDrawCreateEx(DXLoadLibrary('DDraw.dll', 'DirectDrawCreateEx')) (GUID, FIDDraw7, IID_IDirectDraw7, nil)<>DD_OK then
raise EDirectDrawError.CreateFmt(SCannotInitialized, [SDirectDraw]);
{$IFDEF D3D_deprecated}
try
FIDDraw := FIDDraw7 as IDirectDraw;
FIDDraw4 := FIDDraw7 as IDirectDraw4;
1044,7 → 2524,8
except
raise EDirectDrawError.Create(SSinceDirectX7);
end;
end else
{$ENDIF}
{$IFDEF D3D_deprecated}end else
begin
if TDirectDrawCreate(DXLoadLibrary('DDraw.dll', 'DirectDrawCreate')) (GUID, FIDDraw, nil)<>DD_OK then
raise EDirectDrawError.CreateFmt(SCannotInitialized, [SDirectDraw]);
1053,11 → 2534,11
except
raise EDirectDrawError.Create(SSinceDirectX6);
end;
end;
end;{$ENDIF}
 
FDriverCaps.dwSize := SizeOf(FDriverCaps);
FHELCaps.dwSize := SizeOf(FHELCaps);
FIDDraw.GetCaps(FDriverCaps, FHELCaps);
{$IFDEF D3D_deprecated}FIDDraw{$ELSE}FIDDraw7{$ENDIF}.GetCaps(@FDriverCaps, @FHELCaps);
end;
 
destructor TDirectDraw.Destroy;
1082,6 → 2563,13
Result := EnumDirectDrawDrivers;
end;
 
{$IFDEF _DMO_}
class function TDirectDraw.DriversEx: TDirectXDriversEx;
begin
Result := EnumDirectDrawDriversEx;
end;
{$ENDIF}
 
function TDirectDraw.GetClipper(Index: Integer): TDirectDrawClipper;
begin
Result := FClippers[Index];
1092,14 → 2580,14
Result := FClippers.Count;
end;
 
function TDirectDraw.GetDisplayMode: TDDSurfaceDesc;
function TDirectDraw.GetDisplayMode: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
begin
Result.dwSize := SizeOf(Result);
DXResult := IDraw.GetDisplayMode(Result);
DXResult := {$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.GetDisplayMode(Result);
if DXResult<>DD_OK then
FillChar(Result, SizeOf(Result), 0);
end;
 
{$IFDEF D3D_deprecated}
function TDirectDraw.GetIDDraw: IDirectDraw;
begin
if Self<>nil then
1115,7 → 2603,7
else
Result := nil;
end;
 
{$ENDIF}
function TDirectDraw.GetIDDraw7: IDirectDraw7;
begin
if Self<>nil then
1123,7 → 2611,7
else
Result := nil;
end;
 
{$IFDEF D3D_deprecated}
function TDirectDraw.GetIDraw: IDirectDraw;
begin
Result := IDDraw;
1137,7 → 2625,7
if Result=nil then
raise EDirectDrawError.CreateFmt(SNotMade, ['IDirectDraw4']);
end;
 
{$ENDIF}
function TDirectDraw.GetIDraw7: IDirectDraw7;
begin
Result := IDDraw7;
1186,7 → 2674,7
begin
IDDPalette := nil;
 
FDDraw.DXResult := FDDraw.IDraw.CreatePalette(Caps, @Entries, TempPalette, nil);
FDDraw.DXResult := FDDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.CreatePalette(Caps, @Entries, TempPalette, nil);
FDXResult := FDDraw.DXResult;
Result := FDDraw.DXResult=DD_OK;
if Result then
1205,7 → 2693,7
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead);
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
LoadFromStream(Stream);
finally
1288,7 → 2776,7
FDDraw := ADirectDraw;
FDDraw.FClippers.Add(Self);
 
FDDraw.DXResult := FDDraw.IDraw.CreateClipper(0, FIDDClipper, nil);
FDDraw.DXResult := FDDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.CreateClipper(0, FIDDClipper, nil);
if FDDraw.DXResult<>DD_OK then
raise EDirectDrawClipperError.CreateFmt(SCannotMade, [SDirectDrawClipper]);
end;
1381,7 → 2869,7
 
procedure TDirectDrawSurfaceCanvas.CreateHandle;
begin
FSurface.DXResult := FSurface.ISurface.GetDC(FDC);
FSurface.DXResult := FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetDC(FDC);
if FSurface.DXResult=DD_OK then
Handle := FDC;
end;
1388,10 → 2876,10
 
procedure TDirectDrawSurfaceCanvas.Release;
begin
if (FSurface.IDDSurface<>nil) and (FDC<>0) then
if (FSurface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil) and (FDC <> 0) then
begin
Handle := 0;
FSurface.IDDSurface.ReleaseDC(FDC);
FSurface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF}.ReleaseDC(FDC);
FDC := 0;
end;
end;
1403,16 → 2891,18
inherited Create;
FDDraw := ADirectDraw;
FDDraw.FSurfaces.Add(Self);
DIB_COLMATCH := TDIB.Create;
end;
 
destructor TDirectDrawSurface.Destroy;
begin
DIB_COLMATCH.Free;
FCanvas.Free;
IDDSurface := nil;
{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := nil;
FDDraw.FSurfaces.Remove(Self);
inherited Destroy;
end;
 
{$IFDEF D3D_deprecated}
function TDirectDrawSurface.GetIDDSurface: IDirectDrawSurface;
begin
if Self<>nil then
1428,7 → 2918,7
else
Result := nil;
end;
 
{$ENDIF}
function TDirectDrawSurface.GetIDDSurface7: IDirectDrawSurface7;
begin
if Self<>nil then
1436,7 → 2926,7
else
Result := nil;
end;
 
{$IFDEF D3D_deprecated}
function TDirectDrawSurface.GetISurface: IDirectDrawSurface;
begin
Result := IDDSurface;
1450,7 → 2940,7
if Result=nil then
raise EDirectDrawSurfaceError.CreateFmt(SNotMade, ['IDirectDrawSurface4']);
end;
 
{$ENDIF}
function TDirectDrawSurface.GetISurface7: IDirectDrawSurface7;
begin
Result := IDDSurface7;
1457,7 → 2947,7
if Result=nil then
raise EDirectDrawSurfaceError.CreateFmt(SNotMade, ['IDirectDrawSurface7']);
end;
 
{$IFDEF D3D_deprecated}
procedure TDirectDrawSurface.SetIDDSurface(Value: IDirectDrawSurface);
var
Clipper: IDirectDrawClipper;
1498,21 → 2988,50
else
SetIDDSurface(Value as IDirectDrawSurface);
end;
 
{$ENDIF}
procedure TDirectDrawSurface.SetIDDSurface7(Value: IDirectDrawSurface7);
{$IFNDEF D3D_deprecated}
var
Clipper: IDirectDrawClipper;
{$ENDIF}
begin
{$IFDEF D3D_deprecated}
if Value=nil then
SetIDDSurface(nil)
else
SetIDDSurface(Value as IDirectDrawSurface);
{$ELSE}
if Value = nil then Exit;
if Value as IDirectDrawSurface7 = FIDDSurface7 then Exit;
FIDDSurface7 := nil;
 
FStretchDrawClipper := nil;
FGammaControl := nil;
FHasClipper := False;
FLockCount := 0;
FillChar(FSurfaceDesc, SizeOf(FSurfaceDesc), 0);
 
if Value <> nil then
begin
if FDDraw.FIDDraw7 <> nil then FIDDSurface7 := Value as IDirectDrawSurface7;
 
FHasClipper := (FIDDSurface7.GetClipper(Clipper) = DD_OK) and (Clipper <> nil);
 
FSurfaceDesc.dwSize := SizeOf(FSurfaceDesc);
{$IFDEF D3D_deprecated}FIDDSurface{$ELSE}FIDDSurface7{$ENDIF}.GetSurfaceDesc(FSurfaceDesc);
 
if FDDraw.DriverCaps.dwCaps2 and DDCAPS2_PRIMARYGAMMA <> 0 then
{$IFDEF D3D_deprecated}FIDDSurface{$ELSE}FIDDSurface7{$ENDIF}.QueryInterface(IID_IDirectDrawGammaControl, FGammaControl);
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.Assign(Source: TPersistent);
var
TempSurface: IDirectDrawSurface;
TempSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF};
begin
if Source=nil then
IDDSurface := nil
{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := nil
else if Source is TGraphic then
LoadFromGraphic(TGraphic(Source))
else if Source is TPicture then
1519,14 → 3038,14
LoadFromGraphic(TPicture(Source).Graphic)
else if Source is TDirectDrawSurface then
begin
if TDirectDrawSurface(Source).IDDSurface=nil then
IDDSurface := nil
if TDirectDrawSurface(Source).{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} = nil then
{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := nil
else begin
FDDraw.DXResult := FDDraw.IDraw.DuplicateSurface(TDirectDrawSurface(Source).IDDSurface,
FDDraw.DXResult := FDDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.DuplicateSurface(TDirectDrawSurface(Source).{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF},
TempSurface);
if FDDraw.DXResult=0 then
begin
IDDSurface := TempSurface;
{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := TempSurface;
end;
end;
end else
1535,11 → 3054,31
 
procedure TDirectDrawSurface.AssignTo(Dest: TPersistent);
begin
if Dest is TBitmap then
begin
try
TBitmap(Dest).PixelFormat := pf24bit;
if BitCount >= 24 then {please accept the Alphachannel too}
TBitmap(Dest).PixelFormat := pf32bit;
TBitmap(Dest).Width := Width;
TBitmap(Dest).Height := Height;
TBitmap(Dest).Canvas.CopyRect(Rect(0, 0, TBitmap(Dest).Width, TBitmap(Dest).Height), Canvas, ClientRect);
finally
Canvas.Release;
end
end
else
if Dest is TDIB then
begin
try
if BitCount >= 24 then {please accept the Alphachannel too}
TDIB(Dest).SetSize(Width, Height, BitCount)
else
TDIB(Dest).SetSize(Width, Height, 24);
TDIB(Dest).Canvas.CopyRect(Rect(0, 0, TDIB(Dest).Width, TDIB(Dest).Height), Canvas, ClientRect);
finally
Canvas.Release;
end
end else
inherited AssignTo(Dest);
end;
1547,9 → 3086,9
function TDirectDrawSurface.Blt(const DestRect, SrcRect: TRect; Flags: DWORD;
const DF: TDDBltFX; Source: TDirectDrawSurface): Boolean;
begin
if IDDSurface<>nil then
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
begin
DXResult := ISurface.Blt(DestRect, Source.IDDSurface, SrcRect, DWORD(Flags), DF);
DXResult := {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF}.Blt(@DestRect, Source.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF}, @SrcRect, DWORD(Flags), @DF);
Result := DXResult=DD_OK;
end else
Result := False;
1558,9 → 3097,9
function TDirectDrawSurface.BltFast(X, Y: Integer; const SrcRect: TRect;
Flags: DWORD; Source: TDirectDrawSurface): Boolean;
begin
if IDDSurface<>nil then
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
begin
DXResult := ISurface.BltFast(X, Y, Source.IDDSurface, SrcRect, DWORD(Flags));
DXResult := {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF}.BltFast(X, Y, Source.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF}, @SrcRect, DWORD(Flags));
Result := DXResult=DD_OK;
end else
Result := False;
1568,29 → 3107,25
 
function TDirectDrawSurface.ColorMatch(Col: TColor): Integer;
var
DIB: TDIB;
i, oldc: Integer;
begin
if IDDSurface<>nil then
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
begin
oldc := Pixels[0, 0];
 
DIB := TDIB.Create;
try
i := ColorToRGB(Col);
DIB.SetSize(1, 1, 8);
DIB.ColorTable[0] := RGBQuad(GetRValue(i), GetGValue(i), GetBValue(i));
DIB.UpdatePalette;
DIB.Pixels[0, 0] := 0;
DIB_COLMATCH.SetSize(1, 1, 8);
DIB_COLMATCH.ColorTable[0] := RGBQuad(GetRValue(i), GetGValue(i), GetBValue(i));
DIB_COLMATCH.UpdatePalette;
DIB_COLMATCH.Pixels[0, 0] := 0;
 
with Canvas do
begin
Draw(0, 0, DIB);
try
Draw(0, 0, DIB_COLMATCH);
finally
Release;
end;
finally
DIB.Free;
end;
 
Result := Pixels[0, 0];
Pixels[0, 0] := oldc;
end else
1597,7 → 3132,8
Result := 0;
end;
 
function TDirectDrawSurface.CreateSurface(const SurfaceDesc: TDDSurfaceDesc): Boolean;
{$IFDEF D3D_deprecated}
function TDirectDrawSurface.CreateSurface(SurfaceDesc: TDDSurfaceDesc): Boolean;
var
TempSurface: IDirectDrawSurface;
begin
1612,19 → 3148,19
TransparentColor := 0;
end;
end;
 
{$IFDEF DelphiX_Spt4}
function TDirectDrawSurface.CreateSurface(const SurfaceDesc: TDDSurfaceDesc2): Boolean;
{$ENDIF}
{$IFDEF VER4UP}
function TDirectDrawSurface.CreateSurface(SurfaceDesc: TDDSurfaceDesc2): Boolean;
var
TempSurface4: IDirectDrawSurface4;
TempSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface4{$ELSE}IDirectDrawSurface7{$ENDIF};
begin
IDDSurface := nil;
FDDraw.DXResult := FDDraw.IDraw4.CreateSurface(SurfaceDesc, TempSurface4, nil);
{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := nil;
FDDraw.DXResult := FDDraw.{$IFDEF D3D_deprecated}IDraw4{$ELSE}IDraw7{$ENDIF}.CreateSurface(SurfaceDesc, TempSurface, nil);
FDXResult := FDDraw.DXResult;
Result := FDDraw.DXResult=DD_OK;
if Result then
begin
IDDSurface4 := TempSurface4;
{$IFDEF D3D_deprecated}IDDSurface4{$ELSE}IDDSurface7{$ENDIF} := TempSurface;
TransparentColor := 0;
end;
end;
1637,16 → 3173,27
(DDBLTFAST_NOCOLORKEY or DDBLTFAST_WAIT, DDBLTFAST_SRCCOLORKEY or DDBLTFAST_WAIT);
BltFlags: array[Boolean] of Integer =
(DDBLT_WAIT, DDBLT_KEYSRC or DDBLT_WAIT);
var
{$IFDEF DXR_deprecated}var
DestRect: TRect;
DF: TDDBltFX;
Clipper: IDirectDrawClipper;
i: Integer;
i: Integer;{$ENDIF}
begin
if Source<>nil then
begin
if (X>Width) or (Y>Height) then Exit;
 
{$IFDEF DrawHWAcc}
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then
begin
{$IFDEF VER4UP}
D2D.D2DRenderDrawDDSXY(Source, X, Y, SrcRect, Transparent, 0, rtDraw{$IFNDEF VER4UP}, $FF{$ENDIF});
{$ELSE}
D2D.D2DRenderDDS(Source, SrcRect, Bounds(X, Y, SrcRect.Right - SrcRect.Left, SrcRect.Bottom - SrcRect.Top), Transparent, 0, rtDraw, $FF);
{$ENDIF}
Exit;
end;
{$ENDIF DrawHWAcc}
{$IFDEF DXR_deprecated}
if (SrcRect.Left>SrcRect.Right) or (SrcRect.Top>SrcRect.Bottom) then
begin
{ Mirror }
1706,7 → 3253,7
BltFast(DestRect.Left, DestRect.Top, SrcRect, BltFastFlags[Transparent], Source);
if DXResult=DDERR_BLTFASTCANTCLIP then
begin
ISurface.GetClipper(Clipper);
{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetClipper(Clipper);
if Clipper<>nil then FHasClipper := True;
 
DF.dwsize := SizeOf(DF);
1716,10 → 3263,11
end;
end;
end;
{$ENDIF}
end;
end;
 
{$IFDEF DelphiX_Spt4}
{$IFDEF VER4UP}
procedure TDirectDrawSurface.Draw(X, Y: Integer; Source: TDirectDrawSurface; Transparent: Boolean);
const
BltFastFlags: array[Boolean] of Integer =
1728,14 → 3276,20
(DDBLT_WAIT, DDBLT_KEYSRC or DDBLT_WAIT);
var
DestRect, SrcRect: TRect;
DF: TDDBltFX;
Clipper: IDirectDrawClipper;
{$IFDEF DXR_deprecated}DF: TDDBltFX;
Clipper: IDirectDrawClipper;{$ENDIF}
begin
if Source<>nil then
begin
SrcRect := Source.ClientRect;
DestRect := Bounds(X, Y, Source.Width, Source.Height);
 
{$IFDEF DrawHWAcc}
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderDDS(Source, ZeroRect, DestRect, Transparent, 0, rtDraw{$IFNDEF VER4UP}, $FF{$ENDIF});
Exit;
end;
{$ENDIF DrawHWAcc}
{$IFDEF DXR_deprecated}
if ClipRect2(DestRect, SrcRect, ClientRect, Source.ClientRect) then
begin
if FHasClipper then
1748,7 → 3302,7
BltFast(DestRect.Left, DestRect.Top, SrcRect, BltFastFlags[Transparent], Source);
if DXResult=DDERR_BLTFASTCANTCLIP then
begin
ISurface.GetClipper(Clipper);
{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetClipper(Clipper);
if Clipper<>nil then FHasClipper := True;
 
DF.dwsize := SizeOf(DF);
1757,6 → 3311,7
end;
end;
end;
{$ENDIF}
end;
end;
{$ENDIF}
1766,16 → 3321,22
const
BltFlags: array[Boolean] of Integer =
(DDBLT_WAIT, DDBLT_KEYSRC or DDBLT_WAIT);
var
{$IFDEF DXR_deprecated}var
DF: TDDBltFX;
OldClipper: IDirectDrawClipper;
Clipper: TDirectDrawClipper;
Clipper: TDirectDrawClipper;{$ENDIF}
begin
if Source<>nil then
begin
if (DestRect.Bottom<=DestRect.Top) or (DestRect.Right<=DestRect.Left) then Exit;
if (SrcRect.Bottom<=SrcRect.Top) or (SrcRect.Right<=SrcRect.Left) then Exit;
 
{$IFDEF DrawHWAcc}
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderDDS(Source, SrcRect, DestRect, Transparent, 0, rtDraw{$IFNDEF VER4UP}, $FF{$ENDIF});
Exit;
end;
{$ENDIF DrawHWAcc}
{$IFDEF DXR_deprecated}
if FHasClipper then
begin
DF.dwsize := SizeOf(DF);
1794,27 → 3355,26
end;
end;
 
ISurface.GetClipper(OldClipper);
ISurface.SetClipper(FStretchDrawClipper);
{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetClipper(OldClipper);
{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.SetClipper(FStretchDrawClipper);
DF.dwsize := SizeOf(DF);
DF.dwDDFX := 0;
Blt(DestRect, SrcRect, BltFlags[Transparent], df, Source);
ISurface.SetClipper(nil);
{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.SetClipper(nil);
end;
{$ENDIF}
end;
end;
 
{$IFDEF DelphiX_Spt4}
{$IFDEF VER4UP}
procedure TDirectDrawSurface.StretchDraw(const DestRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean);
const
BltFlags: array[Boolean] of Integer =
 
(DDBLT_WAIT, DDBLT_KEYSRC or DDBLT_WAIT);
BltFlags: array[Boolean] of Integer = (DDBLT_WAIT, DDBLT_KEYSRC or DDBLT_WAIT);
var
DF: TDDBltFX;
{$IFDEF DXR_deprecated}DF: TDDBltFX;
OldClipper: IDirectDrawClipper;
Clipper: TDirectDrawClipper;
Clipper: TDirectDrawClipper;{$ENDIF}
SrcRect: TRect;
begin
if Source<>nil then
1822,7 → 3382,12
if (DestRect.Bottom<=DestRect.Top) or (DestRect.Right<=DestRect.Left) then Exit;
SrcRect := Source.ClientRect;
 
if ISurface.GetClipper(OldClipper)=DD_OK then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderDDS(Source, ZeroRect, DestRect, Transparent, 0, rtDraw{$IFNDEF VER4UP}, $FF{$ENDIF});
Exit;
end;
{$IFDEF DXR_deprecated}
if {$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetClipper(OldClipper) = DD_OK then
begin
DF.dwsize := SizeOf(DF);
DF.dwDDFX := 0;
1840,15 → 3405,16
end;
end;
 
ISurface.SetClipper(FStretchDrawClipper);
{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.SetClipper(FStretchDrawClipper);
try
DF.dwsize := SizeOf(DF);
DF.dwDDFX := 0;
Blt(DestRect, SrcRect, BltFlags[Transparent], df, Source);
finally
ISurface.SetClipper(nil);
{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.SetClipper(nil);
end;
end;
{$ENDIF}
end;
end;
{$ENDIF}
1855,10 → 3421,10
 
procedure TDirectDrawSurface.DrawAdd(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean; Alpha: Integer);
var
Src_ddsd: TDDSurfaceDesc;
{$IFDEF DXR_deprecated}var
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;
Blend: TDXR_Blend;
Blend: TDXR_Blend;{$ENDIF}
begin
if (Self.Width=0) or (Self.Height=0) then Exit;
if (Width=0) or (Height=0) then Exit;
1867,10 → 3433,15
 
if Alpha<=0 then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderDDS(Source, SrcRect, DestRect, Transparent, 0, rtAdd, Alpha);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
if DestSurface.ColorType=DXR_COLORTYPE_INDEXED then
1888,21 → 3459,22
dxrCopyRectBlend(DestSurface, SrcSurface,
DestRect, SrcRect, Blend, Alpha, Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawAlpha(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean; Alpha: Integer);
var
Src_ddsd: TDDSurfaceDesc;
{$IFDEF DXR_deprecated}var
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;
Blend: TDXR_Blend;
Blend: TDXR_Blend;{$ENDIF}
begin
if (Self.Width=0) or (Self.Height=0) then Exit;
if (Width=0) or (Height=0) then Exit;
1911,10 → 3483,15
 
if Alpha<=0 then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderDDS(Source, SrcRect, DestRect, Transparent, 0, rtBlend, Alpha);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
if DestSurface.ColorType=DXR_COLORTYPE_INDEXED then
1932,21 → 3509,22
dxrCopyRectBlend(DestSurface, SrcSurface,
DestRect, SrcRect, Blend, Alpha, Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawSub(const DestRect, SrcRect: TRect; Source: TDirectDrawSurface;
Transparent: Boolean; Alpha: Integer);
var
Src_ddsd: TDDSurfaceDesc;
{$IFDEF DXR_deprecated}var
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;
Blend: TDXR_Blend;
Blend: TDXR_Blend;{$ENDIF}
begin
if (Self.Width=0) or (Self.Height=0) then Exit;
if (Width=0) or (Height=0) then Exit;
1955,10 → 3533,15
 
if Alpha<=0 then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderDDS(Source, SrcRect, DestRect, Transparent, 0, rtSub, Alpha);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
if DestSurface.ColorType=DXR_COLORTYPE_INDEXED then
1976,20 → 3559,79
dxrCopyRectBlend(DestSurface, SrcSurface,
DestRect, SrcRect, Blend, Alpha, Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawAlphaCol(const DestRect, SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; Color, Alpha: Integer);
begin
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if Alpha <= 0 then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderColDDS(Source, SrcRect, DestRect, Transparent, 0, Color, rtBlend, Alpha);
Exit;
end;
 
// If no hardware acceleration, falls back to non-color DrawAlpha
Self.DrawAlpha(DestRect, SrcRect, Source, Transparent, Alpha);
end;
 
procedure TDirectDrawSurface.DrawSubCol(const DestRect, SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; Color, Alpha: Integer);
begin
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if Alpha <= 0 then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderColDDS(Source, SrcRect, DestRect, Transparent, 0, Color, rtSub, Alpha);
Exit;
end;
 
// If no hardware acceleration, falls back to non-color DrawSub
Self.DrawSub(DestRect, SrcRect, Source, Transparent, Alpha);
end;
 
procedure TDirectDrawSurface.DrawAddCol(const DestRect, SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; Color, Alpha: Integer);
begin
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if Alpha <= 0 then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderColDDS(Source, SrcRect, DestRect, Transparent, 0, Color, rtAdd, Alpha);
Exit;
end;
 
// If no hardware acceleration, falls back to non-color DrawAdd
Self.DrawAdd(DestRect, SrcRect, Source, Transparent, Alpha);
 
end;
 
procedure TDirectDrawSurface.DrawRotate(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: Integer);
var
Src_ddsd: TDDSurfaceDesc;
DestSurface, SrcSurface: TDXR_Surface;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: single);
{$IFDEF DXR_deprecated}var
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;{$ENDIF}
begin
if (Self.Width=0) or (Self.Height=0) then Exit;
if (Width=0) or (Height=0) then Exit;
1996,31 → 3638,37
if Source=nil then Exit;
if (Source.Width=0) or (Source.Height=0) then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderRotateDDS(Source, SrcRect, X, Y, Width, Height, rtDraw, CenterX, CenterY, Angle, $FF, Transparent);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
dxrDrawRotateBlend(DestSurface, SrcSurface,
X, Y, Width, Height, SrcRect, CenterX, CenterY, Angle, DXR_BLEND_ONE1, 0,
X, Y, Width, Height, SrcRect, CenterX, CenterY, round(Angle), DXR_BLEND_ONE1, 0,
Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawRotateAdd(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle, Alpha: Integer);
var
Src_ddsd: TDDSurfaceDesc;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: single; Alpha: Integer);
{$IFDEF DXR_deprecated}var
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;
Blend: TDXR_Blend;
Blend: TDXR_Blend; {$ENDIF}
begin
if Alpha<=0 then Exit;
 
2029,10 → 3677,15
if Source=nil then Exit;
if (Source.Width=0) or (Source.Height=0) then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderRotateDDS(Source, SrcRect, X, Y, Width, Height, rtAdd, CenterX, CenterY, Angle, Alpha, Transparent);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
if DestSurface.ColorType=DXR_COLORTYPE_INDEXED then
2048,24 → 3701,25
end;
 
dxrDrawRotateBlend(DestSurface, SrcSurface,
X, Y, Width, Height, SrcRect, CenterX, CenterY, Angle, Blend, Alpha,
X, Y, Width, Height, SrcRect, CenterX, CenterY, round(Angle), Blend, Alpha,
Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawRotateAlpha(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle, Alpha: Integer);
var
Src_ddsd: TDDSurfaceDesc;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: single; Alpha: Integer);
{$IFDEF DXR_deprecated}var
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;
Blend: TDXR_Blend;
Blend: TDXR_Blend; {$ENDIF}
begin
if Alpha<=0 then Exit;
 
2074,10 → 3728,15
if Source=nil then Exit;
if (Source.Width=0) or (Source.Height=0) then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderRotateDDS(Source, SrcRect, X, Y, Width, Height, rtBlend, CenterX, CenterY, Angle, Alpha, Transparent);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
if DestSurface.ColorType=DXR_COLORTYPE_INDEXED then
2093,24 → 3752,25
end;
 
dxrDrawRotateBlend(DestSurface, SrcSurface,
X, Y, Width, Height, SrcRect, CenterX, CenterY, Angle, Blend, Alpha,
X, Y, Width, Height, SrcRect, CenterX, CenterY, round(Angle), Blend, Alpha,
Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawRotateSub(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle, Alpha: Integer);
var
Src_ddsd: TDDSurfaceDesc;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: single; Alpha: Integer);
{$IFDEF DXR_deprecated}var
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;
Blend: TDXR_Blend;
Blend: TDXR_Blend;{$ENDIF}
begin
if Alpha<=0 then Exit;
 
2119,10 → 3779,15
if Source=nil then Exit;
if (Source.Width=0) or (Source.Height=0) then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderRotateDDS(Source, SrcRect, X, Y, Width, Height, rtSub, CenterX, CenterY, Angle, Alpha, Transparent);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
if DestSurface.ColorType=DXR_COLORTYPE_INDEXED then
2138,23 → 3803,94
end;
 
dxrDrawRotateBlend(DestSurface, SrcSurface,
X, Y, Width, Height, SrcRect, CenterX, CenterY, Angle, Blend, Alpha,
X, Y, Width, Height, SrcRect, CenterX, CenterY, round(Angle), Blend, Alpha,
Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawRotateCol(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: Single; Color: Integer);
begin
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderRotateModeColDDS(Source, X, Y, Width, Height, rtDraw, CenterX, CenterY, Angle, Color, $FF, Transparent);
Exit;
end;
 
// If no hardware acceleration, falls back to non-color, moded DrawRotate
Self.DrawRotate(X, Y, Width, Height, SrcRect, Source, CenterX, CenterY, Transparent, Angle);
end;
 
procedure TDirectDrawSurface.DrawRotateAlphaCol(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: Single; Color, Alpha: Integer);
begin
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderRotateModeColDDS(Source, X, Y, Width, Height, rtBlend, CenterX, CenterY, Angle, Color, Alpha, Transparent);
Exit;
end;
 
// If no hardware acceleration, falls back to non-color, moded DrawRotate
Self.DrawRotateAlpha(X, Y, Width, Height, SrcRect, Source, CenterX, CenterY, Transparent, Angle, Alpha);
end;
 
procedure TDirectDrawSurface.DrawRotateAddCol(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: Single; Color, Alpha: Integer);
begin
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderRotateModeColDDS(Source, X, Y, Width, Height, rtAdd, CenterX, CenterY, Angle, Color, Alpha, Transparent);
Exit;
end;
 
// If no hardware acceleration, falls back to non-color, moded DrawRotate
Self.DrawRotateAdd(X, Y, Width, Height, SrcRect, Source, CenterX, CenterY, Transparent, Angle, Alpha);
end;
 
procedure TDirectDrawSurface.DrawRotateSubCol(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; CenterX, CenterY: Double; Transparent: Boolean; Angle: Single; Color, Alpha: Integer);
begin
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderRotateModeColDDS(Source, X, Y, Width, Height, rtSub, CenterX, CenterY, Angle, Color, Alpha, Transparent);
Exit;
end;
 
// If no hardware acceleration, falls back to non-color, moded DrawRotate
Self.DrawRotateSub(X, Y, Width, Height, SrcRect, Source, CenterX, CenterY, Transparent, Angle, Alpha);
end;
 
//waves
 
procedure TDirectDrawSurface.DrawWaveX(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph: Integer);
var
Src_ddsd: TDDSurfaceDesc;
DestSurface, SrcSurface: TDXR_Surface;
{$IFDEF DXR_deprecated}var
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;{$ENDIF}
begin
if (Self.Width=0) or (Self.Height=0) then Exit;
if (Width=0) or (Height=0) then Exit;
2161,10 → 3897,15
if Source=nil then Exit;
if (Source.Width=0) or (Source.Height=0) then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderWaveXDDS(Source, X, Y, Width, Height, rtDraw, Transparent, amp, Len, ph{$IFNDEF VER4UP}, $FF{$ENDIF});
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
dxrDrawWaveXBlend(DestSurface, SrcSurface,
2171,21 → 3912,22
X, Y, Width, Height, SrcRect, amp, Len, ph, DXR_BLEND_ONE1, 0,
Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawWaveXAdd(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph, Alpha: Integer);
var
Src_ddsd: TDDSurfaceDesc;
{$IFDEF DXR_deprecated}var
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;
Blend: TDXR_Blend;
Blend: TDXR_Blend;{$ENDIF}
begin
if Alpha<=0 then Exit;
 
2194,10 → 3936,15
if Source=nil then Exit;
if (Source.Width=0) or (Source.Height=0) then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderWaveXDDS(Source, X, Y, Width, Height, rtAdd, Transparent, amp, Len, ph, Alpha);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
if DestSurface.ColorType=DXR_COLORTYPE_INDEXED then
2216,21 → 3963,23
X, Y, Width, Height, SrcRect, amp, Len, ph, Blend, Alpha,
Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawWaveXAlpha(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph, Alpha: Integer);
{$IFDEF DXR_deprecated}
var
Src_ddsd: TDDSurfaceDesc;
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;
Blend: TDXR_Blend;
Blend: TDXR_Blend;{$ENDIF}
begin
if Alpha<=0 then Exit;
 
2239,10 → 3988,15
if Source=nil then Exit;
if (Source.Width=0) or (Source.Height=0) then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderWaveXDDS(Source, X, Y, Width, Height, rtBlend, Transparent, amp, Len, ph, Alpha);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
if DestSurface.ColorType=DXR_COLORTYPE_INDEXED then
2261,21 → 4015,23
X, Y, Width, Height, SrcRect, amp, Len, ph, Blend, Alpha,
Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawWaveXSub(X, Y, Width, Height: Integer; const SrcRect: TRect;
Source: TDirectDrawSurface; Transparent: Boolean; amp, Len, ph, Alpha: Integer);
{$IFDEF DXR_deprecated}
var
Src_ddsd: TDDSurfaceDesc;
Src_ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
DestSurface, SrcSurface: TDXR_Surface;
Blend: TDXR_Blend;
Blend: TDXR_Blend;{$ENDIF}
begin
if Alpha<=0 then Exit;
 
2284,10 → 4040,15
if Source=nil then Exit;
if (Source.Width=0) or (Source.Height=0) then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderWaveXDDS(Source, X, Y, Width, Height, rtSub, Transparent, amp, Len, ph, Alpha);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
if dxrDDSurfaceLock2(Source.ISurface, Src_ddsd, SrcSurface) then
if dxrDDSurfaceLock2(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, Src_ddsd, SrcSurface) then
begin
try
if DestSurface.ColorType=DXR_COLORTYPE_INDEXED then
2306,15 → 4067,82
X, Y, Width, Height, SrcRect, amp, Len, ph, Blend, Alpha,
Transparent, Src_ddsd.ddckCKSrcBlt.dwColorSpaceLowValue);
finally
dxrDDSurfaceUnLock(Source.ISurface, SrcSurface)
dxrDDSurfaceUnLock(Source.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, SrcSurface)
end;
end;
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
 
procedure TDirectDrawSurface.DrawWaveYSub(X, Y, Width, Height: Integer;
const SrcRect: TRect; Source: TDirectDrawSurface; Transparent: Boolean; amp,
Len, ph, Alpha: Integer);
begin
if Alpha <= 0 then Exit;
 
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderWaveYDDS(Source, X, Y, Width, Height, rtSub, Transparent, amp, Len, ph, Alpha);
Exit;
end;
end;
 
procedure TDirectDrawSurface.DrawWaveY(X, Y, Width, Height: Integer;
const SrcRect: TRect; Source: TDirectDrawSurface; Transparent: Boolean; amp,
Len, ph: Integer);
begin
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderWaveYDDS(Source, X, Y, Width, Height, rtDraw, Transparent, amp, Len, ph{$IFNDEF VER4UP}, $FF{$ENDIF});
Exit;
end;
end;
 
procedure TDirectDrawSurface.DrawWaveYAdd(X, Y, Width, Height: Integer;
const SrcRect: TRect; Source: TDirectDrawSurface; Transparent: Boolean; amp,
Len, ph, Alpha: Integer);
begin
if Alpha <= 0 then Exit;
 
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderWaveYDDS(Source, X, Y, Width, Height, rtAdd, Transparent, amp, Len, ph, Alpha);
Exit;
end;
end;
 
procedure TDirectDrawSurface.DrawWaveYAlpha(X, Y, Width, Height: Integer;
const SrcRect: TRect; Source: TDirectDrawSurface; Transparent: Boolean; amp,
Len, ph, Alpha: Integer);
begin
if Alpha <= 0 then Exit;
 
if (Self.Width = 0) or (Self.Height = 0) then Exit;
if (Width = 0) or (Height = 0) then Exit;
if Source = nil then Exit;
if (Source.Width = 0) or (Source.Height = 0) then Exit;
 
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderWaveYDDS(Source, X, Y, Width, Height, rtBlend, Transparent, amp, Len, ph, Alpha);
Exit;
end;
end;
 
procedure TDirectDrawSurface.Fill(DevColor: Longint);
var
DBltEx: TDDBltFX;
2336,9 → 4164,9
Blt(DestRect, TRect(nil^), DDBLT_COLORFILL or DDBLT_WAIT, DBltEx, nil);
end;
 
procedure TDirectDrawSurface.FillRectAdd(const DestRect: TRect; Color: TColor);
var
DestSurface: TDXR_Surface;
procedure TDirectDrawSurface.FillRectAdd(const DestRect: TRect; Color: TColor; Alpha: Byte);
{$IFDEF DXR_deprecated}var
DestSurface: TDXR_Surface;{$ENDIF}
begin
if Color and $FFFFFF=0 then Exit;
if (Self.Width=0) or (Self.Height=0) then Exit;
2345,38 → 4173,49
if SurfaceDesc.ddpfPixelFormat.dwFlags and (DDPF_PALETTEINDEXED1 or DDPF_PALETTEINDEXED2 or
DDPF_PALETTEINDEXED4 or DDPF_PALETTEINDEXED8)<>0 then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderFillRect(DestRect, ColorToRGB(Color), rtAdd, Alpha);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
dxrFillRectColorBlend(DestSurface, DestRect, DXR_BLEND_ONE1_ADD_ONE2, ColorToRGB(Color));
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;
{$ENDIF}
end;
procedure TDirectDrawSurface.FillRectAlpha(const DestRect: TRect; Color: TColor;
Alpha: Integer);
var
DestSurface: TDXR_Surface;
{$IFDEF DXR_deprecated}var
DestSurface: TDXR_Surface;{$ENDIF}
begin
if (Self.Width=0) or (Self.Height=0) then Exit;
if SurfaceDesc.ddpfPixelFormat.dwFlags and (DDPF_PALETTEINDEXED1 or DDPF_PALETTEINDEXED2 or
DDPF_PALETTEINDEXED4 or DDPF_PALETTEINDEXED8)<>0 then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderFillRect(DestRect, ColorToRGB(Color), rtBlend, Alpha);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
dxrFillRectColorBlend(DestSurface, DestRect, DXR_BLEND_SRCALPHA1_ADD_INVSRCALPHA2, ColorToRGB(Color) or (Byte(Alpha) shl 24));
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;{$ENDIF}
end;
end;
 
procedure TDirectDrawSurface.FillRectSub(const DestRect: TRect; Color: TColor);
var
DestSurface: TDXR_Surface;
procedure TDirectDrawSurface.FillRectSub(const DestRect: TRect; Color: TColor; Alpha: Byte);
{$IFDEF DXR_deprecated}var
DestSurface: TDXR_Surface;{$ENDIF}
begin
if Color and $FFFFFF=0 then Exit;
if (Self.Width=0) or (Self.Height=0) then Exit;
2383,15 → 4222,20
if SurfaceDesc.ddpfPixelFormat.dwFlags and (DDPF_PALETTEINDEXED1 or DDPF_PALETTEINDEXED2 or
DDPF_PALETTEINDEXED4 or DDPF_PALETTEINDEXED8)<>0 then Exit;
 
if dxrDDSurfaceLock(ISurface, DestSurface) then
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then begin
D2D.D2DRenderFillRect(DestRect, ColorToRGB(Color), rtSub, Alpha);
Exit;
end;
{$IFDEF DXR_deprecated}
if dxrDDSurfaceLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface) then
begin
try
dxrFillRectColorBlend(DestSurface, DestRect, DXR_BLEND_ONE2_SUB_ONE1, ColorToRGB(Color));
finally
dxrDDSurfaceUnLock(ISurface, DestSurface)
dxrDDSurfaceUnLock({$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, DestSurface)
end;
end;{$ENDIF}
end;
end;
 
function TDirectDrawSurface.GetBitCount: Integer;
begin
2423,10 → 4267,10
 
function TDirectDrawSurface.GetPixel(X, Y: Integer): Longint;
var
ddsd: TDDSurfaceDesc;
ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
begin
Result := 0;
if (IDDSurface<>nil) and (X>=0) and (X<Width) and (Y>=0) and (Y<Height) then
if ({$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil) and (X >= 0) and (X < Width) and (Y >= 0) and (Y < Height) then
if Lock(PRect(nil)^, ddsd) then
begin
try
2486,16 → 4330,18
if Graphic is TDIB then
begin
with Canvas do
begin
try
StretchBlt(Handle, 0, 0, AWidth, AHeight, TDIB(Graphic).Canvas.Handle,
Left, Top, Right-Left, Bottom-Top,SRCCOPY);
finally
Release;
end;
end else if (Right-Left=AWidth) and (Bottom-Top=AHeight) then
begin
with Canvas do
begin
try
Draw(-Left, -Top, Graphic);
finally
Release;
end;
end else
2506,8 → 4352,9
Temp.Canvas.Draw(-Left, -Top, Graphic);
 
with Canvas do
begin
try
StretchDraw(Bounds(0, 0, AWidth, AHeight), Temp);
finally
Release;
end;
finally
2543,63 → 4390,81
end;
end;
 
function TDirectDrawSurface.Lock(const Rect: TRect; var SurfaceDesc: TDDSurfaceDesc): Boolean;
function TDirectDrawSurface.Lock(const Rect: TRect; var SurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF}): Boolean;
begin
Result := False;
if IDDSurface=nil then Exit;
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} = nil then Exit;
 
if FLockCount>0 then Exit;
 
FIsLocked := False;
FLockSurfaceDesc.dwSize := SizeOf(FLockSurfaceDesc);
 
if (@Rect<>nil) and ((Rect.Left<>0) or (Rect.Top<>0) or (Rect.Right<>Width) or (Rect.Bottom<>Height)) then
DXResult := ISurface.Lock(@Rect, FLockSurfaceDesc, DDLOCK_WAIT, 0)
DXResult := {$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.Lock(@Rect, FLockSurfaceDesc, DDLOCK_WAIT, 0)
else
DXResult := ISurface.Lock(nil, FLockSurfaceDesc, DDLOCK_WAIT, 0);
DXResult := {$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.Lock(nil, FLockSurfaceDesc, DDLOCK_WAIT, 0);
if DXResult<>DD_OK then Exit;
 
Inc(FLockCount);
SurfaceDesc := FLockSurfaceDesc;
 
FIsLocked := True;
Result := True;
end;
{$IFDEF DelphiX_Spt4}
function TDirectDrawSurface.Lock(var SurfaceDesc: TDDSurfaceDesc): Boolean;
{$IFDEF VER4UP}
function TDirectDrawSurface.Lock(var SurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF}): Boolean;
begin
Result := False;
if IDDSurface=nil then Exit;
FIsLocked := False;
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} = nil then Exit;
 
if FLockCount=0 then
begin
FLockSurfaceDesc.dwSize := SizeOf(FLockSurfaceDesc);
DXResult := ISurface.Lock(nil, FLockSurfaceDesc, DDLOCK_WAIT, 0);
DXResult := {$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.Lock(nil, FLockSurfaceDesc, DDLOCK_WAIT, 0);
if DXResult<>DD_OK then Exit;
end;
 
Inc(FLockCount);
SurfaceDesc := FLockSurfaceDesc;
FIsLocked := True;
Result := True;
end;
 
function TDirectDrawSurface.Lock: Boolean;
var SurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
begin
Result := Lock(SurfaceDesc);
end;
 
{$ELSE}
 
function TDirectDrawSurface.LockSurface: Boolean;
var SurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF}; R: TRect;
begin
Result := Lock(R, SurfaceDesc);
end;
{$ENDIF}
 
procedure TDirectDrawSurface.UnLock;
begin
if IDDSurface=nil then Exit;
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} = nil then Exit;
 
if FLockCount>0 then
begin
Dec(FLockCount);
if FLockCount=0 then
DXResult := ISurface.UnLock(FLockSurfaceDesc.lpSurface);
if FLockCount = 0 then begin
DXResult := {$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.UnLock(FLockSurfaceDesc.lpSurface);
FIsLocked := False;
end;
end;
end;
 
function TDirectDrawSurface.Restore: Boolean;
begin
if IDDSurface<>nil then
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
begin
DXResult := ISurface.Restore;
DXResult := {$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}._Restore;
Result := DXResult=DD_OK;
end else
Result := False;
2607,29 → 4472,29
 
procedure TDirectDrawSurface.SetClipper(Value: TDirectDrawClipper);
begin
if IDDSurface<>nil then
DXResult := ISurface.SetClipper(Value.IDDClipper);
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
DXResult := {$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.SetClipper(Value.IDDClipper);
FHasClipper := (Value<>nil) and (DXResult=DD_OK);
end;
 
procedure TDirectDrawSurface.SetColorKey(Flags: DWORD; const Value: TDDColorKey);
begin
if IDDSurface<>nil then
DXResult := ISurface.SetColorKey(Flags, Value);
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
DXResult := {$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.SetColorKey(Flags, @Value);
end;
 
procedure TDirectDrawSurface.SetPalette(Value: TDirectDrawPalette);
begin
if IDDSurface<>nil then
DXResult := ISurface.SetPalette(Value.IDDPalette);
if {$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
DXResult := {$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.SetPalette(Value.IDDPalette);
end;
 
procedure TDirectDrawSurface.SetPixel(X, Y: Integer; Value: Longint);
var
ddsd: TDDSurfaceDesc;
ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
P: PByte;
begin
if (IDDSurface<>nil) and (X>=0) and (X<Width) and (Y>=0) and (Y<Height) then
if ({$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil) and (X >= 0) and (X < Width) and (Y >= 0) and (Y < Height) then
if Lock(PRect(nil)^, ddsd) then
begin
try
2666,14 → 4531,15
 
procedure TDirectDrawSurface.SetSize(AWidth, AHeight: Integer);
var
ddsd: TDDSurfaceDesc;
ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
begin
if (AWidth<=0) or (AHeight<=0) then
begin
IDDSurface := nil;
{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := nil;
Exit;
end;
 
FillChar(ddsd, SizeOf(ddsd), 0);
with ddsd do
begin
dwSize := SizeOf(ddsd);
2710,6 → 4576,744
ColorKey[DDCKEY_SRCBLT] := ddck;
end;
 
{additional pixel routines like turbopixels}
 
{
procedure TDirectDrawSurface.PutPixel8(x, y, color: Integer);
var
SurfacePtr: PByte;
PixelOffset: Integer;
begin
SurfacePtr := FLockSurfaceDesc.lpSurface;
PixelOffset := x + y * FLockSurfaceDesc.dwWidth;
SurfacePtr[PixelOffset] := color and $FF; // set pixel (lo byte of color)
end;}
 
procedure TDirectDrawSurface.PutPixel8(x, y, color: Integer); assembler;
{ on entry: self = eax, x = edx, y = ecx, color = ? }
asm
push esi // must maintain esi
mov esi,TDirectDrawSurface[eax].FLockSurfaceDesc.lpSurface// set to surface
add esi,edx // add x
mov eax,[TDirectDrawSurface[eax].FLockSurfaceDesc.dwwidth] // eax = pitch
mul ecx // eax = pitch * y
add esi,eax // esi = pixel offset
mov ecx, color
mov ds:[esi],cl // set pixel (lo byte of ecx)
pop esi // restore esi
//ret // return
end;
 
{
procedure TDirectDrawSurface.PutPixel16(x, y, color: Integer);
var
pPixel: PWord;
begin
pPixel := PWord(Integer(TDirectDrawSurface(Self).FLockSurfaceDesc.lpSurface) +
x * 2 + y * TDirectDrawSurface(Self).FLockSurfaceDesc.lPitch);
pPixel^ := color;
end;
}
 
procedure TDirectDrawSurface.PutPixel16(x, y, color: Integer); assembler;
{ on entry: self = eax, x = edx, y = ecx, color = ? }
asm
push esi
mov esi,TDirectDrawSurface[eax].FLockSurfaceDesc.lpSurface
shl edx,1
add esi,edx
mov eax,[TDirectDrawSurface[eax].FLockSurfaceDesc.lpitch]
mul ecx
add esi,eax
mov ecx, color
mov ds:[esi],cx
pop esi
//ret
end;
 
{
procedure TDirectDrawSurface.PutPixel24(x, y, color: Integer);
var
pPixel: PByte;
dwPitch: DWORD;
dwColor: DWORD;
begin
pPixel := PByte(TDirectDrawSurface(Self).FLockSurfaceDesc.lpSurface);
Inc(pPixel, x * 3);
dwPitch := TDirectDrawSurface(Self).FLockSurfaceDesc.lPitch;
Inc(pPixel, y * dwPitch);
dwColor := color and $FFFFFF;
pPixel[0] := Byte(dwColor);
pPixel[1] := Byte(dwColor shr 8);
pPixel[2] := Byte(dwColor shr 16);
end;
}
 
procedure TDirectDrawSurface.PutPixel24(x, y, color: Integer); assembler;
{ on entry: self = eax, x = edx, y = ecx, color = ? }
asm
push esi
mov esi,TDirectDrawSurface[eax].FLockSurfaceDesc.lpSurface
imul edx,3
add esi,edx
mov eax,[TDirectDrawSurface[eax].FLockSurfaceDesc.lpitch]
mul ecx
add esi,eax
mov eax,ds:[esi]
and eax,$FF000000
mov ecx, color
or ecx,eax
mov ds:[esi+1],ecx
pop esi
//ret
end;
 
{
procedure TDirectDrawSurface.PutPixel24(x, y, color: Integer);
var
offset: Integer;
pixelColor: LongInt;
begin
offset := (y * TDirectDrawSurface(Self).FLockSurfaceDesc.lpitch) + (x * 3);
pixelColor := color and $FFFFFF;
Move(pixelColor, PByte(Integer(TDirectDrawSurface(Self).FLockSurfaceDesc.lpSurface) + offset)^, 3);
end;
}
 
procedure TDirectDrawSurface.PutPixel32(x, y, color: Integer); assembler;
{ on entry: self = eax, x = edx, y = ecx, color = ? }
asm
push esi
mov esi,TDirectDrawSurface[eax].FLockSurfaceDesc.lpSurface
shl edx,2
add esi,edx
mov eax,[TDirectDrawSurface[eax].FLockSurfaceDesc.lpitch]
mul ecx
add esi,eax
mov ecx, color
mov ds:[esi],ecx
pop esi
//ret
end;
 
procedure TDirectDrawSurface.Poke(X, Y: Integer; const Value: LongInt);
begin
if (X < 0) or (X > (Width - 1)) or
(Y < 0) or (Y > (Height - 1)) or not FIsLocked then Exit;
case Bitcount of
8: PutPixel8(x, y, value);
16: PutPixel16(x, y, value);
24: PutPixel24(x, y, value);
32: PutPixel32(x, y, value);
end;
end;
 
{
function TDirectDrawSurface.GetPixel8(x, y: Integer): Integer;
var
Pixel: Byte;
PixelPtr: PByte;
begin
PixelPtr := PByte(TDirectDrawSurface(Self).FLockSurfaceDesc.lpSurface + x + (y * TDirectDrawSurface(Self).FLockSurfaceDesc.lpitch));
Pixel := PixelPtr^;
Result := Pixel;
end;
 
function TDirectDrawSurface.GetPixel16(x, y: Integer): Integer;
var
Pixel: Word;
PixelPtr: PWord;
begin
PixelPtr := PWord(TDirectDrawSurface(Self).FLockSurfaceDesc.lpSurface + (x * 2) + (y * TDirectDrawSurface(Self).FLockSurfaceDesc.lpitch));
Pixel := PixelPtr^;
Result := Pixel;
end;
 
function TDirectDrawSurface.GetPixel24(x, y: Integer): Integer;
var
Pixel: array[0..2] of Byte;
PixelPtr: PByte;
begin
PixelPtr := PByte(TDirectDrawSurface(Self).FLockSurfaceDesc.lpSurface + (x * 3) + (y * TDirectDrawSurface(Self).FLockSurfaceDesc.lpitch));
Pixel[0] := PixelPtr^;
Pixel[1] := (PixelPtr+1)^;
Pixel[2] := (PixelPtr+2)^;
Result := Pixel[0] or (Pixel[1] shl 8) or (Pixel[2] shl 16);
end;
 
function TDirectDrawSurface.GetPixel32(x, y: Integer): Integer;
var
Pixel: Integer;
PixelPtr: PInteger;
begin
PixelPtr := PInteger(TDirectDrawSurface(Self).FLockSurfaceDesc.lpSurface + (x * 4) + (y * TDirectDrawSurface(Self).FLockSurfaceDesc.lpitch));
Pixel := PixelPtr^;
Result := Pixel;
end;
}
 
function TDirectDrawSurface.GetPixel8(x, y: Integer): Integer; assembler;
{ on entry: self = eax, x = edx, y = ecx, result = eax }
asm
push esi // myst maintain esi
mov esi,TDirectDrawSurface[eax].FLockSurfaceDesc.lpSurface // set to surface
add esi,edx // add x
mov eax,[TDirectDrawSurface[eax].FLockSurfaceDesc.lpitch] // eax = pitch
mul ecx // eax = pitch * y
add esi,eax // esi = pixel offset
mov eax,ds:[esi] // eax = color
and eax,$FF // map into 8bit
pop esi // restore esi
//ret // return
end;
 
function TDirectDrawSurface.GetPixel16(x, y: Integer): Integer; assembler;
{ on entry: self = eax, x = edx, y = ecx, result = eax }
asm
push esi
mov esi,TDirectDrawSurface[eax].FLockSurfaceDesc.lpSurface
shl edx,1
add esi,edx
mov eax,[TDirectDrawSurface[eax].FLockSurfaceDesc.lpitch]
mul ecx
add esi,eax
mov eax,ds:[esi]
and eax,$FFFF // map into 16bit
pop esi
//ret
end;
 
function TDirectDrawSurface.GetPixel24(x, y: Integer): Integer; assembler;
{ on entry: self = eax, x = edx, y = ecx, result = eax }
asm
push esi
mov esi,TDirectDrawSurface[eax].FLockSurfaceDesc.lpSurface
imul edx,3
add esi,edx
mov eax,[TDirectDrawSurface[eax].FLockSurfaceDesc.lpitch]
mul ecx
add esi,eax
mov eax,ds:[esi]
and eax,$FFFFFF // map into 24bit
pop esi
//ret
end;
 
function TDirectDrawSurface.GetPixel32(x, y: Integer): Integer; assembler;
{ on entry: self = eax, x = edx, y = ecx, result = eax }
asm
push esi
mov esi,TDirectDrawSurface[eax].FLockSurfaceDesc.lpSurface
shl edx,2
add esi,edx
mov eax,[TDirectDrawSurface[eax].FLockSurfaceDesc.lpitch]
mul ecx
add esi,eax
mov eax,ds:[esi]
pop esi
//ret
end;
 
function TDirectDrawSurface.Peek(X, Y: Integer): LongInt;
begin
Result := 0;
if (X < 0) or (X > (Width - 1)) or
(Y < 0) or (Y > (Height - 1)) or not FIsLocked then Exit;
case Bitcount of
8: Result := GetPixel8(x, y);
16: Result := GetPixel16(x, y);
24: Result := GetPixel24(x, y);
32: Result := GetPixel32(x, y);
end;
end;
 
procedure TDirectDrawSurface.PokeLine(X1, Y1, X2, Y2: Integer; Color: cardinal);
var
i, deltax, deltay, numpixels,
d, dinc1, dinc2,
x, xinc1, xinc2,
y, yinc1, yinc2: Integer;
begin
if not FIsLocked then {$IFDEF VER4UP}Lock{$ELSE}LockSurface{$ENDIF}; //force lock the surface
{ Calculate deltax and deltay for initialisation }
deltax := abs(x2 - x1);
deltay := abs(y2 - y1);
 
{ Initialise all vars based on which is the independent variable }
if deltax >= deltay then
begin
{ x is independent variable }
numpixels := deltax + 1;
d := (2 * deltay) - deltax;
 
dinc1 := deltay shl 1;
dinc2 := (deltay - deltax) shl 1;
xinc1 := 1;
xinc2 := 1;
yinc1 := 0;
yinc2 := 1;
end
else
begin
{ y is independent variable }
numpixels := deltay + 1;
d := (2 * deltax) - deltay;
dinc1 := deltax shl 1;
dinc2 := (deltax - deltay) shl 1;
xinc1 := 0;
xinc2 := 1;
yinc1 := 1;
yinc2 := 1;
end;
{ Make sure x and y move in the right directions }
if x1 > x2 then
begin
xinc1 := -xinc1;
xinc2 := -xinc2;
end;
if y1 > y2 then
begin
yinc1 := -yinc1;
yinc2 := -yinc2;
end;
x := x1;
y := y1;
{ Draw the pixels }
for i := 1 to numpixels do
begin
if (x > 0) and (x < (Width - 1)) and (y > 0) and (y < (Height - 1)) then
Pixel[x, y] := Color;
if d < 0 then
begin
Inc(d, dinc1);
Inc(x, xinc1);
Inc(y, yinc1);
end
else
begin
Inc(d, dinc2);
Inc(x, xinc2);
Inc(y, yinc2);
end;
end;
end;
 
procedure TDirectDrawSurface.PokeLinePolar(x, y: Integer; angle, length: extended; Color: cardinal);
var
xp, yp: Integer;
begin
xp := round(sin(angle * pi / 180) * length) + x;
yp := round(cos(angle * pi / 180) * length) + y;
PokeLine(x, y, xp, yp, Color);
end;
 
procedure TDirectDrawSurface.PokeBox(xs, ys, xd, yd: Integer; Color: cardinal);
begin
pokeline(xs, ys, xd, ys, color);
pokeline(xs, ys, xs, yd, color);
pokeline(xd, ys, xd, yd, color);
pokeline(xs, yd, xd, yd, color);
end;
 
procedure TDirectDrawSurface.PokeBlendPixel(const X, Y: Integer; aColor: cardinal; Alpha: byte);
var
cr, cg, cb: byte;
ar, ag, ab: byte;
begin
LoadRGB(aColor, ar, ag, ab);
LoadRGB(Pixel[x, y], cr, cg, cb);
Pixel[x, y] := SaveRGB((Alpha * (aR - cr) shr 8) + cr, // R alpha
(Alpha * (aG - cg) shr 8) + cg, // G alpha
(Alpha * (aB - cb) shr 8) + cb); // B alpha
end;
 
{
function Conv24to16(Color: Integer): Word;
var
r, g, b: Byte;
begin
r := (Color shr 16) and $FF;
g := (Color shr 8) and $FF;
b := Color and $FF;
Result := ((r shr 3) shl 11) or ((g shr 2) shl 5) or (b shr 3);
end;
}
 
function Conv24to16(Color: Integer): Word; register;
asm
mov ecx,eax
shl eax,24
shr eax,27
shl eax,11
mov edx,ecx
shl edx,16
shr edx,26
shl edx,5
or eax,edx
mov edx,ecx
shl edx,8
shr edx,27
or eax,edx
end;
 
procedure TDirectDrawSurface.PokeWuLine(X1, Y1, X2, Y2, aColor: Integer);
var DeltaX, DeltaY, Loop, Start, Finish: Integer;
Dx, Dy, DyDx: Single; // fractional parts
Color16: DWord;
begin
DeltaX := Abs(X2 - X1); // Calculate DeltaX and DeltaY for initialization
DeltaY := Abs(Y2 - Y1);
if (DeltaX = 0) or (DeltaY = 0) then
begin // straight lines
PokeLine(X1, Y1, X2, Y2, aColor);
Exit;
end;
if BitCount = 16 then
Color16 := Conv24to16(aColor)
else
Color16 := aColor;
if DeltaX > DeltaY then // horizontal or vertical
begin
{ determine rise and run }
if Y2 > Y1 then DyDx := -(DeltaY / DeltaX)
else DyDx := DeltaY / DeltaX;
if X2 < X1 then
begin
Start := X2; // right to left
Finish := X1;
Dy := Y2;
end else
begin
Start := X1; // left to right
Finish := X2;
Dy := Y1;
DyDx := -DyDx; // inverse slope
end;
for Loop := Start to Finish do
begin
PokeBlendPixel(Loop, Trunc(Dy), Color16, Trunc((1 - Frac(Dy)) * 255));
PokeBlendPixel(Loop, Trunc(Dy) + 1, Color16, Trunc(Frac(Dy) * 255));
Dy := Dy + DyDx; // next point
end;
end else
begin
{ determine rise and run }
if X2 > X1 then DyDx := -(DeltaX / DeltaY)
else DyDx := DeltaX / DeltaY;
if Y2 < Y1 then
begin
Start := Y2; // right to left
Finish := Y1;
Dx := X2;
end else
begin
Start := Y1; // left to right
Finish := Y2;
Dx := X1;
DyDx := -DyDx; // inverse slope
end;
for Loop := Start to Finish do
begin
PokeBlendPixel(Trunc(Dx), Loop, Color16, Trunc((1 - Frac(Dx)) * 255));
PokeBlendPixel(Trunc(Dx), Loop, Color16, Trunc(Frac(Dx) * 255));
Dx := Dx + DyDx; // next point
end;
end;
end;
 
procedure TDirectDrawSurface.Noise(Oblast: TRect; Density: Byte);
var
dx, dy: Integer;
Dens: byte;
begin
{noise}
case Density of
0..2: Dens := 3;
255: Dens := 254;
else
Dens := Density;
end;
if Dens >= Oblast.Right then
Dens := Oblast.Right div 3;
dy := Oblast.Top;
while dy <= Oblast.Bottom do begin
dx := Oblast.Left;
while dx <= Oblast.Right do begin
inc(dx, random(dens));
if dx <= Oblast.Right then
Pixel[dx, dy] := not Pixel[dx, dy];
end;
inc(dy);
end;
end;
 
{
function Conv16to24(Color: Word): Integer;
var
r, g, b: Byte;
begin
r := (Color shr 11) and $1F;
g := (Color shr 5) and $3F;
b := Color and $1F;
Result := (r shl 19) or (g shl 10) or (b shl 3);
end;
}
 
function Conv16to24(Color: Word): Integer; register;
asm
xor edx,edx
mov dx,ax
 
mov eax,edx
shl eax,27
shr eax,8
 
mov ecx,edx
shr ecx,5
shl ecx,26
shr ecx,16
or eax,ecx
 
mov ecx,edx
shr ecx,11
shl ecx,27
shr ecx,24
or eax,ecx
end;
 
procedure GetRGB(Color: cardinal; var R, G, B: Byte); {$IFDEF VER9UP}inline; {$ENDIF}
begin
R := Color;
G := Color shr 8;
B := Color shr 16;
end;
 
procedure TDirectDrawSurface.LoadRGB(Color: cardinal; var R, G, B: Byte);
var grB: Byte;
begin
grB := 1;
if FLockSurfaceDesc.ddpfPixelFormat.dwGBitMask = 2016 then grB := 0; // 565
case BitCount of
15, 16: begin
R := (color shr (11 - grB)) shl 3;
if grB = 0 then
G := ((color and 2016) shr 5) shl 2
else
G := ((color and 992) shr 5) shl 3;
B := (color and 31) shl 3;
end;
else
GetRGB(Color, R, G, B);
end;
end;
 
function TDirectDrawSurface.SaveRGB(const R, G, B: Byte): cardinal;
begin
case BitCount of
15, 16: begin
Result := Conv24to16(RGB(R, G, B));
end;
else
Result := RGB(R, G, B);
end;
end;
 
procedure TDirectDrawSurface.Blur;
var
x, y, tr, tg, tb: Integer;
r, g, b: byte;
begin
for y := 1 to GetHeight - 1 do
for x := 1 to GetWidth - 1 do begin
LoadRGB(peek(x, y), r, g, b);
tr := r;
tg := g;
tb := b;
LoadRGB(peek(x, y + 1), r, g, b);
Inc(tr, r);
Inc(tg, g);
Inc(tb, b);
LoadRGB(peek(x, y - 1), r, g, b);
Inc(tr, r);
Inc(tg, g);
Inc(tb, b);
LoadRGB(peek(x - 1, y), r, g, b);
Inc(tr, r);
Inc(tg, g);
Inc(tb, b);
LoadRGB(peek(x + 1, y), r, g, b);
Inc(tr, r);
Inc(tg, g);
Inc(tb, b);
tr := tr shr 2;
tg := tg shr 2;
tb := tb shr 2;
Poke(x, y, savergb(tr, tg, tb));
end;
end;
 
procedure TDirectDrawSurface.PokeCircle(X, Y, Radius, Color: Integer);
var
a, af, b, bf, c,
target, r2: Integer;
begin
Target := 0;
A := Radius;
B := 0;
R2 := Sqr(Radius);
 
while a >= B do
begin
b := Round(Sqrt(R2 - Sqr(A)));
c := target; target := b; b := c;
while B < Target do
begin
Af := (120 * a) div 100;
Bf := (120 * b) div 100;
pixel[x + af, y + b] := color;
pixel[x + bf, y + a] := color;
pixel[x - af, y + b] := color;
pixel[x - bf, y + a] := color;
pixel[x - af, y - b] := color;
pixel[x - bf, y - a] := color;
pixel[x + af, y - b] := color;
pixel[x + bf, y - a] := color;
B := B + 1;
end;
A := A - 1;
end;
end;
 
function RGBToBGR(Color: cardinal): cardinal;
begin
result := (LoByte(LoWord(Color)) shr 3 shl 11) or // Red
(HiByte((Color)) shr 2 shl 5) or // Green
(LoByte(HiWord(Color)) shr 3); // Blue
end;
 
procedure TDirectDrawSurface.PokeVLine(x, y1, y2: Integer; Color: cardinal);
var
y: Integer;
NColor: cardinal;
r, g, b: byte;
begin
if y1 < 0 then y1 := 0;
if y2 >= Height then y2 := Height - 1;
GetRGB(Color, r, g, b);
NColor := RGBToBGR(rgb(r, g, b));
for y := y1 to y2 do
begin
pixel[x, y] := NColor;
end;
end;
 
procedure TDirectDrawSurface.PokeFilledEllipse(exc, eyc, ea, eb, color: Integer);
var x, y: Integer; aa, aa2, bb, bb2, d, dx, dy: LongInt;
begin
x := 0;
y := eb;
aa := LongInt(ea) * ea;
aa2 := 2 * aa;
bb := LongInt(eb) * eb;
bb2 := 2 * bb;
d := bb - aa * eb + aa div 4;
dx := 0;
dy := aa2 * eb;
PokevLine(exc, eyc - y, eyc + y, color);
while (dx < dy) do begin
if (d > 0) then begin
dec(y); dec(dy, aa2); dec(d, dy);
end;
inc(x); inc(dx, bb2); inc(d, bb + dx);
PokevLine(exc - x, eyc - y, eyc + y, color);
PokevLine(exc + x, eyc - y, eyc + y, color);
end;
inc(d, (3 * (aa - bb) div 2 - (dx + dy)) div 2);
while (y >= 0) do begin
if (d < 0) then begin
inc(x); inc(dx, bb2); inc(d, bb + dx);
PokevLine(exc - x, eyc - y, eyc + y, color);
PokevLine(exc + x, eyc - y, eyc + y, color);
end;
dec(y); dec(dy, aa2); inc(d, aa - dy);
end;
end;
 
procedure TDirectDrawSurface.DoRotate(cent1, cent2, angle: Integer; coord1, coord2: Real; Color: word);
var coord1t, coord2t: Real;
c1, c2: Integer;
begin
coord1t := coord1 - cent1;
coord2t := coord2 - cent2;
coord1 := coord1t * cos(angle * pi / 180) - coord2t * sin(angle * pi / 180);
coord2 := coord1t * sin(angle * pi / 180) + coord2t * cos(angle * pi / 180);
coord1 := coord1 + cent1;
coord2 := coord2 + cent2;
c1 := round(coord1);
c2 := round(coord2);
pixel[c1, c2] := Color;
end;
 
procedure TDirectDrawSurface.PokeEllipse(exc, eyc, ea, eb, angle, Color: Integer);
var
elx, ely: Integer;
aa, aa2, bb, bb2, d, dx, dy: LongInt;
x, y: real;
begin
elx := 0;
ely := eb;
aa := LongInt(ea) * ea;
aa2 := 2 * aa;
bb := LongInt(eb) * eb;
bb2 := 2 * bb;
d := bb - aa * eb + aa div 4;
dx := 0;
dy := aa2 * eb;
x := exc;
y := eyc - ely;
dorotate(exc, eyc, angle, x, y, Color);
x := exc;
y := eyc + ely;
dorotate(exc, eyc, angle, x, y, Color);
x := exc - ea;
y := eyc;
dorotate(exc, eyc, angle, x, y, Color);
x := exc + ea;
y := eyc;
dorotate(exc, eyc, angle, x, y, Color);
while (dx < dy) do begin
if (d > 0) then begin Dec(ely); Dec(dy, aa2); Dec(d, dy); end;
Inc(elx); Inc(dx, bb2); Inc(d, bb + dx);
x := exc + elx; y := eyc + ely;
dorotate(exc, eyc, angle, x, y, Color);
x := exc - elx; y := eyc + ely;
dorotate(exc, eyc, angle, x, y, Color);
x := exc + elx; y := eyc - ely;
dorotate(exc, eyc, angle, x, y, Color);
x := exc - elx; y := eyc - ely;
dorotate(exc, eyc, angle, x, y, Color);
end;
Inc(d, (3 * (aa - bb) div 2 - (dx + dy)) div 2);
while (ely > 0) do begin
if (d < 0) then begin Inc(elx); Inc(dx, bb2); Inc(d, bb + dx); end;
Dec(ely); Dec(dy, aa2); Inc(d, aa - dy);
x := exc + elx; y := eyc + ely;
dorotate(exc, eyc, angle, x, y, Color);
x := exc - elx; y := eyc + ely;
dorotate(exc, eyc, angle, x, y, Color);
x := exc + elx; y := eyc - ely;
dorotate(exc, eyc, angle, x, y, Color);
x := exc - elx; y := eyc - ely;
dorotate(exc, eyc, angle, x, y, Color);
end;
end;
 
procedure TDirectDrawSurface.MirrorFlip(Value: TRenderMirrorFlipSet);
begin
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Self) then
D2D.MirrorFlip := Value;
end;
 
{ TDXDrawDisplayMode }
 
function TDXDrawDisplayMode.GetBitCount: Integer;
2736,10 → 5340,10
FModes := TCollection.Create(TDXDrawDisplayMode);
FWidth := 640;
FHeight := 480;
FBitCount := 8;
FFixedBitCount := True;
FBitCount := 16;
FFixedBitCount := False; //True;
FFixedRatio := True;
FFixedSize := False;
FFixedSize := True; //False;
end;
 
destructor TDXDrawDisplay.Destroy;
2776,7 → 5380,7
function TDXDrawDisplay.GetMode: TDXDrawDisplayMode;
var
i: Integer;
ddsd: TDDSurfaceDesc;
ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
begin
Result := nil;
if FDXDraw.DDraw<>nil then
2840,13 → 5444,16
 
if FDXDraw.DDraw<>nil then
begin
FDXDraw.DDraw.DXResult := FDXDraw.DDraw.IDraw.EnumDisplayModes(0, PDDSurfaceDesc(nil)^,
FDXDraw.DDraw.DXResult := FDXDraw.DDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}
.EnumDisplayModes(0, {$IFDEF D3D_deprecated}PDDSurfaceDesc{$ELSE}PDDSurfaceDesc2{$ENDIF}(nil),
FModes, @EnumDisplayModesProc);
end else
begin
DDraw := TDirectDraw.Create(PGUID(FDXDraw.FDriver));
try
DDraw.IDraw.EnumDisplayModes(0, PDDSurfaceDesc(nil)^, FModes, @EnumDisplayModesProc);
DDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}
.EnumDisplayModes(0, {$IFDEF D3D_deprecated}PDDSurfaceDesc{$ELSE}PDDSurfaceDesc2{$ENDIF}(nil),
FModes, @EnumDisplayModesProc);
finally
DDraw.Free;
end;
2865,12 → 5472,13
end;
end;
 
function TDXDrawDisplay.SetSize(AWidth, AHeight, ABitCount: Integer): Boolean;
function TDXDrawDisplay.SetSize(AWidth, AHeight, ABitCount{$IFNDEF D3D_deprecated}, ARefreshRate, AFlags{$ENDIF}: Integer): Boolean;
begin
Result := False;
if FDXDraw.DDraw<>nil then
begin
FDXDraw.DDraw.DXResult := FDXDraw.DDraw.IDraw.SetDisplayMode(AWidth, AHeight, ABitCount);
FDXDraw.DDraw.DXResult := FDXDraw.DDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}
.SetDisplayMode(AWidth, AHeight, ABitCount{$IFNDEF D3D_deprecated}, ARefreshRate, AFlags{$ENDIF});
Result := FDXDraw.DDraw.DXResult=DD_OK;
 
if Result then
2884,6 → 5492,13
 
function TDXDrawDisplay.DynSetSize(AWidth, AHeight, ABitCount: Integer): Boolean;
 
{$IFNDEF D3D_deprecated}
function GetDefaultRefreshRate: Integer;
begin
Result := 60;
end;
{$ENDIF}
 
function TestBitCount(BitCount, ABitCount: Integer): Boolean;
begin
if (BitCount>8) and (ABitCount>8) then
2897,7 → 5512,7
 
function SetSize2(Ratio: Boolean): Boolean;
var
DWidth, DHeight, DBitCount, i: Integer;
DWidth, DHeight, DBitCount{$IFNDEF D3D_deprecated}, DRRate, DFlags{$ENDIF}, i: Integer;
Flag: Boolean;
begin
Result := False;
2905,7 → 5520,10
DWidth := Maxint;
DHeight := Maxint;
DBitCount := ABitCount;
 
{$IFNDEF D3D_deprecated}
DRRate := GetDefaultRefreshRate;
DFlags := 0;
{$ENDIF}
Flag := False;
for i:=0 to Count-1 do
with Modes[i] do
2933,7 → 5551,7
DBitCount := ABitCount;
end;
 
Result := SetSize(DWidth, DHeight, DBitCount);
Result := SetSize(DWidth, DHeight, DBitCount{$IFNDEF D3D_deprecated}, DRRate, DFlags{$ENDIF});
end;
end;
 
2943,7 → 5561,7
if (AWidth<=0) or (AHeight<=0) or (not (ABitCount in [8, 16, 24, 32])) then Exit;
 
{ The change is attempted by the size of default. }
if SetSize(AWidth, AHeight, ABitCount) then
if SetSize(AWidth, AHeight, ABitCount{$IFNDEF D3D_deprecated}, GetDefaultRefreshRate, 0{$ENDIF}) then
begin
Result := True;
Exit;
3003,8 → 5621,8
begin
if ZBuffer<>nil then
begin
if (Surface.IDDSurface<>nil) and (ZBuffer.IDDSurface<>nil) then
Surface.ISurface.DeleteAttachedSurface(0, ZBuffer.IDDSurface);
if (Surface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil) and (ZBuffer.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil) then
Surface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.DeleteAttachedSurface(0, ZBuffer.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF});
ZBuffer.Free; ZBuffer := nil;
end;
end;
3011,12 → 5629,12
 
type
TInitializeDirect3DOption = (idoSelectDriver, idoOptimizeDisplayMode,
idoHardware, idoRetainedMode, idoZBuffer);
idoHardware, {$IFDEF D3DRM}idoRetainedMode,{$ENDIF} idoZBuffer);
 
TInitializeDirect3DOptions = set of TInitializeDirect3DOption;
 
procedure Direct3DInitializing(Options: TInitializeDirect3DOptions;
var BitCount: Integer; var Driver: PGUID; var DriverGUID: TGUID);
var BitCount: Integer; var Driver: PGUID; var DriverGUID: TGUID{$IFNDEF D3D_deprecated}; var D3DDeviceTypeSet: TD3DDeviceTypeSet{$ENDIF});
type
PDirect3DInitializingRecord = ^TDirect3DInitializingRecord;
TDirect3DInitializingRecord = record
3028,19 → 5646,29
Flag: Boolean;
DriverCaps: TDDCaps;
HELCaps: TDDCaps;
{$IFDEF D3D_deprecated}
HWDeviceDesc: TD3DDeviceDesc;
HELDeviceDesc: TD3DDeviceDesc;
DeviceDesc: TD3DDeviceDesc;
 
{$ELSE}
DeviceDesc: TD3DDeviceDesc7;
{$ENDIF}
D3DFlag: Boolean;
{$IFDEF D3D_deprecated}
HWDeviceDesc2: TD3DDeviceDesc;
HELDeviceDesc2: TD3DDeviceDesc;
DeviceDesc2: TD3DDeviceDesc;
{$ELSE}
DeviceDesc2: TD3DDeviceDesc7;
{$ENDIF}
end;
 
function EnumDeviceCallBack(const lpGuid: TGUID; lpDeviceDescription, lpDeviceName: PChar;
const lpD3DHWDeviceDesc, lpD3DHELDeviceDesc: TD3DDeviceDesc;
rec: PDirect3DInitializingRecord): HRESULT; stdcall;
{$IFDEF D3D_deprecated}
function EnumDeviceCallBack(lpGuid: PGUID; // nil for the default device
lpDeviceDescription: PAnsiChar; lpDeviceName: PAnsiChar;
var lpD3DHWDeviceDesc: TD3DDeviceDesc;
var lpD3DHELDeviceDesc: TD3DDeviceDesc;
rec: PDirect3DInitializingRecord) : HResult; stdcall;
 
procedure UseThisDevice;
begin
3058,7 → 5686,8
if idoOptimizeDisplayMode in rec.Options then
begin
if (lpD3DHWDeviceDesc.dwDeviceRenderBitDepth and (DDBD_16 or DDBD_24 or DDBD_32))=0 then Exit;
end else
end
else
begin
if (lpD3DHWDeviceDesc.dwDeviceRenderBitDepth and BPPToDDBD(rec.BitCount))=0 then Exit;
end;
3065,12 → 5694,38
 
UseThisDevice;
end;
{$ELSE}
function EnumDeviceCallBack(lpDeviceDescription: PAnsiChar; lpDeviceName: PAnsiChar;
const lpD3DDeviceDesc: TD3DDeviceDesc7; rec: PDirect3DInitializingRecord) : HResult; stdcall;
begin
Result := D3DENUMRET_OK;
 
function EnumDirectDrawDriverCallback(lpGUID: PGUID; lpDriverDescription: LPSTR;
lpDriverName: LPSTR; rec: PDirect3DInitializingRecord): HRESULT; stdcall;
maxVideoBlockSize := Min(lpD3DDeviceDesc.dwMaxTextureWidth, lpD3DDeviceDesc.dwMaxTextureHeight);
SurfaceDivWidth := lpD3DDeviceDesc.dwMaxTextureWidth;
SurfaceDivHeight := lpD3DDeviceDesc.dwMaxTextureHeight;
 
//if lpD3DHWDeviceDesc.dcmColorModel = 0 then Exit;
if idoOptimizeDisplayMode in rec.Options then
begin
if (lpD3DDeviceDesc.dwDeviceRenderBitDepth and (DDBD_16 or DDBD_24 or DDBD_32)) = 0 then Exit;
end
else
begin
if (lpD3DDeviceDesc.dwDeviceRenderBitDepth and BPPToDDBD(rec.BitCount)) = 0 then Exit;
end;
 
rec.D3DFlag := True;
rec.DeviceDesc2 := lpD3DDeviceDesc;
end;
{$ENDIF}
 
function EnumDirectDrawDriverCallback(lpGUID: PGUID; lpDriverDescription: {$IFDEF UNICODE}LPCTSTR{$ELSE}LPCSTR{$ENDIF};
lpDriverName: {$IFDEF UNICODE}LPCTSTR{$ELSE}LPCSTR{$ENDIF}; rec: PDirect3DInitializingRecord): HRESULT; stdcall;
var
DDraw: TDirectDraw;
{$IFDEF D3D_deprecated}
Direct3D: IDirect3D;
{$ENDIF}
Direct3D7: IDirect3D7;
 
function CountBitMask(i: DWORD; const Bits: array of DWORD): DWORD;
3123,7 → 5778,19
begin
{ The Direct3D driver is examined. }
rec.D3DFlag := False;
Direct3D.EnumDevices(@EnumDeviceCallBack, rec);
try
{$IFDEF D3D_deprecated}Direct3D{$ELSE}Direct3D7{$ENDIF}.EnumDevices(@EnumDeviceCallBack, rec) {= DD_OK}
except
on E: Exception do
begin
rec.D3DFlag := False;
// eventually catch exception to automatic log
Log(E.Message {$IFNDEF VER4UP}, ChangefileExt(ParamStr(0), '.log'){$ENDIF});
//and cannot continue !!!
Result := False;
Exit;
end;
end;
Result := rec.D3DFlag;
 
if not Result then Exit;
3131,17 → 5798,20
{ Comparison of DirectDraw driver. }
if not rec.Flag then
begin
{$IFDEF D3D_deprecated}
rec.HWDeviceDesc := rec.HWDeviceDesc2;
rec.HELDeviceDesc := rec.HELDeviceDesc2;
rec.DeviceDesc := rec.DeviceDesc2;
{$ENDIF}
rec.Flag := True;
end else
end
else
begin
{ Comparison of hardware. (One with large number of functions to support is chosen. }
Result := False;
 
if DDraw.DriverCaps.dwVidMemTotal<rec.DriverCaps.dwVidMemTotal then Exit;
 
{$IFDEF D3D_deprecated}
if CompareCountBitMask(DDraw.DriverCaps.ddscaps.dwCaps, rec.DriverCaps.ddscaps.dwCaps, [DDSCAPS_TEXTURE, DDSCAPS_ZBUFFER, DDSCAPS_MIPMAP])+
CompareCountBit(rec.HWDeviceDesc.dpcLineCaps.dwMiscCaps, rec.HWDeviceDesc2.dpcLineCaps.dwMiscCaps)+
CompareCountBit(rec.HWDeviceDesc.dpcLineCaps.dwRasterCaps, rec.HWDeviceDesc2.dpcLineCaps.dwRasterCaps)+
3153,7 → 5823,7
CompareCountBit(rec.HWDeviceDesc.dpcLineCaps.dwTextureFilterCaps, rec.HWDeviceDesc2.dpcLineCaps.dwTextureFilterCaps)+
CompareCountBit(rec.HWDeviceDesc.dpcLineCaps.dwTextureBlendCaps, rec.HWDeviceDesc2.dpcLineCaps.dwTextureBlendCaps)+
CompareCountBit(rec.HWDeviceDesc.dpcLineCaps.dwTextureAddressCaps, rec.HWDeviceDesc2.dpcLineCaps.dwTextureAddressCaps)<0 then Exit;
 
{$ENDIF}
Result := True;
end;
end;
3166,10 → 5836,17
if (DDraw.DriverCaps.dwCaps and DDCAPS_3D<>0) and
(DDraw.DriverCaps.ddsCaps.dwCaps and DDSCAPS_TEXTURE<>0) then
begin
try
if DDraw.IDDraw7<>nil then
Direct3D7 := DDraw.IDraw7 as IDirect3D7
{$IFDEF D3D_deprecated}
else
Direct3D := DDraw.IDraw as IDirect3D;
Direct3D := DDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF} as IDirect3D
{$ENDIF};
except
on E: Exception do
log(E.Message {$IFNDEF VER4UP}, ChangefileExt(ParamStr(0), '.log'){$ENDIF});
end;
try
if FindDevice then
begin
3178,13 → 5855,16
 
if lpGUID=nil then
rec.Driver := nil
else begin
else
begin
rec.DriverGUID^ := lpGUID^;
rec.Driver^ := @rec.DriverGUID;
end;
end;
finally
{$IFDEF D3D_deprecated}
Direct3D := nil;
{$ENDIF}
Direct3D7 := nil;
end;
end;
3196,6 → 5876,9
var
rec: TDirect3DInitializingRecord;
DDraw: TDirectDraw;
{$IFNDEF D3D_deprecated}
devGUID: Tguid;
{$ENDIF}
begin
FillChar(rec, SizeOf(rec), 0);
rec.BitCount := BitCount;
3208,8 → 5891,9
rec.Options := Options;
rec.Driver := @Driver;
rec.DriverGUID := @DriverGUID;
DXDirectDrawEnumerate(@EnumDirectDrawDriverCallback, @rec)
end else
DXDirectDrawEnumerate(@EnumDirectDrawDriverCallback, @rec);
end
else
begin
DDraw := TDirectDraw.Create(Driver);
try
3217,10 → 5901,13
rec.HELCaps := DDraw.HELCaps;
 
rec.D3DFlag := False;
(DDraw.IDraw as IDirect3D).EnumDevices(@EnumDeviceCallBack, @rec);
 
(DDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF} as IDirect3D).EnumDevices(@EnumDeviceCallBack, @rec);
if rec.D3DFlag then
{$IFDEF D3D_deprecated}
rec.DeviceDesc := rec.DeviceDesc2;
{$ELSE}
rec.DeviceDesc := rec.DeviceDesc2;
{$ENDIF}
finally
DDraw.Free;
end;
3234,7 → 5921,8
begin
if rec.DeviceDesc.dwDeviceRenderBitDepth and DDBD_16<>0 then
rec.BitCount := 16
else if rec.DeviceDesc.dwDeviceRenderBitDepth and DDBD_24<>0 then
else
if rec.DeviceDesc.dwDeviceRenderBitDepth and DDBD_24 <> 0 then
rec.BitCount := 24
else if rec.DeviceDesc.dwDeviceRenderBitDepth and DDBD_32<>0 then
rec.BitCount := 32;
3241,6 → 5929,30
end;
end;
 
{test type of device}
{$IFNDEF D3D_deprecated}
D3DDeviceTypeSet := [];
 
Move(rec.DeviceDesc2.deviceGUID, devGUID, Sizeof(TGUID) );
 
if CompareMem(@devGUID, @IID_IDirect3DTnLHalDevice, Sizeof(TGUID)) then
D3DDeviceTypeSet := D3DDeviceTypeSet + [dtTnLHAL];
 
if CompareMem(@devGUID, @IID_IDirect3DHALDEVICE, Sizeof(TGUID)) then
D3DDeviceTypeSet := D3DDeviceTypeSet + [dtHAL];
 
if CompareMem(@devGUID, @IID_IDirect3DMMXDevice, Sizeof(TGUID)) then
D3DDeviceTypeSet := D3DDeviceTypeSet + [dtMMX];
 
if CompareMem(@devGUID, @IID_IDirect3DRGBDevice, Sizeof(TGUID)) then
D3DDeviceTypeSet := D3DDeviceTypeSet + [dtRGB];
 
if CompareMem(@devGUID, @IID_IDirect3DRampDevice, Sizeof(TGUID)) then
D3DDeviceTypeSet := D3DDeviceTypeSet + [dtRamp];
 
if CompareMem(@devGUID, @IID_IDirect3DRefDevice, Sizeof(TGUID)) then
D3DDeviceTypeSet := D3DDeviceTypeSet + [dtRef];
{$ENDIF}
BitCount := rec.BitCount;
end;
 
3250,14 → 5962,21
BitCount: Integer;
Driver: PGUID;
DriverGUID: TGUID;
{$IFNDEF D3D_deprecated}
D3DDeviceTypeSet: TD3DDeviceTypeSet;
{$ENDIF}
begin
BitCount := DXDraw.Display.BitCount;
Driver := DXDraw.Driver;
Direct3DInitializing(Options, BitCount, Driver, DriverGUID);
Direct3DInitializing(Options, BitCount, Driver, DriverGUID{$IFNDEF D3D_deprecated}, D3DDeviceTypeSet{$ENDIF});
DXDraw.Driver := Driver;
DXDraw.Display.BitCount := BitCount;
{$IFNDEF D3D_deprecated}
DXDraw.FDeviceTypeSet := D3DDeviceTypeSet;
{$ENDIF}
end;
 
{$IFDEF D3D_deprecated}
procedure InitializeDirect3D(Surface: TDirectDrawSurface;
var ZBuffer: TDirectDrawSurface;
out D3D: IDirect3D;
3266,6 → 5985,7
out D3DDevice: IDirect3DDevice;
out D3DDevice2: IDirect3DDevice2;
out D3DDevice3: IDirect3DDevice3;
{$IFDEF D3DRM}
var D3DRM: IDirect3DRM;
var D3DRM2: IDirect3DRM2;
var D3DRM3: IDirect3DRM3;
3275,6 → 5995,7
out Viewport: IDirect3DRMViewport;
var Scene: IDirect3DRMFrame;
var Camera: IDirect3DRMFrame;
{$ENDIF}
var NowOptions: TInitializeDirect3DOptions);
type
TInitializeDirect3DRecord = record
3302,9 → 6023,11
 
if DeviceDesc.dwDeviceZBufferBitDepth and DDBD_16<>0 then
ZBufferBitDepth := 16
else if DeviceDesc.dwDeviceZBufferBitDepth and DDBD_24<>0 then
else
if DeviceDesc.dwDeviceZBufferBitDepth and DDBD_24 <> 0 then
ZBufferBitDepth := 24
else if DeviceDesc.dwDeviceZBufferBitDepth and DDBD_32<>0 then
else
if DeviceDesc.dwDeviceZBufferBitDepth and DDBD_32 <> 0 then
ZBufferBitDepth := 32
else
ZBufferBitDepth := 0;
3339,7 → 6062,6
end;
end;
 
 
function EnumDeviceCallBack(const lpGuid: TGUID; lpDeviceDescription, lpDeviceName: PChar;
const lpD3DHWDeviceDesc, lpD3DHELDeviceDesc: TD3DDeviceDesc;
lpUserArg: Pointer): HRESULT; stdcall;
3422,9 → 6144,10
NowOptions := NowOptions + [idoZBuffer];
end;
end;
 
{$IFDEF D3DRM}
type
TDirect3DRMCreate= function(out lplpDirect3DRM: IDirect3DRM): HRESULT; stdcall;
{$ENDIF}
begin
try
Options := NowOptions;
3463,12 → 6186,11
SetRenderState(TD3DRenderStateType(D3DRENDERSTATE_ZENABLE), Ord(ZBuffer<>nil));
SetRenderState(TD3DRenderStateType(D3DRENDERSTATE_ZWRITEENABLE), Ord(ZBuffer<>nil));
end;
 
{$IFDEF D3DRM}
{ Direct3D Retained Mode}
if idoRetainedMode in Options then
begin
NowOptions := NowOptions + [idoRetainedMode];
 
if D3DRM=nil then
begin
if TDirect3DRMCreate(DXLoadLibrary('D3DRM.dll', 'Direct3DRMCreate'))(D3DRM)<>D3DRM_OK then
3513,6 → 6235,7
Surface.Width, Surface.Height, Viewport);
Viewport.SetBack(5000.0);
end;
{$ENDIF}
except
FreeZBufferSurface(Surface, ZBuffer);
D3D := nil;
3521,6 → 6244,7
D3DDevice := nil;
D3DDevice2 := nil;
D3DDevice3 := nil;
{$IFDEF D3DRM}
D3DRM := nil;
D3DRM2 := nil;
D3DRMDevice := nil;
3528,9 → 6252,11
Viewport := nil;
Scene := nil;
Camera := nil;
{$ENDIF}
raise;
end;
end;
{$ENDIF}
 
procedure InitializeDirect3D7(Surface: TDirectDrawSurface;
var ZBuffer: TDirectDrawSurface;
3553,7 → 6279,7
MemPosition: array[Boolean] of Integer = (DDSCAPS_SYSTEMMEMORY, DDSCAPS_VIDEOMEMORY);
var
ZBufferBitDepth: Integer;
ddsd: TDDSurfaceDesc;
ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
begin
Result := False;
FreeZBufferSurface(Surface, ZBuffer);
3572,18 → 6298,27
with ddsd do
begin
dwSize := SizeOf(ddsd);
Surface.ISurface.GetSurfaceDesc(ddsd);
Surface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetSurfaceDesc(ddsd);
dwFlags := DDSD_CAPS or DDSD_WIDTH or DDSD_HEIGHT or DDSD_ZBUFFERBITDEPTH;
ddsCaps.dwCaps := DDSCAPS_ZBUFFER or MemPosition[Hardware];
dwHeight := Surface.Height;
dwWidth := Surface.Width;
{$IFDEF D3D_deprecated}
dwZBufferBitDepth := ZBufferBitDepth;
{$ELSE}
ddpfPixelFormat.dwFlags := DDPF_ZBUFFER;
ddpfPixelFormat.dwZBufferBitDepth := ZBufferBitDepth;
ddpfPixelFormat.dwStencilBitDepth := 0;
ddpfPixelFormat.dwZBitMask := (1 shl ZBufferBitDepth) - 1;
ddpfPixelFormat.dwStencilBitMask := 0;
ddpfPixelFormat.dwLuminanceAlphaBitMask := 0;
{$ENDIF}
end;
 
ZBuffer := TDirectDrawSurface.Create(Surface.DDraw);
if ZBuffer.CreateSurface(ddsd) then
begin
if Surface.ISurface.AddAttachedSurface(ZBuffer.ISurface)<>DD_OK then
if Surface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.AddAttachedSurface(ZBuffer.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}) <> DD_OK then
begin
ZBuffer.Free; ZBuffer := nil;
Exit;
3671,8 → 6406,9
end;
 
begin
 
try
Options := NowOptions - [idoRetainedMode];
Options := NowOptions {$IFDEF D3DRM}- [idoRetainedMode]{$ENDIF};
NowOptions := [];
 
D3D7 := Surface.DDraw.IDraw7 as IDirect3D7;
3679,11 → 6415,9
 
{ Whether hardware can be used is tested. }
SupportHardware := (Surface.SurfaceDesc.ddsCaps.dwCaps and DDSCAPS_VIDEOMEMORY<>0) and
(idoHardware in Options) and (Surface.DDraw.DriverCaps.dwCaps and DDCAPS_3D<>0);
(idoHardware in Options) and (Surface.DDraw.DriverCaps.dwCaps and DDCAPS_3D <> 0) and
(Surface.DDraw.DriverCaps.ddsCaps.dwCaps and DDSCAPS_TEXTURE <> 0);
 
if Surface.DDraw.DriverCaps.ddsCaps.dwCaps and DDSCAPS_TEXTURE=0 then
SupportHardware := False;
 
{ Direct3D }
InitDevice;
 
3703,8 → 6437,8
raise;
end;
end;
type
 
type
{ TDXDrawDriver }
 
TDXDrawDriver = class
3734,6 → 6468,17
procedure Initialize; override;
end;
 
procedure TCustomDXDraw.MirrorFlip(Value: TRenderMirrorFlipSet);
begin
if CheckD3 then
FD2D.MirrorFlip := Value;
end;
 
procedure TCustomDXDraw.SaveTextures(path: string);
begin
if CheckD3 then
FD2D.SaveTextures(path)
end;
{ TDXDrawDriver }
 
constructor TDXDrawDriver.Create(ADXDraw: TCustomDXDraw);
3744,8 → 6489,8
FDXDraw := ADXDraw;
 
{ Driver selection and Display mode optimizationn }
if FDXDraw.FOptions*[doFullScreen, doSystemMemory, do3D, doHardware]=
[doFullScreen, do3D, doHardware] then
if FDXDraw.FOptions * [doFullScreen, doSystemMemory, {$IFDEF D3D_deprecated}do3D,{$ENDIF} doHardware] =
[doFullScreen, {$IFDEF D3D_deprecated}do3D,{$ENDIF} doHardware] then
begin
AOptions := [];
with FDXDraw do
3754,7 → 6499,7
if not FDXDraw.Display.FixedBitCount then AOptions := AOptions + [idoOptimizeDisplayMode];
 
if doHardware in Options then AOptions := AOptions + [idoHardware];
if doRetainedMode in Options then AOptions := AOptions + [idoRetainedMode];
{$IFDEF D3DRM}if doRetainedMode in Options then AOptions := AOptions + [idoRetainedMode];{$ENDIF}
if doZBuffer in Options then AOptions := AOptions + [idoZBuffer];
end;
 
3762,14 → 6507,14
end;
 
if FDXDraw.Options*[doFullScreen, doHardware, doSystemMemory]=[doFullScreen, doHardware] then
FDXDraw.FDDraw := TDirectDraw.CreateEx(PGUID(FDXDraw.FDriver), doDirectX7Mode in FDXDraw.Options)
FDXDraw.FDDraw := TDirectDraw.CreateEx(PGUID(FDXDraw.FDriver), {$IFDEF D3D_deprecated}doDirectX7Mode in FDXDraw.Options{$ELSE}True{$ENDIF})
else
FDXDraw.FDDraw := TDirectDraw.CreateEx(nil, doDirectX7Mode in FDXDraw.Options);
FDXDraw.FDDraw := TDirectDraw.CreateEx(nil, {$IFDEF D3D_deprecated}doDirectX7Mode in FDXDraw.Options{$ELSE}True{$ENDIF});
end;
 
procedure TDXDrawDriver.Initialize3D;
const
DXDrawOptions3D = [doHardware, doRetainedMode, doSelectDriver, doZBuffer];
DXDrawOptions3D = [doHardware, {$IFDEF D3DRM}doRetainedMode,{$ENDIF} doSelectDriver, doZBuffer];
var
AOptions: TInitializeDirect3DOptions;
begin
3777,10 → 6522,10
with FDXDraw do
begin
if doHardware in FOptions then AOptions := AOptions + [idoHardware];
if doRetainedMode in FNowOptions then AOptions := AOptions + [idoRetainedMode];
{$IFDEF D3DRM}if doRetainedMode in FNowOptions then AOptions := AOptions + [idoRetainedMode];{$ENDIF}
if doSelectDriver in FOptions then AOptions := AOptions + [idoSelectDriver];
if doZBuffer in FOptions then AOptions := AOptions + [idoZBuffer];
 
{$IFDEF D3D_deprecated}
if doDirectX7Mode in FOptions then
begin
InitializeDirect3D7(FSurface, FZBuffer, FD3D7, FD3DDevice7, AOptions);
3787,12 → 6532,17
end else
begin
InitializeDirect3D(FSurface, FZBuffer, FD3D, FD3D2, FD3D3, FD3DDevice, FD3DDevice2, FD3DDevice3,
FD3DRM, FD3DRM2, FD3DRM3, FD3DRMDevice, FD3DRMDevice2, FD3DRMDevice3, FViewport, FScene, FCamera, AOptions);
{$IFDEF D3DRM}
FD3DRM, FD3DRM2, FD3DRM3, FD3DRMDevice, FD3DRMDevice2, FD3DRMDevice3, FViewport, FScene, FCamera,
{$ENDIF}
AOptions);
end;
 
{$ELSE}
InitializeDirect3D7(FSurface, FZBuffer, FD3D7, FD3DDevice7, AOptions);
{$ENDIF}
FNowOptions := FNowOptions - DXDrawOptions3D;
if idoHardware in AOptions then FNowOptions := FNowOptions + [doHardware];
if idoRetainedMode in AOptions then FNowOptions := FNowOptions + [doRetainedMode];
{$IFDEF D3DRM}if idoRetainedMode in AOptions then FNowOptions := FNowOptions + [doRetainedMode];{$ENDIF}
if idoSelectDriver in AOptions then FNowOptions := FNowOptions + [doSelectDriver];
if idoZBuffer in AOptions then FNowOptions := FNowOptions + [doZBuffer];
end;
3809,6 → 6559,7
begin
with FDXDraw do
begin
{$IFDEF D3DRM}
FViewport := nil;
FCamera := nil;
FScene := nil;
3816,13 → 6567,21
FD3DRMDevice := nil;
FD3DRMDevice2 := nil;
FD3DRMDevice3 := nil;
FD3DRM3 := nil;
FD3DRM2 := nil;
FD3DRM := nil;
{$ENDIF}
{$IFDEF D3D_deprecated}
FD3DDevice := nil;
FD3DDevice2 := nil;
FD3DDevice3 := nil;
{$ENDIF}
FD3DDevice7 := nil;
{$IFDEF D3D_deprecated}
FD3D := nil;
FD3D2 := nil;
FD3D3 := nil;
{$ENDIF}
FD3D7 := nil;
 
FreeZBufferSurface(FSurface, FZBuffer);
3832,9 → 6591,6
FSurface.Free; FSurface := nil;
FPrimary.Free; FPrimary := nil;
 
FD3DRM3 := nil;
FD3DRM2 := nil;
FD3DRM := nil;
end;
end;
 
3867,8 → 6623,11
if not AllowPalette256 then
begin
dc := GetDC(0);
try
GetSystemPaletteEntries(dc, 0, 256, Entries);
finally
ReleaseDC(0, dc);
end;
 
for i:=0 to 9 do
Result[i] := Entries[i];
3904,8 → 6663,9
end;
 
if doWaitVBlank in FDXDraw.NowOptions then
FDXDraw.FDDraw.DXResult := FDXDraw.FDDraw.IDraw.WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0);
FDXDraw.FDDraw.DXResult := FDXDraw.FDDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0);
 
FillChar(DF, SizeOf(DF), 0);
DF.dwsize := SizeOf(DF);
DF.dwDDFX := 0;
 
3913,6 → 6673,7
end;
 
procedure TDXDrawDriverBlt.Initialize;
{$IFDEF D3D_deprecated}
const
PrimaryDesc: TDDSurfaceDesc = (
dwSize: SizeOf(PrimaryDesc);
3919,10 → 6680,20
dwFlags: DDSD_CAPS;
ddsCaps: (dwCaps: DDSCAPS_PRIMARYSURFACE)
);
{$ENDIF}
var
Entries: TPaletteEntries;
PaletteCaps: Integer;
{$IFNDEF D3D_deprecated}
PrimaryDesc: TDDSurfaceDesc2;
{$ENDIF}
begin
{$IFNDEF D3D_deprecated}
FillChar(PrimaryDesc, SizeOf(PrimaryDesc), 0);
PrimaryDesc.dwSize := SizeOf(PrimaryDesc);
PrimaryDesc.dwFlags := DDSD_CAPS;
PrimaryDesc.ddsCaps.dwCaps := DDSCAPS_PRIMARYSURFACE;
{$ENDIF}
{ Surface making }
FDXDraw.FPrimary := TDirectDrawSurface.Create(FDXDraw.FDDraw);
if not FDXDraw.FPrimary.CreateSurface(PrimaryDesc) then
3952,9 → 6723,9
 
procedure TDXDrawDriverBlt.InitializeSurface;
var
ddsd: TDDSurfaceDesc;
ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
begin
FDXDraw.FSurface.IDDSurface := nil;
FDXDraw.FSurface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := nil;
 
{ Surface making }
FDXDraw.FNowOptions := FDXDraw.FNowOptions - [doSystemMemory];
3969,7 → 6740,7
ddsCaps.dwCaps := DDSCAPS_OFFSCREENPLAIN;
if doSystemMemory in FDXDraw.Options then
ddsCaps.dwCaps := ddsCaps.dwCaps or DDSCAPS_SYSTEMMEMORY;
if do3D in FDXDraw.FNowOptions then
{$IFDEF D3D_deprecated}if do3D in FDXDraw.FNowOptions then{$ENDIF}
ddsCaps.dwCaps := ddsCaps.dwCaps or DDSCAPS_3DDEVICE;
end;
 
3986,7 → 6757,7
FDXDraw.FSurface.Palette := FDXDraw.Palette;
FDXDraw.FSurface.Fill(0);
 
if do3D in FDXDraw.FNowOptions then
{$IFDEF D3D_deprecated}if do3D in FDXDraw.FNowOptions then{$ENDIF}
Initialize3D;
end;
 
4021,12 → 6792,13
procedure TDXDrawDriverFlip.Flip;
begin
if (FDXDraw.FForm<>nil) and (FDXDraw.FForm.Active) then
FDXDraw.FPrimary.DXResult := FDXDraw.FPrimary.ISurface.Flip(nil, DDFLIP_WAIT)
FDXDraw.FPrimary.DXResult := FDXDraw.FPrimary.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.Flip(nil, DDFLIP_WAIT)
else
FDXDraw.FPrimary.DXResult := 0;
end;
 
procedure TDXDrawDriverFlip.Initialize;
{$IFDEF D3D_deprecated}
const
DefPrimaryDesc: TDDSurfaceDesc = (
dwSize: SizeOf(DefPrimaryDesc);
4035,16 → 6807,29
ddsCaps: (dwCaps: DDSCAPS_PRIMARYSURFACE or DDSCAPS_FLIP or DDSCAPS_COMPLEX)
);
BackBufferCaps: TDDSCaps = (dwCaps: DDSCAPS_BACKBUFFER);
{$ENDIF}
var
PrimaryDesc: TDDSurfaceDesc;
PrimaryDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
PaletteCaps: Integer;
Entries: TPaletteEntries;
DDSurface: IDirectDrawSurface;
DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF};
{$IFNDEF D3D_deprecated}
BackBufferCaps: TDDSCaps2;
{$ENDIF}
begin
{ Surface making }
{$IFDEF D3D_deprecated}
PrimaryDesc := DefPrimaryDesc;
 
if do3D in FDXDraw.FNowOptions then
{$ELSE}
FillChar(PrimaryDesc, SizeOf(PrimaryDesc), 0);
PrimaryDesc.dwSize := SizeOf(PrimaryDesc);
PrimaryDesc.dwFlags := DDSD_CAPS or DDSD_BACKBUFFERCOUNT;
PrimaryDesc.dwBackBufferCount := 1;
PrimaryDesc.ddsCaps.dwCaps := DDSCAPS_PRIMARYSURFACE or DDSCAPS_FLIP or DDSCAPS_COMPLEX;
FillChar(BackBufferCaps, SizeOf(BackBufferCaps), 0);
BackBufferCaps.dwCaps := DDSCAPS_BACKBUFFER;
{$ENDIF}
{$IFDEF D3D_deprecated}if do3D in FDXDraw.FNowOptions then{$ENDIF}
PrimaryDesc.ddsCaps.dwCaps := PrimaryDesc.ddsCaps.dwCaps or DDSCAPS_3DDEVICE;
 
FDXDraw.FPrimary := TDirectDrawSurface.Create(FDXDraw.FDDraw);
4052,8 → 6837,8
raise EDXDrawError.CreateFmt(SCannotMade, [SDirectDrawPrimarySurface]);
 
FDXDraw.FSurface := TDirectDrawSurface.Create(FDXDraw.FDDraw);
if FDXDraw.FPrimary.ISurface.GetAttachedSurface(BackBufferCaps, DDSurface)=DD_OK then
FDXDraw.FSurface.IDDSurface := DDSurface;
if FDXDraw.FPrimary.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetAttachedSurface(BackBufferCaps, DDSurface) = DD_OK then
FDXDraw.FSurface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := DDSurface;
 
FDXDraw.FNowOptions := FDXDraw.FNowOptions - [doSystemMemory];
if FDXDraw.FSurface.SurfaceDesc.ddscaps.dwCaps and DDSCAPS_SYSTEMMEMORY<>0 then
4075,8 → 6860,9
FDXDraw.FPrimary.Palette := FDXDraw.Palette;
FDXDraw.FSurface.Palette := FDXDraw.Palette;
 
if do3D in FDXDraw.FNowOptions then
{$IFDEF D3D_deprecated}if do3D in FDXDraw.FNowOptions then{$ENDIF}
Initialize3D;
 
end;
 
constructor TCustomDXDraw.Create(AOwner: TComponent);
4088,14 → 6874,18
inherited Create(AOwner);
FAutoInitialize := True;
FDisplay := TDXDrawDisplay.Create(Self);
{$IFDEF _DMO_}FAdapters := EnumDirectDrawDriversEx;{$ENDIF}
Options := [doAllowReboot, doWaitVBlank, doCenter, {$IFDEF D3D_deprecated}doDirectX7Mode, do3D,{$ENDIF}
doHardware, doSelectDriver];
 
Options := [doAllowReboot, doWaitVBlank, doCenter, doDirectX7Mode, doHardware, doSelectDriver];
 
FAutoSize := True;
 
dc := GetDC(0);
try
GetSystemPaletteEntries(dc, 0, 256, Entries);
finally
ReleaseDC(0, dc);
end;
 
ColorTable := PaletteEntriesToRGBQuads(Entries);
DefColorTable := ColorTable;
4103,7 → 6893,11
Width := 100;
Height := 100;
ParentColor := False;
Color := clBtnFace;
Color := clBlack; //clBtnFace; // FIX
 
FD2D := TD2D.Create(Self);
D2D := FD2D; {as loopback}
FTraces := TTraces.Create(Self);
end;
 
destructor TCustomDXDraw.Destroy;
4111,8 → 6905,13
Finalize;
NotifyEventList(dxntDestroying);
FDisplay.Free;
{$IFDEF _DMO_}FAdapters := nil;{$ENDIF}
FSubClass.Free; FSubClass := nil;
FNotifyEventList.Free;
FD2D.Free;
FD2D := nil;
D2D := nil;
FTraces.Free;
inherited Destroy;
end;
 
4121,6 → 6920,13
Result := EnumDirectDrawDrivers;
end;
 
{$IFDEF _DMO_}
class function TCustomDXDraw.DriversEx: TDirectXDriversEx;
begin
Result := EnumDirectDrawDriversEx;
end;
{$ENDIF}
 
type
PDXDrawNotifyEvent = ^TDXDrawNotifyEvent;
 
4183,7 → 6989,7
procedure FlipToGDISurface;
begin
if Initialized and (FNowOptions*[doFullScreen, doFlip]=[doFullScreen, doFlip]) then
DDraw.IDraw.FlipToGDISurface;
DDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.FlipToGDISurface;
end;
 
begin
4205,6 → 7011,23
Exit;
end;
end;
(*
WM_ACTIVATEAPP:
begin
if TWMActivateApp(Message).Active then
begin
FActive := True;
DoActivate;
// PostMessage(FHandle, CM_ACTIVATE, 0, 0)
end
else
begin
FActive := False;
DoDeactivate;
// PostMessage(FHandle, CM_DEACTIVATE, 0, 0);
end;
end;
*)
WM_ACTIVATE:
begin
if TWMActivate(Message).Active=WA_INACTIVE then
4218,7 → 7041,25
begin
Finalize;
end;
WM_ENTERSIZEMOVE:
begin
if not (csLoading in ComponentState) then
Finalize;
end;
WM_EXITSIZEMOVE:
begin
if not (csLoading in ComponentState) then
Initialize;
end;
// SW_RESTORE, SW_MAXIMIZE:
// begin
// {force finalize/initialize loop}
// if not AutoInitialize or not (csLoading in ComponentState) then begin
// Finalize;
// Initialize;
// end;
// end;
end;
DefWindowProc(Message);
end;
 
4234,11 → 7075,26
 
procedure TCustomDXDraw.DoInitialize;
begin
{$IFDEF _DMO_}
{erase items for following refresh}
if Assigned(FAdapters) then FAdapters.Clear;
EnumDirectDrawDriversEx;
{$ENDIF}
if Assigned(FOnInitialize) then FOnInitialize(Self);
{$IFNDEF DXR_deprecated}
{$IFDEF D3D_deprecated}
if not (do3D in Options) then
Options := Options + [do3D];
{$ENDIF}
{$ENDIF}
end;
 
procedure TCustomDXDraw.DoInitializeSurface;
begin
{.06 added for better initialization}
if Assigned(FD2D) then
RenderError := FD2D.D2DInitializeSurface;
 
if Assigned(FOnInitializeSurface) then FOnInitializeSurface(Self);
end;
 
4294,6 → 7150,10
FUpdating := False;
end;
end;
if AsSigned(FD2D) then
FD2D.Free;
FD2D := nil;
D2D := nil
end;
 
procedure TCustomDXDraw.Flip;
4300,14 → 7160,21
begin
if Initialized and (not FUpdating) then
begin
if TryRestore then
if TryRestore and (not RenderError) then
TDXDrawDriver(FDXDrawDriver).Flip;
end;
RenderError := false;
end;
 
function TCustomDXDraw.GetCanDraw: Boolean;
begin
Result := Initialized and (not FUpdating) and (Surface.IDDSurface<>nil) and
{$IFNDEF DXR_deprecated}
{$IFDEF D3D_deprecated}
if not (do3D in Options) then
Options := Options + [do3D];
{$ENDIF}
{$ENDIF}
Result := Initialized and (not FUpdating) and (Surface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil) and
TryRestore;
end;
 
4319,7 → 7186,7
 
function TCustomDXDraw.GetSurfaceHeight: Integer;
begin
if Surface.IDDSurface<>nil then
if Surface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
Result := Surface.Height
else
Result := FSurfaceHeight;
4327,7 → 7194,7
 
function TCustomDXDraw.GetSurfaceWidth: Integer;
begin
if Surface.IDDSurface<>nil then
if Surface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
Result := Surface.Width
else
Result := FSurfaceWidth;
4417,6 → 7284,11
Dec(FOffNotifyRestore);
end;
 
if not Assigned(FD2D) then begin
FD2D := TD2D.Create(Self);
D2D := FD2D; {as loopback}
end;
 
Restore;
end;
 
4474,9 → 7346,11
Result := False;
end;
 
procedure TCustomDXDraw.Render;
procedure TCustomDXDraw.Render(LagCount: Integer{$IFDEF VER4UP} = 0{$ENDIF});
var I: Integer;
begin
if FInitialized and (do3D in FNowOptions) and (doRetainedMode in FNowOptions) then
{$IFDEF D3DRM}
if FInitialized and {$IFDEF D3D_deprecated}(do3D in FNowOptions) and{$ENDIF} (doRetainedMode in FNowOptions) then
begin
asm FInit end;
FViewport.Clear;
4484,6 → 7358,15
FD3DRMDevice.Update;
asm FInit end;
end;
{$ENDIF}
{traces}
if FTraces.Count > 0 then
for I := 0 to FTraces.Count - 1 do
if FTraces.Items[I].Active then
FTraces.Items[I].Render(LagCount);
{own rendering event}
if Assigned(FOnRender) then
FOnRender(Self);
end;
 
procedure TCustomDXDraw.Restore;
4525,6 → 7408,255
SetSize(AWidth, AHeight);
end;
 
procedure TCustomDXDraw.BeginScene;
begin
if CheckD3 then
FD2D.BeginScene
end;
 
procedure TCustomDXDraw.EndScene;
begin
if CheckD3 then
FD2D.EndScene
end;
 
function TCustomDXDraw.CheckD3: Boolean;
begin
Result := {$IFDEF D3D_deprecated}(do3D in Options) and{$ENDIF} (doHardware in Options) and AsSigned(FD2D);
end;
 
function TCustomDXDraw.CheckD3D(Dest: TDirectDrawSurface): Boolean;
begin
Result := CheckD3 and (FD2D.FDDraw.FSurface = Dest)
end;
 
procedure TCustomDXDraw.ClearStack;
begin
if CheckD3 then
FD2D.D2DTextures.D2DPruneAllTextures;
end;
 
procedure TCustomDXDraw.UpdateTextures;
var Changed: Boolean;
begin
if CheckD3 then begin
if Assigned(FOnUpdateTextures) then begin
Changed := False;
FOnUpdateTextures(FD2D.FD2DTexture, Changed);
if Changed then FD2D.D2DUpdateTextures;
end
end;
end;
 
procedure TCustomDXDraw.TextureFilter(Grade: TD2DTextureFilter);
begin
if CheckD3 then
FD2D.TextureFilter := Grade;
end;
 
procedure TCustomDXDraw.AntialiasFilter(Grade: TD3DAntialiasMode);
begin
if CheckD3 then
FD2D.AntialiasFilter := Grade;
end;
 
// ***** fade effects
// do not use in dxtimer cycle
 
function TCustomDXDraw.Fade2Color(colorfrom, colorto: LongInt): LongInt;
var i, r1, r2, g1, g2, b1, b2: Integer;
begin
r1 := GetRValue(colorfrom);
r2 := GetRValue(colorto);
g1 := GetGValue(colorfrom);
g2 := GetGValue(colorto);
b1 := GetBValue(colorfrom);
b2 := GetBValue(colorto);
if r1 < r2 then
begin
for i := r1 to r2 do
begin
Surface.Fill(RGB(i, g1, b1));
Flip;
end;
end
else
begin
for i := r1 downto r2 do
begin
Surface.Fill(RGB(i, g1, b1));
Flip;
end;
end;
 
if g1 < g2 then
begin
for i := g1 to g2 do
begin
Surface.Fill(RGB(r2, i, b1));
Flip;
end;
end
else
begin
for i := g1 downto g2 do
begin
Surface.Fill(RGB(r2, i, b1));
Flip;
end;
end;
if b1 < b2 then
begin
for i := b1 to b2 do
begin
Surface.Fill(RGB(r2, g2, i));
Flip;
end;
end
else
begin
for i := b1 downto b2 do
begin
Surface.Fill(RGB(r2, g2, i));
Flip;
end;
end;
Result := colorto;
end;
 
function TCustomDXDraw.Fade2Black(colorfrom: LongInt): LongInt;
var i, r, g, b: Integer;
begin
r := GetRValue(colorfrom);
g := GetGValue(colorfrom);
b := GetBValue(colorfrom);
for i := r downto 0 do
begin
Surface.Fill(RGB(i, g, b));
Flip;
end;
for i := g downto 0 do
begin
Surface.Fill(RGB(0, i, b));
Flip;
end;
for i := g downto 0 do
begin
Surface.Fill(RGB(0, 0, i));
Flip;
end;
Result := 0;
end;
 
function TCustomDXDraw.Fade2White(colorfrom: LongInt): LongInt;
var i, r, g, b: Integer;
begin
r := GetRValue(colorfrom);
g := GetGValue(colorfrom);
b := GetBValue(colorfrom);
for i := r to 255 do
begin
Surface.Fill(RGB(i, g, b));
Flip;
end;
for i := g to 255 do
begin
Surface.Fill(RGB(255, i, b));
Flip;
end;
for i := b to 255 do
begin
Surface.Fill(RGB(255, 255, i));
Flip;
end;
Result := RGB(255, 255, 255);
end;
 
function TCustomDXDraw.Grey2Fade(shadefrom, shadeto: Integer): Integer;
var i: Integer;
begin
if shadefrom < shadeto then
begin
for i := shadefrom to shadeto do
begin
Surface.Fill(RGB(i, i, i));
Flip;
end;
end
else
begin
for i := shadefrom downto shadeto do
begin
Surface.Fill(RGB(i, i, i));
Flip;
end;
end;
Result := shadeto;
end;
 
function TCustomDXDraw.FadeGrey2Screen(oldcolor, newcolour: LongInt): LongInt;
begin
result := Grey2Fade(oldcolor, newcolour);
end;
 
function TCustomDXDraw.Fade2Screen(oldcolor, newcolour: LongInt): LongInt;
begin
result := Fade2Color(oldcolor, newcolour);
end;
 
function TCustomDXDraw.White2Screen(oldcolor: Integer): LongInt;
begin
result := Fade2Color(oldcolor, RGB(255, 255, 255));
end;
 
function TCustomDXDraw.Black2Screen(oldcolor: Integer): LongInt;
begin
result := Fade2Color(oldcolor, RGB(0, 0, 0));
end;
 
procedure TCustomDXDraw.GrabImage(iX, iY, iWidth, iHeight: Integer; ddib: TDIB);
var ts, td: trect;
begin
ddib.SetSize(iWidth, iHeight, 24);
ts.left := iX;
ts.top := iY;
ts.right := iX + iWidth - 1;
ts.bottom := iY + iHeight - 1;
td.left := 0;
td.top := 0;
td.right := iWidth;
td.bottom := iHeight;
with Surface.Canvas do
begin
ddib.Canvas.CopyRect(td, Surface.Canvas, ts);
Release;
end;
end;
 
procedure TCustomDXDraw.PasteImage(sdib: TDIB; x, y: Integer);
var
ts, td: trect;
w, h: Integer;
begin
w := sdib.width - 1;
h := sdib.height - 1;
ts.left := 0;
ts.top := 0;
ts.right := w;
ts.bottom := h;
td.left := x;
td.top := y;
td.right := x + w;
td.bottom := y + h;
with Surface.Canvas do
begin
CopyRect(td, sdib.Canvas, ts);
release;
end;
end;
 
// *****
 
procedure TCustomDXDraw.SetColorTable(const ColorTable: TRGBQuads);
var
Entries: TPaletteEntries;
4548,15 → 7680,15
 
if doFullScreen in FNowOptions then
begin
Flags := DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE or DDSCL_ALLOWMODEX;
Flags := DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE or DDSCL_ALLOWMODEX{$IFDEF DXDOUBLEPRECISION} or DDSCL_FPUPRESERVE{$ENDIF};
if doNoWindowChange in FNowOptions then
Flags := Flags or DDSCL_NOWINDOWCHANGES;
if doAllowReboot in FNowOptions then
Flags := Flags or DDSCL_ALLOWREBOOT;
end else
Flags := DDSCL_NORMAL;
Flags := DDSCL_NORMAL{$IFDEF DXDOUBLEPRECISION} or DDSCL_FPUPRESERVE{$ENDIF};
 
DDraw.DXResult := DDraw.IDraw.SetCooperativeLevel(Control.Handle, Flags);
DDraw.DXResult := DDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.SetCooperativeLevel(Control.Handle, Flags);
end;
 
procedure TCustomDXDraw.SetDisplay(Value: TDXDrawDisplay);
4576,9 → 7708,10
 
procedure TCustomDXDraw.SetOptions(Value: TDXDrawOptions);
const
InitOptions = [doDirectX7Mode, doFullScreen, doNoWindowChange, doAllowReboot,
doAllowPalette256, doSystemMemory, doFlip, do3D,
doRetainedMode, doHardware, doSelectDriver, doZBuffer];
InitOptions = [doFullScreen, doNoWindowChange, doAllowReboot,
doAllowPalette256, doSystemMemory, doFlip,
{$IFDEF D3D_deprecated}doDirectX7Mode, do3D,{$ENDIF}{$IFDEF D3DRM} doRetainedMode, {$ENDIF}
doHardware, doSelectDriver, doZBuffer];
var
OldOptions: TDXDrawOptions;
begin
4588,9 → 7721,10
begin
OldOptions := FNowOptions;
FNowOptions := FNowOptions*InitOptions+(FOptions-InitOptions);
 
{$IFDEF D3D_deprecated}
if not (do3D in FNowOptions) then
FNowOptions := FNowOptions - [doHardware, doRetainedMode, doSelectDriver, doZBuffer];
FNowOptions := FNowOptions - [doHardware, {$IFDEF D3DRM}doRetainedMode,{$ENDIF} doSelectDriver, doZBuffer];
{$ENDIF}
end else
begin
FNowOptions := FOptions;
4597,16 → 7731,16
 
if not (doFullScreen in FNowOptions) then
FNowOptions := FNowOptions - [doNoWindowChange, doAllowReBoot, doAllowPalette256, doFlip];
 
{$IFDEF D3D_deprecated}
if not (do3D in FNowOptions) then
FNowOptions := FNowOptions - [doDirectX7Mode, doRetainedMode, doHardware, doSelectDriver, doZBuffer];
 
FNowOptions := FNowOptions - [doDirectX7Mode, {$IFDEF D3DRM}doRetainedMode,{$ENDIF} doHardware, doSelectDriver, doZBuffer];
{$ENDIF}
if doSystemMemory in FNowOptions then
FNowOptions := FNowOptions - [doFlip];
 
{$IFDEF D3DRM}
if doDirectX7Mode in FNowOptions then
FNowOptions := FNowOptions - [doRetainedMode];
 
{$ENDIF}
FNowOptions := FNowOptions - [doHardware];
end;
end;
4677,24 → 7811,30
begin
Result := False;
 
if Initialized and (not FUpdating) and (Primary.IDDSurface<>nil) then
if Initialized and (not FUpdating) and (Primary.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil) then
begin
if (Primary.ISurface.IsLost=DDERR_SURFACELOST) or
(Surface.ISurface.IsLost=DDERR_SURFACELOST) then
if (Primary.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.IsLost = DDERR_SURFACELOST) or
(Surface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.IsLost = DDERR_SURFACELOST) then
begin
if Assigned(FD2D) and Assigned(FD2D.FD2DTexture) then FD2D.FD2DTexture.D2DPruneAllTextures;//<-Add Mr.Kawasaki
Restore;
Result := (Primary.ISurface.IsLost=DD_OK) and (Surface.ISurface.IsLost=DD_OK);
Result := (Primary.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.IsLost = DD_OK) and (Surface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.IsLost = DD_OK);
end else
Result := True;
end;
end;
 
procedure TCustomDXDraw.SetTraces(const Value: TTraces);
begin
FTraces.Assign(Value);
end;
 
procedure TCustomDXDraw.UpdatePalette;
begin
if Initialized and (doWaitVBlank in FNowOptions) then
begin
if FDDraw.FDriverCaps.dwPalCaps and DDPCAPS_VSYNC=0 then
FDDraw.IDraw.WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0);
FDDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0);
end;
 
SetColorTable(ColorTable);
4711,6 → 7851,8
end;
end;
 
{$IFDEF DX3D_deprecated}
 
{ TCustomDX3D }
 
constructor TCustomDX3D.Create(AOwner: TComponent);
4751,7 → 7893,7
FInitialized := False;
 
SetOptions(FOptions);
 
{$IFDEF D3DRM}
FViewport := nil;
FCamera := nil;
FScene := nil;
4759,22 → 7901,28
FD3DRMDevice := nil;
FD3DRMDevice2 := nil;
FD3DRMDevice3 := nil;
{$ENDIF}
{$IFDEF D3D_deprecated}
FD3DDevice := nil;
FD3DDevice2 := nil;
FD3DDevice3 := nil;
{$ENDIF}
FD3DDevice7 := nil;
{$IFDEF D3D_deprecated}
FD3D := nil;
FD3D2 := nil;
FD3D3 := nil;
{$ENDIF}
FD3D7 := nil;
 
FreeZBufferSurface(FSurface, FZBuffer);
 
FSurface.Free; FSurface := nil;
 
{$IFDEF D3DRM}
FD3DRM3 := nil;
FD3DRM2 := nil;
FD3DRM := nil;
{$ENDIF}
end;
end;
end;
4821,7 → 7969,8
end else
begin
InitializeDirect3D(FSurface, FZBuffer, FD3D, FD3D2, FD3D3, FD3DDevice, FD3DDevice2, FD3DDevice3,
FD3DRM, FD3DRM2, FD3DRM3, FD3DRMDevice, FD3DRMDevice2, FD3DRMDevice3, FViewport, FScene, FCamera, AOptions);
{$IFDEF D3DRM}FD3DRM, FD3DRM2, FD3DRM3, FD3DRMDevice, FD3DRMDevice2, FD3DRMDevice3, FViewport, FScene, FCamera, {$ENDIF}
AOptions);
end;
 
FNowOptions := [];
4840,6 → 7989,7
 
procedure TCustomDX3D.Render;
begin
{$IFDEF D3DRM}
if FInitialized and (toRetainedMode in FNowOptions) then
begin
asm FInit end;
4848,6 → 7998,7
FD3DRMDevice.Update;
asm FInit end;
end;
{$ENDIF}
end;
 
function TCustomDX3D.GetCanDraw: Boolean;
5004,6 → 8155,8
end;
end;
 
{$ENDIF}
 
{ TDirect3DTexture }
 
constructor TDirect3DTexture.Create(Graphic: TGraphic; DXDraw: TComponent);
5028,12 → 8181,15
begin
with (FDXDraw as TCustomDXDraw) do
begin
if (not Initialized) or (not (do3D in NowOptions)) then
if (not Initialized) {$IFDEF D3D_deprecated}or (not (do3D in NowOptions)){$ENDIF} then
raise EDirect3DTextureError.CreateFmt(SNotMade, [FDXDraw.ClassName]);
end;
FSurface := TDirectDrawSurface.Create((FDXDraw as TCustomDXDraw).Surface.DDraw);
(FDXDraw as TCustomDXDraw).RegisterNotifyEvent(DXDrawNotifyEvent);
end else if FDXDraw is TCustomDX3D then
end
else
{$IFDEF DX3D_deprecated}
if FDXDraw is TCustomDX3D then
begin
with (FDXDraw as TDX3D) do
begin
5044,6 → 8200,7
FSurface := TDirectDrawSurface.Create((FDXDraw as TCustomDX3D).Surface.DDraw);
(FDXDraw as TCustomDX3D).FDXDraw.RegisterNotifyEvent(DXDrawNotifyEvent);
end else
{$ENDIF}
raise EDirect3DTextureError.CreateFmt(SNotSupported, [FDXDraw.ClassName]);
end;
 
5052,11 → 8209,13
if FDXDraw is TCustomDXDraw then
begin
(FDXDraw as TCustomDXDraw).UnRegisterNotifyEvent(DXDrawNotifyEvent);
end else if FDXDraw is TCustomDX3D then
end
{$IFDEF DX3D_deprecated}
else if FDXDraw is TCustomDX3D then
begin
(FDXDraw as TCustomDX3D).FDXDraw.UnRegisterNotifyEvent(DXDrawNotifyEvent);
end;
 
end
{$ENDIF};
Clear;
FSurface.Free;
inherited Destroy;
5066,7 → 8225,7
begin
FHandle := 0;
FTexture := nil;
FSurface.IDDSurface := nil;
FSurface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := nil;
end;
 
function TDirect3DTexture.GetHandle: TD3DTextureHandle;
5083,7 → 8242,7
Result := FSurface;
end;
 
function TDirect3DTexture.GetTexture: IDirect3DTexture;
function TDirect3DTexture.GetTexture: {$IFDEF D3D_deprecated}IDirect3DTexture{$ELSE}IDirect3DTexture2{$ENDIF};
begin
if FTexture=nil then
Restore;
5173,12 → 8332,12
end;
 
var
ddsd: TDDSurfaceDesc;
ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
Palette: TDirectDrawPalette;
PaletteCaps: Integer;
TempSurface: TDirectDrawSurface;
Width2, Height2: Integer;
D3DDevice: IDirect3DDevice;
D3DDevice: {$IFDEF D3D_deprecated}IDirect3DDevice{$ELSE}IDirect3DDevice7{$ENDIF};
Hardware: Boolean;
DDraw: TDirectDraw;
begin
5189,14 → 8348,17
if FDXDraw is TCustomDXDraw then
begin
DDraw := (FDXDraw as TCustomDXDraw).DDraw;
D3DDevice := (FDXDraw as TCustomDXDraw).D3DDevice;
D3DDevice := (FDXDraw as TCustomDXDraw).{$IFDEF D3D_deprecated}D3DDevice{$ELSE}D3DDevice7{$ENDIF};
Hardware := doHardware in (FDXDraw as TCustomDXDraw).NowOptions;
end else if FDXDraw is TCustomDX3D then
end
{$IFDEF DX3D_deprecated}
else if FDXDraw is TCustomDX3D then
begin
DDraw := (FDXDraw as TCustomDX3D).Surface.DDraw;
D3DDevice := (FDXDraw as TCustomDX3D).D3DDevice;
Hardware := toHardware in (FDXDraw as TCustomDX3D).NowOptions;
end;
end
{$ENDIF};
 
if (DDraw=nil) or (D3DDevice=nil) then Exit;
 
5284,13 → 8446,13
end;
 
{ Source surface is loaded into surface. }
FTexture := FSurface.ISurface as IDirect3DTexture;
FTexture.Load(TempSurface.ISurface as IDirect3DTexture);
FTexture := FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF} as {$IFDEF D3D_deprecated}IDirect3DTexture{$ELSE}IDirect3DTexture2{$ENDIF};
FTexture.Load(TempSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF} as {$IFDEF D3D_deprecated}IDirect3DTexture{$ELSE}IDirect3DTexture2{$ENDIF});
finally
TempSurface.Free;
end;
 
if FTexture.GetHandle(D3DDevice, FHandle)<>D3D_OK then
if FTexture.GetHandle(D3DDevice as {$IFDEF D3D_deprecated}IDirect3DDevice{$ELSE}IDirect3DDevice2{$ENDIF}, FHandle) <> D3D_OK then
raise EDirect3DTextureError.CreateFmt(SCannotMade, [STexture]);
 
FSurface.TransparentColor := FSurface.ColorMatch(FTransparentColor);
5327,9 → 8489,11
 
if FSrcImage is TDXTextureImage then
FImage := TDXTextureImage(FSrcImage)
else if FSrcImage is TDIB then
else
if FSrcImage is TDIB then
SetDIB(TDIB(FSrcImage))
else if FSrcImage is TGraphic then
else
if FSrcImage is TGraphic then
begin
FSrcImage := TDIB.Create;
try
5340,7 → 8504,8
Graphic.Free;
FAutoFreeGraphic := True;
end;
end else
end
else
if FSrcImage is TPicture then
begin
FSrcImage := TDIB.Create;
5352,7 → 8517,8
Graphic.Free;
FAutoFreeGraphic := True;
end;
end else
end
else
raise Exception.CreateFmt(SCannotLoadGraphic, [Graphic.ClassName]);
 
FMipmap := FImage.SubGroupImageCount[DXTextureImageGroupType_Mipmap]>0;
5514,6 → 8680,17
FImage := FImage2;
end;
 
function TDirect3DTexture2.GetHeight: Integer;
begin
if Assigned(FImage) then
Result := FImage.Height
else
if Assigned(FImage2) then
Result := FImage2.Height
else
Result := 0;
end;
 
function TDirect3DTexture2.GetIsMipmap: Boolean;
begin
if FSurface<>nil then
5537,6 → 8714,17
Result := FTransparent;
end;
 
function TDirect3DTexture2.GetWidth: Integer;
begin
if Assigned(FImage) then
Result := FImage.Width
else
if Assigned(FImage2) then
Result := FImage2.Width
else
Result := 0;
end;
 
procedure TDirect3DTexture2.SetTransparent(Value: Boolean);
begin
if FTransparent<>Value then
5722,9 → 8910,9
Width, Height: Integer;
PaletteCaps: DWORD;
Palette: IDirectDrawPalette;
TempD3DDevDesc: TD3DDeviceDesc;
{$IFDEF D3D_deprecated}TempD3DDevDesc: TD3DDeviceDesc;{$ENDIF}
D3DDevDesc7: TD3DDeviceDesc7;
TempSurface: IDirectDrawSurface4;
TempSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface4{$ELSE}IDirectDrawSurface7{$ENDIF};
begin
Finalize;
try
5735,12 → 8923,14
FD3DDevDesc.dpcTriCaps.dwTextureCaps := D3DDevDesc7.dpcTriCaps.dwTextureCaps;
FD3DDevDesc.dwMinTextureWidth := D3DDevDesc7.dwMinTextureWidth;
FD3DDevDesc.dwMaxTextureWidth := D3DDevDesc7.dwMaxTextureWidth;
end else
end
{$IFDEF D3D_deprecated}
else
begin
FD3DDevDesc.dwSize := SizeOf(FD3DDevDesc);
TempD3DDevDesc.dwSize := SizeOf(TempD3DDevDesc);
FDXDraw.D3DDevice3.GetCaps(FD3DDevDesc, TempD3DDevDesc);
end;
end{$ENDIF};
 
if FImage<>nil then
begin
5750,7 → 8940,8
{ The size of the texture is only Sqr(n). }
Width := Max(1 shl GetBitCount(FImage.Width), 1);
Height := Max(1 shl GetBitCount(FImage.Height), 1);
end else
end
else
begin
Width := FImage.Width;
Height := FImage.Height;
5779,8 → 8970,8
FEnumTextureFormatFlag := False;
if FDXDraw.D3DDevice7<>nil then
FDXDraw.D3DDevice7.EnumTextureFormats(@EnumTextureFormatCallback, Self)
else
FDXDraw.D3DDevice3.EnumTextureFormats(@EnumTextureFormatCallback, Self);
{$IFDEF D3D_deprecated}else
FDXDraw.D3DDevice3.EnumTextureFormats(@EnumTextureFormatCallback, Self){$ENDIF};
 
if not FEnumTextureFormatFlag then
raise EDirect3DTextureError.CreateFmt(SCannotInitialized, [STexture]);
5814,10 → 9005,10
end;
 
FSurface := TDirectDrawSurface.Create(FDXDraw.DDraw);
FSurface.DDraw.DXResult := FSurface.DDraw.IDraw4.CreateSurface(FTextureFormat, TempSurface, nil);
FSurface.DDraw.DXResult := FSurface.DDraw.{$IFDEF D3D_deprecated}IDraw4{$ELSE}IDraw7{$ENDIF}.CreateSurface(FTextureFormat, TempSurface, nil);
if FSurface.DDraw.DXResult<>DD_OK then
raise EDirect3DTextureError.CreateFmt(SCannotInitialized, [STexture]);
FSurface.IDDSurface4 := TempSurface;
FSurface.{$IFDEF D3D_deprecated}IDDSurface4{$ELSE}IDDSurface7{$ENDIF} := TempSurface;
 
{ Palette making }
if (FImage<>nil) and (FTextureFormat.ddpfPixelFormat.dwFlags and DDPF_PALETTEINDEXED<>0) then
5824,11 → 9015,14
begin
if FTextureFormat.ddpfPixelFormat.dwFlags and DDPF_PALETTEINDEXED8<>0 then
PaletteCaps := DDPCAPS_8BIT or DDPCAPS_ALLOW256
else if FTextureFormat.ddpfPixelFormat.dwFlags and DDPF_PALETTEINDEXED4<>0 then
else
if FTextureFormat.ddpfPixelFormat.dwFlags and DDPF_PALETTEINDEXED4 <> 0 then
PaletteCaps := DDPCAPS_4BIT
else if FTextureFormat.ddpfPixelFormat.dwFlags and DDPF_PALETTEINDEXED2<>0 then
else
if FTextureFormat.ddpfPixelFormat.dwFlags and DDPF_PALETTEINDEXED2 <> 0 then
PaletteCaps := DDPCAPS_2BIT
else if FTextureFormat.ddpfPixelFormat.dwFlags and DDPF_PALETTEINDEXED1<>0 then
else
if FTextureFormat.ddpfPixelFormat.dwFlags and DDPF_PALETTEINDEXED1 <> 0 then
PaletteCaps := DDPCAPS_1BIT
else
PaletteCaps := 0;
5835,10 → 9029,10
 
if PaletteCaps<>0 then
begin
if FDXDraw.DDraw.IDraw.CreatePalette(PaletteCaps, @FImage.idx_palette, Palette, nil)<>0 then
if FDXDraw.DDraw.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.CreatePalette(PaletteCaps, @FImage.idx_palette, Palette, nil) <> 0 then
Exit;
 
FSurface.ISurface.SetPalette(Palette);
FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.SetPalette(Palette);
end;
end;
 
5853,7 → 9047,7
const
MipmapCaps: TDDSCaps2 = (dwCaps: DDSCAPS_TEXTURE or DDSCAPS_MIPMAP);
var
CurSurface, NextSurface: IDirectDrawSurface4;
CurSurface, NextSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface4{$ELSE}IDirectDrawSurface7{$ENDIF};
Index: Integer;
SrcImage: TDXTextureImage;
begin
5861,7 → 9055,7
Initialize;
 
FNeedLoadTexture := False;
if FSurface.ISurface.IsLost=DDERR_SURFACELOST then
if FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.IsLost = DDERR_SURFACELOST then
FSurface.Restore;
 
{ Color key setting. }
5873,7 → 9067,7
if FSrcImage is TDIB then
SetDIB(TDIB(FSrcImage));
 
CurSurface := FSurface.ISurface4;
CurSurface := FSurface.{$IFDEF D3D_deprecated}ISurface4{$ELSE}ISurface7{$ENDIF};
Index := 0;
while CurSurface<>nil do
begin
5894,7 → 9088,8
 
Inc(Index);
end;
end else
end
else
DoRestoreSurface;
end;
 
5913,7 → 9108,8
begin
{ Palette index }
ck.dwColorSpaceLowValue := FTransparentColor and $FF;
end else
end
else
if FImage<>nil then
begin
{ RGB value }
5920,7 → 9116,8
ck.dwColorSpaceLowValue := FImage.PaletteIndex(GetRValue(FTransparentColor), GetGValue(FTransparentColor), GetBValue(FTransparentColor));
end else
Exit;
end else
end
else
begin
if (FImage<>nil) and (FImage.ImageType=DXTextureImageType_PaletteIndexedColor) and (FTransparentColor shr 24=$01) then
begin
5929,7 → 9126,8
dxtEncodeChannel(dxtMakeChannel(FSurface.SurfaceDesc.ddpfPixelFormat.dwRBitMask, False), FImage.idx_palette[FTransparentColor and $FF].peRed) or
dxtEncodeChannel(dxtMakeChannel(FSurface.SurfaceDesc.ddpfPixelFormat.dwGBitMask, False), FImage.idx_palette[FTransparentColor and $FF].peGreen) or
dxtEncodeChannel(dxtMakeChannel(FSurface.SurfaceDesc.ddpfPixelFormat.dwBBitMask, False), FImage.idx_palette[FTransparentColor and $FF].peBlue);
end else
end
else
if FTransparentColor shr 24=$00 then
begin
{ RGB value }
5937,18 → 9135,19
dxtEncodeChannel(dxtMakeChannel(FSurface.SurfaceDesc.ddpfPixelFormat.dwRBitMask, False), GetRValue(FTransparentColor)) or
dxtEncodeChannel(dxtMakeChannel(FSurface.SurfaceDesc.ddpfPixelFormat.dwGBitMask, False), GetGValue(FTransparentColor)) or
dxtEncodeChannel(dxtMakeChannel(FSurface.SurfaceDesc.ddpfPixelFormat.dwBBitMask, False), GetBValue(FTransparentColor));
end else
end
else
Exit;
end;
 
ck.dwColorSpaceHighValue := ck.dwColorSpaceLowValue;
FSurface.ISurface.SetColorKey(DDCKEY_SRCBLT, ck);
FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.SetColorKey(DDCKEY_SRCBLT, @ck);
 
FUseColorKey := True;
end;
end;
 
procedure TDirect3DTexture2.LoadSubTexture(Dest: IDirectDrawSurface4; SrcImage: TDXTextureImage);
procedure TDirect3DTexture2.LoadSubTexture(Dest: {$IFDEF D3D_deprecated}IDirectDrawSurface4{$ELSE}IDirectDrawSurface7{$ENDIF}; SrcImage: TDXTextureImage);
const
Mask1: array[0..7] of DWORD = (1, 2, 4, 8, 16, 32, 64, 128);
Mask2: array[0..3] of DWORD = (3, 12, 48, 192);
5986,12 → 9185,16
if Dest.Lock(nil, ddsd, DDLOCK_WAIT, 0)=0 then
begin
try
if (SrcImage.idx_index.Mask=DWORD(1 shl ddsd.ddpfPixelFormat.dwRGBBitCount)-1) and (SrcImage.idx_alpha.Mask=0) and
(SrcImage.BitCount=Integer(ddsd.ddpfPixelFormat.dwRGBBitCount)) and (not SrcImage.PackedPixelOrder) then
if (SrcImage.idx_index.Mask = DWORD(1 shl ddsd.ddpfPixelFormat.dwRGBBitCount) - 1) and
(SrcImage.idx_alpha.Mask = 0) and
(SrcImage.BitCount = Integer(ddsd.ddpfPixelFormat.dwRGBBitCount)) and
(not SrcImage.PackedPixelOrder)
then
begin
for y:=0 to ddsd.dwHeight-1 do
Move(SrcImage.ScanLine[y]^, Pointer(Integer(ddsd.lpSurface)+ddsd.lPitch*y)^, (Integer(ddsd.dwWidth)*SrcImage.BitCount+7) div 8);
end else
end
else
begin
for y:=0 to ddsd.dwHeight-1 do
begin
6036,7 → 9239,8
 
SetPixel(ddsd, x, y, c);
end;
end else
end
else
begin
cA := dxtEncodeChannel(dest_alpha_fmt, 255);
 
6077,11 → 9281,13
 
if (dest_red_fmt.Mask=SrcImage.rgb_red.Mask) and (dest_green_fmt.Mask=SrcImage.rgb_green.Mask) and
(dest_blue_fmt.Mask=SrcImage.rgb_blue.Mask) and (dest_alpha_fmt.Mask=SrcImage.rgb_alpha.Mask) and
(Integer(ddsd.ddpfPixelFormat.dwRGBBitCount)=SrcImage.BitCount) and (not SrcImage.PackedPixelOrder) then
(Integer(ddsd.ddpfPixelFormat.dwRGBBitCount) = SrcImage.BitCount) and (not SrcImage.PackedPixelOrder)
then
begin
for y:=0 to ddsd.dwHeight-1 do
Move(SrcImage.ScanLine[y]^, Pointer(Integer(ddsd.lpSurface)+ddsd.lPitch*y)^, (Integer(ddsd.dwWidth)*SrcImage.BitCount+7) div 8);
end else
end
else
if SrcImage.rgb_alpha.mask<>0 then
begin
for y:=0 to ddsd.dwHeight-1 do
6096,7 → 9302,8
 
SetPixel(ddsd, x, y, c);
end;
end else
end
else
begin
cA := dxtEncodeChannel(dest_alpha_fmt, 255);
 
6139,10 → 9346,2147
end;
end;
 
{ Support function }
 
function GetWidthBytes(Width, BitCount: Integer): Integer;
begin
Result := (((Width * BitCount) + 31) div 32) * 4;
end;
 
function dxtEncodeChannel(const Channel: TDXTextureImageChannel; c: DWORD): DWORD;
begin
Result := ((c shl Channel._rshift) shr Channel._lshift) and Channel.Mask;
end;
 
function dxtDecodeChannel(const Channel: TDXTextureImageChannel; c: DWORD): DWORD;
begin
Result := ((c and Channel.Mask) shr Channel._rshift) shl Channel._lshift;
Result := Result or (Result shr Channel._BitCount2);
end;
 
function dxtMakeChannel(Mask: DWORD; indexed: Boolean): TDXTextureImageChannel;
 
function GetMaskBitCount(b: Integer): Integer;
var
i: Integer;
begin
i := 0;
while (i < 31) and (((1 shl i) and b) = 0) do Inc(i);
 
Result := 0;
while ((1 shl i) and b) <> 0 do
begin
Inc(i);
Inc(Result);
end;
end;
 
function GetBitCount2(b: Integer): Integer;
begin
Result := 0;
while (Result < 31) and (((1 shl Result) and b) = 0) do Inc(Result);
end;
 
begin
Result.BitCount := GetMaskBitCount(Mask);
Result.Mask := Mask;
 
if indexed then
begin
Result._rshift := GetBitCount2(Mask);
Result._lshift := 0;
Result._Mask2 := 1 shl Result.BitCount - 1;
Result._BitCount2 := 0;
end
else
begin
Result._rshift := GetBitCount2(Mask) - (8 - Result.BitCount);
if Result._rshift < 0 then
begin
Result._lshift := -Result._rshift;
Result._rshift := 0;
end
else
Result._lshift := 0;
Result._Mask2 := (1 shl Result.BitCount - 1) shl (8 - Result.BitCount);
Result._BitCount2 := 8 - Result.BitCount;
end;
end;
 
{ TDXTextureImage }
 
var
_DXTextureImageLoadFuncList: TList;
 
procedure DXTextureImage_LoadDXTextureImageFunc(Stream: TStream; Image: TDXTextureImage); forward;
procedure DXTextureImage_LoadBitmapFunc(Stream: TStream; Image: TDXTextureImage); forward;
 
function DXTextureImageLoadFuncList: TList;
begin
if _DXTextureImageLoadFuncList = nil then
begin
_DXTextureImageLoadFuncList := TList.Create;
_DXTextureImageLoadFuncList.Add(@DXTextureImage_LoadDXTextureImageFunc);
_DXTextureImageLoadFuncList.Add(@DXTextureImage_LoadBitmapFunc);
end;
Result := _DXTextureImageLoadFuncList;
end;
 
class procedure TDXTextureImage.RegisterLoadFunc(LoadFunc: TDXTextureImageLoadFunc);
begin
if DXTextureImageLoadFuncList.IndexOf(@LoadFunc) = -1 then
DXTextureImageLoadFuncList.Add(@LoadFunc);
end;
 
class procedure TDXTextureImage.UnRegisterLoadFunc(LoadFunc: TDXTextureImageLoadFunc);
begin
DXTextureImageLoadFuncList.Remove(@LoadFunc);
end;
 
constructor TDXTextureImage.Create;
begin
inherited Create;
FSubImage := TList.Create;
end;
 
constructor TDXTextureImage.CreateSub(AOwner: TDXTextureImage);
begin
Create;
 
FOwner := AOwner;
try
FOwner.FSubImage.Add(Self);
except
FOwner := nil;
raise;
end;
end;
 
destructor TDXTextureImage.Destroy;
begin
Clear;
FSubImage.Free;
if FOwner <> nil then
FOwner.FSubImage.Remove(Self);
inherited Destroy;
end;
 
procedure TDXTextureImage.DoSaveProgress(Progress, ProgressCount: Integer);
begin
if Assigned(FOnSaveProgress) then
FOnSaveProgress(Self, Progress, ProgressCount);
end;
 
procedure TDXTextureImage.Assign(Source: TDXTextureImage);
var
y: Integer;
begin
SetSize(Source.ImageType, Source.Width, Source.Height, Source.BitCount, Source.WidthBytes);
 
idx_index := Source.idx_index;
idx_alpha := Source.idx_alpha;
idx_palette := Source.idx_palette;
 
rgb_red := Source.rgb_red;
rgb_green := Source.rgb_green;
rgb_blue := Source.rgb_blue;
rgb_alpha := Source.rgb_alpha;
 
for y := 0 to Height - 1 do
Move(Source.ScanLine[y]^, ScanLine[y]^, WidthBytes);
 
Transparent := Source.Transparent;
TransparentColor := Source.TransparentColor;
ImageGroupType := Source.ImageGroupType;
ImageID := Source.ImageID;
ImageName := Source.ImageName;
end;
 
procedure TDXTextureImage.ClearImage;
begin
if FAutoFreeImage then
FreeMem(FPBits);
 
FImageType := DXTextureImageType_PaletteIndexedColor;
FWidth := 0;
FHeight := 0;
FBitCount := 0;
FWidthBytes := 0;
FNextLine := 0;
FSize := 0;
FPBits := nil;
FTopPBits := nil;
FAutoFreeImage := False;
end;
 
procedure TDXTextureImage.Clear;
begin
ClearImage;
 
while SubImageCount > 0 do
SubImages[SubImageCount - 1].Free;
 
FImageGroupType := 0;
FImageID := 0;
FImageName := '';
 
FTransparent := False;
FTransparentColor := 0;
 
FillChar(idx_index, SizeOf(idx_index), 0);
FillChar(idx_alpha, SizeOf(idx_alpha), 0);
FillChar(idx_palette, SizeOf(idx_palette), 0);
FillChar(rgb_red, SizeOf(rgb_red), 0);
FillChar(rgb_green, SizeOf(rgb_green), 0);
FillChar(rgb_blue, SizeOf(rgb_blue), 0);
FillChar(rgb_alpha, SizeOf(rgb_alpha), 0);
end;
 
procedure TDXTextureImage.SetImage(ImageType: TDXTextureImageType; Width, Height, BitCount, WidthBytes, NextLine: Integer;
PBits, TopPBits: Pointer; Size: Integer; AutoFree: Boolean);
begin
ClearImage;
 
FAutoFreeImage := AutoFree;
FImageType := ImageType;
FWidth := Width;
FHeight := Height;
FBitCount := BitCount;
FWidthBytes := WidthBytes;
FNextLine := NextLine;
FSize := Size;
FPBits := PBits;
FTopPBits := TopPBits;
end;
 
procedure TDXTextureImage.SetSize(ImageType: TDXTextureImageType; Width, Height, BitCount, WidthBytes: Integer);
var
APBits: Pointer;
begin
ClearImage;
 
if WidthBytes = 0 then
WidthBytes := GetWidthBytes(Width, BitCount);
 
GetMem(APBits, WidthBytes * Height);
SetImage(ImageType, Width, Height, BitCount, WidthBytes,
WidthBytes, APBits, APBits, WidthBytes * Height, True);
end;
 
function TDXTextureImage.GetScanLine(y: Integer): Pointer;
begin
Result := Pointer(Integer(FTopPBits) + FNextLine * y);
end;
 
function TDXTextureImage.GetSubGroupImageCount(GroupTypeID: DWORD): Integer;
var
i: Integer;
begin
Result := 0;
for i := 0 to SubImageCount - 1 do
if SubImages[i].ImageGroupType = GroupTypeID then
Inc(Result);
end;
 
function TDXTextureImage.GetSubGroupImage(GroupTypeID: DWORD; Index: Integer): TDXTextureImage;
var
i, j: Integer;
begin
j := 0;
for i := 0 to SubImageCount - 1 do
if SubImages[i].ImageGroupType = GroupTypeID then
begin
if j = Index then
begin
Result := SubImages[i];
Exit;
end;
 
Inc(j);
end;
 
Result := nil;
SubImages[-1];
end;
 
function TDXTextureImage.GetSubImageCount: Integer;
begin
Result := 0;
if Assigned(FSubImage) then
Result := FSubImage.Count;
end;
 
function TDXTextureImage.GetSubImage(Index: Integer): TDXTextureImage;
begin
Result := FSubImage[Index];
end;
 
function TDXTextureImage.EncodeColor(R, G, B, A: Byte): DWORD;
begin
if ImageType = DXTextureImageType_PaletteIndexedColor then
begin
Result := dxtEncodeChannel(idx_index, PaletteIndex(R, G, B)) or
dxtEncodeChannel(idx_alpha, A);
end
else
begin
Result := dxtEncodeChannel(rgb_red, R) or
dxtEncodeChannel(rgb_green, G) or
dxtEncodeChannel(rgb_blue, B) or
dxtEncodeChannel(rgb_alpha, A);
end;
end;
 
function TDXTextureImage.PaletteIndex(R, G, B: Byte): DWORD;
var
i, d, d2: Integer;
begin
Result := 0;
if ImageType = DXTextureImageType_PaletteIndexedColor then
begin
d := MaxInt;
for i := 0 to (1 shl idx_index.BitCount) - 1 do
with idx_palette[i] do
begin
d2 := Abs((peRed - R)) * Abs((peRed - R)) + Abs((peGreen - G)) * Abs((peGreen - G)) + Abs((peBlue - B)) * Abs((peBlue - B));
if d > d2 then
begin
d := d2;
Result := i;
end;
end;
end;
end;
 
const
Mask1: array[0..7] of DWORD = (1, 2, 4, 8, 16, 32, 64, 128);
Mask2: array[0..3] of DWORD = (3, 12, 48, 192);
Mask4: array[0..1] of DWORD = ($0F, $F0);
 
Shift1: array[0..7] of DWORD = (0, 1, 2, 3, 4, 5, 6, 7);
Shift2: array[0..3] of DWORD = (0, 2, 4, 6);
Shift4: array[0..1] of DWORD = (0, 4);
 
type
PByte3 = ^TByte3;
TByte3 = array[0..2] of Byte;
 
function TDXTextureImage.GetPixel(x, y: Integer): DWORD;
begin
Result := 0;
if (x >= 0) and (x < FWidth) and (y >= 0) and (y < FHeight) then
begin
case FBitCount of
1: begin
if FPackedPixelOrder then
Result := (PByte(Integer(FTopPBits) + FNextLine * y + x shr 3)^ and Mask1[7 - x and 7]) shr Shift1[7 - x and 7]
else
Result := (PByte(Integer(FTopPBits) + FNextLine * y + x shr 3)^ and Mask1[x and 7]) shr Shift1[x and 7];
end;
2: begin
if FPackedPixelOrder then
Result := (PByte(Integer(FTopPBits) + FNextLine * y + x shr 2)^ and Mask2[3 - x and 3]) shr Shift2[3 - x and 3]
else
Result := (PByte(Integer(FTopPBits) + FNextLine * y + x shr 2)^ and Mask2[x and 3]) shr Shift2[x and 3];
end;
4: begin
if FPackedPixelOrder then
Result := (PByte(Integer(FTopPBits) + FNextLine * y + x shr 1)^ and Mask4[1 - x and 1]) shr Shift4[1 - x and 1]
else
Result := (PByte(Integer(FTopPBits) + FNextLine * y + x shr 1)^ and Mask4[x and 1]) shr Shift4[x and 1];
end;
8: Result := PByte(Integer(FTopPBits) + FNextLine * y + x)^;
16: Result := PWord(Integer(FTopPBits) + FNextLine * y + x * 2)^;
24: PByte3(@Result)^ := PByte3(Integer(FTopPBits) + FNextLine * y + x * 3)^;
32: Result := PDWORD(Integer(FTopPBits) + FNextLine * y + x * 4)^;
end;
end;
end;
 
procedure TDXTextureImage.SetPixel(x, y: Integer; c: DWORD);
var
P: PByte;
begin
if (x >= 0) and (x < FWidth) and (y >= 0) and (y < FHeight) then
begin
case FBitCount of
1: begin
P := Pointer(Integer(FTopPBits) + FNextLine * y + x shr 3);
if FPackedPixelOrder then
P^ := (P^ and (not Mask1[7 - x and 7])) or ((c and 1) shl Shift1[7 - x and 7])
else
P^ := (P^ and (not Mask1[x and 7])) or ((c and 1) shl Shift1[x and 7]);
end;
2: begin
P := Pointer(Integer(FTopPBits) + FNextLine * y + x shr 2);
if FPackedPixelOrder then
P^ := (P^ and (not Mask2[3 - x and 3])) or ((c and 3) shl Shift2[3 - x and 3])
else
P^ := (P^ and (not Mask2[x and 3])) or ((c and 3) shl Shift2[x and 3]);
end;
4: begin
P := Pointer(Integer(FTopPBits) + FNextLine * y + x shr 1);
if FPackedPixelOrder then
P^ := (P^ and (not Mask4[1 - x and 1])) or ((c and 7) shl Shift4[1 - x and 1])
else
P^ := (P^ and (not Mask4[x and 1])) or ((c and 7) shl Shift4[x and 1]);
end;
8: PByte(Integer(FTopPBits) + FNextLine * y + x)^ := c;
16: PWord(Integer(FTopPBits) + FNextLine * y + x * 2)^ := c;
24: PByte3(Integer(FTopPBits) + FNextLine * y + x * 3)^ := PByte3(@c)^;
32: PDWORD(Integer(FTopPBits) + FNextLine * y + x * 4)^ := c;
end;
end;
end;
 
procedure TDXTextureImage.LoadFromFile(const FileName: string);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
 
procedure TDXTextureImage.LoadFromStream(Stream: TStream);
var
i, p: Integer;
begin
Clear;
 
p := Stream.Position;
for i := 0 to DXTextureImageLoadFuncList.Count - 1 do
begin
Stream.Position := p;
try
TDXTextureImageLoadFunc(DXTextureImageLoadFuncList[i])(Stream, Self);
Exit;
except
Clear;
end;
end;
 
raise EDXTextureImageError.Create(SNotSupportGraphicFile);
end;
 
procedure TDXTextureImage.SaveToFile(const FileName: string);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
SaveToStream(Stream);
finally
Stream.Free;
end;
end;
 
procedure DXTextureImage_SaveDXTextureImageFunc(Stream: TStream; Image: TDXTextureImage); forward;
 
procedure TDXTextureImage.SaveToStream(Stream: TStream);
begin
DXTextureImage_SaveDXTextureImageFunc(Stream, Self);
end;
 
{ DXTextureImage_LoadDXTextureImageFunc }
 
const
DXTextureImageFile_Type = 'dxt:';
DXTextureImageFile_Version = $100;
 
DXTextureImageCompress_None = 0;
DXTextureImageCompress_ZLIB = 1; // ZLIB enabled
 
DXTextureImageFileCategoryType_Image = $100;
 
DXTextureImageFileBlockID_EndFile = 0;
DXTextureImageFileBlockID_EndGroup = 1;
DXTextureImageFileBlockID_StartGroup = 2;
DXTextureImageFileBlockID_Image_Format = DXTextureImageFileCategoryType_Image + 1;
DXTextureImageFileBlockID_Image_PixelData = DXTextureImageFileCategoryType_Image + 2;
DXTextureImageFileBlockID_Image_GroupInfo = DXTextureImageFileCategoryType_Image + 3;
DXTextureImageFileBlockID_Image_Name = DXTextureImageFileCategoryType_Image + 4;
DXTextureImageFileBlockID_Image_TransparentColor = DXTextureImageFileCategoryType_Image + 5;
 
type
TDXTextureImageFileHeader = packed record
FileType: array[0..4] of Char;
ver: DWORD;
end;
 
TDXTextureImageFileBlockHeader = packed record
ID: DWORD;
Size: Integer;
end;
 
TDXTextureImageFileBlockHeader_StartGroup = packed record
CategoryType: DWORD;
end;
 
TDXTextureImageHeader_Image_Format = packed record
ImageType: TDXTextureImageType;
Width: DWORD;
Height: DWORD;
BitCount: DWORD;
WidthBytes: DWORD;
end;
 
TDXTextureImageHeader_Image_Format_Index = packed record
idx_index_Mask: DWORD;
idx_alpha_Mask: DWORD;
idx_palette: array[0..255] of TPaletteEntry;
end;
 
TDXTextureImageHeader_Image_Format_RGB = packed record
rgb_red_Mask: DWORD;
rgb_green_Mask: DWORD;
rgb_blue_Mask: DWORD;
rgb_alpha_Mask: DWORD;
end;
 
TDXTextureImageHeader_Image_GroupInfo = packed record
ImageGroupType: DWORD;
ImageID: DWORD;
end;
 
TDXTextureImageHeader_Image_PixelData = packed record
Compress: DWORD;
end;
 
TDXTextureImageHeader_Image_TransparentColor = packed record
Transparent: Boolean;
TransparentColor: DWORD;
end;
 
procedure DXTextureImage_LoadDXTextureImageFunc(Stream: TStream; Image: TDXTextureImage);
 
procedure ReadGroup_Image(Image: TDXTextureImage);
var
i: Integer;
BlockHeader: TDXTextureImageFileBlockHeader;
NextPos: Integer;
SubImage: TDXTextureImage;
Header_StartGroup: TDXTextureImageFileBlockHeader_StartGroup;
Header_Image_Format: TDXTextureImageHeader_Image_Format;
Header_Image_Format_Index: TDXTextureImageHeader_Image_Format_Index;
Header_Image_Format_RGB: TDXTextureImageHeader_Image_Format_RGB;
Header_Image_GroupInfo: TDXTextureImageHeader_Image_GroupInfo;
Header_Image_TransparentColor: TDXTextureImageHeader_Image_TransparentColor;
Header_Image_PixelData: TDXTextureImageHeader_Image_PixelData;
ImageName: string;
{$IFDEF DXTextureImage_UseZLIB}
Decompression: TDecompressionStream;
{$ENDIF}
begin
while True do
begin
Stream.ReadBuffer(BlockHeader, SizeOf(BlockHeader));
NextPos := Stream.Position + BlockHeader.Size;
 
case BlockHeader.ID of
DXTextureImageFileBlockID_EndGroup:
begin
{ End of group }
Break;
end;
DXTextureImageFileBlockID_StartGroup:
begin
{ Beginning of group }
Stream.ReadBuffer(Header_StartGroup, SizeOf(Header_StartGroup));
case Header_StartGroup.CategoryType of
DXTextureImageFileCategoryType_Image:
begin
{ Image group }
SubImage := TDXTextureImage.CreateSub(Image);
try
ReadGroup_Image(SubImage);
except
SubImage.Free;
raise;
end;
end;
end;
end;
DXTextureImageFileBlockID_Image_Format:
begin
{ Image information reading (size etc.) }
Stream.ReadBuffer(Header_Image_Format, SizeOf(Header_Image_Format));
 
if (Header_Image_Format.ImageType <> DXTextureImageType_PaletteIndexedColor) and
(Header_Image_Format.ImageType <> DXTextureImageType_RGBColor)
then
raise EDXTextureImageError.Create(SInvalidDXTFile);
 
Image.SetSize(Header_Image_Format.ImageType, Header_Image_Format.Width, Header_Image_Format.Height,
Header_Image_Format.BitCount, Header_Image_Format.Widthbytes);
 
if Header_Image_Format.ImageType = DXTextureImageType_PaletteIndexedColor then
begin
{ INDEX IMAGE }
Stream.ReadBuffer(Header_Image_Format_Index, SizeOf(Header_Image_Format_Index));
 
Image.idx_index := dxtMakeChannel(Header_Image_Format_Index.idx_index_Mask, True);
Image.idx_alpha := dxtMakeChannel(Header_Image_Format_Index.idx_alpha_Mask, False);
 
for i := 0 to 255 do
Image.idx_palette[i] := Header_Image_Format_Index.idx_palette[i];
end
else
if Header_Image_Format.ImageType = DXTextureImageType_RGBColor then
begin
{ RGB IMAGE }
Stream.ReadBuffer(Header_Image_Format_RGB, SizeOf(Header_Image_Format_RGB));
 
Image.rgb_red := dxtMakeChannel(Header_Image_Format_RGB.rgb_red_Mask, False);
Image.rgb_green := dxtMakeChannel(Header_Image_Format_RGB.rgb_green_Mask, False);
Image.rgb_blue := dxtMakeChannel(Header_Image_Format_RGB.rgb_blue_Mask, False);
Image.rgb_alpha := dxtMakeChannel(Header_Image_Format_RGB.rgb_alpha_Mask, False);
end;
end;
DXTextureImageFileBlockID_Image_Name:
begin
{ Name reading }
SetLength(ImageName, BlockHeader.Size);
Stream.ReadBuffer(ImageName[1], BlockHeader.Size);
 
Image.ImageName := ImageName;
end;
DXTextureImageFileBlockID_Image_GroupInfo:
begin
{ Image group information reading }
Stream.ReadBuffer(Header_Image_GroupInfo, SizeOf(Header_Image_GroupInfo));
 
Image.ImageGroupType := Header_Image_GroupInfo.ImageGroupType;
Image.ImageID := Header_Image_GroupInfo.ImageID;
end;
DXTextureImageFileBlockID_Image_TransparentColor:
begin
{ Transparent color information reading }
Stream.ReadBuffer(Header_Image_TransparentColor, SizeOf(Header_Image_TransparentColor));
 
Image.Transparent := Header_Image_TransparentColor.Transparent;
Image.TransparentColor := Header_Image_TransparentColor.TransparentColor;
end;
DXTextureImageFileBlockID_Image_PixelData:
begin
{ Pixel data reading }
Stream.ReadBuffer(Header_Image_PixelData, SizeOf(Header_Image_PixelData));
 
case Header_Image_PixelData.Compress of
DXTextureImageCompress_None:
begin
{ NO compress }
for i := 0 to Image.Height - 1 do
Stream.ReadBuffer(Image.ScanLine[i]^, Header_Image_Format.Widthbytes);
end;
{$IFDEF DXTextureImage_UseZLIB}
DXTextureImageCompress_ZLIB:
begin
{ ZLIB compress enabled }
Decompression := TDecompressionStream.Create(Stream);
try
for i := 0 to Image.Height - 1 do
Decompression.ReadBuffer(Image.ScanLine[i]^, Header_Image_Format.Widthbytes);
finally
Decompression.Free;
end;
end;
{$ENDIF}
else
raise EDXTextureImageError.CreateFmt('Decompression error (%d)', [Header_Image_PixelData.Compress]);
end;
end;
 
end;
 
Stream.Seek(NextPos, soFromBeginning);
end;
end;
 
var
FileHeader: TDXTextureImageFileHeader;
BlockHeader: TDXTextureImageFileBlockHeader;
Header_StartGroup: TDXTextureImageFileBlockHeader_StartGroup;
NextPos: Integer;
begin
{ File header reading }
Stream.ReadBuffer(FileHeader, SizeOf(FileHeader));
 
if FileHeader.FileType <> DXTextureImageFile_Type then
raise EDXTextureImageError.Create(SInvalidDXTFile);
if FileHeader.ver <> DXTextureImageFile_Version then
raise EDXTextureImageError.Create(SInvalidDXTFile);
 
while True do
begin
Stream.ReadBuffer(BlockHeader, SizeOf(BlockHeader));
NextPos := Stream.Position + BlockHeader.Size;
 
case BlockHeader.ID of
DXTextureImageFileBlockID_EndFile:
begin
{ End of file }
Break;
end;
DXTextureImageFileBlockID_StartGroup:
begin
{ Beginning of group }
Stream.ReadBuffer(Header_StartGroup, SizeOf(Header_StartGroup));
case Header_StartGroup.CategoryType of
DXTextureImageFileCategoryType_Image: ReadGroup_Image(Image);
end;
end;
end;
 
Stream.Seek(NextPos, soFromBeginning);
end;
end;
 
type
PDXTextureImageFileBlockHeaderWriter_BlockInfo = ^TDXTextureImageFileBlockHeaderWriter_BlockInfo;
TDXTextureImageFileBlockHeaderWriter_BlockInfo = record
BlockID: DWORD;
StreamPos: Integer;
end;
 
TDXTextureImageFileBlockHeaderWriter = class
private
FStream: TStream;
FList: TList;
public
constructor Create(Stream: TStream);
destructor Destroy; override;
procedure StartBlock(BlockID: DWORD);
procedure EndBlock;
procedure WriteBlock(BlockID: DWORD);
procedure StartGroup(CategoryType: DWORD);
procedure EndGroup;
end;
 
constructor TDXTextureImageFileBlockHeaderWriter.Create(Stream: TStream);
begin
inherited Create;
FStream := Stream;
FList := TList.Create;
end;
 
destructor TDXTextureImageFileBlockHeaderWriter.Destroy;
var
i: Integer;
begin
for i := 0 to FList.Count - 1 do
Dispose(PDXTextureImageFileBlockHeaderWriter_BlockInfo(FList[i]));
FList.Free;
inherited Destroy;
end;
 
procedure TDXTextureImageFileBlockHeaderWriter.StartBlock(BlockID: DWORD);
var
BlockInfo: PDXTextureImageFileBlockHeaderWriter_BlockInfo;
BlockHeader: TDXTextureImageFileBlockHeader;
begin
New(BlockInfo);
BlockInfo.BlockID := BlockID;
BlockInfo.StreamPos := FStream.Position;
FList.Add(BlockInfo);
 
BlockHeader.ID := BlockID;
BlockHeader.Size := 0;
FStream.WriteBuffer(BlockHeader, SizeOf(BlockHeader));
end;
 
procedure TDXTextureImageFileBlockHeaderWriter.EndBlock;
var
BlockHeader: TDXTextureImageFileBlockHeader;
BlockInfo: PDXTextureImageFileBlockHeaderWriter_BlockInfo;
CurStreamPos: Integer;
begin
CurStreamPos := FStream.Position;
try
BlockInfo := FList[FList.Count - 1];
 
FStream.Position := BlockInfo.StreamPos;
BlockHeader.ID := BlockInfo.BlockID;
BlockHeader.Size := CurStreamPos - (BlockInfo.StreamPos + SizeOf(TDXTextureImageFileBlockHeader));
FStream.WriteBuffer(BlockHeader, SizeOf(BlockHeader));
finally
FStream.Position := CurStreamPos;
 
Dispose(FList[FList.Count - 1]);
FList.Count := FList.Count - 1;
end;
end;
 
procedure TDXTextureImageFileBlockHeaderWriter.WriteBlock(BlockID: DWORD);
var
BlockHeader: TDXTextureImageFileBlockHeader;
begin
BlockHeader.ID := BlockID;
BlockHeader.Size := 0;
FStream.WriteBuffer(BlockHeader, SizeOf(BlockHeader));
end;
 
procedure TDXTextureImageFileBlockHeaderWriter.StartGroup(CategoryType: DWORD);
var
Header_StartGroup: TDXTextureImageFileBlockHeader_StartGroup;
begin
StartBlock(DXTextureImageFileBlockID_StartGroup);
 
Header_StartGroup.CategoryType := CategoryType;
FStream.WriteBuffer(Header_StartGroup, SizeOf(Header_StartGroup));
end;
 
procedure TDXTextureImageFileBlockHeaderWriter.EndGroup;
begin
WriteBlock(DXTextureImageFileBlockID_EndGroup);
EndBlock;
end;
 
procedure DXTextureImage_SaveDXTextureImageFunc(Stream: TStream; Image: TDXTextureImage);
var
Progress: Integer;
ProgressCount: Integer;
BlockHeaderWriter: TDXTextureImageFileBlockHeaderWriter;
 
function CalcProgressCount(Image: TDXTextureImage): Integer;
var
i: Integer;
begin
Result := Image.WidthBytes * Image.Height;
for i := 0 to Image.SubImageCount - 1 do
Inc(Result, CalcProgressCount(Image.SubImages[i]));
end;
 
procedure AddProgress(Count: Integer);
begin
Inc(Progress, Count);
Image.DoSaveProgress(Progress, ProgressCount);
end;
 
procedure WriteGroup_Image(Image: TDXTextureImage);
var
i: Integer;
Header_Image_Format: TDXTextureImageHeader_Image_Format;
Header_Image_Format_Index: TDXTextureImageHeader_Image_Format_Index;
Header_Image_Format_RGB: TDXTextureImageHeader_Image_Format_RGB;
Header_Image_GroupInfo: TDXTextureImageHeader_Image_GroupInfo;
Header_Image_TransparentColor: TDXTextureImageHeader_Image_TransparentColor;
Header_Image_PixelData: TDXTextureImageHeader_Image_PixelData;
{$IFDEF DXTextureImage_UseZLIB}
Compression: TCompressionStream;
{$ENDIF}
begin
BlockHeaderWriter.StartGroup(DXTextureImageFileCategoryType_Image);
try
{ Image format writing }
if Image.Size > 0 then
begin
Header_Image_Format.ImageType := Image.ImageType;
Header_Image_Format.Width := Image.Width;
Header_Image_Format.Height := Image.Height;
Header_Image_Format.BitCount := Image.BitCount;
Header_Image_Format.WidthBytes := Image.WidthBytes;
 
BlockHeaderWriter.StartBlock(DXTextureImageFileBlockID_Image_Format);
try
Stream.WriteBuffer(Header_Image_Format, SizeOf(Header_Image_Format));
 
case Image.ImageType of
DXTextureImageType_PaletteIndexedColor:
begin
{ INDEX IMAGE }
Header_Image_Format_Index.idx_index_Mask := Image.idx_index.Mask;
Header_Image_Format_Index.idx_alpha_Mask := Image.idx_alpha.Mask;
for i := 0 to 255 do
Header_Image_Format_Index.idx_palette[i] := Image.idx_palette[i];
 
Stream.WriteBuffer(Header_Image_Format_Index, SizeOf(Header_Image_Format_Index));
end;
DXTextureImageType_RGBColor:
begin
{ RGB IMAGE }
Header_Image_Format_RGB.rgb_red_Mask := Image.rgb_red.Mask;
Header_Image_Format_RGB.rgb_green_Mask := Image.rgb_green.Mask;
Header_Image_Format_RGB.rgb_blue_Mask := Image.rgb_blue.Mask;
Header_Image_Format_RGB.rgb_alpha_Mask := Image.rgb_alpha.Mask;
 
Stream.WriteBuffer(Header_Image_Format_RGB, SizeOf(Header_Image_Format_RGB));
end;
end;
finally
BlockHeaderWriter.EndBlock;
end;
end;
 
{ Image group information writing }
BlockHeaderWriter.StartBlock(DXTextureImageFileBlockID_Image_GroupInfo);
try
Header_Image_GroupInfo.ImageGroupType := Image.ImageGroupType;
Header_Image_GroupInfo.ImageID := Image.ImageID;
 
Stream.WriteBuffer(Header_Image_GroupInfo, SizeOf(Header_Image_GroupInfo));
finally
BlockHeaderWriter.EndBlock;
end;
 
{ Name writing }
BlockHeaderWriter.StartBlock(DXTextureImageFileBlockID_Image_Name);
try
Stream.WriteBuffer(Image.ImageName[1], Length(Image.ImageName));
finally
BlockHeaderWriter.EndBlock;
end;
 
{ Transparent color writing }
BlockHeaderWriter.StartBlock(DXTextureImageFileBlockID_Image_TransparentColor);
try
Header_Image_TransparentColor.Transparent := Image.Transparent;
Header_Image_TransparentColor.TransparentColor := Image.TransparentColor;
 
Stream.WriteBuffer(Header_Image_TransparentColor, SizeOf(Header_Image_TransparentColor));
finally
BlockHeaderWriter.EndBlock;
end;
 
{ Pixel data writing }
if Image.Size > 0 then
begin
{ Writing start }
BlockHeaderWriter.StartBlock(DXTextureImageFileBlockID_Image_PixelData);
try
{ Scan compress type }
case Image.FileCompressType of
DXTextureImageFileCompressType_None:
begin
Header_Image_PixelData.Compress := DXTextureImageCompress_None;
end;
{$IFDEF DXTextureImage_UseZLIB}
DXTextureImageFileCompressType_ZLIB:
begin
Header_Image_PixelData.Compress := DXTextureImageCompress_ZLIB;
end;
{$ENDIF}
else
Header_Image_PixelData.Compress := DXTextureImageCompress_None;
end;
 
Stream.WriteBuffer(Header_Image_PixelData, SizeOf(Header_Image_PixelData));
 
case Header_Image_PixelData.Compress of
DXTextureImageCompress_None:
begin
for i := 0 to Image.Height - 1 do
begin
Stream.WriteBuffer(Image.ScanLine[i]^, Image.Widthbytes);
AddProgress(Image.Widthbytes);
end;
end;
{$IFDEF DXTextureImage_UseZLIB}
DXTextureImageCompress_ZLIB:
begin
Compression := TCompressionStream.Create(clMax, Stream);
try
for i := 0 to Image.Height - 1 do
begin
Compression.WriteBuffer(Image.ScanLine[i]^, Image.WidthBytes);
AddProgress(Image.Widthbytes);
end;
finally
Compression.Free;
end;
end;
{$ENDIF}
end;
finally
BlockHeaderWriter.EndBlock;
end;
end;
 
{ Sub-image writing }
for i := 0 to Image.SubImageCount - 1 do
WriteGroup_Image(Image.SubImages[i]);
finally
BlockHeaderWriter.EndGroup;
end;
end;
 
var
FileHeader: TDXTextureImageFileHeader;
begin
Progress := 0;
ProgressCount := CalcProgressCount(Image);
 
{ File header writing }
FileHeader.FileType := DXTextureImageFile_Type;
FileHeader.ver := DXTextureImageFile_Version;
Stream.WriteBuffer(FileHeader, SizeOf(FileHeader));
 
{ Image writing }
BlockHeaderWriter := TDXTextureImageFileBlockHeaderWriter.Create(Stream);
try
{ Image writing }
WriteGroup_Image(Image);
 
{ End of file }
BlockHeaderWriter.WriteBlock(DXTextureImageFileBlockID_EndFile);
finally
BlockHeaderWriter.Free;
end;
end;
 
{ DXTextureImage_LoadBitmapFunc }
 
procedure DXTextureImage_LoadBitmapFunc(Stream: TStream; Image: TDXTextureImage);
type
TDIBPixelFormat = packed record
RBitMask, GBitMask, BBitMask: DWORD;
end;
var
TopDown: Boolean;
BF: TBitmapFileHeader;
BI: TBitmapInfoHeader;
 
procedure DecodeRGB;
var
y: Integer;
begin
for y := 0 to Image.Height - 1 do
begin
if TopDown then
Stream.ReadBuffer(Image.ScanLine[y]^, Image.WidthBytes)
else
Stream.ReadBuffer(Image.ScanLine[Image.Height - y - 1]^, Image.WidthBytes);
end;
end;
 
procedure DecodeRLE4;
var
SrcDataP: Pointer;
B1, B2, C: Byte;
Dest, Src, P: PByte;
X, Y, i: Integer;
begin
GetMem(SrcDataP, BI.biSizeImage);
try
Stream.ReadBuffer(SrcDataP^, BI.biSizeImage);
 
Dest := Image.TopPBits;
Src := SrcDataP;
X := 0;
Y := 0;
 
while True do
begin
B1 := Src^; Inc(Src);
B2 := Src^; Inc(Src);
 
if B1 = 0 then
begin
case B2 of
0: begin { End of line }
X := 0; Inc(Y);
Dest := Image.ScanLine[Y];
end;
1: Break; { End of bitmap }
2: begin { Difference of coordinates }
Inc(X, B1); Inc(Y, B2); Inc(Src, 2);
Dest := Image.ScanLine[Y];
end;
else
{ Absolute mode }
C := 0;
for i := 0 to B2 - 1 do
begin
if i and 1 = 0 then
begin
C := Src^; Inc(Src);
end
else
begin
C := C shl 4;
end;
 
P := Pointer(Integer(Dest) + X shr 1);
if X and 1 = 0 then
P^ := (P^ and $0F) or (C and $F0)
else
P^ := (P^ and $F0) or ((C and $F0) shr 4);
 
Inc(X);
end;
end;
end
else
begin
{ Encoding mode }
for i := 0 to B1 - 1 do
begin
P := Pointer(Integer(Dest) + X shr 1);
if X and 1 = 0 then
P^ := (P^ and $0F) or (B2 and $F0)
else
P^ := (P^ and $F0) or ((B2 and $F0) shr 4);
 
Inc(X);
 
// Swap nibble
B2 := (B2 shr 4) or (B2 shl 4);
end;
end;
 
{ Word arrangement }
Inc(Src, Longint(Src) and 1);
end;
finally
FreeMem(SrcDataP);
end;
end;
 
procedure DecodeRLE8;
var
SrcDataP: Pointer;
B1, B2: Byte;
Dest, Src: PByte;
X, Y: Integer;
begin
GetMem(SrcDataP, BI.biSizeImage);
try
Stream.ReadBuffer(SrcDataP^, BI.biSizeImage);
 
Dest := Image.TopPBits;
Src := SrcDataP;
X := 0;
Y := 0;
 
while True do
begin
B1 := Src^; Inc(Src);
B2 := Src^; Inc(Src);
 
if B1 = 0 then
begin
case B2 of
0: begin { End of line }
X := 0; Inc(Y);
Dest := Pointer(Longint(Image.TopPBits) + Y * Image.NextLine + X);
end;
1: Break; { End of bitmap }
2: begin { Difference of coordinates }
Inc(X, B1); Inc(Y, B2); Inc(Src, 2);
Dest := Pointer(Longint(Image.TopPBits) + Y * Image.NextLine + X);
end;
else
{ Absolute mode }
Move(Src^, Dest^, B2); Inc(Dest, B2); Inc(Src, B2);
end;
end
else
begin
{ Encoding mode }
FillChar(Dest^, B1, B2); Inc(Dest, B1);
end;
 
{ Word arrangement }
Inc(Src, Longint(Src) and 1);
end;
finally
FreeMem(SrcDataP);
end;
end;
 
var
BC: TBitmapCoreHeader;
RGBTriples: array[0..255] of TRGBTriple;
RGBQuads: array[0..255] of TRGBQuad;
i, PalCount, j: Integer;
OS2: Boolean;
PixelFormat: TDIBPixelFormat;
begin
{ File header reading }
i := Stream.Read(BF, SizeOf(TBitmapFileHeader));
if i = 0 then Exit;
if i <> SizeOf(TBitmapFileHeader) then
raise EDXTextureImageError.Create(SInvalidDIB);
 
{ Is the head 'BM'? }
if BF.bfType <> Ord('B') + Ord('M') * $100 then
raise EDXTextureImageError.Create(SInvalidDIB);
 
{ Reading of size of header }
i := Stream.Read(BI.biSize, 4);
if i <> 4 then
raise EDXTextureImageError.Create(SInvalidDIB);
 
{ Kind check of DIB }
OS2 := False;
 
case BI.biSize of
SizeOf(TBitmapCoreHeader):
begin
{ OS/2 type }
Stream.ReadBuffer(Pointer(Integer(@BC) + 4)^, SizeOf(TBitmapCoreHeader) - 4);
 
FilLChar(BI, SizeOf(BI), 0);
with BI do
begin
biClrUsed := 0;
biCompression := BI_RGB;
biBitCount := BC.bcBitCount;
biHeight := BC.bcHeight;
biWidth := BC.bcWidth;
end;
 
OS2 := True;
end;
SizeOf(TBitmapInfoHeader):
begin
{ Windows type }
Stream.ReadBuffer(Pointer(Integer(@BI) + 4)^, SizeOf(TBitmapInfoHeader) - 4);
end;
else
raise EDXTextureImageError.Create(SInvalidDIB);
end;
 
{ Bit mask reading }
if BI.biCompression = BI_BITFIELDS then
begin
Stream.ReadBuffer(PixelFormat, SizeOf(PixelFormat));
end
else
begin
if BI.biBitCount = 16 then
begin
PixelFormat.RBitMask := $7C00;
PixelFormat.GBitMask := $03E0;
PixelFormat.BBitMask := $001F;
end else if (BI.biBitCount = 24) or (BI.biBitCount = 32) then
begin
PixelFormat.RBitMask := $00FF0000;
PixelFormat.GBitMask := $0300FF00;
PixelFormat.BBitMask := $000000FF;
end;
end;
 
{ DIB making }
if BI.biHeight < 0 then
begin
BI.biHeight := -BI.biHeight;
TopDown := True;
end
else
TopDown := False;
 
if BI.biBitCount in [1, 4, 8] then
begin
Image.SetSize(DXTextureImageType_PaletteIndexedColor, BI.biWidth, BI.biHeight, BI.biBitCount,
(((BI.biWidth * BI.biBitCount) + 31) div 32) * 4);
 
Image.idx_index := dxtMakeChannel(1 shl BI.biBitCount - 1, True);
Image.PackedPixelOrder := True;
end
else
begin
Image.SetSize(DXTextureImageType_RGBColor, BI.biWidth, BI.biHeight, BI.biBitCount,
(((BI.biWidth * BI.biBitCount) + 31) div 32) * 4);
 
Image.rgb_red := dxtMakeChannel(PixelFormat.RBitMask, False);
Image.rgb_green := dxtMakeChannel(PixelFormat.GBitMask, False);
Image.rgb_blue := dxtMakeChannel(PixelFormat.BBitMask, False);
 
j := Image.rgb_red.BitCount + Image.rgb_green.BitCount + Image.rgb_blue.BitCount;
if j < BI.biBitCount then
Image.rgb_alpha := dxtMakeChannel((1 shl (BI.biBitCount - j) - 1) shl j, False);
 
Image.PackedPixelOrder := False;
end;
 
{ palette reading }
PalCount := BI.biClrUsed;
if (PalCount = 0) and (BI.biBitCount <= 8) then
PalCount := 1 shl BI.biBitCount;
if PalCount > 256 then PalCount := 256;
 
if OS2 then
begin
{ OS/2 type }
Stream.ReadBuffer(RGBTriples, SizeOf(TRGBTriple) * PalCount);
for i := 0 to PalCount - 1 do
begin
Image.idx_palette[i].peRed := RGBTriples[i].rgbtRed;
Image.idx_palette[i].peGreen := RGBTriples[i].rgbtGreen;
Image.idx_palette[i].peBlue := RGBTriples[i].rgbtBlue;
end;
end
else
begin
{ Windows type }
Stream.ReadBuffer(RGBQuads, SizeOf(TRGBQuad) * PalCount);
for i := 0 to PalCount - 1 do
begin
Image.idx_palette[i].peRed := RGBQuads[i].rgbRed;
Image.idx_palette[i].peGreen := RGBQuads[i].rgbGreen;
Image.idx_palette[i].peBlue := RGBQuads[i].rgbBlue;
end;
end;
 
{ Pixel data reading }
case BI.biCompression of
BI_RGB: DecodeRGB;
BI_BITFIELDS: DecodeRGB;
BI_RLE4: DecodeRLE4;
BI_RLE8: DecodeRLE8;
else
raise EDXTextureImageError.Create(SInvalidDIB);
end;
end;
 
{ TDXTBase }
 
//Note by JB.
//This class is supplement of original Hori's code.
//For use alphablend you can have a bitmap 32 bit RGBA
//when isn't alphachannel present, it works like RGB 24bit
 
//functions required actualized DIB source for works with alphachannel
 
function TDXTBase.GetCompression: TDXTextureImageFileCompressType;
begin
Result := FParamsFormat.Compress;
end;
 
procedure TDXTBase.SetCompression(const Value: TDXTextureImageFileCompressType);
begin
FParamsFormat.Compress := Value;
end;
 
function TDXTBase.GetWidth: Integer;
begin
Result := FParamsFormat.Width;
end;
 
procedure TDXTBase.SetWidth(const Value: Integer);
begin
FParamsFormat.Width := Value;
end;
 
function TDXTBase.GetMipmap: Integer;
begin
Result := FParamsFormat.MipmapCount;
end;
 
procedure TDXTBase.SetMipmap(const Value: Integer);
begin
if Value = -1 then
FParamsFormat.MipmapCount := MaxInt
else
FParamsFormat.MipmapCount := Value;
end;
 
function TDXTBase.GetTransparentColor: TColorRef;
begin
Result := FParamsFormat.TransparentColor;
end;
 
procedure TDXTBase.SetTransparentColor(const Value: TColorRef);
begin
FParamsFormat.Transparent := True;
FParamsFormat.TransparentColor := RGB(Value shr 16, Value shr 8, Value);
end;
 
procedure TDXTBase.SetTransparentColorIndexed(const Value: TColorRef);
begin
FParamsFormat.TransparentColor := PaletteIndex(Value);
end;
 
function TDXTBase.GetHeight: Integer;
begin
Result := FParamsFormat.Height;
end;
 
procedure TDXTBase.SetHeight(const Value: Integer);
begin
FParamsFormat.Height := Value;
end;
 
procedure TDXTBase.SetChannelY(T: TDIB);
begin
 
end;
 
procedure TDXTBase.LoadChannelRGBFromFile(const FileName: string);
begin
FStrImageFileName := FileName;
try
EvaluateChannels([rgbRed, rgbGreen, rgbBlue], '', '');
finally
FStrImageFileName := '';
end;
end;
 
function TDXTBase.LoadFromFile(iFilename: string): Boolean;
begin
Result := FileExists(iFilename);
if Result then
try
Texture.LoadFromFile(iFileName);
except
Result := False;
end;
end;
 
procedure TDXTBase.LoadChannelAFromFile(const FileName: string);
begin
FStrImageFileName := FileName;
try
EvaluateChannels([rgbAlpha], '', '');
finally
FStrImageFileName := '';
end;
end;
 
constructor TDXTBase.Create;
var
Channel: TDXTImageChannel;
begin
FillChar(Channel, SizeOf(Channel), 0);
FilLChar(FParamsFormat, SizeOf(FParamsFormat), 0);
FParamsFormat.Compress := DXTextureImageFileCompressType_None;
FHasImageList := TList.Create;
for Channel := Low(Channel) to High(Channel) do
FChannelChangeTable[Channel] := Channel;
FChannelChangeTable[rgbAlpha] := yuvY;
FDIB := nil;
FStrImageFileName := '';
end;
 
procedure TDXTBase.SetChannelRGBA(T: TDIB);
begin
FDIB := T;
try
EvaluateChannels([rgbRed, rgbGreen, rgbBlue, rgbAlpha], '', '');
finally
FDIB := nil;
end;
end;
 
procedure TDXTBase.BuildImage(Image: TDXTextureImage);
type
TOutputImageChannelInfo2 = record
Image: TDXTextureImage;
Channels: TDXTImageChannels;
end;
var
cR, cG, cB: Byte;
 
function GetChannelVal(const Channel: TDXTextureImageChannel; SrcChannel: TDXTImageChannel): DWORD;
begin
case SrcChannel of
rgbRed: Result := dxtEncodeChannel(Channel, cR);
rgbGreen: Result := dxtEncodeChannel(Channel, cG);
rgbBlue: Result := dxtEncodeChannel(Channel, cB);
yuvY: Result := dxtEncodeChannel(Channel, (cR * 306 + cG * 602 + cB * 116) div 1024);
else Result := 0;
end;
end;
 
var
HasImageChannelList: array[0..Ord(High(TDXTImageChannel)) + 1] of TOutputImageChannelInfo2;
HasImageChannelListCount: Integer;
x, y, i: Integer;
c, c2, c3: DWORD;
Channel: TDXTImageChannel;
Flag: Boolean;
 
SrcImage: TDXTextureImage;
UseChannels: TDXTImageChannels;
begin
HasImageChannelListCount := 0;
for Channel := Low(Channel) to High(Channel) do
if Channel in FHasChannels then
begin
Flag := False;
for i := 0 to HasImageChannelListCount - 1 do
if HasImageChannelList[i].Image = FHasChannelImages[Channel].Image then
begin
HasImageChannelList[i].Channels := HasImageChannelList[i].Channels + [Channel];
Flag := True;
Break;
end;
if not Flag then
begin
HasImageChannelList[HasImageChannelListCount].Image := FHasChannelImages[Channel].Image;
HasImageChannelList[HasImageChannelListCount].Channels := [Channel];
Inc(HasImageChannelListCount);
end;
end;
 
cR := 0;
cG := 0;
cB := 0;
 
if Image.ImageType = DXTextureImageType_PaletteIndexedColor then
begin
{ Index color }
for y := 0 to Image.Height - 1 do
for x := 0 to Image.Width - 1 do
begin
c := 0;
 
for i := 0 to HasImageChannelListCount - 1 do
begin
SrcImage := HasImageChannelList[i].Image;
UseChannels := HasImageChannelList[i].Channels;
 
case SrcImage.ImageType of
DXTextureImageType_PaletteIndexedColor:
begin
c2 := SrcImage.Pixels[x, y];
c3 := dxtDecodeChannel(SrcImage.idx_index, c2);
 
if rgbRed in UseChannels then
c := c or dxtEncodeChannel(Image.idx_index, c3);
 
cR := SrcImage.idx_palette[c3].peRed;
cG := SrcImage.idx_palette[c3].peGreen;
cB := SrcImage.idx_palette[c3].peBlue;
end;
DXTextureImageType_RGBColor:
begin
c2 := SrcImage.Pixels[x, y];
 
cR := dxtDecodeChannel(SrcImage.rgb_red, c2);
cG := dxtDecodeChannel(SrcImage.rgb_green, c2);
cB := dxtDecodeChannel(SrcImage.rgb_blue, c2);
end;
end;
 
if rgbAlpha in UseChannels then
c := c or GetChannelVal(Image.idx_alpha, FChannelChangeTable[rgbAlpha]);
end;
 
Image.Pixels[x, y] := c;
end;
end
else
if Image.ImageType = DXTextureImageType_RGBColor then
begin
{ RGB color }
for y := 0 to Image.Height - 1 do
for x := 0 to Image.Width - 1 do
begin
c := 0;
 
for i := 0 to HasImageChannelListCount - 1 do
begin
SrcImage := HasImageChannelList[i].Image;
UseChannels := HasImageChannelList[i].Channels;
 
case SrcImage.ImageType of
DXTextureImageType_PaletteIndexedColor:
begin
c2 := SrcImage.Pixels[x, y];
c3 := dxtDecodeChannel(SrcImage.idx_index, c2);
 
cR := SrcImage.idx_palette[c3].peRed;
cG := SrcImage.idx_palette[c3].peGreen;
cB := SrcImage.idx_palette[c3].peBlue;
end;
DXTextureImageType_RGBColor:
begin
c2 := SrcImage.Pixels[x, y];
 
cR := dxtDecodeChannel(SrcImage.rgb_red, c2);
cG := dxtDecodeChannel(SrcImage.rgb_green, c2);
cB := dxtDecodeChannel(SrcImage.rgb_blue, c2);
end;
end;
 
if rgbRed in UseChannels then
c := c or GetChannelVal(Image.rgb_red, FChannelChangeTable[rgbRed]);
if rgbGreen in UseChannels then
c := c or GetChannelVal(Image.rgb_green, FChannelChangeTable[rgbGreen]);
if rgbBlue in UseChannels then
c := c or GetChannelVal(Image.rgb_Blue, FChannelChangeTable[rgbBlue]);
if rgbAlpha in UseChannels then
c := c or GetChannelVal(Image.rgb_alpha, FChannelChangeTable[rgbAlpha]);
end;
 
Image.Pixels[x, y] := c;
end;
end;
end;
 
procedure TDXTBase.SetChannelR(T: TDIB);
begin
FDIB := T;
try
EvaluateChannels([rgbRed], '', '');
finally
FDIB := nil;
end;
end;
 
function GetBitCount(b: Integer): Integer;
begin
Result := 32;
while (Result > 0) and (((1 shl (Result - 1)) and b) = 0) do Dec(Result);
end;
 
procedure TDXTBase.CalcOutputBitFormat;
var
BitCount: DWORD;
NewWidth, NewHeight, i, j: Integer;
Channel: TDXTImageChannel;
begin
{ Size calculation }
NewWidth := 1 shl GetBitCount(TDXTextureImage(FHasImageList[0]).Width);
NewHeight := 1 shl GetBitCount(TDXTextureImage(FHasImageList[0]).Height);
NewWidth := Max(NewWidth, NewHeight);
NewHeight := NewWidth;
if Abs(FParamsFormat.Width - NewWidth) > Abs(FParamsFormat.Width - NewWidth div 2) then
NewWidth := NewWidth div 2;
if Abs(FParamsFormat.Height - NewHeight) > Abs(FParamsFormat.Height - NewHeight div 2) then
NewHeight := NewHeight div 2;
 
if FParamsFormat.Width = 0 then FParamsFormat.Width := NewWidth;
if FParamsFormat.Height = 0 then FParamsFormat.Height := NewHeight;
 
{ Other several calculation }
i := Min(FParamsFormat.Width, FParamsFormat.Height);
j := 0;
while i > 1 do
begin
i := i div 2;
Inc(j);
end;
 
FParamsFormat.MipmapCount := Min(j, FParamsFormat.MipmapCount);
 
{ Output type calculation }
if (FHasChannelImages[rgbRed].Image = FHasChannelImages[rgbGreen].Image) and
(FHasChannelImages[rgbRed].Image = FHasChannelImages[rgbBlue].Image) and
(FHasChannelImages[rgbRed].Image <> nil) and
(FHasChannelImages[rgbRed].Image.ImageType = DXTextureImageType_PaletteIndexedColor) and
 
(FHasChannelImages[rgbRed].BitCount = 8) and
(FHasChannelImages[rgbGreen].BitCount = 8) and
(FHasChannelImages[rgbBlue].BitCount = 8) and
 
(FChannelChangeTable[rgbRed] = rgbRed) and
(FChannelChangeTable[rgbGreen] = rgbGreen) and
(FChannelChangeTable[rgbBlue] = rgbBlue) and
 
(FParamsFormat.Width = FHasChannelImages[rgbRed].Image.Width) and
(FParamsFormat.Height = FHasChannelImages[rgbRed].Image.Height) and
 
(FParamsFormat.MipmapCount = 0)
then
begin
FParamsFormat.ImageType := DXTextureImageType_PaletteIndexedColor;
end
else
FParamsFormat.ImageType := DXTextureImageType_RGBColor;
 
{ Bit several calculations }
FParamsFormat.BitCount := 0;
 
for Channel := Low(TDXTImageChannel) to High(TDXTImageChannel) do
if (FHasChannelImages[Channel].Image <> nil) and (FHasChannelImages[Channel].Image.ImageType = DXTextureImageType_PaletteIndexedColor) then
begin
FParamsFormat.idx_palette := FHasChannelImages[Channel].Image.idx_palette;
Break;
end;
 
if FParamsFormat.ImageType = DXTextureImageType_PaletteIndexedColor then
begin
{ Index channel }
if rgbRed in FHasChannels then
begin
BitCount := FHasChannelImages[rgbRed].BitCount;
FParamsFormat.idx_index := dxtMakeChannel(((1 shl BitCount) - 1) shl FParamsFormat.BitCount, True);
Inc(FParamsFormat.BitCount, BitCount);
end;
 
{ Alpha channel }
if rgbAlpha in FHasChannels then
begin
BitCount := FHasChannelImages[rgbAlpha].BitCount;
FParamsFormat.idx_alpha := dxtMakeChannel(((1 shl BitCount) - 1) shl FParamsFormat.BitCount, False);
Inc(FParamsFormat.BitCount, BitCount);
end;
end
else
begin
{ B channel }
if rgbBlue in FHasChannels then
begin
BitCount := FHasChannelImages[rgbBlue].BitCount;
FParamsFormat.rgb_blue := dxtMakeChannel(((1 shl BitCount) - 1) shl FParamsFormat.BitCount, False);
Inc(FParamsFormat.BitCount, BitCount);
end;
 
{ G channel }
if rgbGreen in FHasChannels then
begin
BitCount := FHasChannelImages[rgbGreen].BitCount;
FParamsFormat.rgb_green := dxtMakeChannel(((1 shl BitCount) - 1) shl FParamsFormat.BitCount, False);
Inc(FParamsFormat.BitCount, BitCount);
end;
 
{ R channel }
if rgbRed in FHasChannels then
begin
BitCount := FHasChannelImages[rgbRed].BitCount;
FParamsFormat.rgb_red := dxtMakeChannel(((1 shl BitCount) - 1) shl FParamsFormat.BitCount, False);
Inc(FParamsFormat.BitCount, BitCount);
end;
 
{ Alpha channel }
if rgbAlpha in FHasChannels then
begin
BitCount := FHasChannelImages[rgbAlpha].BitCount;
FParamsFormat.rgb_alpha := dxtMakeChannel(((1 shl BitCount) - 1) shl FParamsFormat.BitCount, False);
Inc(FParamsFormat.BitCount, BitCount);
end;
end;
 
{ As for the number of bits only either of 1, 2, 4, 8, 16, 24, 32 }
if FParamsFormat.BitCount in [3] then
FParamsFormat.BitCount := 4
else
if FParamsFormat.BitCount in [5..7] then
FParamsFormat.BitCount := 8
else
if FParamsFormat.BitCount in [9..15] then
FParamsFormat.BitCount := 16
else
if FParamsFormat.BitCount in [17..23] then
FParamsFormat.BitCount := 24
else
if FParamsFormat.BitCount in [25..31] then
FParamsFormat.BitCount := 32;
 
{ Transparent color }
if (FParamsFormat.ImageType = DXTextureImageType_RGBColor) and (FParamsFormat.TransparentColor shr 24 = $01) then
begin
FParamsFormat.TransparentColor := RGB(FParamsFormat.idx_palette[Byte(FParamsFormat.TransparentColor)].peRed,
FParamsFormat.idx_palette[Byte(FParamsFormat.TransparentColor)].peGreen,
FParamsFormat.idx_palette[Byte(FParamsFormat.TransparentColor)].peBlue);
end;
end;
 
procedure TDXTBase.LoadChannelRGBAFromFile(const FileName: string);
begin
FStrImageFileName := FileName;
try
EvaluateChannels([rgbRed, rgbGreen, rgbBlue, rgbAlpha], '', '');
finally
FStrImageFileName := '';
end;
end;
 
procedure TDXTBase.SetChannelB(T: TDIB);
begin
FDIB := T;
try
EvaluateChannels([rgbBlue], '', '');
finally
FDIB := nil;
end;
end;
 
procedure TDXTBase.SetChannelRGB(T: TDIB);
begin
FDIB := T;
try
EvaluateChannels([rgbRed, rgbGreen, rgbBlue], '', '');
finally
FDIB := nil;
end;
end;
 
procedure TDXTBase.SaveToFile(iFilename: string {$IFDEF VER4UP} = ''{$ENDIF});
var
Image: TDXTextureImage;
begin
{ Create output stream }
Image := Self.Texture;
if (FHasImageList.Count > 0) and Assigned(Image) then
begin
if iFilename <> '' then
Image.SaveToFile(iFilename)
else
Image.SaveToFile(FParamsFormat.Name + '.dxt');
end;
end;
 
procedure TDXTBase.SetChannelA(T: TDIB);
begin
FDIB := T;
try
EvaluateChannels([rgbAlpha], '', '');
finally
FDIB := nil;
end;
end;
 
procedure TDXTBase.SetChannelG(T: TDIB);
begin
FDIB := T;
try
EvaluateChannels([rgbGreen], '', '');
finally
FDIB := nil;
end;
end;
 
destructor TDXTBase.Destroy;
var I: Integer;
begin
for I := 0 to FHasImageList.Count - 1 do
TDXTextureImage(FHasImageList[I]).Free;
FHasImageList.Free;
inherited Destroy;
end;
 
function TDXTBase.GetPicture: TDXTextureImage;
var
MemoryStream: TMemoryStream;
begin
Result := TDXTextureImage.Create;
try
if (FStrImageFileName <> '') and FileExists(FStrImageFileName) then
begin
Result.LoadFromFile(FStrImageFileName);
Result.FImageName := ExtractFilename(FStrImageFileName);
end
else
if Assigned(FDIB) then
begin
MemoryStream := TMemoryStream.Create;
try
FDIB.SaveToStream(MemoryStream);
MemoryStream.Position := 0; //reading from 0
Result.LoadFromStream(MemoryStream);
finally
MemoryStream.Free;
end;
Result.FImageName := Format('DIB%x', [Integer(Result)]); //supplement name
end;
except
on E: Exception do
begin
EDXTBaseError.Create(E.Message);
end;
end
end;
 
procedure TDXTBase.Resize(Image: TDXTextureImage; NewWidth, NewHeight: Integer;
FilterTypeResample: TFilterTypeResample);
//resize used for Mipmap
var
DIB: TDIB;
x, y: Integer;
c: DWORD;
MemoryStream: TMemoryStream;
begin
{ Exit when no resize }
if (Image.Width = NewWidth) and (Image.Height = NewHeight) then Exit;
{ Supplement for image resizing }
//raise EDXTBaseError.Create('Invalid image size for texture.');
{ No image at start }
DIB := TDIB.Create; //DIB accept
try
DIB.SetSize(Image.Width, Image.Height, Image.BitCount);
{ of type }
for y := 0 to Image.Height - 1 do
for x := 0 to Image.Width - 1 do
begin
if Image.ImageType = DXTextureImageType_PaletteIndexedColor then
begin
c := dxtDecodeChannel(Image.idx_index, Image.Pixels[x, y]);
DIB.Pixels[x, y] := (Image.idx_palette[c].peRed shl 16) or
(Image.idx_palette[c].peGreen shl 8) or
Image.idx_palette[c].peBlue;
end
else begin
c := Image.Pixels[x, y];
DIB.Pixels[x, y] := (dxtDecodeChannel(Image.rgb_red, c) shl 16) or
(dxtDecodeChannel(Image.rgb_green, c) shl 8) or
dxtDecodeChannel(Image.rgb_blue, c);
end;
end;
 
{ Resize for 24 bitcount deep }
Image.SetSize(DXTextureImageType_RGBColor, Width, Height, Image.BitCount, 0);
 
Image.rgb_red := dxtMakeChannel($FF0000, False);
Image.rgb_green := dxtMakeChannel($00FF00, False);
Image.rgb_blue := dxtMakeChannel($0000FF, False);
Image.rgb_alpha := dxtMakeChannel(0, False);
 
{ Resample routine DIB based there }
DIB.DoResample(Width, Height, FilterTypeResample);
 
{Image returned through stream}
Image.ClearImage;
MemoryStream := TMemoryStream.Create;
try
DIB.SaveToStream(MemoryStream);
MemoryStream.Position := 0; //from first byte
Image.LoadFromStream(MemoryStream);
finally
MemoryStream.Free;
end;
finally
DIB.Free;
end;
end;
 
procedure TDXTBase.EvaluateChannels
(const CheckChannelUsed: TDXTImageChannels;
const CheckChannelChanged, CheckBitCountForChannel: string);
var J: Integer;
Channel: TDXTImageChannel;
ChannelBitCount: array[TDXTImageChannel] of Integer;
ChannelParamName: TDXTImageChannels;
Image: TDXTextureImage;
Q: TDXTImageChannel;
begin
Fillchar(ChannelBitCount, SizeOf(ChannelBitCount), 0);
ChannelParamName := [];
{ The channel which you use acquisition }
J := 0;
for Q := rgbRed to rgbAlpha do
begin
if Q in CheckChannelUsed then
begin
Inc(J);
Channel := Q;
if not (Channel in FHasChannels) then
begin
if CheckBitCountForChannel <> '' then
ChannelBitCount[Channel] := StrToInt(Copy(CheckBitCountForChannel, j, 1))
else
ChannelBitCount[Channel] := 8; {poke default value}
if ChannelBitCount[Channel] <> 0 then
ChannelParamName := ChannelParamName + [Channel];
 
if CheckChannelChanged <> '' then
begin
case UpCase(CheckChannelChanged[j]) of
'R': FChannelChangeTable[Channel] := rgbRed;
'G': FChannelChangeTable[Channel] := rgbGreen;
'B': FChannelChangeTable[Channel] := rgbBlue;
'Y': FChannelChangeTable[Channel] := yuvY;
'N': FChannelChangeTable[Channel] := rgbNone;
else
raise EDXTBaseError.CreateFmt('Invalid channel type(%s)', [CheckChannelChanged[j]]);
end;
end;
end;
end;
end;
{ Processing of each }
if ChannelParamName <> [] then
begin
{ Picture load }
Image := nil;
{pokud je image uz nahrany tj. stejneho jmena, pokracuj dale}
for j := 0 to FHasImageList.Count - 1 do
if AnsiCompareFileName(TDXTextureImage(FHasImageList[j]).ImageName, FStrImageFileName) = 0 then
begin
Image := FHasImageList[j];
Break;
end;
{obrazek neexistuje, musi se dotahnout bud z proudu, souboru nebo odjinut}
if Image = nil then
begin
try
Image := GetPicture;
except
if Assigned(Image) then
begin
{$IFNDEF VER5UP}
Image.Free; Image := nil;
{$ELSE}
FreeAndNil(Image);
{$ENDIF}
end;
raise;
end;
FHasImageList.Add(Image);
end;
 
{ Each channel processing }
for Channel := Low(Channel) to High(Channel) do
if Channel in ChannelParamName then
begin
if ChannelBitCount[Channel] >= 0 then
FHasChannelImages[Channel].BitCount := ChannelBitCount[Channel]
else
begin
case Image.ImageType of
DXTextureImageType_PaletteIndexedColor:
begin
case Channel of
rgbRed: FHasChannelImages[Channel].BitCount := 8;
rgbGreen: FHasChannelImages[Channel].BitCount := 8;
rgbBlue: FHasChannelImages[Channel].BitCount := 8;
rgbAlpha: FHasChannelImages[Channel].BitCount := 8;
end;
end;
DXTextureImageType_RGBColor:
begin
case Channel of
rgbRed: FHasChannelImages[Channel].BitCount := Image.rgb_red.BitCount;
rgbGreen: FHasChannelImages[Channel].BitCount := Image.rgb_green.BitCount;
rgbBlue: FHasChannelImages[Channel].BitCount := Image.rgb_blue.BitCount;
rgbAlpha: FHasChannelImages[Channel].BitCount := 8;
end;
end;
end;
end;
if FHasChannelImages[Channel].BitCount = 0 then Continue;
FHasChannels := FHasChannels + [Channel];
FHasChannelImages[Channel].Image := Image;
end;
end;
end;
 
function TDXTBase.GetTexture: TDXTextureImage;
var
i, j: Integer;
SubImage: TDXTextureImage;
CurWidth, CurHeight: Integer;
begin
Result := nil;
if FHasImageList.Count = 0 then
raise EDXTBaseError.Create('No image found');
 
{ Output format calculation }
CalcOutputBitFormat;
Result := TDXTextureImage.Create;
try
Result.SetSize(FParamsFormat.ImageType, FParamsFormat.Width, FParamsFormat.Height, FParamsFormat.BitCount, 0);
 
Result.idx_index := FParamsFormat.idx_index;
Result.idx_alpha := FParamsFormat.idx_alpha;
Result.idx_palette := FParamsFormat.idx_palette;
 
Result.rgb_red := FParamsFormat.rgb_red;
Result.rgb_green := FParamsFormat.rgb_green;
Result.rgb_blue := FParamsFormat.rgb_blue;
Result.rgb_alpha := FParamsFormat.rgb_alpha;
 
Result.ImageName := FParamsFormat.Name;
 
Result.Transparent := FParamsFormat.Transparent;
if FParamsFormat.TransparentColor shr 24 = $01 then
Result.TransparentColor := dxtEncodeChannel(Result.idx_index, PaletteIndex(Byte(FParamsFormat.TransparentColor)))
else
Result.TransparentColor := Result.EncodeColor(GetRValue(FParamsFormat.TransparentColor), GetGValue(FParamsFormat.TransparentColor), GetBValue(FParamsFormat.TransparentColor), 0);
 
BuildImage(Result);
 
if FParamsFormat.ImageType = DXTextureImageType_RGBColor then
begin
BuildImage(Result);
{ Picture information store here }
CurWidth := FParamsFormat.Width;
CurHeight := FParamsFormat.Height;
for i := 0 to FParamsFormat.MipmapCount - 1 do
begin
CurWidth := CurWidth div 2;
CurHeight := CurHeight div 2;
if (CurWidth <= 0) or (CurHeight <= 0) then Break;
{ Resize calc here }
for j := 0 to FHasImageList.Count - 1 do
Resize(FHasImageList[j], CurWidth, CurHeight, ftrTriangle);
 
SubImage := TDXTextureImage.CreateSub(Result);
SubImage.SetSize(FParamsFormat.ImageType, CurWidth, CurHeight, FParamsFormat.BitCount, 0);
 
SubImage.idx_index := FParamsFormat.idx_index;
SubImage.idx_alpha := FParamsFormat.idx_alpha;
SubImage.idx_palette := FParamsFormat.idx_palette;
 
SubImage.rgb_red := FParamsFormat.rgb_red;
SubImage.rgb_green := FParamsFormat.rgb_green;
SubImage.rgb_blue := FParamsFormat.rgb_blue;
SubImage.rgb_alpha := FParamsFormat.rgb_alpha;
 
SubImage.ImageGroupType := DXTextureImageGroupType_Normal;
SubImage.ImageID := i;
SubImage.ImageName := Format('%s - mimap #%d', [Result.ImageName, i + 1]);
 
BuildImage(SubImage);
end;
end;
Result.FileCompressType := FParamsFormat.Compress;
except
on E: Exception do
begin
{$IFNDEF VER5UP}
Result.Free;
Result := nil;
{$ELSE}
FreeAndNil(Result);
{$ENDIF}
raise EDXTBaseError.Create(E.Message);
end;
end;
end;
 
{ DIB2DTX }
 
procedure dib2dxt(DIBImage: TDIB; out DXTImage: TDXTextureImage{$IFDEF DXTextureImage_UseZLIB}; const Shrink: Boolean = True{$ENDIF});
var
TexImage: TDXTBase;
DIB: TDIB;
begin
TexImage := TDXTBase.Create;
try
{$IFDEF DXTextureImage_UseZLIB}
if Shrink then
begin
TexImage.Compression := DXTextureImageFileCompressType_ZLIB;
TexImage.Mipmap := 4;
end;
{$ENDIF}
try
if DIBImage.HasAlphaChannel then
begin
DIB := DIBImage.RGBChannel;
TexImage.SetChannelRGB(DIB);
DIB.Free;
DIB := DIBImage.AlphaChannel;
TexImage.SetChannelA(DIB);
DIB.Free;
end
else
TexImage.SetChannelRGB(DIBImage);
 
DXTImage := TexImage.Texture;
except
if Assigned(DXTImage) then
DXTImage.Free;
DXTImage := nil;
end;
finally
TexImage.Free;
end
end;
 
{$IFDEF D3DRM}
 
{ TDirect3DRMUserVisual }
 
procedure TDirect3DRMUserVisual_D3DRMOBJECTCALLBACK(lpD3DRMobj: IDirect3DRMObject;
lpArg: Pointer); CDECL;
lpArg: Pointer); cdecl;
begin
TDirect3DRMUserVisual(lpArg).Free;
end;
6149,7 → 11493,7
 
function TDirect3DRMUserVisual_D3DRMUSERVISUALCALLBACK(lpD3DRMUV: IDirect3DRMUserVisual;
lpArg: Pointer; lpD3DRMUVreason: TD3DRMUserVisualReason;
lpD3DRMDev: IDirect3DRMDevice; lpD3DRMview: IDirect3DRMViewport): Integer; CDECL;
lpD3DRMDev: IDirect3DRMDevice; lpD3DRMview: IDirect3DRMViewport): Integer; cdecl;
begin
Result := TDirect3DRMUserVisual(lpArg).DoRender(lpD3DRMUVreason, lpD3DRMDev, lpD3DRMview);
end;
6159,7 → 11503,8
inherited Create;
 
if D3DRM.CreateUserVisual(@TDirect3DRMUserVisual_D3DRMUSERVISUALCALLBACK,
Self, FUserVisual)<>D3DRM_OK then
Self, FUserVisual) <> D3DRM_OK
then
raise EDirect3DRMUserVisualError.CreateFmt(SCannotMade, ['IDirect3DRMUserVisual']);
 
FUserVisual.AddDestroyCallback(@TDirect3DRMUserVisual_D3DRMOBJECTCALLBACK, Self);
6178,13 → 11523,10
begin
Result := 0;
end;
{$ENDIF}
 
{ TPictureCollectionItem }
 
const
SurfaceDivWidth = 512;
SurfaceDivHeight = 512;
 
type
TPictureCollectionItemPattern = class(TCollectionItem)
private
6260,6 → 11602,7
function TPictureCollectionItem.GetPatternRect(Index: Integer): TRect;
begin
if (Index>=0) and (index<FPatterns.Count) then
//Result := (FPatterns.Items[Index] as TPictureCollectionItemPattern).FRect
Result := TPictureCollectionItemPattern(FPatterns.Items[Index]).FRect
else
Result := Rect(0, 0, 0, 0);
6279,14 → 11622,14
begin
if FSurfaceList.Count=0 then
begin
if PatternWidth = 0 then PatternWidth := FPicture.Width; //prevent division by zero
XCount := FPicture.Width div (PatternWidth+SkipWidth);
if FPicture.Width-XCount*(PatternWidth+SkipWidth)=PatternWidth then
Inc(XCount);
 
if PatternHeight = 0 then PatternHeight := FPicture.Height; //prevent division by zero
YCount := FPicture.Height div (PatternHeight+SkipHeight);
if FPicture.Height-YCount*(PatternHeight+SkipHeight)=PatternHeight then
Inc(YCount);
 
Result := XCount*YCount;
end else
Result := FPatterns.Count;
6304,15 → 11647,92
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
{$IFDEF DrawHWAcc}
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.{$IFNDEF VER4UP}D2DRender2{$ELSE}D2DRender{$ENDIF}(Self, Bounds(X, Y, Width, Height), PatternIndex, rtDraw{$IFNDEF VER4UP}, $FF{$ENDIF});
end
else
{$ENDIF DrawHWAcc}
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.Draw(X, Y, FRect, FSurface, Transparent);
end;
end;
 
procedure TPictureCollectionItem.DrawFlipHV(Dest: TDirectDrawSurface; X, Y,
PatternIndex: Integer);
var
flrc: trect;
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
begin
flrc.Left := frect.right; flrc.Right := frect.left;
flrc.Top := fpicture.height - frect.top;
flrc.Bottom := fpicture.height - frect.bottom;
Dest.Draw(X, Y, Flrc, FSurface, Transparent);
end;
end;
 
procedure TPictureCollectionItem.DrawFlipH(Dest: TDirectDrawSurface; X, Y,
PatternIndex: Integer);
var
flrc: TRect;
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
begin
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Dest) then
begin
flrc := frect;
Dest.MirrorFlip([rmfMirror]);
end
else
begin
flrc.Left := fpicture.width - frect.left;
flrc.Right := fpicture.width - frect.right;
flrc.Top := frect.Top; flrc.Bottom := frect.Bottom;
end;
Dest.Draw(X, Y, Flrc, FSurface, Transparent);
end;
end;
 
procedure TPictureCollectionItem.DrawFlipV(Dest: TDirectDrawSurface; X, Y,
PatternIndex: Integer);
var
flrc: TRect;
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
begin
if AsSigned(D2D) and D2D.CanUseD2D and (D2D.FDDraw.Surface = Dest) then
begin
flrc := frect;
Dest.MirrorFlip([rmfFlip]);
end
else
begin
flrc.Left := frect.left; flrc.Right := frect.right;
flrc.Top := fpicture.height - frect.top;
flrc.Bottom := fpicture.height - frect.bottom;
end;
Dest.Draw(X, Y, Flrc, FSurface, Transparent);
end;
end;
 
procedure TPictureCollectionItem.StretchDraw(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer);
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
{$IFDEF DrawHWAcc}
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.{$IFNDEF VER4UP}D2DRender2{$ELSE}D2DRender{$ENDIF}(Self, DestRect, PatternIndex, rtDraw{$IFNDEF VER4UP}, $FF{$ENDIF})
end
else
{$ENDIF DrawHWAcc}
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.StretchDraw(DestRect, FRect, FSurface, Transparent);
end;
6323,16 → 11743,44
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.{$IFNDEF VER4UP}D2DRender2{$ELSE}D2DRender{$ENDIF}(Self, DestRect, PatternIndex, rtAdd, Alpha)
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawAdd(DestRect, FRect, FSurface, Transparent, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawAddCol(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer;
Color: Integer; Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderCol(Self, DestRect, PatternIndex, Color, rtAdd, Alpha)
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawAdd(DestRect, FRect, FSurface, Transparent, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawAlpha(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer;
Alpha: Integer);
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.{$IFNDEF VER4UP}D2DRender2{$ELSE}D2DRender{$ENDIF}(Self, DestRect, PatternIndex, rtBlend, Alpha)
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawAlpha(DestRect, FRect, FSurface, Transparent, Alpha);
end;
6343,16 → 11791,49
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.{$IFNDEF VER4UP}D2DRender2{$ELSE}D2DRender{$ENDIF}(Self, DestRect, PatternIndex, rtSub, Alpha)
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawSub(DestRect, FRect, FSurface, Transparent, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawSubCol(Dest: TDirectDrawSurface; const DestRect: TRect; PatternIndex: Integer;
Color: Integer; Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderCol(Self, DestRect, PatternIndex, Color, rtSub, Alpha)
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawSub(DestRect, FRect, FSurface, Transparent, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawRotate(Dest: TDirectDrawSurface; X, Y, Width, Height, PatternIndex: Integer;
CenterX, CenterY: Double; Angle: Integer);
CenterX, CenterY: Double; Angle: single);
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
//X,Y................ Center of rotation
//Width,Height....... Picture
//PatternIndex....... Piece of picture
//CenterX,CenterY ... Center of rotation on picture
//Angle.............. Angle of rotation
FDXDraw.FD2D.D2DRenderRotate(Self, X, Y, Width, Height, PatternIndex, rtDraw, CenterX, CenterY, Angle{$IFNDEF VER4UP}, $FF{$ENDIF});
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawRotate(X, Y, Width, Height, FRect, FSurface, CenterX, CenterY, Transparent, Angle);
end;
6359,10 → 11840,16
end;
 
procedure TPictureCollectionItem.DrawRotateAdd(Dest: TDirectDrawSurface; X, Y, Width, Height, PatternIndex: Integer;
CenterX, CenterY: Double; Angle, Alpha: Integer);
CenterX, CenterY: Double; Angle: single; Alpha: Integer);
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderRotate(Self, X, Y, Width, Height, PatternIndex, rtAdd, CenterX, CenterY, Angle, Alpha);
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawRotateAdd(X, Y, Width, Height, FRect, FSurface, CenterX, CenterY, Transparent, Angle, Alpha);
end;
6369,10 → 11856,16
end;
 
procedure TPictureCollectionItem.DrawRotateAlpha(Dest: TDirectDrawSurface; X, Y, Width, Height, PatternIndex: Integer;
CenterX, CenterY: Double; Angle, Alpha: Integer);
CenterX, CenterY: Double; Angle: single; Alpha: Integer);
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderRotate(Self, X, Y, Width, Height, PatternIndex, rtBlend, CenterX, CenterY, Angle, Alpha);
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawRotateAlpha(X, Y, Width, Height, FRect, FSurface, CenterX, CenterY, Transparent, Angle, Alpha);
end;
6379,10 → 11872,16
end;
 
procedure TPictureCollectionItem.DrawRotateSub(Dest: TDirectDrawSurface; X, Y, Width, Height, PatternIndex: Integer;
CenterX, CenterY: Double; Angle, Alpha: Integer);
CenterX, CenterY: Double; Angle: single; Alpha: Integer);
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderRotate(Self, X, Y, Width, Height, PatternIndex, rtSub, CenterX, CenterY, Angle, Alpha);
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawRotateSub(X, Y, Width, Height, FRect, FSurface, CenterX, CenterY, Transparent, Angle, Alpha);
end;
6393,6 → 11892,13
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderWaveX(Self, X, Y, Width, Height, PatternIndex, rtDraw,
Transparent, amp, Len, ph{$IFNDEF VER4UP}, $FF{$ENDIF});
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawWaveX(X, Y, Width, Height, FRect, FSurface, Transparent, amp, Len, ph);
end;
6403,6 → 11909,13
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderWaveX(Self, X, Y, Width, Height, PatternIndex, rtAdd,
Transparent, amp, Len, ph, Alpha);
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawWaveXAdd(X, Y, Width, Height, FRect, FSurface, Transparent, amp, Len, ph, Alpha);
end;
6413,6 → 11926,13
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderWaveX(Self, X, Y, Width, Height, PatternIndex, rtBlend,
Transparent, amp, Len, ph, Alpha);
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawWaveXAlpha(X, Y, Width, Height, FRect, FSurface, Transparent, amp, Len, ph, Alpha);
end;
6423,11 → 11943,75
begin
if FInitialized and (PatternIndex>=0) and (PatternIndex<FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderWaveX(Self, X, Y, Width, Height, PatternIndex, rtSub,
Transparent, amp, Len, ph, Alpha);
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawWaveXSub(X, Y, Width, Height, FRect, FSurface, Transparent, amp, Len, ph, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawWaveYSub(Dest: TDirectDrawSurface; X, Y,
Width, Height, PatternIndex, amp, Len, ph, Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderWaveY(Self, X, Y, Width, Height, PatternIndex, rtSub,
Transparent, amp, Len, ph, Alpha);
end
{there is not software version}
end;
end;
 
procedure TPictureCollectionItem.DrawWaveY(Dest: TDirectDrawSurface; X, Y,
Width, Height, PatternIndex, amp, Len, ph: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderWaveY(Self, X, Y, Width, Height, PatternIndex, rtDraw,
Transparent, amp, Len, ph{$IFNDEF VER4UP}, $FF{$ENDIF});
end
end;
end;
 
procedure TPictureCollectionItem.DrawWaveYAdd(Dest: TDirectDrawSurface; X, Y,
Width, Height, PatternIndex, amp, Len, ph, Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderWaveY(Self, X, Y, Width, Height, PatternIndex, rtAdd,
Transparent, amp, Len, ph, Alpha);
end
end;
end;
 
procedure TPictureCollectionItem.DrawWaveYAlpha(Dest: TDirectDrawSurface; X, Y,
Width, Height, PatternIndex, amp, Len, ph, Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderWaveY(Self, X, Y, Width, Height, PatternIndex, rtBlend,
Transparent, amp, Len, ph, Alpha);
end
end;
end;
 
procedure TPictureCollectionItem.Finalize;
begin
if FInitialized then
6437,10 → 12021,98
end;
end;
 
procedure TPictureCollectionItem.UpdateTag;
 
function AddSurface(const SrcRect: TRect): TDirectDrawSurface;
begin
Result := TDirectDrawSurface.Create(PictureCollection.DXDraw.DDraw);
FSurfaceList.Add(Result);
 
Result.SystemMemory := FSystemMemory;
Result.LoadFromGraphicRect(FPicture.Graphic, 0, 0, SrcRect);
Result.TransparentColor := Result.ColorMatch(FTransparentColor);
end;
 
var
x, y, x2, y2: Integer;
BlockWidth, BlockHeight, BlockXCount, BlockYCount: Integer;
Width2, Height2: Integer;
TempSurface : TDirectDrawSurface;
begin
if FPicture.Graphic = nil then Exit;
// ClearSurface;
Width2 := Width + SkipWidth;
Height2 := Height + SkipHeight;
 
if (Width = FPicture.Width) and (Height = FPicture.Height) then
begin
with TPictureCollectionItemPattern.Create(FPatterns) do
begin
TempSurface := TDirectDrawSurface.Create(PictureCollection.DXDraw.DDraw);
FSurface := TempSurface;
FRect := Bounds(0, 0, FPicture.Width, FPicture.Height);
TempSurface.LoadFromGraphicRect(FPicture.Graphic, 0, 0, FRect);
TempSurface.SystemMemory := FSystemMemory;
TempSurface.TransparentColor := TempSurface.ColorMatch(FTransparentColor);
FSurfaceList.Add(TempSurface);
end;
end
else
if FSystemMemory then
begin
AddSurface(Bounds(0, 0, FPicture.Width, FPicture.Height));
for y := 0 to (FPicture.Height + SkipHeight) div Height2 - 1 do
for x := 0 to (FPicture.Width + SkipWidth) div Width2 - 1 do
with TPictureCollectionItemPattern.Create(FPatterns) do
begin
FRect := Bounds(x * Width2, y * Height2, Width, Height);
FSurface := TDirectDrawSurface(FSurfaceList[0]);
end;
end
else
begin
{ Load to a video memory with dividing the image. }
BlockWidth := Min(((SurfaceDivWidth + Width2 - 1) div Width2) * Width2,
(FPicture.Width + SkipWidth) div Width2 * Width2);
BlockHeight := Min(((SurfaceDivHeight + Height2 - 1) div Height2) * Height2,
(FPicture.Height + SkipHeight) div Height2 * Height2);
 
if (BlockWidth = 0) or (BlockHeight = 0) then Exit;
 
BlockXCount := (FPicture.Width + BlockWidth - 1) div BlockWidth;
BlockYCount := (FPicture.Height + BlockHeight - 1) div BlockHeight;
 
for y := 0 to BlockYCount - 1 do
for x := 0 to BlockXCount - 1 do
begin
x2 := Min(BlockWidth, Max(FPicture.Width - x * BlockWidth, 0));
if x2 = 0 then x2 := BlockWidth;
 
y2 := Min(BlockHeight, Max(FPicture.Height - y * BlockHeight, 0));
if y2 = 0 then y2 := BlockHeight;
 
AddSurface(Bounds(x * BlockWidth, y * BlockHeight, x2, y2));
end;
 
for y := 0 to (FPicture.Height + SkipHeight) div Height2 - 1 do
for x := 0 to (FPicture.Width + SkipWidth) div Width2 - 1 do
begin
x2 := x * Width2;
y2 := y * Height2;
with TPictureCollectionItemPattern.Create(FPatterns) do
begin
FRect := Bounds(x2 - (x2 div BlockWidth * BlockWidth), y2 - (y2 div BlockHeight * BlockHeight), Width, Height);
FSurface := TDirectDrawSurface(FSurfaceList[(x2 div BlockWidth) + ((y2 div BlockHeight) * BlockXCount)]);
end;
end;
end;
end;
 
procedure TPictureCollectionItem.Initialize;
begin
Finalize;
FInitialized := PictureCollection.Initialized;
UpdateTag;
end;
 
procedure TPictureCollectionItem.Restore;
6482,7 → 12154,9
FRect := Bounds(0, 0, FPicture.Width, FPicture.Height);
FSurface := AddSurface(Bounds(0, 0, FPicture.Width, FPicture.Height));
end;
end else if FSystemMemory then
end
else
if FSystemMemory then
begin
{ Load to a system memory. }
AddSurface(Bounds(0, 0, FPicture.Width, FPicture.Height));
6494,7 → 12168,8
FRect := Bounds(x * Width2, y * Height2, Width, Height);
FSurface := TDirectDrawSurface(FSurfaceList[0]);
end;
end else
end
else
begin
{ Load to a video memory with dividing the image. }
BlockWidth := Min(((SurfaceDivWidth+Width2-1) div Width2)*Width2,
6531,6 → 12206,13
end;
end;
end;
{Code added for better compatibility}
{When is any picture changed, then all textures cleared and list have to reloaded}
with PictureCollection do
{$IFDEF D3D_deprecated}if (do3D in FDXDraw.Options) then{$ENDIF}
if AsSigned(FDXDraw.FD2D) then
if Assigned(FDXDraw.FD2D.D2DTextures) then
FDXDraw.FD2D.D2DTextures.D2DPruneAllTextures;
end;
 
procedure TPictureCollectionItem.SetPicture(Value: TPicture);
6557,6 → 12239,121
end;
end;
 
procedure TPictureCollectionItem.DrawAlphaCol(Dest: TDirectDrawSurface;
const DestRect: TRect; PatternIndex, Color, Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderCol(Self, DestRect, PatternIndex, color, rtBlend, Alpha)
end else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawAlpha(DestRect, FRect, FSurface, Transparent, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawRotateAddCol(Dest: TDirectDrawSurface;
X, Y, Width, Height, PatternIndex: Integer; CenterX, CenterY: Double;
Angle: single; Color, Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderRotateModeCol(Self, rtAdd, X, Y, Width,
Height, PatternIndex, CenterX, CenterY, Angle, Color, Alpha);
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawRotateAdd(X, Y, Width, Height, FRect, FSurface, CenterX, CenterY, Transparent, Angle, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawRotateAlphaCol(Dest: TDirectDrawSurface;
X, Y, Width, Height, PatternIndex: Integer; CenterX, CenterY: Double;
Angle: single; Color, Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderRotateModeCol(Self, rtBlend, X, Y, Width,
Height, PatternIndex, CenterX, CenterY, Angle, Color, Alpha);
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawRotateAlpha(X, Y, Width, Height, FRect, FSurface, CenterX, CenterY, Transparent, Angle, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawRotateSubCol(Dest: TDirectDrawSurface;
X, Y, Width, Height, PatternIndex: Integer; CenterX, CenterY: Double;
Angle: single; Color, Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderRotateModeCol(Self, rtSub, X, Y, Width,
Height, PatternIndex, CenterX, CenterY, Angle, Color, Alpha);
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawRotateSub(X, Y, Width, Height, FRect, FSurface, CenterX, CenterY, Transparent, Angle, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawCol(Dest: TDirectDrawSurface;
const DestRect, SourceRect: TRect; PatternIndex: Integer; Faded: Boolean;
RenderType: TRenderType; Color, Specular: Integer; Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRenderColoredPartition(Self, DestRect, PatternIndex,
Color, Specular, Faded, SourceRect, RenderType,
Alpha)
end
else
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
Dest.DrawAlpha(DestRect, FRect, FSurface, Transparent, Alpha);
end;
end;
 
procedure TPictureCollectionItem.DrawRect(Dest: TDirectDrawSurface;
const DestRect, SourceRect: TRect; PatternIndex: Integer;
RenderType: TRenderType; Transparent: Boolean; Alpha: Integer);
begin
if FInitialized and (PatternIndex >= 0) and (PatternIndex < FPatterns.Count) then
begin
{$IFDEF DrawHWAcc}
with TPictureCollection(Self.GetPictureCollection) do
if FDXDraw.CheckD3D(Dest) then
begin
FDXDraw.FD2D.D2DRender(Self, DestRect, PatternIndex, SourceRect, RenderType, Alpha);
end
else
{$ENDIF DrawHWAcc}
with TPictureCollectionItemPattern(FPatterns.Items[PatternIndex]) do
begin
case RenderType of
rtDraw: Dest.StretchDraw(DestRect, SourceRect, FSurface, Transparent);
//Dest.Draw(DestRect.Left, DestRect.Top, SourceRect, FSurface, Transparent);
rtBlend: Dest.DrawAlpha(DestRect, SourceRect, FSurface, Transparent, Alpha);
rtAdd: Dest.DrawAdd(DestRect, SourceRect, FSurface, Transparent, Alpha);
rtSub: Dest.DrawSub(DestRect, SourceRect, FSurface, Transparent, Alpha);
end;
end;
end;
end;
 
{ TPictureCollection }
 
constructor TPictureCollection.Create(AOwner: TPersistent);
6603,6 → 12400,22
end;
end;
 
procedure TPictureCollection.InitializeImages(DXDraw: TCustomDXDraw; Id : Integer);
var
i: Integer;
begin
If id = -1 Then
Finalize;
FDXDraw := DXDraw;
 
if not Initialized then
raise EPictureCollectionError.CreateFmt(SCannotInitialized, [ClassName]);
 
for i := 0 to Count - 1 do
If (id = -1) or (id = i) Then
Items[i].Initialize;
end;
 
procedure TPictureCollection.Initialize(DXDraw: TCustomDXDraw);
var
i: Integer;
6861,6 → 12674,7
end;
 
constructor TDirectDrawOverlay.CreateWindowed(WindowHandle: HWND);
{$IFDEF D3D_deprecated}
const
PrimaryDesc: TDDSurfaceDesc = (
dwSize: SizeOf(PrimaryDesc);
6867,12 → 12681,22
dwFlags: DDSD_CAPS;
ddsCaps: (dwCaps: DDSCAPS_PRIMARYSURFACE)
);
{$ELSE}
var
PrimaryDesc: TDDSurfaceDesc2;
{$ENDIF}
begin
FDDraw2 := TDirectDraw.CreateEx(nil, False);
if FDDraw2.IDraw.SetCooperativeLevel(WindowHandle, DDSCL_NORMAL)<>DD_OK then
if FDDraw2.{$IFDEF D3D_deprecated}IDraw{$ELSE}IDraw7{$ENDIF}.SetCooperativeLevel(WindowHandle, DDSCL_NORMAL) <> DD_OK then
raise EDirectDrawOverlayError.CreateFmt(SCannotInitialized, [SOverlay]);
 
FTargetSurface2 := TDirectDrawSurface.Create(FDDraw2);
{$IFNDEF D3D_deprecated}
FillChar(PrimaryDesc, SizeOf(PrimaryDesc), 0);
PrimaryDesc.dwSize := SizeOf(PrimaryDesc);
PrimaryDesc.dwFlags := DDSD_CAPS;
PrimaryDesc.ddsCaps.dwCaps := DDSCAPS_PRIMARYSURFACE;
{$ENDIF}
if not FTargetSurface2.CreateSurface(PrimaryDesc) then
raise EDirectDrawOverlayError.CreateFmt(SCannotInitialized, [SOverlay]);
 
6893,11 → 12717,17
FSurface.Free; FSurface := nil;
end;
 
procedure TDirectDrawOverlay.Initialize(const SurfaceDesc: TDDSurfaceDesc);
procedure TDirectDrawOverlay.Initialize(const SurfaceDesc: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF});
{$IFDEF D3D_deprecated}
const
BackBufferCaps: TDDSCaps = (dwCaps: DDSCAPS_BACKBUFFER);
var
DDSurface: IDirectDrawSurface;
{$ELSE}
var
DDSurface: IDirectDrawSurface7;
BackBufferCaps: TDDSCaps2;
{$ENDIF}
begin
Finalize;
try
6906,18 → 12736,21
raise EDirectDrawOverlayError.CreateFmt(SCannotInitialized, [SOverlay]);
 
FBackSurface := TDirectDrawSurface.Create(FDDraw);
{$IFNDEF D3D_deprecated}
BackBufferCaps.dwCaps := DDSCAPS_BACKBUFFER;
{$ENDIF}
if SurfaceDesc.ddsCaps.dwCaps and DDSCAPS_FLIP<>0 then
begin
if FSurface.ISurface.GetAttachedSurface(BackBufferCaps, DDSurface)=DD_OK then
FBackSurface.IDDSurface := DDSurface;
end else
FBackSurface.IDDSurface := FSurface.IDDSurface;
if FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetAttachedSurface(BackBufferCaps, DDSurface) = DD_OK then
FBackSurface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := DDSurface;
end
else
FBackSurface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} := FSurface.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF};
 
if FVisible then
SetOverlayRect(FOverlayRect)
else
FSurface.ISurface.UpdateOverlay(PRect(nil)^, FTargetSurface.ISurface, PRect(nil)^, DDOVER_HIDE, PDDOverlayFX(nil)^);
FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.UpdateOverlay(PRect(nil), FTargetSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, PRect(nil), DDOVER_HIDE, PDDOverlayFX(nil));
except
Finalize;
raise;
6929,7 → 12762,7
if FSurface=nil then Exit;
 
if FSurface.SurfaceDesc.ddsCaps.dwCaps and DDSCAPS_FLIP<>0 then
FSurface.ISurface.Flip(nil, DDFLIP_WAIT);
FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.Flip(nil, DDFLIP_WAIT);
end;
 
procedure TDirectDrawOverlay.SetOverlayColorKey(Value: TColor);
6964,26 → 12797,34
XScaleRatio := (DestRect.right - DestRect.left) * 1000 div (SrcRect.right - SrcRect.left);
YScaleRatio := (DestRect.bottom - DestRect.top) * 1000 div (SrcRect.bottom - SrcRect.top);
 
if (FDDraw.DriverCaps.dwCaps and DDCAPS_OVERLAYSTRETCH<>0) and
(FDDraw.DriverCaps.dwMinOverlayStretch<>0) and (XScaleRatio<Integer(FDDraw.DriverCaps.dwMinOverlayStretch)) then
if (FDDraw.DriverCaps.dwCaps and DDCAPS_OVERLAYSTRETCH <> 0)
and (FDDraw.DriverCaps.dwMinOverlayStretch <> 0)
and (XScaleRatio < Integer(FDDraw.DriverCaps.dwMinOverlayStretch))
then
begin
DestRect.Right := DestRect.Left + (Integer(FSurface.SurfaceDesc.dwWidth) * (Integer(FDDraw.DriverCaps.dwMinOverlayStretch) + 1)) div 1000;
end;
 
if (FDDraw.DriverCaps.dwCaps and DDCAPS_OVERLAYSTRETCH<>0) and
(FDDraw.DriverCaps.dwMaxOverlayStretch<>0) and (XScaleRatio>Integer(FDDraw.DriverCaps.dwMaxOverlayStretch)) then
if (FDDraw.DriverCaps.dwCaps and DDCAPS_OVERLAYSTRETCH <> 0)
and (FDDraw.DriverCaps.dwMaxOverlayStretch <> 0)
and (XScaleRatio > Integer(FDDraw.DriverCaps.dwMaxOverlayStretch))
then
begin
DestRect.Right := DestRect.Left + (Integer(FSurface.SurfaceDesc.dwWidth) * (Integer(FDDraw.DriverCaps.dwMaxOverlayStretch) + 999)) div 1000;
end;
 
if (FDDraw.DriverCaps.dwCaps and DDCAPS_OVERLAYSTRETCH<>0) and
(FDDraw.DriverCaps.dwMinOverlayStretch<>0) and (YScaleRatio<Integer(FDDraw.DriverCaps.dwMinOverlayStretch)) then
if (FDDraw.DriverCaps.dwCaps and DDCAPS_OVERLAYSTRETCH <> 0)
and (FDDraw.DriverCaps.dwMinOverlayStretch <> 0)
and (YScaleRatio < Integer(FDDraw.DriverCaps.dwMinOverlayStretch))
then
begin
DestRect.Bottom := DestRect.Top + (Integer(FSurface.SurfaceDesc.dwHeight) * (Integer(FDDraw.DriverCaps.dwMinOverlayStretch) + 1)) div 1000;
end;
 
if (FDDraw.DriverCaps.dwCaps and DDCAPS_OVERLAYSTRETCH<>0) and
(FDDraw.DriverCaps.dwMaxOverlayStretch<>0) and (YScaleRatio>Integer(FDDraw.DriverCaps.dwMaxOverlayStretch)) then
if (FDDraw.DriverCaps.dwCaps and DDCAPS_OVERLAYSTRETCH <> 0)
and (FDDraw.DriverCaps.dwMaxOverlayStretch <> 0)
and (YScaleRatio > Integer(FDDraw.DriverCaps.dwMaxOverlayStretch))
then
begin
DestRect.Bottom := DestRect.Top + (Integer(FSurface.SurfaceDesc.dwHeight) * (Integer(FDDraw.DriverCaps.dwMaxOverlayStretch) + 999)) div 1000;
end;
7051,7 → 12892,7
OverlayFlags := OverlayFlags or (DDOVER_KEYDESTOVERRIDE or DDOVER_DDFX);
end;
 
FSurface.ISurface.UpdateOverlay(SrcRect, FTargetSurface.ISurface, DestRect, OverlayFlags, OverlayFX);
FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.UpdateOverlay(@SrcRect, FTargetSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, @DestRect, OverlayFlags, @OverlayFX);
end;
end;
 
7063,13 → 12904,3614
if FVisible then
SetOverlayRect(FOverlayRect)
else
FSurface.ISurface.UpdateOverlay(PRect(nil)^, FTargetSurface.ISurface, PRect(nil)^, DDOVER_HIDE, PDDOverlayFX(nil)^);
FSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.UpdateOverlay(PRect(nil), FTargetSurface.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}, PRect(nil), DDOVER_HIDE, PDDOverlayFX(nil));
end;
end;
 
{ TDXFont }
 
constructor TDXFont.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
 
destructor TDXFont.Destroy;
begin
inherited Destroy;
end;
 
procedure TDXFont.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) and (AComponent = FDXImageList) then
begin
FDXImageList := nil;
end;
end; {Notification}
 
procedure TDXFont.SetFont(const Value: string);
begin
FFont := Value;
if assigned(FDXImageList) then
begin
FFontIndex := FDXImageList.items.IndexOf(FFont); { find font once }
fOffset := FDXImageList.Items[FFontIndex].PatternWidth;
end;
end;
 
procedure TDXFont.SetFontIndex(const Value: Integer);
begin
FFontIndex := Value;
if assigned(FDXImageList) then
begin
FFont := FDXImageList.Items[FFontIndex].Name;
fOffset := FDXImageList.Items[FFontIndex].PatternWidth;
end;
end;
 
procedure TDXFont.TextOut(DirectDrawSurface: TDirectDrawSurface; X, Y: Integer; const Text: string);
var
loop, letter: Integer;
UpperText: string;
begin
if not assigned(FDXImageList) then
exit;
Offset := FDXImageList.Items[FFontIndex].PatternWidth;
UpperText := AnsiUppercase(text);
for loop := 1 to Length(UpperText) do
begin
letter := AnsiPos(UpperText[loop], Alphabet) - 1;
if letter < 0 then letter := 30;
FDXImageList.items[FFontIndex].Draw(DirectDrawSurface, x + Offset * loop, y, letter);
end; { loop }
end;
 
{ TDXPowerFontEffectsParameters }
 
procedure TDXPowerFontEffectsParameters.SetAlphaValue(
const Value: Integer);
begin
FAlphaValue := Value;
end;
 
procedure TDXPowerFontEffectsParameters.SetAngle(const Value: Integer);
begin
FAngle := Value;
end;
 
procedure TDXPowerFontEffectsParameters.SetCenterX(const Value: Integer);
begin
FCenterX := Value;
end;
 
procedure TDXPowerFontEffectsParameters.SetCenterY(const Value: Integer);
begin
FCenterY := Value;
end;
 
procedure TDXPowerFontEffectsParameters.SetHeight(const Value: Integer);
begin
FHeight := Value;
end;
 
procedure TDXPowerFontEffectsParameters.SetWAmplitude(
const Value: Integer);
begin
FWAmplitude := Value;
end;
 
procedure TDXPowerFontEffectsParameters.SetWidth(const Value: Integer);
begin
FWidth := Value;
end;
 
procedure TDXPowerFontEffectsParameters.SetWLenght(const Value: Integer);
begin
FWLenght := Value;
end;
 
procedure TDXPowerFontEffectsParameters.SetWPhase(const Value: Integer);
begin
FWPhase := Value;
end;
 
{ TDXPowerFont }
 
constructor TDXPowerFont.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FUseEnterChar := True;
FEnterCharacter := '|<';
FAlphabets := PowerAlphaBet;
FTextOutType := ttNormal;
FTextOutEffect := teNormal;
FEffectsParameters := TDXPowerFontEffectsParameters.Create;
end;
 
destructor TDXPowerFont.Destroy;
begin
inherited Destroy;
end;
 
procedure TDXPowerFont.SetAlphabets(const Value: string);
begin
if FDXImageList <> nil then
if Length(Value) > FDXImageList.Items[FFontIndex].PatternCount - 1 then Exit;
FAlphabets := Value;
end;
 
procedure TDXPowerFont.SetEnterCharacter(const Value: string);
begin
if Length(Value) >= 2 then Exit;
FEnterCharacter := Value;
end;
 
procedure TDXPowerFont.SetFont(const Value: string);
begin
FFont := Value;
if FDXImageList <> nil then
begin
FFontIndex := FDXImageList.Items.IndexOf(FFont); // Find font once...
Offset := FDXImageList.Items[FFontIndex].PatternWidth;
 
FEffectsParameters.Width := FDXImageList.Items[FFontIndex].PatternWidth;
FEffectsParameters.Height := FDXImageList.Items[FFontIndex].PatternHeight;
end;
end;
 
procedure TDXPowerFont.SetFontIndex(const Value: Integer);
begin
FFontIndex := Value;
if FDXImageList <> nil then
begin
FFont := FDXImageList.Items[FFontIndex].Name;
Offset := FDXImageList.Items[FFontIndex].PatternWidth;
 
FEffectsParameters.Width := FDXImageList.Items[FFontIndex].PatternWidth;
FEffectsParameters.Height := FDXImageList.Items[FFontIndex].PatternHeight;
end;
end;
 
procedure TDXPowerFont.SetEffectsParameters(const Value: TDXPowerFontEffectsParameters);
begin
FEffectsParameters := Value;
end;
 
procedure TDXPowerFont.SetTextOutEffect(const Value: TDXPowerFontTextOutEffect);
begin
FTextOutEffect := Value;
end;
 
procedure TDXPowerFont.SetTextOutType(const Value: TDXPowerFontTextOutType);
begin
FTextOutType := Value;
end;
 
procedure TDXPowerFont.SetUseEnterChar(const Value: Boolean);
begin
FUseEnterChar := Value;
end;
 
function TDXPowerFont.TextOutFast(DirectDrawSurface: TDirectDrawSurface; X, Y: Integer; const Text: string): Boolean;
var
Loop, Letter: Integer;
txt: string;
begin
Result := False;
if FDXImageList = nil then Exit;
// modified
case FTextOutType of
ttNormal: Txt := Text;
ttUpperCase: Txt := AnsiUpperCase(Text);
ttLowerCase: Txt := AnsiLowerCase(Text);
end;
Offset := FDXImageList.Items[FFontIndex].PatternWidth;
Loop := 1;
while (Loop <= Length(Text)) do
begin
Letter := AnsiPos(txt[Loop], FAlphabets); // modified
if (Letter > 0) and (Letter < FDXImageList.Items[FFontIndex].PatternCount - 1) then
FDXImageList.Items[FFontIndex].Draw(DirectDrawSurface, X + (Offset * Loop), Y, Letter - 1);
Inc(Loop);
end;
Result := True;
end;
 
function TDXPowerFont.TextOut(DirectDrawSurface: TDirectDrawSurface; X, Y: Integer; const Text: string): Boolean;
var
Loop, Letter: Integer;
FCalculatedEnters, EnterHeghit, XLoop: Integer;
DoTextOut: Boolean;
Txt: string;
Rect: TRect;
begin
Result := False;
if FDXImageList = nil then Exit;
Txt := Text;
DoTextOut := True;
if Assigned(FBeforeTextOut) then FBeforeTextOut(Self, Txt, DoTextOut);
if not DoTextOut then Exit;
// modified
case FTextOutType of
ttNormal: Txt := Text;
ttUpperCase: Txt := AnsiUpperCase(Text);
ttLowerCase: Txt := AnsiLowerCase(Text);
end;
Offset := FDXImageList.Items[FFontIndex].PatternWidth;
FCalculatedEnters := 0;
EnterHeghit := FDXImageList.Items[FFontIndex].PatternHeight;
XLoop := 0;
Loop := 1;
while (Loop <= Length(Txt)) do
begin
if FUseEnterChar then
begin
if Txt[Loop] = FEnterCharacter[1] then begin Inc(FCalculatedEnters); Inc(Loop); end;
if Txt[Loop] = FEnterCharacter[2] then begin Inc(FCalculatedEnters); XLoop := 0; {-FCalculatedEnters;} Inc(Loop); end;
end;
Letter := AnsiPos(Txt[Loop], FAlphabets); // modified
 
if (Letter > 0) and (Letter < FDXImageList.Items[FFontIndex].PatternCount - 1) then
case FTextOutEffect of
teNormal: FDXImageList.Items[FFontIndex].Draw(DirectDrawSurface, X + (Offset * XLoop), Y + (FCalculatedEnters * EnterHeghit), Letter - 1);
teRotat: FDXImageList.Items[FFontIndex].DrawRotate(DirectDrawSurface, X + (Offset * XLoop), Y + (FCalculatedEnters * EnterHeghit), FEffectsParameters.Width, FEffectsParameters.Height, Letter - 1, FEffectsParameters.CenterX, FEffectsParameters.CenterY, FEffectsParameters.Angle);
teAlphaBlend:
begin
Rect.Left := X + (Offset * XLoop);
Rect.Top := Y + (FCalculatedEnters * EnterHeghit);
Rect.Right := Rect.Left + FEffectsParameters.Width;
Rect.Bottom := Rect.Top + FEffectsParameters.Height;
 
FDXImageList.Items[FFontIndex].DrawAlpha(DirectDrawSurface, Rect, Letter - 1, FEffectsParameters.AlphaValue);
end;
teWaveX: FDXImageList.Items[FFontIndex].DrawWaveX(DirectDrawSurface, X + (Offset * XLoop), Y + (FCalculatedEnters * EnterHeghit), FEffectsParameters.Width, FEffectsParameters.Height, Letter - 1, FEffectsParameters.WAmplitude, FEffectsParameters.WLenght, FEffectsParameters.WPhase);
end;
Inc(Loop);
Inc(XLoop);
end;
if Assigned(FAfterTextOut) then FAfterTextOut(Self, Txt);
Result := True;
end;
 
//---------------------------------------------------------------------------
{
Main code supported hardware acceleration by videoadapteur
* Copyright (c) 2004-2010 Jaro Benes
* All Rights Reserved
* Version 1.09
* D2D Hardware module - main implementation part
* web site: www.micrel.cz/Dx
* e-mail: delphix_d2d@micrel.cz
}
 
constructor TD2DTextures.Create(DDraw: TCustomDXDraw);
begin
//inherited;
FDDraw := DDraw; //reload DDraw
{$IFNDEF VER4UP}
TexLen := 0;
Texture := nil;
{$ELSE}
SetLength(Texture, 0);
{$ENDIF}
end;
 
destructor TD2DTextures.Destroy;
var
I: Integer;
begin
if Assigned(Texture) then
{$IFDEF VER4UP}
for I := Low(Texture) to High(Texture) do
begin
Texture[I].D2DTexture.Free;
{$IFDEF VIDEOTEX}
if Assigned(Texture[I].VDIB) then
Texture[I].VDIB.Free;
{$ENDIF}
end;
{$ELSE}
for I := 0 to TexLen - 1 do
begin
Texture[I].D2DTexture.Free;
{$IFDEF VIDEOTEX}
if Assigned(Texture[I].VDIB) then
Texture[I].VDIB.Free;
{$ENDIF}
end;
{$ENDIF}
inherited;
end;
 
function TD2DTextures.GetD2DMaxTextures: Integer;
begin
Result := {$IFDEF VER4UP}Length(Texture){$ELSE}TexLen{$ENDIF};
end;
 
procedure TD2DTextures.SaveTextures(path: string);
var I: Integer;
begin
if Texture <> nil then
{$IFDEF VER4UP}
if Length(Texture) > 0 then
for I := Low(Texture) to High(Texture) do
{$ELSE}
if TexLen > 0 then
for I := 0 to TexLen - 1 do
{$ENDIF}
Texture[I].D2DTexture.FImage.SaveToFile(path + Texture[I].Name + '.dxt');
end;
 
procedure TD2DTextures.SetD2DMaxTextures(const Value: Integer);
begin
if Value > 0 then
{$IFDEF VER4UP}
SetLength(Texture, Value)
{$ELSE}
Inc(TexLen);
if Texture = nil then
Texture := AllocMem(SizeOf(TTextureRec))
else begin
{alokuj pamet}
ReallocMem(Texture, TexLen * SizeOf(TTextureRec));
end;
{$ENDIF}
end;
 
function TD2DTextures.Find(byName: string): Integer;
var I: Integer;
begin
Result := -1;
if Texture <> nil then
{$IFDEF VER4UP}
if Length(Texture) > 0 then
for I := Low(Texture) to High(Texture) do
if AnsiUpperCase(Texture[I].Name) = AnsiUpperCase(byName) then
begin
Result := I;
Exit;
end;
{$ELSE}
if TexLen > 0 then
for I := 0 to TexLen - 1 do
if AnsiUpperCase(Texture[I].Name) = AnsiUpperCase(byName) then
begin
Result := I;
Exit;
end;
{$ENDIF}
end;
 
function TD2DTextures.GetTextureByName(const byName: string): TDirect3DTexture2;
begin
Result := nil;
if Assigned(Texture) then
Result := Texture[Find(byName)].D2DTexture;
end;
 
function TD2DTextures.GetTextureByIndex(const byIndex: Integer): TDirect3DTexture2;
begin
Result := nil;
{$IFNDEF VER4UP}
if Assigned(Texture) and (byIndex >= 0) and (byIndex <= (TexLen - 1)) then
Result := Texture[byIndex].D2DTexture;
{$ELSE}
if Assigned(Texture) and (byIndex in [0..High(Texture)]) then
Result := Texture[byIndex].D2DTexture;
{$ENDIF}
end;
 
function TD2DTextures.GetTextureNameByIndex(const byIndex: Integer): string;
begin
Result := '';
{$IFNDEF VER4UP}
if Assigned(Texture) and (byIndex >= 0) and (byIndex <= (TexLen - 1)) then
Result := Texture[byIndex].Name;
{$ELSE}
if Assigned(Texture) and (byIndex in [0..High(Texture)]) then
Result := Texture[byIndex].Name;
{$ENDIF}
end;
 
function TD2DTextures.Count: Integer;
begin
Result := 0;
if Assigned(Texture) then
{$IFNDEF VER4UP}
Result := TexLen;
{$ELSE}
Result := High(Texture) + 1;
{$ENDIF}
end;
 
procedure TD2DTextures.D2DPruneAllTextures;
var I: Integer;
begin
if not Assigned(Texture) then Exit;
{$IFDEF VER4UP}
for I := Low(Texture) to High(Texture) do
{$ELSE}
for I := 0 to TexLen - 1 do
{$ENDIF}
begin
Texture[I].D2DTexture.Free;
{$IFDEF VIDEOTEX}
if Assigned(Texture[I].VDIB) then
Texture[I].VDIB.Free;
{$ENDIF}
end;
{$IFDEF VER4UP}
SetLength(Texture, 0);
{$ELSE}
TexLen := 0;
{$ENDIF}
end;
 
procedure TD2DTextures.D2DFreeTextures;
var I: Integer;
begin
if not Assigned(Texture) then Exit;
{$IFDEF VER4UP}
for I := Low(Texture) to High(Texture) do
{$ELSE}
for I := 0 to TexLen - 1 do
{$ENDIF}
begin
Texture[I].D2DTexture.Free;
{$IFDEF VIDEOTEX}
if Assigned(Texture[I].VDIB) then
Texture[I].VDIB.Free;
{$ENDIF}
end;
{$IFNDEF VER4UP}
FreeMem(Texture, TexLen * SizeOf(TTextureRec));
Texture := nil;
{$ENDIF}
end;
 
procedure TD2DTextures.D2DPruneTextures;
begin
if {$IFDEF VER4UP}Length(Texture){$ELSE}TexLen{$ENDIF} > maxTexBlock then
begin
D2DPruneAllTextures
end;
end;
 
procedure TD2DTextures.SizeAdjust(var DIB: TDIB; var FloatX1, FloatY1, FloatX2, FloatY2: Double);
var
X, Y: Integer;
tempDIB: TDIB;
begin {auto-adjust size n^2 for accelerator compatibility}
X := 1;
repeat
X := X * 2;
until DIB.Width <= X;
Y := 1;
repeat
Y := Y * 2
until DIB.Height <= Y;
{$IFDEF FORCE_SQUARE}
X := Max(X, Y);
Y := X;
{$ENDIF}
if (X = DIB.Width) and (Y = DIB.Height) then
begin
if DIB.BitCount = 32 then Exit; {do not touch}
{code for correction a DIB.BitCount to 24 bit only}
tempDIB := TDIB.Create;
try
tempDIB.SetSize(X, Y, 24);
FillChar(tempDIB.PBits^, tempDIB.Size, 0);
tempDIB.Canvas.Draw(0, 0, DIB);
DIB.Assign(tempDIB);
finally
tempDIB.Free;
end;
Exit;
end;
tempDIB := TDIB.Create;
try
if DIB.BitCount = 32 then
begin
tempDIB.SetSize(X, Y, 32);
FillChar(tempDIB.PBits^, tempDIB.Size, 0);
//tempDIB.Canvas.Brush.Color := clBlack;
//tempDIB.Canvas.FillRect(Bounds(0, 0, X, Y));
tempDIB.Canvas.Draw(0, 0, DIB);
// if DIB.HasAlphaChannel then
// tempDIB.AssignAlphaChannel(DIB);
end
else
begin
tempDIB.SetSize(X, Y, 24 {DIB.BitCount}); {bad value for some 16}
FillChar(tempDIB.PBits^, tempDIB.Size, 0);
//tempDIB.Canvas.Brush.Color := clBlack;
//tempDIB.Canvas.FillRect(Bounds(0, 0, X, Y));
tempDIB.Canvas.Draw(0, 0, DIB);
end;
FloatX2 := (1 / tempDIB.Width) * DIB.Width;
FloatY2 := (1 / tempDIB.Height) * DIB.Height;
DIB.Assign(tempDIB);
finally
tempDIB.Free;
end
end;
 
function TD2DTextures.CanFindTexture(aImage: TPictureCollectionItem): Boolean;
var I: Integer;
begin
Result := True;
{$IFDEF VER4UP}
if Length(Texture) > 0 then
{$ELSE}
if TexLen > 0 then
{$ENDIF}
for I := 0 to D2DMaxTextures - 1 do
if Texture[I].Name = aImage.Name then Exit;
Result := False;
end;
 
function TD2DTextures.LoadTextures(aImage: TPictureCollectionItem): Boolean;
var
{$IFNDEF VIDEOTEX}
VDIB: TDIB;
{$ENDIF}
T: TDXTextureImage;
begin
Result := True;
try
D2DPruneTextures; {up to maxTexBlock textures only}
D2DMaxTextures := D2DMaxTextures + 1;
if aImage.Name = '' then // FIX: OPTIMIZED
aImage.Name := aImage.GetNamePath; {this name is supplement name, when wasn't aImage.Name fill}
{$IFDEF VIDEOTEX}Texture[D2DMaxTextures - 1].{$ENDIF}VDIB := TDIB.Create;
try
with Texture[D2DMaxTextures - 1] do
begin
VDIB.Assign(aImage.Picture.Graphic);
VDIB.Transparent := aImage.Transparent;
FloatX1 := 0; FloatY1 := 0; FloatX2 := 1; FloatY2 := 1;
SizeAdjust(VDIB, FloatX1, FloatY1, FloatX2, FloatY2);
Name := aImage.Name;
Width := VDIB.Width;
Height := VDIB.Height;
if VDIB.HasAlphaChannel then
begin
DIB2DXT(VDIB, T);
T.ImageName := aImage.Name;
T.Transparent := aImage.Transparent;
D2DTexture := TDirect3DTexture2.Create(FDDraw, T, False);
D2DTexture.Transparent := aImage.Transparent;
AlphaChannel := True;
//**T.Free; DO NOT FREE - surface is lost ** FIX by JB.
end
else
begin
D2DTexture := TDirect3DTexture2.Create(FDDraw, VDIB, False);
D2DTexture.TransparentColor := DWORD(aImage.TransparentColor);
D2DTexture.Surface.TransparentColor := DWORD(aImage.TransparentColor);
D2DTexture.Transparent := aImage.Transparent;
AlphaChannel := False;
end;
end;
finally
{$IFNDEF VIDEOTEX}
VDIB.Free;
{$ENDIF}
end;
except
D2DMaxTextures := D2DMaxTextures - 1;
Result := False;
end;
end;
 
{$IFDEF VER4UP}
function TD2DTextures.CanFindTexture(const TexName: string): Boolean;
{$ELSE}
function TD2DTextures.CanFindTexture2(const TexName: string): Boolean;
{$ENDIF}
var I: Integer;
begin
Result := True;
{$IFDEF VER4UP}
if Length(Texture) > 0 then
{$ELSE}
if TexLen > 0 then
{$ENDIF}
for I := 0 to D2DMaxTextures - 1 do
if Texture[I].Name = TexName then Exit;
Result := False;
end;
 
function TD2DTextures.SetTransparentColor(dds: TDirectDrawSurface; PixelColor: Integer; Transparent: Boolean): Integer;
{Give a speculative transparent color value from DDS}
var
ddck: TDDColorKey;
CLL: Integer;
begin
Result := 0;
if dds.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
if dds.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetColorKey(DDCKEY_SRCBLT, ddck) = DD_OK then
Result := ddck.dwColorSpaceLowValue;
CLL := PixelColor; {have to pick up color from 0,0 pix of DIB}
if Transparent then {and must be transparent}
if (CLL <> Result) then {when different}
Result := CLL; {use our TransparentColor}
end;
 
{$IFDEF VER4UP}
function TD2DTextures.LoadTextures(dds: TDirectDrawSurface; Transparent: Boolean; asTexName: string): Boolean;
{$ELSE}
function TD2DTextures.LoadTextures2(dds: TDirectDrawSurface; Transparent: Boolean; asTexName: string): Boolean;
{$ENDIF}
var
{$IFNDEF VIDEOTEX}
VDIB: TDIB;
{$ENDIF}
Col: Integer;
T: PTextureRec;
begin
Result := True;
T := nil;
try
if dds.Modified then
begin
{search existing texture and return the pointer}
T := Addr(Texture[Find(asTexName)]);
{$IFNDEF VIDEOTEX}VDIB := TDIB.Create;{$ENDIF}
end
else
begin
D2DPruneTextures; {up to maxTexBlock textures only}
D2DMaxTextures := D2DMaxTextures + 1; {next to new space}
T := Addr(Texture[D2DMaxTextures - 1]); {is new place}
{set name}
T.Name := asTexName;
{and create video-dib object for store the picture periodically changed}
{$IFDEF VIDEOTEX}T.{$ENDIF}VDIB := TDIB.Create;
//T.VDIB.PixelFormat := MakeDIBPixelFormat(8, 8, 8);
end;
try
{the dds assigned here}
{$IFDEF VIDEOTEX}T.{$ENDIF}VDIB.Assign(dds);
{with full adjustation}
T.FloatX1 := 0; T.FloatY1 := 0; T.FloatX2 := 1; T.FloatY2 := 1;
SizeAdjust({$IFDEF VIDEOTEX}T.{$ENDIF}VDIB, T.FloatX1, T.FloatY1, T.FloatX2, T.FloatY2);
{and store 'changed' values of size here}
T.Width := {$IFDEF VIDEOTEX}T.{$ENDIF}VDIB.Width;
T.Height := {$IFDEF VIDEOTEX}T.{$ENDIF}VDIB.Height;
{and it have to set by dds as transparent, when it set up}
{$IFDEF VIDEOTEX}T.{$ENDIF}VDIB.Transparent := Transparent;
{get up transparent color}
Col := SetTransparentColor(dds, {$IFDEF VIDEOTEX}T.{$ENDIF}VDIB.Pixels[0, 0], Transparent);
if dds.Modified then
T.D2DTexture.Load {for minimize time only load as videotexture}
else
T.D2DTexture := TDirect3DTexture2.Create(FDDraw, {$IFDEF VIDEOTEX}T.{$ENDIF}VDIB, False); {create it}
{don't forget set transparent values on texture!}
T.D2DTexture.TransparentColor := DWORD(COL);
T.D2DTexture.Surface.TransparentColor := DWORD(COL);
T.D2DTexture.Transparent := Transparent;
finally
{$IFNDEF VIDEOTEX}
if Assigned(VDIB) then VDIB.Free;
{$ENDIF}
end;
except
{eh, sorry, when is not the dds modified, roll back and release last the VDIB}
if not dds.Modified then
if T <> nil then
begin
if Assigned({$IFDEF VIDEOTEX}T.{$ENDIF}VDIB) then
{$IFNDEF D5UP}
begin {$IFDEF VIDEOTEX}T.{$ENDIF}VDIB.Free; {$IFDEF VIDEOTEX}T.{$ENDIF}VDIB := nil; end;
{$ELSE}
FreeAndNil({$IFDEF VIDEOTEX}T.{$ENDIF}VDIB);
{$ENDIF}
if Assigned(T.D2DTexture) then
{$IFNDEF D5UP}
begin T.D2DTexture.Free; T.D2DTexture := nil; end;
{$ELSE}
FreeAndNil(T.D2DTexture);
{$ENDIF}
 
D2DMaxTextures := D2DMaxTextures - 1; //go back
end;
Result := False;
end;
dds.Modified := False; {this flag turn off always}
end;
 
{$IFDEF VER4UP}
function TD2DTextures.LoadTextures(dds: TDirectDrawSurface; Transparent: Boolean;
TransparentColor: Integer; asTexName: string): Boolean;
{$ELSE}
function TD2DTextures.LoadTextures3(dds: TDirectDrawSurface; Transparent: Boolean;
TransparentColor: Integer; asTexName: string): Boolean;
{$ENDIF}
function getDDSTransparentColor(DIB: TDIB; dds: TDirectDrawSurface): Integer;
var CLL: Integer; ddck: TDDColorKey;
begin
Result := 0;
if dds.{$IFDEF D3D_deprecated}IDDSurface{$ELSE}IDDSurface7{$ENDIF} <> nil then
if dds.{$IFDEF D3D_deprecated}ISurface{$ELSE}ISurface7{$ENDIF}.GetColorKey(DDCKEY_SRCBLT, ddck) = DD_OK then
Result := ddck.dwColorSpaceLowValue;
CLL := TransparentColor;
if (CLL = -1) or (cardinal(CLL) <> DIB.Pixels[0, 0]) then //when is DDS
CLL := DIB.Pixels[0, 0]; //have to pick up color from 0,0 pix of DIB
if Transparent then //and must be transparent
if CLL <> Result then //when different
Result := CLL; //use TransparentColor
end;
var
{$IFNDEF VIDEOTEX}
VDIB: TDIB;
{$ENDIF}
COL: Integer;
T: TDXTextureImage;
begin
Result := True;
try
D2DPruneTextures; {up to maxTexBlock textures only}
D2DMaxTextures := D2DMaxTextures + 1;
Texture[D2DMaxTextures - 1].Name := asTexName;
{$IFDEF VIDEOTEX}Texture[D2DMaxTextures - 1].{$ENDIF}VDIB := TDIB.Create;
try
with Texture[D2DMaxTextures - 1] do
begin
VDIB.AsSign(dds);
VDIB.Transparent := Transparent;
FloatX1 := 0; FloatY1 := 0; FloatX2 := 1; FloatY2 := 1;
SizeAdjust(VDIB, FloatX1, FloatY1, FloatX2, FloatY2);
Width := VDIB.Width;
Height := VDIB.Height;
if VDIB.HasAlphaChannel then
begin
DIB2DXT(VDIB, T);
T.ImageName := asTexName;
T.Transparent := Transparent;
D2DTexture := TDirect3DTexture2.Create(FDDraw, T, False);
D2DTexture.Transparent := Transparent;
AlphaChannel := True;
//**T.Free; DO NOT FREE - surface is lost ** FIX by JB.
end
else
begin
D2DTexture := TDirect3DTexture2.Create(FDDraw, VDIB, False);
if transparentcolor = -1 then
COL := getDDSTransparentColor(VDIB, DDS)
else
COL := D2DTexture.Surface.ColorMatch(transparentcolor);
D2DTexture.TransparentColor := DWORD(COL); //**
D2DTexture.Surface.TransparentColor := DWORD(COL); //**
D2DTexture.Transparent := Transparent;
AlphaChannel := False;
end;
end
finally
{$IFNDEF VIDEOTEX}
VDIB.Free;
{$ENDIF}
end;
except
D2DMaxTextures := D2DMaxTextures - 1;
Result := False;
end;
end;
 
{$IFDEF VER4UP}
function TD2DTextures.CanFindTexture(const Color: LongInt): Boolean;
{$ELSE}
function TD2DTextures.CanFindTexture3(const Color: LongInt): Boolean;
{$ENDIF}
var I: Integer;
begin
Result := True;
{$IFDEF VER4UP}
if Length(Texture) > 0 then
{$ELSE}
if TexLen > 0 then
{$ENDIF}
for I := 0 to D2DMaxTextures - 1 do
if Texture[I].Name = '$' + IntToStr(Color) then Exit;
Result := False;
end;
 
{$IFDEF VER4UP}
function TD2DTextures.LoadTextures(Color: LongInt): Boolean;
{$ELSE}
function TD2DTextures.LoadTextures4(Color: LongInt): Boolean;
{$ENDIF}
var
S: string;
{$IFNDEF VIDEOTEX}
VDIB: TDIB;
{$ENDIF}
begin
Result := True;
try
D2DPruneTextures; {up to maxTexBlock textures only}
D2DMaxTextures := D2DMaxTextures + 1;
S := '$' + IntToStr(Color); {this name is supplement name}
{$IFDEF VIDEOTEX}Texture[D2DMaxTextures - 1].{$ENDIF}VDIB := TDIB.Create;
try
with Texture[D2DMaxTextures - 1] do
begin
VDIB.SetSize(16, 16, 24); {16x16 good size}
VDIB.Canvas.Brush.Color := Color;
VDIB.Canvas.FillRect(Bounds(0, 0, 16, 16));
 
FloatX1 := 0;
FloatY1 := 0;
FloatX2 := 1;
FloatY2 := 1;
Name := S;
D2DTexture := TDirect3DTexture2.Create(FDDraw, VDIB, False);
D2DTexture.Transparent := False; //cannot be transparent
end;
finally
{$IFNDEF VIDEOTEX}
VDIB.Free;
{$ENDIF}
end;
except
D2DMaxTextures := D2DMaxTextures - 1;
Result := False;
end;
end;
 
{$IFDEF VIDEOTEX}
function TD2DTextures.GetTexLayoutByName(name: string): TDIB;
var
I: Integer;
begin
Result := nil;
I := Find(name);
{$IFDEF VER4UP}
if (I >= Low(Texture)) and (I <= High(Texture)) then
{$ELSE}
if I <> -1 then
{$ENDIF}
Result := Texture[I].VDIB
end;
{$ENDIF}
 
//---------------------------------------------------------------------------
 
constructor TD2D.Create(DDraw: TCustomDXDraw);
begin
inherited Create;
//after inheritance
FDDraw := DDraw;
FD2DTextureFilter := D2D_POINT {D2D_LINEAR};
{$IFNDEF D3D_deprecated}
FD2DTexture := TD2DTextures.Create(FDDraw);
{$ENDIF}
InitVertex;
{internal allocation of texture}
CanUseD2D := {$IFDEF D3D_deprecated}(do3D in FDDraw.Options) and
(doDirectX7Mode in FDDraw.Options) and
(doHardware in FDDraw.Options){$ELSE}True{$ENDIF};
FDIB := TDIB.Create;
FInitialized := False;
end;
 
destructor TD2D.Destroy;
begin
{freeing texture and stop using it}
CanUseD2D := False;
if AsSigned(FD2DTexture) then
begin
FD2DTexture.Free; {add 29.5.2005 Takanori Kawasaki}
FD2DTexture := nil;
end;
FDIB.Free;
inherited Destroy;
end;
 
procedure TD2D.InitVertex;
var i: Integer;
begin
Fillchar(FVertex, SizeOf(FVertex), 0);
for i := 0 to 3 do
begin
FVertex[i].Specular := D3DRGB(1.0, 1.0, 1.0);
FVertex[i].rhw := 1.0;
end;
end;
 
//---------------------------------------------------------------------------
 
procedure TD2D.BeginScene();
begin
asm
FINIT
end;
FDDraw.D3DDevice7.BeginScene();
asm
FINIT
end;
FDDraw.D3DDevice7.Clear(0, nil, D3DCLEAR_TARGET, 0, 0, 0);
end;
 
//---------------------------------------------------------------------------
 
procedure TD2D.EndScene();
begin
asm
FINIT
end;
FDDraw.D3DDevice7.EndScene();
asm
FINIT
end;
end;
 
function TD2D.D2DTexturedOn(Image: TPictureCollectionItem; Pattern: Integer; SubPatternRect: TRect; RenderType: TRenderType; Alpha: Byte): Boolean;
var I: Integer;
SrcX, SrcY, diffX: Double;
R: TRect;
Q: TTextureRec;
begin
Result := False;
FDDraw.D3DDevice7.SetTexture(0, nil);
if not FD2DTexture.CanFindTexture(Image) then {when no texture in list try load it}
if not FD2DTexture.LoadTextures(Image) then {loading is here}
Exit; {on error occurr out}
I := FD2DTexture.Find(Image.Name);
if I = -1 then Exit;
{set pattern as texture}
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MAGFILTER, DWord(Ord(FD2DTextureFilter)+1));
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MINFILTER, DWord(Ord(FD2DTextureFilter)+1));
try
RenderError := FDDraw.D3DDevice7.SetTexture(0, FD2DTexture.Texture[I].D2DTexture.Surface.IDDSurface7) <> DD_OK;
case RenderType of
rtDraw: begin D2DEffectSolid; D2DWhite; end;
rtBlend: begin D2DEffectBlend; D2DAlphaVertex(Alpha); end;
rtAdd: begin D2DEffectAdd; D2DFade(Alpha); end;
rtSub: begin D2DEffectSub; D2DFade(Alpha); end;
end;
except
RenderError := True;
FD2DTexture.D2DPruneAllTextures;
Image.Restore;
SetD2DTextureFilter(D2D_LINEAR);
Exit;
end;
{set transparent area}
RenderError := FDDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, Ord(FD2DTexture.Texture[I].D2DTexture.Transparent)) <> DD_OK;
{except for Draw when alphachannel exists}
{change for blend drawing but save transparent area still}
if FD2DTexture.Texture[I].AlphaChannel then
{when is Draw selected then}
if RenderType = rtDraw then
begin
D2DEffectBlend;
D2DAlphaVertex($FF);
end;
{pokud je obrazek rozdeleny, nastav oka site}
if (Image.PatternHeight <> 0) or (Image.PatternWidth <> 0) then
begin
{vezmi rect jenom dilku}
R := Image.PatternRects[Pattern];
SrcX := 1 / FD2DTexture.Texture[I].Width;
SrcY := 1 / FD2DTexture.Texture[I].Height;
//namapovani vertexu na texturu
FD2DTexture.Texture[I].FloatX1 := SrcX * R.Left;
FD2DTexture.Texture[I].FloatY1 := SrcY * R.Top;
{for meshed subimage contain one image only can be problem there}
diffX := 0.5; if Image.PatternCount = 1 then diffX := 0;
FD2DTexture.Texture[I].FloatX2 := SrcX * (R.Right - diffX);
FD2DTexture.Texture[I].FloatY2 := SrcY * (R.Bottom - diffX);
if not (
(SubPatternRect.Left = Image.PatternRects[Pattern].Left) and
(SubPatternRect.Top = Image.PatternRects[Pattern].Top) and
(SubPatternRect.Right = Image.PatternRects[Pattern].Right) and
(SubPatternRect.Bottom = Image.PatternRects[Pattern].Bottom))
then
begin
{remaping subtexture via subpattern}
Q.FloatX1 := SrcX * SubPatternRect.Left;
Q.FloatY1 := SrcY * SubPatternRect.Top;
Q.FloatX2 := SrcX * (SubPatternRect.Right - diffX);
Q.FloatY2 := SrcY * (SubPatternRect.Bottom - diffX);
D2DTU(Q); {with mirroring/flipping}
Result := not RenderError;
Exit;
end;
end; {jinak celeho obrazku}
 
{ X1,Y1 X2,Y1
0 +-----------------+ 1
| |
| |
| |
| |
2 +-----------------+ 3
X1,Y2 X2,Y2 }
D2DTU(FD2DTexture.Texture[I]);
Result := not RenderError;
end;
 
function TD2D.D2DTexturedOnDDSTex(dds: TDirectDrawSurface; SubPatternRect: TRect; Transparent: Boolean): Integer;
{special version of map for TDirectDrawSurface only}
{set up transparent color from this surface}
var
TexName: string;
begin
Result := -1;
{pokud je seznam prazdny, nahrej texturu}
if dds.Caption <> '' then TexName := dds.Caption
else TexName := IntToStr(Integer(dds)); {simple but stupid}
if not FD2DTexture.{$IFDEF VER4UP}CanFindTexture{$ELSE}CanFindTexture2{$ENDIF}(TexName) then
begin
{when texture doesn't exists, has to the Modified flag turn off}
if dds.Modified then
dds.Modified := not dds.Modified;
if not FD2DTexture.{$IFDEF VER4UP}LoadTextures{$ELSE}LoadTextures2{$ENDIF}(dds, Transparent, TexName) then
Exit; {nepovede-li se to, pak ven}
end
else
if dds.Modified then
begin {when modifying, load texture allways}
if not FD2DTexture.{$IFDEF VER4UP}LoadTextures{$ELSE}LoadTextures2{$ENDIF}(dds, Transparent, TexName) then
Exit; {nepovede-li se to, pak ven}
end;
Result := FD2DTexture.Find(TexName);
end;
 
function IsNotZero(Z: TRect): Boolean;
begin
Result := ((Z.Right - Z.Left) > 0) and ((Z.Bottom - Z.Top) > 0)
end;
 
function TD2D.D2DTexturedOnDDS(dds: TDirectDrawSurface; SubPatternRect: TRect; Transparent: Boolean; RenderType: TRenderType; Alpha: Byte): Boolean;
var I: Integer;
SrcX, SrcY: Double;
begin
Result := False;
FDDraw.D3DDevice7.SetTexture(0, nil);
{call a low level routine for load DDS texture}
I := D2DTexturedOnDDSTex(dds, SubPatternRect, Transparent);
if I = -1 then Exit;
{set pattern as texture}
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MAGFILTER, DWord(Ord(FD2DTextureFilter)+1));
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MINFILTER, DWord(Ord(FD2DTextureFilter)+1));
try
RenderError := FDDraw.D3DDevice7.SetTexture(0, FD2DTexture.Texture[I].D2DTexture.Surface.IDDSurface7) <> DD_OK;
case RenderType of
rtDraw: begin D2DEffectSolid; D2DWhite; end;
rtBlend: begin D2DEffectBlend; D2DAlphaVertex(Alpha); end;
rtAdd: begin D2DEffectAdd; D2DFade(Alpha); end;
rtSub: begin D2DEffectSub; D2DFade(Alpha); end;
end;
except
RenderError := True;
FD2DTexture.D2DPruneAllTextures;
SetD2DTextureFilter(D2D_LINEAR); //default
Exit;
end;
{set transparent area}
RenderError := FDDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, Ord(FD2DTexture.Texture[I].D2DTexture.Transparent)) <> DD_OK;
if IsNotZero(SubPatternRect) then
begin
{Set Texture Coordinates}
SrcX := 1 / FD2DTexture.Texture[I].D2DTexture.FImage.Width;
SrcY := 1 / FD2DTexture.Texture[I].D2DTexture.FImage.Height;
//namapovani vertexu na texturu
FD2DTexture.Texture[I].FloatX1 := SrcX * SubPatternRect.Left;
FD2DTexture.Texture[I].FloatY1 := SrcY * SubPatternRect.Top;
FD2DTexture.Texture[I].FloatX2 := SrcX * (SubPatternRect.Right - 0.5 { - 1}); //by Speeeder
FD2DTexture.Texture[I].FloatY2 := SrcY * (SubPatternRect.Bottom - 0.5 { - 1}); //by Speeeder
end;
D2DTU(FD2DTexture.Texture[I]);
Result := not RenderError;
end;
 
//---------------------------------------------------------------------------
 
procedure TD2D.SaveTextures(path: string);
begin
FD2DTexture.SaveTextures(path);
end;
 
procedure TD2D.SetCanUseD2D(const Value: Boolean);
begin
case Value of
False: {prestava se uzivat}
if AsSigned(FD2DTexture) and (Value <> FCanUseD2D) then
begin
FInitialized := False;
end;
True:
if Value <> FCanUseD2D then
begin
{$IFDEF D3D_deprecated}
FD2DTexture := TD2DTextures.Create(FDDraw);
TextureFilter := D2D_LINEAR;
{$ENDIF}
end
end;
FCanUseD2D := Value;
end;
 
function TD2D.GetCanUseD2D: Boolean;
begin
{$IFDEF D3D_deprecated}
{Mode has to do3D, doDirectX7Mode and doHardware}
if (do3D in FDDraw.Options) and
(doDirectX7Mode in FDDraw.Options) and
(doHardware in FDDraw.Options)
then
begin
if not FCanUseD2D then CanUseD2D := True;
end
else
if not (do3D in FDDraw.Options) or
not (doDirectX7Mode in FDDraw.Options) or
not (doHardware in FDDraw.Options)
then
if FCanUseD2D then FCanUseD2D := False; // CanUseD2D -> FCanUseD2D
{$ELSE}
FCanUseD2D := (doHardware in FDDraw.Options);
{$ENDIF}
FBitCount := FDDraw.Surface.SurfaceDesc.ddpfPixelFormat.dwRGBBitCount;
{supported 16 or 32 bitcount deepth only}
{$IFDEF D3D_deprecated}
if not (FBitCount in [16, 32]) then FCanUseD2D := False;
{$ENDIF}
if not FInitialized then
if FCanUseD2D and Assigned(FDDraw.D3DDevice7) then
begin
FDDraw.D3DDevice7.GetCaps(FD3DDevDesc7);
FInitialized := True;
end;
 
Result := FCanUseD2D;
end;
 
procedure TD2D.SetD2DTextureFilter(const Value: TD2DTextureFilter);
begin
FD2DTextureFilter := Value;
if {$IFDEF D3D_deprecated}(do3D in FDDraw.Options) and{$ENDIF} AsSigned(FDDraw.D3DDevice7) then
begin
FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MAGFILTER, DWord(Ord(FD2DTextureFilter) + 1));
FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MINFILTER, DWord(Ord(FD2DTextureFilter) + 1));
end;
end;
 
procedure TD2D.SetD2DAntialiasFilter(const Value: TD3DAntialiasMode);
begin
FD2DAntialiasFilter := Value;
if {$IFDEF D3D_deprecated}(do3D in FDDraw.Options) and{$ENDIF} AsSigned(FDDraw.D3DDevice7) then
begin
FDDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_ANTIALIAS, Ord(Value));
end;
end;
 
procedure TD2D.D2DRect(R: TRect);
begin
FVertex[0].sx := R.Left - 0.5;
FVertex[0].sy := R.Top - 0.5;
FVertex[1].sx := R.Right - 0.5;
FVertex[1].sy := R.Top - 0.5;
FVertex[2].sx := R.Left - 0.5;
FVertex[2].sy := R.Bottom - 0.5;
FVertex[3].sx := R.Right - 0.5;
FVertex[3].sy := R.Bottom - 0.5;
end;
 
procedure TD2D.D2DTU(T: TTextureRec);
begin
if FMirrorFlipSet = [rmfMirror] then
begin
{ X1,Y1 X2,Y1
0 +-----------------+ 1
| |
| |
| |
| |
2 +-----------------+ 3
X1,Y2 X2,Y2 }
FVertex[1].tu := T.FloatX1;
FVertex[1].tv := T.FloatY1;
FVertex[0].tu := T.FloatX2;
FVertex[0].tv := T.FloatY1;
FVertex[3].tu := T.FloatX1;
FVertex[3].tv := T.FloatY2;
FVertex[2].tu := T.FloatX2;
FVertex[2].tv := T.FloatY2;
end
else
if FMirrorFlipSet = [rmfFlip] then
begin
{ X1,Y1 X2,Y1
0 +-----------------+ 1
| |
| |
| |
| |
2 +-----------------+ 3
X1,Y2 X2,Y2 }
FVertex[2].tu := T.FloatX1;
FVertex[2].tv := T.FloatY1;
FVertex[3].tu := T.FloatX2;
FVertex[3].tv := T.FloatY1;
FVertex[0].tu := T.FloatX1;
FVertex[0].tv := T.FloatY2;
FVertex[1].tu := T.FloatX2;
FVertex[1].tv := T.FloatY2;
end
else
if FMirrorFlipSet = [rmfMirror, rmfFlip] then
begin
{ X1,Y1 X2,Y1
0 +-----------------+ 1
| |
| |
| |
| |
2 +-----------------+ 3
X1,Y2 X2,Y2 }
FVertex[3].tu := T.FloatX1;
FVertex[3].tv := T.FloatY1;
FVertex[2].tu := T.FloatX2;
FVertex[2].tv := T.FloatY1;
FVertex[1].tu := T.FloatX1;
FVertex[1].tv := T.FloatY2;
FVertex[0].tu := T.FloatX2;
FVertex[0].tv := T.FloatY2;
end
else
begin
{ X1,Y1 X2,Y1
0 +-----------------+ 1
| |
| |
| |
| |
2 +-----------------+ 3
X1,Y2 X2,Y2 }
FVertex[0].tu := T.FloatX1;
FVertex[0].tv := T.FloatY1;
FVertex[1].tu := T.FloatX2;
FVertex[1].tv := T.FloatY1;
FVertex[2].tu := T.FloatX1;
FVertex[2].tv := T.FloatY2;
FVertex[3].tu := T.FloatX2;
FVertex[3].tv := T.FloatY2;
end;
end;
 
{Final public routines}
 
function TD2D.D2DRender(Image: TPictureCollectionItem; DestRect: TRect;
Pattern: Integer; SourceRect: TRect; RenderType: TRenderType; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
if D2DTexturedOnSubRect(Image, Pattern, Image.PatternRects[Pattern], SourceRect, RenderType, Alpha) then
begin
D2DRect(DestRect);
Result := RenderQuad;
end;
end;
 
function TD2D.{$IFNDEF VER4UP}D2DRender2{$ELSE}D2DRender{$ENDIF}(Image: TPictureCollectionItem; R: TRect;
Pattern: Integer; RenderType: TRenderType; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
if D2DTexturedOn(Image, Pattern, Image.PatternRects[Pattern], RenderType, Alpha) then
begin
D2DRect(R);
Result := RenderQuad;
end;
end;
 
function TD2D.D2DRenderDDS(Source: TDirectDrawSurface; SourceRect, DestRect: TRect;
Transparent: Boolean; Pattern: Integer; RenderType: TRenderType; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
if D2DTexturedOnDDS(Source, SourceRect, Transparent, RenderType, Alpha) then
begin
D2DRect(DestRect);
Result := RenderQuad;
end;
end;
 
function TD2D.D2DRenderCol(Image: TPictureCollectionItem; R: TRect;
Pattern, Color: Integer; RenderType: TRenderType; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
if D2DTexturedOn(Image, Pattern, Image.PatternRects[Pattern], RenderType, Alpha) then
begin
D2DRect(R);
Result := RenderQuad;
end;
end;
 
function TD2D.D2DRenderColDDS(Source: TDirectDrawSurface; SourceRect, DestRect: TRect;
Transparent: Boolean; Pattern, Color: Integer; RenderType: TRenderType; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{Add}
if D2DTexturedOnDDS(Source, SourceRect, Transparent, RenderType, Alpha) then
begin
D2DRect(DestRect);
Result := RenderQuad;
end;
end;
 
function TD2D.D2DRenderDrawXY(Image: TPictureCollectionItem; X, Y: Integer;
Pattern: Integer; RenderType: TRenderType; Alpha: Byte): Boolean;
var PWidth, PHeight: Integer;
begin
Result := False; if not CanUseD2D then Exit;
{Draw}
if D2DTexturedOn(Image, Pattern, Image.PatternRects[Pattern], RenderType, Alpha) then
begin
PWidth := Image.PatternWidth; if PWidth = 0 then PWidth := Image.Width;
PHeight := Image.PatternHeight; if PHeight = 0 then PHeight := Image.Height;
D2DRect(Bounds(X, Y, PWidth, PHeight));
Result := RenderQuad;
end;
end;
 
function TD2D.D2DRenderDrawDDSXY(Source: TDirectDrawSurface; X, Y: Integer;
Transparent: Boolean; Pattern: Integer; RenderType: TRenderType; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{Draw}
if D2DTexturedOnDDS(Source, ZeroRect, Transparent, RenderType, Alpha) then
begin
D2DRect(Bounds(X, Y, Source.Width, Source.Height));
Result := RenderQuad;
end;
end;
 
{$IFDEF VER4UP}
function TD2D.D2DRenderDrawDDSXY(Source: TDirectDrawSurface; X, Y: Integer;
SrcRect: TRect; Transparent: Boolean; Pattern: Integer; RenderType: TRenderType; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{Draw}
if D2DTexturedOnDDS(Source, SrcRect, Transparent, RenderType, Alpha) then
begin
D2DRect(Bounds(X, Y, SrcRect.Right - SrcRect.Left, SrcRect.Bottom - SrcRect.Top));
Result := RenderQuad;
end;
end;
{$ENDIF}
 
{Rotate functions}
 
procedure TD2D.D2DRotate(X, Y, W, H: Integer; Px, Py: Double; Angle: Single);
procedure SinCosS(const Theta: Single; var Sin, Cos: Single); register;
{ EAX contains address of Sin}
{ EDX contains address of Cos}
{ Theta is passed over the stack}
asm
FLD Theta
FSINCOS
FSTP DWORD PTR [EDX] // cosine
FSTP DWORD PTR [EAX] // sine
end;
const PI256 = 2 * PI / 256;
var x1, y1, up, s_angle, c_angle, s_up, c_up: Single;
begin
angle := angle * PI256; up := angle + PI / 2;
x1 := w * px; y1 := h * py;
SinCosS(angle, s_angle, c_angle);
SinCosS(up, s_up, c_up);
FVertex[0].sx := X - x1 * c_angle - y1 * c_up;
FVertex[0].sy := Y - x1 * s_angle - y1 * s_up;
FVertex[1].sx := FVertex[0].sx + W * c_angle;
FVertex[1].sy := FVertex[0].sy + W * s_angle;
FVertex[2].sx := FVertex[0].sx + H * c_up;
FVertex[2].sy := FVertex[0].sy + H * s_up;
FVertex[3].sx := FVertex[2].sx + W * c_angle;
FVertex[3].sy := FVertex[2].sy + W * s_angle;
end;
 
function TD2D.D2DRenderRotate(Image: TPictureCollectionItem; RotX, RotY,
PictWidth, PictHeight, PatternIndex: Integer; RenderType: TRenderType;
CenterX, CenterY: Double;
Angle: single; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{load textures and map it, set of effect}
if D2DTexturedOn(Image, PatternIndex, Image.PatternRects[PatternIndex], RenderType, Alpha) then
begin
{do rotate mesh}
D2DRotate(RotX, RotY, PictWidth, PictHeight, CenterX, CenterY, Angle);
{render it}
Result := RenderQuad;
end;
end;
 
function TD2D.D2DRenderRotateDDS(Image: TDirectDrawSurface; SourceRect: TRect; RotX, RotY,
PictWidth, PictHeight: Integer; RenderType: TRenderType;
CenterX, CenterY: Double; Angle: single; Alpha: Byte;
Transparent: Boolean): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{load textures and map it, set of effect}
if D2DTexturedOnDDS(Image, SourceRect, Transparent, RenderType, Alpha) then
begin
{do rotate mesh}
D2DRotate(RotX, RotY, PictWidth, PictHeight, CenterX, CenterY, Angle);
{render it}
Result := RenderQuad;
end;
end;
 
{------------------------------------------------------------------------------}
{created 31.1.2005 JB.}
{replacement original Hori's functionality}
{24.4.2006 create WaveY as supplement like WaveX functions}
{14.5.2006 added functionality for tile drawing through PatternIndex}
 
function TD2D.D2DMeshMapToWave(dds: TDirectDrawSurface; Transparent: Boolean;
TransparentColor: Integer; X, Y, iWidth, iHeight, PatternIndex: Integer;
PatternRect: TRect;
Amp, Len, Ph, Alpha: Integer; effect: TRenderType; DoY: Boolean): Boolean;
function D2DTexturedOn(dds: TDirectDrawSurface; Transparent: Boolean; var TexNo: Integer): Boolean;
{special version of mapping for TDirectDrawSurface only}
{set up transparent color from this surface}
var I: Integer;
TexName: string;
begin
Result := False;
TexNo := -1;
RenderError := FDDraw.D3DDevice7.SetTexture(0, nil) <> DD_OK;
{pokud je seznam prazdny, nahrej texturu}
if dds.Caption <> '' then TexName := dds.Caption
else TexName := IntToStr(Integer(dds));
if not FD2DTexture.{$IFDEF VER4UP}CanFindTexture{$ELSE}CanFindTexture2{$ENDIF}(TexName) then
{nepovede-li se to, pak ven}
if not FD2DTexture.{$IFDEF VER4UP}LoadTextures{$ELSE}LoadTextures3{$ENDIF}(dds, Transparent, TransparentColor, TexName) then Exit;
I := FD2DTexture.Find(TexName);
if I = -1 then Exit;
TexNo := I;
{set pattern as texture}
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MAGFILTER, DWord(Ord(FD2DTextureFilter)+1));
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MINFILTER, DWord(Ord(FD2DTextureFilter)+1));
try
RenderError := FDDraw.D3DDevice7.SetTexture(0, FD2DTexture.Texture[I].D2DTexture.Surface.IDDSurface7) <> DD_OK;
//Result := True; {not RetderError}
except
RenderError := True;
Result := False;
FD2DTexture.D2DPruneAllTextures;
Exit;
end;
{set transparent area}
RenderError := FDDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, Ord(FD2DTexture.Texture[I].D2DTexture.Transparent)) <> DD_OK;
Result := not RenderError;
end;
type
TVertexArray = array{$IFNDEF VER4UP} [0..0]{$ENDIF} of TD3DTLVERTEX;
{$IFNDEF VER4UP}
PVertexArray = ^TVertexArray;
{$ENDIF}
var
SVertex: {$IFDEF VER4UP}TVertexArray{$ELSE}PVertexArray{$ENDIF};
I, maxVertex, maxPix, VStepVx, TexNo, Width, Height: Integer;
VStep, VStepTo, D, Z, FX1, FX2, FY1, FY2, SX, SY, X1, Y1, X2, Y2: Extended;
R: TRect;
clr: DWORD;
begin
Result := False;
{zde uschovano maximum [0..1] po adjustaci textury, ktera nemela nektery rozmer 2^n}
{FD2DTexture.Texture[I].FloatX2;}
{FD2DTexture.Texture[I].FloatY2;}
{napr. pokud byl rozmer 0.7 pak je nutno prepocitat tento interval [0..0.7] na height}
if not D2DTexturedOn(dds, Transparent, TexNo) then Exit;
{musi se prenastavit velikost pokud je PatternIndex <> -1}
Width := iWidth;
Height := iHeight;
{remove into local variabled for multi-picture adjustation}
FX1 := FD2DTexture.Texture[TexNo].FloatX1;
FX2 := FD2DTexture.Texture[TexNo].FloatX2;
FY1 := FD2DTexture.Texture[TexNo].FloatY1;
FY2 := FD2DTexture.Texture[TexNo].FloatY2;
{when pattertindex selected, get real value of subtexture}
if (PatternIndex <> -1) {and (PatternRect <> ZeroRect)} then
begin
R := PatternRect;
Width := R.Right - R.Left;
Height := R.Bottom - R.Top;
{scale unit of full new width and height}
SX := 1 / FD2DTexture.Texture[TexNo].Width;
SY := 1 / FD2DTexture.Texture[TexNo].Height;
{remap there}
FX1 := R.Left * SX;
FX2 := R.Right * SX;
FY1 := R.Top * SY;
FY2 := R.Bottom * SY;
end;
{nastavuje se tolik vertexu, kolik je potreba}
{speculative set up of rows for better look how needed}
if not DoY then
begin
maxVertex := 2 * Trunc(Height / Len * 8);
if (maxVertex mod 2) > 0 then {top to limits}
Inc(maxVertex, 2);
if (maxVertex div 2) > Height then {correct to Height}
maxVertex := 2 * Height;
end
else
begin
maxVertex := 2 * Trunc(Width / Len * 8);
if (maxVertex mod 2) > 0 then {top to limits}
Inc(maxVertex, 2);
if (maxVertex div 2) > Width then {correct to Width}
maxVertex := 2 * Width;
end;
 
{pocet pixlu mezi ploskami}
if not DoY then
begin
repeat
if (Height mod (maxVertex div 2)) <> 0 then
Inc(maxVertex, 2);
maxPix := Height div (maxVertex div 2);
until (Height mod (maxVertex div 2)) = 0;
{krok k nastaveni vertexu}
VStep := (FY2 - FY1) / (maxVertex div 2);
end
else
begin
repeat
if (Width mod (maxVertex div 2)) <> 0 then
Inc(maxVertex, 2);
maxPix := Width div (maxVertex div 2);
until (Width mod (maxVertex div 2)) = 0;
{krok k nastaveni vertexu}
VStep := (FX2 - FX1) / (maxVertex div 2);
end;
//prostor
{$IFDEF VER4UP}
SetLength(SVertex, maxVertex);
{$ELSE}
SVertex := AllocMem(maxVertex * SizeOf(TD3DTLVERTEX));
try
{$ENDIF}
//inicializace
VStepVx := 0;
VStepTo := 0;
D := ph / (128 / PI); {shift wave}
Z := (Len / 2) / PI; {wave length to radians}
clr := D2DVertColor(Effect, Alpha); //effect cumulate to one param and one line of code
{vlastni nastaveni vertexu v pasu vertexu}
for I := 0 to maxVertex - 1 do
begin
SVertex[I].Specular := D3DRGB(1.0, 1.0, 1.0);
SVertex[I].rhw := 1.0;
SVertex[I].color := clr;
if not DoY then
case (I + 1) mod 2 of //triangle driver
1: begin
if I <> 0 then Inc(VStepVx, maxPix);
SVertex[I].sx := X + Trunc(amp * Sin((Y + VStepVx) / Z + D)) - 0.5; //levy
SVertex[I].sy := Y + VStepVx - 0.5;
if FMirrorFlipSet = [rmfMirror] then
begin
X1 := FX2; if I <> 0 then VStepTo := VStepTo + VStep;
Y1 := FY1 + VStepTo;
end
else
if FMirrorFlipSet = [rmfFlip] then
begin
X1 := FX1;
Y1 := FY2 - VStepTo;
end
else
if FMirrorFlipSet = [rmfMirror, rmfFlip] then
begin
X1 := FX2;
Y1 := FY2 - VStepTo;
end
else
begin
X1 := FX1; if I <> 0 then VStepTo := VStepTo + VStep;
Y1 := FY1 + VStepTo;
end;
SVertex[I].tu := X1;
SVertex[I].tv := Y1;
end;
0: begin
SVertex[I].sx := X + Width + Trunc(amp * Sin((Y + VStepVx) / Z + D)) - 1; //pravy
SVertex[I].sy := Y + VStepVx;
if FMirrorFlipSet = [rmfMirror] then
begin
X2 := FX1;
Y2 := FY1 + VStepTo;
end
else
if FMirrorFlipSet = [rmfFlip] then
begin
X2 := FX2;
Y2 := FY2 - VStepTo; if I <> 0 then VStepTo := VStepTo + VStep;
end
else
if FMirrorFlipSet = [rmfMirror, rmfFlip] then
begin
X2 := FX1;
Y2 := FY2 - VStepTo; if I <> 0 then VStepTo := VStepTo + VStep;
end
else
begin
X2 := FX2;
Y2 := FY1 + VStepTo;
end;
SVertex[I].tu := X2;
SVertex[I].tv := Y2;
end;
end {case}
else
case (I + 1) mod 2 of //triangle driver
0: begin
if I <> 0 then Inc(VStepVx, maxPix);
SVertex[I].sy := Y + Trunc(amp * Sin((X + VStepVx) / Z + D)) - 0.5; //hore
SVertex[I].sx := X + VStepVx - 0.5;
if FMirrorFlipSet = [rmfMirror] then
begin
Y1 := FY1; if I <> 0 then VStepTo := VStepTo + VStep;
X1 := FX2 - VStepTo;
end
else
if FMirrorFlipSet = [rmfFlip] then
begin
Y1 := FY2; if I <> 0 then VStepTo := VStepTo + VStep;
X1 := FX1 + VStepTo;
end
else
if FMirrorFlipSet = [rmfMirror, rmfFlip] then
begin
Y1 := FY2; if I <> 0 then VStepTo := VStepTo + VStep;
X1 := FX2 - VStepTo;
end
else
begin
Y1 := FY1; if I <> 0 then VStepTo := VStepTo + VStep;
X1 := FX1 + VStepTo;
end;
SVertex[I].tu := X1;
SVertex[I].tv := Y1;
end;
1: begin
SVertex[I].sy := Y + Height + Trunc(amp * Sin((X + VStepVx) / Z + D)) - 1; //dole
SVertex[I].sx := X + VStepVx;
if FMirrorFlipSet = [rmfMirror] then
begin
Y2 := FY2;
X2 := FX2 - VStepTo;
end
else
if FMirrorFlipSet = [rmfFlip] then
begin
Y2 := FY1;
X2 := FX1 + VStepTo;
end
else
if FMirrorFlipSet = [rmfMirror, rmfFlip] then
begin
Y2 := FY1;
X2 := FX2 - VStepTo;
end
else
begin
Y2 := FY2;
X2 := FX1 + VStepTo;
end;
SVertex[I].tu := X2;
SVertex[I].tv := Y2;
end;
end;
end;
{set of effect}
case Effect of
rtDraw: D2DEffectSolid;
rtBlend: D2DEffectBlend;
rtAdd: D2DEffectAdd;
rtSub: D2DEffectSub;
end;
with FDDraw.D3DDevice7 do
begin
{kreslime hned zde}//render now and here
Result := DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX, SVertex[0], maxVertex, D3DDP_WAIT) = DD_OK;
//zpet hodnoty
//FIX InitVertex;
FMirrorFlipSet := []; {only for one operation, back to normal position}
{restore device status}
RenderError := SetTextureStageState(1, D3DTSS_COLOROP, Ord(D3DTOP_DISABLE)) <> DD_OK;
RenderError := SetTextureStageState(1, D3DTSS_ALPHAOP, Ord(D3DTOP_DISABLE)) <> DD_OK;
RenderError := SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0) <> DD_OK;
end;
{$IFNDEF VER4UP}
finally
FreeMem(SVertex, maxVertex * SizeOf(TD3DTLVERTEX));
end;
{$ENDIF}
end;
 
function TD2D.D2DRenderWaveX(Image: TPictureCollectionItem; X, Y, Width,
Height, PatternIndex: Integer; RenderType: TRenderType; transparent: Boolean;
amp, Len, ph, Alpha: Integer): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{load textures and map, do make wave mesh and render it}
Result := D2DMeshMapToWave(Image.PatternSurfaces[PatternIndex], transparent,
Image.FTransparentColor, X, Y, Width, Height, PatternIndex,
Image.PatternRects[PatternIndex],
amp, Len, ph, Alpha, RenderType{$IFNDEF VER4UP}, False{$ENDIF});
end;
 
function TD2D.D2DRenderWaveXDDS(Source: TDirectDrawSurface; X, Y, Width,
Height: Integer; RenderType: TRenderType; Transparent: Boolean; Amp, Len, Ph, Alpha: Integer): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{load textures and map, do make wave mesh and render it}
Result := D2DMeshMapToWave(Source, transparent, -1, X, Y, Width, Height, -1,
ZeroRect,
amp, Len, ph, Alpha, RenderType{$IFNDEF VER4UP}, False{$ENDIF});
end;
 
function TD2D.D2DRenderWaveY(Image: TPictureCollectionItem; X, Y, Width,
Height, PatternIndex: Integer; RenderType: TRenderType; Transparent: Boolean;
Amp, Len, Ph, Alpha: Integer): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{load textures and map, do make wave mesh and render it}
Result := D2DMeshMapToWave(Image.PatternSurfaces[PatternIndex], transparent,
Image.FTransparentColor, X, Y, Width, Height, PatternIndex,
Image.PatternRects[PatternIndex],
amp, Len, ph, Alpha, RenderType, True);
end;
 
function TD2D.D2DRenderWaveYDDS(Source: TDirectDrawSurface; X, Y, Width,
Height: Integer; RenderType: TRenderType; Transparent: Boolean;
Amp, Len, Ph, Alpha: Integer): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{load textures and map, do make wave mesh and render it}
Result := D2DMeshMapToWave(Source, transparent, -1, X, Y, Width, Height, -1,
ZeroRect,
amp, Len, ph, Alpha, RenderType, True);
end;
 
function TD2D.D2DTexturedOnRect(Rect: TRect; Color: LongInt): Boolean;
var I: Integer;
begin
Result := False;
FDDraw.D3DDevice7.SetTexture(0, nil);
if not FD2DTexture.{$IFDEF VER4UP}CanFindTexture{$ELSE}CanFindTexture3{$ENDIF}(Color) then {when no texture in list try load it}
if not FD2DTexture.{$IFDEF VER4UP}LoadTextures{$ELSE}LoadTextures4{$ENDIF}(Color) then Exit; {on error occurr go out}
I := FD2DTexture.Find('$' + IntToStr(Color)); //simply .. but stupid
if I = -1 then Exit;
{set pattern as texture}
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MAGFILTER, DWord(Ord(FD2DTextureFilter)+1));
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MINFILTER, DWord(Ord(FD2DTextureFilter)+1));
try
RenderError := FDDraw.D3DDevice7.SetTexture(0, FD2DTexture.Texture[I].D2DTexture.Surface.IDDSurface7) <> DD_OK;
except
RenderError := True;
FD2DTexture.D2DPruneAllTextures;
exit;
end;
{set transparent part}
FDDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, 0); //no transparency
 
D2DTU(FD2DTexture.Texture[I]);
Result := not RenderError;
end;
 
function TD2D.D2DTexturedOnSubRect(Image: TPictureCollectionItem;
Pattern: Integer; SubPatternRect, SubRect: TRect; RenderType: TRenderType;
Alpha: Byte): Boolean;
label
lblHop;
var
I, W, H: Integer;
SrcX, SrcY, diffX: Double;
R, tmpSubRect: TRect;
Q: TTextureRec;
qFloatX1, qFloatX2, qFloatY1, qFloatY2: Double;
begin
Result := False;
FDDraw.D3DDevice7.SetTexture(0, nil);
if not FD2DTexture.CanFindTexture(Image) then {when no texture in list try load it}
if not FD2DTexture.LoadTextures(Image) then {loading is here}
Exit; {on error occurr out}
I := FD2DTexture.Find(Image.Name);
if I = -1 then Exit;
{set pattern as texture}
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MAGFILTER, DWord(Ord(FD2DTextureFilter)+1));
// FDDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_MINFILTER, DWord(Ord(FD2DTextureFilter)+1));
try
FDDraw.D3DDevice7.SetTexture(0, FD2DTexture.Texture[I].D2DTexture.Surface.IDDSurface7);
case RenderType of
rtDraw: begin D2DEffectSolid; D2DWhite; end;
rtBlend: begin D2DEffectBlend; D2DAlphaVertex(Alpha); end;
rtAdd: begin D2DEffectAdd; D2DFade(Alpha); end;
rtSub: begin D2DEffectSub; D2DFade(Alpha); end;
end;
except
RenderError := true;
FD2DTexture.D2DPruneAllTextures;
Image.Restore;
SetD2DTextureFilter(D2D_LINEAR);
Exit;
end;
{set transparent part}
FDDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, Ord(FD2DTexture.Texture[I].D2DTexture.Transparent));
{except for Draw when alphachannel exists}
{change for blend drawing but save transparent area still}
if FD2DTexture.Texture[I].AlphaChannel then
{when is Draw selected then}
if RenderType = rtDraw then
begin
D2DEffectBlend; D2DAlphaVertex($FF);
end;
{pokud je obrazek rozdeleny, nastav oka site}
if (Image.PatternHeight <> 0) or (Image.PatternWidth <> 0) then
begin
{vezmi rect jenom dilku}
R := Image.PatternRects[Pattern];
 
if not CompareMem(@SubRect, @ZeroRect, SizeOf(SubRect)) then
begin
{ktere oko site to je?}
W := SubRect.Right - SubRect.Left; {takhle je siroky}
H := SubRect.Bottom - SubRect.Top; {takhle je vysoky}
tmpSubRect := Bounds(R.Left + SubRect.Left, R.Top + SubRect.Top, W, H);
if RectInRect(tmpSubRect, R) then
begin
{pokud je subrect jeste v ramci patternu, musi se posouvat podle patternindex}
Inc(R.Left, SubRect.Left);
Inc(R.Top, SubRect.Top);
if (R.Left + W) < R.Right then R.Right := R.Left + W;
if (R.Top + H) < R.Bottom then R.Bottom := R.Top + H;
goto lblHop;
end;
end;
SrcX := 1 / FD2DTexture.Texture[I].Width;
SrcY := 1 / FD2DTexture.Texture[I].Height;
//namapovani vertexu na texturu
FD2DTexture.Texture[I].FloatX1 := SrcX * R.Left;
FD2DTexture.Texture[I].FloatY1 := SrcY * R.Top;
{for meshed subimage contain one image only can be problem there}
diffX := 0.5; if Image.PatternCount = 1 then diffX := 0;
FD2DTexture.Texture[I].FloatX2 := SrcX * (R.Right - diffX);
FD2DTexture.Texture[I].FloatY2 := SrcY * (R.Bottom - diffX);
if not (
(SubPatternRect.Left = Image.PatternRects[Pattern].Left) and
(SubPatternRect.Top = Image.PatternRects[Pattern].Top) and
(SubPatternRect.Right = Image.PatternRects[Pattern].Right) and
(SubPatternRect.Bottom = Image.PatternRects[Pattern].Bottom))
then
begin
{remaping subtexture via subpattern}
Q.FloatX1 := SrcX * SubPatternRect.Left;
Q.FloatY1 := SrcY * SubPatternRect.Top;
Q.FloatX2 := SrcX * (SubPatternRect.Right - diffX);
Q.FloatY2 := SrcY * (SubPatternRect.Bottom - diffX);
D2DTU(Q); {with mirroring/flipping}
Result := True;
Exit;
end;
end; {jinak celeho obrazku}
 
if not CompareMem(@SubRect, @ZeroRect, SizeOf(SubRect)) then
if RectInRect(SubRect, Bounds(0,0, FD2DTexture.Texture[I].Width, FD2DTexture.Texture[I].Height)) then
begin
R := SubRect;
lblHop:
SrcX := 1 / FD2DTexture.Texture[I].Width;
SrcY := 1 / FD2DTexture.Texture[I].Height;
//namapovani vertexu na texturu
qFloatX1 := FD2DTexture.Texture[I].FloatX1;
qFloatY1 := FD2DTexture.Texture[I].FloatY1;
qFloatX2 := FD2DTexture.Texture[I].FloatX2;
qFloatY2 := FD2DTexture.Texture[I].FloatY2;
try
FD2DTexture.Texture[I].FloatX1 := SrcX * R.Left;
FD2DTexture.Texture[I].FloatY1 := SrcY * R.Top;
{for meshed subimage contain one image only can be problem there}
diffX := 0.5; if Image.PatternCount = 1 then diffX := 0;
FD2DTexture.Texture[I].FloatX2 := SrcX * (R.Right - diffX);
FD2DTexture.Texture[I].FloatY2 := SrcY * (R.Bottom - diffX);
{remaping subtexture via subpattern}
D2DTU(FD2DTexture.Texture[I]); {with mirroring/flipping}
Result := True;
Exit;
finally
FD2DTexture.Texture[I].FloatX1 := qFloatX1;
FD2DTexture.Texture[I].FloatY1 := qFloatY1;
FD2DTexture.Texture[I].FloatX2 := qFloatX2;
FD2DTexture.Texture[I].FloatY2 := qFloatY2;
end;
end;
 
{ X1,Y1 X2,Y1
0 +-----------------+ 1
| |
| |
| |
| |
2 +-----------------+ 3
X1,Y2 X2,Y2 }
D2DTU(FD2DTexture.Texture[I]);
Result := True;
end;
 
function TD2D.D2DRenderColoredPartition(Image: TPictureCollectionItem;
DestRect: TRect;
PatternIndex, Color, Specular: Integer;
Faded: Boolean;
SourceRect: TRect;
RenderType: TRenderType;
Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{set of effect before fade}
case RenderType of
rtDraw: D2DEffectSolid;
rtBlend: D2DEffectBlend;
rtAdd: D2DEffectAdd;
rtSub: D2DEffectSub;
end;
if Faded then D2DFade(Alpha);
 
D2DColoredVertex(Color);
if Specular <> Round(D3DRGB(1.0, 1.0, 1.0)) then
D2DSpecularVertex(Specular);
{load textures and map it}
if D2DTexturedOn(Image, PatternIndex, SourceRect, RenderType, Alpha) then
begin
D2DRect(DestRect);
{render it}
Result := RenderQuad;
end;
end;
 
function TD2D.D2DRenderFillRect(Rect: TRect; RGBColor: LongInt;
RenderType: TRenderType; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
case RenderType of
rtDraw: begin D2DEffectSolid; D2DColoredVertex(RGBColor); end;
rtBlend: begin D2DEffectBlend; D2DAlphaVertex(Alpha); end;
rtAdd: begin D2DEffectAdd; D2DFade(Alpha); end;
rtSub: begin D2DEffectSub; D2DFade(Alpha); end;
end;
if D2DTexturedOnRect(Rect, RGBColor) then
begin
D2DRect(Rect);
Result := RenderQuad;
end;
end;
 
function TD2D.D2DRenderRotateModeCol(Image: TPictureCollectionItem;
RenderType: TRenderType;
RotX, RotY, PictWidth, PictHeight, PatternIndex: Integer; CenterX,
CenterY: Double; Angle: single; Color: Integer; Alpha: Byte): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{set of effect before colored}
case RenderType of
rtDraw: D2DEffectSolid;
rtAdd: D2DEffectAdd;
rtSub: D2DEffectSub;
rtBlend: D2DEffectBlend;
end;
D2DFadeColored(Color, Alpha);
{load textures and map it}
if D2DTexturedOn(Image, PatternIndex, Image.PatternRects[PatternIndex], RenderType, Alpha) then
begin
{do rotate mesh}
D2DRotate(RotX, RotY, PictWidth, PictHeight, CenterX, CenterY, Angle);
{render it}
Result := RenderQuad;
end;
end;
 
function TD2D.D2DRenderRotateModeColDDS(Image: TDirectDrawSurface;
RotX, RotY, PictWidth, PictHeight: Integer; RenderType: TRenderType;
CenterX, CenterY: Double; Angle: Single; Color: Integer; Alpha: Byte;
Transparent: Boolean): Boolean;
begin
Result := False; if not CanUseD2D then Exit;
{set of effect}
D2DFadeColored(Color, Alpha);
{load textures and map it}
if D2DTexturedOnDDS(Image, ZeroRect, Transparent, RenderType, Alpha) then
begin
{do rotate mesh}
D2DRotate(RotX, RotY, PictWidth, PictHeight, CenterX, CenterY, Angle);
{render it}
Result := RenderQuad;
end;
end;
 
procedure TD2D.D2DEffectSolid;
begin
with FDDraw.D3DDevice7 do
begin
SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0);
//SetRenderState(D3DRENDERSTATE_FILLMODE, Integer(D3DFILL_SOLID));
SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, Integer(True));
SetRenderState(D3DRENDERSTATE_SRCBLEND, Integer(D3DBLEND_ONE));
end;
end;
 
procedure TD2D.D2DEffectBlend;
begin
with FDDraw.D3DDevice7 do
begin
SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1);
SetRenderState(D3DRENDERSTATE_SRCBLEND, Integer(D3DBLEND_SRCALPHA));
SetRenderState(D3DRENDERSTATE_DESTBLEND, Integer(D3DBLEND_INVSRCALPHA));
 
SetTextureStageState(0, D3DTSS_COLOROP, Integer(D3DTOP_MODULATE));
SetTextureStageState(0, D3DTSS_COLORARG1, Integer(D3DTA_TEXTURE));
SetTextureStageState(0, D3DTSS_COLORARG2, Integer(D3DTA_CURRENT));
 
SetTextureStageState(0, D3DTSS_ALPHAOP, Integer(D3DTOP_BLENDDIFFUSEALPHA));
SetTextureStageState(0, D3DTSS_ALPHAARG1, Integer(D3DTA_TEXTURE));
SetTextureStageState(0, D3DTSS_ALPHAARG2, Integer(D3DTA_CURRENT));
 
SetTextureStageState(0, D3DTSS_ALPHAOP, Integer(D3DTOP_MODULATE));
end;
end;
 
procedure TD2D.D2DEffectAdd;
begin
with FDDraw.D3DDevice7 do
begin
SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1);
SetRenderState(D3DRENDERSTATE_SRCBLEND, Integer(D3DBLEND_ONE));
SetRenderState(D3DRENDERSTATE_DESTBLEND, Integer(D3DBLEND_ONE));
SetTextureStageState(0, D3DTSS_ALPHAOP, Ord(D3DTOP_SELECTARG1));
SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_CURRENT);
SetTextureStageState(0, D3DTSS_ALPHAOP, Integer(D3DTOP_MODULATE));
end;
end;
 
procedure TD2D.D2DEffectSub;
begin
with FDDraw.D3DDevice7 do
begin
SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1);
SetRenderState(D3DRENDERSTATE_SRCBLEND, Integer(D3DBLEND_ZERO));
SetRenderState(D3DRENDERSTATE_DESTBLEND, Integer(D3DBLEND_INVSRCCOLOR));
SetTextureStageState(0, D3DTSS_ALPHAOP, Ord(D3DTOP_SELECTARG1));
SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_CURRENT);
SetTextureStageState(0, D3DTSS_ALPHAOP, Integer(D3DTOP_MODULATE));
end;
end;
 
function TD2D.D2DAlphaVertex(Alpha: Integer): Integer;
begin
Result := RGBA_MAKE($FF, $FF, $FF, Alpha);
FVertex[0].Color := Result;
FVertex[1].Color := Result;
FVertex[2].Color := Result;
FVertex[3].Color := Result;
end;
 
procedure TD2D.D2DColoredVertex(C: Integer);
begin
C := D3DRGB(C and $FF / 255, (C shr 8) and $FF / 255, (C shr 16) and $FF / 255);
FVertex[0].Color := C;
FVertex[1].Color := C;
FVertex[2].Color := C;
FVertex[3].Color := C;
end;
 
procedure TD2D.D2DColAlpha(C, Alpha: Integer);
begin
C := D3DRGBA(C and $FF / 255, (C shr 8) and $FF / 255, (C shr 16) and $FF / 255, Alpha / 255);
FVertex[0].Color := C;
FVertex[1].Color := C;
FVertex[2].Color := C;
FVertex[3].Color := C;
end;
 
procedure TD2D.D2DSpecularVertex(C: Integer);
begin
C := D3DRGB(C and $FF / 255, (C shr 8) and $FF / 255, (C shr 16) and $FF / 255);
FVertex[0].Specular := C;
FVertex[1].Specular := C;
FVertex[2].Specular := C;
FVertex[3].Specular := C;
end;
 
procedure TD2D.D2DCol4Alpha(C1, C2, C3, C4, Alpha: Integer);
begin
FVertex[0].Color := D3DRGBA(C1 and $FF / 255, (C1 shr 8) and $FF / 255,
(C1 shr 16) and $FF / 255, Alpha / 255);
FVertex[1].Color := D3DRGBA(C2 and $FF / 255, (C2 shr 8) and $FF / 255,
(C2 shr 16) and $FF / 255, Alpha / 255);
FVertex[2].Color := D3DRGBA(C3 and $FF / 255, (C3 shr 8) and $FF / 255,
(C3 shr 16) and $FF / 255, Alpha / 255);
FVertex[3].Color := D3DRGBA(C4 and $FF / 255, (C4 shr 8) and $FF / 255,
(C4 shr 16) and $FF / 255, Alpha / 255);
end;
 
function TD2D.D2DVertColor(RenderType: TRenderType; Alpha: Byte): DWORD;
begin
case RenderType of //effect cumulate to one param and four line of code
rtDraw: Result := RGB_MAKE($FF, $FF, $FF);
rtBlend: Result := RGBA_MAKE($FF, $FF, $FF, Alpha);
rtAdd: Result := RGB_MAKE(Alpha, Alpha, Alpha);
rtSub: Result := RGB_MAKE(Alpha, Alpha, Alpha);
else
Result := RGB_MAKE($FF, $FF, $FF);
end;
end;
 
function TD2D.D2DWhite: Integer;
begin
Result := RGB_MAKE($FF, $FF, $FF);
FVertex[0].Color := Result;
FVertex[1].Color := Result;
FVertex[2].Color := Result;
FVertex[3].Color := Result;
end;
 
function TD2D.D2DFade(Alpha: Integer): Integer;
begin
Result := RGB_MAKE(Alpha, Alpha, Alpha);
FVertex[0].Color := Result;
FVertex[1].Color := Result;
FVertex[2].Color := Result;
FVertex[3].Color := Result;
end;
 
procedure TD2D.D2DFadeColored(C, Alpha: Integer);
var mult: single;
begin
mult := Alpha / 65025; //Alpha/255/255;
C := D3DRGB((C and $FF) * mult, ((C shr 8) and $FF) * mult, ((C shr 16) and $FF) * mult);
FVertex[0].Color := C;
FVertex[1].Color := C;
FVertex[2].Color := C;
FVertex[3].Color := C;
end;
 
procedure TD2D.D2DFade4Colored(C1, C2, C3, C4, Alpha: Integer);
var mult: single;
begin
mult := Alpha / 65025; //Alpha/255/255;
FVertex[0].Color := D3DRGB((C1 and $FF) * mult, ((C1 shr 8) and $FF) * mult,
((C1 shr 16) and $FF) * mult);
FVertex[1].Color := D3DRGB((C2 and $FF) * mult, ((C2 shr 8) and $FF) * mult,
((C2 shr 16) and $FF) * mult);
FVertex[2].Color := D3DRGB((C3 and $FF) * mult, ((C3 shr 8) and $FF) * mult,
((C3 shr 16) and $FF) * mult);
FVertex[3].Color := D3DRGB((C4 and $FF) * mult, ((C4 shr 8) and $FF) * mult,
((C4 shr 16) and $FF) * mult);
end;
 
function TD2D.RenderQuad: Boolean;
begin
Result := FDDraw.D3DDevice7.DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX, FVertex, 4, D3DDP_WAIT) <> DD_OK;
InitVertex;
FMirrorFlipSet := []; {only for one operation, back to normal position}
{restore device status}
with FDDraw.D3DDevice7 do
begin
SetTextureStageState(1, D3DTSS_COLOROP, Ord(D3DTOP_DISABLE));
SetTextureStageState(1, D3DTSS_ALPHAOP, Ord(D3DTOP_DISABLE));
SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0);
end;
end;
 
function TD2D.RenderTri: Boolean;
begin
Result := FDDraw.D3DDevice7.DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX, FVertex, 3, D3DDP_WAIT) <> DD_OK;
InitVertex;
FMirrorFlipSet := []; {only for one operation, back to normal position}
{restore device status}
with FDDraw.D3DDevice7 do
begin
SetTextureStageState(1, D3DTSS_COLOROP, Ord(D3DTOP_DISABLE));
SetTextureStageState(1, D3DTSS_ALPHAOP, Ord(D3DTOP_DISABLE));
SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0);
end;
end;
 
procedure TD2D.D2DMeshMapToRect(R: TRect);
begin
FVertex[0].sx := R.Left - 0.5;
FVertex[0].sy := R.Top - 0.5;
FVertex[1].sx := R.Right - 0.5;
FVertex[1].sy := R.Top - 0.5;
FVertex[2].sx := R.Left - 0.5;
FVertex[2].sy := R.Bottom - 0.5;
FVertex[3].sx := R.Right - 0.5;
FVertex[3].sy := R.Bottom - 0.5;
end;
 
function TD2D.D2DInitializeSurface: Boolean;
begin
Result := False;
if Assigned(FDDraw.D3DDevice7) then
Result := FDDraw.D3DDevice7.SetRenderTarget(FDDraw.Surface.IDDSurface7, 0) = DD_OK;
end;
 
procedure TD2D.D2DUpdateTextures;
var I: Integer;
begin
{$IFDEF VER4UP}
for I := Low(FD2DTexture.Texture) to High(FD2DTexture.Texture) do
{$ELSE}
for I := 0 to FD2DTexture.TexLen - 1 do
{$ENDIF}
begin
FD2DTexture.Texture[I].Width := FD2DTexture.Texture[I].D2DTexture.Surface.Width;
FD2DTexture.Texture[I].Height := FD2DTexture.Texture[I].D2DTexture.Surface.Height;
// FD2DTexture.Texture[I].AlphaChannel := ?
end;
end;
 
{ TTrace }
 
constructor TTrace.Create(Collection: TCollection);
begin
inherited Create(Collection);
FBlit := TBlit.Create(Self);
FBlit.FEngine := TCustomDXDraw(Traces.FOwner);
end;
 
destructor TTrace.Destroy;
begin
FBlit.Free;
inherited Destroy;
end;
 
function TTrace.GetDisplayName: string;
begin
Result := inherited GetDisplayName
end;
 
procedure TTrace.SetDisplayName(const Value: string);
begin
if (Value <> '') and (AnsiCompareText(Value, GetDisplayName) <> 0) and
(Collection is TTraces) and (TTraces(Collection).IndexOf(Value) >= 0) then
raise Exception.Create(Format('Item duplicate name "%s" error', [Value]));
inherited SetDisplayName(Value);
end;
 
function TTrace.GetTraces: TTraces;
begin
if Collection is TTraces then
Result := TTraces(Collection)
else
Result := nil;
end;
 
procedure TTrace.Render(const LagCount: Integer);
begin
FBlit.DoMove(LagCount);
FBlit.DoCollision;
FBlit.DoDraw;
if Assigned(FBlit.FOnRender) then
FBlit.FOnRender(FBlit);
end;
 
function TTrace.IsActualized: Boolean;
begin
Result := FActualized;
end;
 
procedure TTrace.Assign(Source: TPersistent);
begin
if Source is TTrace then begin
//FTracePoints.Assign(TTrace(Source).FTracePoints);
FBlit.Assign(TTrace(Source).FBlit);
FTag := TTrace(Source).FTag;
end
else
inherited Assign(Source);
end;
 
function TTrace.GetActive: Boolean;
begin
Result := FBlit.FActive;
end;
 
procedure TTrace.SetActive(const Value: Boolean);
begin
FBlit.FActive := Value;
end;
 
function TTrace.GetOnCollision: TNotifyEvent;
begin
Result := FBlit.FOnCollision;
end;
 
procedure TTrace.SetOnCollision(const Value: TNotifyEvent);
begin
FBlit.FOnCollision := Value;
end;
 
function TTrace.GetOnGetImage: TNotifyEvent;
begin
Result := FBlit.FOnGetImage;
end;
 
procedure TTrace.SetOnGetImage(const Value: TNotifyEvent);
begin
FBlit.FOnGetImage := Value;
end;
 
function TTrace.GetOnDraw: TNotifyEvent;
begin
Result := FBlit.FOnDraw;
end;
 
procedure TTrace.SetOnDraw(const Value: TNotifyEvent);
begin
FBlit.FOnDraw := Value;
end;
 
function TTrace.GetOnMove: TBlitMoveEvent;
begin
Result := FBlit.FOnMove;
end;
 
procedure TTrace.SetOnMove(const Value: TBlitMoveEvent);
begin
FBlit.FOnMove := Value;
end;
 
function TTrace.Clone(NewName: string; OffsetX, OffsetY: Integer;
Angle: Single): TTrace;
var
NewItem: TTrace;
I: Integer;
begin
NewItem := GetTraces.Add;
NewItem.Assign(Self);
NewItem.Name := NewName;
for I := 0 to NewItem.Blit.GetPathCount - 1 do begin
NewItem.Blit.FPathArr[I].X := NewItem.Blit.FPathArr[I].X + OffsetX;
NewItem.Blit.FPathArr[I].Y := NewItem.Blit.FPathArr[I].Y + OffsetY;
end;
Result := NewItem
end;
 
function TTrace.GetOnRender: TOnRender;
begin
Result := FBlit.FOnRender;
end;
 
procedure TTrace.SetOnRender(const Value: TOnRender);
begin
FBlit.FOnRender := Value;
end;
 
{ TTraces }
 
constructor TTraces.Create(AOwner: TComponent);
begin
inherited Create(TTrace);
FOwner := AOwner;
end;
 
destructor TTraces.Destroy;
begin
inherited Destroy;
end;
 
function TTraces.Add: TTrace;
begin
Result := TTrace(inherited Add);
end;
 
function TTraces.Find(const Name: string): TTrace;
var
i: Integer;
begin
i := IndexOf(Name);
if i = -1 then
raise EDXTracerError.CreateFmt('Tracer item named %s not found', [Name]);
Result := Items[i];
end;
 
function TTraces.GetItem(Index: Integer): TTrace;
begin
Result := TTrace(inherited GetItem(Index));
end;
 
procedure TTraces.SetItem(Index: Integer;
Value: TTrace);
begin
inherited SetItem(Index, Value);
end;
 
procedure TTraces.Update(Item: TCollectionItem);
begin
inherited Update(Item);
end;
 
{$IFDEF VER4UP}
function TTraces.Insert(Index: Integer): TTrace;
begin
Result := TTrace(inherited Insert(Index));
end;
{$ENDIF}
 
function TTraces.GetOwner: TPersistent;
begin
Result := FOwner;
end;
 
{ TBlit }
 
function TBlit.GetWorldX: Double;
begin
if Parent <> nil then
Result := Parent.WorldX + FBlitRec.FX
else
Result := FBlitRec.FX;
end;
 
function TBlit.GetWorldY: Double;
begin
if Parent <> nil then
Result := Parent.WorldY + FBlitRec.FY
else
Result := FBlitRec.FY;
end;
 
procedure TBlit.DoMove(LagCount: Integer);
var
MoveIt: Boolean;
begin
if not FBlitRec.FMoved then Exit;
if AsSigned(FOnMove) then begin
MoveIt := True; {if nothing then reanimate will force}
FOnMove(Self, LagCount, MoveIt); {when returned MoveIt = true still that do not move}
if MoveIt then
ReAnimate(LagCount); //for reanimation
end
else begin
ReAnimate(LagCount);
end;
{there is moving to next foot of the path}
if Active then
if GetPathCount > 0 then begin
Dec(FCurrentTime, LagCount);
if FCurrentTime < 0 then begin
if FBustrofedon then begin
case FCurrentDirection of
True: begin
Inc(FCurrentPosition); //go forward
if FCurrentPosition = (GetPathCount - 1) then
FCurrentDirection := not FCurrentDirection //change direction
end;
False: begin
Dec(FCurrentPosition); //go backward
if FCurrentPosition = 0 then
FCurrentDirection := not FCurrentDirection //change direction
end;
end;
end
else
if FCurrentPosition < (GetPathCount - 1) then begin
Inc(FCurrentPosition) //go forward only
end
else
if FMovingRepeatly then
FCurrentPosition := 0; {return to start}
{get actual new value for showing time}
{must be pick-up there, after change of the current position}
FCurrentTime := Path[FCurrentPosition].StayOn; {cas mezi pohyby}
end;
X := Path[FCurrentPosition].X;
Y := Path[FCurrentPosition].Y;
end;
{}
end;
 
function TBlit.GetDrawImageIndex: Integer;
begin
Result := FBlitRec.FAnimStart + Trunc(FBlitRec.FAnimPos);
end;
 
procedure TBlit.DoDraw;
var
f: TRenderMirrorFlipSet;
r: TRect;
begin
with FBlitRec do begin
if not FVisible then Exit;
if FImage = nil then DoGetImage;
if FImage = nil then Exit;
{owner draw called here}
if AsSigned(FOnDraw) then
FOnDraw(Self)
else
{when is not owner draw then go here}
begin
f := [];
if FMirror then f := f + [rmfMirror];
if FFlip then f := f + [rmfFlip];
r := Bounds(Round(FX), Round(FY), FImage.Width, FImage.Height);
DXDraw_Render(FEngine, FImage, r,
GetDrawImageIndex, FBlurImageArr, FBlurImage, FTextureFilter, f, FBlendMode, FAngle,
FAlpha, FCenterX, FCenterY, FScale, FWaveType, FAmplitude, FAmpLength, FPhase);
end;
end
end;
 
function Mod2f(i: Double; i2: Integer): Double;
begin
if i2 = 0 then
Result := i
else
begin
Result := i - Round(i / i2) * i2;
if Result < 0 then
Result := i2 + Result;
end;
end;
 
procedure TBlit.ReAnimate(MoveCount: Integer);
var I: Integer;
begin
with FBlitRec do begin
FAnimPos := FAnimPos + FAnimSpeed * MoveCount;
 
if FAnimLooped then
begin
if FAnimCount > 0 then
FAnimPos := Mod2f(FAnimPos, FAnimCount)
else
FAnimPos := 0;
end
else
begin
if Round(FAnimPos) >= FAnimCount then
begin
FAnimPos := FAnimCount - 1;
FAnimSpeed := 0;
end;
if FAnimPos < 0 then
begin
FAnimPos := 0;
FAnimSpeed := 0;
end;
end;
{incerease or decrease speed}
if (FEnergy <> 0) then begin
FSpeedX := FSpeedX + FSpeedX * FEnergy;
FSpeedY := FSpeedY + FSpeedY * FEnergy;
end;
{adjust with speed}
if (FSpeedX > 0) or (FSpeedY > 0) then begin
FX := FX + FSpeedX * MoveCount;
FY := FY + FSpeedY * MoveCount;
end;
{and gravity aplicable}
if (FGravityX > 0) or (FGravityY > 0) then begin
FX := FX + FGravityX * MoveCount;
FY := FY + FGravityY * MoveCount;
end;
if FBlurImage then begin
{ale jen jsou-li jine souradnice}
if (FBlurImageArr[High(FBlurImageArr)].eX <> Round(WorldX)) or
(FBlurImageArr[High(FBlurImageArr)].eY <> Round(WorldY)) then begin
for i := Low(FBlurImageArr) + 1 to High(FBlurImageArr) do begin
FBlurImageArr[i - 1] := FBlurImageArr[i];
{adjust the blur intensity}
FBlurImageArr[i - 1].eIntensity := Round(FAlpha / (High(FBlurImageArr) + 1)) * (i - 1);
end;
with FBlurImageArr[High(FBlurImageArr)] do begin
eX := Round(WorldX);
eY := Round(WorldY);
ePatternIndex := GetDrawImageIndex;
eIntensity := Round(FAlpha / (High(FBlurImageArr) + 1)) * High(FBlurImageArr);
eBlendMode := FBlendMode;
eActive := True;
end;
end;
end;
end;
end;
 
function TBlit.DoCollision: TBlit;
var
i, maxzaxis: Integer;
begin
Result := nil;
if not FBlitRec.FCollisioned then Exit;
if AsSigned(FOnCollision) then
FOnCollision(Self)
else begin
{over z axis}
maxzaxis := 0;
for i := 0 to FEngine.Traces.Count - 1 do
maxzaxis := Max(maxzaxis, FEngine.Traces.Items[i].FBlit.Z);
{for all items}
for i := 0 to FEngine.Traces.Count - 1 do
{no self item}
if FEngine.Traces.Items[i].FBlit <> Self then
{through engine}
with FEngine.Traces.Items[i] do
{test overlap}
if OverlapRect(Bounds(Round(FBlit.WorldX), Round(FBlit.WorldY),
FBlit.Width, FBlit.Height), Bounds(Round(WorldX), Round(WorldY), Width, Height)) then
begin
{if any, then return first blit}
Result := FBlit;
{and go out}
Break;
end;
end;
end;
 
procedure TBlit.DoGetImage;
begin
{init image when object come from form}
if FImage = nil then
if AsSigned(FOnGetImage) then begin
FOnGetImage(Self);
if FImage = nil then
raise EDXBlitError.Create('Undefined image file!');
FBlitRec.FWidth := FImage.Width;
FBlitRec.FHeight := FImage.Height;
end;
end;
 
constructor TBlit.Create(AParent: TObject);
begin
inherited Create;
FParent := nil;
if AParent is TBlit then
FParent := TBlit(AParent);
FillChar(FBlitRec, SizeOf(FBlitRec), 0);
with FBlitRec do begin
FCollisioned := True; {can be collisioned}
FMoved := True; {can be moved}
FVisible := True; {can be rendered}
FAnimCount := 0;
FAnimLooped := False;
FAnimPos := 0;
FAnimSpeed := 0;
FAnimStart := 0;
FAngle := 0;
FAlpha := $FF;
FCenterX := 0.5;
FCenterY := 0.5;
FScale := 1;
FBlendMode := rtDraw;
FAmplitude := 0;
FAmpLength := 0;
FPhase := 0;
FWaveType := wtWaveNone;
FSpeedX := 0;
FSpeedY := 0;
FGravityX := 0;
FGravityY := 0;
FEnergy := 0;
FBlurImage := False;
FMirror := False;
FFlip := False;
end;
FillChar(FBlurImageArr, SizeOf(FBlitRec), 0);
FActive := True; {active on}
FMovingRepeatly := True;
{super private}
FCurrentTime := 0;
FCurrentPosition := 0;
FCurrentDirection := True;
end;
 
destructor TBlit.Destroy;
begin
{$IFDEF VER4UP}
SetLength(FPathArr, 0);
{$ELSE}
SetPathLen(0);
{$ENDIF}
inherited;
end;
 
function TBlit.GetMoved: Boolean;
begin
Result := FBlitRec.FMoved;
end;
 
procedure TBlit.SetMoved(const Value: Boolean);
begin
FBlitRec.FMoved := Value;
end;
 
function TBlit.GetWaveType: TWaveType;
begin
Result := FBlitRec.FWaveType;
end;
 
procedure TBlit.SetWaveType(const Value: TWaveType);
begin
FBlitRec.FWaveType := Value;
end;
 
function TBlit.GetAmplitude: Integer;
begin
Result := FBlitRec.FAmplitude;
end;
 
procedure TBlit.SetAmplitude(const Value: Integer);
begin
FBlitRec.FAmplitude := Value;
end;
 
function TBlit.GetAnimStart: Integer;
begin
Result := FBlitRec.FAnimStart;
end;
 
procedure TBlit.SetAnimStart(const Value: Integer);
begin
FBlitRec.FAnimStart := Value;
end;
 
function TBlit.GetAmpLength: Integer;
begin
Result := FBlitRec.FAmpLength;
end;
 
procedure TBlit.SetAmpLength(const Value: Integer);
begin
FBlitRec.FAmpLength := Value;
end;
 
function TBlit.GetWidth: Integer;
begin
Result := FBlitRec.FWidth;
end;
 
procedure TBlit.SetWidth(const Value: Integer);
begin
FBlitRec.FWidth := Value;
end;
 
function TBlit.GetGravityX: Single;
begin
Result := FBlitRec.FGravityX;
end;
 
procedure TBlit.SetGravityX(const Value: Single);
begin
FBlitRec.FGravityX := Value;
end;
 
function TBlit.StoreGravityX: Boolean;
begin
Result := FBlitRec.FGravityX <> 1.0;
end;
 
function TBlit.GetPhase: Integer;
begin
Result := FBlitRec.FPhase;
end;
 
procedure TBlit.SetPhase(const Value: Integer);
begin
FBlitRec.FPhase := Value;
end;
 
function TBlit.GetAnimPos: Double;
begin
Result := FBlitRec.FAnimPos;
end;
 
procedure TBlit.SetAnimPos(const Value: Double);
begin
FBlitRec.FAnimPos := Value;
end;
 
function TBlit.StoreAnimPos: Boolean;
begin
Result := FBlitRec.FAnimPos <> 0;
end;
 
function TBlit.GetFlip: Boolean;
begin
Result := FBlitRec.FFlip;
end;
 
procedure TBlit.SetFlip(const Value: Boolean);
begin
FBlitRec.FFlip := Value;
end;
 
function TBlit.GetGravityY: Single;
begin
Result := FBlitRec.FGravityY;
end;
 
procedure TBlit.SetGravityY(const Value: Single);
begin
FBlitRec.FGravityY := Value;
end;
 
function TBlit.StoreGravityY: Boolean;
begin
Result := FBlitRec.FGravityY <> 1.0;
end;
 
function TBlit.GetSpeedX: Single;
begin
Result := FBlitRec.FSpeedX;
end;
 
procedure TBlit.SetSpeedX(const Value: Single);
begin
FBlitRec.FSpeedX := Value;
end;
 
function TBlit.StoreSpeedX: Boolean;
begin
Result := FBlitRec.FSpeedX <> 0;
end;
 
function TBlit.GetSpeedY: Single;
begin
Result := FBlitRec.FSpeedY;
end;
 
procedure TBlit.SetSpeedY(const Value: Single);
begin
FBlitRec.FSpeedY := Value;
end;
 
function TBlit.StoreSpeedY: Boolean;
begin
Result := FBlitRec.FSpeedY <> 0;
end;
 
function TBlit.GetCenterX: Double;
begin
Result := FBlitRec.FCenterX;
end;
 
procedure TBlit.SetCenterX(const Value: Double);
begin
FBlitRec.FCenterX := Value;
end;
 
function TBlit.StoreCenterX: Boolean;
begin
Result := FBlitRec.FCenterX <> 0.5;
end;
 
function TBlit.GetAngle: Single;
begin
Result := FBlitRec.FAngle;
end;
 
procedure TBlit.SetAngle(const Value: Single);
begin
FBlitRec.FAngle := Value;
end;
 
function TBlit.StoreAngle: Boolean;
begin
Result := FBlitRec.FAngle <> 0;
end;
 
function TBlit.GetBlurImage: Boolean;
begin
Result := FBlitRec.FBlurImage;
end;
 
procedure TBlit.SetBlurImage(const Value: Boolean);
begin
FBlitRec.FBlurImage := Value;
end;
 
function TBlit.GetCenterY: Double;
begin
Result := FBlitRec.FCenterY;
end;
 
procedure TBlit.SetCenterY(const Value: Double);
begin
FBlitRec.FCenterY := Value;
end;
 
function TBlit.StoreCenterY: Boolean;
begin
Result := FBlitRec.FCenterY <> 0.5;
end;
 
function TBlit.GetBlendMode: TRenderType;
begin
Result := FBlitRec.FBlendMode;
end;
 
procedure TBlit.SetBlendMode(const Value: TRenderType);
begin
FBlitRec.FBlendMode := Value;
end;
 
function TBlit.GetAnimSpeed: Double;
begin
Result := FBlitRec.FAnimSpeed;
end;
 
procedure TBlit.SetAnimSpeed(const Value: Double);
begin
FBlitRec.FAnimSpeed := Value;
end;
 
function TBlit.StoreAnimSpeed: Boolean;
begin
Result := FBlitRec.FAnimSpeed <> 0;
end;
 
function TBlit.GetZ: Integer;
begin
Result := FBlitRec.FZ;
end;
 
procedure TBlit.SetZ(const Value: Integer);
begin
FBlitRec.FZ := Value;
end;
 
function TBlit.GetMirror: Boolean;
begin
Result := FBlitRec.FMirror;
end;
 
procedure TBlit.SetMirror(const Value: Boolean);
begin
FBlitRec.FMirror := Value;
end;
 
function TBlit.GetX: Double;
begin
Result := FBlitRec.FX;
end;
 
procedure TBlit.SetX(const Value: Double);
begin
FBlitRec.FX := Value;
end;
 
function TBlit.GetVisible: Boolean;
begin
Result := FBlitRec.FVisible;
end;
 
procedure TBlit.SetVisible(const Value: Boolean);
begin
FBlitRec.FVisible := Value;
end;
 
function TBlit.GetY: Double;
begin
Result := FBlitRec.FY;
end;
 
procedure TBlit.SetY(const Value: Double);
begin
FBlitRec.FY := Value;
end;
 
function TBlit.GetAlpha: Byte;
begin
Result := FBlitRec.FAlpha;
end;
 
procedure TBlit.SetAlpha(const Value: Byte);
begin
FBlitRec.FAlpha := Value;
end;
 
function TBlit.GetEnergy: Single;
begin
Result := FBlitRec.FEnergy;
end;
 
procedure TBlit.SetEnergy(const Value: Single);
begin
FBlitRec.FEnergy := Value;
end;
 
function TBlit.StoreEnergy: Boolean;
begin
Result := FBlitRec.FEnergy <> 0;
end;
 
function TBlit.GetCollisioned: Boolean;
begin
Result := FBlitRec.FCollisioned;
end;
 
procedure TBlit.SetCollisioned(const Value: Boolean);
begin
FBlitRec.FCollisioned := Value;
end;
 
function TBlit.GetAnimLooped: Boolean;
begin
Result := FBlitRec.FAnimLooped;
end;
 
procedure TBlit.SetAnimLooped(const Value: Boolean);
begin
FBlitRec.FAnimLooped := Value;
end;
 
function TBlit.GetHeight: Integer;
begin
Result := FBlitRec.FHeight;
end;
 
procedure TBlit.SetHeight(const Value: Integer);
begin
FBlitRec.FHeight := Value;
end;
 
function TBlit.GetScale: Double;
begin
Result := FBlitRec.FScale;
end;
 
procedure TBlit.SetScale(const Value: Double);
begin
FBlitRec.FScale := Value;
end;
 
function TBlit.StoreScale: Boolean;
begin
Result := FBlitRec.FScale <> 1.0;
end;
 
function TBlit.GetAnimCount: Integer;
begin
Result := FBlitRec.FAnimCount;
end;
 
procedure TBlit.SetAnimCount(const Value: Integer);
begin
FBlitRec.FAnimCount := Value;
end;
 
function TBlit.GetTextureFilter: TD2DTextureFilter;
begin
Result := FBlitRec.FTextureFilter;
end;
 
procedure TBlit.SetTextureFilter(const Value: TD2DTextureFilter);
begin
FBlitRec.FTextureFilter := Value;
end;
 
function TBlit.GetBoundsRect: TRect;
begin
Result := Bounds(Round(WorldX), Round(WorldY), Width, Height);
end;
 
function TBlit.GetClientRect: TRect;
begin
Result := Bounds(0, 0, Width, Height);
end;
 
function TBlit.GetBlitAt(X, Y: Integer): TBlit;
 
procedure BlitAt(X, Y: Double; Blit: TBlit);
var
i: Integer;
X2, Y2: Double;
begin
if Blit.Visible and PointInRect(Point(Round(X), Round(Y)),
Bounds(Round(Blit.X), Round(Blit.Y), Blit.Width, Blit.Width)) then
begin
if (Result = nil) or (Blit.Z > Result.Z) then
Result := Blit; {uniquelly - where will be store last blit}
end;
 
X2 := X - Blit.X;
Y2 := Y - Blit.Y;
for i := 0 to Blit.Engine.FTraces.Count - 1 do
BlitAt(X2, Y2, Blit.Engine.FTraces.Items[i].FBlit);
end;
 
var
i: Integer;
X2, Y2: Double;
begin
Result := nil;
 
X2 := X - Self.X;
Y2 := Y - Self.Y;
for i := 0 to Engine.FTraces.Count - 1 do
BlitAt(X2, Y2, Engine.FTraces.Items[i].FBlit);
end;
 
procedure TBlit.SetPathLen(Len: Integer);
var I, L: Integer;
begin
{$IFDEF VER4UP}
if Length(FPathArr) <> Len then
{$ELSE}
if FPathLen <> Len then
{$ENDIF}
begin
L := Len;
if Len <= 0 then L := 0;
{$IFDEF VER4UP}
SetLength(FPathArr, L);
for I := Low(FPathArr) to High(FPathArr) do begin
FillChar(FPathArr[i], SizeOf(FPathArr), 0);
FPathArr[i].StayOn := 25;
end;
{$ELSE}
FPathLen := L;
if FPathArr = nil then
FPAthArr := AllocMem(FPathLen * SizeOf(TPath))
else
{alokuj pamet}
ReallocMem(FPathArr, FPathLen * SizeOf(TPath));
if Assigned(FPathArr) then begin
FillChar(FPathArr^, FPathLen * SizeOf(TPath), 0);
for I := 0 to FPathLen do
FPathArr[i].StayOn := 25;
end
{$ENDIF}
end;
end;
 
function TBlit.IsPathEmpty: Boolean;
begin
{$IFNDEF VER4UP}
Result := FPathLen = 0;
{$ELSE}
Result := Length(FPathArr) = 0;
{$ENDIF}
end;
 
function TBlit.GetPathCount: Integer;
begin
{$IFNDEF VER4UP}
Result := FPathLen;
{$ELSE}
Result := Length(FPathArr);
{$ENDIF}
end;
 
function TBlit.GetPath(index: Integer): TPath;
begin
{$IFDEF VER4UP}
if (index >= Low(FPathArr)) and (index <= High(FPathArr)) then
{$ELSE}
if (index >= 0) and (index < FPathLen) then
{$ENDIF}
Result := FPathArr[index]
else
raise Exception.Create('Bad path index!');
end;
 
procedure TBlit.SetPath(index: Integer; const Value: TPath);
begin
{$IFDEF VER4UP}
if (index >= Low(FPathArr)) and (index <= High(FPathArr)) then
{$ELSE}
if (index >= 0) and (index < FPathLen) then
{$ENDIF}
FPathArr[index] := Value
else
raise Exception.Create('Bad path index!');
end;
 
procedure TBlit.ReadPaths(Stream: TStream);
var
PathLen: Integer;
begin
{nacti delku}
Stream.ReadBuffer(PathLen, SizeOf(PathLen));
SetPathLen(PathLen);
Stream.ReadBuffer(FPathArr[0], PathLen * SizeOf(TPath));
end;
 
procedure TBlit.WritePaths(Stream: TStream);
var
PathLen: Integer;
begin
PathLen := GetPathCount;
Stream.WriteBuffer(PathLen, SizeOf(PathLen));
Stream.WriteBuffer(FPathArr[0], PathLen * SizeOf(TPath));
end;
 
procedure TBlit.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineBinaryProperty('Paths', ReadPaths, WritePaths, not IsPathEmpty);
end;
 
procedure TBlit.Assign(Source: TPersistent);
var I: Integer;
begin
if Source is TBlit then
begin
{$IFDEF VER4UP}
I := Length(TBlit(Source).FPathArr);
{$ELSE}
I := FPathLen;
{$ENDIF}
SetPathLen(I);
if I > 0 then
Move(TBlit(Source).FPathArr[0], FPathArr[0], I * SizeOf(TPath));
FBlitRec := TBlit(Source).FBlitRec;
FillChar(FBlurImageArr, SizeOf(FBlurImageArr), 0);
FActive := TBlit(Source).FActive;
FMovingRepeatly := TBlit(Source).FMovingRepeatly;
FImage := nil;
FOnMove := TBlit(Source).FOnMove;
FOnDraw := TBlit(Source).FOnDraw;
FOnCollision := TBlit(Source).FOnCollision;
FOnGetImage := TBlit(Source).FOnGetImage;
FEngine := TBlit(Source).FEngine;
end
else
inherited Assign(Source);
end;
 
function TBlit.GetMovingRepeatly: Boolean;
begin
Result := FMovingRepeatly;
end;
 
procedure TBlit.SetMovingRepeatly(const Value: Boolean);
begin
FMovingRepeatly := Value;
end;
 
function TBlit.GetBustrofedon: Boolean;
begin
Result := FBustrofedon;
end;
 
procedure TBlit.SetBustrofedon(const Value: Boolean);
begin
FBustrofedon := Value;
end;
 
{ utility draw }
 
procedure DXDraw_Draw(DXDraw: TCustomDXDraw; Image: TPictureCollectionItem;
Rect: TRect; Pattern: Integer; TextureFilter: TD2DTextureFilter;
MirrorFlip: TRenderMirrorFlipSet;
BlendMode: TRenderType; Angle: Single; Alpha: Byte;
CenterX: Double; CenterY: Double;
Scale: Single); {$IFDEF VER9UP}inline;{$ENDIF}
var
// r: TRect;
width, height: Integer;
begin
if not Assigned(DXDraw.Surface) then Exit;
if not Assigned(Image) then Exit;
if Scale <> 1.0 then begin
width := Round(Scale * Image.Width);
height := Round(Scale * Image.Height);
end
else begin
width := Image.Width;
height := Image.Height;
end;
//r := Bounds(X, Y, width, height);
DXDraw.TextureFilter(TextureFilter);
DXDraw.MirrorFlip(MirrorFlip);
case BlendMode of
rtDraw: begin
if Angle = 0 then
Image.StretchDraw(DXDraw.Surface, Rect, Pattern)
else
Image.DrawRotate(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle);
end;
rtBlend: begin
if Angle = 0 then
Image.DrawAlpha(DXDraw.Surface, Rect, Pattern, Alpha)
else
Image.DrawRotateAlpha(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle, Alpha);
end;
rtAdd: begin
if Angle = 0 then
Image.DrawAdd(DXDraw.Surface, Rect, Pattern, Alpha)
else
Image.DrawRotateAdd(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle, Alpha);
end;
rtSub: begin
if Angle = 0 then
Image.DrawSub(DXDraw.Surface, Rect, Pattern, Alpha)
else
Image.DrawRotateSub(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle, Alpha);
end;
end; {case}
end;
 
procedure DXDraw_Paint(DXDraw: TCustomDXDraw; Image: TPictureCollectionItem;
Rect: TRect; Pattern: Integer; var BlurImageArr: TBlurImageArr; BlurImage: Boolean;
TextureFilter: TD2DTextureFilter;
MirrorFlip: TRenderMirrorFlipSet;
BlendMode: TRenderType;
Angle: Single;
Alpha: Byte;
CenterX: Double; CenterY: Double); {$IFDEF VER9UP}inline;{$ENDIF}
var
rr: TRect;
i, width, height: Integer;
begin
if not Assigned(DXDraw.Surface) then Exit;
if not Assigned(Image) then Exit;
width := Image.Width;
height := Image.Height;
//rr := Bounds(X, Y, width, height);
//DXDraw.MirrorFlip(MirrorFlip);
DXDraw.TextureFilter(TextureFilter);
case BlendMode of
rtDraw: begin
if BlurImage then begin
for i := Low(BlurImageArr) to High(BlurImageArr) do if BlurImageArr[i].eActive then begin
DXDraw.MirrorFlip(MirrorFlip);
rr := Bounds(BlurImageArr[i].eX, BlurImageArr[i].eY, Width, Height);
if Angle = 0 then
Image.DrawAlpha(DXDraw.Surface, rr, BlurImageArr[i].ePatternIndex, BlurImageArr[i].eIntensity)
else
Image.DrawRotateAlpha(DXDraw.Surface, (rr.Left + rr.Right) div 2,
(rr.Top + rr.Bottom) div 2,
Width, Height, BlurImageArr[i].ePatternIndex, CenterX, CenterY, BlurImageArr[i].eAngle, BlurImageArr[i].eIntensity);
if BlurImageArr[i].eIntensity > 0 then Dec(BlurImageArr[i].eIntensity) else FillChar(BlurImageArr[i], SizeOf(BlurImageArr[i]), 0);
end;
end;
DXDraw.MirrorFlip(MirrorFlip);
if Angle = 0 then
Image.StretchDraw(DXDraw.Surface, Rect, Pattern)
else
Image.DrawRotate(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle);
end;
rtBlend: begin
if BlurImage then begin
for i := Low(BlurImageArr) to High(BlurImageArr) do if BlurImageArr[i].eActive then begin
DXDraw.MirrorFlip(MirrorFlip);
rr := Bounds(BlurImageArr[i].eX, BlurImageArr[i].eY, Width, Height);
if Angle = 0 then
Image.DrawAlpha(DXDraw.Surface, rr, Pattern, BlurImageArr[i].eIntensity)
else
Image.DrawRotateAlpha(DXDraw.Surface, (rr.Left + rr.Right) div 2,
(rr.Top + rr.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, BlurImageArr[i].eAngle, BlurImageArr[i].eIntensity);
if BlurImageArr[i].eIntensity > 0 then Dec(BlurImageArr[i].eIntensity) else FillChar(BlurImageArr[i], SizeOf(BlurImageArr[i]), 0);
end;
end;
DXDraw.MirrorFlip(MirrorFlip);
if Angle = 0 then
Image.DrawAlpha(DXDraw.Surface, Rect, Pattern, Alpha)
else
Image.DrawRotateAlpha(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle, Alpha);
end;
rtAdd: begin
if BlurImage then begin
for i := Low(BlurImageArr) to High(BlurImageArr) do if BlurImageArr[i].eActive then begin
DXDraw.MirrorFlip(MirrorFlip);
rr := Bounds(BlurImageArr[i].eX, BlurImageArr[i].eY, Width, Height);
if Angle = 0 then
Image.DrawAdd(DXDraw.Surface, rr, Pattern, BlurImageArr[i].eIntensity)
else
Image.DrawRotateAdd(DXDraw.Surface, (rr.Left + rr.Right) div 2,
(rr.Top + rr.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, BlurImageArr[i].eAngle, BlurImageArr[i].eIntensity);
if BlurImageArr[i].eIntensity > 0 then Dec(BlurImageArr[i].eIntensity) else FillChar(BlurImageArr[i], SizeOf(BlurImageArr[i]), 0);
end;
end;
DXDraw.MirrorFlip(MirrorFlip);
if Angle = 0 then
Image.DrawAdd(DXDraw.Surface, Rect, Pattern, Alpha)
else
Image.DrawRotateAdd(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle, Alpha);
end;
rtSub: begin
if BlurImage then begin
for i := Low(BlurImageArr) to High(BlurImageArr) do if BlurImageArr[i].eActive then begin
DXDraw.MirrorFlip(MirrorFlip);
rr := Bounds(BlurImageArr[i].eX, BlurImageArr[i].eY, Width, Height);
if Angle = 0 then
Image.DrawSub(DXDraw.Surface, rr, Pattern, BlurImageArr[i].eIntensity)
else
Image.DrawRotateSub(DXDraw.Surface, (rr.Left + rr.Right) div 2,
(rr.Top + rr.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, BlurImageArr[i].eAngle, BlurImageArr[i].eIntensity);
if BlurImageArr[i].eIntensity > 0 then Dec(BlurImageArr[i].eIntensity) else FillChar(BlurImageArr[i], SizeOf(BlurImageArr[i]), 0);
end;
end;
DXDraw.MirrorFlip(MirrorFlip);
if Angle = 0 then
Image.DrawSub(DXDraw.Surface, Rect, Pattern, Alpha)
else
Image.DrawRotateSub(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle, Alpha);
end;
end; {case}
end;
 
procedure DXDraw_Render(DXDraw: TCustomDXDraw; Image: TPictureCollectionItem;
Rect: TRect; Pattern: Integer; var BlurImageArr: TBlurImageArr; BlurImage: Boolean;
TextureFilter: TD2DTextureFilter; MirrorFlip: TRenderMirrorFlipSet;
BlendMode: TRenderType;
Angle: Single;
Alpha: Byte;
CenterX: Double; CenterY: Double;
Scale: Single;
WaveType: TWaveType;
Amplitude: Integer; AmpLength: Integer; Phase: Integer); {$IFDEF VER9UP}inline;{$ENDIF}
var
rr: TRect;
i, width, height: Integer;
begin
if not Assigned(DXDraw.Surface) then Exit;
if not Assigned(Image) then Exit;
if Scale <> 1.0 then begin
width := Round(Scale * Image.Width);
height := Round(Scale * Image.Height);
end
else begin
width := Image.Width;
height := Image.Height;
end;
//r := Bounds(X, Y, width, height);
DXDraw.TextureFilter(TextureFilter);
DXDraw.MirrorFlip(MirrorFlip);
case BlendMode of
rtDraw:
begin
case WaveType of
wtWaveNone:
begin
if BlurImage then begin
for i := Low(BlurImageArr) to High(BlurImageArr) do if BlurImageArr[i].eActive then begin
DXDraw.MirrorFlip(MirrorFlip);
rr := Bounds(BlurImageArr[i].eX, BlurImageArr[i].eY, Round(Scale * Width), Round(Scale * Height));
if Angle = 0 then
Image.DrawAlpha(DXDraw.Surface, rr, BlurImageArr[i].ePatternIndex, BlurImageArr[i].eIntensity)
else
Image.DrawRotateAlpha(DXDraw.Surface, (rr.Left + rr.Right) div 2,
(rr.Top + rr.Bottom) div 2,
Width, Height, BlurImageArr[i].ePatternIndex, CenterX, CenterY, BlurImageArr[i].eAngle, BlurImageArr[i].eIntensity);
if BlurImageArr[i].eIntensity > 0 then Dec(BlurImageArr[i].eIntensity) else FillChar(BlurImageArr[i], SizeOf(BlurImageArr[i]), 0);
end;
end;
DXDraw.MirrorFlip(MirrorFlip);
if Angle = 0 then
Image.StretchDraw(DXDraw.Surface, Rect, Pattern)
else
Image.DrawRotate(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle);
end;
wtWaveX: Image.DrawWaveX(DXDraw.Surface, Round(Rect.Left), Round(Rect.Top), Width, Height, Pattern, Amplitude, AmpLength, Phase);
wtWaveY: Image.DrawWaveY(DXDraw.Surface, Round(Rect.Left), Round(Rect.Top), Width, Height, Pattern, Amplitude, AmpLength, Phase);
end;
end;
rtBlend: begin
case WaveType of
wtWaveNone: begin
if BlurImage then begin
for i := Low(BlurImageArr) to High(BlurImageArr) do if BlurImageArr[i].eActive then begin
DXDraw.MirrorFlip(MirrorFlip);
rr := Bounds(BlurImageArr[i].eX, BlurImageArr[i].eY, Round(Scale * Width), Round(Scale * Height));
if Angle = 0 then
Image.DrawAlpha(DXDraw.Surface, rr, Pattern, BlurImageArr[i].eIntensity)
else
Image.DrawRotateAlpha(DXDraw.Surface, (rr.Left + rr.Right) div 2,
(rr.Top + rr.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, BlurImageArr[i].eAngle, BlurImageArr[i].eIntensity);
if BlurImageArr[i].eIntensity > 0 then Dec(BlurImageArr[i].eIntensity) else FillChar(BlurImageArr[i], SizeOf(BlurImageArr[i]), 0);
end;
end;
DXDraw.MirrorFlip(MirrorFlip);
if Angle = 0 then
Image.DrawAlpha(DXDraw.Surface, Rect, Pattern, Alpha)
else
Image.DrawRotateAlpha(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle, Alpha);
end;
wtWaveX: Image.DrawWaveXAlpha(DXDraw.Surface, Round(Rect.Left), Round(Rect.Top), Width, Height, Pattern, Amplitude, AmpLength, Phase, Alpha);
wtWaveY: Image.DrawWaveYAlpha(DXDraw.Surface, Round(Rect.Top), Round(Rect.Top), Width, Height, Pattern, Amplitude, AmpLength, Phase, Alpha);
end;
end;
rtAdd: begin
case WaveType of
wtWaveNone: begin
if BlurImage then begin
for i := Low(BlurImageArr) to High(BlurImageArr) do if BlurImageArr[i].eActive then begin
DXDraw.MirrorFlip(MirrorFlip);
rr := Bounds(BlurImageArr[i].eX, BlurImageArr[i].eY, Round(Scale * Width), Round(Scale * Height));
if Angle = 0 then
Image.DrawAdd(DXDraw.Surface, rr, Pattern, BlurImageArr[i].eIntensity)
else
Image.DrawRotateAdd(DXDraw.Surface, (rr.Left + rr.Right) div 2,
(rr.Top + rr.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, BlurImageArr[i].eAngle, BlurImageArr[i].eIntensity);
if BlurImageArr[i].eIntensity > 0 then Dec(BlurImageArr[i].eIntensity) else FillChar(BlurImageArr[i], SizeOf(BlurImageArr[i]), 0);
end;
end;
DXDraw.MirrorFlip(MirrorFlip);
if Angle = 0 then
Image.DrawAdd(DXDraw.Surface, Rect, Pattern, Alpha)
else
Image.DrawRotateAdd(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle, Alpha);
end;
wtWaveX: Image.DrawWaveXAdd(DXDraw.Surface, Round(Rect.Left), Round(Rect.Top), Width, Height, Pattern, Amplitude, AmpLength, Phase, Alpha);
wtWaveY: Image.DrawWaveYAdd(DXDraw.Surface, Round(Rect.Top), Round(Rect.Top), Width, Height, Pattern, Amplitude, AmpLength, Phase, Alpha);
end;
end;
rtSub: begin
case WaveType of
wtWaveNone: begin
if BlurImage then begin
for i := Low(BlurImageArr) to High(BlurImageArr) do if BlurImageArr[i].eActive then begin
DXDraw.MirrorFlip(MirrorFlip);
rr := Bounds(BlurImageArr[i].eX, BlurImageArr[i].eY, Round(Scale * Width), Round(Scale * Height));
if Angle = 0 then
Image.DrawSub(DXDraw.Surface, rr, Pattern, BlurImageArr[i].eIntensity)
else
Image.DrawRotateSub(DXDraw.Surface, (rr.Left + rr.Right) div 2,
(rr.Top + rr.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, BlurImageArr[i].eAngle, BlurImageArr[i].eIntensity);
if BlurImageArr[i].eIntensity > 0 then Dec(BlurImageArr[i].eIntensity) else FillChar(BlurImageArr[i], SizeOf(BlurImageArr[i]), 0);
end;
end;
DXDraw.MirrorFlip(MirrorFlip);
if Angle = 0 then
Image.DrawSub(DXDraw.Surface, Rect, Pattern, Alpha)
else
Image.DrawRotateSub(DXDraw.Surface, (Rect.Left + Rect.Right) div 2,
(Rect.Top + Rect.Bottom) div 2,
Width, Height, Pattern, CenterX, CenterY, Angle, Alpha);
end;
wtWaveX: Image.DrawWaveXSub(DXDraw.Surface, Round(Rect.Left), Round(Rect.Top), Width, Height, Pattern, Amplitude, AmpLength, Phase, Alpha);
wtWaveY: Image.DrawWaveYSub(DXDraw.Surface, Round(Rect.Top), Round(Rect.Top), Width, Height, Pattern, Amplitude, AmpLength, Phase, Alpha);
end;
end;
end; {case}
end;
 
initialization
_DXTextureImageLoadFuncList := TList.Create;
TDXTextureImage.RegisterLoadFunc(DXTextureImage_LoadDXTextureImageFunc); //delete Mr.Kawasaki
TDXTextureImage.RegisterLoadFunc(DXTextureImage_LoadBitmapFunc);
finalization
TDXTextureImage.UnRegisterLoadFunc(DXTextureImage_LoadDXTextureImageFunc); //delete Mr.Kawasaki
TDXTextureImage.UnRegisterLoadFunc(DXTextureImage_LoadBitmapFunc);
_DXTextureImageLoadFuncList.Free;
{ driver free }
DirectDrawDrivers.Free;
end.
 
 
{$IFDEF _DMO_}DirectDrawDriversEx.Free;{$ENDIF}
end.
/VCL_DELPHIX_D6/DXSounds.pas
5,8 → 5,13
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, Messages, SysUtils, Classes, Controls, Forms, ExtCtrls, MMSystem,
DirectX, DXClass, Wave;
Windows, Messages, SysUtils, Classes, Controls, Forms, ExtCtrls, MMSystem, ActiveX,
DXClass, DXWave, D3DUtils, {$IFDEF VER17UP} Types, {$ENDIF}
{$IFDEF StandardDX}
DirectSound, DirectMusic;
{$ELSE}
DirectX;
{$ENDIF}
 
type
 
43,6 → 48,50
property ISound: IDirectSound read GetISound;
end;
 
{ TD3DSParams }
 
TConeAngle = record
Inside,Outside:DWord;
end;
TD3DSParams = class
private
FOwner: TDirectSoundBuffer;
 
FDsb: TDS3DBUFFER;
 
function GetPosition: TD3DVector;
function GetVelocity: TD3DVector;
function GetConeOrientation: TD3DVector;
function GetConeAngle: TConeAngle;
function GetConeOutsideVolume: Integer;
function GetMinDistance: TD3DValue;
function GetMaxDistance: TD3DValue;
function GetRaw: TDS3DBuffer;
 
procedure SetPosition(const v: TD3DVector);
procedure SetVelocity(const v: TD3DVector);
procedure SetConeOrientation(const v: TD3DVector);
procedure SetConeAngle(const v: TConeAngle);
procedure SetConeOutsideVolume(const v: Integer);
procedure SetMinDistance(const v: TD3DValue);
procedure SetMaxDistance(const v: TD3DValue);
procedure SetRaw(const v: TDS3DBuffer);
 
function CheckValidity: Boolean;
public
constructor Create(Owner: TDirectSoundBuffer);
destructor Destroy; override;
property Position: TD3DVector read getPosition write setPosition;
property Velocity: TD3DVector read getVelocity write setVelocity;
property ConeOrientation: TD3DVector read getConeOrientation write setConeOrientation;
property ConeAngle: TConeAngle read getConeAngle write setConeAngle;
property ConeOutsideVolume: Integer read getConeOutsideVolume write setConeOutsideVolume;
property MinDistance: TD3DValue read getMinDistance write setMinDistance;
property MaxDistance: TD3DValue read getMaxDistance write setMaxDistance;
property RawParams: TDS3DBuffer read getRaw write setRaw;
procedure Assign(Prms: TD3DSParams);
end;
 
{ TDirectSoundBuffer }
 
TDirectSoundBuffer = class(TDirectX)
49,6 → 98,8
private
FDSound: TDirectSound;
FIDSBuffer: IDirectSoundBuffer;
FIDS3DBuffer:IDirectSound3DBuffer;
FD3DSParams: TD3DSParams;
FCaps: TDSBCaps;
FFormat: PWaveFormatEx;
FFormatSize: Integer;
55,6 → 106,7
FLockAudioPtr1, FLockAudioPtr2: array[0..0] of Pointer;
FLockAudioSize1, FLockAudioSize2: array[0..0] of DWORD;
FLockCount: Integer;
FIsD3D: Boolean;
function GetBitCount: Longint;
function GetFormat: PWaveFormatEx;
function GetFrequency: Integer;
71,6 → 123,9
procedure SetPan(Value: Integer);
procedure SetPosition(Value: Longint);
procedure SetVolume(Value: Integer);
function GetIDS3DBuffer: IDirectSound3DBuffer;
procedure SetIDS3DBuffer(const Value: IDirectSound3DBuffer);
procedure SetD3DSParams(const Value: TD3DSParams);
protected
procedure Check; override;
public
89,7 → 144,7
function Play(Loop: Boolean{$IFNDEF VER100}=False{$ENDIF}): Boolean;
function Restore: Boolean;
function SetFormat(const Format: TWaveFormatEx): Boolean;
procedure SetSize(const Format: TWaveFormatEx; Size: Integer);
procedure SetSize(const Format: TWaveFormatEx; Size: Integer; D3D: Boolean {$IFNDEF VER100}= False{$ENDIF});
procedure Stop;
procedure UnLock;
property BitCount: Longint read GetBitCount;
99,8 → 154,11
property Frequency: Integer read GetFrequency write SetFrequency;
property IBuffer: IDirectSoundBuffer read GetIBuffer;
property IDSBuffer: IDirectSoundBuffer read GetIDSBuffer write SetIDSBuffer;
property IDS3DBuffer: IDirectSound3DBuffer read GetIDS3DBuffer write SetIDS3DBuffer;
property Playing: Boolean read GetPlaying;
property Pan: Integer read GetPan write SetPan;
property D3DSParams: TD3DSParams read FD3DSParams write SetD3DSParams;
property IsD3D: Boolean read FIsD3D write FIsD3D default False;
property Position: Longint read GetPosition write SetPosition;
property Size: Integer read GetSize;
property Volume: Integer read GetVolume write SetVolume;
377,6 → 435,8
procedure SetPan(Value: Integer);
procedure SetVolume(Value: Integer);
procedure SetWave(Value: TWave);
protected
function GetPlaying: boolean;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
389,6 → 449,8
property Pan: Integer read FPan write SetPan;
property Volume: Integer read FVolume write SetVolume;
property WaveCollection: TWaveCollection read GetWaveCollection;
 
property Playing: boolean read GetPlaying;
published
property Looped: Boolean read FLooped write SetLooped;
property MaxPlayingCount: Integer read FMaxPlayingCount write SetMaxPlayingCount;
445,10 → 507,125
property Items;
end;
 
{ EDXMusicError }
 
EDXMusicError = class(Exception);
 
TMusicListCollection = class;
 
{ TMusicListCollectionItem }
 
TMusicDataProp = class(TPersistent)
private
FMusicData: string;
FMidiname: string;
function GetMusicData: string;
procedure SetMusicData(const Value: string);
protected
procedure DefineProperties(Filer: TFiler); override;
procedure ReadMidiData(Stream: TStream);
procedure WriteMidiData(Stream: TStream);
public
property MusicData: string read GetMusicData write SetMusicData;
published
property MidiName: string read FMidiname write FMidiname;
end;
 
TMusicListCollectionItem = class(THashCollectionItem)
private
{ Private declarations }
FDirectMusicPerformance: IDirectMusicPerformance;
FDirectSound: IDirectSound;
FDirectMusic: IDirectMusic;
FDirectMusicLoader: IDirectMusicLoader;
FDirectMusicSegment: IDirectMusicSegment;
FMusicObjDesc: TDMus_ObjectDesc;
FDirectMusicSegmentState: IDirectMusicSegmentState;
FRepeats: Cardinal;
FStartpoint: Integer;
FDuration: Integer;
// startpoint props in seconds these used to hold millisecond value
FActualDuration: Integer;
FActualStartPoint: Integer;
FIsInitialized: Boolean;
FMusicDataProp: TMusicDataProp;
procedure SetDuration(const Value: integer);
procedure SetRepeats(const Value: Cardinal);
procedure SetStartPoint(const Value: integer);
function GetMusicListCollection: TMusicListCollection;
protected
function GetDisplayName: string; override;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
function Size: Integer;
procedure Play;
function IsPlaying: Boolean;
procedure Stop;
procedure Load;
procedure Init;
procedure LoadFromFile(const MidiFileName: string);
procedure SaveToFile(const MidiFileName: string);
property MusicCollection: TMusicListCollection read GetMusicListCollection;
property IsInitialized: Boolean read FIsInitialized write FIsInitialized;
published
property Name;
property Repeats: Cardinal read Frepeats write SetRepeats;
property Duration: integer read FDuration write SetDuration;
property StartPoint: integer read FStartPoint write SetStartPoint;
property Midi: TMusicDataProp read FMusicDataProp write FMusicDataProp;
end;
 
{ TMusicListCollection }
 
TMusicListCollection = class(THashCollection)
private
FOwner: TPersistent;
FDirectSound: IDirectSound;
protected
function GetItem(Index: Integer): TMusicListCollectionItem;
procedure SetItem(Index: Integer; Value: TMusicListCollectionItem);
procedure Update(Item: TCollectionItem); override;
function GetOwner: TPersistent; override;
public
constructor Create(AOwner: TComponent);
function Add: TMusicListCollectionItem;
function Find(const Name: string): TMusicListCollectionItem;
procedure Restore;
procedure LoadFromFile(const FileName: string);
procedure LoadFromStream(Stream: TStream);
procedure SaveToFile(const FileName: string);
procedure SaveToStream(Stream: TStream);
{$IFDEF VER4UP}
function Insert(Index: Integer): TMusicListCollectionItem;
{$ENDIF}
property Items[Index: Integer]: TMusicListCollectionItem read GetItem write SetItem;
published
end;
 
{ TDXMusic }
 
TDXMusic = class(TComponent)
private
FDXSound: TDXSound;
FMidis: TMusicListCollection;
procedure SetMidis(const value: TMusicListCollection);
procedure SetDXSound(const Value: TDXSound);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property DXSound: TDXSound read FDXSound write SetDXSound;
property Midis: TMusicListCollection read FMidis write SetMidis;
end;
 
implementation
 
uses DXConsts;
 
const
dm_OK = 0;
 
function DXDirectSoundCreate(lpGUID: PGUID; out lpDS: IDirectSound;
pUnkOuter: IUnknown): HRESULT;
type
459,13 → 636,13
(lpGUID, lpDS, pUnkOuter);
end;
 
function DXDirectSoundEnumerate(lpCallback: TDSEnumCallbackA;
function DXDirectSoundEnumerate(lpCallback: {$IFDEF UNICODE}TDSEnumCallbackW{$ELSE}TDSEnumCallbackA{$ENDIF};
lpContext: Pointer): HRESULT;
type
TDirectSoundEnumerate = function(lpCallback: TDSEnumCallbackA;
TDirectSoundEnumerate = function(lpCallback: {$IFDEF UNICODE}TDSEnumCallbackW{$ELSE}TDSEnumCallbackA{$ENDIF};
lpContext: Pointer): HRESULT; stdcall;
begin
Result := TDirectSoundEnumerate(DXLoadLibrary('DSound.dll', 'DirectSoundEnumerateA'))
Result := TDirectSoundEnumerate(DXLoadLibrary('DSound.dll', {$IFDEF UNICODE}'DirectSoundEnumerateW'{$ELSE}'DirectSoundEnumerateA'{$ENDIF}))
(lpCallback, lpContext);
end;
 
490,7 → 667,7
lpContext: Pointer): HRESULT; stdcall;
begin
try
Result := TDirectSoundCaptureEnumerate(DXLoadLibrary('DSound.dll', 'DirectSoundCaptureEnumerateA'))
Result := TDirectSoundCaptureEnumerate(DXLoadLibrary('DSound.dll', {$IFDEF UNICODE}'DirectSoundCaptureEnumerateW'{$ELSE}'DirectSoundCaptureEnumerateA'{$ENDIF}))
(lpCallback, lpContext);
except
raise EDirectXError.Create(SSinceDirectX5);
501,8 → 678,8
DirectSoundDrivers: TDirectXDrivers;
DirectSoundCaptureDrivers: TDirectXDrivers;
 
function EnumDirectSoundDrivers_DSENUMCALLBACK(lpGuid: PGUID; lpstrDescription: LPCSTR;
lpstrModule: LPCSTR; lpContext: Pointer): BOOL; stdcall;
function EnumDirectSoundDrivers_DSENUMCALLBACK(lpGuid: PGUID; lpstrDescription: {$IFDEF UNICODE}LPCTSTR{$ELSE}LPCSTR{$ENDIF};
lpstrModule: {$IFDEF UNICODE}LPCTSTR{$ELSE}LPCSTR{$ENDIF}; lpContext: Pointer): BOOL; stdcall;
begin
Result := True;
with TDirectXDriver.Create(TDirectXDrivers(lpContext)) do
623,7 → 800,9
constructor TDirectSoundBuffer.Create(ADirectSound: TDirectSound);
begin
inherited Create;
FIsD3D := False;
FDSound := ADirectSound;
FIDS3DBuffer := nil;
FDSound.FBufferList.Add(Self);
end;
 
630,6 → 809,7
destructor TDirectSoundBuffer.Destroy;
begin
IDSBuffer := nil;
IDS3DBuffer := nil;
FDSound.FBufferList.Remove(Self);
inherited Destroy;
end;
640,21 → 820,35
begin
if Source=nil then
IDSBuffer := nil
else if Source is TWave then
else
if Source is TWave then
LoadFromWave(TWave(Source))
else if Source is TDirectSoundBuffer then
else
if Source is TDirectSoundBuffer then
begin
if TDirectSoundBuffer(Source).IDSBuffer=nil then
IDSBuffer := nil
else begin
FDSound.DXResult := FDSound.ISound.DuplicateSoundBuffer(TDirectSoundBuffer(Source).IDSBuffer,
TempBuffer);
if FDSound.DXResult=0 then
else
begin
FDSound.DXResult := FDSound.ISound.DuplicateSoundBuffer(TDirectSoundBuffer(Source).IDSBuffer, TempBuffer);
if FDSound.DXResult = DS_OK then
begin
IDSBuffer := TempBuffer;
end;
end;
end else
 
if FIsD3D then
if TDirectSoundBuffer(Source).IDS3DBuffer = nil then
IDS3DBuffer := nil
else
begin
FDSound.DXResult := FDSound.ISound.QueryInterface(IID_IDirectSound3DBuffer, FIDS3DBuffer);
if FDSound.DXResult = DS_OK then
FD3DSParams := TDirectSoundBuffer(Source).FD3DSParams;
end;
 
end
else
inherited Assign(Source);
end;
 
692,6 → 886,14
DXResult := IBuffer.GetFrequency(DWORD(Result));
end;
 
function TDirectSoundBuffer.GetIDS3DBuffer: IDirectSound3DBuffer;
begin
if Self <> nil then
Result := FIDS3DBuffer
else
Result := nil;
end;
 
function TDirectSoundBuffer.GetIDSBuffer: IDirectSoundBuffer;
begin
if Self<>nil then
721,7 → 923,7
var
dwCurrentWriteCursor: Longint;
begin
IBuffer.GetCurrentPosition(DWORD(Result), DWORD(dwCurrentWriteCursor));
IBuffer.GetCurrentPosition(@DWORD(Result), @DWORD(dwCurrentWriteCursor));
end;
 
function TDirectSoundBuffer.GetSize: Integer;
743,7 → 945,7
var
Stream : TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead);
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
LoadFromStream(Stream);
finally
757,7 → 959,7
Data1, Data2: Pointer;
Data1Size, Data2Size: Longint;
begin
SetSize(Format, Size);
SetSize(Format, Size, FIsD3D);
 
if Data<>nil then
begin
770,9 → 972,11
finally
UnLock;
end;
end else
end
else
begin
FIDSBuffer := nil;
FIDS3DBuffer := nil;
raise EDirectSoundBufferError.CreateFmt(SCannotLock, [SDirectSoundBuffer]);
end;
end;
804,10 → 1008,9
if IDSBuffer=nil then Exit;
 
if FLockCount>High(FLockAudioPtr1) then Exit;
 
DXResult := IBuffer.Lock(LockPosition, LockSize,
FLockAudioPtr1[FLockCount], FLockAudioSize1[FLockCount],
FLockAudioPtr2[FLockCount], FLockAudioSize2[FLockCount], 0);
{$IFNDEF DX7}@{$ENDIF}FLockAudioPtr1[FLockCount], {$IFNDEF DX7}@{$ENDIF}FLockAudioSize1[FLockCount],
{$IFNDEF DX7}@{$ENDIF}FLockAudioPtr2[FLockCount], {$IFNDEF DX7}@{$ENDIF}FLockAudioSize2[FLockCount], 0);
Result := DXResult=DS_OK;
 
if Result then
835,9 → 1038,14
Result := DXResult=DS_OK;
end;
 
procedure TDirectSoundBuffer.SetD3DSParams(const Value: TD3DSParams);
begin
FD3DSParams.Assign(Value);
end;
 
function TDirectSoundBuffer.SetFormat(const Format: TWaveFormatEx): Boolean;
begin
DXResult := IBuffer.SetFormat(Format);
DXResult := IBuffer.SetFormat(FFormat{$IFDEF DX7}^{$ENDIF});
Result := DXResult=DS_OK;
 
if Result then
845,10 → 1053,10
FreeMem(FFormat);
FFormat := nil;
FFormatSize := 0;
if IBuffer.GetFormat(PWaveFormatEx(nil)^, 0, DWORD(FFormatSize))=DS_OK then
if IBuffer.GetFormat(PWaveFormatEx(nil), 0, @DWORD(FFormatSize)) = DS_OK then
begin
GetMem(FFormat, FFormatSize);
IBuffer.GetFormat(FFormat^, FFormatSize, PDWORD(nil)^);
IBuffer.GetFormat(FFormat, FFormatSize, nil);
end;
end;
end;
858,6 → 1066,30
DXResult := IBuffer.SetFrequency(Value);
end;
 
procedure TDirectSoundBuffer.SetIDS3DBuffer(const Value: IDirectSound3DBuffer);
begin
if FIDS3DBuffer = Value then Exit;
 
FIDS3DBuffer := Value;
FillChar(FCaps, SizeOf(FCaps), 0);
FreeMem(FFormat);
FFormat := nil;
FFormatSize := 0;
FLockCount := 0;
 
if FIDS3DBuffer <> nil then
begin
FCaps.dwSize := SizeOf(FCaps);
IBuffer.GetCaps(FCaps);
 
if IBuffer.GetFormat(PWaveFormatEx(nil), 0, @DWORD(FFormatSize)) = DS_OK then
begin
GetMem(FFormat, FFormatSize);
IBuffer.GetFormat(FFormat, FFormatSize, nil);
end;
end;
end;
 
procedure TDirectSoundBuffer.SetIDSBuffer(Value: IDirectSoundBuffer);
begin
if FIDSBuffer=Value then Exit;
874,10 → 1106,10
FCaps.dwSize := SizeOf(FCaps);
IBuffer.GetCaps(FCaps);
 
if IBuffer.GetFormat(PWaveFormatEx(nil)^, 0, DWORD(FFormatSize))=DS_OK then
if IBuffer.GetFormat(PWaveFormatEx(nil), 0, @DWORD(FFormatSize)) = DS_OK then
begin
GetMem(FFormat, FFormatSize);
IBuffer.GetFormat(FFormat^, FFormatSize, PDWORD(nil)^);
IBuffer.GetFormat(FFormat, FFormatSize, nil);
end;
end;
end;
891,8 → 1123,12
begin
DXResult := IBuffer.SetCurrentPosition(Value);
end;
{$IFNDEF DX7}
const
DSBCAPS_CTRLDEFAULT = DSBCAPS_CTRLFREQUENCY or DSBCAPS_CTRLPAN or DSBCAPS_CTRLVOLUME;
{$ENDIF}
 
procedure TDirectSoundBuffer.SetSize(const Format: TWaveFormatEx; Size: Integer);
procedure TDirectSoundBuffer.SetSize(const Format: TWaveFormatEx; Size: Integer; D3D: Boolean {$IFNDEF VER100}= False{$ENDIF});
var
BufferDesc: TDSBufferDesc;
begin
907,6 → 1143,8
dwFlags := dwFlags or DSBCAPS_STICKYFOCUS
else if DSound.FGlobalFocus then
dwFlags := dwFlags or DSBCAPS_GLOBALFOCUS;
if D3D then
dwFlags := DSBCAPS_STATIC + DSBCAPS_CTRLDEFAULT + DSBCAPS_CTRL3D - DSBCAPS_CTRLPAN;
dwBufferBytes := Size;
lpwfxFormat := @Format;
end;
935,6 → 1173,207
FLockAudioPtr2[FLockCount], FLockAudioSize2[FLockCount]);
end;
 
{ TD3DSParams }
 
function TD3DSParams.CheckValidity: Boolean;
begin
Result := (FOwner <> nil) and (TDirectSoundBuffer(FOwner).IDS3DBuffer <> nil)
end;
 
constructor TD3DSParams.Create(Owner: TDirectSoundBuffer);
{$IFDEF VER14UP}
function MakeD3DVector(x, y, z: TD3DValue): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
begin
Result.x := x;
Result.y := y;
Result.z := z;
end;
{$ENDIF}
begin
inherited Create;
FOwner := Owner;
with FDsb do
begin
dwSize := SizeOf(TDS3DBuffer);
vPosition := MakeD3DVector(0, 0, 0);
vVelocity := MakeD3DVector(0, 0, 0);
dwInsideConeAngle := DS3D_DEFAULTCONEANGLE;
dwOutsideConeAngle := DS3D_DEFAULTCONEANGLE;
vConeOrientation := MakeD3DVector(0, 0, 0);
lConeoutsideVolume := DS3D_DEFAULTCONEOUTSIDEVOLUME;
flMinDistance := 5;
flMaxDistance := 100.0;
dwMode := DS3DMODE_NORMAL;
end;
end;
 
destructor TD3DSParams.destroy;
begin
inherited destroy;
end;
 
function TD3DSParams.getPosition: TD3DVector;
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.GetPosition(FDsb.vPosition);
end;
result := FDsb.vPosition;
end;
 
function TD3DSParams.getVelocity: TD3DVector;
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.GetVelocity(FDsb.vVelocity);
end;
result := FDsb.vVelocity;
end;
 
function TD3DSParams.getConeOrientation: TD3DVector;
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.GetConeOrientation(FDsb.vConeOrientation);
end;
result := FDsb.vConeOrientation;
end;
 
function TD3DSParams.getConeAngle: TConeAngle;
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.GetConeAngles(FDsb.dwInsideConeAngle, FDsb.dwOutsideConeAngle);
end;
with result do
begin
Inside := FDsb.dwInsideConeAngle;
OutSide := FDsb.dwOutsideConeAngle;
end;
end;
 
function TD3DSParams.getConeOutsideVolume: Integer;
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.GetConeOutsideVolume(FDsb.lConeOutsideVolume);
end;
result := FDsb.lConeOutsideVolume;
end;
 
function TD3DSParams.getMinDistance: TD3DValue;
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.GetMinDistance(FDsb.flMinDistance);
end;
result := FDsb.flMinDistance;
end;
 
function TD3DSParams.getMaxDistance: TD3DValue;
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.GetMaxDistance(FDsb.flMaxDistance);
end;
result := FDsb.flMaxDistance;
end;
 
function TD3DSParams.getRaw: TDS3DBuffer;
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.GetAllParameters(FDsb);
end;
result := FDsb;
end;
 
 
procedure TD3DSParams.setPosition(const v: TD3DVector);
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.SetPosition(v.x, v.y, v.z, DS3D_IMMEDIATE);
end;
FDsb.vPosition := v;
end;
 
procedure TD3DSParams.setVelocity(const v: TD3DVector);
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.SetVelocity(v.x, v.y, v.z, DS3D_IMMEDIATE);
end;
FDsb.vVelocity := v;
end;
 
procedure TD3DSParams.setConeOrientation(const v: TD3DVector);
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.SetConeOrientation(v.x, v.y, v.z, DS3D_IMMEDIATE);
end;
FDsb.vConeOrientation := v;
end;
 
procedure TD3DSParams.setConeAngle(const v: TConeAngle);
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.SetConeAngles(v.Inside, v.Outside, DS3D_IMMEDIATE);
end;
FDsb.dwInsideConeAngle := v.Inside;
FDsb.dwInsideConeAngle := v.Outside;
end;
 
procedure TD3DSParams.setConeOutsideVolume(const v: Integer);
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.SetConeOutsideVolume(v, DS3D_IMMEDIATE);
end;
FDsb.lConeOutsideVolume := v;
end;
 
procedure TD3DSParams.setMinDistance(const v: TD3DValue);
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.SetMinDistance(v, DS3D_IMMEDIATE);
end;
FDsb.flMinDistance := v;
end;
 
procedure TD3DSParams.setMaxDistance(const v: TD3DValue);
begin
if CheckValidity then
begin
FOwner.IDS3DBuffer.SetMaxDistance(v, DS3D_IMMEDIATE);
end;
FDsb.flMaxDistance := v;
end;
 
procedure TD3DSParams.setRaw(const v: TDS3DBuffer);
begin
if CheckValidity then
begin
if FOwner.IDS3DBuffer.SetAllParameters(v, DS3D_IMMEDIATE) <> DS_OK then
{'Parameter is invalid for Params3D'};
end;
FDsb := v;
end;
 
procedure TD3DSParams.Assign(Prms: TD3DSParams);
begin
FDsb := Prms.RawParams;
 
if CheckValidity then
begin
if FOwner.IDS3DBuffer.SetAllParameters(FDsb, DS3D_IMMEDIATE) <> DS_OK then
{'Parameter is invalid for Params3D'};
end;
end;
 
{ TAudioStream }
 
type
1662,7 → 2101,7
var
CapturePosition, ReadPosition: DWORD;
begin
if FBuffer.GetCurrentPosition(CapturePosition, ReadPosition)=DS_OK then
if FBuffer.GetCurrentPosition(@DWORD(CapturePosition), @DWORD(ReadPosition)) = DS_OK then
begin
if FBufferPos<=ReadPosition then
Result := ReadPosition - FBufferPos
1681,7 → 2120,8
begin
if not FCapturing then
Start;
 
Data1 := nil;
Data2 := nil;
Result := 0;
while Result<Count do
begin
1688,7 → 2128,8
Size := Min(Count-Result, GetReadSize);
if Size>0 then
begin
if FBuffer.Lock(FBufferPos, Size, Data1, Data1Size, Data2, Data2Size, 0)=DS_OK then
if FBuffer.Lock(FBufferPos, Size, Data1, {$IFNDEF DX7}@{$ENDIF}Data1Size,
Data2, {$IFNDEF DX7}@{$ENDIF}Data2Size, 0) = DS_OK then
begin
Move(Data1^, Pointer(Integer(@Buffer)+Result)^, Data1Size);
Result := Result + Integer(Data1Size);
1737,7 → 2178,7
if Assigned(FOnFilledBuffer) then
begin
FNotifyThread := TSoundCaptureStreamNotify.Create(Self);
FNotifyThread.Resume;
FNotifyThread.{$IFDEF VER14UP}Start{$ELSE}Resume{$ENDIF};
end;
end else
FOnFilledBuffer := Value;
1772,7 → 2213,7
if Assigned(FOnFilledBuffer) then
begin
FNotifyThread := TSoundCaptureStreamNotify.Create(Self);
FNotifyThread.Resume;
FNotifyThread.{$IFDEF VER14UP}Start{$ELSE}Resume{$ENDIF};
end;
except
Stop;
1800,7 → 2241,6
FDSound := ADSound;
FEnabled := True;
 
 
FEffectList := TList.Create;
FTimer := TTimer.Create(nil);
FTimer.Interval := 500;
1828,7 → 2268,7
var
Stream : TFileStream;
begin
Stream :=TFileStream.Create(Filename, fmOpenRead);
Stream := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite);
try
EffectStream(Stream, Loop, Wait);
finally
2223,10 → 2663,37
 
if PrevInitialized then
Restore;
end else
end
else
inherited Assign(Source);
end;
 
function TWaveCollectionItem.GetPlaying: boolean;
var
Buffer: TDirectSoundBuffer;
index: integer;
begin
Result := False;
if not FInitialized then Exit;
Assert(GetBuffer <> nil);
Assert(FBufferList <> nil);
if FLooped then
begin
Buffer := GetBuffer;
Assert(Buffer <> nil);
Result := Buffer.Playing;
end
else
begin
for index := 0 to FBufferList.Count - 1 do
begin
Result := TDirectSoundBuffer(FBufferList[index]).Playing;
if Result then
Break;
end;
end;
end; {GetPlaying}
 
function TWaveCollectionItem.GetBuffer: TDirectSoundBuffer;
begin
if FInitialized and (FBuffer=nil) then
2284,7 → 2751,8
GetBuffer.Stop;
GetBuffer.Position := 0;
GetBuffer.Play(True);
end else
end
else
begin
NewBuffer := nil;
for i:=0 to FBufferList.Count-1 do
2302,7 → 2770,8
if NewBuffer=nil then Exit;
 
FBufferList.Add(NewBuffer);
end else
end
else
begin
if FBufferList.Count<FMaxPlayingCount then
begin
2310,7 → 2779,8
if NewBuffer=nil then Exit;
 
FBufferList.Add(NewBuffer);
end else
end
else
begin
NewBuffer := FBufferList[0];
FBufferList.Move(0, FBufferList.Count-1);
2592,6 → 3062,379
FItems.Assign(Value);
end;
 
{(c) 2006 Jaro Benes, Play midi from memory module}
 
{ TMusicDataProp }
 
type
TMidiDataHeader = packed record
Size: Integer;
end;
 
procedure TMusicDataProp.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineBinaryProperty('Midi', ReadMidiData, WriteMidiData, Length(Self.FMusicData) <> 0);
end;
 
function TMusicDataProp.GetMusicData: string;
begin
SetLength(Result, Length(FMusicData));
if Length(FMusicData) <> 0 then
Move(FMusicData[1], Result[1], Length(FMusicData));
end;
 
procedure TMusicDataProp.ReadMidiData(Stream: TStream);
var
Header: TMidiDataHeader;
begin
Stream.ReadBuffer(Header, SizeOf(Header));
SetLength(FMusicData, Header.Size);
Stream.ReadBuffer(FMusicData[1], Header.Size);
end;
 
procedure TMusicDataProp.SetMusicData(const Value: string);
begin
SetLength(FMusicData, Length(Value));
if Length(Value) <> 0 then
Move(Value[1], FMusicData[1], Length(Value));
end;
 
procedure TMusicDataProp.WriteMidiData(Stream: TStream);
var
Header: TMidiDataHeader;
begin
Header.Size := Length(FMusicData);
Stream.WriteBuffer(Header, SizeOf(Header));
Stream.WriteBuffer(FMusicData[1], Header.Size);
end;
 
{ TMusicListCollectionItem }
 
procedure TMusicListCollectionItem.Load;
var
MidiFilelength: Integer;
begin
// kdyby nahodou uz nejaky existoval tak ho znic
if FDirectMusicSegment <> nil then
FDirectMusicSegment := nil;
ZeroMemory(@FMusicObjDesc, SizeOf(TDMUS_OBJECTDESC));
// tohle je popisek parametru - chceme hrat z pameti
with FMusicObjDesc do
begin
dwsize := SizeOf(TDMUS_OBJECTDESC);
guidclass := CLSID_DirectMusicSegment;
//tohle jen pokud je to ze souboru
//dwvaliddata := DMUS_OBJ_CLASS or DMUS_OBJ_FULLPATH or DMUS_OBJ_FILENAME;
dwvaliddata := DMUS_OBJ_CLASS or DMUS_OBJ_MEMORY or DMUS_OBJ_LOADED;
pbMemData := @FMusicDataProp.FMusicData[1];
llMemLength := Length(FMusicDataProp.FMusicData);
end;
if FDirectMusicLoader.GetObject(FMusicObjDesc, IID_IDirectMusicSegment, FDirectMusicSegment) <> dm_ok then
raise EDXMusicError.Create('Failed to Get object for Direct music'); ;
if FDirectMusicSegment.setParam(GUID_StandardMidiFile, $FFFFFFFF, 0, 0, Pointer(FDirectMusicPerformance)) <> dm_ok then
raise EDXMusicError.Create('Failed to Set param for Direct music'); ;
if FDirectMusicSegment.setParam(GUID_Download, $FFFFFFFF, 0, 0, Pointer(FDirectMusicPerformance)) <> dm_ok then
raise EDXMusicError.Create('Failed to Set param for Direct music'); ;
FDirectMusicSegment.GetLength(MidiFilelength);
if (FActualDuration < MidiFilelength) and (FActualDuration > 0) then
FDirectMusicSegment.SetLength(FActualDuration);
if FActualStartPoint < MidiFilelength - FActualDuration then
FDirectMusicSegment.SetStartpoint(FActualStartPoint);
// jak opakovat
FDirectMusicSegment.Setrepeats(repeats - 1);
end;
 
constructor TMusicListCollectionItem.Create(Collection: TCollection);
begin
inherited Create(Collection);
CoInitialize(nil);
FMusicDataProp := TMusicDataProp.Create;
SetLength(FMusicDataProp.FMusicData, 0);
FDirectMusicPerformance := nil;
FDirectMusic := nil;
FDirectSound := nil;
FDirectMusicSegment := nil;
FDirectMusicLoader := nil;
FIsInitialized := False;
end;
 
procedure TMusicListCollectionItem.Stop;
begin
if FDirectMusicPerformance <> nil then
FDirectMusicPerformance.Stop(nil, nil, 0, 0);
end;
 
function TMusicListCollectionItem.GetDisplayName: string;
begin
Result := inherited GetDisplayName
end;
 
procedure TMusicListCollectionItem.Play;
begin
if not FIsInitialized then
Init;
Load;
if FDirectMusicPerformance <> nil then
FDirectMusicPerformance.PlaySegment(FDirectMusicSegment, 0, 0, @FDirectMusicSegmentState);
end;
 
function TMusicListCollectionItem.IsPlaying: Boolean;
begin
Result := False;
if FDirectMusicPerformance <> nil then
Result := FDirectMusicPerformance.IsPlaying(FDirectMusicSegment, FDirectMusicSegmentState) = DM_OK;
end;
 
destructor TMusicListCollectionItem.Destroy;
begin
FDirectMusicPerformance := nil;
FDirectMusic := nil;
FDirectSound := nil;
FDirectMusicSegment := nil;
FDirectMusicLoader := nil;
FMusicDataProp.Free;
CoUninitialize;
inherited Destroy;
end;
 
procedure TMusicListCollectionItem.SetRepeats(const Value: Cardinal);
begin
Frepeats := Value;
end;
 
procedure TMusicListCollectionItem.SetStartPoint(const Value: integer);
begin
FStartPoint := Value;
end;
 
procedure TMusicListCollectionItem.SetDuration(const Value: integer);
begin
FDuration := Value;
end;
 
procedure TMusicListCollectionItem.Init;
var OK: Boolean;
begin
FIsInitialized := False;
OK := False;
// vytvor FDirectMusicPerformance pokud uz neni vytvoreno
if FDirectMusicPerformance = nil then
OK := CoCreateInstance(CLSID_DirectMusicPerformance, nil, CLSCTX_INPROC,
IID_IDirectMusicperformance, FDirectMusicPerformance) = DM_OK;
if not OK then Exit;
if FDirectSound <> nil then
OK := FDirectMusicPerformance.Init({$IFDEF DX7}@{$ENDIF}FDirectMusic, FDirectSound, 0) = DM_OK
else
OK := FDirectMusicPerformance.Init({$IFDEF DX7}@{$ENDIF}FDirectMusic, nil, 0) = dm_OK;
if not OK then Exit;
// vychozi midi port
// pridej pokud neni nastaven
if FDirectMusicPerformance.Addport(nil) <> DM_OK then Exit;
// zkus vytvorit loader
OK := CoCreateInstance(CLSID_DirectMusicLoader, nil, CLSCTX_Inproc,
IID_IDirectMusicLoader, FDirectMusicLoader) = DM_OK;
FIsInitialized := OK;
end;
 
function TMusicListCollectionItem.GetMusicListCollection: TMusicListCollection;
begin
Result := Collection as TMusicListCollection;
end;
 
procedure TMusicListCollectionItem.SaveToFile(const MidiFileName: string);
var F: file; BakFileMode: integer;
begin
BakFileMode := FileMode;
FileMode := 1; // Read/Write
try
AssignFile(F, MidiFileName);
Rewrite(F, 1);
try
BlockWrite(F, FMusicDataProp.FMusicData[1], Length(FMusicDataProp.FMusicData));
finally
CloseFile(F);
end;
finally
FileMode := BakFileMode;
end;
end;
 
procedure TMusicListCollectionItem.LoadFromFile(const MidiFileName: string);
var F: file; S: string; I: Integer; BakFileMode: integer;
begin
BakFileMode := FileMode;
FileMode := 0; // Read only
try
AssignFile(F, MidiFileName);
Reset(F, 1);
try
SetLength(FMusicDataProp.FMusicData, FileSize(F));
BlockRead(F, FMusicDataProp.FMusicData[1], FileSize(F));
S := ExtractFileName(MidiFileName);
I := Pos(ExtractFileExt(S), S);
if I > 0 then S := Copy(S, 1, I - 1);
FMusicDataProp.Midiname := S;
finally
CloseFile(F);
end;
Name := ExtractFileName(MidiFileName);
finally
FileMode := BakFileMode;
end;
end;
 
function TMusicListCollectionItem.Size: Integer;
begin
Result := Length(FMusicDataProp.FMusicData);
end;
 
{ TMusicListCollection }
 
constructor TMusicListCollection.Create(AOwner: TComponent);
begin
inherited Create(TMusicListCollectionItem);
FOwner := AOwner;
end;
 
function TMusicListCollection.Add: TMusicListCollectionItem;
begin
Result := TMusicListCollectionItem(inherited Add);
Result.FDirectSound := Self.FDirectSound;
end;
 
function TMusicListCollection.GetItem(Index: Integer): TMusicListCollectionItem;
begin
Result := TMusicListCollectionItem(inherited GetItem(Index));
end;
 
procedure TMusicListCollection.SetItem(Index: Integer;
Value: TMusicListCollectionItem);
begin
inherited SetItem(Index, Value);
end;
 
procedure TMusicListCollection.Update(Item: TCollectionItem);
begin
inherited Update(Item);
end;
 
function TMusicListCollection.Find(
const Name: string): TMusicListCollectionItem;
var
i: Integer;
begin
i := IndexOf(Name);
if i = -1 then
raise EDXMusicError.CreateFmt('The midi document does not exist: %s.', [Name]);
Result := Items[i];
end;
 
{$IFDEF VER4UP}
function TMusicListCollection.Insert(Index: Integer): TMusicListCollectionItem;
begin
Result := TMusicListCollectionItem(inherited Insert(Index));
end;
{$ENDIF}
 
function TMusicListCollection.GetOwner: TPersistent;
begin
Result := FOwner;
end;
 
procedure TMusicListCollection.Restore;
begin
 
end;
 
procedure TMusicListCollection.SaveToFile(const FileName: string);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
SaveToStream(Stream);
finally
Stream.Free;
end;
end;
 
procedure TMusicListCollection.LoadFromFile(const FileName: string);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
 
type
TMidiCollectionComponent = class(TComponent)
private
FList: TMusicListCollection;
published
property List: TMusicListCollection read FList write FList;
end;
 
procedure TMusicListCollection.SaveToStream(Stream: TStream);
var
Component: TMidiCollectionComponent;
begin
Component := TMidiCollectionComponent.Create(nil);
try
Component.FList := Self;
Stream.WriteComponentRes('DelphiXMidiCollection', Component);
finally
Component.Free;
end;
end;
 
procedure TMusicListCollection.LoadFromStream(Stream: TStream);
var
Component: TMidiCollectionComponent;
begin
Clear;
Component := TMidiCollectionComponent.Create(nil);
try
Component.FList := Self;
Stream.ReadComponentRes(Component);
Restore;
finally
Component.Free;
end;
end;
 
{ TDXMusic }
 
constructor TDXMusic.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FMidis := TMusicListCollection.Create(Self);
if Assigned(FDXSound) then
FMidis.FDirectSound := FDXSound.DSound.IDSound;
end;
 
procedure TDXMusic.SetMidis(const value: TMusicListCollection);
begin
FMidis.Assign(Value);
end;
 
destructor TDXMusic.Destroy;
begin
FMidis.Free;
inherited Destroy;
end;
 
procedure TDXMusic.SetDXSound(const Value: TDXSound);
begin
FDXSound := Value;
if Assigned(FDXSound) then
FMidis.FDirectSound := FDXSound.DSound.IDSound;
end;
 
initialization
finalization
DirectSoundDrivers.Free;
/VCL_DELPHIX_D6/DXETable.pas
5,15 → 5,36
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, SysUtils, DirectX;
Windows, SysUtils,
{$IfDef StandardDX}
{$ifdef DX7}
DirectDraw, Direct3D,DirectInput,DirectPlay,DirectSound;
{$else}
{$IfDef DX9}
DirectDraw, Direct3D9, Direct3D, D3DX9, {Direct3D8,} DX7toDX8, DirectInput, DirectPlay8, DirectSound;
// {$Else}
// {$IfDef DX81}
// D3DX8, Direct3D8, DirectInput8, DirectXGraphics, DX7toDX8, DirectPlay8;
// {$Else}
// DirectInput, Direct3D, Direct3DRM, DirectPlay;
{$EndIf}
{$EndIf}
{$Else}
DirectX;
{$EndIf}
 
 
function WindowsErrorMsg(ErrorCode: HRESULT): string;
function DDrawErrorMsg(ErrorCode: HRESULT): string;
function D3DErrorMsg(ErrorCode: HRESULT): string;
{$IFDEF D3DRM}
function D3DRMErrorMsg(ErrorCode: HRESULT): string;
{$ENDIF}
function DSoundErrorMsg(ErrorCode: HRESULT): string;
function DInputErrorMsg(ErrorCode: HRESULT): string;
{$IFDEF UseDirectPlay}
function DPlayErrorMsg(ErrorCode: HRESULT): string;
{$EndIf} // UseDirectPlay
 
implementation
 
204,7 → 225,7
Result := WindowsErrorMsg(ErrorCode);
end;
end;
 
{$IFDEF D3DRM}
function D3DRMErrorMsg(ErrorCode: HRESULT): string;
begin
case ErrorCode of
226,7 → 247,7
Result := WindowsErrorMsg(ErrorCode);
end;
end;
 
{$ENDIF}
function DSoundErrorMsg(ErrorCode: HRESULT): string;
begin
case ErrorCode of
271,15 → 292,82
DIERR_INPUTLOST : Result := 'DIERR_INPUTLOST';
DIERR_ACQUIRED : Result := 'DIERR_ACQUIRED';
DIERR_NOTACQUIRED : Result := 'DIERR_NOTACQUIRED';
E_PENDING : Result := 'E_PENDING';
HRESULT(E_PENDING) : Result := 'E_PENDING';
else
Result := WindowsErrorMsg(ErrorCode);
end;
end;
 
{$IFDEF UseDirectPlay}
{$IfDef DX9}
function DPlayErrorMsg(ErrorCode: HRESULT): string;
begin
case ErrorCode of
DPN_OK : Result := 'DPN_OK';
DPNERR_ALREADYINITIALIZED : Result := 'DPNERR_ALREADYINITIALIZED';
//DPNERR_ACCESSDENIED : Result := 'DPNERR_ACCESSDENIED';
//DPNERR_ACTIVEPLAYERS : Result := 'DPNERR_ACTIVEPLAYERS';
DPNERR_BUFFERTOOSMALL : Result := 'DPNERR_BUFFERTOOSMALL';
//DPNERR_CANTADDPLAYER : Result := 'DPNERR_CANTADDPLAYER';
DPNERR_CANTCREATEGROUP : Result := 'DPNERR_CANTCREATEGROUP';
DPNERR_CANTCREATEPLAYER : Result := 'DPNERR_CANTCREATEPLAYER';
//DPNERR_CANTCREATESESSION : Result := 'DPNERR_CANTCREATESESSION';
//DPNERR_CAPSNOTAVAILABLEYET : Result := 'DPNERR_CAPSNOTAVAILABLEYET';
DPNERR_EXCEPTION : Result := 'DPNERR_EXCEPTION';
DPNERR_GENERIC : Result := 'DPNERR_GENERIC';
DPNERR_INVALIDFLAGS : Result := 'DPNERR_INVALIDFLAGS';
DPNERR_INVALIDOBJECT : Result := 'DPNERR_INVALIDOBJECT';
DPNERR_INVALIDPARAM : Result := 'DPNERR_INVALIDPARAM, DPNERR_INVALIDPARAMS';
DPNERR_INVALIDPLAYER : Result := 'DPNERR_INVALIDPLAYER';
DPNERR_INVALIDGROUP : Result := 'DPNERR_INVALIDGROUP';
DPNERR_NOCAPS : Result := 'DPNERR_NOCAPS';
DPNERR_NOCONNECTION : Result := 'DPNERR_NOCONNECTION';
//DPNERR_NOMEMORY : Result := 'DPNERR_NOMEMORY, DPNERR_OUTOFMEMORY';
//DPNERR_NOMESSAGES : Result := 'DPNERR_NOMESSAGES';
//DPNERR_NONAMESERVERFOUND : Result := 'DPNERR_NONAMESERVERFOUND';
//DPNERR_NOPLAYERS : Result := 'DPNERR_NOPLAYERS';
//DPNERR_NOSESSIONS : Result := 'DPNERR_NOSESSIONS';
DPNERR_PENDING : Result := 'DPNERR_PENDING';
//DPNERR_SENDTOOBIG : Result := 'DPNERR_SENDTOOBIG';
//DPNERR_TIMEOUT : Result := 'DPNERR_TIMEOUT';
//DPNERR_UNAVAILABLE : Result := 'DPNERR_UNAVAILABLE';
DPNERR_UNSUPPORTED : Result := 'DPNERR_UNSUPPORTED';
//DPNERR_BUSY : Result := 'DPNERR_BUSY';
DPNERR_USERCANCEL : Result := 'DPNERR_USERCANCEL';
DPNERR_NOINTERFACE : Result := 'DPNERR_NOINTERFACE';
//DPNERR_CANNOTCREATESERVER : Result := 'DPNERR_CANNOTCREATESERVER';
DPNERR_PLAYERLOST : Result := 'DPNERR_PLAYERLOST';
//DPNERR_SESSIONLOST : Result := 'DPNERR_SESSIONLOST';
DPNERR_UNINITIALIZED : Result := 'DPNERR_UNINITIALIZED';
//DPNERR_NONEWPLAYERS : Result := 'DPNERR_NONEWPLAYERS';
DPNERR_INVALIDPASSWORD : Result := 'DPNERR_INVALIDPASSWORD';
DPNERR_CONNECTING : Result := 'DPNERR_CONNECTING';
//DPNERR_BUFFERTOOLARGE : Result := 'DPNERR_BUFFERTOOLARGE';
//DPNERR_CANTCREATEPROCESS : Result := 'DPNERR_CANTCREATEPROCESS';
//DPNERR_APPNOTSTARTED : Result := 'DPNERR_APPNOTSTARTED';
DPNERR_INVALIDINTERFACE : Result := 'DPNERR_INVALIDINTERFACE';
//DPNERR_NOSERVICEPROVIDER : Result := 'DPNERR_NOSERVICEPROVIDER';
//DPNERR_UNKNOWNAPPLICATION : Result := 'DPNERR_UNKNOWNAPPLICATION';
//DPNERR_NOTLOBBIED : Result := 'DPNERR_NOTLOBBIED';
//DPNERR_SERVICEPROVIDERLOADED : Result := 'DPNERR_SERVICEPROVIDERLOADED';
DPNERR_NOTREGISTERED : Result := 'DPNERR_NOTREGISTERED';
// Security related errors
//DPNERR_AUTHENTICATIONFAILED : Result := 'DPNERR_AUTHENTICATIONFAILED';
//DPNERR_CANTLOADSSPI : Result := 'DPNERR_CANTLOADSSPI';
//DPNERR_ENCRYPTIONFAILED : Result := 'DPNERR_ENCRYPTIONFAILED';
//DPNERR_SIGNFAILED : Result := 'DPNERR_SIGNFAILED';
//DPNERR_CANTLOADSECURITYPACKAGE : Result := 'DPNERR_CANTLOADSECURITYPACKAGE';
//DPNERR_ENCRYPTIONNOTSUPPORTED : Result := 'DPNERR_ENCRYPTIONNOTSUPPORTED';
//DPNERR_CANTLOADCAPI : Result := 'DPNERR_CANTLOADCAPI';
//DPNERR_NOTLOGGEDIN : Result := 'DPNERR_NOTLOGGEDIN';
//DPNERR_LOGONDENIED : Result := 'DPNERR_LOGONDENIED';
else
Result := WindowsErrorMsg(ErrorCode);
end;
end;
{$Else}
function DPlayErrorMsg(ErrorCode: HRESULT): string;
begin
case ErrorCode of
DP_OK : Result := 'DP_OK';
DPERR_ALREADYINITIALIZED : Result := 'DPERR_ALREADYINITIALIZED';
DPERR_ACCESSDENIED : Result := 'DPERR_ACCESSDENIED';
342,5 → 430,6
Result := WindowsErrorMsg(ErrorCode);
end;
end;
 
{$EndIf}
{$EndIf} // UseDirectPlay
end.
/VCL_DELPHIX_D6/DXPlay.pas
1,13 → 1,33
unit DXPlay;
 
{$INCLUDE DelphiXcfg.inc}
 
{$IFNDEF UseDirectPlay}
// If you want to use DXPlay.pas, please enable the IFDEF UseDirectPlay in DelphiXcfg.inc
interface
implementation
{$ELSE} // !UseDirectPlay
 
{$INCLUDE DelphiXcfg.inc}
interface
 
uses
Windows, SysUtils, Classes, Forms, DXClass, ActiveX, DirectX, DXETable;
Windows, SysUtils, Classes, Forms, DXClass, ActiveX, DXETable,
{$IfDef StandardDX}
DirectDraw,
// Delphi 2010 cannot be use DirectPlay8 because structure was not rewriten
// {$IfDef DX9}
// DirectPlay8, DX7toDX8;
// {$Else}
DirectPlay; //old wersion, current in directory
// {$EndIf}
{$Else}
DirectX;
{$EndIf}
type
{$IfDef DX9}
TDPID = DWORD;
{$EndIf}
 
{ TDXPlayPlayer }
 
88,7 → 108,8
 
TCustomDXPlay = class(TComponent)
private
FDPlay: IDirectPlay4A;
FDPlay: //{$IfDef DX7}
IDirectPlay4A;//{$Else}IDirectPlay8Address{$EndIf};
FGUID: string;
FIsHost: Boolean;
FLocalPlayer: TDXPlayPlayer;
116,7 → 137,11
FAsync: Boolean;
FAsyncSupported: Boolean;
procedure ChangeDPlay;
procedure CreateDPlayWithoutDialog(out DPlay: IDirectPlay4A; const ProviderName: string);
procedure CreateDPlayWithoutDialog(out DPlay:
//{$IfDef DX7}
IDirectPlay4A;
//{$Else}IDirectPlay8Address{$EndIf};
const ProviderName: string);
function OpenDPlayWithLobby(out Name: string): Boolean;
function OpenDPlayWithoutLobby(out Name: string): Boolean;
function OpenDPlayWithoutLobby2(const NewSession: Boolean; const ProviderName, SessionName, PlayerName: string): Boolean;
191,7 → 216,10
function DXPlayMessageType(P: Pointer): DWORD;
 
function DXPlayStringToGUID(const S: string): TGUID;
function DXDirectPlayCreate(const lpGUID: TGUID; out lplpDP: IDirectPlay;
function DXDirectPlayCreate(const lpGUID: TGUID; out lplpDP:
//{$IfDef DX7}
IDirectPlay;
//{$Else}IDirectPlay8Server{$EndIf};
pUnk: IUnknown): HRESULT;
 
implementation
224,7 → 252,10
CoTaskMemFree(P);
end;
 
function DXDirectPlayCreate(const lpGUID: TGUID; out lplpDP: IDirectPlay;
function DXDirectPlayCreate(const lpGUID: TGUID; out lplpDP:
//{$IfDef DX7}
IDirectPlay;
//{$Else}IDirectPlay8Server{$EndIf};
pUnk: IUnknown): HRESULT;
type
TDirectPlayCreate= function(const lpGUID: TGUID; out lplpDP: IDirectPlay; pUnk: IUnknown): HRESULT; stdcall;
232,9 → 263,27
Result := TDirectPlayCreate(DXLoadLibrary('DPlayX.dll', 'DirectPlayCreate'))
(lpGUID, lplpDP, pUnk);
end;
{$IFDEF UNICODE}
function DXDirectPlayEnumerate(lpEnumDPCallback: TDPEnumDPCallbackW; lpContext: Pointer): HRESULT;
type
TDirectPlayEnumerateW= function(lpEnumDPCallback: TDPEnumDPCallbackW; lpContext: Pointer): HRESULT; stdcall;
begin
Result := TDirectPlayEnumerateW(DXLoadLibrary('DPlayX.dll', 'DirectPlayEnumerateW'))
(lpEnumDPCallback, lpContext);
end;
 
function DXDirectPlayEnumerateA(lpEnumDPCallback: TDPEnumDPCallbackA; lpContext: Pointer): HRESULT;
function DXDirectPlayLobbyCreate(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobbyW;
lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HRESULT;
type
TDirectPlayLobbyCreateW = function(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobbyW;
lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HRESULT; stdcall;
begin
Result := TDirectPlayLobbyCreateW(DXLoadLibrary('DPlayX.dll', 'DirectPlayLobbyCreateW'))
(lpguidSP, lplpDPL, lpUnk, lpData, dwDataSize);
end;
{$ELSE}
function DXDirectPlayEnumerate(lpEnumDPCallback: TDPEnumDPCallbackA; lpContext: Pointer): HRESULT;
type
TDirectPlayEnumerateA= function(lpEnumDPCallback: TDPEnumDPCallbackA; lpContext: Pointer): HRESULT; stdcall;
begin
Result := TDirectPlayEnumerateA(DXLoadLibrary('DPlayX.dll', 'DirectPlayEnumerateA'))
241,7 → 290,7
(lpEnumDPCallback, lpContext);
end;
 
function DXDirectPlayLobbyCreateA(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobbyA;
function DXDirectPlayLobbyCreate(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobbyA;
lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HRESULT;
type
TDirectPlayLobbyCreateA = function(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobbyA;
250,7 → 299,7
Result := TDirectPlayLobbyCreateA(DXLoadLibrary('DPlayX.dll', 'DirectPlayLobbyCreateA'))
(lpguidSP, lplpDPL, lpUnk, lpData, dwDataSize);
end;
 
{$ENDIF}
{ TDXPlayPlayers }
 
constructor TDXPlayPlayers.Create;
316,10 → 365,16
end;
 
var
{$IFDEF UNICODE}
Lobby1: IDirectPlayLobbyW;
Lobby: IDirectPlayLobby2W;
DPlay: IDirectPlay4W;
{$ELSE}
Lobby1: IDirectPlayLobbyA;
Lobby: IDirectPlayLobby2A;
DPlay: IDirectPlay4A;
{$ENDIF}
DPlay1: IDirectPlay;
DPlay: IDirectPlay4A;
lpAddress: Pointer;
dwAddressSize: DWORD;
begin
327,16 → 382,16
begin
FModemNames := TStringList.Create;
try
if DXDirectPlayLobbyCreateA(PGUID(nil)^, Lobby1, nil, nil, 0)<>0 then
if DXDirectPlayLobbyCreate(PGUID(nil)^, Lobby1, nil, nil, 0)<>0 then
raise EDXPlayError.CreateFmt(SCannotInitialized, [SDirectPlay]);
Lobby := Lobby1 as IDirectPlayLobby2A;
Lobby := Lobby1 as {$IFDEF UNICODE}IDirectPlayLobby2W{$ELSE}IDirectPlayLobby2A{$ENDIF};
 
if DXDirectPlayCreate(DPSPGUID_MODEM, DPlay1, nil)<>0 then
raise EDXPlayError.CreateFmt(SCannotInitialized, [SDirectPlay]);
DPlay := DPlay1 as IDirectPlay4A;
DPlay := DPlay1 as {$IFDEF UNICODE}IDirectPlay4W{$ELSE}IDirectPlay4A{$ENDIF};
 
{ get size of player address for all players }
if DPlay.GetPlayerAddress(DPID_ALLPLAYERS, nil^, dwAddressSize)<>DPERR_BUFFERTOOSMALL then
if DPlay.GetPlayerAddress(DPID_ALLPLAYERS, nil, dwAddressSize)<>DPERR_BUFFERTOOSMALL then
raise EDXPlayError.Create(SDXPlayModemListCannotBeAcquired);
 
GetMem(lpAddress, dwAddressSize);
344,7 → 399,7
FillChar(lpAddress^, dwAddressSize, 0);
 
{ get the address }
if DPlay.GetPlayerAddress(DPID_ALLPLAYERS, lpAddress^, dwAddressSize)<>0 then
if DPlay.GetPlayerAddress(DPID_ALLPLAYERS, lpAddress, dwAddressSize)<>0 then
raise EDXPlayError.Create(SDXPlayModemListCannotBeAcquired);
 
{ get modem strings from address and put them in the combo box }
470,12 → 525,12
 
try
repeat
hr := FDPlay.Receive(idFrom, idTo, DPRECEIVE_ALL, lpvMsgBuffer^, dwMsgBufferSize);
hr := FDPlay.Receive(idFrom, idTo, DPRECEIVE_ALL, lpvMsgBuffer, dwMsgBufferSize);
 
if hr=DPERR_BUFFERTOOSMALL then
begin
ReAllocMem(lpvMsgBuffer, dwMsgBufferSize);
hr := FDPlay.Receive(idFrom, idTo, DPRECEIVE_ALL, lpvMsgBuffer^, dwMsgBufferSize);
hr := FDPlay.Receive(idFrom, idTo, DPRECEIVE_ALL, lpvMsgBuffer, dwMsgBufferSize);
end;
 
if (hr=0) and (dwMsgBufferSize>=SizeOf(TDPMSG_GENERIC)) then
497,8 → 552,13
 
with Msg_CreatePlayerOrGroup.dpnName do
begin
{$IFDEF UNICODE}
if lpszShortNameW<>nil then
Player.FName := lpszShortNameW;
{$ELSE}
if lpszShortNameA<>nil then
Player.FName := lpszShortNameA;
{$ENDIF}
end;
 
DoAddPlayer(Player);
604,7 → 664,7
 
function TCustomDXPlay.GetProviders: TStrings;
 
function EnumProviderCallback(const lpguidSP: TGUID; lpSPName: LPSTR;
function EnumProviderCallback(const lpguidSP: TGUID; lpSPName: {$IFDEF UNICODE}LPCTSTR{$ELSE}LPSTR{$ENDIF};
dwMajorVersion: DWORD; dwMinorVersion: DWORD; lpContext: Pointer):
BOOL; stdcall;
var
621,7 → 681,7
begin
FProviders := TStringList.Create;
try
DXDirectPlayEnumerateA(@EnumProviderCallback, FProviders);
DXDirectPlayEnumerate(@EnumProviderCallback, FProviders);
except
FProviders.Free; FProviders := nil;
raise;
646,8 → 706,11
 
Guid := New(PGUID);
Move(lpThisSD.guidInstance, Guid^, SizeOf(TGUID));
{$IFDEF UNICODE}
TStrings(lpContext).AddObject(lpThisSD.lpszSessionNameW, TObject(Guid));
{$ELSE}
TStrings(lpContext).AddObject(lpThisSD.lpszSessionNameA, TObject(Guid));
 
{$ENDIF}
Result := True;
end;
 
698,8 → 761,13
ProviderGUID: TGUID;
addressElements: array[0..15] of TDPCompoundAddressElement;
dwElementCount: Integer;
{$IFDEF UNICODE}
Lobby1: IDirectPlayLobbyW;
Lobby: IDirectPlayLobby2W;
{$ELSE}
Lobby1: IDirectPlayLobbyA;
Lobby: IDirectPlayLobby2A;
{$ENDIF}
lpAddress: Pointer;
dwAddressSize: DWORD;
begin
709,9 → 777,9
ProviderGUID := PGUID(Providers.Objects[i])^;
 
{ DirectPlay address making }
if DXDirectPlayLobbyCreateA(PGUID(nil)^, Lobby1, nil, nil, 0)<>0 then
if DXDirectPlayLobbyCreate(PGUID(nil)^, Lobby1, nil, nil, 0)<>0 then
raise EDXPlayError.CreateFmt(SCannotInitialized, [SDirectPlay]);
Lobby := Lobby1 as IDirectPlayLobby2A;
Lobby := Lobby1 as {$IFDEF UNICODE}IDirectPlayLobby2W{$ELSE}IDirectPlayLobby2A{$ENDIF};
 
FillChar(addressElements, SizeOf(addressElements), 0);
dwElementCount := 0;
760,7 → 828,7
end;
end;
 
if Lobby.CreateCompoundAddress(addressElements[0], dwElementCount, nil^, dwAddressSize)<>DPERR_BUFFERTOOSMALL then
if Lobby.CreateCompoundAddress(addressElements[0], dwElementCount, nil, dwAddressSize)<>DPERR_BUFFERTOOSMALL then
raise EDXPlayError.CreateFmt(SCannotInitialized, [SDirectPlay]);
 
GetMem(lpAddress, dwAddressSize);
767,7 → 835,7
try
FillChar(lpAddress^, dwAddressSize, 0);
 
if Lobby.CreateCompoundAddress(addressElements[0], dwElementCount, lpAddress^, dwAddressSize)<>0 then
if Lobby.CreateCompoundAddress(addressElements[0], dwElementCount, lpAddress, dwAddressSize)<>0 then
raise EDXPlayError.CreateFmt(SCannotInitialized, [SDirectPlay]);
 
{ DirectPlay initialization }
837,8 → 905,13
 
with lpName do
begin
{$IFDEF UNICODE}
if lpszShortNameW<>nil then
Player.FName := lpszShortNameW;
{$ELSE}
if lpszShortNameA<>nil then
Player.FName := lpszShortNameA;
{$ENDIF}
end;
 
Result := True;
862,11 → 935,11
FLocalPlayer := TDXPlayPlayer.Create(FPlayers);
FLocalPlayer.FName := NameS;
 
if FDPlay.CreatePlayer(FLocalPlayer.FID, Name, FRecvEvent[0], nil^, 0, 0)<>DP_OK then
if FDPlay.CreatePlayer(FLocalPlayer.FID, @Name, FRecvEvent[0], nil, 0, 0)<>DP_OK then
raise EDXPlayError.CreateFmt(SCannotOpened, [FSessionName]);
 
{ Player enumeration }
FDPlay.EnumPlayers(PGUID(nil)^, @EnumPlayersCallback2, Self, DPENUMPLAYERS_REMOTE);
FDPlay.EnumPlayers(PGUID(nil), @EnumPlayersCallback2, Self, DPENUMPLAYERS_REMOTE);
 
FIsHost := FPlayers.Count=1;
 
875,7 → 948,7
 
{ Thread start }
FRecvThread := TDXPlayRecvThread.Create(Self);
FRecvThread.Resume;
FRecvThread.{$IFDEF VER14UP}Start{$ELSE}Resume{$ENDIF};
except
Close;
raise;
900,21 → 973,25
function TCustomDXPlay.OpenDPlayWithLobby(out Name: string): Boolean;
var
DPlay1: IDirectPlay2;
{$IFDEF UNICODE}
Lobby: IDirectPlayLobbyW;
{$ELSE}
Lobby: IDirectPlayLobbyA;
{$ENDIF}
dwSize: DWORD;
ConnectionSettings: PDPLConnection;
begin
Result := False;
 
if DXDirectPlayLobbyCreateA(PGUID(nil)^, Lobby, nil, nil, 0)<>0 then
if DXDirectPlayLobbyCreate(PGUID(nil)^, Lobby, nil, nil, 0)<>0 then
Exit;
 
if Lobby.GetConnectionSettings(0, PDPLConnection(nil)^, dwSize)<>DPERR_BUFFERTOOSMALL then
if Lobby.GetConnectionSettings(0, PDPLConnection(nil), dwSize)<>DPERR_BUFFERTOOSMALL then
Exit;
 
GetMem(ConnectionSettings, dwSize);
try
if Lobby.GetConnectionSettings(0, ConnectionSettings^, dwSize)<>0 then
if Lobby.GetConnectionSettings(0, ConnectionSettings, dwSize)<>0 then
Exit;
 
with ConnectionSettings^.lpSessionDesc^ do
933,14 → 1010,24
 
with ConnectionSettings.lpSessionDesc^ do
begin
{$IFDEF UNICODE}
if lpszSessionNameW<>nil then
FSessionName := lpszSessionNameW;
{$ELSE}
if lpszSessionNameA<>nil then
FSessionName := lpszSessionNameA;
{$ENDIF}
end;
 
with ConnectionSettings.lpPlayerName^ do
begin
{$IFDEF UNICODE}
if lpszShortNameW<>nil then
Name := lpszShortNameW;
{$ELSE}
if lpszShortNameA<>nil then
Name := lpszShortNameA;
{$ENDIF}
end;
finally
FreeMem(ConnectionSettings);
995,7 → 1082,11
FillChar(dpDesc, SizeOf(dpDesc), 0);
dpDesc.dwSize := SizeOf(dpDesc);
dpDesc.dwFlags := DPSESSION_MIGRATEHOST or DPSESSION_KEEPALIVE;
dpDesc.lpszSessionNameA := PChar(SessionName);
{$IFDEF UNICODE}
dpDesc.lpszSessionNameW := {$IFDEF VER12UP}PChar{$ELSE}PWideChar{$ENDIF}(SessionName);
{$ELSE}
dpDesc.lpszSessionNameA := PAnsiChar(SessionName);
{$ENDIF}
dpDesc.guidApplication := DXPlayStringToGUID(GUID);
dpDesc.dwMaxPlayers := MaxPlayers;
 
1079,7 → 1170,7
DoMessage(FLocalPlayer, Data, DataSize);
end else
if FAsync and FAsyncSupported then
FDPlay.SendEx(FLocalPlayer.ID, ToID, DPSEND_GUARANTEED or DPSEND_ASYNC, Data^, DataSize, 0, 0, nil, nil)
FDPlay.SendEx(FLocalPlayer.ID, ToID, DPSEND_GUARANTEED or DPSEND_ASYNC, Data, DataSize, 0, 0, nil, nil)
else
FDPlay.Send(FLocalPlayer.ID, ToID, DPSEND_GUARANTEED, Data^, DataSize);
end;
1098,7 → 1189,7
{ Ž©•ªˆ¶‚̃ƒbƒZ[ƒW }
DoMessage(FLocalPlayer, Data, DataSize);
end else
FDPlay.SendEx(FLocalPlayer.ID, ToID, dwFlags, Data^, DataSize,
FDPlay.SendEx(FLocalPlayer.ID, ToID, dwFlags, Data, DataSize,
0, 0, nil, @Result); // 0 ˆÈŠO‚̓Tƒ|[ƒg‚µ‚È‚¢ƒfƒoƒCƒX‚ ‚é‚Ì‚ÅŽg‚í‚È‚¢
end;
 
1143,4 → 1234,6
CoInitialize(nil);
finalization
CoUninitialize;
end.
{$ENDIF} // UseDirectPlay
 
end.
/VCL_DELPHIX_D6/DXPlayFm.pas
1,10 → 1,23
unit DXPlayFm;
 
{$INCLUDE DelphiXcfg.inc}
 
{$IFNDEF UseDirectPlay}
// If you want to use DXPlayFm.pas, please enable the IFDEF UseDirectPlay in DelphiXcfg.inc
interface
implementation
{$ELSE} // !UseDirectPlay
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DirectX, DXPlay, ActiveX, DXETable, DIB;
StdCtrls, ExtCtrls, DXPlay, ActiveX, DXETable, DIB,
{$IfDef StandardDX}
DirectDraw, DirectPlay;
{$Else}
DirectX;
{$EndIf}
 
type
TDelphiXDXPlayForm = class(TForm)
54,7 → 67,9
private
FProviderGUID: TGUID;
public
DPlay: IDirectPlay4A;
DPlay: //{$IfDef DX7}
IDirectPlay4A;
//{$Else}IDirectPlay8Address{$EndIf};
DXPlay: TCustomDXPlay;
PlayerName: string;
ProviderName: string;
104,12 → 119,15
 
procedure InitDirectPlay;
var
DPlay1: IDirectPlay;
DPlay1: //{$IfDef DX7}
IDirectPlay;
//{$Else}IDirectPlay8Server{$EndIf};
begin
if DXDirectPlayCreate(FProviderGUID, DPlay1, nil)<>0 then
raise EDXPlayError.CreateFmt(SCannotInitialized, [SDirectPlay]);
 
DPlay := DPlay1 as IDirectPlay4A;
DPlay := DPlay1 as //{$IfDef DX7}
IDirectPlay4A//{$Else}IDirectPlay8Address{$EndIf}
end;
 
function EnumSessionsCallback(const lpThisSD: TDPSessionDesc2;
125,8 → 143,11
 
Guid := New(PGUID);
Move(lpThisSD.guidInstance, Guid^, SizeOf(TGUID));
{$IFDEF UNICODE}
TDelphiXDXPlayForm(lpContext).JoinGameSessionList.Items.AddObject(lpThisSD.lpszSessionNameW, Pointer(Guid));
{$ELSE}
TDelphiXDXPlayForm(lpContext).JoinGameSessionList.Items.AddObject(lpThisSD.lpszSessionNameA, Pointer(Guid));
 
{$ENDIF}
Result := True;
end;
 
232,7 → 253,11
with lpName do
begin
if lpszShortNameA<>nil then
{$IFDEF UNICODE}
TDelphiXDXPlayForm(lpContext).JoinGamePlayerList.Items.Add(lpszShortNameW);
{$ELSE}
TDelphiXDXPlayForm(lpContext).JoinGamePlayerList.Items.Add(lpszShortNameA);
{$ENDIF}
end;
 
Result := True;
264,7 → 289,7
hr := TempDPlay.Open(dpDesc, DPOPEN_JOIN);
if hr<>0 then Exit;
try
TempDPlay.EnumPlayers(PGUID(nil)^, @EnumPlayersCallback2, Self, DPENUMPLAYERS_REMOTE);
TempDPlay.EnumPlayers(PGUID(nil), @EnumPlayersCallback2, Self, DPENUMPLAYERS_REMOTE);
finally
TempDPlay.Close;
end;
411,5 → 436,7
end;
end;
 
{$ENDIF} // UseDirectPlay
 
end.
 
/VCL_DELPHIX_D6/DXReg.pas
1,53 → 1,1302
unit DXReg;
 
 
interface
 
 
{$I DelphiXcfg.inc}
{$WARNINGS OFF}
uses
Windows, SysUtils, Classes, Forms, Dialogs, Graphics, TypInfo,
DXDraws, DXSounds, DIB, Wave, DXInput, DXPlay, DXSprite,
DXClass;
Controls, StdCtrls, ExtCtrls, Buttons,
{$IFDEF D3DRM}Colli3DX, {$ENDIF}
{$IFNDEF VER6UP}DsgnIntf,
{$ELSE}Designintf, DesignEditors, VCLEditors, PropertyCategories,
{$ENDIF}
DXDraws, DXSounds, DIB, DXWave, DXInput, DXPlay, DXSprite, DXClass;
 
type
 
{ TDXDrawDisplayProperty }
 
TDXDrawDisplayProperty = class(TClassProperty)
public
function GetAttributes: TPropertyAttributes; override;
function GetValue: string; override;
procedure GetValues(Proc: TGetStrProc); override;
procedure SetValue(const Value: string); override;
end;
 
{ TDIBProperty }
 
TDIBProperty = class(TPropertyEditor)
public
procedure Edit; override;
function GetValue: string; override;
function GetAttributes: TPropertyAttributes; override;
end;
 
{ TDXDIBEditor }
 
TDXDIBEditor = class(TComponentEditor)
public
procedure Edit; override;
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
 
{ TPictureCollectionItem_PictureProperty }
 
TPictureCollectionItem_PictureProperty = class(TPropertyEditor)
public
procedure Edit; override;
function GetValue: string; override;
function GetAttributes: TPropertyAttributes; override;
end;
 
{ TDXImageListEditor }
 
TDXImageListEditor = class(TComponentEditor)
private
procedure ListBox1DblClick(Sender: TObject);
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
 
{ TDXSpriteEngineEditor}
 
TDXSpriteEngineEditor = class(TComponentEditor)
private
procedure ListBox1DblClick(Sender: TObject);
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
 
{ TWaveProperty }
 
TWaveProperty = class(TPropertyEditor)
public
procedure Edit; override;
function GetValue: string; override;
function GetAttributes: TPropertyAttributes; override;
end;
 
{ TDXWaveEditor }
 
TDXWaveEditor = class(TComponentEditor)
public
procedure Edit; override;
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
 
{ TDXWaveListEditor }
 
TDXWaveListEditor = class(TComponentEditor)
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
 
{ TForceFeedbackEffectsProperty }
 
TForceFeedbackEffectsProperty = class(TClassProperty)
public
procedure Edit; override;
function GetValue: string; override;
function GetAttributes: TPropertyAttributes; override;
end;
 
{ TDXInputEditor }
 
TDXInputEditor = class(TComponentEditor)
public
procedure Edit; override;
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
 
{ TGUIDProperty }
 
TGUIDProperty = class(TStringProperty)
public
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
end;
 
{ TSpriteProperty }
 
TSpriteProperty = class(TClassProperty)
public
procedure Edit; override;
function GetValue: string; override;
function GetAttributes: TPropertyAttributes; override;
end;
 
{ TMidiProperty }
 
TMidiProperty = class(TClassProperty)
public
procedure Edit; override;
function GetValue: string; override;
function GetAttributes: TPropertyAttributes; override;
end;
 
TMidiEditor = class(TDefaultEditor)
public
{$IFDEF VER6UP}
procedure EditProperty(const Prop: IProperty; var Continue: Boolean); override;
{$ELSE}
procedure EditProperty(PropertyEditor: TPropertyEditor;
var continue, FreeEditor: Boolean); override;
{$ENDIF}
end;
 
{ TDXMidiListEditor }
 
TDXMidiListEditor = class(TComponentEditor)
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
 
{ Trace editor}
 
TDXDrawEditor = class(TComponentEditor)
public
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
 
procedure Register;
 
 
implementation
 
uses DXPictEdit, DXWaveEdit, DXFFBEdit, DXInptEdit, DXGUIDEdit, DXSpriteEdit,
DXMidiEdit, DXDIBEffectEdit, {$IFDEF VER4UP}DXGlueItEdit,{$ENDIF} DXPathEdit;
 
const
SNone = '(None)';
 
SSettingImage = '&Image...';
SSettingWave = '&Wave...';
SDXGFileFilter = 'DXG file(*.dxg)|*.dxg|All files(*.*)|*.*';
SDXGOpenFileFilter = 'DXG file(*.dxg)|*.dxg|Bitmap file(*.bmp)|*.bmp|All files(*.*)|*.*';
SDXWFileFilter = 'DXW file(*.dxw)|*.dxw|All files(*.*)|*.*';
SDXWFileFilter = 'DXW file(*.dxw)|*.dxg|All files(*.*)|*.*';
SDXWOpenFileFilter = 'DXW file(*.dxw)|*.dxw|Wave file(*.wav)|*.wav|All files(*.*)|*.*';
SDXMFileFilter = 'DXM file(*.dxm)|*.dxm|All files(*.*)|*.*';
SDXMOpenFileFilter = 'DXM file(*.dxm)|*.dxm|Midi file(*.mid)|*.mid|All files(*.*)|*.*';
 
SSinglePlayer = '&Single player';
SMultiPlayer1 = 'Multi player &1';
SMultiPlayer2 = 'Multi player &2';
 
SOpen = '&Open...';
SSave = '&Save..';
SSave = '&Save...';
 
procedure Register;
begin
RegisterPropertyEditor(TypeInfo(TDXDrawDisplay), nil, '',
TDXDrawDisplayProperty);
 
RegisterPropertyEditor(TypeInfo(TDIB), nil, '', TDIBProperty);
RegisterComponentEditor(TCustomDXDIB, TDXDIBEditor);
 
RegisterPropertyEditor(TypeInfo(TPicture), TPictureCollectionItem, 'Picture', TPictureCollectionItem_PictureProperty);
RegisterComponentEditor(TCustomDXImageList, TDXImageListEditor);
 
RegisterPropertyEditor(TypeInfo(TWave), nil, '', TWaveProperty);
RegisterComponentEditor(TCustomDXWave, TDXWaveEditor);
 
RegisterComponentEditor(TCustomDXWaveList, TDXWaveListEditor);
 
RegisterPropertyEditor(TypeInfo(TForceFeedbackEffects), nil, '', TForceFeedbackEffectsProperty);
 
RegisterComponentEditor(TCustomDXInput, TDXInputEditor);
 
{$IFDEF UseDirectPlay}
RegisterPropertyEditor(TypeInfo(string), TCustomDXPlay, 'GUID', TGUIDProperty);
{$ENDIF} // UseDirectPlay
 
RegisterPropertyEditor(TypeInfo(TImageSprite), NIL, '', TSpriteProperty);
RegisterPropertyEditor(TypeInfo(TImageSpriteEx), NIL, '', TSpriteProperty);
RegisterPropertyEditor(TypeInfo(TSprite), NIL, '', TSpriteProperty);
RegisterPropertyEditor(TypeInfo(TBackgroundSprite), NIL, '', TSpriteProperty);
 
RegisterPropertyEditor(TypeInfo(TMusicDataProp), nil, 'MIDI', TMidiProperty);
RegisterComponentEditor(TDXMusic, TDXMidiListEditor);
RegisterComponentEditor(TDXSpriteEngine, TDXSpriteEngineEditor);
 
RegisterComponents('DelphiX',
[TDXDraw,
TDXDIB,
TDXImageList,
{$IFDEF DX3D_deprecated}
TDX3D,
{$ENDIF}
TDXSound,
TDXWave,
TDXWaveList,
TDXInput,
{$IFDEF UseDirectPlay}
TDXPlay,
{$ENDIF} // UseDirectPlay
TDXSpriteEngine,
TDXTimer,
TDXPaintBox]);
TDXPaintBox,
TDXFont,
TDXPowerFont,
TDXMusic
]);
RegisterComponentEditor(TCustomDXDraw, TDXDrawEditor);
end;
 
end.
{ TDXDrawDisplayProperty }
 
function TDXDrawDisplayProperty.GetAttributes: TPropertyAttributes;
begin
Result := inherited GetAttributes + [paValueList] - [paReadOnly];
end;
 
const
SDisplayMode = '%dx%dx%d';
 
function TDXDrawDisplayProperty.GetValue: string;
begin
with TDXDrawDisplay(GetOrdValue) do
Result := Format(SDisplayMode, [Width, Height, BitCount]);
end;
 
procedure TDXDrawDisplayProperty.GetValues(Proc: TGetStrProc);
const
List: array[0..2] of TPoint = (
(X: 640; Y: 480),
(X: 800; Y: 600),
(X: 1024; Y: 768));
var
BitCount, i: Integer;
begin
for i := Low(List) to High(List) do
for BitCount := 1 to 3 do
Proc(Format(SDisplayMode, [List[i].x, List[i].y, BitCount * 8]));
end;
 
procedure TDXDrawDisplayProperty.SetValue(const Value: string);
var
s: string;
i, AWidth, AHeight, ABitCount: Integer;
begin
s := Value;
 
i := Pos('x', s);
AWidth := StrToInt(Copy(s, 1, i - 1));
s := Copy(s, i + 1, Length(s));
 
i := Pos('x', s);
AHeight := StrToInt(Copy(s, 1, i - 1));
s := Copy(s, i + 1, Length(s));
 
ABitCount := StrToInt(s);
 
with TDXDrawDisplay(GetOrdValue) do
begin
Width := AWidth;
Height := AHeight;
BitCount := ABitCount;
end;
 
SetOrdValue(GetOrdValue);
end;
 
{ TDIBProperty }
 
procedure TDIBProperty.Edit;
var
Form: TDelphiXPictureEditForm;
begin
Form := TDelphiXPictureEditForm.Create(nil);
try
Form.ViewBox.Picture.Assign(TDIB(GetOrdValue));
Form.DIBClassOnly := True;
Form.ShowModal;
if Form.Tag <> 0 then
begin
SetOrdValue(Integer(Form.ViewBox.Picture.Graphic));
Designer.Modified;
end;
finally
Form.Free;
end;
end;
 
function TDIBProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paReadOnly];
end;
 
function TDIBProperty.GetValue: string;
begin
if TDIB(GetOrdValue).Size = 0 then
Result := SNone
else
Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
end;
 
{ TDXDIBEditor }
 
procedure TDXDIBEditor.Edit;
var
Form: TDelphiXPictureEditForm;
begin
Form := TDelphiXPictureEditForm.Create(nil);
try
Form.ViewBox.Picture.Assign(TCustomDXDIB(Component).DIB);
Form.DIBClassOnly := True;
Form.ShowModal;
if Form.Tag <> 0 then
begin
TCustomDXDIB(Component).DIB.Assign(TGraphic(Form.ViewBox.Picture.Graphic));
Designer.Modified;
end;
finally
Form.Free;
end;
end;
 
procedure TDXDIBEditor.ExecuteVerb(Index: Integer);
begin
case Index of
0: Edit;
end;
end;
 
function TDXDIBEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := SSettingImage;
end;
end;
 
function TDXDIBEditor.GetVerbCount: Integer;
begin
Result := 1;
end;
 
{ TPictureCollectionItem_PictureProperty }
 
procedure TPictureCollectionItem_PictureProperty.Edit;
var
Form: TDelphiXPictureEditForm;
Item: TPictureCollectionItem;
TempDIB: TDIB;
begin
Form := TDelphiXPictureEditForm.Create(nil);
try
Form.ViewBox.Picture := TPicture(GetOrdValue);
Form.ShowModal;
if Form.Tag <> 0 then
begin
SetOrdValue(Integer(Form.ViewBox.Picture));
 
Item := GetComponent(0) as TPictureCollectionItem;
if Item.Picture.Graphic <> nil then
begin
TempDIB := TDIB.Create;
try
TempDIB.SetSize(1, 1, 24);
TempDIB.Canvas.Draw(0, 0, Item.Picture.Graphic);
Item.TransparentColor := TempDIB.Pixels[0, 0];
finally
TempDIB.Free;
end;
end;
Designer.Modified;
end;
finally
Form.Free;
end;
end;
 
function TPictureCollectionItem_PictureProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paReadOnly];
end;
 
function TPictureCollectionItem_PictureProperty.GetValue: string;
begin
if (TPicture(GetOrdValue).Graphic = nil) or (TPicture(GetOrdValue).Graphic.Empty) then
Result := SNone
else
Result := Format('(%s)', [TPicture(GetOrdValue).Graphic.ClassName]);
end;
 
{ dialog }
function CreateListBox(DblClck: TNotifyEvent; out lstbx: TListBox): TForm;
var
Panel1: TPanel;
Panel2: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
begin
Result := TForm.Create(nil);
Panel1 := TPanel.Create(Result);
lstbx := TListBox.Create(Result);
Panel2 := TPanel.Create(Result);
BitBtn1 := TBitBtn.Create(Result);
BitBtn2 := TBitBtn.Create(Result);
with Result do
begin
Name := 'Form12';
Left := 0;
Top := 0;
BorderStyle := bsDialog;
Caption := 'Select Item';
ClientHeight := 206;
ClientWidth := 228;
Color := clBtnFace;
Font.Charset := DEFAULT_CHARSET;
Font.Color := clWindowText;
Font.Height := -11;
Font.Name := 'Tahoma';
Font.Style := [];
Position := poScreenCenter;
PixelsPerInch := 96;
end;
with Panel1 do
begin
Name := 'Panel1';
Parent := Result;
Left := 0;
Top := 0;
Width := 228;
Height := 165;
Align := alClient;
BevelOuter := bvNone;
BorderWidth := 4;
Caption := '';
TabOrder := 0;
end;
with lstbx do
begin
Name := 'ListBox1';
Parent := Panel1;
Left := 4;
Top := 4;
Width := 220;
Height := 157;
Align := alClient;
ItemHeight := 13;
TabOrder := 0;
OnDblClick := DblClck;
end;
with Panel2 do
begin
Name := 'Panel2';
Parent := Result;
Left := 0;
Top := 165;
Width := 228;
Height := 41;
Align := alBottom;
BevelOuter := bvNone;
Caption := '';
TabOrder := 1;
end;
with BitBtn1 do
begin
Name := 'BitBtn1';
Parent := Panel2;
Left := 24;
Top := 8;
Width := 75;
Height := 25;
TabOrder := 0;
Kind := bkOK;
end;
with BitBtn2 do
begin
Name := 'BitBtn2';
Parent := Panel2;
Left := 128;
Top := 8;
Width := 75;
Height := 25;
TabOrder := 1;
Kind := bkCancel;
end;
end;
function Alter(const str, altstr: string): string;
begin
if str = '' then Result := altstr
else Result := str;
end;
 
{ TDXImageListEditor }
 
procedure TDXImageListEditor.ExecuteVerb(Index: Integer);
var
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
DelphiXDIBEffectEditForm: TTDelphiXDIBEffectEditForm;
{$IFDEF VER4UP}
DXGlueItEditForm: TDXGlueItEditor;
{$ENDIF}
Q: TPictureCollectionItem;
I, N: Integer;
S, Z: string;
{$IFDEF VER4UP}
QQ: TCustomDXImageList;
FrmListBox: TForm;
ListBox1: TListBox;
{$ENDIF}
begin
case Index of
0: begin
OpenDialog := TOpenDialog.Create(nil);
try
OpenDialog.DefaultExt := 'dxg';
OpenDialog.Filter := SDXGOpenFileFilter;
OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
if OpenDialog.Execute then
begin
if OpenDialog.FilterIndex = 2 then
begin
for i := 0 to OpenDialog.Files.Count - 1 do
with TPictureCollectionItem.Create(TCustomDXImageList(Component).Items) do
begin
try
Picture.LoadFromFile(OpenDialog.Files[i]);
Name := ExtractFileName(OpenDialog.Files[i]);
except
Free;
raise;
end;
end;
end else
TCustomDXImageList(Component).Items.LoadFromFile(OpenDialog.FileName);
Designer.Modified;
end;
finally
OpenDialog.Free;
end;
end;
1: begin
SaveDialog := TSaveDialog.Create(nil);
try
SaveDialog.DefaultExt := 'dxg';
SaveDialog.Filter := SDXGFileFilter;
SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
if SaveDialog.Execute then
TCustomDXImageList(Component).Items.SaveToFile(SaveDialog.FileName);
finally
SaveDialog.Free;
end;
end;
2:
begin {Create shine effect...}
{special effect}
DelphiXDIBEffectEditForm := TTDelphiXDIBEffectEditForm.Create(nil);
try
DelphiXDIBEffectEditForm.ShowModal;
if DelphiXDIBEffectEditForm.Tag = 1 then begin
{check all names in list of images}
N := 0;
Z := DelphiXDIBEffectEditForm.eName.Text; S := Z;
I := TCustomDXImageList(Component).Items.IndexOf(Z);
{hleda jmeno}
while I <> -1 do begin
S := Format('%s_%d', [Z, N]); {new name}
I := TCustomDXImageList(Component).Items.IndexOf(S);
Inc(N);
end;
{add item}
Q := TPictureCollectionItem(TCustomDXImageList(Component).Items.Add);
Q.Picture.Assign(DelphiXDIBEffectEditForm.ResultDIB);
Q.Name := S; {it has to name!}
Q.Transparent := False; {transparend will be set in future}
Designer.Modified;
end;
finally
DelphiXDIBEffectEditForm.Free;
end;
end;
{$IFDEF VER4UP}
3: {Glue-it editor}
begin
DXGlueItEditForm := TDXGlueItEditor.Create(nil);
try
QQ := TCustomDXImageList(Component); Q := nil;
 
if QQ.Items.Count > 0 then begin
FrmListBox := CreateListBox(ListBox1DblClick, ListBox1);
try
for I := 0 to QQ.Items.Count - 1 do begin
S := QQ.Items[I].Name;
ListBox1.Items.Add(Alter(S, '(unnamed).' + IntToStr(I)));
end;
 
case FrmListBox.ShowModal of
mrOk: //when select one
begin
//when image selected
if ListBox1.ItemIndex <> -1 then begin
Q := QQ.Items[ListBox1.ItemIndex];
//load one image into editor
DXGlueItEditForm.LoadImageFromList(Q.Name, Q.Picture, Q.Width,
Q.Height, Q.Transparent, Q.TransparentColor);
//image loadet, noe se up edit mode
DXGlueItEditForm.Operation := ogiEdit;
end;
end;
mrCancel: DXGlueItEditForm.Operation := ogiNew;
else
Exit
end {case};
finally
FrmListBox.Free;
end;
end
else
DXGlueItEditForm.Operation := ogiNew;
DXGlueItEditForm.ShowModal;
if DXGlueItEditForm.Tag = 1 then begin
//when image as new. it has to create new item
if DXGlueItEditForm.Operation = ogiNew then
Q := TPictureCollectionItem(TCustomDXImageList(Component).Items.Add);
//and store edited image into
if Assigned(Q) then
DXGlueItEditForm.SaveImageIntoList(Q);
//signal to designer that anything was changed;
Designer.Modified;
end;
finally
DXGlueItEditForm.Free;
end;
end;
{$ENDIF}
end;
end;
 
function TDXImageListEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := SOpen;
1: Result := SSave;
2: Result := 'Shine effect...';
{$IFDEF VER4UP}
//fix bug by Pásztor Károly [fenistil@hu.hu]
3: Result := 'Glue it...';
{$ENDIF}
end;
end;
 
function TDXImageListEditor.GetVerbCount: Integer;
begin
Result := {$IFDEF VER4UP}4{$ELSE}3{$ENDIF};
end;
 
procedure TDXImageListEditor.ListBox1DblClick(Sender: TObject);
begin
if Sender is TListBox then with (Sender as TListBox) do
if ItemIndex <> -1 then
(Owner as TForm).ModalResult := mrOk;
end;
 
{ TWaveProperty }
 
procedure TWaveProperty.Edit;
var
Form: TDelphiXWaveEditForm;
begin
Form := TDelphiXWaveEditForm.Create(nil);
try
Form.Wave := TWave(GetOrdValue);
Form.ShowModal;
if Form.Tag <> 0 then
begin
SetOrdValue(Integer(Form.Wave));
Designer.Modified;
end;
finally
Form.Free;
end;
end;
 
function TWaveProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paReadOnly];
end;
 
function TWaveProperty.GetValue: string;
begin
if TWave(GetOrdValue).Size = 0 then
Result := SNone
else
Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
end;
 
{ TDXWaveEditor }
 
procedure TDXWaveEditor.Edit;
var
Form: TDelphiXWaveEditForm;
begin
Form := TDelphiXWaveEditForm.Create(nil);
try
Form.Wave := TCustomDXWave(Component).Wave;
Form.ShowModal;
if Form.Tag <> 0 then
begin
TCustomDXWave(Component).Wave := Form.Wave;
Designer.Modified;
end;
finally
Form.Free;
end;
end;
 
procedure TDXWaveEditor.ExecuteVerb(Index: Integer);
begin
case Index of
0: Edit;
end;
end;
 
function TDXWaveEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := SSettingWave;
end;
end;
 
function TDXWaveEditor.GetVerbCount: Integer;
begin
Result := 1;
end;
 
{ TDXWaveListEditor }
 
procedure TDXWaveListEditor.ExecuteVerb(Index: Integer);
var
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
i: Integer;
begin
case Index of
0: begin
OpenDialog := TOpenDialog.Create(nil);
try
OpenDialog.DefaultExt := 'dxw';
OpenDialog.Filter := SDXWOpenFileFilter;
OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
if OpenDialog.Execute then
begin
if OpenDialog.FilterIndex = 2 then
begin
for i := 0 to OpenDialog.Files.Count - 1 do
with TWaveCollectionItem.Create(TCustomDXWaveList(Component).Items) do
begin
try
Wave.LoadFromFile(OpenDialog.Files[i]);
Name := ExtractFileName(OpenDialog.Files[i]);
except
Free;
raise;
end;
end;
end else
TCustomDXWaveList(Component).Items.LoadFromFile(OpenDialog.FileName);
Designer.Modified;
end;
finally
OpenDialog.Free;
end;
end;
1: begin
SaveDialog := TSaveDialog.Create(nil);
try
SaveDialog.DefaultExt := 'dxw';
SaveDialog.Filter := SDXWFileFilter;
SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
if SaveDialog.Execute then
TCustomDXWaveList(Component).Items.SaveToFile(SaveDialog.FileName);
finally
SaveDialog.Free;
end;
end;
end;
end;
 
function TDXWaveListEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := SOpen;
1: Result := SSave;
end;
end;
 
function TDXWaveListEditor.GetVerbCount: Integer;
begin
Result := 2;
end;
 
{ TForceFeedbackEffectsProperty }
 
procedure TForceFeedbackEffectsProperty.Edit;
var
Form: TDelphiXFFEditForm;
Effects: TForceFeedbackEffects;
begin
Effects := TForceFeedbackEffects(GetOrdValue);
 
Form := TDelphiXFFEditForm.Create(nil);
try
if Effects.Input is TJoystick then
Form.Effects := Form.DXInput.Joystick.Effects
else if Effects.Input is TKeyboard then
Form.Effects := Form.DXInput.Keyboard.Effects
else if Effects.Input is TMouse then
Form.Effects := Form.DXInput.Mouse.Effects
else Exit;
 
Form.Effects.Assign(TForceFeedbackEffects(GetOrdValue));
Form.ShowModal;
if Form.Tag <> 0 then
begin
SetOrdValue(Integer(Form.Effects));
Designer.Modified;
end;
finally
Form.Free;
end;
end;
 
function TForceFeedbackEffectsProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paReadOnly];
end;
 
function TForceFeedbackEffectsProperty.GetValue: string;
begin
if TForceFeedbackEffects(GetOrdValue).Count = 0 then
Result := SNone
else
Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
end;
 
{ TDXInputEditor }
 
procedure TDXInputEditor.Edit;
var
Form: TDelphiXInputEditForm;
begin
Form := TDelphiXInputEditForm.Create(nil);
try
Form.DXInput := TCustomDXInput(Component);
Form.ShowModal;
if Form.Tag <> 0 then
Designer.Modified;
finally
Form.Free;
end;
end;
 
procedure TDXInputEditor.ExecuteVerb(Index: Integer);
begin
case Index of
0: begin
with TCustomDXInput(Component) do
begin
Joystick.ID := 0;
Keyboard.KeyAssigns := DefKeyAssign;
end;
Designer.Modified;
end;
1: begin
with TCustomDXInput(Component) do
begin
Joystick.ID := 0;
Keyboard.KeyAssigns := DefKeyAssign2_1;
end;
Designer.Modified;
end;
2: begin
with TCustomDXInput(Component) do
begin
Joystick.ID := 1;
Keyboard.KeyAssigns := DefKeyAssign2_2;
end;
Designer.Modified;
end;
end;
end;
 
function TDXInputEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := SSinglePlayer;
1: Result := SMultiPlayer1;
2: Result := SMultiPlayer2;
end;
end;
 
function TDXInputEditor.GetVerbCount: Integer;
begin
Result := 3;
end;
 
{ TGUIDProperty }
 
procedure TGUIDProperty.Edit;
var
Form: TDelphiXGUIDEditForm;
begin
Form := TDelphiXGUIDEditForm.Create(nil);
try
Form.GUID := GetStrValue;
Form.ShowModal;
if Form.Tag <> 0 then
begin
SetStrValue(Form.GUID);
Designer.Modified;
end;
finally
Form.Free;
end;
end;
 
function TGUIDProperty.GetAttributes: TPropertyAttributes;
begin
Result := inherited GetAttributes + [paDialog];
end;
 
{ TSpriteProperty }
 
procedure TSpriteProperty.Edit;
var
DirectAccessToSprite: TSprite;
Form: TDelphiXSpriteEditForm;
//FormDesigner: IDesigner;
begin
DirectAccessToSprite := TSprite(GetOrdValue);
//FormDesigner := Designer;
Form := TDelphiXSpriteEditForm.Create(nil);
{FormDesigner.GetComponentNames(GetTypeData(GetPropType), Proc);}
try
Form.LoadDataToForm(DirectAccessToSprite);
//Form.Sprite.AsSign(TPersistent(GetOrdValue));
Form.ShowModal;
if Form.Tag <> 0 then
begin
DirectAccessToSprite := TSprite(Form.SaveDataFromForm);
SetOrdValue(Integer(DirectAccessToSprite));
Designer.Modified;
end;
finally
Form.Free;
end;
end;
 
function TSpriteProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog];
end;
 
function TSpriteProperty.GetValue: string;
begin
Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
end;
 
{ TMidiProperty }
 
procedure TMidiProperty.Edit;
var
DelphiXMidiEditForm: TDelphiXMidiEditForm;
DirectAccessToMidiData: TMusicDataProp;
S: string; I: Integer;
begin
DirectAccessToMidiData := TMusicDataProp(GetOrdValue);
DelphiXMidiEditForm := TDelphiXMidiEditForm.Create(nil);
try
DelphiXMidiEditForm.MidiData := DirectAccessToMidiData.MusicData;
DelphiXMidiEditForm.MidiFileName := DirectAccessToMidiData.MidiName;
DelphiXMidiEditForm.Showmodal;
if DelphiXMidiEditForm.Tag = 1 then begin
DirectAccessToMidiData.MusicData := DelphiXMidiEditForm.MidiData;
S := '';
if DelphiXMidiEditForm.MidiFileName <> '' then begin
S := ExtractFileName(DelphiXMidiEditForm.MidiFileName);
I := Pos(ExtractFileExt(S), S);
if I > 0 then S := Copy(S, 1, I - 1);
end;
DirectAccessToMidiData.MidiName := S;
Designer.Modified;
end;
finally
DelphiXMidiEditForm.Free;
end;
end;
 
function TMidiProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog];
end;
 
function TMidiProperty.GetValue: string;
var
S: string;
begin
S := TMusicDataProp(GetOrdValue).MusicData;
if Length(S) = 0 then
Result := SNone
else
Result := '(Midi)';
end;
 
{$IFDEF VER6UP}
procedure TMidiEditor.EditProperty(const Prop: IProperty; var Continue: Boolean);
{$ELSE}
procedure TMidiEditor.EditProperty(PropertyEditor: TPropertyEditor;
var continue, FreeEditor: Boolean);
{$ENDIF}
var
PropName: string;
begin
PropName := {$IFDEF VER6UP}Prop{$ELSE}PropertyEditor{$ENDIF}.GetName;
if (CompareText(PropName, 'Midi') = 0) then
begin
{$IFDEF VER6UP}Prop{$ELSE}PropertyEditor{$ENDIF}.edit;
continue := false;
end;
end;
 
{ TDXMidiListEditor }
 
procedure TDXMidiListEditor.ExecuteVerb(Index: Integer);
var
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
i: Integer;
begin
case Index of
0: begin
OpenDialog := TOpenDialog.Create(nil);
try
OpenDialog.DefaultExt := 'dxm';
OpenDialog.Filter := SDXMOpenFileFilter;
OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
if OpenDialog.Execute then
begin
if OpenDialog.FilterIndex = 2 then
begin
for i := 0 to OpenDialog.Files.Count - 1 do
with TMusicListCollectionItem.Create(TDXMusic(Component).Midis) do
begin
try
LoadFromFile(OpenDialog.Files[i]);
Name := ExtractFileName(OpenDialog.Files[i]);
except
Free;
raise;
end;
end;
end
else
TDXMusic(Component).Midis.LoadFromFile(OpenDialog.FileName);
Designer.Modified;
end;
finally
OpenDialog.Free;
end;
end;
1: begin
SaveDialog := TSaveDialog.Create(nil);
try
SaveDialog.DefaultExt := 'dxm';
SaveDialog.Filter := SDXMFileFilter;
SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
if SaveDialog.Execute then
TCustomDXWaveList(Component).Items.SaveToFile(SaveDialog.FileName);
finally
SaveDialog.Free;
end;
end;
end;
end;
 
function TDXMidiListEditor.GetVerbCount: Integer;
begin
Result := 2;
end;
 
function TDXMidiListEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := SOpen;
1: Result := SSave;
end;
end;
 
{ TDXSpriteEngineEditor }
 
procedure TDXSpriteEngineEditor.ListBox1DblClick(Sender: TObject);
begin
if Sender is TListBox then with (Sender as TListBox) do
if ItemIndex <> -1 then
(Owner as TForm).ModalResult := mrOk;
end;
 
procedure TDXSpriteEngineEditor.ExecuteVerb(Index: Integer);
var
FrmListBox: TForm;
ListBox1: TListBox;
DelphiXSpriteEditForm: TDelphiXSpriteEditForm;
ASprite: TSprite;
I, Z: Integer;
S: string;
Q: TCustomDXSpriteEngine;
begin
case Index of
0: begin
FrmListBox := nil;
Z := 0; //default value
DelphiXSpriteEditForm := TDelphiXSpriteEditForm.Create(nil);
try
Q := TCustomDXSpriteEngine(Component);
case Q.Items.Count of
0: begin
ShowMessage('You must create any item of sprite first!');
Exit;
end;
1: ASprite := Q.Items[Z].Sprite;
else
FrmListBox := CreateListBox(ListBox1DblClick, ListBox1);
for I := 0 to Q.Items.Count - 1 do begin
S := Q.Items[I].Name;
ListBox1.Items.Add(Alter(S, '(unnamed).' + IntToStr(I)));
end;
if FrmListBox.ShowModal <> mrOk then Exit;
Z := ListBox1.ItemIndex;
if Z = -1 then Exit;
ASprite := Q.Items[Z].Sprite;
{synchronize of names}
if ASprite.Caption = '' then
if Q.Items[ListBox1.ItemIndex].Name <> '' then
ASprite.Caption := Q.Items[Z].Name;
end {case};
DelphiXSpriteEditForm.LoadDataToForm(ASprite);
DelphiXSpriteEditForm.ShowModal;
if DelphiXSpriteEditForm.Tag <> 0 then begin
ASprite := TSprite(DelphiXSpriteEditForm.SaveDataFromForm);
if Q.Items[Z].Name = '' then
if ASprite.Caption <> '' then
Q.Items[Z].Name := ASprite.Caption;
Designer.Modified;
end;
finally
if Assigned(FrmListBox) then FrmListBox.Free;
DelphiXSpriteEditForm.Free;
end;
end;
end;
end;
 
function TDXSpriteEngineEditor.GetVerbCount: Integer;
begin
Result := 1;
end;
 
function TDXSpriteEngineEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := 'Sprite Editor';
end;
end;
 
{ TDXDrawEditor }
 
procedure TDXDrawEditor.ExecuteVerb(Index: Integer);
var
ediform: TDelphiXPathsEditForm;
Q: TCustomDXDraw;
I: Integer;
S: string;
T: TTrace;
{$IFNDEF VER4UP}
H: TTrace;
J: Integer;
{$ENDIF}
begin
case Index of
0: begin
Q := TCustomDXDraw(Component);
{paths editor}
ediform := TDelphiXPathsEditForm.Create(nil);
try
ediform.Pane.Width := Q.Display.Width;
ediform.Pane.Height := Q.Display.Width;
for I := 0 to Q.Traces.Count - 1 do begin
S := Q.Traces.Items[I].Name;
T := ediform.PrivateTraces.Add;
T.Name := S;
{$IFDEF VER4UP}
T.Assign(Q.Traces.Items[I]);
{$ELSE}
T.Blit := Q.Traces.Items[I].Blit;
{$ENDIF}
if Trim(S) = '' then S := Format('(unnamed[%d])', [I]);
ediform.cbListOfTraces.Items.Add(S);
end;
ediform.ShowTracesOnPane;
 
ediform.ShowModal;
 
if ediform.Tag = 1 then begin
{clear traces}
Q.Traces.Clear;
{rewrite backward}
for i := 0 to ediform.PrivateTraces.Count -1 do begin
T := Q.Traces.Add;
T.Name := ediform.PrivateTraces.Items[I].Name;
{$IFDEF VER4UP}
T.Assign(ediform.PrivateTraces.Items[i]);
{$ELSE}
H := ediform.PrivateTraces.Items[i];
T.Blit := H.Blit;
T.Blit.SetPathLen(H.Blit.GetPathCount);
for J := 0 to H.Blit.GetPathCount - 1 do begin
T.Blit.Path[J] := H.Blit.Path[J]
end
{$ENDIF}
end;
{prepis zmeny}
Designer.Modified;
end;
finally
ediform.Free;
end;
end;
end;
end;
 
function TDXDrawEditor.GetVerbCount: Integer;
begin
Result := 1;
end;
 
function TDXDrawEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := 'Traces Editor';
end;
end;
 
end.
/VCL_DELPHIX_D6/DelphiXcfg.inc
1,32 → 1,917
{$B-,J+,Q-,R-,T-,X+}
//*********************************************************************
// Main configuration file for (un)DelphiX
//*********************************************************************
{$IFDEF VER100}
{$DEFINE VER3UP}
{$ENDIF}
{$IFDEF VER120}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$ENDIF}
{$IFDEF VER130}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$ENDIF}
{$IFDEF VER140}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$ENDIF}
{$IFDEF VER150}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$ENDIF}
{$IFDEF VER170}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP} // Delphi 2005
{$ENDIF}
{$IFDEF VER180}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP} // Delphi 2006
{$IFDEF VER185}
{$DEFINE VER11UP} // Delphi 2007
{$ENDIF}
{$ENDIF}
{$IFDEF VER200}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$ENDIF}
{$IFDEF VER210}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$ENDIF}
{$IFDEF VER220}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP} //Delphi XE
{$ENDIF}
 
{$IFDEF VER230}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP} //Delphi XE2
{$ENDIF}
 
{$IFDEF VER240}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP} //Delphi XE3
{$ENDIF}
 
{$IFDEF VER250}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP} //Delphi XE4
{$ENDIF}
 
{$IFDEF VER260}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP} //Delphi XE5
{$ENDIF}
 
{$IFDEF VER270}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP} //Delphi XE6
{$ENDIF}
 
{$IFDEF VER280}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP}
{$DEFINE VER21UP} //Delphi XE7
{$ENDIF}
 
{$IFDEF VER290}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP}
{$DEFINE VER21UP}
{$DEFINE VER22UP} //Delphi XE8
{$ENDIF}
 
{$IFDEF VER300}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP}
{$DEFINE VER21UP}
{$DEFINE VER22UP}
{$DEFINE VER23UP} //Delphi 10 Seattle
{$ENDIF}
 
{$IFDEF VER310}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP}
{$DEFINE VER21UP}
{$DEFINE VER22UP}
{$DEFINE VER23UP}
{$DEFINE VER24UP}//Delphi 10.1 Berlin
{$ENDIF}
 
{$IFDEF VER320}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP}
{$DEFINE VER21UP}
{$DEFINE VER22UP}
{$DEFINE VER23UP}
{$DEFINE VER24UP}
{$DEFINE VER25UP} //Delphi 10.2 Tokyo
{$ENDIF}
 
{$IFDEF VER330}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP}
{$DEFINE VER21UP}
{$DEFINE VER22UP}
{$DEFINE VER23UP}
{$DEFINE VER24UP}
{$DEFINE VER25UP}
{$DEFINE VER26UP} //Delphi 10.3 Rio
{$ENDIF}
 
{$IFDEF VER340}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP}
{$DEFINE VER21UP}
{$DEFINE VER22UP}
{$DEFINE VER23UP}
{$DEFINE VER24UP}
{$DEFINE VER25UP}
{$DEFINE VER26UP}
{$DEFINE VER27UP} //Delphi 10.4 Sydney
{$ENDIF}
 
{$IFDEF VER350}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP}
{$DEFINE VER21UP}
{$DEFINE VER22UP}
{$DEFINE VER23UP}
{$DEFINE VER24UP}
{$DEFINE VER25UP}
{$DEFINE VER26UP}
{$DEFINE VER27UP}
{$DEFINE VER28UP} //Delphi 11 Alexandria
{$ENDIF}
 
{$IFDEF VER360}
{$DEFINE VER3UP}
{$DEFINE VER4UP}
{$DEFINE VER5UP}
{$DEFINE VER6UP}
{$DEFINE VER7UP}
{$DEFINE VER9UP}
{$DEFINE VER10UP}
{$DEFINE VER11UP}
{$DEFINE VER12UP}
{$DEFINE VER14UP}
{$DEFINE VER15UP}
{$DEFINE VER16UP}
{$DEFINE VER17UP}
{$DEFINE VER18UP}
{$DEFINE VER19UP}
{$DEFINE VER20UP}
{$DEFINE VER21UP}
{$DEFINE VER22UP}
{$DEFINE VER23UP}
{$DEFINE VER24UP}
{$DEFINE VER25UP}
{$DEFINE VER26UP}
{$DEFINE VER27UP}
{$DEFINE VER28UP}
{$DEFINE VER29UP}//Delphi 12 Athens
{$ENDIF}
 
{$IFDEF VER100}
// Delphi 3
{$DEFINE DelphiX_Delphi3}
{$Define D3UP}
{$ENDIF}
 
{$IFDEF VER120}
// Delphi 4
{$DEFINE DelphiX_Delphi4}
{$Define D3UP}
{$Define D4UP}
{$ENDIF}
 
{$IFDEF VER130}
// Delphi 5
{$DEFINE DelphiX_Delphi5}
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$ENDIF}
 
{$IFDEF DelphiX_Delphi3}
{$DEFINE DelphiX_Spt3}
{$IFDEF VER140}
// Delphi 6
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$ENDIF}
 
{$IFDEF DelphiX_Delphi4}
{$DEFINE DelphiX_Spt3}
{$DEFINE DelphiX_Spt4}
{$IFDEF VER150}
// Delphi 7
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$ENDIF}
 
{$IFDEF DelphiX_Delphi5}
{$DEFINE DelphiX_Spt3}
{$DEFINE DelphiX_Spt4}
{$DEFINE DelphiX_Spt5}
{$IFDEF VER170}
// Delphi 9 - 2005
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$ENDIF}
 
{$IFDEF VER180}
// Delphi 10 - 2006 or Turbo
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$ENDIF}
 
{$IFDEF VER185}
// Delphi 11 - 2007
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$ENDIF}
 
{$IFDEF VER200}
// Delphi 12 - 2009
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$ENDIF}
 
{$IFDEF VER210}
// Delphi 14 - 2010
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER220}
// Delphi 15 - XE
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER230}
// Delphi 16 - XE2
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER240}
// Delphi 17 - XE3
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER250}
// Delphi 18 - XE4
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER260}
// Delphi 19 - XE5
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER270}
// Delphi 20 - XE6
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER280}
// Delphi 21 - XE7
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D21UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER290}
// Delphi 22 - XE8
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D21UP}
{$Define D22UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER300}
// Delphi 23 - 10 Seattle
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D21UP}
{$Define D22UP}
{$Define D23UP}
{$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER310}
// Delphi 24 - 10.1 Berlin
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D21UP}
{$Define D22UP}
{$Define D23UP}
{$Define D24UP}
//cannot be made, Berlin version lost older interfaces
//{.$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER320}
// Delphi 25 - 10.2 Tokyo
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D21UP}
{$Define D22UP}
{$Define D23UP}
{$Define D24UP}
{$Define D25UP}
//cannot be made, Berlin version lost older interfaces
//{.$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER330}
// Delphi 26 - 10.3 Rio
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D21UP}
{$Define D22UP}
{$Define D23UP}
{$Define D24UP}
{$Define D25UP}
{$Define D26UP}
//cannot be made, Berlin version lost older interfaces
//{.$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER340}
// Delphi 27 - 10.4 Sydney
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D21UP}
{$Define D22UP}
{$Define D23UP}
{$Define D24UP}
{$Define D25UP}
{$Define D26UP}
{$Define D27UP}
//cannot be made, Berlin version lost older interfaces
//{.$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER350}
// Delphi 28 - 11 Alexandria
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D21UP}
{$Define D22UP}
{$Define D23UP}
{$Define D24UP}
{$Define D25UP}
{$Define D26UP}
{$Define D27UP}
{$Define D28UP}
//cannot be made, Berlin version lost older interfaces
//{.$Define D_EE_UP}
{$ENDIF}
 
{$IFDEF VER360}
// Delphi 29 - 12 Athens
{$Define D3UP}
{$Define D4UP}
{$Define D5UP}
{$Define D6UP}
{$Define D7UP}
{$Define D9UP}
{$Define D10UP}
{$Define D11UP}
{$Define D12UP}
{$Define D14UP}
{$Define D15UP}
{$Define D16UP}
{$Define D17UP}
{$Define D18UP}
{$Define D19UP}
{$Define D20UP}
{$Define D21UP}
{$Define D22UP}
{$Define D23UP}
{$Define D24UP}
{$Define D25UP}
{$Define D26UP}
{$Define D27UP}
{$Define D28UP}
{$Define D29UP}
//cannot be made, Berlin version lost older interfaces
//{.$Define D_EE_UP}
{$ENDIF}
 
{standard feature for drawing blend textures}
{this conditional is add-on as is for eliminate bad color key switching}
{$DEFINE DrawHWAcc}
 
{DirectX Double precision activation}
{$DEFINE DXDOUBLEPRECISION}
 
{when you can use this option, you must use separate headers unit }
{if this turn off, you use built-in standard DirectX.pas unit (in one file)}
{$IFDEF D_EE_UP} //Delphi 2010/XE
{$DEFINE StandardDX}
{$ELSE}
{.$DEFINE StandardDX}
{$ENDIF}
 
{Only one can be set!}
{Use standard of DirectX version 7}
{$IFNDEF D_EE_UP}
{$DEFINE DX7}
{$ELSE}
 
{Use standard of DirectX version 9}
{in concert with StandardDX for separate units only}
{$IFDEF StandardDX}
{$DEFINE DX9}
{$ENDIF}
{$ENDIF}
 
{for better texture compression can be use ZLIB here}
{in some Delphi versions it errors occurred because ZLib package is "lock-like" package}
{I recommend use it for final version application only}
{$IFDEF VER5UP} {Delphi 5 (and lower) has any problems with ZLIB, may be replace by 3rd party lib. manually}
{$DEFINE DXTextureImage_UseZLIB}
{$ENDIF}
{when videotexture is used - like change images in texture}
{Note: it consume 2x more memory because texture is store twice unchanged and}
{changed - this conditional add/remove store shadow image in texture buffer}
{$IFDEF VER5UP} {Delphi 5 (and lower) has any problems with ZLIB, may be replace by 3rd party lib. manually}
{$DEFINE VIDEOTEX}
{$ENDIF}
 
{software rendering based on Hori's DXR code}
{this option is only for remove all DXR code, is not recommended remove it}
{it can be remove only for special usage like use PURE DirectX for SW rendering too}
{$DEFINE DXR_deprecated}
 
{$IfDef DX7}
{Retained mode is turn off for Vista as implicit value}
{When you want use it, you have to add the D3DRM.DLL}
{is recommended put library into Windows/System32 system directory}
{in application directory does not works properly under Vista}
{$Define D3D_deprecated} //both must be turn-on
{.$Define D3DRM} //required D3DRM.DLL !!
{for separete unit is DirectRM.pas required !! - it is not include in Delphi 2010/XE !!}
{this class is deprecated; when you can it use, remove dot bellow}
{this add additional component for D3D over DXDraw}
{$IFDEF D3DRM}
{$Define DX3D_deprecated}
{$ENDIF}
 
{$ELSE}
{$Define D3D_deprecated}
{$EndIf}
 
{$IFDEF VER12UP}
{PNG support is added in Delphi 2009 and up as native feature}
{there is turn on, it is for backward compatibility only}
{$DEFINE PNG_GRAPHICS}
{$ELSE}
{for Delphi 2007 and lower when you usen PNG support, you have write}
{name of PNG package into required section of pavkage source .dpk}
{and turn on this support here - remove the dot only bellow}
{.$DEFINE PNG_GRAPHICS}
{$ENDIF}
 
{special feature for enumerate displayis like primary, secondary etc.}
{only for special purpose, multimonitors etc.}
{.$DEFINE _DMO_}
 
{When you need DirectPlay, please remove this definition. It is not enabled by default, because}
{DirectPlay is not shipped with Windows by default, and the user might receive a warning}
{that the app might not work if DirectPlay is not installed.}
{.$Define UseDirectPlay}
/VCL_DELPHIX_D6/DirectPlay.pas
0,0 → 1,2521
unit DirectPlay;
 
{$INCLUDE DelphiXcfg.inc}
 
{$IFNDEF UseDirectPlay}
// If you want to use DirectPlay.pas, please enable the IFDEF UseDirectPlay in DelphiXcfg.inc
interface
implementation
{$ELSE} // !UseDirectPlay
 
(*==========================================================================;
*
* Copyright (C) Microsoft Corporation. All Rights Reserved.
*
* File: dplay.h dplobby.h
* Content: DirectPlay include files
*
* DirectX 7 Delphi adaptation by Erik Unger
*
* Modified: 4-Jun-2000
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: DelphiDirectX@next-reality.com
*
***************************************************************************)
 
interface
 
{$MINENUMSIZE 4}
{$ALIGN ON}
 
uses
Windows;
 
type
{$IFDEF UNICODE}
PCharAW = PWideChar;
{$ELSE}
PCharAW = PAnsiChar;
{$ENDIF}
 
var
DPlayDLL: HMODULE = 0;
 
(*==========================================================================;
*
* Copyright (C) 1994-1997 Microsoft Corporation. All Rights Reserved.
*
* File: dplay.h
* Content: DirectPlay include file
*
***************************************************************************)
 
function DPErrorString(Value: HResult): string;
 
const
// {D1EB6D20-8923-11d0-9D97-00A0C90A43CB}
CLSID_DirectPlay: TGUID =
(D1: $D1EB6D20; D2: $8923; D3: $11D0; D4: ($9D, $97, $00, $A0, $C9, $A, $43, $CB));
 
(*
* GUIDS used by Service Providers shipped with DirectPlay
* Use these to identify Service Provider returned by EnumConnections
*)
 
// GUID for IPX service provider
// {685BC400-9D2C-11cf-A9CD-00AA006886E3}
DPSPGUID_IPX: TGUID =
(D1: $685BC400; D2: $9D2C; D3: $11CF; D4: ($A9, $CD, $00, $AA, $00, $68, $86, $E3));
 
// GUID for TCP/IP service provider
// 36E95EE0-8577-11cf-960C-0080C7534E82
DPSPGUID_TCPIP: TGUID =
(D1: $36E95EE0; D2: $8577; D3: $11CF; D4: ($96, $0C, $00, $80, $C7, $53, $4E, $82));
 
// GUID for Serial service provider
// {0F1D6860-88D9-11cf-9C4E-00A0C905425E}
DPSPGUID_SERIAL: TGUID =
(D1: $F1D6860; D2: $88D9; D3: $11CF; D4: ($9C, $4E, $00, $A0, $C9, $05, $42, $5E));
 
// GUID for Modem service provider
// {44EAA760-CB68-11cf-9C4E-00A0C905425E}
DPSPGUID_MODEM: TGUID =
(D1: $44EAA760; D2: $CB68; D3: $11CF; D4: ($9C, $4E, $00, $A0, $C9, $05, $42, $5E));
 
(****************************************************************************
*
* DirectPlay Structures
*
* Various structures used to invoke DirectPlay.
*
****************************************************************************)
 
type
(*
* TDPID
* DirectPlay player and group ID
*)
TDPID = DWORD;
PDPID = ^TDPID;
 
const
(*
* DPID that system messages come from
*)
DPID_SYSMSG = 0;
 
(*
* DPID representing all players in the session
*)
DPID_ALLPLAYERS = 0;
 
(*
* DPID representing the server player
*)
DPID_SERVERPLAYER = 1;
 
(*
* DPID representing the maximum ID in the range of DPID's reserved for
* use by DirectPlay.
*)
DPID_RESERVEDRANGE = 100;
 
(*
* The player ID is unknown (used with e.g. DPSESSION_NOMESSAGEID)
*)
DPID_UNKNOWN = $FFFFFFFF;
 
type
(*
* DPCAPS
* Used to obtain the capabilities of a DirectPlay object
*)
PDPCaps = ^TDPCaps;
TDPCaps = packed record
dwSize: DWORD; // Size of structure, in bytes
dwFlags: DWORD; // DPCAPS_xxx flags
dwMaxBufferSize: DWORD; // Maximum message size, in bytes, for this service provider
dwMaxQueueSize: DWORD; // Obsolete.
dwMaxPlayers: DWORD; // Maximum players/groups (local + remote)
dwHundredBaud: DWORD; // Bandwidth in 100 bits per second units;
// i.e. 24 is 2400, 96 is 9600, etc.
dwLatency: DWORD; // Estimated latency; 0 = unknown
dwMaxLocalPlayers: DWORD; // Maximum # of locally created players allowed
dwHeaderLength: DWORD; // Maximum header length, in bytes, on messages
// added by the service provider
dwTimeout: DWORD; // Service provider's suggested timeout value
// This is how long DirectPlay will wait for
// responses to system messages
end;
 
const
(*
* This DirectPlay object is the session host. If the host exits the
* session, another application will become the host and receive a
* DPSYS_HOST system message.
*)
DPCAPS_ISHOST = $00000002;
 
(*
* The service provider bound to this DirectPlay object can optimize
* group messaging.
*)
DPCAPS_GROUPOPTIMIZED = $00000008;
 
(*
* The service provider bound to this DirectPlay object can optimize
* keep alives (see DPSESSION_KEEPALIVE)
*)
DPCAPS_KEEPALIVEOPTIMIZED = $00000010;
 
(*
* The service provider bound to this DirectPlay object can optimize
* guaranteed message delivery.
*)
DPCAPS_GUARANTEEDOPTIMIZED = $00000020;
 
(*
* This DirectPlay object supports guaranteed message delivery.
*)
DPCAPS_GUARANTEEDSUPPORTED = $00000040;
 
(*
* This DirectPlay object supports digital signing of messages.
*)
DPCAPS_SIGNINGSUPPORTED = $00000080;
 
(*
* This DirectPlay object supports encryption of messages.
*)
DPCAPS_ENCRYPTIONSUPPORTED = $00000100;
 
(*
* This DirectPlay player was created on this machine
*)
DPPLAYERCAPS_LOCAL = $00000800;
 
(*
* Current Open settings supports all forms of Cancel
*)
DPCAPS_ASYNCCANCELSUPPORTED = $00001000;
 
(*
* Current Open settings supports CancelAll, but not Cancel
*)
DPCAPS_ASYNCCANCELALLSUPPORTED = $00002000;
 
(*
* Current Open settings supports Send Timeouts for sends
*)
DPCAPS_SENDTIMEOUTSUPPORTED = $00004000;
 
(*
* Current Open settings supports send priority
*)
DPCAPS_SENDPRIORITYSUPPORTED = $00008000;
 
(*
* Current Open settings supports DPSEND_ASYNC flag
*)
DPCAPS_ASYNCSUPPORTED = $00010000;
 
type
(*
* TDPSessionDesc2
* Used to describe the properties of a DirectPlay
* session instance
*)
PDPSessionDesc2 = ^TDPSessionDesc2;
TDPSessionDesc2 = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // DPSESSION_xxx flags
guidInstance: TGUID; // ID for the session instance
guidApplication: TGUID; // GUID of the DirectPlay application.
// GUID_NULL for all applications.
dwMaxPlayers: DWORD; // Maximum # players allowed in session
dwCurrentPlayers: DWORD; // Current # players in session (read only)
case Integer of
0: (
lpszSessionName: PCharAW; // Name of the session
lpszPassword: PCharAW; // Password of the session (optional)
dwReserved1: DWORD; // Reserved for future MS use.
dwReserved2: DWORD;
dwUser1: DWORD; // For use by the application
dwUser2: DWORD;
dwUser3: DWORD;
dwUser4: DWORD;
);
1: (
lpszSessionNameA: PAnsiChar; // Name of the session
lpszPasswordA: PAnsiChar // Password of the session (optional)
);
2: (
lpszSessionNameW: PWideChar;
lpszPasswordW: PWideChar
);
end;
 
const
(*
* Applications cannot create new players in this session.
*)
DPSESSION_NEWPLAYERSDISABLED = $00000001;
 
(*
* If the DirectPlay object that created the session, the host,
* quits, then the host will attempt to migrate to another
* DirectPlay object so that new players can continue to be created
* and new applications can join the session.
*)
DPSESSION_MIGRATEHOST = $00000004;
 
(*
* This flag tells DirectPlay not to set the idPlayerTo and idPlayerFrom
* fields in player messages. This cuts two DWORD's off the message
* overhead.
*)
DPSESSION_NOMESSAGEID = $00000008;
 
(*
* This flag tells DirectPlay to not allow any new applications to
* join the session. Applications already in the session can still
* create new players.
*)
DPSESSION_JOINDISABLED = $00000020;
 
(*
* This flag tells DirectPlay to detect when remote players
* exit abnormally (e.g. their computer or modem gets unplugged)
*)
DPSESSION_KEEPALIVE = $00000040;
 
(*
* This flag tells DirectPlay not to send a message to all players
* when a players remote data changes
*)
DPSESSION_NODATAMESSAGES = $00000080;
 
(*
* This flag indicates that the session belongs to a secure server
* and needs user authentication
*)
DPSESSION_SECURESERVER = $00000100;
 
(*
* This flag indicates that the session is private and requirs a password
* for EnumSessions as well as Open.
*)
DPSESSION_PRIVATE = $00000200;
 
(*
* This flag indicates that the session requires a password for joining.
*)
DPSESSION_PASSWORDREQUIRED = $00000400;
 
(*
* This flag tells DirectPlay to route all messages through the server
*)
DPSESSION_MULTICASTSERVER = $00000800;
 
(*
* This flag tells DirectPlay to only download information about the
* DPPLAYER_SERVERPLAYER.
*)
DPSESSION_CLIENTSERVER = $00001000;
 
(*
* This flag tells DirectPlay to use the protocol built into dplay
* for reliability and statistics all the time. When this bit is
* set, only other sessions with this bit set can join or be joined.
*)
DPSESSION_DIRECTPLAYPROTOCOL = $00002000;
 
(*
* This flag tells DirectPlay that preserving order of received
* packets is not important, when using reliable delivery. This
* will allow messages to be indicated out of order if preceding
* messages have not yet arrived. Otherwise DPLAY will wait for
* earlier messages before delivering later reliable messages.
*)
DPSESSION_NOPRESERVEORDER = $00004000;
 
(*
* This flag tells DirectPlay to optimize communication for latency
*)
DPSESSION_OPTIMIZELATENCY = $00008000;
 
type
(*
* TDPName
* Used to hold the name of a DirectPlay entity
* like a player or a group
*)
PDPName = ^TDPName;
TDPName = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // Not used. Must be zero.
case Integer of
0: (
lpszShortName: PCharAW; // The short or friendly name
lpszLongName: PCharAW; // The long or formal name
);
1: (
lpszShortNameA: PAnsiChar;
lpszLongNameA: PAnsiChar;
);
2: (
lpszShortNameW: PWideChar;
lpszLongNameW: PWideChar;
);
end;
 
(*
* TDPCredentials
* Used to hold the user name and password of a DirectPlay user
*)
 
PDPCredentials = ^TDPCredentials;
TDPCredentials = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // Not used. Must be zero.
case Integer of
0: (
lpszUsername: PCharAW; // User name of the account
lpszPassword: PCharAW; // Password of the account
lpszDomain: PCharAW; // Domain name of the account
);
1: (
lpszUsernameA: PAnsiChar; // User name of the account
lpszPasswordA: PAnsiChar; // Password of the account
lpszDomainA: PAnsiChar; // Domain name of the account
);
2: (
lpszUsernameW: PWideChar; // User name of the account
lpszPasswordW: PWideChar; // Password of the account
lpszDomainW: PWideChar; // Domain name of the account
);
end;
 
(*
* TDPSecurityDesc
* Used to describe the security properties of a DirectPlay
* session instance
*)
PDPSecurityDesc = ^TDPSecurityDesc;
TDPSecurityDesc = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // Not used. Must be zero.
case Integer of
0: (
lpszSSPIProvider: PCharAW; // SSPI provider name
lpszCAPIProvider: PCharAW; // CAPI provider name
dwCAPIProviderType: DWORD; // Crypto Service Provider type
dwEncryptionAlgorithm: DWORD; // Encryption Algorithm type
);
1: (
lpszSSPIProviderA: PAnsiChar; // SSPI provider name
lpszCAPIProviderA: PAnsiChar; // CAPI provider name
);
2: (
lpszSSPIProviderW: PWideChar; // SSPI provider name
lpszCAPIProviderW: PWideChar; // CAPI provider name
);
end;
 
(*
* DPACCOUNTDESC
* Used to describe a user membership account
*)
 
PDPAccountDesc = ^TDPAccountDesc;
TDPAccountDesc = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // Not used. Must be zero.
case Integer of
0: (lpszAccountID: PCharAW); // Account identifier
1: (lpszAccountIDA: PAnsiChar);
2: (lpszAccountIDW: PWideChar);
end;
 
(*
* TDPLConnection
* Used to hold all in the informaion needed to connect
* an application to a session or create a session
*)
PDPLConnection = ^TDPLConnection;
TDPLConnection = packed record
dwSize: DWORD; // Size of this structure
dwFlags: DWORD; // Flags specific to this structure
lpSessionDesc: PDPSessionDesc2; // Pointer to session desc to use on connect
lpPlayerName: PDPName; // Pointer to Player name structure
guidSP: TGUID; // GUID of the DPlay SP to use
lpAddress: Pointer; // Address for service provider
dwAddressSize: DWORD; // Size of address data
end;
 
(*
* TDPChat
* Used to hold the a DirectPlay chat message
*)
PDPChat = ^TDPChat;
TDPChat = packed record
dwSize: DWORD;
dwFlags: DWORD;
case Integer of
0: (lpszMessage: PCharAW); // Message string
1: (lpszMessageA: PAnsiChar);
2: (lpszMessageW: PWideChar);
end;
 
(*
* TSGBuffer
* Scatter Gather Buffer used for SendEx
*)
PSGBuffer = ^TSGBuffer;
TSGBuffer = packed record
len: UINT;
pData: PUCHAR;
end;
 
(****************************************************************************
*
* Prototypes for DirectPlay callback functions
*
****************************************************************************)
 
(*
* Callback for IDirectPlay2::EnumSessions
*)
TDPEnumSessionsCallback2 = function(lpThisSD: PDPSessionDesc2;
var lpdwTimeOut: DWORD; dwFlags: DWORD; lpContext: Pointer): BOOL; stdcall;
 
const
(*
* This flag is set on the EnumSessions callback dwFlags parameter when
* the time out has occurred. There will be no session data for this
* callback. If *lpdwTimeOut is set to a non-zero value and the
* EnumSessionsCallback function returns TRUE then EnumSessions will
* continue waiting until the next timeout occurs. Timeouts are in
* milliseconds.
*)
DPESC_TIMEDOUT = $00000001;
 
type
(*
* Callback for IDirectPlay2.EnumPlayers
* IDirectPlay2.EnumGroups
* IDirectPlay2.EnumGroupPlayers
*)
TDPEnumPlayersCallback2 = function(DPID: TDPID; dwPlayerType: DWORD;
const lpName: TDPName; dwFlags: DWORD; lpContext: Pointer): BOOL; stdcall;
 
(*
* ANSI callback for DirectPlayEnumerate
* This callback prototype will be used if compiling
* for ANSI strings
*)
TDPEnumDPCallbackA = function(const lpguidSP: TGUID; lpSPName: PAnsiChar;
dwMajorVersion: DWORD; dwMinorVersion: DWORD; lpContext: Pointer): BOOL; stdcall;
 
(*
* Unicode callback for DirectPlayEnumerate
* This callback prototype will be used if compiling
* for Unicode strings
*)
TDPEnumDPCallbackW = function(const lpguidSP: TGUID; lpSPName: PWideChar;
dwMajorVersion: DWORD; dwMinorVersion: DWORD; lpContext: Pointer): BOOL; stdcall;
 
(*
* Callback for DirectPlayEnumerate
*)
{$IFDEF UNICODE}
TDPEnumDPCallback = TDPEnumDPCallbackW;
{$ELSE}
TDPEnumDPCallback = TDPEnumDPCallbackA;
{$ENDIF}
 
(*
* Callback for IDirectPlay3(A/W).EnumConnections
*)
TDPEnumConnectionsCallback = function(const lpguidSP: TGUID;
lpConnection: Pointer; dwConnectionSize: DWORD; const lpName: TDPName;
dwFlags: DWORD; lpContext: Pointer): BOOL; stdcall;
 
(*
* API's
*)
 
var
DirectPlayEnumerate: function(lpEnumDPCallback: TDPEnumDPCallback;
lpContext: Pointer): HResult; stdcall;
DirectPlayEnumerateA: function(lpEnumDPCallback: TDPEnumDPCallbackA;
lpContext: Pointer): HResult; stdcall;
DirectPlayEnumerateW: function(lpEnumDPCallback: TDPEnumDPCallbackW;
lpContext: Pointer): HResult; stdcall;
 
(****************************************************************************
*
* IDirectPlay2 (and IDirectPlay2A) Interface
*
****************************************************************************)
 
type
IDirectPlay2AW = interface(IUnknown)
(*** IDirectPlay2 methods ***)
function AddPlayerToGroup(idGroup: TDPID; idPlayer: TDPID): HResult; stdcall;
function Close: HResult; stdcall;
function CreateGroup(out lpidGroup: TDPID; lpGroupName: PDPName;
lpData: Pointer; dwDataSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function CreatePlayer(out lpidPlayer: TDPID; pPlayerName: PDPName;
hEvent: THandle; lpData: Pointer; dwDataSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function DeletePlayerFromGroup(idGroup: TDPID; idPlayer: TDPID): HResult; stdcall;
function DestroyGroup(idGroup: TDPID): HResult; stdcall;
function DestroyPlayer(idPlayer: TDPID): HResult; stdcall;
function EnumGroupPlayers(idGroup: TDPID; lpguidInstance: PGUID;
lpEnumPlayersCallback2: TDPEnumPlayersCallback2; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function EnumGroups(lpguidInstance: PGUID; lpEnumPlayersCallback2:
TDPEnumPlayersCallback2; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function EnumPlayers(lpguidInstance: PGUID; lpEnumPlayersCallback2:
TDPEnumPlayersCallback2; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function EnumSessions(const lpsd: TDPSessionDesc2; dwTimeout: DWORD;
lpEnumSessionsCallback2: TDPEnumSessionsCallback2; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function GetCaps(var lpDPCaps: TDPCaps; dwFlags: DWORD): HResult; stdcall;
function GetGroupData(idGroup: TDPID; lpData: Pointer; var lpdwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function GetGroupName(idGroup: TDPID; lpData: Pointer; var lpdwDataSize: DWORD):
HResult; stdcall;
function GetMessageCount(idPlayer: TDPID; var lpdwCount: DWORD): HResult; stdcall;
function GetPlayerAddress(idPlayer: TDPID; lpAddress: Pointer;
var lpdwAddressSize: DWORD): HResult; stdcall;
function GetPlayerCaps(idPlayer: TDPID; var lpPlayerCaps: TDPCaps;
dwFlags: DWORD): HResult; stdcall;
function GetPlayerData(idPlayer: TDPID; lpData: Pointer; var lpdwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function GetPlayerName(idPlayer: TDPID; lpData: Pointer; var lpdwDataSize: DWORD): HResult; stdcall;
function GetSessionDesc(lpData: Pointer; var lpdwDataSize: DWORD): HResult; stdcall;
function Initialize(const lpGUID: TGUID): HResult; stdcall;
function Open(var lpsd: TDPSessionDesc2; dwFlags: DWORD): HResult; stdcall;
function Receive(var lpidFrom: TDPID; var lpidTo: TDPID; dwFlags: DWORD;
lpData: Pointer; var lpdwDataSize: DWORD): HResult; stdcall;
function Send(idFrom: TDPID; lpidTo: TDPID; dwFlags: DWORD; var lpData;
lpdwDataSize: DWORD): HResult; stdcall;
function SetGroupData(idGroup: TDPID; lpData: Pointer; dwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function SetGroupName(idGroup: TDPID; lpGroupName: PDPName;
dwFlags: DWORD): HResult; stdcall;
function SetPlayerData(idPlayer: TDPID; lpData: Pointer; dwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function SetPlayerName(idPlayer: TDPID; lpPlayerName: PDPName;
dwFlags: DWORD): HResult; stdcall;
function SetSessionDesc(var lpSessDesc: TDPSessionDesc2; dwFlags: DWORD):
HResult; stdcall;
end;
 
IDirectPlay2W = interface(IDirectPlay2AW)
['{2B74F7C0-9154-11CF-A9CD-00AA006886E3}']
end;
IDirectPlay2A = interface(IDirectPlay2AW)
['{9d460580-a822-11cf-960c-0080c7534e82}']
end;
 
{$IFDEF UNICODE}
IDirectPlay2 = IDirectPlay2W;
{$ELSE}
IDirectPlay2 = IDirectPlay2A;
{$ENDIF}
 
(****************************************************************************
*
* IDirectPlay3 (and IDirectPlay3A) Interface
*
****************************************************************************)
 
IDirectPlay3AW = interface(IDirectPlay2AW)
(*** IDirectPlay3 methods ***)
function AddGroupToGroup(idParentGroup: TDPID; idGroup: TDPID): HResult; stdcall;
function CreateGroupInGroup(idParentGroup: TDPID; var lpidGroup: TDPID;
lpGroupName: PDPName; lpData: Pointer; dwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function DeleteGroupFromGroup(idParentGroup: TDPID; idGroup: TDPID): HResult; stdcall;
function EnumConnections(lpguidApplication: PGUID;
lpEnumCallback: TDPEnumConnectionsCallback; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function EnumGroupsInGroup(idGroup: TDPID; lpguidInstance: PGUID;
lpEnumPlayersCallback2: TDPEnumPlayersCallback2; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function GetGroupConnectionSettings(dwFlags: DWORD; idGroup: TDPID;
lpData: Pointer; var lpdwDataSize: DWORD): HResult; stdcall;
function InitializeConnection(lpConnection: Pointer; dwFlags: DWORD): HResult; stdcall;
function SecureOpen(var lpsd: TDPSessionDesc2; dwFlags: DWORD;
var lpSecurity: TDPSecurityDesc; var lpCredentials: TDPCredentials): HResult; stdcall;
function SendChatMessage(idFrom: TDPID; idTo: TDPID; dwFlags: DWORD;
var lpChatMessage: TDPChat): HResult; stdcall;
function SetGroupConnectionSettings(dwFlags: DWORD; idGroup: TDPID;
var lpConnection: TDPLConnection): HResult; stdcall;
function StartSession(dwFlags: DWORD; idGroup: TDPID): HResult; stdcall;
function GetGroupFlags(idGroup: TDPID; out lpdwFlags: DWORD): HResult; stdcall;
function GetGroupParent(idGroup: TDPID; out lpidParent: TDPID): HResult; stdcall;
function GetPlayerAccount(idPlayer: TDPID; dwFlags: DWORD; var lpData;
var lpdwDataSize: DWORD): HResult; stdcall;
function GetPlayerFlags(idPlayer: TDPID; out lpdwFlags: DWORD): HResult; stdcall;
end;
 
IDirectPlay3W = interface(IDirectPlay3AW)
['{133EFE40-32DC-11D0-9CFB-00A0C90A43CB}']
end;
IDirectPlay3A = interface(IDirectPlay3AW)
['{133efe41-32dc-11d0-9cfb-00a0c90a43cb}']
end;
 
{$IFDEF UNICODE}
IDirectPlay3 = IDirectPlay3W;
{$ELSE}
IDirectPlay3 = IDirectPlay3A;
{$ENDIF}
 
(****************************************************************************
*
* IDirectPlay4 (and IDirectPlay4A) Interface
*
****************************************************************************)
 
IDirectPlay4AW = interface(IDirectPlay3AW)
(*** IDirectPlay4 methods ***)
function GetGroupOwner(idGroup: TDPID; out idOwner: TDPID): HResult; stdcall;
function SetGroupOwner(idGroup: TDPID; idOwner: TDPID): HResult; stdcall;
function SendEx(idFrom: TDPID; idTo: TDPID; dwFlags: DWORD; lpData: Pointer;
dwDataSize: DWORD; dwPriority: DWORD; dwTimeout: DWORD;
lpContext: Pointer; lpdwMsgId: PDWORD): HResult; stdcall;
function GetMessageQueue(idFrom: TDPID; idTo: TDPID; dwFlags: DWORD;
lpdwNumMsgs: PDWORD; lpdwNumBytes: PDWORD): HResult; stdcall;
function CancelMessage(dwMessageID: DWORD; dwFlags: DWORD): HResult; stdcall;
function CancelPriority(dwMinPriority: DWORD; dwMaxPriority: DWORD; dwFlags: DWORD): HResult; stdcall;
end;
 
IDirectPlay4W = interface(IDirectPlay4AW)
['{0ab1c530-4745-11D1-a7a1-0000f803abfc}']
end;
IDirectPlay4A = interface(IDirectPlay4AW)
['{0ab1c531-4745-11D1-a7a1-0000f803abfc}']
end;
 
{$IFDEF UNICODE}
IDirectPlay4 = IDirectPlay4W;
{$ELSE}
IDirectPlay4 = IDirectPlay4A;
{$ENDIF}
 
const
(****************************************************************************
*
* EnumConnections API flags
*
****************************************************************************)
 
(*
* Enumerate Service Providers
*)
DPCONNECTION_DIRECTPLAY = $00000001;
 
(*
* Enumerate Lobby Providers
*)
DPCONNECTION_DIRECTPLAYLOBBY = $00000002;
 
(****************************************************************************
*
* EnumPlayers API flags
*
****************************************************************************)
 
(*
* Enumerate all players in the current session
*)
DPENUMPLAYERS_ALL = $00000000;
DPENUMGROUPS_ALL = DPENUMPLAYERS_ALL;
 
(*
* Enumerate only local (created by this application) players
* or groups
*)
DPENUMPLAYERS_LOCAL = $00000008;
DPENUMGROUPS_LOCAL = DPENUMPLAYERS_LOCAL;
 
(*
* Enumerate only remote (non-local) players
* or groups
*)
DPENUMPLAYERS_REMOTE = $00000010;
DPENUMGROUPS_REMOTE = DPENUMPLAYERS_REMOTE;
 
(*
* Enumerate groups along with the players
*)
DPENUMPLAYERS_GROUP = $00000020;
 
(*
* Enumerate players or groups in another session
* (must supply lpguidInstance)
*)
DPENUMPLAYERS_SESSION = $00000080;
DPENUMGROUPS_SESSION = DPENUMPLAYERS_SESSION;
 
(*
* Enumerate server players
*)
DPENUMPLAYERS_SERVERPLAYER = $00000100;
 
(*
* Enumerate spectator players
*)
DPENUMPLAYERS_SPECTATOR = $00000200;
 
(*
* Enumerate shortcut groups
*)
DPENUMGROUPS_SHORTCUT = $00000400;
 
(*
* Enumerate staging area groups
*)
DPENUMGROUPS_STAGINGAREA = $00000800;
 
(*
* Enumerate hidden groups
*)
DPENUMGROUPS_HIDDEN = $00001000;
 
(*
* Enumerate the group's owner
*)
DPENUMPLAYERS_OWNER = $00002000;
 
(****************************************************************************
*
* CreatePlayer API flags
*
****************************************************************************)
 
(*
* This flag indicates that this player should be designated
* the server player. The app should specify this at CreatePlayer.
*)
DPPLAYER_SERVERPLAYER = DPENUMPLAYERS_SERVERPLAYER;
 
(*
* This flag indicates that this player should be designated
* a spectator. The app should specify this at CreatePlayer.
*)
DPPLAYER_SPECTATOR = DPENUMPLAYERS_SPECTATOR;
 
(*
* This flag indicates that this player was created locally.
* (returned from GetPlayerFlags)
*)
DPPLAYER_LOCAL = DPENUMPLAYERS_LOCAL;
 
(*
* This flag indicates that this player is the group's owner
* (Only returned in EnumGroupPlayers)
*)
DPPLAYER_OWNER = DPENUMPLAYERS_OWNER;
 
(****************************************************************************
*
* CreateGroup API flags
*
****************************************************************************)
 
(*
* This flag indicates that the StartSession can be called on the group.
* The app should specify this at CreateGroup, or CreateGroupInGroup.
*)
DPGROUP_STAGINGAREA = DPENUMGROUPS_STAGINGAREA;
 
(*
* This flag indicates that this group was created locally.
* (returned from GetGroupFlags)
*)
DPGROUP_LOCAL = DPENUMGROUPS_LOCAL;
 
(*
* This flag indicates that this group was created hidden.
*)
DPGROUP_HIDDEN = DPENUMGROUPS_HIDDEN;
 
(****************************************************************************
*
* EnumSessions API flags
*
****************************************************************************)
 
(*
* Enumerate sessions which can be joined
*)
DPENUMSESSIONS_AVAILABLE = $00000001;
 
(*
* Enumerate all sessions even if they can't be joined.
*)
DPENUMSESSIONS_ALL = $00000002;
 
(*
* Start an asynchronous enum sessions
*)
DPENUMSESSIONS_ASYNC = $00000010;
 
(*
* Stop an asynchronous enum sessions
*)
DPENUMSESSIONS_STOPASYNC = $00000020;
 
(*
* Enumerate sessions even if they require a password
*)
DPENUMSESSIONS_PASSWORDREQUIRED = $00000040;
 
(*
* Return status about progress of enumeration instead of
* showing any status dialogs.
*)
DPENUMSESSIONS_RETURNSTATUS = $00000080;
 
(****************************************************************************
*
* GetCaps and GetPlayerCaps API flags
*
****************************************************************************)
 
(*
* The latency returned should be for guaranteed message sending.
* Default is non-guaranteed messaging.
*)
DPGETCAPS_GUARANTEED = $00000001;
 
(****************************************************************************
*
* GetGroupData, GetPlayerData API flags
* Remote and local Group/Player data is maintained separately.
* Default is DPGET_REMOTE.
*
****************************************************************************)
 
(*
* Get the remote data (set by any DirectPlay object in
* the session using DPSET_REMOTE)
*)
DPGET_REMOTE = $00000000;
 
(*
* Get the local data (set by this DirectPlay object
* using DPSET_LOCAL)
*)
DPGET_LOCAL = $00000001;
 
(****************************************************************************
*
* Open API flags
*
****************************************************************************)
 
(*
* Join the session that is described by the DPSESSIONDESC2 structure
*)
DPOPEN_JOIN = $00000001;
 
(*
* Create a new session as described by the DPSESSIONDESC2 structure
*)
DPOPEN_CREATE = $00000002;
 
(*
* Return status about progress of open instead of showing
* any status dialogs.
*)
DPOPEN_RETURNSTATUS = DPENUMSESSIONS_RETURNSTATUS;
 
(****************************************************************************
*
* DPLCONNECTION flags
*
****************************************************************************)
 
(*
* This application should create a new session as
* described by the DPSESIONDESC structure
*)
DPLCONNECTION_CREATESESSION = DPOPEN_CREATE;
 
(*
* This application should join the session described by
* the DPSESIONDESC structure with the lpAddress data
*)
DPLCONNECTION_JOINSESSION = DPOPEN_JOIN;
 
(****************************************************************************
*
* Receive API flags
* Default is DPRECEIVE_ALL
*
****************************************************************************)
 
(*
* Get the first message in the queue
*)
DPRECEIVE_ALL = $00000001;
 
(*
* Get the first message in the queue directed to a specific player
*)
DPRECEIVE_TOPLAYER = $00000002;
 
(*
* Get the first message in the queue from a specific player
*)
DPRECEIVE_FROMPLAYER = $00000004;
 
(*
* Get the message but don't remove it from the queue
*)
DPRECEIVE_PEEK = $00000008;
 
(****************************************************************************
*
* Send API flags
*
****************************************************************************)
 
(*
* Send the message using a guaranteed send method.
* Default is non-guaranteed.
*)
DPSEND_GUARANTEED = $00000001;
 
(*
* This flag is obsolete. It is ignored by DirectPlay
*)
DPSEND_HIGHPRIORITY = $00000002;
 
(*
* This flag is obsolete. It is ignored by DirectPlay
*)
DPSEND_OPENSTREAM = $00000008;
 
(*
* This flag is obsolete. It is ignored by DirectPlay
*)
DPSEND_CLOSESTREAM = $00000010;
 
(*
* Send the message digitally signed to ensure authenticity.
*)
DPSEND_SIGNED = $00000020;
 
(*
* Send the message with encryption to ensure privacy.
*)
DPSEND_ENCRYPTED = $00000040;
 
(*
* The message is a lobby system message
*)
DPSEND_LOBBYSYSTEMMESSAGE = $00000080;
 
(*
* andyco - added this so we can make addforward async.
* needs to be sanitized when we add / expose full async
* support. 8/3/97.
*)
DPSEND_ASYNC = $00000200;
 
(*
* When a message is completed, don't tell me.
* by default the application is notified with a system message.
*)
DPSEND_NOSENDCOMPLETEMSG = $00000400;
 
(*
* Maximum priority for sends available to applications
*)
DPSEND_MAX_PRI = $0000FFFF;
DPSEND_MAX_PRIORITY = DPSEND_MAX_PRI;
 
(****************************************************************************
*
* SetGroupData, SetGroupName, SetPlayerData, SetPlayerName,
* SetSessionDesc API flags.
* Default is DPSET_REMOTE.
*
****************************************************************************)
 
(*
* Propagate the data to all players in the session
*)
DPSET_REMOTE = $00000000;
 
(*
* Do not propagate the data to other players
*)
DPSET_LOCAL = $00000001;
 
(*
* Used with DPSET_REMOTE, use guaranteed message send to
* propagate the data
*)
DPSET_GUARANTEED = $00000002;
 
(****************************************************************************
*
* GetMessageQueue API flags.
* Default is DPMESSAGEQUEUE_SEND
*
****************************************************************************)
 
(*
* Get Send Queue - requires Service Provider Support
*)
DPMESSAGEQUEUE_SEND = $00000001;
 
(*
* Get Receive Queue
*)
DPMESSAGEQUEUE_RECEIVE = $00000002;
 
(****************************************************************************
*
* Connect API flags
*
****************************************************************************)
 
(*
* Start an asynchronous connect which returns status codes
*)
DPCONNECT_RETURNSTATUS = DPENUMSESSIONS_RETURNSTATUS;
 
(****************************************************************************
*
* DirectPlay system messages and message data structures
*
* All system message come 'From' player DPID_SYSMSG. To determine what type
* of message it is, cast the lpData from Receive to TDPMsg_Generic and check
* the dwType member against one of the following DPSYS_xxx constants. Once
* a match is found, cast the lpData to the corresponding of the DPMSG_xxx
* structures to access the data of the message.
*
****************************************************************************)
 
(*
* A new player or group has been created in the session
* Use TDPMsg_CreatePlayerOrGroup. Check dwPlayerType to see if it
* is a player or a group.
*)
DPSYS_CREATEPLAYERORGROUP = $0003;
 
(*
* A player has been deleted from the session
* Use TDPMsg_DestroyPlayerOrGroup
*)
DPSYS_DESTROYPLAYERORGROUP = $0005;
 
(*
* A player has been added to a group
* Use DPMSG_ADDPLAYERTOGROUP
*)
DPSYS_ADDPLAYERTOGROUP = $0007;
 
(*
* A player has been removed from a group
* Use DPMSG_DELETEPLAYERFROMGROUP
*)
DPSYS_DELETEPLAYERFROMGROUP = $0021;
 
(*
* This DirectPlay object lost its connection with all the
* other players in the session.
* Use DPMSG_SESSIONLOST.
*)
DPSYS_SESSIONLOST = $0031;
 
(*
* The current host has left the session.
* This DirectPlay object is now the host.
* Use DPMSG_HOST.
*)
DPSYS_HOST = $0101;
 
(*
* The remote data associated with a player or
* group has changed. Check dwPlayerType to see
* if it is a player or a group
* Use DPMSG_SETPLAYERORGROUPDATA
*)
DPSYS_SETPLAYERORGROUPDATA = $0102;
 
(*
* The name of a player or group has changed.
* Check dwPlayerType to see if it is a player
* or a group.
* Use TDPMsg_SetPlayerOrGroupName
*)
DPSYS_SETPLAYERORGROUPNAME = $0103;
 
(*
* The session description has changed.
* Use DPMSG_SETSESSIONDESC
*)
DPSYS_SETSESSIONDESC = $0104;
 
(*
* A group has been added to a group
* Use TDPMsg_AddGroupToGroup
*)
DPSYS_ADDGROUPTOGROUP = $0105;
 
(*
* A group has been removed from a group
* Use DPMsg_DeleteGroupFromGroup
*)
DPSYS_DELETEGROUPFROMGROUP = $0106;
 
(*
* A secure player-player message has arrived.
* Use DPMSG_SECUREMESSAGE
*)
DPSYS_SECUREMESSAGE = $0107;
 
(*
* Start a new session.
* Use DPMSG_STARTSESSION
*)
DPSYS_STARTSESSION = $0108;
 
(*
* A chat message has arrived
* Use DPMSG_CHAT
*)
DPSYS_CHAT = $0109;
 
(*
* The owner of a group has changed
* Use DPMSG_SETGROUPOWNER
*)
DPSYS_SETGROUPOWNER = $010A;
 
(*
* An async send has finished, failed or been cancelled
* Use DPMSG_SENDCOMPLETE
*)
DPSYS_SENDCOMPLETE = $010D;
 
(*
* Used in the dwPlayerType field to indicate if it applies to a group
* or a player
*)
DPPLAYERTYPE_GROUP = $00000000;
DPPLAYERTYPE_PLAYER = $00000001;
 
type
(*
* TDPMsg_Generic
* Generic message structure used to identify the message type.
*)
PDPMsg_Generic = ^TDPMsg_Generic;
TDPMsg_Generic = packed record
dwType: DWORD; // Message type
end;
 
(*
* TDPMsg_CreatePlayerOrGroup
* System message generated when a new player or group
* created in the session with information about it.
*)
PDPMsg_CreatePlayerOrGroup = ^TDPMsg_CreatePlayerOrGroup;
TDPMsg_CreatePlayerOrGroup = packed record
dwType: DWORD; // Message type
dwPlayerType: DWORD; // Is it a player or group
DPID: TDPID; // ID of the player or group
dwCurrentPlayers: DWORD; // current # players & groups in session
lpData: Pointer; // pointer to remote data
dwDataSize: DWORD; // size of remote data
dpnName: TDPName; // structure with name info
// the following fields are only available when using
// the IDirectPlay3 interface or greater
dpIdParent: TDPID; // id of parent group
dwFlags: DWORD; // player or group flags
end;
 
(*
* TDPMsg_DestroyPlayerOrGroup
* System message generated when a player or group is being
* destroyed in the session with information about it.
*)
PDPMsg_DestroyPlayerOrGroup = ^TDPMsg_DestroyPlayerOrGroup;
TDPMsg_DestroyPlayerOrGroup = packed record
dwType: DWORD; // Message type
dwPlayerType: DWORD; // Is it a player or group
DPID: TDPID; // player ID being deleted
lpLocalData: Pointer; // copy of players local data
dwLocalDataSize: DWORD; // sizeof local data
lpRemoteData: Pointer; // copy of players remote data
dwRemoteDataSize: DWORD; // sizeof remote data
// the following fields are only available when using
// the IDirectPlay3 interface or greater
dpnName: TDPName; // structure with name info
dpIdParent: TDPID; // id of parent group
dwFlags: DWORD; // player or group flags
end;
 
(*
* DPMSG_ADDPLAYERTOGROUP
* System message generated when a player is being added
* to a group.
*)
PDPMsg_AddPlayerToGroup = ^TDPMsg_AddPlayerToGroup;
TDPMsg_AddPlayerToGroup = packed record
dwType: DWORD; // Message type
dpIdGroup: TDPID; // group ID being added to
dpIdPlayer: TDPID; // player ID being added
end;
 
(*
* DPMSG_DELETEPLAYERFROMGROUP
* System message generated when a player is being
* removed from a group
*)
PDPMsg_DeletePlayerFromGroup = ^TDPMsg_DeletePlayerFromGroup;
TDPMsg_DeletePlayerFromGroup = TDPMsg_AddPlayerToGroup;
 
(*
* TDPMsg_AddGroupToGroup
* System message generated when a group is being added
* to a group.
*)
PDPMsg_AddGroupToGroup = ^TDPMsg_AddGroupToGroup;
TDPMsg_AddGroupToGroup = packed record
dwType: DWORD; // Message type
dpIdParentGroup: TDPID; // group ID being added to
dpIdGroup: TDPID; // group ID being added
end;
 
(*
* DPMsg_DeleteGroupFromGroup
* System message generated when a GROUP is being
* removed from a group
*)
PDPMsg_DeleteGroupFromGroup = ^TDPMsg_DeleteGroupFromGroup;
TDPMsg_DeleteGroupFromGroup = TDPMsg_AddGroupToGroup;
 
(*
* DPMSG_SETPLAYERORGROUPDATA
* System message generated when remote data for a player or
* group has changed.
*)
PDPMsg_SetPlayerOrGroupData = ^TDPMsg_SetPlayerOrGroupData;
TDPMsg_SetPlayerOrGroupData = packed record
dwType: DWORD; // Message type
dwPlayerType: DWORD; // Is it a player or group
DPID: TDPID; // ID of player or group
lpData: Pointer; // pointer to remote data
dwDataSize: DWORD; // size of remote data
end;
 
(*
* DPMSG_SETPLAYERORGROUPNAME
* System message generated when the name of a player or
* group has changed.
*)
PDPMsg_SetPlayerOrGroupName = ^TDPMsg_SetPlayerOrGroupName;
TDPMsg_SetPlayerOrGroupName = packed record
dwType: DWORD; // Message type
dwPlayerType: DWORD; // Is it a player or group
DPID: TDPID; // ID of player or group
dpnName: TDPName; // structure with new name info
end;
 
(*
* DPMSG_SETSESSIONDESC
* System message generated when session desc has changed
*)
PDPMsg_SetSessionDesc = ^TDPMsg_SetSessionDesc;
TDPMsg_SetSessionDesc = packed record
dwType: DWORD; // Message type
dpDesc: TDPSessionDesc2; // Session desc
end;
 
(*
* DPMSG_HOST
* System message generated when the host has migrated to this
* DirectPlay object.
*
*)
PDPMsg_Host = ^TDPMsg_Host;
TDPMsg_Host = TDPMsg_Generic;
 
(*
* DPMSG_SESSIONLOST
* System message generated when the connection to the session is lost.
*
*)
PDPMsg_SessionLost = ^TDPMsg_SessionLost;
TDPMsg_SessionLost = TDPMsg_Generic;
 
(*
* DPMSG_SECUREMESSAGE
* System message generated when a player requests a secure send
*)
PDPMsg_SecureMessage = ^TDPMsg_SecureMessage;
TDPMsg_SecureMessage = packed record
dwType: DWORD; // Message Type
dwFlags: DWORD; // Signed/Encrypted
dpIdFrom: TDPID; // ID of Sending Player
lpData: Pointer; // Player message
dwDataSize: DWORD; // Size of player message
end;
 
(*
* DPMSG_STARTSESSION
* System message containing all information required to
* start a new session
*)
PDPMsg_StartSession = ^TDPMsg_StartSession;
TDPMsg_StartSession = packed record
dwType: DWORD; // Message type
lpConn: PDPLConnection; // TDPLConnection structure
end;
 
(*
* DPMSG_CHAT
* System message containing a chat message
*)
PDPMsg_Chat = ^TDPMsg_Chat;
TDPMsg_Chat = packed record
dwType: DWORD; // Message type
dwFlags: DWORD; // Message flags
idFromPlayer: TDPID; // ID of the Sending Player
idToPlayer: TDPID; // ID of the To Player
idToGroup: TDPID; // ID of the To Group
lpChat: PDPChat; // Pointer to a structure containing the chat message
end;
 
(*
* DPMSG_SETGROUPOWNER
* System message generated when the owner of a group has changed
*)
PDPMsg_SetGroupOwner = ^TDPMsg_SetGroupOwner;
TDPMsg_SetGroupOwner = packed record
dwType: DWORD; // Message type
idGroup: TDPID; // ID of the group
idNewOwner: TDPID; // ID of the player that is the new owner
idOldOwner: TDPID; // ID of the player that used to be the owner
end;
 
(*
* DPMSG_SENDCOMPLETE
* System message generated when finished with an Async Send message
*
* NOTE SENDPARMS has an overlay for DPMSG_SENDCOMPLETE, don't
* change this message w/o changing SENDPARMS.
*)
PDPMsg_SendComplete = ^TDPMsg_SendComplete;
TDPMsg_SendComplete = packed record
dwType: DWORD; // Message type
idFrom: TDPID;
idTo: TDPID;
dwFlags: DWORD;
dwPriority: DWORD;
dwTimeout: DWORD;
lpvContext: Pointer;
dwMsgID: DWORD;
hr: HRESULT;
dwSendTime: DWORD;
end;
 
(****************************************************************************
*
* DIRECTPLAY ERRORS
*
* Errors are represented by negative values and cannot be combined.
*
****************************************************************************)
const
MAKE_DPHRESULT = HResult($88770000);
 
DP_OK = S_OK;
DPERR_ALREADYINITIALIZED = MAKE_DPHRESULT + 5;
DPERR_ACCESSDENIED = MAKE_DPHRESULT + 10;
DPERR_ACTIVEPLAYERS = MAKE_DPHRESULT + 20;
DPERR_BUFFERTOOSMALL = MAKE_DPHRESULT + 30;
DPERR_CANTADDPLAYER = MAKE_DPHRESULT + 40;
DPERR_CANTCREATEGROUP = MAKE_DPHRESULT + 50;
DPERR_CANTCREATEPLAYER = MAKE_DPHRESULT + 60;
DPERR_CANTCREATESESSION = MAKE_DPHRESULT + 70;
DPERR_CAPSNOTAVAILABLEYET = MAKE_DPHRESULT + 80;
DPERR_EXCEPTION = MAKE_DPHRESULT + 90;
DPERR_GENERIC = E_FAIL;
DPERR_INVALIDFLAGS = MAKE_DPHRESULT + 120;
DPERR_INVALIDOBJECT = MAKE_DPHRESULT + 130;
DPERR_INVALIDPARAM = E_INVALIDARG;
DPERR_INVALIDPARAMS = DPERR_INVALIDPARAM;
DPERR_INVALIDPLAYER = MAKE_DPHRESULT + 150;
DPERR_INVALIDGROUP = MAKE_DPHRESULT + 155;
DPERR_NOCAPS = MAKE_DPHRESULT + 160;
DPERR_NOCONNECTION = MAKE_DPHRESULT + 170;
DPERR_NOMEMORY = E_OUTOFMEMORY;
DPERR_OUTOFMEMORY = DPERR_NOMEMORY;
DPERR_NOMESSAGES = MAKE_DPHRESULT + 190;
DPERR_NONAMESERVERFOUND = MAKE_DPHRESULT + 200;
DPERR_NOPLAYERS = MAKE_DPHRESULT + 210;
DPERR_NOSESSIONS = MAKE_DPHRESULT + 220;
DPERR_PENDING = E_PENDING;
DPERR_SENDTOOBIG = MAKE_DPHRESULT + 230;
DPERR_TIMEOUT = MAKE_DPHRESULT + 240;
DPERR_UNAVAILABLE = MAKE_DPHRESULT + 250;
DPERR_UNSUPPORTED = E_NOTIMPL;
DPERR_BUSY = MAKE_DPHRESULT + 270;
DPERR_USERCANCEL = MAKE_DPHRESULT + 280;
DPERR_NOINTERFACE = E_NOINTERFACE;
DPERR_CANNOTCREATESERVER = MAKE_DPHRESULT + 290;
DPERR_PLAYERLOST = MAKE_DPHRESULT + 300;
DPERR_SESSIONLOST = MAKE_DPHRESULT + 310;
DPERR_UNINITIALIZED = MAKE_DPHRESULT + 320;
DPERR_NONEWPLAYERS = MAKE_DPHRESULT + 330;
DPERR_INVALIDPASSWORD = MAKE_DPHRESULT + 340;
DPERR_CONNECTING = MAKE_DPHRESULT + 350;
DPERR_CONNECTIONLOST = MAKE_DPHRESULT + 360;
DPERR_UNKNOWNMESSAGE = MAKE_DPHRESULT + 370;
DPERR_CANCELFAILED = MAKE_DPHRESULT + 380;
DPERR_INVALIDPRIORITY = MAKE_DPHRESULT + 390;
DPERR_NOTHANDLED = MAKE_DPHRESULT + 400;
DPERR_CANCELLED = MAKE_DPHRESULT + 410;
DPERR_ABORTED = MAKE_DPHRESULT + 420;
 
DPERR_BUFFERTOOLARGE = MAKE_DPHRESULT + 1000;
DPERR_CANTCREATEPROCESS = MAKE_DPHRESULT + 1010;
DPERR_APPNOTSTARTED = MAKE_DPHRESULT + 1020;
DPERR_INVALIDINTERFACE = MAKE_DPHRESULT + 1030;
DPERR_NOSERVICEPROVIDER = MAKE_DPHRESULT + 1040;
DPERR_UNKNOWNAPPLICATION = MAKE_DPHRESULT + 1050;
DPERR_NOTLOBBIED = MAKE_DPHRESULT + 1070;
DPERR_SERVICEPROVIDERLOADED = MAKE_DPHRESULT + 1080;
DPERR_ALREADYREGISTERED = MAKE_DPHRESULT + 1090;
DPERR_NOTREGISTERED = MAKE_DPHRESULT + 1100;
 
//
// Security related errors
//
DPERR_AUTHENTICATIONFAILED = MAKE_DPHRESULT + 2000;
DPERR_CANTLOADSSPI = MAKE_DPHRESULT + 2010;
DPERR_ENCRYPTIONFAILED = MAKE_DPHRESULT + 2020;
DPERR_SIGNFAILED = MAKE_DPHRESULT + 2030;
DPERR_CANTLOADSECURITYPACKAGE = MAKE_DPHRESULT + 2040;
DPERR_ENCRYPTIONNOTSUPPORTED = MAKE_DPHRESULT + 2050;
DPERR_CANTLOADCAPI = MAKE_DPHRESULT + 2060;
DPERR_NOTLOGGEDIN = MAKE_DPHRESULT + 2070;
DPERR_LOGONDENIED = MAKE_DPHRESULT + 2080;
 
(****************************************************************************
*
* dplay 1.0 obsolete structures + interfaces
* Included for compatibility only. New apps should
* use IDirectPlay2
*
****************************************************************************)
 
DPOPEN_OPENSESSION = DPOPEN_JOIN;
DPOPEN_CREATESESSION = DPOPEN_CREATE;
 
DPENUMSESSIONS_PREVIOUS = $00000004;
 
DPENUMPLAYERS_PREVIOUS = $00000004;
 
DPSEND_GUARANTEE = DPSEND_GUARANTEED;
DPSEND_TRYONCE = $00000004;
 
DPCAPS_NAMESERVICE = $00000001;
DPCAPS_NAMESERVER = DPCAPS_ISHOST;
DPCAPS_GUARANTEED = $00000004;
 
DPLONGNAMELEN = 52;
DPSHORTNAMELEN = 20;
DPSESSIONNAMELEN = 32;
DPPASSWORDLEN = 16;
DPUSERRESERVED = 16;
 
DPSYS_ADDPLAYER = $0003;
DPSYS_DELETEPLAYER = $0005;
 
DPSYS_DELETEGROUP = $0020;
DPSYS_DELETEPLAYERFROMGRP = $0021;
DPSYS_CONNECT = $484B;
 
type
PDPMsg_AddPlayer = ^TDPMsg_AddPlayer;
TDPMsg_AddPlayer = packed record
dwType: DWORD;
dwPlayerType: DWORD;
DPID: TDPID;
szLongName: array[0..DPLONGNAMELEN - 1] of Char;
szShortName: array[0..DPSHORTNAMELEN - 1] of Char;
dwCurrentPlayers: DWORD;
end;
 
PDPMsg_AddGroup = ^TDPMsg_AddGroup;
TDPMsg_AddGroup = TDPMsg_AddPlayer;
 
PDPMsg_GroupAdd = ^TDPMsg_GroupAdd;
TDPMsg_GroupAdd = packed record
dwType: DWORD;
dpIdGroup: TDPID;
dpIdPlayer: TDPID;
end;
 
PDPMsg_GroupDelete = ^TDPMsg_GroupDelete;
TDPMsg_GroupDelete = TDPMsg_GroupAdd;
 
PDPMsg_DeletePlayer = ^TDPMsg_DeletePlayer;
TDPMsg_DeletePlayer = packed record
dwType: DWORD;
DPID: TDPID;
end;
 
TDPEnumPlayersCallback = function(dpId: TDPID; lpFriendlyName: PChar;
lpFormalName: PChar; dwFlags: DWORD; lpContext: Pointer): BOOL; stdcall;
 
PDPSessionDesc = ^TDPSessionDesc;
TDPSessionDesc = packed record
dwSize: DWORD;
guidSession: TGUID;
dwSession: DWORD;
dwMaxPlayers: DWORD;
dwCurrentPlayers: DWORD;
dwFlags: DWORD;
szSessionName: array[0..DPSESSIONNAMELEN - 1] of Char;
szUserField: array[0..DPUSERRESERVED - 1] of Char;
dwReserved1: DWORD;
szPassword: array[0..DPPASSWORDLEN - 1] of Char;
dwReserved2: DWORD;
dwUser1: DWORD;
dwUser2: DWORD;
dwUser3: DWORD;
dwUser4: DWORD;
end;
 
TDPEnumSessionsCallback = function(const lpDPSessionDesc: TDPSessionDesc;
lpContext: Pointer; var lpdwTimeOut: DWORD; dwFlags: DWORD): BOOL; stdcall;
 
type
IDirectPlay = interface(IUnknown)
['{5454e9a0-db65-11ce-921c-00aa006c4972}']
(*** IDirectPlay methods ***)
function AddPlayerToGroup(pidGroup: TDPID; pidPlayer: TDPID): HResult; stdcall;
function Close: HResult; stdcall;
function CreatePlayer(out lppidID: TDPID; lpPlayerFriendlyName: PChar;
lpPlayerFormalName: PChar; lpEvent: PHandle): HResult; stdcall;
function CreateGroup(out lppidID: TDPID; lpGroupFriendlyName: PChar;
lpGroupFormalName: PChar): HResult; stdcall;
function DeletePlayerFromGroup(pidGroup: TDPID; pidPlayer: TDPID): HResult; stdcall;
function DestroyPlayer(pidID: TDPID): HResult; stdcall;
function DestroyGroup(pidID: TDPID): HResult; stdcall;
function EnableNewPlayers(bEnable: BOOL): HResult; stdcall;
function EnumGroupPlayers(pidGroupPID: TDPID; lpEnumPlayersCallback:
TDPEnumPlayersCallback; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function EnumGroups(dwSessionID: DWORD; lpEnumPlayersCallback:
TDPEnumPlayersCallback; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function EnumPlayers(dwSessionId: DWORD; lpEnumPlayersCallback:
TDPEnumPlayersCallback; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function EnumSessions(var lpSDesc: TDPSessionDesc; dwTimeout: DWORD;
lpEnumSessionsCallback: TDPEnumSessionsCallback; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function GetCaps(var lpDPCaps: TDPCaps): HResult; stdcall;
function GetMessageCount(pidID: TDPID; var lpdwCount: DWORD): HResult; stdcall;
function GetPlayerCaps(pidID: TDPID; var lpDPPlayerCaps: TDPCaps): HResult; stdcall;
function GetPlayerName(pidID: TDPID; lpPlayerFriendlyName: PChar;
var lpdwFriendlyNameLength: DWORD; lpPlayerFormalName: PChar;
var lpdwFormalNameLength: DWORD): HResult; stdcall;
function Initialize(const lpGUID: TGUID): HResult; stdcall;
function Open(var lpSDesc: TDPSessionDesc): HResult; stdcall;
function Receive(var lppidFrom, lppidTo: TDPID; dwFlags: DWORD;
var lpvBuffer; var lpdwSize: DWORD): HResult; stdcall;
function SaveSession(lpSessionName: PChar): HResult; stdcall;
function Send(pidFrom: TDPID; pidTo: TDPID; dwFlags: DWORD;
var lpvBuffer; dwBuffSize: DWORD): HResult; stdcall;
function SetPlayerName(pidID: TDPID; lpPlayerFriendlyName: PChar;
lpPlayerFormalName: PChar): HResult; stdcall;
end;
 
(*
* GUIDS used by DirectPlay objects
*)
IID_IDirectPlay2W = IDirectPlay2W;
IID_IDirectPlay2A = IDirectPlay2A;
IID_IDirectPlay2 = IDirectPlay2;
 
IID_IDirectPlay3W = IDirectPlay3W;
IID_IDirectPlay3A = IDirectPlay3A;
IID_IDirectPlay3 = IDirectPlay3;
 
IID_IDirectPlay4W = IDirectPlay4W;
IID_IDirectPlay4A = IDirectPlay4A;
IID_IDirectPlay4 = IDirectPlay4;
 
IID_IDirectPlay = IDirectPlay;
 
var
DirectPlayCreate: function(lpGUID: PGUID; out lplpDP: IDirectPlay;
pUnk: IUnknown): HResult; stdcall;
 
(*==========================================================================;
*
* Copyright (C) 1996-1997 Microsoft Corporation. All Rights Reserved.
*
* File: dplobby.h
* Content: DirectPlayLobby include file
***************************************************************************)
 
(*
* GUIDS used by DirectPlay objects
*)
 
const
(* {2FE8F810-B2A5-11d0-A787-0000F803ABFC} *)
CLSID_DirectPlayLobby: TGUID =
(D1: $2FE8F810; D2: $B2A5; D3: $11D0; D4: ($A7, $87, $00, $00, $F8, $3, $AB, $FC));
 
(****************************************************************************
*
* IDirectPlayLobby Structures
*
* Various structures used to invoke DirectPlayLobby.
*
****************************************************************************)
 
type
(*
* TDPLAppInfo
* Used to hold information about a registered DirectPlay
* application
*)
PDPLAppInfo = ^TDPLAppInfo;
TDPLAppInfo = packed record
dwSize: DWORD; // Size of this structure
guidApplication: TGUID; // GUID of the Application
case Integer of // Pointer to the Application Name
0: (lpszAppName: PCharAW);
1: (lpszAppNameW: PWideChar);
3: (lpszAppNameA: PChar);
end;
 
(*
* TDPCompoundAddressElement
*
* An array of these is passed to CreateCompoundAddresses()
*)
PDPCompoundAddressElement = ^TDPCompoundAddressElement;
TDPCompoundAddressElement = packed record
guidDataType: TGUID;
dwDataSize: DWORD;
lpData: Pointer;
end;
 
(*
* TDPApplicationDesc
* Used to register a DirectPlay application
*)
PDPApplicationDesc = ^TDPApplicationDesc;
TDPApplicationDesc = packed record
dwSize: DWORD;
dwFlags: DWORD;
case Integer of
0: (lpszApplicationName: PCharAW;
guidApplication: TGUID;
lpszFilename: PCharAW;
lpszCommandLine: PCharAW;
lpszPath: PCharAW;
lpszCurrentDirectory: PCharAW;
lpszDescriptionA: PAnsiChar;
lpszDescriptionW: PWideChar);
1: (lpszApplicationNameA: PAnsiChar;
filler1: TGUID;
lpszFilenameA: PAnsiChar;
lpszCommandLineA: PAnsiChar;
lpszPathA: PAnsiChar;
lpszCurrentDirectoryA: PAnsiChar);
2: (lpszApplicationNameW: PWideChar;
filler2: TGUID;
lpszFilenameW: PWideChar;
lpszCommandLineW: PWideChar;
lpszPathW: PWideChar;
lpszCurrentDirectoryW: PWideChar);
end;
 
(*
* TDPApplicationDesc2
* Used to register a DirectPlay application
*)
PDPApplicationDesc2 = ^TDPApplicationDesc2;
TDPApplicationDesc2 = packed record
dwSize: DWORD;
dwFlags: DWORD;
case Integer of
0: (lpszApplicationName: PCharAW;
guidApplication: TGUID;
lpszFilename: PCharAW;
lpszCommandLine: PCharAW;
lpszPath: PCharAW;
lpszCurrentDirectory: PCharAW;
lpszDescriptionA: PAnsiChar;
lpszDescriptionW: PWideChar;
lpszAppLauncherName: PCharAW);
1: (lpszApplicationNameA: PAnsiChar;
filler1: TGUID;
lpszFilenameA: PAnsiChar;
lpszCommandLineA: PAnsiChar;
lpszPathA: PAnsiChar;
lpszCurrentDirectoryA: PAnsiChar;
filler3: PChar;
filler4: PChar;
lpszAppLauncherNameA: PAnsiChar);
2: (lpszApplicationNameW: PWideChar;
filler2: TGUID;
lpszFilenameW: PWideChar;
lpszCommandLineW: PWideChar;
lpszPathW: PWideChar;
lpszCurrentDirectoryW: PWideChar;
filler5: PChar;
filler6: PChar;
lpszAppLauncherNameW: PWideChar);
end;
 
(****************************************************************************
*
* Enumeration Method Callback Prototypes
*
****************************************************************************)
 
(*
* Callback for EnumAddress()
*)
TDPEnumAdressCallback = function(const guidDataType: TGUID;
dwDataSize: DWORD; lpData: Pointer; lpContext: Pointer): BOOL; stdcall;
 
(*
* Callback for EnumAddressTypes()
*)
TDPLEnumAddressTypesCallback = function(const guidDataType: TGUID;
lpContext: Pointer; dwFlags: DWORD): BOOL; stdcall;
 
(*
* Callback for EnumLocalApplications()
*)
TDPLEnumLocalApplicationsCallback = function(const lpAppInfo: TDPLAppInfo;
lpContext: Pointer; dwFlags: DWORD): BOOL; stdcall;
 
(****************************************************************************
*
* IDirectPlayLobby (and IDirectPlayLobbyA) Interface
*
****************************************************************************)
 
type
IDirectPlayLobbyAW = interface(IUnknown)
(*** IDirectPlayLobby methods ***)
function Connect(dwFlags: DWORD; out lplpDP: IDirectPlay2;
pUnk: IUnknown): HResult; stdcall;
function CreateAddress(const guidSP, guidDataType: TGUID; var lpData;
dwDataSize: DWORD; var lpAddress; var lpdwAddressSize: DWORD): HResult; stdcall;
function EnumAddress(lpEnumAddressCallback: TDPEnumAdressCallback;
var lpAddress; dwAddressSize: DWORD; lpContext: Pointer): HResult; stdcall;
function EnumAddressTypes(lpEnumAddressTypeCallback:
TDPLEnumAddressTypesCallback; const guidSP: TGUID; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function EnumLocalApplications(lpEnumLocalAppCallback: TDPLEnumLocalApplicationsCallback;
lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetConnectionSettings(dwAppID: DWORD; lpData: PDPLConnection;
var lpdwDataSize: DWORD): HResult; stdcall;
function ReceiveLobbyMessage(dwFlags: DWORD; dwAppID: DWORD;
var lpdwMessageFlags: DWORD; lpData: Pointer; var lpdwDataSize: DWORD): HResult; stdcall;
function RunApplication(dwFlags: DWORD; var lpdwAppId: DWORD;
const lpConn: TDPLConnection; hReceiveEvent: THandle): HResult; stdcall;
function SendLobbyMessage(dwFlags: DWORD; dwAppID: DWORD; const lpData;
dwDataSize: DWORD): HResult; stdcall;
function SetConnectionSettings(dwFlags: DWORD; dwAppID: DWORD;
var lpConn: TDPLConnection): HResult; stdcall;
function SetLobbyMessageEvent(dwFlags: DWORD; dwAppID: DWORD;
hReceiveEvent: THandle): HResult; stdcall;
end;
 
IDirectPlayLobbyW = interface(IDirectPlayLobbyAW)
['{AF465C71-9588-11CF-A020-00AA006157AC}']
end;
IDirectPlayLobbyA = interface(IDirectPlayLobbyAW)
['{26C66A70-B367-11cf-A024-00AA006157AC}']
end;
 
{$IFDEF UNICODE}
IDirectPlayLobby = IDirectPlayLobbyW;
{$ELSE}
IDirectPlayLobby = IDirectPlayLobbyA;
{$ENDIF}
 
(****************************************************************************
*
* IDirectPlayLobby2 (and IDirectPlayLobby2A) Interface
*
****************************************************************************)
 
IDirectPlayLobby2AW = interface(IDirectPlayLobbyAW)
(*** IDirectPlayLobby2 methods ***)
function CreateCompoundAddress(const lpElements: TDPCompoundAddressElement;
dwElementCount: DWORD; lpAddress: Pointer; var lpdwAddressSize: DWORD): HResult; stdcall;
end;
 
IDirectPlayLobby2W = interface(IDirectPlayLobby2AW)
['{0194C220-A303-11D0-9C4F-00A0C905425E}']
end;
IDirectPlayLobby2A = interface(IDirectPlayLobby2AW)
['{1BB4AF80-A303-11d0-9C4F-00A0C905425E}']
end;
 
{$IFDEF UNICODE}
IDirectPlayLobby2 = IDirectPlayLobby2W;
{$ELSE}
IDirectPlayLobby2 = IDirectPlayLobby2A;
{$ENDIF}
 
(****************************************************************************
*
* IDirectPlayLobby3 (and IDirectPlayLobby3A) Interface
*
****************************************************************************)
 
IDirectPlayLobby3AW = interface(IDirectPlayLobby2AW)
(*** IDirectPlayLobby3 methods ***)
function ConnectEx(dwFlags: DWORD; const riid: TGUID;
out lplpDP; pUnk: IUnknown): HResult; stdcall;
function RegisterApplication(dwFlags: DWORD;
var lpAppDesc: TDPApplicationDesc): HResult; stdcall;
function UnregisterApplication(dwFlags: DWORD;
const guidApplication: TGUID): HResult; stdcall;
function WaitForConnectionSettings(dwFlags: DWORD): HResult; stdcall;
end;
 
IDirectPlayLobby3W = interface(IDirectPlayLobby3AW)
['{2DB72490-652C-11d1-A7A8-0000F803ABFC}']
end;
IDirectPlayLobby3A = interface(IDirectPlayLobby3AW)
['{2DB72491-652C-11d1-A7A8-0000F803ABFC}']
end;
 
{$IFDEF UNICODE}
IDirectPlayLobby3 = IDirectPlayLobby3W;
{$ELSE}
IDirectPlayLobby3 = IDirectPlayLobby3A;
{$ENDIF}
 
IID_IDirectPlayLobbyW = IDirectPlayLobbyW;
IID_IDirectPlayLobbyA = IDirectPlayLobbyA;
IID_IDirectPlayLobby = IDirectPlayLobby;
 
IID_IDirectPlayLobby2W = IDirectPlayLobby2W;
IID_IDirectPlayLobby2A = IDirectPlayLobby2A;
IID_IDirectPlayLobby2 = IDirectPlayLobby2;
 
IID_IDirectPlayLobby3W = IDirectPlayLobby3W;
IID_IDirectPlayLobby3A = IDirectPlayLobby3A;
IID_IDirectPlayLobby3 = IDirectPlayLobby3;
 
(****************************************************************************
*
* DirectPlayLobby API Prototypes
*
****************************************************************************)
 
var
DirectPlayLobbyCreateW: function(lpguidSP: PGUID; out lplpDPL:
IDirectPlayLobbyW; lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HResult; stdcall;
DirectPlayLobbyCreateA: function(lpguidSP: PGUID; out lplpDPL:
IDirectPlayLobbyA; lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HResult; stdcall;
DirectPlayLobbyCreate: function(lpguidSP: PGUID; out lplpDPL:
IDirectPlayLobby; lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HResult; stdcall;
 
const
(****************************************************************************
*
* DirectPlayLobby Flags
*
****************************************************************************)
 
(*
* This flag is used by IDirectPlayLobby.WaitForConnectionSettings to
* cancel a current wait that is in progress.
*)
DPLWAIT_CANCEL = $00000001;
 
(*
* This is a message flag used by ReceiveLobbyMessage. It can be
* returned in the dwMessageFlags parameter to indicate a message from
* the system.
*)
DPLMSG_SYSTEM = $00000001;
 
(*
* This is a message flag used by ReceiveLobbyMessage and SendLobbyMessage.
* It is used to indicate that the message is a standard lobby message.
* TDPLMsg_SetProperty, TDPLMsg_SetPropertyResponse, TDPLMsg_GetProperty,
* TDPLMsg_GetPropertyResponse
*)
DPLMSG_STANDARD = $00000002;
 
type
(****************************************************************************
*
* DirectPlayLobby messages and message data structures
*
* All system messages have a dwMessageFlags value of DPLMSG_SYSTEM returned
* from a call to ReceiveLobbyMessage.
*
* All standard messages have a dwMessageFlags value of DPLMSG_STANDARD returned
* from a call to ReceiveLobbyMessage.
*
****************************************************************************)
 
(*
* TDPLMsg_Generic
* Generic message structure used to identify the message type.
*)
PDPLMsg_Generic = ^TDPLMsg_Generic;
TDPLMsg_Generic = packed record
dwType: DWORD; // Message type
end;
 
(*
* TDPLMsg_SystemMessage
* Generic message format for all system messages --
* DPLSYS_CONNECTIONSETTINGSREAD, DPLSYS_DPLYCONNECTSUCCEEDED,
* DPLSYS_DPLAYCONNECTFAILED, DPLSYS_APPTERMINATED, DPLSYS_NEWCONNECTIONSETTINGS
*)
PDPLMsg_SystemMessage = ^TDPLMsg_SystemMessage;
TDPLMsg_SystemMessage = packed record
dwType: DWORD; // Message type
guidInstance: TGUID; // Instance GUID of the dplay session the message corresponds to
end;
 
(*
* TDPLMsg_SetProperty
* Standard message sent by an application to a lobby to set a
* property
*)
PDPLMsg_SetProperty = ^TDPLMsg_SetProperty;
TDPLMsg_SetProperty = packed record
dwType: DWORD; // Message type
dwRequestID: DWORD; // Request ID (DPL_NOCONFIRMATION if no confirmation desired)
guidPlayer: TGUID; // Player GUID
guidPropertyTag: TGUID; // Property GUID
dwDataSize: DWORD; // Size of data
dwPropertyData: array[0..0] of DWORD; // Buffer containing data
end;
 
const
DPL_NOCONFIRMATION = 0;
 
type
(*
* TDPLMsg_SetPropertyResponse
* Standard message returned by a lobby to confirm a
* TDPLMsg_SetProperty message.
*)
PDPLMsg_SetPropertyResponse = ^TDPLMsg_SetPropertyResponse;
TDPLMsg_SetPropertyResponse = packed record
dwType: DWORD; // Message type
dwRequestID: DWORD; // Request ID
guidPlayer: TGUID; // Player GUID
guidPropertyTag: TGUID; // Property GUID
hr: HResult; // Return Code
end;
 
(*
* TDPLMsg_GetProperty
* Standard message sent by an application to a lobby to request
* the current value of a property
*)
PDPLMsg_GetProperty = ^TDPLMsg_GetProperty;
TDPLMsg_GetProperty = packed record
dwType: DWORD; // Message type
dwRequestID: DWORD; // Request ID
guidPlayer: TGUID; // Player GUID
guidPropertyTag: TGUID; // Property GUID
end;
LPDPLMSG_GETPROPERTY = ^TDPLMsg_GetProperty;
 
(*
* TDPLMsg_GetPropertyResponse
* Standard message returned by a lobby in response to a
* TDPLMsg_GetProperty message.
*)
PDPLMsg_GetPropertyResponse = ^TDPLMsg_GetPropertyResponse;
TDPLMsg_GetPropertyResponse = packed record
dwType: DWORD; // Message type
dwRequestID: DWORD; // Request ID
guidPlayer: TGUID; // Player GUID
guidPropertyTag: TGUID; // Property GUID
hr: HResult; // Return Code
dwDataSize: DWORD; // Size of data
dwPropertyData: array[0..0] of DWORD; // Buffer containing data
end;
 
(*
* TDPLMsg_NewSessionHost
* Standard message returned by a lobby in response to a
* the session host migrating to a new client
*)
PDPLMsg_NewSessionHost = ^TDPLMsg_NewSessionHost;
TDPLMsg_NewSessionHost = packed record
dwType: DWORD; // Message type
guidInstance: TGUID; // Property GUID
end;
 
const
(******************************************
*
* DirectPlay Lobby message dwType values
*
*****************************************)
 
(*
* The application has read the connection settings.
* It is now O.K. for the lobby client to release
* its IDirectPlayLobby interface.
*)
DPLSYS_CONNECTIONSETTINGSREAD = $00000001;
 
(*
* The application's call to DirectPlayConnect failed
*)
DPLSYS_DPLAYCONNECTFAILED = $00000002;
 
(*
* The application has created a DirectPlay session.
*)
DPLSYS_DPLAYCONNECTSUCCEEDED = $00000003;
 
(*
* The application has terminated.
*)
DPLSYS_APPTERMINATED = $00000004;
 
(*
* The message is a TDPLMsg_SetProperty message.
*)
DPLSYS_SETPROPERTY = $00000005;
 
(*
* The message is a TDPLMsg_SetPropertyResponse message.
*)
DPLSYS_SETPROPERTYRESPONSE = $00000006;
 
(*
* The message is a TDPLMsg_GetProperty message.
*)
DPLSYS_GETPROPERTY = $00000007;
 
(*
* The message is a TDPLMsg_GetPropertyResponse message.
*)
DPLSYS_GETPROPERTYRESPONSE = $00000008;
 
(*
* The message is a TDPLMsg_NewSessionHost message.
*)
DPLSYS_NEWSESSIONHOST = $00000009;
 
(*
* New connection settings are available.
*)
DPLSYS_NEWCONNECTIONSETTINGS = $0000000A;
 
(****************************************************************************
*
* DirectPlay defined property GUIDs and associated data structures
*
****************************************************************************)
 
(*
* DPLPROPERTY_MessagesSupported
*
* Request whether the lobby supports standard. Lobby with respond with either
* TRUE or FALSE or may not respond at all.
*
* Property data is a single BOOL with TRUE or FALSE
*)
// {762CCDA1-D916-11d0-BA39-00C04FD7ED67}
DPLPROPERTY_MessagesSupported: TGUID =
(D1: $762CCDA1; D2: $D916; D3: $11D0; D4: ($BA, $39, $00, $C0, $4F, $D7, $ED, $67));
 
(*
* DPLPROPERTY_LobbyGuid
*
* Request the GUID that identifies the lobby software that the application
* is communicating with.
*
* Property data is a single GUID.
*)
// {F56920A0-D218-11d0-BA39-00C04FD7ED67}
DPLPROPERTY_LobbyGuid: TGUID =
(D1: $F56920A0; D2: $D218; D3: $11D0; D4: ($BA, $39, $00, $C0, $4F, $D7, $ED, $67));
 
(*
* DPLPROPERTY_PlayerGuid
*
* Request the GUID that identifies the player on this machine for sending
* property data back to the lobby.
*
* Property data is the DPLDATA_PLAYERDATA structure
*)
// {B4319322-D20D-11d0-BA39-00C04FD7ED67}
DPLPROPERTY_PlayerGuid: TGUID =
(D1: $B4319322; D2: $D20D; D3: $11D0; D4: ($BA, $39, $00, $C0, $4F, $D7, $ED, $67));
 
type
(*
* TDPLData_PlayerGUID
*
* Data structure to hold the GUID of the player and player creation flags
* from the lobby.
*)
PDPLData_PlayerGUID = ^TDPLData_PlayerGUID;
TDPLData_PlayerGUID = packed record
guidPlayer: TGUID;
dwPlayerFlags: DWORD;
end;
 
const
(*
* DPLPROPERTY_PlayerScore
*
* Used to send an array of long integers to the lobby indicating the
* score of a player.
*
* Property data is the TDPLData_PlayerScore structure.
*)
// {48784000-D219-11d0-BA39-00C04FD7ED67}
DPLPROPERTY_PlayerScore: TGUID =
(D1: $48784000; D2: $D219; D3: $11D0; D4: ($BA, $39, $00, $C0, $4F, $D7, $ED, $67));
 
type
(*
* TDPLData_PlayerScore
*
* Data structure to hold an array of long integers representing a player score.
* Application must allocate enough memory to hold all the scores.
*)
PDPLData_PlayerScore = ^TDPLData_PlayerScore;
TDPLData_PlayerScore = packed record
dwScoreCount: DWORD;
Score: array[0..0] of Longint;
end;
 
(****************************************************************************
*
* DirectPlay Address ID's
*
****************************************************************************)
 
(* DirectPlay Address
*
* A DirectPlay address consists of multiple chunks of data, each tagged
* with a GUID signifying the type of data in the chunk. The chunk also
* has a length so that unknown chunk types can be skipped.
*
* The EnumAddress() function is used to parse these address data chunks.
*)
 
(*
* TDPAddress
*
* Header for block of address data elements
*)
PDPAddress = ^TDPAddress;
TDPAddress = packed record
guidDataType: TGUID;
dwDataSize: DWORD;
end;
 
const
(*
* DPAID_TotalSize
*
* Chunk is a DWORD containing size of entire TDPAddress structure
*)
 
// {1318F560-912C-11d0-9DAA-00A0C90A43CB}
DPAID_TotalSize: TGUID =
(D1: $1318F560; D2: $912C; D3: $11D0; D4: ($9D, $AA, $00, $A0, $C9, $A, $43, $CB));
 
(*
* DPAID_ServiceProvider
*
* Chunk is a GUID describing the service provider that created the chunk.
* All addresses must contain this chunk.
*)
 
// {07D916C0-E0AF-11cf-9C4E-00A0C905425E}
DPAID_ServiceProvider: TGUID =
(D1: $7D916C0; D2: $E0AF; D3: $11CF; D4: ($9C, $4E, $00, $A0, $C9, $5, $42, $5E));
 
(*
* DPAID_LobbyProvider
*
* Chunk is a GUID describing the lobby provider that created the chunk.
* All addresses must contain this chunk.
*)
 
// {59B95640-9667-11d0-A77D-0000F803ABFC}
DPAID_LobbyProvider: TGUID =
(D1: $59B95640; D2: $9667; D3: $11D0; D4: ($A7, $7D, $00, $00, $F8, $3, $AB, $FC));
 
(*
* DPAID_Phone and DPAID_PhoneW
*
* Chunk is a string containing a phone number (i.e. "1-800-555-1212")
* in ANSI or UNICODE format
*)
 
// {78EC89A0-E0AF-11cf-9C4E-00A0C905425E}
DPAID_Phone: TGUID =
(D1: $78EC89A0; D2: $E0AF; D3: $11CF; D4: ($9C, $4E, $00, $A0, $C9, $5, $42, $5E));
 
// {BA5A7A70-9DBF-11d0-9CC1-00A0C905425E}
DPAID_PhoneW: TGUID =
(D1: $BA5A7A70; D2: $9DBF; D3: $11D0; D4: ($9C, $C1, $00, $A0, $C9, $5, $42, $5E));
 
(*
* DPAID_Modem and DPAID_ModemW
*
* Chunk is a string containing a modem name registered with TAPI
* in ANSI or UNICODE format
*)
 
// {F6DCC200-A2FE-11d0-9C4F-00A0C905425E}
DPAID_Modem: TGUID =
(D1: $F6DCC200; D2: $A2FE; D3: $11D0; D4: ($9C, $4F, $00, $A0, $C9, $5, $42, $5E));
 
// {01FD92E0-A2FF-11d0-9C4F-00A0C905425E}
DPAID_ModemW: TGUID =
(D1: $1FD92E0; D2: $A2FF; D3: $11D0; D4: ($9C, $4F, $00, $A0, $C9, $5, $42, $5E));
 
(*
* DPAID_Inet and DPAID_InetW
*
* Chunk is a string containing a TCP/IP host name or an IP address
* (i.e. "dplay.microsoft.com" or "137.55.100.173") in ANSI or UNICODE format
*)
 
// {C4A54DA0-E0AF-11cf-9C4E-00A0C905425E}
DPAID_INet: TGUID =
(D1: $C4A54DA0; D2: $E0AF; D3: $11CF; D4: ($9C, $4E, $00, $A0, $C9, $5, $42, $5E));
 
// {E63232A0-9DBF-11d0-9CC1-00A0C905425E}
DPAID_INetW: TGUID =
(D1: $E63232A0; D2: $9DBF; D3: $11D0; D4: ($9C, $C1, $00, $A0, $C9, $5, $42, $5E));
 
(*
* DPAID_InetPort
*
* Chunk is the port number used for creating the apps TCP and UDP sockets.
* WORD value (i.e. 47624)
*)
 
// {E4524541-8EA5-11d1-8A96-006097B01411}
DPAID_INetPort: TGUID =
(D1: $E4524541; D2: $8EA5; D3: $11D1; D4: ($8A, $96, $00, $60, $97, $B0, $14, $11));
 
//@@BEGIN_MSINTERNAL
(*
* DPAID_MaxMessageSize
*
* Tells DPLAY what the maximum allowed message size is. Enables SPs to
* combat Denial of Service attacks
*)
 
// this terrible hack is needed so the SP can work with the Elmer build.
// it can be removed when the MSINTERNAL stuff is removed
{$DEFINE MAXMSGSIZEGUIDDEFINED}
 
// {F5D09980-F0C4-11d1-8326-006097B01411}
DPAID_MaxMessageSize: TGUID =
(D1: $F5D09980; D2: $F0C4; D3: $11D1; D4: ($83, $26, $00, $60, $97, $B0, $14, $11));
//@@END_MSINTERNAL
 
(*
* TDPComPortAddress
*
* Used to specify com port settings. The constants that define baud rate,
* stop bits and parity are defined in WINBASE.H. The constants for flow
* control are given below.
*)
 
DPCPA_NOFLOW = 0; // no flow control
DPCPA_XONXOFFFLOW = 1; // software flow control
DPCPA_RTSFLOW = 2; // hardware flow control with RTS
DPCPA_DTRFLOW = 3; // hardware flow control with DTR
DPCPA_RTSDTRFLOW = 4; // hardware flow control with RTS and DTR
 
type
PDPComPortAddress = ^TDPComPortAddress;
TDPComPortAddress = packed record
dwComPort: DWORD; // COM port to use (1-4)
dwBaudRate: DWORD; // baud rate (100-256k)
dwStopBits: DWORD; // no. stop bits (1-2)
dwParity: DWORD; // parity (none, odd, even, mark)
dwFlowControl: DWORD; // flow control (none, xon/xoff, rts, dtr)
end;
 
const
(*
* DPAID_ComPort
*
* Chunk contains a TDPComPortAddress structure defining the serial port.
*)
 
// {F2F0CE00-E0AF-11cf-9C4E-00A0C905425E}
DPAID_ComPort: TGUID =
(D1: $F2F0CE00; D2: $E0AF; D3: $11CF; D4: ($9C, $4E, $00, $A0, $C9, $5, $42, $5E));
 
(****************************************************************************
*
* dplobby 1.0 obsolete definitions
* Included for compatibility only.
*
****************************************************************************)
 
DPLAD_SYSTEM = DPLMSG_SYSTEM;
 
implementation
 
(*==========================================================================;
*
* Copyright (C) 1994-1997 Microsoft Corporation. All Rights Reserved.
*
* File: dplay.h
* Content: DirectPlay include file
*
***************************************************************************)
 
function DPErrorString(Value: HResult): string;
begin
case Value of
CLASS_E_NOAGGREGATION: Result := 'A non-NULL value was passed for the pUnkOuter parameter in DirectPlayCreate, DirectPlayLobbyCreate, or IDirectPlayLobby2::Connect.';
DPERR_ACCESSDENIED: Result := 'The session is full or an incorrect password was supplied.';
DPERR_ACTIVEPLAYERS: Result := 'The requested operation cannot be performed because there are existing active players.';
DPERR_ALREADYINITIALIZED: Result := 'This object is already initialized.';
DPERR_APPNOTSTARTED: Result := 'The application has not been started yet.';
DPERR_AUTHENTICATIONFAILED: Result := 'The password or credentials supplied could not be authenticated.';
DPERR_BUFFERTOOLARGE: Result := 'The data buffer is too large to store.';
DPERR_BUSY: Result := 'A message cannot be sent because the transmission medium is busy.';
DPERR_BUFFERTOOSMALL: Result := 'The supplied buffer is not large enough to contain the requested data.';
DPERR_CANTADDPLAYER: Result := 'The player cannot be added to the session.';
DPERR_CANTCREATEGROUP: Result := 'A new group cannot be created.';
DPERR_CANTCREATEPLAYER: Result := 'A new player cannot be created.';
DPERR_CANTCREATEPROCESS: Result := 'Cannot start the application.';
DPERR_CANTCREATESESSION: Result := 'A new session cannot be created.';
DPERR_CANTLOADCAPI: Result := 'No credentials were supplied and the CryptoAPI package (CAPI) to use for cryptography services cannot be loaded.';
DPERR_CANTLOADSECURITYPACKAGE: Result := 'The software security package cannot be loaded.';
DPERR_CANTLOADSSPI: Result := 'No credentials were supplied and the software security package (SSPI) that will prompt for credentials cannot be loaded.';
DPERR_CAPSNOTAVAILABLEYET: Result := 'The capabilities of the DirectPlay object have not been determined yet. This error will occur if the DirectPlay object is implemented on a connectivity solution that requires polling to determine available bandwidth and latency.';
DPERR_CONNECTING: Result := 'The method is in the process of connecting to the network. The application should keep calling the method until it returns DP_OK, indicating successful completion, or it returns a different error.';
DPERR_ENCRYPTIONFAILED: Result := 'The requested information could not be digitally encrypted. Encryption is used for message privacy. This error is only relevant in a secure session.';
DPERR_EXCEPTION: Result := 'An exception occurred when processing the request.';
DPERR_GENERIC: Result := 'An undefined error condition occurred.';
// DPERR_INVALIDCREDENTIALS: Result := 'The credentials supplied (as to IDirectPlay3::SecureOpen) were not valid.';
DPERR_INVALIDFLAGS: Result := 'The flags passed to this method are invalid.';
DPERR_INVALIDGROUP: Result := 'The group ID is not recognized as a valid group ID for this game session.';
DPERR_INVALIDINTERFACE: Result := 'The interface parameter is invalid.';
DPERR_INVALIDOBJECT: Result := 'The DirectPlay object pointer is invalid.';
DPERR_INVALIDPARAMS: Result := 'One or more of the parameters passed to the method are invalid.';
DPERR_INVALIDPASSWORD: Result := 'An invalid password was supplied when attempting to join a session that requires a password.';
DPERR_INVALIDPLAYER: Result := 'The player ID is not recognized as a valid player ID for this game session.';
DPERR_LOGONDENIED: Result := 'The session could not be opened because credentials are required and either no credentials were supplied or the credentials were invalid.';
DPERR_NOCAPS: Result := 'The communication link that DirectPlay is attempting to use is not capable of this function.';
DPERR_NOCONNECTION: Result := 'No communication link was established.';
DPERR_NOINTERFACE: Result := 'The interface is not supported.';
DPERR_NOMESSAGES: Result := 'There are no messages in the receive queue.';
DPERR_NONAMESERVERFOUND: Result := 'No name server (host) could be found or created. A host must exist to create a player.';
DPERR_NONEWPLAYERS: Result := 'The session is not accepting any new players.';
DPERR_NOPLAYERS: Result := 'There are no active players in the session.';
DPERR_NOSESSIONS: Result := 'There are no existing sessions for this game.';
DPERR_NOTLOBBIED: Result := 'Returned by the IDirectPlayLobby2::Connect method if the application was not started by using the IDirectPlayLobby2::RunApplication method or if there is no DPLCONNECTION structure currently initialized for this DirectPlayLobby object.';
DPERR_NOTLOGGEDIN: Result := 'An action cannot be performed because a player or client application is not logged in. Returned by the IDirectPlay3::Send method when the client application tries to send a secure message without being logged in.';
DPERR_OUTOFMEMORY: Result := 'There is insufficient memory to perform the requested operation.';
DPERR_PLAYERLOST: Result := 'A player has lost the connection to the session.';
DPERR_SENDTOOBIG: Result := 'The message being sent by the IDirectPlay3::Send method is too large.';
DPERR_SESSIONLOST: Result := 'The connection to the session has been lost.';
DPERR_SIGNFAILED: Result := 'The requested information could not be digitally signed. Digital signatures are used to establish the authenticity of messages.';
DPERR_TIMEOUT: Result := 'The operation could not be completed in the specified time.';
DPERR_UNAVAILABLE: Result := 'The requested function is not available at this time.';
DPERR_UNINITIALIZED: Result := 'The requested object has not been initialized.';
DPERR_UNKNOWNAPPLICATION: Result := 'An unknown application was specified.';
DPERR_UNSUPPORTED: Result := 'The function is not available in this implementation. Returned from IDirectPlay3::GetGroupConnectionSettings and IDirectPlay3::SetGroupConnectionSettings if they are called from a session that is not a lobby session.';
DPERR_USERCANCEL: Result := 'Can be returned in two ways. 1) The user canceled the connection process during a call to the IDirectPlay3::Open method. 2) The user clicked Cancel in one of the DirectPlay service provider dialog boxes during a call to IDirectPlay3::EnumSessions.';
else Result := 'Unrecognized Error';
end;
end;
 
function IsNTandDelphiRunning : boolean;
var
OSVersion : TOSVersionInfo;
AppName : array[0..255] of char;
begin
OSVersion.dwOsVersionInfoSize := sizeof(OSVersion);
GetVersionEx(OSVersion);
// Not running in NT or program is not Delphi itself ?
AppName[0] := #0;
lstrcat(AppName, PChar(ParamStr(0))); // ParamStr(0) = Application.ExeName
{$IFDEF UNICODE}
CharUpperBuff(AppName, High(AppName) + 1);
{$ELSE}
CharUpperBuff(AppName, SizeOf(AppName));
{$ENDIF}
result := ( (OSVersion.dwPlatformID = VER_PLATFORM_WIN32_NT) and
(Pos('DELPHI32.EXE', AppName) = Length(AppName) - Length('DELPHI32.EXE') + 1) );
end;
 
initialization
begin
if not IsNTandDelphiRunning then
begin
DPlayDLL := LoadLibrary('DPlayX.dll');
 
DirectPlayEnumerateA := GetProcAddress(DPlayDLL, 'DirectPlayEnumerateA');
DirectPlayEnumerateW := GetProcAddress(DPlayDLL, 'DirectPlayEnumerateW');
{$IFDEF UNICODE}
DirectPlayEnumerate := DirectPlayEnumerateW;
{$ELSE}
DirectPlayEnumerate := DirectPlayEnumerateA;
{$ENDIF}
 
DirectPlayCreate := GetProcAddress(DPlayDLL, 'DirectPlayCreate');
 
// File: dplay.h
 
DirectPlayLobbyCreateW := GetProcAddress(DPlayDLL, 'DirectPlayLobbyCreateW');
DirectPlayLobbyCreateA := GetProcAddress(DPlayDLL, 'DirectPlayLobbyCreateA');
{$IFDEF UNICODE}
DirectPlayLobbyCreate := DirectPlayLobbyCreateW;
{$ELSE}
DirectPlayLobbyCreate := DirectPlayLobbyCreateA;
{$ENDIF}
 
end;
end;
 
finalization
begin
if DPlayDLL <> 0 then FreeLibrary(DPlayDLL);
end;
 
{$ENDIF} // UseDirectPlay
 
end.
/VCL_DELPHIX_D6/DirectX.pas
25,118 → 25,119
* URL : http://www.infosakyu.ne.jp/~kazuya-y/index.html
*
***************************************************************************)
{
(c)2004 Jaro Benes Recompilation with Erik Unger's headers
 
unit DirectX;
Join in order:
1) DirectDraw
2) Direct3D
3) Direct3DRM
4) DirectInput
5) DirectPlay
6) DirectSetup
7) DirectSound
8) DirectMusic
}
Unit DirectX;
 
interface
Interface
 
{$Z4}
{$A+}
{$WEAKPACKAGEUNIT}
{Delphi version marks}
 
{$IFNDEF DirectX3}
{$IFNDEF DirectX5}
{$IFNDEF DirectX6}
{$IFNDEF DirectX7}
{$DEFINE DirectX7}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$ENDIF}
{$I DelphiXcfg.inc}
 
{$IFDEF DirectX3}
{$UNDEF DirectX5}
{$UNDEF DirectX6}
{$UNDEF DirectX7}
{$DEFINE SupportDirectX3}
{$ENDIF}
{$MINENUMSIZE 4}
{$ALIGN ON}
 
{$IFDEF DirectX5}
{$UNDEF DirectX3}
{$UNDEF DirectX6}
{$UNDEF DirectX7}
{$DEFINE SupportDirectX3}
{$DEFINE SupportDirectX5}
{$ENDIF}
uses
Windows, MMSystem;
 
{$IFDEF DirectX6}
{$UNDEF DirectX3}
{$UNDEF DirectX5}
{$UNDEF DirectX7}
{$DEFINE SupportDirectX3}
{$DEFINE SupportDirectX5}
{$DEFINE SupportDirectX6}
type
{$IFDEF UNICODE}
PCharAW = PWideChar;
{$ELSE}
PCharAW = PAnsiChar;
{$ENDIF}
 
{$IFDEF DirectX7}
{$UNDEF DirectX3}
{$UNDEF DirectX5}
{$UNDEF DirectX6}
{$DEFINE SupportDirectX3}
{$DEFINE SupportDirectX5}
{$DEFINE SupportDirectX6}
{$DEFINE SupportDirectX7}
{$ENDIF}
 
uses Windows, MMSystem, ActiveX;
 
const
{$IFDEF DirectX3}
DirectXUnitVersion = 3;
{$ENDIF}{$IFDEF DirectX5}
DirectXUnitVersion = 5;
{$ENDIF}{$IFDEF DirectX6}
DirectXUnitVersion = 6;
{$ENDIF}{$IFDEF DirectX7}
DirectXUnitVersion = 7;
{$ENDIF}
 
//DirectDraw file
(*==========================================================================;
*
* Copyright (C) Microsoft Corporation. All Rights Reserved.
* Copyright (C) 1994-1997 Microsoft Corporation. All Rights Reserved.
*
* File: ddraw.h
* Content: DirectDraw include file
* Files: ddraw.h dvp.h
* Content: DirectDraw and DirectDrawVideoPort include files
*
* DirectX 7.0 Delphi adaptation by Erik Unger
*
* Modified: 10-Sep-2000
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: DelphiDirectX@next-reality.com
*
*
***************************************************************************)
 
{ FOURCC codes for DX compressed-texture pixel formats }
var
DDrawDLL : HMODULE = 0;
 
const
FOURCC_DXT1 = Ord('D') + Ord('X') shl 8 + Ord('T') shl 16 + Ord('1') shl 24;
FOURCC_DXT2 = Ord('D') + Ord('X') shl 8 + Ord('T') shl 16 + Ord('2') shl 24;
FOURCC_DXT3 = Ord('D') + Ord('X') shl 8 + Ord('T') shl 16 + Ord('3') shl 24;
FOURCC_DXT4 = Ord('D') + Ord('X') shl 8 + Ord('T') shl 16 + Ord('4') shl 24;
FOURCC_DXT5 = Ord('D') + Ord('X') shl 8 + Ord('T') shl 16 + Ord('5') shl 24;
function DDErrorString(Value: HResult) : string;
 
{ GUIDS used by DirectDraw objects }
function MAKEFOURCC(ch0, ch1, ch2, ch3: Char) : DWORD;
 
(*
* FOURCC codes for DX compressed-texture pixel formats
*)
const
FOURCC_DXT1 = 'DXT1';
FOURCC_DXT2 = 'DXT2';
FOURCC_DXT3 = 'DXT3';
FOURCC_DXT4 = 'DXT4';
FOURCC_DXT5 = 'DXT5';
 
(*
* GUIDS used by DirectDraw objects
*)
const
CLSID_DirectDraw: TGUID = '{D7B70EE0-4340-11CF-B063-0020AFC2CD35}';
CLSID_DirectDraw7: TGUID = '{3C305196-50DB-11D3-9CFE-00C04FD930C5}';
CLSID_DirectDrawClipper: TGUID = '{593817A0-7DB3-11CF-A2DE-00AA00B93356}';
IID_IDirectDraw: TGUID = '{6C14DB80-A733-11CE-A521-0020AF0BE560}';
IID_IDirectDraw2: TGUID = '{B3A6F3E0-2B43-11CF-A2DE-00AA00B93356}';
IID_IDirectDraw4: TGUID = '{9C59509A-39BD-11D1-8C4A-00C04FD930C5}';
IID_IDirectDraw7: TGUID = '{15E65EC0-3B9C-11D2-B92F-00609797EA5B}';
IID_IDirectDrawSurface: TGUID = '{6C14DB81-A733-11CE-A521-0020AF0BE560}';
IID_IDirectDrawSurface2: TGUID = '{57805885-6EEC-11CF-9441-A82303C10E27}';
IID_IDirectDrawSurface3: TGUID = '{DA044E00-69B2-11D0-A1D5-00AA00B8DFBB}';
IID_IDirectDrawSurface4: TGUID = '{0B2B8630-AD35-11D0-8EA6-00609797EA5B}';
IID_IDirectDrawSurface7: TGUID = '{06675A80-3B9B-11D2-B92F-00609797EA5B}';
IID_IDirectDrawPalette: TGUID = '{6C14DB84-A733-11CE-A521-0020AF0BE560}';
IID_IDirectDrawClipper: TGUID = '{6C14DB85-A733-11CE-A521-0020AF0BE560}';
IID_IDirectDrawColorControl: TGUID = '{4B9F0EE0-0D7E-11D0-9B06-00A0C903A3B8}';
IID_IDirectDrawGammaControl: TGUID = '{69C11C3E-B46B-11D1-AD7A-00C04FC29B4E}';
CLSID_DirectDraw7: TGUID = '{3c305196-50db-11d3-9cfe-00c04fd930c5}';
CLSID_DirectDrawClipper: TGUID = '{593817A0-7DB3-11CF-A2DE-00AA00b93356}';
 
const
DD_ROP_SPACE = 256 div 32; // space required to store ROP array
DD_ROP_SPACE = (256 div 32); // space required to store ROP array
 
MAX_DDDEVICEID_STRING = 512;
 
{ DirectDraw Structures }
(*
* Flags for the IDirectDraw4::GetDeviceIdentifier method
*)
 
(*
* This flag causes GetDeviceIdentifier to return information about the host (typically 2D) adapter in a system equipped
* with a stacked secondary 3D adapter. Such an adapter appears to the application as if it were part of the
* host adapter, but is typically physcially located on a separate card. The stacked secondary's information is
* returned when GetDeviceIdentifier's dwFlags field is zero, since this most accurately reflects the qualities
* of the DirectDraw object involved.
*)
DDGDI_GETHOSTIDENTIFIER = $00000001;
 
(*============================================================================
*
* DirectDraw Structures
*
* Various structures used to invoke DirectDraw.
*
*==========================================================================*)
 
var
NilGUID : TGUID{$IfNDef VER6UP} absolute 0{$EndIf};
 
type
TRefGUID = packed record
case integer of
1: (guid : PGUID);
2: (dwFlags : DWORD);
end;
 
IDirectDraw = interface;
IDirectDraw2 = interface;
IDirectDraw4 = interface;
146,41 → 147,40
IDirectDrawSurface3 = interface;
IDirectDrawSurface4 = interface;
IDirectDrawSurface7 = interface;
 
IDirectDrawPalette = interface;
IDirectDrawClipper = interface;
IDirectDrawColorControl = interface;
IDirectDrawGammaControl = interface;
 
{ TDDARGB structure }
 
(*
* Generic pixel format with 8-bit RGB and alpha components
*)
PDDARGB = ^TDDARGB;
TDDARGB = record
Blue: Byte;
Green: Byte;
Red: Byte;
Alpha: Byte;
TDDARGB = packed record
blue: BYTE;
green: BYTE;
red: BYTE;
alpha: BYTE;
end;
 
DDARGB = TDDARGB;
LPDDARGB = PDDARGB;
 
{ TDDRGBA structure }
 
(*
* This version of the structure remains for backwards source compatibility.
* The DDARGB structure is the one that should be used for all DirectDraw APIs.
*)
PDDRGBA = ^TDDRGBA;
TDDRGBA = record
Red: Byte;
Green: Byte;
Blue: Byte;
Alpha: Byte;
TDDRGBA = packed record
red : BYTE;
green : BYTE;
blue : BYTE;
alpha : BYTE;
end;
 
DDRGBA = TDDRGBA;
LPDDRGBA = PDDRGBA;
 
{ TDDColorKey structure }
 
(*
* TDDColorKey
*)
PDDColorKey = ^TDDColorKey;
TDDColorKey = record
TDDColorKey = packed record
dwColorSpaceLowValue: DWORD; // low boundary of color space that is to
// be treated as Color Key, inclusive
dwColorSpaceHighValue: DWORD; // high boundary of color space that is
187,13 → 187,21
// to be treated as Color Key, inclusive
end;
 
DDCOLORKEY = TDDColorKey;
LPDDCOLORKEY = PDDColorKey;
// Delphi 5 can't handle interface in variant records
// so we have to use pointers instead (which can be type-casted into interfaces):
 
{ TDDBltFX structure }
{$IFDEF VER5UP}
PDirectDrawSurface = Pointer;
{$ELSE}
PDirectDrawSurface = IDirectDrawSurface;
{$ENDIF}
 
(*
* TDDBltFX
* Used to pass override information to the DIRECTDRAWSURFACE callback Blt.
*)
PDDBltFX = ^TDDBltFX;
TDDBltFX = record
TDDBltFX = packed record
dwSize: DWORD; // size of structure
dwDDFX: DWORD; // FX operations
dwROP: DWORD; // Win32 raster operations
204,89 → 212,88
dwZBufferHigh: DWORD; // High limit of Z buffer
dwZBufferBaseDest: DWORD; // Destination base value
dwZDestConstBitDepth: DWORD; // Bit depth used to specify Z constant for destination
case Integer of
case integer of
0: (
dwZDestConst: DWORD; // Constant to use as Z buffer for dest
dwZDestConst : DWORD // Constant to use as Z buffer for dest
);
1: (
lpDDSZBufferDest : PDirectDrawSurface; // Surface to use as Z buffer for dest
dwZSrcConstBitDepth: DWORD; // Bit depth used to specify Z constant for source
case integer of
0: (
dwZSrcConst: DWORD; // Constant to use as Z buffer for src
);
1: (
lpDDSZBufferSrc : PDirectDrawSurface; // Surface to use as Z buffer for src
dwAlphaEdgeBlendBitDepth: DWORD; // Bit depth used to specify constant for alpha edge blend
dwAlphaEdgeBlend: DWORD; // Alpha for edge blending
dwReserved: DWORD;
dwAlphaDestConstBitDepth: DWORD; // Bit depth used to specify alpha constant for destination
case integer of
0: (
dwAlphaDestConst: DWORD; // Constant to use as Alpha Channel
);
1: (
lpDDSAlphaDest : PDirectDrawSurface; // Surface to use as Alpha Channel
dwAlphaSrcConstBitDepth: DWORD; // Bit depth used to specify alpha constant for source
case integer of
0: (
dwAlphaSrcConst: DWORD; // Constant to use as Alpha Channel
);
1: (
lpDDSAlphaSrc : PDirectDrawSurface; // Surface to use as Alpha Channel
case integer of
0: (
dwFillColor: DWORD; // color in RGB or Palettized
ddckDestColorkey: TDDColorKey; // DestColorkey override
ddckSrcColorkey: TDDColorKey; // SrcColorkey override
);
1: (
lpDDSZBufferDest: Pointer{IDirectDrawSurface}; // Surface to use as Z buffer for dest
_union1b: DWORD;
lpDDSZBufferSrc: Pointer{IDirectDrawSurface}; // Surface to use as Z buffer for src
_union1d: DWORD;
_union1e: DWORD;
_union1f: DWORD;
_union1g: DWORD;
lpDDSAlphaDest: Pointer{IDirectDrawSurface}; // Surface to use as Alpha Channel
_union1i: DWORD;
lpDDSAlphaSrc: Pointer{IDirectDrawSurface}; // Surface to use as Alpha Channel
dwFillDepth: DWORD; // depth value for z-buffer
);
2: (
_union2a: DWORD;
_union2b: DWORD;
_union2c: DWORD;
_union2d: DWORD;
_union2e: DWORD;
_union2f: DWORD;
_union2g: DWORD;
_union2h: DWORD;
_union2i: DWORD;
_union2j: DWORD;
lpDDSPattern: Pointer{IDirectDrawSurface}; // Surface to use as pattern
dwFillPixel : DWORD; // pixel value
);
3: (
lpDDSPattern : PDirectDrawSurface; // Surface to use as pattern
ddckDestColorkey : TDDColorKey; // DestColorkey override
ddckSrcColorkey : TDDColorKey; // SrcColorkey override
)
)
)
)
)
end;
 
DDBLTFX = TDDBltFX;
LPDDBLTFX = PDDBltFX;
 
{ TDDSCaps structure }
 
(*
* TDDSCaps
*)
PDDSCaps = ^TDDSCaps;
TDDSCaps = record
TDDSCaps = packed record
dwCaps: DWORD; // capabilities of surface wanted
end;
 
DDSCAPS = TDDSCaps;
LPDDSCAPS = PDDSCaps;
{ TDDOSCaps structure }
 
(*
* TDDOSCaps
*)
PDDOSCaps = ^TDDOSCaps;
TDDOSCaps = record
TDDOSCaps = packed record
dwCaps: DWORD; // capabilities of surface wanted
end;
 
DDOSCAPS = TDDOSCaps;
LPDDOSCAPS = PDDOSCaps;
 
 
{ TDDSCapsEx structure }
 
(*
* This structure is used internally by DirectDraw.
*)
PDDSCapsEx = ^TDDSCapsEx;
TDDSCapsEx = record
TDDSCapsEx = packed record
dwCaps2: DWORD;
dwCaps3: DWORD;
dwCaps4: DWORD;
end;
 
DDSCAPSEX = TDDSCapsEx;
LPDDSCAPSEX = PDDSCapsEx;
 
{ TDDSCaps2 structure }
 
(*
* TDDSCaps2
*)
PDDSCaps2 = ^TDDSCaps2;
TDDSCaps2 = record
TDDSCaps2 = packed record
dwCaps: DWORD; // capabilities of surface wanted
dwCaps2: DWORD;
dwCaps3: DWORD;
293,53 → 300,15
dwCaps4: DWORD;
end;
 
DDSCAPS2 = TDDSCaps2;
LPDDSCAPS2 = PDDSCaps2;
 
{ TDDCaps structure }
 
PDDCaps_DX1 = ^TDDCaps_DX1;
TDDCaps_DX1 = record
dwSize: DWORD; // size of the DDDRIVERCAPS structure
dwCaps: DWORD; // driver specific capabilities
dwCaps2: DWORD; // more driver specific capabilites
dwCKeyCaps: DWORD; // color key capabilities of the surface
dwFXCaps: DWORD; // driver specific stretching and effects capabilites
dwFXAlphaCaps: DWORD; // alpha driver specific capabilities
dwPalCaps: DWORD; // palette capabilities
dwSVCaps: DWORD; // stereo vision capabilities
dwAlphaBltConstBitDepths: DWORD; // DDBD_2,4,8
dwAlphaBltPixelBitDepths: DWORD; // DDBD_1,2,4,8
dwAlphaBltSurfaceBitDepths: DWORD; // DDBD_1,2,4,8
dwAlphaOverlayConstBitDepths: DWORD; // DDBD_2,4,8
dwAlphaOverlayPixelBitDepths: DWORD; // DDBD_1,2,4,8
dwAlphaOverlaySurfaceBitDepths: DWORD; // DDBD_1,2,4,8
dwZBufferBitDepths: DWORD; // DDBD_8,16,24,32
dwVidMemTotal: DWORD; // total amount of video memory
dwVidMemFree: DWORD; // amount of free video memory
dwMaxVisibleOverlays: DWORD; // maximum number of visible overlays
dwCurrVisibleOverlays: DWORD; // current number of visible overlays
dwNumFourCCCodes: DWORD; // number of four cc codes
dwAlignBoundarySrc: DWORD; // source rectangle alignment
dwAlignSizeSrc: DWORD; // source rectangle byte size
dwAlignBoundaryDest: DWORD; // dest rectangle alignment
dwAlignSizeDest: DWORD; // dest rectangle byte size
dwAlignStrideAlign: DWORD; // stride alignment
dwRops: array[0..DD_ROP_SPACE-1] of DWORD; // ROPS supported
ddsCaps: TDDSCaps; // TDDSCaps structure has all the general capabilities
dwMinOverlayStretch: DWORD; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMaxOverlayStretch: DWORD; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMinLiveVideoStretch: DWORD; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMaxLiveVideoStretch: DWORD; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMinHwCodecStretch: DWORD; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMaxHwCodecStretch: DWORD; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwReserved1: DWORD; // reserved
dwReserved2: DWORD; // reserved
dwReserved3: DWORD; // reserved
end;
 
(*
* TDDCaps
*)
(*
* This structure is the TDDCaps structure as it was in version 2 and 3 of Direct X.
* It is present for back compatability.
*)
PDDCaps_DX3 = ^TDDCaps_DX3;
TDDCaps_DX3 = record
TDDCaps_DX3 = packed record
dwSize: DWORD; // size of the DDDRIVERCAPS structure
dwCaps: DWORD; // driver specific capabilities
dwCaps2: DWORD; // more driver specific capabilites
365,7 → 334,7
dwAlignBoundaryDest: DWORD; // dest rectangle alignment
dwAlignSizeDest: DWORD; // dest rectangle byte size
dwAlignStrideAlign: DWORD; // stride alignment
dwRops: array[0..DD_ROP_SPACE-1] of DWORD; // ROPS supported
dwRops: Array [0..DD_ROP_SPACE-1] of DWORD; // ROPS supported
ddsCaps: TDDSCaps; // TDDSCaps structure has all the general capabilities
dwMinOverlayStretch: DWORD; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMaxOverlayStretch: DWORD; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
379,22 → 348,26
dwSVBCaps: DWORD; // driver specific capabilities for System->Vmem blts
dwSVBCKeyCaps: DWORD; // driver color key capabilities for System->Vmem blts
dwSVBFXCaps: DWORD; // driver FX capabilities for System->Vmem blts
dwSVBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
dwSVBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
dwVSBCaps: DWORD; // driver specific capabilities for Vmem->System blts
dwVSBCKeyCaps: DWORD; // driver color key capabilities for Vmem->System blts
dwVSBFXCaps: DWORD; // driver FX capabilities for Vmem->System blts
dwVSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
dwVSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
dwSSBCaps: DWORD; // driver specific capabilities for System->System blts
dwSSBCKeyCaps: DWORD; // driver color key capabilities for System->System blts
dwSSBFXCaps: DWORD; // driver FX capabilities for System->System blts
dwSSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
dwReserved4: DWORD; // reserved
dwReserved5: DWORD; // reserved
dwReserved6: DWORD; // reserved
dwSSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
dwReserved4 : DWORD;
dwReserved5 : DWORD;
dwReserved6 : DWORD;
end;
 
(*
* This structure is the TDDCaps structure as it was in version 5 of Direct X.
* It is present for back compatability.
*)
PDDCaps_DX5 = ^TDDCaps_DX5;
TDDCaps_DX5 = record
TDDCaps_DX5 = packed record
dwSize: DWORD; // size of the DDDRIVERCAPS structure
dwCaps: DWORD; // driver specific capabilities
dwCaps2: DWORD; // more driver specific capabilites
420,7 → 393,7
dwAlignBoundaryDest: DWORD; // dest rectangle alignment
dwAlignSizeDest: DWORD; // dest rectangle byte size
dwAlignStrideAlign: DWORD; // stride alignment
dwRops: array[0..DD_ROP_SPACE-1] of DWORD; // ROPS supported
dwRops: Array [0..DD_ROP_SPACE-1] of DWORD; // ROPS supported
ddsCaps: TDDSCaps; // TDDSCaps structure has all the general capabilities
dwMinOverlayStretch: DWORD; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMaxOverlayStretch: DWORD; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
434,16 → 407,16
dwSVBCaps: DWORD; // driver specific capabilities for System->Vmem blts
dwSVBCKeyCaps: DWORD; // driver color key capabilities for System->Vmem blts
dwSVBFXCaps: DWORD; // driver FX capabilities for System->Vmem blts
dwSVBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
dwSVBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
dwVSBCaps: DWORD; // driver specific capabilities for Vmem->System blts
dwVSBCKeyCaps: DWORD; // driver color key capabilities for Vmem->System blts
dwVSBFXCaps: DWORD; // driver FX capabilities for Vmem->System blts
dwVSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
dwVSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
dwSSBCaps: DWORD; // driver specific capabilities for System->System blts
dwSSBCKeyCaps: DWORD; // driver color key capabilities for System->System blts
dwSSBFXCaps: DWORD; // driver FX capabilities for System->System blts
dwSSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
{ Members added for DX5 }
dwSSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
// Members added for DX5:
dwMaxVideoPorts: DWORD; // maximum number of usable video ports
dwCurrVideoPorts: DWORD; // current number of video ports used
dwSVBCaps2: DWORD; // more driver specific capabilities for System->Vmem blts
451,79 → 424,16
dwNLVBCaps2: DWORD; // more driver specific capabilities non-local->local vidmem blts
dwNLVBCKeyCaps: DWORD; // driver color key capabilities for non-local->local vidmem blts
dwNLVBFXCaps: DWORD; // driver FX capabilities for non-local->local blts
dwNLVBRops: array[0..DD_ROP_SPACE-1] of DWORD; // ROPS supported for non-local->local blts
dwNLVBRops: Array [0..DD_ROP_SPACE-1] of DWORD; // ROPS supported for non-local->local blts
end;
 
PDDCaps_DX6 = ^TDDCaps_DX6;
TDDCaps_DX6 = record
TDDCaps_DX6 = packed record
dwSize: DWORD; // size of the DDDRIVERCAPS structure
dwCaps: DWORD; // driver specific capabilities
dwCaps2: DWORD; // more driver specific capabilites
dwCKeyCaps: DWORD; // color key capabilities of the surface
dwFXCaps: DWORD; // driver specific stretching and effects capabilites
dwFXAlphaCaps: DWORD; // alpha caps
dwPalCaps: DWORD; // palette capabilities
dwSVCaps: DWORD; // stereo vision capabilities
dwAlphaBltConstBitDepths: DWORD; // DDBD_2,4,8
dwAlphaBltPixelBitDepths: DWORD; // DDBD_1,2,4,8
dwAlphaBltSurfaceBitDepths: DWORD; // DDBD_1,2,4,8
dwAlphaOverlayConstBitDepths: DWORD; // DDBD_2,4,8
dwAlphaOverlayPixelBitDepths: DWORD; // DDBD_1,2,4,8
dwAlphaOverlaySurfaceBitDepths: DWORD; // DDBD_1,2,4,8
dwZBufferBitDepths: DWORD; // DDBD_8,16,24,32
dwVidMemTotal: DWORD; // total amount of video memory
dwVidMemFree: DWORD; // amount of free video memory
dwMaxVisibleOverlays: DWORD; // maximum number of visible overlays
dwCurrVisibleOverlays: DWORD; // current number of visible overlays
dwNumFourCCCodes: DWORD; // number of four cc codes
dwAlignBoundarySrc: DWORD; // source rectangle alignment
dwAlignSizeSrc: DWORD; // source rectangle byte size
dwAlignBoundaryDest: DWORD; // dest rectangle alignment
dwAlignSizeDest: DWORD; // dest rectangle byte size
dwAlignStrideAlign: DWORD; // stride alignment
dwRops: array[0..DD_ROP_SPACE-1] of DWORD; // ROPS supported
ddsOldCaps: TDDSCaps; // Was TDDSCaps ddsCaps. ddsCaps is of type DDSCAPS2 for DX6
dwMinOverlayStretch: DWORD; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMaxOverlayStretch: DWORD; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMinLiveVideoStretch: DWORD; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMaxLiveVideoStretch: DWORD; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMinHwCodecStretch: DWORD; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMaxHwCodecStretch: DWORD; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwReserved1: DWORD; // reserved
dwReserved2: DWORD; // reserved
dwReserved3: DWORD; // reserved
dwSVBCaps: DWORD; // driver specific capabilities for System->Vmem blts
dwSVBCKeyCaps: DWORD; // driver color key capabilities for System->Vmem blts
dwSVBFXCaps: DWORD; // driver FX capabilities for System->Vmem blts
dwSVBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
dwVSBCaps: DWORD; // driver specific capabilities for Vmem->System blts
dwVSBCKeyCaps: DWORD; // driver color key capabilities for Vmem->System blts
dwVSBFXCaps: DWORD; // driver FX capabilities for Vmem->System blts
dwVSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
dwSSBCaps: DWORD; // driver specific capabilities for System->System blts
dwSSBCKeyCaps: DWORD; // driver color key capabilities for System->System blts
dwSSBFXCaps: DWORD; // driver FX capabilities for System->System blts
dwSSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
{ Members added for DX5 }
dwMaxVideoPorts: DWORD; // maximum number of usable video ports
dwCurrVideoPorts: DWORD; // current number of video ports used
dwSVBCaps2: DWORD; // more driver specific capabilities for System->Vmem blts
dwNLVBCaps: DWORD; // driver specific capabilities for non-local->local vidmem blts
dwNLVBCaps2: DWORD; // more driver specific capabilities non-local->local vidmem blts
dwNLVBCKeyCaps: DWORD; // driver color key capabilities for non-local->local vidmem blts
dwNLVBFXCaps: DWORD; // driver FX capabilities for non-local->local blts
dwNLVBRops: array[0..DD_ROP_SPACE-1] of DWORD; // ROPS supported for non-local->local blts
{ Members added for DX6 }
ddsCaps: TDDSCaps2; // Surface Caps
end;
 
PDDCaps_DX7 = ^TDDCaps_DX7;
TDDCaps_DX7 = record
dwSize: DWORD; // size of the DDDRIVERCAPS structure
dwCaps: DWORD; // driver specific capabilities
dwCaps2: DWORD; // more driver specific capabilites
dwCKeyCaps: DWORD; // color key capabilities of the surface
dwFXCaps: DWORD; // driver specific stretching and effects capabilites
dwFXAlphaCaps: DWORD; // alpha driver specific capabilities
dwPalCaps: DWORD; // palette capabilities
dwSVCaps: DWORD; // stereo vision capabilities
544,8 → 454,8
dwAlignBoundaryDest: DWORD; // dest rectangle alignment
dwAlignSizeDest: DWORD; // dest rectangle byte size
dwAlignStrideAlign: DWORD; // stride alignment
dwRops: array[0..DD_ROP_SPACE-1] of DWORD; // ROPS supported
ddsOldCaps: TDDSCaps; // Was TDDSCaps ddsCaps. ddsCaps is of type DDSCAPS2 for DX6
dwRops: Array [0..DD_ROP_SPACE-1] of DWORD; // ROPS supported
ddsOldCaps: TDDSCaps; // Was dssCaps: TDDSCaps. ddsCaps is of type TDDScaps2 for DX6
dwMinOverlayStretch: DWORD; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMaxOverlayStretch: DWORD; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
dwMinLiveVideoStretch: DWORD; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3
558,16 → 468,16
dwSVBCaps: DWORD; // driver specific capabilities for System->Vmem blts
dwSVBCKeyCaps: DWORD; // driver color key capabilities for System->Vmem blts
dwSVBFXCaps: DWORD; // driver FX capabilities for System->Vmem blts
dwSVBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
dwSVBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->Vmem blts
dwVSBCaps: DWORD; // driver specific capabilities for Vmem->System blts
dwVSBCKeyCaps: DWORD; // driver color key capabilities for Vmem->System blts
dwVSBFXCaps: DWORD; // driver FX capabilities for Vmem->System blts
dwVSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
dwVSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for Vmem->System blts
dwSSBCaps: DWORD; // driver specific capabilities for System->System blts
dwSSBCKeyCaps: DWORD; // driver color key capabilities for System->System blts
dwSSBFXCaps: DWORD; // driver FX capabilities for System->System blts
dwSSBRops: array[0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
{ Members added for DX5 }
dwSSBRops: Array [0..DD_ROP_SPACE-1] of DWORD;// ROPS supported for System->System blts
// Members added for DX5:
dwMaxVideoPorts: DWORD; // maximum number of usable video ports
dwCurrVideoPorts: DWORD; // current number of video ports used
dwSVBCaps2: DWORD; // more driver specific capabilities for System->Vmem blts
575,40 → 485,48
dwNLVBCaps2: DWORD; // more driver specific capabilities non-local->local vidmem blts
dwNLVBCKeyCaps: DWORD; // driver color key capabilities for non-local->local vidmem blts
dwNLVBFXCaps: DWORD; // driver FX capabilities for non-local->local blts
dwNLVBRops: array[0..DD_ROP_SPACE-1] of DWORD; // ROPS supported for non-local->local blts
{ Members added for DX6 }
dwNLVBRops: Array [0..DD_ROP_SPACE-1] of DWORD; // ROPS supported for non-local->local blts
// Members added for DX6 release
ddsCaps: TDDSCaps2; // Surface Caps
end;
 
{$IFDEF DirectX1}
TDDCaps = TDDCaps_DX1;
PDDCaps = PDDCaps_DX1;
{$ENDIF}{$IFDEF DirectX3}
TDDCaps_DX7 = TDDCaps_DX6;
PDDCaps = ^TDDCaps;
 
{$IFDEF DIRECTX3}
TDDCaps = TDDCaps_DX3;
PDDCaps = PDDCaps_DX3;
{$ENDIF}{$IFDEF DirectX5}
{$ELSE}
{$IFDEF DIRECTX5}
TDDCaps = TDDCaps_DX5;
PDDCaps = PDDCaps_DX5;
{$ENDIF}{$IFDEF DirectX6}
{$ELSE}
{$IFDEF DIRECTX6}
TDDCaps = TDDCaps_DX6;
PDDCaps = PDDCaps_DX6;
{$ENDIF}{$IFDEF DirectX7}
{$ELSE}
TDDCaps = TDDCaps_DX7;
PDDCaps = PDDCaps_DX7;
{$ENDIF}
{$ENDIF}
{$ENDIF}
 
DDCAPS = TDDCaps;
LPDDCAPS = PDDCaps;
 
{ TDDPixelFormat structure }
 
PDDPixelFormat = ^TDDPixelFormat;
TDDPixelFormat = record
 
(*
* TDDPixelFormat
*)
PDDPixelFormat_DX5 = ^TDDPixelFormat_DX5;
TDDPixelFormat_DX5 = packed record
dwSize: DWORD; // size of structure
dwFlags: DWORD; // pixel format flags
dwFourCC: DWORD; // (FOURCC code)
case Integer of
0: (
dwZBufferBitDepth: DWORD; // how many bits for z buffers
);
1: (
dwAlphaBitDepth: DWORD; // how many bits for alpha channels
);
2: (
dwRGBBitCount: DWORD; // how many bits per pixel
dwRBitMask: DWORD; // mask for red bit
dwGBitMask: DWORD; // mask for green bits
615,14 → 533,38
dwBBitMask: DWORD; // mask for blue bits
dwRGBAlphaBitMask: DWORD; // mask for alpha channel
);
3: (
dwYUVBitCount: DWORD; // how many bits per pixel
dwYBitMask: DWORD; // mask for Y bits
dwUBitMask: DWORD; // mask for U bits
dwVBitMask: DWORD; // mask for V bits
case Integer of
0: (
dwYUVAlphaBitMask: DWORD; // mask for alpha channel
);
1: (
_union1a: DWORD;
_union1b: DWORD;
_union1c: DWORD;
_union1d: DWORD;
dwRGBZBitMask: DWORD; // mask for Z channel
dwRGBZBitMask: DWORD;
);
2: (
dwYUVZBitMask: DWORD;
);
);
end;
 
PDDPixelFormat_DX6 = ^TDDPixelFormat_DX6;
TDDPixelFormat_DX6 = packed record
dwSize: DWORD; // size of structure
dwFlags: DWORD; // pixel format flags
dwFourCC: DWORD; // (FOURCC code)
case Integer of
1: (
dwRGBBitCount : DWORD; // how many bits per pixel
dwRBitMask : DWORD; // mask for red bit
dwGBitMask : DWORD; // mask for green bits
dwBBitMask : DWORD; // mask for blue bits
dwRGBAlphaBitMask : DWORD; // mask for alpha channel
);
2: (
dwYUVBitCount: DWORD; // how many bits per pixel
dwYBitMask: DWORD; // mask for Y bits
dwUBitMask: DWORD; // mask for U bits
630,43 → 572,52
dwYUVAlphaBitMask: DWORD; // mask for alpha channel
);
3: (
_union3a: DWORD;
_union3b: DWORD;
_union3c: DWORD;
_union3d: DWORD;
dwYUVZBitMask: DWORD; // mask for Z channel
);
4: (
dwZBufferBitDepth: DWORD; // how many bits for z buffers
dwZBufferBitDepth : DWORD; // how many total bits/pixel in z buffer (including any stencil bits)
dwStencilBitDepth: DWORD; // how many stencil bits (note: dwZBufferBitDepth-dwStencilBitDepth is total Z-only bits)
dwZBitMask: DWORD; // mask for Z bits
dwStencilBitMask: DWORD; // mask for stencil bits
dwLuminanceAlphaBitMask : DWORD;// mask for alpha channel
);
5: (
4: (
dwAlphaBitDepth: DWORD; // how many bits for alpha channels
);
6: (
dwLuminanceBitCount: DWORD; // how many bits per pixel
dwLuminanceBitMask: DWORD; // mask for luminance bits
_union6c: DWORD;
_union6d: DWORD;
dwLuminanceAlphaBitMask: DWORD;
);
7: (
dwBumpBitCount: DWORD; // how many bits per "buxel", total
dwBumpDuBitMask: DWORD; // mask for bump map U delta bits
dwBumpDvBitMask: DWORD; // mask for bump map V delta bits
dwBumpLuminanceBitMask: DWORD; // mask for luminance in bump map
dwRGBZBitMask : DWORD; // mask for Z channel
);
5: (
dwLuminanceBitCount : DWORD; // how many bits per pixel
dwBumpDuBitMask : DWORD; // mask for bump map U delta bits
Fill1, Fill2 : DWORD;
dwYUVZBitMask : DWORD; // mask for Z channel
);
6: ( dwBumpBitCount : DWORD; // how many bits per "buxel", total
);
end;
 
DDPIXELFORMAT = TDDPixelFormat;
LPDDPIXELFORMAT = PDDPixelFormat;
TDDPixelFormat_DX3 = TDDPixelFormat_DX5;
TDDPixelFormat_DX7 = TDDPixelFormat_DX6;
 
{ DDOVERLAYFX structure }
PDDPixelFormat = ^TDDPixelFormat;
{$IFDEF DIRECTX3}
TDDPixelFormat = TDDPixelFormat_DX3;
{$ELSE}
{$IFDEF DIRECTX5}
TDDPixelFormat = TDDPixelFormat_DX5;
{$ELSE}
{$IFDEF DIRECTX6}
TDDPixelFormat = TDDPixelFormat_DX6;
{$ELSE}
TDDPixelFormat = TDDPixelFormat_DX7;
{$ENDIF}
{$ENDIF}
{$ENDIF}
 
PDDOverlayFx = ^TDDOverlayFx;
TDDOverlayFx = record
(*
* TDDOverlayFX
*)
PDDOverlayFX = ^TDDOverlayFX;
TDDOverlayFX = packed record
dwSize: DWORD; // size of structure
dwAlphaEdgeBlendBitDepth: DWORD; // Bit depth used to specify constant for alpha edge blend
dwAlphaEdgeBlend: DWORD; // Constant to use as alpha for edge blend
683,157 → 634,40
dwFlags: DWORD; // flags
);
1: (
lpDDSAlphaDest: Pointer{IDirectDrawSurface}; // Surface to use as alpha channel for dest
_union1b: DWORD;
lpDDSAlphaSrc: Pointer{IDirectDrawSurface}; // Surface to use as alpha channel for src
lpDDSAlphaDest: PDirectDrawSurface; // Surface to use as alpha channel for dest
filler: DWORD;
lpDDSAlphaSrc: PDirectDrawSurface; // Surface to use as alpha channel for src
);
end;
 
DDOVERLAYFX = TDDOverlayFx;
LPDDOVERLAYFX = PDDOverlayFx;
 
{ TDDBltBatch structure }
 
(*
* TDDBltBatch: BltBatch entry structure
*)
PDDBltBatch = ^TDDBltBatch;
TDDBltBatch = record
TDDBltBatch = packed record
lprDest: PRect;
lpDDSSrc: IDirectDrawSurface;
lprSrc: PRect;
dwFlags: DWORD;
lpDDBltFx: PDDBltFX;
lpDDBltFx: TDDBltFX;
end;
 
DDBLTBATCH = TDDBltBatch;
LPDDBLTBATCH = PDDBltBatch;
 
{ TDDSurfaceDesc structure }
 
PDDSurfaceDesc = ^TDDSurfaceDesc;
TDDSurfaceDesc = record
dwSize: DWORD; // size of the TDDSurfaceDesc structure
dwFlags: DWORD; // determines what fields are valid
dwHeight: DWORD; // height of surface to be created
dwWidth: DWORD; // width of input surface
case Integer of
0: (
lPitch: Longint;
dwBackBufferCount: DWORD; // number of back buffers requested
case Integer of
0: (
dwMipMapCount: DWORD; // number of mip-map levels requested
dwAlphaBitDepth: DWORD; // depth of alpha buffer requested
dwReserved: DWORD; // reserved
lpSurface: Pointer; // pointer to the associated surface memory
ddckCKDestOverlay: TDDColorKey;// color key for destination overlay use
ddckCKDestBlt: TDDColorKey; // color key for destination blt use
ddckCKSrcOverlay: TDDColorKey; // color key for source overlay use
ddckCKSrcBlt: TDDColorKey; // color key for source blt use
ddpfPixelFormat: TDDPixelFormat;// pixel format description of the surface
ddsCaps: TDDSCaps; // direct draw surface capabilities
);
1: (
dwZBufferBitDepth: DWORD; // depth of Z buffer requested
);
2: (
dwRefreshRate: DWORD; // refresh rate (used when display mode is described)
);
);
1: (
dwLinearSize: DWORD
);
end;
 
DDSURFACEDESC = TDDSurfaceDesc;
LPDDSURFACEDESC = PDDSurfaceDesc;
 
{ TDDSurfaceDesc2 structure }
 
PDDSurfaceDesc2 = ^TDDSurfaceDesc2;
TDDSurfaceDesc2 = record
dwSize: DWORD; // size of the TDDSurfaceDesc2 structure
dwFlags: DWORD; // determines what fields are valid
dwHeight: DWORD; // height of surface to be created
dwWidth: DWORD; // width of input surface
case Integer of
0: (
lPitch: Longint;
dwBackBufferCount: DWORD; // number of back buffers requested
case Integer of
0: (
dwMipMapCount: DWORD; // number of mip-map levels requested
dwAlphaBitDepth: DWORD; // depth of alpha buffer requested
dwReserved: DWORD; // reserved
lpSurface: Pointer; // pointer to the associated surface memory
ddckCKDestOverlay: TDDColorKey;// color key for destination overlay use
ddckCKDestBlt: TDDColorKey; // color key for destination blt use
ddckCKSrcOverlay: TDDColorKey; // color key for source overlay use
ddckCKSrcBlt: TDDColorKey; // color key for source blt use
ddpfPixelFormat: TDDPixelFormat;// pixel format description of the surface
ddsCaps: TDDSCaps2; // direct draw surface capabilities
dwTextureStage: DWORD; // stage in multitexture cascade
);
1: (
dwRefreshRate: DWORD; // refresh rate (used when display mode is described)
);
);
1: (
dwLinearSize: DWORD
);
end;
 
DDSURFACEDESC2 = TDDSurfaceDesc2;
LPDDSURFACEDESC2 = PDDSurfaceDesc2;
 
{ TDDOptSurfaceDesc structure }
 
PDDOptSurfaceDesc = ^TDDOptSurfaceDesc;
TDDOptSurfaceDesc = record
dwSize: DWORD; // size of the DDOPTSURFACEDESC structure
dwFlags: DWORD; // determines what fields are valid
ddSCaps: TDDSCaps2; // Common caps like: Memory type
ddOSCaps: TDDOSCaps; // Common caps like: Memory type
guid: TGUID; // Compression technique GUID
dwCompressionRatio: DWORD; // Compression ratio
end;
 
DDOPTSURFACEDESC = TDDOptSurfaceDesc;
LPDDOPTSURFACEDESC = PDDOptSurfaceDesc;
 
{ TDDColorControl structure }
 
PDDColorControl = ^TDDColorControl;
TDDColorControl = record
dwSize: DWORD;
dwFlags: DWORD;
lBrightness: Longint;
lContrast: Longint;
lHue: Longint;
lSaturation: Longint;
lSharpness: Longint;
lGamma: Longint;
lColorEnable: Longint;
dwReserved1: DWORD;
end;
 
DDCOLORCONTROL = TDDColorControl;
LPDDCOLORCONTROL = PDDCOLORCONTROL;
 
{ TDDGammaRamp structure }
 
(*
* TDDGammaRamp
*)
PDDGammaRamp = ^TDDGammaRamp;
TDDGammaRamp = record
Red: array[0..255] of Word;
Green: array[0..255] of Word;
Blue: array[0..255] of Word;
TDDGammaRamp = packed record
red : array[0..255] of WORD;
green : array[0..255] of WORD;
blue : array[0..255] of WORD;
end;
 
DDGAMMARAMP = TDDGammaRamp;
LPDDGAMMARAMP = PDDGammaRamp;
(*
* This is the structure within which DirectDraw returns data about the current graphics driver and chipset
*)
 
{ TDDDeviceIdentifier structure }
 
PDDDeviceIdentifier = ^TDDDeviceIdentifier;
TDDDeviceIdentifier = record
TDDDeviceIdentifier = packed record
//
// These elements are for presentation to the user only. They should not be used to identify particular
// drivers, since this is unreliable and many different strings may be associated with the same
876,13 → 710,8
guidDeviceIdentifier: TGUID;
end;
 
DDDEVICEIDENTIFIER = TDDDeviceIdentifier;
LPDDDEVICEIDENTIFIER = PDDDeviceIdentifier;
 
{ TDDDeviceIdentifier2 structure }
 
PDDDeviceIdentifier2 = ^TDDDeviceIdentifier2;
TDDDeviceIdentifier2 = record
TDDDeviceIdentifier2 = packed record
//
// These elements are for presentation to the user only. They should not be used to identify particular
// drivers, since this is unreliable and many different strings may be associated with the same
924,247 → 753,432
//
guidDeviceIdentifier: TGUID;
 
//
// This element is used to determine the Windows Hardware Quality Lab (WHQL)
// certification level for this driver/device pair.
//
(*
* This element is used to determine the Windows Hardware Quality Lab (WHQL)
* certification level for this driver/device pair.
*)
dwWHQLLevel: DWORD;
end;
 
DDDEVICEIDENTIFIER2 = TDDDeviceIdentifier2;
LPDDDEVICEIDENTIFIER2 = PDDDeviceIdentifier2;
 
{ Callbacks }
 
(*
* callbacks
*)
TClipperCallback = function(lpDDClipper: IDirectDrawClipper; hWnd: HWND;
Code: DWORD; lpContext: Pointer): HResult; stdcall;
LPCLIPPERCALLBACK = TClipperCallback;
 
TSurfacesStreamingCallback = function(Arg: DWORD): HResult; stdcall;
LPSURFACESTREAMINGCALLBACK =TSurfacesStreamingCallback;
 
(*
* TDDSurfaceDesc
*)
PDDSurfaceDesc_DX5 = ^TDDSurfaceDesc_DX5;
TDDSurfaceDesc_DX5 = packed record
dwSize: DWORD; // size of the TDDSurfaceDesc structure
dwFlags: DWORD; // determines what fields are valid
dwHeight: DWORD; // height of surface to be created
dwWidth: DWORD; // width of input surface
case Integer of
0: (
dwLinearSize : DWORD; // unused at the moment
);
1: (
lPitch: LongInt; // distance to start of next line (return value only)
dwBackBufferCount: DWORD; // number of back buffers requested
case Integer of
0: (
dwMipMapCount: DWORD; // number of mip-map levels requested
dwAlphaBitDepth: DWORD; // depth of alpha buffer requested
dwReserved: DWORD; // reserved
lpSurface: Pointer; // pointer to the associated surface memory
ddckCKDestOverlay: TDDColorKey; // color key for destination overlay use
ddckCKDestBlt: TDDColorKey; // color key for destination blt use
ddckCKSrcOverlay: TDDColorKey; // color key for source overlay use
ddckCKSrcBlt: TDDColorKey; // color key for source blt use
ddpfPixelFormat: TDDPixelFormat_DX5; // pixel format description of the surface
ddsCaps: TDDSCaps; // direct draw surface capabilities
);
1: (
dwZBufferBitDepth: DWORD; // depth of Z buffer requested
);
2: (
dwRefreshRate: DWORD; // refresh rate (used when display mode is described)
);
);
end;
 
PDDSurfaceDesc_DX6 = ^TDDSurfaceDesc_DX6;
TDDSurfaceDesc_DX6 = packed record
dwSize: DWORD; // size of the TDDSurfaceDesc structure
dwFlags: DWORD; // determines what fields are valid
dwHeight: DWORD; // height of surface to be created
dwWidth: DWORD; // width of input surface
case Integer of
0: (
dwLinearSize : DWORD; // unused at the moment
);
1: (
lPitch: LongInt; // distance to start of next line (return value only)
dwBackBufferCount: DWORD; // number of back buffers requested
case Integer of
0: (
dwMipMapCount: DWORD; // number of mip-map levels requested
dwAlphaBitDepth: DWORD; // depth of alpha buffer requested
dwReserved: DWORD; // reserved
lpSurface: Pointer; // pointer to the associated surface memory
ddckCKDestOverlay: TDDColorKey; // color key for destination overlay use
ddckCKDestBlt: TDDColorKey; // color key for destination blt use
ddckCKSrcOverlay: TDDColorKey; // color key for source overlay use
ddckCKSrcBlt: TDDColorKey; // color key for source blt use
ddpfPixelFormat: TDDPixelFormat_DX6; // pixel format description of the surface
ddsCaps: TDDSCaps; // direct draw surface capabilities
);
1: (
dwZBufferBitDepth: DWORD; // depth of Z buffer requested
);
2: (
dwRefreshRate: DWORD; // refresh rate (used when display mode is described)
);
);
end;
 
PDDSurfaceDesc = ^TDDSurfaceDesc;
{$IFDEF DIRECTX5}
TDDSurfaceDesc = TDDSurfaceDesc_DX5;
{$ELSE}
TDDSurfaceDesc = TDDSurfaceDesc_DX6;
{$ENDIF}
 
 
(*
* TDDSurfaceDesc2
*)
PDDSurfaceDesc2 = ^TDDSurfaceDesc2;
TDDSurfaceDesc2 = packed record
dwSize: DWORD; // size of the TDDSurfaceDesc structure
dwFlags: DWORD; // determines what fields are valid
dwHeight: DWORD; // height of surface to be created
dwWidth: DWORD; // width of input surface
case Integer of
0: (
lPitch : LongInt; // distance to start of next line (return value only)
);
1: (
dwLinearSize : DWORD; // Formless late-allocated optimized surface size
dwBackBufferCount: DWORD; // number of back buffers requested
case Integer of
0: (
dwMipMapCount: DWORD; // number of mip-map levels requested
dwAlphaBitDepth: DWORD; // depth of alpha buffer requested
dwReserved: DWORD; // reserved
lpSurface: Pointer; // pointer to the associated surface memory
ddckCKDestOverlay: TDDColorKey; // color key for destination overlay use
ddckCKDestBlt: TDDColorKey; // color key for destination blt use
ddckCKSrcOverlay: TDDColorKey; // color key for source overlay use
ddckCKSrcBlt: TDDColorKey; // color key for source blt use
ddpfPixelFormat: TDDPixelFormat; // pixel format description of the surface
ddsCaps: TDDSCaps2; // direct draw surface capabilities
dwTextureStage: DWORD; // stage in multitexture cascade
);
1: (
dwRefreshRate: DWORD; // refresh rate (used when display mode is described)
);
);
end;
 
(*
* TDDOptSurfaceDesc
*)
 
PDDOptSurfaceDesc = ^TDDOptSurfaceDesc;
TDDOptSurfaceDesc = packed record
dwSize : DWORD; // size of the DDOPTSURFACEDESC structure
dwFlags : DWORD; // determines what fields are valid
ddSCaps : TDDSCaps2; // Common caps like: Memory type
ddOSCaps : TDDOSCaps; // Common caps like: Memory type
guid : TGUID; // Compression technique GUID
dwCompressionRatio : DWORD; // Compression ratio
end;
 
(*
* DDCOLORCONTROL
*)
PDDColorControl = ^TDDColorControl;
TDDColorControl = packed record
dwSize: DWORD;
dwFlags: DWORD;
lBrightness: LongInt;
lContrast: LongInt;
lHue: LongInt;
lSaturation: LongInt;
lSharpness: LongInt;
lGamma: LongInt;
lColorEnable: LongInt;
dwReserved1: DWORD;
end;
 
(*
* callbacks
*)
 
{$IFNDEF WINNT}
TDDEnumModesCallback = function(const lpDDSurfaceDesc: TDDSurfaceDesc;
lpContext: Pointer): HResult; stdcall;
LPDDENUMMODESCALLBACK = TDDEnumModesCallback;
 
TDDEnumModesCallback2 = function(const lpDDSurfaceDesc: TDDSurfaceDesc2;
lpContext: Pointer): HResult; stdcall;
LPDDENUMMODESCALLBACK2 = TDDEnumModesCallback2;
 
TDDEnumSurfacesCallback = function(lpDDSurface: IDirectDrawSurface;
const lpDDSurfaceDesc: TDDSurfaceDesc; lpContext: Pointer): HResult; stdcall;
LPDDENUMSURFACESCALLBACK = TDDEnumSurfacesCallback;
 
TDDEnumSurfacesCallback2 = function(lpDDSurface: IDirectDrawSurface4;
const lpDDSurfaceDesc: TDDSurfaceDesc2; lpContext: Pointer): HResult; stdcall;
LPDDENUMSURFACESCALLBACK2 = TDDEnumSurfacesCallback2;
 
TDDEnumSurfacesCallback7 = function(lpDDSurface: IDirectDrawSurface7;
const lpDDSurfaceDesc: TDDSurfaceDesc2; lpContext: Pointer): HResult; stdcall;
LPDDENUMSURFACESCALLBACK7 = TDDEnumSurfacesCallback7;
{$ENDIF}
 
{ IDirectDraw Interface }
(*
* INTERACES FOLLOW:
* IDirectDraw
* IDirectDrawClipper
* IDirectDrawPalette
* IDirectDrawSurface
*)
 
(*
* IDirectDraw
*)
 
IDirectDraw = interface(IUnknown)
['{6C14DB80-A733-11CE-A521-0020AF0BE560}']
// IDirectDraw methods
(*** IDirectDraw methods ***)
function Compact: HResult; stdcall;
function CreateClipper(dwFlags: DWORD; out lplpDDClipper: IDirectDrawClipper;
function CreateClipper (dwFlags: DWORD;
out lplpDDClipper: IDirectDrawClipper;
pUnkOuter: IUnknown): HResult; stdcall;
function CreatePalette(dwFlags: DWORD; lpColorTable: PPaletteEntry;
out lplpDDPalette: IDirectDrawPalette; pUnkOuter: IUnknown): HResult; stdcall;
function CreateSurface(const lpDDSurfaceDesc: TDDSurfaceDesc;
out lplpDDSurface: IDirectDrawSurface; pUnkOuter: IUnknown): HResult; stdcall;
function CreatePalette (dwFlags: DWORD; lpColorTable: pointer;
out lplpDDPalette: IDirectDrawPalette;
pUnkOuter: IUnknown) : HResult; stdcall;
function CreateSurface (var lpDDSurfaceDesc: TDDSurfaceDesc;
out lplpDDSurface: IDirectDrawSurface;
pUnkOuter: IUnknown) : HResult; stdcall;
function DuplicateSurface(lpDDSurface: IDirectDrawSurface;
out lplpDupDDSurface: IDirectDrawSurface): HResult; stdcall;
function EnumDisplayModes(dwFlags: DWORD;
const lpDDSurfaceDesc: TDDSurfaceDesc; lpContext: Pointer;
lpDDSurfaceDesc: PDDSurfaceDesc; lpContext: Pointer;
lpEnumModesCallback: TDDEnumModesCallback): HResult; stdcall;
function EnumSurfaces(dwFlags: DWORD; const lpDDSD: TDDSurfaceDesc;
lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback): HResult; stdcall;
lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback) :
HResult; stdcall;
function FlipToGDISurface: HResult; stdcall;
function GetCaps(var lpDDDriverCaps: TDDCaps; var lpDDHELCaps: TDDCaps): HResult; stdcall;
function GetDisplayMode(var lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
function GetFourCCCodes(var lpNumCodes, lpCodes: DWORD): HResult; stdcall;
function GetGDISurface(out lplpGDIDDSSurface: IDirectDrawSurface): HResult; stdcall;
function GetMonitorFrequency(var lpdwFrequency: DWORD): HResult; stdcall;
function GetScanLine(var lpdwScanLine: DWORD): HResult; stdcall;
function GetVerticalBlankStatus(var lpbIsInVB: BOOL): HResult; stdcall;
function GetCaps (lpDDDriverCaps: PDDCaps; lpDDHELCaps: PDDCaps) : HResult; stdcall;
function GetDisplayMode (out lpDDSurfaceDesc: TDDSurfaceDesc) : HResult; stdcall;
function GetFourCCCodes (var lpNumCodes: DWORD; lpCodes: PDWORD) : HResult; stdcall;
function GetGDISurface (out lplpGDIDDSSurface: IDirectDrawSurface) :
HResult; stdcall;
function GetMonitorFrequency (out lpdwFrequency: DWORD) : HResult; stdcall;
function GetScanLine (out lpdwScanLine: DWORD) : HResult; stdcall;
function GetVerticalBlankStatus (out lpbIsInVB: BOOL) : HResult; stdcall;
function Initialize(lpGUID: PGUID): HResult; stdcall;
function RestoreDisplayMode: HResult; stdcall;
function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;
function SetDisplayMode(dwWidth, dwHeight, dwBpp: DWORD): HResult; stdcall;
function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
(*** Warning! SetDisplayMode differs between DirectDraw 1 and DirectDraw 2 ***)
function SetDisplayMode (dwWidth: DWORD; dwHeight: DWORD;
dwBpp: DWORD) : HResult; stdcall;
function WaitForVerticalBlank (dwFlags: DWORD; hEvent: THandle) :
HResult; stdcall;
end;
 
{ IDirectDraw2 Interface }
 
IDirectDraw2 = interface(IUnknown)
['{B3A6F3E0-2B43-11CF-A2DE-00AA00B93356}']
// IDirectDraw methods
(*** IDirectDraw methods ***)
function Compact: HResult; stdcall;
function CreateClipper(dwFlags: DWORD; out lplpDDClipper: IDirectDrawClipper;
function CreateClipper (dwFlags: DWORD;
out lplpDDClipper: IDirectDrawClipper;
pUnkOuter: IUnknown): HResult; stdcall;
function CreatePalette(dwFlags: DWORD; lpColorTable: PPaletteEntry;
out lplpDDPalette: IDirectDrawPalette; pUnkOuter: IUnknown): HResult; stdcall;
function CreateSurface(const lpDDSurfaceDesc: TDDSurfaceDesc;
out lplpDDSurface: IDirectDrawSurface; pUnkOuter: IUnknown): HResult; stdcall;
function CreatePalette (dwFlags: DWORD; lpColorTable: pointer;
out lplpDDPalette: IDirectDrawPalette;
pUnkOuter: IUnknown) : HResult; stdcall;
function CreateSurface (var lpDDSurfaceDesc: TDDSurfaceDesc;
out lplpDDSurface: IDirectDrawSurface;
pUnkOuter: IUnknown) : HResult; stdcall;
function DuplicateSurface(lpDDSurface: IDirectDrawSurface;
out lplpDupDDSurface: IDirectDrawSurface): HResult; stdcall;
function EnumDisplayModes(dwFlags: DWORD;
const lpDDSurfaceDesc: TDDSurfaceDesc; lpContext: Pointer;
lpDDSurfaceDesc: PDDSurfaceDesc; lpContext: Pointer;
lpEnumModesCallback: TDDEnumModesCallback): HResult; stdcall;
function EnumSurfaces(dwFlags: DWORD; const lpDDSD: TDDSurfaceDesc;
lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback): HResult; stdcall;
function EnumSurfaces (dwFlags: DWORD; var lpDDSD: TDDSurfaceDesc;
lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback) :
HResult; stdcall;
function FlipToGDISurface: HResult; stdcall;
function GetCaps(var lpDDDriverCaps: TDDCaps; var lpDDHELCaps: TDDCaps): HResult; stdcall;
function GetDisplayMode(var lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
function GetFourCCCodes(var lpNumCodes, lpCodes: DWORD): HResult; stdcall;
function GetCaps (lpDDDriverCaps: PDDCaps; lpDDHELCaps: PDDCaps) : HResult; stdcall;
function GetDisplayMode (out lpDDSurfaceDesc: TDDSurfaceDesc) : HResult; stdcall;
function GetFourCCCodes (var lpNumCodes: DWORD; lpCodes: PDWORD) : HResult; stdcall;
function GetGDISurface(out lplpGDIDDSSurface: IDirectDrawSurface): HResult; stdcall;
function GetMonitorFrequency(var lpdwFrequency: DWORD): HResult; stdcall;
function GetScanLine(var lpdwScanLine: DWORD): HResult; stdcall;
function GetVerticalBlankStatus(var lpbIsInVB: BOOL): HResult; stdcall;
function GetMonitorFrequency (out lpdwFrequency: DWORD) : HResult; stdcall;
function GetScanLine (out lpdwScanLine: DWORD) : HResult; stdcall;
function GetVerticalBlankStatus (out lpbIsInVB: BOOL) : HResult; stdcall;
function Initialize(lpGUID: PGUID): HResult; stdcall;
function RestoreDisplayMode: HResult; stdcall;
function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;
function SetDisplayMode(dwWidth, dwHeight, dwBPP, dwRefreshRate: DWORD;
dwFlags: DWORD): HResult; stdcall;
function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
// IDirectDraw2 methods
(*** Warning! SetDisplayMode differs between DirectDraw 1 and DirectDraw 2 ***)
function SetDisplayMode (dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD;
dwRefreshRate: DWORD; dwFlags: DWORD) : HResult; stdcall;
function WaitForVerticalBlank (dwFlags: DWORD; hEvent: THandle) :
HResult; stdcall;
(*** Added in the v2 interface ***)
function GetAvailableVidMem(var lpDDSCaps: TDDSCaps;
var lpdwTotal, lpdwFree: DWORD): HResult; stdcall;
out lpdwTotal, lpdwFree: DWORD) : HResult; stdcall;
end;
 
{ IDirectDraw4 Interface }
 
IDirectDraw4 = interface(IUnknown)
['{9C59509A-39BD-11D1-8C4A-00C04FD930C5}']
// IDirectDraw methods
['{9c59509a-39bd-11d1-8c4a-00c04fd930c5}']
(*** IDirectDraw methods ***)
function Compact: HResult; stdcall;
function CreateClipper(dwFlags: DWORD; out lplpDDClipper: IDirectDrawClipper;
function CreateClipper (dwFlags: DWORD;
out lplpDDClipper: IDirectDrawClipper;
pUnkOuter: IUnknown): HResult; stdcall;
function CreatePalette(dwFlags: DWORD; lpColorTable: PPaletteEntry;
out lplpDDPalette: IDirectDrawPalette; pUnkOuter: IUnknown): HResult; stdcall;
function CreatePalette (dwFlags: DWORD; lpColorTable: pointer;
out lplpDDPalette: IDirectDrawPalette;
pUnkOuter: IUnknown) : HResult; stdcall;
function CreateSurface(const lpDDSurfaceDesc: TDDSurfaceDesc2;
out lplpDDSurface: IDirectDrawSurface4; pUnkOuter: IUnknown): HResult; stdcall;
out lplpDDSurface: IDirectDrawSurface4;
pUnkOuter: IUnknown) : HResult; stdcall;
function DuplicateSurface(lpDDSurface: IDirectDrawSurface4;
out lplpDupDDSurface: IDirectDrawSurface4): HResult; stdcall;
function EnumDisplayModes(dwFlags: DWORD;
const lpDDSurfaceDesc: TDDSurfaceDesc2; lpContext: Pointer;
lpDDSurfaceDesc: PDDSurfaceDesc2; lpContext: Pointer;
lpEnumModesCallback: TDDEnumModesCallback2): HResult; stdcall;
function EnumSurfaces(dwFlags: DWORD; const lpDDSD: TDDSurfaceDesc2;
lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback2): HResult; stdcall;
lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback2) :
HResult; stdcall;
function FlipToGDISurface: HResult; stdcall;
function GetCaps(var lpDDDriverCaps: TDDCaps; var lpDDHELCaps: TDDCaps): HResult; stdcall;
function GetDisplayMode(var lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
function GetFourCCCodes(var lpNumCodes, lpCodes: DWORD): HResult; stdcall;
function GetGDISurface(out lplpGDIDDSSurface: IDirectDrawSurface2): HResult; stdcall;
function GetMonitorFrequency(var lpdwFrequency: DWORD): HResult; stdcall;
function GetScanLine(var lpdwScanLine: DWORD): HResult; stdcall;
function GetVerticalBlankStatus(var lpbIsInVB: BOOL): HResult; stdcall;
function GetCaps (lpDDDriverCaps: PDDCaps; lpDDHELCaps: PDDCaps) : HResult; stdcall;
function GetDisplayMode (out lpDDSurfaceDesc: TDDSurfaceDesc2) : HResult; stdcall;
function GetFourCCCodes (var lpNumCodes: DWORD; lpCodes: PDWORD) : HResult; stdcall;
function GetGDISurface (out lplpGDIDDSSurface: IDirectDrawSurface4) :
HResult; stdcall;
function GetMonitorFrequency (out lpdwFrequency: DWORD) : HResult; stdcall;
function GetScanLine (out lpdwScanLine: DWORD) : HResult; stdcall;
function GetVerticalBlankStatus (out lpbIsInVB: BOOL) : HResult; stdcall;
function Initialize(lpGUID: PGUID): HResult; stdcall;
function RestoreDisplayMode: HResult; stdcall;
function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;
function SetDisplayMode(dwWidth, dwHeight, dwBPP, dwRefreshRate: DWORD;
dwFlags: DWORD): HResult; stdcall;
function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
// IDirectDraw2 methods
function GetAvailableVidMem(var lpDDSCaps: TDDSCaps;
var lpdwTotal, lpdwFree: DWORD): HResult; stdcall;
// IDirectDraw4 methods
function GetSurfaceFromDC(hdc: HDC; lpDDS: IDirectDrawSurface4): HResult; stdcall;
(*** Warning! SetDisplayMode differs between DirectDraw 1 and DirectDraw 2 ***)
function SetDisplayMode (dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD;
dwRefreshRate: DWORD; dwFlags: DWORD) : HResult; stdcall;
function WaitForVerticalBlank (dwFlags: DWORD; hEvent: THandle) :
HResult; stdcall;
(*** Added in the v2 interface ***)
function GetAvailableVidMem (const lpDDSCaps: TDDSCaps2;
out lpdwTotal, lpdwFree: DWORD) : HResult; stdcall;
(*** Added in the V4 Interface ***)
function GetSurfaceFromDC (hdc : Windows.HDC;
out lpDDS4: IDirectDrawSurface4) : HResult; stdcall;
function RestoreAllSurfaces: HResult; stdcall;
function TestCooperativeLevel: HResult; stdcall;
function GetDeviceIdentifier(var lpdddi: TDDDeviceIdentifier; dwFlags: DWORD): HResult; stdcall;
function GetDeviceIdentifier (out lpdddi: TDDDeviceIdentifier;
dwFlags: DWORD) : HResult; stdcall;
end;
 
{ IDirectDraw7 Interface }
 
IDirectDraw7 = interface(IUnknown)
['{15E65EC0-3B9C-11D2-B92F-00609797EA5B}']
// IDirectDraw methods
['{15e65ec0-3b9c-11d2-b92f-00609797ea5b}']
(*** IDirectDraw methods ***)
function Compact: HResult; stdcall;
function CreateClipper(dwFlags: DWORD; out lplpDDClipper: IDirectDrawClipper;
function CreateClipper (dwFlags: DWORD;
out lplpDDClipper: IDirectDrawClipper;
pUnkOuter: IUnknown): HResult; stdcall;
function CreatePalette(dwFlags: DWORD; lpColorTable: PPaletteEntry;
out lplpDDPalette: IDirectDrawPalette; pUnkOuter: IUnknown): HResult; stdcall;
function CreatePalette (dwFlags: DWORD; lpColorTable: pointer;
out lplpDDPalette: IDirectDrawPalette;
pUnkOuter: IUnknown) : HResult; stdcall;
function CreateSurface(const lpDDSurfaceDesc: TDDSurfaceDesc2;
out lplpDDSurface: IDirectDrawSurface7; pUnkOuter: IUnknown): HResult; stdcall;
out lplpDDSurface: IDirectDrawSurface7;
pUnkOuter: IUnknown) : HResult; stdcall;
function DuplicateSurface(lpDDSurface: IDirectDrawSurface7;
out lplpDupDDSurface: IDirectDrawSurface7): HResult; stdcall;
function EnumDisplayModes(dwFlags: DWORD;
const lpDDSurfaceDesc: TDDSurfaceDesc2; lpContext: Pointer;
lpDDSurfaceDesc: PDDSurfaceDesc2; lpContext: Pointer;
lpEnumModesCallback: TDDEnumModesCallback2): HResult; stdcall;
function EnumSurfaces(dwFlags: DWORD; const lpDDSD: TDDSurfaceDesc2;
lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback7): HResult; stdcall;
lpContext: Pointer; lpEnumCallback: TDDEnumSurfacesCallback7) :
HResult; stdcall;
function FlipToGDISurface: HResult; stdcall;
function GetCaps(var lpDDDriverCaps: TDDCaps; var lpDDHELCaps: TDDCaps): HResult; stdcall;
function GetDisplayMode(var lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
function GetFourCCCodes(var lpNumCodes, lpCodes: DWORD): HResult; stdcall;
function GetGDISurface(out lplpGDIDDSSurface: IDirectDrawSurface7): HResult; stdcall;
function GetMonitorFrequency(var lpdwFrequency: DWORD): HResult; stdcall;
function GetScanLine(var lpdwScanLine: DWORD): HResult; stdcall;
function GetVerticalBlankStatus(var lpbIsInVB: BOOL): HResult; stdcall;
function GetCaps (lpDDDriverCaps: PDDCaps; lpDDHELCaps: PDDCaps) : HResult; stdcall;
function GetDisplayMode (out lpDDSurfaceDesc: TDDSurfaceDesc2) : HResult; stdcall;
function GetFourCCCodes (var lpNumCodes: DWORD; lpCodes: PDWORD) : HResult; stdcall;
function GetGDISurface (out lplpGDIDDSSurface: IDirectDrawSurface7) :
HResult; stdcall;
function GetMonitorFrequency (out lpdwFrequency: DWORD) : HResult; stdcall;
function GetScanLine (out lpdwScanLine: DWORD) : HResult; stdcall;
function GetVerticalBlankStatus (out lpbIsInVB: BOOL) : HResult; stdcall;
function Initialize(lpGUID: PGUID): HResult; stdcall;
function RestoreDisplayMode: HResult; stdcall;
function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;
function SetDisplayMode(dwWidth, dwHeight, dwBPP, dwRefreshRate: DWORD;
dwFlags: DWORD): HResult; stdcall;
function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
// IDirectDraw2 methods
function GetAvailableVidMem(var lpDDSCaps: TDDSCaps;
var lpdwTotal, lpdwFree: DWORD): HResult; stdcall;
// IDirectDraw4 methods
function GetSurfaceFromDC(hdc: HDC; lpDDS: IDirectDrawSurface4): HResult; stdcall;
function SetDisplayMode (dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD;
dwRefreshRate: DWORD; dwFlags: DWORD) : HResult; stdcall;
function WaitForVerticalBlank (dwFlags: DWORD; hEvent: THandle) :
HResult; stdcall;
(*** Added in the v2 interface ***)
function GetAvailableVidMem (const lpDDSCaps: TDDSCaps2;
out lpdwTotal, lpdwFree: DWORD) : HResult; stdcall;
(*** Added in the V4 Interface ***)
function GetSurfaceFromDC (hdc : Windows.HDC;
out lpDDS: IDirectDrawSurface7) : HResult; stdcall;
function RestoreAllSurfaces: HResult; stdcall;
function TestCooperativeLevel: HResult; stdcall;
function GetDeviceIdentifier(var lpdddi: TDDDeviceIdentifier; dwFlags: DWORD): HResult; stdcall;
// IDirectDraw7 methods
function StartModeTest(var lpModesToTest: TSize; dwNumEntries: DWORD; dwFlags: DWORD): HResult; stdcall;
function EvaluateMode(dwFlags: DWORD; var pSecondsUntilTimeout: DWORD): HResult; stdcall;
function GetDeviceIdentifier (out lpdddi: TDDDeviceIdentifier2;
dwFlags: DWORD) : HResult; stdcall;
function StartModeTest(const lpModesToTest; dwNumEntries, dwFlags: DWORD) : HResult; stdcall;
function EvaluateMode(dwFlags: DWORD; out pSecondsUntilTimeout: DWORD) : HResult; stdcall;
end;
 
{ IDirectDrawPalette Interface }
 
 
(*
* IDirectDrawPalette
*)
 
IDirectDrawPalette = interface(IUnknown)
['{6C14DB84-A733-11CE-A521-0020AF0BE560}']
// IDirectDrawPalette methods
function GetCaps(varlpdwCaps: DWORD): HResult; stdcall;
(*** IDirectDrawPalette methods ***)
function GetCaps (out lpdwCaps: DWORD) : HResult; stdcall;
function GetEntries(dwFlags: DWORD; dwBase: DWORD; dwNumEntries: DWORD;
lpEntries: PPaletteEntry): HResult; stdcall;
lpEntries: pointer) : HResult; stdcall;
function Initialize(lpDD: IDirectDraw; dwFlags: DWORD;
lpDDColorTable: PPaletteEntry): HResult; stdcall;
lpDDColorTable: pointer) : HResult; stdcall;
function SetEntries(dwFlags: DWORD; dwStartingEntry: DWORD;
dwCount: DWORD; lpEntries: PPaletteEntry): HResult; stdcall;
dwCount: DWORD; lpEntries: pointer) : HResult; stdcall;
end;
 
{ IDirectDrawClipper Interface }
(*
* IDirectDrawClipper
*)
 
IDirectDrawClipper = interface(IUnknown)
['{6C14DB85-A733-11CE-A521-0020AF0BE560}']
// IDirectDrawClipper methods
function GetClipList(const lpRect: TRect; lpClipList: PRgnData;
(*** IDirectDrawClipper methods ***)
function GetClipList (lpRect: PRect; lpClipList: PRgnData;
var lpdwSize: DWORD): HResult; stdcall;
function GetHWnd(var lphWnd: HWND): HResult; stdcall;
function GetHWnd (out lphWnd: HWND) : HResult; stdcall;
function Initialize(lpDD: IDirectDraw; dwFlags: DWORD): HResult; stdcall;
function IsClipListChanged(var lpbChanged: BOOL): HResult; stdcall;
function IsClipListChanged (out lpbChanged: BOOL) : HResult; stdcall;
function SetClipList(lpClipList: PRgnData; dwFlags: DWORD): HResult; stdcall;
function SetHWnd(dwFlags: DWORD; hWnd: HWND): HResult; stdcall;
end;
 
{ IDirectDrawSurface Interface }
(*
* IDirectDrawSurface and related interfaces
*)
 
IDirectDrawSurface = interface(IUnknown)
['{6C14DB81-A733-11CE-A521-0020AF0BE560}']
// IDirectDrawSurface methods
function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface): HResult; stdcall;
(*** IDirectDrawSurface methods ***)
function AddAttachedSurface (lpDDSAttachedSurface: IDirectDrawSurface) :
HResult; stdcall;
function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
function Blt(const lpDestRect: TRect; lpDDSrcSurface: IDirectDrawSurface;
const lpSrcRect: TRect; dwFlags: DWORD; const lpDDBltFx: TDDBltFX): HResult; stdcall;
function Blt (lpDestRect: PRect;
lpDDSrcSurface: IDirectDrawSurface; lpSrcRect: PRect;
dwFlags: DWORD; lpDDBltFx: PDDBltFX) : HResult; stdcall;
function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
dwFlags: DWORD): HResult; stdcall;
function BltFast(dwX, dwY: DWORD; lpDDSrcSurface: IDirectDrawSurface;
const lpSrcRect: TRect; dwTrans: DWORD): HResult; stdcall;
function BltFast (dwX: DWORD; dwY: DWORD;
lpDDSrcSurface: IDirectDrawSurface; lpSrcRect: PRect;
dwTrans: DWORD) : HResult; stdcall;
function DeleteAttachedSurface(dwFlags: DWORD;
lpDDSAttachedSurface: IDirectDrawSurface): HResult; stdcall;
function EnumAttachedSurfaces(lpContext: Pointer;
1174,50 → 1188,57
function Flip(lpDDSurfaceTargetOverride: IDirectDrawSurface;
dwFlags: DWORD): HResult; stdcall;
function GetAttachedSurface(var lpDDSCaps: TDDSCaps;
out lplpDDAttachedSurface: IDirectDrawSurface): HResult; stdcall;
(*out*)var lplpDDAttachedSurface: IDirectDrawSurface) : HResult; stdcall;
function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
function GetCaps(var lpDDSCaps: TDDSCaps): HResult; stdcall;
function GetCaps (out lpDDSCaps: TDDSCaps) : HResult; stdcall;
function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
function GetColorKey(dwFlags: DWORD; var lpDDColorKey: TDDColorKey): HResult; stdcall;
function GetDC(var lphDC: HDC): HResult; stdcall;
function GetColorKey (dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
HResult; stdcall;
function GetDC (out lphDC: HDC) : HResult; stdcall;
function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
function GetOverlayPosition(var lplX, lplY: Longint): HResult; stdcall;
function GetOverlayPosition (out lplX, lplY: LongInt) : HResult; stdcall;
function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
function GetPixelFormat(var lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
function GetSurfaceDesc(var lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
function GetPixelFormat (out lpDDPixelFormat: TDDPixelFormat) : HResult; stdcall;
function GetSurfaceDesc (out lpDDSurfaceDesc: TDDSurfaceDesc) : HResult; stdcall;
function Initialize(lpDD: IDirectDraw;
const lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
out lpDDSurfaceDesc: TDDSurfaceDesc) : HResult; stdcall;
function IsLost: HResult; stdcall;
function Lock(lpDestRect: PRect; var lpDDSurfaceDesc: TDDSurfaceDesc;
dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
function ReleaseDC(hDC: HDC): HResult; stdcall;
function Restore: HResult; stdcall;
function Lock (lpDestRect: PRect; out lpDDSurfaceDesc:
TDDSurfaceDesc; dwFlags: DWORD; hEvent: THandle) : HResult; stdcall;
function ReleaseDC (hDC: Windows.HDC) : HResult; stdcall;
function _Restore: HResult; stdcall;
function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
function SetColorKey(dwFlags: DWORD; const lpDDColorKey: TDDColorKey): HResult; stdcall;
function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
function SetColorKey (dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
HResult; stdcall;
function SetOverlayPosition (lX, lY: LongInt) : HResult; stdcall;
function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
function Unlock(lpSurfaceData: Pointer): HResult; stdcall;
function UpdateOverlay(const lpSrcRect: TRect;
lpDDDestSurface: IDirectDrawSurface; const lpDestRect: TRect;
dwFlags: DWORD; const lpDDOverlayFx: TDDOverlayFX): HResult; stdcall;
function UpdateOverlay (lpSrcRect: PRect;
lpDDDestSurface: IDirectDrawSurface; lpDestRect: PRect;
dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX) : HResult; stdcall;
function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
function UpdateOverlayZOrder(dwFlags: DWORD;
lpDDSReference: IDirectDrawSurface): HResult; stdcall;
end;
 
{ IDirectDrawSurface2 Interface }
(*
* IDirectDrawSurface2 and related interfaces
*)
 
IDirectDrawSurface2 = interface(IUnknown)
['{57805885-6EEC-11CF-9441-A82303C10E27}']
// IDirectDrawSurface methods
function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface2): HResult; stdcall;
['{57805885-6eec-11cf-9441-a82303c10e27}']
(*** IDirectDrawSurface methods ***)
function AddAttachedSurface (lpDDSAttachedSurface: IDirectDrawSurface2) :
HResult; stdcall;
function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
function Blt(const lpDestRect: TRect; lpDDSrcSurface: IDirectDrawSurface2;
const lpSrcRect: TRect; dwFlags: DWORD; const lpDDBltFx: TDDBltFX): HResult; stdcall;
function Blt (lpDestRect: PRect;
lpDDSrcSurface: IDirectDrawSurface2; lpSrcRect: PRect;
dwFlags: DWORD; lpDDBltFx: PDDBltFX) : HResult; stdcall;
function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
dwFlags: DWORD): HResult; stdcall;
function BltFast(dwX, dwY: DWORD; lpDDSrcSurface: IDirectDrawSurface2;
const lpSrcRect: TRect; dwTrans: DWORD): HResult; stdcall;
function BltFast (dwX: DWORD; dwY: DWORD;
lpDDSrcSurface: IDirectDrawSurface2; lpSrcRect: PRect;
dwTrans: DWORD) : HResult; stdcall;
function DeleteAttachedSurface(dwFlags: DWORD;
lpDDSAttachedSurface: IDirectDrawSurface2): HResult; stdcall;
function EnumAttachedSurfaces(lpContext: Pointer;
1229,51 → 1250,56
function GetAttachedSurface(var lpDDSCaps: TDDSCaps;
out lplpDDAttachedSurface: IDirectDrawSurface2): HResult; stdcall;
function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
function GetCaps(var lpDDSCaps: TDDSCaps): HResult; stdcall;
function GetCaps (out lpDDSCaps: TDDSCaps) : HResult; stdcall;
function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
function GetColorKey(dwFlags: DWORD; var lpDDColorKey: TDDColorKey): HResult; stdcall;
function GetDC(var lphDC: HDC): HResult; stdcall;
function GetColorKey (dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
HResult; stdcall;
function GetDC (out lphDC: HDC) : HResult; stdcall;
function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
function GetOverlayPosition(var lplX, lplY: Longint): HResult; stdcall;
function GetOverlayPosition (out lplX, lplY: LongInt) : HResult; stdcall;
function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
function GetPixelFormat(var lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
function GetSurfaceDesc(var lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
function Initialize(lpDD: IDirectDraw; const lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
function GetPixelFormat (out lpDDPixelFormat: TDDPixelFormat) : HResult; stdcall;
function GetSurfaceDesc (out lpDDSurfaceDesc: TDDSurfaceDesc) : HResult; stdcall;
function Initialize (lpDD: IDirectDraw;
out lpDDSurfaceDesc: TDDSurfaceDesc) : HResult; stdcall;
function IsLost: HResult; stdcall;
function Lock(lpDestRect: PRect; const lpDDSurfaceDesc: TDDSurfaceDesc;
dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
function ReleaseDC(hDC: HDC): HResult; stdcall;
function Restore: HResult; stdcall;
function Lock (lpDestRect: PRect;
out lpDDSurfaceDesc: TDDSurfaceDesc; dwFlags: DWORD;
hEvent: THandle) : HResult; stdcall;
function ReleaseDC (hDC: Windows.HDC) : HResult; stdcall;
function _Restore: HResult; stdcall;
function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
function SetColorKey(dwFlags: DWORD; const lpDDColorKey: TDDColorKey): HResult; stdcall;
function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
function SetColorKey (dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
HResult; stdcall;
function SetOverlayPosition (lX, lY: LongInt) : HResult; stdcall;
function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
function Unlock(lpSurfaceData: Pointer): HResult; stdcall;
function UpdateOverlay(const lpSrcRect: TRect;
lpDDDestSurface: IDirectDrawSurface2; const lpDestRect: TRect;
dwFlags: DWORD; const lpDDOverlayFx: TDDOverlayFX): HResult; stdcall;
function UpdateOverlay (lpSrcRect: PRect;
lpDDDestSurface: IDirectDrawSurface2; lpDestRect: PRect;
dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX) : HResult; stdcall;
function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
function UpdateOverlayZOrder(dwFlags: DWORD;
lpDDSReference: IDirectDrawSurface2): HResult; stdcall;
// IDirectDrawSurface2 methods
function GetDDInterface(out lplpDD: IUnknown): HResult; stdcall;
(*** Added in the v2 interface ***)
function GetDDInterface (var lplpDD: IDirectDraw) : HResult; stdcall;
function PageLock(dwFlags: DWORD): HResult; stdcall;
function PageUnlock(dwFlags: DWORD): HResult; stdcall;
end;
 
{ IDirectDrawSurface3 Interface }
 
IDirectDrawSurface3 = interface(IUnknown)
['{DA044E00-69B2-11D0-A1D5-00AA00B8DFBB}']
// IDirectDrawSurface methods
function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface3): HResult; stdcall;
(*** IDirectDrawSurface methods ***)
function AddAttachedSurface (lpDDSAttachedSurface: IDirectDrawSurface3) :
HResult; stdcall;
function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
function Blt(const lpDestRect: TRect; lpDDSrcSurface: IDirectDrawSurface3;
const lpSrcRect: TRect; dwFlags: DWORD; const lpDDBltFx: TDDBltFX): HResult; stdcall;
function Blt (lpDestRect: PRect;
lpDDSrcSurface: IDirectDrawSurface3; lpSrcRect: PRect;
dwFlags: DWORD; lpDDBltFx: PDDBltFX) : HResult; stdcall;
function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
dwFlags: DWORD): HResult; stdcall;
function BltFast(dwX, dwY: DWORD; lpDDSrcSurface: IDirectDrawSurface3;
const lpSrcRect: TRect; dwTrans: DWORD): HResult; stdcall;
function BltFast (dwX: DWORD; dwY: DWORD;
lpDDSrcSurface: IDirectDrawSurface3; lpSrcRect: PRect;
dwTrans: DWORD) : HResult; stdcall;
function DeleteAttachedSurface(dwFlags: DWORD;
lpDDSAttachedSurface: IDirectDrawSurface3): HResult; stdcall;
function EnumAttachedSurfaces(lpContext: Pointer;
1285,53 → 1311,61
function GetAttachedSurface(var lpDDSCaps: TDDSCaps;
out lplpDDAttachedSurface: IDirectDrawSurface3): HResult; stdcall;
function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
function GetCaps(var lpDDSCaps: TDDSCaps): HResult; stdcall;
function GetCaps (out lpDDSCaps: TDDSCaps) : HResult; stdcall;
function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
function GetColorKey(dwFlags: DWORD; var lpDDColorKey: TDDColorKey): HResult; stdcall;
function GetDC(var lphDC: HDC): HResult; stdcall;
function GetColorKey (dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
HResult; stdcall;
function GetDC (out lphDC: HDC) : HResult; stdcall;
function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
function GetOverlayPosition(var lplX, lplY: Longint): HResult; stdcall;
function GetOverlayPosition (out lplX, lplY: LongInt) : HResult; stdcall;
function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
function GetPixelFormat(var lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
function GetSurfaceDesc(var lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
function Initialize(lpDD: IDirectDraw; const lpDDSurfaceDesc: TDDSurfaceDesc): HResult; stdcall;
function GetPixelFormat (out lpDDPixelFormat: TDDPixelFormat) : HResult; stdcall;
function GetSurfaceDesc (out lpDDSurfaceDesc: TDDSurfaceDesc) : HResult; stdcall;
function Initialize (lpDD: IDirectDraw;
out lpDDSurfaceDesc: TDDSurfaceDesc) : HResult; stdcall;
function IsLost: HResult; stdcall;
function Lock(lpDestRect: PRect; const lpDDSurfaceDesc: TDDSurfaceDesc;
dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
function ReleaseDC(hDC: HDC): HResult; stdcall;
function Restore: HResult; stdcall;
function Lock (lpDestRect: PRect;
out lpDDSurfaceDesc: TDDSurfaceDesc; dwFlags: DWORD;
hEvent: THandle) : HResult; stdcall;
function ReleaseDC (hDC: Windows.HDC) : HResult; stdcall;
function _Restore: HResult; stdcall;
function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
function SetColorKey(dwFlags: DWORD; const lpDDColorKey: TDDColorKey): HResult; stdcall;
function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
function SetColorKey (dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
HResult; stdcall;
function SetOverlayPosition (lX, lY: LongInt) : HResult; stdcall;
function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
function Unlock(lpSurfaceData: Pointer): HResult; stdcall;
function UpdateOverlay(const lpSrcRect: TRect;
lpDDDestSurface: IDirectDrawSurface3; const lpDestRect: TRect;
dwFlags: DWORD; const lpDDOverlayFx: TDDOverlayFX): HResult; stdcall;
function UpdateOverlay (lpSrcRect: PRect;
lpDDDestSurface: IDirectDrawSurface3; lpDestRect: PRect;
dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX) : HResult; stdcall;
function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
function UpdateOverlayZOrder(dwFlags: DWORD;
lpDDSReference: IDirectDrawSurface3): HResult; stdcall;
// IDirectDrawSurface2 methods
function GetDDInterface(out lplpDD: IUnknown): HResult; stdcall;
(*** Added in the v2 interface ***)
function GetDDInterface (out lplpDD: IDirectDraw) : HResult; stdcall;
function PageLock(dwFlags: DWORD): HResult; stdcall;
function PageUnlock(dwFlags: DWORD): HResult; stdcall;
// IDirectDrawSurface3 methods
(*** Added in the V3 interface ***)
function SetSurfaceDesc(const lpddsd: TDDSurfaceDesc; dwFlags: DWORD): HResult; stdcall;
end;
 
{ IDirectDrawSurface4 Interface }
 
(*
* IDirectDrawSurface4 and related interfaces
*)
IDirectDrawSurface4 = interface(IUnknown)
['{0B2B8630-AD35-11D0-8EA6-00609797EA5B}']
// IDirectDrawSurface methods
function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface4): HResult; stdcall;
(*** IDirectDrawSurface methods ***)
function AddAttachedSurface (lpDDSAttachedSurface: IDirectDrawSurface4) :
HResult; stdcall;
function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
function Blt(const lpDestRect: TRect; lpDDSrcSurface: IDirectDrawSurface4;
const lpSrcRect: TRect; dwFlags: DWORD; const lpDDBltFx: TDDBltFX): HResult; stdcall;
function Blt (lpDestRect: PRect;
lpDDSrcSurface: IDirectDrawSurface4; lpSrcRect: PRect;
dwFlags: DWORD; lpDDBltFx: PDDBltFX) : HResult; stdcall;
function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
dwFlags: DWORD): HResult; stdcall;
function BltFast(dwX, dwY: DWORD; lpDDSrcSurface: IDirectDrawSurface4;
const lpSrcRect: TRect; dwTrans: DWORD): HResult; stdcall;
function BltFast (dwX: DWORD; dwY: DWORD;
lpDDSrcSurface: IDirectDrawSurface4; lpSrcRect: PRect;
dwTrans: DWORD) : HResult; stdcall;
function DeleteAttachedSurface(dwFlags: DWORD;
lpDDSAttachedSurface: IDirectDrawSurface4): HResult; stdcall;
function EnumAttachedSurfaces(lpContext: Pointer;
1340,62 → 1374,69
lpfnCallback: TDDEnumSurfacesCallback2): HResult; stdcall;
function Flip(lpDDSurfaceTargetOverride: IDirectDrawSurface4;
dwFlags: DWORD): HResult; stdcall;
function GetAttachedSurface(var lpDDSCaps: TDDSCaps2;
function GetAttachedSurface (const lpDDSCaps: TDDSCaps2;
out lplpDDAttachedSurface: IDirectDrawSurface4): HResult; stdcall;
function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
function GetCaps(var lpDDSCaps: TDDSCaps2): HResult; stdcall;
function GetCaps (out lpDDSCaps: TDDSCaps2) : HResult; stdcall;
function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
function GetColorKey(dwFlags: DWORD; var lpDDColorKey: TDDColorKey): HResult; stdcall;
function GetDC(var lphDC: HDC): HResult; stdcall;
function GetColorKey (dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
HResult; stdcall;
function GetDC (out lphDC: HDC) : HResult; stdcall;
function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
function GetOverlayPosition(var lplX, lplY: Longint): HResult; stdcall;
function GetOverlayPosition (out lplX, lplY: LongInt) : HResult; stdcall;
function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
function GetPixelFormat(var lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
function GetSurfaceDesc(var lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
function Initialize(lpDD: IDirectDraw; const lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
function GetPixelFormat (out lpDDPixelFormat: TDDPixelFormat) : HResult; stdcall;
function GetSurfaceDesc (out lpDDSurfaceDesc: TDDSurfaceDesc2) : HResult; stdcall;
function Initialize (lpDD: IDirectDraw;
out lpDDSurfaceDesc: TDDSurfaceDesc2) : HResult; stdcall;
function IsLost: HResult; stdcall;
function Lock(lpDestRect: PRect; const lpDDSurfaceDesc: TDDSurfaceDesc2;
dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
function ReleaseDC(hDC: HDC): HResult; stdcall;
function Restore: HResult; stdcall;
function Lock (lpDestRect: PRect;
out lpDDSurfaceDesc: TDDSurfaceDesc2; dwFlags: DWORD;
hEvent: THandle) : HResult; stdcall;
function ReleaseDC (hDC: Windows.HDC) : HResult; stdcall;
function _Restore: HResult; stdcall;
function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
function SetColorKey(dwFlags: DWORD; const lpDDColorKey: TDDColorKey): HResult; stdcall;
function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
function SetColorKey (dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
HResult; stdcall;
function SetOverlayPosition (lX, lY: LongInt) : HResult; stdcall;
function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
function Unlock(lpSurfaceData: Pointer): HResult; stdcall;
function UpdateOverlay(const lpSrcRect: TRect; lpDDDestSurface: IDirectDrawSurface4;
const lpDestRect: TRect; dwFlags: DWORD; const lpDDOverlayFx: TDDOverlayFX): HResult; stdcall;
function Unlock (lpRect: PRect) : HResult; stdcall;
function UpdateOverlay (lpSrcRect: PRect;
lpDDDestSurface: IDirectDrawSurface4; lpDestRect: PRect;
dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX) : HResult; stdcall;
function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
function UpdateOverlayZOrder(dwFlags: DWORD; lpDDSReference: IDirectDrawSurface4): HResult; stdcall;
// IDirectDrawSurface2 methods
function UpdateOverlayZOrder (dwFlags: DWORD;
lpDDSReference: IDirectDrawSurface4) : HResult; stdcall;
(*** Added in the v2 interface ***)
function GetDDInterface(out lplpDD: IUnknown): HResult; stdcall;
function PageLock(dwFlags: DWORD): HResult; stdcall;
function PageUnlock(dwFlags: DWORD): HResult; stdcall;
// IDirectDrawSurface3 methods
function SetSurfaceDesc(const lpddsd: TDDSurfaceDesc2; dwFlags: DWORD): HResult; stdcall;
// IDirectDrawSurface4 methods
function SetPrivateData(const guidTag: TGUID; lpData: Pointer;
(*** Added in the V3 interface ***)
function SetSurfaceDesc(const lpddsd2: TDDSurfaceDesc2; dwFlags: DWORD) : HResult; stdcall;
(*** Added in the v4 interface ***)
function SetPrivateData(const guidTag: TGUID; lpData: pointer;
cbSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function GetPrivateData(const guidTag: TGUID; lpData: Pointer;
var cbSize: DWORD): HResult; stdcall;
function GetPrivateData(const guidTag: TGUID; lpBuffer: pointer;
var lpcbBufferSize: DWORD) : HResult; stdcall;
function FreePrivateData(const guidTag: TGUID): HResult; stdcall;
function GetUniquenessValue(var lpValue: DWORD): HResult; stdcall;
function GetUniquenessValue(out lpValue: DWORD) : HResult; stdcall;
function ChangeUniquenessValue: HResult; stdcall;
end;
 
{ IDirectDrawSurface7 Interface }
 
IDirectDrawSurface7 = interface(IUnknown)
['{06675A80-3B9B-11D2-B92F-00609797EA5B}']
// IDirectDrawSurface methods
function AddAttachedSurface(lpDDSAttachedSurface: IDirectDrawSurface7): HResult; stdcall;
['{06675a80-3b9b-11d2-b92f-00609797ea5b}']
(*** IDirectDrawSurface methods ***)
function AddAttachedSurface (lpDDSAttachedSurface: IDirectDrawSurface7) :
HResult; stdcall;
function AddOverlayDirtyRect(const lpRect: TRect): HResult; stdcall;
function Blt(const lpDestRect: TRect; lpDDSrcSurface: IDirectDrawSurface7;
const lpSrcRect: TRect; dwFlags: DWORD; const lpDDBltFx: TDDBltFX): HResult; stdcall;
function Blt (lpDestRect: PRect;
lpDDSrcSurface: IDirectDrawSurface7; lpSrcRect: PRect;
dwFlags: DWORD; lpDDBltFx: PDDBltFX) : HResult; stdcall;
function BltBatch(const lpDDBltBatch: TDDBltBatch; dwCount: DWORD;
dwFlags: DWORD): HResult; stdcall;
function BltFast(dwX, dwY: DWORD; lpDDSrcSurface: IDirectDrawSurface7;
const lpSrcRect: TRect; dwTrans: DWORD): HResult; stdcall;
function BltFast (dwX: DWORD; dwY: DWORD;
lpDDSrcSurface: IDirectDrawSurface7; lpSrcRect: PRect;
dwTrans: DWORD) : HResult; stdcall;
function DeleteAttachedSurface(dwFlags: DWORD;
lpDDSAttachedSurface: IDirectDrawSurface7): HResult; stdcall;
function EnumAttachedSurfaces(lpContext: Pointer;
1404,438 → 1445,2038
lpfnCallback: TDDEnumSurfacesCallback7): HResult; stdcall;
function Flip(lpDDSurfaceTargetOverride: IDirectDrawSurface7;
dwFlags: DWORD): HResult; stdcall;
function GetAttachedSurface(var lpDDSCaps: TDDSCaps2;
function GetAttachedSurface (const lpDDSCaps: TDDSCaps2;
out lplpDDAttachedSurface: IDirectDrawSurface7): HResult; stdcall;
function GetBltStatus(dwFlags: DWORD): HResult; stdcall;
function GetCaps(var lpDDSCaps: TDDSCaps2): HResult; stdcall;
function GetCaps (out lpDDSCaps: TDDSCaps2) : HResult; stdcall;
function GetClipper(out lplpDDClipper: IDirectDrawClipper): HResult; stdcall;
function GetColorKey(dwFlags: DWORD; var lpDDColorKey: TDDColorKey): HResult; stdcall;
function GetDC(var lphDC: HDC): HResult; stdcall;
function GetColorKey (dwFlags: DWORD; out lpDDColorKey: TDDColorKey) :
HResult; stdcall;
function GetDC (out lphDC: HDC) : HResult; stdcall;
function GetFlipStatus(dwFlags: DWORD): HResult; stdcall;
function GetOverlayPosition(var lplX, lplY: Longint): HResult; stdcall;
function GetOverlayPosition (out lplX, lplY: LongInt) : HResult; stdcall;
function GetPalette(out lplpDDPalette: IDirectDrawPalette): HResult; stdcall;
function GetPixelFormat(var lpDDPixelFormat: TDDPixelFormat): HResult; stdcall;
function GetSurfaceDesc(var lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
function Initialize(lpDD: IDirectDraw; const lpDDSurfaceDesc: TDDSurfaceDesc2): HResult; stdcall;
function GetPixelFormat (out lpDDPixelFormat: TDDPixelFormat) : HResult; stdcall;
function GetSurfaceDesc (out lpDDSurfaceDesc: TDDSurfaceDesc2) : HResult; stdcall;
function Initialize (lpDD: IDirectDraw;
out lpDDSurfaceDesc: TDDSurfaceDesc2) : HResult; stdcall;
function IsLost: HResult; stdcall;
function Lock(lpDestRect: PRect; const lpDDSurfaceDesc: TDDSurfaceDesc2;
dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
function ReleaseDC(hDC: HDC): HResult; stdcall;
function Restore: HResult; stdcall;
function Lock (lpDestRect: PRect;
out lpDDSurfaceDesc: TDDSurfaceDesc2; dwFlags: DWORD;
hEvent: THandle) : HResult; stdcall;
function ReleaseDC (hDC: Windows.HDC) : HResult; stdcall;
function _Restore: HResult; stdcall;
function SetClipper(lpDDClipper: IDirectDrawClipper): HResult; stdcall;
function SetColorKey(dwFlags: DWORD; const lpDDColorKey: TDDColorKey): HResult; stdcall;
function SetOverlayPosition(lX, lY: Longint): HResult; stdcall;
function SetColorKey (dwFlags: DWORD; lpDDColorKey: PDDColorKey) :
HResult; stdcall;
function SetOverlayPosition (lX, lY: LongInt) : HResult; stdcall;
function SetPalette(lpDDPalette: IDirectDrawPalette): HResult; stdcall;
function Unlock(lpSurfaceData: Pointer): HResult; stdcall;
function UpdateOverlay(const lpSrcRect: TRect; lpDDDestSurface: IDirectDrawSurface7;
const lpDestRect: TRect; dwFlags: DWORD; const lpDDOverlayFx: TDDOverlayFX): HResult; stdcall;
function Unlock (lpRect: PRect) : HResult; stdcall;
function UpdateOverlay (lpSrcRect: PRect;
lpDDDestSurface: IDirectDrawSurface7; lpDestRect: PRect;
dwFlags: DWORD; lpDDOverlayFx: PDDOverlayFX) : HResult; stdcall;
function UpdateOverlayDisplay(dwFlags: DWORD): HResult; stdcall;
function UpdateOverlayZOrder(dwFlags: DWORD; lpDDSReference: IDirectDrawSurface7): HResult; stdcall;
// IDirectDrawSurface2 methods
function UpdateOverlayZOrder (dwFlags: DWORD;
lpDDSReference: IDirectDrawSurface7) : HResult; stdcall;
(*** Added in the v2 interface ***)
function GetDDInterface(out lplpDD: IUnknown): HResult; stdcall;
function PageLock(dwFlags: DWORD): HResult; stdcall;
function PageUnlock(dwFlags: DWORD): HResult; stdcall;
// IDirectDrawSurface3 methods
function SetSurfaceDesc(const lpddsd: TDDSurfaceDesc2; dwFlags: DWORD): HResult; stdcall;
// IDirectDrawSurface4 methods
function SetPrivateData(const guidTag: TGUID; lpData: Pointer;
(*** Added in the V3 interface ***)
function SetSurfaceDesc(const lpddsd2: TDDSurfaceDesc2; dwFlags: DWORD) : HResult; stdcall;
(*** Added in the v4 interface ***)
function SetPrivateData(const guidTag: TGUID; lpData: pointer;
cbSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function GetPrivateData(const guidTag: TGUID; lpData: Pointer;
var cbSize: DWORD): HResult; stdcall;
function GetPrivateData(const guidTag: TGUID; lpBuffer: pointer;
var lpcbBufferSize: DWORD) : HResult; stdcall;
function FreePrivateData(const guidTag: TGUID): HResult; stdcall;
function GetUniquenessValue(var lpValue: DWORD): HResult; stdcall;
function GetUniquenessValue(out lpValue: DWORD) : HResult; stdcall;
function ChangeUniquenessValue: HResult; stdcall;
// Moved Texture7 methods here
(*** Moved Texture7 methods here ***)
function SetPriority(dwPriority: DWORD): HResult; stdcall;
function GetPriority(var lpdwPriority: DWORD): HResult; stdcall;
function GetPriority(out lpdwPriority: DWORD) : HResult; stdcall;
function SetLOD(dwMaxLOD: DWORD): HResult; stdcall;
function GetLOD(var lpdwMaxLOD: DWORD): HResult; stdcall;
function GetLOD(out lpdwMaxLOD: DWORD) : HResult; stdcall;
end;
 
{ IDirectDrawColorControl Interface }
 
IDirectDrawColorControl = interface(IUnknown)
['{4B9F0EE0-0D7E-11D0-9B06-00A0C903A3B8}']
// IDirectDrawColorControl methods
function GetColorControls(var lpColorControl: TDDColorControl): HResult; stdcall;
function GetColorControls(out lpColorControl: TDDColorControl) : HResult; stdcall;
function SetColorControls(const lpColorControl: TDDColorControl): HResult; stdcall;
end;
 
{ IDirectDrawGammaControl Interface }
 
(*
* IDirectDrawGammaControl
*)
IDirectDrawGammaControl = interface(IUnknown)
['{69C11C3E-B46B-11D1-AD7A-00C04FC29B4E}']
// IDirectDrawGammaControl methods
function GetGammaRamp(dwFlags: DWORD; var lpRampData: TDDGammaRamp): HResult; stdcall;
function SetGammaRamp(dwFlags: DWORD; const lpRampData: TDDGammaRamp): HResult; stdcall;
function GetGammaRamp (dwFlags: DWORD; out lpRampData: TDDGammaRamp)
: HResult; stdcall;
function SetGammaRamp (dwFlags: DWORD; const lpRampData: TDDGammaRamp)
: HResult; stdcall;
end;
 
const
{ Flags for DirectDrawEnumerateEx }
DDENUM_ATTACHEDSECONDARYDEVICES = $00000001;
DDENUM_DETACHEDSECONDARYDEVICES = $00000002;
DDENUM_NONDISPLAYDEVICES = $00000004;
type
IID_IDirectDraw = IDirectDraw;
IID_IDirectDraw2 = IDirectDraw2;
IID_IDirectDraw4 = IDirectDraw4;
IID_IDirectDraw7 = IDirectDraw7;
IID_IDirectDrawSurface = IDirectDrawSurface;
IID_IDirectDrawSurface2 = IDirectDrawSurface2;
IID_IDirectDrawSurface3 = IDirectDrawSurface3;
IID_IDirectDrawSurface4 = IDirectDrawSurface4;
IID_IDirectDrawSurface7 = IDirectDrawSurface7;
 
{ Flags for the IDirectDraw4.GetDeviceIdentifier method }
DDGDI_GETHOSTIDENTIFIER = $00000001;
IID_IDirectDrawPalette = IDirectDrawPalette;
IID_IDirectDrawClipper = IDirectDrawClipper;
IID_IDirectDrawColorControl = IDirectDrawColorControl;
IID_IDirectDrawGammaControl = IDirectDrawGammaControl;
 
{ ddsCaps field is valid. }
const
(*
* ddsCaps field is valid.
*)
DDSD_CAPS = $00000001; // default
 
(*
* dwHeight field is valid.
*)
DDSD_HEIGHT = $00000002;
 
(*
* dwWidth field is valid.
*)
DDSD_WIDTH = $00000004;
 
(*
* lPitch is valid.
*)
DDSD_PITCH = $00000008;
 
(*
* dwBackBufferCount is valid.
*)
DDSD_BACKBUFFERCOUNT = $00000020;
 
(*
* dwZBufferBitDepth is valid. (shouldnt be used in DDSURFACEDESC2)
*)
DDSD_ZBUFFERBITDEPTH = $00000040;
 
(*
* dwAlphaBitDepth is valid.
*)
DDSD_ALPHABITDEPTH = $00000080;
 
(*
* lpSurface is valid.
*)
DDSD_LPSURFACE = $00000800;
 
(*
* ddpfPixelFormat is valid.
*)
DDSD_PIXELFORMAT = $00001000;
 
(*
* ddckCKDestOverlay is valid.
*)
DDSD_CKDESTOVERLAY = $00002000;
 
(*
* ddckCKDestBlt is valid.
*)
DDSD_CKDESTBLT = $00004000;
 
(*
* ddckCKSrcOverlay is valid.
*)
DDSD_CKSRCOVERLAY = $00008000;
 
(*
* ddckCKSrcBlt is valid.
*)
DDSD_CKSRCBLT = $00010000;
 
(*
* dwMipMapCount is valid.
*)
DDSD_MIPMAPCOUNT = $00020000;
 
(*
* dwRefreshRate is valid
*)
DDSD_REFRESHRATE = $00040000;
 
(*
* dwLinearSize is valid
*)
DDSD_LINEARSIZE = $00080000;
 
(*
* dwTextureStage is valid
*)
DDSD_TEXTURESTAGE = $00100000;
DDSD_FVF = $00200000;
DDSD_SRCVBHANDLE = $00400000;
DDSD_ALL = $007ff9ee;
 
{ DirectDraw Driver Capability Flags }
(*
* All input fields are valid.
*)
DDSD_ALL = $001ff9ee;
 
 
(*
* guid field is valid.
*)
DDOSD_GUID = $00000001;
 
(*
* dwCompressionRatio field is valid.
*)
DDOSD_COMPRESSION_RATIO = $00000002;
 
(*
* ddSCaps field is valid.
*)
DDOSD_SCAPS = $00000004;
 
(*
* ddOSCaps field is valid.
*)
DDOSD_OSCAPS = $00000008;
 
(*
* All input fields are valid.
*)
DDOSD_ALL = $0000000f;
 
(*
* The surface's optimized pixelformat is compressed
*)
DDOSDCAPS_OPTCOMPRESSED = $00000001;
 
(*
* The surface's optimized pixelformat is reordered
*)
DDOSDCAPS_OPTREORDERED = $00000002;
 
(*
* The opt surface is a monolithic mipmap
*)
DDOSDCAPS_MONOLITHICMIPMAP = $00000004;
 
(*
* The valid Surf caps:
* DDSCAPS_SYSTEMMEMORY = $00000800;
* DDSCAPS_VIDEOMEMORY = $00004000;
* DDSCAPS_LOCALVIDMEM = $10000000;
* DDSCAPS_NONLOCALVIDMEM = $20000000;
*)
DDOSDCAPS_VALIDSCAPS = $30004800;
 
(*
* The valid OptSurf caps
*)
DDOSDCAPS_VALIDOSCAPS = $00000007;
 
 
(*
* DDCOLORCONTROL
*)
 
(*
* lBrightness field is valid.
*)
DDCOLOR_BRIGHTNESS = $00000001;
 
(*
* lContrast field is valid.
*)
DDCOLOR_CONTRAST = $00000002;
 
(*
* lHue field is valid.
*)
DDCOLOR_HUE = $00000004;
 
(*
* lSaturation field is valid.
*)
DDCOLOR_SATURATION = $00000008;
 
(*
* lSharpness field is valid.
*)
DDCOLOR_SHARPNESS = $00000010;
 
(*
* lGamma field is valid.
*)
DDCOLOR_GAMMA = $00000020;
 
(*
* lColorEnable field is valid.
*)
DDCOLOR_COLORENABLE = $00000040;
 
 
 
(*============================================================================
*
* Direct Draw Capability Flags
*
* These flags are used to describe the capabilities of a given Surface.
* All flags are bit flags.
*
*==========================================================================*)
 
(****************************************************************************
*
* DIRECTDRAWSURFACE CAPABILITY FLAGS
*
****************************************************************************)
(*
* This bit currently has no meaning.
*)
DDSCAPS_RESERVED1 = $00000001;
 
(*
* Indicates that this surface contains alpha-only information.
* (To determine if a surface is RGBA/YUVA, the pixel format must be
* interrogated.)
*)
DDSCAPS_ALPHA = $00000002;
 
(*
* Indicates that this surface is a backbuffer. It is generally
* set by CreateSurface when the DDSCAPS_FLIP capability bit is set.
* It indicates that this surface is THE back buffer of a surface
* flipping structure. DirectDraw supports N surfaces in a
* surface flipping structure. Only the surface that immediately
* precedeces the DDSCAPS_FRONTBUFFER has this capability bit set.
* The other surfaces are identified as back buffers by the presence
* of the DDSCAPS_FLIP capability, their attachment order, and the
* absence of the DDSCAPS_FRONTBUFFER and DDSCAPS_BACKBUFFER
* capabilities. The bit is sent to CreateSurface when a standalone
* back buffer is being created. This surface could be attached to
* a front buffer and/or back buffers to form a flipping surface
* structure after the CreateSurface call. See AddAttachments for
* a detailed description of the behaviors in this case.
*)
DDSCAPS_BACKBUFFER = $00000004;
 
(*
* Indicates a complex surface structure is being described. A
* complex surface structure results in the creation of more than
* one surface. The additional surfaces are attached to the root
* surface. The complex structure can only be destroyed by
* destroying the root.
*)
DDSCAPS_COMPLEX = $00000008;
 
(*
* Indicates that this surface is a part of a surface flipping structure.
* When it is passed to CreateSurface the DDSCAPS_FRONTBUFFER and
* DDSCAP_BACKBUFFER bits are not set. They are set by CreateSurface
* on the resulting creations. The dwBackBufferCount field in the
* TDDSurfaceDesc structure must be set to at least 1 in order for
* the CreateSurface call to succeed. The DDSCAPS_COMPLEX capability
* must always be set with creating multiple surfaces through CreateSurface.
*)
DDSCAPS_FLIP = $00000010;
 
(*
* Indicates that this surface is THE front buffer of a surface flipping
* structure. It is generally set by CreateSurface when the DDSCAPS_FLIP
* capability bit is set.
* If this capability is sent to CreateSurface then a standalonw front buffer
* is created. This surface will not have the DDSCAPS_FLIP capability.
* It can be attached to other back buffers to form a flipping structure.
* See AddAttachments for a detailed description of the behaviors in this
* case.
*)
DDSCAPS_FRONTBUFFER = $00000020;
 
(*
* Indicates that this surface is any offscreen surface that is not an overlay,
* texture, zbuffer, front buffer, back buffer, or alpha surface. It is used
* to identify plain vanilla surfaces.
*)
DDSCAPS_OFFSCREENPLAIN = $00000040;
 
(*
* Indicates that this surface is an overlay. It may or may not be directly visible
* depending on whether or not it is currently being overlayed onto the primary
* surface. DDSCAPS_VISIBLE can be used to determine whether or not it is being
* overlayed at the moment.
*)
DDSCAPS_OVERLAY = $00000080;
 
(*
* Indicates that unique DirectDrawPalette objects can be created and
* attached to this surface.
*)
DDSCAPS_PALETTE = $00000100;
 
(*
* Indicates that this surface is the primary surface. The primary
* surface represents what the user is seeing at the moment.
*)
DDSCAPS_PRIMARYSURFACE = $00000200;
 
(*
* This flag used to be DDSCAPS_PRIMARYSURFACELEFT, which is now
* obsolete.
*)
DDSCAPS_RESERVED3 = $00000400;
(*
* Indicates that this surface is the primary surface for the left eye.
* The primary surface for the left eye represents what the user is seeing
* at the moment with the users left eye. When this surface is created the
* DDSCAPS_PRIMARYSURFACE represents what the user is seeing with the users
* right eye.
*)
DDSCAPS_PRIMARYSURFACELEFT = DDSCAPS_RESERVED3;
 
(*
* Indicates that this surface memory was allocated in system memory
*)
DDSCAPS_SYSTEMMEMORY = $00000800;
 
(*
* Indicates that this surface can be used as a 3D texture. It does not
* indicate whether or not the surface is being used for that purpose.
*)
DDSCAPS_TEXTURE = $00001000;
 
(*
* Indicates that a surface may be a destination for 3D rendering. This
* bit must be set in order to query for a Direct3D Device Interface
* from this surface.
*)
DDSCAPS_3DDEVICE = $00002000;
 
(*
* Indicates that this surface exists in video memory.
*)
DDSCAPS_VIDEOMEMORY = $00004000;
 
(*
* Indicates that changes made to this surface are immediately visible.
* It is always set for the primary surface and is set for overlays while
* they are being overlayed and texture maps while they are being textured.
*)
DDSCAPS_VISIBLE = $00008000;
 
(*
* Indicates that only writes are permitted to the surface. Read accesses
* from the surface may or may not generate a protection fault, but the
* results of a read from this surface will not be meaningful. READ ONLY.
*)
DDSCAPS_WRITEONLY = $00010000;
 
(*
* Indicates that this surface is a z buffer. A z buffer does not contain
* displayable information. Instead it contains bit depth information that is
* used to determine which pixels are visible and which are obscured.
*)
DDSCAPS_ZBUFFER = $00020000;
 
(*
* Indicates surface will have a DC associated long term
*)
DDSCAPS_OWNDC = $00040000;
 
(*
* Indicates surface should be able to receive live video
*)
DDSCAPS_LIVEVIDEO = $00080000;
 
(*
* Indicates surface should be able to have a stream decompressed
* to it by the hardware.
*)
DDSCAPS_HWCODEC = $00100000;
 
(*
* Surface is a ModeX surface.
*
*)
DDSCAPS_MODEX = $00200000;
 
(*
* Indicates surface is one level of a mip-map. This surface will
* be attached to other DDSCAPS_MIPMAP surfaces to form the mip-map.
* This can be done explicitly, by creating a number of surfaces and
* attaching them with AddAttachedSurface or by implicitly by CreateSurface.
* If this bit is set then DDSCAPS_TEXTURE must also be set.
*)
DDSCAPS_MIPMAP = $00400000;
 
(*
* This bit is reserved. It should not be specified.
*)
DDSCAPS_RESERVED2 = $00800000;
 
(*
* Indicates that memory for the surface is not allocated until the surface
* is loaded (via the Direct3D texture Load() function).
*)
DDSCAPS_ALLOCONLOAD = $04000000;
 
(*
* Indicates that the surface will recieve data from a video port.
*)
DDSCAPS_VIDEOPORT = $08000000;
 
(*
* Indicates that a video memory surface is resident in true, local video
* memory rather than non-local video memory. If this flag is specified then
* so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with
* DDSCAPS_NONLOCALVIDMEM.
*)
DDSCAPS_LOCALVIDMEM = $10000000;
 
(*
* Indicates that a video memory surface is resident in non-local video
* memory rather than true, local video memory. If this flag is specified
* then so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with
* DDSCAPS_LOCALVIDMEM.
*)
DDSCAPS_NONLOCALVIDMEM = $20000000;
 
(*
* Indicates that this surface is a standard VGA mode surface, and not a
* ModeX surface. (This flag will never be set in combination with the
* DDSCAPS_MODEX flag).
*)
DDSCAPS_STANDARDVGAMODE = $40000000;
 
(*
* Indicates that this surface will be an optimized surface. This flag is
* currently only valid in conjunction with the DDSCAPS_TEXTURE flag. The surface
* will be created without any underlying video memory until loaded.
*)
DDSCAPS_OPTIMIZED = $80000000;
 
 
 
(*
* Indicates that this surface will receive data from a video port using
* the de-interlacing hardware. This allows the driver to allocate memory
* for any extra buffers that may be required. The DDSCAPS_VIDEOPORT and
* DDSCAPS_OVERLAY flags must also be set.
*)
DDSCAPS2_HARDWAREDEINTERLACE = $00000002;
 
(*
* Indicates to the driver that this surface will be locked very frequently
* (for procedural textures, dynamic lightmaps, etc). Surfaces with this cap
* set must also have DDSCAPS_TEXTURE. This cap cannot be used with
* DDSCAPS2_HINTSTATIC and DDSCAPS2_OPAQUE.
*)
DDSCAPS2_HINTDYNAMIC = $00000004;
 
(*
* Indicates to the driver that this surface can be re-ordered/retiled on
* load. This operation will not change the size of the texture. It is
* relatively fast and symmetrical, since the application may lock these
* bits (although it will take a performance hit when doing so). Surfaces
* with this cap set must also have DDSCAPS_TEXTURE. This cap cannot be
* used with DDSCAPS2_HINTDYNAMIC and DDSCAPS2_OPAQUE.
*)
DDSCAPS2_HINTSTATIC = $00000008;
 
(*
* Indicates that the client would like this texture surface to be managed by the
* DirectDraw/Direct3D runtime. Surfaces with this cap set must also have
* DDSCAPS_TEXTURE and DDSCAPS_SYSTEMMEMORY.
*)
DDSCAPS2_TEXTUREMANAGE = $00000010;
 
(*
* These bits are reserved for internal use *)
DDSCAPS2_RESERVED1 = $00000020;
DDSCAPS2_RESERVED2 = $00000040;
 
(*
* Indicates to the driver that this surface will never be locked again.
* The driver is free to optimize this surface via retiling and actual compression.
* All calls to Lock() or Blts from this surface will fail. Surfaces with this
* cap set must also have DDSCAPS_TEXTURE. This cap cannot be used with
* DDSCAPS2_HINTDYNAMIC and DDSCAPS2_HINTSTATIC.
*)
DDSCAPS2_OPAQUE = $00000080;
 
(*
* Applications should set this bit at CreateSurface time to indicate that they
* intend to use antialiasing. Only valid if DDSCAPS_3DDEVICE is also set.
*)
DDSCAPS2_HINTANTIALIASING = $00000100;
 
(*
* This flag is used at CreateSurface time to indicate that this set of
* surfaces is a cubic environment map
*)
DDSCAPS2_CUBEMAP = $00000200;
 
(*
* These flags preform two functions:
* - At CreateSurface time, they define which of the six cube faces are
* required by the application.
* - After creation, each face in the cubemap will have exactly one of these
* bits set.
*)
DDSCAPS2_CUBEMAP_POSITIVEX = $00000400;
DDSCAPS2_CUBEMAP_NEGATIVEX = $00000800;
DDSCAPS2_CUBEMAP_POSITIVEY = $00001000;
DDSCAPS2_CUBEMAP_NEGATIVEY = $00002000;
DDSCAPS2_CUBEMAP_POSITIVEZ = $00004000;
DDSCAPS2_CUBEMAP_NEGATIVEZ = $00008000;
 
(*
* This macro may be used to specify all faces of a cube map at CreateSurface time
*)
DDSCAPS2_CUBEMAP_ALLFACES = ( DDSCAPS2_CUBEMAP_POSITIVEX or
DDSCAPS2_CUBEMAP_NEGATIVEX or
DDSCAPS2_CUBEMAP_POSITIVEY or
DDSCAPS2_CUBEMAP_NEGATIVEY or
DDSCAPS2_CUBEMAP_POSITIVEZ or
DDSCAPS2_CUBEMAP_NEGATIVEZ );
 
 
(*
* This flag is an additional flag which is present on mipmap sublevels from DX7 onwards
* It enables easier use of GetAttachedSurface rather than EnumAttachedSurfaces for surface
* constructs such as Cube Maps, wherein there are more than one mipmap surface attached
* to the root surface.
* This caps bit is ignored by CreateSurface
*)
DDSCAPS2_MIPMAPSUBLEVEL = $00010000;
 
(* This flag indicates that the texture should be managed by D3D only *)
DDSCAPS2_D3DTEXTUREMANAGE = $00020000;
 
(* This flag indicates that the managed surface can be safely lost *)
DDSCAPS2_DONOTPERSIST = $00040000;
 
(* indicates that this surface is part of a stereo flipping chain *)
DDSCAPS2_STEREOSURFACELEFT = $00080000;
 
 
 
(****************************************************************************
*
* DIRECTDRAW DRIVER CAPABILITY FLAGS
*
****************************************************************************)
 
(*
* Display hardware has 3D acceleration.
*)
DDCAPS_3D = $00000001;
 
(*
* Indicates that DirectDraw will support only dest rectangles that are aligned
* on DIRECTDRAWCAPS.dwAlignBoundaryDest boundaries of the surface, respectively.
* READ ONLY.
*)
DDCAPS_ALIGNBOUNDARYDEST = $00000002;
 
(*
* Indicates that DirectDraw will support only source rectangles whose sizes in
* BYTEs are DIRECTDRAWCAPS.dwAlignSizeDest multiples, respectively. READ ONLY.
*)
DDCAPS_ALIGNSIZEDEST = $00000004;
(*
* Indicates that DirectDraw will support only source rectangles that are aligned
* on DIRECTDRAWCAPS.dwAlignBoundarySrc boundaries of the surface, respectively.
* READ ONLY.
*)
DDCAPS_ALIGNBOUNDARYSRC = $00000008;
 
(*
* Indicates that DirectDraw will support only source rectangles whose sizes in
* BYTEs are DIRECTDRAWCAPS.dwAlignSizeSrc multiples, respectively. READ ONLY.
*)
DDCAPS_ALIGNSIZESRC = $00000010;
 
(*
* Indicates that DirectDraw will create video memory surfaces that have a stride
* alignment equal to DIRECTDRAWCAPS.dwAlignStride. READ ONLY.
*)
DDCAPS_ALIGNSTRIDE = $00000020;
 
(*
* Display hardware is capable of blt operations.
*)
DDCAPS_BLT = $00000040;
 
(*
* Display hardware is capable of asynchronous blt operations.
*)
DDCAPS_BLTQUEUE = $00000080;
 
(*
* Display hardware is capable of color space conversions during the blt operation.
*)
DDCAPS_BLTFOURCC = $00000100;
 
(*
* Display hardware is capable of stretching during blt operations.
*)
DDCAPS_BLTSTRETCH = $00000200;
 
(*
* Display hardware is shared with GDI.
*)
DDCAPS_GDI = $00000400;
 
(*
* Display hardware can overlay.
*)
DDCAPS_OVERLAY = $00000800;
 
(*
* Set if display hardware supports overlays but can not clip them.
*)
DDCAPS_OVERLAYCANTCLIP = $00001000;
 
(*
* Indicates that overlay hardware is capable of color space conversions during
* the overlay operation.
*)
DDCAPS_OVERLAYFOURCC = $00002000;
 
(*
* Indicates that stretching can be done by the overlay hardware.
*)
DDCAPS_OVERLAYSTRETCH = $00004000;
 
(*
* Indicates that unique DirectDrawPalettes can be created for DirectDrawSurfaces
* other than the primary surface.
*)
DDCAPS_PALETTE = $00008000;
 
(*
* Indicates that palette changes can be syncd with the veritcal refresh.
*)
DDCAPS_PALETTEVSYNC = $00010000;
 
(*
* Display hardware can return the current scan line.
*)
DDCAPS_READSCANLINE = $00020000;
 
(*
* Display hardware has stereo vision capabilities. DDSCAPS_PRIMARYSURFACELEFT
* can be created.
*)
DDCAPS_STEREOVIEW = $00040000;
 
(*
* Display hardware is capable of generating a vertical blank interrupt.
*)
DDCAPS_VBI = $00080000;
 
(*
* Supports the use of z buffers with blt operations.
*)
DDCAPS_ZBLTS = $00100000;
 
(*
* Supports Z Ordering of overlays.
*)
DDCAPS_ZOVERLAYS = $00200000;
 
(*
* Supports color key
*)
DDCAPS_COLORKEY = $00400000;
 
(*
* Supports alpha surfaces
*)
DDCAPS_ALPHA = $00800000;
 
(*
* colorkey is hardware assisted(DDCAPS_COLORKEY will also be set)
*)
DDCAPS_COLORKEYHWASSIST = $01000000;
 
(*
* no hardware support at all
*)
DDCAPS_NOHARDWARE = $02000000;
 
(*
* Display hardware is capable of color fill with bltter
*)
DDCAPS_BLTCOLORFILL = $04000000;
 
(*
* Display hardware is bank switched, and potentially very slow at
* random access to VRAM.
*)
DDCAPS_BANKSWITCHED = $08000000;
 
(*
* Display hardware is capable of depth filling Z-buffers with bltter
*)
DDCAPS_BLTDEPTHFILL = $10000000;
 
(*
* Display hardware is capable of clipping while bltting.
*)
DDCAPS_CANCLIP = $20000000;
 
(*
* Display hardware is capable of clipping while stretch bltting.
*)
DDCAPS_CANCLIPSTRETCHED = $40000000;
 
(*
* Display hardware is capable of bltting to or from system memory
*)
DDCAPS_CANBLTSYSMEM = $80000000;
 
{ More DirectDraw Driver Capability Flags (dwCaps2) }
 
(****************************************************************************
*
* MORE DIRECTDRAW DRIVER CAPABILITY FLAGS (dwCaps2)
*
****************************************************************************)
 
(*
* Display hardware is certified
*)
DDCAPS2_CERTIFIED = $00000001;
 
(*
* Driver cannot interleave 2D operations (lock and blt) to surfaces with
* Direct3D rendering operations between calls to BeginScene() and EndScene()
*)
DDCAPS2_NO2DDURING3DSCENE = $00000002;
 
(*
* Display hardware contains a video port
*)
DDCAPS2_VIDEOPORT = $00000004;
 
(*
* The overlay can be automatically flipped according to the video port
* VSYNCs, providing automatic doubled buffered display of video port
* data using an overlay
*)
DDCAPS2_AUTOFLIPOVERLAY = $00000008;
 
(*
* Overlay can display each field of interlaced data individually while
* it is interleaved in memory without causing jittery artifacts.
*)
DDCAPS2_CANBOBINTERLEAVED = $00000010;
 
(*
* Overlay can display each field of interlaced data individually while
* it is not interleaved in memory without causing jittery artifacts.
*)
DDCAPS2_CANBOBNONINTERLEAVED = $00000020;
 
(*
* The overlay surface contains color controls (brightness, sharpness, etc.)
*)
DDCAPS2_COLORCONTROLOVERLAY = $00000040;
 
(*
* The primary surface contains color controls (gamma, etc.)
*)
DDCAPS2_COLORCONTROLPRIMARY = $00000080;
 
(*
* RGBZ -> RGB supported for 16:16 RGB:Z
*)
DDCAPS2_CANDROPZ16BIT = $00000100;
 
(*
* Driver supports non-local video memory.
*)
DDCAPS2_NONLOCALVIDMEM = $00000200;
 
(*
* Dirver supports non-local video memory but has different capabilities for
* non-local video memory surfaces. If this bit is set then so must
* DDCAPS2_NONLOCALVIDMEM.
*)
DDCAPS2_NONLOCALVIDMEMCAPS = $00000400;
 
(*
* Driver neither requires nor prefers surfaces to be pagelocked when performing
* blts involving system memory surfaces
*)
DDCAPS2_NOPAGELOCKREQUIRED = $00000800;
 
(*
* Driver can create surfaces which are wider than the primary surface
*)
DDCAPS2_WIDESURFACES = $00001000;
 
(*
* Driver supports bob without using a video port by handling the
* DDFLIP_ODD and DDFLIP_EVEN flags specified in Flip.
*)
DDCAPS2_CANFLIPODDEVEN = $00002000;
 
(*
* Driver supports bob using hardware
*)
DDCAPS2_CANBOBHARDWARE = $00004000;
 
(*
* Driver supports bltting any FOURCC surface to another surface of the same FOURCC
*)
DDCAPS2_COPYFOURCC = $00008000;
DDCAPS2_PRIMARYGAMMA = $00020000;
DDCAPS2_CANRENDERWINDOWED = $00080000;
DDCAPS2_CANCALIBRATEGAMMA = $00100000;
DDCAPS2_FLIPINTERVAL = $00200000;
DDCAPS2_FLIPNOVSYNC = $00400000;
DDCAPS2_CANMANAGETEXTURE = $00800000;
DDCAPS2_TEXMANINNONLOCALVIDMEM = $01000000;
DDCAPS2_STEREO = $02000000;
DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL = $04000000;
 
{ DirectDrawSurface Capability Flags }
 
DDSCAPS_RESERVED1 = $00000001; { DDSCAPS_3D }
DDSCAPS_ALPHA = $00000002;
DDSCAPS_BACKBUFFER = $00000004;
DDSCAPS_COMPLEX = $00000008;
DDSCAPS_FLIP = $00000010;
DDSCAPS_FRONTBUFFER = $00000020;
DDSCAPS_OFFSCREENPLAIN = $00000040;
DDSCAPS_OVERLAY = $00000080;
DDSCAPS_PALETTE = $00000100;
DDSCAPS_PRIMARYSURFACE = $00000200;
DDSCAPS_RESERVED3 = $00000400; { DDSCAPS_PRIMARYSURFACELEFT }
DDSCAPS_SYSTEMMEMORY = $00000800;
DDSCAPS_TEXTURE = $00001000;
DDSCAPS_3DDEVICE = $00002000;
DDSCAPS_VIDEOMEMORY = $00004000;
DDSCAPS_VISIBLE = $00008000;
DDSCAPS_WRITEONLY = $00010000;
DDSCAPS_ZBUFFER = $00020000;
DDSCAPS_OWNDC = $00040000;
DDSCAPS_LIVEVIDEO = $00080000;
DDSCAPS_HWCODEC = $00100000;
DDSCAPS_MODEX = $00200000;
DDSCAPS_MIPMAP = $00400000;
DDSCAPS_RESERVED2 = $00800000;
DDSCAPS_ALLOCONLOAD = $04000000;
DDSCAPS_VIDEOPORT = $08000000;
DDSCAPS_LOCALVIDMEM = $10000000;
DDSCAPS_NONLOCALVIDMEM = $20000000;
DDSCAPS_STANDARDVGAMODE = $40000000;
DDSCAPS_OPTIMIZED = $80000000;
(*
* Driver supports loadable gamma ramps for the primary surface
*)
DDCAPS2_PRIMARYGAMMA = $00020000;
 
{ DirectDrawSurface Capability Flags 2 }
(*
* Driver can render in windowed mode.
*)
DDCAPS2_CANRENDERWINDOWED = $00080000;
 
DDSCAPS2_HARDWAREDEINTERLACE = $00000002;
DDSCAPS2_HINTDYNAMIC = $00000004;
DDSCAPS2_HINTSTATIC = $00000008;
DDSCAPS2_TEXTUREMANAGE = $00000010;
DDSCAPS2_RESERVED1 = $00000020;
DDSCAPS2_RESERVED2 = $00000040;
DDSCAPS2_OPAQUE = $00000080;
DDSCAPS2_HINTANTIALIASING = $00000100;
DDSCAPS2_CUBEMAP = $00000200;
DDSCAPS2_CUBEMAP_POSITIVEX = $00000400;
DDSCAPS2_CUBEMAP_NEGATIVEX = $00000800;
DDSCAPS2_CUBEMAP_POSITIVEY = $00001000;
DDSCAPS2_CUBEMAP_NEGATIVEY = $00002000;
DDSCAPS2_CUBEMAP_POSITIVEZ = $00004000;
DDSCAPS2_CUBEMAP_NEGATIVEZ = $00008000;
(*
* A calibrator is available to adjust the gamma ramp according to the
* physical display properties so that the result will be identical on
* all calibrated systems.
*)
DDCAPS2_CANCALIBRATEGAMMA = $00100000;
 
DDSCAPS2_CUBEMAP_ALLFACES =
DDSCAPS2_CUBEMAP_POSITIVEX or DDSCAPS2_CUBEMAP_NEGATIVEX or
DDSCAPS2_CUBEMAP_POSITIVEY or DDSCAPS2_CUBEMAP_NEGATIVEY or
DDSCAPS2_CUBEMAP_POSITIVEZ or DDSCAPS2_CUBEMAP_NEGATIVEZ;
(*
* Indicates that the driver will respond to DDFLIP_INTERVALn flags
*)
DDCAPS2_FLIPINTERVAL = $00200000;
 
DDSCAPS2_MIPMAPSUBLEVEL = $00010000;
DDSCAPS2_D3DTEXTUREMANAGE = $00020000;
DDSCAPS2_DONOTPERSIST = $00040000;
DDSCAPS2_STEREOSURFACELEFT = $00080000;
(*
* Indicates that the driver will respond to DDFLIP_NOVSYNC
*)
DDCAPS2_FLIPNOVSYNC = $00400000;
 
{ TDDOptSurfaceDesc flags }
(*
* Driver supports management of video memory, if this flag is ON,
* driver manages the texture if requested with DDSCAPS2_TEXTUREMANAGE on
* DirectX manages the texture if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on
*)
DDCAPS2_CANMANAGETEXTURE = $00800000;
 
DDOSD_GUID = $00000001;
DDOSD_COMPRESSION_RATIO = $00000002;
DDOSD_SCAPS = $00000004;
DDOSD_OSCAPS = $00000008;
DDOSD_ALL = $0000000F;
(*
* The Direct3D texture manager uses this cap to decide whether to put managed
* surfaces in non-local video memory. If the cap is set, the texture manager will
* put managed surfaces in non-local vidmem. Drivers that cannot texture from
* local vidmem SHOULD NOT set this cap.
*)
DDCAPS2_TEXMANINNONLOCALVIDMEM = $01000000;
 
{ ddOSCaps field is valid. }
(*
* Indicates that the driver supports DX7 type of stereo in at least one mode (which may
* not necessarily be the current mode). Applications should use IDirectDraw7 (or higher)
* ::EnumDisplayModes and check the DDSURFACEDESC.ddsCaps.dwCaps2 field for the presence of
* DDSCAPS2_STEREOSURFACELEFT to check if a particular mode supports stereo. The application
* can also use IDirectDraw7(or higher)::GetDisplayMode to check the current mode.
*)
DDCAPS2_STEREO = $02000000;
 
DDOSDCAPS_OPTCOMPRESSED = $00000001;
DDOSDCAPS_OPTREORDERED = $00000002;
DDOSDCAPS_MONOLITHICMIPMAP = $00000004;
DDOSDCAPS_VALIDSCAPS = $30004800;
DDOSDCAPS_VALIDOSCAPS = $00000007;
(*
* This caps bit is intended for internal DirectDraw use.
* -It is only valid if DDCAPS2_NONLOCALVIDMEMCAPS is set.
* -If this bit is set, then DDCAPS_CANBLTSYSMEM MUST be set by the driver (and
* all the assoicated system memory blt caps must be correct).
* -It implies that the system->video blt caps in DDCAPS also apply to system to
* nonlocal blts. I.e. the dwSVBCaps, dwSVBCKeyCaps, dwSVBFXCaps and dwSVBRops
* members of DDCAPS (DDCORECAPS) are filled in correctly.
* -Any blt from system to nonlocal memory that matches these caps bits will
* be passed to the driver.
*
* NOTE: This is intended to enable the driver itself to do efficient reordering
* of textures. This is NOT meant to imply that hardware can write into AGP memory.
* This operation is not currently supported.
*)
DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL = $04000000;
 
{ DirectDraw FX Alpha Capability Flags }
(****************************************************************************
*
* DIRECTDRAW FX ALPHA CAPABILITY FLAGS
*
****************************************************************************)
 
(*
* Supports alpha blending around the edge of a source color keyed surface.
* For Blt.
*)
DDFXALPHACAPS_BLTALPHAEDGEBLEND = $00000001;
 
(*
* Supports alpha information in the pixel format. The bit depth of alpha
* information in the pixel format can be 1,2,4, or 8. The alpha value becomes
* more opaque as the alpha value increases. (0 is transparent.)
* For Blt.
*)
DDFXALPHACAPS_BLTALPHAPIXELS = $00000002;
 
(*
* Supports alpha information in the pixel format. The bit depth of alpha
* information in the pixel format can be 1,2,4, or 8. The alpha value
* becomes more transparent as the alpha value increases. (0 is opaque.)
* This flag can only be set if DDCAPS_ALPHA is set.
* For Blt.
*)
DDFXALPHACAPS_BLTALPHAPIXELSNEG = $00000004;
 
(*
* Supports alpha only surfaces. The bit depth of an alpha only surface can be
* 1,2,4, or 8. The alpha value becomes more opaque as the alpha value increases.
* (0 is transparent.)
* For Blt.
*)
DDFXALPHACAPS_BLTALPHASURFACES = $00000008;
 
(*
* The depth of the alpha channel data can range can be 1,2,4, or 8.
* The NEG suffix indicates that this alpha channel becomes more transparent
* as the alpha value increases. (0 is opaque.) This flag can only be set if
* DDCAPS_ALPHA is set.
* For Blt.
*)
DDFXALPHACAPS_BLTALPHASURFACESNEG = $00000010;
 
(*
* Supports alpha blending around the edge of a source color keyed surface.
* For Overlays.
*)
DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND = $00000020;
 
(*
* Supports alpha information in the pixel format. The bit depth of alpha
* information in the pixel format can be 1,2,4, or 8. The alpha value becomes
* more opaque as the alpha value increases. (0 is transparent.)
* For Overlays.
*)
DDFXALPHACAPS_OVERLAYALPHAPIXELS = $00000040;
 
(*
* Supports alpha information in the pixel format. The bit depth of alpha
* information in the pixel format can be 1,2,4, or 8. The alpha value
* becomes more transparent as the alpha value increases. (0 is opaque.)
* This flag can only be set if DDCAPS_ALPHA is set.
* For Overlays.
*)
DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG = $00000080;
 
(*
* Supports alpha only surfaces. The bit depth of an alpha only surface can be
* 1,2,4, or 8. The alpha value becomes more opaque as the alpha value increases.
* (0 is transparent.)
* For Overlays.
*)
DDFXALPHACAPS_OVERLAYALPHASURFACES = $00000100;
 
(*
* The depth of the alpha channel data can range can be 1,2,4, or 8.
* The NEG suffix indicates that this alpha channel becomes more transparent
* as the alpha value increases. (0 is opaque.) This flag can only be set if
* DDCAPS_ALPHA is set.
* For Overlays.
*)
DDFXALPHACAPS_OVERLAYALPHASURFACESNEG = $00000200;
 
{ DirectDraw FX Capability Flags }
(****************************************************************************
*
* DIRECTDRAW FX CAPABILITY FLAGS
*
****************************************************************************)
 
(*
* Uses arithmetic operations to stretch and shrink surfaces during blt
* rather than pixel doubling techniques. Along the Y axis.
*)
DDFXCAPS_BLTARITHSTRETCHY = $00000020;
 
(*
* Uses arithmetic operations to stretch during blt
* rather than pixel doubling techniques. Along the Y axis. Only
* works for x1, x2, etc.
*)
DDFXCAPS_BLTARITHSTRETCHYN = $00000010;
 
(*
* Supports mirroring left to right in blt.
*)
DDFXCAPS_BLTMIRRORLEFTRIGHT = $00000040;
 
(*
* Supports mirroring top to bottom in blt.
*)
DDFXCAPS_BLTMIRRORUPDOWN = $00000080;
 
(*
* Supports arbitrary rotation for blts.
*)
DDFXCAPS_BLTROTATION = $00000100;
 
(*
* Supports 90 degree rotations for blts.
*)
DDFXCAPS_BLTROTATION90 = $00000200;
 
(*
* DirectDraw supports arbitrary shrinking of a surface along the
* x axis (horizontal direction) for blts.
*)
DDFXCAPS_BLTSHRINKX = $00000400;
 
(*
* DirectDraw supports integer shrinking (1x,2x,) of a surface
* along the x axis (horizontal direction) for blts.
*)
DDFXCAPS_BLTSHRINKXN = $00000800;
 
(*
* DirectDraw supports arbitrary shrinking of a surface along the
* y axis (horizontal direction) for blts.
*)
DDFXCAPS_BLTSHRINKY = $00001000;
 
(*
* DirectDraw supports integer shrinking (1x,2x,) of a surface
* along the y axis (vertical direction) for blts.
*)
DDFXCAPS_BLTSHRINKYN = $00002000;
 
(*
* DirectDraw supports arbitrary stretching of a surface along the
* x axis (horizontal direction) for blts.
*)
DDFXCAPS_BLTSTRETCHX = $00004000;
 
(*
* DirectDraw supports integer stretching (1x,2x,) of a surface
* along the x axis (horizontal direction) for blts.
*)
DDFXCAPS_BLTSTRETCHXN = $00008000;
 
(*
* DirectDraw supports arbitrary stretching of a surface along the
* y axis (horizontal direction) for blts.
*)
DDFXCAPS_BLTSTRETCHY = $00010000;
 
(*
* DirectDraw supports integer stretching (1x,2x,) of a surface
* along the y axis (vertical direction) for blts.
*)
DDFXCAPS_BLTSTRETCHYN = $00020000;
 
(*
* Uses arithmetic operations to stretch and shrink surfaces during
* overlay rather than pixel doubling techniques. Along the Y axis
* for overlays.
*)
DDFXCAPS_OVERLAYARITHSTRETCHY = $00040000;
 
(*
* Uses arithmetic operations to stretch surfaces during
* overlay rather than pixel doubling techniques. Along the Y axis
* for overlays. Only works for x1, x2, etc.
*)
DDFXCAPS_OVERLAYARITHSTRETCHYN = $00000008;
 
(*
* DirectDraw supports arbitrary shrinking of a surface along the
* x axis (horizontal direction) for overlays.
*)
DDFXCAPS_OVERLAYSHRINKX = $00080000;
 
(*
* DirectDraw supports integer shrinking (1x,2x,) of a surface
* along the x axis (horizontal direction) for overlays.
*)
DDFXCAPS_OVERLAYSHRINKXN = $00100000;
 
(*
* DirectDraw supports arbitrary shrinking of a surface along the
* y axis (horizontal direction) for overlays.
*)
DDFXCAPS_OVERLAYSHRINKY = $00200000;
 
(*
* DirectDraw supports integer shrinking (1x,2x,) of a surface
* along the y axis (vertical direction) for overlays.
*)
DDFXCAPS_OVERLAYSHRINKYN = $00400000;
 
(*
* DirectDraw supports arbitrary stretching of a surface along the
* x axis (horizontal direction) for overlays.
*)
DDFXCAPS_OVERLAYSTRETCHX = $00800000;
 
(*
* DirectDraw supports integer stretching (1x,2x,) of a surface
* along the x axis (horizontal direction) for overlays.
*)
DDFXCAPS_OVERLAYSTRETCHXN = $01000000;
 
(*
* DirectDraw supports arbitrary stretching of a surface along the
* y axis (horizontal direction) for overlays.
*)
DDFXCAPS_OVERLAYSTRETCHY = $02000000;
 
(*
* DirectDraw supports integer stretching (1x,2x,) of a surface
* along the y axis (vertical direction) for overlays.
*)
DDFXCAPS_OVERLAYSTRETCHYN = $04000000;
 
(*
* DirectDraw supports mirroring of overlays across the vertical axis
*)
DDFXCAPS_OVERLAYMIRRORLEFTRIGHT = $08000000;
 
(*
* DirectDraw supports mirroring of overlays across the horizontal axis
*)
DDFXCAPS_OVERLAYMIRRORUPDOWN = $10000000;
 
(*
* Driver can do alpha blending for blits.
*)
DDFXCAPS_BLTALPHA = $00000001;
 
(*
* Driver can do geometric transformations (or warps) for blits.
*)
DDFXCAPS_BLTTRANSFORM = $00000002;
 
(*
* Driver can do surface-reconstruction filtering for warped blits.
*)
DDFXCAPS_BLTFILTER = DDFXCAPS_BLTARITHSTRETCHY;
 
(*
* Driver can do alpha blending for overlays.
*)
DDFXCAPS_OVERLAYALPHA = $00000004;
 
(*
* Driver can do geometric transformations (or warps) for overlays.
*)
DDFXCAPS_OVERLAYTRANSFORM = $20000000;
 
(*
* Driver can do surface-reconstruction filtering for warped overlays.
*)
DDFXCAPS_OVERLAYFILTER = DDFXCAPS_OVERLAYARITHSTRETCHY;
 
{ DirectDraw Stereo View Capabilities }
(****************************************************************************
*
* DIRECTDRAW STEREO VIEW CAPABILITIES
*
****************************************************************************)
 
(*
* This flag used to be DDSVCAPS_ENIGMA, which is now obsolete
* The stereo view is accomplished via enigma encoding.
*)
DDSVCAPS_RESERVED1 = $00000001;
DDSVCAPS_ENIGMA = DDSVCAPS_RESERVED1;
 
(*
* This flag used to be DDSVCAPS_FLICKER, which is now obsolete
* The stereo view is accomplished via high frequency flickering.
*)
DDSVCAPS_RESERVED2 = $00000002;
DDSVCAPS_FLICKER = DDSVCAPS_RESERVED2;
 
(*
* This flag used to be DDSVCAPS_REDBLUE, which is now obsolete
* The stereo view is accomplished via red and blue filters applied
* to the left and right eyes. All images must adapt their colorspaces
* for this process.
*)
DDSVCAPS_RESERVED3 = $00000004;
DDSVCAPS_REDBLUE = DDSVCAPS_RESERVED3;
 
(*
* This flag used to be DDSVCAPS_SPLIT, which is now obsolete
* The stereo view is accomplished with split screen technology.
*)
DDSVCAPS_RESERVED4 = $00000008;
DDSVCAPS_SPLIT = DDSVCAPS_RESERVED4;
 
(*
* The stereo view is accomplished with switching technology
*)
DDSVCAPS_STEREOSEQUENTIAL = $00000010;
 
{ DirectDrawPalette Capabilities }
(****************************************************************************
*
* DIRECTDRAWPALETTE CAPABILITIES
*
****************************************************************************)
 
(*
* Index is 4 bits. There are sixteen color entries in the palette table.
*)
DDPCAPS_4BIT = $00000001;
 
(*
* Index is onto a 8 bit color index. This field is only valid with the
* DDPCAPS_1BIT, DDPCAPS_2BIT or DDPCAPS_4BIT capability and the target
* surface is in 8bpp. Each color entry is one byte long and is an index
* into destination surface's 8bpp palette.
*)
DDPCAPS_8BITENTRIES = $00000002;
 
(*
* Index is 8 bits. There are 256 color entries in the palette table.
*)
DDPCAPS_8BIT = $00000004;
 
(*
* Indicates that this DIRECTDRAWPALETTE should use the palette color array
* passed into the lpDDColorArray parameter to initialize the DIRECTDRAWPALETTE
* object.
* This flag is obsolete. DirectDraw always initializes the color array from
* the lpDDColorArray parameter. The definition remains for source-level
* compatibility.
*)
DDPCAPS_INITIALIZE = $00000008;
 
(*
* This palette is the one attached to the primary surface. Changing this
* table has immediate effect on the display unless DDPSETPAL_VSYNC is specified
* and supported.
*)
DDPCAPS_PRIMARYSURFACE = $00000010;
 
(*
* This palette is the one attached to the primary surface left. Changing
* this table has immediate effect on the display for the left eye unless
* DDPSETPAL_VSYNC is specified and supported.
*)
DDPCAPS_PRIMARYSURFACELEFT = $00000020;
 
(*
* This palette can have all 256 entries defined
*)
DDPCAPS_ALLOW256 = $00000040;
 
(*
* This palette can have modifications to it synced with the monitors
* refresh rate.
*)
DDPCAPS_VSYNC = $00000080;
 
(*
* Index is 1 bit. There are two color entries in the palette table.
*)
DDPCAPS_1BIT = $00000100;
 
(*
* Index is 2 bit. There are four color entries in the palette table.
*)
DDPCAPS_2BIT = $00000200;
 
(*
* The peFlags member of PALETTEENTRY denotes an 8 bit alpha value
*)
DDPCAPS_ALPHA = $00000400;
 
{ DirectDraw BitDepth Constants }
(****************************************************************************
*
* DIRECTDRAWPALETTE SETENTRY CONSTANTS
*
****************************************************************************)
 
 
(****************************************************************************
*
* DIRECTDRAWPALETTE GETENTRY CONSTANTS
*
****************************************************************************)
 
(* 0 is the only legal value *)
 
(****************************************************************************
*
* DIRECTDRAWSURFACE SETPALETTE CONSTANTS
*
****************************************************************************)
 
(*
* The passed pointer is an IUnknown ptr. The cbData argument to SetPrivateData
* must be set to sizeof(IUnknown^). DirectDraw will call AddRef through this
* pointer and Release when the private data is destroyed. This includes when
* the surface or palette is destroyed before such priovate data is destroyed.
*)
DDSPD_IUNKNOWNPOINTER = $00000001;
 
(*
* Private data is only valid for the current state of the object,
* as determined by the uniqueness value.
*)
DDSPD_VOLATILE = $00000002;
 
(****************************************************************************
*
* DIRECTDRAWSURFACE SETPALETTE CONSTANTS
*
****************************************************************************)
 
 
(****************************************************************************
*
* DIRECTDRAW BITDEPTH CONSTANTS
*
* NOTE: These are only used to indicate supported bit depths. These
* are flags only, they are not to be used as an actual bit depth. The
* absolute numbers 1, 2, 4, 8, 16, 24 and 32 are used to indicate actual
* bit depths in a surface or for changing the display mode.
*
****************************************************************************)
 
(*
* 1 bit per pixel.
*)
DDBD_1 = $00004000;
 
(*
* 2 bits per pixel.
*)
DDBD_2 = $00002000;
 
(*
* 4 bits per pixel.
*)
DDBD_4 = $00001000;
 
(*
* 8 bits per pixel.
*)
DDBD_8 = $00000800;
 
(*
* 16 bits per pixel.
*)
DDBD_16 = $00000400;
 
(*
* 24 bits per pixel.
*)
DDBD_24 = $00000200;
 
(*
* 32 bits per pixel.
*)
DDBD_32 = $00000100;
 
{ DirectDraw Set/Get Color Key Flags }
(****************************************************************************
*
* DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS
*
****************************************************************************)
 
(*
* Set if the structure contains a color space. Not set if the structure
* contains a single color key.
*)
DDCKEY_COLORSPACE = $00000001;
 
(*
* Set if the structure specifies a color key or color space which is to be
* used as a destination color key for blt operations.
*)
DDCKEY_DESTBLT = $00000002;
 
(*
* Set if the structure specifies a color key or color space which is to be
* used as a destination color key for overlay operations.
*)
DDCKEY_DESTOVERLAY = $00000004;
 
(*
* Set if the structure specifies a color key or color space which is to be
* used as a source color key for blt operations.
*)
DDCKEY_SRCBLT = $00000008;
 
(*
* Set if the structure specifies a color key or color space which is to be
* used as a source color key for overlay operations.
*)
DDCKEY_SRCOVERLAY = $00000010;
 
{ DirectDraw Color Key Capability Flags }
 
(****************************************************************************
*
* DIRECTDRAW COLOR KEY CAPABILITY FLAGS
*
****************************************************************************)
 
(*
* Supports transparent blting using a color key to identify the replaceable
* bits of the destination surface for RGB colors.
*)
DDCKEYCAPS_DESTBLT = $00000001;
 
(*
* Supports transparent blting using a color space to identify the replaceable
* bits of the destination surface for RGB colors.
*)
DDCKEYCAPS_DESTBLTCLRSPACE = $00000002;
 
(*
* Supports transparent blting using a color space to identify the replaceable
* bits of the destination surface for YUV colors.
*)
DDCKEYCAPS_DESTBLTCLRSPACEYUV = $00000004;
 
(*
* Supports transparent blting using a color key to identify the replaceable
* bits of the destination surface for YUV colors.
*)
DDCKEYCAPS_DESTBLTYUV = $00000008;
 
(*
* Supports overlaying using colorkeying of the replaceable bits of the surface
* being overlayed for RGB colors.
*)
DDCKEYCAPS_DESTOVERLAY = $00000010;
 
(*
* Supports a color space as the color key for the destination for RGB colors.
*)
DDCKEYCAPS_DESTOVERLAYCLRSPACE = $00000020;
 
(*
* Supports a color space as the color key for the destination for YUV colors.
*)
DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV = $00000040;
 
(*
* Supports only one active destination color key value for visible overlay
* surfaces.
*)
DDCKEYCAPS_DESTOVERLAYONEACTIVE = $00000080;
 
(*
* Supports overlaying using colorkeying of the replaceable bits of the
* surface being overlayed for YUV colors.
*)
DDCKEYCAPS_DESTOVERLAYYUV = $00000100;
 
(*
* Supports transparent blting using the color key for the source with
* this surface for RGB colors.
*)
DDCKEYCAPS_SRCBLT = $00000200;
 
(*
* Supports transparent blting using a color space for the source with
* this surface for RGB colors.
*)
DDCKEYCAPS_SRCBLTCLRSPACE = $00000400;
 
(*
* Supports transparent blting using a color space for the source with
* this surface for YUV colors.
*)
DDCKEYCAPS_SRCBLTCLRSPACEYUV = $00000800;
 
(*
* Supports transparent blting using the color key for the source with
* this surface for YUV colors.
*)
DDCKEYCAPS_SRCBLTYUV = $00001000;
 
(*
* Supports overlays using the color key for the source with this
* overlay surface for RGB colors.
*)
DDCKEYCAPS_SRCOVERLAY = $00002000;
 
(*
* Supports overlays using a color space as the source color key for
* the overlay surface for RGB colors.
*)
DDCKEYCAPS_SRCOVERLAYCLRSPACE = $00004000;
 
(*
* Supports overlays using a color space as the source color key for
* the overlay surface for YUV colors.
*)
DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV = $00008000;
 
(*
* Supports only one active source color key value for visible
* overlay surfaces.
*)
DDCKEYCAPS_SRCOVERLAYONEACTIVE = $00010000;
 
(*
* Supports overlays using the color key for the source with this
* overlay surface for YUV colors.
*)
DDCKEYCAPS_SRCOVERLAYYUV = $00020000;
 
(*
* there are no bandwidth trade-offs for using colorkey with an overlay
*)
DDCKEYCAPS_NOCOSTOVERLAY = $00040000;
 
{ DirectDraw PixelFormat Flags }
 
(****************************************************************************
*
* DIRECTDRAW PIXELFORMAT FLAGS
*
****************************************************************************)
 
(*
* The surface has alpha channel information in the pixel format.
*)
DDPF_ALPHAPIXELS = $00000001;
 
(*
* The pixel format contains alpha only information
*)
DDPF_ALPHA = $00000002;
 
(*
* The FourCC code is valid.
*)
DDPF_FOURCC = $00000004;
 
(*
* The surface is 4-bit color indexed.
*)
DDPF_PALETTEINDEXED4 = $00000008;
 
(*
* The surface is indexed into a palette which stores indices
* into the destination surface's 8-bit palette.
*)
DDPF_PALETTEINDEXEDTO8 = $00000010;
 
(*
* The surface is 8-bit color indexed.
*)
DDPF_PALETTEINDEXED8 = $00000020;
 
(*
* The RGB data in the pixel format structure is valid.
*)
DDPF_RGB = $00000040;
 
(*
* The surface will accept pixel data in the format specified
* and compress it during the write.
*)
DDPF_COMPRESSED = $00000080;
 
(*
* The surface will accept RGB data and translate it during
* the write to YUV data. The format of the data to be written
* will be contained in the pixel format structure. The DDPF_RGB
* flag will be set.
*)
DDPF_RGBTOYUV = $00000100;
 
(*
* pixel format is YUV - YUV data in pixel format struct is valid
*)
DDPF_YUV = $00000200;
 
(*
* pixel format is a z buffer only surface
*)
DDPF_ZBUFFER = $00000400;
 
(*
* The surface is 1-bit color indexed.
*)
DDPF_PALETTEINDEXED1 = $00000800;
 
(*
* The surface is 2-bit color indexed.
*)
DDPF_PALETTEINDEXED2 = $00001000;
 
(*
* The surface contains Z information in the pixels
*)
DDPF_ZPIXELS = $00002000;
 
(*
* The surface contains stencil information along with Z
*)
DDPF_STENCILBUFFER = $00004000;
 
(*
* Premultiplied alpha format -- the color components have been
* premultiplied by the alpha component.
*)
DDPF_ALPHAPREMULT = $00008000;
 
 
(*
* Luminance data in the pixel format is valid.
* Use this flag for luminance-only or luminance+alpha surfaces,
* the bit depth is then ddpf.dwLuminanceBitCount.
*)
DDPF_LUMINANCE = $00020000;
 
(*
* Luminance data in the pixel format is valid.
* Use this flag when hanging luminance off bumpmap surfaces,
* the bit mask for the luminance portion of the pixel is then
* ddpf.dwBumpLuminanceBitMask
*)
DDPF_BUMPLUMINANCE = $00040000;
 
(*
* Bump map dUdV data in the pixel format is valid.
*)
DDPF_BUMPDUDV = $00080000;
 
{ DirectDraw SetDisplayMode Flags }
(*===========================================================================
*
*
* DIRECTDRAW CALLBACK FLAGS
*
*
*==========================================================================*)
 
(****************************************************************************
*
* DIRECTDRAW ENUMSURFACES FLAGS
*
****************************************************************************)
 
(*
* Enumerate all of the surfaces that meet the search criterion.
*)
DDENUMSURFACES_ALL = $00000001;
 
(*
* A search hit is a surface that matches the surface description.
*)
DDENUMSURFACES_MATCH = $00000002;
 
(*
* A search hit is a surface that does not match the surface description.
*)
DDENUMSURFACES_NOMATCH = $00000004;
 
(*
* Enumerate the first surface that can be created which meets the search criterion.
*)
DDENUMSURFACES_CANBECREATED = $00000008;
 
(*
* Enumerate the surfaces that already exist that meet the search criterion.
*)
DDENUMSURFACES_DOESEXIST = $00000010;
 
(****************************************************************************
*
* DIRECTDRAW SETDISPLAYMODE FLAGS
*
****************************************************************************)
 
(*
* The desired mode is a standard VGA mode
*)
DDSDM_STANDARDVGAMODE = $00000001;
 
{ DirectDraw EnumDisplayModes Flags }
(****************************************************************************
*
* DIRECTDRAW ENUMDISPLAYMODES FLAGS
*
****************************************************************************)
 
(*
* Enumerate Modes with different refresh rates. EnumDisplayModes guarantees
* that a particular mode will be enumerated only once. This flag specifies whether
* the refresh rate is taken into account when determining if a mode is unique.
*)
DDEDM_REFRESHRATES = $00000001;
 
(*
* Enumerate VGA modes. Specify this flag if you wish to enumerate supported VGA
* modes such as mode 0x13 in addition to the usual ModeX modes (which are always
* enumerated if the application has previously called SetCooperativeLevel with the
* DDSCL_ALLOWMODEX flag set).
*)
DDEDM_STANDARDVGAMODES = $00000002;
 
{ DirectDraw EnumSurfaces Flags }
 
DDENUMSURFACES_ALL = $00000001;
DDENUMSURFACES_MATCH = $00000002;
DDENUMSURFACES_NOMATCH = $00000004;
DDENUMSURFACES_CANBECREATED = $00000008;
DDENUMSURFACES_DOESEXIST = $00000010;
(****************************************************************************
*
* DIRECTDRAW SETCOOPERATIVELEVEL FLAGS
*
****************************************************************************)
 
{ DirectDraw SetCooperativeLevel Flags }
(*
* Exclusive mode owner will be responsible for the entire primary surface.
* GDI can be ignored. used with DD
*)
DDSCL_FULLSCREEN = $00000001;
 
DDSCL_FULLSCREEN = $00000001;
(*
* allow CTRL_ALT_DEL to work while in fullscreen exclusive mode
*)
DDSCL_ALLOWREBOOT = $00000002;
 
(*
* prevents DDRAW from modifying the application window.
* prevents DDRAW from minimize/restore the application window on activation.
*)
DDSCL_NOWINDOWCHANGES = $00000004;
 
(*
* app wants to work as a regular Windows application
*)
DDSCL_NORMAL = $00000008;
 
(*
* app wants exclusive access
*)
DDSCL_EXCLUSIVE = $00000010;
 
 
(*
* app can deal with non-windows display modes
*)
DDSCL_ALLOWMODEX = $00000040;
 
(*
* this window will receive the focus messages
*)
DDSCL_SETFOCUSWINDOW = $00000080;
 
(*
* this window is associated with the DDRAW object and will
* cover the screen in fullscreen mode
*)
DDSCL_SETDEVICEWINDOW = $00000100;
 
(*
* app wants DDRAW to create a window to be associated with the
* DDRAW object
*)
DDSCL_CREATEDEVICEWINDOW = $00000200;
 
(*
* App explicitly asks DDRAW/D3D to be multithread safe. This makes D3D
* take the global crtisec more frequently.
*)
DDSCL_MULTITHREADED = $00000400;
 
(*
* App hints that it would like to keep the FPU set up for optimal Direct3D
* performance (single precision and exceptions disabled) so Direct3D
* does not need to explicitly set the FPU each time
*)
DDSCL_FPUSETUP = $00000800;
 
(*
* App specifies that it needs either double precision FPU or FPU exceptions
* enabled. This makes Direct3D explicitly set the FPU state eah time it is
* called. Setting the flag will reduce Direct3D performance. The flag is
* assumed by default in DirectX 6 and earlier. See also DDSCL_FPUSETUP
*)
DDSCL_FPUPRESERVE = $00001000;
 
{ DirectDraw Blt Flags }
(****************************************************************************
*
* DIRECTDRAW BLT FLAGS
*
****************************************************************************)
 
(*
* Use the alpha information in the pixel format or the alpha channel surface
* attached to the destination surface as the alpha channel for this blt.
*)
DDBLT_ALPHADEST = $00000001;
 
(*
* Use the dwConstAlphaDest field in the TDDBltFX structure as the alpha channel
* for the destination surface for this blt.
*)
DDBLT_ALPHADESTCONSTOVERRIDE = $00000002;
 
(*
* The NEG suffix indicates that the destination surface becomes more
* transparent as the alpha value increases. (0 is opaque)
*)
DDBLT_ALPHADESTNEG = $00000004;
 
(*
* Use the lpDDSAlphaDest field in the TDDBltFX structure as the alpha
* channel for the destination for this blt.
*)
DDBLT_ALPHADESTSURFACEOVERRIDE = $00000008;
 
(*
* Use the dwAlphaEdgeBlend field in the TDDBltFX structure as the alpha channel
* for the edges of the image that border the color key colors.
*)
DDBLT_ALPHAEDGEBLEND = $00000010;
 
(*
* Use the alpha information in the pixel format or the alpha channel surface
* attached to the source surface as the alpha channel for this blt.
*)
DDBLT_ALPHASRC = $00000020;
 
(*
* Use the dwConstAlphaSrc field in the TDDBltFX structure as the alpha channel
* for the source for this blt.
*)
DDBLT_ALPHASRCCONSTOVERRIDE = $00000040;
 
(*
* The NEG suffix indicates that the source surface becomes more transparent
* as the alpha value increases. (0 is opaque)
*)
DDBLT_ALPHASRCNEG = $00000080;
 
(*
* Use the lpDDSAlphaSrc field in the TDDBltFX structure as the alpha channel
* for the source for this blt.
*)
DDBLT_ALPHASRCSURFACEOVERRIDE = $00000100;
 
(*
* Do this blt asynchronously through the FIFO in the order received. If
* there is no room in the hardware FIFO fail the call.
*)
DDBLT_ASYNC = $00000200;
 
(*
* Uses the dwFillColor field in the TDDBltFX structure as the RGB color
* to fill the destination rectangle on the destination surface with.
*)
DDBLT_COLORFILL = $00000400;
 
(*
* Uses the dwDDFX field in the TDDBltFX structure to specify the effects
* to use for the blt.
*)
DDBLT_DDFX = $00000800;
 
(*
* Uses the dwDDROPS field in the TDDBltFX structure to specify the ROPS
* that are not part of the Win32 API.
*)
DDBLT_DDROPS = $00001000;
 
(*
* Use the color key associated with the destination surface.
*)
DDBLT_KEYDEST = $00002000;
 
(*
* Use the dckDestColorkey field in the TDDBltFX structure as the color key
* for the destination surface.
*)
DDBLT_KEYDESTOVERRIDE = $00004000;
 
(*
* Use the color key associated with the source surface.
*)
DDBLT_KEYSRC = $00008000;
 
(*
* Use the dckSrcColorkey field in the TDDBltFX structure as the color key
* for the source surface.
*)
DDBLT_KEYSRCOVERRIDE = $00010000;
 
(*
* Use the dwROP field in the TDDBltFX structure for the raster operation
* for this blt. These ROPs are the same as the ones defined in the Win32 API.
*)
DDBLT_ROP = $00020000;
 
(*
* Use the dwRotationAngle field in the TDDBltFX structure as the angle
* (specified in 1/100th of a degree) to rotate the surface.
*)
DDBLT_ROTATIONANGLE = $00040000;
 
(*
* Z-buffered blt using the z-buffers attached to the source and destination
* surfaces and the dwZBufferOpCode field in the TDDBltFX structure as the
* z-buffer opcode.
*)
DDBLT_ZBUFFER = $00080000;
 
(*
* Z-buffered blt using the dwConstDest Zfield and the dwZBufferOpCode field
* in the TDDBltFX structure as the z-buffer and z-buffer opcode respectively
* for the destination.
*)
DDBLT_ZBUFFERDESTCONSTOVERRIDE = $00100000;
 
(*
* Z-buffered blt using the lpDDSDestZBuffer field and the dwZBufferOpCode
* field in the TDDBltFX structure as the z-buffer and z-buffer opcode
* respectively for the destination.
*)
DDBLT_ZBUFFERDESTOVERRIDE = $00200000;
 
(*
* Z-buffered blt using the dwConstSrcZ field and the dwZBufferOpCode field
* in the TDDBltFX structure as the z-buffer and z-buffer opcode respectively
* for the source.
*)
DDBLT_ZBUFFERSRCCONSTOVERRIDE = $00400000;
 
(*
* Z-buffered blt using the lpDDSSrcZBuffer field and the dwZBufferOpCode
* field in the TDDBltFX structure as the z-buffer and z-buffer opcode
* respectively for the source.
*)
DDBLT_ZBUFFERSRCOVERRIDE = $00800000;
 
(*
* wait until the device is ready to handle the blt
* this will cause blt to not return DDERR_WASSTILLDRAWING
*)
DDBLT_WAIT = $01000000;
 
(*
* Uses the dwFillDepth field in the TDDBltFX structure as the depth value
* to fill the destination rectangle on the destination Z-buffer surface
* with.
*)
DDBLT_DEPTHFILL = $02000000;
 
(*
* wait until the device is ready to handle the blt
* this will cause blt to not return DDERR_WASSTILLDRAWING
*)
DDBLT_DONOTWAIT = $08000000;
 
{ BltFast Flags }
(****************************************************************************
*
* BLTFAST FLAGS
*
****************************************************************************)
 
DDBLTFAST_NOCOLORKEY = $00000000;
DDBLTFAST_SRCCOLORKEY = $00000001;
1843,310 → 3484,1387
DDBLTFAST_WAIT = $00000010;
DDBLTFAST_DONOTWAIT = $00000020;
 
{ Flip Flags }
(****************************************************************************
*
* FLIP FLAGS
*
****************************************************************************)
 
 
DDFLIP_WAIT = $00000001;
 
(*
* Indicates that the target surface contains the even field of video data.
* This flag is only valid with an overlay surface.
*)
DDFLIP_EVEN = $00000002;
 
(*
* Indicates that the target surface contains the odd field of video data.
* This flag is only valid with an overlay surface.
*)
DDFLIP_ODD = $00000004;
 
(*
* Causes DirectDraw to perform the physical flip immediately and return
* to the application. Typically, what was the front buffer but is now the back
* buffer will still be visible (depending on timing) until the next vertical
* retrace. Subsequent operations involving the two flipped surfaces will
* not check to see if the physical flip has finished (i.e. will not return
* DDERR_WASSTILLDRAWING for that reason (but may for other reasons)).
* This allows an application to perform Flips at a higher frequency than the
* monitor refresh rate, but may introduce visible artifacts.
* Only effective if DDCAPS2_FLIPNOVSYNC is set. If that bit is not set,
* DDFLIP_NOVSYNC has no effect.
*)
DDFLIP_NOVSYNC = $00000008;
 
 
(*
* Flip Interval Flags. These flags indicate how many vertical retraces to wait between
* each flip. The default is one. DirectDraw will return DDERR_WASSTILLDRAWING for each
* surface involved in the flip until the specified number of vertical retraces has
* ocurred. Only effective if DDCAPS2_FLIPINTERVAL is set. If that bit is not set,
* DDFLIP_INTERVALn has no effect.
*)
 
(*
* DirectDraw will flip on every other vertical sync
*)
DDFLIP_INTERVAL2 = $02000000;
 
 
(*
* DirectDraw will flip on every third vertical sync
*)
DDFLIP_INTERVAL3 = $03000000;
 
 
(*
* DirectDraw will flip on every fourth vertical sync
*)
DDFLIP_INTERVAL4 = $04000000;
 
(*
* DirectDraw will flip and display a main stereo surface
*)
DDFLIP_STEREO = $00000010;
 
(*
* On IDirectDrawSurface7 and higher interfaces, the default is DDFLIP_WAIT. If you wish
* to override the default and use time when the accelerator is busy (as denoted by
* the DDERR_WASSTILLDRAWING return code) then use DDFLIP_DONOTWAIT.
*)
DDFLIP_DONOTWAIT = $00000020;
 
{ DirectDraw Surface Overlay Flags }
(****************************************************************************
*
* DIRECTDRAW SURFACE OVERLAY FLAGS
*
****************************************************************************)
 
(*
* Use the alpha information in the pixel format or the alpha channel surface
* attached to the destination surface as the alpha channel for the
* destination overlay.
*)
DDOVER_ALPHADEST = $00000001;
 
(*
* Use the dwConstAlphaDest field in the TDDOverlayFX structure as the
* destination alpha channel for this overlay.
*)
DDOVER_ALPHADESTCONSTOVERRIDE = $00000002;
 
(*
* The NEG suffix indicates that the destination surface becomes more
* transparent as the alpha value increases.
*)
DDOVER_ALPHADESTNEG = $00000004;
 
(*
* Use the lpDDSAlphaDest field in the TDDOverlayFX structure as the alpha
* channel destination for this overlay.
*)
DDOVER_ALPHADESTSURFACEOVERRIDE = $00000008;
 
(*
* Use the dwAlphaEdgeBlend field in the TDDOverlayFX structure as the alpha
* channel for the edges of the image that border the color key colors.
*)
DDOVER_ALPHAEDGEBLEND = $00000010;
 
(*
* Use the alpha information in the pixel format or the alpha channel surface
* attached to the source surface as the source alpha channel for this overlay.
*)
DDOVER_ALPHASRC = $00000020;
 
(*
* Use the dwConstAlphaSrc field in the TDDOverlayFX structure as the source
* alpha channel for this overlay.
*)
DDOVER_ALPHASRCCONSTOVERRIDE = $00000040;
 
(*
* The NEG suffix indicates that the source surface becomes more transparent
* as the alpha value increases.
*)
DDOVER_ALPHASRCNEG = $00000080;
 
(*
* Use the lpDDSAlphaSrc field in the TDDOverlayFX structure as the alpha channel
* source for this overlay.
*)
DDOVER_ALPHASRCSURFACEOVERRIDE = $00000100;
 
(*
* Turn this overlay off.
*)
DDOVER_HIDE = $00000200;
 
(*
* Use the color key associated with the destination surface.
*)
DDOVER_KEYDEST = $00000400;
 
(*
* Use the dckDestColorkey field in the TDDOverlayFX structure as the color key
* for the destination surface
*)
DDOVER_KEYDESTOVERRIDE = $00000800;
 
(*
* Use the color key associated with the source surface.
*)
DDOVER_KEYSRC = $00001000;
 
(*
* Use the dckSrcColorkey field in the TDDOverlayFX structure as the color key
* for the source surface.
*)
DDOVER_KEYSRCOVERRIDE = $00002000;
 
(*
* Turn this overlay on.
*)
DDOVER_SHOW = $00004000;
 
(*
* Add a dirty rect to an emulated overlayed surface.
*)
DDOVER_ADDDIRTYRECT = $00008000;
 
(*
* Redraw all dirty rects on an emulated overlayed surface.
*)
DDOVER_REFRESHDIRTYRECTS = $00010000;
 
(*
* Redraw the entire surface on an emulated overlayed surface.
*)
DDOVER_REFRESHALL = $00020000;
 
(*
* Use the overlay FX flags to define special overlay FX
*)
DDOVER_DDFX = $00080000;
 
(*
* Autoflip the overlay when ever the video port autoflips
*)
DDOVER_AUTOFLIP = $00100000;
 
(*
* Display each field of video port data individually without
* causing any jittery artifacts
*)
DDOVER_BOB = $00200000;
 
(*
* Indicates that bob/weave decisions should not be overridden by other
* interfaces.
*)
DDOVER_OVERRIDEBOBWEAVE = $00400000;
 
(*
* Indicates that the surface memory is composed of interleaved fields.
*)
DDOVER_INTERLEAVED = $00800000;
 
(*
* Indicates that bob will be performed using hardware rather than
* software or emulated.
*)
DDOVER_BOBHARDWARE = $01000000;
 
(*
* Indicates that overlay FX structure contains valid ARGB scaling factors.
*)
DDOVER_ARGBSCALEFACTORS = $02000000;
 
(*
* Indicates that ARGB scaling factors can be degraded to fit driver capabilities.
*)
DDOVER_DEGRADEARGBSCALING = $04000000;
 
{ DirectDrawSurface Lock Flags }
(****************************************************************************
*
* DIRECTDRAWSURFACE LOCK FLAGS
*
****************************************************************************)
 
DDLOCK_SURFACEMEMORYPTR = $00000000; // default
(*
* The default. Set to indicate that Lock should return a valid memory pointer
* to the top of the specified rectangle. If no rectangle is specified then a
* pointer to the top of the surface is returned.
*)
DDLOCK_SURFACEMEMORYPTR = $00000000; // = default
 
(*
* Set to indicate that Lock should wait until it can obtain a valid memory
* pointer before returning. If this bit is set, Lock will never return
* DDERR_WASSTILLDRAWING.
*)
DDLOCK_WAIT = $00000001;
 
(*
* Set if an event handle is being passed to Lock. Lock will trigger the event
* when it can return the surface memory pointer requested.
*)
DDLOCK_EVENT = $00000002;
 
(*
* Indicates that the surface being locked will only be read from.
*)
DDLOCK_READONLY = $00000010;
 
(*
* Indicates that the surface being locked will only be written to
*)
DDLOCK_WRITEONLY = $00000020;
 
(*
* Indicates that a system wide lock should not be taken when this surface
* is locked. This has several advantages (cursor responsiveness, ability
* to call more Windows functions, easier debugging) when locking video
* memory surfaces. However, an application specifying this flag must
* comply with a number of conditions documented in the help file.
* Furthermore, this flag cannot be specified when locking the primary.
*)
DDLOCK_NOSYSLOCK = $00000800;
 
(*
* Used only with Direct3D Vertex Buffer Locks. Indicates that no vertices
* that were referred to in Draw*PrimtiveVB calls since the start of the
* frame (or the last lock without this flag) will be modified during the
* lock. This can be useful when one is only appending data to the vertex
* buffer
*)
DDLOCK_NOOVERWRITE = $00001000;
 
(*
* Indicates that no assumptions will be made about the contents of the
* surface or vertex buffer during this lock.
* This enables two things:
* - Direct3D or the driver may provide an alternative memory
* area as the vertex buffer. This is useful when one plans to clear the
* contents of the vertex buffer and fill in new data.
* - Drivers sometimes store surface data in a re-ordered format.
* When the application locks the surface, the driver is forced to un-re-order
* the surface data before allowing the application to see the surface contents.
* This flag is a hint to the driver that it can skip the un-re-ordering process
* since the application plans to overwrite every single pixel in the surface
* or locked rectangle (and so erase any un-re-ordered pixels anyway).
* Applications should always set this flag when they intend to overwrite the entire
* surface or locked rectangle.
*)
DDLOCK_DISCARDCONTENTS = $00002000;
(*
* DDLOCK_OKTOSWAP is an older, less informative name for DDLOCK_DISCARDCONTENTS
*)
DDLOCK_OKTOSWAP = $00002000;
 
(*
* On IDirectDrawSurface7 and higher interfaces, the default is DDLOCK_WAIT. If you wish
* to override the default and use time when the accelerator is busy (as denoted by
* the DDERR_WASSTILLDRAWING return code) then use DDLOCK_DONOTWAIT.
*)
DDLOCK_DONOTWAIT = $00004000;
 
{ DirectDrawSurface Blt FX Flags }
 
(****************************************************************************
*
* DIRECTDRAWSURFACE PAGELOCK FLAGS
*
****************************************************************************)
 
(*
* No flags defined at present
*)
 
 
(****************************************************************************
*
* DIRECTDRAWSURFACE PAGEUNLOCK FLAGS
*
****************************************************************************)
 
(*
* No flags defined at present
*)
 
 
(****************************************************************************
*
* DIRECTDRAWSURFACE BLT FX FLAGS
*
****************************************************************************)
 
(*
* If stretching, use arithmetic stretching along the Y axis for this blt.
*)
DDBLTFX_ARITHSTRETCHY = $00000001;
 
(*
* Do this blt mirroring the surface left to right. Spin the
* surface around its y-axis.
*)
DDBLTFX_MIRRORLEFTRIGHT = $00000002;
 
(*
* Do this blt mirroring the surface up and down. Spin the surface
* around its x-axis.
*)
DDBLTFX_MIRRORUPDOWN = $00000004;
 
(*
* Schedule this blt to avoid tearing.
*)
DDBLTFX_NOTEARING = $00000008;
 
(*
* Do this blt rotating the surface one hundred and eighty degrees.
*)
DDBLTFX_ROTATE180 = $00000010;
 
(*
* Do this blt rotating the surface two hundred and seventy degrees.
*)
DDBLTFX_ROTATE270 = $00000020;
 
(*
* Do this blt rotating the surface ninety degrees.
*)
DDBLTFX_ROTATE90 = $00000040;
 
(*
* Do this z blt using dwZBufferLow and dwZBufferHigh as range values
* specified to limit the bits copied from the source surface.
*)
DDBLTFX_ZBUFFERRANGE = $00000080;
 
(*
* Do this z blt adding the dwZBufferBaseDest to each of the sources z values
* before comparing it with the desting z values.
*)
DDBLTFX_ZBUFFERBASEDEST = $00000100;
 
{ DirectDrawSurface Overlay FX Flags }
(****************************************************************************
*
* DIRECTDRAWSURFACE OVERLAY FX FLAGS
*
****************************************************************************)
 
(*
* If stretching, use arithmetic stretching along the Y axis for this overlay.
*)
DDOVERFX_ARITHSTRETCHY = $00000001;
 
(*
* Mirror the overlay across the vertical axis
*)
DDOVERFX_MIRRORLEFTRIGHT = $00000002;
 
(*
* Mirror the overlay across the horizontal axis
*)
DDOVERFX_MIRRORUPDOWN = $00000004;
 
{ Flags for dwDDFX member of DDSPRITEFX structure }
(****************************************************************************
*
* Flags for dwDDFX member of DDSPRITEFX structure
*
****************************************************************************)
(*
* Use affine transformation matrix in fTransform member.
*)
DDSPRITEFX_AFFINETRANSFORM = $00000001;
 
DDSPRITEFX_AFFINETRANSFORM = $00000001;
(*
* Use RGBA scaling factors in ddrgbaScaleFactors member.
*)
DDSPRITEFX_RGBASCALING = $00000002;
 
(*
* Degrade RGBA scaling factors to accommodate driver's capabilities.
*)
DDSPRITEFX_DEGRADERGBASCALING = $00000004;
 
(*
* Do bilinear filtering of stretched or warped sprite.
*)
DDSPRITEFX_BILINEARFILTER = $00000008;
 
(*
* Do "blur" filtering of stretched or warped sprite.
*)
DDSPRITEFX_BLURFILTER = $00000010;
 
(*
* Do "flat" filtering of stretched or warped sprite.
*)
DDSPRITEFX_FLATFILTER = $00000020;
 
(*
* Degrade filtering operation to accommodate driver's capabilities.
*)
DDSPRITEFX_DEGRADEFILTER = $00000040;
 
{ DirectDraw WaitForVerticalBlank Flags }
(****************************************************************************
*
* DIRECTDRAW WAITFORVERTICALBLANK FLAGS
*
****************************************************************************)
 
(*
* return when the vertical blank interval begins
*)
DDWAITVB_BLOCKBEGIN = $00000001;
 
(*
* set up an event to trigger when the vertical blank begins
*)
DDWAITVB_BLOCKBEGINEVENT = $00000002;
 
(*
* return when the vertical blank interval ends and display begins
*)
DDWAITVB_BLOCKEND = $00000004;
 
{ DirectDraw GetFlipStatus Flags }
(****************************************************************************
*
* DIRECTDRAW GETFLIPSTATUS FLAGS
*
****************************************************************************)
 
(*
* is it OK to flip now?
*)
DDGFS_CANFLIP = $00000001;
 
(*
* is the last flip finished?
*)
DDGFS_ISFLIPDONE = $00000002;
 
{ DirectDraw GetBltStatus Flags }
(****************************************************************************
*
* DIRECTDRAW GETBLTSTATUS FLAGS
*
****************************************************************************)
 
(*
* is it OK to blt now?
*)
DDGBS_CANBLT = $00000001;
 
(*
* is the blt to the surface finished?
*)
DDGBS_ISBLTDONE = $00000002;
 
{ DirectDraw EnumOverlayZOrder Flags }
 
(****************************************************************************
*
* DIRECTDRAW ENUMOVERLAYZORDER FLAGS
*
****************************************************************************)
 
(*
* Enumerate overlays back to front.
*)
DDENUMOVERLAYZ_BACKTOFRONT = $00000000;
 
(*
* Enumerate overlays front to back
*)
DDENUMOVERLAYZ_FRONTTOBACK = $00000001;
 
{ DirectDraw UpdateOverlayZOrder Flags }
(****************************************************************************
*
* DIRECTDRAW UPDATEOVERLAYZORDER FLAGS
*
****************************************************************************)
 
(*
* Send overlay to front
*)
DDOVERZ_SENDTOFRONT = $00000000;
 
(*
* Send overlay to back
*)
DDOVERZ_SENDTOBACK = $00000001;
 
(*
* Move Overlay forward
*)
DDOVERZ_MOVEFORWARD = $00000002;
 
(*
* Move Overlay backward
*)
DDOVERZ_MOVEBACKWARD = $00000003;
 
(*
* Move Overlay in front of relative surface
*)
DDOVERZ_INSERTINFRONTOF = $00000004;
 
(*
* Move Overlay in back of relative surface
*)
DDOVERZ_INSERTINBACKOF = $00000005;
 
{ DirectDrawSurface SetPrivateData Constants }
(****************************************************************************
*
* DIRECTDRAW SETGAMMARAMP FLAGS
*
****************************************************************************)
 
DDSPD_IUNKNOWNPOINTER = $00000001;
DDSPD_VOLATILE = $00000002;
 
{ TDDColorControl flags }
 
DDCOLOR_BRIGHTNESS = $00000001;
DDCOLOR_CONTRAST = $00000002;
DDCOLOR_HUE = $00000004;
DDCOLOR_SATURATION = $00000008;
DDCOLOR_SHARPNESS = $00000010;
DDCOLOR_GAMMA = $00000020;
DDCOLOR_COLORENABLE = $00000040;
 
{ DirectDraw SetGammaRamp Flags }
 
(*
* Request calibrator to adjust the gamma ramp according to the physical
* properties of the display so that the result should appear identical
* on all systems.
*)
DDSGR_CALIBRATE = $00000001;
 
{ DirectDraw StartModeTest Flags }
(****************************************************************************
*
* DIRECTDRAW STARTMODETEST FLAGS
*
****************************************************************************)
 
(*
* Indicates that the mode being tested has passed
*)
DDSMT_ISTESTREQUIRED = $00000001;
 
{ DirectDraw EvaluateMode Flags }
 
(****************************************************************************
*
* DIRECTDRAW EVALUATEMODE FLAGS
*
****************************************************************************)
 
(*
* Indicates that the mode being tested has passed
*)
DDEM_MODEPASSED = $00000001;
 
(*
* Indicates that the mode being tested has failed
*)
DDEM_MODEFAILED = $00000002;
 
{ DirectDraw Return Codes }
(*===========================================================================
*
*
* DIRECTDRAW RETURN CODES
*
* The return values from DirectDraw Commands and Surface that return an HResult
* are codes from DirectDraw concerning the results of the action
* requested by DirectDraw.
*
*==========================================================================*)
 
DD_OK = HResult(0);
DD_FALSE = HResult(S_FALSE);
(*
* Status is OK
*
* Issued by: DirectDraw Commands and all callbacks
*)
DD_OK = 0;
DD_FALSE = S_FALSE;
 
{ DirectDraw EnumCallback Return Values }
(****************************************************************************
*
* DIRECTDRAW ENUMCALLBACK RETURN VALUES
*
* EnumCallback returns are used to control the flow of the DIRECTDRAW and
* DIRECTDRAWSURFACE object enumerations. They can only be returned by
* enumeration callback routines.
*
****************************************************************************)
 
(*
* stop the enumeration
*)
DDENUMRET_CANCEL = 0;
 
(*
* continue the enumeration
*)
DDENUMRET_OK = 1;
 
{ DirectDraw Error Codes }
(****************************************************************************
*
* DIRECTDRAW ERRORS
*
* Errors are represented by negative values and cannot be combined.
*
****************************************************************************)
 
DDERR_ALREADYINITIALIZED = HResult($88760000 + 5);
DDERR_CANNOTATTACHSURFACE = HResult($88760000 + 10);
DDERR_CANNOTDETACHSURFACE = HResult($88760000 + 20);
DDERR_CURRENTLYNOTAVAIL = HResult($88760000 + 40);
DDERR_EXCEPTION = HResult($88760000 + 55);
DDERR_GENERIC = HResult(E_FAIL);
DDERR_HEIGHTALIGN = HResult($88760000 + 90);
DDERR_INCOMPATIBLEPRIMARY = HResult($88760000 + 95);
DDERR_INVALIDCAPS = HResult($88760000 + 100);
DDERR_INVALIDCLIPLIST = HResult($88760000 + 110);
DDERR_INVALIDMODE = HResult($88760000 + 120);
DDERR_INVALIDOBJECT = HResult($88760000 + 130);
DDERR_INVALIDPARAMS = HResult(E_INVALIDARG);
DDERR_INVALIDPIXELFORMAT = HResult($88760000 + 145);
DDERR_INVALIDRECT = HResult($88760000 + 150);
DDERR_LOCKEDSURFACES = HResult($88760000 + 160);
DDERR_NO3D = HResult($88760000 + 170);
DDERR_NOALPHAHW = HResult($88760000 + 180);
DDERR_NOSTEREOHARDWARE = HResult($88760000 + 181);
DDERR_NOSURFACELEFT = HResult($88760000 + 182);
DDERR_NOCLIPLIST = HResult($88760000 + 205);
DDERR_NOCOLORCONVHW = HResult($88760000 + 210);
DDERR_NOCOOPERATIVELEVELSET = HResult($88760000 + 212);
DDERR_NOCOLORKEY = HResult($88760000 + 215);
DDERR_NOCOLORKEYHW = HResult($88760000 + 220);
DDERR_NODIRECTDRAWSUPPORT = HResult($88760000 + 222);
DDERR_NOEXCLUSIVEMODE = HResult($88760000 + 225);
DDERR_NOFLIPHW = HResult($88760000 + 230);
DDERR_NOGDI = HResult($88760000 + 240);
DDERR_NOMIRRORHW = HResult($88760000 + 250);
DDERR_NOTFOUND = HResult($88760000 + 255);
DDERR_NOOVERLAYHW = HResult($88760000 + 260);
DDERR_OVERLAPPINGRECTS = HResult($88760000 + 270);
DDERR_NORASTEROPHW = HResult($88760000 + 280);
DDERR_NOROTATIONHW = HResult($88760000 + 290);
DDERR_NOSTRETCHHW = HResult($88760000 + 310);
DDERR_NOT4BITCOLOR = HResult($88760000 + 316);
DDERR_NOT4BITCOLORINDEX = HResult($88760000 + 317);
DDERR_NOT8BITCOLOR = HResult($88760000 + 320);
DDERR_NOTEXTUREHW = HResult($88760000 + 330);
DDERR_NOVSYNCHW = HResult($88760000 + 335);
DDERR_NOZBUFFERHW = HResult($88760000 + 340);
DDERR_NOZOVERLAYHW = HResult($88760000 + 350);
DDERR_OUTOFCAPS = HResult($88760000 + 360);
DDERR_OUTOFMEMORY = HResult(E_OUTOFMEMORY);
DDERR_OUTOFVIDEOMEMORY = HResult($88760000 + 380);
DDERR_OVERLAYCANTCLIP = HResult($88760000 + 382);
DDERR_OVERLAYCOLORKEYONLYONEACTIVE = HResult($88760000 + 384);
DDERR_PALETTEBUSY = HResult($88760000 + 387);
DDERR_COLORKEYNOTSET = HResult($88760000 + 400);
DDERR_SURFACEALREADYATTACHED = HResult($88760000 + 410);
DDERR_SURFACEALREADYDEPENDENT = HResult($88760000 + 420);
DDERR_SURFACEBUSY = HResult($88760000 + 430);
DDERR_CANTLOCKSURFACE = HResult($88760000 + 435);
DDERR_SURFACEISOBSCURED = HResult($88760000 + 440);
DDERR_SURFACELOST = HResult($88760000 + 450);
DDERR_SURFACENOTATTACHED = HResult($88760000 + 460);
DDERR_TOOBIGHEIGHT = HResult($88760000 + 470);
DDERR_TOOBIGSIZE = HResult($88760000 + 480);
DDERR_TOOBIGWIDTH = HResult($88760000 + 490);
DDERR_UNSUPPORTED = HResult(E_NOTIMPL);
DDERR_UNSUPPORTEDFORMAT = HResult($88760000 + 510);
DDERR_UNSUPPORTEDMASK = HResult($88760000 + 520);
DDERR_INVALIDSTREAM = HResult($88760000 + 521);
DDERR_VERTICALBLANKINPROGRESS = HResult($88760000 + 537);
DDERR_WASSTILLDRAWING = HResult($88760000 + 540);
DDERR_DDSCAPSCOMPLEXREQUIRED = HResult($88760000 + 542);
DDERR_XALIGN = HResult($88760000 + 560);
DDERR_INVALIDDIRECTDRAWGUID = HResult($88760000 + 561);
DDERR_DIRECTDRAWALREADYCREATED = HResult($88760000 + 562);
DDERR_NODIRECTDRAWHW = HResult($88760000 + 563);
DDERR_PRIMARYSURFACEALREADYEXISTS = HResult($88760000 + 564);
DDERR_NOEMULATION = HResult($88760000 + 565);
DDERR_REGIONTOOSMALL = HResult($88760000 + 566);
DDERR_CLIPPERISUSINGHWND = HResult($88760000 + 567);
DDERR_NOCLIPPERATTACHED = HResult($88760000 + 568);
DDERR_NOHWND = HResult($88760000 + 569);
DDERR_HWNDSUBCLASSED = HResult($88760000 + 570);
DDERR_HWNDALREADYSET = HResult($88760000 + 571);
DDERR_NOPALETTEATTACHED = HResult($88760000 + 572);
DDERR_NOPALETTEHW = HResult($88760000 + 573);
DDERR_BLTFASTCANTCLIP = HResult($88760000 + 574);
DDERR_NOBLTHW = HResult($88760000 + 575);
DDERR_NODDROPSHW = HResult($88760000 + 576);
DDERR_OVERLAYNOTVISIBLE = HResult($88760000 + 577);
DDERR_NOOVERLAYDEST = HResult($88760000 + 578);
DDERR_INVALIDPOSITION = HResult($88760000 + 579);
DDERR_NOTAOVERLAYSURFACE = HResult($88760000 + 580);
DDERR_EXCLUSIVEMODEALREADYSET = HResult($88760000 + 581);
DDERR_NOTFLIPPABLE = HResult($88760000 + 582);
DDERR_CANTDUPLICATE = HResult($88760000 + 583);
DDERR_NOTLOCKED = HResult($88760000 + 584);
DDERR_CANTCREATEDC = HResult($88760000 + 585);
DDERR_NODC = HResult($88760000 + 586);
DDERR_WRONGMODE = HResult($88760000 + 587);
DDERR_IMPLICITLYCREATED = HResult($88760000 + 588);
DDERR_NOTPALETTIZED = HResult($88760000 + 589);
DDERR_UNSUPPORTEDMODE = HResult($88760000 + 590);
DDERR_NOMIPMAPHW = HResult($88760000 + 591);
DDERR_INVALIDSURFACETYPE = HResult($88760000 + 592);
DDERR_NOOPTIMIZEHW = HResult($88760000 + 600);
DDERR_NOTLOADED = HResult($88760000 + 601);
DDERR_NOFOCUSWINDOW = HResult($88760000 + 602);
DDERR_NOTONMIPMAPSUBLEVEL = HResult($88760000 + 603);
DDERR_DCALREADYCREATED = HResult($88760000 + 620);
DDERR_NONONLOCALVIDMEM = HResult($88760000 + 630);
DDERR_CANTPAGELOCK = HResult($88760000 + 640);
DDERR_CANTPAGEUNLOCK = HResult($88760000 + 660);
DDERR_NOTPAGELOCKED = HResult($88760000 + 680);
DDERR_MOREDATA = HResult($88760000 + 690);
DDERR_EXPIRED = HResult($88760000 + 691);
DDERR_TESTFINISHED = HResult($88760000 + 692);
DDERR_NEWMODE = HResult($88760000 + 693);
DDERR_D3DNOTINITIALIZED = HResult($88760000 + 694);
DDERR_VIDEONOTACTIVE = HResult($88760000 + 695);
DDERR_NOMONITORINFORMATION = HResult($88760000 + 696);
DDERR_NODRIVERSUPPORT = HResult($88760000 + 697);
DDERR_DEVICEDOESNTOWNSURFACE = HResult($88760000 + 699);
DDERR_NOTINITIALIZED = HResult(CO_E_NOTINITIALIZED);
_FACDD = $876;
MAKE_DDHRESULT = HResult(1 shl 31) or HResult(_FACDD shl 16);
 
{ API's }
 
function GET_WHQL_YEAR(dwWHQLLevel: DWORD): DWORD;
function GET_WHQL_MONTH(dwWHQLLevel: DWORD): DWORD;
function GET_WHQL_DAY(dwWHQLLevel: DWORD): DWORD;
(*
* This object is already initialized
*)
DDERR_ALREADYINITIALIZED = MAKE_DDHRESULT + 5;
 
(*
* This surface can not be attached to the requested surface.
*)
DDERR_CANNOTATTACHSURFACE = MAKE_DDHRESULT + 10;
 
(*
* This surface can not be detached from the requested surface.
*)
DDERR_CANNOTDETACHSURFACE = MAKE_DDHRESULT + 20;
 
(*
* Support is currently not available.
*)
DDERR_CURRENTLYNOTAVAIL = MAKE_DDHRESULT + 40;
 
(*
* An exception was encountered while performing the requested operation
*)
DDERR_EXCEPTION = MAKE_DDHRESULT + 55;
 
(*
* Generic failure.
*)
DDERR_GENERIC = E_FAIL;
 
(*
* Height of rectangle provided is not a multiple of reqd alignment
*)
DDERR_HEIGHTALIGN = MAKE_DDHRESULT + 90;
 
(*
* Unable to match primary surface creation request with existing
* primary surface.
*)
DDERR_INCOMPATIBLEPRIMARY = MAKE_DDHRESULT + 95;
 
(*
* One or more of the caps bits passed to the callback are incorrect.
*)
DDERR_INVALIDCAPS = MAKE_DDHRESULT + 100;
 
(*
* DirectDraw does not support provided Cliplist.
*)
DDERR_INVALIDCLIPLIST = MAKE_DDHRESULT + 110;
 
(*
* DirectDraw does not support the requested mode
*)
DDERR_INVALIDMODE = MAKE_DDHRESULT + 120;
 
(*
* DirectDraw received a pointer that was an invalid DIRECTDRAW object.
*)
DDERR_INVALIDOBJECT = MAKE_DDHRESULT + 130;
 
(*
* One or more of the parameters passed to the callback function are
* incorrect.
*)
DDERR_INVALIDPARAMS = E_INVALIDARG;
 
(*
* pixel format was invalid as specified
*)
DDERR_INVALIDPIXELFORMAT = MAKE_DDHRESULT + 145;
 
(*
* Rectangle provided was invalid.
*)
DDERR_INVALIDRECT = MAKE_DDHRESULT + 150;
 
(*
* Operation could not be carried out because one or more surfaces are locked
*)
DDERR_LOCKEDSURFACES = MAKE_DDHRESULT + 160;
 
(*
* There is no 3D present.
*)
DDERR_NO3D = MAKE_DDHRESULT + 170;
 
(*
* Operation could not be carried out because there is no alpha accleration
* hardware present or available.
*)
DDERR_NOALPHAHW = MAKE_DDHRESULT + 180;
 
(*
* Operation could not be carried out because there is no stereo
* hardware present or available.
*)
DDERR_NOSTEREOHARDWARE = MAKE_DDHRESULT + 181;
 
(*
* Operation could not be carried out because there is no hardware
* present which supports stereo surfaces
*)
DDERR_NOSURFACELEFT = MAKE_DDHRESULT + 182;
 
(*
* no clip list available
*)
DDERR_NOCLIPLIST = MAKE_DDHRESULT + 205;
 
(*
* Operation could not be carried out because there is no color conversion
* hardware present or available.
*)
DDERR_NOCOLORCONVHW = MAKE_DDHRESULT + 210;
 
(*
* Create function called without DirectDraw object method SetCooperativeLevel
* being called.
*)
DDERR_NOCOOPERATIVELEVELSET = MAKE_DDHRESULT + 212;
 
(*
* Surface doesn't currently have a color key
*)
DDERR_NOCOLORKEY = MAKE_DDHRESULT + 215;
 
(*
* Operation could not be carried out because there is no hardware support
* of the dest color key.
*)
DDERR_NOCOLORKEYHW = MAKE_DDHRESULT + 220;
 
(*
* No DirectDraw support possible with current display driver
*)
DDERR_NODIRECTDRAWSUPPORT = MAKE_DDHRESULT + 222;
 
(*
* Operation requires the application to have exclusive mode but the
* application does not have exclusive mode.
*)
DDERR_NOEXCLUSIVEMODE = MAKE_DDHRESULT + 225;
 
(*
* Flipping visible surfaces is not supported.
*)
DDERR_NOFLIPHW = MAKE_DDHRESULT + 230;
 
(*
* There is no GDI present.
*)
DDERR_NOGDI = MAKE_DDHRESULT + 240;
 
(*
* Operation could not be carried out because there is no hardware present
* or available.
*)
DDERR_NOMIRRORHW = MAKE_DDHRESULT + 250;
 
(*
* Requested item was not found
*)
DDERR_NOTFOUND = MAKE_DDHRESULT + 255;
 
(*
* Operation could not be carried out because there is no overlay hardware
* present or available.
*)
DDERR_NOOVERLAYHW = MAKE_DDHRESULT + 260;
 
(*
* Operation could not be carried out because the source and destination
* rectangles are on the same surface and overlap each other.
*)
DDERR_OVERLAPPINGRECTS = MAKE_DDHRESULT + 270;
 
(*
* Operation could not be carried out because there is no appropriate raster
* op hardware present or available.
*)
DDERR_NORASTEROPHW = MAKE_DDHRESULT + 280;
 
(*
* Operation could not be carried out because there is no rotation hardware
* present or available.
*)
DDERR_NOROTATIONHW = MAKE_DDHRESULT + 290;
 
(*
* Operation could not be carried out because there is no hardware support
* for stretching
*)
DDERR_NOSTRETCHHW = MAKE_DDHRESULT + 310;
 
(*
* DirectDrawSurface is not in 4 bit color palette and the requested operation
* requires 4 bit color palette.
*)
DDERR_NOT4BITCOLOR = MAKE_DDHRESULT + 316;
 
(*
* DirectDrawSurface is not in 4 bit color index palette and the requested
* operation requires 4 bit color index palette.
*)
DDERR_NOT4BITCOLORINDEX = MAKE_DDHRESULT + 317;
 
(*
* DirectDraw Surface is not in 8 bit color mode and the requested operation
* requires 8 bit color.
*)
DDERR_NOT8BITCOLOR = MAKE_DDHRESULT + 320;
 
(*
* Operation could not be carried out because there is no texture mapping
* hardware present or available.
*)
DDERR_NOTEXTUREHW = MAKE_DDHRESULT + 330;
 
(*
* Operation could not be carried out because there is no hardware support
* for vertical blank synchronized operations.
*)
DDERR_NOVSYNCHW = MAKE_DDHRESULT + 335;
 
(*
* Operation could not be carried out because there is no hardware support
* for zbuffer blting.
*)
DDERR_NOZBUFFERHW = MAKE_DDHRESULT + 340;
 
(*
* Overlay surfaces could not be z layered based on their BltOrder because
* the hardware does not support z layering of overlays.
*)
DDERR_NOZOVERLAYHW = MAKE_DDHRESULT + 350;
 
(*
* The hardware needed for the requested operation has already been
* allocated.
*)
DDERR_OUTOFCAPS = MAKE_DDHRESULT + 360;
 
(*
* DirectDraw does not have enough memory to perform the operation.
*)
DDERR_OUTOFMEMORY = E_OUTOFMEMORY;
 
(*
* DirectDraw does not have enough memory to perform the operation.
*)
DDERR_OUTOFVIDEOMEMORY = MAKE_DDHRESULT + 380;
 
(*
* hardware does not support clipped overlays
*)
DDERR_OVERLAYCANTCLIP = MAKE_DDHRESULT + 382;
 
(*
* Can only have ony color key active at one time for overlays
*)
DDERR_OVERLAYCOLORKEYONLYONEACTIVE = MAKE_DDHRESULT + 384;
 
(*
* Access to this palette is being refused because the palette is already
* locked by another thread.
*)
DDERR_PALETTEBUSY = MAKE_DDHRESULT + 387;
 
(*
* No src color key specified for this operation.
*)
DDERR_COLORKEYNOTSET = MAKE_DDHRESULT + 400;
 
(*
* This surface is already attached to the surface it is being attached to.
*)
DDERR_SURFACEALREADYATTACHED = MAKE_DDHRESULT + 410;
 
(*
* This surface is already a dependency of the surface it is being made a
* dependency of.
*)
DDERR_SURFACEALREADYDEPENDENT = MAKE_DDHRESULT + 420;
 
(*
* Access to this surface is being refused because the surface is already
* locked by another thread.
*)
DDERR_SURFACEBUSY = MAKE_DDHRESULT + 430;
 
(*
* Access to this surface is being refused because no driver exists
* which can supply a pointer to the surface.
* This is most likely to happen when attempting to lock the primary
* surface when no DCI provider is present.
* Will also happen on attempts to lock an optimized surface.
*)
DDERR_CANTLOCKSURFACE = MAKE_DDHRESULT + 435;
 
(*
* Access to Surface refused because Surface is obscured.
*)
DDERR_SURFACEISOBSCURED = MAKE_DDHRESULT + 440;
 
(*
* Access to this surface is being refused because the surface is gone.
* The DIRECTDRAWSURFACE object representing this surface should
* have Restore called on it.
*)
DDERR_SURFACELOST = MAKE_DDHRESULT + 450;
 
(*
* The requested surface is not attached.
*)
DDERR_SURFACENOTATTACHED = MAKE_DDHRESULT + 460;
 
(*
* Height requested by DirectDraw is too large.
*)
DDERR_TOOBIGHEIGHT = MAKE_DDHRESULT + 470;
 
(*
* Size requested by DirectDraw is too large -- The individual height and
* width are OK.
*)
DDERR_TOOBIGSIZE = MAKE_DDHRESULT + 480;
 
(*
* Width requested by DirectDraw is too large.
*)
DDERR_TOOBIGWIDTH = MAKE_DDHRESULT + 490;
 
(*
* Action not supported.
*)
DDERR_UNSUPPORTED = E_NOTIMPL;
 
(*
* FOURCC format requested is unsupported by DirectDraw
*)
DDERR_UNSUPPORTEDFORMAT = MAKE_DDHRESULT + 510;
 
(*
* Bitmask in the pixel format requested is unsupported by DirectDraw
*)
DDERR_UNSUPPORTEDMASK = MAKE_DDHRESULT + 520;
 
(*
* The specified stream contains invalid data
*)
DDERR_INVALIDSTREAM = MAKE_DDHRESULT + 521;
 
(*
* vertical blank is in progress
*)
DDERR_VERTICALBLANKINPROGRESS = MAKE_DDHRESULT + 537;
 
(*
* Informs DirectDraw that the previous Blt which is transfering information
* to or from this Surface is incomplete.
*)
DDERR_WASSTILLDRAWING = MAKE_DDHRESULT + 540;
 
(*
* The specified surface type requires specification of the COMPLEX flag
*)
DDERR_DDSCAPSCOMPLEXREQUIRED = MAKE_DDHRESULT + 542;
 
(*
* Rectangle provided was not horizontally aligned on reqd. boundary
*)
DDERR_XALIGN = MAKE_DDHRESULT + 560;
 
(*
* The GUID passed to DirectDrawCreate is not a valid DirectDraw driver
* identifier.
*)
DDERR_INVALIDDIRECTDRAWGUID = MAKE_DDHRESULT + 561;
 
(*
* A DirectDraw object representing this driver has already been created
* for this process.
*)
DDERR_DIRECTDRAWALREADYCREATED = MAKE_DDHRESULT + 562;
 
(*
* A hardware only DirectDraw object creation was attempted but the driver
* did not support any hardware.
*)
DDERR_NODIRECTDRAWHW = MAKE_DDHRESULT + 563;
 
(*
* this process already has created a primary surface
*)
DDERR_PRIMARYSURFACEALREADYEXISTS = MAKE_DDHRESULT + 564;
 
(*
* software emulation not available.
*)
DDERR_NOEMULATION = MAKE_DDHRESULT + 565;
 
(*
* region passed to Clipper::GetClipList is too small.
*)
DDERR_REGIONTOOSMALL = MAKE_DDHRESULT + 566;
 
(*
* an attempt was made to set a clip list for a clipper objec that
* is already monitoring an hwnd.
*)
DDERR_CLIPPERISUSINGHWND = MAKE_DDHRESULT + 567;
 
(*
* No clipper object attached to surface object
*)
DDERR_NOCLIPPERATTACHED = MAKE_DDHRESULT + 568;
 
(*
* Clipper notification requires an HWND or
* no HWND has previously been set as the CooperativeLevel HWND.
*)
DDERR_NOHWND = MAKE_DDHRESULT + 569;
 
(*
* HWND used by DirectDraw CooperativeLevel has been subclassed,
* this prevents DirectDraw from restoring state.
*)
DDERR_HWNDSUBCLASSED = MAKE_DDHRESULT + 570;
 
(*
* The CooperativeLevel HWND has already been set.
* It can not be reset while the process has surfaces or palettes created.
*)
DDERR_HWNDALREADYSET = MAKE_DDHRESULT + 571;
 
(*
* No palette object attached to this surface.
*)
DDERR_NOPALETTEATTACHED = MAKE_DDHRESULT + 572;
 
(*
* No hardware support for 16 or 256 color palettes.
*)
DDERR_NOPALETTEHW = MAKE_DDHRESULT + 573;
 
(*
* If a clipper object is attached to the source surface passed into a
* BltFast call.
*)
DDERR_BLTFASTCANTCLIP = MAKE_DDHRESULT + 574;
 
(*
* No blter.
*)
DDERR_NOBLTHW = MAKE_DDHRESULT + 575;
 
(*
* No DirectDraw ROP hardware.
*)
DDERR_NODDROPSHW = MAKE_DDHRESULT + 576;
 
(*
* returned when GetOverlayPosition is called on a hidden overlay
*)
DDERR_OVERLAYNOTVISIBLE = MAKE_DDHRESULT + 577;
 
(*
* returned when GetOverlayPosition is called on a overlay that UpdateOverlay
* has never been called on to establish a destionation.
*)
DDERR_NOOVERLAYDEST = MAKE_DDHRESULT + 578;
 
(*
* returned when the position of the overlay on the destionation is no longer
* legal for that destionation.
*)
DDERR_INVALIDPOSITION = MAKE_DDHRESULT + 579;
 
(*
* returned when an overlay member is called for a non-overlay surface
*)
DDERR_NOTAOVERLAYSURFACE = MAKE_DDHRESULT + 580;
 
(*
* An attempt was made to set the cooperative level when it was already
* set to exclusive.
*)
DDERR_EXCLUSIVEMODEALREADYSET = MAKE_DDHRESULT + 581;
 
(*
* An attempt has been made to flip a surface that is not flippable.
*)
DDERR_NOTFLIPPABLE = MAKE_DDHRESULT + 582;
 
(*
* Can't duplicate primary & 3D surfaces, or surfaces that are implicitly
* created.
*)
DDERR_CANTDUPLICATE = MAKE_DDHRESULT + 583;
 
(*
* Surface was not locked. An attempt to unlock a surface that was not
* locked at all, or by this process, has been attempted.
*)
DDERR_NOTLOCKED = MAKE_DDHRESULT + 584;
 
(*
* Windows can not create any more DCs, or a DC was requested for a paltte-indexed
* surface when the surface had no palette AND the display mode was not palette-indexed
* (in this case DirectDraw cannot select a proper palette into the DC)
*)
DDERR_CANTCREATEDC = MAKE_DDHRESULT + 585;
 
(*
* No DC was ever created for this surface.
*)
DDERR_NODC = MAKE_DDHRESULT + 586;
 
(*
* This surface can not be restored because it was created in a different
* mode.
*)
DDERR_WRONGMODE = MAKE_DDHRESULT + 587;
 
(*
* This surface can not be restored because it is an implicitly created
* surface.
*)
DDERR_IMPLICITLYCREATED = MAKE_DDHRESULT + 588;
 
(*
* The surface being used is not a palette-based surface
*)
DDERR_NOTPALETTIZED = MAKE_DDHRESULT + 589;
 
(*
* The display is currently in an unsupported mode
*)
DDERR_UNSUPPORTEDMODE = MAKE_DDHRESULT + 590;
 
(*
* Operation could not be carried out because there is no mip-map
* texture mapping hardware present or available.
*)
DDERR_NOMIPMAPHW = MAKE_DDHRESULT + 591;
 
(*
* The requested action could not be performed because the surface was of
* the wrong type.
*)
DDERR_INVALIDSURFACETYPE = MAKE_DDHRESULT + 592;
 
(*
* Device does not support optimized surfaces, therefore no video memory optimized surfaces
*)
DDERR_NOOPTIMIZEHW = MAKE_DDHRESULT + 600;
 
(*
* Surface is an optimized surface, but has not yet been allocated any memory
*)
DDERR_NOTLOADED = MAKE_DDHRESULT + 601;
 
(*
* Attempt was made to create or set a device window without first setting
* the focus window
*)
DDERR_NOFOCUSWINDOW = MAKE_DDHRESULT + 602;
 
(*
* Attempt was made to set a palette on a mipmap sublevel
*)
DDERR_NOTONMIPMAPSUBLEVEL = MAKE_DDHRESULT + 603;
 
(*
* A DC has already been returned for this surface. Only one DC can be
* retrieved per surface.
*)
DDERR_DCALREADYCREATED = MAKE_DDHRESULT + 620;
 
(*
* An attempt was made to allocate non-local video memory from a device
* that does not support non-local video memory.
*)
DDERR_NONONLOCALVIDMEM = MAKE_DDHRESULT + 630;
 
(*
* The attempt to page lock a surface failed.
*)
DDERR_CANTPAGELOCK = MAKE_DDHRESULT + 640;
 
(*
* The attempt to page unlock a surface failed.
*)
DDERR_CANTPAGEUNLOCK = MAKE_DDHRESULT + 660;
 
(*
* An attempt was made to page unlock a surface with no outstanding page locks.
*)
DDERR_NOTPAGELOCKED = MAKE_DDHRESULT + 680;
 
(*
* There is more data available than the specified buffer size could hold
*)
DDERR_MOREDATA = MAKE_DDHRESULT + 690;
 
(*
* The data has expired and is therefore no longer valid.
*)
DDERR_EXPIRED = MAKE_DDHRESULT + 691;
 
(*
* The mode test has finished executing.
*)
DDERR_TESTFINISHED = MAKE_DDHRESULT + 692;
 
(*
* The mode test has switched to a new mode.
*)
DDERR_NEWMODE = MAKE_DDHRESULT + 693;
 
(*
* D3D has not yet been initialized.
*)
DDERR_D3DNOTINITIALIZED = MAKE_DDHRESULT + 694;
 
(*
* The video port is not active
*)
DDERR_VIDEONOTACTIVE = MAKE_DDHRESULT + 695;
 
(*
* The monitor does not have EDID data.
*)
DDERR_NOMONITORINFORMATION = MAKE_DDHRESULT + 696;
 
(*
* The driver does not enumerate display mode refresh rates.
*)
DDERR_NODRIVERSUPPORT = MAKE_DDHRESULT + 697;
 
(*
* Surfaces created by one direct draw device cannot be used directly by
* another direct draw device.
*)
DDERR_DEVICEDOESNTOWNSURFACE = MAKE_DDHRESULT + 699;
 
(*
* An attempt was made to invoke an interface member of a DirectDraw object
* created by CoCreateInstance() before it was initialized.
*)
DDERR_NOTINITIALIZED = CO_E_NOTINITIALIZED;
 
(* Alpha bit depth constants *)
 
(*
* API's
*)
 
type
HMonitor = THandle;
 
TDDEnumCallbackA = function(lpGUID: PGUID; lpDriverDescription: LPSTR;
lpDriverName: LPSTR; lpContext: Pointer): BOOL; stdcall;
LPDDENUMCALLBACKA = TDDEnumCallbackA;
TDDEnumCallbackA = function (lpGUID: PGUID; lpDriverDescription: PAnsiChar;
lpDriverName: PAnsiChar; lpContext: Pointer) : BOOL; stdcall;
TDDEnumCallbackW = function (lpGUID: PGUID; lpDriverDescription: PWideChar;
lpDriverName: PWideChar; lpContext: Pointer) : BOOL; stdcall;
{$IFDEF UNICODE}
TDDEnumCallback = TDDEnumCallbackW;
{$ELSE}
TDDEnumCallback = TDDEnumCallbackA;
{$ENDIF}
 
TDDEnumCallbackW = function(lpGUID: PGUID; lpDriverDescription: LPWSTR;
lpDriverName: LPWSTR; lpContext: Pointer): BOOL; stdcall;
LPDDENUMCALLBACKW = TDDEnumCallbackW;
TDDEnumCallbackExA = function (lpGUID: PGUID; lpDriverDescription: PAnsiChar;
lpDriverName: PAnsiChar; lpContext: Pointer; Monitor: HMonitor) : BOOL;
stdcall;
TDDEnumCallbackExW = function (lpGUID: PGUID; lpDriverDescription: PWideChar;
lpDriverName: PWideChar; lpContext: Pointer; Monitor: HMonitor) : BOOL;
stdcall;
 
TDDEnumCallback = TDDEnumCallbackA;
LPDDENUMCALLBACK = TDDEnumCallback;
{$IFDEF UNICODE}
TDDEnumCallbackEx = TDDEnumCallbackExW;
{$ELSE}
TDDEnumCallbackEx = TDDEnumCallbackExA;
{$ENDIF}
 
TDDEnumCallbackExA = function(lpGUID: PGUID; lpDriverDescription: LPSTR;
lpDriverName: LPSTR; lpContext: Pointer; Monitor: HMonitor): BOOL; stdcall;
LPDDENUMCALLBACKEXA = TDDEnumCallbackExA;
var
DirectDrawEnumerateA : function (lpCallback: TDDEnumCallbackA;
lpContext: Pointer) : HResult; stdcall;
DirectDrawEnumerateW : function (lpCallback: TDDEnumCallbackW;
lpContext: Pointer) : HResult; stdcall;
DirectDrawEnumerate : function (lpCallback: TDDEnumCallback;
lpContext: Pointer) : HResult; stdcall;
 
TDDEnumCallbackExW = function(lpGUID: PGUID; lpDriverDescription: LPWSTR;
lpDriverName: LPWSTR; lpContext: Pointer; Monitor: HMonitor): BOOL; stdcall;
LPDDENUMCALLBACKEXW = TDDEnumCallbackExW;
DirectDrawEnumerateExA : function (lpCallback: TDDEnumCallbackExA;
lpContext: Pointer; dwFlags: DWORD) : HResult; stdcall;
DirectDrawEnumerateExW : function (lpCallback: TDDEnumCallbackExW;
lpContext: Pointer; dwFlags: DWORD) : HResult; stdcall;
DirectDrawEnumerateEx : function (lpCallback: TDDEnumCallbackEx;
lpContext: Pointer; dwFlags: DWORD) : HResult; stdcall;
 
TDDEnumCallbackEx = TDDEnumCallbackExA;
LPDDENUMCALLBACKEX = TDDEnumCallbackEx;
DirectDrawCreate : function (lpGUID: PGUID;
out lplpDD: IDirectDraw;
pUnkOuter: IUnknown) : HResult; stdcall;
DirectDrawCreateEx : function (lpGUID: PGUID;
out lplpDD: IDirectDraw7; const iid: TGUID;
pUnkOuter: IUnknown) : HResult; stdcall;
DirectDrawCreateClipper : function (dwFlags: DWORD;
out lplpDDClipper: IDirectDrawClipper;
pUnkOuter: IUnknown) : HResult; stdcall;
 
const
(*
* Flags for DirectDrawEnumerateEx
* DirectDrawEnumerateEx supercedes DirectDrawEnumerate. You must use GetProcAddress to
* obtain a function pointer (of type LPDIRECTDRAWENUMERATEEX) to DirectDrawEnumerateEx.
* By default, only the primary display device is enumerated.
* DirectDrawEnumerate is equivalent to DirectDrawEnumerate(,,DDENUM_NONDISPLAYDEVICES)
*)
 
(*
* This flag causes enumeration of any GDI display devices which are part of
* the Windows Desktop
*)
DDENUM_ATTACHEDSECONDARYDEVICES = $00000001;
 
(*
* This flag causes enumeration of any GDI display devices which are not
* part of the Windows Desktop
*)
DDENUM_DETACHEDSECONDARYDEVICES = $00000002;
 
(*
* This flag causes enumeration of non-display devices
*)
DDENUM_NONDISPLAYDEVICES = $00000004;
 
REGSTR_KEY_DDHW_DESCRIPTION = 'Description';
REGSTR_KEY_DDHW_DRIVERNAME = 'DriverName';
REGSTR_PATH_DDHW = 'Hardware\DirectDrawDrivers';
2154,21 → 4872,14
DDCREATE_HARDWAREONLY = $00000001;
DDCREATE_EMULATIONONLY = $00000002;
 
function DirectDrawEnumerateA(lpCallback: TDDEnumCallbackA; lpContext: Pointer): HResult; stdcall;
function DirectDrawEnumerateW(lpCallback: TDDEnumCallbackW; lpContext: Pointer): HResult; stdcall;
function DirectDrawEnumerate(lpCallback: TDDEnumCallbackA; lpContext: Pointer): HResult; stdcall;
(*
* Macros for interpretting DDEVICEIDENTIFIER2.dwWHQLLevel
*)
function GET_WHQL_YEAR(dwWHQLLevel: DWORD) : DWORD;
function GET_WHQL_MONTH(dwWHQLLevel: DWORD) : DWORD;
function GET_WHQL_DAY(dwWHQLLevel: DWORD) : DWORD;
 
function DirectDrawEnumerateExA(lpCallback: TDDEnumCallbackExA; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function DirectDrawEnumerateExW(lpCallback: TDDEnumCallbackExW; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function DirectDrawEnumerateEx(lpCallback: TDDEnumCallbackExA; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
 
function DirectDrawCreate(lpGUID: PGUID; out lplpDD: IDirectDraw;
pUnkOuter: IUnknown): HResult; stdcall;
function DirectDrawCreateEx(lpGUID: PGUID; out lplpDD; const iid: TGUID;
pUnkOuter: IUnknown): HResult; stdcall;
function DirectDrawCreateClipper(dwFlags: DWORD; out lplpDDClipper: IDirectDrawClipper;
pUnkOuter: IUnknown): HResult; stdcall;
 
(*==========================================================================;
*
* Copyright (C) 1996-1997 Microsoft Corporation. All Rights Reserved.
2178,31 → 4889,45
*
***************************************************************************)
 
{ GUIDS used by DirectDrawVideoPort objects }
 
const
IID_IDDVideoPortContainer: TGUID = '{6C142760-A733-11CE-A521-0020AF0BE560}';
IID_IDirectDrawVideoPort: TGUID = '{B36D93E0-2B43-11CF-A2DE-00AA00B93356}';
(*
* GUIDS used by DirectDrawVideoPort objects
*)
DDVPTYPE_E_HREFH_VREFH: TGUID =
(D1:$54F39980;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
DDVPTYPE_E_HREFH_VREFL: TGUID =
(D1:$92783220;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
DDVPTYPE_E_HREFL_VREFH: TGUID =
(D1:$A07A02E0;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
DDVPTYPE_E_HREFL_VREFL: TGUID =
(D1:$E09C77E0;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
DDVPTYPE_CCIR656: TGUID =
(D1:$FCA326A0;D2:$DA60;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
DDVPTYPE_BROOKTREE: TGUID =
(D1:$1352A560;D2:$DA61;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
DDVPTYPE_PHILIPS: TGUID =
(D1:$332CF160;D2:$DA61;D3:$11CF;D4:($9B,$06,$00,$A0,$C9,$03,$A3,$B8));
 
DDVPTYPE_E_HREFH_VREFH: TGUID = '{54F39980-DA60-11CF-9B06-00A0C903A3B8}';
DDVPTYPE_E_HREFH_VREFL: TGUID = '{92783220-DA60-11CF-9B06-00A0C903A3B8}';
DDVPTYPE_E_HREFL_VREFH: TGUID = '{A07A02E0-DA60-11CF-9B06-00A0C903A3B8}';
DDVPTYPE_E_HREFL_VREFL: TGUID = '{E09C77E0-DA60-11CF-9B06-00A0C903A3B8}';
DDVPTYPE_CCIR656: TGUID = '{FCA326A0-DA60-11CF-9B06-00A0C903A3B8}';
DDVPTYPE_BROOKTREE: TGUID = '{1352A560-DA61-11CF-9B06-00A0C903A3B8}';
DDVPTYPE_PHILIPS: TGUID = '{332CF160-DA61-11CF-9B06-00A0C903A3B8}';
(*
* GUIDS used to describe connections
*)
 
{ DirectDraw Structures }
(*============================================================================
*
* DirectDraw Structures
*
* Various structures used to invoke DirectDraw.
*
*==========================================================================*)
 
type
IDDVideoPortContainer = interface;
IDirectDrawVideoPort = interface;
 
{ TDDVideoportConnect structure }
 
PDDVideoportConnect = ^TDDVideoportConnect;
TDDVideoportConnect = record
dwSize: DWORD; // size of the TDDVideoportConnect structure
(*
* TDDVideoPortConnect
*)
PDDVideoPortConnect = ^TDDVideoPortConnect;
TDDVideoPortConnect = packed record
dwSize: DWORD; // size of the TDDVideoPortConnect structure
dwPortWidth: DWORD; // Width of the video port
guidTypeID: TGUID; // Description of video port connection
dwFlags: DWORD; // Connection flags
2209,14 → 4934,12
dwReserved1: DWORD; // Reserved, set to zero.
end;
 
DDVIDEOPORTCONNECT = TDDVideoportConnect;
LPDDVIDEOPORTCONNECT = PDDVideoportConnect;
 
{ TDDVideoportCaps structure }
 
PDDVideoportCaps = ^TDDVideoportCaps;
TDDVideoportCaps = record
dwSize: DWORD; // size of the TDDVideoportCaps structure
(*
* TDDVideoPortCaps
*)
PDDVideoPortCaps = ^TDDVideoPortCaps;
TDDVideoPortCaps = packed record
dwSize: DWORD; // size of the TDDVideoPortCaps structure
dwFlags: DWORD; // indicates which fields contain data
dwMaxWidth: DWORD; // max width of the video port field
dwMaxVBIWidth: DWORD; // max width of the VBI data
2237,14 → 4960,59
wNumFilterTapsY: WORD; // Number of taps the prescaler uses in the Y direction (0 - no prescale, 1 - replication, etc.)
end;
 
DDVIDEOPORTCAPS = TDDVideoportCaps;
LPDDVIDEOPORTCAPS = PDDVideoportCaps;
const
(*
* The dwMaxWidth and dwMaxVBIWidth members are valid
*)
DDVPD_WIDTH = $00000001;
 
{ TDDVideoportDesc structure }
(*
* The dwMaxHeight member is valid
*)
DDVPD_HEIGHT = $00000002;
 
PDDVideoportDesc = ^TDDVideoportDesc;
TDDVideoportDesc = record
dwSize: DWORD; // size of the TDDVideoportDesc structure
(*
* The dwVideoPortID member is valid
*)
DDVPD_ID = $00000004;
 
(*
* The dwCaps member is valid
*)
DDVPD_CAPS = $00000008;
 
(*
* The dwFX member is valid
*)
DDVPD_FX = $00000010;
 
(*
* The dwNumAutoFlipSurfaces member is valid
*)
DDVPD_AUTOFLIP = $00000020;
 
(*
* All of the alignment members are valid
*)
DDVPD_ALIGN = $00000040;
 
(*
* The dwNumPreferredAutoflip member is valid
*)
DDVPD_PREFERREDAUTOFLIP = $00000080;
 
(*
* The wNumFilterTapsX and wNumFilterTapsY fields are valid
*)
DDVPD_FILTERQUALITY = $00000100;
 
type
(*
* TDDVideoPortDesc
*)
PDDVideoPortDesc = ^TDDVideoPortDesc;
TDDVideoPortDesc = packed record
dwSize: DWORD; // size of the TDDVideoPortDesc structure
dwFieldWidth: DWORD; // width of the video port field
dwVBIWidth: DWORD; // width of the VBI data
dwFieldHeight: DWORD; // height of the video port field
2252,18 → 5020,16
dwMaxPixelsPerSecond: DWORD; // Maximum pixel rate per second
dwVideoPortID: DWORD; // Video port ID (0 - (dwMaxVideoPorts -1))
dwReserved1: DWORD; // Reserved for future use - set to zero
VideoPortType: TDDVideoportConnect; // Description of video port connection
VideoPortType: TDDVideoPortConnect; // Description of video port connection
dwReserved2: DWORD; // Reserved for future use - set to zero
dwReserved3: DWORD; // Reserved for future use - set to zero
end;
 
DDVIDEOPORTDESC = TDDVideoportDesc;
LPDDVIDEOPORTDESC = PDDVideoportDesc;
 
{ TDDVideoportInfo structure }
 
PDDVideoportInfo = ^TDDVideoportInfo;
TDDVideoportInfo = record
(*
* TDDVideoPortInfo
*)
PDDVideoPortInfo = ^TDDVideoPortInfo;
TDDVideoPortInfo = packed record
dwSize: DWORD; // Size of the structure
dwOriginX: DWORD; // Placement of the video data within the surface.
dwOriginY: DWORD; // Placement of the video data within the surface.
2279,13 → 5045,11
dwReserved2: DWORD; // Reserved for future use - set to zero
end;
 
DDVIDEOPORTINFO = TDDVideoportInfo;
LPDDVIDEOPORTINFO = PDDVideoportInfo;
 
{ TDDVideoportBandWidth structure }
 
PDDVideoportBandWidth = ^TDDVideoportBandWidth;
TDDVideoportBandWidth = record
(*
* TDDVideoPortBandWidth
*)
PDDVideoPortBandWidth = ^TDDVideoPortBandWidth;
TDDVideoPortBandWidth = packed record
dwSize: DWORD; // Size of the structure
dwCaps: DWORD;
dwOverlay: DWORD; // Zoom factor at which overlay is supported
2296,226 → 5060,669
dwReserved2: DWORD; // Reserved for future use - set to zero
end;
 
DDVIDEOPORTBANDWIDTH = TDDVideoportBandWidth;
LPDDVIDEOPORTBANDWIDTH = PDDVideoportBandWidth;
 
{ TDDVideoportStatus structure }
 
PDDVideoportStatus = ^TDDVideoportStatus;
TDDVideoportStatus = record
(*
* TDDVideoPortStatus
*)
PDDVideoPortStatus = ^TDDVideoPortStatus;
TDDVideoPortStatus = record
dwSize: DWORD; // Size of the structure
bInUse: BOOL; // TRUE if video port is currently being used
dwFlags: DWORD; // Currently not used
dwReserved1: DWORD; // Reserved for future use
VideoPortType: TDDVideoportConnect; // Information about the connection
VideoPortType: TDDVideoPortConnect; // Information about the connection
dwReserved2: DWORD; // Reserved for future use
dwReserved3: DWORD; // Reserved for future use
end;
 
DDVIDEOPORTSTATUS = TDDVideoportStatus;
LPDDVIDEOPORTSTATUS = PDDVideoportStatus;
 
{ API's }
 
TDDEnumVideoCallback = function(const lpDDVideoPortCaps: TDDVideoportCaps;
lpContext: Pointer): HResult; stdcall;
LPDDENUMVIDEOCALLBACK = TDDEnumVideoCallback;
 
{ IDirectDrawVideoPortContainer Interface }
 
IDDVideoPortContainer = interface(IUnknown)
['{6C142760-A733-11CE-A521-0020AF0BE560}']
// IDDVideoPortContainer methods
function CreateVideoPort(dwFlags: DWORD; const lpDDVideoPortDesc:
TDDVideoportDesc; out lplpDDVideoPort: IDirectDrawVideoPort;
pUnkOuter: IUnknown): HResult; stdcall;
function EnumVideoPorts(dwFlags: DWORD;
const lpDDVideoPortCaps: TDDVideoportCaps; lpContext: Pointer;
lpEnumVideoCallback: TDDEnumVideoCallback): HResult; stdcall;
function GetVideoPortConnectInfo(dwPortId: DWORD; var lpNumEntries: DWORD;
var lpConnectInfo: TDDVideoportConnect): HResult; stdcall;
function QueryVideoPortStatus(dwPortId: DWORD;
var lpVPStatus: TDDVideoportStatus): HResult; stdcall;
end;
 
{ IDirectDrawVideoPort Interface }
 
IDirectDrawVideoPort = interface(IUnknown)
['{B36D93E0-2B43-11CF-A2DE-00AA00B93356}']
// IDirectDrawVideoPort methods
function Flip(lpDDSurface: IDirectDrawSurface; dwFlags: DWORD): HResult; stdcall;
function GetBandwidthInfo(const lpddpfFormat: TDDPixelFormat; dwWidth: DWORD;
dwHeight: DWORD; dwFlags: DWORD; var lpBandwidth: TDDVideoportBandWidth): HResult; stdcall;
function GetColorControls(var lpColorControl: TDDColorControl): HResult; stdcall;
function GetInputFormats(var lpNumFormats: DWORD; var lpFormats:
TDDPixelFormat; dwFlags: DWORD): HResult; stdcall;
function GetOutputFormats(const lpInputFormat: TDDPixelFormat;
var lpNumFormats: DWORD; var lpFormats: TDDPixelFormat; dwFlags: DWORD): HResult; stdcall;
function GetFieldPolarity(var lpbVideoField: BOOL): HResult; stdcall;
function GetVideoLine(var lpdwLine: DWORD): HResult; stdcall;
function GetVideoSignalStatus(varlpdwStatus: DWORD): HResult; stdcall;
function SetColorControls(const lpColorControl: TDDColorControl): HResult; stdcall;
function SetTargetSurface(lpDDSurface: IDirectDrawSurface; dwFlags: DWORD): HResult; stdcall;
function StartVideo(const lpVideoInfo: TDDVideoportInfo): HResult; stdcall;
function StopVideo: HResult; stdcall;
function UpdateVideo(const lpVideoInfo: TDDVideoportInfo): HResult; stdcall;
function WaitForSync(dwFlags: DWORD; dwLine: DWORD; dwTimeout: DWORD): HResult; stdcall;
end;
 
 
const
{ Video Port Flags }
(*============================================================================
*
* Video Port Flags
*
* All flags are bit flags.
*
*==========================================================================*)
 
DDVPD_WIDTH = $00000001;
DDVPD_HEIGHT = $00000002;
DDVPD_ID = $00000004;
DDVPD_CAPS = $00000008;
DDVPD_FX = $00000010;
DDVPD_AUTOFLIP = $00000020;
DDVPD_ALIGN = $00000040;
DDVPD_PREFERREDAUTOFLIP = $00000080;
DDVPD_FILTERQUALITY = $00000100;
(****************************************************************************
*
* VIDEOPORT TDDVideoPortConnect FLAGS
*
****************************************************************************)
 
{ TDDVideoportConnect flags }
(*
* When this is set by the driver and passed to the client, this
* indicates that the video port is capable of double clocking the data.
* When this is set by the client, this indicates that the video port
* should enable double clocking. This flag is only valid with external
* syncs.
*)
DDVPCONNECT_DOUBLECLOCK = $00000001;
 
DDVPCONNECT_DOUBLECLOCK = $00000001;
(*
* When this is set by the driver and passed to the client, this
* indicates that the video port is capable of using an external VACT
* signal. When this is set by the client, this indicates that the
* video port should use the external VACT signal.
*)
DDVPCONNECT_VACT = $00000002;
 
(*
* When this is set by the driver and passed to the client, this
* indicates that the video port is capable of treating even fields
* like odd fields and visa versa. When this is set by the client,
* this indicates that the video port should treat even fields like odd
* fields.
*)
DDVPCONNECT_INVERTPOLARITY = $00000004;
 
(*
* Indicates that any data written to the video port during the VREF
* period will not be written into the frame buffer. This flag is read only.
*)
DDVPCONNECT_DISCARDSVREFDATA = $00000008;
 
(*
* When this is set be the driver and passed to the client, this
* indicates that the device will write half lines into the frame buffer
* if half lines are provided by the decoder. If this is set by the client,
* this indicates that the decoder will be supplying half lines.
*)
DDVPCONNECT_HALFLINE = $00000010;
 
(*
* Indicates that the signal is interlaced. This flag is only
* set by the client.
*)
DDVPCONNECT_INTERLACED = $00000020;
 
(*
* Indicates that video port is shareable and that this video port
* will use the even fields. This flag is only set by the client.
*)
DDVPCONNECT_SHAREEVEN = $00000040;
 
(*
* Indicates that video port is shareable and that this video port
* will use the odd fields. This flag is only set by the client.
*)
DDVPCONNECT_SHAREODD = $00000080;
 
{ TDDVideoportDesc caps }
(****************************************************************************
*
* VIDEOPORT TDDVideoPortDesc CAPS
*
****************************************************************************)
 
(*
* Flip can be performed automatically to avoid tearing.
*)
DDVPCAPS_AUTOFLIP = $00000001;
 
(*
* Supports interlaced video
*)
DDVPCAPS_INTERLACED = $00000002;
 
(*
* Supports non-interlaced video
*)
DDVPCAPS_NONINTERLACED = $00000004;
 
(*
* Indicates that the device can return whether the current field
* of an interlaced signal is even or odd.
*)
DDVPCAPS_READBACKFIELD = $00000008;
 
(*
* Indicates that the device can return the current line of video
* being written into the frame buffer.
*)
DDVPCAPS_READBACKLINE = $00000010;
 
(*
* Allows two gen-locked video streams to share a single video port,
* where one stream uses the even fields and the other uses the odd
* fields. Separate parameters (including address, scaling,
* cropping, etc.) are maintained for both fields.)
*)
DDVPCAPS_SHAREABLE = $00000020;
 
(*
* Even fields of video can be automatically discarded.
*)
DDVPCAPS_SKIPEVENFIELDS = $00000040;
 
(*
* Odd fields of video can be automatically discarded.
*)
DDVPCAPS_SKIPODDFIELDS = $00000080;
 
(*
* Indicates that the device is capable of driving the graphics
* VSYNC with the video port VSYNC.
*)
DDVPCAPS_SYNCMASTER = $00000100;
 
(*
* Indicates that data within the vertical blanking interval can
* be written to a different surface.
*)
DDVPCAPS_VBISURFACE = $00000200;
 
(*
* Indicates that the video port can perform color operations
* on the incoming data before it is written to the frame buffer.
*)
DDVPCAPS_COLORCONTROL = $00000400;
 
(*
* Indicates that the video port can accept VBI data in a different
* width or format than the regular video data.
*)
DDVPCAPS_OVERSAMPLEDVBI = $00000800;
 
(*
* Indicates that the video port can write data directly to system memory
*)
DDVPCAPS_SYSTEMMEMORY = $00001000;
 
(*
* Indicates that the VBI and video portions of the video stream can
* be controlled by an independent processes.
*)
DDVPCAPS_VBIANDVIDEOINDEPENDENT = $00002000;
 
(*
* Indicates that the video port contains high quality hardware
* de-interlacing hardware that should be used instead of the
* bob/weave algorithms.
*)
DDVPCAPS_HARDWAREDEINTERLACE = $00004000;
 
{ TDDVideoportDesc FX }
(****************************************************************************
*
* VIDEOPORT TDDVideoPortDesc FX
*
****************************************************************************)
 
(*
* Limited cropping is available to crop out the vertical interval data.
*)
DDVPFX_CROPTOPDATA = $00000001;
 
(*
* Incoming data can be cropped in the X direction before it is written
* to the surface.
*)
DDVPFX_CROPX = $00000002;
 
(*
* Incoming data can be cropped in the Y direction before it is written
* to the surface.
*)
DDVPFX_CROPY = $00000004;
 
(*
* Supports interleaving interlaced fields in memory.
*)
DDVPFX_INTERLEAVE = $00000008;
 
(*
* Supports mirroring left to right as the video data is written
* into the frame buffer.
*)
DDVPFX_MIRRORLEFTRIGHT = $00000010;
 
(*
* Supports mirroring top to bottom as the video data is written
* into the frame buffer.
*)
DDVPFX_MIRRORUPDOWN = $00000020;
 
(*
* Data can be arbitrarily shrunk in the X direction before it
* is written to the surface.
*)
DDVPFX_PRESHRINKX = $00000040;
 
(*
* Data can be arbitrarily shrunk in the Y direction before it
* is written to the surface.
*)
DDVPFX_PRESHRINKY = $00000080;
 
(*
* Data can be binary shrunk (1/2, 1/4, 1/8, etc.) in the X
* direction before it is written to the surface.
*)
DDVPFX_PRESHRINKXB = $00000100;
 
(*
* Data can be binary shrunk (1/2, 1/4, 1/8, etc.) in the Y
* direction before it is written to the surface.
*)
DDVPFX_PRESHRINKYB = $00000200;
 
(*
* Data can be shrunk in increments of 1/x in the X direction
* (where X is specified in the TDDVideoPortCaps.dwPreshrinkXStep)
* before it is written to the surface.
*)
DDVPFX_PRESHRINKXS = $00000400;
 
(*
* Data can be shrunk in increments of 1/x in the Y direction
* (where X is specified in the TDDVideoPortCaps.dwPreshrinkYStep)
* before it is written to the surface.
*)
DDVPFX_PRESHRINKYS = $00000800;
 
(*
* Data can be arbitrarily stretched in the X direction before
* it is written to the surface.
*)
DDVPFX_PRESTRETCHX = $00001000;
 
(*
* Data can be arbitrarily stretched in the Y direction before
* it is written to the surface.
*)
DDVPFX_PRESTRETCHY = $00002000;
 
(*
* Data can be integer stretched in the X direction before it is
* written to the surface.
*)
DDVPFX_PRESTRETCHXN = $00004000;
 
(*
* Data can be integer stretched in the Y direction before it is
* written to the surface.
*)
DDVPFX_PRESTRETCHYN = $00008000;
 
(*
* Indicates that data within the vertical blanking interval can
* be converted independently of the remaining video data.
*)
DDVPFX_VBICONVERT = $00010000;
 
(*
* Indicates that scaling can be disabled for data within the
* vertical blanking interval.
*)
DDVPFX_VBINOSCALE = $00020000;
 
(*
* Indicates that the video data can ignore the left and right
* cropping coordinates when cropping oversampled VBI data.
*)
DDVPFX_IGNOREVBIXCROP = $00040000;
 
(*
* Indicates that interleaving can be disabled for data within the
* vertical blanking interval.
*)
DDVPFX_VBINOINTERLEAVE = $00080000;
 
{ TDDVideoportInfo flags }
(****************************************************************************
*
* VIDEOPORT TDDVideoPortInfo FLAGS
*
****************************************************************************)
 
(*
* Perform automatic flipping. Auto-flipping is performed between
* the overlay surface that was attached to the video port using
* IDirectDrawVideoPort::AttachSurface and the overlay surfaces that
* are attached to the surface via the IDirectDrawSurface::AttachSurface
* method. The flip order is the order in which the overlay surfaces
* were. attached.
*)
DDVP_AUTOFLIP = $00000001;
 
(*
* Perform conversion using the ddpfOutputFormat information.
*)
DDVP_CONVERT = $00000002;
 
(*
* Perform cropping using the specified rectangle.
*)
DDVP_CROP = $00000004;
 
(*
* Indicates that interlaced fields should be interleaved in memory.
*)
DDVP_INTERLEAVE = $00000008;
 
(*
* Indicates that the data should be mirrored left to right as it's
* written into the frame buffer.
*)
DDVP_MIRRORLEFTRIGHT = $00000010;
 
(*
* Indicates that the data should be mirrored top to bottom as it's
* written into the frame buffer.
*)
DDVP_MIRRORUPDOWN = $00000020;
 
(*
* Perform pre-scaling/zooming based on the pre-scale parameters.
*)
DDVP_PRESCALE = $00000040;
 
(*
* Ignore input of even fields.
*)
DDVP_SKIPEVENFIELDS = $00000080;
 
(*
* Ignore input of odd fields.
*)
DDVP_SKIPODDFIELDS = $00000100;
 
(*
* Drive the graphics VSYNCs using the video port VYSNCs.
*)
DDVP_SYNCMASTER = $00000200;
 
(*
* The ddpfVBIOutputFormatFormat member contains data that should be used
* to convert the data within the vertical blanking interval.
*)
DDVP_VBICONVERT = $00000400;
 
(*
* Indicates that data within the vertical blanking interval
* should not be scaled.
*)
DDVP_VBINOSCALE = $00000800;
 
(*
* Indicates that these bob/weave decisions should not be
* overriden by other interfaces.
*)
DDVP_OVERRIDEBOBWEAVE = $00001000;
 
(*
* Indicates that the video data should ignore the left and right
* cropping coordinates when cropping the VBI data.
*)
DDVP_IGNOREVBIXCROP = $00002000;
 
(*
* Indicates that interleaving can be disabled for data within the
* vertical blanking interval.
*)
DDVP_VBINOINTERLEAVE = $00004000;
 
(*
* Indicates that the video port should use the hardware
* de-interlacing hardware.
*)
DDVP_HARDWAREDEINTERLACE = $00008000;
 
{ DirectDrawVideoport GetInputFormat/GetOutputFormat flags }
(****************************************************************************
*
* DIRIRECTDRAWVIDEOPORT GETINPUTFORMAT/GETOUTPUTFORMAT FLAGS
*
****************************************************************************)
 
(*
* Return formats for the video data
*)
DDVPFORMAT_VIDEO = $00000001;
 
(*
* Return formats for the VBI data
*)
DDVPFORMAT_VBI = $00000002;
 
{ DirectDrawVideoport SetTargetSurface flags }
(****************************************************************************
*
* DIRIRECTDRAWVIDEOPORT SETTARGETSURFACE FLAGS
*
****************************************************************************)
 
(*
* Surface should receive video data (and VBI data if a surface
* is not explicitly attached for that purpose)
*)
DDVPTARGET_VIDEO = $00000001;
 
(*
* Surface should receive VBI data
*)
DDVPTARGET_VBI = $00000002;
 
{ DirectDrawVideoport WaitForSync flags }
(****************************************************************************
*
* DIRIRECTDRAWVIDEOPORT WAITFORSYNC FLAGS
*
****************************************************************************)
 
(*
* Waits until the beginning of the next VSYNC
*)
DDVPWAIT_BEGIN = $00000001;
 
(*
* Waits until the end of the next/current VSYNC
*)
DDVPWAIT_END = $00000002;
 
(*
* Waits until the beginning of the specified line
*)
DDVPWAIT_LINE = $00000003;
 
{ DirectDrawVideoport flip flags }
(****************************************************************************
*
* DIRECTDRAWVIDEOPORT FLIP FLAGS
*
****************************************************************************)
 
(*
* Flips the normal video surface
*)
DDVPFLIP_VIDEO = $00000001;
 
(*
* Flips the VBI surface
*)
DDVPFLIP_VBI = $00000002;
 
{ DirectDrawVideoport GetVideoSiginalStatus values }
(****************************************************************************
*
* DIRIRECTDRAWVIDEOPORT GETVIDEOSIGNALSTATUS VALUES
*
****************************************************************************)
 
(*
* No video signal is present at the video port
*)
DDVPSQ_NOSIGNAL = $00000001;
 
(*
* A valid video signal is present at the video port
*)
DDVPSQ_SIGNALOK = $00000002;
 
{ TDDVideoportBandWidth Flags }
(****************************************************************************
*
* VIDEOPORTBANDWIDTH Flags
*
****************************************************************************)
 
(*
* The specified height/width refer to the size of the video port data
* written into memory, after prescaling has occured.
*)
DDVPB_VIDEOPORT = $00000001;
 
(*
* The specified height/width refer to the source size of the overlay.
*)
DDVPB_OVERLAY = $00000002;
 
(*
* This is a query for the device to return which caps this device requires.
*)
DDVPB_TYPE = $00000004;
 
{ TDDVideoportBandWidth Caps }
(****************************************************************************
*
* VIDEOPORTBANDWIDTH Caps
*
****************************************************************************)
 
(*
* The bandwidth for this device is dependant on the overlay source size.
*)
DDVPBCAPS_SOURCE = $00000001;
 
(*
* The bandwidth for this device is dependant on the overlay destination
* size.
*)
DDVPBCAPS_DESTINATION = $00000002;
 
{ IDDVideoportContainer.CreateVideoPort flags }
(****************************************************************************
*
* DDVIDEOPORTCONTAINER CreateVideoPort flags
*
****************************************************************************)
 
(*
* The process only wants to control the VBI portion of the video stream.
*)
DDVPCREATE_VBIONLY = $00000001;
 
(*
* The process only wants to control the non-VBI (video) portion of
* the video stream.
*)
DDVPCREATE_VIDEOONLY = $00000002;
 
{ TDDVideoportStatus flags }
(****************************************************************************
*
* DDVIDEOPORTSTATUS flags
*
****************************************************************************)
 
(*
* The video port interface is only controlling the VBI portion of the
* video stream
*)
DDVPSTATUS_VBIONLY = $00000001;
 
(*
* The video port interface is only controlling the video portion of the
* video stream
*)
DDVPSTATUS_VIDEOONLY = $00000002;
 
 
type
(*
* API's
*)
 
TDDEnumVideoCallback = function (lpTDDVideoPortCaps: PDDVideoPortCaps;
lpContext: Pointer) : HResult; stdcall;
 
(*
* INTERACES FOLLOW:
* IDirectDrawVideoPort
* IVideoPort
*)
 
 
(*
* IDirectDrawVideoPort
*)
IDirectDrawVideoPort = interface (IUnknown)
['{B36D93E0-2B43-11CF-A2DE-00AA00B93356}']
(*** IDirectDrawVideoPort methods ***)
function Flip(lpDDSurface: IDirectDrawSurface; dwFlags: DWORD) : HResult; stdcall;
function GetBandwidthInfo(var lpddpfFormat: TDDPixelFormat;
dwWidth: DWORD; dwHeight: DWORD; dwFlags: DWORD;
var lpBandwidth: TDDVideoPortBandWidth) : HResult; stdcall;
function GetColorControls(var lpColorControl: TDDColorControl) : HResult; stdcall;
function GetInputFormats(var lpNumFormats: DWORD; var lpFormats:
TDDPixelFormat; dwFlags: DWORD) : HResult; stdcall;
function GetOutputFormats(var lpInputFormat: TDDPixelFormat;
var lpNumFormats: DWORD; lpFormats: PDDPixelFormat; dwFlags: DWORD)
: HResult; stdcall;
function GetFieldPolarity(var lpbVideoField: BOOL) : HResult; stdcall;
function GetVideoLine(var lpdwLine: DWORD) : HResult; stdcall;
function GetVideoSignalStatus(varlpdwStatus: DWORD) : HResult; stdcall;
function SetColorControls(var lpColorControl: TDDColorControl) : HResult; stdcall;
function SetTargetSurface(lpDDSurface: IDirectDrawSurface; dwFlags: DWORD) :
HResult; stdcall;
function StartVideo(var lpVideoInfo: TDDVideoPortInfo) : HResult; stdcall;
function StopVideo: HResult; stdcall;
function UpdateVideo(var lpVideoInfo: TDDVideoPortInfo) : HResult; stdcall;
function WaitForSync(dwFlags: DWORD; dwLine: DWORD; dwTimeout: DWORD) :
HResult; stdcall;
end;
 
(*
* IDirectDrawVideoPortContainer
*)
IDDVideoPortContainer = interface (IUnknown)
['{6C142760-A733-11CE-A521-0020AF0BE560}']
(*** IDDVideoPortContainer methods ***)
function CreateVideoPort(dwFlags: DWORD; var lpTDDVideoPortDesc:
TDDVideoPortDesc; var lplpDDVideoPort: IDirectDrawVideoPort;
pUnkOuter: IUnknown) : HResult; stdcall;
function EnumVideoPorts(dwFlags: DWORD;
lpTDDVideoPortCaps: PDDVideoPortCaps; lpContext: Pointer;
lpEnumVideoCallback: TDDEnumVideoCallback) : HResult; stdcall;
function GetVideoPortConnectInfo(dwPortId: DWORD; var lpNumEntries: DWORD;
lpConnectInfo: PDDVideoPortConnect) : HResult; stdcall;
function QueryVideoPortStatus(dwPortId: DWORD;
var lpVPStatus: TDDVideoPortStatus) : HResult; stdcall;
end;
 
IID_IDDVideoPortContainer = IDDVideoPortContainer;
IID_IDirectDrawVideoPort = IDirectDrawVideoPort;
 
 
//Direct3D file
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
* Copyright (C) 1995-1998 Microsoft Corporation. All Rights Reserved.
*
* File: d3dtypes.h
* Content: Direct3D types include file
* Files: d3dtypes.h d3dcaps.h d3d.h
*
* DirectX 7.0 Delphi adaptation by Erik Unger
*
* Modyfied: 26-Jun-2000
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: DelphiDirectX@next-reality.com
*
***************************************************************************)
 
(* TD3DValue is the fundamental Direct3D fractional data type *)
 
type
TRefClsID = TGUID;
 
type
TD3DValue = Single;
D3DValue = TD3DValue;
 
TD3DFixed = Longint;
D3DFIXED = TD3DFixed;
 
TD3DFixed = LongInt;
float = TD3DValue;
PD3DColor = ^TD3DColor;
TD3DColor = DWORD;
D3DCOLOR = TD3DColor;
 
function D3DVALP(val: TD3DValue; prec: Integer): TD3DValue;
function D3DVAL(val: TD3DValue): TD3DValue;
function D3DDivide(a, b: TD3DValue): TD3DValue;
function D3DMultiply(a, b: TD3DValue): TD3DValue;
function D3DVal(val: variant) : float;
function D3DDivide(a,b: double) : float;
function D3DMultiply(a,b: double) : float;
 
(*
* Format of CI colors is
2524,13 → 5731,24
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*)
 
function CI_GETALPHA(ci: Integer): Byte;
function CI_GETINDEX(ci: Integer): Word;
function CI_GETFRACTION(ci: Integer): Byte;
function CI_ROUNDINDEX(ci: Integer): Integer;
function CI_MASKALPHA(ci: Integer): Integer;
function CI_MAKE(a: Byte; i: Word; f: Byte): Integer;
// #define CI_GETALPHA(ci) ((ci) >> 24)
function CI_GETALPHA(ci: DWORD) : DWORD;
 
// #define CI_GETINDEX(ci) (((ci) >> 8) & 0xffff)
function CI_GETINDEX(ci: DWORD) : DWORD;
 
// #define CI_GETFRACTION(ci) ((ci) & 0xff)
function CI_GETFRACTION(ci: DWORD) : DWORD;
 
// #define CI_ROUNDINDEX(ci) CI_GETINDEX((ci) + 0x80)
function CI_ROUNDINDEX(ci: DWORD) : DWORD;
 
// #define CI_MASKALPHA(ci) ((ci) & 0xffffff)
function CI_MASKALPHA(ci: DWORD) : DWORD;
 
// #define CI_MAKE(a, i, f) (((a) << 24) | ((i) << 8) | (f))
function CI_MAKE(a,i,f: DWORD) : DWORD;
 
(*
* Format of RGBA colors is
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2538,19 → 5756,35
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*)
 
function RGBA_GETALPHA(rgb: TD3DColor): Byte;
function RGBA_GETRED(rgb: TD3DColor): Byte;
function RGBA_GETGREEN(rgb: TD3DColor): Byte;
function RGBA_GETBLUE(rgb: TD3DColor): Byte;
function RGBA_MAKE(r, g, b, a: Byte): TD3DColor;
// #define RGBA_GETALPHA(rgb) ((rgb) >> 24)
function RGBA_GETALPHA(rgb: TD3DColor) : DWORD;
 
// #define RGBA_GETRED(rgb) (((rgb) >> 16) & 0xff)
function RGBA_GETRED(rgb: TD3DColor) : DWORD;
 
// #define RGBA_GETGREEN(rgb) (((rgb) >> 8) & 0xff)
function RGBA_GETGREEN(rgb: TD3DColor) : DWORD;
 
// #define RGBA_GETBLUE(rgb) ((rgb) & 0xff)
function RGBA_GETBLUE(rgb: TD3DColor) : DWORD;
 
// #define RGBA_MAKE(r, g, b, a) ((TD3DColor) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
function RGBA_MAKE(r, g, b, a: DWORD) : TD3DColor;
 
(* D3DRGB and D3DRGBA may be used as initialisers for D3DCOLORs
* The float values must be in the range 0..1
*)
 
function D3DRGB(r, g, b: TD3DValue): TD3DColor;
function D3DRGBA(r, g, b, a: TD3DValue): TD3DColor;
// #define D3DRGB(r, g, b) \
// (0xff000000L | (((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255))
function D3DRGB(r, g, b: float) : TD3DColor;
 
// #define D3DRGBA(r, g, b, a) \
// ( (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) \
// | (((long)((g) * 255)) << 8) | (long)((b) * 255) \
// )
function D3DRGBA(r, g, b, a: float) : TD3DColor;
 
(*
* Format of RGB colors is
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2558,44 → 5792,64
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*)
 
function RGB_GETRED(rgb: TD3DColor): Byte;
function RGB_GETGREEN(rgb: TD3DColor): Byte;
function RGB_GETBLUE(rgb: TD3DColor): Byte;
function RGBA_SETALPHA(rgba: TD3DColor; x: Byte): TD3DColor;
function RGB_MAKE(r, g, b: Byte): TD3DColor;
// #define RGB_GETRED(rgb) (((rgb) >> 16) & 0xff)
function RGB_GETRED(rgb: TD3DColor) : DWORD;
 
// #define RGB_GETGREEN(rgb) (((rgb) >> 8) & 0xff)
function RGB_GETGREEN(rgb: TD3DColor) : DWORD;
 
// #define RGB_GETBLUE(rgb) ((rgb) & 0xff)
function RGB_GETBLUE(rgb: TD3DColor) : DWORD;
 
// #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
function RGBA_SETALPHA(rgba: TD3DColor; x: DWORD) : TD3DColor;
 
// #define RGB_MAKE(r, g, b) ((TD3DColor) (((r) << 16) | ((g) << 8) | (b)))
function RGB_MAKE(r, g, b: DWORD) : TD3DColor;
 
// #define RGBA_TORGB(rgba) ((TD3DColor) ((rgba) & 0xffffff))
function RGBA_TORGB(rgba: TD3DColor): TD3DColor;
 
// #define RGB_TORGBA(rgb) ((TD3DColor) ((rgb) | 0xff000000))
function RGB_TORGBA(rgb: TD3DColor): TD3DColor;
 
(*
* Flags for Enumerate functions
*)
const
{ Flags for Enumerate functions }
 
(*
* Stop the enumeration
*)
 
D3DENUMRET_CANCEL = DDENUMRET_CANCEL;
 
(*
* Continue the enumeration
*)
 
D3DENUMRET_OK = DDENUMRET_OK;
 
type
TD3DValidateCallback = function(lpUserArg: Pointer; dwOffset: DWORD): HResult; stdcall;
LPD3DVALIDATECALLBACK = TD3DValidateCallback;
 
TD3DEnumTextureFormatsCalback = function(const lpDdsd: TDDSurfaceDesc;
TD3DValidateCallback = function (lpUserArg: Pointer;
dwOffset: DWORD): HResult; stdcall;
TD3DEnumTextureFormatsCallback = function (var lpDdsd: TDDSurfaceDesc;
lpContext: Pointer): HResult; stdcall;
LPD3DENUMTEXTUREFORMATSCALLBACK = TD3DEnumTextureFormatsCalback;
 
TD3DEnumPixelFormatsCallback = function(const lpDDPixFmt: TDDPixelFormat;
TD3DEnumPixelFormatsCallback = function (var lpDDPixFmt: TDDPixelFormat;
lpContext: Pointer): HResult; stdcall;
 
 
PD3DMaterialHandle = ^TD3DMaterialHandle;
TD3DMaterialHandle = DWORD;
D3DMATERIALHANDLE = TD3DMaterialHandle;
 
PD3DTextureHandle = ^TD3DTextureHandle;
TD3DTextureHandle = DWORD;
D3DTEXTUREHANDLE = TD3DTextureHandle;
 
PD3DMatrixHandle = ^TD3DMatrixHandle;
TD3DMatrixHandle = DWORD;
D3DMATRIXHANDLE = TD3DMatrixHandle;
 
{ TD3DColorValue structure }
 
PD3DColorValue = ^TD3DColorValue;
TD3DColorValue = record
TD3DColorValue = packed record
case Integer of
0: (
r: TD3DValue;
2611,34 → 5865,28
);
end;
 
D3DCOLORVALUE = TD3DColorValue;
 
{ TD3DRect structure }
 
PD3DRect = ^TD3DRect;
TD3DRect = record
TD3DRect = packed record
case Integer of
0: (
x1: Longint;
y1: Longint;
x2: Longint;
y2: Longint;
x1: LongInt;
y1: LongInt;
x2: LongInt;
y2: LongInt;
);
1: (
lX1: Longint;
lY1: Longint;
lX2: Longint;
lY2: Longint;
lX1: LongInt;
lY1: LongInt;
lX2: LongInt;
lY2: LongInt;
);
2: (
a: array[0..3] of LongInt;
);
end;
 
D3DRECT = TD3DRect;
LPD3DRECT = PD3DRect;
 
{ TD3DVector structure }
 
PD3DVector = ^TD3DVector;
TD3DVector = record
TD3DVector = packed record
case Integer of
0: (
x: TD3DValue;
2652,18 → 5900,25
);
end;
 
D3DVECTOR = TD3DVector;
LPD3DVECTOR = PD3DVector;
(******************************************************************
* *
* D3DVec.inl *
* *
* Float-valued 3D vector class for Direct3D. *
* *
* Copyright (c) 1996-1998 Microsoft Corp. All rights reserved. *
* *
******************************************************************)
 
// Addition and subtraction
function VectorAdd(v1, v2: TD3DVector) : TD3DVector;
function VectorSub(v1, v2: TD3DVector) : TD3DVector;
function VectorAdd(const v1, v2: TD3DVector) : TD3DVector;
function VectorSub(const v1, v2: TD3DVector) : TD3DVector;
// Scalar multiplication and division
function VectorMulS(v: TD3DVector; s: TD3DValue) : TD3DVector;
function VectorDivS(v: TD3DVector; s: TD3DValue) : TD3DVector;
function VectorMulS(const v: TD3DVector; s: TD3DValue) : TD3DVector;
function VectorDivS(const v: TD3DVector; s: TD3DValue) : TD3DVector;
// Memberwise multiplication and division
function VectorMul(v1, v2: TD3DVector) : TD3DVector;
function VectorDiv(v1, v2: TD3DVector) : TD3DVector;
function VectorMul(const v1, v2: TD3DVector) : TD3DVector;
function VectorDiv(const v1, v2: TD3DVector) : TD3DVector;
// Vector dominance
function VectorSmaller(v1, v2: TD3DVector) : boolean;
function VectorSmallerEquel(v1, v2: TD3DVector) : boolean;
2673,25 → 5928,29
function VectorSquareMagnitude(v: TD3DVector) : TD3DValue;
function VectorMagnitude(v: TD3DVector) : TD3DValue;
// Returns vector with same direction and unit length
function VectorNormalize(v: TD3DVector) : TD3DVector;
function VectorNormalize(const v: TD3DVector) : TD3DVector;
// Return min/max component of the input vector
function VectorMin(v: TD3DVector) : TD3DValue;
function VectorMax(v: TD3DVector) : TD3DValue;
// Return memberwise min/max of input vectors
function VectorMinimize(v1, v2: TD3DVector) : TD3DVector;
function VectorMaximize(v1, v2: TD3DVector) : TD3DVector;
function VectorMinimize(const v1, v2: TD3DVector) : TD3DVector;
function VectorMaximize(const v1, v2: TD3DVector) : TD3DVector;
// Dot and cross product
function VectorDotProduct(v1, v2: TD3DVector) : TD3DValue;
function VectorCrossProduct(v1, v2: TD3DVector) : TD3DVector;
function VectorCrossProduct(const v1, v2: TD3DVector) : TD3DVector;
 
type
{ Vertex data types supported in an ExecuteBuffer. }
(*
* Vertex data types supported in an ExecuteBuffer.
*)
 
{ TD3DHVertex structure }
(*
* Homogeneous vertices
*)
 
PD3DHVertex = ^TD3DHVertex;
TD3DHVertex = record
dwFlags: DWORD; // Homogeneous clipping flags
TD3DHVertex = packed record
dwFlags: DWORD; (* Homogeneous clipping flags *)
case Integer of
0: (
hx: TD3DValue;
2705,21 → 5964,21
);
end;
 
D3DHVERTEX = TD3DHVertex;
(*
* Transformed/lit vertices
*)
 
{ TD3DTLVertex structure }
 
PD3DTLVertex = ^TD3DTLVertex;
TD3DTLVertex = record
TD3DTLVertex = packed record
case Integer of
0: (
sx: TD3DValue; // Screen coordinates
sx: TD3DValue; (* Screen coordinates *)
sy: TD3DValue;
sz: TD3DValue;
rhw: TD3DValue; // Reciprocal of homogeneous w
color: TD3DColor; // Vertex color
specular: TD3DColor; // Specular component of vertex
tu: TD3DValue; // Texture coordinates
rhw: TD3DValue; (* Reciprocal of homogeneous w *)
color: TD3DColor; (* Vertex color *)
specular: TD3DColor; (* Specular component of vertex *)
tu: TD3DValue; (* Texture coordinates *)
tv: TD3DValue;
);
1: (
2734,21 → 5993,21
);
end;
 
D3DTLVERTEX = TD3DTLVertex;
(*
* Untransformed/lit vertices
*)
 
{ TD3DLVertex structure }
 
PD3DLVertex = ^TD3DLVertex;
TD3DLVertex = record
TD3DLVertex = packed record
case Integer of
0: (
x: TD3DValue; // Homogeneous coordinates
x: TD3DValue; (* Homogeneous coordinates *)
y: TD3DValue;
z: TD3DValue;
dwReserved: DWORD;
color: TD3DColor; // Vertex color
specular: TD3DColor; // Specular component of vertex
tu: TD3DValue; // Texture coordinates
color: TD3DColor; (* Vertex color *)
specular: TD3DColor; (* Specular component of vertex *)
tu: TD3DValue; (* Texture coordinates *)
tv: TD3DValue;
);
1: (
2755,7 → 6014,7
dvX: TD3DValue;
dvY: TD3DValue;
dvZ: TD3DValue;
_union1d: DWORD;
UNIONFILLER1d: DWORD;
dcColor: TD3DColor;
dcSpecular: TD3DColor;
dvTU: TD3DValue;
2763,21 → 6022,21
);
end;
 
D3DLVERTEX = TD3DLVertex;
(*
* Untransformed/unlit vertices
*)
 
{ TD3DVertex structure }
 
PD3DVertex = ^TD3DVertex;
TD3DVertex = record
TD3DVertex = packed record
case Integer of
0: (
x: TD3DValue; // Homogeneous coordinates
x: TD3DValue; (* Homogeneous coordinates *)
y: TD3DValue;
z: TD3DValue;
nx: TD3DValue; // Normal
nx: TD3DValue; (* Normal *)
ny: TD3DValue;
nz: TD3DValue;
tu: TD3DValue; // Texture coordinates
tu: TD3DValue; (* Texture coordinates *)
tv: TD3DValue;
);
1: (
2792,86 → 6051,78
);
end;
 
D3DVERTEX = TD3DVertex;
(*
* Matrix, viewport, and tranformation structures and definitions.
*)
 
{ TD3DMatrix structure }
 
PD3DMatrix = ^TD3DMatrix;
TD3DMatrix = record
_11, _12, _13, _14: TD3DValue;
TD3DMatrix = packed record
case integer of
0 : (_11, _12, _13, _14: TD3DValue;
_21, _22, _23, _24: TD3DValue;
_31, _32, _33, _34: TD3DValue;
_41, _42, _43, _44: TD3DValue;
_41, _42, _43, _44: TD3DValue);
1 : (m : array [0..3, 0..3] of TD3DValue);
end;
 
D3DMATRIX = TD3DMatrix;
 
{ TD3DViewport structure }
 
PD3DViewport = ^TD3DViewport;
TD3DViewport = record
TD3DViewport = packed record
dwSize: DWORD;
dwX: DWORD;
dwY: DWORD; // Top left
dwY: DWORD; (* Top left *)
dwWidth: DWORD;
dwHeight: DWORD; // Dimensions
dvScaleX: TD3DValue; // Scale homogeneous to screen
dvScaleY: TD3DValue; // Scale homogeneous to screen
dvMaxX: TD3DValue; // Min/max homogeneous x coord
dvMaxY: TD3DValue; // Min/max homogeneous y coord
dwHeight: DWORD; (* Dimensions *)
dvScaleX: TD3DValue; (* Scale homogeneous to screen *)
dvScaleY: TD3DValue; (* Scale homogeneous to screen *)
dvMaxX: TD3DValue; (* Min/max homogeneous x coord *)
dvMaxY: TD3DValue; (* Min/max homogeneous y coord *)
dvMinZ: TD3DValue;
dvMaxZ: TD3DValue; // Min/max homogeneous z coord
dvMaxZ: TD3DValue; (* Min/max homogeneous z coord *)
end;
 
D3DVIEWPORT = TD3DViewport;
 
{ TD3DViewport2 structure }
 
PD3DViewport2 = ^TD3DViewport2;
TD3DViewport2 = record
TD3DViewport2 = packed record
dwSize: DWORD;
dwX: DWORD;
dwY: DWORD; // Top left
dwY: DWORD; (* Viewport Top left *)
dwWidth: DWORD;
dwHeight: DWORD; // Dimensions
dvClipX: TD3DValue; // Top left of clip volume
dwHeight: DWORD; (* Viewport Dimensions *)
dvClipX: TD3DValue; (* Top left of clip volume *)
dvClipY: TD3DValue;
dvClipWidth: TD3DValue; // Clip Volume Dimensions
dvClipWidth: TD3DValue; (* Clip Volume Dimensions *)
dvClipHeight: TD3DValue;
dvMinZ: TD3DValue;
dvMaxZ: TD3DValue; // Min/max homogeneous z coord
dvMinZ: TD3DValue; (* Min/max of clip Volume *)
dvMaxZ: TD3DValue;
end;
 
D3DVIEWPORT2 = TD3DViewport2;
 
{ TD3DViewport2 structure }
 
PD3DViewport7 = ^TD3DViewport7;
TD3DViewport7 = record
TD3DViewport7 = packed record
dwX: DWORD;
dwY: DWORD; // Top left
dwY: DWORD; (* Viewport Top left *)
dwWidth: DWORD;
dwHeight: DWORD; // Dimensions
dvMinZ: TD3DValue;
dvMaxZ: TD3DValue; // Min/max homogeneous z coord
dwHeight: DWORD; (* Viewport Dimensions *)
dvMinZ: TD3DValue; (* Min/max of clip Volume *)
dvMaxZ: TD3DValue;
end;
 
D3DVIEWPORT7 = TD3DViewport7;
(*
* Values for clip fields.
*)
 
const
{ Max number of user clipping planes, supported in D3D. }
// Max number of user clipping planes, supported in D3D.
D3DMAXUSERCLIPPLANES = 32;
 
{ These bits could be ORed together to use with D3DRENDERSTATE_CLIPPLANEENABLE }
D3DCLIPPLANE0 = 1 shl 0;
D3DCLIPPLANE1 = 1 shl 1;
D3DCLIPPLANE2 = 1 shl 2;
D3DCLIPPLANE3 = 1 shl 3;
D3DCLIPPLANE4 = 1 shl 4;
D3DCLIPPLANE5 = 1 shl 5;
// These bits could be ORed together to use with D3DRENDERSTATE_CLIPPLANEENABLE
//
D3DCLIPPLANE0 = (1 shl 0);
D3DCLIPPLANE1 = (1 shl 1);
D3DCLIPPLANE2 = (1 shl 2);
D3DCLIPPLANE3 = (1 shl 3);
D3DCLIPPLANE4 = (1 shl 4);
D3DCLIPPLANE5 = (1 shl 5);
 
{ Values for clip fields. }
 
const
D3DCLIP_LEFT = $00000001;
D3DCLIP_RIGHT = $00000002;
D3DCLIP_TOP = $00000004;
2885,7 → 6136,9
D3DCLIP_GEN4 = $00000400;
D3DCLIP_GEN5 = $00000800;
 
{ Values for d3d status. }
(*
* Values for d3d status.
*)
 
D3DSTATUS_CLIPUNIONLEFT = D3DCLIP_LEFT;
D3DSTATUS_CLIPUNIONRIGHT = D3DCLIP_RIGHT;
2913,8 → 6166,9
D3DSTATUS_CLIPINTERSECTIONGEN4 = $00400000;
D3DSTATUS_CLIPINTERSECTIONGEN5 = $00800000;
D3DSTATUS_ZNOTVISIBLE = $01000000;
(* Do not use 0x80000000 for any status flags in future as it is reserved *)
 
D3DSTATUS_CLIPUNIONALL =
D3DSTATUS_CLIPUNIONALL = (
D3DSTATUS_CLIPUNIONLEFT or
D3DSTATUS_CLIPUNIONRIGHT or
D3DSTATUS_CLIPUNIONTOP or
2926,9 → 6180,9
D3DSTATUS_CLIPUNIONGEN2 or
D3DSTATUS_CLIPUNIONGEN3 or
D3DSTATUS_CLIPUNIONGEN4 or
D3DSTATUS_CLIPUNIONGEN5;
D3DSTATUS_CLIPUNIONGEN5);
 
D3DSTATUS_CLIPINTERSECTIONALL =
D3DSTATUS_CLIPINTERSECTIONALL = (
D3DSTATUS_CLIPINTERSECTIONLEFT or
D3DSTATUS_CLIPINTERSECTIONRIGHT or
D3DSTATUS_CLIPINTERSECTIONTOP or
2940,61 → 6194,59
D3DSTATUS_CLIPINTERSECTIONGEN2 or
D3DSTATUS_CLIPINTERSECTIONGEN3 or
D3DSTATUS_CLIPINTERSECTIONGEN4 or
D3DSTATUS_CLIPINTERSECTIONGEN5;
D3DSTATUS_CLIPINTERSECTIONGEN5);
 
D3DSTATUS_DEFAULT = (
D3DSTATUS_CLIPINTERSECTIONALL or
D3DSTATUS_ZNOTVISIBLE );
 
{ Options for direct transform calls }
(*
* Options for direct transform calls
*)
 
D3DTRANSFORM_CLIPPED = $00000001;
D3DTRANSFORM_UNCLIPPED = $00000002;
 
type
{ TD3DTransformData structure }
 
PD3DTransformData = ^TD3DTransformData;
TD3DTransformData = record
TD3DTransformData = packed record
dwSize: DWORD;
lpIn: Pointer; // Input vertices
dwInSize: DWORD; // Stride of input vertices
lpOut: Pointer; // Output vertices
dwOutSize: DWORD; // Stride of output vertices
lpHOut: PD3DHVertex; // Output homogeneous vertices
dwClip: DWORD; // Clipping hint
lpIn: Pointer; (* Input vertices *)
dwInSize: DWORD; (* Stride of input vertices *)
lpOut: Pointer; (* Output vertices *)
dwOutSize: DWORD; (* Stride of output vertices *)
lpHOut: ^TD3DHVertex; (* Output homogeneous vertices *)
dwClip: DWORD; (* Clipping hint *)
dwClipIntersection: DWORD;
dwClipUnion: DWORD; // Union of all clip flags
drExtent: TD3DRect; // Extent of transformed vertices
dwClipUnion: DWORD; (* Union of all clip flags *)
drExtent: TD3DRect; (* Extent of transformed vertices *)
end;
 
D3DTRANSFORMDATA = TD3DTransformData;
LPD3DTRANSFORMDATA = PD3DTransformData;
(*
* Structure defining position and direction properties for lighting.
*)
 
{ TD3DLightingElement structure }
 
PD3DLightingElement = ^TD3DLightingElement;
TD3DLightingElement = record
dvPosition: TD3DVector; // Lightable point in model space
dvNormal: TD3DVector; // Normalised unit vector
TD3DLightingElement = packed record
dvPosition: TD3DVector; (* Lightable point in model space *)
dvNormal: TD3DVector; (* Normalised unit vector *)
end;
 
D3DLIGHTINGELEMENT = TD3DLightingElement;
LPD3DLIGHTINGELEMENT = PD3DLightingElement;
(*
* Structure defining material properties for lighting.
*)
 
{ TD3DMaterial structure }
 
PD3DMaterial = ^TD3DMaterial;
TD3DMaterial = record
TD3DMaterial = packed record
dwSize: DWORD;
case Integer of
0: (
diffuse: TD3DColorValue; // Diffuse color RGBA
ambient: TD3DColorValue; // Ambient color RGB
specular: TD3DColorValue; // Specular 'shininess'
emissive: TD3DColorValue; // Emissive color RGB
power: TD3DValue; // Sharpness if specular highlight
hTexture: TD3DTextureHandle; // Handle to texture map
diffuse: TD3DColorValue; (* Diffuse color RGBA *)
ambient: TD3DColorValue; (* Ambient color RGB *)
specular: TD3DColorValue; (* Specular 'shininess' *)
emissive: TD3DColorValue; (* Emissive color RGB *)
power: TD3DValue; (* Sharpness if specular highlight *)
hTexture: TD3DTextureHandle; (* Handle to texture map *)
dwRampSize: DWORD;
);
1: (
3006,20 → 6258,15
);
end;
 
D3DMATERIAL = TD3DMaterial;
LPD3DMATERIAL = PD3DMaterial;
 
{ TD3DMaterial7 structure }
 
PD3DMaterial7 = ^TD3DMaterial7;
TD3DMaterial7 = record
TD3DMaterial7 = packed record
case Integer of
0: (
diffuse: TD3DColorValue; // Diffuse color RGBA
ambient: TD3DColorValue; // Ambient color RGB
specular: TD3DColorValue; // Specular 'shininess'
emissive: TD3DColorValue; // Emissive color RGB
power: TD3DValue; // Sharpness if specular highlight
diffuse: TD3DColorValue; (* Diffuse color RGBA *)
ambient: TD3DColorValue; (* Ambient color RGB *)
specular: TD3DColorValue; (* Specular 'shininess' *)
emissive: TD3DColorValue; (* Emissive color RGB *)
power: TD3DValue; (* Sharpness if specular highlight *)
);
1: (
dcvDiffuse: TD3DColorValue;
3030,117 → 6277,97
);
end;
 
D3DMATERIAL7 = TD3DMaterial7;
LPD3DMATERIAL7 = PD3DMaterial7;
 
{ TD3DLightType }
 
PD3DLightType = ^TD3DLightType;
TD3DLightType = (
D3DLIGHT_INVALID_0,
D3DLIGHT_POINT,
D3DLIGHT_SPOT,
D3DLIGHT_DIRECTIONAL,
D3DLIGHT_PARALLELPOINT
{$IFNDEF SupportDirectX5},D3DLIGHT_GLSPOT{$ENDIF}
);
// Note: The following light type (D3DLIGHT_PARALLELPOINT)
// is no longer supported from D3D for DX7 onwards.
D3DLIGHT_PARALLELPOINT,
D3DLIGHT_GLSPOT);
 
D3DLIGHTTYPE = TD3DLightType;
(*
* Structure defining a light source and its properties.
*)
 
{ TD3DLight structure }
 
PD3DLight = ^TD3DLight;
TD3DLight = record
TD3DLight = packed record
dwSize: DWORD;
dltType: TD3DLightType; // Type of light source
dcvColor: TD3DColorValue; // Color of light
dvPosition: TD3DVector; // Position in world space
dvDirection: TD3DVector; // Direction in world space
dvRange: TD3DValue; // Cutoff range
dvFalloff: TD3DValue; // Falloff
dvAttenuation0: TD3DValue; // Constant attenuation
dvAttenuation1: TD3DValue; // Linear attenuation
dvAttenuation2: TD3DValue; // Quadratic attenuation
dvTheta: TD3DValue; // Inner angle of spotlight cone
dvPhi: TD3DValue; // Outer angle of spotlight cone
dltType: TD3DLightType; (* Type of light source *)
dcvColor: TD3DColorValue; (* Color of light *)
dvPosition: TD3DVector; (* Position in world space *)
dvDirection: TD3DVector; (* Direction in world space *)
dvRange: TD3DValue; (* Cutoff range *)
dvFalloff: TD3DValue; (* Falloff *)
dvAttenuation0: TD3DValue; (* Constant attenuation *)
dvAttenuation1: TD3DValue; (* Linear attenuation *)
dvAttenuation2: TD3DValue; (* Quadratic attenuation *)
dvTheta: TD3DValue; (* Inner angle of spotlight cone *)
dvPhi: TD3DValue; (* Outer angle of spotlight cone *)
end;
 
D3DLIGHT = TD3DLight;
LPD3DLIGHT = PD3DLight;
 
{ TD3DLight7 structure }
 
PD3DLight7 = ^TD3DLight7;
TD3DLight7 = record
dltType: TD3DLightType; // Type of light source
dcvDiffuse: TD3DColorValue; // Diffuse color of light
dcvSpecular: TD3DColorValue;// Specular color of light
dcvAmbient: TD3DColorValue; // Ambient color of light
dvPosition: TD3DVector; // Position in world space
dvDirection: TD3DVector; // Direction in world space
dvRange: TD3DValue; // Cutoff range
dvFalloff: TD3DValue; // Falloff
dvAttenuation0: TD3DValue; // Constant attenuation
dvAttenuation1: TD3DValue; // Linear attenuation
dvAttenuation2: TD3DValue; // Quadratic attenuation
dvTheta: TD3DValue; // Inner angle of spotlight cone
dvPhi: TD3DValue; // Outer angle of spotlight cone
TD3DLight7 = packed record
dltType: TD3DLightType; (* Type of light source *)
dcvDiffuse: TD3DColorValue; (* Diffuse color of light *)
dcvSpecular: TD3DColorValue;(* Specular color of light *)
dcvAmbient: TD3DColorValue; (* Ambient color of light *)
dvPosition: TD3DVector; (* Position in world space *)
dvDirection: TD3DVector; (* Direction in world space *)
dvRange: TD3DValue; (* Cutoff range *)
dvFalloff: TD3DValue; (* Falloff *)
dvAttenuation0: TD3DValue; (* Constant attenuation *)
dvAttenuation1: TD3DValue; (* Linear attenuation *)
dvAttenuation2: TD3DValue; (* Quadratic attenuation *)
dvTheta: TD3DValue; (* Inner angle of spotlight cone *)
dvPhi: TD3DValue; (* Outer angle of spotlight cone *)
end;
 
D3DLIGHT7 = TD3DLight7;
LPD3DLIGHT7 = PD3DLight7;
(*
* Structure defining a light source and its properties.
*)
 
{ Structure defining a light source and its properties. }
 
(* flags bits *)
const
{ flags bits }
 
D3DLIGHT_ACTIVE = $00000001;
D3DLIGHT_NO_SPECULAR = $00000002;
D3DLIGHT_ALL = D3DLIGHT_ACTIVE or D3DLIGHT_NO_SPECULAR;
D3DLIGHT_ALL = D3DLIGHT_ACTIVE or D3DLIGHT_ACTIVE;
 
{ maximum valid light range }
D3DLIGHT_RANGE_MAX: TD3DValue = 3.4 * 10e+38;
(* maximum valid light range *)
D3DLIGHT_RANGE_MAX = 1.8439088915e+18; //sqrt(FLT_MAX);
 
type
{ TD3DLight2 structure }
 
PD3DLight2 = ^TD3DLight2;
TD3DLight2 = record
TD3DLight2 = packed record
dwSize: DWORD;
dltType: TD3DLightType; // Type of light source
dcvColor: TD3DColorValue; // Color of light
dvPosition: TD3DVector; // Position in world space
dvDirection: TD3DVector; // Direction in world space
dvRange: TD3DValue; // Cutoff range
dvFalloff: TD3DValue; // Falloff
dvAttenuation0: TD3DValue; // Constant attenuation
dvAttenuation1: TD3DValue; // Linear attenuation
dvAttenuation2: TD3DValue; // Quadratic attenuation
dvTheta: TD3DValue; // Inner angle of spotlight cone
dvPhi: TD3DValue; // Outer angle of spotlight cone
dltType: TD3DLightType; (* Type of light source *)
dcvColor: TD3DColorValue; (* Color of light *)
dvPosition: TD3DVector; (* Position in world space *)
dvDirection: TD3DVector; (* Direction in world space *)
dvRange: TD3DValue; (* Cutoff range *)
dvFalloff: TD3DValue; (* Falloff *)
dvAttenuation0: TD3DValue; (* Constant attenuation *)
dvAttenuation1: TD3DValue; (* Linear attenuation *)
dvAttenuation2: TD3DValue; (* Quadratic attenuation *)
dvTheta: TD3DValue; (* Inner angle of spotlight cone *)
dvPhi: TD3DValue; (* Outer angle of spotlight cone *)
dwFlags: DWORD;
end;
 
D3DLIGHT2 = TD3DLight2;
LPD3DLIGHT2 = PD3DLight2;
 
{ TD3DLightData structure }
 
PD3DLightData = ^TD3DLightData;
TD3DLightData = record
TD3DLightData = packed record
dwSize: DWORD;
lpIn: PD3DLightingElement; // Input positions and normals
dwInSize: DWORD; // Stride of input elements
lpOut: PD3DTLVertex; // Output colors
dwOutSize: DWORD; // Stride of output colors
lpIn: ^TD3DLightingElement; (* Input positions and normals *)
dwInSize: DWORD; (* Stride of input elements *)
lpOut: ^TD3DTLVertex; (* Output colors *)
dwOutSize: DWORD; (* Stride of output colors *)
end;
 
D3DLIGHTDATA = TD3DLightData;
LPD3DLIGHTDATA = PD3DLightData;
 
(*
* Before DX5, these values were in an enum called
* D3DCOLORMODEL. This was not correct, since they are
* TD3DColorModel. This was not correct, since they are
* bit flags. A driver can surface either or both flags
* in the dcmColorModel member of D3DDEVICEDESC.
*)
3147,23 → 6374,32
 
type
TD3DColorModel = DWORD;
D3DCOLORMODEL = TD3DColorModel;
 
const
D3DCOLOR_INVALID_0 = 0;
D3DCOLOR_MONO = 1;
D3DCOLOR_RGB = 2;
 
{ Options for clearing }
(*
* Options for clearing
*)
 
const
D3DCLEAR_TARGET = $00000001; // Clear target surface
D3DCLEAR_ZBUFFER = $00000002; // Clear target z buffer
D3DCLEAR_STENCIL = $00000004; // Clear stencil planes
D3DCLEAR_TARGET = $00000001; (* Clear target surface *)
D3DCLEAR_ZBUFFER = $00000002; (* Clear target z buffer *)
D3DCLEAR_STENCIL = $00000004; (* Clear stencil planes *)
 
{ Supported op codes for execute instructions. }
(*
* Execute buffers are allocated via Direct3D. These buffers may then
* be filled by the application with instructions to execute along with
* vertex data.
*)
 
(*
* Supported op codes for execute instructions.
*)
 
type
PD3DOpcode = ^TD3DOpcode;
TD3DOpcode = (
D3DOP_INVALID_0,
D3DOP_POINT,
3179,71 → 6415,63
D3DOP_EXIT,
D3DOP_BRANCHFORWARD,
D3DOP_SPAN,
D3DOP_SETSTATUS
);
D3DOP_SETSTATUS);
 
D3DOPCODE = TD3DOpcode;
 
{ TD3DInstruction structure }
 
TD3DInstruction = record
bOpcode: Byte; // Instruction opcode
bSize: Byte; // Size of each instruction data unit
wCount: WORD; // Count of instruction data units to follow
PD3DInstruction = ^TD3DInstruction;
TD3DInstruction = packed record
bOpcode: BYTE; (* Instruction opcode *)
bSize: BYTE; (* Size of each instruction data unit *)
wCount: WORD; (* Count of instruction data units to follow *)
end;
D3DINSTRUCTION = TD3DInstruction;
 
{ TD3DTextureLoad structure }
(*
* Structure for texture loads
*)
 
TD3DTextureLoad = record
PD3DTextureLoad = ^TD3DTextureLoad;
TD3DTextureLoad = packed record
hDestTexture: TD3DTextureHandle;
hSrcTexture: TD3DTextureHandle;
end;
D3DTEXTURELOAD = TD3DTextureLoad;
 
{ TD3DPickRecord structure }
(*
* Structure for picking
*)
 
TD3DPickRecord = record
PD3DPickRecord = ^TD3DPickRecord;
TD3DPickRecord = packed record
bOpcode: BYTE;
bPad: BYTE;
dwOffset: DWORD;
dvZ: TD3DValue;
end;
D3DPICKRECORD = TD3DPickRecord;
 
{ TD3DShadeMode }
(*
* The following defines the rendering states which can be set in the
* execute buffer.
*)
 
PD3DShadeMode = ^TD3DShadeMode;
TD3DShadeMode = (
D3DSHADE_INVALID_0,
D3DSHADE_FLAT,
D3DSHADE_GOURAUD,
D3DSHADE_PHONG
);
D3DSHADE_PHONG);
 
D3DSHADEMODE = TD3DShadeMode;
 
{ TD3DFillMode }
 
PD3DFillMode = ^TD3DFillMode;
TD3DFillMode = (
D3DFILL_INVALID_0,
D3DFILL_POINT,
D3DFILL_WIREFRAME,
D3DFILL_SOLID
);
D3DFILL_SOLID);
 
D3DFILLMODE = TD3DFillMode;
 
{ TD3DLinePattern structure }
 
TD3DLinePattern = record
PD3DLinePattern = ^TD3DLinePattern;
TD3DLinePattern = packed record
wRepeatFactor: WORD;
wLinePattern: WORD;
end;
 
D3DLINEPATTERN = TD3DLinePattern;
 
{ TD3DTextureFilter }
 
PD3DTextureFilter = ^TD3DTextureFilter;
TD3DTextureFilter = (
D3DFILTER_INVALID_0,
D3DFILTER_NEAREST,
3251,13 → 6479,9
D3DFILTER_MIPNEAREST,
D3DFILTER_MIPLINEAR,
D3DFILTER_LINEARMIPNEAREST,
D3DFILTER_LINEARMIPLINEAR
);
D3DFILTER_LINEARMIPLINEAR);
 
D3DTEXTUREFILTER = TD3DTextureFilter;
 
{ TD3DBlend }
 
PD3DBlend = ^TD3DBlend;
TD3DBlend = (
D3DBLEND_INVALID_0,
D3DBLEND_ZERO,
3272,13 → 6496,9
D3DBLEND_INVDESTCOLOR,
D3DBLEND_SRCALPHASAT,
D3DBLEND_BOTHSRCALPHA,
D3DBLEND_BOTHINVSRCALPHA
);
D3DBLEND_BOTHINVSRCALPHA);
 
D3DBLEND = TD3DBlend;
 
{ TD3DTextureBlend }
 
PD3DTextureBlend = ^TD3DTextureBlend;
TD3DTextureBlend = (
D3DTBLEND_INVALID_0,
D3DTBLEND_DECAL,
3288,36 → 6508,24
D3DTBLEND_DECALMASK,
D3DTBLEND_MODULATEMASK,
D3DTBLEND_COPY,
D3DTBLEND_ADD
);
D3DTBLEND_ADD);
 
D3DTEXTUREBLEND = TD3DTextureBlend;
 
{ TD3DTextureAddress }
 
PD3DTextureAddress = ^TD3DTextureAddress;
TD3DTextureAddress = (
D3DTADDRESS_INVALID_0,
D3DTADDRESS_WRAP,
D3DTADDRESS_MIRROR,
D3DTADDRESS_CLAMP,
D3DTADDRESS_BORDER
);
D3DTADDRESS_BORDER);
 
D3DTEXTUREADDRESS = TD3DTextureAddress;
 
{ TD3DCull }
 
PD3DCull = ^TD3DCull;
TD3DCull = (
D3DCULL_INVALID_0,
D3DCULL_NONE,
D3DCULL_CW,
D3DCULL_CCW
);
D3DCULL_CCW);
 
D3DCULL = TD3DCull;
 
{ TD3DCmpFunc }
 
PD3DCmpFunc = ^TD3DCmpFunc;
TD3DCmpFunc = (
D3DCMP_INVALID_0,
D3DCMP_NEVER,
3327,13 → 6535,9
D3DCMP_GREATER,
D3DCMP_NOTEQUAL,
D3DCMP_GREATEREQUAL,
D3DCMP_ALWAYS
);
D3DCMP_ALWAYS);
 
D3DCMPFUNC = TD3DCmpFunc;
 
{ TD3DStencilOp }
 
PD3DStencilOp = ^TD3DStencilOp;
TD3DStencilOp = (
D3DSTENCILOP_INVALID_0,
D3DSTENCILOP_KEEP,
3343,55 → 6547,37
D3DSTENCILOP_DECRSAT,
D3DSTENCILOP_INVERT,
D3DSTENCILOP_INCR,
D3DSTENCILOP_DECR
);
D3DSTENCILOP_DECR);
 
D3DSTENCILOP = TD3DStencilOp;
 
{ TD3DFogMode }
 
PD3DFogMode = ^TD3DFogMode;
TD3DFogMode = (
D3DFOG_NONE,
D3DFOG_EXP,
D3DFOG_EXP2,
D3DFOG_LINEAR
);
D3DFOG_LINEAR);
 
D3DFOGMODE = TD3DFogMode;
 
{ TD3DZBufferType }
 
PD3DZBufferType = ^TD3DZBufferType;
TD3DZBufferType = (
D3DZB_FALSE,
D3DZB_TRUE, // Z buffering
D3DZB_USEW // W buffering
);
D3DZB_USEW); // W buffering
 
D3DZBUFFERTYPE = TD3DZBufferType;
 
{ TD3DAntialiasMode }
 
PD3DAntialiasMode = ^TD3DAntialiasMode;
TD3DAntialiasMode = (
D3DANTIALIAS_NONE,
D3DANTIALIAS_SORTDEPENDENT,
D3DANTIALIAS_SORTINDEPENDENT
);
D3DANTIALIAS_SORTINDEPENDENT);
 
D3DANTIALIASMODE = TD3DAntialiasMode;
 
{ TD3DVertexType }
 
// Vertex types supported by Direct3D
PD3DVertexType = ^TD3DVertexType;
TD3DVertexType = (
D3DVT_INVALID_0,
D3DVT_VERTEX,
D3DVT_LVERTEX,
D3DVT_TLVERTEX
);
D3DVT_TLVERTEX);
 
D3DVERTEXTYPE = TD3DVertexType;
 
{ TD3DPrimitiveType }
 
// Primitives supported by draw-primitive API
PD3DPrimitiveType = ^TD3DPrimitiveType;
TD3DPrimitiveType = (
D3DPT_INVALID_0,
D3DPT_POINTLIST,
3399,55 → 6585,42
D3DPT_LINESTRIP,
D3DPT_TRIANGLELIST,
D3DPT_TRIANGLESTRIP,
D3DPT_TRIANGLEFAN
);
D3DPT_TRIANGLEFAN);
 
D3DPRIMITIVETYPE = TD3DPrimitiveType;
(*
* Amount to add to a state to generate the override for that state.
*)
 
{ Amount to add to a state to generate the override for that state. }
 
const
D3DSTATE_OVERRIDE_BIAS = 256;
 
function D3DSTATE_OVERRIDE(typ: DWORD): DWORD;
(*
* A state which sets the override flag for the specified state type.
*)
 
{ A state which sets the override flag for the specified state type. }
function D3DSTATE_OVERRIDE(StateType: DWORD) : DWORD;
 
type
{ TD3DTransformStateType }
PD3DTransformStateType = ^TD3DTransformStateType;
TD3DTransformStateType = DWORD;
const
D3DTRANSFORMSTATE_WORLD = 1;
D3DTRANSFORMSTATE_VIEW = 2;
D3DTRANSFORMSTATE_PROJECTION = 3;
D3DTRANSFORMSTATE_WORLD1 = 4; // 2nd matrix to blend
D3DTRANSFORMSTATE_WORLD2 = 5; // 3rd matrix to blend
D3DTRANSFORMSTATE_WORLD3 = 6; // 4th matrix to blend
D3DTRANSFORMSTATE_TEXTURE0 = 16;
D3DTRANSFORMSTATE_TEXTURE1 = 17;
D3DTRANSFORMSTATE_TEXTURE2 = 18;
D3DTRANSFORMSTATE_TEXTURE3 = 19;
D3DTRANSFORMSTATE_TEXTURE4 = 20;
D3DTRANSFORMSTATE_TEXTURE5 = 21;
D3DTRANSFORMSTATE_TEXTURE6 = 22;
D3DTRANSFORMSTATE_TEXTURE7 = 23;
 
TD3DTransformStateType = (
D3DTRANSFORMSTATE_INVALID_0,
D3DTRANSFORMSTATE_WORLD,
D3DTRANSFORMSTATE_VIEW,
D3DTRANSFORMSTATE_PROJECTION,
 
D3DTRANSFORMSTATE_WORLD1,
D3DTRANSFORMSTATE_WORLD2,
D3DTRANSFORMSTATE_WORLD3,
D3DTRANSFORMSTATE_INVALID_7,
D3DTRANSFORMSTATE_INVALID_8,
D3DTRANSFORMSTATE_INVALID_9,
D3DTRANSFORMSTATE_INVALID_10,
D3DTRANSFORMSTATE_INVALID_11,
D3DTRANSFORMSTATE_INVALID_12,
D3DTRANSFORMSTATE_INVALID_13,
D3DTRANSFORMSTATE_INVALID_14,
D3DTRANSFORMSTATE_INVALID_15,
D3DTRANSFORMSTATE_TEXTURE0,
D3DTRANSFORMSTATE_TEXTURE1,
D3DTRANSFORMSTATE_TEXTURE2,
D3DTRANSFORMSTATE_TEXTURE3,
D3DTRANSFORMSTATE_TEXTURE4,
D3DTRANSFORMSTATE_TEXTURE5,
D3DTRANSFORMSTATE_TEXTURE6,
D3DTRANSFORMSTATE_TEXTURE7
);
 
D3DTRANSFORMSTATETYPE = TD3DTransformStateType;
 
{ TD3DLightStateType }
 
type
PD3DLightStateType = ^TD3DLightStateType;
TD3DLightStateType = (
D3DLIGHTSTATE_INVALID_0,
D3DLIGHTSTATE_MATERIAL,
3457,216 → 6630,185
D3DLIGHTSTATE_FOGSTART,
D3DLIGHTSTATE_FOGEND,
D3DLIGHTSTATE_FOGDENSITY,
D3DLIGHTSTATE_COLORVERTEX
);
D3DLIGHTSTATE_COLORVERTEX);
 
D3DLIGHTSTATETYPE = TD3DLightStateType;
PD3DRenderStateType = ^TD3DRenderStateType;
TD3DRenderStateType = DWORD;
const
D3DRENDERSTATE_ANTIALIAS = 2; (* D3DANTIALIASMODE *)
D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4; (* TRUE for perspective correction *)
D3DRENDERSTATE_ZENABLE = 7; (* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) *)
D3DRENDERSTATE_FILLMODE = 8; (* D3DFILL_MODE *)
D3DRENDERSTATE_SHADEMODE = 9; (* D3DSHADEMODE *)
D3DRENDERSTATE_LINEPATTERN = 10; (* D3DLINEPATTERN *)
D3DRENDERSTATE_ZWRITEENABLE = 14; (* TRUE to enable z writes *)
D3DRENDERSTATE_ALPHATESTENABLE = 15; (* TRUE to enable alpha tests *)
D3DRENDERSTATE_LASTPIXEL = 16; (* TRUE for last-pixel on lines *)
D3DRENDERSTATE_SRCBLEND = 19; (* D3DBLEND *)
D3DRENDERSTATE_DESTBLEND = 20; (* D3DBLEND *)
D3DRENDERSTATE_CULLMODE = 22; (* D3DCULL *)
D3DRENDERSTATE_ZFUNC = 23; (* D3DCMPFUNC *)
D3DRENDERSTATE_ALPHAREF = 24; (* D3DFIXED *)
D3DRENDERSTATE_ALPHAFUNC = 25; (* D3DCMPFUNC *)
D3DRENDERSTATE_DITHERENABLE = 26; (* TRUE to enable dithering *)
D3DRENDERSTATE_ALPHABLENDENABLE = 27; (* TRUE to enable alpha blending *)
D3DRENDERSTATE_FOGENABLE = 28; (* TRUE to enable fog blending *)
D3DRENDERSTATE_SPECULARENABLE = 29; (* TRUE to enable specular *)
D3DRENDERSTATE_ZVISIBLE = 30; (* TRUE to enable z checking *)
D3DRENDERSTATE_STIPPLEDALPHA = 33; (* TRUE to enable stippled alpha (RGB device only) *)
D3DRENDERSTATE_FOGCOLOR = 34; (* D3DCOLOR *)
D3DRENDERSTATE_FOGTABLEMODE = 35; (* D3DFOGMODE *)
D3DRENDERSTATE_FOGSTART = 36; (* Fog start (for both vertex and pixel fog) *)
D3DRENDERSTATE_FOGEND = 37; (* Fog end *)
D3DRENDERSTATE_FOGDENSITY = 38; (* Fog density *)
D3DRENDERSTATE_EDGEANTIALIAS = 40; (* TRUE to enable edge antialiasing *)
D3DRENDERSTATE_COLORKEYENABLE = 41; (* TRUE to enable source colorkeyed textures *)
D3DRENDERSTATE_ZBIAS = 47; (* LONG Z bias *)
D3DRENDERSTATE_RANGEFOGENABLE = 48; (* Enables range-based fog *)
 
{ TD3DRenderStateType }
D3DRENDERSTATE_STENCILENABLE = 52; (* BOOL enable/disable stenciling *)
D3DRENDERSTATE_STENCILFAIL = 53; (* D3DSTENCILOP to do if stencil test fails *)
D3DRENDERSTATE_STENCILZFAIL = 54; (* D3DSTENCILOP to do if stencil test passes and Z test fails *)
D3DRENDERSTATE_STENCILPASS = 55; (* D3DSTENCILOP to do if both stencil and Z tests pass *)
D3DRENDERSTATE_STENCILFUNC = 56; (* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true *)
D3DRENDERSTATE_STENCILREF = 57; (* Reference value used in stencil test *)
D3DRENDERSTATE_STENCILMASK = 58; (* Mask value used in stencil test *)
D3DRENDERSTATE_STENCILWRITEMASK = 59; (* Write mask applied to values written to stencil buffer *)
D3DRENDERSTATE_TEXTUREFACTOR = 60; (* D3DCOLOR used for multi-texture blend *)
 
TD3DRenderStateType = (
D3DRENDERSTATE_INVALID_0,
D3DRENDERSTATE_TEXTUREHANDLE, // Texture handle for legacy interfaces (Texture,Texture2)
D3DRENDERSTATE_ANTIALIAS, // TD3DAntialiasMode
D3DRENDERSTATE_TEXTUREADDRESS, // TD3DTextureAddress
D3DRENDERSTATE_TEXTUREPERSPECTIVE, // TRUE for perspective correction
D3DRENDERSTATE_WRAPU, // TRUE for wrapping in u
D3DRENDERSTATE_WRAPV, // TRUE for wrapping in v
D3DRENDERSTATE_ZENABLE, // TD3DZBufferType (or TRUE/FALSE for legacy)
D3DRENDERSTATE_FILLMODE, // TD3DFillMode
D3DRENDERSTATE_SHADEMODE, // TD3DShadeMode
D3DRENDERSTATE_LINEPATTERN, // TD3DLinePattern
D3DRENDERSTATE_MONOENABLE, // TRUE to enable mono rasterization
D3DRENDERSTATE_ROP2, // ROP2
D3DRENDERSTATE_PLANEMASK, // DWORD physical plane mask
D3DRENDERSTATE_ZWRITEENABLE, // TRUE to enable z writes
D3DRENDERSTATE_ALPHATESTENABLE, // TRUE to enable alpha tests
D3DRENDERSTATE_LASTPIXEL, // TRUE for last-pixel on lines
D3DRENDERSTATE_TEXTUREMAG, // TD3DTextureFilter
D3DRENDERSTATE_TEXTUREMIN, // TD3DTextureFilter
D3DRENDERSTATE_SRCBLEND, // TD3DBlend
D3DRENDERSTATE_DESTBLEND, // TD3DBlend
D3DRENDERSTATE_TEXTUREMAPBLEND, // TD3DTextureBlend
D3DRENDERSTATE_CULLMODE, // TD3DCull
D3DRENDERSTATE_ZFUNC, // TD3DCmpFunc
D3DRENDERSTATE_ALPHAREF, // TD3DFixed
D3DRENDERSTATE_ALPHAFUNC, // TD3DCmpFunc
D3DRENDERSTATE_DITHERENABLE, // TRUE to enable dithering
D3DRENDERSTATE_ALPHABLENDENABLE, // TRUE to enable alpha blending
D3DRENDERSTATE_FOGENABLE, // TRUE to enable fog
D3DRENDERSTATE_SPECULARENABLE, // TRUE to enable specular
D3DRENDERSTATE_ZVISIBLE, // TRUE to enable z checking
D3DRENDERSTATE_SUBPIXEL, // TRUE to enable subpixel correction
D3DRENDERSTATE_SUBPIXELX, // TRUE to enable correction in X only
D3DRENDERSTATE_STIPPLEDALPHA, // TRUE to enable stippled alpha
D3DRENDERSTATE_FOGCOLOR, // TD3DColor
D3DRENDERSTATE_FOGTABLEMODE, // TD3DFogMode
D3DRENDERSTATE_FOGSTART, // Fog start (for both vertex and pixel fog)
D3DRENDERSTATE_FOGEND, // Fog end
D3DRENDERSTATE_FOGDENSITY, // Fog density
D3DRENDERSTATE_STIPPLEENABLE, // TRUE to enable stippling
D3DRENDERSTATE_EDGEANTIALIAS, // TRUE to enable edge antialiasing
D3DRENDERSTATE_COLORKEYENABLE, // TRUE to enable source colorkeyed textures
D3DRENDERSTATE_BORDERCOLOR, // Border color for texturing w/border
D3DRENDERSTATE_TEXTUREADDRESSU, // Texture addressing mode for U coordinate
D3DRENDERSTATE_TEXTUREADDRESSV, // Texture addressing mode for V coordinate
D3DRENDERSTATE_MIPMAPLODBIAS, // TD3DValue Mipmap LOD bias
D3DRENDERSTATE_ZBIAS, // LONG Z bias
D3DRENDERSTATE_RANGEFOGENABLE, // Enables range-based fog
D3DRENDERSTATE_ANISOTROPY, // Max. anisotropy. 1 = no anisotropy
D3DRENDERSTATE_FLUSHBATCH, // Explicit flush for DP batching (DX5 Only)
D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT,// BOOL enable sort-independent transparency
D3DRENDERSTATE_STENCILENABLE, // BOOL enable/disable stenciling
D3DRENDERSTATE_STENCILFAIL, // TD3DStencilOp to do if stencil test fails
D3DRENDERSTATE_STENCILZFAIL, // TD3DStencilOp to do if stencil test passes and Z test fails
D3DRENDERSTATE_STENCILPASS, // TD3DStencilOp to do if both stencil and Z tests pass
D3DRENDERSTATE_STENCILFUNC , // TD3DCmpFunc fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true
D3DRENDERSTATE_STENCILREF, // Reference value used in stencil test
D3DRENDERSTATE_STENCILMASK, // Mask value used in stencil test
D3DRENDERSTATE_STENCILWRITEMASK, // Write mask applied to values written to stencil buffer
D3DRENDERSTATE_TEXTUREFACTOR, // TD3DColor used for multi-texture blend
D3DRENDERSTATE_INVALID_61,
D3DRENDERSTATE_INVALID_62,
D3DRENDERSTATE_INVALID_63,
D3DRENDERSTATE_STIPPLEPATTERN00, // Stipple pattern 01...
D3DRENDERSTATE_STIPPLEPATTERN01,
D3DRENDERSTATE_STIPPLEPATTERN02,
D3DRENDERSTATE_STIPPLEPATTERN03,
D3DRENDERSTATE_STIPPLEPATTERN04,
D3DRENDERSTATE_STIPPLEPATTERN05,
D3DRENDERSTATE_STIPPLEPATTERN06,
D3DRENDERSTATE_STIPPLEPATTERN07,
D3DRENDERSTATE_STIPPLEPATTERN08,
D3DRENDERSTATE_STIPPLEPATTERN09,
D3DRENDERSTATE_STIPPLEPATTERN10,
D3DRENDERSTATE_STIPPLEPATTERN11,
D3DRENDERSTATE_STIPPLEPATTERN12,
D3DRENDERSTATE_STIPPLEPATTERN13,
D3DRENDERSTATE_STIPPLEPATTERN14,
D3DRENDERSTATE_STIPPLEPATTERN15,
D3DRENDERSTATE_STIPPLEPATTERN16,
D3DRENDERSTATE_STIPPLEPATTERN17,
D3DRENDERSTATE_STIPPLEPATTERN18,
D3DRENDERSTATE_STIPPLEPATTERN19,
D3DRENDERSTATE_STIPPLEPATTERN20,
D3DRENDERSTATE_STIPPLEPATTERN21,
D3DRENDERSTATE_STIPPLEPATTERN22,
D3DRENDERSTATE_STIPPLEPATTERN23,
D3DRENDERSTATE_STIPPLEPATTERN24,
D3DRENDERSTATE_STIPPLEPATTERN25,
D3DRENDERSTATE_STIPPLEPATTERN26,
D3DRENDERSTATE_STIPPLEPATTERN27,
D3DRENDERSTATE_STIPPLEPATTERN28,
D3DRENDERSTATE_STIPPLEPATTERN29,
D3DRENDERSTATE_STIPPLEPATTERN30,
D3DRENDERSTATE_STIPPLEPATTERN31,
D3DRENDERSTATE_INVALID_95,
D3DRENDERSTATE_INVALID_96,
D3DRENDERSTATE_INVALID_97,
D3DRENDERSTATE_INVALID_98,
D3DRENDERSTATE_INVALID_99,
D3DRENDERSTATE_INVALID_100,
D3DRENDERSTATE_INVALID_101,
D3DRENDERSTATE_INVALID_102,
D3DRENDERSTATE_INVALID_103,
D3DRENDERSTATE_INVALID_104,
D3DRENDERSTATE_INVALID_105,
D3DRENDERSTATE_INVALID_106,
D3DRENDERSTATE_INVALID_107,
D3DRENDERSTATE_INVALID_108,
D3DRENDERSTATE_INVALID_109,
D3DRENDERSTATE_INVALID_110,
D3DRENDERSTATE_INVALID_111,
D3DRENDERSTATE_INVALID_112,
D3DRENDERSTATE_INVALID_113,
D3DRENDERSTATE_INVALID_114,
D3DRENDERSTATE_INVALID_115,
D3DRENDERSTATE_INVALID_116,
D3DRENDERSTATE_INVALID_117,
D3DRENDERSTATE_INVALID_118,
D3DRENDERSTATE_INVALID_119,
D3DRENDERSTATE_INVALID_120,
D3DRENDERSTATE_INVALID_121,
D3DRENDERSTATE_INVALID_122,
D3DRENDERSTATE_INVALID_123,
D3DRENDERSTATE_INVALID_124,
D3DRENDERSTATE_INVALID_125,
D3DRENDERSTATE_INVALID_126,
D3DRENDERSTATE_INVALID_127,
(*
* 128 values [128; 255] are reserved for texture coordinate wrap flags.
* These are constructed with the D3DWRAP_U and D3DWRAP_V macros. Using
* a flags word preserves forward compatibility with texture coordinates
* that are >2D.
*)
D3DRENDERSTATE_WRAP0 = 128; (* wrap for 1st texture coord. set *)
D3DRENDERSTATE_WRAP1 = 129; (* wrap for 2nd texture coord. set *)
D3DRENDERSTATE_WRAP2 = 130; (* wrap for 3rd texture coord. set *)
D3DRENDERSTATE_WRAP3 = 131; (* wrap for 4th texture coord. set *)
D3DRENDERSTATE_WRAP4 = 132; (* wrap for 5th texture coord. set *)
D3DRENDERSTATE_WRAP5 = 133; (* wrap for 6th texture coord. set *)
D3DRENDERSTATE_WRAP6 = 134; (* wrap for 7th texture coord. set *)
D3DRENDERSTATE_WRAP7 = 135; (* wrap for 8th texture coord. set *)
D3DRENDERSTATE_CLIPPING = 136;
D3DRENDERSTATE_LIGHTING = 137;
D3DRENDERSTATE_EXTENTS = 138;
D3DRENDERSTATE_AMBIENT = 139;
D3DRENDERSTATE_FOGVERTEXMODE = 140;
D3DRENDERSTATE_COLORVERTEX = 141;
D3DRENDERSTATE_LOCALVIEWER = 142;
D3DRENDERSTATE_NORMALIZENORMALS = 143;
D3DRENDERSTATE_COLORKEYBLENDENABLE = 144;
D3DRENDERSTATE_DIFFUSEMATERIALSOURCE = 145;
D3DRENDERSTATE_SPECULARMATERIALSOURCE = 146;
D3DRENDERSTATE_AMBIENTMATERIALSOURCE = 147;
D3DRENDERSTATE_EMISSIVEMATERIALSOURCE = 148;
D3DRENDERSTATE_VERTEXBLEND = 151;
D3DRENDERSTATE_CLIPPLANEENABLE = 152;
 
//
// 128 values [128, 255] are reserved for texture coordinate wrap flags.
// These are constructed with the D3DWRAP_U and D3DWRAP_V macros. Using
// a flags word preserves forward compatibility with texture coordinates
// that are >2D.
// retired renderstates - not supported for DX7 interfaces
//
D3DRENDERSTATE_WRAP0, // wrap for 1st texture coord. set
D3DRENDERSTATE_WRAP1, // wrap for 2nd texture coord. set
D3DRENDERSTATE_WRAP2, // wrap for 3rd texture coord. set
D3DRENDERSTATE_WRAP3, // wrap for 4th texture coord. set
D3DRENDERSTATE_WRAP4, // wrap for 5th texture coord. set
D3DRENDERSTATE_WRAP5, // wrap for 6th texture coord. set
D3DRENDERSTATE_WRAP6, // wrap for 7th texture coord. set
D3DRENDERSTATE_WRAP7, // wrap for 8th texture coord. set
D3DRENDERSTATE_CLIPPING,
D3DRENDERSTATE_LIGHTING,
D3DRENDERSTATE_EXTENTS,
D3DRENDERSTATE_AMBIENT,
D3DRENDERSTATE_FOGVERTEXMODE,
D3DRENDERSTATE_COLORVERTEX,
D3DRENDERSTATE_LOCALVIEWER,
D3DRENDERSTATE_NORMALIZENORMALS,
D3DRENDERSTATE_COLORKEYBLENDENABLE,
D3DRENDERSTATE_DIFFUSEMATERIALSOURCE,
D3DRENDERSTATE_SPECULARMATERIALSOURCE,
D3DRENDERSTATE_AMBIENTMATERIALSOURCE,
D3DRENDERSTATE_EMISSIVEMATERIALSOURCE,
D3DRENDERSTATE_INVALID_149,
D3DRENDERSTATE_INVALID_150,
D3DRENDERSTATE_VERTEXBLEND,
D3DRENDERSTATE_CLIPPLANEENABLE
);
D3DRENDERSTATE_TEXTUREHANDLE = 1; (* Texture handle for legacy interfaces (Texture;Texture2) *)
D3DRENDERSTATE_TEXTUREADDRESS = 3; (* D3DTEXTUREADDRESS *)
D3DRENDERSTATE_WRAPU = 5; (* TRUE for wrapping in u *)
D3DRENDERSTATE_WRAPV = 6; (* TRUE for wrapping in v *)
D3DRENDERSTATE_MONOENABLE = 11; (* TRUE to enable mono rasterization *)
D3DRENDERSTATE_ROP2 = 12; (* ROP2 *)
D3DRENDERSTATE_PLANEMASK = 13; (* DWORD physical plane mask *)
D3DRENDERSTATE_TEXTUREMAG = 17; (* D3DTEXTUREFILTER *)
D3DRENDERSTATE_TEXTUREMIN = 18; (* D3DTEXTUREFILTER *)
D3DRENDERSTATE_TEXTUREMAPBLEND = 21; (* D3DTEXTUREBLEND *)
D3DRENDERSTATE_SUBPIXEL = 31; (* TRUE to enable subpixel correction *)
D3DRENDERSTATE_SUBPIXELX = 32; (* TRUE to enable correction in X only *)
D3DRENDERSTATE_STIPPLEENABLE = 39; (* TRUE to enable stippling *)
D3DRENDERSTATE_BORDERCOLOR = 43; (* Border color for texturing w/border *)
D3DRENDERSTATE_TEXTUREADDRESSU = 44; (* Texture addressing mode for U coordinate *)
D3DRENDERSTATE_TEXTUREADDRESSV = 45; (* Texture addressing mode for V coordinate *)
D3DRENDERSTATE_MIPMAPLODBIAS = 46; (* D3DVALUE Mipmap LOD bias *)
D3DRENDERSTATE_ANISOTROPY = 49; (* Max. anisotropy. 1 = no anisotropy *)
D3DRENDERSTATE_FLUSHBATCH = 50; (* Explicit flush for DP batching (DX5 Only) *)
D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT=51; (* BOOL enable sort-independent transparency *)
D3DRENDERSTATE_STIPPLEPATTERN00 = 64; (* Stipple pattern 01... *)
D3DRENDERSTATE_STIPPLEPATTERN01 = 65;
D3DRENDERSTATE_STIPPLEPATTERN02 = 66;
D3DRENDERSTATE_STIPPLEPATTERN03 = 67;
D3DRENDERSTATE_STIPPLEPATTERN04 = 68;
D3DRENDERSTATE_STIPPLEPATTERN05 = 69;
D3DRENDERSTATE_STIPPLEPATTERN06 = 70;
D3DRENDERSTATE_STIPPLEPATTERN07 = 71;
D3DRENDERSTATE_STIPPLEPATTERN08 = 72;
D3DRENDERSTATE_STIPPLEPATTERN09 = 73;
D3DRENDERSTATE_STIPPLEPATTERN10 = 74;
D3DRENDERSTATE_STIPPLEPATTERN11 = 75;
D3DRENDERSTATE_STIPPLEPATTERN12 = 76;
D3DRENDERSTATE_STIPPLEPATTERN13 = 77;
D3DRENDERSTATE_STIPPLEPATTERN14 = 78;
D3DRENDERSTATE_STIPPLEPATTERN15 = 79;
D3DRENDERSTATE_STIPPLEPATTERN16 = 80;
D3DRENDERSTATE_STIPPLEPATTERN17 = 81;
D3DRENDERSTATE_STIPPLEPATTERN18 = 82;
D3DRENDERSTATE_STIPPLEPATTERN19 = 83;
D3DRENDERSTATE_STIPPLEPATTERN20 = 84;
D3DRENDERSTATE_STIPPLEPATTERN21 = 85;
D3DRENDERSTATE_STIPPLEPATTERN22 = 86;
D3DRENDERSTATE_STIPPLEPATTERN23 = 87;
D3DRENDERSTATE_STIPPLEPATTERN24 = 88;
D3DRENDERSTATE_STIPPLEPATTERN25 = 89;
D3DRENDERSTATE_STIPPLEPATTERN26 = 90;
D3DRENDERSTATE_STIPPLEPATTERN27 = 91;
D3DRENDERSTATE_STIPPLEPATTERN28 = 92;
D3DRENDERSTATE_STIPPLEPATTERN29 = 93;
D3DRENDERSTATE_STIPPLEPATTERN30 = 94;
D3DRENDERSTATE_STIPPLEPATTERN31 = 95;
 
D3DRENDERSTATETYPE = TD3DRenderStateType;
//
// retired renderstate names - the values are still used under new naming conventions
//
D3DRENDERSTATE_FOGTABLESTART = 36; (* Fog table start *)
D3DRENDERSTATE_FOGTABLEEND = 37; (* Fog table end *)
D3DRENDERSTATE_FOGTABLEDENSITY = 38; (* Fog table density *)
 
TD3DMaterialColorSource = (
type
// Values for material source
PD3DMateralColorSource = ^TD3DMateralColorSource;
TD3DMateralColorSource = (
D3DMCS_MATERIAL, // Color from material is used
D3DMCS_COLOR1, // Diffuse vertex color is used
D3DMCS_COLOR2 // Specular vertex color is used
); // force 32-bit size enum
);
 
const
{ For back-compatibility with legacy compilations }
// For back-compatibility with legacy compilations
D3DRENDERSTATE_BLENDENABLE = D3DRENDERSTATE_ALPHABLENDENABLE;
D3DRENDERSTATE_FOGTABLESTART = D3DRENDERSTATE_FOGSTART;
D3DRENDERSTATE_FOGTABLEEND = D3DRENDERSTATE_FOGEND;
D3DRENDERSTATE_FOGTABLEDENSITY = D3DRENDERSTATE_FOGDENSITY;
 
{ Bias to apply to the texture coordinate set to apply a wrap to. }
D3DRENDERSTATE_WRAPBIAS = TD3DRenderStateType(128);
 
{ Flags to construct the WRAP render states }
// Bias to apply to the texture coordinate set to apply a wrap to.
D3DRENDERSTATE_WRAPBIAS = 128;
 
(* Flags to construct the WRAP render states *)
D3DWRAP_U = $00000001;
D3DWRAP_V = $00000002;
 
{ Flags to construct the WRAP render states for 1D thru 4D texture coordinates }
(* Flags to construct the WRAP render states for 1D thru 4D texture coordinates *)
D3DWRAPCOORD_0 = $00000001; // same as D3DWRAP_U
D3DWRAPCOORD_1 = $00000002; // same as D3DWRAP_V
D3DWRAPCOORD_2 = $00000004;
D3DWRAPCOORD_3 = $00000008;
 
function D3DRENDERSTATE_STIPPLEPATTERN(y: DWORD): TD3DRenderStateType;
function D3DRENDERSTATE_STIPPLEPATTERN(y: integer) : TD3DRenderStateType;
 
type
 
TD3DState = record
PD3DState = ^TD3DState;
TD3DState = packed record
case Integer of
0: (
dtstTransformStateType: TD3DTransformStateType;
dwArg: array[0..0] of DWORD;
dwArg: Array [ 0..0 ] of DWORD;
);
1: (
dlstLightStateType: TD3DLightStateType;
dvArg: array[0..0] of TD3DValue;
dvArg: Array [ 0..0 ] of TD3DValue;
);
2: (
drstRenderStateType: TD3DRenderStateType;
3673,39 → 6815,39
);
end;
 
D3DSTATE = TD3DState;
 
{ TD3DMatrixLoad structure }
 
TD3DMatrixLoad = record
hDestMatrix: TD3DMatrixHandle; // Destination matrix
hSrcMatrix: TD3DMatrixHandle; // Source matrix
(*
* Operation used to load matrices
* hDstMat = hSrcMat
*)
PD3DMatrixLoad = ^TD3DMatrixLoad;
TD3DMatrixLoad = packed record
hDestMatrix: TD3DMatrixHandle; (* Destination matrix *)
hSrcMatrix: TD3DMatrixHandle; (* Source matrix *)
end;
 
D3DMATRIXLOAD = TD3DMatrixLoad;
 
{ TD3DMatrixMultiply structure }
 
TD3DMatrixMultiply = record
hDestMatrix: TD3DMatrixHandle; // Destination matrix
hSrcMatrix1: TD3DMatrixHandle; // First source matrix
hSrcMatrix2: TD3DMatrixHandle; // Second source matrix
(*
* Operation used to multiply matrices
* hDstMat = hSrcMat1 * hSrcMat2
*)
PD3DMatrixMultiply = ^TD3DMatrixMultiply;
TD3DMatrixMultiply = packed record
hDestMatrix: TD3DMatrixHandle; (* Destination matrix *)
hSrcMatrix1: TD3DMatrixHandle; (* First source matrix *)
hSrcMatrix2: TD3DMatrixHandle; (* Second source matrix *)
end;
 
D3DMATRIXMULTIPLY = TD3DMatrixMultiply;
 
{ TD3DProcessVertices structure }
 
TD3DProcessVertices = record
dwFlags: DWORD; // Do we transform or light or just copy?
wStart: WORD; // Index to first vertex in source
wDest: WORD; // Index to first vertex in local buffer
dwCount: DWORD; // Number of vertices to be processed
dwReserved: DWORD; // Must be zero
(*
* Operation used to transform and light vertices.
*)
PD3DProcessVertices = ^TD3DProcessVertices;
TD3DProcessVertices = packed record
dwFlags: DWORD; (* Do we transform or light or just copy? *)
wStart: WORD; (* Index to first vertex in source *)
wDest: WORD; (* Index to first vertex in local buffer *)
dwCount: DWORD; (* Number of vertices to be processed *)
dwReserved: DWORD; (* Must be zero *)
end;
 
D3DPROCESSVERTICES = TD3DProcessVertices;
 
const
D3DPROCESSVERTICES_TRANSFORMLIGHT = $00000000;
D3DPROCESSVERTICES_TRANSFORM = $00000001;
3715,52 → 6857,54
D3DPROCESSVERTICES_UPDATEEXTENTS = $00000008;
D3DPROCESSVERTICES_NOCOLOR = $00000010;
 
{ TD3DTextureStagesStateType }
 
(*
* State enumerants for per-stage texture processing.
*)
type
TD3DTextureStagesStateType = (
D3DTSS_INVALID_0,
D3DTSS_COLOROP, // TD3DTextureOp - per-stage blending controls for color channels
D3DTSS_COLORARG1, // D3DTA_* (texture arg)
D3DTSS_COLORARG2, // D3DTA_* (texture arg)
D3DTSS_ALPHAOP, // TD3DTextureOp - per-stage blending controls for alpha channel
D3DTSS_ALPHAARG1, // D3DTA_* (texture arg)
D3DTSS_ALPHAARG2, // D3DTA_* (texture arg)
D3DTSS_BUMPENVMAT00, // TD3DValue (bump mapping matrix)
D3DTSS_BUMPENVMAT01, // TD3DValue (bump mapping matrix)
D3DTSS_BUMPENVMAT10, // TD3DValue (bump mapping matrix)
D3DTSS_BUMPENVMAT11, // TD3DValue (bump mapping matrix)
D3DTSS_TEXCOORDINDEX, // identifies which set of texture coordinates index this texture
D3DTSS_ADDRESS, // TD3DTextureAddress for both coordinates
D3DTSS_ADDRESSU, // TD3DTextureAddress for U coordinate
D3DTSS_ADDRESSV, // TD3DTextureAddress for V coordinate
D3DTSS_BORDERCOLOR, // TD3DColor
D3DTSS_MAGFILTER, // TD3DTextureMagFilter filter to use for magnification
D3DTSS_MINFILTER, // TD3DTextureMinFilter filter to use for minification
D3DTSS_MIPFILTER, // TD3DTextureMipFilter filter to use between mipmaps during minification
D3DTSS_MIPMAPLODBIAS, // D3DVALUE Mipmap LOD bias
D3DTSS_MAXMIPLEVEL, // DWORD 0..(n-1) LOD index of largest map to use (0 == largest)
D3DTSS_MAXANISOTROPY, // DWORD maximum anisotropy
D3DTSS_BUMPENVLSCALE, // TD3DValue scale for bump map luminance
D3DTSS_BUMPENVLOFFSET, // TD3DValue offset for bump map luminance
D3DTSS_TEXTURETRANSFORMFLAGS // D3DTEXTURETRANSFORMFLAGS controls texture transform
);
 
D3DTEXTURESTAGESTATETYPE = TD3DTextureStagesStateType;
 
PD3DTextureStageStateType = ^TD3DTextureStageStateType;
TD3DTextureStageStateType = DWORD;
const
{ Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position }
{ and normal in the camera space) should be taken as texture coordinates }
{ Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from }
D3DTSS_COLOROP = 1; (* D3DTEXTUREOP - per-stage blending controls for color channels *)
D3DTSS_COLORARG1 = 2; (* D3DTA_* (texture arg) *)
D3DTSS_COLORARG2 = 3; (* D3DTA_* (texture arg) *)
D3DTSS_ALPHAOP = 4; (* D3DTEXTUREOP - per-stage blending controls for alpha channel *)
D3DTSS_ALPHAARG1 = 5; (* D3DTA_* (texture arg) *)
D3DTSS_ALPHAARG2 = 6; (* D3DTA_* (texture arg) *)
D3DTSS_BUMPENVMAT00 = 7; (* D3DVALUE (bump mapping matrix) *)
D3DTSS_BUMPENVMAT01 = 8; (* D3DVALUE (bump mapping matrix) *)
D3DTSS_BUMPENVMAT10 = 9; (* D3DVALUE (bump mapping matrix) *)
D3DTSS_BUMPENVMAT11 = 10; (* D3DVALUE (bump mapping matrix) *)
D3DTSS_TEXCOORDINDEX = 11; (* identifies which set of texture coordinates index this texture *)
D3DTSS_ADDRESS = 12; (* D3DTEXTUREADDRESS for both coordinates *)
D3DTSS_ADDRESSU = 13; (* D3DTEXTUREADDRESS for U coordinate *)
D3DTSS_ADDRESSV = 14; (* D3DTEXTUREADDRESS for V coordinate *)
D3DTSS_BORDERCOLOR = 15; (* D3DCOLOR *)
D3DTSS_MAGFILTER = 16; (* D3DTEXTUREMAGFILTER filter to use for magnification *)
D3DTSS_MINFILTER = 17; (* D3DTEXTUREMINFILTER filter to use for minification *)
D3DTSS_MIPFILTER = 18; (* D3DTEXTUREMIPFILTER filter to use between mipmaps during minification *)
D3DTSS_MIPMAPLODBIAS = 19; (* D3DVALUE Mipmap LOD bias *)
D3DTSS_MAXMIPLEVEL = 20; (* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) *)
D3DTSS_MAXANISOTROPY = 21; (* DWORD maximum anisotropy *)
D3DTSS_BUMPENVLSCALE = 22; (* D3DVALUE scale for bump map luminance *)
D3DTSS_BUMPENVLOFFSET = 23; (* D3DVALUE offset for bump map luminance *)
D3DTSS_TEXTURETRANSFORMFLAGS = 24; (* D3DTEXTURETRANSFORMFLAGS controls texture transform *)
 
// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position
// and normal in the camera space) should be taken as texture coordinates
// Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from
//
D3DTSS_TCI_PASSTHRU = $00000000;
D3DTSS_TCI_CAMERASPACENORMAL = $00010000;
D3DTSS_TCI_CAMERASPACEPOSITION = $00020000;
D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR = $00030000;
 
{ TD3DTextureOp }
 
type
(*
* Enumerations for COLOROP and ALPHAOP texture blending operations set in
* texture processing stage controls in D3DRENDERSTATE.
*)
PD3DTextureOp = ^TD3DTextureOp;
TD3DTextureOp = (
D3DTOP_INVALID_0,
// Control
3767,10 → 6911,12
D3DTOP_DISABLE, // disables stage
D3DTOP_SELECTARG1, // the default
D3DTOP_SELECTARG2,
 
// Modulate
D3DTOP_MODULATE, // multiply args together
D3DTOP_MODULATE2X, // multiply and 1 bit
D3DTOP_MODULATE4X, // multiply and 2 bits
 
// Add
D3DTOP_ADD, // add arguments together
D3DTOP_ADDSIGNED, // add with -0.5 bias
3779,6 → 6925,7
D3DTOP_ADDSMOOTH, // add 2 args, subtract product
// Arg1 + Arg2 - Arg1*Arg2
// = Arg1 + (1-Arg1)*Arg2
 
// Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
D3DTOP_BLENDDIFFUSEALPHA, // iterated alpha
D3DTOP_BLENDTEXTUREALPHA, // texture alpha
3786,6 → 6933,7
// Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
D3DTOP_BLENDTEXTUREALPHAPM, // texture alpha
D3DTOP_BLENDCURRENTALPHA, // by alpha of current color
 
// Specular mapping
D3DTOP_PREMODULATE, // modulate with next texture before use
D3DTOP_MODULATEALPHA_ADDCOLOR, // Arg1.RGB + Arg1.A*Arg2.RGB
3796,6 → 6944,7
// COLOROP only
D3DTOP_MODULATEINVCOLOR_ADDALPHA, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
// COLOROP only
 
// Bump mapping
D3DTOP_BUMPENVMAP, // per pixel env map perturbation
D3DTOP_BUMPENVMAPLUMINANCE, // with luminance channel
3807,11 → 6956,10
D3DTOP_DOTPRODUCT3
);
 
D3DTEXTUREOP = TD3DTextureOp;
 
{ Values for COLORARG1,2 and ALPHAARG1,2 texture blending operations
set in texture processing stage controls in D3DRENDERSTATE. }
 
(*
* Values for COLORARG1,2 and ALPHAARG1,2 texture blending operations
* set in texture processing stage controls in D3DRENDERSTATE.
*)
const
D3DTA_SELECTMASK = $0000000f; // mask for arg selector
D3DTA_DIFFUSE = $00000000; // select diffuse color
3822,9 → 6970,11
D3DTA_COMPLEMENT = $00000010; // take 1.0 - x
D3DTA_ALPHAREPLICATE = $00000020; // replicate alpha to color components
 
{ IDirect3DTexture2 State Filter Types }
 
(*
* IDirect3DTexture2 State Filter Types
*)
type
PD3DTextureMagFilter = ^TD3DTextureMagFilter;
TD3DTextureMagFilter = (
D3DTFG_INVALID_0,
D3DTFG_POINT, // nearest
3834,8 → 6984,7
D3DTFG_ANISOTROPIC
);
 
D3DTEXTUREMAGFILTER = TD3DTextureMagFilter;
 
PD3DTextureMinFilter = ^TD3DTextureMinFilter;
TD3DTextureMinFilter = (
D3DTFN_INVALID_0,
D3DTFN_POINT, // nearest
3843,8 → 6992,7
D3DTFN_ANISOTROPIC
);
 
D3DTEXTUREMINFILTER = TD3DTextureMinFilter;
 
PD3DTextureMipFilter = ^TD3DTextureMipFilter;
TD3DTextureMipFilter = (
D3DTFP_INVALID_0,
D3DTFP_NONE, // mipmapping disabled (use MAG filter)
3852,37 → 7000,55
D3DTFP_LINEAR // linear interpolation
);
 
D3DTEXTUREMIPFILTER = TD3DTextureMipFilter;
 
{ Triangle flags }
(*
* Triangle flags
*)
 
(*
* Tri strip and fan flags.
* START loads all three vertices
* EVEN and ODD load just v3 with even or odd culling
* START_FLAT contains a count from 0 to 29 that allows the
* whole strip or fan to be culled in one hit.
* e.g. for a quad len = 1
*)
const
D3DTRIFLAG_START = $00000000;
// #define D3DTRIFLAG_STARTFLAT(len) (len) (* 0 < len < 30 *)
function D3DTRIFLAG_STARTFLAT(len: DWORD) : DWORD;
 
const
D3DTRIFLAG_ODD = $0000001e;
D3DTRIFLAG_EVEN = $0000001f;
 
function D3DTRIFLAG_STARTFLAT(len: DWORD): DWORD;
(*
* Triangle edge flags
* enable edges for wireframe or antialiasing
*)
D3DTRIFLAG_EDGEENABLE1 = $00000100; (* v0-v1 edge *)
D3DTRIFLAG_EDGEENABLE2 = $00000200; (* v1-v2 edge *)
D3DTRIFLAG_EDGEENABLE3 = $00000400; (* v2-v0 edge *)
D3DTRIFLAG_EDGEENABLETRIANGLE = (
D3DTRIFLAG_EDGEENABLE1 or D3DTRIFLAG_EDGEENABLE2 or D3DTRIFLAG_EDGEENABLE3);
 
{ Triangle edge flags }
(*
* Primitive structures and related defines. Vertex offsets are to types
* TD3DVertex, TD3DLVertex, or TD3DTLVertex.
*)
 
const
D3DTRIFLAG_EDGEENABLE1 = $00000100; // v0-v1 edge
D3DTRIFLAG_EDGEENABLE2 = $00000200; // v1-v2 edge
D3DTRIFLAG_EDGEENABLE3 = $00000400; // v2-v0 edge
D3DTRIFLAG_EDGEENABLETRIANGLE =
D3DTRIFLAG_EDGEENABLE1 or D3DTRIFLAG_EDGEENABLE2 or D3DTRIFLAG_EDGEENABLE3;
 
{ TD3DTriangle structure }
 
(*
* Triangle list primitive structure
*)
type
PD3DTriangle = ^TD3DTriangle;
TD3DTriangle = record
TD3DTriangle = packed record
case Integer of
0: (
v1: WORD; // Vertex indices
v1: WORD; (* Vertex indices *)
v2: WORD;
v3: WORD;
wFlags: WORD; // Edge (and other) flags
wFlags: WORD; (* Edge (and other) flags *)
);
1: (
wV1: WORD;
3891,16 → 7057,15
);
end;
 
D3DTRIANGLE = TD3DTriangle;
LPD3DTRIANGLE = PD3DTriangle;
 
{ TD3DLine structure }
 
(*
* Line strip structure.
* The instruction count - 1 defines the number of line segments.
*)
PD3DLine = ^TD3DLine;
TD3DLine = record
TD3DLine = packed record
case Integer of
0: (
v1: WORD; // Vertex indices
v1: WORD; (* Vertex indices *)
v2: WORD;
);
1: (
3909,86 → 7074,77
);
end;
 
D3DLINE = TD3DLine;
LPD3DLINE = PD3DLine;
 
{ TD3DSpan structure }
 
(*
* Span structure
* Spans join a list of points with the same y value.
* If the y value changes, a new span is started.
*)
PD3DSpan = ^TD3DSpan;
TD3DSpan = record
wCount: WORD; // Number of spans
wFirst: WORD; // Index to first vertex
TD3DSpan = packed record
wCount: WORD; (* Number of spans *)
wFirst: WORD; (* Index to first vertex *)
end;
 
D3DSPAN = TD3DSpan;
LPD3DSPAN = PD3DSpan;
 
{ TD3DPoint structure }
 
(*
* Point structure
*)
PD3DPoint = ^TD3DPoint;
TD3DPoint = record
wCount: WORD; // number of points
wFirst: WORD; // index to first vertex
TD3DPoint = packed record
wCount: WORD; (* number of points *)
wFirst: WORD; (* index to first vertex *)
end;
 
D3DPOINT = TD3DPoint;
LPD3DPOINT = PD3DPoint;
 
{ TD3DBranch structure }
 
(*
* Forward branch structure.
* Mask is logically anded with the driver status mask
* if the result equals 'value', the branch is taken.
*)
PD3DBranch = ^TD3DBranch;
TD3DBranch = record
dwMask: DWORD; // Bitmask against D3D status
TD3DBranch = packed record
dwMask: DWORD; (* Bitmask against D3D status *)
dwValue: DWORD;
bNegate: BOOL; // TRUE to negate comparison
dwOffset: DWORD; // How far to branch forward (0 for exit)
bNegate: BOOL; (* TRUE to negate comparison *)
dwOffset: DWORD; (* How far to branch forward (0 for exit)*)
end;
 
D3DBRANCH = TD3DBranch;
LPD3DBRANCH = PD3DBranch;
 
{ TD3DStatus structure }
 
(*
* Status used for set status instruction.
* The D3D status is initialised on device creation
* and is modified by all execute calls.
*)
PD3DStatus = ^TD3DStatus;
TD3DStatus = record
dwFlags: DWORD; // Do we set extents or status
dwStatus: DWORD; // D3D status
TD3DStatus = packed record
dwFlags: DWORD; (* Do we set extents or status *)
dwStatus: DWORD; (* D3D status *)
drExtent: TD3DRect;
end;
 
D3DSTATUS = TD3DStatus;
LPD3DSTATUS = PD3DStatus;
 
const
D3DSETSTATUS_STATUS = $00000001;
D3DSETSTATUS_EXTENTS = $00000002;
D3DSETSTATUS_ALL = D3DSETSTATUS_STATUS or D3DSETSTATUS_EXTENTS;
D3DSETSTATUS_ALL = (D3DSETSTATUS_STATUS or D3DSETSTATUS_EXTENTS);
 
{ TD3DClipStatus structure }
 
type
PD3DClipStatus = ^TD3DClipStatus;
TD3DClipStatus = record
dwFlags: DWORD; // Do we set 2d extents, 3D extents or status
dwStatus: DWORD; // Clip status
minx, maxx: Single; // X extents
miny, maxy: Single; // Y extents
minz, maxz: Single; // Z extents
TD3DClipStatus = packed record
dwFlags : DWORD; (* Do we set 2d extents, 3D extents or status *)
dwStatus : DWORD; (* Clip status *)
minx, maxx : float; (* X extents *)
miny, maxy : float; (* Y extents *)
minz, maxz : float; (* Z extents *)
end;
 
D3DCLIPSTATUS = TD3DClipStatus;
LPD3DCLIPSTATUS = PD3DClipStatus;
 
const
D3DCLIPSTATUS_STATUS = $00000001;
D3DCLIPSTATUS_EXTENTS2 = $00000002;
D3DCLIPSTATUS_EXTENTS3 = $00000004;
 
{ TD3DStats structure }
 
(*
* Statistics structure
*)
type
PD3DStats = ^TD3DStats;
TD3DStats = record
TD3DStats = packed record
dwSize: DWORD;
dwTrianglesDrawn: DWORD;
dwLinesDrawn: DWORD;
3997,20 → 7153,18
dwVerticesProcessed: DWORD;
end;
 
D3DSTATS = TD3DStats;
LPD3DSTATS = PD3DStats;
 
{ Execute options. }
 
(*
* Execute options.
* When calling using D3DEXECUTE_UNCLIPPED all the primitives
* inside the buffer must be contained within the viewport.
*)
const
D3DEXECUTE_CLIPPED = $00000001;
D3DEXECUTE_UNCLIPPED = $00000002;
 
{ TD3DExecuteData structure }
 
type
PD3DExecuteData = ^TD3DExecuteData;
TD3DExecuteData = record
TD3DExecuteData = packed record
dwSize: DWORD;
dwVertexOffset: DWORD;
dwVertexCount: DWORD;
4017,24 → 7171,23
dwInstructionOffset: DWORD;
dwInstructionLength: DWORD;
dwHVertexOffset: DWORD;
dsStatus: D3DSTATUS; // Status after execute
dsStatus: TD3DStatus; (* Status after execute *)
end;
 
D3DEXECUTEDATA = TD3DExecuteData;
LPD3DEXECUTEDATA = PD3DExecuteData;
(*
* Palette flags.
* This are or'ed with the peFlags in the PALETTEENTRYs passed to DirectDraw.
*)
 
{ Palette flags. }
 
const
D3DPAL_FREE = $00; // Renderer may use this entry freely
D3DPAL_READONLY = $40; // Renderer may not set this entry
D3DPAL_RESERVED = $80; // Renderer may not use this entry
D3DPAL_FREE = $00; (* Renderer may use this entry freely *)
D3DPAL_READONLY = $40; (* Renderer may not set this entry *)
D3DPAL_RESERVED = $80; (* Renderer may not use this entry *)
 
{ TD3DVertexBufferDesc structure }
 
type
PD3DVertexBufferDesc = ^TD3DVertexBufferDesc;
TD3DVertexBufferDesc = record
TD3DVertexBufferDesc = packed record
dwSize: DWORD;
dwCaps: DWORD;
dwFVF: DWORD;
4041,36 → 7194,35
dwNumVertices: DWORD;
end;
 
D3DVERTEXBUFFERDESC = TD3DVertexBufferDesc;
LPD3DVERTEXBUFFERDESC = PD3DVertexBufferDesc;
 
{ These correspond to DDSCAPS_* flags }
 
const
(* These correspond to DDSCAPS_* flags *)
D3DVBCAPS_SYSTEMMEMORY = $00000800;
D3DVBCAPS_WRITEONLY = $00010000;
D3DVBCAPS_OPTIMIZED = $80000000;
D3DVBCAPS_DONOTCLIP = $00000001;
 
{ Vertex Operations for ProcessVertices }
(* Vertex Operations for ProcessVertices *)
D3DVOP_LIGHT = (1 shl 10);
D3DVOP_TRANSFORM = (1 shl 0);
D3DVOP_CLIP = (1 shl 2);
D3DVOP_EXTENTS = (1 shl 3);
 
D3DVOP_LIGHT = 1 shl 10;
D3DVOP_TRANSFORM = 1 shl 0;
D3DVOP_CLIP = 1 shl 2;
D3DVOP_EXTENTS = 1 shl 3;
(* The maximum number of vertices user can pass to any d3d
drawing function or to create vertex buffer with
*)
D3DMAXNUMVERTICES = ((1 shl 16) - 1);
(* The maximum number of primitives user can pass to any d3d
drawing function.
*)
D3DMAXNUMPRIMITIVES = ((1 shl 16) - 1);
 
{ The maximum number of vertices user can pass to any d3d
drawing function or to create vertex buffer with }
D3DMAXNUMVERTICES = (1 shl 16)-1;
(* Bits for dwFlags in ProcessVertices call *)
D3DPV_DONOTCOPYDATA = (1 shl 0);
 
{ The maximum number of primitives user can pass to any d3d drawing function. }
D3DMAXNUMPRIMITIVES = (1 shl 16)-1;
//-------------------------------------------------------------------
 
{ Bits for dwFlags in ProcessVertices call }
D3DPV_DONOTCOPYDATA = 1 shl 0;
 
{ Flexible vertex format bits }
 
// Flexible vertex format bits
//
D3DFVF_RESERVED0 = $001;
D3DFVF_POSITION_MASK = $00E;
D3DFVF_XYZ = $002;
4080,10 → 7232,12
D3DFVF_XYZB3 = $00a;
D3DFVF_XYZB4 = $00c;
D3DFVF_XYZB5 = $00e;
 
D3DFVF_NORMAL = $010;
D3DFVF_RESERVED1 = $020;
D3DFVF_DIFFUSE = $040;
D3DFVF_SPECULAR = $080;
 
D3DFVF_TEXCOUNT_MASK = $f00;
D3DFVF_TEXCOUNT_SHIFT = 8;
D3DFVF_TEX0 = $000;
4096,30 → 7250,27
D3DFVF_TEX7 = $700;
D3DFVF_TEX8 = $800;
 
D3DFVF_RESERVED2 = $F000; // 4 reserved bits
D3DFVF_RESERVED2 = $f000; // 4 reserved bits
 
D3DFVF_VERTEX = D3DFVF_XYZ or D3DFVF_NORMAL or D3DFVF_TEX1;
D3DFVF_LVERTEX = D3DFVF_XYZ or D3DFVF_RESERVED1 or D3DFVF_DIFFUSE or
D3DFVF_SPECULAR or D3DFVF_TEX1;
D3DFVF_TLVERTEX = D3DFVF_XYZRHW or D3DFVF_DIFFUSE or D3DFVF_SPECULAR or
D3DFVF_TEX1;
D3DFVF_VERTEX = ( D3DFVF_XYZ or D3DFVF_NORMAL or D3DFVF_TEX1 );
D3DFVF_LVERTEX = ( D3DFVF_XYZ or D3DFVF_RESERVED1 or D3DFVF_DIFFUSE or
D3DFVF_SPECULAR or D3DFVF_TEX1 );
D3DFVF_TLVERTEX = ( D3DFVF_XYZRHW or D3DFVF_DIFFUSE or D3DFVF_SPECULAR or
D3DFVF_TEX1 );
 
{ TD3DDP_PtrStride }
 
type
TD3DDP_PtrStride = record
lpvData: Pointer;
PD3DDP_PtrStride = ^TD3DDP_PtrStride;
TD3DDP_PtrStride = packed record
lpvData : pointer;
dwStride: DWORD;
end;
 
D3DDP_PTRSTRIDE = TD3DDP_PtrStride;
 
const
D3DDP_MAXTEXCOORD = 8;
 
type
PD3DDrawPrimitiveStridedData = ^TD3DDrawPrimitiveStridedData;
TD3DDrawPrimitiveStridedData = record
TD3DDrawPrimitiveStridedData = packed record
position: TD3DDP_PtrStride;
normal: TD3DDP_PtrStride;
diffuse: TD3DDP_PtrStride;
4127,62 → 7278,57
textureCoords: array[0..D3DDP_MAXTEXCOORD-1] of TD3DDP_PtrStride;
end;
 
D3DDRAWPRIMITIVESTRIDEDDATA = TD3DDrawPrimitiveStridedData;
LPD3DDRAWPRIMITIVESTRIDEDDATA = PD3DDrawPrimitiveStridedData;
 
{ ComputeSphereVisibility return values }
 
//---------------------------------------------------------------------
// ComputeSphereVisibility return values
//
const
D3DVIS_INSIDE_FRUSTUM = 0;
D3DVIS_INTERSECT_FRUSTUM = 1;
D3DVIS_OUTSIDE_FRUSTUM = 2;
D3DVIS_INSIDE_LEFT = 0;
D3DVIS_INTERSECT_LEFT = 1 shl 2;
D3DVIS_OUTSIDE_LEFT = 2 shl 2;
D3DVIS_INTERSECT_LEFT = (1 shl 2);
D3DVIS_OUTSIDE_LEFT = (2 shl 2);
D3DVIS_INSIDE_RIGHT = 0;
D3DVIS_INTERSECT_RIGHT = 1 shl 4;
D3DVIS_OUTSIDE_RIGHT = 2 shl 4;
D3DVIS_INTERSECT_RIGHT = (1 shl 4);
D3DVIS_OUTSIDE_RIGHT = (2 shl 4);
D3DVIS_INSIDE_TOP = 0;
D3DVIS_INTERSECT_TOP = 1 shl 6;
D3DVIS_OUTSIDE_TOP = 2 shl 6;
D3DVIS_INTERSECT_TOP = (1 shl 6);
D3DVIS_OUTSIDE_TOP = (2 shl 6);
D3DVIS_INSIDE_BOTTOM = 0;
D3DVIS_INTERSECT_BOTTOM = 1 shl 8;
D3DVIS_OUTSIDE_BOTTOM = 2 shl 8;
D3DVIS_INTERSECT_BOTTOM = (1 shl 8);
D3DVIS_OUTSIDE_BOTTOM = (2 shl 8);
D3DVIS_INSIDE_NEAR = 0;
D3DVIS_INTERSECT_NEAR = 1 shl 10;
D3DVIS_OUTSIDE_NEAR = 2 shl 10;
D3DVIS_INTERSECT_NEAR = (1 shl 10);
D3DVIS_OUTSIDE_NEAR = (2 shl 10);
D3DVIS_INSIDE_FAR = 0;
D3DVIS_INTERSECT_FAR = 1 shl 12;
D3DVIS_OUTSIDE_FAR = 2 shl 12;
D3DVIS_INTERSECT_FAR = (1 shl 12);
D3DVIS_OUTSIDE_FAR = (2 shl 12);
 
D3DVIS_MASK_FRUSTUM = 3 shl 0;
D3DVIS_MASK_LEFT = 3 shl 2;
D3DVIS_MASK_RIGHT = 3 shl 4;
D3DVIS_MASK_TOP = 3 shl 6;
D3DVIS_MASK_BOTTOM = 3 shl 8;
D3DVIS_MASK_NEAR = 3 shl 10;
D3DVIS_MASK_FAR = 3 shl 12;
D3DVIS_MASK_FRUSTUM = (3 shl 0);
D3DVIS_MASK_LEFT = (3 shl 2);
D3DVIS_MASK_RIGHT = (3 shl 4);
D3DVIS_MASK_TOP = (3 shl 6);
D3DVIS_MASK_BOTTOM = (3 shl 8);
D3DVIS_MASK_NEAR = (3 shl 10);
D3DVIS_MASK_FAR = (3 shl 12);
 
{ To be used with GetInfo() }
 
// To be used with GetInfo()
D3DDEVINFOID_TEXTUREMANAGER = 1;
D3DDEVINFOID_D3DTEXTUREMANAGER = 2;
D3DDEVINFOID_TEXTURING = 3;
 
type
 
{ TD3DStateBlockType }
 
PD3DStateBlockType = ^TD3DStateBlockType;
TD3DStateBlockType = (
D3DBST_INVALID_0,
D3DSBT_INVALID_0 ,
D3DSBT_ALL , // capture all state
D3DSBT_PIXELSTATE, // capture pixel state
D3DSBT_VERTEXSTATE // capture vertex state
);
 
D3DSTATEBLOCKTYPE = TD3DStateBlockType;
 
{ TD3DVertexBlendFlags }
 
// The D3DVERTEXBLENDFLAGS type is used with D3DRENDERSTATE_VERTEXBLEND state.
//
PD3DVertexBlendFlags = ^TD3DVertexBlendFlags;
TD3DVertexBlendFlags = (
D3DVBLEND_DISABLE, // Disable vertex blending
D3DVBLEND_1WEIGHT, // blend between 2 matrices
4190,273 → 7336,20
D3DVBLEND_3WEIGHTS // blend between 4 matrices
);
 
D3DVERTEXBLENDFLAGS = TD3DVertexBlendFlags;
 
{ TD3DTextureTransformFlags }
 
PD3DTextureTransformFlags = ^TD3DTextureTransformFlags;
TD3DTextureTransformFlags = (
D3DTTFF_DISABLE, // texture coordinates are passed directly
D3DTTFF_COUNT1, // rasterizer should expect 1-D texture coords
D3DTTFF_COUNT2, // rasterizer should expect 2-D texture coords
D3DTTFF_COUNT3, // rasterizer should expect 3-D texture coords
D3DTTFF_COUNT4, // rasterizer should expect 4-D texture coords
D3DTIFF_INVALID_5,
D3DTIFF_INVALID_6,
D3DTIFF_INVALID_7,
D3DTIFF_INVALID_8,
D3DTIFF_INVALID_9,
D3DTIFF_INVALID_10,
D3DTIFF_INVALID_11,
D3DTIFF_INVALID_12,
D3DTIFF_INVALID_13,
D3DTIFF_INVALID_14,
D3DTIFF_INVALID_15,
D3DTIFF_INVALID_16,
D3DTIFF_INVALID_17,
D3DTIFF_INVALID_18,
D3DTIFF_INVALID_19,
D3DTIFF_INVALID_20,
D3DTIFF_INVALID_21,
D3DTIFF_INVALID_22,
D3DTIFF_INVALID_23,
D3DTIFF_INVALID_24,
D3DTIFF_INVALID_25,
D3DTIFF_INVALID_26,
D3DTIFF_INVALID_27,
D3DTIFF_INVALID_28,
D3DTIFF_INVALID_29,
D3DTIFF_INVALID_30,
D3DTIFF_INVALID_31,
D3DTIFF_INVALID_32,
D3DTIFF_INVALID_33,
D3DTIFF_INVALID_34,
D3DTIFF_INVALID_35,
D3DTIFF_INVALID_36,
D3DTIFF_INVALID_37,
D3DTIFF_INVALID_38,
D3DTIFF_INVALID_39,
D3DTIFF_INVALID_40,
D3DTIFF_INVALID_41,
D3DTIFF_INVALID_42,
D3DTIFF_INVALID_43,
D3DTIFF_INVALID_44,
D3DTIFF_INVALID_45,
D3DTIFF_INVALID_46,
D3DTIFF_INVALID_47,
D3DTIFF_INVALID_48,
D3DTIFF_INVALID_49,
D3DTIFF_INVALID_50,
D3DTIFF_INVALID_51,
D3DTIFF_INVALID_52,
D3DTIFF_INVALID_53,
D3DTIFF_INVALID_54,
D3DTIFF_INVALID_55,
D3DTIFF_INVALID_56,
D3DTIFF_INVALID_57,
D3DTIFF_INVALID_58,
D3DTIFF_INVALID_59,
D3DTIFF_INVALID_60,
D3DTIFF_INVALID_61,
D3DTIFF_INVALID_62,
D3DTIFF_INVALID_63,
D3DTIFF_INVALID_64,
D3DTIFF_INVALID_65,
D3DTIFF_INVALID_66,
D3DTIFF_INVALID_67,
D3DTIFF_INVALID_68,
D3DTIFF_INVALID_69,
D3DTIFF_INVALID_70,
D3DTIFF_INVALID_71,
D3DTIFF_INVALID_72,
D3DTIFF_INVALID_73,
D3DTIFF_INVALID_74,
D3DTIFF_INVALID_75,
D3DTIFF_INVALID_76,
D3DTIFF_INVALID_77,
D3DTIFF_INVALID_78,
D3DTIFF_INVALID_79,
D3DTIFF_INVALID_80,
D3DTIFF_INVALID_81,
D3DTIFF_INVALID_82,
D3DTIFF_INVALID_83,
D3DTIFF_INVALID_84,
D3DTIFF_INVALID_85,
D3DTIFF_INVALID_86,
D3DTIFF_INVALID_87,
D3DTIFF_INVALID_88,
D3DTIFF_INVALID_89,
D3DTIFF_INVALID_90,
D3DTIFF_INVALID_91,
D3DTIFF_INVALID_92,
D3DTIFF_INVALID_93,
D3DTIFF_INVALID_94,
D3DTIFF_INVALID_95,
D3DTIFF_INVALID_96,
D3DTIFF_INVALID_97,
D3DTIFF_INVALID_98,
D3DTIFF_INVALID_99,
D3DTIFF_INVALID_100,
D3DTIFF_INVALID_101,
D3DTIFF_INVALID_102,
D3DTIFF_INVALID_103,
D3DTIFF_INVALID_104,
D3DTIFF_INVALID_105,
D3DTIFF_INVALID_106,
D3DTIFF_INVALID_107,
D3DTIFF_INVALID_108,
D3DTIFF_INVALID_109,
D3DTIFF_INVALID_110,
D3DTIFF_INVALID_111,
D3DTIFF_INVALID_112,
D3DTIFF_INVALID_113,
D3DTIFF_INVALID_114,
D3DTIFF_INVALID_115,
D3DTIFF_INVALID_116,
D3DTIFF_INVALID_117,
D3DTIFF_INVALID_118,
D3DTIFF_INVALID_119,
D3DTIFF_INVALID_120,
D3DTIFF_INVALID_121,
D3DTIFF_INVALID_122,
D3DTIFF_INVALID_123,
D3DTIFF_INVALID_124,
D3DTIFF_INVALID_125,
D3DTIFF_INVALID_126,
D3DTIFF_INVALID_127,
D3DTIFF_INVALID_128,
D3DTIFF_INVALID_129,
D3DTIFF_INVALID_130,
D3DTIFF_INVALID_131,
D3DTIFF_INVALID_132,
D3DTIFF_INVALID_133,
D3DTIFF_INVALID_134,
D3DTIFF_INVALID_135,
D3DTIFF_INVALID_136,
D3DTIFF_INVALID_137,
D3DTIFF_INVALID_138,
D3DTIFF_INVALID_139,
D3DTIFF_INVALID_140,
D3DTIFF_INVALID_141,
D3DTIFF_INVALID_142,
D3DTIFF_INVALID_143,
D3DTIFF_INVALID_144,
D3DTIFF_INVALID_145,
D3DTIFF_INVALID_146,
D3DTIFF_INVALID_147,
D3DTIFF_INVALID_148,
D3DTIFF_INVALID_149,
D3DTIFF_INVALID_150,
D3DTIFF_INVALID_151,
D3DTIFF_INVALID_152,
D3DTIFF_INVALID_153,
D3DTIFF_INVALID_154,
D3DTIFF_INVALID_155,
D3DTIFF_INVALID_156,
D3DTIFF_INVALID_157,
D3DTIFF_INVALID_158,
D3DTIFF_INVALID_159,
D3DTIFF_INVALID_160,
D3DTIFF_INVALID_161,
D3DTIFF_INVALID_162,
D3DTIFF_INVALID_163,
D3DTIFF_INVALID_164,
D3DTIFF_INVALID_165,
D3DTIFF_INVALID_166,
D3DTIFF_INVALID_167,
D3DTIFF_INVALID_168,
D3DTIFF_INVALID_169,
D3DTIFF_INVALID_170,
D3DTIFF_INVALID_171,
D3DTIFF_INVALID_172,
D3DTIFF_INVALID_173,
D3DTIFF_INVALID_174,
D3DTIFF_INVALID_175,
D3DTIFF_INVALID_176,
D3DTIFF_INVALID_177,
D3DTIFF_INVALID_178,
D3DTIFF_INVALID_179,
D3DTIFF_INVALID_180,
D3DTIFF_INVALID_181,
D3DTIFF_INVALID_182,
D3DTIFF_INVALID_183,
D3DTIFF_INVALID_184,
D3DTIFF_INVALID_185,
D3DTIFF_INVALID_186,
D3DTIFF_INVALID_187,
D3DTIFF_INVALID_188,
D3DTIFF_INVALID_189,
D3DTIFF_INVALID_190,
D3DTIFF_INVALID_191,
D3DTIFF_INVALID_192,
D3DTIFF_INVALID_193,
D3DTIFF_INVALID_194,
D3DTIFF_INVALID_195,
D3DTIFF_INVALID_196,
D3DTIFF_INVALID_197,
D3DTIFF_INVALID_198,
D3DTIFF_INVALID_199,
D3DTIFF_INVALID_200,
D3DTIFF_INVALID_201,
D3DTIFF_INVALID_202,
D3DTIFF_INVALID_203,
D3DTIFF_INVALID_204,
D3DTIFF_INVALID_205,
D3DTIFF_INVALID_206,
D3DTIFF_INVALID_207,
D3DTIFF_INVALID_208,
D3DTIFF_INVALID_209,
D3DTIFF_INVALID_210,
D3DTIFF_INVALID_211,
D3DTIFF_INVALID_212,
D3DTIFF_INVALID_213,
D3DTIFF_INVALID_214,
D3DTIFF_INVALID_215,
D3DTIFF_INVALID_216,
D3DTIFF_INVALID_217,
D3DTIFF_INVALID_218,
D3DTIFF_INVALID_219,
D3DTIFF_INVALID_220,
D3DTIFF_INVALID_221,
D3DTIFF_INVALID_222,
D3DTIFF_INVALID_223,
D3DTIFF_INVALID_224,
D3DTIFF_INVALID_225,
D3DTIFF_INVALID_226,
D3DTIFF_INVALID_227,
D3DTIFF_INVALID_228,
D3DTIFF_INVALID_229,
D3DTIFF_INVALID_230,
D3DTIFF_INVALID_231,
D3DTIFF_INVALID_232,
D3DTIFF_INVALID_233,
D3DTIFF_INVALID_234,
D3DTIFF_INVALID_235,
D3DTIFF_INVALID_236,
D3DTIFF_INVALID_237,
D3DTIFF_INVALID_238,
D3DTIFF_INVALID_239,
D3DTIFF_INVALID_240,
D3DTIFF_INVALID_241,
D3DTIFF_INVALID_242,
D3DTIFF_INVALID_243,
D3DTIFF_INVALID_244,
D3DTIFF_INVALID_245,
D3DTIFF_INVALID_246,
D3DTIFF_INVALID_247,
D3DTIFF_INVALID_248,
D3DTIFF_INVALID_249,
D3DTIFF_INVALID_250,
D3DTIFF_INVALID_251,
D3DTIFF_INVALID_252,
D3DTIFF_INVALID_253,
D3DTIFF_INVALID_254,
D3DTIFF_INVALID_255,
D3DTTFF_PROJECTED // texcoords to be divided by COUNTth element
D3DTTFF_COUNT4 // rasterizer should expect 4-D texture coords
);
 
{ Macros to set texture coordinate format bits in the FVF id }
const
D3DTTFF_PROJECTED = TD3DTextureTransformFlags(256); // texcoords to be divided by COUNTth element
 
const
// Macros to set texture coordinate format bits in the FVF id
 
D3DFVF_TEXTUREFORMAT2 = 0; // Two floating point values
D3DFVF_TEXTUREFORMAT1 = 3; // One floating point value
D3DFVF_TEXTUREFORMAT3 = 1; // Three floating point values
4469,7 → 7362,6
 
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: d3dcaps.h
* Content: Direct3D capabilities include file
4476,52 → 7368,46
*
***************************************************************************)
 
{ Description of capabilities of transform }
(* Description of capabilities of transform *)
 
type
PD3DTransformCaps = ^TD3DTransformCaps;
TD3DTransformCaps = record
TD3DTransformCaps = packed record
dwSize: DWORD;
dwCaps: DWORD;
end;
 
D3DTRANSFORMCAPS = TD3DTransformCaps;
LPD3DTRANSFORMCAPS = PD3DTransformCaps;
 
const
D3DTRANSFORMCAPS_CLIP = $00000001; // Will clip whilst transforming
D3DTRANSFORMCAPS_CLIP = $00000001; (* Will clip whilst transforming *)
 
{ Description of capabilities of lighting }
(* Description of capabilities of lighting *)
 
type
PD3DLightingCaps = ^TD3DLightingCaps;
TD3DLightingCaps = record
TD3DLightingCaps = packed record
dwSize: DWORD;
dwCaps: DWORD; // Lighting caps
dwLightingModel: DWORD; // Lighting model - RGB or mono
dwNumLights: DWORD; // Number of lights that can be handled
dwCaps: DWORD; (* Lighting caps *)
dwLightingModel: DWORD; (* Lighting model - RGB or mono *)
dwNumLights: DWORD; (* Number of lights that can be handled *)
end;
 
D3DLIGHTINGCAPS = TD3DLightingCaps;
LPD3DLIGHTINGCAPS = PD3DLightingCaps;
 
const
D3DLIGHTINGMODEL_RGB = $00000001;
D3DLIGHTINGMODEL_MONO = $00000002;
 
D3DLIGHTCAPS_POINT = $00000001; // Point lights supported
D3DLIGHTCAPS_SPOT = $00000002; // Spot lights supported
D3DLIGHTCAPS_DIRECTIONAL = $00000004; // Directional lights supported
D3DLIGHTCAPS_PARALLELPOINT = $00000008; // Parallel point lights supported
D3DLIGHTCAPS_GLSPOT = $00000010; // GL syle spot lights supported
D3DLIGHTCAPS_POINT = $00000001; (* Point lights supported *)
D3DLIGHTCAPS_SPOT = $00000002; (* Spot lights supported *)
D3DLIGHTCAPS_DIRECTIONAL = $00000004; (* Directional lights supported *)
D3DLIGHTCAPS_PARALLELPOINT = $00000008; (* Parallel point lights supported *)
D3DLIGHTCAPS_GLSPOT = $00000010; (* GL syle spot lights supported *)
 
{ Description of capabilities for each primitive type }
(* Description of capabilities for each primitive type *)
 
type
PD3DPrimCaps = ^TD3DPrimCaps;
TD3DPrimCaps = record
TD3DPrimCaps = packed record
dwSize: DWORD;
dwMiscCaps: DWORD; // Capability flags
dwMiscCaps: DWORD; (* Capability flags *)
dwRasterCaps: DWORD;
dwZCmpCaps: DWORD;
dwSrcBlendCaps: DWORD;
4532,16 → 7418,13
dwTextureFilterCaps: DWORD;
dwTextureBlendCaps: DWORD;
dwTextureAddressCaps: DWORD;
dwStippleWidth: DWORD; // maximum width and height of
dwStippleHeight: DWORD; // of supported stipple (up to 32x32)
dwStippleWidth: DWORD; (* maximum width and height of *)
dwStippleHeight: DWORD; (* of supported stipple (up to 32x32) *)
end;
 
D3DPRIMCAPS = TD3DPrimCaps;
LPD3DPRIMCAPS = PD3DPrimCaps;
const
(* TD3DPrimCaps dwMiscCaps *)
 
{ TD3DPrimCaps dwMiscCaps }
 
const
D3DPMISCCAPS_MASKPLANES = $00000001;
D3DPMISCCAPS_MASKZ = $00000002;
D3DPMISCCAPS_LINEPATTERNREP = $00000004;
4550,7 → 7433,7
D3DPMISCCAPS_CULLCW = $00000020;
D3DPMISCCAPS_CULLCCW = $00000040;
 
{ TD3DPrimCaps dwRasterCaps }
(* TD3DPrimCaps dwRasterCaps *)
 
D3DPRASTERCAPS_DITHER = $00000001;
D3DPRASTERCAPS_ROP2 = $00000002;
4575,8 → 7458,9
D3DPRASTERCAPS_WFOG = $00100000;
D3DPRASTERCAPS_ZFOG = $00200000;
 
{ TD3DPrimCaps dwZCmpCaps, dwAlphaCmpCaps }
(* TD3DPrimCaps dwZCmpCaps, dwAlphaCmpCaps *)
 
const
D3DPCMPCAPS_NEVER = $00000001;
D3DPCMPCAPS_LESS = $00000002;
D3DPCMPCAPS_EQUAL = $00000004;
4586,7 → 7470,7
D3DPCMPCAPS_GREATEREQUAL = $00000040;
D3DPCMPCAPS_ALWAYS = $00000080;
 
{ TD3DPrimCaps dwSourceBlendCaps, dwDestBlendCaps }
(* TD3DPrimCaps dwSourceBlendCaps, dwDestBlendCaps *)
 
D3DPBLENDCAPS_ZERO = $00000001;
D3DPBLENDCAPS_ONE = $00000002;
4602,7 → 7486,7
D3DPBLENDCAPS_BOTHSRCALPHA = $00000800;
D3DPBLENDCAPS_BOTHINVSRCALPHA = $00001000;
 
{ TD3DPrimCaps dwShadeCaps }
(* TD3DPrimCaps dwShadeCaps *)
 
D3DPSHADECAPS_COLORFLATMONO = $00000001;
D3DPSHADECAPS_COLORFLATRGB = $00000002;
4629,23 → 7513,75
D3DPSHADECAPS_FOGGOURAUD = $00080000;
D3DPSHADECAPS_FOGPHONG = $00100000;
 
{ TD3DPrimCaps dwTextureCaps }
(* TD3DPrimCaps dwTextureCaps *)
 
(*
* Perspective-correct texturing is supported
*)
D3DPTEXTURECAPS_PERSPECTIVE = $00000001;
 
(*
* Power-of-2 texture dimensions are required
*)
D3DPTEXTURECAPS_POW2 = $00000002;
 
(*
* Alpha in texture pixels is supported
*)
D3DPTEXTURECAPS_ALPHA = $00000004;
 
(*
* Color-keyed textures are supported
*)
D3DPTEXTURECAPS_TRANSPARENCY = $00000008;
 
(*
* obsolete, see D3DPTADDRESSCAPS_BORDER
*)
D3DPTEXTURECAPS_BORDER = $00000010;
 
(*
* Only square textures are supported
*)
D3DPTEXTURECAPS_SQUAREONLY = $00000020;
 
(*
* Texture indices are not scaled by the texture size prior
* to interpolation.
*)
D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE = $00000040;
 
(*
* Device can draw alpha from texture palettes
*)
D3DPTEXTURECAPS_ALPHAPALETTE = $00000080;
 
(*
* Device can use non-POW2 textures if:
* 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage
* 2) D3DRS_WRAP(N) is zero for this texture's coordinates
* 3) mip mapping is not enabled (use magnification filter only)
*)
D3DPTEXTURECAPS_NONPOW2CONDITIONAL = $00000100;
 
// 0x00000200L unused
 
(*
* Device can divide transformed texture coordinates by the
* COUNTth texture coordinate (can do D3DTTFF_PROJECTED)
*)
D3DPTEXTURECAPS_PROJECTED = $00000400;
 
(*
* Device can do cubemap textures
*)
D3DPTEXTURECAPS_CUBEMAP = $00000800;
 
D3DPTEXTURECAPS_COLORKEYBLEND = $00001000;
 
{ TD3DPrimCaps dwTextureFilterCaps }
 
(* TD3DPrimCaps dwTextureFilterCaps *)
 
D3DPTFILTERCAPS_NEAREST = $00000001;
D3DPTFILTERCAPS_LINEAR = $00000002;
D3DPTFILTERCAPS_MIPNEAREST = $00000004;
4653,19 → 7589,16
D3DPTFILTERCAPS_LINEARMIPNEAREST = $00000010;
D3DPTFILTERCAPS_LINEARMIPLINEAR = $00000020;
 
{ Device3 Min Filter }
 
(* Device3 Min Filter *)
D3DPTFILTERCAPS_MINFPOINT = $00000100;
D3DPTFILTERCAPS_MINFLINEAR = $00000200;
D3DPTFILTERCAPS_MINFANISOTROPIC = $00000400;
 
{ Device3 Mip Filter }
 
(* Device3 Mip Filter *)
D3DPTFILTERCAPS_MIPFPOINT = $00010000;
D3DPTFILTERCAPS_MIPFLINEAR = $00020000;
 
{ Device3 Mag Filter }
 
(* Device3 Mag Filter *)
D3DPTFILTERCAPS_MAGFPOINT = $01000000;
D3DPTFILTERCAPS_MAGFLINEAR = $02000000;
D3DPTFILTERCAPS_MAGFANISOTROPIC = $04000000;
4672,7 → 7605,7
D3DPTFILTERCAPS_MAGFAFLATCUBIC = $08000000;
D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC = $10000000;
 
{ TD3DPrimCaps dwTextureBlendCaps }
(* TD3DPrimCaps dwTextureBlendCaps *)
 
D3DPTBLENDCAPS_DECAL = $00000001;
D3DPTBLENDCAPS_MODULATE = $00000002;
4683,8 → 7616,7
D3DPTBLENDCAPS_COPY = $00000040;
D3DPTBLENDCAPS_ADD = $00000080;
 
{ TD3DPrimCaps dwTextureAddressCaps }
 
(* TD3DPrimCaps dwTextureAddressCaps *)
D3DPTADDRESSCAPS_WRAP = $00000001;
D3DPTADDRESSCAPS_MIRROR = $00000002;
D3DPTADDRESSCAPS_CLAMP = $00000004;
4691,7 → 7623,7
D3DPTADDRESSCAPS_BORDER = $00000008;
D3DPTADDRESSCAPS_INDEPENDENTUV = $00000010;
 
{ D3DDEVICEDESC dwStencilCaps }
(* D3DDEVICEDESC dwStencilCaps *)
 
D3DSTENCILCAPS_KEEP = $00000001;
D3DSTENCILCAPS_ZERO = $00000002;
4702,7 → 7634,7
D3DSTENCILCAPS_INCR = $00000040;
D3DSTENCILCAPS_DECR = $00000080;
 
{ D3DDEVICEDESC dwTextureOpCaps }
(* D3DDEVICEDESC dwTextureOpCaps *)
 
D3DTEXOPCAPS_DISABLE = $00000001;
D3DTEXOPCAPS_SELECTARG1 = $00000002;
4729,77 → 7661,41
D3DTEXOPCAPS_BUMPENVMAPLUMINANCE = $00400000;
D3DTEXOPCAPS_DOTPRODUCT3 = $00800000;
 
{ D3DDEVICEDESC dwFVFCaps flags }
(* D3DDEVICEDESC dwFVFCaps flags *)
 
D3DFVFCAPS_TEXCOORDCOUNTMASK = $0000ffff; // mask for texture coordinate count field
D3DFVFCAPS_DONOTSTRIPELEMENTS = $00080000; // Device prefers that vertex elements not be stripped
D3DFVFCAPS_TEXCOORDCOUNTMASK = $0000ffff; (* mask for texture coordinate count field *)
D3DFVFCAPS_DONOTSTRIPELEMENTS = $00080000; (* Device prefers that vertex elements not be stripped *)
 
{ Description for a device. }
(*
* Description for a device.
* This is used to describe a device that is to be created or to query
* the current device.
*)
 
type
PD3DDeviceDesc_DX3 = ^TD3DDeviceDesc_DX3;
TD3DDeviceDesc_DX3 = record
dwSize: DWORD; // Size of D3DDEVICEDESC structure
dwFlags: DWORD; // Indicates which fields have valid data
dcmColorModel: TD3DColorModel; // Color model of device
dwDevCaps: DWORD; // Capabilities of device
dtcTransformCaps: TD3DTransformCaps; // Capabilities of transform
bClipping: BOOL; // Device can do 3D clipping
dlcLightingCaps: TD3DLightingCaps; // Capabilities of lighting
PD3DDeviceDesc = ^TD3DDeviceDesc;
TD3DDeviceDesc = packed record
dwSize: DWORD; (* Size of TD3DDeviceDesc structure *)
dwFlags: DWORD; (* Indicates which fields have valid data *)
dcmColorModel: TD3DColorModel; (* Color model of device *)
dwDevCaps: DWORD; (* Capabilities of device *)
dtcTransformCaps: TD3DTransformCaps; (* Capabilities of transform *)
bClipping: BOOL; (* Device can do 3D clipping *)
dlcLightingCaps: TD3DLightingCaps; (* Capabilities of lighting *)
dpcLineCaps: TD3DPrimCaps;
dpcTriCaps: TD3DPrimCaps;
dwDeviceRenderBitDepth: DWORD; // One of DDBB_8, 16, etc..
dwDeviceZBufferBitDepth: DWORD; // One of DDBD_16, 32, etc..
dwMaxBufferSize: DWORD; // Maximum execute buffer size
dwMaxVertexCount: DWORD; // Maximum vertex count
end;
dwDeviceRenderBitDepth: DWORD; (* One of DDBB_8, 16, etc.. *)
dwDeviceZBufferBitDepth: DWORD; (* One of DDBD_16, 32, etc.. *)
dwMaxBufferSize: DWORD; (* Maximum execute buffer size *)
dwMaxVertexCount: DWORD; (* Maximum vertex count *)
// *** New fields for DX5 *** //
 
PD3DDeviceDesc_DX5 = ^TD3DDeviceDesc_DX5;
TD3DDeviceDesc_DX5 = record
dwSize: DWORD; // Size of D3DDEVICEDESC structure
dwFlags: DWORD; // Indicates which fields have valid data
dcmColorModel: TD3DColorModel; // Color model of device
dwDevCaps: DWORD; // Capabilities of device
dtcTransformCaps: TD3DTransformCaps; // Capabilities of transform
bClipping: BOOL; // Device can do 3D clipping
dlcLightingCaps: TD3DLightingCaps; // Capabilities of lighting
dpcLineCaps: TD3DPrimCaps;
dpcTriCaps: TD3DPrimCaps;
dwDeviceRenderBitDepth: DWORD; // One of DDBB_8, 16, etc..
dwDeviceZBufferBitDepth: DWORD; // One of DDBD_16, 32, etc..
dwMaxBufferSize: DWORD; // Maximum execute buffer size
dwMaxVertexCount: DWORD; // Maximum vertex count
// New fields for DX5
// Width and height caps are 0 for legacy HALs.
dwMinTextureWidth, dwMinTextureHeight : DWORD;
dwMaxTextureWidth, dwMaxTextureHeight : DWORD;
dwMinStippleWidth, dwMaxStippleWidth : DWORD;
dwMinStippleHeight, dwMaxStippleHeight : DWORD;
end;
 
PD3DDeviceDesc_DX6 = ^TD3DDeviceDesc_DX6;
TD3DDeviceDesc_DX6 = record
dwSize: DWORD; // Size of D3DDEVICEDESC structure
dwFlags: DWORD; // Indicates which fields have valid data
dcmColorModel: TD3DColorModel; // Color model of device
dwDevCaps: DWORD; // Capabilities of device
dtcTransformCaps: TD3DTransformCaps; // Capabilities of transform
bClipping: BOOL; // Device can do 3D clipping
dlcLightingCaps: TD3DLightingCaps; // Capabilities of lighting
dpcLineCaps: TD3DPrimCaps;
dpcTriCaps: TD3DPrimCaps;
dwDeviceRenderBitDepth: DWORD; // One of DDBB_8, 16, etc..
dwDeviceZBufferBitDepth: DWORD; // One of DDBD_16, 32, etc..
dwMaxBufferSize: DWORD; // Maximum execute buffer size
dwMaxVertexCount: DWORD; // Maximum vertex count
 
// New fields for DX5
// Width and height caps are 0 for legacy HALs.
dwMinTextureWidth, dwMinTextureHeight : DWORD;
dwMaxTextureWidth, dwMaxTextureHeight : DWORD;
dwMinStippleWidth, dwMaxStippleWidth : DWORD;
dwMinStippleHeight, dwMaxStippleHeight : DWORD;
 
// New fields for DX6
dwMaxTextureRepeat: DWORD;
dwMaxTextureAspectRatio: DWORD;
4812,43 → 7708,26
dvGuardBandTop: TD3DValue;
dvGuardBandRight: TD3DValue;
dvGuardBandBottom: TD3DValue;
 
dvExtentsAdjust: TD3DValue;
dwStencilCaps: DWORD;
dwFVFCaps: DWORD; // low 4 bits: 0 implies TLVERTEX only, 1..8 imply FVF aware
 
dwFVFCaps : DWORD; (* low 4 bits: 0 implies TLVERTEX only, 1..8 imply FVF aware *)
dwTextureOpCaps: DWORD;
wMaxTextureBlendStages: Word;
wMaxSimultaneousTextures: Word;
wMaxTextureBlendStages : WORD;
wMaxSimultaneousTextures : WORD;
end;
 
{$IFDEF DirectX3}
TD3DDeviceDesc = TD3DDeviceDesc_DX3;
PD3DDeviceDesc = PD3DDeviceDesc_DX3;
{$ENDIF}{$IFDEF DirectX5}
TD3DDeviceDesc = TD3DDeviceDesc_DX5;
PD3DDeviceDesc = PD3DDeviceDesc_DX5;
{$ENDIF}{$IFDEF DirectX6}
TD3DDeviceDesc = TD3DDeviceDesc_DX6;
PD3DDeviceDesc = PD3DDeviceDesc_DX6;
{$ENDIF}{$IFDEF DirectX7}
TD3DDeviceDesc = TD3DDeviceDesc_DX6;
PD3DDeviceDesc = PD3DDeviceDesc_DX6;
{$ENDIF}
 
D3DDEVICEDESC = TD3DDeviceDesc;
LPD3DDEVICEDESC = PD3DDeviceDesc;
 
PD3DDeviceDesc7 = ^TD3DDeviceDesc7;
TD3DDeviceDesc7 = record
dwDevCaps: DWORD;
TD3DDeviceDesc7 = packed record
dwDevCaps: DWORD; (* Capabilities of device *)
dpcLineCaps: TD3DPrimCaps;
dpcTriCaps: TD3DPrimCaps;
dwDeviceRenderBitDepth: DWORD;
dwDeviceZBufferBitDepth: DWORD;
dwDeviceRenderBitDepth: DWORD; (* One of DDBB_8, 16, etc.. *)
dwDeviceZBufferBitDepth: DWORD; (* One of DDBD_16, 32, etc.. *)
 
dwMinTextureWidth: DWORD;
dwMinTextureHeight: DWORD;
dwMaxTextureWidth: DWORD;
dwMaxTextureHeight: DWORD;
dwMinTextureWidth, dwMinTextureHeight: DWORD;
dwMaxTextureWidth, dwMaxTextureHeight: DWORD;
 
dwMaxTextureRepeat: DWORD;
dwMaxTextureAspectRatio: DWORD;
4864,15 → 7743,15
 
dwFVFCaps: DWORD;
dwTextureOpCaps: DWORD;
wMaxTextureBlendStages: Word;
wMaxSimultaneousTextures: Word;
wMaxTextureBlendStages: WORD;
wMaxSimultaneousTextures: WORD;
 
dwMaxActiveLights: DWORD;
dvMaxVertexW: TD3DValue;
deviceGUID: TGUID;
 
wMaxUserClipPlanes: Word;
wMaxVertexBlendMatrices: Word;
wMaxUserClipPlanes: WORD;
wMaxVertexBlendMatrices: WORD;
 
dwVertexProcessingCaps: DWORD;
 
4882,91 → 7761,102
dwReserved4: DWORD;
end;
 
const
D3DDEVICEDESCSIZE = sizeof(TD3DDeviceDesc);
D3DDEVICEDESC7SIZE = sizeof(TD3DDeviceDesc7);
 
type
TD3DEnumDevicesCallback = function(const lpGuid: TGUID;
lpDeviceDescription: LPSTR; lpDeviceName: LPSTR;
const lpD3DHWDeviceDesc: TD3DDeviceDesc;
const lpD3DHELDeviceDesc: TD3DDeviceDesc;
lpUserArg: Pointer): HResult; stdcall;
TD3DEnumDevicesCallbackA = function (lpGuid: PGUID; // nil for the default device
lpDeviceDescription: PAnsiChar; lpDeviceName: PAnsiChar;
var lpD3DHWDeviceDesc: TD3DDeviceDesc;
var lpD3DHELDeviceDesc: TD3DDeviceDesc;
lpContext : pointer) : HResult; stdcall;
TD3DEnumDevicesCallback = TD3DEnumDevicesCallbackA;
 
LPD3DENUMDEVICESCALLBACK = TD3DEnumDevicesCallback;
TD3DEnumDevicesCallback7A = function (
lpDeviceDescription: PAnsiChar; lpDeviceName: PAnsiChar;
const lpD3DDeviceDesc: TD3DDeviceDesc7; lpContext: Pointer) : HResult; stdcall;
TD3DEnumDevicesCallback7 = TD3DEnumDevicesCallback7A;
 
TD3DEnumDevicesCallback7 = function(lpDeviceDescription: LPSTR; lpDeviceName: LPSTR;
const lpD3DDeviceDesc: TD3DDeviceDesc7; lpUserArg: Pointer): HResult; stdcall;
(* TD3DDeviceDesc dwFlags indicating valid fields *)
 
LPD3DENUMDEVICESCALLBACK7 = TD3DEnumDevicesCallback7;
 
{ TD3DDeviceDesc dwFlags indicating valid fields }
 
const
D3DDD_COLORMODEL = $00000001; // dcmColorModel is valid
D3DDD_DEVCAPS = $00000002; // dwDevCaps is valid
D3DDD_TRANSFORMCAPS = $00000004; // dtcTransformCaps is valid
D3DDD_LIGHTINGCAPS = $00000008; // dlcLightingCaps is valid
D3DDD_BCLIPPING = $00000010; // bClipping is valid
D3DDD_LINECAPS = $00000020; // dpcLineCaps is valid
D3DDD_TRICAPS = $00000040; // dpcTriCaps is valid
D3DDD_DEVICERENDERBITDEPTH = $00000080; // dwDeviceRenderBitDepth is valid
D3DDD_DEVICEZBUFFERBITDEPTH = $00000100; // dwDeviceZBufferBitDepth is valid
D3DDD_MAXBUFFERSIZE = $00000200; // dwMaxBufferSize is valid
D3DDD_MAXVERTEXCOUNT = $00000400; // dwMaxVertexCount is valid
D3DDD_COLORMODEL = $00000001; (* dcmColorModel is valid *)
D3DDD_DEVCAPS = $00000002; (* dwDevCaps is valid *)
D3DDD_TRANSFORMCAPS = $00000004; (* dtcTransformCaps is valid *)
D3DDD_LIGHTINGCAPS = $00000008; (* dlcLightingCaps is valid *)
D3DDD_BCLIPPING = $00000010; (* bClipping is valid *)
D3DDD_LINECAPS = $00000020; (* dpcLineCaps is valid *)
D3DDD_TRICAPS = $00000040; (* dpcTriCaps is valid *)
D3DDD_DEVICERENDERBITDEPTH = $00000080; (* dwDeviceRenderBitDepth is valid *)
D3DDD_DEVICEZBUFFERBITDEPTH = $00000100; (* dwDeviceZBufferBitDepth is valid *)
D3DDD_MAXBUFFERSIZE = $00000200; (* dwMaxBufferSize is valid *)
D3DDD_MAXVERTEXCOUNT = $00000400; (* dwMaxVertexCount is valid *)
 
{ TD3DDeviceDesc dwDevCaps flags }
(* TD3DDeviceDesc dwDevCaps flags *)
 
D3DDEVCAPS_FLOATTLVERTEX = $00000001; // Device accepts floating point
// for post-transform vertex data
D3DDEVCAPS_SORTINCREASINGZ = $00000002; // Device needs data sorted for increasing Z
D3DDEVCAPS_SORTDECREASINGZ = $00000004; // Device needs data sorted for decreasing Z
D3DDEVCAPS_SORTEXACT = $00000008; // Device needs data sorted exactly
D3DDEVCAPS_FLOATTLVERTEX = $00000001; (* Device accepts floating point *)
(* for post-transform vertex data *)
D3DDEVCAPS_SORTINCREASINGZ = $00000002; (* Device needs data sorted for increasing Z*)
D3DDEVCAPS_SORTDECREASINGZ = $00000004; (* Device needs data sorted for decreasing Z*)
D3DDEVCAPS_SORTEXACT = $00000008; (* Device needs data sorted exactly *)
 
D3DDEVCAPS_EXECUTESYSTEMMEMORY = $00000010; // Device can use execute buffers from system memory
D3DDEVCAPS_EXECUTEVIDEOMEMORY = $00000020; // Device can use execute buffers from video memory
D3DDEVCAPS_TLVERTEXSYSTEMMEMORY = $00000040; // Device can use TL buffers from system memory
D3DDEVCAPS_TLVERTEXVIDEOMEMORY = $00000080; // Device can use TL buffers from video memory
D3DDEVCAPS_TEXTURESYSTEMMEMORY = $00000100; // Device can texture from system memory
D3DDEVCAPS_TEXTUREVIDEOMEMORY = $00000200; // Device can texture from device memory
D3DDEVCAPS_DRAWPRIMTLVERTEX = $00000400; // Device can draw TLVERTEX primitives
D3DDEVCAPS_CANRENDERAFTERFLIP = $00000800; // Device can render without waiting for flip to complete
D3DDEVCAPS_TEXTURENONLOCALVIDMEM = $00001000; // Device can texture from nonlocal video memory
D3DDEVCAPS_DRAWPRIMITIVES2 = $00002000; // Device can support DrawPrimitives2
D3DDEVCAPS_SEPARATETEXTUREMEMORIES = $00004000; // Device is texturing from separate memory pools
D3DDEVCAPS_DRAWPRIMITIVES2EX = $00008000; // Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver
D3DDEVCAPS_HWTRANSFORMANDLIGHT = $00010000; // Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also
D3DDEVCAPS_CANBLTSYSTONONLOCAL = $00020000; // Device supports a Tex Blt from system memory to non-local vidmem
D3DDEVCAPS_HWRASTERIZATION = $00080000; // Device has HW acceleration for rasterization
D3DDEVCAPS_EXECUTESYSTEMMEMORY = $00000010; (* Device can use execute buffers from system memory *)
D3DDEVCAPS_EXECUTEVIDEOMEMORY = $00000020; (* Device can use execute buffers from video memory *)
D3DDEVCAPS_TLVERTEXSYSTEMMEMORY = $00000040; (* Device can use TL buffers from system memory *)
D3DDEVCAPS_TLVERTEXVIDEOMEMORY = $00000080; (* Device can use TL buffers from video memory *)
D3DDEVCAPS_TEXTURESYSTEMMEMORY = $00000100; (* Device can texture from system memory *)
D3DDEVCAPS_TEXTUREVIDEOMEMORY = $00000200; (* Device can texture from device memory *)
D3DDEVCAPS_DRAWPRIMTLVERTEX = $00000400; (* Device can draw TLVERTEX primitives *)
D3DDEVCAPS_CANRENDERAFTERFLIP = $00000800; (* Device can render without waiting for flip to complete *)
D3DDEVCAPS_TEXTURENONLOCALVIDMEM = $00001000; (* Device can texture from nonlocal video memory *)
D3DDEVCAPS_DRAWPRIMITIVES2 = $00002000; (* Device can support DrawPrimitives2 *)
D3DDEVCAPS_SEPARATETEXTUREMEMORIES = $00004000; (* Device is texturing from separate memory pools *)
D3DDEVCAPS_DRAWPRIMITIVES2EX = $00008000; (* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*)
D3DDEVCAPS_HWTRANSFORMANDLIGHT = $00010000; (* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also *)
D3DDEVCAPS_CANBLTSYSTONONLOCAL = $00020000; (* Device supports a Tex Blt from system memory to non-local vidmem *)
D3DDEVCAPS_HWRASTERIZATION = $00080000; (* Device has HW acceleration for rasterization *)
 
{ TD3DDeviceDesc7.dwVertexProcessingCaps field }
(*
* These are the flags in the D3DDEVICEDESC7.dwVertexProcessingCaps field
*)
 
(* device can do texgen *)
D3DVTXPCAPS_TEXGEN = $00000001;
(* device can do IDirect3DDevice7 colormaterialsource ops *)
D3DVTXPCAPS_MATERIALSOURCE7 = $00000002;
(* device can do vertex fog *)
D3DVTXPCAPS_VERTEXFOG = $00000004;
(* device can do directional lights *)
D3DVTXPCAPS_DIRECTIONALLIGHTS = $00000008;
(* device can do positional lights (includes point and spot) *)
D3DVTXPCAPS_POSITIONALLIGHTS = $00000010;
(* device can do local viewer *)
D3DVTXPCAPS_LOCALVIEWER = $00000020;
 
D3DFDS_COLORMODEL = $00000001; // Match color model
D3DFDS_GUID = $00000002; // Match guid
D3DFDS_HARDWARE = $00000004; // Match hardware/software
D3DFDS_TRIANGLES = $00000008; // Match in triCaps
D3DFDS_LINES = $00000010; // Match in lineCaps
D3DFDS_MISCCAPS = $00000020; // Match primCaps.dwMiscCaps
D3DFDS_RASTERCAPS = $00000040; // Match primCaps.dwRasterCaps
D3DFDS_ZCMPCAPS = $00000080; // Match primCaps.dwZCmpCaps
D3DFDS_ALPHACMPCAPS = $00000100; // Match primCaps.dwAlphaCmpCaps
D3DFDS_SRCBLENDCAPS = $00000200; // Match primCaps.dwSourceBlendCaps
D3DFDS_DSTBLENDCAPS = $00000400; // Match primCaps.dwDestBlendCaps
D3DFDS_SHADECAPS = $00000800; // Match primCaps.dwShadeCaps
D3DFDS_TEXTURECAPS = $00001000; // Match primCaps.dwTextureCaps
D3DFDS_TEXTUREFILTERCAPS = $00002000; // Match primCaps.dwTextureFilterCaps
D3DFDS_TEXTUREBLENDCAPS = $00004000; // Match primCaps.dwTextureBlendCaps
D3DFDS_TEXTUREADDRESSCAPS = $00008000; // Match primCaps.dwTextureBlendCaps
D3DFDS_COLORMODEL = $00000001; (* Match color model *)
D3DFDS_GUID = $00000002; (* Match guid *)
D3DFDS_HARDWARE = $00000004; (* Match hardware/software *)
D3DFDS_TRIANGLES = $00000008; (* Match in triCaps *)
D3DFDS_LINES = $00000010; (* Match in lineCaps *)
D3DFDS_MISCCAPS = $00000020; (* Match primCaps.dwMiscCaps *)
D3DFDS_RASTERCAPS = $00000040; (* Match primCaps.dwRasterCaps *)
D3DFDS_ZCMPCAPS = $00000080; (* Match primCaps.dwZCmpCaps *)
D3DFDS_ALPHACMPCAPS = $00000100; (* Match primCaps.dwAlphaCmpCaps *)
D3DFDS_SRCBLENDCAPS = $00000200; (* Match primCaps.dwSourceBlendCaps *)
D3DFDS_DSTBLENDCAPS = $00000400; (* Match primCaps.dwDestBlendCaps *)
D3DFDS_SHADECAPS = $00000800; (* Match primCaps.dwShadeCaps *)
D3DFDS_TEXTURECAPS = $00001000; (* Match primCaps.dwTextureCaps *)
D3DFDS_TEXTUREFILTERCAPS = $00002000; (* Match primCaps.dwTextureFilterCaps *)
D3DFDS_TEXTUREBLENDCAPS = $00004000; (* Match primCaps.dwTextureBlendCaps *)
D3DFDS_TEXTUREADDRESSCAPS = $00008000; (* Match primCaps.dwTextureBlendCaps *)
 
{ FindDevice arguments }
 
(*
* FindDevice arguments
*)
type
PD3DFindDeviceSearch = ^TD3DFindDeviceSearch;
TD3DFindDeviceSearch = record
TD3DFindDeviceSearch = packed record
dwSize: DWORD;
dwFlags: DWORD;
bHardware: BOOL;
4976,133 → 7866,103
dpcPrimCaps: TD3DPrimCaps;
end;
 
D3DFINDDEVICESEARCH = TD3DFindDeviceSearch;
LPD3DFINDDEVICESEARCH = PD3DFindDeviceSearch;
 
PD3DFindDeviceResult = ^TD3DFindDeviceResult;
TD3DFindDeviceResult = record
TD3DFindDeviceResult = packed record
dwSize: DWORD;
guid: TGUID; // guid which matched
ddHwDesc: TD3DDeviceDesc; // hardware TD3DDeviceDesc
ddSwDesc: TD3DDeviceDesc; // software TD3DDeviceDesc
guid: TGUID; (* guid which matched *)
ddHwDesc: TD3DDeviceDesc; (* hardware TD3DDeviceDesc *)
ddSwDesc: TD3DDeviceDesc; (* software TD3DDeviceDesc *)
end;
 
D3DFINDDEVICERESULT = TD3DFindDeviceResult;
LPD3DFINDDEVICERESULT = PD3DFindDeviceResult;
 
{ Description of execute buffer. }
 
(*
* Description of execute buffer.
*)
PD3DExecuteBufferDesc = ^TD3DExecuteBufferDesc;
TD3DExecuteBufferDesc = record
dwSize: DWORD; // size of this structure
dwFlags: DWORD; // flags indicating which fields are valid
dwCaps: DWORD; // capabilities of execute buffer
dwBufferSize: DWORD; // size of execute buffer data
lpData: Pointer; // pointer to actual data
TD3DExecuteBufferDesc = packed record
dwSize: DWORD; (* size of this structure *)
dwFlags: DWORD; (* flags indicating which fields are valid *)
dwCaps: DWORD; (* capabilities of execute buffer *)
dwBufferSize: DWORD; (* size of execute buffer data *)
lpData: Pointer; (* pointer to actual data *)
end;
 
D3DEXECUTEBUFFERDESC = TD3DExecuteBufferDesc;
LPD3DEXECUTEBUFFERDESC = PD3DExecuteBufferDesc;
(* D3DEXECUTEBUFFER dwFlags indicating valid fields *)
 
{ D3DEXECUTEBUFFER dwFlags indicating valid fields }
 
const
D3DDEB_BUFSIZE = $00000001; // buffer size valid
D3DDEB_CAPS = $00000002; // caps valid
D3DDEB_LPDATA = $00000004; // lpData valid
D3DDEB_BUFSIZE = $00000001; (* buffer size valid *)
D3DDEB_CAPS = $00000002; (* caps valid *)
D3DDEB_LPDATA = $00000004; (* lpData valid *)
 
{ D3DEXECUTEBUFFER dwCaps }
(* D3DEXECUTEBUFFER dwCaps *)
 
D3DDEBCAPS_SYSTEMMEMORY = $00000001; // buffer in system memory
D3DDEBCAPS_VIDEOMEMORY = $00000002; // buffer in device memory
D3DDEBCAPS_MEM = D3DDEBCAPS_SYSTEMMEMORY or D3DDEBCAPS_VIDEOMEMORY;
D3DDEBCAPS_SYSTEMMEMORY = $00000001; (* buffer in system memory *)
D3DDEBCAPS_VIDEOMEMORY = $00000002; (* buffer in device memory *)
D3DDEBCAPS_MEM = (D3DDEBCAPS_SYSTEMMEMORY or D3DDEBCAPS_VIDEOMEMORY);
 
type
 
{ TD3DDevInfo_TextureManager }
 
PD3DDevInfo_TextureManager = ^TD3DDevInfo_TextureManager;
TD3DDevInfo_TextureManager = record
bThrashing: BOOL; // indicates if thrashing
dwApproxBytesDownloaded: DWORD; // Approximate number of bytes downloaded by texture manager
dwNumEvicts: DWORD; // number of textures evicted
dwNumVidCreates: DWORD; // number of textures created in video memory
dwNumTexturesUsed: DWORD; // number of textures used
dwNumUsedTexInVid: DWORD; // number of used textures present in video memory
dwWorkingSet: DWORD; // number of textures in video memory
dwWorkingSetBytes: DWORD; // number of bytes in video memory
dwTotalManaged: DWORD; // total number of managed textures
dwTotalBytes: DWORD; // total number of bytes of managed textures
dwLastPri: DWORD; // priority of last texture evicted
TD3DDevInfo_TextureManager = packed record
bThrashing: BOOL; (* indicates if thrashing *)
dwApproxBytesDownloaded: DWORD; (* Approximate number of bytes downloaded by texture manager *)
dwNumEvicts: DWORD; (* number of textures evicted *)
dwNumVidCreates: DWORD; (* number of textures created in video memory *)
dwNumTexturesUsed: DWORD; (* number of textures used *)
dwNumUsedTexInVid: DWORD; (* number of used textures present in video memory *)
dwWorkingSet: DWORD; (* number of textures in video memory *)
dwWorkingSetBytes: DWORD; (* number of bytes in video memory *)
dwTotalManaged: DWORD; (* total number of managed textures *)
dwTotalBytes: DWORD; (* total number of bytes of managed textures *)
dwLastPri: DWORD; (* priority of last texture evicted *)
end;
 
D3DDEVINFO_TEXTUREMANAGER = TD3DDevInfo_TextureManager;
LPD3DDEVINFO_TEXTUREMANAGER = PD3DDevInfo_TextureManager;
 
{ TD3DDevInfo_Texturing }
 
PD3DDevInfo_Texturing = ^TD3DDevInfo_Texturing;
TD3DDevInfo_Texturing = record
dwNumLoads: DWORD; // counts Load() API calls
dwApproxBytesLoaded: DWORD; // Approximate number bytes loaded via Load()
dwNumPreLoads: DWORD; // counts PreLoad() API calls
dwNumSet: DWORD; // counts SetTexture() API calls
dwNumCreates: DWORD; // counts texture creates
dwNumDestroys: DWORD; // counts texture destroys
dwNumSetPriorities: DWORD; // counts SetPriority() API calls
dwNumSetLODs: DWORD; // counts SetLOD() API calls
dwNumLocks: DWORD; // counts number of texture locks
dwNumGetDCs: DWORD; // counts number of GetDCs to textures
TD3DDevInfo_Texturing = packed record
dwNumLoads: DWORD; (* counts Load() API calls *)
dwApproxBytesLoaded: DWORD; (* Approximate number bytes loaded via Load() *)
dwNumPreLoads: DWORD; (* counts PreLoad() API calls *)
dwNumSet: DWORD; (* counts SetTexture() API calls *)
dwNumCreates: DWORD; (* counts texture creates *)
dwNumDestroys: DWORD; (* counts texture destroys *)
dwNumSetPriorities: DWORD; (* counts SetPriority() API calls *)
dwNumSetLODs: DWORD; (* counts SetLOD() API calls *)
dwNumLocks: DWORD; (* counts number of texture locks *)
dwNumGetDCs: DWORD; (* counts number of GetDCs to textures *)
end;
 
D3DDEVINFO_TEXTURING = TD3DDevInfo_Texturing;
LPD3DDEVINFO_TEXTURING = PD3DDevInfo_Texturing;
 
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: d3d.h
* Content: Direct3D include file
*
***************************************************************************)
****************************************************************************)
 
{ Interface IID's }
function D3DErrorString(Value: HResult) : string;
 
(*
* Interface IID's
*)
 
const
IID_IDirect3D: TGUID = '{3BBA0080-2421-11CF-A31A-00AA00B93356}';
IID_IDirect3D2: TGUID = '{6AAE1EC1-662A-11D0-889D-00AA00BBB76A}';
IID_IDirect3D3: TGUID = '{BB223240-E72B-11D0-A9B4-00AA00C0993E}';
IID_IDirect3D7: TGUID = '{F5049E77-4861-11D2-A407-00A0C90629A8}';
(*
* Internal Guid to distinguish requested MMX from MMX being used as an RGB rasterizer
*)
IID_IDirect3DRampDevice: TGUID =
(D1:$F2086B20;D2:$259F;D3:$11CF;D4:($A3,$1A,$00,$AA,$00,$B9,$33,$56));
IID_IDirect3DRGBDevice: TGUID =
(D1:$A4665C60;D2:$2673;D3:$11CF;D4:($A3,$1A,$00,$AA,$00,$B9,$33,$56));
IID_IDirect3DHALDevice: TGUID =
(D1:$84E63dE0;D2:$46AA;D3:$11CF;D4:($81,$6F,$00,$00,$C0,$20,$15,$6E));
IID_IDirect3DMMXDevice: TGUID =
(D1:$881949a1;D2:$d6f3;D3:$11d0;D4:($89,$ab,$00,$a0,$c9,$05,$41,$29));
 
IID_IDirect3DRampDevice: TGUID = '{F2086B20-259F-11CF-A31A-00AA00B93356}';
IID_IDirect3DRGBDevice: TGUID = '{A4665C60-2673-11CF-A31A-00AA00B93356}';
IID_IDirect3DHALDevice: TGUID = '{84E63DE0-46AA-11CF-816F-0000C020156E}';
IID_IDirect3DMMXDevice: TGUID = '{881949A1-D6F3-11D0-89AB-00A0C9054129}';
IID_IDirect3DRefDevice: TGUID = '{50936643-13E9-11D1-89AA-00A0C9054129}';
IID_IDirect3DNullDevice: TGUID = '{8767DF22-BACC-11D1-8969-00A0C90629A8}';
IID_IDirect3DTnLHalDevice: TGUID = '{F5049E78-4861-11D2-A407-00A0C90629A8}';
IID_IDirect3DRefDevice: TGUID =
(D1:$50936643;D2:$13e9;D3:$11d1;D4:($89,$aa,$00,$a0,$c9,$05,$41,$29));
IID_IDirect3DNullDevice: TGUID =
(D1:$8767df22;D2:$bacc;D3:$11d1;D4:($89,$69,$00,$a0,$c9,$06,$29,$a8));
 
IID_IDirect3DDevice: TGUID = '{64108800-957D-11D0-89AB-00A0C9054129}';
IID_IDirect3DDevice2: TGUID = '{93281501-8CF8-11D0-89AB-00A0C9054129}';
IID_IDirect3DDevice3: TGUID = '{B0AB3B60-33D7-11D1-A981-00C04FD7B174}';
IID_IDirect3DDevice7: TGUID = '{F5049E79-4861-11D2-A407-00A0C90629A8}';
IID_IDirect3DTnLHalDevice: TGUID = '{f5049e78-4861-11d2-a407-00a0c90629a8}';
IID_IDirect3DTexture: TGUID ='{2CDCD9E0-25A0-11CF-A31A-00AA00B93356}';
IID_IDirect3DTexture2: TGUID = '{93281502-8CF8-11D0-89AB-00A0C9054129}';
IID_IDirect3DLight: TGUID = '{4417C142-33AD-11CF-816F-0000C020156E}';
IID_IDirect3DMaterial: TGUID = '{4417C144-33AD-11CF-816F-0000C020156E}';
IID_IDirect3DMaterial2: TGUID = '{93281503-8CF8-11D0-89AB-00A0C9054129}';
IID_IDirect3DMaterial3: TGUID = '{CA9C46F4-D3C5-11D1-B75A-00600852B312}';
IID_IDirect3DExecuteBuffer: TGUID = '{4417C145-33AD-11CF-816F-0000C020156E}';
IID_IDirect3DViewport: TGUID = '{4417C146-33AD-11CF-816F-0000C020156E}';
IID_IDirect3DViewport2: TGUID = '{93281500-8CF8-11D0-89AB-00A0C9054129}';
IID_IDirect3DViewport3: TGUID = '{B0AB3B61-33D7-11D1-A981-00C04FD7B174}';
IID_IDirect3DVertexBuffer: TGUID = '{7A503555-4A83-11D1-A5DB-00A0C90367F8}';
IID_IDirect3DVertexBuffer7: TGUID = '{F5049E7D-4861-11D2-A407-00A0C90629A8}';
 
{ Data structures }
 
type
IDirect3D = interface;
IDirect3D2 = interface;
5125,89 → 7985,96
IDirect3DVertexBuffer = interface;
IDirect3DVertexBuffer7 = interface;
 
(*
* Direct3D interfaces
*)
 
IDirect3D = interface(IUnknown)
['{3BBA0080-2421-11CF-A31A-00AA00B93356}']
// IDirect3D methods
function Initialize(const lpREFIID: TGUID): HResult; stdcall;
(*** IDirect3D methods ***)
function Initialize (lpREFIID: {REFIID} PGUID) : HResult; stdcall;
function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback;
lpUserArg: Pointer): HResult; stdcall;
function CreateLight(out lplpDirect3Dlight: IDirect3DLight;
function CreateLight (var lplpDirect3Dlight: IDirect3DLight;
pUnkOuter: IUnknown): HResult; stdcall;
function CreateMaterial(out lplpDirect3DMaterial: IDirect3DMaterial;
function CreateMaterial (var lplpDirect3DMaterial: IDirect3DMaterial;
pUnkOuter: IUnknown): HResult; stdcall;
function CreateViewport(out lplpD3DViewport: IDirect3DViewport;
function CreateViewport (var lplpD3DViewport: IDirect3DViewport;
pUnkOuter: IUnknown): HResult; stdcall;
function FindDevice(const lpD3DFDS: TD3DFindDeviceSearch;
function FindDevice (var lpD3DFDS: TD3DFindDeviceSearch;
var lpD3DFDR: TD3DFindDeviceResult): HResult; stdcall;
end;
 
IDirect3D2 = interface(IUnknown)
['{6AAE1EC1-662A-11D0-889D-00AA00BBB76A}']
// IDirect3D methods
['{6aae1ec1-662a-11d0-889d-00aa00bbb76a}']
(*** IDirect3D2 methods ***)
function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback;
lpUserArg: Pointer): HResult; stdcall;
function CreateLight(out lplpDirect3Dlight: IDirect3DLight;
lpUserArg: pointer) : HResult; stdcall;
function CreateLight (var lplpDirect3Dlight: IDirect3DLight;
pUnkOuter: IUnknown): HResult; stdcall;
function CreateMaterial(out lplpDirect3DMaterial: IDirect3DMaterial2;
function CreateMaterial (var lplpDirect3DMaterial2: IDirect3DMaterial2;
pUnkOuter: IUnknown): HResult; stdcall;
function CreateViewport(out lplpD3DViewport: IDirect3DViewport2;
function CreateViewport (var lplpD3DViewport2: IDirect3DViewport2;
pUnkOuter: IUnknown ): HResult; stdcall;
function FindDevice(const lpD3DFDS: TD3DFindDeviceSearch;
function FindDevice (var lpD3DFDS: TD3DFindDeviceSearch;
var lpD3DFDR: TD3DFindDeviceResult): HResult; stdcall;
// IDirect3D2 methods
function CreateDevice(const rclsid: TGUID; lpDDS: IDirectDrawSurface;
function CreateDevice (const rclsid: TRefClsID; lpDDS: IDirectDrawSurface;
out lplpD3DDevice2: IDirect3DDevice2): HResult; stdcall;
end;
 
IDirect3D3 = interface(IUnknown)
['{BB223240-E72B-11D0-A9B4-00AA00C0993E}']
// IDirect3D methods
['{bb223240-e72b-11d0-a9b4-00aa00c0993e}']
(*** IDirect3D3 methods ***)
function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback;
lpUserArg: Pointer): HResult; stdcall;
function CreateLight(out lplpDirect3Dlight: IDirect3DLight;
lpUserArg: pointer) : HResult; stdcall;
function CreateLight (var lplpDirect3Dlight: IDirect3DLight;
pUnkOuter: IUnknown): HResult; stdcall;
function CreateMaterial(out lplpDirect3DMaterial: IDirect3DMaterial3;
function CreateMaterial (var lplpDirect3DMaterial3: IDirect3DMaterial3;
pUnkOuter: IUnknown): HResult; stdcall;
function CreateViewport(out lplpD3DViewport: IDirect3DViewport3;
function CreateViewport (var lplpD3DViewport3: IDirect3DViewport3;
pUnkOuter: IUnknown ): HResult; stdcall;
function FindDevice(const lpD3DFDS: TD3DFindDeviceSearch;
function FindDevice (var lpD3DFDS: TD3DFindDeviceSearch;
var lpD3DFDR: TD3DFindDeviceResult): HResult; stdcall;
// IDirect3D2 methods
function CreateDevice(const rclsid: TGUID; lpDDS: IDirectDrawSurface4;
out lplpD3DDevice2: IDirect3DDevice3; pUnkOuter: IUnknown): HResult; stdcall;
// IDirect3D3 methods
function CreateVertexBuffer(const lpVBDesc: TD3DVertexBufferDesc;
out lpD3DVertexBuffer: IDirect3DVertexBuffer; dwFlags: DWORD; pUnkOuter: IUnknown): HResult; stdcall;
function EnumZBufferFormats(const riidDevice: TGUID; lpEnumCallback: TD3DEnumPixelFormatsCallback;
lpContext: Pointer): HResult; stdcall;
function CreateDevice (const rclsid: TRefClsID; lpDDS: IDirectDrawSurface4;
out lplpD3DDevice: IDirect3DDevice3; pUnkOuter: IUnknown) : HResult; stdcall;
function CreateVertexBuffer (var lpVBDesc: TD3DVertexBufferDesc;
var lpD3DVertexBuffer: IDirect3DVertexBuffer;
dwFlags: DWORD; pUnkOuter: IUnknown) : HResult; stdcall;
function EnumZBufferFormats (const riidDevice: TRefClsID; lpEnumCallback:
TD3DEnumPixelFormatsCallback; lpContext: pointer) : HResult; stdcall;
function EvictManagedTextures: HResult; stdcall;
end;
 
IDirect3D7 = interface(IUnknown)
['{F5049E77-4861-11D2-A407-00A0C90629A8}']
// IDirect3D7 methods
['{f5049e77-4861-11d2-a407-00a0c90629a8}']
(*** IDirect3D7 methods ***)
function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback7;
lpUserArg: Pointer): HResult; stdcall;
lpUserArg: pointer) : HResult; stdcall;
function CreateDevice(const rclsid: TGUID; lpDDS: IDirectDrawSurface7;
out lplpD3DDevice7: IDirect3DDevice7): HResult; stdcall;
out lplpD3DDevice: IDirect3DDevice7) : HResult; stdcall;
function CreateVertexBuffer(const lpVBDesc: TD3DVertexBufferDesc;
out lpD3DVertexBuffer: IDirect3DVertexBuffer7; dwFlags: DWORD): HResult; stdcall;
function EnumZBufferFormats(const riidDevice: TGUID; lpEnumCallback: TD3DEnumPixelFormatsCallback;
lpContext: Pointer): HResult; stdcall;
out lplpD3DVertexBuffer: IDirect3DVertexBuffer7;
dwFlags: DWORD) : HResult; stdcall;
function EnumZBufferFormats (const riidDevice: TGUID; lpEnumCallback:
TD3DEnumPixelFormatsCallback; lpContext: pointer) : HResult; stdcall;
function EvictManagedTextures: HResult; stdcall;
end;
 
(*
* Direct3D Device interfaces
*)
 
IDirect3DDevice = interface(IUnknown)
['{64108800-957D-11D0-89AB-00A0C9054129}']
// IDirect3DDevice methods
function Initialize(lpd3d: IDirect3D; const lpGUID: TGUID;
const lpd3ddvdesc: TD3DDeviceDesc): HResult; stdcall;
['{64108800-957d-11d0-89ab-00a0c9054129}']
(*** IDirect3DDevice methods ***)
function Initialize (lpd3d: IDirect3D; lpGUID: PGUID;
var lpd3ddvdesc: TD3DDeviceDesc) : HResult; stdcall;
function GetCaps(var lpD3DHWDevDesc: TD3DDeviceDesc;
var lpD3DHELDevDesc: TD3DDeviceDesc): HResult; stdcall;
function SwapTextureHandles(lpD3DTex1: IDirect3DTexture;
lpD3DTex2: IDirect3DTexture): HResult; stdcall;
function CreateExecuteBuffer(const lpDesc: TD3DExecuteBufferDesc;
out lplpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
function CreateExecuteBuffer (var lpDesc: TD3DExecuteBufferDesc ;
var lplpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
pUnkOuter: IUnknown): HResult; stdcall;
function GetStats(var lpD3DStats: TD3DStats): HResult; stdcall;
function Execute(lpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
5215,82 → 8082,94
function AddViewport(lpDirect3DViewport: IDirect3DViewport): HResult; stdcall;
function DeleteViewport(lpDirect3DViewport: IDirect3DViewport): HResult; stdcall;
function NextViewport(lpDirect3DViewport: IDirect3DViewport;
out lplpDirect3DViewport: IDirect3DViewport; dwFlags: DWORD): HResult; stdcall;
var lplpDirect3DViewport: IDirect3DViewport; dwFlags: DWORD) : HResult; stdcall;
function Pick(lpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
lpDirect3DViewport: IDirect3DViewport; dwFlags: DWORD;
const lpRect: TD3DRect): HResult; stdcall;
var lpRect: TD3DRect) : HResult; stdcall;
function GetPickRecords(var lpCount: DWORD;
var lpD3DPickRec: TD3DPickRecord): HResult; stdcall;
function EnumTextureFormats(lpd3dEnumTextureProc: TD3DEnumTextureFormatsCalback;
lpArg: Pointer): HResult; stdcall;
function EnumTextureFormats (lpd3dEnumTextureProc:
TD3DEnumTextureFormatsCallback; lpArg: Pointer) :
HResult; stdcall;
function CreateMatrix(var lpD3DMatHandle: TD3DMatrixHandle): HResult; stdcall;
function SetMatrix(d3dMatHandle: TD3DMatrixHandle;
const lpD3DMatrix: TD3DMatrix): HResult; stdcall;
function GetMatrix(lpD3DMatHandle: TD3DMatrixHandle;
var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
function GetMatrix (var lpD3DMatHandle: TD3DMatrixHandle;
var lpD3DMatrix: TD3DMatrix) : HResult; stdcall;
function DeleteMatrix(d3dMatHandle: TD3DMatrixHandle): HResult; stdcall;
function BeginScene: HResult; stdcall;
function EndScene: HResult; stdcall;
function GetDirect3D(out lpD3D: IDirect3D): HResult; stdcall;
function GetDirect3D (var lpD3D: IDirect3D) : HResult; stdcall;
end;
 
IDirect3DDevice2 = interface(IUnknown)
['{93281501-8CF8-11D0-89AB-00A0C9054129}']
// IDirect3DDevice2 methods
['{93281501-8cf8-11d0-89ab-00a0c9054129}']
(*** IDirect3DDevice2 methods ***)
function GetCaps(var lpD3DHWDevDesc: TD3DDeviceDesc;
var lpD3DHELDevDesc: TD3DDeviceDesc): HResult; stdcall;
function SwapTextureHandles(lpD3DTex1: IDirect3DTexture2;
lpD3DTex2: IDirect3DTexture2): HResult; stdcall;
function GetStats(var lpD3DStats: TD3DStats): HResult; stdcall;
function AddViewport(lpDirect3DViewport: IDirect3DViewport2): HResult; stdcall;
function AddViewport (lpDirect3DViewport2: IDirect3DViewport2) : HResult; stdcall;
function DeleteViewport(lpDirect3DViewport: IDirect3DViewport2): HResult; stdcall;
function NextViewport(lpDirect3DViewport: IDirect3DViewport2;
out lplpDirect3DViewport: IDirect3DViewport2; dwFlags: DWORD): HResult; stdcall;
function EnumTextureFormats(lpd3dEnumTextureProc: TD3DEnumTextureFormatsCalback;
lpArg: Pointer): HResult; stdcall;
var lplpDirect3DViewport: IDirect3DViewport2; dwFlags: DWORD) :
HResult; stdcall;
function EnumTextureFormats (
lpd3dEnumTextureProc: TD3DEnumTextureFormatsCallback; lpArg: Pointer) :
HResult; stdcall;
function BeginScene: HResult; stdcall;
function EndScene: HResult; stdcall;
function GetDirect3D(out lpD3D: IDirect3D2): HResult; stdcall;
function SetCurrentViewport(lpd3dViewport2: IDirect3DViewport2): HResult; stdcall;
function GetCurrentViewport(out lplpd3dViewport2: IDirect3DViewport2): HResult; stdcall;
function SetRenderTarget(lpNewRenderTarget: IDirectDrawSurface): HResult; stdcall;
function GetRenderTarget(out lplpNewRenderTarget: IDirectDrawSurface): HResult; stdcall;
function GetDirect3D (var lpD3D: IDirect3D2) : HResult; stdcall;
 
(*** DrawPrimitive API ***)
function SetCurrentViewport (lpd3dViewport2: IDirect3DViewport2)
: HResult; stdcall;
function GetCurrentViewport (var lplpd3dViewport2: IDirect3DViewport2)
: HResult; stdcall;
 
function SetRenderTarget (lpNewRenderTarget: IDirectDrawSurface)
: HResult; stdcall;
function GetRenderTarget (var lplpNewRenderTarget: IDirectDrawSurface)
: HResult; stdcall;
 
function Begin_(d3dpt: TD3DPrimitiveType; d3dvt: TD3DVertexType;
dwFlags: DWORD): HResult; stdcall;
function BeginIndexed(dptPrimitiveType: TD3DPrimitiveType; dvtVertexType:
TD3DVertexType; const lpvVertices; dwNumVertices: DWORD;
TD3DVertexType; lpvVertices: pointer; dwNumVertices: DWORD;
dwFlags: DWORD): HResult; stdcall;
function Vertex(const lpVertexType): HResult; stdcall;
function Vertex (lpVertexType: pointer) : HResult; stdcall;
function Index(wVertexIndex: WORD): HResult; stdcall;
function End_(dwFlags: DWORD): HResult; stdcall;
 
function GetRenderState(dwRenderStateType: TD3DRenderStateType;
var lpdwRenderState: DWORD): HResult; stdcall;
var lpdwRenderState) : HResult; stdcall;
function SetRenderState(dwRenderStateType: TD3DRenderStateType;
dwRenderState: DWORD): HResult; stdcall;
function GetLightState(dwLightStateType: TD3DLightStateType;
var lpdwLightState: DWORD): HResult; stdcall;
var lpdwLightState) : HResult; stdcall;
function SetLightState(dwLightStateType: TD3DLightStateType;
dwLightState: DWORD): HResult; stdcall;
function SetTransform(dtstTransformStateType: TD3DTransformStateType;
const lpD3DMatrix: TD3DMatrix): HResult; stdcall;
var lpD3DMatrix: TD3DMatrix) : HResult; stdcall;
function GetTransform(dtstTransformStateType: TD3DTransformStateType;
var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType;
var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
 
function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType;
dvtVertexType: TD3DVertexType; const lpvVertices; dwVertexCount,
dvtVertexType: TD3DVertexType; var lpvVertices; dwVertexCount,
dwFlags: DWORD): HResult; stdcall;
function DrawIndexedPrimitive(dptPrimitiveType: TD3DPrimitiveType;
dvtVertexType: TD3DVertexType; const lpvVertices;
dwVertexCount: DWORD; const dwIndices; dwIndexCount: DWORD;
dwFlags: DWORD): HResult; stdcall;
function SetClipStatus(const lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
dwVertexTypeDesc: DWORD; lpvVertices: pointer; dwVertexCount: DWORD;
var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD) : HResult; stdcall;
function SetClipStatus (var lpD3DClipStatus: TD3DClipStatus) : HResult; stdcall;
function GetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
end;
 
IDirect3DDevice3 = interface(IUnknown)
['{B0AB3B60-33D7-11D1-A981-00C04FD7B174}']
// IDirect3DDevice3 methods
['{b0ab3b60-33d7-11d1-a981-00c04fd7b174}']
(*** IDirect3DDevice2 methods ***)
function GetCaps(var lpD3DHWDevDesc: TD3DDeviceDesc;
var lpD3DHELDevDesc: TD3DDeviceDesc): HResult; stdcall;
function GetStats(var lpD3DStats: TD3DStats): HResult; stdcall;
5297,155 → 8176,193
function AddViewport(lpDirect3DViewport: IDirect3DViewport3): HResult; stdcall;
function DeleteViewport(lpDirect3DViewport: IDirect3DViewport3): HResult; stdcall;
function NextViewport(lpDirect3DViewport: IDirect3DViewport3;
out lplpDirect3DViewport: IDirect3DViewport3; dwFlags: DWORD): HResult; stdcall;
function EnumTextureFormats(lpd3dEnumPixelProc: TD3DEnumPixelFormatsCallback;
lpArg: Pointer): HResult; stdcall;
var lplpAnotherViewport: IDirect3DViewport3; dwFlags: DWORD) : HResult; stdcall;
function EnumTextureFormats (
lpd3dEnumPixelProc: TD3DEnumPixelFormatsCallback; lpArg: Pointer) :
HResult; stdcall;
function BeginScene: HResult; stdcall;
function EndScene: HResult; stdcall;
function GetDirect3D(out lpD3D: IDirect3D3): HResult; stdcall;
function SetCurrentViewport(lpd3dViewport: IDirect3DViewport3): HResult; stdcall;
function GetCurrentViewport(out lplpd3dViewport: IDirect3DViewport3): HResult; stdcall;
function SetRenderTarget(lpNewRenderTarget: IDirectDrawSurface4): HResult; stdcall;
function GetRenderTarget(out lplpNewRenderTarget: IDirectDrawSurface4): HResult; stdcall;
function GetDirect3D (var lpD3D: IDirect3D3) : HResult; stdcall;
function SetCurrentViewport (lpd3dViewport: IDirect3DViewport3)
: HResult; stdcall;
function GetCurrentViewport (var lplpd3dViewport: IDirect3DViewport3)
: HResult; stdcall;
function SetRenderTarget (lpNewRenderTarget: IDirectDrawSurface4)
: HResult; stdcall;
function GetRenderTarget (var lplpNewRenderTarget: IDirectDrawSurface4)
: HResult; stdcall;
function Begin_(d3dpt: TD3DPrimitiveType; dwVertexTypeDesc: DWORD;
dwFlags: DWORD): HResult; stdcall;
function BeginIndexed(dptPrimitiveType: TD3DPrimitiveType; dwVertexTypeDesc: DWORD;
const lpvVertices; dwNumVertices: DWORD; dwFlags: DWORD): HResult; stdcall;
function Vertex(const lpVertexType): HResult; stdcall;
function BeginIndexed (dptPrimitiveType: TD3DPrimitiveType;
dwVertexTypeDesc: DWORD; lpvVertices: pointer; dwNumVertices: DWORD;
dwFlags: DWORD) : HResult; stdcall;
function Vertex (lpVertex: pointer) : HResult; stdcall;
function Index(wVertexIndex: WORD): HResult; stdcall;
function End_(dwFlags: DWORD): HResult; stdcall;
function GetRenderState(dwRenderStateType: TD3DRenderStateType;
var lpdwRenderState: DWORD): HResult; stdcall;
var lpdwRenderState) : HResult; stdcall;
function SetRenderState(dwRenderStateType: TD3DRenderStateType;
dwRenderState: DWORD): HResult; stdcall;
function GetLightState(dwLightStateType: TD3DLightStateType;
var lpdwLightState: DWORD): HResult; stdcall;
var lpdwLightState) : HResult; stdcall;
function SetLightState(dwLightStateType: TD3DLightStateType;
dwLightState: DWORD): HResult; stdcall;
function SetTransform(dtstTransformStateType: TD3DTransformStateType;
const lpD3DMatrix: TD3DMatrix): HResult; stdcall;
var lpD3DMatrix: TD3DMatrix) : HResult; stdcall;
function GetTransform(dtstTransformStateType: TD3DTransformStateType;
var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType;
var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType;
dwVertexTypeDesc: DWORD; const lpvVertices; dwVertexCount,
dwFlags: DWORD): HResult; stdcall;
dwVertexTypeDesc: DWORD; const lpvVertices;
dwVertexCount, dwFlags: DWORD) : HResult; stdcall;
function DrawIndexedPrimitive(dptPrimitiveType: TD3DPrimitiveType;
dwVertexTypeDesc: DWORD; const lpvVertices;
dwVertexCount: DWORD; const dwIndices; dwIndexCount: DWORD;
dwFlags: DWORD): HResult; stdcall;
function SetClipStatus(const lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
dwVertexTypeDesc: DWORD; const lpvVertices; dwVertexCount: DWORD;
var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD) : HResult; stdcall;
function SetClipStatus (var lpD3DClipStatus: TD3DClipStatus) : HResult; stdcall;
function GetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
function DrawPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
dwVertexTypeDesc: DWORD; const lpVertexArray;
dwVertexCount: DWORD; dwFlags: DWORD): HResult; stdcall;
dwVertexTypeDesc : DWORD;
var lpVertexArray: TD3DDrawPrimitiveStridedData;
dwVertexCount, dwFlags: DWORD) : HResult; stdcall;
function DrawIndexedPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
dwVertexTypeDesc: DWORD; const lpVertexArray;
dwVertexCount: DWORD; const lpwIndices; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall;
dwVertexTypeDesc : DWORD;
var lpVertexArray: TD3DDrawPrimitiveStridedData; dwVertexCount: DWORD;
var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD) : HResult; stdcall;
function DrawPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
lpd3dVertexBuffer: IDirect3DVertexBuffer; dwStartVertex, dwNumVertices: DWORD;
dwFlags: DWORD): HResult; stdcall;
lpd3dVertexBuffer: IDirect3DVertexBuffer;
dwStartVertex, dwNumVertices, dwFlags: DWORD) : HResult; stdcall;
function DrawIndexedPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
lpd3dVertexBuffer: IDirect3DVertexBuffer; const lpwIndices; dwIndexCount: DWORD;
dwFlags: DWORD): HResult; stdcall;
function ComputeSphereVisibility(const lpCenters; const lpRadii;
dwNumSpheres: DWORD; dwFlags: DWORD; var lpdwReturnValues): HResult; stdcall;
function GetTexture(dwStage: DWORD; out lplpTexture: IDirect3DTexture2): HResult; stdcall;
function SetTexture(dwStage: DWORD; lpTexture: IDirect3DTexture2): HResult; stdcall;
function GetTextureStageState(dwStage: DWORD; dwState: TD3DTextureStagesStateType;
var lpdwValue: DWORD): HResult; stdcall;
function SetTextureStageState(dwStage: DWORD; dwState: TD3DTextureStagesStateType;
lpdwValue: DWORD): HResult; stdcall;
function ValidateDevice(var lpdwPasses: DWORD): HResult; stdcall;
lpd3dVertexBuffer: IDirect3DVertexBuffer; var lpwIndices: WORD;
dwIndexCount, dwFlags: DWORD) : HResult; stdcall;
function ComputeSphereVisibility (var lpCenters: TD3DVector;
var lpRadii: TD3DValue; dwNumSpheres, dwFlags: DWORD;
var lpdwReturnValues: DWORD) : HResult; stdcall;
function GetTexture (dwStage: DWORD; var lplpTexture: IDirect3DTexture2)
: HResult; stdcall;
function SetTexture (dwStage: DWORD; lplpTexture: IDirect3DTexture2)
: HResult; stdcall;
function GetTextureStageState (dwStage: DWORD;
dwState: TD3DTextureStageStateType; var lpdwValue: DWORD) : HResult; stdcall;
function SetTextureStageState (dwStage: DWORD;
dwState: TD3DTextureStageStateType; lpdwValue: DWORD) : HResult; stdcall;
function ValidateDevice (var lpdwExtraPasses: DWORD) : HResult; stdcall;
end;
 
IDirect3DDevice7 = interface(IUnknown)
['{F5049E79-4861-11D2-A407-00A0C90629A8}']
// IDirect3DDevice7 methods
function GetCaps(var lpD3DDeviceDesc: TD3DDeviceDesc7): HResult; stdcall;
function EnumTextureFormats(lpd3dEnumPixelProc: TD3DEnumPixelFormatsCallback;
lpArg: Pointer): HResult; stdcall;
['{f5049e79-4861-11d2-a407-00a0c90629a8}']
(*** IDirect3DDevice7 methods ***)
function GetCaps(out lpD3DDevDesc: TD3DDeviceDesc7) : HResult; stdcall;
function EnumTextureFormats(lpd3dEnumPixelProc: TD3DEnumPixelFormatsCallback; lpArg: Pointer) : HResult; stdcall;
function BeginScene: HResult; stdcall;
function EndScene: HResult; stdcall;
function GetDirect3D(out lplpD3D: IDirect3D7): HResult; stdcall;
function GetDirect3D(out lpD3D: IDirect3D7) : HResult; stdcall;
function SetRenderTarget(lpNewRenderTarget: IDirectDrawSurface7; dwFlags: DWORD): HResult; stdcall;
function GetRenderTarget(out lplpRenderTarget: IDirectDrawSurface7): HResult; stdcall;
function Clear(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD; dwColor: TD3DColor;
dvZ: TD3DValue; dwStencil: DWORD): HResult; stdcall;
function SetTransform(dtstTransformStateType: TD3DTransformStateType; const lpD3DMatrix: TD3DMatrix): HResult; stdcall;
function GetTransform(dtstTransformStateType: TD3DTransformStateType; var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
function Clear(dwCount: DWORD; lpRects: PD3DRect; dwFlags, dwColor: DWORD; dvZ: TD3DValue; dwStencil: DWORD) : HResult; stdcall;
function SetTransform(dtstTransformStateType: TD3DTransformStateType;
const lpD3DMatrix: TD3DMatrix) : HResult; stdcall;
function GetTransform(dtstTransformStateType: TD3DTransformStateType;
out lpD3DMatrix: TD3DMatrix) : HResult; stdcall;
function SetViewport(const lpViewport: TD3DViewport7): HResult; stdcall;
function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType; const lpD3DMatrix: TD3DMatrix): HResult; stdcall;
function GetViewport(var lpViewport: TD3DViewport7): HResult; stdcall;
function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType;
const lpD3DMatrix: TD3DMatrix) : HResult; stdcall;
function GetViewport(out lpViewport: TD3DViewport7) : HResult; stdcall;
function SetMaterial(const lpMaterial: TD3DMaterial7): HResult; stdcall;
function GetMaterial(var lpMaterial: TD3DMaterial7): HResult; stdcall;
function GetMaterial(out lpMaterial: TD3DMaterial7) : HResult; stdcall;
function SetLight(dwLightIndex: DWORD; const lpLight: TD3DLight7): HResult; stdcall;
function GetLight(dwLightIndex: DWORD; var lpLight: TD3DLight7): HResult; stdcall;
function GetLight(dwLightIndex: DWORD; out lpLight: TD3DLight7) : HResult; stdcall;
function SetRenderState(dwRenderStateType: TD3DRenderStateType; dwRenderState: DWORD): HResult; stdcall;
function GetRenderState(dwRenderStateType: TD3DRenderStateType; var lpdwRenderState: DWORD): HResult; stdcall;
function GetRenderState(dwRenderStateType: TD3DRenderStateType; out dwRenderState: DWORD) : HResult; stdcall;
function BeginStateBlock: HResult; stdcall;
function EndStateBlock(var lpdwBlockHandle: DWORD): HResult; stdcall;
function EndStateBlock(out lpdwBlockHandle: DWORD) : HResult; stdcall;
function PreLoad(lpddsTexture: IDirectDrawSurface7): HResult; stdcall;
function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType; dwVertexTypeDesc: DWORD;
const lpvVertices; dwVertexCount: DWORD; dwFlags: DWORD): HResult; stdcall;
function DrawIndexedPrimitive(d3dptPrimitiveType: TD3DPrimitiveType; dwVertexTypeDesc: DWORD;
const lpvVertices; dwVertexCount: DWORD; const lpwIndices; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall;
function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType;
dwVertexTypeDesc: DWORD; const lpvVertices;
dwVertexCount, dwFlags: DWORD) : HResult; stdcall;
function DrawIndexedPrimitive(dptPrimitiveType: TD3DPrimitiveType;
dwVertexTypeDesc: DWORD; const lpvVertices; dwVertexCount: DWORD;
const lpwIndices; dwIndexCount, dwFlags: DWORD) : HResult; stdcall;
function SetClipStatus(const lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
function GetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
function DrawPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType; dwVertexTypeDesc: DWORD;
const lpVertexArray; dwVertexCount: DWORD; dwFlags: DWORD): HResult; stdcall;
function DrawIndexedPrimitiveStrided(d3dptPrimitiveType: TD3DPrimitiveType; dwVertexTypeDesc: DWORD;
const lpVertexArray; dwVertexCount: DWORD; const lpwIndices; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall;
function DrawPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7;
dwStartVertex: DWORD; dwNumVertices: DWORD; dwFlags: DWORD): HResult; stdcall;
function DrawIndexedPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7;
dwStartVertex: DWORD; dwNumVertices: DWORD; const lpwIndices; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall;
function ComputeSphereVisibility(const lpCenters; const lpRadii; dwNumSpheres: DWORD; dwFlags: DWORD; var lpdwReturnValue): HResult; stdcall;
function GetClipStatus(out lpD3DClipStatus: TD3DClipStatus) : HResult; stdcall;
function DrawPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
dwVertexTypeDesc : DWORD;
const lpVertexArray: TD3DDrawPrimitiveStridedData;
dwVertexCount, dwFlags: DWORD) : HResult; stdcall;
function DrawIndexedPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
dwVertexTypeDesc : DWORD;
const lpVertexArray: TD3DDrawPrimitiveStridedData; dwVertexCount: DWORD;
var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD) : HResult; stdcall;
function DrawPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
lpd3dVertexBuffer: IDirect3DVertexBuffer7;
dwStartVertex, dwNumVertices, dwFlags: DWORD) : HResult; stdcall;
function DrawIndexedPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
lpd3dVertexBuffer: IDirect3DVertexBuffer7; dwStartVertex, dwNumVertices: DWORD;
var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD) : HResult; stdcall;
function ComputeSphereVisibility(const lpCenters: TD3DVector;
var lpRadii: TD3DValue; dwNumSpheres, dwFlags: DWORD;
var lpdwReturnValues: DWORD) : HResult; stdcall;
function GetTexture(dwStage: DWORD; out lplpTexture: IDirectDrawSurface7): HResult; stdcall;
function SetTexture(dwStage: DWORD; lpTexture: IDirectDrawSurface7): HResult; stdcall;
function GetTextureStageState(dwStage: DWORD; dwState: TD3DTextureStagesStateType; var lpdwValue: DWORD): HResult; stdcall;
function SetTextureStageState(dwStage: DWORD; dwState: TD3DTextureStagesStateType; dwValue: DWORD): HResult; stdcall;
function ValidateDevice(var lpdwPasses: DWORD): HResult; stdcall;
function GetTextureStageState(dwStage: DWORD;
dwState: TD3DTextureStageStateType; out lpdwValue: DWORD) : HResult; stdcall;
function SetTextureStageState(dwStage: DWORD;
dwState: TD3DTextureStageStateType; lpdwValue: DWORD) : HResult; stdcall;
function ValidateDevice(out lpdwExtraPasses: DWORD) : HResult; stdcall;
function ApplyStateBlock(dwBlockHandle: DWORD): HResult; stdcall;
function CaptureStateBlock(dwBlockHandle: DWORD): HResult; stdcall;
function DeleteStateBlock(dwBlockHandle: DWORD): HResult; stdcall;
function CreateStateBlock(d3dsbType: TD3DSTATEBLOCKTYPE; var lpdwBlockHandle: DWORD): HResult; stdcall;
function Load(lpDestTex: IDirectDrawSurface7; const lpDestPoint: TPoint; lpSrcTex: IDirectDrawSurface7; const lprcSrcRect: TRect; dwFlags: DWORD): HResult; stdcall;
function CreateStateBlock(d3dsbType: TD3DStateBlockType; out lpdwBlockHandle: DWORD) : HResult; stdcall;
function Load(lpDestTex: IDirectDrawSurface7; lpDestPoint: PPoint;
lpSrcTex: IDirectDrawSurface7; lprcSrcRect: PRect; dwFlags: DWORD) : HResult; stdcall;
function LightEnable(dwLightIndex: DWORD; bEnable: BOOL): HResult; stdcall;
function GetLightEnable(dwLightIndex: DWORD; var pbEnable: BOOL): HResult; stdcall;
function SetClipPlane(dwIndex: DWORD; const pPlaneEquation): HResult; stdcall;
function GetClipPlane(dwIndex: DWORD; var pPlaneEquation): HResult; stdcall;
function GetLightEnable(dwLightIndex: DWORD; out bEnable: BOOL) : HResult; stdcall;
function SetClipPlane(dwIndex: DWORD; var pPlaneEquation: TD3DValue) : HResult; stdcall;
function GetClipPlane(dwIndex: DWORD; out pPlaneEquation: TD3DValue) : HResult; stdcall;
function GetInfo(dwDevInfoID: DWORD; pDevInfoStruct: Pointer; dwSize: DWORD): HResult; stdcall;
end;
 
(*
* Execute Buffer interface
*)
 
IDirect3DExecuteBuffer = interface(IUnknown)
['{4417C145-33AD-11CF-816F-0000C020156E}']
// IDirect3DExecuteBuffer methods
(*** IDirect3DExecuteBuffer methods ***)
function Initialize(lpDirect3DDevice: IDirect3DDevice;
const lpDesc: TD3DExecuteBufferDesc): HResult; stdcall;
var lpDesc: TD3DExecuteBufferDesc) : HResult; stdcall;
function Lock(var lpDesc: TD3DExecuteBufferDesc): HResult; stdcall;
function Unlock: HResult; stdcall;
function SetExecuteData(const lpData: TD3DExecuteData): HResult; stdcall;
function SetExecuteData (var lpData: TD3DExecuteData) : HResult; stdcall;
function GetExecuteData(var lpData: TD3DExecuteData): HResult; stdcall;
function Validate(var lpdwOffset: DWORD; lpFunc: TD3DValidateCallback;
lpUserArg: Pointer; dwReserved: DWORD): HResult; stdcall;
(*** Warning! Optimize is defined differently in the header files
and the online documentation ***)
function Optimize(dwFlags: DWORD): HResult; stdcall;
end;
 
(*
* Light interfaces
*)
 
IDirect3DLight = interface(IUnknown)
['{4417C142-33AD-11CF-816F-0000C020156E}']
// IDirect3DLight methods
(*** IDirect3DLight methods ***)
function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
function SetLight(const lpLight: TD3DLight): HResult; stdcall;
function GetLight(var lpLight: TD3DLight): HResult; stdcall;
function SetLight (var lpLight: TD3DLight2) : HResult; stdcall;
function GetLight (var lpLight: TD3DLight2) : HResult; stdcall;
end;
 
(*
* Material interfaces
*)
 
IDirect3DMaterial = interface(IUnknown)
['{4417C144-33AD-11CF-816F-0000C020156E}']
// IDirect3DMaterial methods
(*** IDirect3DMaterial methods ***)
function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
function SetMaterial(const lpMat: TD3DMaterial): HResult; stdcall;
function SetMaterial (var lpMat: TD3DMaterial) : HResult; stdcall;
function GetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
function GetHandle(lpDirect3DDevice: IDirect3DDevice;
var lpHandle: TD3DMaterialHandle): HResult; stdcall;
5454,9 → 8371,9
end;
 
IDirect3DMaterial2 = interface(IUnknown)
['{93281503-8CF8-11D0-89AB-00A0C9054129}']
// IDirect3DMaterial2 methods
function SetMaterial(const lpMat: TD3DMaterial): HResult; stdcall;
['{93281503-8cf8-11d0-89ab-00a0c9054129}']
(*** IDirect3DMaterial2 methods ***)
function SetMaterial (var lpMat: TD3DMaterial) : HResult; stdcall;
function GetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
function GetHandle(lpDirect3DDevice: IDirect3DDevice2;
var lpHandle: TD3DMaterialHandle): HResult; stdcall;
5463,17 → 8380,21
end;
 
IDirect3DMaterial3 = interface(IUnknown)
['{CA9C46F4-D3C5-11D1-B75A-00600852B312}']
// IDirect3DMaterial3 methods
function SetMaterial(const lpMat: TD3DMaterial): HResult; stdcall;
['{ca9c46f4-d3c5-11d1-b75a-00600852b312}']
(*** IDirect3DMaterial2 methods ***)
function SetMaterial (var lpMat: TD3DMaterial) : HResult; stdcall;
function GetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
function GetHandle(lpDirect3DDevice: IDirect3DDevice3;
var lpHandle: TD3DMaterialHandle): HResult; stdcall;
end;
 
(*
* Texture interfaces
*)
 
IDirect3DTexture = interface(IUnknown)
['{2CDCD9E0-25A0-11CF-A31A-00AA00B93356}']
// IDirect3DTexture methods
(*** IDirect3DTexture methods ***)
function Initialize(lpD3DDevice: IDirect3DDevice;
lpDDSurface: IDirectDrawSurface): HResult; stdcall;
function GetHandle(lpDirect3DDevice: IDirect3DDevice;
5484,31 → 8405,37
end;
 
IDirect3DTexture2 = interface(IUnknown)
['{93281502-8CF8-11D0-89AB-00A0C9054129}']
// IDirect3DTexture2 methods
function GetHandle(lpDirect3DDevice2: IDirect3DDevice2;
['{93281502-8cf8-11d0-89ab-00a0c9054129}']
(*** IDirect3DTexture2 methods ***)
function GetHandle (lpDirect3DDevice: IDirect3DDevice2;
var lpHandle: TD3DTextureHandle): HResult; stdcall;
function PaletteChanged(dwStart: DWORD; dwCount: DWORD): HResult; stdcall;
function Load(lpD3DTexture2: IDirect3DTexture2): HResult; stdcall;
function Load (lpD3DTexture: IDirect3DTexture2) : HResult; stdcall;
end;
 
(*
* Viewport interfaces
*)
 
IDirect3DViewport = interface(IUnknown)
['{4417C146-33AD-11CF-816F-0000C020156E}']
// IDirect3DViewport methods
(*** IDirect3DViewport methods ***)
function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
function GetViewport(var lpData: TD3DViewport): HResult; stdcall;
function GetViewport (out lpData: TD3DViewport) : HResult; stdcall;
function SetViewport(const lpData: TD3DViewport): HResult; stdcall;
function TransformVertices(dwVertexCount: DWORD;
var lpData: TD3DTransformData; dwFlags: DWORD;
var lpOffscreen: DWORD): HResult; stdcall;
const lpData: TD3DTransformData; dwFlags: DWORD;
out lpOffscreen: DWORD) : HResult; stdcall;
function LightElements(dwElementCount: DWORD;
var lpData: TD3DLightData): HResult; stdcall;
function SetBackground(hMat: TD3DMaterialHandle): HResult; stdcall;
function GetBackground(hMat: TD3DMaterialHandle): HResult; stdcall;
function SetBackgroundDepth(lpDDSurface: IDirectDrawSurface): HResult; stdcall;
function GetBackground (out hMat: TD3DMaterialHandle) : HResult; stdcall;
function SetBackgroundDepth (lpDDSurface: IDirectDrawSurface) :
HResult; stdcall;
function GetBackgroundDepth(out lplpDDSurface: IDirectDrawSurface;
var lpValid: BOOL): HResult; stdcall;
function Clear(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD): HResult; stdcall;
out lpValid: BOOL) : HResult; stdcall;
function Clear (dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD) :
HResult; stdcall;
function AddLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
function DeleteLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
function NextLight(lpDirect3DLight: IDirect3DLight;
5515,28 → 8442,74
out lplpDirect3DLight: IDirect3DLight; dwFlags: DWORD): HResult; stdcall;
end;
 
IDirect3DViewport2 = interface(IDirect3DViewport)
['{93281500-8CF8-11D0-89AB-00A0C9054129}']
// IDirect3DViewport2 methods
function GetViewport2(var lpData: TD3DViewport2): HResult; stdcall;
IDirect3DViewport2 = interface (IUnknown)
['{93281500-8cf8-11d0-89ab-00a0c9054129}']
(*** IDirect3DViewport2 methods ***)
function Initialize (lpDirect3D: IDirect3D) : HResult; stdcall;
function GetViewport (out lpData: TD3DViewport) : HResult; stdcall;
function SetViewport (const lpData: TD3DViewport) : HResult; stdcall;
function TransformVertices (dwVertexCount: DWORD;
const lpData: TD3DTransformData; dwFlags: DWORD;
out lpOffscreen: DWORD) : HResult; stdcall;
function LightElements (dwElementCount: DWORD;
var lpData: TD3DLightData) : HResult; stdcall;
function SetBackground (hMat: TD3DMaterialHandle) : HResult; stdcall;
function GetBackground (out hMat: TD3DMaterialHandle) : HResult; stdcall;
function SetBackgroundDepth (lpDDSurface: IDirectDrawSurface) :
HResult; stdcall;
function GetBackgroundDepth (out lplpDDSurface: IDirectDrawSurface;
out lpValid: BOOL) : HResult; stdcall;
function Clear (dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD) :
HResult; stdcall;
function AddLight (lpDirect3DLight: IDirect3DLight) : HResult; stdcall;
function DeleteLight (lpDirect3DLight: IDirect3DLight) : HResult; stdcall;
function NextLight (lpDirect3DLight: IDirect3DLight;
out lplpDirect3DLight: IDirect3DLight; dwFlags: DWORD) : HResult; stdcall;
(*** IDirect3DViewport2 methods ***)
function GetViewport2 (out lpData: TD3DViewport2) : HResult; stdcall;
function SetViewport2(const lpData: TD3DViewport2): HResult; stdcall;
end;
 
IDirect3DViewport3 = interface(IDirect3DViewport2)
['{B0AB3B61-33D7-11D1-A981-00C04FD7B174}']
// IDirect3DViewport3 methods
function SetBackgroundDepth2(lpDDS: IDirectDrawSurface4): HResult; stdcall;
function GetBackgroundDepth2(out lplpDDS: IDirectDrawSurface4; var lpValid: BOOL): HResult; stdcall;
IDirect3DViewport3 = interface (IUnknown)
['{b0ab3b61-33d7-11d1-a981-00c04fd7b174}']
(*** IDirect3DViewport3 methods ***)
function Initialize (lpDirect3D: IDirect3D) : HResult; stdcall;
function GetViewport (out lpData: TD3DViewport) : HResult; stdcall;
function SetViewport (const lpData: TD3DViewport) : HResult; stdcall;
function TransformVertices (dwVertexCount: DWORD;
const lpData: TD3DTransformData; dwFlags: DWORD;
out lpOffscreen: DWORD) : HResult; stdcall;
function LightElements (dwElementCount: DWORD;
var lpData: TD3DLightData) : HResult; stdcall;
function SetBackground (hMat: TD3DMaterialHandle) : HResult; stdcall;
function GetBackground (var hMat: TD3DMaterialHandle) : HResult; stdcall;
function SetBackgroundDepth (
lpDDSurface: IDirectDrawSurface) : HResult; stdcall;
function GetBackgroundDepth (out lplpDDSurface: IDirectDrawSurface;
out lpValid: BOOL) : HResult; stdcall;
function Clear (dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD) :
HResult; stdcall;
function AddLight (lpDirect3DLight: IDirect3DLight) : HResult; stdcall;
function DeleteLight (lpDirect3DLight: IDirect3DLight) : HResult; stdcall;
function NextLight (lpDirect3DLight: IDirect3DLight;
out lplpDirect3DLight: IDirect3DLight; dwFlags: DWORD) : HResult; stdcall;
function GetViewport2 (out lpData: TD3DViewport2) : HResult; stdcall;
function SetViewport2 (const lpData: TD3DViewport2) : HResult; stdcall;
function SetBackgroundDepth2 (
lpDDSurface: IDirectDrawSurface4) : HResult; stdcall;
function GetBackgroundDepth2 (out lplpDDSurface: IDirectDrawSurface4;
out lpValid: BOOL) : HResult; stdcall;
function Clear2(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD;
dwColor: DWORD; dvZ: TD3DValue; dwStencil: DWORD): HResult; stdcall;
end;
 
IDirect3DVertexBuffer = interface(IUnknown)
['{7A503555-4A83-11D1-A5DB-00A0C90367F8}']
// IDirect3DVertexBuffer methods
function Lock(dwFlags: DWORD; var lplpData: Pointer; var lpdwSize: DWORD): HResult; stdcall;
['{7a503555-4a83-11d1-a5db-00a0c90367f8}']
(*** IDirect3DVertexBuffer methods ***)
function Lock (dwFlags: DWORD; var lplpData: pointer; var lpdwSize: DWORD)
: HResult; stdcall;
function Unlock: HResult; stdcall;
function ProcessVertices(dwVertexOp: DWORD; dwDestIndex: DWORD; dwCount: DWORD;
function ProcessVertices (dwVertexOp, dwDestIndex, dwCount: DWORD;
lpSrcBuffer: IDirect3DVertexBuffer; dwSrcIndex: DWORD;
lpD3DDevice: IDirect3DDevice3; dwFlags: DWORD): HResult; stdcall;
function GetVertexBufferDesc(var lpVBDesc: TD3DVertexBufferDesc): HResult; stdcall;
5544,145 → 8517,770
end;
 
IDirect3DVertexBuffer7 = interface(IUnknown)
['{F5049E7D-4861-11D2-A407-00A0C90629A8}']
// IDirect3DVertexBuffer7 methods
function Lock(dwFlags: DWORD; var lplpData: Pointer; var lpdwSize: DWORD): HResult; stdcall;
['{f5049e7d-4861-11d2-a407-00a0c90629a8}']
(*** IDirect3DVertexBuffer methods ***)
function Lock (dwFlags: DWORD; out lplpData: Pointer; out lpdwSize: DWORD) : HResult; stdcall;
function Unlock: HResult; stdcall;
function ProcessVertices(dwVertexOp: DWORD; dwDestIndex: DWORD; dwCount: DWORD;
lpSrcBuffer: IDirect3DVertexBuffer7; dwSrcIndex: DWORD; lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD): HResult; stdcall;
function GetVertexBufferDesc(var lpVBDesc: TD3DVertexBufferDesc): HResult; stdcall;
function ProcessVertices (dwVertexOp, dwDestIndex, dwCount: DWORD;
lpSrcBuffer: IDirect3DVertexBuffer7; dwSrcIndex: DWORD;
lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD) : HResult; stdcall;
function GetVertexBufferDesc (out lpVBDesc: TD3DVertexBufferDesc) : HResult; stdcall;
function Optimize(lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD): HResult; stdcall;
function ProcessVerticesStrided(dwVertexOp: DWORD; dwDestIndex: DWORD; dwCount: DWORD;
const lpVertexArray; dwSrcIndex: DWORD; lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD): HResult; stdcall;
function ProcessVerticesStrided(dwVertexOp, dwDestIndex, dwCount: DWORD;
lpVertexArray: TD3DDrawPrimitiveStridedData; dwVertexTypeDesc: DWORD;
lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD) : HResult; stdcall;
end;
 
type
IID_IDirect3D = IDirect3D;
IID_IDirect3D2 = IDirect3D2;
IID_IDirect3D3 = IDirect3D3;
IID_IDirect3D7 = IDirect3D7;
 
IID_IDirect3DDevice = IDirect3DDevice;
IID_IDirect3DDevice2 = IDirect3DDevice2;
IID_IDirect3DDevice3 = IDirect3DDevice3;
IID_IDirect3DDevice7 = IDirect3DDevice7;
 
IID_IDirect3DTexture = IDirect3DTexture;
IID_IDirect3DTexture2 = IDirect3DTexture2;
IID_IDirect3DLight = IDirect3DLight;
IID_IDirect3DMaterial = IDirect3DMaterial;
IID_IDirect3DMaterial2 = IDirect3DMaterial2;
IID_IDirect3DMaterial3 = IDirect3DMaterial3;
IID_IDirect3DExecuteBuffer = IDirect3DExecuteBuffer;
IID_IDirect3DViewport = IDirect3DViewport;
IID_IDirect3DViewport2 = IDirect3DViewport2;
IID_IDirect3DViewport3 = IDirect3DViewport3;
IID_IDirect3DVertexBuffer = IDirect3DVertexBuffer;
IID_IDirect3DVertexBuffer7 = IDirect3DVertexBuffer7;
 
 
const
(****************************************************************************
*
* Flags for IDirect3DDevice::NextViewport
*
****************************************************************************)
 
{ Flags for IDirect3DDevice::NextViewport }
(*
* Return the next viewport
*)
D3DNEXT_NEXT = $00000001;
 
D3DNEXT_NEXT = $00000001;
(*
* Return the first viewport
*)
D3DNEXT_HEAD = $00000002;
 
(*
* Return the last viewport
*)
D3DNEXT_TAIL = $00000004;
 
{ Flags for DrawPrimitive/DrawIndexedPrimitive
Also valid for Begin/BeginIndexed }
 
(****************************************************************************
*
* Flags for DrawPrimitive/DrawIndexedPrimitive
* Also valid for Begin/BeginIndexed
* Also valid for VertexBuffer::CreateVertexBuffer
****************************************************************************)
 
(*
* Wait until the device is ready to draw the primitive
* This will cause DP to not return DDERR_WASSTILLDRAWING
*)
D3DDP_WAIT = $00000001;
 
(*
* Hint that it is acceptable to render the primitive out of order.
*)
D3DDP_OUTOFORDER = $00000002;
 
(*
* Hint that the primitives have been clipped by the application.
*)
D3DDP_DONOTCLIP = $00000004;
 
(*
* Hint that the extents need not be updated.
*)
D3DDP_DONOTUPDATEEXTENTS = $00000008;
 
(*
* Hint that the lighting should not be applied on vertices.
*)
 
D3DDP_DONOTLIGHT = $00000010;
 
{ Direct3D Errors }
 
(*
* Direct3D Errors
* DirectDraw error codes are used when errors not specified here.
*)
 
const
D3D_OK = HResult(DD_OK);
D3DERR_BADMAJORVERSION = HResult($88760000 + 700);
D3DERR_BADMINORVERSION = HResult($88760000 + 701);
MAKE_D3DHRESULT = HResult($88760000);
 
{ An invalid device was requested by the application. }
D3D_OK = DD_OK;
D3DERR_BADMAJORVERSION = MAKE_D3DHRESULT + 700;
D3DERR_BADMINORVERSION = MAKE_D3DHRESULT + 701;
 
D3DERR_INVALID_DEVICE = HResult($88760000 + 705);
D3DERR_INITFAILED = HResult($88760000 + 706);
(*
* An invalid device was requested by the application.
*)
D3DERR_INVALID_DEVICE = MAKE_D3DHRESULT + 705;
D3DERR_INITFAILED = MAKE_D3DHRESULT + 706;
 
{ SetRenderTarget attempted on a device that was
QI'd off the render target. }
(*
* SetRenderTarget attempted on a device that was
* QI'd off the render target.
*)
D3DERR_DEVICEAGGREGATED = MAKE_D3DHRESULT + 707;
 
D3DERR_DEVICEAGGREGATED = HResult($88760000 + 707);
D3DERR_EXECUTE_CREATE_FAILED = MAKE_D3DHRESULT + 710;
D3DERR_EXECUTE_DESTROY_FAILED = MAKE_D3DHRESULT + 711;
D3DERR_EXECUTE_LOCK_FAILED = MAKE_D3DHRESULT + 712;
D3DERR_EXECUTE_UNLOCK_FAILED = MAKE_D3DHRESULT + 713;
D3DERR_EXECUTE_LOCKED = MAKE_D3DHRESULT + 714;
D3DERR_EXECUTE_NOT_LOCKED = MAKE_D3DHRESULT + 715;
 
D3DERR_EXECUTE_CREATE_FAILED = HResult($88760000 + 710);
D3DERR_EXECUTE_DESTROY_FAILED = HResult($88760000 + 711);
D3DERR_EXECUTE_LOCK_FAILED = HResult($88760000 + 712);
D3DERR_EXECUTE_UNLOCK_FAILED = HResult($88760000 + 713);
D3DERR_EXECUTE_LOCKED = HResult($88760000 + 714);
D3DERR_EXECUTE_NOT_LOCKED = HResult($88760000 + 715);
D3DERR_EXECUTE_FAILED = MAKE_D3DHRESULT + 716;
D3DERR_EXECUTE_CLIPPED_FAILED = MAKE_D3DHRESULT + 717;
 
D3DERR_EXECUTE_FAILED = HResult($88760000 + 716);
D3DERR_EXECUTE_CLIPPED_FAILED = HResult($88760000 + 717);
D3DERR_TEXTURE_NO_SUPPORT = MAKE_D3DHRESULT + 720;
D3DERR_TEXTURE_CREATE_FAILED = MAKE_D3DHRESULT + 721;
D3DERR_TEXTURE_DESTROY_FAILED = MAKE_D3DHRESULT + 722;
D3DERR_TEXTURE_LOCK_FAILED = MAKE_D3DHRESULT + 723;
D3DERR_TEXTURE_UNLOCK_FAILED = MAKE_D3DHRESULT + 724;
D3DERR_TEXTURE_LOAD_FAILED = MAKE_D3DHRESULT + 725;
D3DERR_TEXTURE_SWAP_FAILED = MAKE_D3DHRESULT + 726;
D3DERR_TEXTURE_LOCKED = MAKE_D3DHRESULT + 727;
D3DERR_TEXTURE_NOT_LOCKED = MAKE_D3DHRESULT + 728;
D3DERR_TEXTURE_GETSURF_FAILED = MAKE_D3DHRESULT + 729;
 
D3DERR_TEXTURE_NO_SUPPORT = HResult($88760000 + 720);
D3DERR_TEXTURE_CREATE_FAILED = HResult($88760000 + 721);
D3DERR_TEXTURE_DESTROY_FAILED = HResult($88760000 + 722);
D3DERR_TEXTURE_LOCK_FAILED = HResult($88760000 + 723);
D3DERR_TEXTURE_UNLOCK_FAILED = HResult($88760000 + 724);
D3DERR_TEXTURE_LOAD_FAILED = HResult($88760000 + 725);
D3DERR_TEXTURE_SWAP_FAILED = HResult($88760000 + 726);
D3DERR_TEXTURE_LOCKED = HResult($88760000 + 727);
D3DERR_TEXTURE_NOT_LOCKED = HResult($88760000 + 728);
D3DERR_TEXTURE_GETSURF_FAILED = HResult($88760000 + 729);
D3DERR_MATRIX_CREATE_FAILED = MAKE_D3DHRESULT + 730;
D3DERR_MATRIX_DESTROY_FAILED = MAKE_D3DHRESULT + 731;
D3DERR_MATRIX_SETDATA_FAILED = MAKE_D3DHRESULT + 732;
D3DERR_MATRIX_GETDATA_FAILED = MAKE_D3DHRESULT + 733;
D3DERR_SETVIEWPORTDATA_FAILED = MAKE_D3DHRESULT + 734;
 
D3DERR_MATRIX_CREATE_FAILED = HResult($88760000 + 730);
D3DERR_MATRIX_DESTROY_FAILED = HResult($88760000 + 731);
D3DERR_MATRIX_SETDATA_FAILED = HResult($88760000 + 732);
D3DERR_MATRIX_GETDATA_FAILED = HResult($88760000 + 733);
D3DERR_SETVIEWPORTDATA_FAILED = HResult($88760000 + 734);
D3DERR_INVALIDCURRENTVIEWPORT = MAKE_D3DHRESULT + 735;
D3DERR_INVALIDPRIMITIVETYPE = MAKE_D3DHRESULT + 736;
D3DERR_INVALIDVERTEXTYPE = MAKE_D3DHRESULT + 737;
D3DERR_TEXTURE_BADSIZE = MAKE_D3DHRESULT + 738;
D3DERR_INVALIDRAMPTEXTURE = MAKE_D3DHRESULT + 739;
 
D3DERR_INVALIDCURRENTVIEWPORT = HResult($88760000 + 735);
D3DERR_INVALIDPRIMITIVETYPE = HResult($88760000 + 736);
D3DERR_INVALIDVERTEXTYPE = HResult($88760000 + 737);
D3DERR_TEXTURE_BADSIZE = HResult($88760000 + 738);
D3DERR_INVALIDRAMPTEXTURE = HResult($88760000 + 739);
D3DERR_MATERIAL_CREATE_FAILED = MAKE_D3DHRESULT + 740;
D3DERR_MATERIAL_DESTROY_FAILED = MAKE_D3DHRESULT + 741;
D3DERR_MATERIAL_SETDATA_FAILED = MAKE_D3DHRESULT + 742;
D3DERR_MATERIAL_GETDATA_FAILED = MAKE_D3DHRESULT + 743;
 
D3DERR_MATERIAL_CREATE_FAILED = HResult($88760000 + 740);
D3DERR_MATERIAL_DESTROY_FAILED = HResult($88760000 + 741);
D3DERR_MATERIAL_SETDATA_FAILED = HResult($88760000 + 742);
D3DERR_MATERIAL_GETDATA_FAILED = HResult($88760000 + 743);
D3DERR_INVALIDPALETTE = MAKE_D3DHRESULT + 744;
 
D3DERR_INVALIDPALETTE = HResult($88760000 + 744);
D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY = MAKE_D3DHRESULT + 745;
D3DERR_ZBUFF_NEEDS_VIDEOMEMORY = MAKE_D3DHRESULT + 746;
D3DERR_SURFACENOTINVIDMEM = MAKE_D3DHRESULT + 747;
 
D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY = HResult($88760000 + 745);
D3DERR_ZBUFF_NEEDS_VIDEOMEMORY = HResult($88760000 + 746);
D3DERR_SURFACENOTINVIDMEM = HResult($88760000 + 747);
D3DERR_LIGHT_SET_FAILED = MAKE_D3DHRESULT + 750;
D3DERR_LIGHTHASVIEWPORT = MAKE_D3DHRESULT + 751;
D3DERR_LIGHTNOTINTHISVIEWPORT = MAKE_D3DHRESULT + 752;
 
D3DERR_LIGHT_SET_FAILED = HResult($88760000 + 750);
D3DERR_LIGHTHASVIEWPORT = HResult($88760000 + 751);
D3DERR_LIGHTNOTINTHISVIEWPORT = HResult($88760000 + 752);
D3DERR_SCENE_IN_SCENE = MAKE_D3DHRESULT + 760;
D3DERR_SCENE_NOT_IN_SCENE = MAKE_D3DHRESULT + 761;
D3DERR_SCENE_BEGIN_FAILED = MAKE_D3DHRESULT + 762;
D3DERR_SCENE_END_FAILED = MAKE_D3DHRESULT + 763;
 
D3DERR_SCENE_IN_SCENE = HResult($88760000 + 760);
D3DERR_SCENE_NOT_IN_SCENE = HResult($88760000 + 761);
D3DERR_SCENE_BEGIN_FAILED = HResult($88760000 + 762);
D3DERR_SCENE_END_FAILED = HResult($88760000 + 763);
D3DERR_INBEGIN = MAKE_D3DHRESULT + 770;
D3DERR_NOTINBEGIN = MAKE_D3DHRESULT + 771;
D3DERR_NOVIEWPORTS = MAKE_D3DHRESULT + 772;
D3DERR_VIEWPORTDATANOTSET = MAKE_D3DHRESULT + 773;
D3DERR_VIEWPORTHASNODEVICE = MAKE_D3DHRESULT + 774;
D3DERR_NOCURRENTVIEWPORT = MAKE_D3DHRESULT + 775;
 
D3DERR_INBEGIN = HResult($88760000 + 770);
D3DERR_NOTINBEGIN = HResult($88760000 + 771);
D3DERR_NOVIEWPORTS = HResult($88760000 + 772);
D3DERR_VIEWPORTDATANOTSET = HResult($88760000 + 773);
D3DERR_VIEWPORTHASNODEVICE = HResult($88760000 + 774);
D3DERR_NOCURRENTVIEWPORT = HResult($88760000 + 775);
D3DERR_INVALIDVERTEXFORMAT = MAKE_D3DHRESULT + 2048;
 
D3DERR_INVALIDVERTEXFORMAT = HResult($88760000 + 2048);
(*
* Attempted to CreateTexture on a surface that had a color key
*)
D3DERR_COLORKEYATTACHED = MAKE_D3DHRESULT + 2050;
 
D3DERR_COLORKEYATTACHED = HResult($88760000 + 2050);
D3DERR_VERTEXBUFFEROPTIMIZED = MAKE_D3DHRESULT + 2060;
D3DERR_VBUF_CREATE_FAILED = MAKE_D3DHRESULT + 2061;
D3DERR_VERTEXBUFFERLOCKED = MAKE_D3DHRESULT + 2062;
 
D3DERR_VERTEXBUFFEROPTIMIZED = HResult($88760000 + 2060);
D3DERR_VBUF_CREATE_FAILED = HResult($88760000 + 2061);
D3DERR_VERTEXBUFFERLOCKED = HResult($88760000 + 2062);
D3DERR_VERTEXBUFFERUNLOCKFAILED = HResult($88760000 + 2063);
D3DERR_ZBUFFER_NOTPRESENT = MAKE_D3DHRESULT + 2070;
D3DERR_STENCILBUFFER_NOTPRESENT = MAKE_D3DHRESULT + 2071;
 
D3DERR_ZBUFFER_NOTPRESENT = HResult($88760000 + 2070);
D3DERR_STENCILBUFFER_NOTPRESENT = HResult($88760000 + 2071);
D3DERR_WRONGTEXTUREFORMAT = MAKE_D3DHRESULT + 2072;
D3DERR_UNSUPPORTEDCOLOROPERATION = MAKE_D3DHRESULT + 2073;
D3DERR_UNSUPPORTEDCOLORARG = MAKE_D3DHRESULT + 2074;
D3DERR_UNSUPPORTEDALPHAOPERATION = MAKE_D3DHRESULT + 2075;
D3DERR_UNSUPPORTEDALPHAARG = MAKE_D3DHRESULT + 2076;
D3DERR_TOOMANYOPERATIONS = MAKE_D3DHRESULT + 2077;
D3DERR_CONFLICTINGTEXTUREFILTER = MAKE_D3DHRESULT + 2078;
D3DERR_UNSUPPORTEDFACTORVALUE = MAKE_D3DHRESULT + 2079;
D3DERR_CONFLICTINGRENDERSTATE = MAKE_D3DHRESULT + 2081;
D3DERR_UNSUPPORTEDTEXTUREFILTER = MAKE_D3DHRESULT + 2082;
D3DERR_TOOMANYPRIMITIVES = MAKE_D3DHRESULT + 2083;
D3DERR_INVALIDMATRIX = MAKE_D3DHRESULT + 2084;
D3DERR_TOOMANYVERTICES = MAKE_D3DHRESULT + 2085;
D3DERR_CONFLICTINGTEXTUREPALETTE = MAKE_D3DHRESULT + 2086;
 
D3DERR_WRONGTEXTUREFORMAT = HResult($88760000 + 2072);
D3DERR_UNSUPPORTEDCOLOROPERATION = HResult($88760000 + 2073);
D3DERR_UNSUPPORTEDCOLORARG = HResult($88760000 + 2074);
D3DERR_UNSUPPORTEDALPHAOPERATION = HResult($88760000 + 2075);
D3DERR_UNSUPPORTEDALPHAARG = HResult($88760000 + 2076);
D3DERR_TOOMANYOPERATIONS = HResult($88760000 + 2077);
D3DERR_CONFLICTINGTEXTUREFILTER = HResult($88760000 + 2078);
D3DERR_UNSUPPORTEDFACTORVALUE = HResult($88760000 + 2079);
D3DERR_CONFLICTINGRENDERSTATE = HResult($88760000 + 2081);
D3DERR_UNSUPPORTEDTEXTUREFILTER = HResult($88760000 + 2082);
D3DERR_TOOMANYPRIMITIVES = HResult($88760000 + 2083);
D3DERR_INVALIDMATRIX = HResult($88760000 + 2084);
D3DERR_TOOMANYVERTICES = HResult($88760000 + 2085);
D3DERR_CONFLICTINGTEXTUREPALETTE = HResult($88760000 + 2086);
D3DERR_INVALIDSTATEBLOCK = MAKE_D3DHRESULT + 2100;
D3DERR_INBEGINSTATEBLOCK = MAKE_D3DHRESULT + 2101;
D3DERR_NOTINBEGINSTATEBLOCK = MAKE_D3DHRESULT + 2102;
 
D3DERR_INVALIDSTATEBLOCK = HResult($88760000 + 2100);
D3DERR_INBEGINSTATEBLOCK = HResult($88760000 + 2101);
D3DERR_NOTINBEGINSTATEBLOCK = HResult($88760000 + 2102);
procedure DisableFPUExceptions;
procedure EnableFPUExceptions;
 
(***************************************************************************
*
* Copyright (C) 1998-1999 Microsoft Corporation. All Rights Reserved.
*
* File: dxfile.h
*
* Content: DirectX File public header file
*
***************************************************************************)
 
var
DXFileDLL : HMODULE;
 
function DXFileErrorString(Value: HResult) : string;
 
type
TDXFileFormat = (
DXFILEFORMAT_BINARY,
DXFILEFORMAT_TEXT,
DXFILEFORMAT_COMPRESSED
);
 
TDXFileLoadOptions = (
DXFILELOAD_FROMFILE,
DXFILELOAD_FROMRESOURCE,
DXFILELOAD_FROMMEMORY,
DXFILELOAD_INVALID_3,
DXFILELOAD_FROMSTREAM,
DXFILELOAD_INVALID_5,
DXFILELOAD_INVALID_6,
DXFILELOAD_INVALID_7,
DXFILELOAD_FROMURL
);
 
PDXFileLoadResource = ^TDXFileLoadResource;
TDXFileLoadResource = packed record
hModule: HModule;
lpName: PAnsiChar;
lpType: PAnsiChar;
end;
 
PDXFileLoadMemory = ^TDXFileLoadMemory;
TDXFileLoadMemory = packed record
lpMemory: Pointer;
dSize: DWORD;
end;
 
(*
* DirectX File object types.
*)
 
IDirectXFile = interface;
IDirectXFileEnumObject = interface;
IDirectXFileSaveObject = interface;
IDirectXFileObject = interface;
IDirectXFileData = interface;
IDirectXFileDataReference = interface;
IDirectXFileBinary = interface;
 
(*
* DirectX File interfaces.
*)
 
IDirectXFile = interface (IUnknown)
['{3d82ab40-62da-11cf-ab39-0020af71e433}']
function CreateEnumObject (pvSource: Pointer;
dwLoadOptions: TDXFileLoadOptions;
var ppEnumObj: IDirectXFileEnumObject) : HResult; stdcall;
function CreateSaveObject (szFileName: PChar; dwFileFormat: TDXFileFormat;
var ppSaveObj: IDirectXFileSaveObject) : HResult; stdcall;
function RegisterTemplates (pvData: Pointer; cbSize: DWORD) : HResult; stdcall;
end;
 
IDirectXFileEnumObject = interface (IUnknown)
['{3d82ab41-62da-11cf-ab39-0020af71e433}']
function GetNextDataObject (var ppDataObj: IDirectXFileData) : HResult; stdcall;
function GetDataObjectById
(const rguid: TGUID; var ppDataObj: IDirectXFileData) : HResult; stdcall;
function GetDataObjectByName
(szName: PChar; var ppDataObj: IDirectXFileData) : HResult; stdcall;
end;
 
IDirectXFileSaveObject = interface (IUnknown)
['{3d82ab42-62da-11cf-ab39-0020af71e433}']
function SaveTemplates
(cTemplates: DWORD; var ppguidTemplates: PGUID) : HResult; stdcall;
function CreateDataObject (const rguidTemplate: TGUID; szName: PChar;
pguid: PGUID; cbSize: DWORD; pvData: Pointer;
var ppDataObj: IDirectXFileData) : HResult; stdcall;
function SaveData (pDataObj: IDirectXFileData) : HResult; stdcall;
end;
 
IDirectXFileObject = interface (IUnknown)
['{3d82ab43-62da-11cf-ab39-0020af71e433}']
function GetName (pstrNameBuf: PChar; var dwBufLen: DWORD) : HResult; stdcall;
function GetId (var pGuidBuf: TGUID) : HResult; stdcall;
end;
 
IDirectXFileData = interface (IDirectXFileObject)
['{3d82ab44-62da-11cf-ab39-0020af71e433}']
function GetData
(szMember: PChar; var pcbSize: DWORD; var ppvData: Pointer) : HResult; stdcall;
function GetType (var ppguid: PGUID) : HResult; stdcall;
function GetNextObject (var ppChildObj: IDirectXFileObject) : HResult; stdcall;
function AddDataObject (pDataObj: IDirectXFileData) : HResult; stdcall;
function AddDataReference (szRef: PChar; pguidRef: PGUID) : HResult; stdcall;
function AddBinaryObject (szName: PChar; pguid: PGUID; szMimeType: PChar;
pvData: Pointer; cbSize: DWORD) : HResult; stdcall;
end;
 
IDirectXFileDataReference = interface (IDirectXFileObject)
['{3d82ab45-62da-11cf-ab39-0020af71e433}']
function Resolve (var ppDataObj: IDirectXFileData) : HResult; stdcall;
end;
 
IDirectXFileBinary = interface (IDirectXFileObject)
['{3d82ab46-62da-11cf-ab39-0020af71e433}']
function GetSize (var pcbSize: DWORD) : HResult; stdcall;
function GetMimeType (var pszMimeType: PChar) : HResult; stdcall;
function Read(pvData: Pointer; cbSize: DWORD; pcbRead: PDWORD{?}) : HResult; stdcall;
end;
 
const
 
(*
* DirectXFile Object Class Id (for CoCreateInstance())
*)
 
CLSID_CDirectXFile: TGUID =
(D1:$4516ec43;D2:$8f20;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
 
(*
* DirectX File Interface GUIDs.
*)
 
type
IID_IDirectXFile = IDirectXFile;
IID_IDirectXFileEnumObject = IDirectXFileEnumObject;
IID_IDirectXFileSaveObject = IDirectXFileSaveObject;
IID_IDirectXFileObject = IDirectXFileObject;
IID_IDirectXFileData = IDirectXFileData;
IID_IDirectXFileDataReference = IDirectXFileDataReference;
IID_IDirectXFileBinary = IDirectXFileBinary;
 
(*
* DirectX File Header template's GUID.
*)
const
TID_DXFILEHeader: TGUID =
(D1:$3d82ab43;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
(*
* DirectX File errors.
*)
 
const
DXFILE_OK = 0;
 
DXFILEERR_BADOBJECT = MAKE_D3DHRESULT or 850;
DXFILEERR_BADVALUE = MAKE_D3DHRESULT or 851;
DXFILEERR_BADTYPE = MAKE_D3DHRESULT or 852;
DXFILEERR_BADSTREAMHANDLE = MAKE_D3DHRESULT or 853;
DXFILEERR_BADALLOC = MAKE_D3DHRESULT or 854;
DXFILEERR_NOTFOUND = MAKE_D3DHRESULT or 855;
DXFILEERR_NOTDONEYET = MAKE_D3DHRESULT or 856;
DXFILEERR_FILENOTFOUND = MAKE_D3DHRESULT or 857;
DXFILEERR_RESOURCENOTFOUND = MAKE_D3DHRESULT or 858;
DXFILEERR_URLNOTFOUND = MAKE_D3DHRESULT or 859;
DXFILEERR_BADRESOURCE = MAKE_D3DHRESULT or 860;
DXFILEERR_BADFILETYPE = MAKE_D3DHRESULT or 861;
DXFILEERR_BADFILEVERSION = MAKE_D3DHRESULT or 862;
DXFILEERR_BADFILEFLOATSIZE = MAKE_D3DHRESULT or 863;
DXFILEERR_BADFILECOMPRESSIONTYPE = MAKE_D3DHRESULT or 864;
DXFILEERR_BADFILE = MAKE_D3DHRESULT or 865;
DXFILEERR_PARSEERROR = MAKE_D3DHRESULT or 866;
DXFILEERR_NOTEMPLATE = MAKE_D3DHRESULT or 867;
DXFILEERR_BADARRAYSIZE = MAKE_D3DHRESULT or 868;
DXFILEERR_BADDATAREFERENCE = MAKE_D3DHRESULT or 869;
DXFILEERR_INTERNALERROR = MAKE_D3DHRESULT or 870;
DXFILEERR_NOMOREOBJECTS = MAKE_D3DHRESULT or 871;
DXFILEERR_BADINTRINSICS = MAKE_D3DHRESULT or 872;
DXFILEERR_NOMORESTREAMHANDLES = MAKE_D3DHRESULT or 873;
DXFILEERR_NOMOREDATA = MAKE_D3DHRESULT or 874;
DXFILEERR_BADCACHEFILE = MAKE_D3DHRESULT or 875;
DXFILEERR_NOINTERNET = MAKE_D3DHRESULT or 876;
 
{$IFDEF D3DRM}
(*
* API for creating IDirectXFile interface.
*)
 
var
DirectXFileCreate : function
(out lplpDirectXFile: IDirectXFile) : HResult; stdcall;
 
(* D3DRM XFile templates in binary form *)
const
D3DRM_XTEMPLATE_BYTES = 3215;
D3DRM_XTEMPLATES: array [0..D3DRM_XTEMPLATE_BYTES-1] of byte = (
$78, $6f, $66, $20, $30, $33, $30, $32, $62,
$69, $6e, $20, $30, $30, $36, $34, $1f, 0, $1,
0, $6, 0, 0, 0, $48, $65, $61, $64, $65,
$72, $a, 0, $5, 0, $43, $ab, $82, $3d, $da,
$62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4,
$33, $28, 0, $1, 0, $5, 0, 0, 0, $6d,
$61, $6a, $6f, $72, $14, 0, $28, 0, $1, 0,
$5, 0, 0, 0, $6d, $69, $6e, $6f, $72, $14,
0, $29, 0, $1, 0, $5, 0, 0, 0, $66,
$6c, $61, $67, $73, $14, 0, $b, 0, $1f, 0,
$1, 0, $6, 0, 0, 0, $56, $65, $63, $74,
$6f, $72, $a, 0, $5, 0, $5e, $ab, $82, $3d,
$da, $62, $cf, $11, $ab, $39, 0, $20, $af, $71,
$e4, $33, $2a, 0, $1, 0, $1, 0, 0, 0,
$78, $14, 0, $2a, 0, $1, 0, $1, 0, 0,
0, $79, $14, 0, $2a, 0, $1, 0, $1, 0,
0, 0, $7a, $14, 0, $b, 0, $1f, 0, $1,
0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64,
$73, $32, $64, $a, 0, $5, 0, $44, $3f, $f2,
$f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $2a, 0, $1, 0, $1, 0, 0,
0, $75, $14, 0, $2a, 0, $1, 0, $1, 0,
0, 0, $76, $14, 0, $b, 0, $1f, 0, $1,
0, $9, 0, 0, 0, $4d, $61, $74, $72, $69,
$78, $34, $78, $34, $a, 0, $5, 0, $45, $3f,
$f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40,
$33, $35, $94, $a3, $34, 0, $2a, 0, $1, 0,
$6, 0, 0, 0, $6d, $61, $74, $72, $69, $78,
$e, 0, $3, 0, $10, 0, 0, 0, $f, 0,
$14, 0, $b, 0, $1f, 0, $1, 0, $9, 0,
0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42,
$41, $a, 0, $5, 0, $e0, $44, $ff, $35, $7c,
$6c, $cf, $11, $8f, $52, 0, $40, $33, $35, $94,
$a3, $2a, 0, $1, 0, $3, 0, 0, 0, $72,
$65, $64, $14, 0, $2a, 0, $1, 0, $5, 0,
0, 0, $67, $72, $65, $65, $6e, $14, 0, $2a,
0, $1, 0, $4, 0, 0, 0, $62, $6c, $75,
$65, $14, 0, $2a, 0, $1, 0, $5, 0, 0,
0, $61, $6c, $70, $68, $61, $14, 0, $b, 0,
$1f, 0, $1, 0, $8, 0, 0, 0, $43, $6f,
$6c, $6f, $72, $52, $47, $42, $a, 0, $5, 0,
$81, $6e, $e1, $d3, $35, $78, $cf, $11, $8f, $52,
0, $40, $33, $35, $94, $a3, $2a, 0, $1, 0,
$3, 0, 0, 0, $72, $65, $64, $14, 0, $2a,
0, $1, 0, $5, 0, 0, 0, $67, $72, $65,
$65, $6e, $14, 0, $2a, 0, $1, 0, $4, 0,
0, 0, $62, $6c, $75, $65, $14, 0, $b, 0,
$1f, 0, $1, 0, $c, 0, 0, 0, $49, $6e,
$64, $65, $78, $65, $64, $43, $6f, $6c, $6f, $72,
$a, 0, $5, 0, $20, $b8, $30, $16, $42, $78,
$cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3,
$29, 0, $1, 0, $5, 0, 0, 0, $69, $6e,
$64, $65, $78, $14, 0, $1, 0, $9, 0, 0,
0, $43, $6f, $6c, $6f, $72, $52, $47, $42, $41,
$1, 0, $a, 0, 0, 0, $69, $6e, $64, $65,
$78, $43, $6f, $6c, $6f, $72, $14, 0, $b, 0,
$1f, 0, $1, 0, $7, 0, 0, 0, $42, $6f,
$6f, $6c, $65, $61, $6e, $a, 0, $5, 0, $a0,
$a6, $7d, $53, $37, $ca, $d0, $11, $94, $1c, 0,
$80, $c8, $c, $fa, $7b, $29, 0, $1, 0, $9,
0, 0, 0, $74, $72, $75, $65, $66, $61, $6c,
$73, $65, $14, 0, $b, 0, $1f, 0, $1, 0,
$9, 0, 0, 0, $42, $6f, $6f, $6c, $65, $61,
$6e, $32, $64, $a, 0, $5, 0, $63, $ae, $85,
$48, $e8, $78, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $1, 0, $7, 0, 0, 0, $42,
$6f, $6f, $6c, $65, $61, $6e, $1, 0, $1, 0,
0, 0, $75, $14, 0, $1, 0, $7, 0, 0,
0, $42, $6f, $6f, $6c, $65, $61, $6e, $1, 0,
$1, 0, 0, 0, $76, $14, 0, $b, 0, $1f,
0, $1, 0, $c, 0, 0, 0, $4d, $61, $74,
$65, $72, $69, $61, $6c, $57, $72, $61, $70, $a,
0, $5, 0, $60, $ae, $85, $48, $e8, $78, $cf,
$11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1,
0, $7, 0, 0, 0, $42, $6f, $6f, $6c, $65,
$61, $6e, $1, 0, $1, 0, 0, 0, $75, $14,
0, $1, 0, $7, 0, 0, 0, $42, $6f, $6f,
$6c, $65, $61, $6e, $1, 0, $1, 0, 0, 0,
$76, $14, 0, $b, 0, $1f, 0, $1, 0, $f,
0, 0, 0, $54, $65, $78, $74, $75, $72, $65,
$46, $69, $6c, $65, $6e, $61, $6d, $65, $a, 0,
$5, 0, $e1, $90, $27, $a4, $10, $78, $cf, $11,
$8f, $52, 0, $40, $33, $35, $94, $a3, $31, 0,
$1, 0, $8, 0, 0, 0, $66, $69, $6c, $65,
$6e, $61, $6d, $65, $14, 0, $b, 0, $1f, 0,
$1, 0, $8, 0, 0, 0, $4d, $61, $74, $65,
$72, $69, $61, $6c, $a, 0, $5, 0, $4d, $ab,
$82, $3d, $da, $62, $cf, $11, $ab, $39, 0, $20,
$af, $71, $e4, $33, $1, 0, $9, 0, 0, 0,
$43, $6f, $6c, $6f, $72, $52, $47, $42, $41, $1,
0, $9, 0, 0, 0, $66, $61, $63, $65, $43,
$6f, $6c, $6f, $72, $14, 0, $2a, 0, $1, 0,
$5, 0, 0, 0, $70, $6f, $77, $65, $72, $14,
0, $1, 0, $8, 0, 0, 0, $43, $6f, $6c,
$6f, $72, $52, $47, $42, $1, 0, $d, 0, 0,
0, $73, $70, $65, $63, $75, $6c, $61, $72, $43,
$6f, $6c, $6f, $72, $14, 0, $1, 0, $8, 0,
0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42,
$1, 0, $d, 0, 0, 0, $65, $6d, $69, $73,
$73, $69, $76, $65, $43, $6f, $6c, $6f, $72, $14,
0, $e, 0, $12, 0, $12, 0, $12, 0, $f,
0, $b, 0, $1f, 0, $1, 0, $8, 0, 0,
0, $4d, $65, $73, $68, $46, $61, $63, $65, $a,
0, $5, 0, $5f, $ab, $82, $3d, $da, $62, $cf,
$11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29,
0, $1, 0, $12, 0, 0, 0, $6e, $46, $61,
$63, $65, $56, $65, $72, $74, $65, $78, $49, $6e,
$64, $69, $63, $65, $73, $14, 0, $34, 0, $29,
0, $1, 0, $11, 0, 0, 0, $66, $61, $63,
$65, $56, $65, $72, $74, $65, $78, $49, $6e, $64,
$69, $63, $65, $73, $e, 0, $1, 0, $12, 0,
0, 0, $6e, $46, $61, $63, $65, $56, $65, $72,
$74, $65, $78, $49, $6e, $64, $69, $63, $65, $73,
$f, 0, $14, 0, $b, 0, $1f, 0, $1, 0,
$d, 0, 0, 0, $4d, $65, $73, $68, $46, $61,
$63, $65, $57, $72, $61, $70, $73, $a, 0, $5,
0, $c0, $c5, $1e, $ed, $a8, $c0, $d0, $11, $94,
$1c, 0, $80, $c8, $c, $fa, $7b, $29, 0, $1,
0, $f, 0, 0, 0, $6e, $46, $61, $63, $65,
$57, $72, $61, $70, $56, $61, $6c, $75, $65, $73,
$14, 0, $34, 0, $1, 0, $9, 0, 0, 0,
$42, $6f, $6f, $6c, $65, $61, $6e, $32, $64, $1,
0, $e, 0, 0, 0, $66, $61, $63, $65, $57,
$72, $61, $70, $56, $61, $6c, $75, $65, $73, $e,
0, $1, 0, $f, 0, 0, 0, $6e, $46, $61,
$63, $65, $57, $72, $61, $70, $56, $61, $6c, $75,
$65, $73, $f, 0, $14, 0, $b, 0, $1f, 0,
$1, 0, $11, 0, 0, 0, $4d, $65, $73, $68,
$54, $65, $78, $74, $75, $72, $65, $43, $6f, $6f,
$72, $64, $73, $a, 0, $5, 0, $40, $3f, $f2,
$f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $29, 0, $1, 0, $e, 0, 0,
0, $6e, $54, $65, $78, $74, $75, $72, $65, $43,
$6f, $6f, $72, $64, $73, $14, 0, $34, 0, $1,
0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64,
$73, $32, $64, $1, 0, $d, 0, 0, 0, $74,
$65, $78, $74, $75, $72, $65, $43, $6f, $6f, $72,
$64, $73, $e, 0, $1, 0, $e, 0, 0, 0,
$6e, $54, $65, $78, $74, $75, $72, $65, $43, $6f,
$6f, $72, $64, $73, $f, 0, $14, 0, $b, 0,
$1f, 0, $1, 0, $10, 0, 0, 0, $4d, $65,
$73, $68, $4d, $61, $74, $65, $72, $69, $61, $6c,
$4c, $69, $73, $74, $a, 0, $5, 0, $42, $3f,
$f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40,
$33, $35, $94, $a3, $29, 0, $1, 0, $a, 0,
0, 0, $6e, $4d, $61, $74, $65, $72, $69, $61,
$6c, $73, $14, 0, $29, 0, $1, 0, $c, 0,
0, 0, $6e, $46, $61, $63, $65, $49, $6e, $64,
$65, $78, $65, $73, $14, 0, $34, 0, $29, 0,
$1, 0, $b, 0, 0, 0, $66, $61, $63, $65,
$49, $6e, $64, $65, $78, $65, $73, $e, 0, $1,
0, $c, 0, 0, 0, $6e, $46, $61, $63, $65,
$49, $6e, $64, $65, $78, $65, $73, $f, 0, $14,
0, $e, 0, $1, 0, $8, 0, 0, 0, $4d,
$61, $74, $65, $72, $69, $61, $6c, $f, 0, $b,
0, $1f, 0, $1, 0, $b, 0, 0, 0, $4d,
$65, $73, $68, $4e, $6f, $72, $6d, $61, $6c, $73,
$a, 0, $5, 0, $43, $3f, $f2, $f6, $86, $76,
$cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3,
$29, 0, $1, 0, $8, 0, 0, 0, $6e, $4e,
$6f, $72, $6d, $61, $6c, $73, $14, 0, $34, 0,
$1, 0, $6, 0, 0, 0, $56, $65, $63, $74,
$6f, $72, $1, 0, $7, 0, 0, 0, $6e, $6f,
$72, $6d, $61, $6c, $73, $e, 0, $1, 0, $8,
0, 0, 0, $6e, $4e, $6f, $72, $6d, $61, $6c,
$73, $f, 0, $14, 0, $29, 0, $1, 0, $c,
0, 0, 0, $6e, $46, $61, $63, $65, $4e, $6f,
$72, $6d, $61, $6c, $73, $14, 0, $34, 0, $1,
0, $8, 0, 0, 0, $4d, $65, $73, $68, $46,
$61, $63, $65, $1, 0, $b, 0, 0, 0, $66,
$61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73,
$e, 0, $1, 0, $c, 0, 0, 0, $6e, $46,
$61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73,
$f, 0, $14, 0, $b, 0, $1f, 0, $1, 0,
$10, 0, 0, 0, $4d, $65, $73, $68, $56, $65,
$72, $74, $65, $78, $43, $6f, $6c, $6f, $72, $73,
$a, 0, $5, 0, $21, $b8, $30, $16, $42, $78,
$cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3,
$29, 0, $1, 0, $d, 0, 0, 0, $6e, $56,
$65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72,
$73, $14, 0, $34, 0, $1, 0, $c, 0, 0,
0, $49, $6e, $64, $65, $78, $65, $64, $43, $6f,
$6c, $6f, $72, $1, 0, $c, 0, 0, 0, $76,
$65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72,
$73, $e, 0, $1, 0, $d, 0, 0, 0, $6e,
$56, $65, $72, $74, $65, $78, $43, $6f, $6c, $6f,
$72, $73, $f, 0, $14, 0, $b, 0, $1f, 0,
$1, 0, $4, 0, 0, 0, $4d, $65, $73, $68,
$a, 0, $5, 0, $44, $ab, $82, $3d, $da, $62,
$cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33,
$29, 0, $1, 0, $9, 0, 0, 0, $6e, $56,
$65, $72, $74, $69, $63, $65, $73, $14, 0, $34,
0, $1, 0, $6, 0, 0, 0, $56, $65, $63,
$74, $6f, $72, $1, 0, $8, 0, 0, 0, $76,
$65, $72, $74, $69, $63, $65, $73, $e, 0, $1,
0, $9, 0, 0, 0, $6e, $56, $65, $72, $74,
$69, $63, $65, $73, $f, 0, $14, 0, $29, 0,
$1, 0, $6, 0, 0, 0, $6e, $46, $61, $63,
$65, $73, $14, 0, $34, 0, $1, 0, $8, 0,
0, 0, $4d, $65, $73, $68, $46, $61, $63, $65,
$1, 0, $5, 0, 0, 0, $66, $61, $63, $65,
$73, $e, 0, $1, 0, $6, 0, 0, 0, $6e,
$46, $61, $63, $65, $73, $f, 0, $14, 0, $e,
0, $12, 0, $12, 0, $12, 0, $f, 0, $b,
0, $1f, 0, $1, 0, $14, 0, 0, 0, $46,
$72, $61, $6d, $65, $54, $72, $61, $6e, $73, $66,
$6f, $72, $6d, $4d, $61, $74, $72, $69, $78, $a,
0, $5, 0, $41, $3f, $f2, $f6, $86, $76, $cf,
$11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1,
0, $9, 0, 0, 0, $4d, $61, $74, $72, $69,
$78, $34, $78, $34, $1, 0, $b, 0, 0, 0,
$66, $72, $61, $6d, $65, $4d, $61, $74, $72, $69,
$78, $14, 0, $b, 0, $1f, 0, $1, 0, $5,
0, 0, 0, $46, $72, $61, $6d, $65, $a, 0,
$5, 0, $46, $ab, $82, $3d, $da, $62, $cf, $11,
$ab, $39, 0, $20, $af, $71, $e4, $33, $e, 0,
$12, 0, $12, 0, $12, 0, $f, 0, $b, 0,
$1f, 0, $1, 0, $9, 0, 0, 0, $46, $6c,
$6f, $61, $74, $4b, $65, $79, $73, $a, 0, $5,
0, $a9, $46, $dd, $10, $5b, $77, $cf, $11, $8f,
$52, 0, $40, $33, $35, $94, $a3, $29, 0, $1,
0, $7, 0, 0, 0, $6e, $56, $61, $6c, $75,
$65, $73, $14, 0, $34, 0, $2a, 0, $1, 0,
$6, 0, 0, 0, $76, $61, $6c, $75, $65, $73,
$e, 0, $1, 0, $7, 0, 0, 0, $6e, $56,
$61, $6c, $75, $65, $73, $f, 0, $14, 0, $b,
0, $1f, 0, $1, 0, $e, 0, 0, 0, $54,
$69, $6d, $65, $64, $46, $6c, $6f, $61, $74, $4b,
$65, $79, $73, $a, 0, $5, 0, $80, $b1, $6,
$f4, $3b, $7b, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $29, 0, $1, 0, $4, 0, 0,
0, $74, $69, $6d, $65, $14, 0, $1, 0, $9,
0, 0, 0, $46, $6c, $6f, $61, $74, $4b, $65,
$79, $73, $1, 0, $6, 0, 0, 0, $74, $66,
$6b, $65, $79, $73, $14, 0, $b, 0, $1f, 0,
$1, 0, $c, 0, 0, 0, $41, $6e, $69, $6d,
$61, $74, $69, $6f, $6e, $4b, $65, $79, $a, 0,
$5, 0, $a8, $46, $dd, $10, $5b, $77, $cf, $11,
$8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0,
$1, 0, $7, 0, 0, 0, $6b, $65, $79, $54,
$79, $70, $65, $14, 0, $29, 0, $1, 0, $5,
0, 0, 0, $6e, $4b, $65, $79, $73, $14, 0,
$34, 0, $1, 0, $e, 0, 0, 0, $54, $69,
$6d, $65, $64, $46, $6c, $6f, $61, $74, $4b, $65,
$79, $73, $1, 0, $4, 0, 0, 0, $6b, $65,
$79, $73, $e, 0, $1, 0, $5, 0, 0, 0,
$6e, $4b, $65, $79, $73, $f, 0, $14, 0, $b,
0, $1f, 0, $1, 0, $10, 0, 0, 0, $41,
$6e, $69, $6d, $61, $74, $69, $6f, $6e, $4f, $70,
$74, $69, $6f, $6e, $73, $a, 0, $5, 0, $c0,
$56, $bf, $e2, $f, $84, $cf, $11, $8f, $52, 0,
$40, $33, $35, $94, $a3, $29, 0, $1, 0, $a,
0, 0, 0, $6f, $70, $65, $6e, $63, $6c, $6f,
$73, $65, $64, $14, 0, $29, 0, $1, 0, $f,
0, 0, 0, $70, $6f, $73, $69, $74, $69, $6f,
$6e, $71, $75, $61, $6c, $69, $74, $79, $14, 0,
$b, 0, $1f, 0, $1, 0, $9, 0, 0, 0,
$41, $6e, $69, $6d, $61, $74, $69, $6f, $6e, $a,
0, $5, 0, $4f, $ab, $82, $3d, $da, $62, $cf,
$11, $ab, $39, 0, $20, $af, $71, $e4, $33, $e,
0, $12, 0, $12, 0, $12, 0, $f, 0, $b,
0, $1f, 0, $1, 0, $c, 0, 0, 0, $41,
$6e, $69, $6d, $61, $74, $69, $6f, $6e, $53, $65,
$74, $a, 0, $5, 0, $50, $ab, $82, $3d, $da,
$62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4,
$33, $e, 0, $1, 0, $9, 0, 0, 0, $41,
$6e, $69, $6d, $61, $74, $69, $6f, $6e, $f, 0,
$b, 0, $1f, 0, $1, 0, $a, 0, 0, 0,
$49, $6e, $6c, $69, $6e, $65, $44, $61, $74, $61,
$a, 0, $5, 0, $a0, $ee, $23, $3a, $b1, $94,
$d0, $11, $ab, $39, 0, $20, $af, $71, $e4, $33,
$e, 0, $1, 0, $6, 0, 0, 0, $42, $49,
$4e, $41, $52, $59, $f, 0, $b, 0, $1f, 0,
$1, 0, $3, 0, 0, 0, $55, $72, $6c, $a,
0, $5, 0, $a1, $ee, $23, $3a, $b1, $94, $d0,
$11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29,
0, $1, 0, $5, 0, 0, 0, $6e, $55, $72,
$6c, $73, $14, 0, $34, 0, $31, 0, $1, 0,
$4, 0, 0, 0, $75, $72, $6c, $73, $e, 0,
$1, 0, $5, 0, 0, 0, $6e, $55, $72, $6c,
$73, $f, 0, $14, 0, $b, 0, $1f, 0, $1,
0, $f, 0, 0, 0, $50, $72, $6f, $67, $72,
$65, $73, $73, $69, $76, $65, $4d, $65, $73, $68,
$a, 0, $5, 0, $60, $c3, $63, $8a, $7d, $99,
$d0, $11, $94, $1c, 0, $80, $c8, $c, $fa, $7b,
$e, 0, $1, 0, $3, 0, 0, 0, $55, $72,
$6c, $13, 0, $1, 0, $a, 0, 0, 0, $49,
$6e, $6c, $69, $6e, $65, $44, $61, $74, $61, $f,
0, $b, 0, $1f, 0, $1, 0, $4, 0, 0,
0, $47, $75, $69, $64, $a, 0, $5, 0, $e0,
$90, $27, $a4, $10, $78, $cf, $11, $8f, $52, 0,
$40, $33, $35, $94, $a3, $29, 0, $1, 0, $5,
0, 0, 0, $64, $61, $74, $61, $31, $14, 0,
$28, 0, $1, 0, $5, 0, 0, 0, $64, $61,
$74, $61, $32, $14, 0, $28, 0, $1, 0, $5,
0, 0, 0, $64, $61, $74, $61, $33, $14, 0,
$34, 0, $2d, 0, $1, 0, $5, 0, 0, 0,
$64, $61, $74, $61, $34, $e, 0, $3, 0, $8,
0, 0, 0, $f, 0, $14, 0, $b, 0, $1f,
0, $1, 0, $e, 0, 0, 0, $53, $74, $72,
$69, $6e, $67, $50, $72, $6f, $70, $65, $72, $74,
$79, $a, 0, $5, 0, $e0, $21, $f, $7f, $e1,
$bf, $d1, $11, $82, $c0, 0, $a0, $c9, $69, $72,
$71, $31, 0, $1, 0, $3, 0, 0, 0, $6b,
$65, $79, $14, 0, $31, 0, $1, 0, $5, 0,
0, 0, $76, $61, $6c, $75, $65, $14, 0, $b,
0, $1f, 0, $1, 0, $b, 0, 0, 0, $50,
$72, $6f, $70, $65, $72, $74, $79, $42, $61, $67,
$a, 0, $5, 0, $e1, $21, $f, $7f, $e1, $bf,
$d1, $11, $82, $c0, 0, $a0, $c9, $69, $72, $71,
$e, 0, $1, 0, $e, 0, 0, 0, $53, $74,
$72, $69, $6e, $67, $50, $72, $6f, $70, $65, $72,
$74, $79, $f, 0, $b, 0, $1f, 0, $1, 0,
$e, 0, 0, 0, $45, $78, $74, $65, $72, $6e,
$61, $6c, $56, $69, $73, $75, $61, $6c, $a, 0,
$5, 0, $a0, $6a, $11, $98, $ba, $bd, $d1, $11,
$82, $c0, 0, $a0, $c9, $69, $72, $71, $1, 0,
$4, 0, 0, 0, $47, $75, $69, $64, $1, 0,
$12, 0, 0, 0, $67, $75, $69, $64, $45, $78,
$74, $65, $72, $6e, $61, $6c, $56, $69, $73, $75,
$61, $6c, $14, 0, $e, 0, $12, 0, $12, 0,
$12, 0, $f, 0, $b, 0);
 
//---------------
 
//Direct3DRM file
(*==========================================================================;
*
* Copyright (C) 1994-1997 Microsoft Corporation. All Rights Reserved.
*
* Files: D3DRMDef.h D3DRMObj.h D3DRM.h D3DRMWin.h RMXFGUID.h RMXFTmpl.h
* Content: Direct3D Retained Mode include files
*
* DirectX 7.0 Delphi adaptation by Erik Unger
*
* Modified: 10-Sep-2000
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: DelphiDirectX@next-reality.com
*
*
***************************************************************************)
 
var
D3DRMDLL : HMODULE = 0;
 
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: d3drmdef.h
5690,64 → 9288,37
*
***************************************************************************)
 
{ TD3DRMVector4D structure }
 
type
PD3DRMVector4D = ^TD3DRMVector4D;
TD3DRMVector4D = record
TD3DRMVector4D = packed record
x, y, z, w: TD3DValue;
end;
 
D3DRMVECTOR4D = TD3DRMVector4D;
LPD3DRMVECTOR4D = PD3DRMVector4D;
 
{ TD3DRMMatrix4D structure }
 
PD3DRMMatrix4D = ^TD3DRMMatrix4D;
TD3DRMMatrix4D = array[0..3, 0..3] of TD3DValue;
D3DRMMATRIX4D = TD3DRMMatrix4D;
 
{ TD3DRMQuaternion structure }
 
PD3DRMQuaternion = ^TD3DRMQuaternion;
TD3DRMQuaternion = record
TD3DRMQuaternion = packed record
s: TD3DValue;
v: TD3DVector;
end;
 
D3DRMQUATERNION = TD3DRMQuaternion;
LPD3DRMQUATERNION = PD3DRMQUATERNION;
 
{ TD3DRMRay structure }
 
PD3DRMRay = ^TD3DRMRay;
TD3DRMRay = record
TD3DRMRay = packed record
dvDir: TD3DVector;
dvPos: TD3DVector;
end;
 
D3DRMRAY = TD3DRMRay;
LPD3DRMRAY = PD3DRMRay;
 
{ TD3DRMBox structure }
 
PD3DRMBox = ^TD3DRMBox;
TD3DRMBox = record
TD3DRMBox = packed record
min, max: TD3DVector;
end;
 
D3DRMBOX = TD3DRMBox;
LPD3DRMBOX = PD3DRMBox;
TD3DRMWrapCallback = procedure (var lpD3DVector: TD3DVector;
var lpU, lpV: Integer; var lpD3DRMVA, lpD3DRMVB: TD3DVector; lpArg:
Pointer); stdcall; // unused ?
 
{ TD3DRMWrapCallback }
 
TD3DRMWrapCallback = procedure(var lpD3DVector: TD3DVector; var lpU: Integer;
var lpV: Integer; var lpD3DRMVA: TD3DVector; lpD3DRMVB: TD3DVector;
lpArg: Pointer); stdcall;
 
D3DRMWRAPCALLBACK = TD3DRMWrapCallback;
 
{ TD3DRMLightType }
 
PD3DRMLightType = ^TD3DRMLightType; // is it 16 or 32 bit ?
TD3DRMLightType = (
D3DRMLIGHT_AMBIENT,
D3DRMLIGHT_POINT,
5756,13 → 9327,9
D3DRMLIGHT_PARALLELPOINT
);
 
D3DRMLIGHTTYPE = TD3DRMLightType;
PD3DRMShadeMode = ^TD3DRMShadeMode;
TD3DRMShadeMode = WORD;
 
{ TD3DRMShadeMode }
 
TD3DRMShadeMode = Word;
D3DRMSHADEMODE = TD3DRMShadeMode;
 
const
D3DRMSHADE_FLAT = 0;
D3DRMSHADE_GOURAUD = 1;
5770,11 → 9337,9
D3DRMSHADE_MASK = 7;
D3DRMSHADE_MAX = 8;
 
{ TD3DRMLightMode }
 
type
TD3DRMLightMode = Word;
D3DRMLIGHTMODE = TD3DRMLightMode;
PD3DRMLightMode = ^TD3DRMLightMode;
TD3DRMLightMode = WORD;
 
const
D3DRMLIGHT_OFF = 0 * D3DRMSHADE_MAX;
5782,11 → 9347,9
D3DRMLIGHT_MASK = 7 * D3DRMSHADE_MAX;
D3DRMLIGHT_MAX = 8 * D3DRMSHADE_MAX;
 
{ TD3DRMFillMode }
 
type
TD3DRMFillMode = Word;
D3DRMFILLMODE = TD3DRMFillMode;
PD3DRMFillMode = ^TD3DRMFillMode;
TD3DRMFillMode = WORD;
 
const
D3DRMFILL_POINTS = 0 * D3DRMLIGHT_MAX;
5795,60 → 9358,59
D3DRMFILL_MASK = 7 * D3DRMLIGHT_MAX;
D3DRMFILL_MAX = 8 * D3DRMLIGHT_MAX;
 
{ TD3DRMRenderQuality }
 
type
PD3DRMRenderQuality = ^TD3DRMRenderQuality;
TD3DRMRenderQuality = DWORD;
D3DRMRENDERQUALITY = TD3DRMRenderQuality;
 
const
D3DRMRENDER_WIREFRAME = D3DRMSHADE_FLAT + D3DRMLIGHT_OFF + D3DRMFILL_WIREFRAME;
D3DRMRENDER_UNLITFLAT = D3DRMSHADE_FLAT + D3DRMLIGHT_OFF + D3DRMFILL_SOLID;
D3DRMRENDER_FLAT = D3DRMSHADE_FLAT + D3DRMLIGHT_ON + D3DRMFILL_SOLID;
D3DRMRENDER_GOURAUD = D3DRMSHADE_GOURAUD + D3DRMLIGHT_ON + D3DRMFILL_SOLID;
D3DRMRENDER_PHONG = D3DRMSHADE_PHONG + D3DRMLIGHT_ON + D3DRMFILL_SOLID;
D3DRMRENDER_WIREFRAME =
(D3DRMSHADE_FLAT + D3DRMLIGHT_OFF + D3DRMFILL_WIREFRAME);
D3DRMRENDER_UNLITFLAT =
(D3DRMSHADE_FLAT + D3DRMLIGHT_OFF + D3DRMFILL_SOLID);
D3DRMRENDER_FLAT =
(D3DRMSHADE_FLAT + D3DRMLIGHT_ON + D3DRMFILL_SOLID);
D3DRMRENDER_GOURAUD =
(D3DRMSHADE_GOURAUD + D3DRMLIGHT_ON + D3DRMFILL_SOLID);
D3DRMRENDER_PHONG =
(D3DRMSHADE_PHONG + D3DRMLIGHT_ON + D3DRMFILL_SOLID);
 
D3DRMRENDERMODE_BLENDEDTRANSPARENCY = 1;
D3DRMRENDERMODE_SORTEDTRANSPARENCY = 2;
D3DRMRENDERMODE_LIGHTINMODELSPACE = 8;
D3DRMRENDERMODE_VIEWDEPENDENTSPECULAR = 16;
D3DRMRENDERMODE_DISABLESORTEDALPHAZWRITE = 32;
 
{ TD3DRMTextureQuality }
 
type
PD3DRMTextureQuality = ^TD3DRMTextureQuality;
TD3DRMTextureQuality = (
D3DRMTEXTURE_NEAREST, // choose nearest texel
D3DRMTEXTURE_LINEAR, // interpolate 4 texels
D3DRMTEXTURE_MIPNEAREST, // nearest texel in nearest mipmap
D3DRMTEXTURE_MIPLINEAR, // interpolate 2 texels from 2 mipmaps
D3DRMTEXTURE_LINEARMIPNEAREST, // interpolate 4 texels in nearest mipmap
D3DRMTEXTURE_LINEARMIPLINEAR // interpolate 8 texels from 2 mipmaps
D3DRMTEXTURE_NEAREST, (* choose nearest texel *)
D3DRMTEXTURE_LINEAR, (* interpolate 4 texels *)
D3DRMTEXTURE_MIPNEAREST, (* nearest texel in nearest mipmap *)
D3DRMTEXTURE_MIPLINEAR, (* interpolate 2 texels from 2 mipmaps *)
D3DRMTEXTURE_LINEARMIPNEAREST, (* interpolate 4 texels in nearest mipmap *)
D3DRMTEXTURE_LINEARMIPLINEAR (* interpolate 8 texels from 2 mipmaps *)
);
 
D3DRMTEXTUREQUALITY = TD3DRMTextureQuality;
 
{ Texture flags }
 
const
D3DRMTEXTURE_FORCERESIDENT = $00000001; // texture should be kept in video memory
D3DRMTEXTURE_STATIC = $00000002; // texture will not change
D3DRMTEXTURE_DOWNSAMPLEPOINT = $00000004; // point filtering should be used when downsampling
D3DRMTEXTURE_DOWNSAMPLEBILINEAR = $00000008; // bilinear filtering should be used when downsampling
D3DRMTEXTURE_DOWNSAMPLEREDUCEDEPTH = $00000010; // reduce bit depth when downsampling
D3DRMTEXTURE_DOWNSAMPLENONE = $00000020; // texture should never be downsampled
D3DRMTEXTURE_CHANGEDPIXELS = $00000040; // pixels have changed
D3DRMTEXTURE_CHANGEDPALETTE = $00000080; // palette has changed
D3DRMTEXTURE_INVALIDATEONLY = $00000100; // dirty regions are invalid
(*
* Texture flags
*)
D3DRMTEXTURE_FORCERESIDENT = $00000001; (* texture should be kept in video memory *)
D3DRMTEXTURE_STATIC = $00000002; (* texture will not change *)
D3DRMTEXTURE_DOWNSAMPLEPOINT = $00000004; (* point filtering should be used when downsampling *)
D3DRMTEXTURE_DOWNSAMPLEBILINEAR = $00000008; (* bilinear filtering should be used when downsampling *)
D3DRMTEXTURE_DOWNSAMPLEREDUCEDEPTH = $00000010; (* reduce bit depth when downsampling *)
D3DRMTEXTURE_DOWNSAMPLENONE = $00000020; (* texture should never be downsampled *)
D3DRMTEXTURE_CHANGEDPIXELS = $00000040; (* pixels have changed *)
D3DRMTEXTURE_CHANGEDPALETTE = $00000080; (* palette has changed *)
D3DRMTEXTURE_INVALIDATEONLY = $00000100; (* dirty regions are invalid *)
 
{ Shadow flags }
(*
* Shadow flags
*)
D3DRMSHADOW_TRUEALPHA = $00000001; (* shadow should render without artifacts when true alpha is on *)
 
const
D3DRMSHADOW_TRUEALPHA = $00000001; // shadow should render without artifacts when true alpha is on
 
{ TD3DRMCombineType }
 
type
PD3DRMCombineType = ^TD3DRMCombineType;
TD3DRMCombineType = (
D3DRMCOMBINE_REPLACE,
D3DRMCOMBINE_BEFORE,
5855,40 → 9417,26
D3DRMCOMBINE_AFTER
);
 
D3DRMCOMBINETYPE = TD3DRMCombineType;
 
{ TD3DRMColorModel }
 
PD3DRMColorModel = ^TD3DRMColorModel;
TD3DRMColorModel = TD3DColorModel;
D3DRMCOLORMODEL = TD3DRMColorModel;
 
{ TD3DRMPaletteFlags }
 
PD3DRMPaletteFlags = ^TD3DRMPaletteFlags;
TD3DRMPaletteFlags = (
D3DRMPALETTE_FREE, // renderer may use this entry freely
D3DRMPALETTE_READONLY, // fixed but may be used by renderer
D3DRMPALETTE_RESERVED // may not be used by renderer
D3DRMPALETTE_FREE, (* renderer may use this entry freely *)
D3DRMPALETTE_READONLY, (* fixed but may be used by renderer *)
D3DRMPALETTE_RESERVED (* may not be used by renderer *)
);
 
D3DRMPALETTEFLAGS = TD3DRMPaletteFlags;
 
{ TD3DRMPaletteEntry structure }
 
PD3DRMPaletteEntry = ^TD3DRMPaletteEntry;
TD3DRMPaletteEntry = record
red: Byte; // 0 .. 255
green: Byte; // 0 .. 255
blue: Byte; // 0 .. 255
flags: Byte; // one of TD3DRMPaletteFlags
TD3DRMPaletteEntry = packed record
red: Byte; (* 0 .. 255 *)
green: Byte; (* 0 .. 255 *)
blue: Byte; (* 0 .. 255 *)
flags: Byte; (* one of D3DRMPALETTEFLAGS *)
end;
 
D3DRMPALETTEENTRY = TD3DRMPaletteEntry;
LPD3DRMPALETTEENTRY = PD3DRMPaletteEntry;
 
{ TD3DRMImage structure }
 
PD3DRMImage = ^TD3DRMImage;
TD3DRMImage = record
TD3DRMImage = packed record
width, height: Integer; (* width and height in pixels *)
aspectx, aspecty: Integer; (* aspect ratio for non-square pixels *)
depth: Integer; (* bits per pixel *)
5902,10 → 9450,10
buffer2: Pointer; (* second rendering buffer for double
buffering, set to NULL for single
buffering. *)
red_mask: Longint;
green_mask: Longint;
blue_mask: Longint;
alpha_mask: Longint; (* if rgb is true, these are masks for
red_mask: DWORD;
green_mask: DWORD;
blue_mask: DWORD;
alpha_mask: DWORD; (* if rgb is true, these are masks for
the red, green and blue parts of a
pixel. Otherwise, these are masks
for the significant bits of the
5920,11 → 9468,7
elements. *)
end;
 
D3DRMIMAGE = TD3DRMImage;
LPD3DRMIMAGE = PD3DRMImage;
 
{ TD3DRMWrapType }
 
PD3DRMWrapType = ^TD3DRMWrapType;
TD3DRMWrapType = (
D3DRMWRAP_FLAT,
D3DRMWRAP_CYLINDER,
5934,31 → 9478,29
D3DRMWRAP_BOX
);
 
D3DRMWRAPTYPE = TD3DRMWrapType;
 
const
D3DRMWIREFRAME_CULL = 1; // cull backfaces
D3DRMWIREFRAME_HIDDENLINE = 2; // lines are obscured by closer objects
D3DRMWIREFRAME_CULL = 1; (* cull backfaces *)
D3DRMWIREFRAME_HIDDENLINE = 2; (* lines are obscured by closer objects *)
 
{ TD3DRMProjectionType }
 
type
(*
* Do not use righthanded perspective in Viewport2::SetProjection().
* Set up righthanded mode by using IDirect3DRM3::SetOptions().
*)
PD3DRMProjectionType = ^TD3DRMProjectionType;
TD3DRMProjectionType = (
D3DRMPROJECT_PERSPECTIVE,
D3DRMPROJECT_ORTHOGRAPHIC,
D3DRMPROJECT_RIGHTHANDPERSPECTIVE, // Only valid pre-DX6
D3DRMPROJECT_RIGHTHANDORTHOGRAPHIC // Only valid pre-DX6
D3DRMPROJECT_RIGHTHANDPERSPECTIVE, (* Only valid pre-DX6 *)
D3DRMPROJECT_RIGHTHANDORTHOGRAPHIC (* Only valid pre-DX6 *)
);
 
D3DRMPROJECTIONTYPE = TD3DRMProjectionType;
 
const
D3DRMOPTIONS_LEFTHANDED = $00000001; // Default
D3DRMOPTIONS_RIGHTHANDED = $00000002;
D3DRMOPTIONS_LEFTHANDED = 00000001; (* Default *)
D3DRMOPTIONS_RIGHTHANDED = 00000002;
 
{ TD3DRMXOFFormat }
 
type
PD3DRMXOFFormat = ^TD3DRMXOFFormat;
TD3DRMXOFFormat = (
D3DRMXOF_BINARY,
D3DRMXOF_COMPRESSED,
5965,13 → 9507,7
D3DRMXOF_TEXT
);
 
D3DRMXOFFORMAT = TD3DRMXOFFormat;
 
{ TD3DRMSaveOptions }
 
TD3DRMSaveOptions = DWORD;
D3DRMSAVEOPTIONS = TD3DRMSaveOptions;
 
const
D3DRMXOFSAVE_NORMALS = 1;
D3DRMXOFSAVE_TEXTURECOORDINATES = 2;
5981,28 → 9517,21
D3DRMXOFSAVE_TEMPLATES = 16;
D3DRMXOFSAVE_TEXTURETOPOLOGY = 32;
 
{ TD3DRMColorSource }
 
type
PD3DRMColorSource = ^TD3DRMColorSource;
TD3DRMColorSource = (
D3DRMCOLOR_FROMFACE,
D3DRMCOLOR_FROMVERTEX
);
 
D3DRMCOLORSOURCE = TD3DRMColorSource;
 
{ TD3DRMFrameConstraint }
 
PD3DRMFrameConstraint = ^TD3DRMFrameConstraint;
TD3DRMFrameConstraint = (
D3DRMCONSTRAIN_Z, // use only X and Y rotations
D3DRMCONSTRAIN_Y, // use only X and Z rotations
D3DRMCONSTRAIN_X // use only Y and Z rotations
D3DRMCONSTRAIN_Z, (* use only X and Y rotations *)
D3DRMCONSTRAIN_Y, (* use only X and Z rotations *)
D3DRMCONSTRAIN_X (* use only Y and Z rotations *)
);
 
D3DRMFRAMECONSTRAINT = TD3DRMFrameConstraint;
 
{ TD3DRMMaterialMode }
 
PD3DRMMaterialMode = ^TD3DRMMaterialMode;
TD3DRMMaterialMode = (
D3DRMMATERIAL_FROMMESH,
D3DRMMATERIAL_FROMPARENT,
6009,56 → 9538,39
D3DRMMATERIAL_FROMFRAME
);
 
D3DRMMATERIALMODE = TD3DRMMaterialMode;
 
{ TD3DRMFogMode }
 
PD3DRMFogMode = ^TD3DRMFogMode;
TD3DRMFogMode = (
D3DRMFOG_LINEAR, // linear between start and end
D3DRMFOG_EXPONENTIAL, // density * exp(-distance)
D3DRMFOG_EXPONENTIALSQUARED // density * exp(-distance*distance)
D3DRMFOG_LINEAR, (* linear between start and end *)
D3DRMFOG_EXPONENTIAL, (* density * exp(-distance) *)
D3DRMFOG_EXPONENTIALSQUARED (* density * exp(-distance*distance) *)
);
 
D3DRMFOGMODE = TD3DRMFogMode;
 
{ TD3DRMZBufferMode }
 
PD3DRMZBufferMode = ^TD3DRMZBufferMode;
TD3DRMZBufferMode = (
D3DRMZBUFFER_FROMPARENT, // default
D3DRMZBUFFER_ENABLE, // enable zbuffering
D3DRMZBUFFER_DISABLE // disable zbuffering
D3DRMZBUFFER_FROMPARENT, (* default *)
D3DRMZBUFFER_ENABLE, (* enable zbuffering *)
D3DRMZBUFFER_DISABLE (* disable zbuffering *)
);
 
D3DRMZBUFFERMODE = TD3DRMZBufferMode;
 
{ TD3DRMSortMode }
 
PD3DRMSortMode = ^TD3DRMSortMode;
TD3DRMSortMode = (
D3DRMSORT_FROMPARENT, // default
D3DRMSORT_NONE, // don't sort child frames
D3DRMSORT_FRONTTOBACK, // sort child frames front-to-back
D3DRMSORT_BACKTOFRONT // sort child frames back-to-front
D3DRMSORT_FROMPARENT, (* default *)
D3DRMSORT_NONE, (* don't sort child frames *)
D3DRMSORT_FRONTTOBACK, (* sort child frames front-to-back *)
D3DRMSORT_BACKTOFRONT (* sort child frames back-to-front *)
);
 
D3DRMSORTMODE = TD3DRMSortMode;
 
{ TD3DRMMaterialOverride structure }
 
PD3DRMMaterialOverride = ^TD3DRMMaterialOverride;
TD3DRMMaterialOverride = record
dwSize: DWORD; // Size of this structure
dwFlags: DWORD; // Indicate which fields are valid
dcDiffuse: TD3DColorValue; // RGBA
dcAmbient: TD3DColorValue; // RGB
dcEmissive: TD3DColorValue; // RGB
dcSpecular: TD3DColorValue; // RGB
TD3DRMMaterialOverride = packed record
dwSize : DWORD; (* Size of this structure *)
dwFlags : DWORD; (* Indicate which fields are valid *)
dcDiffuse : TD3DColorValue; (* RGBA *)
dcAmbient : TD3DColorValue; (* RGB *)
dcEmissive : TD3DColorValue; (* RGB *)
dcSpecular : TD3DColorValue; (* RGB *)
dvPower: TD3DValue;
lpD3DRMTex: IUnknown;
end;
 
D3DRMMATERIALOVERRIDE = TD3DRMMaterialOverride;
LPD3DRMMATERIALOVERRIDE = PD3DRMMaterialOverride;
 
const
D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAONLY = $00000001;
D3DRMMATERIALOVERRIDE_DIFFUSE_RGBONLY = $00000002;
6082,23 → 9594,27
D3DRMSTATECHANGE_RENDER = $000000020;
D3DRMSTATECHANGE_LIGHT = $000000040;
 
{ Values for flags in RM3::CreateDeviceFromSurface }
 
(*
* Values for flags in RM3::CreateDeviceFromSurface
*)
D3DRMDEVICE_NOZBUFFER = $00000001;
 
{ Values for flags in Object2::SetClientData }
 
(*
* Values for flags in Object2::SetClientData
*)
D3DRMCLIENTDATA_NONE = $00000001;
D3DRMCLIENTDATA_LOCALFREE = $00000002;
D3DRMCLIENTDATA_IUNKNOWN = $00000004;
 
{ Values for flags in Frame2::AddMoveCallback. }
 
(*
* Values for flags in Frame2::AddMoveCallback.
*)
D3DRMCALLBACK_PREORDER = 0;
D3DRMCALLBACK_POSTORDER = 1;
 
{ Values for flags in MeshBuilder2::RayPick. }
 
(*
* Values for flags in MeshBuilder2::RayPick.
*)
D3DRMRAYPICK_ONLYBOUNDINGBOXES = 1;
D3DRMRAYPICK_IGNOREFURTHERPRIMITIVES = 2;
D3DRMRAYPICK_INTERPOLATEUV = 4;
6105,37 → 9621,39
D3DRMRAYPICK_INTERPOLATECOLOR = 8;
D3DRMRAYPICK_INTERPOLATENORMAL = $10;
 
{ Values for flags in MeshBuilder3::AddFacesIndexed. }
 
(*
* Values for flags in MeshBuilder3::AddFacesIndexed.
*)
D3DRMADDFACES_VERTICESONLY = 1;
 
 
{ Values for flags in MeshBuilder2::GenerateNormals. }
 
(*
* Values for flags in MeshBuilder2::GenerateNormals.
*)
D3DRMGENERATENORMALS_PRECOMPACT = 1;
D3DRMGENERATENORMALS_USECREASEANGLE = 2;
 
{ Values for MeshBuilder3::GetParentMesh }
 
(*
* Values for MeshBuilder3::GetParentMesh
*)
D3DRMMESHBUILDER_DIRECTPARENT = 1;
D3DRMMESHBUILDER_ROOTMESH = 2;
 
{ Flags for MeshBuilder3::Enable }
(*
* Flags for MeshBuilder3::Enable
*)
D3DRMMESHBUILDER_RENDERENABLE = $00000001;
D3DRMMESHBUILDER_PICKENABLE = $00000002;
 
{ Flags for MeshBuilder3::AddMeshBuilder }
D3DRMADDMESHBUILDER_DONTCOPYAPPDATA = 1;
D3DRMADDMESHBUILDER_FLATTENSUBMESHES = 2;
D3DRMADDMESHBUILDER_NOSUBMESHES = 4;
 
{ Flags for Object2::GetAge when used with MeshBuilders }
(*
* Flags for Object2::GetAge when used with MeshBuilders
*)
D3DRMMESHBUILDERAGE_GEOMETRY = $00000001;
D3DRMMESHBUILDERAGE_MATERIALS = $00000002;
D3DRMMESHBUILDERAGE_TEXTURES = $00000004;
 
{ Format flags for MeshBuilder3::AddTriangles. }
 
(*
* Format flags for MeshBuilder3::AddTriangles.
*)
D3DRMFVF_TYPE = $00000001;
D3DRMFVF_NORMAL = $00000002;
D3DRMFVF_COLOR = $00000004;
6145,29 → 9663,31
D3DRMVERTEX_FAN = $00000002;
D3DRMVERTEX_LIST = $00000004;
 
{ Values for flags in Viewport2::Clear2 }
 
(*
* Values for flags in Viewport2::Clear2
*)
D3DRMCLEAR_TARGET = $00000001;
D3DRMCLEAR_ZBUFFER = $00000002;
D3DRMCLEAR_DIRTYRECTS = $00000004;
D3DRMCLEAR_ALL = D3DRMCLEAR_TARGET or D3DRMCLEAR_ZBUFFER or D3DRMCLEAR_DIRTYRECTS;
D3DRMCLEAR_ALL = (D3DRMCLEAR_TARGET or
D3DRMCLEAR_ZBUFFER or
D3DRMCLEAR_DIRTYRECTS);
 
{ Values for flags in Frame3::SetSceneFogMethod }
 
(*
* Values for flags in Frame3::SetSceneFogMethod
*)
D3DRMFOGMETHOD_VERTEX = $00000001;
D3DRMFOGMETHOD_TABLE = $00000002;
D3DRMFOGMETHOD_ANY = $00000004;
 
{ Values for flags in Frame3::SetTraversalOptions }
 
(*
* Values for flags in Frame3::SetTraversalOptions
*)
D3DRMFRAME_RENDERENABLE = $00000001;
D3DRMFRAME_PICKENABLE = $00000002;
 
{ TD3DRMAnimationOptions }
 
type
TD3DRMAnimationOptions = DWORD;
D3DRMANIMATIONOPTIONS = TD3DRMAnimationOptions;
 
const
D3DRMANIMATION_OPEN = $01;
6177,12 → 9697,8
D3DRMANIMATION_SCALEANDROTATION = $00000010;
D3DRMANIMATION_POSITION = $00000020;
 
{ TD3DRMInterpolationOptions }
 
type
TD3DRMInterpolationOptions = DWORD;
D3DRMINTERPOLATIONOPTIONS = TD3DRMInterpolationOptions;
 
const
D3DRMINTERPOLATION_OPEN = $01;
D3DRMINTERPOLATION_CLOSED = $02;
6192,11 → 9708,8
D3DRMINTERPOLATION_VERTEXCOLOR = $40;
D3DRMINTERPOLATION_SLERPNORMALS = $80;
 
{ TD3DRMLoadOptions }
 
type
TD3DRMLoadOptions = DWORD;
D3DRMLOADOPTIONS = TD3DRMLoadOptions;
 
const
D3DRMLOAD_FROMFILE = $00;
6215,30 → 9728,20
 
D3DRMLOAD_ASYNCHRONOUS = $400;
 
{ TD3DRMLoadReource }
 
type
PD3DRMLoadReource = ^TD3DRMLoadReource;
TD3DRMLoadReource = record
PD3DRMLoadResource = ^TD3DRMLoadResource;
TD3DRMLoadResource = packed record
hModule: HMODULE;
lpName: PChar;
lpType: PChar;
lpName: PAnsiChar;
lpType: PAnsiChar;
end;
 
D3DRMLOADRESOURCE = TD3DRMLoadReource;
LPD3DRMLOADRESOURCE = PD3DRMLoadReource;
 
{ TD3DRMLoadMemory }
 
PD3DRMLoadMemory = ^TD3DRMLoadMemory;
TD3DRMLoadMemory = record
TD3DRMLoadMemory = packed record
lpMemory: Pointer;
dSize: DWORD;
dwSize: DWORD;
end;
 
D3DRMLOADMEMORY = TD3DRMLoadMemory;
LPD3DRMLOADMEMORY = PD3DRMLoadMemory;
 
const
D3DRMPMESHSTATUS_VALID = $01;
D3DRMPMESHSTATUS_INTERRUPTED = $02;
6249,43 → 9752,32
D3DRMPMESHEVENT_BASEMESH = $01;
D3DRMPMESHEVENT_COMPLETE = $02;
 
{ TD3DRMPMeshLoadStatus }
 
type
PD3DRMPMeshLoadStatus = ^TD3DRMPMeshLoadStatus;
TD3DRMPMeshLoadStatus = record
dwSize: DWORD; // Size of this structure
dwPMeshSize: DWORD; // Total Size (bytes)
dwBaseMeshSize: DWORD; // Total Size of the Base Mesh
dwBytesLoaded: DWORD; // Total bytes loaded
dwVerticesLoaded: DWORD; // Number of vertices loaded
TD3DRMPMeshLoadStatus = packed record
dwSize, // Size of this structure
dwPMeshSize, // Total Size (bytes)
dwBaseMeshSize, // Total Size of the Base Mesh
dwBytesLoaded, // Total bytes loaded
dwVerticesLoaded, // Number of vertices loaded
dwFacesLoaded: DWORD; // Number of faces loaded
dwLoadResult: HResult; // Result of the load operation
dwFlags: DWORD;
end;
 
D3DRMPMESHLOADSTATUS = TD3DRMPMeshLoadStatus;
LPD3DRMPMESHLOADSTATUS = PD3DRMPMeshLoadStatus;
 
{ TD3DRMUserVisualReason }
 
PD3DRMUserVisualReason = ^TD3DRMUserVisualReason;
TD3DRMUserVisualReason = (
D3DRMUSERVISUAL_CANSEE,
D3DRMUSERVISUAL_RENDER
);
 
D3DRMUSERVISUALREASON = TD3DRMUserVisualReason;
 
{ TD3DRMAnimationKey }
 
PD3DRMAnimationKey = ^TD3DRMAnimationKey;
TD3DRMAnimationKey = record
TD3DRMAnimationKey = packed record
dwSize: DWORD;
dwKeyType: DWORD;
dvTime: TD3DValue;
dwID: DWORD;
 
case Integer of
case integer of
0: (dqRotateKey: TD3DRMQuaternion);
1: (dvScaleKey: TD3DVector);
2: (dvPositionKey: TD3DVector);
6292,31 → 9784,33
3: (dvK: array[0..3] of TD3DValue);
end;
 
D3DRMANIMATIONKEY = TD3DRMAnimationKey;
LPD3DRMANIMATIONKEY = PD3DRMAnimationKey;
procedure D3DRMAnimationGetRotateKey
(var rmKey: TD3DRMAnimationKey; var rmQuat: TD3DRMQuaternion);
 
procedure D3DRMAnimationGetRotateKey(const rmKey: TD3DRMAnimationKey; var rmQuat: TD3DRMQuaternion);
procedure D3DRMAnimationGetScaleKey(const rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
procedure D3DRMAnimationGetPositionKey(const rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
procedure D3DRMAnimationSetRotateKey(var rmKey: TD3DRMAnimationKey; const rmQuat: TD3DRMQuaternion);
procedure D3DRMAnimationSetScaleKey(var rmKey: TD3DRMAnimationKey; const dvVec: TD3DVector);
procedure D3DRMAnimationSetPositionKey(var rmKey: TD3DRMAnimationKey; const dvVec: TD3DVector);
procedure D3DRMAnimationGetScaleKey
(var rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
 
procedure D3DRMAnimationGetPositionKey
(var rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
 
procedure D3DRMAnimatioSetRotateKey
(var rmKey: TD3DRMAnimationKey; var rmQuat: TD3DRMQuaternion);
 
procedure D3DRMAnimationSetScaleKey
(var rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
 
procedure D3DRMAnimationSetPositionKey
(var rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
 
const
D3DRMANIMATION_ROTATEKEY = $01;
D3DRMANIMATION_SCALEKEY = $02;
D3DRMANIMATION_POSITIONKEY = $03;
D3DRMANIMATION_ROTATEKEY = 01;
D3DRMANIMATION_SCALEKEY = 02;
D3DRMANIMATION_POSITIONKEY = 03;
 
{ TD3DRMMapping }
 
type
TD3DRMMapping = DWORD;
D3DRMMAPPING = TD3DRMMapping;
 
{ TD3DRMMappingFlag }
 
PD3DRMMappingFlag = ^TD3DRMMappingFlag;
TD3DRMMappingFlag = DWORD;
D3DRMMAPPINGFLAG = TD3DRMMappingFlag;
 
const
D3DRMMAP_WRAPU = 1;
6323,11 → 9817,9
D3DRMMAP_WRAPV = 2;
D3DRMMAP_PERSPCORRECT = 4;
 
{ TD3DRMVertex }
 
type
PD3DRMVertex = ^TD3DRMVertex;
TD3DRMVertex = record
TD3DRMVertex = packed record
position: TD3DVector;
normal: TD3DVector;
tu, tv: TD3DValue;
6334,173 → 9826,197
color: TD3DColor;
end;
 
D3DRMVERTEX = TD3DRMVertex;
LPD3DRMVERTEX = PD3DRMVertex;
TD3DRMGroupIndex = LongInt; (* group indexes begin a 0 *)
 
{ TD3DRMGroupIndex }
 
TD3DRMGroupIndex = Longint;
D3DRMGROUPINDEX = TD3DRMGroupIndex; // group indexes begin a 0
 
const
D3DRMGROUP_ALLGROUPS = -1;
 
{ Create a color from three components in the range 0-1 inclusive. }
function D3DRMCreateColorRGB(red, green, blue: TD3DValue): TD3DColor; stdcall;
var
(*
* Create a color from three components in the range 0-1 inclusive.
*)
D3DRMCreateColorRGB : function (red, green, blue: TD3DValue) : TD3DColor;
stdcall;
 
{ Create a color from four components in the range 0-1 inclusive. }
function D3DRMCreateColorRGBA(red, green, blue, alpha: TD3DValue): TD3DColor; stdcall;
(*
* Create a color from four components in the range 0-1 inclusive.
*)
D3DRMCreateColorRGBA : function (red, green, blue, alpha: TD3DValue)
: TD3DColor; stdcall;
 
{ Get the red component of a color. }
function D3DRMColorGetRed(d3drmc: TD3DColor): TD3DValue; stdcall;
(*
* Get the red component of a color.
*)
D3DRMColorGetRed : function (d3drmc: TD3DColor) : TD3DValue; stdcall;
 
{ Get the green component of a color. }
function D3DRMColorGetGreen(d3drmc: TD3DColor): TD3DValue; stdcall;
(*
* Get the green component of a color.
*)
D3DRMColorGetGreen : function (d3drmc: TD3DColor) : TD3DValue; stdcall;
 
{ Get the blue component of a color. }
function D3DRMColorGetBlue(d3drmc: TD3DColor): TD3DValue; stdcall;
(*
* Get the blue component of a color.
*)
D3DRMColorGetBlue : function (d3drmc: TD3DColor) : TD3DValue; stdcall;
 
{ Get the alpha component of a color. }
function D3DRMColorGetAlpha(d3drmc: TD3DColor): TD3DValue; stdcall;
(*
* Get the alpha component of a color.
*)
D3DRMColorGetAlpha : function (d3drmc: TD3DColor) : TD3DValue; stdcall;
 
{ Add two vectors. Returns its first argument. }
function D3DRMVectorAdd(var d, s1, s2: TD3DVector): PD3DVector; stdcall;
(*
* Add two vectors. Returns its first argument.
*)
D3DRMVectorAdd : function (var d, s1, s2: TD3DVector) : PD3DVector; stdcall;
 
{ Subtract two vectors. Returns its first argument. }
function D3DRMVectorSubtract(var d, s1, s2: TD3DVector): PD3DVector; stdcall;
(*
* Subtract two vectors. Returns its first argument.
*)
D3DRMVectorSubtract : function (var d, s1, s2: TD3DVector) : PD3DVector;
stdcall;
 
{ Reflect a ray about a given normal. Returns its first argument. }
function D3DRMVectorReflect(var d, ray, norm: TD3DVector): PD3DVector; stdcall;
(*
* Reflect a ray about a given normal. Returns its first argument.
*)
D3DRMVectorReflect : function (var d, ray, norm: TD3DVector) : PD3DVector;
stdcall;
 
{ Calculate the vector cross product. Returns its first argument. }
function D3DRMVectorCrossProduct(var d, s1, s2: TD3DVector): PD3DVector; stdcall;
(*
* Calculate the vector cross product. Returns its first argument.
*)
D3DRMVectorCrossProduct : function (var d, s1, s2: TD3DVector) : PD3DVector;
stdcall;
 
{ Return the vector dot product. }
function D3DRMVectorDotProduct(var s1, s2: TD3DVector): TD3DValue; stdcall;
(*
* Return the vector dot product.
*)
D3DRMVectorDotProduct : function (var s1, s2: TD3DVector) : TD3DValue;
stdcall;
 
{ Scale a vector so that its modulus is 1. Returns its argument or
NULL if there was an error (e.g. a zero vector was passed). }
function D3DRMVectorNormalize(var lpv: TD3DVector): PD3DVector; stdcall;
(*
* Scale a vector so that its modulus is 1. Returns its argument or
* NULL if there was an error (e.g. a zero vector was passed).
*)
D3DRMVectorNormalize : function (var lpv: TD3DVector) : PD3DVector; stdcall;
 
{ Return the length of a vector (e.g. sqrt(x*x + y*y + z*z)). }
function D3DRMVectorModulus(var v: TD3DVector): TD3DValue; stdcall;
(*
* Return the length of a vector (e.g. sqrt(x*x + y*y + z*z)).
*)
D3DRMVectorModulus : function (var v: TD3DVector) : TD3DValue; stdcall;
 
{ Set the rotation part of a matrix to be a rotation of theta radians
around the given axis. }
function D3DRMVectorRotate(var r, v, axis: TD3DVector; theta: TD3DValue): PD3DVector; stdcall;
(*
* Set the rotation part of a matrix to be a rotation of theta radians
* around the given axis.
*)
D3DRMVectorRotate : function (var r, v, axis: TD3DVector; theta: TD3DValue) :
PD3DVector; stdcall;
 
{ Scale a vector uniformly in all three axes }
function D3DRMVectorScale( var d, s: TD3DVector; factor: TD3DValue): PD3DVector; stdcall;
(*
* Scale a vector uniformly in all three axes
*)
D3DRMVectorScale : function (var d, s: TD3DVector; factor: TD3DValue) :
PD3DVector; stdcall;
 
{ Return a random unit vector }
function D3DRMVectorRandom(var d: TD3DVector): PD3DVector; stdcall;
(*
* Return a random unit vector
*)
D3DRMVectorRandom : function (var d: TD3DVector) : PD3DVector; stdcall;
 
{ Returns a unit quaternion that represents a rotation of theta radians
around the given axis. }
function D3DRMQuaternionFromRotation(var quat: PD3DRMQuaternion;
(*
* Returns a unit quaternion that represents a rotation of theta radians
* around the given axis.
*)
 
D3DRMQuaternionFromRotation : function (var quat: TD3DRMQuaternion;
var v: TD3DVector; theta: TD3DValue): PD3DRMQuaternion; stdcall;
 
{ Calculate the product of two quaternions }
function D3DRMQuaternionMultiply(var q, a, b: TD3DRMQuaternion): PD3DRMQuaternion; stdcall;
(*
* Calculate the product of two quaternions
*)
D3DRMQuaternionMultiply : function (var q, a, b: TD3DRMQuaternion) :
PD3DRMQuaternion; stdcall;
 
{ Interpolate between two quaternions }
function D3DRMQuaternionSlerp(var q, a, b: TD3DRMQuaternion; alpha: TD3DValue): PD3DRMQuaternion; stdcall;
(*
* Interpolate between two quaternions
*)
D3DRMQuaternionSlerp : function (var q, a, b: TD3DRMQuaternion;
alpha: TD3DValue) : PD3DRMQuaternion; stdcall;
 
{ Calculate the matrix for the rotation that a unit quaternion represents }
procedure D3DRMMatrixFromQuaternion(dmMat: TD3DRMMatrix4D; var lpDqQuat: TD3DRMQuaternion); stdcall;
(*
* Calculate the matrix for the rotation that a unit quaternion represents
*)
D3DRMMatrixFromQuaternion : procedure (dmMat: TD3DRMMatrix4D; var lpDqQuat:
TD3DRMQuaternion); stdcall;
 
{ Calculate the quaternion that corresponds to a rotation matrix }
function D3DRMQuaternionFromMatrix(var lpQuat: TD3DRMQuaternion; Mat: TD3DRMMatrix4D): PD3DRMQuaternion;
(*
* Calculate the quaternion that corresponds to a rotation matrix
*)
D3DRMQuaternionFromMatrix : function (var lpQuat: TD3DRMQuaternion;
Mat: TD3DRMMatrix4D) : PD3DRMQuaternion; stdcall;
 
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: d3drm.h, d3drmobj.h, d3drmwin.h
* File: d3drmobj.h
* Content: Direct3DRM include file
*
***************************************************************************)
 
{ Direct3DRM Object classes }
(*
* Direct3DRM Object classes
*)
 
const
CLSID_CDirect3DRMDevice: TGUID = '{4FA3568E-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMViewport: TGUID = '{4FA3568F-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMFrame: TGUID = '{4FA35690-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMMesh: TGUID = '{4FA35691-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMMeshBuilder: TGUID = '{4FA35692-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMFace: TGUID = '{4FA35693-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMLight: TGUID = '{4FA35694-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMTexture: TGUID = '{4FA35695-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMWrap: TGUID = '{4FA35696-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMMaterial: TGUID = '{4FA35697-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMAnimation: TGUID = '{4FA35698-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMAnimationSet: TGUID = '{4FA35699-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMUserVisual: TGUID = '{4FA3569A-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMShadow: TGUID = '{4FA3569B-623F-11CF-AC4A-0000C03825A1}';
CLSID_CDirect3DRMViewportInterpolator: TGUID = '{0DE9EAA1-3B84-11D0-9B6D-0000C0781BC3}';
CLSID_CDirect3DRMFrameInterpolator: TGUID = '{0DE9EAA2-3B84-11D0-9B6D-0000C0781BC3}';
CLSID_CDirect3DRMMeshInterpolator: TGUID = '{0DE9EAA3-3B84-11D0-9B6D-0000C0781BC3}';
CLSID_CDirect3DRMLightInterpolator: TGUID = '{0DE9EAA6-3B84-11D0-9B6D-0000C0781BC3}';
CLSID_CDirect3DRMMaterialInterpolator: TGUID = '{0DE9EAA7-3B84-11D0-9B6D-0000C0781BC3}';
CLSID_CDirect3DRMTextureInterpolator: TGUID = '{0DE9EAA8-3B84-11D0-9B6D-0000C0781BC3}';
CLSID_CDirect3DRMProgressiveMesh: TGUID = '{4516EC40-8F20-11D0-9B6D-0000C0781BC3}';
CLSID_CDirect3DRMClippedVisual: TGUID = '{5434E72D-6D66-11D1-BB0B-0000F875865A}';
CLSID_CDirect3DRMDevice: TGUID =
(D1:$4fa3568e;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMViewport: TGUID =
(D1:$4fa3568f;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMFrame: TGUID =
(D1:$4fa35690;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMMesh: TGUID =
(D1:$4fa35691;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMMeshBuilder: TGUID =
(D1:$4fa35692;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMFace: TGUID =
(D1:$4fa35693;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMLight: TGUID =
(D1:$4fa35694;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMTexture: TGUID =
(D1:$4fa35695;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMWrap: TGUID =
(D1:$4fa35696;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMMaterial: TGUID =
(D1:$4fa35697;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMAnimation: TGUID =
(D1:$4fa35698;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMAnimationSet: TGUID =
(D1:$4fa35699;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMUserVisual: TGUID =
(D1:$4fa3569a;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMShadow: TGUID =
(D1:$4fa3569b;D2:$623f;D3:$11cf;D4:($ac,$4a,$00,$00,$c0,$38,$25,$a1));
CLSID_CDirect3DRMViewportInterpolator: TGUID =
(D1:$0de9eaa1;D2:$3b84;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
CLSID_CDirect3DRMFrameInterpolator: TGUID =
(D1:$0de9eaa2;D2:$3b84;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
CLSID_CDirect3DRMMeshInterpolator: TGUID =
(D1:$0de9eaa3;D2:$3b84;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
CLSID_CDirect3DRMLightInterpolator: TGUID =
(D1:$0de9eaa6;D2:$3b84;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
CLSID_CDirect3DRMMaterialInterpolator: TGUID =
(D1:$0de9eaa7;D2:$3b84;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
CLSID_CDirect3DRMTextureInterpolator: TGUID =
(D1:$0de9eaa8;D2:$3b84;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
CLSID_CDirect3DRMProgressiveMesh: TGUID =
(D1:$4516ec40;D2:$8f20;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
CLSID_CDirect3DRMClippedVisual: TGUID =
(D1:$5434e72d;D2:$6d66;D3:$11d1;D4:($bb,$0b,$00,$00,$f8,$75,$86,$5a));
 
{ Direct3DRM Object interfaces }
 
IID_IDirect3DRMObject: TGUID = '{EB16CB00-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMObject2: TGUID = '{4516EC7C-8F20-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRMDevice: TGUID = '{E9E19280-6E05-11CF-AC4A-0000C03825A1}';
IID_IDirect3DRMDevice2: TGUID = '{4516EC78-8F20-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRMDevice3: TGUID = '{549F498B-BFEB-11D1-8ED8-00A0C967A482}';
IID_IDirect3DRMViewport: TGUID = '{EB16CB02-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMViewport2: TGUID = '{4A1B1BE6-BFED-11D1-8ED8-00A0C967A482}';
IID_IDirect3DRMFrame: TGUID = '{EB16CB03-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMFrame2: TGUID = '{C3DFBD60-3988-11D0-9EC2-0000C0291AC3}';
IID_IDirect3DRMFrame3: TGUID = '{FF6B7F70-A40E-11D1-91F9-0000F8758E66}';
IID_IDirect3DRMVisual: TGUID = '{EB16CB04-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMMesh: TGUID = '{A3A80D01-6E12-11CF-AC4A-0000C03825A1}';
IID_IDirect3DRMMeshBuilder: TGUID = '{A3A80D02-6E12-11CF-AC4A-0000C03825A1}';
IID_IDirect3DRMMeshBuilder2: TGUID = '{4516EC77-8F20-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRMMeshBuilder3: TGUID = '{4516EC82-8F20-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRMFace: TGUID = '{EB16CB07-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMFace2: TGUID = '{4516EC81-8F20-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRMLight: TGUID = '{EB16CB08-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMTexture: TGUID = '{EB16CB09-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMTexture2: TGUID = '{120F30C0-1629-11D0-941C-0080C80CFA7B}';
IID_IDirect3DRMTexture3: TGUID = '{FF6B7F73-A40E-11D1-91F9-0000F8758E66}';
IID_IDirect3DRMWrap: TGUID = '{EB16CB0A-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMMaterial: TGUID = '{EB16CB0B-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMMaterial2: TGUID = '{FF6B7F75-A40E-11D1-91F9-0000F8758E66}';
IID_IDirect3DRMAnimation: TGUID = '{EB16CB0D-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMAnimation2: TGUID = '{FF6B7F77-A40E-11D1-91F9-0000F8758E66}';
IID_IDirect3DRMAnimationSet: TGUID = '{EB16CB0E-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMAnimationSet2: TGUID = '{FF6B7F79-A40E-11D1-91F9-0000F8758E66}';
IID_IDirect3DRMObjectArray: TGUID = '{242F6BC2-3849-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRMDeviceArray: TGUID = '{EB16CB10-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMViewportArray: TGUID = '{EB16CB11-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMFrameArray: TGUID = '{EB16CB12-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMVisualArray: TGUID = '{EB16CB13-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMLightArray: TGUID = '{EB16CB14-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMPickedArray: TGUID = '{EB16CB16-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMFaceArray: TGUID = '{EB16CB17-D271-11CE-AC48-0000C03825A1}';
IID_IDirect3DRMAnimationArray: TGUID = '{D5F1CAE0-4BD7-11D1-B974-0060083E45F3}';
IID_IDirect3DRMUserVisual: TGUID = '{59163DE0-6D43-11CF-AC4A-0000C03825A1}';
IID_IDirect3DRMShadow: TGUID = '{AF359780-6BA3-11CF-AC4A-0000C03825A1}';
IID_IDirect3DRMShadow2: TGUID = '{86B44E25-9C82-11D1-BB0B-00A0C981A0A6}';
IID_IDirect3DRMInterpolator: TGUID = '{242F6BC1-3849-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRMProgressiveMesh: TGUID = '{4516EC79-8F20-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRMPicked2Array: TGUID = '{4516EC7B-8F20-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRMClippedVisual: TGUID = '{5434E733-6D66-11D1-BB0B-0000F875865A}';
 
IID_IDirect3DRMWinDevice: TGUID = '{C5016CC0-D273-11CE-AC48-0000C03825A1}';
IID_IDirect3DRM: TGUID = '{2BC49361-8327-11CF-AC4A-0000C03825A1}';
IID_IDirect3DRM2: TGUID = '{4516ECC8-8F20-11D0-9B6D-0000C0781BC3}';
IID_IDirect3DRM3: TGUID = '{4516EC83-8F20-11D0-9B6D-0000C0781BC3}';
 
type
IDirect3DRMObject = interface;
IDirect3DRMObject2 = interface;
IDirect3DRMDevice = interface;
IDirect3DRMDevice2 = interface;
IDirect3DRMDevice3 = interface;
6523,94 → 10039,117
IDirect3DRMWrap = interface;
IDirect3DRMMaterial = interface;
IDirect3DRMMaterial2 = interface;
IDirect3DRMInterpolator = interface;
IDirect3DRMAnimation = interface;
IDirect3DRMAnimation2 = interface;
IDirect3DRMAnimationSet = interface;
IDirect3DRMAnimationSet2 = interface;
IDirect3DRMUserVisual = interface;
IDirect3DRMShadow = interface;
IDirect3DRMShadow2 = interface;
IDirect3DRMArray= interface;
IDirect3DRMObjectArray = interface;
IDirect3DRMDeviceArray = interface;
IDirect3DRMFaceArray = interface;
IDirect3DRMViewportArray = interface;
IDirect3DRMFrameArray = interface;
IDirect3DRMAnimationArray = interface;
IDirect3DRMVisualArray = interface;
IDirect3DRMLightArray = interface;
IDirect3DRMPickedArray = interface;
IDirect3DRMFaceArray = interface;
IDirect3DRMAnimationArray = interface;
IDirect3DRMUserVisual = interface;
IDirect3DRMShadow = interface;
IDirect3DRMShadow2 = interface;
IDirect3DRMInterpolator = interface;
IDirect3DRMProgressiveMesh = interface;
IDirect3DRMPicked2Array = interface;
IDirect3DRMLightArray = interface;
IDirect3DRMProgressiveMesh = interface;
IDirect3DRMClippedVisual = interface;
 
IDirect3DRMWinDevice = interface;
IDirect3DRM = interface;
IDirect3DRM2 = interface;
IDirect3DRM3 = interface;
(*
* Direct3DRM Object interfaces
*)
IID_IDirect3DRMObject = IDirect3DRMObject;
IID_IDirect3DRMDevice = IDirect3DRMDevice;
IID_IDirect3DRMDevice2 = IDirect3DRMDevice2;
IID_IDirect3DRMDevice3 = IDirect3DRMDevice3;
IID_IDirect3DRMViewport = IDirect3DRMViewport;
IID_IDirect3DRMViewport2 = IDirect3DRMViewport2;
IID_IDirect3DRMFrame = IDirect3DRMFrame;
IID_IDirect3DRMFrame2 = IDirect3DRMFrame2;
IID_IDirect3DRMFrame3 = IDirect3DRMFrame3;
IID_IDirect3DRMVisual = IDirect3DRMVisual;
IID_IDirect3DRMMesh = IDirect3DRMMesh;
IID_IDirect3DRMMeshBuilder = IDirect3DRMMeshBuilder;
IID_IDirect3DRMMeshBuilder2 = IDirect3DRMMeshBuilder2;
IID_IDirect3DRMMeshBuilder3 = IDirect3DRMMeshBuilder3;
IID_IDirect3DRMFace = IDirect3DRMFace;
IID_IDirect3DRMFace2 = IDirect3DRMFace2;
IID_IDirect3DRMLight = IDirect3DRMLight;
IID_IDirect3DRMTexture = IDirect3DRMTexture;
IID_IDirect3DRMTexture2 = IDirect3DRMTexture2;
IID_IDirect3DRMTexture3 = IDirect3DRMTexture3;
IID_IDirect3DRMWrap = IDirect3DRMWrap;
IID_IDirect3DRMMaterial = IDirect3DRMMaterial;
IID_IDirect3DRMMaterial2 = IDirect3DRMMaterial2;
IID_IDirect3DRMAnimation = IDirect3DRMAnimation;
IID_IDirect3DRMAnimation2 = IDirect3DRMAnimation2;
IID_IDirect3DRMAnimationSet = IDirect3DRMAnimationSet;
IID_IDirect3DRMAnimationSet2 = IDirect3DRMAnimationSet2;
IID_IDirect3DRMObjectArray = IDirect3DRMObjectArray;
IID_IDirect3DRMDeviceArray = IDirect3DRMDeviceArray;
IID_IDirect3DRMViewportArray = IDirect3DRMViewportArray;
IID_IDirect3DRMFrameArray = IDirect3DRMFrameArray;
IID_IDirect3DRMVisualArray = IDirect3DRMVisualArray;
IID_IDirect3DRMLightArray = IDirect3DRMLightArray;
IID_IDirect3DRMPickedArray = IDirect3DRMPickedArray;
IID_IDirect3DRMFaceArray = IDirect3DRMFaceArray;
IID_IDirect3DRMAnimationArray = IDirect3DRMAnimationArray;
IID_IDirect3DRMUserVisual = IDirect3DRMUserVisual;
IID_IDirect3DRMShadow = IDirect3DRMShadow;
IID_IDirect3DRMShadow2 = IDirect3DRMShadow2;
IID_IDirect3DRMInterpolator = IDirect3DRMInterpolator;
IID_IDirect3DRMProgressiveMesh = IDirect3DRMProgressiveMesh;
IID_IDirect3DRMPicked2Array = IDirect3DRMPicked2Array;
IID_IDirect3DRMClippedVisual = IDirect3DRMClippedVisual;
 
TD3DRMObjectCallback = procedure(obj: IDirect3DRMObject; arg: Pointer); cdecl;
D3DRMOBJECTCALLBACK = TD3DRMObjectCallback;
 
TD3DRMFrameMoveCallback = procedure(obj: IDirect3DRMFrame; arg: Pointer; delta: TD3DValue); cdecl;
D3DRMFRAMEMOVECALLBACK = TD3DRMFrameMoveCallback;
 
TD3DRMFrame3MoveCallback = procedure(obj: IDirect3DRMFrame3; arg: Pointer; delta: TD3DValue); cdecl;
D3DRMFRAME3MOVECALLBACK = TD3DRMFrame3MoveCallback;
 
TD3DRMUpdateCallback = procedure(obj: IDirect3DRMDevice; arg: Pointer;
iRectCount: DWORD; d3dRectUpdate: PD3DRect); cdecl;
D3DRMUPDATECALLBACK = TD3DRMUpdateCallback;
 
TD3DRMDevice3UpdateCallback = procedure(obj: IDirect3DRMDevice3; arg: Pointer;
iRectCount: DWORD; d3dRectUpdate: PD3DRect); cdecl;
D3DRMDEVICE3UPDATECALLBACK = TD3DRMDevice3UpdateCallback;
PIDirect3DRMFaceArray = ^IDirect3DRMFaceArray;
 
TD3DRMObjectCallback = procedure (lpD3DRMobj: IDirect3DRMObject;
lpArg: Pointer); cdecl;
TD3DRMFrameMoveCallback = procedure (lpD3DRMFrame: IDirect3DRMFrame;
lpArg: Pointer; delta: TD3DValue); cdecl;
TD3DRMFrame3MoveCallback = procedure (lpD3DRMFrame: IDirect3DRMFrame3;
lpArg: Pointer; delta: TD3DValue); cdecl;
TD3DRMUpdateCallback = procedure (lpobj: IDirect3DRMDevice; lpArg: Pointer;
iRectCount: Integer; const d3dRectUpdate: TD3DRect); cdecl;
TD3DRMDevice3UpdateCallback = procedure (lpobj: IDirect3DRMDevice3;
lpArg: Pointer; iRectCount: Integer; const d3dRectUpdate: TD3DRect);cdecl;
TD3DRMUserVisualCallback = function(lpD3DRMUV: IDirect3DRMUserVisual;
lpArg: Pointer; lpD3DRMUVreason: TD3DRMUserVisualReason;
lpD3DRMDev: IDirect3DRMDevice;
lpD3DRMview: IDirect3DRMViewport): Longint; cdecl;
D3DRMUSERVISUALCALLBACK = TD3DRMUserVisualCallback;
 
TD3DRMLoadTextureCallback = function(tex_name: PChar; arg: Pointer;
lpD3DRMview: IDirect3DRMViewport) : Integer; cdecl;
TD3DRMLoadTextureCallback = function (tex_name: PAnsiChar; lpArg: Pointer;
out lpD3DRMTex: IDirect3DRMTexture): HResult; cdecl;
D3DRMLOADTEXTURECALLBACK = TD3DRMLoadTextureCallback;
 
TD3DRMLoadTexture3Callback = function(tex_name: PChar; arg: Pointer;
TD3DRMLoadTexture3Callback = function (tex_name: PAnsiChar; lpArg: Pointer;
out lpD3DRMTex: IDirect3DRMTexture3): HResult; cdecl;
D3DRMLOADTEXTURE3CALLBACK = TD3DRMLoadTexture3Callback;
 
TD3DRMLoadCallback = procedure(lpObject: IDirect3DRMObject; const ObjectGuid: TGUID;
lpArg: Pointer); cdecl;
D3DRMLOADCALLBACK = TD3DRMLoadCallback;
 
TD3DRMLoadCallback = procedure (lpObject: IDirect3DRMObject;
const ObjectGuid: TGUID; lpArg: Pointer); cdecl;
TD3DRMDownSampleCallback = function(lpDirect3DRMTexture: IDirect3DRMTexture3;
pArg: Pointer; pDDSSrc, pDDSDst: IDirectDrawSurface): HResult; cdecl;
D3DRMDOWNSAMPLECALLBACK = TD3DRMDownSampleCallback;
 
pArg: pointer; pDDSSrc, pDDSDst: IDirectDrawSurface) : HResult; cdecl;
TD3DRMValidationCallback = function(lpDirect3DRMTexture: IDirect3DRMTexture3;
pArg: Pointer; dwFlags: DWORD; dwcRects: DWORD; pRects: PRect): HResult; cdecl;
D3DRMVALIDATIONCALLBACK = TD3DRMValidationCallback;
pArg: pointer; dwFlags, DWcRects: DWORD; const pRects: TRect) : HResult; cdecl;
 
{ TD3DRMPickDesc }
 
PD3DRMPickDesc = ^TD3DRMPickDesc;
TD3DRMPickDesc = record
ulFaceIdx: Longint;
lGroupIdx: Longint;
TD3DRMPickDesc = packed record
ulFaceIdx: DWORD;
lGroupIdx: LongInt;
vPosition: TD3DVector;
end;
 
D3DRMPICKDESC = TD3DRMPickDesc;
LPD3DRMPICKDESC = PD3DRMPickDesc;
 
{ TD3DRMPickDesc2 }
 
PD3DRMPickDesc2 = ^TD3DRMPickDesc2;
TD3DRMPickDesc2 = record
ulFaceIdx: Longint;
lGroupIdx: Longint;
TD3DRMPickDesc2 = packed record
ulFaceIdx: DWORD;
lGroupIdx: LongInt;
dvPosition: TD3DVector;
tu, tv: TD3DValue;
dvNormal: TD3DVector;
6617,13 → 10156,20
dcColor: TD3DColor;
end;
 
D3DRMPICKDESC2 = TD3DRMPickDesc2;
LPD3DRMPICKDESC2 = PD3DRMPickDesc2;
 
(*
* Base class
*)
{$IFDEF D2COM}
IDirect3DRMObject = class (IUnknown)
{$ELSE}
IDirect3DRMObject = interface(IUnknown)
['{EB16CB00-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMObject methods
function Clone(pUnkOuter: IUnknown; const riid: TGUID; out ppvObj): HResult; stdcall;
['{eb16cb00-d271-11ce-ac48-0000c03825a1}']
{$ENDIF}
(*
* The methods for IDirect3DRMObject
*)
function Clone (pUnkOuter: IUnknown; riid: TGUID;
var ppvObj: Pointer) : HResult; stdcall;
function AddDestroyCallback(lpCallback: TD3DRMObjectCallback;
lpArg: Pointer): HResult; stdcall;
function DeleteDestroyCallback(d3drmObjProc: TD3DRMObjectCallback;
6630,38 → 10176,23
lpArg: Pointer): HResult; stdcall;
function SetAppData(ulData: DWORD): HResult; stdcall;
function GetAppData: DWORD; stdcall;
function SetName(lpName: PChar): HResult; stdcall;
function GetName(var lpdwSize: DWORD; lpName: PChar): HResult; stdcall;
function GetClassName(var lpdwSize: DWORD; lpName: PChar): HResult; stdcall;
function SetName (lpName: PAnsiChar) : HResult; stdcall;
function GetName (var lpdwSize: DWORD; lpName: PAnsiChar) : HResult; stdcall;
function GetClassName (var lpdwSize: DWORD; lpName: PAnsiChar) : HResult; stdcall;
end;
 
IDirect3DRMObject2 = interface(IUnknown)
['{EB16CB00-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMObject2 methods
function AddDestroyCallback(lpCallback: TD3DRMObjectCallback; lpArg: Pointer): HResult; stdcall;
function Clone(pUnkOuter: IUnknown; const riid: TGUID;
out ppvObj): HResult; stdcall;
function DeleteDestroyCallback(d3drmObjProc: TD3DRMObjectCallback;
lpArg: Pointer): HResult; stdcall;
function GetClientData(dwID: DWORD; var lplpvData: Pointer): HResult; stdcall;
function GetDirect3DRM(out lplpDirect3DRM: IDirect3DRM): HResult; stdcall;
function GetName(var lpdwSize: DWORD; lpName: LPSTR): HResult; stdcall;
function SetClientData(dwID: DWORD; lplpvData: Pointer; dwFlags: DWORD): HResult; stdcall;
function SetName(lpName: PChar): HResult; stdcall;
function GetAge(dwFlags: DWORD; var pdwAge: DWORD): HResult; stdcall;
end;
 
IDirect3DRMVisual = interface(IDirect3DRMObject)
['{EB16CB04-D271-11CE-AC48-0000C03825A1}']
end;
 
IDirect3DRMDevice = interface(IDirect3DRMObject)
['{E9E19280-6E05-11CF-AC4A-0000C03825A1}']
// IDirect3DRMDevice methods
function Init(width, height: DWORD): HResult; stdcall;
['{e9e19280-6e05-11cf-ac4a-0000c03825a1}']
(*
* IDirect3DRMDevice methods
*)
function Init (width: LongInt; height: LongInt) : HResult; stdcall;
function InitFromD3D(lpD3D: IDirect3D; lpD3DIMDev: IDirect3DDevice): HResult; stdcall;
function InitFromClipper(lpDDClipper: IDirectDrawClipper;
const lpGUID: TGUID; width, height: DWORD): HResult; stdcall;
function InitFromClipper (lpDDClipper: IDirectDrawClipper; lpGUID: PGUID;
width: Integer; height: Integer) : HResult; stdcall;
function Update: HResult; stdcall;
function AddUpdateCallback(d3drmUpdateProc: TD3DRMUpdateCallback;
arg: Pointer): HResult; stdcall;
6687,36 → 10218,79
end;
 
IDirect3DRMDevice2 = interface(IDirect3DRMDevice)
['{4516EC78-8F20-11D0-9B6D-0000C0781BC3}']
// IDirect3DRMDevice2 methods
['{4516ec78-8f20-11d0-9b6d-0000c0781bc3}']
(*
* IDirect3DRMDevice2 methods
*)
function InitFromD3D2(lpD3D: IDirect3D2; lpD3DIMDev: IDirect3DDevice2): HResult; stdcall;
function InitFromSurface(const lpGUID: TGUID; lpDD: IDirectDraw; lpDDSBack: IDirectDrawSurface) : HResult; stdcall;
function SetRenderMode(dwFlags: DWORD ) : HResult; stdcall;
function GetRenderMode : DWORD; stdcall;
function GetDirect3DDevice2(out lplpD3DDevice: IDirect3DDevice2) : HResult; stdcall;
end;
 
IDirect3DRMDevice3 = interface (IDirect3DRMObject)
['{549f498b-bfeb-11d1-8ed8-00a0c967a482}']
(*
* IDirect3DRMDevice methods
*)
function Init (width: LongInt; height: LongInt) : HResult; stdcall;
function InitFromD3D (lpD3D: IDirect3D2; lpD3DIMDev: IDirect3DDevice2) : HResult; stdcall;
function InitFromClipper (lpDDClipper: IDirectDrawClipper; lpGUID: PGUID;
width: Integer; height: Integer) : HResult; stdcall;
function Update: HResult; stdcall;
function AddUpdateCallback (d3drmUpdateProc: TD3DRMDevice3UpdateCallback;
arg: Pointer) : HResult; stdcall;
function DeleteUpdateCallback (d3drmUpdateProc: TD3DRMDevice3UpdateCallback;
arg: Pointer) : HResult; stdcall;
function SetBufferCount (dwCount: DWORD) : HResult; stdcall;
function GetBufferCount: DWORD; stdcall;
function SetDither (bDither: BOOL) : HResult; stdcall;
function SetShades (ulShades: DWORD) : HResult; stdcall;
function SetQuality (rqQuality: TD3DRMRenderQuality) : HResult; stdcall;
function SetTextureQuality (tqTextureQuality: TD3DRMTextureQuality) : HResult; stdcall;
function GetViewports (out lplpViewports: IDirect3DRMViewportArray) : HResult; stdcall;
function GetDither: BOOL; stdcall;
function GetShades: DWORD; stdcall;
function GetHeight: DWORD; stdcall;
function GetWidth: DWORD; stdcall;
function GetTrianglesDrawn: DWORD; stdcall;
function GetWireframeOptions: DWORD; stdcall;
function GetQuality: TD3DRMRenderQuality; stdcall;
function GetColorModel: TD3DColorModel; stdcall;
function GetTextureQuality: TD3DRMTextureQuality; stdcall;
function GetDirect3DDevice (out lplpD3DDevice: IDirect3DDevice) : HResult; stdcall;
(*
* IDirect3DRMDevice2 methods
*)
function InitFromD3D2(lpD3D: IDirect3D2; lpD3DIMDev: IDirect3DDevice2) : HResult; stdcall;
function InitFromSurface(const lpGUID: TGUID; lpDD: IDirectDraw;
lpDDSBack: IDirectDrawSurface): HResult; stdcall;
function SetRenderMode(dwFlags: DWORD): HResult; stdcall;
function GetRenderMode: DWORD; stdcall;
function GetDirect3DDevice2(out lplpD3DDevice: IDirect3DDevice2): HResult; stdcall;
end;
(*
* IDirect3DRMDevice3 methods
*)
function FindPreferredTextureFormat (dwBitDepths, dwFlags: DWORD;
out lpDDPF: TDDPixelFormat) : HResult; stdcall;
function RenderStateChange (dwStateNum, dwVal, dwFlags: DWORD) : HResult; stdcall;
 
IDirect3DRMDevice3 = interface(IDirect3DRMDevice2)
['{549F498B-BFEB-11D1-8ED8-00A0C967A482}']
// IDirect3DRMDevice3 methods
function FindPreferredTextureFormat(dwBitDepths: DWORD; dwFlags: DWORD;
var lpDDPF: TDDPixelFormat): HResult; stdcall;
function RenderStateChange(drsType: TD3DRenderStateType; dwVal: DWORD;
dwFlags: DWORD): HResult; stdcall;
function LightStateChange(drsType: TD3DLightStateType; dwVal: DWORD;
dwFlags: DWORD): HResult; stdcall;
function GetStateChangeOptions(dwStateClass: DWORD; dwStateNum: DWORD;
function LightStateChange (drsType: TD3DLightStateType; // defined different in header and help
dwVal, dwFlags: DWORD) : HResult; stdcall;
function GetStateChangeOptions (dwStateClass, dwStateNum: DWORD;
var pdwFlags: DWORD): HResult; stdcall;
function SetStateChangeOptions(dwStateClass: DWORD; dwStateNum: DWORD;
dwFlags: DWORD): HResult; stdcall;
function SetStateChangeOptions ( dwStateClass, dwStateNum, dwFlags: DWORD) : HResult; stdcall;
end;
 
IDirect3DRMViewport = interface(IDirect3DRMObject)
['{EB16CB02-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMViewport methods
['{eb16cb02-d271-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMViewport methods
*)
function Init(lpD3DRMDevice: IDirect3DRMDevice;
lpD3DRMFrameCamera: IDirect3DRMFrame; xpos, ypos, width, height: DWORD): HResult; stdcall;
lpD3DRMFrameCamera: IDirect3DRMFrame; xpos, ypos,
width, height: DWORD) : HResult; stdcall;
function Clear: HResult; stdcall;
function Render(lpD3DRMFrame: IDirect3DRMFrame): HResult; stdcall;
function SetFront(rvFront: TD3DValue): HResult; stdcall;
6725,20 → 10299,20
function SetUniformScaling(bScale: BOOL): HResult; stdcall;
function SetCamera(lpCamera: IDirect3DRMFrame): HResult; stdcall;
function SetProjection(rptType: TD3DRMProjectionType): HResult; stdcall;
function Transform(var lprvDst: TD3DRMVector4D; const lprvSrc: TD3DVector): HResult; stdcall;
function InverseTransform(var lprvDst: TD3DVector;
var lprvSrc: TD3DRMVector4D): HResult; stdcall;
function Configure(lX, lY: Longint; dwWidth, dwHeight: DWORD): HResult; stdcall;
function Transform (out lprvDst: TD3DRMVector4D; const lprvSrc: TD3DVector) : HResult; stdcall;
function InverseTransform (out lprvDst: TD3DVector;
const lprvSrc: TD3DRMVector4D) : HResult; stdcall;
function Configure (lX, lY: LongInt; dwWidth, dwHeight: DWORD) : HResult; stdcall;
function ForceUpdate(dwX1, dwY1, dwX2, dwY2: DWORD): HResult; stdcall;
function SetPlane(rvLeft, rvRight, rvBottom, rvTop: TD3DValue): HResult; stdcall;
function GetCamera(out lpCamera: IDirect3DRMFrame): HResult; stdcall;
function GetDevice(out lpD3DRMDevice: IDirect3DRMDevice): HResult; stdcall;
function GetPlane(var lpd3dvLeft, lpd3dvRight, lpd3dvBottom,
lpd3dvTop: TD3DValue): HResult; stdcall;
function Pick(lX, lY: Longint; out lplpVisuals: IDirect3DRMPickedArray): HResult; stdcall;
function GetPlane (out lpd3dvLeft, lpd3dvRight, lpd3dvBottom, lpd3dvTop:
TD3DValue) : HResult; stdcall;
function Pick (lX, lY: LongInt; var lplpVisuals: IDirect3DRMPickedArray) : HResult; stdcall;
function GetUniformScaling: BOOL; stdcall;
function GetX: Longint; stdcall;
function GetY: Longint; stdcall;
function GetX: LongInt; stdcall;
function GetY: LongInt; stdcall;
function GetWidth: DWORD; stdcall;
function GetHeight: DWORD; stdcall;
function GetField: TD3DValue; stdcall;
6749,10 → 10323,13
end;
 
IDirect3DRMViewport2 = interface(IDirect3DRMObject)
['{4A1B1BE6-BFED-11D1-8ED8-00A0C967A482}']
// IDirect3DRMViewport2 methods
function Init(dec: IDirect3DRMDevice3; camera: IDirect3DRMFrame3;
xpos, ypos: DWORD; width, height: DWORD): HResult; stdcall;
['{4a1b1be6-bfed-11d1-8ed8-00a0c967a482}']
(*
* IDirect3DRMViewport2 methods
*)
function Init (lpD3DRMDevice: IDirect3DRMDevice3;
lpD3DRMFrameCamera: IDirect3DRMFrame3; xpos, ypos,
width, height: DWORD) : HResult; stdcall;
function Clear(dwFlags: DWORD): HResult; stdcall;
function Render(lpD3DRMFrame: IDirect3DRMFrame3): HResult; stdcall;
function SetFront(rvFront: TD3DValue): HResult; stdcall;
6761,20 → 10338,20
function SetUniformScaling(bScale: BOOL): HResult; stdcall;
function SetCamera(lpCamera: IDirect3DRMFrame3): HResult; stdcall;
function SetProjection(rptType: TD3DRMProjectionType): HResult; stdcall;
function Transform(var lprvDst: TD3DRMVector4D; const lprvSrc: TD3DVector): HResult; stdcall;
function InverseTransform(var lprvDst: TD3DVector;
function Transform (out lprvDst: TD3DRMVector4D; const lprvSrc: TD3DVector) : HResult; stdcall;
function InverseTransform (out lprvDst: TD3DVector;
const lprvSrc: TD3DRMVector4D): HResult; stdcall;
function Configure(lX, lY: Longint; dwWidth, dwHeight: DWORD): HResult; stdcall;
function Configure (lX, lY: LongInt; dwWidth, dwHeight: DWORD) : HResult; stdcall;
function ForceUpdate(dwX1, dwY1, dwX2, dwY2: DWORD): HResult; stdcall;
function SetPlane(rvLeft, rvRight, rvBottom, rvTop: TD3DValue): HResult; stdcall;
function GetCamera(out lpCamera: IDirect3DRMFrame3): HResult; stdcall;
function GetDevice(out lpD3DRMDevice: IDirect3DRMDevice3): HResult; stdcall;
function GetPlane(var lpd3dvLeft, lpd3dvRight, lpd3dvBottom,
lpd3dvTop: TD3DValue): HResult; stdcall;
function Pick(lX, lY: Longint; out lplpVisuals: IDirect3DRMPickedArray): HResult; stdcall;
function GetPlane (out lpd3dvLeft, lpd3dvRight, lpd3dvBottom, lpd3dvTop:
TD3DValue) : HResult; stdcall;
function Pick (lX, lY: LongInt; var lplpVisuals: IDirect3DRMPickedArray) : HResult; stdcall;
function GetUniformScaling: BOOL; stdcall;
function GetX: Longint; stdcall;
function GetY: Longint; stdcall;
function GetX: LongInt; stdcall;
function GetY: LongInt; stdcall;
function GetWidth: DWORD; stdcall;
function GetHeight: DWORD; stdcall;
function GetField: TD3DValue; stdcall;
6781,16 → 10358,18
function GetBack: TD3DValue; stdcall;
function GetFront: TD3DValue; stdcall;
function GetProjection: TD3DRMProjectionType; stdcall;
function GetDirect3DViewport(out lplpD3DViewport: IDirect3DViewport): HResult; stdcall;
function TransformVectors(dwNumVectors: DWORD; var lpDstVectors: TD3DRMVector4D;
const lpSrcVectors: TD3DVector): HResult; stdcall;
function InverseTransformVectors(dwNumVectors: DWORD; var lpDstVectors: TD3DVector;
const lpSrcVectors: TD3DRMVector4D): HResult; stdcall;
function GetDirect3DViewport (var lplpD3DViewport: IDirect3DViewport) : HResult; stdcall;
function TransformVectors (dwNumVectors: DWORD; out lpDstVectors:
TD3DRMVector4D; const lpSrcVectors: TD3DVector) : HResult; stdcall;
function InverseTransformVectors (dwNumVectors: DWORD; out lpDstVectors:
TD3DRMVector4D; const lpSrcVectors: TD3DVector) : HResult; stdcall;
end;
 
IDirect3DRMFrame = interface(IDirect3DRMVisual)
['{EB16CB03-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMFrame methods
['{eb16cb03-d271-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMFrame methods
*)
function AddChild(lpD3DRMFrameChild: IDirect3DRMFrame): HResult; stdcall;
function AddLight(lpD3DRMLight: IDirect3DRMLight): HResult; stdcall;
function AddMoveCallback(d3drmFMC: TD3DRMFrameMoveCallback;
6797,10 → 10376,9
lpArg: Pointer): HResult; stdcall;
function AddTransform(rctCombine: TD3DRMCombineType;
rmMatrix: TD3DRMMatrix4D): HResult; stdcall;
function AddTranslation(rctCombine: TD3DRMCombineType; rvX, rvY,
rvZ: TD3DValue): HResult; stdcall;
function AddScale(rctCombine: TD3DRMCombineType; rvX, rvY,
rvZ: TD3DValue): HResult; stdcall;
function AddTranslation (rctCombine: TD3DRMCombineType; rvX, rvY, rvZ:
TD3DValue) : HResult; stdcall;
function AddScale (rctCombine: TD3DRMCombineType; rvX, rvY, rvZ: TD3DValue) : HResult; stdcall;
function AddRotation(rctCombine: TD3DRMCombineType; rvX, rvY, rvZ,
rvTheta: TD3DValue): HResult; stdcall;
function AddVisual(lpD3DRMVisual: IDirect3DRMVisual): HResult; stdcall;
6809,20 → 10387,20
function GetLights(out lplpLights: IDirect3DRMLightArray): HResult; stdcall;
function GetMaterialMode: TD3DRMMaterialMode; stdcall;
function GetParent(out lplpParent: IDirect3DRMFrame): HResult; stdcall;
function GetPosition(lpRef: IDirect3DRMFrame; var lprvPos: TD3DVector): HResult; stdcall;
function GetRotation(lpRef: IDirect3DRMFrame; var lprvAxis: TD3DVector;
var lprvTheta: TD3DValue): HResult; stdcall;
function GetPosition (lpRef: IDirect3DRMFrame; out lprvPos: TD3DVector) : HResult; stdcall;
function GetRotation (lpRef: IDirect3DRMFrame; out lprvAxis: TD3DVector;
out lprvTheta: TD3DValue) : HResult; stdcall;
function GetScene(out lplpRoot: IDirect3DRMFrame): HResult; stdcall;
function GetSortMode: TD3DRMSortMode; stdcall;
function GetTexture(out lplpTexture: IDirect3DRMTexture): HResult; stdcall;
function GetTransform(var rmMatrix: TD3DRMMatrix4D): HResult; stdcall;
function GetTransform (out rmMatrix: TD3DRMMatrix4D) : HResult; stdcall;
function GetVelocity(lpRef: IDirect3DRMFrame; var lprvVel: TD3DVector;
fRotVel: BOOL): HResult; stdcall;
function GetOrientation(lpRef: IDirect3DRMFrame; var lprvDir: TD3DVector;
var lprvUp: TD3DVector): HResult; stdcall;
function GetVisuals(out lplpVisuals: IDirect3DRMVisualArray): HResult; stdcall;
function GetTextureTopology(var lpU, lpV: BOOL): HResult; stdcall;
function InverseTransform(var lprvDst, lprvSrc: TD3DVector): HResult; stdcall;
function GetTextureTopology (out lpU, lpV: BOOL) : HResult; stdcall;
function InverseTransform (out lprvDst: TD3DVector; const lprvSrc: TD3DVector) : HResult; stdcall;
function Load(lpvObjSource: Pointer; lpvObjID: Pointer;
d3drmLOFlags: TD3DRMLoadOptions; d3drmLoadTextureProc:
TD3DRMLoadTextureCallback; lpArgLTP: Pointer): HResult; stdcall;
6839,7 → 10417,7
function GetSceneFogColor: TD3DColor; stdcall;
function GetSceneFogEnable: BOOL; stdcall;
function GetSceneFogMode: TD3DRMFogMode; stdcall;
function GetSceneFogParams(var lprvStart, lprvEnd, lprvDensity: TD3DValue): HResult; stdcall;
function GetSceneFogParams (out lprvStart, lprvEnd, lprvDensity: TD3DValue) : HResult; stdcall;
function SetSceneBackground(rcColor: TD3DColor): HResult; stdcall;
function SetSceneBackgroundRGB(rvRed, rvGreen, rvBlue: TD3DValue): HResult; stdcall;
function SetSceneBackgroundDepth(lpImage: IDirectDrawSurface): HResult; stdcall;
6863,34 → 10441,41
function SetVelocity(lpRef: IDirect3DRMFrame; rvX, rvY, rvZ: TD3DValue;
fRotVel: BOOL): HResult; stdcall;
function SetZbufferMode(d3drmZBM: TD3DRMZBufferMode): HResult; stdcall;
function Transform(var lpd3dVDst, lpd3dVSrc: TD3DVector): HResult; stdcall;
function Transform (out lpd3dVDst: TD3DVector; const lpd3dVSrc: TD3DVector) : HResult; stdcall;
end;
 
IDirect3DRMFrame2 = interface(IDirect3DRMFrame)
['{C3DFBD60-3988-11D0-9EC2-0000C0291AC3}']
// IDirect3DRMFrame2 methods
['{c3dfbd60-3988-11d0-9ec2-0000c0291ac3}']
(*
* IDirect3DRMFrame2 methods
*)
function AddMoveCallback2(d3drmFMC: TD3DRMFrameMoveCallback; lpArg:
Pointer; dwFlags: DWORD): HResult; stdcall;
function GetBox(var lpD3DRMBox: TD3DRMBox): HResult; stdcall;
function GetBoxEnable: BOOL; stdcall;
function GetAxes(var dir, up: TD3DVector): HResult; stdcall;
function GetBox (out lpTD3DRMBox: TD3DRMBox) : HResult; stdcall;
function GetBoxEnable : boolean; stdcall;
function GetAxes (out dir, up: TD3DVector) : HResult; stdcall;
function GetMaterial(out lplpMaterial: IDirect3DRMMaterial): HResult; stdcall;
function GetInheritAxes: BOOL; stdcall;
function GetHierarchyBox(var lpD3DRMBox: TD3DRMBox): HResult; stdcall;
function SetBox(const lpD3DRMBox: TD3DRMBox): HResult; stdcall;
function GetInheritAxes : boolean; stdcall;
function GetHierarchyBox (out lpTD3DRMBox: TD3DRMBox) : HResult; stdcall;
function SetBox (const lpTD3DRMBox: TD3DRMBox) : HResult; stdcall;
function SetBoxEnable(bEnableFlag: BOOL): HResult; stdcall;
function SetAxes(dx, dy, dz, ux, uy, uz: TD3DValue): HResult; stdcall;
function SetInheritAxes(inherit_from_parent: BOOL): HResult; stdcall;
function SetMaterial(lplpMaterial: IDirect3DRMMaterial): HResult; stdcall;
function SetQuaternion(lpRef: IDirect3DRMFrame2; var quat: TD3DRMQuaternion): HResult; stdcall;
function RayPick(lpRefFrame: IDirect3DRMFrame; const ray: TD3DRMRay;
dwFlags: DWORD; out lplpPicked2Array: IDirect3DRMPicked2Array): HResult; stdcall;
function Save(lpFilename: PChar; d3dFormat: TD3DRMXOFFormat;
function SetMaterial (var lplpMaterial: IDirect3DRMMaterial) : HResult; stdcall;
function SetQuaternion (lpRef: IDirect3DRMFrame;
const quat: TD3DRMQuaternion) : HResult; stdcall;
function RayPick (lpRefFrame: IDirect3DRMFrame; var ray: TD3DRMRay;
dwFlags: DWORD; out lplpPicked2Array: IDirect3DRMPicked2Array) :
HResult; stdcall;
function Save (lpFilename: PAnsiChar; d3dFormat: TD3DRMXOFFormat;
d3dSaveFlags: TD3DRMSaveOptions): HResult; stdcall;
end;
 
IDirect3DRMFrame3 = interface(IDirect3DRMVisual)
['{FF6B7F70-A40E-11D1-91F9-0000F8758E66}']
['{ff6b7f70-a40e-11d1-91f9-0000f8758e66}']
(*
* IDirect3DRMFrame3 methods
*)
function AddChild(lpD3DRMFrameChild: IDirect3DRMFrame3): HResult; stdcall;
function AddLight(lpD3DRMLight: IDirect3DRMLight): HResult; stdcall;
function AddMoveCallback(d3drmFMC: TD3DRMFrame3MoveCallback;
6897,10 → 10482,9
lpArg: Pointer; dwFlags: DWORD): HResult; stdcall;
function AddTransform(rctCombine: TD3DRMCombineType;
rmMatrix: TD3DRMMatrix4D): HResult; stdcall;
function AddTranslation(rctCombine: TD3DRMCombineType; rvX, rvY,
rvZ: TD3DValue): HResult; stdcall;
function AddScale(rctCombine: TD3DRMCombineType; rvX, rvY,
rvZ: TD3DValue): HResult; stdcall;
function AddTranslation (rctCombine: TD3DRMCombineType; rvX, rvY, rvZ:
TD3DValue) : HResult; stdcall;
function AddScale (rctCombine: TD3DRMCombineType; rvX, rvY, rvZ: TD3DValue) : HResult; stdcall;
function AddRotation(rctCombine: TD3DRMCombineType; rvX, rvY, rvZ,
rvTheta: TD3DValue): HResult; stdcall;
function AddVisual(lpD3DRMVisual: IDirect3DRMVisual): HResult; stdcall;
6909,19 → 10493,20
function GetLights(out lplpLights: IDirect3DRMLightArray): HResult; stdcall;
function GetMaterialMode: TD3DRMMaterialMode; stdcall;
function GetParent(out lplpParent: IDirect3DRMFrame3): HResult; stdcall;
function GetPosition(lpRef: IDirect3DRMFrame3; var lprvPos: TD3DVector): HResult; stdcall;
function GetRotation(lpRef: IDirect3DRMFrame3; var lprvAxis: TD3DVector;
var lprvTheta: TD3DValue): HResult; stdcall;
function GetPosition (lpRef: IDirect3DRMFrame3; out lprvPos: TD3DVector) : HResult; stdcall;
function GetRotation (lpRef: IDirect3DRMFrame3; out lprvAxis: TD3DVector;
out lprvTheta: TD3DValue) : HResult; stdcall;
function GetScene(out lplpRoot: IDirect3DRMFrame3): HResult; stdcall;
function GetSortMode: TD3DRMSortMode; stdcall;
function GetTexture(out lplpTexture: IDirect3DRMTexture3): HResult; stdcall;
function GetTransform(RefFrame: IDirect3DRMFrame3; var rmMatrix: TD3DRMMatrix4D): HResult; stdcall;
function GetVelocity(lpRef: IDirect3DRMFrame3; var lprvVel: TD3DVector;
function GetTransform (lpRefFrame: IDirect3DRMFrame3;
var rmMatrix: TD3DRMMatrix4D) : HResult; stdcall;
function GetVelocity (lpRef: IDirect3DRMFrame3; out lprvVel: TD3DVector;
fRotVel: BOOL): HResult; stdcall;
function GetOrientation(lpRef: IDirect3DRMFrame3; var lprvDir: TD3DVector;
var lprvUp: TD3DVector): HResult; stdcall;
function GetVisuals(var pdwNumVisuals: DWORD; var lplpVisuals: Pointer): HResult; stdcall;
function InverseTransform(var lprvDst, lprvSrc: TD3DVector): HResult; stdcall;
function GetOrientation (lpRef: IDirect3DRMFrame3; out lprvDir: TD3DVector;
out lprvUp: TD3DVector) : HResult; stdcall;
function GetVisuals (out lplpVisuals: IDirect3DRMVisualArray) : HResult; stdcall;
function InverseTransform (out lprvDst: TD3DVector; const lprvSrc: TD3DVector) : HResult; stdcall;
function Load(lpvObjSource: Pointer; lpvObjID: Pointer;
d3drmLOFlags: TD3DRMLoadOptions; d3drmLoadTextureProc:
TD3DRMLoadTexture3Callback; lpArgLTP: Pointer): HResult; stdcall;
6937,7 → 10522,7
function GetSceneFogColor: TD3DColor; stdcall;
function GetSceneFogEnable: BOOL; stdcall;
function GetSceneFogMode: TD3DRMFogMode; stdcall;
function GetSceneFogParams(var lprvStart, lprvEnd, lprvDensity: TD3DValue): HResult; stdcall;
function GetSceneFogParams (out lprvStart, lprvEnd, lprvDensity: TD3DValue) : HResult; stdcall;
function SetSceneBackground(rcColor: TD3DColor): HResult; stdcall;
function SetSceneBackgroundRGB(rvRed, rvGreen, rvBlue: TD3DValue): HResult; stdcall;
function SetSceneBackgroundDepth(lpImage: IDirectDrawSurface): HResult; stdcall;
6952,48 → 10537,59
function SetMaterialMode(rmmMode: TD3DRMMaterialMode): HResult; stdcall;
function SetOrientation(lpRef: IDirect3DRMFrame3; rvDx, rvDy, rvDz, rvUx,
rvUy, rvUz: TD3DValue): HResult; stdcall;
function SetPosition(lpRef: IDirect3DRMFrame3; rvX, rvY, rvZ: TD3DValue): HResult; stdcall;
function SetRotation(lpRef: IDirect3DRMFrame3; rvX, rvY, rvZ, rvTheta: TD3DValue): HResult; stdcall;
function SetPosition (lpRef: IDirect3DRMFrame3; rvX, rvY, rvZ: TD3DValue) :
HResult; stdcall;
function SetRotation (lpRef: IDirect3DRMFrame3; rvX, rvY, rvZ,
rvTheta: TD3DValue) : HResult; stdcall;
function SetSortMode(d3drmSM: TD3DRMSortMode): HResult; stdcall;
function SetTexture(lpD3DRMTexture: IDirect3DRMTexture3): HResult; stdcall;
function SetVelocity(lpRef: IDirect3DRMFrame3; rvX, rvY, rvZ: TD3DValue;
fRotVel: BOOL): HResult; stdcall;
function SetZbufferMode(d3drmZBM: TD3DRMZBufferMode): HResult; stdcall;
function Transform(var lpd3dVDst, lpd3dVSrc: TD3DVector): HResult; stdcall;
function GetBox(var lpD3DRMBox: TD3DRMBox): HResult; stdcall;
function GetBoxEnable: BOOL; stdcall;
function GetAxes(var dir, up: TD3DVector): HResult; stdcall;
function Transform (out lpd3dVDst: TD3DVector; const lpd3dVSrc: TD3DVector) : HResult; stdcall;
 
function GetBox (out lpTD3DRMBox: TD3DRMBox) : HResult; stdcall;
function GetBoxEnable : boolean; stdcall;
function GetAxes (out dir, up: TD3DVector) : HResult; stdcall;
function GetMaterial(out lplpMaterial: IDirect3DRMMaterial2): HResult; stdcall;
function GetInheritAxes: BOOL; stdcall;
function GetHierarchyBox(var lpD3DRMBox: TD3DRMBox): HResult; stdcall;
function SetBox(const lpD3DRMBox: TD3DRMBox): HResult; stdcall;
function GetInheritAxes : boolean; stdcall;
function GetHierarchyBox (out lpTD3DRMBox: TD3DRMBox) : HResult; stdcall;
function SetBox (const lpTD3DRMBox: TD3DRMBox) : HResult; stdcall;
function SetBoxEnable(bEnableFlag: BOOL): HResult; stdcall;
function SetAxes(dx, dy, dz, ux, uy, uz: TD3DValue): HResult; stdcall;
function SetInheritAxes(inherit_from_parent: BOOL): HResult; stdcall;
function SetMaterial(lplpMaterial: IDirect3DRMMaterial2): HResult; stdcall;
function SetQuaternion(lpRef: IDirect3DRMFrame3; var quat: TD3DRMQuaternion): HResult; stdcall;
function RayPick(lpRefFrame: IDirect3DRMFrame3; const ray: TD3DRMRay;
function SetMaterial (var lplpMaterial: IDirect3DRMMaterial2) : HResult; stdcall;
function SetQuaternion (lpRef: IDirect3DRMFrame3;
const quat: TD3DRMQuaternion) : HResult; stdcall;
function RayPick (lpRefFrame: IDirect3DRMFrame3; var ray: TD3DRMRay;
dwFlags: DWORD; out lplpPicked2Array: IDirect3DRMPicked2Array): HResult; stdcall;
function Save(lpFilename: PChar; d3dFormat: TD3DRMXOFFormat;
function Save (lpFilename: PAnsiChar; d3dFormat: TD3DRMXOFFormat;
d3dSaveFlags: TD3DRMSaveOptions): HResult; stdcall;
function TransformVectors(reference: IDirect3DRMFrame3; dwNumVectors: DWORD;
var lpDstVectors: TD3DVector; const lpSrcVectors: TD3DVector): HResult; stdcall;
function InverseTransformVectors(reference: IDirect3DRMFrame3; dwNumVectors: DWORD;
var lpDstVectors: TD3DVector; const lpSrcVectors: TD3DVector): HResult; stdcall;
function TransformVectors (lpRefFrame: IDirect3DRMFrame3;
dwNumVectors: DWORD; out lpDstVectors: TD3DVector;
const lpSrcVectors: TD3DVector) : HResult; stdcall;
function InverseTransformVectors (lpRefFrame: IDirect3DRMFrame3;
dwNumVectors: DWORD; out lpDstVectors: TD3DVector;
const lpSrcVectors: TD3DVector) : HResult; stdcall;
function SetTraversalOptions(dwFlags: DWORD): HResult; stdcall;
function GetTraversalOptions(var lpdwFlags: DWORD): HResult; stdcall;
function GetTraversalOptions (out lpdwFlags: DWORD) : HResult; stdcall;
function SetSceneFogMethod(dwFlags: DWORD): HResult; stdcall;
function GetSceneFogMethod(var lpdwFlags: DWORD): HResult; stdcall;
function SetMaterialOverride(lpdmOverride: TD3DRMMaterialOverride): HResult; stdcall;
function GetMaterialOverride(var lplpdmOverride: TD3DRMMaterialOverride): HResult; stdcall;
function GetSceneFogMethod (out lpdwFlags: DWORD) : HResult; stdcall;
function SetMaterialOverride (
const lpdmOverride: TD3DRMMaterialOverride) : HResult; stdcall;
function GetMaterialOverride (
const lpdmOverride: TD3DRMMaterialOverride) : HResult; stdcall;
end;
 
 
IDirect3DRMMesh = interface(IDirect3DRMVisual)
['{A3A80D01-6E12-11CF-AC4A-0000C03825A1}']
// IDirect3DRMMesh methods
['{a3a80d01-6e12-11cf-ac4a-0000c03825a1}']
(*
* IDirect3DRMMesh methods
*)
function Scale(sx, sy, sz: TD3DValue): HResult; stdcall;
function Translate(tx, ty, tz: TD3DValue): HResult; stdcall;
function GetBox(var lpD3DRMBox: TD3DRMBox): HResult; stdcall;
function GetBox (out lpTD3DRMBox: TD3DRMBox) : HResult; stdcall;
function AddGroup(vCount, fCount, vPerFace: DWORD; var fData: DWORD;
var returnId: TD3DRMGroupIndex): HResult; stdcall;
function SetVertices(id: TD3DRMGroupIndex; index, count: DWORD;
7009,10 → 10605,10
IDirect3DRMMaterial): HResult; stdcall;
function SetGroupTexture(id: TD3DRMGroupIndex; value: IDirect3DRMTexture): HResult; stdcall;
function GetGroupCount: DWORD; stdcall;
function GetGroup(id: TD3DRMGroupIndex; var vCount, fCount, vPerFace,
fDataSize, fData: DWORD): HResult; stdcall;
function GetVertices(id: TD3DRMGroupIndex; index: DWORD; count: DWORD;
var returnPtr: TD3DRMVertex): HResult; stdcall;
function GetGroup (id: TD3DRMGroupIndex; vCount, fCount, vPerFace : PDWORD;
var fDataSize: DWORD; fData: PDWORD) : HResult; stdcall;
function GetVertices (id: TD3DRMGroupIndex; index, count : DWORD;
out returnPtr : TD3DRMVertex) : HResult; stdcall;
function GetGroupColor(id: TD3DRMGroupIndex): TD3DColor; stdcall;
function GetGroupMapping(id: TD3DRMGroupIndex): TD3DRMMapping; stdcall;
function GetGroupQuality(id: TD3DRMGroupIndex): TD3DRMRenderQuality; stdcall;
7023,52 → 10619,66
end;
 
IDirect3DRMProgressiveMesh = interface(IDirect3DRMVisual)
['{4516EC79-8F20-11D0-9B6D-0000C0781BC3}']
// IDirect3DRMProgressiveMesh methods
['{4516ec79-8f20-11d0-9b6d-0000c0781bc3}']
(*
* IDirect3DRMProgressiveMesh methods
*)
function Load(lpSource, lpObjID: pointer; dloLoadflags: TD3DRMLoadOptions;
lpCallback: TD3DRMLoadTextureCallback; lpArg: pointer): HResult; stdcall;
function GetLoadStatus(var lpStatus: TD3DRMPMeshLoadStatus): HResult; stdcall;
function GetLoadStatus (out lpStatus: TD3DRMPMeshLoadStatus) : HResult; stdcall;
function SetMinRenderDetail(d3dVal: TD3DValue): HResult; stdcall;
function Abort(dwFlags: DWORD): HResult; stdcall;
function GetFaceDetail(var lpdwCount: DWORD): HResult; stdcall;
function GetVertexDetail(var lpdwCount: DWORD): HResult; stdcall;
function GetFaceDetail (out lpdwCount: DWORD) : HResult; stdcall;
function GetVertexDetail (out lpdwCount: DWORD) : HResult; stdcall;
function SetFaceDetail(dwCount: DWORD): HResult; stdcall;
function SetVertexDetail(dwCount: DWORD): HResult; stdcall;
function GetFaceDetailRange(var lpdwMin, lpdwMax: DWORD): HResult; stdcall;
function GetVertexDetailRange(var lpdwMin, lpdwMax: DWORD): HResult; stdcall;
function GetDetail(var lpdvVal: TD3DValue): HResult; stdcall;
function GetFaceDetailRange (out lpdwMin, lpdwMax: DWORD) : HResult; stdcall;
function GetVertexDetailRange (out lpdwMin, lpdwMax: DWORD) : HResult; stdcall;
function GetDetail (out lpdvVal: TD3DValue) : HResult; stdcall;
function SetDetail(lpdvVal: TD3DValue): HResult; stdcall;
function RegisterEvents(hEvent: THANDLE; dwFlags, dwReserved: DWORD): HResult; stdcall;
function CreateMesh(out lplpD3DRMMesh: IDirect3DRMMesh): HResult; stdcall;
function Duplicate(out lplpD3DRMPMesh: IDirect3DRMProgressiveMesh): HResult; stdcall;
function GetBox(var lpBBox: TD3DRMBox): HResult; stdcall;
function GetBox (out lpBBox: TD3DRMBox) : HResult; stdcall;
function SetQuality(quality: TD3DRMRenderQuality): HResult; stdcall;
function GetQuality(var lpdwquality: TD3DRMRenderQuality): HResult; stdcall;
function GetQuality (out lpdwquality: TD3DRMRenderQuality) : HResult; stdcall;
end;
 
IDirect3DRMShadow = interface(IDirect3DRMVisual)
['{AF359780-6BA3-11CF-AC4A-0000C03825A1}']
// IDirect3DRMShadow methods
['{af359780-6ba3-11cf-ac4a-0000c03825a1}']
(*
* IDirect3DRMShadow methods
*)
function Init(lpD3DRMVisual: IDirect3DRMVisual;
lpD3DRMLight: IDirect3DRMLight; px, py, pz, nx, ny, nz: TD3DValue): HResult; stdcall;
lpD3DRMLight: IDirect3DRMLight;
px, py, pz, nx, ny, nz: TD3DValue) : HResult; stdcall;
end;
 
IDirect3DRMShadow2 = interface(IDirect3DRMShadow)
['{86B44E25-9C82-11D1-BB0B-00A0C981A0A6}']
// IDirect3DRMShadow2 methods
['{86b44e25-9c82-11d1-bb0b-00a0c981a0a6}']
(*
* IDirect3DRMShadow2 methods
*)
function GetVisual(out lplpDirect3DRMVisual: IDirect3DRMVisual): HResult; stdcall;
function SetVisual(pUNK: IUnknown; dwFlags: DWORD): HResult; stdcall;
function SetVisual (lpDirect3DRMVisual: IDirect3DRMVisual;
dwFlags: DWORD) : HResult; stdcall;
function GetLight(out lplpDirect3DRMLight: IDirect3DRMLight): HResult; stdcall;
function SetLight(lpDirect3DRMLight: IDirect3DRMLight; dwFlags: DWORD): HResult; stdcall;
function GetPlane(var px, py, pz: TD3DValue; var nx, ny, nz: TD3DValue): HResult; stdcall;
function SetPlane(px, py, pz: TD3DValue; nx, ny, nz: TD3DValue): HResult; stdcall;
function GetOptions(var pdwOptions: DWORD): HResult; stdcall;
function SetLight (lplpDirect3DRMLight: IDirect3DRMLight;
dwFlags: DWORD) : HResult; stdcall;
function GetPlane (
var pdvPX, pdvPY, pdvPZ, pdvNX, pdvNY, pdvNZ: TD3DValue) : HResult; stdcall;
function SetPlane (px, py, pz, nx, ny, nz: TD3DValue;
dwFlags: DWORD) : HResult; stdcall;
function GetOptions (out pdwOptions: DWORD) : HResult; stdcall;
function SetOptions(dwOptions: DWORD): HResult; stdcall;
 
end;
 
IDirect3DRMFace = interface(IDirect3DRMObject)
['{EB16CB07-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMFace methods
['{eb16cb07-d271-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMFace methods
*)
function AddVertex(x, y, z: TD3DValue): HResult; stdcall;
function AddVertexAndNormalIndexed(vertex: DWORD; normal: DWORD): HResult; stdcall;
function SetColorRGB(red, green, blue: TD3DValue): HResult; stdcall;
7077,22 → 10687,26
function SetTextureCoordinates(vertex: DWORD; u, v: TD3DValue): HResult; stdcall;
function SetMaterial(lpMat: IDirect3DRMMaterial): HResult; stdcall;
function SetTextureTopology(cylU, cylV: BOOL): HResult; stdcall;
function GetVertex(index: DWORD; var lpPosition: TD3DVector; var lpNormal: TD3DVector): HResult; stdcall;
function GetVertices(var lpdwVertexCount: DWORD; var lpPosition, lpNormal: TD3DVector): HResult; stdcall;
function GetTextureCoordinates(index: DWORD; var lpU, lpV: TD3DValue): HResult; stdcall;
function GetTextureTopology(var lpU, lpV: BOOL): HResult; stdcall;
function GetNormal(var lpNormal: TD3DVector): HResult; stdcall;
function GetVertex (index: DWORD; out lpPosition: TD3DVector;
out lpNormal: TD3DVector) : HResult; stdcall;
function GetVertices (var lpdwVertexCount: DWORD;
out lpPosition, lpNormal: TD3DVector) : HResult; stdcall;
function GetTextureCoordinates (index: DWORD; out lpU, lpV: TD3DValue) : HResult; stdcall;
function GetTextureTopology (out lpU, lpV: BOOL) : HResult; stdcall;
function GetNormal (out lpNormal: TD3DVector) : HResult; stdcall;
function GetTexture(out lplpTexture: IDirect3DRMTexture): HResult; stdcall;
function GetMaterial(out lpMat: IDirect3DRMMaterial): HResult; stdcall;
function GetVertexCount: Longint; stdcall;
function GetVertexIndex(dwIndex: DWORD): Longint; stdcall;
function GetTextureCoordinateIndex(dwIndex: DWORD): Longint; stdcall;
function GetVertexCount: Integer; stdcall;
function GetVertexIndex (dwIndex: DWORD) : Integer; stdcall;
function GetTextureCoordinateIndex (dwIndex: DWORD) : Integer; stdcall;
function GetColor: TD3DColor; stdcall;
end;
 
IDirect3DRMFace2 = interface(IDirect3DRMObject)
['{4516EC81-8F20-11D0-9B6D-0000C0781BC3}']
// IDirect3DRMFace methods
['{4516ec81-8f20-11d0-9b6d-0000c0781bc3}']
(*
* IDirect3DRMFace2 methods
*)
function AddVertex(x, y, z: TD3DValue): HResult; stdcall;
function AddVertexAndNormalIndexed(vertex: DWORD; normal: DWORD): HResult; stdcall;
function SetColorRGB(red, green, blue: TD3DValue): HResult; stdcall;
7101,30 → 10715,35
function SetTextureCoordinates(vertex: DWORD; u, v: TD3DValue): HResult; stdcall;
function SetMaterial(lpMat: IDirect3DRMMaterial2): HResult; stdcall;
function SetTextureTopology(cylU, cylV: BOOL): HResult; stdcall;
function GetVertex(index: DWORD; var lpPosition: TD3DVector; var lpNormal: TD3DVector): HResult; stdcall;
function GetVertices(var lpdwVertexCount: DWORD; var lpPosition, lpNormal: TD3DVector): HResult; stdcall;
function GetTextureCoordinates(index: DWORD; var lpU, lpV: TD3DValue): HResult; stdcall;
function GetTextureTopology(var lpU, lpV: BOOL): HResult; stdcall;
function GetNormal(var lpNormal: TD3DVector): HResult; stdcall;
function GetVertex (index: DWORD; out lpPosition: TD3DVector;
out lpNormal: TD3DVector) : HResult; stdcall;
function GetVertices (var lpdwVertexCount: DWORD;
out lpPosition, lpNormal: TD3DVector) : HResult; stdcall;
function GetTextureCoordinates (index: DWORD; out lpU, lpV: TD3DValue) : HResult; stdcall;
function GetTextureTopology (out lpU, lpV: BOOL) : HResult; stdcall;
function GetNormal (out lpNormal: TD3DVector) : HResult; stdcall;
function GetTexture(out lplpTexture: IDirect3DRMTexture3): HResult; stdcall;
function GetMaterial(out lpMat: IDirect3DRMMaterial2): HResult; stdcall;
function GetVertexCount: Longint; stdcall;
function GetVertexIndex(dwIndex: DWORD): Longint; stdcall;
function GetTextureCoordinateIndex(dwIndex: DWORD): Longint; stdcall;
function GetVertexCount: Integer; stdcall;
function GetVertexIndex (dwIndex: DWORD) : Integer; stdcall;
function GetTextureCoordinateIndex (dwIndex: DWORD) : Integer; stdcall;
function GetColor: TD3DColor; stdcall;
end;
 
IDirect3DRMMeshBuilder = interface(IDirect3DRMVisual)
['{A3A80D02-6E12-11CF-AC4A-0000C03825A1}']
// IDirect3DRMMeshBuilder methods
function Load(lpvObjSource, lpvObjID: Pointer; d3drmLOFlags: TD3DRMLoadOptions;
d3drmLoadTextureProc: TD3DRMLoadTextureCallback; lpvArg: Pointer): HResult; stdcall;
['{a3a80d02-6e12-11cf-ac4a-0000c03825a1}']
(*
* IDirect3DRMMeshBuilder methods
*)
function Load (lpvObjSource, lpvObjID: Pointer; d3drmLOFlags:
TD3DRMLoadOptions; d3drmLoadTextureProc: TD3DRMLoadTextureCallback;
lpvArg: Pointer) : HResult; stdcall;
function Save(lpFilename: PChar; TD3DRMXOFFormat: TD3DRMXOFFormat;
d3drmSOContents: TD3DRMSaveOptions): HResult; stdcall;
function Scale(sx, sy, sz: TD3DValue): HResult; stdcall;
function Translate(tx, ty, tz: TD3DValue): HResult; stdcall;
function SetColorSource(source: TD3DRMColorSource): HResult; stdcall;
function GetBox(var lpD3DRMBox: TD3DRMBox): HResult; stdcall;
function GetBox (out lpTD3DRMBox: TD3DRMBox) : HResult; stdcall;
function GenerateNormals: HResult; stdcall;
function GetColorSource: TD3DRMColorSource; stdcall;
function AddMesh(lpD3DRMMesh: IDirect3DRMMesh): HResult; stdcall;
7131,9 → 10750,9
function AddMeshBuilder(lpD3DRMMeshBuild: IDirect3DRMMeshBuilder): HResult; stdcall;
function AddFrame(lpD3DRMFrame: IDirect3DRMFrame): HResult; stdcall;
function AddFace(lpD3DRMFace: IDirect3DRMFace): HResult; stdcall;
function AddFaces(dwVertexCount: DWORD; var lpD3DVertices: TD3DVector;
normalCount: DWORD; var lpNormals: TD3DVector; var lpFaceData: DWORD;
out lplpD3DRMFaceArray: IDirect3DRMFaceArray): HResult; stdcall;
function AddFaces (dwVertexCount: DWORD; const lpD3DVertices: TD3DVector;
normalCount: DWORD; lpNormals: PD3DVector; var lpFaceData: DWORD;
lplpD3DRMFaceArray: PIDirect3DRMFaceArray) : HResult; stdcall;
function ReserveSpace(vertexCount, normalCount, faceCount: DWORD): HResult; stdcall;
function SetColorRGB(red, green, blue: TD3DValue): HResult; stdcall;
function SetColor(color: TD3DColor): HResult; stdcall;
7149,52 → 10768,62
function SetVertexColorRGB(index: DWORD; red, green, blue: TD3DValue): HResult; stdcall;
function GetFaces(out lplpD3DRMFaceArray: IDirect3DRMFaceArray): HResult; stdcall;
function GetVertices(var vcount: DWORD; var vertices: TD3DVector;
var ncount: DWORD; var normals: TD3DVector; var face_data_size: DWORD;
var face_data: DWORD): HResult; stdcall;
function GetTextureCoordinates(index: DWORD; var u, v: TD3DValue): HResult; stdcall;
function AddVertex(x, y, z: TD3DValue): Longint; stdcall;
function AddNormal(x, y, z: TD3DValue): Longint; stdcall;
var ncount : DWORD;
var normals : TD3DVector;
var face_data_size, face_data : DWORD) : HResult; stdcall;
function GetTextureCoordinates(index : DWORD; out u, v : TD3DValue) : HResult; stdcall;
function AddVertex (x, y, z: TD3DValue) : Integer; stdcall;
function AddNormal (x, y, z: TD3DValue) : Integer; stdcall;
function CreateFace(out lplpd3drmFace: IDirect3DRMFace): HResult; stdcall;
function GetQuality: TD3DRMRenderQuality; stdcall;
function GetPerspective: BOOL; stdcall;
function GetFaceCount: Longint; stdcall;
function GetVertexCount: Longint; stdcall;
function GetFaceCount: Integer; stdcall;
function GetVertexCount: Integer; stdcall;
function GetVertexColor(index: DWORD): TD3DColor; stdcall;
function CreateMesh(out lplpD3DRMMesh: IDirect3DRMMesh): HResult; stdcall;
end;
 
IDirect3DRMMeshBuilder2 = interface(IDirect3DRMMeshBuilder)
['{4516EC77-8F20-11D0-9B6D-0000C0781BC3}']
// IDirect3DRMMeshBuilder2 methods
function GenerateNormals2(dvCreaseAngle: TD3DValue; dwFlags: DWORD): HResult; stdcall;
function GetFace(dwIndex: DWORD; out lplpD3DRMFace: IDirect3DRMFace): HResult; stdcall;
['{4516ec77-8f20-11d0-9b6d-0000c0781bc3}']
(*
* IDirect3DRMMeshBuilder2 methods
*)
function GenerateNormals2 (
dvCreaseAngle: TD3DValue; dwFlags: DWORD) : HResult; stdcall;
function GetFace (dwIndex: DWORD; lplpD3DRMFace: IDirect3DRMFace) : HResult; stdcall;
end;
 
IDirect3DRMMeshBuilder3 = interface(IDirect3DRMVisual)
['{4516EC82-8F20-11D0-9B6D-0000C0781BC3}']
// IDirect3DRMMeshBuilder methods
function Load(lpvObjSource, lpvObjID: Pointer; d3drmLOFlags: TD3DRMLoadOptions;
d3drmLoadTextureProc: TD3DRMLoadTexture3Callback; lpvArg: Pointer): HResult; stdcall;
function Save(lpFilename: PChar; TD3DRMXOFFormat: TD3DRMXOFFormat;
['{ff6b7f71-a40e-11d1-91f9-0000f8758e66}']
(*
* IDirect3DRMMeshBuilder3 methods
*)
function Load (lpvObjSource, lpvObjID: Pointer;
d3drmLOFlags: TD3DRMLoadOptions;
d3drmLoadTextureProc: TD3DRMLoadTexture3Callback;
lpvArg: Pointer) : HResult; stdcall;
function Save (lpFilename: PAnsiChar; TD3DRMXOFFormat: TD3DRMXOFFormat;
d3drmSOContents: TD3DRMSaveOptions): HResult; stdcall;
function Scale(sx, sy, sz: TD3DValue): HResult; stdcall;
function Translate(tx, ty, tz: TD3DValue): HResult; stdcall;
function SetColorSource(source: TD3DRMColorSource): HResult; stdcall;
function GetBox(var lpD3DRMBox: TD3DRMBox): HResult; stdcall;
function GenerateNormals(dvCreaseAngle: TD3DValue; dwFlags: DWORD): HResult; stdcall;
function GetBox (out lpTD3DRMBox: TD3DRMBox) : HResult; stdcall;
function GenerateNormals (
dvCreaseAngle: TD3DValue; dwFlags: DWORD): HResult; stdcall;
function GetColorSource: TD3DRMColorSource; stdcall;
function AddMesh(lpD3DRMMesh: IDirect3DRMMesh): HResult; stdcall;
function AddMeshBuilder(lpD3DRMMeshBuild: IDirect3DRMMeshBuilder3): HResult; stdcall;
function AddMeshBuilder (
lpD3DRMMeshBuild: IDirect3DRMMeshBuilder3) : HResult; stdcall;
function AddFrame(lpD3DRMFrame: IDirect3DRMFrame3): HResult; stdcall;
function AddFace(lpD3DRMFace: IDirect3DRMFace2): HResult; stdcall;
function AddFaces(dwVertexCount: DWORD; var lpD3DVertices: TD3DVector;
normalCount: DWORD; var lpNormals: TD3DVector; var lpFaceData: DWORD;
out lplpD3DRMFaceArray: IDirect3DRMFaceArray): HResult; stdcall;
function AddFaces (dwVertexCount: DWORD; const lpD3DVertices: TD3DVector;
normalCount: DWORD; lpNormals: PD3DVector; var lpFaceData: DWORD;
lplpD3DRMFaceArray: PIDirect3DRMFaceArray) : HResult; stdcall;
function ReserveSpace(vertexCount, normalCount, faceCount: DWORD): HResult; stdcall;
function SetColorRGB(red, green, blue: TD3DValue): HResult; stdcall;
function SetColor(color: TD3DColor): HResult; stdcall;
function SetTexture(lpD3DRMTexture: IDirect3DRMTexture3): HResult; stdcall;
function SetMaterial(lpDirect3DRMMaterial: IDirect3DRMMaterial2): HResult; stdcall;
function SetMaterial (lpIDirect3DRMmaterial: IDirect3DRMMaterial2) : HResult; stdcall;
function SetTextureTopology(cylU, cylV: BOOL): HResult; stdcall;
function SetQuality(quality: TD3DRMRenderQuality): HResult; stdcall;
function SetPerspective(perspective: BOOL): HResult; stdcall;
7204,50 → 10833,53
function SetVertexColor(index: DWORD; color: TD3DColor): HResult; stdcall;
function SetVertexColorRGB(index: DWORD; red, green, blue: TD3DValue): HResult; stdcall;
function GetFaces(out lplpD3DRMFaceArray: IDirect3DRMFaceArray): HResult; stdcall;
function GetGeometry(var vcount: DWORD; var vertices; var ncount: DWORD; var normals;
var face_data_size: DWORD; var face_data): HResult; stdcall;
function GetTextureCoordinates(index: DWORD; var u, v: TD3DValue): HResult; stdcall;
function AddVertex(x, y, z: TD3DValue): Longint; stdcall;
function AddNormal(x, y, z: TD3DValue): Longint; stdcall;
function GetGeometry (var vcount: DWORD; var vertices : TD3DVector;
var ncount : DWORD; var normals : TD3DVector;
var face_data_size, face_data : DWORD) : HResult; stdcall;
function GetTextureCoordinates(index : DWORD; out u, v : TD3DValue) : HResult; stdcall;
function AddVertex (x, y, z: TD3DValue) : Integer; stdcall;
function AddNormal (x, y, z: TD3DValue) : Integer; stdcall;
function CreateFace(out lplpd3drmFace: IDirect3DRMFace2): HResult; stdcall;
function GetQuality: TD3DRMRenderQuality; stdcall;
function GetPerspective: BOOL; stdcall;
function GetFaceCount: Longint; stdcall;
function GetVertexCount: Longint; stdcall;
function GetFaceCount: Integer; stdcall;
function GetVertexCount: Integer; stdcall;
function GetVertexColor(index: DWORD): TD3DColor; stdcall;
function CreateMesh(out lplpD3DRMMesh: IDirect3DRMMesh): HResult; stdcall;
function GetFace(dwIndex: DWORD; out lplpD3DRMFace: IDirect3DRMFace2): HResult; stdcall;
function GetVertex(dwIndex: DWORD; var lpVector: TD3DVector): HResult; stdcall;
function GetNormal(dwIndex: DWORD; var lpVector: TD3DVector): HResult; stdcall;
function DeleteVertices(dwIndexFirst: DWORD; dwCount: DWORD): HResult; stdcall;
function DeleteNormals(dwIndexFirst: DWORD; dwCount: DWORD): HResult; stdcall;
function DeleteFace(lpD3DRMFace: IDirect3DRMFace2): HResult; stdcall;
function GetFace
(dwIndex: DWORD; lplpD3DRMFace: IDirect3DRMFace) : HResult; stdcall;
function GetVertex (dwIndex: DWORD; out lpVector: TD3DVector) : HResult; stdcall;
function GetNormal (dwIndex: DWORD; out lpVector: TD3DVector) : HResult; stdcall;
function DeleteVertices (dwFirstIndex, dwCount: DWORD) : HResult; stdcall;
function DeleteNormals (dwFirstIndex, dwCount: DWORD) : HResult; stdcall;
function DeleteFace (lpFace: IDirect3DRMFace2) : HResult; stdcall;
function Empty(dwFlags: DWORD): HResult; stdcall;
function Optimize(dwFlags: DWORD): HResult; stdcall;
function AddFacesIndexed(dwFlags: DWORD; var lpdwvIndices: DWORD;
var dwIndexFirst: DWORD; var dwCount: DWORD): HResult; stdcall;
lpdwIndexFirst, lpdwCount: PDWORD) : HResult; stdcall;
function CreateSubMesh(out lplpUnk: IUnknown): HResult; stdcall;
function GetParentMesh(dwFlags: DWORD; out lplpUnk: IUnknown): HResult; stdcall;
function GetSubMeshes(var lpdwCount: DWORD; out lplpUnk: IUnknown): HResult; stdcall;
function DeleteSubMesh(lpUnk: IUnknown): HResult; stdcall;
function GetSubMeshes (lpdwCount: PDWORD; lpUnk: IUnknown) : HResult; stdcall;
function DeleteSubMesh (lplpUnk: IUnknown) : HResult; stdcall;
function Enable(dwFlags: DWORD): HResult; stdcall;
function GetEnable(var lpdwFlags: DWORD): HResult; stdcall;
function AddTriangles(dwFlags: DWORD; dwFormat: DWORD; dwVertexCount: DWORD;
lpvData: Pointer): HResult; stdcall;
function SetVertices(dwIndexFirst: DWORD; dwCount: DWORD;
const lpdvVector: TD3DVector): HResult; stdcall;
function GetVertices(dwIndexFirst: DWORD; var lpdwCount: DWORD;
function GetEnable (out lpdwFlags: DWORD) : HResult; stdcall;
function AddTriangles (dwFlags, dwFormat, dwVertexCount: DWORD;
lpData: pointer) : HResult; stdcall;
function SetVertices
(dwFirst, dwCount: DWORD; const lpdvVector: TD3DVector) : HResult; stdcall;
function GetVertices(dwFirst: DWORD; var lpdwCount: DWORD;
lpdvVector: PD3DVector) : HResult; stdcall;
function SetNormals(dwFirst, dwCount: DWORD; const lpdvVector: TD3DVector) : HResult; stdcall;
function GetNormals (dwFirst: DWORD; lpdwCount: PDWORD;
var lpdvVector: TD3DVector): HResult; stdcall;
function SetNormals(dwIndexFirst: DWORD; dwCount: DWORD;
const lpdvVector: TD3DVector): HResult; stdcall;
function GetNormals(dwIndexFirst: DWORD; var lpdwCount: DWORD;
var lpdvVector: TD3DVector): HResult; stdcall;
function GetNormalCount: Longint; stdcall;
function GetNormalCount : integer; stdcall;
end;
 
IDirect3DRMLight = interface(IDirect3DRMObject)
['{EB16CB08-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMLight methods
['{eb16cb08-d271-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMLight methods
*)
function SetType(d3drmtType: TD3DRMLightType): HResult; stdcall;
function SetColor(rcColor: TD3DColor): HResult; stdcall;
function SetColorRGB(rvRed, rvGreen, rvBlue: TD3DValue): HResult; stdcall;
7270,9 → 10902,11
end;
 
IDirect3DRMTexture = interface(IDirect3DRMVisual)
['{EB16CB09-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMTexture methods
function InitFromFile(filename: PChar): HResult; stdcall;
['{eb16cb09-d271-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMTexture methods
*)
function InitFromFile (filename: PAnsiChar) : HResult; stdcall;
function InitFromSurface(lpDDS: IDirectDrawSurface): HResult; stdcall;
function InitFromResource(rs: HRSRC): HResult; stdcall;
function Changed(bPixels, bPalette: BOOL): HResult; stdcall;
7279,12 → 10913,12
function SetColors(ulColors: DWORD): HResult; stdcall;
function SetShades(ulShades: DWORD): HResult; stdcall;
function SetDecalSize(rvWidth, rvHeight: TD3DValue): HResult; stdcall;
function SetDecalOrigin(lX, lY: Longint): HResult; stdcall;
function SetDecalOrigin (lX, lY: LongInt) : HResult; stdcall;
function SetDecalScale(dwScale: DWORD): HResult; stdcall;
function SetDecalTransparency(bTransp: BOOL): HResult; stdcall;
function SetDecalTransparentColor(rcTransp: TD3DColor): HResult; stdcall;
function GetDecalSize(var lprvWidth, lprvHeight: TD3DValue): HResult; stdcall;
function GetDecalOrigin(var lplX, lplY: Longint): HResult; stdcall;
function GetDecalSize (out lprvWidth, lprvHeight: TD3DValue) : HResult; stdcall;
function GetDecalOrigin (out lplX, lplY: LongInt) : HResult; stdcall;
function GetImage: PD3DRMImage; stdcall;
function GetShades: DWORD; stdcall;
function GetColors: DWORD; stdcall;
7294,53 → 10928,70
end;
 
IDirect3DRMTexture2 = interface(IDirect3DRMTexture)
['{120F30C0-1629-11D0-941C-0080C80CFA7B}']
// IDirect3DRMTexture2 methods
['{120f30c0-1629-11d0-941c-0080c80cfa7b}']
(*
* IDirect3DRMTexture2 methods
*)
function InitFromImage(const lpImage: TD3DRMImage): HResult; stdcall;
function InitFromResource2(hModule: HModule; strName, strType: PChar): HResult; stdcall;
function InitFromResource2 (hModule: HModule;
strName, strType: PAnsiChar) : HResult; stdcall;
function GenerateMIPMap(dwFlags: DWORD): HResult; stdcall;
end;
 
IDirect3DRMTexture3 = interface(IDirect3DRMTexture2)
['{FF6B7F73-A40E-11D1-91F9-0000F8758E66}']
// IDirect3DRMTexture3 methods
function GetSurface(dwFlags: DWORD; out lplpDDS: IDirectDrawSurface): HResult; stdcall;
function SetCacheOptions(lImportance: Longint; dwFlags: DWORD): HResult; stdcall;
function GetCacheOptions(var lplImportance: Longint; var lpdwFlags: DWORD): HResult; stdcall;
function SetDownsampleCallback(pCallback: TD3DRMDownSampleCallback; pArg: Pointer): HResult; stdcall;
function SetValidationCallback(pCallback: TD3DRMValidationCallback; pArg: Pointer): HResult; stdcall;
['{ff6b7f73-a40e-11d1-91f9-0000f8758e66}']
(*
* IDirect3DRMTexture3 methods
*)
function GetSurface
(dwFlags: DWORD; out lplpDDS: IDirectDrawSurface) : HResult; stdcall;
function SetCacheOptions (lImportance: integer; dwFlags: DWORD) : HResult; stdcall;
function GetCacheOptions (var lplImportance: integer; var lpdwFlags: DWORD) : HResult; stdcall;
function SetDownsampleCallback (
pCallback: TD3DRMDownSampleCallback; pArg: pointer) : HResult; stdcall;
function SetValidationCallback (
pCallback: TD3DRMValidationCallback; pArg: pointer) : HResult; stdcall;
end;
 
IDirect3DRMWrap = interface(IDirect3DRMObject)
['{EB16CB0A-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMWrap methods
['{eb16cb0a-d271-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMWrap methods
*)
function Init(d3drmwt: TD3DRMWrapType; lpd3drmfRef: IDirect3DRMFrame;
ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv: TD3DValue): HResult; stdcall;
ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv: TD3DValue)
: HResult; stdcall;
function Apply(lpObject: IDirect3DRMObject): HResult; stdcall;
function ApplyRelative(frame: IDirect3DRMFrame; mesh: IDirect3DRMObject): HResult; stdcall;
end;
 
IDirect3DRMMaterial = interface(IDirect3DRMObject)
['{EB16CB0B-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMMaterial methods
['{eb16cb0b-d271-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMMaterial methods
*)
function SetPower(rvPower: TD3DValue): HResult; stdcall;
function SetSpecular(r, g, b: TD3DValue): HResult; stdcall;
function SetEmissive(r, g, b: TD3DValue): HResult; stdcall;
function GetPower: TD3DValue; stdcall;
function GetSpecular(var r, g, b: TD3DValue): HResult; stdcall;
function GetEmissive(var r, g, b: TD3DValue): HResult; stdcall;
function GetSpecular (out lpr, lpg, lpb: TD3DValue) : HResult; stdcall;
function GetEmissive (out lpr, lpg, lpb: TD3DValue) : HResult; stdcall;
end;
 
IDirect3DRMMaterial2 = interface(IDirect3DRMMaterial)
['{FF6B7F75-A40E-11D1-91F9-0000F8758E66}']
// IDirect3DRMMaterial2 methods
function GetAmbient(var r, g, b: TD3DValue): HResult; stdcall;
['{ff6b7f75-a40e-11d1-91f9-0000f8758e66}']
(*
* IDirect3DRMMaterial2 methods
*)
function GetAmbient(out r,g,b: TD3DValue) : HResult; stdcall;
function SetAmbient(r, g, b: TD3DValue): HResult; stdcall;
end;
 
IDirect3DRMAnimation = interface(IDirect3DRMObject)
['{EB16CB0D-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMAnimation methods
['{eb16cb0d-d271-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMAnimation methods
*)
function SetOptions(d3drmanimFlags: TD3DRMAnimationOptions): HResult; stdcall;
function AddRotateKey(rvTime: TD3DValue; const rqQuat: TD3DRMQuaternion): HResult; stdcall;
function AddPositionKey(rvTime, rvX, rvY, rvZ: TD3DValue): HResult; stdcall;
7351,30 → 11002,27
function GetOptions: TD3DRMAnimationOptions; stdcall;
end;
 
IDirect3DRMAnimation2 = interface(IDirect3DRMObject)
['{FF6B7F77-A40E-11D1-91F9-0000F8758E66}']
// IDirect3DRMAnimation2 methods
function SetOptions(d3drmanimFlags: TD3DRMAnimationOptions): HResult; stdcall;
function AddRotateKey(rvTime: TD3DValue; const rqQuat: TD3DRMQuaternion): HResult; stdcall;
function AddPositionKey(rvTime, rvX, rvY, rvZ: TD3DValue): HResult; stdcall;
function AddScaleKey(time, x, y, z: TD3DValue): HResult; stdcall;
function DeleteKey(time: TD3DValue): HResult; stdcall;
function SetFrame(lpD3DRMFrame: IDirect3DRMFrame3): HResult; stdcall;
function SetTime(rvTime: TD3DValue): HResult; stdcall;
function GetOptions: TD3DRMAnimationOptions; stdcall;
IDirect3DRMAnimation2 = interface (IDirect3DRMAnimation)
['{ff6b7f77-a40e-11d1-91f9-0000f8758e66}']
(*
* IDirect3DRMAnimation methods
*)
function GetFrame(out lpD3DFrame: IDirect3DRMFrame3): HResult; stdcall;
function DeleteKeyByID(dwID: DWORD): HResult; stdcall;
function AddKey(const lpKey: TD3DRMAnimationKey): HResult; stdcall;
function ModifyKey(const lpKey: TD3DRMAnimationKey): HResult; stdcall;
function GetKeys(dvTimeMin, dvTimeMax: TD3DValue; var lpdwNumKeys: DWORD;
var lpKey: TD3DRMAnimationKey): HResult; stdcall;
lpKey: PD3DRMAnimationKey) : HResult; stdcall;
end;
 
IDirect3DRMAnimationSet = interface(IDirect3DRMObject)
['{EB16CB0E-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMAnimationSet methods
['{eb16cb0e-d271-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMAnimationSet methods
*)
function AddAnimation(lpD3DRMAnimation: IDirect3DRMAnimation): HResult; stdcall;
function Load(lpvObjSource, lpvObjID: Pointer; d3drmLOFlags: TD3DRMLoadOptions;
function Load (lpvObjSource, lpvObjID: Pointer;
d3drmLOFlags: TD3DRMLoadOptions;
d3drmLoadTextureProc: TD3DRMLoadTextureCallback; lpArgLTP: Pointer;
lpParentFrame: IDirect3DRMFrame): HResult; stdcall;
function DeleteAnimation(lpD3DRMAnimation: IDirect3DRMAnimation): HResult; stdcall;
7382,21 → 11030,27
end;
 
IDirect3DRMAnimationSet2 = interface(IDirect3DRMObject)
['{FF6B7F79-A40E-11D1-91F9-0000F8758E66}']
// IDirect3DRMAnimationSet2 methods
function AddAnimation(aid: IDirect3DRMAnimation2): HResult; stdcall;
function Load(filename, name: Pointer; loadflags: TD3DRMLoadOptions;
d3drmLoadTextureProc: TD3DRMLoadTexture3Callback; lpArg: Pointer;
['{ff6b7f79-a40e-11d1-91f9-0000f8758e66}']
(*
* IDirect3DRMAnimationSet methods
*)
function AddAnimation (lpD3DRMAnimation: IDirect3DRMAnimation2) : HResult; stdcall;
function Load (lpvObjSource, lpvObjID: Pointer;
d3drmLOFlags: TD3DRMLoadOptions;
d3drmLoadTextureProc: TD3DRMLoadTexture3Callback; lpArgLTP: Pointer;
lpParentFrame: IDirect3DRMFrame3): HResult; stdcall;
function DeleteAnimation(aid: IDirect3DRMAnimation2): HResult; stdcall;
function SetTime(time: TD3DValue): HResult; stdcall;
function GetAnimations(out lpAnimationArray: IDirect3DRMAnimationArray): HResult; stdcall;
function DeleteAnimation (lpD3DRMAnimation: IDirect3DRMAnimation2) : HResult; stdcall;
function SetTime (rvTime: TD3DValue) : HResult; stdcall;
function GetAnimations(out lplpArray: IDirect3DRMAnimationArray) : HResult; stdcall;
end;
 
IDirect3DRMUserVisual = interface(IDirect3DRMVisual)
['{59163DE0-6D43-11CF-AC4A-0000C03825A1}']
// IDirect3DRMUserVisual methods
function Init(d3drmUVProc: TD3DRMUserVisualCallback; lpArg: Pointer): HResult; stdcall;
['{59163de0-6d43-11cf-ac4a-0000c03825a1}']
(*
* IDirect3DRMUserVisual methods
*)
function Init (d3drmUVProc: TD3DRMUserVisualCallback;
lpArg: Pointer) : HResult; stdcall;
end;
 
IDirect3DRMArray = interface(IUnknown)
7407,72 → 11061,75
*)
end;
 
IDirect3DRMObjectarray = interface(IDirect3DRMArray)
function GetElement(index: DWORD; out lplpD3DRMObject: IDirect3DRMObject): HResult; stdcall;
IDirect3DRMObjectArray = interface (IDirect3DRMArray)
['{242f6bc2-3849-11d0-9b6d-0000c0781bc3}']
function GetElement (index: DWORD; out lplpD3DRMObject:
IDirect3DRMObject) : HResult; stdcall;
end;
 
IDirect3DRMDeviceArray = interface(IDirect3DRMArray)
['{EB16CB10-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMDevicearraymethods
function GetElement(index: DWORD; out lplpD3DRMDevice: IDirect3DRMDevice): HResult; stdcall;
['{eb16cb0e-d271-11ce-ac48-0000c03825a1}']
function GetElement (index: DWORD; out lplpD3DRMDevice:
IDirect3DRMDevice) : HResult; stdcall;
end;
 
IDirect3DRMFrameArray = interface(IDirect3DRMArray)
['{EB16CB12-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMFramearraymethods
['{eb16cb12-d271-11ce-ac48-0000c03825a1}']
function GetElement(index: DWORD; out lplpD3DRMFrame: IDirect3DRMFrame): HResult; stdcall;
end;
 
IDirect3DRMViewportArray = interface(IDirect3DRMArray)
['{EB16CB11-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMViewportarraymethods
function GetElement(index: DWORD; out lplpD3DRMViewport: IDirect3DRMViewport): HResult; stdcall;
['{eb16cb11-d271-11ce-ac48-0000c03825a1}']
function GetElement (index: DWORD; out lplpD3DRMViewport:
IDirect3DRMViewport) : HResult; stdcall;
end;
 
IDirect3DRMVisualArray = interface(IDirect3DRMArray)
['{EB16CB13-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMVisualarraymethods
function GetElement(index: DWORD; out lplpD3DRMVisual: IDirect3DRMVisual): HResult; stdcall;
['{eb16cb13-d271-11ce-ac48-0000c03825a1}']
function GetElement (index: DWORD; out lplpD3DRMVisual:
IDirect3DRMVisual) : HResult; stdcall;
end;
 
IDirect3DRMAnimationArray = interface(IDirect3DRMArray)
['{D5F1CAE0-4BD7-11D1-B974-0060083E45F3}']
function GetElement(index: DWORD; out lplpD3DRMAnimation: IDirect3DRMAnimation2): HResult; stdcall;
['{d5f1cae0-4bd7-11d1-b974-0060083e45f3}']
function GetElement (index: DWORD; out lplpD3DRMAnimation2:
IDirect3DRMAnimation2) : HResult; stdcall;
end;
 
IDirect3DRMPickedArray = interface(IDirect3DRMArray)
['{EB16CB16-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMPickedarraymethods
['{eb16cb16-d271-11ce-ac48-0000c03825a1}']
function GetPick(index: DWORD; out lplpVisual: IDirect3DRMVisual;
out lplpFrameArray: IDirect3DRMFrameArray;
var lpD3DRMPickDesc: TD3DRMPickDesc): HResult; stdcall;
const lpD3DRMPickDesc: TD3DRMPickDesc) : HResult; stdcall;
 
end;
 
IDirect3DRMLightArray = interface(IDirect3DRMArray)
['{EB16CB14-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMLightarraymethods
['{eb16cb14-d271-11ce-ac48-0000c03825a1}']
function GetElement(index: DWORD; out lplpD3DRMLight: IDirect3DRMLight): HResult; stdcall;
end;
 
 
IDirect3DRMFaceArray = interface(IDirect3DRMArray)
['{EB16CB17-D271-11CE-AC48-0000C03825A1}']
// IDirect3DRMFacearraymethods
['{eb16cb17-d271-11ce-ac48-0000c03825a1}']
function GetElement(index: DWORD; out lplpD3DRMFace: IDirect3DRMFace): HResult; stdcall;
end;
 
IDirect3DRMPicked2Array = interface(IDirect3DRMArray)
['{4516EC7B-8F20-11D0-9B6D-0000C0781BC3}']
// IDirect3DRMPicked2arraymethods
['{4516ec7b-8f20-11d0-9b6d-0000c0781bc3}']
function GetPick(index: DWORD; out lplpVisual: IDirect3DRMVisual;
out lplpFrameArray: IDirect3DRMFrameArray;
const lpD3DRMPickDesc2: D3DRMPICKDESC2): HResult; stdcall;
out lplpFrameArray: IDirect3DRMFrameArray; const lpD3DRMPickDesc2:
TD3DRMPickDesc2) : HResult; stdcall;
end;
 
IDirect3DRMInterpolator = interface(IDirect3DRMObject)
['{242F6BC1-3849-11D0-9B6D-0000C0781BC3}']
// IDirect3DRMInterpolator methods
['{242f6bc1-3849-11d0-9b6d-0000c0781bc3}']
(*
* IDirect3DRMInterpolator methods
*)
function AttachObject(lpD3DRMObject: IDirect3DRMObject): HResult; stdcall;
function GetAttachedObjects(lpD3DRMObjectArray: IDirect3DRMObjectArray): HResult; stdcall;
function GetAttachedObjects
(lpD3DRMObjectArray: IDirect3DRMObjectArray) : HResult; stdcall;
function DetachObject(lpD3DRMObject: IDirect3DRMObject): HResult; stdcall;
function SetIndex(d3dVal: TD3DValue): HResult; stdcall;
function GetIndex: TD3DValue; stdcall;
7480,163 → 11137,228
d3drmInterpFlags: TD3DRMInterpolationOptions): HResult; stdcall;
end;
 
IDirect3DRMClippedVisual = interface(IDirect3DRMVisual)
['{5434E733-6D66-11D1-BB0B-0000F875865A}']
// IDirect3DRMClippedVisual methods
IDirect3DRMClippedVisual = interface (IDirect3DRMObject)
['{5434e733-6d66-11d1-bb0b-0000f875865a}']
(*
* IDirect3DRMClippedVisual methods
*)
function Init(lpD3DRMVisual: IDirect3DRMVisual): HResult; stdcall;
function AddPlane(lpRef: IDirect3DRMFrame3; const lpdvPoint, lpdvNormal: TD3DVector;
dwFlags: DWORD; var lpdwReturnID: DWORD): HResult; stdcall;
function AddPlane (lpRef: IDirect3DRMFrame3;
const lpdvPoint, lpdvNormal: TD3DVector;
dwFlags: DWORD; out lpdwReturnID: DWORD) : HResult; stdcall;
function DeletePlane(dwID, dwFlags: DWORD): HResult; stdcall;
function GetPlaneIDs(var lpdwCount, lpdwID: DWORD; dwFlags: DWORD): HResult; stdcall;
function GetPlaneIDs (var lpdwCount: DWORD; out lpdwID: DWORD; dwFlags: DWORD) : HResult; stdcall;
function GetPlane (dwID: DWORD; lpRef: IDirect3DRMFrame3;
var lpdvPoint, lpdvNormal: TD3DVector; dwFlags: DWORD): HResult; stdcall;
out lpdvPoint, lpdvNormal: TD3DVector; dwFlags: DWORD) : HResult; stdcall;
function SetPlane (dwID: DWORD; lpRef: IDirect3DRMFrame3;
const lpdvPoint, lpdvNormal: TD3DVector; dwFlags: DWORD): HResult; stdcall;
end;
 
IDirect3DRMWinDevice = interface(IDirect3DRMObject)
['{C5016CC0-D273-11CE-AC48-0000C03825A1}']
// IDirect3DRMWinDevice methods
function HandlePaint(hDC: HDC): HResult; stdcall;
function HandleActivate(wparam: WORD): HResult; stdcall;
end;
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: d3drm.h
* Content: Direct3DRM include file
*
***************************************************************************)
 
function D3DRMErrorString(Value: HResult) : string;
 
//type
//TRefClsID = TGUID;
 
type
TD3DRMDevicePaletteCallback = procedure (lpDirect3DRMDev: IDirect3DRMDevice;
lpArg: Pointer; dwIndex: DWORD; red, green, blue: LongInt); cdecl;
 
(*
* Direct3DRM Object Class (for CoCreateInstance())
*)
const
CLSID_CDirect3DRM: TGUID =
(D1:$4516ec41;D2:$8f20;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
 
type
IDirect3DRM = interface(IUnknown)
['{2BC49361-8327-11CF-AC4A-0000C03825A1}']
// IDirect3DRM methods
function CreateObject(const rclsid: TGUID; pUnkOuter: IUnknown;
['{2bc49361-8327-11cf-ac4a-0000c03825a1}']
function CreateObject (const rclsid: TRefClsID; pUnkOuter: IUnknown;
const riid: TGUID; out ppv): HResult; stdcall;
function CreateFrame(lpD3DRMFrame: IDirect3DRMFrame;
out lplpD3DRMFrame: IDirect3DRMFrame): HResult; stdcall;
function CreateMesh(out lplpD3DRMMesh: IDirect3DRMMesh): HResult; stdcall;
function CreateMeshBuilder(out lplpD3DRMMeshBuilder:
var lplpD3DRMFrame: IDirect3DRMFrame) : HResult; stdcall;
function CreateMesh (var lplpD3DRMMesh: IDirect3DRMMesh) : HResult; stdcall;
function CreateMeshBuilder (var lplpD3DRMMeshBuilder:
IDirect3DRMMeshBuilder): HResult; stdcall;
function CreateFace(out lplpd3drmFace: IDirect3DRMFace): HResult; stdcall;
function CreateAnimation(out lplpD3DRMAnimation: IDirect3DRMAnimation): HResult; stdcall;
function CreateAnimationSet(out lplpD3DRMAnimationSet:
function CreateFace (var lplpd3drmFace: IDirect3DRMFace) : HResult; stdcall;
function CreateAnimation (var lplpD3DRMAnimation: IDirect3DRMAnimation) : HResult; stdcall;
function CreateAnimationSet (var lplpD3DRMAnimationSet:
IDirect3DRMAnimationSet): HResult; stdcall;
function CreateTexture(const lpImage: TD3DRMImage;
out lplpD3DRMTexture: IDirect3DRMTexture): HResult; stdcall;
function CreateTexture (var lpImage: TD3DRMImage;
var lplpD3DRMTexture: IDirect3DRMTexture) : HResult; stdcall;
function CreateLight(d3drmltLightType: TD3DRMLightType;
cColor: TD3DColor; out lplpD3DRMLight: IDirect3DRMLight): HResult; stdcall;
function CreateLightRGB(ltLightType: TD3DRMLightType; vRed, vGreen, vBlue:
TD3DValue; out lplpD3DRMLight: IDirect3DRMLight): HResult; stdcall;
function CreateMaterial(vPower: TD3DValue; out lplpD3DRMMaterial:
cColor: TD3DColor; var lplpD3DRMLight: IDirect3DRMLight) : HResult; stdcall;
function CreateLightRGB (ltLightType: TD3DRMLightType; vRed,
vGreen, vBlue: TD3DValue; var lplpD3DRMLight: IDirect3DRMLight) : HResult; stdcall;
function CreateMaterial (vPower: TD3DValue; var lplpD3DRMMaterial:
IDirect3DRMMaterial): HResult; stdcall;
function CreateDevice(dwWidth, dwHeight: DWORD; out lplpD3DRMDevice:
function CreateDevice (dwWidth, dwHeight: DWORD; var lplpD3DRMDevice:
IDirect3DRMDevice): HResult; stdcall;
function CreateDeviceFromSurface(const lpGUID: TGUID; lpDD: IDirectDraw;
lpDDSBack: IDirectDrawSurface; out lplpD3DRMDevice: IDirect3DRMDevice): HResult; stdcall;
 
(* Create a Windows Device using DirectDraw surfaces *)
function CreateDeviceFromSurface (lpGUID: PGUID; lpDD: IDirectDraw;
lpDDSBack: IDirectDrawSurface; var lplpD3DRMDevice: IDirect3DRMDevice) :
HResult; stdcall;
 
(* Create a Windows Device using D3D objects *)
function CreateDeviceFromD3D(lpD3D: IDirect3D; lpD3DDev: IDirect3DDevice;
out lplpD3DRMDevice: IDirect3DRMDevice): HResult; stdcall;
var lplpD3DRMDevice: IDirect3DRMDevice) : HResult; stdcall;
 
function CreateDeviceFromClipper(lpDDClipper: IDirectDrawClipper;
const lpGUID: TGUID; width, height: DWORD; out lplpD3DRMDevice:
lpGUID: PGUID; width, height: Integer; var lplpD3DRMDevice:
IDirect3DRMDevice): HResult; stdcall;
 
function CreateTextureFromSurface(lpDDS: IDirectDrawSurface;
out lplpD3DRMTexture: IDirect3DRMTexture): HResult; stdcall;
var lplpD3DRMTexture: IDirect3DRMTexture) : HResult; stdcall;
 
function CreateShadow(lpVisual: IDirect3DRMVisual;
lpLight: IDirect3DRMLight; px, py, pz, nx, ny, nz: TD3DValue;
out lplpShadow: IDirect3DRMVisual): HResult; stdcall;
var lplpShadow: IDirect3DRMVisual) : HResult; stdcall;
function CreateViewport(lpDev: IDirect3DRMDevice;
lpCamera: IDirect3DRMFrame; dwXPos, dwYPos, dwWidth, dwHeight: DWORD;
out lplpD3DRMViewport: IDirect3DRMViewport): HResult; stdcall;
var lplpD3DRMViewport: IDirect3DRMViewport) : HResult; stdcall;
function CreateWrap(wraptype: TD3DRMWrapType; lpRef: IDirect3DRMFrame;
ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv: TD3DValue;
out lplpD3DRMWrap: IDirect3DRMWrap): HResult; stdcall;
var lplpD3DRMWrap: IDirect3DRMWrap) : HResult; stdcall;
function CreateUserVisual(fn: TD3DRMUserVisualCallback; lpArg: Pointer;
out lplpD3DRMUV: IDirect3DRMUserVisual): HResult; stdcall;
function LoadTexture(lpFileName: LPSTR; out lplpD3DRMTexture:
var lplpD3DRMUV: IDirect3DRMUserVisual) : HResult; stdcall;
function LoadTexture (lpFileName: PAnsiChar; var lplpD3DRMTexture:
IDirect3DRMTexture): HResult; stdcall;
function LoadTextureFromResource(rs: HRSRC; out lplpD3DRMTexture:
function LoadTextureFromResource (rs: HRSRC; var lplpD3DRMTexture:
IDirect3DRMTexture): HResult; stdcall;
function SetSearchPath(lpPath: LPSTR): HResult; stdcall;
function AddSearchPath(lpPath: LPSTR): HResult; stdcall;
function GetSearchPath(var lpdwSize: DWORD; lpszPath: LPSTR): HResult; stdcall;
 
function SetSearchPath (lpPath: PAnsiChar) : HResult; stdcall;
function AddSearchPath (lpPath: PAnsiChar) : HResult; stdcall;
function GetSearchPath (var lpdwSize: DWORD; lpszPath: PAnsiChar) : HResult; stdcall;
function SetDefaultTextureColors(dwColors: DWORD): HResult; stdcall;
function SetDefaultTextureShades(dwShades: DWORD): HResult; stdcall;
function GetDevices(out lplpDevArray: IDirect3DRMDeviceArray): HResult; stdcall;
function GetNamedObject(lpName: LPSTR; out lplpD3DRMObject:
IDirect3DRMObject): HResult; stdcall;
 
function GetDevices (var lplpDevArray: IDirect3DRMDeviceArray) : HResult; stdcall;
function GetNamedObject (lpName: PAnsiChar; var lplpD3DRMObject: IDirect3DRMObject) : HResult; stdcall;
 
function EnumerateObjects(func: TD3DRMObjectCallback; lpArg: Pointer): HResult; stdcall;
 
function Load(lpvObjSource, lpvObjID: Pointer; var lplpGUIDs: PGUID;
dwcGUIDs: DWORD; d3drmLOFlags: TD3DRMLoadOptions; d3drmLoadProc:
D3DRMLOADCALLBACK; lpArgLP: Pointer; d3drmLoadTextureProc:
TD3DRMLoadTextureCallback; lpArgLTP: Pointer;
lpParentFrame: IDirect3DRMFrame): HResult; stdcall;
TD3DRMLoadCallback; lpArgLP: Pointer; d3drmLoadTextureProc:
TD3DRMLoadTextureCallback; lpArgLTP: Pointer; lpParentFrame:
IDirect3DRMFrame) : HResult; stdcall;
function Tick(d3dvalTick: TD3DValue): HResult; stdcall;
end;
 
// Moved from D3DRMObj, to avoid circular unit reference:
 
IDirect3DRMObject2 = interface (IUnknown)
['{4516ec7c-8f20-11d0-9b6d-0000c0781bc3}']
(*
* IDirect3DRMObject2 methods
*)
function AddDestroyCallback (lpCallback: TD3DRMObjectCallback;
lpArg: Pointer) : HResult; stdcall;
function Clone (pUnkOuter: IUnknown; const riid: TGUID;
out ppvObj) : HResult; stdcall;
function DeleteDestroyCallback (d3drmObjProc: TD3DRMObjectCallback;
lpArg: Pointer) : HResult; stdcall;
function GetClientData (dwID: DWORD; out lplpvData: Pointer) : HResult; stdcall;
function GetDirect3DRM (out lplpDirect3DRM: IDirect3DRM) : HResult; stdcall;
function GetName (var lpdwSize: DWORD; lpName: PAnsiChar) : HResult; stdcall;
function SetClientData (dwID: DWORD; lpvData: pointer; dwFlags: DWORD) : HResult; stdcall;
function SetName (lpName: PAnsiChar) : HResult; stdcall;
function GetAge (dwFlags: DWORD; out pdwAge: DWORD) : HResult; stdcall;
end;
 
IID_IDirect3DRMObject2 = IDirect3DRMObject2;
 
IDirect3DRM2 = interface(IUnknown)
['{4516ECC8-8F20-11D0-9B6D-0000C0781BC3}']
// IDirect3DRM2 methods
function CreateObject(const rclsid: TGUID; pUnkOuter: IUnknown;
['{4516ecc8-8f20-11d0-9b6d-0000c0781bc3}']
function CreateObject (const rclsid: TRefClsID; pUnkOuter: IUnknown;
const riid: TGUID; out ppv): HResult; stdcall;
function CreateFrame(lpD3DRMFrame: IDirect3DRMFrame2;
out lplpD3DRMFrame: IDirect3DRMFrame2): HResult; stdcall;
function CreateMesh(out lplpD3DRMMesh: IDirect3DRMMesh): HResult; stdcall;
function CreateMeshBuilder(out lplpD3DRMMeshBuilder:
var lplpD3DRMFrame: IDirect3DRMFrame2) : HResult; stdcall;
function CreateMesh (var lplpD3DRMMesh: IDirect3DRMMesh) : HResult; stdcall;
function CreateMeshBuilder (var lplpD3DRMMeshBuilder:
IDirect3DRMMeshBuilder2): HResult; stdcall;
function CreateFace(out lplpd3drmFace: IDirect3DRMFace): HResult; stdcall;
function CreateAnimation(out lplpD3DRMAnimation: IDirect3DRMAnimation): HResult; stdcall;
function CreateAnimationSet(out lplpD3DRMAnimationSet:
function CreateFace (var lplpd3drmFace: IDirect3DRMFace) : HResult; stdcall;
function CreateAnimation (var lplpD3DRMAnimation: IDirect3DRMAnimation) : HResult; stdcall;
function CreateAnimationSet (var lplpD3DRMAnimationSet:
IDirect3DRMAnimationSet): HResult; stdcall;
function CreateTexture(const lpImage: TD3DRMImage;
out lplpD3DRMTexture: IDirect3DRMTexture2): HResult; stdcall;
function CreateTexture (var lpImage: TD3DRMImage;
var lplpD3DRMTexture: IDirect3DRMTexture2) : HResult; stdcall;
function CreateLight(d3drmltLightType: TD3DRMLightType;
cColor: TD3DColor; out lplpD3DRMLight: IDirect3DRMLight): HResult; stdcall;
cColor: TD3DColor; var lplpD3DRMLight: IDirect3DRMLight) : HResult; stdcall;
function CreateLightRGB(ltLightType: TD3DRMLightType; vRed,
vGreen, vBlue: TD3DValue; out lplpD3DRMLight: IDirect3DRMLight): HResult; stdcall;
function CreateMaterial(vPower: TD3DValue; out lplpD3DRMMaterial:
vGreen, vBlue: TD3DValue; var lplpD3DRMLight: IDirect3DRMLight) : HResult; stdcall;
function CreateMaterial (vPower: TD3DValue; var lplpD3DRMMaterial:
IDirect3DRMMaterial): HResult; stdcall;
function CreateDevice(dwWidth, dwHeight: DWORD; out lplpD3DRMDevice:
function CreateDevice (dwWidth, dwHeight: DWORD; var lplpD3DRMDevice:
IDirect3DRMDevice2): HResult; stdcall;
function CreateDeviceFromSurface(const lpGUID: TGUID; lpDD: IDirectDraw;
lpDDSBack: IDirectDrawSurface; out lplpD3DRMDevice: IDirect3DRMDevice2): HResult; stdcall;
 
(* Create a Windows Device using DirectDraw surfaces *)
function CreateDeviceFromSurface (lpGUID: PGUID; lpDD: IDirectDraw;
lpDDSBack: IDirectDrawSurface; var lplpD3DRMDevice: IDirect3DRMDevice2) :
HResult; stdcall;
 
(* Create a Windows Device using D3D objects *)
function CreateDeviceFromD3D(lpD3D: IDirect3D2; lpD3DDev: IDirect3DDevice2;
out lplpD3DRMDevice: IDirect3DRMDevice2): HResult; stdcall;
var lplpD3DRMDevice: IDirect3DRMDevice2) : HResult; stdcall;
 
function CreateDeviceFromClipper(lpDDClipper: IDirectDrawClipper;
const lpGUID: TGUID; width, height: DWORD; out lplpD3DRMDevice:
lpGUID: PGUID; width, height: Integer; var lplpD3DRMDevice:
IDirect3DRMDevice2): HResult; stdcall;
 
function CreateTextureFromSurface( lpDDS: IDirectDrawSurface;
out lplpD3DRMTexture: IDirect3DRMTexture2): HResult; stdcall;
var lplpD3DRMTexture: IDirect3DRMTexture2) : HResult; stdcall;
 
function CreateShadow(lpVisual: IDirect3DRMVisual;
lpLight: IDirect3DRMLight; px, py, pz, nx, ny, nz: TD3DValue;
out lplpShadow: IDirect3DRMVisual): HResult; stdcall;
var lplpShadow: IDirect3DRMVisual) : HResult; stdcall;
function CreateViewport(lpDev: IDirect3DRMDevice;
lpCamera: IDirect3DRMFrame; dwXPos, dwYPos, dwWidth, dwHeight: DWORD;
out lplpD3DRMViewport: IDirect3DRMViewport): HResult; stdcall;
var lplpD3DRMViewport: IDirect3DRMViewport) : HResult; stdcall;
function CreateWrap(wraptype: TD3DRMWrapType; lpRef: IDirect3DRMFrame;
ox, oy, oz, dx, dy, dz, ux, uy, uz, ou, ov, su, sv: TD3DValue;
out lplpD3DRMWrap: IDirect3DRMWrap): HResult; stdcall;
var lplpD3DRMWrap: IDirect3DRMWrap) : HResult; stdcall;
function CreateUserVisual(fn: TD3DRMUserVisualCallback; lpArg: Pointer;
out lplpD3DRMUV: IDirect3DRMUserVisual): HResult; stdcall;
function LoadTexture(lpFileName: LPSTR; out lplpD3DRMTexture:
var lplpD3DRMUV: IDirect3DRMUserVisual) : HResult; stdcall;
function LoadTexture (lpFileName: PAnsiChar; var lplpD3DRMTexture:
IDirect3DRMTexture2): HResult; stdcall;
function LoadTextureFromResource(hModule: HModule; str: LPCSTR; out lplpD3DRMTexture:
function LoadTextureFromResource (rs: HRSRC; var lplpD3DRMTexture:
IDirect3DRMTexture2): HResult; stdcall;
function SetSearchPath(lpPath: LPSTR): HResult; stdcall;
function AddSearchPath(lpPath: LPSTR): HResult; stdcall;
function GetSearchPath(var lpdwSize: DWORD; lpszPath: LPSTR): HResult; stdcall;
 
function SetSearchPath (lpPath: PAnsiChar) : HResult; stdcall;
function AddSearchPath (lpPath: PAnsiChar) : HResult; stdcall;
function GetSearchPath (var lpdwSize: DWORD; lpszPath: PAnsiChar) : HResult; stdcall;
function SetDefaultTextureColors(dwColors: DWORD): HResult; stdcall;
function SetDefaultTextureShades(dwShades: DWORD): HResult; stdcall;
function GetDevices(out lplpDevArray: IDirect3DRMDeviceArray): HResult; stdcall;
function GetNamedObject(lpName: LPSTR; out lplpD3DRMObject:
 
function GetDevices (var lplpDevArray: IDirect3DRMDeviceArray) : HResult; stdcall;
function GetNamedObject (lpName: PAnsiChar; var lplpD3DRMObject:
IDirect3DRMObject): HResult; stdcall;
 
function EnumerateObjects(func: TD3DRMObjectCallback; lpArg: Pointer): HResult; stdcall;
 
function Load(lpvObjSource, lpvObjID: Pointer; var lplpGUIDs: PGUID;
dwcGUIDs: DWORD; d3drmLOFlags: TD3DRMLoadOptions; d3drmLoadProc:
D3DRMLOADCALLBACK; lpArgLP: Pointer; d3drmLoadTextureProc:
TD3DRMLoadCallback; lpArgLP: Pointer; d3drmLoadTextureProc:
TD3DRMLoadTextureCallback; lpArgLTP: Pointer; lpParentFrame:
IDirect3DRMFrame): HResult; stdcall;
function Tick(d3dvalTick: TD3DValue): HResult; stdcall;
function CreateProgressiveMesh(out lplpD3DRMProgressiveMesh:
function CreateProgressiveMesh (var lplpD3DRMProgressiveMesh:
IDirect3DRMProgressiveMesh): HResult; stdcall;
end;
 
IDirect3DRM3 = interface(IUnknown)
['{4516EC83-8F20-11D0-9B6D-0000C0781BC3}']
// IDirect3DRM2 methods
function CreateObject(const rclsid: TGUID; pUnkOuter: IUnknown;
['{4516ec83-8f20-11d0-9b6d-0000c0781bc3}']
function CreateObject (const rclsid: TRefClsID; pUnkOuter: IUnknown;
const riid: TGUID; out ppv): HResult; stdcall;
function CreateFrame(lpD3DRMFrame: IDirect3DRMFrame3;
out lplpD3DRMFrame: IDirect3DRMFrame3): HResult; stdcall;
7657,18 → 11379,26
IDirect3DRMMaterial2): HResult; stdcall;
function CreateDevice(dwWidth, dwHeight: DWORD; out lplpD3DRMDevice:
IDirect3DRMDevice3): HResult; stdcall;
function CreateDeviceFromSurface(const lpGUID: TGUID; lpDD: IDirectDraw;
lpDDSBack: IDirectDrawSurface; out lplpD3DRMDevice: IDirect3DRMDevice3): HResult; stdcall;
 
(* Create a Windows Device using DirectDraw surfaces *)
function CreateDeviceFromSurface (lpGUID: PGUID; lpDD: IDirectDraw;
lpDDSBack: IDirectDrawSurface; dwFlags: DWORD;
out lplpD3DRMDevice: IDirect3DRMDevice3) : HResult; stdcall;
 
(* Create a Windows Device using D3D objects *)
function CreateDeviceFromD3D(lpD3D: IDirect3D2; lpD3DDev: IDirect3DDevice2;
out lplpD3DRMDevice: IDirect3DRMDevice3): HResult; stdcall;
 
function CreateDeviceFromClipper(lpDDClipper: IDirectDrawClipper;
const lpGUID: TGUID; width, height: DWORD; out lplpD3DRMDevice:
IDirect3DRMDevice3): HResult; stdcall;
lpGUID: PGUID; width, height: Integer;
out lplpD3DRMDevice: IDirect3DRMDevice3) : HResult; stdcall;
 
function CreateTextureFromSurface( lpDDS: IDirectDrawSurface;
out lplpD3DRMTexture: IDirect3DRMTexture3): HResult; stdcall;
function CreateShadow(lpVisual: IDirect3DRMVisual;
lpLight: IDirect3DRMLight; px, py, pz, nx, ny, nz: TD3DValue;
out lplpShadow: IDirect3DRMShadow): HResult; stdcall;
 
function CreateShadow (pUnk: IUnknown; lpLight: IDirect3DRMLight;
px, py, pz, nx, ny, nz: TD3DValue;
out lplpShadow: IDirect3DRMShadow2) : HResult; stdcall;
function CreateViewport(lpDev: IDirect3DRMDevice3;
lpCamera: IDirect3DRMFrame3; dwXPos, dwYPos, dwWidth, dwHeight: DWORD;
out lplpD3DRMViewport: IDirect3DRMViewport2): HResult; stdcall;
7677,733 → 11407,687
out lplpD3DRMWrap: IDirect3DRMWrap): HResult; stdcall;
function CreateUserVisual(fn: TD3DRMUserVisualCallback; lpArg: Pointer;
out lplpD3DRMUV: IDirect3DRMUserVisual): HResult; stdcall;
function LoadTexture(lpFileName: LPSTR; out lplpD3DRMTexture:
function LoadTexture (lpFileName: PAnsiChar; out lplpD3DRMTexture:
IDirect3DRMTexture3): HResult; stdcall;
function LoadTextureFromResource(hModule: HModule; str: LPCSTR; out lplpD3DRMTexture:
IDirect3DRMTexture3): HResult; stdcall;
function LoadTextureFromResource (hModule: HMODULE;
strName, strType: PAnsiChar;
out lplpD3DRMTexture: IDirect3DRMTexture3) : HResult; stdcall;
 
function SetSearchPath(lpPath: LPSTR): HResult; stdcall;
function AddSearchPath(lpPath: LPSTR): HResult; stdcall;
function GetSearchPath(var lpdwSize: DWORD; lpszPath: LPSTR): HResult; stdcall;
function SetSearchPath (lpPath: PAnsiChar) : HResult; stdcall;
function AddSearchPath (lpPath: PAnsiChar) : HResult; stdcall;
function GetSearchPath (var lpdwSize: DWORD; lpszPath: PAnsiChar) : HResult; stdcall;
function SetDefaultTextureColors(dwColors: DWORD): HResult; stdcall;
function SetDefaultTextureShades(dwShades: DWORD): HResult; stdcall;
 
function GetDevices(out lplpDevArray: IDirect3DRMDeviceArray): HResult; stdcall;
function GetNamedObject(lpName: LPSTR; out lplpD3DRMObject:
IDirect3DRMObject): HResult; stdcall;
function GetNamedObject (lpName: PAnsiChar; out lplpD3DRMObject: IDirect3DRMObject) : HResult; stdcall;
 
function EnumerateObjects(func: TD3DRMObjectCallback; lpArg: Pointer): HResult; stdcall;
 
function Load(lpvObjSource, lpvObjID: Pointer; var lplpGUIDs: PGUID;
dwcGUIDs: DWORD; d3drmLOFlags: TD3DRMLoadOptions; d3drmLoadProc:
D3DRMLOADCALLBACK; lpArgLP: Pointer; d3drmLoadTextureProc:
TD3DRMLoadCallback; lpArgLP: Pointer; d3drmLoadTextureProc:
TD3DRMLoadTexture3Callback; lpArgLTP: Pointer; lpParentFrame:
IDirect3DRMFrame3): HResult; stdcall;
function Tick(d3dvalTick: TD3DValue): HResult; stdcall;
function CreateProgressiveMesh(out lplpD3DRMProgressiveMesh:
IDirect3DRMProgressiveMesh): HResult; stdcall;
// IDirect3RM3 methods
function RegisterClient(const rguid: TGUID; var lpdwID: DWORD): HResult; stdcall;
 
(* Used with IDirect3DRMObject2 *)
function RegisterClient (const rguid: TGUID; out lpdwID: DWORD) : HResult; stdcall;
function UnregisterClient(const rguid: TGUID): HResult; stdcall;
 
function CreateClippedVisual(lpVisual: IDirect3DRMVisual;
out lpClippedVisual: IDirect3DRMVisual): HResult; stdcall;
function SetOptions(lpdwOptions: DWORD): HResult; stdcall;
function GetOptions(var lpdwOptions: DWORD): HResult; stdcall;
lpClippedVisual: IDirect3DRMClippedVisual) : HResult; stdcall;
function SetOptions (dwOptions: DWORD) : HResult; stdcall;
function GetOptions (out lpdwOptions: DWORD) : HResult; stdcall;
end;
 
IID_IDirect3DRM = IDirect3DRM;
IID_IDirect3DRM2 = IDirect3DRM2;
IID_IDirect3DRM3 = IDirect3DRM3;
 
const
D3DRM_OK = HResult(DD_OK);
D3DRMERR_BADOBJECT = HResult($88760000 + 781);
D3DRMERR_BADTYPE = HResult($88760000 + 782);
D3DRMERR_BADALLOC = HResult($88760000 + 783);
D3DRMERR_FACEUSED = HResult($88760000 + 784);
D3DRMERR_NOTFOUND = HResult($88760000 + 785);
D3DRMERR_NOTDONEYET = HResult($88760000 + 786);
D3DRMERR_FILENOTFOUND = HResult($88760000 + 787);
D3DRMERR_BADFILE = HResult($88760000 + 788);
D3DRMERR_BADDEVICE = HResult($88760000 + 789);
D3DRMERR_BADVALUE = HResult($88760000 + 790);
D3DRMERR_BADMAJORVERSION = HResult($88760000 + 791);
D3DRMERR_BADMINORVERSION = HResult($88760000 + 792);
D3DRMERR_UNABLETOEXECUTE = HResult($88760000 + 793);
D3DRMERR_LIBRARYNOTFOUND = HResult($88760000 + 794);
D3DRMERR_INVALIDLIBRARY = HResult($88760000 + 795);
D3DRMERR_PENDING = HResult($88760000 + 796);
D3DRMERR_NOTENOUGHDATA = HResult($88760000 + 797);
D3DRMERR_REQUESTTOOLARGE = HResult($88760000 + 798);
D3DRMERR_REQUESTTOOSMALL = HResult($88760000 + 799);
D3DRMERR_CONNECTIONLOST = HResult($88760000 + 800);
D3DRMERR_LOADABORTED = HResult($88760000 + 801);
D3DRMERR_NOINTERNET = HResult($88760000 + 802);
D3DRMERR_BADCACHEFILE = HResult($88760000 + 803);
D3DRMERR_BOXNOTSET = HResult($88760000 + 804);
D3DRMERR_BADPMDATA = HResult($88760000 + 805);
D3DRMERR_CLIENTNOTREGISTERED = HResult($88760000 + 806);
D3DRMERR_NOTCREATEDFROMDDS = HResult($88760000 + 807);
D3DRMERR_NOSUCHKEY = HResult($88760000 + 808);
D3DRMERR_INCOMPATABLEKEY = HResult($88760000 + 809);
D3DRMERR_ELEMENTINUSE = HResult($88760000 + 810);
D3DRMERR_TEXTUREFORMATNOTFOUND = HResult($88760000 + 811);
D3DRMERR_NOTAGGREGATED = HResult($88760000 + 812);
MAKE_D3RMDHRESULT = HResult($88760000);
 
{ Create a Direct3DRM API }
function Direct3DRMCreate(out lplpDirect3DRM: IDirect3DRM): HResult; stdcall;
D3DRM_OK = DD_OK;
D3DRMERR_BADOBJECT = MAKE_D3RMDHRESULT + 781;
D3DRMERR_BADTYPE = MAKE_D3RMDHRESULT + 782;
D3DRMERR_BADALLOC = MAKE_D3RMDHRESULT + 783;
D3DRMERR_FACEUSED = MAKE_D3RMDHRESULT + 784;
D3DRMERR_NOTFOUND = MAKE_D3RMDHRESULT + 785;
D3DRMERR_NOTDONEYET = MAKE_D3RMDHRESULT + 786;
D3DRMERR_FILENOTFOUND = MAKE_D3RMDHRESULT + 787;
D3DRMERR_BADFILE = MAKE_D3RMDHRESULT + 788;
D3DRMERR_BADDEVICE = MAKE_D3RMDHRESULT + 789;
D3DRMERR_BADVALUE = MAKE_D3RMDHRESULT + 790;
D3DRMERR_BADMAJORVERSION = MAKE_D3RMDHRESULT + 791;
D3DRMERR_BADMINORVERSION = MAKE_D3RMDHRESULT + 792;
D3DRMERR_UNABLETOEXECUTE = MAKE_D3RMDHRESULT + 793;
D3DRMERR_LIBRARYNOTFOUND = MAKE_D3RMDHRESULT + 794;
D3DRMERR_INVALIDLIBRARY = MAKE_D3RMDHRESULT + 795;
D3DRMERR_PENDING = MAKE_D3RMDHRESULT + 796;
D3DRMERR_NOTENOUGHDATA = MAKE_D3RMDHRESULT + 797;
D3DRMERR_REQUESTTOOLARGE = MAKE_D3RMDHRESULT + 798;
D3DRMERR_REQUESTTOOSMALL = MAKE_D3RMDHRESULT + 799;
D3DRMERR_CONNECTIONLOST = MAKE_D3RMDHRESULT + 800;
D3DRMERR_LOADABORTED = MAKE_D3RMDHRESULT + 801;
D3DRMERR_NOINTERNET = MAKE_D3RMDHRESULT + 802;
D3DRMERR_BADCACHEFILE = MAKE_D3RMDHRESULT + 803;
D3DRMERR_BOXNOTSET = MAKE_D3RMDHRESULT + 804;
D3DRMERR_BADPMDATA = MAKE_D3RMDHRESULT + 805;
D3DRMERR_CLIENTNOTREGISTERED = MAKE_D3RMDHRESULT + 806;
D3DRMERR_NOTCREATEDFROMDDS = MAKE_D3RMDHRESULT + 807;
D3DRMERR_NOSUCHKEY = MAKE_D3RMDHRESULT + 808;
D3DRMERR_INCOMPATABLEKEY = MAKE_D3RMDHRESULT + 809;
D3DRMERR_ELEMENTINUSE = MAKE_D3RMDHRESULT + 810;
D3DRMERR_TEXTUREFORMATNOTFOUND = MAKE_D3RMDHRESULT + 811;
 
(* Create a Direct3DRM API *)
var
Direct3DRMCreate : function (out lplpDirect3DRM: IDirect3DRM) : HResult; stdcall;
 
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: d3drmwin.h
* Content: Direct3DRM include file
*
***************************************************************************)
 
type
IDirect3DRMWinDevice = interface (IDirect3DRMObject)
['{c5016cc0-d273-11ce-ac48-0000c03825a1}']
(*
* IDirect3DRMWinDevice methods
*)
 
(* Repaint the window with the last frame which was rendered. *)
function HandlePaint (hDC: HDC) : HResult; stdcall;
 
(* Respond to a WM_ACTIVATE message. *)
function HandleActivate (wparam: WORD) : HResult; stdcall;
end;
 
(*
* GUIDS used by Direct3DRM Windows interface
*)
IID_IDirect3DRMWinDevice = IDirect3DRMWinDevice;
 
(***************************************************************************
*
* Copyright (C) 1998-1999 Microsoft Corporation. All Rights Reserved.
*
* File: dxfile.h
* File: rmxfguid.h
*
* Content: DirectX File public header file
* Content: Defines GUIDs of D3DRM's templates.
*
***************************************************************************)
 
{ DirectXFile Object Class Id (for CoCreateInstance()) }
 
const
CLSID_CDirectXFile: TGUID = '{4516EC43-8F20-11D0-9B6D-0000C0781BC3}';
(* {2B957100-9E9A-11cf-AB39-0020AF71E433} *)
TID_D3DRMInfo: TGUID =
(D1:$2b957100;D2:$9e9a;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
{ DirectX File Interface GUIDs. }
(* {3D82AB44-62DA-11cf-AB39-0020AF71E433} *)
TID_D3DRMMesh: TGUID =
(D1:$3d82ab44;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
IID_IDirectXFile: TGUID = '{3D82AB40-62DA-11CF-AB39-0020AF71E433}';
IID_IDirectXFileEnumObject: TGUID = '{3D82AB41-62DA-11CF-AB39-0020AF71E433}';
IID_IDirectXFileSaveObject: TGUID = '{3D82AB42-62DA-11CF-AB39-0020AF71E433}';
IID_IDirectXFileObject: TGUID = '{3D82AB43-62DA-11CF-AB39-0020AF71E433}';
IID_IDirectXFileData: TGUID = '{3D82AB44-62DA-11CF-AB39-0020AF71E433}';
IID_IDirectXFileDataReference: TGUID = '{3D82AB45-62DA-11CF-AB39-0020AF71E433}';
IID_IDirectXFileBinary: TGUID = '{3D82AB46-62DA-11CF-AB39-0020AF71E433}';
(* {3D82AB5E-62DA-11cf-AB39-0020AF71E433} *)
TID_D3DRMVector: TGUID =
(D1:$3d82ab5e;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
type
TDXFileFormat = DWORD;
DXFILEFORMAT = TDXFileFormat;
(* {3D82AB5F-62DA-11cf-AB39-0020AF71E433} *)
TID_D3DRMMeshFace: TGUID =
(D1:$3d82ab5f;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
const
DXFILEFORMAT_BINARY = 0;
DXFILEFORMAT_TEXT = 1;
DXFILEFORMAT_COMPRESSED = 2;
(* {3D82AB4D-62DA-11cf-AB39-0020AF71E433} *)
TID_D3DRMMaterial: TGUID =
(D1:$3d82ab4d;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
type
TDXFileLoadOptions = DWORD;
DXFILELOADOPTIONS = TDXFileLoadOptions;
(* {35FF44E1-6C7C-11cf-8F52-0040333594A3} *)
TID_D3DRMMaterialArray: TGUID =
(D1:$35ff44e1;D2:$6c7c;D3:$11cf;D4:($8F,$52,$00,$40,$33,$35,$94,$a3));
 
const
DXFILELOAD_FROMFILE = $00;
DXFILELOAD_FROMRESOURCE = $01;
DXFILELOAD_FROMMEMORY = $02;
DXFILELOAD_FROMSTREAM = $04;
DXFILELOAD_FROMURL = $08;
(* {3D82AB46-62DA-11cf-AB39-0020AF71E433} *)
TID_D3DRMFrame: TGUID =
(D1:$3d82ab46;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
type
PDXFileLoadResource = ^TDXFileLoadResource;
TDXFileLoadResource = record
hModule: HModule;
lpName: PChar;
lpType: PChar;
end;
(* {F6F23F41-7686-11cf-8F52-0040333594A3} *)
TID_D3DRMFrameTransformMatrix: TGUID =
(D1:$f6f23f41;D2:$7686;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
DXFILELOADRESOURCE = TDXFileLoadResource;
LPDXFILELOADRESOURCE = PDXFileLoadResource;
(* {F6F23F42-7686-11cf-8F52-0040333594A3} *)
TID_D3DRMMeshMaterialList: TGUID =
(D1:$f6f23f42;D2:$7686;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
PDXFileLoadMemory = ^TDXFileLoadMemory;
TDXFileLoadMemory = record
lpMemory: Pointer;
dSize: DWORD;
end;
(* {F6F23F40-7686-11cf-8F52-0040333594A3} *)
TID_D3DRMMeshTextureCoords: TGUID =
(D1:$f6f23f40;D2:$7686;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
DXFILELOADMEMORY = TDXFileLoadMemory;
LPDXFILELOADMEMORY = PDXFileLoadMemory;
(* {F6F23F43-7686-11cf-8F52-0040333594A3} *)
TID_D3DRMMeshNormals: TGUID =
(D1:$f6f23f43;D2:$7686;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
{ DirectX File object types. }
(* {F6F23F44-7686-11cf-8F52-0040333594A3} *)
TID_D3DRMCoords2d: TGUID =
(D1:$f6f23f44;D2:$7686;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
type
IDirectXFile = interface;
IDirectXFileEnumObject = interface;
IDirectXFileSaveObject = interface;
IDirectXFileObject = interface;
IDirectXFileData = interface;
IDirectXFileDataReference = interface;
IDirectXFileBinary = interface;
(* {F6F23F45-7686-11cf-8F52-0040333594A3} *)
TID_D3DRMMatrix4x4: TGUID =
(D1:$f6f23f45;D2:$7686;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
IDirectXFile = interface(IUnknown)
['{3D82AB40-62DA-11CF-AB39-0020AF71E433}']
function CreateEnumObject(pvSource: Pointer; dwLoadOptions: TDXFileLoadOptions;
out ppEnumObj: IDirectXFileEnumObject): HResult; stdcall;
function CreateSaveObject(szFileName: PChar; dwFileFormat: TDXFileFormat;
out ppSaveObj: IDirectXFileSaveObject): HResult; stdcall;
function RegisterTemplates(pvData: Pointer; cbSize: DWORD): HResult; stdcall;
end;
(* {3D82AB4F-62DA-11cf-AB39-0020AF71E433} *)
TID_D3DRMAnimation: TGUID =
(D1:$3d82ab4f;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
IDirectXFileEnumObject = interface(IUnknown)
['{3D82AB41-62DA-11CF-AB39-0020AF71E433}']
function GetNextDataObject(out ppDataObj: IDirectXFileData): HResult; stdcall;
function GetDataObjectById(const rguid: TGUID; out ppDataObj: IDirectXFileData): HResult; stdcall;
function GetDataObjectByName(szName: PChar; out ppDataObj: IDirectXFileData): HResult; stdcall;
end;
(* {3D82AB50-62DA-11cf-AB39-0020AF71E433} *)
TID_D3DRMAnimationSet: TGUID =
(D1:$3d82ab50;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
IDirectXFileSaveObject = interface(IUnknown)
['{3D82AB42-62DA-11CF-AB39-0020AF71E433}']
function SaveTemplates(cTemplates: DWORD; var ppguidTemplates: PGUID): HResult; stdcall;
function CreateDataObject(const rguidTemplate: TGUID; szName: PChar;
const pguid: TGUID; cbSize: DWORD; pvData: Pointer;
out ppDataObj: IDirectXFileData): HResult; stdcall;
function SaveData(pDataObj: IDirectXFileData): HResult; stdcall;
end;
(* {10DD46A8-775B-11cf-8F52-0040333594A3} *)
TID_D3DRMAnimationKey: TGUID =
(D1:$10dd46a8;D2:$775b;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$A3));
 
IDirectXFileObject = interface(IUnknown)
['{3D82AB43-62DA-11CF-AB39-0020AF71E433}']
function GetName(pstrNameBuf: PChar; var dwBufLen: DWORD): HResult; stdcall;
function GetId (var pGuidBuf: TGUID): HResult; stdcall;
end;
(* {10DD46A9-775B-11cf-8F52-0040333594A3} *)
TID_D3DRMFloatKeys: TGUID =
(D1:$10dd46a9;D2:$775b;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$A3));
 
IDirectXFileData = interface(IDirectXFileObject)
['{3D82AB44-62DA-11CF-AB39-0020AF71E433}']
function GetData(szMember: PChar; var pcbSize: DWORD; var ppvData: Pointer): HResult; stdcall;
function GetType(var ppguid: PGUID): HResult; stdcall;
function GetNextObject(out ppChildObj: IDirectXFileObject): HResult; stdcall;
function AddDataObject(pDataObj: IDirectXFileData): HResult; stdcall;
function AddDataReference(szRef: PChar; pguidRef: PGUID): HResult; stdcall;
function AddBinaryObjec (szName: PChar; pguid: PGUID; szMimeType: PChar;
pvData: Pointer; cbSize: DWORD): HResult; stdcall;
end;
(* {01411840-7786-11cf-8F52-0040333594A3} *)
TID_D3DRMMaterialAmbientColor: TGUID =
(D1:$01411840;D2:$7786;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$A3));
 
IDirectXFileDataReference = interface(IDirectXFileObject)
['{3D82AB45-62DA-11CF-AB39-0020AF71E433}']
function Resolve(out ppDataObj: IDirectXFileData): HResult; stdcall;
end;
(* {01411841-7786-11cf-8F52-0040333594A3} *)
TID_D3DRMMaterialDiffuseColor: TGUID =
(D1:$01411841;D2:$7786;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$A3));
 
IDirectXFileBinary = interface(IDirectXFileObject)
['{3D82AB46-62DA-11CF-AB39-0020AF71E433}']
function GetSize(var pcbSize: DWORD): HResult; stdcall;
function GetMimeType(var pszMimeType: PChar): HResult; stdcall;
function Read(pvData: Pointer; cbSize: DWORD; var pcbRead: DWORD): HResult; stdcall;
end;
(* {01411842-7786-11cf-8F52-0040333594A3} *)
TID_D3DRMMaterialSpecularColor: TGUID =
(D1:$01411842;D2:$7786;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$A3));
 
{ DirectX File Header template's GUID. }
(* {D3E16E80-7835-11cf-8F52-0040333594A3} *)
TID_D3DRMMaterialEmissiveColor: TGUID =
(D1:$d3e16e80;D2:$7835;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
const
TID_DXFILEHeader: TGUID = '{3D82AB43-62DA-11CF-AB39-0020AF71E433}';
(* {01411843-7786-11cf-8F52-0040333594A3} *)
TID_D3DRMMaterialPower: TGUID =
(D1:$01411843;D2:$7786;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$A3));
 
{ DirectX File errors. }
(* {35FF44E0-6C7C-11cf-8F52-0040333594A3} *)
TID_D3DRMColorRGBA: TGUID =
(D1:$35ff44e0;D2:$6c7c;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$A3));
 
const
DXFILE_OK = HResult(0);
(* {D3E16E81-7835-11cf-8F52-0040333594A3} *)
TID_D3DRMColorRGB: TGUID =
(D1:$d3e16e81;D2:$7835;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
DXFILEERR_BADOBJECT = HResult($88760000 + 850);
DXFILEERR_BADVALUE = HResult($88760000 + 851);
DXFILEERR_BADTYPE = HResult($88760000 + 852);
DXFILEERR_BADSTREAMHANDLE = HResult($88760000 + 853);
DXFILEERR_BADALLOC = HResult($88760000 + 854);
DXFILEERR_NOTFOUND = HResult($88760000 + 855);
DXFILEERR_NOTDONEYET = HResult($88760000 + 856);
DXFILEERR_FILENOTFOUND = HResult($88760000 + 857);
DXFILEERR_RESOURCENOTFOUND = HResult($88760000 + 858);
DXFILEERR_URLNOTFOUND = HResult($88760000 + 859);
DXFILEERR_BADRESOURCE = HResult($88760000 + 860);
DXFILEERR_BADFILETYPE = HResult($88760000 + 861);
DXFILEERR_BADFILEVERSION = HResult($88760000 + 862);
DXFILEERR_BADFILEFLOATSIZE = HResult($88760000 + 863);
DXFILEERR_BADFILECOMPRESSIONTYPE = HResult($88760000 + 864);
DXFILEERR_BADFILE = HResult($88760000 + 865);
DXFILEERR_PARSEERROR = HResult($88760000 + 866);
DXFILEERR_NOTEMPLATE = HResult($88760000 + 867);
DXFILEERR_BADARRAYSIZE = HResult($88760000 + 868);
DXFILEERR_BADDATAREFERENCE = HResult($88760000 + 869);
DXFILEERR_INTERNALERROR = HResult($88760000 + 870);
DXFILEERR_NOMOREOBJECTS = HResult($88760000 + 871);
DXFILEERR_BADINTRINSICS = HResult($88760000 + 872);
DXFILEERR_NOMORESTREAMHANDLES = HResult($88760000 + 873);
DXFILEERR_NOMOREDATA = HResult($88760000 + 874);
DXFILEERR_BADCACHEFILE = HResult($88760000 + 875);
DXFILEERR_NOINTERNET = HResult($88760000 + 876);
(* {A42790E0-7810-11cf-8F52-0040333594A3} *)
TID_D3DRMGuid: TGUID =
(D1:$a42790e0;D2:$7810;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
{ API for creating IDirectXFile interface. }
(* {A42790E1-7810-11cf-8F52-0040333594A3} *)
TID_D3DRMTextureFilename: TGUID =
(D1:$a42790e1;D2:$7810;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
function DirectXFileCreate(out lplpDirectXFile: IDirectXFile): HResult; stdcall;
(* {A42790E2-7810-11cf-8F52-0040333594A3} *)
TID_D3DRMTextureReference: TGUID =
(D1:$a42790e2;D2:$7810;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
(***************************************************************************
*
* Copyright (C) 1998-1999 Microsoft Corporation. All Rights Reserved.
*
* File: rmxfguid.h
*
* Content: Defines GUIDs of D3DRM's templates.
*
***************************************************************************)
(* {1630B820-7842-11cf-8F52-0040333594A3} *)
TID_D3DRMIndexedColor: TGUID =
(D1:$1630b820;D2:$7842;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
const
TID_D3DRMInfo: TGUID = '{2B957100-9E9A-11cf-AB39-0020AF71E433}';
TID_D3DRMMesh: TGUID = '{3D82AB44-62DA-11cf-AB39-0020AF71E433}';
TID_D3DRMVector: TGUID = '{3D82AB5E-62DA-11cf-AB39-0020AF71E433}';
TID_D3DRMMeshFace: TGUID = '{3D82AB5F-62DA-11cf-AB39-0020AF71E433}';
TID_D3DRMMaterial: TGUID = '{3D82AB4D-62DA-11cf-AB39-0020AF71E433}';
TID_D3DRMMaterialArray: TGUID = '{35FF44E1-6C7C-11cf-8F52-0040333594A3}';
TID_D3DRMFrame: TGUID = '{3D82AB46-62DA-11cf-AB39-0020AF71E433}';
TID_D3DRMFrameTransformMatrix: TGUID = '{F6F23F41-7686-11cf-8F52-0040333594A3}';
TID_D3DRMMeshMaterialList: TGUID = '{F6F23F42-7686-11cf-8F52-0040333594A3}';
TID_D3DRMMeshTextureCoords: TGUID = '{F6F23F40-7686-11cf-8F52-0040333594A3}';
TID_D3DRMMeshNormals: TGUID = '{F6F23F43-7686-11cf-8F52-0040333594A3}';
TID_D3DRMCoords2d: TGUID = '{F6F23F44-7686-11cf-8F52-0040333594A3}';
TID_D3DRMMatrix4x4: TGUID = '{F6F23F45-7686-11cf-8F52-0040333594A3}';
TID_D3DRMAnimation: TGUID = '{3D82AB4F-62DA-11cf-AB39-0020AF71E433}';
TID_D3DRMAnimationSet: TGUID = '{3D82AB50-62DA-11cf-AB39-0020AF71E433}';
TID_D3DRMAnimationKey: TGUID = '{10DD46A8-775B-11cf-8F52-0040333594A3}';
TID_D3DRMFloatKeys: TGUID = '{10DD46A9-775B-11cf-8F52-0040333594A3}';
TID_D3DRMMaterialAmbientColor: TGUID = '{01411840-7786-11cf-8F52-0040333594A3}';
TID_D3DRMMaterialDiffuseColor: TGUID = '{01411841-7786-11cf-8F52-0040333594A3}';
TID_D3DRMMaterialSpecularColor: TGUID = '{01411842-7786-11cf-8F52-0040333594A3}';
TID_D3DRMMaterialEmissiveColor: TGUID = '{D3E16E80-7835-11cf-8F52-0040333594A3}';
TID_D3DRMMaterialPower: TGUID = '{01411843-7786-11cf-8F52-0040333594A3}';
TID_D3DRMColorRGBA: TGUID = '{35FF44E0-6C7C-11cf-8F52-0040333594A3}';
TID_D3DRMColorRGB: TGUID = '{D3E16E81-7835-11cf-8F52-0040333594A3}';
TID_D3DRMGuid: TGUID = '{A42790E0-7810-11cf-8F52-0040333594A3}';
TID_D3DRMTextureFilename: TGUID = '{A42790E1-7810-11cf-8F52-0040333594A3}';
TID_D3DRMTextureReference: TGUID = '{A42790E2-7810-11cf-8F52-0040333594A3}';
TID_D3DRMIndexedColor: TGUID = '{1630B820-7842-11cf-8F52-0040333594A3}';
TID_D3DRMMeshVertexColors: TGUID = '{1630B821-7842-11cf-8F52-0040333594A3}';
TID_D3DRMMaterialWrap: TGUID = '{4885AE60-78E8-11cf-8F52-0040333594A3}';
TID_D3DRMBoolean: TGUID = '{537DA6A0-CA37-11d0-941C-0080C80CFA7B}';
TID_D3DRMMeshFaceWraps: TGUID = '{ED1EC5C0-C0A8-11d0-941C-0080C80CFA7B}';
TID_D3DRMBoolean2d: TGUID = '{4885AE63-78E8-11cf-8F52-0040333594A3}';
TID_D3DRMTimedFloatKeys: TGUID = '{F406B180-7B3B-11cf-8F52-0040333594A3}';
TID_D3DRMAnimationOptions: TGUID = '{E2BF56C0-840F-11cf-8F52-0040333594A3}';
TID_D3DRMFramePosition: TGUID = '{E2BF56C1-840F-11cf-8F52-0040333594A3}';
TID_D3DRMFrameVelocity: TGUID = '{E2BF56C2-840F-11cf-8F52-0040333594A3}';
TID_D3DRMFrameRotation: TGUID = '{E2BF56C3-840F-11cf-8F52-0040333594A3}';
TID_D3DRMLight: TGUID = '{3D82AB4A-62DA-11cf-AB39-0020AF71E433}';
TID_D3DRMCamera: TGUID = '{3D82AB51-62DA-11cf-AB39-0020AF71E433}';
TID_D3DRMAppData: TGUID = '{E5745280-B24F-11cf-9DD5-00AA00A71A2F}';
TID_D3DRMLightUmbra: TGUID = '{AED22740-B31F-11cf-9DD5-00AA00A71A2F}';
TID_D3DRMLightRange: TGUID = '{AED22742-B31F-11cf-9DD5-00AA00A71A2F}';
TID_D3DRMLightPenumbra: TGUID = '{AED22741-B31F-11cf-9DD5-00AA00A71A2F}';
TID_D3DRMLightAttenuation: TGUID = '{A8A98BA0-C5E5-11cf-B941-0080C80CFA7B}';
TID_D3DRMInlineData: TGUID = '{3A23EEA0-94B1-11d0-AB39-0020AF71E433}';
TID_D3DRMUrl: TGUID = '{3A23EEA1-94B1-11d0-AB39-0020AF71E433}';
(* {1630B821-7842-11cf-8F52-0040333594A3} *)
TID_D3DRMMeshVertexColors: TGUID =
(D1:$1630b821;D2:$7842;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
TID_D3DRMProgressiveMesh: TGUID = '{8A63C360-997D-11d0-941C-0080C80CFA7B}';
TID_D3DRMExternalVisual: TGUID = '{98116AA0-BDBA-11d1-82C0-00A0C9697271}';
TID_D3DRMStringProperty: TGUID = '{7F0F21E0-BFE1-11d1-82C0-00A0C9697271}';
TID_D3DRMPropertyBag: TGUID = '{7F0F21E1-BFE1-11d1-82C0-00A0C9697271}';
TID_D3DRMRightHanded: TGUID = '{7F5D5EA0-D53A-11d1-82C0-00A0C9697271}';
(* {4885AE60-78E8-11cf-8F52-0040333594A3} *)
TID_D3DRMMaterialWrap: TGUID =
(D1:$4885ae60;D2:$78e8;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
(***************************************************************************
(* {537DA6A0-CA37-11d0-941C-0080C80CFA7B} *)
TID_D3DRMBoolean: TGUID =
(D1:$537da6a0;D2:$ca37;D3:$11d0;D4:($94,$1c,$00,$80,$c8,$0c,$fa,$7b));
 
(* {ED1EC5C0-C0A8-11d0-941C-0080C80CFA7B} *)
TID_D3DRMMeshFaceWraps: TGUID =
(D1:$ed1ec5c0;D2:$c0a8;D3:$11d0;D4:($94,$1c,$00,$80,$c8,$0c,$fa,$7b));
 
(* {4885AE63-78E8-11cf-8F52-0040333594A3} *)
TID_D3DRMBoolean2d: TGUID =
(D1:$4885ae63;D2:$78e8;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
(* {F406B180-7B3B-11cf-8F52-0040333594A3} *)
TID_D3DRMTimedFloatKeys: TGUID =
(D1:$f406b180;D2:$7b3b;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
(* {E2BF56C0-840F-11cf-8F52-0040333594A3} *)
TID_D3DRMAnimationOptions: TGUID =
(D1:$e2bf56c0;D2:$840f;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
(* {E2BF56C1-840F-11cf-8F52-0040333594A3} *)
TID_D3DRMFramePosition: TGUID =
(D1:$e2bf56c1;D2:$840f;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
(* {E2BF56C2-840F-11cf-8F52-0040333594A3} *)
TID_D3DRMFrameVelocity: TGUID =
(D1:$e2bf56c2;D2:$840f;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
(* {E2BF56C3-840F-11cf-8F52-0040333594A3} *)
TID_D3DRMFrameRotation: TGUID =
(D1:$e2bf56c3;D2:$840f;D3:$11cf;D4:($8f,$52,$00,$40,$33,$35,$94,$a3));
 
(* {3D82AB4A-62DA-11cf-AB39-0020AF71E433} *)
TID_D3DRMLight: TGUID =
(D1:$3d82ab4a;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
(* {3D82AB51-62DA-11cf-AB39-0020AF71E433} *)
TID_D3DRMCamera: TGUID =
(D1:$3d82ab51;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
(* {E5745280-B24F-11cf-9DD5-00AA00A71A2F} *)
TID_D3DRMAppData: TGUID =
(D1:$e5745280;D2:$b24f;D3:$11cf;D4:($9d,$d5,$00,$aa,$00,$a7,$1a,$2f));
 
(* {AED22740-B31F-11cf-9DD5-00AA00A71A2F} *)
TID_D3DRMLightUmbra: TGUID =
(D1:$aed22740;D2:$b31f;D3:$11cf;D4:($9d,$d5,$00,$aa,$00,$a7,$1a,$2f));
 
(* {AED22742-B31F-11cf-9DD5-00AA00A71A2F} *)
TID_D3DRMLightRange: TGUID =
(D1:$aed22742;D2:$b31f;D3:$11cf;D4:($9d,$d5,$00,$aa,$00,$a7,$1a,$2f));
 
(* {AED22741-B31F-11cf-9DD5-00AA00A71A2F} *)
TID_D3DRMLightPenumbra: TGUID =
(D1:$aed22741;D2:$b31f;D3:$11cf;D4:($9d,$d5,$00,$aa,$00,$a7,$1a,$2f));
 
(* {A8A98BA0-C5E5-11cf-B941-0080C80CFA7B} *)
TID_D3DRMLightAttenuation: TGUID =
(D1:$a8a98ba0;D2:$c5e5;D3:$11cf;D4:($b9,$41,$00,$80,$c8,$0c,$fa,$7b));
 
(* {3A23EEA0-94B1-11d0-AB39-0020AF71E433} *)
TID_D3DRMInlineData: TGUID =
(D1:$3a23eea0;D2:$94b1;D3:$11d0;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
(* {3A23EEA1-94B1-11d0-AB39-0020AF71E433} *)
TID_D3DRMUrl: TGUID =
(D1:$3a23eea1;D2:$94b1;D3:$11d0;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
 
(* {8A63C360-997D-11d0-941C-0080C80CFA7B} *)
TID_D3DRMProgressiveMesh: TGUID =
(D1:$8A63C360;D2:$997D;D3:$11d0;D4:($94,$1C,$00,$80,$C8,$0C,$FA,$7B));
 
(* {98116AA0-BDBA-11d1-82C0-00A0C9697271} *)
TID_D3DRMExternalVisual: TGUID =
(D1:$98116AA0;D2:$BDBA;D3:$11d1;D4:($82,$C0,$00,$A0,$C9,$69,$72,$71));
 
(* {7F0F21E0-BFE1-11d1-82C0-00A0C9697271} *)
TID_D3DRMStringProperty: TGUID =
(D1:$7f0f21e0;D2:$bfe1;D3:$11d1;D4:($82,$c0,$00,$a0,$c9,$69,$72,$71));
 
(* {7F0F21E1-BFE1-11d1-82C0-00A0C9697271} *)
TID_D3DRMPropertyBag: TGUID =
(D1:$7f0f21e1;D2:$bfe1;D3:$11d1;D4:($82,$c0,$00,$a0,$c9,$69,$72,$71));
 
// {7F5D5EA0-D53A-11d1-82C0-00A0C9697271}
TID_D3DRMRightHanded: TGUID =
(D1:$7f5d5ea0;D2:$d53a;D3:$11d1;D4:($82,$c0,$00,$a0,$c9,$69,$72,$71));
 
(*==========================================================================;
*
* Copyright (C) 1998-1999 Microsoft Corporation. All Rights Reserved.
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: rmxftmpl.h
* Content: D3DRM XFile templates in binary form
*
* Content: D3DRM XFile templates in binary form.
*
***************************************************************************)
 
const
D3DRM_XTEMPLATES: array [0..3214] of byte = (
$78, $6f, $66, $20, $30, $33, $30, $32, $62,
$69, $6e, $20, $30, $30, $36, $34, $1f, 0, $1,
0, $6, 0, 0, 0, $48, $65, $61, $64, $65,
$72, $a, 0, $5, 0, $43, $ab, $82, $3d, $da,
$62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4,
$33, $28, 0, $1, 0, $5, 0, 0, 0, $6d,
$61, $6a, $6f, $72, $14, 0, $28, 0, $1, 0,
$5, 0, 0, 0, $6d, $69, $6e, $6f, $72, $14,
0, $29, 0, $1, 0, $5, 0, 0, 0, $66,
$6c, $61, $67, $73, $14, 0, $b, 0, $1f, 0,
$1, 0, $6, 0, 0, 0, $56, $65, $63, $74,
$6f, $72, $a, 0, $5, 0, $5e, $ab, $82, $3d,
$da, $62, $cf, $11, $ab, $39, 0, $20, $af, $71,
$e4, $33, $2a, 0, $1, 0, $1, 0, 0, 0,
$78, $14, 0, $2a, 0, $1, 0, $1, 0, 0,
0, $79, $14, 0, $2a, 0, $1, 0, $1, 0,
0, 0, $7a, $14, 0, $b, 0, $1f, 0, $1,
0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64,
$73, $32, $64, $a, 0, $5, 0, $44, $3f, $f2,
$f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $2a, 0, $1, 0, $1, 0, 0,
0, $75, $14, 0, $2a, 0, $1, 0, $1, 0,
0, 0, $76, $14, 0, $b, 0, $1f, 0, $1,
0, $9, 0, 0, 0, $4d, $61, $74, $72, $69,
$78, $34, $78, $34, $a, 0, $5, 0, $45, $3f,
$f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40,
$33, $35, $94, $a3, $34, 0, $2a, 0, $1, 0,
$6, 0, 0, 0, $6d, $61, $74, $72, $69, $78,
$e, 0, $3, 0, $10, 0, 0, 0, $f, 0,
$14, 0, $b, 0, $1f, 0, $1, 0, $9, 0,
0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42,
$41, $a, 0, $5, 0, $e0, $44, $ff, $35, $7c,
$6c, $cf, $11, $8f, $52, 0, $40, $33, $35, $94,
$a3, $2a, 0, $1, 0, $3, 0, 0, 0, $72,
$65, $64, $14, 0, $2a, 0, $1, 0, $5, 0,
0, 0, $67, $72, $65, $65, $6e, $14, 0, $2a,
0, $1, 0, $4, 0, 0, 0, $62, $6c, $75,
$65, $14, 0, $2a, 0, $1, 0, $5, 0, 0,
0, $61, $6c, $70, $68, $61, $14, 0, $b, 0,
$1f, 0, $1, 0, $8, 0, 0, 0, $43, $6f,
$6c, $6f, $72, $52, $47, $42, $a, 0, $5, 0,
$81, $6e, $e1, $d3, $35, $78, $cf, $11, $8f, $52,
0, $40, $33, $35, $94, $a3, $2a, 0, $1, 0,
$3, 0, 0, 0, $72, $65, $64, $14, 0, $2a,
0, $1, 0, $5, 0, 0, 0, $67, $72, $65,
$65, $6e, $14, 0, $2a, 0, $1, 0, $4, 0,
0, 0, $62, $6c, $75, $65, $14, 0, $b, 0,
$1f, 0, $1, 0, $c, 0, 0, 0, $49, $6e,
$64, $65, $78, $65, $64, $43, $6f, $6c, $6f, $72,
$a, 0, $5, 0, $20, $b8, $30, $16, $42, $78,
$cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3,
$29, 0, $1, 0, $5, 0, 0, 0, $69, $6e,
$64, $65, $78, $14, 0, $1, 0, $9, 0, 0,
0, $43, $6f, $6c, $6f, $72, $52, $47, $42, $41,
$1, 0, $a, 0, 0, 0, $69, $6e, $64, $65,
$78, $43, $6f, $6c, $6f, $72, $14, 0, $b, 0,
$1f, 0, $1, 0, $7, 0, 0, 0, $42, $6f,
$6f, $6c, $65, $61, $6e, $a, 0, $5, 0, $a0,
$a6, $7d, $53, $37, $ca, $d0, $11, $94, $1c, 0,
$80, $c8, $c, $fa, $7b, $29, 0, $1, 0, $9,
0, 0, 0, $74, $72, $75, $65, $66, $61, $6c,
$73, $65, $14, 0, $b, 0, $1f, 0, $1, 0,
$9, 0, 0, 0, $42, $6f, $6f, $6c, $65, $61,
$6e, $32, $64, $a, 0, $5, 0, $63, $ae, $85,
$48, $e8, $78, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $1, 0, $7, 0, 0, 0, $42,
$6f, $6f, $6c, $65, $61, $6e, $1, 0, $1, 0,
0, 0, $75, $14, 0, $1, 0, $7, 0, 0,
0, $42, $6f, $6f, $6c, $65, $61, $6e, $1, 0,
$1, 0, 0, 0, $76, $14, 0, $b, 0, $1f,
0, $1, 0, $c, 0, 0, 0, $4d, $61, $74,
$65, $72, $69, $61, $6c, $57, $72, $61, $70, $a,
0, $5, 0, $60, $ae, $85, $48, $e8, $78, $cf,
$11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1,
0, $7, 0, 0, 0, $42, $6f, $6f, $6c, $65,
$61, $6e, $1, 0, $1, 0, 0, 0, $75, $14,
0, $1, 0, $7, 0, 0, 0, $42, $6f, $6f,
$6c, $65, $61, $6e, $1, 0, $1, 0, 0, 0,
$76, $14, 0, $b, 0, $1f, 0, $1, 0, $f,
0, 0, 0, $54, $65, $78, $74, $75, $72, $65,
$46, $69, $6c, $65, $6e, $61, $6d, $65, $a, 0,
$5, 0, $e1, $90, $27, $a4, $10, $78, $cf, $11,
$8f, $52, 0, $40, $33, $35, $94, $a3, $31, 0,
$1, 0, $8, 0, 0, 0, $66, $69, $6c, $65,
$6e, $61, $6d, $65, $14, 0, $b, 0, $1f, 0,
$1, 0, $8, 0, 0, 0, $4d, $61, $74, $65,
$72, $69, $61, $6c, $a, 0, $5, 0, $4d, $ab,
$82, $3d, $da, $62, $cf, $11, $ab, $39, 0, $20,
$af, $71, $e4, $33, $1, 0, $9, 0, 0, 0,
$43, $6f, $6c, $6f, $72, $52, $47, $42, $41, $1,
0, $9, 0, 0, 0, $66, $61, $63, $65, $43,
$6f, $6c, $6f, $72, $14, 0, $2a, 0, $1, 0,
$5, 0, 0, 0, $70, $6f, $77, $65, $72, $14,
0, $1, 0, $8, 0, 0, 0, $43, $6f, $6c,
$6f, $72, $52, $47, $42, $1, 0, $d, 0, 0,
0, $73, $70, $65, $63, $75, $6c, $61, $72, $43,
$6f, $6c, $6f, $72, $14, 0, $1, 0, $8, 0,
0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42,
$1, 0, $d, 0, 0, 0, $65, $6d, $69, $73,
$73, $69, $76, $65, $43, $6f, $6c, $6f, $72, $14,
0, $e, 0, $12, 0, $12, 0, $12, 0, $f,
0, $b, 0, $1f, 0, $1, 0, $8, 0, 0,
0, $4d, $65, $73, $68, $46, $61, $63, $65, $a,
0, $5, 0, $5f, $ab, $82, $3d, $da, $62, $cf,
$11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29,
0, $1, 0, $12, 0, 0, 0, $6e, $46, $61,
$63, $65, $56, $65, $72, $74, $65, $78, $49, $6e,
$64, $69, $63, $65, $73, $14, 0, $34, 0, $29,
0, $1, 0, $11, 0, 0, 0, $66, $61, $63,
$65, $56, $65, $72, $74, $65, $78, $49, $6e, $64,
$69, $63, $65, $73, $e, 0, $1, 0, $12, 0,
0, 0, $6e, $46, $61, $63, $65, $56, $65, $72,
$74, $65, $78, $49, $6e, $64, $69, $63, $65, $73,
$f, 0, $14, 0, $b, 0, $1f, 0, $1, 0,
$d, 0, 0, 0, $4d, $65, $73, $68, $46, $61,
$63, $65, $57, $72, $61, $70, $73, $a, 0, $5,
0, $c0, $c5, $1e, $ed, $a8, $c0, $d0, $11, $94,
$1c, 0, $80, $c8, $c, $fa, $7b, $29, 0, $1,
0, $f, 0, 0, 0, $6e, $46, $61, $63, $65,
$57, $72, $61, $70, $56, $61, $6c, $75, $65, $73,
$14, 0, $34, 0, $1, 0, $9, 0, 0, 0,
$42, $6f, $6f, $6c, $65, $61, $6e, $32, $64, $1,
0, $e, 0, 0, 0, $66, $61, $63, $65, $57,
$72, $61, $70, $56, $61, $6c, $75, $65, $73, $e,
0, $1, 0, $f, 0, 0, 0, $6e, $46, $61,
$63, $65, $57, $72, $61, $70, $56, $61, $6c, $75,
$65, $73, $f, 0, $14, 0, $b, 0, $1f, 0,
$1, 0, $11, 0, 0, 0, $4d, $65, $73, $68,
$54, $65, $78, $74, $75, $72, $65, $43, $6f, $6f,
$72, $64, $73, $a, 0, $5, 0, $40, $3f, $f2,
$f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $29, 0, $1, 0, $e, 0, 0,
0, $6e, $54, $65, $78, $74, $75, $72, $65, $43,
$6f, $6f, $72, $64, $73, $14, 0, $34, 0, $1,
0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64,
$73, $32, $64, $1, 0, $d, 0, 0, 0, $74,
$65, $78, $74, $75, $72, $65, $43, $6f, $6f, $72,
$64, $73, $e, 0, $1, 0, $e, 0, 0, 0,
$6e, $54, $65, $78, $74, $75, $72, $65, $43, $6f,
$6f, $72, $64, $73, $f, 0, $14, 0, $b, 0,
$1f, 0, $1, 0, $10, 0, 0, 0, $4d, $65,
$73, $68, $4d, $61, $74, $65, $72, $69, $61, $6c,
$4c, $69, $73, $74, $a, 0, $5, 0, $42, $3f,
$f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40,
$33, $35, $94, $a3, $29, 0, $1, 0, $a, 0,
0, 0, $6e, $4d, $61, $74, $65, $72, $69, $61,
$6c, $73, $14, 0, $29, 0, $1, 0, $c, 0,
0, 0, $6e, $46, $61, $63, $65, $49, $6e, $64,
$65, $78, $65, $73, $14, 0, $34, 0, $29, 0,
$1, 0, $b, 0, 0, 0, $66, $61, $63, $65,
$49, $6e, $64, $65, $78, $65, $73, $e, 0, $1,
0, $c, 0, 0, 0, $6e, $46, $61, $63, $65,
$49, $6e, $64, $65, $78, $65, $73, $f, 0, $14,
0, $e, 0, $1, 0, $8, 0, 0, 0, $4d,
$61, $74, $65, $72, $69, $61, $6c, $f, 0, $b,
0, $1f, 0, $1, 0, $b, 0, 0, 0, $4d,
$65, $73, $68, $4e, $6f, $72, $6d, $61, $6c, $73,
$a, 0, $5, 0, $43, $3f, $f2, $f6, $86, $76,
$cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3,
$29, 0, $1, 0, $8, 0, 0, 0, $6e, $4e,
$6f, $72, $6d, $61, $6c, $73, $14, 0, $34, 0,
$1, 0, $6, 0, 0, 0, $56, $65, $63, $74,
$6f, $72, $1, 0, $7, 0, 0, 0, $6e, $6f,
$72, $6d, $61, $6c, $73, $e, 0, $1, 0, $8,
0, 0, 0, $6e, $4e, $6f, $72, $6d, $61, $6c,
$73, $f, 0, $14, 0, $29, 0, $1, 0, $c,
0, 0, 0, $6e, $46, $61, $63, $65, $4e, $6f,
$72, $6d, $61, $6c, $73, $14, 0, $34, 0, $1,
0, $8, 0, 0, 0, $4d, $65, $73, $68, $46,
$61, $63, $65, $1, 0, $b, 0, 0, 0, $66,
$61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73,
$e, 0, $1, 0, $c, 0, 0, 0, $6e, $46,
$61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73,
$f, 0, $14, 0, $b, 0, $1f, 0, $1, 0,
$10, 0, 0, 0, $4d, $65, $73, $68, $56, $65,
$72, $74, $65, $78, $43, $6f, $6c, $6f, $72, $73,
$a, 0, $5, 0, $21, $b8, $30, $16, $42, $78,
$cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3,
$29, 0, $1, 0, $d, 0, 0, 0, $6e, $56,
$65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72,
$73, $14, 0, $34, 0, $1, 0, $c, 0, 0,
0, $49, $6e, $64, $65, $78, $65, $64, $43, $6f,
$6c, $6f, $72, $1, 0, $c, 0, 0, 0, $76,
$65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72,
$73, $e, 0, $1, 0, $d, 0, 0, 0, $6e,
$56, $65, $72, $74, $65, $78, $43, $6f, $6c, $6f,
$72, $73, $f, 0, $14, 0, $b, 0, $1f, 0,
$1, 0, $4, 0, 0, 0, $4d, $65, $73, $68,
$a, 0, $5, 0, $44, $ab, $82, $3d, $da, $62,
$cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33,
$29, 0, $1, 0, $9, 0, 0, 0, $6e, $56,
$65, $72, $74, $69, $63, $65, $73, $14, 0, $34,
0, $1, 0, $6, 0, 0, 0, $56, $65, $63,
$74, $6f, $72, $1, 0, $8, 0, 0, 0, $76,
$65, $72, $74, $69, $63, $65, $73, $e, 0, $1,
0, $9, 0, 0, 0, $6e, $56, $65, $72, $74,
$69, $63, $65, $73, $f, 0, $14, 0, $29, 0,
$1, 0, $6, 0, 0, 0, $6e, $46, $61, $63,
$65, $73, $14, 0, $34, 0, $1, 0, $8, 0,
0, 0, $4d, $65, $73, $68, $46, $61, $63, $65,
$1, 0, $5, 0, 0, 0, $66, $61, $63, $65,
$73, $e, 0, $1, 0, $6, 0, 0, 0, $6e,
$46, $61, $63, $65, $73, $f, 0, $14, 0, $e,
0, $12, 0, $12, 0, $12, 0, $f, 0, $b,
0, $1f, 0, $1, 0, $14, 0, 0, 0, $46,
$72, $61, $6d, $65, $54, $72, $61, $6e, $73, $66,
$6f, $72, $6d, $4d, $61, $74, $72, $69, $78, $a,
0, $5, 0, $41, $3f, $f2, $f6, $86, $76, $cf,
$11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1,
0, $9, 0, 0, 0, $4d, $61, $74, $72, $69,
$78, $34, $78, $34, $1, 0, $b, 0, 0, 0,
$66, $72, $61, $6d, $65, $4d, $61, $74, $72, $69,
$78, $14, 0, $b, 0, $1f, 0, $1, 0, $5,
0, 0, 0, $46, $72, $61, $6d, $65, $a, 0,
$5, 0, $46, $ab, $82, $3d, $da, $62, $cf, $11,
$ab, $39, 0, $20, $af, $71, $e4, $33, $e, 0,
$12, 0, $12, 0, $12, 0, $f, 0, $b, 0,
$1f, 0, $1, 0, $9, 0, 0, 0, $46, $6c,
$6f, $61, $74, $4b, $65, $79, $73, $a, 0, $5,
0, $a9, $46, $dd, $10, $5b, $77, $cf, $11, $8f,
$52, 0, $40, $33, $35, $94, $a3, $29, 0, $1,
0, $7, 0, 0, 0, $6e, $56, $61, $6c, $75,
$65, $73, $14, 0, $34, 0, $2a, 0, $1, 0,
$6, 0, 0, 0, $76, $61, $6c, $75, $65, $73,
$e, 0, $1, 0, $7, 0, 0, 0, $6e, $56,
$61, $6c, $75, $65, $73, $f, 0, $14, 0, $b,
0, $1f, 0, $1, 0, $e, 0, 0, 0, $54,
$69, $6d, $65, $64, $46, $6c, $6f, $61, $74, $4b,
$65, $79, $73, $a, 0, $5, 0, $80, $b1, $6,
$f4, $3b, $7b, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $29, 0, $1, 0, $4, 0, 0,
0, $74, $69, $6d, $65, $14, 0, $1, 0, $9,
0, 0, 0, $46, $6c, $6f, $61, $74, $4b, $65,
$79, $73, $1, 0, $6, 0, 0, 0, $74, $66,
$6b, $65, $79, $73, $14, 0, $b, 0, $1f, 0,
$1, 0, $c, 0, 0, 0, $41, $6e, $69, $6d,
$61, $74, $69, $6f, $6e, $4b, $65, $79, $a, 0,
$5, 0, $a8, $46, $dd, $10, $5b, $77, $cf, $11,
$8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0,
$1, 0, $7, 0, 0, 0, $6b, $65, $79, $54,
$79, $70, $65, $14, 0, $29, 0, $1, 0, $5,
0, 0, 0, $6e, $4b, $65, $79, $73, $14, 0,
$34, 0, $1, 0, $e, 0, 0, 0, $54, $69,
$6d, $65, $64, $46, $6c, $6f, $61, $74, $4b, $65,
$79, $73, $1, 0, $4, 0, 0, 0, $6b, $65,
$79, $73, $e, 0, $1, 0, $5, 0, 0, 0,
$6e, $4b, $65, $79, $73, $f, 0, $14, 0, $b,
0, $1f, 0, $1, 0, $10, 0, 0, 0, $41,
$6e, $69, $6d, $61, $74, $69, $6f, $6e, $4f, $70,
$74, $69, $6f, $6e, $73, $a, 0, $5, 0, $c0,
$56, $bf, $e2, $f, $84, $cf, $11, $8f, $52, 0,
$40, $33, $35, $94, $a3, $29, 0, $1, 0, $a,
0, 0, 0, $6f, $70, $65, $6e, $63, $6c, $6f,
$73, $65, $64, $14, 0, $29, 0, $1, 0, $f,
0, 0, 0, $70, $6f, $73, $69, $74, $69, $6f,
$6e, $71, $75, $61, $6c, $69, $74, $79, $14, 0,
$b, 0, $1f, 0, $1, 0, $9, 0, 0, 0,
$41, $6e, $69, $6d, $61, $74, $69, $6f, $6e, $a,
0, $5, 0, $4f, $ab, $82, $3d, $da, $62, $cf,
$11, $ab, $39, 0, $20, $af, $71, $e4, $33, $e,
0, $12, 0, $12, 0, $12, 0, $f, 0, $b,
0, $1f, 0, $1, 0, $c, 0, 0, 0, $41,
$6e, $69, $6d, $61, $74, $69, $6f, $6e, $53, $65,
$74, $a, 0, $5, 0, $50, $ab, $82, $3d, $da,
$62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4,
$33, $e, 0, $1, 0, $9, 0, 0, 0, $41,
$6e, $69, $6d, $61, $74, $69, $6f, $6e, $f, 0,
$b, 0, $1f, 0, $1, 0, $a, 0, 0, 0,
$49, $6e, $6c, $69, $6e, $65, $44, $61, $74, $61,
$a, 0, $5, 0, $a0, $ee, $23, $3a, $b1, $94,
$d0, $11, $ab, $39, 0, $20, $af, $71, $e4, $33,
$e, 0, $1, 0, $6, 0, 0, 0, $42, $49,
$4e, $41, $52, $59, $f, 0, $b, 0, $1f, 0,
$1, 0, $3, 0, 0, 0, $55, $72, $6c, $a,
0, $5, 0, $a1, $ee, $23, $3a, $b1, $94, $d0,
$11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29,
0, $1, 0, $5, 0, 0, 0, $6e, $55, $72,
$6c, $73, $14, 0, $34, 0, $31, 0, $1, 0,
$4, 0, 0, 0, $75, $72, $6c, $73, $e, 0,
$1, 0, $5, 0, 0, 0, $6e, $55, $72, $6c,
$73, $f, 0, $14, 0, $b, 0, $1f, 0, $1,
0, $f, 0, 0, 0, $50, $72, $6f, $67, $72,
$65, $73, $73, $69, $76, $65, $4d, $65, $73, $68,
$a, 0, $5, 0, $60, $c3, $63, $8a, $7d, $99,
$d0, $11, $94, $1c, 0, $80, $c8, $c, $fa, $7b,
$e, 0, $1, 0, $3, 0, 0, 0, $55, $72,
$6c, $13, 0, $1, 0, $a, 0, 0, 0, $49,
$6e, $6c, $69, $6e, $65, $44, $61, $74, $61, $f,
0, $b, 0, $1f, 0, $1, 0, $4, 0, 0,
0, $47, $75, $69, $64, $a, 0, $5, 0, $e0,
$90, $27, $a4, $10, $78, $cf, $11, $8f, $52, 0,
$40, $33, $35, $94, $a3, $29, 0, $1, 0, $5,
0, 0, 0, $64, $61, $74, $61, $31, $14, 0,
$28, 0, $1, 0, $5, 0, 0, 0, $64, $61,
$74, $61, $32, $14, 0, $28, 0, $1, 0, $5,
0, 0, 0, $64, $61, $74, $61, $33, $14, 0,
$34, 0, $2d, 0, $1, 0, $5, 0, 0, 0,
$64, $61, $74, $61, $34, $e, 0, $3, 0, $8,
0, 0, 0, $f, 0, $14, 0, $b, 0, $1f,
0, $1, 0, $e, 0, 0, 0, $53, $74, $72,
$69, $6e, $67, $50, $72, $6f, $70, $65, $72, $74,
$79, $a, 0, $5, 0, $e0, $21, $f, $7f, $e1,
$bf, $d1, $11, $82, $c0, 0, $a0, $c9, $69, $72,
$71, $31, 0, $1, 0, $3, 0, 0, 0, $6b,
$65, $79, $14, 0, $31, 0, $1, 0, $5, 0,
0, 0, $76, $61, $6c, $75, $65, $14, 0, $b,
0, $1f, 0, $1, 0, $b, 0, 0, 0, $50,
$72, $6f, $70, $65, $72, $74, $79, $42, $61, $67,
$a, 0, $5, 0, $e1, $21, $f, $7f, $e1, $bf,
$d1, $11, $82, $c0, 0, $a0, $c9, $69, $72, $71,
$e, 0, $1, 0, $e, 0, 0, 0, $53, $74,
$72, $69, $6e, $67, $50, $72, $6f, $70, $65, $72,
$74, $79, $f, 0, $b, 0, $1f, 0, $1, 0,
$e, 0, 0, 0, $45, $78, $74, $65, $72, $6e,
$61, $6c, $56, $69, $73, $75, $61, $6c, $a, 0,
$5, 0, $a0, $6a, $11, $98, $ba, $bd, $d1, $11,
$82, $c0, 0, $a0, $c9, $69, $72, $71, $1, 0,
$4, 0, 0, 0, $47, $75, $69, $64, $1, 0,
$12, 0, 0, 0, $67, $75, $69, $64, $45, $78,
$74, $65, $72, $6e, $61, $6c, $56, $69, $73, $75,
$61, $6c, $14, 0, $e, 0, $12, 0, $12, 0,
$12, 0, $f, 0, $b, 0);
D3DRM_XTEMPLATE_BYTES_2 = 3278;
 
D3DRM_XTEMPLATE_BYTES = 3278;
D3DRM_XTEMPLATES_2: array [0..D3DRM_XTEMPLATE_BYTES_2-1] of byte = (
$78, $6f, $66, $20, $30, $33, $30, $32, $62, $69, $6e, $20, $30, $30, $36, $34, $1f, 0, $1,
0, $6, 0, 0, 0, $48, $65, $61, $64, $65, $72, $a, 0, $5, 0, $43, $ab, $82, $3d, $da,
$62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $28, 0, $1, 0, $5, 0, 0, 0, $6d,
$61, $6a, $6f, $72, $14, 0, $28, 0, $1, 0, $5, 0, 0, 0, $6d, $69, $6e, $6f, $72, $14,
0, $29, 0, $1, 0, $5, 0, 0, 0, $66, $6c, $61, $67, $73, $14, 0, $b, 0, $1f, 0,
$1, 0, $6, 0, 0, 0, $56, $65, $63, $74, $6f, $72, $a, 0, $5, 0, $5e, $ab, $82, $3d,
$da, $62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $2a, 0, $1, 0, $1, 0, 0, 0,
$78, $14, 0, $2a, 0, $1, 0, $1, 0, 0, 0, $79, $14, 0, $2a, 0, $1, 0, $1, 0,
0, 0, $7a, $14, 0, $b, 0, $1f, 0, $1, 0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64,
$73, $32, $64, $a, 0, $5, 0, $44, $3f, $f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $2a, 0, $1, 0, $1, 0, 0, 0, $75, $14, 0, $2a, 0, $1, 0, $1, 0,
0, 0, $76, $14, 0, $b, 0, $1f, 0, $1, 0, $9, 0, 0, 0, $4d, $61, $74, $72, $69,
$78, $34, $78, $34, $a, 0, $5, 0, $45, $3f, $f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40,
$33, $35, $94, $a3, $34, 0, $2a, 0, $1, 0, $6, 0, 0, 0, $6d, $61, $74, $72, $69, $78,
$e, 0, $3, 0, $10, 0, 0, 0, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0, $9, 0,
0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42, $41, $a, 0, $5, 0, $e0, $44, $ff, $35, $7c,
$6c, $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $2a, 0, $1, 0, $3, 0, 0, 0, $72,
$65, $64, $14, 0, $2a, 0, $1, 0, $5, 0, 0, 0, $67, $72, $65, $65, $6e, $14, 0, $2a,
0, $1, 0, $4, 0, 0, 0, $62, $6c, $75, $65, $14, 0, $2a, 0, $1, 0, $5, 0, 0,
0, $61, $6c, $70, $68, $61, $14, 0, $b, 0, $1f, 0, $1, 0, $8, 0, 0, 0, $43, $6f,
$6c, $6f, $72, $52, $47, $42, $a, 0, $5, 0, $81, $6e, $e1, $d3, $35, $78, $cf, $11, $8f, $52,
0, $40, $33, $35, $94, $a3, $2a, 0, $1, 0, $3, 0, 0, 0, $72, $65, $64, $14, 0, $2a,
0, $1, 0, $5, 0, 0, 0, $67, $72, $65, $65, $6e, $14, 0, $2a, 0, $1, 0, $4, 0,
0, 0, $62, $6c, $75, $65, $14, 0, $b, 0, $1f, 0, $1, 0, $c, 0, 0, 0, $49, $6e,
$64, $65, $78, $65, $64, $43, $6f, $6c, $6f, $72, $a, 0, $5, 0, $20, $b8, $30, $16, $42, $78,
$cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0, $1, 0, $5, 0, 0, 0, $69, $6e,
$64, $65, $78, $14, 0, $1, 0, $9, 0, 0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42, $41,
$1, 0, $a, 0, 0, 0, $69, $6e, $64, $65, $78, $43, $6f, $6c, $6f, $72, $14, 0, $b, 0,
$1f, 0, $1, 0, $7, 0, 0, 0, $42, $6f, $6f, $6c, $65, $61, $6e, $a, 0, $5, 0, $a0,
$a6, $7d, $53, $37, $ca, $d0, $11, $94, $1c, 0, $80, $c8, $c, $fa, $7b, $29, 0, $1, 0, $9,
0, 0, 0, $74, $72, $75, $65, $66, $61, $6c, $73, $65, $14, 0, $b, 0, $1f, 0, $1, 0,
$9, 0, 0, 0, $42, $6f, $6f, $6c, $65, $61, $6e, $32, $64, $a, 0, $5, 0, $63, $ae, $85,
$48, $e8, $78, $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1, 0, $7, 0, 0, 0, $42,
$6f, $6f, $6c, $65, $61, $6e, $1, 0, $1, 0, 0, 0, $75, $14, 0, $1, 0, $7, 0, 0,
0, $42, $6f, $6f, $6c, $65, $61, $6e, $1, 0, $1, 0, 0, 0, $76, $14, 0, $b, 0, $1f,
0, $1, 0, $c, 0, 0, 0, $4d, $61, $74, $65, $72, $69, $61, $6c, $57, $72, $61, $70, $a,
0, $5, 0, $60, $ae, $85, $48, $e8, $78, $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1,
0, $7, 0, 0, 0, $42, $6f, $6f, $6c, $65, $61, $6e, $1, 0, $1, 0, 0, 0, $75, $14,
0, $1, 0, $7, 0, 0, 0, $42, $6f, $6f, $6c, $65, $61, $6e, $1, 0, $1, 0, 0, 0,
$76, $14, 0, $b, 0, $1f, 0, $1, 0, $f, 0, 0, 0, $54, $65, $78, $74, $75, $72, $65,
$46, $69, $6c, $65, $6e, $61, $6d, $65, $a, 0, $5, 0, $e1, $90, $27, $a4, $10, $78, $cf, $11,
$8f, $52, 0, $40, $33, $35, $94, $a3, $31, 0, $1, 0, $8, 0, 0, 0, $66, $69, $6c, $65,
$6e, $61, $6d, $65, $14, 0, $b, 0, $1f, 0, $1, 0, $8, 0, 0, 0, $4d, $61, $74, $65,
$72, $69, $61, $6c, $a, 0, $5, 0, $4d, $ab, $82, $3d, $da, $62, $cf, $11, $ab, $39, 0, $20,
$af, $71, $e4, $33, $1, 0, $9, 0, 0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42, $41, $1,
0, $9, 0, 0, 0, $66, $61, $63, $65, $43, $6f, $6c, $6f, $72, $14, 0, $2a, 0, $1, 0,
$5, 0, 0, 0, $70, $6f, $77, $65, $72, $14, 0, $1, 0, $8, 0, 0, 0, $43, $6f, $6c,
$6f, $72, $52, $47, $42, $1, 0, $d, 0, 0, 0, $73, $70, $65, $63, $75, $6c, $61, $72, $43,
$6f, $6c, $6f, $72, $14, 0, $1, 0, $8, 0, 0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42,
$1, 0, $d, 0, 0, 0, $65, $6d, $69, $73, $73, $69, $76, $65, $43, $6f, $6c, $6f, $72, $14,
0, $e, 0, $12, 0, $12, 0, $12, 0, $f, 0, $b, 0, $1f, 0, $1, 0, $8, 0, 0,
0, $4d, $65, $73, $68, $46, $61, $63, $65, $a, 0, $5, 0, $5f, $ab, $82, $3d, $da, $62, $cf,
$11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29, 0, $1, 0, $12, 0, 0, 0, $6e, $46, $61,
$63, $65, $56, $65, $72, $74, $65, $78, $49, $6e, $64, $69, $63, $65, $73, $14, 0, $34, 0, $29,
0, $1, 0, $11, 0, 0, 0, $66, $61, $63, $65, $56, $65, $72, $74, $65, $78, $49, $6e, $64,
$69, $63, $65, $73, $e, 0, $1, 0, $12, 0, 0, 0, $6e, $46, $61, $63, $65, $56, $65, $72,
$74, $65, $78, $49, $6e, $64, $69, $63, $65, $73, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0,
$d, 0, 0, 0, $4d, $65, $73, $68, $46, $61, $63, $65, $57, $72, $61, $70, $73, $a, 0, $5,
0, $c0, $c5, $1e, $ed, $a8, $c0, $d0, $11, $94, $1c, 0, $80, $c8, $c, $fa, $7b, $29, 0, $1,
0, $f, 0, 0, 0, $6e, $46, $61, $63, $65, $57, $72, $61, $70, $56, $61, $6c, $75, $65, $73,
$14, 0, $34, 0, $1, 0, $9, 0, 0, 0, $42, $6f, $6f, $6c, $65, $61, $6e, $32, $64, $1,
0, $e, 0, 0, 0, $66, $61, $63, $65, $57, $72, $61, $70, $56, $61, $6c, $75, $65, $73, $e,
0, $1, 0, $f, 0, 0, 0, $6e, $46, $61, $63, $65, $57, $72, $61, $70, $56, $61, $6c, $75,
$65, $73, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0, $11, 0, 0, 0, $4d, $65, $73, $68,
$54, $65, $78, $74, $75, $72, $65, $43, $6f, $6f, $72, $64, $73, $a, 0, $5, 0, $40, $3f, $f2,
$f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0, $1, 0, $e, 0, 0,
0, $6e, $54, $65, $78, $74, $75, $72, $65, $43, $6f, $6f, $72, $64, $73, $14, 0, $34, 0, $1,
0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64, $73, $32, $64, $1, 0, $d, 0, 0, 0, $74,
$65, $78, $74, $75, $72, $65, $43, $6f, $6f, $72, $64, $73, $e, 0, $1, 0, $e, 0, 0, 0,
$6e, $54, $65, $78, $74, $75, $72, $65, $43, $6f, $6f, $72, $64, $73, $f, 0, $14, 0, $b, 0,
$1f, 0, $1, 0, $10, 0, 0, 0, $4d, $65, $73, $68, $4d, $61, $74, $65, $72, $69, $61, $6c,
$4c, $69, $73, $74, $a, 0, $5, 0, $42, $3f, $f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40,
$33, $35, $94, $a3, $29, 0, $1, 0, $a, 0, 0, 0, $6e, $4d, $61, $74, $65, $72, $69, $61,
$6c, $73, $14, 0, $29, 0, $1, 0, $c, 0, 0, 0, $6e, $46, $61, $63, $65, $49, $6e, $64,
$65, $78, $65, $73, $14, 0, $34, 0, $29, 0, $1, 0, $b, 0, 0, 0, $66, $61, $63, $65,
$49, $6e, $64, $65, $78, $65, $73, $e, 0, $1, 0, $c, 0, 0, 0, $6e, $46, $61, $63, $65,
$49, $6e, $64, $65, $78, $65, $73, $f, 0, $14, 0, $e, 0, $1, 0, $8, 0, 0, 0, $4d,
$61, $74, $65, $72, $69, $61, $6c, $f, 0, $b, 0, $1f, 0, $1, 0, $b, 0, 0, 0, $4d,
$65, $73, $68, $4e, $6f, $72, $6d, $61, $6c, $73, $a, 0, $5, 0, $43, $3f, $f2, $f6, $86, $76,
$cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0, $1, 0, $8, 0, 0, 0, $6e, $4e,
$6f, $72, $6d, $61, $6c, $73, $14, 0, $34, 0, $1, 0, $6, 0, 0, 0, $56, $65, $63, $74,
$6f, $72, $1, 0, $7, 0, 0, 0, $6e, $6f, $72, $6d, $61, $6c, $73, $e, 0, $1, 0, $8,
0, 0, 0, $6e, $4e, $6f, $72, $6d, $61, $6c, $73, $f, 0, $14, 0, $29, 0, $1, 0, $c,
0, 0, 0, $6e, $46, $61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73, $14, 0, $34, 0, $1,
0, $8, 0, 0, 0, $4d, $65, $73, $68, $46, $61, $63, $65, $1, 0, $b, 0, 0, 0, $66,
$61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73, $e, 0, $1, 0, $c, 0, 0, 0, $6e, $46,
$61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0,
$10, 0, 0, 0, $4d, $65, $73, $68, $56, $65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72, $73,
$a, 0, $5, 0, $21, $b8, $30, $16, $42, $78, $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3,
$29, 0, $1, 0, $d, 0, 0, 0, $6e, $56, $65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72,
$73, $14, 0, $34, 0, $1, 0, $c, 0, 0, 0, $49, $6e, $64, $65, $78, $65, $64, $43, $6f,
$6c, $6f, $72, $1, 0, $c, 0, 0, 0, $76, $65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72,
$73, $e, 0, $1, 0, $d, 0, 0, 0, $6e, $56, $65, $72, $74, $65, $78, $43, $6f, $6c, $6f,
$72, $73, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0, $4, 0, 0, 0, $4d, $65, $73, $68,
$a, 0, $5, 0, $44, $ab, $82, $3d, $da, $62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33,
$29, 0, $1, 0, $9, 0, 0, 0, $6e, $56, $65, $72, $74, $69, $63, $65, $73, $14, 0, $34,
0, $1, 0, $6, 0, 0, 0, $56, $65, $63, $74, $6f, $72, $1, 0, $8, 0, 0, 0, $76,
$65, $72, $74, $69, $63, $65, $73, $e, 0, $1, 0, $9, 0, 0, 0, $6e, $56, $65, $72, $74,
$69, $63, $65, $73, $f, 0, $14, 0, $29, 0, $1, 0, $6, 0, 0, 0, $6e, $46, $61, $63,
$65, $73, $14, 0, $34, 0, $1, 0, $8, 0, 0, 0, $4d, $65, $73, $68, $46, $61, $63, $65,
$1, 0, $5, 0, 0, 0, $66, $61, $63, $65, $73, $e, 0, $1, 0, $6, 0, 0, 0, $6e,
$46, $61, $63, $65, $73, $f, 0, $14, 0, $e, 0, $12, 0, $12, 0, $12, 0, $f, 0, $b,
0, $1f, 0, $1, 0, $14, 0, 0, 0, $46, $72, $61, $6d, $65, $54, $72, $61, $6e, $73, $66,
$6f, $72, $6d, $4d, $61, $74, $72, $69, $78, $a, 0, $5, 0, $41, $3f, $f2, $f6, $86, $76, $cf,
$11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1, 0, $9, 0, 0, 0, $4d, $61, $74, $72, $69,
$78, $34, $78, $34, $1, 0, $b, 0, 0, 0, $66, $72, $61, $6d, $65, $4d, $61, $74, $72, $69,
$78, $14, 0, $b, 0, $1f, 0, $1, 0, $5, 0, 0, 0, $46, $72, $61, $6d, $65, $a, 0,
$5, 0, $46, $ab, $82, $3d, $da, $62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $e, 0,
$12, 0, $12, 0, $12, 0, $f, 0, $b, 0, $1f, 0, $1, 0, $9, 0, 0, 0, $46, $6c,
$6f, $61, $74, $4b, $65, $79, $73, $a, 0, $5, 0, $a9, $46, $dd, $10, $5b, $77, $cf, $11, $8f,
$52, 0, $40, $33, $35, $94, $a3, $29, 0, $1, 0, $7, 0, 0, 0, $6e, $56, $61, $6c, $75,
$65, $73, $14, 0, $34, 0, $2a, 0, $1, 0, $6, 0, 0, 0, $76, $61, $6c, $75, $65, $73,
$e, 0, $1, 0, $7, 0, 0, 0, $6e, $56, $61, $6c, $75, $65, $73, $f, 0, $14, 0, $b,
0, $1f, 0, $1, 0, $e, 0, 0, 0, $54, $69, $6d, $65, $64, $46, $6c, $6f, $61, $74, $4b,
$65, $79, $73, $a, 0, $5, 0, $80, $b1, $6, $f4, $3b, $7b, $cf, $11, $8f, $52, 0, $40, $33,
$35, $94, $a3, $29, 0, $1, 0, $4, 0, 0, 0, $74, $69, $6d, $65, $14, 0, $1, 0, $9,
0, 0, 0, $46, $6c, $6f, $61, $74, $4b, $65, $79, $73, $1, 0, $6, 0, 0, 0, $74, $66,
$6b, $65, $79, $73, $14, 0, $b, 0, $1f, 0, $1, 0, $c, 0, 0, 0, $41, $6e, $69, $6d,
$61, $74, $69, $6f, $6e, $4b, $65, $79, $a, 0, $5, 0, $a8, $46, $dd, $10, $5b, $77, $cf, $11,
$8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0, $1, 0, $7, 0, 0, 0, $6b, $65, $79, $54,
$79, $70, $65, $14, 0, $29, 0, $1, 0, $5, 0, 0, 0, $6e, $4b, $65, $79, $73, $14, 0,
$34, 0, $1, 0, $e, 0, 0, 0, $54, $69, $6d, $65, $64, $46, $6c, $6f, $61, $74, $4b, $65,
$79, $73, $1, 0, $4, 0, 0, 0, $6b, $65, $79, $73, $e, 0, $1, 0, $5, 0, 0, 0,
$6e, $4b, $65, $79, $73, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0, $10, 0, 0, 0, $41,
$6e, $69, $6d, $61, $74, $69, $6f, $6e, $4f, $70, $74, $69, $6f, $6e, $73, $a, 0, $5, 0, $c0,
$56, $bf, $e2, $f, $84, $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0, $1, 0, $a,
0, 0, 0, $6f, $70, $65, $6e, $63, $6c, $6f, $73, $65, $64, $14, 0, $29, 0, $1, 0, $f,
0, 0, 0, $70, $6f, $73, $69, $74, $69, $6f, $6e, $71, $75, $61, $6c, $69, $74, $79, $14, 0,
$b, 0, $1f, 0, $1, 0, $9, 0, 0, 0, $41, $6e, $69, $6d, $61, $74, $69, $6f, $6e, $a,
0, $5, 0, $4f, $ab, $82, $3d, $da, $62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $e,
0, $12, 0, $12, 0, $12, 0, $f, 0, $b, 0, $1f, 0, $1, 0, $c, 0, 0, 0, $41,
$6e, $69, $6d, $61, $74, $69, $6f, $6e, $53, $65, $74, $a, 0, $5, 0, $50, $ab, $82, $3d, $da,
$62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $e, 0, $1, 0, $9, 0, 0, 0, $41,
$6e, $69, $6d, $61, $74, $69, $6f, $6e, $f, 0, $b, 0, $1f, 0, $1, 0, $a, 0, 0, 0,
$49, $6e, $6c, $69, $6e, $65, $44, $61, $74, $61, $a, 0, $5, 0, $a0, $ee, $23, $3a, $b1, $94,
$d0, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $e, 0, $1, 0, $6, 0, 0, 0, $42, $49,
$4e, $41, $52, $59, $f, 0, $b, 0, $1f, 0, $1, 0, $3, 0, 0, 0, $55, $72, $6c, $a,
0, $5, 0, $a1, $ee, $23, $3a, $b1, $94, $d0, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29,
0, $1, 0, $5, 0, 0, 0, $6e, $55, $72, $6c, $73, $14, 0, $34, 0, $31, 0, $1, 0,
$4, 0, 0, 0, $75, $72, $6c, $73, $e, 0, $1, 0, $5, 0, 0, 0, $6e, $55, $72, $6c,
$73, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0, $f, 0, 0, 0, $50, $72, $6f, $67, $72,
$65, $73, $73, $69, $76, $65, $4d, $65, $73, $68, $a, 0, $5, 0, $60, $c3, $63, $8a, $7d, $99,
$d0, $11, $94, $1c, 0, $80, $c8, $c, $fa, $7b, $e, 0, $1, 0, $3, 0, 0, 0, $55, $72,
$6c, $13, 0, $1, 0, $a, 0, 0, 0, $49, $6e, $6c, $69, $6e, $65, $44, $61, $74, $61, $f,
0, $b, 0, $1f, 0, $1, 0, $4, 0, 0, 0, $47, $75, $69, $64, $a, 0, $5, 0, $e0,
$90, $27, $a4, $10, $78, $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0, $1, 0, $5,
0, 0, 0, $64, $61, $74, $61, $31, $14, 0, $28, 0, $1, 0, $5, 0, 0, 0, $64, $61,
$74, $61, $32, $14, 0, $28, 0, $1, 0, $5, 0, 0, 0, $64, $61, $74, $61, $33, $14, 0,
$34, 0, $2d, 0, $1, 0, $5, 0, 0, 0, $64, $61, $74, $61, $34, $e, 0, $3, 0, $8,
0, 0, 0, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0, $e, 0, 0, 0, $53, $74, $72,
$69, $6e, $67, $50, $72, $6f, $70, $65, $72, $74, $79, $a, 0, $5, 0, $e0, $21, $f, $7f, $e1,
$bf, $d1, $11, $82, $c0, 0, $a0, $c9, $69, $72, $71, $31, 0, $1, 0, $3, 0, 0, 0, $6b,
$65, $79, $14, 0, $31, 0, $1, 0, $5, 0, 0, 0, $76, $61, $6c, $75, $65, $14, 0, $b,
0, $1f, 0, $1, 0, $b, 0, 0, 0, $50, $72, $6f, $70, $65, $72, $74, $79, $42, $61, $67,
$a, 0, $5, 0, $e1, $21, $f, $7f, $e1, $bf, $d1, $11, $82, $c0, 0, $a0, $c9, $69, $72, $71,
$e, 0, $1, 0, $e, 0, 0, 0, $53, $74, $72, $69, $6e, $67, $50, $72, $6f, $70, $65, $72,
$74, $79, $f, 0, $b, 0, $1f, 0, $1, 0, $e, 0, 0, 0, $45, $78, $74, $65, $72, $6e,
$61, $6c, $56, $69, $73, $75, $61, $6c, $a, 0, $5, 0, $a0, $6a, $11, $98, $ba, $bd, $d1, $11,
$82, $c0, 0, $a0, $c9, $69, $72, $71, $1, 0, $4, 0, 0, 0, $47, $75, $69, $64, $1, 0,
$12, 0, 0, 0, $67, $75, $69, $64, $45, $78, $74, $65, $72, $6e, $61, $6c, $56, $69, $73, $75,
$61, $6c, $14, 0, $e, 0, $12, 0, $12, 0, $12, 0, $f, 0, $b, 0, $1f, 0, $1, 0,
$b, 0, 0, 0, $52, $69, $67, $68, $74, $48, $61, $6e, $64, $65, $64, $a, 0, $5, 0, $a0,
$5e, $5d, $7f, $3a, $d5, $d1, $11, $82, $c0, 0, $a0, $c9, $69, $72, $71, $29, 0, $1, 0, $c,
0, 0, 0, $62, $52, $69, $67, $68, $74, $48, $61, $6e, $64, $65, $64, $14, 0, $b, 0);
 
//---------------
{$ENDIF}
//DirectInput file
(*==========================================================================;
*
* Copyright (C) 1996-1997 Microsoft Corporation. All Rights Reserved.
* Copyright (C) 1996-1999 Microsoft Corporation. All Rights Reserved.
*
* File: dinput.h
* Content: DirectInput include file
*
****************************************************************************)
* DirectX 7.0 Delphi adaptation by Erik Unger, input format
* variable structure & other fixups by Arne Schäpers (as)
*
* Modified: 10-Sep-2000
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: DelphiDirectX@next-reality.com
* a.schaepers@digitalpublishing.de
*
***************************************************************************)
 
const
{$IFDEF DirectX3}
DIRECTINPUT_VERSION = $0300;
{$ENDIF}{$IFDEF DirectX5}
DIRECTINPUT_VERSION = $0500;
{$ENDIF}{$IFDEF DirectX6}
DIRECTINPUT_VERSION = $0500;
{$ENDIF}{$IFDEF DirectX7}
DIRECTINPUT_VERSION = $0700;
{ Some notes from as:
1. DirectInput Enum callback functions which are documented with result
type BOOL in the SDK had to be changed to result type integer because the debug
version of DINPUT.DLL (which is the same for SDK versions 5.0, 5.2, 6.0, and 6.1)
explicitely checks for two possible return values:
 
0 - FALSE in C and in Delphi
1 - TRUE in C, defined as DIENUM_CONTINUE
 
In Delphi, TRUE means $FFFFFFFF (= -1) for the LongBool (= BOOL) data
type, and AL = 1 (upper three bytes undefined) for the Boolean data type.
The debug version of DINPUT.DLL will throw an external exception
("invalid return value for callback") when fed with either value.
 
This change affects the following methods:
EnumDevices, EnumObjects, EnumEffects, EnumCreatedEffectObjects
 
2. Windows 98 and DX6 debug versions DInput and DSound
 
Under Windows 98, the "debug" setup of the DirectX SDK 6.x skips DInput.DLL
and DSound.DLL, i.e. makes you end up with the retail version of these two
files without any notice.
The debug versions of DInput.DLL and DSound.DLL can be found in the
\extras\Win98\Win98Dbg folder of the SDK CD; they need to be installed
"manually".
 
This problem has been fixed with DX7 where the SDK installs the debug versions
of DInput and DSound without any "manual" help.
 
}
 
 
var
DInputDLL : HMODULE;
 
{$IFDEF DIRECTX3}
const DIRECTINPUT_VERSION = $0300;
{$ELSE}
const DIRECTINPUT_VERSION = $0700;
{$ENDIF}
 
{ Class IDs }
function DIErrorString(Value: HResult) : string;
 
//type
// TRefGUID = packed record
// case integer of
// 1: (guid : PGUID);
// 2: (dwFlags : DWORD);
// end;
 
(****************************************************************************
*
* Class IDs
*
****************************************************************************)
const
CLSID_DirectInput: TGUID = '{25E609E0-B259-11CF-BFC7-444553540000}';
CLSID_DirectInputDevice: TGUID = '{25E609E1-B259-11CF-BFC7-444553540000}';
CLSID_DirectInput: TGUID =
(D1:$25E609E0;D2:$B259;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
CLSID_DirectInputDevice: TGUID =
(D1:$25E609E1;D2:$B259;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
 
{ Interfaces }
(****************************************************************************
*
* Predefined object types
*
****************************************************************************)
 
const
IID_IDirectInputA: TGUID = '{89521360-AA8A-11CF-BFC7-444553540000}';
IID_IDirectInputW: TGUID = '{89521361-AA8A-11CF-BFC7-444553540000}';
IID_IDirectInput2A: TGUID = '{5944E662-AA8A-11CF-BFC7-444553540000}';
IID_IDirectInput2W: TGUID = '{5944E663-AA8A-11CF-BFC7-444553540000}';
IID_IDirectInput7A: TGUID = '{9A4CB684-236D-11D3-8E9D-00C04F6844AE}';
IID_IDirectInput7W: TGUID = '{9A4CB685-236D-11D3-8E9D-00C04F6844AE}';
IID_IDirectInputDeviceA: TGUID = '{5944E680-C92E-11CF-BFC7-444553540000}';
IID_IDirectInputDeviceW: TGUID = '{5944E681-C92E-11CF-BFC7-444553540000}';
IID_IDirectInputDevice2A: TGUID = '{5944E682-C92E-11CF-BFC7-444553540000}';
IID_IDirectInputDevice2W: TGUID = '{5944E683-C92E-11CF-BFC7-444553540000}';
IID_IDirectInputDevice7A: TGUID = '{57D7C6BC-2356-11D3-8E9D-00C04F6844AE}';
IID_IDirectInputDevice7W: TGUID = '{57D7C6BD-2356-11D3-8E9D-00C04F6844AE}';
IID_IDirectInputEffect: TGUID = '{E7E1F7C0-88D2-11D0-9AD0-00A0C9A06E35}';
GUID_XAxis: TGUID =
(D1:$A36D02E0;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_YAxis: TGUID =
(D1:$A36D02E1;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_ZAxis: TGUID =
(D1:$A36D02E2;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_RxAxis: TGUID =
(D1:$A36D02F4;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_RyAxis: TGUID =
(D1:$A36D02F5;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_RzAxis: TGUID =
(D1:$A36D02E3;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_Slider: TGUID =
(D1:$A36D02E4;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
 
{ Predefined object types }
GUID_Button: TGUID =
(D1:$A36D02F0;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_Key: TGUID =
(D1:$55728220;D2:$D33C;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
 
GUID_XAxis: TGUID = '{A36D02E0-C9F3-11CF-BFC7-444553540000}';
GUID_YAxis: TGUID = '{A36D02E1-C9F3-11CF-BFC7-444553540000}';
GUID_ZAxis: TGUID = '{A36D02E2-C9F3-11CF-BFC7-444553540000}';
GUID_RxAxis: TGUID = '{A36D02F4-C9F3-11CF-BFC7-444553540000}';
GUID_RyAxis: TGUID = '{A36D02F5-C9F3-11CF-BFC7-444553540000}';
GUID_RzAxis: TGUID = '{A36D02E3-C9F3-11CF-BFC7-444553540000}';
GUID_Slider: TGUID = '{A36D02E4-C9F3-11CF-BFC7-444553540000}';
GUID_Button: TGUID = '{A36D02F0-C9F3-11CF-BFC7-444553540000}';
GUID_Key: TGUID = '{55728220-D33C-11CF-BFC7-444553540000}';
GUID_POV: TGUID = '{A36D02F2-C9F3-11CF-BFC7-444553540000}';
GUID_Unknown: TGUID = '{A36D02F3-C9F3-11CF-BFC7-444553540000}';
GUID_POV: TGUID =
(D1:$A36D02F2;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
 
{ Predefined product GUIDs }
GUID_Unknown: TGUID =
(D1:$A36D02F3;D2:$C9F3;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
 
GUID_SysMouse: TGUID = '{6F1D2B60-D5A0-11CF-BFC7-444553540000}';
GUID_SysKeyboard: TGUID = '{6F1D2B61-D5A0-11CF-BFC7-444553540000}';
GUID_Joystick: TGUID = '{6F1D2B70-D5A0-11CF-BFC7-444553540000}';
(****************************************************************************
*
* Predefined product GUIDs
*
****************************************************************************)
 
GUID_SysMouse: TGUID =
(D1:$6F1D2B60;D2:$D5A0;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_SysKeyboard: TGUID =
(D1:$6F1D2B61;D2:$D5A0;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_Joystick: TGUID =
(D1:$6F1D2B70;D2:$D5A0;D3:$11CF;D4:($BF,$C7,$44,$45,$53,$54,$00,$00));
GUID_SysMouseEm: TGUID = '{6F1D2B80-D5A0-11CF-BFC7-444553540000}';
GUID_SysMouseEm2: TGUID = '{6F1D2B81-D5A0-11CF-BFC7-444553540000}';
GUID_SysKeyboardEm: TGUID = '{6F1D2B82-D5A0-11CF-BFC7-444553540000}';
GUID_SysKeyboardEm2: TGUID = '{6F1D2B83-D5A0-11CF-BFC7-444553540000}';
 
{ Predefined force feedback effects }
(****************************************************************************
*
* Predefined force feedback effects
*
****************************************************************************)
 
GUID_ConstantForce: TGUID = '{13541C20-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_RampForce: TGUID = '{13541C21-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_Square: TGUID = '{13541C22-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_Sine: TGUID = '{13541C23-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_Triangle: TGUID = '{13541C24-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_SawtoothUp: TGUID = '{13541C25-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_SawtoothDown: TGUID = '{13541C26-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_Spring: TGUID = '{13541C27-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_Damper: TGUID = '{13541C28-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_Inertia: TGUID = '{13541C29-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_Friction: TGUID = '{13541C2A-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_CustomForce: TGUID = '{13541C2B-8E33-11D0-9AD0-00A0C9A06E35}';
GUID_ConstantForce: TGUID =
(D1:$13541C20;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_RampForce: TGUID =
(D1:$13541C21;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_Square: TGUID =
(D1:$13541C22;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_Sine: TGUID =
(D1:$13541C23;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_Triangle: TGUID =
(D1:$13541C24;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_SawtoothUp: TGUID =
(D1:$13541C25;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_SawtoothDown: TGUID =
(D1:$13541C26;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_Spring: TGUID =
(D1:$13541C27;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_Damper: TGUID =
(D1:$13541C28;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_Inertia: TGUID =
(D1:$13541C29;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_Friction: TGUID =
(D1:$13541C2A;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
GUID_CustomForce: TGUID =
(D1:$13541C2B;D2:$8E33;D3:$11D0;D4:($9A,$D0,$00,$A0,$C9,$A0,$6E,$35));
 
{ IDirectInputEffect }
 
 
(****************************************************************************
*
* Interfaces and Structures...
*
****************************************************************************)
 
(****************************************************************************
*
* IDirectInputEffect
*
****************************************************************************)
 
const
DIEFT_ALL = $00000000;
 
8422,7 → 12106,7
DIEFT_DEADBAND = $00004000;
DIEFT_STARTDELAY = $00008000;
 
function DIEFT_GETTYPE(n: DWORD): DWORD;
function DIEFT_GETTYPE(n: variant) : byte;
 
const
DI_DEGREES = 100;
8431,129 → 12115,101
 
type
PDIConstantForce = ^TDIConstantForce;
TDIConstantForce = record
lMagnitude: Longint;
TDIConstantForce = packed record
lMagnitude : LongInt;
end;
 
DICONSTANTFORCE = TDIConstantForce;
LPDICONSTANTFORCE = PDIConstantForce;
 
PDIRampForce = ^TDIRampForce;
TDIRampForce = record
lStart: Longint;
lEnd: Longint;
TDIRampForce = packed record
lStart : LongInt;
lEnd : LongInt;
end;
 
DIRAMPFORCE = TDIRampForce;
LPDIRAMPFORCE = PDIRampForce;
 
PDIPeriodic = ^TDIPeriodic;
TDIPeriodic = record
TDIPeriodic = packed record
dwMagnitude: DWORD;
lOffset: Longint;
lOffset : LongInt;
dwPhase: DWORD;
dwPeriod: DWORD;
end;
 
DIPERIODIC = TDIPeriodic;
LPDIPERIODIC = PDIPeriodic;
 
PDICondition = ^TDICondition;
TDICondition = record
lOffset: Longint;
lPositiveCoefficient: Longint;
lNegativeCoefficient: Longint;
TDICondition = packed record
lOffset : LongInt;
lPositiveCoefficient : LongInt;
lNegativeCoefficient : LongInt;
dwPositiveSaturation: DWORD;
dwNegativeSaturation: DWORD;
lDeadBand: Longint;
lDeadBand : LongInt;
end;
 
DICONDITION = TDICondition;
LPDICONDITION = PDICondition;
 
PDICustomForce = ^TDICustomForce;
TDICustomForce = record
TDICustomForce = packed record
cChannels: DWORD;
dwSamplePeriod: DWORD;
cSamples: DWORD;
rglForceData: PLongint;
rglForceData : PLongInt;
end;
 
DICUSTOMFORCE = TDICustomForce;
LPDICUSTOMFORCE = PDICustomForce;
 
PDIEnvelope = ^TDIEnvelope;
TDIEnvelope = record
dwSize: DWORD; // sizeof(DIENVELOPE)
TDIEnvelope = packed record
dwSize : DWORD; (* sizeof(DIENVELOPE) *)
dwAttackLevel: DWORD;
dwAttackTime: DWORD; // Microseconds
dwAttackTime : DWORD; (* Microseconds *)
dwFadeLevel: DWORD;
dwFadeTime: DWORD; // Microseconds
dwFadeTime : DWORD; (* Microseconds *)
end;
 
DIENVELOPE = TDIEnvelope;
LPDIENVELOPE = PDIEnvelope;
 
PDIEffect_DX5 = ^TDIEffect_DX5;
TDIEffect_DX5 = record
dwSize: DWORD; // sizeof(DIEFFECT)
dwFlags: DWORD; // DIEFF_*
dwDuration: DWORD; // Microseconds
dwSamplePeriod: DWORD; // Microseconds
TDIEffect_DX5 = packed record
dwSize : DWORD; (* sizeof(DIEFFECT) *)
dwFlags : DWORD; (* DIEFF_* *)
dwDuration : DWORD; (* Microseconds *)
dwSamplePeriod : DWORD; (* Microseconds *)
dwGain: DWORD;
dwTriggerButton: DWORD; // or DIEB_NOTRIGGER
dwTriggerRepeatInterval: DWORD; // Microseconds
cAxes: DWORD; // Number of axes
rgdwAxes: PDWORD; // arrayof axes
rglDirection: PLongint; // arrayof directions
lpEnvelope: PDIEnvelope; // Optional
cbTypeSpecificParams: DWORD; // Size of params
lpvTypeSpecificParams: Pointer; // Pointer to params
dwTriggerButton : DWORD; (* or DIEB_NOTRIGGER *)
dwTriggerRepeatInterval : DWORD; (* Microseconds *)
cAxes : DWORD; (* Number of axes *)
rgdwAxes : PDWORD; (* Array of axes *)
rglDirection : PLongInt; (* Array of directions *)
lpEnvelope : PDIEnvelope; (* Optional *)
cbTypeSpecificParams : DWORD; (* Size of params *)
lpvTypeSpecificParams : pointer; (* Pointer to params *)
end;
 
PDIEffect_DX6 = ^TDIEffect_DX6;
TDIEffect_DX6 = record
dwSize: DWORD; // sizeof(DIEFFECT)
dwFlags: DWORD; // DIEFF_*
dwDuration: DWORD; // Microseconds
dwSamplePeriod: DWORD; // Microseconds
TDIEffect_DX6 = packed record
dwSize : DWORD; (* sizeof(DIEFFECT) *)
dwFlags : DWORD; (* DIEFF_* *)
dwDuration : DWORD; (* Microseconds *)
dwSamplePeriod : DWORD; (* Microseconds *)
dwGain: DWORD;
dwTriggerButton: DWORD; // or DIEB_NOTRIGGER
dwTriggerRepeatInterval: DWORD; // Microseconds
cAxes: DWORD; // Number of axes
rgdwAxes: PDWORD; // arrayof axes
rglDirection: PLongint; // arrayof directions
lpEnvelope: PDIEnvelope; // Optional
cbTypeSpecificParams: DWORD; // Size of params
lpvTypeSpecificParams: Pointer; // Pointer to params
dwStartDelay: DWORD; // Microseconds
dwTriggerButton : DWORD; (* or DIEB_NOTRIGGER *)
dwTriggerRepeatInterval : DWORD; (* Microseconds *)
cAxes : DWORD; (* Number of axes *)
rgdwAxes : PDWORD; (* Array of axes *)
rglDirection : PLongInt; (* Array of directions *)
lpEnvelope : PDIEnvelope; (* Optional *)
cbTypeSpecificParams : DWORD; (* Size of params *)
lpvTypeSpecificParams : pointer; (* Pointer to params *)
dwStartDelay: DWORD; (* Microseconds *)
end;
 
{$IFDEF SupportDirectX6}
PDIEffect = PDIEffect_DX6;
PDIEffect = ^TDIEffect;
{$IFDEF DIRECTX5}
TDIEffect = TDIEffect_DX5;
{$ELSE}
TDIEffect = TDIEffect_DX6;
{$ELSE}
PDIEffect = PDIEffect_DX5;
TDIEffect = TDIEffect_DX5;
{$ENDIF}
 
DIEFFECT = TDIEFFECT;
LPDIEFFECT = PDIEFFECT;
 
PDIFileEffect = ^TDIFileEffect;
TDIFileEffect = record
TDIFileEffect = packed record
dwSize: DWORD;
GuidEffect: TGUID;
lpDiEffect: PDIEffect;
szFriendlyName: array[0..MAX_PATH-1] of Char;
szFriendlyName : array [0..MAX_PATH-1] of AnsiChar;
end;
 
DIFILEEFFECT = TDIFileEffect;
LPDIFILEEFFECT = PDIFileEffect;
 
TDIEnumEffectsInFileCallback = function(const lpDiFileEf: TDIFileEffect; pvRef: Pointer): BOOL; far pascal;
LPDIENUMEFFECTSINFILECALLBACK = TDIEnumEffectsInFileCallback;
 
const
DIEFF_OBJECTIDS = $00000001;
DIEFF_OBJECTOFFSETS = $00000002;
8570,12 → 12226,12
DIEP_DIRECTION = $00000040;
DIEP_ENVELOPE = $00000080;
DIEP_TYPESPECIFICPARAMS = $00000100;
{$IFDEF DIRECTX5}
DIEP_ALLPARAMS = $000001FF;
{$ELSE}
DIEP_STARTDELAY = $00000200;
DIEP_ALLPARAMS_DX5 = $000001FF;
{$IFDEF SupportDirectX6}
DIEP_ALLPARAMS = $000003FF;
{$ELSE}
DIEP_ALLPARAMS = $000001FF;
{$ENDIF}
DIEP_START = $20000000;
DIEP_NORESTART = $40000000;
8588,36 → 12244,43
DIEGES_PLAYING = $00000001;
DIEGES_EMULATED = $00000002;
 
 
type
PDIEffEscape = ^TDIEffEscape;
TDIEffEscape = record
TDIEffEscape = packed record
dwSize: DWORD;
dwCommand: DWORD;
lpvInBuffer: Pointer;
lpvInBuffer : pointer;
cbInBuffer: DWORD;
lpvOutBuffer: Pointer;
lpvOutBuffer : pointer;
cbOutBuffer: DWORD;
end;
 
DIEFFESCAPE = TDIEffEscape;
LPDIEFFESCAPE = PDIEffEscape;
 
//
// IDirectSoundCapture // as: ???
//
IDirectInputEffect = interface(IUnknown)
['{E7E1F7C0-88D2-11D0-9AD0-00A0C9A06E35}']
// IDirectInputEffect methods
function Initialize(hinst: THandle; dwVersion: DWORD; const rguid: TGUID): HResult; stdcall;
(** IDirectInputEffect methods ***)
function Initialize(hinst: THandle; dwVersion: DWORD;
const rguid: TGUID) : HResult; stdcall;
function GetEffectGuid(var pguid: TGUID): HResult; stdcall;
function GetParameters(var peff: TDIEffect; dwFlags: DWORD): HResult; stdcall;
function SetParameters(const peff: TDIEffect; dwFlags: DWORD): HResult; stdcall;
function SetParameters(var peff: TDIEffect; dwFlags: DWORD) : HResult; stdcall;
function Start(dwIterations: DWORD; dwFlags: DWORD): HResult; stdcall;
function Stop: HResult; stdcall;
function GetEffectStatus(var pdwFlags: DWORD): HResult; stdcall;
function DownLoad: HResult; stdcall;
function Download : HResult; stdcall;
function Unload: HResult; stdcall;
function Escape(const pesc: TDIEffEscape): HResult; stdcall;
function Escape(var pesc: TDIEffEscape) : HResult; stdcall;
end;
 
{ IDirectInputDevice }
(****************************************************************************
*
* IDirectInputDevice
*
****************************************************************************)
 
const
DIDEVTYPE_DEVICE = 1;
8654,12 → 12317,12
DIDEVTYPEJOYSTICK_WHEEL = 6;
DIDEVTYPEJOYSTICK_HEADTRACKER = 7;
 
function GET_DIDEVICE_TYPE(dwDevType: DWORD): DWORD;
function GET_DIDEVICE_SUBTYPE(dwDevType: DWORD): DWORD;
function GET_DIDEVICE_TYPE(dwDevType: variant) : byte;
function GET_DIDEVICE_SUBTYPE(dwDevType: variant) : byte;
 
type
PDIDevCaps_DX3 = ^TDIDevCaps_DX3;
TDIDevCaps_DX3 = record
TDIDevCaps_DX3 = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwDevType: DWORD;
8669,7 → 12332,7
end;
 
PDIDevCaps_DX5 = ^TDIDevCaps_DX5;
TDIDevCaps_DX5 = record
TDIDevCaps_DX5 = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwDevType: DWORD;
8683,29 → 12346,18
dwFFDriverVersion: DWORD;
end;
 
{$IFDEF DirectX3}
PDIDevCaps = ^TDIDevCaps;
{$IFDEF DIRECTX3}
TDIDevCaps = TDIDevCaps_DX3;
PDIDevCaps = PDIDevCaps_DX3;
{$ENDIF}{$IFDEF DirectX5}
{$ELSE}
TDIDevCaps = TDIDevCaps_DX5;
PDIDevCaps = PDIDevCaps_DX5;
{$ENDIF}{$IFDEF DirectX6}
TDIDevCaps = TDIDevCaps_DX5;
PDIDevCaps = PDIDevCaps_DX5;
{$ENDIF}{$IFDEF DirectX7}
TDIDevCaps = TDIDevCaps_DX5;
PDIDevCaps = PDIDevCaps_DX5;
{$ENDIF}
 
DIDEVCAPS = TDIDevCaps;
LPDIDEVCAPS = PDIDevCaps;
 
const
DIDC_ATTACHED = $00000001;
DIDC_POLLEDDEVICE = $00000002;
DIDC_EMULATED = $00000004;
DIDC_POLLEDDATAFORMAT = $00000008;
 
DIDC_FORCEFEEDBACK = $00000100;
DIDC_FFATTACK = $00000200;
DIDC_FFFADE = $00000400;
8733,22 → 12385,25
 
DIDFT_ANYINSTANCE = $00FFFF00;
DIDFT_INSTANCEMASK = DIDFT_ANYINSTANCE;
 
function DIDFT_MAKEINSTANCE(n: variant) : DWORD;
function DIDFT_GETTYPE(n: variant) : byte;
function DIDFT_GETINSTANCE(n: variant) : DWORD;
const
DIDFT_FFACTUATOR = $01000000;
DIDFT_FFEFFECTTRIGGER = $02000000;
DIDFT_OUTPUT = $10000000;
DIDFT_VENDORDEFINED = $04000000;
DIDFT_ALIAS = $08000000;
 
function DIDFT_ENUMCOLLECTION(n: variant) : DWORD;
const
DIDFT_NOCOLLECTION = $00FFFF00;
 
function DIDFT_MAKEINSTANCE(n: WORD): DWORD;
function DIDFT_GETTYPE(n: DWORD): DWORD;
function DIDFT_GETINSTANCE(n: DWORD): WORD;
function DIDFT_ENUMCOLLECTION(n: WORD): DWORD;
 
 
type
PDIObjectDataFormat = ^TDIObjectDataFormat;
TDIObjectDataFormat = record
TDIObjectDataFormat = packed record
pguid: PGUID;
dwOfs: DWORD;
dwType: DWORD;
8755,11 → 12410,8
dwFlags: DWORD;
end;
 
DIOBJECTDATAFORMAT = TDIObjectDataFormat;
LPDIOBJECTDATAFORMAT = PDIObjectDataFormat;
 
PDIDataFormat = ^TDIDataFormat;
TDIDataFormat = record
TDIDataFormat = packed record
dwSize: DWORD;
dwObjSize: DWORD;
dwFlags: DWORD;
8768,32 → 12420,46
rgodf: PDIObjectDataFormat;
end;
 
DIDATAFORMAT = TDIDataFormat;
LPDIDATAFORMAT = PDIDataFormat;
 
const
DIDF_ABSAXIS = $00000001;
DIDF_RELAXIS = $00000002;
 
type
PDIDeviceObjectInstanceA_DX3 = ^TDIDeviceObjectInstanceA_DX3;
TDIDeviceObjectInstanceA_DX3 = record
PDIDeviceObjectInstance_DX3A = ^TDIDeviceObjectInstance_DX3A;
TDIDeviceObjectInstance_DX3A = packed record
dwSize: DWORD;
guidType: TGUID;
dwOfs: DWORD;
dwType: DWORD;
dwFlags: DWORD;
tszName: array[0..MAX_PATH-1] of CHAR;
tszName: Array [0..MAX_PATH-1] of CHAR;
end;
 
PDIDeviceObjectInstanceA_DX5 = ^TDIDeviceObjectInstanceA_DX5;
TDIDeviceObjectInstanceA_DX5 = record
PDIDeviceObjectInstance_DX3W = ^TDIDeviceObjectInstance_DX3W;
TDIDeviceObjectInstance_DX3W = packed record
dwSize: DWORD;
guidType: TGUID;
dwOfs: DWORD;
dwType: DWORD;
dwFlags: DWORD;
tszName: array[0..MAX_PATH-1] of CHAR;
tszName: Array [0..MAX_PATH-1] of WCHAR;
end;
 
PDIDeviceObjectInstance_DX3 = ^TDIDeviceObjectInstance_DX3;
{$IFDEF UNICODE}
TDIDeviceObjectInstance_DX3 = TDIDeviceObjectInstance_DX3W;
{$ELSE}
TDIDeviceObjectInstance_DX3 = TDIDeviceObjectInstance_DX3A;
{$ENDIF}
 
PDIDeviceObjectInstance_DX5A = ^TDIDeviceObjectInstance_DX5A;
TDIDeviceObjectInstance_DX5A = packed record
dwSize: DWORD;
guidType: TGUID;
dwOfs: DWORD;
dwType: DWORD;
dwFlags: DWORD;
tszName: Array [0..MAX_PATH-1] of CHAR;
dwFFMaxForce: DWORD;
dwFFForceResolution: DWORD;
wCollectionNumber: WORD;
8805,41 → 12471,14
wReserved: WORD;
end;
 
{$IFDEF DirectX3}
TDIDeviceObjectInstanceA = TDIDeviceObjectInstanceA_DX3;
PDIDeviceObjectInstanceA = PDIDeviceObjectInstanceA_DX3;
{$ENDIF}{$IFDEF DirectX5}
TDIDeviceObjectInstanceA = TDIDeviceObjectInstanceA_DX5;
PDIDeviceObjectInstanceA = PDIDeviceObjectInstanceA_DX5;
{$ENDIF}{$IFDEF DirectX6}
TDIDeviceObjectInstanceA = TDIDeviceObjectInstanceA_DX5;
PDIDeviceObjectInstanceA = PDIDeviceObjectInstanceA_DX5;
{$ENDIF}{$IFDEF DirectX7}
TDIDeviceObjectInstanceA = TDIDeviceObjectInstanceA_DX5;
PDIDeviceObjectInstanceA = PDIDeviceObjectInstanceA_DX5;
{$ENDIF}
 
DIDEVICEOBJECTINSTANCEA = TDIDeviceObjectInstanceA;
LPDIDEVICEOBJECTINSTANCEA = PDIDeviceObjectInstanceA;
 
PDIDeviceObjectInstanceW_DX3 = ^TDIDeviceObjectInstanceW_DX3;
TDIDeviceObjectInstanceW_DX3 = record
PDIDeviceObjectInstance_DX5W = ^TDIDeviceObjectInstance_DX5W;
TDIDeviceObjectInstance_DX5W = packed record
dwSize: DWORD;
guidType: TGUID;
dwOfs: DWORD;
dwType: DWORD;
dwFlags: DWORD;
tszName: array[0..MAX_PATH-1] of WCHAR;
end;
 
PDIDeviceObjectInstanceW_DX5 = ^TDIDeviceObjectInstanceW_DX5;
TDIDeviceObjectInstanceW_DX5 = record
dwSize: DWORD;
guidType: TGUID;
dwOfs: DWORD;
dwType: DWORD;
dwFlags: DWORD;
tszName: array[0..MAX_PATH-1] of WCHAR;
tszName: Array [0..MAX_PATH-1] of WCHAR;
dwFFMaxForce: DWORD;
dwFFForceResolution: DWORD;
wCollectionNumber: WORD;
8851,40 → 12490,39
wReserved: WORD;
end;
 
{$IFDEF DirectX3}
TDIDeviceObjectInstanceW = TDIDeviceObjectInstanceW_DX3;
PDIDeviceObjectInstanceW = PDIDeviceObjectInstanceW_DX3;
{$ENDIF}{$IFDEF DirectX5}
TDIDeviceObjectInstanceW = TDIDeviceObjectInstanceW_DX5;
PDIDeviceObjectInstanceW = PDIDeviceObjectInstanceW_DX5;
{$ENDIF}{$IFDEF DirectX6}
TDIDeviceObjectInstanceW = TDIDeviceObjectInstanceW_DX5;
PDIDeviceObjectInstanceW = PDIDeviceObjectInstanceW_DX5;
{$ENDIF}{$IFDEF DirectX7}
TDIDeviceObjectInstanceW = TDIDeviceObjectInstanceW_DX5;
PDIDeviceObjectInstanceW = PDIDeviceObjectInstanceW_DX5;
PDIDeviceObjectInstance_DX5 = ^TDIDeviceObjectInstance_DX5;
{$IFDEF UNICODE}
TDIDeviceObjectInstance_DX5 = TDIDeviceObjectInstance_DX5W;
{$ELSE}
TDIDeviceObjectInstance_DX5 = TDIDeviceObjectInstance_DX5A;
{$ENDIF}
 
DIDEVICEOBJECTINSTANCEW = TDIDeviceObjectInstanceW;
LPDIDEVICEOBJECTINSTANCEW = PDIDeviceObjectInstanceW;
PDIDeviceObjectInstanceA = ^TDIDeviceObjectInstanceA;
PDIDeviceObjectInstanceW = ^TDIDeviceObjectInstanceA;
PDIDeviceObjectInstance = ^TDIDeviceObjectInstance;
{$IFDEF DIRECTX3}
TDIDeviceObjectInstanceA = TDIDeviceObjectInstance_DX3A;
TDIDeviceObjectInstanceW = TDIDeviceObjectInstance_DX3W;
TDIDeviceObjectInstance = TDIDeviceObjectInstance_DX3;
{$ELSE}
TDIDeviceObjectInstanceA = TDIDeviceObjectInstance_DX5A;
TDIDeviceObjectInstanceW = TDIDeviceObjectInstance_DX5W;
TDIDeviceObjectInstance = TDIDeviceObjectInstance_DX5;
{$ENDIF}
 
TDIDeviceObjectInstance = TDIDeviceObjectInstanceA;
PDIDeviceObjectInstance = PDIDeviceObjectInstanceA;
// Bug fix (and deviation from the SDK). Callback *must* return
// DIENUM_STOP (= 0) or DIENUM_CONTINUE (=1) in order to work
// with the debug version of DINPUT.DLL
TDIEnumDeviceObjectsCallbackA = function (
var lpddoi: TDIDeviceObjectInstanceA; pvRef: Pointer): Integer; stdcall; // BOOL; stdcall;
TDIEnumDeviceObjectsCallbackW = function (
var lpddoi: TDIDeviceObjectInstanceW; pvRef: Pointer): Integer; stdcall; // BOOL; stdcall;
TDIEnumDeviceObjectsCallback = function (
var lpddoi: TDIDeviceObjectInstance; pvRef: Pointer): Integer; stdcall; // BOOL; stdcall;
 
DIDEVICEOBJECTINSTANCE = TDIDeviceObjectInstance;
LPDIDEVICEOBJECTINSTANCE = PDIDeviceObjectInstance;
TDIEnumDeviceObjectsProc = function (
var lpddoi: TDIDeviceObjectInstance; pvRef: Pointer): Integer; stdcall; // BOOL; stdcall;
 
TDIEnumDeviceObjectsCallbackA = function(const peff: TDIDeviceObjectInstanceA;
pvRef: Pointer): HResult; stdcall;
LPDIENUMDEVICEOBJECTSCALLBACKA = TDIEnumDeviceObjectsCallbackA;
 
TDIEnumDeviceObjectsCallbackW = function(const peff: TDIDeviceObjectInstanceW;
pvRef: Pointer): HResult; stdcall;
LPDIENUMDEVICEOBJECTSCALLBACKW = TDIEnumDeviceObjectsCallbackW;
 
TDIEnumDeviceObjectsCallback = TDIEnumDeviceObjectsCallbackA;
LPDIENUMDEVICEOBJECTSCALLBACK = TDIEnumDeviceObjectsCallback;
 
const
DIDOI_FFACTUATOR = $00000001;
DIDOI_FFEFFECTTRIGGER = $00000002;
8898,7 → 12536,7
 
type
PDIPropHeader = ^TDIPropHeader;
TDIPropHeader = record
TDIPropHeader = packed record
dwSize: DWORD;
dwHeaderSize: DWORD;
dwObj: DWORD;
8905,9 → 12543,6
dwHow: DWORD;
end;
 
DIPROPHEADER = TDIPropHeader;
LPDIPROPHEADER = PDIPropHeader;
 
const
DIPH_DEVICE = 0;
DIPH_BYOFFSET = 1;
8914,97 → 12549,105
DIPH_BYID = 2;
DIPH_BYUSAGE = 3;
 
function DIMAKEUSAGEDWORD(UsagePage, Usage: Word): DWORD;
function DIMAKEUSAGEDWORD(UsagePage, Usage: WORD) : DWORD;
 
type
PDIPropDWORD = ^TDIPropDWORD;
TDIPropDWORD = record
PDIPropDWord = ^TDIPropDWord;
TDIPropDWord = packed record
diph: TDIPropHeader;
dwData: DWORD;
end;
 
DIPROPDWORD = TDIPropDWORD;
LPDIPROPDWORD = PDIPropDWORD;
 
PDIPropRange = ^TDIPropRange;
TDIPropRange = record
TDIPropRange = packed record
diph: TDIPropHeader;
lMin: Longint;
lMax: Longint;
end;
 
DIPROPRANGE = TDIPropRange;
LPDIPROPRANGE = PDIPropRange;
const
DIPROPRANGE_NOMIN = $80000000;
DIPROPRANGE_NOMAX = $7FFFFFFF;
 
type
PDIPropCal = ^TDIPropCal;
TDIPropCal = record
TDIPropCal = packed record
diph: TDIPropHeader;
lMin: Longint;
lCenter: Longint;
lMax: Longint;
lMin: LongInt;
lCenter: LongInt;
lMax: LongInt;
end;
 
DIPROPCAL = TDIPropCal;
LPDIPROPCAL = PDIPropCal;
 
PDIPropGUIDAndPath = ^TDIPropGUIDAndPath;
TDIPropGUIDAndPath = record
TDIPropGUIDAndPath = packed record
diph: TDIPropHeader;
guidClass: TGUID;
wszPath: array[0..MAX_PATH-1] of WCHAR;
wszPath: array [0..MAX_PATH-1] of WideChar;
end;
 
DIPROPGUIDANDPATH = TDIPropGUIDAndPath;
LPDIPROPGUIDANDPATH = PDIPropGUIDAndPath;
 
PDIPropString = ^TDIPropString;
TDIPropString = record
TDIPropString = packed record
diph: TDIPropHeader;
wsz: array[0..MAX_PATH-1] of WCHAR;
wsz: array [0..MAX_PATH-1] of WideChar;
end;
 
DIPROPSTRING = TDIPropString;
LPDIPROPSTRING = PDIPropString;
type
MAKEDIPROP = PGUID;
 
const
DIPROPRANGE_NOMIN = $80000000;
DIPROPRANGE_NOMAX = $7FFFFFFF;
DIPROP_BUFFERSIZE = MAKEDIPROP(1);
 
DIPROP_BUFFERSIZE = PGUID(1);
DIPROP_AXISMODE = PGUID(2);
DIPROP_AXISMODE = MAKEDIPROP(2);
 
DIPROPAXISMODE_ABS = 0;
DIPROPAXISMODE_REL = 1;
 
DIPROP_GRANULARITY = PGUID(3);
DIPROP_RANGE = PGUID(4);
DIPROP_DEADZONE = PGUID(5);
DIPROP_SATURATION = PGUID(6);
DIPROP_FFGAIN = PGUID(7);
DIPROP_FFLOAD = PGUID(8);
DIPROP_AUTOCENTER = PGUID(9);
DIPROP_GRANULARITY = MAKEDIPROP(3);
 
DIPROP_RANGE = MAKEDIPROP(4);
 
DIPROP_DEADZONE = MAKEDIPROP(5);
 
DIPROP_SATURATION = MAKEDIPROP(6);
 
DIPROP_FFGAIN = MAKEDIPROP(7);
 
DIPROP_FFLOAD = MAKEDIPROP(8);
 
DIPROP_AUTOCENTER = MAKEDIPROP(9);
 
DIPROPAUTOCENTER_OFF = 0;
DIPROPAUTOCENTER_ON = 1;
 
DIPROP_CALIBRATIONMODE = PGUID(10);
DIPROP_CALIBRATIONMODE = MAKEDIPROP(10);
 
DIPROPCALIBRATIONMODE_COOKED = 0;
DIPROPCALIBRATIONMODE_RAW = 1;
 
DIPROP_CALIBRATION = PGUID(11);
DIPROP_GUIDANDPATH = PGUID(12);
DIPROP_INSTANCENAME = PGUID(13);
DIPROP_PRODUCTNAME = PGUID(14);
DIPROP_JOYSTICKID = PGUID(15);
DIPROP_GETPORTDISPLAYNAME = PGUID(16);
DIPROP_ENABLEREPORTID = PGUID(17);
DIPROP_GETPHYSICALRANGE = PGUID(18);
DIPROP_GETLOGICALRANGE = PGUID(19);
DIPROP_CALIBRATION = MAKEDIPROP(11);
 
DIPROP_GUIDANDPATH = MAKEDIPROP(12);
 
DIPROP_INSTANCENAME = MAKEDIPROP(13);
 
DIPROP_PRODUCTNAME = MAKEDIPROP(14);
 
DIPROP_JOYSTICKID = MAKEDIPROP(15);
 
DIPROP_GETPORTDISPLAYNAME = MAKEDIPROP(16);
 
 
DIPROP_ENABLEREPORTID = MAKEDIPROP(17);
 
 
DIPROP_GETPHYSICALRANGE = MAKEDIPROP(18);
 
DIPROP_GETLOGICALRANGE = MAKEDIPROP(19);
 
 
type
PDIDeviceObjectData = ^TDIDeviceObjectData;
TDIDeviceObjectData = record
TDIDeviceObjectData = packed record
dwOfs: DWORD;
dwData: DWORD;
dwTimeStamp: DWORD;
9011,11 → 12654,12
dwSequence: DWORD;
end;
 
DIDEVICEOBJECTDATA = TDIDeviceObjectData;
LPDIDEVICEOBJECTDATA = PDIDeviceObjectData;
 
const
DIGDD_PEEK = $00000001;
{
#define DISEQUENCE_COMPARE(dwSequence1, cmp, dwSequence2) \
(int) ((dwSequence1) - (dwSequence2)) cmp 0
}
 
DISCL_EXCLUSIVE = $00000001;
DISCL_NONEXCLUSIVE = $00000002;
9023,140 → 12667,137
DISCL_BACKGROUND = $00000008;
DISCL_NOWINKEY = $00000010;
 
 
type
PDIDeviceInstanceA_DX3 = ^TDIDeviceInstanceA_DX3;
TDIDeviceInstanceA_DX3 = record
 
PDIDeviceInstance_DX3A = ^TDIDeviceInstance_DX3A;
TDIDeviceInstance_DX3A = packed record
dwSize: DWORD;
guidInstance: TGUID;
guidProduct: TGUID;
dwDevType: DWORD;
tszInstanceName: array[0..MAX_PATH-1] of CHAR;
tszProductName: array[0..MAX_PATH-1] of CHAR;
tszInstanceName: Array [0..MAX_PATH-1] of AnsiChar;
tszProductName: Array [0..MAX_PATH-1] of AnsiChar;
end;
 
PDIDeviceInstanceA_DX5 = ^TDIDeviceInstanceA_DX5;
TDIDeviceInstanceA_DX5 = record
PDIDeviceInstance_DX3W = ^TDIDeviceInstance_DX3W;
TDIDeviceInstance_DX3W = packed record
dwSize: DWORD;
guidInstance: TGUID;
guidProduct: TGUID;
dwDevType: DWORD;
tszInstanceName: array[0..MAX_PATH-1] of CHAR;
tszProductName: array[0..MAX_PATH-1] of CHAR;
guidFFDriver: TGUID;
wUsagePage: WORD;
wUsage: WORD;
tszInstanceName: Array [0..MAX_PATH-1] of WideChar;
tszProductName: Array [0..MAX_PATH-1] of WideChar;
end;
 
{$IFDEF DirectX3}
TDIDeviceInstanceA = TDIDeviceInstanceA_DX3;
PDIDeviceInstanceA = PDIDeviceInstanceA_DX3;
{$ENDIF}{$IFDEF DirectX5}
TDIDeviceInstanceA = TDIDeviceInstanceA_DX5;
PDIDeviceInstanceA = PDIDeviceInstanceA_DX5;
{$ENDIF}{$IFDEF DirectX6}
TDIDeviceInstanceA = TDIDeviceInstanceA_DX5;
PDIDeviceInstanceA = PDIDeviceInstanceA_DX5;
{$ENDIF}{$IFDEF DirectX7}
TDIDeviceInstanceA = TDIDeviceInstanceA_DX5;
PDIDeviceInstanceA = PDIDeviceInstanceA_DX5;
PDIDeviceInstance_DX3 = ^TDIDeviceInstance_DX3;
{$IFDEF UNICODE}
TDIDeviceInstance_DX3 = TDIDeviceInstance_DX3W;
{$ELSE}
TDIDeviceInstance_DX3 = TDIDeviceInstance_DX3A;
{$ENDIF}
 
DIDEVICEINSTANCEA = TDIDeviceInstanceA;
LPDIDEVICEINSTANCEA = PDIDeviceInstanceA;
 
PDIDeviceInstanceW_DX3 = ^TDIDeviceInstanceW_DX3;
TDIDeviceInstanceW_DX3 = record
PDIDeviceInstance_DX5A = ^TDIDeviceInstance_DX5A;
TDIDeviceInstance_DX5A = packed record
dwSize: DWORD;
guidInstance: TGUID;
guidProduct: TGUID;
dwDevType: DWORD;
tszInstanceName: array[0..MAX_PATH-1] of WCHAR;
tszProductName: array[0..MAX_PATH-1] of WCHAR;
tszInstanceName: Array [0..MAX_PATH-1] of AnsiChar;
tszProductName: Array [0..MAX_PATH-1] of AnsiChar;
guidFFDriver: TGUID;
wUsagePage: WORD;
wUsage: WORD;
end;
 
PDIDeviceInstanceW_DX5 = ^TDIDeviceInstanceW_DX5;
TDIDeviceInstanceW_DX5 = record
PDIDeviceInstance_DX5W = ^TDIDeviceInstance_DX5W;
TDIDeviceInstance_DX5W = packed record
dwSize: DWORD;
guidInstance: TGUID;
guidProduct: TGUID;
dwDevType: DWORD;
tszInstanceName: array[0..MAX_PATH-1] of WCHAR;
tszProductName: array[0..MAX_PATH-1] of WCHAR;
tszInstanceName: Array [0..MAX_PATH-1] of WideChar;
tszProductName: Array [0..MAX_PATH-1] of WideChar;
guidFFDriver: TGUID;
wUsagePage: WORD;
wUsage: WORD;
end;
 
{$IFDEF DirectX3}
TDIDeviceInstanceW = TDIDeviceInstanceW_DX3;
PDIDeviceInstanceW = PDIDeviceInstanceW_DX3;
{$ENDIF}{$IFDEF DirectX5}
TDIDeviceInstanceW = TDIDeviceInstanceW_DX5;
PDIDeviceInstanceW = PDIDeviceInstanceW_DX5;
{$ENDIF}{$IFDEF DirectX6}
TDIDeviceInstanceW = TDIDeviceInstanceW_DX5;
PDIDeviceInstanceW = PDIDeviceInstanceW_DX5;
{$ENDIF}{$IFDEF DirectX7}
TDIDeviceInstanceW = TDIDeviceInstanceW_DX5;
PDIDeviceInstanceW = PDIDeviceInstanceW_DX5;
PDIDeviceInstance_DX5 = ^TDIDeviceInstance_DX5;
{$IFDEF UNICODE}
TDIDeviceInstance_DX5 = TDIDeviceInstance_DX5W;
{$ELSE}
TDIDeviceInstance_DX5 = TDIDeviceInstance_DX5A;
{$ENDIF}
 
DIDEVICEINSTANCEW = TDIDeviceInstanceW;
LPDIDEVICEINSTANCEW = PDIDeviceInstanceW;
PDIDeviceInstanceA = ^TDIDeviceInstanceA;
PDIDeviceInstanceW = ^TDIDeviceInstanceW;
PDIDeviceInstance = ^TDIDeviceInstance;
{$IFDEF DIRECTX3}
TDIDeviceInstanceA = TDIDeviceInstance_DX3A;
TDIDeviceInstanceW = TDIDeviceInstance_DX3W;
TDIDeviceInstance = TDIDeviceInstance_DX3;
{$ELSE}
TDIDeviceInstanceA = TDIDeviceInstance_DX5A;
TDIDeviceInstanceW = TDIDeviceInstance_DX5W;
TDIDeviceInstance = TDIDeviceInstance_DX5;
{$ENDIF}
 
TDIDeviceInstance = TDIDeviceInstanceA;
PDIDeviceInstance = PDIDeviceInstanceA;
 
DIDEVICEINSTANCE = TDIDeviceInstance;
LPDIDEVICEINSTANCE = PDIDeviceInstance;
 
IDirectInputDeviceW = interface(IUnknown)
['{5944E681-C92E-11CF-BFC7-444553540000}']
// IDirectInputDeviceW methods
IDirectInputDeviceA = interface (IUnknown)
['{5944E680-C92E-11CF-BFC7-444553540000}']
(*** IDirectInputDeviceA methods ***)
function GetCapabilities(var lpDIDevCaps: TDIDevCaps): HResult; stdcall;
function EnumObjects(lpCallback: TDIEnumDeviceObjectsCallbackW;
function EnumObjects(lpCallback: TDIEnumDeviceObjectsCallbackA;
pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetProperty(rguidProp: PGUID; var pdiph: TDIPropHeader): HResult; stdcall;
function SetProperty(rguidProp: PGUID; const pdiph: TDIPropHeader): HResult; stdcall;
function GetProperty(rguidProp: PGUID; var pdiph: TDIPropHeader) :
HResult; stdcall;
function SetProperty(rguidProp: PGUID; const pdiph: TDIPropHeader) :
HResult; stdcall;
function Acquire: HResult; stdcall;
function Unacquire: HResult; stdcall;
function GetDeviceState(cbData: DWORD; var lpvData): HResult; stdcall;
function GetDeviceData(cbObjectData: DWORD; var rgdod: TDIDeviceObjectData;
function GetDeviceState(cbData: DWORD; lpvData: Pointer) : HResult; stdcall;
function GetDeviceData(cbObjectData: DWORD; rgdod: PDIDeviceObjectData;
var pdwInOut: DWORD; dwFlags: DWORD): HResult; stdcall;
function SetDataFormat(const lpdf: TDIDataFormat): HResult; stdcall;
function SetDataFormat(var lpdf: TDIDataFormat) : HResult; stdcall;
function SetEventNotification(hEvent: THandle): HResult; stdcall;
function SetCooperativeLevel(hwnd: HWND; dwFlags: DWORD): HResult; stdcall;
function GetObjectInfo(var pdidoi: TDIDeviceObjectInstanceW; dwObj: DWORD;
function GetObjectInfo(var pdidoi: TDIDeviceObjectInstanceA; dwObj: DWORD;
dwHow: DWORD): HResult; stdcall;
function GetDeviceInfo(var pdidi: TDIDeviceInstanceW): HResult; stdcall;
function GetDeviceInfo(var pdidi: TDIDeviceInstanceA) : HResult; stdcall;
function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
function Initialize(hinst: THandle; dwVersion: DWORD; const rguid: TGUID): HResult; stdcall;
end;
 
IDirectInputDeviceA = interface(IUnknown)
['{5944E680-C92E-11CF-BFC7-444553540000}']
// IDirectInputDeviceA methods
IDirectInputDeviceW = interface (IUnknown)
['{5944E681-C92E-11CF-BFC7-444553540000}']
(*** IDirectInputDeviceW methods ***)
function GetCapabilities(var lpDIDevCaps: TDIDevCaps): HResult; stdcall;
function EnumObjects(lpCallback: TDIEnumDeviceObjectsCallbackA;
function EnumObjects(lpCallback: TDIEnumDeviceObjectsCallbackW;
pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetProperty(rguidProp: PGUID; var pdiph: TDIPropHeader): HResult; stdcall;
function SetProperty(rguidProp: PGUID; const pdiph: TDIPropHeader): HResult; stdcall;
function GetProperty(rguidProp: PGUID; var pdiph: TDIPropHeader) :
HResult; stdcall;
function SetProperty(rguidProp: PGUID; var pdiph: TDIPropHeader) :
HResult; stdcall;
function Acquire: HResult; stdcall;
function Unacquire: HResult; stdcall;
function GetDeviceState(cbData: DWORD; var lpvData): HResult; stdcall;
function GetDeviceData(cbObjectData: DWORD; var rgdod: TDIDeviceObjectData;
function GetDeviceState(cbData: DWORD; lpvData: Pointer) : HResult; stdcall;
function GetDeviceData(cbObjectData: DWORD; rgdod: PDIDeviceObjectData;
var pdwInOut: DWORD; dwFlags: DWORD): HResult; stdcall;
function SetDataFormat(const lpdf: TDIDataFormat): HResult; stdcall;
function SetDataFormat(var lpdf: TDIDataFormat) : HResult; stdcall;
function SetEventNotification(hEvent: THandle): HResult; stdcall;
function SetCooperativeLevel(hwnd: HWND; dwFlags: DWORD): HResult; stdcall;
function GetObjectInfo(var pdidoi: TDIDeviceObjectInstanceA; dwObj: DWORD;
function GetObjectInfo(var pdidoi: TDIDeviceObjectInstanceW; dwObj: DWORD;
dwHow: DWORD): HResult; stdcall;
function GetDeviceInfo(var pdidi: TDIDeviceInstanceA): HResult; stdcall;
function GetDeviceInfo(var pdidi: TDIDeviceInstanceW) : HResult; stdcall;
function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
function Initialize(hinst: THandle; dwVersion: DWORD; const rguid: TGUID): HResult; stdcall;
end;
 
{$IFDEF UNICODE}
IDirectInputDevice = IDirectInputDeviceW;
{$ELSE}
IDirectInputDevice = IDirectInputDeviceA;
{$ENDIF}
 
const
DISFFC_RESET = $00000001;
9179,15 → 12820,9
DIGFFS_USERFFSWITCHOFF = $00000800;
DIGFFS_DEVICELOST = $80000000;
 
DISDD_CONTINUE = 1;
 
DIFEF_DEFAULT = $00000000;
DIFEF_INCLUDENONSTANDARD = $00000001;
DIFEF_MODIFYIFNEEDED = $00000010;
 
type
PDIEffectInfoA = ^TDIEffectInfoA;
TDIEffectInfoA = record
TDIEffectInfoA = packed record
dwSize: DWORD;
guid: TGUID;
dwEffType: DWORD;
9196,11 → 12831,8
tszName: array[0..MAX_PATH-1] of CHAR;
end;
 
DIEFFECTINFOA = TDIEffectInfoA;
LPDIEFFECTINFOA = PDIEffectInfoA;
 
PDIEffectInfoW = ^TDIEffectInfoW;
TDIEffectInfoW = record
TDIEffectInfoW = packed record
dwSize: DWORD;
guid: TGUID;
dwEffType: DWORD;
9209,142 → 12841,255
tszName: array[0..MAX_PATH-1] of WCHAR;
end;
 
DIEFFECTINFOW = TDIEffectInfoW;
LPDIEFFECTINFOW = PDIEffectInfoW;
PDIEffectInfo = ^TDIEffectInfo;
{$IFDEF UNICODE}
TDIEffectInfo = TDIEffectInfoW;
{$ELSE}
TDIEffectInfo = TDIEffectInfoA;
{$ENDIF}
 
DIEFFECTINFO = TDIEffectInfoA;
LPDIEFFECTINFO = PDIEffectInfoA;
const
DISDD_CONTINUE = $00000001;
 
TDIEnumEffectsCallbackA = function(const pdei: TDIEffectInfoA;
pvRef: Pointer): HResult; stdcall;
LPDIENUMEFFECTSCALLBACKA = TDIEnumEffectsCallbackA;
// Bug fix & deviation from the SDK: Must return DIENUM_STOP or
// DIENUM_CONTINUE (=1) in order to work with the debug version of DINPUT.DLL
type
TDIEnumEffectsCallbackA =
function(var pdei: TDIEffectInfoA; pvRef: pointer): Integer; stdcall; // BOOL; stdcall;
TDIEnumEffectsCallbackW =
function(var pdei: TDIEffectInfoW; pvRef: pointer): Integer; stdcall; // BOOL; stdcall;
TDIEnumEffectsCallback =
function(var pdei: TDIEffectInfo; pvRef: pointer) : Integer; stdcall; // BOOL; stdcall;
TDIEnumEffectsProc = TDIEnumEffectsCallback;
 
TDIEnumEffectsCallbackW = function(const pdei: TDIEffectInfoW;
pvRef: Pointer): HResult; stdcall;
LPDIENUMEFFECTSCALLBACKW = TDIEnumEffectsCallbackW;
TDIEnumCreatedEffectObjectsCallback =
function(peff: IDirectInputEffect; pvRev: pointer): Integer; stdcall; // BOOL; stdcall;
TDIEnumCreatedEffectObjectsProc = TDIEnumCreatedEffectObjectsCallback;
 
TDIEnumEffectsCallback = TDIEnumEffectsCallbackA;
LPDIENUMEFFECTSCALLBACK = TDIEnumEffectsCallback;
 
LPDIENUMCREATEDEFFECTOBJECTSCALLBACK = function(const peff:
IDirectInputEffect; pvRef: Pointer): HResult; stdcall;
 
IDirectInputDevice2W = interface(IDirectInputDeviceW)
['{5944E683-C92E-11CF-BFC7-444553540000}']
// IDirectInputDevice2W methods
function CreateEffect(const rguid: TGUID; const lpeff: TDIEffect;
out ppdeff: IDirectInputEffect; punkOuter: IUnknown): HResult; stdcall;
function EnumEffects(lpCallback: TDIEnumEffectsCallbackW; pvRef: Pointer;
dwEffType: DWORD): HResult; stdcall;
function GetEffectInfo(var pdei: TDIEffectInfoW; const rguid: TGUID): HResult; stdcall;
IDirectInputDevice2A = interface (IDirectInputDeviceA)
['{5944E682-C92E-11CF-BFC7-444553540000}']
(*** IDirectInputDevice2A methods ***)
function CreateEffect(const rguid: TGUID; lpeff: PDIEffect;
var ppdeff: IDirectInputEffect; punkOuter: IUnknown) : HResult; stdcall;
function EnumEffects(lpCallback: TDIEnumEffectsCallbackA;
pvRef: pointer; dwEffType: DWORD) : HResult; stdcall;
function GetEffectInfo(pdei: TDIEffectInfoA; const rguid: TGUID) : HResult; stdcall;
function GetForceFeedbackState(var pdwOut: DWORD): HResult; stdcall;
function SendForceFeedbackCommand(dwFlags: DWORD): HResult; stdcall;
function EnumCreatedEffectObjects(lpCallback:
LPDIENUMCREATEDEFFECTOBJECTSCALLBACK; pvRef: Pointer; fl: DWORD): HResult; stdcall;
function Escape(const pesc: TDIEffEscape): HResult; stdcall;
TDIEnumCreatedEffectObjectsCallback;
pvRef: pointer; fl: DWORD) : HResult; stdcall;
function Escape(var pesc: TDIEffEscape) : HResult; stdcall;
function Poll: HResult; stdcall;
function SendDeviceData(cbObjectData: DWORD; const rgdod: TDIDeviceObjectData;
function SendDeviceData
(cbObjectData: DWORD; var rgdod: TDIDeviceObjectData;
var pdwInOut: DWORD; fl: DWORD): HResult; stdcall;
end;
 
IDirectInputDevice2A = interface(IDirectInputDeviceA)
['{5944E682-C92E-11CF-BFC7-444553540000}']
// IDirectInputDevice2A methods
function CreateEffect(const rguid: TGUID; const lpeff: TDIEffect;
out ppdeff: IDirectInputEffect; punkOuter: IUnknown): HResult; stdcall;
function EnumEffects(lpCallback: TDIEnumEffectsCallbackA; pvRef: Pointer;
dwEffType: DWORD): HResult; stdcall;
function GetEffectInfo(var pdei: TDIEffectInfoA; const rguid: TGUID): HResult; stdcall;
IDirectInputDevice2W = interface (IDirectInputDeviceW)
['{5944E683-C92E-11CF-BFC7-444553540000}']
(*** IDirectInputDevice2W methods ***)
function CreateEffect(const rguid: TGUID; lpeff: PDIEffect;
var ppdeff: IDirectInputEffect; punkOuter: IUnknown) : HResult; stdcall;
function EnumEffects(lpCallback: TDIEnumEffectsCallbackW;
pvRef: pointer; dwEffType: DWORD) : HResult; stdcall;
function GetEffectInfo(pdei: TDIEffectInfoW; const rguid: TGUID) : HResult; stdcall;
function GetForceFeedbackState(var pdwOut: DWORD): HResult; stdcall;
function SendForceFeedbackCommand(dwFlags: DWORD): HResult; stdcall;
function EnumCreatedEffectObjects(lpCallback:
LPDIENUMCREATEDEFFECTOBJECTSCALLBACK; pvRef: Pointer; fl: DWORD): HResult; stdcall;
function Escape(const pesc: TDIEffEscape): HResult; stdcall;
TDIEnumCreatedEffectObjectsCallback;
pvRef: pointer; fl: DWORD) : HResult; stdcall;
function Escape(var pesc: TDIEffEscape) : HResult; stdcall;
function Poll: HResult; stdcall;
function SendDeviceData(cbObjectData: DWORD; const rgdod: TDIDeviceObjectData;
function SendDeviceData
(cbObjectData: DWORD; var rgdod: TDIDeviceObjectData;
var pdwInOut: DWORD; fl: DWORD): HResult; stdcall;
end;
 
{$IFDEF UNICODE}
IDirectInputDevice2 = IDirectInputDevice2W;
{$ELSE}
IDirectInputDevice2 = IDirectInputDevice2A;
{$ENDIF}
 
const
DIFEF_DEFAULT = $00000000;
DIFEF_INCLUDENONSTANDARD = $00000001;
DIFEF_MODIFYIFNEEDED = $00000010;
 
///Weitermachen: (as: nur die Deklarationen eingefüllt, die ich zum Testen gebraucht habe)
 
type
TEnumEffectsInFileCallback = function(gaga, huhu: Integer): HResult;
 
type
IDirectInputDevice7W = interface(IDirectInputDevice2W)
['{57D7C6BC-2356-11D3-8E9D-00C04F6844AE}']
// IDirectInputDevice7W methods
function EnumEffectsInFile(lpszFileName: LPCWSTR; pec: TDIEnumEffectsInFileCallback;
pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
function WriteEffectToFile(lpszFileName: LPCWSTR; dwEntries: DWORD;
const rgDiFileEft: TDIFileEffect; dwFlags: DWORD): HResult; stdcall;
['{57D7C6BD-2356-11D3-8E9D-00C04F6844AE}']
(*** IDirectInputDevice7A methods ***)
function EnumEffectsInFile(const lpszFileName: PChar;
pec: TEnumEffectsInFileCallback; pvRef: Pointer; dwFlags: DWord): HResult; stdcall;
function WriteEffectToFile(const lpszFileName: PChar;
dwEntries: DWord; const rgDIFileEft: PDIFileEffect; dwFlags: DWord): HResult; stdcall;
end;
 
IDirectInputDevice7A = interface(IDirectInputDevice2A)
['{57D7C6BD-2356-11D3-8E9D-00C04F6844AE}']
// IDirectInputDevice7A methods
function EnumEffectsInFile(lpszFileName: LPCSTR; pec: TDIEnumEffectsInFileCallback;
pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
function WriteEffectToFile(lpszFileName: LPCSTR; dwEntries: DWORD;
const rgDiFileEft: TDIFileEffect; dwFlags: DWORD): HResult; stdcall;
['{57D7C6BC-2356-11D3-8E9D-00C04F6844AE}']
function EnumEffectsInFile(const lpszFileName: PChar;
pec: TEnumEffectsInFileCallback; pvRef: Pointer; dwFlags: DWord): HResult; stdcall;
function WriteEffectToFile(const lpszFileName: PChar;
dwEntries: DWord; const rgDIFileEft: PDIFileEffect; dwFlags: DWord): HResult; stdcall;
end;
 
{$IFDEF UNICODE}
IDirectInputDevice7 = IDirectInputDevice7W;
{$ELSE}
IDirectInputDevice7 = IDirectInputDevice7A;
{$ENDIF}
 
{ Mouse }
(****************************************************************************
*
* Mouse
*
****************************************************************************)
 
type
TDIMouseState = record
PDIMouseState = ^TDIMouseState;
TDIMouseState = packed record
lX: Longint;
lY: Longint;
lZ: Longint;
rgbButtons: array[0..3] of BYTE;
rgbButtons: Array [0..3] of BYTE; // up to 4 buttons
end;
 
DIMOUSESTATE = TDIMouseState;
 
TDIMouseState2 = record
PDIMouseState2 = ^TDIMouseState2;
TDIMouseState2 = packed record
lX: Longint;
lY: Longint;
lZ: Longint;
rgbButtons: array[0..7] of BYTE;
rgbButtons: Array [0..7] of BYTE; // up to 8 buttons
end;
 
DIMOUSESTATE2 = TDIMouseState2;
const
DIMOFS_X = 0;
DIMOFS_Y = 4;
DIMOFS_Z = 8;
DIMOFS_BUTTON0 = 12;
DIMOFS_BUTTON1 = 13;
DIMOFS_BUTTON2 = 14;
DIMOFS_BUTTON3 = 15;
// DX7 supports up to 8 mouse buttons
DIMOFS_BUTTON4 = DIMOFS_BUTTON0+4;
DIMOFS_BUTTON5 = DIMOFS_BUTTON0+5;
DIMOFS_BUTTON6 = DIMOFS_BUTTON0+6;
DIMOFS_BUTTON7 = DIMOFS_BUTTON0+7;
 
 
const
_c_dfDIMouse_Objects: array[0..1] of TDIObjectDataFormat = (
(pguid: nil; dwOfs: 0; dwType: DIDFT_RELAXIS or DIDFT_ANYINSTANCE; dwFlags: 0),
(pguid: @GUID_Button; dwOfs: 12; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE; dwFlags: 0)
_c_dfDIMouse_Objects: array[0..6] of TDIObjectDataFormat = (
( pguid: @GUID_XAxis;
dwOfs: DIMOFS_X;
dwType: DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_YAxis;
dwOfs: DIMOFS_Y;
dwType: DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_ZAxis;
dwOfs: DIMOFS_Z;
dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON0;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON1;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON2;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON3;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0)
);
 
c_dfDIMouse: TDIDataFormat = (
dwSize: Sizeof(c_dfDIMouse);
dwObjSize: Sizeof(TDIObjectDataFormat);
dwFlags: DIDF_RELAXIS;
dwDataSize: Sizeof(TDIMouseState);
dwNumObjs: High(_c_dfDIMouse_Objects)+1;
rgodf: @_c_dfDIMouse_Objects
dwSize: Sizeof(c_dfDIMouse); // $18
dwObjSize: Sizeof(TDIObjectDataFormat); // $10
dwFlags: DIDF_RELAXIS; //
dwDataSize: Sizeof(TDIMouseState); // $10
dwNumObjs: High(_c_dfDIMouse_Objects)+1; // 7
rgodf: @_c_dfDIMouse_Objects[Low(_c_dfDIMouse_Objects)]
);
 
{ Keyboard }
 
type
TDIKeyboardState = array[0..255] of Byte;
DIKEYBOARDSTATE = TDIKeyboardState;
 
const
_c_dfDIKeyboard_Objects: array[0..0] of TDIObjectDataFormat = (
(pguid: @GUID_Key; dwOfs: 1; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE; dwFlags: 0)
_c_dfDIMouse2_Objects: array[0..10] of TDIObjectDataFormat = (
( pguid: @GUID_XAxis;
dwOfs: DIMOFS_X;
dwType: DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_YAxis;
dwOfs: DIMOFS_Y;
dwType: DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_ZAxis;
dwOfs: DIMOFS_Z;
dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON0;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON1;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON2;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON3;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// fields introduced with IDirectInputDevice7.GetDeviceState
( pguid: nil;
dwOfs: DIMOFS_BUTTON4;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON5;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON6;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: nil;
dwOfs: DIMOFS_BUTTON7;
dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0)
);
 
c_dfDIKeyboard: TDIDataFormat = (
dwSize: Sizeof(c_dfDIKeyboard);
dwObjSize: Sizeof(TDIObjectDataFormat);
dwFlags: 0;
dwDataSize: SizeOf(TDIKeyboardState);
dwNumObjs: High(_c_dfDIKeyboard_Objects)+1;
rgodf: @_c_dfDIKeyboard_Objects
c_dfDIMouse2: TDIDataFormat = (
dwSize: Sizeof(c_dfDIMouse); // $18
dwObjSize: Sizeof(TDIObjectDataFormat); // $10
dwFlags: DIDF_RELAXIS; //
dwDataSize: Sizeof(TDIMouseState2); // $14
dwNumObjs: High(_c_dfDIMouse_Objects)+1; // 11
rgodf: @_c_dfDIMouse2_Objects[Low(_c_dfDIMouse2_Objects)]
);
 
{ DirectInput keyboard scan codes }
 
(****************************************************************************
*
* DirectInput keyboard scan codes
*
****************************************************************************)
 
const
DIK_ESCAPE = $01;
DIK_1 = $02;
9357,9 → 13102,9
DIK_8 = $09;
DIK_9 = $0A;
DIK_0 = $0B;
DIK_MINUS = $0C; // - on main keyboard
DIK_MINUS = $0C; (* - on main keyboard *)
DIK_EQUALS = $0D;
DIK_BACK = $0E; // backspace
DIK_BACK = $0E; (* backspace *)
DIK_TAB = $0F;
DIK_Q = $10;
DIK_W = $11;
9373,7 → 13118,7
DIK_P = $19;
DIK_LBRACKET = $1A;
DIK_RBRACKET = $1B;
DIK_RETURN = $1C; // Enter on main keyboard
DIK_RETURN = $1C; (* Enter on main keyboard *)
DIK_LCONTROL = $1D;
DIK_A = $1E;
DIK_S = $1F;
9386,7 → 13131,7
DIK_L = $26;
DIK_SEMICOLON = $27;
DIK_APOSTROPHE = $28;
DIK_GRAVE = $29; // accent grave
DIK_GRAVE = $29; (* accent grave *)
DIK_LSHIFT = $2A;
DIK_BACKSLASH = $2B;
DIK_Z = $2C;
9397,11 → 13142,11
DIK_N = $31;
DIK_M = $32;
DIK_COMMA = $33;
DIK_PERIOD = $34; // . on main keyboard
DIK_SLASH = $35; // / on main keyboard
DIK_PERIOD = $34; (* . on main keyboard *)
DIK_SLASH = $35; (* / on main keyboard *)
DIK_RSHIFT = $36;
DIK_MULTIPLY = $37; // * on numeric keypad
DIK_LMENU = $38; // left Alt
DIK_MULTIPLY = $37; (* * on numeric keypad *)
DIK_LMENU = $38; (* left Alt *)
DIK_SPACE = $39;
DIK_CAPITAL = $3A;
DIK_F1 = $3B;
9415,199 → 13160,849
DIK_F9 = $43;
DIK_F10 = $44;
DIK_NUMLOCK = $45;
DIK_SCROLL = $46; // Scroll Lock
DIK_SCROLL = $46; (* Scroll Lock *)
DIK_NUMPAD7 = $47;
DIK_NUMPAD8 = $48;
DIK_NUMPAD9 = $49;
DIK_SUBTRACT = $4A; // - on numeric keypad
DIK_SUBTRACT = $4A; (* - on numeric keypad *)
DIK_NUMPAD4 = $4B;
DIK_NUMPAD5 = $4C;
DIK_NUMPAD6 = $4D;
DIK_ADD = $4E; // + on numeric keypad
DIK_ADD = $4E; (* + on numeric keypad *)
DIK_NUMPAD1 = $4F;
DIK_NUMPAD2 = $50;
DIK_NUMPAD3 = $51;
DIK_NUMPAD0 = $52;
DIK_DECIMAL = $53; // . on numeric keypad
DIK_DECIMAL = $53; (* . on numeric keypad *)
// $54 to $56 unassigned
DIK_F11 = $57;
DIK_F12 = $58;
 
DIK_F13 = $64; // (NEC PC98)
DIK_F14 = $65; // (NEC PC98)
DIK_F15 = $66; // (NEC PC98)
 
DIK_KANA = $70; // (Japanese keyboard)
DIK_CONVERT = $79; // (Japanese keyboard)
DIK_NOCONVERT = $7B; // (Japanese keyboard)
DIK_YEN = $7D; // (Japanese keyboard)
DIK_NUMPADEQUALS = $8D; // = on numeric keypad (NEC PC98)
DIK_CIRCUMFLEX = $90; // (Japanese keyboard)
DIK_AT = $91; // (NEC PC98)
DIK_COLON = $92; // (NEC PC98)
DIK_UNDERLINE = $93; // (NEC PC98)
DIK_KANJI = $94; // (Japanese keyboard)
DIK_STOP = $95; // (NEC PC98)
DIK_AX = $96; // (Japan AX)
DIK_UNLABELED = $97; // (J3100)
DIK_NUMPADENTER = $9C; // Enter on numeric keypad
// $59 to $63 unassigned
DIK_F13 = $64; (* (NEC PC98) *)
DIK_F14 = $65; (* (NEC PC98) *)
DIK_F15 = $66; (* (NEC PC98) *)
// $67 to $6F unassigned
DIK_KANA = $70; (* (Japanese keyboard) *)
DIK_CONVERT = $79; (* (Japanese keyboard) *)
DIK_NOCONVERT = $7B; (* (Japanese keyboard) *)
DIK_YEN = $7D; (* (Japanese keyboard) *)
DIK_NUMPADEQUALS = $8D; (* = on numeric keypad (NEC PC98) *)
// $8E to $8F unassigned
DIK_CIRCUMFLEX = $90; (* (Japanese keyboard) *)
DIK_AT = $91; (* (NEC PC98) *)
DIK_COLON = $92; (* (NEC PC98) *)
DIK_UNDERLINE = $93; (* (NEC PC98) *)
DIK_KANJI = $94; (* (Japanese keyboard) *)
DIK_STOP = $95; (* (NEC PC98) *)
DIK_AX = $96; (* (Japan AX) *)
DIK_UNLABELED = $97; (* (J3100) *)
// $98 to $99 unassigned
DIK_NUMPADENTER = $9C; (* Enter on numeric keypad *)
DIK_RCONTROL = $9D;
DIK_NUMPADCOMMA = $B3; // , on numeric keypad (NEC PC98)
DIK_DIVIDE = $B5; // / on numeric keypad
// $9E to $B2 unassigned
DIK_NUMPADCOMMA = $B3; (* , on numeric keypad (NEC PC98) *)
// $B4 unassigned
DIK_DIVIDE = $B5; (* / on numeric keypad *)
// $B6 unassigned
DIK_SYSRQ = $B7;
DIK_RMENU = $B8; // right Alt
DIK_HOME = $C7; // Home on arrow keypad
DIK_UP = $C8; // UpArrow on arrow keypad
DIK_PRIOR = $C9; // PgUp on arrow keypad
DIK_LEFT = $CB; // LeftArrow on arrow keypad
DIK_RIGHT = $CD; // RightArrow on arrow keypad
DIK_END = $CF; // End on arrow keypad
DIK_DOWN = $D0; // DownArrow on arrow keypad
DIK_NEXT = $D1; // PgDn on arrow keypad
DIK_INSERT = $D2; // Insert on arrow keypad
DIK_DELETE = $D3; // Delete on arrow keypad
DIK_LWIN = $DB; // Left Windows key
DIK_RWIN = $DC; // Right Windows key
DIK_APPS = $DD; // AppMenu key
DIK_RMENU = $B8; (* right Alt *)
// $B9 to $C4 unassigned
DIK_PAUSE = $C5; (* Pause (watch out - not realiable on some kbds) *)
// $C6 unassigned
DIK_HOME = $C7; (* Home on arrow keypad *)
DIK_UP = $C8; (* UpArrow on arrow keypad *)
DIK_PRIOR = $C9; (* PgUp on arrow keypad *)
// $CA unassigned
DIK_LEFT = $CB; (* LeftArrow on arrow keypad *)
DIK_RIGHT = $CD; (* RightArrow on arrow keypad *)
// $CF unassigned
DIK_END = $CF; (* End on arrow keypad *)
DIK_DOWN = $D0; (* DownArrow on arrow keypad *)
DIK_NEXT = $D1; (* PgDn on arrow keypad *)
DIK_INSERT = $D2; (* Insert on arrow keypad *)
DIK_DELETE = $D3; (* Delete on arrow keypad *)
DIK_LWIN = $DB; (* Left Windows key *)
DIK_RWIN = $DC; (* Right Windows key *)
DIK_APPS = $DD; (* AppMenu key *)
// New with DX 6.1 & Win98
DIK_POWER = $DE;
DIK_SLEEP = $DF;
// $E0 to $E2 unassigned
// $E3 = Wake up ("translated" in German DInput to "Kielwasser" (ship's wake) ;-)
 
//
// Alternate names for keys, to facilitate transition from DOS.
//
DIK_BACKSPACE = DIK_BACK; // backspace
DIK_NUMPADSTAR = DIK_MULTIPLY; // * on numeric keypad
DIK_LALT = DIK_LMENU; // left Alt
DIK_CAPSLOCK = DIK_CAPITAL; // CapsLock
DIK_NUMPADMINUS = DIK_SUBTRACT; // - on numeric keypad
DIK_NUMPADPLUS = DIK_ADD; // + on numeric keypad
DIK_NUMPADPERIOD = DIK_DECIMAL; // . on numeric keypad
DIK_NUMPADSLASH = DIK_DIVIDE; // / on numeric keypad
DIK_RALT = DIK_RMENU; // right Alt
DIK_UPARROW = DIK_UP; // UpArrow on arrow keypad
DIK_PGUP = DIK_PRIOR; // PgUp on arrow keypad
DIK_LEFTARROW = DIK_LEFT; // LeftArrow on arrow keypad
DIK_RIGHTARROW = DIK_RIGHT; // RightArrow on arrow keypad
DIK_DOWNARROW = DIK_DOWN; // DownArrow on arrow keypad
DIK_PGDN = DIK_NEXT; // PgDn on arrow keypad
(*
* Alternate names for keys, to facilitate transition from DOS.
*)
DIK_BACKSPACE = DIK_BACK ; (* backspace *)
DIK_NUMPADSTAR = DIK_MULTIPLY; (* * on numeric keypad *)
DIK_LALT = DIK_LMENU ; (* left Alt *)
DIK_CAPSLOCK = DIK_CAPITAL ; (* CapsLock *)
DIK_NUMPADMINUS = DIK_SUBTRACT; (* - on numeric keypad *)
DIK_NUMPADPLUS = DIK_ADD ; (* + on numeric keypad *)
DIK_NUMPADPERIOD = DIK_DECIMAL ; (* . on numeric keypad *)
DIK_NUMPADSLASH = DIK_DIVIDE ; (* / on numeric keypad *)
DIK_RALT = DIK_RMENU ; (* right Alt *)
DIK_UPARROW = DIK_UP ; (* UpArrow on arrow keypad *)
DIK_PGUP = DIK_PRIOR ; (* PgUp on arrow keypad *)
DIK_LEFTARROW = DIK_LEFT ; (* LeftArrow on arrow keypad *)
DIK_RIGHTARROW = DIK_RIGHT ; (* RightArrow on arrow keypad *)
DIK_DOWNARROW = DIK_DOWN ; (* DownArrow on arrow keypad *)
DIK_PGDN = DIK_NEXT ; (* PgDn on arrow keypad *)
 
{ Joystick }
(****************************************************************************
*
* Keyboard
*
****************************************************************************)
 
 
type
TDIKeyboardState = array[0..255] of Byte;
(*
const
_c_dfDIKeyboard_Objects: array[0..255] of TDIObjectDataFormat = (
( pguid: @GUID_Key;
dwOfs: DIK_ESCAPE;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// -------- top row (except function keys) on main kbd ------------
( pguid: @GUID_Key;
dwOfs: DIK_1; // "1" on main kbd, Offset 2
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_2; // "2" on main kbd, Offset 3
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_3; // "3" on main kbd, etc.
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_4;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_5;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_6;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_7;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_8;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_9;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_0; // "0", main kbd
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_MINUS; // "-" on US kbds, "ß" on german kbds
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_EQUALS; // "=" for US, "´" for german
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_BACK; // backspace
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// ----------- 2nd row -----------------------
( pguid: @GUID_Key;
dwOfs: DIK_TAB;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_Q;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_W;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_E;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_R;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_T;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_Y; // "Z" on german & french keyboards
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_U;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_I;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_O;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_P;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_LBRACKET; // "Ü" on german keyboards
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_RBRACKET; // "+" on german keyboards
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_RETURN; // Enter on main kbd
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// next row should really start with caps lock but doesn't ;-)
// (DIK_CAPITAL is Offset $3A, i.e. after 4th row)
( pguid: @GUID_Key;
dwOfs: DIK_LCONTROL; // Left Ctrl (german kbds: "Strg")
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// ----------- 3rd row ------------------------------
( pguid: @GUID_Key;
dwOfs: DIK_A;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_S;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_D;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_G;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_H;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_J;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_K;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_L;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_SEMICOLON; // "Ö" on german kbds
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_APOSTROPHE; // "Ä" on german kbds
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_GRAVE; // accent grave, "'" on german kbds
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// ---------------- 4th row -----------------------
( pguid: @GUID_Key;
dwOfs: DIK_LSHIFT; // left shift
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_BACKSLASH; // "<" on german kbds
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_Z; // "Y" on german kbds
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_X;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_C;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_V;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_B;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_N;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_M;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_COMMA;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_PERIOD; // on main kbd
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_SLASH; // "-" on german kbds
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_RSHIFT;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// --- misc keys (bye, bye, order) ----------------
( pguid: @GUID_Key;
dwOfs: DIK_MULTIPLY; // on numeric keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_LMENU; // left ALT
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_SPACE; // space bar
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_CAPITAL; // caps lock (on main kbd, above LSHIFT)
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// ---------- function keys -----------
( pguid: @GUID_Key;
dwOfs: DIK_F1;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F2;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F3;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F4;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F5;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F6;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F7;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F8;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F9;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F10;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// ------- F11, F12 after numeric keypad (for "historical reasons" -- XT kbd)
 
// --------- numeric keypad (mostly, that is) -----------
( pguid: @GUID_Key;
dwOfs: DIK_NUMLOCK; // numeric keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_SCROLL; // scroll lock
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD7;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD8;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD9;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_SUBTRACT; // "-" on numeric keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD4;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD5;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD6;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_ADD; // "+" on numeric keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD1;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD2;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD3;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NUMPAD0; // "0" or "Insert" on numeric keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_DECIMAL; // "." or "Del" on numeric keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: $54;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// "extended" function keys; F13 to F15 only on NEC PC98
( pguid: @GUID_Key;
dwOfs: DIK_F11;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_F12;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// -------------------------------------------------
// a whole lot of keys for asian kbds only
// -------------------------------------------------
( pguid: @GUID_Key;
dwOfs: DIK_NUMPADENTER; // Enter on numeric keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_RCONTROL; // right Ctrl on main kbd
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key; // "," on numeric keypad (NEC PC98 only)
dwOfs: DIK_NUMPADCOMMA;
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_DIVIDE; // "/" on numeric keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_SYSRQ; // "System request", "Druck/S-Abf" on german kbds
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_RMENU; // right ALT
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_PAUSE; // "Pause" - not reliable on some kbds
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
 
// ----------- arrow keypad -----------------
( pguid: @GUID_Key;
dwOfs: DIK_HOME; // Home on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_UP; // UpArrow on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_PRIOR; // PgUp on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_LEFT; // LeftArrow on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_RIGHT; // RightArrow on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_END; // End on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_DOWN; // DownArrow on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_NEXT; // PgDn on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_INSERT; // Insert on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_DELETE; // Delete on arrow keypad
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_LWIN; // Left Windows key
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_RWIN; // Right Windows key
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: DIK_APPS; // AppMenu key
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
// -------- added with Win 98 / DirectX 6.1 ------------
( pguid: @GUID_Key;
dwOfs: 222; // Power on key
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: 223; // Sleep key
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0),
( pguid: @GUID_Key;
dwOfs: 227; // Wake (up) key. The german "translation"
// reads "Kielwasser" (ship's wake) ;-)
dwType: DIDFT_BUTTON or DIDFT_NOCOLLECTION;
dwFlags: 0)
);
*)
 
var // set by initialization - I was simply too lazy
_c_dfDIKeyboard_Objects: array[0..255] of TDIObjectDataFormat;
const
c_dfDIKeyboard: TDIDataFormat = (
dwSize: Sizeof(c_dfDIKeyboard);
dwObjSize: Sizeof(TDIObjectDataFormat);
dwFlags: DIDF_RELAXIS;
dwDataSize: Sizeof(TDIKeyboardState);
dwNumObjs: High(_c_dfDIKeyboard_Objects)+1;
rgodf: @_c_dfDIKeyboard_Objects[Low(_c_dfDIKeyboard_Objects)]
);
 
(****************************************************************************
*
* Joystick
*
****************************************************************************)
 
 
type
PDIJoyState = ^TDIJoyState;
TDIJoyState = record
lX: Longint; // x-axis position
lY: Longint; // y-axis position
lZ: Longint; // z-axis position
lRx: Longint; // x-axis rotation
lRy: Longint; // y-axis rotation
lRz: Longint; // z-axis rotation
rglSlider: array[0..1] of Longint; // extra axes positions
rgdwPOV: array[0..3] of DWORD; // POV directions
rgbButtons: array[0..31] of BYTE; // 32 buttons
TDIJoyState = packed record
lX: Longint; (* x-axis position *)
lY: Longint; (* y-axis position *)
lZ: Longint; (* z-axis position *)
lRx: Longint; (* x-axis rotation *)
lRy: Longint; (* y-axis rotation *)
lRz: Longint; (* z-axis rotation *)
rglSlider: Array [0..1] of Longint; (* extra axes positions *)
rgdwPOV: Array [0..3] of DWORD; (* POV directions *)
rgbButtons: Array [0..31] of BYTE; (* 32 buttons *)
end;
 
DIJOYSTATE = TDIJoyState;
 
PDIJOYSTATE2 = ^TDIJoyState2;
TDIJoyState2 = record
lX: Longint; // x-axis position
lY: Longint; // y-axis position
lZ: Longint; // z-axis position
lRx: Longint; // x-axis rotation
lRy: Longint; // y-axis rotation
lRz: Longint; // z-axis rotation
rglSlider: array[0..1] of Longint; // extra axes positions
rgdwPOV: array[0..3] of DWORD; // POV directions
rgbButtons: array[0..127] of BYTE; // 128 buttons
lVX: Longint; // x-axis velocity
lVY: Longint; // y-axis velocity
lVZ: Longint; // z-axis velocity
lVRx: Longint; // x-axis angular velocity
lVRy: Longint; // y-axis angular velocity
lVRz: Longint; // z-axis angular velocity
rglVSlider: array[0..1] of Longint; // extra axes velocities
lAX: Longint; // x-axis acceleration
lAY: Longint; // y-axis acceleration
lAZ: Longint; // z-axis acceleration
lARx: Longint; // x-axis angular acceleration
lARy: Longint; // y-axis angular acceleration
lARz: Longint; // z-axis angular acceleration
rglASlider: array[0..1] of Longint; // extra axes accelerations
lFX: Longint; // x-axis force
lFY: Longint; // y-axis force
lFZ: Longint; // z-axis force
lFRx: Longint; // x-axis torque
lFRy: Longint; // y-axis torque
lFRz: Longint; // z-axis torque
rglFSlider: array[0..1] of Longint; // extra axes forces
PDIJoyState2 = ^TDIJoyState2;
TDIJoyState2 = packed record
lX: Longint; (* x-axis position *)
lY: Longint; (* y-axis position *)
lZ: Longint; (* z-axis position *)
lRx: Longint; (* x-axis rotation *)
lRy: Longint; (* y-axis rotation *)
lRz: Longint; (* z-axis rotation *)
rglSlider: Array [0..1] of Longint; (* extra axes positions *)
rgdwPOV: Array [0..3] of DWORD; (* POV directions *)
rgbButtons: Array [0..127] of BYTE; (* 128 buttons *)
lVX: Longint; (* x-axis velocity *)
lVY: Longint; (* y-axis velocity *)
lVZ: Longint; (* z-axis velocity *)
lVRx: Longint; (* x-axis angular velocity *)
lVRy: Longint; (* y-axis angular velocity *)
lVRz: Longint; (* z-axis angular velocity *)
rglVSlider: Array [0..1] of Longint; (* extra axes velocities *)
lAX: Longint; (* x-axis acceleration *)
lAY: Longint; (* y-axis acceleration *)
lAZ: Longint; (* z-axis acceleration *)
lARx: Longint; (* x-axis angular acceleration *)
lARy: Longint; (* y-axis angular acceleration *)
lARz: Longint; (* z-axis angular acceleration *)
rglASlider: Array [0..1] of Longint; (* extra axes accelerations *)
lFX: Longint; (* x-axis force *)
lFY: Longint; (* y-axis force *)
lFZ: Longint; (* z-axis force *)
lFRx: Longint; (* x-axis torque *)
lFRy: Longint; (* y-axis torque *)
lFRz: Longint; (* z-axis torque *)
rglFSlider: Array [0..1] of Longint; (* extra axes forces *)
end;
 
DIJOYSTATE2 = TDIJoyState2;
 
{const
_c_dfDIJoystick_Objects: array[0..1] of TDIObjectDataFormat = (
function DIJOFS_SLIDER(n: variant) : variant;
 
function DIJOFS_POV(n: variant) : variant;
 
function DIJOFS_BUTTON(n: variant) : variant;
const
DIJOFS_BUTTON_ = 48;
 
const
DIJOFS_BUTTON0 = DIJOFS_BUTTON_ + 0;
DIJOFS_BUTTON1 = DIJOFS_BUTTON_ + 1;
DIJOFS_BUTTON2 = DIJOFS_BUTTON_ + 2;
DIJOFS_BUTTON3 = DIJOFS_BUTTON_ + 3;
DIJOFS_BUTTON4 = DIJOFS_BUTTON_ + 4;
DIJOFS_BUTTON5 = DIJOFS_BUTTON_ + 5;
DIJOFS_BUTTON6 = DIJOFS_BUTTON_ + 6;
DIJOFS_BUTTON7 = DIJOFS_BUTTON_ + 7;
DIJOFS_BUTTON8 = DIJOFS_BUTTON_ + 8;
DIJOFS_BUTTON9 = DIJOFS_BUTTON_ + 9;
DIJOFS_BUTTON10 = DIJOFS_BUTTON_ + 10;
DIJOFS_BUTTON11 = DIJOFS_BUTTON_ + 11;
DIJOFS_BUTTON12 = DIJOFS_BUTTON_ + 12;
DIJOFS_BUTTON13 = DIJOFS_BUTTON_ + 13;
DIJOFS_BUTTON14 = DIJOFS_BUTTON_ + 14;
DIJOFS_BUTTON15 = DIJOFS_BUTTON_ + 15;
DIJOFS_BUTTON16 = DIJOFS_BUTTON_ + 16;
DIJOFS_BUTTON17 = DIJOFS_BUTTON_ + 17;
DIJOFS_BUTTON18 = DIJOFS_BUTTON_ + 18;
DIJOFS_BUTTON19 = DIJOFS_BUTTON_ + 19;
DIJOFS_BUTTON20 = DIJOFS_BUTTON_ + 20;
DIJOFS_BUTTON21 = DIJOFS_BUTTON_ + 21;
DIJOFS_BUTTON22 = DIJOFS_BUTTON_ + 22;
DIJOFS_BUTTON23 = DIJOFS_BUTTON_ + 23;
DIJOFS_BUTTON24 = DIJOFS_BUTTON_ + 24;
DIJOFS_BUTTON25 = DIJOFS_BUTTON_ + 25;
DIJOFS_BUTTON26 = DIJOFS_BUTTON_ + 26;
DIJOFS_BUTTON27 = DIJOFS_BUTTON_ + 27;
DIJOFS_BUTTON28 = DIJOFS_BUTTON_ + 28;
DIJOFS_BUTTON29 = DIJOFS_BUTTON_ + 29;
DIJOFS_BUTTON30 = DIJOFS_BUTTON_ + 30;
DIJOFS_BUTTON31 = DIJOFS_BUTTON_ + 31;
 
 
const
DIJOFS_X =0;
DIJOFS_Y =4;
DIJOFS_Z =8;
DIJOFS_RX =12;
DIJOFS_RY =16;
DIJOFS_RZ =20;
 
_c_dfDIJoystick_Objects: array[0..43] of TDIObjectDataFormat = (
( pguid: @GUID_XAxis;
dwOfs: DIJOFS_X; dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION; dwFlags: $100),
( pguid: @GUID_YAxis;
dwOfs: DIJOFS_Y; dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION; dwFlags: $100),
( pguid: @GUID_ZAxis;
dwOfs: DIJOFS_Z; dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION; dwFlags: $100),
( pguid: @GUID_RxAxis;
dwOfs: DIJOFS_RX; dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION; dwFlags: $100),
( pguid: @GUID_RyAxis;
dwOfs: DIJOFS_RY; dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION; dwFlags: $100),
( pguid: @GUID_RzAxis;
dwOfs: DIJOFS_RZ; dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION; dwFlags: $100),
 
( pguid: @GUID_Slider; // 2 Sliders
dwOfs: 24; dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION; dwFlags: $100),
( pguid: @GUID_Slider;
dwOfs: 28; dwType: $80000000 or DIDFT_AXIS or DIDFT_NOCOLLECTION; dwFlags: $100),
 
( pguid: @GUID_POV; // 4 POVs (yes, really)
dwOfs: 32; dwType: $80000000 or DIDFT_POV or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: @GUID_POV;
dwOfs: 36; dwType: $80000000 or DIDFT_POV or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: @GUID_POV;
dwOfs: 40; dwType: $80000000 or DIDFT_POV or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: @GUID_POV;
dwOfs: 44; dwType: $80000000 or DIDFT_POV or DIDFT_NOCOLLECTION; dwFlags: 0),
 
( pguid: nil; // Buttons
dwOfs: DIJOFS_BUTTON0; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: 0;
dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE;
dwFlags: 0),
dwOfs: DIJOFS_BUTTON1; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: 48;
dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE;
dwFlags: 0)
dwOfs: DIJOFS_BUTTON2; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON3; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON4; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON5; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON6; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON7; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON8; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON9; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON10; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON11; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON12; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON13; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON14; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON15; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON16; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON17; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON18; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON19; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON20; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON21; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON22; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON23; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON24; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON25; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON26; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON27; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON28; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON29; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON30; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0),
( pguid: nil;
dwOfs: DIJOFS_BUTTON31; dwType: $80000000 or DIDFT_BUTTON or DIDFT_NOCOLLECTION; dwFlags: 0)
);
 
c_dfDIJoystick: TDIDataFormat = (
dwSize: Sizeof(c_dfDIJoystick);
dwObjSize: Sizeof(TDIObjectDataFormat);
dwObjSize: Sizeof(TDIObjectDataFormat); // $10
dwFlags: DIDF_ABSAXIS;
dwDataSize: SizeOf(DIJOYSTATE);
dwNumObjs: High(_c_dfDIJoystick_Objects)+1;
rgodf: @_c_dfDIJoystick_Objects);
dwDataSize: SizeOf(TDIJoyState); // $10
dwNumObjs: High(_c_dfDIJoystick_Objects)+1; // $2C
rgodf: @_c_dfDIJoystick_Objects[Low(_c_dfDIJoystick_Objects)]
);
 
var // Set by initialization part -- didn't want to type in another 656 consts...
_c_dfDIJoystick2_Objects: array[0..$A3] of TDIObjectDataFormat;
{ Elements $00..$2B: exact copy of _c_dfDIJoystick
Elements $2C..$8B: more "buttons" with nil GUIDs
remaining elements ($8B..$A2):
$8C,$8D,$8E: X axis, Y axis, Z axis with dwFlags = $0200
$8F,$90,$91: rX axis, rY axis, rZ axis with dwFlags = $0200
$92, $93: Slider with dwFlags = $0200
--------
$94,$95,$96: X axis, Y axis, Z axis with dwFlags = $0300
$97,$98,$99: rX axis, rY axis, rZ axis with dwFlags = $0300
$9A,$9B: Slider with dwFlags = $0300
--------
$9C,$9D,$9E: X axis, Y axis, Z axis with dwFlags = $0400
$9F, $A0, $A1: rX axis, rY axis, rZ axis with dwFlags = $0400
$A2, $A3: Slider with dwFlags = $0400
}
const
DIJOFS_X = 0;
DIJOFS_Y = 4;
DIJOFS_Z = 8;
DIJOFS_RX = 12;
DIJOFS_RY = 16;
DIJOFS_RZ = 20;
DIJOFS_SLIDER = 24;
DIJOFS_POV = 32;
DIJOFS_BUTTON = 48;
c_dfDIJoystick2: TDIDataFormat = (
dwSize: Sizeof(c_dfDIJoystick2);
dwObjSize: Sizeof(TDIObjectDataFormat);
dwFlags: DIDF_ABSAXIS;
dwDataSize: SizeOf(TDIJoyState2); // $110
dwNumObjs: High(_c_dfDIJoystick2_Objects)+1;
rgodf: @_c_dfDIJoystick2_Objects[Low(_c_dfDIJoystick2_Objects)]
);
 
{ IDirectInput }
(****************************************************************************
*
* IDirectInput
*
****************************************************************************)
 
const
 
DIENUM_STOP = 0;
DIENUM_CONTINUE = 1;
 
type
// as with the other enum functions: must rtn DIENUM_STOP or DIENUM_CONTINUE
TDIEnumDevicesCallbackA = function (var lpddi: TDIDeviceInstanceA;
pvRef: Pointer): Integer; stdcall; // BOOL; stdcall;
TDIEnumDevicesCallbackW = function (var lpddi: TDIDeviceInstanceW;
pvRef: Pointer): Integer; stdcall; // BOOL; stdcall;
TDIEnumDevicesCallback = function (var lpddi: TDIDeviceInstance;
pvRef: Pointer): Integer; stdcall; // BOOL; stdcall;
TDIEnumDevicesProc = TDIEnumDevicesCallback;
 
TDIEnumDevicesCallbackA = function(const lpddi: TDIDeviceInstanceA;
pvRef: Pointer): HResult; stdcall;
LPDIENUMDEVICESCALLBACKA = TDIEnumDevicesCallbackA;
 
TDIEnumDevicesCallbackW = function(const lpddi: TDIDeviceInstanceW;
pvRef: Pointer): HResult; stdcall;
LPDIENUMDEVICESCALLBACKW = TDIEnumDevicesCallbackW;
 
TDIEnumDevicesCallback = TDIEnumDevicesCallbackA;
LPDIENUMDEVICESCALLBACK = TDIEnumDevicesCallback;
 
const
DIEDFL_ALLDEVICES = $00000000;
DIEDFL_ATTACHEDONLY = $00000001;
DIEDFL_FORCEFEEDBACK = $00000100;
DIEDFL_INCLUDEALIASES = $00010000;
DIEDFL_INCLUDEPHANTOMS = $00020000;
 
type
 
IDirectInputW = interface(IUnknown)
['{89521361-AA8A-11CF-BFC7-444553540000}']
// IDirectInputW methods
function CreateDevice(const rguid: TGUID;
out lplpDirectInputDevice: IDirectInputDeviceW; pUnkOuter: IUnknown): HResult; stdcall;
(*** IDirectInputW methods ***)
function CreateDevice(const rguid: TGUID; var lplpDirectInputDevice:
IDirectInputDeviceW; pUnkOuter: IUnknown) : HResult; stdcall;
function EnumDevices(dwDevType: DWORD; lpCallback: TDIEnumDevicesCallbackW;
pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetDeviceStatus(var rguidInstance: TGUID): HResult; stdcall;
function GetDeviceStatus(const rguidInstance: TGUID) : HResult; stdcall;
function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
function Initialize(hinst: THandle; dwVersion: DWORD): HResult; stdcall;
end;
9614,9 → 14009,9
 
IDirectInputA = interface(IUnknown)
['{89521360-AA8A-11CF-BFC7-444553540000}']
// IDirectInputA methods
function CreateDevice(const rguid: TGUID;
out lplpDirectInputDevice: IDirectInputDeviceA; pUnkOuter: IUnknown): HResult; stdcall;
(*** IDirectInputA methods ***)
function CreateDevice(const rguid: TGUID; var lplpDirectInputDevice:
IDirectInputDeviceA; pUnkOuter: IUnknown) : HResult; stdcall;
function EnumDevices(dwDevType: DWORD; lpCallback: TDIEnumDevicesCallbackA;
pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetDeviceStatus(const rguidInstance: TGUID): HResult; stdcall;
9624,158 → 14019,566
function Initialize(hinst: THandle; dwVersion: DWORD): HResult; stdcall;
end;
 
{$IFDEF UNICODE}
IDirectInput = IDirectInputW;
{$ELSE}
IDirectInput = IDirectInputA;
{$ENDIF}
 
 
IDirectInput2W = interface(IDirectInputW)
['{5944E663-AA8A-11CF-BFC7-444553540000}']
// IDirectInput2W methods
function FindDevice(Arg1: PGUID; Arg2: PWideChar; Arg3: PGUID): HResult; stdcall;
(*** IDirectInput2W methods ***)
function FindDevice(const rguidClass: TGUID; ptszName: PWideChar; out pguidInstance: TGUID): HResult; stdcall;
end;
 
IDirectInput2A = interface(IDirectInputA)
['{5944E662-AA8A-11CF-BFC7-444553540000}']
// IDirectInput2A methods
function FindDevice(Arg1: PGUID; Arg2: PAnsiChar; Arg3: PGUID): HResult; stdcall;
(*** IDirectInput2A methods ***)
function FindDevice(const rguidClass: TGUID; ptszName: PAnsiChar; out pguidInstance: TGUID): HResult; stdcall;
end;
 
{$IFDEF UNICODE}
IDirectInput2 = IDirectInput2W;
{$ELSE}
IDirectInput2 = IDirectInput2A;
{$ENDIF}
 
 
type
IDirectInput7W = interface(IDirectInput2W)
['{9A4CB685-236D-11D3-8E9D-00C04F6844AE}']
// IDirectInput7W methods
function CreateDeviceEx(const rguid: TGUID; const riid: TGUID;
out pvOut; pUnkOuter: IUnknown): HResult; stdcall;
{*** IDirectInput7W methods ***}
function CreateDeviceEx(const rguid, riid: TGUID; out lplpDirectInputDevice;
pUnkOuter: IUnknown) : HResult; stdcall;
end;
 
IDirectInput7A = interface(IDirectInput2A)
['{9A4CB684-236D-11D3-8E9D-00C04F6844AE}']
// IDirectInput7A methods
function CreateDeviceEx(const rguid: TGUID; const riid: TGUID;
out pvOut; pUnkOuter: IUnknown): HResult; stdcall;
{*** IDirectInput7A methods ***}
function CreateDeviceEx(const rguid, riid: TGUID; out lplpDirectInputDevice;
pUnkOuter: IUnknown) : HResult; stdcall;
end;
 
{$IFDEF UNICODE}
IDirectInput7 = IDirectInput7W;
{$ELSE}
IDirectInput7 = IDirectInput7A;
{$ENDIF}
 
{ Return Codes }
 
var
DirectInputCreateA : function (hinst: THandle; dwVersion: DWORD;
out ppDI: IDirectInputA;
punkOuter: IUnknown) : HResult; stdcall;
DirectInputCreateW : function (hinst: THandle; dwVersion: DWORD;
out ppDI: IDirectInputW;
punkOuter: IUnknown) : HResult; stdcall;
DirectInputCreate : function (hinst: THandle; dwVersion: DWORD;
out ppDI: IDirectInput;
punkOuter: IUnknown) : HResult; stdcall;
 
DirectInputCreateEx : function (
hinst: THandle;
dwVersion: DWORD;
const riidltf: TGUID;
out ppvOut;
punkOuter: IUnknown) : HResult; stdcall;
 
(****************************************************************************
*
* Interfaces
*
****************************************************************************)
type
IID_IDirectInputW = IDirectInputW;
IID_IDirectInputA = IDirectInputA;
IID_IDirectInput = IDirectInput;
 
IID_IDirectInput2W = IDirectInput2W;
IID_IDirectInput2A = IDirectInput2A;
IID_IDirectInput2 = IDirectInput2;
 
IID_IDirectInput7W = IDirectInput7W;
IID_IDirectInput7A = IDirectInput7A;
IID_IDirectInput7 = IDirectInput7;
 
IID_IDirectInputDeviceW = IDirectInputDeviceW;
IID_IDirectInputDeviceA = IDirectInputDeviceA;
IID_IDirectInputDevice = IDirectInputDevice;
 
IID_IDirectInputDevice2W = IDirectInputDevice2W;
IID_IDirectInputDevice2A = IDirectInputDevice2A;
IID_IDirectInputDevice2 = IDirectInputDevice2;
 
IID_IDirectInputEffect = IDirectInputEffect;
 
IID_IDirectInputDevice7W = IDirectInputDevice7W;
IID_IDirectInputDevice7A = IDirectInputDevice7A;
IID_IDirectInputDevice7 = IDirectInputDevice7;
 
(****************************************************************************
*
* Return Codes
*
****************************************************************************)
 
(*
* The operation completed successfully.
*)
const
DI_OK = HResult(S_OK);
DI_NOTATTACHED = HResult(S_FALSE);
DI_BUFFEROVERFLOW = HResult(S_FALSE);
DI_PROPNOEFFECT = HResult(S_FALSE);
DI_NOEFFECT = HResult(S_FALSE);
DI_POLLEDDEVICE = HResult($00000002);
DI_DOWNLOADSKIPPED = HResult($00000003);
DI_EFFECTRESTARTED = HResult($00000004);
DI_TRUNCATED = HResult($00000008);
DI_TRUNCATEDANDRESTARTED = HResult($0000000C);
DI_OK = S_OK;
 
DIERR_OLDDIRECTINPUTVERSION = HResult($8007047E);
DIERR_BETADIRECTINPUTVERSION = HResult($80070481);
DIERR_BADDRIVERVER = HResult($80070077);
DIERR_DEVICENOTREG = HResult(REGDB_E_CLASSNOTREG);
DIERR_NOTFOUND = HResult($80070002);
DIERR_OBJECTNOTFOUND = HResult($80070002);
DIERR_INVALIDPARAM = HResult(E_INVALIDARG);
DIERR_NOINTERFACE = HResult(E_NOINTERFACE);
DIERR_GENERIC = HResult(E_FAIL);
DIERR_OUTOFMEMORY = HResult(E_OUTOFMEMORY);
DIERR_UNSUPPORTED = HResult(E_NOTIMPL);
DIERR_NOTINITIALIZED = HResult($80070015);
DIERR_ALREADYINITIALIZED = HResult($800704DF);
DIERR_NOAGGREGATION = HResult(CLASS_E_NOAGGREGATION);
DIERR_OTHERAPPHASPRIO = HResult(E_ACCESSDENIED);
DIERR_INPUTLOST = HResult($8007001E);
DIERR_ACQUIRED = HResult($800700AA);
DIERR_NOTACQUIRED = HResult($8007000C);
DIERR_READONLY = HResult(E_ACCESSDENIED);
DIERR_HANDLEEXISTS = HResult(E_ACCESSDENIED);
DIERR_PENDING = HResult($80070007);
(*
* The device exists but is not currently attached.
*)
DI_NOTATTACHED = S_FALSE;
 
(*
* The device buffer overflowed. Some input was lost.
*)
DI_BUFFEROVERFLOW = S_FALSE;
 
(*
* The change in device properties had no effect.
*)
DI_PROPNOEFFECT = S_FALSE;
 
(*
* The operation had no effect.
*)
DI_NOEFFECT = S_FALSE;
 
(*
* The device is a polled device. As a result, device buffering
* will not collect any data and event notifications will not be
* signalled until GetDeviceState is called.
*)
DI_POLLEDDEVICE = $00000002;
 
(*
* The parameters of the effect were successfully updated by
* IDirectInputEffect::SetParameters, but the effect was not
* downloaded because the device is not exclusively acquired
* or because the DIEP_NODOWNLOAD flag was passed.
*)
DI_DOWNLOADSKIPPED = $00000003;
 
(*
* The parameters of the effect were successfully updated by
* IDirectInputEffect::SetParameters, but in order to change
* the parameters, the effect needed to be restarted.
*)
DI_EFFECTRESTARTED = $00000004;
 
(*
* The parameters of the effect were successfully updated by
* IDirectInputEffect::SetParameters, but some of them were
* beyond the capabilities of the device and were truncated.
*)
DI_TRUNCATED = $00000008;
 
(*
* Equal to DI_EFFECTRESTARTED | DI_TRUNCATED.
*)
DI_TRUNCATEDANDRESTARTED = $0000000C;
 
SEVERITY_ERROR_FACILITY_WIN32 =
HResult(SEVERITY_ERROR shl 31) or HResult(FACILITY_WIN32 shl 16);
 
(*
* The application requires a newer version of DirectInput.
*)
 
DIERR_OLDDIRECTINPUTVERSION = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_OLD_WIN_VERSION;
 
(*
* The application was written for an unsupported prerelease version
* of DirectInput.
*)
DIERR_BETADIRECTINPUTVERSION = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_RMODE_APP;
 
(*
* The object could not be created due to an incompatible driver version
* or mismatched or incomplete driver components.
*)
DIERR_BADDRIVERVER = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_BAD_DRIVER_LEVEL;
 
(*
* The device or device instance or effect is not registered with DirectInput.
*)
DIERR_DEVICENOTREG = REGDB_E_CLASSNOTREG;
 
(*
* The requested object does not exist.
*)
DIERR_NOTFOUND = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_FILE_NOT_FOUND;
 
(*
* The requested object does not exist.
*)
DIERR_OBJECTNOTFOUND = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_FILE_NOT_FOUND;
 
(*
* An invalid parameter was passed to the returning function,
* or the object was not in a state that admitted the function
* to be called.
*)
DIERR_INVALIDPARAM = E_INVALIDARG;
 
(*
* The specified interface is not supported by the object
*)
DIERR_NOINTERFACE = E_NOINTERFACE;
 
(*
* An undetermined error occured inside the DInput subsystem
*)
DIERR_GENERIC = E_FAIL;
 
(*
* The DInput subsystem couldn't allocate sufficient memory to complete the
* caller's request.
*)
DIERR_OUTOFMEMORY = E_OUTOFMEMORY;
 
(*
* The function called is not supported at this time
*)
DIERR_UNSUPPORTED = E_NOTIMPL;
 
(*
* This object has not been initialized
*)
DIERR_NOTINITIALIZED = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_NOT_READY;
 
(*
* This object is already initialized
*)
DIERR_ALREADYINITIALIZED = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_ALREADY_INITIALIZED;
 
(*
* This object does not support aggregation
*)
DIERR_NOAGGREGATION = CLASS_E_NOAGGREGATION;
 
(*
* Another app has a higher priority level, preventing this call from
* succeeding.
*)
DIERR_OTHERAPPHASPRIO = E_ACCESSDENIED;
 
(*
* Access to the device has been lost. It must be re-acquired.
*)
DIERR_INPUTLOST = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_READ_FAULT;
 
(*
* The operation cannot be performed while the device is acquired.
*)
DIERR_ACQUIRED = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_BUSY;
 
(*
* The operation cannot be performed unless the device is acquired.
*)
DIERR_NOTACQUIRED = SEVERITY_ERROR_FACILITY_WIN32
or ERROR_INVALID_ACCESS;
 
(*
* The specified property cannot be changed.
*)
DIERR_READONLY = E_ACCESSDENIED;
 
(*
* The device already has an event notification associated with it.
*)
DIERR_HANDLEEXISTS = E_ACCESSDENIED;
 
(*
* Data is not yet available.
*)
E_PENDING = HResult($80070007);
 
(*
* Unable to IDirectInputJoyConfig_Acquire because the user
* does not have sufficient privileges to change the joystick
* configuration.
*)
DIERR_INSUFFICIENTPRIVS = HResult($80040200);
DIERR_DEVICEFULL = HResult($80040201);
DIERR_MOREDATA = HResult($80040202);
DIERR_NOTDOWNLOADED = HResult($80040203);
DIERR_HASEFFECTS = HResult($80040204);
DIERR_NOTEXCLUSIVEACQUIRED = HResult($80040205);
DIERR_INCOMPLETEEFFECT = HResult($80040206);
DIERR_NOTBUFFERED = HResult($80040207);
DIERR_EFFECTPLAYING = HResult($80040208);
DIERR_UNPLUGGED = HResult($80040209);
DIERR_REPORTFULL = HResult($8004020A);
 
(*
* The device is full.
*)
DIERR_DEVICEFULL = DIERR_INSUFFICIENTPRIVS + 1;
 
{ Definitions for non-IDirectInput (VJoyD) features defined more recently
than the current sdk files }
(*
* Not all the requested information fit into the buffer.
*)
DIERR_MOREDATA = DIERR_INSUFFICIENTPRIVS + 2;
 
(*
* The effect is not downloaded.
*)
DIERR_NOTDOWNLOADED = DIERR_INSUFFICIENTPRIVS + 3;
 
(*
* The device cannot be reinitialized because there are still effects
* attached to it.
*)
DIERR_HASEFFECTS = DIERR_INSUFFICIENTPRIVS + 4;
 
(*
* The operation cannot be performed unless the device is acquired
* in DISCL_EXCLUSIVE mode.
*)
DIERR_NOTEXCLUSIVEACQUIRED = DIERR_INSUFFICIENTPRIVS + 5;
 
(*
* The effect could not be downloaded because essential information
* is missing. For example, no axes have been associated with the
* effect, or no type-specific information has been created.
*)
DIERR_INCOMPLETEEFFECT = DIERR_INSUFFICIENTPRIVS + 6;
 
(*
* Attempted to read buffered device data from a device that is
* not buffered.
*)
DIERR_NOTBUFFERED = DIERR_INSUFFICIENTPRIVS + 7;
 
(*
* An attempt was made to modify parameters of an effect while it is
* playing. Not all hardware devices support altering the parameters
* of an effect while it is playing.
*)
DIERR_EFFECTPLAYING = DIERR_INSUFFICIENTPRIVS + 8;
 
(*
* The operation could not be completed because the device is not
* plugged in.
*)
DIERR_UNPLUGGED = $80040209;
 
(*
* SendDeviceData failed because more information was requested
* to be sent than can be sent to the device. Some devices have
* restrictions on how much data can be sent to them. (For example,
* there might be a limit on the number of buttons that can be
* pressed at once.)
*)
DIERR_REPORTFULL = $8004020A;
 
 
(****************************************************************************
*
* Definitions for non-IDirectInput (VJoyD) features defined more recently
* than the current sdk files
*
****************************************************************************)
 
(*
* Flag to indicate that the dwReserved2 field of the JOYINFOEX structure
* contains mini-driver specific data to be passed by VJoyD to the mini-
* driver instead of doing a poll.
*)
JOY_PASSDRIVERDATA = $10000000;
 
(*
* Informs the joystick driver that the configuration has been changed
* and should be reloaded from the registery.
* dwFlags is reserved and should be set to zero
*)
 
function joyConfigChanged(dwFlags: DWORD) : MMRESULT; stdcall;
 
const
(*
* Hardware Setting indicating that the device is a headtracker
*)
JOY_HWS_ISHEADTRACKER = $02000000;
 
(*
* Hardware Setting indicating that the VxD is used to replace
* the standard analog polling
*)
JOY_HWS_ISGAMEPORTDRIVER = $04000000;
 
(*
* Hardware Setting indicating that the driver needs a standard
* gameport in order to communicate with the device.
*)
JOY_HWS_ISANALOGPORTDRIVER = $08000000;
 
(*
* Hardware Setting indicating that VJoyD should not load this
* driver, it will be loaded externally and will register with
* VJoyD of it's own accord.
*)
JOY_HWS_AUTOLOAD = $10000000;
 
(*
* Hardware Setting indicating that the driver acquires any
* resources needed without needing a devnode through VJoyD.
*)
JOY_HWS_NODEVNODE = $20000000;
 
(*
* Hardware Setting indicating that the device is a gameport bus
*)
JOY_HWS_ISGAMEPORTBUS = $80000000;
JOY_HWS_GAMEPORTBUSBUSY = $00000001;
 
//from older Verion:
(*
* Hardware Setting indicating that the VxD can be used as
* a port 201h emulator.
*)
JOY_HWS_ISGAMEPORTEMULATOR = $40000000;
 
 
(*
* Usage Setting indicating that the settings are volatile and
* should be removed if still present on a reboot.
*)
JOY_US_VOLATILE = $00000008;
 
{ Definitions for non-IDirectInput (VJoyD) features defined more recently
than the current ddk files }
(****************************************************************************
*
* Definitions for non-IDirectInput (VJoyD) features defined more recently
* than the current ddk files
*
****************************************************************************)
 
(*
* Poll type in which the do_other field of the JOYOEMPOLLDATA
* structure contains mini-driver specific data passed from an app.
*)
JOY_OEMPOLL_PASSDRIVERDATA = 7;
 
function DirectInputCreate(hinst: THandle; dwVersion: DWORD;
out ppDI: IDirectInputA; punkOuter: IUnknown): HResult; stdcall;
function DirectInputCreateEx(hinst: THandle; dwVersion: DWORD;
const riidltf: TGUID; out ppDI: IDirectInputA; punkOuter: IUnknown): HResult; stdcall;
{$IFDEF UseDirectPlay} // Daniel Marschall 12.04.2024 Added to avoid Windows showing "This app requires DirectPlay"
//DirectPlay file
 
(*==========================================================================;
*
* Copyright (C) Microsoft Corporation. All Rights Reserved.
*
* File: dplay.h dplobby.h
* Content: DirectPlay include files
*
* DirectX 7 Delphi adaptation by Erik Unger
*
* Modified: 4-Jun-2000
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: DelphiDirectX@next-reality.com
*
***************************************************************************)
 
var
DPlayDLL : HMODULE = 0;
 
(*==========================================================================;
*
* Copyright (C) 1994-1997 Microsoft Corporation. All Rights Reserved.
*
* File: dplay.h
* Content: DirectPlay include file
*
***************************************************************************)
 
function DPErrorString(Value: HResult) : string;
 
const
{ GUIDS used by DirectPlay objects }
// {D1EB6D20-8923-11d0-9D97-00A0C90A43CB}
CLSID_DirectPlay: TGUID =
(D1:$d1eb6d20;D2:$8923;D3:$11d0;D4:($9d,$97,$00,$a0,$c9,$a,$43,$cb));
 
CLSID_DirectPlay: TGUID = '{D1EB6D20-8923-11D0-9D97-00A0C90A43CB}';
(*
* GUIDS used by Service Providers shipped with DirectPlay
* Use these to identify Service Provider returned by EnumConnections
*)
 
IID_IDirectPlay: TGUID = '{5454E9A0-DB65-11CE-921C-00AA006C4972}';
IID_IDirectPlay2: TGUID = '{2B74F7C0-9154-11CF-A9CD-00AA006886E3}';
IID_IDirectPlay2A: TGUID = '{9D460580-A822-11CF-960C-0080C7534E82}';
IID_IDirectPlay3: TGUID = '{133EFE40-32DC-11D0-9CFB-00A0C90A43CB}';
IID_IDirectPlay3A: TGUID = '{133EFE41-32DC-11D0-9CFB-00A0C90A43CB}';
IID_IDirectPlay4: TGUID = '{0AB1C530-4745-11D1-A7A1-0000F803ABFC}';
IID_IDirectPlay4A: TGUID = '{0AB1C531-4745-11D1-A7A1-0000F803ABFC}';
// GUID for IPX service provider
// {685BC400-9D2C-11cf-A9CD-00AA006886E3}
DPSPGUID_IPX: TGUID =
(D1:$685bc400;D2:$9d2c;D3:$11cf;D4:($a9,$cd,$00,$aa,$00,$68,$86,$e3));
 
{ GUIDS used by Service Providers shipped with DirectPlay
Use these to identify Service Provider returned by EnumConnections }
// GUID for TCP/IP service provider
// 36E95EE0-8577-11cf-960C-0080C7534E82
DPSPGUID_TCPIP: TGUID =
(D1:$36E95EE0;D2:$8577;D3:$11cf;D4:($96,$0c,$00,$80,$c7,$53,$4e,$82));
 
DPSPGUID_IPX: TGUID = '{685BC400-9D2C-11CF-A9CD-00AA006886E3}';
DPSPGUID_TCPIP: TGUID = '{36E95EE0-8577-11CF-960C-0080C7534E82}';
DPSPGUID_SERIAL: TGUID = '{0F1D6860-88D9-11CF-9C4E-00A0C905425E}';
DPSPGUID_MODEM: TGUID = '{44EAA760-CB68-11CF-9C4E-00A0C905425E}';
// GUID for Serial service provider
// {0F1D6860-88D9-11cf-9C4E-00A0C905425E}
DPSPGUID_SERIAL: TGUID =
(D1:$f1d6860;D2:$88d9;D3:$11cf;D4:($9c,$4e,$00,$a0,$c9,$05,$42,$5e));
 
{ DirectPlay Structures }
// GUID for Modem service provider
// {44EAA760-CB68-11cf-9C4E-00A0C905425E}
DPSPGUID_MODEM: TGUID =
(D1:$44eaa760;D2:$cb68;D3:$11cf;D4:($9c,$4e,$00,$a0,$c9,$05,$42,$5e));
 
 
(****************************************************************************
*
* DirectPlay Structures
*
* Various structures used to invoke DirectPlay.
*
****************************************************************************)
 
type
(*
* TDPID
* DirectPlay player and group ID
*)
TDPID = DWORD;
PDPID = ^TDPID;
TDPID = DWORD;
 
DPID = TDPID;
LPDPID = PDPID;
 
const
DPID_SYSMSG = 0; // DPID that system messages come from
DPID_ALLPLAYERS = 0; // DPID representing all players in the session
DPID_SERVERPLAYER = 1; // DPID representing the server player
DPID_RESERVEDRANGE = 100; // DPID representing the maxiumum ID in the range of DPID's reserved for
// use by DirectPlay.
DPID_UNKNOWN = $FFFFFFFF; // The player ID is unknown (used with e.g. DPSESSION_NOMESSAGEID)
(*
* DPID that system messages come from
*)
DPID_SYSMSG = 0;
 
(*
* DPID representing all players in the session
*)
DPID_ALLPLAYERS = 0;
 
(*
* DPID representing the server player
*)
DPID_SERVERPLAYER = 1;
 
(*
* DPID representing the maximum ID in the range of DPID's reserved for
* use by DirectPlay.
*)
DPID_RESERVEDRANGE = 100;
 
(*
* The player ID is unknown (used with e.g. DPSESSION_NOMESSAGEID)
*)
DPID_UNKNOWN = $FFFFFFFF;
 
type
(*
* DPCAPS
* Used to obtain the capabilities of a DirectPlay object
*)
PDPCaps = ^TDPCaps;
TDPCaps = record
TDPCaps = packed record
dwSize: DWORD; // Size of structure, in bytes
dwFlags: DWORD; // DPCAPS_xxx flags
dwMaxBufferSize: DWORD; // Maximum message size, in bytes, for this service provider
9792,27 → 14595,85
// responses to system messages
end;
 
DPCAPS = TDPCaps;
LPDPCAPS = PDPCaps;
 
const
(*
* This DirectPlay object is the session host. If the host exits the
* session, another application will become the host and receive a
* DPSYS_HOST system message.
*)
DPCAPS_ISHOST = $00000002;
 
(*
* The service provider bound to this DirectPlay object can optimize
* group messaging.
*)
DPCAPS_GROUPOPTIMIZED = $00000008;
 
(*
* The service provider bound to this DirectPlay object can optimize
* keep alives (see DPSESSION_KEEPALIVE)
*)
DPCAPS_KEEPALIVEOPTIMIZED = $00000010;
 
(*
* The service provider bound to this DirectPlay object can optimize
* guaranteed message delivery.
*)
DPCAPS_GUARANTEEDOPTIMIZED = $00000020;
 
(*
* This DirectPlay object supports guaranteed message delivery.
*)
DPCAPS_GUARANTEEDSUPPORTED = $00000040;
 
(*
* This DirectPlay object supports digital signing of messages.
*)
DPCAPS_SIGNINGSUPPORTED = $00000080;
 
(*
* This DirectPlay object supports encryption of messages.
*)
DPCAPS_ENCRYPTIONSUPPORTED = $00000100;
 
(*
* This DirectPlay player was created on this machine
*)
DPPLAYERCAPS_LOCAL = $00000800;
 
(*
* Current Open settings supports all forms of Cancel
*)
DPCAPS_ASYNCCANCELSUPPORTED = $00001000;
 
(*
* Current Open settings supports CancelAll, but not Cancel
*)
DPCAPS_ASYNCCANCELALLSUPPORTED = $00002000;
 
(*
* Current Open settings supports Send Timeouts for sends
*)
DPCAPS_SENDTIMEOUTSUPPORTED = $00004000;
 
(*
* Current Open settings supports send priority
*)
DPCAPS_SENDPRIORITYSUPPORTED = $00008000;
 
(*
* Current Open settings supports DPSEND_ASYNC flag
*)
DPCAPS_ASYNCSUPPORTED = $00010000;
 
type
(*
* TDPSessionDesc2
* Used to describe the properties of a DirectPlay
* session instance
*)
PDPSessionDesc2 = ^TDPSessionDesc2;
TDPSessionDesc2 = record
TDPSessionDesc2 = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // DPSESSION_xxx flags
guidInstance: TGUID; // ID for the session instance
9820,11 → 14681,10
// GUID_NULL for all applications.
dwMaxPlayers: DWORD; // Maximum # players allowed in session
dwCurrentPlayers: DWORD; // Current # players in session (read only)
 
case Integer of
case integer of
0: (
lpszSessionName: LPWSTR; // Name of the session - Unicode
lpszPassword: LPWSTR; // Password of the session (optional) - Unicode
lpszSessionName: PCharAW; // Name of the session
lpszPassword: PCharAW; // Password of the session (optional)
dwReserved1: DWORD; // Reserved for future MS use.
dwReserved2: DWORD;
dwUser1: DWORD; // For use by the application
9833,49 → 14693,130
dwUser4: DWORD;
);
1: (
lpszSessionNameA: LPSTR; // Name of the session - ANSI
lpszPasswordA: LPSTR; // Password of the session (optional) - ANSI
lpszSessionNameA: PAnsiChar; // Name of the session
lpszPasswordA: PAnsiChar // Password of the session (optional)
);
2 : (
lpszSessionNameW: PWideChar;
lpszPasswordW: PWideChar
);
end;
 
DPSESSIONDESC2 = TDPSessionDesc2;
LPDPSESSIONDESC2 = PDPSessionDesc2;
 
const
(*
* Applications cannot create new players in this session.
*)
DPSESSION_NEWPLAYERSDISABLED = $00000001;
 
(*
* If the DirectPlay object that created the session, the host,
* quits, then the host will attempt to migrate to another
* DirectPlay object so that new players can continue to be created
* and new applications can join the session.
*)
DPSESSION_MIGRATEHOST = $00000004;
 
(*
* This flag tells DirectPlay not to set the idPlayerTo and idPlayerFrom
* fields in player messages. This cuts two DWORD's off the message
* overhead.
*)
DPSESSION_NOMESSAGEID = $00000008;
 
(*
* This flag tells DirectPlay to not allow any new applications to
* join the session. Applications already in the session can still
* create new players.
*)
DPSESSION_JOINDISABLED = $00000020;
 
(*
* This flag tells DirectPlay to detect when remote players
* exit abnormally (e.g. their computer or modem gets unplugged)
*)
DPSESSION_KEEPALIVE = $00000040;
 
(*
* This flag tells DirectPlay not to send a message to all players
* when a players remote data changes
*)
DPSESSION_NODATAMESSAGES = $00000080;
 
(*
* This flag indicates that the session belongs to a secure server
* and needs user authentication
*)
DPSESSION_SECURESERVER = $00000100;
 
(*
* This flag indicates that the session is private and requirs a password
* for EnumSessions as well as Open.
*)
DPSESSION_PRIVATE = $00000200;
 
(*
* This flag indicates that the session requires a password for joining.
*)
DPSESSION_PASSWORDREQUIRED = $00000400;
 
(*
* This flag tells DirectPlay to route all messages through the server
*)
DPSESSION_MULTICASTSERVER = $00000800;
 
(*
* This flag tells DirectPlay to only download information about the
* DPPLAYER_SERVERPLAYER.
*)
DPSESSION_CLIENTSERVER = $00001000;
 
(*
* This flag tells DirectPlay to use the protocol built into dplay
* for reliability and statistics all the time. When this bit is
* set, only other sessions with this bit set can join or be joined.
*)
DPSESSION_DIRECTPLAYPROTOCOL = $00002000;
 
(*
* This flag tells DirectPlay that preserving order of received
* packets is not important, when using reliable delivery. This
* will allow messages to be indicated out of order if preceding
* messages have not yet arrived. Otherwise DPLAY will wait for
* earlier messages before delivering later reliable messages.
*)
DPSESSION_NOPRESERVEORDER = $00004000;
 
(*
* This flag tells DirectPlay to optimize communication for latency
*)
DPSESSION_OPTIMIZELATENCY = $00008000;
 
type
(*
* TDPName
* Used to hold the name of a DirectPlay entity
* like a player or a group
*)
PDPName = ^TDPName;
TDPName = record
TDPName = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // Not used. Must be zero.
case Integer of
0: (
lpszShortName: LPWSTR; // The short or friendly name - Unicode
lpszLongName: LPWSTR // The long or formal name - Unicode
lpszShortName : PCharAW; // The short or friendly name
lpszLongName : PCharAW; // The long or formal name
);
1: (
lpszShortNameA: LPSTR; // The short or friendly name - ANSI
lpszLongNameA: LPSTR // The long or formal name - ANSI
lpszShortNameA : PAnsiChar;
lpszLongNameA : PAnsiChar;
);
2 : (
lpszShortNameW : PWideChar;
lpszLongNameW : PWideChar;
);
end;
 
DPNAME = TDPName;
LPDPNAME = PDPName;
 
(*
* TDPCredentials
* Used to hold the user name and password of a DirectPlay user
9882,79 → 14823,75
*)
 
PDPCredentials = ^TDPCredentials;
TDPCredentials = record
TDPCredentials = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // Not used. Must be zero.
case Integer of
0: (
lpszUsername: LPWSTR; // User name of the account - Unicode
lpszPassword: LPWSTR; // Password of the account - Unicode
lpszDomain: LPWSTR; // Domain name of the account - Unicode
lpszUsername: PCharAW; // User name of the account
lpszPassword: PCharAW; // Password of the account
lpszDomain: PCharAW; // Domain name of the account
);
1: (
lpszUsernameA: LPSTR; // User name of the account - ANSI
lpszPasswordA: LPSTR; // Password of the account - ANSI
lpszDomainA: LPSTR // Domain name of the account - ANSI
lpszUsernameA: PAnsiChar; // User name of the account
lpszPasswordA: PAnsiChar; // Password of the account
lpszDomainA: PAnsiChar; // Domain name of the account
);
2 : (
lpszUsernameW: PWideChar; // User name of the account
lpszPasswordW: PWideChar; // Password of the account
lpszDomainW: PWideChar; // Domain name of the account
);
end;
 
DPCREDENTIALS = TDPCredentials;
LPDPCREDENTIALS = PDPCredentials;
 
(*
* DPSECURITYDESC
* TDPSecurityDesc
* Used to describe the security properties of a DirectPlay
* session instance
*)
 
PDPSecurityDesc = ^TDPSecurityDesc;
TDPSecurityDesc = record
TDPSecurityDesc = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // Not used. Must be zero.
case Integer of
0: (
lpszSSPIProvider: LPWSTR; // SSPI provider name - Unicode
lpszCAPIProvider: LPWSTR; // CAPI provider name - Unicode
lpszSSPIProvider : PCharAW; // SSPI provider name
lpszCAPIProvider : PCharAW; // CAPI provider name
dwCAPIProviderType: DWORD; // Crypto Service Provider type
dwEncryptionAlgorithm: DWORD; // Encryption Algorithm type
);
1: (
lpszSSPIProviderA: LPSTR; // SSPI provider name - ANSI
lpszCAPIProviderA: LPSTR; // CAPI provider name - ANSI
lpszSSPIProviderA : PAnsiChar; // SSPI provider name
lpszCAPIProviderA : PAnsiChar; // CAPI provider name
);
2 : (
lpszSSPIProviderW : PWideChar; // SSPI provider name
lpszCAPIProviderW : PWideChar; // CAPI provider name
);
end;
 
DPSECURITYDESC = TDPSecurityDesc;
LPDPSECURITYDESC = PDPSecurityDesc;
 
(*
* TDPAccountDesc
* DPACCOUNTDESC
* Used to describe a user membership account
*)
 
PDPAccountDesc = ^TDPAccountDesc;
TDPAccountDesc = record
TDPAccountDesc = packed record
dwSize: DWORD; // Size of structure
dwFlags: DWORD; // Not used. Must be zero.
case Integer of
0: (
lpszAccountID: LPWSTR; // Account identifier - Unicode
);
1: (
lpszAccountIDA: LPSTR; // Account identifier - ANSI
);
0 : (lpszAccountID : PCharAW); // Account identifier
1 : (lpszAccountIDA : PAnsiChar);
2 : (lpszAccountIDW : PWideChar);
end;
 
DPACCOUNTDESC = TDPAccountDesc;
LPDPACCOUNTDESC = PDPAccountDesc;
 
(*
* TDPLConnection
* Used to hold all in the informaion needed to connect
* an application to a session or create a session
*)
 
PDPLConnection = ^TDPLConnection;
TDPLConnection = record
TDPLConnection = packed record
dwSize: DWORD; // Size of this structure
dwFlags: DWORD; // Flags specific to this structure
lpSessionDesc: PDPSessionDesc2; // Pointer to session desc to use on connect
9964,345 → 14901,796
dwAddressSize: DWORD; // Size of address data
end;
 
DPLCONNECTION = TDPLConnection;
LPDPLCONNECTION = PDPLConnection;
 
(*
* TDPChat
* Used to hold the a DirectPlay chat message
*)
 
PDPChat = ^TDPChat;
TDPChat = record
TDPChat = packed record
dwSize: DWORD;
dwFlags: DWORD;
case Integer of
0: (
lpszMessage: LPWSTR; // Message string - Unicode
);
1: (
lpszMessageA: LPSTR; // Message string - ANSI
);
0 : (lpszMessage : PCharAW); // Message string
1 : (lpszMessageA : PAnsiChar);
2 : (lpszMessageW : PWideChar);
end;
 
DPCHAT = TDPChat;
LPDPCHAT = PDPChat;
 
(*
* SGBUFFER
* TSGBuffer
* Scatter Gather Buffer used for SendEx
*)
 
PSGBuffer = ^TSGBuffer;
TSGBuffer = record
len: UINT; // length of buffer data
pData: PUChar; // pointer to buffer data
TSGBuffer = packed record
len: UINT;
pData: PUCHAR;
end;
 
SGBUFFER = TSGBuffer;
LPSGBUFFER = PSGBuffer;
(****************************************************************************
*
* Prototypes for DirectPlay callback functions
*
****************************************************************************)
 
{ Prototypes for DirectPlay callback functions }
 
{ Callback for IDirectPlay2::EnumSessions }
 
TDPEnumSessionsCallback2 = function(const lpThisSD: TDPSessionDesc2;
(*
* Callback for IDirectPlay2::EnumSessions
*)
TDPEnumSessionsCallback2 = function(lpThisSD: PDPSessionDesc2;
var lpdwTimeOut: DWORD; dwFlags: DWORD; lpContext: Pointer): BOOL; stdcall;
LPDPENUMSESSIONSCALLBACK2 = TDPEnumSessionsCallback2;
 
const
(*
* This flag is set on the EnumSessions callback dwFlags parameter when
* the time out has occurred. There will be no session data for this
* callback. If *lpdwTimeOut is set to a non-zero value and the
* EnumSessionsCallback function returns TRUE then EnumSessions will
* continue waiting until the next timeout occurs. Timeouts are in
* milliseconds.
*)
DPESC_TIMEDOUT = $00000001;
 
type
TDPEnumPlayersCallback2 = function(dpId: TDPID; dwPlayerType: DWORD;
(*
* Callback for IDirectPlay2.EnumPlayers
* IDirectPlay2.EnumGroups
* IDirectPlay2.EnumGroupPlayers
*)
TDPEnumPlayersCallback2 = function(DPID: TDPID; dwPlayerType: DWORD;
const lpName: TDPName; dwFlags: DWORD; lpContext: Pointer): BOOL; stdcall;
LPDPENUMPLAYERSCALLBACK2 = TDPEnumPlayersCallback2;
 
TDPEnumDPCallback = function(const lpguidSP: TGUID; lpSPName: LPWSTR;
 
(*
* ANSI callback for DirectPlayEnumerate
* This callback prototype will be used if compiling
* for ANSI strings
*)
TDPEnumDPCallbackA = function(const lpguidSP: TGUID; lpSPName: PAnsiChar;
dwMajorVersion: DWORD; dwMinorVersion: DWORD; lpContext: Pointer): BOOL; stdcall;
LPDPENUMDPCALLBACK = TDPEnumDPCallback;
 
TDPEnumDPCallbackA = function(const lpguidSP: TGUID; lpSPName: LPSTR;
(*
* Unicode callback for DirectPlayEnumerate
* This callback prototype will be used if compiling
* for Unicode strings
*)
TDPEnumDPCallbackW = function(const lpguidSP: TGUID; lpSPName: PWideChar;
dwMajorVersion: DWORD; dwMinorVersion: DWORD; lpContext: Pointer): BOOL; stdcall;
LPDPENUMDPCALLBACKA = TDPEnumDPCallbackA;
 
(*
* Callback for DirectPlayEnumerate
*)
{$IFDEF UNICODE}
TDPEnumDPCallback = TDPEnumDPCallbackW;
{$ELSE}
TDPEnumDPCallback = TDPEnumDPCallbackA;
{$ENDIF}
 
(*
* Callback for IDirectPlay3(A/W).EnumConnections
*)
TDPEnumConnectionsCallback = function(const lpguidSP: TGUID;
lpConnection: Pointer; dwConnectionSize: DWORD; const lpName: TDPName;
dwFlags: DWORD; lpContext: Pointer): BOOL; stdcall;
LPDPENUMCONNECTIONSCALLBACK = TDPEnumConnectionsCallback;
 
{ API's }
(*
* API's
*)
 
function DirectPlayEnumerateA(lpEnumDPCallback: TDPEnumDPCallbackA;
var
DirectPlayEnumerate : function (lpEnumDPCallback: TDPEnumDPCallback;
lpContext: Pointer): HResult; stdcall;
function DirectPlayEnumerateW(lpEnumDPCallback: TDPEnumDPCallback;
DirectPlayEnumerateA : function (lpEnumDPCallback: TDPEnumDPCallbackA;
lpContext: Pointer): HResult; stdcall;
function DirectPlayEnumerate(lpEnumDPCallback: TDPEnumDPCallbackA;
DirectPlayEnumerateW : function (lpEnumDPCallback: TDPEnumDPCallbackW;
lpContext: Pointer): HResult; stdcall;
 
 
{ IDirectPlay2 (and IDirectPlay2A) Interface }
(****************************************************************************
*
* IDirectPlay2 (and IDirectPlay2A) Interface
*
****************************************************************************)
 
type
IDirectPlay2 = interface(IUnknown)
['{2B74F7C0-9154-11CF-A9CD-00AA006886E3}']
// IDirectPlay2 methods
IDirectPlay2AW = interface (IUnknown)
(*** IDirectPlay2 methods ***)
function AddPlayerToGroup(idGroup: TDPID; idPlayer: TDPID): HResult; stdcall;
function Close: HResult; stdcall;
function CreateGroup(var lpidGroup: TDPID; const lpGroupName: TDPName;
const lpData; dwDataSize: DWORD; dwFlags: DWORD): HResult; stdcall;
function CreatePlayer(var lpidPlayer: TDPID; const pPlayerName: TDPName;
hEvent: THandle; const lpData; dwDataSize: DWORD; dwFliags: DWORD): HResult; stdcall;
function CreateGroup(out lpidGroup: TDPID; lpGroupName: PDPName;
lpData: Pointer; dwDataSize: DWORD; dwFlags: DWORD) : HResult; stdcall;
function CreatePlayer(out lpidPlayer: TDPID; pPlayerName: PDPName;
hEvent: THandle; lpData: Pointer; dwDataSize: DWORD; dwFlags: DWORD) : HResult; stdcall;
function DeletePlayerFromGroup(idGroup: TDPID; idPlayer: TDPID): HResult; stdcall;
function DestroyGroup(idGroup: TDPID): HResult; stdcall;
function DestroyPlayer(idPlayer: TDPID): HResult; stdcall;
function EnumGroupPlayers(idGroup: TDPID; const lpguidInstance: TGUID;
function EnumGroupPlayers(idGroup: TDPID; lpguidInstance: PGUID;
lpEnumPlayersCallback2: TDPEnumPlayersCallback2; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function EnumGroups(const lpguidInstance: TGUID; lpEnumPlayersCallback2:
LPDPENUMPLAYERSCALLBACK2; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function EnumPlayers(const lpguidInstance: TGUID; lpEnumPlayersCallback2:
LPDPENUMPLAYERSCALLBACK2; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function EnumGroups(lpguidInstance: PGUID; lpEnumPlayersCallback2:
TDPEnumPlayersCallback2; lpContext: Pointer; dwFlags: DWORD) : HResult; stdcall;
function EnumPlayers(lpguidInstance: PGUID; lpEnumPlayersCallback2:
TDPEnumPlayersCallback2; lpContext: Pointer; dwFlags: DWORD) : HResult; stdcall;
function EnumSessions(const lpsd: TDPSessionDesc2; dwTimeout: DWORD;
lpEnumSessionsCallback2: TDPEnumSessionsCallback2; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function GetCaps(var lpDPCaps: TDPCaps; dwFlags: DWORD): HResult; stdcall;
function GetGroupData(idGroup: TDPID; var lpData; var lpdwDataSize: DWORD;
function GetGroupData(idGroup: TDPID; lpData: Pointer; var lpdwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function GetGroupName(idGroup: TDPID; var lpData; var lpdwDataSize: DWORD): HResult; stdcall;
function GetGroupName(idGroup: TDPID; lpData: Pointer; var lpdwDataSize: DWORD) :
HResult; stdcall;
function GetMessageCount(idPlayer: TDPID; var lpdwCount: DWORD): HResult; stdcall;
function GetPlayerAddress(idPlayer: TDPID; var lpAddress;
function GetPlayerAddress(idPlayer: TDPID; lpAddress: Pointer;
var lpdwAddressSize: DWORD): HResult; stdcall;
function GetPlayerCaps(idPlayer: TDPID; var lpPlayerCaps: TDPCaps;
dwFlags: DWORD): HResult; stdcall;
function GetPlayerData(idPlayer: TDPID; var lpData; var lpdwDataSize: DWORD;
function GetPlayerData(idPlayer: TDPID; lpData: Pointer; var lpdwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function GetPlayerName(idPlayer: TDPID; var lpData; var lpdwDataSize: DWORD): HResult; stdcall;
function GetSessionDesc(var lpData; var lpdwDataSize: DWORD): HResult; stdcall;
function GetPlayerName(idPlayer: TDPID; lpData: Pointer; var lpdwDataSize: DWORD) : HResult; stdcall;
function GetSessionDesc(lpData: Pointer; var lpdwDataSize: DWORD) : HResult; stdcall;
function Initialize(const lpGUID: TGUID): HResult; stdcall;
function Open(var lpsd: TDPSessionDesc2; dwFlags: DWORD): HResult; stdcall;
function Receive(var lpidFrom: TDPID; var lpidTo: TDPID; dwFlags: DWORD;
var lpData; var lpdwDataSize: DWORD): HResult; stdcall;
function Send(idFrom: TDPID; lpidTo: TDPID; dwFlags: DWORD; const lpData;
lpData: Pointer; var lpdwDataSize: DWORD) : HResult; stdcall;
function Send(idFrom: TDPID; lpidTo: TDPID; dwFlags: DWORD; var lpData;
lpdwDataSize: DWORD): HResult; stdcall;
function SetGroupData(idGroup: TDPID; const lpData; dwDataSize: DWORD;
function SetGroupData(idGroup: TDPID; lpData: Pointer; dwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function SetGroupName(idGroup: TDPID; const lpGroupName: TDPName;
function SetGroupName(idGroup: TDPID; lpGroupName: PDPName;
dwFlags: DWORD): HResult; stdcall;
function SetPlayerData(idPlayer: TDPID; const lpData; dwDataSize: DWORD;
function SetPlayerData(idPlayer: TDPID; lpData: Pointer; dwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function SetPlayerName(idPlayer: TDPID; const lpPlayerName: TDPName;
function SetPlayerName(idPlayer: TDPID; lpPlayerName: PDPName;
dwFlags: DWORD): HResult; stdcall;
function SetSessionDesc(const lpSessDesc: TDPSessionDesc2; dwFlags: DWORD): HResult; stdcall;
function SetSessionDesc(var lpSessDesc: TDPSessionDesc2; dwFlags: DWORD) :
HResult; stdcall;
end;
 
IDirectPlay2A = interface(IDirectPlay2)
['{9D460580-A822-11CF-960C-0080C7534E82}']
IDirectPlay2W = interface (IDirectPlay2AW)
['{2B74F7C0-9154-11CF-A9CD-00AA006886E3}']
end;
IDirectPlay2A = interface (IDirectPlay2AW)
['{9d460580-a822-11cf-960c-0080c7534e82}']
end;
 
{ IDirectPlay3 (and IDirectPlay3A) Interface }
{$IFDEF UNICODE}
IDirectPlay2 = IDirectPlay2W;
{$ELSE}
IDirectPlay2 = IDirectPlay2A;
{$ENDIF}
 
IDirectPlay3 = interface(IDirectPlay2)
['{133EFE40-32DC-11D0-9CFB-00A0C90A43CB}']
// IDirectPlay3 methods
(****************************************************************************
*
* IDirectPlay3 (and IDirectPlay3A) Interface
*
****************************************************************************)
 
IDirectPlay3AW = interface (IDirectPlay2AW)
(*** IDirectPlay3 methods ***)
function AddGroupToGroup(idParentGroup: TDPID; idGroup: TDPID): HResult; stdcall;
function CreateGroupInGroup(idParentGroup: TDPID; var lpidGroup: TDPID;
var lpGroupName: TDPName; const lpData; dwDataSize: DWORD;
lpGroupName: PDPName; lpData: Pointer; dwDataSize: DWORD;
dwFlags: DWORD): HResult; stdcall;
function DeleteGroupFromGroup(idParentGroup: TDPID; idGroup: TDPID): HResult; stdcall;
function EnumConnections(const lpguidApplication: TGUID;
function EnumConnections(lpguidApplication: PGUID;
lpEnumCallback: TDPEnumConnectionsCallback; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function EnumGroupsInGroup(idGroup: TDPID; const lpguidInstance: TGUID;
function EnumGroupsInGroup(idGroup: TDPID; lpguidInstance: PGUID;
lpEnumPlayersCallback2: TDPEnumPlayersCallback2; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function GetGroupConnectionSettings(dwFlags: DWORD; idGroup: TDPID;
var lpData; var lpdwDataSize: DWORD): HResult; stdcall;
lpData: Pointer; var lpdwDataSize: DWORD) : HResult; stdcall;
function InitializeConnection(lpConnection: Pointer; dwFlags: DWORD): HResult; stdcall;
function SecureOpen(const lpsd: TDPSessionDesc2; dwFlags: DWORD;
const lpSecurity: TDPSecurityDesc; const lpCredentials: TDPCredentials): HResult; stdcall;
function SecureOpen(var lpsd: TDPSessionDesc2; dwFlags: DWORD;
var lpSecurity: TDPSecurityDesc; var lpCredentials: TDPCredentials) : HResult; stdcall;
function SendChatMessage(idFrom: TDPID; idTo: TDPID; dwFlags: DWORD;
const lpChatMessage: TDPChat): HResult; stdcall;
var lpChatMessage: TDPChat) : HResult; stdcall;
function SetGroupConnectionSettings(dwFlags: DWORD; idGroup: TDPID;
const lpConnection: TDPLConnection): HResult; stdcall;
var lpConnection: TDPLConnection) : HResult; stdcall;
function StartSession(dwFlags: DWORD; idGroup: TDPID): HResult; stdcall;
function GetGroupFlags(idGroup: TDPID; var lpdwFlags: DWORD): HResult; stdcall;
function GetGroupParent(idGroup: TDPID; var lpidParent: TDPID): HResult; stdcall;
function GetGroupFlags(idGroup: TDPID; out lpdwFlags: DWORD) : HResult; stdcall;
function GetGroupParent(idGroup: TDPID; out lpidParent: TDPID) : HResult; stdcall;
function GetPlayerAccount(idPlayer: TDPID; dwFlags: DWORD; var lpData;
var lpdwDataSize: DWORD): HResult; stdcall;
function GetPlayerFlags(idPlayer: TDPID; var lpdwFlags: DWORD): HResult; stdcall;
function GetPlayerFlags(idPlayer: TDPID; out lpdwFlags: DWORD) : HResult; stdcall;
end;
 
IDirectPlay3A = interface(IDirectPlay3)
['{133EFE41-32DC-11D0-9CFB-00A0C90A43CB}']
 
IDirectPlay3W = interface (IDirectPlay3AW)
['{133EFE40-32DC-11D0-9CFB-00A0C90A43CB}']
end;
IDirectPlay3A = interface (IDirectPlay3AW)
['{133efe41-32dc-11d0-9cfb-00a0c90a43cb}']
end;
 
{ IDirectPlay4 (and IDirectPlay4A) Interface }
{$IFDEF UNICODE}
IDirectPlay3 = IDirectPlay3W;
{$ELSE}
IDirectPlay3 = IDirectPlay3A;
{$ENDIF}
 
IDirectPlay4 = interface(IDirectPlay3)
['{0AB1C530-4745-11D1-A7A1-0000F803ABFC}']
// IDirectPlay4 methods
function GetGroupOwner(idGroup: TDPID; var idOwner: TDPID): HResult; stdcall;
 
(****************************************************************************
*
* IDirectPlay4 (and IDirectPlay4A) Interface
*
****************************************************************************)
 
IDirectPlay4AW = interface (IDirectPlay3AW)
(*** IDirectPlay4 methods ***)
function GetGroupOwner(idGroup: TDPID; out idOwner: TDPID) : HResult; stdcall;
function SetGroupOwner(idGroup: TDPID; idOwner: TDPID): HResult; stdcall;
function SendEx(idFrom: TDPID; idTo: TDPID; dwFlags: DWORD; const pData;
function SendEx(idFrom: TDPID; idTo: TDPID; dwFlags: DWORD; lpData: Pointer;
dwDataSize: DWORD; dwPriority: DWORD; dwTimeout: DWORD;
lpContext: Pointer; lpdwMsgId: PDWORD): HResult; stdcall;
function GetMessageQueue(idFrom: TDPID; idTo: TDPID; dwFlags: DWORD;
var lpdwNumMsgs: DWORD; var lpdwNumBytes: DWORD): HResult; stdcall;
lpdwNumMsgs: PDWORD; lpdwNumBytes: PDWORD) : HResult; stdcall;
function CancelMessage(dwMessageID: DWORD; dwFlags: DWORD): HResult; stdcall;
function CancelPriority(dwMinPriority: DWORD; dwMaxPriority: DWORD; dwFlags: DWORD): HResult; stdcall;
end;
 
IDirectPlay4A = interface(IDirectPlay4)
['{0AB1C531-4745-11D1-A7A1-0000F803ABFC}']
 
IDirectPlay4W = interface (IDirectPlay4AW)
['{0ab1c530-4745-11D1-a7a1-0000f803abfc}']
end;
IDirectPlay4A = interface (IDirectPlay4AW)
['{0ab1c531-4745-11D1-a7a1-0000f803abfc}']
end;
 
{$IFDEF UNICODE}
IDirectPlay4 = IDirectPlay4W;
{$ELSE}
IDirectPlay4 = IDirectPlay4A;
{$ENDIF}
 
 
const
{ EnumConnections API flags }
(****************************************************************************
*
* EnumConnections API flags
*
****************************************************************************)
 
(*
* Enumerate Service Providers
*)
DPCONNECTION_DIRECTPLAY = $00000001;
 
(*
* Enumerate Lobby Providers
*)
DPCONNECTION_DIRECTPLAYLOBBY = $00000002;
 
{ EnumPlayers API flags }
(****************************************************************************
*
* EnumPlayers API flags
*
****************************************************************************)
 
(*
* Enumerate all players in the current session
*)
DPENUMPLAYERS_ALL = $00000000;
DPENUMGROUPS_ALL = DPENUMPLAYERS_ALL;
 
(*
* Enumerate only local (created by this application) players
* or groups
*)
DPENUMPLAYERS_LOCAL = $00000008;
DPENUMGROUPS_LOCAL = DPENUMPLAYERS_LOCAL;
 
(*
* Enumerate only remote (non-local) players
* or groups
*)
DPENUMPLAYERS_REMOTE = $00000010;
DPENUMGROUPS_REMOTE = DPENUMPLAYERS_REMOTE;
 
(*
* Enumerate groups along with the players
*)
DPENUMPLAYERS_GROUP = $00000020;
 
(*
* Enumerate players or groups in another session
* (must supply lpguidInstance)
*)
DPENUMPLAYERS_SESSION = $00000080;
DPENUMGROUPS_SESSION = DPENUMPLAYERS_SESSION;
 
(*
* Enumerate server players
*)
DPENUMPLAYERS_SERVERPLAYER = $00000100;
 
(*
* Enumerate spectator players
*)
DPENUMPLAYERS_SPECTATOR = $00000200;
 
(*
* Enumerate shortcut groups
*)
DPENUMGROUPS_SHORTCUT = $00000400;
 
(*
* Enumerate staging area groups
*)
DPENUMGROUPS_STAGINGAREA = $00000800;
 
(*
* Enumerate hidden groups
*)
DPENUMGROUPS_HIDDEN = $00001000;
 
(*
* Enumerate the group's owner
*)
DPENUMPLAYERS_OWNER = $00002000;
 
{ CreatePlayer API flags }
(****************************************************************************
*
* CreatePlayer API flags
*
****************************************************************************)
 
(*
* This flag indicates that this player should be designated
* the server player. The app should specify this at CreatePlayer.
*)
DPPLAYER_SERVERPLAYER = DPENUMPLAYERS_SERVERPLAYER;
 
(*
* This flag indicates that this player should be designated
* a spectator. The app should specify this at CreatePlayer.
*)
DPPLAYER_SPECTATOR = DPENUMPLAYERS_SPECTATOR;
 
(*
* This flag indicates that this player was created locally.
* (returned from GetPlayerFlags)
*)
DPPLAYER_LOCAL = DPENUMPLAYERS_LOCAL;
 
(*
* This flag indicates that this player is the group's owner
* (Only returned in EnumGroupPlayers)
*)
DPPLAYER_OWNER = DPENUMPLAYERS_OWNER;
 
{ CreateGroup API flags }
(****************************************************************************
*
* CreateGroup API flags
*
****************************************************************************)
 
(*
* This flag indicates that the StartSession can be called on the group.
* The app should specify this at CreateGroup, or CreateGroupInGroup.
*)
DPGROUP_STAGINGAREA = DPENUMGROUPS_STAGINGAREA;
 
(*
* This flag indicates that this group was created locally.
* (returned from GetGroupFlags)
*)
DPGROUP_LOCAL = DPENUMGROUPS_LOCAL;
 
(*
* This flag indicates that this group was created hidden.
*)
DPGROUP_HIDDEN = DPENUMGROUPS_HIDDEN;
 
{ EnumSessions API flags }
(****************************************************************************
*
* EnumSessions API flags
*
****************************************************************************)
 
(*
* Enumerate sessions which can be joined
*)
DPENUMSESSIONS_AVAILABLE = $00000001;
 
(*
* Enumerate all sessions even if they can't be joined.
*)
DPENUMSESSIONS_ALL = $00000002;
 
(*
* Start an asynchronous enum sessions
*)
DPENUMSESSIONS_ASYNC = $00000010;
 
(*
* Stop an asynchronous enum sessions
*)
DPENUMSESSIONS_STOPASYNC = $00000020;
 
(*
* Enumerate sessions even if they require a password
*)
DPENUMSESSIONS_PASSWORDREQUIRED = $00000040;
 
(*
* Return status about progress of enumeration instead of
* showing any status dialogs.
*)
DPENUMSESSIONS_RETURNSTATUS = $00000080;
 
{ GetCaps and GetPlayerCaps API flags }
(****************************************************************************
*
* GetCaps and GetPlayerCaps API flags
*
****************************************************************************)
 
(*
* The latency returned should be for guaranteed message sending.
* Default is non-guaranteed messaging.
*)
DPGETCAPS_GUARANTEED = $00000001;
 
{ GetGroupData, GetPlayerData API flags }
(****************************************************************************
*
* GetGroupData, GetPlayerData API flags
* Remote and local Group/Player data is maintained separately.
* Default is DPGET_REMOTE.
*
****************************************************************************)
 
(*
* Get the remote data (set by any DirectPlay object in
* the session using DPSET_REMOTE)
*)
DPGET_REMOTE = $00000000;
 
(*
* Get the local data (set by this DirectPlay object
* using DPSET_LOCAL)
*)
DPGET_LOCAL = $00000001;
 
{ Open API flags }
(****************************************************************************
*
* Open API flags
*
****************************************************************************)
 
(*
* Join the session that is described by the DPSESSIONDESC2 structure
*)
DPOPEN_JOIN = $00000001;
 
(*
* Create a new session as described by the DPSESSIONDESC2 structure
*)
DPOPEN_CREATE = $00000002;
 
(*
* Return status about progress of open instead of showing
* any status dialogs.
*)
DPOPEN_RETURNSTATUS = DPENUMSESSIONS_RETURNSTATUS;
 
{ TDPLConnection flags }
(****************************************************************************
*
* DPLCONNECTION flags
*
****************************************************************************)
 
(*
* This application should create a new session as
* described by the DPSESIONDESC structure
*)
DPLCONNECTION_CREATESESSION = DPOPEN_CREATE;
 
(*
* This application should join the session described by
* the DPSESIONDESC structure with the lpAddress data
*)
DPLCONNECTION_JOINSESSION = DPOPEN_JOIN;
 
{ Receive API flags }
(****************************************************************************
*
* Receive API flags
* Default is DPRECEIVE_ALL
*
****************************************************************************)
 
(*
* Get the first message in the queue
*)
DPRECEIVE_ALL = $00000001;
 
(*
* Get the first message in the queue directed to a specific player
*)
DPRECEIVE_TOPLAYER = $00000002;
 
(*
* Get the first message in the queue from a specific player
*)
DPRECEIVE_FROMPLAYER = $00000004;
 
(*
* Get the message but don't remove it from the queue
*)
DPRECEIVE_PEEK = $00000008;
 
{ Send API flags }
(****************************************************************************
*
* Send API flags
*
****************************************************************************)
 
(*
* Send the message using a guaranteed send method.
* Default is non-guaranteed.
*)
DPSEND_GUARANTEED = $00000001;
 
(*
* This flag is obsolete. It is ignored by DirectPlay
*)
DPSEND_HIGHPRIORITY = $00000002;
 
(*
* This flag is obsolete. It is ignored by DirectPlay
*)
DPSEND_OPENSTREAM = $00000008;
 
(*
* This flag is obsolete. It is ignored by DirectPlay
*)
DPSEND_CLOSESTREAM = $00000010;
 
(*
* Send the message digitally signed to ensure authenticity.
*)
DPSEND_SIGNED = $00000020;
 
(*
* Send the message with encryption to ensure privacy.
*)
DPSEND_ENCRYPTED = $00000040;
 
(*
* The message is a lobby system message
*)
DPSEND_LOBBYSYSTEMMESSAGE = $00000080;
 
(*
* andyco - added this so we can make addforward async.
* needs to be sanitized when we add / expose full async
* support. 8/3/97.
*)
DPSEND_ASYNC = $00000200;
 
(*
* When a message is completed, don't tell me.
* by default the application is notified with a system message.
*)
DPSEND_NOSENDCOMPLETEMSG = $00000400;
 
 
(*
* Maximum priority for sends available to applications
*)
DPSEND_MAX_PRI = $0000FFFF;
DPSEND_MAX_PRIORITY = DPSEND_MAX_PRI;
 
{ SetGroupData, SetGroupName, SetPlayerData, SetPlayerName,
SetSessionDesc API flags. }
(****************************************************************************
*
* SetGroupData, SetGroupName, SetPlayerData, SetPlayerName,
* SetSessionDesc API flags.
* Default is DPSET_REMOTE.
*
****************************************************************************)
 
(*
* Propagate the data to all players in the session
*)
DPSET_REMOTE = $00000000;
 
(*
* Do not propagate the data to other players
*)
DPSET_LOCAL = $00000001;
 
(*
* Used with DPSET_REMOTE, use guaranteed message send to
* propagate the data
*)
DPSET_GUARANTEED = $00000002;
 
{ GetMessageQueue API flags. }
(****************************************************************************
*
* GetMessageQueue API flags.
* Default is DPMESSAGEQUEUE_SEND
*
****************************************************************************)
 
DPMESSAGEQUEUE_SEND = $00000001; // Default
DPMESSAGEQUEUE_RECEIVE = $00000002; // Default
(*
* Get Send Queue - requires Service Provider Support
*)
DPMESSAGEQUEUE_SEND = $00000001;
 
{ Connect API flags }
(*
* Get Receive Queue
*)
DPMESSAGEQUEUE_RECEIVE = $00000002;
 
(****************************************************************************
*
* Connect API flags
*
****************************************************************************)
 
(*
* Start an asynchronous connect which returns status codes
*)
DPCONNECT_RETURNSTATUS = DPENUMSESSIONS_RETURNSTATUS;
 
{ DirectPlay system messages and message data structures }
(****************************************************************************
*
* DirectPlay system messages and message data structures
*
* All system message come 'From' player DPID_SYSMSG. To determine what type
* of message it is, cast the lpData from Receive to TDPMsg_Generic and check
* the dwType member against one of the following DPSYS_xxx constants. Once
* a match is found, cast the lpData to the corresponding of the DPMSG_xxx
* structures to access the data of the message.
*
****************************************************************************)
 
(*
* A new player or group has been created in the session
* Use TDPMsg_CreatePlayerOrGroup. Check dwPlayerType to see if it
* is a player or a group.
*)
DPSYS_CREATEPLAYERORGROUP = $0003;
 
(*
* A player has been deleted from the session
* Use TDPMsg_DestroyPlayerOrGroup
*)
DPSYS_DESTROYPLAYERORGROUP = $0005;
 
(*
* A player has been added to a group
* Use DPMSG_ADDPLAYERTOGROUP
*)
DPSYS_ADDPLAYERTOGROUP = $0007;
 
(*
* A player has been removed from a group
* Use DPMSG_DELETEPLAYERFROMGROUP
*)
DPSYS_DELETEPLAYERFROMGROUP = $0021;
 
(*
* This DirectPlay object lost its connection with all the
* other players in the session.
* Use DPMSG_SESSIONLOST.
*)
DPSYS_SESSIONLOST = $0031;
 
(*
* The current host has left the session.
* This DirectPlay object is now the host.
* Use DPMSG_HOST.
*)
DPSYS_HOST = $0101;
 
(*
* The remote data associated with a player or
* group has changed. Check dwPlayerType to see
* if it is a player or a group
* Use DPMSG_SETPLAYERORGROUPDATA
*)
DPSYS_SETPLAYERORGROUPDATA = $0102;
 
(*
* The name of a player or group has changed.
* Check dwPlayerType to see if it is a player
* or a group.
* Use TDPMsg_SetPlayerOrGroupName
*)
DPSYS_SETPLAYERORGROUPNAME = $0103;
 
(*
* The session description has changed.
* Use DPMSG_SETSESSIONDESC
*)
DPSYS_SETSESSIONDESC = $0104;
 
(*
* A group has been added to a group
* Use TDPMsg_AddGroupToGroup
*)
DPSYS_ADDGROUPTOGROUP = $0105;
 
(*
* A group has been removed from a group
* Use DPMsg_DeleteGroupFromGroup
*)
DPSYS_DELETEGROUPFROMGROUP = $0106;
 
(*
* A secure player-player message has arrived.
* Use DPMSG_SECUREMESSAGE
*)
DPSYS_SECUREMESSAGE = $0107;
 
(*
* Start a new session.
* Use DPMSG_STARTSESSION
*)
DPSYS_STARTSESSION = $0108;
 
(*
* A chat message has arrived
* Use DPMSG_CHAT
*)
DPSYS_CHAT = $0109;
 
(*
* The owner of a group has changed
* Use DPMSG_SETGROUPOWNER
*)
DPSYS_SETGROUPOWNER = $010A;
DPSYS_SENDCOMPLETE = $010d;
 
(*
* An async send has finished, failed or been cancelled
* Use DPMSG_SENDCOMPLETE
*)
DPSYS_SENDCOMPLETE = $010D;
 
{ Used in the dwPlayerType field to indicate if it applies to a group or a player}
 
(*
* Used in the dwPlayerType field to indicate if it applies to a group
* or a player
*)
DPPLAYERTYPE_GROUP = $00000000;
DPPLAYERTYPE_PLAYER = $00000001;
 
{ TDPMsg_Generic }
 
type
(*
* TDPMsg_Generic
* Generic message structure used to identify the message type.
*)
PDPMsg_Generic = ^TDPMsg_Generic;
TDPMsg_Generic = record
TDPMsg_Generic = packed record
dwType: DWORD; // Message type
end;
 
DPMSG_GENERIC = TDPMsg_Generic;
LPDPMSG_GENERIC = PDPMsg_Generic;
 
{ TDPMsg_CreatePlayerOrGroup }
 
(*
* TDPMsg_CreatePlayerOrGroup
* System message generated when a new player or group
* created in the session with information about it.
*)
PDPMsg_CreatePlayerOrGroup = ^TDPMsg_CreatePlayerOrGroup;
TDPMsg_CreatePlayerOrGroup = record
TDPMsg_CreatePlayerOrGroup = packed record
dwType: DWORD; // Message type
dwPlayerType: DWORD; // Is it a player or group
dpId: TDPID; // ID of the player or group
DPID: TDPID; // ID of the player or group
dwCurrentPlayers: DWORD; // current # players & groups in session
lpData: Pointer; // pointer to remote data
dwDataSize: DWORD; // size of remote data
10313,16 → 15701,16
dwFlags: DWORD; // player or group flags
end;
 
DPMSG_CREATEPLAYERORGROUP = TDPMsg_CreatePlayerOrGroup;
LPDPMSG_CREATEPLAYERORGROUP = PDPMsg_CreatePlayerOrGroup;
 
{ TDPMsg_DestroyPlayerOrGroup }
 
(*
* TDPMsg_DestroyPlayerOrGroup
* System message generated when a player or group is being
* destroyed in the session with information about it.
*)
PDPMsg_DestroyPlayerOrGroup = ^TDPMsg_DestroyPlayerOrGroup;
TDPMsg_DestroyPlayerOrGroup = record
TDPMsg_DestroyPlayerOrGroup = packed record
dwType: DWORD; // Message type
dwPlayerType: DWORD; // Is it a player or group
dpId: TDPID; // player ID being deleted
DPID: TDPID; // player ID being deleted
lpLocalData: Pointer; // copy of players local data
dwLocalDataSize: DWORD; // sizeof local data
lpRemoteData: Pointer; // copy of players remote data
10334,107 → 15722,106
dwFlags: DWORD; // player or group flags
end;
 
DPMSG_DESTROYPLAYERORGROUP = TDPMsg_DestroyPlayerOrGroup;
LPDPMSG_DESTROYPLAYERORGROUP = PDPMsg_DestroyPlayerOrGroup;
 
{ TDPMsg_AddPlayerOrGroup }
 
PDPMsg_AddPlayerOrGroup = ^TDPMsg_AddPlayerOrGroup;
TDPMsg_AddPlayerOrGroup = record
(*
* DPMSG_ADDPLAYERTOGROUP
* System message generated when a player is being added
* to a group.
*)
PDPMsg_AddPlayerToGroup = ^TDPMsg_AddPlayerToGroup;
TDPMsg_AddPlayerToGroup = packed record
dwType: DWORD; // Message type
dpIdGroup: TDPID; // group ID being added to
dpIdPlayer: TDPID; // player ID being added
end;
 
DPMSG_ADDPLAYERTOGROUP = TDPMsg_AddPlayerOrGroup;
LPDPMSG_ADDPLAYERTOGROUP = PDPMsg_AddPlayerOrGroup;
(*
* DPMSG_DELETEPLAYERFROMGROUP
* System message generated when a player is being
* removed from a group
*)
PDPMsg_DeletePlayerFromGroup = ^TDPMsg_DeletePlayerFromGroup;
TDPMsg_DeletePlayerFromGroup = TDPMsg_AddPlayerToGroup;
 
{ TDPMsg_DeletePlayerFromGroup }
 
TDPMsg_DeletePlayerFromGroup = TDPMsg_AddPlayerOrGroup;
PDPMsg_DeletePlayerFromGroup = PDPMsg_AddPlayerOrGroup;
 
DPMSG_DELETEPLAYERFROMGROUP = TDPMsg_DeletePlayerFromGroup;
LPDPMSG_DELETEPLAYERFROMGROUP = PDPMsg_DeletePlayerFromGroup;
 
{ TDPMsg_AddGroupToGroup }
 
(*
* TDPMsg_AddGroupToGroup
* System message generated when a group is being added
* to a group.
*)
PDPMsg_AddGroupToGroup = ^TDPMsg_AddGroupToGroup;
TDPMsg_AddGroupToGroup = record
TDPMsg_AddGroupToGroup = packed record
dwType: DWORD; // Message type
dpIdParentGroup: TDPID; // group ID being added to
dpIdGroup: TDPID; // group ID being added
end;
 
DPMSG_ADDGROUPTOGROUP = TDPMsg_AddGroupToGroup;
LPDPMSG_ADDGROUPTOGROUP = PDPMsg_AddGroupToGroup;
 
{ TDPMsg_DeleteGroupFromGroup }
 
(*
* DPMsg_DeleteGroupFromGroup
* System message generated when a GROUP is being
* removed from a group
*)
PDPMsg_DeleteGroupFromGroup = ^TDPMsg_DeleteGroupFromGroup;
TDPMsg_DeleteGroupFromGroup = TDPMsg_AddGroupToGroup;
PDPMsg_DeleteGroupFromGroup = PDPMsg_AddGroupToGroup;
 
DPMSG_DELETEGROUPFROMGROUP = TDPMsg_DeleteGroupFromGroup;
LPDPMSG_DELETEGROUPFROMGROUP = PDPMsg_DeleteGroupFromGroup;
 
{ TDPMsg_SetPlayerOrGroupData }
 
(*
* DPMSG_SETPLAYERORGROUPDATA
* System message generated when remote data for a player or
* group has changed.
*)
PDPMsg_SetPlayerOrGroupData = ^TDPMsg_SetPlayerOrGroupData;
TDPMsg_SetPlayerOrGroupData = record
TDPMsg_SetPlayerOrGroupData = packed record
dwType: DWORD; // Message type
dwPlayerType: DWORD; // Is it a player or group
dpId: TDPID; // ID of player or group
DPID: TDPID; // ID of player or group
lpData: Pointer; // pointer to remote data
dwDataSize: DWORD; // size of remote data
end;
 
DPMSG_SETPLAYERORGROUPDATA = TDPMsg_SetPlayerOrGroupData;
LPDPMSG_SETPLAYERORGROUPDATA = PDPMsg_SetPlayerOrGroupData;
 
{ TDPMsg_SetPlayerOrGroupName }
 
(*
* DPMSG_SETPLAYERORGROUPNAME
* System message generated when the name of a player or
* group has changed.
*)
PDPMsg_SetPlayerOrGroupName = ^TDPMsg_SetPlayerOrGroupName;
TDPMsg_SetPlayerOrGroupName = record
TDPMsg_SetPlayerOrGroupName = packed record
dwType: DWORD; // Message type
dwPlayerType: DWORD; // Is it a player or group
dpId: TDPID; // ID of player or group
DPID: TDPID; // ID of player or group
dpnName: TDPName; // structure with new name info
end;
 
DPMSG_SETPLAYERORGROUPNAME = TDPMsg_SetPlayerOrGroupName;
LPDPMSG_SETPLAYERORGROUPNAME = PDPMsg_SetPlayerOrGroupName;
 
{ TDPMsg_SetSessionDesc }
 
(*
* DPMSG_SETSESSIONDESC
* System message generated when session desc has changed
*)
PDPMsg_SetSessionDesc = ^TDPMsg_SetSessionDesc;
TDPMsg_SetSessionDesc = record
TDPMsg_SetSessionDesc = packed record
dwType: DWORD; // Message type
dpDesc: TDPSessionDesc2; // Session desc
end;
 
DPMSG_SETSESSIONDESC = TDPMsg_SetSessionDesc;
LPDPMSG_SETSESSIONDESC = PDPMsg_SetSessionDesc;
 
{ TDPMsg_Host }
 
(*
* DPMSG_HOST
* System message generated when the host has migrated to this
* DirectPlay object.
*
*)
PDPMsg_Host = ^TDPMsg_Host;
TDPMsg_Host = TDPMsg_Generic;
 
DPMSG_HOST = TDPMsg_Host;
LPDPMSG_HOST = PDPMsg_Host;
 
{ TDPMsg_SessionLost }
 
(*
* DPMSG_SESSIONLOST
* System message generated when the connection to the session is lost.
*
*)
PDPMsg_SessionLost = ^TDPMsg_SessionLost;
TDPMsg_SessionLost = TDPMsg_Generic;
 
DPMSG_SESSIONLOST = TDPMsg_SessionLost;
LPDPMSG_SESSIONLOST = PDPMsg_SessionLost;
 
{ TDPMsg_SecureMessage }
 
(*
* DPMSG_SECUREMESSAGE
* System message generated when a player requests a secure send
*)
PDPMsg_SecureMessage = ^TDPMsg_SecureMessage;
TDPMsg_SecureMessage = record
TDPMsg_SecureMessage = packed record
dwType: DWORD; // Message Type
dwFlags: DWORD; // Signed/Encrypted
dpIdFrom: TDPID; // ID of Sending Player
10442,24 → 15829,23
dwDataSize: DWORD; // Size of player message
end;
 
DPMSG_SECUREMESSAGE = TDPMsg_SecureMessage;
LPDPMSG_SECUREMESSAGE = PDPMsg_SecureMessage;
 
{ TDPMsg_StartSession }
 
(*
* DPMSG_STARTSESSION
* System message containing all information required to
* start a new session
*)
PDPMsg_StartSession = ^TDPMsg_StartSession;
TDPMsg_StartSession = record
TDPMsg_StartSession = packed record
dwType: DWORD; // Message type
lpConn: PDPLConnection; // TDPLConnection structure
end;
 
DPMSG_STARTSESSION = TDPMsg_StartSession;
LPDPMSG_STARTSESSION = PDPMsg_StartSession;
 
{ TDPMsg_Chat }
 
(*
* DPMSG_CHAT
* System message containing a chat message
*)
PDPMsg_Chat = ^TDPMsg_Chat;
TDPMsg_Chat = record
TDPMsg_Chat = packed record
dwType: DWORD; // Message type
dwFlags: DWORD; // Message flags
idFromPlayer: TDPID; // ID of the Sending Player
10468,13 → 15854,12
lpChat: PDPChat; // Pointer to a structure containing the chat message
end;
 
DPMSG_CHAT = TDPMsg_Chat;
LPDPMSG_CHAT = PDPMsg_Chat;
 
{ TDPMsg_SetGroupOwner }
 
(*
* DPMSG_SETGROUPOWNER
* System message generated when the owner of a group has changed
*)
PDPMsg_SetGroupOwner = ^TDPMsg_SetGroupOwner;
TDPMsg_SetGroupOwner = record
TDPMsg_SetGroupOwner = packed record
dwType: DWORD; // Message type
idGroup: TDPID; // ID of the group
idNewOwner: TDPID; // ID of the player that is the new owner
10481,13 → 15866,15
idOldOwner: TDPID; // ID of the player that used to be the owner
end;
 
DPMSG_SETGROUPOWNER = TDPMsg_SetGroupOwner;
LPDPMSG_SETGROUPOWNER = PDPMsg_SetGroupOwner;
 
{ TDPMsg_SendComplete }
 
(*
* DPMSG_SENDCOMPLETE
* System message generated when finished with an Async Send message
*
* NOTE SENDPARMS has an overlay for DPMSG_SENDCOMPLETE, don't
* change this message w/o changing SENDPARMS.
*)
PDPMsg_SendComplete= ^TDPMsg_SendComplete;
TDPMsg_SendComplete = record
TDPMsg_SendComplete = packed record
dwType: DWORD; // Message type
idFrom: TDPID;
idTo: TDPID;
10500,84 → 15887,98
dwSendTime: DWORD;
end;
 
DPMSG_SENDCOMPLETE = TDPMsg_SendComplete;
LPDPMSG_SENDCOMPLETE = PDPMsg_SendComplete;
 
{ DIRECTPLAY ERRORS }
(****************************************************************************
*
* DIRECTPLAY ERRORS
*
* Errors are represented by negative values and cannot be combined.
*
****************************************************************************)
const
DP_OK = HResult(S_OK);
DPERR_ALREADYINITIALIZED = HResult($88770000 + 5);
DPERR_ACCESSDENIED = HResult($88770000 + 10);
DPERR_ACTIVEPLAYERS = HResult($88770000 + 20);
DPERR_BUFFERTOOSMALL = HResult($88770000 + 30);
DPERR_CANTADDPLAYER = HResult($88770000 + 40);
DPERR_CANTCREATEGROUP = HResult($88770000 + 50);
DPERR_CANTCREATEPLAYER = HResult($88770000 + 60);
DPERR_CANTCREATESESSION = HResult($88770000 + 70);
DPERR_CAPSNOTAVAILABLEYET = HResult($88770000 + 80);
DPERR_EXCEPTION = HResult($88770000 + 90);
DPERR_GENERIC = HResult(E_FAIL);
DPERR_INVALIDFLAGS = HResult($88770000 + 120);
DPERR_INVALIDOBJECT = HResult($88770000 + 130);
DPERR_INVALIDPARAM = HResult(E_INVALIDARG);
DPERR_INVALIDPARAMS = HResult(DPERR_INVALIDPARAM);
DPERR_INVALIDPLAYER = HResult($88770000 + 150);
DPERR_INVALIDGROUP = HResult($88770000 + 155);
DPERR_NOCAPS = HResult($88770000 + 160);
DPERR_NOCONNECTION = HResult($88770000 + 170);
DPERR_NOMEMORY = HResult(E_OUTOFMEMORY);
DPERR_OUTOFMEMORY = HResult(DPERR_NOMEMORY);
DPERR_NOMESSAGES = HResult($88770000 + 190);
DPERR_NONAMESERVERFOUND = HResult($88770000 + 200);
DPERR_NOPLAYERS = HResult($88770000 + 210);
DPERR_NOSESSIONS = HResult($88770000 + 220);
DPERR_PENDING = HResult(E_PENDING);
DPERR_SENDTOOBIG = HResult($88770000 + 230);
DPERR_TIMEOUT = HResult($88770000 + 240);
DPERR_UNAVAILABLE = HResult($88770000 + 250);
DPERR_UNSUPPORTED = HResult(E_NOTIMPL);
DPERR_BUSY = HResult($88770000 + 270);
DPERR_USERCANCEL = HResult($88770000 + 280);
DPERR_NOINTERFACE = HResult(E_NOINTERFACE);
DPERR_CANNOTCREATESERVER = HResult($88770000 + 290);
DPERR_PLAYERLOST = HResult($88770000 + 300);
DPERR_SESSIONLOST = HResult($88770000 + 310);
DPERR_UNINITIALIZED = HResult($88770000 + 320);
DPERR_NONEWPLAYERS = HResult($88770000 + 330);
DPERR_INVALIDPASSWORD = HResult($88770000 + 340);
DPERR_CONNECTING = HResult($88770000 + 350);
DPERR_CONNECTIONLOST = HResult($88770000 + 360);
DPERR_UNKNOWNMESSAGE = HResult($88770000 + 370);
DPERR_CANCELFAILED = HResult($88770000 + 380);
DPERR_INVALIDPRIORITY = HResult($88770000 + 390);
DPERR_NOTHANDLED = HResult($88770000 + 400);
DPERR_CANCELLED = HResult($88770000 + 410);
DPERR_ABORTED = HResult($88770000 + 420);
DPERR_BUFFERTOOLARGE = HResult($88770000 + 1000);
DPERR_CANTCREATEPROCESS = HResult($88770000 + 1010);
DPERR_APPNOTSTARTED = HResult($88770000 + 1020);
DPERR_INVALIDINTERFACE = HResult($88770000 + 1030);
DPERR_NOSERVICEPROVIDER = HResult($88770000 + 1040);
DPERR_UNKNOWNAPPLICATION = HResult($88770000 + 1050);
DPERR_NOTLOBBIED = HResult($88770000 + 1070);
DPERR_SERVICEPROVIDERLOADED = HResult($88770000 + 1080);
DPERR_ALREADYREGISTERED = HResult($88770000 + 1090);
DPERR_NOTREGISTERED = HResult($88770000 + 1100);
MAKE_DPHRESULT = HResult($88770000);
 
{ Security related errors }
DP_OK = S_OK;
DPERR_ALREADYINITIALIZED = MAKE_DPHRESULT + 5;
DPERR_ACCESSDENIED = MAKE_DPHRESULT + 10;
DPERR_ACTIVEPLAYERS = MAKE_DPHRESULT + 20;
DPERR_BUFFERTOOSMALL = MAKE_DPHRESULT + 30;
DPERR_CANTADDPLAYER = MAKE_DPHRESULT + 40;
DPERR_CANTCREATEGROUP = MAKE_DPHRESULT + 50;
DPERR_CANTCREATEPLAYER = MAKE_DPHRESULT + 60;
DPERR_CANTCREATESESSION = MAKE_DPHRESULT + 70;
DPERR_CAPSNOTAVAILABLEYET = MAKE_DPHRESULT + 80;
DPERR_EXCEPTION = MAKE_DPHRESULT + 90;
DPERR_GENERIC = E_FAIL;
DPERR_INVALIDFLAGS = MAKE_DPHRESULT + 120;
DPERR_INVALIDOBJECT = MAKE_DPHRESULT + 130;
DPERR_INVALIDPARAM = E_INVALIDARG;
DPERR_INVALIDPARAMS = DPERR_INVALIDPARAM;
DPERR_INVALIDPLAYER = MAKE_DPHRESULT + 150;
DPERR_INVALIDGROUP = MAKE_DPHRESULT + 155;
DPERR_NOCAPS = MAKE_DPHRESULT + 160;
DPERR_NOCONNECTION = MAKE_DPHRESULT + 170;
DPERR_NOMEMORY = E_OUTOFMEMORY;
DPERR_OUTOFMEMORY = DPERR_NOMEMORY;
DPERR_NOMESSAGES = MAKE_DPHRESULT + 190;
DPERR_NONAMESERVERFOUND = MAKE_DPHRESULT + 200;
DPERR_NOPLAYERS = MAKE_DPHRESULT + 210;
DPERR_NOSESSIONS = MAKE_DPHRESULT + 220;
DPERR_PENDING = E_PENDING;
DPERR_SENDTOOBIG = MAKE_DPHRESULT + 230;
DPERR_TIMEOUT = MAKE_DPHRESULT + 240;
DPERR_UNAVAILABLE = MAKE_DPHRESULT + 250;
DPERR_UNSUPPORTED = E_NOTIMPL;
DPERR_BUSY = MAKE_DPHRESULT + 270;
DPERR_USERCANCEL = MAKE_DPHRESULT + 280;
DPERR_NOINTERFACE = E_NOINTERFACE;
DPERR_CANNOTCREATESERVER = MAKE_DPHRESULT + 290;
DPERR_PLAYERLOST = MAKE_DPHRESULT + 300;
DPERR_SESSIONLOST = MAKE_DPHRESULT + 310;
DPERR_UNINITIALIZED = MAKE_DPHRESULT + 320;
DPERR_NONEWPLAYERS = MAKE_DPHRESULT + 330;
DPERR_INVALIDPASSWORD = MAKE_DPHRESULT + 340;
DPERR_CONNECTING = MAKE_DPHRESULT + 350;
DPERR_CONNECTIONLOST = MAKE_DPHRESULT + 360;
DPERR_UNKNOWNMESSAGE = MAKE_DPHRESULT + 370;
DPERR_CANCELFAILED = MAKE_DPHRESULT + 380;
DPERR_INVALIDPRIORITY = MAKE_DPHRESULT + 390;
DPERR_NOTHANDLED = MAKE_DPHRESULT + 400;
DPERR_CANCELLED = MAKE_DPHRESULT + 410;
DPERR_ABORTED = MAKE_DPHRESULT + 420;
 
DPERR_AUTHENTICATIONFAILED = HResult($88770000 + 2000);
DPERR_CANTLOADSSPI = HResult($88770000 + 2010);
DPERR_ENCRYPTIONFAILED = HResult($88770000 + 2020);
DPERR_SIGNFAILED = HResult($88770000 + 2030);
DPERR_CANTLOADSECURITYPACKAGE = HResult($88770000 + 2040);
DPERR_ENCRYPTIONNOTSUPPORTED = HResult($88770000 + 2050);
DPERR_CANTLOADCAPI = HResult($88770000 + 2060);
DPERR_NOTLOGGEDIN = HResult($88770000 + 2070);
DPERR_LOGONDENIED = HResult($88770000 + 2080);
 
// define this to ignore obsolete interfaces and constants
DPERR_BUFFERTOOLARGE = MAKE_DPHRESULT + 1000;
DPERR_CANTCREATEPROCESS = MAKE_DPHRESULT + 1010;
DPERR_APPNOTSTARTED = MAKE_DPHRESULT + 1020;
DPERR_INVALIDINTERFACE = MAKE_DPHRESULT + 1030;
DPERR_NOSERVICEPROVIDER = MAKE_DPHRESULT + 1040;
DPERR_UNKNOWNAPPLICATION = MAKE_DPHRESULT + 1050;
DPERR_NOTLOBBIED = MAKE_DPHRESULT + 1070;
DPERR_SERVICEPROVIDERLOADED = MAKE_DPHRESULT + 1080;
DPERR_ALREADYREGISTERED = MAKE_DPHRESULT + 1090;
DPERR_NOTREGISTERED = MAKE_DPHRESULT + 1100;
 
//
// Security related errors
//
DPERR_AUTHENTICATIONFAILED = MAKE_DPHRESULT + 2000;
DPERR_CANTLOADSSPI = MAKE_DPHRESULT + 2010;
DPERR_ENCRYPTIONFAILED = MAKE_DPHRESULT + 2020;
DPERR_SIGNFAILED = MAKE_DPHRESULT + 2030;
DPERR_CANTLOADSECURITYPACKAGE = MAKE_DPHRESULT + 2040;
DPERR_ENCRYPTIONNOTSUPPORTED = MAKE_DPHRESULT + 2050;
DPERR_CANTLOADCAPI = MAKE_DPHRESULT + 2060;
DPERR_NOTLOGGEDIN = MAKE_DPHRESULT + 2070;
DPERR_LOGONDENIED = MAKE_DPHRESULT + 2080;
 
(****************************************************************************
*
* dplay 1.0 obsolete structures + interfaces
* Included for compatibility only. New apps should
* use IDirectPlay2
*
****************************************************************************)
 
DPOPEN_OPENSESSION = DPOPEN_JOIN;
DPOPEN_CREATESESSION = DPOPEN_CREATE;
 
10605,71 → 16006,41
DPSYS_DELETEPLAYERFROMGRP = $0021;
DPSYS_CONNECT = $484b;
 
{ TDPMsg_AddPlayer }
 
type
PDPMsg_AddPlayer = ^TDPMsg_AddPlayer;
TDPMsg_AddPlayer = record
TDPMsg_AddPlayer = packed record
dwType: DWORD;
dwPlayerType: DWORD;
dpId: TDPID;
DPID: TDPID;
szLongName: array[0..DPLONGNAMELEN-1] of Char;
szShortName: array[0..DPSHORTNAMELEN-1] of Char;
dwCurrentPlayers: DWORD;
end;
 
DPMSG_ADDPLAYER = TDPMsg_AddPlayer;
LPDPMSG_ADDPLAYER = PDPMsg_AddPlayer;
 
{ TDPMsg_AddGroup }
 
PDPMsg_AddGroup = ^TDPMsg_AddGroup;
TDPMsg_AddGroup = TDPMsg_AddPlayer;
 
DPMSG_ADDGROUP = TDPMsg_AddGroup;
LPDPMSG_ADDGROUP = PDPMsg_AddGroup;
 
{ TDPMsg_GroupAdd }
 
PDPMsg_GroupAdd = ^TDPMsg_GroupAdd;
TDPMsg_GroupAdd = record
TDPMsg_GroupAdd = packed record
dwType: DWORD;
dpIdGroup: TDPID;
dpIdPlayer: TDPID;
end;
 
DPMSG_GROUPADD = TDPMsg_GroupAdd;
LPDPMSG_GROUPADD = PDPMsg_GroupAdd;
 
{ TDPMsg_GroupDelete }
 
PDPMsg_GroupDelete = ^TDPMsg_GroupDelete;
TDPMsg_GroupDelete = TDPMsg_GroupAdd;
 
DPMSG_GROUPDELETE = TDPMsg_GroupDelete;
LPDPMSG_GROUPDELETE = PDPMsg_GroupDelete;
 
{ TDPMsg_DeletePlayer }
 
PDPMsg_DeletePlayer = ^TDPMsg_DeletePlayer;
TDPMsg_DeletePlayer = record
TDPMsg_DeletePlayer = packed record
dwType: DWORD;
dpId: TDPID;
DPID: TDPID;
end;
 
DPMSG_DELETEPLAYER = TDPMsg_DeletePlayer;
LPDPMSG_DELETEPLAYER = PDPMsg_DeletePlayer;
TDPEnumPlayersCallback = function(dpId: TDPID; lpFriendlyName: PChar;
lpFormalName: PChar; dwFlags: DWORD; lpContext: Pointer) : BOOL; stdcall;
 
{ TDPEnumPlayersCallback }
 
TDPEnumPlayersCallback = function(dpId: TDPID; lpFriendlyName: LPSTR;
lpFormalName: LPSTR; dwFlags: DWORD; lpContext: Pointer): BOOL; stdcall;
LPDPENUMPLAYERSCALLBACK = TDPEnumPlayersCallback;
 
{ TDPSessionDesc }
 
PDPSessionDesc = ^TDPSessionDesc;
TDPSessionDesc = record
TDPSessionDesc = packed record
dwSize: DWORD;
guidSession: TGUID;
dwSession: DWORD;
10676,10 → 16047,10
dwMaxPlayers: DWORD;
dwCurrentPlayers: DWORD;
dwFlags: DWORD;
szSessionName: array[0..DPSESSIONNAMELEN-1] of char;
szUserField: array[0..DPUSERRESERVED-1] of char;
szSessionName: Array [0..DPSESSIONNAMELEN-1] of char;
szUserField: Array [0..DPUSERRESERVED-1] of char;
dwReserved1: DWORD;
szPassword: array[0..DPPASSWORDLEN-1] of char;
szPassword: Array [0..DPPASSWORDLEN-1] of char;
dwReserved2: DWORD;
dwUser1: DWORD;
dwUser2: DWORD;
10687,57 → 16058,68
dwUser4: DWORD;
end;
 
DPSESSIONDESC = TDPSessionDesc;
LPDPSESSIONDESC = PDPSessionDesc;
 
{ TDPEnumSessionsCallback }
 
TDPEnumSessionsCallback = function(var lpDPSessionDesc: TDPSessionDesc;
TDPEnumSessionsCallback = function(const lpDPSessionDesc: TDPSessionDesc;
lpContext: Pointer; var lpdwTimeOut: DWORD; dwFlags: DWORD): BOOL; stdcall;
LPDPENUMSESSIONSCALLBACK = TDPEnumSessionsCallback;
 
type
IDirectPlay = interface(IUnknown)
// IDirectPlay methods
['{5454e9a0-db65-11ce-921c-00aa006c4972}']
(*** IDirectPlay methods ***)
function AddPlayerToGroup(pidGroup: TDPID; pidPlayer: TDPID): HResult; stdcall;
function Close: HResult; stdcall;
function CreatePlayer(var lppidID: TDPID; lpPlayerFriendlyName: LPSTR;
lpPlayerFormalName: LPSTR; lpEvent: PHandle): HResult; stdcall;
function CreateGroup(var lppidID: TDPID; lpGroupFriendlyName: LPSTR;
lpGroupFormalName: LPSTR): HResult; stdcall;
function CreatePlayer(out lppidID: TDPID; lpPlayerFriendlyName: PChar;
lpPlayerFormalName: PChar; lpEvent: PHandle) : HResult; stdcall;
function CreateGroup(out lppidID: TDPID; lpGroupFriendlyName: PChar;
lpGroupFormalName: PChar) : HResult; stdcall;
function DeletePlayerFromGroup(pidGroup: TDPID; pidPlayer: TDPID): HResult; stdcall;
function DestroyPlayer(pidID: TDPID): HResult; stdcall;
function DestroyGroup(pidID: TDPID): HResult; stdcall;
function EnableNewPlayers(bEnable: BOOL): HResult; stdcall;
function EnumGroupPlayers(pidGroupPID: TDPID; lpEnumPlayersCallback:
LPDPENUMPLAYERSCALLBACK; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
TDPEnumPlayersCallback; lpContext: Pointer; dwFlags: DWORD) : HResult; stdcall;
function EnumGroups(dwSessionID: DWORD; lpEnumPlayersCallback:
LPDPENUMPLAYERSCALLBACK; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
TDPEnumPlayersCallback; lpContext: Pointer; dwFlags: DWORD) : HResult; stdcall;
function EnumPlayers(dwSessionId: DWORD; lpEnumPlayersCallback:
LPDPENUMPLAYERSCALLBACK; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function EnumSessions(const lpSDesc: TDPSessionDesc; dwTimeout: DWORD;
lpEnumSessionsCallback: TDPEnumPlayersCallback; lpContext: Pointer;
TDPEnumPlayersCallback; lpContext: Pointer; dwFlags: DWORD) : HResult; stdcall;
function EnumSessions(var lpSDesc: TDPSessionDesc; dwTimeout: DWORD;
lpEnumSessionsCallback: TDPEnumSessionsCallback; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function GetCaps(const lpDPCaps: TDPCaps): HResult; stdcall;
function GetCaps(var lpDPCaps: TDPCaps) : HResult; stdcall;
function GetMessageCount(pidID: TDPID; var lpdwCount: DWORD): HResult; stdcall;
function GetPlayerCaps(pidID: TDPID; const lpDPPlayerCaps: TDPCaps): HResult; stdcall;
function GetPlayerName(pidID: TDPID; lpPlayerFriendlyName: LPSTR;
var lpdwFriendlyNameLength: DWORD; lpPlayerFormalName: LPSTR;
function GetPlayerCaps(pidID: TDPID; var lpDPPlayerCaps: TDPCaps) : HResult; stdcall;
function GetPlayerName(pidID: TDPID; lpPlayerFriendlyName: PChar;
var lpdwFriendlyNameLength: DWORD; lpPlayerFormalName: PChar;
var lpdwFormalNameLength: DWORD): HResult; stdcall;
function Initialize(const lpGUID: TGUID): HResult; stdcall;
function Open(const lpSDesc: TDPSessionDesc): HResult; stdcall;
function Open(var lpSDesc: TDPSessionDesc) : HResult; stdcall;
function Receive(var lppidFrom, lppidTo: TDPID; dwFlags: DWORD;
var lpvBuffer; var lpdwSize: DWORD): HResult; stdcall;
function SaveSession(lpSessionName: LPSTR): HResult; stdcall;
function SaveSession(lpSessionName: PChar) : HResult; stdcall;
function Send(pidFrom: TDPID; pidTo: TDPID; dwFlags: DWORD;
const lpvBuffer; dwBuffSize: DWORD): HResult; stdcall;
function SetPlayerName(pidID: TDPID; lpPlayerFriendlyName: LPSTR;
lpPlayerFormalName: LPSTR): HResult; stdcall;
var lpvBuffer; dwBuffSize: DWORD) : HResult; stdcall;
function SetPlayerName(pidID: TDPID; lpPlayerFriendlyName: PChar;
lpPlayerFormalName: PChar) : HResult; stdcall;
end;
 
{ API's (cont.) }
(*
* GUIDS used by DirectPlay objects
*)
IID_IDirectPlay2W = IDirectPlay2W;
IID_IDirectPlay2A = IDirectPlay2A;
IID_IDirectPlay2 = IDirectPlay2;
 
function DirectPlayCreate(const lpGUID: TGUID; out lplpDP: IDirectPlay;
IID_IDirectPlay3W = IDirectPlay3W;
IID_IDirectPlay3A = IDirectPlay3A;
IID_IDirectPlay3 = IDirectPlay3;
 
IID_IDirectPlay4W = IDirectPlay4W;
IID_IDirectPlay4A = IDirectPlay4A;
IID_IDirectPlay4 = IDirectPlay4;
 
IID_IDirectPlay = IDirectPlay;
 
var
DirectPlayCreate : function (lpGUID: PGUID; out lplpDP: IDirectPlay;
pUnk: IUnknown): HResult; stdcall;
 
(*==========================================================================;
10746,238 → 16128,345
*
* File: dplobby.h
* Content: DirectPlayLobby include file
*
***************************************************************************)
 
{ GUIDS used by DirectPlay objects }
(*
* GUIDS used by DirectPlay objects
*)
 
const
CLSID_DirectPlayLobby: TGUID = '{2FE8F810-B2A5-11D0-A787-0000F803ABFC}';
(* {2FE8F810-B2A5-11d0-A787-0000F803ABFC} *)
CLSID_DirectPlayLobby: TGUID =
(D1:$2fe8f810;D2:$b2a5;D3:$11d0;D4:($a7,$87,$00,$00,$f8,$3,$ab,$fc));
 
IID_IDirectPlayLobby: TGUID = '{AF465C71-9588-11cf-A020-00AA006157AC}';
IID_IDirectPlayLobbyA: TGUID = '{26C66A70-B367-11cf-A024-00AA006157AC}';
IID_IDirectPlayLobby2: TGUID = '{0194C220-A303-11d0-9C4F-00A0C905425E}';
IID_IDirectPlayLobby2A: TGUID = '{1BB4AF80-A303-11d0-9C4F-00A0C905425E}';
IID_IDirectPlayLobby3: TGUID = '{2DB72490-652C-11d1-A7A8-0000F803ABFC}';
IID_IDirectPlayLobby3A: TGUID = '{2DB72491-652C-11d1-A7A8-0000F803ABFC}';
(****************************************************************************
*
* IDirectPlayLobby Structures
*
* Various structures used to invoke DirectPlayLobby.
*
****************************************************************************)
 
{ IDirectPlayLobby Structures }
 
{ TDPLAppInfo }
 
type
(*
* TDPLAppInfo
* Used to hold information about a registered DirectPlay
* application
*)
PDPLAppInfo = ^TDPLAppInfo;
TDPLAppInfo = record
TDPLAppInfo = packed record
dwSize: DWORD; // Size of this structure
guidApplication: TGUID; // GUID of the Application
case Integer of // Pointer to the Application Name
0: (lpszAppNameA: LPSTR);
1: (lpszAppName: LPWSTR);
0: (lpszAppName: PCharAW);
1: (lpszAppNameW: PWideChar);
3: (lpszAppNameA: PChar);
end;
 
DPLAPPINFO = TDPLAppInfo;
LPDPLAPPINFO = PDPLAppInfo;
 
{ TDPCompoundAddressElement }
 
(*
* TDPCompoundAddressElement
*
* An array of these is passed to CreateCompoundAddresses()
*)
PDPCompoundAddressElement = ^TDPCompoundAddressElement;
TDPCompoundAddressElement = record
TDPCompoundAddressElement = packed record
guidDataType: TGUID;
dwDataSize: DWORD;
lpData: Pointer;
end;
 
DPCOMPOUNDADDRESSELEMENT = TDPCompoundAddressElement;
LPDPCOMPOUNDADDRESSELEMENT = PDPCompoundAddressElement;
 
{ TDPApplicationDesc }
 
(*
* TDPApplicationDesc
* Used to register a DirectPlay application
*)
PDPApplicationDesc = ^TDPApplicationDesc;
TDPApplicationDesc = record
TDPApplicationDesc = packed record
dwSize: DWORD;
dwFlags: DWORD;
case Integer of
0: (
lpszApplicationNameA: LPSTR; // ANSI
case integer of
0 : (lpszApplicationName: PCharAW;
guidApplication: TGUID;
lpszFilenameA: LPSTR;
lpszCommandLineA: LPSTR;
lpszPathA: LPSTR;
lpszCurrentDirectoryA: LPSTR;
lpszDescriptionA: LPSTR;
lpszDescriptionW: LPWSTR;
);
1: (
lpszApplicationName: LPWSTR; // Unicode
_union1b: TGUID;
lpszFilename: LPWSTR;
lpszCommandLine: LPWSTR;
lpszPath: LPWSTR;
lpszCurrentDirectory: LPWSTR;
_union1g: LPWSTR;
);
lpszFilename: PCharAW;
lpszCommandLine: PCharAW;
lpszPath: PCharAW;
lpszCurrentDirectory: PCharAW;
lpszDescriptionA: PAnsiChar;
lpszDescriptionW: PWideChar);
1 : (lpszApplicationNameA: PAnsiChar;
filler1: TGUID;
lpszFilenameA: PAnsiChar;
lpszCommandLineA: PAnsiChar;
lpszPathA: PAnsiChar;
lpszCurrentDirectoryA: PAnsiChar);
2 : (lpszApplicationNameW: PWideChar;
filler2: TGUID;
lpszFilenameW: PWideChar;
lpszCommandLineW: PWideChar;
lpszPathW: PWideChar;
lpszCurrentDirectoryW: PWideChar);
end;
 
DPAPPLICATIONDESC = TDPApplicationDesc;
LPDPAPPLICATIONDESC = PDPApplicationDesc;
 
{ TDPApplicationDesc2 }
 
(*
* TDPApplicationDesc2
* Used to register a DirectPlay application
*)
PDPApplicationDesc2 = ^TDPApplicationDesc2;
TDPApplicationDesc2 = record
TDPApplicationDesc2 = packed record
dwSize: DWORD;
dwFlags: DWORD;
case Integer of
0: (
lpszApplicationNameA: LPSTR; // ANSI
case integer of
0 : (lpszApplicationName: PCharAW;
guidApplication: TGUID;
lpszFilenameA: LPSTR;
lpszCommandLineA: LPSTR;
lpszPathA: LPSTR;
lpszCurrentDirectoryA: LPSTR;
lpszDescriptionA: LPSTR;
lpszDescriptionW: LPWSTR;
lpszAppLauncherNameA: LPSTR;
);
1: (
lpszApplicationName: LPWSTR; // Unicode
_union1b: TGUID;
lpszFilename: LPWSTR;
lpszCommandLine: LPWSTR;
lpszPath: LPWSTR;
lpszCurrentDirectory: LPWSTR;
_union1g: LPWSTR;
lpszAppLauncherName: LPWSTR;
);
lpszFilename: PCharAW;
lpszCommandLine: PCharAW;
lpszPath: PCharAW;
lpszCurrentDirectory: PCharAW;
lpszDescriptionA: PAnsiChar;
lpszDescriptionW: PWideChar;
lpszAppLauncherName: PCharAW);
1 : (lpszApplicationNameA: PAnsiChar;
filler1: TGUID;
lpszFilenameA: PAnsiChar;
lpszCommandLineA: PAnsiChar;
lpszPathA: PAnsiChar;
lpszCurrentDirectoryA: PAnsiChar;
filler3: PChar;
filler4: PChar;
lpszAppLauncherNameA: PAnsiChar);
2 : (lpszApplicationNameW: PWideChar;
filler2: TGUID;
lpszFilenameW: PWideChar;
lpszCommandLineW: PWideChar;
lpszPathW: PWideChar;
lpszCurrentDirectoryW: PWideChar;
filler5: PChar;
filler6: PChar;
lpszAppLauncherNameW: PWideChar);
end;
 
DPAPPLICATIONDESC2 = TDPApplicationDesc2;
LPDPAPPLICATIONDESC2 = PDPApplicationDesc2;
 
{ Enumeration Method Callback Prototypes }
(****************************************************************************
*
* Enumeration Method Callback Prototypes
*
****************************************************************************)
 
TDPEnumAddressCallback = function(const guidDataType: TGUID;
(*
* Callback for EnumAddress()
*)
TDPEnumAdressCallback = function(const guidDataType: TGUID;
dwDataSize: DWORD; lpData: Pointer; lpContext: Pointer): BOOL; stdcall;
LPDPENUMADDRESSCALLBACK = TDPEnumAddressCallback;
 
(*
* Callback for EnumAddressTypes()
*)
TDPLEnumAddressTypesCallback = function(const guidDataType: TGUID;
lpContext: Pointer; dwFlags: DWORD): BOOL; stdcall;
LPDPLENUMADDRESSTYPESCALLBACK = TDPLEnumAddressTypesCallback;
 
(*
* Callback for EnumLocalApplications()
*)
TDPLEnumLocalApplicationsCallback = function(const lpAppInfo: TDPLAppInfo;
lpContext: Pointer; dwFlags: DWORD): BOOL; stdcall;
LPDPLENUMLOCALAPPLICATIONSCALLBACK = TDPLEnumLocalApplicationsCallback;
 
{ IDirectPlayLobby (and IDirectPlayLobbyA) Interface }
(****************************************************************************
*
* IDirectPlayLobby (and IDirectPlayLobbyA) Interface
*
****************************************************************************)
 
type
IDirectPlayLobby = interface(IUnknown)
['{AF465C71-9588-11CF-A020-00AA006157AC}']
// IDirectPlayLobby methods
IDirectPlayLobbyAW = interface (IUnknown)
(*** IDirectPlayLobby methods ***)
function Connect(dwFlags: DWORD; out lplpDP: IDirectPlay2;
pUnk: IUnknown): HResult; stdcall;
function CreateAddress(const guidSP, guidDataType: TGUID; const lpData;
function CreateAddress(const guidSP, guidDataType: TGUID; var lpData;
dwDataSize: DWORD; var lpAddress; var lpdwAddressSize: DWORD): HResult; stdcall;
function EnumAddress(lpEnumAddressCallback: TDPEnumAddressCallback;
const lpAddress; dwAddressSize: DWORD; lpContext : Pointer): HResult; stdcall;
function EnumAddress(lpEnumAddressCallback: TDPEnumAdressCallback;
var lpAddress; dwAddressSize: DWORD; lpContext : Pointer) : HResult; stdcall;
function EnumAddressTypes(lpEnumAddressTypeCallback:
TDPLEnumAddressTypesCallback; const guidSP: TGUID; lpContext: Pointer;
dwFlags: DWORD): HResult; stdcall;
function EnumLocalApplications(lpEnumLocalAppCallback:
TDPLEnumLocalApplicationsCallback; lpContext: Pointer; dwFlags: DWORD): HResult; stdcall;
function GetConnectionSettings(dwAppID: DWORD; var lpData: TDPLConnection;
function EnumLocalApplications(lpEnumLocalAppCallback: TDPLEnumLocalApplicationsCallback;
lpContext: Pointer; dwFlags: DWORD) : HResult; stdcall;
function GetConnectionSettings(dwAppID: DWORD; lpData: PDPLConnection;
var lpdwDataSize: DWORD): HResult; stdcall;
function ReceiveLobbyMessage(dwFlags: DWORD; dwAppID: DWORD;
var lpdwMessageFlags: DWORD; var lpData; var lpdwDataSize: DWORD): HResult; stdcall;
var lpdwMessageFlags: DWORD; lpData: Pointer; var lpdwDataSize: DWORD) : HResult; stdcall;
function RunApplication(dwFlags: DWORD; var lpdwAppId: DWORD;
const lpConn: TDPLConnection; hReceiveEvent: THandle): HResult; stdcall;
function SendLobbyMessage(dwFlags: DWORD; dwAppID: DWORD; const lpData;
dwDataSize: DWORD): HResult; stdcall;
function SetConnectionSettings(dwFlags: DWORD; dwAppID: DWORD;
const lpConn: TDPLConnection): HResult; stdcall;
var lpConn: TDPLConnection) : HResult; stdcall;
function SetLobbyMessageEvent(dwFlags: DWORD; dwAppID: DWORD;
hReceiveEvent: THandle): HResult; stdcall;
end;
 
IDirectPlayLobbyA = interface(IDirectPlayLobby)
['{26C66A70-B367-11CF-A024-00AA006157AC}']
IDirectPlayLobbyW = interface (IDirectPlayLobbyAW)
['{AF465C71-9588-11CF-A020-00AA006157AC}']
end;
IDirectPlayLobbyA = interface (IDirectPlayLobbyAW)
['{26C66A70-B367-11cf-A024-00AA006157AC}']
end;
 
{ IDirectPlayLobby2 (and IDirectPlayLobby2A) Interface }
{$IFDEF UNICODE}
IDirectPlayLobby = IDirectPlayLobbyW;
{$ELSE}
IDirectPlayLobby = IDirectPlayLobbyA;
{$ENDIF}
 
IDirectPlayLobby2 = interface(IDirectPlayLobby)
['{0194C220-A303-11D0-9C4F-00A0C905425E}']
// IDirectPlayLobby2 methods
 
(****************************************************************************
*
* IDirectPlayLobby2 (and IDirectPlayLobby2A) Interface
*
****************************************************************************)
 
IDirectPlayLobby2AW = interface(IDirectPlayLobbyAW)
(*** IDirectPlayLobby2 methods ***)
function CreateCompoundAddress(const lpElements: TDPCompoundAddressElement;
dwElementCount: DWORD; var lpAddress; var lpdwAddressSize: DWORD): HResult; stdcall;
dwElementCount: DWORD; lpAddress: Pointer; var lpdwAddressSize: DWORD) : HResult; stdcall;
end;
 
IDirectPlayLobby2A = interface(IDirectPlayLobby2)
['{1BB4AF80-A303-11D0-9C4F-00A0C905425E}']
IDirectPlayLobby2W = interface (IDirectPlayLobby2AW)
['{0194C220-A303-11D0-9C4F-00A0C905425E}']
end;
IDirectPlayLobby2A = interface (IDirectPlayLobby2AW)
['{1BB4AF80-A303-11d0-9C4F-00A0C905425E}']
end;
 
{ IDirectPlayLobby3 (and IDirectPlayLobby3A) Interface }
{$IFDEF UNICODE}
IDirectPlayLobby2 = IDirectPlayLobby2W;
{$ELSE}
IDirectPlayLobby2 = IDirectPlayLobby2A;
{$ENDIF}
 
IDirectPlayLobby3 = interface(IDirectPlayLobby2)
['{2DB72490-652C-11d1-A7A8-0000F803ABFC}']
// IDirectPlayLobby3 Methods
function ConnectEx(dwFlags: DWORD; const riid: TGUID; var lplpDP: Pointer;
pUnk: IUnknown): HResult; stdcall;
function RegisterApplication(dwFlags: DWORD; const lpAppDesc: TDPApplicationDesc): HResult; stdcall;
function UnRegisterApplication(dwFlags: DWORD; const guidApplication: TGUID): HResult; stdcall;
(****************************************************************************
*
* IDirectPlayLobby3 (and IDirectPlayLobby3A) Interface
*
****************************************************************************)
 
IDirectPlayLobby3AW = interface(IDirectPlayLobby2AW)
(*** IDirectPlayLobby3 methods ***)
function ConnectEx(dwFlags: DWORD; const riid: TGUID;
out lplpDP; pUnk: IUnknown) : HResult; stdcall;
function RegisterApplication(dwFlags: DWORD;
var lpAppDesc: TDPApplicationDesc) : HResult; stdcall;
function UnregisterApplication(dwFlags: DWORD;
const guidApplication: TGUID) : HResult; stdcall;
function WaitForConnectionSettings(dwFlags: DWORD): HResult; stdcall;
end;
 
IDirectPlayLobby3A = interface(IDirectPlayLobby3)
IDirectPlayLobby3W = interface (IDirectPlayLobby3AW)
['{2DB72490-652C-11d1-A7A8-0000F803ABFC}']
end;
IDirectPlayLobby3A = interface (IDirectPlayLobby3AW)
['{2DB72491-652C-11d1-A7A8-0000F803ABFC}']
end;
 
{ DirectPlayLobby API Prototypes }
{$IFDEF UNICODE}
IDirectPlayLobby3 = IDirectPlayLobby3W;
{$ELSE}
IDirectPlayLobby3 = IDirectPlayLobby3A;
{$ENDIF}
 
function DirectPlayLobbyCreateW(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobby;
lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HResult; stdcall;
function DirectPlayLobbyCreateA(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobbyA;
lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HResult; stdcall;
function DirectPlayLobbyCreate(const lpguidSP: TGUID; out lplpDPL: IDirectPlayLobbyA;
lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD): HResult; stdcall;
IID_IDirectPlayLobbyW = IDirectPlayLobbyW;
IID_IDirectPlayLobbyA = IDirectPlayLobbyA;
IID_IDirectPlayLobby = IDirectPlayLobby;
 
{ DirectPlayLobby Flags }
IID_IDirectPlayLobby2W = IDirectPlayLobby2W;
IID_IDirectPlayLobby2A = IDirectPlayLobby2A;
IID_IDirectPlayLobby2 = IDirectPlayLobby2;
 
IID_IDirectPlayLobby3W = IDirectPlayLobby3W;
IID_IDirectPlayLobby3A = IDirectPlayLobby3A;
IID_IDirectPlayLobby3 = IDirectPlayLobby3;
 
(****************************************************************************
*
* DirectPlayLobby API Prototypes
*
****************************************************************************)
 
var
DirectPlayLobbyCreateW : function (lpguidSP: PGUID; out lplpDPL:
IDirectPlayLobbyW; lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD) : HResult; stdcall;
DirectPlayLobbyCreateA : function (lpguidSP: PGUID; out lplpDPL:
IDirectPlayLobbyA; lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD) : HResult; stdcall;
DirectPlayLobbyCreate : function (lpguidSP: PGUID; out lplpDPL:
IDirectPlayLobby; lpUnk: IUnknown; lpData: Pointer; dwDataSize: DWORD) : HResult; stdcall;
 
const
(****************************************************************************
*
* DirectPlayLobby Flags
*
****************************************************************************)
 
(*
* This flag is used by IDirectPlayLobby.WaitForConnectionSettings to
* cancel a current wait that is in progress.
*)
DPLWAIT_CANCEL = $00000001;
 
(*
* This is a message flag used by ReceiveLobbyMessage. It can be
* returned in the dwMessageFlags parameter to indicate a message from
* the system.
*)
DPLMSG_SYSTEM = $00000001;
 
(*
* This is a message flag used by ReceiveLobbyMessage and SendLobbyMessage.
* It is used to indicate that the message is a standard lobby message.
* TDPLMsg_SetProperty, TDPLMsg_SetPropertyResponse, TDPLMsg_GetProperty,
* TDPLMsg_GetPropertyResponse
*)
DPLMSG_STANDARD = $00000002;
 
type
(****************************************************************************
*
* DirectPlayLobby messages and message data structures
*
* All system messages have a dwMessageFlags value of DPLMSG_SYSTEM returned
* from a call to ReceiveLobbyMessage.
*
* All standard messages have a dwMessageFlags value of DPLMSG_STANDARD returned
* from a call to ReceiveLobbyMessage.
*
****************************************************************************)
 
{ DirectPlayLobby messages and message data structures }
 
{ TDPLMsg_Generic }
 
type
(*
* TDPLMsg_Generic
* Generic message structure used to identify the message type.
*)
PDPLMsg_Generic = ^TDPLMsg_Generic;
TDPLMsg_Generic = record
TDPLMsg_Generic = packed record
dwType: DWORD; // Message type
end;
 
DPLMSG_GENERIC = TDPLMsg_Generic;
LPDPLMSG_GENERIC = PDPLMsg_Generic;
 
{ TDPLMsg_SystemMessage }
 
(*
* TDPLMsg_SystemMessage
* Generic message format for all system messages --
* DPLSYS_CONNECTIONSETTINGSREAD, DPLSYS_DPLYCONNECTSUCCEEDED,
* DPLSYS_DPLAYCONNECTFAILED, DPLSYS_APPTERMINATED, DPLSYS_NEWCONNECTIONSETTINGS
*)
PDPLMsg_SystemMessage = ^TDPLMsg_SystemMessage;
TDPLMsg_SystemMessage = record
TDPLMsg_SystemMessage = packed record
dwType: DWORD; // Message type
guidInstance: TGUID; // Instance GUID of the dplay session the message corresponds to
end;
 
DPLMSG_SYSTEMMESSAGE = TDPLMsg_SystemMessage;
LPDPLMSG_SYSTEMMESSAGE = PDPLMsg_SystemMessage;
 
{ TDPLMsg_SetProperty }
 
(*
* TDPLMsg_SetProperty
* Standard message sent by an application to a lobby to set a
* property
*)
PDPLMsg_SetProperty = ^TDPLMsg_SetProperty;
TDPLMsg_SetProperty = record
TDPLMsg_SetProperty = packed record
dwType: DWORD; // Message type
dwRequestID: DWORD; // Request ID (DPL_NOCONFIRMATION if no confirmation desired)
guidPlayer: TGUID; // Player GUID
10986,17 → 16475,17
dwPropertyData: array[0..0] of DWORD; // Buffer containing data
end;
 
DPLMSG_SETPROPERTY = TDPLMsg_SetProperty;
LPDPLMSG_SETPROPERTY = PDPLMsg_SetProperty;
 
const
DPL_NOCONFIRMATION = 0;
 
{ TDPLMsg_SetPropertyResponse }
 
type
(*
* TDPLMsg_SetPropertyResponse
* Standard message returned by a lobby to confirm a
* TDPLMsg_SetProperty message.
*)
PDPLMsg_SetPropertyResponse = ^TDPLMsg_SetPropertyResponse;
TDPLMsg_SetPropertyResponse = record
TDPLMsg_SetPropertyResponse = packed record
dwType: DWORD; // Message type
dwRequestID: DWORD; // Request ID
guidPlayer: TGUID; // Player GUID
11004,26 → 16493,27
hr: HResult; // Return Code
end;
 
DPLMSG_SETPROPERTYRESPONSE = TDPLMsg_SetPropertyResponse;
LPDPLMSG_SETPROPERTYRESPONSE = PDPLMsg_SetPropertyResponse;
 
{ TDPLMsg_GetProperty }
 
(*
* TDPLMsg_GetProperty
* Standard message sent by an application to a lobby to request
* the current value of a property
*)
PDPLMsg_GetProperty = ^TDPLMsg_GetProperty;
TDPLMsg_GetProperty = record
TDPLMsg_GetProperty = packed record
dwType: DWORD; // Message type
dwRequestID: DWORD; // Request ID
guidPlayer: TGUID; // Player GUID
guidPropertyTag: TGUID; // Property GUID
end;
LPDPLMSG_GETPROPERTY = ^TDPLMsg_GetProperty;
 
DPLMSG_GETPROPERTY = TDPLMsg_GetProperty;
LPDPLMSG_GETPROPERTY = PDPLMsg_GetProperty;
 
{ TDPLMsg_GetPropertyResponse }
 
(*
* TDPLMsg_GetPropertyResponse
* Standard message returned by a lobby in response to a
* TDPLMsg_GetProperty message.
*)
PDPLMsg_GetPropertyResponse = ^TDPLMsg_GetPropertyResponse;
TDPLMsg_GetPropertyResponse = record
TDPLMsg_GetPropertyResponse = packed record
dwType: DWORD; // Message type
dwRequestID: DWORD; // Request ID
guidPlayer: TGUID; // Player GUID
11033,97 → 16523,297
dwPropertyData: array[0..0] of DWORD; // Buffer containing data
end;
 
DPLMSG_GETPROPERTYRESPONSE = TDPLMsg_GetPropertyResponse;
LPDPLMSG_GETPROPERTYRESPONSE = PDPLMsg_GetPropertyResponse;
 
{ TDPLMsg_NewSessionHost }
 
(*
* TDPLMsg_NewSessionHost
* Standard message returned by a lobby in response to a
* the session host migrating to a new client
*)
PDPLMsg_NewSessionHost = ^TDPLMsg_NewSessionHost;
TDPLMsg_NewSessionHost = record
TDPLMsg_NewSessionHost = packed record
dwType: DWORD; // Message type
guidInstance: TGUID; // GUID Instance of the session
guidInstance: TGUID; // Property GUID
end;
 
DPLMSG_NEWSESSIONHOST = TDPLMsg_NewSessionHost;
LPDPLMSG_NEWSESSIONHOST = PDPLMsg_NewSessionHost;
const
(******************************************
*
* DirectPlay Lobby message dwType values
*
*****************************************)
 
{ DirectPlay Lobby message dwType values }
(*
* The application has read the connection settings.
* It is now O.K. for the lobby client to release
* its IDirectPlayLobby interface.
*)
DPLSYS_CONNECTIONSETTINGSREAD = $00000001;
 
const
DPLSYS_CONNECTIONSETTINGSREAD = $00000001;
(*
* The application's call to DirectPlayConnect failed
*)
DPLSYS_DPLAYCONNECTFAILED = $00000002;
 
(*
* The application has created a DirectPlay session.
*)
DPLSYS_DPLAYCONNECTSUCCEEDED = $00000003;
 
(*
* The application has terminated.
*)
DPLSYS_APPTERMINATED = $00000004;
 
(*
* The message is a TDPLMsg_SetProperty message.
*)
DPLSYS_SETPROPERTY = $00000005;
 
(*
* The message is a TDPLMsg_SetPropertyResponse message.
*)
DPLSYS_SETPROPERTYRESPONSE = $00000006;
 
(*
* The message is a TDPLMsg_GetProperty message.
*)
DPLSYS_GETPROPERTY = $00000007;
 
(*
* The message is a TDPLMsg_GetPropertyResponse message.
*)
DPLSYS_GETPROPERTYRESPONSE = $00000008;
 
(*
* The message is a TDPLMsg_NewSessionHost message.
*)
DPLSYS_NEWSESSIONHOST = $00000009;
 
(*
* New connection settings are available.
*)
DPLSYS_NEWCONNECTIONSETTINGS = $0000000A;
 
{ DirectPlay defined property GUIDs and associated data structures }
(****************************************************************************
*
* DirectPlay defined property GUIDs and associated data structures
*
****************************************************************************)
 
DPLPROPERTY_MessagesSupported: TGUID = '{762CCDA1-D916-11d0-BA39-00C04FD7ED67}';
DPLPROPERTY_LobbyGuid: TGUID = '{F56920A0-D218-11d0-BA39-00C04FD7ED67}';
DPLPROPERTY_PlayerGuid: TGUID = '{B4319322-D20D-11d0-BA39-00C04FD7ED67}';
(*
* DPLPROPERTY_MessagesSupported
*
* Request whether the lobby supports standard. Lobby with respond with either
* TRUE or FALSE or may not respond at all.
*
* Property data is a single BOOL with TRUE or FALSE
*)
// {762CCDA1-D916-11d0-BA39-00C04FD7ED67}
DPLPROPERTY_MessagesSupported: TGUID =
(D1:$762ccda1;D2:$d916;D3:$11d0;D4:($ba,$39,$00,$c0,$4f,$d7,$ed,$67));
 
{ TDPLData_PlayerGUID }
(*
* DPLPROPERTY_LobbyGuid
*
* Request the GUID that identifies the lobby software that the application
* is communicating with.
*
* Property data is a single GUID.
*)
// {F56920A0-D218-11d0-BA39-00C04FD7ED67}
DPLPROPERTY_LobbyGuid: TGUID =
(D1:$F56920A0;D2:$D218;D3:$11d0;D4:($ba,$39,$00,$c0,$4f,$d7,$ed,$67));
 
(*
* DPLPROPERTY_PlayerGuid
*
* Request the GUID that identifies the player on this machine for sending
* property data back to the lobby.
*
* Property data is the DPLDATA_PLAYERDATA structure
*)
// {B4319322-D20D-11d0-BA39-00C04FD7ED67}
DPLPROPERTY_PlayerGuid: TGUID =
(D1:$b4319322;D2:$d20d;D3:$11d0;D4:($ba,$39,$00,$c0,$4f,$d7,$ed,$67));
 
type
(*
* TDPLData_PlayerGUID
*
* Data structure to hold the GUID of the player and player creation flags
* from the lobby.
*)
PDPLData_PlayerGUID = ^TDPLData_PlayerGUID;
TDPLData_PlayerGUID = record
TDPLData_PlayerGUID = packed record
guidPlayer: TGUID;
dwPlayerFlags: DWORD;
end;
 
DPLDATA_PLAYERGUID = TDPLData_PlayerGUID;
LPDPLDATA_PLAYERGUID = PDPLData_PlayerGUID;
 
{ DPLPROPERTY_PlayerScore }
 
const
DPLPROPERTY_PlayerScore: TGUID = '{48784000-D219-11d0-BA39-00C04FD7ED67}';
(*
* DPLPROPERTY_PlayerScore
*
* Used to send an array of long integers to the lobby indicating the
* score of a player.
*
* Property data is the TDPLData_PlayerScore structure.
*)
// {48784000-D219-11d0-BA39-00C04FD7ED67}
DPLPROPERTY_PlayerScore: TGUID =
(D1:$48784000;D2:$d219;D3:$11d0;D4:($ba,$39,$00,$c0,$4f,$d7,$ed,$67));
 
{ TDPLData_PlayerScore }
 
type
(*
* TDPLData_PlayerScore
*
* Data structure to hold an array of long integers representing a player score.
* Application must allocate enough memory to hold all the scores.
*)
PDPLData_PlayerScore = ^TDPLData_PlayerScore;
TDPLData_PlayerScore = record
TDPLData_PlayerScore = packed record
dwScoreCount: DWORD;
Score: array[0..0] of Longint;
Score: array[0..0] of LongInt;
end;
 
DPLDATA_PLAYERSCORE = TDPLData_PlayerScore;
LPDPLDATA_PLAYERSCORE = PDPLData_PlayerScore;
(****************************************************************************
*
* DirectPlay Address ID's
*
****************************************************************************)
 
{ DirectPlay Address ID's }
(* DirectPlay Address
*
* A DirectPlay address consists of multiple chunks of data, each tagged
* with a GUID signifying the type of data in the chunk. The chunk also
* has a length so that unknown chunk types can be skipped.
*
* The EnumAddress() function is used to parse these address data chunks.
*)
 
type
(*
* TDPAddress
*
* Header for block of address data elements
*)
PDPAddress = ^TDPAddress;
TDPAddress = record
TDPAddress = packed record
guidDataType: TGUID;
dwDataSize: DWORD;
end;
 
DPADDRESS = TDPAddress;
LPDPADDRESS = PDPAddress;
 
const
DPAID_TotalSize: TGUID = '{1318F560-912C-11d0-9DAA-00A0C90A43CB}';
DPAID_ServiceProvider: TGUID = '{07D916C0-E0AF-11cf-9C4E-00A0C905425E}';
DPAID_LobbyProvider: TGUID = '{59B95640-9667-11d0-A77D-0000F803ABFC}';
DPAID_Phone: TGUID = '{78EC89A0-E0AF-11cf-9C4E-00A0C905425E}';
DPAID_PhoneW: TGUID = '{BA5A7A70-9DBF-11d0-9CC1-00A0C905425E}';
DPAID_Modem: TGUID = '{F6DCC200-A2FE-11d0-9C4F-00A0C905425E}';
DPAID_ModemW: TGUID = '{01FD92E0-A2FF-11d0-9C4F-00A0C905425E}';
DPAID_INet: TGUID = '{C4A54DA0-E0AF-11cf-9C4E-00A0C905425E}';
DPAID_INetW: TGUID = '{E63232A0-9DBF-11d0-9CC1-00A0C905425E}';
DPAID_INetPort: TGUID = '{E4524541-8EA5-11d1-8A96-006097B01411}';
DPAID_MaxMessageSize: TGUID = '{F5D09980-F0C4-11d1-8326-006097B01411}';
(*
* DPAID_TotalSize
*
* Chunk is a DWORD containing size of entire TDPAddress structure
*)
 
{ TDPComPortAddress }
// {1318F560-912C-11d0-9DAA-00A0C90A43CB}
DPAID_TotalSize: TGUID =
(D1:$1318f560;D2:$912c;D3:$11d0;D4:($9d,$aa,$00,$a0,$c9,$a,$43,$cb));
 
const
(*
* DPAID_ServiceProvider
*
* Chunk is a GUID describing the service provider that created the chunk.
* All addresses must contain this chunk.
*)
 
// {07D916C0-E0AF-11cf-9C4E-00A0C905425E}
DPAID_ServiceProvider: TGUID =
(D1:$7d916c0;D2:$e0af;D3:$11cf;D4:($9c,$4e,$00,$a0,$c9,$5,$42,$5e));
 
(*
* DPAID_LobbyProvider
*
* Chunk is a GUID describing the lobby provider that created the chunk.
* All addresses must contain this chunk.
*)
 
// {59B95640-9667-11d0-A77D-0000F803ABFC}
DPAID_LobbyProvider: TGUID =
(D1:$59b95640;D2:$9667;D3:$11d0;D4:($a7,$7d,$00,$00,$f8,$3,$ab,$fc));
 
(*
* DPAID_Phone and DPAID_PhoneW
*
* Chunk is a string containing a phone number (i.e. "1-800-555-1212")
* in ANSI or UNICODE format
*)
 
// {78EC89A0-E0AF-11cf-9C4E-00A0C905425E}
DPAID_Phone: TGUID =
(D1:$78ec89a0;D2:$e0af;D3:$11cf;D4:($9c,$4e,$00,$a0,$c9,$5,$42,$5e));
 
// {BA5A7A70-9DBF-11d0-9CC1-00A0C905425E}
DPAID_PhoneW: TGUID =
(D1:$ba5a7a70;D2:$9dbf;D3:$11d0;D4:($9c,$c1,$00,$a0,$c9,$5,$42,$5e));
 
(*
* DPAID_Modem and DPAID_ModemW
*
* Chunk is a string containing a modem name registered with TAPI
* in ANSI or UNICODE format
*)
 
// {F6DCC200-A2FE-11d0-9C4F-00A0C905425E}
DPAID_Modem: TGUID =
(D1:$f6dcc200;D2:$a2fe;D3:$11d0;D4:($9c,$4f,$00,$a0,$c9,$5,$42,$5e));
 
// {01FD92E0-A2FF-11d0-9C4F-00A0C905425E}
DPAID_ModemW: TGUID =
(D1:$1fd92e0;D2:$a2ff;D3:$11d0;D4:($9c,$4f,$00,$a0,$c9,$5,$42,$5e));
 
(*
* DPAID_Inet and DPAID_InetW
*
* Chunk is a string containing a TCP/IP host name or an IP address
* (i.e. "dplay.microsoft.com" or "137.55.100.173") in ANSI or UNICODE format
*)
 
// {C4A54DA0-E0AF-11cf-9C4E-00A0C905425E}
DPAID_INet: TGUID =
(D1:$c4a54da0;D2:$e0af;D3:$11cf;D4:($9c,$4e,$00,$a0,$c9,$5,$42,$5e));
 
// {E63232A0-9DBF-11d0-9CC1-00A0C905425E}
DPAID_INetW: TGUID =
(D1:$e63232a0;D2:$9dbf;D3:$11d0;D4:($9c,$c1,$00,$a0,$c9,$5,$42,$5e));
 
(*
* DPAID_InetPort
*
* Chunk is the port number used for creating the apps TCP and UDP sockets.
* WORD value (i.e. 47624)
*)
 
// {E4524541-8EA5-11d1-8A96-006097B01411}
DPAID_INetPort: TGUID =
(D1:$e4524541;D2:$8ea5;D3:$11d1;D4:($8a,$96,$00,$60,$97,$b0,$14,$11));
 
//@@BEGIN_MSINTERNAL
(*
* DPAID_MaxMessageSize
*
* Tells DPLAY what the maximum allowed message size is. Enables SPs to
* combat Denial of Service attacks
*)
 
// this terrible hack is needed so the SP can work with the Elmer build.
// it can be removed when the MSINTERNAL stuff is removed
{$DEFINE MAXMSGSIZEGUIDDEFINED}
 
// {F5D09980-F0C4-11d1-8326-006097B01411}
DPAID_MaxMessageSize: TGUID =
(D1:$f5d09980;D2:$f0c4;D3:$11d1;D4:($83,$26,$00,$60,$97,$b0,$14,$11));
//@@END_MSINTERNAL
 
(*
* TDPComPortAddress
*
* Used to specify com port settings. The constants that define baud rate,
* stop bits and parity are defined in WINBASE.H. The constants for flow
* control are given below.
*)
 
DPCPA_NOFLOW = 0; // no flow control
DPCPA_XONXOFFFLOW = 1; // software flow control
DPCPA_RTSFLOW = 2; // hardware flow control with RTS
11132,7 → 16822,7
 
type
PDPComPortAddress = ^TDPComPortAddress;
TDPComPortAddress = record
TDPComPortAddress = packed record
dwComPort: DWORD; // COM port to use (1-4)
dwBaudRate: DWORD; // baud rate (100-256k)
dwStopBits: DWORD; // no. stop bits (1-2)
11140,16 → 16830,28
dwFlowControl: DWORD; // flow control (none, xon/xoff, rts, dtr)
end;
 
DPCOMPORTADDRESS = TDPComPortAddress;
LPDPCOMPORTADDRESS = PDPComPortAddress;
 
const
DPAID_ComPort: TGUID = '{F2F0CE00-E0AF-11cf-9C4E-00A0C905425E}';
(*
* DPAID_ComPort
*
* Chunk contains a TDPComPortAddress structure defining the serial port.
*)
 
{ dplobby 1.0 obsolete definitions }
// {F2F0CE00-E0AF-11cf-9C4E-00A0C905425E}
DPAID_ComPort: TGUID =
(D1:$f2f0ce00;D2:$e0af;D3:$11cf;D4:($9c,$4e,$00,$a0,$c9,$5,$42,$5e));
 
(****************************************************************************
*
* dplobby 1.0 obsolete definitions
* Included for compatibility only.
*
****************************************************************************)
 
DPLAD_SYSTEM = DPLMSG_SYSTEM;
{$ENDIF} // UseDirectPlay
 
//DirectSetup file
(*==========================================================================
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
11157,10 → 16859,28
* File: dsetup.h
* Content: DirectXSetup, error codes and flags
*
* DirectX 7.0 Delphi adaptation by Erik Unger
*
* Modyfied: 05-Oct-99
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: DelphiDirectX@next-reality.com
*
***************************************************************************)
 
var
DSetupDLL : HModule;
 
type
PDLSVersion = ^TDLSVersion;
TDLSVersion = packed record
dwVersionMS: DWORD;
dwVersionLS: DWORD;
end;
 
 
const
FOURCC_VERS = Ord('v') + Ord('e')*$100 + Ord('r')*$10000 + Ord('s')*$1000000;
FOURCC_VERS : array[0..3] of Char = ('v','e','r','s');
 
// DSETUP Error Codes, must remain compatible with previous setup.
DSETUPERR_SUCCESS_RESTART = HResult(1);
11174,6 → 16894,7
DSETUPERR_CANTFINDINF = HResult(-7);
DSETUPERR_CANTFINDDIR = HResult(-8);
DSETUPERR_INTERNAL = HResult(-9);
DSETUPERR_NTWITHNO3D = HResult(-10); // REM: obsolete, you'll never see this
DSETUPERR_UNKNOWNOS = HResult(-11);
DSETUPERR_USERHITCANCEL = HResult(-12);
DSETUPERR_NOTPREINSTALLEDONNT = HResult(-13);
11186,11 → 16907,12
DSETUP_DIRECTX = DSETUP_DXCORE or DSETUP_DDRAWDRV or DSETUP_DSOUNDDRV;
DSETUP_TESTINSTALL = $00020000; (* just test install, don't do anything *)
DSETUP_USEROLDERFLAG = $02000000; (* enable return DSETUPERR_NEWERVERSION *)
// Bug #22730
DSETUP_NTINSTALL = $00080000; (* install on Win2K platform *)
 
// These OBSOLETE flags are here for compatibility with pre-DX5 apps only.
// They are present to allow DX3 apps to be recompiled with DX5 and still work.
// DO NOT USE THEM for DX5. They will go away in future DX releases.
 
DSETUP_DDRAW = $00000001; (* OBSOLETE. install DirectDraw *)
DSETUP_DSOUND = $00000002; (* OBSOLETE. install DirectSound *)
DSETUP_DPLAY = $00000004; (* OBSOLETE. install DirectPlay *)
11242,45 → 16964,21
DSETUP_CB_UPGRADE_DEVICE_DISPLAY = $1000;
DSETUP_CB_UPGRADE_DEVICE_MEDIA = $2000;
 
 
type
 
{ TDLSVersion }
 
PDLSVersion = ^TDLSVersion;
TDLSVersion = record
dwVersionMS: DWORD;
dwVersionLS: WORD;
end;
 
DLSVERSION = TDLSVersion;
LPDLSVERSION = PDLSVersion;
 
{ TDSetup_CB_UpgradeInfo }
 
PDSetup_CB_UpgradeInfo = ^TDSetup_CB_UpgradeInfo;
TDSetup_CB_UpgradeInfo = record
UpgradeFlags: DWORD;
end;
 
DSETUP_CB_UPGRADEINFO = TDSetup_CB_UpgradeInfo;
LPDSETUP_CB_UPGRADEINFO = PDSetup_CB_UpgradeInfo;
 
{ TDSetup_CB_FileCopyError }
 
PDSetup_CB_FileCopyError = ^TDSetup_CB_FileCopyError;
TDSetup_CB_FileCopyError = record
dwError: DWORD;
end;
 
DSETUP_CB_FILECOPYERROR = TDSetup_CB_FileCopyError;
LPDSETUP_CB_FILECOPYERROR = PDSetup_CB_FileCopyError;
 
//
// Data Structures
//
 
{ TDirectXRegisterAppA }
 
PDirectXRegisterAppA = ^TDirectXRegisterAppA;
TDirectXRegisterAppA = record
dwSize: DWORD;
11293,11 → 16991,6
lpszCurrentDirectory: PAnsiChar;
end;
 
DIRECTXREGISTERAPPA = TDirectXRegisterAppA;
LPDIRECTXREGISTERAPPA = PDirectXRegisterAppA;
 
{ TDirectXRegisterApp2A }
 
PDirectXRegisterApp2A = ^TDirectXRegisterApp2A;
TDirectXRegisterApp2A = record
dwSize: DWORD;
11311,11 → 17004,6
lpszLauncherName: PAnsiChar;
end;
 
DIRECTXREGISTERAPP2A = TDirectXRegisterApp2A;
LPDIRECTXREGISTERAPP2A = PDirectXRegisterApp2A;
 
{ TDirectXRegisterAppW }
 
PDirectXRegisterAppW = ^TDirectXRegisterAppW;
TDirectXRegisterAppW = record
dwSize: DWORD;
11328,11 → 17016,6
lpszCurrentDirectory: PWideChar;
end;
 
DIRECTXREGISTERAPPW = TDirectXRegisterAppW;
LPDIRECTXREGISTERAPPW = PDirectXRegisterAppW;
 
{ TDirectXRegisterApp2W }
 
PDirectXRegisterApp2W = ^TDirectXRegisterApp2W;
TDirectXRegisterApp2W = record
dwSize: DWORD;
11346,75 → 17029,102
lpszLauncherName: PWideChar;
end;
 
DIRECTXREGISTERAPP2W = TDirectXRegisterApp2W;
LPDIRECTXREGISTERAPP2W = PDirectXRegisterApp2W;
 
{ TDirectXRegisterApp }
 
PDirectXRegisterApp = PDirectXRegisterAppA;
PDirectXRegisterApp = ^TDirectXRegisterApp;
PDirectXRegisterApp2 = ^TDirectXRegisterApp2;
{$IFDEF UNICODE}
TDirectXRegisterApp = TDirectXRegisterAppW;
TDirectXRegisterApp2 = TDirectXRegisterApp2W;
{$ELSE}
TDirectXRegisterApp = TDirectXRegisterAppA;
 
PDirectXRegisterApp2 = PDirectXRegisterApp2A;
TDirectXRegisterApp2 = TDirectXRegisterApp2A;
{$ENDIF}
 
DIRECTXREGISTERAPP = TDirectXRegisterApp;
LPDIRECTXREGISTERAPP = PDirectXRegisterApp;
//
// API
//
var
DirectXSetupW : function (hWnd: HWND; lpszRootPath: PWideChar; dwFlags: DWORD) : Integer; stdcall;
DirectXSetupA : function (hWnd: HWND; lpszRootPath: PAnsiChar; dwFlags: DWORD) : Integer; stdcall;
DirectXSetup : function (hWnd: HWND; lpszRootPath: PCharAW; dwFlags: DWORD) : Integer; stdcall;
 
DIRECTXREGISTERAPP2 = TDirectXRegisterApp2;
LPDIRECTXREGISTERAPP2 = PDirectXRegisterApp2;
DirectXDeviceDriverSetupW : function (hWnd: HWND; lpszDriverClass: PWideChar;
lpszDriverPath: PWideChar; dwFlags: DWORD) : Integer; stdcall;
DirectXDeviceDriverSetupA : function (hWnd: HWND; lpszDriverClass: PAnsiChar;
lpszDriverPath: PAnsiChar; dwFlags: DWORD) : Integer; stdcall;
DirectXDeviceDriverSetup : function (hWnd: HWND; lpszDriverClass: PCharAW;
lpszDriverPath: PCharAW; dwFlags: DWORD) : Integer; stdcall;
 
{ API }
DirectXRegisterApplicationW : function
(hWnd: HWND; const lpDXRegApp: TDirectXRegisterAppW) : Integer; stdcall;
DirectXRegisterApplicationA : function
(hWnd: HWND; const lpDXRegApp: TDirectXRegisterAppA) : Integer; stdcall;
DirectXRegisterApplication : function
(hWnd: HWND; const lpDXRegApp: TDirectXRegisterApp) : Integer; stdcall;
 
function DirectXSetupA(hWnd: HWND; lpszRootPath: PAnsiChar; dwFlags: DWORD): Longint; stdcall;
function DirectXSetupW(hWnd: HWND; lpszRootPath: PWideChar; dwFlags: DWORD): Longint; stdcall;
function DirectXSetup(hWnd: HWND; lpszRootPath: PAnsiChar; dwFlags: DWORD): Longint; stdcall;
DirectXUnRegisterApplication : function
(hWnd: HWND; const lpGUID: TGUID) : Integer; stdcall;
 
function DirectXDeviceDriverSetupA(hWnd: HWND; lpszDriverClass: PAnsiChar;
lpszDriverPath: PAnsiChar; dwFlags: DWORD): Longint; stdcall;
function DirectXDeviceDriverSetupW(hWnd: HWND; lpszDriverClass: PWideChar;
lpszDriverPath: PWideChar; dwFlags: DWORD): Longint; stdcall;
function DirectXDeviceDriverSetup(hWnd: HWND; lpszDriverClass: PAnsiChar;
lpszDriverPath: PAnsiChar; dwFlags: DWORD): Longint; stdcall;
type
TDSetup_Callback = function (Reason: DWORD; MsgType: DWORD; // Same as flags to MessageBox
szMessage: PChar; szName: PChar; pInfo: Pointer) : DWORD; stdcall;
 
function DirectXRegisterApplicationA(hWnd: HWND; const lpDXRegApp: TDirectXRegisterAppA): Longint; stdcall;
function DirectXRegisterApplicationW(hWnd: HWND; const lpDXRegApp: TDirectXRegisterAppW): Longint; stdcall;
function DirectXRegisterApplication(hWnd: HWND; const lpDXRegApp: TDirectXRegisterAppA): Longint; stdcall;
function DirectXUnRegisterApplication(hWnd: HWND; const lpGUID: TGUID): Longint; stdcall;
var
DirectXSetupSetCallback : function (Callback: TDSetup_Callback) : Integer; stdcall;
 
type
TDSetup_Callback = function (Reason: DWORD; MsgType: DWORD;
szMessage: PAnsiChar; szName: PAnsiChar; pInfo: Pointer): DWORD; stdcall;
DSETUP_CALLBACK = TDSetup_Callback;
DirectXSetupGetVersion : function (out lpdwVersion, lpdwMinorVersion: DWORD) : Integer; stdcall;
 
function DirectXSetupSetCallback(Callback: TDSetup_Callback): Longint; stdcall;
function DirectXSetupGetVersion(var lpdwVersion, lpdwMinorVersion: DWORD): Longint; stdcall;
 
//DirectSound file
(*==========================================================================;
*
* Copyright (C) 1995,1996 Microsoft Corporation. All Rights Reserved.
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: dsound.h
* Content: DirectSound include file
*
**************************************************************************)
* DirectX 7.0 Delphi adaptation by Erik Unger
*
* Modified: 10-Sep-2000
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: DelphiDirectX@next-reality.com
*
***************************************************************************)
 
{ GUIDS used by DirectDraw objects }
{
Windows 98 and debug versions DInput and DSound
 
Under Windows 98, the "debug" setup of the DirectX SDK 6.x skips DInput.DLL
and DSound.DLL, i.e. makes you end up with the retail version of these two
files without any notice.
The debug versions of DInput.DLL and DSound.DLL can be found in the
\extras\Win98\Win98Dbg folder of the SDK CD; they need to be installed
"manually".
}
 
 
var
DSoundDLL : HMODULE;
function DSErrorString(Value: HResult) : string;
 
const
CLSID_DirectSound: TGUID = '{47D4D946-62E8-11cf-93BC-444553540000}';
CLSID_DirectSoundCapture: TGUID = '{B0210780-89CD-11d0-AF08-00A0C925CD16}';
_FACDS = $878;
function MAKE_DSHResult(code: DWORD) : HResult;
 
IID_IDirectSound: TGUID = '{279AFA83-4981-11CE-A521-0020AF0BE560}';
IID_IDirectSoundBuffer: TGUID = '{279AFA85-4981-11CE-A521-0020AF0BE560}';
IID_IDirectSound3DListener: TGUID = '{279AFA84-4981-11CE-A521-0020AF0BE560}';
IID_IDirectSound3DBuffer: TGUID = '{279AFA86-4981-11CE-A521-0020AF0BE560}';
IID_IDirectSoundCapture: TGUID = '{B0210781-89CD-11D0-AF08-00A0C925CD16}';
IID_IDirectSoundCaptureBuffer: TGUID = '{B0210782-89CD-11D0-AF08-00A0C925CD16}';
const
FLT_MIN = 1.175494351E-38;
FLT_MAX = 3.402823466E+38;
 
IID_IDirectSoundNotify: TGUID = '{B0210783-89CD-11D0-AF08-00A0C925CD16}';
const
// Direct Sound Component GUID {47D4D946-62E8-11cf-93BC-444553540000}
CLSID_DirectSound: TGUID = '{47D4D946-62E8-11cf-93BC-444553540000}';
 
{ DirectSound Structures }
// DirectSound Capture Component GUID {B0210780-89CD-11d0-AF08-00A0C925CD16}
CLSID_DirectSoundCapture: TGUID = '{47D4D946-62E8-11cf-93BC-444553540000}';
 
//
// Structures
//
type
IDirectSound = interface;
IDirectSoundBuffer = interface;
11423,11 → 17133,10
IDirectSoundCapture = interface;
IDirectSoundCaptureBuffer = interface;
IDirectSoundNotify = interface;
IKsPropertySet = interface;
 
{ TDSCaps }
 
PDSCaps = ^TDSCaps;
TDSCaps = record
TDSCaps = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwMinSecondarySampleRate: DWORD;
11453,14 → 17162,10
dwReserved1: DWORD;
dwReserved2: DWORD;
end;
PCDSCaps = ^TDSCaps;
 
DSCAPS = TDSCaps;
LPDSCAPS = PDSCaps;
 
{ TDSBCaps }
 
PDSBCaps = ^TDSBCaps;
TDSBCaps = record
TDSBCaps = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
11467,45 → 17172,61
dwUnlockTransferRate: DWORD;
dwPlayCpuOverhead: DWORD;
end;
PCDSBCaps = ^TDSBCaps;
 
DSBCAPS = TDSBCaps;
LPDSBCAPS = DSBCAPS;
 
{ TDSBufferDesc }
 
PDSBufferDesc = ^TDSBufferDesc;
TDSBufferDesc = record
TDSBufferDesc_DX6 = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
dwReserved: DWORD;
lpwfxFormat: PWaveFormatEx;
{$IFDEF SupportDirectX7}
guid3DAlgorithm: TGUID;
{$ENDIF}
end;
 
DSBUFFERDESC = TDSBufferDesc;
LPDSBUFFERDESC = PDSBufferDesc;
TDSBufferDesc1 = TDSBufferDesc_DX6;
PDSBufferDesc1 = ^TDSBufferDesc1;
PCDSBufferDesc1 = PDSBufferDesc1;
 
{ TDSBufferDesc1 }
 
PDSBufferDesc1 = ^TDSBufferDesc1;
TDSBufferDesc1 = record
TDSBufferDesc_DX7 = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
dwReserved: DWORD;
lpwfxFormat: PWaveFormatEx;
guid3DAlgorithm: TGUID;
end;
 
DSBUFFERDESC1 = TDSBufferDesc1;
LPDSBUFFERDESC1 = PDSBufferDesc1;
{$IFDEF DIRECTX6}
TDSBufferDesc = TDSBufferDesc_DX6;
{$ELSE}
TDSBufferDesc = TDSBufferDesc_DX7;
{$ENDIF}
 
{ TDS3DBuffer }
PDSBufferDesc = ^TDSBufferDesc;
PCDSBufferDesc = PDSBufferDesc;
 
(***
// Snipped from D3DTypes.pas:
 
TD3DValue = Single;
 
PD3DVector = ^TD3DVector;
TD3DVector = packed record
case Integer of
0: (
x: TD3DValue;
y: TD3DValue;
z: TD3DValue;
);
1: (
dvX: TD3DValue;
dvY: TD3DValue;
dvZ: TD3DValue;
);
end;
*)
 
PDS3DBuffer = ^TDS3DBuffer;
TDS3DBuffer = record
TDS3DBuffer = packed record
dwSize: DWORD;
vPosition: TD3DVector;
vVelocity: TD3DVector;
11512,19 → 17233,15
dwInsideConeAngle: DWORD;
dwOutsideConeAngle: DWORD;
vConeOrientation: TD3DVector;
lConeOutsideVolume: Longint;
lConeOutsideVolume: LongInt;
flMinDistance: TD3DValue;
flMaxDistance: TD3DValue;
dwMode: DWORD;
end;
TCDS3DBuffer = ^TDS3DBuffer;
 
DS3DBUFFER = TDS3DBuffer;
LPDS3DBUFFER = PDS3DBuffer;
 
{ TDS3DListener }
 
PDS3DListener = ^TDS3DListener;
TDS3DListener = record
TDS3DListener = packed record
dwSize: DWORD;
vPosition: TD3DVector;
vVelocity: TD3DVector;
11534,27 → 17251,19
flRolloffFactor: TD3DValue;
flDopplerFactor: TD3DValue;
end;
PCDS3DListener = ^TDS3DListener;
 
DS3DLISTENER = TDS3DListener;
LPDS3DLISTENER = PDS3DListener;
 
{ TDSCCaps }
 
PDSCCaps = ^TDSCCaps;
TDSCCaps = record
TDSCCaps = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwFormats: DWORD;
dwChannels: DWORD;
end;
PCDSCCaps = ^TDSCCaps;
 
DSCCAPS = TDSCCaps;
LPDSCCAPS = PDSCCaps;
 
{ TDSCBufferDesc }
 
PDSCBufferDesc = ^TDSCBufferDesc;
TDSCBufferDesc = record
TDSCBufferDesc = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
11561,41 → 17270,45
dwReserved: DWORD;
lpwfxFormat: PWaveFormatEx;
end;
PCDSCBufferDesc = ^TDSCBufferDesc;
 
DSCBUFFERDESC = TDSCBufferDesc;
LPDSCBUFFERDESC = PDSCBufferDesc;
 
{ TDSCBCaps }
 
PDSCBCaps = ^TDSCBCaps;
TDSCBCaps = record
TDSCBCaps = packed record
dwSize: DWORD;
dwFlags: DWORD;
dwBufferBytes: DWORD;
dwReserved: DWORD;
end;
PCDSCBCaps = ^TDSCBCaps;
 
DSCBCAPS = TDSCBCaps;
LPDSCBCAPS = PDSCBCaps;
 
{ TDSBPositionNotify }
 
PDSBPositionNotify = ^TDSBPositionNotify;
TDSBPositionNotify = record
TDSBPositionNotify = packed record
dwOffset: DWORD;
hEventNotify: THandle;
end;
PCDSBPositionNotify = ^TDSBPositionNotify;
 
DSBPOSITIONNOTIFY = TDSBPositionNotify;
LPDSBPOSITIONNOTIFY = PDSBPositionNotify;
//
// DirectSound API
//
TDSEnumCallbackW = function (lpGuid: PGUID; lpstrDescription: PWideChar;
lpstrModule: PWideChar; lpContext: Pointer) : BOOL; stdcall;
TDSEnumCallbackA = function (lpGuid: PGUID; lpstrDescription: PAnsiChar;
lpstrModule: PAnsiChar; lpContext: Pointer) : BOOL; stdcall;
{$IFDEF UNICODE}
TDSEnumCallback = TDSEnumCallbackW;
{$ELSE}
TDSEnumCallback = TDSEnumCallbackA;
{$ENDIF}
 
{ IDirectSound }
 
//
// IDirectSound
//
IDirectSound = interface(IUnknown)
['{279AFA83-4981-11CE-A521-0020AF0BE560}']
// IDirectSound methods
function CreateSoundBuffer(const lpDSBufferDesc: TDSBufferDesc;
out lplpDirectSoundBuffer: IDirectSoundBuffer;
out lpIDirectSoundBuffer: IDirectSoundBuffer;
pUnkOuter: IUnknown): HResult; stdcall;
function GetCaps(var lpDSCaps: TDSCaps): HResult; stdcall;
function DuplicateSoundBuffer(lpDsbOriginal: IDirectSoundBuffer;
11607,31 → 17320,32
function Initialize(lpGuid: PGUID): HResult; stdcall;
end;
 
{ IDirectSoundBuffer }
 
//
// IDirectSoundBuffer
//
IDirectSoundBuffer = interface(IUnknown)
['{279AFA85-4981-11CE-A521-0020AF0BE560}']
// IDirectSoundBuffer methods
function GetCaps(var lpDSBufferCaps: TDSBCaps): HResult; stdcall;
function GetCurrentPosition(var lpdwCurrentPlayCursor,
lpdwCurrentWriteCursor: DWORD): HResult; stdcall;
function GetFormat(var lpwfxFormat: TWaveFormatEx; dwSizeAllocated: DWORD;
var lpdwSizeWritten: DWORD): HResult; stdcall;
function GetVolume(var lplVolume: Longint): HResult; stdcall;
function GetPan(var lplPan: Longint): HResult; stdcall;
function GetCaps(var lpDSCaps: TDSBCaps) : HResult; stdcall;
function GetCurrentPosition
(lpdwCapturePosition, lpdwReadPosition : PDWORD) : HResult; stdcall;
function GetFormat(lpwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD;
lpdwSizeWritten: PWORD) : HResult; stdcall;
function GetVolume(var lplVolume: integer) : HResult; stdcall;
function GetPan(var lplPan: integer) : HResult; stdcall;
function GetFrequency(var lpdwFrequency: DWORD): HResult; stdcall;
function GetStatus(var lpdwStatus: DWORD): HResult; stdcall;
function Initialize(lpDirectSound: IDirectSound; const
lpDSBufferDesc: TDSBufferDesc): HResult; stdcall;
function Lock(dwWriteCursor: DWORD; dwWriteBytes: DWORD;
function Initialize(lpDirectSound: IDirectSound;
const lpcDSBufferDesc: TDSBufferDesc) : HResult; stdcall;
function Lock(dwWriteCursor, dwWriteBytes: DWORD;
var lplpvAudioPtr1: Pointer; var lpdwAudioBytes1: DWORD;
var lplpvAudioPtr2: Pointer; var lpdwAudioBytes2: DWORD;
dwFlags: DWORD): HResult; stdcall;
function Play(dwReserved1, dwReserved2: DWORD; dwFlags: DWORD): HResult; stdcall;
function SetCurrentPosition(dwNewPosition: DWORD): HResult; stdcall;
function SetFormat(const lpfxFormat: TWaveFormatEx): HResult; stdcall;
function SetVolume(lVolume: Longint): HResult; stdcall;
function SetPan(lPan: Longint): HResult; stdcall;
function Play(dwReserved1,dwReserved2,dwFlags: DWORD) : HResult; stdcall;
function SetCurrentPosition(dwPosition: DWORD) : HResult; stdcall;
function SetFormat(const lpcfxFormat: TWaveFormatEx) : HResult; stdcall;
function SetVolume(lVolume: integer) : HResult; stdcall;
function SetPan(lPan: integer) : HResult; stdcall;
function SetFrequency(dwFrequency: DWORD): HResult; stdcall;
function Stop: HResult; stdcall;
function Unlock(lpvAudioPtr1: Pointer; dwAudioBytes1: DWORD;
11639,49 → 17353,59
function Restore: HResult; stdcall;
end;
 
{ IDirectSound3DListener }
 
//
// IDirectSound3DListener
//
IDirectSound3DListener = interface(IUnknown)
['{279AFA84-4981-11CE-A521-0020AF0BE560}']
// IDirectSound3DListener methods
// IDirectSound3D methods
function GetAllParameters(var lpListener: TDS3DListener): HResult; stdcall;
function GetDistanceFactor(var lpflDistanceFactor: TD3DValue): HResult; stdcall;
function GetDopplerFactor(var lpflDopplerFactor: TD3DValue): HResult; stdcall;
function GetOrientation(var lpvOrientFront, lpvOrientTop: TD3DVector): HResult; stdcall;
function GetOrientation
(var lpvOrientFront, lpvOrientTop: TD3DVector) : HResult; stdcall;
function GetPosition(var lpvPosition: TD3DVector): HResult; stdcall;
function GetRolloffFactor(var lpflRolloffFactor: TD3DValue): HResult; stdcall;
function GetVelocity(var lpvVelocity: TD3DVector): HResult; stdcall;
function SetAllParameters(const lpListener: TDS3DListener; dwApply: DWORD): HResult; stdcall;
function SetDistanceFactor(flDistanceFactor: TD3DValue; dwApply: DWORD): HResult; stdcall;
function SetDopplerFactor(flDopplerFactor: TD3DValue; dwApply: DWORD): HResult; stdcall;
function SetAllParameters
(const lpcListener: TDS3DListener; dwApply: DWORD) : HResult; stdcall;
function SetDistanceFactor
(flDistanceFactor: TD3DValue; dwApply: DWORD) : HResult; stdcall;
function SetDopplerFactor
(flDopplerFactor: TD3DValue; dwApply: DWORD) : HResult; stdcall;
function SetOrientation(xFront, yFront, zFront, xTop, yTop, zTop: TD3DValue;
dwApply: DWORD): HResult; stdcall;
function SetPosition(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
function SetRolloffFactor(flRolloffFactor: TD3DValue; dwApply: DWORD): HResult; stdcall;
function SetRolloffFactor
(flRolloffFactor: TD3DValue; dwApply: DWORD) : HResult; stdcall;
function SetVelocity(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
function CommitDeferredSettings: HResult; stdcall;
end;
 
{ IDirectSound3DBuffer }
 
//
// IDirectSound3DBuffer
//
IDirectSound3DBuffer = interface(IUnknown)
['{279AFA86-4981-11CE-A521-0020AF0BE560}']
// IDirectSound3DBuffer methods
// IDirectSoundBuffer3D methods
function GetAllParameters(var lpDs3dBuffer: TDS3DBuffer): HResult; stdcall;
function GetConeAngles(var lpdwInsideConeAngle: DWORD;
var lpdwOutsideConeAngle: DWORD): HResult; stdcall;
function GetConeAngles
(var lpdwInsideConeAngle, lpdwOutsideConeAngle: DWORD) : HResult; stdcall;
function GetConeOrientation(var lpvOrientation: TD3DVector): HResult; stdcall;
function GetConeOutsideVolume(var lplConeOutsideVolume: Longint): HResult; stdcall;
function GetConeOutsideVolume(var lplConeOutsideVolume: integer) : HResult; stdcall;
function GetMaxDistance(var lpflMaxDistance: TD3DValue): HResult; stdcall;
function GetMinDistance(var lpflMinDistance: TD3DValue): HResult; stdcall;
function GetMode(var lpdwMod: DWORD): HResult; stdcall;
function GetMode(var lpdwMode: DWORD) : HResult; stdcall;
function GetPosition(var lpvPosition: TD3DVector): HResult; stdcall;
function GetVelocity(var lpvVelocity: TD3DVector): HResult; stdcall;
function SetAllParameters(const lpDs3dBuffer: TDS3DBuffer; dwApply: DWORD): HResult; stdcall;
function SetConeAngles(dwInsideConeAngle: DWORD; dwOutsideConeAngle: DWORD;
dwApply: DWORD): HResult; stdcall;
function SetAllParameters
(const lpcDs3dBuffer: TDS3DBuffer; dwApply: DWORD) : HResult; stdcall;
function SetConeAngles
(dwInsideConeAngle, dwOutsideConeAngle, dwApply: DWORD) : HResult; stdcall;
function SetConeOrientation(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
function SetConeOutsideVolume(lConeOutsideVolume: Longint; dwApply: DWORD): HResult; stdcall;
function SetConeOutsideVolume
(lConeOutsideVolume: LongInt; dwApply: DWORD) : HResult; stdcall;
function SetMaxDistance(flMaxDistance: TD3DValue; dwApply: DWORD): HResult; stdcall;
function SetMinDistance(flMinDistance: TD3DValue; dwApply: DWORD): HResult; stdcall;
function SetMode(dwMode: DWORD; dwApply: DWORD): HResult; stdcall;
11689,32 → 17413,36
function SetVelocity(x, y, z: TD3DValue; dwApply: DWORD): HResult; stdcall;
end;
 
{ IDirectSoundCapture }
 
//
// IDirectSoundCapture
//
IDirectSoundCapture = interface(IUnknown)
['{B0210781-89CD-11D0-AF08-00A0C925CD16}']
['{b0210781-89cd-11d0-af08-00a0c925cd16}']
// IDirectSoundCapture methods
function CreateCaptureBuffer(const lpDSCBufferDesc: TDSCBufferDesc;
out lplpDirectSoundCaptureBuffer: IDirectSoundCaptureBuffer;
var lplpDirectSoundCaptureBuffer: IDirectSoundCaptureBuffer;
pUnkOuter: IUnknown): HResult; stdcall;
function GetCaps(var lpDSCCaps: TDSCCaps): HResult; stdcall;
function GetCaps(var lpdwCaps: TDSCCaps) : HResult; stdcall;
function Initialize(lpGuid: PGUID): HResult; stdcall;
end;
 
{ IDirectSoundCaptureBuffer }
 
//
// IDirectSoundCaptureBuffer
//
IDirectSoundCaptureBuffer = interface(IUnknown)
['{B0210782-89CD-11D0-AF08-00A0C925CD16}']
['{b0210782-89cd-11d0-af08-00a0c925cd16}']
// IDirectSoundCaptureBuffer methods
function GetCaps(var lpDSCBCaps: TDSCBCaps): HResult; stdcall;
function GetCurrentPosition(var lpdwCapturePosition,
lpdwReadPosition: DWORD): HResult; stdcall;
function GetFormat(var lpwfxFormat: TWaveFormatEx; dwSizeAllocated: DWORD;
var lpdwSizeWritten: DWORD): HResult; stdcall;
function GetCaps(var lpdwCaps: TDSCBCaps) : HResult; stdcall;
function GetCurrentPosition
(lpdwCapturePosition, lpdwReadPosition: PDWORD) : HResult; stdcall;
function GetFormat(lpwfxFormat: PWaveFormatEx; dwSizeAllocated: DWORD;
lpdwSizeWritten : PDWORD) : HResult; stdcall;
function GetStatus(var lpdwStatus: DWORD): HResult; stdcall;
function Initialize(lpDirectSoundCapture: IDirectSoundCapture;
const lpcDSBufferDesc: TDSCBufferDesc): HResult; stdcall;
function Lock(dwReadCursor: DWORD; dwReadBytes: DWORD;
function Lock(dwReadCursor, dwReadBytes: DWORD;
var lplpvAudioPtr1: Pointer; var lpdwAudioBytes1: DWORD;
var lplpvAudioPtr2: Pointer; var lpdwAudioBytes2: DWORD;
dwFlags: DWORD): HResult; stdcall;
11724,65 → 17452,148
lpvAudioPtr2: Pointer; dwAudioBytes2: DWORD): HResult; stdcall;
end;
 
{ IDirectSoundNotify }
 
//
// IDirectSoundNotify
//
IDirectSoundNotify = interface(IUnknown)
['{B0210783-89CD-11D0-AF08-00A0C925CD16}']
['{b0210783-89cd-11d0-af08-00a0c925cd16}']
// IDirectSoundNotify methods
function SetNotificationPositions(cPositionNotifies: DWORD;
const lpcPositionNotifies): HResult; stdcall;
const lpcPositionNotifies: TDSBPositionNotify) : HResult; stdcall;
end;
 
{ IKsPropertySet }
//
// IKsPropertySet
//
IKsPropertySet = interface (IUnknown)
['{31efac30-515c-11d0-a9aa-00aa0061be93}']
// IKsPropertySet methods
function Get(const rguidPropSet: TGUID; ulId: DWORD; var pInstanceData;
ulInstanceLength: DWORD; var pPropertyData; ulDataLength: DWORD;
var pulBytesReturned: DWORD) : HResult; stdcall;
// Warning: The following method is defined as Set() in DirectX
// which is a reserved word in Delphi!
function SetProperty(const rguidPropSet: TGUID; ulId: DWORD;
var pInstanceData; ulInstanceLength: DWORD;
var pPropertyData; pulDataLength: DWORD) : HResult; stdcall;
function QuerySupport(const rguidPropSet: TGUID; ulId: DWORD;
var pulTypeSupport: DWORD) : HResult; stdcall;
end;
 
 
const
KSPROPERTY_SUPPORT_GET = $00000001;
KSPROPERTY_SUPPORT_SET = $00000002;
 
IID_IKsPropertySet: TGUID = (D1:$31efac30;D2:$515c;D3:$11d0;D4:($a9,$aa,$00,$aa,$00,$61,$be,$93));
 
//
// GUID's for all the objects
//
type
IKsPropertySet = interface;
IID_IDirectSound = IDirectSound;
IID_IDirectSoundBuffer = IDirectSoundBuffer;
IID_IDirectSound3DListener = IDirectSound3DListener;
IID_IDirectSound3DBuffer = IDirectSound3DBuffer;
IID_IDirectSoundCapture = IDirectSoundCapture;
IID_IDirectSoundCaptureBuffer = IDirectSoundCaptureBuffer;
IID_IDirectSoundNotify = IDirectSoundNotify;
IID_IKsPropertySet = IKsPropertySet;
 
IKsPropertySet = interface(IUnknown)
['{31EFAC30-515C-11D0-A9AA-00AA0061BE93}']
// IKsPropertySet methods
function GetProperty(const PropertySetId: TGUID; PropertyId: DWORD;
var pPropertyParams; cbPropertyParams: DWORD;
var pPropertyData; cbPropertyData: DWORD;
var pcbReturnedData: ULONG): HResult; stdcall;
function SetProperty(const PropertySetId: TGUID; PropertyId: DWORD;
const pPropertyParams; cbPropertyParams: DWORD;
const pPropertyData; cbPropertyData: DWORD): HResult; stdcall;
function QuerySupport(const PropertySetId: TGUID; PropertyId: DWORD;
var pSupport: ULONG): HResult; stdcall;
end;
//
// Creation Routines
//
var
DirectSoundCreate : function ( lpGuid: PGUID; out ppDS: IDirectSound;
pUnkOuter: IUnknown) : HResult; stdcall;
 
{ Return Codes }
DirectSoundEnumerateW : function (lpDSEnumCallback: TDSEnumCallbackW;
lpContext: Pointer) : HResult; stdcall;
DirectSoundEnumerateA : function (lpDSEnumCallback: TDSEnumCallbackA;
lpContext: Pointer) : HResult; stdcall;
DirectSoundEnumerate : function (lpDSEnumCallback: TDSEnumCallback;
lpContext: Pointer) : HResult; stdcall;
 
DirectSoundCaptureCreate : function (lpGUID: PGUID;
out lplpDSC: IDirectSoundCapture;
pUnkOuter: IUnknown) : HResult; stdcall;
 
DirectSoundCaptureEnumerateW : function (lpDSEnumCallback: TDSEnumCallbackW;
lpContext: Pointer) : HResult; stdcall;
DirectSoundCaptureEnumerateA : function (lpDSEnumCallback: TDSEnumCallbackA;
lpContext: Pointer) : HResult; stdcall;
DirectSoundCaptureEnumerate : function(lpDSEnumCallback: TDSEnumCallback;
lpContext: Pointer) : HResult; stdcall;
 
 
//
// Return Codes
//
 
const
DS_OK = HResult(S_OK);
DS_NO_VIRTUALIZATION = HResult($878000A);
DSERR_ALLOCATED = HResult($88780000 + 10);
DSERR_CONTROLUNAVAIL = HResult($88780000 + 30);
DSERR_INVALIDPARAM = HResult(E_INVALIDARG);
DSERR_INVALIDCALL = HResult($88780000 + 50);
DSERR_GENERIC = HResult(E_FAIL);
DSERR_PRIOLEVELNEEDED = HResult($88780000 + 70);
DSERR_OUTOFMEMORY = HResult(E_OUTOFMEMORY);
DSERR_BADFORMAT = HResult($88780000 + 100);
DSERR_UNSUPPORTED = HResult(E_NOTIMPL);
DSERR_NODRIVER = HResult($88780000 + 120);
DSERR_ALREADYINITIALIZED = HResult($88780000 + 130);
DSERR_NOAGGREGATION = HResult(CLASS_E_NOAGGREGATION);
DSERR_BUFFERLOST = HResult($88780000 + 150);
DSERR_OTHERAPPHASPRIO = HResult($88780000 + 160);
DSERR_UNINITIALIZED = HResult($88780000 + 170);
DSERR_NOINTERFACE = HResult(E_NOINTERFACE);
DSERR_ACCESSDENIED = HResult(E_ACCESSDENIED);
MAKE_DSHRESULT_ = HResult($88780000);
 
{ Flags }
DS_OK = 0;
 
// The function completed successfully, but we had to substitute the 3D algorithm
DS_NO_VIRTUALIZATION = MAKE_DSHRESULT_ + 10;
 
// The call failed because resources (such as a priority level)
// were already being used by another caller.
DSERR_ALLOCATED = MAKE_DSHRESULT_ + 10;
 
// The control (vol,pan,etc.) requested by the caller is not available.
DSERR_CONTROLUNAVAIL = MAKE_DSHRESULT_ + 30;
 
// An invalid parameter was passed to the returning function
DSERR_INVALIDPARAM = E_INVALIDARG;
 
// This call is not valid for the current state of this object
DSERR_INVALIDCALL = MAKE_DSHRESULT_ + 50;
 
// An undetermined error occured inside the DirectSound subsystem
DSERR_GENERIC = E_FAIL;
 
// The caller does not have the priority level required for the function to
// succeed.
DSERR_PRIOLEVELNEEDED = MAKE_DSHRESULT_ + 70;
 
// Not enough free memory is available to complete the operation
DSERR_OUTOFMEMORY = E_OUTOFMEMORY;
 
// The specified WAVE format is not supported
DSERR_BADFORMAT = MAKE_DSHRESULT_ + 100;
 
// The function called is not supported at this time
DSERR_UNSUPPORTED = E_NOTIMPL;
 
// No sound driver is available for use
DSERR_NODRIVER = MAKE_DSHRESULT_ + 120;
 
// This object is already initialized
DSERR_ALREADYINITIALIZED = MAKE_DSHRESULT_ + 130;
 
// This object does not support aggregation
DSERR_NOAGGREGATION = CLASS_E_NOAGGREGATION;
 
// The buffer memory has been lost, and must be restored.
DSERR_BUFFERLOST = MAKE_DSHRESULT_ + 150;
 
// Another app has a higher priority level, preventing this call from
// succeeding.
DSERR_OTHERAPPHASPRIO = MAKE_DSHRESULT_ + 160;
 
// This object has not been initialized
DSERR_UNINITIALIZED = MAKE_DSHRESULT_ + 170;
 
// The requested COM interface is not available
DSERR_NOINTERFACE = E_NOINTERFACE;
 
// Access is denied
DSERR_ACCESSDENIED = E_ACCESSDENIED;
 
//
// Flags
//
 
DSCAPS_PRIMARYMONO = $00000001;
DSCAPS_PRIMARYSTEREO = $00000002;
DSCAPS_PRIMARY8BIT = $00000004;
11807,11 → 17618,16
DSSPEAKER_SURROUND = $00000005;
DSSPEAKER_5POINT1 = $00000006;
 
DSSPEAKER_GEOMETRY_MIN = $00000005;
DSSPEAKER_GEOMETRY_NARROW = $0000000A;
DSSPEAKER_GEOMETRY_WIDE = $00000014;
DSSPEAKER_GEOMETRY_MAX = $000000B4;
DSSPEAKER_GEOMETRY_MIN = $00000005; // 5 degrees
DSSPEAKER_GEOMETRY_NARROW = $0000000A; // 10 degrees
DSSPEAKER_GEOMETRY_WIDE = $00000014; // 20 degrees
DSSPEAKER_GEOMETRY_MAX = $000000B4; // 180 degrees
 
function DSSPEAKER_COMBINED(c, g: variant) : DWORD;
function DSSPEAKER_CONFIG(a: variant) : byte;
function DSSPEAKER_GEOMETRY(a: variant) : byte;
 
const
DSBCAPS_PRIMARYBUFFER = $00000001;
DSBCAPS_STATIC = $00000002;
DSBCAPS_LOCHARDWARE = $00000004;
11821,8 → 17637,6
DSBCAPS_CTRLPAN = $00000040;
DSBCAPS_CTRLVOLUME = $00000080;
DSBCAPS_CTRLPOSITIONNOTIFY = $00000100;
DSBCAPS_CTRLDEFAULT = $000000E0;
DSBCAPS_CTRLALL = $000001F0;
DSBCAPS_STICKYFOCUS = $00004000;
DSBCAPS_GLOBALFOCUS = $00008000;
DSBCAPS_GETCURRENTPOSITION2 = $00010000;
11833,8 → 17647,8
DSBPLAY_LOCHARDWARE = $00000002;
DSBPLAY_LOCSOFTWARE = $00000004;
DSBPLAY_TERMINATEBY_TIME = $00000008;
DSBPLAY_TERMINATEBY_DISTANCE = $00000010;
DSBPLAY_TERMINATEBY_PRIORITY = $00000020;
DSBPLAY_TERMINATEBY_DISTANCE = $000000010;
DSBPLAY_TERMINATEBY_PRIORITY = $000000020;
 
DSBSTATUS_PLAYING = $00000001;
DSBSTATUS_BUFFERLOST = $00000002;
11867,8 → 17681,8
DS3D_IMMEDIATE = $00000000;
DS3D_DEFERRED = $00000001;
DS3D_MINDISTANCEFACTOR = 0.0;
DS3D_MAXDISTANCEFACTOR = 10.0;
DS3D_MINDISTANCEFACTOR = FLT_MIN;
DS3D_MAXDISTANCEFACTOR = FLT_MAX;
DS3D_DEFAULTDISTANCEFACTOR = 1.0;
 
DS3D_MINROLLOFFFACTOR = 0.0;
11888,11 → 17702,16
 
DS3D_DEFAULTCONEOUTSIDEVOLUME = DSBVOLUME_MAX;
 
DSCCAPS_EMULDRIVER = DSCAPS_EMULDRIVER;
DSCCAPS_EMULDRIVER = $00000020;
DSCCAPS_CERTIFIED = DSCAPS_CERTIFIED;
 
DSCBCAPS_WAVEMAPPED = $80000000;
 
 
 
DSBCAPS_CTRLDEFAULT = $000000E0;
DSBCAPS_CTRLALL = $000001F0;
 
DSCBLOCK_ENTIREBUFFER = $00000001;
 
DSCBSTATUS_CAPTURING = $00000001;
11900,42 → 17719,50
 
DSCBSTART_LOOPING = $00000001;
 
DSBPN_OFFSETSTOP = $FFFFFFFF;
DSBPN_OFFSETSTOP = DWORD(-1);
 
//
// DirectSound3D Algorithms
//
 
// Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000}
DS3DALG_DEFAULT: TGUID = '{00000000-0000-0000-0000-000000000000}';
DS3DALG_NO_VIRTUALIZATION: TGUID = '{C241333F-1C1B-11D2-94F5-00C04FC28ACA}';
DS3DALG_HRTF_FULL: TGUID = '{C2413340-1C1B-11D2-94F5-00C04FC28ACA}';
DS3DALG_HRTF_LIGHT: TGUID = '{C2413342-1C1B-11D2-94F5-00C04FC28ACA}';
 
function DSSPEAKER_COMBINED(c, g: Byte): DWORD;
function DSSPEAKER_CONFIG(a: DWORD): Byte;
function DSSPEAKER_GEOMETRY(a: DWORD): Byte;
// No virtualization {C241333F-1C1B-11d2-94F5-00C04FC28ACA}
DS3DALG_NO_VIRTUALIZATION: TGUID = '';
 
{ DirectSound API }
// High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA}
DS3DALG_HRTF_FULL: TGUID = '{C2413340-1C1B-11d2-94F5-00C04FC28ACA}';
 
type
TDSEnumCallbackW = function(lpGuid: PGUID; lpstrDescription: LPCWSTR;
lpstrModule: LPCWSTR; lpContext: Pointer): BOOL; stdcall;
LPDSENUMCALLBACKW = TDSEnumCallbackW;
// Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA}
DS3DALG_HRTF_LIGHT: TGUID = '{C2413342-1C1B-11d2-94F5-00C04FC28ACA}';
 
TDSEnumCallbackA = function(lpGuid: PGUID; lpstrDescription: LPCSTR;
lpstrModule: LPCSTR; lpContext: Pointer): BOOL; stdcall;
LPDSENUMCALLBACKA = TDSEnumCallbackA;
//DirectMusic file
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* Files: dls1.h dls2.h dmdls.h dmerror.h dmksctrl.h
dmusicc.h dmusici.h dmusicf.h dmusbuff.h
* Content: DirectMusic, DirectSetup
*
* DirectX 7.0 Delphi adaptation by Erik Unger
*
* Modyfied: 10-Sep-2000
*
* Download: http://www.delphi-jedi.org/DelphiGraphics/
* E-Mail: DelphiDirectX@next-reality.com
*
***************************************************************************)
 
TDSEnumCallback = TDSEnumCallbackA;
LPDSENUMCALLBACK = TDSEnumCallback;
 
function DirectSoundCreate(lpGUID: PGUID; out lpDS: IDirectSound; pUnkOuter: IUnknown): HResult; stdcall;
function DirectSoundEnumerateA(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall;
function DirectSoundEnumerateW(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall;
function DirectSoundEnumerate(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall;
function MAKE_HRESULT(sev,fac,code: DWORD) : HResult;
 
function DirectSoundCaptureCreate(lpGUID: PGUID; out lplpDSC: IDirectSoundCapture; pUnkOuter: IUnknown): HResult; stdcall;
function DirectSoundCaptureEnumerateA(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall;
function DirectSoundCaptureEnumerateW(lpDSEnumCallback: TDSEnumCallbackW; lpContext: Pointer): HResult; stdcall;
function DirectSoundCaptureEnumerate(lpDSEnumCallback: TDSEnumCallbackA; lpContext: Pointer): HResult; stdcall;
type
mmioFOURCC = array [0..3] of Char;
 
//==========================================================================;
 
(*==========================================================================;
//
// dls1.h
//
11948,9 → 17775,9
//
// Written by Sonic Foundry 1996. Released for public use.
//
//=========================================================================
//=========================================================================*)
 
////////////////////////////////////////////////////////////////////////////
(*//////////////////////////////////////////////////////////////////////////
//
//
// Layout of an instrument collection:
11993,37 → 17820,37
// 'icmt' 'One of those crazy comments.'
// 'icop' 'Copyright (C) 1996 Sonic Foundry'
//
//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////(*)
 
(*/////////////////////////////////////////////////////////////////////////
// FOURCC's used in the DLS file
////////////////////////////////////////////////////////////////////////(*)
 
///////////////////////////////////////////////////////////////////////////
// FOURCC's used in the DLS file
//////////////////////////////////////////////////////////////////////////
const
FOURCC_DLS = Ord('D') + Ord('L') shl 8 + Ord('S') shl 16 + Ord(' ') shl 24;
FOURCC_DLID = Ord('d') + Ord('l') shl 8 + Ord('i') shl 16 + Ord('d') shl 24;
FOURCC_COLH = Ord('c') + Ord('o') shl 8 + Ord('l') shl 16 + Ord('h') shl 24;
FOURCC_WVPL = Ord('w') + Ord('v') shl 8 + Ord('p') shl 16 + Ord('l') shl 24;
FOURCC_PTBL = Ord('p') + Ord('t') shl 8 + Ord('b') shl 16 + Ord('l') shl 24;
FOURCC_PATH = Ord('p') + Ord('a') shl 8 + Ord('t') shl 16 + Ord('h') shl 24;
FOURCC_wave = Ord('w') + Ord('a') shl 8 + Ord('v') shl 16 + Ord('e') shl 24;
FOURCC_LINS = Ord('l') + Ord('i') shl 8 + Ord('n') shl 16 + Ord('s') shl 24;
FOURCC_INS = Ord('i') + Ord('n') shl 8 + Ord('s') shl 16 + Ord(' ') shl 24;
FOURCC_INSH = Ord('i') + Ord('n') shl 8 + Ord('s') shl 16 + Ord('h') shl 24;
FOURCC_LRGN = Ord('l') + Ord('r') shl 8 + Ord('g') shl 16 + Ord('n') shl 24;
FOURCC_RGN = Ord('r') + Ord('g') shl 8 + Ord('n') shl 16 + Ord(' ') shl 24;
FOURCC_RGNH = Ord('r') + Ord('g') shl 8 + Ord('n') shl 16 + Ord('h') shl 24;
FOURCC_LART = Ord('l') + Ord('a') shl 8 + Ord('r') shl 16 + Ord('t') shl 24;
FOURCC_ART1 = Ord('a') + Ord('r') shl 8 + Ord('t') shl 16 + Ord('1') shl 24;
FOURCC_WLNK = Ord('w') + Ord('l') shl 8 + Ord('n') shl 16 + Ord('k') shl 24;
FOURCC_WSMP = Ord('w') + Ord('s') shl 8 + Ord('m') shl 16 + Ord('p') shl 24;
//FOURCC_VERS = Ord('v') + Ord('e') shl 8 + Ord('r') shl 16 + Ord('s') shl 24;
FOURCC_DLS : mmioFOURCC = ('D','L','S',' ');
FOURCC_DLID : mmioFOURCC = ('d','l','i','d');
FOURCC_COLH : mmioFOURCC = ('c','o','l','h');
FOURCC_WVPL : mmioFOURCC = ('w','v','p','l');
FOURCC_PTBL : mmioFOURCC = ('p','t','b','l');
FOURCC_PATH : mmioFOURCC = ('p','a','t','h');
FOURCC_wave : mmioFOURCC = ('w','a','v','e');
FOURCC_LINS : mmioFOURCC = ('l','i','n','s');
FOURCC_INS : mmioFOURCC = ('i','n','s',' ');
FOURCC_INSH : mmioFOURCC = ('i','n','s','h');
FOURCC_LRGN : mmioFOURCC = ('l','r','g','n');
FOURCC_RGN : mmioFOURCC = ('r','g','n',' ');
FOURCC_RGNH : mmioFOURCC = ('r','g','n','h');
FOURCC_LART : mmioFOURCC = ('l','a','r','t');
FOURCC_ART1 : mmioFOURCC = ('a','r','t','1');
FOURCC_WLNK : mmioFOURCC = ('w','l','n','k');
FOURCC_WSMP : mmioFOURCC = ('w','s','m','p');
//FOURCC_VERS : mmioFOURCC = ('v','e','r','s');
 
///////////////////////////////////////////////////////////////////////////
(*/////////////////////////////////////////////////////////////////////////
// Articulation connection graph definitions
//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////(*)
 
// Generic Sources
(* Generic Sources *)
CONN_SRC_NONE = $0000;
CONN_SRC_LFO = $0001;
CONN_SRC_KEYONVELOCITY = $0002;
12032,133 → 17859,126
CONN_SRC_EG2 = $0005;
CONN_SRC_PITCHWHEEL = $0006;
 
// Midi Controllers 0-127
(* Midi Controllers 0-127 *)
CONN_SRC_CC1 = $0081;
CONN_SRC_CC7 = $0087;
CONN_SRC_CC10 = $008A;
CONN_SRC_CC11 = $008B;
CONN_SRC_CC10 = $008a;
CONN_SRC_CC11 = $008b;
 
// Generic Destinations
(* Generic Destinations *)
CONN_DST_NONE = $0000;
CONN_DST_ATTENUATION = $0001;
CONN_DST_PITCH = $0003;
CONN_DST_PAN = $0004;
 
// LFO Destinations
(* LFO Destinations *)
CONN_DST_LFO_FREQUENCY = $0104;
CONN_DST_LFO_STARTDELAY = $0105;
 
// EG1 Destinations
(* EG1 Destinations *)
CONN_DST_EG1_ATTACKTIME = $0206;
CONN_DST_EG1_DECAYTIME = $0207;
CONN_DST_EG1_RELEASETIME = $0209;
CONN_DST_EG1_SUSTAINLEVEL = $020A;
CONN_DST_EG1_SUSTAINLEVEL = $020a;
 
// EG2 Destinations
CONN_DST_EG2_ATTACKTIME = $030A;
CONN_DST_EG2_DECAYTIME = $030B;
CONN_DST_EG2_RELEASETIME = $030D;
CONN_DST_EG2_SUSTAINLEVEL = $030E;
(* EG2 Destinations *)
CONN_DST_EG2_ATTACKTIME = $030a;
CONN_DST_EG2_DECAYTIME = $030b;
CONN_DST_EG2_RELEASETIME = $030d;
CONN_DST_EG2_SUSTAINLEVEL = $030e;
 
CONN_TRN_NONE = $0000;
CONN_TRN_CONCAVE = $0001;
 
type
TDLSID = record
ulData1 : Cardinal;
PDLSId = ^TDLSId;
TDLSId = packed record
ulData1 : ULONG;
usData2 : Word;
usData3 : Word;
abData4 : array[0..7] of Byte;
abData4 : array [0..7] of BYTE;
end;
DLSID = TDLSID;
LPDLSID = ^DLSID;
 
{TDLSVERSION = record
dwVersionMS : DWORD;
dwVersionLS : DWORD;
end;
DLSVERSION = TDLSVERSION;
LPDLSVERSION = ^DLSVERSION;
}
TCONNECTION = record
// PDLSVersion = ^TDLSVersion;
// TDLSVersion = packed record
// dwVersionMS,
// dwVersionLS : DWORD;
// end;
 
PConnection = ^TConnection;
TConnection = packed record
usSource : Word;
usControl : Word;
usDestination : Word;
SuDestination : Word;
usTransform : Word;
lScale : Cardinal;
lScale : LongInt;
end;
CONNECTION = TCONNECTION;
LPCONNECTION = ^CONNECTION;
 
// Level 1 Articulation Data
(* Level 1 Articulation Data *)
 
TCONNECTIONLIST = record
cbSize : Cardinal; // size of the connection list structure
cConnections : Cardinal; // count of connections in the list
PConnectionList = ^TConnectionList;
TConnectionList = packed record
cbSize : ULONG; (* size of the connection list structure *)
cConnections : ULONG; (* count of connections in the list *)
end;
CONNECTIONLIST = TCONNECTIONLIST;
LPCONNECTIONLIST = ^CONNECTIONLIST;
 
///////////////////////////////////////////////////////////////////////////
(*/////////////////////////////////////////////////////////////////////////
// Generic type defines for regions and instruments
//////////////////////////////////////////////////////////////////////////
type
TRGNRANGE = record
////////////////////////////////////////////////////////////////////////(*)
 
PRGNRange = ^TRGNRange;
TRGNRange = packed record
usLow : Word;
usHigh : Word;
end;
RGNRANGE = TRGNRANGE;
LPRGNRANGE = ^RGNRANGE;
 
const
FTINSTRUMENTTDRUMS = $80000000;
F_INSTRUMENT_DRUMS = $80000000;
 
type
TMIDILOCALE = record
ulBank : Cardinal;
ulInstrument : Cardinal;
PMIDILocale = ^TMIDILocale;
TMIDILocale = packed record
ulBank : ULONG;
ulInstrument : ULONG;
end;
MIDILOCALE = TMIDILOCALE;
LPMIDILOCALE = ^MIDILOCALE;
 
///////////////////////////////////////////////////////////////////////////
(*/////////////////////////////////////////////////////////////////////////
// Header structures found in an DLS file for collection, instruments, and
// regions.
//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////(*)
 
const
F_RGN_OPTION_SELFNONEXCLUSIVE = $0001;
 
type
TRGNHEADER = record
RangeKey : RGNRANGE; // Key range
RangeVelocity : RGNRANGE; // Velocity Range
fusOptions : Word; // Synthesis options for this range
usKeyGroup : Word; // Key grouping for non simultaneous play
end; // 0 = no group, 1 up is group
// for Level 1 only groups 1-15 are allowed
RGNHEADER = TRGNHEADER;
LPRGNHEADER = ^RGNHEADER;
PRGNHeader = ^TRGNHeader;
TRGNHeader = packed record
RangeKey : TRGNRange; (* Key range *)
RangeVelocity : TRGNRange; (* Velocity Range *)
fusOptions : Word ; (* Synthesis options for this range *)
usKeyGroup : Word ; (* Key grouping for non simultaneous play *)
(* 0 = no group, 1 up is group *)
(* for Level 1 only groups 1-15 are allowed *)
end;
 
TINSTHEADER = record
cRegions : Cardinal; // Count of regions in this instrument
Locale : MIDILOCALE; // Intended MIDI locale of this instrument
PInstHeader = ^TInstHeader;
TInstHeader = packed record
cRegions : ULONG; (* Count of regions in this instrument *)
Locale : TMIDILocale; (* Intended MIDI locale of this instrument *)
end;
INSTHEADER = TINSTHEADER;
LPINSTHEADER = ^INSTHEADER;
 
TDLSHEADER = record
cInstruments : Cardinal; // Count of instruments in the collection
PDLSHeader = ^TDLSHeader;
TDLSHeader = packed record
cInstruments : ULONG;
end;
DLSHEADER = TDLSHEADER;
LPDLSHEADER = ^DLSHEADER;
 
//////////////////////////////////////////////////////////////////////////////
(*////////////////////////////////////////////////////////////////////////////
// definitions for the Wave link structure
/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////(*)
 
// **** For level 1 only WAVELINK_CHANNEL_MONO is valid ****
// ulChannel allows for up to 32 channels of audio with each bit position
// specifiying a channel of playback
(* **** For level 1 only WAVELINK_CHANNEL_MONO is valid **** *)
(* ulChannel allows for up to 32 channels of audio with each bit position *)
(* specifiying a channel of playback *)
 
const
WAVELINK_CHANNEL_LEFT = $0001;
12167,69 → 17987,65
F_WAVELINK_PHASE_MASTER = $0001;
 
type
TWAVELINK = record // any paths or links are stored right after struct
fusOptions : Word; // options flags for this wave
usPhaseGroup : Word; // Phase grouping for locking channels
ulChannel : Cardinal; // channel placement
ulTableIndex : Cardinal; // index into the wave pool table, 0 based
PWaveLink = ^TWaveLink;
TWaveLink = packed record (* any paths or links are stored right after struct *)
fusOptions : Word; (* options flags for this wave *)
usPhaseGroup : Word; (* Phase grouping for locking channels *)
ulChannel : ULONG; (* channel placement *)
ulTableIndex : ULONG; (* index into the wave pool table, 0 based *)
end;
WAVELINK = TWAVELINK;
LPWAVELINK = ^WAVELINK;
 
const
POOL_CUE_NULL = $FFFFFFFF;
POOL_CUE_NULL = $ffffffff;
 
type
TPOOLCUE = record
ulOffset : Cardinal; // Offset to the entry in the list
PPoolCUE = ^TPoolCUE;
TPoolCUE = packed record
ulOffset : ULONG;
end;
POOLCUE = TPOOLCUE;
LPPOOLCUE = ^POOLCUE;
 
TPOOLTABLE = record
cbSize : Cardinal; // size of the pool table structure
cCues : Cardinal; // count of cues in the list
PPoolTable = ^TPoolTable;
TPoolTable = packed record
cbSize : ULONG; (* size of the pool table structure *)
cCues : ULONG; (* count of cues in the list *)
end;
POOLTABLE = TPOOLTABLE;
LPPOOLTABLE = ^POOLTABLE;
 
//////////////////////////////////////////////////////////////////////////////
(*////////////////////////////////////////////////////////////////////////////
// Structures for the "wsmp" chunk
/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////(*)
 
const
F_WSMP_NO_TRUNCATION = $0001;
F_WSMP_NO_COMPRESSION = $0002;
 
type
Trwsmp = record
cbSize : Cardinal;
usUnityNote : Word; // MIDI Unity Playback Note
sFineTune : Smallint; // Fine Tune in log tuning
lAttenuation : Longint; // Overall Attenuation to be applied to data
fulOptions : Cardinal; // Flag options
cSampleLoops : Cardinal; // Count of Sample loops, 0 loops is one shot
PWSMPL = ^TWSMPL;
TWSMPL = packed record
cbSize : ULONG;
usUnityNote : Word; (* MIDI Unity Playback Note *)
sFineTune : SmallInt; (* Fine Tune in log tuning *)
lAttenuation : Integer; (* Overall Attenuation to be applied to data *)
fulOptions : ULONG; (* Flag options *)
cSampleLoops : ULONG; (* Count of Sample loops, 0 loops is one shot *)
end;
WSMPL = Trwsmp;
LPWSMPL = ^WSMPL;
 
 
// This loop type is a normal forward playing loop which is continually
// played until the envelope reaches an off threshold in the release
// portion of the volume envelope
(* This loop type is a normal forward playing loop which is continually *)
(* played until the envelope reaches an off threshold in the release *)
(* portion of the volume envelope *)
 
const
WLOOP_TYPE_FORWARD = 0;
 
type
Trloop = record
cbSize : Cardinal;
ulType : Cardinal; // Loop Type
ulStart : Cardinal; // Start of loop in samples
ulLength : Cardinal; // Length of loop in samples
TWLoop = packed record
cbSize : ULONG;
ulType : ULONG; (* Loop Type *)
ulStart : ULONG; (* Start of loop in samples *)
ulLength : ULONG; (* Length of loop in samples *)
end;
WLOOP = Trloop;
LPWLOOP = ^WLOOP;
 
{/*
(*******************************************************************************
 
dls2.h
 
12240,940 → 18056,931
 
Written by Microsoft 1998. Released for public use.
 
}
*******************************************************************************)
 
(*
FOURCC's used in the DLS2 file, in addition to DLS1 chunks
*)
const
//
// FOURCC's used in the DLS2 file, in addition to DLS1 chunks
///
FOURCC_RGN2 : mmioFOURCC = ('r','g','n','2');
FOURCC_LAR2 : mmioFOURCC = ('l','a','r','2');
FOURCC_ART2 : mmioFOURCC = ('a','r','t','2');
FOURCC_CDL : mmioFOURCC = ('c','d','l',' ');
// FOURCC_DLID : mmioFOURCC = ('d','l','i','d');
 
FOURCC_RGN2 = Ord('r') + Ord('g') shl 8 + Ord('n') shl 16 + Ord('2') shl 24;
FOURCC_LAR2 = Ord('l') + Ord('a') shl 8 + Ord('r') shl 16 + Ord('2') shl 24;
FOURCC_ART2 = Ord('a') + Ord('r') shl 8 + Ord('t') shl 16 + Ord('2') shl 24;
FOURCC_CDL = Ord('c') + Ord('d') shl 8 + Ord('l') shl 16 + Ord(' ') shl 24;
//FOURCC_DLID = Ord('d') + Ord('l') shl 8 + Ord('i') shl 16 + Ord('d') shl 24;
(*
Articulation connection graph definitions. These are in addition to
the definitions in the DLS1 header.
*)
 
//
// Articulation connection graph definitions. These are in addition to
// the definitions in the DLS1 header.
///
const
(* Generic Sources (in addition to DLS1 sources. *)
CONN_SRC_POLYPRESSURE = $0007; (* Polyphonic Pressure *)
CONN_SRC_CHANNELPRESSURE = $0008; (* Channel Pressure *)
CONN_SRC_VIBRATO = $0009; (* Vibrato LFO *)
CONN_SRC_MONOPRESSURE = $000a; (* MIDI Mono pressure *)
 
// Generic Sources (in addition to DLS1 sources.
CONN_SRC_POLYPRESSURE = $0007; // Polyphonic Pressure
CONN_SRC_CHANNELPRESSURE = $0008; // Channel Pressure
CONN_SRC_VIBRATO = $0009; // Vibrato LFO
CONN_SRC_MONOPRESSURE = $000a; // MIDI Mono pressure
 
(* Midi Controllers *)
CONN_SRC_CC91 = $00db; (* Reverb Send *)
CONN_SRC_CC93 = $00dd; (* Chorus Send *)
 
// Midi Controllers
CONN_SRC_CC91 = $00db; // Reverb Send
CONN_SRC_CC93 = $00dd; // Chorus Send
 
(* Generic Destinations *)
CONN_DST_GAIN = $0001; (* Same as CONN_DST_ ATTENUATION *)
CONN_DST_KEYNUMBER = $0005; (* Key Number Generator *)
 
// Generic Destinations
CONN_DST_GAIN = $0001; // Same as CONN_DST_ ATTENUATION
CONN_DST_KEYNUMBER = $0005; // Key Number Generator
(* Audio Channel Output Destinations *)
CONN_DST_LEFT = $0010; (* Left Channel Send *)
CONN_DST_RIGHT = $0011; (* Right Channel Send *)
CONN_DST_CENTER = $0012; (* Center Channel Send *)
CONN_DST_LEFTREAR = $0013; (* Left Rear Channel Send *)
CONN_DST_RIGHTREAR = $0014; (* Right Rear Channel Send *)
CONN_DST_LFE_CHANNEL = $0015; (* LFE Channel Send *)
CONN_DST_CHORUS = $0080; (* Chorus Send *)
CONN_DST_REVERB = $0081; (* Reverb Send *)
 
// Audio Channel Output Destinations
CONN_DST_LEFT = $0010; // Left Channel Send
CONN_DST_RIGHT = $0011; // Right Channel Send
CONN_DST_CENTER = $0012; // Center Channel Send
CONN_DST_LEFTREAR = $0013; // Left Rear Channel Send
CONN_DST_RIGHTREAR = $0014; // Right Rear Channel Send
CONN_DST_LFE_CHANNEL = $0015; // LFE Channel Send
CONN_DST_CHORUS = $0080; // Chorus Send
CONN_DST_REVERB = $0081; // Reverb Send
(* Vibrato LFO Destinations *)
CONN_DST_VIB_FREQUENCY = $0114; (* Vibrato Frequency *)
CONN_DST_VIB_STARTDELAY = $0115; (* Vibrato Start Delay *)
 
// Vibrato LFO Destinations
CONN_DST_VIB_FREQUENCY = $0114; // Vibrato Frequency
CONN_DST_VIB_STARTDELAY = $0115; // Vibrato Start Delay
(* EG1 Destinations *)
CONN_DST_EG1_DELAYTIME = $020B; (* EG1 Delay Time *)
CONN_DST_EG1_HOLDTIME = $020C; (* EG1 Hold Time *)
 
// EG1 Destinations
CONN_DST_EG1_DELAYTIME = $020B; // EG1 Delay Time
CONN_DST_EG1_HOLDTIME = $020C; // EG1 Hold Time
 
(* EG2 Destinations *)
CONN_DST_EG2_DELAYTIME = $030F; (* EG2 Delay Time *)
CONN_DST_EG2_HOLDTIME = $0310; (* EG2 Hold Time *)
 
// EG2 Destinations
CONN_DST_EG2_DELAYTIME = $030F; // EG2 Delay Time
CONN_DST_EG2_HOLDTIME = $0310; // EG2 Hold Time
 
(* Filter Destinations *)
CONN_DST_FILTER_CUTOFF = $0500; (* Filter Cutoff Frequency *)
CONN_DST_FILTER_Q = $0501; (* Filter Resonance *)
 
// Filter Destinations
CONN_DST_FILTER_CUTOFF = $0500; // Filter Cutoff Frequency
CONN_DST_FILTER_Q = $0501; // Filter Resonance
 
(* Transforms *)
CONN_TRN_CONVEX = $0002; (* Convex Transform *)
CONN_TRN_SWITCH = $0003; (* Switch Transform *)
 
// Transforms
CONN_TRN_CONVEX = $0002; // Convex Transform
CONN_TRN_SWITCH = $0003; // Switch Transform
 
(* Conditional chunk operators *)
DLS_CDL_AND = $0001; (* X = X & Y *)
DLS_CDL_OR = $0002; (* X = X | Y *)
DLS_CDL_XOR = $0003; (* X = X ^ Y *)
DLS_CDL_ADD = $0004; (* X = X + Y *)
DLS_CDL_SUBTRACT = $0005; (* X = X - Y *)
DLS_CDL_MULTIPLY = $0006; (* X = X * Y *)
DLS_CDL_DIVIDE = $0007; (* X = X / Y *)
DLS_CDL_LOGICAL_AND = $0008; (* X = X && Y *)
DLS_CDL_LOGICAL_OR = $0009; (* X = X || Y *)
DLS_CDL_LT = $000A; (* X = (X < Y) *)
DLS_CDL_LE = $000B; (* X = (X <= Y) *)
DLS_CDL_GT = $000C; (* X = (X > Y) *)
DLS_CDL_GE = $000D; (* X = (X >= Y) *)
DLS_CDL_EQ = $000E; (* X = (X == Y) *)
DLS_CDL_NOT = $000F; (* X = !X *)
DLS_CDL_CONST = $0010; (* 32-bit constant *)
DLS_CDL_QUERY = $0011; (* 32-bit value returned from query *)
DLS_CDL_QUERYSUPPORTED = $0012; (* Test to see if DLSID Query is supported *)
 
// Conditional chunk operators
DLS_CDL_AND = $0001; // X = X & Y
DLS_CDL_OR = $0002; // X = X | Y
DLS_CDL_XOR = $0003; // X = X ^ Y
DLS_CDL_ADD = $0004; // X = X + Y
DLS_CDL_SUBTRACT = $0005; // X = X - Y
DLS_CDL_MULTIPLY = $0006; // X = X * Y
DLS_CDL_DIVIDE = $0007; // X = X / Y
DLS_CDL_LOGICAL_AND = $0008; // X = X && Y
DLS_CDL_LOGICAL_OR = $0009; // X = X || Y
DLS_CDL_LT = $000A; // X = (X < Y)
DLS_CDL_LE = $000B; // X = (X <= Y)
DLS_CDL_GT = $000C; // X = (X > Y)
DLS_CDL_GE = $000D; // X = (X >= Y)
DLS_CDL_EQ = $000E; // X = (X == Y)
DLS_CDL_NOT = $000F; // X = !X
DLS_CDL_CONST = $0010; // 32-bit constant
DLS_CDL_QUERY = $0011; // 32-bit value returned from query
DLS_CDL_QUERYSUPPORTED = $0012; // Test to see if DLSID Query is supported
(*
Loop and release
*)
 
//Loop and release
 
WLOOP_TYPE_RELEASE = 2;
 
//DLSID queries for <cdl-ck>
(*
DLSID queries for <cdl-ck>
*)
 
DLSID_GMInHardware : TGUID = '{178F2F24-C364-11D1-A760-0000F875AC12}';
DLSID_GSInHardware : TGUID = '{178F2F25-C364-11D1-A760-0000F875AC12}';
DLSID_XGInHardware : TGUID = '{178F2F26-C364-11D1-A760-0000F875AC12}';
DLSID_SupportsDLS1 : TGUID = '{178F2F27-C364-11D1-A760-0000F875AC12}';
DLSID_SupportsDLS2 : TGUID = '{F14599E5-4689-11D2-AFA6-00AA0024D8B6}';
DLSID_SampleMemorySize : TGUID = '{178F2F28-C364-11D1-A760-0000F875AC12}';
DLSID_ManufacturersID : TGUID = '{B03E1181-8095-11D2-A1EF-00600833DBD8}';
DLSID_ProductID : TGUID = '{B03E1182-8095-11D2-A1EF-00600833DBD8}';
DLSID_SamplePlaybackRate : TGUID = '{2A91F713-A4BF-11D2-BBDF-00600833DBD8}';
DLSID_GMInHardware : TGUID = '{178f2f24-c364-11d1-a760-0000f875ac12}';
DLSID_GSInHardware : TGUID = '{178f2f25-c364-11d1-a760-0000f875ac12}';
DLSID_XGInHardware : TGUID = '{178f2f26-c364-11d1-a760-0000f875ac12}';
DLSID_SupportsDLS1 : TGUID = '{178f2f27-c364-11d1-a760-0000f875ac12}';
DLSID_SupportsDLS2 : TGUID = '{f14599e5-4689-11d2-afa6-00aa0024d8b6}';
DLSID_SampleMemorySize : TGUID = '{178f2f28-c364-11d1-a760-0000f875ac12}';
DLSID_ManufacturersID : TGUID = '{b03e1181-8095-11d2-a1ef-00600833dbd8}';
DLSID_ProductID : TGUID = '{b03e1182-8095-11d2-a1ef-00600833dbd8}';
DLSID_SamplePlaybackRate : TGUID = '{2a91f713-a4bf-11d2-bbdf-00600833dbd8}';
 
//***********************************************************************
// *
// dmdls.h -- DLS download definitions for DirectMusic API's *
// *
// Copyright (c) 1998, Microsoft Corp. All rights reserved. *
// *
//**********************************************************************
(************************************************************************
* *
* dmdls.h -- DLS download definitions for DirectMusic API's *
* *
* Copyright (c) 1998, Microsoft Corp. All rights reserved. *
* *
************************************************************************)
 
type
PCENT = Longint; // Pitch cents
GCENT = Longint; // Gain cents
TCENT = Longint; // Time cents
PERCENT = Longint; // Per.. cent!
TPCent = LongInt; (* Pitch cents *)
TGCent = LongInt; (* Gain cents *)
TTCent = LongInt; (* Time cents *)
TPercent = LongInt; (* Per.. cent! *)
 
PReference_Time = ^TReference_Time;
TReference_Time = LONGLONG;
TReference_Time = LongLong;
 
Reference_Time = TReference_Time;
LPREFERENCE_TIME = PReference_Time;
TFourCC = DWORD; (* a four character code *)
 
function MAKEFOURCC(ch0, ch1, ch2, ch3: Char) : DWORD;
//function MAKEFOURCC (ch0, ch1, ch2, ch3: Char) : TFourCC;
 
type
FOURCC = DWORD; // a four character code
 
TDMUS_DOWNLOADINFO = record
dwDLType : DWORD; // Instrument or Wave
dwDLId : DWORD; // Unique identifier to tag this download.
dwNumOffsetTableEntries : DWORD; // Number of index in the offset address table.
cbSize : DWORD; // Total size of this memory chunk.
TDMus_DownloadInfor = packed record
dwDLType: DWORD; (* Instrument or Wave *)
dwDLId: DWORD; (* Unique identifier to tag this download. *)
dwNumOffsetTableEntries: DWORD; (* Number of index in the offset address table. *)
cbSize: DWORD; (* Total size of this memory chunk. *)
end;
DMUS_DOWNLOADINFO = TDMUS_DOWNLOADINFO;
 
const
DMUS_DOWNLOADINFO_INSTRUMENT = 1;
DMUS_DOWNLOADINFO_WAVE = 2;
DMUS_DOWNLOADINFO_INSTRUMENT2 = 3; (* New version for better DLS2 support. *)
 
DMUS_DEFAULT_SIZE_OFFSETTABLE = 1;
 
// Flags for DMUS_INSTRUMENT's ulFlags member
(* Flags for DMUS_INSTRUMENT's ulFlags member *)
 
DMUS_INSTRUMENT_GM_INSTRUMENT = 1; // (1 << 0) ????
DMUS_INSTRUMENT_GM_INSTRUMENT = 1 shl 0;
 
type
TDMUS_OFFSETTABLE = record
ulOffsetTable : array [0..DMUS_DEFAULT_SIZE_OFFSETTABLE] of Cardinal;
TDMus_OffsetTable = packed record
ulOffsetTable : array [0..DMUS_DEFAULT_SIZE_OFFSETTABLE-1] of ULONG;
end;
DMUS_OFFSETTABLE = TDMUS_OFFSETTABLE;
 
TDMUS_INSTRUMENT = record
ulPatch : Cardinal;
ulFirstRegionIdx : Cardinal;
ulGlobalArtIdx : Cardinal; // If zero the instrument does not have an articulation
ulFirstExtCkIdx : Cardinal; // If zero no 3rd party entenstion chunks associated with the instrument
ulCopyrightIdx : Cardinal; // If zero no Copyright information associated with the instrument
ulFlags : Cardinal;
TDMus_Instrument = packed record
ulPatch: ULONG;
ulFirstRegionIdx: ULONG;
ulGlobalArtIdx: ULONG; (* If zero the instrument does not have an articulation *)
ulFirstExtCkIdx: ULONG; (* If zero no 3rd party entenstion chunks associated with the instrument *)
ulCopyrightIdx: ULONG; (* If zero no Copyright information associated with the instrument *)
ulFlags: ULONG;
end;
DMUS_INSTRUMENT = TDMUS_INSTRUMENT;
 
TDMUS_REGION = record
RangeKey : RGNRANGE;
RangeVelocity : RGNRANGE;
TDMus_Region = packed record
RangeKey: TRGNRange;
RangeVelocity: TRGNRange;
fusOptions : Word;
usKeyGroup : Word;
ulRegionArtIdx : Cardinal; // If zero the region does not have an articulation
ulNextRegionIdx : Cardinal; // If zero no more regions
ulFirstExtCkIdx : Cardinal; // If zero no 3rd party entenstion chunks associated with the region
WaveLink : WAVELINK;
WSMP : WSMPL; // If WSMP.cSampleLoops > 1 then a WLOOP is included
WLOOP : array[0..0] of WLOOP;
ulRegionArtIdx: ULONG; (* If zero the region does not have an articulation *)
ulNextRegionIdx: ULONG; (* If zero no more regions *)
ulFirstExtCkIdx: ULONG; (* If zero no 3rd party entenstion chunks associated with the region *)
WaveLink: TWaveLink;
WSMP: TWSMPL; (* If WSMP.cSampleLoops > 1 then a WLOOP is included *)
WLOOP: array [0..0] of TWLoop;
end;
DMUS_REGION = TDMUS_REGION;
 
TDMUS_LFOPARAMS = record
pcFrequency : PCENT;
tcDelay : TCENT;
gcVolumeScale : GCENT;
pcPitchScale : PCENT;
gcMWToVolume : GCENT;
pcMWToPitch : PCENT;
TDMus_LFOParams = packed record
pcFrequency: TPCent;
tcDelay: TTCent;
gcVolumeScale: TGCent;
pcPitchScale: TPCent;
gcMWToVolume: TGCent;
pcMWToPitch: TPCent;
end;
DMUS_LFOPARAMS = TDMUS_LFOPARAMS;
 
TDMUS_VEGPARAMS = record
tcAttack : TCENT;
tcDecay : TCENT;
ptSustain : PERCENT;
tcRelease : TCENT;
tcVel2Attack : TCENT;
tcKey2Decay : TCENT;
TDMus_VEGParams = packed record
tcAttack: TTCent;
tcDecay: TTCent;
ptSustain: TPercent;
tcRelease: TTCent;
tcVel2Attack: TTCent;
tcKey2Decay: TTCent;
end;
DMUS_VEGPARAMS = TDMUS_VEGPARAMS;
 
TDMUS_PEGPARAMS = record
tcAttack : TCENT;
tcDecay : TCENT;
ptSustain : PERCENT;
tcRelease : TCENT;
tcVel2Attack : TCENT;
tcKey2Decay : TCENT;
pcRange : PCENT;
TDMus_PEGParams = packed record
tcAttack: TTCent;
tcDecay: TTCent;
ptSustain: TPercent;
tcRelease: TTCent;
tcVel2Attack: TTCent;
tcKey2Decay: TTCent;
pcRange: TPCent;
end;
DMUS_PEGPARAMS = TDMUS_PEGPARAMS;
 
TDMUS_MSCPARAMS = record
ptDefaultPan : PERCENT;
TDMus_MSCParams = packed record
ptDefaultPan: TPercent;
end;
DMUS_MSCPARAMS = TDMUS_MSCPARAMS;
 
TDMUS_ARTICPARAMS = record
LFO : DMUS_LFOPARAMS;
VolEG : DMUS_VEGPARAMS;
PitchEG : DMUS_PEGPARAMS;
Misc : DMUS_MSCPARAMS;
TDMus_ArticParams = packed record
LFO: TDMus_LFOParams;
VolEG: TDMus_VEGParams;
PitchEG: TDMus_PEGParams;
Misc: TDMus_MSCParams;
end;
DMUS_ARTICPARAMS = TDMUS_ARTICPARAMS;
 
TDMUS_ARTICULATION = record
ulArt1Idx : Cardinal; // If zero no DLS Level 1 articulation chunk
ulFirstExtCkIdx : Cardinal; // If zero no 3rd party entenstion chunks associated with the articulation
ulNextArtIdx : Cardinal; // Additional articulation chunks
TDMus_Articulation = packed record
ulArt1Idx: ULONG; (* If zero no DLS Level 1 articulation chunk *)
ulFirstExtCkIdx: ULONG; (* If zero no 3rd party entenstion chunks associated with the articulation *)
end;
DMUS_ARTICULATION = TDMUS_ARTICULATION;
 
TDMUS_ARTICULATION2 = record
ulArt1Idx : Cardinal; // If zero no DLS Level 1 articulation chunk
ulFirstExtCkIdx : Cardinal; // If zero no 3rd party entenstion chunks associated with the articulation
end;
DMUS_ARTICULATION2 = TDMUS_ARTICULATION2;
 
const
DMUS_MIN_DATA_SIZE = 4;
// The actual number is determined by cbSize of struct _DMUS_EXTENSIONCHUNK
 
(* The actual number is determined by cbSize of struct _DMUS_EXTENSIONCHUNK *)
 
type
TDMUS_EXTENSIONCHUNK = record
cbSize : Cardinal; // Size of extension chunk
ulNextExtCkIdx : Cardinal; // If zero no more 3rd party entenstion chunks
ExtCkID : FOURCC;
byExtCk : array[0..DMUS_MIN_DATA_SIZE - 1] of Byte; // The actual number that follows is determined by cbSize
DMus_ExtensionChunk = packed record
cbSize: ULONG; (* Size of extension chunk *)
ulNextExtCkIdx: ULONG; (* If zero no more 3rd party entenstion chunks *)
ExtCkID: TFourCC;
byExtCk: array [0..DMUS_MIN_DATA_SIZE-1] of BYTE; (* The actual number that follows is determined by cbSize *)
end;
DMUS_EXTENSIONCHUNK = TDMUS_EXTENSIONCHUNK;
 
// The actual number is determined by cbSize of struct TDMUS_COPYRIGHT
(* The actual number is determined by cbSize of struct _DMUS_COPYRIGHT *)
 
TDMUS_COPYRIGHT = record
cbSize : Cardinal; // Size of copyright information
byCopyright : array[0..DMUS_MIN_DATA_SIZE - 1] of Byte; // The actual number that follows is determined by cbSize
TDmus_Copyright = packed record
cbSize: ULONG; (* Size of copyright information *)
byCopyright: array [0..DMUS_MIN_DATA_SIZE-1] of BYTE; (* The actual number that follows is determined by cbSize *)
end;
DMUS_COPYRIGHT = TDMUS_COPYRIGHT;
 
TDMUS_WAVEDATA = record
cbSize : Cardinal;
byData : array[0..DMUS_MIN_DATA_SIZE - 1] of Byte;
TDMus_WaveData = packed record
cbSize: ULONG;
byData: array [0..DMUS_MIN_DATA_SIZE-1] of BYTE;
end;
DMUS_WAVEDATA = TDMUS_WAVEDATA;
 
TDMUS_WAVE = record
ulFirstExtCkIdx : Cardinal; // If zero no 3rd party entenstion chunks associated with the wave
ulCopyrightIdx : Cardinal; // If zero no Copyright information associated with the wave
ulWaveDataIdx : Cardinal; // Location of actual wave data.
WaveformatEx : TWAVEFORMATEX;
TDMus_Wave = packed record
ulFirstExtCkIdx: ULONG; (* If zero no 3rd party entenstion chunks associated with the wave *)
ulCopyrightIdx: ULONG; (* If zero no Copyright information associated with the wave *)
ulWaveDataIdx: ULONG; (* Location of actual wave data. *)
/// WaveformatEx: TWaveFormatEx;
end;
DMUS_WAVE = TDMUS_WAVE;
 
LPDMUS_NOTERANGE = ^TDMUS_NOTERANGE;
TDMUS_NOTERANGE = record
dwLowNote : DWORD; // Sets the low note for the range of MIDI note events to which the instrument responds.
dwHighNote : DWORD; // Sets the high note for the range of MIDI note events to which the instrument responds.
PDMus_NoteRange = ^TDMus_NoteRange;
TDMus_NoteRange = packed record
dwLowNote: DWORD; (* Sets the low note for the range of MIDI note events to which the instrument responds.*)
dwHighNote: DWORD; (* Sets the high note for the range of MIDI note events to which the instrument responds.*)
end;
DMUS_NOTERANGE = TDMUS_NOTERANGE;
 
(************************************************************************
* *
* dmerror.h -- Error code returned by DirectMusic API's *
* *
* Copyright (c) 1998, Microsoft Corp. All rights reserved. *
* *
************************************************************************)
 
const
FACILITY_DIRECTMUSIC = $878; (* Shared with DirectSound *)
DMUS_ERRBASE = $1000; (* Make error codes human readable in hex *)
 
MAKE_DMHRESULTSUCCESS = (0 shl 31) or (FACILITY_DIRECTMUSIC shl 16) or DMUS_ERRBASE;
MAKE_DMHRESULTERROR = (1 shl 31) or (FACILITY_DIRECTMUSIC shl 16) or DMUS_ERRBASE;
 
 
//***********************************************************************
// *
// dmerror.h -- Error code returned by DirectMusic API's *
// *
// Copyright (c) 1998, Microsoft Corp. All rights reserved. *
// *
//**********************************************************************
(* DMUS_S_PARTIALLOAD
*
* The object could only load partially. This can happen if some components are
* not registered properly, such as embedded tracks and tools.
*)
DMUS_S_PARTIALLOAD = MAKE_DMHRESULTSUCCESS + $091;
 
const
FACILITY_DIRECTMUSIC = $878; // Shared with DirectSound
DMUS_ERRBASE = $1000; // Make error codes human readable in hex
(* DMUS_S_PARTIALDOWNLOAD
*
* This code indicates that a band download was only successful in reaching
* some, but not all, of the referenced ports. Some samples may not play
* correctly.
*)
DMUS_S_PARTIALDOWNLOAD = MAKE_DMHRESULTSUCCESS + $092;
 
function MAKE_DMHRESULTSUCCESS(code: Cardinal) : HResult;
function MAKE_DMHRESULTERROR(code: Cardinal) : HResult;
(* DMUS_S_REQUEUE
*
* Return value from IDirectMusicTool::ProcessPMsg() which indicates to the
* performance that it should cue the PMsg again automatically.
*)
DMUS_S_REQUEUE = MAKE_DMHRESULTSUCCESS + $200;
 
// DMUS_S_PARTIALLOAD
//
// The object could only load partially. This can happen if some components are
// not registered properly, such as embedded tracks and tools.
///
const
DMUS_S_PARTIALLOAD = (0 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $091;// MAKE_DMHRESULTSUCCESS($091);
(* DMUS_S_FREE
*
* Return value from IDirectMusicTool::ProcessPMsg() which indicates to the
* performance that it should free the PMsg automatically.
*)
DMUS_S_FREE = MAKE_DMHRESULTSUCCESS + $201;
 
// DMUS_S_REQUEUE
//
// Return value from IDirectMusicTool::ProcessPMsg() which indicates to the
// performance that it should cue the PMsg again automatically.
///
DMUS_S_REQUEUE = (0 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $200;//MAKE_DMHRESULTSUCCESS(0x200)
(* DMUS_S_END
*
* Return value from IDirectMusicTrack::Play() which indicates to the
* segment that the track has no more data after mtEnd.
*)
DMUS_S_END = MAKE_DMHRESULTSUCCESS + $202;
 
// DMUS_S_FREE
//
// Return value from IDirectMusicTool::ProcessPMsg() which indicates to the
// performance that it should free the PMsg automatically.
///
DMUS_S_FREE = (0 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $201;//MAKE_DMHRESULTSUCCESS(0x201)
(* DMUS_S_STRING_TRUNCATED
*
* Returned string has been truncated to fit the buffer size.
*)
DMUS_S_STRING_TRUNCATED = MAKE_DMHRESULTSUCCESS + $210;
 
// DMUS_S_END
//
// Return value from IDirectMusicTrack::Play() which indicates to the
// segment that the track has no more data after mtEnd.
///
DMUS_S_END = (0 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $202;//MAKE_DMHRESULTSUCCESS(0x202)
(* DMUS_S_LAST_TOOL
*
* Returned from IDirectMusicGraph::StampPMsg(), this indicates that the PMsg
* is already stamped with the last tool in the graph. The returned PMsg's
* tool pointer is now NULL.
*)
DMUS_S_LAST_TOOL = MAKE_DMHRESULTSUCCESS + $211;
 
// DMUS_S_STRING_TRUNCATED
//
// Returned string has been truncated to fit the buffer size.
///
DMUS_S_STRING_TRUNCATED = (0 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $210;//MAKE_DMHRESULTSUCCESS(0x210)
(* DMUS_S_OVER_CHORD
*
* Returned from IDirectMusicPerformance::MusicToMIDI(), this indicates
* that no note has been calculated because the music value has the note
* at a position higher than the top note of the chord. This applies only
* to DMUS_PLAYMODE_NORMALCHORD play mode. This success code indicates
* that the caller should not do anything with the note. It is not meant
* to be played against this chord.
*)
DMUS_S_OVER_CHORD = MAKE_DMHRESULTSUCCESS + $212;
 
// DMUS_S_LAST_TOOL
//
// Returned from IDirectMusicGraph::StampPMsg(), this indicates that the PMsg
// is already stamped with the last tool in the graph. The returned PMsg's
// tool pointer is now NULL.
///
DMUS_S_LAST_TOOL = (0 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $211;//MAKE_DMHRESULTSUCCESS(0x211)
(* DMUS_S_UP_OCTAVE
*
* Returned from IDirectMusicPerformance::MIDIToMusic(), and
* IDirectMusicPerformance::MusicToMIDI(), this indicates
* that the note conversion generated a note value that is below 0,
* so it has been bumped up one or more octaves to be in the proper
* MIDI range of 0 through 127.
* Note that this is valid for MIDIToMusic() when using play modes
* DMUS_PLAYMODE_FIXEDTOCHORD and DMUS_PLAYMODE_FIXEDTOKEY, both of
* which store MIDI values in wMusicValue. With MusicToMIDI(), it is
* valid for all play modes.
* Ofcourse, DMUS_PLAYMODE_FIXED will never return this success code.
*)
DMUS_S_UP_OCTAVE = MAKE_DMHRESULTSUCCESS + $213;
 
// DMUS_S_OVER_CHORD
//
// Returned from IDirectMusicPerformance::MusicToMIDI(), this indicates
// that no note has been calculated because the music value has the note
// at a position higher than the top note of the chord. This applies only
// to DMUS_PLAYMODE_NORMALCHORD play mode. This success code indicates
// that the caller should not do anything with the note. It is not meant
// to be played against this chord.
///
DMUS_S_OVER_CHORD = (0 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $212;//MAKE_DMHRESULTSUCCESS(0x212)
(* DMUS_S_DOWN_OCTAVE
*
* Returned from IDirectMusicPerformance::MIDIToMusic(), and
* IDirectMusicPerformance::MusicToMIDI(), this indicates
* that the note conversion generated a note value that is above 127,
* so it has been bumped down one or more octaves to be in the proper
* MIDI range of 0 through 127.
* Note that this is valid for MIDIToMusic() when using play modes
* DMUS_PLAYMODE_FIXEDTOCHORD and DMUS_PLAYMODE_FIXEDTOKEY, both of
* which store MIDI values in wMusicValue. With MusicToMIDI(), it is
* valid for all play modes.
* Ofcourse, DMUS_PLAYMODE_FIXED will never return this success code.
*)
DMUS_S_DOWN_OCTAVE = MAKE_DMHRESULTSUCCESS + $214;
 
// DMUS_S_UP_OCTAVE
//
// Returned from IDirectMusicPerformance::MIDIToMusic(), and
// IDirectMusicPerformance::MusicToMIDI(), this indicates
// that the note conversion generated a note value that is below 0,
// so it has been bumped up one or more octaves to be in the proper
// MIDI range of 0 through 127.
// Note that this is valid for MIDIToMusic() when using play modes
// DMUS_PLAYMODE_FIXEDTOCHORD and DMUS_PLAYMODE_FIXEDTOKEY, both of
// which store MIDI values in wMusicValue. With MusicToMIDI(), it is
// valid for all play modes.
// Ofcourse, DMUS_PLAYMODE_FIXED will never return this success code.
///
DMUS_S_UP_OCTAVE = (0 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $213;//MAKE_DMHRESULTSUCCESS(0x213)
(* DMUS_S_NOBUFFERCONTROL
*
* Although the audio output from the port will be routed to the
* same device as the given DirectSound buffer, buffer controls
* such as pan and volume will not affect the output.
*
*)
DMUS_S_NOBUFFERCONTROL = MAKE_DMHRESULTSUCCESS + $215;
 
// DMUS_S_DOWN_OCTAVE
//
// Returned from IDirectMusicPerformance::MIDIToMusic(), and
// IDirectMusicPerformance::MusicToMIDI(), this indicates
// that the note conversion generated a note value that is above 127,
// so it has been bumped down one or more octaves to be in the proper
// MIDI range of 0 through 127.
// Note that this is valid for MIDIToMusic() when using play modes
// DMUS_PLAYMODE_FIXEDTOCHORD and DMUS_PLAYMODE_FIXEDTOKEY, both of
// which store MIDI values in wMusicValue. With MusicToMIDI(), it is
// valid for all play modes.
// Ofcourse, DMUS_PLAYMODE_FIXED will never return this success code.
///
DMUS_S_DOWN_OCTAVE = (0 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $214;//MAKE_DMHRESULTSUCCESS(0x214)
(* DMUS_E_DRIVER_FAILED
*
* An unexpected error was returned from a device driver, indicating
* possible failure of the driver or hardware.
*)
DMUS_E_DRIVER_FAILED = MAKE_DMHRESULTERROR + $0101;
 
// DMUS_E_DRIVER_FAILED
//
// An unexpected error was returned from a device driver, indicating
// possible failure of the driver or hardware.
///
DMUS_E_DRIVER_FAILED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0101;//MAKE_DMHRESULTERROR(0x0101)
(* DMUS_E_PORTS_OPEN
*
* The requested operation cannot be performed while there are
* instantiated ports in any process in the system.
*)
DMUS_E_PORTS_OPEN = MAKE_DMHRESULTERROR + $0102;
 
// DMUS_E_PORTS_OPEN
//
// The requested operation cannot be performed while there are
// instantiated ports in any process in the system.
///
DMUS_E_PORTS_OPEN = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0102;//MAKE_DMHRESULTERROR(0x0102)
(* DMUS_E_DEVICE_IN_USE
*
* The requested device is already in use (possibly by a non-DirectMusic
* client) and cannot be opened again.
*)
DMUS_E_DEVICE_IN_USE = MAKE_DMHRESULTERROR + $0103;
 
// DMUS_E_DEVICE_IN_USE
//
// The requested device is already in use (possibly by a non-DirectMusic
// client) and cannot be opened again.
///
DMUS_E_DEVICE_IN_USE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0103;//MAKE_DMHRESULTERROR(0x0103)
(* DMUS_E_INSUFFICIENTBUFFER
*
* Buffer is not large enough for requested operation.
*)
DMUS_E_INSUFFICIENTBUFFER = MAKE_DMHRESULTERROR + $0104;
 
// DMUS_E_INSUFFICIENTBUFFER
//
// Buffer is not large enough for requested operation.
///
DMUS_E_INSUFFICIENTBUFFER = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0104;//MAKE_DMHRESULTERROR(0x0104)
(* DMUS_E_BUFFERNOTSET
*
* No buffer was prepared for the download data.
*)
DMUS_E_BUFFERNOTSET = MAKE_DMHRESULTERROR + $0105;
 
// DMUS_E_BUFFERNOTSET
//
// No buffer was prepared for the download data.
///
DMUS_E_BUFFERNOTSET = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0105;//MAKE_DMHRESULTERROR(0x0105)
(* DMUS_E_BUFFERNOTAVAILABLE
*
* Download failed due to inability to access or create download buffer.
*)
DMUS_E_BUFFERNOTAVAILABLE = MAKE_DMHRESULTERROR + $0106;
 
// DMUS_E_BUFFERNOTAVAILABLE
//
// Download failed due to inability to access or create download buffer.
///
DMUS_E_BUFFERNOTAVAILABLE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0106;//MAKE_DMHRESULTERROR(0x0106)
(* DMUS_E_NOTADLSCOL
*
* Error parsing DLS collection. File is corrupt.
*)
DMUS_E_NOTADLSCOL = MAKE_DMHRESULTERROR + $0108;
 
// DMUS_E_NOTADLSCOL
//
// Error parsing DLS collection. File is corrupt.
///
DMUS_E_NOTADLSCOL = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0108;//MAKE_DMHRESULTERROR(0x0108)
(* DMUS_E_INVALIDOFFSET
*
* Wave chunks in DLS collection file are at incorrect offsets.
*)
DMUS_E_INVALIDOFFSET = MAKE_DMHRESULTERROR + $0109;
 
// DMUS_E_INVALIDOFFSET
//
// Wave chunks in DLS collection file are at incorrect offsets.
///
DMUS_E_INVALIDOFFSET = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0109;//MAKE_DMHRESULTERROR(0x0109)
(* DMUS_E_ALREADY_LOADED
*
* Second attempt to load a DLS collection that is currently open.
*)
DMUS_E_ALREADY_LOADED = MAKE_DMHRESULTERROR + $0111;
 
// DMUS_E_ALREADY_LOADED
//
// Second attempt to load a DLS collection that is currently open.
///
DMUS_E_ALREADY_LOADED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0111;//MAKE_DMHRESULTERROR(0x0111)
(* DMUS_E_INVALIDPOS
*
* Error reading wave data from DLS collection. Indicates bad file.
*)
DMUS_E_INVALIDPOS = MAKE_DMHRESULTERROR + $0113;
 
// DMUS_E_INVALIDPOS
//
// Error reading wave data from DLS collection. Indicates bad file.
///
DMUS_E_INVALIDPOS = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0113;//MAKE_DMHRESULTERROR(0x0113)
(* DMUS_E_INVALIDPATCH
*
* There is no instrument in the collection that matches patch number.
*)
DMUS_E_INVALIDPATCH = MAKE_DMHRESULTERROR + $0114;
 
// DMUS_E_INVALIDPATCH
//
// There is no instrument in the collection that matches patch number.
///
DMUS_E_INVALIDPATCH = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0114;//MAKE_DMHRESULTERROR(0x0114)
(* DMUS_E_CANNOTSEEK
*
* The IStream* doesn't support Seek().
*)
DMUS_E_CANNOTSEEK = MAKE_DMHRESULTERROR + $0115;
 
// DMUS_E_CANNOTSEEK
//
// The IStream* doesn't support Seek().
///
DMUS_E_CANNOTSEEK = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0115;//MAKE_DMHRESULTERROR(0x0115)
(* DMUS_E_CANNOTWRITE
*
* The IStream* doesn't support Write().
*)
DMUS_E_CANNOTWRITE = MAKE_DMHRESULTERROR + $0116;
 
// DMUS_E_CANNOTWRITE
//
// The IStream* doesn't support Write().
///
DMUS_E_CANNOTWRITE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0116;//MAKE_DMHRESULTERROR(0x0116)
(* DMUS_E_CHUNKNOTFOUND
*
* The RIFF parser doesn't contain a required chunk while parsing file.
*)
DMUS_E_CHUNKNOTFOUND = MAKE_DMHRESULTERROR + $0117;
 
// DMUS_E_CHUNKNOTFOUND
//
// The RIFF parser doesn't contain a required chunk while parsing file.
///
DMUS_E_CHUNKNOTFOUND = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0117;//MAKE_DMHRESULTERROR(0x0117)
(* DMUS_E_INVALID_DOWNLOADID
*
* Invalid download id was used in the process of creating a download buffer.
*)
DMUS_E_INVALID_DOWNLOADID = MAKE_DMHRESULTERROR + $0119;
 
// DMUS_E_INVALID_DOWNLOADID
//
// Invalid download id was used in the process of creating a download buffer.
///
DMUS_E_INVALID_DOWNLOADID = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0119;//MAKE_DMHRESULTERROR(0x0119)
(* DMUS_E_NOT_DOWNLOADED_TO_PORT
*
* Tried to unload an object that was not downloaded or previously unloaded.
*)
DMUS_E_NOT_DOWNLOADED_TO_PORT = MAKE_DMHRESULTERROR + $0120;
 
// DMUS_E_NOT_DOWNLOADED_TO_PORT
//
// Tried to unload an object that was not downloaded or previously unloaded.
///
DMUS_E_NOT_DOWNLOADED_TO_PORT = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0120;//MAKE_DMHRESULTERROR(0x0120)
(* DMUS_E_ALREADY_DOWNLOADED
*
* Buffer was already downloaded to synth.
*)
DMUS_E_ALREADY_DOWNLOADED = MAKE_DMHRESULTERROR + $0121;
 
// DMUS_E_ALREADY_DOWNLOADED
//
// Buffer was already downloaded to synth.
///
DMUS_E_ALREADY_DOWNLOADED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0121;//MAKE_DMHRESULTERROR(0x0121)
(* DMUS_E_UNKNOWN_PROPERTY
*
* The specified property item was not recognized by the target object.
*)
DMUS_E_UNKNOWN_PROPERTY = MAKE_DMHRESULTERROR + $0122;
 
// DMUS_E_UNKNOWN_PROPERTY
//
// The specified property item was not recognized by the target object.
///
DMUS_E_UNKNOWN_PROPERTY = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0122;//MAKE_DMHRESULTERROR(0x0122)
(* DMUS_E_SET_UNSUPPORTED
*
* The specified property item may not be set on the target object.
*)
DMUS_E_SET_UNSUPPORTED = MAKE_DMHRESULTERROR + $0123;
 
// DMUS_E_SET_UNSUPPORTED
//
// The specified property item may not be set on the target object.
///
DMUS_E_SET_UNSUPPORTED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0123;//MAKE_DMHRESULTERROR(0x0123)
(* DMUS_E_GET_UNSUPPORTED
*
* The specified property item may not be retrieved from the target object.
*)
DMUS_E_GET_UNSUPPORTED = MAKE_DMHRESULTERROR + $0124;
 
// DMUS_E_GET_UNSUPPORTED
//
// The specified property item may not be retrieved from the target object.
///
DMUS_E_GET_UNSUPPORTED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0124;//MAKE_DMHRESULTERROR(0x0124)
(* DMUS_E_NOTMONO
*
* Wave chunk has more than one interleaved channel. DLS format requires MONO.
*)
DMUS_E_NOTMONO = MAKE_DMHRESULTERROR + $0125;
 
// DMUS_E_NOTMONO
//
// Wave chunk has more than one interleaved channel. DLS format requires MONO.
///
DMUS_E_NOTMONO = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0125;//MAKE_DMHRESULTERROR(0x0125)
(* DMUS_E_BADARTICULATION
*
* Invalid articulation chunk in DLS collection.
*)
DMUS_E_BADARTICULATION = MAKE_DMHRESULTERROR + $0126;
 
// DMUS_E_BADARTICULATION
//
// Invalid articulation chunk in DLS collection.
///
DMUS_E_BADARTICULATION = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0126;//MAKE_DMHRESULTERROR(0x0126)
(* DMUS_E_BADINSTRUMENT
*
* Invalid instrument chunk in DLS collection.
*)
DMUS_E_BADINSTRUMENT = MAKE_DMHRESULTERROR + $0127;
 
// DMUS_E_BADINSTRUMENT
//
// Invalid instrument chunk in DLS collection.
///
DMUS_E_BADINSTRUMENT = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0127;//MAKE_DMHRESULTERROR(0x0127)
(* DMUS_E_BADWAVELINK
*
* Wavelink chunk in DLS collection points to invalid wave.
*)
DMUS_E_BADWAVELINK = MAKE_DMHRESULTERROR + $0128;
 
// DMUS_E_BADWAVELINK
//
// Wavelink chunk in DLS collection points to invalid wave.
///
DMUS_E_BADWAVELINK = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0128;//MAKE_DMHRESULTERROR(0x0128)
(* DMUS_E_NOARTICULATION
*
* Articulation missing from instrument in DLS collection.
*)
DMUS_E_NOARTICULATION = MAKE_DMHRESULTERROR + $0129;
 
// DMUS_E_NOARTICULATION
//
// Articulation missing from instrument in DLS collection.
///
DMUS_E_NOARTICULATION = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0129;//MAKE_DMHRESULTERROR(0x0129)
(* DMUS_E_NOTPCM
*
* Downoaded DLS wave is not in PCM format.
*)
DMUS_E_NOTPCM = MAKE_DMHRESULTERROR + $012A;
 
// DMUS_E_NOTPCM
//
// Downoaded DLS wave is not in PCM format.
///
DMUS_E_NOTPCM = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $012A;//MAKE_DMHRESULTERROR(0x012A)
(* DMUS_E_BADWAVE
*
* Bad wave chunk in DLS collection
*)
DMUS_E_BADWAVE = MAKE_DMHRESULTERROR + $012B;
 
// DMUS_E_BADWAVE
//
// Bad wave chunk in DLS collection
///
DMUS_E_BADWAVE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $012B;//MAKE_DMHRESULTERROR(0x012B)
(* DMUS_E_BADOFFSETTABLE
*
* Offset Table for download buffer has errors.
*)
DMUS_E_BADOFFSETTABLE = MAKE_DMHRESULTERROR + $012C;
 
// DMUS_E_BADOFFSETTABLE
//
// Offset Table for download buffer has errors.
///
DMUS_E_BADOFFSETTABLE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $012C;//MAKE_DMHRESULTERROR(0x012C)
(* DMUS_E_UNKNOWNDOWNLOAD
*
* Attempted to download unknown data type.
*)
DMUS_E_UNKNOWNDOWNLOAD = MAKE_DMHRESULTERROR + $012D;
 
// DMUS_E_UNKNOWNDOWNLOAD
//
// Attempted to download unknown data type.
///
DMUS_E_UNKNOWNDOWNLOAD = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $012D;//MAKE_DMHRESULTERROR(0x012D)
(* DMUS_E_NOSYNTHSINK
*
* The operation could not be completed because no sink was connected to
* the synthesizer.
*)
DMUS_E_NOSYNTHSINK = MAKE_DMHRESULTERROR + $012E;
 
// DMUS_E_NOSYNTHSINK
//
// The operation could not be completed because no sink was connected to
// the synthesizer.
///
DMUS_E_NOSYNTHSINK = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $012E;//MAKE_DMHRESULTERROR(0x012E)
(* DMUS_E_ALREADYOPEN
*
* An attempt was made to open the software synthesizer while it was already
* open.
* ASSERT?
*)
DMUS_E_ALREADYOPEN = MAKE_DMHRESULTERROR + $012F;
 
// DMUS_E_ALREADYOPEN
//
// An attempt was made to open the software synthesizer while it was already
// open.
// ASSERT?
///
DMUS_E_ALREADYOPEN = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $012F;//MAKE_DMHRESULTERROR(0x012F)
(* DMUS_E_ALREADYCLOSE
*
* An attempt was made to close the software synthesizer while it was already
* open.
* ASSERT?
*)
DMUS_E_ALREADYCLOSED = MAKE_DMHRESULTERROR + $0130;
 
// DMUS_E_ALREADYCLOSE
//
// An attempt was made to close the software synthesizer while it was already
// open.
// ASSERT?
///
DMUS_E_ALREADYCLOSED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0130;//MAKE_DMHRESULTERROR(0x0130)
(* DMUS_E_SYNTHNOTCONFIGURED
*
* The operation could not be completed because the software synth has not
* yet been fully configured.
* ASSERT?
*)
DMUS_E_SYNTHNOTCONFIGURED = MAKE_DMHRESULTERROR + $0131;
 
// DMUS_E_SYNTHNOTCONFIGURED
//
// The operation could not be completed because the software synth has not
// yet been fully configured.
// ASSERT?
///
DMUS_E_SYNTHNOTCONFIGURED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0131;//MAKE_DMHRESULTERROR(0x0131)
(* DMUS_E_SYNTHACTIVE
*
* The operation cannot be carried out while the synthesizer is active.
*)
DMUS_E_SYNTHACTIVE = MAKE_DMHRESULTERROR + $0132;
 
// DMUS_E_SYNTHACTIVE
//
// The operation cannot be carried out while the synthesizer is active.
///
DMUS_E_SYNTHACTIVE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0132;//MAKE_DMHRESULTERROR(0x0132)
(* DMUS_E_CANNOTREAD
*
* An error occurred while attempting to read from the IStream* object.
*)
DMUS_E_CANNOTREAD = MAKE_DMHRESULTERROR + $0133;
 
// DMUS_E_CANNOTREAD
//
// An error occurred while attempting to read from the IStream* object.
///
DMUS_E_CANNOTREAD = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0133;//MAKE_DMHRESULTERROR(0x0133)
(* DMUS_E_DMUSIC_RELEASED
*
* The operation cannot be performed because the final instance of the
* DirectMusic object was released. Ports cannot be used after final
* release of the DirectMusic object.
*)
DMUS_E_DMUSIC_RELEASED = MAKE_DMHRESULTERROR + $0134;
 
// DMUS_E_DMUSIC_RELEASED
//
// The operation cannot be performed because the final instance of the
// DirectMusic object was released. Ports cannot be used after final
// release of the DirectMusic object.
///
DMUS_E_DMUSIC_RELEASED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0134;//MAKE_DMHRESULTERROR(0x0134)
(* DMUS_E_BUFFER_EMPTY
*
* There was no data in the referenced buffer.
*)
DMUS_E_BUFFER_EMPTY = MAKE_DMHRESULTERROR + $0135;
 
// DMUS_E_BUFFER_EMPTY
//
// There was no data in the referenced buffer.
///
DMUS_E_BUFFER_EMPTY = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0135;//MAKE_DMHRESULTERROR(0x0135)
(* DMUS_E_BUFFER_FULL
*
* There is insufficient space to insert the given event into the buffer.
*)
DMUS_E_BUFFER_FULL = MAKE_DMHRESULTERROR + $0136;
 
// DMUS_E_BUFFER_FULL
//
// There is insufficient space to insert the given event into the buffer.
///
DMUS_E_BUFFER_FULL = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0136;//MAKE_DMHRESULTERROR(0x0136)
(* DMUS_E_PORT_NOT_CAPTURE
*
* The given operation could not be carried out because the port is a
* capture port.
*)
DMUS_E_PORT_NOT_CAPTURE = MAKE_DMHRESULTERROR + $0137;
 
// DMUS_E_PORT_NOT_CAPTURE
//
// The given operation could not be carried out because the port is a
// capture port.
///
DMUS_E_PORT_NOT_CAPTURE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0137;//MAKE_DMHRESULTERROR(0x0137)
(* DMUS_E_PORT_NOT_RENDER
*
* The given operation could not be carried out because the port is a
* render port.
*)
DMUS_E_PORT_NOT_RENDER = MAKE_DMHRESULTERROR + $0138;
 
// DMUS_E_PORT_NOT_RENDER
//
// The given operation could not be carried out because the port is a
// render port.
///
DMUS_E_PORT_NOT_RENDER = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0138;//MAKE_DMHRESULTERROR(0x0138)
(* DMUS_E_DSOUND_NOT_SET
*
* The port could not be created because no DirectSound has been specified.
* Specify a DirectSound interface via the IDirectMusic::SetDirectSound
* method; pass NULL to have DirectMusic manage usage of DirectSound.
*)
DMUS_E_DSOUND_NOT_SET = MAKE_DMHRESULTERROR + $0139;
 
// DMUS_E_DSOUND_NOT_SET
//
// The port could not be created because no DirectSound has been specified.
// Specify a DirectSound interface via the IDirectMusic::SetDirectSound
// method; pass NULL to have DirectMusic manage usage of DirectSound.
///
DMUS_E_DSOUND_NOT_SET = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0139;//MAKE_DMHRESULTERROR(0x0139)
(* DMUS_E_ALREADY_ACTIVATED
*
* The operation cannot be carried out while the port is active.
*)
DMUS_E_ALREADY_ACTIVATED = MAKE_DMHRESULTERROR + $013A;
 
// DMUS_E_ALREADY_ACTIVATED
//
// The operation cannot be carried out while the port is active.
///
DMUS_E_ALREADY_ACTIVATED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $013A;//MAKE_DMHRESULTERROR(0x013A)
(* DMUS_E_INVALIDBUFFER
*
* Invalid DirectSound buffer was handed to port.
*)
DMUS_E_INVALIDBUFFER = MAKE_DMHRESULTERROR + $013B;
 
// DMUS_E_INVALIDBUFFER
//
// Invalid DirectSound buffer was handed to port.
///
DMUS_E_INVALIDBUFFER = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $013B;//MAKE_DMHRESULTERROR(0x013B)
(* DMUS_E_WAVEFORMATNOTSUPPORTED
*
* Invalid buffer format was handed to the synth sink.
*)
DMUS_E_WAVEFORMATNOTSUPPORTED = MAKE_DMHRESULTERROR + $013C;
 
// DMUS_E_WAVEFORMATNOTSUPPORTED
//
// Invalid buffer format was handed to the synth sink.
///
DMUS_E_WAVEFORMATNOTSUPPORTED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $013C;//MAKE_DMHRESULTERROR(0x013C)
(* DMUS_E_SYNTHINACTIVE
*
* The operation cannot be carried out while the synthesizer is inactive.
*)
DMUS_E_SYNTHINACTIVE = MAKE_DMHRESULTERROR + $013D;
 
// DMUS_E_SYNTHINACTIVE
//
// The operation cannot be carried out while the synthesizer is inactive.
///
DMUS_E_SYNTHINACTIVE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $013D;//MAKE_DMHRESULTERROR(0x013D)
(* DMUS_E_DSOUND_ALREADY_SET
*
* IDirectMusic::SetDirectSound has already been called. It may not be
* changed while in use.
*)
DMUS_E_DSOUND_ALREADY_SET = MAKE_DMHRESULTERROR + $013E;
 
// DMUS_E_DSOUND_ALREADY_SET
//
// IDirectMusic::SetDirectSound has already been called. It may not be
// changed while in use.
///
DMUS_E_DSOUND_ALREADY_SET = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $013E;//MAKE_DMHRESULTERROR(0x013E)
(* DMUS_E_INVALID_EVENT
*
* The given event is invalid (either it is not a valid MIDI message
* or it makes use of running status). The event cannot be packed
* into the buffer.
*)
DMUS_E_INVALID_EVENT = MAKE_DMHRESULTERROR + $013F;
 
// DMUS_E_INVALID_EVENT
//
// The given event is invalid (either it is not a valid MIDI message
// or it makes use of running status). The event cannot be packed
// into the buffer.
///
DMUS_E_INVALID_EVENT = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $013F;//MAKE_DMHRESULTERROR(0x013F)
(* DMUS_E_UNSUPPORTED_STREAM
*
* The IStream* object does not contain data supported by the loading object.
*)
DMUS_E_UNSUPPORTED_STREAM = MAKE_DMHRESULTERROR + $0150;
 
// DMUS_E_UNSUPPORTED_STREAM
//
// The IStream* object does not contain data supported by the loading object.
///
DMUS_E_UNSUPPORTED_STREAM = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0150;//MAKE_DMHRESULTERROR(0x0150)
(* DMUS_E_ALREADY_INITED
*
* The object has already been initialized.
*)
DMUS_E_ALREADY_INITED = MAKE_DMHRESULTERROR + $0151;
 
// DMUS_E_ALREADY_INITED
//
// The object has already been initialized.
///
DMUS_E_ALREADY_INITED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0151;//MAKE_DMHRESULTERROR(0x0151)
(* DMUS_E_INVALID_BAND
*
* The file does not contain a valid band.
*)
DMUS_E_INVALID_BAND = MAKE_DMHRESULTERROR + $0152;
 
// DMUS_E_INVALID_BAND
//
// The file does not contain a valid band.
///
DMUS_E_INVALID_BAND = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0152;//MAKE_DMHRESULTERROR(0x0152)
(* DMUS_E_TRACK_HDR_NOT_FIRST_CK
*
* The IStream* object's data does not have a track header as the first chunk,
* and therefore can not be read by the segment object.
*)
DMUS_E_TRACK_HDR_NOT_FIRST_CK = MAKE_DMHRESULTERROR + $0155;
 
// DMUS_E_TRACK_HDR_NOT_FIRST_CK
//
// The IStream* object's data does not have a track header as the first chunk,
// and therefore can not be read by the segment object.
///
DMUS_E_TRACK_HDR_NOT_FIRST_CK = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0155;//MAKE_DMHRESULTERROR(0x0155)
(* DMUS_E_TOOL_HDR_NOT_FIRST_CK
*
* The IStream* object's data does not have a tool header as the first chunk,
* and therefore can not be read by the graph object.
*)
DMUS_E_TOOL_HDR_NOT_FIRST_CK = MAKE_DMHRESULTERROR + $0156;
 
// DMUS_E_TOOL_HDR_NOT_FIRST_CK
//
// The IStream* object's data does not have a tool header as the first chunk,
// and therefore can not be read by the graph object.
///
DMUS_E_TOOL_HDR_NOT_FIRST_CK = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0156;//MAKE_DMHRESULTERROR(0x0156)
(* DMUS_E_INVALID_TRACK_HDR
*
* The IStream* object's data contains an invalid track header (ckid is 0 and
* fccType is NULL,) and therefore can not be read by the segment object.
*)
DMUS_E_INVALID_TRACK_HDR = MAKE_DMHRESULTERROR + $0157;
 
// DMUS_E_INVALID_TRACK_HDR
//
// The IStream* object's data contains an invalid track header (ckid is 0 and
// fccType is NULL,) and therefore can not be read by the segment object.
///
DMUS_E_INVALID_TRACK_HDR = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0157;//MAKE_DMHRESULTERROR(0x0157)
(* DMUS_E_INVALID_TOOL_HDR
*
* The IStream* object's data contains an invalid tool header (ckid is 0 and
* fccType is NULL,) and therefore can not be read by the graph object.
*)
DMUS_E_INVALID_TOOL_HDR = MAKE_DMHRESULTERROR + $0158;
 
// DMUS_E_INVALID_TOOL_HDR
//
// The IStream* object's data contains an invalid tool header (ckid is 0 and
// fccType is NULL,) and therefore can not be read by the graph object.
///
DMUS_E_INVALID_TOOL_HDR = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0158;//MAKE_DMHRESULTERROR(0x0158)
(* DMUS_E_ALL_TOOLS_FAILED
*
* The graph object was unable to load all tools from the IStream* object data.
* This may be due to errors in the stream, or the tools being incorrectly
* registered on the client.
*)
DMUS_E_ALL_TOOLS_FAILED = MAKE_DMHRESULTERROR + $0159;
 
// DMUS_E_ALL_TOOLS_FAILED
//
// The graph object was unable to load all tools from the IStream* object data.
// This may be due to errors in the stream, or the tools being incorrectly
// registered on the client.
///
DMUS_E_ALL_TOOLS_FAILED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0159;//MAKE_DMHRESULTERROR(0x0159)
(* DMUS_E_ALL_TRACKS_FAILED
*
* The segment object was unable to load all tracks from the IStream* object data.
* This may be due to errors in the stream, or the tracks being incorrectly
* registered on the client.
*)
DMUS_E_ALL_TRACKS_FAILED = MAKE_DMHRESULTERROR + $0160;
 
// DMUS_E_ALL_TRACKS_FAILED
//
// The segment object was unable to load all tracks from the IStream* object data.
// This may be due to errors in the stream, or the tracks being incorrectly
// registered on the client.
///
DMUS_E_ALL_TRACKS_FAILED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0160;//MAKE_DMHRESULTERROR(0x0160)
(* DMUS_E_NOT_FOUND
*
* The requested item was not contained by the object.
*)
DMUS_E_NOT_FOUND = MAKE_DMHRESULTERROR + $0161;
 
// DMUS_E_NOT_FOUND
//
// The requested item was not contained by the object.
///
DMUS_E_NOT_FOUND = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0161;//MAKE_DMHRESULTERROR(0x0161)
(* DMUS_E_NOT_INIT
*
* A required object is not initialized or failed to initialize.
*)
DMUS_E_NOT_INIT = MAKE_DMHRESULTERROR + $0162;
 
// DMUS_E_NOT_INIT
//
// A required object is not initialized or failed to initialize.
///
DMUS_E_NOT_INIT = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0162;//MAKE_DMHRESULTERROR(0x0162)
(* DMUS_E_TYPE_DISABLED
*
* The requested parameter type is currently disabled. Parameter types may
* be enabled and disabled by certain calls to SetParam().
*)
DMUS_E_TYPE_DISABLED = MAKE_DMHRESULTERROR + $0163;
 
// DMUS_E_TYPE_DISABLED
//
// The requested parameter type is currently disabled. Parameter types may
// be enabled and disabled by certain calls to SetParam().
///
DMUS_E_TYPE_DISABLED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0163;//MAKE_DMHRESULTERROR(0x0163)
(* DMUS_E_TYPE_UNSUPPORTED
*
* The requested parameter type is not supported on the object.
*)
DMUS_E_TYPE_UNSUPPORTED = MAKE_DMHRESULTERROR + $0164;
 
// DMUS_E_TYPE_UNSUPPORTED
//
// The requested parameter type is not supported on the object.
///
DMUS_E_TYPE_UNSUPPORTED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0164;//MAKE_DMHRESULTERROR(0x0164)
(* DMUS_E_TIME_PAST
*
* The time is in the past, and the operation can not succeed.
*)
DMUS_E_TIME_PAST = MAKE_DMHRESULTERROR + $0165;
 
// DMUS_E_TIME_PAST
//
// The time is in the past, and the operation can not succeed.
///
DMUS_E_TIME_PAST = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0165;//MAKE_DMHRESULTERROR(0x0165)
(* DMUS_E_TRACK_NOT_FOUND
*
* The requested track is not contained by the segment.
*)
DMUS_E_TRACK_NOT_FOUND = MAKE_DMHRESULTERROR + $0166;
 
// DMUS_E_TRACK_NOT_FOUND
//
// The requested track is not contained by the segment.
///
DMUS_E_TRACK_NOT_FOUND = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0166;//MAKE_DMHRESULTERROR(0x0166)
(* DMUS_E_NO_MASTER_CLOCK
*
* There is no master clock in the performance. Be sure to call
* IDirectMusicPerformance::Init().
*)
DMUS_E_NO_MASTER_CLOCK = MAKE_DMHRESULTERROR + $0170;
 
// DMUS_E_NO_MASTER_CLOCK
//
// There is no master clock in the performance. Be sure to call
// IDirectMusicPerformance::Init().
///
DMUS_E_NO_MASTER_CLOCK = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0170;//MAKE_DMHRESULTERROR(0x0170)
(* DMUS_E_LOADER_NOCLASSID
*
* The class id field is required and missing in the DMUS_OBJECTDESC.
*)
DMUS_E_LOADER_NOCLASSID = MAKE_DMHRESULTERROR + $0180;
 
// DMUS_E_LOADER_NOCLASSID
//
// The class id field is required and missing in the DMUS_OBJECTDESC.
///
DMUS_E_LOADER_NOCLASSID = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0180;//MAKE_DMHRESULTERROR(0x0180)
(* DMUS_E_LOADER_BADPATH
*
* The requested file path is invalid.
*)
DMUS_E_LOADER_BADPATH = MAKE_DMHRESULTERROR + $0181;
 
// DMUS_E_LOADER_BADPATH
//
// The requested file path is invalid.
///
DMUS_E_LOADER_BADPATH = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0181;//MAKE_DMHRESULTERROR(0x0181)
(* DMUS_E_LOADER_FAILEDOPEN
*
* File open failed - either file doesn't exist or is locked.
*)
DMUS_E_LOADER_FAILEDOPEN = MAKE_DMHRESULTERROR + $0182;
 
// DMUS_E_LOADER_FAILEDOPEN
//
// File open failed - either file doesn't exist or is locked.
///
DMUS_E_LOADER_FAILEDOPEN = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0182;//MAKE_DMHRESULTERROR(0x0182)
(* DMUS_E_LOADER_FORMATNOTSUPPORTED
*
* Search data type is not supported.
*)
DMUS_E_LOADER_FORMATNOTSUPPORTED = MAKE_DMHRESULTERROR + $0183;
 
// DMUS_E_LOADER_FORMATNOTSUPPORTED
//
// Search data type is not supported.
///
DMUS_E_LOADER_FORMATNOTSUPPORTED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0183;//MAKE_DMHRESULTERROR(0x0183)
(* DMUS_E_LOADER_FAILEDCREATE
*
* Unable to find or create object.
*)
DMUS_E_LOADER_FAILEDCREATE = MAKE_DMHRESULTERROR + $0184;
 
// DMUS_E_LOADER_FAILEDCREATE
//
// Unable to find or create object.
///
DMUS_E_LOADER_FAILEDCREATE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0184;//MAKE_DMHRESULTERROR(0x0184)
(* DMUS_E_LOADER_OBJECTNOTFOUND
*
* Object was not found.
*)
DMUS_E_LOADER_OBJECTNOTFOUND = MAKE_DMHRESULTERROR + $0185;
 
// DMUS_E_LOADER_OBJECTNOTFOUND
//
// Object was not found.
///
DMUS_E_LOADER_OBJECTNOTFOUND = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0185;//MAKE_DMHRESULTERROR(0x0185)
(* DMUS_E_LOADER_NOFILENAME
*
* The file name is missing from the DMUS_OBJECTDESC.
*)
DMUS_E_LOADER_NOFILENAME = MAKE_DMHRESULTERROR + $0186;
 
// DMUS_E_LOADER_NOFILENAME
//
// The file name is missing from the DMUS_OBJECTDESC.
///
DMUS_E_LOADER_NOFILENAME = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0186;//MAKE_DMHRESULTERROR(0x0186)
(* DMUS_E_INVALIDFILE
*
* The file requested is not a valid file.
*)
DMUS_E_INVALIDFILE = MAKE_DMHRESULTERROR + $0200;
 
// DMUS_E_INVALIDFILE
//
// The file requested is not a valid file.
///
DMUS_E_INVALIDFILE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0200;//MAKE_DMHRESULTERROR(0x0200)
(* DMUS_E_ALREADY_EXISTS
*
* The tool is already contained in the graph. Create a new instance.
*)
DMUS_E_ALREADY_EXISTS = MAKE_DMHRESULTERROR + $0201;
 
// DMUS_E_ALREADY_EXISTS
//
// The tool is already contained in the graph. Create a new instance.
///
DMUS_E_ALREADY_EXISTS = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0201;//MAKE_DMHRESULTERROR(0x0201)
(* DMUS_E_OUT_OF_RANGE
*
* Value is out of range, for instance the requested length is longer than
* the segment.
*)
DMUS_E_OUT_OF_RANGE = MAKE_DMHRESULTERROR + $0202;
 
// DMUS_E_OUT_OF_RANGE
//
// Value is out of range, for instance the requested length is longer than
// the segment.
///
DMUS_E_OUT_OF_RANGE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0202;//MAKE_DMHRESULTERROR(0x0202)
(* DMUS_E_SEGMENT_INIT_FAILED
*
* Segment initialization failed, most likely due to a critical memory situation.
*)
DMUS_E_SEGMENT_INIT_FAILED = MAKE_DMHRESULTERROR + $0203;
 
// DMUS_E_SEGMENT_INIT_FAILED
//
// Segment initialization failed, most likely due to a critical memory situation.
///
DMUS_E_SEGMENT_INIT_FAILED = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0203;//MAKE_DMHRESULTERROR(0x0203)
(* DMUS_E_ALREADY_SENT
*
* The DMUS_PMSG has already been sent to the performance object via
* IDirectMusicPerformance::SendPMsg().
*)
DMUS_E_ALREADY_SENT = MAKE_DMHRESULTERROR + $0204;
 
// DMUS_E_ALREADY_SENT
//
// The DMUS_PMSG has already been sent to the performance object via
// IDirectMusicPerformance::SendPMsg().
///
DMUS_E_ALREADY_SENT = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0204;//MAKE_DMHRESULTERROR(0x0204)
(* DMUS_E_CANNOT_FREE
*
* The DMUS_PMSG was either not allocated by the performance via
* IDirectMusicPerformance::AllocPMsg(), or it was already freed via
* IDirectMusicPerformance::FreePMsg().
*)
DMUS_E_CANNOT_FREE = MAKE_DMHRESULTERROR + $0205;
 
// DMUS_E_CANNOT_FREE
//
// The DMUS_PMSG was either not allocated by the performance via
// IDirectMusicPerformance::AllocPMsg(), or it was already freed via
// IDirectMusicPerformance::FreePMsg().
///
DMUS_E_CANNOT_FREE = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0205;//MAKE_DMHRESULTERROR(0x0205)
(* DMUS_E_CANNOT_OPEN_PORT
*
* The default system port could not be opened.
*)
DMUS_E_CANNOT_OPEN_PORT = MAKE_DMHRESULTERROR + $0206;
 
// DMUS_E_CANNOT_OPEN_PORT
//
// The default system port could not be opened.
///
DMUS_E_CANNOT_OPEN_PORT = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0206;//MAKE_DMHRESULTERROR(0x0206)
(* DMUS_E_CONNOT_CONVERT
*
* A call to MIDIToMusic() or MusicToMIDI() resulted in an error because
* the requested conversion could not happen. This usually occurs when the
* provided DMUS_CHORD_KEY structure has an invalid chord or scale pattern.
*)
DMUS_E_CONNOT_CONVERT = MAKE_DMHRESULTERROR + $0207;
 
// DMUS_E_CONNOT_CONVERT
//
// A call to MIDIToMusic() or MusicToMIDI() resulted in an error because
// the requested conversion could not happen. This usually occurs when the
// provided DMUS_CHORD_KEY structure has an invalid chord or scale pattern.
///
DMUS_E_CONNOT_CONVERT = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0207;//MAKE_DMHRESULTERROR(0x0207)
(* DMUS_E_DESCEND_CHUNK_FAIL
*
* DMUS_E_DESCEND_CHUNK_FAIL is returned when the end of the file
* was reached before the desired chunk was found.
*)
DMUS_E_DESCEND_CHUNK_FAIL = MAKE_DMHRESULTERROR + $0210;
 
// DMUS_E_DESCEND_CHUNK_FAIL
//
// DMUS_E_DESCEND_CHUNK_FAIL is returned when the end of the file
// was reached before the desired chunk was found.
///
DMUS_E_DESCEND_CHUNK_FAIL = (1 shl 31) + (FACILITY_DIRECTMUSIC shl 16) + DMUS_ERRBASE + $0210;//MAKE_DMHRESULTERROR(0x0210)
 
(************************************************************************
* *
* dmksctrl.h -- Definition of IKsControl *
* *
* Copyright (c) 1998, Microsoft Corp. All rights reserved. *
* *
* *
* This header file contains the definition of IKsControl, which *
* duplicates definitions from ks.h and ksproxy.h. Your code should *
* include ks.h and ksproxy.h directly if you have them (they are *
* provided in the Windows 98 DDK and will be in the Windows NT 5 *
* SDK). *
* *
************************************************************************)
 
//************************************************************************
// *
// dmksctrl.h -- Definition of IKsControl *
// *
// Copyright (c) 1998, Microsoft Corp. All rights reserved. *
// *
// *
// This header file contains the definition of IKsControl, which *
// duplicates definitions from ks.h and ksproxy.h. Your code should *
// include ks.h and ksproxy.h directly if you have them (they are *
// provided in the Windows 98 DDK and will be in the Windows NT 5 *
// SDK). *
// *
//**********************************************************************
(*
* Warning: This will prevent the rest of ks.h from being pulled in if ks.h is
* included after dmksctrl.h. Make sure you do not include both headers in
* the same source file.
*)
 
//
// Warning: This will prevent the rest of ks.h from being pulled in if ks.h is
// included after dmksctrl.h. Make sure you do not include both headers in
// the same source file.
///
type
TData = record
_Set : TGUID;
Id : Cardinal;
Flags : Cardinal;
PKsIdentifier = ^TKsIdentifier;
TKsIdentifier = packed record
case integer of
1 : (
Set_: TGUID;
Id : ULONG;
Flags: ULONG
);
2 : (Alignment: LONGLONG);
end;
 
TKSIDENTIFIER = record
Data : TData;
Alignment : LONGLONG;
end;
PKsProperty = ^TKsProperty;
TKsProperty = TKsIdentifier;
 
KSIDENTIFIER = TKSIDENTIFIER;
PKSIDENTIFIER = ^KSIDENTIFIER;
PKsMethod = ^TKsMethod;
TKsMethod = TKsIdentifier;
 
TKSPROPERTY = KSIDENTIFIER;
KSPROPERTY = KSIDENTIFIER;
PKSPROPERTY = ^KSIDENTIFIER;
TKSMETHOD = KSIDENTIFIER;
KSMETHOD = KSIDENTIFIER;
PKSMETHOD = ^KSIDENTIFIER;
TKSEVENT = KSIDENTIFIER;
KSEVENT = KSIDENTIFIER;
PKSEVENT = ^KSIDENTIFIER;
PKsEvent = ^TKsEvent;
TKsEvent = TKsIdentifier;
 
const
KSMETHOD_TYPE_NONE = $00000000;
13203,64 → 19010,33
type
IKsControl = interface(IUnknown)
['{28F54685-06FD-11D2-B27A-00A0C9223196}']
//IKsControl
function KsProperty(const _Property: TKSPROPERTY; PropertyLength: Cardinal; var PropertyData;
DataLength: Cardinal; var BytesReturned: Cardinal) : HResult; stdcall;
function KsMethod(const Method: TKSMETHOD; MethodLength: Cardinal; var PropertyData;
DataLength: Cardinal; var BytesReturned: Cardinal) : HResult; stdcall;
function KsEvent(const Event: TKSEVENT; EventLength: Cardinal; var EventData;
DataLength: Cardinal; var BytesReturned: Cardinal) : HResult; stdcall;
function KsProperty (const pProperty: TKsProperty; PropertyLength: ULONG;
var PropertyData; DataLength: ULONG; out BytesReturned: ULONG) : HResult; stdcall;
function KsMethod(const Method: TKsMethod; MethodLength: ULONG;
var MethodData; DataLength: ULONG; out BytesReturned: ULONG) : HResult; stdcall;
function KsEvent (const Event: TKsEvent; EventLength: ULONG;
var EventData; DataLength: ULONG; out BytesReturned: ULONG) : HResult; stdcall;
end;
 
const
IID_IKsControl : TGUID = '{28F54685-06FD-11D2-B27A-00A0C9223196}';
type
IID_IKsControl = IKsControl;
STATIC_IID_IKsControl = IID_IKsControl;
 
// These formats are in ksmedia.h
KSDATAFORMAT_SUBTYPE_MIDI : TGUID = '{1D262760-E957-11CF-A5D6-28DB04C10000}';
KSDATAFORMAT_SUBTYPE_DIRECTMUSIC : TGUID = '{1A82F8BC-3F8B-11D2-B774-0060083316C1}';
 
//**************************************************************************
// *
// DMusBuff.h -- This module defines the buffer format for DirectMusic *
// Shared file between user mode and kernel mode components *
// *
// Copyright (c) 1998, Microsoft Corp. All rights reserved. *
// *
//*************************************************************************
 
// Format of DirectMusic events in a buffer
//
// A buffer contains 1 or more events, each with the following header.
// Immediately following the header is the event data. The header+data
// size is rounded to the nearest quadword (8 bytes).
///
// Do not pad at end - that's where the data is
type
TDMUS_EVENTHEADER = record
cbEvent : DWORD; // Unrounded bytes in event
dwChannelGroup : DWORD; // Channel group of event
rtDelta : REFERENCE_TIME; // Delta from start time of entire buffer
dwFlags : DWORD; // Flags DMUS_EVENT_xxx
end;
DMUS_EVENTHEADER = TDMUS_EVENTHEADER;
LPDMUS_EVENTHEADER = ^TDMUS_EVENTHEADER;
 
const
DMUS_EVENT_STRUCTURED = $00000001; // Unstructured data (SysEx, etc.)
(* These formats are in ksmedia.h
*)
KSDATAFORMAT_SUBTYPE_MIDI : TGUID = '{1D262760-E957-11CF-A5D6-28DB04C10000}';
 
// The number of bytes to allocate for an event with 'cb' data bytes.
//
function QWORD_ALIGN(x: LONGLONG) : LONGLONG; //(((x) + 7) & ~7)
function DMUS_EVENT_SIZE(cb: LONGLONG) : LONGLONG; //QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb)
KSDATAFORMAT_SUBTYPE_DIRECTMUSIC : TGUID = '{1a82f8bc-3f8b-11d2-b774-0060083316c1}';
 
//***********************************************************************
// *
// dmusicc.h -- This module defines the DirectMusic core API's *
// *
// Copyright (c) 1998, Microsoft Corp. All rights reserved. *
// *
//**********************************************************************
(************************************************************************
* *
* dmusicc.h -- This module defines the DirectMusic core API's *
* *
* Copyright (c) 1998, Microsoft Corp. All rights reserved. *
* *
************************************************************************)
 
const
DMUS_MAX_DESCRIPTION = 128;
13267,44 → 19043,44
DMUS_MAX_DRIVER = 128;
 
type
TDMUS_BUFFERDESC = record
dwSize : DWORD;
PDMus_BufferDesc = ^TDMus_BufferDesc;
TDMus_BufferDesc = packed record
dwSize,
dwFlags : DWORD;
guidBufferFormat : TGUID;
cbBuffer : DWORD;
end;
DMUS_BUFFERDESC = TDMUS_BUFFERDESC;
LPDMUS_BUFFERDESC = ^TDMUS_BUFFERDESC;
 
// DMUS_EFFECT_ flags are used in the dwEffectFlags fields of both DMUS_PORTCAPS
// and DMUS_PORTPARAMS.
///
const
(* DMUS_EFFECT_ flags are used in the dwEffectFlags fields of both DMUS_PORTCAPS
* and DMUS_PORTPARAMS.
*)
DMUS_EFFECT_NONE = $00000000;
DMUS_EFFECT_REVERB = $00000001;
DMUS_EFFECT_CHORUS = $00000002;
 
// For DMUS_PORTCAPS dwClass
//
DMUS_PC_INPUTCLASS = (0);
DMUS_PC_OUTPUTCLASS = (1);
(* For DMUS_PORTCAPS dwClass
*)
DMUS_PC_INPUTCLASS = 0;
DMUS_PC_OUTPUTCLASS = 1;
 
// For DMUS_PORTCAPS dwFlags
//
DMUS_PC_DLS = ($00000001);
DMUS_PC_EXTERNAL = ($00000002);
DMUS_PC_SOFTWARESYNTH = ($00000004);
DMUS_PC_MEMORYSIZEFIXED = ($00000008);
DMUS_PC_GMINHARDWARE = ($00000010);
DMUS_PC_GSINHARDWARE = ($00000020);
DMUS_PC_XGINHARDWARE = ($00000040);
DMUS_PC_DIRECTSOUND = ($00000080);
DMUS_PC_SHAREABLE = ($00000100);
DMUS_PC_SYSTEMMEMORY = ($7FFFFFFF);
(* For DMUS_PORTCAPS dwFlags
*)
DMUS_PC_DLS = $00000001;
DMUS_PC_EXTERNAL = $00000002;
DMUS_PC_SOFTWARESYNTH = $00000004;
DMUS_PC_MEMORYSIZEFIXED = $00000008;
DMUS_PC_GMINHARDWARE = $00000010;
DMUS_PC_GSINHARDWARE = $00000020;
DMUS_PC_XGINHARDWARE = $00000040;
DMUS_PC_DIRECTSOUND = $00000080;
DMUS_PC_SHAREABLE = $00000100;
DMUS_PC_DLS2 = $00000200;
DMUS_PC_SYSTEMMEMORY = $7FFFFFFF;
 
type
 
TDMUS_PORTCAPS = record
PDMus_PortCaps = ^TDMus_PortCaps;
TDMus_PortCaps = packed record
dwSize : DWORD;
dwFlags : DWORD;
guidPort : TGUID;
13315,22 → 19091,20
dwMaxVoices : DWORD;
dwMaxAudioChannels : DWORD;
dwEffectFlags : DWORD;
wszDescription : array[0..DMUS_MAX_DESCRIPTION - 1] of WCHAR;
wszDescription: array [0..DMUS_MAX_DESCRIPTION-1] of WideChar;
end;
DMUS_PORTCAPS = TDMUS_PORTCAPS;
LPDMUS_PORTCAPS = ^TDMUS_PORTCAPS;
 
// Values for DMUS_PORTCAPS dwType. This field indicates the underlying
// driver type of the port.
///
const
DMUS_PORT_WINMM_DRIVER = (0);
DMUS_PORT_USER_MODE_SYNTH = (1);
DMUS_PORT_KERNEL_MODE = (2);
(* Values for DMUS_PORTCAPS dwType. This field indicates the underlying
* driver type of the port.
*)
DMUS_PORT_WINMM_DRIVER = 0;
DMUS_PORT_USER_MODE_SYNTH = 1;
DMUS_PORT_KERNEL_MODE = 2;
 
// These flags (set in dwValidParams) indicate which other members of the
// DMUS_PORTPARAMS are valid.
//
(* These flags (set in dwValidParams) indicate which other members of the *)
(* DMUS_PORTPARAMS are valid. *)
(* *)
DMUS_PORTPARAMS_VOICES = $00000001;
DMUS_PORTPARAMS_CHANNELGROUPS = $00000002;
DMUS_PORTPARAMS_AUDIOCHANNELS = $00000004;
13339,7 → 19113,8
DMUS_PORTPARAMS_SHARE = $00000040;
 
type
TDMUS_PORTPARAMS = record
PDMus_PortParams = ^TDMus_PortParams;
TDMus_PortParams = packed record
dwSize : DWORD;
dwValidParams : DWORD;
dwVoices : DWORD;
13349,476 → 19124,447
dwEffectFlags : DWORD;
fShare : BOOL;
end;
DMUS_PORTPARAMS = TDMUS_PORTPARAMS;
LPDMUS_PORTPARAMS = ^TDMUS_PORTPARAMS;
 
TDMUS_SYNTHSTATS = record
dwSize : DWORD; // Size in bytes of the structure
dwValidStats : DWORD; // Flags indicating which fields below are valid.
dwVoices : DWORD; // Average number of voices playing.
dwTotalCPU : DWORD; // Total CPU usage as percent * 100.
dwCPUPerVoice : DWORD; // CPU per voice as percent * 100.
dwLostNotes : DWORD; // Number of notes lost in 1 second.
dwFreeMemory : DWORD; // Free memory in bytes
lPeakVolume : Longint; // Decibel level * 100.
PDMus_SynthStats = ^TDMus_SynthStats;
TDMus_SynthStats = packed record
dwSize: DWORD; (* Size in bytes of the structure *)
dwValidStats: DWORD; (* Flags indicating which fields below are valid. *)
dwVoices: DWORD; (* Average number of voices playing. *)
dwTotalCPU: DWORD; (* Total CPU usage as percent * 100. *)
dwCPUPerVoice: DWORD; (* CPU per voice as percent * 100. *)
dwLostNotes: DWORD; (* Number of notes lost in 1 second. *)
dwFreeMemory: DWORD; (* Free memory in bytes *)
lPeakVolume: LongInt; (* Decibel level * 100. *)
end;
DMUS_SYNTHSTATS = TDMUS_SYNTHSTATS;
LPDMUS_SYNTHSTATS = ^TDMUS_SYNTHSTATS;
 
const
DMUS_SYNTHSTATS_VOICES = 1;
DMUS_SYNTHSTATS_TOTAL_CPU = 2;
DMUS_SYNTHSTATS_CPU_PER_VOICE = 4;
DMUS_SYNTHSTATS_LOST_NOTES = 8;
DMUS_SYNTHSTATS_PEAK_VOLUME = 16;
DMUS_SYNTHSTATS_FREE_MEMORY = 32;
DMUS_SYNTHSTATS_VOICES = 1 shl 0;
DMUS_SYNTHSTATS_TOTAL_CPU = 1 shl 1;
DMUS_SYNTHSTATS_CPU_PER_VOICE = 1 shl 2;
DMUS_SYNTHSTATS_LOST_NOTES = 1 shl 3;
DMUS_SYNTHSTATS_PEAK_VOLUME = 1 shl 4;
DMUS_SYNTHSTATS_FREE_MEMORY = 1 shl 5;
 
DMUS_SYNTHSTATS_SYSTEMMEMORY = DMUS_PC_SYSTEMMEMORY;
 
type
TDMUS_WAVES_REVERB_PARAMS = record
fInGain : Single; // Input gain in dB (to avoid output overflows)
fReverbMix : Single; // Reverb mix in dB. 0dB means 100% wet reverb (no direct signal)
//Negative values gives less wet signal.
//The coeficients are calculated so that the overall output level stays
//(approximately) constant regardless of the ammount of reverb mix.
fReverbTime : Single; // The reverb decay time, in milliseconds.
fHighFreqRTRatio : Single; // The ratio of the high frequencies to the global reverb time.
//Unless very 'splashy-bright' reverbs are wanted, this should be set to
//a value < 1.0.
//For example if dRevTime==1000ms and dHighFreqRTRatio=0.1 than the
//decay time for high frequencies will be 100ms.
TDMus_Waves_Reverb_Params = packed record
fInGain, (* Input gain in dB (to avoid output overflows) *)
fReverbMix, (* Reverb mix in dB. 0dB means 100% wet reverb (no direct signal)
Negative values gives less wet signal.
The coeficients are calculated so that the overall output level stays
(approximately) constant regardless of the ammount of reverb mix. *)
fReverbTime, (* The reverb decay time, in milliseconds. *)
fHighFreqRTRatio : Single; (* The ratio of the high frequencies to the global reverb time.
Unless very 'splashy-bright' reverbs are wanted, this should be set to
a value < 1.0.
For example if dRevTime==1000ms and dHighFreqRTRatio=0.1 than the
decay time for high frequencies will be 100ms.*)
 
end;
DMUS_WAVES_REVERB_PARAMS = TDMUS_WAVES_REVERB_PARAMS;
 
// Note: Default values for Reverb are:
// fInGain = 0.0dB (no change in level)
// fReverbMix = -10.0dB (a reasonable reverb mix)
// fReverbTime = 1000.0ms (one second global reverb time)
// fHighFreqRTRatio = 0.001 (the ratio of the high frequencies to the global reverb time)
///
 
DMUS_CLOCKTYPE = (DMUS_CLOCK_SYSTEM, DMUS_CLOCK_WAVE); //DMUS_CLOCK_SYSTEM = 0,
//DMUS_CLOCK_WAVE = 1
(* Note: Default values for Reverb are:
fInGain = 0.0dB (no change in level)
fReverbMix = -10.0dB (a reasonable reverb mix)
fReverbTime = 1000.0ms (one second global reverb time)
fHighFreqRTRatio = 0.001 (the ratio of the high frequencies to the global reverb time)
*)
 
TDMUS_CLOCKINFO = record
dwSize : DWORD;
ctType : DMUS_CLOCKTYPE;
guidClock : TGUID; // Identifies this time source
wszDescription : array[0..DMUS_MAX_DESCRIPTION - 1] of WCHAR;
TDMus_ClockType = (
DMUS_CLOCK_SYSTEM,
DMUS_CLOCK_WAVE
);
 
PDMus_ClockInfo = ^TDMus_ClockInfo;
TDMus_ClockInfo = packed record
dwSize : WORD;
ctType : TDMus_ClockType;
guidClock : TGUID; (* Identifies this time source *)
wszDescription : array [0..DMUS_MAX_DESCRIPTION-1] of WideChar;
end;
DMUS_CLOCKINFO = TDMUS_CLOCKINFO;
LPDMUS_CLOCKINFO = ^TDMUS_CLOCKINFO;
 
const
DMUS_EVENT_STRUCTURED = $00000001; (* Unstructured data (SysEx, etc.) *)
 
(* Standard values for voice priorities. Numerically higher priorities are higher in priority.
* These priorities are used to set the voice priority for all voices on a channel. They are
* used in the dwPriority parameter of IDirectMusicPort::GetPriority and returned in the
* lpwPriority parameter of pdwPriority.
*
* These priorities are shared with DirectSound.
*)
 
const
DAUD_CRITICAL_VOICE_PRIORITY = $F0000000;
DAUD_HIGH_VOICE_PRIORITY = $C0000000;
DAUD_STANDARD_VOICE_PRIORITY = $80000000;
DAUD_LOW_VOICE_PRIORITY = $40000000;
DAUD_PERSIST_VOICE_PRIORITY = $10000000;
 
(* These are the default priorities assigned if not overridden. By default priorities are
* equal across channel groups (e.g. channel 5 on channel group 1 has the same priority as
* channel 5 on channel group 2;.
*
* In accordance with DLS level 1, channel 10 has the highest priority, followed by 1 through 16
* except for 10.
*)
DAUD_CHAN1_VOICE_PRIORITY_OFFSET = $0000000E;
DAUD_CHAN2_VOICE_PRIORITY_OFFSET = $0000000D;
DAUD_CHAN3_VOICE_PRIORITY_OFFSET = $0000000C;
DAUD_CHAN4_VOICE_PRIORITY_OFFSET = $0000000B;
DAUD_CHAN5_VOICE_PRIORITY_OFFSET = $0000000A;
DAUD_CHAN6_VOICE_PRIORITY_OFFSET = $00000009;
DAUD_CHAN7_VOICE_PRIORITY_OFFSET = $00000008;
DAUD_CHAN8_VOICE_PRIORITY_OFFSET = $00000007;
DAUD_CHAN9_VOICE_PRIORITY_OFFSET = $00000006;
DAUD_CHAN10_VOICE_PRIORITY_OFFSET = $0000000F;
DAUD_CHAN11_VOICE_PRIORITY_OFFSET = $00000005;
DAUD_CHAN12_VOICE_PRIORITY_OFFSET = $00000004;
DAUD_CHAN13_VOICE_PRIORITY_OFFSET = $00000003;
DAUD_CHAN14_VOICE_PRIORITY_OFFSET = $00000002;
DAUD_CHAN15_VOICE_PRIORITY_OFFSET = $00000001;
DAUD_CHAN16_VOICE_PRIORITY_OFFSET = $00000000;
 
 
DAUD_CHAN1_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN1_VOICE_PRIORITY_OFFSET);
DAUD_CHAN2_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN2_VOICE_PRIORITY_OFFSET);
DAUD_CHAN3_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN3_VOICE_PRIORITY_OFFSET);
DAUD_CHAN4_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN4_VOICE_PRIORITY_OFFSET);
DAUD_CHAN5_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN5_VOICE_PRIORITY_OFFSET);
DAUD_CHAN6_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN6_VOICE_PRIORITY_OFFSET);
DAUD_CHAN7_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN7_VOICE_PRIORITY_OFFSET);
DAUD_CHAN8_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN8_VOICE_PRIORITY_OFFSET);
DAUD_CHAN9_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN9_VOICE_PRIORITY_OFFSET);
DAUD_CHAN10_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN10_VOICE_PRIORITY_OFFSET);
DAUD_CHAN11_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN11_VOICE_PRIORITY_OFFSET);
DAUD_CHAN12_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN12_VOICE_PRIORITY_OFFSET);
DAUD_CHAN13_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN13_VOICE_PRIORITY_OFFSET);
DAUD_CHAN14_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN14_VOICE_PRIORITY_OFFSET);
DAUD_CHAN15_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN15_VOICE_PRIORITY_OFFSET);
DAUD_CHAN16_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN16_VOICE_PRIORITY_OFFSET);
 
type
IDirectMusicBuffer = interface;
IDirectMusicPort = interface;
IDirectMusicThru = interface;
IReferenceClock = interface;
PIReferenceClock = IReferenceClock;
 
LPDIRECTMUSICBUFFER = IDirectMusicBuffer;
LPDIRECTMUSICPORT = IDirectMusicPort;
 
IDirectMusic = interface(IUnknown)
['{6536115A-7B2D-11D2-BA18-0000F875AC12}']
// IDirectMusic
function EnumPort(dwIndex: DWORD; var pPortCaps: TDMUS_PORTCAPS) : HResult; stdcall;
function CreateMusicBuffer(const pBufferDesc: TDMUS_BUFFERDESC; out ppBuffer: IDirectMusicBuffer;
['{6536115a-7b2d-11d2-ba18-0000f875ac12}']
function EnumPort (dwIndex: DWORD;
var pPortCaps: TDMus_PortCaps) : HResult; stdcall;
function CreateMusicBuffer (var pBufferDesc: TDMus_BufferDesc;
out ppBuffer: IDirectMusicBuffer;
pUnkOuter: IUnknown) : HResult; stdcall;
function CreatePort(const rclsidPort: TGUID; const pPortParams: TDMUS_PORTPARAMS;
out ppPort: IDirectMusicPort; pUnkOuter: IUnknown) : HResult; stdcall;
function EnumMasterClock(dwIndex: DWORD; var lpClockInfo: TDMUS_CLOCKINFO) : HResult; stdcall;
function GetMasterClock(pguidClock: PGUID; out ppReferenceClock: IReferenceClock) : HResult; stdcall;
function CreatePort (const rclsidPort: TGUID;
const pPortParams: TDMus_PortParams;
out ppPort: IDirectMusicPort;
pUnkOuter: IUnknown) : HResult; stdcall;
function EnumMasterClock (dwIndex: DWORD;
var lpClockInfo: TDMus_ClockInfo) : HResult; stdcall;
function GetMasterClock (pguidClock: PGUID;
ppReferenceClock : PIReferenceClock) : HResult; stdcall;
function SetMasterClock(const rguidClock: TGUID) : HResult; stdcall;
function Activate(fEnable: BOOL) : HResult; stdcall;
function GetDefaultPort(var pguidPort: TGUID) : HResult; stdcall;
function SetDirectSound(pDirectSound: IDirectSound; hWnd: HWND) : HResult; stdcall;
function GetDefaultPort (out pguidPort: TGUID) : HResult; stdcall;
function SetDirectSound (pDirectSound: IDirectSound;
hWnd: HWND) : HResult; stdcall;
 
end;
 
IDirectMusicBuffer = interface(IUnknown)
['{D2AC2878-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicBuffer
['{d2ac2878-b39b-11d1-8704-00600893b1bd}']
function Flush : HResult; stdcall;
function TotalTime(var prtTime: TREFERENCE_TIME) : HResult; stdcall;
function PackStructured(rt: TREFERENCE_TIME; dwChannelGroup: DWORD;
function TotalTime (out prtTime: TReference_Time) : HResult; stdcall;
function PackStructured (const rt: TReference_Time;
dwChannelGroup: DWORD;
dwChannelMessage: DWORD) : HResult; stdcall;
function PackUnstructured(rt: TREFERENCE_TIME; dwChannelGroup: DWORD;
cb: DWORD; const lpb) : HResult; stdcall;
function PackUnstructured (const rt: TReference_Time;
dwChannelGroup: DWORD;
cb: DWORD;
const lpb) : HResult; stdcall;
function ResetReadPtr : HResult; stdcall;
function GetNextEvent(var prt: TREFERENCE_TIME; var pdwChannelGroup: DWORD;
var pdwLength: DWORD; var ppData: Pointer) : HResult; stdcall;
function GetRawBufferPtr(var ppData: Pointer) : HResult; stdcall;
function GetStartTime(var prt: TREFERENCE_TIME) : HResult; stdcall;
function GetUsedBytes(var pcb: DWORD) : HResult; stdcall;
function GetMaxBytes(var pcb: DWORD) : HResult; stdcall;
function GetBufferFormat(var pGuidFormat: TGUID) : HResult; stdcall;
function SetStartTime(rt: TREFERENCE_TIME) : HResult; stdcall;
function GetNextEvent (out prt: TReference_Time;
out pdwChannelGroup: DWORD;
out pdwLength: DWORD;
out ppData: Pointer) : HResult; stdcall;
 
function GetRawBufferPtr (out ppData: Pointer) : HResult; stdcall;
function GetStartTime (out prt: TReference_Time) : HResult; stdcall;
function GetUsedBytes (out pcb: DWORD) : HResult; stdcall;
function GetMaxBytes (out pcb: DWORD) : HResult; stdcall;
function GetBufferFormat (out pGuidFormat: TGUID) : HResult; stdcall;
function SetStartTime (const rt: TReference_Time) : HResult; stdcall;
function SetUsedBytes(cb: DWORD) : HResult; stdcall;
end;
// Format of DirectMusic events in a buffer
//
// A buffer contains 1 or more events, each with the following header.
// Immediately following the header is the event data. The header+data
// size is rounded to the nearest quadword (8 bytes).
///
{TDMUS_EVENTHEADER = record
cbEvent : DWORD; // Unrounded bytes in event
dwChannelGroup : DWORD; // Channel group of event
rtDelta : REFERENCE_TIME; // Delta from start time of entire buffer
dwFlags : DWORD; // Flags DMUS_EVENT_xxx
 
(* Format of DirectMusic events in a buffer
*
* A buffer contains 1 or more events, each with the following header.
* Immediately following the header is the event data. The header+data
* size is rounded to the nearest quadword (8 bytes).
*)
 
TDMus_EventHeader = packed record
cbEvent: DWORD; (* Unrounded bytes in event *)
dwChannelGroup: DWORD; (* Channel group of event *)
rtDelta: TReference_Time; (* Delta from start time of entire buffer *)
dwFlags: DWORD; (* Flags DMUS_EVENT_xxx *)
end;
DMUS_EVENTHEADER = TDMUS_EVENTHEADER;
LPDMUS_EVENTHEADER = ^TDMUS_EVENTHEADER;}
 
IDirectMusicInstrument = interface(IUnknown)
['{D2AC287D-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicInstrument
function GetPatch(var pdwPatch: DWORD) : HResult; stdcall;
['{d2ac287d-b39b-11d1-8704-00600893b1bd}']
function GetPatch (out pdwPatch: DWORD ) : HResult; stdcall;
function SetPatch(dwPatch: DWORD) : HResult; stdcall;
end;
 
 
IDirectMusicDownloadedInstrument = interface(IUnknown)
['{D2AC287E-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicDownloadedInstrument
// None at this time
['{d2ac287e-b39b-11d1-8704-00600893b1bd}']
(* None at this time *)
end;
 
IDirectMusicCollection = interface(IUnknown)
['{D2AC287C-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicCollection
function GetInstrument(dwPatch: DWORD; out ppInstrument: IDirectMusicInstrument) : HResult; stdcall;
function EnumInstrument(dwIndex: DWORD; var pdwPatch: DWORD;
pwszName: LPWSTR; dwNameLen: DWORD) : HResult; stdcall;
['{d2ac287c-b39b-11d1-8704-00600893b1bd}']
function GetInstrument (dwPatch: DWORD;
out ppInstrument: IDirectMusicInstrument) : HResult; stdcall;
function EnumInstrument (dwIndex: DWORD;
out pdwPatch: DWORD;
pwszName: LPWSTR;
dwNameLen: DWORD) : HResult; stdcall;
end;
 
 
IDirectMusicDownload = interface(IUnknown)
['{D2AC287B-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicDownload
function GetBuffer(var ppvBuffer: Pointer; var pdwSize: DWORD) : HResult; stdcall;
['{d2ac287b-b39b-11d1-8704-00600893b1bd}']
function GetBuffer (out ppvBuffer: Pointer;
out pdwSize: DWORD) : HResult; stdcall;
end;
 
IDirectMusicPortDownload = interface(IUnknown)
['{D2AC287A-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicPortDownload
function GetBuffer(dwDLId: DWORD; out ppIDMDownload: IDirectMusicDownload) : HResult; stdcall;
function AllocateBuffer(dwSize: DWORD; out ppIDMDownload: IDirectMusicDownload) : HResult; stdcall;
function GetDLId(var pdwStartDLId; dwCount: DWORD) : HResult; stdcall;
function GetAppend(var pdwAppend: DWORD) : HResult; stdcall;
['{d2ac287a-b39b-11d1-8704-00600893b1bd}']
function GetBuffer (dwDLId: DWORD;
out ppIDMDownload: IDirectMusicDownload) : HResult; stdcall;
function AllocateBuffer (dwSize: DWORD;
out ppIDMDownload: IDirectMusicDownload) : HResult; stdcall;
function GetDLId (out pdwStartDLId: DWORD;
dwCount: DWORD) : HResult; stdcall;
function GetAppend (out pdwAppend: DWORD) : HResult; stdcall;
function Download(pIDMDownload: IDirectMusicDownload) : HResult; stdcall;
function Unload(pIDMDownload: IDirectMusicDownload) : HResult; stdcall;
end;
 
// These are the default priorities assigned if not overridden. By default priorities are
// equal across channel groups (e.g. channel 5 on channel group 1 has the same priority as
// channel 5 on channel group 2).
//
// In accordance with DLS level 1, channel 10 has the highest priority, followed by 1 through 16
// except for 10.
///
 
IDirectMusicPort = interface(IUnknown)
['{08F2D8C9-37C2-11D2-B9F9-0000F875AC12}']
// IDirectMusicPort
//
['{08f2d8c9-37c2-11d2-b9f9-0000f875ac12}']
function PlayBuffer(pBuffer: IDirectMusicBuffer) : HResult; stdcall;
function SetReadNotificationHandle(hEvent: THandle) : HResult; stdcall;
function SetReadNotificationHandle (hEvent: THANDLE) : HResult; stdcall;
function Read(pBuffer: IDirectMusicBuffer) : HResult; stdcall;
function DownloadInstrument(pInstrument: IDirectMusicInstrument;
out ppDownloadedInstrument: IDirectMusicDownloadedInstrument;
const pNoteRanges;
pNoteRanges: PDMus_NoteRange;
dwNumNoteRanges: DWORD) : HResult; stdcall;
function UnloadInstrument(pDownloadedInstrument: IDirectMusicDownloadedInstrument) : HResult; stdcall;
function GetLatencyClock(out ppClock: IReferenceClock) : HResult; stdcall;
function GetRunningStats(var pStats: TDMUS_SYNTHSTATS) : HResult stdcall;
function GetRunningStats (var pStats: TDMus_SynthStats) : HResult; stdcall;
function Compact : HResult; stdcall;
function GetCaps(var pPortCaps: TDMUS_PORTCAPS) : HResult; stdcall;
function GetCaps (var pPortCaps: TDMus_PortCaps) : HResult; stdcall;
function DeviceIoControl(dwIoControlCode: DWORD;
const lpInBuffer;
nInBufferSize: DWORD;
var lpOutBuffer;
out lpOutBuffer;
nOutBufferSize: DWORD;
var lpBytesReturned: DWORD;
out lpBytesReturned: DWORD;
var lpOverlapped: TOVERLAPPED) : HResult; stdcall;
function SetNumChannelGroups(dwChannelGroups: DWORD) : HResult; stdcall;
function GetNumChannelGroups(var pdwChannelGroups: DWORD) : HResult; stdcall;
function GetNumChannelGroups (out pdwChannelGroups: DWORD) : HResult; stdcall;
function Activate(fActive: BOOL) : HResult; stdcall;
function SetChannelPriority(dwChannelGroup: DWORD; dwChannel: DWORD; dwPriority: DWORD) : HResult; stdcall;
function GetChannelPriority(dwChannelGroup: DWORD; dwChannel: DWORD; var pdwPriority: DWORD) : HResult; stdcall;
function SetDirectSound(pDirectSound: IDirectSound; pDirectSoundBuffer: IDirectSoundBuffer) : HResult; stdcall;
function GetFormat(var pWaveFormatEx: TWAVEFORMATEX; var pdwWaveFormatExSize: DWORD; var pdwBufferSize: DWORD) : HResult; stdcall;
function SetChannelPriority (dwChannelGroup, dwChannel,
dwPriority: DWORD) : HResult; stdcall;
function GetChannelPriority (dwChannelGroup, dwChannel: DWORD;
out pdwPriority: DWORD) : HResult; stdcall;
function SetDirectSound (pDirectSound: IDirectSound;
pDirectSoundBuffer: IDirectSoundBuffer) : HResult; stdcall;
function GetFormat (pWaveFormatEx: PWaveFormatEx;
var pdwWaveFormatExSize: DWORD;
out pdwBufferSize: DWORD) : HResult; stdcall;
end;
 
IDirectMusicThru = interface(IUnknown)
['{CED153E7-3606-11D2-B9F9-0000F875AC12}']
// IDirectMusicThru
///
function ThruChannel(dwSourceChannelGroup: DWORD;
dwSourceChannel: DWORD;
dwDestinationChannelGroup: DWORD;
['{ced153e7-3606-11d2-b9f9-0000f875ac12}']
function ThruChannel (dwSourceChannelGroup,
dwSourceChannel,
dwDestinationChannelGroup,
dwDestinationChannel: DWORD;
pDestinationPort: IDirectMusicPort) : HResult; stdcall;
end;
 
 
IReferenceClock = interface(IUnknown)
['{56A86897-0AD4-11CE-B03A-0020AF0BA770}']
// IReferenceClock
//
['{56a86897-0ad4-11ce-b03a-0020af0ba770}']
(* get the time now *)
function GetTime (out pTime: TReference_Time) : HResult; stdcall;
 
// get the time now
function GetTime(var pTime: TREFERENCE_TIME) : HResult; stdcall;
(* ask for an async notification that a time has elapsed *)
function AdviseTime (const baseTime, (* base time *)
streamTime: TReference_Time; (* stream offset time *)
hEvent: THANDLE; (* advise via this event *)
var pdwAdviseCookie: DWORD) : HResult; stdcall; (* where your cookie goes *)
 
// ask for an async notification that a time has elapsed
function AdviseTime(baseTime: TREFERENCE_TIME; // base time
streamTime: TREFERENCE_TIME; // stream offset time
hEvent: THandle; // advise via this event
var pdwAdviseCookie: DWORD) : HResult; stdcall; // where your cookie goes
(* ask for an async periodic notification that a time has elapsed *)
function AdvisePeriodic (const startTime, (* starting at this time *)
periodTime: TReference_Time; (* time between notifications *)
hSemaphore: THANDLE; (* advise via a semaphore *)
var pdwAdviseCookie: DWORD) : HResult; stdcall; (* where your cookie goes *)
 
// ask for an async periodic notification that a time has elapsed
function AdvisePeriodic(startTime: REFERENCE_TIME; // starting at this time
periodTime: REFERENCE_TIME; // time between notifications
hSemaphore: THandle; // advise via a semaphore
var pdwAdviseCookie: DWORD) : HResult; stdcall; // where your cookie goes
 
// cancel a request for notification
(* cancel a request for notification *)
function Unadvise(dwAdviseCookie: DWORD) : HResult; stdcall;
end;
 
// Delphi‚̐«ŠiãAéŒ¾‚ðˆÚ“®‚³‚¹‚½‚à‚́BinterfaceAclassŒ^‚ÌforwardéŒ¾‚Í“¯‚¶typeƒ†ƒjƒbƒg“à‚ōĐ錾‚³‚ê‚È‚­‚Ä‚Í‚È‚ç‚È‚¢I
//const
// Format of DirectMusic events in a buffer
//
// A buffer contains 1 or more events, each with the following header.
// Immediately following the header is the event data. The header+data
// size is rounded to the nearest quadword (8 bytes).
///
type
IID_IDirectMusic = IDirectMusic;
IID_IDirectMusicBuffer = IDirectMusicBuffer;
IID_IDirectMusicPort = IDirectMusicPort;
IID_IDirectMusicThru = IDirectMusicThru;
IID_IDirectMusicPortDownload = IDirectMusicPortDownload;
IID_IDirectMusicDownload = IDirectMusicDownload;
IID_IDirectMusicCollection = IDirectMusicCollection;
IID_IDirectMusicInstrument = IDirectMusicInstrument;
IID_IDirectMusicDownloadedInstrument = IDirectMusicDownloadedInstrument;
IID_IReferenceClock = IReferenceClock;
 
//DMUS_EVENT_STRUCTURED = $00000001; // Unstructured data (SysEx, etc.)
 
// The number of bytes to allocate for an event with 'cb' data bytes.
///
//function QWORD_ALIGN(x: Cardinal) : Cardinal;
//function DMUS_EVENT_SIZE(cb: Cardinal) : Cardinal;
 
// Standard values for voice priorities. Numerically higher priorities are higher in priority.
// These priorities are used to set the voice priority for all voices on a channel. They are
// used in the dwPriority parameter of IDirectMusicPort::GetPriority and returned in the
// lpwPriority parameter of pdwPriority.
//
// These priorities are shared with DirectSound.
///
 
const
DAUD_CRITICAL_VOICE_PRIORITY = $F0000000;
DAUD_HIGH_VOICE_PRIORITY = $C0000000;
DAUD_STANDARD_VOICE_PRIORITY = $80000000;
DAUD_LOW_VOICE_PRIORITY = $40000000;
DAUD_PERSIST_VOICE_PRIORITY = $10000000;
CLSID_DirectMusic: TGUID = '{636b9f10-0c7d-11d1-95b2-0020afdc7421}';
 
// These are the default priorities assigned if not overridden. By default priorities are
// equal across channel groups (e.g. channel 5 on channel group 1 has the same priority as
// channel 5 on channel group 2).
//
// In accordance with DLS level 1, channel 10 has the highest priority, followed by 1 through 16
// except for 10.
///
 
DAUD_CHAN1_VOICE_PRIORITY_OFFSET = $0000000E;
DAUD_CHAN2_VOICE_PRIORITY_OFFSET = $0000000D;
DAUD_CHAN3_VOICE_PRIORITY_OFFSET = $0000000C;
DAUD_CHAN4_VOICE_PRIORITY_OFFSET = $0000000B;
DAUD_CHAN5_VOICE_PRIORITY_OFFSET = $0000000A;
DAUD_CHAN6_VOICE_PRIORITY_OFFSET = $00000009;
DAUD_CHAN7_VOICE_PRIORITY_OFFSET = $00000008;
DAUD_CHAN8_VOICE_PRIORITY_OFFSET = $00000007;
DAUD_CHAN9_VOICE_PRIORITY_OFFSET = $00000006;
DAUD_CHAN10_VOICE_PRIORITY_OFFSET = $0000000F;
DAUD_CHAN11_VOICE_PRIORITY_OFFSET = $00000005;
DAUD_CHAN12_VOICE_PRIORITY_OFFSET = $00000004;
DAUD_CHAN13_VOICE_PRIORITY_OFFSET = $00000003;
DAUD_CHAN14_VOICE_PRIORITY_OFFSET = $00000002;
DAUD_CHAN15_VOICE_PRIORITY_OFFSET = $00000001;
DAUD_CHAN16_VOICE_PRIORITY_OFFSET = $00000000;
DAUD_CHAN1_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN1_VOICE_PRIORITY_OFFSET);
DAUD_CHAN2_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN2_VOICE_PRIORITY_OFFSET);
DAUD_CHAN3_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN3_VOICE_PRIORITY_OFFSET);
DAUD_CHAN4_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN4_VOICE_PRIORITY_OFFSET);
DAUD_CHAN5_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN5_VOICE_PRIORITY_OFFSET);
DAUD_CHAN6_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN6_VOICE_PRIORITY_OFFSET);
DAUD_CHAN7_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN7_VOICE_PRIORITY_OFFSET);
DAUD_CHAN8_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN8_VOICE_PRIORITY_OFFSET);
DAUD_CHAN9_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN9_VOICE_PRIORITY_OFFSET);
DAUD_CHAN10_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN10_VOICE_PRIORITY_OFFSET);
DAUD_CHAN11_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN11_VOICE_PRIORITY_OFFSET);
DAUD_CHAN12_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN12_VOICE_PRIORITY_OFFSET);
DAUD_CHAN13_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN13_VOICE_PRIORITY_OFFSET);
DAUD_CHAN14_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN14_VOICE_PRIORITY_OFFSET);
DAUD_CHAN15_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN15_VOICE_PRIORITY_OFFSET);
DAUD_CHAN16_DEF_VOICE_PRIORITY = (DAUD_STANDARD_VOICE_PRIORITY or DAUD_CHAN16_VOICE_PRIORITY_OFFSET);
 
 
//GUID definition
IID_IReferenceClock : TGUID = '{56A86897-0AD4-11CE-B03A-0020AF0BA770}';
 
CLSID_DirectMusic : TGUID = '{636B9F10-0C7D-11D1-95B2-0020AFDC7421}';
CLSID_DirectMusicCollection : TGUID = '{480FF4B0-28B2-11D1-BEF7-00C04FBF8FEF}';
CLSID_DirectMusicCollection: TGUID = '{480ff4b0-28b2-11d1-bef7-00c04fbf8fef}';
CLSID_DirectMusicSynth : TGUID = '{58C2B4D0-46E7-11D1-89AC-00A0C9054129}';
 
IID_IDirectMusic : TGUID = '{6536115A-7B2D-11D2-BA18-0000F875AC12}';
IID_IDirectMusicBuffer : TGUID = '{D2AC2878-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicPort : TGUID = '{08F2D8C9-37C2-11D2-B9F9-0000F875AC12}';
IID_IDirectMusicThru : TGUID = '{CED153E7-3606-11D2-B9F9-0000F875AC12}';
IID_IDirectMusicPortDownload: TGUID = '{D2AC287A-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicDownload : TGUID = '{D2AC287B-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicCollection : TGUID = '{D2AC287C-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicInstrument : TGUID = '{D2AC287D-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicDownloadedInstrument: TGUID = '{D2AC287E-B39B-11D1-8704-00600893B1BD}';
(* Property Query GUID_DMUS_PROP_GM_Hardware - Local GM set, no need to download
* Property Query GUID_DMUS_PROP_GS_Hardware - Local GS set, no need to download
* Property Query GUID_DMUS_PROP_XG_Hardware - Local XG set, no need to download
* Property Query GUID_DMUS_PROP_DLS1 - Support DLS level 1
* Property Query GUID_DMUS_PROP_XG_Capable - Support minimum requirements of XG
* Property Query GUID_DMUS_PROP_GS_Capable - Support minimum requirements of GS
* Property Query GUID_DMUS_PROP_SynthSink_DSOUND - Synthsink talks to DSound
* Property Query GUID_DMUS_PROP_SynthSink_WAVE - Synthsink talks to Wave device
*
* Item 0: Supported
* Returns a DWORD which is non-zero if the feature is supported
*)
GUID_DMUS_PROP_GM_Hardware: TGUID = '{178f2f24-c364-11d1-a760-0000f875ac12}';
GUID_DMUS_PROP_GS_Hardware: TGUID = '{178f2f25-c364-11d1-a760-0000f875ac12}';
GUID_DMUS_PROP_XG_Hardware: TGUID = '{178f2f26-c364-11d1-a760-0000f875ac12}';
GUID_DMUS_PROP_XG_Capable: TGUID = '{6496aba1-61b0-11d2-afa6-00aa0024d8b6}';
GUID_DMUS_PROP_GS_Capable: TGUID = '{6496aba2-61b0-11d2-afa6-00aa0024d8b6}';
GUID_DMUS_PROP_DLS1: TGUID = '{178f2f27-c364-11d1-a760-0000f875ac12}';
GUID_DMUS_PROP_DLS2: TGUID = '{f14599e5-4689-11d2-afa6-00aa0024d8b6}';
GUID_DMUS_PROP_INSTRUMENT2: TGUID = '{865fd372-9f67-11d2-872a-00600893b1bd}';
GUID_DMUS_PROP_SynthSink_DSOUND: TGUID = '{0aa97844-c877-11d1-870c-00600893b1bd}';
GUID_DMUS_PROP_SynthSink_WAVE: TGUID = '{0aa97845-c877-11d1-870c-00600893b1bd}';
GUID_DMUS_PROP_SampleMemorySize: TGUID = '{178f2f28-c364-11d1-a760-0000f875ac12}';
GUID_DMUS_PROP_SamplePlaybackRate: TGUID = '{2a91f713-a4bf-11d2-bbdf-00600833dbd8}';
 
// Alternate interface ID for IID_IDirectMusic, available in DX7 release and after.
IID_IDirectMusic2 : TGUID = '{6FC2CAE1-BC78-11D2-AFA6-00AA0024D8B6}';
(* Property Get/Set GUID_DMUS_PROP_WriteLatency
*
* Item 0: Synth buffer write latency, in milliseconds
* Get/Set SynthSink latency, the average time after the play head that the next buffer gets written.
*)
GUID_DMUS_PROP_WriteLatency: TGUID = '{268a0fa0-60f2-11d2-afa6-00aa0024d8b6}';
 
// Property Query GUID_DMUS_PROP_GM_Hardware - Local GM set, no need to download
// Property Query GUID_DMUS_PROP_GS_Hardware - Local GS set, no need to download
// Property Query GUID_DMUS_PROP_XG_Hardware - Local XG set, no need to download
// Property Query GUID_DMUS_PROP_DLS1 - Support DLS level 1
// Property Query GUID_DMUS_PROP_XG_Capable - Support minimum requirements of XG
// Property Query GUID_DMUS_PROP_GS_Capable - Support minimum requirements of GS
// Property Query GUID_DMUS_PROP_SynthSink_DSOUND - Synthsink talks to DSound
// Property Query GUID_DMUS_PROP_SynthSink_WAVE - Synthsink talks to Wave device
//
// Item 0: Supported
// Returns a DWORD which is non-zero if the feature is supported
///
GUID_DMUS_PROP_GM_Hardware : TGUID = '{178F2F24-C364-11D1-A760-0000F875AC12}';
GUID_DMUS_PROP_GS_Hardware : TGUID = '{178F2F25-C364-11D1-A760-0000F875AC12}';
GUID_DMUS_PROP_XG_Hardware : TGUID = '{178F2F26-C364-11D1-A760-0000F875AC12}';
GUID_DMUS_PROP_XG_Capable : TGUID = '{6496ABA1-61B0-11D2-AFA6-00AA0024D8B6}';
GUID_DMUS_PROP_GS_Capable : TGUID = '{6496ABA2-61B0-11D2-AFA6-00AA0024D8B6}';
GUID_DMUS_PROP_DLS1 : TGUID = '{178F2F27-C364-11D1-A760-0000F875AC12}';
GUID_DMUS_PROP_SynthSink_DSOUND: TGUID = '{0AA97844-C877-11D1-870C-00600893B1BD}';
GUID_DMUS_PROP_SynthSink_WAVE : TGUID = '{0AA97845-C877-11D1-870C-00600893B1BD}';
(* Property Get/Set GUID_DMUS_PROP_WritePeriod
*
* Item 0: Synth buffer write period, in milliseconds
* Get/Set SynthSink buffer write period, time span between successive writes.
*)
GUID_DMUS_PROP_WritePeriod: TGUID = '{268a0fa1-60f2-11d2-afa6-00aa0024d8b6}';
 
// Property Get/Set GUID_DMUS_PROP_WriteLatency
//
// Item 0: Synth buffer write latency, in milliseconds
// Get/Set SynthSink latency, the average time after the play head that the next buffer gets written.
///
GUID_DMUS_PROP_WriteLatency : TGUID = '{268A0FA0-60F2-11D2-AFA6-00AA0024D8B6}';
(* Property Get GUID_DMUS_PROP_MemorySize
*
* Item 0: Memory size
* Returns a DWORD containing the total number of bytes of sample RAM
*)
GUID_DMUS_PROP_MemorySize: TGUID = '{178f2f28-c364-11d1-a760-0000f875ac12}';
 
// Property Get/Set GUID_DMUS_PROP_WritePeriod
//
// Item 0: Synth buffer write period, in milliseconds
// Get/Set SynthSink buffer write period, time span between successive writes.
///
GUID_DMUS_PROP_WritePeriod : TGUID = '{268A0FA1-60F2-11D2-AFA6-00AA0024D8B6}';
(* Property Set GUID_DMUS_PROP_WavesReverb
*
* Item 0: DMUS_WAVES_REVERB structure
* Sets reverb parameters
*)
GUID_DMUS_PROP_WavesReverb: TGUID = '{04cb5622-32e5-11d2-afa6-00aa0024d8b6}';
 
// Property Get GUID_DMUS_PROP_MemorySize
//
// Item 0: Memory size
// Returns a DWORD containing the total number of bytes of sample RAM
///
GUID_DMUS_PROP_MemorySize : TGUID = '{178F2F28-C364-11D1-A760-0000F875AC12}';
(* Property Set GUID_DMUS_PROP_Effects
*
* Item 0: DWORD with effects flags.
* Get/Set effects bits, same as dwEffectFlags in DMUS_PORTPARAMS and DMUS_PORTCAPS:
* DMUS_EFFECT_NONE
* DMUS_EFFECT_REVERB
* DMUS_EFFECT_CHORUS
*)
GUID_DMUS_PROP_Effects: TGUID = '{cda8d611-684a-11d2-871e-00600893b1bd}';
 
// Property Set GUID_DMUS_PROP_WavesReverb
//
// Item 0: DMUS_WAVES_REVERB structure
// Sets reverb parameters
///
GUID_DMUS_PROP_WavesReverb : TGUID = '{04CB5622-32E5-11D2-AFA6-00AA0024D8B6}';
(* Property Set GUID_DMUS_PROP_LegacyCaps
*
* Item 0: The MIDINCAPS or MIDIOUTCAPS which describes the port's underlying WinMM device. This property is only supported
* by ports which wrap WinMM devices.
*)
 
// Property Set GUID_DMUS_PROP_Effects
//
// Item 0: DWORD with effects flags.
// Get/Set effects bits, same as dwEffectFlags in DMUS_PORTPARAMS and DMUS_PORTCAPS:
// DMUS_EFFECT_NONE
// DMUS_EFFECT_REVERB
// DMUS_EFFECT_CHORUS
///
GUID_DMUS_PROP_Effects : TGUID = '{CDA8D611-684A-11D2-871E-00600893B1BD}';
GUID_DMUS_PROP_LegacyCaps: TGUID = '{cfa7cdc2-00a1-11d2-aad5-0000f875ac12}';
 
// Property Set GUID_DMUS_PROP_LegacyCaps
//
// Item 0: The MIDINCAPS or MIDIOUTCAPS which describes the port's underlying WinMM device. This property is only supported
// by ports which wrap WinMM devices.
///
(* Property Set GUID_DMUS_Volume
*
* Item 0: A long which contains an offset, in 1/100 dB, to be added to the final volume
*
*)
GUID_DMUS_PROP_Volume: TGUID = '{fedfae25-e46e-11d1-aace-0000f875ac12}';
 
GUID_DMUS_PROP_LegacyCaps : TGUID = '{CFA7CDC2-00A1-11D2-AAD5-0000F875AC12}';
(* Min and Max values for setting volume with GUID_DMUS_PROP_Volume *)
 
// Property Set GUID_DMUS_Volume
//
// Item 0: A long which contains an offset, in 1/100 dB, to be added to the final volume
//
///
GUID_DMUS_PROP_Volume : TGUID = '{FEDFAE25-E46E-11D1-AACE-0000F875AC12}';
DMUS_VOLUME_MAX = 2000; (* +20 dB *)
DMUS_VOLUME_MIN = -20000; (* -200 dB *)
 
(************************************************************************
* *
* dmusici.h -- This module contains the API for the *
* DirectMusic performance layer *
* *
* Copyright (c) 1998, Microsoft Corp. All rights reserved. *
* *
************************************************************************)
 
 
 
 
//***********************************************************************
// *
// dmusici.h -- This module contains the API for the *
// DirectMusic performance layer *
// *
// Copyright (c) 1998, Microsoft Corp. All rights reserved. *
// *
//**********************************************************************
type
TRANSITION_TYPE = Word;
MUSIC_TIME = Longint;
TTransition_Type = WORD;
PMusic_Time = ^TMusic_Time;
TMusic_Time = LongInt;
 
const
DMUS_PPQ = 768; // parts per quarter note
DMUS_PPQ = 768; (* parts per quarter note *)
 
const
DMUS_MAX_NAME = 64; // Maximum object name length.
DMUS_MAX_CATEGORY = 64; // Maximum object category name length.
DMUS_MAX_FILENAME = MAX_PATH;
type
TDMus_CommandT_Types = (
DMUS_COMMANDT_GROOVE,
DMUS_COMMANDT_FILL ,
DMUS_COMMANDT_INTRO ,
DMUS_COMMANDT_BREAK ,
DMUS_COMMANDT_END ,
DMUS_COMMANDT_ENDANDINTRO
);
 
TDMus_ShapeT_Types = (
DMUS_SHAPET_FALLING ,
DMUS_SHAPET_LEVEL ,
DMUS_SHAPET_LOOPABLE,
DMUS_SHAPET_LOUD ,
DMUS_SHAPET_QUIET ,
DMUS_SHAPET_PEAKING ,
DMUS_SHAPET_RANDOM ,
DMUS_SHAPET_RISING ,
DMUS_SHAPET_SONG
);
 
 
type
TDMus_ComposeF_Flags = DWORD;
const
DMUS_COMMANDT_GROOVE = 0;
DMUS_COMMANDT_FILL = 1;
DMUS_COMMANDT_INTRO = 2;
DMUS_COMMANDT_BREAK = 3;
DMUS_COMMANDT_END = 4;
DMUS_COMMANDT_ENDANDINTRO = 5;
{typedef enum enumDMUS_COMMANDT_TYPES
{
DMUS_COMMANDT_GROOVE = 0,
DMUS_COMMANDT_FILL = 1,
DMUS_COMMANDT_INTRO = 2,
DMUS_COMMANDT_BREAK = 3,
DMUS_COMMANDT_END = 4,
DMUS_COMMANDT_ENDANDINTRO = 5
DMUS_COMMANDT_TYPES;}
 
DMUS_SHAPET_FALLING = 0;
DMUS_SHAPET_LEVEL = 1;
DMUS_SHAPET_LOOPABLE = 2;
DMUS_SHAPET_LOUD = 3;
DMUS_SHAPET_QUIET = 4;
DMUS_SHAPET_PEAKING = 5;
DMUS_SHAPET_RANDOM = 6;
DMUS_SHAPET_RISING = 7;
DMUS_SHAPET_SONG = 8;
{typedef enum enumDMUS_SHAPET_TYPES
{
DMUS_SHAPET_FALLING = 0,
DMUS_SHAPET_LEVEL = 1,
DMUS_SHAPET_LOOPABLE = 2,
DMUS_SHAPET_LOUD = 3,
DMUS_SHAPET_QUIET = 4,
DMUS_SHAPET_PEAKING = 5,
DMUS_SHAPET_RANDOM = 6,
DMUS_SHAPET_RISING = 7,
DMUS_SHAPET_SONG = 8
DMUS_SHAPET_TYPES;}
 
DMUS_COMPOSEF_NONE = 0;
DMUS_COMPOSEF_ALIGN = $1;
DMUS_COMPOSEF_OVERLAP = $2;
13829,643 → 19575,198
DMUS_COMPOSEF_AFTERPREPARETIME = $40;
DMUS_COMPOSEF_MODULATE = $1000;
DMUS_COMPOSEF_LONG = $2000;
{typedef enum enumDMUS_COMPOSEF_FLAGS
{
DMUS_COMPOSEF_NONE = 0,
DMUS_COMPOSEF_ALIGN = 0x1,
DMUS_COMPOSEF_OVERLAP = 0x2,
DMUS_COMPOSEF_IMMEDIATE = 0x4,
DMUS_COMPOSEF_GRID = 0x8,
DMUS_COMPOSEF_BEAT = 0x10,
DMUS_COMPOSEF_MEASURE = 0x20,
DMUS_COMPOSEF_AFTERPREPARETIME = 0x40,
DMUS_COMPOSEF_MODULATE = 0x1000,
DMUS_COMPOSEF_LONG = 0x2000
DMUS_COMPOSEF_FLAGS;}
 
const
// DMUS_PMSGF_FLAGS fill the DMUS_PMSG's dwFlags member
DMUS_PMSGF_REFTIME = 1; // if rtTime is valid
DMUS_PMSGF_MUSICTIME = 2; // if mtTime is valid
DMUS_PMSGF_TOOL_IMMEDIATE = 4; // if PMSG should be processed immediately
DMUS_PMSGF_TOOL_QUEUE = 8; // if PMSG should be processed a little early, at Queue time
DMUS_PMSGF_TOOL_ATTIME = 16; // if PMSG should be processed at the time stamp
DMUS_PMSGF_TOOL_FLUSH = 32; // if PMSG is being flushed
// The values of DMUS_TIME_RESOLVE_FLAGS may also be used inside the
// DMUS_PMSG's dwFlags member.
 
type
TDMUS_PMSGF_FLAGS = Cardinal;
DMUS_PMSGF_FLAGS = TDMUS_PMSGF_FLAGS;
{typedef enum enumDMUS_PMSGF_FLAGS
{
DMUS_PMSGF_REFTIME = 1, /* if rtTime is valid
DMUS_PMSGF_MUSICTIME = 2, /* if mtTime is valid
DMUS_PMSGF_TOOL_IMMEDIATE = 4, /* if PMSG should be processed immediately
DMUS_PMSGF_TOOL_QUEUE = 8, /* if PMSG should be processed a little early, at Queue time
DMUS_PMSGF_TOOL_ATTIME = 16, /* if PMSG should be processed at the time stamp
DMUS_PMSGF_TOOL_FLUSH = 32 /* if PMSG is being flushed
/* The values of DMUS_TIME_RESOLVE_FLAGS may also be used inside the
/* DMUS_PMSG's dwFlags member.
DMUS_PMSGF_FLAGS;}
 
(* DMUS_PMsgF_FLAGS fill the TDMus_PMsg's dwFlags member *)
TDMus_PMsgF_Flags = DWORD;
const
// DMUS_PMSGT_TYPES fill the DMUS_PMSG's dwType member
DMUS_PMSGT_MIDI = 0; // MIDI short message
DMUS_PMSGT_NOTE = 1; // Interactive Music Note
DMUS_PMSGT_SYSEX = 2; // MIDI long message (system exclusive message)
DMUS_PMSGT_NOTIFICATION = 3; // Notification message
DMUS_PMSGT_TEMPO = 4; // Tempo message
DMUS_PMSGT_CURVE = 5; // Control change / pitch bend, etc. curve
DMUS_PMSGT_TIMESIG = 6; // Time signature
DMUS_PMSGT_PATCH = 7; // Patch changes
DMUS_PMSGT_TRANSPOSE = 8; // Transposition messages
DMUS_PMSGT_CHANNEL_PRIORITY = 9; // Channel priority
DMUS_PMSGT_STOP = 10; // Stop message
DMUS_PMSGT_DIRTY = 11; // Tells Tools that cache GetParam() info to refresh
DMUS_PMSGT_USER = 255; // User message
DMUS_PMsgF_REFTIME = 1; (* if rtTime is valid *)
DMUS_PMsgF_MUSICTIME = 2; (* if mtTime is valid *)
DMUS_PMsgF_TOOL_IMMEDIATE = 4; (* if PMSG should be processed immediately *)
DMUS_PMsgF_TOOL_QUEUE = 8; (* if PMSG should be processed a little early, at Queue time *)
DMUS_PMsgF_TOOL_ATTIME = 16; (* if PMSG should be processed at the time stamp *)
DMUS_PMsgF_TOOL_FLUSH = 32; (* if PMSG is being flushed *)
(* The values of DMUS_TIME_RESOLVE_FLAGS may also be used inside the *)
(* TDMus_PMsg's dwFlags member. *)
 
type
TDMUS_PMSGT_TYPES = Cardinal;
DMUS_PMSGT_TYPES = TDMUS_PMSGT_TYPES;
 
{typedef enum enumDMUS_PMSGT_TYPES
{
DMUS_PMSGT_MIDI = 0, /* MIDI short message
DMUS_PMSGT_NOTE = 1, /* Interactive Music Note
DMUS_PMSGT_SYSEX = 2, /* MIDI long message (system exclusive message)
DMUS_PMSGT_NOTIFICATION = 3, /* Notification message
DMUS_PMSGT_TEMPO = 4, /* Tempo message
DMUS_PMSGT_CURVE = 5, /* Control change / pitch bend, etc. curve
DMUS_PMSGT_TIMESIG = 6, /* Time signature
DMUS_PMSGT_PATCH = 7, /* Patch changes
DMUS_PMSGT_TRANSPOSE = 8, /* Transposition messages
DMUS_PMSGT_CHANNEL_PRIORITY = 9, /* Channel priority
DMUS_PMSGT_STOP = 10, /* Stop message
DMUS_PMSGT_DIRTY = 11, /* Tells Tools that cache GetParam() info to refresh
DMUS_PMSGT_USER = 255 /* User message
DMUS_PMSGT_TYPES;}
 
(* DMUS_PMsgT_TYPES fill the TDMus_PMsg's dwType member *)
TDMus_PMsgT_Types = (
DMUS_PMsgT_MIDI , (* MIDI short message *)
DMUS_PMsgT_NOTE , (* Interactive Music Note *)
DMUS_PMsgT_SYSEX , (* MIDI long message (system exclusive message) *)
DMUS_PMsgT_NOTIFICATION , (* Notification message *)
DMUS_PMsgT_TEMPO , (* Tempo message *)
DMUS_PMsgT_CURVE , (* Control change / pitch bend, etc. curve *)
DMUS_PMsgT_TIMESIG , (* Time signature *)
DMUS_PMsgT_PATCH , (* Patch changes *)
DMUS_PMsgT_TRANSPOSE , (* Transposition messages *)
DMUS_PMsgT_CHANNEL_PRIORITY, (* Channel priority *)
DMUS_PMsgT_STOP , (* Stop message *)
DMUS_PMsgT_DIRTY (* Tells Tools that cache GetParam() info to refresh *)
);
const
// DMUS_SEGF_FLAGS correspond to IDirectMusicPerformance::PlaySegment, and other API
DMUS_SEGF_REFTIME = 64; // time parameter is in reference time
DMUS_SEGF_SECONDARY = 128; // secondary segment
DMUS_SEGF_QUEUE = 256; // queue at the end of the primary segment queue (primary only)
DMUS_SEGF_CONTROL = 512; // play as a control track (secondary segments only)
DMUS_SEGF_AFTERPREPARETIME = 1 shl 10; // play after the prepare time (See IDirectMusicPerformance::GetPrepareTime)
DMUS_SEGF_GRID = 1 shl 11; // play on grid boundary
DMUS_SEGF_BEAT = 1 shl 12; // play on beat boundary
DMUS_SEGF_MEASURE = 1 shl 13; // play on measure boundary
DMUS_SEGF_DEFAULT = 1 shl 14; // use segment's default boundary
DMUS_SEGF_NOINVALIDATE = 1 shl 15; // play without invalidating the currently playing segment(s)
DMUS_PMsgT_USER = TDMus_PMsgT_Types(255); (* User message *)
 
type
TDMUS_SEGF_FLAGS = Cardinal;
DMUS_SEGF_FLAGS = TDMUS_SEGF_FLAGS;
 
{typedef enum enumDMUS_SEGF_FLAGS
{
DMUS_SEGF_REFTIME = 64, /* time parameter is in reference time
DMUS_SEGF_SECONDARY = 128, /* secondary segment
DMUS_SEGF_QUEUE = 256, /* queue at the end of the primary segment queue (primary only)
DMUS_SEGF_CONTROL = 512, /* play as a control track (secondary segments only)
DMUS_SEGF_AFTERPREPARETIME = 1<<10, /* play after the prepare time (See IDirectMusicPerformance::GetPrepareTime)
DMUS_SEGF_GRID = 1<<11, /* play on grid boundary
DMUS_SEGF_BEAT = 1<<12, /* play on beat boundary
DMUS_SEGF_MEASURE = 1<<13, /* play on measure boundary
DMUS_SEGF_DEFAULT = 1<<14, /* use segment's default boundary
DMUS_SEGF_NOINVALIDATE = 1<<15 /* play without invalidating the currently playing segment(s)
DMUS_SEGF_FLAGS;}
 
(* DMUS_SEGF_FLAGS correspond to IDirectMusicPerformance::PlaySegment, and other API *)
TDMus_SegF_Flags = DWORD;
const
// DMUS_TIME_RESOLVE_FLAGS correspond to IDirectMusicPerformance::GetResolvedTime, and can
// also be used interchangeably with the corresponding DMUS_SEGF_FLAGS, since their values
// are intentionally the same
DMUS_TIME_RESOLVE_AFTERPREPARETIME = 1 shl 10; // resolve to a time after the prepare time
DMUS_TIME_RESOLVE_GRID = 1 shl 11; // resolve to a time on a grid boundary
DMUS_TIME_RESOLVE_BEAT = 1 shl 12; // resolve to a time on a beat boundary
DMUS_TIME_RESOLVE_MEASURE = 1 shl 13; // resolve to a time on a measure boundary
DMUS_SEGF_REFTIME = 64; (* time parameter is in reference time *)
DMUS_SEGF_SECONDARY = 128; (* secondary segment *)
DMUS_SEGF_QUEUE = 256; (* queue at the end of the primary segment queue (primary only) *)
DMUS_SEGF_CONTROL = 512; (* play as a control track (secondary segments only) *)
DMUS_SEGF_AFTERPREPARETIME = 1 shl 10; (* play after the prepare time (See IDirectMusicPerformance::GetPrepareTime) *)
DMUS_SEGF_GRID = 1 shl 11; (* play on grid boundary *)
DMUS_SEGF_BEAT = 1 shl 12; (* play on beat boundary *)
DMUS_SEGF_MEASURE = 1 shl 13; (* play on measure boundary *)
DMUS_SEGF_DEFAULT = 1 shl 14; (* use segment's default boundary *)
DMUS_SEGF_NOINVALIDATE = 1 shl 15; (* play without invalidating the currently playing segment(s) *)
 
(* DMUS_TIME_RESOLVE_FLAGS correspond to IDirectMusicPerformance::GetResolvedTime, and can *)
(* also be used interchangeably with the corresponding DMUS_SEGF_FLAGS, since their values *)
(* are intentionally the same *)
type
TDMUS_TIME_RESOLVE_FLAGS = Cardinal;
DMUS_TIME_RESOLVE_FLAGS = TDMUS_TIME_RESOLVE_FLAGS;
 
{typedef enum enumDMUS_TIME_RESOLVE_FLAGS
{
DMUS_TIME_RESOLVE_AFTERPREPARETIME = 1<<10, /* resolve to a time after the prepare time
DMUS_TIME_RESOLVE_GRID = 1<<11, /* resolve to a time on a grid boundary
DMUS_TIME_RESOLVE_BEAT = 1<<12, /* resolve to a time on a beat boundary
DMUS_TIME_RESOLVE_MEASURE = 1<<13 /* resolve to a time on a measure boundary
DMUS_TIME_RESOLVE_FLAGS;}
 
TDMus_Time_Resolve_Flags = DWORD;
const
// The following flags are sent in the IDirectMusicTrack::Play() method
// inside the dwFlags parameter
DMUS_TRACKF_SEEK = 1; // set on a seek
DMUS_TRACKF_LOOP = 2; // set on a loop (repeat)
DMUS_TRACKF_START = 4; // set on first call to Play
DMUS_TRACKF_FLUSH = 8; // set when this call is in response to a flush on the perfomance
DMUS_TRACKF_DIRTY = 16; // set when the track should consider any cached values from a previous call to GetParam to be invalidated
DMUS_TIME_RESOLVE_AFTERPREPARETIME = 1 shl 10; (* resolve to a time after the prepare time *)
DMUS_TIME_RESOLVE_GRID = 1 shl 11; (* resolve to a time on a grid boundary *)
DMUS_TIME_RESOLVE_BEAT = 1 shl 12; (* resolve to a time on a beat boundary *)
DMUS_TIME_RESOLVE_MEASURE = 1 shl 13; (* resolve to a time on a measure boundary *)
 
(* The following flags are sent in the IDirectMusicTrack::Play() method *)
(* inside the dwFlags parameter *)
type
TDMUS_TRACKF_FLAGS = Cardinal;
DMUS_TRACKF_FLAGS = TDMUS_TRACKF_FLAGS;
TDMus_TrackF_Flags = DWORD;
const
DMUS_TRACKF_SEEK = 1; (* set on a seek *)
DMUS_TRACKF_LOOP = 2; (* set on a loop (repeat) *)
DMUS_TRACKF_START = 4; (* set on first call to Play *)
DMUS_TRACKF_FLUSH = 8; (* set when this call is in response to a flush on the perfomance *)
DMUS_TRACKF_DIRTY = 16; (* set when the track should consider any cached values from a previous call to GetParam to be invalidated *)
 
{typedef enum enumDMUS_TRACKF_FLAGS
{
DMUS_TRACKF_SEEK = 1, /* set on a seek
DMUS_TRACKF_LOOP = 2, /* set on a loop (repeat)
DMUS_TRACKF_START = 4, /* set on first call to Play
DMUS_TRACKF_FLUSH = 8, /* set when this call is in response to a flush on the perfomance
DMUS_TRACKF_DIRTY = 16, /* set when the track should consider any cached values from a previous call to GetParam to be invalidated
DMUS_TRACKF_FLAGS;}
 
const
DMUS_MAXSUBCHORD = 8;
 
type
TDMUS_SUBCHORD = record
dwChordPattern : DWORD; // Notes in the subchord
dwScalePattern : DWORD; // Notes in the scale
dwInversionPoints : DWORD; // Where inversions can occur
dwLevels : DWORD; // Which levels are supported by this subchord
bChordRoot : Byte; // Root of the subchord
bScaleRoot : Byte; // Root of the scale
end;
DMUS_SUBCHORD = TDMUS_SUBCHORD;
 
TDMUS_CHORD_KEY = record
wszName : array[0..15] of WideChar; // Name of the chord
wMeasure : Word; // Measure this falls on
bBeat : Byte; // Beat this falls on
bSubChordCount : Byte; // Number of chords in the list of subchords
SubChordList : array[0..DMUS_MAXSUBCHORD - 1] of TDMUS_SUBCHORD;// List of sub chords
dwScale : DWORD; // Scale underlying the entire chord
bKey : Byte; // Key underlying the entire chord
end;
DMUS_CHORD_KEY = TDMUS_CHORD_KEY;
 
const
//typedef enum enumDMUS_NOTEF_FLAGS
DMUS_NOTEF_NOTEON = 1; // Set if this is a MIDI Note On. Otherwise, it is MIDI Note Off
 
type
TDMUS_NOTEF_FLAGS = Cardinal;
DMUS_NOTEF_FLAGS = TDMUS_NOTEF_FLAGS;
 
// The DMUS_PLAYMODE_FLAGS are used to determine how to convert wMusicValue
// into the appropriate bMidiValue.
///
const
//typedef enum enumDMUS_PLAYMODE_FLAGS
DMUS_PLAYMODE_KEY_ROOT = 1; // Transpose on top of the key root.
DMUS_PLAYMODE_CHORD_ROOT = 2; // Transpose on top of the chord root.
DMUS_PLAYMODE_SCALE_INTERVALS = 4; // Use scale intervals from scale pattern.
DMUS_PLAYMODE_CHORD_INTERVALS = 8; // Use chord intervals from chord pattern.
DMUS_PLAYMODE_NONE = 16; // No mode. Indicates the parent part's mode should be used.
 
type
TDMUS_PLAYMODE_FLAGS = Cardinal;
DMUS_PLAYMODE_FLAGS = TDMUS_PLAYMODE_FLAGS;
 
// The following are playback modes that can be created by combining the DMUS_PLAYMODE_FLAGS
// in various ways:
///
 
// Fixed. wMusicValue holds final MIDI note value. This is used for drums, sound effects, and sequenced
// notes that should not be transposed by the chord or scale.
///
const
DMUS_PLAYMODE_FIXED = 0;
// In fixed to key, the musicvalue is again a fixed MIDI value, but it
// is transposed on top of the key root.
///
DMUS_PLAYMODE_FIXEDTOKEY = DMUS_PLAYMODE_KEY_ROOT;
// In fixed to chord, the musicvalue is also a fixed MIDI value, but it
// is transposed on top of the chord root.
///
DMUS_PLAYMODE_FIXEDTOCHORD = DMUS_PLAYMODE_CHORD_ROOT;
// In Pedalpoint, the key root is used and the notes only track the intervals in
// the scale. The chord root and intervals are completely ignored. This is useful
// for melodic lines that play relative to the key root.
///
DMUS_PLAYMODE_PEDALPOINT = (DMUS_PLAYMODE_KEY_ROOT or DMUS_PLAYMODE_SCALE_INTERVALS);
// In the Melodic mode, the chord root is used but the notes only track the intervals in
// the scale. The key root and chord intervals are completely ignored. This is useful
// for melodic lines that play relative to the chord root.
///
DMUS_PLAYMODE_MELODIC = (DMUS_PLAYMODE_CHORD_ROOT or DMUS_PLAYMODE_SCALE_INTERVALS);
// Normal chord mode is the prevalent playback mode.
// The notes track the intervals in the chord, which is based on the chord root.
// If there is a scale component to the MusicValue, the additional intervals
// are pulled from the scale and added.
// If the chord does not have an interval to match the chord component of
// the MusicValue, the note is silent.
///
DMUS_PLAYMODE_NORMALCHORD = (DMUS_PLAYMODE_CHORD_ROOT or DMUS_PLAYMODE_CHORD_INTERVALS);
// If it is desirable to play a note that is above the top of the chord, the
// always play mode (known as "purpleized" in a former life) finds a position
// for the note by using intervals from the scale. Essentially, this mode is
// a combination of the Normal and Melodic playback modes, where a failure
// in Normal causes a second try in Melodic mode.
///
DMUS_PLAYMODE_ALWAYSPLAY = (DMUS_PLAYMODE_MELODIC or DMUS_PLAYMODE_NORMALCHORD);
 
// Legacy names for modes...
DMUS_PLAYMODE_PURPLEIZED = DMUS_PLAYMODE_ALWAYSPLAY;
DMUS_PLAYMODE_SCALE_ROOT = DMUS_PLAYMODE_KEY_ROOT;
DMUS_PLAYMODE_FIXEDTOSCALE = DMUS_PLAYMODE_FIXEDTOKEY;
 
const
DMUS_TEMPO_MAX = 350;
DMUS_TEMPO_MIN = 10;
 
DMUS_MASTERTEMPO_MAX = 2.0;
DMUS_MASTERTEMPO_MIN = 0.25;
 
const
DMUS_CURVE_RESET = 1; // Set if the curve needs to be reset.
 
type
TDMUS_CURVE_FLAGS = Cardinal;
DMUS_CURVE_FLAGS = TDMUS_CURVE_FLAGS;
{
DMUS_CURVE_RESET = 1, /* Set if the curve needs to be reset.
DMUS_CURVE_FLAGS; }
 
 
const
//DMUS_CURVE_RESET = 1;
 
// Curve shapes
DMUS_CURVES_LINEAR = 0;
DMUS_CURVES_INSTANT = 1;
DMUS_CURVES_EXP = 2;
DMUS_CURVES_LOG = 3;
DMUS_CURVES_SINE = 4;
 
// curve types
DMUS_CURVET_PBCURVE = $03;
DMUS_CURVET_CCCURVE = $04;
DMUS_CURVET_MATCURVE = $05;
DMUS_CURVET_PATCURVE = $06;
 
// notification type values
// The following correspond to GUID_NOTIFICATION_SEGMENT
const
DMUS_NOTIFICATION_SEGSTART = 0;
DMUS_NOTIFICATION_SEGEND = 1;
DMUS_NOTIFICATION_SEGALMOSTEND = 2;
DMUS_NOTIFICATION_SEGLOOP = 3;
DMUS_NOTIFICATION_SEGABORT = 4;
// The following correspond to GUID_NOTIFICATION_PERFORMANCE
DMUS_NOTIFICATION_MUSICSTARTED = 0;
DMUS_NOTIFICATION_MUSICSTOPPED = 1;
// The following corresponds to GUID_NOTIFICATION_MEASUREANDBEAT
DMUS_NOTIFICATION_MEASUREBEAT = 0;
// The following corresponds to GUID_NOTIFICATION_CHORD
DMUS_NOTIFICATION_CHORD = 0;
// The following correspond to GUID_NOTIFICATION_COMMAND
DMUS_NOTIFICATION_GROOVE = 0;
DMUS_NOTIFICATION_EMBELLISHMENT= 1;
 
type
// Time Signature structure, used by IDirectMusicStyle
// Also used as a parameter for GetParam() and SetParam
TDMUS_TIMESIGNATURE = record
mtTime : MUSIC_TIME;
bBeatsPerMeasure : Byte; // beats per measure (top of time sig)
bBeat : Byte; // what note receives the beat (bottom of time sig.)
// we can assume that 0 means 256th note
wGridsPerBeat : Word; // grids per beat
end;
DMUS_TIMESIGNATURE = TDMUS_TIMESIGNATURE;
 
// Flags for dwValidData. When set, a flag indicates that the
// corresponding field in DMUSOBJECTDESC holds valid data.
const
DMUS_OBJ_OBJECT = 1 shl 0; // Object GUID is valid.
DMUS_OBJ_CLASS = 1 shl 1; // Class GUID is valid.
DMUS_OBJ_NAME = 1 shl 2; // Name is valid.
DMUS_OBJ_CATEGORY = 1 shl 3; // Category is valid.
DMUS_OBJ_FILENAME = 1 shl 4; // File path is valid.
DMUS_OBJ_FULLPATH = 1 shl 5; // Path is full path.
DMUS_OBJ_URL = 1 shl 6; // Path is URL.
DMUS_OBJ_VERSION = 1 shl 7; // Version is valid.
DMUS_OBJ_DATE = 1 shl 8; // Date is valid.
DMUS_OBJ_LOADED = 1 shl 9; // Object is currently loaded in memory.
DMUS_OBJ_MEMORY = 1 shl 10; // Object is pointed to by pbMemData.
 
const
DMUSB_LOADED = 1 shl 0; // Set when band has been loaded
DMUSB_DEFAULT = 1 shl 1; // Set when band is default band for a style
 
type
IDirectMusicTrack = interface;
IDirectMusicPerformance = interface;
IDirectMusicTool = interface;
IDirectMusicSegment = interface;
IDirectMusicSegmentState = interface;
IDirectMusicTool = interface;
IDirectMusicGraph = interface;
//IDirectMusicPort = interface;
//IDirectMusicBuffer = interface;
//IDirectMusicInstrument = interface;
//IDirectMusicDownloadedInstrument = interface;
IDirectMusicBand = interface;
IDirectMusicChordMap = interface;
IDirectMusicLoader = interface;
IDirectMusicObject = interface;
{#ifndef __cplusplus
typedef interface IDirectMusic IDirectMusic;
typedef interface IDirectMusicTrack IDirectMusicTrack;
typedef interface IDirectMusicPerformance IDirectMusicPerformance;
typedef interface IDirectMusicTool IDirectMusicTool;
typedef interface IDirectMusicSegment IDirectMusicSegment;
typedef interface IDirectMusicSegmentState IDirectMusicSegmentState;
typedef interface IDirectMusicGraph IDirectMusicGraph;
typedef interface IDirectMusicPort IDirectMusicPort;
typedef interface IDirectMusicBuffer IDirectMusicBuffer;
typedef interface IDirectMusicInstrument IDirectMusicInstrument;
typedef interface IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument;
typedef interface IDirectMusicBand IDirectMusicBand;
typedef interface IDirectMusicChordMap IDirectMusicChordMap;
typedef interface IDirectMusicObject IDirectMusicObject;
typedef interface IDirectMusicLoader IDirectMusicLoader;
#endif}
 
LPDMUS_OBJECT = IDirectMusicObject;
LPDMUS_LOADER = IDirectMusicLoader;
LPDMUS_BAND = IDirectMusicBand;
 
TDMUS_PMSG_PART = record
PIDirectMusicSegmentState = ^IDirectMusicSegmentState;
 
TDMus_PMsg_Part = record
dwSize : DWORD;
rtTime : REFERENCE_TIME; // real time (in 100 nanosecond increments) \
mtTime : MUSIC_TIME; // music time \
dwFlags : DWORD; // various bits (see DMUS_PMSG_FLAGS enumeration) \
dwPChannel : DWORD; // Performance Channel. The Performance can \
// use this to determine the port/channel. \
dwVirtualTrackID : DWORD; // virtual track ID \
pTool : IDirectMusicTool; // tool interface pointer \
pGraph : IDirectMusicGraph; // tool graph interface pointer \
dwType : DWORD; // PMSG type (see DMUS_PMSGT_TYPES defines) \
dwVoiceID : DWORD; // unique voice id which allows synthesizers to \
// identify a specific event. For DirectX 6.0, \
// this field should always be 0. \
dwGroupID : DWORD; // Track group id \
punkUser : IUnknown; // user com pointer, auto released upon PMSG free
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
end;
// every DMUS_PMSG is based off of this structure. The Performance needs
// to access these members consistently in every PMSG that goes through it.
{typedef struct _DMUS_PMSG
{
/* begin DMUS_PMSG_PART
DMUS_PMSG_PART
/* end DMUS_PMSG_PART
 
DMUS_PMSG;}
TDMUS_PMSG = TDMUS_PMSG_PART;
DMUS_PMSG = TDMUS_PMSG;
(* every TDMus_PMsg is based off of this structure. The Performance needs
to access these members consistently in every PMSG that goes through it. *)
 
// DMUS_NOTE_PMSG
TDMUS_NOTE_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
(* begin DMUS_PMsg_PART *)
PDMus_PMsg = ^TDMus_PMsg;
TDMus_PMsg = TDMus_PMsg_Part;
(* end DMUS_PMsg_PART *)
 
mtDuration : MUSIC_TIME; // duration
wMusicValue : Word; // Description of note in chord and key.
wMeasure : Word; // Measure in which this note occurs
nOffset : Smallint; // Offset from grid at which this note occurs
bBeat : Byte; // Beat (in measure) at which this note occurs
bGrid : Byte; // Grid offset from beat at which this note occurs
bVelocity : Byte; // Note velocity
bFlags : Byte; // see DMUS_NOTE_FLAGS
bTimeRange : Byte; // Range to randomize time.
bDurRange : Byte; // Range to randomize duration.
bVelRange : Byte; // Range to randomize velocity.
bPlayModeFlags : Byte; // Play mode
bSubChordLevel : Byte; // Which subchord level this note uses.
bMidiValue : Byte; // The MIDI note value, converted from wMusicValue
cTranspose : Shortint; // Transposition to add to midi note value after converted from wMusicValue.
end;
DMUS_NOTE_PMSG = TDMUS_NOTE_PMSG;
(* DMUS_NOTIFICATION_PMsg *)
PDMus_Notification_PMsg = ^TDMus_Notification_PMsg;
TDMus_Notification_PMsg = record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
// DMUS_MIDI_PMSG
TDMUS_MIDI_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
 
bStatus : Byte;
bByte1 : Byte;
bByte2 : Byte;
bPad : array[0..0] of Byte;
end;
DMUS_MIDI_PMSG = TDMUS_MIDI_PMSG;
 
// DMUS_PATCH_PMSG
TDMUS_PATCH_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
 
byInstrument : Byte;
byMSB : Byte;
byLSB : Byte;
byPad : array[0..0] of Byte;
end;
DMUS_PATCH_PMSG = TDMUS_PATCH_PMSG;
 
// DMUS_TRANSPOSE_PMSG
TDMUS_TRANSPOSE_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
 
nTranspose : Smallint;
end;
DMUS_TRANSPOSE_PMSG = TDMUS_TRANSPOSE_PMSG;
 
// DMUS_CHANNEL_PRIORITY_PMSG
TDMUS_CHANNEL_PRIORITY_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
 
dwChannelPriority : DWORD;
end;
DMUS_CHANNEL_PRIORITY_PMSG = TDMUS_CHANNEL_PRIORITY_PMSG;
 
// DMUS_TEMPO_PMSG
TDMUS_TEMPO_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
 
dblTempo : Double; // the tempo
end;
DMUS_TEMPO_PMSG = TDMUS_TEMPO_PMSG;
 
// DMUS_SYSEX_PMSG
TDMUS_SYSEX_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
 
dwLen : DWORD; // length of the data
abData : array[0..0] of Byte; // array of data, length equal to dwLen
end;
DMUS_SYSEX_PMSG = TDMUS_SYSEX_PMSG;
 
// DMUS_CURVE_PMSG
TDMUS_CURVE_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
 
mtDuration : MUSIC_TIME; // how long this curve lasts
mtOriginalStart : MUSIC_TIME; // must be set to either zero when this PMSG is created or to the original mtTime of the curve
mtResetDuration : MUSIC_TIME; // how long after the curve is finished to reset to the
// reset value, nResetValue
nStartValue : Smallint; // curve's start value
nEndValue : Smallint; // curve's end value
nResetValue : Smallint; // curve's reset value, sent after mtResetDuration or
// upon a flush or invalidation
wMeasure : Word; // Measure in which this curve occurs
nOffset : Smallint; // Offset from grid at which this curve occurs
bBeat : Byte; // Beat (in measure) at which this curve occurs
bGrid : Byte; // Grid offset from beat at which this curve occurs
bType : Byte; // type of curve
bCurveShape : Byte; // shape of curve
bCCData : Byte; // CC# if this is a control change type
bFlags : Byte; // set to 1 if the nResetValue must be sent when the
// time is reached or an invalidate occurs because
// of a transition. If 0, the curve stays
// permanently stuck at the new value. All bits besides
// 1 are reserved.
 
end;
DMUS_CURVE_PMSG = TDMUS_CURVE_PMSG;
 
// DMUS_TIMESIG_PMSG
TDMUS_TIMESIG_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
 
// Time signatures define how many beats per measure, which note receives
// the beat, and the grid resolution.
bBeatsPerMeasure : Byte; // beats per measure (top of time sig)
bBeat : Byte; // what note receives the beat (bottom of time sig.)
// we can assume that 0 means 256th note
wGridsPerBeat : Word; // grids per beat
end;
DMUS_TIMESIG_PMSG = TDMUS_TIMESIG_PMSG;
 
// DMUS_NOTIFICATION_PMSG
PDMUS_NOTIFICATION_PMSG = ^TDMUS_NOTIFICATION_PMSG;
TDMUS_NOTIFICATION_PMSG = record
// begin DMUS_PMSG_PART
DMUS_PMSG_PART : TDMUS_PMSG_PART;
// end DMUS_PMSG_PART
 
guidNotificationType : TGUID;
dwNotificationOption : DWORD;
dwField1 : DWORD;
dwField2 : DWORD;
end;
DMUS_NOTIFICATION_PMSG = TDMUS_NOTIFICATION_PMSG;
 
TDMUS_VERSION = record
dwVersionMS : DWORD;
dwVersionLS : DWORD;
TDMus_SubChord = packed record
dwChordPattern: DWORD; (* Notes in the subchord *)
dwScalePattern: DWORD; (* Notes in the scale *)
dwInversionPoints: DWORD; (* Where inversions can occur *)
dwLevels: DWORD; (* Which levels are supported by this subchord *)
bChordRoot: BYTE; (* Root of the subchord *)
bScaleRoot: BYTE; (* Root of the scale *)
end;
DMUS_VERSION = TDMUS_VERSION;
LPDMUS_VERSION = ^TDMUS_VERSION;
 
// The DMUSOBJECTDESC structure is used to communicate everything you could
// possibly use to describe a DirectMusic object.
 
TDMUS_OBJECTDESC = record
dwSize : DWORD; // Size of this structure.
dwValidData : DWORD; // Flags indicating which fields below are valid.
guidObject : TGUID; // Unique ID for this object.
guidClass : TGUID; // GUID for the class of object.
ftDate : TFILETIME; // Last edited date of object.
vVersion : TDMUS_VERSION; // Version.
wszName : array[0..DMUS_MAX_NAME - 1] of WCHAR; // Name of object.
wszCategory : array[0..DMUS_MAX_CATEGORY - 1] of WCHAR; // Category for object (optional).
wszFileName : array[0..DMUS_MAX_FILENAME - 1] of WCHAR; // File path.
llMemLength : LONGLONG; // Size of Memory data.
pbMemData : Pointer; // Memory pointer for data.
TDMus_Chord_Key = packed record
wszName: array [0..15] of WideChar; (* Name of the chord *)
wMeasure: WORD; (* Measure this falls on *)
bBeat: BYTE; (* Beat this falls on *)
bSubChordCount: BYTE; (* Number of chords in the list of subchords *)
SubChordList: array [0..DMUS_MAXSUBCHORD-1] of TDMus_SubChord; (* List of sub chords *)
dwScale: DWORD; (* Scale underlying the entire chord *)
bKey: BYTE; (* Key underlying the entire chord *)
end;
DMUS_OBJECTDESC = TDMUS_OBJECTDESC;
LPDMUS_OBJECTDESC = ^TDMUS_OBJECTDESC;
 
IDirectMusicBand = interface(IUnknown)
['{D2AC28C0-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicBand
function CreateSegment(out ppSegment: IDirectMusicSegment) : HResult; stdcall;
function Download(pPerformance: IDirectMusicPerformance) : HResult; stdcall;
function Unload(pPerformance: IDirectMusicPerformance) : HResult; stdcall;
(* Time Signature structure, used by IDirectMusicStyle *)
(* Also used as a parameter for GetParam() and SetParam *)
TDMus_TimeSignature = packed record
mtTime: TMusic_Time;
bBeatsPerMeasure: BYTE; (* beats per measure (top of time sig) *)
bBeat: BYTE; (* what note receives the beat (bottom of time sig.) *)
(* we can assume that 0 means 256th note *)
wGridsPerBeat: WORD; (* grids per beat *)
end;
 
IDirectMusicObject = interface(IUnknown)
['{D2AC28B5-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicObject
function GetDescriptor(var pDesc: TDMUS_OBJECTDESC) : HResult; stdcall;
function SetDescriptor(const pDesc: TDMUS_OBJECTDESC) : HResult; stdcall;
function ParseDescriptor(pStream: IStream;
var pDesc: TDMUS_OBJECTDESC) : HResult; stdcall;
(*/////////////////////////////////////////////////////////////////////
// IDirectMusicSegmentState *)
IDirectMusicSegmentState = interface (IUnknown)
['{a3afdcc7-d3ee-11d1-bc8d-00a0c922e6eb}']
function GetRepeats (out pdwRepeats: DWORD) : HResult; stdcall;
function GetSegment (out ppSegment: IDirectMusicSegment) : HResult; stdcall;
function GetStartTime (out pmtStart: TMusic_Time) : HResult; stdcall;
function GetSeek (out pmtSeek: TMusic_Time) : HResult; stdcall;
function GetStartPoint (out pmtStart: TMusic_Time) : HResult; stdcall;
end;
 
IDirectMusicLoader = interface(IUnknown)
['{2FFAACA2-5DCA-11D2-AFA6-00AA0024D8B6}']
// IDirectMusicLoader
function GetObject(const pDesc: TDMUS_OBJECTDESC;
const riid: TGUID;
out ppv) : HResult; stdcall;
function SetObject(const pDesc: TDMUS_OBJECTDESC) : HResult; stdcall;
function SetSearchDirectory(const rguidClass: TGUID;
pwzPath: PWCHAR;
fClear: BOOL) : HResult; stdcall;
function ScanDirectory(const rguidClass: TGUID;
pwzFileExtension: PWCHAR;
var pwzScanFileName: PWCHAR) : HResult; stdcall;
function CacheObject(pObject: IDirectMusicObject) : HResult; stdcall;
function ReleaseObject(pObject: IDirectMusicObject) : HResult; stdcall;
function ClearCache(const rguidClass: TGUID) : HResult; stdcall;
function EnableCache(const rguidClass: TGUID;
fEnable: BOOL) : HResult; stdcall;
function EnumObject(const rguidClass: TGUID;
dwIndex: DWORD;
var pDesc: TDMUS_OBJECTDESC) : HResult; stdcall;
end;
 
// Stream object supports IDirectMusicGetLoader interface to access loader while file parsing.
IDirectMusicGetLoader = interface(IUnknown)
['{68A04844-D13D-11D1-AFA6-00AA0024D8B6}']
// IDirectMusicGetLoader
function GetLoader(out ppLoader: IDirectMusicLoader) : HResult; stdcall;
end;
 
{ IDirectMusicSegment }
 
(*////////////////////////////////////////////////////////////////////
// IDirectMusicSegment *)
IDirectMusicSegment = interface(IUnknown)
['{F96029A2-4282-11D2-8717-00600893B1BD}']
// IDirectMusicSegment
function GetLength(var pmtLength: MUSIC_TIME) : HResult; stdcall;
function SetLength(mtLength: MUSIC_TIME) : HResult; stdcall;
function GetRepeats(var pdwRepeats: DWORD) : HResult; stdcall;
['{f96029a2-4282-11d2-8717-00600893b1bd}']
function GetLength (out pmtLength: TMusic_Time) : HResult; stdcall;
function SetLength (mtLength: TMusic_Time) : HResult; stdcall;
function GetRepeats (out pdwRepeats: DWORD) : HResult; stdcall;
function SetRepeats(dwRepeats: DWORD) : HResult; stdcall;
function GetDefaultResolution(var pdwResolution: DWORD) : HResult; stdcall;
function GetDefaultResolution (out pdwResolution: DWORD) : HResult; stdcall;
function SetDefaultResolution(dwResolution: DWORD) : HResult; stdcall;
function GetTrack(const rguidType: TGUID;
dwGroupBits: DWORD;
dwIndex: DWORD;
dwGroupBits, dwIndex: DWORD;
out ppTrack: IDirectMusicTrack) : HResult; stdcall;
function GetTrackGroup(pTrack: IDirectMusicTrack;
var pdwGroupBits: DWORD) : HResult; stdcall;
out pdwGroupBits: DWORD) : HResult; stdcall;
function InsertTrack(pTrack: IDirectMusicTrack;
dwGroupBits: DWORD) : HResult; stdcall;
function RemoveTrack(pTrack: IDirectMusicTrack) : HResult; stdcall;
14477,115 → 19778,100
function AddNotificationType(const rguidNotificationType: TGUID) : HResult; stdcall;
function RemoveNotificationType(const rguidNotificationType: TGUID) : HResult; stdcall;
function GetParam(const rguidType: TGUID;
dwGroupBits: DWORD;
dwIndex: DWORD;
mtTime: MUSIC_TIME;
var pmtNext: MUSIC_TIME;
dwGroupBits, dwIndex: DWORD;
mtTime: TMusic_Time;
out pmtNext: TMusic_Time;
pParam: Pointer) : HResult; stdcall;
function SetParam(const rguidType: TGUID;
dwGroupBits: DWORD;
dwIndex: DWORD;
mtTime: MUSIC_TIME;
dwGroupBits, dwIndex: DWORD;
mtTime: TMusic_Time;
pParam: Pointer) : HResult; stdcall;
function Clone(mtStart: MUSIC_TIME;
mtEnd: MUSIC_TIME;
function Clone (mtStart: TMusic_Time;
mtEnd: TMusic_Time;
out ppSegment: IDirectMusicSegment) : HResult; stdcall;
function SetStartPoint(mtStart: MUSIC_TIME) : HResult; stdcall;
function GetStartPoint(var pmtStart: MUSIC_TIME) : HResult; stdcall;
function SetLoopPoints(mtStart: MUSIC_TIME;
mtEnd: MUSIC_TIME) : HResult; stdcall;
function GetLoopPoints(var pmtStart: MUSIC_TIME;
var pmtEnd: MUSIC_TIME) : HResult; stdcall;
function SetStartPoint (mtStart: TMusic_Time) : HResult; stdcall;
function GetStartPoint (out pmtStart: TMusic_Time) : HResult; stdcall;
function SetLoopPoints (mtStart: TMusic_Time;
mtEnd: TMusic_Time) : HResult; stdcall;
function GetLoopPoints (out pmtStart, pmtEnd: TMusic_Time) : HResult; stdcall;
function SetPChannelsUsed(dwNumPChannels: DWORD;
const paPChannels) : HResult; stdcall;
var paPChannels: DWORD) : HResult; stdcall;
end;
 
{ IDirectMusicSegmentState }
 
IDirectMusicSegmentState = interface(IUnknown)
['{A3AFDCC7-D3EE-11D1-BC8D-00A0C922E6EB}']
// IDirectMusicSegmentState
function GetRepeats(var pdwRepeats: DWORD) : HResult; stdcall;
function GetSegment(out ppSegment: IDirectMusicSegment) : HResult; stdcall;
function GetStartTime(var pmtStart: MUSIC_TIME) : HResult; stdcall;
function GetSeek(var pmtSeek: MUSIC_TIME) : HResult; stdcall;
function GetStartPoint(var pmtStart: MUSIC_TIME) : HResult; stdcall;
end;
 
{ IDirectMusicTrack }
 
(*////////////////////////////////////////////////////////////////////
// IDirectMusicTrack *)
IDirectMusicTrack = interface(IUnknown)
['{F96029A1-4282-11D2-8717-00600893B1BD}']
// IDirectMusicTrack
['{f96029a1-4282-11d2-8717-00600893b1bd}']
function Init(pSegment: IDirectMusicSegment) : HResult; stdcall;
function InitPlay(pSegmentState: IDirectMusicSegmentState;
pPerformance: IDirectMusicPerformance;
var ppStateData: Pointer;
dwVirtualTrackID: DWORD;
dwFlags: DWORD) : HResult; stdcall;
function EndPlay(const pStateData) : HResult; stdcall;
function Play(const pStateData;
mtStart: MUSIC_TIME;
mtEnd: MUSIC_TIME;
mtOffset: MUSIC_TIME;
out ppStateData: Pointer;
dwVirtualTrackID, dwFlags: DWORD) : HResult; stdcall;
function EndPlay (pStateData: Pointer) : HResult; stdcall;
function Play (pStateData: Pointer;
mtStart: TMusic_Time;
mtEnd: TMusic_Time;
mtOffset: TMusic_Time;
dwFlags: DWORD;
pPerf: IDirectMusicPerformance;
pSegSt: IDirectMusicSegmentState;
dwVirtualID: DWORD) : HResult; stdcall;
function GetParam(const rguidType: TGUID;
mtTime: MUSIC_TIME;
var pmtNext: MUSIC_TIME;
var pParam) : HResult; stdcall;
mtTime: TMusic_Time;
out pmtNext: TMusic_Time;
pParam: Pointer) : HResult; stdcall;
function SetParam(const rguidType: TGUID;
mtTime: MUSIC_TIME;
const pParam) : HResult; stdcall;
mtTime: TMusic_Time;
pParam: Pointer) : HResult; stdcall;
function IsParamSupported(const rguidType: TGUID) : HResult; stdcall;
function AddNotificationType(const rguidNotificationType: TGUID) : HResult; stdcall;
function RemoveNotificationType(const rguidNotificationType: TGUID) : HResult; stdcall;
function Clone(mtStart: MUSIC_TIME;
mtEnd: MUSIC_TIME;
function Clone (mtStart: TMusic_Time;
mtEnd: TMusic_Time;
out ppTrack: IDirectMusicTrack) : HResult; stdcall;
end;
 
{ IDirectMusicPerformance }
PIDirectMusic = ^IDirectMusic;
 
(*////////////////////////////////////////////////////////////////////
// IDirectMusicPerformance *)
IDirectMusicPerformance = interface(IUnknown)
['{07D43D03-6523-11D2-871D-00600893B1BD}']
// IDirectMusicPerformance
function Init(out ppDirectMusic: IDirectMusic;
['{07d43d03-6523-11d2-871d-00600893b1bd}']
function Init (ppDirectMusic: PIDirectMusic;
pDirectSound: IDirectSound;
hWnd: HWND) : HResult; stdcall;
function PlaySegment(pSegment: IDirectMusicSegment;
dwFlags: DWORD;
i64StartTime: LONGLONG;
out ppSegmentState: IDirectMusicSegmentState) : HResult; stdcall;
i64StartTime: LongLong;
ppSegmentState: PIDirectMusicSegmentState) : HResult; stdcall;
function Stop(pSegment: IDirectMusicSegment;
pSegmentState: IDirectMusicSegmentState;
mtTime: MUSIC_TIME;
mtTime: TMusic_Time;
dwFlags: DWORD) : HResult; stdcall;
function GetSegmentState(out ppSegmentState: IDirectMusicSegmentState;
mtTime: MUSIC_TIME) : HResult; stdcall;
mtTime: TMusic_Time) : HResult; stdcall;
function SetPrepareTime(dwMilliSeconds: DWORD) : HResult; stdcall;
function GetPrepareTime(var pdwMilliSeconds: DWORD) : HResult; stdcall;
function GetPrepareTime (out pdwMilliSeconds: DWORD) : HResult; stdcall;
function SetBumperLength(dwMilliSeconds: DWORD) : HResult; stdcall;
function GetBumperLength(var pdwMilliSeconds: DWORD) : HResult; stdcall;
function SendPMsg(const pPMSG: TDMUS_PMSG) : HResult; stdcall;
function MusicToReferenceTime(mtTime: MUSIC_TIME;
var prtTime: TREFERENCE_TIME) : HResult; stdcall;
function ReferenceToMusicTime(rtTime: TREFERENCE_TIME;
var pmtTime: MUSIC_TIME) : HResult; stdcall;
function GetBumperLength (out pdwMilliSeconds: DWORD) : HResult; stdcall;
function SendPMsg (out pPMSG: TDMus_PMsg) : HResult; stdcall;
function MusicToReferenceTime (mtTime: TMusic_Time;
out prtTime: TReference_Time) : HResult; stdcall;
function ReferenceToMusicTime (rtTime: TReference_Time;
out pmtTime: TMusic_Time) : HResult; stdcall;
function IsPlaying(pSegment: IDirectMusicSegment;
pSegState: IDirectMusicSegmentState) : HResult; stdcall;
function GetTime(var prtNow: TREFERENCE_TIME;
var pmtNow: MUSIC_TIME) : HResult; stdcall;
function AllocPMsg(cb: Cardinal;
var ppPMSG: TDMUS_PMSG) : HResult; stdcall;
function FreePMsg(const pPMSG: TDMUS_PMSG) : HResult; stdcall;
function GetTime (prtNow: PReference_Time;
pmtNow: PMusic_Time) : HResult; stdcall;
function AllocPMsg (cb: ULONG;
out ppPMSG: PDMus_PMsg) : HResult; stdcall;
function FreePMsg (pPMSG: PDMus_PMsg) : HResult; stdcall;
function GetGraph(out ppGraph: IDirectMusicGraph) : HResult; stdcall;
function SetGraph(pGraph: IDirectMusicGraph) : HResult; stdcall;
function SetNotificationHandle(hNotification: THandle;
rtMinimum: TREFERENCE_TIME) : HResult; stdcall;
function GetNotificationPMsg(var ppNotificationPMsg: PDMUS_NOTIFICATION_PMSG) : HResult; stdcall;
function SetNotificationHandle (hNotification: THANDLE;
rtMinimum: TReference_Time) : HResult; stdcall;
function GetNotificationPMsg (out ppNotificationPMsg: PDMus_Notification_PMsg) : HResult; stdcall;
function AddNotificationType(const rguidNotificationType: TGUID) : HResult; stdcall;
function RemoveNotificationType(const rguidNotificationType: TGUID) : HResult; stdcall;
function AddPort(pPort: IDirectMusicPort) : HResult; stdcall;
14595,151 → 19881,600
dwGroup: DWORD) : HResult; stdcall;
function AssignPChannel(dwPChannel: DWORD;
pPort: IDirectMusicPort;
dwGroup: DWORD;
dwMChannel: DWORD) : HResult; stdcall;
dwGroup, dwMChannel: DWORD) : HResult; stdcall;
function PChannelInfo(dwPChannel: DWORD;
out ppPort: IDirectMusicPort;
var pdwGroup: DWORD;
var pdwMChannel: DWORD) : HResult; stdcall;
out pdwGroup, pdwMChannel: DWORD ) : HResult; stdcall;
function DownloadInstrument(pInst: IDirectMusicInstrument;
dwPChannel: DWORD;
out ppDownInst: IDirectMusicDownloadedInstrument;
const pNoteRanges;
var pNoteRanges: TDMus_NoteRange;
dwNumNoteRanges: DWORD;
out ppPort: IDirectMusicPort;
var pdwGroup: DWORD;
var pdwMChannel: DWORD) : HResult; stdcall;
function Invalidate(mtTime: MUSIC_TIME;
out pdwGroup, pdwMChannel: DWORD) : HResult; stdcall;
function Invalidate (mtTime: TMusic_Time;
dwFlags: DWORD) : HResult; stdcall;
function GetParam(const rguidType: TGUID;
dwGroupBits: DWORD;
dwIndex: DWORD;
mtTime: MUSIC_TIME;
var pmtNext: MUSIC_TIME;
var pParam) : HResult; stdcall;
dwGroupBits, dwIndex: DWORD;
mtTime: TMusic_Time;
out pmtNext: TMusic_Time;
pParam: Pointer) : HResult; stdcall;
function SetParam(const rguidType: TGUID;
dwGroupBits: DWORD;
dwIndex: DWORD;
mtTime: MUSIC_TIME;
dwGroupBits, dwIndex: DWORD;
mtTime: TMusic_Time;
pParam: Pointer) : HResult; stdcall;
function GetGlobalParam(const rguidType: TGUID;
var pParam;
pParam: Pointer;
dwSize: DWORD) : HResult; stdcall;
function SetGlobalParam(const rguidType: TGUID;
const pParam;
pParam: Pointer;
dwSize: DWORD) : HResult; stdcall;
function GetLatencyTime(var prtTime: TREFERENCE_TIME) : HResult; stdcall;
function GetQueueTime(var prtTime: TREFERENCE_TIME) : HResult; stdcall;
function AdjustTime(rtAmount: TREFERENCE_TIME) : HResult; stdcall;
function GetLatencyTime (out prtTime: TReference_Time) : HResult; stdcall;
function GetQueueTime (out prtTime: TReference_Time) : HResult; stdcall;
function AdjustTime (rtAmount: TReference_Time) : HResult; stdcall;
function CloseDown : HResult; stdcall;
function GetResolvedTime(rtTime: TREFERENCE_TIME;
var prtResolved: TREFERENCE_TIME;
function GetResolvedTime (rtTime: TReference_Time;
out prtResolved: TReference_Time;
dwTimeResolveFlags: DWORD) : HResult; stdcall;
function MIDIToMusic(bMIDIValue: Byte;
const pChord: TDMUS_CHORD_KEY;
bPlayMode: Byte;
bChordLevel: Byte;
var pwMusicValue: Word) : HResult; stdcall;
function MusicToMIDI(wMusicValue: Word;
const pChord: TDMUS_CHORD_KEY;
bPlayMode: Byte;
bChordLevel: Byte;
var pbMIDIValue: Byte) : HResult; stdcall;
function TimeToRhythm(mtTime: MUSIC_TIME;
const pTimeSig: TDMUS_TIMESIGNATURE;
var pwMeasure: Word;
var pbBeat: Byte;
var pbGrid: Byte;
var pnOffset: Smallint) : HResult; stdcall;
function RhythmToTime(wMeasure: Word;
bBeat: Byte;
bGrid: Byte;
nOffset: Smallint;
const pTimeSig: TDMUS_TIMESIGNATURE;
var pmtTime: MUSIC_TIME) : HResult; stdcall;
function MIDIToMusic (bMIDIValue: BYTE;
const pChord: TDMus_Chord_Key;
bPlayMode, bChordLevel: Byte;
out pwMusicValue: WORD) : HResult; stdcall;
function MusicToMIDI (wMusicValue: WORD;
const pChord: TDMus_Chord_Key;
bPlayMode, bChordLevel: BYTE;
out pbMIDIValue: BYTE) : HResult; stdcall;
function TimeToRhythm (mtTime: TMusic_Time;
const pTimeSig: TDMus_TimeSignature;
out pwMeasure: WORD;
out pbBeat, pbGrid: BYTE;
out pnOffset: SmallInt) : HResult; stdcall;
function RhythmToTime (wMeasure: WORD;
bBeat, bGrid: BYTE;
nOffset: SmallInt;
const pTimeSig: TDMus_TimeSignature;
out pmtTime: TMusic_Time) : HResult; stdcall;
end;
 
{ IDirectMusicTool }
 
(*////////////////////////////////////////////////////////////////////
// IDirectMusicTool *)
IDirectMusicTool = interface(IUnknown)
['{D2AC28BA-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicTool
['{d2ac28ba-b39b-11d1-8704-00600893b1bd}']
function Init(pGraph: IDirectMusicGraph) : HResult; stdcall;
function GetMsgDeliveryType(var pdwDeliveryType: DWORD) : HResult; stdcall;
function GetMediaTypeArraySize(var pdwNumElements: DWORD) : HResult; stdcall;
function GetMediaTypes(var padwMediaTypes;
function GetMsgDeliveryType (out pdwDeliveryType: DWORD) : HResult; stdcall;
function GetMediaTypeArraySize (out pdwNumElements: DWORD) : HResult; stdcall;
function GetMediaTypes (out padwMediaTypes: PDWORD;
dwNumElements: DWORD) : HResult; stdcall;
function ProcessPMsg(pPerf: IDirectMusicPerformance;
const pPMSG: TDMUS_PMSG) : HResult; stdcall;
var pPMSG: TDMus_PMsg) : HResult; stdcall;
function Flush(pPerf: IDirectMusicPerformance;
const pPMSG: TDMUS_PMSG;
rtTime: TREFERENCE_TIME) : HResult; stdcall;
const pPMSG: TDMus_PMsg;
rtTime: TReference_Time) : HResult; stdcall;
end;
 
{ IDirectMusicGraph }
 
(*////////////////////////////////////////////////////////////////////
// IDirectMusicGraph *)
IDirectMusicGraph = interface(IUnknown)
['{2BEFC277-5497-11D2-BCCB-00A0C922E6EB}']
// IDirectMusicGraph
function StampPMsg(const pPMSG: TDMUS_PMSG) : HResult; stdcall;
['{2befc277-5497-11d2-bccb-00a0c922e6eb}']
function StampPMsg (var pPMSG: TDMus_PMsg ) : HResult; stdcall;
function InsertTool(pTool: IDirectMusicTool;
const pdwPChannels;
var pdwPChannels: DWORD;
cPChannels: DWORD;
lIndex: Longint) : HResult; stdcall;
lIndex: LongInt) : HResult; stdcall;
function GetTool(dwIndex: DWORD;
out ppTool: IDirectMusicTool) : HResult; stdcall;
function RemoveTool(pTool: IDirectMusicTool) : HResult; stdcall;
end;
 
{ IDirectMusicStyle }
 
(* DMUS_NOTE_PMsg *)
TDMus_Note_PMsg = packed record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
mtDuration: TMusic_Time; (* duration *)
wMusicValue: WORD; (* Description of note in chord and key. *)
wMeasure: WORD; (* Measure in which this note occurs *)
nOffset: SmallInt; (* Offset from grid at which this note occurs *)
bBeat: BYTE; (* Beat (in measure) at which this note occurs *)
bGrid: BYTE; (* Grid offset from beat at which this note occurs *)
bVelocity: BYTE; (* Note velocity *)
bFlags: BYTE; (* see DMUS_NOTE_FLAGS *)
bTimeRange: BYTE; (* Range to randomize time. *)
bDurRange: BYTE; (* Range to randomize duration. *)
bVelRange: BYTE; (* Range to randomize velocity. *)
bPlayModeFlags: BYTE; (* Play mode *)
bSubChordLevel: BYTE; (* Which subchord level this note uses. *)
bMidiValue: BYTE; (* The MIDI note value, converted from wMusicValue *)
cTranspose: char; (* Transposition to add to midi note value after converted from wMusicValue. *)
end;
 
TDMus_NoteF_Flags = DWORD;
const
DMUS_NOTEF_NOTEON = 1; (* Set if this is a MIDI Note On. Otherwise, it is MIDI Note Off *)
 
(* The DMUS_PLAYMODE_FLAGS are used to determine how to convert wMusicValue
into the appropriate bMidiValue.
*)
type
TDMus_PlayMode_Flags = DWORD;
const
DMUS_PLAYMODE_KEY_ROOT = 1; (* Transpose on top of the key root. *)
DMUS_PLAYMODE_CHORD_ROOT = 2; (* Transpose on top of the chord root. *)
DMUS_PLAYMODE_SCALE_INTERVALS = 4; (* Use scale intervals from scale pattern. *)
DMUS_PLAYMODE_CHORD_INTERVALS = 8; (* Use chord intervals from chord pattern. *)
DMUS_PLAYMODE_NONE = 16; (* No mode. Indicates the parent part's mode should be used. *)
 
(* The following are playback modes that can be created by combining the DMUS_PLAYMODE_FLAGS
in various ways:
*)
 
(* Fixed. wMusicValue holds final MIDI note value. This is used for drums, sound effects, and sequenced
notes that should not be transposed by the chord or scale.
*)
DMUS_PLAYMODE_FIXED = 0;
(* In fixed to key, the musicvalue is again a fixed MIDI value, but it
is transposed on top of the key root.
*)
DMUS_PLAYMODE_FIXEDTOKEY = DMUS_PLAYMODE_KEY_ROOT;
(* In fixed to chord, the musicvalue is also a fixed MIDI value, but it
is transposed on top of the chord root.
*)
DMUS_PLAYMODE_FIXEDTOCHORD = DMUS_PLAYMODE_CHORD_ROOT;
(* In Pedalpoint, the key root is used and the notes only track the intervals in
the scale. The chord root and intervals are completely ignored. This is useful
for melodic lines that play relative to the key root.
*)
DMUS_PLAYMODE_PEDALPOINT = (DMUS_PLAYMODE_KEY_ROOT or DMUS_PLAYMODE_SCALE_INTERVALS);
(* In the Melodic mode, the chord root is used but the notes only track the intervals in
the scale. The key root and chord intervals are completely ignored. This is useful
for melodic lines that play relative to the chord root.
*)
DMUS_PLAYMODE_MELODIC = (DMUS_PLAYMODE_CHORD_ROOT or DMUS_PLAYMODE_SCALE_INTERVALS);
(* Normal chord mode is the prevalent playback mode.
The notes track the intervals in the chord, which is based on the chord root.
If there is a scale component to the MusicValue, the additional intervals
are pulled from the scale and added.
If the chord does not have an interval to match the chord component of
the MusicValue, the note is silent.
*)
DMUS_PLAYMODE_NORMALCHORD = (DMUS_PLAYMODE_CHORD_ROOT or DMUS_PLAYMODE_CHORD_INTERVALS);
(* If it is desirable to play a note that is above the top of the chord, the
always play mode (known as "purpleized" in a former life) finds a position
for the note by using intervals from the scale. Essentially, this mode is
a combination of the Normal and Melodic playback modes, where a failure
in Normal causes a second try in Melodic mode.
*)
DMUS_PLAYMODE_ALWAYSPLAY = (DMUS_PLAYMODE_MELODIC or DMUS_PLAYMODE_NORMALCHORD);
 
(* Legacy names for modes... *)
DMUS_PLAYMODE_PURPLEIZED = DMUS_PLAYMODE_ALWAYSPLAY;
DMUS_PLAYMODE_SCALE_ROOT = DMUS_PLAYMODE_KEY_ROOT;
DMUS_PLAYMODE_FIXEDTOSCALE = DMUS_PLAYMODE_FIXEDTOKEY;
 
type
(* DMUS_MIDI_PMsg *)
TDMus_Midi_PMsg = record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
bStatus: BYTE;
bByte1: BYTE;
bByte2: BYTE;
bPad: array [0..0] of BYTE;
end;
 
(* DMUS_PATCH_PMsg *)
TDMus_Patch_PMsg = packed record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
byInstrument: BYTE;
byMSB: BYTE;
byLSB: BYTE;
byPad: array [0..0] of BYTE;
end;
 
(* DMUS_TRANSPOSE_PMsg *)
TDMus_Transpose_PMsg = packed record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
nTranspose: SmallInt;
end;
 
(* DMUS_CHANNEL_PRIORITY_PMsg *)
TDMus_Channel_Priority_PMsg = packed record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
dwChannelPriority: DWORD;
end;
 
(* DMUS_TEMPO_PMsg *)
TDMus_Tempo_PMsg = packed record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
dblTempo: double; (* the tempo *)
end;
 
const
DMUS_TEMPO_MAX = 1000;
DMUS_TEMPO_MIN = 1;
 
DMUS_MASTERTEMPO_MAX = 100.0;
DMUS_MASTERTEMPO_MIN = 0.01;
 
type
(* DMUS_SYSEX_PMsg *)
TDMus_SysEx_PMsg = packed record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
dwLen: DWORD; (* length of the data *)
abData: array [0..0] of BYTE; (* array of data, length equal to dwLen *)
end;
 
(* DMUS_CURVE_PMsg *)
TDMus_Curve_PMsg = packed record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
mtDuration: TMusic_Time; (* how long this curve lasts *)
mtOriginalStart: TMusic_Time; (* must be set to either zero when this PMSG is created or to the original mtTime of the curve *)
mtResetDuration: TMusic_Time; (* how long after the curve is finished to reset to the
reset value, nResetValue *)
nStartValue: SmallInt; (* curve's start value *)
nEndValue: SmallInt; (* curve's end value *)
nResetValue: SmallInt; (* curve's reset value, sent after mtResetDuration or
upon a flush or invalidation *)
wMeasure: WORD; (* Measure in which this curve occurs *)
nOffset: SmallInt; (* Offset from grid at which this curve occurs *)
bBeat: BYTE; (* Beat (in measure) at which this curve occurs *)
bGrid: BYTE; (* Grid offset from beat at which this curve occurs *)
bType: BYTE; (* type of curve *)
bCurveShape: BYTE; (* shape of curve *)
bCCData: BYTE; (* CC# if this is a control change type *)
bFlags: BYTE; (* set to 1 if the nResetValue must be sent when the
time is reached or an invalidate occurs because
of a transition. If 0, the curve stays
permanently stuck at the new value. All bits besides
1 are reserved. *)
end;
 
TDMus_Curve_Flags = DWORD;
const
DMUS_CURVE_RESET = 1; (* Set if the curve needs to be reset. *)
 
(* Curve shapes *)
type
TDMus_Curve_Shapes = (
DMUS_CURVES_LINEAR ,
DMUS_CURVES_INSTANT,
DMUS_CURVES_EXP ,
DMUS_CURVES_LOG ,
DMUS_CURVES_SINE
);
 
const
(* curve types *)
DMUS_CURVET_PBCURVE = $03;
DMUS_CURVET_CCCURVE = $04;
DMUS_CURVET_MATCURVE = $05;
DMUS_CURVET_PATCURVE = $06;
 
type
(* DMUS_TIMESIG_PMsg *)
TDMus_TimeSig_PMsg = packed record
(* begin DMUS_PMsg_PART *)
dwSize: DWORD;
rtTime: TReference_Time; (* real time (in 100 nanosecond increments) *)
mtTime: TMusic_Time; (* music time *)
dwFlags: DWORD; (* various bits (see DMUS_PMsg_FLAGS enumeration) *)
dwPChannel: DWORD; (* Performance Channel. The Performance can *)
(* use this to determine the port/channel. *)
dwVirtualTrackID:DWORD; (* virtual track ID *)
pTool: IDirectMusicTool; (* tool interface pointer *)
pGraph: IDirectMusicGraph; (* tool graph interface pointer *)
dwType: DWORD; (* PMSG type (see DMUS_PMsgT_TYPES defines) *)
dwVoiceID: DWORD; (* unique voice id which allows synthesizers to *)
(* identify a specific event. For DirectX 6.0, *)
(* this field should always be 0. *)
dwGroupID: DWORD; (* Track group id *)
punkUser: IUnknown; (* user com pointer, auto released upon PMSG free *)
(* end DMUS_PMsg_PART *)
 
(* Time signatures define how many beats per measure, which note receives *)
(* the beat, and the grid resolution. *)
bBeatsPerMeasure: BYTE; (* beats per measure (top of time sig) *)
bBeat: BYTE; (* what note receives the beat (bottom of time sig.) *)
(* we can assume that 0 means 256th note *)
wGridsPerBeat: WORD; (* grids per beat *)
end;
 
const
(* notification type values *)
(* The following correspond to GUID_NOTIFICATION_SEGMENT *)
DMUS_NOTIFICATION_SEGSTART = 0;
DMUS_NOTIFICATION_SEGEND = 1;
DMUS_NOTIFICATION_SEGALMOSTEND = 2;
DMUS_NOTIFICATION_SEGLOOP = 3;
DMUS_NOTIFICATION_SEGABORT = 4;
(* The following correspond to GUID_NOTIFICATION_PERFORMANCE *)
DMUS_NOTIFICATION_MUSICSTARTED = 0;
DMUS_NOTIFICATION_MUSICSTOPPED = 1;
(* The following corresponds to GUID_NOTIFICATION_MEASUREANDBEAT *)
DMUS_NOTIFICATION_MEASUREBEAT = 0;
(* The following corresponds to GUID_NOTIFICATION_CHORD *)
DMUS_NOTIFICATION_CHORD = 0;
(* The following correspond to GUID_NOTIFICATION_COMMAND *)
DMUS_NOTIFICATION_GROOVE = 0;
DMUS_NOTIFICATION_EMBELLISHMENT = 1;
 
const
DMUS_MAX_NAME = 64; (* Maximum object name length. *)
DMUS_MAX_CATEGORY = 64; (* Maximum object category name length. *)
DMUS_MAX_FILENAME = MAX_PATH;
 
type
PDMus_Version = ^TDMus_Version;
TDMus_Version = packed record
dwVersionMS: DWORD;
dwVersionLS: DWORD;
end;
 
(* The DMUSOBJECTDESC structure is used to communicate everything you could *)
(* possibly use to describe a DirectMusic object. *)
PDMus_ObjectDesc = ^TDMus_ObjectDesc;
TDMus_ObjectDesc = packed record
dwSize: DWORD; (* Size of this structure. *)
dwValidData: DWORD; (* Flags indicating which fields below are valid. *)
guidObject: TGUID; (* Unique ID for this object. *)
guidClass: TGUID; (* GUID for the class of object. *)
ftDate: TFileTime; (* Last edited date of object. *)
vVersion: TDMus_Version; (* Version. *)
wszName: array [0..DMUS_MAX_NAME-1] of WCHAR; (* Name of object. *)
wszCategory: array [0..DMUS_MAX_CATEGORY-1] of WCHAR; (* Category for object (optional). *)
wszFileName: array [0..DMUS_MAX_FILENAME-1] of WCHAR; (* File path. *)
llMemLength: LongLong; (* Size of Memory data. *)
pbMemData: Pointer; (* Memory pointer for data. *)
dwDummy: DWORD; ///?
end;
 
(* Flags for dwValidData. When set, a flag indicates that the *)
(* corresponding field in DMUSOBJECTDESC holds valid data. *)
const
DMUS_OBJ_OBJECT = (1 shl 0); (* Object GUID is valid. *)
DMUS_OBJ_CLASS = (1 shl 1); (* Class GUID is valid. *)
DMUS_OBJ_NAME = (1 shl 2); (* Name is valid. *)
DMUS_OBJ_CATEGORY = (1 shl 3); (* Category is valid. *)
DMUS_OBJ_FILENAME = (1 shl 4); (* File path is valid. *)
DMUS_OBJ_FULLPATH = (1 shl 5); (* Path is full path. *)
DMUS_OBJ_URL = (1 shl 6); (* Path is URL. *)
DMUS_OBJ_VERSION = (1 shl 7); (* Version is valid. *)
DMUS_OBJ_DATE = (1 shl 8); (* Date is valid. *)
DMUS_OBJ_LOADED = (1 shl 9); (* Object is currently loaded in memory. *)
DMUS_OBJ_MEMORY = (1 shl 10); (* Object is pointed to by pbMemData. *)
 
DMUSB_LOADED = (1 shl 0); (* Set when band has been loaded *)
DMUSB_DEFAULT = (1 shl 1); (* Set when band is default band for a style *)
 
type
IDirectMusicBand = interface;
IDirectMusicChordMap = interface;
IDirectMusicLoader = interface;
IDirectMusicObject = interface;
 
 
IDirectMusicBand = interface (IUnknown)
['{d2ac28c0-b39b-11d1-8704-00600893b1bd}']
function CreateSegment (out ppSegment: IDirectMusicSegment) : HResult; stdcall;
function Download (pPerformance: IDirectMusicPerformance) : HResult; stdcall;
function Unload (pPerformance: IDirectMusicPerformance) : HResult; stdcall;
end;
 
IDirectMusicObject = interface (IUnknown)
['{d2ac28b5-b39b-11d1-8704-00600893b1bd}']
function GetDescriptor (out pDesc: TDMus_ObjectDesc) : HResult; stdcall;
function SetDescriptor (const pDesc: TDMus_ObjectDesc) : HResult; stdcall;
function ParseDescriptor (var pStream;
out pDesc: TDMus_ObjectDesc) : HResult; stdcall;
end;
 
IDirectMusicLoader = interface (IUnknown)
['{2ffaaca2-5dca-11d2-afa6-00aa0024d8b6}']
function GetObject (const pDesc: TDMus_ObjectDesc;
const riid : TGUID;
out ppv) : HResult; stdcall;
function SetObject (const pDesc: TDMus_ObjectDesc) : HResult; stdcall;
function SetSearchDirectory (const rguidClass: TGUID;
pwzPath: PWideChar;
fClear: BOOL) : HResult; stdcall;
function ScanDirectory (const rguidClass: TGUID;
pwzFileExtension,
pwzScanFileName: PWideChar) : HResult; stdcall;
function CacheObject (pObject: IDirectMusicObject) : HResult; stdcall;
function ReleaseObject (pObject: IDirectMusicObject) : HResult; stdcall;
function ClearCache (const rguidClass: TGUID) : HResult; stdcall;
function EnableCache (const rguidClass: TGUID;
fEnable: BOOL) : HResult; stdcall;
function EnumObject (const rguidClass: TGUID;
dwIndex: DWORD;
const pDesc: TDMus_ObjectDesc) : HResult; stdcall;
end;
 
(* Stream object supports IDirectMusicGetLoader interface to access loader while file parsing. *)
 
IDirectMusicGetLoader = interface (IUnknown)
['{68a04844-d13d-11d1-afa6-00aa0024d8b6}']
function GetLoader (out ppLoader: IDirectMusicLoader) : HResult; stdcall;
end;
 
(*/////////////////////////////////////////////////////////////////////
// IDirectMusicStyle *)
IDirectMusicStyle = interface(IUnknown)
['{D2AC28BD-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicStyle
function GetBand(pwszName: PWCHAR;
['{d2ac28bd-b39b-11d1-8704-00600893b1bd}']
function GetBand (pwszName: PWideChar;
out ppBand: IDirectMusicBand) : HResult; stdcall;
function EnumBand(dwIndex: DWORD;
pwszName: PWCHAR) : HResult; stdcall;
pwszName: PWideChar) : HResult; stdcall;
function GetDefaultBand(out ppBand: IDirectMusicBand) : HResult; stdcall;
function EnumMotif(dwIndex: DWORD;
pwszName: PWCHAR) : HResult; stdcall;
function GetMotif(pwszName: PWCHAR;
pwszName: PWideChar) : HResult; stdcall;
function GetMotif (pwszName: PWideChar;
out ppSegment: IDirectMusicSegment) : HResult; stdcall;
function GetDefaultChordMap(out ppChordMap: IDirectMusicChordMap) : HResult; stdcall;
function EnumChordMap(dwIndex: DWORD;
pwszName: PWCHAR) : HResult; stdcall;
function GetChordMap(pwszName: PWCHAR;
pwszName: PWideChar) : HResult; stdcall;
function GetChordMap (pwszName: PWideChar;
out ppChordMap: IDirectMusicChordMap) : HResult; stdcall;
function GetTimeSignature(var pTimeSig: TDMUS_TIMESIGNATURE) : HResult; stdcall;
function GetEmbellishmentLength(dwType: DWORD;
dwLevel: DWORD;
var pdwMin: DWORD;
var pdwMax: DWORD) : HResult; stdcall;
function GetTempo(var pTempo: Double) : HResult; stdcall;
function GetTimeSignature (out pTimeSig: TDMus_TimeSignature) : HResult; stdcall;
function GetEmbellishmentLength (dwType, dwLevel: DWORD;
out pdwMin, pdwMax: DWORD) : HResult; stdcall;
function GetTempo (out pTempo: double) : HResult; stdcall;
end;
 
{ IDirectMusicChordMap }
 
(*/////////////////////////////////////////////////////////////////////
// IDirectMusicChordMap *)
IDirectMusicChordMap = interface(IUnknown)
['{D2AC28BE-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicChordMap
function GetScale(var pdwScale: DWORD) : HResult; stdcall;
['{d2ac28be-b39b-11d1-8704-00600893b1bd}']
function GetScale (out pdwScale: DWORD) : HResult; stdcall;
end;
 
{ IDirectMusicComposer }
 
(*/////////////////////////////////////////////////////////////////////
// IDirectMusicComposer *)
IDirectMusicComposer = interface(IUnknown)
['{D2AC28BF-B39B-11D1-8704-00600893B1BD}']
// IDirectMusicComposer
['{d2ac28bf-b39b-11d1-8704-00600893b1bd}']
function ComposeSegmentFromTemplate(pStyle: IDirectMusicStyle;
pTempSeg: IDirectMusicSegment;
wActivity: Word;
wActivity: WORD;
pChordMap: IDirectMusicChordMap;
out ppSectionSeg: IDirectMusicSegment) : HResult; stdcall;
function ComposeSegmentFromShape(pStyle: IDirectMusicStyle;
wNumMeasures: Word;
wShape: Word;
wActivity: Word;
wNumMeasures,
wShape,
wActivity: WORD;
fIntro: BOOL;
fEnd: BOOL;
pChordMap: IDirectMusicChordMap;
14746,24 → 20481,24
out ppSectionSeg: IDirectMusicSegment) : HResult; stdcall;
function ComposeTransition(pFromSeg: IDirectMusicSegment;
pToSeg: IDirectMusicSegment;
mtTime: MUSIC_TIME;
wCommand: Word;
mtTime: TMusic_Time;
wCommand: WORD;
dwFlags: DWORD;
pChordMap: IDirectMusicChordMap;
out ppSectionSeg: IDirectMusicSegment) : HResult; stdcall;
function AutoTransition(pPerformance: IDirectMusicPerformance;
pToSeg: IDirectMusicSegment;
wCommand: Word;
wCommand: WORD;
dwFlags: DWORD;
pChordMap: IDirectMusicChordMap;
out ppTransSeg: IDirectMusicSegment;
out ppToSegState: IDirectMusicSegmentState;
out ppTransSegState: IDirectMusicSegmentState) : HResult; stdcall;
function ComposeTemplateFromShape(wNumMeasures: Word;
wShape: Word;
function ComposeTemplateFromShape (wNumMeasures: WORD;
wShape: WORD;
fIntro: BOOL;
fEnd: BOOL;
wEndLength: Word;
wEndLength: WORD;
out ppTempSeg: IDirectMusicSegment) : HResult; stdcall;
function ChangeChordMap(pSectionSeg: IDirectMusicSegment;
fTrackScale: BOOL;
14771,592 → 20506,978
end;
 
const
// CLSID's
CLSID_DirectMusicPerformance : TGUID = '{D2AC2881-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicSegment : TGUID = '{D2AC2882-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicSegmentState : TGUID = '{D2AC2883-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicGraph : TGUID = '{D2AC2884-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicTempoTrack : TGUID = '{D2AC2885-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicSeqTrack : TGUID = '{D2AC2886-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicSysExTrack : TGUID = '{D2AC2887-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicTimeSigTrack : TGUID = '{D2AC2888-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicStyle : TGUID = '{D2AC288A-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicChordTrack : TGUID = '{D2AC288B-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicCommandTrack : TGUID = '{D2AC288C-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicStyleTrack : TGUID = '{D2AC288D-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicMotifTrack : TGUID = '{D2AC288E-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicChordMap : TGUID = '{D2AC288F-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicComposer : TGUID = '{D2AC2890-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicSignPostTrack: TGUID = '{F17E8672-C3B4-11D1-870B-00600893B1BD}';
CLSID_DirectMusicLoader : TGUID = '{D2AC2892-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicBandTrack : TGUID = '{D2AC2894-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicBand : TGUID = '{79BA9E00-B6EE-11D1-86BE-00C04FBF8FEF}';
CLSID_DirectMusicChordMapTrack: TGUID = '{D2AC2896-B39B-11D1-8704-00600893B1BD}';
CLSID_DirectMusicMuteTrack : TGUID = '{D2AC2898-B39B-11D1-8704-00600893B1BD}';
(* CLSID's *)
CLSID_DirectMusicPerformance : TGUID = '{d2ac2881-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicSegment : TGUID = '{d2ac2882-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicSegmentState : TGUID = '{d2ac2883-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicGraph : TGUID = '{d2ac2884-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicTempoTrack : TGUID = '{d2ac2885-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicSeqTrack : TGUID = '{d2ac2886-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicSysExTrack : TGUID = '{d2ac2887-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicTimeSigTrack : TGUID = '{d2ac2888-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicStyle : TGUID = '{d2ac288a-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicChordTrack : TGUID = '{d2ac288b-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicCommandTrack : TGUID = '{d2ac288c-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicStyleTrack : TGUID = '{d2ac288d-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicMotifTrack : TGUID = '{d2ac288e-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicChordMap : TGUID = '{d2ac288f-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicComposer : TGUID = '{d2ac2890-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicSignPostTrack : TGUID = '{f17e8672-c3b4-11d1-870b-00600893b1bd}';
CLSID_DirectMusicLoader : TGUID = '{d2ac2892-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicBandTrack : TGUID = '{d2ac2894-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicBand : TGUID = '{79ba9e00-b6ee-11d1-86be-00c04fbf8fef}';
CLSID_DirectMusicChordMapTrack : TGUID = '{d2ac2896-b39b-11d1-8704-00600893b1bd}';
CLSID_DirectMusicMuteTrack : TGUID = '{d2ac2898-b39b-11d1-8704-00600893b1bd}';
 
// Special GUID for all object types. This is used by the loader.
GUID_DirectMusicAllTypes : TGUID = '{D2AC2893-B39B-11D1-8704-00600893B1BD}';
(* Special GUID for all object types. This is used by the loader. *)
GUID_DirectMusicAllTypes : TGUID = '{d2ac2893-b39b-11d1-8704-00600893b1bd}';
 
// Notification guids
GUID_NOTIFICATION_SEGMENT : TGUID = '{D2AC2899-B39B-11D1-8704-00600893B1BD}';
GUID_NOTIFICATION_PERFORMANCE : TGUID = '{81F75BC5-4E5D-11D2-BCC7-00A0C922E6EB}';
GUID_NOTIFICATION_MEASUREANDBEAT: TGUID = '{D2AC289A-B39B-11D1-8704-00600893B1BD}';
GUID_NOTIFICATION_CHORD : TGUID = '{D2AC289B-B39B-11D1-8704-00600893B1BD}';
GUID_NOTIFICATION_COMMAND : TGUID = '{D2AC289C-B39B-11D1-8704-00600893B1BD}';
(* Notification guids *)
GUID_NOTIFICATION_SEGMENT : TGUID = '{d2ac2899-b39b-11d1-8704-00600893b1bd}';
GUID_NOTIFICATION_PERFORMANCE : TGUID = '{81f75bc5-4e5d-11d2-bcc7-00a0c922e6eb}';
GUID_NOTIFICATION_MEASUREANDBEAT : TGUID = '{d2ac289a-b39b-11d1-8704-00600893b1bd}';
GUID_NOTIFICATION_CHORD : TGUID = '{d2ac289b-b39b-11d1-8704-00600893b1bd}';
GUID_NOTIFICATION_COMMAND : TGUID = '{d2ac289c-b39b-11d1-8704-00600893b1bd}';
 
// Track param type guids
// Use to get/set a DMUS_COMMAND_PARAM param in the Command track
GUID_CommandParam : TGUID = '{D2AC289D-B39B-11D1-8704-00600893B1BD}';
(* Track param type guids *)
(* Use to get/set a DMUS_COMMAND_PARAM param in the Command track *)
GUID_CommandParam : TGUID = '{d2ac289d-b39b-11d1-8704-00600893b1bd}';
 
// Use to get/set a DMUS_CHORD_PARAM param in the Chord track
GUID_ChordParam : TGUID = '{D2AC289E-B39B-11D1-8704-00600893B1BD}';
(* Use to get a DMUS_COMMAND_PARAM_2 param in the Command track *)
GUID_CommandParam2 : TGUID = '{28f97ef7-9538-11d2-97a9-00c04fa36e58}';
 
// Use to get a DMUS_RHYTHM_PARAM param in the Chord track
GUID_RhythmParam : TGUID = '{D2AC289F-B39B-11D1-8704-00600893B1BD}';
(* Use to get/set a DMUS_CHORD_PARAM param in the Chord track *)
GUID_ChordParam : TGUID = '{d2ac289e-b39b-11d1-8704-00600893b1bd}';
 
// Use to get/set an IDirectMusicStyle param in the Style track
GUID_IDirectMusicStyle : TGUID = '{D2AC28A1-B39B-11D1-8704-00600893B1BD}';
(* Use to get a DMUS_RHYTHM_PARAM param in the Chord track *)
GUID_RhythmParam : TGUID = '{d2ac289f-b39b-11d1-8704-00600893b1bd}';
 
// Use to get a DMUS_TIMESIGNATURE param in the Style and TimeSig tracks
GUID_TimeSignature : TGUID = '{D2AC28A4-B39B-11D1-8704-00600893B1BD}';
(* Use to get/set an IDirectMusicStyle param in the Style track *)
GUID_IDirectMusicStyle : TGUID = '{d2ac28a1-b39b-11d1-8704-00600893b1bd}';
 
// Use to get/set a DMUS_TEMPO_PARAM param in the Tempo track
GUID_TempoParam : TGUID = '{D2AC28A5-B39B-11D1-8704-00600893B1BD}';
(* Use to get a DMUS_TIMESIGNATURE param in the Style and TimeSig tracks *)
GUID_TimeSignature : TGUID = '{d2ac28a4-b39b-11d1-8704-00600893b1bd}';
 
// Use to set an IDirectMusicBand param in the Band track
GUID_IDirectMusicBand : TGUID = '{D2AC28AC-B39B-11D1-8704-00600893B1BD}';
(* Use to get/set a DMUS_TEMPO_PARAM param in the Tempo track *)
GUID_TempoParam : TGUID = '{d2ac28a5-b39b-11d1-8704-00600893b1bd}';
 
// Use to get/set an IDirectMusicChordMap param in the ChordMap track
GUID_IDirectMusicChordMap : TGUID = '{D2AC28AD-B39B-11D1-8704-00600893B1BD}';
(* Use to set an IDirectMusicBand param in the Band track *)
GUID_IDirectMusicBand : TGUID = '{d2ac28ac-b39b-11d1-8704-00600893b1bd}';
 
// Use to get/set a DMUS_MUTE_PARAM param in the Mute track
GUID_MuteParam : TGUID = '{D2AC28AF-B39B-11D1-8704-00600893B1BD}';
(* Use to get/set an IDirectMusicChordMap param in the ChordMap track *)
GUID_IDirectMusicChordMap : TGUID = '{d2ac28ad-b39b-11d1-8704-00600893b1bd}';
 
// These guids are used in IDirectMusicSegment::SetParam to tell the band track to perform various actions.
///
/// Download bands for the IDirectMusicSegment
GUID_Download : TGUID = '{D2AC28A7-B39B-11D1-8704-00600893B1BD}';
(* Use to get/set a DMUS_MUTE_PARAM param in the Mute track *)
GUID_MuteParam : TGUID = '{d2ac28af-b39b-11d1-8704-00600893b1bd}';
 
// Unload bands for the IDirectMusicSegment
GUID_Unload : TGUID = '{D2AC28A8-B39B-11D1-8704-00600893B1BD}';
(* These guids are used in IDirectMusicSegment::SetParam to tell the band track to perform various actions.
*)
(* Download bands for the IDirectMusicSegment *)
GUID_Download : TGUID = '{d2ac28a7-b39b-11d1-8704-00600893b1bd}';
 
// Connect segment's bands to an IDirectMusicCollection
GUID_ConnectToDLSCollection : TGUID = '{1DB1AE6B-E92E-11D1-A8C5-00C04FA3726E}';
(* Unload bands for the IDirectMusicSegment *)
GUID_Unload : TGUID = '{d2ac28a8-b39b-11d1-8704-00600893b1bd}';
 
// Enable/disable autodownloading of bands
GUID_Enable_Auto_Download : TGUID = '{D2AC28A9-B39B-11D1-8704-00600893B1BD}';
GUID_Disable_Auto_Download : TGUID = '{D2AC28AA-B39B-11D1-8704-00600893B1BD}';
(* Connect segment's bands to an IDirectMusicCollection *)
GUID_ConnectToDLSCollection : TGUID = '{1db1ae6b-e92e-11d1-a8c5-00c04fa3726e}';
 
// Clear all bands
GUID_Clear_All_Bands : TGUID = '{D2AC28AB-B39B-11D1-8704-00600893B1BD}';
(* Enable/disable autodownloading of bands *)
GUID_Enable_Auto_Download : TGUID = '{d2ac28a9-b39b-11d1-8704-00600893b1bd}';
GUID_Disable_Auto_Download : TGUID = '{d2ac28aa-b39b-11d1-8704-00600893b1bd}';
 
// Set segment to manage all program changes, bank selects, etc. for simple playback of a standard MIDI file
GUID_StandardMIDIFile : TGUID = '{06621075-E92E-11D1-A8C5-00C04FA3726E}';
// For compatibility with beta releases...
GUID_IgnoreBankSelectForGM : TGUID = '{06621075-E92E-11D1-A8C5-00C04FA3726E}'; //same as GUID_StandardMIDIFile;
(* Clear all bands *)
GUID_Clear_All_Bands : TGUID = '{d2ac28ab-b39b-11d1-8704-00600893b1bd}';
 
// Disable/enable param guids. Use these in SetParam calls to disable or enable sending
// specific PMsg types.
///
GUID_DisableTimeSig : TGUID = '{45FC707B-1DB4-11D2-BCAC-00A0C922E6EB}';
GUID_EnableTimeSig : TGUID = '{45FC707C-1DB4-11D2-BCAC-00A0C922E6EB}';
GUID_DisableTempo : TGUID = '{45FC707D-1DB4-11D2-BCAC-00A0C922E6EB}';
GUID_EnableTempo : TGUID = '{45FC707E-1DB4-11D2-BCAC-00A0C922E6EB}';
(* Set segment to manage all program changes, bank selects, etc. for simple playback of a standard MIDI file *)
_GUID_StandardMIDIFile = '{06621075-e92e-11d1-a8c5-00c04fa3726e}';
GUID_StandardMIDIFile : TGUID = _GUID_StandardMIDIFile;
(* For compatibility with beta releases... *)
GUID_IgnoreBankSelectForGM : TGUID = _GUID_StandardMIDIFile;
 
// Global data guids
GUID_PerfMasterTempo : TGUID = '{D2AC28B0-B39B-11D1-8704-00600893B1BD}';
GUID_PerfMasterVolume : TGUID = '{D2AC28B1-B39B-11D1-8704-00600893B1BD}';
GUID_PerfMasterGrooveLevel : TGUID = '{D2AC28B2-B39B-11D1-8704-00600893B1BD}';
GUID_PerfAutoDownload : TGUID = '{FB09565B-3631-11D2-BCB8-00A0C922E6EB}';
(* Disable/enable param guids. Use these in SetParam calls to disable or enable sending
* specific PMsg types.
*)
GUID_DisableTimeSig : TGUID = '{45fc707b-1db4-11d2-bcac-00a0c922e6eb}';
GUID_EnableTimeSig : TGUID = '{45fc707c-1db4-11d2-bcac-00a0c922e6eb}';
GUID_DisableTempo : TGUID = '{45fc707d-1db4-11d2-bcac-00a0c922e6eb}';
GUID_EnableTempo : TGUID = '{45fc707e-1db4-11d2-bcac-00a0c922e6eb}';
 
// GUID for default GM/GS dls collection.
GUID_DefaultGMCollection : TGUID = '{F17E8673-C3B4-11D1-870B-00600893B1BD}';
(* Used in SetParam calls for pattern-based tracks. A nonzero value seeds the random number
generator for variation selection; a value of zero reverts to the default behavior of
getting the seed from the system clock.
*)
GUID_SeedVariations : TGUID = '{65b76fa5-ff37-11d2-814e-00c04fa36e58}';
 
// IID's
IID_IDirectMusicLoader : TGUID = '{2FFAACA2-5DCA-11D2-AFA6-00AA0024D8B6}';
IID_IDirectMusicGetLoader : TGUID = '{68A04844-D13D-11D1-AFA6-00AA0024D8B6}';
IID_IDirectMusicObject : TGUID = '{D2AC28B5-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicSegment : TGUID = '{F96029A2-4282-11D2-8717-00600893B1BD}';
IID_IDirectMusicSegmentState : TGUID = '{A3AFDCC7-D3EE-11D1-BC8D-00A0C922E6EB}';
IID_IDirectMusicTrack : TGUID = '{F96029A1-4282-11D2-8717-00600893B1BD}';
IID_IDirectMusicPerformance : TGUID = '{07D43D03-6523-11D2-871D-00600893B1BD}';
IID_IDirectMusicTool : TGUID = '{D2AC28BA-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicGraph : TGUID = '{2BEFC277-5497-11D2-BCCB-00A0C922E6EB}';
IID_IDirectMusicStyle : TGUID = '{D2AC28BD-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicChordMap : TGUID = '{D2AC28BE-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicComposer : TGUID = '{D2AC28BF-B39B-11D1-8704-00600893B1BD}';
IID_IDirectMusicBand : TGUID = '{D2AC28C0-B39B-11D1-8704-00600893B1BD}';
(* Global data guids *)
GUID_PerfMasterTempo : TGUID = '{d2ac28b0-b39b-11d1-8704-00600893b1bd}';
GUID_PerfMasterVolume : TGUID = '{d2ac28b1-b39b-11d1-8704-00600893b1bd}';
GUID_PerfMasterGrooveLevel : TGUID = '{d2ac28b2-b39b-11d1-8704-00600893b1bd}';
GUID_PerfAutoDownload : TGUID = '{fb09565b-3631-11d2-bcb8-00a0c922e6eb}';
 
// Alternate interface IDs, available in DX7 release and after.
IID_IDirectMusicPerformance2 : TGUID = '{6FC2CAE0-BC78-11D2-AFA6-00AA0024D8B6}';
IID_IDirectMusicSegment2 : TGUID = '{D38894D1-C052-11D2-872F-00600893B1BD}';
(* GUID for default GM/GS dls collection. *)
GUID_DefaultGMCollection : TGUID = '{f17e8673-c3b4-11d1-870b-00600893b1bd}';
 
type
(* IID's *)
IID_IDirectMusicLoader = IDirectMusicLoader;
IID_IDirectMusicGetLoader = IDirectMusicGetLoader;
IID_IDirectMusicObject = IDirectMusicObject;
IID_IDirectMusicSegment = IDirectMusicSegment;
IID_IDirectMusicSegmentState = IDirectMusicSegmentState;
IID_IDirectMusicTrack = IDirectMusicTrack;
IID_IDirectMusicPerformance = IDirectMusicPerformance;
IID_IDirectMusicTool = IDirectMusicTool;
IID_IDirectMusicGraph = IDirectMusicGraph;
IID_IDirectMusicStyle = IDirectMusicStyle;
IID_IDirectMusicChordMap = IDirectMusicChordMap;
IID_IDirectMusicComposer = IDirectMusicComposer;
IID_IDirectMusicBand = IDirectMusicBand;
 
//***********************************************************************
// *
// dmusicf.h -- This module defines the DirectMusic file formats *
// *
// Copyright (c) 1998, Microsoft Corp. All rights reserved. *
// *
//**********************************************************************
// Common chunks
const
DMUS_FOURCC_GUID_CHUNK = Ord('g') + Ord('u') shl 8 + Ord('i') shl 16 + Ord('d') shl 24;
DMUS_FOURCC_INFO_LIST = Ord('I') + Ord('N') shl 8 + Ord('F') shl 16 + Ord('O') shl 24;
DMUS_FOURCC_UNFO_LIST = Ord('U') + Ord('N') shl 8 + Ord('F') shl 16 + Ord('O') shl 24;
DMUS_FOURCC_UNAM_CHUNK = Ord('U') + Ord('N') shl 8 + Ord('A') shl 16 + Ord('M') shl 24;
DMUS_FOURCC_UART_CHUNK = Ord('U') + Ord('A') shl 8 + Ord('R') shl 16 + Ord('T') shl 24;
DMUS_FOURCC_UCOP_CHUNK = Ord('U') + Ord('C') shl 8 + Ord('O') shl 16 + Ord('P') shl 24;
DMUS_FOURCC_USBJ_CHUNK = Ord('U') + Ord('S') shl 8 + Ord('B') shl 16 + Ord('J') shl 24;
DMUS_FOURCC_UCMT_CHUNK = Ord('U') + Ord('C') shl 8 + Ord('M') shl 16 + Ord('T') shl 24;
DMUS_FOURCC_CATEGORY_CHUNK = Ord('c') + Ord('a') shl 8 + Ord('t') shl 16 + Ord('g') shl 24;
DMUS_FOURCC_VERSION_CHUNK = Ord('v') + Ord('e') shl 8 + Ord('r') shl 16 + Ord('s') shl 24;
(* Alternate interface IDs, available in DX7 release and after. *)
IID_IDirectMusicPerformance2 : TGUID = '{6fc2cae0-bc78-11d2-afa6-00aa0024d8b6}';
IID_IDirectMusicSegment2 : TGUID = '{d38894d1-c052-11d2-872f-00600893b1bd}';
 
// The following structures are used by the Tracks, and are the packed structures
// that are passed to the Tracks inside the IStream.
(************************************************************************
* *
* dmusicf.h -- This module defines the DirectMusic file formats *
* *
* Copyright (c) 1998, Microsoft Corp. All rights reserved. *
* *
************************************************************************)
 
//type IDirectMusicCollection = interface;
 
const
(* Common chunks *)
 
DMUS_FOURCC_GUID_CHUNK : mmioFOURCC = ('g','u','i','d');
DMUS_FOURCC_INFO_LIST : mmioFOURCC = ('I','N','F','O');
DMUS_FOURCC_UNFO_LIST : mmioFOURCC = ('U','N','F','O');
DMUS_FOURCC_UNAM_CHUNK : mmioFOURCC = ('U','N','A','M');
DMUS_FOURCC_UART_CHUNK : mmioFOURCC = ('U','A','R','T');
DMUS_FOURCC_UCOP_CHUNK : mmioFOURCC = ('U','C','O','P');
DMUS_FOURCC_USBJ_CHUNK : mmioFOURCC = ('U','S','B','J');
DMUS_FOURCC_UCMT_CHUNK : mmioFOURCC = ('U','C','M','T');
DMUS_FOURCC_CATEGORY_CHUNK : mmioFOURCC = ('c','a','t','g');
DMUS_FOURCC_VERSION_CHUNK : mmioFOURCC = ('v','e','r','s');
 
(* The following structures are used by the Tracks, and are the packed structures *)
(* that are passed to the Tracks inside the IStream. *)
 
type
TDMUS_IO_SEQ_ITEM = record
mtTime : MUSIC_TIME;
mtDuration : MUSIC_TIME;
TDMus_IO_Seq_Item = packed record
mtTime: TMusic_Time;
mtDuration: TMusic_Time;
dwPChannel : DWORD;
nOffset : Smallint;
bStatus : Byte;
bByte1 : Byte;
bByte2 : Byte;
nOffset: SmallInt;
bStatus: BYTE;
bByte1: BYTE;
bByte2: BYTE;
end;
DMUS_IO_SEQ_ITEM = TDMUS_IO_SEQ_ITEM;
 
 
TDMUS_IO_CURVE_ITEM = record
mtStart : MUSIC_TIME;
mtDuration : MUSIC_TIME;
mtResetDuration : MUSIC_TIME;
TDMus_IO_Curve_Item = packed record
mtStart: TMusic_Time;
mtDuration: TMusic_Time;
mtResetDuration: TMusic_Time;
dwPChannel : DWORD;
nOffset : Smallint;
nStartValue : Smallint;
nEndValue : Smallint;
nResetValue : Smallint;
bType : Byte;
bCurveShape : Byte;
bCCData : Byte;
bFlags : Byte;
nOffset: SmallInt;
nStartValue: SmallInt;
nEndValue: SmallInt;
nResetValue: SmallInt;
bType: BYTE;
bCurveShape: BYTE;
bCCData: BYTE;
bFlags: BYTE;
end;
DMUS_IO_CURVE_ITEM = TDMUS_IO_CURVE_ITEM;
 
 
TDMUS_IO_TEMPO_ITEM = record
lTime : MUSIC_TIME;
dblTempo : Double;
TDMus_IO_Tempo_Item = packed record
lTime: TMusic_Time;
dblTempo: double;
end;
DMUS_IO_TEMPO_ITEM = TDMUS_IO_TEMPO_ITEM;
 
 
TDMUS_IO_SYSEX_ITEM = record
mtTime : MUSIC_TIME;
TDMus_IO_SysEx_Item = packed record
mtTime: TMusic_Time;
dwPChannel : DWORD;
dwSysExLength : DWORD;
end;
DMUS_IO_SYSEX_ITEM = TDMUS_IO_SYSEX_ITEM;
 
TDMus_IO_TimeSignature_Item = packed record
lTime: TMusic_Time;
bBeatsPerMeasure: BYTE; (* beats per measure (top of time sig) *)
bBeat: BYTE; (* what note receives the beat (bottom of time sig.) *)
(* we can assume that 0 means 256th note *)
wGridsPerBeat: WORD; (* grids per beat *)
end;
 
TDMUS_IO_TIMESIGNATURE_ITEM = record
lTime : MUSIC_TIME;
bBeatsPerMeasure : Byte; // beats per measure (top of time sig)
bBeat : Byte; // what note receives the beat (bottom of time sig.)
// we can assume that 0 means 256th note
wGridsPerBeat : Word; // grids per beat
(* PARAM structures, used by GetParam() and SetParam() *)
TDMus_Command_Param = packed record
bCommand: BYTE;
bGrooveLevel: BYTE;
bGrooveRange: BYTE;
end;
DMUS_IO_TIMESIGNATURE_ITEM = TDMUS_IO_TIMESIGNATURE_ITEM;
 
// PARAM structures, used by GetParam() and SetParam()
TDMUS_COMMAND_PARAM = record
bCommand : Byte;
bGrooveLevel : Byte;
bGrooveRange : Byte;
TDMus_Command_Param_2 = packed record
mtTime : TMusic_Time;
bCommand: BYTE;
bGrooveLevel: BYTE;
bGrooveRange: BYTE;
end;
DMUS_COMMAND_PARAM = TDMUS_COMMAND_PARAM;
 
//DMUS_CHORD_KEY = DMUS_CHORD_PARAM; // DMUS_CHORD_KEY defined in dmusici.h
TDMus_Chord_Param = TDMus_Chord_Key; (* DMUS_CHORD_KEY defined in dmusici.h *)
 
TDMUS_RHYTHM_PARAM = record
TimeSig : TDMUS_TIMESIGNATURE;
TDMus_Rhythm_Param = packed record
TimeSig: TDMus_TimeSignature;
dwRhythmPattern : DWORD;
end;
DMUS_RHYTHM_PARAM = TDMUS_RHYTHM_PARAM;
 
TDMUS_TEMPO_PARAM = record
mtTime : MUSIC_TIME;
dblTempo : Double;
TDMus_Tempo_Param = packed record
mtTime: TMusic_Time;
dblTempo: double;
end;
DMUS_TEMPO_PARAM = TDMUS_TEMPO_PARAM;
 
 
TDMUS_MUTE_PARAM = record
TDMus_Mute_Param = packed record
dwPChannel : DWORD;
dwPChannelMap : DWORD;
fMute : BOOL;
end;
DMUS_MUTE_PARAM = TDMUS_MUTE_PARAM;
 
const
// Style chunks
(* Style chunks *)
 
DMUS_FOURCC_STYLE_FORM = Ord('D') + Ord('M') shl 8 + Ord('S') shl 16 + Ord('T') shl 24;
DMUS_FOURCC_STYLE_CHUNK = Ord('s') + Ord('t') shl 8 + Ord('y') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_PART_LIST = Ord('p') + Ord('a') shl 8 + Ord('r') shl 16 + Ord('t') shl 24;
DMUS_FOURCC_PART_CHUNK = Ord('p') + Ord('r') shl 8 + Ord('t') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_NOTE_CHUNK = Ord('n') + Ord('o') shl 8 + Ord('t') shl 16 + Ord('e') shl 24;
DMUS_FOURCC_CURVE_CHUNK = Ord('c') + Ord('r') shl 8 + Ord('v') shl 16 + Ord('e') shl 24;
DMUS_FOURCC_PATTERN_LIST = Ord('p') + Ord('t') shl 8 + Ord('t') shl 16 + Ord('n') shl 24;
DMUS_FOURCC_PATTERN_CHUNK = Ord('p') + Ord('t') shl 8 + Ord('n') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_RHYTHM_CHUNK = Ord('r') + Ord('h') shl 8 + Ord('t') shl 16 + Ord('m') shl 24;
DMUS_FOURCC_PARTREF_LIST = Ord('p') + Ord('r') shl 8 + Ord('e') shl 16 + Ord('f') shl 24;
DMUS_FOURCC_PARTREF_CHUNK = Ord('p') + Ord('r') shl 8 + Ord('f') shl 16 + Ord('c') shl 24;
DMUS_FOURCC_STYLE_PERS_REF_LIST = Ord('p') + Ord('r') shl 8 + Ord('r') shl 16 + Ord('f') shl 24;
DMUS_FOURCC_MOTIFSETTINGS_CHUNK = Ord('m') + Ord('t') shl 8 + Ord('f') shl 16 + Ord('s') shl 24;
DMUS_FOURCC_STYLE_FORM : mmioFOURCC = ('D','M','S','T');
DMUS_FOURCC_STYLE_CHUNK : mmioFOURCC = ('s','t','y','h');
DMUS_FOURCC_PART_LIST : mmioFOURCC = ('p','a','r','t');
DMUS_FOURCC_PART_CHUNK : mmioFOURCC = ('p','r','t','h');
DMUS_FOURCC_NOTE_CHUNK : mmioFOURCC = ('n','o','t','e');
DMUS_FOURCC_CURVE_CHUNK : mmioFOURCC = ('c','r','v','e');
DMUS_FOURCC_PATTERN_LIST : mmioFOURCC = ('p','t','t','n');
DMUS_FOURCC_PATTERN_CHUNK : mmioFOURCC = ('p','t','n','h');
DMUS_FOURCC_RHYTHM_CHUNK : mmioFOURCC = ('r','h','t','m');
DMUS_FOURCC_PARTREF_LIST : mmioFOURCC = ('p','r','e','f');
DMUS_FOURCC_PARTREF_CHUNK : mmioFOURCC = ('p','r','f','c');
DMUS_FOURCC_STYLE_PERS_REF_LIST : mmioFOURCC = ('p', 'r', 'r', 'f');
DMUS_FOURCC_MOTIFSETTINGS_CHUNK : mmioFOURCC = ('m', 't', 'f', 's');
 
// Flags used by variations: these make up the DWORDs in dwVariationChoices.
(* Flags used by variations: these make up the DWORDs in dwVariationChoices. *)
 
// These flags determine the types of chords supported by a given variation in DirectMusic
// mode. The first seven flags (bits 1-7) are set if the variation supports major chords
// rooted in scale positions, so, e.g., if bits 1, 2, and 4 are set, the variation
// supports major chords rooted in the tonic, second, and fourth scale positions. The
// next seven flags serve the same purpose, but for minor chords, and the following seven
// flags serve the same purpose for chords that are not major or minor (e.g., SUS 4
// chords). Bits 22, 23, and 24 are set if the variation supports chords rooted in the
// scale, chords rooted sharp of scale tones, and chords rooted flat of scale tones,
// respectively. For example, to support a C# minor chord in the scale of C Major,
// bits 8 (for tonic minor) and 24 (for sharp) need to be set. Bits 25, 26, an 27 handle
// chords that are triads, 6th or 7th chords, and chords with extensions, respectively.
// bits 28 and 29 handle chords that are followed by tonic and dominant chords,
// respectively.
DMUS_VARIATIONF_MAJOR = $0000007F; // Seven positions in the scale - major chords.
DMUS_VARIATIONF_MINOR = $00003F80; // Seven positions in the scale - minor chords.
DMUS_VARIATIONF_OTHER = $001FC000; // Seven positions in the scale - other chords.
DMUS_VARIATIONF_ROOT_SCALE = $00200000; // Handles chord roots in the scale.
DMUS_VARIATIONF_ROOT_FLAT = $00400000; // Handles flat chord roots (based on scale notes).
DMUS_VARIATIONF_ROOT_SHARP = $00800000; // Handles sharp chord roots (based on scale notes).
DMUS_VARIATIONF_TYPE_TRIAD = $01000000; // Handles simple chords - triads.
DMUS_VARIATIONF_TYPE_6AND7 = $02000000; // Handles simple chords - 6 and 7.
DMUS_VARIATIONF_TYPE_COMPLEX= $04000000; // Handles complex chords.
DMUS_VARIATIONF_DEST_TO1 = $08000000; // Handles transitions to 1 chord.
DMUS_VARIATIONF_DEST_TO5 = $10000000; // Handles transitions to 5 chord.
(* These flags determine the types of chords supported by a given variation in DirectMusic *)
(* mode. The first seven flags (bits 1-7) are set if the variation supports major chords *)
(* rooted in scale positions, so, e.g., if bits 1, 2, and 4 are set, the variation *)
(* supports major chords rooted in the tonic, second, and fourth scale positions. The *)
(* next seven flags serve the same purpose, but for minor chords, and the following seven *)
(* flags serve the same purpose for chords that are not major or minor (e.g., SUS 4 *)
(* chords). Bits 22, 23, and 24 are set if the variation supports chords rooted in the *)
(* scale, chords rooted sharp of scale tones, and chords rooted flat of scale tones, *)
(* respectively. For example, to support a C# minor chord in the scale of C Major, *)
(* bits 8 (for tonic minor) and 24 (for sharp) need to be set. Bits 25, 26, an 27 handle *)
(* chords that are triads, 6th or 7th chords, and chords with extensions, respectively. *)
(* bits 28 and 29 handle chords that are followed by tonic and dominant chords, *)
(* respectively. *)
DMUS_VARIATIONF_MAJOR = $0000007F; (* Seven positions in the scale - major chords. *)
DMUS_VARIATIONF_MINOR = $00003F80; (* Seven positions in the scale - minor chords. *)
DMUS_VARIATIONF_OTHER = $001FC000; (* Seven positions in the scale - other chords. *)
DMUS_VARIATIONF_ROOT_SCALE = $00200000; (* Handles chord roots in the scale. *)
DMUS_VARIATIONF_ROOT_FLAT = $00400000; (* Handles flat chord roots (based on scale notes). *)
DMUS_VARIATIONF_ROOT_SHARP = $00800000; (* Handles sharp chord roots (based on scale notes). *)
DMUS_VARIATIONF_TYPE_TRIAD = $01000000; (* Handles simple chords - triads. *)
DMUS_VARIATIONF_TYPE_6AND7 = $02000000; (* Handles simple chords - 6 and 7. *)
DMUS_VARIATIONF_TYPE_COMPLEX = $04000000; (* Handles complex chords. *)
DMUS_VARIATIONF_DEST_TO1 = $08000000; (* Handles transitions to 1 chord. *)
DMUS_VARIATIONF_DEST_TO5 = $10000000; (* Handles transitions to 5 chord. *)
 
// The top three bits of the variation flags are the Mode bits. If all are 0, it's IMA.
// If the smallest is 1, it's Direct Music.
(* The top three bits of the variation flags are the Mode bits. If all are 0, it's IMA. *)
(* If the smallest is 1, it's Direct Music. *)
DMUS_VARIATIONF_MODES = $E0000000;
DMUS_VARIATIONF_IMA25_MODE = $00000000;
DMUS_VARIATIONF_DMUS_MODE = $20000000;
 
//#pragma pack(2)
 
type BYTE2 = Word;
 
type
TDMUS_IO_TIMESIG = record
// Time signatures define how many beats per measure, which note receives
// the beat, and the grid resolution.
bBeatsPerMeasure : Byte; // beats per measure (top of time sig)
bBeat : Byte; // what note receives the beat (bottom of time sig.)
// we can assume that 0 means 256th note
wGridsPerBeat : Word; // grids per beat
TDMus_IO_TimeSig = packed record
(* Time signatures define how many beats per measure, which note receives *)
(* the beat, and the grid resolution. *)
bBeatsPerMeasure: BYTE2; (* beats per measure (top of time sig) *)
bBeat: BYTE2; (* what note receives the beat (bottom of time sig.) *)
(* we can assume that 0 means 256th note *)
wGridsPerBeat: WORD; (* grids per beat *)
end;
DMUS_IO_TIMESIG = TDMUS_IO_TIMESIG;
 
TDMUS_IO_STYLE = record
timeSig : TDMUS_IO_TIMESIG; // Styles have a default Time Signature
dblTempo: Double;
TDMus_IO_Style = packed record
timeSig: TDMus_IO_TimeSig; (* Styles have a default Time Signature *)
dblTempo: double;
end;
DMUS_IO_STYLE = TDMUS_IO_STYLE;
 
TDMUS_IO_VERSION = record
dwVersionMS : DWORD; // Version # high-order 32 bits
dwVersionLS : DWORD; // Version # low-order 32 bits
TDMus_IO_Version = packed record
dwVersionMS: DWORD; (* Version # high-order 32 bits *)
dwVersionLS: DWORD; (* Version # low-order 32 bits *)
end;
DMUS_IO_VERSION = TDMUS_IO_VERSION;
 
TDMUS_IO_PATTERN = record
timeSig : TDMUS_IO_TIMESIG; // Patterns can override the Style's Time sig.
bGrooveBottom : Byte; // bottom of groove range
bGrooveTop : Byte; // top of groove range
wEmbellishment : Word; // Fill, Break, Intro, End, Normal, Motif
wNbrMeasures : Word; // length in measures
TDMus_IO_Pattern = packed record
timeSig: TDMus_IO_TimeSig; (* Patterns can override the Style's Time sig. *)
bGrooveBottom: BYTE2; (* bottom of groove range *)
bGrooveTop: BYTE2; (* top of groove range *)
wEmbellishment: WORD; (* Fill, Break, Intro, End, Normal, Motif *)
wNbrMeasures: WORD; (* length in measures *)
end;
DMUS_IO_PATTERN = TDMUS_IO_PATTERN;
 
TDMUS_IO_STYLEPART = record
timeSig : TDMUS_IO_TIMESIG; // can override pattern's
dwVariationChoices : array[0..31] of DWORD; // MOAW choice bitfield
guidPartID : TGUID; // identifies the part
wNbrMeasures : Word; // length of the Part
bPlayModeFlags : Byte; // see PLAYMODE flags
bInvertUpper : Byte; // inversion upper limit
bInvertLower : Byte; // inversion lower limit
TDMus_IO_StylePart = packed record
timeSig: TDMus_IO_TimeSig; (* can override pattern's *)
dwVariationChoices: array [0..31] of DWORD; (* MOAW choice bitfield *)
guidPartID: TGUID; (* identifies the part *)
wNbrMeasures: WORD; (* length of the Part *)
bPlayModeFlags: BYTE2; (* see PLAYMODE flags *)
bInvertUpper: BYTE2; (* inversion upper limit *)
bInvertLower: BYTE2; (* inversion lower limit *)
end;
DMUS_IO_STYLEPART = TDMUS_IO_STYLEPART;
 
TDMUS_IO_PARTREF = record
guidPartID : TGUID; // unique ID for matching up with parts
wLogicalPartID : Word; // corresponds to port/device/midi channel
bVariationLockID : Byte; // parts with the same ID lock variations.
// high bit is used to identify master Part
bSubChordLevel : Byte; // tells which sub chord level this part wants
bPriority : Byte; // 256 priority levels. Parts with lower priority
// aren't played first when a device runs out of
// notes
bRandomVariation : Byte; // when set, matching variations play in random order
// when clear, matching variations play sequentially
TDMus_IO_PartRef = packed record
guidPartID: TGUID; (* unique ID for matching up with parts *)
wLogicalPartID: WORD; (* corresponds to port/device/midi channel *)
bVariationLockID: BYTE2; (* parts with the same ID lock variations. *)
(* high bit is used to identify master Part *)
bSubChordLevel: BYTE2; (* tells which sub chord level this part wants *)
bPriority: BYTE2; (* 256 priority levels. Parts with lower priority *)
(* aren't played first when a device runs out of *)
(* notes *)
bRandomVariation: BYTE2; (* when set, matching variations play in random order *)
(* when clear, matching variations play sequentially *)
end;
DMUS_IO_PARTREF = TDMUS_IO_PARTREF;
 
TDMUS_IO_STYLENOTE = record
mtGridStart : MUSIC_TIME; // when this note occurs
dwVariation : DWORD; // variation bits
mtDuration : MUSIC_TIME; // how long this note lasts
nTimeOffset : Smallint; // offset from mtGridStart
wMusicValue : Word; // Position in scale.
bVelocity : Byte; // Note velocity.
bTimeRange : Byte; // Range to randomize start time.
bDurRange : Byte; // Range to randomize duration.
bVelRange : Byte; // Range to randomize velocity.
bInversionID : Byte; // Identifies inversion group to which this note belongs
bPlayModeFlags : Byte; // Can override part
TDMus_IO_StyleNote = packed record
mtGridStart: TMusic_Time ;(* when this note occurs *)
dwVariation: DWORD; (* variation bits *)
mtDuration: TMusic_Time; (* how long this note lasts *)
nTimeOffset: SmallInt; (* offset from mtGridStart *)
wMusicValue: WORD; (* Position in scale. *)
bVelocity: BYTE2; (* Note velocity. *)
bTimeRange: BYTE2; (* Range to randomize start time. *)
bDurRange: BYTE2; (* Range to randomize duration. *)
bVelRange: BYTE2; (* Range to randomize velocity. *)
bInversionID: BYTE2; (* Identifies inversion group to which this note belongs *)
bPlayModeFlags: BYTE2; (* Can override part *)
end;
DMUS_IO_STYLENOTE = TDMUS_IO_STYLENOTE;
 
TDMUS_IO_STYLECURVE = record
mtGridStart : MUSIC_TIME;// when this curve occurs
dwVariation : DWORD; // variation bits
mtDuration : MUSIC_TIME;// how long this curve lasts
mtResetDuration : MUSIC_TIME;// how long after the end of the curve to reset the curve
nTimeOffset : Smallint; // offset from mtGridStart
nStartValue : Smallint; // curve's start value
nEndValue : Smallint; // curve's end value
nResetValue : Smallint; // the value to which to reset the curve
bEventType : Byte; // type of curve
bCurveShape : Byte; // shape of curve
bCCData : Byte; // CC#
bFlags : Byte; // Bit 1=TRUE means to send nResetValue. Otherwise, don't.
// Other bits are reserved.
TDMus_IO_StyleCurve = packed record
mtGridStart: TMusic_Time; (* when this curve occurs *)
dwVariation: DWORD; (* variation bits *)
mtDuration: TMusic_Time; (* how long this curve lasts *)
mtResetDuration: TMusic_Time; (* how long after the end of the curve to reset the curve *)
nTimeOffset: SmallInt; (* offset from mtGridStart *)
nStartValue: SmallInt; (* curve's start value *)
nEndValue: SmallInt; (* curve's end value *)
nResetValue: SmallInt; (* the value to which to reset the curve *)
bEventType: BYTE2; (* type of curve *)
bCurveShape: BYTE2; (* shape of curve *)
bCCData: BYTE2; (* CC# *)
bFlags: BYTE2; (* Bit 1=TRUE means to send nResetValue. Otherwise, don't.
Other bits are reserved. *)
end;
DMUS_IO_STYLECURVE = TDMUS_IO_STYLECURVE;
 
TDMUS_IO_MOTIFSETTINGS = record
dwRepeats : DWORD; // Number of repeats. By default, 0.
mtPlayStart : MUSIC_TIME; // Start of playback. By default, 0.
mtLoopStart : MUSIC_TIME; // Start of looping portion. By default, 0.
mtLoopEnd : MUSIC_TIME; // End of loop. Must be greater than mtLoopStart. By default equal to length of motif.
dwResolution : DWORD; // Default resolution.
TDMus_IO_MotifSettings = packed record
dwRepeats: DWORD; (* Number of repeats. By default, 0. *)
mtPlayStart: TMusic_Time; (* Start of playback. By default, 0. *)
mtLoopStart: TMusic_Time; (* Start of looping portion. By default, 0. *)
mtLoopEnd: TMusic_Time; (* End of loop. Must be greater than mtLoopStart. By default equal to length of motif. *)
dwResolution: DWORD; (* Default resolution. *)
end;
DMUS_IO_MOTIFSETTINGS = TDMUS_IO_MOTIFSETTINGS;
 
//#pragma pack()
 
(*
RIFF
(
'DMST' // Style
<styh-ck> // Style header chunk
<guid-ck> // Every Style has a GUID
[<UNFO-list>] // Name, author, copyright info., comments
[<vers-ck>] // version chunk
<part-list>... // List of parts in the Style, used by patterns
<pttn-list>... // List of patterns in the Style
<DMBD-form>... // List of bands in the Style
[<motf-list>] // List of motifs in the Style
[<prrf-list>] // List of chord map references in the Style
)
 
// <styh-ck>
styh
(
<DMUS_IO_STYLE>
)
 
// <guid-ck>
guid
(
<GUID>
)
 
// <vers-ck>
vers
(
<DMUS_IO_VERSION>
)
 
// <part-list>
LIST
(
'part'
<prth-ck> // Part header chunk
[<UNFO-list>]
[<note-ck>] // List of notes in Part
[<crve-ck>] // List of curves in Part
)
 
// <orth-ck>
prth
(
<DMUS_IO_STYLEPART>
)
 
// <note-ck>
'note'
(
// sizeof DMUS_IO_STYLENOTE:DWORD
<DMUS_IO_STYLENOTE>...
)
 
// <crve-ck>
'crve'
(
// sizeof DMUS_IO_STYLECURVE:DWORD
<DMUS_IO_STYLECURVE>...
)
 
// <pttn-list>
LIST
(
'pttn'
<ptnh-ck> // Pattern header chunk
<rhtm-ck> // List of rhythms for chord matching
[<UNFO-list>]
[<mtfs-ck>] // Motif settings chunk
<pref-list>... // List of part reference id's
)
 
// <ptnh-ck>
ptnh
(
<DMUS_IO_PATTERN>
)
 
// <rhtm-ck>
'rhtm'
(
// DWORD's representing rhythms for chord matching based on number
// of measures in the pattern
)
 
// pref-list
LIST
(
'pref'
<prfc-ck> // part ref chunk
)
 
// <prfc-ck>
prfc
(
<DMUS_IO_PARTREF>
)
 
// <mtfs-ck>
mtfs
(
<DMUS_IO_MOTIFSETTINGS>
)
 
// <prrf-list>
LIST
(
'prrf'
// some number of <DMRF>
)
*)
 
(* Chord and command file formats *)
const
// Chord and command file formats
DMUS_FOURCC_CHORDTRACK_LIST : mmioFOURCC = ('c','o','r','d');
DMUS_FOURCC_CHORDTRACKHEADER_CHUNK : mmioFOURCC = ('c','r','d','h');
DMUS_FOURCC_CHORDTRACKBODY_CHUNK : mmioFOURCC = ('c','r','d','b');
 
DMUS_FOURCC_CHORDTRACK_LIST = Ord('c') + Ord('o') shl 8 + Ord('r') shl 16 + Ord('d') shl 24;
DMUS_FOURCC_CHORDTRACKHEADER_CHUNK = Ord('c') + Ord('r') shl 8 + Ord('d') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_CHORDTRACKBODY_CHUNK = Ord('c') + Ord('r') shl 8 + Ord('d') shl 16 + Ord('b') shl 24;
DMUS_FOURCC_COMMANDTRACK_CHUNK : mmioFOURCC = ('c','m','n','d');
 
DMUS_FOURCC_COMMANDTRACK_CHUNK = Ord('c') + Ord('m') shl 8 + Ord('n') shl 16 + Ord('d') shl 24;
 
type
TDMUS_IO_CHORD = record
wszName : array[0..15] of WCHAR; // Name of the chord
mtTime : MUSIC_TIME; // Time of this chord
wMeasure : Word; // Measure this falls on
bBeat : Byte; // Beat this falls on
TDMus_IO_Chord = packed record
wszName: array [0..15] of WCHAR; (* Name of the chord *)
mtTime: TMusic_Time; (* Time of this chord *)
wMeasure: WORD; (* Measure this falls on *)
bBeat: BYTE; (* Beat this falls on *)
end;
DMUS_IO_CHORD = TDMUS_IO_CHORD;
 
TDMUS_IO_SUBCHORD = record
dwChordPattern : DWORD; // Notes in the subchord
dwScalePattern : DWORD; // Notes in the scale
dwInversionPoints : DWORD; // Where inversions can occur
dwLevels : DWORD; // Which levels are supported by this subchord
bChordRoot : Byte; // Root of the subchord
bScaleRoot : Byte; // Root of the scale
TDMus_IO_SubChord = packed record
dwChordPattern: DWORD; (* Notes in the subchord *)
dwScalePattern: DWORD; (* Notes in the scale *)
dwInversionPoints: DWORD; (* Where inversions can occur *)
dwLevels: DWORD; (* Which levels are supported by this subchord *)
bChordRoot: BYTE; (* Root of the subchord *)
bScaleRoot: BYTE; (* Root of the scale *)
end;
DMUS_IO_SUBCHORD = TDMUS_IO_SUBCHORD;
 
TDMUS_IO_COMMAND = record
mtTime : MUSIC_TIME; // Time of this command
wMeasure : Word; // Measure this falls on
bBeat : Byte; // Beat this falls on
bCommand : Byte; // Command type (see #defines below)
bGrooveLevel : Byte; // Groove level (0 if command is not a groove)
bGrooveRange : Byte; // Groove range
TDMus_IO_Command = packed record
mtTime: TMusic_Time; (* Time of this command *)
wMeasure: WORD; (* Measure this falls on *)
bBeat: BYTE; (* Beat this falls on *)
bCommand: BYTE; (* Command type (see #defines below) *)
bGrooveLevel: BYTE; (* Groove level (0 if command is not a groove) *)
bGrooveRange: BYTE; (* Groove range *)
end;
DMUS_IO_COMMAND = TDMUS_IO_COMMAND;
 
(*
 
// File io for DirectMusic Tool and ToolGraph objects
///
// <cord-list>
LIST
(
'cord'
<crdh-ck>
<crdb-ck> // Chord body chunk
)
 
// <crdh-ck>
crdh
(
// Scale: dword (upper 8 bits for root, lower 24 for scale)
)
 
// <crdb-ck>
crdb
(
// sizeof DMUS_IO_CHORD:dword
<DMUS_IO_CHORD>
// # of DMUS_IO_SUBCHORDS:dword
// sizeof DMUS_IO_SUBCHORDS:dword
// a number of <DMUS_IO_SUBCHORD>
)
 
 
// <cmnd-list>
'cmnd'
(
//sizeof DMUS_IO_COMMAND: DWORD
<DMUS_IO_COMMAND>...
)
 
*)
 
(* File io for DirectMusic Tool and ToolGraph objects
*)
 
(* RIFF ids: *)
const
// RIFF ids:
DMUS_FOURCC_TOOLGRAPH_FORM : mmioFOURCC = ('D','M','T','G');
DMUS_FOURCC_TOOL_LIST : mmioFOURCC = ('t','o','l','l');
DMUS_FOURCC_TOOL_FORM : mmioFOURCC = ('D','M','T','L');
DMUS_FOURCC_TOOL_CHUNK : mmioFOURCC = ('t','o','l','h');
 
DMUS_FOURCC_TOOLGRAPH_FORM = Ord('D') + Ord('M') shl 8 + Ord('T') shl 16 + Ord('G') shl 24;
DMUS_FOURCC_TOOL_LIST = Ord('t') + Ord('o') shl 8 + Ord('l') shl 16 + Ord('l') shl 24;
DMUS_FOURCC_TOOL_FORM = Ord('D') + Ord('M') shl 8 + Ord('T') shl 16 + Ord('L') shl 24;
DMUS_FOURCC_TOOL_CHUNK = Ord('t') + Ord('o') shl 8 + Ord('l') shl 16 + Ord('h') shl 24;
 
(* io structures: *)
type
// io structures:
 
TDMUS_IO_TOOL_HEADER = record
guidClassID : TGUID; // Class id of tool.
lIndex : Longint; // Position in graph.
cPChannels : DWORD; // Number of items in channels array.
ckid : FOURCC; // chunk ID of tool's data chunk if 0 fccType valid.
fccType : FOURCC; // list type if NULL ckid valid.
dwPChannels : array[0..0] of DWORD; // Array of PChannels, size determined by cPChannels.
TDMus_IO_Tool_Header = packed record
guidClassID: TGUID; (* Class id of tool. *)
lIndex: LongInt; (* Position in graph. *)
cPChannels: DWORD; (* Number of items in channels array. *)
ckid: TFourCC; (* chunk ID of tool's data chunk if 0 fccType valid. *)
fccType: TFourCC; (* list type if NULL ckid valid. *)
dwPChannels: array [0..0] of DWORD; (* Array of PChannels, size determined by cPChannels. *)
end;
DMUS_IO_TOOL_HEADER = TDMUS_IO_TOOL_HEADER;
 
(*
RIFF
(
'DMTG' // DirectMusic ToolGraph chunk
[<guid-ck>] // GUID for ToolGraph
[<vers-ck>] // Optional version info
[<UNFO-list>] // Name, author, copyright info., comments
<toll-list> // List of Tools
)
 
// File io for DirectMusic Band Track object
// <guid-ck>
'guid'
(
<GUID>
)
 
// <vers-ck>
vers
(
<DMUS_IO_VERSION>
)
 
// <toll-list>
LIST
(
'toll' // List of tools
<DMTL-form>... // Each tool is encapsulated in a RIFF chunk
)
 
// <DMTL-form> // Tools can be embedded in a graph or stored as separate files.
RIFF
(
'DMTL'
<tolh-ck>
[<guid-ck>] // Optional GUID for tool object instance (not to be confused with Class id in track header)
[<vers-ck>] // Optional version info
[<UNFO-list>] // Optional name, author, copyright info., comments
[<data>] // Tool data. Must be a RIFF readable chunk.
)
 
// <tolh-ck> // Tool header chunk
(
'tolh'
<DMUS_IO_TOOL_HEADER> // Tool header
)
*)
 
(* File io for DirectMusic Band Track object *)
 
 
(* RIFF ids: *)
const
// RIFF ids:
DMUS_FOURCC_BANDTRACK_FORM = Ord('D') + Ord('M') shl 8 + Ord('B') shl 16 + Ord('T') shl 24;
DMUS_FOURCC_BANDTRACK_CHUNK = Ord('b') + Ord('d') shl 8 + Ord('t') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_BANDS_LIST = Ord('l') + Ord('b') shl 8 + Ord('d') shl 16 + Ord('l') shl 24;
DMUS_FOURCC_BAND_LIST = Ord('l') + Ord('b') shl 8 + Ord('n') shl 16 + Ord('d') shl 24;
DMUS_FOURCC_BANDITEM_CHUNK = Ord('b') + Ord('d') shl 8 + Ord('i') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_BANDTRACK_FORM : mmioFOURCC = ('D','M','B','T');
DMUS_FOURCC_BANDTRACK_CHUNK : mmioFOURCC = ('b','d','t','h');
DMUS_FOURCC_BANDS_LIST : mmioFOURCC = ('l','b','d','l');
DMUS_FOURCC_BAND_LIST : mmioFOURCC = ('l','b','n','d');
DMUS_FOURCC_BANDITEM_CHUNK : mmioFOURCC = ('b','d','i','h');
 
type
// io structures
TDMUS_IO_BAND_TRACK_HEADER = record
bAutoDownload : BOOL; // Determines if Auto-Download is enabled.
(* io structures *)
TDMus_IO_Band_Track_Header = packed record
bAutoDownload: BOOL; (* Determines if Auto-Download is enabled. *)
end;
DMUS_IO_BAND_TRACK_HEADER = TDMUS_IO_BAND_TRACK_HEADER;
 
TDMUS_IO_BAND_ITEM_HEADER = record
lBandTime : MUSIC_TIME; // Position in track list.
TDMus_IO_Band_Item_Header = packed record
lBandTime: TMusic_Time; (* Position in track list. *)
end;
DMUS_IO_BAND_ITEM_HEADER = TDMUS_IO_BAND_ITEM_HEADER;
 
(*
RIFF
(
'DMBT' // DirectMusic Band Track form-type
[<bdth-ck>] // Band track header
[<guid-ck>] // GUID for band track
[<vers-ck>] // Optional version info
[<UNFO-list>] // Name, author, copyright info., comments
<lbdl-list> // List of Band Lists
)
 
// File io for DirectMusic Band object
///
// <bnth-ck>
'bdth'
(
<DMUS_IO_BAND_TRACK_HEADER>
)
 
const
// RIFF ids:
// <guid-ck>
'guid'
(
<GUID>
)
 
DMUS_FOURCC_BAND_FORM = Ord('D') + Ord('M') shl 8 + Ord('B') shl 16 + Ord('D') shl 24;
DMUS_FOURCC_INSTRUMENTS_LIST = Ord('l') + Ord('b') shl 8 + Ord('i') shl 16 + Ord('l') shl 24;
DMUS_FOURCC_INSTRUMENT_LIST = Ord('l') + Ord('b') shl 8 + Ord('i') shl 16 + Ord('n') shl 24;
DMUS_FOURCC_INSTRUMENT_CHUNK = Ord('b') + Ord('i') shl 8 + Ord('n') shl 16 + Ord('s') shl 24;
// <vers-ck>
vers
(
<DMUS_IO_VERSION>
)
 
// Flags for DMUS_IO_INSTRUMENT
///
DMUS_IO_INST_PATCH = (1 shl 0); // dwPatch is valid.
DMUS_IO_INST_BANKSELECT = (1 shl 1); // dwPatch contains a valid Bank Select MSB and LSB part
DMUS_IO_INST_ASSIGN_PATCH = (1 shl 3); // dwAssignPatch is valid
DMUS_IO_INST_NOTERANGES = (1 shl 4); // dwNoteRanges is valid
DMUS_IO_INST_PAN = (1 shl 5); // bPan is valid
DMUS_IO_INST_VOLUME = (1 shl 6); // bVolume is valid
DMUS_IO_INST_TRANSPOSE = (1 shl 7); // nTranspose is valid
DMUS_IO_INST_GM = (1 shl 8); // Instrument is from GM collection
DMUS_IO_INST_GS = (1 shl 9); // Instrument is from GS collection
DMUS_IO_INST_XG = (1 shl 10); // Instrument is from XG collection
DMUS_IO_INST_CHANNEL_PRIORITY = (1 shl 11); // dwChannelPriority is valid
DMUS_IO_INST_USE_DEFAULT_GM_SET = (1 shl 12); // Always use the default GM set for this patch,
// don't rely on the synth caps stating GM or GS in hardware.
// <lbdl-list>
LIST
(
'lbdl' // List of bands
<lbnd-list> // Each band is encapsulated in a list
)
 
// <lbnd-list>
LIST
(
'lbnd'
<bdih-ck>
<DMBD-form> // Band
)
 
// <bdih-ck> // band item header
(
<DMUS_IO_BAND_ITEM_HEADER> // Band item header
)
*)
 
 
(* File io for DirectMusic Band object
*)
 
(* RIFF ids: *)
const
DMUS_FOURCC_BAND_FORM : mmioFOURCC = ('D','M','B','D');
DMUS_FOURCC_INSTRUMENTS_LIST : mmioFOURCC = ('l','b','i','l');
DMUS_FOURCC_INSTRUMENT_LIST : mmioFOURCC = ('l','b','i','n');
DMUS_FOURCC_INSTRUMENT_CHUNK : mmioFOURCC = ('b','i','n','s');
 
(* Flags for DMUS_IO_INSTRUMENT
*)
DMUS_IO_INST_PATCH = (1 shl 0); (* dwPatch is valid. *)
DMUS_IO_INST_BANKSELECT = (1 shl 1); (* dwPatch contains a valid Bank Select MSB and LSB part *)
DMUS_IO_INST_ASSIGN_PATCH = (1 shl 3); (* dwAssignPatch is valid *)
DMUS_IO_INST_NOTERANGES = (1 shl 4); (* dwNoteRanges is valid *)
DMUS_IO_INST_PAN = (1 shl 5); (* bPan is valid *)
DMUS_IO_INST_VOLUME = (1 shl 6); (* bVolume is valid *)
DMUS_IO_INST_TRANSPOSE = (1 shl 7); (* nTranspose is valid *)
DMUS_IO_INST_GM = (1 shl 8); (* Instrument is from GM collection *)
DMUS_IO_INST_GS = (1 shl 9); (* Instrument is from GS collection *)
DMUS_IO_INST_XG = (1 shl 10); (* Instrument is from XG collection *)
DMUS_IO_INST_CHANNEL_PRIORITY = (1 shl 11); (* dwChannelPriority is valid *)
DMUS_IO_INST_USE_DEFAULT_GM_SET = (1 shl 12); (* Always use the default GM set for this patch, *)
(* don't rely on the synth caps stating GM or GS in hardware. *)
type
// io structures
TDMUS_IO_INSTRUMENT = record
dwPatch : DWORD; // MSB, LSB and Program change to define instrument
dwAssignPatch : DWORD; // MSB, LSB and Program change to assign to instrument when downloading
dwNoteRanges : array[0..3] of DWORD; // 128 bits; one for each MIDI note instrument needs to able to play
dwPChannel : DWORD; // PChannel instrument plays on
dwFlags : DWORD; // DMUS_IO_INST_ flags
bPan : Byte; // Pan for instrument
bVolume : Byte; // Volume for instrument
nTranspose : Smallint; // Number of semitones to transpose notes
dwChannelPriority : DWORD; // Channel priority
(* io structures *)
TDMus_IO_Instruments = packed record
dwPatch: DWORD; (* MSB, LSB and Program change to define instrument *)
dwAssignPatch: DWORD; (* MSB, LSB and Program change to assign to instrument when downloading *)
dwNoteRanges: array [0..3] of DWORD;(* 128 bits: one for each MIDI note instrument needs to able to play *)
dwPChannel: DWORD; (* PChannel instrument plays on *)
dwFlags: DWORD; (* DMUS_IO_INST_ flags *)
bPan: BYTE; (* Pan for instrument *)
bVolume: BYTE; (* Volume for instrument *)
nTranspose: SmallInt; (* Number of semitones to transpose notes *)
dwChannelPriority: DWORD; (* Channel priority *)
end;
DMUS_IO_INSTRUMENT = TDMUS_IO_INSTRUMENT;
 
(*
// <DMBD-form> bands can be embedded in other forms
RIFF
(
'DMBD' // DirectMusic Band chunk
[<guid-ck>] // GUID for band
[<vers-ck>] // Optional version info
[<UNFO-list>] // Name, author, copyright info., comments
<lbil-list> // List of Instruments
)
 
// File io for DirectMusic Segment object
// <guid-ck>
'guid'
(
<GUID>
)
 
// <vers-ck>
vers
(
<DMUS_IO_VERSION>
)
 
// <lbil-list>
LIST
(
'lbil' // List of instruments
<lbin-list> // Each instrument is encapsulated in a list
)
 
// <lbin-list>
LIST
(
'lbin'
<bins-ck>
[<DMRF-list>] // Optional reference to DLS Collection file.
)
 
// <bins-ck> // Instrument chunk
(
'bins'
<DMUS_IO_INSTRUMENT> // Instrument header
)
*)
 
(* File io for DirectMusic Segment object *)
 
(* RIFF ids: *)
const
// RIFF ids:
DMUS_FOURCC_SEGMENT_FORM : mmioFOURCC = ('D','M','S','G');
DMUS_FOURCC_SEGMENT_CHUNK : mmioFOURCC = ('s','e','g','h');
DMUS_FOURCC_TRACK_LIST : mmioFOURCC = ('t','r','k','l');
DMUS_FOURCC_TRACK_FORM : mmioFOURCC = ('D','M','T','K');
DMUS_FOURCC_TRACK_CHUNK : mmioFOURCC = ('t','r','k','h');
 
DMUS_FOURCC_SEGMENT_FORM = Ord('D') + Ord('M') shl 8 + Ord('S') shl 16 + Ord('G') shl 24;
DMUS_FOURCC_SEGMENT_CHUNK = Ord('s') + Ord('e') shl 8 + Ord('g') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_TRACK_LIST = Ord('t') + Ord('r') shl 8 + Ord('k') shl 16 + Ord('l') shl 24;
DMUS_FOURCC_TRACK_FORM = Ord('D') + Ord('M') shl 8 + Ord('T') shl 16 + Ord('K') shl 24;
DMUS_FOURCC_TRACK_CHUNK = Ord('t') + Ord('r') shl 8 + Ord('k') shl 16 + Ord('h') shl 24;
 
(* io structures:*)
type
// io structures:
 
TDMUS_IO_SEGMENT_HEADER = record
dwRepeats : DWORD; // Number of repeats. By default, 0.
mtLength : MUSIC_TIME; // Length, in music time.
mtPlayStart : MUSIC_TIME; // Start of playback. By default, 0.
mtLoopStart : MUSIC_TIME; // Start of looping portion. By default, 0.
mtLoopEnd : MUSIC_TIME; // End of loop. Must be greater than dwPlayStart. By default equal to length.
dwResolution : DWORD; // Default resolution.
TDMus_IO_Segment_Header = packed record
dwRepeats: DWORD; (* Number of repeats. By default, 0. *)
mtLength: TMusic_Time; (* Length, in music time. *)
mtPlayStart: TMusic_Time; (* Start of playback. By default, 0. *)
mtLoopStart: TMusic_Time; (* Start of looping portion. By default, 0. *)
mtLoopEnd: TMusic_Time; (* End of loop. Must be greater than dwPlayStart. By default equal to length. *)
dwResolution: DWORD; (* Default resolution. *)
end;
DMUS_IO_SEGMENT_HEADER = TDMUS_IO_SEGMENT_HEADER;
 
TDMUS_IO_TRACK_HEADER = record
guidClassID : TGUID; // Class id of track.
dwPosition : DWORD; // Position in track list.
dwGroup : DWORD; // Group bits for track.
ckid : FOURCC; // chunk ID of track's data chunk if 0 fccType valid.
fccType : FOURCC; // list type if NULL ckid valid
TDMus_IO_Track_Header = packed record
guidClassID: TGUID; (* Class id of track. *)
dwPosition: DWORD; (* Position in track list. *)
dwGroup: DWORD; (* Group bits for track. *)
ckid: TFourCC; (* chunk ID of track's data chunk if 0 fccType valid. *)
fccType: TFourCC; (* list type if NULL ckid valid *)
end;
DMUS_IO_TRACK_HEADER = TDMUS_IO_TRACK_HEADER;
 
// File io for DirectMusic reference chunk.
// This is used to embed a reference to an object.
(*
RIFF
(
'DMSG' // DirectMusic Segment chunk
<segh-ck> // Segment header chunk
[<guid-ck>] // GUID for segment
[<vers-ck>] // Optional version info
[<UNFO-list>] // Name, author, copyright info., comments
<trkl-list> // List of Tracks
[<DMTG-form>] // Optional ToolGraph
)
 
// <segh-ck>
'segh'
(
<DMUS_IO_SEGMENT_HEADER>
)
// <guid-ck>
'guid'
(
<GUID>
)
 
// <vers-ck>
vers
(
<DMUS_IO_VERSION>
)
 
// <trkl-list>
LIST
(
'trkl' // List of tracks
<DMTK-form>... // Each track is encapsulated in a RIFF chunk
)
 
// <DMTK-form> // Tracks can be embedded in a segment or stored as separate files.
RIFF
(
'DMTK'
<trkh-ck>
[<guid-ck>] // Optional GUID for track object instance (not to be confused with Class id in track header)
[<vers-ck>] // Optional version info
[<UNFO-list>] // Optional name, author, copyright info., comments
[<data>] // Track data. Must be a RIFF readable chunk.
)
 
// <trkh-ck> // Track header chunk
(
'trkh'
<DMUS_IO_TRACK_HEADER> // Track header
)
*)
 
(* File io for DirectMusic reference chunk.
This is used to embed a reference to an object.
*)
 
(* RIFF ids: *)
const
// RIFF ids:
DMUS_FOURCC_REF_LIST : mmioFOURCC = ('D','M','R','F');
DMUS_FOURCC_REF_CHUNK : mmioFOURCC = ('r','e','f','h');
DMUS_FOURCC_DATE_CHUNK : mmioFOURCC = ('d','a','t','e');
DMUS_FOURCC_NAME_CHUNK : mmioFOURCC = ('n','a','m','e');
DMUS_FOURCC_FILE_CHUNK : mmioFOURCC = ('f','i','l','e');
 
DMUS_FOURCC_REF_LIST = Ord('D') + Ord('M') shl 8 + Ord('R') shl 16 + Ord('F') shl 24;
DMUS_FOURCC_REF_CHUNK = Ord('r') + Ord('e') shl 8 + Ord('f') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_DATE_CHUNK = Ord('d') + Ord('a') shl 8 + Ord('t') shl 16 + Ord('e') shl 24;
DMUS_FOURCC_NAME_CHUNK = Ord('n') + Ord('a') shl 8 + Ord('m') shl 16 + Ord('e') shl 24;
DMUS_FOURCC_FILE_CHUNK = Ord('f') + Ord('i') shl 8 + Ord('l') shl 16 + Ord('e') shl 24;
 
type
TDMUS_IO_REFERENCE = record
guidClassID : TGUID; // Class id is always required.
dwValidData : DWORD; // Flags.
TDMus_IO_Reference = packed record
guidClassID: TGUID; (* Class id is always required. *)
dwValidData: DWORD; (* Flags. *)
end;
DMUS_IO_REFERENCE = TDMUS_IO_REFERENCE;
 
(*
LIST
(
'DMRF' // DirectMusic Reference chunk
<refh-ck> // Reference header chunk
[<guid-ck>] // Optional object GUID.
[<date-ck>] // Optional file date.
[<name-ck>] // Optional name.
[<file-ck>] // Optional file name.
[<catg-ck>] // Optional category name.
[<vers-ck>] // Optional version info.
)
 
// Chord Maps
// <refh-ck>
'refh'
(
<DMUS_IO_REFERENCE>
)
 
// <guid-ck>
'guid'
(
<GUID>
)
 
// <date-ck>
date
(
<FILETIME>
)
 
// <name-ck>
name
(
// Name, stored as NULL terminated string of WCHARs
)
 
// <file-ck>
file
(
// File name, stored as NULL terminated string of WCHARs
)
 
// <catg-ck>
catg
(
// Category name, stored as NULL terminated string of WCHARs
)
 
// <vers-ck>
vers
(
<DMUS_IO_VERSION>
)
*)
 
(* Chord Maps *)
const
// runtime chunks
DMUS_FOURCC_CHORDMAP_FORM = Ord('D') + Ord('M') shl 8 + Ord('P') shl 16 + Ord('R') shl 24;
DMUS_FOURCC_IOCHORDMAP_CHUNK = Ord('p') + Ord('e') shl 8 + Ord('r') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_SUBCHORD_CHUNK = Ord('c') + Ord('h') shl 8 + Ord('d') shl 16 + Ord('t') shl 24;
DMUS_FOURCC_CHORDENTRY_CHUNK = Ord('c') + Ord('h') shl 8 + Ord('e') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_SUBCHORDID_CHUNK = Ord('s') + Ord('b') shl 8 + Ord('c') shl 16 + Ord('n') shl 24;
DMUS_FOURCC_IONEXTCHORD_CHUNK = Ord('n') + Ord('c') shl 8 + Ord('r') shl 16 + Ord('d') shl 24;
DMUS_FOURCC_NEXTCHORDSEQ_CHUNK = Ord('n') + Ord('c') shl 8 + Ord('s') shl 16 + Ord('q') shl 24;
DMUS_FOURCC_IOSIGNPOST_CHUNK = Ord('s') + Ord('p') shl 8 + Ord('s') shl 16 + Ord('h') shl 24;
DMUS_FOURCC_CHORDNAME_CHUNK = Ord('I') + Ord('N') shl 8 + Ord('A') shl 16 + Ord('M') shl 24;
(* runtime chunks *)
DMUS_FOURCC_CHORDMAP_FORM : mmioFOURCC = ('D','M','P','R');
DMUS_FOURCC_IOCHORDMAP_CHUNK : mmioFOURCC = ('p','e','r','h');
DMUS_FOURCC_SUBCHORD_CHUNK : mmioFOURCC = ('c','h','d','t');
DMUS_FOURCC_CHORDENTRY_CHUNK : mmioFOURCC = ('c','h','e','h');
DMUS_FOURCC_SUBCHORDID_CHUNK : mmioFOURCC = ('s','b','c','n');
DMUS_FOURCC_IONEXTCHORD_CHUNK : mmioFOURCC = ('n','c','r','d');
DMUS_FOURCC_NEXTCHORDSEQ_CHUNK : mmioFOURCC = ('n','c','s','q');
DMUS_FOURCC_IOSIGNPOST_CHUNK : mmioFOURCC = ('s','p','s','h');
DMUS_FOURCC_CHORDNAME_CHUNK : mmioFOURCC = ('I','N','A','M');
 
// runtime list chunks
DMUS_FOURCC_CHORDENTRY_LIST = Ord('c') + Ord('h') shl 8 + Ord('o') shl 16 + Ord('e') shl 24;
DMUS_FOURCC_CHORDMAP_LIST = Ord('c') + Ord('m') shl 8 + Ord('a') shl 16 + Ord('p') shl 24;
DMUS_FOURCC_CHORD_LIST = Ord('c') + Ord('h') shl 8 + Ord('r') shl 16 + Ord('d') shl 24;
DMUS_FOURCC_CHORDPALETTE_LIST = Ord('c') + Ord('h') shl 8 + Ord('p') shl 16 + Ord('l') shl 24;
DMUS_FOURCC_CADENCE_LIST = Ord('c') + Ord('a') shl 8 + Ord('d') shl 16 + Ord('e') shl 24;
DMUS_FOURCC_SIGNPOSTITEM_LIST = Ord('s') + Ord('p') shl 8 + Ord('s') shl 16 + Ord('t') shl 24;
(* runtime list chunks *)
DMUS_FOURCC_CHORDENTRY_LIST : mmioFOURCC = ('c','h','o','e');
DMUS_FOURCC_CHORDMAP_LIST : mmioFOURCC = ('c','m','a','p');
DMUS_FOURCC_CHORD_LIST : mmioFOURCC = ('c','h','r','d');
DMUS_FOURCC_CHORDPALETTE_LIST : mmioFOURCC = ('c','h','p','l');
DMUS_FOURCC_CADENCE_LIST : mmioFOURCC = ('c','a','d','e');
DMUS_FOURCC_SIGNPOSTITEM_LIST : mmioFOURCC = ('s','p','s','t');
 
DMUS_FOURCC_SIGNPOST_LIST = Ord('s') + Ord('p') shl 8 + Ord('s') shl 16 + Ord('q') shl 24;
DMUS_FOURCC_SIGNPOST_LIST : mmioFOURCC = ('s','p','s','q');
 
// values for dwChord field of DMUS_IO_PERS_SIGNPOST
// DMUS_SIGNPOSTF_ flags are also used in templates (DMUS_IO_SIGNPOST)
(* values for dwChord field of DMUS_IO_PERS_SIGNPOST *)
(* DMUS_SIGNPOSTF_ flags are also used in templates (DMUS_IO_SIGNPOST) *)
DMUS_SIGNPOSTF_A = 1;
DMUS_SIGNPOSTF_B = 2;
DMUS_SIGNPOSTF_C = 4;
15374,271 → 21495,663
DMUS_SIGNPOSTF_ROOT = (DMUS_SIGNPOSTF_1 or DMUS_SIGNPOSTF_2 or DMUS_SIGNPOSTF_3 or DMUS_SIGNPOSTF_4 or DMUS_SIGNPOSTF_5 or DMUS_SIGNPOSTF_6 or DMUS_SIGNPOSTF_7);
DMUS_SIGNPOSTF_CADENCE = $8000;
 
// values for dwChord field of DMUS_IO_PERS_SIGNPOST
DMUS_SPOSTCADENCEF_1 = 2; // Use the first cadence chord.
DMUS_SPOSTCADENCEF_2 = 4; // Use the second cadence chord.
(* values for dwChord field of DMUS_IO_PERS_SIGNPOST *)
DMUS_SPOSTCADENCEF_1 = 2; (* Use the first cadence chord. *)
DMUS_SPOSTCADENCEF_2 = 4; (* Use the second cadence chord. *)
 
type
// run time data structs
TDMUS_IO_CHORDMAP = record
(* run time data structs *)
TDMus_IO_ChordMap = packed record
wszLoadName : array[0..19] of WCHAR;
dwScalePattern : DWORD;
dwFlags : DWORD;
end;
DMUS_IO_CHORDMAP = TDMUS_IO_CHORDMAP;
 
TDMUS_IO_CHORDMAP_SUBCHORD = record
TDMus_IO_ChordMap_SubChord = packed record
dwChordPattern : DWORD;
dwScalePattern : DWORD;
dwInvertPattern: DWORD;
bChordRoot : Byte;
bScaleRoot : Byte;
wCFlags : Word;
dwLevels : DWORD; // parts or which subchord levels this chord supports
bChordRoot: BYTE;
bScaleRoot: BYTE;
wCFlags: WORD;
dwLevels: DWORD; (* parts or which subchord levels this chord supports *)
end;
DMUS_IO_CHORDMAP_SUBCHORD = TDMUS_IO_CHORDMAP_SUBCHORD;
 
// Legacy name...
DMUS_IO_PERS_SUBCHORD = TDMUS_IO_CHORDMAP_SUBCHORD;
(* Legacy name... *)
TDMus_IO_Pers_SubChord = TDMus_IO_ChordMap_SubChord;
 
TDMUS_IO_CHORDENTRY = record
TDMus_IO_ChordEntry = packed record
dwFlags : DWORD;
wConnectionID : Word; // replaces runtime "pointer to this"
wConnectionID: WORD; (* replaces runtime "pointer to this" *)
end;
DMUS_IO_CHORDENTRY = TDMUS_IO_CHORDENTRY;
 
TDMUS_IO_NEXTCHORD = record
TDMus_IO_NextChord = packed record
dwFlags : DWORD;
nWeight : Word;
wMinBeats : Word;
wMaxBeats : Word;
wConnectionID : Word; // points to an ioChordEntry
nWeight: WORD;
wMinBeats: WORD;
wMaxBeats: WORD;
wConnectionID: WORD; (* points to an ioChordEntry *)
end;
DMUS_IO_NEXTCHORD = TDMUS_IO_NEXTCHORD;
 
TDMUS_IO_CHORDMAP_SIGNPOST = record
dwChords : DWORD; // 1bit per group
TDMus_IO_ChordMap_SignPost = packed record
dwChords: DWORD; (* 1bit per group *)
dwFlags : DWORD;
end;
DMUS_IO_CHORDMAP_SIGNPOST = TDMUS_IO_CHORDMAP_SIGNPOST;
 
// Legacy name...
DMUS_IO_PERS_SIGNPOST = TDMUS_IO_CHORDMAP_SIGNPOST;
(* Legacy name... *)
TDMus_IO_Pers_SignPost = TDMus_IO_ChordMap_SignPost;
 
(*
RIFF
(
'DMPR'
<perh-ck> // Chord map header chunk
[<guid-ck>] // guid chunk
[<vers-ck>] // version chunk (two DWORDS)
[<UNFO-list>] // Unfo chunk
<chdt-ck> // subchord database
<chpl-list> // chord palette
<cmap-list> // chord map
<spsq-list> // signpost list
)
 
<cmap-list> ::= LIST('cmap' <choe-list> )
 
<choe-list> ::= LIST('choe'
<cheh-ck> // chord entry data
<chrd-list> // chord definition
<ncsq-ck> // connecting(next) chords
)
 
<chrd-list> ::= LIST('chrd'
<INAM-ck> // name of chord in wide char format
<sbcn-ck> // list of subchords composing chord
)
 
<chpl-list> ::= LIST('chpl'
<chrd-list> ... // chord definition
)
 
<spsq-list> ::== LIST('spsq' <spst-list> ... )
 
<spst-list> ::= LIST('spst'
<spsh-ck>
<chrd-list>
[<cade-list>]
)
 
<cade-list> ::= LIST('cade' <chrd-list> ...)
 
<perh-ck> ::= perh(<DMUS_IO_CHORDMAP>)
 
<chdt-ck> ::= chdt(<cbChordSize::WORD>
<DMUS_IO_PERS_SUBCHORD> ... )
 
<cheh-ck> ::= cheh(<DMUS_IO_CHORDENTRY>)
 
<sbcn-ck> ::= sbcn(<cSubChordID:WORD> ...)
 
<ncsq-ck> ::= ncsq(<wNextChordSize:WORD>
<DMUS_IO_NEXTCHORD>...)
 
<spsh-ck> ::= spsh(<DMUS_IO_PERS_SIGNPOST>)
 
*)
 
(* Signpost tracks *)
const
// Signpost tracks
DMUS_FOURCC_SIGNPOST_TRACK_CHUNK = Ord('s') + Ord('g') shl 8 + Ord('n') shl 16 + Ord('p') shl 24;
DMUS_FOURCC_SIGNPOST_TRACK_CHUNK : mmioFOURCC = ( 's', 'g', 'n', 'p' );
 
type
TDMUS_IO_SIGNPOST = record
mtTime : MUSIC_TIME;
TDMus_IO_SignPost = packed record
mtTime: TMusic_Time;
dwChords : DWORD;
wMeasure : Word;
wMeasure: WORD;
end;
DMUS_IO_SIGNPOST = TDMUS_IO_SIGNPOST;
 
(*
 
// <sgnp-list>
'sgnp'
(
//sizeof DMUS_IO_SIGNPOST: DWORD
<DMUS_IO_SIGNPOST>...
)
 
*)
 
const
DMUS_FOURCC_MUTE_CHUNK = Ord('m') + Ord('u') shl 8 + Ord('t') shl 16 + Ord('e') shl 24;
DMUS_FOURCC_MUTE_CHUNK : mmioFOURCC = ('m','u','t','e');
 
type
TDMUS_IO_MUTE = record
mtTime : MUSIC_TIME;
TDMus_IO_Mute = packed record
mtTime: TMusic_Time;
dwPChannel : DWORD;
dwPChannelMap : DWORD;
end;
DMUS_IO_MUTE = TDMUS_IO_MUTE;
 
// Used for both style and chord map tracks
const
DMUS_FOURCC_TIME_STAMP_CHUNK = Ord('s') + Ord('t') shl 8 + Ord('m') shl 16 + Ord('p') shl 24;
(*
 
// Style tracks
DMUS_FOURCC_STYLE_TRACK_LIST = Ord('s') + Ord('t') shl 8 + Ord('t') shl 16 + Ord('r') shl 24;
DMUS_FOURCC_STYLE_REF_LIST = Ord('s') + Ord('t') shl 8 + Ord('r') shl 16 + Ord('f') shl 24;
// <mute-list>
'mute'
(
//sizeof DMUS_IO_MUTE:DWORD
<DMUS_IO_MUTE>...
)
 
// Chord map tracks
DMUS_FOURCC_PERS_TRACK_LIST = Ord('p') + Ord('f') shl 8 + Ord('t') shl 16 + Ord('r') shl 24;
DMUS_FOURCC_PERS_REF_LIST = Ord('p') + Ord('f') shl 8 + Ord('r') shl 16 + Ord('f') shl 24;
DMUS_FOURCC_TEMPO_TRACK = Ord('t') + Ord('e') shl 8 + Ord('t') shl 16 + Ord('r') shl 24;
DMUS_FOURCC_SEQ_TRACK = Ord('s') + Ord('e') shl 8 + Ord('q') shl 16 + Ord('t') shl 24;
DMUS_FOURCC_SEQ_LIST = Ord('e') + Ord('v') shl 8 + Ord('t') shl 16 + Ord('l') shl 24;
DMUS_FOURCC_CURVE_LIST = Ord('c') + Ord('u') shl 8 + Ord('r') shl 16 + Ord('l') shl 24;
DMUS_FOURCC_SYSEX_TRACK = Ord('s') + Ord('y') shl 8 + Ord('e') shl 16 + Ord('x') shl 24;
DMUS_FOURCC_TIMESIGNATURE_TRACK = Ord('t') + Ord('i') shl 8 + Ord('m') shl 16 + Ord('s') shl 24;
 
implementation
*)
 
const
DDrawLib = 'DDraw.dll';
D3DRMLib = 'D3DRM.dll';
D3DXofLib = 'd3dxof.dll';
DInputLib = 'DInput.dll';
DPlayXLib = 'DPlayX.dll';
DSetupLib = 'DSetup.dll';
DSoundLib = 'DSound.dll';
(* Used for both style and chord map tracks *)
 
DMUS_FOURCC_TIME_STAMP_CHUNK : mmioFOURCC = ('s', 't', 'm', 'p');
 
{ DirectDraw }
(* Style tracks *)
 
DMUS_FOURCC_STYLE_TRACK_LIST : mmioFOURCC = ('s', 't', 't', 'r');
DMUS_FOURCC_STYLE_REF_LIST : mmioFOURCC = ('s', 't', 'r', 'f');
 
(*
 
// <sttr-list>
LIST('sttr'
(
// some number of <strf-list>
)
 
// <strf-list>
LIST('strf'
(
<stmp-ck>
<DMRF>
)
 
// <stmp-ck> defined in ..\dmcompos\dmcompp.h
 
*)
 
(* Chord map tracks *)
 
DMUS_FOURCC_PERS_TRACK_LIST : mmioFOURCC = ('p', 'f', 't', 'r');
DMUS_FOURCC_PERS_REF_LIST : mmioFOURCC = ('p', 'f', 'r', 'f');
 
(*
 
// <pftr-list>
LIST('pftr'
(
// some number of <pfrf-list>
)
 
// <pfrf-list>
LIST('pfrf'
(
<stmp-ck>
<DMRF>
)
 
// <stmp-ck>
'stmp'
(
// time:DWORD
)
 
 
 
*)
 
DMUS_FOURCC_TEMPO_TRACK : mmioFOURCC = ('t','e','t','r');
 
(*
// tempo list
'tetr'
(
// sizeof DMUS_IO_TEMPO_ITEM: DWORD
<DMUS_IO_TEMPO_ITEM>...
)
*)
 
DMUS_FOURCC_SEQ_TRACK : mmioFOURCC = ('s','e','q','t');
DMUS_FOURCC_SEQ_LIST : mmioFOURCC = ('e','v','t','l');
DMUS_FOURCC_CURVE_LIST : mmioFOURCC = ('c','u','r','l');
 
(*
// sequence track
'seqt'
(
// sequence list
'evtl'
(
// sizeof DMUS_IO_SEQ_ITEM: DWORD
<DMUS_IO_SEQ_ITEM>...
)
// curve list
'curl'
(
// sizeof DMUS_IO_CURVE_ITEM: DWORD
<DMUS_IO_CURVE_ITEM>...
)
)
*)
 
DMUS_FOURCC_SYSEX_TRACK : mmioFOURCC = ('s','y','e','x');
 
(*
// sysex track
'syex'
(
// list of:
// {
// <DMUS_IO_SYSEX_ITEM>
// sys-ex: data
// }...
)
*)
 
DMUS_FOURCC_TIMESIGNATURE_TRACK : mmioFOURCC = ('t','i','m','s');
 
(*
// time signature track
'tims'
(
// size of DMUS_IO_TIMESIGNATURE_ITEM : DWORD
<DMUS_IO_TIMESIGNATURE_ITEM>...
)
*)
 
(***************************************************************************
* *
* DMusBuff.h -- This module defines the buffer format for DirectMusic *
* Shared file between user mode and kernel mode components *
* *
* Copyright (c) 1998, Microsoft Corp. All rights reserved. *
* *
***************************************************************************)
 
(* The number of bytes to allocate for an event with 'cb' data bytes.
*)
function QWORD_ALIGN(x: DWORD) : DWORD;
 
function DMUS_EVENT_SIZE(cb: DWORD) : DWORD;
 
 
 
Implementation
 
//DirectDraw file
 
 
{
#define GET_WHQL_YEAR( dwWHQLLevel ) \
( (dwWHQLLevel) / 0x10000 )
#define GET_WHQL_MONTH( dwWHQLLevel ) \
( ( (dwWHQLLevel) / 0x100 ) & 0x00ff )
#define GET_WHQL_DAY( dwWHQLLevel ) \
( (dwWHQLLevel) & 0xff )
}
function GET_WHQL_YEAR(dwWHQLLevel: DWORD): DWORD;
begin
Result := dwWHQLLevel div $10000;
Result := (dwWHQLLevel) div $10000;
end;
 
function GET_WHQL_MONTH(dwWHQLLevel: DWORD): DWORD;
begin
Result := (dwWHQLLevel div $100) and $FF;
Result := ( (dwWHQLLevel) div $100 ) and $00ff;
end;
 
function GET_WHQL_DAY(dwWHQLLevel: DWORD): DWORD;
begin
Result := dwWHQLLevel and $FF;
Result := (dwWHQLLevel) and $ff;
end;
 
function DirectDrawEnumerateA; external DDrawLib;
function DirectDrawEnumerateW; external DDrawLib;
function DirectDrawEnumerate; external DDrawLib name 'DirectDrawEnumerateA';
 
function DirectDrawEnumerateExA; external DDrawLib;
function DirectDrawEnumerateExW; external DDrawLib;
function DirectDrawEnumerateEx; external DDrawLib name 'DirectDrawEnumerateExA';
function MAKEFOURCC(ch0, ch1, ch2, ch3: Char) : DWORD;
begin
Result := DWORD(byte(ch0) shl 0) or
DWORD(byte(ch1) shl 8) or
DWORD(byte(ch2) shl 16) or
DWORD(byte(ch3) shl 24);
end;
 
function DirectDrawCreate; external DDrawLib;
function DirectDrawCreateEx; external DDrawLib;
function DirectDrawCreateClipper; external DDrawLib;
function DDErrorString(Value: HResult) : string;
begin
case Value of
DD_OK: Result := 'The request completed successfully.';
DDERR_ALREADYINITIALIZED: Result := 'This object is already initialized.';
DDERR_BLTFASTCANTCLIP: Result := ' if a clipper object is attached to the source surface passed into a BltFast call.';
DDERR_CANNOTATTACHSURFACE: Result := 'This surface can not be attached to the requested surface.';
DDERR_CANNOTDETACHSURFACE: Result := 'This surface can not be detached from the requested surface.';
DDERR_CANTCREATEDC: Result := 'Windows can not create any more DCs.';
DDERR_CANTDUPLICATE: Result := 'Cannot duplicate primary & 3D surfaces, or surfaces that are implicitly created.';
DDERR_CLIPPERISUSINGHWND: Result := 'An attempt was made to set a cliplist for a clipper object that is already monitoring an hwnd.';
DDERR_COLORKEYNOTSET: Result := 'No src color key specified for this operation.';
DDERR_CURRENTLYNOTAVAIL: Result := 'Support is currently not available.';
DDERR_DIRECTDRAWALREADYCREATED: Result := 'A DirectDraw object representing this driver has already been created for this process.';
DDERR_EXCEPTION: Result := 'An exception was encountered while performing the requested operation.';
DDERR_EXCLUSIVEMODEALREADYSET: Result := 'An attempt was made to set the cooperative level when it was already set to exclusive.';
DDERR_GENERIC: Result := 'Generic failure.';
DDERR_HEIGHTALIGN: Result := 'Height of rectangle provided is not a multiple of reqd alignment.';
DDERR_HWNDALREADYSET: Result := 'The CooperativeLevel HWND has already been set. It can not be reset while the process has surfaces or palettes created.';
DDERR_HWNDSUBCLASSED: Result := 'HWND used by DirectDraw CooperativeLevel has been subclassed, this prevents DirectDraw from restoring state.';
DDERR_IMPLICITLYCREATED: Result := 'This surface can not be restored because it is an implicitly created surface.';
DDERR_INCOMPATIBLEPRIMARY: Result := 'Unable to match primary surface creation request with existing primary surface.';
DDERR_INVALIDCAPS: Result := 'One or more of the caps bits passed to the callback are incorrect.';
DDERR_INVALIDCLIPLIST: Result := 'DirectDraw does not support the provided cliplist.';
DDERR_INVALIDDIRECTDRAWGUID: Result := 'The GUID passed to DirectDrawCreate is not a valid DirectDraw driver identifier.';
DDERR_INVALIDMODE: Result := 'DirectDraw does not support the requested mode.';
DDERR_INVALIDOBJECT: Result := 'DirectDraw received a pointer that was an invalid DIRECTDRAW object.';
DDERR_INVALIDPARAMS: Result := 'One or more of the parameters passed to the function are incorrect.';
DDERR_INVALIDPIXELFORMAT: Result := 'The pixel format was invalid as specified.';
DDERR_INVALIDPOSITION: Result := 'Returned when the position of the overlay on the destination is no longer legal for that destination.';
DDERR_INVALIDRECT: Result := 'Rectangle provided was invalid.';
DDERR_LOCKEDSURFACES: Result := 'Operation could not be carried out because one or more surfaces are locked.';
DDERR_NO3D: Result := 'There is no 3D present.';
DDERR_NOALPHAHW: Result := 'Operation could not be carried out because there is no alpha accleration hardware present or available.';
DDERR_NOBLTHW: Result := 'No blitter hardware present.';
DDERR_NOCLIPLIST: Result := 'No cliplist available.';
DDERR_NOCLIPPERATTACHED: Result := 'No clipper object attached to surface object.';
DDERR_NOCOLORCONVHW: Result := 'Operation could not be carried out because there is no color conversion hardware present or available.';
DDERR_NOCOLORKEY: Result := 'Surface does not currently have a color key';
DDERR_NOCOLORKEYHW: Result := 'Operation could not be carried out because there is no hardware support of the destination color key.';
DDERR_NOCOOPERATIVELEVELSET: Result := 'Create function called without DirectDraw object method SetCooperativeLevel being called.';
DDERR_NODC: Result := 'No DC was ever created for this surface.';
DDERR_NODDROPSHW: Result := 'No DirectDraw ROP hardware.';
DDERR_NODIRECTDRAWHW: Result := 'A hardware-only DirectDraw object creation was attempted but the driver did not support any hardware.';
DDERR_NOEMULATION: Result := 'Software emulation not available.';
DDERR_NOEXCLUSIVEMODE: Result := 'Operation requires the application to have exclusive mode but the application does not have exclusive mode.';
DDERR_NOFLIPHW: Result := 'Flipping visible surfaces is not supported.';
DDERR_NOGDI: Result := 'There is no GDI present.';
DDERR_NOHWND: Result := 'Clipper notification requires an HWND or no HWND has previously been set as the CooperativeLevel HWND.';
DDERR_NOMIRRORHW: Result := 'Operation could not be carried out because there is no hardware present or available.';
DDERR_NOOVERLAYDEST: Result := 'Returned when GetOverlayPosition is called on an overlay that UpdateOverlay has never been called on to establish a destination.';
DDERR_NOOVERLAYHW: Result := 'Operation could not be carried out because there is no overlay hardware present or available.';
DDERR_NOPALETTEATTACHED: Result := 'No palette object attached to this surface.';
DDERR_NOPALETTEHW: Result := 'No hardware support for 16 or 256 color palettes.';
DDERR_NORASTEROPHW: Result := 'Operation could not be carried out because there is no appropriate raster op hardware present or available.';
DDERR_NOROTATIONHW: Result := 'Operation could not be carried out because there is no rotation hardware present or available.';
DDERR_NOSTRETCHHW: Result := 'Operation could not be carried out because there is no hardware support for stretching.';
DDERR_NOT4BITCOLOR: Result := 'DirectDrawSurface is not in 4 bit color palette and the requested operation requires 4 bit color palette.';
DDERR_NOT4BITCOLORINDEX: Result := 'DirectDrawSurface is not in 4 bit color index palette and the requested operation requires 4 bit color index palette.';
DDERR_NOT8BITCOLOR: Result := 'DirectDrawSurface is not in 8 bit color mode and the requested operation requires 8 bit color.';
DDERR_NOTAOVERLAYSURFACE: Result := 'Returned when an overlay member is called for a non-overlay surface.';
DDERR_NOTEXTUREHW: Result := 'Operation could not be carried out because there is no texture mapping hardware present or available.';
DDERR_NOTFLIPPABLE: Result := 'An attempt has been made to flip a surface that is not flippable.';
DDERR_NOTFOUND: Result := 'Requested item was not found.';
DDERR_NOTLOCKED: Result := 'Surface was not locked. An attempt to unlock a surface that was not locked at all, or by this process, has been attempted.';
DDERR_NOTPALETTIZED: Result := 'The surface being used is not a palette-based surface.';
DDERR_NOVSYNCHW: Result := 'Operation could not be carried out because there is no hardware support for vertical blank synchronized operations.';
DDERR_NOZBUFFERHW: Result := 'Operation could not be carried out because there is no hardware support for zbuffer blitting.';
DDERR_NOZOVERLAYHW: Result := 'Overlay surfaces could not be z layered based on their BltOrder because the hardware does not support z layering of overlays.';
DDERR_OUTOFCAPS: Result := 'The hardware needed for the requested operation has already been allocated.';
DDERR_OUTOFMEMORY: Result := 'DirectDraw does not have enough memory to perform the operation.';
DDERR_OUTOFVIDEOMEMORY: Result := 'DirectDraw does not have enough memory to perform the operation.';
DDERR_OVERLAYCANTCLIP: Result := 'The hardware does not support clipped overlays.';
DDERR_OVERLAYCOLORKEYONLYONEACTIVE: Result := 'Can only have ony color key active at one time for overlays.';
DDERR_OVERLAYNOTVISIBLE: Result := 'Returned when GetOverlayPosition is called on a hidden overlay.';
DDERR_PALETTEBUSY: Result := 'Access to this palette is being refused because the palette is already locked by another thread.';
DDERR_PRIMARYSURFACEALREADYEXISTS: Result := 'This process already has created a primary surface.';
DDERR_REGIONTOOSMALL: Result := 'Region passed to Clipper::GetClipList is too small.';
DDERR_SURFACEALREADYATTACHED: Result := 'This surface is already attached to the surface it is being attached to.';
DDERR_SURFACEALREADYDEPENDENT: Result := 'This surface is already a dependency of the surface it is being made a dependency of.';
DDERR_SURFACEBUSY: Result := 'Access to this surface is being refused because the surface is already locked by another thread.';
DDERR_SURFACEISOBSCURED: Result := 'Access to surface refused because the surface is obscured.';
DDERR_SURFACELOST: Result := 'Access to this surface is being refused because the surface memory is gone. The DirectDrawSurface object representing this surface should have Restore called on it.';
DDERR_SURFACENOTATTACHED: Result := 'The requested surface is not attached.';
DDERR_TOOBIGHEIGHT: Result := 'Height requested by DirectDraw is too large.';
DDERR_TOOBIGSIZE: Result := 'Size requested by DirectDraw is too large, but the individual height and width are OK.';
DDERR_TOOBIGWIDTH: Result := 'Width requested by DirectDraw is too large.';
DDERR_UNSUPPORTED: Result := 'Action not supported.';
DDERR_UNSUPPORTEDFORMAT: Result := 'FOURCC format requested is unsupported by DirectDraw.';
DDERR_UNSUPPORTEDMASK: Result := 'Bitmask in the pixel format requested is unsupported by DirectDraw.';
DDERR_VERTICALBLANKINPROGRESS: Result := 'Vertical blank is in progress.';
DDERR_WASSTILLDRAWING: Result := 'Informs DirectDraw that the previous Blt which is transfering information to or from this Surface is incomplete.';
DDERR_WRONGMODE: Result := 'This surface can not be restored because it was created in a different mode.';
DDERR_XALIGN: Result := 'Rectangle provided was not horizontally aligned on required boundary.';
// new:
DDERR_OVERLAPPINGRECTS: Result := 'Operation could not be carried out because the source and destination rectangles are on the same surface and overlap each other.';
DDERR_INVALIDSTREAM: Result := 'The specified stream contains invalid data';
DDERR_UNSUPPORTEDMODE: Result := 'The display is currently in an unsupported mode';
DDERR_NOMIPMAPHW: Result := 'Operation could not be carried out because there is no mip-map texture mapping hardware present or available.';
DDERR_INVALIDSURFACETYPE: Result := 'The requested action could not be performed because the surface was of the wrong type.';
DDERR_NOOPTIMIZEHW: Result := 'Device does not support optimized surfaces, therefore no video memory optimized surfaces';
DDERR_NOTLOADED: Result := 'Surface is an optimized surface, but has not yet been allocated any memory';
DDERR_NOFOCUSWINDOW: Result := 'Attempt was made to create or set a device window without first setting the focus window';
DDERR_DCALREADYCREATED: Result := 'A DC has already been returned for this surface. Only one DC can be retrieved per surface.';
DDERR_NONONLOCALVIDMEM: Result := 'An attempt was made to allocate non-local video memory from a device that does not support non-local video memory.';
DDERR_CANTPAGELOCK: Result := 'The attempt to page lock a surface failed.';
DDERR_CANTPAGEUNLOCK: Result := 'The attempt to page unlock a surface failed.';
DDERR_NOTPAGELOCKED: Result := 'An attempt was made to page unlock a surface with no outstanding page locks.';
DDERR_MOREDATA: Result := 'There is more data available than the specified buffer size could hold';
DDERR_EXPIRED: Result := 'The data has expired and is therefore no longer valid.';
DDERR_VIDEONOTACTIVE: Result := 'The video port is not active';
DDERR_DEVICEDOESNTOWNSURFACE: Result := 'Surfaces created by one direct draw device cannot be used directly by another direct draw device.';
DDERR_NOTINITIALIZED: Result := 'An attempt was made to invoke an interface member of a DirectDraw object created by CoCreateInstance() before it was initialized.';
else Result := 'Unrecognized Error';
end;
end;
 
{ Direct3D }
//Direct3D file
 
function D3DVALP(val: TD3DValue; prec: Integer): TD3DValue;
function DXFileErrorString(Value: HResult) : string;
begin
Result := val;
case Value of
DXFILE_OK: Result := 'Command completed successfully. Equivalent to DD_OK.';
DXFILEERR_BADVALUE: Result := 'Parameter is invalid.';
DXFILEERR_BADTYPE: Result := 'Object type is invalid.';
DXFILEERR_BADALLOC: Result := 'Memory allocation failed.';
DXFILEERR_NOTFOUND: Result := 'Object could not be found.';
DXFILEERR_FILENOTFOUND: Result := 'File could not be found.';
DXFILEERR_RESOURCENOTFOUND: Result := 'Resource could not be found.';
DXFILEERR_URLNOTFOUND: Result := 'URL could not be found.';
DXFILEERR_BADRESOURCE: Result := 'Resource is invalid.';
DXFILEERR_BADFILETYPE: Result := 'File is not a DirectX file.';
DXFILEERR_BADFILEVERSION: Result := 'File version is not valid.';
DXFILEERR_BADFILEFLOATSIZE: Result := 'Floating-point size is invalid.';
DXFILEERR_BADFILE: Result := 'File is invalid.';
DXFILEERR_PARSEERROR: Result := 'File could not be parsed.';
DXFILEERR_BADARRAYSIZE: Result := 'Array size is invalid.';
DXFILEERR_BADDATAREFERENCE: Result := 'Data reference is invalid.';
DXFILEERR_NOMOREOBJECTS: Result := 'All objects have been enumerated.';
DXFILEERR_NOMOREDATA: Result := 'No further data is available.';
else Result := 'Unrecognized Error';
end;
end;
 
function D3DVAL(val: TD3DValue): TD3DValue;
function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWORD) : DWORD;
begin
Result := (D3DFVF_TEXTUREFORMAT3 shl (CoordIndex*2 + 16));
end;
 
function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWORD) : DWORD;
begin
Result := (D3DFVF_TEXTUREFORMAT2);
end;
 
function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWORD) : DWORD;
begin
Result := (D3DFVF_TEXTUREFORMAT4 shl (CoordIndex*2 + 16));
end;
 
function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWORD) : DWORD;
begin
Result := (D3DFVF_TEXTUREFORMAT1 shl (CoordIndex*2 + 16));
end;
 
 
function D3DVal(val: variant) : float;
begin
Result := val;
end;
 
function D3DDivide(a, b: TD3DValue): TD3DValue;
function D3DDivide(a,b: double) : float;
begin
Result := a / b;
end;
 
function D3DMultiply(a, b: TD3DValue): TD3DValue;
function D3DMultiply(a,b: double) : float;
begin
Result := a * b;
end;
 
function CI_GETALPHA(ci: Integer): Byte;
// #define CI_GETALPHA(ci) ((ci) >> 24)
function CI_GETALPHA(ci: DWORD) : DWORD;
begin
Result := ci shr 24;
end;
 
function CI_GETINDEX(ci: Integer): Word;
// #define CI_GETINDEX(ci) (((ci) >> 8) & 0xffff)
function CI_GETINDEX(ci: DWORD) : DWORD;
begin
Result := ci shr 8;
Result := (ci shr 8) and $ffff;
end;
 
function CI_GETFRACTION(ci: Integer): Byte;
// #define CI_GETFRACTION(ci) ((ci) & 0xff)
function CI_GETFRACTION(ci: DWORD) : DWORD;
begin
Result := ci;
Result := ci and $ff;
end;
 
function CI_ROUNDINDEX(ci: Integer): Integer;
// #define CI_ROUNDINDEX(ci) CI_GETINDEX((ci) + 0x80)
function CI_ROUNDINDEX(ci: DWORD) : DWORD;
begin
Result := CI_GETINDEX(ci)+$80;
Result := CI_GETINDEX(ci + $80);
end;
 
function CI_MASKALPHA(ci: Integer): Integer;
// #define CI_MASKALPHA(ci) ((ci) & 0xffffff)
function CI_MASKALPHA(ci: DWORD) : DWORD;
begin
Result := ci and $FFFFFF;
Result := ci and $ffffff;
end;
 
function CI_MAKE(a: Byte; i: Word; f: Byte): Integer;
// #define CI_MAKE(a, i, f) (((a) << 24) | ((i) << 8) | (f))
function CI_MAKE(a,i,f: DWORD) : DWORD;
begin
Result := (a shl 24) or (i shl 8) or f;
end;
 
function RGBA_GETALPHA(rgb: TD3DColor): Byte;
// #define RGBA_GETALPHA(rgb) ((rgb) >> 24)
function RGBA_GETALPHA(rgb: TD3DColor) : DWORD;
begin
Result := rgb shr 24;
end;
 
function RGBA_GETRED(rgb: TD3DColor): Byte;
// #define RGBA_GETRED(rgb) (((rgb) >> 16) & 0xff)
function RGBA_GETRED(rgb: TD3DColor) : DWORD;
begin
Result := rgb shr 16;
Result := (rgb shr 16) and $ff;
end;
 
function RGBA_GETGREEN(rgb: TD3DColor): Byte;
// #define RGBA_GETGREEN(rgb) (((rgb) >> 8) & 0xff)
function RGBA_GETGREEN(rgb: TD3DColor) : DWORD;
begin
Result := rgb shr 8;
Result := (rgb shr 8) and $ff;
end;
 
function RGBA_GETBLUE(rgb: TD3DColor): Byte;
// #define RGBA_GETBLUE(rgb) ((rgb) & 0xff)
function RGBA_GETBLUE(rgb: TD3DColor) : DWORD;
begin
Result := rgb;
Result := rgb and $ff;
end;
 
function RGBA_MAKE(r, g, b, a: Byte): TD3DColor;
// #define RGBA_MAKE(r, g, b, a) ((TD3DColor) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
function RGBA_MAKE(r, g, b, a: DWORD) : TD3DColor;
begin
Result := (a shl 24) or (r shl 16) or (g shl 8) or b;
end;
 
function D3DRGB(r, g, b: TD3DValue): TD3DColor;
// #define D3DRGB(r, g, b) \
// (0xff000000L | (((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255))
function D3DRGB(r, g, b: float) : TD3DColor;
begin
Result := $FF000000 or (Trunc(r*255) shl 16) or (Trunc(g*255) shl 8) or
(Trunc(b*255));
Result := $ff000000 or (round(r * 255) shl 16)
or (round(g * 255) shl 8)
or round(b * 255);
end;
 
function D3DRGBA(r, g, b, a: TD3DValue): TD3DColor;
// #define D3DRGBA(r, g, b, a) \
// ( (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) \
// | (((long)((g) * 255)) << 8) | (long)((b) * 255) \
// )
function D3DRGBA(r, g, b, a: float) : TD3DColor;
begin
Result := (Trunc(a*255) shl 24) or (Trunc(r*255) shl 16) or (Trunc(g*255) shl 8) or
(Trunc(b*255));
Result := (round(a * 255) shl 24) or (round(r * 255) shl 16)
or (round(g * 255) shl 8)
or round(b * 255);
end;
 
function RGB_GETRED(rgb: TD3DColor): Byte;
// #define RGB_GETRED(rgb) (((rgb) >> 16) & 0xff)
function RGB_GETRED(rgb: TD3DColor) : DWORD;
begin
Result := rgb shr 16;
Result := (rgb shr 16) and $ff;
end;
 
function RGB_GETGREEN(rgb: TD3DColor): Byte;
// #define RGB_GETGREEN(rgb) (((rgb) >> 8) & 0xff)
function RGB_GETGREEN(rgb: TD3DColor) : DWORD;
begin
Result := rgb shr 8;
Result := (rgb shr 8) and $ff;
end;
 
function RGB_GETBLUE(rgb: TD3DColor): Byte;
// #define RGB_GETBLUE(rgb) ((rgb) & 0xff)
function RGB_GETBLUE(rgb: TD3DColor) : DWORD;
begin
Result := rgb;
Result := rgb and $ff;
end;
 
function RGBA_SETALPHA(rgba: TD3DColor; x: Byte): TD3DColor;
// #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
function RGBA_SETALPHA(rgba: TD3DColor; x: DWORD) : TD3DColor;
begin
Result := (x shl 24) or (rgba and $00FFFFFF);
Result := (x shl 24) or (rgba and $00ffffff);
end;
 
function RGB_MAKE(r, g, b: Byte): TD3DColor;
// #define RGB_MAKE(r, g, b) ((TD3DColor) (((r) << 16) | ((g) << 8) | (b)))
function RGB_MAKE(r, g, b: DWORD) : TD3DColor;
begin
Result := (r shl 16) or (g shl 8) or b;
end;
 
// #define RGBA_TORGB(rgba) ((TD3DColor) ((rgba) & 0xffffff))
function RGBA_TORGB(rgba: TD3DColor): TD3DColor;
begin
Result := rgba and $00FFFFFF;
Result := rgba and $00ffffff;
end;
 
// #define RGB_TORGBA(rgb) ((TD3DColor) ((rgb) | 0xff000000))
function RGB_TORGBA(rgb: TD3DColor): TD3DColor;
begin
Result := rgb or $FF000000;
Result := rgb or $ff000000;
end;
 
function VectorAdd(v1, v2: TD3DVector) : TD3DVector;
 
function D3DSTATE_OVERRIDE(StateType: DWORD) : DWORD;
begin
Result := StateType + D3DSTATE_OVERRIDE_BIAS;
end;
 
function D3DTRIFLAG_STARTFLAT(len: DWORD) : DWORD;
begin
if not (len in [1..29]) then len := 0;
result := len;
end;
 
// #define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))
function D3DRENDERSTATE_STIPPLEPATTERN(y: integer) : TD3DRenderStateType;
begin
Result := TD3DRenderStateType(Ord(D3DRENDERSTATE_STIPPLEPATTERN00) + y);
end;
 
 
 
 
// Addition and subtraction
function VectorAdd(const v1, v2: TD3DVector) : TD3DVector;
begin
result.x := v1.x+v2.x;
result.y := v1.y+v2.y;
result.z := v1.z+v2.z;
end;
 
function VectorSub(v1, v2: TD3DVector) : TD3DVector;
function VectorSub(const v1, v2: TD3DVector) : TD3DVector;
begin
result.x := v1.x-v2.x;
result.y := v1.y-v2.y;
15645,7 → 22158,8
result.z := v1.z-v2.z;
end;
 
function VectorMulS(v: TD3DVector; s: TD3DValue) : TD3DVector;
// Scalar multiplication and division
function VectorMulS(const v: TD3DVector; s: TD3DValue) : TD3DVector;
begin
result.x := v.x*s;
result.y := v.y*s;
15652,7 → 22166,7
result.z := v.z*s;
end;
 
function VectorDivS(v: TD3DVector; s: TD3DValue) : TD3DVector;
function VectorDivS(const v: TD3DVector; s: TD3DValue) : TD3DVector;
begin
result.x := v.x/s;
result.y := v.y/s;
15659,7 → 22173,8
result.z := v.z/s;
end;
 
function VectorMul(v1, v2: TD3DVector) : TD3DVector;
// Memberwise multiplication and division
function VectorMul(const v1, v2: TD3DVector) : TD3DVector;
begin
result.x := v1.x*v2.x;
result.y := v1.y*v2.y;
15666,7 → 22181,7
result.z := v1.z*v2.z;
end;
 
function VectorDiv(v1, v2: TD3DVector) : TD3DVector;
function VectorDiv(const v1, v2: TD3DVector) : TD3DVector;
begin
result.x := v1.x/v2.x;
result.y := v1.y/v2.y;
15673,6 → 22188,7
result.z := v1.z/v2.z;
end;
 
// Vector dominance
function VectorSmaller(v1, v2: TD3DVector) : boolean;
begin
result := (v1.x < v2.x) and (v1.y < v2.y) and (v1.z < v2.z);
15683,11 → 22199,13
result := (v1.x <= v2.x) and (v1.y <= v2.y) and (v1.z <= v2.z);
end;
 
// Bitwise equality
function VectorEquel(v1, v2: TD3DVector) : boolean;
begin
result := (v1.x = v2.x) and (v1.y = v2.y) and (v1.z = v2.z);
end;
 
// Length-related functions
function VectorSquareMagnitude(v: TD3DVector) : TD3DValue;
begin
result := (v.x*v.x) + (v.y*v.y) + (v.z*v.z);
15698,11 → 22216,13
result := sqrt( (v.x*v.x) + (v.y*v.y) + (v.z*v.z) );
end;
 
function VectorNormalize(v: TD3DVector) : TD3DVector;
// Returns vector with same direction and unit length
function VectorNormalize(const v: TD3DVector) : TD3DVector;
begin
result := VectorDivS(v,VectorMagnitude(v));
end;
 
// Return min/max component of the input vector
function VectorMin(v: TD3DVector) : TD3DValue;
var
ret : TD3DValue;
15723,7 → 22243,8
result := ret;
end;
 
function VectorMinimize(v1, v2: TD3DVector) : TD3DVector;
// Return memberwise min/max of input vectors
function VectorMinimize(const v1, v2: TD3DVector) : TD3DVector;
begin
if v1.x < v2.x then result.x := v1.x else result.x := v2.x;
if v1.y < v2.y then result.y := v1.y else result.y := v2.y;
15730,7 → 22251,7
if v1.z < v2.z then result.z := v1.z else result.z := v2.z;
end;
 
function VectorMaximize(v1, v2: TD3DVector) : TD3DVector;
function VectorMaximize(const v1, v2: TD3DVector) : TD3DVector;
begin
if v1.x > v2.x then result.x := v1.x else result.x := v2.x;
if v1.y > v2.y then result.y := v1.y else result.y := v2.y;
15737,12 → 22258,13
if v1.z > v2.z then result.z := v1.z else result.z := v2.z;
end;
 
// Dot and cross product
function VectorDotProduct(v1, v2: TD3DVector) : TD3DValue;
begin
result := (v1.x*v2.x) + (v1.y * v2.y) + (v1.z*v2.z);
end;
 
function VectorCrossProduct(v1, v2: TD3DVector) : TD3DVector;
function VectorCrossProduct(const v1, v2: TD3DVector) : TD3DVector;
begin
result.x := (v1.y*v2.z) - (v1.z*v2.y);
result.y := (v1.z*v2.x) - (v1.x*v2.z);
15749,245 → 22271,819
result.z := (v1.x*v2.y) - (v1.y*v2.x);
end;
 
function D3DSTATE_OVERRIDE(typ: DWORD): DWORD;
procedure DisableFPUExceptions;
var
FPUControlWord: WORD;
asm
FSTCW FPUControlWord;
OR FPUControlWord, $4 + $1; { Divide by zero + invalid operation }
FLDCW FPUControlWord;
end;
 
procedure EnableFPUExceptions;
var
FPUControlWord: WORD;
asm
FSTCW FPUControlWord;
AND FPUControlWord, $FFFF - $4 - $1; { Divide by zero + invalid operation }
FLDCW FPUControlWord;
end;
 
function D3DErrorString(Value: HResult) : string; //Full description not available yet
begin
Result := typ + D3DSTATE_OVERRIDE_BIAS;
case Value of
D3D_OK: Result := 'No error';
 
D3DERR_BADMAJORVERSION: Result := 'D3DERR_BADMAJORVERSION';
D3DERR_BADMINORVERSION: Result := 'D3DERR_BADMINORVERSION';
 
D3DERR_INVALID_DEVICE: Result := 'D3DERR_INITFAILED';
D3DERR_INITFAILED: Result := 'D3DERR_INITFAILED';
 
D3DERR_DEVICEAGGREGATED: Result := 'D3DERR_DEVICEAGGREGATED';
 
D3DERR_EXECUTE_CREATE_FAILED: Result := 'D3DERR_EXECUTE_CREATE_FAILED';
D3DERR_EXECUTE_DESTROY_FAILED: Result := 'D3DERR_EXECUTE_DESTROY_FAILED';
D3DERR_EXECUTE_LOCK_FAILED: Result := 'D3DERR_EXECUTE_LOCK_FAILED';
D3DERR_EXECUTE_UNLOCK_FAILED: Result := 'D3DERR_EXECUTE_UNLOCK_FAILED';
D3DERR_EXECUTE_LOCKED: Result := 'D3DERR_EXECUTE_LOCKED';
D3DERR_EXECUTE_NOT_LOCKED: Result := 'D3DERR_EXECUTE_NOT_LOCKED';
 
D3DERR_EXECUTE_FAILED: Result := 'D3DERR_EXECUTE_FAILED';
D3DERR_EXECUTE_CLIPPED_FAILED: Result := 'D3DERR_EXECUTE_CLIPPED_FAILED';
 
D3DERR_TEXTURE_NO_SUPPORT: Result := 'D3DERR_TEXTURE_NO_SUPPORT';
D3DERR_TEXTURE_CREATE_FAILED: Result := 'D3DERR_TEXTURE_CREATE_FAILED';
D3DERR_TEXTURE_DESTROY_FAILED: Result := 'D3DERR_TEXTURE_DESTROY_FAILED';
D3DERR_TEXTURE_LOCK_FAILED: Result := 'D3DERR_TEXTURE_LOCK_FAILED';
D3DERR_TEXTURE_UNLOCK_FAILED: Result := 'D3DERR_TEXTURE_UNLOCK_FAILED';
D3DERR_TEXTURE_LOAD_FAILED: Result := 'D3DERR_TEXTURE_LOAD_FAILED';
D3DERR_TEXTURE_SWAP_FAILED: Result := 'D3DERR_TEXTURE_SWAP_FAILED';
D3DERR_TEXTURE_LOCKED: Result := 'D3DERR_TEXTURELOCKED';
D3DERR_TEXTURE_NOT_LOCKED: Result := 'D3DERR_TEXTURE_NOT_LOCKED';
D3DERR_TEXTURE_GETSURF_FAILED: Result := 'D3DERR_TEXTURE_GETSURF_FAILED';
 
D3DERR_MATRIX_CREATE_FAILED: Result := 'D3DERR_MATRIX_CREATE_FAILED';
D3DERR_MATRIX_DESTROY_FAILED: Result := 'D3DERR_MATRIX_DESTROY_FAILED';
D3DERR_MATRIX_SETDATA_FAILED: Result := 'D3DERR_MATRIX_SETDATA_FAILED';
D3DERR_MATRIX_GETDATA_FAILED: Result := 'D3DERR_MATRIX_GETDATA_FAILED';
D3DERR_SETVIEWPORTDATA_FAILED: Result := 'D3DERR_SETVIEWPORTDATA_FAILED';
 
D3DERR_INVALIDCURRENTVIEWPORT: Result := 'D3DERR_INVALIDCURRENTVIEWPORT';
D3DERR_INVALIDPRIMITIVETYPE: Result := 'D3DERR_INVALIDPRIMITIVETYPE';
D3DERR_INVALIDVERTEXTYPE: Result := 'D3DERR_INVALIDVERTEXTYPE';
D3DERR_TEXTURE_BADSIZE: Result := 'D3DERR_TEXTURE_BADSIZE';
D3DERR_INVALIDRAMPTEXTURE: Result := 'D3DERR_INVALIDRAMPTEXTURE';
 
D3DERR_MATERIAL_CREATE_FAILED: Result := 'D3DERR_MATERIAL_CREATE_FAILED';
D3DERR_MATERIAL_DESTROY_FAILED: Result := 'D3DERR_MATERIAL_DESTROY_FAILED';
D3DERR_MATERIAL_SETDATA_FAILED: Result := 'D3DERR_MATERIAL_SETDATA_FAILED';
D3DERR_MATERIAL_GETDATA_FAILED: Result := 'D3DERR_MATERIAL_GETDATA_FAILED';
 
D3DERR_INVALIDPALETTE: Result := 'D3DERR_INVALIDPALETTE';
 
D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY: Result := 'D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY';
D3DERR_ZBUFF_NEEDS_VIDEOMEMORY: Result := 'D3DERR_ZBUFF_NEEDS_VIDEOMEMORY';
D3DERR_SURFACENOTINVIDMEM: Result := 'D3DERR_SURFACENOTINVIDMEM';
 
D3DERR_LIGHT_SET_FAILED: Result := 'D3DERR_LIGHT_SET_FAILED';
D3DERR_LIGHTHASVIEWPORT: Result := 'D3DERR_LIGHTHASVIEWPORT';
D3DERR_LIGHTNOTINTHISVIEWPORT: Result := 'D3DERR_LIGHTNOTINTHISVIEWPORT';
 
D3DERR_SCENE_IN_SCENE: Result := 'D3DERR_SCENE_IN_SCENE';
D3DERR_SCENE_NOT_IN_SCENE: Result := 'D3DERR_SCENE_NOT_IN_SCENE';
D3DERR_SCENE_BEGIN_FAILED: Result := 'D3DERR_SCENE_BEGIN_FAILED';
D3DERR_SCENE_END_FAILED: Result := 'D3DERR_SCENE_END_FAILED';
 
D3DERR_INBEGIN: Result := 'D3DERR_INBEGIN';
D3DERR_NOTINBEGIN: Result := 'D3DERR_NOTINBEGIN';
D3DERR_NOVIEWPORTS: Result := 'D3DERR_NOVIEWPORTS';
D3DERR_VIEWPORTDATANOTSET: Result := 'D3DERR_VIEWPORTDATANOTSET';
D3DERR_VIEWPORTHASNODEVICE: Result := 'D3DERR_VIEWPORTHASNODEVICE';
D3DERR_NOCURRENTVIEWPORT: Result := 'D3DERR_NOCURRENTVIEWPORT';
 
D3DERR_INVALIDVERTEXFORMAT: Result := 'D3DERR_INVALIDVERTEXFORMAT';
 
D3DERR_COLORKEYATTACHED: Result := 'D3DERR_COLORKEYATTACHED';
 
D3DERR_VERTEXBUFFEROPTIMIZED: Result := 'D3DERR_VERTEXBUFFEROPTIMIZED';
D3DERR_VBUF_CREATE_FAILED: Result := 'D3DERR_VBUF_CREATE_FAILED';
D3DERR_VERTEXBUFFERLOCKED: Result := 'D3DERR_VERTEXBUFFERLOCKED';
 
D3DERR_ZBUFFER_NOTPRESENT: Result := 'D3DERR_ZBUFFER_NOTPRESENT';
D3DERR_STENCILBUFFER_NOTPRESENT: Result := 'D3DERR_STENCILBUFFER_NOTPRESENT';
 
D3DERR_WRONGTEXTUREFORMAT: Result := 'D3DERR_WRONGTEXTUREFORMAT';
D3DERR_UNSUPPORTEDCOLOROPERATION: Result := 'D3DERR_UNSUPPORTEDCOLOROPERATION';
D3DERR_UNSUPPORTEDCOLORARG: Result := 'D3DERR_UNSUPPORTEDCOLORARG';
D3DERR_UNSUPPORTEDALPHAOPERATION: Result := 'D3DERR_UNSUPPORTEDALPHAOPERATION';
D3DERR_UNSUPPORTEDALPHAARG: Result := 'D3DERR_UNSUPPORTEDALPHAARG';
D3DERR_TOOMANYOPERATIONS: Result := 'D3DERR_TOOMANYOPERATIONS';
D3DERR_CONFLICTINGTEXTUREFILTER: Result := 'D3DERR_CONFLICTINGTEXTUREFILTER';
D3DERR_UNSUPPORTEDFACTORVALUE: Result := 'D3DERR_UNSUPPORTEDFACTORVALUE';
 
D3DERR_CONFLICTINGRENDERSTATE: Result := 'D3DERR_CONFLICTINGRENDERSTATE';
D3DERR_UNSUPPORTEDTEXTUREFILTER: Result := 'D3DERR_UNSUPPORTEDTEXTUREFILTER';
D3DERR_TOOMANYPRIMITIVES: Result := 'D3DERR_TOOMANYPRIMITIVES';
D3DERR_INVALIDMATRIX: Result := 'D3DERR_INVALIDMATRIX';
D3DERR_TOOMANYVERTICES: Result := 'D3DERR_TOOMANYVERTICES';
D3DERR_CONFLICTINGTEXTUREPALETTE: Result := 'D3DERR_CONFLICTINGTEXTUREPALETTE';
 
else Result := 'Unrecognized Error';
end;
end;
{$IFDEF D3DRM}
//Direct3DRM file
 
function D3DRENDERSTATE_STIPPLEPATTERN(y: DWORD): TD3DRenderStateType;
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: d3drmdef.h
* Content: Direct3DRM include file
*
***************************************************************************)
 
procedure D3DRMAnimationGetRotateKey
(var rmKey: TD3DRMAnimationKey; var rmQuat: TD3DRMQuaternion);
begin
Result := TD3DRenderStateType(Ord(D3DRENDERSTATE_STIPPLEPATTERN00)+y);
rmQuat := rmKey.dqRotateKey;
end;
 
function D3DTRIFLAG_STARTFLAT(len: DWORD) : DWORD;
procedure D3DRMAnimationGetScaleKey
(var rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
begin
if not (len in [1..29]) then len := 0;
result := len;
dvVec := rmKey.dvScaleKey;
end;
 
function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWORD): DWORD;
procedure D3DRMAnimationGetPositionKey
(var rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
begin
Result := D3DFVF_TEXTUREFORMAT3 shl (CoordIndex*2 + 16);
dvVec := rmKey.dvPositionKey;
end;
 
function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWORD): DWORD;
procedure D3DRMAnimatioSetRotateKey
(var rmKey: TD3DRMAnimationKey; var rmQuat: TD3DRMQuaternion);
begin
Result := D3DFVF_TEXTUREFORMAT2;
rmKey.dqRotateKey := rmQuat;
end;
 
function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWORD): DWORD;
procedure D3DRMAnimationSetScaleKey
(var rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
begin
Result := D3DFVF_TEXTUREFORMAT4 shl (CoordIndex*2 + 16);
rmKey.dvScaleKey := dvVec;
end;
 
function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWORD): DWORD;
procedure D3DRMAnimationSetPositionKey
(var rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
begin
Result := D3DFVF_TEXTUREFORMAT1 shl (CoordIndex*2 + 16);
rmKey.dvPositionKey := dvVec;
end;
 
{ Direct3DRM }
(*==========================================================================;
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: d3drm.h
* Content: Direct3DRM include file
*
***************************************************************************)
 
procedure D3DRMAnimationGetRotateKey(const rmKey: TD3DRMAnimationKey; var rmQuat: TD3DRMQuaternion);
function D3DRMErrorString(Value: HResult) : string;
begin
rmQuat.s := rmKey.dvK[0];
rmQuat.v.x := rmKey.dvK[1];
rmQuat.v.y := rmKey.dvK[2];
rmQuat.v.z := rmKey.dvK[3];
case Value of
D3DRM_OK: Result := 'No error. Equivalent to DD_OK.';
D3DRMERR_BADALLOC: Result := 'Out of memory.';
D3DRMERR_BADDEVICE: Result := 'Device is not compatible with renderer.';
D3DRMERR_BADFILE: Result := 'Data file is corrupt.';
D3DRMERR_BADMAJORVERSION: Result := 'Bad DLL major version.';
D3DRMERR_BADMINORVERSION: Result := 'Bad DLL minor version.';
D3DRMERR_BADOBJECT: Result := 'Object expected in argument.';
D3DRMERR_BADPMDATA: Result := 'The data in the .x file is corrupted. The conversion to a progressive mesh succeeded but produced an invalid progressive mesh in the .x file.';
D3DRMERR_BADTYPE: Result := 'Bad argument type passed.';
D3DRMERR_BADVALUE: Result := 'Bad argument value passed.';
D3DRMERR_BOXNOTSET: Result := 'An attempt was made to access a bounding box (for example, with IDirect3DRMFrame3::GetBox) when no bounding box was set on the frame.';
D3DRMERR_CLIENTNOTREGISTERED: Result := 'Client has not been registered. Call IDirect3DRM3::RegisterClient.';
D3DRMERR_CONNECTIONLOST: Result := 'Data connection was lost during a load, clone, or duplicate.';
D3DRMERR_ELEMENTINUSE: Result := 'Element can´t be modified or deleted while in use. To empty a submesh, call Empty() against its parent.';
// D3DRMERR_ENTRYINUSE: Result := 'Vertex or normal entries are currently in use by a face and cannot be deleted.';
D3DRMERR_FACEUSED: Result := 'Face already used in a mesh.';
D3DRMERR_FILENOTFOUND: Result := 'File cannot be opened.';
// D3DRMERR_INCOMPATIBLEKEY: Result := 'Specified animation key is incompatible. The key cannot be modified.';
D3DRMERR_INVALIDLIBRARY: Result := 'Specified libary is invalid.';
// D3DRMERR_INVALIDOBJECT: Result := 'Method received a pointer to an object that is invalid.';
// D3DRMERR_INVALIDPARAMS: Result := 'One of the parameters passed to the method is invalid.';
D3DRMERR_LIBRARYNOTFOUND: Result := 'Specified libary not found.';
D3DRMERR_LOADABORTED: Result := 'Load aborted by user.';
D3DRMERR_NOSUCHKEY: Result := 'Specified animation key does not exist.';
D3DRMERR_NOTCREATEDFROMDDS: Result := 'Specified texture was not created from a DirectDraw Surface.';
D3DRMERR_NOTDONEYET: Result := 'Unimplemented.';
D3DRMERR_NOTENOUGHDATA: Result := 'Not enough data has been loaded to perform the requested operation.';
D3DRMERR_NOTFOUND: Result := 'Object not found in specified place.';
// D3DRMERR_OUTOFRANGE: Result := 'Specified value is out of range.';
D3DRMERR_PENDING: Result := 'Data required to supply the requested information has not finished loading.';
D3DRMERR_REQUESTTOOLARGE: Result := 'Attempt was made to set a level of detail in a progressive mesh greater than the maximum available.';
D3DRMERR_REQUESTTOOSMALL: Result := 'Attempt was made to set the minimum rendering detail of a progressive mesh smaller than the detail in the base mesh (the minimum for rendering).';
D3DRMERR_TEXTUREFORMATNOTFOUND: Result := 'Texture format could not be found that meets the specified criteria and that the underlying Immediate Mode device supports.';
D3DRMERR_UNABLETOEXECUTE: Result := 'Unable to carry out procedure.';
DDERR_INVALIDOBJECT: Result := 'Received pointer that was an invalid object.';
DDERR_INVALIDPARAMS: Result := 'One or more of the parameters passed to the method are incorrect.';
DDERR_NOTFOUND: Result := 'The requested item was not found.';
DDERR_NOTINITIALIZED: Result := 'An attempt was made to call an interface method of an object created by CoCreateInstance before the object was initialized.';
DDERR_OUTOFMEMORY: Result := 'DirectDraw does not have enough memory to perform the operation.';
else Result := 'Unrecognized Error';
end;
end;
{$ENDIF}
//DirectInput file
 
procedure D3DRMAnimationGetScaleKey(const rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
 
function DIMAKEUSAGEDWORD(UsagePage, Usage: WORD) : DWORD;
begin
dvVec.x := rmKey.dvK[0];
dvVec.y := rmKey.dvK[1];
dvVec.z := rmKey.dvK[2];
Result := Usage or (UsagePage shl 16);
end;
 
procedure D3DRMAnimationGetPositionKey(const rmKey: TD3DRMAnimationKey; var dvVec: TD3DVector);
 
function DIEFT_GETTYPE(n: variant) : byte;
begin
dvVec.x := rmKey.dvK[0];
dvVec.y := rmKey.dvK[1];
dvVec.z := rmKey.dvK[2];
Result := byte(n);
end;
 
procedure D3DRMAnimationSetRotateKey(var rmKey: TD3DRMAnimationKey; const rmQuat: TD3DRMQuaternion);
function GET_DIDEVICE_TYPE(dwDevType: variant) : byte;
begin
rmKey.dvK[0] := rmQuat.s;
rmKey.dvK[1] := rmQuat.v.x;
rmKey.dvK[2] := rmQuat.v.y;
rmKey.dvK[3] := rmQuat.v.z;
Result := byte(dwDevType);
end;
 
procedure D3DRMAnimationSetScaleKey(var rmKey: TD3DRMAnimationKey; const dvVec: TD3DVector);
function GET_DIDEVICE_SUBTYPE(dwDevType: variant) : byte;
begin
rmKey.dvK[0] := dvVec.x;
rmKey.dvK[1] := dvVec.y;
rmKey.dvK[2] := dvVec.z;
Result := hi(word(dwDevType));
end;
 
procedure D3DRMAnimationSetPositionKey(var rmKey: TD3DRMAnimationKey; const dvVec: TD3DVector);
function DIDFT_MAKEINSTANCE(n: variant) : DWORD;
begin
rmKey.dvK[0] := dvVec.x;
rmKey.dvK[1] := dvVec.y;
rmKey.dvK[2] := dvVec.z;
Result := word(n) shl 8;
end;
 
function Direct3DRMCreate; external D3DRMLib;
function DIDFT_GETTYPE(n: variant) : byte;
begin
Result := byte(n);
end;
 
function D3DRMCreateColorRGB; external D3DRMLib;
function D3DRMCreateColorRGBA; external D3DRMLib;
function D3DRMColorGetRed; external D3DRMLib;
function D3DRMColorGetGreen; external D3DRMLib;
function D3DRMColorGetBlue; external D3DRMLib;
function D3DRMColorGetAlpha; external D3DRMLib;
function D3DRMVectorAdd; external D3DRMLib;
function D3DRMVectorSubtract; external D3DRMLib;
function D3DRMVectorReflect; external D3DRMLib;
function D3DRMVectorCrossProduct; external D3DRMLib;
function D3DRMVectorDotProduct; external D3DRMLib;
function D3DRMVectorNormalize; external D3DRMLib;
function D3DRMVectorModulus; external D3DRMLib;
function D3DRMVectorRotate; external D3DRMLib;
function D3DRMVectorScale; external D3DRMLib;
function D3DRMVectorRandom; external D3DRMLib;
function D3DRMQuaternionFromRotation; external D3DRMLib;
function D3DRMQuaternionMultiply; external D3DRMLib;
function D3DRMQuaternionSlerp; external D3DRMLib;
procedure D3DRMMatrixFromQuaternion; external D3DRMLib;
function D3DRMQuaternionFromMatrix; external D3DRMLib;
function DIDFT_GETINSTANCE(n: variant) : DWORD;
begin
Result := word(n) shr 8;
end;
 
function DirectXFileCreate; external D3DXofLib;
function DIDFT_ENUMCOLLECTION(n: variant) : DWORD;
begin
Result := word(n) shl 8;
end;
 
{ DirectInput }
function DIJOFS_SLIDER(n: variant) : variant;
begin
Result := n * 4 + 24;
end;
 
function GET_DIDEVICE_TYPE(dwDevType: DWORD): DWORD;
function DIJOFS_POV(n: variant) : variant;
begin
Result := LOBYTE(dwDevType);
Result := n * 4 + 32;
end;
 
function GET_DIDEVICE_SUBTYPE(dwDevType: DWORD): DWORD;
function DIJOFS_BUTTON(n: variant) : variant;
begin
Result := HIBYTE(dwDevType);
Result := 48 + n;
end;
 
function DIEFT_GETTYPE(n: DWORD): DWORD;
function DIErrorString(Value: HResult) : string;
var
sValue: array[0..255] of char;
begin
Result := LOBYTE(n);
case Value of
DI_OK: Result := 'The operation completed successfully.';
S_FALSE: Result := '"The operation had no effect." or "The device buffer overflowed and some input was lost." or "The device exists but is not currently attached." or "The change in device properties had no effect."';
// DI_BUFFEROVERFLOW: Result := 'The device buffer overflowed and some input was lost. This value is equal to the S_FALSE standard COM return value.';
DI_DOWNLOADSKIPPED: Result := 'The parameters of the effect were successfully updated, but the effect could not be downloaded because the associated device was not acquired in exclusive mode.';
DI_EFFECTRESTARTED: Result := 'The effect was stopped, the parameters were updated, and the effect was restarted.';
// DI_NOEFFECT: Result := 'The operation had no effect. This value is equal to the S_FALSE standard COM return value.';
// DI_NOTATTACHED: Result := 'The device exists but is not currently attached. This value is equal to the S_FALSE standard COM return value.';
DI_POLLEDDEVICE: Result := 'The device is a polled device. As a result, device buffering will not collect any data and event notifications will not be signaled until the IDirectInputDevice2::Poll method is called.';
// DI_PROPNOEFFECT: Result := 'The change in device properties had no effect. This value is equal to the S_FALSE standard COM return value.';
DI_TRUNCATED: Result := 'The parameters of the effect were successfully updated, but some of them were beyond the capabilities of the device and were truncated to the nearest supported value.';
DI_TRUNCATEDANDRESTARTED: Result := 'Equal to DI_EFFECTRESTARTED | DI_TRUNCATED.';
DIERR_ACQUIRED: Result := 'The operation cannot be performed while the device is acquired.';
DIERR_ALREADYINITIALIZED: Result := 'This object is already initialized';
DIERR_BADDRIVERVER: Result := 'The object could not be created due to an incompatible driver version or mismatched or incomplete driver components.';
DIERR_BETADIRECTINPUTVERSION: Result := 'The application was written for an unsupported prerelease version of DirectInput.';
DIERR_DEVICEFULL: Result := 'The device is full.';
DIERR_DEVICENOTREG: Result := 'The device or device instance is not registered with DirectInput. This value is equal to the REGDB_E_CLASSNOTREG standard COM return value.';
DIERR_EFFECTPLAYING: Result := 'The parameters were updated in memory but were not downloaded to the device because the device does not support updating an effect while it is still playing.';
DIERR_HASEFFECTS: Result := 'The device cannot be reinitialized because there are still effects attached to it.';
DIERR_GENERIC: Result := 'An undetermined error occurred inside the DirectInput subsystem. This value is equal to the E_FAIL standard COM return value.';
// DIERR_HANDLEEXISTS: Result := 'The device already has an event notification associated with it. This value is equal to the E_ACCESSDENIED standard COM return value.';
DIERR_INCOMPLETEEFFECT: Result := 'The effect could not be downloaded because essential information is missing. For example, no axes have been associated with the effect, or no type-specific information has been supplied.';
DIERR_INPUTLOST: Result := 'Access to the input device has been lost. It must be reacquired.';
DIERR_INVALIDPARAM: Result := 'An invalid parameter was passed to the returning function, or the object was not in a state that permitted the function to be called. This value is equal to the E_INVALIDARG standard COM return value.';
DIERR_MOREDATA: Result := 'Not all the requested information fitted into the buffer.';
DIERR_NOAGGREGATION: Result := 'This object does not support aggregation.';
DIERR_NOINTERFACE: Result := 'The specified interface is not supported by the object. This value is equal to the E_NOINTERFACE standard COM return value.';
DIERR_NOTACQUIRED: Result := 'The operation cannot be performed unless the device is acquired.';
DIERR_NOTBUFFERED: Result := 'The device is not buffered. Set the DIPROP_BUFFERSIZE property to enable buffering.';
DIERR_NOTDOWNLOADED: Result := 'The effect is not downloaded.';
DIERR_NOTEXCLUSIVEACQUIRED: Result := 'The operation cannot be performed unless the device is acquired in DISCL_EXCLUSIVE mode.';
DIERR_NOTFOUND: Result := 'The requested object does not exist.';
DIERR_NOTINITIALIZED: Result := 'This object has not been initialized.';
// DIERR_OBJECTNOTFOUND: Result := 'The requested object does not exist.';
DIERR_OLDDIRECTINPUTVERSION: Result := 'The application requires a newer version of DirectInput.';
DIERR_OTHERAPPHASPRIO: Result := '"The device already has an event notification associated with it." or "The specified property cannot be changed." or "Another application has a higher priority level, preventing this call from succeeding. "';
DIERR_OUTOFMEMORY: Result := 'The DirectInput subsystem could not allocate sufficient memory to complete the call. This value is equal to the E_OUTOFMEMORY standard COM return value.';
// DIERR_READONLY: Result := 'The specified property cannot be changed. This value is equal to the E_ACCESSDENIED standard COM return value.';
DIERR_UNSUPPORTED: Result := 'The function called is not supported at this time. This value is equal to the E_NOTIMPL standard COM return value.';
E_PENDING: Result := 'Data is not yet available.';
HResult($800405CC): Result := 'No more memory for effects of this kind (not documented)';
else Result := 'Unrecognized Error: $' + sValue;
end;
end;
 
function DIDFT_MAKEINSTANCE(n: WORD): DWORD;
function joyConfigChanged(dwFlags: DWORD) : MMRESULT; external 'WinMM.dll';
 
procedure Init_c_dfDIKeyboard_Objects; // XRef: Initialization
var x: Cardinal;
begin
Result := n shl 8;
for x := 0 to 255 do
with _c_dfDIKeyboard_Objects[x] do
begin
pGuid := @GUID_Key; dwOfs := x; dwFlags := 0;
dwType := $80000000 or DIDFT_BUTTON or x shl 8;
end;
end;
 
function DIDFT_GETTYPE(n: DWORD): DWORD;
procedure Init_c_dfDIJoystick2_Objects; // XRef: Initialization
var x,y, OfVal: Cardinal;
begin
Result := LOBYTE(n);
Move(_c_dfDIJoystick_Objects,_c_dfDIJoystick2_Objects,SizeOf(_c_dfDIJoystick_Objects));
// all those empty "buttons"
for x := $2C to $8B do
Move(_c_dfDIJoystick_Objects[$2B],_c_dfDIJoystick2_Objects[x],SizeOf(TDIObjectDataFormat));
for x := 0 to 2 do
begin // 3 more blocks of X axis..Sliders
Move(_c_dfDIJoystick_Objects,_c_dfDIJoystick2_Objects[$8C+8*x],8*SizeOf(TDIObjectDataFormat));
for y := 0 to 7 do _c_dfDIJoystick2_Objects[$8C+8*x+y].dwFlags := (x+1) shl 8;
end;
OfVal := _c_dfDIJoystick2_Objects[$2B].dwOfs+1;
for x := $2C to $A3 do
begin
_c_dfDIJoystick2_Objects[x].dwOfs := OfVal;
if x < $8C then Inc(OfVal) else Inc(OfVal,4);
end;
end;
 
function DIDFT_GETINSTANCE(n: DWORD): WORD;
//DirectPlay file
{$IFDEF UseDirectPlay} // Daniel Marschall 12.04.2024 Added to avoid Windows showing "This app requires DirectPlay"
 
(*==========================================================================;
*
* Copyright (C) 1994-1997 Microsoft Corporation. All Rights Reserved.
*
* File: dplay.h
* Content: DirectPlay include file
*
***************************************************************************)
 
function DPErrorString(Value: HResult) : string;
begin
Result := n shr 8;
case Value of
CLASS_E_NOAGGREGATION: Result := 'A non-NULL value was passed for the pUnkOuter parameter in DirectPlayCreate, DirectPlayLobbyCreate, or IDirectPlayLobby2::Connect.';
DPERR_ACCESSDENIED: Result := 'The session is full or an incorrect password was supplied.';
DPERR_ACTIVEPLAYERS: Result := 'The requested operation cannot be performed because there are existing active players.';
DPERR_ALREADYINITIALIZED: Result := 'This object is already initialized.';
DPERR_APPNOTSTARTED: Result := 'The application has not been started yet.';
DPERR_AUTHENTICATIONFAILED: Result := 'The password or credentials supplied could not be authenticated.';
DPERR_BUFFERTOOLARGE: Result := 'The data buffer is too large to store.';
DPERR_BUSY: Result := 'A message cannot be sent because the transmission medium is busy.';
DPERR_BUFFERTOOSMALL: Result := 'The supplied buffer is not large enough to contain the requested data.';
DPERR_CANTADDPLAYER: Result := 'The player cannot be added to the session.';
DPERR_CANTCREATEGROUP: Result := 'A new group cannot be created.';
DPERR_CANTCREATEPLAYER: Result := 'A new player cannot be created.';
DPERR_CANTCREATEPROCESS: Result := 'Cannot start the application.';
DPERR_CANTCREATESESSION: Result := 'A new session cannot be created.';
DPERR_CANTLOADCAPI: Result := 'No credentials were supplied and the CryptoAPI package (CAPI) to use for cryptography services cannot be loaded.';
DPERR_CANTLOADSECURITYPACKAGE: Result := 'The software security package cannot be loaded.';
DPERR_CANTLOADSSPI: Result := 'No credentials were supplied and the software security package (SSPI) that will prompt for credentials cannot be loaded.';
DPERR_CAPSNOTAVAILABLEYET: Result := 'The capabilities of the DirectPlay object have not been determined yet. This error will occur if the DirectPlay object is implemented on a connectivity solution that requires polling to determine available bandwidth and latency.';
DPERR_CONNECTING: Result := 'The method is in the process of connecting to the network. The application should keep calling the method until it returns DP_OK, indicating successful completion, or it returns a different error.';
DPERR_ENCRYPTIONFAILED: Result := 'The requested information could not be digitally encrypted. Encryption is used for message privacy. This error is only relevant in a secure session.';
DPERR_EXCEPTION: Result := 'An exception occurred when processing the request.';
DPERR_GENERIC: Result := 'An undefined error condition occurred.';
// DPERR_INVALIDCREDENTIALS: Result := 'The credentials supplied (as to IDirectPlay3::SecureOpen) were not valid.';
DPERR_INVALIDFLAGS: Result := 'The flags passed to this method are invalid.';
DPERR_INVALIDGROUP: Result := 'The group ID is not recognized as a valid group ID for this game session.';
DPERR_INVALIDINTERFACE: Result := 'The interface parameter is invalid.';
DPERR_INVALIDOBJECT: Result := 'The DirectPlay object pointer is invalid.';
DPERR_INVALIDPARAMS: Result := 'One or more of the parameters passed to the method are invalid.';
DPERR_INVALIDPASSWORD: Result := 'An invalid password was supplied when attempting to join a session that requires a password.';
DPERR_INVALIDPLAYER: Result := 'The player ID is not recognized as a valid player ID for this game session.';
DPERR_LOGONDENIED: Result := 'The session could not be opened because credentials are required and either no credentials were supplied or the credentials were invalid.';
DPERR_NOCAPS: Result := 'The communication link that DirectPlay is attempting to use is not capable of this function.';
DPERR_NOCONNECTION: Result := 'No communication link was established.';
DPERR_NOINTERFACE: Result := 'The interface is not supported.';
DPERR_NOMESSAGES: Result := 'There are no messages in the receive queue.';
DPERR_NONAMESERVERFOUND: Result := 'No name server (host) could be found or created. A host must exist to create a player.';
DPERR_NONEWPLAYERS: Result := 'The session is not accepting any new players.';
DPERR_NOPLAYERS: Result := 'There are no active players in the session.';
DPERR_NOSESSIONS: Result := 'There are no existing sessions for this game.';
DPERR_NOTLOBBIED: Result := 'Returned by the IDirectPlayLobby2::Connect method if the application was not started by using the IDirectPlayLobby2::RunApplication method or if there is no DPLCONNECTION structure currently initialized for this DirectPlayLobby object.';
DPERR_NOTLOGGEDIN: Result := 'An action cannot be performed because a player or client application is not logged in. Returned by the IDirectPlay3::Send method when the client application tries to send a secure message without being logged in.';
DPERR_OUTOFMEMORY: Result := 'There is insufficient memory to perform the requested operation.';
DPERR_PLAYERLOST: Result := 'A player has lost the connection to the session.';
DPERR_SENDTOOBIG: Result := 'The message being sent by the IDirectPlay3::Send method is too large.';
DPERR_SESSIONLOST: Result := 'The connection to the session has been lost.';
DPERR_SIGNFAILED: Result := 'The requested information could not be digitally signed. Digital signatures are used to establish the authenticity of messages.';
DPERR_TIMEOUT: Result := 'The operation could not be completed in the specified time.';
DPERR_UNAVAILABLE: Result := 'The requested function is not available at this time.';
DPERR_UNINITIALIZED: Result := 'The requested object has not been initialized.';
DPERR_UNKNOWNAPPLICATION: Result := 'An unknown application was specified.';
DPERR_UNSUPPORTED: Result := 'The function is not available in this implementation. Returned from IDirectPlay3::GetGroupConnectionSettings and IDirectPlay3::SetGroupConnectionSettings if they are called from a session that is not a lobby session.';
DPERR_USERCANCEL: Result := 'Can be returned in two ways. 1) The user canceled the connection process during a call to the IDirectPlay3::Open method. 2) The user clicked Cancel in one of the DirectPlay service provider dialog boxes during a call to IDirectPlay3::EnumSessions.';
else Result := 'Unrecognized Error';
end;
end;
{$ENDIF} // UseDirectPlay
 
function DIDFT_ENUMCOLLECTION(n: WORD): DWORD;
//DirectSetup file
 
(*==========================================================================
*
* Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
*
* File: dsetup.h
* Content: DirectXSetup, error codes and flags
***************************************************************************)
 
procedure LoadDSetup;
 
function RegGetStringValue(Hive: HKEY; const KeyName, ValueName: string): string;
var EnvKey : HKEY;
Buf : array[0..255] of char;
BufSize : DWord;
RegType : DWord;
rc : DWord;
begin
Result := n shl 8;
Result := '';
BufSize := Sizeof(Buf);
ZeroMemory(@Buf, BufSize);
RegType := REG_SZ;
try
if (RegOpenKeyEx(Hive, PChar(KeyName), 0, KEY_READ, EnvKey) = ERROR_SUCCESS) then
begin
try
if (ValueName = '') then rc := RegQueryValueEx(EnvKey, nil, nil, @RegType, @Buf, @BufSize)
else rc := RegQueryValueEx(EnvKey, PChar(ValueName), nil, @RegType, @Buf, @BufSize);
if rc = ERROR_SUCCESS then Result := string(Buf);
finally
RegCloseKey(EnvKey);
end;
end;
finally
RegCloseKey(Hive);
end;
end;
 
function DIMAKEUSAGEDWORD(UsagePage, Usage: Word): DWORD;
 
function ExistFile(const FileName: string): Boolean;
var hFile: THandle;
begin
Result := MAKELONG(Usage, UsagePage);
hFile := CreateFile(PChar(FileName), 0, 0, nil, OPEN_EXISTING, 0, 0);
Result := hFile <> INVALID_HANDLE_VALUE;
if hFile = INVALID_HANDLE_VALUE then CloseHandle(hFile);
end;
 
function DirectInputCreate; external DInputLib name 'DirectInputCreateA';
function DirectInputCreateEx; external DInputLib name 'DirectInputCreateEx';
function GetDSetupDLLPath : string;
begin
Result := RegGetStringValue(HKEY_LOCAL_MACHINE,
'Software\Microsoft\Windows\CurrentVersion\Uninstall\DirectXDrivers',
'UninstallString');
if Result <> '' then
Result := Copy(Result,1,Length(Result)-Length('dxsetup.exe')) + 'DSetup.dll';
end;
 
{ DirectPlay }
begin
DSetupDLL := LoadLibrary(PChar(GetDSetupDLLPath));
 
function DirectPlayEnumerateA; external DPlayXLib;
function DirectPlayEnumerateW; external DPlayXLib;
function DirectPlayEnumerate; external DPlayXLib name 'DirectPlayEnumerateA';
DirectXSetupA := GetProcAddress(DSetupDLL,'DirectXSetupA');
DirectXSetupW := GetProcAddress(DSetupDLL,'DirectXSetupW');
{$IFDEF UNICODE}
DirectXSetup := DirectXSetupW;
{$ELSE}
DirectXSetup := DirectXSetupA;
{$ENDIF}
 
function DirectPlayCreate; external DPlayXLib;
DirectXDeviceDriverSetupA :=
GetProcAddress(DSetupDLL,'DirectXDeviceDriverSetupA');
DirectXDeviceDriverSetupW :=
GetProcAddress(DSetupDLL,'DirectXDeviceDriverSetupW');
{$IFDEF UNICODE}
DirectXDeviceDriverSetup := DirectXDeviceDriverSetupW;
{$ELSE}
DirectXDeviceDriverSetup := DirectXDeviceDriverSetupA;
{$ENDIF}
 
function DirectPlayLobbyCreateW; external DPlayXLib;
function DirectPlayLobbyCreateA; external DPlayXLib;
function DirectPlayLobbyCreate; external DPlayXLib name 'DirectPlayLobbyCreateA';
DirectXRegisterApplicationA :=
GetProcAddress(DSetupDLL,'DirectXRegisterApplicationA');
DirectXRegisterApplicationW :=
GetProcAddress(DSetupDLL,'DirectXRegisterApplicationW');
{$IFDEF UNICODE}
DirectXRegisterApplication := DirectXRegisterApplicationW;
{$ELSE}
DirectXRegisterApplication := DirectXRegisterApplicationA;
{$ENDIF}
 
{ DirectSetup }
DirectXUnRegisterApplication :=
GetProcAddress(DSetupDLL,'DirectXUnRegisterApplication');
 
function DirectXSetupA; external DSetupLib;
function DirectXSetupW; external DSetupLib;
function DirectXSetup; external DSetupLib name 'DirectXSetupA';
DirectXSetupSetCallback :=
GetProcAddress(DSetupDLL,'DirectXSetupSetCallback');
 
function DirectXDeviceDriverSetupA; external DSetupLib;
function DirectXDeviceDriverSetupW; external DSetupLib;
function DirectXDeviceDriverSetup; external DSetupLib name 'DirectXDeviceDriverSetupA';
DirectXSetupGetVersion := GetProcAddress(DSetupDLL,'DirectXSetupGetVersion');
 
function DirectXRegisterApplicationA; external DSetupLib;
function DirectXRegisterApplicationW; external DSetupLib;
function DirectXRegisterApplication; external DSetupLib name 'DirectXRegisterApplicationA';
end;
 
function DirectXUnRegisterApplication; external DSetupLib;
//DirectSound file
 
function DirectXSetupSetCallback; external DSetupLib;
function MAKE_DSHRESULT(code: DWORD) : HResult;
begin
Result := HResult(1 shl 31) or HResult(_FACDS shl 16)
or HResult(code);
end;
 
function DirectXSetupGetVersion; external DSetupLib;
function DSSPEAKER_COMBINED(c, g: variant) : DWORD;
begin
Result := byte(c) or (byte(g) shl 16)
end;
 
{ DirectSound }
function DSSPEAKER_CONFIG(a: variant) : byte;
begin
Result := byte(a);
end;
 
function DSSPEAKER_COMBINED(c, g: Byte): DWORD;
function DSSPEAKER_GEOMETRY(a: variant) : byte;
begin
Result := c or (g shl 16);
Result := byte(a shr 16 and $FF);
end;
 
function DSSPEAKER_CONFIG(a: DWORD): Byte;
 
function DSErrorString(Value: HResult) : string;
begin
Result := a;
case Value of
DS_OK: Result := 'The request completed successfully.';
DSERR_ALLOCATED: Result := 'The request failed because resources, such as a priority level, were already in use by another caller.';
DSERR_ALREADYINITIALIZED: Result := 'The object is already initialized.';
DSERR_BADFORMAT: Result := 'The specified wave format is not supported.';
DSERR_BUFFERLOST: Result := 'The buffer memory has been lost and must be restored.';
DSERR_CONTROLUNAVAIL: Result := 'The control (volume, pan, and so forth) requested by the caller is not available.';
DSERR_GENERIC: Result := 'An undetermined error occurred inside the DirectSound subsystem.';
DSERR_INVALIDCALL: Result := 'This function is not valid for the current state of this object.';
DSERR_INVALIDPARAM: Result := 'An invalid parameter was passed to the returning function.';
DSERR_NOAGGREGATION: Result := 'The object does not support aggregation.';
DSERR_NODRIVER: Result := 'No sound driver is available for use.';
DSERR_NOINTERFACE: Result := 'The requested COM interface is not available.';
DSERR_OTHERAPPHASPRIO: Result := 'Another application has a higher priority level, preventing this call from succeeding.';
DSERR_OUTOFMEMORY: Result := 'The DirectSound subsystem could not allocate sufficient memory to complete the caller´s request.';
DSERR_PRIOLEVELNEEDED: Result := 'The caller does not have the priority level required for the function to succeed.';
DSERR_UNINITIALIZED: Result := 'The IDirectSound::Initialize method has not been called or has not been called successfully before other methods were called.';
DSERR_UNSUPPORTED: Result := 'The function called is not supported at this time.';
else Result := 'Unrecognized Error';
end;
end;
 
function DSSPEAKER_GEOMETRY(a: DWORD): Byte;
//DirectMusic file
 
function MAKE_HRESULT(sev,fac,code: DWORD) : HResult;
begin
Result := a shr 16;
Result := (sev shl 31) or (fac shl 16) or code;
end;
 
function DirectSoundCreate; external DSoundLib;
function DirectSoundEnumerateA; external DSoundLib;
function DirectSoundEnumerateW; external DSoundLib;
function DirectSoundEnumerate; external DSoundLib name 'DirectSoundEnumerateA';
//function MAKEFOURCC (ch0, ch1, ch2, ch3: Char) : TFourCC;
//type
// tfcc = array [0..3] of Char;
//begin
// tfcc(Result)[0] := ch0;
// tfcc(Result)[1] := ch1;
// tfcc(Result)[2] := ch2;
// tfcc(Result)[3] := ch3;
//end;
 
function DirectSoundCaptureCreate; external DSoundLib;
function DirectSoundCaptureEnumerateA; external DSoundLib;
function DirectSoundCaptureEnumerateW; external DSoundLib;
function DirectSoundCaptureEnumerate; external DSoundLib name 'DirectSoundCaptureEnumerateA';
function QWORD_ALIGN(x: DWORD) : DWORD;
begin
Result := (x + 7) and (not 7); // (((x) + 7) & ~7)
end;
 
function MAKEFOURCC(ch0, ch1, ch2, ch3: Char) : DWORD;
function DMUS_EVENT_SIZE(cb: DWORD) : DWORD;
begin
Result := Ord(ch0) + (Ord(ch1) shl 8) + (Ord(ch2) shl 16) + (Ord(ch3) shl 24);
Result := QWORD_ALIGN(SizeOf(TDMus_EventHeader) + cb); // QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb)
end;
 
function MAKE_DMHRESULTSUCCESS(code: Cardinal) : HResult;
function IsNTandDelphiRunning : boolean;
var
OSVersion : TOSVersionInfo;
AppName : array[0..255] of char;
begin
Result := MakeResult(0, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)));
OSVersion.dwOsVersionInfoSize := sizeof(OSVersion);
GetVersionEx(OSVersion);
// Not running in NT or program is not Delphi itself ?
AppName[0] := #0;
lstrcat(AppName, PChar(ParamStr(0))); // ParamStr(0) = Application.ExeName
{$IFDEF VER12UP}
CharUpperBuff(AppName, High(AppName) + 1);
{$ELSE}
CharUpperBuff(AppName, SizeOf(AppName));
{$ENDIF}
result := ( (OSVersion.dwPlatformID = VER_PLATFORM_WIN32_NT) and
(Pos('DELPHI32.EXE', AppName) = Length(AppName) - Length('DELPHI32.EXE') + 1) );
end;
 
function MAKE_DMHRESULTERROR(code: Cardinal) : HResult;
initialization
begin
Result := MakeResult(1, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)));
{DirectDraw}
 
if not IsNTandDelphiRunning then
begin
DDrawDLL := LoadLibrary('DDraw.dll');
DirectDrawEnumerateA := GetProcAddress(DDrawDLL,'DirectDrawEnumerateA');
DirectDrawEnumerateW := GetProcAddress(DDrawDLL,'DirectDrawEnumerateW');
{$IFDEF UNICODE}
DirectDrawEnumerate := DirectDrawEnumerateW;
{$ELSE}
DirectDrawEnumerate := DirectDrawEnumerateA;
{$ENDIF}
 
DirectDrawEnumerateExA := GetProcAddress(DDrawDLL,'DirectDrawEnumerateExA');
DirectDrawEnumerateExW := GetProcAddress(DDrawDLL,'DirectDrawEnumerateExW');
{$IFDEF UNICODE}
DirectDrawEnumerateEx := DirectDrawEnumerateExW;
{$ELSE}
DirectDrawEnumerateEx := DirectDrawEnumerateExA;
{$ENDIF}
 
DirectDrawCreate := GetProcAddress(DDrawDLL,'DirectDrawCreate');
DirectDrawCreateEx := GetProcAddress(DDrawDLL,'DirectDrawCreateEx');
DirectDrawCreateClipper := GetProcAddress(DDrawDLL,'DirectDrawCreateClipper');
{$IFDEF WINNT}
NtDirectDrawCreate := GetProcAddress(DDrawDLL,'NtDirectDrawCreate');
{$ENDIF}
end;
{DirectDraw}
{Direct3D}
DisableFPUExceptions;
{$IFDEF D3DRM}
if not IsNTandDelphiRunning then
begin
DXFileDLL := LoadLibrary('D3DXOF.DLL');
DirectXFileCreate := GetProcAddress(DXFileDLL,'DirectXFileCreate');
end;
{Direct3D}
{Direct3DRM}
if not IsNTandDelphiRunning then
begin
D3DRMDLL := LoadLibrary('D3DRM.dll');
//d3drmdef:
D3DRMCreateColorRGB := GetProcAddress(D3DRMDLL,'D3DRMCreateColorRGB');
D3DRMCreateColorRGBA := GetProcAddress(D3DRMDLL,'D3DRMCreateColorRGBA');
D3DRMColorGetRed := GetProcAddress(D3DRMDLL,'D3DRMColorGetRed');
D3DRMColorGetGreen := GetProcAddress(D3DRMDLL,'D3DRMColorGetGreen');
D3DRMColorGetBlue := GetProcAddress(D3DRMDLL,'D3DRMColorGetBlue');
D3DRMColorGetAlpha := GetProcAddress(D3DRMDLL,'D3DRMColorGetAlpha');
D3DRMVectorAdd := GetProcAddress(D3DRMDLL,'D3DRMVectorAdd');
D3DRMVectorSubtract := GetProcAddress(D3DRMDLL,'D3DRMVectorSubtract');
D3DRMVectorReflect := GetProcAddress(D3DRMDLL,'D3DRMVectorReflect');
D3DRMVectorCrossProduct := GetProcAddress(D3DRMDLL,'D3DRMVectorCrossProduct');
D3DRMVectorDotProduct := GetProcAddress(D3DRMDLL,'D3DRMVectorDotProduct');
D3DRMVectorNormalize := GetProcAddress(D3DRMDLL,'D3DRMVectorNormalize');
D3DRMVectorModulus := GetProcAddress(D3DRMDLL,'D3DRMVectorModulus');
D3DRMVectorRotate := GetProcAddress(D3DRMDLL,'D3DRMVectorRotate');
D3DRMVectorScale := GetProcAddress(D3DRMDLL,'D3DRMVectorScale');
D3DRMVectorRandom := GetProcAddress(D3DRMDLL,'D3DRMVectorRandom');
D3DRMQuaternionFromRotation := GetProcAddress(D3DRMDLL,'D3DRMQuaternionFromRotation');
D3DRMQuaternionMultiply := GetProcAddress(D3DRMDLL,'D3DRMQuaternionMultiply');
D3DRMQuaternionSlerp := GetProcAddress(D3DRMDLL,'D3DRMQuaternionSlerp');
D3DRMMatrixFromQuaternion := GetProcAddress(D3DRMDLL,'D3DRMMatrixFromQuaternion');
D3DRMQuaternionFromMatrix := GetProcAddress(D3DRMDLL,'D3DRMQuaternionFromMatrix');
//d3drm:
Direct3DRMCreate := GetProcAddress(D3DRMDLL,'Direct3DRMCreate');
end;
{$ENDIF}
{Direct3DRM}
{DirectInput}
Init_c_dfDIKeyboard_Objects; // set kbd GUIDs & flags
Init_c_dfDIJoystick2_Objects; // construct Joystick2 from Joystick fmt
 
// The number of bytes to allocate for an event with 'cb' data bytes.
//
function QWORD_ALIGN(x: LONGLONG): LONGLONG;
if not IsNTandDelphiRunning then
begin
Result := x + 7;
PDWORD(@Result)^ := PDWORD(@Result)^ and (not 7);
DInputDLL := LoadLibrary('DInput.dll');
 
DirectInputCreateA := GetProcAddress(DInputDLL,'DirectInputCreateA');
DirectInputCreateW := GetProcAddress(DInputDLL,'DirectInputCreateW');
// no A/W version
DirectInputCreateEx := GetProcAddress(DInputDLL,'DirectInputCreateEx');
{$IFDEF UNICODE}
DirectInputCreate := DirectInputCreateW;
{$ELSE}
DirectInputCreate := DirectInputCreateA;
{$ENDIF}
end;
{DirectInput}
{DirectPlay}
{$IFDEF UseDirectPlay} // Daniel Marschall 12.04.2024 Added to avoid Windows showing "This app requires DirectPlay"
if not IsNTandDelphiRunning then
begin
DPlayDLL := LoadLibrary('DPlayX.dll');
 
function DMUS_EVENT_SIZE(cb: LONGLONG): LONGLONG;
DirectPlayEnumerateA := GetProcAddress(DPlayDLL,'DirectPlayEnumerateA');
DirectPlayEnumerateW := GetProcAddress(DPlayDLL,'DirectPlayEnumerateW');
{$IFDEF UNICODE}
DirectPlayEnumerate := DirectPlayEnumerateW;
{$ELSE}
DirectPlayEnumerate := DirectPlayEnumerateA;
{$ENDIF}
 
DirectPlayCreate := GetProcAddress(DPlayDLL,'DirectPlayCreate');
 
// File: dplay.h
 
DirectPlayLobbyCreateW := GetProcAddress(DPlayDLL,'DirectPlayLobbyCreateW');
DirectPlayLobbyCreateA := GetProcAddress(DPlayDLL,'DirectPlayLobbyCreateA');
{$IFDEF UNICODE}
DirectPlayLobbyCreate := DirectPlayLobbyCreateW;
{$ELSE}
DirectPlayLobbyCreate := DirectPlayLobbyCreateA;
{$ENDIF}
 
end;
{$ENDIF} // UseDirectPlay
{DirectPlay}
{DirectSetup}
if not IsNTandDelphiRunning then
begin
Result := QWORD_ALIGN(SizeOf(DMUS_EVENTHEADER) + cb);
LoadDSetup;
end;
{DirectSetup}
{DirectSound}
if not IsNTandDelphiRunning then
begin
DSoundDLL := LoadLibrary('DSound.dll');
DirectSoundCreate := GetProcAddress(DSoundDLL,'DirectSoundCreate');
 
end.
DirectSoundEnumerateW := GetProcAddress(DSoundDLL,'DirectSoundEnumerateW');
DirectSoundEnumerateA := GetProcAddress(DSoundDLL,'DirectSoundEnumerateA');
{$IFDEF UNICODE}
DirectSoundEnumerate := DirectSoundEnumerateW;
{$ELSE}
DirectSoundEnumerate := DirectSoundEnumerateA;
{$ENDIF}
 
DirectSoundCaptureCreate :=
GetProcAddress(DSoundDLL,'DirectSoundCaptureCreate');
 
DirectSoundCaptureEnumerateW :=
GetProcAddress(DSoundDLL,'DirectSoundCaptureEnumerateW');
DirectSoundCaptureEnumerateA :=
GetProcAddress(DSoundDLL,'DirectSoundCaptureEnumerateA');
{$IFDEF UNICODE}
DirectSoundCaptureEnumerate := DirectSoundCaptureEnumerateW;
{$ELSE}
DirectSoundCaptureEnumerate := DirectSoundCaptureEnumerateA;
{$ENDIF}
end;
{DirectSound}
end;
 
finalization
begin
{DirectDraw}
if DDrawDLL <> 0 then FreeLibrary(DDrawDLL);
{DirectDraw}
{Direct3D}
FreeLibrary(DXFileDLL);
{Direct3D}
{Direct3DRM}
{$IFDEF D3DRM}
if D3DRMDLL <> 0 then FreeLibrary(D3DRMDLL);
{$ENDIF}
{Direct3DRM}
{DirectInput}
FreeLibrary(DInputDLL);
{DirectInput}
{DirectPlay}
{$IFDEF UseDirectPlay} // Daniel Marschall 12.04.2024 Added to avoid Windows showing "This app requires DirectPlay"
if DPlayDLL <> 0 then FreeLibrary(DPlayDLL);
{$ENDIF} // UseDirectPlay
{DirectPlay}
{DirectSetup}
FreeLibrary(DSetupDLL);
{DirectSetup}
{DirectSound}
FreeLibrary(DSoundDLL);
{DirectSound}
end;
 
 
End.
/VCL_DELPHIX_D6/DIB.pas
1,35 → 1,81
{*******************************************************}
{ }
{ DIB and PAINTBOX componets }
{ }
{ Copyright (C) 1997-2000 Hiroyuki Hori }
{ base components and effects }
{ Copyright (C) 2000 Keith Murray }
{ supernova effect }
{ Copyright (C) 2000 Michel Hibon }
{ new special effects added for DIB }
{ Copyright (C) 2001 Joakim Back }
{ conFusion effects (as DxFusion) }
{ Copyright (C) 2003 Babak Sateli }
{ 24-bit DIB effect as supplement ones }
{ Copyright (C) 2004-2012 Jaro Benes }
{ 32-bit DIB effect with alphachannel }
{ direct works with texture buffer }
{ modified and adapted all adopted functions }
{ }
{*******************************************************}
 
unit DIB;
 
interface
 
{$INCLUDE DelphiXcfg.inc}
{$DEFINE USE_SCANLINE}
 
uses
Windows, SysUtils, Classes, Graphics, Controls;
Windows, SysUtils, Classes, Graphics, Controls,
{$IFDEF VER7UP} Types, {$ENDIF}
{$IFDEF VER9UP} GraphUtil, {$ENDIF}
{$IFDEF VER17UP} UITypes,{$ENDIF}
Math;
 
type
TColorLineStyle = (csSolid, csGradient, csRainbow);
TColorLinePixelGeometry = (pgPoint, pgCircular, pgRectangular);
PRGBQuads = ^TRGBQuads;
TRGBQuads = array[0..255] of TRGBQuad;
 
TPaletteEntries = array[0..255] of TPaletteEntry;
 
PBGRA = ^TBGRA;
TBGRA = packed record
B, G, R, A: Byte;
end;
TLinesA = array[0..0] of TBGRA;
PLinesA = ^TLinesA;
 
PBGR = ^TBGR;
TBGR = packed record
B, G, R: Byte;
end;
 
{ Added this type for New SPecial Effect }
TFilter = array[0..2, 0..2] of SmallInt;
TLines = array[0..0] of TBGR;
PLines = ^TLines;
TBytes = array[0..0] of Byte;
PBytes = ^TBytes;
TPBytes = array[0..0] of PBytes;
PPBytes = ^TPBytes;
{ End of type's }
 
PArrayBGR = ^TArrayBGR;
TArrayBGR = array[0..10000] of TBGR;
TArrayBGR = array[0..0] of TBGR;
 
PArrayByte = ^TArrayByte;
TArrayByte = array[0..10000] of Byte;
TArrayByte = array[0..0] of Byte;
 
PArrayWord = ^TArrayWord;
TArrayWord = array[0..10000] of Word;
TArrayWord = array[0..0] of Word;
 
PArrayDWord = ^TArrayDWord;
TArrayDWord = array[0..10000] of DWord;
TArrayDWord = array[0..0] of DWord;
 
{ TDIB }
{ TDIBPixelFormat }
 
TDIBPixelFormat = record
RBitMask, GBitMask, BBitMask: DWORD;
38,6 → 84,8
RBitCount2, GBitCount2, BBitCount2: DWORD;
end;
 
{ TDIBSharedImage }
 
TDIBSharedImage = class(TSharedImage)
private
FBitCount: Integer;
64,7 → 112,7
constructor Create;
procedure NewImage(AWidth, AHeight, ABitCount: Integer;
const PixelFormat: TDIBPixelFormat; const ColorTable: TRGBQuads; MemoryImage, Compressed: Boolean);
procedure Duplicate(Source: TDIBSharedImage; MemoryImage: Boolean);
procedure Duplicate(Source: TDIBSharedImage; MemoryImage: Boolean); {$IFDEF VER9UP}inline;{$ENDIF}
procedure Compress(Source: TDIBSharedImage);
procedure Decompress(Source: TDIBSharedImage; MemoryImage: Boolean);
procedure ReadData(Stream: TStream; MemoryImage: Boolean);
76,6 → 124,33
destructor Destroy; override;
end;
 
{ TFilterTypeResample }
 
TFilterTypeResample = (ftrBox, ftrTriangle, ftrHermite, ftrBell, ftrBSpline,
ftrLanczos3, ftrMitchell);
 
TDistortType = (dtFast, dtSlow);
{DXFusion effect type}
TFilterMode = (fmNormal, fmMix50, fmMix25, fmMix75);
 
{ TLightSource }
 
TLightSource = record
X, Y: Integer;
Size1, Size2: Integer;
Color: TColor;
end;
 
{ TLightArray }
 
TLightArray = array{$IFNDEF VER4UP}[0..0]{$ENDIF} of TLightsource;
 
{ TMatrixSetting }
 
TMatrixSetting = array[0..9] of Integer;
 
{ TDIB }
 
TDIB = class(TGraphic)
private
FCanvas: TCanvas;
96,6 → 171,10
FTopPBits: Pointer;
FWidth: Integer;
FWidthBytes: Integer;
FLUTDist: array[0..255, 0..255] of Integer;
LG_COUNT: Integer;
LG_DETAIL: Integer;
FFreeList: TList;
procedure AllocHandle;
procedure CanvasChanging(Sender: TObject);
procedure Changing(MemoryImage: Boolean);
113,15 → 192,28
function GetTopPBits: Pointer;
function GetTopPBitsReadOnly: Pointer;
procedure SetBitCount(Value: Integer);
procedure SetImage(Value: TDIBSharedImage);
procedure SetImage(Value: TDIBSharedImage); {$IFDEF VER9UP}inline;{$ENDIF}
procedure SetNowPixelFormat(const Value: TDIBPixelFormat);
procedure SetPixel(X, Y: Integer; Value: DWORD);
procedure StartProgress(const Name: string);
procedure EndProgress;
procedure UpdateProgress(PercentY: Integer);
 
{ Added these 3 functions for New Specials Effects }
function Interval(iMin, iMax, iValue: Integer; iMark: Boolean): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
function IntToByte(i: Integer): Byte; {$IFDEF VER9UP}inline;{$ENDIF}
function TrimInt(i, Min, Max: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
{ End of 3 functions for New Special Effect }
 
procedure Darkness(Amount: Integer);
function GetAlphaChannel: TDIB;
procedure SetAlphaChannel(const Value: TDIB);
function GetClientRect: TRect;
function GetRGBChannel: TDIB;
procedure SetRGBChannel(const Value: TDIB);
protected
procedure DefineProperties(Filer: TFiler); override;
procedure Draw(ACanvas: TCanvas; const Rect: TRect); override;
procedure Draw(ACanvas: TCanvas; const ARect: TRect); override;
function GetEmpty: Boolean; override;
function GetHeight: Integer; override;
function GetPalette: HPalette; override;
131,6 → 223,10
procedure SetPalette(Value: HPalette); override;
procedure SetWidth(Value: Integer); override;
procedure WriteData(Stream: TStream); override;
{$IFDEF VER16UP}
function GetSupportsPartialTransparency: Boolean; override;
{$ENDIF}
function GetTransparent: Boolean; override;
public
ColorTable: TRGBQuads;
PixelFormat: TDIBPixelFormat;
141,6 → 237,9
procedure Compress;
procedure Decompress;
procedure FreeHandle;
function HasAlphaChannel: Boolean;
function AssignAlphaChannel(ALPHA: TDIB; ForceResize: Boolean{$IFDEF VER4UP} = False{$ENDIF}): Boolean;
procedure RetAlphaChannel(out oDIB: TDIB);
procedure LoadFromClipboardFormat(AFormat: Word; AData: THandle;
APalette: HPALETTE); override;
procedure LoadFromStream(Stream: TStream); override;
147,14 → 246,168
procedure SaveToClipboardFormat(var AFormat: Word; var AData: THandle;
var APalette: HPALETTE); override;
procedure SaveToStream(Stream: TStream); override;
procedure SetSize(AWidth, AHeight, ABitCount: Integer);
procedure SetSize(AWidth, AHeight, ABitCount: Integer); {$IFDEF VER5UP}reintroduce;{$ENDIF} //{$IFDEF VER9UP} overload;{$ENDIF}
procedure UpdatePalette;
{ Special effect }
procedure Blur(ABitCount: Integer; Radius: Integer);
procedure Greyscale(ABitCount: Integer);
procedure Mirror(MirrorX, MirrorY: Boolean);
procedure Negative;
procedure Negative; {$IFDEF VER9UP}inline;{$ENDIF}
 
{ Added New Special Effect }
procedure Spray(Amount: Integer);
procedure Emboss;
procedure AddMonoNoise(Amount: Integer);
procedure AddGradiantNoise(Amount: byte);
function Twist(bmp: TDIB; Amount: byte): Boolean;
function FishEye(bmp: TDIB): Boolean;
function SmoothRotateWrap(Bmp: TDIB; cx, cy: Integer; Degree: Extended): Boolean;
procedure Lightness(Amount: Integer);
procedure Saturation(Amount: Integer);
procedure Contrast(Amount: Integer);
procedure AddRGB(aR, aG, aB: Byte);
function Filter(Dest: TDIB; Filter: TFilter): Boolean;
procedure Sharpen(Amount: Integer);
function IntToColor(i: Integer): TBGR; {$IFDEF VER9UP}inline;{$ENDIF}
function Rotate(Dst: TDIB; cx, cy: Integer; Angle: Double): Boolean;
procedure SplitBlur(Amount: Integer);
procedure GaussianBlur(Bmp: TDIB; Amount: Integer);
{ End of New Special Effect }
{
New effect for TDIB
with Some Effects like AntiAlias, Contrast,
Lightness, Saturation, GaussianBlur, Mosaic,
Twist, Splitlight, Trace, Emboss, etc.
Works with 24bit color DIBs.
 
This component is based on TProEffectImage component version 1.0 by
Written By Babak Sateli (babak_sateli@yahoo.com, http://raveland.netfirms.com)
 
and modified by (c) 2004 Jaro Benes
for DelphiX use.
 
Demo was modified into DXForm with function like original
 
DISCLAIMER
This component is provided AS-IS without any warranty of any kind, either express or
implied. This component is freeware and can be used in any software product.
}
procedure DoInvert;
procedure DoAddColorNoise(Amount: Integer);
procedure DoAddMonoNoise(Amount: Integer);
procedure DoAntiAlias;
procedure DoContrast(Amount: Integer);
procedure DoFishEye(Amount: Integer);
procedure DoGrayScale;
procedure DoLightness(Amount: Integer);
procedure DoDarkness(Amount: Integer);
procedure DoSaturation(Amount: Integer);
procedure DoSplitBlur(Amount: Integer);
procedure DoGaussianBlur(Amount: Integer);
procedure DoMosaic(Size: Integer);
procedure DoTwist(Amount: Integer);
procedure DoSplitlight(Amount: Integer);
procedure DoTile(Amount: Integer);
procedure DoSpotLight(Amount: Integer; Spot: TRect);
procedure DoTrace(Amount: Integer);
procedure DoEmboss;
procedure DoSolorize(Amount: Integer);
procedure DoPosterize(Amount: Integer);
procedure DoBrightness(Amount: Integer);
procedure DoResample(AmountX, AmountY: Integer; TypeResample: TFilterTypeResample);
{rotate}
procedure DoSmoothRotate(Src: TDIB; cx, cy: Integer; Angle: Extended);
procedure DoColorize(ForeColor, BackColor: TColor);
{Simple explosion spoke effect}
procedure DoNovaEffect(const sr, sg, sb, cx, cy, radius,
nspokes, randomhue, randomspok, randgauss: Integer; onProgress: TProgressEvent);
 
{Simple Mandelbrot-set drawing}
procedure DrawMandelbrot(ao, au: Integer; bo, bu: Double);
 
{Sephia effect}
procedure SephiaEffect(Depth: Integer{$IFDEF VER4UP} = 20{$ENDIF});
 
{Simple blend pixel}
procedure BlendPixel(const X, Y: Integer; aColor: Cardinal; Alpha: Byte); {$IFDEF VER9UP}inline;{$ENDIF}
{Line in polar system}
procedure LinePolar(x, y: Integer; AngleInDegree, Length: extended;
Color: cardinal);
 
{special version Dark/Light procedure in percent}
procedure Darker(Percent: Integer);
procedure Lighter(Percent: Integer);
 
{Simple graphical crypt}
procedure EncryptDecrypt(const Key: Integer);
 
{ Standalone DXFusion }
{--- c o n F u s i o n ---}
{By Joakim Back, www.back.mine.nu}
{Huge thanks to Ilkka Tuomioja for helping out with the project.}
 
{
modified by (c) 2005 Jaro Benes for DelphiX use.
}
 
procedure CreateDIBFromBitmap(const Bitmap: TBitmap);
{Drawing Methods.}
procedure DrawOn(Dest: TRect; DestCanvas: TCanvas;
Xsrc, Ysrc: Integer);
procedure DrawTo(SrcDIB: TDIB; X, Y, Width, Height, SourceX,
SourceY: Integer);
procedure DrawTransparent(SrcDIB: TDIB; const X, Y, Width, Height,
SourceX, SourceY: Integer; const Color: TColor); {$IFDEF VER5UP} reintroduce;{$ENDIF} //{$IFDEF VER9UP} overload;{$ENDIF}
procedure DrawShadow(SrcDIB: TDIB; X, Y, Width, Height, Frame: Integer;
FilterMode: TFilterMode);
procedure DrawShadows(SrcDIB: TDIB; X, Y, Width, Height, Frame: Integer;
Alpha: Byte);
procedure DrawDarken(SrcDIB: TDIB; X, Y, Width, Height,
Frame: Integer);
procedure DrawAdditive(SrcDIB: TDIB; X, Y, Width, Height: Integer; Alpha: Integer{$IFDEF VER4UP} = 255{$ENDIF};
Frame: Integer{$IFDEF VER4UP} = 0{$ENDIF});
procedure DrawQuickAlpha(SrcDIB: TDIB; const X, Y, Width, Height,
SourceX, SourceY: Integer; const Color: TColor;
FilterMode: TFilterMode);
procedure DrawTranslucent(SrcDIB: TDIB; const X, Y, Width, Height,
SourceX, SourceY: Integer; const Color: TColor);
procedure DrawMorphed(SrcDIB: TDIB; const X, Y, Width, Height, SourceX,
SourceY: Integer; const Color: TColor);
procedure DrawAlpha(SrcDIB: TDIB; const X, Y, Width, Height, SourceX,
SourceY, Alpha: Integer; const Color: TColor);
procedure DrawAlphaMask(SrcDIB, MaskDIB: TDIB; const X, Y, Width,
Height, SourceX, SourceY: Integer);
procedure DrawAntialias(SrcDIB: TDIB);
procedure Draw3x3Matrix(SrcDIB: TDIB; Setting: TMatrixSetting);
procedure DrawMono(SrcDIB: TDIB; const X, Y, Width, Height, SourceX,
SourceY: Integer; const TransColor, ForeColor, BackColor: TColor);
{One-color Filters.}
procedure FilterLine(X1, Y1, X2, Y2: Integer; Color: TColor;
FilterMode: TFilterMode); {$IFDEF VER9UP}inline;{$ENDIF}
procedure FilterRect(X, Y, Width, Height: Integer; Color: TColor;
FilterMode: TFilterMode); {$IFDEF VER9UP}inline;{$ENDIF}
{ Lightsource. }
procedure InitLight(Count, Detail: Integer);
procedure DrawLights(FLight: TLightArray; AmbientLight: TColor);
//
// effect for special purpose
//
procedure FadeOut(DIB2: TDIB; Step: Byte); {$IFDEF VER9UP} inline; {$ENDIF}
procedure DoZoom(DIB2: TDIB; ZoomRatio: Real);
procedure DoBlur(DIB2: TDIB);
procedure FadeIn(DIB2: TDIB; Step: Byte); {$IFDEF VER9UP} inline; {$ENDIF}
procedure FillDIB8(Color: Byte); {$IFDEF VER9UP} inline; {$ENDIF}
procedure DoRotate(DIB1: TDIB; cX, cY, Angle: Integer);
procedure Distort(DIB1: TDIB; dt: TDistortType; cX, cY, Angle: Integer; Factor: Real);
function Ink(DIB: TDIB; const SprayInit: Boolean; const AmountSpray: Integer): Boolean;
// lines
procedure AntialiasedLine(x1, y1, x2, y2: Integer; color: TColor); {$IFDEF VER9UP} inline; {$ENDIF}
function GetColorBetween(StartColor, EndColor: TColor; Pointvalue,
FromPoint, ToPoint: Extended): TColor;
procedure ColoredLine(const iStart, iEnd: TPoint; iColorStyle: TColorLineStyle;
iGradientFrom, iGradientTo: TColor; iPixelGeometry: TColorLinePixelGeometry;
iRadius: WORD);
// standard property
property BitCount: Integer read FBitCount write SetBitCount;
property BitmapInfo: PBitmapInfo read GetBitmapInfo;
property BitmapInfoSize: Integer read GetBitmapInfoSize;
174,8 → 427,15
property TopPBitsReadOnly: Pointer read GetTopPBitsReadOnly;
property Width: Integer read FWidth write SetWidth;
property WidthBytes: Integer read FWidthBytes;
property AlphaChannel: TDIB read GetAlphaChannel write SetAlphaChannel;
property RGBChannel: TDIB read GetRGBChannel write SetRGBChannel;
function CreateBitmapFromDIB: TBitmap;
procedure Fill(aColor: TColor);
property ClientRect: TRect read GetClientRect;
end;
 
{ TDIBitmap }
 
TDIBitmap = class(TDIB) end;
 
{ TCustomDXDIB }
235,10 → 495,10
 
TDXPaintBox = class(TCustomDXPaintBox)
published
{$IFDEF DelphiX_Spt4}property Anchors;{$ENDIF}
{$IFDEF VER4UP}property Anchors; {$ENDIF}
property AutoStretch;
property Center;
{$IFDEF DelphiX_Spt4}property Constraints;{$ENDIF}
{$IFDEF VER4UP}property Constraints; {$ENDIF}
property DIB;
property KeepAspect;
property Stretch;
261,34 → 521,140
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
{$IFDEF VER9UP}property OnMouseWheel; {$ENDIF}
{$IFDEF VER9UP}property OnResize; {$ENDIF}
{$IFDEF VER9UP}property OnCanResize; {$ENDIF}
{$IFDEF VER9UP}property OnContextPopup; {$ENDIF}
property OnStartDrag;
end;
 
function MakeDIBPixelFormat(RBitCount, GBitCount, BBitCount: Integer): TDIBPixelFormat;
function MakeDIBPixelFormatMask(RBitMask, GBitMask, BBitMask: Integer): TDIBPixelFormat;
function pfRGB(const PixelFormat: TDIBPixelFormat; R, G, B: Byte): DWORD;
procedure pfGetRGB(const PixelFormat: TDIBPixelFormat; Color: DWORD; var R, G, B: Byte);
function pfGetRValue(const PixelFormat: TDIBPixelFormat; Color: DWORD): Byte;
function pfGetGValue(const PixelFormat: TDIBPixelFormat; Color: DWORD): Byte;
function pfGetBValue(const PixelFormat: TDIBPixelFormat; Color: DWORD): Byte;
const
DefaultFilterRadius: array[TFilterTypeResample] of Single = (0.5, 1, 1, 1.5, 2, 3, 2);
 
function MakeDIBPixelFormat(RBitCount, GBitCount, BBitCount: Integer): TDIBPixelFormat; {$IFDEF VER9UP}inline;{$ENDIF}
function MakeDIBPixelFormatMask(RBitMask, GBitMask, BBitMask: Integer): TDIBPixelFormat; {$IFDEF VER9UP}inline;{$ENDIF}
function pfRGB(const PixelFormat: TDIBPixelFormat; R, G, B: Byte): DWORD; {$IFDEF VER9UP}inline;{$ENDIF}
procedure pfGetRGB(const PixelFormat: TDIBPixelFormat; Color: DWORD; var R, G, B: Byte); {$IFDEF VER9UP}inline;{$ENDIF}
function pfGetRValue(const PixelFormat: TDIBPixelFormat; Color: DWORD): Byte; {$IFDEF VER9UP}inline;{$ENDIF}
function pfGetGValue(const PixelFormat: TDIBPixelFormat; Color: DWORD): Byte; {$IFDEF VER9UP}inline;{$ENDIF}
function pfGetBValue(const PixelFormat: TDIBPixelFormat; Color: DWORD): Byte; {$IFDEF VER9UP}inline;{$ENDIF}
 
function GreyscaleColorTable: TRGBQuads;
 
function RGBQuad(R, G, B: Byte): TRGBQuad;
function PaletteEntryToRGBQuad(const Entry: TPaletteEntry): TRGBQuad;
function PaletteEntriesToRGBQuads(const Entries: TPaletteEntries): TRGBQuads;
function RGBQuadToPaletteEntry(const RGBQuad: TRGBQuad): TPaletteEntry;
function RGBQuadsToPaletteEntries(const RGBQuads: TRGBQuads): TPaletteEntries;
function RGBQuad(R, G, B: Byte): TRGBQuad; {$IFDEF VER9UP}inline;{$ENDIF}
function PaletteEntryToRGBQuad(const Entry: TPaletteEntry): TRGBQuad; {$IFDEF VER9UP}inline;{$ENDIF}
function PaletteEntriesToRGBQuads(const Entries: TPaletteEntries): TRGBQuads; {$IFDEF VER9UP}inline;{$ENDIF}
function RGBQuadToPaletteEntry(const RGBQuad: TRGBQuad): TPaletteEntry; {$IFDEF VER9UP}inline;{$ENDIF}
function RGBQuadsToPaletteEntries(const RGBQuads: TRGBQuads): TPaletteEntries; {$IFDEF VER9UP}inline;{$ENDIF}
 
function PosValue(Value: Integer): Integer;
 
type
TOC = 0..511;
function DSin(const C: TOC): Single; {$IFDEF VER9UP}inline; {$ENDIF}
function DCos(const C: TOC): Single; {$IFDEF VER9UP}inline; {$ENDIF}
 
{ Added Constants for TFilter Type }
const
EdgeFilter: TFilter = ((-1, -1, -1), (-1, 8, -1), (-1, -1, -1));
StrongOutlineFilter: TFilter = ((-100, 0, 0), (0, 0, 0), (0, 0, 100));
Enhance3DFilter: TFilter = ((-100, 5, 5), (5, 5, 5), (5, 5, 100));
LinearFilter: TFilter = ((-40, -40, -40), (-40, 255, -40), (-40, -40, -40));
GranularFilter: TFilter = ((-20, 5, 20), (5, -10, 5), (100, 5, -100));
SharpFilter: TFilter = ((-2, -2, -2), (-2, 20, -2), (-2, -2, -2));
{ End of constants }
 
{ Added Constants for DXFusion Type }
const
{ 3x3 Matrix Presets. }
msEmboss: TMatrixSetting = (-1, -1, 0, -1, 6, 1, 0, 1, 1, 6);
msHardEmboss: TMatrixSetting = (-4, -2, -1, -2, 10, 2, -1, 2, 4, 8);
msBlur: TMatrixSetting = (1, 2, 1, 2, 4, 2, 1, 2, 1, 16);
msSharpen: TMatrixSetting = (-1, -1, -1, -1, 15, -1, -1, -1, -1, 7);
msEdgeDetect: TMatrixSetting = (-1, -1, -1, -1, 8, -1, -1, -1, -1, 1);
 
{Proportionaly scale of size, for recountin image sizes}
function GetScale(SourceWidth, SourceHeight, TargetWidth, TargetHeight: Integer): Single; {$IFDEF VER9UP}inline;{$ENDIF}
 
procedure MakeDib(out DIB: TDIB; const iWidth, iHeight, iBitCount: Integer; iFillColor: TColor{$IFDEF VER4UP} = clBlack{$ENDIF}); {$IFDEF VER4UP}overload; {$ENDIF}
procedure{$IFDEF VER4UP}MakeDib{$ELSE}MakeDIB2{$ENDIF}(out DIB: TDIB; iBitmap: TBitmap); {$IFDEF VER4UP}overload; {$ENDIF}
procedure MakeDIB32MaskByColor(var D: TDIB; const MaskColor: TColor{$IFDEF VER4UP} = clWhite{$ENDIF});
 
function BGR(B, G, R: Byte): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
 
implementation
 
uses DXConsts;
uses DXConsts, {$IFDEF PNG_GRAPHICS}pngimage,{$ENDIF} jpeg;
 
function BGR(B, G, R: Byte): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
begin
Result := (B shl 16) or (G shl 8) or R;
end;
 
procedure MakeDIB32MaskByColor(var D: TDIB; const MaskColor: TColor{$IFDEF VER4UP} = clWhite{$ENDIF});
type
PRGBA = ^TRGBA;
TRGBA = array[0..0] of Windows.TRGBQuad;
var
p: PRGBA;
y: Integer;
x: Integer;
B: TDIB;
begin
MakeDib(B, D.Width, D.Height, 32, $FFFFFF);
B.RGBChannel := D.RGBChannel;
if B.BitCount = 32 then
for Y := 0 to B.Height - 1 do
begin
p := B.ScanLine[Y];
for X := 0 to B.Width - 1 do
begin
if (p[X].rgbBlue = GetBValue(MaskColor)) and (p[X].rgbGreen = GetGValue(MaskColor)) and (p[X].rgbRed = GetRValue(MaskColor)) then
p[X].rgbReserved := 0
else
p[X].rgbReserved := $FF
end
end;
d.Assign(B);
end;
 
function GetScale(SourceWidth, SourceHeight, TargetWidth, TargetHeight: Integer): Single;
var
XScale, YScale: Single;
begin
XScale := 1;
YScale := 1;
if TargetWidth < SourceWidth then
XScale := TargetWidth / SourceWidth;
if TargetHeight < SourceHeight then
YScale := TargetHeight / SourceHeight;
Result := XScale;
if YScale < Result then
Result := YScale;
end;
 
{$IFNDEF VER4UP}
function Max(B1, B2: Integer): Integer;
begin
if B1>=B2 then Result := B1 else Result := B2;
end;
 
function Min(B1, B2: Integer): Integer;
begin
if B1 <= B2 then Result := B1 else Result := B2;
end;
{$ENDIF}
 
function DSin(const C: TOC): Single; {$IFDEF VER9UP}inline; {$ENDIF}
begin
Result := sin(((c * 360) / 511) * Pi / 180);
end;
 
function DCos(const C: TOC): Single; {$IFDEF VER9UP}inline; {$ENDIF}
begin
Result := cos(((c * 360) / 511) * Pi / 180);
end;
 
function MakeDIBPixelFormat(RBitCount, GBitCount, BBitCount: Integer): TDIBPixelFormat;
begin
Result.RBitMask := ((1 shl RBitCount)-1) shl (GBitCount+BBitCount);
305,9 → 671,7
Result.BShift := 8-BBitCount;
end;
 
function MakeDIBPixelFormatMask(RBitMask, GBitMask, BBitMask: Integer): TDIBPixelFormat;
 
function GetBitCount(b: Integer): Integer;
function GetBitCount(b: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
var
i: Integer;
begin
322,6 → 686,7
end;
end;
 
function MakeDIBPixelFormatMask(RBitMask, GBitMask, BBitMask: Integer): TDIBPixelFormat;
begin
Result := MakeDIBPixelFormat(GetBitCount(RBitMask), GetBitCount(GBitMask),
GetBitCount(BBitMask));
352,7 → 717,7
with PixelFormat do
begin
Result := (Color and RBitMask) shr RShift;
Result := Result or (Result shr RBitCount);
Result := Result or (Result shr RBitCount2);
end;
end;
 
361,7 → 726,7
with PixelFormat do
begin
Result := (Color and GBitMask) shr GShift;
Result := Result or (Result shr GBitCount);
Result := Result or (Result shr GBitCount2);
end;
end;
 
370,7 → 735,7
with PixelFormat do
begin
Result := (Color and BBitMask) shl BShift;
Result := Result or (Result shr BBitCount);
Result := Result or (Result shr BBitCount2);
end;
end;
 
447,6 → 812,8
RBitMask, GBitMask, BBitMask: DWORD;
end;
 
{ TPaletteItem }
 
TPaletteItem = class(TCollectionItem)
private
ID: Integer;
456,9 → 823,11
ColorTableCount: Integer;
destructor Destroy; override;
procedure AddRef;
procedure Release;
procedure Release; {$IFDEF VER17UP}reintroduce;{$ENDIF}
end;
 
{ TPaletteManager }
 
TPaletteManager = class
private
FList: TCollection;
468,6 → 837,8
procedure DeletePalette(var Palette: HPalette);
end;
 
{ TPaletteItem }
 
destructor TPaletteItem.Destroy;
begin
DeleteObject(Palette);
485,6 → 856,8
if RefCount<=0 then Free;
end;
 
{ TPaletteManager }
 
constructor TPaletteManager.Create;
begin
inherited Create;
577,6 → 950,8
Result := FPaletteManager;
end;
 
{ TDIBSharedImage }
 
constructor TDIBSharedImage.Create;
begin
inherited Create;
592,8 → 967,10
InfoOfs: Integer;
UsePixelFormat: Boolean;
begin
{$IFNDEF D17UP}
{self recreation is not allowed here}
Create;
 
{$ENDIF}
{ Pixel format check }
case ABitCount of
1 : if not ((PixelFormat.RBitMask=$FF0000) and (PixelFormat.GBitMask=$00FF00) and (PixelFormat.BBitMask=$0000FF)) then
602,16 → 979,19
raise EInvalidGraphicOperation.Create(SInvalidDIBPixelFormat);
8 : if not ((PixelFormat.RBitMask=$FF0000) and (PixelFormat.GBitMask=$00FF00) and (PixelFormat.BBitMask=$0000FF)) then
raise EInvalidGraphicOperation.Create(SInvalidDIBPixelFormat);
16: begin
16:
begin
if not (((PixelFormat.RBitMask=$7C00) and (PixelFormat.GBitMask=$03E0) and (PixelFormat.BBitMask=$001F)) or
((PixelFormat.RBitMask=$F800) and (PixelFormat.GBitMask=$07E0) and (PixelFormat.BBitMask=$001F))) then
raise EInvalidGraphicOperation.Create(SInvalidDIBPixelFormat);
end;
24: begin
24:
begin
if not ((PixelFormat.RBitMask=$FF0000) and (PixelFormat.GBitMask=$00FF00) and (PixelFormat.BBitMask=$0000FF)) then
raise EInvalidGraphicOperation.Create(SInvalidDIBPixelFormat);
end;
32: begin
32:
begin
if not ((PixelFormat.RBitMask=$FF0000) and (PixelFormat.GBitMask=$00FF00) and (PixelFormat.BBitMask=$0000FF)) then
raise EInvalidGraphicOperation.Create(SInvalidDIBPixelFormat);
end;
653,11 → 1033,13
biCompression := BI_BITFIELDS
else
begin
biCompression := 0; //none
if (FBitCount=4) and (Compressed) then
biCompression := BI_RLE4
else if (FBitCount=8) and (Compressed) then
biCompression := BI_RLE8
else
if FBitCount = 24 then
biCompression := BI_RGB;
end;
biSizeImage := FSize;
696,7 → 1078,8
FPBits := Pointer(GlobalAlloc(GMEM_FIXED, FSize));
if FPBits=nil then
OutOfMemoryError;
end else
end
else
begin
FDC := CreateCompatibleDC(0);
 
713,11 → 1096,17
 
procedure TDIBSharedImage.Duplicate(Source: TDIBSharedImage; MemoryImage: Boolean);
begin
if Source = nil then Exit; //no source
if Source.FSize=0 then
begin
{$IFNDEF D17UP}
{self recreation is not allowed here}
Create;
{$ENDIF}
FMemoryImage := MemoryImage;
end else
end
else
begin
NewImage(Source.FWidth, Source.FHeight, Source.FBitCount,
Source.FPixelFormat, Source.FColorTable, MemoryImage, Source.FCompressed);
726,7 → 1115,8
FBitmapInfo.bmiHeader.biSizeImage := Source.FBitmapInfo.bmiHeader.biSizeImage;
GetMem(FPBits, FBitmapInfo.bmiHeader.biSizeImage);
Move(Source.FPBits^, FPBits^, FBitmapInfo.bmiHeader.biSizeImage);
end else
end
else
begin
Move(Source.FPBits^, FPBits^, FBitmapInfo.bmiHeader.biSizeImage);
end;
789,7 → 1179,8
 
AllocByte^ := B1;
AllocByte^ := B2;
end else
end
else
if (Source.FWidth-x>5) and ((GetPixel(x)<>GetPixel(x+2)) or (GetPixel(x+1)<>GetPixel(x+3))) and
((GetPixel(x+2)=GetPixel(x+4)) and (GetPixel(x+3)=GetPixel(x+5))) then
begin
797,7 → 1188,8
AllocByte^ := 2;
AllocByte^ := (GetPixel(x) shl 4) or GetPixel(x+1);
Inc(x, 2);
end else
end
else
begin
if (Source.FWidth-x<4) then
begin
815,7 → 1207,8
AllocByte^ := GetPixel(x) shl 4;
Inc(x);
end;
end else
end
else
begin
{ Absolute mode }
PB1 := Size; AllocByte;
904,7 → 1297,8
 
AllocByte^ := B1;
AllocByte^ := B2;
end else
end
else
if (Source.FWidth-x>2) and (Src^<>PByte(Integer(Src)+1)^) and (PByte(Integer(Src)+1)^=PByte(Integer(Src)+2)^) then
begin
{ Encoding mode }
911,7 → 1305,8
AllocByte^ := 1;
AllocByte^ := Src^; Inc(Src);
Inc(x);
end else
end
else
begin
if (Source.FWidth-x<4) then
begin
924,13 → 1319,15
AllocByte^ := 1;
AllocByte^ := Src^; Inc(Src);
Inc(x, 2);
end else
end
else
begin
AllocByte^ := 1;
AllocByte^ := Src^; Inc(Src);
Inc(x);
end;
end else
end
else
begin
{ Absolute mode }
PB1 := Size; AllocByte;
979,7 → 1376,8
begin
if Source.FCompressed then
Duplicate(Source, Source.FMemoryImage)
else begin
else
begin
NewImage(Source.FWidth, Source.FHeight, Source.FBitCount,
Source.FPixelFormat, Source.FColorTable, True, True);
case FBitmapInfo.bmiHeader.biCompression of
1030,7 → 1428,8
if i and 1=0 then
begin
C := Src^; Inc(Src);
end else
end
else
begin
C := C shl 4;
end;
1044,7 → 1443,8
Inc(X);
end;
end;
end else
end
else
begin
{ Encoding mode }
Dest := Pointer(Longint(FPBits)+Y*FWidthBytes);
1101,7 → 1501,8
{ Absolute mode }
Move(Src^, Dest^, B2); Inc(Dest, B2); Inc(Src, B2);
end;
end else
end
else
begin
{ Encoding mode }
FillChar(Dest^, B1, B2); Inc(Dest, B1);
1115,7 → 1516,8
begin
if not Source.FCompressed then
Duplicate(Source, MemoryImage)
else begin
else
begin
NewImage(Source.FWidth, Source.FHeight, Source.FBitCount,
Source.FPixelFormat, Source.FColorTable, MemoryImage, False);
case Source.FBitmapInfo.bmiHeader.biCompression of
1136,6 → 1538,7
procedure LoadRLE4;
begin
FSize := BI.biSizeImage;
//GetMem(FPBits, FSize);
FPBits := GlobalAllocPtr(GMEM_FIXED, FSize);
FBitmapInfo.bmiHeader.biSizeImage := FSize;
Stream.ReadBuffer(FPBits^, FSize);
1144,6 → 1547,7
procedure LoadRLE8;
begin
FSize := BI.biSizeImage;
//GetMem(FPBits, FSize);
FPBits := GlobalAllocPtr(GMEM_FIXED, FSize);
FBitmapInfo.bmiHeader.biSizeImage := FSize;
Stream.ReadBuffer(FPBits^, FSize);
1157,7 → 1561,8
begin
for y:=0 to Abs(BI.biHeight)-1 do
Stream.ReadBuffer(Pointer(Integer(FTopPBits)+y*FNextLine)^, FWidthBytes);
end else
end
else
begin
Stream.ReadBuffer(FPBits^, FSize);
end;
1170,12 → 1575,17
AColorTable: TRGBQuads;
APixelFormat: TDIBPixelFormat;
begin
if not Assigned(Stream) then Exit;
{ Header size reading }
i := Stream.Read(BI.biSize, 4);
 
if i=0 then
begin
{$IFNDEF D17UP}
{self recreation is not allowed here}
Create;
{$ENDIF}
Exit;
end;
if i<>4 then
1216,7 → 1626,8
Stream.ReadBuffer(Localpf, SizeOf(Localpf));
with Localpf do
APixelFormat := MakeDIBPixelFormatMask(RBitMask, GBitMask, BBitMask);
end else
end
else
begin
if BI.biBitCount=16 then
APixelFormat := MakeDIBPixelFormat(5, 5, 5)
1243,13 → 1654,14
with BCRGB[i] do
AColorTable[i] := RGBQuad(rgbtRed, rgbtGreen, rgbtBlue);
end;
end else
end
else
begin
{ Windows type }
Stream.ReadBuffer(AColorTable, SizeOf(TRGBQuad)*PalCount);
end;
 
{ DIB ì¬ }
{ DIB compilation }
NewImage(BI.biWidth, Abs(BI.biHeight), BI.biBitCount, APixelFormat, AColorTable,
MemoryImage, BI.biCompression in [BI_RLE4, BI_RLE8]);
 
1270,7 → 1682,9
begin
if FOldHandle<>0 then SelectObject(FDC, FOldHandle);
DeleteObject(FHandle);
end else
end
else
// GlobalFree(THandle(FPBits));
begin
if FPBits<>nil then
GlobalFreePtr(FPBits);
1333,12 → 1747,28
begin
inherited Create;
SetImage(EmptyDIBImage);
 
FFreeList := TList.Create;
end;
 
destructor TDIB.Destroy;
var
D: TDIB;
begin
SetImage(EmptyDIBImage);
FCanvas.Free;
 
while FFreeList.Count > 0 do
try
D := TDIB(FFreeList[0]);
FFreeList.Remove(D);
if (D <> nil) and (D.Height > 0) and (D.Width > 0) then //is really pointed to image?
D.Free;
except
// it is silent exception, but it can through outer (abstract) exception
end;
FFreeList.Free;
 
inherited Destroy;
end;
 
1372,12 → 1802,14
if DIBSectionRec^.dsBm.bmBitsPixel>=24 then
begin
PixelFormat := MakeDIBPixelFormat(8, 8, 8);
end else
end
else
if DIBSectionRec^.dsBm.bmBitsPixel>8 then
begin
PixelFormat := MakeDIBPixelFormat(DIBSectionRec^.dsBitfields[0],
PixelFormat := MakeDIBPixelFormatMask(DIBSectionRec^.dsBitfields[0], //correct I.Ceneff, thanks
DIBSectionRec^.dsBitfields[1], DIBSectionRec^.dsBitfields[2]);
end else
end
else
begin
PixelFormat := MakeDIBPixelFormat(8, 8, 8);
end;
1393,14 → 1825,64
end;
 
procedure AssignGraphic(Source: TGraphic);
{$IFDEF PNG_GRAPHICS}
var
alpha: TDIB;
png: {$IFDEF VER12UP}TPngImage{$ELSE}TPNGObject{$ENDIF};
i, j: Integer;
q: pByteArray;
{$ENDIF}
begin
{$IFDEF PNG_GRAPHICS}
if Source is {$IFDEF VER12UP}TPngImage{$ELSE}TPNGObject{$ENDIF} then
begin
alpha := TDIB.Create;
try
{png image}
png := {$IFDEF VER12UP}TPngImage{$ELSE}TPNGObject{$ENDIF}.Create;
try
png.Assign(Source);
if png.TransparencyMode = ptmPartial then
begin
Alpha.SetSize(png.Width, png.Height, 8);
{separate alpha}
for i := 0 to png.Height - 1 do
begin
q := png.AlphaScanline[i];
for j := 0 to png.Width - 1 do
alpha.Pixels[j,i] := q[j];
end;
end;
SetSize(png.Width, png.Height, 32);
FillChar(PBits^, Size, 0);
Canvas.Draw(0, 0, png);
Transparent := png.Transparent;
finally
png.Free;
end;
if not alpha.Empty then
AssignAlphaChannel(alpha);
finally
alpha.Free;
end;
end
else
{$ENDIF}
if Source is TBitmap then
AssignBitmap(TBitmap(Source))
else
begin
SetSize(Source.Width, Source.Height, 32);
FillChar(PBits^, Size, 0);
Canvas.Draw(0, 0, Source);
Transparent := Source.Transparent;
if not HasAlphaChannel then
begin
SetSize(Source.Width, Source.Height, 24);
FillChar(PBits^, Size, 0);
Canvas.Draw(0, 0, Source);
Transparent := Source.Transparent;
end
end;
end;
 
1425,7 → 1907,7
inherited Assign(Source);
end;
 
procedure TDIB.Draw(ACanvas: TCanvas; const Rect: TRect);
procedure TDIB.Draw(ACanvas: TCanvas; const ARect: TRect);
var
OldPalette: HPalette;
OldMode: Integer;
1436,7 → 1918,8
begin
OldPalette := SelectPalette(ACanvas.Handle, Palette, False);
RealizePalette(ACanvas.Handle);
end else
end
else
OldPalette := 0;
try
OldMode := SetStretchBltMode(ACanvas.Handle, COLORONCOLOR);
1444,14 → 1927,18
GdiFlush;
if FImage.FMemoryImage then
begin
with Rect do
StretchDIBits(ACanvas.Handle, Left, Top, Right - Left, Bottom - Top,
0, 0, Width, Height, FImage.FPBits, FImage.FBitmapInfo^, DIB_RGB_COLORS , ACanvas.CopyMode);
end else
with ARect do
begin
with Rect do
if StretchDIBits(ACanvas.Handle, Left, Top, Right - Left, Bottom - Top,
0, 0, Self.Width, Self.Height, FImage.FPBits, FImage.FBitmapInfo^, DIB_RGB_COLORS, ACanvas.CopyMode) = 0 then
MessageBeep(1);
end;
end
else
begin
with ARect do
StretchBlt(ACanvas.Handle, Left, Top, Right - Left, Bottom - Top,
FImage.FDC, 0, 0, Width, Height, ACanvas.CopyMode);
FImage.FDC, 0, 0, Self.Width, Self.Height, ACanvas.CopyMode);
end;
finally
SetStretchBltMode(ACanvas.Handle, OldMode);
1557,6 → 2044,161
end;
end;
 
type
PRGBA = ^TRGBA;
TRGBA = array[0..0] of Windows.TRGBQuad;
 
function TDIB.HasAlphaChannel: Boolean;
{give that DIB contain the alphachannel}
var
p: PRGBA;
X, Y: Integer;
begin
Result := True;
if BitCount = 32 then
for Y := 0 to Height - 1 do
begin
p := ScanLine[Y];
for X := 0 to Width - 1 do
begin
if p[X].rgbReserved <> $0 then Exit;
end
end;
Result := False;
end;
 
function TDIB.AssignAlphaChannel(ALPHA: TDIB; ForceResize: Boolean{$IFDEF VER4UP} = False{$ENDIF}): Boolean;
{copy alphachannel from other DIB or add from DIB8}
var
p32_0, p32_1: PRGBA;
p24: Pointer;
pB: PArrayByte;
X, Y: Integer;
tmpDIB, qAlpha: TDIB;
begin
Result := False;
if GetEmpty then Exit;
{Alphachannel can be copy into 32bit DIB only!}
if BitCount <> 32 then
begin
tmpDIB := TDIB.Create;
try
tmpDIB.Assign(Self);
Clear;
SetSize(tmpDIB.Width, tmpDIB.Height, 32);
Canvas.Draw(0, 0, tmpDIB);
finally
tmpDIB.Free;
end;
end;
qAlpha := TDIB.Create;
try
if not Assigned(Alpha) then Exit;
if ForceResize then
begin
{create temp}
tmpDIB := TDIB.Create;
try
{picture}
tmpDIB.Assign(ALPHA);
{resample size}
tmpDIB.DoResample(Width, Height, ftrBSpline);
{convert to greyscale}
tmpDIB.Greyscale(8);
{return picture to qAlpha}
qAlpha.Assign(tmpDIB);
finally
tmpDIB.Free;
end;
end
else
{Must be the same size!}
if not ((Width = ALPHA.Width) and (Height = ALPHA.Height)) then Exit
else qAlpha.Assign(ALPHA);
{It works now with qAlpha only}
case qAlpha.BitCount of
24:
begin
for Y := 0 to Height - 1 do
begin
p32_0 := ScanLine[Y];
p24 := qAlpha.ScanLine[Y];
for X := 0 to Width - 1 do with PBGR(p24)^ do
begin
p32_0[X].rgbReserved := Round(0.30 * R + 0.59 * G + 0.11 * B);
end
end;
end;
32:
begin
for Y := 0 to Height - 1 do
begin
p32_0 := ScanLine[Y];
p32_1 := qAlpha.ScanLine[Y];
for X := 0 to Width - 1 do
begin
p32_0[X].rgbReserved := p32_1[X].rgbReserved;
end
end;
end;
8:
begin
for Y := 0 to Height - 1 do
begin
p32_0 := ScanLine[Y];
pB := qAlpha.ScanLine[Y];
for X := 0 to Width - 1 do
begin
p32_0[X].rgbReserved := pB[X];
end
end;
end;
1:
begin
for Y := 0 to Height - 1 do
begin
p32_0 := ScanLine[Y];
pB := qAlpha.ScanLine[Y];
for X := 0 to Width - 1 do
begin
if pB[X] = 0 then
p32_0[X].rgbReserved := $FF
else
p32_0[X].rgbReserved := 0
end
end;
end;
else
Exit;
end;
Result := True;
finally
qAlpha.Free;
end;
end;
 
procedure TDIB.RetAlphaChannel(out oDIB: TDIB);
{Store alphachannel information into DIB8}
var
p0: PRGBA;
pB: PArrayByte;
X, Y: Integer;
begin
oDIB := nil;
if not HasAlphaChannel then Exit;
oDIB := TDIB.Create;
oDIB.SetSize(Width, Height, 8);
for Y := 0 to Height - 1 do
begin
p0 := ScanLine[Y];
pB := oDIB.ScanLine[Y];
for X := 0 to Width - 1 do
begin
pB[X] := p0[X].rgbReserved;
end
end;
end;
 
function TDIB.GetBitmapInfo: PBitmapInfo;
begin
Result := FImage.FBitmapInfo;
1643,6 → 2285,13
Result := Pointer(Integer(FTopPBits)+Y*FNextLine);
end;
 
{$IFDEF VER16UP}
function TDIB.GetSupportsPartialTransparency: Boolean;
begin
Result := (FBitCount = 32) and HasAlphaChannel;
end;
{$ENDIF}
 
function TDIB.GetTopPBits: Pointer;
begin
Changing(True);
1659,6 → 2308,11
Result := FTopPBits;
end;
 
function TDIB.GetTransparent: Boolean;
begin
Result := (FBitCount = 32) and HasAlphaChannel;
end;
 
function TDIB.GetWidth: Integer;
begin
Result := FWidth;
1683,7 → 2337,7
begin
case FBitCount of
1 : Result := (PArrayByte(Integer(FTopPBits)+Y*FNextLine)[X shr 3] and Mask1[X and 7]) shr Shift1[X and 7];
4 : Result := (PArrayByte(Integer(FTopPBits)+Y*FNextLine)[X shr 1] and Mask4[X and 1]) shr Shift4[X and 1];
4: Result := ((PArrayByte(Integer(FTopPBits) + Y * FNextLine)[X shr 1] and Mask4[X and 1]) shr Shift4[X and 1]);
8 : Result := PArrayByte(Integer(FTopPBits)+Y*FNextLine)[X];
16: Result := PArrayWord(Integer(FTopPBits)+Y*FNextLine)[X];
24: with PArrayBGR(Integer(FTopPBits)+Y*FNextLine)[X] do
1693,6 → 2347,17
end;
end;
 
function TDIB.GetRGBChannel: TDIB;
{Store RGB channel information into DIB24}
begin
Result := nil;
if Self.Empty then Exit;
Result := TDIB.Create;
Result.SetSize(Width, Height, 24);
Self.DrawOn(Bounds(0,0, Self.Width, Self.Height), Result.Canvas, 0, 0);
FFreeList.Add(Result);
end;
 
procedure TDIB.SetPixel(X, Y: Integer; Value: DWORD);
var
P: PByte;
1707,8 → 2372,8
P^ := (P^ and Mask1n[X and 7]) or ((Value and 1) shl Shift1[X and 7]);
end;
4 : begin
P := @PArrayByte(Integer(FTopPBits)+Y*FNextLine)[X shr 3];
P^ := (P^ and Mask4n[X and 1]) or ((Value and 15) shl Shift4[X and 1]);
P := (@PArrayByte(Integer(FTopPBits) + Y * FNextLine)[X shr 3]);
P^ := ((P^ and Mask4n[X and 1]) or ((Value and 15) shl Shift4[X and 1]));
end;
8 : PArrayByte(Integer(FTopPBits)+Y*FNextLine)[X] := Value;
16: PArrayWord(Integer(FTopPBits)+Y*FNextLine)[X] := Value;
1723,6 → 2388,23
end;
end;
procedure TDIB.SetRGBChannel(const Value: TDIB);
var
alpha: TDIB;
begin
if Self.HasAlphaChannel then
try
RetAlphaChannel(alpha);
Self.SetSize(Value.Width, Value.Height, 32);
Value.DrawOn(Bounds(0,0,Value.Width, Value.Height), Self.Canvas, 0, 0);
Self.AssignAlphaChannel(alpha, True);
finally
alpha.Free;
end
else
Self.Assign(Value);
end;
 
procedure TDIB.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
1731,6 → 2413,8
end;
 
type
{ TGlobalMemoryStream }
 
TGlobalMemoryStream = class(TMemoryStream)
private
FHandle: THandle;
1773,6 → 2457,7
var
BF: TBitmapFileHeader;
i: Integer;
ImageJPEG: TJPEGImage;
begin
{ File header reading }
i := Stream.Read(BF, SizeOf(TBitmapFileHeader));
1780,6 → 2465,30
if i<>SizeOf(TBitmapFileHeader) then
raise EInvalidGraphic.Create(SInvalidDIB);
 
{ Is the head jpeg ?}
 
if BF.bfType = $D8FF then
begin
ImageJPEG := TJPEGImage.Create;
try
try
Stream.Position := 0;
ImageJPEG.LoadFromStream(Stream);
except
on EInvalidGraphic do ImageJPEG := nil;
end;
if ImageJPEG <> nil then
begin
{set size and bitcount in natural units of jpeg}
SetSize(ImageJPEG.Width, ImageJPEG.Height, 24);
Canvas.Draw(0, 0, ImageJPEG);
Exit
end;
finally
ImageJPEG.Free;
end;
end
else
{ Is the head 'BM'? }
if BF.bfType<>BitmapFileType then
raise EInvalidGraphic.Create(SInvalidDIB);
1838,7 → 2547,9
bfSize := bfOffBits+FImage.FBitmapInfo^.bmiHeader.biSizeImage;
bfReserved1 := 0;
bfReserved2 := 0;
if (FBitCount = 32) and (FImage.FBitmapInfo^.bmiHeader.biCompression <> 0) then FImage.FBitmapInfo^.bmiHeader.biCompression := 0; //corrext RGB error to RGBA
end;
 
Stream.WriteBuffer(BF, SizeOf(TBitmapFileHeader));
 
WriteData(Stream);
1864,7 → 2575,8
if Empty then
begin
SetSize(Max(Width, 1), Max(Height, 1), Value)
end else
end
else
begin
ConvertBitCount(Value);
end;
2031,13 → 2743,16
for x:=0 to Width-1 do
begin
case Temp.BitCount of
1 : begin
1:
begin
i := (PArrayByte(SrcP)[X shr 3] and Mask1[X and 7]) shr Shift1[X and 7];
end;
4 : begin
4:
begin
i := (PArrayByte(SrcP)[X and 1] and Mask4[X and 1]) shr Shift4[X and 1];
end;
8 : begin
8:
begin
i := PByte(SrcP)^;
Inc(PByte(SrcP));
end;
2044,15 → 2759,18
end;
 
case BitCount of
1 : begin
1:
begin
P := @PArrayByte(DestP)[X shr 3];
P^ := (P^ and Mask1n[X and 7]) or (i shl Shift1[X shr 3]);
end;
4 : begin
4:
begin
P := @PArrayByte(DestP)[X shr 1];
P^ := (P^ and Mask4n[X and 1]) or (i shl Shift4[X and 1]);
end;
8 : begin
8:
begin
PByte(DestP)^ := i;
Inc(PByte(DestP));
end;
2079,7 → 2797,8
for x:=0 to Width-1 do
begin
case Temp.BitCount of
1 : begin
1:
begin
with Temp.ColorTable[(PArrayByte(SrcP)[X shr 3] and Mask1[X and 7]) shr Shift1[X and 7]] do
begin
cR := rgbRed;
2087,7 → 2806,8
cB := rgbBlue;
end;
end;
4 : begin
4:
begin
with Temp.ColorTable[(PArrayByte(SrcP)[X shr 1] and Mask4[X and 1]) shr Shift4[X and 1]] do
begin
cR := rgbRed;
2095,7 → 2815,8
cB := rgbBlue;
end;
end;
8 : begin
8:
begin
with Temp.ColorTable[PByte(SrcP)^] do
begin
cR := rgbRed;
2104,11 → 2825,13
end;
Inc(PByte(SrcP));
end;
16: begin
16:
begin
pfGetRGB(Temp.NowPixelFormat, PWord(SrcP)^, cR, cG, cB);
Inc(PWord(SrcP));
end;
24: begin
24:
begin
with PBGR(SrcP)^ do
begin
cR := R;
2118,7 → 2841,8
 
Inc(PBGR(SrcP));
end;
32: begin
32:
begin
pfGetRGB(Temp.NowPixelFormat, PDWORD(SrcP)^, cR, cG, cB);
Inc(PDWORD(SrcP));
end;
2125,11 → 2849,13
end;
 
case BitCount of
16: begin
16:
begin
PWord(DestP)^ := pfRGB(NowPixelFormat, cR, cG, cB);
Inc(PWord(DestP));
end;
24: begin
24:
begin
with PBGR(DestP)^ do
begin
R := cR;
2138,7 → 2864,8
end;
Inc(PBGR(DestP));
end;
32: begin
32:
begin
PDWORD(DestP)^ := pfRGB(NowPixelFormat, cR, cG, cB);
Inc(PDWORD(DestP));
end;
2163,7 → 2890,8
if Temp.BitCount<=BitCount then
begin
PaletteToPalette_Inc;
end else
end
else
begin
case BitCount of
1: begin
2177,12 → 2905,14
 
Canvas.Draw(0, 0, Temp);
end;
end else
end
else
if (Temp.BitCount<=8) and (BitCount>8) then
begin
{ The image is converted from the palette color image into the rgb color image. }
PaletteToRGB_or_RGBToRGB;
end else
end
else
if (Temp.BitCount>8) and (BitCount<=8) then
begin
{ The image is converted from the rgb color image into the palette color image. }
2197,7 → 2927,8
UpdatePalette;
 
Canvas.Draw(0, 0, Temp);
end else
end
else
if (Temp.BitCount>8) and (BitCount>8) then
begin
{ The image is converted from the rgb color image into the rgb color image. }
2251,6 → 2982,211
Inc(FProgressY);
end;
 
procedure TDIB.Mirror(MirrorX, MirrorY: Boolean);
var
x, y, Width2, c: Integer;
P1, P2, TempBuf: Pointer;
begin
if Empty then Exit;
if (not MirrorX) and (not MirrorY) then Exit;
 
if (not MirrorX) and (MirrorY) then
begin
GetMem(TempBuf, WidthBytes);
try
StartProgress('Mirror');
try
for y := 0 to Height shr 1 - 1 do
begin
P1 := ScanLine[y];
P2 := ScanLine[Height - y - 1];
 
Move(P1^, TempBuf^, WidthBytes);
Move(P2^, P1^, WidthBytes);
Move(TempBuf^, P2^, WidthBytes);
 
UpdateProgress(y * 2);
end;
finally
EndProgress;
end;
finally
FreeMem(TempBuf, WidthBytes);
end;
end
else
if (MirrorX) and (not MirrorY) then
begin
Width2 := Width shr 1;
 
StartProgress('Mirror');
try
for y := 0 to Height - 1 do
begin
P1 := ScanLine[y];
 
case BitCount of
1:
begin
for x := 0 to Width2 - 1 do
begin
c := Pixels[x, y];
Pixels[x, y] := Pixels[Width - x - 1, y];
Pixels[Width - x - 1, y] := c;
end;
end;
4:
begin
for x := 0 to Width2 - 1 do
begin
c := Pixels[x, y];
Pixels[x, y] := Pixels[Width - x - 1, y];
Pixels[Width - x - 1, y] := c;
end;
end;
8:
begin
P2 := Pointer(Integer(P1) + Width - 1);
for x := 0 to Width2 - 1 do
begin
PByte(@c)^ := PByte(P1)^;
PByte(P1)^ := PByte(P2)^;
PByte(P2)^ := PByte(@c)^;
Inc(PByte(P1));
Dec(PByte(P2));
end;
end;
16:
begin
P2 := Pointer(Integer(P1) + (Width - 1) * 2);
for x := 0 to Width2 - 1 do
begin
PWord(@c)^ := PWord(P1)^;
PWord(P1)^ := PWord(P2)^;
PWord(P2)^ := PWord(@c)^;
Inc(PWord(P1));
Dec(PWord(P2));
end;
end;
24:
begin
P2 := Pointer(Integer(P1) + (Width - 1) * 3);
for x := 0 to Width2 - 1 do
begin
PBGR(@c)^ := PBGR(P1)^;
PBGR(P1)^ := PBGR(P2)^;
PBGR(P2)^ := PBGR(@c)^;
Inc(PBGR(P1));
Dec(PBGR(P2));
end;
end;
32:
begin
P2 := Pointer(Integer(P1) + (Width - 1) * 4);
for x := 0 to Width2 - 1 do
begin
PDWORD(@c)^ := PDWORD(P1)^;
PDWORD(P1)^ := PDWORD(P2)^;
PDWORD(P2)^ := PDWORD(@c)^;
Inc(PDWORD(P1));
Dec(PDWORD(P2));
end;
end;
end;
 
UpdateProgress(y);
end;
finally
EndProgress;
end;
end
else
if (MirrorX) and (MirrorY) then
begin
StartProgress('Mirror');
try
for y := 0 to Height shr 1 - 1 do
begin
P1 := ScanLine[y];
P2 := ScanLine[Height - y - 1];
 
case BitCount of
1:
begin
for x := 0 to Width - 1 do
begin
c := Pixels[x, y];
Pixels[x, y] := Pixels[Width - x - 1, Height - y - 1];
Pixels[Width - x - 1, Height - y - 1] := c;
end;
end;
4:
begin
for x := 0 to Width - 1 do
begin
c := Pixels[x, y];
Pixels[x, y] := Pixels[Width - x - 1, Height - y - 1];
Pixels[Width - x - 1, Height - y - 1] := c;
end;
end;
8:
begin
P2 := Pointer(Integer(P2) + Width - 1);
for x := 0 to Width - 1 do
begin
PByte(@c)^ := PByte(P1)^;
PByte(P1)^ := PByte(P2)^;
PByte(P2)^ := PByte(@c)^;
Inc(PByte(P1));
Dec(PByte(P2));
end;
end;
16:
begin
P2 := Pointer(Integer(P2) + (Width - 1) * 2);
for x := 0 to Width - 1 do
begin
PWord(@c)^ := PWord(P1)^;
PWord(P1)^ := PWord(P2)^;
PWord(P2)^ := PWord(@c)^;
Inc(PWord(P1));
Dec(PWord(P2));
end;
end;
24:
begin
P2 := Pointer(Integer(P2) + (Width - 1) * 3);
for x := 0 to Width - 1 do
begin
PBGR(@c)^ := PBGR(P1)^;
PBGR(P1)^ := PBGR(P2)^;
PBGR(P2)^ := PBGR(@c)^;
Inc(PBGR(P1));
Dec(PBGR(P2));
end;
end;
32:
begin
P2 := Pointer(Integer(P2) + (Width - 1) * 4);
for x := 0 to Width - 1 do
begin
PDWORD(@c)^ := PDWORD(P1)^;
PDWORD(P1)^ := PDWORD(P2)^;
PDWORD(P2)^ := PDWORD(@c)^;
Inc(PDWORD(P1));
Dec(PDWORD(P2));
end;
end;
end;
 
UpdateProgress(y * 2);
end;
finally
EndProgress;
end;
end;
end;
 
procedure TDIB.Blur(ABitCount: Integer; Radius: Integer);
type
TAve = record
2270,7 → 3206,8
R, G, B: Byte;
begin
case Temp.BitCount of
1 : begin
1:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2285,7 → 3222,8
Inc(AveP);
end;
end;
4 : begin
4:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2300,7 → 3238,8
Inc(AveP);
end;
end;
8 : begin
8:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2316,7 → 3255,8
Inc(AveP);
end;
end;
16: begin
16:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2333,7 → 3273,8
Inc(AveP);
end;
end;
24: begin
24:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2349,7 → 3290,8
Inc(AveP);
end;
end;
32: begin
32:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2377,7 → 3319,8
R, G, B: Byte;
begin
case Temp.BitCount of
1 : begin
1:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2392,7 → 3335,8
Inc(AveP);
end;
end;
4 : begin
4:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2407,7 → 3351,8
Inc(AveP);
end;
end;
8 : begin
8:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2423,7 → 3368,8
Inc(AveP);
end;
end;
16: begin
16:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2440,7 → 3386,8
Inc(AveP);
end;
end;
24: begin
24:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2456,7 → 3403,8
Inc(AveP);
end;
end;
32: begin
32:
begin
SrcP := Pointer(Integer(Temp.TopPBits)+Y*Temp.NextLine);
AveP := @Ave;
for x:=0 to XCount-1 do
2579,27 → 3527,32
 
{ The average is written. }
case BitCount of
1 : begin
1:
begin
P := @PArrayByte(DestP)[X shr 3];
with Ave do
P^ := (P^ and Mask1n[X and 7]) or (DWORD(Ord(((cR+cG+cB) div c) div 3>127)) shl Shift1[X and 7]);
end;
4 : begin
4:
begin
P := @PArrayByte(DestP)[X shr 1];
with Ave do
P^ := (P^ and Mask4n[X and 1]) or (((((cR+cG+cB) div c) div 3) shr 4) shl Shift4[X and 1]);
end;
8 : begin
8:
begin
with Ave do
PByte(DestP)^ := ((cR+cG+cB) div c) div 3;
Inc(PByte(DestP));
end;
16: begin
16:
begin
with Ave do
PWORD(DestP)^ := pfRGB(NowPixelFormat, cR div c, cG div c, cB div c);
Inc(PWORD(DestP));
end;
24: begin
24:
begin
with PBGR(DestP)^, Ave do
begin
R := cR div c;
2608,7 → 3561,8
end;
Inc(PBGR(DestP));
end;
32: begin
32:
begin
with Ave do
PDWORD(DestP)^ := pfRGB(NowPixelFormat, cR div c, cG div c, cB div c);
Inc(PDWORD(DestP));
2657,7 → 3611,95
EndProgress;
end;
end;
(*
procedure TDIB.Negative;
var
i, i2: Integer;
P: Pointer;
begin
if Empty then exit;
 
if BitCount <= 8 then
begin
for i := 0 to 255 do
with ColorTable[i] do
begin
rgbRed := 255 - rgbRed;
rgbGreen := 255 - rgbGreen;
rgbBlue := 255 - rgbBlue;
end;
UpdatePalette;
end else
begin
P := PBits;
i2 := Size;
asm
mov ecx,i2
mov eax,P
mov edx,ecx
 
{ Unit of DWORD. }
@@qword_skip:
shr ecx,2
jz @@dword_skip
 
dec ecx
@@dword_loop:
not dword ptr [eax+ecx*4]
dec ecx
jnl @@dword_loop
 
mov ecx,edx
shr ecx,2
add eax,ecx*4
 
{ Unit of Byte. }
@@dword_skip:
mov ecx,edx
and ecx,3
jz @@byte_skip
 
dec ecx
@@loop_byte:
not byte ptr [eax+ecx]
dec ecx
jnl @@loop_byte
 
@@byte_skip:
end;
end;
end;
*)
procedure TDIB.Negative;
var
i: Integer;
P: Pointer;
i2: Integer;
begin
if Empty then Exit;
 
if BitCount <= 8 then
begin
for i := 0 to 255 do
with ColorTable[i] do
begin
rgbRed := 255 - rgbRed;
rgbGreen := 255 - rgbGreen;
rgbBlue := 255 - rgbBlue;
end;
UpdatePalette;
end
else
begin
P := PBits;
i2 := Size;
for i := 0 to i2-1 do
begin
PByteArray(P)^[i] := not PByteArray(P)^[i];
end;
end;
end;
 
procedure TDIB.Greyscale(ABitCount: Integer);
var
YTblR, YTblG, YTblB: array[0..255] of Byte;
2668,7 → 3710,7
DestP, SrcP: Pointer;
P: PByte;
begin
if Empty then exit;
if Empty then Exit;
 
Temp := TDIB.Create;
try
2706,30 → 3748,36
for x:=0 to Width-1 do
begin
case Temp.BitCount of
1 : begin
1:
begin
with Temp.ColorTable[(PArrayByte(SrcP)[X shr 3] and Mask1[X and 7]) shr Shift1[X and 7]] do
c := YTblR[rgbRed]+YTblG[rgbGreen]+YTblB[rgbBlue];
end;
4 : begin
4:
begin
with Temp.ColorTable[(PArrayByte(SrcP)[X shr 1] and Mask4[X and 1]) shr Shift4[X and 1]] do
c := YTblR[rgbRed]+YTblG[rgbGreen]+YTblB[rgbBlue];
end;
8 : begin
8:
begin
with Temp.ColorTable[PByte(SrcP)^] do
c := YTblR[rgbRed]+YTblG[rgbGreen]+YTblB[rgbBlue];
Inc(PByte(SrcP));
end;
16: begin
16:
begin
pfGetRGB(Temp.NowPixelFormat, PWord(SrcP)^, R, G, B);
c := YTblR[R]+YTblR[G]+YTblR[B];
Inc(PWord(SrcP));
end;
24: begin
24:
begin
with PBGR(SrcP)^ do
c := YTblR[R]+YTblG[G]+YTblB[B];
Inc(PBGR(SrcP));
end;
32: begin
32:
begin
pfGetRGB(Temp.NowPixelFormat, PDWORD(SrcP)^, R, G, B);
c := YTblR[R]+YTblR[G]+YTblR[B];
Inc(PDWORD(SrcP));
2737,23 → 3785,28
end;
 
case BitCount of
1 : begin
1:
begin
P := @PArrayByte(DestP)[X shr 3];
P^ := (P^ and Mask1n[X and 7]) or (DWORD(Ord(c>127)) shl Shift1[X and 7]);
end;
4 : begin
4:
begin
P := @PArrayByte(DestP)[X shr 1];
P^ := (P^ and Mask4n[X and 1]) or ((c shr 4) shl Shift4[X and 1]);
end;
8 : begin
8:
begin
PByte(DestP)^ := c;
Inc(PByte(DestP));
end;
16: begin
16:
begin
PWord(DestP)^ := pfRGB(NowPixelFormat, c, c, c);
Inc(PWord(DestP));
end;
24: begin
24:
begin
with PBGR(DestP)^ do
begin
R := c;
2762,7 → 3815,8
end;
Inc(PBGR(DestP));
end;
32: begin
32:
begin
PDWORD(DestP)^ := pfRGB(NowPixelFormat, c, c, c);
Inc(PDWORD(DestP));
end;
2779,253 → 3833,1597
end;
end;
 
procedure TDIB.Mirror(MirrorX, MirrorY: Boolean);
var
x, y, Width2, c: Integer;
P1, P2, TempBuf: Pointer;
//--------------------------------------------------------------------------------------------------
// Version : 0.1 - 26/06/2000 //
// Version : 0.2 - 04/07/2000 //
// At someone's request, i have added 3 news effects : //
// 1 - Rotate //
// 2 - SplitBlur //
// 3 - GaussianBlur //
//--------------------------------------------------------------------------------------------------
// - NEW SPECIAL EFFECT - (English) //
//--------------------------------------------------------------------------------------------------
// At the start, my idea was to create a component derived from TCustomDXDraw. Unfortunately, //
// it's impossible to run a graphic component (derived from TCustomDXDraw) in a conception's //
// mode (i don't success, but perhaps, somebody know how doing ! In that case, please help me !!!)//
// Then, i'm used the DIB's unit for my work, but this unit is poor in special effect. Knowing a //
// library with more effect, i'm undertaked to import this library in DIB's unit. You can see the //
// FastLib library at : //
// //
// -> Gordon Alex Cowie <gfody@jps.net> www.jps.net/gfody //
// //
// It was very difficult, because implementation's graphic was very different that DIB's unit. //
// Sometimes, i'm deserted the possibility of original effect, particularly in conversion of DIB //
// whith 256, 16 and 2 colors. If someone can implement this fonctionnality, thanks to tell me //
// how this miracle is possible !!! //
// All these procedures are translated and adapted by : //
// //
// -> Mickey (Michel HIBON) <mhibon@ifrance.com> http://mickey.tsx.org //
// //
// IMPORTANT : These procedures don't modify the DIB's unit structure //
// Nota Bene : I don't implement these type of graphics (32 and 16 bit per pixels), //
// for one reason : I haven't bitmaps of this type !!! //
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// - NOUVEAUX EFFETS SPECIAUX - (Français) //
//--------------------------------------------------------------------------------------------------
// Au commencement, mon idée était de dériver un composant de TCustomDXDraw. Malheureusement, //
// c'est impossible de faire fonctionner un composant graphique (derivé de TCustomDXDraw) en mode //
// conception (je n'y suis pas parvenu, mais peut-être, que quelqu'un sait comment faire ! Dans //
// ce cas, vous seriez aimable de m'aider !!!) //
// Alors, j'ai utilisé l'unité DIB pour mon travail,mais celle-ci est pauvre en effet spéciaux. //
// Connaissant une librairie avec beaucoup plus d'effets spéciaux, j'ai entrepris d'importer //
// cette librairie dans l'unité DIB. Vous pouvez voir la librairie FastLib à : //
// //
// -> Gordon Alex Cowie <gfody@jps.net> www.jps.net/gfody //
// //
// C'était très difficile car l'implémentation graphique est très différente de l'unité DIB. //
// Parfois, j'ai abandonné les possibilités de l'effet original, particulièrement dans la //
// conversion des DIB avec 256, 16 et 2 couleurs. Si quelqu'un arrive à implémenter ces //
// fonctionnalités, merci de me dire comment ce miracle est possible !!! //
// Toutes ces procédures ont été traduites et adaptées par: //
// //
// -> Mickey (Michel HIBON) <mhibon@ifrance.com> http://mickey.tsx.org //
// //
// IMPORTANT : Ces procédures ne modifient pas la structure de l'unité DIB //
// Nota Bene : Je n'ai pas implémenté ces types de graphiques (32 et 16 bit par pixels), //
// pour une raison : je n'ai pas de bitmap de ce type !!! //
//--------------------------------------------------------------------------------------------------
 
function TDIB.IntToColor(i: Integer): TBGR;
begin
if Empty then exit;
if (not MirrorX) and (not MirrorY) then Exit;
Result.b := i shr 16;
Result.g := i shr 8;
Result.r := i;
end;
 
if (not MirrorX) and (MirrorY) then
function TDIB.Interval(iMin, iMax, iValue: Integer; iMark: Boolean): Integer;
begin
GetMem(TempBuf, WidthBytes);
try
StartProgress('Mirror');
try
for y:=0 to Height shr 1-1 do
if iMark then
begin
P1 := ScanLine[y];
P2 := ScanLine[Height-y-1];
if iValue < iMin then
Result := iMin
else
if iValue > iMax then
Result := iMax
else
Result := iValue;
end
else
begin
if iValue < iMin then
Result := iMin
else
if iValue > iMax then
Result := iMin
else
Result := iValue;
end;
end;
 
Move(P1^, TempBuf^, WidthBytes);
Move(P2^, P1^, WidthBytes);
Move(TempBuf^, P2^, WidthBytes);
procedure TDIB.Contrast(Amount: Integer);
var
x, y: Integer;
Table1: array[0..255] of Byte;
i: Byte;
S, D: pointer;
Temp1: TDIB;
color: DWORD;
P: PByte;
R, G, B: Byte;
begin
D := nil;
S := nil;
Temp1 := nil;
for i := 0 to 126 do
begin
y := (Abs(128 - i) * Amount) div 256;
Table1[i] := IntToByte(i - y);
end;
for i := 127 to 255 do
begin
y := (Abs(128 - i) * Amount) div 256;
Table1[i] := IntToByte(i + y);
end;
case BitCount of
32: Exit; // I haven't bitmap of this type ! Sorry
24: ; // nothing to do
16: ; // I have an artificial bitmap for this type ! i don't sure that it works
8, 4:
begin
Temp1 := TDIB.Create;
Temp1.Assign(self);
Temp1.SetSize(Width, Height, BitCount);
for i := 0 to 255 do
begin
with ColorTable[i] do
begin
rgbRed := IntToByte(Table1[rgbRed]);
rgbGreen := IntToByte(Table1[rgbGreen]);
rgbBlue := IntToByte(Table1[rgbBlue]);
end;
end;
UpdatePalette;
end;
else
// if the number of pixel is equal to 1 then exit of procedure
Exit;
end;
for y := 0 to Pred(Height) do
begin
case BitCount of
24, 16: D := ScanLine[y];
8, 4:
begin
D := Temp1.ScanLine[y];
S := Temp1.ScanLine[y];
end;
else
end;
for x := 0 to Pred(Width) do
begin
case BitCount of
32: ;
24:
begin
PBGR(D)^.B := Table1[PBGR(D)^.B];
PBGR(D)^.G := Table1[PBGR(D)^.G];
PBGR(D)^.R := Table1[PBGR(D)^.R];
Inc(PBGR(D));
end;
16:
begin
pfGetRGB(NowPixelFormat, PWord(D)^, R, G, B);
PWord(D)^ := Table1[R] + Table1[G] + Table1[B];
Inc(PWord(D));
end;
8:
begin
with Temp1.ColorTable[PByte(S)^] do
color := rgbRed + rgbGreen + rgbBlue;
Inc(PByte(S));
PByte(D)^ := color;
Inc(PByte(D));
end;
4:
begin
with Temp1.ColorTable[PByte(S)^] do
color := rgbRed + rgbGreen + rgbBlue;
Inc(PByte(S));
P := @PArrayByte(D)[X shr 1];
P^ := (P^ and Mask4n[X and 1]) or (color shl Shift4[X and 1]);
end;
else
end;
end;
end;
case BitCount of
8, 4: Temp1.Free;
else
end;
end;
 
UpdateProgress(y*2);
procedure TDIB.Saturation(Amount: Integer);
var
Grays: array[0..767] of Integer;
Alpha: array[0..255] of Word;
Gray, x, y: Integer;
i: Byte;
S, D: pointer;
Temp1: TDIB;
color: DWORD;
P: PByte;
R, G, B: Byte;
begin
D := nil;
S := nil;
Temp1 := nil;
for i := 0 to 255 do
Alpha[i] := (i * Amount) shr 8;
x := 0;
for i := 0 to 255 do
begin
Gray := i - Alpha[i];
Grays[x] := Gray;
Inc(x);
Grays[x] := Gray;
Inc(x);
Grays[x] := Gray;
Inc(x);
end;
finally
EndProgress;
case BitCount of
32: Exit; // I haven't bitmap of this type ! Sorry
24: ; // nothing to do
16: ; // I have an artificial bitmap for this type ! i don't sure that it works
8, 4:
begin
Temp1 := TDIB.Create;
Temp1.Assign(self);
Temp1.SetSize(Width, Height, BitCount);
for i := 0 to 255 do
begin
with ColorTable[i] do
begin
Gray := Grays[rgbRed + rgbGreen + rgbBlue];
rgbRed := IntToByte(Gray + Alpha[rgbRed]);
rgbGreen := IntToByte(Gray + Alpha[rgbGreen]);
rgbBlue := IntToByte(Gray + Alpha[rgbBlue]);
end;
finally
FreeMem(TempBuf, WidthBytes);
end;
end else if (MirrorX) and (not MirrorY) then
UpdatePalette;
end;
else
// if the number of pixel is equal to 1 then exit of procedure
Exit;
end;
for y := 0 to Pred(Height) do
begin
Width2 := Width shr 1;
case BitCount of
24, 16: D := ScanLine[y];
8, 4:
begin
D := Temp1.ScanLine[y];
S := Temp1.ScanLine[y];
end;
else
end;
for x := 0 to Pred(Width) do
begin
case BitCount of
32: ;
24:
begin
Gray := Grays[PBGR(D)^.R + PBGR(D)^.G + PBGR(D)^.B];
PBGR(D)^.B := IntToByte(Gray + Alpha[PBGR(D)^.B]);
PBGR(D)^.G := IntToByte(Gray + Alpha[PBGR(D)^.G]);
PBGR(D)^.R := IntToByte(Gray + Alpha[PBGR(D)^.R]);
Inc(PBGR(D));
end;
16:
begin
pfGetRGB(NowPixelFormat, PWord(D)^, R, G, B);
PWord(D)^ := IntToByte(Gray + Alpha[B]) + IntToByte(Gray + Alpha[G]) +
IntToByte(Gray + Alpha[R]);
Inc(PWord(D));
end;
8:
begin
with Temp1.ColorTable[PByte(S)^] do
color := rgbRed + rgbGreen + rgbBlue;
Inc(PByte(S));
PByte(D)^ := color;
Inc(PByte(D));
end;
4:
begin
with Temp1.ColorTable[PByte(S)^] do
color := rgbRed + rgbGreen + rgbBlue;
Inc(PByte(S));
P := @PArrayByte(D)[X shr 1];
P^ := (P^ and Mask4n[X and 1]) or (color shl Shift4[X and 1]);
end;
else
end;
end;
end;
case BitCount of
8, 4: Temp1.Free;
else
end;
end;
 
StartProgress('Mirror');
try
for y:=0 to Height-1 do
procedure TDIB.Lightness(Amount: Integer);
var
x, y: Integer;
Table1: array[0..255] of Byte;
i: Byte;
S, D: pointer;
Temp1: TDIB;
color: DWORD;
P: PByte;
R, G, B: Byte;
begin
P1 := ScanLine[y];
 
D := nil;
S := nil;
Temp1 := nil;
if Amount < 0 then
begin
Amount := -Amount;
for i := 0 to 255 do
Table1[i] := IntToByte(i - ((Amount * i) shr 8));
end
else
for i := 0 to 255 do
Table1[i] := IntToByte(i + ((Amount * (i xor 255)) shr 8));
case BitCount of
1 : begin
for x:=0 to Width2-1 do
32: Exit; // I haven't bitmap of this type ! Sorry
24: ; // nothing to do
16: ; // I have an artificial bitmap for this type ! i don't sure that it works
8, 4:
begin
c := Pixels[x, y];
Pixels[x, y] := Pixels[Width-x-1, y];
Pixels[Width-x-1, y] := c;
Temp1 := TDIB.Create;
Temp1.Assign(self);
Temp1.SetSize(Width, Height, BitCount);
for i := 0 to 255 do
begin
with ColorTable[i] do
begin
rgbRed := IntToByte(Table1[rgbRed]);
rgbGreen := IntToByte(Table1[rgbGreen]);
rgbBlue := IntToByte(Table1[rgbBlue]);
end;
end;
4 : begin
for x:=0 to Width2-1 do
UpdatePalette;
end;
else
// if the number of pixel is equal to 1 then exit of procedure
Exit;
end;
for y := 0 to Pred(Height) do
begin
c := Pixels[x, y];
Pixels[x, y] := Pixels[Width-x-1, y];
Pixels[Width-x-1, y] := c;
case BitCount of
24, 16: D := ScanLine[y];
8, 4:
begin
D := Temp1.ScanLine[y];
S := Temp1.ScanLine[y];
end;
else
end;
8 : begin
P2 := Pointer(Integer(P1)+Width-1);
for x:=0 to Width2-1 do
for x := 0 to Pred(Width) do
begin
PByte(@c)^ := PByte(P1)^;
PByte(P1)^ := PByte(P2)^;
PByte(P2)^ := PByte(@c)^;
Inc(PByte(P1));
Dec(PByte(P2));
case BitCount of
32: ;
24:
begin
PBGR(D)^.B := Table1[PBGR(D)^.B];
PBGR(D)^.G := Table1[PBGR(D)^.G];
PBGR(D)^.R := Table1[PBGR(D)^.R];
Inc(PBGR(D));
end;
16:
begin
pfGetRGB(NowPixelFormat, PWord(D)^, R, G, B);
PWord(D)^ := Table1[R] + Table1[G] + Table1[B];
Inc(PWord(D));
end;
16: begin
P2 := Pointer(Integer(P1)+(Width-1)*2);
for x:=0 to Width2-1 do
8:
begin
PWord(@c)^ := PWord(P1)^;
PWord(P1)^ := PWord(P2)^;
PWord(P2)^ := PWord(@c)^;
Inc(PWord(P1));
Dec(PWord(P2));
with Temp1.ColorTable[PByte(S)^] do
color := rgbRed + rgbGreen + rgbBlue;
Inc(PByte(S));
PByte(D)^ := color;
Inc(PByte(D));
end;
4:
begin
with Temp1.ColorTable[PByte(S)^] do
color := rgbRed + rgbGreen + rgbBlue;
Inc(PByte(S));
P := @PArrayByte(D)[X shr 1];
P^ := (P^ and Mask4n[X and 1]) or (color shl Shift4[X and 1]);
end;
24: begin
P2 := Pointer(Integer(P1)+(Width-1)*3);
for x:=0 to Width2-1 do
else
end;
end;
end;
case BitCount of
8, 4: Temp1.Free;
else
end;
end;
 
procedure TDIB.AddRGB(aR, aG, aB: Byte);
var
Table: array[0..255] of TBGR;
x, y: Integer;
i: Byte;
D: pointer;
P: PByte;
color: DWORD;
Temp1: TDIB;
R, G, B: Byte;
begin
PBGR(@c)^ := PBGR(P1)^;
PBGR(P1)^ := PBGR(P2)^;
PBGR(P2)^ := PBGR(@c)^;
Inc(PBGR(P1));
Dec(PBGR(P2));
color := 0;
D := nil;
Temp1 := nil;
case BitCount of
32: Exit; // I haven't bitmap of this type ! Sorry
24, 16:
begin
for i := 0 to 255 do
begin
Table[i].b := IntToByte(i + aB);
Table[i].g := IntToByte(i + aG);
Table[i].r := IntToByte(i + aR);
end;
end;
32: begin
P2 := Pointer(Integer(P1)+(Width-1)*4);
for x:=0 to Width2-1 do
8, 4:
begin
PDWORD(@c)^ := PDWORD(P1)^;
PDWORD(P1)^ := PDWORD(P2)^;
PDWORD(P2)^ := PDWORD(@c)^;
Inc(PDWORD(P1));
Dec(PDWORD(P2));
Temp1 := TDIB.Create;
Temp1.Assign(self);
Temp1.SetSize(Width, Height, BitCount);
for i := 0 to 255 do
begin
with ColorTable[i] do
begin
rgbRed := IntToByte(rgbRed + aR);
rgbGreen := IntToByte(rgbGreen + aG);
rgbBlue := IntToByte(rgbBlue + aB);
end;
end;
UpdatePalette;
end;
else
// if the number of pixel is equal to 1 then exit of procedure
Exit;
end;
for y := 0 to Pred(Height) do
begin
case BitCount of
24, 16: D := ScanLine[y];
8, 4:
begin
D := Temp1.ScanLine[y];
end;
else
end;
for x := 0 to Pred(Width) do
begin
case BitCount of
32: ; // I haven't bitmap of this type ! Sorry
24:
begin
PBGR(D)^.B := Table[PBGR(D)^.B].b;
PBGR(D)^.G := Table[PBGR(D)^.G].g;
PBGR(D)^.R := Table[PBGR(D)^.R].r;
Inc(PBGR(D));
end;
16:
begin
pfGetRGB(NowPixelFormat, PWord(D)^, R, G, B);
PWord(D)^ := Table[R].r + Table[G].g + Table[B].b;
Inc(PWord(D));
end;
8:
begin
Inc(PByte(D));
end;
4:
begin
P := @PArrayByte(D)[X shr 1];
P^ := (P^ and Mask4n[X and 1]) or (color shl Shift4[X and 1]);
end;
else
end;
end;
end;
case BitCount of
8, 4: Temp1.Free;
else
end;
end;
 
UpdateProgress(y);
function TDIB.Filter(Dest: TDIB; Filter: TFilter): Boolean;
var
Sum, r, g, b, x, y: Integer;
a, i, j: byte;
tmp: TBGR;
Col: PBGR;
D: Pointer;
begin
Result := True;
Sum := Filter[0, 0] + Filter[1, 0] + Filter[2, 0] +
Filter[0, 1] + Filter[1, 1] + Filter[2, 1] +
Filter[0, 2] + Filter[1, 2] + Filter[2, 2];
if Sum = 0 then
Sum := 1;
Col := PBits;
for y := 0 to Pred(Height) do
begin
D := Dest.ScanLine[y];
for x := 0 to Pred(Width) do
begin
r := 0; g := 0; b := 0;
case BitCount of
32, 16, 4, 1:
begin
Result := False;
Exit;
end;
finally
EndProgress;
24:
begin
for i := 0 to 2 do
begin
for j := 0 to 2 do
begin
Tmp := IntToColor(Pixels[Interval(0, Pred(Width), x + Pred(i), True),
Interval(0, Pred(Height), y + Pred(j), True)]);
Inc(b, Filter[i, j] * Tmp.b);
Inc(g, Filter[i, j] * Tmp.g);
Inc(r, Filter[i, j] * Tmp.r);
end;
end else if (MirrorX) and (MirrorY) then
end;
Col.b := IntToByte(b div Sum);
Col.g := IntToByte(g div Sum);
Col.r := IntToByte(r div Sum);
Dest.Pixels[x, y] := rgb(Col.r, Col.g, Col.b);
end;
8:
begin
StartProgress('Mirror');
try
for y:=0 to Height shr 1-1 do
for i := 0 to 2 do
begin
P1 := ScanLine[y];
P2 := ScanLine[Height-y-1];
for j := 0 to 2 do
begin
a := (Pixels[Interval(0, Pred(Width), x + Pred(i), True),
Interval(0, Pred(Height), y + Pred(j), True)]);
tmp.r := ColorTable[a].rgbRed;
tmp.g := ColorTable[a].rgbGreen;
tmp.b := ColorTable[a].rgbBlue;
Inc(b, Filter[i, j] * Tmp.b);
Inc(g, Filter[i, j] * Tmp.g);
Inc(r, Filter[i, j] * Tmp.r);
end;
end;
Col.b := IntToByte(b div Sum);
Col.g := IntToByte(g div Sum);
Col.r := IntToByte(r div Sum);
PByte(D)^ := rgb(Col.r, Col.g, Col.b);
Inc(PByte(D));
end;
end;
end;
end;
end;
 
procedure TDIB.Spray(Amount: Integer);
var
value, x, y: Integer;
D: Pointer;
color: DWORD;
P: PByte;
begin
for y := Pred(Height) downto 0 do
begin
D := ScanLine[y];
for x := 0 to Pred(Width) do
begin
value := Random(Amount);
color := Pixels[Interval(0, Pred(Width), x + (value - Random(value * 2)), True),
Interval(0, Pred(Height), y + (value - Random(value * 2)), True)];
case BitCount of
1 : begin
for x:=0 to Width-1 do
32:
begin
c := Pixels[x, y];
Pixels[x, y] := Pixels[Width-x-1, Height-y-1];
Pixels[Width-x-1, Height-y-1] := c;
PDWord(D)^ := color;
Inc(PDWord(D));
end;
24:
begin
PBGR(D)^ := IntToColor(color);
Inc(PBGR(D));
end;
4 : begin
for x:=0 to Width-1 do
16:
begin
c := Pixels[x, y];
Pixels[x, y] := Pixels[Width-x-1, Height-y-1];
Pixels[Width-x-1, Height-y-1] := c;
PWord(D)^ := color;
Inc(PWord(D));
end;
8:
begin
PByte(D)^ := color;
Inc(PByte(D));
end;
8 : begin
P2 := Pointer(Integer(P2)+Width-1);
for x:=0 to Width-1 do
4:
begin
PByte(@c)^ := PByte(P1)^;
PByte(P1)^ := PByte(P2)^;
PByte(P2)^ := PByte(@c)^;
Inc(PByte(P1));
Dec(PByte(P2));
P := @PArrayByte(D)[X shr 1];
P^ := (P^ and Mask4n[X and 1]) or (color shl Shift4[X and 1]);
end;
1:
begin
P := @PArrayByte(D)[X shr 3];
P^ := (P^ and Mask1n[X and 7]) or (color shl Shift1[X and 7]);
end;
16: begin
P2 := Pointer(Integer(P2)+(Width-1)*2);
for x:=0 to Width-1 do
else
end;
end;
end;
end;
 
procedure TDIB.Sharpen(Amount: Integer);
var
Lin0, Lin1, Lin2: PLines;
pc: PBGR;
cx, x, y: Integer;
Buf: array[0..8] of TBGR;
D: pointer;
c: DWORD;
i: byte;
P1: PByte;
Temp1: TDIB;
 
begin
PWord(@c)^ := PWord(P1)^;
PWord(P1)^ := PWord(P2)^;
PWord(P2)^ := PWord(@c)^;
Inc(PWord(P1));
Dec(PWord(P2));
D := nil;
GetMem(pc, SizeOf(TBGR));
c := 0;
Temp1 := nil;
case Bitcount of
32, 16, 1: Exit;
24:
begin
Temp1 := TDIB.Create;
Temp1.Assign(self);
Temp1.SetSize(Width, Height, bitCount);
end;
8:
begin
Temp1 := TDIB.Create;
Temp1.Assign(self);
Temp1.SetSize(Width, Height, bitCount);
for i := 0 to 255 do
begin
with Temp1.ColorTable[i] do
begin
Buf[0].B := ColorTable[i - Amount].rgbBlue;
Buf[0].G := ColorTable[i - Amount].rgbGreen;
Buf[0].R := ColorTable[i - Amount].rgbRed;
Buf[1].B := ColorTable[i].rgbBlue;
Buf[1].G := ColorTable[i].rgbGreen;
Buf[1].R := ColorTable[i].rgbRed;
Buf[2].B := ColorTable[i + Amount].rgbBlue;
Buf[2].G := ColorTable[i + Amount].rgbGreen;
Buf[2].R := ColorTable[i + Amount].rgbRed;
Buf[3].B := ColorTable[i - Amount].rgbBlue;
Buf[3].G := ColorTable[i - Amount].rgbGreen;
Buf[3].R := ColorTable[i - Amount].rgbRed;
Buf[4].B := ColorTable[i].rgbBlue;
Buf[4].G := ColorTable[i].rgbGreen;
Buf[4].R := ColorTable[i].rgbRed;
Buf[5].B := ColorTable[i + Amount].rgbBlue;
Buf[5].G := ColorTable[i + Amount].rgbGreen;
Buf[5].R := ColorTable[i + Amount].rgbRed;
Buf[6].B := ColorTable[i - Amount].rgbBlue;
Buf[6].G := ColorTable[i - Amount].rgbGreen;
Buf[6].R := ColorTable[i - Amount].rgbRed;
Buf[7].B := ColorTable[i].rgbBlue;
Buf[7].G := ColorTable[i].rgbGreen;
Buf[7].R := ColorTable[i].rgbRed;
Buf[8].B := ColorTable[i + Amount].rgbBlue;
Buf[8].G := ColorTable[i + Amount].rgbGreen;
Buf[8].R := ColorTable[i + Amount].rgbRed;
Temp1.colorTable[i].rgbBlue := IntToByte((256 * Buf[4].b - (Buf[0].b + Buf[1].b + Buf[2].b + Buf[3].b +
Buf[5].b + Buf[6].b + Buf[7].b + Buf[8].b) * 16) div 128);
Temp1.colorTable[i].rgbGreen := IntToByte((256 * Buf[4].g - (Buf[0].g + Buf[1].g + Buf[2].g + Buf[3].g +
Buf[5].g + Buf[6].g + Buf[7].g + Buf[8].g) * 16) div 128);
Temp1.colorTable[i].rgbRed := IntToByte((256 * Buf[4].r - (Buf[0].r + Buf[1].r + Buf[2].r + Buf[3].r +
Buf[5].r + Buf[6].r + Buf[7].r + Buf[8].r) * 16) div 128);
 
end;
24: begin
P2 := Pointer(Integer(P2)+(Width-1)*3);
for x:=0 to Width-1 do
end;
Temp1.UpdatePalette;
end;
4:
begin
PBGR(@c)^ := PBGR(P1)^;
PBGR(P1)^ := PBGR(P2)^;
PBGR(P2)^ := PBGR(@c)^;
Inc(PBGR(P1));
Dec(PBGR(P2));
Temp1 := TDIB.Create;
Temp1.Assign(self);
Temp1.SetSize(Width, Height, bitCount);
for i := 0 to 255 do
begin
with Temp1.ColorTable[i] do
begin
Buf[0].B := ColorTable[i - Amount].rgbBlue;
Buf[0].G := ColorTable[i - Amount].rgbGreen;
Buf[0].R := ColorTable[i - Amount].rgbRed;
Buf[1].B := ColorTable[i].rgbBlue;
Buf[1].G := ColorTable[i].rgbGreen;
Buf[1].R := ColorTable[i].rgbRed;
Buf[2].B := ColorTable[i + Amount].rgbBlue;
Buf[2].G := ColorTable[i + Amount].rgbGreen;
Buf[2].R := ColorTable[i + Amount].rgbRed;
Buf[3].B := ColorTable[i - Amount].rgbBlue;
Buf[3].G := ColorTable[i - Amount].rgbGreen;
Buf[3].R := ColorTable[i - Amount].rgbRed;
Buf[4].B := ColorTable[i].rgbBlue;
Buf[4].G := ColorTable[i].rgbGreen;
Buf[4].R := ColorTable[i].rgbRed;
Buf[5].B := ColorTable[i + Amount].rgbBlue;
Buf[5].G := ColorTable[i + Amount].rgbGreen;
Buf[5].R := ColorTable[i + Amount].rgbRed;
Buf[6].B := ColorTable[i - Amount].rgbBlue;
Buf[6].G := ColorTable[i - Amount].rgbGreen;
Buf[6].R := ColorTable[i - Amount].rgbRed;
Buf[7].B := ColorTable[i].rgbBlue;
Buf[7].G := ColorTable[i].rgbGreen;
Buf[7].R := ColorTable[i].rgbRed;
Buf[8].B := ColorTable[i + Amount].rgbBlue;
Buf[8].G := ColorTable[i + Amount].rgbGreen;
Buf[8].R := ColorTable[i + Amount].rgbRed;
colorTable[i].rgbBlue := IntToByte((256 * Buf[4].b - (Buf[0].b + Buf[1].b + Buf[2].b + Buf[3].b +
Buf[5].b + Buf[6].b + Buf[7].b + Buf[8].b) * 16) div 128);
colorTable[i].rgbGreen := IntToByte((256 * Buf[4].g - (Buf[0].g + Buf[1].g + Buf[2].g + Buf[3].g +
Buf[5].g + Buf[6].g + Buf[7].g + Buf[8].g) * 16) div 128);
colorTable[i].rgbRed := IntToByte((256 * Buf[4].r - (Buf[0].r + Buf[1].r + Buf[2].r + Buf[3].r +
Buf[5].r + Buf[6].r + Buf[7].r + Buf[8].r) * 16) div 128);
end;
end;
32: begin
P2 := Pointer(Integer(P2)+(Width-1)*4);
for x:=0 to Width-1 do
UpdatePalette;
end;
end;
for y := 0 to Pred(Height) do
begin
PDWORD(@c)^ := PDWORD(P1)^;
PDWORD(P1)^ := PDWORD(P2)^;
PDWORD(P2)^ := PDWORD(@c)^;
Inc(PDWORD(P1));
Dec(PDWORD(P2));
Lin0 := ScanLine[Interval(0, Pred(Height), y - Amount, True)];
Lin1 := ScanLine[y];
Lin2 := ScanLine[Interval(0, Pred(Height), y + Amount, True)];
case Bitcount of
24, 8, 4: D := Temp1.ScanLine[y];
end;
for x := 0 to Pred(Width) do
begin
case BitCount of
24:
begin
cx := Interval(0, Pred(Width), x - Amount, True);
Buf[0] := Lin0[cx];
Buf[1] := Lin1[cx];
Buf[2] := Lin2[cx];
Buf[3] := Lin0[x];
Buf[4] := Lin1[x];
Buf[5] := Lin2[x];
cx := Interval(0, Pred(Width), x + Amount, true);
Buf[6] := Lin0[cx];
Buf[7] := Lin1[cx];
Buf[8] := Lin0[cx];
pc.b := IntToByte((256 * Buf[4].b - (Buf[0].b + Buf[1].b + Buf[2].b + Buf[3].b +
Buf[5].b + Buf[6].b + Buf[7].b + Buf[8].b) * 16) div 128);
pc.g := IntToByte((256 * Buf[4].g - (Buf[0].g + Buf[1].g + Buf[2].g + Buf[3].g +
Buf[5].g + Buf[6].g + Buf[7].g + Buf[8].g) * 16) div 128);
pc.r := IntToByte((256 * Buf[4].r - (Buf[0].r + Buf[1].r + Buf[2].r + Buf[3].r +
Buf[5].r + Buf[6].r + Buf[7].r + Buf[8].r) * 16) div 128);
PBGR(D)^.B := pc.b;
PBGR(D)^.G := pc.g;
PBGR(D)^.R := pc.r;
Inc(PBGR(D));
end;
8:
begin
Inc(PByte(D));
end;
4:
begin
P1 := @PArrayByte(D)[X shr 1];
P1^ := ((P1^ and Mask4n[X and 1]) or ((c shl Shift4[X and 1])));
end;
end;
end;
end;
case BitCount of
24, 8:
begin
Assign(Temp1);
Temp1.Free;
end;
4: Temp1.Free;
end;
FreeMem(pc, SizeOf(TBGR));
end;
 
UpdateProgress(y*2);
procedure TDIB.Emboss;
var
x, y: longint;
D, D1, P: pointer;
color: TBGR;
c: DWORD;
P1: PByte;
 
begin
D := nil;
D1 := nil;
P := nil;
case BitCount of
32, 16, 1: Exit;
24:
begin
D := PBits;
D1 := Ptr(Integer(D) + 3);
end;
finally
EndProgress;
else
end;
for y := 0 to Pred(Height) do
begin
case Bitcount of
8, 4:
begin
P := ScanLine[y];
end;
end;
for x := 0 to Pred(Width) do
begin
case BitCount of
24:
begin
PBGR(D)^.B := ((PBGR(D)^.B + (PBGR(D1)^.B xor $FF)) shr 1);
PBGR(D)^.G := ((PBGR(D)^.G + (PBGR(D1)^.G xor $FF)) shr 1);
PBGR(D)^.R := ((PBGR(D)^.R + (PBGR(D1)^.R xor $FF)) shr 1);
Inc(PBGR(D));
if (y < Height - 2) and (x < Width - 2) then
Inc(PBGR(D1));
end;
8:
begin
color.R := (((Pixels[x, y] + (Pixels[x + 3, y] xor $FF)) shr 1) + 30) div 3;
color.G := (((Pixels[x, y] + (Pixels[x + 3, y] xor $FF)) shr 1) + 30) div 3;
color.B := (((Pixels[x, y] + (Pixels[x + 3, y] xor $FF)) shr 1) + 30) div 3;
c := (color.R + color.G + color.B) shr 1;
PByte(P)^ := c;
Inc(PByte(P));
end;
4:
begin
color.R := (((Pixels[x, y] + (Pixels[x + 3, y] xor $FF) + 1) shr 1) + 30) div 3;
color.G := (((Pixels[x, y] + (Pixels[x + 3, y] xor $FF) - 1) shr 1) + 30) div 3;
color.B := (((Pixels[x, y] + (Pixels[x + 3, y] xor $FF) + 1) shr 1) + 30) div 3;
c := (color.R + color.G + color.B) shr 1;
if c > 64 then
c := c - 8;
P1 := @PArrayByte(P)[X shr 1];
P1^ := (P1^ and Mask4n[X and 1]) or ((c) shl Shift4[X and 1]);
end;
else
end;
end;
case BitCount of
24:
begin
D := Ptr(Integer(D1));
if y < Height - 2 then
D1 := Ptr(Integer(D1) + 6)
else
D1 := Ptr(Integer(ScanLine[Pred(Height)]) + 3);
end;
else
end;
end;
end;
 
procedure TDIB.Negative;
procedure TDIB.AddMonoNoise(Amount: Integer);
var
i, i2: Integer;
P: Pointer;
value: cardinal;
x, y: longint;
a: byte;
D: pointer;
color: DWORD;
P: PByte;
begin
if Empty then exit;
for y := 0 to Pred(Height) do
begin
D := ScanLine[y];
for x := 0 to Pred(Width) do
begin
case BitCount of
32: Exit; // I haven't bitmap of this type ! Sorry
24:
begin
value := Random(Amount) - (Amount shr 1);
PBGR(D)^.B := IntToByte(PBGR(D)^.B + value);
PBGR(D)^.G := IntToByte(PBGR(D)^.G + value);
PBGR(D)^.R := IntToByte(PBGR(D)^.R + value);
Inc(PBGR(D));
end;
16: Exit; // I haven't bitmap of this type ! Sorry
8:
begin
a := ((Random(Amount shr 1) - (Amount div 4))) div 8;
color := Interval(0, 255, (pixels[x, y] - a), True);
PByte(D)^ := color;
Inc(PByte(D));
end;
4:
begin
a := ((Random(Amount shr 1) - (Amount div 4))) div 16;
color := Interval(0, 15, (pixels[x, y] - a), True);
P := @PArrayByte(D)[X shr 1];
P^ := ((P^ and Mask4n[X and 1]) or ((color shl Shift4[X and 1])));
end;
1:
begin
a := ((Random(Amount shr 1) - (Amount div 4))) div 32;
color := Interval(0, 1, (pixels[x, y] - a), True);
P := @PArrayByte(D)[X shr 3];
P^ := (P^ and Mask1n[X and 7]) or (color shl Shift1[X and 7]);
end;
else
end;
end;
end;
end;
 
if BitCount<=8 then
procedure TDIB.AddGradiantNoise(Amount: byte);
var
a, i: byte;
x, y: Integer;
Table: array[0..255] of TBGR;
S, D: pointer;
color: DWORD;
Temp1: TDIB;
P: PByte;
 
begin
D := nil;
S := nil;
Temp1 := nil;
case BitCount of
32: Exit; // I haven't bitmap of this type ! Sorry
24:
begin
for i:=0 to 255 do
begin
a := Random(Amount);
Table[i].b := IntToByte(i + a);
Table[i].g := IntToByte(i + a);
Table[i].r := IntToByte(i + a);
end;
end;
16: Exit; // I haven't bitmap of this type ! Sorry
8, 4:
begin
Temp1 := TDIB.Create;
Temp1.Assign(self);
Temp1.SetSize(Width, Height, BitCount);
for i := 0 to 255 do
begin
with ColorTable[i] do
begin
rgbRed := 255-rgbRed;
rgbGreen := 255-rgbGreen;
rgbBlue := 255-rgbBlue;
a := Random(Amount);
rgbRed := IntToByte(rgbRed + a);
rgbGreen := IntToByte(rgbGreen + a);
rgbBlue := IntToByte(rgbBlue + a);
end;
end;
UpdatePalette;
end else
end;
else
// if the number of pixel is equal to 1 then exit of procedure
Exit;
end;
for y := 0 to Pred(Height) do
begin
P := PBits;
i2 := Size;
asm
mov ecx,i2
mov eax,P
mov edx,ecx
case BitCount of
24: D := ScanLine[y];
8, 4:
begin
D := Temp1.ScanLine[y];
S := Temp1.ScanLine[y];
end;
else
end;
for x := 0 to Pred(Width) do
begin
case BitCount of
32: ; // I haven't bitmap of this type ! Sorry
24:
begin
PBGR(D)^.B := Table[PBGR(D)^.B].b;
PBGR(D)^.G := Table[PBGR(D)^.G].g;
PBGR(D)^.R := Table[PBGR(D)^.R].r;
Inc(PBGR(D));
end;
16: ; // I haven't bitmap of this type ! Sorry
8:
begin
with Temp1.ColorTable[PByte(S)^] do
color := rgbRed + rgbGreen + rgbBlue;
Inc(PByte(S));
PByte(D)^ := color;
Inc(PByte(D));
end;
4:
begin
with Temp1.ColorTable[PByte(S)^] do
color := rgbRed + rgbGreen + rgbBlue;
Inc(PByte(S));
P := @PArrayByte(D)[X shr 1];
P^ := (P^ and Mask4n[X and 1]) or (color shl Shift4[X and 1]);
end;
else
end;
end;
end;
case BitCount of
8, 4: Temp1.Free;
else
end;
end;
 
{ Unit of DWORD. }
@@qword_skip:
shr ecx,2
jz @@dword_skip
function TDIB.FishEye(bmp: TDIB): Boolean;
var
weight, xmid, ymid, fx, fy, r1, r2, dx, dy, rmax: Double;
Amount, ifx, ify, ty, tx, new_red, new_green, new_blue, ix, iy: Integer;
weight_x, weight_y: array[0..1] of Double;
total_red, total_green, total_blue: Double;
sli, slo: PLines;
//D: Pointer;
begin
Result := True;
case BitCount of
32, 16, 8, 4, 1:
begin
Result := False;
Exit;
end;
end;
Amount := 1;
xmid := Width / 2;
ymid := Height / 2;
rmax := Max(Bmp.Width, Bmp.Height) * Amount;
for ty := 0 to Pred(Height) do
begin
for tx := 0 to Pred(Width) do
begin
dx := tx - xmid;
dy := ty - ymid;
r1 := Sqrt(Sqr(dx) + Sqr(dy));
if r1 <> 0 then
begin
r2 := rmax / 2 * (1 / (1 - r1 / rmax) - 1);
fx := dx * r2 / r1 + xmid;
fy := dy * r2 / r1 + ymid;
end
else
begin
fx := xmid;
fy := ymid;
end;
ify := Trunc(fy);
ifx := Trunc(fx);
if fy >= 0 then
begin
weight_y[1] := fy - ify;
weight_y[0] := 1 - weight_y[1];
end
else
begin
weight_y[0] := -(fy - ify);
weight_y[1] := 1 - weight_y[0];
end;
if fx >= 0 then
begin
weight_x[1] := fx - ifx;
weight_x[0] := 1 - weight_x[1];
end
else
begin
weight_x[0] := -(fx - ifx);
Weight_x[1] := 1 - weight_x[0];
end;
if ifx < 0 then
ifx := Pred(Width) - (-ifx mod Width)
else
if ifx > Pred(Width) then
ifx := ifx mod Width;
if ify < 0 then
ify := Pred(Height) - (-ify mod Height)
else
if ify > Pred(Height) then
ify := ify mod Height;
total_red := 0.0;
total_green := 0.0;
total_blue := 0.0;
for ix := 0 to 1 do
begin
for iy := 0 to 1 do
begin
if ify + iy < Height then
sli := ScanLine[ify + iy]
else
sli := ScanLine[Height - ify - iy];
if ifx + ix < Width then
begin
new_red := sli^[ifx + ix].r;
new_green := sli^[ifx + ix].g;
new_blue := sli^[ifx + ix].b;
end
else
begin
new_red := sli^[Width - ifx - ix].r;
new_green := sli^[Width - ifx - ix].g;
new_blue := sli^[Width - ifx - ix].b;
end;
weight := weight_x[ix] * weight_y[iy];
total_red := total_red + new_red * weight;
total_green := total_green + new_green * weight;
total_blue := total_blue + new_blue * weight;
end;
end;
case bitCount of
24:
begin
slo := Bmp.ScanLine[ty];
slo^[tx].r := Round(total_red);
slo^[tx].g := Round(total_green);
slo^[tx].b := Round(total_blue);
end;
else
// You can implement this procedure for 16,8,4,2 and 32 BitCount's DIB
Exit;
end;
end;
end;
end;
 
dec ecx
@@dword_loop:
not dword ptr [eax+ecx*4]
dec ecx
jnl @@dword_loop
function TDIB.SmoothRotateWrap(Bmp: TDIB; cx, cy: Integer; Degree: Extended): Boolean;
var
weight, Theta, cosTheta, sinTheta, sfrom_y, sfrom_x: Double;
ifrom_y, ifrom_x, xDiff, yDiff, to_y, to_x: Integer;
weight_x, weight_y: array[0..1] of Double;
ix, iy, new_red, new_green, new_blue: Integer;
total_red, total_green, total_blue: Double;
sli, slo: PLines;
begin
Result := True;
case BitCount of
32, 16, 8, 4, 1:
begin
Result := False;
Exit;
end;
end;
Theta := -Degree * Pi / 180;
sinTheta := Sin(Theta);
cosTheta := Cos(Theta);
xDiff := (Bmp.Width - Width) div 2;
yDiff := (Bmp.Height - Height) div 2;
for to_y := 0 to Pred(Bmp.Height) do
begin
for to_x := 0 to Pred(Bmp.Width) do
begin
sfrom_x := (cx + (to_x - cx) * cosTheta - (to_y - cy) * sinTheta) - xDiff;
ifrom_x := Trunc(sfrom_x);
sfrom_y := (cy + (to_x - cx) * sinTheta + (to_y - cy) * cosTheta) - yDiff;
ifrom_y := Trunc(sfrom_y);
if sfrom_y >= 0 then
begin
weight_y[1] := sfrom_y - ifrom_y;
weight_y[0] := 1 - weight_y[1];
end
else
begin
weight_y[0] := -(sfrom_y - ifrom_y);
weight_y[1] := 1 - weight_y[0];
end;
if sfrom_x >= 0 then
begin
weight_x[1] := sfrom_x - ifrom_x;
weight_x[0] := 1 - weight_x[1];
end
else
begin
weight_x[0] := -(sfrom_x - ifrom_x);
Weight_x[1] := 1 - weight_x[0];
end;
if ifrom_x < 0 then
ifrom_x := Pred(Width) - (-ifrom_x mod Width)
else
if ifrom_x > Pred(Width) then
ifrom_x := ifrom_x mod Width;
if ifrom_y < 0 then
ifrom_y := Pred(Height) - (-ifrom_y mod Height)
else
if ifrom_y > Pred(Height) then
ifrom_y := ifrom_y mod Height;
total_red := 0.0;
total_green := 0.0;
total_blue := 0.0;
for ix := 0 to 1 do
begin
for iy := 0 to 1 do
begin
if ifrom_y + iy < Height then
sli := ScanLine[ifrom_y + iy]
else
sli := ScanLine[Height - ifrom_y - iy];
if ifrom_x + ix < Width then
begin
new_red := sli^[ifrom_x + ix].r;
new_green := sli^[ifrom_x + ix].g;
new_blue := sli^[ifrom_x + ix].b;
end
else
begin
new_red := sli^[Width - ifrom_x - ix].r;
new_green := sli^[Width - ifrom_x - ix].g;
new_blue := sli^[Width - ifrom_x - ix].b;
end;
weight := weight_x[ix] * weight_y[iy];
total_red := total_red + new_red * weight;
total_green := total_green + new_green * weight;
total_blue := total_blue + new_blue * weight;
end;
end;
case bitCount of
24:
begin
slo := Bmp.ScanLine[to_y];
slo^[to_x].r := Round(total_red);
slo^[to_x].g := Round(total_green);
slo^[to_x].b := Round(total_blue);
end;
else
// You can implement this procedure for 16,8,4,2 and 32 BitCount's DIB
Exit;
end;
end;
end;
end;
 
mov ecx,edx
shr ecx,2
add eax,ecx*4
function TDIB.Rotate(Dst: TDIB; cx, cy: Integer; Angle: Double): Boolean;
var
x, y, dx, dy, sdx, sdy, xDiff, yDiff, isinTheta, icosTheta: Integer;
D, S: Pointer;
sinTheta, cosTheta, Theta: Double;
Col: TBGR;
i: byte;
color: DWORD;
P: PByte;
begin
D := nil;
S := nil;
Result := True;
dst.SetSize(Width, Height, Bitcount);
dst.Canvas.Brush.Color := clBlack;
Dst.Canvas.FillRect(Bounds(0, 0, Width, Height));
case BitCount of
32, 16:
begin
Result := False;
Exit;
end;
8, 4, 1:
begin
for i := 0 to 255 do
Dst.ColorTable[i] := ColorTable[i];
Dst.UpdatePalette;
end;
end;
Theta := -Angle * Pi / 180;
sinTheta := Sin(Theta);
cosTheta := Cos(Theta);
xDiff := (Dst.Width - Width) div 2;
yDiff := (Dst.Height - Height) div 2;
isinTheta := Round(sinTheta * $10000);
icosTheta := Round(cosTheta * $10000);
for y := 0 to Pred(Dst.Height) do
begin
case BitCount of
4, 1:
begin
D := Dst.ScanLine[y];
S := ScanLine[y];
end;
else
end;
sdx := Round(((cx + (-cx) * cosTheta - (y - cy) * sinTheta) - xDiff) * $10000);
sdy := Round(((cy + (-cy) * sinTheta + (y - cy) * cosTheta) - yDiff) * $10000);
for x := 0 to Pred(Dst.Width) do
begin
dx := (sdx shr 16);
dy := (sdy shr 16);
if (dx > -1) and (dx < Width) and (dy > -1) and (dy < Height) then
begin
case bitcount of
8, 24: Dst.pixels[x, y] := Pixels[dx, dy];
4:
begin
pfGetRGB(NowPixelFormat, Pixels[dx, dy], col.r, col.g, col.b);
color := col.r + col.g + col.b;
Inc(PByte(S));
P := @PArrayByte(D)[x shr 1];
P^ := (P^ and Mask4n[x and 1]) or (color shl Shift4[x and 1]);
end;
1:
begin
pfGetRGB(NowPixelFormat, Pixels[dx, dy], col.r, col.g, col.b);
color := col.r + col.g + col.b;
Inc(PByte(S));
P := @PArrayByte(D)[X shr 3];
P^ := (P^ and Mask1n[X and 7]) or (color shl Shift1[X and 7]);
end;
end;
end;
Inc(sdx, icosTheta);
Inc(sdy, isinTheta);
end;
end;
end;
 
{ Unit of Byte. }
@@dword_skip:
mov ecx,edx
and ecx,3
jz @@byte_skip
procedure TDIB.GaussianBlur(Bmp: TDIB; Amount: Integer);
var
i: Integer;
begin
for i := 1 to Amount do
Bmp.SplitBlur(i);
end;
 
dec ecx
@@loop_byte:
not byte ptr [eax+ecx]
dec ecx
jnl @@loop_byte
procedure TDIB.SplitBlur(Amount: Integer);
var
Lin1, Lin2: PLines;
cx, x, y: Integer;
Buf: array[0..3] of TBGR;
D: Pointer;
 
@@byte_skip:
begin
case Bitcount of
32, 16, 8, 4, 1: Exit;
end;
for y := 0 to Pred(Height) do
begin
Lin1 := ScanLine[TrimInt(y + Amount, 0, Pred(Height))];
Lin2 := ScanLine[TrimInt(y - Amount, 0, Pred(Height))];
D := ScanLine[y];
for x := 0 to Pred(Width) do
begin
cx := TrimInt(x + Amount, 0, Pred(Width));
Buf[0] := Lin1[cx];
Buf[1] := Lin2[cx];
cx := TrimInt(x - Amount, 0, Pred(Width));
Buf[2] := Lin1[cx];
Buf[3] := Lin2[cx];
PBGR(D)^.b := (Buf[0].b + Buf[1].b + Buf[2].b + Buf[3].b) shr 2;
PBGR(D)^.g := (Buf[0].g + Buf[1].g + Buf[2].g + Buf[3].g) shr 2;
PBGR(D)^.r := (Buf[0].r + Buf[1].r + Buf[2].r + Buf[3].r) shr 2;
Inc(PBGR(D));
end;
end;
end;
 
function TDIB.Twist(bmp: TDIB; Amount: byte): Boolean;
var
fxmid, fymid: Single;
txmid, tymid: Single;
fx, fy: Single;
tx2, ty2: Single;
r: Single;
theta: Single;
ifx, ify: Integer;
dx, dy: Single;
OFFSET: Single;
ty, tx, ix, iy: Integer;
weight_x, weight_y: array[0..1] of Single;
weight: Single;
new_red, new_green, new_blue: Integer;
total_red, total_green, total_blue: Single;
sli, slo: PLines;
 
function ArcTan2(xt, yt: Single): Single; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if xt = 0 then
if yt > 0 then
Result := Pi / 2
else
Result := -(Pi / 2)
else
begin
Result := ArcTan(yt / xt);
if xt < 0 then
Result := Pi + ArcTan(yt / xt);
end;
end;
 
begin
Result := True;
case BitCount of
32, 16, 8, 4, 1:
begin
Result := False;
Exit;
end;
end;
if Amount = 0 then
Amount := 1;
OFFSET := -(Pi / 2);
dx := Pred(Width);
dy := Pred(Height);
r := Sqrt(dx * dx + dy * dy);
tx2 := r;
ty2 := r;
txmid := (Pred(Width)) / 2;
tymid := (Pred(Height)) / 2;
fxmid := (Pred(Width)) / 2;
fymid := (Pred(Height)) / 2;
if tx2 >= Width then
tx2 := Pred(Width);
if ty2 >= Height then
ty2 := Pred(Height);
for ty := 0 to Round(ty2) do
begin
for tx := 0 to Round(tx2) do
begin
dx := tx - txmid;
dy := ty - tymid;
r := Sqrt(dx * dx + dy * dy);
if r = 0 then
begin
fx := 0;
fy := 0;
end
else
begin
theta := ArcTan2(dx, dy) - r / Amount - OFFSET;
fx := r * Cos(theta);
fy := r * Sin(theta);
end;
fx := fx + fxmid;
fy := fy + fymid;
ify := Trunc(fy);
ifx := Trunc(fx);
if fy >= 0 then
begin
weight_y[1] := fy - ify;
weight_y[0] := 1 - weight_y[1];
end
else
begin
weight_y[0] := -(fy - ify);
weight_y[1] := 1 - weight_y[0];
end;
if fx >= 0 then
begin
weight_x[1] := fx - ifx;
weight_x[0] := 1 - weight_x[1];
end
else
begin
weight_x[0] := -(fx - ifx);
Weight_x[1] := 1 - weight_x[0];
end;
if ifx < 0 then
ifx := Pred(Width) - (-ifx mod Width)
else
if ifx > Pred(Width) then
ifx := ifx mod Width;
if ify < 0 then
ify := Pred(Height) - (-ify mod Height)
else
if ify > Pred(Height) then
ify := ify mod Height;
total_red := 0.0;
total_green := 0.0;
total_blue := 0.0;
for ix := 0 to 1 do
begin
for iy := 0 to 1 do
begin
if ify + iy < Height then
sli := ScanLine[ify + iy]
else
sli := ScanLine[Height - ify - iy];
if ifx + ix < Width then
begin
new_red := sli^[ifx + ix].r;
new_green := sli^[ifx + ix].g;
new_blue := sli^[ifx + ix].b;
end
else
begin
new_red := sli^[Width - ifx - ix].r;
new_green := sli^[Width - ifx - ix].g;
new_blue := sli^[Width - ifx - ix].b;
end;
weight := weight_x[ix] * weight_y[iy];
total_red := total_red + new_red * weight;
total_green := total_green + new_green * weight;
total_blue := total_blue + new_blue * weight;
end;
end;
case bitCount of
24:
begin
slo := bmp.ScanLine[ty];
slo^[tx].r := Round(total_red);
slo^[tx].g := Round(total_green);
slo^[tx].b := Round(total_blue);
end;
else
// You can implement this procedure for 16,8,4,2 and 32 BitCount's DIB
Exit;
end;
end;
end;
end;
 
function TDIB.TrimInt(i, Min, Max: Integer): Integer;
begin
if i > Max then
Result := Max
else
if i < Min then
Result := Min
else
Result := i;
end;
 
function TDIB.IntToByte(i: Integer): Byte;
begin
if i > 255 then
Result := 255
else
if i < 0 then
Result := 0
else
Result := i;
end;
 
//--------------------------------------------------------------------------------------------------
// End of these New Special Effect //
// Please contributes to add effects and filters to this collection //
// Please, work to implement 32,16,8,4,2 BitCount's DIB //
// Have fun - Mickey - Good job //
//--------------------------------------------------------------------------------------------------
 
function TDIB.GetAlphaChannel: TDIB;
var
I: Integer;
begin
RetAlphaChannel(Result);
if Result = nil then Exit;
 
if FFreeList.Count > 0 then
for I := 0 to FFreeList.Count - 1 do
if FFreeList[I] = Result then Exit;
 
FFreeList.Add(Result);
end;
 
procedure TDIB.SetAlphaChannel(const Value: TDIB);
begin
if not AssignAlphaChannel(Value{$IFNDEF VER4UP}, False{$ENDIF}) then
Exception.Create('Cannot set alphachannel from DIB.');
end;
 
procedure TDIB.Fill(aColor: TColor);
var
p: PRGBA;
y: Integer;
x: Integer;
begin
Canvas.Brush.Color := aColor;
Canvas.FillRect(ClientRect);
if Self.BitCount = 32 then
begin
//fill alpha chanell too with $FF
for Y := 0 to Self.Height - 1 do
begin
p := Self.ScanLine[Y];
for X := 0 to Self.Width - 1 do
begin
p[X].rgbReserved := $FF
end;
end;
end;
end;
 
function TDIB.GetClientRect: TRect;
begin
Result := Bounds(0, 0, Width, Height);
end;
 
{ TCustomDXDIB }
 
constructor TCustomDXDIB.Create(AOnwer: TComponent);
3078,17 → 5476,20
begin
inherited Canvas.StretchDraw(Bounds(-(Width-ClientWidth) div 2,
-(Height-ClientHeight) div 2, Width, Height), FDIB);
end else
end
else
begin
inherited Canvas.StretchDraw(Bounds(0, 0, Width, Height), FDIB);
end;
end else
end
else
begin
if FCenter then
begin
inherited Canvas.Draw(-(Width-ClientWidth) div 2, -(Height-ClientHeight) div 2,
FDIB);
end else
end
else
begin
inherited Canvas.Draw(0, 0, FDIB);
end;
3128,11 → 5529,14
if r>r2 then
r := r2;
Draw2(Round(r*ClientWidth), Round(r*ClientHeight));
end else
end
else
Draw2(ViewWidth2, ViewHeight2);
end else
end
else
Draw2(ViewWidth2, ViewHeight2);
end else
end
else
begin
if FAutoStretch then
begin
3143,9 → 5547,11
if r>r2 then
r := r2;
Draw2(Round(r*FDIB.Width), Round(r*FDIB.Height));
end else
end
else
Draw2(FDIB.Width, FDIB.Height);
end else
end
else
if FStretch then
begin
if FKeepAspect then
3155,9 → 5561,11
if r>r2 then
r := r2;
Draw2(Round(r*FDIB.Width), Round(r*FDIB.Height));
end else
end
else
Draw2(ClientWidth, ClientHeight);
end else
end
else
Draw2(FDIB.Width, FDIB.Height);
end;
end;
3228,6 → 5636,4548
end;
end;
 
{ DXFusion -> }
 
function PosValue(Value: Integer): Integer;
begin
if Value < 0 then result := 0 else result := Value;
end;
 
procedure TDIB.CreateDIBFromBitmap(const Bitmap: TBitmap);
var
pf: Integer;
X, Y: Integer;
P: PLinesA;
q: PRGBA;
begin
if Bitmap.PixelFormat = pf32bit then pf := 32 else pf := 24;
SetSize(Bitmap.Width, Bitmap.Height, pf); {always >=24}
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Bounds(0, 0, Width, Height));
Canvas.Draw(0, 0, Bitmap);
//Note. Transparent background from bitmap is not drawed when is alphalayer active
if (pf = 32) {and (Bitmap.AlphaFormat <> afIgnored)} then
begin
for y := 0 to Bitmap.Height-1 do
begin
p := Bitmap.ScanLine[y]; //BGRA
q := Self.ScanLine[y]; //ARGB
for x := 0 to Width-1 do //copy only alphachannel
q[x].rgbReserved := P[x].A;
end;
end;
end;
 
function TDIB.CreateBitmapFromDIB: TBitmap;
var
ach: Boolean;
X, Y: Integer;
P: PLinesA;
q: PRGBA;
begin
ach := False;
Result := TBitmap.Create;
case BitCount of
32:
begin
Result.PixelFormat := pf32bit;
ach := HasAlphaChannel;
end;
24: Result.PixelFormat := pf24bit;
15: Result.PixelFormat := pf16bit;
8: Result.PixelFormat := pf8bit;
else
Result.PixelFormat := pf24bit;
end;
 
Result.Width := Width;
Result.Height := Height;
Result.Canvas.Draw(0, 0, Self);
if (BitCount = 32) then
begin
if ach then
begin
{$IFDEF VER16UP}
Result.AlphaFormat := afDefined;
{$ENDIF}
for y := 0 to Height-1 do
begin
p := Result.ScanLine[y]; //BGRA
q := Self.ScanLine[y]; //ARGB
for x := 0 to Width-1 do //copy only alphachannel
P[x].A := q[x].rgbReserved;
end;
end;
end;
end;
 
procedure TDIB.DrawTo(SrcDIB: TDIB; X, Y, Width, Height,
SourceX, SourceY: Integer);
begin
SrcDIB.DrawOn(Rect(X, Y, Width, Height), Self.Canvas, SourceX, SourceY);
end;
 
procedure TDIB.DrawTransparent(SrcDIB: TDIB; const X, Y, Width, Height,
SourceX, SourceY: Integer; const Color: TColor);
var
i, j: Integer;
k1, k2: Integer;
n: Integer;
p1, p2: PByteArray;
 
Startk1, Startk2: Integer;
 
StartY: Integer;
EndY: Integer;
 
DestStartY: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
Startk1 := 3 * SourceX;
Startk2 := 3 * X;
 
DestStartY := Y - SourceY;
 
StartY := SourceY;
EndY := SourceY + Height;
 
if (StartY + DestStartY < 0) then
StartY := -DestStartY;
if (EndY + DestStartY > Self.Height) then
EndY := Self.Height - DestStartY;
 
if (StartY < 0) then
StartY := 0;
if (EndY > SrcDIB.Height) then
EndY := SrcDIB.Height;
 
for j := StartY to EndY - 1 do
begin
p1 := Self.Scanline[j + DestStartY];
p2 := SrcDIB.Scanline[j];
 
k1 := Startk1;
k2 := Startk2;
 
for i := SourceX to SourceX + Width - 1 do
begin
n := (p2[k1] shl 16) + (p2[k1 + 1] shl 8) + p2[k1 + 2];
 
if not (n = Color) then
begin
p1[k2] := p2[k1];
p1[k2 + 1] := p2[k1 + 1];
p1[k2 + 2] := p2[k1 + 2];
end;
 
k1 := k1 + 3;
k2 := k2 + 3;
end;
end;
end;
 
procedure TDIB.DrawShadow(SrcDIB: TDIB; X, Y, Width, Height,
Frame: Integer; FilterMode: TFilterMode);
var
i, j: Integer;
p1, p2: PByte;
FW: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
FW := Frame * Width;
for i := 1 to Height - 1 do
begin
p1 := Self.Scanline[i + Y];
p2 := SrcDIB.Scanline[i];
Inc(p1, 3 * (X + 1));
Inc(p2, 3 * (FW + 1));
for j := 1 to Width - 1 do
begin
if (p2^ = 0) then
begin
case FilterMode of
fmNormal, fmMix50:
begin
p1^ := p1^ shr 1; // Blue
Inc(p1);
p1^ := p1^ shr 1; // Green
Inc(p1);
p1^ := p1^ shr 1; // Red
Inc(p1);
end;
fmMix25:
begin
p1^ := p1^ - p1^ shr 2; // Blue
Inc(p1);
p1^ := p1^ - p1^ shr 2; // Green
Inc(p1);
p1^ := p1^ - p1^ shr 2; // Red
Inc(p1);
end;
fmMix75:
begin
p1^ := p1^ shr 2; // Blue
Inc(p1);
p1^ := p1^ shr 2; // Green
Inc(p1);
p1^ := p1^ shr 2; // Red
Inc(p1);
end;
end;
end
else
Inc(p1, 3); // Not in the loop...
Inc(p2, 3);
end;
end;
end;
 
procedure TDIB.DrawShadows(SrcDIB: TDIB; X, Y, Width, Height,
Frame: Integer; Alpha: Byte);
{plynule nastavovani stiny dle alpha}
type
P3ByteArray = ^T3ByteArray;
T3ByteArray = array[0..32767] of TBGR;
var
i, j, l1, l2: Integer;
p1, p2: P3ByteArray;
FW: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
FW := Frame * Width;
for i := 0 to Height - 1 do
begin
p1 := Self.Scanline[i + Y];
p2 := SrcDIB.Scanline[i];
l1 := X;
l2 := FW;
for j := 0 to Width - 1 do
begin
if (p2[j + l2].B = 0) and (p2[j + l2].G = 0) and (p2[j + l2].R = 0) then
begin
p1[J + l1].B := Round(p1[J + l1].B / $FF * Alpha);
p1[J + l1].G := Round(p1[J + l1].G / $FF * Alpha);
p1[J + l1].R := Round(p1[J + l1].R / $FF * Alpha);
end
end;
end;
end;
 
procedure TDIB.DrawDarken(SrcDIB: TDIB; X, Y, Width, Height,
Frame: Integer);
var
frameoffset, i, j: Integer;
p1, p2: pByte;
XOffset: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
frameoffset := 3 * (Frame * Width) + 3;
XOffset := 3 * X + 3;
for i := 1 to Height - 1 do
begin
p1 := Self.Scanline[i + Y];
p2 := SrcDIB.Scanline[i];
inc(p1, XOffset);
inc(p2, frameoffset);
for j := 1 to Width - 1 do
begin
p1^ := (p2^ * p1^) shr 8; // R
inc(p1);
inc(p2);
p1^ := (p2^ * p1^) shr 8; // G
inc(p1);
inc(p2);
p1^ := (p2^ * p1^) shr 8; // B
inc(p1);
inc(p2);
end;
end;
end;
 
procedure TDIB.DrawQuickAlpha(SrcDIB: TDIB; const X, Y, Width, Height,
SourceX, SourceY: Integer; const Color: TColor; FilterMode: TFilterMode);
var
i, j: Integer;
k1, k2: Integer;
n: Integer;
p1, p2: PByteArray;
BitSwitch1, BitSwitch2: Boolean;
 
Startk1, Startk2: Integer;
StartY: Integer;
EndY: Integer;
 
DestStartY: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
Startk1 := 3 * SourceX;
Startk2 := 3 * X;
 
DestStartY := Y - SourceY;
 
StartY := SourceY;
EndY := SourceY + Height;
 
if (StartY + DestStartY < 0) then
StartY := -DestStartY;
if (EndY + DestStartY > Self.Height) then
EndY := Self.Height - DestStartY;
 
if (StartY < 0) then
StartY := 0;
if (EndY > SrcDIB.Height) then
EndY := SrcDIB.Height;
 
if Odd(Y) then BitSwitch1 := true else BitSwitch1 := false;
if Odd(X) then BitSwitch2 := true else BitSwitch2 := false;
 
for j := StartY to EndY - 1 do
begin
BitSwitch1 := not BitSwitch1;
p1 := Self.Scanline[j + DestStartY];
p2 := SrcDIB.Scanline[j];
 
k1 := Startk1;
k2 := Startk2;
 
for i := SourceX to SourceX + Width - 1 do
begin
BitSwitch2 := not BitSwitch2;
 
n := (p2[k1] shl 16) + (p2[k1 + 1] shl 8) + p2[k1 + 2];
 
case FilterMode of
fmNormal, fmMix50: if not (n = Color) and (BitSwitch1 xor BitSwitch2) then
begin
p1[k2] := p2[k1];
p1[k2 + 1] := p2[k1 + 1];
p1[k2 + 2] := p2[k1 + 2];
end;
fmMix25: if not (n = Color) and (BitSwitch1 and BitSwitch2) then
begin
p1[k2] := p2[k1];
p1[k2 + 1] := p2[k1 + 1];
p1[k2 + 2] := p2[k1 + 2];
end;
fmMix75: if not (n = Color) and (BitSwitch1 or BitSwitch2) then
begin
p1[k2] := p2[k1];
p1[k2 + 1] := p2[k1 + 1];
p1[k2 + 2] := p2[k1 + 2];
end;
end;
 
k1 := k1 + 3;
k2 := k2 + 3;
end;
end;
end;
 
procedure TDIB.DrawAdditive(SrcDIB: TDIB; X, Y, Width, Height, Alpha, Frame:
Integer);
var
frameoffset, i, j, Wid: Integer;
p1, p2: pByte;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
if (Alpha < 1) or (Alpha > 256) then Exit;
Wid := Width shl 1 + Width;
frameoffset := Wid * Frame;
for i := 1 to Height - 1 do
begin
if (i + Y) > (Self.Height - 1) then Break; //add 25.5.2004 JB.
p1 := Self.Scanline[i + Y];
p2 := SrcDIB.Scanline[i];
inc(p1, X shl 1 + X + 3);
inc(p2, frameoffset + 3);
for j := 3 to Wid - 4 do
begin
inc(p1^, (Alpha - p1^) * p2^ shr 8);
inc(p1);
inc(p2);
end;
end;
end;
 
procedure TDIB.DrawTranslucent(SrcDIB: TDIB; const X, Y, Width, Height,
SourceX, SourceY: Integer; const Color: TColor);
var
i, j: Integer;
k1, k2: Integer;
n: Integer;
p1, p2: PByteArray;
 
Startk1, Startk2: Integer;
StartY: Integer;
EndY: Integer;
 
DestStartY: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
Startk1 := 3 * SourceX;
Startk2 := 3 * X;
 
DestStartY := Y - SourceY;
 
StartY := SourceY;
EndY := SourceY + Height;
 
if (StartY + DestStartY < 0) then
StartY := -DestStartY;
if (EndY + DestStartY > Self.Height) then
EndY := Self.Height - DestStartY;
 
if (StartY < 0) then
StartY := 0;
if (EndY > SrcDIB.Height) then
EndY := SrcDIB.Height;
 
for j := StartY to EndY - 1 do
begin
p1 := Self.Scanline[j + DestStartY];
p2 := SrcDIB.Scanline[j];
 
k1 := Startk1;
k2 := Startk2;
 
for i := SourceX to SourceX + Width - 1 do
begin
n := (p2[k1] shl 16) + (p2[k1 + 1] shl 8) + p2[k1 + 2];
 
if not (n = Color) then
begin
p1[k2] := (p1[k2] + p2[k1]) shr 1;
p1[k2 + 1] := (p1[k2 + 1] + p2[k1 + 1]) shr 1;
p1[k2 + 2] := (p1[k2 + 2] + p2[k1 + 2]) shr 1;
end;
 
k1 := k1 + 3;
k2 := k2 + 3;
end;
end;
end;
 
procedure TDIB.DrawAlpha(SrcDIB: TDIB; const X, Y, Width, Height,
SourceX, SourceY, Alpha: Integer; const Color: TColor);
var
i, j: Integer;
k1, k2: Integer;
n: Integer;
p1, p2: PByteArray;
 
Startk1, Startk2: Integer;
StartY: Integer;
EndY: Integer;
 
DestStartY: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
Startk1 := 3 * SourceX;
Startk2 := 3 * x;
 
DestStartY := Y - SourceY;
 
StartY := SourceY;
EndY := SourceY + Height;
 
if (EndY + DestStartY > Self.Height) then
EndY := Self.Height - DestStartY;
 
if (EndY > SrcDIB.Height) then
EndY := SrcDIB.Height;
 
if (StartY < 0) then
StartY := 0;
 
if (StartY + DestStartY < 0) then
StartY := DestStartY;
 
for j := StartY to EndY - 1 do
begin
p1 := Self.Scanline[j + DestStartY];
p2 := SrcDIB.Scanline[j];
 
k1 := Startk1;
k2 := Startk2;
 
for i := SourceX to SourceX + Width - 1 do
begin
n := (p2[k1] shl 16) + (p2[k1 + 1] shl 8) + p2[k1 + 2];
 
if not (n = Color) then
begin
p1[k2] := (p1[k2] * (256 - Alpha) + p2[k1] * Alpha) shr 8;
p1[k2 + 1] := (p1[k2 + 1] * (256 - Alpha) + p2[k1 + 1] * Alpha) shr 8;
p1[k2 + 2] := (p1[k2 + 2] * (256 - Alpha) + p2[k1 + 2] * Alpha) shr 8;
end;
 
k1 := k1 + 3;
k2 := k2 + 3;
end;
end;
end;
 
procedure TDIB.DrawAlphaMask(SrcDIB, MaskDIB: TDIB; const X, Y,
Width, Height, SourceX, SourceY: Integer);
var
i, j: Integer;
k1, k2, k3: Integer;
p1, p2, p3: PByteArray;
 
Startk1, Startk2: Integer;
StartY: Integer;
EndY: Integer;
 
DestStartY: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
Startk1 := 3 * SourceX;
Startk2 := 3 * x;
 
DestStartY := Y - SourceY;
 
StartY := SourceY;
EndY := SourceY + Height;
 
if (EndY + DestStartY > Self.Height) then
EndY := Self.Height - DestStartY;
 
if (EndY > SrcDIB.Height) then
EndY := SrcDIB.Height;
 
if (StartY < 0) then
StartY := 0;
 
if (StartY + DestStartY < 0) then
StartY := DestStartY;
 
for j := StartY to EndY - 1 do
begin
p1 := Self.Scanline[j + DestStartY];
p2 := SrcDIB.Scanline[j];
p3 := MaskDIB.Scanline[j];
 
k1 := Startk1;
k2 := Startk2;
k3 := 0;
 
for i := SourceX to SourceX + Width - 1 do
begin
p1[k2] := (p1[k2] * (256 - p3[k3]) + p2[k1] * p3[k3]) shr 8;
p1[k2 + 1] := (p1[k2 + 1] * (256 - p3[k3]) + p2[k1 + 1] * p3[k3]) shr 8;
p1[k2 + 2] := (p1[k2 + 2] * (256 - p3[k3]) + p2[k1 + 2] * p3[k3]) shr 8;
 
k1 := k1 + 3;
k2 := k2 + 3;
k3 := k3 + 3;
end;
end;
end;
 
procedure TDIB.DrawMorphed(SrcDIB: TDIB; const X, Y, Width, Height,
SourceX, SourceY: Integer; const Color: TColor);
var
i, j, r, g, b: Integer;
k1, k2: Integer;
n: Integer;
p1, p2: PByteArray;
 
Startk1, Startk2: Integer;
StartY: Integer;
EndY: Integer;
 
DestStartY: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
Startk1 := 3 * SourceX;
Startk2 := 3 * x;
 
DestStartY := Y - SourceY;
 
StartY := SourceY;
EndY := SourceY + Height;
 
if (EndY + DestStartY > Self.Height) then
EndY := Self.Height - DestStartY;
 
if (EndY > SrcDIB.Height) then
EndY := SrcDIB.Height;
 
if (StartY < 0) then
StartY := 0;
 
if (StartY + DestStartY < 0) then
StartY := DestStartY;
 
r := 0;
g := 0;
b := 0;
 
for j := StartY to EndY - 1 do
begin
p1 := Self.Scanline[j + DestStartY];
p2 := SrcDIB.Scanline[j];
 
k1 := Startk1;
k2 := Startk2;
 
for i := SourceX to SourceX + Width - 1 do
begin
n := (p2[k1] shl 16) + (p2[k1 + 1] shl 8) + p2[k1 + 2];
 
if Random(100) < 50 then
begin
b := p1[k2];
g := p1[k2 + 1];
r := p1[k2 + 2];
end;
 
if not (n = Color) then
begin
p1[k2] := b;
p1[k2 + 1] := g;
p1[k2 + 2] := r;
end;
 
k1 := k1 + 3;
k2 := k2 + 3;
end;
end;
end;
 
procedure TDIB.DrawMono(SrcDIB: TDIB; const X, Y, Width, Height,
SourceX, SourceY: Integer; const TransColor, ForeColor, BackColor: TColor);
var
i, j, r1, g1, b1, r2, g2, b2: Integer;
k1, k2: Integer;
n: Integer;
p1, p2: PByteArray;
Startk1, Startk2, StartY, EndY, DestStartY: Integer;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
Startk1 := 3 * SourceX;
Startk2 := 3 * x;
 
DestStartY := Y - SourceY;
 
StartY := SourceY;
EndY := SourceY + Height;
 
if (EndY + DestStartY > Self.Height) then
EndY := Self.Height - DestStartY;
 
if (EndY > SrcDIB.Height) then
EndY := SrcDIB.Height;
 
if (StartY < 0) then
StartY := 0;
 
if (StartY + DestStartY < 0) then
StartY := DestStartY;
 
r1 := GetRValue(BackColor);
g1 := GetGValue(BackColor);
b1 := GetBValue(BackColor);
 
r2 := GetRValue(ForeColor);
g2 := GetGValue(ForeColor);
b2 := GetBValue(ForeColor);
 
 
for j := StartY to EndY - 1 do
begin
p1 := Self.Scanline[j + DestStartY];
p2 := SrcDIB.Scanline[j];
 
k1 := Startk1;
k2 := Startk2;
 
for i := SourceX to SourceX + Width - 1 do
begin
n := (p2[k1] shl 16) + (p2[k1 + 1] shl 8) + p2[k1 + 2];
 
if (n = TransColor) then
begin
p1[k2] := b1;
p1[k2 + 1] := g1;
p1[k2 + 2] := r1;
end
else
begin
p1[k2] := b2;
p1[k2 + 1] := g2;
p1[k2 + 2] := r2;
end;
 
k1 := k1 + 3;
k2 := k2 + 3;
end;
end;
end;
 
procedure TDIB.Draw3x3Matrix(SrcDIB: TDIB; Setting: TMatrixSetting);
var i, j, k: Integer;
p1, p2, p3, p4: PByteArray;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
for i := 1 to SrcDIB.Height - 2 do
begin
p1 := SrcDIB.ScanLine[i - 1];
p2 := SrcDIB.ScanLine[i];
p3 := SrcDIB.ScanLine[i + 1];
p4 := Self.ScanLine[i];
for j := 3 to 3 * SrcDIB.Width - 4 do
begin
k := (p1[j - 3] * Setting[0] + p1[j] * Setting[1] + p1[j + 3] * Setting[2] +
p2[j - 3] * Setting[3] + p2[j] * Setting[4] + p2[j + 3] * Setting[5] +
p3[j - 3] * Setting[6] + p3[j] * Setting[7] + p3[j + 3] * Setting[8])
div Setting[9];
if k < 0 then k := 0;
if k > 255 then k := 255;
p4[j] := k;
end;
end;
end;
 
procedure TDIB.DrawAntialias(SrcDIB: TDIB);
var i, j, k, l, m: Integer;
p1, p2, p3: PByteArray;
begin
if Self.BitCount <> 24 then Exit;
if SrcDIB.BitCount <> 24 then Exit;
 
for i := 1 to Self.Height - 1 do
begin
k := i shl 1;
p1 := SrcDIB.Scanline[k];
p2 := SrcDIB.Scanline[k + 1];
p3 := Self.Scanline[i];
for j := 1 to Self.Width - 1 do
begin
m := 3 * j;
l := m shl 1;
p3[m] := (p1[l] + p1[l + 3] + p2[l] + p2[l + 3]) shr 2;
p3[m + 1] := (p1[l + 1] + p1[l + 4] + p2[l + 1] + p2[l + 4]) shr 2;
p3[m + 2] := (p1[l + 2] + p1[l + 5] + p2[l + 2] + p2[l + 5]) shr 2;
end;
end;
end;
 
procedure TDIB.FilterLine(X1, Y1, X2, Y2: Integer; Color: TColor;
FilterMode: TFilterMode);
var
i, j: Integer;
t: TColor;
r1, g1, b1, r2, g2, b2: Integer;
begin
j := ROUND(Sqrt(Sqr(ABS(X2 - X1)) + Sqr(ABS(Y2 - Y1))));
if j < 1 then Exit;
 
r1 := GetRValue(Color);
g1 := GetGValue(Color);
b1 := GetBValue(Color);
 
for i := 0 to j do
begin
t := Self.Pixels[X1 + ((X2 - X1) * i div j), Y1 + ((Y2 - Y1) * i div j)];
r2 := GetRValue(t);
g2 := GetGValue(t);
b2 := GetBValue(t);
case FilterMode of
fmNormal: t := RGB(r1 + (((256 - r1) * r2) shr 8),
g1 + (((256 - g1) * g2) shr 8),
b1 + (((256 - b1) * b2) shr 8));
fmMix25: t := RGB((r1 + r2 * 3) shr 2, (g1 + g2 * 3) shr 2, (b1 + b2 * 3) shr 2);
fmMix50: t := RGB((r1 + r2) shr 1, (g1 + g2) shr 1, (b1 + b2) shr 1);
fmMix75: t := RGB((r1 * 3 + r2) shr 2, (g1 * 3 + g2) shr 2, (b1 * 3 + b2) shr 2);
end;
Self.Pixels[X1 + ((X2 - X1) * i div j), Y1 + ((Y2 - Y1) * i div j)] := t;
end;
end;
 
procedure TDIB.FilterRect(X, Y, Width, Height: Integer;
Color: TColor; FilterMode: TFilterMode);
var
i, j, r, g, b, C1: Integer;
p1, p2, p3: pByte;
begin
if Self.BitCount <> 24 then Exit;
 
r := GetRValue(Color);
g := GetGValue(Color);
b := GetBValue(Color);
 
for i := 0 to Height - 1 do
begin
p1 := Self.Scanline[i + Y];
Inc(p1, (3 * X));
for j := 0 to Width - 1 do
begin
case FilterMode of
fmNormal:
begin
p2 := p1;
Inc(p2);
p3 := p2;
Inc(p3);
C1 := (p1^ + p2^ + p3^) div 3;
 
p1^ := (C1 * b) shr 8;
Inc(p1);
p1^ := (C1 * g) shr 8;
Inc(p1);
p1^ := (C1 * r) shr 8;
Inc(p1);
end;
fmMix25:
begin
p1^ := (3 * p1^ + b) shr 2;
Inc(p1);
p1^ := (3 * p1^ + g) shr 2;
Inc(p1);
p1^ := (3 * p1^ + r) shr 2;
Inc(p1);
end;
fmMix50:
begin
p1^ := (p1^ + b) shr 1;
Inc(p1);
p1^ := (p1^ + g) shr 1;
Inc(p1);
p1^ := (p1^ + r) shr 1;
Inc(p1);
end;
fmMix75:
begin
p1^ := (p1^ + 3 * b) shr 2;
Inc(p1);
p1^ := (p1^ + 3 * g) shr 2;
Inc(p1);
p1^ := (p1^ + 3 * r) shr 2;
Inc(p1);
end;
end;
end;
end;
end;
 
procedure TDIB.InitLight(Count, Detail: Integer);
var
i, j: Integer;
begin
LG_COUNT := Count;
LG_DETAIL := Detail;
 
for i := 0 to 255 do // Build Lightning LUT
for j := 0 to 255 do
FLUTDist[i, j] := ROUND(Sqrt(Sqr(i * 10) + Sqr(j * 10)));
end;
 
procedure TDIB.DrawLights(FLight: TLightArray;
AmbientLight: TColor);
var
i, j, l, m, n, o, q, D1, D2, R, G, B, AR, AG, AB: Integer;
P: array{$IFNDEF VER4UP} [0..4096]{$ENDIF} of PByteArray;
begin
if Self.BitCount <> 24 then Exit;
 
{$IFDEF VER4UP}
SetLength(P, LG_DETAIL);
{$ENDIF}
AR := GetRValue(AmbientLight);
AG := GetGValue(AmbientLight);
AB := GetBValue(AmbientLight);
 
for i := (Self.Height div (LG_DETAIL + 1)) downto 1 do
begin
for o := 0 to LG_DETAIL do
P[o] := Self.Scanline[(LG_DETAIL + 1) * i - o];
 
for j := (Self.Width div (LG_DETAIL + 1)) downto 1 do
begin
R := AR;
G := AG;
B := AB;
 
for l := LG_COUNT - 1 downto 0 do // Check the lightsources
begin
D1 := ABS(j * (LG_DETAIL + 1) - FLight[l].X) div FLight[l].Size1;
D2 := ABS(i * (LG_DETAIL + 1) - FLight[l].Y) div FLight[l].Size2;
if D1 > 255 then D1 := 255;
if D2 > 255 then D2 := 255;
 
m := 255 - FLUTDist[D1, D2];
if m < 0 then m := 0;
 
Inc(R, (PosValue(GetRValue(FLight[l].Color) - R) * m shr 8));
Inc(G, (PosValue(GetGValue(FLight[l].Color) - G) * m shr 8));
Inc(B, (PosValue(GetBValue(FLight[l].Color) - B) * m shr 8));
end;
 
for q := LG_DETAIL downto 0 do
begin
n := 3 * (j * (LG_DETAIL + 1) - q);
 
for o := LG_DETAIL downto 0 do
begin
P[o][n] := (P[o][n] * B) shr 8;
P[o][n + 1] := (P[o][n + 1] * G) shr 8;
P[o][n + 2] := (P[o][n + 2] * R) shr 8;
end;
end;
end;
end;
{$IFDEF VER4UP}
SetLength(P, 0);
{$ENDIF}
end;
 
procedure TDIB.DrawOn(Dest: TRect; DestCanvas: TCanvas; Xsrc, Ysrc: Integer);
{procedure is supplement of original TDIBUltra function}
begin
//if not AsSigned(SrcCanvas) then Exit;
if (Xsrc < 0) then
begin
Dec(Dest.Left, Xsrc);
Inc(Dest.Right {Width }, Xsrc);
Xsrc := 0
end;
if (Ysrc < 0) then
begin
Dec(Dest.Top, Ysrc);
Inc(Dest.Bottom {Height}, Ysrc);
Ysrc := 0
end;
BitBlt(DestCanvas.Handle, Dest.Left, Dest.Top, Dest.Right, Dest.Bottom, Self.Canvas.Handle, Xsrc, Ysrc, SRCCOPY);
end;
 
{ DXFusion <- }
 
{ added effect for DIB }
 
function IntToByte(i: Integer): Byte;
begin
if i > 255 then Result := 255
else if i < 0 then Result := 0
else Result := i;
end;
 
{standalone routine}
 
procedure TDIB.Darker(Percent: Integer);
{color to dark in percent}
var
p0: pbytearray;
r, g, b, x, y: Integer;
begin
if Self.BitCount <> 24 then Exit;
for y := 0 to Self.Height - 1 do
begin
p0 := Self.ScanLine[y];
for x := 0 to Self.Width - 1 do
begin
r := p0[x * 3];
g := p0[x * 3 + 1];
b := p0[x * 3 + 2];
p0[x * 3] := Round(R * Percent / 100);
p0[x * 3 + 1] := Round(G * Percent / 100);
p0[x * 3 + 2] := Round(B * Percent / 100);
end;
end;
end;
 
procedure TDIB.Lighter(Percent: Integer);
var
p0: pbytearray;
r, g, b, x, y: Integer;
begin
if Self.BitCount <> 24 then Exit;
for y := 0 to Self.Height - 1 do
begin
p0 := Self.ScanLine[y];
for x := 0 to Self.Width - 1 do
begin
r := p0[x * 3];
g := p0[x * 3 + 1];
b := p0[x * 3 + 2];
p0[x * 3] := Round(R * Percent / 100) + Round(255 - Percent / 100 * 255);
p0[x * 3 + 1] := Round(G * Percent / 100) + Round(255 - Percent / 100 * 255);
p0[x * 3 + 2] := Round(B * Percent / 100) + Round(255 - Percent / 100 * 255);
end;
end;
end;
 
procedure TDIB.Darkness(Amount: Integer);
var
p0: pbytearray;
r, g, b, x, y: Integer;
begin
if Self.BitCount <> 24 then Exit;
for y := 0 to Self.Height - 1 do
begin
p0 := Self.ScanLine[y];
for x := 0 to Self.Width - 1 do
begin
r := p0[x * 3];
g := p0[x * 3 + 1];
b := p0[x * 3 + 2];
p0[x * 3] := IntToByte(r - ((r) * Amount) div 255);
p0[x * 3 + 1] := IntToByte(g - ((g) * Amount) div 255);
p0[x * 3 + 2] := IntToByte(b - ((b) * Amount) div 255);
end;
end;
end;
 
function TrimInt(i, Min, Max: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if i > Max then Result := Max
else if i < Min then Result := Min
else Result := i;
end;
 
procedure TDIB.DoSmoothRotate(Src: TDIB; cx, cy: Integer; Angle: Extended);
var
Top, Bottom, eww, nsw, fx, fy: Extended;
cAngle, sAngle: Double;
xDiff, yDiff, ifx, ify, px, py, ix, iy, x, y: Integer;
nw, ne, sw, se: TBGR;
P1, P2, P3: Pbytearray;
begin
Angle := angle;
Angle := -Angle * Pi / 180;
sAngle := Sin(Angle);
cAngle := Cos(Angle);
xDiff := (Self.Width - Src.Width) div 2;
yDiff := (Self.Height - Src.Height) div 2;
for y := 0 to Self.Height - 1 do
begin
P3 := Self.scanline[y];
py := 2 * (y - cy) + 1;
for x := 0 to Self.Width - 1 do
begin
px := 2 * (x - cx) + 1;
fx := (((px * cAngle - py * sAngle) - 1) / 2 + cx) - xDiff;
fy := (((px * sAngle + py * cAngle) - 1) / 2 + cy) - yDiff;
ifx := Round(fx);
ify := Round(fy);
 
if (ifx > -1) and (ifx < Src.Width) and (ify > -1) and (ify < Src.Height) then
begin
eww := fx - ifx;
nsw := fy - ify;
iy := TrimInt(ify + 1, 0, Src.Height - 1);
ix := TrimInt(ifx + 1, 0, Src.Width - 1);
P1 := Src.scanline[ify];
P2 := Src.scanline[iy];
nw.r := P1[ifx * 3];
nw.g := P1[ifx * 3 + 1];
nw.b := P1[ifx * 3 + 2];
ne.r := P1[ix * 3];
ne.g := P1[ix * 3 + 1];
ne.b := P1[ix * 3 + 2];
sw.r := P2[ifx * 3];
sw.g := P2[ifx * 3 + 1];
sw.b := P2[ifx * 3 + 2];
se.r := P2[ix * 3];
se.g := P2[ix * 3 + 1];
se.b := P2[ix * 3 + 2];
 
Top := nw.b + eww * (ne.b - nw.b);
Bottom := sw.b + eww * (se.b - sw.b);
P3[x * 3 + 2] := IntToByte(Round(Top + nsw * (Bottom - Top)));
 
Top := nw.g + eww * (ne.g - nw.g);
Bottom := sw.g + eww * (se.g - sw.g);
P3[x * 3 + 1] := IntToByte(Round(Top + nsw * (Bottom - Top)));
 
Top := nw.r + eww * (ne.r - nw.r);
Bottom := sw.r + eww * (se.r - sw.r);
P3[x * 3] := IntToByte(Round(Top + nsw * (Bottom - Top)));
end;
end;
end;
end;
 
//----------------------
//--- 24 bit count routines ----------------------
//----------------------
 
procedure TDIB.DoInvert;
procedure PicInvert(src: TDIB);
var w, h, x, y: Integer;
p: pbytearray;
begin
w := src.width;
h := src.height;
src.BitCount := 24;
for y := 0 to h - 1 do
begin
p := src.scanline[y];
for x := 0 to w - 1 do
begin
p[x * 3] := not p[x * 3];
p[x * 3 + 1] := not p[x * 3 + 1];
p[x * 3 + 2] := not p[x * 3 + 2];
end;
end;
end;
begin
PicInvert(Self);
end;
 
procedure TDIB.DoAddColorNoise(Amount: Integer);
procedure AddColorNoise(var clip: TDIB; Amount: Integer);
var
p0: pbytearray;
x, y, r, g, b: Integer;
begin
for y := 0 to clip.Height - 1 do
begin
p0 := clip.ScanLine[y];
for x := 0 to clip.Width - 1 do
begin
r := p0[x * 3] + (Random(Amount) - (Amount shr 1));
g := p0[x * 3 + 1] + (Random(Amount) - (Amount shr 1));
b := p0[x * 3 + 2] + (Random(Amount) - (Amount shr 1));
p0[x * 3] := IntToByte(r);
p0[x * 3 + 1] := IntToByte(g);
p0[x * 3 + 2] := IntToByte(b);
end;
end;
end;
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.Assign(Self);
AddColorNoise(bb, Amount);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoAddMonoNoise(Amount: Integer);
procedure _AddMonoNoise(var clip: TDIB; Amount: Integer);
var
p0: pbytearray;
x, y, a, r, g, b: Integer;
begin
for y := 0 to clip.Height - 1 do
begin
p0 := clip.scanline[y];
for x := 0 to clip.Width - 1 do
begin
a := Random(Amount) - (Amount shr 1);
r := p0[x * 3] + a;
g := p0[x * 3 + 1] + a;
b := p0[x * 3 + 2] + a;
p0[x * 3] := IntToByte(r);
p0[x * 3 + 1] := IntToByte(g);
p0[x * 3 + 2] := IntToByte(b);
end;
end;
end;
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.Assign(Self);
_AddMonoNoise(bb, Amount);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoAntiAlias;
procedure AntiAlias(clip: TDIB);
procedure AntiAliasRect(clip: TDIB; XOrigin, YOrigin, XFinal, YFinal: Integer);
var Memo, x, y: Integer; (* Composantes primaires des points environnants *)
p0, p1, p2: pbytearray;
begin
if XFinal < XOrigin then begin Memo := XOrigin; XOrigin := XFinal; XFinal := Memo; end; (* Inversion des valeurs *)
if YFinal < YOrigin then begin Memo := YOrigin; YOrigin := YFinal; YFinal := Memo; end; (* si diff‚rence n‚gative*)
XOrigin := max(1, XOrigin);
YOrigin := max(1, YOrigin);
XFinal := min(clip.width - 2, XFinal);
YFinal := min(clip.height - 2, YFinal);
clip.BitCount := 24;
for y := YOrigin to YFinal do
begin
p0 := clip.ScanLine[y - 1];
p1 := clip.scanline[y];
p2 := clip.ScanLine[y + 1];
for x := XOrigin to XFinal do
begin
p1[x * 3] := (p0[x * 3] + p2[x * 3] + p1[(x - 1) * 3] + p1[(x + 1) * 3]) div 4;
p1[x * 3 + 1] := (p0[x * 3 + 1] + p2[x * 3 + 1] + p1[(x - 1) * 3 + 1] + p1[(x + 1) * 3 + 1]) div 4;
p1[x * 3 + 2] := (p0[x * 3 + 2] + p2[x * 3 + 2] + p1[(x - 1) * 3 + 2] + p1[(x + 1) * 3 + 2]) div 4;
end;
end;
end;
begin
AntiAliasRect(clip, 0, 0, clip.width, clip.height);
end;
begin
AntiAlias(Self);
end;
 
procedure TDIB.DoContrast(Amount: Integer);
procedure _Contrast(var clip: TDIB; Amount: Integer);
var
p0: pbytearray;
rg, gg, bg, r, g, b, x, y: Integer;
begin
for y := 0 to clip.Height - 1 do
begin
p0 := clip.scanline[y];
for x := 0 to clip.Width - 1 do
begin
r := p0[x * 3];
g := p0[x * 3 + 1];
b := p0[x * 3 + 2];
rg := (Abs(127 - r) * Amount) div 255;
gg := (Abs(127 - g) * Amount) div 255;
bg := (Abs(127 - b) * Amount) div 255;
if r > 127 then r := r + rg else r := r - rg;
if g > 127 then g := g + gg else g := g - gg;
if b > 127 then b := b + bg else b := b - bg;
p0[x * 3] := IntToByte(r);
p0[x * 3 + 1] := IntToByte(g);
p0[x * 3 + 2] := IntToByte(b);
end;
end;
end;
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.Assign(Self);
_Contrast(bb, Amount);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoFishEye(Amount: Integer);
procedure _FishEye(var Bmp, Dst: TDIB; Amount: Extended);
var
xmid, ymid: Single;
fx, fy: Single;
r1, r2: Single;
ifx, ify: Integer;
dx, dy: Single;
rmax: Single;
ty, tx: Integer;
weight_x, weight_y: array[0..1] of Single;
weight: Single;
new_red, new_green: Integer;
new_blue: Integer;
total_red, total_green: Single;
total_blue: Single;
ix, iy: Integer;
sli, slo: PByteArray;
begin
xmid := Bmp.Width / 2;
ymid := Bmp.Height / 2;
rmax := Dst.Width * Amount;
 
for ty := 0 to Dst.Height - 1 do
begin
for tx := 0 to Dst.Width - 1 do
begin
dx := tx - xmid;
dy := ty - ymid;
r1 := Sqrt(dx * dx + dy * dy);
if r1 = 0 then
begin
fx := xmid;
fy := ymid;
end
else
begin
r2 := rmax / 2 * (1 / (1 - r1 / rmax) - 1);
fx := dx * r2 / r1 + xmid;
fy := dy * r2 / r1 + ymid;
end;
ify := Trunc(fy);
ifx := Trunc(fx);
// Calculate the weights.
if fy >= 0 then
begin
weight_y[1] := fy - ify;
weight_y[0] := 1 - weight_y[1];
end
else
begin
weight_y[0] := -(fy - ify);
weight_y[1] := 1 - weight_y[0];
end;
if fx >= 0 then
begin
weight_x[1] := fx - ifx;
weight_x[0] := 1 - weight_x[1];
end
else
begin
weight_x[0] := -(fx - ifx);
Weight_x[1] := 1 - weight_x[0];
end;
 
if ifx < 0 then
ifx := Bmp.Width - 1 - (-ifx mod Bmp.Width)
else if ifx > Bmp.Width - 1 then
ifx := ifx mod Bmp.Width;
if ify < 0 then
ify := Bmp.Height - 1 - (-ify mod Bmp.Height)
else if ify > Bmp.Height - 1 then
ify := ify mod Bmp.Height;
 
total_red := 0.0;
total_green := 0.0;
total_blue := 0.0;
for ix := 0 to 1 do
begin
for iy := 0 to 1 do
begin
if ify + iy < Bmp.Height then
sli := Bmp.scanline[ify + iy]
else
sli := Bmp.scanline[Bmp.Height - ify - iy];
if ifx + ix < Bmp.Width then
begin
new_red := sli[(ifx + ix) * 3];
new_green := sli[(ifx + ix) * 3 + 1];
new_blue := sli[(ifx + ix) * 3 + 2];
end
else
begin
new_red := sli[(Bmp.Width - ifx - ix) * 3];
new_green := sli[(Bmp.Width - ifx - ix) * 3 + 1];
new_blue := sli[(Bmp.Width - ifx - ix) * 3 + 2];
end;
weight := weight_x[ix] * weight_y[iy];
total_red := total_red + new_red * weight;
total_green := total_green + new_green * weight;
total_blue := total_blue + new_blue * weight;
end;
end;
slo := Dst.scanline[ty];
slo[tx * 3] := Round(total_red);
slo[tx * 3 + 1] := Round(total_green);
slo[tx * 3 + 2] := Round(total_blue);
 
end;
end;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.BitCount := 24;
BB2.Assign(BB1);
_FishEye(BB1, BB2, Amount);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoGrayScale;
procedure GrayScale(var clip: TDIB);
var
p0: pbytearray;
Gray, x, y: Integer;
begin
for y := 0 to clip.Height - 1 do
begin
p0 := clip.scanline[y];
for x := 0 to clip.Width - 1 do
begin
Gray := Round(p0[x * 3] * 0.3 + p0[x * 3 + 1] * 0.59 + p0[x * 3 + 2] * 0.11);
p0[x * 3] := Gray;
p0[x * 3 + 1] := Gray;
p0[x * 3 + 2] := Gray;
end;
end;
end;
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.Assign(Self);
GrayScale(BB);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoLightness(Amount: Integer);
procedure _Lightness(var clip: TDIB; Amount: Integer);
var
p0: pbytearray;
r, g, b, x, y: Integer;
begin
for y := 0 to clip.Height - 1 do
begin
p0 := clip.scanline[y];
for x := 0 to clip.Width - 1 do
begin
r := p0[x * 3];
g := p0[x * 3 + 1];
b := p0[x * 3 + 2];
p0[x * 3] := IntToByte(r + ((255 - r) * Amount) div 255);
p0[x * 3 + 1] := IntToByte(g + ((255 - g) * Amount) div 255);
p0[x * 3 + 2] := IntToByte(b + ((255 - b) * Amount) div 255);
end;
end;
end;
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.Assign(Self);
_Lightness(BB, Amount);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoDarkness(Amount: Integer);
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.Assign(Self);
BB.Darkness(Amount);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoSaturation(Amount: Integer);
procedure _Saturation(var clip: TDIB; Amount: Integer);
var
p0: pbytearray;
Gray, r, g, b, x, y: Integer;
begin
for y := 0 to clip.Height - 1 do
begin
p0 := clip.scanline[y];
for x := 0 to clip.Width - 1 do
begin
r := p0[x * 3];
g := p0[x * 3 + 1];
b := p0[x * 3 + 2];
Gray := (r + g + b) div 3;
p0[x * 3] := IntToByte(Gray + (((r - Gray) * Amount) div 255));
p0[x * 3 + 1] := IntToByte(Gray + (((g - Gray) * Amount) div 255));
p0[x * 3 + 2] := IntToByte(Gray + (((b - Gray) * Amount) div 255));
end;
end;
end;
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.Assign(Self);
_Saturation(BB, Amount);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoSplitBlur(Amount: Integer);
{NOTE: For a gaussian blur is amount 3}
procedure _SplitBlur(var clip: TDIB; Amount: Integer);
var
p0, p1, p2: pbytearray;
cx, x, y: Integer;
Buf: array[0..3, 0..2] of byte;
begin
if Amount = 0 then Exit;
for y := 0 to clip.Height - 1 do
begin
p0 := clip.scanline[y];
if y - Amount < 0 then p1 := clip.scanline[y]
else {y-Amount>0} p1 := clip.ScanLine[y - Amount];
if y + Amount < clip.Height then p2 := clip.ScanLine[y + Amount]
else {y+Amount>=Height} p2 := clip.ScanLine[clip.Height - y];
 
for x := 0 to clip.Width - 1 do
begin
if x - Amount < 0 then cx := x
else {x-Amount>0} cx := x - Amount;
Buf[0, 0] := p1[cx * 3];
Buf[0, 1] := p1[cx * 3 + 1];
Buf[0, 2] := p1[cx * 3 + 2];
Buf[1, 0] := p2[cx * 3];
Buf[1, 1] := p2[cx * 3 + 1];
Buf[1, 2] := p2[cx * 3 + 2];
if x + Amount < clip.Width then cx := x + Amount
else {x+Amount>=Width} cx := clip.Width - x;
Buf[2, 0] := p1[cx * 3];
Buf[2, 1] := p1[cx * 3 + 1];
Buf[2, 2] := p1[cx * 3 + 2];
Buf[3, 0] := p2[cx * 3];
Buf[3, 1] := p2[cx * 3 + 1];
Buf[3, 2] := p2[cx * 3 + 2];
p0[x * 3] := (Buf[0, 0] + Buf[1, 0] + Buf[2, 0] + Buf[3, 0]) shr 2;
p0[x * 3 + 1] := (Buf[0, 1] + Buf[1, 1] + Buf[2, 1] + Buf[3, 1]) shr 2;
p0[x * 3 + 2] := (Buf[0, 2] + Buf[1, 2] + Buf[2, 2] + Buf[3, 2]) shr 2;
end;
end;
end;
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.Assign(Self);
_SplitBlur(BB, Amount);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoGaussianBlur(Amount: Integer);
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.BitCount := 24;
BB.Assign(Self);
GaussianBlur(BB, Amount);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoMosaic(Size: Integer);
procedure Mosaic(var Bm: TDIB; size: Integer);
var
x, y, i, j: Integer;
p1, p2: pbytearray;
r, g, b: byte;
begin
y := 0;
repeat
p1 := bm.scanline[y];
repeat
j := 1;
repeat
p2 := bm.scanline[y];
x := 0;
repeat
r := p1[x * 3];
g := p1[x * 3 + 1];
b := p1[x * 3 + 2];
i := 1;
repeat
p2[x * 3] := r;
p2[x * 3 + 1] := g;
p2[x * 3 + 2] := b;
inc(x);
inc(i);
until (x >= bm.width) or (i > size);
until x >= bm.width;
inc(j);
inc(y);
until (y >= bm.height) or (j > size);
until (y >= bm.height) or (x >= bm.width);
until y >= bm.height;
end;
var BB: TDIB;
begin
BB := TDIB.Create;
BB.BitCount := 24;
BB.Assign(Self);
Mosaic(BB, Size);
Self.Assign(BB);
BB.Free;
end;
 
procedure TDIB.DoTwist(Amount: Integer);
procedure _Twist(var Bmp, Dst: TDIB; Amount: Integer);
var
fxmid, fymid: Single;
txmid, tymid: Single;
fx, fy: Single;
tx2, ty2: Single;
r: Single;
theta: Single;
ifx, ify: Integer;
dx, dy: Single;
OFFSET: Single;
ty, tx: Integer;
weight_x, weight_y: array[0..1] of Single;
weight: Single;
new_red, new_green: Integer;
new_blue: Integer;
total_red, total_green: Single;
total_blue: Single;
ix, iy: Integer;
sli, slo: PBytearray;
 
function ArcTan2(xt, yt: Single): Single; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if xt = 0 then
if yt > 0 then
Result := Pi / 2
else
Result := -(Pi / 2)
else
begin
Result := ArcTan(yt / xt);
if xt < 0 then
Result := Pi + ArcTan(yt / xt);
end;
end;
 
begin
OFFSET := -(Pi / 2);
dx := Bmp.Width - 1;
dy := Bmp.Height - 1;
r := Sqrt(dx * dx + dy * dy);
tx2 := r;
ty2 := r;
txmid := (Bmp.Width - 1) / 2; //Adjust these to move center of rotation
tymid := (Bmp.Height - 1) / 2; //Adjust these to move ......
fxmid := (Bmp.Width - 1) / 2;
fymid := (Bmp.Height - 1) / 2;
if tx2 >= Bmp.Width then tx2 := Bmp.Width - 1;
if ty2 >= Bmp.Height then ty2 := Bmp.Height - 1;
 
for ty := 0 to Round(ty2) do
begin
for tx := 0 to Round(tx2) do
begin
dx := tx - txmid;
dy := ty - tymid;
r := Sqrt(dx * dx + dy * dy);
if r = 0 then
begin
fx := 0;
fy := 0;
end
else
begin
theta := ArcTan2(dx, dy) - r / Amount - OFFSET;
fx := r * Cos(theta);
fy := r * Sin(theta);
end;
fx := fx + fxmid;
fy := fy + fymid;
 
ify := Trunc(fy);
ifx := Trunc(fx);
// Calculate the weights.
if fy >= 0 then
begin
weight_y[1] := fy - ify;
weight_y[0] := 1 - weight_y[1];
end
else
begin
weight_y[0] := -(fy - ify);
weight_y[1] := 1 - weight_y[0];
end;
if fx >= 0 then
begin
weight_x[1] := fx - ifx;
weight_x[0] := 1 - weight_x[1];
end
else
begin
weight_x[0] := -(fx - ifx);
Weight_x[1] := 1 - weight_x[0];
end;
 
if ifx < 0 then
ifx := Bmp.Width - 1 - (-ifx mod Bmp.Width)
else if ifx > Bmp.Width - 1 then
ifx := ifx mod Bmp.Width;
if ify < 0 then
ify := Bmp.Height - 1 - (-ify mod Bmp.Height)
else if ify > Bmp.Height - 1 then
ify := ify mod Bmp.Height;
 
total_red := 0.0;
total_green := 0.0;
total_blue := 0.0;
for ix := 0 to 1 do
begin
for iy := 0 to 1 do
begin
if ify + iy < Bmp.Height then
sli := Bmp.scanline[ify + iy]
else
sli := Bmp.scanline[Bmp.Height - ify - iy];
if ifx + ix < Bmp.Width then
begin
new_red := sli[(ifx + ix) * 3];
new_green := sli[(ifx + ix) * 3 + 1];
new_blue := sli[(ifx + ix) * 3 + 2];
end
else
begin
new_red := sli[(Bmp.Width - ifx - ix) * 3];
new_green := sli[(Bmp.Width - ifx - ix) * 3 + 1];
new_blue := sli[(Bmp.Width - ifx - ix) * 3 + 2];
end;
weight := weight_x[ix] * weight_y[iy];
total_red := total_red + new_red * weight;
total_green := total_green + new_green * weight;
total_blue := total_blue + new_blue * weight;
end;
end;
slo := Dst.scanline[ty];
slo[tx * 3] := Round(total_red);
slo[tx * 3 + 1] := Round(total_green);
slo[tx * 3 + 2] := Round(total_blue);
end;
end;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.BitCount := 24;
BB2.Assign(BB1);
_Twist(BB1, BB2, Amount);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoTrace(Amount: Integer);
procedure Trace(src: TDIB; intensity: Integer);
var
x, y, i: Integer;
P1, P2, P3, P4: PByteArray;
tb, TraceB: byte;
hasb: Boolean;
bitmap: TDIB;
begin
bitmap := TDIB.create;
bitmap.width := src.width;
bitmap.height := src.height;
bitmap.canvas.draw(0, 0, src);
bitmap.BitCount := 8;
src.BitCount := 24;
hasb := false;
TraceB := $00; tb := 0;
for i := 1 to Intensity do
begin
for y := 0 to BitMap.height - 2 do
begin
P1 := BitMap.ScanLine[y];
P2 := BitMap.scanline[y + 1];
P3 := src.scanline[y];
P4 := src.scanline[y + 1];
x := 0;
repeat
if p1[x] <> p1[x + 1] then
begin
if not hasb then
begin
tb := p1[x + 1];
hasb := true;
p3[x * 3] := TraceB;
p3[x * 3 + 1] := TraceB;
p3[x * 3 + 2] := TraceB;
end
else
begin
if p1[x] <> tb then
begin
p3[x * 3] := TraceB;
p3[x * 3 + 1] := TraceB;
p3[x * 3 + 2] := TraceB;
end
else
begin
p3[(x + 1) * 3] := TraceB;
p3[(x + 1) * 3 + 1] := TraceB;
p3[(x + 1) * 3 + 1] := TraceB;
end;
end;
end;
if p1[x] <> p2[x] then
begin
if not hasb then
begin
tb := p2[x];
hasb := true;
p3[x * 3] := TraceB;
p3[x * 3 + 1] := TraceB;
p3[x * 3 + 2] := TraceB;
end
else
begin
if p1[x] <> tb then
begin
p3[x * 3] := TraceB;
p3[x * 3 + 1] := TraceB;
p3[x * 3 + 2] := TraceB;
end
else
begin
p4[x * 3] := TraceB;
p4[x * 3 + 1] := TraceB;
p4[x * 3 + 2] := TraceB;
end;
end;
end;
inc(x);
until x >= (BitMap.width - 2);
end;
if i > 1 then
for y := BitMap.height - 1 downto 1 do
begin
P1 := BitMap.ScanLine[y];
P2 := BitMap.scanline[y - 1];
P3 := src.scanline[y];
P4 := src.scanline[y - 1];
x := Bitmap.width - 1;
repeat
if p1[x] <> p1[x - 1] then
begin
if not hasb then
begin
tb := p1[x - 1];
hasb := true;
p3[x * 3] := TraceB;
p3[x * 3 + 1] := TraceB;
p3[x * 3 + 2] := TraceB;
end
else
begin
if p1[x] <> tb then
begin
p3[x * 3] := TraceB;
p3[x * 3 + 1] := TraceB;
p3[x * 3 + 2] := TraceB;
end
else
begin
p3[(x - 1) * 3] := TraceB;
p3[(x - 1) * 3 + 1] := TraceB;
p3[(x - 1) * 3 + 2] := TraceB;
end;
end;
end;
if p1[x] <> p2[x] then
begin
if not hasb then
begin
tb := p2[x];
hasb := true;
p3[x * 3] := TraceB;
p3[x * 3 + 1] := TraceB;
p3[x * 3 + 2] := TraceB;
end
else
begin
if p1[x] <> tb then
begin
p3[x * 3] := TraceB;
p3[x * 3 + 1] := TraceB;
p3[x * 3 + 2] := TraceB;
end
else
begin
p4[x * 3] := TraceB;
p4[x * 3 + 1] := TraceB;
p4[x * 3 + 2] := TraceB;
end;
end;
end;
dec(x);
until x <= 1;
end;
end;
bitmap.free;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.BitCount := 24;
BB2.Assign(BB1);
Trace(BB2, Amount);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoSplitlight(Amount: Integer);
procedure Splitlight(var clip: TDIB; amount: Integer);
var
x, y, i: Integer;
p1: pbytearray;
 
function sinpixs(a: Integer): Integer;
begin
result := variant(sin(a / 255 * pi / 2) * 255);
end;
begin
for i := 1 to amount do
for y := 0 to clip.height - 1 do
begin
p1 := clip.scanline[y];
for x := 0 to clip.width - 1 do
begin
p1[x * 3] := sinpixs(p1[x * 3]);
p1[x * 3 + 1] := sinpixs(p1[x * 3 + 1]);
p1[x * 3 + 2] := sinpixs(p1[x * 3 + 2]);
end;
end;
end;
var BB1 {,BB2}: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
// BB2 := TDIB.Create;
// BB2.BitCount := 24;
// BB2.Assign (BB1);
Splitlight(BB1, Amount);
Self.Assign(BB1);
BB1.Free;
// BB2.Free;
end;
 
procedure TDIB.DoTile(Amount: Integer);
procedure SmoothResize(var Src, Dst: TDIB);
var
x, y, xP, yP,
yP2, xP2: Integer;
Read, Read2: PByteArray;
t, z, z2, iz2: Integer;
pc: PBytearray;
w1, w2, w3, w4: Integer;
Col1r, col1g, col1b, Col2r, col2g, col2b: byte;
begin
xP2 := ((src.Width - 1) shl 15) div Dst.Width;
yP2 := ((src.Height - 1) shl 15) div Dst.Height;
yP := 0;
for y := 0 to Dst.Height - 1 do
begin
xP := 0;
Read := src.ScanLine[yP shr 15];
if yP shr 16 < src.Height - 1 then
Read2 := src.ScanLine[yP shr 15 + 1]
else
Read2 := src.ScanLine[yP shr 15];
pc := Dst.scanline[y];
z2 := yP and $7FFF;
iz2 := $8000 - z2;
for x := 0 to Dst.Width - 1 do
begin
t := xP shr 15;
Col1r := Read[t * 3];
Col1g := Read[t * 3 + 1];
Col1b := Read[t * 3 + 2];
Col2r := Read2[t * 3];
Col2g := Read2[t * 3 + 1];
Col2b := Read2[t * 3 + 2];
z := xP and $7FFF;
w2 := (z * iz2) shr 15;
w1 := iz2 - w2;
w4 := (z * z2) shr 15;
w3 := z2 - w4;
pc[x * 3 + 2] :=
(Col1b * w1 + Read[(t + 1) * 3 + 2] * w2 +
Col2b * w3 + Read2[(t + 1) * 3 + 2] * w4) shr 15;
pc[x * 3 + 1] :=
(Col1g * w1 + Read[(t + 1) * 3 + 1] * w2 +
Col2g * w3 + Read2[(t + 1) * 3 + 1] * w4) shr 15;
pc[x * 3] :=
(Col1r * w1 + Read2[(t + 1) * 3] * w2 +
Col2r * w3 + Read2[(t + 1) * 3] * w4) shr 15;
Inc(xP, xP2);
end;
Inc(yP, yP2);
end;
end;
procedure Tile(src, dst: TDIB; amount: Integer);
var
w, h, w2, h2, i, j: Integer;
bm: TDIB;
begin
w := src.width;
h := src.height;
dst.width := w;
dst.height := h;
dst.Canvas.draw(0, 0, src);
if (amount <= 0) or ((w div amount) < 5) or ((h div amount) < 5) then exit;
h2 := h div amount;
w2 := w div amount;
bm := TDIB.create;
bm.width := w2;
bm.height := h2;
bm.BitCount := 24;
smoothresize(src, bm);
for j := 0 to amount - 1 do
for i := 0 to amount - 1 do
dst.canvas.Draw(i * w2, j * h2, bm);
bm.free;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.BitCount := 24;
BB2.Assign(BB1);
Tile(BB1, BB2, Amount);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoSpotLight(Amount: Integer; Spot: TRect);
procedure SpotLight(var src: TDIB; Amount: Integer; Spot: TRect);
var
bm, z: TDIB;
w, h: Integer;
begin
z := TDIB.Create;
try
z.SetSize(src.Width, src.Height, 24);
z.DrawTo(src, 0, 0, src.Width, src.Height, 0, 0);
w := z.Width;
h := z.Height;
bm := TDIB.create;
try
bm.Width := w;
bm.Height := h;
bm.Canvas.Brush.color := clblack;
bm.Canvas.FillRect(rect(0, 0, w, h));
bm.Canvas.Brush.Color := clwhite;
bm.Canvas.Ellipse(Spot.left, spot.top, spot.right, spot.bottom);
bm.Transparent := true;
z.Canvas.CopyMode := cmSrcAnd; {as transparentcolor for white}
z.Canvas.Draw(0, 0, src);
z.Canvas.Draw(0, 0, bm);
src.Darkness(Amount);
src.Canvas.CopyMode := cmSrcPaint;
src.DrawTransparent(z, 0, 0, z.Width, z.Height, 0, 0, clBlack);
finally
bm.Free;
end;
finally
z.Free
end;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.BitCount := 24;
BB2.Assign(BB1);
SpotLight(BB2, Amount, Spot);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoEmboss;
procedure Emboss(var Bmp: TDIB);
var
x, y: Integer;
p1, p2: Pbytearray;
begin
for y := 0 to Bmp.Height - 2 do
begin
p1 := bmp.scanline[y];
p2 := bmp.scanline[y + 1];
for x := 0 to Bmp.Width - 4 do
begin
p1[x * 3] := (p1[x * 3] + (p2[(x + 3) * 3] xor $FF)) shr 1;
p1[x * 3 + 1] := (p1[x * 3 + 1] + (p2[(x + 3) * 3 + 1] xor $FF)) shr 1;
p1[x * 3 + 2] := (p1[x * 3 + 2] + (p2[(x + 3) * 3 + 2] xor $FF)) shr 1;
end;
end;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.BitCount := 24;
BB2.Assign(BB1);
Emboss(BB2);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoSolorize(Amount: Integer);
procedure Solorize(src, dst: TDIB; amount: Integer);
var
w, h, x, y: Integer;
ps, pd: pbytearray;
c: Integer;
begin
w := src.width;
h := src.height;
src.BitCount := 24;
dst.BitCount := 24;
for y := 0 to h - 1 do
begin
ps := src.scanline[y];
pd := dst.scanline[y];
for x := 0 to w - 1 do
begin
c := (ps[x * 3] + ps[x * 3 + 1] + ps[x * 3 + 2]) div 3;
if c > amount then
begin
pd[x * 3] := 255 - ps[x * 3];
pd[x * 3 + 1] := 255 - ps[x * 3 + 1];
pd[x * 3 + 2] := 255 - ps[x * 3 + 2];
end
else
begin
pd[x * 3] := ps[x * 3];
pd[x * 3 + 1] := ps[x * 3 + 1];
pd[x * 3 + 2] := ps[x * 3 + 2];
end;
end;
end;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.BitCount := 24;
BB2.Assign(BB1);
Solorize(BB1, BB2, Amount);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoPosterize(Amount: Integer);
procedure Posterize(src, dst: TDIB; amount: Integer);
var
w, h, x, y: Integer;
ps, pd: pbytearray;
begin
w := src.width;
h := src.height;
src.BitCount := 24;
dst.BitCount := 24;
for y := 0 to h - 1 do
begin
ps := src.scanline[y];
pd := dst.scanline[y];
for x := 0 to w - 1 do
begin
pd[x * 3] := round(ps[x * 3] / amount) * amount;
pd[x * 3 + 1] := round(ps[x * 3 + 1] / amount) * amount;
pd[x * 3 + 2] := round(ps[x * 3 + 2] / amount) * amount;
end;
end;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.BitCount := 24;
BB2.Assign(BB1);
Posterize(BB1, BB2, Amount);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoBrightness(Amount: Integer);
procedure Brightness(src, dst: TDIB; level: Integer);
const
MaxPixelCount = 32768;
type
pRGBArray = ^TRGBArray;
TRGBArray = array[0..MaxPixelCount - 1] of TRGBTriple;
var
i, j, value: Integer;
OrigRow, DestRow: pRGBArray;
begin
// get brightness increment value
value := level;
src.BitCount := 24;
dst.BitCount := 24;
// for each row of pixels
for i := 0 to src.Height - 1 do
begin
OrigRow := src.ScanLine[i];
DestRow := dst.ScanLine[i];
// for each pixel in row
for j := 0 to src.Width - 1 do
begin
// add brightness value to pixel's RGB values
if value > 0 then
begin
// RGB values must be less than 256
DestRow[j].rgbtRed := Min(255, OrigRow[j].rgbtRed + value);
DestRow[j].rgbtGreen := Min(255, OrigRow[j].rgbtGreen + value);
DestRow[j].rgbtBlue := Min(255, OrigRow[j].rgbtBlue + value);
end
else
begin
// RGB values must be greater or equal than 0
DestRow[j].rgbtRed := Max(0, OrigRow[j].rgbtRed + value);
DestRow[j].rgbtGreen := Max(0, OrigRow[j].rgbtGreen + value);
DestRow[j].rgbtBlue := Max(0, OrigRow[j].rgbtBlue + value);
end;
end;
end;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.BitCount := 24;
BB2.Assign(BB1);
Brightness(BB1, BB2, Amount);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoResample(AmountX, AmountY: Integer; TypeResample: TFilterTypeResample);
procedure Resample(Src, Dst: TDIB; filtertype: TFilterTypeResample; fwidth: single);
// -----------------------------------------------------------------------------
//
// Filter functions
//
// -----------------------------------------------------------------------------
 
// Hermite filter
function HermiteFilter(Value: Single): Single; {$IFDEF VER9UP}inline;{$ENDIF}
begin
// f(t) = 2|t|^3 - 3|t|^2 + 1, -1 <= t <= 1
if (Value < 0.0) then
Value := -Value;
if (Value < 1.0) then
Result := (2.0 * Value - 3.0) * Sqr(Value) + 1.0
else
Result := 0.0;
end;
 
// Box filter
// a.k.a. "Nearest Neighbour" filter
// anme: I have not been able to get acceptable
// results with this filter for subsampling.
function BoxFilter(Value: Single): Single; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if (Value > -0.5) and (Value <= 0.5) then
Result := 1.0
else
Result := 0.0;
end;
 
// Triangle filter
// a.k.a. "Linear" or "Bilinear" filter
function TriangleFilter(Value: Single): Single; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if (Value < 0.0) then
Value := -Value;
if (Value < 1.0) then
Result := 1.0 - Value
else
Result := 0.0;
end;
 
// Bell filter
function BellFilter(Value: Single): Single; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if (Value < 0.0) then
Value := -Value;
if (Value < 0.5) then
Result := 0.75 - Sqr(Value)
else
if (Value < 1.5) then
begin
Value := Value - 1.5;
Result := 0.5 * Sqr(Value);
end
else
Result := 0.0;
end;
 
// B-spline filter
function SplineFilter(Value: Single): Single; {$IFDEF VER9UP}inline;{$ENDIF}
var
tt: single;
begin
if (Value < 0.0) then
Value := -Value;
if (Value < 1.0) then
begin
tt := Sqr(Value);
Result := 0.5 * tt * Value - tt + 2.0 / 3.0;
end
else
if (Value < 2.0) then
begin
Value := 2.0 - Value;
Result := 1.0 / 6.0 * Sqr(Value) * Value;
end
else
Result := 0.0;
end;
 
// Lanczos3 filter
function Lanczos3Filter(Value: Single): Single;
function SinC(Value: Single): Single; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if (Value <> 0.0) then
begin
Value := Value * Pi;
Result := sin(Value) / Value
end
else
Result := 1.0;
end;
begin
if (Value < 0.0) then
Value := -Value;
if (Value < 3.0) then
Result := SinC(Value) * SinC(Value / 3.0)
else
Result := 0.0;
end;
 
function MitchellFilter(Value: Single): Single; {$IFDEF VER9UP}inline;{$ENDIF}
const
B = (1.0 / 3.0);
C = (1.0 / 3.0);
var
tt: single;
begin
if (Value < 0.0) then
Value := -Value;
tt := Sqr(Value);
if (Value < 1.0) then
begin
Value := (((12.0 - 9.0 * B - 6.0 * C) * (Value * tt))
+ ((-18.0 + 12.0 * B + 6.0 * C) * tt)
+ (6.0 - 2 * B));
Result := Value / 6.0;
end
else
if (Value < 2.0) then
begin
Value := (((-1.0 * B - 6.0 * C) * (Value * tt))
+ ((6.0 * B + 30.0 * C) * tt)
+ ((-12.0 * B - 48.0 * C) * Value)
+ (8.0 * B + 24 * C));
Result := Value / 6.0;
end
else
Result := 0.0;
end;
 
// -----------------------------------------------------------------------------
//
// Interpolator
//
// -----------------------------------------------------------------------------
type
// Contributor for a pixel
TContributor = packed record
pixel: Integer; // Source pixel
weight: single; // Pixel weight
end;
 
TContributorList = array[0..0] of TContributor;
PContributorList = ^TContributorList;
 
// List of source pixels contributing to a destination pixel
TCList = packed record
n: Integer;
p: PContributorList;
end;
 
TCListList = array[0..0] of TCList;
PCListList = ^TCListList;
 
TRGB = packed record
r, g, b: single;
end;
 
// Physical bitmap pixel
TColorRGB = packed record
r, g, b: BYTE;
end;
PColorRGB = ^TColorRGB;
 
// Physical bitmap scanline (row)
TRGBList = packed array[0..0] of TColorRGB;
PRGBList = ^TRGBList;
 
var
xscale, yscale: single; // Zoom scale factors
i, j, k: Integer; // Loop variables
center: single; // Filter calculation variables
width, fscale, weight: single; // Filter calculation variables
left, right: Integer; // Filter calculation variables
n: Integer; // Pixel number
Work: TDIB;
contrib: PCListList;
rgb: TRGB;
color: TColorRGB;
{$IFDEF USE_SCANLINE}
SourceLine,
DestLine: PRGBList;
//SourcePixel,
DestPixel: PColorRGB;
Delta,
DestDelta: Integer;
{$ENDIF}
SrcWidth,
SrcHeight,
DstWidth,
DstHeight: Integer;
 
function Color2RGB(Color: TColor): TColorRGB; {$IFDEF VER9UP}inline;{$ENDIF}
begin
Result.r := Color and $000000FF;
Result.g := (Color and $0000FF00) shr 8;
Result.b := (Color and $00FF0000) shr 16;
end;
 
function RGB2Color(Color: TColorRGB): TColor; {$IFDEF VER9UP}inline;{$ENDIF}
begin
Result := Color.r or (Color.g shl 8) or (Color.b shl 16);
end;
 
begin
DstWidth := Dst.Width;
DstHeight := Dst.Height;
SrcWidth := Src.Width;
SrcHeight := Src.Height;
if (SrcWidth < 1) or (SrcHeight < 1) then
raise Exception.Create('Source bitmap too small');
 
// Create intermediate image to hold horizontal zoom
Work := TDIB.Create;
try
Work.Height := SrcHeight;
Work.Width := DstWidth;
// xscale := DstWidth / SrcWidth;
// yscale := DstHeight / SrcHeight;
// Improvement suggested by David Ullrich:
if (SrcWidth = 1) then
xscale := DstWidth / SrcWidth
else
xscale := (DstWidth - 1) / (SrcWidth - 1);
if (SrcHeight = 1) then
yscale := DstHeight / SrcHeight
else
yscale := (DstHeight - 1) / (SrcHeight - 1);
// This implementation only works on 24-bit images because it uses
// TDIB.Scanline
{$IFDEF USE_SCANLINE}
//Src.PixelFormat := pf24bit;
Src.BitCount := 24;
//Dst.PixelFormat := Src.PixelFormat;
dst.BitCount := 24;
//Work.PixelFormat := Src.PixelFormat;
work.BitCount := 24;
{$ENDIF}
 
// --------------------------------------------
// Pre-calculate filter contributions for a row
// -----------------------------------------------
GetMem(contrib, DstWidth * sizeof(TCList));
// Horizontal sub-sampling
// Scales from bigger to smaller width
if (xscale < 1.0) then
begin
width := fwidth / xscale;
fscale := 1.0 / xscale;
for i := 0 to DstWidth - 1 do
begin
contrib^[i].n := 0;
GetMem(contrib^[i].p, trunc(width * 2.0 + 1) * sizeof(TContributor));
center := i / xscale;
// Original code:
// left := ceil(center - width);
// right := floor(center + width);
left := floor(center - width);
right := ceil(center + width);
for j := left to right do
begin
case filtertype of
ftrBox: weight := boxfilter((center - j) / fscale) / fscale;
ftrTriangle: weight := trianglefilter((center - j) / fscale) / fscale;
ftrHermite: weight := hermitefilter((center - j) / fscale) / fscale;
ftrBell: weight := bellfilter((center - j) / fscale) / fscale;
ftrBSpline: weight := splinefilter((center - j) / fscale) / fscale;
ftrLanczos3: weight := Lanczos3filter((center - j) / fscale) / fscale;
ftrMitchell: weight := Mitchellfilter((center - j) / fscale) / fscale;
else
weight := 0
end;
if (weight = 0.0) then
continue;
if (j < 0) then
n := -j
else if (j >= SrcWidth) then
n := SrcWidth - j + SrcWidth - 1
else
n := j;
k := contrib^[i].n;
contrib^[i].n := contrib^[i].n + 1;
contrib^[i].p^[k].pixel := n;
contrib^[i].p^[k].weight := weight;
end;
end;
end
else
// Horizontal super-sampling
// Scales from smaller to bigger width
begin
for i := 0 to DstWidth - 1 do
begin
contrib^[i].n := 0;
GetMem(contrib^[i].p, trunc(fwidth * 2.0 + 1) * sizeof(TContributor));
center := i / xscale;
// Original code:
// left := ceil(center - fwidth);
// right := floor(center + fwidth);
left := floor(center - fwidth);
right := ceil(center + fwidth);
for j := left to right do
begin
case filtertype of
ftrBox: weight := boxfilter(center - j);
ftrTriangle: weight := trianglefilter(center - j);
ftrHermite: weight := hermitefilter(center - j);
ftrBell: weight := bellfilter(center - j);
ftrBSpline: weight := splinefilter(center - j);
ftrLanczos3: weight := Lanczos3filter(center - j);
ftrMitchell: weight := Mitchellfilter(center - j);
else
weight := 0
end;
if (weight = 0.0) then
continue;
if (j < 0) then
n := -j
else if (j >= SrcWidth) then
n := SrcWidth - j + SrcWidth - 1
else
n := j;
k := contrib^[i].n;
contrib^[i].n := contrib^[i].n + 1;
contrib^[i].p^[k].pixel := n;
contrib^[i].p^[k].weight := weight;
end;
end;
end;
 
// ----------------------------------------------------
// Apply filter to sample horizontally from Src to Work
// ----------------------------------------------------
for k := 0 to SrcHeight - 1 do
begin
{$IFDEF USE_SCANLINE}
SourceLine := Src.ScanLine[k];
DestPixel := Work.ScanLine[k];
{$ENDIF}
for i := 0 to DstWidth - 1 do
begin
rgb.r := 0.0;
rgb.g := 0.0;
rgb.b := 0.0;
for j := 0 to contrib^[i].n - 1 do
begin
{$IFDEF USE_SCANLINE}
color := SourceLine^[contrib^[i].p^[j].pixel];
{$ELSE}
color := Color2RGB(Src.Canvas.Pixels[contrib^[i].p^[j].pixel, k]);
{$ENDIF}
weight := contrib^[i].p^[j].weight;
if (weight = 0.0) then
continue;
rgb.r := rgb.r + color.r * weight;
rgb.g := rgb.g + color.g * weight;
rgb.b := rgb.b + color.b * weight;
end;
if (rgb.r > 255.0) then
color.r := 255
else if (rgb.r < 0.0) then
color.r := 0
else
color.r := round(rgb.r);
if (rgb.g > 255.0) then
color.g := 255
else if (rgb.g < 0.0) then
color.g := 0
else
color.g := round(rgb.g);
if (rgb.b > 255.0) then
color.b := 255
else if (rgb.b < 0.0) then
color.b := 0
else
color.b := round(rgb.b);
{$IFDEF USE_SCANLINE}
// Set new pixel value
DestPixel^ := color;
// Move on to next column
inc(DestPixel);
{$ELSE}
Work.Canvas.Pixels[i, k] := RGB2Color(color);
{$ENDIF}
end;
end;
 
// Free the memory allocated for horizontal filter weights
for i := 0 to DstWidth - 1 do
FreeMem(contrib^[i].p);
 
FreeMem(contrib);
 
// -----------------------------------------------
// Pre-calculate filter contributions for a column
// -----------------------------------------------
GetMem(contrib, DstHeight * sizeof(TCList));
// Vertical sub-sampling
// Scales from bigger to smaller height
if (yscale < 1.0) then
begin
width := fwidth / yscale;
fscale := 1.0 / yscale;
for i := 0 to DstHeight - 1 do
begin
contrib^[i].n := 0;
GetMem(contrib^[i].p, trunc(width * 2.0 + 1) * sizeof(TContributor));
center := i / yscale;
// Original code:
// left := ceil(center - width);
// right := floor(center + width);
left := floor(center - width);
right := ceil(center + width);
for j := left to right do
begin
case filtertype of
ftrBox: weight := boxfilter((center - j) / fscale) / fscale;
ftrTriangle: weight := trianglefilter((center - j) / fscale) / fscale;
ftrHermite: weight := hermitefilter((center - j) / fscale) / fscale;
ftrBell: weight := bellfilter((center - j) / fscale) / fscale;
ftrBSpline: weight := splinefilter((center - j) / fscale) / fscale;
ftrLanczos3: weight := Lanczos3filter((center - j) / fscale) / fscale;
ftrMitchell: weight := Mitchellfilter((center - j) / fscale) / fscale;
else
weight := 0
end;
if (weight = 0.0) then
continue;
if (j < 0) then
n := -j
else if (j >= SrcHeight) then
n := SrcHeight - j + SrcHeight - 1
else
n := j;
k := contrib^[i].n;
contrib^[i].n := contrib^[i].n + 1;
contrib^[i].p^[k].pixel := n;
contrib^[i].p^[k].weight := weight;
end;
end
end
else
// Vertical super-sampling
// Scales from smaller to bigger height
begin
for i := 0 to DstHeight - 1 do
begin
contrib^[i].n := 0;
GetMem(contrib^[i].p, trunc(fwidth * 2.0 + 1) * sizeof(TContributor));
center := i / yscale;
// Original code:
// left := ceil(center - fwidth);
// right := floor(center + fwidth);
left := floor(center - fwidth);
right := ceil(center + fwidth);
for j := left to right do
begin
case filtertype of
ftrBox: weight := boxfilter(center - j);
ftrTriangle: weight := trianglefilter(center - j);
ftrHermite: weight := hermitefilter(center - j);
ftrBell: weight := bellfilter(center - j);
ftrBSpline: weight := splinefilter(center - j);
ftrLanczos3: weight := Lanczos3filter(center - j);
ftrMitchell: weight := Mitchellfilter(center - j);
else
weight := 0
end;
if (weight = 0.0) then
continue;
if (j < 0) then
n := -j
else if (j >= SrcHeight) then
n := SrcHeight - j + SrcHeight - 1
else
n := j;
k := contrib^[i].n;
contrib^[i].n := contrib^[i].n + 1;
contrib^[i].p^[k].pixel := n;
contrib^[i].p^[k].weight := weight;
end;
end;
end;
 
// --------------------------------------------------
// Apply filter to sample vertically from Work to Dst
// --------------------------------------------------
{$IFDEF USE_SCANLINE}
SourceLine := Work.ScanLine[0];
Delta := Integer(Work.ScanLine[1]) - Integer(SourceLine);
DestLine := Dst.ScanLine[0];
DestDelta := Integer(Dst.ScanLine[1]) - Integer(DestLine);
{$ENDIF}
for k := 0 to DstWidth - 1 do
begin
{$IFDEF USE_SCANLINE}
DestPixel := pointer(DestLine);
{$ENDIF}
for i := 0 to DstHeight - 1 do
begin
rgb.r := 0;
rgb.g := 0;
rgb.b := 0;
// weight := 0.0;
for j := 0 to contrib^[i].n - 1 do
begin
{$IFDEF USE_SCANLINE}
//color := PColorRGB(PByte(SourceLine) + contrib^[i].p^[j].pixel * Delta)^;
Move(Pointer(Integer(SourceLine) + contrib^[i].p^[j].pixel * Delta)^, Color, SizeOf(Color));
{$ELSE}
color := Color2RGB(Work.Canvas.Pixels[k, contrib^[i].p^[j].pixel]);
{$ENDIF}
weight := contrib^[i].p^[j].weight;
if (weight = 0.0) then
continue;
rgb.r := rgb.r + color.r * weight;
rgb.g := rgb.g + color.g * weight;
rgb.b := rgb.b + color.b * weight;
end;
if (rgb.r > 255.0) then
color.r := 255
else if (rgb.r < 0.0) then
color.r := 0
else
color.r := round(rgb.r);
if (rgb.g > 255.0) then
color.g := 255
else if (rgb.g < 0.0) then
color.g := 0
else
color.g := round(rgb.g);
if (rgb.b > 255.0) then
color.b := 255
else if (rgb.b < 0.0) then
color.b := 0
else
color.b := round(rgb.b);
{$IFDEF USE_SCANLINE}
DestPixel^ := color;
{$IFDEF WIN64}
inc(PByte(DestPixel), DestDelta);
{$ELSE}
inc(Integer(DestPixel), DestDelta);
{$ENDIF}
{$ELSE}
Dst.Canvas.Pixels[k, i] := RGB2Color(color);
{$ENDIF}
end;
{$IFDEF USE_SCANLINE}
Inc(SourceLine, 1);
Inc(DestLine, 1);
{$ENDIF}
end;
 
// Free the memory allocated for vertical filter weights
for i := 0 to DstHeight - 1 do
FreeMem(contrib^[i].p);
 
FreeMem(contrib);
 
finally
Work.Free;
end;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
BB2.SetSize(AmountX, AmountY, 24);
Resample(BB1, BB2, TypeResample, DefaultFilterRadius[TypeResample]);
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
procedure TDIB.DoColorize(ForeColor, BackColor: TColor);
procedure Colorize(src, dst: TDIB; iForeColor, iBackColor: TColor; iDither: Boolean{$IFDEF VER4UP} = False{$ENDIF});
{for monochromatic picture change colors}
procedure InvertBitmap(Bmp: TDIB);
begin
Bmp.Canvas.CopyMode := cmDstInvert;
Bmp.Canvas.CopyRect(rect(0, 0, Bmp.Width, Bmp.Height),
Bmp.Canvas, rect(0, 0, Bmp.Width, Bmp.Height));
end;
var
fForeColor: TColor;
fForeDither: Boolean;
lTempBitmap: TDIB;
lTempBitmap2: TDIB;
lDitherBitmap: TDIB;
lCRect: TRect;
x, y, w, h: Integer;
begin
{--}
//fColor := iBackColor; ;
fForeColor := iForeColor;
fForeDither := iDither;
w := src.Width;
h := src.Height;
lDitherBitmap := nil;
lTempBitmap := TDIB.Create;
lTempBitmap.SetSize(w, h, 24);
lTempBitmap2 := TDIB.Create;
lTempBitmap2.SetSize(w, h, 24);
lCRect := rect(0, 0, w, h);
with lTempBitmap.Canvas do
begin
Brush.Style := bsSolid;
Brush.Color := iBackColor;
FillRect(lCRect);
CopyMode := cmSrcInvert;
CopyRect(lCRect, src.Canvas, lCRect);
InvertBitmap(src);
CopyMode := cmSrcPaint;
CopyRect(lCRect, src.Canvas, lCRect);
InvertBitmap(lTempBitmap);
CopyMode := cmSrcInvert;
CopyRect(lCRect, src.Canvas, lCRect);
InvertBitmap(src);
end;
with lTempBitmap2.Canvas do
begin
Brush.Style := bsSolid;
Brush.Color := clBlack;
FillRect(lCRect);
if fForeDither then
begin
InvertBitmap(src);
lDitherBitmap := TDIB.Create;
lDitherBitmap.SetSize(8, 8, 24);
with lDitherBitmap.Canvas do
begin
for x := 0 to 7 do
for y := 0 to 7 do
if ((x mod 2 = 0) and (y mod 2 > 0)) or ((x mod 2 > 0) and (y mod 2 = 0)) then
pixels[x, y] := fForeColor
else
pixels[x, y] := iBackColor;
end;
Brush.Bitmap.Assign(lDitherBitmap);
end
else
begin
Brush.Style := bsSolid;
Brush.Color := fForeColor;
end;
if not fForeDither then
InvertBitmap(src);
CopyMode := cmPatPaint;
CopyRect(lCRect, src.Canvas, lCRect);
if fForeDither then
if Assigned(lDitherBitmap) then
lDitherBitmap.Free;
CopyMode := cmSrcInvert;
CopyRect(lCRect, src.Canvas, lCRect);
end;
lTempBitmap.Canvas.CopyMode := cmSrcInvert;
lTempBitmap.Canvas.Copyrect(lCRect, lTempBitmap2.Canvas, lCRect);
InvertBitmap(src);
lTempBitmap.Canvas.CopyMode := cmSrcErase;
lTempBitmap.Canvas.Copyrect(lCRect, src.Canvas, lCRect);
InvertBitmap(src);
lTempBitmap.Canvas.CopyMode := cmSrcInvert;
lTempBitmap.Canvas.Copyrect(lCRect, lTempBitmap2.Canvas, lCRect);
InvertBitmap(lTempBitmap);
InvertBitmap(src);
dst.Assign(lTempBitmap);
lTempBitmap.Free;
end;
var BB1, BB2: TDIB;
begin
BB1 := TDIB.Create;
BB1.BitCount := 24;
BB1.Assign(Self);
BB2 := TDIB.Create;
Colorize(BB1, BB2, ForeColor, BackColor{$IFNDEF VER4UP}, False{$ENDIF});
Self.Assign(BB2);
BB1.Free;
BB2.Free;
end;
 
{ procedure for special purpose }
(*
procedure TDIB.FadeOut(DIB2: TDIB; Step: Byte);
var
P1, P2: PByteArray;
W, H: Integer;
begin
P1 := ScanLine[DIB2.Height - 1];
P2 := DIB2.ScanLine[DIB2.Height - 1];
W := WidthBytes;
H := Height;
asm
PUSH ESI
PUSH EDI
MOV ESI, P1
MOV EDI, P2
MOV EDX, W
MOV EAX, H
IMUL EDX
MOV ECX, EAX
@@1:
MOV AL, Step
MOV AH, [ESI]
CMP AL, AH
JA @@2
MOV AL, AH
@@2:
MOV [EDI], AL
INC ESI
INC EDI
DEC ECX
JNZ @@1
POP EDI
POP ESI
end;
end;
*)
procedure TDIB.FadeOut(DIB2: TDIB; Step: Byte);
var
P1, P2: PByteArray;
W, H, i: Integer;
begin
P1 := ScanLine[DIB2.Height - 1];
P2 := DIB2.ScanLine[DIB2.Height - 1];
W := WidthBytes;
H := Height;
for i := 0 to W * H - 1 do
begin
if P1[i] < Step then P2[i] := P1[i]
else P2[i] := Step;
end;
end;
 
procedure TDIB.DoZoom(DIB2: TDIB; ZoomRatio: Real);
var
P1, P2: PByteArray;
W, H: Integer;
x, y: Integer;
xr, yr, xstep, ystep: real;
xstart: real;
begin
W := WidthBytes;
H := Height;
xstart := (W - (W * ZoomRatio)) / 2;
 
xr := xstart;
yr := (H - (H * ZoomRatio)) / 2;
xstep := ZoomRatio;
ystep := ZoomRatio;
 
for y := 1 to Height - 1 do
begin
P2 := DIB2.ScanLine[y];
if (yr >= 0) and (yr <= H) then
begin
P1 := ScanLine[Trunc(yr)];
for x := 1 to Width - 1 do
begin
if (xr >= 0) and (xr <= W) then
begin
P2[x] := P1[Trunc(xr)];
end
else
begin
P2[x] := 0;
end;
xr := xr + xstep;
end;
end
else
begin
for x := 1 to Width - 1 do
begin
P2[x] := 0;
end;
end;
xr := xstart;
yr := yr + ystep;
end;
end;
 
procedure TDIB.DoBlur(DIB2: TDIB);
var
P1, P2: PByteArray;
W: Integer;
x, y: Integer;
begin
W := WidthBytes;
for y := 1 to Height - 1 do
begin
P1 := ScanLine[y];
P2 := DIB2.ScanLine[y];
for x := 1 to Width - 1 do
begin
P2[x] := (P1[x] + P1[x - 1] + P1[x + 1] + P1[x + W] + P1[x - W]) div 5;
end;
end;
end;
(*
procedure TDIB.FadeIn(DIB2: TDIB; Step: Byte);
var
P1, P2: PByteArray;
W, H: Integer;
begin
P1 := ScanLine[DIB2.Height - 1];
P2 := DIB2.ScanLine[DIB2.Height - 1];
W := WidthBytes;
H := Height;
asm
PUSH ESI
PUSH EDI
MOV ESI, P1
MOV EDI, P2
MOV EDX, W
MOV EAX, H
IMUL EDX
MOV ECX, EAX
@@1:
MOV AL, Step
MOV AH, [ESI]
CMP AL, AH
JB @@2
MOV AL, AH
@@2:
MOV [EDI], AL
INC ESI
INC EDI
DEC ECX
JNZ @@1
POP EDI
POP ESI
end;
end;
*)
procedure TDIB.FadeIn(DIB2: TDIB; Step: Byte);
var
P1, P2: PByteArray;
W, H, i: Integer;
begin
P1 := ScanLine[DIB2.Height - 1];
P2 := DIB2.ScanLine[DIB2.Height - 1];
W := WidthBytes;
H := Height;
for i := 0 to W * H - 1 do
begin
if P1[i] > Step then P2[i] := P1[i]
else P2[i] := Step;
end;
end;
 
(*
procedure TDIB.FillDIB8(Color: Byte);
var
P: PByteArray;
W, H: Integer;
begin
P := ScanLine[Height - 1];
W := WidthBytes;
H := Height;
asm
PUSH ESI
MOV ESI, P
MOV EDX, W
MOV EAX, H
IMUL EDX
MOV ECX, EAX
MOV AL, Color
@@1:
MOV [ESI], AL
INC ESI
DEC ECX
JNZ @@1
POP ESI
end;
end;
*)
 
procedure TDIB.FillDIB8(Color: Byte);
var
P: PByteArray;
W, H, I: Integer;
begin
P := ScanLine[Height - 1];
W := WidthBytes;
H := Height;
for I := 0 to W * H - 1 do
P[I] := Color;
end;
 
 
procedure TDIB.DoRotate(DIB1: TDIB; cX, cY, Angle: Integer);
type
T3Byte = array[0..2] of Byte;
P3ByteArray = ^T3ByteArray;
T3ByteArray = array[0..32767] of T3Byte;
PLongArray = ^TLongArray;
TLongArray = array[0..32767] of LongInt;
var
p, p2: PByteArray;
x, y, x2, y2, angled: Integer;
cosy, siny: real;
begin
angled := 384 + Angle;
for y := 0 to Height - 1 do
begin
p := DIB1.ScanLine[y];
cosy := (y - cY) * dcos(angled and $1FF);
siny := (y - cY) * dsin(angled and $1FF);
for x := 0 to Width - 1 do
begin
x2 := Trunc((x - cX) * dsin(angled and $1FF) + cosy) + cX;
y2 := Trunc((x - cX) * dcos(angled and $1FF) - siny) + cY;
case bitcount of
8:
begin
if (y2 >= 0) and (y2 < Height) and (x2 >= 0) and (x2 < Width) then
begin
p2 := ScanLine[y2];
p[x] := p2[Width - x2];
end
else
begin
if p[x] > 4 then
p[x] := p[x] - 4
else
p[x] := 0;
end;
end;
16:
begin
if (y2 >= 0) and (y2 < Height) and (x2 >= 0) and (x2 < Width) then
begin
PWordArray(p2) := ScanLine[y2];
PWordArray(p)[x] := PWordArray(p2)[Width - x2];
end
else
begin
if PWordArray(p)[x] > 4 then
PWordArray(p)[x] := PWordArray(p)[x] - 4
else
PWordArray(p)[x] := 0;
end;
end;
24:
begin
if (y2 >= 0) and (y2 < Height) and (x2 >= 0) and (x2 < Width) then
begin
P3ByteArray(p2) := ScanLine[y2];
P3ByteArray(p)[x] := P3ByteArray(p2)[Width - x2];
end
else
begin
if P3ByteArray(p)[x][0] > 4 then
P3ByteArray(p)[x][0] := P3ByteArray(p)[x][0] - 4
else if P3ByteArray(p)[x][1] > 4 then
P3ByteArray(p)[x][1] := P3ByteArray(p)[x][1] - 4
else if P3ByteArray(p)[x][2] > 4 then
P3ByteArray(p)[x][2] := P3ByteArray(p)[x][2] - 4
else
begin
P3ByteArray(p)[x][0] := 0;
P3ByteArray(p)[x][1] := 0;
P3ByteArray(p)[x][2] := 0;
end;
end;
end;
32: begin
if (y2 >= 0) and (y2 < Height) and (x2 >= 0) and (x2 < Width) then
begin
plongarray(p2) := ScanLine[y2];
plongarray(p)[x] := plongarray(p2)[Width - x2];
end
else
begin
if plongarray(p)[x] > 4 then
plongarray(p)[x] := plongarray(p)[x] - 4
else
plongarray(p)[x] := 0;
end;
end;
end
end;
end;
end;
 
function TDIB.Ink(DIB: TDIB; const SprayInit: Boolean; const AmountSpray: Integer): Boolean;
type
T3Byte = array[0..2] of Byte;
P3ByteArray = ^T3ByteArray;
T3ByteArray = array[0..32767] of T3Byte;
PLongArray = ^TLongArray;
TLongArray = array[0..32767] of LongInt;
function ColorToRGBTriple(const Color: TColor): TRGBTriple;
begin
with RESULT do
begin
rgbtRed := GetRValue(Color);
rgbtGreen := GetGValue(Color);
rgbtBlue := GetBValue(Color)
end
end {ColorToRGBTriple};
 
function TestQuad(T: T3Byte; Color: Integer): Boolean;
begin
Result := (T[0] > GetRValue(Color)) and
(T[1] > GetGValue(Color)) and
(T[2] > GetBValue(Color))
end;
var
p0, p, p2: PByteArray;
x, y, c: Integer;
z: Integer;
begin
if SprayInit then
begin
DIB.Assign(Self);
{ Spray seeds }
for c := 0 to AmountSpray do
begin
DIB.Pixels[Random(Width - 1), Random(Height - 1)] := 0;
end;
end;
Result := True; {all is black}
for y := 0 to DIB.Height - 1 do
begin
p := DIB.ScanLine[y];
for x := 0 to DIB.Width - 1 do
begin
case bitcount of
8:
begin
if p[x] < 16 then
begin
if p[x] > 0 then Result := False;
if y > 0 then
begin
p0 := DIB.ScanLine[y - 1];
if p0[x] > 4 then
p0[x] := p0[x] - 4
else
p0[x] := 0;
if x > 0 then
if p0[x - 1] > 2 then
p0[x - 1] := p0[x - 1] - 2
else
p0[x - 1] := 0;
if x < (DIB.Width - 1) then
if p0[x + 1] > 2 then
p0[x + 1] := p0[x + 1] - 2
else
p0[x + 1] := 0;
end;
if y < (DIB.Height - 1) then
begin
p2 := DIB.ScanLine[y + 1];
if p2[x] > 4 then
p2[x] := p2[x] - 4
else
p2[x] := 0;
if x > 0 then
if p2[x - 1] > 2 then
p2[x - 1] := p2[x - 1] - 2
else
p2[x - 1] := 0;
if x < (DIB.Width - 1) then
if p2[x + 1] > 2 then
p2[x + 1] := p2[x + 1] - 2
else
p2[x + 1] := 0;
end;
if p[x] > 8 then
p[x] := p[x] - 8
else
p[x] := 0;
if x > 0 then
if p[x - 1] > 4 then
p[x - 1] := p[x - 1] - 4
else
p[x - 1] := 0;
if x < (DIB.Width - 1) then
if p[x + 1] > 4 then
p[x + 1] := p[x + 1] - 4
else
p[x + 1] := 0;
end;
end;
16:
begin
if pwordarray(p)[x] < 16 then
begin
if pwordarray(p)[x] > 0 then Result := False;
if y > 0 then
begin
pwordarray(p0) := DIB.ScanLine[y - 1];
if pwordarray(p0)[x] > 4 then
pwordarray(p0)[x] := pwordarray(p0)[x] - 4
else
pwordarray(p0)[x] := 0;
if x > 0 then
if pwordarray(p0)[x - 1] > 2 then
pwordarray(p0)[x - 1] := pwordarray(p0)[x - 1] - 2
else
pwordarray(p0)[x - 1] := 0;
if x < (DIB.Width - 1) then
if pwordarray(p0)[x + 1] > 2 then
pwordarray(p0)[x + 1] := pwordarray(p0)[x + 1] - 2
else
pwordarray(p0)[x + 1] := 0;
end;
if y < (DIB.Height - 1) then
begin
pwordarray(p2) := DIB.ScanLine[y + 1];
if pwordarray(p2)[x] > 4 then
pwordarray(p2)[x] := pwordarray(p2)[x] - 4
else
pwordarray(p2)[x] := 0;
if x > 0 then
if pwordarray(p2)[x - 1] > 2 then
pwordarray(p2)[x - 1] := pwordarray(p2)[x - 1] - 2
else
pwordarray(p2)[x - 1] := 0;
if x < (DIB.Width - 1) then
if pwordarray(p2)[x + 1] > 2 then
pwordarray(p2)[x + 1] := pwordarray(p2)[x + 1] - 2
else
pwordarray(p2)[x + 1] := 0;
end;
if pwordarray(p)[x] > 8 then
pwordarray(p)[x] := pwordarray(p)[x] - 8
else
pwordarray(p)[x] := 0;
if x > 0 then
if pwordarray(p)[x - 1] > 4 then
pwordarray(p)[x - 1] := pwordarray(p)[x - 1] - 4
else
pwordarray(p)[x - 1] := 0;
if x < (DIB.Width - 1) then
if pwordarray(p)[x + 1] > 4 then
pwordarray(p)[x + 1] := pwordarray(p)[x + 1] - 4
else
pwordarray(p)[x + 1] := 0;
end;
end;
24:
begin
if not TestQuad(P3ByteArray(p)[x], 16) then
begin
if TestQuad(P3ByteArray(p)[x], 0) then Result := False;
if y > 0 then
begin
P3ByteArray(p0) := DIB.ScanLine[y - 1];
if TestQuad(P3ByteArray(p0)[x], 4) then
begin
for z := 0 to 2 do
if P3ByteArray(p0)[x][z] > 4 then
P3ByteArray(p0)[x][z] := P3ByteArray(p0)[x][z] - 4
end
else
for z := 0 to 2 do
P3ByteArray(p0)[x][z] := 0;
if x > 0 then
if TestQuad(P3ByteArray(p0)[x - 1], 2) then
begin
for z := 0 to 2 do
if P3ByteArray(p0)[x - 1][z] > 2 then
P3ByteArray(p0)[x - 1][z] := P3ByteArray(p0)[x - 1][z] - 2
end
else
for z := 0 to 2 do
P3ByteArray(p0)[x - 1][z] := 0;
if x < (DIB.Width - 1) then
if TestQuad(P3ByteArray(p0)[x + 1], 2) then
begin
for z := 0 to 2 do
if P3ByteArray(p0)[x + 1][z] > 2 then
P3ByteArray(p0)[x + 1][z] := P3ByteArray(p0)[x + 1][z] - 2
end
else
for z := 0 to 2 do
P3ByteArray(p0)[x + 1][z] := 0;
end;
if y < (DIB.Height - 1) then
begin
P3ByteArray(p2) := DIB.ScanLine[y + 1];
if TestQuad(P3ByteArray(p2)[x], 4) then
begin
for z := 0 to 2 do
if P3ByteArray(p2)[x][z] > 4 then
P3ByteArray(p2)[x][z] := P3ByteArray(p2)[x][z] - 4
end
else
for z := 0 to 2 do
P3ByteArray(p2)[x][z] := 0;
if x > 0 then
if TestQuad(P3ByteArray(p2)[x - 1], 2) then
begin
for z := 0 to 2 do
if P3ByteArray(p2)[x - 1][z] > 2 then
P3ByteArray(p2)[x - 1][z] := P3ByteArray(p2)[x - 1][z] - 2
end
else
for z := 0 to 2 do
P3ByteArray(p2)[x - 1][z] := 0;
if x < (DIB.Width - 1) then
if TestQuad(P3ByteArray(p2)[x + 1], 2) then
begin
for z := 0 to 2 do
if P3ByteArray(p2)[x + 1][z] > 2 then
P3ByteArray(p2)[x + 1][z] := P3ByteArray(p2)[x + 1][z] - 2
end
else
for z := 0 to 2 do
P3ByteArray(p2)[x + 1][z] := 0;
end;
if TestQuad(P3ByteArray(p)[x], 8) then
begin
for z := 0 to 2 do
if P3ByteArray(p)[x][z] > 8 then
P3ByteArray(p)[x][z] := P3ByteArray(p)[x][z] - 8
end
else
for z := 0 to 2 do
P3ByteArray(p)[x][z] := 0;
if x > 0 then
if TestQuad(P3ByteArray(p)[x - 1], 4) then
begin
for z := 0 to 2 do
if P3ByteArray(p)[x - 1][z] > 4 then
P3ByteArray(p)[x - 1][z] := P3ByteArray(p)[x - 1][z] - 4
end
else
for z := 0 to 2 do
P3ByteArray(p)[x - 1][z] := 0;
if x < (DIB.Width - 1) then
if TestQuad(P3ByteArray(p)[x + 1], 4) then
begin
for z := 0 to 2 do
if P3ByteArray(p)[x + 1][z] > 4 then
P3ByteArray(p)[x + 1][z] := P3ByteArray(p)[x + 1][z] - 4
end
else
for z := 0 to 2 do
P3ByteArray(p)[x + 1][z] := 0;
end;
end;
32:
begin
if plongarray(p)[x] < 16 then
begin
if plongarray(p)[x] > 0 then Result := False;
if y > 0 then
begin
plongarray(p0) := DIB.ScanLine[y - 1];
if plongarray(p0)[x] > 4 then
plongarray(p0)[x] := plongarray(p0)[x] - 4
else
plongarray(p0)[x] := 0;
if x > 0 then
if plongarray(p0)[x - 1] > 2 then
plongarray(p0)[x - 1] := plongarray(p0)[x - 1] - 2
else
plongarray(p0)[x - 1] := 0;
if x < (DIB.Width - 1) then
if plongarray(p0)[x + 1] > 2 then
plongarray(p0)[x + 1] := plongarray(p0)[x + 1] - 2
else
plongarray(p0)[x + 1] := 0;
end;
if y < (DIB.Height - 1) then
begin
plongarray(p2) := DIB.ScanLine[y + 1];
if plongarray(p2)[x] > 4 then
plongarray(p2)[x] := plongarray(p2)[x] - 4
else
plongarray(p2)[x] := 0;
if x > 0 then
if plongarray(p2)[x - 1] > 2 then
plongarray(p2)[x - 1] := plongarray(p2)[x - 1] - 2
else
plongarray(p2)[x - 1] := 0;
if x < (DIB.Width - 1) then
if plongarray(p2)[x + 1] > 2 then
plongarray(p2)[x + 1] := plongarray(p2)[x + 1] - 2
else
plongarray(p2)[x + 1] := 0;
end;
if plongarray(p)[x] > 8 then
plongarray(p)[x] := plongarray(p)[x] - 8
else
plongarray(p)[x] := 0;
if x > 0 then
if plongarray(p)[x - 1] > 4 then
plongarray(p)[x - 1] := plongarray(p)[x - 1] - 4
else
plongarray(p)[x - 1] := 0;
if x < (DIB.Width - 1) then
if plongarray(p)[x + 1] > 4 then
plongarray(p)[x + 1] := plongarray(p)[x + 1] - 4
else
plongarray(p)[x + 1] := 0;
end;
end;
end {case};
end;
end;
end;
 
procedure TDIB.Distort(DIB1: TDIB; dt: TDistortType; cX, cY, Angle: Integer; Factor: Real);
type
T3Byte = array[0..2] of Byte;
P3ByteArray = ^T3ByteArray;
T3ByteArray = array[0..32767] of T3Byte;
PLongArray = ^TLongArray;
TLongArray = array[0..32767] of LongInt;
var
p, p2: PByteArray;
x, y, x2, y2, angled, ysqr: Integer;
actdist, dist, cosy, siny: real;
begin
dist := Factor * sqrt(sqr(cX) + sqr(cY));
for y := 0 to DIB1.Height - 1 do
begin
p := DIB1.ScanLine[y];
ysqr := sqr(y - cY);
for x := 0 to (DIB1.Width) - 1 do
begin
actdist := (sqrt((sqr(x - cX) + ysqr)) / dist);
if dt = dtSlow then
actdist := dsin((Trunc(actdist * 1024)) and $1FF);
angled := 384 + Trunc((actdist) * Angle);
 
cosy := (y - cY) * dcos(angled and $1FF);
siny := (y - cY) * dsin(angled and $1FF);
 
x2 := Trunc((x - cX) * dsin(angled and $1FF) + cosy) + cX;
y2 := Trunc((x - cX) * dcos(angled and $1FF) - siny) + cY;
case bitcount of
8:
begin
if (y2 >= 0) and (y2 < Height) and (x2 >= 0) and (x2 < Width) then
begin
p2 := ScanLine[y2];
p[x] := p2[Width - x2];
end
else
begin
if p[x] > 2 then
p[x] := p[x] - 2
else
p[x] := 0;
end;
end;
16:
begin
if (y2 >= 0) and (y2 < Height) and (x2 >= 0) and (x2 < Width) then
begin
pwordarray(p2) := ScanLine[y2];
pwordarray(p)[x] := pwordarray(p2)[Width - x2];
end
else
begin
if pwordarray(p)[x] > 2 then
pwordarray(p)[x] := pwordarray(p)[x] - 2
else
pwordarray(p)[x] := 0;
end;
end;
24:
begin
if (y2 >= 0) and (y2 < Height) and (x2 >= 0) and (x2 < Width) then
begin
P3ByteArray(p2) := ScanLine[y2];
P3ByteArray(p)[x] := P3ByteArray(p2)[Width - x2];
end
else
begin
if P3ByteArray(p)[x][0] > 2 then
P3ByteArray(p)[x][0] := P3ByteArray(p)[x][0] - 2
else if P3ByteArray(p)[x][1] > 2 then
P3ByteArray(p)[x][1] := P3ByteArray(p)[x][1] - 2
else if P3ByteArray(p)[x][2] > 2 then
P3ByteArray(p)[x][2] := P3ByteArray(p)[x][2] - 2
else
begin
P3ByteArray(p)[x][0] := 0;
P3ByteArray(p)[x][1] := 0;
P3ByteArray(p)[x][2] := 0;
end;
end;
end;
32:
begin
if (y2 >= 0) and (y2 < Height) and (x2 >= 0) and (x2 < Width) then
begin
plongarray(p2) := ScanLine[y2];
plongarray(p)[x] := plongarray(p2)[Width - x2];
end
else
begin
if p[x] > 2 then
plongarray(p)[x] := plongarray(p)[x] - 2
else
plongarray(p)[x] := 0;
end;
end;
end {case}
end;
end;
end;
 
procedure TDIB.AntialiasedLine(x1, y1, x2, y2: Integer; color: TColor);
//anti-aliased line using the Wu algorithm by Peter Bone
var
dX, dY, X, Y, start, finish: Integer;
LM, LR: Integer;
dxi, dyi, dydxi: Integer;
P: PLines;
R, G, B: byte;
begin
R := GetRValue(Color);
G := GetGValue(Color);
B := GetBValue(Color);
dX := abs(x2 - x1); // Calculate deltax and deltay for initialisation
dY := abs(y2 - y1);
if (dX = 0) or (dY = 0) then
begin
Canvas.Pen.Color := (B shl 16) + (G shl 8) + R;
Canvas.MoveTo(x1, y1);
Canvas.LineTo(x2, y2);
exit;
end;
if dX > dY then
begin // horizontal or vertical
if y2 > y1 then // determine rise and run
dydxi := -dY shl 16 div dX
else
dydxi := dY shl 16 div dX;
if x2 < x1 then
begin
start := x2; // right to left
finish := x1;
dyi := y2 shl 16;
end
else
begin
start := x1; // left to right
finish := x2;
dyi := y1 shl 16;
dydxi := -dydxi; // inverse slope
end;
if finish >= Width then finish := Width - 1;
for X := start to finish do
begin
Y := dyi shr 16;
if (X < 0) or (Y < 0) or (Y > Height - 2) then
begin
Inc(dyi, dydxi);
Continue;
end;
LM := dyi - Y shl 16; // fractional part of dyi - in fixed-point
LR := 65536 - LM;
P := Scanline[Y];
P^[X].B := (B * LR + P^[X].B * LM) shr 16;
P^[X].G := (G * LR + P^[X].G * LM) shr 16;
P^[X].R := (R * LR + P^[X].R * LM) shr 16;
//Inc(Y);
P^[X].B := (B * LM + P^[X].B * LR) shr 16;
P^[X].G := (G * LM + P^[X].G * LR) shr 16;
P^[X].R := (R * LM + P^[X].R * LR) shr 16;
Inc(dyi, dydxi); // next point
end;
end
else
begin
if x2 > x1 then // determine rise and run
dydxi := -dX shl 16 div dY
else
dydxi := dX shl 16 div dY;
if y2 < y1 then
begin
start := y2; // right to left
finish := y1;
dxi := x2 shl 16;
end
else
begin
start := y1; // left to right
finish := y2;
dxi := x1 shl 16;
dydxi := -dydxi; // inverse slope
end;
if finish >= Height then finish := Height - 1;
for Y := start to finish do
begin
X := dxi shr 16;
if (Y < 0) or (X < 0) or (X > Width - 2) then
begin
Inc(dxi, dydxi);
Continue;
end;
LM := dxi - X shl 16;
LR := 65536 - LM;
P := Scanline[Y];
P^[X].B := (B * LR + P^[X].B * LM) shr 16;
P^[X].G := (G * LR + P^[X].G * LM) shr 16;
P^[X].R := (R * LR + P^[X].R * LM) shr 16;
Inc(X);
P^[X].B := (B * LM + P^[X].B * LR) shr 16;
P^[X].G := (G * LM + P^[X].G * LR) shr 16;
P^[X].R := (R * LM + P^[X].R * LR) shr 16;
Inc(dxi, dydxi); // next point
end;
end;
end;
(*
function TDIB.GetColorBetween(StartColor, EndColor: TColor; Pointvalue,
FromPoint, ToPoint: Extended): TColor;
var F: Extended; r1, r2, r3, g1, g2, g3, b1, b2, b3: Byte;
function CalcColorBytes(fb1, fb2: Byte): Byte;
begin
result := fb1;
if fb1 < fb2 then Result := FB1 + Trunc(F * (fb2 - fb1));
if fb1 > fb2 then Result := FB1 - Trunc(F * (fb1 - fb2));
end;
begin
if Pointvalue <= FromPoint then
begin
result := StartColor;
exit;
end;
if Pointvalue >= ToPoint then
begin
result := EndColor;
exit;
end;
F := (Pointvalue - FromPoint) / (ToPoint - FromPoint);
asm
mov EAX, Startcolor
cmp EAX, EndColor
je @@exit //when equal then exit
mov r1, AL
shr EAX,8
mov g1, AL
shr EAX,8
mov b1, AL
mov EAX, Endcolor
mov r2, AL
shr EAX,8
mov g2, AL
shr EAX,8
mov b2, AL
push ebp
mov AL, r1
mov DL, r2
call CalcColorBytes
pop ECX
push EBP
Mov r3, AL
mov DL, g2
mov AL, g1
call CalcColorBytes
pop ECX
push EBP
mov g3, Al
mov DL, B2
mov Al, B1
call CalcColorBytes
pop ECX
mov b3, AL
XOR EAX,EAX
mov AL, B3
shl EAX,8
mov AL, G3
shl EAX,8
mov AL, R3
@@Exit:
mov @result, EAX
end;
end;
*)
function TDIB.GetColorBetween(StartColor, EndColor: TColor; Pointvalue, FromPoint, ToPoint: Extended): TColor;
var
F: Extended;
r1, g1, b1, r2, g2, b2, r3, g3, b3: Byte;
 
function CalcColorBytes(const factor: Extended; const fb1, fb2: Byte): Byte; {$IFDEF VER9UP}inline;{$ENDIF}
begin
Result := fb1;
if fb1 < fb2 then Result := fb1 + Trunc(factor * (fb2 - fb1));
if fb1 > fb2 then Result := fb1 - Trunc(factor * (fb1 - fb2));
end;
 
procedure GetRGB(const AColor: TColor; var R, G, B: Byte); {$IFDEF VER9UP}inline;{$ENDIF}
begin
R := AColor and $FF;
G := (AColor shr 8) and $FF;
B := (AColor shr 16) and $FF;
end;
 
begin
if Pointvalue <= FromPoint then
begin
Result := StartColor;
Exit;
end;
if Pointvalue >= ToPoint then
begin
Result := EndColor;
Exit;
end;
 
F := (Pointvalue - FromPoint) / (ToPoint - FromPoint);
 
GetRGB(StartColor, r1, g1, b1);
// r1 := StartColor and $FF;
// g1 := (StartColor shr 8) and $FF;
// b1 := (StartColor shr 16) and $FF;
GetRGB(StartColor, r2, g2, b2);
// r2 := EndColor and $FF;
// g2 := (EndColor shr 8) and $FF;
// b2 := (EndColor shr 16) and $FF;
 
r3 := CalcColorBytes(F, r1, r2);
g3 := CalcColorBytes(F, g1, g2);
b3 := CalcColorBytes(F, b1, b2);
 
Result := (b3 shl 16) or (g3 shl 8) or r3;
end;
 
procedure TDIB.ColoredLine(const iStart, iEnd: TPoint; iColorStyle: TColorLineStyle;
iGradientFrom, iGradientTo: TColor; iPixelGeometry: TColorLinePixelGeometry; iRadius: Word);
var
tempColor: TColor;
const
WavelengthMinimum = 380;
WavelengthMaximum = 780;
 
procedure SetColor(Color: TColor);
begin
Canvas.Pen.Color := Color;
Canvas.Brush.Color := Color;
tempColor := Color
end {SetColor};
 
function WL2RGB(const Wavelength: Double): TColor; {$IFDEF VER9UP}inline;{$ENDIF}
const
Gamma = 0.80;
IntensityMax = 255;
var
Red, Blue, Green, Factor: Double;
 
function Adjust(const Color, Factor: Double): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if Color = 0.0 then Result := 0
else Result := Round(IntensityMax * Power(Color * Factor, Gamma))
end {Adjust};
begin
case Trunc(Wavelength) of
380..439:
begin
Red := -(Wavelength - 440) / (440 - 380);
Green := 0.0;
Blue := 1.0
end;
440..489:
begin
Red := 0.0;
Green := (Wavelength - 440) / (490 - 440);
Blue := 1.0
end;
490..509:
begin
Red := 0.0;
Green := 1.0;
Blue := -(Wavelength - 510) / (510 - 490)
end;
510..579:
begin
Red := (Wavelength - 510) / (580 - 510);
Green := 1.0;
Blue := 0.0
end;
580..644:
begin
Red := 1.0;
Green := -(Wavelength - 645) / (645 - 580);
Blue := 0.0
end;
645..780:
begin
Red := 1.0;
Green := 0.0;
Blue := 0.0
end;
else
Red := 0.0;
Green := 0.0;
Blue := 0.0
end;
case Trunc(Wavelength) of
380..419: factor := 0.3 + 0.7 * (Wavelength - 380) / (420 - 380);
420..700: factor := 1.0;
701..780: factor := 0.3 + 0.7 * (780 - Wavelength) / (780 - 700)
else
factor := 0.0
end;
Result := RGB(Adjust(Red, Factor), Adjust(Green, Factor), Adjust(Blue, Factor));
end;
 
function Rainbow(const fraction: Double): TColor; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if (fraction < 0.0) or (fraction > 1.0) then Result := clBlack
else
Result := WL2RGB(WavelengthMinimum + Fraction * (WavelengthMaximum - WavelengthMinimum))
end {Raindbow};
 
function ColorInterpolate(const fraction: Double; const Color1, Color2: TColor): TColor; {$IFDEF VER9UP}inline;{$ENDIF}
var
complement: Double;
R1, R2, G1, G2, B1, B2: BYTE;
begin
if fraction <= 0 then Result := Color1
else
if fraction >= 1.0 then Result := Color2
else
begin
R1 := GetRValue(Color1);
G1 := GetGValue(Color1);
B1 := GetBValue(Color1);
R2 := GetRValue(Color2);
G2 := GetGValue(Color2);
B2 := GetBValue(Color2);
complement := 1.0 - fraction;
Result := RGB(Round(complement * R1 + fraction * R2),
Round(complement * G1 + fraction * G2),
Round(complement * B1 + fraction * B2))
end
end {ColorInterpolate};
 
// Conversion utility routines
function ColorToRGBTriple(const Color: TColor): TRGBTriple; {$IFDEF VER9UP}inline;{$ENDIF}
begin
with Result do
begin
rgbtRed := GetRValue(Color);
rgbtGreen := GetGValue(Color);
rgbtBlue := GetBValue(Color)
end
end {ColorToRGBTriple};
 
function RGBTripleToColor(const Triple: TRGBTriple): TColor; {$IFDEF VER9UP}inline;{$ENDIF}
begin
Result := RGB(Triple.rgbtRed, Triple.rgbtGreen, Triple.rgbtBlue)
end {RGBTripleToColor};
// Bresenham's Line Algorithm. Byte, March 1988, pp. 249-253.
var
a, b, d, diag_inc, dXdg, dXndg, dYdg, dYndg, i, nDginc, nDswap, x, y: Integer;
begin {DrawLine}
x := iStart.X;
y := iStart.Y;
a := iEnd.X - iStart.X;
b := iEnd.Y - iStart.Y;
if a < 0 then
begin
a := -a;
dXdg := -1
end
else dXdg := 1;
if b < 0 then
begin
b := -b;
dYdg := -1
end
else dYdg := 1;
if a < b then
begin
nDswap := a;
a := b;
b := nDswap;
dXndg := 0;
dYndg := dYdg
end
else
begin
dXndg := dXdg;
dYndg := 0
end;
d := b + b - a;
nDginc := b + b;
diag_inc := b + b - a - a;
for i := 0 to a do
begin
case iPixelGeometry of
pgPoint:
case iColorStyle of
csSolid:
Canvas.Pixels[x, y] := tempColor;
csGradient:
Canvas.Pixels[x, y] := ColorInterpolate(i / a, iGradientFrom, iGradientTo);
csRainbow:
Canvas.Pixels[x, y] := Rainbow(i / a)
end;
pgCircular:
begin
case iColorStyle of
csSolid: ;
csGradient: SetColor(ColorInterpolate(i / a, iGradientFrom, iGradientTo));
csRainbow: SetColor(Rainbow(i / a))
end;
Canvas.Ellipse(x - iRadius, y - iRadius, x + iRadius, y + iRadius)
end;
pgRectangular:
begin
case iColorStyle of
csSolid: ;
csGradient: SetColor(ColorInterpolate(i / a, iGradientFrom, iGradientTo));
csRainbow: SetColor(Rainbow(i / a))
end;
Canvas.Rectangle(x - iRadius, y - iRadius, x + iRadius, y + iRadius)
end
end;
if d < 0 then
begin
Inc(x, dXndg);
Inc(y, dYndg);
Inc(d, nDginc);
end
else
begin
Inc(x, dXdg);
Inc(y, dYdg);
Inc(d, diag_inc);
end
end
end {Line};
 
procedure TDIB.DoNovaEffect(const sr, sg, sb, cx, cy, radius,
nspokes, randomhue, randomspok, randgauss: Integer; onProgress: TProgressEvent);
// Copyright (c) 2000 by Keith Murray (kmurray@hotfreeware.com)
// All rights reserved.
// Adapted for DIB by JB.
type
PByteArray = ^TByteArray;
TByteArray = array[0..32767] of Byte;
PDoubleArray = ^TDoubleArray;
TDoubleArray = array[0..0] of Double;
PIntegerArray = ^TIntegerArray;
TIntegerArray = array[0..0] of Integer;
type
TProgressEvent = procedure(progress: Integer; message: string;
var cancel: Boolean) of object;
const
M_PI = 3.14159265358979323846;
RAND_MAX = 2147483647;
 
function Gauss(const randgauss: Integer): double; {$IFDEF VER9UP}inline;{$ENDIF}
const magnitude = 6;
var
sum: double;
i: Integer;
begin
sum := 0;
for i := 1 to magnitude do
sum := sum + (randgauss / 2147483647);
result := sum / magnitude;
end;
 
function Clamp(const i, l, h: double): double; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if i < l then
result := l
else
if i > h then
result := h
else
result := i;
end;
 
function IClamp(const i, l, h: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if i < l then
result := l
else if i > h then
result := h
else result := i;
end;
{$IFNDEF VER9UP}
procedure rgb_to_hsl(const r, g, b: Double; var h, s, l: Double); {$IFDEF VER9UP}inline;{$ENDIF}
{$IFNDEF VER4UP}
function Max(a, b: Double): Double;
begin
Result := a; if b > a then Result := b;
end;
function Min(a, b: Double): Double;
begin
Result := a; if b < a then Result := b;
end;
{$ENDIF}
var
v, m, vm: Double;
r2, g2, b2: Double;
begin
h := 0;
s := 0;
l := 0;
v := Max(r, g);
v := Max(v, b);
m := Min(r, g);
m := Min(m, b);
l := (m + v) / 2.0;
if l <= 0.0 then
exit;
vm := v - m;
s := vm;
if s > 0.0 then
begin
if l <= 0.5 then
s := s / (v + m)
else s := s / (2.0 - v - m);
end
else exit;
r2 := (v - 4) / vm;
g2 := (v - g) / vm;
b2 := (v - b) / vm;
if r = v then
begin
if g = m then
h := b2 + 5.0
else h := 1.0 - g2;
end
else if g = v then
begin
if b = m then
h := 1.0 + r2
else h := 3.0 - b2;
end
else
begin
if r = m then
h := 3.0 + g2
else h := 5.0 - r2;
end;
h := h / 6;
end;
 
procedure hsl_to_rgb(h, sl, l: Double; var r, g, b: Double); {$IFDEF VER9UP}inline;{$ENDIF}
var
v: Double;
m, sv: Double;
sextant: Integer;
fract, vsf, mid1, mid2: Double;
begin
if l <= 0.5 then
v := l * (1.0 + sl)
else v := l + sl - l * sl;
if v <= 0 then
begin
r := 0.0;
g := 0.0;
b := 0.0;
end
else
begin
m := l + l - v;
sv := (v - m) / v;
h := h * 6.0;
sextant := Trunc(h);
fract := h - sextant;
vsf := v * sv * fract;
mid1 := m + vsf;
mid2 := v - vsf;
case sextant of
0:
begin
r := v; g := mid1; b := m;
end;
1:
begin
r := mid2; g := v; b := m;
end;
2:
begin
r := m; g := v; b := mid1;
end;
3:
begin
r := m; g := mid2; b := v;
end;
4:
begin
r := mid1; g := m; b := v;
end;
5:
begin
r := v; g := m; b := mid2;
end;
end;
end;
end;
{$ELSE}
procedure rgb_to_hsl(const r, g, b: Double; var h, s, l: Double); {$IFDEF VER9UP}inline;{$ENDIF}
var
h0, s0, l0: Word;
begin //procedure ColorRGBToHLS(clrRGB: TColorRef; var Hue, Luminance, Saturation: Word);
GraphUtil.ColorRGBToHLS(RGB(Trunc(r),Trunc(g),Trunc(b)), h0, s0, l0);
h := h0;
s := s0;
l := l0;
end;
 
procedure hsl_to_rgb(h, sl, l: Double; var r, g, b: Double); {$IFDEF VER9UP}inline;{$ENDIF}
var X: TColorRef;
begin //function ColorHLSToRGB(Hue, Luminance, Saturation: Word): TColorRef;
X := GraphUtil.ColorHLSToRGB(Trunc(h), Trunc(l), Trunc(sl));
r := GetRValue(X);
g := GetGValue(X);
b := GetBValue(X);
end;
{$ENDIF}
 
var
src_row, dest_row: PByte;
src, dest: PByteArray;
color, colors: array[0..3] of Integer;
SpokeColor: PIntegerArray;
spoke: PDoubleArray;
x2, row, col, x, y, alpha, has_alpha, bpp, xc, yc, i, j: Integer;
u, v, l, l0, w, w1, c, nova_alpha, new_alpha, compl_ratio, ratio, r, g, b, h, s, lu, SpokeCol: Double;
dstDIB: TDIB;
begin
colors[0] := sr;
colors[1] := sg;
colors[2] := sb;
new_alpha := 0;
 
GetMem(spoke, NSpokes * sizeof(Double));
GetMem(spokecolor, NSpokes * sizeof(Integer) * 3);
dstDIB := TDIB.Create;
try
dstDIB.Assign(Self);
dstDIB.Canvas.Brush.Color := clBlack;
dstDIB.Canvas.FillRect(dstDIB.Canvas.ClipRect);
// R G B
rgb_to_hsl(colors[0] / 255.0, colors[1] / 255.0, colors[2] / 255.0, h, s, lu);
 
for i := 0 to NSpokes - 1 do
begin
spoke[i] := gauss(randgauss);
h := h + randomhue / 360.0 * ({Random(RAND_MAX)}RandomSpok / RAND_MAX - 0.5);
if h < 0 then
h := h + 1.0
else if h > 1.0 then
h := h - 1.0;
hsl_to_rgb(h, s, lu, r, g, b);
spokecolor[3 * i + 0] := Trunc(255 * r);
spokecolor[3 * i + 1] := Trunc(255 * g);
spokecolor[3 * i + 2] := Trunc(255 * b);
end;
 
xc := cx;
yc := cy;
l0 := (x2 - xc) / 4 + 1;
bpp := Self.BitCount div 8;
has_alpha := 0;
alpha := bpp;
y := 0;
for row := 0 to Self.Height - 1 do
begin
src_row := Self.ScanLine[row];
dest_row := dstDIB.ScanLine[row];
src := Pointer(src_row);
dest := Pointer(dest_row);
x := 0;
for col := 0 to Self.Width - 1 do
begin
u := (x - xc) / radius;
v := (y - yc) / radius;
l := sqrt(sqr(u) + sqr(v));
c := (arctan2(u, v) / (2 * M_PI) + 0.51) * NSpokes;
i := floor(c);
c := c - i;
i := i mod NSpokes;
w1 := spoke[i] * (1 - c) + spoke[(i + 1) mod NSpokes] * c;
w1 := w1 * w1;
w := 1 / (l + 0.001) * 0.9;
nova_alpha := Clamp(w, 0.0, 1.0);
ratio := nova_alpha;
compl_ratio := 1.0 - ratio;
for j := 0 to alpha - 1 do
begin
spokecol := spokecolor[3 * i + j] * (1.0 - c) + spokecolor[3 * ((i + 1) mod nspokes) + j] * c;
if w > 1.0 then
color[j] := IClamp(Trunc(spokecol * w), 0, 255)
else
color[j] := Trunc(src[j] * compl_ratio + spokecol * ratio);
color[j] := Trunc(color[j] + 255 * Clamp(w1 * w, 0.0, 1.0));
dest[j] := IClamp(color[j], 0, 255);
end;
{$IFDEF WIN64}
Inc(PByte(src), bpp);
Inc(PBYTE(dest), bpp);
{$ELSE}
Inc(Integer(src), bpp);
Inc(Integer(dest), bpp);
{$ENDIF}
Inc(x);
end;
Inc(y);
end;
Self.Assign(dstDIB);
finally
dstDIB.Free;
FreeMem(Spoke);
FreeMem(SpokeColor);
end;
end;
 
procedure TDIB.DrawMandelbrot(ao, au: Integer; bo, bu: Double);
var
c1, c2, z1, z2, tmp: Double;
i, j, Count: Integer;
dstDIB: TDIB;
X, Y: Double;
X2, Y2: Integer;
begin
dstDIB := TDIB.Create;
dstDIB.Assign(Self);
X2 := dstDIB.FWidth;
Y2 := dstDIB.FHeight;
{as Example
ao := 1;
au := -2;
bo := 1.5;
bu := -1.5;
}
X := (ao - au) / dstDIB.FWidth;
Y := (bo - bu) / dstDIB.FHeight;
try
c2 := bu;
for i := 10 to X2 do
begin
c1 := au;
for j := 0 to Y2 do
begin
z1 := 0;
z2 := 0;
Count := 0;
{count is deep of iteration of the mandelbrot set
if |z| >=2 then z is not a member of a mandelset}
while (((z1 * z1 + z2 * z2 < 4) and (Count <= 90))) do
begin
tmp := z1;
z1 := z1 * z1 - z2 * z2 + c1;
z2 := 2 * tmp * z2 + c2;
Inc(Count);
end;
//the color-palette depends on TColor(n*count mod t)
dstDIB.Canvas.Pixels[j, i] := (16 * Count mod 255);
c1 := c1 + X;
end;
c2 := c2 + Y;
end;
finally
Self.Assign(dstDIB);
dstDIB.Free;
end;
end;
 
procedure TDIB.SephiaEffect(Depth: Integer{$IFDEF VER4UP} = 20{$ENDIF});
{Note: when depth parameter set to 0 will produce black and white picture only}
var
color, color2: LongInt;
r, g, b, rr, gg: byte;
h, w: Integer;
p0: PByteArray;
x, y: Integer;
begin
if Self.BitCount = 24 then
begin
Self.DoGrayScale;
for y := 0 to Self.Height - 1 do
begin
p0 := Self.ScanLine[y];
for x := 0 to Self.Width - 1 do
begin
r := p0[x * 3];
g := p0[x * 3 + 1];
b := p0[x * 3 + 2];
rr := r + (depth * 2);
gg := g + depth;
if rr <= ((depth * 2) - 1) then
rr := 255;
if gg <= (depth - 1) then
gg := 255;
p0[x * 3] := rr;
p0[x * 3 + 1] := gg;
p0[x * 3 + 2] := b;
end;
end;
Exit
end;
{this alogorithm is slower because does not use scanline property}
for h := 0 to Self.Height-1 do
begin
for w := 0 to Self.Width-1 do
begin
//first convert the bitmap to greyscale
color := ColorToRGB(Self.Canvas.Pixels[w, h]);
r := GetRValue(color);
g := GetGValue(color);
b := GetBValue(color);
color2 := (r + g + b) div 3;
Self.Canvas.Pixels[w, h] := RGB(color2, color2, color2);
//then convert it to sepia
color := ColorToRGB(Self.Canvas.Pixels[w, h]);
r := GetRValue(color);
g := GetGValue(color);
b := GetBValue(color);
rr := r + (depth * 2);
gg := g + depth;
if rr <= ((depth * 2) - 1) then
rr := 255;
if gg <= (depth - 1) then
gg := 255;
Self.Canvas.Pixels[w, h] := RGB(rr, gg, b);
end;
end;
 
end;
 
procedure TDIB.EncryptDecrypt(const Key: Integer);
{for decript call it again}
var
BytesPorScan: Integer;
w, h: Integer;
p: pByteArray;
begin
try
BytesPorScan := Abs(Integer(Self.ScanLine[1]) -
Integer(Self.ScanLine[0]));
except
raise Exception.Create('Error ');
end;
RandSeed := Key;
for h := 0 to Self.Height - 1 do
begin
P := Self.ScanLine[h];
for w := 0 to BytesPorScan - 1 do
P^[w] := P^[w] xor Random(256);
end;
end;
 
procedure TDIB.LinePolar(x, y: Integer; AngleInDegree, Length: extended; Color: cardinal);
var
xp, yp: Integer;
begin
xp := Round(Sin(AngleInDegree * Pi / 180) * Length) + x;
yp := Round(Cos(AngleInDegree * Pi / 180) * Length) + y;
AntialiasedLine(x, y, xp, yp, Color);
end;
 
//y = 0.299*g + 0.587*b + 0.114*r;
 
procedure TDIB.BlendPixel(const X, Y: Integer; aColor: Cardinal; Alpha: byte);
var
cR, cG, cB: byte;
aR, aG, aB: byte;
dColor: Cardinal;
begin
aR := GetRValue(aColor);
aG := GetGValue(aColor);
aB := GetBValue(aColor);
dColor := Self.Canvas.Pixels[x, y];
cR := GetRValue(dColor);
cG := GetGValue(dColor);
cB := GetBValue(dColor);
Canvas.Pixels[x, y] := RGB((Alpha * (aR - cR) shr 8) + cR, // R alpha
(Alpha * (aG - cG) shr 8) + cG, // G alpha
(Alpha * (aB - cB) shr 8) + cB); // B alpha
end;
 
 
procedure MakeDib(out DIB: TDIB; const iWidth, iHeight, iBitCount: Integer; iFillColor: TColor{$IFDEF VER4UP} = clBlack{$ENDIF}); {$IFDEF VER4UP} overload; {$ENDIF}
begin
DIB := TDIB.Create;
DIB.SetSize(iWidth, iHeight, iBitCount);
DIB.Fill(iFillColor);
end;
 
procedure{$IFDEF VER4UP}MakeDib{$ELSE}MakeDib2{$ENDIF}(out DIB: TDIB; iBitmap: TBitmap); {$IFDEF VER4UP} overload; {$ENDIF}
begin
DIB := TDIB.Create;
if Assigned(iBitmap) then
DIB.CreateDIBFromBitmap(iBitmap)
else
DIB.Fill(clBlack);
end;
 
initialization
TPicture.RegisterClipBoardFormat(CF_DIB, TDIB);
TPicture.RegisterFileFormat('dib', 'Device Independent Bitmap', TDIB);
/VCL_DELPHIX_D6/DXDIBEffectEdit.dfm
0,0 → 1,474
object TDelphiXDIBEffectEditForm: TTDelphiXDIBEffectEditForm
Left = 293
Top = 183
BorderStyle = bsDialog
Caption = 'Special effect'
ClientHeight = 368
ClientWidth = 504
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
Position = poScreenCenter
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Bevel3: TBevel
Left = 8
Top = 8
Width = 489
Height = 321
Shape = bsFrame
end
object Panel1: TPanel
Left = 16
Top = 16
Width = 473
Height = 305
BevelOuter = bvNone
BorderStyle = bsSingle
TabOrder = 1
object Bevel1: TBevel
Left = 8
Top = 39
Width = 258
Height = 258
end
object Image1: TImage
Left = 9
Top = 40
Width = 32
Height = 32
AutoSize = True
end
object LSpokes: TLabel
Left = 8
Top = 8
Width = 36
Height = 13
Caption = 'Spokes'
FocusControl = Spokes
end
object LRaHUE: TLabel
Left = 160
Top = 8
Width = 66
Height = 13
Caption = 'Random HUE'
FocusControl = RaHUE
end
object LCentr: TLabel
Left = 312
Top = 8
Width = 57
Height = 13
Caption = 'Nova radius'
FocusControl = Centr
end
object Label4: TLabel
Left = 276
Top = 44
Width = 11
Height = 13
Caption = 'R:'
end
object Label5: TLabel
Left = 276
Top = 76
Width = 11
Height = 13
Caption = 'G:'
end
object Label6: TLabel
Left = 276
Top = 108
Width = 10
Height = 13
Caption = 'B:'
end
object Label7: TLabel
Left = 274
Top = 140
Width = 13
Height = 13
Hint = 'Random spoke...'
Caption = 'rS:'
FocusControl = randSpok
ParentShowHint = False
ShowHint = True
end
object Label8: TLabel
Left = 274
Top = 164
Width = 14
Height = 13
Hint = 'Random gauss...'
Caption = 'rG:'
FocusControl = RandGauss
ParentShowHint = False
ShowHint = True
end
object rS_max: TSpeedButton
Left = 334
Top = 136
Width = 36
Height = 21
Caption = 'max'
Spacing = -1
OnClick = rS_maxClick
end
object rG_max: TSpeedButton
Left = 334
Top = 160
Width = 36
Height = 21
Caption = 'max'
Spacing = -1
OnClick = rG_maxClick
end
object Bevel2: TBevel
Left = 272
Top = 187
Width = 192
Height = 65
end
object SpokesPlus: TSpeedButton
Left = 124
Top = 5
Width = 17
Height = 17
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
700077777777777770007777700077777000777770C077777000777770C07777
7000770000C000077000770CCCCCCC077000770000C000077000777770C07777
7000777770C07777700077777000777770007777777777777000777777777777
7000}
OnClick = SpokesPlusClick
end
object SpokesMinus: TSpeedButton
Left = 140
Top = 5
Width = 17
Height = 17
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7000777777777777700077777777777770007777777777777000777777777777
70007700000000077000770CCCCCCC0770007700000000077000777777777777
7000777777777777700077777777777770007777777777777000777777777777
7000}
OnClick = SpokesMinusClick
end
object RaHUEPlus: TSpeedButton
Left = 276
Top = 5
Width = 17
Height = 17
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
700077777777777770007777700077777000777770C077777000777770C07777
7000770000C000077000770CCCCCCC077000770000C000077000777770C07777
7000777770C07777700077777000777770007777777777777000777777777777
7000}
OnClick = RaHUEPlusClick
end
object RaHUEMinus: TSpeedButton
Left = 292
Top = 5
Width = 17
Height = 17
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7000777777777777700077777777777770007777777777777000777777777777
70007700000000077000770CCCCCCC0770007700000000077000777777777777
7000777777777777700077777777777770007777777777777000777777777777
7000}
OnClick = RaHUEMinusClick
end
object CentrPlus: TSpeedButton
Left = 428
Top = 5
Width = 17
Height = 17
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
700077777777777770007777700077777000777770C077777000777770C07777
7000770000C000077000770CCCCCCC077000770000C000077000777770C07777
7000777770C07777700077777000777770007777777777777000777777777777
7000}
OnClick = CentrPlusClick
end
object CentrMinus: TSpeedButton
Left = 444
Top = 5
Width = 17
Height = 17
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7000777777777777700077777777777770007777777777777000777777777777
70007700000000077000770CCCCCCC0770007700000000077000777777777777
7000777777777777700077777777777770007777777777777000777777777777
7000}
OnClick = CentrMinusClick
end
object LName: TLabel
Left = 283
Top = 200
Width = 112
Height = 13
Caption = 'Picture name (required):'
FocusControl = eName
Font.Charset = DEFAULT_CHARSET
Font.Color = clPurple
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
end
object eR: TEdit
Left = 289
Top = 40
Width = 35
Height = 21
TabOrder = 0
Text = '16'
OnChange = ImageChange
end
object eG: TEdit
Left = 289
Top = 72
Width = 35
Height = 21
TabOrder = 1
Text = '48'
OnChange = ImageChange
end
object eB: TEdit
Left = 289
Top = 104
Width = 35
Height = 21
TabOrder = 2
Text = '255'
OnChange = ImageChange
end
object randSpok: TEdit
Left = 289
Top = 136
Width = 44
Height = 21
TabOrder = 3
end
object RandGauss: TEdit
Left = 289
Top = 160
Width = 44
Height = 21
TabOrder = 4
end
object PictSize: TRadioGroup
Left = 385
Top = 44
Width = 73
Height = 121
Caption = ' Size: '
ItemIndex = 0
Items.Strings = (
'256x256'
'128x128'
'64x64'
'32x62'
'16x16'
'8x8')
TabOrder = 5
OnClick = ImageChange
end
object R_updown: TSpinButton
Left = 326
Top = 41
Width = 20
Height = 20
DownGlyph.Data = {
0E010000424D0E01000000000000360000002800000009000000060000000100
200000000000D800000000000000000000000000000000000000008080000080
8000008080000080800000808000008080000080800000808000008080000080
8000008080000080800000808000000000000080800000808000008080000080
8000008080000080800000808000000000000000000000000000008080000080
8000008080000080800000808000000000000000000000000000000000000000
0000008080000080800000808000000000000000000000000000000000000000
0000000000000000000000808000008080000080800000808000008080000080
800000808000008080000080800000808000}
TabOrder = 6
UpGlyph.Data = {
0E010000424D0E01000000000000360000002800000009000000060000000100
200000000000D800000000000000000000000000000000000000008080000080
8000008080000080800000808000008080000080800000808000008080000080
8000000000000000000000000000000000000000000000000000000000000080
8000008080000080800000000000000000000000000000000000000000000080
8000008080000080800000808000008080000000000000000000000000000080
8000008080000080800000808000008080000080800000808000000000000080
8000008080000080800000808000008080000080800000808000008080000080
800000808000008080000080800000808000}
OnDownClick = R_updownDownClick
OnUpClick = R_updownUpClick
end
object G_updown: TSpinButton
Left = 326
Top = 73
Width = 20
Height = 20
DownGlyph.Data = {
0E010000424D0E01000000000000360000002800000009000000060000000100
200000000000D800000000000000000000000000000000000000008080000080
8000008080000080800000808000008080000080800000808000008080000080
8000008080000080800000808000000000000080800000808000008080000080
8000008080000080800000808000000000000000000000000000008080000080
8000008080000080800000808000000000000000000000000000000000000000
0000008080000080800000808000000000000000000000000000000000000000
0000000000000000000000808000008080000080800000808000008080000080
800000808000008080000080800000808000}
TabOrder = 8
UpGlyph.Data = {
0E010000424D0E01000000000000360000002800000009000000060000000100
200000000000D800000000000000000000000000000000000000008080000080
8000008080000080800000808000008080000080800000808000008080000080
8000000000000000000000000000000000000000000000000000000000000080
8000008080000080800000000000000000000000000000000000000000000080
8000008080000080800000808000008080000000000000000000000000000080
8000008080000080800000808000008080000080800000808000000000000080
8000008080000080800000808000008080000080800000808000008080000080
800000808000008080000080800000808000}
OnDownClick = G_updownDownClick
OnUpClick = G_updownUpClick
end
object B_updown: TSpinButton
Left = 326
Top = 105
Width = 20
Height = 20
DownGlyph.Data = {
0E010000424D0E01000000000000360000002800000009000000060000000100
200000000000D800000000000000000000000000000000000000008080000080
8000008080000080800000808000008080000080800000808000008080000080
8000008080000080800000808000000000000080800000808000008080000080
8000008080000080800000808000000000000000000000000000008080000080
8000008080000080800000808000000000000000000000000000000000000000
0000008080000080800000808000000000000000000000000000000000000000
0000000000000000000000808000008080000080800000808000008080000080
800000808000008080000080800000808000}
TabOrder = 7
UpGlyph.Data = {
0E010000424D0E01000000000000360000002800000009000000060000000100
200000000000D800000000000000000000000000000000000000008080000080
8000008080000080800000808000008080000080800000808000008080000080
8000000000000000000000000000000000000000000000000000000000000080
8000008080000080800000000000000000000000000000000000000000000080
8000008080000080800000808000008080000000000000000000000000000080
8000008080000080800000808000008080000080800000808000000000000080
8000008080000080800000808000008080000080800000808000008080000080
800000808000008080000080800000808000}
OnDownClick = B_updownDownClick
OnUpClick = B_updownUpClick
end
object Spokes: TProgressBar
Left = 8
Top = 24
Width = 150
Height = 9
Min = 1
Max = 1024
Position = 255
TabOrder = 9
OnMouseMove = SpokesMouseMove
end
object RaHUE: TProgressBar
Left = 160
Top = 24
Width = 150
Height = 9
Max = 360
TabOrder = 10
OnMouseMove = RaHUEMouseMove
end
object Centr: TProgressBar
Left = 312
Top = 24
Width = 150
Height = 9
Min = 1
Position = 1
TabOrder = 11
OnMouseMove = CentrMouseMove
end
object eName: TEdit
Left = 283
Top = 216
Width = 161
Height = 21
TabOrder = 12
end
end
object Button1: TButton
Left = 264
Top = 336
Width = 75
Height = 25
Caption = 'Save as...'
TabOrder = 0
OnClick = Button1Click
end
object btnOK: TButton
Left = 344
Top = 336
Width = 75
Height = 25
Caption = 'OK'
ModalResult = 1
TabOrder = 2
OnClick = btnOKClick
end
object btnCancel: TButton
Left = 421
Top = 336
Width = 75
Height = 25
Caption = 'Cancel'
ModalResult = 2
TabOrder = 3
OnClick = btnCancelClick
end
object SavePictureDialog1: TSavePictureDialog
DefaultExt = '.bmp'
Filter =
'All (*.dib;*.jpg;*.jpeg;*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf)|*.' +
'dib;*.jpg;*.jpeg;*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf|Device Ind' +
'ependent Bitmap (*.dib)|*.dib|JPEG Image File (*.jpg)|*.jpg|JPEG' +
' Image File (*.jpeg)|*.jpeg|JPEG Image File (*.jpg)|*.jpg|JPEG I' +
'mage File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp|Icons (*.ico)|*.' +
'ico|Enhanced Metafiles (*.emf)|*.emf|Metafiles (*.wmf)|*.wmf'
Title = 'Save NOVA picture effect'
Left = 160
Top = 304
end
end
/VCL_DELPHIX_D6/DXInput.pas
6,7 → 6,20
 
uses
Windows, Messages, SysUtils, Classes, Controls, Forms, MMSystem,
DirectX, DXClass;
DXClass, {$IFDEF VER17UP} Types, {$ENDIF}
{$IfDef StandardDX}
{$IfDef DX9}
DirectInput;
{$Else}
{$IfDef DX81}
DirectInput8;
{$Else}
DirectInput;
{$EndIf}
{$EndIf}
{$Else}
DirectX;
{$EndIf}
 
type
 
765,7 → 778,7
FFindEffectGUID := pdei.guid;
end;
 
Result := DIENUM_STOP;
Result := Integer(DIENUM_STOP);
end;
 
procedure CreateIEffectGuid(const GUID: TGUID;
774,7 → 787,7
if EffectObject.Feff.dwSize=0 then Exit;
 
if FRoot.FInput.FDevice2<>nil then
FRoot.FInput.FDevice2.CreateEffect(GUID, EffectObject.Feff, EffectObject.FEffect, nil);
FRoot.FInput.FDevice2.CreateEffect(GUID, @EffectObject.Feff, EffectObject.FEffect, nil);
end;
 
procedure CreateIEffect(dwFlags: DWORD;
1405,11 → 1418,11
 
if FDevice<>nil then
begin
hr := FDevice.GetDeviceState(dwSize, Data);
hr := FDevice.GetDeviceState(dwSize, @Data);
if (hr=DIERR_INPUTLOST) or (hr=DIERR_NOTACQUIRED) then
begin
FDevice.Acquire;
hr := FDevice.GetDeviceState(dwSize, Data);
hr := FDevice.GetDeviceState(dwSize, @Data);
end;
Result := hr=DI_OK;
end else
1421,7 → 1434,7
function DIEnumDeviceObjectsProc(const peff: TDIDeviceObjectInstanceA;
pvRef: Pointer): HRESULT; stdcall;
begin
Result := DIENUM_CONTINUE;
Result := Integer(DIENUM_CONTINUE);
 
if CompareMem(@peff.guidType, @GUID_Unknown, SizeOf(TGUID)) then Exit;
 
1646,7 → 1659,10
DIK_APPS : Result := VK_APPS;
end;
end;
 
{$IFDEF StandardDX}
type
TDIKeyboardState = array[0..255] of Byte;
{$ENDIF}
var
j: Integer;
i: TDXInputState;
1848,7 → 1864,7
function TJoystick_EnumJoysticksCallback(const lpddi: TDIDeviceInstanceA;
pvRef: Pointer): HRESULT; stdcall;
begin
Result := DIENUM_CONTINUE;
Result := Integer(DIENUM_CONTINUE);
 
with TJoystick(pvRef) do
begin
1856,7 → 1872,7
begin
FDeviceGUID := lpddi.guidInstance;
FEnumFlag := True;
Result := DIENUM_STOP;
Result := Integer(DIENUM_STOP);
Exit;
end;
Inc(FEnumIndex);
1880,7 → 1896,7
FEnumFlag := False;
FEnumIndex := 0;
 
FDXInput.FDInput.EnumDevices(DIDEVTYPE_JOYSTICK, @TJoystick_EnumJoysticksCallback,
FDXInput.FDInput.EnumDevices({DIDEVTYPE_JOYSTICK}4, @TJoystick_EnumJoysticksCallback,
Self, DIEDFL_ATTACHEDONLY);
 
if not FEnumFlag then Exit;
1896,7 → 1912,7
FForceFeedbackDevice := True;
end;
 
if FDXInput.FDInput.CreateDevice(GUID_Joystick, FDevice, nil)<>DI_OK then Exit;
//if FDXInput.FDInput.CreateDevice(GUID_Joystick, FDevice, nil)<>DI_OK then Exit; get out by Paul van Dinther
 
{ Device data format (TDIDataFormat) making. }
 
2122,12 → 2138,12
procedure InitDirectInput(out DI: IDirectInput);
type
TDirectInputCreate = function(hinst: THandle; dwVersion: DWORD;
out ppDI: IDirectInputA; punkOuter: IUnknown): HRESULT; stdcall;
out ppDI: {$IFDEF UNICODE}IDirectInputW{$ELSE}IDirectInputA{$ENDIF}; punkOuter: IUnknown): HRESULT; stdcall;
begin
if FDirectInput=nil then
begin
try
TDirectInputCreate(DXLoadLibrary('DInput.dll', 'DirectInputCreateA'))
TDirectInputCreate(DXLoadLibrary('DInput.dll', {$IFDEF UNICODE}'DirectInputCreateW'{$ELSE}'DirectInputCreateA'{$ENDIF}))
(HInstance, DIRECTINPUT_VERSION, FDirectInput, nil);
except
FDirectInput := nil;
/VCL_DELPHIX_D6/DXMapEditProperties.pas
0,0 → 1,368
unit DXMapEditProperties;
//(c)2007 Jaro Benes
//All Rights Reserved
 
{
Complex application for users of unDelphiX as component editor:
 
Supported:
a) set up or change for each chip parameters by drawing or collision brick.
b) integrated into map editor.
 
}
interface
 
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, DXSprite, DXDraws;
 
type
{injected class}
TEdit = class(StdCtrls.TEdit)
private
FButton: TSpeedButton;
FEditorEnabled: Boolean;
FOnBtnClick: TNotifyEvent;
procedure SetGlyph(Pic: TBitmap);
function GetGlyph: TBitmap;
procedure SetNumGlyphs(ANumber: Integer);
function GetNumGlyphs: Integer;
//function GetMinHeight: Integer;
procedure SetEditRect;
function GetAsInteger: Integer;
procedure SetAsInteger(const Value: Integer);
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure WMPaste(var Message: TWMPaste); message WM_PASTE;
procedure WMCut(var Message: TWMCut); message WM_CUT;
function GetAsFloat: Double;
procedure SetAsFloat(const Value: Double);
function GetBtnVisible: Boolean;
procedure SetBtnVisible(const Value: Boolean);
protected
function IsValidChar(Key: Char): Boolean; virtual;
procedure aClick(Sender: TObject); virtual;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Button: TSpeedButton read FButton;
property AsInteger: Integer read GetAsInteger write SetAsInteger;
property AsFloat: Double read GetAsFloat write SetAsFloat;
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
published
property BtnVisible: Boolean read GetBtnVisible write SetBtnVisible default False;
property EditorEnabled: Boolean read FEditorEnabled write FEditorEnabled default True;
property Glyph: TBitmap read GetGlyph write SetGlyph;
property NumGlyphs: Integer read GetNumGlyphs write SetNumGlyphs;
property OnBtnClick: TNotifyEvent read FOnBtnClick write FOnBtnClick;
end;
 
{ TDelphiXMapEditPropertiesForm }
 
TDelphiXMapEditPropertiesForm = class(TForm)
Panel1: TPanel;
LAlpha: TLabel;
LAnimCount: TLabel;
LAnimSpeed: TLabel;
LAnimStart: TLabel;
LAnimPos: TLabel;
EAlpha: TEdit;
EAnimCount: TEdit;
EAnimSpeed: TEdit;
EAnimStart: TEdit;
EAnimPos: TEdit;
Panel2: TPanel;
chbCollisioned: TCheckBox;
chbAnimated: TCheckBox;
rgBlendMode: TRadioGroup;
btnOK: TBitBtn;
btnCancel: TBitBtn;
GroupBox1: TGroupBox;
chbFlip: TCheckBox;
chbMirror: TCheckBox;
procedure btnCancelClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
private
{ Private declarations }
LocalMapType: TMapType;
FCol, FRow: Integer;
public
{ Public declarations }
procedure LoadCellToForm(MapType: TMapType; ACol, ARow: Integer);
function SaveCellFromForm(ACol, ARow: Integer): TMapType;
property Col: Integer read FCol write FCol;
property Row: Integer read FRow write FRow;
end;
 
implementation
 
{$R *.dfm}
 
uses DXMapEdit;
 
{ TEdit }
 
constructor TEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FButton := TSpeedButton.Create(Self);
FButton.Align := alRight;
FButton.Caption := '...';
//FButton.Height := Self.Height-4;
FButton.Width := FButton.Height div 2;
// if csDesigning in ComponentState then
// FButton.Visible := True
// else FButton.Visible := False;
FButton.Parent := Self;
FButton.OnClick := aClick;
FButton.Cursor := crArrow;
ControlStyle := ControlStyle - [csSetCaption];
FButton.Visible := False; {button is not visible as default}
FEditorEnabled := True;
end;
 
destructor TEdit.Destroy;
begin
FButton.Free; FButton := nil;
inherited Destroy;
end;
 
procedure TEdit.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
end;
 
procedure TEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited KeyDown(Key, Shift);
end;
 
procedure TEdit.SetGlyph(Pic: TBitmap);
begin
FButton.Glyph.Assign(Pic);
end;
 
function TEdit.GetGlyph: TBitmap;
begin
Result := FButton.Glyph;
end;
 
procedure TEdit.SetNumGlyphs(ANumber: Integer);
begin
FButton.NumGlyphs := ANumber;
end;
 
function TEdit.GetNumGlyphs: Integer;
begin
Result := FButton.NumGlyphs;
end;
 
procedure TEdit.KeyPress(var Key: Char);
begin
if not IsValidChar(Key) then
begin
Key := #0;
MessageBeep(0)
end;
if Key <> #0 then inherited KeyPress(Key);
end;
 
function TEdit.IsValidChar(Key: Char): Boolean;
begin
Result := True;
end;
 
procedure TEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or ES_MULTILINE or WS_CLIPCHILDREN {and not WS_BORDER};
end;
 
procedure TEdit.CreateWnd;
begin
inherited CreateWnd;
SetEditRect;
end;
 
procedure TEdit.SetEditRect;
var
Loc: TRect;
W: Integer;
begin
W := FButton.Width;
if not FButton.Visible then W := 0;
SendMessage(Handle, EM_GETRECT, 0, LPARAM(@Loc));
Loc.Bottom := ClientHeight + 1; {+1 is workaround for windows paint bug}
Loc.Right := ClientWidth - W - 2;
Loc.Top := 0;
Loc.Left := 0;
SendMessage(Handle, EM_SETRECTNP, 0, LPARAM(@Loc));
SendMessage(Handle, EM_GETRECT, 0, LPARAM(@Loc)); {debug}
end;
 
procedure TEdit.WMSize(var Message: TWMSize);
var
MinHeight: Integer;
begin
inherited;
MinHeight := 5;
{ text edit bug: if size to less than minheight, then edit ctrl does not display the text }
if Height < MinHeight then
Height := MinHeight
else
if Assigned(FButton) and FButton.Visible then
begin
FButton.Width := FButton.Height;
if NewStyleControls and Ctl3D then
FButton.SetBounds(Width - FButton.Width - 5, 0, FButton.Width, Height - 5)
else FButton.SetBounds(Width - FButton.Width, 1, FButton.Width, Height - 1);
SetEditRect;
end
else SetEditRect;
end;
{
function TEdit.GetMinHeight: Integer;
var
DC: HDC;
SaveFont: HFont;
I: Integer;
SysMetrics, Metrics: TTextMetric;
begin
DC := GetDC(0);
GetTextMetrics(DC, SysMetrics);
SaveFont := SelectObject(DC, Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
ReleaseDC(0, DC);
I := SysMetrics.tmHeight;
if I > Metrics.tmHeight then I := Metrics.tmHeight;
Result := Metrics.tmHeight + I div 4 + GetSystemMetrics(SM_CYBORDER) * 4 + 2;
end;
}
procedure TEdit.aClick(Sender: TObject);
begin
if ReadOnly then MessageBeep(0)
else if Assigned(FOnBtnClick) then FOnBtnClick(Self);
end;
 
procedure TEdit.WMPaste(var Message: TWMPaste);
begin
if not FEditorEnabled or ReadOnly then Exit;
inherited;
end;
 
procedure TEdit.WMCut(var Message: TWMPaste);
begin
if not FEditorEnabled or ReadOnly then Exit;
inherited;
end;
 
procedure TEdit.CMExit(var Message: TCMExit);
begin
//FButton.Visible := False;
inherited;
end;
 
procedure TEdit.CMEnter(var Message: TCMGotFocus);
begin
//FButton.Visible := True;
if AutoSelect and not (csLButtonDown in ControlState) then
SelectAll;
inherited;
end;
 
function TEdit.GetAsInteger: Integer;
begin
try
Result := StrToInt(Self.Text);
except
Result := 0;
end;
end;
 
function TEdit.GetBtnVisible: Boolean;
begin
Result := FButton.Visible
end;
 
procedure TEdit.SetAsInteger(const Value: Integer);
begin
Self.Text := IntToStr(Value)
end;
 
procedure TEdit.SetBtnVisible(const Value: Boolean);
begin
FButton.Visible := Value;
end;
 
function TEdit.GetAsFloat: Double;
begin
try
Result := StrToFloat(Self.Text);
except
Result := 0;
end;
end;
 
procedure TEdit.SetAsFloat(const Value: Double);
begin
Self.Text := FloatToStr(Value)
end;
 
{ TDelphiXMapEditPropertiesForm }
 
procedure TDelphiXMapEditPropertiesForm.LoadCellToForm(MapType: TMapType; ACol, ARow: Integer);
begin
LocalMapType := MapType;
Panel2.Caption := Format('Chip (%d, %d)', [ACol, ARow]);
chbCollisioned.Checked := MapType.CollisionChip;
chbAnimated.Checked := MapType.AnimLooped;
EAnimStart.AsInteger := MapType.AnimStart;
EAnimCount.AsInteger := MapType.AnimCount;
EAnimSpeed.AsFloat := MapType.AnimSpeed;
EAnimPos.AsFloat := MapType.AnimPos;
rgBlendMode.ItemIndex := Ord(MapType.Rendered);
EAlpha.AsInteger := MapType.Alpha;
chbFlip.Checked := (rmfFlip in MapType.MirrorFlip);
chbMirror.Checked := (rmfMirror in MapType.MirrorFlip);
end;
 
function TDelphiXMapEditPropertiesForm.SaveCellFromForm(ACol, ARow: Integer): TMapType;
begin
Result := LocalMapType;
Result.CollisionChip := chbCollisioned.Checked;
Result.AnimLooped := chbAnimated.Checked;
Result.AnimStart := EAnimStart.AsInteger;
Result.AnimCount := EAnimCount.AsInteger;
Result.AnimSpeed := EAnimSpeed.AsInteger;
Result.AnimPos := EAnimPos.AsInteger;
Result.Rendered := TRenderType(rgBlendMode.ItemIndex);
Result.Alpha := EAlpha.AsInteger;
Result.MirrorFlip := [];
if chbFlip.Checked then Result.MirrorFlip := Result.MirrorFlip + [rmfFlip];
if chbMirror.Checked then Result.MirrorFlip := Result.MirrorFlip + [rmfMirror];
end;
 
procedure TDelphiXMapEditPropertiesForm.btnOKClick(Sender: TObject);
begin
Tag := 1;
Panel2.Color := {$IFDEF VER6UP}clMoneyGreen{$ELSE}clGreen{$ENDIF};
DelphiXMapEditForm.DXBackgroundSprite.Map[FCol, FRow] := SaveCellFromForm(FCol, FRow);
DelphiXMapEditForm.MapArea.Invalidate;
btnCancelClick(Sender);
Hide;
end;
 
procedure TDelphiXMapEditPropertiesForm.btnCancelClick(Sender: TObject);
begin
Tag := 0;
Panel2.Color := {$IFDEF VER6UP}clSkyBlue{$ELSE}clBlue{$ENDIF};
end;
 
end.
/VCL_DELPHIX_D6/DXPictEdit.dfm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/VCL_DELPHIX_D6/DXPictEdit.pas
1,10 → 1,10
unit DXPictEdit;
 
{$INCLUDE DelphiXcfg.inc}
interface
 
uses
Windows, SysUtils, Classes, Forms, Dialogs, Controls, StdCtrls, ExtCtrls,
ExtDlgs, DIB, Menus, Graphics, Clipbrd;
ExtDlgs, DIB, Menus, Graphics, Clipbrd {$IFDEF VER28UP}, PNGImage{$ENDIF};
 
type
 
/VCL_DELPHIX_D6/DXPlayFm.dfm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/VCL_DELPHIX_D6/DXRender.pas
5,7 → 5,18
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, DirectX;
Windows,
{$IfDef StandardDX}
DirectDraw,
{$ifdef DX7}
Direct3D;
{$endif}
{$IfDef DX9}
Direct3D9, Direct3D, D3DX9, {Direct3D8,} DX7toDX8;
{$EndIf}
{$Else}
DirectX;
{$EndIf}
 
const
DXR_MAXTEXTURE = 4;
16,6 → 27,15
TDXR_Color = DWORD;
TDXR_SurfaceColor = DWORD;
 
{ TDXR_Option }
 
PDXR_Option = ^TDXR_Option;
TDXR_Option = (
DXR_OPTION_VERSION,
DXR_OPTION_MMXENABLE,
DXR_OPTION_RENDERPRIMITIVES
);
 
{ TDXR_ShadeMode }
 
TDXR_ShadeMode = (
34,7 → 54,6
DXR_BLEND_ONE1_SUB_ONE2, // r=c1-c2
DXR_BLEND_ONE2_SUB_ONE1, // r=c2-c1
DXR_BLEND_ONE1_MUL_ONE2, // r=c1*c2
 
DXR_BLEND_SRCALPHA1, // r=c1*a1
DXR_BLEND_SRCALPHA1_ADD_ONE2, // r=c1*a1+c2
DXR_BLEND_ONE2_SUB_SRCALPHA1, // r=c2-c1*a1
41,8 → 60,10
DXR_BLEND_SRCALPHA1_ADD_INVSRCALPHA2, // r=c1*a1+c2*(1-a2)
DXR_BLEND_INVSRCALPHA1_ADD_SRCALPHA2, // r=c1*(1-a1)+c2*a2
// for lighting
DXR_BLEND_DECAL, // r=c1
DXR_BLEND_DECALALPHA, // r=c1 ra=a2
DXR_BLEND_MODULATE, // r=c1*c2 ra=a2
DXR_BLEND_MODULATEALPHA, // r=c1*c2
DXR_BLEND_ADD // r=c1+c2 ra=a2
);
 
50,7 → 71,9
 
TDXR_TextureFilter = (
DXR_TEXTUREFILTER_NEAREST,
DXR_TEXTUREFILTER_LINEAR
DXR_TEXTUREFILTER_LINEAR,
DXR_TEXTUREFILTER_MIPMAP_NEAREST,
DXR_TEXTUREFILTER_MIPMAP_LINEAR
);
 
{ TDXR_TextureAddress }
60,6 → 83,19
DXR_TEXTUREADDRESS_DONOTCLIP // tx=tx ty=ty
);
 
{ TDXR_CmpFunc }
 
TDXR_CmpFunc = (
DXR_CMPFUNC_NEVER,
DXR_CMPFUNC_LESS,
DXR_CMPFUNC_EQUAL,
DXR_CMPFUNC_LESSEQUAL,
DXR_CMPFUNC_GREATER,
DXR_CMPFUNC_NOTEQUAL,
DXR_CMPFUNC_GREATEREQUAL,
DXR_CMPFUNC_ALWAYS
);
 
{ TDXR_ColorType }
 
TDXR_ColorType = (
89,6 → 125,7
Bits: Pointer; // Pointer to pixeldata(x:0 y:0)
Pitch: Integer; // Offset of next scanline
PitchBit: Integer; // Offset of next scanline (Number of bit)
MipmapChain: PDXR_Surface;
case Integer of
0: (
{ Indexed color }
113,6 → 150,7
sx: TDXR_Value; // Screen coordinates
sy: TDXR_Value;
sz: TDXR_Value;
rhw: TDXR_Value; // 1/sz
color: TDXR_Color;
specular: TDXR_Color;
tu, tv: array[0..DXR_MAXTEXTURE-1] of TDXR_Value;
145,6 → 183,7
ColorKeyEnable: Boolean;
ColorKey: TDXR_SurfaceColor;
TextureAddress: TDXR_TextureAddress;
BumpTexture: Integer;
end;
 
{ TDXR_Cull }
167,19 → 206,26
TextureEnable: Boolean;
TextureList: array[0..DXR_MAXTEXTURE-1] of TDXR_TextureLayer;
TextureFilter: TDXR_TextureFilter;
EnableDrawLine: DWORD;
ZBuffer: PDXR_Surface;
ZFunc: TDXR_CmpFunc;
ZWriteEnable: Boolean;
EnableDrawLine: Integer;
end;
 
function dxrGetOption(Option: TDXR_Option): DWORD;
procedure dxrSetOption(Option: TDXR_Option; Value: DWORD);
 
procedure dxrMakeIndexedSurface(var Surface: TDXR_Surface; Width, Height, BitCount: DWORD;
Bits: Pointer; pitch: Integer; idx_index, idx_alpha: DWORD);
procedure dxrMakeRGBSurface(var Surface: TDXR_Surface; Width, Height, BitCount: DWORD;
Bits: Pointer; pitch: Integer; rgb_red, rgb_green, rgb_blue, rgb_alpha: DWORD);
function dxrScanLine(const Surface: TDXR_Surface; y: DWORD): Pointer;
procedure dxrZBufferClear(const Surface: TDXR_Surface);
 
function dxrDDSurfaceLock(DDSurface: IDirectDrawSurface; var Surface: TDXR_Surface): Boolean;
function dxrDDSurfaceLock2(DDSurface: IDirectDrawSurface; var ddsd: TDDSurfaceDesc;
var Surface: TDXR_Surface): Boolean;
procedure dxrDDSurfaceUnLock(DDSurface: IDirectDrawSurface; const Surface: TDXR_Surface);
function dxrDDSurfaceLock(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; var Surface: TDXR_Surface): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function dxrDDSurfaceLock2(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; var ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
var Surface: TDXR_Surface): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
procedure dxrDDSurfaceUnLock(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; const Surface: TDXR_Surface); {$IFDEF VER9UP}inline;{$ENDIF}
 
procedure dxrDefRenderStates(var States: TDXR_RenderStates);
 
220,19 → 266,6
 
PInteger = ^Integer;
 
{ TDXR_CmpFunc }
 
TDXR_CmpFunc = (
DXR_CMPFUNC_NEVER,
DXR_CMPFUNC_LESS,
DXR_CMPFUNC_EQUAL,
DXR_CMPFUNC_LESSEQUAL,
DXR_CMPFUNC_GREATER,
DXR_CMPFUNC_NOTEQUAL,
DXR_CMPFUNC_GREATEREQUAL,
DXR_CMPFUNC_ALWAYS
);
 
{ TDXRMachine }
 
TDXRMachine_TreeType = (
240,6 → 273,9
DXR_TREETYPE_LOADCOLOR, // Load vertex color
DXR_TREETYPE_LOADCONSTCOLOR, // Load constant color
DXR_TREETYPE_LOADTEXTURE, // Load texel
DXR_TREETYPE_LOADBUMPTEXTURE,// Load texel with Bump mapping
// dx := nx + (BumpTexture[nx-1, ny]-BumpTexture[nx+1, ny]);
// dy := ny + (BumpTexture[nx, ny-1]-BumpTexture[nx, ny+1]);
DXR_TREETYPE_LOADDESTPIXEL, // Load dest pixel
DXR_TREETYPE_BLEND // Blend color
);
284,10 → 320,23
DefaultColor: TDXRMachine_Color;
end;
 
TDXRMachine_Reg_RHW = record
Enable: Boolean;
nRHW: TDXRMachine_Int64;
iRHW: TDXRMachine_Int64;
end;
 
TDXRMachine_Reg_Dither = record
Enable: Boolean;
end;
 
TDXRMachine_Reg_ZBuffer = record
Enable: Boolean;
Surface: PDXR_Surface;
CmpFunc: TDXR_CmpFunc;
WriteEnable: Boolean;
end;
 
TDXRMachine_Reg_Axis = record
Axis: TDXRMachine_Axis;
IncEnable: Boolean;
309,6 → 358,10
DXR_TREETYPE_LOADTEXTURE: (
Texture: Integer
);
DXR_TREETYPE_LOADBUMPTEXTURE: (
_Texture: Integer;
BumpTexture: Integer;
);
DXR_TREETYPE_LOADDESTPIXEL: (
);
DXR_TREETYPE_BLEND: (
326,11 → 379,15
FTreeCount: Integer;
FTreeList: array[0..127] of TDXRMachine_Tree;
FMMXUsed: Boolean;
F_ZBuf: Pointer;
F_BiLinearAxis: TDXRMachine_Axis;
F_BiLinearCol1: TDXRMachine_Color;
F_BiLinearCol2: TDXRMachine_Color;
F_BiLinearCol3: TDXRMachine_Color;
F_BiLinearCol4: TDXRMachine_Color;
F_BumpAxis: TDXRMachine_Axis;
F_BumpAxis2: TDXRMachine_Axis;
F_BumpTempCol: DWORD;
FStack: array[0..255] of TDXRMachine_Color;
procedure GenerateCode(var Code: Pointer; Tree: PDXRMachine_Tree);
public
342,16 → 399,19
TextureIndex: array[0..7] of Integer;
TextureIndexCount: Integer;
Dither: TDXRMachine_Reg_Dither;
ZBuffer: TDXRMachine_Reg_ZBuffer;
Axis: TDXRMachine_Reg_Axis;
RHW: TDXRMachine_Reg_RHW;
constructor Create;
destructor Destroy; override;
function CreateTree: PDXRMachine_Tree;
function CreateTree2(Typ: TDXRMachine_TreeType): PDXRMachine_Tree;
function CreateTree_LoadColor(Color: DWORD): PDXRMachine_Tree;
function CreateTree_LoadConstColor(R, G, B, A: Byte): PDXRMachine_Tree;
function CreateTree_LoadTexture(Texture: DWORD): PDXRMachine_Tree;
function CreateTree_Blend(Blend: TDXR_Blend; BlendTree1, BlendTree2: PDXRMachine_Tree): PDXRMachine_Tree;
procedure Initialize;
function CreateTree: PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
function CreateTree2(Typ: TDXRMachine_TreeType): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
function CreateTree_LoadColor(Color: DWORD): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
function CreateTree_LoadConstColor(R, G, B, A: Byte): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
function CreateTree_LoadTexture(Texture: DWORD): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
function CreateTree_LoadBumpTexture(Texture, BumpTexture: DWORD): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
function CreateTree_Blend(Blend: TDXR_Blend; BlendTree1, BlendTree2: PDXRMachine_Tree): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
procedure Initialize; {$IFDEF VER9UP}inline;{$ENDIF}
procedure Compile(Tree: PDXRMachine_Tree);
procedure Run(Count: Integer);
property Compiled: Boolean read FCompiled write FCompiled;
418,10 → 478,42
@@exit:
pop ebx
end;
 
UseMMX := CPUIDFeatures and CPUIDF_MMX<>0;
end;
 
function dxrGetOption(Option: TDXR_Option): DWORD;
begin
Result := 0;
case Option of
DXR_OPTION_VERSION:
begin
Result := 1*100 + 0;
end;
DXR_OPTION_MMXENABLE:
begin
Result := DWORD(LongBool(UseMMX));
end;
DXR_OPTION_RENDERPRIMITIVES:
begin
Result := RenderPrimitiveCount;
end;
end;
end;
 
procedure dxrSetOption(Option: TDXR_Option; Value: DWORD);
begin
case Option of
DXR_OPTION_MMXENABLE:
begin
UseMMX := LongBool(Value) and (CPUIDFeatures and CPUIDF_MMX<>0);
end;
DXR_OPTION_RENDERPRIMITIVES:
begin
RenderPrimitiveCount := Value;
end;
end;
end;
 
function GetBitCount(B: Integer): DWORD;
begin
Result := 31;
538,14 → 630,14
Result := False;
end;
 
function dxrDDSurfaceLock(DDSurface: IDirectDrawSurface; var Surface: TDXR_Surface): Boolean;
function dxrDDSurfaceLock(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; var Surface: TDXR_Surface): Boolean;
var
ddsd: TDDSurfaceDesc;
ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
begin
Result := dxrDDSurfaceLock2(DDSurface, ddsd, Surface);
end;
 
function dxrDDSurfaceLock2(DDSurface: IDirectDrawSurface; var ddsd: TDDSurfaceDesc;
function dxrDDSurfaceLock2(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; var ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
var Surface: TDXR_Surface): Boolean;
const
DDPF_PALETTEINDEXED = DDPF_PALETTEINDEXED1 or DDPF_PALETTEINDEXED2 or
562,12 → 654,12
ddsd.lpSurface, ddsd.lPitch, (1 shl ddsd.ddpfPixelFormat.dwRGBBitCount)-1, 0);
end else
begin
{if ddsd.ddpfPixelFormat.dwFlags and DDPF_ALPHAPIXELS<>0 then
if ddsd.ddpfPixelFormat.dwFlags and DDPF_ALPHAPIXELS<>0 then
begin
dxrMakeRGBSurface(Surface, ddsd.dwWidth, ddsd.dwHeight, ddsd.ddpfPixelFormat.dwRGBBitCount,
ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRBitMask, ddsd.ddpfPixelFormat.dwGBitMask,
ddsd.ddpfPixelFormat.dwBBitMask, ddsd.ddpfPixelFormat.dwRGBAlphaBitMask);
end else}
end else
begin
dxrMakeRGBSurface(Surface, ddsd.dwWidth, ddsd.dwHeight, ddsd.ddpfPixelFormat.dwRGBBitCount,
ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRBitMask, ddsd.ddpfPixelFormat.dwGBitMask,
577,7 → 669,7
end;
end;
 
procedure dxrDDSurfaceUnLock(DDSurface: IDirectDrawSurface; const Surface: TDXR_Surface);
procedure dxrDDSurfaceUnLock(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; const Surface: TDXR_Surface);
begin
DDSurface.Unlock(Surface.Bits);
end;
587,6 → 679,14
Result := Pointer(Integer(Surface.Bits)+Surface.Pitch*Integer(y));
end;
 
procedure dxrZBufferClear(const Surface: TDXR_Surface);
var
i: Integer;
begin
for i:=0 to Surface.Height-1 do
FillChar(dxrScanLine(Surface, i)^, Abs(Surface.Pitch), $FF);
end;
 
{ TDXRMachine }
 
constructor TDXRMachine.Create;
616,7 → 716,9
FillChar(ColorList, SizeOf(ColorList), 0);
FillChar(TextureList, SizeOf(TextureList), 0);
FillChar(Dither, SizeOf(Dither), 0);
FillChar(ZBuffer, SizeOf(ZBuffer), 0);
FillChar(Axis, SizeOf(Axis), 0);
FillChar(RHW, SizeOf(RHW), 0);
end;
 
function TDXRMachine.CreateTree: PDXRMachine_Tree;
656,6 → 758,14
Result.Texture := Texture;
end;
 
function TDXRMachine.CreateTree_LoadBumpTexture(Texture, BumpTexture: DWORD): PDXRMachine_Tree;
begin
Result := CreateTree;
Result.Typ := DXR_TREETYPE_LOADBUMPTEXTURE;
Result.Texture := Texture;
Result.BumpTexture := BumpTexture;
end;
 
function TDXRMachine.CreateTree_Blend(Blend: TDXR_Blend; BlendTree1, BlendTree2: PDXRMachine_Tree): PDXRMachine_Tree;
begin
Result := CreateTree;
710,10 → 820,7
Col2_1 := [chRed, chGreen, chBlue, chAlpha];
Col2_2 := [];
end;
DXR_BLEND_ONE1_ADD_ONE2,
DXR_BLEND_ONE1_SUB_ONE2,
DXR_BLEND_ONE2_SUB_ONE1,
DXR_BLEND_ONE1_MUL_ONE2:
DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE1_SUB_ONE2:
begin
Col1_1 := [chRed, chGreen, chBlue, chAlpha];
Col1_2 := [];
720,6 → 827,13
Col2_1 := [chRed, chGreen, chBlue, chAlpha];
Col2_2 := [];
end;
DXR_BLEND_ONE2_SUB_ONE1, DXR_BLEND_ONE1_MUL_ONE2:
begin
Col1_1 := [chRed, chGreen, chBlue, chAlpha];
Col1_2 := [];
Col2_1 := [chRed, chGreen, chBlue, chAlpha];
Col2_2 := [];
end;
DXR_BLEND_SRCALPHA1:
begin
Col1_1 := [chRed, chGreen, chBlue];
756,6 → 870,13
Col2_2 := [];
end;
 
DXR_BLEND_DECAL:
begin
Col1_1 := [chRed, chGreen, chBlue, chAlpha];
Col1_2 := [];
Col2_1 := [];
Col2_2 := [];
end;
DXR_BLEND_DECALALPHA:
begin
Col1_1 := [chRed, chGreen, chBlue];
765,6 → 886,13
end;
DXR_BLEND_MODULATE:
begin
Col1_1 := [chRed, chGreen, chBlue, chAlpha];
Col1_2 := [];
Col2_1 := [chRed, chGreen, chBlue, chAlpha];
Col2_2 := [];
end;
DXR_BLEND_MODULATEALPHA:
begin
Col1_1 := [chRed, chGreen, chBlue];
Col1_2 := [chAlpha];
Col2_1 := [chRed, chGreen, chBlue];
797,6 → 925,10
begin
// Load texel
end;
DXR_TREETYPE_LOADBUMPTEXTURE:
begin
// Load texel with Bump mapping
end;
DXR_TREETYPE_LOADDESTPIXEL:
begin
// Load dest pixel
816,7 → 948,7
begin
c := Tree.Channels; Tree^.Typ := DXR_TREETYPE_LOADBLACK; Tree.Channels := c;
end else
if (Tree.Blend in [DXR_BLEND_ONE1]) then
if (Tree.Blend in [DXR_BLEND_ONE1, DXR_BLEND_DECAL]) then
begin
c := Tree.Channels; Tree := Tree.BlendTree1; Tree.Channels := c;
end else
824,12 → 956,12
begin
c := Tree.Channels; Tree := Tree.BlendTree2; Tree.Channels := c;
end else
if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE1_SUB_ONE2]) and
if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE2_SUB_ONE1]) and
(Tree.BlendTree2.Typ=DXR_TREETYPE_LOADBLACK) then
begin
c := Tree.Channels; Tree := Tree.BlendTree1; Tree.Channels := c;
end else
if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE1_SUB_ONE2]) and
if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE2_SUB_ONE1]) and
(Tree.BlendTree1.Typ=DXR_TREETYPE_LOADBLACK) then
begin
c := Tree.Channels; Tree := Tree.BlendTree2; Tree.Channels := c;
862,6 → 994,14
Tree.Channels*GetSurfaceChannels(TextureList[Tree.Texture].Surface^);
TextureList[Tree.Texture].Enable := TextureList[Tree.Texture].EnableChannels<>[];
end;
DXR_TREETYPE_LOADBUMPTEXTURE:
begin
// Load texel with Bump mapping
TextureList[Tree.Texture].EnableChannels := TextureList[Tree.Texture].EnableChannels +
Tree.Channels*GetSurfaceChannels(TextureList[Tree.Texture].Surface^);
TextureList[Tree.Texture].Enable := TextureList[Tree.Texture].EnableChannels<>[];
TextureList[Tree.BumpTexture].Enable := True;
end;
DXR_TREETYPE_LOADDESTPIXEL:
begin
// Load dest pixel
900,6 → 1040,9
Inc(TextureIndexCount);
end;
 
ZBuffer.Enable := ZBuffer.Surface<>nil;
 
RHW.Enable := ZBuffer.Enable;
Axis.IncEnable := Dither.Enable;
 
{ Generate X86 code }
1136,6 → 1279,230
end;
end;
 
procedure genInitZBuffer(var Code: Pointer);
var
_Axis: Pointer;
ByteCount, Pitch: DWORD;
Bits, _ZBuf: Pointer;
begin
if not ZBuffer.Enable then Exit;
 
_Axis := @Axis.Axis;
 
ByteCount := ZBuffer.Surface.BitCount div 8;
Pitch := ZBuffer.Surface.Pitch;
Bits := ZBuffer.Surface.Bits;
 
_ZBuf := @F_ZBuf;
 
asm
jmp @@EndCode
@@StartCode:
mov edx,dword ptr [offset _null]{}@@AxisX:
imul edx,$11{} @@ByteCount: // States.ZBuffer.BitCount div 8
mov eax,dword ptr [offset _null]{}@@AxisY:
imul eax,$11111111{} @@Pitch: // States.ZBuffer.pitch
add eax,$11111111{} @@Bits: // States.ZBuffer.Bits
add eax,edx
mov dword ptr [offset _null],eax{}@@_ZBuf:
@@EndCode:
{$I DXRender.inc}
{ @@AxisX }
mov eax,_Axis; add eax,TDXRMachine_Axis.X
mov edx,offset @@AxisX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@AxisY }
mov eax,_Axis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@AxisY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@ByteCount }
mov eax,ByteCount
mov edx,offset @@ByteCount-1
sub edx,offset @@StartCode
mov byte ptr [ecx+edx],al
 
{ @@Pitch }
mov eax,Pitch
mov edx,offset @@Pitch-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Bits }
mov eax,Bits
mov edx,offset @@Bits-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_ZBuf }
mov eax,_ZBuf
mov edx,offset @@_ZBuf-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
 
procedure genZBufferTest(var Code: Pointer);
var
_ZBuf, _RHW: Pointer;
begin
if not ZBuffer.Enable then Exit;
 
_ZBuf := @F_ZBuf;
_RHW := @RHW.nRHW;
 
asm
jmp @@EndCode
@@StartCode:
mov edx,dword ptr [offset _null]{}@@_ZBuf:
mov ebx,dword ptr [offset _null]{}@@_RHW:
@@EndCode:
{$I DXRender.inc}
{ @@_ZBuf }
mov eax,_ZBuf
mov edx,offset @@_ZBuf-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_RHW }
mov eax,_RHW; add eax,4
mov edx,offset @@_RHW-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
 
if ZBuffer.CmpFunc<>DXR_CMPFUNC_ALWAYS then
begin
case ZBuffer.Surface.BitCount of
8: begin
asm
jmp @@EndCode
@@StartCode:
movzx eax,byte ptr [edx]
@@EndCode:
{$I DXRender.inc}
end;
end;
16: begin
asm
jmp @@EndCode
@@StartCode:
movzx eax,word ptr [edx]
@@EndCode:
{$I DXRender.inc}
end;
end;
24: begin
asm
jmp @@EndCode
@@StartCode:
movzx ax,byte ptr [edx+2]
shl eax,16
mov ax,word ptr [edx]
@@EndCode:
{$I DXRender.inc}
end;
end;
32: begin
asm
jmp @@EndCode
@@StartCode:
mov eax,dword ptr [edx]
@@EndCode:
{$I DXRender.inc}
end;
end;
end;
 
asm
jmp @@EndCode
@@StartCode:
cmp eax,ebx
@@EndCode:
{$I DXRender.inc}
end;
genCmpFunc(Code, ZBuffer.CmpFunc, SkipAddress);
end;
 
if ZBuffer.WriteEnable then
begin
case ZBuffer.Surface.BitCount of
8: begin
asm
jmp @@EndCode
@@StartCode:
mov byte ptr [edx],bl
@@EndCode:
{$I DXRender.inc}
end;
end;
16: begin
asm
jmp @@EndCode
@@StartCode:
mov word ptr [edx],bx
@@EndCode:
{$I DXRender.inc}
end;
end;
24: begin
asm
jmp @@EndCode
@@StartCode:
mov word ptr [edx],bx
bswap ebx
mov byte ptr [edx+2],bh
@@EndCode:
{$I DXRender.inc}
end;
end;
32: begin
asm
jmp @@EndCode
@@StartCode:
mov dword ptr [edx],ebx
@@EndCode:
{$I DXRender.inc}
end;
end;
end;
end;
end;
 
procedure genUpdateZBufferAddress(var Code: Pointer);
var
ByteCount: DWORD;
_ZBuf: Pointer;
begin
if not ZBuffer.Enable then Exit;
 
ByteCount := ZBuffer.Surface.BitCount shr 3;
 
_ZBuf := @F_ZBuf;
 
asm
jmp @@EndCode
@@StartCode:
add dword ptr [offset _null],$11{}@@_ZBuf:
@@EndCode:
{$I DXRender.inc}
{ @@_ZBuf }
mov eax,ByteCount
mov edx,offset @@_ZBuf-1
sub edx,offset @@StartCode
mov byte ptr [ecx+edx],al
 
{ @@_ZBuf }
mov eax,_ZBuf
mov edx,offset @@_ZBuf-5
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
 
procedure genReadDestPixel(var Code: Pointer);
begin
case Dest.BitCount of
2623,19 → 2990,19
mov dword ptr [ecx+edx],eax
 
{ @@DestR }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@DestR-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@DestG }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@DestG-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@DestB }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@DestB-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2678,19 → 3045,19
mov dword ptr [ecx+edx],eax
 
{ @@DestR }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@DestR-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@DestG }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@DestG-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@DestB }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@DestB-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2732,19 → 3099,19
mov dword ptr [ecx+edx],eax
 
{ @@DestR }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@DestR-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@DestG }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@DestG-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@DestB }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@DestB-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2761,7 → 3128,7
@@EndCode:
{$I DXRender.inc}
{ @@DestR }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R)
mov edx,offset @@DestR-6
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2772,7 → 3139,7
mov word ptr [ecx+edx],ax
 
{ @@DestG }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G)
mov edx,offset @@DestG-6
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2783,7 → 3150,7
mov word ptr [ecx+edx],ax
 
{ @@DestB }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B)
mov edx,offset @@DestB-6
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2825,7 → 3192,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2854,7 → 3221,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2869,7 → 3236,7
@@EndCode:
{$I DXRender.inc}
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A)
mov edx,offset @@Dest-6
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2912,7 → 3279,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2941,7 → 3308,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2956,7 → 3323,7
@@EndCode:
{$I DXRender.inc}
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R)
mov edx,offset @@Dest-6
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
2998,7 → 3365,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3027,7 → 3394,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3042,7 → 3409,7
@@EndCode:
{$I DXRender.inc}
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G)
mov edx,offset @@Dest-6
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3084,7 → 3451,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3113,7 → 3480,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3128,7 → 3495,7
@@EndCode:
{$I DXRender.inc}
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B)
mov edx,offset @@Dest-6
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3170,7 → 3537,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3199,7 → 3566,7
mov byte ptr [ecx+edx],al
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3214,7 → 3581,7
@@EndCode:
{$I DXRender.inc}
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A)
mov edx,offset @@Dest-6
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3254,7 → 3621,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3283,7 → 3650,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3318,7 → 3685,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3347,7 → 3714,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3382,7 → 3749,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3411,7 → 3778,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3446,7 → 3813,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3475,7 → 3842,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3535,7 → 3902,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3625,7 → 3992,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3715,7 → 4082,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3805,7 → 4172,7
@@EndCode:
{$I DXRender.inc}
{ @@Src }
mov eax,Src; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Src; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Src-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
3889,10 → 4256,13
procedure genEncodeColor2(var Code: Pointer; const Surface: TDXR_Surface; Src: PDXRMachine_Color; EnableChannels: TDXRColorChannels);
begin
if Dither.Enable then
begin
genEncodeColor_with_Dither(Code, Surface, Src, @Axis.Axis, EnableChannels)
else
end else
begin
genEncodeColor(Code, Surface, Src, EnableChannels);
end;
end;
 
procedure genColorKey(var Code: Pointer; const Texture: TDXRMachine_Reg_Texture);
var
4238,25 → 4608,25
@@EndCode:
{$I DXRender.inc}
{ @@_BiLinearCol1 }
mov eax,_BiLinearCol1; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,_BiLinearCol1; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@_BiLinearCol1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol2 }
mov eax,_BiLinearCol2; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,_BiLinearCol2; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@_BiLinearCol2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol3 }
mov eax,_BiLinearCol3; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,_BiLinearCol3; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@_BiLinearCol3-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol4 }
mov eax,_BiLinearCol4; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,_BiLinearCol4; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@_BiLinearCol4-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
4274,7 → 4644,7
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
4314,25 → 4684,25
@@EndCode:
{$I DXRender.inc}
{ @@_BiLinearCol1 }
mov eax,_BiLinearCol1; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,_BiLinearCol1; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@_BiLinearCol1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol2 }
mov eax,_BiLinearCol2; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,_BiLinearCol2; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@_BiLinearCol2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol3 }
mov eax,_BiLinearCol3; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,_BiLinearCol3; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@_BiLinearCol3-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol4 }
mov eax,_BiLinearCol4; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,_BiLinearCol4; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@_BiLinearCol4-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
4350,7 → 4720,7
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
4390,25 → 4760,25
@@EndCode:
{$I DXRender.inc}
{ @@_BiLinearCol1 }
mov eax,_BiLinearCol1; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,_BiLinearCol1; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@_BiLinearCol1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol2 }
mov eax,_BiLinearCol2; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,_BiLinearCol2; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@_BiLinearCol2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol3 }
mov eax,_BiLinearCol3; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,_BiLinearCol3; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@_BiLinearCol3-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol4 }
mov eax,_BiLinearCol4; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,_BiLinearCol4; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@_BiLinearCol4-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
4426,7 → 4796,7
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
4466,25 → 4836,25
@@EndCode:
{$I DXRender.inc}
{ @@_BiLinearCol1 }
mov eax,_BiLinearCol1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,_BiLinearCol1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@_BiLinearCol1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol2 }
mov eax,_BiLinearCol2; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,_BiLinearCol2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@_BiLinearCol2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol3 }
mov eax,_BiLinearCol3; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,_BiLinearCol3; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@_BiLinearCol3-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@_BiLinearCol4 }
mov eax,_BiLinearCol4; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,_BiLinearCol4; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@_BiLinearCol4-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
4502,7 → 4872,7
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
4514,12 → 4884,252
procedure genReadTexture(var Code: Pointer; Dest: PDXRMachine_Color;
const Texture: TDXRMachine_Reg_Texture; EnableChannels: TDXRColorChannels);
begin
if Texture.Filter in [DXR_TEXTUREFILTER_LINEAR] then
if Texture.Filter in [DXR_TEXTUREFILTER_LINEAR, DXR_TEXTUREFILTER_MIPMAP_LINEAR] then
genReadTexture_BiLinear(Code, Dest, Texture, Texture.nAxis, EnableChannels)
else
genReadTexture_Nearest(Code, Dest, Texture, Texture.nAxis, EnableChannels);
end;
 
procedure genReadBumpTexture_Nearest(var Code: Pointer; Dest: PDXRMachine_Color;
const Texture, BumpTexture: TDXRMachine_Reg_Texture; EnableChannels: TDXRColorChannels);
var
_Axis, _Axis2, _iAxis, _BumpAxis, _BumpAxis2: PDXRMachine_Axis;
_BumpTempCol: Pointer;
begin
if EnableChannels=[] then Exit;
 
_Axis := @BumpTexture.nAxis;
_Axis2 := @Texture.nAxis;
_iAxis := @BumpTexture.iAxis;
_BumpAxis := @F_BumpAxis;
_BumpAxis2 := @F_BumpAxis2;
_BumpTempCol := @F_BumpTempCol;
 
{ X }
asm
jmp @@EndCode
@@StartCode:
mov eax,dword ptr [offset _null]{}@@TexX:
mov edx,dword ptr [offset _null]{}@@TexY:
sub eax,dword ptr [offset _null]{}@@iTexX:
mov dword ptr [offset _null],edx{}@@AxisY:
mov dword ptr [offset _null],eax{}@@AxisX:
@@EndCode:
{$I DXRender.inc}
{ @@TexX }
mov eax,_Axis; add eax,TDXRMachine_Axis.X
mov edx,offset @@TexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@TexY }
mov eax,_Axis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@TexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@iTexX }
mov eax,_iAxis; add eax,TDXRMachine_Axis.X
mov edx,offset @@iTexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@AxisX }
mov eax,_BumpAxis; add eax,TDXRMachine_Axis.X
mov edx,offset @@AxisX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@AxisY }
mov eax,_BumpAxis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@AxisY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
genReadSurfacePixel(Code, BumpTexture, _BumpAxis);
 
asm
jmp @@EndCode
@@StartCode:
mov dword ptr [offset _null],eax{}@@BumpTempCol:
@@EndCode:
{$I DXRender.inc}
{ @@BumpTempCol }
mov eax,_BumpTempCol
mov edx,offset @@BumpTempCol-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
 
asm
jmp @@EndCode
@@StartCode:
mov edx,dword ptr [offset _null]{}@@iAxisX:
add dword ptr [offset _null],edx{}@@AxisX:
@@EndCode:
{$I DXRender.inc}
{ @@iAxisX }
mov eax,_iAxis; add eax,TDXRMachine_Axis.X
mov edx,offset @@iAxisX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@AxisX }
mov eax,_BumpAxis; add eax,TDXRMachine_Axis.X
mov edx,offset @@AxisX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
 
genReadSurfacePixel(Code, BumpTexture, _BumpAxis);
 
asm
jmp @@EndCode
@@StartCode:
sub eax,dword ptr [offset _null]{}@@BumpTempCol:
sal eax,16
add eax,dword ptr [offset _null]{}@@TexX:
mov dword ptr [offset _null],eax{}@@AxisX:
@@EndCode:
{$I DXRender.inc}
{ @@BumpTempCol }
mov eax,_BumpTempCol
mov edx,offset @@BumpTempCol-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@TexX }
mov eax,_Axis2; add eax,TDXRMachine_Axis.X
mov edx,offset @@TexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@AxisX }
mov eax,_BumpAxis2; add eax,TDXRMachine_Axis.X
mov edx,offset @@AxisX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
 
{ Y }
asm
jmp @@EndCode
@@StartCode:
mov eax,dword ptr [offset _null]{}@@TexX:
mov edx,dword ptr [offset _null]{}@@TexY:
sub edx,dword ptr [offset _null]{}@@iTexY:
mov dword ptr [offset _null],eax{}@@AxisX:
mov dword ptr [offset _null],edx{}@@AxisY:
@@EndCode:
{$I DXRender.inc}
{ @@TexX }
mov eax,_Axis; add eax,TDXRMachine_Axis.X
mov edx,offset @@TexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@TexY }
mov eax,_Axis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@TexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@iTexY }
mov eax,_iAxis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@iTexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@AxisX }
mov eax,_BumpAxis; add eax,TDXRMachine_Axis.X
mov edx,offset @@AxisX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@AxisY }
mov eax,_BumpAxis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@AxisY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
genReadSurfacePixel(Code, BumpTexture, _BumpTempCol);
 
asm
jmp @@EndCode
@@StartCode:
mov dword ptr [offset _null],eax{}@@BumpTempCol:
@@EndCode:
{$I DXRender.inc}
{ @@BumpTempCol }
mov eax,_BumpTempCol
mov edx,offset @@BumpTempCol-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
 
asm
jmp @@EndCode
@@StartCode:
mov edx,dword ptr [offset _null]{}@@iAxisY:
sal edx,1
sub dword ptr [offset _null],edx{}@@AxisY:
@@EndCode:
{$I DXRender.inc}
{ @@iAxisY }
mov eax,_iAxis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@iAxisY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@AxisY }
mov eax,_BumpAxis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@AxisY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
 
genReadSurfacePixel(Code, BumpTexture, _BumpAxis);
 
asm
jmp @@EndCode
@@StartCode:
sub eax,dword ptr [offset _null]{}@@BumpTempCol:
sal eax,16
add eax,dword ptr [offset _null]{}@@TexY:
mov dword ptr [offset _null],eax{}@@AxisY:
@@EndCode:
{$I DXRender.inc}
{ @@BumpTempCol }
mov eax,_BumpTempCol
mov edx,offset @@BumpTempCol-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@TexX }
mov eax,_Axis2; add eax,TDXRMachine_Axis.Y
mov edx,offset @@TexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@AxisX }
mov eax,_BumpAxis2; add eax,TDXRMachine_Axis.Y
mov edx,offset @@AxisY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
 
genReadTexture_Nearest(Code, Dest, Texture, _BumpAxis2^, EnableChannels);
end;
 
procedure genReadBumpTexture(var Code: Pointer; Dest: PDXRMachine_Color;
const Texture, BumpTexture: TDXRMachine_Reg_Texture; EnableChannels: TDXRColorChannels);
begin
{if Texture.Filter in [DXR_TEXTUREFILTER_LINEAR, DXR_TEXTUREFILTER_MIPMAP_LINEAR] then
genReadBumpTexture_BiLinear(Code, Dest, Texture, BumpTexture, EnableChannels)
else }
genReadBumpTexture_Nearest(Code, Dest, Texture, BumpTexture, EnableChannels);
end;
 
procedure genUpdateAxis(var Code: Pointer);
var
_Axis: Pointer;
4527,6 → 5137,7
if not Axis.IncEnable then Exit;
 
_Axis := @Axis.Axis;
 
asm
jmp @@EndCode
@@StartCode:
4655,6 → 5266,40
nTex := @Texture.nAxis;
iTex := @Texture.iAxis;
 
if UseMMX then
begin
FMMXUsed := True;
asm
jmp @@EndCode
@@StartCode:
db $0F,$6F,$05,$11,$11,$11,$11///movq mm0,qword ptr [$11111111]
@@nTex:
db $0F,$FE,$05,$11,$11,$11,$11///paddd mm0,qword ptr [$11111111]
@@iTex:
db $0F,$7F,$05,$11,$11,$11,$11///movq qword ptr [$11111111],mm0
@@nTex2:
@@EndCode:
{$I DXRender.inc}
{ @@nTex }
mov eax,nTex
mov edx,offset @@nTex-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@nTex2 }
mov eax,nTex
mov edx,offset @@nTex2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@iTex }
mov eax,iTex
mov edx,offset @@iTex-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end else
begin
if Texture.iAxisConstant then
begin
if Texture.iAxis.X<>0 then
4699,7 → 5344,7
end;
end;
end else
begin
//begin
if UseMMX then
begin
FMMXUsed := True;
4734,6 → 5379,7
end;
end else
begin
 
asm
jmp @@EndCode
@@StartCode:
4772,6 → 5418,51
end;
end;
 
procedure genUpdateRHW(var Code: Pointer);
var
nRHW, iRHW: Pointer;
begin
if not RHW.Enable then Exit;
 
nRHW := @RHW.nRHW;
iRHW := @RHW.iRHW;
 
asm
jmp @@EndCode
@@StartCode:
// 64 bit addition
mov eax,dword ptr [offset _null]{}@@iRHW:
mov edx,dword ptr [offset _null]{}@@iRHW2:
add dword ptr [offset _null],eax{}@@nRHW:
adc dword ptr [offset _null],edx{}@@nRHW2:
@@EndCode:
{$I DXRender.inc}
{ @@nRHW }
mov eax,nRHW
mov edx,offset @@nRHW-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@nRHW2 }
mov eax,nRHW; add eax,4
mov edx,offset @@nRHW2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@iRHW }
mov eax,iRHW
mov edx,offset @@iRHW-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@iRHW }
mov eax,iRHW; add eax,4
mov edx,offset @@iRHW2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
 
procedure genBlend(var Code: Pointer; Blend: TDXR_Blend;
Dest, Col1, Col2: PDXRMachine_Color; EnableChannels: TDXRColorChannels;
ConstChannels1, ConstChannels2: TDXRColorChannels);
4928,7 → 5619,7
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
4963,7 → 5654,7
begin
if Dest=Col1 then Exit;
 
if UseMMX then
if UseMMX then //False then//UseMMX then
begin
FMMXUsed := True;
asm
5072,8 → 5763,9
@@StartCode:
db $0F,$6F,$05,$11,$11,$11,$11/// movq mm0,qword ptr [$11111111]
@@Col1:
db $0F,$DD,$05,$11,$11,$11,$11/// paddusw mm0,qword ptr [$11111111]
db $0F,$6F,$0D,$11,$11,$11,$11///movq mm1,qword ptr [$11111111]
@@Col2:
db $0F,$DD,$C1 ///paddusw mm0,mm1
db $0F,$7F,$05,$11,$11,$11,$11/// movq qword ptr [$11111111],mm0
@@Dest:
@@EndCode:
5156,6 → 5848,102
end;
end;
 
procedure genBlend_ONE2_SUB_ONE1(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
ConstChannels1, ConstChannels12: TDXRColorChannels);
begin
if UseMMX then
begin
FMMXUsed := True;
asm
jmp @@EndCode
@@StartCode:
db $0F,$6F,$05,$11,$11,$11,$11///movq mm0,qword ptr [$11111111]
@@Col1:
db $0F,$6F,$0D,$11,$11,$11,$11///movq mm1,qword ptr [$11111111]
@@Col2:
db $0F,$D9,$C8 ///psubusw mm1,mm0
db $0F,$7F,$0D,$11,$11,$11,$11///movq qword ptr [$11111111],mm1
@@Dest:
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end else
begin
{ Red Channel }
if chRed in EnableChannels then
begin
if chRed in ConstChannels1 then
begin
Func_col1_Sub_const2(Code, @Dest.R, @Col2.R, @Col1.R);
end else
if chRed in ConstChannels2 then
begin
Func_const1_Sub_col2(Code, @Dest.R, @Col1.R, @Col2.R);
end else
Func_col1_Sub_col2(Code, @Dest.R, @Col2.R, @Col1.R);
end;
 
{ Green Channel }
if chRed in EnableChannels then
begin
if chRed in ConstChannels1 then
begin
Func_col1_Sub_const2(Code, @Dest.G, @Col2.G, @Col1.G);
end else
if chRed in ConstChannels2 then
begin
Func_const1_Sub_col2(Code, @Dest.G, @Col1.G, @Col2.G);
end else
Func_col1_Sub_col2(Code, @Dest.G, @Col2.G, @Col1.G);
end;
 
{ Blue Channel }
if chRed in EnableChannels then
begin
if chRed in ConstChannels1 then
begin
Func_col1_Sub_const2(Code, @Dest.B, @Col2.B, @Col1.B);
end else
if chRed in ConstChannels2 then
begin
Func_const1_Sub_col2(Code, @Dest.B, @Col1.B, @Col2.B);
end else
Func_col1_Sub_col2(Code, @Dest.B, @Col2.B, @Col1.B);
end;
 
{ Alpha Channel }
if chRed in EnableChannels then
begin
if chRed in ConstChannels1 then
begin
Func_col1_Sub_const2(Code, @Dest.A, @Col2.A, @Col1.A);
end else
if chRed in ConstChannels2 then
begin
Func_const1_Sub_col2(Code, @Dest.A, @Col1.A, @Col2.A);
end else
Func_col1_Sub_col2(Code, @Dest.A, @Col2.A, @Col1.A);
end;
end;
end;
 
procedure genBlend_ONE1_SUB_ONE2(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
ConstChannels1, ConstChannels12: TDXRColorChannels);
begin
5303,19 → 6091,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5333,19 → 6121,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5363,19 → 6151,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5393,19 → 6181,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5424,7 → 6212,7
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5467,13 → 6255,13
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5491,13 → 6279,13
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5542,13 → 6330,13
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5566,13 → 6354,13
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5591,7 → 6379,7
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5611,19 → 6399,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5644,19 → 6432,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5677,19 → 6465,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5710,19 → 6498,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5740,7 → 6528,7
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5761,19 → 6549,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5795,19 → 6583,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5829,19 → 6617,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5863,19 → 6651,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5895,7 → 6683,7
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5953,19 → 6741,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
5987,19 → 6775,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6059,19 → 6847,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6093,19 → 6881,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6126,7 → 6914,7
@@EndCode:
{$I DXRender.inc}
{ @@Col1A }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1A-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6184,19 → 6972,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6218,19 → 7006,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6290,19 → 7078,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6324,19 → 7112,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6422,13 → 7210,13
@@EndCode:
{$I DXRender.inc}
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6436,7 → 7224,7
end;
end;
 
procedure genBlend_MODULATE_RGBONLY(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
procedure genBlend_MODULATE(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
ConstChannels1, ConstChannels12: TDXRColorChannels);
begin
if chRed in EnableChannels then
6450,19 → 7238,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6480,19 → 7268,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6510,19 → 7298,19
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6539,13 → 7327,13
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6553,6 → 7341,166
end;
end;
 
procedure genBlend_MODULATEALPHA(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
ConstChannels1, ConstChannels12: TDXRColorChannels);
begin
if UseMMX then
begin
FMMXUsed := True;
asm
jmp @@EndCode
@@StartCode:
db $0F,$6F,$05,$11,$11,$11,$11///movq mm0,qword ptr [$11111111]
@@Col1:
db $0F,$6F,$0D,$11,$11,$11,$11///movq mm1,qword ptr [$11111111]
@@Col2:
db $0F,$E5,$C1 ///pmulhw mm0,mm1
db $0F,$7F,$05,$11,$11,$11,$11///movq qword ptr [$11111111],mm0
@@Dest:
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,offset Dest
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end else
begin
if chRed in EnableChannels then
begin
asm
jmp @@EndCode
@@StartCode:
mov al,byte ptr [offset offset _null]{}@@Col1:
mul byte ptr [offset offset _null] {}@@Col2:
mov byte ptr [offset offset _null],ah{}@@Dest:
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
 
if chGreen in EnableChannels then
begin
asm
jmp @@EndCode
@@StartCode:
mov al,byte ptr [offset offset _null]{}@@Col1:
mul byte ptr [offset offset _null] {}@@Col2:
mov byte ptr [offset offset _null],ah{}@@Dest:
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
 
if chBlue in EnableChannels then
begin
asm
jmp @@EndCode
@@StartCode:
mov al,byte ptr [offset offset _null]{}@@Col1:
mul byte ptr [offset offset _null] {}@@Col2:
mov byte ptr [offset offset _null],ah{}@@Dest:
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
 
if chAlpha in EnableChannels then
begin
asm
jmp @@EndCode
@@StartCode:
mov al,byte ptr [offset offset _null]{}@@Col1:
mul byte ptr [offset offset _null] {}@@Col2:
mov byte ptr [offset offset _null],ah{}@@Dest:
@@EndCode:
{$I DXRender.inc}
{ @@Col1 }
mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col1-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Col2 }
mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
end;
end;
 
procedure genBlend_ADD(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
ConstChannels1, ConstChannels12: TDXRColorChannels);
begin
6601,13 → 7549,13
@@EndCode:
{$I DXRender.inc}
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6668,13 → 7616,13
@@EndCode:
{$I DXRender.inc}
{ @@Col2 }
mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Col2-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
 
{ @@Dest }
mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
mov edx,offset @@Dest-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
6692,7 → 7640,7
DXR_BLEND_ONE2 : genBlend_ONE1(Code, Dest, Col2, ConstChannels2);
DXR_BLEND_ONE1_ADD_ONE2 : genBlend_ONE1_ADD_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_ONE1_SUB_ONE2 : genBlend_ONE1_SUB_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_ONE2_SUB_ONE1 : genBlend_ONE1_SUB_ONE2(Code, Dest, Col2, Col1, ConstChannels2, ConstChannels1);
DXR_BLEND_ONE2_SUB_ONE1 : genBlend_ONE2_SUB_ONE1(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_ONE1_MUL_ONE2 : genBlend_ONE1_MUL_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_SRCALPHA1 : genBlend_SRCALPHA1(Code, Dest, Col1, ConstChannels1);
DXR_BLEND_SRCALPHA1_ADD_ONE2 : genBlend_SRCALPHA1_ADD_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6699,8 → 7647,10
DXR_BLEND_ONE2_SUB_SRCALPHA1 : genBlend_ONE2_SUB_SRCALPHA1(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_SRCALPHA1_ADD_INVSRCALPHA2: genBlend_SRCALPHA1_ADD_INVSRCALPHA2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_INVSRCALPHA1_ADD_SRCALPHA2: genBlend_INVSRCALPHA1_ADD_SRCALPHA2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_DECAL : genBlend_ONE1(Code, Dest, Col1, ConstChannels1);
DXR_BLEND_DECALALPHA : genBlend_DECALALPHA(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_MODULATE : genBlend_MODULATE_RGBONLY(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_MODULATE : genBlend_MODULATE(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_MODULATEALPHA : genBlend_MODULATEALPHA(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
DXR_BLEND_ADD : genBlend_ADD(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
end;
end;
6738,6 → 7688,10
begin
genReadTexture(Code, Result, TextureList[Tree.Texture], Tree.Channels);
end;
DXR_TREETYPE_LOADBUMPTEXTURE:
begin
genReadBumpTexture(Code, Result, TextureList[Tree.Texture], TextureList[Tree.BumpTexture], Tree.Channels);
end;
DXR_TREETYPE_LOADDESTPIXEL:
begin
genReadDestPixel(Code);
6883,7 → 7837,7
Col: PDXRMachine_Color;
begin
if (Tree.Typ=DXR_TREETYPE_LOADCOLOR) and (not ColorList[Tree.Color].Gouraud) and
(not Dither.Enable) and (Dest.BitCount in [16, 32]) then
(not ZBuffer.Enable) and (not Dither.Enable) and (Dest.BitCount in [16, 32]) then
begin
FCall := Code;
genInitDestAddress(Code);
6972,7 → 7926,9
genUpdateAxis(Code);
genUpdateColor(Code);
genUpdateTextureAxis(Code);
genUpdateRHW(Code);
genUpdateDestAddress(Code);
genUpdateZBufferAddress(Code);
 
asm
jmp @@EndCode
6986,6 → 7942,8
{ ----------- Main ----------- }
MainCode := Code;
 
genZBufferTest(Code);
 
if Tree.Typ=DXR_TREETYPE_LOADCOLOR then
begin
genEncodeColor2(Code, Dest^, @ColorList[Tree.Color].nColor, Tree.Channels);
6992,7 → 7950,7
genWriteDestPixel(Code);
end else
if (Tree.Typ=DXR_TREETYPE_LOADTEXTURE) and (not Dither.Enable) and
(TextureList[Tree.Texture].Filter in [DXR_TEXTUREFILTER_NEAREST]) and
(TextureList[Tree.Texture].Filter in [DXR_TEXTUREFILTER_NEAREST, DXR_TEXTUREFILTER_MIPMAP_NEAREST]) and
(dxrCompareSurface(Dest^, TextureList[Tree.Texture].Surface^)) then
begin
genReadSurfacePixel(Code, TextureList[Tree.Texture], @TextureList[Tree.Texture].nAxis);
7011,6 → 7969,7
FCall := Code;
 
genInitDestAddress(Code);
genInitZBuffer(Code);
 
genCmpFunc(Code, DXR_CMPFUNC_ALWAYS, MainCode);
end;
7075,7 → 8034,10
TexBlend := DXR_BLEND_MODULATE;
Blend := DXR_BLEND_ONE1;
TextureFilter := DXR_TEXTUREFILTER_NEAREST;
EnableDrawLine := $FFFFFFFF;
ZBuffer := nil;
ZFunc := DXR_CMPFUNC_LESSEQUAL;
ZWriteEnable := True;
EnableDrawLine := 0;
end;
 
for i:=0 to DXR_MAXTEXTURE-1 do
7087,6 → 8049,7
ColorKeyEnable := False;
ColorKey := 0;
TextureAddress := DXR_TEXTUREADDRESS_TILE;
BumpTexture := -1;
end;
end;
 
7108,6 → 8071,9
 
function InitGenerator_MakeTree_LoadTexture(Texture: Integer): PDXRMachine_Tree;
begin
if States.TextureList[Texture].BumpTexture>=0 then
Result := DXRMachine.CreateTree_LoadBumpTexture(Texture, States.TextureList[Texture].BumpTexture)
else
Result := DXRMachine.CreateTree_LoadTexture(Texture);
end;
 
7168,11 → 8134,17
var
i: Integer;
Layer: PDXR_TextureLayer;
Mipmap1, Mipmap2, Mipmap3: Integer;
TmpSurface2: PDXR_Surface;
begin
DXRMachine.Initialize;
 
{ Parameter setting }
DXRMachine.Dest := @Dest;
DXRMachine.ZBuffer.Enable := States.ZBuffer<>nil;
DXRMachine.ZBuffer.Surface := States.ZBuffer;
DXRMachine.ZBuffer.CmpFunc := States.ZFunc;
DXRMachine.ZBuffer.WriteEnable := States.ZWriteEnable;
DXRMachine.Dither.Enable := States.DitherEnable;
 
DXRMachine.ColorList[0].Gouraud := States.Shade=DXR_SHADEMODE_GOURAUD;
7192,9 → 8164,34
Surface := Layer.Surface;
Filter := States.TextureFilter;
TextureAddress := Layer.TextureAddress;
 
if (Filter in [DXR_TEXTUREFILTER_MIPMAP_NEAREST, DXR_TEXTUREFILTER_MIPMAP_LINEAR]) and
(Surface.MipmapChain<>nil) then
begin
{ Mipmap }
Mipmap1 := MaxInt;
Mipmap3 := Trunc(Abs(Hypot(Tri[2].sx-Tri[1].sx, Tri[2].sy-Tri[1].sy))*
Abs(Hypot(Tri[1].sx-Tri[0].sx, Tri[1].sy-Tri[0].sy))*
Abs(Hypot(Tri[2].sx-Tri[0].sx, Tri[2].sy-Tri[0].sy))/9);
 
TmpSurface2 := Surface;
 
while TmpSurface2<>nil do
begin
Mipmap2 := TmpSurface2.Width2*TmpSurface2.Height2;
 
if (Abs(Mipmap3-Mipmap2)<Abs(Mipmap3-Mipmap1)) then
begin
Surface := TmpSurface2;
Mipmap1 := Mipmap2;
end;
 
TmpSurface2 := TmpSurface2.MipmapChain;
end;
end;
end;
end;
end;
 
{ Tree making }
DXRMachine.Compile(InitGenerator_MakeTree);
7235,9 → 8232,15
Result := Comp2DWORD(d*TexYFloat[i]);
end;
 
function FloatToRHWFloat(d: Extended): Comp;
begin
Result := d*Int32Value;
end;
 
procedure drawline(x1, x2, y: Integer;
const x_ntex1, x_ntex2: T2DAxis64Array;
const x_nc1, x_nc2: TCol64Array);
const x_nc1, x_nc2: TCol64Array;
const x_nRHW1, x_nRHW2: Comp);
var
i, xcount, xcount2, ofs: Integer;
begin
7311,6 → 8314,17
end;
end;
 
with DXRMachine.RHW do
begin
if Enable then
begin
nRHW := x_nRHW1;
iRHW := (x_nRHW2-x_nRHW1) / xcount;
if ofs<>0 then
nRHW := nRHW + iRHW*ofs;
end;
end;
 
DXRMachine.Run(xcount2);
end;
 
7321,6 → 8335,7
y_nx1, y_nx2, y_ix1, y_ix2: Comp;
y_ntex1, y_ntex2, y_itex1, y_itex2: T2DAxis64Array;
y_nc1, y_nc2, y_ic1, y_ic2: TCol64Array;
y_nRHW1, y_nRHW2, y_iRHW1, y_iRHW2: Comp;
begin
if ycount<=0 then Exit;
if y1=0 then Exit;
7436,15 → 8451,40
end;
end;
 
if DXRMachine.RHW.Enable then
begin
y_nRHW1 := FloatToRHWFloat(p1.rhw);
y_nRHW2 := FloatToRHWFloat(p2.rhw);
y_iRHW1 := FloatToRHWFloat((pt1.rhw-p1.rhw)/y1);
y_iRHW2 := FloatToRHWFloat((pt2.rhw-p2.rhw)/y2);
 
if ofs1<>0 then
begin
y_nRHW1 := y_nRHW1 + y_iRHW1*ofs1;
end;
 
if ofs2<>0 then
begin
y_nRHW2 := y_nRHW2 + y_iRHW2*ofs2;
end;
end else
begin
y_nRHW1 := 0;
y_nRHW2 := 0;
y_iRHW1 := 0;
y_iRHW2 := 0;
end;
 
for y:=starty to starty+ycount-1 do
begin
if States.EnableDrawLine and (1 shl (y and 31))<>0 then
if (States.EnableDrawLine=0) or ((States.EnableDrawLine-1)=y mod 2) then
if PInteger(Integer(@y_nx1)+4)^<PInteger(Integer(@y_nx2)+4)^ then
begin
drawline(
PInteger(Integer(@y_nx1)+4)^, PInteger(Integer(@y_nx2)+4)^, y,
y_ntex1, y_ntex2,
y_nc1, y_nc2
y_nc1, y_nc2,
y_nRHW1, y_nRHW2
);
end else if PInteger(Integer(@y_nx1)+4)^>PInteger(Integer(@y_nx2)+4)^ then
begin
7451,7 → 8491,8
drawline(
PInteger(Integer(@y_nx2)+4)^, PInteger(Integer(@y_nx1)+4)^, y,
y_ntex2, y_ntex1,
y_nc2, y_nc1
y_nc2, y_nc1,
y_nRHW2, y_nRHW1
);
end;
 
7482,8 → 8523,14
y_nc2[i].A := y_nc2[i].A + y_ic2[i].A;
end;
end;
 
if DXRMachine.RHW.Enable then
begin
y_nRHW1 := y_nRHW1 + y_iRHW1;
y_nRHW2 := y_nRHW2 + y_iRHW2;
end;
end;
end;
 
var
p: array[0..2] of PDXR_Vertex;
7521,6 → 8568,9
if (p[0].sx>=Dest.Width) and (p[1].sx>=Dest.Width) and (p[2].sx>=Dest.Width) then Exit;
 
{ Generate code }
if States.TextureFilter in [DXR_TEXTUREFILTER_MIPMAP_NEAREST, DXR_TEXTUREFILTER_MIPMAP_LINEAR] then
DXRMachine.Compiled := False;
 
if not DXRMachine.Compiled then
InitGenerator;
 
7672,25 → 8722,30
end;
end;
 
function MulDiv64(a, b, c: Integer): Integer; assembler;
asm
mov eax, a
imul b
idiv c
//function MulDiv64(a, b, c: Integer): Integer; assembler;
//asm
// mov eax, a
// imul b
// idiv c
//end;
 
function MulDiv64(a, b, c: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
begin
Result := a * b div c;
end;
 
function Max(B1, B2: Integer): Integer;
function Max(B1, B2: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if B1>=B2 then Result := B1 else Result := B2;
end;
 
function Min(B1, B2: Integer): Integer;
function Min(B1, B2: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if B1<=B2 then Result := B1 else Result := B2;
end;
 
function BltClipX(const Dest, Src: TDXR_Surface;
var StartX, EndX, StartSrcX: Integer): Boolean;
var StartX, EndX, StartSrcX: Integer): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if StartX<0 then
begin
7704,7 → 8759,7
end;
 
function BltClipY(const Dest, Src: TDXR_Surface;
var StartY, EndY, StartSrcY: Integer): Boolean;
var StartY, EndY, StartSrcY: Integer): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
begin
if StartY<0 then
begin
7718,7 → 8773,7
end;
 
function BltClip(const Dest, Src: TDXR_Surface;
var StartX, StartY, EndX, EndY, StartSrcX, StartSrcY: Integer): Boolean;
var StartX, StartY, EndX, EndY, StartSrcX, StartSrcY: Integer): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
begin
Result := BltClipX(Dest, Src, StartX, EndX, StartSrcX) and
BltClipY(Dest, Src, StartY, EndY, StartSrcY);
7725,7 → 8780,7
end;
 
function FillClip(const Dest: TDXR_Surface;
var StartX, StartY, EndX, EndY: Integer): Boolean;
var StartX, StartY, EndX, EndY: Integer): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
begin
StartX := Max(StartX, 0);
StartY := Max(StartY, 0);
7738,7 → 8793,7
var
CosinTable: array[0..255] of Double;
 
procedure InitCosinTable;
procedure InitCosinTable; {$IFDEF VER9UP}inline;{$ENDIF}
var
i: Integer;
begin
7746,12 → 8801,12
CosinTable[i] := Cos((i/256)*2*PI);
end;
 
function Cos256(i: Integer): Double;
function Cos256(i: Integer): Double; {$IFDEF VER9UP}inline;{$ENDIF}
begin
Result := CosinTable[i and 255];
end;
 
function Sin256(i: Integer): Double;
function Sin256(i: Integer): Double; {$IFDEF VER9UP}inline;{$ENDIF}
begin
Result := CosinTable[(i+192) and 255];
end;
8072,10 → 9127,23
end;
end;
 
//var TextureSurface, DestSurface: TDXR_Surface; RenderStates: TDXR_RenderStates;
//
//dxrDefRenderStates(RenderStates);
//if dxrDDSurfaceLock(Surf.ISurface, DestSurface then begin
// dxrDDSurfaceLock(TextureSurface as IDirectDrawSurface, TextureSurface);
// RenderStates.TextureList<0>.Surface:=@TextureSurface;
// dxrDrawPrimitive(DestSurface, RenderStates, DXR_PRIMITIVETYPE_TRIANGLELIST, @VertexList, 36);
// dxrDDSurfaceUnlock(SurfaceTexture as IDirectDrawSurface, TextureSurface);
// dxrDDSurfaceUnlock(Surf.ISurface, DestSurface);
//end;
 
initialization
ReadCPUID;
Init;
InitCosinTable;
 
dxrSetOption(DXR_OPTION_MMXENABLE, 1);
finalization
FDXRMachine.Free;
end.
end.
/VCL_DELPHIX_D6/DXSprite.pas
5,7 → 5,13
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, SysUtils, Classes, DXClass, DXDraws, DirectX;
Windows, SysUtils, Classes, Graphics, DXClass, DXDraws,
{$IFDEF VER9UP} Types,{$ENDIF}
{$IFDEF StandardDX}
DirectDraw;
{$ELSE}
DirectX;
{$ENDIF}
 
type
 
17,7 → 23,13
 
TSpriteEngine = class;
 
TSprite = class
TSprite = class;
TCollisionEvent = procedure(Sender: TObject; var Done: Boolean) of object;
TMoveEvent = procedure(Sender: TObject; var MoveCount: Integer) of object;
TDrawEvent = procedure(Sender: TObject) of object;
TGetImage = procedure(Sender: TObject; var Image: TPictureCollectionItem) of object;
 
TSprite = class(TPersistent)
private
FEngine: TSpriteEngine;
FParent: TSprite;
32,16 → 44,31
FZ: Integer;
FWidth: Integer;
FHeight: Integer;
{$IFDEF Ver4Up}
FSelected: Boolean;
FGroupNumber: Integer;
{$ENDIF}
FCaption: string;
FTag: Integer;
 
FDXImageList: TCustomDXImageList;
FDXImage: TPictureCollectionItem;
FDXImageName: string;
 
FOnDraw: TDrawEvent;
FOnMove: TMoveEvent;
FOnCollision: TCollisionEvent;
FOnGetImage: TGetImage;
procedure Add(Sprite: TSprite);
procedure Remove(Sprite: TSprite);
procedure AddDrawList(Sprite: TSprite);
procedure Collision2;
procedure Draw;
procedure Draw; {$IFDEF VER9UP}inline;{$ENDIF}
function GetClientRect: TRect;
function GetCount: Integer;
function GetItem(Index: Integer): TSprite;
function GetWorldX: Double;
function GetWorldY: Double;
function GetWorldX: Double; {$IFDEF VER9UP}inline;{$ENDIF}
function GetWorldY: Double; {$IFDEF VER9UP}inline;{$ENDIF}
procedure SetZ(Value: Integer);
protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); virtual;
49,6 → 76,10
procedure DoMove(MoveCount: Integer); virtual;
function GetBoundsRect: TRect; virtual;
function TestCollision(Sprite: TSprite): Boolean; virtual;
{$IFDEF Ver4Up}
procedure SetGroupNumber(AGroupNumber: Integer); virtual;
procedure SetSelected(ASelected: Boolean); virtual;
{$ENDIF}
public
constructor Create(AParent: TSprite); virtual;
destructor Destroy; override;
56,25 → 87,46
function Collision: Integer;
procedure Dead;
procedure Move(MoveCount: Integer);
procedure ReAnimate(MoveCount: Integer); virtual;
function GetSpriteAt(X, Y: Integer): TSprite;
property BoundsRect: TRect read GetBoundsRect;
property ClientRect: TRect read GetClientRect;
property Collisioned: Boolean read FCollisioned write FCollisioned;
property Count: Integer read GetCount;
property Engine: TSpriteEngine read FEngine;
property Items[Index: Integer]: TSprite read GetItem; default;
property Moved: Boolean read FMoved write FMoved;
property Deaded: Boolean read FDeaded;
property Parent: TSprite read FParent;
property Visible: Boolean read FVisible write FVisible;
property Width: Integer read FWidth write FWidth;
property WorldX: Double read GetWorldX;
property WorldY: Double read GetWorldY;
// Group handling support
{$IFDEF Ver4Up} // if GroupNumber < 0 then no group is assigned
property GroupNumber: Integer read FGroupNumber write SetGroupNumber;
property Selected: Boolean read FSelected write SetSelected;
{$ENDIF}
procedure Assign(Source: TPersistent); override;
published
property Height: Integer read FHeight write FHeight;
property Moved: Boolean read FMoved write FMoved;
property Visible: Boolean read FVisible write FVisible;
property Width: Integer read FWidth write FWidth;
property X: Double read FX write FX;
property Y: Double read FY write FY;
property Z: Integer read FZ write SetZ;
property Collisioned: Boolean read FCollisioned write FCollisioned;
property Tag: Integer read FTag write FTag;
property Caption: string read FCaption write FCaption;
 
property DXImageList: TCustomDXImageList read FDXImageList write FDXImageList;
property DXImageName: string read FDXImageName write FDXImageName;
 
property OnDraw: TDrawEvent read FOnDraw write FOnDraw;
property OnMove: TMoveEvent read FOnMove write FOnMove;
property OnCollision: TCollisionEvent read FOnCollision write FOnCollision;
property OnGetImage: TGetImage read FOnGetImage write FOnGetImage;
end;
 
TSpriteClass = class of TSprite;
 
{ TImageSprite }
 
TImageSprite = class(TSprite)
84,55 → 136,136
FAnimPos: Double;
FAnimSpeed: Double;
FAnimStart: Integer;
FImage: TPictureCollectionItem;
FPixelCheck: Boolean;
FTile: Boolean;
FTransparent: Boolean;
FAngle: Single;
FAlpha: Integer;
FBlendMode: TRenderType;
FCenterX: Double;
FCenterY: Double;
FBlurImageArr: TBlurImageArr;
FBlurImage: Boolean;
FMirrorFlip: TRenderMirrorFlipSet;
FTextureFilter: TD2DTextureFilter;
function GetDrawImageIndex: Integer;
function GetDrawRect: TRect;
function ImageCollisionTest(suf1, suf2: TDirectDrawSurface;
const rect1, rect2: TRect; x1, y1, x2, y2: Integer;
DoPixelCheck: Boolean): Boolean;
function StoreCenterX: Boolean;
function StoreCenterY: Boolean;
function StoreAlpha: Boolean;
procedure SetBlurImage(const Value: Boolean);
procedure SetBlurImageArr(const Value: TBlurImageArr);
function GetImage: TPictureCollectionItem;
procedure SetMirrorFlip(const Value: TRenderMirrorFlipSet);
procedure ReadMirrorFlip(Reader: TReader);
procedure WriteMirrorFlip(Writer: TWriter);
protected
{accessed methods}
procedure ReadAlpha(Reader: TReader);
procedure ReadAngle(Reader: TReader);
procedure ReadAnimCount(Reader: TReader);
procedure ReadAnimLooped(Reader: TReader);
procedure ReadAnimPos(Reader: TReader);
procedure ReadAnimSpeed(Reader: TReader);
procedure ReadAnimStart(Reader: TReader);
procedure ReadBlendMode(Reader: TReader);
procedure ReadCenterX(Reader: TReader);
procedure ReadCenterY(Reader: TReader);
procedure ReadPixelCheck(Reader: TReader);
procedure ReadTile(Reader: TReader);
procedure ReadBlurImage(Reader: TReader);
procedure ReadTextureFilter(Reader: TReader);
procedure WriteAlpha(Writer: TWriter);
procedure WriteAngle(Writer: TWriter);
procedure WriteAnimCount(Writer: TWriter);
procedure WriteAnimLooped(Writer: TWriter);
procedure WriteAnimPos(Writer: TWriter);
procedure WriteAnimSpeed(Writer: TWriter);
procedure WriteAnimStart(Writer: TWriter);
procedure WriteBlendMode(Writer: TWriter);
procedure WriteCenterX(Writer: TWriter);
procedure WriteCenterY(Writer: TWriter);
procedure WritePixelCheck(Writer: TWriter);
procedure WriteTile(Writer: TWriter);
procedure WriteBlurImage(Writer: TWriter);
procedure WriteTextureFilter(Writer: TWriter);
{own store of properties}
procedure DefineProperties(Filer: TFiler); override;
procedure LoadImage; virtual;
procedure DoDraw; override;
procedure DoMove(MoveCount: Integer); override;
function GetBoundsRect: TRect; override;
function TestCollision(Sprite: TSprite): Boolean; override;
procedure SetImage(AImage: TPictureCollectionItem); virtual;
public
constructor Create(AParent: TSprite); override;
property AnimCount: Integer read FAnimCount write FAnimCount;
property AnimLooped: Boolean read FAnimLooped write FAnimLooped;
procedure Assign(Source: TPersistent); override;
procedure ReAnimate(MoveCount: Integer); override;
property Image: TPictureCollectionItem read GetImage write SetImage;
property BlurImageArr: TBlurImageArr read FBlurImageArr write SetBlurImageArr;
{un-published property}
property BlendMode: TRenderType read FBlendMode write FBlendMode default rtDraw;
property Angle: Single read FAngle write FAngle stored StoreAlpha;
property Alpha: Integer read FAlpha write FAlpha default $FF;
property CenterX: Double read FCenterX write FCenterX stored StoreCenterX;
property CenterY: Double read FCenterY write FCenterY stored StoreCenterY;
property AnimCount: Integer read FAnimCount write FAnimCount default 0;
property AnimLooped: Boolean read FAnimLooped write FAnimLooped default False;
property AnimPos: Double read FAnimPos write FAnimPos;
property AnimSpeed: Double read FAnimSpeed write FAnimSpeed;
property AnimStart: Integer read FAnimStart write FAnimStart;
property PixelCheck: Boolean read FPixelCheck write FPixelCheck;
property Image: TPictureCollectionItem read FImage write FImage;
property Tile: Boolean read FTile write FTile;
property AnimStart: Integer read FAnimStart write FAnimStart default 0;
property PixelCheck: Boolean read FPixelCheck write FPixelCheck default False;
property Tile: Boolean read FTile write FTile default False;
property BlurImage: Boolean read FBlurImage write SetBlurImage default False;
property MirrorFlip: TRenderMirrorFlipSet read FMirrorFlip write SetMirrorFlip default [];
property TextureFilter: TD2DTextureFilter read FTextureFilter write FTextureFilter default D2D_POINT;
published
property DXImageList;
property DXImageName;
 
property OnDraw;
property OnMove;
property OnCollision;
property OnGetImage;
end;
 
{ TImageSpriteEx }
 
TImageSpriteEx = class(TImageSprite)
private
FAngle: Integer;
FAlpha: Integer;
protected
procedure DoDraw; override;
function GetBoundsRect: TRect; override;
function TestCollision(Sprite: TSprite): Boolean; override;
public
constructor Create(AParent: TSprite); override;
property Angle: Integer read FAngle write FAngle;
property Alpha: Integer read FAlpha write FAlpha;
end;
end{$IFDEF VER9UP}deprecated{$IFDEF VER14UP} 'Use for backward compatibility only or replace by TImageSprite instead...'{$ENDIF}{$ENDIF};
{ TBackgroundSprite }
 
TBackgroundSprite = class(TSprite)
PMapType = ^TMapType;
TMapType = packed record
MapChip: Integer; {image chip as number}
//ImageName: string[127];
CollisionChip: Boolean; {is collision brick}
CollisionRect: TRect; {dirty vollision area, can be smaller or bigger than silhouette}
Overlap: Integer; {for pulse image, like zoom etc.}
AnimLooped: Boolean; {chip can be live}
AnimStart, AnimCount: Integer;
AnimSpeed, AnimPos: Double; {phase of picture by one map chip}
Rendered: TRenderType; {can be blended}
Alpha: Byte; {and blend level}
Angle: Single;
CenterX, CenterY: Double;
MirrorFlip: TRenderMirrorFlipSet;
TextureFilter: TD2DTextureFilter;
Tag: Integer; {for application use}
end;
 
TBackgroundSprite = class(TImageSprite)
private
FImage: TPictureCollectionItem;
FCollisionMap: Pointer;
FMap: Pointer;
FMapWidth: Integer;
FMapHeight: Integer;
FTile: Boolean;
 
FChipsRect: TRect;
FChipsPatternIndex: Integer;
function GetCollisionMapItem(X, Y: Integer): Boolean;
function GetChip(X, Y: Integer): Integer;
procedure SetChip(X, Y: Integer; Value: Integer);
139,26 → 272,60
procedure SetCollisionMapItem(X, Y: Integer; Value: Boolean);
procedure SetMapHeight(Value: Integer);
procedure SetMapWidth(Value: Integer);
 
function GetCollisionRectItem(X, Y: Integer): TRect;
function GetMap(X, Y: Integer): TMapType;
function GetTagMap(X, Y: Integer): Integer;
procedure SetCollisionRectItem(X, Y: Integer; Value: TRect);
procedure SetMap(X, Y: Integer; Value: TMapType);
procedure SetTagMap(X, Y, Value: Integer);
function GetOverlap(X, Y: Integer): Integer;
procedure SetOverlap(X, Y: Integer; const Value: Integer);
protected
procedure ReadMapData(Stream: TStream);
procedure WriteMapData(Stream: TStream);
procedure DoDraw; override;
function GetBoundsRect: TRect; override;
function TestCollision(Sprite: TSprite): Boolean; override;
procedure SetImage(Img: TPictureCollectionItem); override;
procedure DefineProperties(Filer: TFiler); override;
public
constructor Create(AParent: TSprite); override;
destructor Destroy; override;
procedure ChipsDraw(Image: TPictureCollectionItem; X, Y, PatternIndex: Integer);
procedure SetMapSize(AMapWidth, AMapHeight: Integer);
function IsMapEmpty: Boolean;
property Chips[X, Y: Integer]: Integer read GetChip write SetChip;
property CollisionMap[X, Y: Integer]: Boolean read GetCollisionMapItem write SetCollisionMapItem;
property Image: TPictureCollectionItem read FImage write FImage;
property CollisionRect[X, Y: Integer]: TRect read GetCollisionRectItem write SetCollisionRectItem;
property Overlap[X, Y: Integer]: Integer read GetOverlap write SetOverlap;
property TagMap[X, Y: Integer]: Integer read GetTagMap write SetTagMap;
property Map[X, Y: Integer]: TMapType read GetMap write SetMap;
procedure Assign(Source: TPersistent); override;
property ChipsRect: TRect read FChipsRect write FChipsRect;
property ChipsPatternIndex: Integer read FChipsPatternIndex write FChipsPatternIndex default 0;
{un-published property}
property MapHeight: Integer read FMapHeight write SetMapHeight;
property MapWidth: Integer read FMapWidth write SetMapWidth;
property Tile: Boolean read FTile write FTile;
published
property DXImageList;
property DXImageName;
 
property OnDraw;
property OnMove;
property OnCollision;
property OnGetImage;
end;
 
{ forward class }
 
TCustomDXSpriteEngine = class;
 
{ TSpriteEngine }
 
TSpriteEngine = class(TSprite)
private
FOwner: TCustomDXSpriteEngine;
FAllCount: Integer;
FCollisionCount: Integer;
FCollisionDone: Boolean;
168,7 → 335,18
FDrawCount: Integer;
FSurface: TDirectDrawSurface;
FSurfaceRect: TRect;
procedure SetSurface(Value: TDirectDrawSurface);
{$IFDEF Ver4Up}
FObjectsSelected: Boolean;
FGroupCount: Integer;
FGroups: array of Tlist;
FCurrentSelected: Tlist;
{$ENDIF}
protected
procedure SetSurface(Value: TDirectDrawSurface); virtual;
{$IFDEF Ver4Up}
procedure SetGroupCount(AGroupCount: Integer); virtual;
function GetGroup(Index: Integer): Tlist; virtual;
{$ENDIF}
public
constructor Create(AParent: TSprite); override;
destructor Destroy; override;
178,6 → 356,26
property DrawCount: Integer read FDrawCount;
property Surface: TDirectDrawSurface read FSurface write SetSurface;
property SurfaceRect: TRect read FSurfaceRect;
 
// Extended Sprite Engine
procedure Collisions;
 
// Group handling support
{$IFDEF Ver4Up}
procedure ClearCurrent;
procedure ClearGroup(GroupNumber: Integer);
procedure GroupToCurrent(GroupNumber: Integer; Add: Boolean = False);
procedure CurrentToGroup(GroupNumber: Integer; Add: Boolean = False);
procedure GroupSelect(const Area: TRect; Filter: array of TSpriteClass; Add: Boolean = False); overload;
procedure GroupSelect(const Area: TRect; Add: Boolean = False); overload;
function Select(Point: TPoint; Filter: array of TSpriteClass; Add: Boolean = False): Tsprite; overload;
function Select(Point: TPoint; Add: Boolean = False): Tsprite; overload;
 
property CurrentSelected: TList read fCurrentSelected;
property ObjectsSelected: Boolean read fObjectsSelected;
property Groups[Index: Integer]: Tlist read GetGroup;
property GroupCount: Integer read fGroupCount write SetGroupCount;
{$ENDIF}
end;
 
{ EDXSpriteEngineError }
184,6 → 382,90
 
EDXSpriteEngineError = class(Exception);
 
TSpriteCollection = class;
 
{ TSpriteType }
 
TSpriteType = (stSprite, stImageSprite, stImageSpriteEx, stBackgroundSprite);
 
{ TSpriteCollectionItem }
 
TSpriteCollectionItem = class(THashCollectionItem)
private
FOwner: TPersistent;
FOwnerItem: TSpriteEngine;
FSpriteType: TSpriteType;
FSprite: TSprite;
procedure Finalize;
procedure Initialize;
function GetSpriteCollection: TSpriteCollection;
procedure SetSprite(const Value: TSprite);
procedure SetOnCollision(const Value: TCollisionEvent);
procedure SetOnDraw(const Value: TDrawEvent);
procedure SetOnMove(const Value: TMoveEvent);
function GetSpriteType: TSpriteType;
procedure SetSpriteType(const Value: TSpriteType);
function GetOnCollision: TCollisionEvent;
function GetOnDraw: TDrawEvent;
function GetOnMove: TMoveEvent;
function GetOnGetImage: TGetImage;
procedure SetOnGetImage(const Value: TGetImage);
function GetImageList: TCustomDXImageList;
procedure SetImageList(const Value: TCustomDXImageList);
protected
function GetDisplayName: string; override;
procedure SetDisplayName(const Value: string); override;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
property SpriteCollection: TSpriteCollection read GetSpriteCollection;
function Clone(NewName: string): TSprite;
published
{published property of sprite}
property KindSprite: TSpriteType read GetSpriteType write SetSpriteType;
property ImageList: TCustomDXImageList read GetImageList write SetImageList;
property Sprite: TSprite read FSprite write SetSprite;
{published events of sprite}
property OnDraw: TDrawEvent read GetOnDraw write SetOnDraw;
property OnMove: TMoveEvent read GetOnMove write SetOnMove;
property OnCollision: TCollisionEvent read GetOnCollision write SetOnCollision;
property OnGetImage: TGetImage read GetOnGetImage write SetOnGetImage;
end;
 
{ ESpriteCollectionError }
 
ESpriteCollectionError = class(Exception);
 
{ TSpriteCollection }
 
TSCInitialize = procedure(Owner: TSpriteEngine) of object;
TSCFinalize = procedure(Owner: TSpriteEngine) of object;
 
TSpriteCollection = class(THashCollection)
private
FInitializeFlag: Boolean;
FOwner: TPersistent;
FOwnerItem: TSpriteEngine;
FOnInitialize: TSCInitialize;
FOnFinalize: TSCFinalize;
function GetItem(Index: Integer): TSpriteCollectionItem;
protected
function GetOwner: TPersistent; override;
public
constructor Create(AOwner: TPersistent);
destructor Destroy; override;
function Initialized: Boolean;
function Find(const Name: string): TSpriteCollectionItem;
function Add: TSpriteCollectionItem;
procedure Finalize;
function Initialize(DXSpriteEngine: TSpriteEngine): Boolean;
property Items[Index: Integer]: TSpriteCollectionItem read GetItem; default;
published
property OnInitialize: TSCInitialize read FOnInitialize write FOnInitialize;
property OnFinalize: TSCFinalize read FOnFinalize write FOnFinalize;
end;
 
{ TCustomDXSpriteEngine }
 
TCustomDXSpriteEngine = class(TComponent)
190,31 → 472,67
private
FDXDraw: TCustomDXDraw;
FEngine: TSpriteEngine;
FItems: TSpriteCollection;
procedure DXDrawNotifyEvent(Sender: TCustomDXDraw; NotifyType: TDXDrawNotifyType);
procedure SetDXDraw(Value: TCustomDXDraw);
procedure SetItems(const Value: TSpriteCollection);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
constructor Create(AOnwer: TComponent); override;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Dead;
procedure Draw;
procedure Move(MoveCount: Integer);
procedure Clone(const Amount: Word; const BaseNameOfSprite: string);
function ForEach(PrefixNameOdSprite: string; var Names: TStringList): Boolean;
property DXDraw: TCustomDXDraw read FDXDraw write SetDXDraw;
property Engine: TSpriteEngine read FEngine;
property Items: TSpriteCollection read FItems write SetItems;
end;
 
{ TDXSpriteEngine }
 
TDXSpriteEngine = class(TCustomDXSpriteEngine)
property Items;
published
property DXDraw;
end;
 
function Mod2(i, i2: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
function Mod2f(i: Double; i2: Integer): Double; {$IFDEF VER9UP}inline;{$ENDIF}
function DefaultMapChip(iMapChip: Integer = -1; iCollisionChip: Boolean = False): TMapType; {$IFDEF VER9UP}inline;{$ENDIF}
 
implementation
 
uses DXConsts;
uses DXConsts, TypInfo;
 
const
SSpriteNotFound = 'Sprite not found';
SSpriteDuplicateName = 'Item duplicate name "%s" error';
 
function DefaultMapChip(iMapChip: Integer = -1; iCollisionChip: Boolean = False): TMapType;
begin
FillChar(Result, SizeOf(Result), 0);
with Result do
begin
MapChip := iMapChip; {image chip as number}
CollisionChip := iCollisionChip; {is collision brick}
// CollisionRect: TRect; {dirty vollision area, can be smaller or bigger than silhouette}
// Overlap: Integer; {for pulse image, like zoom etc.}
// AnimLooped: Boolean; {chip can be live}
// AnimStart, AnimCount: Integer;
// AnimSpeed, AnimPos: Double; {phase of picture by one map chip}
Rendered := rtDraw; {can be blended}
Alpha := $FF; {and blend level}
Angle := 0;
CenterX := 0.5;
CenterY := 0.5;
TextureFilter := D2D_POINT;
// Tag: Integer; {for application use}
end;
end;
 
function Mod2(i, i2: Integer): Integer;
begin
Result := i mod i2;
228,7 → 546,7
Result := i
else
begin
Result := i-Trunc(i/i2)*i2;
Result := i - Round(i / i2) * i2;
if Result<0 then
Result := i2+Result;
end;
239,6 → 557,9
constructor TSprite.Create(AParent: TSprite);
begin
inherited Create;
{$IFDEF Ver4Up}
fGroupnumber := -1;
{$ENDIF}
FParent := AParent;
if FParent<>nil then
begin
257,6 → 578,10
 
destructor TSprite.Destroy;
begin
{$IFDEF Ver4Up}
GroupNumber := -1;
Selected := False;
{$ENDIF}
Clear;
if FParent<>nil then
begin
269,6 → 594,33
inherited Destroy;
end;
 
{$IFDEF Ver4Up}
 
procedure TSprite.SetGroupNumber(AGroupNumber: Integer);
begin
if (AGroupNumber <> GroupNumber) and (Engine <> nil) then
begin
if Groupnumber >= 0 then
Engine.Groups[GroupNumber].Remove(self);
if AGroupNumber >= 0 then
Engine.Groups[AGroupNumber].Add(self);
end;
end; {SetGroupNumber}
 
procedure TSprite.SetSelected(ASelected: Boolean);
begin
if (ASelected <> fSelected) and (Engine <> nil) then
begin
fSelected := ASelected;
if Selected then
Engine.CurrentSelected.Add(self)
else
Engine.CurrentSelected.Remove(self);
Engine.fObjectsSelected := Engine.CurrentSelected.count <> 0;
end;
end;
{$ENDIF}
 
procedure TSprite.Add(Sprite: TSprite);
begin
if FList=nil then
303,7 → 655,9
begin
I := (L + H) div 2;
C := TSprite(FDrawList[I]).Z-Sprite.Z;
if C < 0 then L := I + 1 else
if C < 0 then
L := I + 1
else
H := I - 1;
end;
FDrawList.Insert(L, Sprite);
343,17 → 697,20
begin
if Collisioned then
begin
if (Self<>FEngine.FCollisionSprite) and OverlapRect(BoundsRect, FEngine.FCollisionRect) and
FEngine.FCollisionSprite.TestCollision(Self) and TestCollision(FEngine.FCollisionSprite) then
if (Self <> FEngine.FCollisionSprite) and OverlapRect(BoundsRect,
FEngine.FCollisionRect) and FEngine.FCollisionSprite.TestCollision(Self) and
TestCollision(FEngine.FCollisionSprite) then
begin
Inc(FEngine.FCollisionCount);
FEngine.FCollisionSprite.DoCollision(Self, FEngine.FCollisionDone);
if (not FEngine.FCollisionSprite.Collisioned) or (FEngine.FCollisionSprite.FDeaded) then
if (not FEngine.FCollisionSprite.Collisioned) or
(FEngine.FCollisionSprite.FDeaded) then
begin
FEngine.FCollisionDone := True;
end;
end;
if FEngine.FCollisionDone then Exit;
if FEngine.FCollisionDone then
Exit;
for i:=0 to Count-1 do
Items[i].Collision2;
end;
368,16 → 725,22
end;
end;
 
procedure TSprite.DoMove;
procedure TSprite.DoMove(MoveCount: Integer);
begin
if AsSigned(FOnMove) then
FOnMove(Self, MoveCount);
end;
 
procedure TSprite.DoDraw;
begin
if AsSigned(FOnDraw) then
FOnDraw(Self);
end;
 
procedure TSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if AsSigned(FOnCollision) then
FOnCollision(Sprite, Done);
end;
 
function TSprite.TestCollision(Sprite: TSprite): Boolean;
391,7 → 754,7
begin
if FMoved then
begin
DoMove(MoveCount);
DoMove(MoveCount); ReAnimate(MoveCount);
for i:=0 to Count-1 do
Items[i].Move(MoveCount);
end;
415,10 → 778,12
if FDrawList<>nil then
begin
for i:=0 to FDrawList.Count-1 do
begin
TSprite(FDrawList[i]).Draw;
end;
end;
end;
end;
 
function TSprite.GetSpriteAt(X, Y: Integer): TSprite;
 
427,7 → 792,8
i: Integer;
X2, Y2: Double;
begin
if Sprite.Visible and PointInRect(Point(Round(X), Round(Y)), Bounds(Round(Sprite.X), Round(Sprite.Y), Sprite.Width, Sprite.Width)) then
if Sprite.Visible and PointInRect(Point(Round(X), Round(Y)),
Bounds(Round(Sprite.X), Round(Sprite.Y), Sprite.Width, Sprite.Height)) then //corrected by Sergey
begin
if (Result=nil) or (Sprite.Z>Result.Z) then
Result := Sprite;
453,7 → 819,7
 
function TSprite.GetBoundsRect: TRect;
begin
Result := Bounds(Trunc(WorldX), Trunc(WorldY), Width, Height);
Result := Bounds(Round(WorldX), Round(WorldY), Width, Height);
end;
 
function TSprite.GetClientRect: TRect;
506,6 → 872,41
end;
end;
 
procedure TSprite.Assign(Source: TPersistent);
begin
if Source is TSprite then
begin
FCollisioned := TSprite(Source).FCollisioned;
FMoved := TSprite(Source).FMoved;
FVisible := TSprite(Source).FVisible;
FHeight := TSprite(Source).FHeight;
FWidth := TSprite(Source).FWidth;
FX := TSprite(Source).FX;
FY := TSprite(Source).FY;
FZ := TSprite(Source).FZ;
{$IFDEF Ver4Up}
FSelected := TSprite(Source).FSelected;
FGroupNumber := TSprite(Source).FGroupNumber;
{$ENDIF}
{copy image base - when exists}
FDXImage := TSprite(Source).FDXImage;
FDXImageName := TSprite(Source).FDXImageName;
FDXImageList := TSprite(Source).FDXImageList;
{events}
FOnDraw := TSprite(Source).FOnDraw;
FOnMove := TSprite(Source).FOnMove;
FOnCollision := TSprite(Source).FOnCollision;
FOnGetImage := TSprite(Source).FOnGetImage;
end
else
inherited;
end;
 
procedure TSprite.ReAnimate(MoveCount: Integer);
begin
 
end;
 
{ TImageSprite }
 
constructor TImageSprite.Create(AParent: TSprite);
512,14 → 913,39
begin
inherited Create(AParent);
FTransparent := True;
FAlpha := 255;
FAngle := 0;
FBlendMode := rtDraw;
FCenterX := 0.5;
FCenterY := 0.5;
FBlurImage := False;
FillChar(FBlurImageArr, SizeOf(FBlurImageArr), 0);
FTextureFilter := D2D_POINT;
end;
 
procedure TImageSprite.SetImage(AImage: TPictureCollectionItem);
begin
FDXImage := AImage;
FDXImageName := '';
if AImage <> nil then
begin
Width := AImage.Width;
Height := AImage.Height;
FDXImageName := FDXImage.Name;
end
else
begin
Width := 0;
Height := 0;
end;
end; {SetImage}
 
function TImageSprite.GetBoundsRect: TRect;
var
dx, dy: Integer;
begin
dx := Trunc(WorldX);
dy := Trunc(WorldY);
dx := Round(WorldX);
dy := Round(WorldY);
if FTile then
begin
dx := Mod2(dx, FEngine.SurfaceRect.Right+Width);
537,32 → 963,17
 
procedure TImageSprite.DoMove(MoveCount: Integer);
begin
FAnimPos := FAnimPos + FAnimSpeed*MoveCount;
 
if FAnimLooped then
begin
if FAnimCount>0 then
FAnimPos := Mod2f(FAnimPos, FAnimCount)
if AsSigned(FOnMove) then
FOnMove(Self, MoveCount)
else
FAnimPos := 0;
end else
begin
if FAnimPos>=FAnimCount then
begin
FAnimPos := FAnimCount-1;
FAnimSpeed := 0;
ReAnimate(MoveCount);
end;
if FAnimPos<0 then
begin
FAnimPos := 0;
FAnimSpeed := 0;
end;
end;
end;
 
function TImageSprite.GetDrawImageIndex: Integer;
begin
Result := FAnimStart+Trunc(FAnimPos);
Result := FAnimStart + Trunc(FAnimPos); //solve 1.07f to Round()
end;
 
function TImageSprite.GetDrawRect: TRect;
571,19 → 982,52
OffsetRect(Result, (Width-Image.Width) div 2, (Height-Image.Height) div 2);
end;
 
procedure TImageSprite.LoadImage;
var
vImage: TPictureCollectionItem;
begin
if Image = nil then
if AsSigned(FOnGetImage) then
begin
vImage := nil;
FOnGetImage(Self, vImage);
if vImage <> Image then
Image := vImage;
end
else
if FDXImageName <> '' then
if Assigned(FDXImageList) then
begin
Image := FDXImageList.Items.Find(FDXImageName);
end;
end;
 
procedure TImageSprite.DoDraw;
var
ImageIndex: Integer;
r: TRect;
begin
ImageIndex := GetDrawImageIndex;
r := GetDrawRect;
Image.Draw(FEngine.Surface, r.Left, r.Top, ImageIndex);
LoadImage;
if Image = nil then
Exit;
if AsSigned(FOnDraw) then {owner draw called here}
FOnDraw(Self)
else {when is not owner draw then go here}
begin
r := Bounds(Round(WorldX), Round(WorldY), Width, Height);
{New function implemented}
if Assigned(FEngine.FOwner) then
DXDraws.DXDraw_Paint(FEngine.FOwner.FDXDraw, Image, r, GetDrawImageIndex,
FBlurImageArr, FBlurImage, FTextureFilter, FMirrorFlip, FBlendMode, FAngle,
FAlpha, FCenterX, FCenterY);
end;
end;
 
function ImageCollisionTest(suf1, suf2: TDirectDrawSurface; const rect1, rect2: TRect;
x1,y1,x2,y2: Integer; DoPixelCheck: Boolean): Boolean;
{$WARNINGS OFF}
{$HINTS OFF}
 
function TImageSprite.ImageCollisionTest(suf1, suf2: TDirectDrawSurface;
const rect1, rect2: TRect; x1, y1, x2, y2: Integer; DoPixelCheck: Boolean): Boolean;
 
function ClipRect(var DestRect: TRect; const DestRect2: TRect): Boolean;
begin
with DestRect do
599,31 → 1043,42
 
type
PRGB = ^TRGB;
 
TRGB = packed record
R, G, B: Byte;
R, G, B: byte;
end;
var
ddsd1, ddsd2: TDDSurfaceDesc;
r1, r2: TRect;
ddsd1, ddsd2: {$IFDEF D3D_deprecated}TDDSURFACEDESC{$ELSE}TDDSurfaceDesc2{$ENDIF};
r1, r2, r1a, r2a: TRect;
tc1, tc2: DWORD;
x, y, w, h: Integer;
P1, P2: Pointer;
begin
r1 := rect1;
with rect2 do r2 := Bounds(x2-x1, y2-y1, Right-Left, Bottom-Top);
with rect1 do
r1 := Bounds(0, 0, Right - Left, Bottom - Top);
r1a := r1;
with rect2 do
r2 := Bounds(0, 0, Right - Left, Bottom - Top);
r2a := r2;
 
with rect2 do
r2 := Bounds(x2 - x1, y2 - y1, Right - Left, Bottom - Top);
 
Result := OverlapRect(r1, r2);
 
if (suf1=nil) or (suf2=nil) then Exit;
if (suf1 = nil) or (suf2 = nil) then
Exit;
 
if DoPixelCheck and Result then
begin
{ Get Overlapping rectangle }
with r1 do r1 := Bounds(Max(x2-x1, 0), Max(y2-y1, 0), Right-Left, Bottom-Top);
with r2 do r2 := Bounds(Max(x1-x2, 0), Max(y1-y2, 0), Right-Left, Bottom-Top);
with r1 do
r1 := Bounds(Max(x2 - x1, 0), Max(y2 - y1, 0), Right - Left, Bottom - Top);
with r2 do
r2 := Bounds(Max(x1 - x2, 0), Max(y1 - y2, 0), Right - Left, Bottom - Top);
 
ClipRect(r1, rect1);
ClipRect(r2, rect2);
ClipRect(r1, r1a);
ClipRect(r2, r2a);
 
w := Min(r1.Right-r1.Left, r2.Right-r2.Left);
h := Min(r1.Bottom-r1.Top, r2.Bottom-r2.Top);
633,6 → 1088,18
{ Pixel check !!! }
ddsd1.dwSize := SizeOf(ddsd1);
 
with rect1 do
r1 := Bounds(r1.Left + left, r1.Top + top, w, h);
with rect2 do
r2 := Bounds(r2.Left + left, r2.Top + top, w, h);
 
if suf1 = suf2 then
begin
suf2.Lock(r2, ddsd2);
suf2.unlock;
end;
 
if suf1.Lock(r1, ddsd1) then
begin
try
640,8 → 1107,10
if (suf1=suf2) or suf2.Lock(r2, ddsd2) then
begin
try
if suf1=suf2 then ddsd2 := ddsd1;
if ddsd1.ddpfPixelFormat.dwRGBBitCount<>ddsd2.ddpfPixelFormat.dwRGBBitCount then Exit;
{this line out: don't test pixel but rect only, its wrong}
{if suf1=suf2 then ddsd2 := ddsd1;}
if ddsd1.ddpfPixelFormat.dwRGBBitCount <> ddsd2.ddpfPixelFormat.dwRGBBitCount then
Exit;
{ Get transparent color }
tc1 := ddsd1.ddckCKSrcBlt.dwColorSpaceLowValue;
648,7 → 1117,8
tc2 := ddsd2.ddckCKSrcBlt.dwColorSpaceLowValue;
 
case ddsd1.ddpfPixelFormat.dwRGBBitCount of
8 : begin
8:
begin
for y:=0 to h-1 do
begin
P1 := Pointer(Integer(ddsd1.lpSurface)+y*ddsd1.lPitch);
655,13 → 1125,15
P2 := Pointer(Integer(ddsd2.lpSurface)+y*ddsd2.lPitch);
for x:=0 to w-1 do
begin
if (PByte(P1)^<>tc1) and (PByte(P2)^<>tc2) then Exit;
if (PByte(P1)^ <> tc1) and (PByte(P2)^ <> tc2) then
Exit;
Inc(PByte(P1));
Inc(PByte(P2));
end;
end;
end;
16: begin
16:
begin
for y:=0 to h-1 do
begin
P1 := Pointer(Integer(ddsd1.lpSurface)+y*ddsd1.lPitch);
668,13 → 1140,15
P2 := Pointer(Integer(ddsd2.lpSurface)+y*ddsd2.lPitch);
for x:=0 to w-1 do
begin
if (PWord(P1)^<>tc1) and (PWord(P2)^<>tc2) then Exit;
if (PWord(P1)^ <> tc1) and (PWord(P2)^ <> tc2) then
Exit;
Inc(PWord(P1));
Inc(PWord(P2));
end;
end;
end;
24: begin
24:
begin
for y:=0 to h-1 do
begin
P1 := Pointer(Integer(ddsd1.lpSurface)+y*ddsd1.lPitch);
681,14 → 1155,19
P2 := Pointer(Integer(ddsd2.lpSurface)+y*ddsd2.lPitch);
for x:=0 to w-1 do
begin
if ((PRGB(P1)^.R shl 16) or (PRGB(P1)^.G shl 8) or PRGB(P1)^.B<>tc1) and
((PRGB(P2)^.R shl 16) or (PRGB(P2)^.G shl 8) or PRGB(P2)^.B<>tc2) then Exit;
with PRGB(P1)^ do
if (R shl 16) or (G shl 8) or B <> tc1 then
Exit;
with PRGB(P2)^ do
if (R shl 16) or (G shl 8) or B <> tc2 then
Exit;
Inc(PRGB(P1));
Inc(PRGB(P2));
end;
end;
end;
32: begin
32:
begin
for y:=0 to h-1 do
begin
P1 := Pointer(Integer(ddsd1.lpSurface)+y*ddsd1.lPitch);
695,7 → 1174,8
P2 := Pointer(Integer(ddsd2.lpSurface)+y*ddsd2.lPitch);
for x:=0 to w-1 do
begin
if (PDWORD(P1)^ and $FFFFFF<>tc1) and (PDWORD(P2)^ and $FFFFFF<>tc2) then Exit;
if (PDWORD(P1)^ <> tc1) and (PDWORD(P2)^ <> tc2) then
Exit;
Inc(PDWORD(P1));
Inc(PDWORD(P2));
end;
703,7 → 1183,8
end;
end;
finally
if suf1<>suf2 then suf2.UnLock;
if suf1 <> suf2 then
suf2.UnLock;
end;
end;
finally
715,85 → 1196,351
end;
end;
 
{$HINTS ON}
{$WARNINGS ON}
 
function TImageSprite.TestCollision(Sprite: TSprite): Boolean;
var
img1, img2: Integer;
b1, b2: TRect;
box1, box2: TRect;
begin
if (Sprite is TImageSprite) and FPixelCheck then
if (Sprite is TImageSprite) then
if FPixelCheck then
begin
b1 := GetDrawRect;
b2 := TImageSprite(Sprite).GetDrawRect;
box1 := GetDrawRect;
box2 := TImageSprite(Sprite).GetDrawRect;
 
img1 := GetDrawImageIndex;
img2 := TImageSprite(Sprite).GetDrawImageIndex;
 
Result := ImageCollisionTest(Image.PatternSurfaces[img1], TImageSprite(Sprite).Image.PatternSurfaces[img2],
Image.PatternRects[img1], TImageSprite(Sprite).Image.PatternRects[img2],
b1.Left, b1.Top, b2.Left, b2.Top, True);
end else
Result := ImageCollisionTest(Image.PatternSurfaces[img1],
TImageSprite(Sprite).Image.PatternSurfaces[img2], Image.PatternRects[img1],
TImageSprite(Sprite).Image.PatternRects[img2], box1.Left, box1.Top,
box2.Left, box2.Top, True);
end
else
Result := OverlapRect(Bounds(Round(Sprite.WorldX), Round(Sprite.WorldY),
Sprite.Width, Sprite.Height), Bounds(Round(WorldX), Round(WorldY), Width, Height))
else
Result := inherited TestCollision(Sprite);
end;
 
{ TImageSpriteEx }
procedure TImageSprite.Assign(Source: TPersistent);
begin
if Source is TImageSprite then begin
FCenterX := TImageSprite(Source).FCenterX;
FCenterY := TImageSprite(Source).FCenterY;
FAnimCount := TImageSprite(Source).FAnimCount;
FAnimLooped := TImageSprite(Source).FAnimLooped;
FAnimPos := TImageSprite(Source).FAnimPos;
FAnimSpeed := TImageSprite(Source).FAnimSpeed;
FAnimStart := TImageSprite(Source).FAnimStart;
FDXImage := TImageSprite(Source).FDXImage;
FPixelCheck := TImageSprite(Source).FPixelCheck;
FTile := TImageSprite(Source).FTile;
FTransparent := TImageSprite(Source).FTransparent;
FAngle := TImageSprite(Source).FAngle;
FAlpha := TImageSprite(Source).FAlpha;
FBlendMode := TImageSprite(Source).FBlendMode;
FBlurImage := TImageSprite(Source).FBlurImage;
end;
inherited;
end;
 
constructor TImageSpriteEx.Create(AParent: TSprite);
procedure TImageSprite.ReAnimate(MoveCount: Integer);
var
I: Integer;
begin
inherited Create(AParent);
FAlpha := 255;
FAnimPos := FAnimPos + FAnimSpeed * MoveCount;
 
if FAnimLooped then
begin
if FAnimCount > 0 then
FAnimPos := Mod2f(FAnimPos, FAnimCount)
else
FAnimPos := 0;
end
else
begin
if Round(FAnimPos) >= FAnimCount then
begin
FAnimPos := FAnimCount - 1;
FAnimSpeed := 0;
end;
if FAnimPos < 0 then
begin
FAnimPos := 0;
FAnimSpeed := 0;
end;
end;
if FBlurImage then
begin
{ale jen jsou-li jine souradnice}
if (FBlurImageArr[High(FBlurImageArr)].eX <> Round(WorldX)) or
(FBlurImageArr[High(FBlurImageArr)].eY <> Round(WorldY)) then
begin
for i := Low(FBlurImageArr) + 1 to High(FBlurImageArr) do
begin
FBlurImageArr[i - 1] := FBlurImageArr[i];
{adjust the blur intensity}
FBlurImageArr[i - 1].eIntensity := Round(FAlpha / (High(FBlurImageArr) + 1)) * (i - 1);
end;
with FBlurImageArr[High(FBlurImageArr)] do
begin
eX := Round(WorldX);
eY := Round(WorldY);
ePatternIndex := GetDrawImageIndex;
eIntensity := Round(FAlpha / (High(FBlurImageArr) + 1)) * High(FBlurImageArr);
eBlendMode := FBlendMode;
eActive := True;
end;
end;
end;
end;
 
procedure TImageSpriteEx.DoDraw;
function TImageSprite.StoreCenterX: Boolean;
begin
Result := FCenterX <> 0.5;
end;
 
function TImageSprite.StoreCenterY: Boolean;
begin
Result := FCenterY <> 0.5;
end;
 
function TImageSprite.StoreAlpha: Boolean;
begin
Result := FAlpha <> 0.0;
end;
 
procedure TImageSprite.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineProperty('BlendMode', ReadBlendMode, WriteBlendMode, FBlendMode <> rtDraw);
Filer.DefineProperty('Angle', ReadAngle, WriteAngle, FAngle <> 0);
Filer.DefineProperty('CenterX', ReadCenterX, WriteCenterX, FCenterX <> 0.5);
Filer.DefineProperty('CenterY', ReadCenterY, WriteCenterY, FCenterY <> 0.5);
Filer.DefineProperty('Alpha', ReadAlpha, WriteAlpha, FAlpha <> $FF);
Filer.DefineProperty('AnimCount', ReadAnimCount, WriteAnimCount, FAnimCount <> 0);
Filer.DefineProperty('AnimLooped', ReadAnimLooped, WriteAnimLooped, FAnimLooped);
Filer.DefineProperty('AnimPos', ReadAnimPos, WriteAnimPos, FAnimPos <> 0);
Filer.DefineProperty('AnimSpeed', ReadAnimSpeed, WriteAnimSpeed, FAnimSpeed <> 0);
Filer.DefineProperty('AnimStart', ReadAnimStart, WriteAnimStart, True);
Filer.DefineProperty('PixelCheck', ReadPixelCheck, WritePixelCheck, FPixelCheck);
Filer.DefineProperty('Tile', ReadTile, WriteTile, FTile);
Filer.DefineProperty('BlurImage', ReadBlurImage, WriteBlurImage, FBlurImage);
Filer.DefineProperty('MirrorFlip', ReadMirrorFlip, WriteMirrorFlip, FMirrorFlip <> []);
Filer.DefineProperty('TextureFilter', ReadTextureFilter, WriteTextureFilter, FTextureFilter <> D2D_POINT);
end;
 
procedure TImageSprite.WriteMirrorFlip(Writer: TWriter);
var
r: TRect;
q: TRenderMirrorFlip;
s, ss: string;
// I: Integer;
//PI: PPropInfo;
begin
r := Bounds(Trunc(WorldX), Trunc(WorldY), Width, Height);
// PI := GetPropInfo(Self,'MirrorFlip');
// I := Integer(FMirrorFlip);
s := '[]'; ss := '';
for q := Low(TRenderMirrorFlip) to High(TRenderMirrorFlip) do
if q in FMirrorFlip then
ss := ss + GetEnumName(TypeInfo(TRenderMirrorFlip), Ord(q)) + ', ';
if ss <> '' then
s := '[' + Copy(ss, 1, Length(ss) - 2) + ']';
Writer.WriteString(s);
//--- Writer.WriteString(SetToString(PI, GetOrdProp(Self, PI), True));
end;
 
if FAngle and $FF=0 then
procedure TImageSprite.ReadMirrorFlip(Reader: TReader);
var
q: TRenderMirrorFlip;
qq: TRenderMirrorFlipSet;
s {, ss}: string;
// PI: PPropInfo;
begin
if FAlpha<255 then
// PI := GetPropInfo(Self,'MirrorFlip');
// SetOrdProp(Self,PI,StringToSet(PI, Reader.ReadString));
qq := [];
s := Reader.ReadString;
for q := Low(TRenderMirrorFlip) to High(TRenderMirrorFlip) do
if Pos(GetEnumName(TypeInfo(TRenderMirrorFlip), Ord(q)), s) <> 0 then
qq := qq + [q];
FMirrorFlip := qq;
end;
 
procedure TImageSprite.ReadAnimLooped(Reader: TReader);
begin
Image.DrawAlpha(FEngine.FSurface, r, GetDrawImageIndex, FAlpha)
end else
FAnimLooped := Reader.ReadBoolean;
end;
 
procedure TImageSprite.WriteAnimLooped(Writer: TWriter);
begin
Image.StretchDraw(FEngine.FSurface, r, GetDrawImageIndex);
Writer.WriteBoolean(FAnimLooped);
end;
end else
 
procedure TImageSprite.ReadAnimPos(Reader: TReader);
begin
if FAlpha<255 then
FAnimPos := Reader.ReadFloat;
end;
 
procedure TImageSprite.WriteAnimPos(Writer: TWriter);
begin
Image.DrawRotateAlpha(FEngine.FSurface, (r.Left+r.Right) div 2, (r.Top+r.Bottom) div 2,
Width, Height, GetDrawImageIndex, 0.5, 0.5, FAngle, FAlpha)
end else
Writer.WriteFloat(FAnimPos);
end;
 
procedure TImageSprite.ReadAnimSpeed(Reader: TReader);
begin
Image.DrawRotate(FEngine.FSurface, (r.Left+r.Right) div 2, (r.Top+r.Bottom) div 2,
Width, Height, GetDrawImageIndex, 0.5, 0.5, FAngle)
FAnimSpeed := Reader.ReadFloat;
end;
 
procedure TImageSprite.WriteAnimSpeed(Writer: TWriter);
begin
Writer.WriteFloat(FAnimSpeed);
end;
 
procedure TImageSprite.ReadAnimStart(Reader: TReader);
begin
FAnimStart := Reader.ReadInteger;
end;
 
function TImageSpriteEx.GetBoundsRect: TRect;
procedure TImageSprite.WriteAnimStart(Writer: TWriter);
begin
Result := FEngine.SurfaceRect;
Writer.WriteInteger(FAnimStart);
end;
 
function TImageSpriteEx.TestCollision(Sprite: TSprite): Boolean;
procedure TImageSprite.ReadPixelCheck(Reader: TReader);
begin
if Sprite is TImageSpriteEx then
FPixelCheck := Reader.ReadBoolean;
end;
 
procedure TImageSprite.WritePixelCheck(Writer: TWriter);
begin
Result := OverlapRect(Bounds(Trunc(Sprite.WorldX), Trunc(Sprite.WorldY), Sprite.Width, Sprite.Height),
Bounds(Trunc(WorldX), Trunc(WorldY), Width, Height));
end else
Writer.WriteBoolean(FPixelCheck);
end;
 
procedure TImageSprite.ReadTile(Reader: TReader);
begin
Result := OverlapRect(Sprite.BoundsRect, Bounds(Trunc(WorldX), Trunc(WorldY), Width, Height));
FTile := Reader.ReadBoolean;
end;
 
procedure TImageSprite.WriteTile(Writer: TWriter);
begin
Writer.WriteBoolean(FTile);
end;
 
procedure TImageSprite.ReadAnimCount(Reader: TReader);
begin
FAnimCount := Reader.ReadInteger;
end;
 
procedure TImageSprite.WriteAnimCount(Writer: TWriter);
begin
Writer.WriteInteger(FAnimCount);
end;
 
procedure TImageSprite.ReadAlpha(Reader: TReader);
begin
FAlpha := Reader.ReadInteger;
end;
 
procedure TImageSprite.WriteAlpha(Writer: TWriter);
begin
Writer.WriteInteger(FAlpha);
end;
 
procedure TImageSprite.ReadCenterY(Reader: TReader);
begin
FCenterY := Reader.ReadFloat;
end;
 
procedure TImageSprite.WriteCenterY(Writer: TWriter);
begin
Writer.WriteFloat(FCenterY);
end;
 
procedure TImageSprite.ReadCenterX(Reader: TReader);
begin
FCenterX := Reader.ReadFloat;
end;
 
procedure TImageSprite.WriteCenterX(Writer: TWriter);
begin
Writer.WriteFloat(FCenterX);
end;
 
procedure TImageSprite.ReadAngle(Reader: TReader);
begin
FAngle := Reader.{$IFDEF VER4UP}ReadSingle{$ELSE}ReadFloat{$ENDIF};
end;
 
procedure TImageSprite.WriteAngle(Writer: TWriter);
begin
Writer.{$IFDEF VER4UP}WriteSingle{$ELSE}WriteFloat{$ENDIF}(FAngle);
end;
 
procedure TImageSprite.ReadBlendMode(Reader: TReader);
begin
FBlendMode := TRenderType(GetEnumValue(TypeInfo(TRenderType), Reader.ReadString));
end;
 
procedure TImageSprite.WriteBlendMode(Writer: TWriter);
begin
Writer.WriteString(GetEnumName(TypeInfo(TRenderType), Ord(FBlendMode)));
end;
 
procedure TImageSprite.ReadBlurImage(Reader: TReader);
begin
FBlurImage := Reader.ReadBoolean;
end;
 
procedure TImageSprite.WriteBlurImage(Writer: TWriter);
begin
Writer.WriteBoolean(FBlurImage);
end;
 
procedure TImageSprite.ReadTextureFilter(Reader: TReader);
begin
FTextureFilter := TD2DTextureFilter(Reader.ReadInteger);
end;
 
procedure TImageSprite.WriteTextureFilter(Writer: TWriter);
begin
Writer.WriteInteger(Ord(FTextureFilter));
end;
 
procedure TImageSprite.SetBlurImageArr(const Value: TBlurImageArr);
begin
FBlurImageArr := Value;
end;
 
procedure TImageSprite.SetBlurImage(const Value: Boolean);
begin
if (FBlurImage <> Value) and (Value) then
begin
FillChar(FBlurImageArr, SizeOf(FBlurImageArr), 0); //get out when set up
end;
FBlurImage := Value;
end;
 
function TImageSprite.GetImage: TPictureCollectionItem;
begin
Result := FDXImage;
end;
 
procedure TImageSprite.SetMirrorFlip(const Value: TRenderMirrorFlipSet);
begin
FMirrorFlip := Value;
end;
 
{ TBackgroundSprite }
 
constructor TBackgroundSprite.Create(AParent: TSprite);
begin
inherited Create(AParent);
FMap := nil;
FMapWidth := 0;
FMapHeight := 0;
Collisioned := False;
end;
 
803,15 → 1550,35
inherited Destroy;
end;
 
procedure TBackgroundSprite.ChipsDraw(Image: TPictureCollectionItem; X, Y: Integer; PatternIndex: Integer);
begin
if AsSigned(FOnDraw) then
FOnDraw(Self)
else
begin
//Image.Draw(FEngine.Surface, X, Y, PatternIndex);
{New function implemented}
if Assigned(FEngine.FOwner) then
//Image.DrawAlpha(DXDraw1.Surface,ChipsRect,ChipsPatternIndex,Blend);
DXDraws.DXDraw_Paint(FEngine.FOwner.FDXDraw, Image, ChipsRect, ChipsPatternIndex,
FBlurImageArr, FBlurImage, FTextureFilter, FMirrorFlip, FBlendMode, FAngle,
Map[X,Y].Alpha, FCenterX, FCenterY);
end;
end;
 
procedure TBackgroundSprite.DoDraw;
var
_x, _y, cx, cy, cx2, cy2, c, ChipWidth, ChipHeight: Integer;
TmpX, TmpY, cx, cy, cx2, cy2, PatternIndex, ChipWidth, ChipHeight: Integer;
StartX, StartY, EndX, EndY, StartX_, StartY_, OfsX, OfsY, dWidth, dHeight: Integer;
r: TRect;
Q: TMapType;
begin
if Image=nil then Exit;
LoadImage;
if Image = nil then
Exit;
 
if (FMapWidth<=0) or (FMapHeight<=0) then Exit;
if (FMapWidth <= 0) or (FMapHeight <= 0) then
Exit;
 
r := Image.PatternRects[0];
ChipWidth := r.Right-r.Left;
820,13 → 1587,13
dWidth := (FEngine.SurfaceRect.Right+ChipWidth) div ChipWidth+1;
dHeight := (FEngine.SurfaceRect.Bottom+ChipHeight) div ChipHeight+1;
 
_x := Trunc(WorldX);
_y := Trunc(WorldY);
TmpX := Round(WorldX);
TmpY := Round(WorldY);
 
OfsX := _x mod ChipWidth;
OfsY := _y mod ChipHeight;
OfsX := TmpX mod ChipWidth;
OfsY := TmpY mod ChipHeight;
 
StartX := _x div ChipWidth;
StartX := TmpX div ChipWidth;
StartX_ := 0;
 
if StartX<0 then
835,7 → 1602,7
StartX := 0;
end;
 
StartY := _y div ChipHeight;
StartY := TmpY div ChipHeight;
StartY_ := 0;
 
if StartY<0 then
855,52 → 1622,87
for cx:=-1 to dWidth do
begin
cx2 := Mod2((cx-StartX+StartX_), FMapWidth);
c := Chips[cx2, cy2];
if c>=0 then
Image.Draw(FEngine.Surface, cx*ChipWidth+OfsX, cy*ChipHeight+OfsY, c);
PatternIndex := Chips[cx2, cy2];
ChipsPatternIndex := PatternIndex; //refresh only
ChipsRect := Bounds(cx * ChipWidth + OfsX, cy * ChipHeight + OfsY, ChipWidth, ChipHeight);
if PatternIndex >= 0 then
begin
if AsSigned(FOnDraw) then
FOnDraw(Self)
else
begin
{New function implemented}
if Assigned(FEngine.FOwner) then
begin
Q := Map[cx2,cy2];
DXDraws.DXDraw_Paint(FEngine.FOwner.FDXDraw, Image, ChipsRect, Q.MapChip,
FBlurImageArr, FBlurImage, Q.TextureFilter, Q.MirrorFlip, Q.Rendered, Q.Angle,
Q.Alpha, Q.CenterX, Q.CenterY);
end;
end;
end else
end;
end;
end;
end
else
begin
for cy:=StartY to EndY-1 do
for cx:=StartX to EndX-1 do
begin
c := Chips[cx-StartX+StartX_, cy-StartY+StartY_];
if c>=0 then
Image.Draw(FEngine.Surface, cx*ChipWidth+OfsX, cy*ChipHeight+OfsY, c);
PatternIndex := Chips[cx - StartX + StartX_, cy - StartY + StartY_];
ChipsPatternIndex := PatternIndex; //refresh only
ChipsRect := Bounds(cx * ChipWidth + OfsX, cy * ChipHeight + OfsY, ChipWidth, ChipHeight);
if PatternIndex >= 0 then
begin
if AsSigned(FOnDraw) then
FOnDraw(Self)
else
begin
{New function implemented}
if Assigned(FEngine.FOwner) then
begin
Q := Map[cx,cy];
DXDraws.DXDraw_Paint(FEngine.FOwner.FDXDraw, Image, ChipsRect, Q.MapChip,
FBlurImageArr, FBlurImage, Q.TextureFilter, Q.MirrorFlip, Q.Rendered, Q.Angle,
Q.Alpha, Q.CenterX, Q.CenterY);
end;
end;
end
end;
end;
end;
 
function TBackgroundSprite.TestCollision(Sprite: TSprite): Boolean;
var
b, b1, b2: TRect;
box0, box1, box2: TRect;
cx, cy, ChipWidth, ChipHeight: Integer;
r: TRect;
begin
Result := True;
if Image=nil then Exit;
if (FMapWidth<=0) or (FMapHeight<=0) then Exit;
if Image = nil then
Exit;
if (FMapWidth <= 0) or (FMapHeight <= 0) then
Exit;
 
r := Image.PatternRects[0];
ChipWidth := r.Right-r.Left;
ChipHeight := r.Bottom-r.Top;
 
box1 := Sprite.BoundsRect;
box2 := BoundsRect;
 
IntersectRect(box0, box1, box2);
 
b1 := Sprite.BoundsRect;
b2 := BoundsRect;
OffsetRect(box0, -Round(WorldX), -Round(WorldY));
OffsetRect(box1, -Round(WorldX), -Round(WorldY));
 
IntersectRect(b, b1, b2);
 
OffsetRect(b, -Trunc(WorldX), -Trunc(WorldY));
OffsetRect(b1, -Trunc(WorldX), -Trunc(WorldY));
 
for cy:=(b.Top-ChipHeight+1) div ChipHeight to b.Bottom div ChipHeight do
for cx:=(b.Left-ChipWidth+1) div ChipWidth to b.Right div ChipWidth do
for cy := (box0.Top - ChipHeight + 1) div ChipHeight to box0.Bottom div ChipHeight do
for cx := (box0.Left - ChipWidth + 1) div ChipWidth to box0.Right div ChipWidth do
if CollisionMap[Mod2(cx, MapWidth), Mod2(cy, MapHeight)] then
begin
if OverlapRect(Bounds(cx*ChipWidth, cy*ChipHeight, ChipWidth, ChipHeight), b1) then Exit;
if OverlapRect(Bounds(cx * ChipWidth, cy * ChipHeight, ChipWidth,
ChipHeight), box1) then
Exit;
end;
 
Result := False;
909,22 → 1711,43
function TBackgroundSprite.GetChip(X, Y: Integer): Integer;
begin
if (X>=0) and (X<FMapWidth) and (Y>=0) and (Y<FMapHeight) then
Result := PInteger(Integer(FMap)+(Y*FMapWidth+X)*SizeOf(Integer))^
Result := PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.MapChip
else
Result := -1;
end;
 
type
PBoolean = ^Boolean;
 
function TBackgroundSprite.GetCollisionMapItem(X, Y: Integer): Boolean;
begin
if (X>=0) and (X<FMapWidth) and (Y>=0) and (Y<FMapHeight) then
Result := PBoolean(Integer(FCollisionMap)+(Y*FMapWidth+X)*SizeOf(Boolean))^
Result := PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.CollisionChip
else
Result := False;
end;
 
function TBackgroundSprite.GetCollisionRectItem(X, Y: Integer): TRect;
begin
if (X >= 0) and (X < FMapWidth) and (Y >= 0) and (Y < FMapHeight) then
Result := PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.CollisionRect
else
Result := Rect(0, 0, 0, 0);
end;
 
function TBackgroundSprite.GetTagMap(X, Y: Integer): Integer;
begin
if (X >= 0) and (X < FMapWidth) and (Y >= 0) and (Y < FMapHeight) then
Result := PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.Tag
else
Result := 0;
end;
 
function TBackgroundSprite.GetMap(X, Y: Integer): TMapType;
begin
if (X >= 0) and (X < FMapWidth) and (Y >= 0) and (Y < FMapHeight) then
Result := PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^
else
FillChar(Result, SizeOf(Result), 0);
end;
 
function TBackgroundSprite.GetBoundsRect: TRect;
begin
if FTile then
931,9 → 1754,10
Result := FEngine.SurfaceRect
else
begin
LoadImage;
if Image<>nil then
Result := Bounds(Trunc(WorldX), Trunc(WorldY),
Image.Width*FMapWidth, Image.Height*FMapHeight)
Result := Bounds(Round(WorldX), Round(WorldY), Image.Width * FMapWidth,
Image.Height * FMapHeight)
else
Result := Rect(0, 0, 0, 0);
end;
942,15 → 1766,33
procedure TBackgroundSprite.SetChip(X, Y: Integer; Value: Integer);
begin
if (X>=0) and (X<FMapWidth) and (Y>=0) and (Y<FMapHeight) then
PInteger(Integer(FMap)+(Y*FMapWidth+X)*SizeOf(Integer))^ := Value;
PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.MapChip := Value;
end;
 
procedure TBackgroundSprite.SetCollisionMapItem(X, Y: Integer; Value: Boolean);
begin
if (X>=0) and (X<FMapWidth) and (Y>=0) and (Y<FMapHeight) then
PBoolean(Integer(FCollisionMap)+(Y*FMapWidth+X)*SizeOf(Boolean))^ := Value;
PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.CollisionChip := Value;
end;
 
procedure TBackgroundSprite.SetCollisionRectItem(X, Y: Integer; Value: TRect);
begin
if (X >= 0) and (X < FMapWidth) and (Y >= 0) and (Y < FMapHeight) then
PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.CollisionRect := Value;
end;
 
procedure TBackgroundSprite.SetTagMap(X, Y: Integer; Value: Integer);
begin
if (X >= 0) and (X < FMapWidth) and (Y >= 0) and (Y < FMapHeight) then
PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.Tag := Value;
end;
 
procedure TBackgroundSprite.SetMap(X, Y: Integer; Value: TMapType);
begin
if (X >= 0) and (X < FMapWidth) and (Y >= 0) and (Y < FMapHeight) then
PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^ := Value;
end;
 
procedure TBackgroundSprite.SetMapHeight(Value: Integer);
begin
SetMapSize(FMapWidth, Value);
961,25 → 1803,116
SetMapSize(Value, FMapHeight);
end;
 
procedure TBackgroundSprite.SetImage(Img: TPictureCollectionItem);
begin
inherited SetImage(Img);
if Assigned(Img) then
begin
FWidth := FMapWidth * Img.Width;
FHeight := FMapHeight * Img.Height;
end
else
begin
FWidth := 0;
FHeight := 0;
end;
end;
 
procedure TBackgroundSprite.SetMapSize(AMapWidth, AMapHeight: Integer);
var I: Integer;
begin
if (FMapWidth<>AMapWidth) or (FMapHeight<>AMapHeight) then
if (FMapWidth <> AMapWidth) or (FMapHeight <> AMapHeight) or (FMap = nil) then
begin
try
if (AMapWidth<=0) or (AMapHeight<=0) then
begin
FreeMem(FMap, FMapWidth * FMapHeight * SizeOf(TMapType)); FMap := nil;
AMapWidth := 0;
AMapHeight := 0;
end;
FMapWidth := AMapWidth;
FMapHeight := AMapHeight;
ReAllocMem(FMap, FMapWidth*FMapHeight*SizeOf(Integer));
FillChar(FMap^, FMapWidth*FMapHeight*SizeOf(Integer), 0);
System.ReallocMem(FMap, FMapWidth * FMapHeight * SizeOf(TMapType));
if Assigned(FMap) then
begin
FillChar(FMap^, FMapWidth * FMapHeight * SizeOf(TMapType), 0);
for I := 0 to FMapWidth * FMapHeight - 1 do
PMapType(Integer(FMap) + (I) * SizeOf(TMapType))^.CollisionChip := True;
end
except
FreeMem(FMap, FMapWidth * FMapHeight * SizeOf(TMapType));
FMap := nil;
end;
end
end;
 
ReAllocMem(FCollisionMap, FMapWidth*FMapHeight*SizeOf(Boolean));
FillChar(FCollisionMap^, FMapWidth*FMapHeight*SizeOf(Boolean), 1);
procedure TBackgroundSprite.Assign(Source: TPersistent);
begin
if Source is TBackgroundSprite then
begin
FMapWidth := TBackgroundSprite(Source).FMapWidth;
FMapHeight := TBackgroundSprite(Source).FMapHeight;
FTile := TBackgroundSprite(Source).FTile;
end;
inherited;
end;
 
procedure TBackgroundSprite.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineBinaryProperty('Map', ReadMapData, WriteMapData, FMap <> nil);
end;
 
type
TMapDataHeader = packed record
MapWidth: Integer;
MapHeight: Integer;
end;
 
procedure TBackgroundSprite.ReadMapData(Stream: TStream);
var
Header: TMapDataHeader;
begin
Stream.ReadBuffer(Header, SizeOf(Header));
FMapWidth := Header.MapWidth;
FMapHeight := Header.MapHeight;
SetMapSize(Header.MapWidth, Header.MapHeight);
if Assigned(FMap) and (Header.MapWidth > 0) and (Header.MapHeight > 0) then
begin
Stream.ReadBuffer(FMap^, FMapWidth * FMapHeight * SizeOf(TMapType));
end;
end;
 
procedure TBackgroundSprite.WriteMapData(Stream: TStream);
var
Header: TMapDataHeader;
begin
Header.MapWidth := FMapWidth;
Header.MapHeight := FMapHeight;
Stream.WriteBuffer(Header, SizeOf(Header));
if Assigned(FMap) then
Stream.WriteBuffer(FMap^, FMapWidth * FMapHeight * SizeOf(TMapType));
end;
 
function TBackgroundSprite.GetOverlap(X, Y: Integer): Integer;
begin
if (X >= 0) and (X < FMapWidth) and (Y >= 0) and (Y < FMapHeight) then
Result := PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.Overlap
else
Result := 0;
end;
 
procedure TBackgroundSprite.SetOverlap(X, Y: Integer; const Value: Integer);
begin
if (X >= 0) and (X < FMapWidth) and (Y >= 0) and (Y < FMapHeight) then
PMapType(Integer(FMap) + (Y * FMapWidth + X) * SizeOf(TMapType))^.Overlap := Value;
end;
 
function TBackgroundSprite.IsMapEmpty: Boolean;
begin
Result := (FMap = nil) or (FMapWidth <= 0) or (FMapHeight <= 0);
end;
 
{ TSpriteEngine }
 
constructor TSpriteEngine.Create(AParent: TSprite);
986,14 → 1919,199
begin
inherited Create(AParent);
FDeadList := TList.Create;
// group handling
{$IFDEF Ver4Up}
fCurrentSelected := Tlist.create;
GroupCount := 10;
{$ENDIF}
end;
 
destructor TSpriteEngine.Destroy;
begin
// cleanup Group handling
{$IFDEF Ver4Up}
ClearCurrent;
GroupCount := 0;
{$ENDIF}
FDeadList.Free;
inherited Destroy;
{$IFDEF Ver4Up}
fCurrentSelected.free;
{$ENDIF}
end;
 
procedure TSpriteEngine.Collisions;
var
index: Integer;
begin
for index := 0 to Count - 1 do
Items[index].Collision;
end;
{Collisions}
{$IFDEF Ver4Up}
 
procedure TSpriteEngine.GroupSelect(const Area: TRect; Add: Boolean = False);
begin
GroupSelect(Area, [Tsprite], Add);
end; {GroupSelect}
 
procedure TSpriteEngine.GroupSelect(const Area: TRect; Filter: array of TSpriteClass; Add: Boolean = False);
var
index, index2: Integer;
sprite: TSprite;
begin
Assert(length(Filter) <> 0, 'Filter = []');
if not Add then
ClearCurrent;
if length(Filter) = 1 then
begin
for Index := 0 to Count - 1 do
begin
sprite := Items[Index];
if (sprite is Filter[0]) and OverlapRect(sprite.GetBoundsRect, Area) then
sprite.Selected := true;
end
end
else
begin
for Index := 0 to Count - 1 do
begin
sprite := Items[index];
for index2 := 0 to high(Filter) do
if (sprite is Filter[index2]) and OverlapRect(sprite.GetBoundsRect, Area) then
begin
sprite.Selected := true;
break;
end;
end
end;
fObjectsSelected := CurrentSelected.count <> 0;
end; {GroupSelect}
 
function TSpriteEngine.Select(Point: TPoint; Filter: array of TSpriteClass; Add: Boolean = False): Tsprite;
var
index, index2: Integer;
begin
Assert(length(Filter) <> 0, 'Filter = []');
if not Add then
ClearCurrent;
// By searching the Drawlist in reverse
// we select the highest sprite if the sprit is under the point
assert(FDrawList <> nil, 'FDrawList = nil');
if length(Filter) = 1 then
begin
for Index := FDrawList.Count - 1 downto 0 do
begin
Result := FDrawList[Index];
if (Result is Filter[0]) and PointInRect(Point, Result.GetBoundsRect) then
begin
Result.Selected := true;
fObjectsSelected := CurrentSelected.count <> 0;
exit;
end;
end
end
else
begin
for Index := FDrawList.Count - 1 downto 0 do
begin
Result := FDrawList[index];
for index2 := 0 to high(Filter) do
if (Result is Filter[index2]) and PointInRect(Point, Result.GetBoundsRect) then
begin
Result.Selected := true;
fObjectsSelected := CurrentSelected.count <> 0;
exit;
end;
end
end;
Result := nil;
end; {Select}
 
function TSpriteEngine.Select(Point: TPoint; Add: Boolean = False): TSprite;
begin
Result := Select(Point, [Tsprite], Add);
end; {Select}
 
procedure TSpriteEngine.ClearCurrent;
begin
while CurrentSelected.count <> 0 do
TSprite(CurrentSelected[CurrentSelected.count - 1]).Selected := False;
fObjectsSelected := False;
end; {ClearCurrent}
 
procedure TSpriteEngine.ClearGroup(GroupNumber: Integer);
var
index: Integer;
Group: Tlist;
begin
Group := Groups[GroupNumber];
if Group <> nil then
for index := 0 to Group.count - 1 do
TSprite(Group[index]).Selected := False;
end; {ClearGroup}
 
procedure TSpriteEngine.CurrentToGroup(GroupNumber: Integer; Add: Boolean = False);
var
Group: Tlist;
index: Integer;
begin
Group := Groups[GroupNumber];
if Group = nil then
exit;
if not Add then
ClearGroup(GroupNumber);
for index := 0 to Group.count - 1 do
TSprite(Group[index]).GroupNumber := GroupNumber;
end; {CurrentToGroup}
 
procedure TSpriteEngine.GroupToCurrent(GroupNumber: Integer; Add: Boolean = False);
var
Group: Tlist;
index: Integer;
begin
if not Add then
ClearCurrent;
Group := Groups[GroupNumber];
if Group <> nil then
for index := 0 to Group.count - 1 do
TSprite(Group[index]).Selected := true;
end; {GroupToCurrent}
 
function TSpriteEngine.GetGroup(Index: Integer): Tlist;
begin
if (index >= 0) or (index < fGroupCount) then
Result := fGroups[index]
else
Result := nil;
end; {GetGroup}
 
procedure TSpriteEngine.SetGroupCount(AGroupCount: Integer);
var
index: Integer;
begin
if (AGroupCount <> FGroupCount) and (AGroupCount >= 0) then
begin
if FGroupCount > AGroupCount then
begin // remove groups
for index := AGroupCount to FGroupCount - 1 do
begin
ClearGroup(index);
FGroups[index].Free;
end;
SetLength(FGroups, AGroupCount);
end
else
begin // add groups
SetLength(FGroups, AGroupCount);
for index := FGroupCount to AGroupCount - 1 do
FGroups[index] := Tlist.Create;
end;
FGroupCount := Length(FGroups);
end;
end; {SetGroupCount}
{$ENDIF}
 
procedure TSpriteEngine.Dead;
begin
while FDeadList.Count>0 do
1019,10 → 2137,15
 
{ TCustomDXSpriteEngine }
 
constructor TCustomDXSpriteEngine.Create(AOnwer: TComponent);
constructor TCustomDXSpriteEngine.Create(AOwner: TComponent);
begin
inherited Create(AOnwer);
inherited Create(AOwner);
FEngine := TSpriteEngine.Create(nil);
FEngine.FOwner := Self;
FItems := TSpriteCollection.Create(Self);
FItems.FOwner := Self;
FItems.FOwnerItem := FEngine;
FItems.Initialize(FEngine);
end;
 
destructor TCustomDXSpriteEngine.Destroy;
1076,4 → 2199,271
FDXDraw.RegisterNotifyEvent(DXDrawNotifyEvent);
end;
 
procedure TCustomDXSpriteEngine.SetItems(const Value: TSpriteCollection);
begin
FItems.Assign(Value);
end;
 
procedure TCustomDXSpriteEngine.Clone(const Amount: Word; const BaseNameOfSprite: string);
var
i: Integer;
begin
if Amount = 0 then Exit;
for i := 1 to Amount do
begin
with FItems.Add do
begin
KindSprite := FItems.Find(BaseNameOfSprite).KindSprite;
Sprite.AsSign(FItems.Find(BaseNameOfSprite).Sprite);
{name has to be different}
Name := Format(BaseNameOfSprite + '_%d', [I]); //simple name for sprite like Name_1 etc.
Sprite.Tag := 0; //for sprite you can use Tag property in future as well
end;
end;
end;
 
function TCustomDXSpriteEngine.ForEach(PrefixNameOdSprite: string; var Names: TStringList): Boolean;
var
I: Integer;
begin
if Names = nil then
Names := TStringList.Create;
for I := 0 to Items.Count - 1 do
begin
if PrefixNameOdSprite = '' then
Names.Add(Items[I].Name)
else
{is prefix, fo names like Player????}
if Pos(PrefixNameOdSprite, Items[I].Name) = 1 then
Names.Add(Items[I].Name);
end;
Result := Names.Count > 0;
if not Result then {$IFDEF VER5UP}FreeAndNil(Names){$ELSE}begin Names.Free; names := nil end{$ENDIF};
end;
 
{ TSpriteCollectionItem }
 
function TSpriteCollectionItem.GetSpriteCollection: TSpriteCollection;
begin
Result := Collection as TSpriteCollection;
end;
 
procedure TSpriteCollectionItem.SetSprite(const Value: TSprite);
begin
FSprite.Assign(Value);
end;
 
constructor TSpriteCollectionItem.Create(Collection: TCollection);
begin
inherited Create(Collection);
FOwner := Collection;
FOwnerItem := (Collection as TSpriteCollection).FOwnerItem;
FSpriteType := stSprite;
FSprite := TSprite.Create(FOwnerItem);
end;
 
procedure TSpriteCollectionItem.Assign(Source: TPersistent);
begin
if Source is TSpriteCollectionItem then
begin
Finalize;
FSprite.Assign(TSpriteCollectionItem(Source).FSprite);
inherited Assign(Source);
Initialize;
end
else
inherited;
end;
 
procedure TSpriteCollectionItem.Initialize;
begin
 
end;
 
destructor TSpriteCollectionItem.Destroy;
begin
FSprite.Destroy;
inherited;
end;
 
procedure TSpriteCollectionItem.Finalize;
begin
 
end;
 
procedure TSpriteCollectionItem.SetOnCollision(
const Value: TCollisionEvent);
begin
FSprite.FOnCollision := Value;
end;
 
procedure TSpriteCollectionItem.SetOnDraw(const Value: TDrawEvent);
begin
FSprite.FOnDraw := Value;
end;
 
procedure TSpriteCollectionItem.SetOnMove(const Value: TMoveEvent);
begin
FSprite.FOnMove := Value
end;
 
function TSpriteCollectionItem.GetDisplayName: string;
begin
Result := inherited GetDisplayName
end;
 
procedure TSpriteCollectionItem.SetDisplayName(const Value: string);
begin
if (Value <> '') and (AnsiCompareText(Value, GetDisplayName) <> 0) and
(Collection is TSpriteCollection) and (TSpriteCollection(Collection).IndexOf(Value) >= 0) then
raise Exception.Create(Format(SSpriteDuplicateName, [Value]));
inherited SetDisplayName(Value);
end;
 
function TSpriteCollectionItem.GetSpriteType: TSpriteType;
begin
Result := FSpriteType;
end;
 
procedure TSpriteCollectionItem.SetSpriteType(const Value: TSpriteType);
var
tmpSprite: TSprite;
begin
if Value <> FSpriteType then
begin
case Value of
stSprite: tmpSprite := TSprite.Create(TSpriteEngine(FOwnerItem));
stImageSprite: TImageSprite(tmpSprite) := TImageSprite.Create(TSpriteEngine(FOwnerItem));
{$WARNINGS OFF}
stImageSpriteEx: TImageSpriteEx(tmpSprite) := TImageSpriteEx.Create(TSpriteEngine(FOwnerItem));
{$WARNINGS ON}
stBackgroundSprite: TBackgroundSprite(tmpSprite) := TBackgroundSprite.Create(TSpriteEngine(FOwnerItem));
else
tmpSprite := nil
end;
if Assigned(FSprite) then
try
tmpSprite.Assign(FSprite);
tmpSprite.FOnDraw := FSprite.FOnDraw;
tmpSprite.FOnMove := FSprite.FOnMove;
tmpSprite.FOnCollision := FSprite.FOnCollision;
tmpSprite.FOnGetImage := FSprite.FOnGetImage;
finally
FSprite.Free; FSprite := nil;
end;
FSprite := tmpSprite;
FSpriteType := Value;
end;
end;
 
function TSpriteCollectionItem.GetOnCollision: TCollisionEvent;
begin
Result := FSprite.FOnCollision
end;
 
function TSpriteCollectionItem.GetOnDraw: TDrawEvent;
begin
Result := FSprite.FOnDraw
end;
 
function TSpriteCollectionItem.GetOnMove: TMoveEvent;
begin
Result := FSprite.FOnMove
end;
 
function TSpriteCollectionItem.GetOnGetImage: TGetImage;
begin
Result := FSprite.FOnGetImage;
end;
 
procedure TSpriteCollectionItem.SetOnGetImage(const Value: TGetImage);
begin
FSprite.FOnGetImage := Value;
end;
 
function TSpriteCollectionItem.GetImageList: TCustomDXImageList;
begin
Result := FSprite.FDXImageList;
end;
 
procedure TSpriteCollectionItem.SetImageList(const Value: TCustomDXImageList);
begin
FSprite.FDXImageList := Value;
end;
 
function TSpriteCollectionItem.Clone(NewName: string): TSprite;
var
T: TSpriteCollectionItem;
begin
T := GetSpriteCollection.Add;
T.KindSprite := Self.FSpriteType;
T.Assign(Self);
T.Name := NewName;
Result := T.FSprite;
end;
 
{ TSpriteCollection }
 
function TSpriteCollection.Initialized: Boolean;
begin
Result := FInitializeFlag;
end;
 
constructor TSpriteCollection.Create(AOwner: TPersistent);
begin
inherited Create(TSpriteCollectionItem);
FOwner := AOwner;
FInitializeFlag := Initialize(TSpriteEngine(AOwner));
end;
 
function TSpriteCollection.GetItem(Index: Integer): TSpriteCollectionItem;
begin
Result := TSpriteCollectionItem(inherited Items[Index]);
end;
 
function TSpriteCollection.Initialize(DXSpriteEngine: TSpriteEngine): Boolean;
begin
Result := True;
try
if AsSigned(FOnInitialize) then
FOnInitialize(DXSpriteEngine);
except
Result := False;
end
end;
 
function TSpriteCollection.Find(const Name: string): TSpriteCollectionItem;
var
i: Integer;
begin
i := IndexOf(Name);
if i = -1 then
raise ESpriteCollectionError.CreateFmt(SSpriteNotFound, [Name]);
Result := Items[i];
end;
 
procedure TSpriteCollection.Finalize;
begin
if AsSigned(FOnFinalize) then
FOnFinalize(FOwnerItem);
end;
 
function TSpriteCollection.GetOwner: TPersistent;
begin
Result := FOwner;
end;
 
function TSpriteCollection.Add: TSpriteCollectionItem;
begin
Result := TSpriteCollectionItem(inherited Add);
Result.FOwner := FOwner;
Result.FOwnerItem := FOwnerItem;
end;
 
destructor TSpriteCollection.Destroy;
begin
Finalize;
inherited;
end;
 
end.
/VCL_DELPHIX_D6/DXSpriteEdit.pas
0,0 → 1,447
unit DXSpriteEdit;
//(c)2006-7 Jaro Benes
//All Rights Reserved
 
{
Complex application for users of unDelphiX as component editor:
 
Supported:
a) create sprite and store it into rersource.
b) allow do change and create complex sprite (background or particle).
c) default values for complex type too.
d) direct link to image from dximagelist.
 
}
interface
{$INCLUDE DelphiXcfg.inc}
{$WARNINGS OFF}
uses
Windows, SysUtils, Classes, Forms, Dialogs, Controls, ExtCtrls, StdCtrls,
Graphics, DXSprite, DXDraws;
 
type
{ TEdit }
 
TEdit = class(StdCtrls.TEdit) {injected class}
private
function GetAsInteger: Integer;
procedure SetAsInteger(const Value: Integer);
function GetAsFloat: Double;
procedure SetAsFloat(const Value: Double);
published
public
property AsInteger: Integer read GetAsInteger write SetAsInteger;
property AsFloat: Double read GetAsFloat write SetAsFloat;
end;
 
{ TDelphiXWaveEditForm }
 
TDelphiXSpriteEditForm = class(TForm)
Bevel2: TBevel;
OKButton: TButton;
CancelButton: TButton;
ClearButton: TButton;
Panel1: TPanel;
EAlpha: TEdit;
EAngle: TEdit;
EAnimCount: TEdit;
EAnimPos: TEdit;
EAnimSpeed: TEdit;
EAnimStart: TEdit;
EHeight: TEdit;
EMapHeight: TEdit;
EMapWidth: TEdit;
EWidth: TEdit;
EX: TEdit;
EY: TEdit;
EZ: TEdit;
LAlpha: TLabel;
LAngle: TLabel;
LAnimCount: TLabel;
LAnimPos: TLabel;
LAnimSpeed: TLabel;
LAnimStart: TLabel;
LHeight: TLabel;
LMapHeight: TLabel;
LMapWidth: TLabel;
LWidth: TLabel;
LX: TLabel;
LY: TLabel;
LZ: TLabel;
Label1: TLabel;
EBlendMode: TComboBox;
eImage: TComboBox;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
ECenterX: TEdit;
ECenterY: TEdit;
chbBlurImage: TCheckBox;
chbAnimLooped: TCheckBox;
chbMoved: TCheckBox;
chbCollisioned: TCheckBox;
chbPixelCheck: TCheckBox;
chbTile: TCheckBox;
chbVisible: TCheckBox;
btnMapEdit: TButton;
Label5: TLabel;
ETexFilter: TComboBox;
procedure eImageChange(Sender: TObject);
procedure eImageExit(Sender: TObject);
procedure OKButtonClick(Sender: TObject);
procedure MapEditButtonClick(Sender: TObject);
private
FChanged: Boolean;
FvkType: TSpriteType;
FSprite: TSprite;
//
FDXImageList: TCustomDXImageList;
FDXImageName: string;
procedure FieldEnabler(SpriteType: TSpriteType);
public
procedure LoadDataToForm(AData: TPersistent);
function SaveDataFromForm: TPersistent;
property Sprite: TSprite read FSprite write FSprite;
end;
 
var
DelphiXSpriteEditForm: TDelphiXSpriteEditForm;
 
implementation
 
uses DXConsts, DXMapEdit, DXClass;
 
{$R *.DFM}
 
{ TEdit }
 
function TEdit.GetAsFloat: Double;
begin
try
Result := StrToFloat(Self.Text);
except
Result := 0;
end;
end;
 
function TEdit.GetAsInteger: Integer;
begin
try
Result := StrToInt(Self.Text);
except
Result := 0;
end;
end;
 
procedure TEdit.SetAsFloat(const Value: Double);
begin
Self.Text := FloatToStr(Value)
end;
 
procedure TEdit.SetAsInteger(const Value: Integer);
begin
Self.Text := IntToStr(Value)
end;
 
{ TDelphiXSpriteEditForm }
 
procedure TDelphiXSpriteEditForm.LoadDataToForm(AData: TPersistent);
procedure LoadAsSprite;
begin
with AData as TSprite do begin
chbCollisioned.Checked := Collisioned;
chbMoved.Checked := Moved;
chbVisible.Checked := Visible;
EHeight.AsInteger := Height;
EWidth.AsInteger := Width;
EX.AsFloat := X;
EY.AsFloat := Y;
EZ.AsInteger := Z;
end;
Caption := 'Sprite Init Editor (TSprite)';
end;
procedure LoadAsImageSprite;
var
ii: Integer;
pci: TPictureCollectionItem;
begin
LoadAsSprite;
with AData as TImageSprite do begin
EAnimCount.AsInteger := AnimCount;
chbAnimLooped.Checked := AnimLooped;
EAnimPos.AsFloat := AnimPos;
EAnimSpeed.AsFloat := AnimSpeed;
EAnimStart.AsInteger := AnimStart;
ECenterX.AsFloat := CenterX;
ECenterY.AsFloat := CenterY;
chbPixelCheck.Checked := PixelCheck;
chbTile.Checked := Tile;
EAlpha.AsInteger := Alpha;
EAngle.AsFloat := Angle;
EBlendMode.ItemIndex := Ord(BlendMode);
ETexFilter.ItemIndex := Ord(TextureFilter);
EImage.Clear;
if Assigned(DXImageList) then
for ii := 0 to DXImageList.Items.Count - 1 do begin
if DXImageList.Items[ii].Name = '' then
EImage.Items.Add('_unnamed_' + IntToStr(ii))
else
EImage.Items.Add(DXImageList.Items[ii].Name);
end;
{contain image}
pci := Image;
{is attached}
if Assigned(pci) then begin
{search in imagelist}
for ii := 0 to DXImageList.Items.Count - 1 do
if DXImageList.Items[ii] = pci then begin
EImage.ItemIndex := ii;
Break;
end;
end
else begin
if DXImageName <> '' then begin
ii := EImage.Items.IndexOf(DXImageName);
if ii <> -1 then
EImage.ItemIndex := ii;
end;
end;
end;
Caption := 'Sprite Init Editor (TImageSprite)';
end;
procedure LoadAsImageSpriteEx;
begin
LoadAsImageSprite;
Caption := 'Sprite Init Editor (TImageSpriteEx)';
end;
procedure LoadAsBackgroundSprite;
begin
LoadAsImageSprite;
with AData as TBackgroundSprite do begin
EMapHeight.AsInteger := MapHeight;
EMapWidth.AsInteger := MapWidth;
chbTile.Checked := Tile;
end;
btnMapEdit.Enabled := eImage.ItemIndex <> -1;
Caption := 'Sprite Init Editor (TBackgroundSprite)';
end;
const
cktypearr: array[TSpriteType] of Integer = (0, 2, 3, 1);
begin
FSprite := TSprite(AData);
FDXImageList := TSprite(AData).DXImageList;
if AData is TBackgroundSprite then Fvktype := stBackgroundSprite
else if AData is TImageSpriteEx then Fvktype := stImageSpriteEx
else if AData is TImageSprite then Fvktype := stImageSprite
else Fvktype := stSprite;
 
FieldEnabler(Fvktype);
try
case Fvktype of
stSprite: LoadAsSprite;
stImageSprite: LoadAsImageSprite;
stImageSpriteEx: LoadAsImageSpriteEx;
stBackgroundSprite: LoadAsBackgroundSprite;
end;
except
on E: Exception do
ShowMessage(E.Message);
end;
end;
 
function TDelphiXSpriteEditForm.SaveDataFromForm: TPersistent;
var AData: TSprite;
procedure SaveAsSprite;
begin
with AData as TSprite do begin
Collisioned := chbCollisioned.Checked;
Moved := chbMoved.Checked;
Visible := chbVisible.Checked;
Height := EHeight.AsInteger;
Width := EWidth.AsInteger;
X := EX.AsFloat;
Y := EY.AsFloat;
Z := EZ.AsInteger;
end;
end;
procedure SaveAsImageSprite;
begin
SaveAsSprite;
with AData as TImageSprite do begin
AnimCount := EAnimCount.AsInteger;
AnimLooped := chbAnimLooped.Checked;
AnimPos := EAnimPos.AsFloat;
AnimSpeed := EAnimSpeed.AsFloat;
AnimStart := EAnimStart.AsInteger;
PixelCheck := chbPixelCheck.Checked;
Tile := chbTile.Checked;
Alpha := EAlpha.AsInteger;
Angle := EAngle.AsFloat;
CenterX := ECenterX.AsFloat;
CenterY := ECenterY.AsFloat;
BlendMode := TRenderType(EBlendMode.ItemIndex);
TextureFilter := TD2DTextureFilter(ETexFilter.ItemIndex);
BlurImage := chbBlurImage.Checked;
if Assigned(DXImageList) then
if DXImageName <> eImage.Text then
if eImage.ItemIndex <> -1 then begin
{DX}Image := DXImageList.Items[eImage.ItemIndex];
DXImageName := DXImageList.Items[eImage.ItemIndex].Name;
end;
end;
end;
procedure SaveAsImageSpriteEx;
begin
SaveAsImageSprite;
end;
procedure SaveAsBackgroundSprite;
begin
SaveAsImageSprite;
with AData as TBackgroundSprite do begin
MapHeight := EMapHeight.AsInteger;
Tile := chbTile.Checked;
MapWidth := EMapWidth.AsInteger;
end;
end;
begin
Result := nil;
try
AData := FSprite;
case Fvktype of
stSprite: SaveAsSprite;
stImageSprite: SaveAsImageSprite;
stImageSpriteEx: SaveAsImageSpriteEx;
stBackgroundSprite: SaveAsBackgroundSprite;
end;
Result := AData;
except
on E: Exception do
ShowMessage(E.Message);
end;
end;
 
procedure TDelphiXSpriteEditForm.OKButtonClick(Sender: TObject);
begin
FChanged := True;
if FChanged then
begin
Tag := 1;
end;
 
Close;
end;
 
procedure TDelphiXSpriteEditForm.FieldEnabler(SpriteType: TSpriteType);
var I: Integer;
begin
ECenterX.Enabled := (SpriteType in [stImageSprite..stBackgroundSprite]);
ECenterY.Enabled := (SpriteType in [stImageSprite..stBackgroundSprite]);
EAlpha.Enabled := (SpriteType in [stImageSprite..stBackgroundSprite]);
EAngle.Enabled := (SpriteType in [stImageSprite..stBackgroundSprite]);
EBlendMode.Enabled := (SpriteType in [stImageSprite..stBackgroundSprite]);
EAnimCount.Enabled := (SpriteType in [stImageSprite, stImageSpriteEx]);
chbAnimLooped.Enabled := (SpriteType in [stImageSprite, stImageSpriteEx]);
EAnimPos.Enabled := (SpriteType in [stImageSprite, stImageSpriteEx]);
EAnimSpeed.Enabled := (SpriteType in [stImageSprite, stImageSpriteEx]);
EAnimStart.Enabled := (SpriteType in [stImageSprite, stImageSpriteEx]);
chbCollisioned.Enabled := (SpriteType in [stSprite..stBackgroundSprite]);
chbBlurImage.Enabled := (SpriteType in [stImageSprite, stImageSpriteEx]);
EHeight.Enabled := (SpriteType in [stSprite..stBackgroundSprite]);
EImage.Enabled := (SpriteType in [stImageSprite..stBackgroundSprite]);
EMapHeight.Enabled := (SpriteType in [stBackgroundSprite]);
EMapWidth.Enabled := (SpriteType in [stBackgroundSprite]);
chbMoved.Enabled := (SpriteType in [stSprite..stBackgroundSprite]);
chbPixelCheck.Enabled := (SpriteType in [stImageSprite, stImageSpriteEx]);
chbTile.Enabled := (SpriteType in [stImageSprite..stBackgroundSprite]);
chbVisible.Enabled := (SpriteType in [stSprite..stBackgroundSprite]);
chbBlurImage.Enabled := (SpriteType in [stImageSprite..stBackgroundSprite]);
EWidth.Enabled := (SpriteType in [stSprite..stBackgroundSprite]);
EX.Enabled := (SpriteType in [stSprite..stBackgroundSprite]);
EY.Enabled := (SpriteType in [stSprite..stBackgroundSprite]);
EZ.Enabled := (SpriteType in [stSprite..stBackgroundSprite]);
ETexFilter.Enabled := (SpriteType in [stImageSprite..stBackgroundSprite]);
for I := 0 to ComponentCount - 1 do begin
if (Components[I] is TEdit) then with (Components[I] as TEdit) do
if Enabled then Color := clWindow else Color := clBtnFace;
if (Components[I] is TComboBox) then with (Components[I] as TComboBox) do
if Enabled then Color := clWindow else Color := clBtnFace;
end
end;
 
procedure TDelphiXSpriteEditForm.MapEditButtonClick(Sender: TObject);
{only for editing maps for TBackgroudSprite}
var
I{, J}: Integer;
Q: TBackgroundSprite;
begin
DelphiXMapEditForm := TDelphiXMapEditForm.Create(nil);
try
DelphiXMapEditForm.DXImageList := FDXImageList; {local instance copy}
DelphiXMapEditForm.DXBackgroundSprite := TBackgroundSprite(FSprite);
{vymaz combo a natahni jmena}
DelphiXMapEditForm.ImageToSet.Items.Clear;
DelphiXMapEditForm.ImageToSet.Items.Assign(EImage.Items);
DelphiXMapEditForm.ImageToSet.ItemIndex := EImage.ItemIndex;
DelphiXMapEditForm.PicturesToChip.Visible := DelphiXMapEditForm.LoadSplittedImage{$IFNDEF VER4UP}(False){$ENDIF};
{nepovolit zmenu, pokud byla udelana uz na hlavnim formu}
DelphiXMapEditForm.ImageToSet.Enabled := DelphiXMapEditForm.ImageToSet.ItemIndex = -1;
if Assigned(FSprite) then begin
Q := TBackgroundSprite(FSprite);
if not Q.IsMapEmpty then begin
DelphiXMapEditForm.eMapSizeX.Value := Q.MapWidth;
DelphiXMapEditForm.eMapSizeY.Value := Q.MapHeight;
{velikost podle dlazdice v listu}
I := DelphiXMapEditForm.ImageToSet.ItemIndex;
if I <> -1 then begin
DelphiXMapEditForm.EWidth.AsInteger := DelphiXMapEditForm.DXImageList.Items[I].Width; ;
DelphiXMapEditForm.EHeight.AsInteger := DelphiXMapEditForm.DXImageList.Items[I].Height;
end;
DelphiXMapEditForm.ResizeMapArea;
end
else
DelphiXMapEditForm.ResizeMapArea;
end;
{pokud je regulerni jmeno obrazku na spritu, vyber ho}
with DelphiXMapEditForm.ImageToSet do
if FDXImageName <> '' then
ItemIndex := Items.IndexOf(FDXImageName);
{nastav tam jeste obrabeny sprite}
DelphiXMapEditForm.DXBackGroundSprite := TBackgroundSprite(FSprite);
DelphiXMapEditForm.MapArea.DefaultColWidth := DelphiXMapEditForm.EWidth.AsInteger;
DelphiXMapEditForm.MapArea.DefaultRowHeight := DelphiXMapEditForm.EHeight.AsInteger;
{a volej dialog}
DelphiXMapEditForm.eMapSizeX.OnChange := DelphiXMapEditForm.BtnSetSizeClick;
DelphiXMapEditForm.eMapSizeY.OnChange := DelphiXMapEditForm.BtnSetSizeClick;
if DelphiXMapEditForm.ShowModal = mrOK then begin
{pokud je vse OK, uloz mapu ke spritu}
if Assigned(DelphiXMapEditForm.DXBackGroundSprite) then begin
FDXImageName := '';
if DelphiXMapEditForm.ImageToSet.ItemIndex <> -1 then
FDXImageName := FDXImageList.Items[DelphiXMapEditForm.ImageToSet.ItemIndex].Name;
EMapHeight.AsInteger := DelphiXMapEditForm.eMapSizeY.Value;
EMapWidth.AsInteger := DelphiXMapEditForm.eMapSizeX.Value;
end;
end;
finally
DelphiXMapEditForm.Free;
DelphiXMapEditForm := nil;
end;
end;
 
procedure TDelphiXSpriteEditForm.eImageExit(Sender: TObject);
begin
if eImage.ItemIndex <> -1 then begin
EWidth.AsInteger := FDXImageList.Items[eImage.ItemIndex].Width;
EHeight.AsInteger := FDXImageList.Items[eImage.ItemIndex].Height;
end;
end;
 
procedure TDelphiXSpriteEditForm.eImageChange(Sender: TObject);
begin
if FvkType = stBackgroundSprite then
btnMapEdit.Enabled := eImage.ItemIndex <> -1
else
btnMapEdit.Enabled := False;
end;
 
end.
/VCL_DELPHIX_D6/Dcu290/.gitkeep
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/VCL_DELPHIX_D6/DelphiX150.res
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX160.dproj
0,0 → 1,195
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{91308B77-8E11-452A-8053-24D7DF8D544D}</ProjectGuid>
<MainSource>DelphiX160.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>13.4</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<DCC_UsePackage>rtl;$(DCC_UsePackage)</DCC_UsePackage>
<GenPackage>true</GenPackage>
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_Description>DelphiX - DirectX components for Delphi XE2</DCC_Description>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<GenDll>true</GenDll>
<DCC_K>false</DCC_K>
<VerInfo_Locale>1029</VerInfo_Locale>
<DCC_E>false</DCC_E>
<DCC_F>false</DCC_F>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<Icon_MainIcon>DelphiX160_Icon.ico</Icon_MainIcon>
<DCC_UsePackage>vclx;vcl;vclimg;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<Icon_MainIcon>DelphiX160_Icon.ico</Icon_MainIcon>
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_UsePackage>vclx;vcl;vclimg;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_DebugInformation>false</DCC_DebugInformation>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX160.dpk</Source>
</Source>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1029</VersionInfo>
<VersionInfo Name="CodePage">1250</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
</Delphi.Personality>
<Platforms>
<Platform value="Win64">False</Platform>
<Platform value="Win32">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
</Project>
/VCL_DELPHIX_D6/DelphiX160.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX160_Icon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX190.dproj
0,0 → 1,233
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{41E25D19-4508-47C8-BCF2-B3098831677C}</ProjectGuid>
<MainSource>DelphiX190.dpk</MainSource>
<ProjectVersion>15.3</ProjectVersion>
<FrameworkType>None</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1029</VerInfo_Locale>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
<GenDll>true</GenDll>
<GenPackage>true</GenPackage>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
<DCC_E>false</DCC_E>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>vcl;rtl;vclx;vclimg;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>vcl;rtl;vclx;vclimg;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_DebugDCUs>true</DCC_DebugDCUs>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>0</DCC_DebugInformation>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX190.dpk</Source>
</Source>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1029</VersionInfo>
<VersionInfo Name="CodePage">1250</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
<VersionInfoKeys Name="CFBundleName"/>
<VersionInfoKeys Name="CFBundleDisplayName"/>
<VersionInfoKeys Name="UIDeviceFamily"/>
<VersionInfoKeys Name="CFBundleIdentifier"/>
<VersionInfoKeys Name="CFBundleVersion"/>
<VersionInfoKeys Name="CFBundlePackageType"/>
<VersionInfoKeys Name="CFBundleSignature"/>
<VersionInfoKeys Name="CFBundleAllowMixedLocalizations"/>
<VersionInfoKeys Name="UISupportedInterfaceOrientations"/>
<VersionInfoKeys Name="CFBundleExecutable"/>
<VersionInfoKeys Name="CFBundleResourceSpecification"/>
<VersionInfoKeys Name="LSRequiresIPhoneOS"/>
<VersionInfoKeys Name="CFBundleInfoDictionaryVersion"/>
<VersionInfoKeys Name="CFBundleDevelopmentRegion"/>
<VersionInfoKeys Name="package"/>
<VersionInfoKeys Name="label"/>
<VersionInfoKeys Name="versionCode"/>
<VersionInfoKeys Name="versionName"/>
<VersionInfoKeys Name="persistent"/>
<VersionInfoKeys Name="restoreAnyVersion"/>
<VersionInfoKeys Name="installLocation"/>
<VersionInfoKeys Name="largeHeap"/>
<VersionInfoKeys Name="theme"/>
</VersionInfoKeys>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k190.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp190.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Deployment/>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX200.dpk
0,0 → 1,76
package DelphiX200;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi XE6'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX200.dproj
0,0 → 1,173
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{4B8D9C4D-3E58-4C54-96C6-DAB5B1E90C92}</ProjectGuid>
<MainSource>DelphiX200.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>15.4</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<VerInfo_Locale>1029</VerInfo_Locale>
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<DCC_S>false</DCC_S>
<SanitizedProjectName>DelphiX200</SanitizedProjectName>
<DCC_K>false</DCC_K>
<DCC_E>false</DCC_E>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
<GenDll>true</GenDll>
<DCC_F>false</DCC_F>
<DCC_N>false</DCC_N>
<GenPackage>true</GenPackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>rtl;vclimg;vcl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>rtl;vclimg;vcl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_Optimize>false</DCC_Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX200.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX220.dpk
0,0 → 1,52
package DelphiX220;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi XE8'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
{$define SXEXTENSIONS}
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX220.dproj
0,0 → 1,186
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{C07C3146-1FAD-40A5-AD4D-8CDB0A5D5D2F}</ProjectGuid>
<MainSource>DelphiX220.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>17.2</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_N>false</DCC_N>
<SanitizedProjectName>DelphiX220</SanitizedProjectName>
<VerInfo_Locale>1029</VerInfo_Locale>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<GenPackage>true</GenPackage>
<GenDll>true</GenDll>
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_S>false</DCC_S>
<DesignOnlyPackage>true</DesignOnlyPackage>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
<DCC_F>false</DCC_F>
<DCC_E>false</DCC_E>
<DCC_Description>DelphiX - DirectX components for Delphi XE8</DCC_Description>
<DCC_K>false</DCC_K>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<DCC_UsePackage>rtl;vclimg;vcl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>rtl;vclimg;vcl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="SXMedia\SXReg.pas"/>
<DCCReference Include="SXMedia\MpSndSys.pas"/>
<DCCReference Include="SXMedia\SXAbout.pas">
<Form>AboutBox</Form>
</DCCReference>
<DCCReference Include="SXMedia\SXEditor.pas"/>
<DCCReference Include="SXMedia\SXEngine.pas"/>
<DCCReference Include="SXMedia\SXModPlayer.pas"/>
<DCCReference Include="SXMedia\SXMovie.pas">
<Form>$ENDIF</Form>
</DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX220.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX230.dpk
0,0 → 1,69
package DelphiX230;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 10 - Seattle'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm};
 
end.
/VCL_DELPHIX_D6/DelphiX230.dproj
0,0 → 1,178
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{123B3D31-C9BA-4AB0-973A-A9C1D76DEAEE}</ProjectGuid>
<MainSource>DelphiX230.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>18.1</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<SanitizedProjectName>DelphiX230</SanitizedProjectName>
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_F>false</DCC_F>
<DCC_N>false</DCC_N>
<GenDll>true</GenDll>
<DCC_Description>DelphiX - DirectX components for Delphi 10 - Seattle</DCC_Description>
<DCC_K>false</DCC_K>
<VerInfo_Locale>1029</VerInfo_Locale>
<DCC_E>false</DCC_E>
<DCC_S>false</DCC_S>
<GenPackage>true</GenPackage>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>rtl;vclimg;vcl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>rtl;vclimg;vcl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_Optimize>false</DCC_Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX230.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Android">False</Platform>
<Platform value="iOSDevice32">False</Platform>
<Platform value="iOSSimulator">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX230.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX240.dpk
0,0 → 1,71
package DelphiX240;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 10.1 - Berlin'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm},
D3DUtils in 'D3DUtils.pas',
DirectX in 'DirectX.pas';
 
end.
/VCL_DELPHIX_D6/DelphiX240.dproj
0,0 → 1,516
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{ACFD8812-E511-42FF-885D-C0D89E119714}</ProjectGuid>
<MainSource>DelphiX240.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>17</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>18.1</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
<Base_Android>true</Base_Android>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Cfg_2)'=='true') or '$(Cfg_2_Android)'!=''">
<Cfg_2_Android>true</Cfg_2_Android>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_N>false</DCC_N>
<DCC_ImageBase>00400000</DCC_ImageBase>
<GenPackage>true</GenPackage>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<SanitizedProjectName>DelphiX240</SanitizedProjectName>
<DCC_S>false</DCC_S>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
<DCC_Description>DelphiX - DirectX components for Delphi 10.1 - Berlin</DCC_Description>
<GenDll>true</GenDll>
<DCC_E>false</DCC_E>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1029</VerInfo_Locale>
<DesignOnlyPackage>true</DesignOnlyPackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Android)'!=''">
<DCC_UsePackage>rtl;$(DCC_UsePackage)</DCC_UsePackage>
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar</EnabledSysJars>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>vclimg;vcl;rtl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_Optimize>false</DCC_Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Android)'!=''">
<BT_BuildType>Debug</BT_BuildType>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="D3DUtils.pas"/>
<DCCReference Include="DirectX.pas"/>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX240.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Android">True</Platform>
<Platform value="Win32">True</Platform>
</Platforms>
<Deployment Version="3">
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\18.0\Bpl\DelphiX240.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>DelphiX240.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="DependencyModule">
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClassesDexFile">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="Win32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch768">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1024">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch320">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSInfoPList"/>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1536">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640x1136">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements"/>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXInfoPList"/>
<DeployClass Name="ProjectOSXEntitlements"/>
<DeployClass Name="iPad_Launch2048">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
</Deployment>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX240.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX250.dpk
0,0 → 1,71
package DelphiX250;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 10.2 - Tokyo'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm},
D3DUtils in 'D3DUtils.pas',
DirectX in 'DirectX.pas';
 
end.
/VCL_DELPHIX_D6/DelphiX250.dproj
0,0 → 1,516
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{ACFD8812-E511-42FF-885D-C0D89E119714}</ProjectGuid>
<MainSource>DelphiX250.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>18</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>18.1</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
<Base_Android>true</Base_Android>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Cfg_2)'=='true') or '$(Cfg_2_Android)'!=''">
<Cfg_2_Android>true</Cfg_2_Android>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_N>false</DCC_N>
<DCC_ImageBase>00400000</DCC_ImageBase>
<GenPackage>true</GenPackage>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<SanitizedProjectName>DelphiX250</SanitizedProjectName>
<DCC_S>false</DCC_S>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
<DCC_Description>DelphiX - DirectX components for Delphi 10.2 - Tokyo</DCC_Description>
<GenDll>true</GenDll>
<DCC_E>false</DCC_E>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1029</VerInfo_Locale>
<DesignOnlyPackage>true</DesignOnlyPackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Android)'!=''">
<DCC_UsePackage>rtl;$(DCC_UsePackage)</DCC_UsePackage>
<EnabledSysJars>android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar</EnabledSysJars>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>vclimg;vcl;rtl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_Optimize>false</DCC_Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Android)'!=''">
<BT_BuildType>Debug</BT_BuildType>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="D3DUtils.pas"/>
<DCCReference Include="DirectX.pas"/>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX250.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Android">True</Platform>
<Platform value="Win32">True</Platform>
</Platforms>
<Deployment Version="3">
<DeployFile LocalName="C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl\DelphiX250.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>DelphiX250.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="DependencyModule">
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClassesDexFile">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="Win32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch768">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1024">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch320">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSInfoPList"/>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1536">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640x1136">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements"/>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXInfoPList"/>
<DeployClass Name="ProjectOSXEntitlements"/>
<DeployClass Name="iPad_Launch2048">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
</Deployment>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX250.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX260.dpk
0,0 → 1,78
package DelphiX260;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 10.3 - Rio'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm},
D3DUtils in 'D3DUtils.pas',
DirectX in 'DirectX.pas',
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas';
 
end.
/VCL_DELPHIX_D6/DelphiX260.dproj
0,0 → 1,191
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{0E782D8A-083C-4D0F-B835-50552DA343A3}</ProjectGuid>
<MainSource>DelphiX260.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>18.6</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_E>false</DCC_E>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_ImageBase>00400000</DCC_ImageBase>
<GenDll>true</GenDll>
<GenPackage>true</GenPackage>
<SanitizedProjectName>DelphiX260</SanitizedProjectName>
<DCC_Description>DelphiX - DirectX components for Delphi 10.2 - Tokyo</DCC_Description>
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;DUnitX.Loggers.GUI;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1029</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_UsePackage>vclimg;vcl;rtl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>vclimg;vcl;rtl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="D3DUtils.pas"/>
<DCCReference Include="DirectX.pas">
<Form>$ENDIF</Form>
</DCCReference>
<DCCReference Include="SXMedia\SXReg.pas"/>
<DCCReference Include="SXMedia\MpSndSys.pas"/>
<DCCReference Include="SXMedia\SXAbout.pas">
<Form>AboutBox</Form>
</DCCReference>
<DCCReference Include="SXMedia\SXEditor.pas"/>
<DCCReference Include="SXMedia\SXEngine.pas"/>
<DCCReference Include="SXMedia\SXModPlayer.pas"/>
<DCCReference Include="SXMedia\SXMovie.pas">
<Form>$ENDIF</Form>
</DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX260.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX260.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX270.dpk
0,0 → 1,78
package DelphiX270;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 10.4 - Sydney'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm},
D3DUtils in 'D3DUtils.pas',
DirectX in 'DirectX.pas',
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas';
 
end.
/VCL_DELPHIX_D6/DelphiX270.dproj
0,0 → 1,178
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{84EABC6F-D69F-4837-9DC3-7A7FE610DA69}</ProjectGuid>
<MainSource>DelphiX270.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>19.2</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_E>false</DCC_E>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_ImageBase>00400000</DCC_ImageBase>
<GenDll>true</GenDll>
<GenPackage>true</GenPackage>
<SanitizedProjectName>DelphiX270</SanitizedProjectName>
<DCC_Description>DelphiX - DirectX components for Delphi 10.4 - Sydney</DCC_Description>
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;DUnitX.Loggers.GUI;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1029</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_UsePackage>vclimg;vcl;rtl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>vclimg;vcl;rtl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="D3DUtils.pas"/>
<DCCReference Include="DirectX.pas"/>
<DCCReference Include="SXMedia\SXReg.pas"/>
<DCCReference Include="SXMedia\MpSndSys.pas"/>
<DCCReference Include="SXMedia\SXAbout.pas">
<Form>AboutBox</Form>
</DCCReference>
<DCCReference Include="SXMedia\SXEditor.pas"/>
<DCCReference Include="SXMedia\SXEngine.pas"/>
<DCCReference Include="SXMedia\SXModPlayer.pas"/>
<DCCReference Include="SXMedia\SXMovie.pas"/>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX270.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX270.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX280.dpk
0,0 → 1,78
package DelphiX280;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 11 - Alexandria'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm},
D3DUtils in 'D3DUtils.pas',
DirectX in 'DirectX.pas',
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas';
 
end.
/VCL_DELPHIX_D6/DelphiX280.dproj
0,0 → 1,189
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{988289D9-603A-42AE-84FD-B9B278FC1799}</ProjectGuid>
<MainSource>DelphiX280.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>19.5</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_E>false</DCC_E>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_ImageBase>00400000</DCC_ImageBase>
<GenDll>true</GenDll>
<GenPackage>true</GenPackage>
<SanitizedProjectName>DelphiX280</SanitizedProjectName>
<DCC_Description>DelphiX - DirectX components for Delphi 11 - Alexandria</DCC_Description>
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;DUnitX.Loggers.GUI;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1029</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_UsePackage>vclimg;vcl;rtl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>vclimg;vcl;rtl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_RangeChecking>true</DCC_RangeChecking>
<DCC_IntegerOverflowCheck>true</DCC_IntegerOverflowCheck>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="D3DUtils.pas"/>
<DCCReference Include="DirectX.pas"/>
<DCCReference Include="SXMedia\SXReg.pas"/>
<DCCReference Include="SXMedia\MpSndSys.pas"/>
<DCCReference Include="SXMedia\SXAbout.pas">
<Form>AboutBox</Form>
</DCCReference>
<DCCReference Include="SXMedia\SXEditor.pas"/>
<DCCReference Include="SXMedia\SXEngine.pas"/>
<DCCReference Include="SXMedia\SXModPlayer.pas"/>
<DCCReference Include="SXMedia\SXMovie.pas"/>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX280.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX280.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX290.dpk
0,0 → 1,78
package DelphiX290;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 12 - Athens'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm},
D3DUtils in 'D3DUtils.pas',
DirectX in 'DirectX.pas',
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas';
 
end.
/VCL_DELPHIX_D6/DelphiX290.dproj
0,0 → 1,183
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{35E4C8B0-A649-4664-A52A-82A98347F8A2}</ProjectGuid>
<MainSource>DelphiX290.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>20.1</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_E>false</DCC_E>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_ImageBase>00400000</DCC_ImageBase>
<GenDll>true</GenDll>
<GenPackage>true</GenPackage>
<SanitizedProjectName>DelphiX290</SanitizedProjectName>
<DCC_Description>DelphiX - DirectX components for Delphi 12 - Athens</DCC_Description>
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;DUnitX.Loggers.GUI;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1029</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_UsePackage>vcl;rtl;vclimg;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>vcl;rtl;vclimg;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_RangeChecking>true</DCC_RangeChecking>
<DCC_IntegerOverflowCheck>true</DCC_IntegerOverflowCheck>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="D3DUtils.pas"/>
<DCCReference Include="DirectX.pas"/>
<DCCReference Include="SXMedia\SXReg.pas"/>
<DCCReference Include="SXMedia\MpSndSys.pas"/>
<DCCReference Include="SXMedia\SXAbout.pas">
<Form>AboutBox</Form>
</DCCReference>
<DCCReference Include="SXMedia\SXEditor.pas"/>
<DCCReference Include="SXMedia\SXEngine.pas"/>
<DCCReference Include="SXMedia\SXModPlayer.pas"/>
<DCCReference Include="SXMedia\SXMovie.pas"/>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX290.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Android">False</Platform>
<Platform value="iOSDevice32">False</Platform>
<Platform value="iOSSimulator">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX290.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/SXLib.pas
0,0 → 1,3139
unit SXlib;
 
//Simplified X handling routine
 
interface
{$INCLUDE DelphiXcfg.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
{$IFDEF QDA_SUPPORT}QDArc,{$ENDIF}
DXDraws, DirectX, D3DUtils, DXClass;
 
(* SXF形式について
 
name | ofs | length | comment
----------------------------------------------------------------------------------------------------
Signature | 0 | 16 | 'Simplified_X01 '
nVextices | 16 | 2 | number of vertices
nIndices | 18 | 2 | number of indices for vertices
dwFVF | 20 | 4 | flags for flexible vertex format
VertexSize| 24 | 4 | required bytes per vertex
 
Vertices | 256 | VertexSize * nVertices | vertices
Indices | 256+Vertices | 2 * nIndices | indices for vertices
 
*)
 
(* SX形式について(古い)
 
name | ofs | length | comment
----------------------------------------------------------------------------
Signature | 0 | 16 | 'Simplified_X00 '
nVextices | 16 | 2 | number of vertices
nIndices | 18 | 2 | number of indices for vertices
 
Vertices | 256 | 40 * nVertices | vertices(TSXVertex)
Indices | 256+Vertices | 2 * nIndices | indices for vertices
 
*)
 
const
 
//SXファイル識別子
//SX file identifier
SX_SIGNATURE: string[16] = 'Simplified_X00 '; //SXFlexible
SXF_SIGNATURE: string[16] = 'Simplified_X01 '; //古いSX
 
//メッシュを描画するときに一度にDirect3Dに流し込む頂点の最大数(必ず3の倍数)
//One at a time when drawing the flow into the maximum number of vertices Direct3D mesh (must be a multiple of 3)
DIV_VERTICES: Word = $FFFF;
 
 
 
//TSXVertex用、FVFフラグ
FVF_SXVERTEX: DWord = (D3DFVF_VERTEX or D3DFVF_DIFFUSE or D3DFVF_SPECULAR);
 
//TSXVertexMT用
FVF_SXVERTEXMT: DWord = (D3DFVF_XYZ or D3DFVF_NORMAL or D3DFVF_DIFFUSE or D3DFVF_SPECULAR or D3DFVF_TEX2);
 
type
TSXMesh = class;
TSXFrame = class;
TSXFrameList = class;
TSXScene = class;
TSXRenderingQueue = class;
 
//SX形式のための頂点データ
//Vertex data for the SX-style
TSXVertex = packed record
 
case Integer of
0: (
x, y, z: Single; //頂点
nx, ny, nz: Single; //法線
diffuse: TD3DCOLOR; //ディフューズ
specular: TD3DCOLOR; //スペキュラ
tu, tv: Single; //テクスチャ座標 ** Texture coordinates
);
1: (
pos: TD3DVector;
normal: TD3DVector;
);
end;
 
PSXVertex = ^TSXVertex;
 
TSXVertexArray = array[0..$FFFFFF] of TSXVertex;
PSXVertexArray = ^TSXVertexArray;
 
//マルチテクスチャ対応SXVertex
//SXVertex multi-texture support
TSXVertexMT = packed record
case Integer of
0: (
x, y, z: Single; //頂点
nx, ny, nz: Single; //法線
diffuse: TD3DCOLOR; //ディフューズ
specular: TD3DCOLOR; //スペキュラ
tu0, tv0: Single; //テクスチャ座標
tu1, tv1: Single; //テクスチャ座標(2)
);
1: (
pos: TD3DVector;
normal: TD3DVector;
);
end;
 
PSXVertexMT = ^TSXVertexMT;
 
TSXVertexArrayMT = array[0..$FFFFFF] of TSXVertexMT;
PSXVertexArrayMT = ^TSXVertexArrayMT;
 
//ビルボードのための頂点情報
//Billboard top information for
TSXVertexBB = record
case Integer of
0: (
//視点からの距離1の時の、中心からの相対座標
//At a distance from the viewpoint of the relative coordinate from the center
dx, dy: Single;
color: TD3DCOLOR; //色
tu, tv: Single; //テクスチャ座標
);
1: (
size: TSngPoint;
);
end;
 
//イベントハンドラ
//Event handler
TSXRenderMeshEvent = procedure(Sender: TSXFrame) of object;
 
//ブレンドモード
//Blend
// TSXBlendMode = (
// sxbDefault, //普通、透けない
// sxbAdd, //加算合成
// sxbAlpha, //半透明
// sxbSub //減算合成
// );
 
//可視属性
//Visible attribute
TSXVisibility = (
sxvShow, //見える
sxvHide, //隠れる。子フレームも含めて
sxvHideMyself //隠れる。子フレームは隠れない。
);
 
//クラス群
//Classes
 
//メッシュ用クラス
//The Mesh Class
TSXMesh = class
private
procedure SetVertexSize(const Value: DWord);
protected
FOwner: TDXDraw; //色々お世話になるDDDDオブジェクト
FVBuf: IDirect3DVertexBuffer7; //VertexBuffer
FIndexCount: Word; //頂点インデクスの数
FVertexCount: Word; //頂点の数
FFaceCount: Word; //面の数、常に頂点数/3
FVertexSize: DWord; //1個の頂点あたりのサイズ
FVFFlags: DWord; //描画させるときのフラグ
VertexKeepBuf: Pointer; //頂点の配列を入れる。Keep用のバッファとして使う
FIndices: array of Word; //頂点インデクス
FLocked: Boolean; //ロック中?
FPVertex: Pointer; //頂点バッファへのポインタ
FRecovery: Boolean; //リカバリ中?
function GetIndex(idx: Word): Word;
function GetVertex(idx: Word): Pointer;
procedure SetIndex(idx: Word; const Value: Word);
procedure SetVertex(idx: Word; const Value: Pointer);
public
constructor Create(AOwner: TDXDraw);
destructor Destroy; override;
procedure KeepVB; //画面が初期化される時の事を考えて、現在のVBの状態を保持
procedure RecoverVB; //保持したVBを復元
property VertexBuffer: IDirect3DVertexBuffer7 read FVBuf; //VertexBuffer
property IndexCount: Word read FIndexCount; //頂点インデクスの数
property VertexCount: Word read FVertexCount; //頂点の数
property FaceCount: Word read FFaceCount; //面の数(頂点の数 / 3
property Vertex[idx: Word]: Pointer read GetVertex write SetVertex; //頂点への参照
property Index[idx: Word]: Word read GetIndex write SetIndex; //頂点インデクス
property FVF: DWord read FVFFlags write FVFFlags; //FlexibleVertexFormatに関するフラグ
property VertexSize: DWord read FVertexSize write SetVertexSize;
procedure Draw(dwFlags: DWord); //DrawIndexedPrimitiveVBで全部描画
procedure DrawPartial(start: Word; count: Word; dwFlags: DWord); //DrawIndexedPrimitiveVBで部分描画
procedure LoadFromStream(s: TStream);
procedure LoadFromFile(fileName: string);
{$IFDEF QDA_SUPPORT}
procedure LoadFromQDA(QDAName, QDAID: string);
{$ENDIF}
function Lock: Pointer;
procedure Unlock;
procedure SetSize(newVertexCount, newIndexCount: Word); //バッファの大きさを再設定する、中身は消える
procedure Optimize;
end;
 
{
TSXMesh = class(TSXGenMesh)
private
function GetVertex(idx: Word): TSXVertex; override;
procedure SetVertex(idx: Word; const Value: TSXVertex); override;
public
 
property Vertex[idx:Word]:TSXVertex read GetVertex write SetVertex; //頂点
function Lock:PSXVertexArray;
end;
}
 
//フレーム
//The Frame
TSXFrame = class
private
FMatrix: TD3DMATRIX; //変換行列(自分の座標系→親座標系)
FMeshMatrix: TD3DMATRIX; //メッシュ描画時の変換行列…メッシュ座標→自分座標
 
FAncestors: TSXFrameList; //祖先フレーム達
FChildren: TSXFrameList; //子フレーム達
FParent: TSXFrame; //親フレーム(Ancestors[Ancestors.Count-1]と同)
FVisibility: TSXVisibility; //可視属性
FBindRenderState: Boolean; //自分の子孫のレンダリングステートを、強制的に自分のにする
FBindTexture: Boolean; //自分の子孫のテクスチャを、強制的に自分のにする
FBindMaterial: Boolean; //自分の子孫のマテリアルを、強制的に自分のにする
 
RenderedMatrix: TD3DMATRIX; //最後にレンダリングされたときのワールド行列(ビルボードの描画に使用)
BBAttached: Boolean; //ビルボードがくっついてる?
 
function GetWorldMatrix: TD3DMATRIX;
procedure SetParent(const Value: TSXFrame);
 
public
 
//中身
Texture: TDirect3DTexture2; //メッシュに貼り付けるテクスチャ
Mesh: TSXMesh; //書き込むメッシュ
Material: TD3DMATERIAL7; //マテリアル
 
//レンダリングステートの制御
Lighting: Boolean; //True:ライティングをする, False:頂点の色をそのまま使う
Specular: Boolean; //スペキュラハイライトをつける
BlendMode: TRenderType; //描画時のブレンドモード
 
//イベントハンドラ
OnRenderMesh: TSXRenderMeshEvent; //メッシュをこれから書きますですイベント
 
//いろいろ
Tag: DWord; //整数値、なんにでも使って
RenderAttr: Integer; //整数値、OnRenderMeshで、マテリアル番号代わりにどうぞ
 
//コンストラクタ・デストラクタ
constructor Create(parentFrame: TSXFrame);
destructor Destroy; override;
 
//親子関係
property Ancestors: TSXFrameList read FAncestors;
property Children: TSXFrameList read FChildren;
property Parent: TSXFrame read FParent write SetParent;
property BindRenderState: Boolean read FBindRenderState write FBindRenderState;
property BindTexture: Boolean read FBindTexture write FBindTexture;
property BindMaterial: Boolean read FBindMaterial write FBindMaterial;
 
//可視属性
property Visibility: TSXVisibility read FVisibility write FVisibility;
 
//座標変換関係
property Matrix: TD3DMATRIX read FMatrix write FMatrix;
property WorldMatrix: TD3DMATRIX read GetWorldMatrix; //自分座標→ワールド座標の変換行列
property MeshMatrix: TD3DMATRIX read FMeshMatrix write FMeshMatrix; //メッシュ描画時の変換行列…メッシュ座標→自分座標
 
procedure SetTransform(ref: TSXFrame; const mat: TD3DMATRIX);
function GetTransform(ref: TSXFrame): TD3DMATRIX;
 
function LocalToWorld(vec: TD3DVector): TD3DVector; //フレーム内での座標を、ワールド座標に変換する
function WorldToLocal(vec: TD3DVector): TD3DVector; //ワールド座標内の座標をフレーム内の座標に変換する
 
//位置
procedure SetTranslation(ref: TSXFrame; const pos: TD3Dvector);
function GetTranslation(ref: TSXFrame): TD3DVector;
 
//姿勢
//…軸ベクトルで設定・取得
procedure SetOrientation(ref: TSXFrame; const vecZ: TD3DVector; const vecY: TD3DVector);
procedure GetOrientation(ref: TSXFrame; var vecZ: TD3DVector; var vecY: TD3DVector);
//…マトリクスを与えて姿勢だけ設定
procedure SetOrientationMatrix(ref: TSXFrame; const mat: TD3DMATRIX);
 
//お便利
//…Z軸をtargetフレーム内の座標posを向ける。Y軸はworldフレーム内のY軸に向け。Y軸の傾きをbank度とする
procedure LookAt(target: TSXFrame; const pos: TD3DVector; world: TSXFrame; const bank: Integer);
function ViewMatrix: TD3DMatrix; //このフレームをカメラにした場合のビュー行列を生成
end;
 
//フレームのリスト
//List of frames
TSXFrameList = class(TList)
private
function GetFrame(idx: Integer): TSXFrame;
procedure SetFrame(idx: Integer; const Value: TSXFrame);
public
property Frames[idx: Integer]: TSXFrame read GetFrame write SetFrame; default;
constructor Create;
destructor Destroy; override;
procedure Assign(source: TSXFrameList);
end;
 
//シーン全体
TSXScene = class
private
FCamera: TSXFrame;
FOwner: TDXDraw;
 
FProjectionMatrix: TD3DMATRIX;
FVP: TD3DVIEWPORT7;
 
OpaqueQueue: TSXRenderingQueue; //不透明体用のキュー
AlphaQueue: TSXRenderingQueue; //半透明透明体用のキュー
AddQueue: TSXRenderingQueue; //加算半透明体用のキュー
SubQueue: TSXRenderingQueue; //減算半透明体用のキュー
 
//ProcessVertices用
//MeshProcessor:TSXMesh; //Lightingをしないとき・環境マップする時用
//MeshProcessorMT:TSXMesh; //同上、ただしマルチテクスチャ(2ステージ)版
public
constructor Create(DDCompo: TDXDraw);
destructor Destroy; override;
 
property CameraFrame: TSXFrame read FCamera write FCamera; //視点を置くフレーム
 
procedure Render(rootFrame: TSXFrame); //rootFrame以下を描画
procedure Clear(dwFlags: DWord; color: DWORD; z: Single; stencil: DWord); //バックバッファのクリア
 
procedure SetProjection(fov, aspect, nearZ, farZ: Single); //透視変換の設定
procedure SetViewPort(left, top, right, bottom: DWord); //ビューポート
 
procedure Recover; //ビューポートなどの状態をリストア
 
procedure PushBillboard(blendMode: TRenderType; ref: TSXFrame; pos: TD3DVector; points: array of TSXVertexBB; tex: TDirect3DTexture2);
function SphereVisibility(ref: TSXFrame; pos: TD3DVector; radius: Single; depth: Single): Boolean; //refフレーム内にある、中心pos、半径radiusの球は見えるか、但し、距離がdepth以上なら見えないものとする
end;
 
//ライト
TSXLight = class
private
FOwner: TDXDraw;
FIndex: DWord; //SetLightに渡す、インデクス
FEnabled: Boolean;
FUpdate: Boolean; //パラメータの変更を、即反映
procedure SetEnabled(const Value: Boolean);
public
Params: TD3DLIGHT7;
 
constructor Create(DDCompo: TDXDraw; index: DWord);
destructor Destroy; override;
 
procedure BeginUpdate; //Paramsの内容を、Direct3Dに伝えなくする
procedure EndUpdate; //Paramsの内容を、Direct3Dに伝えなくした状態を解除
 
property Enabled: Boolean read FEnabled write SetEnabled;
 
//お便利ルーチン
procedure SetupDiffuse(_R, _G, _B: Single);
procedure SetupSpecular(_R, _G, _B: Single);
procedure SetupAmbient(_R, _G, _B: Single);
 
procedure SetupColors(difR, difG, difB, specR, specG, specB, ambR, ambG, ambB: Single);
procedure SetupRanges(range, att0, att1, att2: Single);
 
procedure SetupDirectional(dir: TD3DVector);
procedure SetupPoint(pos: TD3DVector);
procedure SetupSpot(pos, dir: TD3DVector; theta, phi, falloff: Single);
 
procedure FitFrame(target: TSXFrame); //フレームの位置・向きにセットする
end;
 
//複数のライトを管理するオブジェクト
TSXLightGroup = class(TList)
private
FOwner: TDXDraw;
FCapacity: DWord; //管理するライトの数
FLights: array of TSXLight;
//FSpecularPower:Single; //スペキュラ強度
function GetLights(idx: DWord): TSXLight;
function GetUnusedLight: TSXLight;
// procedure SetSpecularPower(const Value: Single);
public
constructor Create(DDCompo: TDXDraw; capacity: DWord);
destructor Destroy; override;
 
property Lights[idx: DWord]: TSXLight read GetLights; default;
property UnusedLight: TSXLight read GetUnusedLight; //Enabledになってない、最初のライトを返す
//property SpecularPower:Single read FSpecularPower write SetSpecularPower;
 
procedure EnableAll; //全部点ける
procedure DisableAll; //全部消す
 
procedure Recover; //解像度を変えた後などのリカバリ
end;
 
TSXMaterial = class
private
FOwner: TDXDraw;
FUpdate: Boolean;
public
Params: TD3DMATERIAL7;
constructor Create(DDCompo: TDXDraw);
 
procedure BeginUpdate; //Paramsの内容を、Direct3Dに伝えなくする
procedure EndUpdate; //Paramsの内容を、Direct3Dに伝えなくした状態を解除
 
procedure SetupDiffuse(_R, _G, _B: Single);
procedure SetupSpecular(_R, _G, _B: Single);
procedure SetupAmbient(_R, _G, _B: Single);
procedure SetupEmissive(_R, _G, _B: Single);
procedure SetupSpecularPower(pow: Single);
 
procedure SetupColors(difR, difG, difB, specR, specG, specB, ambR, ambG, ambB, emsR, emsG, emsB, pow: Single);
end;
 
//メッシュ描画キューに入れる情報
TSXMeshInfo = record
frame: TSXFrame; //そのメッシュを描こうとしたフレームはどれ?
mesh: TSXMesh; //メッシュ
mat: TD3DMatrix; //変換行列
tex: TDirect3DTexture2; //テクスチャ
mtrl: TD3DMATERIAL7; //マテリアル
lighting: Boolean; //光源計算する/しない
OnRender: TSXRenderMeshEvent;
end;
 
//ビルボード描画キューに入れる情報
TSXBillboardInfo = record
ref: TSXFrame; //基準フレーム
pos: TD3DVector; //基準フレーム内での位置
tex: TDirect3DTexture2; //テクスチャ
pts: array[0..3] of TSXVertexBB; //頂点データ
end;
 
//レンダリングの順序を保つためのバッファ、透明体かそうでないかで順序を変える。
//Render order to maintain the buffer, or not change the order in a transparent body.
TSXRenderingQueue = class
private
FOwner: TDXDraw; //色々お世話になるDDDDオブジェクト
Scene: TSXScene; //この
 
MeshQueue: array of TSXMeshInfo;
BillboardQueue: array of TSXBillboardInfo;
 
FMeshCapacity: Integer; //メッシュを情報蓄える容量
FBillboardCapacity: Integer;
 
FMeshCount: Integer; //キューに入ってる数
FBillboardCount: Integer;
 
procedure SetBillBoardCapacity(const Value: Integer);
procedure SetMeshCapacity(const Value: Integer); //ビルボードについての情報を蓄える容量
public
constructor Create(AOwner: TDXDraw; _Scene: TSXScene);
destructor Destroy; override;
procedure PushMesh(mesh: TSXMesh; frame: TSXFrame; mat: TD3DMatrix; tex: TDirect3DTexture2; mtrl: TD3DMATERIAL7; event: TSXRenderMeshEvent); //メッシュ
procedure PushBillboard(ref: TSXFrame; pos: TD3DVector; tex: TDirect3DTexture2; pts: array of TSXVertexBB); //ビルボード
procedure Render(viewMat: TD3DMATRIX; viewParam: TD3DVIEWPORT7); //レンダリング
procedure Flush; //レンダリングせず、バッファの中を空に **Without rendering the buffer to empty
 
property MeshCapacity: Integer read FMeshCapacity write SetMeshCapacity;
property BillboardCapacity: Integer read FBillboardCapacity write SetBillBoardCapacity;
property MeshCount: Integer read FMeshCount;
property BillboardCount: Integer read FBillboardCount;
end;
 
{Renderer of the primitive}
 
TSXPrimitiveRec = packed record
Texture: TDirect3DTexture2; //テクスチャ
Bound: array[0..3] of TD3DTLVertex; //四角形
ZOrder: Integer; //Zオーダ
BlendMode: TRenderType; //ブレンドモード
end;
PPrimitive = ^TSXPrimitiveRec;
 
TSXTextureCoordRec = packed record
Texture: TDirect3DTexture2;
Top, Left, Bottom, Right: Single; //テクスチャ座標
end;
PTextureCoord = ^TSXTextureCoordRec;
 
TSingleRect = packed record
Left, Top, Right, Bottom: Single;
end;
 
TSXPrimitiveRenderer = class
private
FDXDraw: TDXDraw;
FZMax: Integer; //Zオーダの最大値
FMaxPrimitives: Integer; //格納できるTLVの最大値
 
ZSortBuf: ^Integer; //Zソート用バッファ
ZSortCount: ^Integer; //Zソート用カウンタ
PrimBuf: PPrimitive; //プリミティブ入れ
PrimCount: Integer; //現在PrimBufに入ってるプリミティブの数
Patterns: PTextureCoord; //テクスチャパターン
FNPrims: Integer; //最後にUpdateメソッドを発行した際の、プリミティブの数
FColorKey: Boolean; //カラーキーによる抜き色を行う?
procedure setZMax(v: Integer);
public
constructor Create(DDCompo: TDXDraw; PrimitiveCount: Integer; PatternCount: Integer);
destructor Destroy; override;
property ZMax: Integer read FZMax write setZMax;
 
procedure SetPattern(idx: Integer; Tex: TDirect3DTexture2; Coord: TRect); //パターンとしてTexのCoordで示される範囲を登録
 
procedure Push(Tex: TDirect3DTexture2; p1, p2, p3, p4: TD3DTLVertex; Z: Integer; blend: TRenderType); //TLVertexで四角形を入れる
procedure Push2D(Tex: TDirect3DTexture2; p1, p2, p3, p4: TD2DVector; Z: Integer; blend: TRenderType; col: DWord); //2D的な四角形
 
procedure PushPattern(iPat: Integer; p1, p2, p3, p4: TD3DHVector; Z: Integer; blend: TRenderType; col: DWord); //パターンをプッシュ(3次元)
procedure PushPattern2D(iPat: Integer; p1, p2, p3, p4: TD2DVector; Z: Integer; blend: TRenderType; col: DWord); //パターンをプッシュする
procedure PushPatternRect(iPat: Integer; rect: TSingleRect; Z: Integer; blend: TRenderType; col: DWord); //パターンをプッシュする(矩形)
 
procedure BeginRender; //Z値にしたがってソート
procedure RenderOneLayer(Z: Integer); //単一のZ値を持つ集合だけ描画
procedure EndRender; //スタックを空に
procedure Render; //全部描画(BeginRender~RenderOneLayer~EndRender)
 
property nPrims: Integer read FNPrims;
property ColorKey: Boolean read FColorKey write FColorKey;
 
class function SingleRect(x1, y1, x2, y2: Single): TSingleRect;
end;
 
//SXVertex作成
function SXVertex(x, y, z, nx, ny, nz: Single; dif, spec: TD3DCOLOR; tu, tv: Single): TSXVertex;
 
//SXVertexBB作成
function SXVertexBB(dx, dy: Single; col: TD3DCOLOR; tu, tv: Single): TSXVertexBB;
 
//マテリアル設定の便宜を図る関数
//Convenience function for setting material
function MakeMaterial(difR, difG, difB, specR, specG, specB, ambR, ambG, ambB, emsR, emsG, emsB, pow: Single): TD3DMATERIAL7;
 
implementation
 
type
TSXTLVertexMT = packed record
case Integer of
0: (
x, y, z, rhw: Single; //頂点
diffuse: TD3DCOLOR; //ディフューズ
specular: TD3DCOLOR; //スペキュラ
tu0, tv0: Single; //テクスチャ座標
tu1, tv1: Single; //テクスチャ座標2
);
1: (
pos: TD3DVector;
);
2: (
hgPos: TD3DHVector;
);
end;
 
const
FVF_SXTLVertexMT: DWord = (D3DFVF_XYZRHW or D3DFVF_DIFFUSE or D3DFVF_SPECULAR or D3DFVF_TEX2);
 
{ Helper functions }
 
function SXVertex(x, y, z, nx, ny, nz: Single; dif, spec: TD3DCOLOR; tu, tv: Single): TSXVertex;
begin
result.x := x;
result.y := y;
result.z := z;
result.nx := nx;
result.ny := ny;
result.nz := nz;
 
result.diffuse := dif;
result.specular := spec;
 
result.tu := tu;
result.tv := tv;
 
end;
 
function SXVertexBB(dx, dy: Single; col: TD3DCOLOR; tu, tv: Single): TSXVertexBB;
begin
result.dx := dx;
result.dy := dy;
 
result.color := col;
 
result.tu := tu;
result.tv := tv;
end;
 
{ TSXMesh }
 
//コンストラクタ
//Constructor
 
constructor TSXMesh.Create(AOwner: TDXDraw);
begin
inherited Create;
 
FOwner := AOwner;
FVBuf := nil;
SetLength(FIndices, 0);
FIndexCount := 0;
FFaceCount := 0;
FVertexCount := 0;
VertexKeepBuf := nil;
 
FVertexSize := sizeof(TSXVertex);
FVFFlags := FVF_SXVERTEX;
 
FLocked := False;
FRecovery := False;
 
end;
 
//デストラクタ
//Destructor
 
destructor TSXMesh.Destroy;
begin
if FVBuf <> nil then
FVBuf := nil; //._Release;
 
if VertexKeepBuf <> nil then
FreeMem(VertexKeepBuf);
 
FIndices := nil;
 
inherited;
end;
 
//現在のVertexBufferの状態を保持
//Currently holds the state of VertexBuffer
 
procedure TSXMesh.KeepVB;
begin
if FVBuf <> nil then
begin
//バッファサイズの変更
//Resizing of the buffer
if VertexKeepBuf <> nil then
FreeMem(VertexKeepBuf);
VertexKeepBuf := AllocMem(VertexSize * FVertexCount);
 
Self.Lock;
Move(FPVertex^, VertexKeepBuf^, VertexSize * FVertexCount);
Self.Unlock;
end;
end;
 
//保存したVertexBufferの状態を復元
//Restore the state saved VertexBuffer
 
 
procedure TSXMesh.RecoverVB;
begin
 
if FVBuf <> nil then
begin
//リカバリ期間・開始
//Recovery period begins
FRecovery := True;
FVBuf := nil;
 
SetSize(FVertexCount, FIndexCount);
 
Self.Lock;
Move(VertexKeepBuf^, FPVertex^, VertexSize * FVertexCount);
Self.Unlock;
 
FreeMem(VertexKeepBuf);
VertexKeepBuf := nil;
FRecovery := False;
//リカバリ期間・終了
//Recovery period ends
end;
end;
 
//DPで描画
//Simple DP draw
 
procedure TSXMesh.Draw(dwFlags: DWord);
var
ofs: Word;
nIs: Word;
begin
ofs := 0;
while ofs < FIndexCount do
begin
 
nIs := FIndexCount - ofs;
if nIs > DIV_VERTICES then
nIs := DIV_VERTICES;
 
FOwner.D3DDevice7.DrawIndexedPrimitiveVB(
D3DPT_TRIANGLELIST, FVBuf, 0, FVertexCount, FIndices[ofs], nIs, dwFlags);
 
Inc(ofs, nIs);
end;
end;
 
//DPで描画
//Draw DP strem of primitives
 
procedure TSXMesh.DrawPartial(start: Word; count: Word; dwFlags: DWord);
begin
FOwner.D3DDevice7.DrawIndexedPrimitiveVB(
D3DPT_TRIANGLELIST, FVBuf, 0, FVertexCount, FIndices[start], count, dwFlags);
end;
 
//インデクス操作
//Check index
 
function TSXMesh.GetIndex(idx: Word): Word;
begin
if idx >= FIndexCount then
begin
//DDDD_PutDebugMessage('SXLib: 範囲外の頂点インデクスを参照しようとしました');
result := 0;
exit;
end;
 
result := FIndices[idx];
end;
 
procedure TSXMesh.SetIndex(idx: Word; const Value: Word);
begin
if idx >= FIndexCount then
begin
//DDDD_PutDebugMessage('SXLib: 範囲外の頂点インデクスを設定しようとしました');
exit;
end;
 
FIndices[idx] := Value;
end;
 
//頂点操作
//Operation on Vertex
 
function TSXMesh.GetVertex(idx: Word): Pointer;
var
pV: Pointer;
ofs: DWord;
lpdwSize: Cardinal;
begin
//範囲チェック
//check range
if idx >= FVertexCount then
begin
//DDDD_PutDebugMessage('SXLib: 範囲外の頂点を参照しようとしました');
result := nil;
exit;
end;
 
//ロックされていないなら、ロック。ロックされてるなら、前に得たポインタをゲット
//when is unlocked, then lock there
if not FLocked then
begin
if FVBuf.Lock(DDLOCK_READONLY or DDLOCK_WAIT, pV, lpdwSize) <> DD_OK then
begin
//DDDD_PutDebugMessage('SXLib: VertexBufferがロックできません');
Halt;
end;
end
else
pV := FPVertex;
 
//返り値に格納
//calc place of vertices
ofs := idx * VertexSize;
asm
mov eax,ofs;
add pV,eax;
end;
result := pV;
 
//アンロック
//unlock
if not FLocked then
begin
if FVBuf.Unlock <> DD_OK then
begin
//DDDD_PutDebugMessage('SXLib: VertexBufferがアンロックできません');
Halt;
end;
end;
 
end;
 
procedure TSXMesh.SetVertex(idx: Word; const Value: Pointer);
var
ofs: DWord;
pV: ^TSXVertex;
lpdwSize: Cardinal;
begin
//範囲チェック
//check range
if idx >= FVertexCount then
begin
//DDDD_PutDebugMessage('SXLib: 範囲外の頂点を変更しようとしました');
exit;
end;
 
//ロックされていないなら、ロック。ロックされてるなら、前に得たポインタをゲット
//Test when unlocked, and after test lock
if not FLocked then
begin
if FVBuf.Lock(DDLOCK_WRITEONLY or DDLOCK_WAIT, Pointer(pV), lpdwSize) <> DD_OK then
begin
//DDDD_PutDebugMessage('SXLib: VertexBufferがロックできません');
Halt;
end;
end
else
pV := FPVertex;
 
//格納するっす
//physic size of vertices stream
ofs := idx * VertexSize;
asm
mov eax,ofs;
add pV,eax;
end;
Move(Value^, pV^, VertexSize);
 
//Unlock
if not FLocked then
begin
if FVBuf.Unlock <> DD_OK then
begin
//DDDD_PutDebugMessage('SXLib: VertexBufferがアンロックできません');
Halt;
end;
end;
end;
 
//1Vertexあたりのサイズを変更
//Set size for all Vertexes
procedure TSXMesh.SetVertexSize(const Value: DWord);
begin
FVertexSize := Value;
SetSize(FVertexCount, FIndexCount);
end;
 
//ストリームから読み込み
//Reading from strem
 
procedure TSXMesh.LoadFromStream(s: TStream);
var
sign: array[0..16] of AnsiChar;
nVertices, nIndices: Word;
StartPos: Integer;
begin
 
StartPos := s.Position;
 
//シグネチャの確認
//Check of the signature
sign[16] := Chr(0);
s.ReadBuffer(sign, 16);
 
if StrPas(sign) = SX_SIGNATURE then
begin
//SX形式
FVertexSize := Sizeof(TSXVertex);
FVFFlags := FVF_SXVERTEX;
//頂点数・頂点インデクス数の設定
//Setting the number of vertices of vertex indices
s.ReadBuffer(nVertices, Sizeof(Word));
s.ReadBuffer(nIndices, Sizeof(Word));
end
else
if StrPas(sign) = SXF_SIGNATURE then
begin
//頂点数・頂点インデクス数の設定
//Setting the number of vertices of vertex indices
s.ReadBuffer(nVertices, Sizeof(Word));
s.ReadBuffer(nIndices, Sizeof(Word));
//SXFlexible format
s.ReadBuffer(FVFFlags, Sizeof(DWord));
s.ReadBuffer(FVertexSize, Sizeof(DWord));
end
else
begin
//DDDD_PutDebugMessage('SXLib: 不正なSXファイルです');
Halt;
end;
 
SetSize(nVertices, nIndices);
 
//ヘッダのスキップ
//Skip header
s.Position := StartPos + 256;
 
try
//頂点のロード
//Peak load
Lock;
s.ReadBuffer(FPVertex^, VertexSize * nVertices);
Unlock;
 
//頂点インデクスのロード
//Load indexes
s.ReadBuffer(FIndices[0], Sizeof(Word) * nIndices);
except
//DDDD_PutDebugMessage('SXLib: ストリームからの読み込み中にエラーが発生しました');
Halt;
end;
 
end;
 
//ファイルから読み込み
//Load from file by name
 
procedure TSXMesh.LoadFromFile(fileName: string);
var
fs: TFileStream;
begin
fs := nil;
 
try
fs := TFileStream.Create(filename, fmOpenRead);
except
//DDDD_PutDebugMessage('SXLib: ' + filename + ' が、開けません');
Halt;
end;
 
LoadFromStream(fs);
fs.Free;
end;
 
{$IFDEF QDA_SUPPORT}
//QDAから読み込み
procedure TSXMesh.LoadFromQDA(QDAName, QDAID: string);
var
ms: TMemoryStream;
begin
ms := nil;
 
try
ms := ExtractFromQDAFile(QDAName, QDAID);
except
//DDDD_PutDebugMessage('SXLib: ' + QDAname + ' 内の、' + QDAID + 'が抽出できません');
Halt;
end;
 
LoadFromStream(ms);
ms.Free;
end;
{$ENDIF}
 
//VertexBuffer Lock
 
function TSXMesh.Lock: Pointer;
var lpdwSize: Cardinal;
begin
if FVBuf.Lock(DDLOCK_WAIT, Pointer(FPVertex), lpdwSize) <> DD_OK then
begin
//DDDD_PutDebugMessage('SXLib: VertexBufferがロックできません');
Halt;
end;
 
result := FPVertex;
FLocked := True;
end;
 
//VertexBuffer unlock
 
procedure TSXMesh.Unlock;
begin
if FVBuf.Unlock <> DD_OK then
begin
//DDDD_PutDebugMessage('SXLib: VertexBufferがアンロックできません');
Halt;
end;
 
FLocked := False;
end;
 
//頂点配列とインデクス配列のサイズを再設定
//Reconfigure the size of the array and vertex array indices
 
procedure TSXMesh.SetSize(newVertexCount, newIndexCount: Word);
var
vbdesc: TD3DVERTEXBUFFERDESC;
begin
FVertexCount := newVertexCount;
FIndexCount := newIndexCount;
FFaceCount := newIndexCount div 3;
 
//まず、既存のVertexBufferの解放
//When exist VertexBuffer, release it
if FVBuf <> nil then
FVBuf := nil; //.Release;
 
//VertexBufferの生成
//Generate VertexBuffer
ZeroMemory(@vbdesc, Sizeof(vbdesc));
with vbdesc do
begin
dwSize := Sizeof(vbdesc);
{$IFNDEF D3D_deprecated}
if not (dtTnLHAL in FOwner.D3DDeviceTypeSet) then
dwCaps := D3DVBCAPS_SYSTEMMEMORY
else
{$ENDIF}
dwCaps := 0;
 
dwFVF := FVFFlags;
dwNumVertices := newVertexCount;
end;
FOwner.D3D7.CreateVertexBuffer(vbdesc, FVBuf, 0);
 
//頂点インデクス配列の設定
//Vertex set of the array index
 
if not FRecovery then
SetLength(FIndices, newIndexCount);
 
end;
 
//最適かするっ。ロックとかはできなくなるよ
//Optimize, cannot be locked
procedure TSXMesh.Optimize;
begin
FVBuf.Optimize(FOwner.D3DDevice7, 0);
end;
 
{ TSXFrame }
 
constructor TSXFrame.Create(parentFrame: TSXFrame);
begin
inherited Create;
 
//親子関係の初期化
//Initialize parent-child relationship
FAncestors := TSXFrameList.Create;
if ParentFrame <> nil then
begin
//Ancestral copy of the list
FAncestors.Assign(parentFrame.Ancestors); //先祖リストのコピー
//Fathers at the end of the list, put the parent
FAncestors.Add(parentFrame); //先祖リストの末尾に、親を入れる
//Parents put their children to the list
ParentFrame.Children.Add(Self); //親の子リストに自分をつける
end;
 
FChildren := TSXFrameList.Create;
FParent := parentFrame;
 
FBindMaterial := False;
FBindRenderState := False;
FBindTexture := False;
 
 
//変数とかの初期化
//Variable Or First Initialization
 
FMatrix := D3DUtil_SetIdentityMatrix;
FMeshMatrix := D3DUtil_SetIdentityMatrix;
 
BlendMode := rtDraw;
Material := MakeMaterial(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.0);
 
Visibility := sxvShow;
Lighting := True;
Specular := True;
 
 
OnRenderMesh := nil;
Mesh := nil;
Texture := nil;
 
end;
 
destructor TSXFrame.Destroy;
begin
inherited;
 
while Children.Count > 0 do
begin //This child frame is recursively Freed
Children[0].Free; //これで、再帰的に子フレームがFreeされる
end;
 
//リストオブジェクトの解放
//Object free list
 
FChildren.Free;
FAncestors.Free;
 
//親のリストから自分をはずす
//Remove yourself from the list of parents
 
if Parent <> nil then
Parent.Children.Delete(Parent.Children.IndexOf(Self));
 
end;
 
//自分の座標→ワールド座標 のための変換行列を得る
//To obtain the world coordinate transformation matrix → coordinate their
 
function TSXFrame.GetWorldMatrix: TD3DMATRIX;
var
mat: TD3DMATRIX;
i: Integer;
begin
 
mat := FMatrix;
 
//祖先のマトリクスを 親→祖父… の順に乗じていく。
//Ancestors[0] はNilであり、途中にNilは入らないという前提の下に計算
// Parent → grandfather ... we multiply the matrix of the ancestral order.
// Ancestors [0] is not Nil, Nil way under the assumption that the fit is calculated
 
for i := Ancestors.Count - 1 downto 1 do
begin
{$IFDEF USE_S_MATHPACK}
mat := NowCompositeMatrix(mat, Ancestors[i].FMatrix);
{$ELSE}
D3DMath_MatrixMultiply(mat, FMatrix, Ancestors[i].FMatrix)
{$ENDIF}
end;
 
result := mat;
end;
 
//…Z軸をtargetフレーム内の座標posを向ける。worldフレームのY軸をupベクトルに指定し、Y軸のZ軸回りの傾きをbank度とする
// Z axis toward the target coordinates in the frame pos. Y-axis of world frame specified in the up vector, Y and Z axis tilt of the axis around which at bank
 
procedure TSXFrame.LookAt(target: TSXFrame; const pos: TD3DVector; world: TSXFrame; const bank: Integer);
var
vRel: TD3DVECTOR; //Targetとの相対座標 //Target coordinates to relative
vecCeil: TD3Dvector; //天井のベクトル //Vector Ceiling
vecX, vecY, vecZ: TD3DVECTOR;
normX: Single; //X軸の長さ(天井とZが平行かどうかのチェック用)
//The length of the X-axis (Z and for checking whether the ceiling parallel)
begin
 
{
//targetのposは、自分の座標系でどこなのか
vRel:=WorldToLocal(target.LocalToWorld(pos));
 
//向き = Z軸ベクトル
vecZ:=NowNormalize(vRel);
 
//YZ平面にvRelを射影して、X軸と外積を取って新しいY軸を得る
vecY:=NowCrossProduct(Vector(0,vecZ.Y,vecZ.Z), Vector(1,0,0));
 
vecY:=NowNormalize(vecY);
 
SetOrientation(Self, vecZ, vecY);
}
 
 
//targetのposは、自分の座標系でどこなのか
//pos of target, or a coordinate system where one
 
vRel := WorldToLocal(target.LocalToWorld(pos));
 
//向き = Z軸ベクトル
//Direction = Z axis vector
 
{$IFDEF USE_S_MATHPACK}
vecZ := NowNormalize(vRel);
{$ELSE}
vecZ := D3DMath_VecNormalize(vRel);
{$ENDIF}
//天井の向き = worldのY軸
//Ceiling Direction = World of the Y-axis
 
{$IFDEF USE_S_MATHPACK}
vecCeil := NowSub(WorldToLocal(world.LocalToWorld(Vector(0, 1, 0))), WorldToLocal(world.LocalToWorld(Vector(0, 0, 0))));
vecCeil := NowNormalize(vecCeil);
{$ELSE}
vecCeil := D3DMath_Vec3Subtract(WorldToLocal(world.LocalToWorld(MakeD3DVector(0, 1, 0))), WorldToLocal(world.LocalToWorld(MakeD3DVector(0, 0, 0))));
vecCeil := D3DMath_VecNormalize(vecCeil);
{$ENDIF}
 
//天井とZで外積を取って、Xの向きとする
//Taking the cross product in the ceiling and Z and the direction of the X
 
{$IFDEF USE_S_MATHPACK}
vecX := NowCrossProduct(vecCeil, vecZ);
{$ELSE}
vecX := D3DMath_Vec3Cross(vecCeil, vecZ);
{$ENDIF}
 
//天井とZが平行な場合、右耳の方向をworldのX軸にする
//And Z is parallel to the ceiling, the direction of the X-axis of the world right ear
{$IFDEF USE_S_MATHPACK}
normX := NowLength(vecX);
{$ELSE}
normX := D3DMath_Vec3Length(vecX);
{$ENDIF}
if normX < 0.0001 then
{$IFDEF USE_S_MATHPACK}
vecX := NowSub(WorldToLocal(world.LocalToWorld(Vector(1, 0, 0))), WorldToLocal(world.LocalToWorld(Vector(0, 0, 0))));
{$ELSE}
vecX := D3DMath_Vec3Subtract(WorldToLocal(world.LocalToWorld(MakeD3DVector(1, 0, 0))), WorldToLocal(world.LocalToWorld(MakeD3DVector(0, 0, 0))));
{$ENDIF}
 
{$IFDEF USE_S_MATHPACK}
vecX := NowNormalize(vecX);
{$ELSE}
vecX := D3DMath_VecNormalize(vecX);
{$ENDIF}
 
//XとZで外積を取って、Yの向きとする
//Taking the cross product in X and Z direction and the Y
 
{$IFDEF USE_S_MATHPACK}
vecY := NowNormalize(NowCrossProduct(vecZ, vecX));
{$ELSE}
vecY := D3DMath_VecNormalize(D3DMath_Vec3Cross(vecZ, vecX));
{$ENDIF}
 
//以上で姿勢の計算完了~セット
//Complete set - at least calculate the position
 
SetOrientation(Self, vecZ, vecY);
 
//バンク
//Bank
if bank <> 0 then
{$IFDEF USE_S_MATHPACK}
SetTransform(Self, NowRotZMatrix(bank));
{$ELSE}
begin
SetTransform(Self, D3DUtil_SetRotateZMatrix(bank));
end;
{$ENDIF}
end;
 
//refに対する変換行列の設定
 
procedure TSXFrame.SetTransform(ref: TSXFrame; const mat: TD3DMATRIX);
begin
 
if ref = Self then
begin
//自分への変換行列
{$IFDEF USE_S_MATHPACK}
FMatrix := NowCompositeMatrix(mat, FMatrix);
{$ELSE}
FMatrix := D3DMath_MatrixMultiply(mat, FMatrix)
{$ENDIF}
 
 
end
else
if ref = Parent then
begin
//親への変換行列
//Transformation matrix to the parent
FMatrix := mat;
 
end
else
begin
 
//自分→ref→ワールド→親
//Ones to ref to World to Parent
if Parent <> nil then
begin
if ref <> nil then
{$IFDEF USE_S_MATHPACK}
FMatrix := NowCompositeMatrix(
NowCompositeMatrix(mat, ref.WorldMatrix),
NowInvMatrix(Parent.WorldMatrix)
)
{$ELSE}
begin
FMatrix := D3DMath_MatrixMultiply(D3DMath_MatrixMultiply(mat, WorldMatrix), D3DMath_MatrixInvert(Parent.WorldMatrix))
end
{$ENDIF}
else
{$IFDEF USE_S_MATHPACK}
FMatrix := NowCompositeMatrix(mat, NowInvMatrix(Parent.WorldMatrix));
{$ELSE}
begin
FMatrix := D3DMath_MatrixMultiply(mat, D3DMath_MatrixInvert(Parent.WorldMatrix));
end
{$ENDIF}
end
else
begin
if ref <> nil then
{$IFDEF USE_S_MATHPACK}
FMatrix := NowCompositeMatrix(mat, ref.WorldMatrix)
{$ELSE}
begin
FMatrix := D3DMath_MatrixMultiply(mat, ref.WorldMatrix)
end
{$ENDIF}
else
FMatrix := mat;
end;
end;
end;
 
//refに対する変換行列の取得
//ref to get the transformation matrix
 
function TSXFrame.GetTransform(ref: TSXFrame): TD3DMATRIX;
begin
 
if ref = Self then
begin
//自分への変換を得る…単位行列に決まってる。
//Their conversion to get ... I decided the matrix.
 
result := D3DUtil_SetIdentityMatrix;
 
end
else
if ref = Parent then
begin
 
//親へのオリエンテーションを得る
//Get to the parent orientation
 
result := FMatrix;
 
end
else
begin
 
//自分→ワールド→ref
//Ones to World to Ref
if ref <> nil then
{$IFDEF USE_S_MATHPACK}
result := NowCompositeMatrix(WorldMatrix, NowInvMatrix(ref.WorldMatrix))
{$ELSE}
begin
Result := D3DMath_MatrixMultiply(WorldMatrix, D3DMath_MatrixInvert(Parent.WorldMatrix));
end
{$ENDIF}
else
result := WorldMatrix;
end;
end;
 
//姿勢の設定
//Setting position
 
procedure TSXFrame.SetOrientation(ref: TSXFrame; const vecZ: TD3DVector;
const vecY: TD3DVector);
var
tmpMat: TD3DMATRIX; //refフレームとの相対変換行列 //relative to ref frame transformation matrix
vTrans: array[0..3] of Single; //平行移動成分の保存用 //Translation component storage
vecX: TD3DVECTOR;
begin
{$IFDEF USE_S_MATHPACK}
vecX := NowNormalize(NowCrossProduct(vecY, vecZ));
{$ELSE}
vecX := D3DMath_VecNormalize(D3DMath_Vec3Cross(vecY, vecZ));
{$ENDIF}
if ref = Parent then
begin
 
//親への姿勢を作るだけなら、簡単
//If you just make a commitment to parents, simply
 
with FMatrix do
begin
_11 := vecX.X; _12 := vecX.Y; _13 := vecX.Z;
_21 := vecY.X; _22 := vecY.Y; _23 := vecY.Z;
_31 := vecZ.X; _32 := vecZ.Y; _33 := vecZ.Z;
end;
 
end
else
begin
 
//平行移動成分の保存
//Save the translation component
 
vTrans[0] := FMatrix._41;
vTrans[1] := FMatrix._42;
vTrans[2] := FMatrix._43;
 
//変換
//transformation
with tmpMat do
begin
_11 := vecX.X; _12 := vecX.Y; _13 := vecX.Z; _14 := 0;
_21 := vecY.X; _22 := vecY.Y; _23 := vecY.Z; _24 := 0;
_31 := vecZ.X; _32 := vecZ.Y; _33 := vecZ.Z; _34 := 0;
_41 := vTrans[0]; _42 := vTrans[1]; _43 := vTrans[2]; _44 := 1;
end;
 
SetTransform(ref, tmpMat);
 
//Restoring the translation component
 
with FMatrix do
begin
_41 := vTrans[0]; _42 := vTrans[1]; _43 := vTrans[2];
end;
 
end;
 
end;
 
//位置の設定
//Set Position
 
procedure TSXFrame.SetTranslation(ref: TSXFrame; const pos: TD3Dvector);
var
tmpMat: TD3DMATRIX; //refフレームとの相対変換行列 //relative to ref frame transformation matrix
origMat: TD3DMATRIX; //For postural
 
begin
 
if ref = Parent then
begin
 
//親へのトランスレーションを作るだけなら、簡単
//If you only make the translation to the parent easily
 
with FMatrix do
begin
_41 := pos.X; _42 := pos.Y; _43 := pos.Z;
end;
 
end
else
begin
 
origMat := FMatrix;
tmpMat := FMatrix;
 
with tmpMat do
begin
_41 := pos.X; _42 := pos.Y; _43 := pos.Z;
end;
 
SetTransform(ref, tmpMat);
 
with FMatrix do
begin
_11 := OrigMat._11; _12 := OrigMat._12; _13 := OrigMat._13;
_21 := OrigMat._21; _22 := OrigMat._22; _23 := OrigMat._23;
_31 := OrigMat._31; _32 := OrigMat._32; _33 := OrigMat._33;
end;
end;
end;
 
procedure TSXFrame.GetOrientation(ref: TSXFrame; var vecZ,
vecY: TD3DVector);
var
tmpMat: TD3DMATRIX; //Results calculated buffer
begin
 
tmpMat := GetTransform(ref);
 
with vecY, tmpMat do
begin
X := _21; Y := _22; Z := _23;
end;
 
with vecZ, tmpMat do
begin
X := _31; Y := _32; Z := _33;
end;
end;
 
//姿勢だけをマトリクスで与える
//Just give the attitude matrix
 
procedure TSXFrame.SetOrientationMatrix(ref: TSXFrame;
const mat: TD3DMATRIX);
var
pushedV: TD3DVector; //平行移動分保存用 //Save Translates for minutes
begin
 
//保存
//Save
with pushedV do
begin
x := FMatrix._41; y := FMatrix._42; z := FMatrix._43;
end;
 
if ref = Self then
begin
//自分への変換行列
//His conversion matrix
 
{$IFDEF USE_S_MATHPACK}
FMatrix := NowCompositeMatrix(mat, FMatrix);
{$ELSE}
FMatrix := D3DMath_MatrixMultiply(mat, FMatrix)
{$ENDIF}
 
end
else
if ref = Parent then
begin
//親への変換行列
//Transformation matrix to the parent
 
FMatrix := mat;
 
end
else
begin
 
//自分→ref→ワールド→親
//My→ref →World →Parent
 
if Parent <> nil then
begin
if ref <> nil then
{$IFDEF USE_S_MATHPACK}
FMatrix := NowCompositeMatrix(
NowCompositeMatrix(mat, ref.WorldMatrix),
NowInvMatrix(Parent.WorldMatrix))
{$ELSE}
begin
FMatrix := D3DMath_MatrixMultiply(D3DMath_MatrixMultiply(mat, ref.WorldMatrix), D3DMath_MatrixInvert(Parent.WorldMatrix))
end
{$ENDIF}
else
{$IFDEF USE_S_MATHPACK}
FMatrix := NowCompositeMatrix(mat, NowInvMatrix(Parent.WorldMatrix));
{$ELSE}
begin
FMatrix := D3DMath_MatrixMultiply(mat, D3DMath_MatrixInvert(Parent.WorldMatrix));
end
{$ENDIF}
end
else
begin
if ref <> nil then
{$IFDEF USE_S_MATHPACK}
FMatrix := NowCompositeMatrix(mat, ref.WorldMatrix)
{$ELSE}
begin
FMatrix := D3DMath_MatrixMultiply(mat, ref.WorldMatrix)
end
{$ENDIF}
else
FMatrix := mat;
end;
 
end;
 
//復元
//Restore
with pushedV do
begin
FMatrix._41 := x; FMatrix._42 := y; FMatrix._43 := z;
end;
end;
 
 
function TSXFrame.GetTranslation(ref: TSXFrame): TD3DVECTOR;
var
tmpMat: TD3DMATRIX; //結果算出用バッファ Results calculated buffer
begin
 
if ref = Parent then
begin
result.X := FMatrix._41;
result.Y := FMatrix._42;
result.Z := FMatrix._43;
end
else
begin
tmpMat := GetTransform(ref);
result.X := tmpMat._41;
result.Y := tmpMat._42;
result.Z := tmpMat._43;
end;
 
end;
 
//フレーム内の座標→ワールド座標
//Coordinates in world coordinate frame
 
function TSXFrame.LocalToWorld(vec: TD3DVector): TD3DVector;
begin
{$IFDEF USE_S_MATHPACK}
Result := NowHeteroginize(NowTransform(NowHomoginize(vec), WorldMatrix));
{$ELSE}
Result := D3DMath_VecHeterogenize(D3DMath_VecTransform(D3DMath_VecHomogenize(vec), WorldMatrix))
{$ENDIF}
end;
 
//ワールド座標→フレーム内の座標
//Coordinates in world coordinate frame
 
function TSXFrame.WorldToLocal(vec: TD3DVector): TD3DVector;
begin
{$IFDEF USE_S_MATHPACK}
Result := NowHeteroginize(NowTransform(NowHomoginize(vec), NowInvMatrix(WorldMatrix)));
{$ELSE}
Result := D3DMath_VecHeterogenize(D3DMath_VecTransform(D3DMath_VecHomogenize(vec), D3DMath_MatrixInvert(WorldMatrix)));
{$ENDIF}
end;
 
//親フレームの変更
//Changing the parent frame
 
procedure TSXFrame.SetParent(const Value: TSXFrame);
 
//先祖リストを再帰的に修正する
//Fix recursive ancestor list
 
procedure RebuildAncestors(me: TSXFrame);
var
i: Integer;
begin
for i := 0 to me.Children.Count - 1 do
begin
//ヲレの先祖を先祖と崇めなさい
//Ancestor worship ancestors and record your Wo
 
me.Children[i].Ancestors.Assign(me.Ancestors);
//ヲレを親と崇めなさい
//Users report your parents to revere
 
me.Children[i].Ancestors.Add(me);
//子々孫々に渡ってそうしたまへ
//Sometimes we do that across to our children grandchildren
 
RebuildAncestors(me.Children[i]);
end;
end;
 
begin
//元の親のリストから外す
//Removed from the list of the original parent
 
if FParent <> nil then
FParent.Children.Delete(FParent.Children.IndexOf(Self));
 
 
if Value <> nil then
begin
//新しい親のリストに加える
//Add to the list of new parent
 
Value.Children.Add(Self);
//先祖リストを変える
//Changing the list of ancestors
 
Ancestors.Assign(Value.Ancestors);
Ancestors.Add(Value);
end
else
begin
Ancestors.Clear;
end;
 
//自分に子供がいるなら、それらの先祖リストも変える
//If you have children yourself, they also change the list of ancestors
 
RebuildAncestors(Self);
 
FParent := Value;
end;
 
//このフレームをカメラにした場合のビュー行列を計算
//When calculating the view matrix of the camera frame
 
function TSXFrame.ViewMatrix: TD3DMatrix;
begin
{$IFDEF USE_S_MATHPACK}
Result := NowInvMatrix(WorldMatrix);
{$ELSE}
Result := D3DMath_MatrixInvert(WorldMatrix)
{$ENDIF}
end;
 
{ TSXFrameList }
 
//コピー
//Copy
 
procedure TSXFrameList.Assign(source: TSXFrameList);
var
i: Integer;
begin
Self.Clear;
 
for i := 0 to source.Count - 1 do
begin
Self.Add(Pointer(source.Frames[i]));
end;
end;
 
constructor TSXFrameList.Create;
begin
inherited;
end;
 
destructor TSXFrameList.Destroy;
begin
inherited;
end;
 
function TSXFrameList.GetFrame(idx: Integer): TSXFrame;
begin
result := Items[idx];
end;
 
procedure TSXFrameList.SetFrame(idx: Integer; const Value: TSXFrame);
begin
Items[idx] := Pointer(Value);
end;
 
{ TSXScene }
 
constructor TSXScene.Create(DDCompo: TDXDRaw);
begin
inherited Create;
 
AlphaQueue := TSXRenderingQueue.Create(DDCompo, Self);
OpaqueQueue := TSXRenderingQueue.Create(DDCompo, Self);
AddQueue := TSXRenderingQueue.Create(DDCompo, Self);
SubQueue := TSXRenderingQueue.Create(DDCompo, Self);
 
{
MeshProcessor:=TSXMesh.Create(DDCompo);
MeshProcessor.VertexSize:=Sizeof(D3DTLVERTEX);
MeshProcessor.FVF:=D3DFVF_TLVERTEX;
MeshProcessor.SetSize(65535,65535); //(^^;)
 
MeshProcessorMT:=TSXMesh.Create(DDCompo);
MeshProcessorMT.VertexSize:=Sizeof(TSXTLVertexMT);
MeshProcessorMT.FVF:=FVF_SXTLVertexMT;
MeshProcessorMT.SetSize(65535,65535);
}
 
FCamera := nil;
FOwner := DDCompo;
end;
 
destructor TSXScene.Destroy;
begin
 
AlphaQueue.Free;
OpaqueQueue.Free;
AddQueue.Free;
SubQueue.Free;
 
//MeshProcessor.Free;
//MeshProcessorMT.Free;
 
inherited;
end;
 
//描画
 
procedure TSXScene.Render(rootFrame: TSXFrame);
var
viewMat: TD3DMATRIX;
curTexture: TDirect3DTexture2;
curMaterial: TD3DMATERIAL7;
curBlendMode: TRenderType;
 
procedure QueingFrame(frame: TSXFrame; const mat: TD3DMATRIX; RSBind, TexBind, MatBind: Boolean);
var
i: Integer;
meshM: TD3DMATRIX;
begin
 
//子フレーム無し、かつ、描画するメッシュなしなら、何もしない
//Visibilityが「子供もひっくるめて隠す」でも何もしない
//ただし、ビルボードがくっついてる時は、マトリクスの合成だけ行う
if (not frame.BBAttached) then
if ((frame.Children.Count = 0) and (frame.Mesh = nil)) or (frame.Visibility = sxvHide) then
exit;
 
//変換行列の計算
{$IFDEF USE_S_MATHPACK}
frame.RenderedMatrix := NowCompositeMatrix(frame.Matrix, mat);
{$ELSE}
frame.RenderedMatrix := D3DMath_MatrixMultiply(frame.Matrix, mat);
{$ENDIF}
 
 
//メッシュの描画
if frame.Mesh <> nil then
begin
{$IFDEF USE_S_MATHPACK}
meshM := NowCompositeMatrix(frame.MeshMatrix, frame.RenderedMatrix);
{$ELSE}
meshM := D3DMath_MatrixMultiply(frame.MeshMatrix, frame.RenderedMatrix);
{$ENDIF}
//テクスチャがあるなら、貼り付ける。「親のテクスチャ使用」を強制されてないなら
if not TexBind then
curTexture := frame.Texture;
 
//マテリアルを設定する
if not MatBind then
curMaterial := frame.Material;
 
//レンダリングステートの設定
if not RSBind then
curBlendMode := frame.BlendMode;
 
//キューに放り込む
if frame.Visibility = sxvShow then
begin
case curBlendMode of
rtAdd: AddQueue.PushMesh(frame.Mesh, frame, meshM, curTexture, curMaterial, frame.OnRenderMesh);
rtBlend: AlphaQueue.PushMesh(frame.Mesh, frame, meshM, curTexture, curMaterial, frame.OnRenderMesh);
rtDraw: OpaqueQueue.PushMesh(frame.Mesh, frame, meshM, curTexture, curMaterial, frame.OnRenderMesh);
rtSub: SubQueue.PushMesh(frame.Mesh, frame, meshM, curTexture, curMaterial, frame.OnRenderMesh);
end;
end;
end;
 
//子供の描画
for i := 0 to frame.Children.Count - 1 do
begin
QueingFrame(frame.Children[i], frame.RenderedMatrix, RSBind or frame.BindRenderState, TexBind or frame.BindTexture, MatBind or frame.BindMaterial);
end;
end;
 
begin
 
if FCamera = nil then
begin
//DDDD_PutDebugMessage('SXLib: カメラフレームが設定されていません');
exit;
end;
 
//ビュー行列の作成…(ワールド座標系でのカメラフレームの姿勢)の逆
//Create a view matrix (camera position in world coordinate frame), the inverse
 
viewMat := CameraFrame.ViewMatrix;
 
FOwner.D3DDevice7.SetTransform(D3DTRANSFORMSTATE_VIEW, viewMat);
 
//再帰的にキューに入れる
//Recursively queued
 
if rootFrame.Parent = nil then
QueingFrame(rootFrame, D3DUtil_SetIdentityMatrix, false, false, false)
else
QueingFrame(rootFrame, rootFrame.Parent.WorldMatrix, false, false, false);
 
{ キューに入ってる物体を描く }
{ I draw the object in the queue }
 
/////不透明体
//Opaque
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_ZENABLE, 1); //Z比較あり
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 1); //Z書き込みあり
 
//ブレンドなし
//No Blending
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_BLENDENABLE, 0);
 
OpaqueQueue.Render(viewMat, FVP);
 
/////加算合成体
//Body additive synthesis
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0); //Z書き込みなし
 
//ブレンドの設定
//Set of Blend
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_BLENDENABLE, 1);
 
FOwner.D3DDevice7.SetTextureStageState(0, D3DTSS_COLORARG1, DWord(D3DTA_TEXTURE));
FOwner.D3DDevice7.SetTextureStageState(0, D3DTSS_COLORARG2, DWord(D3DTA_DIFFUSE));
FOwner.D3DDevice7.SetTextureStageState(0, D3DTSS_COLOROP, DWord(D3DTOP_MODULATE));
 
FOwner.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAARG1, DWord(D3DTA_TEXTURE));
FOwner.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAARG2, DWord(D3DTA_DIFFUSE));
FOwner.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAOP, DWord(D3DTOP_MODULATE));
 
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_SRCBLEND, DWord(D3DBLEND_ONE));
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_DESTBLEND, DWord(D3DBLEND_ONE));
 
AddQueue.Render(viewMat, FVP);
 
//半透明体
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_SRCBLEND, DWord(D3DBLEND_SRCALPHA));
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_DESTBLEND, DWord(D3DBLEND_INVSRCALPHA));
 
AlphaQueue.Render(viewMat, FVP);
 
//減算合成体…減算はニセ減算だけど(^^;)
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_SRCBLEND, DWord(D3DBLEND_ZERO));
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_DESTBLEND, DWord(D3DBLEND_INVSRCCOLOR));
 
SubQueue.Render(viewMat, FVP);
 
//テクスチャに何も指定しない状態で、一連のレンダリングを終える
FOwner.D3DDevice7.SetTexture(0, nil);
end;
 
procedure TSXScene.Clear(dwFlags: DWord; color: DWORD; z: Single; stencil: DWord);
var
r: TD3DRect;
begin
with r do
begin
x1 := FVP.dwX;
y1 := FVP.dwY;
x2 := FVP.dwX + FVP.dwWidth;
y2 := FVP.dwY + FVP.dwHeight;
end;
 
FOwner.D3DDevice7.Clear(1, @r, dwFlags, color, z, stencil);
end;
 
//透視変換の設定
 
procedure TSXScene.SetProjection(fov, aspect, nearZ, farZ: Single); //透視変換の設定
var
q, w, h: Single;
begin
 
q := farZ / (farZ - nearZ);
w := aspect * Cos(fov * 0.5) / Sin(fov * 0.5);
h := Cos(fov * 0.5) / Sin(fov * 0.5);
 
FProjectionMatrix := D3DUtil_SetIdentityMatrix;
 
FProjectionMatrix._11 := w; //
FProjectionMatrix._22 := h; //
FProjectionMatrix._33 := q; // Q = Zf / (Zf-Zn)
FProjectionMatrix._34 := 1.0;
FProjectionMatrix._43 := -q * nearZ; // -QZn
FProjectionMatrix._44 := 0.0;
 
FOwner.D3DDevice7.SetTransform(D3DTRANSFORMSTATE_PROJECTION, FProjectionMatrix);
end;
 
procedure TSXScene.SetViewPort(left, top, right, bottom: DWord);
begin
ZeroMemory(@FVP, sizeof(FVP));
 
with FVP do
begin
dwX := left;
dwY := top;
dwWidth := right - left;
dwHeight := bottom - top;
dvMinZ := 0;
dvMaxZ := 1.0;
end;
 
FOwner.D3DDevice7.SetViewport(FVP);
end;
 
//D3D解放(解像度変更)からのリカバリ
 
procedure TSXScene.Recover;
begin
FOwner.D3DDevice7.SetViewport(FVP);
FOwner.D3DDevice7.SetTransform(D3DTRANSFORMSTATE_PROJECTION, FProjectionMatrix);
end;
 
//ビルボードを押し込む
 
procedure TSXScene.PushBillboard(blendMode: TRenderType; ref: TSXFrame;
pos: TD3DVector; points: array of TSXVertexBB; tex: TDirect3DTexture2);
begin
case blendMode of
rtAdd: AddQueue.PushBillboard(ref, pos, tex, points);
rtBlend: AlphaQueue.PushBillboard(ref, pos, tex, points);
rtDraw: OpaqueQueue.PushBillboard(ref, pos, tex, points);
rtSub: SubQueue.PushBillboard(ref, pos, tex, points);
end;
//フラグを立てる
ref.BBAttached := True;
 
end;
 
//球体の可視判定
 
function TSXScene.SphereVisibility(ref: TSXFrame; pos: TD3DVector;
radius: Single; depth: Single): Boolean;
var
viewM: TD3DMATRIX; //ref.posを視野座標系に変換する行列
projM: TD3DMATRIX; //透視変換行列(画角ゲット用)
 
p: TD3DVector;
fovH, fovV: Single; //画角
cosFovH, sinFovH, cosFovV, sinFovV: Single;
begin
//まず、視野座標系に変換する
{$IFDEF USE_S_MATHPACK}
viewM := NowCompositeMatrix(ref.WorldMatrix, NowInvMatrix(CameraFrame.WorldMatrix));
p := NowHeteroginize(NowTransform(NowHomoginize(pos), viewM));
{$ELSE}
viewM := D3DMath_MatrixMultiply(ref.WorldMatrix, D3DMath_MatrixInvert(CameraFrame.WorldMatrix));
p := D3DMath_VecHeterogenize(D3DMath_VecTransform(D3DMath_VecHomogenize(pos), viewM));
{$ENDIF}
 
//視界の後方や、depthより遠くにあるってのは論外
if (p.z < -radius) or (p.z > depth + radius) then
begin
Result := False;
Exit;
end;
 
//縦・横の画角を求める
FOwner.D3DDevice7.GetTransform(D3DTRANSFORMSTATE_PROJECTION, projM);
fovH := ArcTan(1.0 / projM._11);
fovV := ArcTan(1.0 / projM._22);
 
//画角のSin,Cosを出しておく
SinFovH := Sin(fovH); CosFovH := Cos(fovH);
SinFovV := Sin(fovV); CosFovV := Cos(fovV);
 
//XZ平面での判定…画角分だけ球の中心を回転させた時、コーンの中心から球の中心までが、球の半径の値以下になるかを見る
if ((p.x * CosFovH - p.z * SinFovH) > radius) or ((p.x * CosFovH + p.z * SinFovH) < -radius) then
begin
Result := False;
Exit;
end;
 
//YZ平面での判定
if ((p.y * CosfovV - p.z * SinfovV) > radius) or ((p.y * CosfovV + p.z * SinfovV) < -radius) then
begin
Result := False;
Exit;
end;
 
Result := True;
end;
 
{ TSXLight }
 
constructor TSXLight.Create(DDCompo: TDXDraw; index: DWord);
begin
inherited Create;
 
FOwner := DDCompo;
FIndex := index;
FEnabled := False;
FUpdate := True;
 
//デフォ値の設定
ZeroMemory(@Params, Sizeof(Params));
with Params do
begin
dltType := D3DLIGHT_DIRECTIONAL;
 
dcvDiffuse.r := 1.0;
dcvDiffuse.g := 1.0;
dcvDiffuse.b := 1.0;
{$IFDEF USE_S_MATHPACK}
dvDirection := Vector(0, 0, 1);
{$ELSE}
dvDirection := MakeD3DVector(0, 0, 1);
{$ENDIF}
end;
end;
 
destructor TSXLight.Destroy;
begin
inherited;
end;
 
//D3Dにライトを登録
 
procedure TSXLight.SetEnabled(const Value: Boolean);
begin
FEnabled := Value;
 
FOwner.D3DDevice7.SetLight(FIndex, Params);
FOwner.D3DDevice7.LightEnable(FIndex, FEnabled);
 
end;
 
//お便利るーちんず
 
procedure TSXLight.SetupDiffuse(_R, _G, _B: Single);
begin
with Params.dcvDiffuse do
begin
dvR := _R;
dvG := _G;
dvB := _B;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
procedure TSXLight.SetupSpecular(_R, _G, _B: Single);
begin
with Params.dcvSpecular do
begin
dvR := _R;
dvG := _G;
dvB := _B;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
procedure TSXLight.SetupAmbient(_R, _G, _B: Single);
begin
with Params.dcvAmbient do
begin
dvR := _R;
dvG := _G;
dvB := _B;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
procedure TSXLight.SetupColors(difR, difG, difB, specR, specG, specB, ambR,
ambG, ambB: Single);
begin
with Params.dcvDiffuse do
begin
dvR := difR;
dvG := difG;
dvB := difB;
end;
with Params.dcvSpecular do
begin
dvR := specR;
dvG := specG;
dvB := specB;
end;
with Params.dcvAmbient do
begin
dvR := ambR;
dvG := ambG;
dvB := ambB;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
procedure TSXLight.SetupRanges(range, att0, att1, att2: Single);
begin
with Params do
begin
dvRange := range;
dvAttenuation0 := att0;
dvAttenuation1 := att1;
dvAttenuation2 := att2;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
procedure TSXLight.SetupDirectional(dir: TD3DVector);
begin
Params.dltType := D3DLIGHT_DIRECTIONAL;
Params.dvDirection := dir;
 
if FUpdate then
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
procedure TSXLight.SetupPoint(pos: TD3DVector);
begin
Params.dltType := D3DLIGHT_POINT;
Params.dvPosition := pos;
 
if FUpdate then
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
procedure TSXLight.SetupSpot(pos, dir: TD3DVector; theta, phi,
falloff: Single);
begin
Params.dltType := D3DLIGHT_SPOT;
Params.dvDirection := dir;
 
Params.dvTheta := theta;
Params.dvPhi := phi;
Params.dvFalloff := falloff;
 
if FUpdate then
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
//フレームの位置・向きにセット
 
procedure TSXLight.FitFrame(target: TSXFrame);
var
mat: TD3DMATRIX;
begin
 
if target = nil then
mat := D3DUtil_SetIdentityMatrix
else
mat := target.WorldMatrix;
{$IFDEF USE_S_MATHPACK}
Params.dvDirection := Vector(mat._31, mat._32, mat._33);
Params.dvPosition := Vector(mat._41, mat._42, mat._43);
{$ELSE}
Params.dvDirection := MakeD3DVector(mat._31, mat._32, mat._33);
Params.dvPosition := MakeD3DVector(mat._41, mat._42, mat._43);
{$ENDIF}
if FUpdate then
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
procedure TSXLight.BeginUpdate;
begin
FUpdate := False;
end;
 
procedure TSXLight.EndUpdate;
begin
FUpdate := True;
FOwner.D3DDevice7.SetLight(FIndex, Params);
end;
 
{ TSXLightGroup }
 
constructor TSXLightGroup.Create(DDCompo: TDXDraw; capacity: DWord);
var
i: Integer;
begin
inherited Create;
 
FOwner := DDCompo;
FCapacity := capacity;
SetLength(FLights, capacity);
 
for i := 0 to capacity - 1 do
begin
FLights[i] := TSXLight.Create(FOwner, i);
end;
end;
 
destructor TSXLightGroup.Destroy;
var
i: Integer;
begin
 
for i := 0 to FCapacity - 1 do
begin
FLights[i].Free;
end;
 
FLights := nil;
 
inherited;
end;
 
procedure TSXLightGroup.DisableAll;
var
i: Integer;
begin
for i := 0 to FCapacity - 1 do
begin
FLights[i].Enabled := True;
end;
end;
 
procedure TSXLightGroup.EnableAll;
var
i: Integer;
begin
for i := 0 to FCapacity - 1 do
begin
FLights[i].Enabled := False;
end;
end;
 
function TSXLightGroup.GetLights(idx: DWord): TSXLight;
begin
//範囲チェック
if idx >= FCapacity then
begin
//DDDD_PutDebugMessage('TSXLightGroup @ SXLib: 範囲外のライトを参照しようとしました');
result := nil;
exit;
end;
 
result := FLights[idx];
end;
 
 
//Enabledじゃないライトを探索
 
function TSXLightGroup.GetUnusedLight: TSXLight;
var
i: Integer;
begin
 
for i := 0 to FCapacity - 1 do
begin
if not FLights[i].Enabled then
begin
result := FLights[i];
exit;
end;
end;
 
result := nil;
end;
 
//スペキュラ強度の設定
{
procedure TSXLightGroup.SetSpecularPower(const Value: Single);
var
mtrl:D3DMATERIAL7;
begin
FSpecularPower := Value;
 
ZeroMemory(@mtrl, Sizeof(mtrl));
mtrl.power:=FSpecularPower;
 
FOwner.D3DDevice.SetMaterial(@mtrl);
end;
}
 
procedure TSXLightGroup.Recover;
var
i: Integer;
begin
 
for i := 0 to FCapacity - 1 do
begin
if FLights[i].Enabled then
FLights[i].Enabled := True;
end;
 
// SpecularPower:=FSpecularPower;
end;
 
{ TSXMatetial }
 
constructor TSXMaterial.Create(DDCompo: TDXDraw);
begin
ZeroMemory(@Params, Sizeof(Params));
FOwner := DDCompo;
FUpdate := True;
end;
 
procedure TSXMaterial.SetupAmbient(_R, _G, _B: Single);
begin
with Params.dcvAmbient do
begin
R := _R; G := _G; B := _B;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetMaterial(Params);
end;
 
procedure TSXMaterial.SetupDiffuse(_R, _G, _B: Single);
begin
with Params.dcvDiffuse do
begin
R := _R; G := _G; B := _B;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetMaterial(Params);
end;
 
procedure TSXMaterial.SetupEmissive(_R, _G, _B: Single);
begin
with Params.dcvEmissive do
begin
R := _R; G := _G; B := _B;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetMaterial(Params);
end;
 
procedure TSXMaterial.SetupSpecular(_R, _G, _B: Single);
begin
with Params.dcvSpecular do
begin
R := _R; G := _G; B := _B;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetMaterial(Params);
end;
 
procedure TSXMaterial.SetupSpecularPower(pow: Single);
begin
with Params do
begin
dvPower := pow;
end;
 
if FUpdate then
FOwner.D3DDevice7.SetMaterial(Params);
end;
 
 
procedure TSXMaterial.SetupColors(difR, difG, difB, specR, specG, specB,
ambR, ambG, ambB, emsR, emsG, emsB, pow: Single);
begin
 
with Params.dcvDiffuse do
begin
dvR := difR;
dvG := difG;
dvB := difB;
end;
with Params.dcvSpecular do
begin
dvR := specR;
dvG := specG;
dvB := specB;
end;
with Params.dcvAmbient do
begin
dvR := ambR;
dvG := ambG;
dvB := ambB;
end;
with Params.dcvEmissive do
begin
dvR := emsR;
dvG := emsG;
dvB := emsB;
end;
 
Params.dvPower := pow;
 
if FUpdate then
FOwner.D3DDevice7.SetMaterial(Params);
 
end;
 
procedure TSXMaterial.BeginUpdate;
begin
FUpdate := False;
end;
 
procedure TSXMaterial.EndUpdate;
begin
FUpdate := True;
FOwner.D3DDevice7.SetMaterial(Params);
end;
 
{ ヘルパー関数 }
 
function MakeMaterial(difR, difG, difB, specR, specG, specB, ambR, ambG, ambB, emsR, emsG, emsB, pow: Single): TD3DMATERIAL7;
begin
with Result.dcvDiffuse do
begin
dvR := difR;
dvG := difG;
dvB := difB;
dvA := 1.0;
end;
with Result.dcvSpecular do
begin
dvR := specR;
dvG := specG;
dvB := specB;
dvA := 1.0;
end;
with Result.dcvAmbient do
begin
dvR := ambR;
dvG := ambG;
dvB := ambB;
dvA := 1.0;
end;
with Result.dcvEmissive do
begin
dvR := emsR;
dvG := emsG;
dvB := emsB;
dvA := 1.0;
end;
 
Result.dvPower := pow;
end;
 
{ TSXRenderingQueue }
 
//コンストラクタ
 
constructor TSXRenderingQueue.Create(AOwner: TDXDraw; _Scene: TSXScene);
begin
inherited create;
 
FOwner := AOwner;
Scene := _Scene;
 
//デフォ値の代入
BillboardCapacity := 32;
MeshCapacity := 32;
 
FBillboardCount := 0;
FMeshCount := 0;
end;
 
//デストラクタ
 
destructor TSXRenderingQueue.Destroy;
begin
BillboardQueue := nil;
MeshQueue := nil;
 
inherited;
end;
 
//何もせずに、中身だけ消す
 
procedure TSXRenderingQueue.Flush;
begin
FBillboardCount := 0;
FMeshCount := 0;
end;
 
//ビルボードを入れる
 
procedure TSXRenderingQueue.PushBillboard(ref: TSXFrame; pos: TD3DVector;
tex: TDirect3DTexture2; pts: array of TSXVertexBB); //ビルボード
begin
//必要なら拡張する
if BillboardCount >= BillboardCapacity then
BillboardCapacity := BillboardCapacity * 2;
 
 
BillboardQueue[FBillboardCount].tex := tex;
BillboardQueue[FBillboardCount].ref := ref;
BillboardQueue[FBillboardCount].pos := pos;
Move(pts, BillboardQueue[FBillboardCount].Pts, Sizeof(TSXVertexBB) * 4); //4頂点分コピー
 
Inc(FBillboardCount);
end;
 
//メッシュを入れる
 
procedure TSXRenderingQueue.PushMesh(mesh: TSXMesh; frame: TSXFrame; mat: TD3DMatrix;
tex: TDirect3DTexture2; mtrl: TD3DMATERIAL7; event: TSXRenderMeshEvent);
begin
//必要なら拡張する
if MeshCount >= MeshCapacity then
MeshCapacity := MeshCapacity * 2;
 
MeshQueue[FmeshCount].mat := mat;
MeshQueue[FmeshCount].mesh := mesh;
MeshQueue[FmeshCount].mtrl := mtrl;
MeshQueue[FmeshCount].tex := tex;
MeshQueue[FmeshCount].OnRender := event;
MeshQueue[FMeshCount].frame := frame;
 
Inc(FMeshCount);
end;
 
//ビルボード用の情報入れをサイズを変える
 
procedure TSXRenderingQueue.SetBillBoardCapacity(const Value: Integer);
begin
FBillboardCapacity := Value;
SetLength(BillboardQueue, Value);
end;
 
//メッシュ用の情報入れをサイズを変える
 
procedure TSXRenderingQueue.SetMeshCapacity(const Value: Integer);
begin
FMeshCapacity := Value;
SetLength(MeshQueue, Value);
end;
 
//描画
 
procedure TSXRenderingQueue.Render(viewMat: TD3DMATRIX; viewParam: TD3DVIEWPORT7);
var
i, j: Integer;
prevTex: TDirect3DTexture2; //前回使ったテクスチャへの参照 //With reference to the previous texture
prevSpec: Boolean; //前回描画したものは、スペキュラを計算したか //The last drawing was either calculated specular
prevLit: Boolean; //前回描画したものは、ライティングの計算をしたか //Was drawn last, or the lighting calculations
prevFrame: TSXFrame; //直前に描画したビルボードの入ってたフレーム //I was drawn into the frame just before the billboard
center: {$IFDEF USE_S_MATHPACK}THgVector{$ELSE}TD3DHVector{$ENDIF};
pts: array[0..3] of TD3DTLVERTEX;
m: TD3DMATRIX;
projM, screenM, viewProjScreenM: TD3DMATRIX;
begin
 
//メッシュの描画
 
prevTex := nil;
FOwner.D3DDevice7.SetTexture(0, nil);
 
prevSpec := True;
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_SPECULARENABLE, DWord(True));
 
prevLit := True;
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_LIGHTING, DWord(True));
 
for i := 0 to MeshCount - 1 do
begin
 
//ライティング
if prevLit <> MeshQueue[i].Frame.Lighting then
begin
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_LIGHTING, DWord(MeshQueue[i].Frame.Lighting));
prevLit := MeshQueue[i].Frame.Lighting;
end;
 
//スペキュラつける?
if prevSpec <> MeshQueue[i].Frame.Specular then
begin
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_SPECULARENABLE, DWord(MeshQueue[i].Frame.Specular));
prevSpec := MeshQueue[i].Frame.Specular;
end;
 
//行列の設定
FOwner.D3DDevice7.SetTransform(D3DTRANSFORMSTATE_WORLD, (MeshQueue[i].mat));
 
//マテリアルの設定
FOwner.D3DDevice7.SetMaterial((MeshQueue[i].Mtrl));
 
//テクスチャがあるなら、貼り付ける。
if MeshQueue[i].tex <> prevTex then
begin
if MeshQueue[i].tex <> nil then
FOwner.D3DDevice7.SetTexture(0, MeshQueue[i].tex.Surface.IDDSurface7)
else
FOwner.D3DDevice7.SetTexture(0, nil);
end;
 
prevTex := MeshQueue[i].tex;
 
//イベントハンドラを呼ぶ
if Assigned(MeshQueue[i].OnRender) then
MeshQueue[i].OnRender(MeshQueue[i].Frame);
 
//描画
MeshQueue[i].Mesh.Draw(0);
 
end;
 
//ビルボードの描画
 
//ライティングを切る
FOwner.D3DDevice7.SetRenderState(D3DRENDERSTATE_LIGHTING, DWord(False));
 
FOwner.D3DDevice7.GetTransform(D3DTRANSFORMSTATE_PROJECTION, projM);
ScreenM := D3DUtil_SetIdentityMatrix;
with ScreenM do
begin
_11 := viewParam.dwWidth / 2.0;
_22 := -(viewParam.dwHeight / 2.0);
_33 := viewParam.dvMaxZ - viewParam.dvMinZ;
_41 := viewParam.dwX + viewParam.dwWidth / 2.0;
_42 := viewParam.dwY + viewParam.dwHeight / 2.0;
_43 := viewParam.dvMinZ;
end;
 
//視野座標→画面 の変換行列
{$IFDEF USE_S_MATHPACK}
viewProjScreenM := NowCompositeMatrix(viewMat, projM);
viewProjScreenM := NowCompositeMatrix(viewProjScreenM, ScreenM);
{$ELSE}
viewProjScreenM := D3DMath_MatrixMultiply(viewMat, projM);
viewProjScreenM := D3DMath_MatrixMultiply(viewProjScreenM, ScreenM);
{$ENDIF}
prevFrame := nil;
 
for i := 0 to BillboardCount - 1 do
begin
 
if BillboardQueue[i].ref <> nil then
begin
//テクスチャがあるなら、貼り付ける。
if BillboardQueue[i].Tex <> prevTex then
begin
if BillboardQueue[i].Tex <> nil then
FOwner.D3DDevice7.SetTexture(0, BillboardQueue[i].Tex.Surface.IDDSurface7)
else
FOwner.D3DDevice7.SetTexture(0, nil);
end;
prevTex := BillboardQueue[i].Tex;
 
 
//ビルボードの中心の視野座標を求める
if prevFrame <> BillboardQueue[i].ref then
begin
{$IFDEF USE_S_MATHPACK}
m := NowCompositeMatrix(BillboardQueue[i].ref.RenderedMatrix, viewProjScreenM);
{$ELSE}
m := D3DMath_MatrixMultiply(BillboardQueue[i].ref.RenderedMatrix, viewProjScreenM);
{$ENDIF}
prevFrame := BillboardQueue[i].ref;
end;
{$IFDEF USE_S_MATHPACK}
center := NowHomoginize(BillboardQueue[i].pos);
center := NowTransform(center, m);
{$ELSE}
center := D3DMath_VecHomogenize(BillboardQueue[i].pos);
center := D3DMath_VecTransform(center, m);
{$ENDIF}
//W値が正なら描画
//W is positive if the drawing
if center.W > 0 then
begin
//ビルボードの中心の画面での座標を求める
//Find the coordinates of the center of the screen, billboard
{$IFDEF USE_S_MATHPACK}
center := NowViewFrustumToScreen(center);
{$ELSE}
center := D3DMath_VecViewScreenize(center);
{$ENDIF}
for j := 0 to 3 do
begin
with BillboardQueue[i].Pts[j] do
begin
Pts[j].sx := center.x + BillboardQueue[i].Pts[j].dx * center.W;
Pts[j].sy := center.y + BillboardQueue[i].Pts[j].dy * center.W;
Pts[j].sz := center.z;
Pts[j].rhw := center.w;
Pts[j].color := color;
Pts[j].specular := $FF000000;
Pts[j].tu := tu;
Pts[j].tv := tv;
end;
end;
 
FOwner.D3DDevice7.DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX, Pts, 4, 0);
end;
 
//参照フレームに付いたフラグを消す
BillboardQueue[i].ref.BBAttached := False;
end;
end;
 
//キューを空に
FMeshCount := 0;
FBillBoardCount := 0;
end;
 
{-------------------------------- Primitive Renderer --------------------------}
 
type
TIntArray = array[0..$0FFFFFFF] of Integer;
PIntArray = ^TIntArray;
TPrimArray = array[0..$FFFFF] of TSXPrimitiveRec;
PPrimArray = ^TPrimArray;
TTextureCoordArray = array[0..$FFFFF] of TSXTextureCoordRec;
PTextureCoordArray = ^TTextureCoordArray;
 
class function TSXPrimitiveRenderer.SingleRect(x1, y1, x2, y2: Single): TSingleRect;
begin
with result do
begin
Left := x1;
Top := y1;
Right := x2;
Bottom := y2;
end;
end;
 
constructor TSXPrimitiveRenderer.Create(DDCompo: TDXDraw; PrimitiveCount: Integer; PatternCount: Integer);
begin
FDXDraw := DDCompo;
FMaxPrimitives := PrimitiveCount;
ZSortBuf := nil;
ZSortCount := nil;
PrimCount := 0;
 
GetMem(PrimBuf, Sizeof(TSXPrimitiveRec) * PrimitiveCount);
GetMem(Patterns, Sizeof(TSXTextureCoordRec) * PatternCount);
 
ZMax := 0;
ColorKey := True;
end;
 
destructor TSXPrimitiveRenderer.Destroy;
begin
FreeMem(ZSortBuf);
FreeMem(ZSortCount);
FreeMem(Patterns);
FreeMem(PrimBuf);
 
inherited;
end;
 
procedure TSXPrimitiveRenderer.setZMax(v: Integer);
begin
FZmax := v;
 
if ZSortBuf <> nil then
FreeMem(ZSortBuf);
if ZSortCount <> nil then
FreeMem(ZSortCount);
 
GetMem(ZSortBuf, (FZMax + 1) * FMaxPrimitives * sizeof(Integer));
GetMem(ZSortCount, (FZMax + 1) * sizeof(Integer));
end;
 
//パターンとしてTexのCoordで示される範囲を登録
 
procedure TSXPrimitiveRenderer.SetPattern(idx: Integer; Tex: TDirect3DTexture2; Coord: TRect);
var
pPat: PTextureCoord;
begin
pPat := @(PTextureCoordArray(Patterns)^[idx]);
 
with pPat^ do
begin
Texture := Tex;
Top := Coord.Top / Tex.Height;
Left := Coord.Left / Tex.Width;
Bottom := Coord.Bottom / Tex.Height;
Right := Coord.Right / Tex.Width;
end;
 
end;
 
procedure TSXPrimitiveRenderer.Push(Tex: TDirect3DTexture2; p1, p2, p3, p4: TD3DTLVertex; Z: Integer; blend: TRenderType); //TLVertexで四角形を入れる
begin
with PPrimArray(PrimBuf)^[PrimCount] do
begin
Texture := Tex;
 
Bound[0] := p1;
Bound[1] := p2;
Bound[2] := p3;
Bound[3] := p4;
 
ZOrder := Z;
BlendMode := blend;
end;
 
Inc(PrimCount);
end;
 
procedure TSXPrimitiveRenderer.Push2D(Tex: TDirect3DTexture2; p1, p2, p3, p4: TD2DVector; Z: Integer; blend: TRenderType; col: DWord); //2D的な四角形
begin
with PPrimArray(PrimBuf)^[PrimCount] do
begin
Texture := Tex;
 
Bound[0] := MakeD3DTLVertex(p1.x, p1.y, 2.0, 0.5, col, 0, 0, 0);
Bound[1] := MakeD3DTLVertex(p2.x, p2.y, 2.0, 0.5, col, 0, 1, 0);
Bound[2] := MakeD3DTLVertex(p3.x, p3.y, 2.0, 0.5, col, 0, 0, 1);
Bound[3] := MakeD3DTLVertex(p4.x, p4.y, 2.0, 0.5, col, 0, 1, 1);
 
ZOrder := Z;
BlendMode := blend;
end;
 
Inc(PrimCount);
end;
 
//パターンをプッシュ(3次元)
 
procedure TSXPrimitiveRenderer.PushPattern(iPat: Integer; p1, p2, p3, p4: TD3DHVector; Z: Integer; blend: TRenderType; col: DWord);
var
pPat: PTextureCoord;
begin
with PPrimArray(PrimBuf)^[PrimCount] do
begin
 
pPat := @(PTextureCoordArray(Patterns)^[iPat]);
Texture := pPat^.Texture;
 
Bound[0] := MakeD3DTLVertex(p1.x, p1.y, p1.z, p1.w, col, 0, pPat^.Left, pPat^.Top);
Bound[1] := MakeD3DTLVertex(p2.x, p2.y, p2.z, p2.w, col, 0, pPat^.Right, pPat^.Top);
Bound[2] := MakeD3DTLVertex(p3.x, p3.y, p3.z, p3.w, col, 0, pPat^.Left, pPat^.Bottom);
Bound[3] := MakeD3DTLVertex(p4.x, p4.y, p4.z, p4.w, col, 0, pPat^.Right, pPat^.Bottom);
 
ZOrder := Z;
BlendMode := blend;
end;
 
Inc(PrimCount);
end;
 
procedure TSXPrimitiveRenderer.PushPattern2D(iPat: Integer; p1, p2, p3, p4: TD2DVector; Z: Integer; blend: TRenderType; col: DWord); //パターンをプッシュする
var
pPat: PTextureCoord;
begin
with PPrimArray(PrimBuf)^[PrimCount] do
begin
 
pPat := @(PTextureCoordArray(Patterns)^[iPat]);
Texture := pPat^.Texture;
 
Bound[0] := MakeD3DTLVertex(p1.x, p1.y, 2, 0.5, col, 0, pPat^.Left, pPat^.Top);
Bound[1] := MakeD3DTLVertex(p2.x, p2.y, 2, 0.5, col, 0, pPat^.Right, pPat^.Top);
Bound[2] := MakeD3DTLVertex(p3.x, p3.y, 2, 0.5, col, 0, pPat^.Left, pPat^.Bottom);
Bound[3] := MakeD3DTLVertex(p4.x, p4.y, 2, 0.5, col, 0, pPat^.Right, pPat^.Bottom);
 
ZOrder := Z;
BlendMode := blend;
end;
 
Inc(PrimCount);
end;
 
//パターンをプッシュする(矩形)
 
procedure TSXPrimitiveRenderer.PushPatternRect(iPat: Integer; rect: TSingleRect; Z: Integer; blend: TRenderType; col: DWord);
var
pPat: PTextureCoord;
begin
with PPrimArray(PrimBuf)^[PrimCount] do
begin
 
pPat := @(PTextureCoordArray(Patterns)^[iPat]);
Texture := pPat^.Texture;
 
Bound[0] := MakeD3DTLVertex(rect.Left, rect.Top, 2, 0.5, col, 0, pPat^.Left, pPat^.Top);
Bound[1] := MakeD3DTLVertex(rect.Right, rect.Top, 2, 0.5, col, 0, pPat^.Right, pPat^.Top);
Bound[2] := MakeD3DTLVertex(rect.Left, rect.Bottom, 2, 0.5, col, 0, pPat^.Left, pPat^.Bottom);
Bound[3] := MakeD3DTLVertex(rect.Right, rect.Bottom, 2, 0.5, col, 0, pPat^.Right, pPat^.Bottom);
 
ZOrder := Z;
BlendMode := blend;
end;
 
Inc(PrimCount);
end;
 
//Z値にしたがってソート
 
procedure TSXPrimitiveRenderer.BeginRender;
var
i: Integer;
pCount: ^Integer; //各レイヤに、いくつ物体があるか
pSort: ^Integer;
pPrim: PPrimitive;
begin
FNPrims := PrimCount;
 
//FSortCountのクリア
pCount := Pointer(ZSortCount);
ZeroMemory(pCount, Sizeof(Integer) * (FZMax + 1));
 
if PrimCount = 0 then
Exit;
 
//ビンソート
pPrim := @(PPrimArray(PrimBuf)^[PrimCount - 1]);
for i := PrimCount - 1 downto 0 do
begin
pSort := Pointer(ZSortBuf);
pCount := Pointer(ZSortCount);
if pPrim^.ZOrder > FZMax then
begin
//DDDD_PutDebugMessage(Format('Primitives: Z=%dは無効です、Z値は0から%dの範囲にしてください',[pPrim^.ZOrder,FZMax]));
continue;
end;
Inc(pCount, pPrim^.ZOrder);
Inc(pSort, pPrim^.ZOrder * FMaxPrimitives + pCount^);
pSort^ := i; //FSortBuf[z][FSortCount[z]]:=i
Inc(pCount^); //FSortCount[z]++
 
Dec(pPrim);
end;
 
end;
 
//単一のZ値を持つ集合だけ描画
 
procedure TSXPrimitiveRenderer.RenderOneLayer(Z: Integer);
var
i: Integer;
pSort: ^Integer;
pPrim: PPrimitive;
 
prevTexture: TDirect3DTexture2;
prevBlendMode: TRenderType;
nPrims: Integer;
begin
 
asm
finit;
end;
 
if Z > FZMax then
begin
//DDDD_PutDebugMessage(Format('Render: Z=%dは無効です、Z値は0から%dの範囲にしてください',[Z,FZMax]));
exit;
end;
 
nPrims := PIntArray(ZSortCount)^[Z];
if nPrims = 0 then
Exit;
 
//レンダリングステートの設定
with FDXDraw.D3DDevice7 do
begin
SetTexture(0, nil);
SetRenderState(D3DRENDERSTATE_ZENABLE, INteger(False));
SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, INteger(False));
 
//SetTextureStageState(0, D3DTSS_MAGFILTER, Integer(D3DTFG_POINT));
//SetTextureStageState(0, D3DTSS_MINFILTER, Integer(D3DTFG_POINT));
 
SetTextureStageState(0, D3DTSS_MAGFILTER, Integer(D3DTFG_LINEAR));
SetTextureStageState(0, D3DTSS_MINFILTER, Integer(D3DTFG_LINEAR));
 
SetRenderState(D3DRENDERSTATE_STIPPLEDALPHA, Integer(False));
SetRenderState(D3DRENDERSTATE_DITHERENABLE, Integer(False));
SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, Integer(False));
SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, Integer(ColorKey));
end;
prevTexture := nil;
prevBlendMode := rtDraw;
 
pSort := @(PIntArray(ZSortBuf)^[FMaxPrimitives * Z]);
for i := 0 to nPrims - 1 do
begin
pPrim := @(PPrimArray(PrimBuf)^[pSort^]);
 
//テクスチャの変更
if pPrim^.Texture <> prevTexture then
begin
if pPrim^.Texture = nil then
FDXDraw.D3DDevice7.SetTexture(0, nil)
else
FDXDraw.D3DDevice7.SetTexture(0, pPrim^.Texture.Surface.IDDSurface7);
prevTexture := pPrim^.Texture;
end;
 
//ブレンドモードの設定
if pPrim^.BlendMode <> prevBlendMode then
begin
case pPrim^.BlendMode of
 
rtDraw:
begin
//QD.D3DDevice7.SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, Integer(False));
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 0);
//QD.D3DDevice7.SetRenderState(D3DRENDERSTATE_FILLMODE, Integer(D3DFILL_SOLID));
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, Integer(True));
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_SRCBLEND, Integer(D3DBLEND_ONE));
end;
 
rtAdd:
begin
if prevBlendMode = rtDraw then
begin
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, Integer(True));
 
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_COLORARG1, Integer(D3DTA_TEXTURE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_COLORARG2, Integer(D3DTA_DIFFUSE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_COLOROP, Integer(D3DTOP_MODULATE));
 
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAARG1, Integer(D3DTA_TEXTURE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAARG2, Integer(D3DTA_DIFFUSE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAOP, Integer(D3DTOP_MODULATE));
end;
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_SRCBLEND, Integer(D3DBLEND_ONE)); // ソースブレンド設定
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_DESTBLEND, Integer(D3DBLEND_ONE)); // ディスティネーション設定
end;
 
rtBlend:
begin
if prevBlendMode = rtDraw then
begin
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, Integer(True)); //αを有効に☆
 
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_COLORARG1, Integer(D3DTA_TEXTURE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_COLORARG2, Integer(D3DTA_DIFFUSE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_COLOROP, Integer(D3DTOP_MODULATE));
 
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAARG1, Integer(D3DTA_TEXTURE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAARG2, Integer(D3DTA_DIFFUSE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAOP, Integer(D3DTOP_MODULATE));
end;
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_SRCBLEND, Integer(D3DBLEND_SRCALPHA)); // ソースブレンド設定
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_DESTBLEND, Integer(D3DBLEND_INVSRCALPHA)); // ディスティネーション設定
end;
 
rtSub:
begin
if prevBlendMode = rtDraw then
begin
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, Integer(True)); //αを有効に☆
 
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_COLORARG1, Integer(D3DTA_TEXTURE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_COLORARG2, Integer(D3DTA_DIFFUSE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_COLOROP, Integer(D3DTOP_MODULATE));
 
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAARG1, Integer(D3DTA_TEXTURE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAARG2, Integer(D3DTA_DIFFUSE));
FDXDraw.D3DDevice7.SetTextureStageState(0, D3DTSS_ALPHAOP, Integer(D3DTOP_MODULATE));
end;
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_SRCBLEND, Integer(D3DBLEND_DESTCOLOR)); // ソースブレンド設定
FDXDraw.D3DDevice7.SetRenderState(D3DRENDERSTATE_DESTBLEND, Integer(D3DBLEND_ZERO)); // ディスティネーション設定
end;
 
end;
prevBlendMode := pPrim^.BlendMode;
end;
 
try
asm
finit;
end;
FDXDraw.D3DDevice7.DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_TLVERTEX, pPrim^.Bound, 4, 0);
asm
finit;
end;
Inc(pSort);
except
//DDDD_PutDebugMessage('FP Fault');
Halt;
end;
end;
 
end;
 
//スタックを空に
 
procedure TSXPrimitiveRenderer.EndRender;
begin
PrimCount := 0;
end;
 
//全部描画
 
procedure TSXPrimitiveRenderer.Render;
var
i: Integer;
begin
BeginRender;
for i := 0 to FZMax do
RenderOneLayer(i);
EndRender;
end;
 
end.
 
/VCL_DELPHIX_D6/SXMedia/SXEngine.pas
0,0 → 1,221
{
SXMedia Components - Beta 1
--------------------------------
Copyright 1999 Dean Ellis
http://www.sillex.freeserve.co.uk
 
This unit is part of the SXMedia Component Set. This code is
supplied as is with no guarantees and must be used at your own
risk.
 
No modifications to this code must be made without the express
permission of the author. Please report any problems to
support@sillex.freeserve.co.uk
 
You may use these components to create any freeware/shareware
applications that you wish. If the components are to be used in
a commercail product then credit for developement of these components
should be given.
 
Credits :
 
Developer : Dean Ellis
Testers : Dominique Louis
Ivan Blecic
}
unit SXEngine;
{$WARN SYMBOL_PLATFORM OFF}
interface
 
uses
Windows, Messages, SysUtils, Classes, MMSystem;
 
type
TFramesPerSecond = 1..100;
TFreeCyclesEvent = procedure (Sender: TObject; Count:Integer) of object;
 
TSXEngine = class(TComponent)
private
{ Private Data Members }
FFramesPerSecond:TFramesPerSecond;
FEnabled:Boolean;
FThreadPriority:TThreadPriority;
FFPS:Integer;
FActivate:TNotifyEvent;
FDeActivate:TNotifyEvent;
FRender:TNotifyEvent;
FFreeCycles:TFreeCyclesEvent;
protected
{ Property Accessors }
procedure SetTargetFPS(Value:TFramesPerSecond);
function GetTargetFPS:TFramesPerSecond;
procedure SetEnabled(Value:Boolean);
procedure SetThreadPriority(Value:TThreadPriority);
{ Notification methods }
procedure DoRender;
procedure DoActivate;
procedure DoDeActivate;
procedure DoFreeCycles(Count: Integer);
{ Class Helper methods }
public
{ Public methods }
constructor Create(AOwner:TComponent);override;
destructor Destroy; override;
{Public Properties}
property FramesPerSecond : Integer read FFPS write FFPS;
published
{ Published properties }
property TargetFPS : TFramesPerSecond read GetTargetFPS write SetTargetFPS default 30;
property Enabled : Boolean read FEnabled write SetEnabled default False;
property ThreadPriority : TThreadPriority read FThreadPriority write SetThreadPriority;
{ Published Events}
property OnActivate : TNotifyEvent read FActivate write FActivate;
property OnDeActivate : TNotifyEvent read FDeActivate write FDeActivate;
property OnRender : TNotifyEvent read FRender write FRender;
property OnFreeCycles : TFreeCyclesEvent read FFreeCycles write FFreeCycles;
end;
 
implementation
{$J+}
const
FPS : Single = 33.3;
SECOND : Single = 1000.0;
 
type
TGameThread = class(TThread)
private
{ Private declarations }
FThreadCallback:TThreadMethod;
protected
procedure Execute; override;
property ThreadCallback: TThreadMethod read FThreadCallback write FThreadCallback;
public
constructor Create(CreateSupsended:Boolean;Callback:TThreadMethod);
end;
 
var Thread:TGameThread;
{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,
 
Synchronize(UpdateCaption);
 
and UpdateCaption could look like,
 
procedure TGameThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
 
{ TGameThread }
 
procedure TGameThread.Execute;
begin
{ Place thread code here }
while not Terminated do
begin
try
if Assigned(ThreadCallback) then Synchronize(ThreadCallback);
except
Terminate;
end;
end;
end;
constructor TGameThread.Create(CreateSupsended:Boolean;Callback:TThreadMethod);
begin
inherited Create(CreateSupsended);
ThreadCallback := Callback;
end;
 
{ TSXEngine }
constructor TSXEngine.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
if not (csDesigning in ComponentState) then
begin
if not Assigned(Thread) then
begin
Thread := TGameThread.Create(True,DoRender);
Thread.FreeOnTerminate := False;
Thread.Priority := ThreadPriority;
Thread.Suspended := not Enabled;
end;
DoActivate;
end;
Enabled := False;
TargetFPS := 30;
end;
destructor TSXEngine.Destroy;
begin
if not (csDesigning in ComponentState) then
begin
if Assigned(Thread) then
begin
Thread.Terminate;
Thread.Free;
end;
DoDeActivate;
end;
inherited Destroy;
end;
procedure TSXEngine.SetTargetFPS(Value:TFramesPerSecond);
begin
FFramesPerSecond := Value;
FPS := SECOND / Value;
end;
function TSXEngine.GetTargetFPS:TFramesPerSecond;
begin
Result := FFramesPerSecond;
end;
procedure TSXEngine.SetEnabled(Value:Boolean);
begin
FEnabled := Value;
if Thread <> nil then
Thread.Suspended := not Value;
end;
procedure TSXEngine.SetThreadPriority(Value:TThreadPriority);
begin
FThreadPriority := Value;
if Thread <> nil then
Thread.Priority := Value;
end;
procedure TSXEngine.DoRender;
const Start:DWord = 0;
OldStart:DWord = 0;
Count:Integer =0;
var FreeCycleCount:integer;
begin
try
Start := TimeGetTime;
FreeCycleCount := 0;
if Assigned(FRender) then FRender(Self);
if (Start - OldStart) < SECOND then
Inc(Count)
else
begin
FramesPerSecond := Count;
OldStart := Start;
Count := 0;
end;
repeat
DoFreeCycles(FreeCycleCount);
inc(FreeCycleCount);
until (TimeGetTime - Start) >= FPS;
except
Enabled := False;
Thread.Terminate;
end;
end;
procedure TSXEngine.DoActivate;
begin
if Assigned(FActivate) then FActivate(Self);
end;
procedure TSXEngine.DoDeActivate;
begin
if Assigned(FDeActivate) then FDeActivate(Self);
end;
procedure TSXEngine.DoFreeCycles(Count: Integer);
begin
if Assigned(FFreeCycles) then FFreeCycles(Self,Count);
end;
 
end.
/VCL_DELPHIX_D6/SXMedia/SXModPlayer.pas
0,0 → 1,542
{
SXMedia Components - Beta 1
--------------------------------
Copyright 1999 Dean Ellis
http://www.sillex.freeserve.co.uk
 
This unit is part of the SXMedia Component Set. This code is
supplied as is with no guarantees and must be used at your own
risk.
 
No modifications to this code must be made without the express
permission of the author. Please report any problems to
support@sillex.freeserve.co.uk
 
You may use these components to create any freeware/shareware
applications that you wish. If the components are to be used in
a commercail product then credit for developement of these components
should be given.
 
Credits :
 
Developer : Dean Ellis
Testers : Dominique Louis
Ivan Blecic
Naoki Haga
 
Version History
--------------------------------------------------------------------------------
25/01/2000 Modified Destroy and Stop methods to check IDSBuffer before
calling IBuffer.Stop. Stops the "Buffer not Created exception"
being thrown.
06/02/2000 Added OnStop and OnStart events
Added Finalize method. This does not have to be called but if you
manually finalize and initialize the DXSound Component you
need to call this method to clear the buffers and the Threads.
22/02/2000 Modified SetLoop code to correct functionality.
Modifed Stop method to make sure the OnStop event is only called
if it wsa playing and that the Value of Playing would be False
when the event is fired.
15/05/2000 Made use of the MppSdkLibLoaded variable to make sure the component
does nothing if the mppsdk.dll is not found.
Removed the raising of an exception in the constructor as it seemed to
be causing more problems than it was solving.
--------------------------------------------------------------------------------
}
unit SXModPlayer;
 
{$INCLUDE DelphiXcfg.inc}
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DXSounds, MMSystem, MpSndSys,
{$IFDEF StandardDX}
DirectDraw, DirectSound,
{$IFDEF DX7}
{$IFDEF D3DRM}
Direct3DRM,
{$ENDIF}
Direct3D;
{$ENDIF}
{$IFDEF DX9}
Direct3D9, Direct3D, D3DX9, {Direct3D8,} DX7toDX8;
{$ENDIF}
{$ELSE}
DirectX;
{$ENDIF}
 
type
 
TModOption = (NoResampling, BassExpansion, Surround, Reverb,
HighQuality, GainControl, NoiseReduction);
 
TModOptions = Set of TModOption;
 
TSXModPlayer = class(TComponent)
private
{ Private declarations }
FFilename: TFilename;
FDXSound : TDXSound;
FSoundBuffer : TDirectSoundBuffer;
FSoundNotify : IDirectSoundNotify;
FBufferDesc : TDSBufferDesc;
FWaveFormat : TWaveFormatEx;
FLoop : Boolean;
FPlaying : Boolean;
FOptions : TModOptions;
FEvents: TList;
FNotify: TList;
FOnStop: TNotifyEvent;
FOnStart: TNotifyEvent;
function GetPosition : Integer;
function GetSilenceData:Integer;
protected
{ Protected declarations }
procedure InitSoundEvents;
procedure ThreadCallback;
procedure SetFilename(const Value : TFilename);
procedure SetLoop(const Value : Boolean);
procedure SetOptions(const Value : TModOptions);
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure DoStop;
procedure DoStart;
 
function CreateEventList : TList;
function CreateNotifyList : TList;
function CreateSoundBuffer : TDirectSoundBuffer;
function CreateSoundNotify : IDirectSoundNotify;
procedure ClearSoundNotify;
procedure CreateEventThread;
procedure ClearSoundBuffer;
 
procedure StartThread;
procedure StopThread;
 
property BufferDesc : TDSBufferDesc read FBufferDesc write FBufferDesc;
property WaveFormat : TWaveFormatEx read FWaveFormat write FWaveFormat;
property SoundBuffer : TDirectSoundBuffer read FSoundBuffer write FSoundBuffer;
property SoundNotify : IDirectSoundNotify read FSoundNotify write FSoundNotify;
property Events : TList read FEvents write FEvents;
property Notify : TList read FNotify write FNotify;
public
{ Public declarations }
constructor Create( AOwner : TComponent); override;
destructor Destroy; override;
procedure Initialize(Stream:TMemoryStream);
procedure Finalize;
procedure Play(Loop : Boolean);
procedure Stop;
procedure Reset;
 
property Position : Integer read GetPosition;
property Playing : Boolean read FPlaying;
published
{ Published declarations }
property Filename : TFilename read FFilename write SetFilename;
property DXSound : TDXSound read FDXSound write FDXSound;
property Looping : Boolean read FLoop write SetLoop default False;
property Options : TModOptions read FOptions write SetOptions;
property OnStart : TNotifyEvent read FOnStart write FOnStart;
property OnStop : TNotifyEvent read FOnStop write FOnStop;
end;
 
implementation
 
// If you are having problems compiling the package edit this file.
// Comment out this include Statement. You should only need to do this
// if you are NOT using the latest version of DelphiX (991024)
// Comment this Define out if you are using DelphiX992404 or earlier
{$DEFINE VERSION991024}
 
const
EVENTCOUNT:Integer = 2;
 
type
{Music Event Callback thread}
TSXEventThread = class(TThread)
private
FEventCallback:TThreadMethod;
public
procedure Execute; override;
property EventCallback : TThreadMethod read FEventCallback write FEventCallback;
 
end;
 
 
var
 
EventThread : TSXEventThread;
CurrentEvent : Integer;
 
{ TSXEventThread }
 
procedure TSXEventThread.Execute;
begin
if not Assigned(EventCallback) then Terminate;
while not Terminated do
begin
EventCallback;
end;
end;
 
{ TSXModPlayer }
 
constructor TSXModPlayer.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
if MppSdkLibLoaded then
ModMixer.SetMixerOptions(0);
Events := CreateEventList;
Notify := CreateNotifyList;
end;
destructor TSXModPlayer.Destroy;
begin
Finalize;
{}
Notify.Free;
Events.Free;
inherited Destroy;
end;
procedure TSXModPlayer.Initialize(Stream:TMemoryStream);
var Data:Pointer;
Size:Integer;
FreeStream:Boolean;
begin
try
if MppSdkLibLoaded then
begin
if SoundBuffer = nil then InitSoundEvents;
FreeStream := False;
if Stream = nil then
begin
Stream := TMemoryStream.Create;
Stream.LoadFromFile(Filename);
FreeStream := True;
end;
Data := Stream.Memory;
Size := Stream.Size;
ModMixer.FreeSong;
ModMixer.LoadSong(Data,Size);
if FreeStream then Stream.Free;
end;
except
end;
end;
procedure TSXModPlayer.Finalize;
begin
Stop;
if Assigned(EventThread) then
begin
EventThread.Terminate;
EventThread.Free;
EventThread := nil;
end;
ClearSoundNotify;
if Assigned(SoundBuffer) then
begin
try
if Playing and (SoundBuffer.IDSBuffer <> nil) then
SoundBuffer.IBuffer.Stop;
finally
SoundBuffer := nil;
end;
end;
end;
 
procedure TSXModPlayer.InitSoundEvents;
// DelphiX Version 991024 Edit Version.inc to change declarations
{$IFDEF VERSION991024}
var SizeWritten: Cardinal;
{$ELSE}
// DelphiX Version 992404 and earlier
var SizeWritten : Integer;
{$ENDIF}
begin
if MppSdkLibLoaded and Assigned(DXSound) then
begin
DXSound.Primary.IBuffer.GetFormat(@FWaveFormat,Sizeof(WaveFormat),@SizeWritten);
ModMixer.SetWaveFormat(WaveFormat.nSamplesPerSec,WaveFormat.nChannels,WaveFormat.wBitsPerSample);
SoundBuffer := CreateSoundBuffer;
SoundNotify := CreateSoundNotify;
if (SoundBuffer <> nil) and (SoundNotify <> nil) then
CreateEventThread;
end;
end;
procedure TSXModPlayer.ThreadCallback;
var Msg : TMsg;
 
procedure ReadData(Event:Integer);
var W1:pointer;
// DelphiX Version 991024 Edit Version.inc to change declarations
{$IFDEF VERSION991024}
S1, S2 : Cardinal;
{$ELSE}
// DelphiX Version 992404 and earlier
S1,S2:Integer;
{$ENDIF}
NumWrite:Longint;
Pos:{$IFDEF UNICODE}Cardinal{$ELSE}Integer{$ENDIF};
Written1:Integer;
begin
if Event = 0 then
Pos := TDSBPositionNotify(Notify[EVENTCOUNT -1]^).dwOffset
else
Pos := TDSBPositionNotify(Notify[Event-1]^).dwOffset;
NumWrite := TDSBPositionNotify(Notify[Event]^).dwOffset - Pos;
if (NumWrite < 0) then
inc(NumWrite,BufferDesc.dwBufferBytes);
if SoundBuffer.IBuffer.Lock(Pos,NumWrite,w1,{$IFDEF UNICODE}{$IFNDEF D26UP}@{$ENDIF}{$ENDIF}s1,Pointer(nil^),{$IFDEF UNICODE}{$IFNDEF D26UP}@{$ENDIF}{$ENDIF}s2,0) = 0 then
begin
Written1 := ModMixer.Render(W1,S1);
SoundBuffer.IBuffer.Unlock(w1,Written1, nil,0);
if (Written1 = 0) then
Stop;
end;
end;
 
begin
CurrentEvent := MsgWaitForMultipleObjects(EVENTCOUNT,Events.List{$IFNDEF UNICODE}^{$ENDIF}[0], False, INFINITE, QS_ALLINPUT);
dec(CurrentEvent,WAIT_OBJECT_0);
if CurrentEvent >= EVENTCOUNT then
begin
while (PeekMessage(Msg, 0, 0,0, PM_REMOVE)) do
begin
if Msg.Message = WM_QUIT then
Stop
else
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
end
else
begin
ReadData(CurrentEvent);
end;
end;
function TSXModPlayer.CreateEventList : TList;
begin
Result := TList.Create;
Result.Capacity := EVENTCOUNT;
end;
function TSXModPlayer.CreateNotifyList : TList;
begin
Result := TList.Create;
Result.Capacity := EVENTCOUNT;
end;
function TSXModPlayer.CreateSoundBuffer : TDirectSoundBuffer;
{$IFDEF UNICODE}
const DSBCAPS_CTRLDEFAULT = DSBCAPS_CTRLPAN or DSBCAPS_CTRLVOLUME or DSBCAPS_CTRLFREQUENCY;
{$ENDIF}
begin
Result := TDirectSoundBuffer.Create(DXSound.DSound);
ZeroMemory(@BufferDesc,Sizeof(TDSBufferDesc));
FBufferDesc.dwSize := Sizeof(TDSBufferDesc);
FBufferDesc.dwFlags := DSBCAPS_CTRLDEFAULT or DSBCAPS_STATIC or
DSBCAPS_GETCURRENTPOSITION2 or DSBCAPS_CTRLPOSITIONNOTIFY;
FBufferDesc.dwBufferBytes := WaveFormat.nAvgBytesPerSec * 2;
FBufferDesc.lpwfxFormat := @WaveFormat;
Result.CreateBuffer(BufferDesc);
end;
function TSXModPlayer.CreateSoundNotify : IDirectSoundNotify;
type TNotifyArray = Array[0..99] of TDSBPositionNotify;
var PDSNotify : PDSBPositionNotify;
index : Integer; Offset: {$IFDEF UNICODE}DWORD{$ELSE}Integer{$ENDIF};
PNotify: ^TNotifyArray;
begin
Result := nil;
if SoundBuffer.IBuffer.QueryInterface(IID_IDirectSoundNotify,Result) = 0 then
begin
{setup notifications here}
Offset := 0;
GetMem(PNotify,EVENTCOUNT * Sizeof(TDSBPositionNotify));
for Index := 1 to EVENTCOUNT do
begin
New(PDSNotify);
PDSNotify^.dwOffset := OffSet;
PDSNotify^.hEventNotify := CreateEvent(nil,False,False,nil);
Notify.Add(PDSNotify);
Events.Add(Pointer(PDSNotify^.hEventNotify));
PNotify[Index-1] := PDSNotify^;
Inc(Offset, WaveFormat.nAvgBytesPerSec div {$IFDEF UNICODE}DWORD{$ELSE}Integer{$ENDIF}(EVENTCOUNT));
end;
 
if Result.SetNotificationPositions(EVENTCOUNT,{$IFDEF UNICODE}{$IFNDEF D26UP}@{$ENDIF}{$ENDIF}PNotify[0]) <> 0 then
ShowMessage('Notification Falied');
FreeMem(PNotify,EVENTCOUNT * Sizeof(TDSBPositionNotify));
end;
end;
procedure TSXModPlayer.ClearSoundNotify;
var PDSNotify : PDSBPositionNotify;
Index : Integer;
begin
for Index := Notify.Count -1 downto 0 do
begin
PDSNotify := Notify[Index];
Notify.Delete(Index);
Events.Delete(Index);
CloseHandle(PDSNotify^.hEventNotify);
end;
SoundNotify := nil;
end;
procedure TSXModPlayer.CreateEventThread;
begin
if not Assigned(EventThread) then
begin
EventThread := TSXEventThread.Create(True);
EventThread.Priority := tpNormal;
EventThread.EventCallback := ThreadCallback;
end;
end;
 
procedure TSXModPlayer.ClearSoundBuffer;
var w1,w2:pointer;
// DelphiX Version 991024 Edit Version.inc to change declarations
{$IFDEF VERSION991024}
S1, S2 : Cardinal;
{$ELSE}
// DelphiX Version 992404 and earlier
S1,S2:Integer;
{$ENDIF}
Data:Word;
begin
Data := GetSilenceData;
if SoundBuffer.IBuffer.Lock(0,0,w1,{$IFDEF UNICODE}{$IFNDEF D26UP}@{$ENDIF}{$ENDIF}s1,w2,{$IFDEF UNICODE}{$IFNDEF D26UP}@{$ENDIF}{$ENDIF}s2,DSBLOCK_ENTIREBUFFER) = 0 then
begin
FillMemory(W1,S1,Data);
if W2 <> nil then
FillMemory(W2,S2,Data);
SoundBuffer.IBuffer.Unlock(W1,S1,W2,S2);
end;
end;
procedure TSXModPlayer.StartThread;
begin
if Assigned(EventThread) then EventThread.Resume;
end;
procedure TSXModPlayer.StopThread;
begin
if Assigned(EventThread) then EventThread.Suspend;
end;
{}
procedure TSXModPlayer.Play(Loop : Boolean);
begin
if MppSdkLibLoaded then
begin
if Assigned(SoundBuffer) and Assigned(EventThread) then
begin
SetLoop(Loop);
ClearSoundBuffer;
StartThread;
FPlaying := True;
DoStart;
SoundBuffer.IBuffer.Play(0,0,DSBPLAY_LOOPING);
end;
end;
end;
procedure TSXModPlayer.Stop;
begin
if MppSdkLibLoaded then
begin
if Assigned(SoundBuffer) and Assigned(EventThread) then
begin
try
if Playing and (SoundBuffer.IDSBuffer <> nil) then
begin
FPlaying := False;
SoundBuffer.IBuffer.Stop;
DoStop;
end;
finally
StopThread;
end;
end;
end;
end;
procedure TSXModPlayer.Reset;
begin
if MppSdkLibLoaded then
ModMixer.SetCurrentOrder(0);
end;
{Property Accessors}
function TSXModPlayer.GetPosition : Integer;
begin
Result := 0;
end;
procedure TSXModPlayer.SetFilename(const Value : TFilename);
begin
if FFilename <> Value then
begin
FFilename := Value;
end;
end;
procedure TSXModPlayer.SetLoop( const Value : Boolean);
var Flags : DWord;
begin
if FLoop <> Value then
begin
FLoop := Value;
if MppSdkLibLoaded then
begin
Flags := ModMixer.GetMixerOptions;
case Value of
True:Flags := Flags or MPPMIX_LOOP;
False:Flags := Flags and (not MPPMIX_LOOP);
end;
ModMixer.SetMixerOptions(Flags);
end;
end;
end;
procedure TSXModPlayer.SetOptions( const Value : TModOptions );
const OptionArray: array[Boolean,TModOption] of DWord = (
(0,0,0,0,0,0,0),
(MPPMIX_NORESAMPLING, MPPMIX_BASSEXPANSION, MPPMIX_SURROUND,
MPPMIX_REVERB, MPPMIX_HIGHQUALITY, MPPMIX_GAINCONTROL,
MPPMIX_NOISEREDUCTION)
);
var Flags : DWord;
begin
if FOptions <> Value then
begin
FOptions := Value;
if MppSdkLibLoaded then
begin
Flags := 0;
Flags := Flags or OptionArray[NoResampling in Value,NoResampling];
Flags := Flags or OptionArray[BassExpansion in Value,BassExpansion];
Flags := Flags or OptionArray[Surround in Value,Surround];
Flags := Flags or OptionArray[Reverb in Value,Reverb];
Flags := Flags or OptionArray[HighQuality in Value,HighQuality];
Flags := Flags or OptionArray[GainControl in Value,GainControl];
Flags := Flags or OptionArray[NoiseReduction in Value,NoiseReduction];
ModMixer.SetMixerOptions(Flags);
SetLoop(Looping);
end;
end;
end;
procedure TSXModPlayer.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification( AComponent, Operation);
 
if (Operation = opRemove) and (AComponent = DXSound) then
DXSound := nil;
end;
procedure TSXModPlayer.DoStop;
begin
if Assigned(FOnStop) then
FOnStop(Self);
end;
procedure TSXModPlayer.DoStart;
begin
if Assigned(FOnStart) then
FOnStart(Self);
end;
function TSXModPlayer.GetSilenceData:integer;
const SilenceData:array[1..2] of integer = ($80,$0);
begin
Result := SilenceData[WaveFormat.wBitsPerSample div 8];
end;
 
end.
/VCL_DELPHIX_D6/SXMedia/SXMovie.pas
0,0 → 1,459
{
SXMedia Components - Beta 1
--------------------------------
Copyright 1999 Dean Ellis
http://www.sillex.freeserve.co.uk
 
This unit is part of the SXMedia Component Set. This code is
supplied as is with no guarantees and must be used at your own
risk.
 
No modifications to this code must be made without the express
permission of the author. Please report any problems to
support@sillex.freeserve.co.uk
 
You may use these components to create any freeware/shareware
applications that you wish. If the components are to be used in
a commercail product then credit for developement of these components
should be given.
 
Credits :
 
Developer : Dean Ellis
Testers : Dominique Louis
Ivan Blecic
}
unit SXMovie;
 
{$INCLUDE DelphiXcfg.inc}
 
interface
 
uses
Windows, Classes, SysUtils, ActiveX, Math, Dialogs,
DXSounds, DXDraws,
{$IFDEF StandardDX}
DirectDraw, DirectSound, DirectShow9,
{$IFDEF DX7}
{$IFDEF D3DRM}
Direct3DRM,
{$ENDIF}
Direct3D;
{$ENDIF}
{$IFDEF DX9}
Direct3D9, Direct3D, D3DX9, {Direct3D8,} DX7toDX8;
{$ENDIF}
{$ELSE}
DShow, DirectX;
{$ENDIF}
 
type
TMovieOptions = (VideoAndSound, VideoOnly);
TDisplay = (FullScreen, WideScreen, OriginalSize);
 
TScreenRect = class(TPersistent)
private
FLeft: integer;
FRight: integer;
FTop: integer;
FBottom: integer;
procedure SetLeft(Value: integer);
procedure SetRight(Value: integer);
procedure SetTop(Value: integer);
procedure SetBottom(Value: integer);
protected
public
procedure Assign(Value: TScreenRect); reintroduce;
published
property Left: integer read FLeft write SetLeft;
property Right: integer read FRight write SetRight;
property Top: integer read FTop write SetTop;
property Bottom: integer read FBottom write SetBottom;
end;
 
 
TSXMovie = class;
 
TMovieThread = class(TThread)
private
{ Private declarations }
FSXMovie: TSXMovie;
protected
procedure Execute; override;
public
property SXMovie: TSXMovie read FSXMovie write FSXMovie;
end;
 
TSXMovie = class(TComponent)
private
FMovieThread: TMovieThread;
FDXDraw: TDXDraw;
FDXSound: TDXSound;
FMMStream: IMultiMediaStream;
FPrimaryVidStream: IMediaStream;
FDDStream: IDirectDrawMediaStream;
FSample: IDirectDrawStreamSample;
FSurface: IDirectDrawSurface;
FDXSurface: TDirectDrawSurface;
FRect: TRect;
FDestRect: TRect;
FScreenRect: TScreenRect;
FFilename: TFilename;
FPlaying: Boolean;
FDoFlip: Boolean;
{Event}
FOnMovieEnd: TNotifyEvent;
FOnBeforeRender: TNotifyEvent;
FOnAfterRender: TNotifyEvent;
procedure SetFilename(Value: TFilename);
procedure SetScreenRect(Value: TScreenRect);
procedure DoMovieEnd;
procedure DoBeforeRender;
procedure DoAfterRender;
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure SetMovieStateRun;
procedure SetMovieStateStop;
procedure CreateMediaStream; virtual;
procedure SetupMediaSample; virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure UpDate; virtual;
// function SetDisplay(Value:TDisplay):Boolean;
procedure DisplayRect(Top, Left, Right, Bottom: integer);
procedure Play;
procedure Stop;
{}
published
property DXDraw: TDXDraw read FDXDraw write FDXDraw;
property DXSound: TDXSound read FDXSound write FDXSound;
property Filename: TFilename read FFilename write SetFilename;
property Playing: Boolean read FPlaying;
property DoFlip: Boolean read FDoFlip write FDoFlip;
property DestinationRectangle: TScreenRect read FScreenRect write SetScreenRect;
property OnMovieEnd: TNotifyEvent read FOnMovieEnd write FOnMovieEnd;
property OnBeforeRender: TNotifyEvent read FOnBeforeRender write FOnBeforeRender;
property OnAfterRender: TNotifyEvent read FOnAfterRender write FOnAfterRender;
end;
 
implementation
 
uses Graphics;
 
procedure TScreenRect.SetLeft(Value: integer);
begin
FLeft := Value;
end;
 
procedure TScreenRect.SetRight(Value: integer);
begin
FRight := Value;
end;
 
procedure TScreenRect.SetTop(Value: integer);
begin
FTop := Value;
end;
 
procedure TScreenRect.SetBottom(Value: integer);
begin
FBottom := Value;
end;
 
procedure TScreenRect.Assign(Value: TScreenRect);
begin
Left := Value.Left;
Right := Value.Right;
Top := Value.Top;
Bottom := Value.Bottom;
end;
 
{ Important: Methods and properties of objects in VCL can only be used in a
method called using Synchronize, for example,
 
Synchronize(UpdateCaption);
 
and UpdateCaption could look like,
 
procedure TMovieThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
 
{ TMovieThread }
 
procedure TMovieThread.Execute;
begin
{ Place thread code here }
if Assigned(SXMovie) then
SXMovie.SetMovieStateRun;
while (not Terminated) and Assigned(SXMovie) do
begin
Synchronize(SXMovie.UpDate)
end;
if Assigned(SXMovie) then
SXMovie.SetMovieStateStop;
end;
 
{SXMovie}
 
procedure TSXMovie.SetFilename(Value: TFilename);
begin
if Value <> '' then
FFilename := Value;
end;
 
procedure TSXMovie.SetScreenRect(Value: TScreenRect);
begin
FScreenRect.Assign(Value);
end;
 
procedure TSXMovie.DoMovieEnd;
begin
if Assigned(FOnMovieEnd) then FOnMovieEnd(Self);
end;
 
procedure TSXMovie.DoBeforeRender;
begin
if Assigned(FOnBeforeRender) then FOnBeforeRender(Self);
end;
 
procedure TSXMovie.DoAfterRender;
begin
if Assigned(FOnAfterRender) then FOnAfterRender(Self);
end;
 
procedure TSXMovie.Notification(AComponent: TComponent; Operation: TOperation);
begin
if Operation = opRemove then
begin
if AComponent is TDXDraw then FDXDraw := nil;
if AComponent is TDXSound then FDXSound := nil;
end;
inherited;
end;
 
procedure TSXMovie.SetMovieStateRun;
begin
try
if FMMStream.SetState(STREAMSTATE_RUN) <> S_OK then
Exception.Create('Set Movie State Run Exception');
except
end;
end;
 
procedure TSXMovie.SetMovieStateStop;
begin
try
FMMStream.SetState(STREAMSTATE_STOP);
finally
FPlaying := False;
end;
end;
 
procedure TSXMovie.CreateMediaStream;
var
wPath:{$IFDEF UNICODE}string{$ELSE}array[0..MAX_PATH] of WChar{$ENDIF};
AMStream:IAMMultiMediaStream;
Media:IMediaStream;
begin
Media := nil;
AMStream := nil;
try
CoCreateinstance(CLSID_AMMULTIMEDIASTREAM,nil,CLSCTX_INPROC_SERVER,IID_IAMMULTIMEDIASTREAM,AMStream);
{$IFDEF UNICODE}
wPath := Filename;
{$ELSE}
MultiByteToWideChar(CP_ACP,0,PAnsiChar(Filename),-1,wPath,Sizeof(wPAth) div sizeof(wPath[0]));
{$ENDIF}
AMStream.Initialize(STREAMTYPE_READ,AMMSF_NOGRAPHTHREAD,nil);
if (DXSound <> nil) and (DXSound.DSound <> nil) and (DXSound.DSound.ISound <> nil) then
AMStream.AddMediaStream(DXSound.DSound.ISound,{$IFDEF UNICODE}{$IFNDEF D26UP}@{$ENDIF}{$ENDIF}MSPID_PrimaryAudio,AMMSF_ADDDEFAULTRENDERER,IMediaStream(nil^));
AMStream.AddMediaStream(DXDraw.DDraw.IDraw,{$IFDEF UNICODE}{$IFNDEF D26UP}@{$ENDIF}{$ENDIF}MSPID_PrimaryVideo,0,Media);
AMStream.OpenFile({$IFDEF UNICODE}@wPAth[1]{$ELSE}wPAth{$ENDIF},0);
FMMStream := AMStream;
except
FMMStream := nil;
end;
end;
 
procedure TSXMovie.SetupMediaSample;
begin
try
FSample := nil;
FDDStream := nil;
FPrimaryVidStream := nil;
if FMMStream.GetMediaStream(MSPID_PrimaryVideo, FPrimaryVidStream) <> S_OK then Exit;
if FPrimaryVidStream.QueryInterface(IID_IDirectDrawMediaStream, FDDStream) <> S_OK then Exit;
if FDDStream.CreateSample(nil, PRect(nil)^, 0, FSample) <> S_OK then Exit;
FDXSurface := TDirectDrawSurface.Create(FDXDraw.DDraw);
if FSample.GetSurface(FSurface, FRect) <> S_OK then Exit;
FDXSurface.IDDSurface := FSurface;
except
 
end;
end;
 
procedure TSXMovie.UpDate;
function AspectRatio(SourceRect: TRect; var DestRect: TRect): Boolean;
var
SourceWidth, SourceHeight, DestWidth, DestHeight: Integer;
SourceRatio, DestRatio: Double;
begin
Result := False;
SourceWidth := SourceRect.Right - SourceRect.Left;
SourceHeight := SourceRect.Bottom - SourceRect.Top;
SourceRatio := SourceWidth/SourceHeight;
 
DestWidth := DestRect.Right - DestRect.Left;
DestHeight := DestRect.Bottom - DestRect.Top;
DestRatio := DestWidth/DestHeight;
if SourceRatio <> DestRatio then
begin
if DestWidth > DestHeight then
DestRect.Bottom := DestRect.Top + Round(DestWidth / SourceRatio)
else
DestRect.Right := DestRect.Left + Round(SourceRatio * DestHeight);
Result := True;
end;
end;
var
R: TRect;
Q: HResult;
begin
try
Q := FSample.Update(0, 0, nil, 0);
case Q of
HResult(MS_S_PENDING):;
HResult(MS_S_NOUPDATE):;
HResult(MS_S_ENDOFSTREAM):;
end;
if Q <> S_OK then
begin
FMovieThread.Terminate;
SetMovieStateStop;
FPlaying := False;
DoMovieEnd;
Exit;
end;
if (FSurface <> nil) and DXDraw.CanDraw then
begin
DoBeforeRender;
R := FDestRect;
if AspectRatio(FRect, R) then
FDestRect := R;
DXDraw.Surface.StretchDraw(FDestRect, FRect, FDXSurface, False);
with DXDraw.Surface.Canvas do
begin
Brush.Style := bsClear;
Font.Color := clWhite;
Font.Size := 8;
Textout(5, 5, 'SilleX Media - Beta 1');
Release;
end;
DoAfterRender;
if DoFlip then
DXDraw.Flip;
end;
except
on E: Exception do
ShowMessage(E.Message);
end;
end;
 
procedure TSXMovie.DisplayRect(Top, Left, Right, Bottom: integer);
begin
if not (csDesigning in ComponentState) then
begin
FScreenRect.Top := Top;
FSCreenRect.Left := Left;
FScreenRect.Right := Right;
FScreenRect.Bottom := Bottom;
end;
end;
 
procedure TSXMovie.Play;
begin
if not (csDesigning in ComponentState) then
begin
FDestRect.Left := FScreenRect.Left;
FDestRect.Right := FScreenRect.Right;
FDestRect.Top := FScreenRect.Top;
FDestRect.Bottom := FScreenRect.Bottom;
FPlaying := True;
CreateMediaStream;
SetupMediaSample;
if FSample <> nil then
begin
FMovieThread := TMovieThread.Create(True);
if Assigned(FMovieThread) then
begin
FMovieThread.FreeOnTerminate := False;
FMovieThread.SXMovie := Self;
FMovieThread.Resume;
end;
end;
end;
end;
 
procedure TSXMovie.Stop;
begin
if not (csDesigning in ComponentState) then
begin
FPlaying := False;
if Assigned(FMovieThread) then
begin
if not FMovieThread.Terminated then
begin
FMovieThread.Terminate;
DoMovieEnd;
end;
FMovieThread.Free;
FMovieThread := nil;
end;
if FDXSurface <> nil then
begin
FDXSurface.Free;
FSurface := nil;
end;
end;
end;
 
constructor TSXMovie.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FScreenRect := TScreenRect.Create;
CoInitialize(nil);
end;
 
destructor TSXMovie.Destroy;
begin
if not (csDesigning in ComponentState) then
begin
FPlaying := False;
if Assigned(FMovieThread) then
begin
if not FMovieThread.Terminated then
FMovieThread.Terminate;
FMovieThread.Free;
FMovieThread := nil;
end;
if Assigned(FSample) then
FSample := nil;
if Assigned(FDDStream) then
FDDStream := nil;
if Assigned(FPrimaryVidStream) then
FPrimaryVidStream := nil;
if Assigned(FMMStream) then
FMMStream := nil;
if Assigned(FSurface) then
FSurface := nil;
end;
FScreenRect.Free;
CoUnInitialize;
inherited;
end;
 
end.
 
/VCL_DELPHIX_D6/SXMedia/SxSample/SXMedia.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/SXMedia/SxSample/main.dfm
0,0 → 1,798
object FrmMain: TFrmMain
Left = 97
Top = 154
BorderStyle = bsToolWindow
Caption = 'SX Media - Example Project'
ClientHeight = 329
ClientWidth = 536
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = True
OnKeyDown = DXDraw1KeyDown
PixelsPerInch = 96
TextHeight = 13
object DXDraw1: TDXDraw
Left = 0
Top = 0
Width = 536
Height = 329
AutoInitialize = True
AutoSize = True
Color = clBtnFace
Display.FixedBitCount = True
Display.FixedRatio = True
Display.FixedSize = False
Options = [doAllowReboot, doWaitVBlank, doCenter, doDirectX7Mode, doHardware, doSelectDriver]
SurfaceHeight = 329
SurfaceWidth = 536
Align = alClient
TabOrder = 0
Traces = <>
end
object MainMenu1: TMainMenu
Left = 398
Top = 9
object FileMnu: TMenuItem
Caption = '&File'
object Exit1: TMenuItem
Caption = 'E&xit'
OnClick = Exit1Click
end
end
object SXShowMnu: TMenuItem
Caption = 'SXShow'
object OpenFileItem: TMenuItem
Caption = '&Open File'
OnClick = OpenFileItemClick
end
object PlayItem: TMenuItem
Caption = '&Play'
OnClick = PlayItemClick
end
object StopItm: TMenuItem
Caption = '&Stop'
OnClick = PlayItemClick
end
end
object SXEngineMnu: TMenuItem
Caption = 'SXEngine'
object StartItem: TMenuItem
Caption = 'St&art'
OnClick = StartItemClick
end
object StopItem: TMenuItem
Caption = 'St&op'
OnClick = StopItemClick
end
end
object SXModPlayerMnu: TMenuItem
Caption = 'SXModPlayer'
object OpenFile1: TMenuItem
Caption = 'O&pen File'
OnClick = OpenFile1Click
end
object Start1: TMenuItem
Caption = '&Start'
OnClick = Start1Click
end
object Stop1: TMenuItem
Caption = '&Stop'
OnClick = Stop1Click
end
end
end
object OpenDlg: TOpenDialog
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofNoLongNames]
Title = 'SXMedia Open'
Left = 364
Top = 8
end
object SXModPlayer: TSXModPlayer
DXSound = DXSound1
Options = [BassExpansion, Surround, Reverb, HighQuality, GainControl, NoiseReduction]
Left = 470
Top = 8
end
object SXEngine: TSXEngine
ThreadPriority = tpIdle
OnRender = SXEngineRender
Left = 438
Top = 10
end
object SXMovie: TSXMovie
DXDraw = DXDraw1
DXSound = DXSound1
DoFlip = True
DestinationRectangle.Left = 0
DestinationRectangle.Right = 200
DestinationRectangle.Top = 0
DestinationRectangle.Bottom = 200
Left = 470
Top = 48
end
object DXSound1: TDXSound
AutoInitialize = True
Options = [soExclusive]
Left = 330
Top = 12
end
object DXImageList1: TDXImageList
DXDraw = DXDraw1
Items.ColorTable = {
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000}
Items = <
item
Name = 'logo_n.bmp'
PatternHeight = 0
PatternWidth = 0
Picture.Data = {
07544269746D61700A520000424D0A520000000000003608000028000000D200
00002D0000000100100003000000D44900000000000000000000000100000000
0000007C0000E00300001F000000000000000000800000800000008080008000
00008000800080800000C0C0C000C0DCC000F0CAA60018081000080000000800
0800080808001000080010080800100010001008100010101000180010001808
10001808180025001800210818001810100022091D0025102100181818002118
1800310427003110290039102D00211821002918210031182900262326003118
310039183100352632004A143B006B0B520066255600493A4600653358006E32
61006F4364008B176E00892E71008E3375009C3184007E4171008E4279009C39
840094468400A5007B00A5107E00A5398400A5398C00A0467F00A0468400A04A
8800AD007F00AD108400A5428C00A54A9000C1009000B9229400D6009C00F534
9500565256005A5A5A00635A5E006363630075566D008452730088567B00A563
6B00A55A7300AD637300A5527B008C5A7B0094568400A1568800A0639400AD5A
8400AD4A8C00AD528C00AD5A8C00AD4A9400AD529400AD5A9400AD529C00AD5A
9C00E75A7300E75A7B00EF527B00EF5A7B00EF4A8400EC4F89009E7A6100B591
5C00B8C232007B71790087878700AF688A00B47B7E00CDAF4000C7CE2F00C0CA
4500CE906000CB898000C0B65B00C4AB7600BDF70000C1F30400C6EF0800BDF7
0800C6F70800BDFF0000BDFF0800C6FF0000C0E41000C1DE1800BDF31000CED6
2100C0E91800BDE22100C4E12D00D600A500D608A500DE00A500DE08A500E700
A500DE00AD00EB00AD00EF00B500F700B500F708B500F700BD00FF00B500FF08
B500FF00BD00FF00C600E221B100F721A500F714B900FF10B100FB10BD00FF08
C600FC18C300EC29AF00EF2DB500E241B700F92DC700FF39CE00E246BD00FF46
D200A57B9C00AD639C00AD6B9C00AD739C00B55A9C00B5639C00B56B9C00B563
A500B56BA500B573A500BD7B9C00BD5AA500BD6BA500BD73A500BD6BAD00D673
9C00C66BAD00BD73AD00BD7BAD00C67BAD00D65AB500D663B500CE6BB500CE73
B500D66BB500D65ABD00DE52BD00EF52C600FF5AD600FF67DA009C8C9C009C94
9C00AD8CA900AD94AD009C9C9C00A59C9C00AD9CA500AD9CAD00B594AD00B59C
AD00BD849C00C6849C00C68C9C00C6949C00C68CA500C694A500C684AD00C68C
AD00C67BB500C684B500CE7BA500CE7BB500CE84BD00D68CC600E794CE00FF7B
DE00FF84DE00FF84E700FF8CE700FF94E700B4B0B200C8B7C100D3CCD000E6B9
D600DED6DE00E7D6E700EFD6E700FF9CE700FFA5EF00F7ADE700FFADEF00FFBD
EF00F7CEEF00FFCEF700DEDEDE00E7DEE700E7E7E700EFDEE700FFD6F700EFDE
EF00EFE7EF00FBDEF300FFE7FF00EFEFEF00F7EFF700FFEFFF00F7F7F700FFF7
FF00FFFFFF00F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF00
0000FF00FF00FFFF0000FFFFFF00FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FDE7BBD779C739C733967F75EB656734E1042EF3DEF3D
AE398B2DAE398B2D8B2D8B2DE820E82084108410420800000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000002104420884108614E8204A298B2DAE391042B656B656
F75EB656F75E734E744EF75E3967BD777B6F9C739C73BD77DE7BFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FDE7BBD77BD779C739C735B6F9C73F75EB656B6561042AE398B2D4A29
4208E82042088410841000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000042088614E8206A298B2DEF3D744E734EB656F75E39677B6F9C73BD77
BD77DE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
DE7BDE7B9C739C737B6F7B6FF75EB656744E10428B2DE820E82042088614430C
240C440C0000240C25100208010002080208030845108614E820E820CC280D31
0D314E3550355035503950397139503950397139503971395039713950395039
7139503971395039713971395039713950397139713971395039713950397139
5039713950397139503971395039503950395039503971395039503971395039
5039503971395039713950397139503950395039503971395039503950395039
7139503950397139503971395039713950397139503971397139713971397139
5039713950397139503971397139503971395039713950395039713950395039
71395039503950354E350D310D31CC28E820E82086144514240C020400000000
00000000000000000000010002044208430C210484108410E8204A298B2D1042
F75EB656F75E39679C73BD77DE7BDE7BFF7FDE7BFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
DE7BDE7BBD773967F75EB656734EAE394A298410430C430C02080208030C0208
030C481848188C285034EF3411393445754DB751185A185A185A185A185A185A
185A185A185A185A185A185A185A185A185A185A185A185A185A185AF859185A
185A185A185AF755185AF859185AF755F859185AF755F859F755F859F755F859
F855F755F859F755F855F755F859F755F855F755F855F755F855F755F755F855
F755F755F855F755F755F755F755F755F755F855F755F755F855F755F855F755
F855F755F855F755F855F755F859F755F855F859F755F859F855F859F755F859
F859F755185AF859185AF755185A185AF755185A185A185A185AF859185A185A
185A185A185A185A185A185A185A185A185A185A185A185A185A185A185AF859
F859B855764D1445B34050342C24481805100104000000000000000000000000
00002104430CE8206A291042734EF75E39677B6FBD77BD77DE7BDE7BFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B
DE7BFF7F7B6FF75EF75EEF3D6B2DE820430C240C0204030C040805102C245034
153C7B54FB587A59B959F859185A185A185A185A185A185A185A185A185A185A
185A185A185A185A185A185A185A185A185AF859185AF755185AF859F859F755
185AF755F859F755F859F755F855F755F855F755F855F755F755F755F855F755
F755F755F755F755D755F755F755D755F755D755F755D755F755D755D755F755
D755D755F755D755D755F755D755D755F755D755D755F755D755F755D755D755
F755D755D755F755D755F755D755F755D755F755F755D755F755F755F755F755
F755F755F755F755F855F755F855F755F859F755F859F855F859F755F859185A
F859185AF755185A185A185AF755185A185A185A185A185A185A185A185A185A
185A185A185A185A185A185A185A185A185AF8597A59FB587B54354014382C24
4818010400000000000000000000420800008614AE39734EB65639673967BD77
BD77DE7BDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B
FF7F7B6F3967F75E1042E8204208430C240C020405104818143817441E58BD58
FB58B959F859185A185A185A185A185A185A185A185A185A185A185A185A185A
F859185A185A185AF859185AF755185AF859F755F859185AF755F859F755F855
F755F859F755F755F755F855F755F755D755F755D755F755D755F755D755D755
D755D755D755D755D755D751D755D755D755D755D755D751D755D755D755D751
D755D755D755D651D755D755D751D755D755D751D755D755D751D755D755D755
D651D755D755D755D755D755D755D755D755D755D755D751D755D755D755D755
D755D755D755D755D755F755D755F755D755F755D755F755F755F755F755F755
F855F755F855F755F859F755F859F855F859185AF859185AF755185A185A185A
F859185A185A185A185A185A185A185A185A185A185A185A185A185A185A185A
D9597A59BD585E581A50153C2C24261400000000020400000000210486148B2D
1042F75E39677B6FBD77DE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BDE7B
BD779C733967734E4A2900000000000002042C2414381B501F5C5E58FB587A59
185A185A185A185A185A185A185A185A185A185A185A185A185A185A185A185A
185AF859185AF859F859F755F859F755F859F755F755F855F755F755D755F755
D755F755D755D755F755D755D755D755D755D755D755D755D755D755D755D751
D755D755D651D755B651D751B651B755D755B651B755B751B651B755B651B755
B651B755B651B751B651B755B651B751B651B751B751B651B751B751B651B751
B651B751B751B651D751B751D651B751B751D751B751D651B751D755B651D751
D755D751D755D751D755D755D755D755D755D755D751D755D755D755D755D755
D755D755F755D755F755D755F755F755F755F755F855F755F855F755F859F855
F859F755185AF8591856185A185A185AF859185A185A185A185A185A185A185A
185A185A185A185A185A185AB9591B5D7B541E5C1E58153C2C24051000000000
01000000420886148B2DB65639677B6F9C73DE7BDE7BFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BBD77
BD773967F75EEF3D84100000000004082C241A4C1E5C1F5C3E5CFB58B959F859
185A185A185A185A185A185A185A185A185A185A185A185AF859185AF755185A
F755F859F755F859F755F855B83A372337233723372337233723372337233723
372337233723372337233723B755D755D755D651D755D751D755B651D751B751
D751B651B751B751B751B651B83A372337233723161737233723161737233723
16173723372316173723372337231617B83A9651B651B651B651B651B651B651
B651B751B651B651B651B751B651B651B651B651B651B651B651B651B751B651
B751B651B751B651B751B751B651B751B751D651B751D751B651D755D751D755
D751D755D755D755D755D751D755D755D755D755D755D755F755D755F755F755
F755F755F755F855F755F859F755F859F859F755185AF8591856185A185AF859
185A185A185A185A185A185A185A185A185A185A185AF8595B5D5E581E5C1F5C
1B5414384818000000000104430886148B2D734EB6563967BD77DE7BFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B
DE7B5B6F744EAE392204010402042C241A4C1F5C1F5C1E5CBD587A59185A185A
185A185A185A185A185A185A185A185AF859185A185A185AF755F8591856F859
F755F859F755F855F755F755F755F755D72AD703F703F703F703F703F703F703
F703F803F703F703F703F703F703D707D751B651B751B751B751B651B751B651
B751B651B651B651B651B651B651B6513817F703F703F703F703F703F703F703
F703F803F703F703F703F703F703F703D703F703D72A964D9651965196519651
965196519651964D9651964D96519651964D9651964D9651B65196519651B64D
9651B6519651B6519651B651B651B651B651B651B651B751B651B651B751B651
B751B751B651B751B751D651B751D755D751D755D755D751D755D755D755D755
D755D751D755D755F755D755F755F755F755F755F855F755F859F755F859F755
F859185A185A185A185A185AF859185A185A185A185A185A185A185A185A185A
B959FB581E5C1F5C1E581D5814380510040800000000E8204A291042F75E7B6F
BD77DE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B
BD777C737B6FAE39841001044818153C1E5C1F5C1F5C5E58FB58D959185A185A
185A185A185A185A185A185A185AF859185AF755185AF859F755F859F755F859
F755F755F855F755F755D755F755D755D755D755384ED72AD72AD72A970BF703
F703F703F703F703F703970FD72A362EB83A362ED751B651B651B651B651B651
B651B6519651B6519651964D96519651964D9651F63D362EB83A362E1617F703
F803F703F703F703F703F703F703D703D7071617D72A362EF63D964D964D954D
964D964D954D964D964D954D9651964D964D954D9651964D9651964D964D9651
964D9651964D9651964D9651965196519651964D96519651964DB6519651B651
9651B651B651B651B651B651B651B751B651B751B651B751B751B651D751B751
D755D651D755D755D755D755D751D755D755D755D755F755D755F755F755F755
F855F755F855F755F859F755F859F755185A185A185AF859185A185A185A185A
185A185A185A185AF8597A599D541F5C1F5C1E581A4C2C240204000002084208
8614734EF75E7B6FBD77FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
DE7B7C733967734E430800002C241A4C1F5C1F583F547C39183E3852185A185A
185A185A185A185A185A185AF859185AF755185AF859F755F859F755F855F755
F755F755F755D755D755F755D755D755D755D751D755D755D751D755D751B755
D651183E970FF703F703F703F703D72A9651B6519651B651B65196519651B64D
965196519651964D96519651964D9651964D964D9651964D964D754D964D964D
9541F703F703F703F703F703F703F703D703D72A7549764D754D764D754D764D
754D764D754D764D754D764D754D764D754D764D754D964D754D764D954D764D
764D954D764D964D764D954D964D964D964D954D964D964D9651964D9651954D
96519651964D96519651964D96519651B64D9651B651B651B651B651B651B651
B751B651B751B751B651B751D751D651D755B755D751D755D755D755D751D755
D755D755F755F755F755F755F855F755F855F859F755F859F755185A185AF859
185A185A185A185AF755185A185A185A185A183E183E7E501F581E5C1D585034
040801004308E8208B2D744E39679C73DE7BDE7BFF7FFF7FFF7FFF7FFF7FFF7F
FF7FBD773967B656AE3900002C241A4C1F5C1F5C7E50392E3723384E185A185A
185A185A185A185A185AF859185AF755185AF859F755F859F755F855F755F755
F755D755F755D755D755D755D755D755D751D755D755D751B755D651B751B751
B651B751B651B751B6513723D703F703F703F703D72A964D9651964D96519651
964D9651964D964D954D764D964D954D764D964D754D964D754D764D754D954D
764D9541970BF703F703F703F803F703F703D707F63D7549754D754D754D754D
754D754D754D7549754D754D754D754D754D754D7549754D754D7549754D754D
7549754D754D754D754D754D754D754D754D754D764D754D764D754D964D764D
954D764D964D954D964D964D964D9651954D96519651964D96519651964D9651
B6519651B651B651B651B651B651B751B651B751B751B651D751B751D755D651
D755D755D751D755D755D755D755F755D755F755F755F755F855F755F859F755
F859F755185A185AF859185A185A185A185A185A185A185A1856D72AB91E7C39
1F5C1F601E5850340510020486144A29EF3DB6567B6FDE7BDE7BFF7FFF7FFF7F
FF7FFF7FBD775B6F55564A29051017441F5C1F5CDE48B91ED707B83AF859185A
185A185A185A185AF859185AF755185AF859F755F855F755F855F755F755F755
D755F755D755D755D755D755D755D751D755D751B755D651B751B651B751B651
B751B651B651B651B6519651B6519651D72AD703F703F703F703D72A964D964D
954D764D964D954D764D964D754D964D754D764D754D754D754D754D754D754D
754D75499541D707D703F803F703F703F703F703770B954175495549554D5549
554955495549554955495549554D75495549554955495549554D55495549554D
55495549754D5549554D7549554D7549554D754D7549754D754D754D754D754D
7549754D754D754D754D764D754D764D964D754D964D964D954D964D964D9651
964D96519651964D96519651964DB6519651B651B651B651B651B751B651B751
B651B751D751D755D651B755D751D755D755D755D755D751D755F755F755D755
F755F855F755F859F755F859F755185AF859185A185A185A185A185A185A185A
38527817770B7C351F581F601B502C240510030CE820AE39B65639679C73DE7B
FF7FFF7FFF7FBE7B5B6F5556124150341F581F5C7E50B91EF80378171856185A
185A185A185A185AF859F755185AF859F755F859F755F859F755F755F755D755
F755D755D755D755D755D755D751D755D751B755D651B751B651B751B651B751
B651B651B651B65196519651B64D9651964D9651964DF63DD703F703F703F703
1617964D754D964D754D764D754D754D754D754D754D7549754D754D5549754D
554975495549F63DD707D703F703F703F703F703F703970F7545554955495549
5549554955495549554955495549554955493549554955495549554955495549
5549554955495549554955495549554955495549554955495549554955495549
554D7549554D754D7549754D7549754D754D754D754D754D754D764D754D764D
954D764D964D954D964D964D9651964D96519651964D96519651B6519651B651
B651B651B751B651B751B651B751B651D755D751B755D751D755D755D755D755
D755F755D755F755F755F855F755F755F859F755F859185AF755185A185AF755
185A185A185A185AD72AD703770B5D391E581F5C153C261404088614AE39744E
39679C73BD77FF7FFF7FDE7BD85E334135401E581E5C392ED703F703D72A185A
185A185AF859185A185AF755F859185AF755F859F755F755F755F755D755F755
D755D755D755D755D755D751D755D751B755D651B751B651B751B651B751B651
B651B651B65196519651964D9651964D9651964D9651954D764D954DF63D970F
F703F703F703970F9541754D754D7549754D7549754D554D5549554D55495549
55495549554D5549F63DD703F703F703F703F703F703D7031617754134453549
3445354934453549344534453445344534453445344534453445344534453445
3445344534453445354934453549344555493445554935495549554955495549
5549554955495549554955495549554D55497549554D754D7549554D754D754D
7549754D754D764D754D764D754D964D954D764D964D954D9651964D9651964D
965196519651B651B651B651B651B651B751B651B751B651D751D755B651D755
D751D755D755D755D751D755F755D755F755F855F755F855F755F859F755185A
F859185AF859185A185A185A185AB83AD707F703B91E7E501E581C5448180408
E820AE39744EF75E7B6FFF7FDE7B3967EF3417445E587E50590FF703F703D72A
185A185A185A185A185AF859F755185AF755F859F755F755F755F855F755D755
F755D755D755D755D755D751D755D751B755D651B751B651B751B651B751B651
B651B6519651964D96519651964D9651964D9651954D764D964D754D964D754D
764D95413817F703F703F703970B954175455549554D55495549554955495549
55495549554955493445362ED703F703F703F703F703F703F703161734453445
3445344534453445344534453445144534453445344534453445144534453445
3445344514453445344534453445344534453445344534453445344534453445
3445354934453549344555495549344555495549554955495549554955497549
554D7549554D754D754D7549754D754D764D754D764D754D964D754D964D954D
9651964D9651964D9651964D9651B651964DB651B651B751B651B751B651B751
D651B755D751D755D651D755D755D755D755D755F755D755F755F755F755F859
F755F855F755185A185AF755185A185A185A185A584ED703F703D7037C351F5C
1E5C2C2426148614AE39B656F75EFF7FDE7B4E351A501E583D41D703F703F703
D72A185A185A185AF859185AF755185AF755F859F755F755F755F855D755F755
D755D755D755D755D751D755D751B755D651B751B651D651B751B651B651B651
B6519651964D96519651964D9651964D9651754D964D964D764D954D764D764D
754D764D754D754D75491617F703F703F703D707F63D55495549554955493445
554955493445354934453445362ED703F703F703F703F703F703F703B91E3341
1445144534451445144534451445334114451445144514451445144514453341
1445144514451445344514451445144514451445144514453445144534451445
3445344534453445344534453445344534453549344535493549554935493445
55493549554955495549554955495549754D7549754D7549754D764D754D764D
964D764D964D964D964D964D9651964D9651965196519651B6519651B6519651
B651B751B651B751D651B755D751B755D751D755D751D755D755D755F755D755
F855F755F755F859F755F859F755185AF859185AF755185A185A584EF703F703
F703392E1F581E5C2C242614E8201042F75EFF7FB6561A4C1E5C3D41D703F703
F7037817185A185AF755185A185AF755F859F755F859F755F755F855F755D755
F755D755D755D755D755D751D755D751B755D651B751B6515341EF340D31EF34
0D31EF340D310D31EF340D310D31EF340D310D310D31EF34CD2C0D310D31CD2C
0D31CD2C0D31CD2C0D3134457549554D362EF703F703F703D703362E55495549
3445554934453445344534453445362EF703F703F703F803F703F703F703362E
134114451139CD2C8C288C28CD2C8C288C28B0341445144514451445D3401445
1445D1388C288C28CC288C288C288C2811391445144514451445144514451445
14451445144533411445344514453445CD2C8C2833413445EF34CD2CEF34CD2C
EF34EF34EF34EF34CD2CEF34EF34EF34EF34EF3455491241EF34EF34EF34EF34
EF34EF34EF34EF34EF34EF34EF34EF34EF347549965153415035EF3450355341
B65150397549B651B651B751B651B751B651D755D6515039503950395241D755
F755D755F755F755F855D755F859F755F855F755185AF859185A185AF755185A
B83AF703F703F703B91E1F5C1C542C24440C6A291042FF7F35491F5CDE48D703
F703F703D703584E185AF859185A185AF755185AF755F859F755F755F755F755
D755F755D755D755D755D751D755D751B755D651B751D751B651B751E8200000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000240C554955495549F63DD703F703F703D703
362E3445344535453445344534451445B91ED703F703F703F703F703F703D703
362ED3401445144501040000000000000000000000008C28D340D340D340D340
D340D440D34000000000000000000000000000008C28D440D3401445D3401445
1445D34014451445144514451445144513414818000000001139D34000000000
00000000251046144614461448188614461446144818E8203549CC2800000000
00000104461486144614461486140308000000000000E820764D861400000000
00000D31964DCC2801045039B651B751B651B751B651D751B755000000000000
0000954DD751D755F755D755F755F755D755F859F755F859F755185AF859F755
185A185A18567817F703F703F703392E1F5C1A4C0408420810427D771E581F5C
590FF703F703F7033723185A185A185AF859F755F859F755F859F755F855F755
F855D755F755D755D755D755D755D751D755B751D755B651B751B651B651B751
E820000000000000000000000000010475499349554953417549534175495341
3341EF3400000000000000000000000000000104554955495549344595419707
F703F703F7031617344534453445144534451617D703F703F703F703F703F703
D703F32DD4401445D340D44400000000000000000000000000004818D444D340
D340B340D340B340B34000000000000000000000000000008C28D340D340D340
D340D340D340D440D340D4401445D3401445D138240C00000104CD2C14451241
000000000000000034453445344534453445344535495549344555495549CC28
00000000000046147549554D7549754D754D8C28000000000000E820764D4614
000000000000CD2C9651B64DEF340104CC28B651B651B651B751B651B7510000
0000000000009349D755D755D755D755D755F855F755F855F859F755F859F755
F859185A1856F859185A584EF703F703F703F703DE481E582C2400006A291F6E
1F5C7C35F803F703F703F703584E1856185AF859F755185AF755F859F755F755
F755F755D755F755D755D755D755D751D755D751B651D755B651B751B651B751
B651B751E82000000000000000000000000022049651754D964D954D764D754D
754D754D754D754D481800000000000000000000000001045549554934455549
344575411617F703F703F70316175341144533411617F703F703F703F703F703
F703D70794311445D340D440D340D34000000000000000000000000000004818
D340B340B340B340B340B340D13800000000000000000000000000008C28B340
B340D340B340D340D340D340D340D340D340D340CD2C01040000030CD1381445
1445D13800000000000000008C28CC288C288C28CC2813413445344555493445
55498C2800000000000046145549754D5549754D7549E8200000000000004818
964D86140000000000000D31964D9651964D53414208240C440C440C86144614
861400000000000000009349D755D751D755F755D755F755D755F755F755F755
F855F755185AF859F755185A185A185A970FF703F703F70338171F5C1A500000
8410DF641F5C3817D703F703F703D707185A185AF755185AF859F755F859F755
F855F755F855D755F755D755D755D755D755D751D755D751B755D651B751B651
B651B751B651B651CC28440C430C240C430C240C240C4614954D964D754D764D
764D754D764D754D554911394510000000000000000000000000020455495549
344555493445344535451617D703F703F703770B74351617F703F703F703F703
F703F70397077435D340D340D340D340D340D340000000000000000000000000
00004818B340B340D138B340B340B340B0340000000000000000000000000000
8C28B340B340B340B340B340D340B340D340D340D3408C28000000004614D340
1445D34014451139000000000000000025104510251045104510134134453549
344555493445CC2800000000000046145549754D5549754D554D8C2800000000
0000E820764D4614000000000000CD2C964D9651964DB651954D861400000000
CC28B651B75100000000000000009349D755D751D755D755D755F755D755F855
F755F859F755F859F755185AF755185AF859185A3723F703F703F803D7037E50
1F5C040800005F5C1F5CD703F703F703F7037817185AF859185A185AF755185A
F755F859F755F755F755F755D755D755D755D755D755D751D755B751D651B755
B751B651B751B651B651B65196519651964D9651964D9651964D954D964D754D
964D754D5241CD2CE820240C0000000000000000000002088614CC2811393445
55493445354934453445354934453445362EF703F703F703F703F703F703F703
F803F703D703770B5439D340D340D440D340D340D340B3400000000000000000
0000000000004818B340B340B340B340D138B340503400000000000000000000
000000008C28B340B340B340D138B340B340B340D340D1382614000000008C28
D340D3401445D3401445D1380000000000000000144514453445144534451445
34453445344535493445CC28000000000000451455495549554955497549E820
0000000000004818954D46140000000000000D31954D9651964D96519651B651
CC28000000008614954D00000000000000009349D755D751D755D755F755D755
F755D755F855F755F859F755F859F755185A185AF859185AD72AF703F703F703
F7037C391F5C481800003E5C1F5CF803F703F703F8037817F859185A185AF755
F859F755185AF755F859F755F859D755D755F755D755D755D755D751D755B651
D755B751B651B751B651B651B751B6519651B651964D96519651964D96517549
EF34CC2845100104000000000000000001004514CC28EF343341554955495549
554955493445554934453549344534453445344534459535D703F703F703F803
F703F703F703F703770B133DD340D340D340D340D340D340B340D34000000000
000000000000000000004818B340D138B3405034B3405034D138000000000000
00000000000000008C28D138B340B340B340B340B340B340B034020400000104
B034D340D3401445D3401445D340D3400000000000000000CC28CD2C8C28CD2C
CD2CCD2CCD2CCD2CCD2CCD2C3549CC28000000000000240CCC28CC28CC28CC28
CC280000000000000000E820764D4614000000000000CD2C964D9651964D9651
B651964DB651503901040000020800000000000000009349D755D751D755D755
D751F755D755F855F755D755F855F755F8591856F859F755185A185AB83AF703
F703F703F7037C351F5C481802085F5C1F5C9707F703F703F703970F185A185A
185AF755185AF859F755F755F855F755F755D755F755D755D755D755D755D751
D755B751D755B651B751D651B751B651B651B751B6519651964D5241CC288614
030C00000000000000000000240CE820CD2C3341754D7549554D55495549554D
5549554955493445554934455549344534453445344534451445F32DB803F703
F703F703F703F703F7031617133DD444D3401445D340D444D340D340D340B340
00000000000000000000000000004818B340B340D138B340D138B3408C280000
0000000000000000000000008C28B340B340D138B340B340B3408C2800000000
240CD138D444D340D340D3401445D3401445D340CD2C8C288C28CC288C288C28
CC288C28CC288C28CC28CC28CD2CCD2C35491139CD2CCC28CD2CCC28CD2CCC28
CD2CCD2CCD2CCD2CCD2CCD2C0D313341954D33410D31CD2C0D3152419651964D
9651964D9651B6519651B65175490D310D310D31EF340D315035B755D651D755
D755D755F755D755F755D755F755F859F755F859F755F859F755185A185AF755
D72AF703F803F703F7033D411F5C2614E8207F691F5C392EF803F703F703D703
1856185AF859185AF755F859F755F859F755F755F855D755F755D755D755D755
D751D755D755D751B651D751B651B755B651B751B6519651EF34440C00000000
00000000000000008614CD2C5039554D964D754D754D764D7549754912410D31
EF34CD2CEF34CD2CEF34EF3434455549344535493445344534453445362ED703
F703F703F703F703F703F703D70394311445D3401445D340D340D340D340D340
D340D34000000000000000000000000000004818B340B340B340B340B3404818
000000000000000000000000000000008C28B340B340B340D340B34048180000
00004818D340D340D340D440D3401445D3401445D34014451445334114451445
1445344514453445344534453549344534455549344555493445554955495549
5549554D7549554D7549754D754D7549764D954D764D954D764D9651754D964D
9651964D96519651B64D9651B751B651B651B751B651D755B651D751B755D751
D755D755D751D755D755D755F855F755F855F755F755F859F755185AF8591856
F859185A3723F703F703F703D7031F581E5C0204AE39BF761F5CDE48D703F803
F703F703B83A185A185AF859F755185AF755F859F755F859F755F755D755F755
D755D755D755D755D751D755B751D755B651D751B651B651B751B651E8200000
0000000000000000000002049651954D764D964D754D754D764D754D764D754D
8C2800000000000000000000000001045549554934453549554934453445362E
F703F703F703F803F703F703F703F703F703D703362ED34014451341D444D340
1445D340D444D34000000000000000000000000000004818D444D340B340D138
26140000000000000000000000000000000000008C28B340D340B340D138240C
000000008C28D340D444D3401445D3401445D444134114451445144514451445
1445344514453445344534453445344534453549554934455549554955495549
5549554D5549754D5549754D7549754D754D764D754D764D954D764D954D964D
9651964D9651964D9651B64D9651B6519651B651B751B651B751B651D755B751
D755D651D755D751D755F755D755F755F755D755F755F755F859F755F859185A
F755185AF8593852D707F703F703F803392E1F58153CE820534EFF7FBE601F5C
392EF803F703F7037817185AF755185A185AF755F8591856F755F755F755F755
F855D755F755D755D755D755D751D755D755B651D751B755B651B751B651B651
E82000000000000000000000000000005241964D954D9651954D764D954D754D
754D754DE8200000000000000000000000000104554955495549554934453549
362EF703F703F703F703F703F703D803362ED707F703F703D703362E13411445
13411445D3401445D340144500000000000000000000000000004818D340D340
B0340208000001048C2800000000000000000000000000008C28D340D440CD2C
020400000208B034D3401445D3401445D3401445144513411445144514451445
1445344514453445344534453445344534453549554934455549344555495549
554955495549754D5549754D5549754D754D754D764D754D964D754D964D754D
9651964D9651964D9651964DB6519651B751B651B651B751B651B751B651D751
B755D651D755D751D755D755D755D755F855F755D755F755F859F755F859F755
185AF755185A185A185AB83AF703F703F70397073F541F5C8C28F44DB656FF7F
FF761F5C1F583817D703F703F703B83A185A185AF859F755185AF755F859F755
F859F755F755F755D755F755D755D755D755D751D755D751D755B651D751B651
B751B651CC2800000000000000000000000000000000240C4510451045104510
4510451445104510010400000000000000000000000001045549554955495549
55491617D703F703F703F803F703F703D703F32D35497541770BF703F703F703
161713411445144514451445134114450000000000000000000000000000240C
4818461400000000240CD340D3400000000000000000000000000000240C4818
4614000000004510D34013411445144513411445144514451445144514451445
3445344534453445344534453445344535495549344555493445554955495549
5549554D5549754D5549754D5549754D754D7549764D754D964D754D964D754D
964D9651954D9651964D9651964DB6519651B651B651B651B751B651B751B651
D755B651D755D751D755D755D751D755F755D755F755D755F755F859F755F855
F859F755185A185AF755185A3852D707F703F703D703DE481E5C343C93493967
7C73FF7FFF7F1F6E1F5C3F543817D703F803D707584E185A185AF859185AF755
F859185AF755F855F755F859F755D755F855D755D755D755D751D755D755D751
B651D755B751B6519349E8204510451045144510451045144510451045104514
45104510451045104510451045104510451045104510451045104614754D7549
554975491617F703F703F703F703F703F703D707953555493445344555451617
F703F703F703770B534133413445144514451445CD2C25102510440C2510240C
2510240C2510440C25108C281341144513418C282510440C2510440C2510440C
2510240C251045108C2814451445144514451445144514453445144534453445
3445344534453445344534453549344555493445554934455549554955495549
55495549754D5549754D5549754D7549754D754D764D754D964D754D964D754D
964D9651964D9651964D9651964DB6519651B651B651B751B651B751B651B751
D651B755D751D755D751D755D751D755D755F755D755F755F755F855F755F859
F755F859185AF755185AF859185A18563723F703F703D7033D411E581A4C7549
D85E5B6FDE7BFF7FFF7FFF7F9F691F5C1F58B91EF703F703970F3856185A185A
185AF755185AF755F859F755F859F755F755F755F755D755F755D755D755D755
D755D751D755D751B651D755B651B751B651B651B751B651B6519651B751964D
B651964D9651964D9651964D954D964D754D964D754D764D754D754D764D754D
754D554975493817F703F703F703F703F703F703D70795355549554934455549
344555491617F703F703F7039707953534453445344534453445144534451445
3445144514453445144514451445144514451445144514451445144514451445
1445144514453445144534451445344534453445144534453445344534453445
344534453549344534453549344555493445554955495549554955495549554D
5549754D5549754D5549754D7549754D764D754D764D754D964D754D964D754D
964D9651954D9651964D9651964DB6519651B651B751B651B751B651B651B751
D651B755D751B755D651D755D755D755D755F755D755F755F755F755F859F755
F855185AF755185AF755185A185A185A185AD72AF703F7039707DE481E5C1A50
0D31D85E9D77BE7BDE7BFF7FFF7FFF7FFF7FFF6D1F5C1F5C7C35D703F703970F
3852185A185A185A185A185AF755185AF755F859F755F859F755F755F755D755
F755D755D755D755D751D755D755D751B755D651B751D755B651B751B651B651
B651B65196519651B64D9651964D9651964D964D9651954D764D954D764D754D
964D754D954D9541970FD703F703F803F703F703F703970B9541554955495549
55495549554955495549362EF703F703F703D703362E34453445344534453445
3549344534453445344534453445344534453445344534453445344534453445
3445344534453445344534453445344534453445344534453549344534453549
344555493445554934455549554955495549554955495549554D5549554D7549
5549754D5549754D7549754D754D754D754D764D954D764D954D764D954D9651
964D9651964D9651964D9651B64D9651B6519651B651B651B751B651B751B651
D751B755D651D755D751D755D751D755D755F755D755F755D755F755F855F755
F859F755185AF859F755185AF859185A185A185AD72AF703F703B91E3F541F5C
1A4C0D315B6FBD77DF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F9F763E5C1F5C7E50
B91EF703970B584E185A185A185AF755185A185AF755185AF755F859F755F859
F755F755F755D755D755F755D755D755D755D751D755D751D755B651B751D651
B755B651B751B651B651B751B6519651B6519651964D9651964D9651964D9651
954D964D954D764D9541970BF703F703F703F703F703F703970F95417549554D
75495549554D5549554955495549554D362ED703F703F703D703B91E34455549
5549554934455549344555493445354934455549344535493445354934453445
3549344555493445354934455549344535493445554934455549554934455549
55495549554955495549554955495549554955495549554D75495549754D5549
754D7549754D764D754D754D764D754D964D754D964D754D964D9651954D964D
9651964D9651964D9651964DB6519651B651B651B751B651B751B651B751D651
B751D755B651D755D751D755D755D755D755F755D755F755F755F755F859F755
F859F755185AF755185AF755185A185A185A185A18563723F80397077C391F5C
1F601438AE39BD77FF7FDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F7E77
DF641F5C1F5C3D413817D703B83A185A185A185A185AF859185AF755185AF755
F859F755F755F859F755F855F755F755D755F755D755D755D755D755D751D755
D751D755B651B751D651B755B651B751B651B651B651B751B65196519651B64D
9651964D9651964D9651F63DD707F703F703F703F703F703D703970F9541754D
764D754D754D754D754D7549754D7549554D75495549F63DD707F703F703F703
1617754555495549554955495549554955495549554955495549554955495549
5549554955495549554955495549554955495549554955495549554955495549
5549554D554955495549754D55495549754D5549754D7549754D754D7549754D
764D754D754D764D754D754D964D754D964D764D954D964D9651964D9651964D
9651964D9651964DB6519651B651B751B651B651B751B651B751B651B751D651
B755D651D755D751D755D755D755D755F755D755F755D755F755F855F755F859
F755F859F755185AF755185AF859185A185A185A185A584E970FB803392E1F58
1F5C1D588C28B656FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7F7F725F5C1F5C1F5C3D41381738175852185A185A185A185AF859
185AF8591856185AF859F755F859F755F755F859F755F755F755D755D755F755
D755D755D755D751D755D751D755B651D751B651B751B651B751B651B651B751
B651B6519651B7519651964DF63DD703F703F703F803F703F703F70378177549
964D954D764D954D764D754D954D764D754D754D754D754D764D754D9541770B
F703F703F703770B95417549754D5549754D5549754D55495549754D55495549
754D55495549754D5549554D75495549554D75495549754D55497549554D7549
754D7549554D7549754D7549754D754D7549754D764D754D754D754D764D754D
754D764D954D764D954D764D954D964D9651954D9651964D9651964D9651964D
9651964DB6519651B651B651B651B751B651B651B751B651B751D651B755D651
D755D751D755D751D755D755D755D755F755D755F755F855F755F755F859F755
F859F755185AF755185AF859185A185A185A185AF859185AD72A970F392E1F58
1F5C1F5C1438EF3DBD77FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FDF7F1F6E3E5C1F5C1F5CDE48392ED72A1856185A
185A185A185A185AF859185AF755185A185AF755F859F755F859F755F755F855
F755F755D755F755D755D755D755D755D755D751D755D751D755B751D651B755
B651B751D651B751B651B651B651B83AD703D703F703F703F703F703F7033817
B64D9651964D9651964D9651954D964D9651764D954D764D954D764D754D964D
754D964D970FD703F703F703D707F63D7549754D764D7549754D764D754D754D
764D754D754D754D754D754D754D7549754D754D754D764D754D754D754D754D
754D764D754D754D754D764D754D754D764D754D754D964D754D964D754D964D
754D964D964D9651954D9651964D9651964D9651964D9651964DB6519651B651
9651B651B651B651B651B751B651B751B651B751B651D751B755D651D755D751
D755D751D755D755D755D755F755D755F755F755F755F755F859F755F859F755
185AF755185AF8591856F859185A185A185A185A185A185AB83AB91E7C391F58
1F5C1E5C153C71397B6FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBF7F3F725F5C1F5C1F5C3F54
3D41DA4D1856185A185A185A185A185A185AF859185AF755185AF755185AF755
185AF755F859F755F855F755F755F755D755D755F755D755D755D755D755D751
D755D751D755D651B755B651B651B755D72AD703F703F703F703F703F803F703
1617B651B651964DB6519651964D9651964D9651964D9651964D9651964D9651
964D9651954D964D964D970FD703F703F703D703D72A754D9651754D964D754D
964D754D764D954D764D754D964D754D764D954D764D754D964D754D964D754D
964D754D964D754D964D954D764D954D964D9651964D954D9651964D9651964D
964D9651964D9651964D9651964D9651964DB6519651B651B6519651B651B651
B651B651B751B651B751B651B751B651D755B651D755D651D755D751D755D751
D755D755D755D755D755F755D755F755F755F755F855F755F859F755185AF755
185AF755185AF859185A185A185A185A185A185A185A185AF9517C399D541F58
1F5C1E58343C52417B6FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBF76
1F651F5C1F5C1F5C3E5CFB58F859185A185A185A185A185A185A185AF859185A
F859185AF755185AF755F859F755F859F755F859F755F755F855F755D755F755
D755D755D755F755D755D755D751F74DB83A970FD703F703F803F703F703F703
F703F703D72AB651B751B6519651B651B651B751B651B6519651B651B6519651
9651B64D96519651964D9651964D3723D703F703F803F703F703970F362EB64D
964D964D954D9651964D964D9651964D9651964D964D9651964D9651964D964D
9651964D964D9651964D9651964D9651964D9651964D9651964D9651964D9651
964D9651B6519651B6519651B651B651B651B751B651B651B651B751B651B751
B651B751B651B751D651B755D651B751D755D751D755D751D755D751D755D755
D755D755F755D755F755F755F755F755F859F755F859F755F859F755185AF859
F755185A185AF859185A185A185A185A185A185A185AF8597A595E581E5C1F5C
1F5C1A50B340334E9C73FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7F9F7F5F72DF641F5C1F5C1F5CBD587A59185A185A185A185A185A
185A185A185A185AF859185AF859185AF755185AF755185AF755185AF755F755
F859F755F755F755F755F755183ED707D703F703F703F703F703F703F703F703
F803F703F703F703F703D703D707D7077817B651B751B651B751B651B651B751
B651B651B651B651B651970FD707D707D703F703F703F703F703F703F703F703
F703F703D703D707D72A964D96519651B64D96519651B64D96519651B651964D
9651B6519651964DB6519651B6519651B64D9651B651B651B6519651B651B651
B651B751B651B651B651B751B651B651B751B651B651B751B651B751D651B751
D755B651D751D755D751D755D751D755D751D755D755D755D755D755F755D755
F755F755F755F755F755F855F755F859F755F859F755185AF755185AF859185A
F755185A185A185A185A185A185A185A185A185A185AB959FB583E5C1E5C1F5C
1B50343C9349F75EFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F9F7F5F721F653E5C1F5C3E5CBD589A59
F859185A185A185A185A185A185A185A185A185A185AF859185AF755185AF859
F755185AF859F755185AF755F859F755B83AF703F703F703F703F703F703F703
F703F703F703F703F803F703F703F703F703F703970FD751D755D751D751D651
B755D751B651B751D755B651B751D707F703F703F703F703F703F703F703F703
F703F703F703F703F703F703D72AB651B651B651B751B651B651B651B751B651
B651B651B651B751B651B651B751B651B651B751B651B751B651B751B651B651
B751B651B751B651B751D651B755B651D751D755B651D751D755D751D755D751
D755D755D755D755D755D755D755D755D755D755F755D755F755F755F755F755
F859F755F859F755F859F755F859F755185AF755185AF8591856185AF859185A
185A185A185A185A185A185A185A185A185A185AB9591B5D5E581E5C1F5C1A4C
343C9349F75EDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDF7FFF76FF6D
1F651F5C3E5CBD585B5DF859185AF859185A185A185A185A185A185A185A185A
185A185AF859185AF755185AF859F755185AF7551856174E3852384E174E3852
174E384E174E384E174E174E174E174E174E174E174E174E174ED755D755D755
D755D755D755D751D755D755D751D755D755F74D174E174EF74D174EF74D174E
F74D174EF74DF74D174EF74DF74DF74DF74DB651D751B751D651B755D651B751
D751B651D755B751D751B651D751B755D751B651D755D751D755B651D751D755
D651D751D755D751D755D751D755D755D751D755D755D751D755D755D755D755
D755D755D755F755D755F755D755F755F755F755F859F755F755F859F755F859
F755F855F755185AF755185AF859F755185A185AF859185AF859185A185A185A
185AF755185A185A185A185A185A185AF8597A5DFB583E5C1E5C1A4C343C3445
534E3967FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FDF7F3F7B5F727F69BE605F5CFB585B5DB9591856185A185A185A
185A185A185A185A185A185A185A185A185A185AF859185AF859185AF755185A
F755185AF755185AF755F859F755185AF755F755F859F755F755F855F755F755
F755D755F755F755F755D755F755D755F755D755F755D755D755D755D755D755
D755D755D755D755D755D755D755D751D755D755D755D755D751D755D755D755
D751D755D755D755D751D755D755D755D755D751D755D755D755D751D755D755
D755D755D755D755D755D755D755D755D755F755D755D755F755D755F755F755
F755F755F755F755F755F855F755F755F755F859F755F855F755185AF755185A
F755185AF755185AF859185AF8591856F859185A185A185A185A185A185A185A
185A185A185A185A185A185AF8597A59FB585E581A50153CD444754975523967
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDF7F3F7BBE72FF6D7F695D61
FB587A599A59F859185A185A185A185A185A185A185A185A185A185A185A185A
185A185A185AF859185AF859185AF755185AF859F755185AF859F755185AF755
F859F755185AF755F859F755F859F755F755F859F755F755F755F855F755F755
F855F755F755F755F755D755F755D755F755D755F755D755F755D755F755D755
F755D755F755D755F755D755F755D755F755D755F755D755F755D755F755D755
F755000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000}
SystemMemory = False
Transparent = True
TransparentColor = clBlack
end>
Left = 424
Top = 42
end
end
/VCL_DELPHIX_D6/SXMedia/SxSample/main.pas
0,0 → 1,211
{
SXMedia Components - Beta 1
--------------------------------
Copyright 1999 Dean Ellis
http://www.sillex.freeserve.co.uk
 
This unit is part of the SXMedia Component Set. This code is
supplied as is with no guarantees and must be used at your own
risk.
 
No modifications to this code must be made without the express
permission of the author. Please report any problems to
support@sillex.freeserve.co.uk
 
You may use these components to create any freeware/shareware
applications that you wish. If the components are to be used in
a commercail product then credit for developement of these components
should be given.
 
Credits :
 
Developer : Dean Ellis
}
unit main;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DirectX,
SXMovie, SXModPlayer, SXEngine, Menus, DXSounds, DXDraws, MMSystem, DIB;
 
type
TFrmMain = class(TForm)
MainMenu1: TMainMenu;
FileMnu: TMenuItem;
SXShowMnu: TMenuItem;
SXEngineMnu: TMenuItem;
SXModPlayerMnu: TMenuItem;
Exit1: TMenuItem;
OpenFileItem: TMenuItem;
PlayItem: TMenuItem;
StopItm: TMenuItem;
StartItem: TMenuItem;
StopItem: TMenuItem;
OpenFile1: TMenuItem;
Start1: TMenuItem;
Stop1: TMenuItem;
OpenDlg: TOpenDialog;
SXModPlayer: TSXModPlayer;
SXEngine: TSXEngine;
SXMovie: TSXMovie;
DXSound1: TDXSound;
DXDraw1: TDXDraw;
DXImageList1: TDXImageList;
procedure Exit1Click(Sender: TObject);
procedure DXDraw1Finalize(Sender: TObject);
procedure OpenFileItemClick(Sender: TObject);
procedure OpenFile1Click(Sender: TObject);
procedure PlayItemClick(Sender: TObject);
procedure Start1Click(Sender: TObject);
procedure Stop1Click(Sender: TObject);
procedure DXSound1Initialize(Sender: TObject);
procedure SXEngineRender(Sender: TObject);
procedure StartItemClick(Sender: TObject);
procedure StopItemClick(Sender: TObject);
procedure DXDraw1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
FrmMain: TFrmMain;
 
implementation
 
{$R *.DFM}
procedure FreeObj(var Obj);
begin
if TObject(Obj) <> nil then
begin
TObject(Obj).Free;
TObject(Obj) := nil;
end;
end;
 
procedure ClearSurfaces;
begin
FrmMain.DXDraw1.Surface.Fill(clBlack);
FrmMain.DXDraw1.Primary.Fill(clBlack);
end;
 
procedure TFrmMain.Exit1Click(Sender: TObject);
begin
if SXMovie.Playing then SXMovie.Stop;
Close;
end;
 
procedure TFrmMain.DXDraw1Finalize(Sender: TObject);
begin
if SXEngine.Enabled then SXEngine.Enabled := False;
end;
 
procedure TFrmMain.OpenFileItemClick(Sender: TObject);
begin
OpenDlg.Filter := 'All Media Files|*.avi;*.mpg;*.mov|' +
'AVI (*.avi)|*.avi|MPG (*.mpg)|*.mpg|MOV (*.mov)|*.mov';
if OpenDlg.Execute then
begin
SXMovie.Filename := OpenDlg.FileName;
end;
end;
 
procedure TFrmMain.OpenFile1Click(Sender: TObject);
begin
OpenDlg.Filter := 'All Media Files|*.mod;*.it;*.s3m;*.xm|' +
'Mod (*.mod)|*.mod|Impulse Tracker (*.it)|*.it|Scream Tracker (*.s3m)|*.s3m|Fast Tracker (*.xm)|*.xm';
if OpenDlg.Execute then
begin
SXModPlayer.Filename := OpenDlg.FileName;
DXSound1Initialize(Sender);
SXModPlayer.Initialize(nil);
end;
end;
 
procedure TFrmMain.PlayItemClick(Sender: TObject);
begin
if not SXMovie.Playing then
begin
if DXDraw1.CanDraw then
ClearSurfaces;
SXMovie.DisplayRect(80,60, 400, 300);
SXMovie.Play
end
else
SXMovie.Stop;
end;
 
 
procedure TFrmMain.Start1Click(Sender: TObject);
begin
SXModPlayer.Play(True);
end;
 
procedure TFrmMain.Stop1Click(Sender: TObject);
begin
SXModPlayer.Stop;
end;
 
procedure TFrmMain.DXSound1Initialize(Sender: TObject);
var fmt:TWaveFormatEx;
begin
with Fmt do
begin
wFormatTag := WAVE_FORMAT_PCM;
nSamplesPerSec := 44100;
nChannels := 2;
wBitsPerSample := 16;
nBlockAlign := wBitsPerSample div 8 * nChannels;
nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
end;
// must be in exclusive to set the format
DXSound1.Options := DXSound1.Options + [soExclusive];
DXSound1.Primary.SetFormat(Fmt);
end;
 
procedure TFrmMain.SXEngineRender(Sender: TObject);
var Angle: Integer;
begin
Angle := 0;
if DXDraw1.CanDraw then
begin
DXDraw1.Surface.Fill(clBlack);
with DXImageList1.Items[0] do
DrawWaveX(DXDraw1.Surface,160,50,Width,Height, 0, 5, 80, Angle*4);
with DXDraw1.Surface.Canvas do
begin
try
Brush.Style := bsClear;
Font.Color := clWhite;
Font.Size := 8;
Textout(5, 5, 'Frames Per Sec : ' + IntToStr(SXEngine.FramesPerSecond));
finally
Release;
end;
end;
DXDraw1.Flip;
Inc(Angle);
end;
end;
 
procedure TFrmMain.StartItemClick(Sender: TObject);
begin
if DXDraw1.CanDraw then ClearSurfaces;
SXEngine.Enabled := True;
end;
 
procedure TFrmMain.StopItemClick(Sender: TObject);
begin
SXEngine.Enabled := False;
end;
 
procedure TFrmMain.DXDraw1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_ESCAPE then Close;
end;
 
end.
/VCL_DELPHIX_D6/SXMedia/SxSample/MPPSDK.DLL
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/SXMedia/SxSample/SXMedia.dpr
0,0 → 1,14
program SXMedia;
 
uses
Forms,
main in 'main.pas' {FrmMain};
 
{$R *.RES}
 
begin
Application.Initialize;
Application.Title := 'SXMedia - Example Project';
Application.CreateForm(TFrmMain, FrmMain);
Application.Run;
end.
/VCL_DELPHIX_D6/SXMedia/SxSample
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/SXMedia/MpSndSys.pas
0,0 → 1,237
(*
* This unit is free software; you can redistribute it and modify it
* under the terms of the GNU Library General Public License as published
* by the Free Software Foundation; either version 2 of the license or
* (at your option) any later version.
*
* Author of CPP header file : Olivier Lapicque <olivierl@jps.net>
* Author of Delphi conversion : Dean Ellis <Dean_Ellis@sillex.freeserve.co.uk>
*
* NOTE : The Origonal C++ Class declarations anc constants have been left in place
*
*)
unit MpSndSys;
 
interface
 
uses Windows,Classes;
 
const
//#ifndef MPP_SND_SYS_H
//#define MPP_SND_SYS_H
 
//#ifndef MPPDLLEXPORT
//#define MPPDLLEXPORT
//#endif
 
//#define MPPAPI __stdcall
//#define MPPCDECL __cdecl
//#define MPPAPI_VERSION 0x0140
 
//#define MPPAPI_VERSION 0x0140
 
MPPAPI_VERSION = $0141;
 
// Version-specific functions
//#define MPPVERSION_HAS_NAVIGATION 0x0139
//#define MPPVERSION_HAS_SONGTIME 0x0141
 
MPPVERSION_HAS_NAVIGATION = $0139;
MPPVERSION_HAS_SONGTIME = $0141;
 
// Error codes
//typedef long MPPERR;
//
//enum {
// MPPERR_NOERROR=0,
// MPPERR_FAILED,
// MPPERR_INVALIDPARAM,
//};
 
//enum {
// MPPSONG_INVALID=0,
// MPPSONG_MOD,
// MPPSONG_S3M,
// MPPSONG_XM,
// MPPSONG_IT,
// MPPSONG_MDL,
// MPPSONG_UNKNOWN=100
//};
MPPERR_NOERROR = 0;
MPPERR_FAILED = 1;
MPPERR_INVALIDPARAM = 2;
 
MPPSONG_INVALID = 0;
MPPSONG_MOD = 1;
MPPSONG_S3M = 2;
MPPSONG_XM = 3;
MPPSONG_IT = 4;
MPPSONG_MDL = 5;
MPPSONG_UNKNOWN = 100;
 
// Mixer Options MPPMIX_XXXX
//#define MPPMIX_NORESAMPLING 0x01 // Faster, but crappy quality
//#define MPPMIX_BASSEXPANSION 0x02 // Bass Expansion
//#define MPPMIX_SURROUND 0x04 // Surround Encoding
//#define MPPMIX_REVERB 0x08 // Reverb
//#define MPPMIX_LOOP 0x10 // Loop the song (backward jumps will be enabled)
//// v1.40+ flags
//#define MPPMIX_HIGHQUALITY 0x20 // HQ mixing (better resampling, dithering enabled)
//#define MPPMIX_GAINCONTROL 0x40 // Automatic Gain Control
//#define MPPMIX_NOISEREDUCTION 0x80 // Noise reduction (-6dB 22kHz lowpass filter)
 
MPPMIX_NORESAMPLING = $01; // Faster, but crappy quality
MPPMIX_BASSEXPANSION = $02; // Bass Expansion
MPPMIX_SURROUND = $04; // Surround Encoding
MPPMIX_REVERB = $08; // Reverb
MPPMIX_LOOP = $10; // Loop the song (backward jumps will be enabled)
// v1.40+ flags
MPPMIX_HIGHQUALITY = $20; // HQ mixing (better resampling, dithering enabled)
MPPMIX_GAINCONTROL = $40; // Automatic Gain Control
MPPMIX_NOISEREDUCTION = $80; // Noise reduction (-6dB 22kHz lowpass filter)
 
type
//==========================
//class MPPDLLEXPORT IModMixer
//==========================
(* {
public:
// Reference count: the initial reference count is 1, so you shouldn't have to call AddRef()
virtual unsigned long MPPAPI AddRef() = 0;
virtual unsigned long MPPAPI Release() = 0;
 
// API Version: you should refuse to continue if the returned value is smaller than MPPAPI_VERSION
virtual unsigned long MPPAPI GetVersion() = 0;
 
// Basic I/O Functions
virtual MPPERR MPPAPI LoadSong(const void *pmemfile, long len) = 0;
// Songs are always loaded from memory. The pointer pmemfile can be destroyed
// after the call to LoadSong. You can use memory-mapped files or a pointer returned
// by LockResource(), or whatever file in memory.
virtual MPPERR MPPAPI FreeSong() = 0; // Free the memory used by the song
 
// Audio Rendering Functions: example: (44100, 2, 16) for 44.1kHz, stereo, 16-bit
virtual MPPERR MPPAPI SetWaveFormat(long samplespersec, long channels, long bitspersample) = 0;
// return # of SAMPLES that have been written to the buffer, 0 if end has been reached
// Note: protect calls to Render() and SetMixerOptions() by a critical section, if they
// are used in different threads.
virtual long MPPAPI Render(void *pbuffer, unsigned long bufsize) = 0;
 
// Player Configuration: set of MPPMIX_XXXX
virtual MPPERR MPPAPI SetMixerOptions(unsigned long dwOptions) = 0;
virtual unsigned long MPPAPI GetMixerOptions() = 0;
 
// Song Information
virtual long MPPAPI GetSongType() = 0; // Return MPPSONG_XXXX
virtual void MPPAPI GetSongName(char *pszbuf) = 0; // pszbuf must be at least 32-bytes
 
//////////////////////////////////////////////////////////////////////////////////////
// v1.39+: Navigation functions
// The order is the position in the pattern sequence list: this allows you to
// jump to a specific part of a song. It can be useful in a game with a song that
// uses pattern position jump effects (or pattern loops).
// These function will not be available if GetVersion() returns a value smaller than 0x139 (MPPVERSION_HAS_NAVIGATION)
virtual unsigned long MPPAPI GetNumOrders() = 0;
virtual unsigned long MPPAPI GetCurrentOrder() = 0;
virtual MPPERR MPPAPI SetCurrentOrder(unsigned long neworder) = 0;
 
};
*)
MppError = longint;
 
PModMixer = ^IModMixer;
IModMixer = class
public
function AddRef:longint; virtual; stdcall; abstract;
function Release:longint; virtual; stdcall; abstract;
function GetVersion:longint; virtual; stdcall; abstract;
function LoadSong(const MemFile:pointer;Length:longint):MppError;virtual; stdcall; abstract;
function FreeSong:MppError;virtual; stdcall; abstract;
function SetWaveFormat(SamplesPerSec,channels,bitsPerSample:longint):MppError;virtual; stdcall; abstract;
function Render(Buffer:pointer;BufferSize:longint):MppError;virtual; stdcall; abstract;
function SetMixerOptions(dwOptions:longint):MppError;virtual; stdcall; abstract;
function GetMixerOptions:longint;virtual; stdcall; abstract;
function GetSongType:longint;virtual; stdcall; abstract;
procedure GetSongName(Buffer:PChar);virtual; stdcall; abstract;
function GetNumOrders:longint;virtual; stdcall; abstract;
function SetCurrentOrder(newOrder:longint):MppError;virtual; stdcall; abstract;
function GetSongLength:longint; virtual; stdcall; abstract;
end;
 
var
MppSdkLibLoaded:Boolean;
ModMixer:IModMixer;
 
implementation
 
const MppSdkLibrary = 'mppsdk.dll';
 
var MppSdkLibHandle:THandle;
 
//#define MPP_GETMODAPIFUNCNAME "MPP_GetModAPI"
//typedef MPPERR (MPPCDECL * MPP_GETMODAPIFUNC)(IModMixer **);
GetModAPI : function(MODMixer:PModMixer):MppError;cdecl;
 
(*
*
* To get a pointer to the IModMixer interface, you can use the following functions:
*
* HMODULE hMPPSDK = (HMODULE)LoadLibrary("mppsdk.dll");
* MPP_GETMODAPIFUNC pFunc = (MPP_GETMODAPIFUNC)GetProcAddress(hMPPSDK, MPP_GETMODAPIFUNCNAME);
* IModMixer *pMPPAPI;
* pFunc(&pMPPAPI);
* ...
* You can then access the MPP SDK API through the IModMixer interface
*
* When you are done:
*
* pMPPAPI->Release();
* FreeLibrary(hMPPSDK);
*
*)
 
//#endif // MPP_SND_SYS_H
 
 
{----------------------------------------------------------------------------}
{InitLibrary - will try to load the Mppsdk.dll and get the ModMixer object}
{----------------------------------------------------------------------------}
function InitLibrary:Boolean;
begin
Result := False;
 
MppSdkLibHandle := LoadLibrary(MppSdkLibrary);
 
if MppSdkLibHandle = 0 then
begin
Exit;
end;
 
try
GetModAPI := GetProcAddress(MppSdkLibHandle,'MPP_GetModAPI');
GetModAPI(@ModMixer);
Result := True;
except
Result := False;
end;
end;
{----------------------------------------------------------------------------}
{UnLoadLibrary - Will unload the Mppsdk.dll if it was loaded}
{----------------------------------------------------------------------------}
procedure UnLoadLibrary;
begin
if MppSdkLibLoaded then
begin
FreeLibrary(MppSdkLibHandle);
end;
end;
 
{----------------------------------------------------------------------------}
{Automatic initialization and finalization - comment out if you want to
do this manually}
{----------------------------------------------------------------------------}
initialization
MppSdkLibLoaded:=InitLibrary;
finalization
UnloadLibrary;
end.
/VCL_DELPHIX_D6/SXMedia/SXAbout.dfm
0,0 → 1,728
object AboutBox: TAboutBox
Left = 260
Top = 194
BorderStyle = bsDialog
Caption = 'About SXMedia'
ClientHeight = 186
ClientWidth = 244
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
FormStyle = fsStayOnTop
Position = poScreenCenter
PixelsPerInch = 96
TextHeight = 13
object InfoContainer: TPanel
Left = 0
Top = 0
Width = 245
Height = 153
BevelInner = bvLowered
BevelOuter = bvLowered
Color = clInactiveBorder
TabOrder = 0
object Version: TLabel
Left = 7
Top = 57
Width = 53
Height = 13
Caption = 'Version 1.0'
IsControl = True
end
object Copyright: TLabel
Left = 122
Top = 57
Width = 117
Height = 13
Caption = 'Copyright SXMedia 1999'
Transparent = True
IsControl = True
end
object Author: TLabel
Left = 76
Top = 74
Width = 87
Height = 13
Alignment = taCenter
Caption = 'Author : Dean Ellis'
end
object WebSite: TLabel
Left = 42
Top = 92
Width = 157
Height = 13
Caption = 'http://www.sillex.freeserve.co.uk'
IsControl = True
end
object Credits: TLabel
Left = 42
Top = 108
Width = 167
Height = 40
Alignment = taCenter
AutoSize = False
Caption =
'MOD Player Engine provided by'#13#10'Olivier Lapicque <olivierl@jps.ne' +
't>'#13#10'http://www/jps.net/olivierl/'
WordWrap = True
IsControl = True
end
object LogoContainer: TPanel
Left = 13
Top = 2
Width = 221
Height = 53
Color = clBlack
TabOrder = 0
object ProgramIcon: TImage
Left = 6
Top = 3
Width = 210
Height = 45
AutoSize = True
Center = True
IncrementalDisplay = True
Picture.Data = {
07544269746D61700A4A0000424D0A4A0000000000003600000028000000D200
00002D0000000100100000000000D44900000000000000000000000100000000
000000000000000080000080000000808000800000008000800080800000C0C0
C000C0DCC000F0CAA60018081000080000000800080008080800100008001008
0800100010001008100010101000180010001808100018081800250018002108
18001810100022091D0025102100181818002118180031042700311029003910
2D00211821002918210031182900262326003118310039183100352632004A14
3B006B0B520066255600493A4600653358006E3261006F4364008B176E00892E
71008E3375009C3184007E4171008E4279009C39840094468400A5007B00A510
7E00A5398400A5398C00A0467F00A0468400A04A8800AD007F00AD108400A542
8C00A54A9000C1009000B9229400D6009C00F5349500565256005A5A5A00635A
5E006363630075566D008452730088567B00A5636B00A55A7300AD637300A552
7B008C5A7B0094568400A1568800A0639400AD5A8400AD4A8C00AD528C00AD5A
8C00AD4A9400AD529400AD5A9400AD529C00AD5A9C00E75A7300E75A7B00EF52
7B00EF5A7B00EF4A8400EC4F89009E7A6100B5915C00B8C232007B7179008787
8700AF688A00B47B7E00CDAF4000C7CE2F00C0CA4500CE906000CB898000C0B6
5B00C4AB7600BDF70000C1F30400C6EF0800BDF70800C6F70800BDFF0000BDFF
0800C6FF0000C0E41000C1DE1800BDF31000CED62100C0E91800BDE22100C4E1
2D00D600A500D608A500DE00A500DE08A500E700A500DE00AD00EB00AD00EF00
B500F700B500F708B500F700BD00FF00B500FF08B500FF00BD00FF00C600E221
B100F721A500F714B900FF10B100FB10BD00FF08C600FC18C300EC29AF00EF2D
B500E241B700F92DC700FF39CE00E246BD00FF46D200A57B9C00AD639C00AD6B
9C00AD739C00B55A9C00B5639C00B56B9C00B563A500B56BA500B573A500BD7B
9C00BD5AA500BD6BA500BD73A500BD6BAD00D6739C00C66BAD00BD73AD00BD7B
AD00C67BAD00D65AB500D663B500CE6BB500CE73B500D66BB500D65ABD00DE52
BD00EF52C600FF5AD600FF67DA009C8C9C009C949C00AD8CA900AD94AD009C9C
9C00A59C9C00AD9CA500AD9CAD00B594AD00B59CAD00BD849C00C6849C00C68C
9C00C6949C00C68CA500C694A500C684AD00C68CAD00C67BB500C684B500CE7B
A500CE7BB500CE84BD00D68CC600E794CE00FF7BDE00FF84DE00FF84E700FF8C
E700FF94E700B4B0B200C8B7C100D3CCD000E6B9D600DED6DE00E7D6E700EFD6
E700FF9CE700FFA5EF00F7ADE700FFADEF00FFBDEF00F7CEEF00FFCEF700DEDE
DE00E7DEE700E7E7E700EFDEE700FFD6F700EFDEEF00EFE7EF00FBDEF300FFE7
FF00EFEFEF00F7EFF700FFEFFF00F7F7F700FFF7FF00FFFFFF00F0FBFF00A4A0
A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
FF00FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B
BD779C739C733967F75EB656734E1042EF3DEF3DAE398B2DAE398B2D8B2D8B2D
E820E82084108410420800000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000002104
420884108614E8204A298B2DAE391042B656B656F75EB656F75E734E744EF75E
3967BD777B6F9C739C73BD77DE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BBD77BD779C73
9C735B6F9C73F75EB656B6561042AE398B2D4A294208E8204208841084100000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000042088614E8206A29
8B2DEF3D744E734EB656F75E39677B6F9C73BD77BD77DE7BFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BDE7B9C739C737B6F7B6F
F75EB656744E10428B2DE820E82042088614430C240C440C0000240C25100208
010002080208030845108614E820E820CC280D310D314E355035503550395039
7139503950397139503971395039713950395039713950397139503971397139
5039713950397139713971395039713950397139503971395039713950397139
5039503950395039503971395039503971395039503950397139503971395039
7139503950395039503971395039503950395039713950395039713950397139
5039713950397139503971397139713971397139503971395039713950397139
713950397139503971395039503971395039503971395039503950354E350D31
0D31CC28E820E82086144514240C020400000000000000000000000000000100
02044208430C210484108410E8204A298B2D1042F75EB656F75E39679C73BD77
DE7BDE7BFF7FDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BDE7BBD773967F75EB656
734EAE394A298410430C430C02080208030C0208030C481848188C285034EF34
11393445754DB751185A185A185A185A185A185A185A185A185A185A185A185A
185A185A185A185A185A185A185A185AF859185A185A185A185AF755185AF859
185AF755F859185AF755F859F755F859F755F859F855F755F859F755F855F755
F859F755F855F755F855F755F855F755F755F855F755F755F855F755F755F755
F755F755F755F855F755F755F855F755F855F755F855F755F855F755F855F755
F859F755F855F859F755F859F855F859F755F859F859F755185AF859185AF755
185A185AF755185A185A185A185AF859185A185A185A185A185A185A185A185A
185A185A185A185A185A185A185A185A185AF859F859B855764D1445B3405034
2C2448180510010400000000000000000000000000002104430CE8206A291042
734EF75E39677B6FBD77BD77DE7BDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BDE7BFF7F7B6FF75EF75EEF3D
6B2DE820430C240C0204030C040805102C245034153C7B54FB587A59B959F859
185A185A185A185A185A185A185A185A185A185A185A185A185A185A185A185A
185A185A185AF859185AF755185AF859F859F755185AF755F859F755F859F755
F855F755F855F755F855F755F755F755F855F755F755F755F755F755D755F755
F755D755F755D755F755D755F755D755D755F755D755D755F755D755D755F755
D755D755F755D755D755F755D755F755D755D755F755D755D755F755D755F755
D755F755D755F755F755D755F755F755F755F755F755F755F755F755F855F755
F855F755F859F755F859F855F859F755F859185AF859185AF755185A185A185A
F755185A185A185A185A185A185A185A185A185A185A185A185A185A185A185A
185A185A185AF8597A59FB587B54354014382C24481801040000000000000000
0000420800008614AE39734EB65639673967BD77BD77DE7BDE7BFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BFF7F7B6F3967F75E1042E820
4208430C240C020405104818143817441E58BD58FB58B959F859185A185A185A
185A185A185A185A185A185A185A185A185A185AF859185A185A185AF859185A
F755185AF859F755F859185AF755F859F755F855F755F859F755F755F755F855
F755F755D755F755D755F755D755F755D755D755D755D755D755D755D755D751
D755D755D755D755D755D751D755D755D755D751D755D755D755D651D755D755
D751D755D755D751D755D755D751D755D755D755D651D755D755D755D755D755
D755D755D755D755D755D751D755D755D755D755D755D755D755D755D755F755
D755F755D755F755D755F755F755F755F755F755F855F755F855F755F859F755
F859F855F859185AF859185AF755185A185A185AF859185A185A185A185A185A
185A185A185A185A185A185A185A185A185A185AD9597A59BD585E581A50153C
2C24261400000000020400000000210486148B2D1042F75E39677B6FBD77DE7B
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BDE7BBD779C733967734E4A290000
0000000002042C2414381B501F5C5E58FB587A59185A185A185A185A185A185A
185A185A185A185A185A185A185A185A185A185A185AF859185AF859F859F755
F859F755F859F755F755F855F755F755D755F755D755F755D755D755F755D755
D755D755D755D755D755D755D755D755D755D751D755D755D651D755B651D751
B651B755D755B651B755B751B651B755B651B755B651B755B651B751B651B755
B651B751B651B751B751B651B751B751B651B751B651B751B751B651D751B751
D651B751B751D751B751D651B751D755B651D751D755D751D755D751D755D755
D755D755D755D755D751D755D755D755D755D755D755D755F755D755F755D755
F755F755F755F755F855F755F855F755F859F855F859F755185AF8591856185A
185A185AF859185A185A185A185A185A185A185A185A185A185A185A185A185A
B9591B5D7B541E5C1E58153C2C2405100000000001000000420886148B2DB656
39677B6F9C73DE7BDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BBD77BD773967F75EEF3D84100000
000004082C241A4C1E5C1F5C3E5CFB58B959F859185A185A185A185A185A185A
185A185A185A185A185A185AF859185AF755185AF755F859F755F859F755F855
B83A372337233723372337233723372337233723372337233723372337233723
B755D755D755D651D755D751D755B651D751B751D751B651B751B751B751B651
B83A372337233723161737233723161737233723161737233723161737233723
37231617B83A9651B651B651B651B651B651B651B651B751B651B651B651B751
B651B651B651B651B651B651B651B651B751B651B751B651B751B651B751B751
B651B751B751D651B751D751B651D755D751D755D751D755D755D755D755D751
D755D755D755D755D755D755F755D755F755F755F755F755F755F855F755F859
F755F859F859F755185AF8591856185A185AF859185A185A185A185A185A185A
185A185A185A185A185AF8595B5D5E581E5C1F5C1B5414384818000000000104
430886148B2D734EB6563967BD77DE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BDE7B5B6F744EAE3922040104
02042C241A4C1F5C1F5C1E5CBD587A59185A185A185A185A185A185A185A185A
185A185AF859185A185A185AF755F8591856F859F755F859F755F855F755F755
F755F755D72AD703F703F703F703F703F703F703F703F803F703F703F703F703
F703D707D751B651B751B751B751B651B751B651B751B651B651B651B651B651
B651B6513817F703F703F703F703F703F703F703F703F803F703F703F703F703
F703F703D703F703D72A964D9651965196519651965196519651964D9651964D
96519651964D9651964D9651B65196519651B64D9651B6519651B6519651B651
B651B651B651B651B651B751B651B651B751B651B751B751B651B751B751D651
B751D755D751D755D755D751D755D755D755D755D755D751D755D755F755D755
F755F755F755F755F855F755F859F755F859F755F859185A185A185A185A185A
F859185A185A185A185A185A185A185A185A185AB959FB581E5C1F5C1E581D58
14380510040800000000E8204A291042F75E7B6FBD77DE7BFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BBD777C737B6FAE3984100104
4818153C1E5C1F5C1F5C5E58FB58D959185A185A185A185A185A185A185A185A
185AF859185AF755185AF859F755F859F755F859F755F755F855F755F755D755
F755D755D755D755384ED72AD72AD72A970BF703F703F703F703F703F703970F
D72A362EB83A362ED751B651B651B651B651B651B651B6519651B6519651964D
96519651964D9651F63D362EB83A362E1617F703F803F703F703F703F703F703
F703D703D7071617D72A362EF63D964D964D954D964D964D954D964D964D954D
9651964D964D954D9651964D9651964D964D9651964D9651964D9651964D9651
965196519651964D96519651964DB6519651B6519651B651B651B651B651B651
B651B751B651B751B651B751B751B651D751B751D755D651D755D755D755D755
D751D755D755D755D755F755D755F755F755F755F855F755F855F755F859F755
F859F755185A185A185AF859185A185A185A185A185A185A185A185AF8597A59
9D541F5C1F5C1E581A4C2C2402040000020842088614734EF75E7B6FBD77FF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B7C733967734E43080000
2C241A4C1F5C1F583F547C39183E3852185A185A185A185A185A185A185A185A
F859185AF755185AF859F755F859F755F855F755F755F755F755D755D755F755
D755D755D755D751D755D755D751D755D751B755D651183E970FF703F703F703
F703D72A9651B6519651B651B65196519651B64D965196519651964D96519651
964D9651964D964D9651964D964D754D964D964D9541F703F703F703F703F703
F703F703D703D72A7549764D754D764D754D764D754D764D754D764D754D764D
754D764D754D764D754D964D754D764D954D764D764D954D764D964D764D954D
964D964D964D954D964D964D9651964D9651954D96519651964D96519651964D
96519651B64D9651B651B651B651B651B651B651B751B651B751B751B651B751
D751D651D755B755D751D755D755D755D751D755D755D755F755F755F755F755
F855F755F855F859F755F859F755185A185AF859185A185A185A185AF755185A
185A185A185A183E183E7E501F581E5C1D585034040801004308E8208B2D744E
39679C73DE7BDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FBD773967B656AE390000
2C241A4C1F5C1F5C7E50392E3723384E185A185A185A185A185A185A185AF859
185AF755185AF859F755F859F755F855F755F755F755D755F755D755D755D755
D755D755D751D755D755D751B755D651B751B751B651B751B651B751B6513723
D703F703F703F703D72A964D9651964D96519651964D9651964D964D954D764D
964D954D764D964D754D964D754D764D754D954D764D9541970BF703F703F703
F803F703F703D707F63D7549754D754D754D754D754D754D754D7549754D754D
754D754D754D754D7549754D754D7549754D754D7549754D754D754D754D754D
754D754D754D754D764D754D764D754D964D764D954D764D964D954D964D964D
964D9651954D96519651964D96519651964D9651B6519651B651B651B651B651
B651B751B651B751B751B651D751B751D755D651D755D755D751D755D755D755
D755F755D755F755F755F755F855F755F859F755F859F755185A185AF859185A
185A185A185A185A185A185A1856D72AB91E7C391F5C1F601E58503405100204
86144A29EF3DB6567B6FDE7BDE7BFF7FFF7FFF7FFF7FFF7FBD775B6F55564A29
051017441F5C1F5CDE48B91ED707B83AF859185A185A185A185A185AF859185A
F755185AF859F755F855F755F855F755F755F755D755F755D755D755D755D755
D755D751D755D751B755D651B751B651B751B651B751B651B651B651B6519651
B6519651D72AD703F703F703F703D72A964D964D954D764D964D954D764D964D
754D964D754D764D754D754D754D754D754D754D754D75499541D707D703F803
F703F703F703F703770B954175495549554D5549554955495549554955495549
554D75495549554955495549554D55495549554D55495549754D5549554D7549
554D7549554D754D7549754D754D754D754D754D7549754D754D754D754D764D
754D764D964D754D964D964D954D964D964D9651964D96519651964D96519651
964DB6519651B651B651B651B651B751B651B751B651B751D751D755D651B755
D751D755D755D755D755D751D755F755F755D755F755F855F755F859F755F859
F755185AF859185A185A185A185A185A185A185A38527817770B7C351F581F60
1B502C240510030CE820AE39B65639679C73DE7BFF7FFF7FFF7FBE7B5B6F5556
124150341F581F5C7E50B91EF80378171856185A185A185A185A185AF859F755
185AF859F755F859F755F859F755F755F755D755F755D755D755D755D755D755
D751D755D751B755D651B751B651B751B651B751B651B651B651B65196519651
B64D9651964D9651964DF63DD703F703F703F7031617964D754D964D754D764D
754D754D754D754D754D7549754D754D5549754D554975495549F63DD707D703
F703F703F703F703F703970F7545554955495549554955495549554955495549
5549554955493549554955495549554955495549554955495549554955495549
5549554955495549554955495549554955495549554D7549554D754D7549754D
7549754D754D754D754D754D754D764D754D764D954D764D964D954D964D964D
9651964D96519651964D96519651B6519651B651B651B651B751B651B751B651
B751B651D755D751B755D751D755D755D755D755D755F755D755F755F755F855
F755F755F859F755F859185AF755185A185AF755185A185A185A185AD72AD703
770B5D391E581F5C153C261404088614AE39744E39679C73BD77FF7FFF7FDE7B
D85E334135401E581E5C392ED703F703D72A185A185A185AF859185A185AF755
F859185AF755F859F755F755F755F755D755F755D755D755D755D755D755D751
D755D751B755D651B751B651B751B651B751B651B651B651B65196519651964D
9651964D9651964D9651954D764D954DF63D970FF703F703F703970F9541754D
754D7549754D7549754D554D5549554D5549554955495549554D5549F63DD703
F703F703F703F703F703D7031617754134453549344535493445354934453445
3445344534453445344534453445344534453445344534453445344535493445
3549344555493445554935495549554955495549554955495549554955495549
5549554D55497549554D754D7549554D754D754D7549754D754D764D754D764D
754D964D954D764D964D954D9651964D9651964D965196519651B651B651B651
B651B651B751B651B751B651D751D755B651D755D751D755D755D755D751D755
F755D755F755F855F755F855F755F859F755185AF859185AF859185A185A185A
185AB83AD707F703B91E7E501E581C5448180408E820AE39744EF75E7B6FFF7F
DE7B3967EF3417445E587E50590FF703F703D72A185A185A185A185A185AF859
F755185AF755F859F755F755F755F855F755D755F755D755D755D755D755D751
D755D751B755D651B751B651B751B651B751B651B651B6519651964D96519651
964D9651964D9651954D764D964D754D964D754D764D95413817F703F703F703
970B954175455549554D5549554955495549554955495549554955493445362E
D703F703F703F703F703F703F703161734453445344534453445344534453445
3445144534453445344534453445144534453445344534451445344534453445
3445344534453445344534453445344534453445344535493445354934455549
5549344555495549554955495549554955497549554D7549554D754D754D7549
754D754D764D754D764D754D964D754D964D954D9651964D9651964D9651964D
9651B651964DB651B651B751B651B751B651B751D651B755D751D755D651D755
D755D755D755D755F755D755F755F755F755F859F755F855F755185A185AF755
185A185A185A185A584ED703F703D7037C351F5C1E5C2C2426148614AE39B656
F75EFF7FDE7B4E351A501E583D41D703F703F703D72A185A185A185AF859185A
F755185AF755F859F755F755F755F855D755F755D755D755D755D755D751D755
D751B755D651B751B651D651B751B651B651B651B6519651964D96519651964D
9651964D9651754D964D964D764D954D764D764D754D764D754D754D75491617
F703F703F703D707F63D55495549554955493445554955493445354934453445
362ED703F703F703F703F703F703F703B91E3341144514453445144514453445
1445334114451445144514451445144514453341144514451445144534451445
1445144514451445144514453445144534451445344534453445344534453445
3445344534453549344535493549554935493445554935495549554955495549
55495549754D7549754D7549754D764D754D764D964D764D964D964D964D964D
9651964D9651965196519651B6519651B6519651B651B751B651B751D651B755
D751B755D751D755D751D755D755D755F755D755F855F755F755F859F755F859
F755185AF859185AF755185A185A584EF703F703F703392E1F581E5C2C242614
E8201042F75EFF7FB6561A4C1E5C3D41D703F703F7037817185A185AF755185A
185AF755F859F755F859F755F755F855F755D755F755D755D755D755D755D751
D755D751B755D651B751B6515341EF340D31EF340D31EF340D310D31EF340D31
0D31EF340D310D310D31EF34CD2C0D310D31CD2C0D31CD2C0D31CD2C0D313445
7549554D362EF703F703F703D703362E55495549344555493445344534453445
3445362EF703F703F703F803F703F703F703362E134114451139CD2C8C288C28
CD2C8C288C28B0341445144514451445D34014451445D1388C288C28CC288C28
8C288C2811391445144514451445144514451445144514451445334114453445
14453445CD2C8C2833413445EF34CD2CEF34CD2CEF34EF34EF34EF34CD2CEF34
EF34EF34EF34EF3455491241EF34EF34EF34EF34EF34EF34EF34EF34EF34EF34
EF34EF34EF347549965153415035EF3450355341B65150397549B651B651B751
B651B751B651D755D6515039503950395241D755F755D755F755F755F855D755
F859F755F855F755185AF859185A185AF755185AB83AF703F703F703B91E1F5C
1C542C24440C6A291042FF7F35491F5CDE48D703F703F703D703584E185AF859
185A185AF755185AF755F859F755F755F755F755D755F755D755D755D755D751
D755D751B755D651B751D751B651B751E8200000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000240C554955495549F63DD703F703F703D703362E34453445354534453445
34451445B91ED703F703F703F703F703F703D703362ED3401445144501040000
000000000000000000008C28D340D340D340D340D340D440D340000000000000
00000000000000008C28D440D3401445D34014451445D3401445144514451445
1445144513414818000000001139D34000000000000000002510461446144614
48188614461446144818E8203549CC2800000000000001044614861446144614
86140308000000000000E820764D86140000000000000D31964DCC2801045039
B651B751B651B751B651D751B7550000000000000000954DD751D755F755D755
F755F755D755F859F755F859F755185AF859F755185A185A18567817F703F703
F703392E1F5C1A4C0408420810427D771E581F5C590FF703F703F7033723185A
185A185AF859F755F859F755F859F755F855F755F855D755F755D755D755D755
D755D751D755B751D755B651B751B651B651B751E82000000000000000000000
00000104754993495549534175495341754953413341EF340000000000000000
0000000000000104554955495549344595419707F703F703F703161734453445
3445144534451617D703F703F703F703F703F703D703F32DD4401445D340D444
00000000000000000000000000004818D444D340D340B340D340B340B3400000
0000000000000000000000008C28D340D340D340D340D340D340D440D340D440
1445D3401445D138240C00000104CD2C14451241000000000000000034453445
344534453445344535495549344555495549CC2800000000000046147549554D
7549754D754D8C28000000000000E820764D4614000000000000CD2C9651B64D
EF340104CC28B651B651B651B751B651B75100000000000000009349D755D755
D755D755D755F855F755F855F859F755F859F755F859185A1856F859185A584E
F703F703F703F703DE481E582C2400006A291F6E1F5C7C35F803F703F703F703
584E1856185AF859F755185AF755F859F755F755F755F755D755F755D755D755
D755D751D755D751B651D755B651B751B651B751B651B751E820000000000000
00000000000022049651754D964D954D764D754D754D754D754D754D48180000
0000000000000000000001045549554934455549344575411617F703F703F703
16175341144533411617F703F703F703F703F703F703D70794311445D340D440
D340D34000000000000000000000000000004818D340B340B340B340B340B340
D13800000000000000000000000000008C28B340B340D340B340D340D340D340
D340D340D340D340CD2C01040000030CD13814451445D1380000000000000000
8C28CC288C288C28CC281341344534455549344555498C280000000000004614
5549754D5549754D7549E8200000000000004818964D86140000000000000D31
964D9651964D53414208240C440C440C86144614861400000000000000009349
D755D751D755F755D755F755D755F755F755F755F855F755185AF859F755185A
185A185A970FF703F703F70338171F5C1A5000008410DF641F5C3817D703F703
F703D707185A185AF755185AF859F755F859F755F855F755F855D755F755D755
D755D755D755D751D755D751B755D651B751B651B651B751B651B651CC28440C
430C240C430C240C240C4614954D964D754D764D764D754D764D754D55491139
4510000000000000000000000000020455495549344555493445344535451617
D703F703F703770B74351617F703F703F703F703F703F70397077435D340D340
D340D340D340D34000000000000000000000000000004818B340B340D138B340
B340B340B03400000000000000000000000000008C28B340B340B340B340B340
D340B340D340D340D3408C28000000004614D3401445D3401445113900000000
0000000025104510251045104510134134453549344555493445CC2800000000
000046145549754D5549754D554D8C28000000000000E820764D461400000000
0000CD2C964D9651964DB651954D861400000000CC28B651B751000000000000
00009349D755D751D755D755D755F755D755F855F755F859F755F859F755185A
F755185AF859185A3723F703F703F803D7037E501F5C040800005F5C1F5CD703
F703F703F7037817185AF859185A185AF755185AF755F859F755F755F755F755
D755D755D755D755D755D751D755B751D651B755B751B651B751B651B651B651
96519651964D9651964D9651964D954D964D754D964D754D5241CD2CE820240C
0000000000000000000002088614CC2811393445554934453549344534453549
34453445362EF703F703F703F703F703F703F703F803F703D703770B5439D340
D340D440D340D340D340B34000000000000000000000000000004818B340B340
B340B340D138B340503400000000000000000000000000008C28B340B340B340
D138B340B340B340D340D1382614000000008C28D340D3401445D3401445D138
000000000000000014451445344514453445144534453445344535493445CC28
000000000000451455495549554955497549E8200000000000004818954D4614
0000000000000D31954D9651964D96519651B651CC28000000008614954D0000
0000000000009349D755D751D755D755F755D755F755D755F855F755F859F755
F859F755185A185AF859185AD72AF703F703F703F7037C391F5C481800003E5C
1F5CF803F703F703F8037817F859185A185AF755F859F755185AF755F859F755
F859D755D755F755D755D755D755D751D755B651D755B751B651B751B651B651
B751B6519651B651964D96519651964D96517549EF34CC284510010400000000
0000000001004514CC28EF343341554955495549554955493445554934453549
344534453445344534459535D703F703F703F803F703F703F703F703770B133D
D340D340D340D340D340D340B340D34000000000000000000000000000004818
B340D138B3405034B3405034D13800000000000000000000000000008C28D138
B340B340B340B340B340B340B034020400000104B034D340D3401445D3401445
D340D3400000000000000000CC28CD2C8C28CD2CCD2CCD2CCD2CCD2CCD2CCD2C
3549CC28000000000000240CCC28CC28CC28CC28CC280000000000000000E820
764D4614000000000000CD2C964D9651964D9651B651964DB651503901040000
020800000000000000009349D755D751D755D755D751F755D755F855F755D755
F855F755F8591856F859F755185A185AB83AF703F703F703F7037C351F5C4818
02085F5C1F5C9707F703F703F703970F185A185A185AF755185AF859F755F755
F855F755F755D755F755D755D755D755D755D751D755B751D755B651B751D651
B751B651B651B751B6519651964D5241CC288614030C00000000000000000000
240CE820CD2C3341754D7549554D55495549554D554955495549344555493445
5549344534453445344534451445F32DB803F703F703F703F703F703F7031617
133DD444D3401445D340D444D340D340D340B340000000000000000000000000
00004818B340B340D138B340D138B3408C280000000000000000000000000000
8C28B340B340D138B340B340B3408C2800000000240CD138D444D340D340D340
1445D3401445D340CD2C8C288C28CC288C288C28CC288C28CC288C28CC28CC28
CD2CCD2C35491139CD2CCC28CD2CCC28CD2CCC28CD2CCD2CCD2CCD2CCD2CCD2C
0D313341954D33410D31CD2C0D3152419651964D9651964D9651B6519651B651
75490D310D310D31EF340D315035B755D651D755D755D755F755D755F755D755
F755F859F755F859F755F859F755185A185AF755D72AF703F803F703F7033D41
1F5C2614E8207F691F5C392EF803F703F703D7031856185AF859185AF755F859
F755F859F755F755F855D755F755D755D755D755D751D755D755D751B651D751
B651B755B651B751B6519651EF34440C0000000000000000000000008614CD2C
5039554D964D754D754D764D7549754912410D31EF34CD2CEF34CD2CEF34EF34
34455549344535493445344534453445362ED703F703F703F703F703F703F703
D70394311445D3401445D340D340D340D340D340D340D3400000000000000000
0000000000004818B340B340B340B340B3404818000000000000000000000000
000000008C28B340B340B340D340B3404818000000004818D340D340D340D440
D3401445D3401445D34014451445334114451445144534451445344534453445
35493445344555493445554934455549554955495549554D7549554D7549754D
754D7549764D954D764D954D764D9651754D964D9651964D96519651B64D9651
B751B651B651B751B651D755B651D751B755D751D755D755D751D755D755D755
F855F755F855F755F755F859F755185AF8591856F859185A3723F703F703F703
D7031F581E5C0204AE39BF761F5CDE48D703F803F703F703B83A185A185AF859
F755185AF755F859F755F859F755F755D755F755D755D755D755D755D751D755
B751D755B651D751B651B651B751B651E8200000000000000000000000000204
9651954D764D964D754D754D764D754D764D754D8C2800000000000000000000
000001045549554934453549554934453445362EF703F703F703F803F703F703
F703F703F703D703362ED34014451341D444D3401445D340D444D34000000000
000000000000000000004818D444D340B340D138261400000000000000000000
00000000000000008C28B340D340B340D138240C000000008C28D340D444D340
1445D3401445D444134114451445144514451445144534451445344534453445
34453445344535495549344555495549554955495549554D5549754D5549754D
7549754D754D764D754D764D954D764D954D964D9651964D9651964D9651B64D
9651B6519651B651B751B651B751B651D755B751D755D651D755D751D755F755
D755F755F755D755F755F755F859F755F859185AF755185AF8593852D707F703
F703F803392E1F58153CE820534EFF7FBE601F5C392EF803F703F7037817185A
F755185A185AF755F8591856F755F755F755F755F855D755F755D755D755D755
D751D755D755B651D751B755B651B751B651B651E82000000000000000000000
000000005241964D954D9651954D764D954D754D754D754DE820000000000000
0000000000000104554955495549554934453549362EF703F703F703F703F703
F703D803362ED707F703F703D703362E1341144513411445D3401445D3401445
00000000000000000000000000004818D340D340B0340208000001048C280000
0000000000000000000000008C28D340D440CD2C020400000208B034D3401445
D3401445D3401445144513411445144514451445144534451445344534453445
3445344534453549554934455549344555495549554955495549754D5549754D
5549754D754D754D764D754D964D754D964D754D9651964D9651964D9651964D
B6519651B751B651B651B751B651B751B651D751B755D651D755D751D755D755
D755D755F855F755D755F755F859F755F859F755185AF755185A185A185AB83A
F703F703F70397073F541F5C8C28F44DB656FF7FFF761F5C1F583817D703F703
F703B83A185A185AF859F755185AF755F859F755F859F755F755F755D755F755
D755D755D755D751D755D751D755B651D751B651B751B651CC28000000000000
00000000000000000000240C4510451045104510451045144510451001040000
000000000000000000000104554955495549554955491617D703F703F703F803
F703F703D703F32D35497541770BF703F703F703161713411445144514451445
134114450000000000000000000000000000240C4818461400000000240CD340
D3400000000000000000000000000000240C48184614000000004510D3401341
1445144513411445144514451445144514451445344534453445344534453445
34453445354955493445554934455549554955495549554D5549754D5549754D
5549754D754D7549764D754D964D754D964D754D964D9651954D9651964D9651
964DB6519651B651B651B651B751B651B751B651D755B651D755D751D755D755
D751D755F755D755F755D755F755F859F755F855F859F755185A185AF755185A
3852D707F703F703D703DE481E5C343C934939677C73FF7FFF7F1F6E1F5C3F54
3817D703F803D707584E185A185AF859185AF755F859185AF755F855F755F859
F755D755F855D755D755D755D751D755D755D751B651D755B751B6519349E820
4510451045144510451045144510451045104514451045104510451045104510
45104510451045104510451045104614754D7549554975491617F703F703F703
F703F703F703D707953555493445344555451617F703F703F703770B53413341
3445144514451445CD2C25102510440C2510240C2510240C2510440C25108C28
1341144513418C282510440C2510440C2510440C2510240C251045108C281445
1445144514451445144514453445144534453445344534453445344534453445
354934455549344555493445554955495549554955495549754D5549754D5549
754D7549754D754D764D754D964D754D964D754D964D9651964D9651964D9651
964DB6519651B651B651B751B651B751B651B751D651B755D751D755D751D755
D751D755D755F755D755F755F755F855F755F859F755F859185AF755185AF859
185A18563723F703F703D7033D411E581A4C7549D85E5B6FDE7BFF7FFF7FFF7F
9F691F5C1F58B91EF703F703970F3856185A185A185AF755185AF755F859F755
F859F755F755F755F755D755F755D755D755D755D755D751D755D751B651D755
B651B751B651B651B751B651B6519651B751964DB651964D9651964D9651964D
954D964D754D964D754D764D754D754D764D754D754D554975493817F703F703
F703F703F703F703D70795355549554934455549344555491617F703F703F703
9707953534453445344534453445144534451445344514451445344514451445
1445144514451445144514451445144514451445144514451445344514453445
1445344534453445144534453445344534453445344534453549344534453549
344555493445554955495549554955495549554D5549754D5549754D5549754D
7549754D764D754D764D754D964D754D964D754D964D9651954D9651964D9651
964DB6519651B651B751B651B751B651B651B751D651B755D751B755D651D755
D755D755D755F755D755F755F755F755F859F755F855185AF755185AF755185A
185A185A185AD72AF703F7039707DE481E5C1A500D31D85E9D77BE7BDE7BFF7F
FF7FFF7FFF7FFF6D1F5C1F5C7C35D703F703970F3852185A185A185A185A185A
F755185AF755F859F755F859F755F755F755D755F755D755D755D755D751D755
D755D751B755D651B751D755B651B751B651B651B651B65196519651B64D9651
964D9651964D964D9651954D764D954D764D754D964D754D954D9541970FD703
F703F803F703F703F703970B954155495549554955495549554955495549362E
F703F703F703D703362E34453445344534453445354934453445344534453445
3445344534453445344534453445344534453445344534453445344534453445
3445344534453445344534453549344534453549344555493445554934455549
554955495549554955495549554D5549554D75495549754D5549754D7549754D
754D754D754D764D954D764D954D764D954D9651964D9651964D9651964D9651
B64D9651B6519651B651B651B751B651B751B651D751B755D651D755D751D755
D751D755D755F755D755F755D755F755F855F755F859F755185AF859F755185A
F859185A185A185AD72AF703F703B91E3F541F5C1A4C0D315B6FBD77DF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7F9F763E5C1F5C7E50B91EF703970B584E185A185A
185AF755185A185AF755185AF755F859F755F859F755F755F755D755D755F755
D755D755D755D751D755D751D755B651B751D651B755B651B751B651B651B751
B6519651B6519651964D9651964D9651964D9651954D964D954D764D9541970B
F703F703F703F703F703F703970F95417549554D75495549554D554955495549
5549554D362ED703F703F703D703B91E34455549554955493445554934455549
3445354934455549344535493445354934453445354934455549344535493445
5549344535493445554934455549554934455549554955495549554955495549
55495549554955495549554D75495549754D5549754D7549754D764D754D754D
764D754D964D754D964D754D964D9651954D964D9651964D9651964D9651964D
B6519651B651B651B751B651B751B651B751D651B751D755B651D755D751D755
D755D755D755F755D755F755F755F755F859F755F859F755185AF755185AF755
185A185A185A185A18563723F80397077C391F5C1F601438AE39BD77FF7FDE7B
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F7E77DF641F5C1F5C3D413817D703
B83A185A185A185A185AF859185AF755185AF755F859F755F755F859F755F855
F755F755D755F755D755D755D755D755D751D755D751D755B651B751D651B755
B651B751B651B651B651B751B65196519651B64D9651964D9651964D9651F63D
D707F703F703F703F703F703D703970F9541754D764D754D754D754D754D7549
754D7549554D75495549F63DD707F703F703F703161775455549554955495549
5549554955495549554955495549554955495549554955495549554955495549
55495549554955495549554955495549554955495549554D554955495549754D
55495549754D5549754D7549754D754D7549754D764D754D754D764D754D754D
964D754D964D764D954D964D9651964D9651964D9651964D9651964DB6519651
B651B751B651B651B751B651B751B651B751D651B755D651D755D751D755D755
D755D755F755D755F755D755F755F855F755F859F755F859F755185AF755185A
F859185A185A185A185A584E970FB803392E1F581F5C1D588C28B656FF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F7F725F5C1F5C
1F5C3D41381738175852185A185A185A185AF859185AF8591856185AF859F755
F859F755F755F859F755F755F755D755D755F755D755D755D755D751D755D751
D755B651D751B651B751B651B751B651B651B751B651B6519651B7519651964D
F63DD703F703F703F803F703F703F70378177549964D954D764D954D764D754D
954D764D754D754D754D754D764D754D9541770BF703F703F703770B95417549
754D5549754D5549754D55495549754D55495549754D55495549754D5549554D
75495549554D75495549754D55497549554D7549754D7549554D7549754D7549
754D754D7549754D764D754D754D754D764D754D754D764D954D764D954D764D
954D964D9651954D9651964D9651964D9651964D9651964DB6519651B651B651
B651B751B651B651B751B651B751D651B755D651D755D751D755D751D755D755
D755D755F755D755F755F855F755F755F859F755F859F755185AF755185AF859
185A185A185A185AF859185AD72A970F392E1F581F5C1F5C1438EF3DBD77FF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
DF7F1F6E3E5C1F5C1F5CDE48392ED72A1856185A185A185A185A185AF859185A
F755185A185AF755F859F755F859F755F755F855F755F755D755F755D755D755
D755D755D755D751D755D751D755B751D651B755B651B751D651B751B651B651
B651B83AD703D703F703F703F703F703F7033817B64D9651964D9651964D9651
954D964D9651764D954D764D954D764D754D964D754D964D970FD703F703F703
D707F63D7549754D764D7549754D764D754D754D764D754D754D754D754D754D
754D7549754D754D754D764D754D754D754D754D754D764D754D754D754D764D
754D754D764D754D754D964D754D964D754D964D754D964D964D9651954D9651
964D9651964D9651964D9651964DB6519651B6519651B651B651B651B651B751
B651B751B651B751B651D751B755D651D755D751D755D751D755D755D755D755
F755D755F755F755F755F755F859F755F859F755185AF755185AF8591856F859
185A185A185A185A185A185AB83AB91E7C391F581F5C1E5C153C71397B6FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FBF7F3F725F5C1F5C1F5C3F543D41DA4D1856185A185A185A
185A185A185AF859185AF755185AF755185AF755185AF755F859F755F855F755
F755F755D755D755F755D755D755D755D755D751D755D751D755D651B755B651
B651B755D72AD703F703F703F703F703F803F7031617B651B651964DB6519651
964D9651964D9651964D9651964D9651964D9651964D9651954D964D964D970F
D703F703F703D703D72A754D9651754D964D754D964D754D764D954D764D754D
964D754D764D954D764D754D964D754D964D754D964D754D964D754D964D954D
764D954D964D9651964D954D9651964D9651964D964D9651964D9651964D9651
964D9651964DB6519651B651B6519651B651B651B651B651B751B651B751B651
B751B651D755B651D755D651D755D751D755D751D755D755D755D755D755F755
D755F755F755F755F855F755F859F755185AF755185AF755185AF859185A185A
185A185A185A185A185A185AF9517C399D541F581F5C1E58343C52417B6FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBF761F651F5C1F5C1F5C3E5CFB58
F859185A185A185A185A185A185A185AF859185AF859185AF755185AF755F859
F755F859F755F859F755F755F855F755D755F755D755D755D755F755D755D755
D751F74DB83A970FD703F703F803F703F703F703F703F703D72AB651B751B651
9651B651B651B751B651B6519651B651B65196519651B64D96519651964D9651
964D3723D703F703F803F703F703970F362EB64D964D964D954D9651964D964D
9651964D9651964D964D9651964D9651964D964D9651964D964D9651964D9651
964D9651964D9651964D9651964D9651964D9651964D9651B6519651B6519651
B651B651B651B751B651B651B651B751B651B751B651B751B651B751D651B755
D651B751D755D751D755D751D755D751D755D755D755D755F755D755F755F755
F755F755F859F755F859F755F859F755185AF859F755185A185AF859185A185A
185A185A185A185A185AF8597A595E581E5C1F5C1F5C1A50B340334E9C73FF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F9F7F5F72DF64
1F5C1F5C1F5CBD587A59185A185A185A185A185A185A185A185A185AF859185A
F859185AF755185AF755185AF755185AF755F755F859F755F755F755F755F755
183ED707D703F703F703F703F703F703F703F703F803F703F703F703F703D703
D707D7077817B651B751B651B751B651B651B751B651B651B651B651B651970F
D707D707D703F703F703F703F703F703F703F703F703F703D703D707D72A964D
96519651B64D96519651B64D96519651B651964D9651B6519651964DB6519651
B6519651B64D9651B651B651B6519651B651B651B651B751B651B651B651B751
B651B651B751B651B651B751B651B751D651B751D755B651D751D755D751D755
D751D755D751D755D755D755D755D755F755D755F755F755F755F755F755F855
F755F859F755F859F755185AF755185AF859185AF755185A185A185A185A185A
185A185A185A185A185AB959FB583E5C1E5C1F5C1B50343C9349F75EFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7F9F7F5F721F653E5C1F5C3E5CBD589A59F859185A185A185A185A185A
185A185A185A185A185AF859185AF755185AF859F755185AF859F755185AF755
F859F755B83AF703F703F703F703F703F703F703F703F703F703F703F803F703
F703F703F703F703970FD751D755D751D751D651B755D751B651B751D755B651
B751D707F703F703F703F703F703F703F703F703F703F703F703F703F703F703
D72AB651B651B651B751B651B651B651B751B651B651B651B651B751B651B651
B751B651B651B751B651B751B651B751B651B651B751B651B751B651B751D651
B755B651D751D755B651D751D755D751D755D751D755D755D755D755D755D755
D755D755D755D755F755D755F755F755F755F755F859F755F859F755F859F755
F859F755185AF755185AF8591856185AF859185A185A185A185A185A185A185A
185A185A185A185AB9591B5D5E581E5C1F5C1A4C343C9349F75EDE7BFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FDF7FFF76FF6D1F651F5C3E5CBD585B5DF859
185AF859185A185A185A185A185A185A185A185A185A185AF859185AF755185A
F859F755185AF7551856174E3852384E174E3852174E384E174E384E174E174E
174E174E174E174E174E174E174ED755D755D755D755D755D755D751D755D755
D751D755D755F74D174E174EF74D174EF74D174EF74D174EF74DF74D174EF74D
F74DF74DF74DB651D751B751D651B755D651B751D751B651D755B751D751B651
D751B755D751B651D755D751D755B651D751D755D651D751D755D751D755D751
D755D755D751D755D755D751D755D755D755D755D755D755D755F755D755F755
D755F755F755F755F859F755F755F859F755F859F755F855F755185AF755185A
F859F755185A185AF859185AF859185A185A185A185AF755185A185A185A185A
185A185AF8597A5DFB583E5C1E5C1A4C343C3445534E3967FF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDF7F3F7B5F72
7F69BE605F5CFB585B5DB9591856185A185A185A185A185A185A185A185A185A
185A185A185A185AF859185AF859185AF755185AF755185AF755185AF755F859
F755185AF755F755F859F755F755F855F755F755F755D755F755F755F755D755
F755D755F755D755F755D755D755D755D755D755D755D755D755D755D755D755
D755D751D755D755D755D755D751D755D755D755D751D755D755D755D751D755
D755D755D755D751D755D755D755D751D755D755D755D755D755D755D755D755
D755D755D755F755D755D755F755D755F755F755F755F755F755F755F755F855
F755F755F755F859F755F855F755185AF755185AF755185AF755185AF859185A
F8591856F859185A185A185A185A185A185A185A185A185A185A185A185A185A
F8597A59FB585E581A50153CD444754975523967FF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F
FF7FFF7FFF7FFF7FDF7F3F7BBE72FF6D7F695D61FB587A599A59F859185A185A
185A185A185A185A185A185A185A185A185A185A185A185A185AF859185AF859
185AF755185AF859F755185AF859F755185AF755F859F755185AF755F859F755
F859F755F755F859F755F755F755F855F755F755F855F755F755F755F755D755
F755D755F755D755F755D755F755D755F755D755F755D755F755D755F755D755
F755D755F755D755F755D755F755D755F755D755F75500000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000}
Stretch = True
IsControl = True
end
end
end
object OKButton: TButton
Left = 81
Top = 158
Width = 75
Height = 25
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 1
end
end
/VCL_DELPHIX_D6/SXMedia/SXAbout.pas
0,0 → 1,53
{
SXMedia Components - Beta 1
--------------------------------
Copyright 1999 Dean Ellis
http://www.sillex.freeserve.co.uk
 
This unit is part of the SXMedia Component Set. This code is
supplied as is with no guarantees and must be used at your own
risk.
 
No modifications to this code must be made without the express
permission of the author. Please report any problems to
support@sillex.freeserve.co.uk
 
You may use these components to create any freeware/shareware
applications that you wish. If the components are to be used in
a commercail product then credit for developement of these components
should be given.
 
Credits :
 
Developer : Dean Ellis
}
unit sxabout;
 
interface
 
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
 
type
TAboutBox = class(TForm)
InfoContainer: TPanel;
Version: TLabel;
Copyright: TLabel;
OKButton: TButton;
Author: TLabel;
WebSite: TLabel;
Credits: TLabel;
LogoContainer: TPanel;
ProgramIcon: TImage;
private
{ Private declarations }
public
{ Public declarations }
end;
 
implementation
 
{$R *.DFM}
 
end.
 
/VCL_DELPHIX_D6/SXMedia/SXEditor.pas
0,0 → 1,122
{
SXMedia Components - Beta 1
--------------------------------
Copyright 1999 Dean Ellis
http://www.sillex.freeserve.co.uk
 
This unit is part of the SXMedia Component Set. This code is
supplied as is with no guarantees and must be used at your own
risk.
 
No modifications to this code must be made without the express
permission of the author. Please report any problems to
support@sillex.freeserve.co.uk
 
You may use these components to create any freeware/shareware
applications that you wish. If the components are to be used in
a commercail product then credit for developement of these components
should be given.
 
Credits :
 
Developer : Dean Ellis
}
unit SXEditor;
 
{$INCLUDE DelphiXcfg.inc}
 
interface
 
uses Windows, Classes,
{$IfNDef VER6UP} DsgnIntf, {$Else} Designintf, DesignEditors, {$EndIf}
Dialogs, SXMovie, SXModPlayer, SXEngine, SXAbout;
 
const
 
SXMOVIE_FILTER = 'All Media Files|*.avi;*.mpg;*.mov|' +
'AVI (*.avi)|*.avi|MPG (*.mpg)|*.mpg|MOV (*.mov)|*.mov';
SXMODPLAYER_FILTER = 'All Media Files|*.mod;*.it;*.sm3|' +
'Impulse Tracker (*.it)|*.it|Scream Tracker (*.s3m)|*.s3m|Fast Tracker (*.xm)|*.xm';
 
type
 
TFilenameProperty = class(TPropertyEditor)
function GetAttributes : TPropertyAttributes; override;
function GetValue : string; override;
procedure SetValue(const Value : string); override;
procedure Edit; override;
end;
 
TSXComponentEditor = class(TComponentEditor)
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
 
implementation
 
{--------------------------------------}
{ TFilename Property Editor }
{--------------------------------------}
procedure TFilenameProperty.Edit;
var
Dialog : TOpenDialog;
begin
Dialog := TOpenDialog.Create(nil);
with Dialog do
try
DefaultExt := 'All Media Files';
if GetComponent(0) is TSXMovie then
Filter := SXMOVIE_FILTER
else
if GetComponent(0) is TSXModPlayer then
Filter := SXMODPLAYER_FILTER
else
Exit;
if Dialog.Execute then
begin
SetStrValue(Dialog.FileName);
Designer.Modified;
end;
finally
Free;
end;
end;
 
function TFilenameProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog];
end;
 
function TFilenameProperty.GetValue : string;
begin
Result := GetStrValue;
end;
 
procedure TFilenameProperty.SetValue(const Value : string);
begin
SetStrValue(Value);
Designer.Modified;
end;
 
procedure TSXComponentEditor.ExecuteVerb(Index: Integer);
begin
with TAboutBox.Create(nil) do
begin
try
ShowModal;
finally
Free;
end;
end;
end;
function TSXComponentEditor.GetVerb(Index: Integer): string;
begin
Result := 'A&bout SXMedia';
end;
function TSXComponentEditor.GetVerbCount: Integer;
begin
Result := 1;
end;
 
end.
/VCL_DELPHIX_D6/SXMedia/SXReg.dcr
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/SXMedia/SXReg.pas
0,0 → 1,53
{
SXMedia Components - Beta 1
--------------------------------
Copyright 1999 Dean Ellis
http://www.sillex.freeserve.co.uk
 
This unit is part of the SXMedia Component Set. This code is
supplied as is with no guarantees and must be used at your own
risk.
 
No modifications to this code must be made without the express
permission of the author. Please report any problems to
support@sillex.freeserve.co.uk
 
You may use these components to create any freeware/shareware
applications that you wish. If the components are to be used in
a commercail product then credit for developement of these components
should be given.
 
Credits :
 
Developer : Dean Ellis
Testers : Dominique Louis
Ivan Blecic
 
}
unit SXReg;
 
{$INCLUDE DelphiXcfg.inc}
 
interface
 
uses Windows, Classes, SysUtils, SXEditor, SXMovie, SXEngine, SXModPlayer,
{$IfNDef VER6UP} DsgnIntf {$Else} Designintf, DesignEditors {$EndIf};
 
procedure Register;
 
implementation
 
{$R SXReg.dcr}
 
 
procedure Register;
begin
RegisterPropertyEditor(TypeInfo(TFilename), nil, 'Filename', TFilenameProperty);
RegisterComponentEditor(TSXMovie,TSXComponentEditor);
RegisterComponentEditor(TSXEngine,TSXComponentEditor);
RegisterComponentEditor(TSXModPlayer,TSXComponentEditor);
RegisterComponents('SX Media',[TSXMovie, TSXEngine, TSXModPlayer]);
RegisterClass(TScreenRect);
end;
 
end.
/VCL_DELPHIX_D6/SXMedia
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu100/.gitkeep
--- VCL_DELPHIX_D6/Dcu100 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu100 (revision 99)
/VCL_DELPHIX_D6/Dcu100
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu110/.gitkeep
--- VCL_DELPHIX_D6/Dcu110 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu110 (revision 99)
/VCL_DELPHIX_D6/Dcu110
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu120/.gitkeep
--- VCL_DELPHIX_D6/Dcu120 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu120 (revision 99)
/VCL_DELPHIX_D6/Dcu120
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu140/.gitkeep
--- VCL_DELPHIX_D6/Dcu140 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu140 (revision 99)
/VCL_DELPHIX_D6/Dcu140
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu150/.gitkeep
--- VCL_DELPHIX_D6/Dcu150 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu150 (revision 99)
/VCL_DELPHIX_D6/Dcu150
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu160/.gitkeep
--- VCL_DELPHIX_D6/Dcu160 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu160 (revision 99)
/VCL_DELPHIX_D6/Dcu160
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu170/.gitkeep
--- VCL_DELPHIX_D6/Dcu170 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu170 (revision 99)
/VCL_DELPHIX_D6/Dcu170
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu180/.gitkeep
--- VCL_DELPHIX_D6/Dcu180 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu180 (revision 99)
/VCL_DELPHIX_D6/Dcu180
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu190/.gitkeep
--- VCL_DELPHIX_D6/Dcu190 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu190 (revision 99)
/VCL_DELPHIX_D6/Dcu190
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu200/.gitkeep
--- VCL_DELPHIX_D6/Dcu200 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu200 (revision 99)
/VCL_DELPHIX_D6/Dcu200
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu210/.gitkeep
--- VCL_DELPHIX_D6/Dcu210 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu210 (revision 99)
/VCL_DELPHIX_D6/Dcu210
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu220/.gitkeep
--- VCL_DELPHIX_D6/Dcu220 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu220 (revision 99)
/VCL_DELPHIX_D6/Dcu220
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu30/.gitkeep
--- VCL_DELPHIX_D6/Dcu30 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu30 (revision 99)
/VCL_DELPHIX_D6/Dcu30
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu40/.gitkeep
--- VCL_DELPHIX_D6/Dcu40 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu40 (revision 99)
/VCL_DELPHIX_D6/Dcu40
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu50/.gitkeep
--- VCL_DELPHIX_D6/Dcu50 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu50 (revision 99)
/VCL_DELPHIX_D6/Dcu50
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu60/.gitkeep
--- VCL_DELPHIX_D6/Dcu60 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu60 (revision 99)
/VCL_DELPHIX_D6/Dcu60
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu70/.gitkeep
--- VCL_DELPHIX_D6/Dcu70 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu70 (revision 99)
/VCL_DELPHIX_D6/Dcu70
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Dcu90/.gitkeep
--- VCL_DELPHIX_D6/Dcu90 (nonexistent)
+++ VCL_DELPHIX_D6/Dcu90 (revision 99)
/VCL_DELPHIX_D6/Dcu90
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/VCL_DELPHIX_D6/Colli3DX.dcr
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/Colli3DX.pas
0,0 → 1,2383
unit colli3DX;
 
{$include DelphiXcfg.inc}
 
 
//*************************************************************************
//* *
//* TCollisionTester3DX vs 1.3 *
//* *
//*************************************************************************
//
// This Delphi 4, 5, 6 component is CopyRight:
//
// Henrik Fabricius, August 1999, March 2000, June 2002
// http://users.cybercity.dk/~bbl6194/delphi3dx.htm
// E-mail: henrik_og_bodil@vip.cybercity.dk
//
// You may use this component for free on the following conditions:
// 1) this text must remain part of the unit.
// 2) Any proposals for changes or improvements should be addressed directly to
// the copyright owner Henrik Fabricius
// 3) The use of this component is on your own risk. The software is provided
// as is without any garanties and warranty. The CopyRight Owner is not
// responsible for any damage or losses of any kind caused by the use of this
// software or the software it is intended to be used with.
//
// To place a link for down-loads of this component on your homepage
// please place a link to the Delphi3DX page where the latest version
// is available.
//
// To use this component you must have
// 1) Delphi 4, 5 or 6
// 2) MS-DirectX 6.0 or higher
// 3) the DelphiX components from Hori in Japan
//
// MS-DirectX is a trademark of the Microsoft Corporation
// Delphi 4, 5 and 6 is a trademark of the Inprise Corporation
//
// Use this component to check for collisions between 3D objects in
// Direct3D games.
// Place your 3D-objects in a world described by :
// - DXDrawUsed -
//
// Group the 3D-objects in series with different material
// or functional properties
// The 3D-object series are named by the property:
// - Indexof3DSeries -
// 3D-objects are named by the property :
// - Indexof3Dobject -
// A 3D-object consist of one or more 3D-elements named by the property :
// - Indexof3DElement -
//
// Surround each of your 3D elements by at least one collision object
// which must be a member of the following primitives :
// - box3D - sphere3D - ellipsoid3D - cylinder3D - conus3D -
// available CollOrientations are :
// - Symmetric_X - Symmetric_Y - Symmetric_Z -
// available material properties are :
// - solid3D - water3D - air3D
// the size of the small end of the conus is described by the property
// - PercentLeftatTop -
// a negative value means that the top is downwards
// available functional properties are :
// - Pickable - Shootable - Fixed3DObject
// Add each object by specifying :
// - FrameSeries - NextAddMesh - CoverWholeMesh -
// - IndexOf3DSeries - IndexOf3DObject - IndexOf3DElement -
// if coverWholeMesh is false then specify a box containing the part of the
// 3D object which should be covered by the coll object by the commands
// - BoxPartMin(x,y,z) - BoxPartMax(x,y,z) -
// Finally add the collision object by executing the command
// - AddCollisionObject -
//
// Bullets are described by the following properties :
// - BulletRadius - BulletRange - BulletFrame - LongShots -
// LongShots moves with a unlimited speed reaching the objects immediately
//
// The actor is described by :
// - FrontDistance - HeadRadius -
//
// The camera-frame and the bullet-frames move each time the move command
// is used in the main program.
// Execute the following commands prior to each move command :
// - GetOldEyePos - GetOldBulletPos -
// The collisionTester needs this information to test for a possible collision
// in between the starting and the ending points of the Eye/bullet
//
// Test for collision with the following function calls :
// - if CollisionTester3DX1.Collision then ..
// - if CollisionTester3DX1.BulletCollision then ..
// On collision read the HitLinkNr and the properties of the collision object
//
// Destroy 3D collisionObjects by specifying :
// - NextDestroyNr - IndexOf3DSeries -
// and the executing command DestroyCollisionObject
//
// Initialize the collisionTester with the command :
// - CollisionTester3DX1.ZeroSetIt -
// This must always be done when DXDraw is initialized
//
// To install the component:
// 1) place this unit and the dcr file in the same directory as DelphiX
// 2) In Delphi you must click on Component - Install Component
// 3) Select the colli3DX.pas file and choose the Samples package to install it
// 4) Rebuild the library
// 5) Look for a new icon with a bomb on the page named DelphiX
//
// Tutorial programs are available for down-load at
// http://users.cybercity.dk/~bbl6194/delphi3dx.htm
//
// Good Luck
// Henrik Fabricius
//
//
//****************************************************************************
 
 
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DXClass, DXDraws,
{$IfDef StandardDX}
DirectDraw, Direct3D, Direct3DRM;
{$Else}
DirectX;
{$EndIf}
 
Type
Tshapes3D = (box3D, sphere3D, ellipsoid3D, cylinder3D, conus3D);
Tmaterials3D = (solid3D, water3D, air3D);
TOrientation3D = (symmetric_x, symmetric_y, symmetric_z);
TFrames3D = Array of Array of IDirect3DRMFrame;
 
TCollisionTester3DX = class(TComponent)
private
{private declarations}
FDXDrawUsed : TDXDraw;
FFrameSeries : TFrames3D;
FNextAddMesh : IDirect3DRMMesh;
FBulletFrame : IDirect3DRMFrame;
FBoxPartMin : TD3DVector;
FBoxPartMax : TD3DVector;
FOldBulletPosition: TD3DVector;
FOldEyePosition : TD3DVector;
 
FNrOfSeries : integer;
FSeriesIndex : integer;
FSeriesNr : integer;
FOrientation3D : TOrientation3D;
Fshape3D : Tshapes3D;
Fmaterial3D : Tmaterials3D;
FPercentLeftAtTop : integer;
Fbullet_hitLinknr : integer;
FIndexOf3DObject : integer;
FIndexOf3DElement : integer;
FNextDestroyNr : integer;
FNextAllOfMesh : Boolean;
FFrontDistance : integer;
FBulletRange : integer;
FBulletRadius : integer;
FHeadRadius : integer;
FFixed3DObject : Boolean;
FShootable : Boolean;
FLongShots : Boolean;
FPickable : Boolean;
FCheckAllCollObj : Boolean;
 
Fcoll_Nr_Objects : Array of integer;
FSeriesIndex_for_SeriesNr : Array of integer;
 
FNrinFrameSeries : Array of Array of integer;
Fcoll_orientation : Array of Array of TOrientation3D;
Fcoll_shape : Array of Array of Tshapes3D;
Fcoll_material : Array of Array of Tmaterials3D;
Fcoll_box_min : Array of Array of TD3DVector;
Fcoll_box_max : Array of Array of TD3DVector;
Fcoll_radius : Array of Array of TD3DValue;
Fcoll_frac_at_top : Array of Array of TD3DValue;
Fcoll_shootable : Array of Array of boolean;
Fcoll_Pickable : Array of Array of boolean;
Fcoll_Fixed3D : Array of Array of boolean;
Fcoll_objectNr : Array of Array of integer;
 
procedure SetOrientation3D(Value : TOrientation3D);
procedure SetShape3D(Value: TShapes3D);
procedure SetMaterial3D(Value: Tmaterials3D);
procedure SetPercentLeftatTop(Value: integer);
procedure SetIndexOf3DObject(Value : integer);
procedure SetIndexOf3DElement(Value : integer);
procedure SetIndexOf3DSeries(Value : integer);
procedure SetNextDestroyNr(Value : Integer);
procedure SetBulletRadius(Value : Integer);
procedure SetHeadRadius(Value : Integer);
procedure SetFrontDistance(Value : Integer);
procedure SetBulletRange(Value : Integer);
function add_space_for_one_more : boolean;
procedure GetTheBox;
procedure AddBox;
procedure AddSphere;
procedure AddCylinder;
procedure AddConus;
procedure AddEllipsoid;
 
procedure MakeNewSeries;
procedure Destroy_empty_series(SeriesNr : integer);
function GetSeriesNr(Nr : integer): integer;
procedure remove_collision_object(seriesNr, Value : integer);
function CheckForSeriesIndex(indexnow : integer): boolean;
procedure ListDataForCollObject;
function coll_test_box(coll_nr : byte;
old_attacker_position, attacker_position : TD3DVector;
bullet_radius : TD3DValue; longshot : boolean): boolean;
function coll_test_cylinder(coll_nr : byte;
old_attacker_position, attacker_position : TD3DVector;
bullet_radius : TD3DValue; longshot : boolean): boolean;
function coll_test_sphere(coll_nr : byte;
old_attacker_position,
attacker_position : TD3DVector;
bullet_radius : TD3Dvalue; longshot : boolean): boolean;
function coll_test_ellipsoid(coll_nr : byte;
old_attacker_position, attacker_position : TD3DVector;
bullet_radius : TD3DValue; longshot : boolean): boolean;
function coll_test_conus(coll_nr : byte;
old_attacker_position, attacker_position : TD3DVector;
bullet_radius : TD3DValue; longshot : boolean): boolean;
 
protected
 
public
Constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
 
property DXDrawUsed : TDXDraw write FDXDrawUsed stored false;
property FrameSeries : TFrames3D write FFrameSeries stored false;
property NextAddMesh : IDirect3DRMMesh write FNextAddMesh stored false;
property BulletFrame : IDirect3DRMFrame write FBulletFrame stored false;
 
procedure ZeroSetIt;
procedure BoxPartMin(xval, yval, zval: TD3DValue);
procedure BoxPartMax(xval, yval, zval: TD3DValue);
procedure GetOldBulletPos;
procedure GetOldEyePos;
 
function HitLinkNr: integer;
function DestroyCollisionObject: boolean;
procedure AddCollisionObject;
function Collision: boolean;
function Bulletcollision: boolean;
function BulletDead : boolean;
 
 
published
 
property BulletRadius : Integer read FBulletRadius write SetBulletRadius
default 0;
property BulletRange : Integer read FbulletRange write SetBulletRange
Default 100;
property CollisionCheckAll: Boolean read FCheckAllCollObj
write FCheckAllCollObj Default true;
property CollOrientation : TOrientation3D read FOrientation3D
write SetOrientation3D default symmetric_y;
property CollObjectType : Tshapes3D read Fshape3D write SetShape3D
default box3D;
property CollObjMaterial : Tmaterials3D read Fmaterial3D write SetMaterial3D
default solid3D;
property CoverWholeMesh : boolean read FNextAllOfMesh
write FNextAllOfMesh default true;
Property Fixed3DObject : boolean read FFixed3DObject
write FFixed3DObject default true;
property FrontDistance : Integer read FFrontDistance
write SetFrontDistance default 0;
property HeadRadius : integer read FHeadRadius write SetHeadRadius
default 0;
property IndexOf3DSeries : integer read FSeriesIndex
write SetIndexOf3DSeries default 0;
property IndexOf3DObject : integer read FIndexOf3DObject
write SetIndexOf3DObject default 0;
property IndexOf3DElement : integer read FIndexOf3DElement
write SetIndexOf3DElement default 0;
property NextDestroyNr : Integer read FNextDestroyNr
write SetNextDestroyNr default 0;
Property PercentLeftAtTop : integer read FPercentLeftAtTop
write SetPercentLeftAtTop default 0;
Property Pickable : Boolean read FPickable write FPickable
default false;
Property Shootable : boolean read FShootable write FShootable
Default false;
Property LongShots : boolean read FLongShots write FLongShots
Default false;
 
 
end; //end of Class
 
 
 
//Registering of the Component
Procedure Register;
 
 
implementation
 
 
 
procedure Register;
begin
//Register the component together with the DelphiX components from Hori
RegisterComponents('DelphiX', [TCollisionTester3DX]);
end; //end of Register
 
 
constructor TCollisionTester3DX.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
//The constructor always clears the storage it allocates for a new object
//Hence there is no need to initialize fields except to nonzero or nonempty
//values
FDXDrawUsed := nil;
FFrameSeries := nil;
FNextAddMesh := nil;
FBulletFrame := nil;
 
FOrientation3D := symmetric_y;
FShape3D := box3D;
FMaterial3D := solid3D;
FBulletRange := 100;
FNrOfSeries := 0;
setlength(FSeriesIndex_for_SeriesNr, 0);
setlength(FColl_nr_objects, 0);
setlength(FNrinFrameSeries, 0);
setlength(Fcoll_shape, 0);
setlength(Fcoll_box_min, 0);
setlength(Fcoll_box_max, 0);
setlength(Fcoll_radius, 0);
setlength(Fcoll_frac_at_top, 0);
setlength(Fcoll_objectnr, 0);
setlength(Fcoll_shootable, 0);
setlength(Fcoll_pickable, 0);
setlength(Fcoll_orientation, 0);
setlength(Fcoll_material, 0);
setlength(Fcoll_Fixed3D, 0);
 
end; //end of creation
 
 
 
 
 
 
 
destructor TCollisionTester3DX.Destroy;
begin
//destroy any embedded objects and free resources allocated by the objects
FnrinFrameSeries := nil;
Fcoll_shape := nil;
Fcoll_box_min := nil;
Fcoll_box_max := nil;
Fcoll_radius := nil;
Fcoll_frac_at_top := nil;
Fcoll_objectnr := nil;
Fcoll_shootable := nil;
Fcoll_pickable := nil;
Fcoll_orientation := nil;
Fcoll_material := nil;
Fcoll_Fixed3D := nil;
FSeriesIndex_for_SeriesNr := nil;
Fcoll_nr_objects := nil;
 
inherited Destroy;
end; //end of Destroy
 
 
 
 
procedure TCollisionTester3DX.ZeroSetIt;
begin
//initialises the dynamic arrays
FnrinFrameSeries := nil;
Fcoll_shape := nil;
Fcoll_box_min := nil;
Fcoll_box_max := nil;
Fcoll_radius := nil;
Fcoll_frac_at_top := nil;
Fcoll_objectnr := nil;
Fcoll_shootable := nil;
Fcoll_pickable := nil;
Fcoll_orientation := nil;
Fcoll_material := nil;
Fcoll_Fixed3D := nil;
FSeriesIndex_for_SeriesNr := nil;
Fcoll_nr_objects := nil;
 
FDXDrawUsed := nil;
FFrameSeries := nil;
FNextAddMesh := nil;
FBulletFrame := nil;
 
FOrientation3D := symmetric_y;
FShape3D := box3D;
FMaterial3D := solid3D;
FBulletRange := 100;
FNrOfSeries := 0;
setlength(FSeriesIndex_for_SeriesNr, 0);
setlength(FColl_nr_objects, 0);
setlength(FNrinFrameSeries, 0);
setlength(Fcoll_shape, 0);
setlength(Fcoll_box_min, 0);
setlength(Fcoll_box_max, 0);
setlength(Fcoll_radius, 0);
setlength(Fcoll_frac_at_top, 0);
setlength(Fcoll_objectnr, 0);
setlength(Fcoll_shootable, 0);
setlength(Fcoll_pickable, 0);
setlength(Fcoll_orientation, 0);
setlength(Fcoll_material, 0);
setlength(Fcoll_Fixed3D, 0);
 
end; //end of ZeroSetIt
 
 
 
 
function TcollisionTester3DX.HitLinkNr: integer;
begin
result := Fbullet_hitlinknr;
end; //end of HitLinkNr
 
 
 
procedure TCollisionTester3DX.ListDataForCollObject;
var
Nr : integer;
begin
Nr := FBullet_HitLinkNr;
 
CollObjectType := Fcoll_shape[FSeriesNr, Nr];
CollObjMaterial := Fcoll_material[FSeriesNr, Nr];
Fixed3DObject := Fcoll_Fixed3D[FSeriesNr, Nr];
CollOrientation := Fcoll_orientation[FSeriesNr, Nr];
IndexOf3DObject := Fcoll_objectNr[FSeriesNr, Nr];
IndexOf3DSeries := FSeriesIndex;
IndexOf3DElement := FNrinFrameSeries[FSeriesNr, Nr];
Pickable := Fcoll_pickable[FSeriesNr, Nr];
Shootable := Fcoll_shootable[FseriesNr, Nr];
 
end; //end of ListDataForCollObject
 
 
 
 
procedure TcollisionTester3DX.SetPercentLeftAtTop(Value : Integer);
begin
//value can not be negative
if (FPercentLeftAtTop <> Value) and (Value >= 0)
then
FPercentLeftAtTop := value;
end; //end of SetPercentLeftAtTop
 
 
 
 
procedure TcollisionTester3DX.SetOrientation3D(Value : TOrientation3D);
begin
if FOrientation3D <> Value
then
FOrientation3D := Value;
end; //end setorientation3D
 
 
procedure TcollisionTester3DX.SetShape3D(Value : Tshapes3D);
begin
if Fshape3D <> Value
then
Fshape3D := Value;
end; //end setshapes3D
 
 
 
procedure TcollisionTester3DX.SetMaterial3D(Value : Tmaterials3D);
begin
if Fmaterial3D <> Value
then
Fmaterial3D := Value;
end; //end setshapes3D
 
 
 
procedure TCollisionTester3DX.SetIndexOf3DObject(Value : integer);
begin
//Index can not be negative
if (FIndexOf3DObject <> Value) and (Value >= 0)
then
FIndexOf3DObject := value;
end; //end setIndexOf3DObject
 
 
procedure TCollisionTester3DX.SetIndexOf3DElement(Value : integer);
begin
//Index can not be negative
if (FIndexOf3DElement <> Value) and (Value >= 0)
then
FIndexOf3DElement := value;
end; //end setIndexOf3DElement
 
 
 
procedure TCollisionTester3DX.SetIndexOf3DSeries(Value : integer);
begin
//Index can not be negative
if (FSeriesIndex <> Value) and (Value >= 0)
then
FSeriesIndex := value;
end; //end of SetIndexOf3DSeries
 
 
 
 
procedure TCollisionTester3DX.SetNextDestroyNr(Value : integer);
begin
//Index can not be negative
if (FNextDestroyNr <> Value) and (Value >= 0)
then
FNextDestroyNr := value;
end; //end of SetNextDestroyNr
 
 
 
 
procedure TCollisionTester3DX.SetBulletRadius(Value : Integer);
begin
//Radius can not be negative
if (FBulletRadius <> Value) and (Value >= 0)
then
FBulletRadius := value;
end; //end of SetBulletRadius
 
 
 
procedure TCollisionTester3DX.SetHeadRadius(Value : Integer);
begin
//Radius can not be negative
if (FHeadRadius <> Value) and (Value >= 0)
then
FHeadRadius := value;
end; //end of SetHeadRadius
 
 
 
 
procedure TCollisionTester3DX.SetFrontDistance(Value : Integer);
begin
//FrontDistance can not be negative
if (FFrontDistance <> Value) and (Value >= 0)
then
FFrontDistance := value;
end; //end of SetFrontDistance
 
 
 
 
procedure TCollisionTester3DX.SetBulletRange(Value : Integer);
begin
//BulletRange can not be negative
if (FBulletRange <> Value) and (Value >= 0)
then
FBulletRange := value;
end; //end of SetBulletRange
 
 
 
 
function TcollisionTester3DX.Add_Space_For_One_More: boolean;
var
NewNr : integer;
begin
//add space for one more element in the present series
 
//length of Fcoll_nr_objects and FSeries_nIndex_for_SeriesNr are unchanged
NewNr := Fcoll_nr_objects[FseriesNr] + 1;
 
result := true;
 
try
SetLength(FNrinFrameSeries[FSeriesNr], NewNr);
SetLength(Fcoll_shape[FSeriesNr], NewNr);
SetLength(Fcoll_box_min[FSeriesNr], NewNr);
SetLength(Fcoll_box_max[FSeriesNr], NewNr);
SetLength(Fcoll_radius[FSeriesNr], NewNr);
SetLength(Fcoll_frac_at_top[FSeriesNr], NewNr);
SetLength(Fcoll_objectnr[FSeriesNr], NewNr);
SetLength(Fcoll_shootable[FSeriesNr], NewNr);
SetLength(Fcoll_pickable[FSeriesNr], NewNr);
SetLength(Fcoll_orientation[FSeriesNr], NewNr);
SetLength(Fcoll_material[FSeriesNr], NewNr);
SetLength(Fcoll_Fixed3D[FSeriesNr], NewNr);
 
except
on EOutOfMemory do
begin
//There is not enough memory available. Free some memory
dec(NewNr);
 
copy(FNrinFrameSeries[FseriesNr], 0, NewNr);
copy(Fcoll_shape[FseriesNr], 0, NewNr);
copy(Fcoll_box_min[FSeriesNr], 0, NewNr);
copy(Fcoll_box_max[FSeriesNr], 0, NewNr);
copy(Fcoll_radius[FSeriesNr], 0, NewNr);
copy(Fcoll_frac_at_top[FSeriesNr], 0, NewNr);
copy(Fcoll_objectnr[FSeriesNr], 0, NewNr);
copy(Fcoll_shootable[FSeriesNr], 0, NewNr);
copy(Fcoll_pickable[FSeriesNr], 0, NewNr);
copy(Fcoll_orientation[FSeriesNr], 0, NewNr);
copy(Fcoll_material[FSeriesNr], 0, NewNr);
copy(Fcoll_Fixed3D[FSeriesNr], 0, NewNr);
 
result := false;
end;
end;
 
//update count of objects in series
Fcoll_nr_objects[FseriesNr] := NewNr;
 
end; //end of Add_Space_For_One_More
 
 
 
 
procedure TcollisionTester3DX.MakeNewSeries;
begin
inc(FNrOfSeries);
 
SetLength(FSeriesIndex_for_SeriesNr, FNrOfSeries);
FSeriesIndex_for_SeriesNr[FNrOfSeries-1] := FSeriesIndex;
 
SetLength(Fcoll_nr_objects, FNrOfSeries);
Fcoll_nr_objects[FNrOfSeries-1] := 0;
 
SetLength(FNrinFrameSeries, FNrOfSeries);
SetLength(Fcoll_shape, FNrOfSeries);
SetLength(Fcoll_box_min, FNrOfSeries);
SetLength(Fcoll_box_max, FNrOfSeries);
SetLength(Fcoll_radius, FNrOfSeries);
SetLength(Fcoll_frac_at_top, FNrOfSeries);
SetLength(Fcoll_objectnr, FNrOfSeries);
SetLength(Fcoll_shootable, FNrOfSeries);
SetLength(Fcoll_pickable, FNrOfSeries);
SetLength(Fcoll_orientation, FNrOfSeries);
SetLength(Fcoll_material, FNrOfSeries);
SetLength(Fcoll_Fixed3D, FNrOfSeries);
end; //end of MakeNewSeries
 
 
 
 
procedure TcollisionTester3DX.Destroy_Empty_Series(SeriesNr : integer);
var
i, j : integer;
begin
if seriesNr < (FNrOfSeries - 1)
then
begin
for i := SeriesNr to (FNrOfSeries - 2) do
begin
FSeriesIndex_for_SeriesNr[i] := FSeriesIndex_for_SeriesNr[i+1];
 
SetLength(FNrinFrameSeries[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
FNrinFrameSeries[i, j] := FNrinFrameSeries[(i+1), j];
 
SetLength(Fcoll_shape[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_shape[i, j] := Fcoll_shape[(i+1), j];
 
SetLength(Fcoll_box_min[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_box_min[i, j] := Fcoll_box_min[(i+1), j];
 
SetLength(Fcoll_box_max[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_box_max[i, j] := Fcoll_box_max[(i+1), j];
 
SetLength(Fcoll_radius[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_radius[i, j] := Fcoll_radius[(i+1), j];
 
SetLength(Fcoll_frac_at_top[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_frac_at_top[i, j] := Fcoll_frac_at_top[(i+1), j];
 
SetLength(Fcoll_objectnr[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_objectNr[i, j] := Fcoll_objectNr[(i+1), j];
 
SetLength(Fcoll_shootable[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_shootable[i, j] := Fcoll_shootable[(i+1), j];
 
SetLength(Fcoll_pickable[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_pickable[i, j] := Fcoll_pickable[(i+1), j];
 
SetLength(Fcoll_orientation[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_orientation[i, j] := Fcoll_orientation[(i+1), j];
 
SetLength(Fcoll_material[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_material[i, j] := Fcoll_material[(i+1), j];
 
SetLength(Fcoll_Fixed3D[i], Fcoll_Nr_objects[i+1]);
for j := 0 to (Fcoll_Nr_objects[i+1] - 1) do
Fcoll_Fixed3D[i, j] := Fcoll_Fixed3D[(i+1), j];
 
Fcoll_nr_objects[i] := Fcoll_nr_objects[i+1];
 
end;
end;
 
dec(FNrOfSeries);
 
FSeriesIndex_For_SeriesNr := copy(FSeriesIndex_for_SeriesNr, 0, FNrOfSeries);
Fcoll_Nr_Objects := copy(Fcoll_Nr_Objects, 0, FNrOfSeries);
FNrinFrameSeries := copy(FNrinFrameSeries, 0, FNrOfSeries);
Fcoll_Shape := copy(Fcoll_Shape, 0, FNrOfSeries);
Fcoll_Box_Min := copy(Fcoll_Box_Min, 0, FNrOfSeries);
Fcoll_Box_Max := copy(Fcoll_Box_Max, 0, FNrOfSeries);
Fcoll_Radius := copy(Fcoll_Radius, 0, FNrOfSeries);
Fcoll_Frac_At_Top := copy(Fcoll_Frac_At_Top, 0, FNrOfSeries);
Fcoll_ObjectNr := copy(Fcoll_ObjectNr, 0, FNrOfSeries);
Fcoll_Shootable := copy(Fcoll_Shootable, 0, FNrOfSeries);
Fcoll_Pickable := copy(Fcoll_Pickable, 0, FNrOfSeries);
Fcoll_orientation := copy(Fcoll_orientation, 0, FNrOfSeries);
Fcoll_Material := copy(Fcoll_Material, 0, FNrOfSeries);
Fcoll_Fixed3D := copy(Fcoll_Fixed3D, 0, FNrOfSeries);
end; //end of Destroy_Empty_Series
 
 
 
 
 
 
 
procedure TcollisionTester3DX.Remove_Collision_Object(SeriesNr, Value : integer);
var
i : integer;
begin
//Elements in the series which have a higher index than the one removed
//gets a smaller index which is correct when the main program removes the object
for i := 0 to (FColl_nr_objects[SeriesNr] - 1) do
begin
if FNrinFrameSeries[SeriesNr, i] >= value
then
dec(FNrinFrameSeries[SeriesNr, i]);
end;
 
for i := Value to (Fcoll_nr_objects[SeriesNr] - 2) do
begin
FNrinFrameSeries[SeriesNr, i] := FNrinFrameSeries[SeriesNr, (i+1)];
Fcoll_shape[SeriesNr, i] := Fcoll_shape[SeriesNr, (i+1)];
Fcoll_box_min[SeriesNr, i] := Fcoll_box_min[SeriesNr, (i+1)];
Fcoll_box_max[SeriesNr, i] := Fcoll_box_max[SeriesNr, (i+1)];
Fcoll_radius[seriesNr, i] := Fcoll_radius[SeriesNr, (i+1)];
Fcoll_frac_at_top[SeriesNr, i] := Fcoll_frac_at_top[SeriesNr, (i+1)];
Fcoll_objectnr[SeriesNr, i] := Fcoll_objectnr[SeriesNr, (i+1)];
Fcoll_shootable[SeriesNr, i] := Fcoll_shootable[SeriesNr, (i+1)];
Fcoll_Pickable[SeriesNr, i] := Fcoll_Pickable[SeriesNr, (i+1)];
Fcoll_orientation[SeriesNr, i] := Fcoll_orientation[SeriesNr, (i+1)];
Fcoll_material[SeriesNr, i] := Fcoll_material[SeriesNr, (i+1)];
Fcoll_Fixed3D[SeriesNr, i] := Fcoll_Fixed3D[SeriesNr, (i+1)];
end;
 
dec(Fcoll_nr_objects[SeriesNr]);
 
//remember to reduce the length of Fcoll_frame
FNrinFrameSeries[SeriesNr] := copy(FNrinFrameSeries[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
Fcoll_shape[SeriesNr] := copy(Fcoll_shape[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
Fcoll_box_min[SeriesNr] := copy(Fcoll_box_min[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
Fcoll_box_max[SeriesNr] := copy(Fcoll_box_max[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
Fcoll_radius[SeriesNr] := copy(Fcoll_radius[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
Fcoll_frac_at_top[SeriesNr] := copy(Fcoll_frac_at_top[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
Fcoll_objectnr[SeriesNr] := copy(Fcoll_objectnr[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
Fcoll_shootable[SeriesNr] := copy(Fcoll_shootable[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
Fcoll_pickable[SeriesNr] := copy(Fcoll_pickable[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
Fcoll_material[SeriesNr] := copy(Fcoll_material[SeriesNr], 0,
Fcoll_nr_objects[FSeriesNr]);
Fcoll_orientation[SeriesNr] := copy(Fcoll_orientation[SeriesNr], 0,
Fcoll_nr_objects[FSeriesNr]);
Fcoll_fixed3D[SeriesNr] := copy(Fcoll_fixed3D[SeriesNr], 0,
Fcoll_nr_objects[SeriesNr]);
 
end; //end of Remove_Collision_Object
 
 
 
 
 
 
 
procedure TCollisionTester3DX.GetTheBox;
var
box: TD3DRMBOX;
begin
if FNextAllOfMesh
then
begin
FNextAddMesh.GetBox(box);
FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := box.min;
FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := box.max;
end
else
begin
FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FBoxPartMin;
FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FBoxPartMax;
end;
 
end; //end of GetTheBox
 
 
 
procedure TCollisionTester3DX.BoxPartMin(xval, yval, zval : TD3DValue);
begin
FBoxPartMin.x := xval;
FBoxPartMin.y := yval;
FBoxPartMin.z := zval;
end; //end of BoxPartMin
 
 
 
 
procedure TCollisionTester3DX.BoxPartMax(xval, yval, zval : TD3DValue);
begin
FBoxPartMax.x := xval;
FBoxPartMax.y := yval;
FBoxPartMax.z := zval;
end; //end of BoxPartMax
 
 
 
 
 
procedure TCollisionTester3DX.AddBox;
begin
if add_space_for_one_more
then
begin
GetTheBox;
 
Fcoll_objectnr[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexOf3DObject;
Fcoll_shape[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := box3D;
FNrinFrameSeries[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexof3Delement;
Fcoll_radius[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := 0; //not used
Fcoll_frac_at_top[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := 0; //not used
Fcoll_material[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fmaterial3D;
Fcoll_orientation[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Forientation3D;
Fcoll_shootable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] -1)] := Fshootable;
Fcoll_Pickable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fpickable;
Fcoll_fixed3D[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FFixed3DObject;
end;
end; //end of AddBox
 
 
 
 
procedure TCollisionTester3DX.AddSphere;
begin
if add_space_for_one_more
then
begin
GetTheBox;
Fcoll_objectnr[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexOf3DObject;
Fcoll_shape[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := sphere3D;
FNrinFrameSeries[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexof3Delement;
Fcoll_radius[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] :=
(FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].x
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].x
+ FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].y
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].y
+ FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].z
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FseriesNr] - 1)].z)/2/3;
Fcoll_frac_at_top[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := 0; //not used
Fcoll_orientation[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Forientation3D;
Fcoll_material[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fmaterial3D;
Fcoll_shootable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fshootable;
Fcoll_Pickable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fpickable;
Fcoll_fixed3D[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FFixed3DObject;
end;
 
end; //end of AddSphere
 
 
 
 
 
procedure TCollisionTester3DX.Addcylinder;
begin
//the sphere cowers whole of the 3D-object
if add_space_for_one_more
then
begin
GetTheBox;
 
Fcoll_objectnr[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexOf3DObject;
Fcoll_shape[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := cylinder3D;
FNrinFrameSeries[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexof3Delement;
case Forientation3D of
symmetric_x : Fcoll_radius[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] :=
(FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].y
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FseriesNr] - 1)].y
+ FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].z
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].z)/2/2;
symmetric_y : Fcoll_radius[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] :=
(FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].x
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FseriesNr] - 1)].x
+ FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].z
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].z)/2/2;
symmetric_z : Fcoll_radius[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] :=
(FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].x
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FseriesNr] - 1)].x
+ FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].y
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].y)/2/2;
end;
 
Fcoll_frac_at_top[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := 0; //not used
Fcoll_orientation[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Forientation3D;
Fcoll_material[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fmaterial3D;
Fcoll_shootable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fshootable;
Fcoll_Pickable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fpickable;
Fcoll_fixed3D[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FFixed3DObject;
end;
end; //end of Addcylinder
 
 
 
 
procedure TCollisionTester3DX.Addconus;
begin
//the conus cowers whole of or part of the 3D-object
//fraction_left_at_top = 0 if sharp tip
if add_space_for_one_more
then
begin
GettheBox;
 
Fcoll_objectnr[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexOf3DObject;
Fcoll_shape[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := conus3D;
FNrinFrameSeries[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexof3Delement;
Fcoll_radius[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] :=
(FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].x
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].x
+ FColl_box_max[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].z
- FColl_box_min[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)].z)/2/2;
Fcoll_frac_at_top[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FPercentLeftAtTop/100;
Fcoll_orientation[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Forientation3D;
Fcoll_material[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fmaterial3D;
Fcoll_shootable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] -1)] := Fshootable;
Fcoll_Pickable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fpickable;
Fcoll_fixed3D[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FFixed3DObject;
end;
end; //end of Addconus
 
 
 
 
procedure TCollisionTester3DX.AddEllipsoid;
begin
if add_space_for_one_more
then
begin
GetTheBox;
Fcoll_objectnr[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexOf3DObject;
Fcoll_shape[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Ellipsoid3D;
FNrinFrameSeries[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FIndexof3Delement;
Fcoll_radius[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := 0; //not used
Fcoll_frac_at_top[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := 0; //not used
Fcoll_orientation[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Forientation3D;
Fcoll_material[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fmaterial3D;
Fcoll_shootable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fshootable;
Fcoll_Pickable[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := Fpickable;
Fcoll_fixed3D[FSeriesNr, (Fcoll_Nr_objects[FSeriesNr] - 1)] := FFixed3DObject;
end;
end; //end of AddEllipsoid
 
 
 
 
 
 
 
function TcollisionTester3DX.GetSeriesNr(Nr : integer): integer;
var
NrNow, i : integer;
begin
 
if FNrOfSeries = 0
then
NrNow := 0
else
begin
NrNow := -1;
for i := 0 to (FNrOfSeries - 1) do
begin
if Nr = FSeriesIndex_for_SeriesNr[i]
then
NrNow := i;
end;
 
if NrNow = -1
then
NrNow := FNrOfSeries; //make new series
end;
 
if NrNow = FNrOfSeries
then
MakeNewSeries;
 
 
result := NrNow;
 
 
end; //end of GetSeriesNr
 
 
 
 
 
function TcollisionTester3DX.CheckForSeriesIndex(indexnow : integer): boolean;
var
i : integer;
begin
 
if FNrOfSeries = 0
then
result := false
else
begin
FSeriesNr := -1;
for i := 0 to (FNrOfSeries - 1) do
begin
if indexnow = FSeriesIndex_for_SeriesNr[i]
then
FSeriesNr := i;
end;
 
result := (FSeriesNr <> -1);
end;
 
end; //end of CheckForSeriesIndex
 
 
 
 
 
procedure TcollisionTester3DX.AddCollisionObject;
begin
FSeriesNr := GetSeriesNr(FSeriesIndex);
 
case Fshape3D of
box3D : AddBox;
sphere3D : AddSphere;
cylinder3D : AddCylinder;
ellipsoid3D: AddEllipsoid;
Conus3D : AddConus;
end;
 
end; //end of AddCollisionObject
 
 
 
 
 
function TCollisionTester3DX.DestroyCollisionObject: boolean;
var
test_nr : integer;
begin
//remove all collision objects connected with the 3D-object
//with the index FnextDestroyNr
 
//Check whether series index exists
if CheckForSeriesIndex(FSeriesIndex)
then
begin
//FSeriesNr was found
test_nr := 0;
 
while (test_nr <= (Fcoll_nr_objects[FSeriesNr] - 1)) do
begin
if Fcoll_objectnr[FSeriesNr, test_nr] = FnextDestroyNr
then
remove_collision_object(FSeriesNr, FnextDestroyNr)
else
inc(test_nr);
end; //end of while loop
 
//now we have to decrement all Fcoll_objectnr values larger than object_nr
//because the main program does a similar decrementation when the 3D-object
//is removed
 
if Fcoll_nr_objects[FSeriesNr] > 0
then
begin
//the series is not empty
for test_nr := 0 to (Fcoll_nr_objects[FSeriesNr] - 1) do
begin
if Fcoll_objectnr[FSeriesNr, test_nr] > FNextDestroyNr
then
dec(Fcoll_objectnr[FSeriesNr, test_nr]);
end;
end
else
destroy_empty_Series(FSeriesNr);
 
 
result := true; //collision object was destroyed
 
end //end of CheckForSeriesIndex...
else
result := false; //unable to destroy
 
end; //end of DestroyCollisionObject
 
 
 
 
 
 
function TcollisionTester3DX.coll_test_sphere(coll_nr : byte;
old_attacker_position, attacker_position : TD3DVector;
bullet_radius : TD3DValue; longshot : boolean): boolean;
var
new_eye, old_eye : TD3DVector;
dstep, step, center : TD3DVector;
radius, d0, d1, d2, rod, rod2, t1, t2 : TD3DValue;
begin
result := false;
//Get the coordinates of the old eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(old_eye, old_attacker_position);
 
//Get the coordinates of the eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(new_eye, attacker_position);
 
center.x := (Fcoll_box_max[FSeriesNr, coll_nr].x
+ Fcoll_box_min[FSeriesNr, coll_nr].x)/2;
center.y := (Fcoll_box_max[FSeriesNr, coll_nr].y
+ Fcoll_box_min[FSeriesNr, coll_nr].y)/2;
center.z := (Fcoll_box_max[FSeriesNr, coll_nr].z
+ Fcoll_box_min[FSeriesNr, coll_nr].z)/2;
 
//radius of sphere enlarged with the radius of the bullet
//to cover the space where a collision may occure
radius := Fcoll_radius[FSeriesNr, coll_nr] + bullet_radius;
 
//eye to center distance
dstep.x := old_eye.x - center.x;
dstep.y := old_eye.y - center.y;
dstep.z := old_eye.z - center.z;
 
//step in eye position
step.x := new_eye.x - old_eye.x;
step.y := new_eye.y - old_eye.y;
step.z := new_eye.z - old_eye.z;
 
//collision is only possible when something moves
if (abs(step.x) < 1e-3) and (abs(step.y) < 1e-3) and (abs(step.z) < 1e-3)
then
begin
result := false;
exit;
end;
 
 
//factors
d0 := sqr(dstep.x) + sqr(dstep.y) + sqr(dstep.z) - sqr(radius);
d1 := 2 * (step.x * dstep.x + step.y * dstep.y + step.z * dstep.z);
d2 := sqr(step.x) + sqr(step.y) + sqr(step.z);
 
//solving an equation of the second degree
rod := sqr(d1) - 4 * d2 * d0;
 
//d2 is never zero
if rod > 0
then
begin
rod2 := sqrt(rod);
t1 := (-d1 - rod2)/2/d2;
t2 := (-d1 + rod2)/2/d2;
 
// if longshot then look into all future
if longshot
then
result := (t1 >= 0) or (t2 >= 0)
else
begin
//collision in between the starting and the ending point if
result := ((t1 >= 0) and (t1 <= 1))
or ((t2 >= 0) and (t2 <= 1));
end;
end;
 
end; //end of coll_test_sphere
 
 
 
 
function TcollisionTester3DX.coll_test_ellipsoid(coll_nr : byte;
old_attacker_position, attacker_position : TD3DVector;
bullet_radius : TD3DValue; longshot : boolean): boolean;
var
new_eye, old_eye : TD3DVector;
dstep, step, center : TD3DVector;
d0, d1, d2, rod, rod2, t1, t2, a, b, c : TD3DValue;
begin
result := false;
 
//Get the coordinates of the old eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(old_eye, old_attacker_position);
 
//Get the coordinates of the eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(new_eye, attacker_position);
 
center.x := (Fcoll_box_max[FSeriesNr, coll_nr].x
+ Fcoll_box_min[FSeriesNr, coll_nr].x)/2;
center.y := (Fcoll_box_max[FSeriesNr, coll_nr].y
+ Fcoll_box_min[FSeriesNr, coll_nr].y)/2;
center.z := (Fcoll_box_max[FSeriesNr, coll_nr].z
+ Fcoll_box_min[FSeriesNr, coll_nr].z)/2;
 
//x, y and z radius of ellipsoid enlarged with the radius of the bullet
//to cover the space where a collision may occure
a := (Fcoll_box_max[FSeriesNr, coll_nr].x
- Fcoll_box_min[FSeriesNr, coll_nr].x)/2 + bullet_radius;
b := (Fcoll_box_max[FSeriesNr, coll_nr].y
- Fcoll_box_min[FSeriesNr, coll_nr].y)/2 + bullet_radius;
c := (Fcoll_box_max[FSeriesNr, coll_nr].z
- Fcoll_box_min[FSeriesNr, coll_nr].z)/2 + bullet_radius;
 
//eye to center distance
dstep.x := old_eye.x - center.x;
dstep.y := old_eye.y - center.y;
dstep.z := old_eye.z - center.z;
 
//step in eye position
step.x := new_eye.x - old_eye.x;
step.y := new_eye.y - old_eye.y;
step.z := new_eye.z - old_eye.z;
 
//collision is only possible when something moves
if (abs(step.x) < 1e-3) and (abs(step.y) < 1e-3) and (abs(step.z) < 1e-3)
then
begin
result := false;
exit;
end;
 
 
//factors
d0 := sqr(b * c * dstep.x) + sqr(a * c * dstep.y) + sqr(a * b * dstep.z)
- sqr(a * b * c);
d1 := 2 * (sqr(b * c) * step.x * dstep.x + sqr(a * c) * step.y * dstep.y
+ sqr(a * b) * step.z * dstep.z);
d2 := sqr(b * c * step.x) + sqr(a * c * step.y) + sqr(a * b * step.z);
 
//solving an equation of the second degree
rod := sqr(d1) - 4 * d2 * d0;
 
//d2 is never zero
if rod > 0
then
begin
rod2 := sqrt(rod);
t1 := (-d1 - rod2)/2/d2;
t2 := (-d1 + rod2)/2/d2;
 
// if longshot then look into all future
if longshot
then
result := (t1 >= 0) or (t2 >= 0)
else
begin
//collision in between the starting and the ending point if
result := ((t1 >= 0) and (t1 <= 1))
or ((t2 >= 0) and (t2 <= 1));
end;
end;
 
end; //end of coll_test_ellipsoid
 
 
 
 
 
function TcollisionTester3DX.coll_test_cylinder(coll_nr : byte;
old_attacker_position, attacker_position : TD3DVector;
bullet_radius : TD3DValue; longshot : boolean): boolean;
var
distance : TD3DValue;
new_eye, old_eye : TD3DVector;
dstep, step, center : TD3DVector;
radius, d0, d1, d2, rod, rod2, t1, t2, xc1, yc1, zc1, xc2, yc2, zc2 : TD3DValue;
begin
result := false;
 
 
//Get the coordinates of the old eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(old_eye, old_attacker_position);
 
//Get the coordinates of the eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(new_eye, attacker_position);
 
center.x := (Fcoll_box_max[FSeriesNr, coll_nr].x
+ Fcoll_box_min[FSeriesNr, coll_nr].x)/2;
center.y := (Fcoll_box_max[FSeriesNr, coll_nr].y
+ Fcoll_box_min[FSeriesNr, coll_nr].y)/2;
center.z := (Fcoll_box_max[FSeriesNr, coll_nr].z
+ Fcoll_box_min[FSeriesNr, coll_nr].z)/2;
 
//radius of sphere enlarged with the radius of the bullet
//to cover the space where a collision may occure
radius := Fcoll_radius[FSeriesNr, coll_nr] + bullet_radius;
 
//eye to center distance
dstep.x := old_eye.x - center.x;
dstep.y := old_eye.y - center.y;
dstep.z := old_eye.z - center.z;
 
//step in eye position
step.x := new_eye.x - old_eye.x;
step.y := new_eye.y - old_eye.y;
step.z := new_eye.z - old_eye.z;
 
//collision is only possible when something moves
if (abs(step.x) < 1e-3) and (abs(step.y) < 1e-3) and (abs(step.z) < 1e-3)
then
begin
result := false;
exit;
end;
 
d0 := 1; //just to avoid warnings
d1 := 1;
d2 := 1;
 
 
//The cylinder is alined parallel to the x, y or z axis
case FOrientation3D of
symmetric_x :
begin
//factors
d0 := sqr(dstep.y) + sqr(dstep.z) - sqr(radius);
d1 := 2 * (step.y * dstep.y + step.z * dstep.z);
d2 := sqr(step.y) + sqr(step.z);
end;
symmetric_y :
begin
//factors
d0 := sqr(dstep.x) + sqr(dstep.z) - sqr(radius);
d1 := 2 * (step.x * dstep.x + step.z * dstep.z);
d2 := sqr(step.x) + sqr(step.z);
end;
symmetric_z :
begin
//factors
d0 := sqr(dstep.x) + sqr(dstep.y) - sqr(radius);
d1 := 2 * (step.x * dstep.x + step.y * dstep.y);
d2 := sqr(step.x) + sqr(step.y);
end;
end; //end of case FOrientation3D of
 
 
//solving an equation of the second degree
rod := sqr(d1) - 4 * d2 * d0;
 
//d2 is never zero
if rod >= 0
then
begin
//only then is the collision possible
rod2 := sqrt(rod);
t1 := (-d1 - rod2)/2/d2;
t2 := (-d1 + rod2)/2/d2;
 
// if longshot then look into all future
if longshot
then
result := (t1 >= 0) or (t2 >= 0)
else
begin
//collision in between the starting and the ending point if
result := ((t1 >= 0) and (t1 <= 1))
or ((t2 >= 0) and (t2 <= 1));
end;
 
// however the collision also affords that we are within the length of the cylinder
if result then
begin
case FOrientation3D of
symmetric_x :
begin
xc1 := old_eye.x + t1 * step.x;
xc2 := old_eye.x + t2 * step.x;
 
 
if longshot
then
result :=
(result and (t1 >= 0) and
(xc1 >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc1 <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) )
or
(result and (t2 >= 0) and
(xc2 >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc2 <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) )
else
result :=
(result and (t1 >= 0) and (t1 <= 1) and
(xc1 >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc1 <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) )
or
(result and (t2 >= 0) and (t2 <= 1) and
(xc2 >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc2 <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) );
 
//if collision detected then exit now
if result then exit;
 
end;
symmetric_y :
begin
yc1 := old_eye.y + t1 * step.y;
yc2 := old_eye.y + t2 * step.y;
 
 
if longshot
then
result :=
(result and (t1 >= 0) and
(yc1 >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc1 <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius)) )
or
(result and (t2 >= 0) and
(yc2 >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc2 <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius)) )
else
result :=
(result and (t1 >= 0) and (t1 <= 1) and
(yc1 >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc1 <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius)) )
or
(result and (t2 >= 0) and (t2 <= 1) and
(yc2 >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc2 <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius)) );
 
//if collision detected then exit now
if result then exit;
 
 
end;
symmetric_z :
begin
zc1 := old_eye.z + t1 * step.z;
zc2 := old_eye.z + t2 * step.z;
 
 
if longshot
then
result :=
(result and (t1 >= 0) and
(zc1 >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc1 <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) )
or
(result and (t2 >= 0) and
(zc2 >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc2 <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) )
else
result :=
(result and (t1 >= 0) and (t1 <= 1) and
(zc1 >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc1 <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) )
or
(result and (t2 >= 0) and (t2 <= 1) and
(zc2 >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc2 <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) );
 
//if collision detected then exit now
if result then exit;
end;
 
end; //end of case
end;
 
//exit if a collision occured
if result then exit;
end;
 
 
//the collision may also occur with the end surfaces of the cylinder
case FOrientation3D of
symmetric_x :
begin
if step.x > 1e-6
then
begin
//1st end surface
t1 := (Fcoll_box_min[FseriesNr, coll_Nr].x - old_eye.x)/step.x;
yc1 := old_eye.y + t1 * step.y;
zc1 := old_eye.z + t1 * step.z;
 
distance := sqrt( sqr(yc1 - center.y) + sqr(zc1 - center.z) );
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
 
//2nd end surface
t1 := (Fcoll_box_max[FseriesNr, coll_Nr].x - old_eye.x)/step.x;
yc1 := old_eye.y + t1 * step.y;
zc1 := old_eye.z + t1 * step.z;
 
distance := sqrt( sqr(yc1 - center.y) + sqr(zc1 - center.z) );
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
end;
end;
symmetric_y :
begin
if step.y > 1e-6
then
begin
//1st end surface
t1 := (Fcoll_box_min[FseriesNr, coll_Nr].y - old_eye.y)/step.y;
xc1 := old_eye.x + t1 * step.x;
zc1 := old_eye.z + t1 * step.z;
 
distance := sqrt( sqr(xc1 - center.x) + sqr(zc1 - center.z) );
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
 
//2nd end surface
t1 := (Fcoll_box_max[FseriesNr, coll_Nr].y - old_eye.y)/step.y;
xc1 := old_eye.x + t1 * step.x;
zc1 := old_eye.z + t1 * step.z;
 
distance := sqrt( sqr(xc1 - center.x) + sqr(zc1 - center.z) );
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
end;
 
end;
symmetric_z :
begin
if step.z > 1e-6
then
begin
//1st end surface
t1 := (Fcoll_box_min[FseriesNr, coll_Nr].z - old_eye.z)/step.z;
xc1 := old_eye.x + t1 * step.x;
yc1 := old_eye.y + t1 * step.y;
 
distance := sqrt( sqr(xc1 - center.x) + sqr(yc1 - center.y) );
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
 
//2nd end surface
t1 := (Fcoll_box_max[FseriesNr, coll_Nr].z - old_eye.z)/step.z;
xc1 := old_eye.x + t1 * step.x;
yc1 := old_eye.y + t1 * step.y;
 
distance := sqrt( sqr(xc1 - center.x) + sqr(yc1 - center.y) );
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
end;
 
end;
 
 
end; //end of case
 
end; //end of coll_test_cylinder
 
 
 
 
 
function TcollisionTester3DX.coll_test_conus(coll_nr : byte;
old_attacker_position, attacker_position : TD3DVector;
bullet_radius : TD3DValue; longshot : boolean): boolean;
var
height3D, width3D : TD3DValue;
distance : TD3DValue;
new_eye, old_eye : TD3DVector;
dstep, step, center : TD3DVector;
radius, d0, d1, d2, rod, rod2, t1, t2, xc1, yc1, zc1, xc2, yc2, zc2 : TD3DValue;
xc, yc, zc, conusfact : TD3DValue;
begin
result := false;
 
//Get the coordinates of the old eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(old_eye, old_attacker_position);
 
//Get the coordinates of the eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(new_eye, attacker_position);
 
center.x := (Fcoll_box_max[FSeriesNr, coll_nr].x
+ Fcoll_box_min[FSeriesNr, coll_nr].x)/2;
center.y := (Fcoll_box_max[FSeriesNr, coll_nr].y
+ Fcoll_box_min[FSeriesNr, coll_nr].y)/2;
center.z := (Fcoll_box_max[FSeriesNr, coll_nr].z
+ Fcoll_box_min[FSeriesNr, coll_nr].z)/2;
 
 
//step in eye position
step.x := new_eye.x - old_eye.x;
step.y := new_eye.y - old_eye.y;
step.z := new_eye.z - old_eye.z;
 
//collision is only possible when something moves
if (abs(step.x) < 1e-3) and (abs(step.y) < 1e-3) and (abs(step.z) < 1e-3)
then
begin
result := false;
exit;
end;
 
//if FPercentLeftatTop is positiv then the conus is largest at the bottom
xc := center.x;
yc := center.y;
zc := center.z;
 
width3D := 10; //just to avoid warnings
height3D := 10;
 
case FOrientation3D of
symmetric_x :
begin
height3D := Fcoll_box_max[FSeriesNr, coll_nr].x
- Fcoll_box_min[FSeriesNr, coll_nr].x;
width3D := (Fcoll_box_max[FSeriesNr, coll_Nr].y
- Fcoll_box_min[FSeriesNr, coll_nr].y
+ Fcoll_box_max[FSeriesNr, coll_nr].z
- Fcoll_box_min[FSeriesNr, coll_nr].z)/2;
 
//the top of the conus is maller than the bottom of it
if FPercentLeftatTop >= 0
then
xc := center.x - height3D/2 + 100 * height3D/(100 - FpercentLeftatTop)
else
xc := center.x + height3D/2 - 100 * height3D/(100 + FpercentLeftatTop);
end; //end of symmetric_x
symmetric_y :
begin
height3D := Fcoll_box_max[FSeriesNr, coll_nr].y
- Fcoll_box_min[FSeriesNr, coll_nr].y;
width3D := (Fcoll_box_max[FSeriesNr, coll_Nr].x
- Fcoll_box_min[FSeriesNr, coll_nr].x
+ Fcoll_box_max[FSeriesNr, coll_nr].z
- Fcoll_box_min[FSeriesNr, coll_nr].z)/2;
 
//the top of the conus is maller than the bottom of it
if FPercentLeftatTop >= 0
then
yc := center.y - height3D/2 + 100 * height3D/(100 - FpercentLeftatTop)
else
yc := center.y + height3D/2 - 100 * height3D/(100 + FpercentLeftatTop);
end; //end of symmetric_y
symmetric_z :
begin
height3D := Fcoll_box_max[FSeriesNr, coll_nr].z
- Fcoll_box_min[FSeriesNr, coll_nr].z;
width3D := (Fcoll_box_max[FSeriesNr, coll_Nr].x
- Fcoll_box_min[FSeriesNr, coll_nr].x
+ Fcoll_box_max[FSeriesNr, coll_nr].y
- Fcoll_box_min[FSeriesNr, coll_nr].y)/2;
 
//the top of the conus is maller than the bottom of it
if FPercentLeftatTop >= 0
then
zc := center.z - height3D/2 + 100 * height3D/(100 - FpercentLeftatTop)
else
zc := center.z + height3D/2 - 100 * height3D/(100 + FpercentLeftatTop);
end; //end of symmetric_z
end; //end of case
 
//mathematically we need the conusfact describing the ratio between the radius of
//the large end of the conus and the height of the conus
if width3D > 0
then
conusfact := height3D/2/width3D
else
conusfact := 1e9;
 
//eye to the fictive tip of the conus distance
dstep.x := old_eye.x - xc;
dstep.y := old_eye.y - yc;
dstep.z := old_eye.z - zc;
 
d0 := 1; //just to avoid warnings
d1 := 1;
d2 := 1;
 
//The conus is aligned parallel to the x, y or z axis
case FOrientation3D of
symmetric_x :
begin
//factors
d0 := sqr(dstep.y) + sqr(dstep.z) - sqr(dstep.x * conusfact);
d1 := 2 * (step.y * dstep.y + step.z * dstep.z
- sqr(conusfact) * step.x * dstep.x);
d2 := sqr(step.y) + sqr(step.z) - sqr(conusfact * step.x);
end;
symmetric_y :
begin
//factors
d0 := sqr(dstep.x) + sqr(dstep.z) - sqr(dstep.y * conusfact);
d1 := 2 * (step.x * dstep.x + step.z * dstep.z
- sqr(conusfact) * step.y * dstep.y);
d2 := sqr(step.x) + sqr(step.z) - sqr(conusfact * step.y);
end;
symmetric_z :
begin
//factors
d0 := sqr(dstep.x) + sqr(dstep.y) - sqr(dstep.z * conusfact);
d1 := 2 * (step.x * dstep.x + step.y * dstep.y
- sqr(conusfact) * step.z * dstep.z);
d2 := sqr(step.x) + sqr(step.y) - sqr(conusfact * step.z);
end;
end; //end of case FOrientation3D of
 
 
//solving an equation of the second degree
rod := sqr(d1) - 4 * d2 * d0;
 
//d2 is never zero
if rod >= 0
then
begin
//only then is the collision possible
rod2 := sqrt(rod);
t1 := (-d1 - rod2)/2/d2;
t2 := (-d1 + rod2)/2/d2;
 
// if longshot then look into all future
if longshot
then
result := (t1 >= 0) or (t2 >= 0)
else
begin
//collision in between the starting and the ending point if
result := ((t1 >= 0) and (t1 <= 1))
or ((t2 >= 0) and (t2 <= 1));
end;
 
// however the collision also affords that we are within the length of the conus
if result then
begin
case FOrientation3D of
symmetric_x :
begin
xc1 := old_eye.x + t1 * step.x;
xc2 := old_eye.x + t2 * step.x;
 
 
if longshot
then
result :=
(result and (t1 >= 0) and
(xc1 >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc1 <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) )
or
(result and (t2 >= 0) and
(xc2 >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc2 <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) )
else
result :=
(result and (t1 >= 0) and (t1 <= 1) and
(xc1 >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc1 <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) )
or
(result and (t2 >= 0) and (t2 <= 1) and
(xc2 >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc2 <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) );
 
//if collision detected then exit now
if result then exit;
 
end;
symmetric_y :
begin
yc1 := old_eye.y + t1 * step.y;
yc2 := old_eye.y + t2 * step.y;
 
 
if longshot
then
result :=
(result and (t1 >= 0) and
(yc1 >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc1 <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius)) )
or
(result and (t2 >= 0) and
(yc2 >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc2 <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius)) )
else
result :=
(result and (t1 >= 0) and (t1 <= 1) and
(yc1 >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc1 <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius)) )
or
(result and (t2 >= 0) and (t2 <= 1) and
(yc2 >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc2 <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius)) );
 
//if collision detected then exit now
if result then exit;
 
 
end;
symmetric_z :
begin
zc1 := old_eye.z + t1 * step.z;
zc2 := old_eye.z + t2 * step.z;
 
 
if longshot
then
result :=
(result and (t1 >= 0) and
(zc1 >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc1 <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) )
or
(result and (t2 >= 0) and
(zc2 >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc2 <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) )
else
result :=
(result and (t1 >= 0) and (t1 <= 1) and
(zc1 >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc1 <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) )
or
(result and (t2 >= 0) and (t2 <= 1) and
(zc2 >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc2 <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) );
 
//if collision detected then exit now
if result then exit;
end;
 
end; //end of case
end;
 
//exit if a collision occured
if result then exit;
end;
 
 
//the collision may also occur with the end surfaces of the cylinder
case FOrientation3D of
symmetric_x :
begin
if step.x > 1e-6
then
begin
//1st end surface
t1 := (Fcoll_box_min[FseriesNr, coll_Nr].x - old_eye.x)/step.x;
yc1 := old_eye.y + t1 * step.y;
zc1 := old_eye.z + t1 * step.z;
 
distance := sqrt( sqr(yc1 - center.y) + sqr(zc1 - center.z) );
 
if FPercentLeftatTop >= 0
then
radius := width3D/2 //the large end of the conus is down
else
radius := -width3D/2 * FPercentLeftatTop;
 
radius := radius + bullet_radius;
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
 
//2nd end surface
t1 := (Fcoll_box_max[FseriesNr, coll_Nr].x - old_eye.x)/step.x;
yc1 := old_eye.y + t1 * step.y;
zc1 := old_eye.z + t1 * step.z;
 
distance := sqrt( sqr(yc1 - center.y) + sqr(zc1 - center.z) );
 
if FPercentLeftatTop >= 0
then
radius := width3D/2 * FPercentLeftatTop //the small end of the conus is upwards
else
radius := width3D/2;
 
radius := radius + bullet_radius;
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
end;
end;
symmetric_y :
begin
if step.y > 1e-6
then
begin
//1st end surface
t1 := (Fcoll_box_min[FseriesNr, coll_Nr].y - old_eye.y)/step.y;
xc1 := old_eye.x + t1 * step.x;
zc1 := old_eye.z + t1 * step.z;
 
distance := sqrt( sqr(xc1 - center.x) + sqr(zc1 - center.z) );
 
if FPercentLeftatTop >= 0
then
radius := width3D/2 //the large end of the conus is down
else
radius := -width3D/2 * FPercentLeftatTop;
 
radius := radius + bullet_radius;
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
 
//2nd end surface
t1 := (Fcoll_box_max[FseriesNr, coll_Nr].y - old_eye.y)/step.y;
xc1 := old_eye.x + t1 * step.x;
zc1 := old_eye.z + t1 * step.z;
 
distance := sqrt( sqr(xc1 - center.x) + sqr(zc1 - center.z) );
 
if FPercentLeftatTop >= 0
then
radius := width3D/2 * FPercentLeftatTop //the small end of the conus is upwards
else
radius := width3D/2;
 
radius := radius + bullet_radius;
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
end;
 
end;
symmetric_z :
begin
if step.z > 1e-6
then
begin
//1st end surface
t1 := (Fcoll_box_min[FseriesNr, coll_Nr].z - old_eye.z)/step.z;
xc1 := old_eye.x + t1 * step.x;
yc1 := old_eye.y + t1 * step.y;
 
distance := sqrt( sqr(xc1 - center.x) + sqr(yc1 - center.y) );
 
if FPercentLeftatTop >= 0
then
radius := width3D/2 //the large end of the conus is down
else
radius := width3D/2 * FPercentLeftatTop;
 
radius := radius + bullet_radius;
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
 
//2nd end surface
t1 := (Fcoll_box_max[FseriesNr, coll_Nr].z - old_eye.z)/step.z;
xc1 := old_eye.x + t1 * step.x;
yc1 := old_eye.y + t1 * step.y;
 
distance := sqrt( sqr(xc1 - center.x) + sqr(yc1 - center.y) );
 
if FPercentLeftatTop >= 0
then
radius := -width3D/2 * FPercentLeftatTop //the small end of the conus is upwards
else
radius := width3D/2;
 
radius := radius + bullet_radius;
 
result := (distance < radius) and (t1 >= 0);
if not longshot then result := result and (t1 <= 1);
if result then exit;
end;
 
end;
 
 
end; //end of case
 
 
end; //end of coll_test_conus
 
 
 
 
function TcollisionTester3DX.coll_test_box(coll_nr : byte;
old_attacker_position, attacker_position : TD3DVector;
bullet_radius : TD3DValue; longshot : boolean): boolean;
var
new_eye, old_eye : TD3DVector;
step : TD3DVector;
t1, xc, yc, zc : TD3DValue;
begin
result := false;
 
//Get the coordinates of the old eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(old_eye, old_attacker_position);
 
//Get the coordinates of the eye_position in the actual coll frame
FFrameSeries[FSeriesIndex, FNrinFrameSeries[FSeriesNr, coll_nr]].InverseTransform
(new_eye, attacker_position);
 
//step in eye position
step.x := new_eye.x - old_eye.x;
step.y := new_eye.y - old_eye.y;
step.z := new_eye.z - old_eye.z;
 
//collision is only possible when something moves
if (abs(step.x) < 1e-3) and (abs(step.y) < 1e-3) and (abs(step.z) < 1e-3)
then
begin
result := false;
exit;
end;
 
//check the surfaces which are normal to the x-axis
if abs(step.x) >= 1E-6
then
begin
//test 1st surface
t1 := (Fcoll_box_min[FseriesNr, coll_nr].x - old_eye.x)/step.x;
//collision point
zc := old_eye.z + t1 * step.z;
yc := old_eye.y + t1 * step.y;
 
//collision if the collision point is close enough to the surface
result :=
(zc >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) and
(yc >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius));
 
if longshot
then result := result and (t1 >= 0)
else result := result and (t1 >= 0) and (t1 <= 1);
 
//if collision detected then exit now
if result then exit;
 
//test 2nd surface
t1 := (Fcoll_box_max[FseriesNr, coll_nr].x - old_eye.x)/step.x;
//collision point
zc := old_eye.z + t1 * step.z;
yc := old_eye.y + t1 * step.y;
 
//collision if the collision point is close enough to the surface
result :=
(zc >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius)) and
(yc >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius));
 
if longshot
then result := result and (t1 >= 0)
else result := result and (t1 >= 0) and (t1 <= 1);
 
//if collision detected then exit now
if result then exit;
 
end; //end of step.x <> 0
 
 
//check the surfaces which are normal to the y-axis
if abs(step.y) >= 1E-6
then
begin
//test 1st surface
t1 := (Fcoll_box_min[FseriesNr, coll_nr].y - old_eye.y)/step.y;
//collision point
xc := old_eye.x + t1 * step.x;
zc := old_eye.z + t1 * step.z;
 
//collision if the collision point is close enough to the surface
result :=
(xc >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) and
(zc >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius));
 
if longshot
then result := result and (t1 >= 0)
else result := result and (t1 >= 0) and (t1 <= 1);
 
//if collision detected then exit now
if result then exit;
 
//test 2nd surface
t1 := (Fcoll_box_max[FseriesNr, coll_nr].y - old_eye.y)/step.y;
//collision point
xc := old_eye.x + t1 * step.x;
zc := old_eye.z + t1 * step.z;
 
//collision if the collision point is close enough to the surface
result :=
(xc >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) and
(zc >= (Fcoll_box_min[FseriesNr, coll_nr].z - bullet_radius)) and
(zc <= (Fcoll_box_max[FseriesNr, coll_nr].z + bullet_radius));
 
if longshot
then result := result and (t1 >= 0)
else result := result and (t1 >= 0) and (t1 <= 1);
 
//if collision detected then exit now
if result then exit;
 
end; //end of step.y <> 0
 
 
 
//check the surfaces which are normal to the z-axis
if abs(step.z) >= 1E-6
then
begin
//test 1st surface
t1 := (Fcoll_box_min[FseriesNr, coll_nr].z - old_eye.z)/step.z;
//collision point
xc := old_eye.x + t1 * step.x;
yc := old_eye.y + t1 * step.y;
 
//collision if the collision point is close enough to the surface
result :=
(xc >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) and
(yc >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius));
 
if longshot
then result := result and (t1 >= 0)
else result := result and (t1 >= 0) and (t1 <= 1);
 
//if collision detected then exit now
if result then exit;
 
//test 2nd surface
t1 := (Fcoll_box_max[FseriesNr, coll_nr].z - old_eye.z)/step.z;
//collision point
xc := old_eye.x + t1 * step.x;
yc := old_eye.y + t1 * step.y;
 
//collision if the collision point is close enough to the surface
result :=
(xc >= (Fcoll_box_min[FseriesNr, coll_nr].x - bullet_radius)) and
(xc <= (Fcoll_box_max[FseriesNr, coll_nr].x + bullet_radius)) and
(yc >= (Fcoll_box_min[FseriesNr, coll_nr].y - bullet_radius)) and
(yc <= (Fcoll_box_max[FseriesNr, coll_nr].y + bullet_radius));
 
if longshot
then result := result and (t1 >= 0)
else result := result and (t1 >= 0) and (t1 <= 1);
 
//if collision detected then exit now
if result then exit;
 
end; //end of step.z <> 0
 
 
end; //end of coll_test_box
 
 
 
 
 
 
function TCollisionTester3DX.BulletDead:boolean;
var
camera_position, bullet_position : TD3DVector;
Distance : TD3DValue;
begin
FBulletFrame.GetPosition(FDXDrawUsed.Scene, bullet_position);
FDXDrawUsed.Camera.GetPosition(FDXDrawUsed.Scene, camera_position);
 
Distance := sqr(Bullet_position.x - camera_position.x)
+ sqr(Bullet_position.y - camera_position.y)
+ sqr(Bullet_position.z - camera_position.z);
 
//remove the bullet if it is beyond the bulletrange or if it is a longshot
result := (sqrt(Distance) > FBulletRange) or FLongShots;
 
end; //end of BulletDead
 
 
 
 
//use this function to check whether the camera or an object in a distance of
// -from camera- from the camera collides with any collision object
function TCollisionTester3DX.collision: boolean;
var
i : integer;
camera_position, camera_direction, camera_up : TD3DVECTOR;
eye_position : TD3DVector;
begin
Result := false;
FBullet_HitlinkNr := -1;
 
if CheckForSeriesIndex(FSeriesIndex)
then
begin
//The series exists
if Fcoll_Nr_objects[FSeriesNr] > 0
then
begin
//The series is not empty
 
//Get the position of the camera
FDXDrawUsed.Camera.GetPosition(FDXDrawUsed.Scene, camera_position);
FDXDrawUsed.camera.GetOrientation(FDXDrawUsed.scene, camera_direction, camera_up);
//calculate the eye position
eye_position.x := camera_position.x + FFrontDistance * camera_direction.x;
eye_position.y := camera_position.y + FFrontDistance * camera_direction.y;
eye_position.z := camera_position.z + FFrontDistance * camera_direction.z;
 
//test whether the eye collides with any of the collision objects
i := 0;
while (not result) and (i < Fcoll_nr_objects[FSeriesNr]) do //0..
begin
case Fcoll_shape[FSeriesNr, i] of
box3D : Result := coll_test_box(i, FOldEyePosition,
eye_position, FHeadRadius, false);
sphere3D : Result := coll_test_sphere(i, FOldEyePosition,
eye_position, FHeadRadius, false);
cylinder3D : Result := coll_test_cylinder(i, FOldEyePosition,
eye_position, FHeadRadius, false);
ellipsoid3D: Result := coll_test_ellipsoid(i, FOldEyePosition,
eye_position, FHeadRadius, false);
conus3D : Result := coll_test_conus(i, FOldEyePosition,
eye_position, FHeadRadius, false);
end;
 
if result then Fbullet_hitLinkNr := Fcoll_objectnr[FseriesNr, i];
inc(i);
end;
end;
end; //end of if checkforseriesIndex
 
if result
then
ListDataForCollObject;
 
end; //end of collision
 
 
 
 
 
 
 
//use this function to check whether an object sent from the camera collides
//with any collision object
function TCollisionTester3DX.BulletCollision: boolean;
var
i: integer;
bullet_position : TD3DVector;
begin
Result := false;
FBullet_HitLinkNr := -1;
 
if checkForSeriesIndex(FSeriesIndex)
then
begin
//Series exists
 
//test whether eye collides with any of the collision objects
if Fcoll_Nr_objects[FSeriesNr] > 0
then
begin
//Get position of the bullet
FBulletFrame.GetPosition(FDXDrawUsed.Scene, bullet_position);
i := 0;
 
while (not result) and (i < Fcoll_Nr_objects[FSeriesNr]) do //0..
begin
if FColl_Shootable[FseriesNr, i] or
(FColl_material[FSeriesNr, i] = solid3D)
then
begin
case Fcoll_shape[FSeriesNr, i] of
box3D : result := coll_test_box(i, FOldBulletPosition,
bullet_position,
FBulletRadius, FLongShots);
sphere3D : result := coll_test_sphere(i, FOldBulletPosition,
bullet_position,
FBulletRadius, FLongShots);
cylinder3D : result := coll_test_cylinder(i, FOldBulletPosition,
bullet_position,
FBulletRadius, FLongShots);
ellipsoid3D: result := coll_test_ellipsoid(i, FOldBulletPosition,
bullet_position,
FBulletRadius, FLongShots);
conus3D : result := coll_test_conus(i, FOldBulletPosition,
bullet_position,
FBulletRadius, FLongShots);
end; //end case
end; //end of if..
 
if result
then
FBullet_HitLinkNr := Fcoll_ObjectNr[FSeriesNr, i];
 
inc(i);
end; //end of while
 
if result
then
ListDataForCollObject;
 
end; //end if Fcoll_Nr_ob....
end; //end if checkForSeriesIndex...
 
end; //end of bullet_collision
 
 
 
 
procedure TCollisionTester3DX.GetOldBulletPos;
begin
FbulletFrame.GetPosition(FDXDrawUsed.Scene, FOldBulletPosition);
end; //end of GetOldBulletPos
 
 
procedure TCollisionTester3DX.GetOldEyePos;
var
OldPos, camera_direction, camera_up : TD3DVector;
begin
FDXDrawUsed.Camera.GetPosition(FDXDrawUsed.Scene, OldPos);
FDXDrawUsed.Camera.GetOrientation(FDXDrawUsed.Scene, camera_direction, camera_up);
 
FOldEyePosition.x := OldPos.x + FFrontDistance * camera_direction.x;
FOldEyePosition.y := OldPos.y + FFrontDistance * camera_direction.y;
FOldEyePosition.z := OldPos.z + FFrontDistance * camera_direction.z;
 
end; //end of GetOldEyePos
 
 
 
 
 
 
end.
/VCL_DELPHIX_D6/D3DUtils.pas
0,0 → 1,1317
unit D3DUtils;
 
interface
 
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, Math,
{$IFDEF StandardDX}
{$IFDEF VER14UP} DXTypes, {$ENDIF} Direct3D, DirectDraw;
{$ELSE}
DirectX;
{$ENDIF}
 
const
g_PI = 3.14159265358979323846; // Pi
g_Uhel = g_PI / 180;
g_2_PI = 6.28318530717958623200; // 2 * Pi
g_PI_DIV_2 = 1.57079632679489655800; // Pi / 2
g_PI_DIV_4 = 0.78539816339744827900; // Pi / 4
g_INV_PI = 0.31830988618379069122; // 1 / Pi
g_DEGTORAD = 0.01745329251994329547; // Degrees to Radians
g_RADTODEG = 57.29577951308232286465; // Radians to Degrees
g_HUGE = 1.0E+38; // Huge number for FLOAT
g_EPSILON = 1.0E-5; // Tolerance for FLOATs
 
type
TD2DVector = packed record
X, Y: Single;
end;
TD3DHVector = packed record
X, Y, Z, W: Single;
end;
TQuaternion = packed record
case Integer of
0: (X, Y, Z, W: Single); //like TD3DHVector
1: (
V: TD3DVector;
);
end;
function ProjectionMatrix(near_plane, far_plane, fov_horiz, fov_vert: real): TD3DMatrix; {$IFDEF VER9UP}inline; {$ENDIF}
//--------------------------
// 3D Vector
//--------------------------
function MakeD3DVector(x, y, z: TD3DValue): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function MakeD2DVector(x, y: TD3DValue): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function MakeD3DVertex(hv, nv: TD3DVector; tu, tv: TD3DValue): TD3DVertex; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function MakeD3DVertex(hx, hy, hz, nx, ny, nz, tu, tv: TD3DValue): TD3DVertex; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function MakeD3DLVertex(hv: TD3DVector; col, sp: DWORD; tu, tv: TD3DValue): TD3DLVertex; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function MakeD3DLVertex(hx, hy, hz: TD3DValue; col, sp: DWORD; tu, tv: TD3DValue): TD3DLVertex; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function MakeD3DTLVertex(hx, hy, hz, rhw: TD3DValue; col, sp: DWORD; tu, tv: TD3DValue): TD3DTLVERTEX; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function MakeD3DTLVertex(hv: TD3DVector; rhw: TD3DValue; col, sp: DWORD; tu, tv: TD3DValue): TD3DTLVERTEX; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function Vector2RGBA(const v: TD3DVector; fHeight: Single): DWord; {$IFDEF VER9UP}inline; {$ENDIF}
function VectorToRGB(NormalVector: TD3DVector): DWORD; {$IFDEF VER9UP}inline; {$ENDIF}
//--------------------------
// 3D Vector
//--------------------------
function Quaternion(_w, _x, _y, _z: Single): TQuaternion;
function QuaternionLength(const a: TQuaternion): Single;
function QuaternionNormalize(const a: TQuaternion): TQuaternion;
 
function D3DMath_VecNormalize(const v: TD3DVector): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_VecViewScreenize(const v: TD3DHVector): TD3DHVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_VecHeterogenize(const hv: TD3DHVector; _div: Boolean{$IFDEF VER4UP} = False{$ENDIF}): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_VecHomogenize(const v: TD3DVector): TD3DHVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_VecTransform(const a: TD3DHVector; const m: TD3DMATRIX): TD3DHVector; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_VecTransform(const a: TD3DVector; const m: TD3DMATRIX): TD3DVector; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3Length(const v: TD3DVector): TD3DValue; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3LengthSq(const v: TD3DVector): TD3DValue; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3Dot(const v1, v2: TD3DVector): TD3DValue; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3Cross(const v1, v2: TD3DVector): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3Add(const v1, v2: TD3DVector): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3Subtract(const v1, v2: TD3DVector): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3Minimize(const v1, v2: TD3DVector): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3Maximize(const v1, v2: TD3DVector): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3Scale(const v: TD3DVector; const s: TD3DValue): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_Vec3Lerp(out vOut: TD3DVector; const v1, v2: TD3DVector; const s: TD3DValue): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
 
function D3DMath_IsZero(a: Double; fTol: Double { = g_EPSILON}): Boolean; {$IFDEF VER9UP}inline; {$ENDIF}
 
procedure D3DMath_QuaternionFromRotation(var x, y, z, w: Double; const v: TD3DVector; fTheta: Double); overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_QuaternionFromRotation(const axis: TD3DVector; const r: Double): TQuaternion; overload; {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DMath_RotationFromQuaternion(var v: TD3DVector; var fTheta: Double; x, y, z, w: Double); {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DMath_QuaternionFromAngles(var x, y, z, w: Double; fYaw, fPitch, fRoll: Double); {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DMath_MatrixFromQuaternion(var mat: TD3DMatrix; x, y, z, w: Double); overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_MatrixFromQuaternion(q: TQuaternion): TD3DMatrix; overload; {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DMath_QuaternionFromMatrix(var x, y, z, w: Double; var mat: TD3DMatrix); {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DMath_QuaternionMultiply(var Qx, Qy, Qz, Qw: Double; Ax, Ay, Az, Aw, Bx, By, Bz, Bw: Double); overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_QuaternionMultiply(a, b: TQuaternion): TQuaternion; overload; {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DMath_QuaternionSlerp(var Qx, Qy, Qz, Qw: Double; Ax, Ay, Az, Aw, Bx, By, Bz, Bw, fAlpha: Double); overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_QuaternionSlerp(A, B: TQuaternion; fAlpha: Double): TQuaternion; overload; {$IFDEF VER9UP}inline; {$ENDIF}
 
procedure D3DUtil_InitSurfaceDesc(var ddsd: TDDSurfaceDesc2; dwFlags, dwCaps: DWORD); {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DUtil_InitMaterial(var mtrl: TD3DMaterial7; r, g, b, a: Double); {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DUtil_InitLight(var light: TD3DLight7; ltType: TD3DLightType; x, y, z: Double); {$IFDEF VER9UP}inline; {$ENDIF}
 
procedure D3DMath_MatrixMultiply(var q: TD3DMatrix; const a, b: TD3DMatrix); overload;
function D3DMath_MatrixMultiply(const a, b: TD3DMatrix): TD3DMatrix; overload;
function D3DMath_MatrixInvert(var q: TD3DMatrix; const a: TD3DMatrix): HResult; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_MatrixInvert(const a: TD3DMatrix): TD3DMatrix; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_VectorMatrixMultiply(var vDest: TD3DVector; const vSrc: TD3DVector; const mat: TD3DMatrix): HResult; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DMath_VertexMatrixMultiply(var vDest: TD3DVertex; const vSrc: TD3DVertex; const mat: TD3DMatrix): HResult; {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DUtil_SetIdentityMatrix(out m: TD3DMatrix); overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetIdentityMatrix: TD3DMatrix; overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetScaleMatrix(const x, y, z: Single): TD3DMatrix; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetViewMatrix(var mat: TD3DMatrix; const vFrom, vAt, vWorldUp: TD3DVector): HResult; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetProjectionMatrix(var mat: TD3DMatrix; fFOV, fAspect, fNearPlane, fFarPlane: Double): HResult; {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DUtil_SetRotateXMatrix(var mat: TD3DMatrix; fRads: Double); overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetRotateXMatrix(fRads: Double): TD3DMatrix; overload; {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DUtil_SetRotateYMatrix(var mat: TD3DMatrix; fRads: Double); overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetRotateYMatrix(fRads: Double): TD3DMatrix; overload; {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DUtil_SetRotateZMatrix(var mat: TD3DMatrix; fRads: Double); overload; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetRotateZMatrix(fRads: Double): TD3DMatrix; overload; {$IFDEF VER9UP}inline; {$ENDIF}
procedure D3DUtil_SetRotationMatrix(var mat: TD3DMatrix; var vDir: TD3DVector; fRads: Double); {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetRotationMatrixByX(const a: TD3DVector; const r: Double): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetRotationMatrixByY(const a: TD3DVector; const r: Double): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DUtil_SetRotationMatrixByZ(const a: TD3DVector; const r: Double): TD3DVector; {$IFDEF VER9UP}inline; {$ENDIF}
 
function D3DCOLOR_ARGB(a, r, g, b: Cardinal): TD3DColor; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DCOLOR_RGBA(r, g, b, a: Cardinal): TD3DColor; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DCOLOR_XRGB(r, g, b: Cardinal): TD3DColor; {$IFDEF VER9UP}inline; {$ENDIF}
function D3DCOLOR_COLORVALUE(r, g, b, a: Single): TD3DColor; {$IFDEF VER9UP}inline; {$ENDIF}
 
// simple D2D operation
 
function D2DMath_VecAdd(const a: TD2DVector; const b: TD2DVector): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecSub(const a: TD2DVector; const b: TD2DVector): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecDotProduct(const a, b: TD2DVector): Single; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecDistance(const a, b: TD2DVector): Single; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecLength(const a: TD2DVector): Single; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecNormalize(const a: TD2DVector): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecToAngle(const a: TD2DVector): Double; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecRot(const a: TD2DVector; const angle: Double): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecScale(const a: TD2DVector; const scale: Double): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecChangeLength(const a: TD2DVector; const k: Single): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecLookAt(const pos: TD2DVector; const target: TD2DVector; const k: Single): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
function D2DMath_VecRandom2D(const k: Single): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
 
function D2DMath_VecLerp(const a: TD2DVector; const b: TD2DVector; const rate: Single): TD2DVector; {$IFDEF VER9UP}inline; {$ENDIF}
 
implementation
 
//function RSin(val: Integer): Double; {$IFDEF VER9UP}inline; {$ENDIF}
//begin
// Result := Sin(val / 2048.0 * Pi);
//end;
//
//function RCos(val: Integer): Double; {$IFDEF VER9UP}inline; {$ENDIF}
//begin
// Result := Cos(val / 2048.0 * Pi);
//end;
 
function Quaternion(_w, _x, _y, _z: Single): TQuaternion;
begin
Result.W := _w;
Result.X := _x;
Result.Y := _y;
Result.Z := _z;
end;
 
function QuaternionLength(const a: TQuaternion): Single;
begin
Result := Sqrt(a.w * a.w + a.x * a.x + a.y * a.y + a.z * a.z);
end;
 
function QuaternionNormalize(const a: TQuaternion): TQuaternion;
var
len: Single;
begin
len := QuaternionLength(a);
if len = 0.0 then
begin
Result := Quaternion(1, 0, 0, 0);
Exit;
end;
Result.x := a.X / len;
Result.y := a.Y / len;
Result.z := a.Z / len;
Result.w := a.W / len;
end;
 
function GetMatrixFromQuaternion(const a: TQuaternion): TD3DMatrix;
begin
 
end;
 
 
function D3DCOLOR_ARGB(a, r, g, b: Cardinal): TD3DColor;
begin
Result := (a shl 24) or (r shl 16) or (g shl 8) or b;
end;
 
function D3DCOLOR_RGBA(r, g, b, a: Cardinal): TD3DColor;
begin
Result := D3DCOLOR_ARGB(a, r, g, b);
end;
 
function D3DCOLOR_XRGB(r, g, b: Cardinal): TD3DColor;
begin
Result := D3DCOLOR_ARGB($FF, r, g, b);
end;
 
function D3DCOLOR_COLORVALUE(r, g, b, a: Single): TD3DColor;
begin
Result := D3DCOLOR_RGBA(Byte(Round(r * 255)), Byte(Round(g * 255)), Byte(Round(b * 255)), Byte(Round(a * 255)))
end;
 
function MakeD3DVector(x, y, z: TD3DValue): TD3DVector;
begin
Result.x := x;
Result.y := y;
Result.z := z;
end;
 
function MakeD2DVector(x, y: TD3DValue): TD2DVector;
begin
Result.x := x;
Result.y := y;
end;
 
function MakeD3DVertex(hv, nv: TD3DVector; tu, tv: TD3DValue): TD3DVertex;
begin
Result.x := hv.x;
Result.y := hv.y;
Result.z := hv.z;
Result.nx := nv.x;
Result.ny := nv.y;
Result.nz := nv.z;
Result.tu := tu;
Result.tv := tv;
end;
 
function MakeD3DVertex(hx, hy, hz, nx, ny, nz, tu, tv: TD3DValue): TD3DVertex;
begin
Result.x := hx;
Result.y := hy;
Result.z := hz;
Result.nx := nx;
Result.ny := ny;
Result.nz := nz;
Result.tu := tu;
Result.tv := tv;
end;
 
function MakeD3DLVertex(hv: TD3DVector; col, sp: DWORD; tu, tv: TD3DValue): TD3DLVertex;
begin
FillChar(Result, SizeOf(Result), 0);
Result.x := hv.x;
Result.y := hv.y;
Result.z := hv.z;
Result.color := col;
Result.specular := sp;
Result.tu := tu;
Result.tv := tv;
end;
 
function MakeD3DLVertex(hx, hy, hz: TD3DValue; col, sp: DWORD; tu, tv: TD3DValue): TD3DLVertex;
begin
FillChar(Result, SizeOf(Result), 0);
Result.x := hx;
Result.y := hy;
Result.z := hz;
Result.color := col;
Result.specular := sp;
Result.tu := tu;
Result.tv := tv;
end;
 
function MakeD3DTLVertex(hx, hy, hz, rhw: TD3DValue; col, sp: DWORD; tu, tv: TD3DValue): TD3DTLVERTEX;
begin
Result.sx := hx;
Result.sy := hy;
Result.sz := hz;
Result.dvRHW := rhw;
Result.color := col;
Result.specular := sp;
Result.tu := tu;
Result.tv := tv;
end;
 
function MakeD3DTLVertex(hv: TD3DVector; rhw: TD3DValue; col, sp: DWORD; tu, tv: TD3DValue): TD3DTLVERTEX;
begin
Result.sx := hv.x;
Result.sy := hv.y;
Result.sz := hv.z;
Result.dvRHW := rhw;
Result.color := col;
Result.specular := sp;
Result.tu := tu;
Result.tv := tv;
end;
 
function Vector2RGBA(const v: TD3DVector; fHeight: Single): DWord;
var
r, g, b, a: DWord;
begin
r := Round(127.0 * v.x + 128.0);
g := Round(127.0 * v.y + 128.0);
b := Round(127.0 * v.z + 128.0);
a := Round(255.0 * fHeight);
Result := ((a shl 24) + (r shl 16) + (g shl 8) + (b shl 0));
end;
 
function VectorToRGB(NormalVector: TD3DVector): DWORD;
var dwR, dwG, dwB: DWORD;
begin
dwR := Round(127 * NormalVector.x + 128);
dwG := Round(127 * NormalVector.y + 128);
dwB := Round(127 * NormalVector.z + 128);
Result := $FF000000 + dwR shl 16 + dwG shl 8 + dwB;
end;
 
function ProjectionMatrix(near_plane, // distance to near clipping plane
far_plane, // distance to far clipping plane
fov_horiz, // horizontal field of view angle, in radians
fov_vert: real): TD3DMatrix; // vertical field of view angle, in radians
var h, w, Q: real;
begin
Fov_horiz := g_Uhel * Fov_horiz;
Fov_Vert := g_Uhel * Fov_Vert;
 
w := cotan(fov_horiz * 0.5);
h := cotan(fov_vert * 0.5);
Q := far_plane / (far_plane - near_plane);
 
result._11 := w;
result._22 := h;
result._33 := Q;
result._43 := -Q * near_plane;
result._34 := 1;
end;
// end of ProjectionMatrix()
 
//--------------------------
// 3D Vector
//--------------------------
 
function D3DMath_VecNormalize(const v: TD3DVector): TD3DVector;
var
len: Single;
begin
len := D3DMath_Vec3Length(v);
if len = 0 then
FillChar(Result, SizeOf(Result), 0)
else
begin
Result.X := v.X / len;
Result.Y := v.Y / len;
Result.Z := v.Z / len;
end;
end;
 
function D3DMath_VecViewScreenize(const v: TD3DHVector): TD3DHVector;
begin
with Result do
begin
if v.W <> 0.0 then
begin
W := 1.0 / v.W;
X := v.X * W;
Y := v.Y * W;
Z := v.Z * W;
end;
end;
end;
 
function D3DMath_VecHeterogenize(const hv: TD3DHVector; _div: Boolean): TD3DVector;
var
d: Single;
begin
if not _div then
begin
Result.x := hv.X;
Result.y := hv.Y;
Result.z := hv.Z;
end
else
begin
d := 1.0 / hv.w;
Result.x := hv.x * d;
Result.y := hv.y * d;
Result.z := hv.z * d;
end;
end;
 
function D3DMath_VecHomogenize(const v: TD3DVector): TD3DHVector;
begin
Move(v, result, Sizeof(TD3DVector));
result.W := 1.0;
end;
 
function D3DMath_VecTransform(const a: TD3DHVector; const m: TD3DMATRIX): TD3DHVector;
begin
result.X := a.X * m._11 + a.Y * m._21 + a.Z * m._31 + a.W * m._41;
result.Y := a.X * m._12 + a.Y * m._22 + a.Z * m._32 + a.W * m._42;
result.Z := a.X * m._13 + a.Y * m._23 + a.Z * m._33 + a.W * m._43;
result.W := a.X * m._14 + a.Y * m._24 + a.Z * m._34 + a.W * m._44;
end;
 
function D3DMath_VecTransform(const a: TD3DVector; const m: TD3DMATRIX): TD3DVector;
begin
result.X := a.X * m._11 + a.Y * m._21 + a.Z * m._31 + m._41;
result.Y := a.X * m._12 + a.Y * m._22 + a.Z * m._32 + m._42;
result.Z := a.X * m._13 + a.Y * m._23 + a.Z * m._33 + m._43;
end;
 
function D3DMath_Vec3Length(const v: TD3DVector): TD3DValue;
begin
with v do Result := Sqrt(Sqr(x) + Sqr(y) + Sqr(z));
end;
 
function D3DMath_Vec3LengthSq(const v: TD3DVector): TD3DValue;
begin
with v do Result := Sqr(x) + Sqr(y) + Sqr(z);
end;
 
function D3DMath_Vec3Dot(const v1, v2: TD3DVector): TD3DValue;
begin
Result := v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
end;
 
function D3DMath_Vec3Cross(const v1, v2: TD3DVector): TD3DVector;
begin
Result.x := v1.y * v2.z - v1.z * v2.y;
Result.y := v1.z * v2.x - v1.x * v2.z;
Result.z := v1.x * v2.y - v1.y * v2.x;
end;
 
function D3DMath_Vec3Add(const v1, v2: TD3DVector): TD3DVector;
begin
Result.x := v1.x + v2.x;
Result.y := v1.y + v2.y;
Result.z := v1.z + v2.z;
end;
 
function D3DMath_Vec3Subtract(const v1, v2: TD3DVector): TD3DVector;
begin
Result.x := v1.x - v2.x;
Result.y := v1.y - v2.y;
Result.z := v1.z - v2.z;
end;
 
// Minimize each component. x = min(x1, x2), y = min(y1, y2)
 
function D3DMath_Vec3Minimize(const v1, v2: TD3DVector): TD3DVector;
begin
if v1.x < v2.x then Result.x := v1.x else Result.x := v2.x;
if v1.y < v2.y then Result.y := v1.y else Result.y := v2.y;
if v1.z < v2.z then Result.z := v1.z else Result.z := v2.z;
end;
 
// Maximize each component. x = max(x1, x2), y = max(y1, y2)
 
function D3DMath_Vec3Maximize(const v1, v2: TD3DVector): TD3DVector;
begin
if v1.x > v2.x then Result.x := v1.x else Result.x := v2.x;
if v1.y > v2.y then Result.y := v1.y else Result.y := v2.y;
if v1.z > v2.z then Result.z := v1.z else Result.z := v2.z;
end;
 
function D3DMath_Vec3Scale(const v: TD3DVector; const s: TD3DValue): TD3DVector;
begin
Result.x := v.x * s;
Result.y := v.y * s;
Result.z := v.z * s;
end;
 
// Linear interpolation. V1 + s(V2-V1)
 
function D3DMath_Vec3Lerp(out vOut: TD3DVector; const v1, v2: TD3DVector; const s: TD3DValue): TD3DVector;
begin
Result.x := v1.x + s * (v2.x - v1.x);
Result.y := v1.y + s * (v2.y - v1.y);
Result.z := v1.z + s * (v2.z - v1.z);
end;
 
//-----------------------------------------------------------------------------
// File: D3DMath.cpp
//
// Desc: Shortcut macros and functions for using DX objects
//
// Copyright (c) 1997-1999 Microsoft Corporation. All rights reserved
//-----------------------------------------------------------------------------
 
function D3DMath_IsZero(a: Double; fTol: Double { = g_EPSILON}): Boolean;
begin
if a < 0 then
Result := a >= -fTol
else
Result := a <= fTol;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_MatrixMultiply()
// Desc: Does the matrix operation: [Q] = [A] * [B]. Note that the order of
// this operation was changed from the previous version of the DXSDK.
//-----------------------------------------------------------------------------
 
procedure D3DMath_MatrixMultiply(var q: TD3DMatrix; const a, b: TD3DMatrix);
type
PArrayD3DValue = ^TArrayD3DValue;
TArrayD3DValue = array[0..15] of TD3DValue;
var
pA, pB, pQ: PArrayD3DValue;
i, j, k: Integer;
qq: TD3DMatrix;
begin
FillChar(qq, SizeOf(qq), 0);
 
pA := @a;
pB := @b;
pQ := @qq;
for i := 0 to 3 do
for j := 0 to 3 do
for k := 0 to 3 do
pQ[4 * i + j] := pQ[4 * i + j] + pA[4 * i + k] * pB[4 * k + j];
q := qq; {== protect of recurrence}
end;
 
function D3DMath_MatrixMultiply(const a, b: TD3DMatrix): TD3DMatrix;
begin
D3DMath_MatrixMultiply(Result, a, b);
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_MatrixInvert()
// Desc: Does the matrix operation: [Q] = inv[A]. Note: this function only
// works for matrices with [0 0 0 1] for the 4th column.
//-----------------------------------------------------------------------------
 
function D3DMath_MatrixInvert(var q: TD3DMatrix; const a: TD3DMatrix): HResult;
var
fDetInv: Double;
begin
if (abs(a._44 - 1.0) > 0.001) or (abs(a._14) > 0.001) or (abs(a._24) > 0.001) or (abs(a._34) > 0.001) then
begin
Result := E_INVALIDARG;
Exit;
end;
 
fDetInv := 1.0 / (a._11 * (a._22 * a._33 - a._23 * a._32) -
a._12 * (a._21 * a._33 - a._23 * a._31) +
a._13 * (a._21 * a._32 - a._22 * a._31));
 
q._11 := fDetInv * (a._22 * a._33 - a._23 * a._32);
q._12 := -fDetInv * (a._12 * a._33 - a._13 * a._32);
q._13 := fDetInv * (a._12 * a._23 - a._13 * a._22);
q._14 := 0.0;
 
q._21 := -fDetInv * (a._21 * a._33 - a._23 * a._31);
q._22 := fDetInv * (a._11 * a._33 - a._13 * a._31);
q._23 := -fDetInv * (a._11 * a._23 - a._13 * a._21);
q._24 := 0.0;
 
q._31 := fDetInv * (a._21 * a._32 - a._22 * a._31);
q._32 := -fDetInv * (a._11 * a._32 - a._12 * a._31);
q._33 := fDetInv * (a._11 * a._22 - a._12 * a._21);
q._34 := 0.0;
 
q._41 := -(a._41 * q._11 + a._42 * q._21 + a._43 * q._31);
q._42 := -(a._41 * q._12 + a._42 * q._22 + a._43 * q._32);
q._43 := -(a._41 * q._13 + a._42 * q._23 + a._43 * q._33);
q._44 := 1.0;
 
Result := S_OK;
end;
 
function D3DMath_MatrixInvert(const a: TD3DMatrix): TD3DMatrix;
begin
if D3DMath_MatrixInvert(Result, a) <> S_OK then
FillChar(Result, SizeOf(Result), 0);
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_VectorMatrixMultiply()
// Desc: Multiplies a vector by a matrix
//-----------------------------------------------------------------------------
 
function D3DMath_VectorMatrixMultiply(var vDest: TD3DVector; const vSrc: TD3DVector;
const mat: TD3DMatrix): HResult;
var
x, y, z, w: Double;
begin
x := vSrc.x * mat._11 + vSrc.y * mat._21 + vSrc.z * mat._31 + mat._41;
y := vSrc.x * mat._12 + vSrc.y * mat._22 + vSrc.z * mat._32 + mat._42;
z := vSrc.x * mat._13 + vSrc.y * mat._23 + vSrc.z * mat._33 + mat._43;
w := vSrc.x * mat._14 + vSrc.y * mat._24 + vSrc.z * mat._34 + mat._44;
 
if abs(w) < g_EPSILON then
begin
Result := E_INVALIDARG;
Exit;
end;
 
vDest.x := x / w;
vDest.y := y / w;
vDest.z := z / w;
 
Result := S_OK;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_VertexMatrixMultiply()
// Desc: Multiplies a vertex by a matrix
//-----------------------------------------------------------------------------
 
function D3DMath_VertexMatrixMultiply(var vDest: TD3DVertex; const vSrc: TD3DVertex;
const mat: TD3DMatrix): HResult;
var
pSrcVec, pDestVec: PD3DVector;
begin
pSrcVec := @vSrc.x;
pDestVec := @vDest.x;
 
Result := D3DMath_VectorMatrixMultiply(pDestVec^, pSrcVec^, mat);
if SUCCEEDED(Result) then
begin
pSrcVec := @vSrc.nx;
pDestVec := @vDest.nx;
Result := D3DMath_VectorMatrixMultiply(pDestVec^, pSrcVec^, mat);
end;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_QuaternionFromRotation()
// Desc: Converts a normalized axis and angle to a unit quaternion.
//-----------------------------------------------------------------------------
 
procedure D3DMath_QuaternionFromRotation(var x, y, z, w: Double;
const v: TD3DVector; fTheta: Double);
begin
x := sin(fTheta / 2.0) * v.x;
y := sin(fTheta / 2.0) * v.y;
z := sin(fTheta / 2.0) * v.z;
w := cos(fTheta / 2.0);
end;
 
function D3DMath_QuaternionFromRotation(const axis: TD3DVector; const r: Double): TQuaternion;
var
// r: Integer;
a: TD3DVector;
begin
// r := (t div 2) and $FFF;
a := VectorNormalize(axis);
Result.X := a.X * Sin(R);
Result.Y := a.Y * Sin(R);
Result.Z := a.Z * Sin(R);
Result.W := Cos(R);
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_RotationFromQuaternion()
// Desc: Converts a normalized axis and angle to a unit quaternion.
//-----------------------------------------------------------------------------
 
procedure D3DMath_RotationFromQuaternion(var v: TD3DVector; var fTheta: Double;
x, y, z, w: Double);
begin
fTheta := ArcCos(w) * 2.0;
v.x := x / sin(fTheta / 2.0);
v.y := y / sin(fTheta / 2.0);
v.z := z / sin(fTheta / 2.0);
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_QuaternionFromAngles()
// Desc: Converts euler angles to a unit quaternion.
//-----------------------------------------------------------------------------
 
procedure D3DMath_QuaternionFromAngles(var x, y, z, w: Double; fYaw, fPitch, fRoll: Double);
var
fSinYaw, fSinPitch, fSinRoll, fCosYaw, fCosPitch, fCosRoll: Double;
begin
fSinYaw := sin(fYaw / 2.0);
fSinPitch := sin(fPitch / 2.0);
fSinRoll := sin(fRoll / 2.0);
fCosYaw := cos(fYaw / 2.0);
fCosPitch := cos(fPitch / 2.0);
fCosRoll := cos(fRoll / 2.0);
 
x := fSinRoll * fCosPitch * fCosYaw - fCosRoll * fSinPitch * fSinYaw;
y := fCosRoll * fSinPitch * fCosYaw + fSinRoll * fCosPitch * fSinYaw;
z := fCosRoll * fCosPitch * fSinYaw - fSinRoll * fSinPitch * fCosYaw;
w := fCosRoll * fCosPitch * fCosYaw + fSinRoll * fSinPitch * fSinYaw;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_MatrixFromQuaternion()
// Desc: Converts a unit quaternion into a rotation matrix.
//-----------------------------------------------------------------------------
 
procedure D3DMath_MatrixFromQuaternion(var mat: TD3DMatrix; x, y, z, w: Double);
var
xx, yy, zz, xy, xz, yz, wx, wy, wz: Double;
begin
xx := x * x; yy := y * y; zz := z * z;
xy := x * y; xz := x * z; yz := y * z;
wx := w * x; wy := w * y; wz := w * z;
 
mat._11 := 1 - 2 * (yy + zz);
mat._12 := 2 * (xy - wz);
mat._13 := 2 * (xz + wy);
 
mat._21 := 2 * (xy + wz);
mat._22 := 1 - 2 * (xx + zz);
mat._23 := 2 * (yz - wx);
 
mat._31 := 2 * (xz - wy);
mat._32 := 2 * (yz + wx);
mat._33 := 1 - 2 * (xx + yy);
 
mat._14 := 0.0; mat._24 := 0.0; mat._34 := 0.0;
mat._41 := 0.0; mat._42 := 0.0; mat._43 := 0.0;
mat._44 := 1.0;
end;
 
function D3DMath_MatrixFromQuaternion(q: TQuaternion): TD3DMatrix;
begin
D3DMath_MatrixFromQuaternion(Result, q.X, q.Y, q.Z, q.W)
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_QuaternionFromMatrix()
// Desc: Converts a rotation matrix into a unit quaternion.
//-----------------------------------------------------------------------------
 
procedure D3DMath_QuaternionFromMatrix(var x, y, z, w: Double; var mat: TD3DMatrix);
var
s: Double;
xx, yy, zz, xy, xz, yz, wx, wy, wz: Double;
begin
if (mat._11 + mat._22 + mat._33 > 0.0) then
begin
s := sqrt(mat._11 + mat._22 + mat._33 + mat._44);
 
x := (mat._23 - mat._32) / (2 * s);
y := (mat._31 - mat._13) / (2 * s);
z := (mat._12 - mat._21) / (2 * s);
w := 0.5 * s;
end;
 
xx := x * x; yy := y * y; zz := z * z;
xy := x * y; xz := x * z; yz := y * z;
wx := w * x; wy := w * y; wz := w * z;
 
mat._11 := 1 - 2 * (yy + zz);
mat._12 := 2 * (xy - wz);
mat._13 := 2 * (xz + wy);
 
mat._21 := 2 * (xy + wz);
mat._22 := 1 - 2 * (xx + zz);
mat._23 := 2 * (yz - wx);
 
mat._31 := 2 * (xz - wy);
mat._32 := 2 * (yz + wx);
mat._33 := 1 - 2 * (xx + yy);
 
mat._14 := 0.0; mat._24 := 0.0; mat._34 := 0.0;
mat._41 := 0.0; mat._42 := 0.0; mat._43 := 0.0;
mat._44 := 1.0;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_QuaternionMultiply()
// Desc: Mulitples two quaternions together as in {Q} = {A} * {B}.
//-----------------------------------------------------------------------------
 
procedure D3DMath_QuaternionMultiply(var Qx, Qy, Qz, Qw: Double;
Ax, Ay, Az, Aw, Bx, By, Bz, Bw: Double);
var
Dx, Dy, Dz, Dw: Double;
begin
Dx := Ax * Bw + Ay * Bz - Az * By + Aw * Bx;
Dy := -Ax * Bz + Ay * Bw + Az * Bx + Aw * By;
Dz := Ax * By - Ay * Bx + Az * Bw + Aw * Bz;
Dw := -Ax * Bx - Ay * By - Az * Bz + Aw * Bw;
 
Qx := Dx; Qy := Dy; Qz := Dz; Qw := Dw;
end;
 
function D3DMath_QuaternionMultiply(a, b: TQuaternion): TQuaternion;
var
Qx, Qy, Qz, Qw: Double;
begin
D3DMath_QuaternionMultiply(Qx, Qy, Qz, Qw, A.x, A.y, A.z, A.w, B.x, B.y, B.z, B.w);
Result.X := Qx;
Result.Y := Qy;
Result.Z := Qz;
Result.W := Qw;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DMath_SlerpQuaternions()
// Desc: Compute a quaternion which is the spherical linear interpolation
// between two other quaternions by dvFraction.
//-----------------------------------------------------------------------------
 
procedure D3DMath_QuaternionSlerp(var Qx, Qy, Qz, Qw: Double;
Ax, Ay, Az, Aw, Bx, By, Bz, Bw, fAlpha: Double);
var
fCosTheta: Double;
fBeta: Double;
fTheta: Double;
begin
// Compute dot product (equal to cosine of the angle between quaternions)
fCosTheta := Ax * Bx + Ay * By + Az * Bz + Aw * Bw;
 
// Check angle to see if quaternions are in opposite hemispheres
if fCosTheta < 0.0 then
begin
// If so, flip one of the quaterions
fCosTheta := -fCosTheta;
Bx := -Bx; By := -By; Bz := -Bz; Bw := -Bw;
end;
 
// Set factors to do linear interpolation, as a special case where the
// quaternions are close together.
fBeta := 1.0 - fAlpha;
 
// If the quaternions aren't close, proceed with spherical interpolation
if 1.0 - fCosTheta > 0.001 then
begin
fTheta := arccos(fCosTheta);
 
fBeta := sin(fTheta * fBeta) / sin(fTheta);
fAlpha := sin(fTheta * fAlpha) / sin(fTheta);
end;
 
// Do the interpolation
Qx := fBeta * Ax + fAlpha * Bx;
Qy := fBeta * Ay + fAlpha * By;
Qz := fBeta * Az + fAlpha * Bz;
Qw := fBeta * Aw + fAlpha * Bw;
end;
 
function D3DMath_QuaternionSlerp(A, B: TQuaternion; fAlpha: Double): TQuaternion;
var
Qx, Qy, Qz, Qw: Double;
begin
D3DMath_QuaternionSlerp(Qx, Qy, Qz, Qw, A.x, A.y, A.z, A.w, B.x, B.y, B.z, B.w, fAlpha);
Result.X := Qx;
Result.Y := Qy;
Result.Z := Qz;
Result.W := Qw;
end;
 
//-----------------------------------------------------------------------------
// File: D3DUtil.cpp
//
// Desc: Shortcut macros and functions for using DX objects
//
//
// Copyright (c) 1997-1999 Microsoft Corporation. All rights reserved
//-----------------------------------------------------------------------------
 
//-----------------------------------------------------------------------------
// Name: D3DUtil_InitSurfaceDesc()
// Desc: Helper function called to build a DDSURFACEDESC2 structure,
// typically before calling CreateSurface() or GetSurfaceDesc()
//-----------------------------------------------------------------------------
 
procedure D3DUtil_InitSurfaceDesc(var ddsd: TDDSurfaceDesc2; dwFlags, dwCaps: DWORD);
begin
FillChar(ddsd, SizeOf(ddsd), 0);
ddsd.dwSize := SizeOf(ddsd);
ddsd.dwFlags := dwFlags;
ddsd.ddsCaps.dwCaps := dwCaps;
ddsd.ddpfPixelFormat.dwSize := SizeOf(ddsd.ddpfPixelFormat);
end;
 
//-----------------------------------------------------------------------------
// Name: D3DUtil_InitMaterial()
// Desc: Helper function called to build a D3DMATERIAL7 structure
//-----------------------------------------------------------------------------
 
procedure D3DUtil_InitMaterial(var mtrl: TD3DMaterial7; r, g, b, a: Double);
begin
FillChar(mtrl, SizeOf(mtrl), 0);
mtrl.dcvDiffuse.r := r; mtrl.dcvAmbient.r := r;
mtrl.dcvDiffuse.g := g; mtrl.dcvAmbient.g := g;
mtrl.dcvDiffuse.b := b; mtrl.dcvAmbient.b := b;
mtrl.dcvDiffuse.a := a; mtrl.dcvAmbient.a := a;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DUtil_InitLight()
// Desc: Initializes a D3DLIGHT7 structure
//-----------------------------------------------------------------------------
 
procedure D3DUtil_InitLight(var light: TD3DLight7; ltType: TD3DLightType; x, y, z: Double);
begin
FillChar(light, SizeOf(light), 0);
light.dltType := ltType;
light.dcvDiffuse.r := 1.0;
light.dcvDiffuse.g := 1.0;
light.dcvDiffuse.b := 1.0;
light.dcvSpecular := light.dcvDiffuse;
light.dvPosition.x := x; light.dvDirection.x := x;
light.dvPosition.y := y; light.dvDirection.y := y;
light.dvPosition.z := z; light.dvDirection.z := z;
light.dvAttenuation0 := 1.0;
light.dvRange := D3DLIGHT_RANGE_MAX;
end;
 
procedure D3DUtil_SetIdentityMatrix(out m: TD3DMatrix);
begin
m._12 := 0; m._13 := 0; m._14 := 0; m._21 := 0; m._23 := 0; m._24 := 0;
m._31 := 0; m._32 := 0; m._34 := 0; m._41 := 0; m._42 := 0; m._43 := 0;
m._11 := 1; m._22 := 1; m._33 := 1; m._44 := 1;
end;
 
function D3DUtil_SetIdentityMatrix: TD3DMatrix;
begin
D3DUtil_SetIdentityMatrix(Result);
end;
 
function D3DUtil_SetScaleMatrix(const x, y, z: Single): TD3DMatrix;
begin
with Result do
begin
_11 := x; _12 := 0; _13 := 0; _14 := 0;
_21 := 0; _22 := y; _23 := 0; _24 := 0;
_31 := 0; _32 := 0; _33 := z; _34 := 0;
_41 := 0; _42 := 0; _43 := 0; _44 := 1;
end;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DUtil_SetViewMatrix()
// Desc: Given an eye point, a lookat point, and an up vector, this
// function builds a 4x4 view matrix.
//-----------------------------------------------------------------------------
 
function D3DUtil_SetViewMatrix(var mat: TD3DMatrix; const vFrom, vAt, vWorldUp: TD3DVector): HResult;
var
vView: TD3DVector;
fLength: Double;
fDotProduct: Double;
vUp: TD3DVector;
vRight: TD3DVector;
begin
// Get the z basis vector, which points straight ahead. This is the
// difference from the eyepoint to the lookat point.
vView := VectorSub(vAt, vFrom);
 
fLength := VectorMagnitude(vView);
if fLength < 0.1E-6 then
begin
Result := E_INVALIDARG;
Exit;
end;
 
// Normalize the z basis vector
vView := VectorDivS(vView, fLength);
 
// Get the dot product, and calculate the projection of the z basis
// vector onto the up vector. The projection is the y basis vector.
fDotProduct := VectorDotProduct(vWorldUp, vView);
 
vUp := VectorSub(vWorldUp, VectorMulS(vView, fDotProduct));
 
// If this vector has near-zero length because the input specified a
// bogus up vector, let's try a default up vector
fLength := VectorMagnitude(vUp);
if 1E-6 > fLength then
begin
vUp := VectorSub(MakeD3DVector(0, 1, 0), VectorMulS(vView, vView.y));
 
// If we still have near-zero length, resort to a different axis.
fLength := VectorMagnitude(vUp);
if 1E-6 > fLength then
begin
vUp := VectorSub(MakeD3DVector(0, 0, 1), VectorMulS(vView, vView.z));
 
fLength := VectorMagnitude(vUp);
if 1E-6 > fLength then
begin
Result := E_INVALIDARG;
Exit;
end;
end;
end;
 
// Normalize the y basis vector
vUp := VectorDivS(vUp, fLength);
 
// The x basis vector is found simply with the cross product of the y
// and z basis vectors
vRight := VectorCrossProduct(vUp, vView);
 
// Start building the matrix. The first three rows contains the basis
// vectors used to rotate the view to point at the lookat point
D3DUtil_SetIdentityMatrix(mat);
mat._11 := vRight.x; mat._12 := vUp.x; mat._13 := vView.x;
mat._21 := vRight.y; mat._22 := vUp.y; mat._23 := vView.y;
mat._31 := vRight.z; mat._32 := vUp.z; mat._33 := vView.z;
 
// Do the translation values (rotations are still about the eyepoint)
mat._41 := -VectorDotProduct(vFrom, vRight);
mat._42 := -VectorDotProduct(vFrom, vUp);
mat._43 := -VectorDotProduct(vFrom, vView);
 
Result := S_OK;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DUtil_SetProjectionMatrix()
// Desc: Sets the passed in 4x4 matrix to a perpsective projection matrix built
// from the field-of-view (fov, in y), aspect ratio, near plane (D),
// and far plane (F). Note that the projection matrix is normalized for
// element [3][4] to be 1.0. This is performed so that W-based range fog
// will work correctly.
//-----------------------------------------------------------------------------
 
function D3DUtil_SetProjectionMatrix(var mat: TD3DMatrix; fFOV, fAspect, fNearPlane, fFarPlane: Double): HResult;
var
w, h, Q: Double;
begin
if (abs(fFarPlane - fNearPlane) < 0.01) or (abs(sin(fFOV / 2)) < 0.01) then
begin
Result := E_INVALIDARG;
Exit;
end;
 
w := fAspect * (cos(fFOV / 2) / sin(fFOV / 2));
h := 1.0 * (cos(fFOV / 2) / sin(fFOV / 2));
Q := fFarPlane / (fFarPlane - fNearPlane);
 
FillChar(mat, SizeOf(mat), 0);
mat._11 := w;
mat._22 := h;
mat._33 := Q;
mat._34 := 1.0;
mat._43 := -Q * fNearPlane;
 
Result := S_OK;
end;
 
//-----------------------------------------------------------------------------
// Name: D3DUtil_SetRotateXMatrix()
// Desc: Create Rotation matrix about X axis
//-----------------------------------------------------------------------------
 
procedure D3DUtil_SetRotateXMatrix(var mat: TD3DMatrix; fRads: Double);
begin
D3DUtil_SetIdentityMatrix(mat);
mat._22 := cos(fRads);
mat._23 := sin(fRads);
mat._32 := -sin(fRads);
mat._33 := cos(fRads);
end;
 
function D3DUtil_SetRotateXMatrix(fRads: Double): TD3DMatrix;
begin
D3DUtil_SetRotateXMatrix(Result, fRads);
end;
 
//-----------------------------------------------------------------------------
// Name: D3DUtil_SetRotateYMatrix()
// Desc: Create Rotation matrix about Y axis
//-----------------------------------------------------------------------------
 
procedure D3DUtil_SetRotateYMatrix(var mat: TD3DMatrix; fRads: Double);
begin
D3DUtil_SetIdentityMatrix(mat);
mat._11 := cos(fRads);
mat._13 := -sin(fRads);
mat._31 := sin(fRads);
mat._33 := cos(fRads);
end;
 
function D3DUtil_SetRotateYMatrix(fRads: Double): TD3DMatrix;
begin
D3DUtil_SetRotateYMatrix(Result, fRads);
end;
 
//-----------------------------------------------------------------------------
// Name: D3DUtil_SetRotateZMatrix()
// Desc: Create Rotation matrix about Z axis
//-----------------------------------------------------------------------------
 
procedure D3DUtil_SetRotateZMatrix(var mat: TD3DMatrix; fRads: Double);
begin
D3DUtil_SetIdentityMatrix(mat);
mat._11 := cos(fRads);
mat._12 := sin(fRads);
mat._21 := -sin(fRads);
mat._22 := cos(fRads);
end;
 
function D3DUtil_SetRotateZMatrix(fRads: Double): TD3DMatrix;
begin
D3DUtil_SetRotateZMatrix(Result, fRads);
end;
 
//-----------------------------------------------------------------------------
// Name: D3DUtil_SetRotationMatrix
// Desc: Create a Rotation matrix about vector direction
//-----------------------------------------------------------------------------
 
procedure D3DUtil_SetRotationMatrix(var mat: TD3DMatrix; var vDir: TD3DVector; fRads: Double);
var
fCos, fSin: Double;
v: TD3DVector;
begin
fCos := cos(fRads);
fSin := sin(fRads);
v := VectorNormalize(vDir);
 
mat._11 := (v.x * v.x) * (1.0 - fCos) + fCos;
mat._12 := (v.x * v.y) * (1.0 - fCos) - (v.z * fSin);
mat._13 := (v.x * v.z) * (1.0 - fCos) + (v.y * fSin);
 
mat._21 := (v.y * v.x) * (1.0 - fCos) + (v.z * fSin);
mat._22 := (v.y * v.y) * (1.0 - fCos) + fCos;
mat._23 := (v.y * v.z) * (1.0 - fCos) - (v.x * fSin);
 
mat._31 := (v.z * v.x) * (1.0 - fCos) - (v.y * fSin);
mat._32 := (v.z * v.y) * (1.0 - fCos) + (v.x * fSin);
mat._33 := (v.z * v.z) * (1.0 - fCos) + fCos;
 
mat._14 := 0; mat._24 := 0; mat._34 := 0;
mat._41 := 0; mat._42 := 0; mat._43 := 0;
mat._44 := 1.0;
end;
 
function D3DUtil_SetRotationMatrixByX(const a: TD3DVector; const r: Double): TD3DVector;
begin
Result.X := a.X;
Result.Y := a.Y * Cos(r) + a.Z * Sin(r);
Result.Z := -a.Y * Sin(r) + a.Z * Cos(r);
end;
 
function D3DUtil_SetRotationMatrixByY(const a: TD3DVector; const r: Double): TD3DVector;
begin
Result.X := a.X * Cos(r) - a.Z * Sin(r);
Result.Y := a.Y;
Result.Z := a.X * Sin(r) + a.Z * Cos(r);
end;
 
function D3DUtil_SetRotationMatrixByZ(const a: TD3DVector; const r: Double): TD3DVector;
begin
Result.X := a.X * Cos(r) + a.Y * Sin(r);
Result.Y := -a.X * Sin(r) + a.Y * Cos(r);
Result.Z := a.Z;
end;
 
// simple D2D operation
 
function D2DMath_VecAdd(const a: TD2DVector; const b: TD2DVector): TD2DVector;
begin
Result.X := a.X + b.X;
Result.Y := a.Y + b.Y;
end;
 
function D2DMath_VecSub(const a: TD2DVector; const b: TD2DVector): TD2DVector;
begin
Result.X := a.X - b.X;
Result.Y := a.Y - b.Y;
end;
 
function D2DMath_VecDotProduct(const a, b: TD2DVector): Single;
begin
Result := a.X * b.X + a.Y * b.Y;
end;
 
function D2DMath_VecDistance(const a, b: TD2DVector): Single;
begin
Result := sqrt(SQR(a.X - b.X) + SQR(a.Y - b.Y));
end;
 
function D2DMath_VecLength(const a: TD2DVector): Single;
begin
Result := sqrt(SQR(a.X) + SQR(a.Y));
end;
 
function D2DMath_VecNormalize(const a: TD2DVector): TD2DVector;
var
len: Single;
begin
len := D2DMath_VecLength(a);
if len = 0 then
begin
result := MakeD2DVector(0, 0);
Exit;
end;
 
result.X := a.X / len;
result.Y := a.Y / len;
end;
 
function D2DMath_VecToAngle(const a: TD2DVector): Double;
var
v: TD2DVector;
sg: Integer;
hi, lo, mid: Integer;
begin
Result := 0.0;
 
v := D2DMath_VecNormalize(a);
 
if (v.y > 0) then
begin
if v.x > 0 then
sg := 1
else
begin
sg := 2;
v.x := -v.x;
end;
end
else
if (v.y < 0) then
begin
if v.x >= 0 then
sg := 4
else
begin
sg := 3;
v.x := -v.x;
end;
end
else
begin
if v.x >= 0 then
sg := 1
else
begin
sg := 3;
v.x := -v.x;
end;
end;
 
 
hi := 1023;
lo := 0;
mid := 511;
 
while hi > lo do
begin
if Cos(mid / 2048.0 * Pi) > v.x then
lo := mid + 1
else
hi := mid;
mid := (hi + lo) shr 1;
end;
 
case sg of
1: result := mid;
2: result := 2047 - mid;
3: result := 2048 + mid;
4: result := 4095 - mid;
end;
 
// to radians
Result := Result * Pi / 2048.0;
end;
 
function D2DMath_VecRot(const a: TD2DVector; const angle: Double): TD2DVector;
begin
Result.X := a.X * Cos(angle) - a.Y * Sin(angle);
Result.Y := a.X * Sin(angle) + a.Y * Cos(angle);
end;
 
 
function D2DMath_VecScale(const a: TD2DVector; const scale: Double): TD2DVector;
begin
Result.X := a.X * scale;
Result.Y := a.Y * scale;
end;
 
function D2DMath_VecChangeLength(const a: TD2DVector; const k: Single): TD2DVector;
var
len: Single;
begin
len := D2DMath_VecLength(a);
if len = 0 then
begin
Result := MakeD2DVector(0, 0);
Exit;
end;
 
Result.X := a.X * k / len;
Result.Y := a.Y * k / len;
end;
 
function D2DMath_VecLookAt(const pos: TD2DVector; const target: TD2DVector; const k: Single): TD2DVector;
var
sub: TD2DVector;
len: Single;
begin
sub := D2DMath_VecSub(target, pos);
len := D2DMath_VecLength(sub);
if len = 0 then
begin
Result := MakeD2DVector(0, 0);
Exit;
end;
 
Result.X := sub.X * k / len;
Result.Y := sub.Y * k / len;
end;
 
function D2DMath_VecRandom2D(const k: Single): TD2DVector;
begin
Result := D2DMath_VecChangeLength(MakeD2DVector(Random - 0.5, Random - 0.5), k);
end;
 
function D2DMath_VecLerp(const a: TD2DVector; const b: TD2DVector; const rate: Single): TD2DVector;
begin
Result.x := rate * b.x + (1.0 - rate) * a.x;
Result.y := rate * b.y + (1.0 - rate) * a.y;
end;
 
 
end.
 
/VCL_DELPHIX_D6/DAnim.pas
22,7 → 22,9
 
{$Z4}
{$A+}
{$IfNDef D7UP}
{$WEAKPACKAGEUNIT}
{$EndIf}
 
uses Windows, ActiveX, DirectX, DShow;
 
1109,18 → 1111,18
out lplpDDClipper: IDirectDrawClipper; pUnkOuter: IUnknown): HResult; stdcall;
function CreatePalette(dwFlags: DWORD; lpColorTable: PPaletteEntry;
out lplpDDPalette: IDirectDrawPalette; pUnkOuter: IUnknown): HResult;stdcall;
function CreateSurface(const lpDDSurfaceDesc: DDSURFACEDESC;
function CreateSurface(const lpDDSurfaceDesc: TDDSURFACEDESC;
out lplpDDSurface: IDirectDrawSurface; pUnkOuter: IUnknown): HResult; stdcall;
function DuplicateSurface(lpDDSurface: IDirectDrawSurface;
out lplpDupDDSurface: IDirectDrawSurface): HResult; stdcall;
function EnumDisplayModes(dwFlags: DWORD;
const lpDDSurfaceDesc: DDSURFACEDESC; lpContext: Pointer;
lpEnumModesCallback: LPDDENUMMODESCALLBACK): HResult; stdcall;
function EnumSurfaces(dwFlags: DWORD; const lpDDSD: DDSURFACEDESC;
lpContext: Pointer; lpEnumCallback: LPDDENUMSURFACESCALLBACK): HResult; stdcall;
const lpDDSurfaceDesc: TDDSURFACEDESC; lpContext: Pointer;
lpEnumModesCallback: {LPDDENUMMODESCALLBACK}TDDEnumModesCallback): HResult; stdcall;
function EnumSurfaces(dwFlags: DWORD; const lpDDSD: TDDSURFACEDESC;
lpContext: Pointer; lpEnumCallback: {LPDDENUMSURFACESCALLBACK}TDDEnumSurfacesCallback): HResult; stdcall;
function FlipToGDISurface: HResult; stdcall;
function GetCaps(var lpDDDriverCaps: DDCAPS; var lpDDHELCaps: DDCAPS): HResult; stdcall;
function GetDisplayMode(var lpDDSurfaceDesc: DDSURFACEDESC): HResult; stdcall;
function GetCaps(var lpDDDriverCaps: TDDCAPS; var lpDDHELCaps: TDDCAPS): HResult; stdcall;
function GetDisplayMode(var lpDDSurfaceDesc: TDDSURFACEDESC): HResult; stdcall;
function GetFourCCCodes(var lpNumCodes, lpCodes: DWORD): HResult; stdcall;
function GetGDISurface(out lplpGDIDDSSurface: IDirectDrawSurface): HResult; stdcall;
function GetMonitorFrequency(var lpdwFrequency: DWORD): HResult; stdcall;
1133,7 → 1135,7
dwFlags: DWORD): HResult; stdcall;
function WaitForVerticalBlank(dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
// IDirectDraw2 methods
function GetAvailableVidMem(var lpDDSCaps: DDSCAPS;
function GetAvailableVidMem(var lpDDSCaps: TDDSCAPS;
var lpdwTotal, lpdwFree: DWORD): HResult; stdcall;
// IDirectDraw3 methods
function GetSurfaceFromDC(hdc: HDC; out ppSurface: IDirectDrawSurface): HResult; stdcall;
/VCL_DELPHIX_D6/DShow.pas
22,7 → 22,9
 
{$Z4}
{$A+}
{$IfNDef D7UP}
{$WEAKPACKAGEUNIT}
{$EndIf}
 
uses Windows, ActiveX, DirectX, MMSystem;
 
1887,10 → 1889,10
 
IDirectDrawMediaStream = interface(IMediaStream)
['{F4104FCE-9A70-11d0-8FDE-00C04FD9189D}']
function GetFormat(var pDDSDCurrent: DDSURFACEDESC;
function GetFormat(var pDDSDCurrent: TDDSURFACEDESC;
out ppDirectDrawPalette: IDirectDrawPalette;
var pDDSDDesired: DDSURFACEDESC; var pdwFlags: DWORD): HResult; stdcall;
function SetFormat(const pDDSurfaceDesc: DDSURFACEDESC;
var pDDSDDesired: TDDSURFACEDESC; var pdwFlags: DWORD): HResult; stdcall;
function SetFormat(const pDDSurfaceDesc: TDDSURFACEDESC;
pDirectDrawPalette: IDirectDrawPalette): HResult; stdcall;
function GetDirectDraw(out ppDirectDraw: IDirectDraw): HResult; stdcall;
function SetDirectDraw(pDirectDraw: IDirectDraw): HResult; stdcall;
2620,9 → 2622,9
// IDirectDrawVideo methods
function GetSwitches(var pSwitches: DWORD): HResult; stdcall;
function SetSwitches(pSwitches: DWORD): HResult; stdcall;
function GetCaps(var pCaps: DDCAPS): HResult; stdcall;
function GetEmulatedCaps(var pCaps: DDCAPS): HResult; stdcall;
function GetSurfaceDesc(var pSurfaceDesc: DDSURFACEDESC): HResult; stdcall;
function GetCaps(var pCaps: TDDCAPS): HResult; stdcall;
function GetEmulatedCaps(var pCaps: TDDCAPS): HResult; stdcall;
function GetSurfaceDesc(var pSurfaceDesc: TDDSURFACEDESC): HResult; stdcall;
function GetFourCCCodes(var pCount, pCodes: DWORD): HResult; stdcall;
function SetDirectDraw(pDirectDraw: IDirectDraw): HResult; stdcall;
function GetDirectDraw(out ppDirectDraw: IDirectDraw): HResult; stdcall;
3001,23 → 3003,23
// of structures. If the pointer to the array is NULL, first parameter
// returns the total number of formats supported.
function GetVideoFormats(var lpNumFormats: DWORD;
const lpddpfFormats: DDPIXELFORMAT): HResult; stdcall;
const lpddpfFormats: TDDPIXELFORMAT): HResult; stdcall;
 
// retrives maximum pixels per second rate expected for a given
// format and a given scaling factor. If decoder does not support
// those scaling factors, then it gives the rate and the nearest
// scaling factors.
function GetMaxPixelRate(const ddpfFormat: DDPIXELFORMAT;
function GetMaxPixelRate(const ddpfFormat: TDDPIXELFORMAT;
lpdwZoomHeight, lpdwZoomWidth: DWORD;
var lpdwMaxPixelsPerSecond: DWORD): HResult; stdcall;
 
// retrives various properties of the decoder for a given format
function GetVideoSignalInfo(const ddpfFormat: DDPIXELFORMAT;
function GetVideoSignalInfo(const ddpfFormat: TDDPIXELFORMAT;
var lpAMVideoSignalInfo: TAMVideoSignalInfo): HResult; stdcall;
 
// asks the decoder to ouput in this format. Return value should give
// appropriate error code
function SetVideoFormat(const ddpfFormat: DDPIXELFORMAT): HResult; stdcall;
function SetVideoFormat(const ddpfFormat: TDDPIXELFORMAT): HResult; stdcall;
 
// asks the decoder to treat even fields like odd fields and visa versa
function SetInvertPolarity: HResult; stdcall;
3185,13 → 3187,13
 
// informs the callee of the videoformats supported by the videoport
function InformVPInputFormats(dwNumFormats: DWORD;
const pDDPixelFormats: DDPIXELFORMAT): HResult; stdcall;
const pDDPixelFormats: TDDPIXELFORMAT): HResult; stdcall;
 
// gets the various formats supported by the decoder in an array
// of structures. If the pointer to the array is NULL, first parameter
// returns the total number of formats supported.
function GetVideoFormats(var pdwNumFormats: DWORD;
var pddPixelFormats: DDPIXELFORMAT): HResult; stdcall;
var pddPixelFormats: TDDPIXELFORMAT): HResult; stdcall;
 
// sets the format entry chosen (0, 1, .. ,(dwNumProposedEntries-1))
function SetVideoFormat(dwChosenEntry: DWORD): HResult; stdcall;
3269,10 → 3271,10
// this function gets the overlay surface that the mixer is using
function GetOverlaySurface(out ppOverlaySurface: IDirectDrawSurface): HResult; stdcall;
// this functions sets the color-controls, if the chip supports it.
function SetColorControls(const pColorControl: DDCOLORCONTROL): HResult; stdcall;
function SetColorControls(const pColorControl: TDDCOLORCONTROL): HResult; stdcall;
// this functions also returns the capability of the hardware in the dwFlags
// value of the struct.
function GetColorControls(var pColorControl: DDCOLORCONTROL): HResult; stdcall;
function GetColorControls(var pColorControl: TDDCOLORCONTROL): HResult; stdcall;
end;
 
// interface IVPVBINotify
/VCL_DELPHIX_D6/DXClass.pas
5,7 → 5,15
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, Messages, SysUtils, Classes, Controls, Forms, MMSystem, DirectX;
Windows, Messages, SysUtils, Classes, Controls, Forms, MMSystem, Graphics, {$IFDEF _DMO_}MultiMon,{$ENDIF}
{$IfDef StandardDX}
{$IfDef DX9}
Direct3D, DirectInput,
{$EndIf}
DirectDraw, DirectSound;
{$Else}
DirectX;
{$EndIf}
 
type
 
50,6 → 58,46
property Drivers[Index: Integer]: TDirectXDriver read GetDriver; default;
end;
 
{$IFDEF _DMO_}
{ TDirectXDriverEx }
 
TDirectXDriverEx = class(TCollectionItem)
private
FGUID: PGUID;
FGUID2: TGUID;
FDescription: string;
FDriverName: string;
FMonitor: HMonitor;
FMonitorInfo: TMonitorInfo;
procedure SetGUID(Value: PGUID);
function ConvertHMonitor(iMonitor: HMonitor): TMonitorInfo;
function GetMonitorInfo: TMonitorInfo;
function GetFlags: DWORD;
function GetTempSpace: TRect;
function GetWorkSpace: TRect;
public
property GUID: PGUID read FGUID write SetGUID;
property Monitor: HMonitor read FMonitor write FMonitor;
property MonitorInfo: TMonitorInfo read GetMonitorInfo;
published
property Description: string read FDescription write FDescription;
property DriverName: string read FDriverName write FDriverName;
property WorkSpace: TRect read GetWorkSpace;
property TempSpace: TRect read GetTempSpace;
property Flags: DWORD read GetFlags;
end;
 
{ TDirectXDriversEx }
 
TDirectXDriversEx = class(TCollection)
private
function GetDriver(Index: Integer): TDirectXDriverEx;
public
constructor Create;
property Drivers[Index: Integer]: TDirectXDriverEx read GetDriver; default;
end;
{$ENDIF}
{ TDXForm }
 
TDXForm = class(TForm)
170,20 → 218,137
function IndexOf(const Name: string): Integer;
end;
 
function Max(Val1, Val2: Integer): Integer;
function Min(Val1, Val2: Integer): Integer;
{Addapted from RXLib.PicClip}
 
{ TPicClip }
TCellRange = 1..MaxInt;
 
TDXPictureClip = class(TComponent)
private
FPicture: TPicture;
FRows: TCellRange;
FCols: TCellRange;
FBitmap: TBitmap;
FMasked: Boolean;
FMaskColor: TColor;
FOnChange: TNotifyEvent;
procedure CheckIndex(Index: Integer);
function GetCell(Col, Row: Cardinal): TBitmap;
function GetGraphicCell(Index: Integer): TBitmap;
function GetDefaultMaskColor: TColor;
function GetIsEmpty: Boolean;
function GetCount: Integer;
function GetHeight: Integer;
function GetWidth: Integer;
function IsMaskStored: Boolean;
procedure PictureChanged(Sender: TObject);
procedure SetHeight(Value: Integer);
procedure SetPicture(Value: TPicture);
procedure SetWidth(Value: Integer);
procedure SetMaskColor(Value: TColor);
protected
procedure AssignTo(Dest: TPersistent); override;
procedure Changed; dynamic;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
function GetIndex(Col, Row: Cardinal): Integer;
procedure Draw(Canvas: TCanvas; X, Y, Index: Integer);
procedure DrawCenter(Canvas: TCanvas; Rect: TRect; Index: Integer);
property Cells[Col, Row: Cardinal]: TBitmap read GetCell;
property GraphicCell[Index: Integer]: TBitmap read GetGraphicCell;
property IsEmpty: Boolean read GetIsEmpty;
property Count: Integer read GetCount;
published
property Cols: TCellRange read FCols write FCols default 1;
property Height: Integer read GetHeight write SetHeight stored False;
property Masked: Boolean read FMasked write FMasked default True;
property Rows: TCellRange read FRows write FRows default 1;
property Picture: TPicture read FPicture write SetPicture;
property MaskColor: TColor read FMaskColor write SetMaskColor stored IsMaskStored;
property Width: Integer read GetWidth write SetWidth stored False;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;
 
function Max(Val1, Val2: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
function Min(Val1, Val2: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
 
function Cos256(i: Integer): Double;
function Sin256(i: Integer): Double;
 
function PointInRect(const Point: TPoint; const Rect: TRect): Boolean;
function RectInRect(const Rect1, Rect2: TRect): Boolean;
function OverlapRect(const Rect1, Rect2: TRect): Boolean;
function PointInRect(const Point: TPoint; const Rect: TRect): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function RectInRect(const Rect1, Rect2: TRect): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
function OverlapRect(const Rect1, Rect2: TRect): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
 
function WideRect(ALeft, ATop, AWidth, AHeight: Integer): TRect;
function WideRect(ALeft, ATop, AWidth, AHeight: Integer): TRect; {$IFDEF VER9UP}inline;{$ENDIF}
 
{ Transformations routines}
 
const
L_Curve = 0;//The left curve
R_Curve = 1;//The right curve
 
C_Add = 0;//Increase (BTC)
C_Dec = 1;//Decrease (ETC)
 
Type
TDblPoint = packed record
X, Y: Double;
end;
TSngPoint = packed record //SinglePoint
X, Y: Single;
end;
 
 
//Transformation matrix
T2DRowCol = Array[1..3] of Array[1..3] of Double;
T2DVector = Array[1..3] of Double;
//Distance between 2 points
function Get2PointRange(a,b: TDblPoint):Double;
//From vector angular calculation
function Get256(dX,dY: Double):Double;
//The angular calculation of the A from B
function GetARadFromB(A,B: TDblPoint):Double;
 
//It calculates the TDblPoint
function DblPoint(a,b:Double):TDblPoint;
//It converts the TDboPoint to the TPoint
function TruncDblPoint(DblPos: TDblPoint): TPoint;
 
function GetPointFromRangeAndAngle(SP: TDblPoint; Range,Angle: Double): TDblPoint;
 
function Ini2DRowCol: T2DRowCol;
function Trans2DRowCol(x,y:double):T2DRowCol;
function Scale2DRowCol(x,y:double):T2DRowCol;
function Rotate2DRowCol(Theta:double):T2DRowCol;
function RotateIntoX2DRowCol(x,y: double):T2DRowCol;
function Multiply2DRowCol(A,B:T2DRowCol):T2DRowCol;
function ScaleAt2DRowCol(x,y,Sx,Sy:double):T2DRowCol;
function ReflectAcross2DRowCol(x,y,dx,dy:Double): T2DRowCol;
function Apply2DVector(V:T2DVector; M:T2DRowCol): T2DVector;
function RotateAround2DRowCol(x,y,Theta:Double): T2DRowCol;
 
//Collision decision
function PointInCircle(PPos,CPos: TPoint; R: integer): Boolean;
function CircleInCircle(C1Pos,C2Pos: TPoint; R1,R2:Integer): Boolean;
function SegmentInCircle(SPos,EPos,CPos: TPoint; R: Integer): Boolean;
 
//If A is closer than B from starting point S, the True is returned.
function CheckNearAThanB(S,A,B: TDblPoint): Boolean;
 
//The Angle of 256 period is returned
function Angle256(Angle: Single): Single;
 
{ Support functions }
 
procedure ReleaseCom(out Com);
function DXLoadLibrary(const FileName, FuncName: string): TFarProc;
 
{ Simple helper }
 
procedure Log(const Co: string; const FName: string{$IFDEF VER4UP} = 'c:\logerr.txt'{$ENDIF});
 
implementation
 
uses DXConsts;
690,8 → 855,763
Result := -1;
end;
 
{ TDXPictureClip }
 
constructor TDXPictureClip.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FPicture := TPicture.Create;
FPicture.OnChange := PictureChanged;
FBitmap := TBitmap.Create;
FRows := 1;
FCols := 1;
FMaskColor := GetDefaultMaskColor;
FMasked := True;
end;
 
destructor TDXPictureClip.Destroy;
begin
FOnChange := nil;
FPicture.OnChange := nil;
FBitmap.Free;
FPicture.Free;
inherited Destroy;
end;
 
procedure TDXPictureClip.Assign(Source: TPersistent);
begin
if Source is TDXPictureClip then begin
with TDXPictureClip(Source) do begin
Self.FRows := Rows;
Self.FCols := Cols;
Self.FMasked := Masked;
Self.FMaskColor := MaskColor;
Self.FPicture.Assign(FPicture);
end;
end
else if (Source is TPicture) or (Source is TGraphic) then
FPicture.Assign(Source)
else inherited Assign(Source);
end;
 
type
THack = class(TImageList);
 
procedure TDXPictureClip.AssignTo(Dest: TPersistent);
var
I: Integer;
SaveChange: TNotifyEvent;
begin
if (Dest is TPicture) then Dest.Assign(FPicture)
else if (Dest is TImageList) and not IsEmpty then begin
with TImageList(Dest) do begin
SaveChange := OnChange;
try
OnChange := nil;
Clear;
Width := Self.Width;
Height := Self.Height;
for I := 0 to Self.Count - 1 do begin
if Self.Masked and (MaskColor <> clNone) then
TImageList(Dest).AddMasked(GraphicCell[I], MaskColor)
else TImageList(Dest).Add(GraphicCell[I], nil);
end;
Masked := Self.Masked;
finally
OnChange := SaveChange;
end;
THack(Dest).Change;
end;
end
else inherited AssignTo(Dest);
end;
 
procedure TDXPictureClip.Changed;
begin
if Assigned(FOnChange) then FOnChange(Self);
end;
 
function TDXPictureClip.GetIsEmpty: Boolean;
begin
Result := not Assigned(Picture) or Picture.Graphic.Empty;
end;
 
function TDXPictureClip.GetCount: Integer;
begin
if IsEmpty then Result := 0
else Result := Cols * Rows;
end;
const
{ TBitmap.GetTransparentColor from GRAPHICS.PAS uses this value }
PaletteMask = $02000000;
 
procedure TDXPictureClip.Draw(Canvas: TCanvas; X, Y, Index: Integer);
 
function PaletteColor(Color: TColor): Longint;
begin
Result := ColorToRGB(Color) or PaletteMask;
end;
procedure StretchBltTransparent(DstDC: HDC; DstX, DstY, DstW, DstH: Integer;
SrcDC: HDC; SrcX, SrcY, SrcW, SrcH: Integer; Palette: HPalette;
TransparentColor: TColorRef);
var
Color: TColorRef;
bmAndBack, bmAndObject, bmAndMem, bmSave: HBitmap;
bmBackOld, bmObjectOld, bmMemOld, bmSaveOld: HBitmap;
MemDC, BackDC, ObjectDC, SaveDC: HDC;
palDst, palMem, palSave, palObj: HPalette;
begin
{ Create some DCs to hold temporary data }
BackDC := CreateCompatibleDC(DstDC);
ObjectDC := CreateCompatibleDC(DstDC);
MemDC := CreateCompatibleDC(DstDC);
SaveDC := CreateCompatibleDC(DstDC);
{ Create a bitmap for each DC }
bmAndObject := CreateBitmap(SrcW, SrcH, 1, 1, nil);
bmAndBack := CreateBitmap(SrcW, SrcH, 1, 1, nil);
bmAndMem := CreateCompatibleBitmap(DstDC, DstW, DstH);
bmSave := CreateCompatibleBitmap(DstDC, SrcW, SrcH);
{ Each DC must select a bitmap object to store pixel data }
bmBackOld := SelectObject(BackDC, bmAndBack);
bmObjectOld := SelectObject(ObjectDC, bmAndObject);
bmMemOld := SelectObject(MemDC, bmAndMem);
bmSaveOld := SelectObject(SaveDC, bmSave);
{ Select palette }
palDst := 0; palMem := 0; palSave := 0; palObj := 0;
if Palette <> 0 then begin
palDst := SelectPalette(DstDC, Palette, True);
RealizePalette(DstDC);
palSave := SelectPalette(SaveDC, Palette, False);
RealizePalette(SaveDC);
palObj := SelectPalette(ObjectDC, Palette, False);
RealizePalette(ObjectDC);
palMem := SelectPalette(MemDC, Palette, True);
RealizePalette(MemDC);
end;
{ Set proper mapping mode }
SetMapMode(SrcDC, GetMapMode(DstDC));
SetMapMode(SaveDC, GetMapMode(DstDC));
{ Save the bitmap sent here }
BitBlt(SaveDC, 0, 0, SrcW, SrcH, SrcDC, SrcX, SrcY, SRCCOPY);
{ Set the background color of the source DC to the color, }
{ contained in the parts of the bitmap that should be transparent }
Color := SetBkColor(SaveDC, PaletteColor(TransparentColor));
{ Create the object mask for the bitmap by performing a BitBlt() }
{ from the source bitmap to a monochrome bitmap }
BitBlt(ObjectDC, 0, 0, SrcW, SrcH, SaveDC, 0, 0, SRCCOPY);
{ Set the background color of the source DC back to the original }
SetBkColor(SaveDC, Color);
{ Create the inverse of the object mask }
BitBlt(BackDC, 0, 0, SrcW, SrcH, ObjectDC, 0, 0, NOTSRCCOPY);
{ Copy the background of the main DC to the destination }
BitBlt(MemDC, 0, 0, DstW, DstH, DstDC, DstX, DstY, SRCCOPY);
{ Mask out the places where the bitmap will be placed }
StretchBlt(MemDC, 0, 0, DstW, DstH, ObjectDC, 0, 0, SrcW, SrcH, SRCAND);
{ Mask out the transparent colored pixels on the bitmap }
BitBlt(SaveDC, 0, 0, SrcW, SrcH, BackDC, 0, 0, SRCAND);
{ XOR the bitmap with the background on the destination DC }
StretchBlt(MemDC, 0, 0, DstW, DstH, SaveDC, 0, 0, SrcW, SrcH, SRCPAINT);
{ Copy the destination to the screen }
BitBlt(DstDC, DstX, DstY, DstW, DstH, MemDC, 0, 0,
SRCCOPY);
{ Restore palette }
if Palette <> 0 then begin
SelectPalette(MemDC, palMem, False);
SelectPalette(ObjectDC, palObj, False);
SelectPalette(SaveDC, palSave, False);
SelectPalette(DstDC, palDst, True);
end;
{ Delete the memory bitmaps }
DeleteObject(SelectObject(BackDC, bmBackOld));
DeleteObject(SelectObject(ObjectDC, bmObjectOld));
DeleteObject(SelectObject(MemDC, bmMemOld));
DeleteObject(SelectObject(SaveDC, bmSaveOld));
{ Delete the memory DCs }
DeleteDC(MemDC);
DeleteDC(BackDC);
DeleteDC(ObjectDC);
DeleteDC(SaveDC);
end;
procedure StretchBitmapTransparent(Dest: TCanvas; Bitmap: TBitmap;
TransparentColor: TColor; DstX, DstY, DstW, DstH, SrcX, SrcY,
SrcW, SrcH: Integer);
var
CanvasChanging: TNotifyEvent;
begin
if DstW <= 0 then DstW := Bitmap.Width;
if DstH <= 0 then DstH := Bitmap.Height;
if (SrcW <= 0) or (SrcH <= 0) then begin
SrcX := 0; SrcY := 0;
SrcW := Bitmap.Width;
SrcH := Bitmap.Height;
end;
if not Bitmap.Monochrome then
SetStretchBltMode(Dest.Handle, STRETCH_DELETESCANS);
CanvasChanging := Bitmap.Canvas.OnChanging;
Bitmap.Canvas.Lock;
try
Bitmap.Canvas.OnChanging := nil;
if TransparentColor = clNone then begin
StretchBlt(Dest.Handle, DstX, DstY, DstW, DstH, Bitmap.Canvas.Handle,
SrcX, SrcY, SrcW, SrcH, Dest.CopyMode);
end
else begin
if TransparentColor = clDefault then
TransparentColor := Bitmap.Canvas.Pixels[0, Bitmap.Height - 1];
if Bitmap.Monochrome then TransparentColor := clWhite
else TransparentColor := ColorToRGB(TransparentColor);
StretchBltTransparent(Dest.Handle, DstX, DstY, DstW, DstH,
Bitmap.Canvas.Handle, SrcX, SrcY, SrcW, SrcH, Bitmap.Palette,
TransparentColor);
end;
finally
Bitmap.Canvas.OnChanging := CanvasChanging;
Bitmap.Canvas.Unlock;
end;
end;
procedure DrawBitmapTransparent(Dest: TCanvas; DstX, DstY: Integer;
Bitmap: TBitmap; TransparentColor: TColor);
begin
StretchBitmapTransparent(Dest, Bitmap, TransparentColor, DstX, DstY,
Bitmap.Width, Bitmap.Height, 0, 0, Bitmap.Width, Bitmap.Height);
end;
var
Image: TGraphic;
begin
if Index < 0 then Image := Picture.Graphic
else Image := GraphicCell[Index];
if (Image <> nil) and not Image.Empty then begin
if FMasked and (FMaskColor <> clNone) and
(Picture.Graphic is TBitmap) then
DrawBitmapTransparent(Canvas, X, Y, TBitmap(Image), FMaskColor)
else Canvas.Draw(X, Y, Image);
end;
end;
 
procedure TDXPictureClip.DrawCenter(Canvas: TCanvas; Rect: TRect; Index: Integer);
var
X, Y: Integer;
begin
X := (Rect.Left + Rect.Right - Width) div 2;
Y := (Rect.Bottom + Rect.Top - Height) div 2;
Draw(Canvas, X, Y, Index);
end;
 
procedure TDXPictureClip.CheckIndex(Index: Integer);
begin
if (Index >= Cols * Rows) or (Index < 0) then
raise EListError.CreateFmt('%s (%d)', ['Load list error', Index]);
end;
 
function TDXPictureClip.GetIndex(Col, Row: Cardinal): Integer;
begin
Result := Col + (Row * Cols);
if (Result >= Cols * Rows) or IsEmpty then Result := -1;
end;
 
function TDXPictureClip.GetCell(Col, Row: Cardinal): TBitmap;
begin
Result := GetGraphicCell(GetIndex(Col, Row));
end;
 
function TDXPictureClip.GetGraphicCell(Index: Integer): TBitmap;
procedure AssignBitmapCell(Source: TGraphic; Dest: TBitmap; Cols, Rows,
Index: Integer);
var
CellWidth, CellHeight: Integer;
begin
if (Source <> nil) and (Dest <> nil) then begin
if Cols <= 0 then Cols := 1;
if Rows <= 0 then Rows := 1;
if Index < 0 then Index := 0;
CellWidth := Source.Width div Cols;
CellHeight := Source.Height div Rows;
with Dest do begin
Width := CellWidth; Height := CellHeight;
end;
if Source is TBitmap then begin
Dest.Canvas.CopyRect(Bounds(0, 0, CellWidth, CellHeight),
TBitmap(Source).Canvas, Bounds((Index mod Cols) * CellWidth,
(Index div Cols) * CellHeight, CellWidth, CellHeight));
Dest.TransparentColor := TBitmap(Source).TransparentColor;
end
else begin
Dest.Canvas.Brush.Color := clSilver;
Dest.Canvas.FillRect(Bounds(0, 0, CellWidth, CellHeight));
Dest.Canvas.Draw(-(Index mod Cols) * CellWidth,
-(Index div Cols) * CellHeight, Source);
end;
Dest.Transparent := Source.Transparent;
end;
end;
begin
CheckIndex(Index);
AssignBitmapCell(Picture.Graphic, FBitmap, Cols, Rows, Index);
if Picture.Graphic is TBitmap then
if FBitmap.PixelFormat <> pfDevice then
FBitmap.PixelFormat := TBitmap(Picture.Graphic).PixelFormat;
FBitmap.TransparentColor := FMaskColor or PaletteMask;
FBitmap.Transparent := (FMaskColor <> clNone) and Masked;
Result := FBitmap;
end;
 
function TDXPictureClip.GetDefaultMaskColor: TColor;
begin
Result := clOlive;
if (Picture.Graphic <> nil) and (Picture.Graphic is TBitmap) then
Result := TBitmap(Picture.Graphic).TransparentColor and
not PaletteMask;
end;
 
function TDXPictureClip.GetHeight: Integer;
begin
Result := Picture.Height div FRows;
end;
 
function TDXPictureClip.GetWidth: Integer;
begin
Result := Picture.Width div FCols;
end;
 
function TDXPictureClip.IsMaskStored: Boolean;
begin
Result := MaskColor <> GetDefaultMaskColor;
end;
 
procedure TDXPictureClip.SetMaskColor(Value: TColor);
begin
if Value <> FMaskColor then begin
FMaskColor := Value;
Changed;
end;
end;
 
procedure TDXPictureClip.PictureChanged(Sender: TObject);
begin
FMaskColor := GetDefaultMaskColor;
if not (csReading in ComponentState) then Changed;
end;
 
procedure TDXPictureClip.SetHeight(Value: Integer);
begin
if (Value > 0) and (Picture.Height div Value > 0) then
Rows := Picture.Height div Value;
end;
 
procedure TDXPictureClip.SetWidth(Value: Integer);
begin
if (Value > 0) and (Picture.Width div Value > 0) then
Cols := Picture.Width div Value;
end;
 
procedure TDXPictureClip.SetPicture(Value: TPicture);
begin
FPicture.Assign(Value);
end;
 
{ Transformations routines }
{ Authorisation: Mr. Takanori Kawasaki}
 
//Distance between 2 points is calculated
function Get2PointRange(a,b: TDblPoint):Double;
var
x,y: Double;
begin
x := a.X - b.X;
y := a.Y - b.Y;
Result := Sqrt(x*x+y*y);
end;
 
//Direction angle in the coordinate A which was seen from coordinate B is calculated
function GetARadFromB(A,B: TDblPoint):Double;
var
dX,dY: Double;
begin
dX := A.X - B.X;
dY := A.Y - B.Y;
Result := Get256(dX,dY);
end;
 
//Direction angle is returned with 0 - 255.
function Get256(dX,dY:Double):Double;
begin
Result := 0;
if dX > 0 then
begin//0-63
if dY > 0 then Result := ArcTan(dY / dX) // 0 < Res < 90
else//0
if dY = 0 then Result := 0 // 0
else//192-255
if dY < 0 then Result := 2*Pi + ArcTan(dY / dX) // 270 < Res < 360
end else
if dX = 0 then
begin//64
if dY > 0 then Result := 1 / 2 * Pi // 90
else//0
if dY = 0 then Result := 0 // 0
else//192
if dY < 0 then Result := 3 / 2 * Pi // 270
end else
if dX < 0 then
begin//64-127
if dY > 0 then Result := Pi + ArcTan(dY / dX) // 90 < Res < 180
else//128
if dY = 0 then Result := Pi // 180
else//128-191
if dY < 0 then Result := Pi + ArcTan(dY / dX) // 180 < Res < 270
end;
Result := 256 * Result / (2*Pi);
end;
 
//From the coordinate SP the Range it calculates the point which leaves with the angular Angle
function GetPointFromRangeAndAngle(SP: TDblPoint; Range,Angle: Double): TDblPoint;
begin
Result.X := SP.X + Range * Cos(Angle);
Result.Y := SP.Y + Range * Sin(Angle);
end;
 
//* As for coordinate transformation coordinate for mathematics is used
//Identity matrix for the 2d is returned.
function Ini2DRowCol: T2DRowCol;
var
i,ii:integer;
begin
for i := 1 to 3 do
for ii := 1 to 3 do
if i = ii then Result[i,ii] := 1 else Result[i,ii] := 0;
end;
 
//Transformation matrix of the portable quantity
//where the one for 2d is appointed is returned.
function Trans2DRowCol(x,y:double):T2DRowCol;
begin
Result := Ini2DRowCol;
Result[3,1] := x;
Result[3,2] := y;
end;
 
//Conversion coordinate of the expansion and contraction
//quantity where the one for 2d is appointed is returned.
function Scale2DRowCol(x,y:double):T2DRowCol;
begin
Result := Ini2DRowCol;
Result[1,1] := x;
Result[2,2] := y;
end;
 
//Coordinate transformation of the rotary quantity
//where the one for 2d is appointed is returned.
function Rotate2DRowCol(Theta:double):T2DRowCol;
begin
Result := Ini2DRowCol;
Result[1,1] := Cos256(Trunc(Theta));
Result[1,2] := Sin256(Trunc(Theta));
Result[2,1] := -1 * Result[1,2];
Result[2,2] := Result[1,1];
end;
 
//You apply two conversion coordinates and adjust.
function Multiply2DRowCol(A,B:T2DRowCol):T2DRowCol;
begin
Result[1,1] := A[1,1] * B[1,1] + A[1,2] * B[2,1];
Result[1,2] := A[1,1] * B[1,2] + A[1,2] * B[2,2];
Result[1,3] := 0;
Result[2,1] := A[2,1] * B[1,1] + A[2,2] * B[2,1];
Result[2,2] := A[2,1] * B[1,2] + A[2,2] * B[2,2];
Result[2,3] := 0;
Result[3,1] := A[3,1] * B[1,1] + A[3,2] * B[2,1] + B[3,1];
Result[3,2] := A[3,1] * B[1,2] + A[3,2] * B[2,2] + B[3,2];
Result[3,3] := 1;
end;
 
//Until coordinate (the X and the Y) comes on the X axis,
//the conversion coordinate which turns the position
//of the point is returned.
function RotateIntoX2DRowCol(x,y: double):T2DRowCol;
var
d: double;
begin
Result := Ini2DRowCol;
d := sqrt(x*x+y*y);
Result[1,1] := x / d;
Result[1,2] := y / d;
Result[2,1] := -1 * Result[1,2];
Result[2,2] := Result[1,1];
end;
 
//Coordinate (the X and the Y) as a center, the conversion
//coordinate which does the scaling of the magnification ratio
//which is appointed with the Sx and the Sy is returned.
function ScaleAt2DRowCol(x,y,Sx,Sy:double):T2DRowCol;
var
T,S,TInv,M:T2DRowCol;
begin
T := Trans2DRowCol(-x,-y);
TInv := Trans2DRowCol(x,y);
S := Scale2DRowCol(Sx,Sy);
M := Multiply2DRowCol(T,S);
Result := Multiply2DRowCol(M,T);
end;
 
//Coordinate (the X and the Y) it passes, comes hard and
//(DX and the dy) with the direction which is shown it
//returns the transformation matrix which does the reflected
//image conversion which centers the line which faces.
function ReflectAcross2DRowCol(x,y,dx,dy:Double): T2DRowCol;
var
T,R,S,RInv,TInv,M1,M2,M3: T2DRowCol;
begin
T := Trans2DRowCol(-x,-y);
TInv := Trans2DRowCol(x,y);
R := RotateIntoX2DRowCol(dx,dy);
RInv := RotateIntoX2DRowCol(dx,-dy);
S := Scale2DRowCol(1,-1);
M1 := Multiply2DRowCol(T,R);
M2 := Multiply2DRowCol(S,RInv);
M3 := Multiply2DRowCol(M1,M2);
Result := Multiply2DRowCol(M3,TInv);
end;
 
//Coordinate focusing on (the X and the Y) the transformation
//matrix which turns the position of the point with angle Theta is returned.
function RotateAround2DRowCol(x,y,Theta:Double): T2DRowCol;
var
T,R,TInv,M: T2DRowCol;
begin
T := Trans2DRowCol(-x,-y);
TInv := Trans2DRowCol(x,y);
R := Rotate2DRowCol(Theta);
M := Multiply2DRowCol(T,R);
Result := Multiply2DRowCol(M,TInv);
end;
 
//Transformation matrix is applied to the point.
function Apply2DVector(V:T2DVector; M:T2DRowCol): T2DVector;
begin
Result[1] := V[1] * M[1,1] + V[2] * M[2,1] + M[3,1];
Result[2] := V[1] * M[1,2] + V[2] * M[2,2] + M[3,2];
Result[3] := 1;
end;
 
//The TDblPoint is returned
function DblPoint(a,b:Double):TDblPoint;
begin
Result.X := a;
Result.Y := b;
end;
 
function TruncDblPoint(DblPos: TDblPoint): TPoint;
begin
Result.X := Trunc(DblPos.X);
Result.Y := Trunc(DblPos.Y);
end;
{
+-----------------------------------------------------------------------------+
|Collision decision |
+-----------------------------------------------------------------------------+}
 
//Point and circle
function PointInCircle(PPos,CPos: TPoint; R: integer): Boolean;
begin
Result := (PPos.X - CPos.X)*(PPos.X - CPos.X)+(PPos.Y - CPos.Y)*(PPos.Y - CPos.Y)<= R*R;
end;
 
//Circle and circle
function CircleInCircle(C1Pos,C2Pos: TPoint; R1,R2:Integer): Boolean;
begin
Result := (C1Pos.X - C2Pos.X)*(C1Pos.X - C2Pos.X)+(C1Pos.Y - C2Pos.Y)*(C1Pos.Y - C2Pos.Y) <= (R1+R2)*(R1+R2);
end;
 
//Circle and line segment
function SegmentInCircle(SPos,EPos,CPos: TPoint; R: Integer): Boolean;
var
V,C: TPoint;
VC,VV,CC:integer;
begin
Result := False;
V.X := EPos.X - SPos.X; V.Y := EPos.Y - SPos.Y;
C.X := CPos.X - SPos.X; C.Y := CPos.Y - SPos.Y;
VC := V.X * C.X + V.Y * C.Y;
if VC < 0 then
begin
Result := (C.X * C.X + C.Y * C.Y) <= R*R;
end
else
begin
VV := V.X * V.X + V.Y * V.Y;
if VC >= VV then
begin
Result := (EPos.X - CPos.X)*(EPos.X - CPos.X)+(EPos.Y - CPos.Y)*(EPos.Y - CPos.Y) <= R * R;
end
else
if VC < VV then
begin
CC := C.X * C.X + C.Y * C.Y;
Result := CC - (VC div VV)* VC <= R*R;
end;
end;
end;
 
//Angle recalc
function Angle256(Angle: Single): Single;
begin
Result := Angle;
While Result < 0 do Result := Result + 256;
While Result >= 256 do Result := Result -256;
end;
 
//If A is closer than B from starting point S, the True is returned.
function CheckNearAThanB(S,A,B: TDblPoint): Boolean;
begin
Result := (S.X-A.X)*(S.X-A.X)+(S.Y-A.Y)*(S.Y-A.Y) <= (S.X-B.X)*(S.X-B.X)+(S.Y-B.Y)*(S.Y-B.Y);
end;
 
function CircumCenter3Pt(const x1, y1, x2, y2, x3, y3: Single; out Px, Py: Single): Boolean;
var
A,B,C,D,E,F,G: Single;
begin
A := x2 - x1;
B := y2 - y1;
C := x3 - x1;
D := y3 - y1;
E := A * (x1 + x2) + B * (y1 + y2);
F := C * (x1 + x3) + D * (y1 + y3);
G := 2.0 * (A * (y3 - y2) - B * (x3 - x2));
Result := G <> 0.0;
if Result then begin
Px := (D * E - B * F) / G;
Py := (A * F - C * E) / G;
end;
end;
 
function Distance(const x1, y1, x2, y2: Double): Double;
begin
Result := Sqrt(Sqr(y2 - y1) + Sqr(x2 - x1));
end;
 
procedure InCenter(const x1, y1, x2, y2, x3, y3: Double; out Px, Py: Double);
var
Perim: Double;
Side12: Double;
Side23: Double;
Side31: Double;
begin
Side12 := Distance(x1, y1, x2, y2);
Side23 := Distance(x2, y2, x3, y3);
Side31 := Distance(x3, y3, x1, y1);
{ Using Heron's S=UR }
Perim := 1.0 / (Side12 + Side23 + Side31);
Px := (Side23 * x1 + Side31 * x2 + Side12 * x3) * Perim;
Py := (Side23 * y1 + Side31 * y2 + Side12 * y3) * Perim;
end;
 
function PointInTriangle(const Px, Py, x1, y1, x2, y2, x3, y3: Double): Boolean;
function Orientation(const x1, y1, x2, y2, Px, Py: Double): Integer;
var
Orin: Double;
begin
(* Linear determinant of the 3 points *)
Orin := (x2 - x1) * (py - y1) - (px - x1) * (y2 - y1);
 
if Orin > 0.0 then
Result := +1 (* Orientaion is to the right-hand side *)
else if Orin < 0.0 then
Result := -1 (* Orientaion is to the left-hand side *)
else
Result := 0; (* Orientaion is neutral aka collinear *)
end;
var
Or1, Or2, Or3: Integer;
begin
Or1 := Orientation(x1, y1, x2, y2, Px, Py);
Or2 := Orientation(x2, y2, x3, y3, Px, Py);
Or3 := Orientation(x3, y3, x1, y1, Px, Py);
 
if (Or1 = Or2) and (Or2 = Or3) then
Result := True
else if Or1 = 0 then
Result := (Or2 = 0) or (Or3 = 0)
else if Or2 = 0 then
Result := (Or1 = 0) or (Or3 = 0)
else if Or3 = 0 then
Result := (Or2 = 0) or (Or1 = 0)
else
Result := False;
end;
 
procedure Log(const Co: string; const FName: string);
var F: Text; D: TDateTime;
Hour, Minute, Second, MSec: Word;
begin
AsSignFile(F, FName);
if FileExists(FName) then Append(F)
else ReWrite(F);
try
D := Now;
DecodeTime(D, Hour, Minute, Second, MSec);
WriteLn(F, DateToStr(D) + ' ' + IntToStr(Hour)+':'+IntToStr(Minute)+':'+IntToStr(Second)+ '.'+IntToStr(MSec) +' ' + Co);
finally
CloseFile(F);
end;
end;
 
{$IFDEF _DMO_}
 
{ TDirectXDriverEx }
 
function TDirectXDriverEx.ConvertHMonitor(iMonitor: HMonitor): TMonitorInfo;
begin
ZeroMemory(@Result, sizeof(Result));
Result.cbSize := SizeOf(Result);
MultiMon.GetMonitorInfo(iMonitor, @Result);
end;
 
function TDirectXDriverEx.GetFlags: DWORD;
begin
Result := ConvertHMonitor(FMonitor).dwFlags;
end;
 
function TDirectXDriverEx.GetMonitorInfo: TMonitorInfo;
begin
Result:= ConvertHMonitor(FMonitor);
end;
 
function TDirectXDriverEx.GetTempSpace: TRect;
begin
Result := ConvertHMonitor(FMonitor).rcWork
end;
 
function TDirectXDriverEx.GetWorkSpace: TRect;
begin
Result := ConvertHMonitor(FMonitor).rcMonitor
end;
 
procedure TDirectXDriverEx.SetGUID(Value: PGUID);
begin
if not IsBadHugeReadPtr(Value, SizeOf(TGUID)) then
begin
FGUID2 := Value^;
FGUID := @FGUID2;
end else
FGUID := Value;
end;
 
{ TDirectXDriversEx }
 
constructor TDirectXDriversEx.Create;
begin
inherited Create(TDirectXDriverEx);
end;
 
function TDirectXDriversEx.GetDriver(Index: Integer): TDirectXDriverEx;
begin
Result := (inherited Items[Index]) as TDirectXDriverEx;
end;
 
{$ENDIF}
 
initialization
InitCosinTable;
finalization
FreeLibList;
end.
end.
/VCL_DELPHIX_D6/DXConsts.pas
22,7 → 22,7
SSession = 'Session';
 
SNotMade = '%s not made';
SStreamNotOpend = 'Stream not opend';
SStreamNotOpend = 'Stream not opened';
SWaveStreamNotSet = 'WaveStream not set';
SCannotMade = '%s cannot be made';
SCannotInitialized = '%s cannot be initialized';
29,7 → 29,7
SCannotChanged = '%s cannot be changed';
SCannotLock = '%s cannot be locked';
SCannotOpened = '%s cannot be opened';
SDLLNotLoaded = '%s not loaded';
SDLLNotLoaded = '%s is not loaded';
SImageNotFound = 'Image ''%s'' not found';
SWaveNotFound = 'Wave ''%s'' not found';
SEffectNotFound = 'Effect ''%s'' not found';
36,32 → 36,32
SListIndexError = 'Index of the list exceeds the range. (%d)';
SScanline = 'Index of the scanning line exceeded the range. (%d)';
SNoForm = 'Form not found';
SSinceDirectX5 = 'Necessary since DirectX 5';
SSinceDirectX6 = 'Necessary since DirectX 6';
SSinceDirectX7 = 'Necessary since DirectX 7';
SSinceDirectX5 = 'Requires DirectX 5.0 or later';
SSinceDirectX6 = 'Requires DirectX 6.0 or later';
SSinceDirectX7 = 'Requires DirectX 7.0 or later';
S3DDeviceNotFound = '3D device not found';
SDisplayModeChange = 'Display mode cannot be changed (%dx%d %dbit)';
SDisplayModeCannotAcquired = 'A present display mode cannot be acquired';
SDisplayModeCannotAcquired = 'Display mode cannot be acquired';
SInvalidDIB = 'DIB is invalid';
SInvalidDIBBitCount = 'Bitcount in invalid (%d)';
SInvalidDIBPixelFormat = 'PixelFormat in invalid';
SInvalidWave = 'Wave is invalid';
SInvalidDisplayBitCount = 'It should be either of 8 or 16 or 24 or 32';
SInvalidDisplayBitCount = 'Display requires 8, 16, 24 or 32 bits';
SInvalidWaveFormat = 'Format is invalid';
SNotSupported = '%s not supported';
SStreamOpend = 'Stream has already been opened';
SNecessaryDirectInputUseMouse = 'DirectInput is necessary to use the mouse';
SStreamOpend = 'Stream is already open';
SNecessaryDirectInputUseMouse = 'DirectInput is required for mouse support';
 
{ DirectPlay }
SDXPlayNotConnectedNow = 'TDXPlay component is not connected now.';
SDXPlayNotConnectedNow = 'TDXPlay component is disconnected.';
SDXPlayProviderNotFound = 'Provider ''%s'' not found';
SDXPlayProviderSpecifiedGUIDNotFound = 'Provider of specified GUID is not found';
SDXPlayProviderSpecifiedGUIDNotFound = 'Provider''s specified GUID is not found';
SDXPlayModemListCannotBeAcquired = 'Modem list cannot be acquired';
SDXPlaySessionListCannotBeAcquired = 'Session list cannot be acquired';
SDXPlaySessionNotFound = 'Session ''%s'' not found';
SDXPlaySessionCannotOpened = 'Session %s cannot be opened';
SDXPlayPlayerNotFound = 'The player of specified ID is not found';
SDXPlayMessageIllegal = 'The message form is illegal';
SDXPlayPlayerNotFound = 'Player''s specified ID is not found';
SDXPlayMessageIllegal = 'Illegal message form';
SDXPlayPlayerNameIsNotSpecified = 'Player name is not specified';
SDXPlaySessionNameIsNotSpecified = 'Session name is not specified';
 
69,12 → 69,11
DXPlayFormComplete = 'Complete';
 
 
SNotSupportGraphicFile = 'Graphic format not suported';
SInvalidDXTFile = 'DXT file is invalid';
SCannotLoadGraphic = 'Can not load graphic';
SOverlay = 'Surface overlay not possible';
SNotSupportGraphicFile = 'This format graphic not suported';
SInvalidDXTFile = 'This DXT file is invalid';
SCannotLoadGraphic = 'Can''t Load this Graphic';
SOverlay = 'Not posible Overlay Surface';
 
const
SDIBSize = '(%dx%d)';
SDIBColor = '%d color';
/VCL_DELPHIX_D6/DXDIBEffectEdit.pas
0,0 → 1,373
unit DXDIBEffectEdit;
//(c)2007 Jaro Benes
//All Rights Reserved
 
{
Complex application for users of unDelphiX as component editor:
 
Supported:
a) create effect for store into dximagelist.
 
}
interface
 
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DIB, ExtCtrls, Math, ComCtrls, Buttons, ExtDlgs, Spin;
 
type
{injected class}
EInvalidTypeConvert = class(Exception);
TEdit = class(StdCtrls.TEdit)
private
procedure SetAsInteger(Value: Integer);
function GetAsInteger: Integer;
public
property AsInteger: Integer read GetAsInteger write SetAsInteger;
end;
TTDelphiXDIBEffectEditForm = class(TForm)
Button1: TButton;
Image1: TImage;
LSpokes: TLabel;
LRaHUE: TLabel;
LCentr: TLabel;
eR: TEdit;
eG: TEdit;
eB: TEdit;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
randSpok: TEdit;
Label7: TLabel;
RandGauss: TEdit;
Label8: TLabel;
rS_max: TSpeedButton;
rG_max: TSpeedButton;
Bevel1: TBevel;
PictSize: TRadioGroup;
SavePictureDialog1: TSavePictureDialog;
Bevel2: TBevel;
R_updown: TSpinButton;
G_updown: TSpinButton;
B_updown: TSpinButton;
btnOK: TButton;
btnCancel: TButton;
Panel1: TPanel;
Bevel3: TBevel;
Spokes: TProgressBar;
RaHUE: TProgressBar;
Centr: TProgressBar;
SpokesPlus: TSpeedButton;
SpokesMinus: TSpeedButton;
RaHUEPlus: TSpeedButton;
RaHUEMinus: TSpeedButton;
CentrPlus: TSpeedButton;
CentrMinus: TSpeedButton;
LName: TLabel;
eName: TEdit;
procedure CentrMinusClick(Sender: TObject);
procedure CentrPlusClick(Sender: TObject);
procedure RaHUEMinusClick(Sender: TObject);
procedure RaHUEPlusClick(Sender: TObject);
procedure SpokesMinusClick(Sender: TObject);
procedure SpokesPlusClick(Sender: TObject);
procedure CentrMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure RaHUEMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure SpokesMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormDestroy(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ImageChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure rS_maxClick(Sender: TObject);
procedure rG_maxClick(Sender: TObject);
procedure R_updownUpClick(Sender: TObject);
procedure R_updownDownClick(Sender: TObject);
procedure G_updownUpClick(Sender: TObject);
procedure G_updownDownClick(Sender: TObject);
procedure B_updownUpClick(Sender: TObject);
procedure B_updownDownClick(Sender: TObject);
private
{ Private declarations }
FSpokes: Integer;
FRaHUE: Integer;
FCentr: Integer;
procedure Calculate;
public
{ Public declarations }
ResultDIB: TDIB;
end;
 
var
DelphiXDIBEffectEditForm: TTDelphiXDIBEffectEditForm;
 
implementation
 
{$R *.DFM}
 
{ TEdit }
 
{injected class functionality like in jbEdit.TPubEdit component}
 
procedure TEdit.SetAsInteger(Value: Integer);
begin
Text := IntToStr(Value)
end;
 
function TEdit.GetAsInteger: Integer;
begin
Result := 0;
if Text = '' then
Exit;
try
Result := StrToInt(Text);
except
raise EInvalidTypeConvert.Create('Expected integer value !');
end
end;
 
{ TTDelphiXDIBEffectEditForm }
 
procedure TTDelphiXDIBEffectEditForm.Calculate;
const
wSize: array[0..5] of Word = (256, 128, 64, 32, 16, 8);
begin
// call this
// cx,cy : center x and y
// radius : 1-100
// spokes : 1-1024
// randomhue : 0-360
ResultDIB.Clear;
ResultDIB.SetSize(wSize[PictSize.ItemIndex], wSize[PictSize.ItemIndex], 24);
ResultDIB.Canvas.Brush.Color := clBlack;
ResultDIB.Canvas.FillRect(ResultDIB.Canvas.ClipRect);
 
LSpokes.Caption := Format('Spokes (%d)', [FSpokes]);
LRaHUE.Caption := Format('Random HUE (%d)', [FRaHUE]);
LCentr.Caption := Format('Nova radius (%d)', [FCentr]);
 
ResultDIB.DoNovaEffect(eR.AsInteger, eG.AsInteger, eB.AsInteger, ResultDIB.Width div 2,
ResultDIB.Height div 2, FCentr, FSpokes, FRaHUE,
randSpok.AsInteger, randGauss.AsInteger, nil);
 
Image1.Picture.Assign(ResultDIB);
end;
 
procedure TTDelphiXDIBEffectEditForm.Button1Click(Sender: TObject);
begin
Calculate;
if SavePictureDialog1.Execute then
ResultDIB.SaveToFile(SavePictureDialog1.FileName);
end;
 
procedure TTDelphiXDIBEffectEditForm.FormCreate(Sender: TObject);
begin
Tag := 0;
ResultDIB := TDIB.Create;
Randomize;
randspok.AsInteger := Random(MAXSHORT);
randgauss.AsInteger := Random(MAXSHORT);
FSpokes := 255; Spokes.Position := FSpokes; {$IFDEF VER4UP} Spokes.Smooth := True; {$ENDIF}
FRaHUE := 1; RaHUE.Position := FRaHUE; {$IFDEF VER4UP} RaHUE.Smooth := True; {$ENDIF}
FCentr := 18; Centr.Position := FCentr; {$IFDEF VER4UP} Centr.Smooth := True; {$ENDIF}
LSpokes.Caption := Format('Spokes (%d)', [FSpokes]);
LRaHUE.Caption := Format('Random HUE (%d)', [FRaHUE]);
LCentr.Caption := Format('Nova radius (%d)', [FCentr]);
Calculate;
randSpok.OnChange := ImageChange;
randgauss.OnChange := ImageChange;
{$IFDEF VER4UP}
Spokes.Smooth := True;
RaHUE.Smooth := True;
Centr.Smooth := True;
{$ENDIF}
end;
 
procedure TTDelphiXDIBEffectEditForm.rS_maxClick(Sender: TObject);
begin
RandSpok.AsInteger := maxint;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.rG_maxClick(Sender: TObject);
begin
RandGauss.AsInteger := maxint;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.R_updownUpClick(Sender: TObject);
begin
if eR.AsInteger < 255 then eR.AsInteger := eR.AsInteger + 1;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.R_updownDownClick(Sender: TObject);
begin
if eR.AsInteger > 0 then eR.AsInteger := eR.AsInteger - 1;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.G_updownUpClick(Sender: TObject);
begin
if eG.AsInteger < 255 then eG.AsInteger := eG.AsInteger + 1;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.G_updownDownClick(Sender: TObject);
begin
if eG.AsInteger > 0 then eG.AsInteger := eG.AsInteger - 1;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.B_updownUpClick(Sender: TObject);
begin
if eB.AsInteger < 255 then eB.AsInteger := eB.AsInteger + 1;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.B_updownDownClick(Sender: TObject);
begin
if eB.AsInteger > 0 then eB.AsInteger := eB.AsInteger - 1;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.btnCancelClick(Sender: TObject);
begin
Close;
end;
 
procedure TTDelphiXDIBEffectEditForm.btnOKClick(Sender: TObject);
begin
if eName.Text <> '' then begin
Tag := 1;
Close;
end
else
MessageDlg('Image name required!', mtWarning, [mbOK], 0);;
end;
 
procedure TTDelphiXDIBEffectEditForm.FormDestroy(Sender: TObject);
begin
ResultDIB.Free;
end;
 
procedure TTDelphiXDIBEffectEditForm.ImageChange(Sender: TObject);
begin
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.SpokesMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
newPosition: integer;
begin
with Sender as TProgressBar do begin
if ssLeft in Shift then
begin
Cursor := crHSplit;
newPosition := Round(x * Max / ClientWidth);
Position := newPosition;
end
else
begin
Cursor := crDefault;
end;
FSpokes := Position;
LSpokes.Caption := Format('Spokes (%d)', [FSpokes]);
if ssLeft in Shift then Calculate;
end;
end;
 
procedure TTDelphiXDIBEffectEditForm.RaHUEMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
newPosition: integer;
begin
with Sender as TProgressBar do begin
if ssLeft in Shift then
begin
Cursor := crHSplit;
newPosition := Round(x * Max / ClientWidth);
Position := newPosition;
end
else
begin
Cursor := crDefault;
end;
FRaHUE := Position;
LRaHUE.Caption := Format('Random HUE (%d)', [FRaHUE]);
if ssLeft in Shift then Calculate;
end;
end;
 
procedure TTDelphiXDIBEffectEditForm.CentrMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
newPosition: integer;
begin
with Sender as TProgressBar do begin
if ssLeft in Shift then
begin
Cursor := crHSplit;
newPosition := Round(x * Max / ClientWidth);
Position := newPosition;
end
else
begin
Cursor := crDefault;
end;
FCentr := Position;
LCentr.Caption := Format('Nova radius (%d)', [FCentr]);
if ssLeft in Shift then Calculate;
end;
end;
 
procedure TTDelphiXDIBEffectEditForm.SpokesPlusClick(Sender: TObject);
begin
Inc(FSpokes); if FSpokes > 1024 then FSpokes := 1024;
Spokes.Position := FSpokes;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.SpokesMinusClick(Sender: TObject);
begin
Dec(FSpokes); if FSpokes < 1 then FSpokes := 1;
Spokes.Position := FSpokes;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.RaHUEPlusClick(Sender: TObject);
begin
Inc(FRaHUE); if FRaHUE > 360 then FRaHUE := 360;
RaHUE.Position := FRaHUE;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.RaHUEMinusClick(Sender: TObject);
begin
Dec(FRaHUE); if FRaHUE < 0 then FRaHUE := 0;
RaHUE.Position := FRaHUE;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.CentrPlusClick(Sender: TObject);
begin
Inc(FCentr); if FCentr > 100 then FCentr := 100;
Centr.Position := FCentr;
Calculate;
end;
 
procedure TTDelphiXDIBEffectEditForm.CentrMinusClick(Sender: TObject);
begin
Dec(FCentr); if FCentr < 1 then FCentr := 1;
Centr.Position := FCentr;
Calculate;
end;
 
end.
/VCL_DELPHIX_D6/DXFFBEdit.dfm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/VCL_DELPHIX_D6/DXGUIDEdit.dfm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/VCL_DELPHIX_D6/DXGlueItEdit.dfm
0,0 → 1,4846
object DXGlueItEditor: TDXGlueItEditor
Left = 326
Top = 290
BorderStyle = bsSingle
Caption = 'Glue-It'
ClientHeight = 504
ClientWidth = 659
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Panel5: TPanel
Left = 571
Top = 0
Width = 88
Height = 504
Align = alRight
BevelOuter = bvNone
TabOrder = 0
object Image2: TImage
Left = 0
Top = 416
Width = 88
Height = 88
Align = alBottom
end
object btnExit: TButton
Left = 10
Top = 9
Width = 71
Height = 24
Caption = 'OK'
ModalResult = 1
TabOrder = 0
OnClick = btnExitClick
end
object Button1: TButton
Left = 10
Top = 40
Width = 71
Height = 25
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
object mainPageControl: TPageControl
Left = 0
Top = 0
Width = 571
Height = 504
ActivePage = tsGlueIt
Align = alClient
HotTrack = True
TabOrder = 1
OnChange = mainPageControlChange
object tsGlueIt: TTabSheet
Caption = 'Glue-It'
object Panel1: TPanel
Left = 0
Top = 0
Width = 563
Height = 476
Align = alClient
BevelOuter = bvNone
TabOrder = 0
object Splitter2: TSplitter
Left = 359
Top = 0
Width = 4
Height = 476
Cursor = crHSplit
Align = alRight
end
object grManagementOfTheFrames: TGroupBox
Left = 0
Top = 0
Width = 359
Height = 476
Align = alClient
Caption = ' Management of the frames: '
TabOrder = 0
object Panel4: TPanel
Left = 2
Top = 15
Width = 355
Height = 459
Align = alClient
BevelOuter = bvNone
BorderWidth = 5
TabOrder = 0
object LWidthOfImages: TLabel
Left = 158
Top = 366
Width = 81
Height = 13
Caption = 'Width of images:'
Enabled = False
FocusControl = EWidthOfImages
end
object LHeightOfImages: TLabel
Left = 155
Top = 390
Width = 84
Height = 13
Caption = 'Heigth of images:'
Enabled = False
FocusControl = EHeightOfImages
end
object Label8: TLabel
Left = 8
Top = 335
Width = 86
Height = 13
Hint = 'Initial color for background when is transparent option turn on.'
Caption = 'Background color:'
ParentShowHint = False
ShowHint = True
Transparent = True
end
object chbCrop: TCheckBox
Left = 240
Top = 408
Width = 41
Height = 17
Caption = 'Crop'
Enabled = False
TabOrder = 6
end
object chbCentered: TCheckBox
Left = 240
Top = 424
Width = 73
Height = 17
Caption = 'Centered'
Enabled = False
TabOrder = 7
end
object ListBox1: TListBox
Left = 5
Top = 33
Width = 345
Height = 289
Align = alTop
DragMode = dmAutomatic
ExtendedSelect = False
IntegralHeight = True
ItemHeight = 13
Style = lbOwnerDrawVariable
TabOrder = 1
OnDragDrop = ListBox1DragDrop
OnDragOver = ListBox1DragOver
OnDrawItem = ListBox1DrawItem
OnMeasureItem = ListBox1MeasureItem
OnMouseDown = ListBox1MouseDown
end
object Panel3: TPanel
Left = 5
Top = 5
Width = 345
Height = 28
Align = alTop
BevelOuter = bvLowered
TabOrder = 0
object btnAddImages: TSpeedButton
Left = 2
Top = 2
Width = 24
Height = 24
Action = acAddImages
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF000000000000FF000000FF000000FF000000FF00000000000000FF000000FF
00000000000000FF000000FF000000000000FF00FF00FF00FF0000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008080800000FF000000FF
000000BF000000FF000000FF00000000000000FF000000FF000000000000FF00
FF00FF00FF008080800000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF000000BF000000FF000000FF000000FF000000FF000000FF
000000FF000000000000FF00FF00FF00FF0080808000FFFF000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF000000BF
000000FF000000FF000000BF000000FF000000BF0000FF00FF00FF00FF008080
8000FFFF0000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF0000FFFF0000FFFF000000BF000000FF000000FF000000BF
0000FFFF00008080800080808000FFFF0000FFFF0000FFFF000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
0000FFFF000000BF000000BF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000BFBF0000BF
BF00FFFF0000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF000000BFBF0000FFFF0000FFFF0000BFBF00FFFF000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000BFBF0000FFFF0000FF
FF0000BFBF00FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF000000BFBF0000BFBF00FFFF0000FFFF000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object btnDeleteSelected: TSpeedButton
Left = 58
Top = 2
Width = 24
Height = 24
Action = acDeleteOne
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF000000000000FF000000FF000000FF000000FF00000000000000FF000000FF
00000000000000FF000000FF000000000000C0C0C000C0C0C00000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00000000008080800000FF000000FF
000000BF000000FF000000FF00000000000000FF000000FF000000000000C0C0
C000C0C0C0008080800000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF000000BF000000FF000000FF000000FF000000FF000000FF
000000FF000000000000C0C0C000C0C0C00080808000FFFF00000000FF00C0C0
C000FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF000000BF
00000000FF00C0C0C00000BF000000FF000000BF0000C0C0C000C0C0C0008080
8000FFFF0000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF0000FFFF00000000FF000000FF000000FF00C0C0C00000BF
0000FFFF00008080800080808000FFFF0000FFFF00000000FF00C0C0C000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF00000000
FF000000FF000000FF00C0C0C000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
00000000FF00C0C0C00000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF0000FFFF0000FFFF00000000FF000000FF000000FF00C0C0
C000FFFF0000FFFF0000FFFF00000000FF000000FF00C0C0C00000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
0000FFFF00000000FF000000FF000000FF00C0C0C000FFFF00000000FF000000
FF00C0C0C000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000FF000000
FF000000FF000000FF000000FF00C0C0C00000BFBF00FFFF000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF00000000FF000000FF000000FF00C0C0C00000FF
FF0000BFBF00FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000FF000000
FF000000FF000000FF000000FF00C0C0C000FFFF0000FFFF000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
0000FFFF00000000FF000000FF000000FF00C0C0C000FFFF00000000FF00C0C0
C000FFFF0000FFFF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF000000000000000000000000000000FF000000FF000000FF000000FF00C0C0
C0000000000000000000000000000000FF000000FF00C0C0C00000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FF000000
FF000000FF000000FF00C0C0C000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF000000FF000000FF00C0C0C000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000FF000000FF00C0C0C000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000FF000000FF00C0C0
C000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object btnClearAll: TSpeedButton
Left = 34
Top = 2
Width = 24
Height = 24
Action = acDeleteAll
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
0000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00000000000000000000000000FFFFFF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
000000000000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
0000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000FFFFFF00FF00
FF00FF00FF00FF00FF000000000000000000FFFFFF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00000000000000000000000000FFFFFF00FF00FF000000000000000000FFFF
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
00000000000000000000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00000000000000000000000000FFFFFF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
00000000000000000000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00000000000000000000000000FFFFFF00FF00FF0000000000FFFFFF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000000000000000000000000000FFFFFF00FF00
FF00FF00FF00FF00FF000000000000000000FFFFFF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
000000000000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
000000000000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000000000FFFFFF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000FFFFFF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object btnSave: TSpeedButton
Left = 90
Top = 2
Width = 24
Height = 24
Action = acSaveToFile
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00FF008080
8000808080008080800080808000808080008080800080808000808080008080
800000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF008080800000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF00FF00
FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF008080
800000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
00000000000000000000FFFFFF00FF00FF000000000000000000000000000000
00000000000000000000FF00FF008080800000000000FF00FF00FF00FF00FF00
FF00FF00FF000000000000000000FFFF0000FF00000000000000FFFFFF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
800000000000FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
0000FF00000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FF00FF0000000000FF00FF00FF00FF000000
0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
FF00FFFF0000FFFF0000FF000000FF000000FF00000000FFFF0000FFFF0000FF
FF0000FFFF0000BFBF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFFF0000FFFFFF00FFFF0000FFFF0000FFFF0000FF00
0000FF0000008080800000FFFF0000FFFF0000FFFF0000FFFF0000BFBF000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
0000FFFF0000FFFF0000FFFF000000BF000000BF00008080800000FFFF0000FF
FF000000BF0000BFBF0000FFFF0000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF000000BF000000BF
000000BF000000BF0000FFFFFF0000FFFF000000BF000000BF0000FFFF0000BF
BF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
0000FFFF0000FFFF000000BF000000BF000000BF000000BF000000BF00000000
BF000000BF000000BF0000FFFF0000BFBF0000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF000000BF000000BF
000000BF000000BF00000000BF000000BF0000FFFF0000000000000000000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF000000BF000000BF000000BF000000BF000000BF00000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF00FFFF0000FFFF
000000BF000000BF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFFF0000FFFF00000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object btnGlueIt: TSpeedButton
Left = 122
Top = 2
Width = 24
Height = 24
Action = acGlueIt
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF008080800000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000FFFF000080
800000FFFF000080800000FFFF000080800000FFFF000080800000FFFF000080
800000FFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000808000C0C0C0000000000000000000000000000000
000000000000C0C0C0000080800000FFFF000080800000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000FFFF000080
8000C0C0C0000000000000000000000000000000000000000000C0C0C0000080
800000FFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFFFFF00FFFFFF00FFFFFF0000000000000000000000
00000000000000000000FFFFFF00FFFFFF00C0C0C00000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF00FFFF
FF00FFFFFF000000000000000000000000000000000000000000FFFFFF00FFFF
FF00C0C0C00000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFF
FF00FFFFFF0000000000FFFFFF00FFFFFF00C0C0C00000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000C0C0C000FFFF
FF00FFFFFF00FFFFFF00000000000000000000000000FFFFFF00FFFFFF00C0C0
C0008080800000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000C0C0C000FFFFFF00FFFFFF00808080000000
000080808000FFFFFF00C0C0C000C0C0C0000000000080808000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
0000FFFFFF00FFFFFF00808080000000000080808000C0C0C000000000000000
000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
FF00FFFFFF00FFFFFF00C0C0C0000000000080808000C0C0C000808080008080
800000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0080808000000000000000000000000000000000000000
00000000000000000000000000000000000080808000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00808080000000000080808000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object btnGlue2Iso: TSpeedButton
Left = 146
Top = 2
Width = 24
Height = 24
Action = acGlueIzonometrics
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000FF00
FF00FF00FF00FF00FF00FF00FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0080808000FFFFFF0000000000FFFFFF0080808000FFFFFF0000000000FFFF
FF0080808000FFFFFF0000000000FFFFFF0080808000FFFFFF0000000000FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00FF008000
0000800000008000000080000000800000008000000080000000800000008000
00008000000080000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF008000000000FF000000FF000000FF000000FF
000000FF000000FF000000FF000000FF000080000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000
000000FF00008000000080000000800000008000000000FF000000FF00008000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF008000000000FF000080000000808080008000
000000FF000000FF000080000000000000000000000080808000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000
000000FF0000800000008000000000FF000000FF000080000000FF00FF000000
000000000000000000000000000080808000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF008000000000FF00008000000000FF000000FF
000080000000FF00FF00FF00FF00808080000000000000000000C0C0C0000000
00000000000080808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000
000000FF000000FF000000FF000080000000FF00FF00FF00FF00FF00FF00FF00
FF0000000000C0C0C000FFFFFF00FFFFFF00C0C0C0000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF008000000000FF000000FF000080000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF008080800000000000FFFFFF00FFFF
FF00FFFFFF00C0C0C0000000000000000000FF00FF00FF00FF00FF00FF008000
000000FF000080000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000C0C0C000FFFFFF00FFFFFF00C0C0C000000000000080
800000000000FF00FF00FF00FF008000000080000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080800000000000C0C0
C000C0C0C0000000000000FFFF00800000000080800000000000FF00FF008000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00000000000000000000000000FFFFFF0000FFFF0000FF
FF008000000000808000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
000000FFFF00FFFFFF00FFFFFF0000FFFF0000FFFF0080000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000FFFF00FFFFFF00FFFF
FF0000FFFF0000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000FFFF00FFFFFF00FFFFFF0000FFFF00}
ParentShowHint = False
ShowHint = True
end
object btnUpSelection: TSpeedButton
Left = 226
Top = 2
Width = 24
Height = 24
Action = acUpSelection
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000BFBF0000BFBF0000BFBF000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000BFBF0000BFBF
0000BFBF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000BFBF0000BFBF0000BFBF000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000000000000000000000000000BFBF0000BFBF
0000BFBF000000000000000000000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
0000BFBF0000BFBF0000BFBF0000BFBF0000BFBF0000BFBF0000BFBF00000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000BFBF0000BFBF0000BFBF
0000BFBF0000BFBF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000BFBF0000BFBF0000BFBF000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000BFBF
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF0000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object btnDownSelection: TSpeedButton
Left = 250
Top = 2
Width = 24
Height = 24
Action = acDownSelection
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000BFBF000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000BFBF0000BFBF
0000BFBF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000BFBF0000BFBF0000BFBF0000BFBF0000BFBF000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF0000000000BFBF0000BFBF0000BFBF0000BFBF
0000BFBF0000BFBF0000BFBF000000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
00000000000000000000BFBF0000BFBF0000BFBF000000000000000000000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000BFBF0000BFBF
0000BFBF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000BFBF0000BFBF0000BFBF000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000BFBF0000BFBF
0000BFBF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
end
object chbTransparent: TCheckBox
Left = 224
Top = 328
Width = 97
Height = 17
Caption = 'Transparent'
Checked = True
State = cbChecked
TabOrder = 2
end
object EWidthOfImages: TEdit
Left = 240
Top = 362
Width = 49
Height = 21
Enabled = False
TabOrder = 4
end
object EHeightOfImages: TEdit
Left = 240
Top = 386
Width = 49
Height = 21
Enabled = False
TabOrder = 5
end
object chbForceSize: TCheckBox
Left = 224
Top = 344
Width = 73
Height = 17
Caption = 'Force size'
TabOrder = 3
OnClick = chbForceSizeClick
end
object panBColor: TPanel
Left = 98
Top = 332
Width = 33
Height = 20
BevelOuter = bvLowered
BorderStyle = bsSingle
Caption = 'B'
Color = clWhite
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
TabOrder = 8
OnClick = pnlFGClick
end
end
end
object Panel2: TPanel
Left = 363
Top = 0
Width = 200
Height = 476
Align = alRight
BevelOuter = bvNone
TabOrder = 1
object grPictureAnimationPreview: TGroupBox
Left = 0
Top = 0
Width = 200
Height = 241
Align = alTop
Caption = ' Picture animation preview: '
TabOrder = 0
object DXDraw1: TDXDraw
Left = 2
Top = 43
Width = 196
Height = 196
AutoInitialize = True
AutoSize = True
Color = clBtnFace
Display.FixedBitCount = True
Display.FixedRatio = True
Display.FixedSize = False
Options = [doAllowReboot, doWaitVBlank, doCenter, doHardware, doSelectDriver]
SurfaceHeight = 196
SurfaceWidth = 196
Align = alClient
TabOrder = 1
Traces = <>
OnMouseMove = DXDraw1MouseMove
end
object Panel6: TPanel
Left = 2
Top = 15
Width = 196
Height = 28
Align = alTop
BevelOuter = bvLowered
TabOrder = 0
object btnStop: TSpeedButton
Left = 26
Top = 2
Width = 24
Height = 24
Action = acAnimateStop
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
BF000000BF000000BF000000BF000000BF000000BF000000BF000000BF000000
BF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000BF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000BF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000BF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000BF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF000000BF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000BF00FF00
FF00FF00FF00FF00FF00FF00FF000000BF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000BF00FF00FF00FF00FF000000BF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000BF00FF00FF000000BF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF000000FF00FFFFFF000000FF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF00FFFFFF000000FF000000FF000000FF000000BF00FF00FF000000BF000000
FF000000FF000000FF00FFFFFF000000FF000000FF00FFFFFF000000FF000000
FF00FFFFFF000000FF00FFFFFF000000FF00FFFFFF000000FF000000FF000000
FF000000BF00FF00FF000000BF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF000000FF00FFFFFF000000FF000000FF00FFFFFF000000FF00FFFFFF000000
FF00FFFFFF00FFFFFF00FFFFFF000000FF000000BF00FF00FF000000BF000000
FF00FFFFFF000000FF000000FF000000FF000000FF00FFFFFF000000FF000000
FF00FFFFFF000000FF00FFFFFF000000FF00FFFFFF000000FF00FFFFFF000000
FF000000BF00FF00FF000000BF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF00FFFFFF00FFFFFF00FFFFFF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF00FFFFFF00FFFFFF00FFFFFF000000FF000000BF00FF00FF000000BF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000BF00FF00FF000000BF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000BF00FF00FF00FF00FF000000
BF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
BF00FF00FF00FF00FF00FF00FF00FF00FF000000BF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000BF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000BF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000BF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000BF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000BF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF000000BF000000BF000000BF000000BF000000
BF000000BF000000BF000000BF000000BF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object btnPlay: TSpeedButton
Left = 2
Top = 2
Width = 24
Height = 24
Action = acAnimateOn
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF000000
0000C0C0C000C0C0C000FF000000FF000000FF000000FF000000C0C0C000C0C0
C00000000000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000000000000000000000C0C0C000C0C0C000FF000000FF00
0000FF000000FF000000C0C0C000C0C0C000000000000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF000000
0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C00000000000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00808080000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000080808000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF0000000000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0000000
0000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
8000000000000000000080808000C0C0C000C0C0C000C0C0C0000000FF000000
FF000000FF00C0C0C00080808000000000000000000080808000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF0000000000C0C0C000C0C0
C000FF000000FF0000000000FF000000FF000000FF00C0C0C00000000000FFFF
FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
00000000000000000000C0C0C000C0C0C000FF000000FF0000000000FF000000
FF000000FF00C0C0C000000000000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF0000000000C0C0C000C0C0
C000FF000000FF000000FF000000FF000000C0C0C000C0C0C00000000000FFFF
FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
8000000000000000000080808000C0C0C000FF000000FF000000FF000000FF00
0000C0C0C000C0C0C00080808000000000000000000080808000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF0000000000C0C0
C000FF000000FF000000FF000000FF000000C0C0C000C0C0C000C0C0C0000000
0000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00000000000000000000000000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0080808000000000000000000000000000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C00080808000000000000000000080808000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF000000
0000C0C0C000C0C0C000C0C0C000C0C0C0000000FF000000FF000000FF00C0C0
C00000000000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000000000000000000000C0C0C000C0C0C000FF000000FF00
00000000FF000000FF000000FF00C0C0C000000000000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF000000
0000C0C0C000C0C0C000FF000000FF0000000000FF000000FF000000FF00C0C0
C00000000000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000000000000000000000C0C0C000C0C0C000FF000000FF00
0000FF000000FF000000C0C0C000C0C0C000000000000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object LAnimationSpeed: TLabel
Left = 56
Top = 2
Width = 87
Height = 13
Caption = 'Animation Speed :'
FocusControl = pbAnimationSpeed
end
object pbAnimationSpeed: TProgressBar
Left = 56
Top = 16
Width = 137
Height = 9
Min = 0
Max = 200
Smooth = True
TabOrder = 0
OnMouseMove = pbAnimationSpeedMouseMove
end
end
end
object Panel13: TPanel
Left = 0
Top = 241
Width = 200
Height = 28
Align = alTop
BevelOuter = bvLowered
TabOrder = 1
object Label3: TLabel
Left = 8
Top = 6
Width = 59
Height = 13
Caption = 'From image:'
FocusControl = EFromImage
end
object LToImage: TLabel
Left = 110
Top = 6
Width = 47
Height = 13
Caption = 'To image:'
FocusControl = EToImage
end
object EFromImage: TEdit
Left = 72
Top = 3
Width = 30
Height = 21
TabOrder = 0
end
object EToImage: TEdit
Left = 160
Top = 3
Width = 30
Height = 21
TabOrder = 1
end
end
end
end
end
object tsFontGen: TTabSheet
Caption = 'Font-Gen'
ImageIndex = 1
object Panel8: TPanel
Left = 0
Top = 0
Width = 225
Height = 476
Align = alLeft
BevelOuter = bvNone
BorderWidth = 3
TabOrder = 0
object Label16: TLabel
Left = 3
Top = 381
Width = 85
Height = 13
Caption = 'Used characters :'
end
object Label11: TLabel
Left = 3
Top = 232
Width = 178
Height = 13
Caption = 'Source for sizes (copy to your code):'
end
object gbFontSettings: TGroupBox
Left = 3
Top = 3
Width = 219
Height = 78
Align = alTop
Caption = '&Font Settings'
TabOrder = 0
object Label1: TLabel
Left = 12
Top = 24
Width = 27
Height = 13
Caption = '&Name'
end
object Label4: TLabel
Left = 12
Top = 48
Width = 19
Height = 13
Caption = 'Si&ze'
end
object Label10: TLabel
Left = 95
Top = 48
Width = 24
Height = 13
Caption = 'Style'
end
object cbFontName: TComboBox
Left = 52
Top = 20
Width = 154
Height = 19
Hint = 'Font Name|Select font name'
Style = csOwnerDrawFixed
Ctl3D = False
DropDownCount = 10
ItemHeight = 13
ParentCtl3D = False
TabOrder = 0
OnDrawItem = cbFontNameDrawItem
end
object FontSize: TEdit
Left = 52
Top = 44
Width = 37
Height = 21
TabOrder = 1
Text = '10'
end
object Panel20: TPanel
Left = 135
Top = 44
Width = 71
Height = 24
BevelOuter = bvLowered
TabOrder = 2
object btnABold: TSpeedButton
Left = 1
Top = 1
Width = 23
Height = 22
AllowAllUp = True
GroupIndex = 1
Flat = True
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000000000000000000000000000000000000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000FF00FF000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000FF00FF000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000FF00FF000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000000000000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000FF00FF000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000FF00FF000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000FF00FF000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000000000000000000000000000000000000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
OnClick = btnABoldClick
end
object btnAItalic: TSpeedButton
Left = 24
Top = 1
Width = 23
Height = 22
AllowAllUp = True
GroupIndex = 2
Flat = True
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
OnClick = btnAItalicClick
end
object btnAUnderline: TSpeedButton
Left = 47
Top = 1
Width = 23
Height = 22
AllowAllUp = True
GroupIndex = 3
Flat = True
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000000000000000000000000000000000000000000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000000000000000000000000000000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000000000000000000000000000FF00FF00000000000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
OnClick = btnAUnderlineClick
end
end
end
object gbFontEffects: TGroupBox
Left = 3
Top = 81
Width = 219
Height = 80
Align = alTop
Caption = ' Font Effects: '
TabOrder = 1
object Label5: TLabel
Left = 12
Top = 44
Width = 31
Height = 13
Caption = '&Offset'
end
object Label7: TLabel
Left = 107
Top = 44
Width = 37
Height = 13
Caption = 'O&pacity'
end
object eOffset: TEdit
Left = 52
Top = 40
Width = 45
Height = 22
Hint = 'Font Size'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
ParentShowHint = False
ShowHint = True
TabOrder = 0
Text = '1'
end
object eOpacity: TEdit
Left = 148
Top = 40
Width = 45
Height = 22
Hint = 'Font Size'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
ParentShowHint = False
ShowHint = True
TabOrder = 1
Text = '100'
end
object CheckBox1: TCheckBox
Left = 8
Top = 16
Width = 113
Height = 17
Caption = 'Enable font effect'
TabOrder = 2
end
end
object gbColorSettings: TGroupBox
Left = 3
Top = 161
Width = 219
Height = 72
Align = alTop
Caption = ' Color Settings:'
TabOrder = 2
object Label14: TLabel
Left = 12
Top = 48
Width = 56
Height = 13
Caption = '&Background'
end
object Label15: TLabel
Left = 12
Top = 24
Width = 56
Height = 13
Caption = '&Foreground'
end
object pnlFG: TPanel
Left = 85
Top = 21
Width = 33
Height = 20
BevelOuter = bvLowered
BorderStyle = bsSingle
Caption = 'FG'
Color = clWhite
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
TabOrder = 0
OnClick = pnlFGClick
end
object pnlBG: TPanel
Left = 85
Top = 44
Width = 33
Height = 20
BevelOuter = bvLowered
BorderStyle = bsSingle
Caption = 'BG'
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
TabOrder = 1
OnClick = pnlFGClick
end
end
object btnFontGenerate: TButton
Left = 3
Top = 354
Width = 94
Height = 25
Caption = 'Gen. Font'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Arial'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
OnClick = btnFontGenerateClick
end
object btnAllChars: TButton
Left = 180
Top = 381
Width = 41
Height = 17
Caption = 'All'
TabOrder = 4
OnClick = btnAllCharsClick
end
object memAlphabet: TMemo
Left = 3
Top = 397
Width = 219
Height = 49
Font.Charset = EASTEUROPE_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'Courier'
Font.Style = []
ParentFont = False
TabOrder = 5
end
object cbAntialias: TCheckBox
Left = 3
Top = 449
Width = 97
Height = 17
Caption = 'Antialias text'
Checked = True
State = cbChecked
TabOrder = 6
end
object cbDrawGrid: TCheckBox
Left = 89
Top = 449
Width = 81
Height = 17
Caption = 'Draw grid'
Checked = True
State = cbChecked
TabOrder = 7
Visible = False
end
object Sources: TMemo
Left = 3
Top = 248
Width = 219
Height = 100
TabOrder = 8
end
end
object FontPageControl: TPageControl
Left = 225
Top = 0
Width = 338
Height = 476
ActivePage = tsPreviewFont
Align = alClient
HotTrack = True
Style = tsButtons
TabOrder = 1
object tsFont: TTabSheet
Caption = 'Font'
ImageIndex = 1
object ScrollBox2: TScrollBox
Left = 0
Top = 0
Width = 330
Height = 445
Align = alClient
BorderStyle = bsNone
TabOrder = 0
object imgFont: TImage
Left = 0
Top = 0
Width = 256
Height = 256
AutoSize = True
end
end
end
object tsMask: TTabSheet
Caption = 'Mask'
ImageIndex = 2
object ScrollBox3: TScrollBox
Left = 0
Top = 0
Width = 330
Height = 445
Align = alClient
BorderStyle = bsNone
TabOrder = 0
object imgMask: TImage
Left = 0
Top = 0
Width = 256
Height = 256
AutoSize = True
end
end
end
object tsPreviewFont: TTabSheet
Caption = 'Preview'
ImageIndex = 2
object Splitter1: TSplitter
Left = 0
Top = 117
Width = 330
Height = 4
Cursor = crVSplit
Align = alTop
end
object PreviewMemo: TMemo
Left = 0
Top = 28
Width = 330
Height = 89
Align = alTop
ScrollBars = ssVertical
TabOrder = 0
OnChange = PreviewMemoChange
end
object PreviewDraw: TDXDraw
Left = 0
Top = 121
Width = 330
Height = 324
AutoInitialize = True
AutoSize = True
Color = clBtnFace
Display.FixedBitCount = False
Display.FixedRatio = True
Display.FixedSize = True
Options = [doAllowReboot, doWaitVBlank, doCenter, doHardware, doSelectDriver]
SurfaceHeight = 324
SurfaceWidth = 330
Align = alClient
TabOrder = 1
Traces = <>
end
object Panel9: TPanel
Left = 0
Top = 0
Width = 330
Height = 28
Align = alTop
BevelOuter = bvLowered
TabOrder = 2
object btnFontAnimationStop: TSpeedButton
Left = 26
Top = 2
Width = 24
Height = 24
Action = acAnimeFontOff
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
BF000000BF000000BF000000BF000000BF000000BF000000BF000000BF000000
BF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF000000BF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000BF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000BF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000BF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF000000BF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000BF00FF00
FF00FF00FF00FF00FF00FF00FF000000BF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000BF00FF00FF00FF00FF000000BF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000BF00FF00FF000000BF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF000000FF00FFFFFF000000FF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF00FFFFFF000000FF000000FF000000FF000000BF00FF00FF000000BF000000
FF000000FF000000FF00FFFFFF000000FF000000FF00FFFFFF000000FF000000
FF00FFFFFF000000FF00FFFFFF000000FF00FFFFFF000000FF000000FF000000
FF000000BF00FF00FF000000BF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF000000FF00FFFFFF000000FF000000FF00FFFFFF000000FF00FFFFFF000000
FF00FFFFFF00FFFFFF00FFFFFF000000FF000000BF00FF00FF000000BF000000
FF00FFFFFF000000FF000000FF000000FF000000FF00FFFFFF000000FF000000
FF00FFFFFF000000FF00FFFFFF000000FF00FFFFFF000000FF00FFFFFF000000
FF000000BF00FF00FF000000BF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF00FFFFFF00FFFFFF00FFFFFF000000FF00FFFFFF00FFFFFF00FFFFFF000000
FF00FFFFFF00FFFFFF00FFFFFF000000FF000000BF00FF00FF000000BF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000BF00FF00FF000000BF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000BF00FF00FF00FF00FF000000
BF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
BF00FF00FF00FF00FF00FF00FF00FF00FF000000BF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000BF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000BF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000BF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000BF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000BF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF000000BF000000BF000000BF000000BF000000
BF000000BF000000BF000000BF000000BF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object btnFontAnimationStart: TSpeedButton
Left = 2
Top = 2
Width = 24
Height = 24
Action = acAnimeFontOn
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF000000
0000C0C0C000C0C0C000FF000000FF000000FF000000FF000000C0C0C000C0C0
C00000000000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000000000000000000000C0C0C000C0C0C000FF000000FF00
0000FF000000FF000000C0C0C000C0C0C000000000000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF000000
0000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C00000000000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00808080000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000080808000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF0000000000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C0000000
0000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
8000000000000000000080808000C0C0C000C0C0C000C0C0C0000000FF000000
FF000000FF00C0C0C00080808000000000000000000080808000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF0000000000C0C0C000C0C0
C000FF000000FF0000000000FF000000FF000000FF00C0C0C00000000000FFFF
FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
00000000000000000000C0C0C000C0C0C000FF000000FF0000000000FF000000
FF000000FF00C0C0C000000000000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF0000000000C0C0C000C0C0
C000FF000000FF000000FF000000FF000000C0C0C000C0C0C00000000000FFFF
FF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
8000000000000000000080808000C0C0C000FF000000FF000000FF000000FF00
0000C0C0C000C0C0C00080808000000000000000000080808000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF0000000000C0C0
C000FF000000FF000000FF000000FF000000C0C0C000C0C0C000C0C0C0000000
0000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00000000000000000000000000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0080808000000000000000000000000000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C00080808000000000000000000080808000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF000000
0000C0C0C000C0C0C000C0C0C000C0C0C0000000FF000000FF000000FF00C0C0
C00000000000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000000000000000000000C0C0C000C0C0C000FF000000FF00
00000000FF000000FF000000FF00C0C0C000000000000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF000000
0000C0C0C000C0C0C000FF000000FF0000000000FF000000FF000000FF00C0C0
C00000000000FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000000000000000000000C0C0C000C0C0C000FF000000FF00
0000FF000000FF000000C0C0C000C0C0C000000000000000000000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
end
end
end
end
object tsPreview: TTabSheet
Caption = 'Preview'
ImageIndex = 2
object GroupBox1: TGroupBox
Left = 0
Top = 0
Width = 563
Height = 386
Align = alClient
Caption = ' Preview of glued frames: '
TabOrder = 0
object Panel7: TPanel
Left = 2
Top = 15
Width = 559
Height = 369
Align = alClient
BevelOuter = bvNone
BorderWidth = 5
Caption = 'Panel7'
TabOrder = 0
object ScrollBox1: TScrollBox
Left = 5
Top = 33
Width = 549
Height = 331
Align = alClient
TabOrder = 0
object Image1: TImage
Left = 0
Top = 0
Width = 32
Height = 32
Cursor = crCross
AutoSize = True
PopupMenu = PopupMenu1
OnMouseDown = Image1MouseDown
OnMouseMove = Image1MouseMove
OnMouseUp = Image1MouseUp
end
end
object Panel12: TPanel
Left = 5
Top = 5
Width = 549
Height = 28
Align = alTop
BevelOuter = bvLowered
TabOrder = 1
object SpeedButton1: TSpeedButton
Left = 26
Top = 2
Width = 24
Height = 24
Action = acSaveImage
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FF00FF008080
8000808080008080800080808000808080008080800080808000808080008080
800000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFFFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF008080800000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF00FF00
FF00FF00FF00FF00FF000000000000000000FF00FF00FF00FF00FF00FF008080
800000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
00000000000000000000FFFFFF00FF00FF000000000000000000000000000000
00000000000000000000FF00FF008080800000000000FF00FF00FF00FF00FF00
FF00FF00FF000000000000000000FFFF0000FF00000000000000FFFFFF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008080
800000000000FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
0000FF00000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FF00FF0000000000FF00FF00FF00FF000000
0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF
FF00FFFF0000FFFF0000FF000000FF000000FF00000000FFFF0000FFFF0000FF
FF0000FFFF0000BFBF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFFF0000FFFFFF00FFFF0000FFFF0000FFFF0000FF00
0000FF0000008080800000FFFF0000FFFF0000FFFF0000FFFF0000BFBF000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFF
0000FFFF0000FFFF0000FFFF000000BF000000BF00008080800000FFFF0000FF
FF000000BF0000BFBF0000FFFF0000000000FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF0000000000FFFF0000FFFF0000FFFF000000BF000000BF
000000BF000000BF0000FFFFFF0000FFFF000000BF000000BF0000FFFF0000BF
BF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF000000
0000FFFF0000FFFF000000BF000000BF000000BF000000BF000000BF00000000
BF000000BF000000BF0000FFFF0000BFBF0000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF0000000000FFFF0000FFFF000000BF000000BF
000000BF000000BF00000000BF000000BF0000FFFF0000000000000000000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFF000000BF000000BF000000BF000000BF000000BF00000000
000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000FFFFFF00FFFF0000FFFF
000000BF000000BF000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF0000000000FFFF0000FFFF00000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00000000000000
0000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object SpeedButton2: TSpeedButton
Left = 2
Top = 2
Width = 24
Height = 24
Action = acLoadImage
Flat = True
Glyph.Data = {
76060000424D7606000000000000360000002800000014000000140000000100
2000000000004006000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00808080000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000C0C0C00000FF
FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF
FF00C0C0C00000FFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFFFF0000000000C0C0C00000FFFF00C0C0C00000FFFF00C0C0
C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000000000FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000FFFF000000000000FF
FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF
FF00C0C0C00000FFFF00C0C0C00000000000FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFFFF0000FFFF000000000000FFFF00C0C0C00000FFFF00C0C0
C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF000000
0000FF00FF00FF00FF00FF00FF00FF00FF000000000000FFFF00FFFFFF000000
0000C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF
FF00C0C0C00000FFFF00C0C0C00000FFFF0000000000FF00FF00FF00FF00FF00
FF0000000000FFFFFF0000FFFF00FFFFFF000000000000000000000000000000
000000000000C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0
C00000000000FF00FF00FF00FF00FF00FF000000000000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000000000000000000000
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF0000000000FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF0000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF00000000000000
00000000000000000000000000000000000000000000FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF0000000000000000000000
00000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00}
ParentShowHint = False
ShowHint = True
end
object Label2: TLabel
Left = 426
Top = 1
Width = 85
Height = 26
Hint =
'Must be strike key SHIFT for change color on image canvas to new' +
' selected transparent color.'
Caption = 'Transparent color'#13#10'for manual fill:'
ParentShowHint = False
ShowHint = True
Transparent = True
end
object btnGetTransparentcolor: TSpeedButton
Left = 58
Top = 2
Width = 24
Height = 24
Hint = 'Get transparent color.'
AllowAllUp = True
GroupIndex = 2
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00DDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDD00DDDDDDDDDDDDDD0700DDDDDDDDDDDDD0770DDDD
DDDDDDDD07770DDDDDDDDDDDD07770DDDDDDDDDDDD07770D0DDDD0DDDDD07770
0DDDD00DDDDD07000DDDDD00D0DDD00000DDDDD000DD0000000DDDD000DDDDD0
000DDD0000DDDDDD000DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD}
ParentShowHint = False
ShowHint = True
OnClick = btnGetTransparentcolorClick
end
object btnCrop: TSpeedButton
Left = 88
Top = 2
Width = 24
Height = 24
Hint = 'Crop picture.'
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
8000008000000080800080000000800080008080000080808000C0C0C0000000
FF00C0C0C00000FFFF00FF000000C0C0C000FFFF0000FFFFFF00DADADADADADA
DADAADADA0ADADADADADDADAD00ADADADADAADADA00DADADADADDADAD00ADADA
DADAA00000070000ADADDA0000070000DADAADADA00DAD00ADADDADAD00ADA00
DADAADADA00DAD77ADADDADAD0000000000AADADA00000000000DADADADADA00
DADAADADADADAD00ADADDADADADADA00DADAADADADADADA0ADAD}
Visible = False
end
object btnFill: TSpeedButton
Left = 112
Top = 2
Width = 24
Height = 24
Hint = 'Format.'
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
8000008000000080800080000000800080008080000080808000C0C0C0000000
FF00C0C0C00000FFFF00FF000000C0C0C000FFFF0000FFFFFF00DADADA00447A
DADAADADADA70F44ADADDADADADA0F444ADAADADADADA0F444ADDADADADAD77F
44DAADAD0DADAD0FF4ADDAD070DADAD0000AAD07770DA5A70B07D0888770D55A
03B008F88877555DA0B0D08F8087755AD700AD080408555DADADDA40848755DA
DADAAD4D0470ADADADADDA4AD40ADADADADAAD7447ADADADADAD}
Visible = False
end
object SpeedButton10: TSpeedButton
Left = 264
Top = 2
Width = 24
Height = 24
Hint = 'Recolorize'
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777700000007000000000000000700000007077770770770AA0700000007007
70770770AA207000000070707777770AA270700000007077077070AA27707000
0000707770770722777070000000707777007777777070000000707777777777
77707000000070777777777337707000000070777777773BB370700000007077
7777773BB3707000000070777777777337707000000070777777777777707000
0000700000000000000070000000777777777777777770000000777777777777
777770000000}
Visible = False
end
object SpeedButton11: TSpeedButton
Left = 312
Top = 2
Width = 24
Height = 24
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
8000008000000080800080000000800080008080000080808000C0C0C0000000
FF00C0C0C00000FFFF00FF000000C0C0C000FFFF0000FFFFFF00DADADADADADA
DADAAD0DADADADADA0AD0000000000000000AD0DADADADADA0ADDA0ADADADADA
D0DAAD0DADAD0000A0ADDA0ADADA0BB0D0DAAD0DA00D0BB0A0ADDA0A02200BB0
D0DAAD0D02200000A0ADDA0A0220DADAD0DAAD0DA00DADADA0AD000000000000
0000AD0DADADADADA0ADDA0ADADADADAD0DAAD0DADADADADA0AD}
Visible = False
end
object SpeedButton12: TSpeedButton
Left = 240
Top = 2
Width = 24
Height = 24
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
77777000000070000000000000007000000070AAAA0AA0AA077070000000708A
A2AA0AA077807000000070E2AAAAAA0778E07000000070EE2AA2A2778EE07000
000070EEE2AA2E88EEE07000000070EEEE22EEEEEEE07000000070EEEEEEEEEE
EEE07000000070EEEEEEEEE33EE07000000070EEEEEEEE3BB3E07000000070EE
EEEEEE3BB3E07000000070EEEEEEEEE33EE07000000070EEEEEEEEEEEEE07000
0000700000000000000070000000777777777777777770000000777777777777
777770000000}
Visible = False
end
object SpeedButton13: TSpeedButton
Left = 288
Top = 2
Width = 24
Height = 24
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777700000007000000000000000700000007077770770770770700000007007
7077077077007000000070707777770770707000000070770770707707707000
0000707770770700777070000000707777007777777070000000707777777777
7770700000007077777777700770700000007077777777077070700000007077
7777770770707000000070777777777007707000000070777777777777707000
0000700000000000000070000000777777777777777770000000777777777777
777770000000}
Visible = False
end
object btnWand: TSpeedButton
Left = 344
Top = 2
Width = 24
Height = 24
Hint = 'Magic wand.'
Flat = True
Glyph.Data = {
36030000424D3603000000000000360000002800000010000000100000000100
1800000000000003000000000000000000000000000000000000FF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
FFFF00FF6666CC5674CAFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FF6699CC3366991E2A4BFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6666
CC3366991E2A4BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
00FFFF00FFFF00FFFF00FF6699CC3366991E2A4BFF00FFFF00FFFF00FFFF00FF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF6699CC6666CC1E2A
4BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFB0BEE4FF00FFFF
00FFFF00FF6699CC6699CC1E2A4BFF00FFFF00FFFF00FFFF00FFFF00FFC2CEED
FF00FFFF00FFFF00FF5674CAFF00FFFF00FF0099FF5674CA1E2A4BFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFB0BEE49ADEFBFF00FFFCFDFDFF00FF8C
D0EE9999CC1E2A4BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
9ADEFB00CCFFCCFFFFD8DEE4CCFFFF00CCFF8CD0EEFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFCCFFFF0066FF66CCFF0066FFCC
FFFFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9999CC5674CA
FFFFFFFF00FF33FFFF0066FF33CCFFE5E6E6FCFDFD5674CA9999CCFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFCCFFFF0066FF33CCFF0066FFCC
FFFFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
9ADEFB00CCFFCCFFFFFF00FFCCFFFF00CCFF9ADEFBFF00FFFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFB0BEE49ADEFBFF00FFFEFEFEFF00FF9A
DEFBB0BEE4FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC2CEED
FF00FFFF00FFFF00FF6699CCFF00FFFF00FFFF00FFC2CEEDFF00FFFF00FFFF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC2CEEDFF00FFFF
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
Visible = False
end
object btnMask: TSpeedButton
Left = 368
Top = 2
Width = 24
Height = 24
Hint = 'Mask.'
Flat = True
Glyph.Data = {
36030000424D3603000000000000360000002800000010000000100000000100
1800000000000003000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000007F7F7FC7C7C79A9A9AB2B2B2B8B8B8969696C7
C7C7939393C3C3C3A2A2A2A8A8A8C0C0C0939393BBBBBB000000000000C7C7C7
A8A8A8CFCFCFBABABAB5B5B5D1D1D1A4A4A4D2D2D2ABABABC8C8C8C3C3C3AEAE
AED5D5D59393930000000000009A9A9ACFCFCFB2B2B2C2C2C2C6C6C684848400
0000000000B7B7B7B7B7B7BBBBBBCBCBCBAEAEAEC0C0C0000000000000B2B2B2
BABABAC2C2C2969696000000000000909090939393000000000000717171BBBB
BBC3C3C3A8A8A8000000000000B8B8B8B5B5B5C6C6C6000000999999FFFFFFFF
FFFFFFFFFFFFFFFF999999000000B7B7B7C8C8C8A2A2A2000000000000969696
D1D1D1848484000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000B7B7
B7ABABABC3C3C3000000000000C7C7C7A4A4A4000000909090FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFF939393000000D2D2D2939393000000000000939393
D2D2D2000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9090900000
00A4A4A4C7C7C7000000000000C3C3C3ABABABB7B7B7000000FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFF000000848484D1D1D1969696000000000000A2A2A2
C8C8C8B7B7B7000000999999FFFFFFFFFFFFFFFFFFFFFFFF999999000000C6C6
C6B5B5B5B8B8B8000000000000A8A8A8C3C3C3BBBBBB71717100000000000093
9393909090000000000000969696C2C2C2BABABAB2B2B2000000000000C0C0C0
AEAEAECBCBCBBBBBBBB7B7B7B7B7B7000000000000848484C6C6C6C2C2C2B2B2
B2CFCFCF9A9A9A000000000000939393D5D5D5AEAEAEC3C3C3C8C8C8ABABABD2
D2D2A4A4A4D1D1D1B5B5B5BABABACFCFCFA8A8A8C7C7C7000000000000BBBBBB
939393C0C0C0A8A8A8A2A2A2C3C3C3939393C7C7C7969696B8B8B8B2B2B29A9A
9AC7C7C77F7F7F00000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000}
Visible = False
end
object panTColor: TPanel
Left = 512
Top = 4
Width = 33
Height = 20
BevelOuter = bvLowered
BorderStyle = bsSingle
Caption = 'T'
Color = clWhite
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
TabOrder = 0
OnClick = pnlFGClick
end
end
end
end
object GroupBox4: TGroupBox
Left = 0
Top = 386
Width = 563
Height = 90
Align = alBottom
Caption = ' Image effects: '
TabOrder = 1
object Panel10: TPanel
Left = 2
Top = 15
Width = 265
Height = 73
Align = alLeft
BevelOuter = bvNone
TabOrder = 0
object LDuration: TLabel
Left = 4
Top = 1
Width = 45
Height = 13
Caption = 'Duration:'
FocusControl = pbDuration
end
object Label6: TLabel
Left = 4
Top = 27
Width = 66
Height = 13
Caption = 'Image effect:'
FocusControl = cbEffectsList
end
object pbDuration: TProgressBar
Left = 4
Top = 15
Width = 256
Height = 9
Min = 0
Max = 100
Smooth = True
TabOrder = 0
OnMouseDown = pbDurationMouseDown
OnMouseMove = pbDurationMouseMove
OnMouseUp = pbDurationMouseUp
end
object cbEffectsList: TComboBox
Left = 4
Top = 43
Width = 129
Height = 21
Style = csDropDownList
ItemHeight = 13
Items.Strings = (
'Gaussian Blur'
'Split Blur'
'Add Color Noise'
'Add Mono Noise'
'Antialias'
'Contrast'
'Fisheye'
'Lightness'
'Darkness'
'Saturation'
'Mosaic'
'Twist'
'Split Light'
'Tile'
'Spot Light'
'Trace'
'Emboss'
'Solorize'
'Posterize'
'Grayscale'
'Invert'
'Brightness'
'Colorize'
'Resample [Box]'
'Resample [Triangle]'
'Resample [Hermite] '
'Resample [Bell]'
'Resample [BSpline]'
'Resample [Lanczos3]'
'Resample [Mitchell]')
TabOrder = 1
OnChange = cbEffectsListChange
end
object btnApply: TButton
Left = 138
Top = 39
Width = 49
Height = 25
Caption = 'Apply'
TabOrder = 2
OnClick = btnApplyClick
end
object chbAutoAply: TCheckBox
Left = 191
Top = 43
Width = 70
Height = 17
Caption = 'Auto apply'
TabOrder = 3
OnClick = chbAutoAplyClick
end
end
object Panel11: TPanel
Left = 267
Top = 15
Width = 294
Height = 73
Align = alClient
BevelOuter = bvNone
TabOrder = 1
object grSubimages: TGroupBox
Left = 0
Top = 0
Width = 143
Height = 73
Align = alClient
Caption = ' Subimages:'
TabOrder = 0
object LPatternWidth: TLabel
Left = 5
Top = 22
Width = 32
Height = 13
Caption = 'Width:'
end
object LPatternHeight: TLabel
Left = 71
Top = 22
Width = 35
Height = 13
Caption = 'Height:'
end
object ePatternWidth: TEdit
Left = 39
Top = 18
Width = 30
Height = 21
TabOrder = 0
Text = '4096'
end
object ePatternHeight: TEdit
Left = 108
Top = 18
Width = 30
Height = 21
TabOrder = 1
Text = '4096'
end
object btnResize: TButton
Left = 15
Top = 43
Width = 59
Height = 25
Hint =
'All subimages will be resized to new size from width and height ' +
'boxes.'
Caption = 'Resize'
ParentShowHint = False
ShowHint = True
TabOrder = 2
OnClick = btnResizeClick
end
object btnReplace: TButton
Left = 79
Top = 43
Width = 59
Height = 25
Hint =
'All subimages will be replaced under maximum size of texture (20' +
'48x2048 px).'
Caption = 'Replace'
ParentShowHint = False
ShowHint = True
TabOrder = 3
OnClick = btnReplaceClick
end
end
object GroupBox2: TGroupBox
Left = 143
Top = 0
Width = 151
Height = 73
Align = alRight
Caption = ' Zoom factor '
TabOrder = 1
object Label13: TLabel
Left = 36
Top = 48
Width = 14
Height = 13
Caption = '2 x'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Label17: TLabel
Left = 67
Top = 48
Width = 14
Height = 13
Caption = '4 x'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Label18: TLabel
Left = 98
Top = 48
Width = 14
Height = 13
Caption = '6 x'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Label19: TLabel
Left = 129
Top = 48
Width = 14
Height = 13
Caption = '8 x'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Slider: TTrackBar
Left = 33
Top = 16
Width = 115
Height = 33
Max = 4
Min = 1
Orientation = trHorizontal
PageSize = 1
Frequency = 1
Position = 1
SelEnd = 0
SelStart = 0
TabOrder = 0
ThumbLength = 20
TickMarks = tmBottomRight
TickStyle = tsAuto
end
object chbZoomOut: TCheckBox
Left = 5
Top = 19
Width = 31
Height = 17
Caption = 'On'
Checked = True
State = cbChecked
TabOrder = 1
OnClick = chbZoomOutClick
end
end
end
end
end
end
object OpenDialog1: TOpenDialog
DefaultExt = '.bmp'
Filter =
'All (*.dib;*.jpg;*.jpeg;*.bmp;*.ico)|*.dib;*.jpg;*.jpeg;*.bmp;*.' +
'ico|Device Independent Bitmap (*.dib)|*.dib|JPEG Image File (*.j' +
'pg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp|' +
'Icons (*.ico)|*.ico'
InitialDir = '.'
Options = [ofAllowMultiSelect, ofEnableSizing]
Title = 'Open Image(s) sequence...'
Left = 56
Top = 328
end
object DXTimer1: TDXTimer
ActiveOnly = True
Enabled = False
Interval = 0
OnTimer = DXTimer1Timer
Left = 496
Top = 216
end
object SaveDialog1: TSaveDialog
DefaultExt = '.bmp'
FileName = 'Glue.bmp'
Left = 288
Top = 352
end
object DXImageList1: TDXImageList
DXDraw = DXDraw1
Items = <>
Left = 488
Top = 304
end
object PopupMenu1: TPopupMenu
Left = 80
Top = 80
object LoadImagedirectly1: TMenuItem
Caption = 'Load Image...'
OnClick = LoadImagedirectly1Click
end
end
object PreviewTimer: TDXTimer
ActiveOnly = True
Enabled = False
Interval = 0
OnTimer = PreviewTimerTimer
Left = 240
Top = 88
end
object FontDXImageList: TDXImageList
DXDraw = PreviewDraw
Items = <>
Left = 272
Top = 88
end
object SavePictureDialog: TSavePictureDialog
DefaultExt = 'bmp'
Filter =
'All (*.dib;*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf)|*.dib;*.jpg;*.j' +
'peg;*.bmp;*.ico;*.emf;*.wmf|Device Independent Bitmap (*.dib)|*.' +
'dib|JPEG Image File (*.jpg)|*.jpg|JPEG Image File (*.jpeg)|*.jpe' +
'g|Bitmaps (*.bmp)|*.bmp|Icons (*.ico)|*.ico|Enhanced Metafiles (' +
'*.emf)|*.emf|Metafiles (*.wmf)|*.wmf'
Left = 88
Top = 344
end
object ColorDialog: TColorDialog
Ctl3D = True
Left = 128
Top = 80
end
object DXDIB1: TDXDIB
DIB.Data = {
280000008000000080000000010018000000000000C000000000000000000000
00000000000000000B202F061B2A132A390D24330B22321128380D24340E2535
122534122330132330182730162129030F1510191D040E150D1A2215242D1B28
3007141C15222A09161E15232914222818282F0E1E250F2029061921000F1A0F
232E0B1F2A0C202B15253112222E0B1C29071825152837041726021627172B3C
12283A13293B0E24360D23350B2133172D3F0E24360B1F3010202D1828340D1D
2A1526331528371227360F23350B213311293B0013251F3749051D2F0A213106
1D2D1229390E27370D263A031E32112B3C0B25360F28380A2333122736122736
1326350B1E2D10212E00101D0415221223300E1F2C0C1E2917262F1020271121
2D081A251929391C314014283A283E50203648263C4E283C4D2135462838482E
3E4E2838452636422D3D4427373D172930273A41192B361F3540253B47253D49
213B49142E3C2D4856132E3C1B3742223E491E3A4517333E223C4A17313F233D
4E1E3849193448213C50152F40183243172E3E2A415121384819314319324619
354D233E581B38531F3241162B3A405564243B4A263D4D294050233A4A243849
1B303F2E41503343502C3A462E3B431A262C1E282F111D230A19222939453443
4C29384133424B22313A1F2F3612222943525B1E2F3819293510222D0F222F15
2B37192F3B1A2D3A3F505D0F202D2738450B1E2D4659681E3243162A3B1A3042
21374943596B304658172D3F304658445A6C243A4C2A3E4F40515E2D3D491A2B
382C3F4C283B4A1A2E3F3F55674A6072294153243C4E2F4759263E502F455722
3949182F3F253D4F354E62233E522C46572741522B44543249593247563B505F
425564182B3A132431192A370A1B281627341D2E3B24354244555E1627301F2F
3B142532455867203445172D3F1D35491F374B475D6F31475914283932445543
566525354532424F38495236484F1A2B342F424A273B46203642394E5D445B6A
2D46561C3545334D5D1E38482D48561C37451A35432C47552D4755233C4C2741
522844552540542E495D2E475B3A5465263D4D2D4454253C4C223A4C2E475B28
425A304B6535526D3F505D4154615265723A505C364B5A3D52613E52633E5263
394E5D475A694758653B4B574B57612F3A42333F452B384032424E3F505D4757
644757643B4B573E4E5A4A5A663E505B5B6D78364A552F424F3147532A3F4E3B
5261415868364D5D485B6A354857304352344859506475344A5C384E60324A5E
445C704E667A41596D364E623F5567455B6D32485A4256673646564253604454
643B4E5D485A6B3C50613B516353697B3D556940586C364E623D556741576941
57693E546651697B455E723E576B486072475F71415868485F6F425766526776
576A793F52612E41503245543245544053624457663447564154613447543B4E
5D30445543596B354D612B4357324A60455D73445C72455C723D5267384E604B
5F7047596A4154633C4C594656623F4F5C4354614255643C5160435768566D7D
435B6D3852633B5566304A5B445E6F466071375161445E6E4A6373476070435D
6E4A65793F5A6F3B566A395266445E6F445B6B344B5B435A6A3B536547607442
5C7449647E3C57721728313B4E560C1E29192C390D202D172C3B172C3B213546
213645152A391D303F2A3B4845535F213039323F4735444D263646374B5C2F41
522D3F503447563144531B2E3D3E51600A1D2C465B6A304455283F4F22384A34
4C5E21394D435B6D203747344859273D4F263C4E30455A253D51435B6F324B5F
2A4157334B5F1C3448253D512E43581D33452036484C6071081B2A4D606D3649
583045543D51622A4151283E502B41531D3549243C50253D51395165273C5126
3C4E2A40522A4052162E422A42542E46582F4656162D3D1930401C3140314655
071A29405362344756233847243948182C3D2C4051243B4B354A592439482D41
52283E50334B5F1C344A1B334929435B233D553B556D213951172E443C546820
3648142A3C3C50610515254454643040513345563C4D60283C4E3C51662D4559
223A502E465C2D455B2F475D1E364C3952662B44583F596A243E4F2842531C37
4B2843582441562E4B6041596F556E82000F214B62720F26362A4052263E521A
324A263F591B36510B1B2249596005141D23343D1C2E392235420E2332324756
283C4D0C21301E31403546533B4C590F1F2B23313D1F303D213547283D523044
563246582E42543B4F61182C3D3D5162081C2E3C5264283E502D4557213A4E42
5B6F2E465C263E541E364A2A42562C4458243D512E465C4A6278475F75395469
2C445C334B611F374D30495D21394D1B33473E5466455C6C102534384D5C3A4E
5F3F5666304658344C5E1A324630485C1B3248233A502940563F576B30455A1B
304523384D293E53162C3E3C526433495B314556112536162B3A293C4B3F5261
061B2A506574293D4E354C5C2F46561830422C44562E46582036482B4355223A
4E344C62122D42213D55142F492E49633A556F3D5872243F59213B5341597119
304631485E3D52670010234353643D4C5F28394C33465B34495F394D66334962
334B63223C541A344C2E48601B354D39536B28425A2843581F3A4F2A455A213C
51233F5726425A334F67455D73546D810014263B51631B2F402036482840542F
475F2B445E1B344E0C181C45535917252B1B2B3221323B1F313C041724405564
1D3142081C2D1A2E3F2C3F4E253847071A272536431D303F1B30453B52683348
5E22374C31465B43586D13293B485E7003182D41566B344C602D4559243C5228
435828425A2B455D1E385028425A223C542F49613F5971536F87465F79375169
26405848627A1F374F243C52354C62253D512B40553B5163021929405969253C
4C40596930485A2840521A324630485C1D344A273E54253C52384F6542576D20
354A23384E455A6F102638354B5D2E42532A3E4F112635162B3A263948394C5B
000E1D4F6473283F4F4860721B3345173044294256334C60082135223B4F324A
60142F440D2941132F4724425B1F3C5745627D36536E17324C1A354F41597111
29412D445A3D52680112274F607328394E2B3E5334495F2137503D526D2E455F
29425C223B55314A642E476119324C28415B304A62243E561731492640582B47
5F2B466039546E415C7646607850687E001226455B6D182C3D1D3143455A6F30
475D1A324A162F49131F21455153222E321422281C2D36182A350E212E455A69
293D4E1A31411D34442438491D3142091E2D213443192D3E23384E3A5167384F
652F465C23384D31465B1C314630455A0E2338354A5F2B42582F465C21395126
3E562F48621C354F203B5528435D2E496326415B536E883B59724B668138536D
25405A29455D1D374F2D485D30485E2C45592F475B344C5E0820324862733048
5A2D4758263F532E475B132B413F576D162E44233B51243A53374D66445A732A
41571E324B384D631C2F44324658384A5B2F41521C2F3E1E31401B2E3D394C5B
0013224B606F2D44543F576928435738556A28455A223F54274054223B4F1B33
49132E43112D4517334B1A385114324B415C7635506A19344E1B36503D556D1B
334B223A503F566C0011263E516622344B293E5430445D253B542D425D283F59
28405C223A562C455F213A54233C562F4862314B6317314928425A28415B2E49
631F3C5735526D3D5872425C74526A800012263E546634485945596B22374C2C
43591129412D46600E1818434D4D1723251524271C2C331829322233403F5463
283C4D1C3343162C3E23394B294050172E3E1F36461B314321364C354C62283F
552C44581D324722374C293E5341566B04192E485D72293E542C43592B415A30
4860223A521D365024415C25425D304D681F3C5739567145627D34516C425F7A
28435E223D572C465E314B63253D5330485E30485C30485C021C2D3A54652E48
59395364243D51213A4E1E364C354D631C344A20384E2137502D435C2F455E38
4E67344861384D63283B502D41533D4F6027394A1225341528370A1D2C3B4E5D
0013224960703D55672F485C3B566B39586F17364D24435A1E394E263F53213C
510823380B263B17334B2C4860203C542E4963334D652F4961223C54273F572C
445A294157374F63000D2240556A192E442D445A344A632A425A3B536B2D445E
28415B233C5627405A2C465E2A445C253F57203A52203A522B445E213C56324D
6823405B415E79415E79435C76566E84001226384E6031455725394B2D425710
273D374F6737506A1119183E48480A16181D292D1F2C3423343D1223304C6170
1B2F40182E40193143233B4D2B4355071F311A3244263C4E2A3F543A4F64283D
522E44563044563246582B3F513A4E600D21333B516333485D30455A2B405630
475D263D53233D553B5873213F5C2D4B682543603856733D5B78516F8C2F4D68
24415C203B553E5870213B53284056324A602840543B5367021B2F2E495D3F58
6C375064253E522740541B32483C536921384E1D344A243A5340566F263B5633
4863283D5840546D2B3E532C40523D51622A3E4F1D303F293C4B1A2D3C364958
061B2A4A61712A42541D384C4663783B5A7114334C15334C254055314A5E1831
45112C40213C50173247233E531934491A344C455D732E465C1F374D1A314725
3D512A42564D6375041A2C455B6D2D425728405431485E243C5240586E2C465E
29435B2B455D28425A2742572A425830485E1F374D263E543D5670223D582F49
672A46643753713E5B76566F894C647C02192F3A5062394D5F2B3F5123384D2B
4258223A52375169131B1A4650501D26291F2B2F23303821323B142532445968
122637172D3F142C3E21394B253D4F0A223420384A1F37491A30422A40522B41
53253B4D1C30423145562D41533C5061061A2C3B4F6125394B2C41562E43582A
3F55273C52263E5636516C2A4865213F5C36547139577443617E4A6885304E69
25425D243F593A546C243E561E364C233B51223A4E41596D0E273B3550642E47
5B364F63253E521B3448243B513B52681B32481D344A2A4059354B64263B5627
3C57253A553B516A1E334820364830445625394A1C2E3F2F4251223544425564
0B202F445B6B284052203B501F3B5327465F36546F082740254055233C501A33
47243D51213C50173246213C501D364A273F55314A5E334B5F233B4F122A3E2E
46583B5163465C6E0B2133364C5E1D35472B43571F384C1A32482843582E495E
142F441E394E1F3A4F2E495D2A4357243E4F243D512A42583C556F304864233D
5B37537135516F47627D526B85526A8200152B586E802C4052172B3D293E5322
3A4E3A526A334D650B13133E484820292C1B272B2330381B2C35172835445968
15293A1C3343172F4121394B1E36480E2638223949193040253C4C384F5F3044
5523374827394A3C4F5E1D2F403649580A1C2D43556622344530445632465822
374C273C51243C52314C662E4B66324F6A39567145627D324F6A4C6984415E79
2A456025405A29435B253F571E364C223A50223A4E3E566A071F3530485E3049
5D3F586C253D5111293D1C3448354D611C3349253C52283E57314760273E5829
405A243B553D556D263D532840542B4153243B4B172B3C2D41521D303F3E5160
0E23324E65751B3345314C6118344C22415A46647F23425B294458365061253F
502A4455445E6F294354102A3B2E46582A42562B4355364C5E263C4E1A30422F
46562E4253405767081F2F324B5B263F4F2C44561C3647223B4F233E522A4559
2C475B264155162F432F495A2B4355223B4B2840521B3448334D65304963324D
683F5A7545607B35506B4F68825C748A051D31475D6F2E425414283A30455A27
3F533149612741590D14173C45481C272B1D292F24303A1E2E3A1C2D3A4A5F6E
1D31421A31411A32441F3749183042142D3D1A3141172E3E1C33431A31411D34
442C40512237463A4D5C2639483144530F2231415463293B4C374B5C2D415321
37492B405521384E38516B2A48611E39543B597246617C47647F3A577238566F
26415B2440581E38502A455A253D532D465A2A42563D55690A21372A42583D56
6A475F732840541C3448172F4331495D2F465C384F65233952364C65283F592F
466019304A354C66243C54273F55223A4E243A4C172E3E2F43541E3140415463
071C2B4A61711830422C445A2541591A38513E5C77304F682D485D253F502942
562C46573F596A253F50122A3C233B4D152D3F1C3446293F5133495B2037472C
43532A3E4F485F6F031C2C3952622C4555213A4A2640512741522B465A2D485C
284357264155213B4C354F60233C4C1D36462D4656253D4F374F672A435D1E36
52415C7746617C4B66803E566E4F677D00152A3D5365213546294050334B5F24
3C523D576F112B430F181C434C501D282C1B292F19283120303C142532354A59
1E32430D2434182F3F1930401930401B32411429381F3646172E3E344C5E2039
492D44542B42523246571C3140374C5B091D2E3347582D4152374B5C20344622
384A2E43581C334928425A1F3B5329425C3D59713E5771435E7825405A37526C
1D36502640582038502E465C253C5230485C30455A40586C132A402D445A3149
5D384D6224394E24394E1B3143253B4D31465B364B601C33492F465C2C445C2C
445C1A334D37506A1C364E223D521C354921394B1930402D41521D303F415463
081D2C4259692D45571931472F496118334D36536E24425B203D521732462944
591C374B314C60193448142D4120394D1830421B3345243C4E435B6D162E4027
3F5133495B3D5365041D2D405969183042132B3D263F53213A4E284155385165
1D364A1D364A284052364E60223949233A4A2B42521E36482E455B243C542841
5B40597339546E445F792B435B546C82000E233E5466243B4B2C43532A425638
50663F597115304A111A1E495458222E3418252D15242D233540122232203544
2034450D2434162D3D162D3C2037461C3342112635253A490E2638243C4E172F
412841511930403249592F4656344958091D2E3145562D415233495B192F411E
364A2B4357162E443B53691C374C2E465E2A445C425C7449637B2B445E2F4B63
1C364E1F3951183046233B511F374B2D45592B41533B51630C2438384F65253A
4F30455A21364B1A2F4424384A1D31432A3D522A3F5420374D21384E324A621F
395127405A3B56701F3B5328445C213C51243D511C3446253C4C162B3A3C4F5E
081D2C4C60712A40521C3448324A602E48601B36512F4D662140572542572F4B
631732472A455A183347163145294256233C50344C5E2941553B53651B334529
415329415331495B001628496272142C3E172F411F384C2B4458243D51314A5E
253E521F384C20384C2C44561E3446243B4B253C4C142A3C3D546A1E344D2E45
5F2D46603F587249627C2F475F4D657B0011263E54662C43532A43532942563C
576C17334B25405A1B252C49535A2631391A272F202F382638431C2C3C293E4D
203445182F3F142B3A152C3B2C4150192F3B1629362035441D35473650611E38
49233D4E1F37493750601D36463047570A2032394F6122384A2D45591F374B1B
3248283F551830462F475D2B44583950663B53692B43593E596E2640583C566E
263E561D354B162E4421394F223A4E2C4458253B4D374D5F071C313E53682C3F
54384B602C40522236482C3D50273B4D35495B34495E2B42581B32482E465E19
334B28415B2B46601C3A5327465D244156243F53233B4D243B4B1C3140425766
011423495D6E1C3244223A4E263E543D576F0B264134516C37556E1A39502543
5C213D550C284014314628455A1833481732472F485C263E542A43572A435727
40541C3549425A6C001628445C6E243C50253D511F374D364E64253D53273F55
21394F243D511E364A2D45571C32441B2F412E4253263C4E2B43572A41573850
683F5971263F593D5670284058566E84000E234A60721C33433750602D465A1A
354A0E2A4223415A1F293337434D16252E11202921313D182936172A37354857
192E3D1E3544102534142A36324854142A351B2F3A1B313D122B3B1F394A1E38
49294354172F4130485A172F41364E60051D2F3E566A122A3E28405429415519
31452A425620394D1D354B21394F3E566C364E6430485E2B455D243E56274159
29415720384E263E542E465C28415528405421394D40586C091E332F44592338
4D2A3D522A3E502E425424384A2D4153334759344A5C253A4F172E4428405626
3E542E486028425A213D552D4A5F2A455A263F53243C4E1E3446182C3D415463
0316253A4F5E344859243C501C344A3E57712A4560233E593D5B74214057132F
4719354D0C2840203D52284358183348173247132E432A42582F475D2B435917
2F45132B41445D710D253730485A2C42542A4256243C502C445A233B512D455B
2B43592A4357122A3E32485A2C40521E32442F43541A30421F364C233B533F57
6F37516929425C2C445C2B43594B6377001227405668283E5031495B17304418
3348132F4728475E21304040515E11222F11222F000F1C102330172A372C3F4C
1D303D1F35401E323D1C303B182C370D222A1229311E343F21384721394B172F
41334B5D1B34482B44581F384C2D465A061F333A5266142C402B4357273C511E
3446243A4C2F475B162F492A476239546E29445E324D67274159344E6628425A
243C52263E54273F551F374D273F551E364C263E54334C600A2236324A5C3149
5B2A4052374D5F1F3547253C4C314858243B4B364C5E1B314320354A29415531
495D2F475B273F53183042314759314759293D4F2233462233461E30413C4F5E
091C2B4156652A3E4F233B4D2C445A3D56701F3A551C3752253F57142F441C37
4C213C511B364B0B263A1730441E394D1631451A3549213C511732472F4A5F0E
28400F29413E566C051B2D3F56663347581C324432485A273F532E465A233B4F
294155294155172C412B41532B3F511E3243283C4D2F455716304827425C3E59
732B445E344E66294159354C624C617600152A3F5469324A5E263E52152E4215
3044233E533350651B2D3E445766182B3A1023320215241326351A2D3A304350
1D313C162A350E232B20353D21363E1B30380F262E172D38233847283F4F192F
4130485A223A4E2F485C263E54334B61041C32395167152D412B4357263C4E1E
3446243849273F53132E48213F5C3A57722A476236516B213C5629435B213B53
233B51273F552C445A1C344A213C511C374C2A455A2F485C021A2E3951632941
531A324430465813293B2A4151283F4F2A4151374E5E1A304212283A22384A26
3C4E2F455732485A1E32433145563243562A3B4E2332451F2E411C2C3D3E4E5E
0F222F43566324394822384A22394F3A526A2D45612038541F374F1931471D36
4A1730441932461C3549263F531D364A0F2A3E142F432D485D203B50435D7510
2A4218314B374F670A2032495D6E3246572A3E4F22384A2A40521F374B243C50
233B4F263E52162C3E2A4052283C4D1D314225394A243C4E1531491E3B563F5A
7429445E385068263E542F4459485D72000B20485D721D35491931451E374B10
293D2843582A455A1727374C5C6C2232420E1F2C0819261526331A2B3830414E
21333E192B360317221B2F3A1A2E39253944122631172D391D32412A4151152B
3D253D4F243C502C4458274054334C60021B2F375064152D41253D512137491C
3244233A4A223A4E1D385223415E37546F27445F27425C213C56213B532B465B
1F374D1C344A253D531D354B1F3A4F1C374C2D485D344D61051D314C62742A40
52172D3F32485A12283A374D5F263C4E1C34462D4557132B3D152D3F253D4F27
3F51223A4C273F511B31432C42542D4153273B4D2031441B2C3F1D2D3E425262
081B28415461273C4B2E45551D3549263E562C455F243D57324A602E475B2942
561730441C3647253F50284253152F4010293D1B3448253D532B4359374F6714
2C44193149374E64041A2C3B4F603046581E34461A30421C3244172F43243C50
1E364A253D51172D3F273D4F2137491A3042263A4B223A4C203C542240593A55
6F26415B2B435B263E54283D524F647901162B54697E172C411B3347142D411A
3347254055243F541121314D5E6B2435420718250718250E1F2C11222F263744
1E303B2537420E222D1E323D0F232E2B3F4A1428331B2E3B1528372C40511529
3B1C324423384D263E52243C502E475B031C3039526619314521394D1D33451B
31432A4151253E5222405929476235526D26445D17324C28445C213C513B566B
20384E122A40193147284056203B501C374C2A455A3D556B021A2E4C62742036
4812283A293F5112283A2E4456183042223A4C2B4355082032132B3D233B4D2A
425418304221394B1A32442F45572D435524384A1C30421D2F401F2F3F425262
04172444576424394833475821364B152C42203850253D552C445A253E52213A
4E162F431E3849223C4D284253213B4C152E42213A4E1C344A2C445A2A425A1C
344C20385041586E081E30354C5C364C5E2137491E34461E36481E364A31495D
1F374B2840541B3045263C4E1C32441B31432D415328405226425A2847603654
6D28445C1C374C2D455B243C50566B80071C313F54692A3F54172C4119314525
3E5220384E1A354A11212E4E5E6A21313D0515210717230C1C28091B261F313C
1D2E3B2839461D2E3B2B3C491728352E3F4C1425321B2E3B0F22312D4152192D
3F1A304222384A2A4254243C5030485C071F333E566A223A4C273F511D35471B
33452E475728415519375026445F3C597427455E1A354F2D49612641563C576C
253D53183046152D432F475D1E394E213C512540553C546A0B23374D62772338
4D1F3449263E5220384C253D511830442A4256274054112A3E152E4229425621
3A4E122B3F1932461A3445334B5D2E47571E3545172B3C1C31401E31403A4D5A
0A1D2A5164711B303F22364720354A162D43182F451C33491E364A1D35491F37
4918304221394B233B4D2F4858344D5D11293B172F411B3347223A4E30475D1E
354B273E5440576D051B2D344A5C283D52243C500F273B223A4E162D432C445A
20384E2A435720384C2941551A32461931432D43552740541A395027465F3C5B
7228445C1F3A4F31495F29415554697E0012273E5166283D5221364B31465B43
5B6F193145213A4E1725314A5B641B29350717230A1A2610202C0A1A2620323D
2536431F303D1829362738451B2C392637440E1F2C20313E0C1E2F2C3E4F1C30
421D3143223648364C5E283D52324A5E051D313B5367253D4F2B435521394B1A
32442B4454203A4B14324B23415C4260792240591F3B5328445C2B465B3B566B
243C5220384E162E442941571A354A28435828435839516708203443586D2136
4B24394E1E364A233B4F1B3347112A3E243D511C3549233C501B3448344D6115
2E421730441C35491630412F495A2A435316303E1229381F3541203340384B58
0114215A6D7C25394A1D314322364820354A192E43152D41172F43243C502941
531B334521394B253D4F324B5B364F5F1830421C3446142C401F374B263D5329
40561D344A3F576B0C2234384E602F475B2840541E364A273F53243C522F475D
21394F2A4258223A4E2E465A1D35491A32462B41531F384C14334A22445C3E5D
741E3D54213C5129415730485C566B800011264C5F741A2F44182D42455A6F3E
53681B33472B43571B273143535A111D270D1C25101F281829320F1F2B283844
2A3B48192A371627341B2C391B2B381E2E3B0E1E2B2233400F2132293B4C1F30
431C30421D3143415769273D4F33495B051D2F354D5F21394B294153213B4C17
31422842521733441A354F2B48633D5B742947601A364E25415928435841596F
2D465A2740541C344A223A50263E542E465C304A623F576D0C2136485C6E2C41
562D425721394D263E52273F55172F452B43591732471D384C1833472540540F
2A3E1A3647274354142E3F2A4455243D4D142E3C132B3720364120343F384B58
00101D546776304253283C4E263A4C263C4E2036481F34490B23371D3549243C
4E162E401E3747223B4B2D46563049592940502B425213293B243A4C21364B3C
5166182D42475C71051B2D30465830485C1E364A253D531B33492C445A263E54
233B51263E541D354B2D455B1F374B1C34482A40521A334716354C2A4C643A59
7026455C1C374C263E542F475B596E830013254054661E32440E223441566B11
263B24394E293E531D28303E4B5308151D101D251120291F2E3713232F2D3D49
2435421A2B382334411C2D3A1F2F3C1F2F3C12222F1D2D3D182839293B4C2132
451F30431A2E404B5F71273D4F3147590B2133334B5D1E3648273F51233D4E19
33442B45551934481B374F34526B35536C3D5C7316324A2E495E223A5041596F
435C70314A5E273F55263E54364E642D455B334D65475F75051A2F44586A2D42
57293E531C34481D35492D455B132B412641561732471732462A4559213C5018
33470D293A1A34451C36472C4555243E4C16303C152E381C323D182E39344754
0E2130495B6C26374A2C40522A3E502F43552A40522B4153162E42223A4E263E
501B3345223A4C1F3848243D4D2942522037471D344412283A142A3C263B5039
4E6314293E3F5469051B2D3A50622E465A2A425621394F20384E2B4359243C52
263E54233B51162E442941571E364A1E364A2C42541B344814334A35576F3554
6B3E5D741B364B2C445A253D51566B80000E203E52641A2E404357691A2F441A
2F441D32472F44590A141B3C484E131F251C29311C2B34202F3820303C394956
1D2D3D1323332030402030402F3F4C21313E11212E1D2D3D0B1B2C3142551D2F
402C3E4F162A3B3448592D41522F46560B22323F56662039492E4757213B4B1B
35452E485925405416324A27455E2F4A6456728A2D475F203B50445C72364F63
3E576B2B44582A42582B43592E465C1931473149613D546A091E33415567243A
4C394F611E364A223A4E374F65142C42203B50213C511530442944581C364726
4051102A3B1B334530485A1B32422037461A323E1F363E0F262E1127323C525E
0317284C607225384D23364B34475C1F35471F35472C42541C3448162E422139
4D1B33450E26382A42541730402D4656142B3B2138481E35450C23333147593A
5062192E433B5065051B2D384E602B43571830441D354B1E364C253D53294157
2D455B2D455B1A32482A4258263E521B3347354B5D253E5213324921435B2E4D
6458778E274257294157385064576C81000F213B4F612A3E502E425420334818
2B40364B6021364B010C103540441C282E0D1B2124303A1A29322F3F4C2D3E4B
1525350818281E2E3E14243425354221313E1323302636461E304127384B2335
463547581428393D51622135462B3F500920303F5666263D4D2C4555243D4D1A
34442B45561E394D213D552D4C63334F674561792944592843583F586C375064
3B54682D465A21394F253D533A5268243C522840583A51670D23354054662339
4B203648223A4E1C3448324A60193147264156213C51132E422740541F394A21
394B1D35472036482F45571C3041243A46182E39223A401A323810272F2E4450
0B1F304A5D7234465D2A3F5532475D1C34482A405221394B284054223A4E2C44
581C344809213520384A1A3244395262243B4B1B3242283F4F162D3D253B4D36
4C5E152A3F3D5267071D2F304658263E52243C50223A501F374D2A4258354D63
2C445A2B4359263E542C445A253D511E364A2C4254223B4F2342592A49622E4D
64405C74304B602E475B3F576B52677C05192B4D61733044562D41531A2D422C
3F542C41561A2F44081317343F4318242A08161C2E3A4421303941515E283946
0A1A2A0C1F2E1B2E3B1629362A3B481B2C391B2B371D2E3B2A3C4D2236482539
4A273B4C25394A2D4152182D3C2F44530A1F2E405766294050274050263F4F1D
36462C46571B364A213E5332516836526A304D62233E532C475C385165395266
3B5367284054294056263D53223A50253D53364E663B5268081E30485C6D1A31
41243A4C1F374B2C4458223A501D354B2D455B21394F173044263E521F37491C
3343263D4D1D31422A3C4D1A2D3C2337420D222A1B313722383E152C34344A56
061C2E50657B3E516C283D58364C65193147253D4F1B35462B44581D354B243C
52162F4310293D1F394A152D3F2840521F38481932421A304222384A1B314322
384A22374C394E630D2335344A5C1C344830485C142C40273F532D455B3B5369
2A42582840562C445828405421394D223A4E263C4E20394D1E3D5234546B3352
692D49612843582942563C5468566C7E000D1F4C60723F5365192D3F1A304226
3C4E263B501B30450E191D404B4F18242A15222A1928310D1D292C3D4A1D303D
0013221D303F1326331D303D32435010222D2838440F202D263849374B5D0317
28273B4C2438492E4253061B2A3B505F0A1F2E3E5362283C4D1C3343253C4C1C
35452A425417324618354A35546B304D62213E531D384D284358334C60375064
3850641E364A2C4359283F55162E4420384E3B536B41586E081F2F405564233A
4A1D3444263E50284054243C521A3248273F551B334720384C283E501A314126
3B4A2C3F4E1D303F2030411929392739440A1D2413292E1F353B172E363E5362
091E33435972455A76394F6B273E58142F442F4A5E122E3F2E495E1E364C263E
541D354B20384E2841551B3347233B4D233B4D223B4B1C3244273D4F172D3F1E
34461F344932475C0D23352F4557293E53223A4E1B334720384C3A51672E465C
263E54263F53233B4F1D35491C344821394B23394B1B33471330453A5970304C
642540551B344829415532485A556B7D000D1F4E6274415567162A3C293F5128
3E502A3F54263B500E191D434E52101C2217242C1827301A2A362A3B48122532
0012211D32410B212D172A372B3D480E202B293C440E222D2B3F502E44560013
231F3646273C4B2C41500518273B4E5D0A1D2C3A4F5E2136451229381E354517
30401E36480D263A1E3B503A5970223F5419364B1A3549233E52314A5E2F485C
2F475B193145263D53233A50294159253D552A425A465D73092030394F5B2138
471B32421830421F374927405419324621394D132B3F2A3F54283C4E15273837
4A592E3E4E253444232F41212E3E2F3E4714262D1D31361C32371229313B505F
00142A516681425776374E6E2E466218344C223F541E3C4F2340551C364E2640
58193449102B40142F431730442D4758243E4F1731422A42541D35471B30453A
4F64162B403F5469021628354C5C182E40354B5D142A3C30485A2E465A284054
243C502840541A2F44182E401C32441D33452135470E26381E394E3A566E2441
561732471B344830485C2E44564C60720011234C60721F33451A2E40253B4D28
3E50162E40162E40030E12434E5219242C132028212F3B2C3E493245520D232F
051A29182D3C192F3B162C3820343F182B33182B320F242C30445513293B263D
4D1D3444263B4A1B303F102332384B5A0B1E2D3E5160223746152A391E324318
2F3F172D3F092236304D6239586F13304519364B1833472540542C4559263F53
233B4F1A3246364D631C33491E364E273F57324A62425A6E041B2A3A505C1B32
412A41500E273720384A253E52142D41233B4F13283D2F43552436471121313B
4B5826364323303E2F394A2C36472C384215252B233639203439182D353A4F5E
03182E455B773C53733F587A29436115334C2342571A394E29455D26425A314B
63274159142F441530451D364A3A53671C3647152F40233B4D152D3F20354A3A
4F64182D423E53680A1E303B4F60182E40283E501B3143253B4D284054294155
233B4F294155182E40182E401D3345182E401B2F400B21332E495E3551692742
57162E4421394D2F4459314557495D6F071B2D4C607222364823394B2C425425
3D4F1830421931430005094C575B2F3A4217242C12202C192B361E313E0D2231
0E23321C3342253B471D333F1A2E39172C340A1D240E232B263D4D11293B2B42
52294050152A391D32411225323A4D5A0C1F2C415461243746182D3C1B2F401A
31411A30421B33473350652A495E0F2C41223F54153044274256223B4F233C50
21394D193145465D73193046152D45263E563B536B3F576B031A29394F5A243C
48243B4A203949162E402C45590F283C273F5313283D2E42542335461C2C3C36
465324313F1D2836333B4C343D4B252F39101E242134371D32341D323A394E5D
0317304E6382364C6F344C703E577715324D1332491D3C5126425A233E582440
58254159133045163348142F432B465A274054213A4E193145172F431C34481E
364A152C422C41560A1E304A5E6F1B2F40203445162C3E1F354720384C2A4256
233B4F263E521F3547172D3F1B2F401C30411A2E3F1C32442F4A5F2E4A622944
59253D531E364A283D522C40524B5F710115273F53652A4052213749253B4D21
394B1830421630410A13174A545B1D292F16212919252F2A3A461D2E3B132633
142A36293F4B2036421D333E0E242F0B222A0B2028122833253A491A31411B2F
40192E3D2034451D32411D303F334655091C2B3D52611D324115293A15293A1C
32442137492D465A2A455919374A132E422F4A5E122D41284253183145264051
253D511830443C5468193046344C64284058263E5641596D051C2B445C68182F
3E223C4A173040183243294256162F43253E520F273B2A4052263A4B2E415035
46532838451B2836243042323F4F222F3D0E1F28203239172A311B2D38314152
1022394D627E395070364F7147638216334E14334A1B384D29455D244058203C
54274159132E43193449162F432E475B2E4859162E401E36481830421C344822
3A4E1B3248384D62000F214458693145560B1F312A4052152A3F2941551F374B
243C50243A4C253B4D142A3C142A3C1D33451C324431495D294459294459223A
50364E621A2F442B4153233749475B6D071B2D4256682A40522B4153172F413A
5266172F43142D410F151C51575E1E262D1B222B262F3818222C1A26301B2C35
273944384C572E424D0B212C07202A0F28320C273118313B0D212C21323F192C
391C2F3E182A3B2234453246573E5263071B2C3B52621A3141162F3F1A32441F
384C253D5330485E1E364A162E401C3647304A5B112B3C2F48581B33452B4454
21394B2840523F586C132C402C445A1C344A273F573850660720303953611B34
441832421E3849142E3F1D364A1D384C153044142D4121394B18304229405017
2B3C122637162A3B14273C1C2F44253B4D1D3444182D3C1E2F3C2532423C4658
131F374B5A744258744A658027445F102E471C364E1C344A2B465A243F531631
46122A40354D631D354B172F4320384A294252243B4B233A4A162D3D273F511A
324619304642576C031427465869182C3E293C51273C511A31472B4258223A4E
263B502236482E42541E34461E34461931451B33493A5268122B3F2C45591932
462C4456192F41324959233A4A4A61710317294D61732B40552E4358263B5028
3F5521384E1D344A10161D4349501D252C1820273039420E1921202D352F3F46
2A3B4451646C1B30380E252D0D2630152E3816313B1D36400E21291B2B371122
2F2737471D2F402435482D4153384C5E081F2F3C5363213A4A1A33431B344823
3C50314B633A52681D3549152B3D1F38481A3343193242263F4F1C35451E3747
364F5F2A4254243E4F233C502941571A3248223A52475F750014263F58681E36
481F394A233D4E253F50213A4E1C374B1833471D384C152F401D3748172F4127
3F51142B3B182E401C3448152C42162F43132D3E152C3C1A2A3A2D3748535A6D
070F2656667D39516927455E1837500E2D44162E461E354B253E522B47582D45
5B1A3248243B51162D431B3046172D3F253C4C283F4E2037462037462840522A
42541A31473D52670314274254652A3D522A3F54374E64152C422E455B1A3246
21364B283C4E314556233A4A20354A162F432C445C2D485D152E42163041233B
4D1C3446223949283F4F1C33434F6676000E203C50621B3045283D522D425831
465C253B541F354E111C244F5A621B262E25303824303A232F3924333C36454E
2A3A462A3A4600111C132732182B380319252D434F1E323D071A221628330617
242434441123342435483044563C5062051C2C374E5E284151203A4A233C502A
435738526A31495F172F43263E50253D4F223A4C152E3E2C45551F38482E4757
294153294153173142233D4E1C3549183145223A50395266041C2E384F5F263C
4E2F4759233B4D29435430495D1A3347294256233C501E36480C2436162E4024
3C4E233A4A182F3F142A3C1E36481E38480E2836102834243542343F4D475162
0914284F60752C445C27465D25455C102F46142C442D445A2A43572B45562F47
5D1B334920385021394F273E54162E421A3244253E4E203A48203A48263E502D
45571A31473B506501122541536435485D32475C40576D182F4530475D1A3246
263B50273D4F2E42532A4151263B50152E423D556D223D521732461E394D243E
4F213B4C1F37492A42541E3545536A7A00132541556724384A2F43552C415626
3B501E33491D32480B1B2241515818282F13232A23343D21323B2A3B442E3F48
25354123333F14263121333E1E2F3C263946495A671728350A1C272436411223
3026394807182B2236482E425433495B081F2F334C5C2A4454233D4D2740542C
455939536B213C51152E42385062253D4F2B4355152D3F314A5A1E37473A5363
294153364E602943542D4758243D51253E52364E643C54680A20323C53632036
48263C4E304658223A4C243C50223B4F2740541B3448294153031B2D20384A18
3042273E4E132A3A142B3B1A31411B35431E38442039431A2E39283341485263
071325475A6F2540551D3D541C3E55214158264156223A4E2C4559213B4C1E36
4C11293F1D354D233B53263C551D344A11293B1D3646243D4D183141233B4D1E
36481A31473E5368000F224456673043583D5267364D6322394F2F465C223A4E
33485D2036482A3E4F2F4557284054132C403F59711F3951163146385367213A
4E2741521C34462C4456283F4F4D647404182A485C6E2E425434485A31465B2C
41562A3F552B405603161E30434B0C1F2713262E22343F20323D2D3F4A3F515C
1C2D3A18293611222F31424F2131413A4A5A1726361425320C1E29233540172A
372E41501A2B3E31455730445633495B0F2636395262304A5A233D4D1E394D26
41553B556D253F571A3248354E621932461C36471B35462A44551933442B4556
2E46582941531B3345294153223A4E21394D2940563951650F23353145561C30
422F45571D33451F37492A42561B3347132B3F183044243C4E172F4121394B1E
36481C3343142B3B1A2E3F1D34431B3541243F4927404A182D35293541505B69
0E1C2E485B701A354A1233471E41552A4B5F2C475C223B4F354E62334D5E3048
5E20384E284058284058243C542E465C10293D1832431E3747193242223A4C1D
3547172E4441566B0012244557682D405542576C2D445A243C542A4258223A4E
354A5F1D334532485A2E445621394D152E423C566E213D55132E433550641C37
4B1B34481E3648253D4F293F51475D6F04182944586925394B25394B2E425431
45572F4459273C5104192141565E172C3420343F142833293D482E404B445661
10212E1425322D3E4B2A3A4A1E2E3E5060701D2C3C0B1B2B1C2D3A1629360F22
312638492B3F513B4F612B4153394F61051E2E3B5464354F5F2B45551C374B21
3C503751692A445C162E44385066122B3F1F384C1B34482E48591C36472C4657
324A5C243C4E1B33452C4456284054374F6322394F3C51660112254557681C2D
402D415324384A2F455720354A21394D172F43223A4E263E501E364821394B21
394B182F3F1F36461C31402C4352253F4B233E4828414B20353D2E3C484C5765
111F314A5F7413304513364A2D526824475B18344C273F552F485C2F495A3048
5E233B532B425C29405A1A314B223C54162E441C3549102A3B1E374721394B2B
4357162D4340556A05192B42566733465B3E566A30465F213951263E54162F43
2B405523394B40566829415318304418334839536B27435B18324A2C475C1631
461B364A1C3448324A5C1E34464F657705192A485C6D2B3F51213547263A4C26
3A4C293E5323384D071B264559642C404B152835182B38213441283B48233643
192C3B011423293C4B20324327394A384A5B2131420F2231314451182B381326
351428392E425435485D1B30453046580018283A5363344E5E324C5C203B4F24
3F53324C642A445C1530453F5A6F153045233E521E374B354E62253F502D4758
233D4E1A34452A425620384C2A4256475F73263D5341566B07182B4252632938
4B3445582A3B4E2B3F51263B501C314621394D2B4357294153132B3D253B4D1F
3547193040233A4A263A4B2D425121394529444E314A541D313C2835434B5868
000F224F647921405712374D22465E21435A18334D1B334B38516520384A253D
533048603A536D374F6B203854203B551732471D384C0C26371630411A32462E
465A1B30463F54690A1E3040546536495E3D5569334962223A52263E54112A3E
273C51283E503C52642A42541E364A213C5137516929455D1C3850335065142F
44203B4F20384C3C54682036484F6577011526475B6C324657293D4E293D4F22
36482D4153304456081A2542545F20313E2637441E2F3C2C3F4C1B2E3B182B38
1B2E3D1E33422034450F23342337482E42530F23340B1F30273A49102534192D
3E0C203234475C394E631C31462E465A0921333E57672D47572E4859223D512B
465B344E662D475F213B533B566B1D384D102B402C45592F485C2C4657173142
1D37480D2738344C600D25392941553F576B2B4258556A7F101F32425062303F
5229384B3B4C5F192A3D1D3045192E43182D422A425621394B122A3C23394B25
3B4D1229391B324220324333475820374616303C243C48263946354250485466
122036485F752A4962294C661C415B143751233E592C465E3F576B0C2436172F
453A526A405874344F6A213C5726415C14304819364B0F2A3E061F33132B3F22
3A4E1E33493F54690B1F314155662F44593E566A2F475F284058284056152D43
284054293F512E44562E46582B4359284358334E6828435D1D39513D59711B36
4B152D432C44582D45592F45573E54660013243C506124384920344525394B18
2C3E1C30421D31430E1E2B4959662535420E1E2B2737442536430A1D2C112433
091D2E1A3141263D4D061D2D3A5363051E2E142E3F1831412C4150021726283C
4D0E243624394E3E53691D3248385064051D2F3F596A304A5B354F6026415529
44592A445C344E6619334B2A445C1C344A21394F284155263F53314A5E233C50
2A4357233C50263E54152D433B53692B4359364E664F647A0B1A2D3E4C5E2635
482C3B4E2E3F52293A4D32455A23384D172C411F34491E34461E3446364C5E06
1C2E283F4F172E3E3344572135471D36461C36441F3645283D4C202E40445265
0E1E354F647F405E7B2244611035512F516E2E48663D5670273F53162E401B33
49374F67374F6B385270284260213D5B213F5816324A1732470F283C0F273B30
485C20354A43586D05192B465A6B2E4358455D713048602F49612B455D253D53
253D51324A5E2F4759364E60253D532B465B2A455F324D6717334B2C465E1D35
4B1E364C263E522A425632485A445A6C0011224155660D2132374B5C283C4E22
36482D4355172D3F0E19274E5B6918253323303E3C4C590314211C2C3C102534
182C3D263D4D1C3545132D3D253F4F0F2C3B183445213B4C162D3D0E25351E34
46152A3F2E43592A4157233A50395165041D313E5869284253354F6026415529
445928425A3A536D2A445C2641562C445A172F451F384C233C5020394D223B4F
2F485C243D5120384E1A32483D556B223A52455D75485F75091A2D3A4A5B3443
562D3E512E3F52283C4E2B3E53273A4F1A2F44293E531C324422384A40566812
283A1E3545293D4F293C51112439183042243E4E1D36463145562E3C4F445167
0C1B35465C782441603A5C7A1B3F5D395877324B6B576E88193145122A3C1830
46415A7435506B304C6A274362314E6D26435E28465F0E2A42112C411D364A24
3C5032475C455A6F1226383C5264273C51435B711E364E3E5870243E56264156
20374D2D4559273F51365061263E5429465B27425C35506A2A445C2843582D45
5B162F431F374B28405423394B455B6D000F20495D6E1D31422E425334485A2B
415323394B273D4F17202E444F5D212C3A303D4B3B4B5801121F142434142938
293E4D2B4251142D3D2C4656163040163342183445254152152E3E273E4E263C
4E21394D31485E1C324B21384E3750640720343F596A203C4D3B576827425626
41561E3850354E68253D552A4258253D531831452740541F384C2C4559223B4F
375267213C511B354D344E66213B533C556F2E4761445A730A1B2E3545563A49
5C2B3C4F3142552F43552C3F54293E53283D52273C5122384A2B41532E445616
2C3E203445203446192B42182D431D364A28425320384A2B41532736494F5D74
0A1B36485E7A2441602B4E6F224566345372344D6D3D536F162E421D35471D35
4B47607A37516F314D6C2D496B35547327456225435E28445C173247223B4F22
3A4E1D324746596E071B2D465C6E21364B3A5268324A62304A6229435B254055
263D5330485C233B4D3E58692A42582643581E3953324D67223C542B4359263D
53172F43283D52253B4D2E4456465C6E000F20475B6C13293B273D4F23394B3B
5163152A3F29415508132145505E1924323845532E3E4B091A272134431C2F3E
324756243B4A1831413B5565193343122C3C183445264051162F3F263C4E263E
522F465C2D435C263C55263E54455D73092236415B6C1F3B4C4864752F4A5E2A
455A1B354D314B63284056344C62263F53213A4E2E475B2841552E475B162F43
385368213C5118324A4E6781132C46526D882139554057710C1F343244553243
5624384A3145573046582B405523384D2A3F5424394E2C4254293F511F35471C
3244263A4B162A3C1C2E4520354B243C522B465A1A3445253B4D27354B515F76
0718334A607C3251701E42602A4D6E405F7E3F56762A3F5B1C3146284052223A
503B546E395371365274385778304F702342612E4F691F3D561F39512941571B
33471E31463F5267061A2C3E5466243B51435B712B455D213B533C566E223D52
2F475D354D61243C4E4962762E495E274459193750304C64233E53334C60263E
5220384C2F45572D43552F45573B5163001324354C5C1B31431C32441F35472D
45571F374B273F530E1C283F4F5B2F3F4C31414E1627340F202D142736213443
233847192E3D1E35452940501A3141041D2D1A33431A3343152D3F1E36481B33
473E556B253D552B435B2F475F435B710821353E576B1D394A516D7E344F6333
4E632741593A526A32495F2D45592941551E364A263E5240586C233C50193246
2F4A5F233E5318344C45607A27425D415D7B354F6D3B536F081D32374B5C2F43
55293D4F3145572A4052273C51162E4219314521394D2D4355263C4E30465829
3F51283C4D2337492B4056132A40213C51344F63152F40263E5038495E415168
02132D415773335370224763214361375774253D5B2136511C3146243C4E2139
4F27425C3A5675345072405E812E4E712E506E284865112E491430482A425836
4D6325384D45586D051B2D465C6E283F55364E64213B53324D67253F57375267
2D455B2F485C1F384C4F687C334E632C495E24425B33526930485E2D45592C41
56203648283E50455B6D283C4D435768000D1F42586A192F4131495B1C344836
4F63223A50324A60192B363446514E616E233643071A270F222F011423283B4A
2336452A3F4E2F41521D31422034451327382C4051233A4A183042243C4E152C
42496076273F57263E56334B633850660820363952661935464D697A2C475C31
4C61304963374F67354C622F44591B30451830441D3549395165243D5120394D
2E495E26405828435D314C6734506E3955733551703E597401192D3E5263374B
5D344A5C2F45572B4153263E521C3448172F43142C402C4254394F61384E602A
4052304455293D4F293E541D344A2742562E4C5D1C3948233C4C334457425368
12233D4F66804F708A2D526C2548622C4A65203854273D562036481F3749223A
50203B553C58772D4B6E3B5B7F3252752F50711B3B581B3954153149253D5549
5E741F32474A5D720C22343B536531485E3A556A1F3852304B65324C64243F54
284056253E521C35494D667A314C612C495E2E4C65304F66324A602C44581B31
431A30421E34463D5365283C4D4A5E6F00102243596B1C3446263E503F586C35
4E62263E54294157061C27394F5A374D581E343F0B212D1124311E313E2B3E4B
1C2F3E3548571E2E3E12223215253619293A1F2F402537481D3547223C4D1B33
4940586E2A425A273E582F475F3F576D052035324D61173344476374223D522A
455A314A642840583D5267354B5D172D3F21374920384A1F37491B3448193246
2C475C2E486035506A24415C3A56743B5776284466425C7A051D313C5363394F
61344A5C283E50324A5C263E52284054223A4E142C402A4052485E702C405227
3B4D364A5B25394B1F344930485E2846591C3A4B2A47561C36462135464D6173
02172D455F7744637C20445C1A3E561F3F56263E562A3F5522384A1E3648233B
531C37523B5678345275345478284A6E204063294867183651213D552941592D
42582B3E533B4E63011729475F713C5369344F64314A6426415B27435B173247
273F551F384C1C35494861752A455A264358314F6823425938516533495B182C
3E2236482135462337481C3041425667001628415769172F432E465A3A526836
4E6418324A1A344C0A202B405661324853192F3A041A26283B481C2F3C203340
2A3A4A4757671424341E2E3E182638253345142234314354344B5B2640513048
5E304860253A55233952172E443F576B031C30304A5B1B3448496276223A502C
445A364E6620384E364E621E3348243A4C253B4D293F51223A4C0E263A223B4F
1E394E3A566E314C67203D584C68862D4968334F6E3E597411293D3B5163344A
5C2A40521A3246364E621F374B294155233B4F2B4357263E523F5567243A4C27
3D4F2F4354293F5124394E2E465A223E4F1431402D4757203949293D4E506476
001429455D731F3E5526465D092B421D3C531B3349273F531A30421C34461E36
4C162F4935516F435F813553761E3F60294869254360203D5817324C243C542A
4157293E543A4D62071C3141596D4A63773D556B18324A2F4B6318324A193449
253E521B34481C3549445D71243F54223F543251681C394E354D611F3547273B
4D293D4F2A3E4F263A4B1024354C60710B1F31374D5F31465B364E622C445A1E
364C19334B18324A10202C4B5B672E404B0B1D280F202D253845192C391C2F3C
2B3E4B1D303D1629361124312535450E1E2E2A3A4A112433334A590720303249
5F152B44283B561C30491E34463D5464071E2E374D5F1B32483F556E22385132
495F30485C213B4C31495F263E541D35491D33452C42542A4151192F412B4357
2840562E4A6235506B24415C46617C36516C3A5570364F69071C3246596E293E
53293E53152C42364D6331495F294157263E542C45591C3549324A5C18304227
40502B4252223949172D3F2C4254253C4C334A5A2E425325394B1E2F4248596C
000F24495E731E364C203B500F2C41223F54102B401D364A1C34462941532740
5417324729435B3C57712D4A6527445F28456035526D26415B1B344E17304A49
6179182E473D546A051D312F485C516A7E3B54682A42582742571C344A1C3549
2E475B1932461B34483E576B233C502F4A5E243F5428415530485A2B43551C32
442137492F4354293D4E1C2E3F4C60710C2032455B6D1B30453B53671F374D1B
33491731491C364E07152153616D13232F0D1D29091A27091A27273A47253845
293C491124311B2E3B0316232030401E2E3E223242182B3A304854193341263B
512D415A2235501C3147182C3E3F5463071C2B32485A1E324B4356712C3F5A2F
455E2C4456264050334E63254055263E541B33451F3345243849253B4D1C3448
1B3349233F573C57721A37523F5A7537526D2C455F324A62071C32485B70273C
5224394F1C33493A51672840561B334921394F263E54233C50294256162E401A
33431A33431B3444293D4E1E324326384927394A3344572C3D501B2C3F516577
0C1F3443586D2941551730440B2339203B50122F4425405520394D1B33452039
4D1A33471E394E284358233F5739556D3D5872334E682F48620E2741152E482A
435D2038503A52680B2339445D714C65793851652841552A4357243D51263F53
1E374B1F384C1932463D566A2B44582E475B30495D1F384C354D5F294153273D
4F1D33451F3344233748283A4B4355660E223455697B31465B385064263D532D
455B233D5529435B0B19254B59650616220A1A261E303B081A253D505D304350
1E313E1225321B2E3D1326351424343F4F5F1727372E41502C4450243E4C253A
50273B5424375211263C1C30423C51600017263C526432465F3E536F2E435F36
4E66304A5B253F502A455A284358243C521F37491F3345263A4B2C42541E364A
1D354B38546C3B567115324D57728D3F5A75253E58455D75081D334C5F742439
4E20354A2B425840576D233B51162E442941572A42582F485C223B4F172F4118
3042152E3E2740501D3143182C3E2135472B3F51384C5E2F435513263B475A6F
03162B44596E2E455B2C445A1E364C2B465B2340552D485D2C4559132C401830
461E364C213B5326405828435D415C7638536D28435D1D385217324C0721391D
374F213B53385066071F354C64783F576B243C50263F531D364A223B4F233C50
1E364C2840562A42583C546A2F4A5F314C61314C61223B4F2E4658294153273D
4F1F35471D3142293D4E2D3F504A5C6D0011235C7082455A6F21394D1B324839
51672742572A455A1927333F4D590D1D290A1A2617293412242F1C2F3C192C39
1E313E1629362F42511124331F2F3F2333430818281F3241273F4B37515F253A
503C50692235502E425B20344640576601182740586A3D526D3A506C2C425E31
48622B4458233F5019364B294459152D431D3547273B4D2337481A30421D3549
243C522A465E27425D213E59526D882B466129425C324A62081D32495C712136
4B1E3348354C623F566C223A5021394F2C445A2C445A385165263F5320384C26
3E50142C3E30485A1A30423044561D3143304456273B4D283C4E1C2F44485D72
000C2150687C182F4531495F1F3A4F2843582D4A5F3350652D485D193147172F
45243E562741592A455F37526C3B567048637D2C47612A455F243F5916304813
2D452D475F324A600F273B4F677B3C54681B3347364E621E374B233C50294256
273F5528405641596F3550652A445C314C61243E562843581F384C2840521A30
421D3345243849283C4D192B3C4A5C6D000F21596D7F4D62771C34481E354B38
5066223D523752671927333A485414222E12222E00121D1D2F3A001320132633
1D303D1C2F3C2D404F1225342C3F4E091C2B0D1D2D1B2E3D2339452F4655283D
5342566F2A3D583D516A192F413C5363081F2F354D5F3A4F6A3B506F2B405F1F
37531934492745581F3C512A455A1D354B1B33452F43552034451B3143172F43
172F452A465E28435E25425D5E7B96415C77304963465E76071C314357692137
491E3446354D61344C60233B512D455B21394F263E543951672E475B2A425635
4D610C2438243C502B4055374C61253A4F31465B22374C23384D21364C4E6379
0012285D748A1D334C2F475F2A445C253F5727435B324E66243E561D374F152F
472A435D28415B243F5A405B7635526D36536E26435E17324C304B65152F4728
425A3E596E4D657B122A3E495F7130455A193145334B5F233B4F1A32482D455B
253D55223A52435D75334D65233C5624405817324C29435B263F532942562139
4B1C32442D415325394B192B3C4254650317294D617344596E253D51283F552B
4359183348425D721C2A363A485416243014222E10202C233540172A371E313E
1B2E3B1E313E1A2D3C1629382D404F0F22311E2E3E2C3F4E293F4B1B32412A3F
552E425B2D405B30445D182E40384F5F092232344D613E54703B5371283F5F25
3F5D1D39512B485D2440581D384D2B4359172F412F4557223949354B5D1B3347
2C445A233E58405B7626435E34516C425F7A28435D374F67091F31405465293F
5123394B334B5F2C4458263E5430485E223A502840563951672D455B29415539
51650E263A1F374B3C516623384D30455A2C41562B405522374C1D32484A6177
071E34556D833850682C445C39536B28425A223E56334F672A445C1C354F0E27
412A4560304B662C476244617C3A577236536E27445F2A455F1F3A542A445C16
30483752673B54681C34485066782B40552B405530485C2E465A21384E395167
223A52213B533D56703D567029445E223D57213C5629445E2742571E374B2E46
5A1830422E4456263A4C344657435566001325495D6F3A4F64233B4F243B5128
40561D384D344F641D29333F4B5513222B1C2B341C2C381D2F3A1C2F3C142734
2336431A2D3A2336450A1D2C263849081A2B1A2C3D2A3D4C2F4551273E4D2E43
5931455E2336513B4F68253B4D3D5464082032375064465C783D5474263F6138
547229485F26455A1C3850122D42263E54162E402B4153243B4B314759233B4F
1E364C223D5736516C14304E35526D5A779229445E4A647C0820323D5464344B
5B2A4052324A5E2B43572B4359263E542941572B43593C546A223A5020384E2F
475D162E42223A4E3D5569172F432A425621394D22394F1A3147233A504A6177
0D233C4860783A526A223C542A435D1C354F29445E3A556F39546E203B561530
4B284260344E6C35516F3C587635516F27445F33506B27425C25405A29435B27
41592E495E445D7114293E4B5F71263B50283D522C41561E364A263D532F475D
2C445C223B553D5571405B762E4964334E692845602A45601D374F152E42263E
521830442B415323394B314557475B6D0014264D617331465B284054253C522F
475D2D485D25405505111B3F4B550B1A233C4B5412222E283A451223301C2F3C
223542203340273A491B2E3D1123341D2F40132536354A59253A49283F4E4358
6E283C552F425D3B4F68394F612C45550A22342E465C3D55714059792942643B
577525445D224357233F57213D55263E54263F5332485A2B4252172F412B4458
253F572A455F2D4A65233F5D415E795C7994233E59344E66051D2F395060384F
5F2942522F475B2C44582C445A183046233B51273F553E566C1B33491C344A24
3C521830441D3549233B4F1A3246273F53334B5F253C521C33492D445A3A5167
021A32475F7738526A3B556D2D46601A334D344F69324D673F5A752B46612C46
642842602642602E4A6824405E24405E25425D3C5974243F5919344E1D374F23
3E53233E53496276102638495D6F30455A273C51364B6012273C354C62273F55
39506A1A334D3F5A7538536E27425D425D78223E5C24415C233D55264156213A
4E28405432475C283E501B2F41506476081C2E4155671C314631495D2C435928
40562B465B213C51030F193E4A5422313A2E3D4602121E21333E1829360E212E
1F323F1629360A1F2E2B404F192D3E293D4E0F2132283D4C2B404F374E5D485D
7324385126395421354E2D43553851610C2436374F653B536F3049691E375935
516F25445D0C2D4128445C2C48602F475D152E4233495B263C4E263E52152E42
2C465E213C56213E5925415F334F6D3D5A75243F5A344E66051D2F4057672E47
57314A5A2A42563A53672B43591C344A1833482843582E465C243C522F475D19
31471F374B263E521E364A2D45591E364A364E621D344A283F55354D63425A70
031B334B637B37516928425A243D571F38522E47612B445E2A45603E5876324C
6A1D37552B476528446216325026426023405B36536E213C5619344E152F4711
2C41223A504A6276051B2D53677921364B34495E273C5131465B273E542D455B
364D6728415B304B66344F6A213C573A5570213D5B0F2C472A445C274257354D
6319314531465B2B4055263A4C4155670B1F3150647612273C2B43572B435729
42562F4A5F344F64030F19404C56222E382B3A430A1A2629394520313E0C1F2C
102330162936152A390C21302C40511E3243081A2B1B2F4039505F263D4C3A4F
65283C5531445F32465F22384A354C5C0E2638324B5F3C526E354C6C27406239
55732241580F2E4329485F26425A274257243D5132485A1A3042243C501C344A
223C542E49632C48662B476539557339557326415C415B730D2539415868263F
4F374F61263F53354E62273F551D354B233E53344F6430485E172F452E465C15
2D43243C5020384C243C502A4256172F432B43571C3349283F55374F6540586E
021A324C647C334D65253F57203953233C562A435D223B55263E5A37516F324C
6A253F5D2D4967203C5A0B2745203D58213E59325069233E58243E561B364B17
2F451F384C49617503192B40546622374C2A3F54293E533951652C43592E465C
3E566E1A334D3C5470334E6926415C37526D2D4A650B26412A465E2A455A263E
5429415730485C152A3F2B3F5145596B000F214155671D324730485C2F475B29
42562843583651660D1820414E56121E281E2D36192A333A4B542B3D4800111E
1B2E3B0F2433243849091D2E2B3F50223647273B4D1F3344243B4A273E4D3E53
692D415A283B562F435C293F51364D5D0A23332E475B3F5571374F6D2E45653A
54721F3B531534493A597028445C375267263F532D435533495B20384C183046
324C643C577124405E213F5C3A5674405C7A1F3A55375169041C30435A6A2F47
594D65772740542740541E394E1F3A4F153045233E532540551A354A445D7119
3246233C50273F532A425631465B273C5131465B21394D253D513A5268465E74
041C324B63792F475F2D455D223A52273F572D455D2E455F18304C314965314C
6727425D2B4661223D58122D4825405B25405B334E6829425C2D475F21394F1C
33491A3246445C7012283A3B516323384D2B40552A42562F475B294056243C52
324A621C364E37506A4059731F3A54415C76243F59122D473D59712B475F334E
632941572A42562C4458273C5142576C0216283F536521364B20384C2941552D
465A274257304B6008131B505B63202C3624333C1F2E3734454E32444F0D212C
2134432A3F4E213546061A2B293D4E2A3E4F182C3E273B4C263D4C3B52613C51
6730445D2E415C2F435C405668324959071E2E2F4759445974354A692E436238
506C1F3A4F1F3D5028475E3D5971203A52233C502A3F5422384A2B4357071F35
28425A325069264260294764334F6D4B6785223D58435C760D25393E5466273F
51496173324B5F2D465A213C51132E431F3A4F274257284358142F433A536717
30441D364A334B5F23384D273C51283D522D425721394D1E364A334B6140586E
0B23394B63792C445C3B536B273F57253B542B415A40566F1C334D2F47632944
5F1E395427425D334E69223D58233E59243F59314A642B455D31496121384E21
384E193145455A6F0D233533495B192E4330485C284054243C502E465C2D455B
223A522038503F59712E4860324B6538546C1B36501E3A522E4A6237536B243E
56223D52243B51253D512C4156364B600013253D51631A2F440921351A324623
3C50223D521D384D00050D46515914212915252C0F1E2721323B21333E071B26
1E31402A3F4E182C3D12263724384A2F43551226382B3F503249583E58663E53
692E425B2D405B243851394D5F334A5909202F354D5F4055702B415D2E44603B
526C263F5325405419354D3551691C364E213A4E253A4F162C3E1F374B172F45
29435B26445D29456338567334526F5D7997243F5A40597311283E3E53682A42
5639516530485E2A42582742571A354A0E293E2E495E3D586C1A354930495D24
3E4F1731422840522B4153273B4D273D4F2D43552D45572C44563C5569435C70
0E273B4E677B2F465C42596F2B4258293E54283D53394F682D455D324B652740
5A213A5429425C3B546E263F591E3751233C562A435D2F475F2D435C1F364C27
3C521F3449475C71172C413C5468294155334B5F172F431C35491D364A243D51
263E54273F553C546A264156344E663853681E385026425A1D39512F4B63203A
52203B5020374D1930461E334841566B00112345596B263B501C344829415520
394D274257223D520A151D4A555D0E1B2313232A15242D2D3E4722343F122631
293C4B1C3140172B3C192D3E1B2F41273B4D1D31432C43532D4453395361475C
7224385121344F2D42582A3E503A4F5E0F26353D5365384C652338543348643C
546C2B4556244051244058254159354F671932461C3448314759142C40223A50
36506823415A223E5C32506D34526F597794233E59354E6809203640556A3A52
6638506431495F2941572843582B465B102B402A455A324D610D283C1A344519
33441E38483D5666293F51263A4C263C4E273D4F2137491F374931495D40596D
082135516A7E344B613F566C30455B364B612F445A2E455B2D455D2F49612E47
61324B6527405A2B445E1C354F243D5728415B273E58364C652E445D253A5027
3C52203348485B700B2337374F63364E622C445810293D314A5E253E52314A5E
344C622C445A2E465C2C445A2843583C576C27425727425726425A26445D2F4B
631B354D1B33492A4157172C4144596E0012243D51631D324723384D2A425613
2C401A32481B364B09141C4C575F16232B1929300F1E272637401D2F3A2C404B
2D404F2A3F4E192D3E091D2E1D3143172B3D071B2D273E4E2F46553B55633B50
66253952293C574C61772B3F513B505F1126353F556731455E253853394C6734
4A632B43552741522B475F26425A2B455D1C35491A3246273F51253D51142C42
203A5223415A2743612F4D6A3A58753F5D7A29445F47607A0F273D3951652E45
5B31485E3B53693D556B233E53274257102B402641562D485C1B364A2741520A
24341C3646324B5B2C43532F4354364A5B3047571A3042172F412D45574A6274
041C30536B7F3951653C54682E4359374C62394B62364B61273E542B43592E48
6039536B2640582741591B344E263F592F475F2038503B516A374D6633485E29
3B521F3045485B70132B3F415A6E324B5F2942561C3549294256274054233C50
30495D294256324B5F1F384C3851652E475B2F485C243F542D496127455E2440
581E3850193147233A50293E53374C610B1F3145596B293E53283D522B43571F
384C1B3448263F53141E254E585F1621291E2B3311222B2F414C1E313E394C59
273C4B1A2F3E1D31421A2E3F1C30421D3143182C3E253B4D1F38483A53632D42
57394D66293D56394E641D3143455A690A1E2F3F556730455B283C55394D6628
3F55263E502A4455365368132F472C475C2B44581B33471E3648263E5221394F
1E38502E4C652E4B6635536E5876913B58732B46613D576F0F263C354D61243C
50283F5531485E3A52681B33492D485D102B402E495D2E495D1C36472E48590A
2434334B5D31495B273D4F2A3E502F43553044561A2E401D31432D43554A6072
081D32546C803D546A3B5268253A55263B563146613D546E2F475D2641561F3A
4F2D485D29435B39536B223C541731492C445C152D433C526B3E556B41566C2A
3F552033484D62770D263A3F5A6E152E422641552E475B162F43314A5E1B3448
173044334C602A4357223B4F3952662D465A1D364A2944593B576F0D29412E4B
602A455A183046253D51263B504C6176001426485E7041566B2E465A273F532C
4458233C50344D611A1F22474D5219232A18252D0B1B273144511C3140243B4A
2239482138471C31401E33422B3F501C30411D3345253B4D18304440586C2941
552E455B263B512B4055273D4F415868091F3142586A374C612A415731485E28
405620394D2A45593B566A1F384C2C4458273C512C4156172C412B42582C445A
2A455A25445B315067304F685A78912E4C65344F693B566B0E263A4157691D32
4731485E31485E233B53273F55233B51132C40253F501B3546132B3D31495B12
2A3C34495E33485D2A3F5423384D273A4F2F43551C2D401A2C3D394B5C495A6D
06192E566B813A50693A506C1D36561B36582842662743621C3B522C4A5D1634
47284659264156233E532B4359172F452B42582C4458273F553F576D41596F20
384E273F553E576B0924383B596A1D394A3B596A1732461A35491B364A274256
2843572A4559364F63284155334B612941571F374D2B43593752661B364A2843
57233C502841551931432C4254506678000F214A607223394B172F411E364811
2B3C213B4C142E3F15191A43484B1D282C16232B0F202D2035441930402D4656
29404F152C3B192E3D1D32412C40511C3041263C4E1E3446172E443D546A2840
543D55691E3348354A5F213749364C5E071D2F415769253D51395165314A5E27
40541C374C2A455A2E475B1B35461C31461D324730435824394E33485E152D43
2C475C1A394E34536A2D4D6457768D2A4960233D553B53690D25373E55652C41
562E43583F556E344A632941571C3549122B3F223C4D223B4B1B34443A506211
263B30455B2F445A1A2F4524394F2B405525394B1C2D402737483444554F6172
11223751637A364B66314967122D4F1B385D3352792543661938512040531533
462341542944581E394D334C6010293D2F475B2840542E475B243D513E566C1E
394E26415636516509273A3E5C6D2F4D5E264455213F521836491A35491E394D
2843572A4559263F53364F63324A60263E541C344A2A43572B44581D37481E38
491D37482A4254223A4C3147593D5365041A2C455B6D1E36481830422A425426
4051243E4F152F4013181942494C1C262D18242E0D1E2B182D3C182F3F3C5565
1B32410F26351F3443293E4D1C304115293A2A4052253B4D2A4157384F652D45
59334B5F273C513E53682D4355304658041A2C3B51631B3347364E622C45591F
384C1D384D1F3A4F1A3347253E522D42572C4156283B50172C4130455B1E364C
2A455A26455A27465D33536A5B7A9116354C2741593C546A071F313950603247
5C192E433A5069344A632840561B34481B34482943540F28382D46562E445626
3B50253A50283C5520374D243B512B40551B2F412034463143541E3041455768
06192E596E84273F5728435E1D3A591E3C5F4F6F932F507116354C1D3B4E1E39
4D19344830495D1A33473E566A0A2236223A4E1A32461C33491830462C445A31
495F1A354A3A55690823373B57683551621C38492F4A5E1F3A4E1C374B213C50
253E52253E521A3347324B5F2C445A1F374D1F364C233B4F1E374B2741522A42
54294153273D4F1C32442F455742586A000D1F394F6120364810283A152D3F14
2C3E142E3F1B35461A1F204C5356151F261928310718251E3342193040425B6B
162D3C081F2E192E3D1B303F2438491C30412F45571C3244182F45364D633E56
6A2E465A1F34492B4055253B4D3F55670D23353E54662840542E465A2F485C22
3B4F2641561B364B213A4E223B4F293E532A3F54283B501A2F44283D531F374D
243F542F4E63203F5634546B56758C0B2A412E4860435B71031B2D415868394E
63183044394F683349622E465C274054284155294354152E3E213A4A2C415622
374C2E425B243A53283F55172F45273F53182E4024384A334758132738445869
001426486074324A622A45603855742C4D6E3151744062801130472D4B5E1B36
4A233E52243D51253E52364E62122A3E2B435720384C1C3349283F552B435943
5B7111293F445F73082337375364264253264253304B5F213C50203B4F274256
2D465A2740542841552B445830485E233B512A415720384C253E52233D4E233B
4D263E50263C4E203648273D4F42586A001224415769263C4E243A4C273F5121
394B1A34451A34452129294D5659131F2515242D0F202D253A491F3646344D5D
0F2636081F2F1E3342091E2D324657182C3D2D4355172D3F152C423B52682C44
582E465A283D523F54691A3042374D5F102638384E602B43572C44582F485C28
4155213C511B364B1730441831452D425723384D1F3247192E431C314721394F
203B5026455A27465D31516845647B133249243E56465E74001325465D6D374F
632840543F556E344C642D455B223B4F2841552D4758253F4F1E38481F374B19
3145364A632D435C2C4359162E443850641E3648192F41243B4B112838415868
0014264B64782E486038566F43617E1739571C3D5E2E506E15344B2E495E1E39
4E1F3A4F2C445A1B33492940561E354B243B511A31471F364C1D344A273E543C
546A0F273D445D7110293D3D5768213B4C344E5F2D465A1C3549294256213A4E
30485C233B4F2E465A2C445831485E283F5521384E1D3549162E421A32442E46
58233B4D192F41172D3F1C30424F6375001426495D6F1C324422384A243C4E1D
3547243C4E20384A242C2C454E511A262C0F1E271C2F3C223948273E4E1E3747
092030162D3D1A2F3E152A39293D4E1A2E3F1D334521374912293F3F566C2F47
5B2840542C415632475C1A3042405668091F312F45571C344831495D2C45592A
4357122D421F3A4F253E521C35492C44581A2F442B3E5331465B1E354B10283E
1E394E2D4A5F23425938586F3C5B7216324A2640583E566C001325445A6C2F47
5B2A4157374F67324A62273F551932462942562E4859233D4D253F4F1A324625
3D51384C652C425B2F465C1B334940586C1E36481A30422239492037473A5161
0D2335496173445F7427435B1836512343601A3C5A234360203B55243F541B36
4B213C512E465C172F451C3349253C522940562D445A29405621384E1D344A40
576D1C344A465F7310293D415B6C294354344E5F2F485C162F43314A5E1A3347
243C50162E421D354930485C2E455B2A4157142B41223A4E253D511D35472D45
571A3244283E503147592135473E5264000F214B5F711A30422036481F35471A
3244284052263E50232D2D3C484A1B292F0E1F282033401D34432A4151152D3F
182F3F182F3F071C2B1F3443293D4E263A4B182E40243A4C1D344A32495F1D35
49162E4230455A2C4156253B4D374D5F0A2032374D5F19314531495D314A5E2B
44581A354A294459213A4E2740543D5569243C502C415723384E20374D1B3349
27415935516916354C3F5E7537526C15304A2B445E395169061E32435B6D3951
65263D532C445C354D652B465B223D512C475B1D394A223C4C1A344429415526
3E523D536C2238512940561B32483C51661D33452C4052293D4E35495A425969
0C2333587082354E62203B500C2B42203F5830516B203E592C47613048601C34
4C3E566E21394F3D556B243B512B425830475D3950662A415722394F132A402E
455B1B32483951650C243840586A2D4557354D5F3951651A32462D4559243C50
253D511E364A1A324630485C344B612C43591E354B2F475B273F53273F513B51
63253B4D3145572A3E50223648435769061A2C566A7C314557394F613D53653B
51632F475920384A232D2D3B474918262C14252E192C391D32412A4052183042
1C33430C2333172C3B1D324133475811253620364831465B193046364D632038
4C30485C2E435832475C2D435542586A081E303E54661A324620384C314A5E22
3B4F264156284358233C501E374B2941551D354931465C1A2F451F364C1A3248
36506829455D18374E38576E29445E203B552039533E566E031B2F3E5668465D
73223A50243C54344C642D475F2B465B2742561C38491731422640511E364A2B
4357344A63253B5432495F2B405644596E293C51364A5C182C3D2E405145596A
0B1F304C6373223A4E2D465A29455D1F3E551A395228465F425B75334B63445C
7439516939516951697F4F667C2B42582E455B2A415730475D1D344A2C435924
3B51334A60465E720C24383D55672B43553C546640586C1E364A1D354930485C
2C44582D455920384C223A4E334A6021384E273E542B4258243C501E36482A40
522036483246581B2F411E3244425668001224526678384C5E2B41531B31431E
344618304221394B1C282A4854581222280A1D251D303D2035443B5163192F41
2D4152203445273A491326353044551C30411D33452E465A263D534960762941
55193145253A4F354A5F1026384A60720A2032344A5C31495D273F53223B4F1D
364A2C475C2C475C243F53253E522D45591931452F445A22374D283F55193147
29435B2A465E14334A3F5E75243F59223D572C455F354D65061E323C54663E56
6C3F576D1A324A4A647C1E3850233E532C475B122E3F254152294556132C4032
4B5F394F682F455E2A3F5532455A384B6024354A3445581C2D4039495A405263
0618295064752F4459364E623048602741591F3A54203B55455E784B627C5269
833F576F2B435B4058705E768E284058354D651A324A2940562D445A19304643
5A703D546A3C54680D25393D5567374F61253D4F3850641830442B4357284054
2D455920384C2C4458253D512940561A31472C4359344B612B43571E364A2E46
5A19314530455A1F34492E415642556A000E23415469162B401A2F441B304519
3145142C401E364A142022414D5116262C0C1F27182B38162A3B354B5D172D3F
2337482135462E41501E31402F43541D3345192E431D354921384E4A61773149
5D132B3F394E6330455A1E34464A6072061C2E354B5D3C5468273F5327405421
3A4E203B50274257284357203B4F2942561E364A2B4056283D532C4359263E54
27415939556D1D3C532F4E651A354F2C455F233A54445C740C2438354D5F3C54
6A3850661E375138516B132D452540552C475C203B4F2945562844552740542A
42583B516A2F455E2F4158384B6034455A27384D2C3B4E2534473141523C4C5D
081A2B495D6F32455A364B61213750243C5429425C203953273E58647B953047
6139506A1C344C284058576F87455D753A526A18304822394F253C521D344A46
5D7340576D374F630A22364961732D45572A4254324A5E1B3347344C6031495D
2B43571F374B3C54682B43572940561E354B253C522A41572B435721394D2B43
57223A4E2C4156293E5330435846596E0114293C516614293E11263B1B334720
384C1B33471E364A14212339484B182A310F232E203544203747455B6D2B4153
1D31421A2E3F2436471F314225394B192F41182D4221394D142B4151687E1F37
4B21394D2B40553B5065192F41455B6D051B2D374D5F445C70253D5128415526
3F531B364B2742572B465B213C512C445A294056263B512A3F55233952203850
1E385039556D32506923415A233E58233C56283F593C546C0A23373D57684B63
79334B6129425C3B546E1B374F28455A314E63213F522C48591B3748223B4F29
41572B435B384E673C4E65304156293A4D30415434455825364928394C435467
0B1C2F4A5E702E41562F445A1F354E263E56354C66405771263C58425874233C
56243D571D36501F3852324B65435C76365068173149273F5528405620384E36
4E643E556B3F576B11293D425A6C2E465830485A294155263E52233B4F3F576B
213A4E183145435C70294256253D53223A50253D53273F552E475B2740542A42
562A425621394D2B43572C415643586D000F2442576C2D42571B33471931451C
34481B3448274054202F3135464915272E0A1E291E33421E35453D536522384A
293D4E1C30412032432B3D4E293D4F1B314322374C374F63193046435A702A42
561A32462F445934495E22384A384E60061C2E354B5D3D556920384C213A4E24
3D51233E532944592641561E394E273F55253D53192E442B40562238511D354D
1E38503E5A72314F6837556E1E37512A435D2D445E324A62031C303F596A4E66
7C2D485D2D46603C556F19354D274459203D522E4C5F2541523753642F475D27
3F552E455F2B415A41566C273A4F293D4F2E4254415265273B4D2A3B4E465A6C
0216284D6075263B51243B51273D56223A52243B5549607A2C425E1129452D46
60233C56223B552C455F1C354F1E3953516B83243E56233E53223A50243C522E
465C3A5167374F630E263A465E702F475930485A243C50273F531B3347375064
1A3347152E423C5569213A4E1D354B21394F2C445A284056294256243D51253D
51243C50142C40233B4F263B5040556A0014293F576B253D511931451A32462E
475B314A5E3B546822313333444714262D081C271A2F3E1A31412E44561C3244
283C4E2135472436473446572D41531C324421364B344C60263D533B52683850
64223A4E2C41563B50652A4052374D5F061C2E33495B2F475B20384C1831451F
384C2B465B25405526435825405528405621394F192E443B50663D536C364E66
334D6539556D3E5C7524425B2B445E27405A2F46603D536C122B3F445E6F4964
793B566B37506A3C577117334B3754692E4B60213F522C4A5B2745561934492B
465B273E58374F67374F632B41532E4456263C4E34485A314759283B50384D62
00152A50687C31485E2B435B2B425C233C56172F4B314965243C581B334F2C44
60344F6A243F5A2E496427425C102E47405C7426425A2541591A344C1A324826
3E54425A70425B6F021A2E5B7385213B4C2A4455253E521932462D465A263F53
1A33471B364A2E495D1C374B1833481D384D2C475C243F542641552540542B44
58213A4E183145243D512F475B4D6579001024455D712E465A2C4559233C5033
4C602942562843571D2C2E37484B1D2F361327321D32411D3444283E502A4052
1C304222364821334427394A24384A1A304220354A2A4256283F5531485E425A
6E1D35492D425731465B2D4355374D5F071D2F384E602A42562840541A334723
3C50294459243F542542572B485D2F475D223A50273C523F546A475D76334B63
38526A435F7738566F213F5827405A3B546E1429444D637C0922363B54683A55
6A2E486026415B39546E1531493350652441562240532B495A2846572A455A24
3F542F4660263E562B4458243C4E223A4C253D4F1F3749334B5D193145344C60
061E324B63793A526A314B63233C562E496328435E25405B37526D2A425E2843
5E304B663C577225425D29476027455E2342592D4C633B576F27435B142F4415
2D43354D63364F630A2236526A7C1630412842532B4458142D412740542E475B
193448223D51274256213C501C374C203B502843582540552742562C475B334C
60223B4F213A4E284155324A5E526A7E0011254E667A3A53673A5367233C501B
364A132E420B263A1B2D2E3F50531F3138142833152A39162D3D192F412E4358
1B2F41263A4C2032431E304124384A1A3042253A4F30485C172E4440576D2D45
592E465A172C4133485D172D3F3B5163071D2F4157692D45592B43571F384C2C
45591B364B2D485D18354A2643582B435920384E31465C30455B384E67193149
36506848647C3B59721F3D56334C662E47611B304C4D627D0C243A3F586C405B
702D475F29445E425D771F3B53314E633350652442553654651937482A455A39
5469243B552E465E2942561D37481D3748253F501933442D4758112A3E385367
041F343C596E304C642F4D66223F5A314E69294563223E5C445E7C233D5B2843
5E213C57415E7927445F213F5831506915344B15344B1F3B532C48602B465B26
41563D556B3B5468132C40455F701731422842532B44581E374B132E422E495D
1D384C2540542442552442551C394E2643581B384D2B485D1A384B2745582944
581A354920394D263F53233C50435C70072034455E721F384C1932461B364A14
2F43254054102E4116272A3A4A5015272E0E202B1326331C30411D31423D5163
192D3E2335461B2D3E1E3041293D4F162A3C1C31462C445811283E485F753249
5F28405424394E22374C152B3D3C526403192B455B6D2D4559253D5120394D30
495D0B263B3651661A354A294459294459223A503E556B2F465C3E566E1D374F
37536B58748C304E6736516B2B445E233C563249634C627B172F453A5367415C
71354F67334E683A556F16324A29465B243F532945562A46571B37482D485C41
596F1129411B334B294458213D4E2C46571C36471731422B4556163041354E62
0B263B446078334E683E5C753E5B7634526D1735521F3B5928435E28435E213C
56243F5927425C314F6827455E27455E38576E213D5519354D3550652D485D16
2E442B43593C55690921335771821B3345264051253E52243D511B3448193448
2540542843572A455A2742571B364B2A455A112C41324D6214324529475A2742
561E394D27405430495D223B4F425B6F0013273B556621394B163041213A4E0A
23372C475B1833471C2931424F570817200C1B2413232F1525321A2B38435461
2232421E3140182B3A2A3D4C25394A213546192D3F162B40233A50425A702D45
5B21394F21394D31495D152A3F354A5F082032395163294155273F53263F5326
3F531A354A223D52334E62243F53344F632641553954693954692C48602A465E
37566D55748B345068324E662A445C274159213951637B910D2539445D712C47
5C3C566E2B4660415C7629435B3853681831451C3647263E50263E502D45592B
43592B43591B364B344F641B34482D4557273D4F273E4E2A3E4F172B3C394F61
051D314C647C425D7724415C314D6B3C5876223E5C122D4818344C243F542B46
5B234055112D4528445C203C54324E662C48602A445C0823383E566C334B611E
364A243C50526A7E0F2537415A6A253B4D2D4557233B4F2F485C183046253D53
2C445A284056294159243C522C445A284056182F45253D53304B5F2843572A42
58324A6030475D3F566C2840544D6579001325344D5D172E3E132C3C18304222
3A4E263D53162D432A36404D596315212B13222B15232F14243016263232424E
293A471D2E3B2134431D303F3044550D21322C405220354A1A31472C445C2E46
5C2D455B20384C28405422374C31465B0A22343850621C3448253D51213A4E31
4A5E1E394E2944592D465A142D413954681A35492D485D203D5229455D234259
3F5E753B5A7129455D28445C274257243F54263E544C647A0D2539425B6F2B43
593651662E49633D5872253F57324D622D45592F4759344B5B2B4252223A4E26
3F53233B513D586D2E495E1C35491D35492C4353263948273A49192C3B3D5162
0A1F34546C822F48622D4863233F5D466280304A6828435D1F3A4F1D384C2641
551A354919364B1F3C511A364E28445C1E3850324C641F374D354D6320384C14
2C401F34495066780C22343F5868283E502F47591C34482E475B1D354B233E53
3850681F374F1C344C263E561E354B31485E273E542940562F485C122D413B53
691D354B30465F22394F30455B4A6072000B1D3C53631E3544203746162C3E24
394E273C5221354E1E2C3842505C111F2B14222E14222E1A2A361C2C39283946
273845233441132635273A492A3F4E1C31402B3F50142A3C1C33492D455D1F37
4D21394F2F475B2D4559263B5031465B0B23353C54661A32462C445820384E39
5167203B502E495E3C5569314A5E344D612A4559233E53122F442F4B631E3A52
435E783D58722A445C233D55465E76253D551830465C748A0E263A415A6E2840
562F4A5F324D6738536D213B532B465B2E465A243C4E2D44543D5464324A5E20
394D2E465C2D485D294459253E521F374B3D54642639481F323F182B3A435768
0A20324F677D304963213C5625425D2E4B663D58732F4A64264156243F532843
581F3A4F1F3C511E3B5018344C29455D1B354D2E4860253D532A4258273E5426
3D532A3F5453697B0F27393E58682A42542D4758162F432D485C203B5019364B
365068213B531731492A445C1B3349374F65273F552D455B3E596D2E495D374F
652A42582A4059132A403A4F65445A6C000719344B5B1027362138471C32442F
44592C41572B3F5824323E4757631D2B371B2B371525311F313C20313E21323F
293A4720313E192C3B1F3241273C4B1F3443273B4C061C2E1A31473D556D253D
531E364C233B4F223A4E253A4F3D5267071F313E5668243C50334B5F21394F32
4A601B364B2A455A2C4559223B4F2E475B2D465A2944592B465B2440581C3850
445F792B46602B455D2A445C3F576F233B53223A50556D8310283C415A6E2840
562A455A334E68304B65203A52294459334B5F183042304757182F3F39516526
3F531C344A314C61213C511C344A1D35493D5464283B4A1C2F3C1124333E5362
051B2D4A63773D576F1B36502A48610F2D4638536D2440582742572944581C37
4C1F3A4F19364B254257143048233F57173149243E5631495F263E5429405613
2A401B30454C6476102A3B3953632D47582541521934482B495C274459122F44
24405828445C1F3B532B475F254055314C611530452B465B2C475B223D512B43
5930485E293F5830475D2B405643596B001325445B6B203746233A4A13293B1C
3146273C52394D6623333F4A5C6721313D1D2F3A11222F1D303D1E313E192C39
3346531E313E2235441A2D3C1E3342152A391C3140182F3F223A4E3C546A263D
53253C52162E4229415530455A34495E051D313A52662941552E465A253D532A
42581A354A264156223B4F2B43571B3349183046344E6618324A354F67233D55
4059732E4761253F57253F573951692D455D283F55485F7510283C40596D2840
562A455A304B6527425C203A522A455A334B5F1D354732495921384829415511
2A3E324A60274257213B5311293F1F374B3249592D404F223542172A37415665
03192B516A7E39546929455D2541591A364E2B475F223F542A45592A45591732
471A354A18354A2C495E1C38501E3A521E3850142E46273F55183046374E641A
31471C3146374F610A2435314E5D324E5F213D4E223D512644572C495E17364B
1C3B52203F5624435A26455C2744592643581330452843581F3A4E2B465A132E
431D354B31476020374D384D63465C6E000B1D3E5565213847233A4A2E445639
4E63334A60283E57192B36415560192B361327320B1E2B1C2F3C1F323F1B2E3B
4154611A2D3A1C2F3E1D303F293E4D172C3B142938263D4D253D5141596F1E35
4B1F364C284054445C702E43582D42570A22363850642A4256263F532B43592B
465B243F542C475C324B5F334B5F2A4258152D43264058213B53253F57354F67
39526C364F691E38502A445C435B73273F571E354B556C820E263A3C5569263E
542E495E2B4660223D57223C54294459233B4F21394B415868233A4A2D45592B
4458172F45284358233D5519314730485C2E4253263948182B381E313E4B616D
081F2F536D7E334E6229465B2643583552672A475C2C495E2B465A2B465A2742
571B364B18354A213E5328445C26425A102A4219334B3A5268243C5232495F18
2F452A3F54455D71051F30355261385465213D4E2641551B394C244156214055
29485F15354C25445B24435A21405524435828455A2B485D304B5F304B5F2843
58132E43294159253B542B4056556A7F001123546B7B3B5261263D4D263C4E29
3E53233952142A4320343F465C67172B360E242F0A202C1B313D1C31401A2F3E
3C51601126351A2F3E0F2433445A66152B37192F3B1B32411C34484A61772B42
5819304631465B3F54692137494056680A22363A52662C45592841552D455B2C
475C2A445C3651661A33472C45591F374D2A42582C445C2A425A2E455F334A64
364D67253C561D344E39506A374F671830482E465E526A800E263A395266243C
5235506529445E223D57264058284358294155233B4D354C5C263D4D233B4F25
3E52263E541B364B1D384D223B4F30485A273B4C182B3A091A271B2F3A415763
0920304C6677314C601C374B2543564260732644573351642C475B2742562641
561E394E0F2B4315314928445C28445C233D55243E563149612941592C435923
3A502E43583A4F64051D2F3D5768334D5E203C4D27425619374A18354A29485F
2F4E651A395027465D24435A24405829455D2F4C61335065163447264457203B
50253F5731496129415932495F4C64781026385067771D3444122939172F4125
3D51253B54243A531A303B4056610C222D061C27081E2A1B313D1B303F1C3140
293E4D2035440F2433172C3B3147531B313D142A36172E3D2C41563E556B2B42
5812293F263B5034495E23394B3E5466041C303B5367314A5E2E475B26415627
4257244058365368263E541C3549253D531B33492941592C445C3B526C3F5670
263D57364D67203751233A543E566E2C445C3D556D4E667C0F263C375064243C
523B566B2A455F26415B29435B2742572C4458233B4D4158681C3343273F5321
3A4E183046163146213C51294256223A4C2338471C2F3C122330223641334955
0219284962722E475B1631451634474462751634473351643F5A6E2B465A1934
49264156122E462541592B475F26425A28425A2741592B435B364E662B42582B
4258374C61495E73051B2D3C5466233B4D1E38492C4559254055173149345068
28445C24435A2B475F2440582A465E29455D233E53375469203D52163348233D
551731492C445C2C445C3D546A556D81041A2C415868162D3D2C4353273F5321
384E142A43293F58162D35384F5700131E182E390F2531243A460A1F2E1F3443
273C4B1C31401B303F182D3C344A56152B37192F3B19303F253A4F42596F273F
5321394D293E531C31461F35473D5365041C303D55693A5268273F551630482A
445C1531493451661D354B1730441C344A193147354D65142C444E657F3D546E
1A314B29405A1F36501C334D2E465E1D354D324A624E667C051C323E576B2941
572742572E4963142F4929435B2843582E465A273F513E5565132A3A28405422
3B4F162E44183348142C422942561931432B404F182B382638431C2E39425562
091E2D49627220394D254054133144274558375364395468344F63466176344F
6419344918344C29455D27425C26415B1A334D19324C243C542941591D344A3F
566C273C52485D72061C2E43596B1D32472A425631485E2E465C1F374F274159
2B455D233F5738526A253F5717314929435B1931493954691734491532471E38
50173149283F591C344C4B6278526A7E000E20364D5D1B3242263D4D243C501B
32483248611C314C0F262E374E56071E26182E39172D38263C48112635203544
314655061B2A1E3342293E4D2A3F4E152B37324854162D3C1F34493B52682139
4D243C50293E53283D522A40523046580B2337435B6F253D532840561D374F24
405819354D26425A1732471D364A1E364C1D354B385068284058526983374E68
1C334D2F46602138521C334D2840581F374F324A624B6379031A304760741D35
4B2B465B28435D15304A2741592A455A253D5131495B3B52622A41512F475B27
40541D354B112C41162E442C44581E3446314655192C3921333E1F313C435663
001423455D6F1F384C2B465A1836492A485B3651652B465A1F3A4F2D485D3D58
6D142F441A364E24405825405A26415B1B344E27405A2941592840581D344A39
5066263B51455A6F081B30465A6C2C3F542B4055394E642B4258293F58304860
3C546C2C465E1F3951223C542139512B435B1D354D243E561F3A4F1734491933
4B213B53364D6729415950667F536B7F0012243C5363122939374E5E172F432F
465C162C45162B46091F25344A50091F250F242C172B362437441A2F3E2D4251
2B3F50081C2D192D3E1D324129404F081F2E1D35411027361C3244374C61273C
5131465B243A4C273D4F273D4F2E44560D25393F576B1D354B2B4359233D552D
4961213C562B475F213E53213C511A354A26415636506828425A455C76374E68
203652293F5B18314B28415B2A435D17304A223C5445607500182E4C65791B33
492E495E2D486217324C253F572944591C344830485A253C4C2D4454243C5025
3E522F475D25405511293F2B435723394B3B505F1B2E3B1B2D381E303B394C59
001423435B6D243D512B465B1C394E1D3A4F304B601732472B465B223D522741
59405A72223E56233F573C577129445E1F38522B445E243C54273F57263C5526
3C551D32483F546905182D495A6D38495E2B3E53394E64233A5030465F324A62
3B526C2D445E1D344E29405A233B532F475F233B532C465E254055203D521832
4A28425A374E682941594A60794F677B082032465E70193242253E4E172F431B
32481B314A23385311252A3C52570E242910262C12272F192D381225342B404F
20344515293A1E32431F3344435A6A19303F243B4A30475621374930455A293E
53354A5F253B4D293F51192F413A5062082034374F632941572B465B1F395137
536B203E5734536A2541592643581D384D2843582C465E29435B3D546E3B526C
283E5A2B435F162F492D466027405A16314B1C3850445F7400172D4760742840
562E495E3B56701B3650213B532843581931452C4456243B4B395060263E521C
3549284056233E5310283E2F475B2A40523A4F5E182936182A35233540364956
071B2C435B6D2C445A2843581F3C510D2A3F2E495E1833482540552944591D37
4F253F572F4B6309253D1B3650213C5627405A324B65253D55213951374D661F
354E20354B394E6300122747586B38495E2A3D52374C62233A50364C65344C64
2F4660213A542B425C2B445E1F374F365068263E563B556D1F3C5128455A1D37
4F29435B2D445E253D55445A7350687C0010244D6577112A3A273F51263E521C
3349283E572035500D20233E535512262B20333A1B2E361C303B0E2130334655
263A4B0E2234223648263A4B2F4656061D2D1A3141182F3F243A4C2E43582B41
532C42542E44563D5365142A3C415769031B2F3A52662F475D2A455A1A344C32
4E66203E572C4B6213324928475C254159233F572A455F3F5A7447607A37506A
2B435F3B536F203953243F591B3650223D572B475F3E5B7001192F40596D3149
5F304B6039546E243F5919334B2C475C1D3549243C4E2B42524057672F475B1B
3448243C522C475C142D41344C602F45573146551223301B2D382C3D4A3F525F
071B2C455D6F2B4359314B63213B53122C442F49612B455D1732472944592C46
5E29435B0D294129455D102B45314C6638516B3F58722C445C1A324A43597222
38512E4359394E63000F2444586A2E41562C415634495F2940563A526A344E66
2A435D1F3A542A435D26415B1D374F36526A2640582B475F18354A28455A213D
5529435B2E455F314961485E77556D81000C20425A6C0C25351C3446364E622A
41572E465E152C46091D1E3C50511023261F33381B2E361E303B142532415463
21324505192B1D31432A3E50243A4C081F2F2138481A31411E3348364B603B51
63283E502C4254415769152B3D3F556701192D41596D273F552A455A1E3A5228
445C2B49621E3D5414334A22415629455D2A465E415C76506B854C657F38516B
28405C38506C213C562B4660233E5826445D29485F345166041C323F586C2E46
5C334E6329445E2A455F132D45344F641F374B1E36482B42523B5262364E6221
3A4E273F5539546910293D30485A334A5A30435215263321333E2738453D505F
0014254860742840583C566E203953233C56253E58314B631732470B263B2A44
5C203A52031F371A364E28435D1F3A5449627C3B546E223A521B334B455B7418
2E47283D5341566B001328445A6C253A4F2C44582D445A273F55324C6428445C
233E5825435C243F5926445D203C5427465D2D49611D395119364B2643582642
5A27435B354E68435B73495F78526A7E00172B3B5365243D4D1A3244334B5F2C
43592239531B324C12242344565716272A14272C162730142631132431405362
293A4D1B2C3F1E314625394B23394B0A2032132A3A162D3D1D32473B50654056
68293F5123394B3147591B31433B5163041C303D5569273F552A455A25415926
415B2C4A631A395023435A1E3F5329485F2A49604C678148637D445C783C5470
253D592D45611D3852314C662C4A6325435C2342592B4A5F061E343F586C2B43
59344F64213C56243F591731493752671B3347233B4D2940503E55653E566A28
4155223A502B465B132C402B4355344B5B2E41501A2B3821313D182936384B5A
0011234961752E465E3A536D29415D324A6620385428415B1F39512E495E142E
46152F47112C46132E4819344E17324C435C76354E681B324C2239533B516A17
2D4620354B43586D0014293E56681E364A2A43572C445A223D522E4A62203F56
203E5722415A27455E27465F2140571F3F562C4B621A39502140552241562C48
6026415B3B546E4A627A43597251697D000F233F57692F48583A5264273F532E
455B132A442B425C0515143C4C4B19282A1021241F2F361A2A361E2F3C455867
2C3D501C30421C2F44273A4F253B4D152B3D1E35451F3547253B4D34495E2F45
57263C4E213749263C4E263C4E384E60092135324A5E314A5E2A425826405827
4159223E561C385028475C24435A2F4E651C3A533F5A743D5873435B77405874
27405A314A64213A5427435B27435B2B475F2C4B622D4961061E323E566A2D46
5A324D6229435B1A364E1E3A523550651A3347274152172F412E4658364E6230
475D30485E3A5268243D5130485A344B5B263B4A1627341B2C3910212E3E5160
001325475F733A526A3049633A536D3C5470273F5B243D5719334B284358253F
57001830122E4618344C29455D2640582E4860405A72294159253D552D435C2B
415A2B40563C5167000F24374F611B33472A4357334B6126415637536B28475E
2A496017364D2A486121405722415827445923405519364B2A475C233F57324D
6726415B3D567048617B4157705A71870014283850622A405229415329415518
304629405A4059730F1A183C49470A16181D292D1D2D3423343D1223304E6170
1B2F41182E401B3045253A4F2D4355091F311E3244283C4E2A40523A5062283E
502E44562E4456304658293F51384E600B21333B516331495B2E465A29415530
485C263E52253E523D5A6F244058304B6528435E3D5571425A76566E8A344D67
2A425A243C5240586E233B51284056324A62273F573B516A051A2F35495B4258
6A385064233E522341541634473755681C394E183649213C503D586D263D5333
4962283E573E556B273F532840543B51632A3E4F1B2F40293C4B1A2D3C344859
041A2C4A5F742A42561F374D48617B3D587217324D17324C253F572F49611630
48112B43213B53173247233E531B33491C344A455D732F465C20364F1A304925
3B542A40594D627804192E455B6D2D425728405430485E223D523E596E2A475C
27445929465B28425A2742572A425831495D20384C273F533D576F223D572F4A
642C47623B536F425B75596E894D637C04192E3A5062394D5F293F5121394D2A
42581E395335506A131B1A46514F1B27291F2B2F23303821323B142532445968
122638172D3F162B4023384D273D4F0C223424384A2337491A30422A40522B41
53253B4D1A30422F45572B41533A5062041A2C394F6123394B2C42542E44562A
4052273D4F273F533853682D4961243F5A39546F3E567448607E4F6783354E68
2B435B2840563C5569263F531F364C243B512237524357701327393C50613147
59374F61253F501935461F3D5036546716334818354A254257324D62253D5527
3D56273B543D52681C33491E364A2E445623394B1A2E3F2D4152203445405465
091F31445A6C284054223A50213B532A455F37546F092740253E58213B531832
4A223C54213C51173247233C501D364A274054314A5E334A60233A501228412E
445D394F68445B710D2035384C5E1F34492B435720374D1A32482843582E495E
142F441E394E21394F30485E2D4257273C51293D4F2D42573E566E304963233E
5939546F39516D49617D556A8553698202142B5A6D822C4052152B3D273E541F
3A4F36516B2F4D660913133E48481E2A2C19282B2131381B2B37172835445968
15293B1C3244192F4123394B2036481026382438491B2F40253B4D384E602E44
5621374923394B384E60192F4132485A061C2E3F55671E34462E445630465822
384A273D4F253D51334E63304C64344F6A3B567149617F364E6C506884455E78
2E465E2941572B44582740541F364C233A502237523E546D0A2032334A5A3349
5B42586A253D4F102A3B1B3448324D61193448223D5125405530485E273F5729
4159253B543E556B263D532840542B4153243A4C172B3C2D41521B2F403C5061
0E22334E64761B3347334B611A344C25405A47647F24425B29425C344E66233E
53284358425D7227425710293D2D465A2942562A4357344B61243B51182F452D
445A2A40593E556B0A1D32364A5C283D522C44581D3549223B4F233E532A455A
2C475C264156162F432F485C2D425724394E2C40521E3348354D65304963324D
683F5A75475F7B374F6B5267825D738C091B32495C712E425412283A2E455B24
3F542D486223415A0B14173A46481B272B1B292F22313A1D2F3A1C2D3A4C5F6E
1D31421A30421C32442137491A3042162D3D1C3041192D3E1C32441A30421D33
452A4052203648364C5E22384A2D43550B21333D5365253B4D354B5D2B415321
37492B415321394D3853682C48601E39543D587348607E4B63813E56723C556F
2A425A28405620394D2C4559263D532E455B2A3F5A3D536C0C22342D44544056
68495F712840521C3446172F4330495D2E475B375064223A50354D632840582F
475F1A3049364D63253D51284054243A4C243A4C192D3E2F43541C30413F5364
071B2C4A61711A2F442C45592941591E3850415C76334E682D475F233D552742
572A455A3D586D233E53112A3E223B4F142D411B3448273E5431485E1E354B2A
4157263C55465D73071A2F3D51632E435821394D273F532740542B465B2D485D
284358264156213A4E354E62253A4F1F3449314557273C51374F672A435D1C37
52415C7748607C4D66803F546F50677D02142B3F5267213547293F51334A6022
3D523B56700D2B440D181C414C501C282C1B292F1928311F313C142532374A59
1E32430F2334182F3F1930401B2F401D3241142938213546172D3F364C5E2238
4A2D43552B41533046581A3042354B5D071D2F3147592B4153354B5D1E344622
384A2E44561C34482843581F3B5327425D3D58733E5674455D7B273F5B39526C
1F374F28405620394D2E475B253C5230475D2E435E40566F132B3F2D45573349
5B384E60243A4C243A4C1B3045253A4F31465B344C601C33492F465C2C445A2C
445A1C344A3951671F374B253D511D354923394B1B2F402D41521B2F403F5364
081C2D4259692F44591932463149611A344C38536D26415B223C541731492944
591C374C334B611B3349142D4120394D1730441A3347233B51425A70162D4327
3E543147603B5268081B3044586A1A2F44132B3F273F53213A4E264156365166
1B364B1B364B274054354E6222374C23384D2D415320354A2D455D223B552641
5C3E59743B536F465F792C415C556C82000D24405368263A4C2C42542A415736
51663D587213314A0F192048545A222E3418252D15242D233540122232223544
2034450F2334162D3D162D3C2237461E3342112635253A49102737263C4E192F
412A4052192F4132485A2F455732485A071D2F2F45572B415333495B192F4120
36482D4355172F433954691A364E2A456028435E425A7849617F2B435F314A64
1E364E21394F183145233C501F364C2D445A293F58394F680C2438385062253B
4D3046582137491C304224374C1D30452A3D522A3F5422374D21384E324A6021
394F2941573F576D233C502D4559243C50253D4F203446273B4C162A3B3A4E5F
081C2D4C60712A40521C3448324A602E48601B3650314C66253F57274159314C
611732472C445A1A3248183145294256233C50334C602840563A52681B324829
4056293F5831485E00152A4D6173162B40172F4320384C2B4458223D522F4A5F
233E531D384D1F384C2B44581E334824394E273B4D14293E3C546C1B344E2A45
602B46613F577349627C3045604E657B0011264053682E42542C42542A42563C
576C17334B23415A1A252D48535B2631391A2630202E3A2638431C2C3C2B3E4D
2035441A2F3E162B3A172C3B2C4150192F3B1629362036421F3646394F612137
49263C4E213749394F611F35473046580A2032394F6122384A2F45572137491D
33452A40521931452D485D27435B344F6A37526D29415F3E5674263E5A3C556F
263E561D354B162F43213A4E22394F2C4359233952354C62041D313B55662840
52364C5E2C40522435482C3D50293A4D37485D38495E2F42571D32472F475B1B
34482843582D485D223A502D455B294155273F51273B4D263A4B1E3140445766
001324495D6E1C3244223A4E263E543D576F0B264036516B3B556D2038502B43
59253D5310293D1831452C45591A33471932462F485C263F532A43572A425827
3F551C344C42596F00152A465C6E263C4E253D4F20384C364F63253D53273F55
21394F243C521D364A2C45591C3244192F412C4254243C502A425827405A344F
6A3D5873263E5A3D5670293E59576E84000E234C60721E3244394F612E465A1A
354A0E2A4223415A1F293337434D18242E11202921313D192936192A37354857
1B2E3D203544102534142A36324854142A361B2F3A1B313D162A3B22384A2137
492C4254192F4132485A192F41384E60071D2F405668142A3C2A40522B41531B
31432C425421394D1B364B1D39513A556F324D682E46642B435F243C58274159
29415920394D263F532E4859294155283F5521375040576D061F332C46572139
4B283E502A3E5030415428374A31405337455B38495E293A4F192E4329415524
3F532E495E264358253D5331495F2D4559273F51283C4E2034451A2D3C415463
0115263A4E5F32485A243C4E1D344A40586E2C465E253F57435B73273F57172F
451D354B10293D243D512A43571A3347193246152E422A43572F485C2B435917
2F45132B43445C720F243932485A2C42542A4254243C502C4559233B512D455B
2B43592A4258112A3E30485C2840521C32442D43551830441E364C213B533B56
7035506B29415D2A435D2C415C4B62780012274256682A3E5033495B18304418
3348132F4728465F25313D43515D14222E14222E000F1C132330192A372C3F4C
1D303D2134411E313E1C2F3C182B380D212C1428331E344023374823394B192F
41354B5D1E34462E445622384A304658091F313C5264162C3E2D4355273D4F1E
3446243A4C2F475B1631462C486039546E29445F344C6A273F5B344C6828425A
243C54263F532740541F394A2840541F364C273D56344B61092236314B5C3149
5B2A4052394D5F2334472B3A4D3746592A394C3A4B5E1F304520354A2941552E
495D2C475B224053172F452E465C2F475B253D4F2034462034451E31403C4F5E
071B2C415566283E50233B4D2D445A3F576D213B531E3850273F57162E441E36
4C233B511D364A0D263A173142203A4B1832431C3647233C5019324631495F10
283E11293F3E576B051B2D3F56662F47591A324430485C273F532D465A223B4F
284155284155152D41294155273F511A3244263D4D2D455718304629435B3E59
7329445E344C6827405A354A654A617702152A415567364A5B283E50162E4215
3045213D55314F68202E3A4957631D2B3713232F0515221626331C2D3A324350
1D303D1629360E212E2033402135401B2F3A112530172D39233748283E50192F
4132485A243A4C32485A293F51364C5E071D2F3C5264172D3F2D4355263C4E1E
344622384A273F531530452440583C57712C476138506C233B5729425C213B53
233B512740542C46571C3647243C501F374B2D435C30475D011A2E3852632941
531C324432465817283B2E3F522C3D502E3F523B4C5F1C2F4412273C20384C23
3C502A45592D485C1931472C445A2C4458243C4E1F33451B2F401A2D3C3C4F5E
0D213241556624384A22384A223A4E3A52682F475F203A521F374D1931471D35
4B172F451932461C35492640511D3748112B3C1630412F485C223B4F455D7312
2A401A3248375064082032475E6E2E4658263E5020384C2840541E374B233C50
223B4F253E52142C40284054243C4E193143233A4A243C4E193147223C543F5A
7429445E364E6A243D572D435C465D73000B204A5E702135461B32421F374B0E
293E26425A26445D1828344D5D6923333F0F1F2B0919251527321A2B3830414E
21323F192A370316231B2E3B1A2D3A253845122631172D391D31422A4052152B
3D273D4F263C4E2E44562A4052364C5E051B2D3A5062172D3F273D4F2137491C
324423394B223A4E1F3A4F26425A39546E29445E29415D233B57213A542B455D
1F374D1C3549253F501D3748223A4E1F374B30465F354C62051D314A62742A40
52172D3F32485A14283A394D5F283C4E2034462F4557152B3D152D3F243E4F26
4051213B4C263F53183046294157294155233B4D1E3244192D3E1B2E3D405362
081B2A3F5463273B4C2E44561D3549263F532E465C263E54334A602F465C2A42
561830441C3549253E52284253152F40102A3B1B3546253E522B445835506412
2D41173247364F63021A2C3750602E46581C34461830421A3244172F43243C50
1E364A253D51152D3F253D4F1F3749183042223B4B223A4C243C522640583A55
6F26415B29425C243D57263C554D647A03162B566A7C192D3E1D3444152D4118
3348233F57203F5612222E4E5E6A2535410818240719240E202B11222F263744
1E2F3C2536430E212E1E313E0F222F2B3E4B1428331B2E3B1327382A40521329
3B1C324423394B283E50263C4E314759061C2E3C52641B314323394B1D33451B
31432A4052263E502641562C495E37526C28435D19314D2A425E213A543B556D
20384E122B3F193344284253233B4F1F374B2D435C3E556B021A2E4A62742036
4812283A293F5112283A2E44561A3042243A4C2B4355082032132B3D223C4D29
4354173142203A4B1931472C445A2B435720384A1C30421B2F401D303F405362
041726445766243849334758213749152D4120384E253D532D445A263D53223A
4E172F431E374B223B4F284253213B4C152F40213B4C1C35492C45592843571A
35491E394E3E596D061E30334C5C344C5E1F37491C34461E36481E364A31495D
1F374B284054193143243C4E1A32441931432942522741522A42582D475F3853
6D28435D1C354F2B455D243A53546C80091C314155672C4051172E3E19314523
3E521C385016354C10222D4D5F6A20323D0416210618230B1D28091B261F313C
1D2F3A283A451D2E3B2B3C491728352E3F4C1425321B2E3D0D21322B4153172D
3F1A304222384A2C4254263C4E32485A091F31405668243A4C293F511F35471D
33453046582941531D384D29465B3E597329445E1C34502F4763263F593C566E
253D53183145152F402F495A21394D243C50283E573D546A0D22374D63752339
4B1F3547263E5020384A253D4F173142294354274152112B3C152F4029435421
3B4C132B3D1A32441A3248324A602E465A1C3446172B3D1C30411E31403A4D5C
0A1D2C5164731B2F40223647203648162E42172F451B33491E354B1D344A1F37
4B18304421394D233B4F2E4859334D5E102A3B1630411833471F3A4E2D485C1B
364A243F543D586C031B2D324B5B263E50243C4E0F2739223A4C162E422D4559
21394D2B435720384A2941531A32441931432B445427415220384E2C465E3E59
7328435D1F38522F4961293F58526A7E0012273E52642A3E4F2138482F475B40
5B6F1430481B3A51142631495B66182A35061823091B260F212C091B2620323D
2537421F313C1829362738451B2C392637440E1F2C1E31400A1E2F283E501A30
421B3143203648364C5E283E50344A5C071D2F3D5365273D4F2D435523394B1C
32442D435521394B183348264358445F79243F592139552A425E2B445E3B556D
243C5220394D1630412943541D35492B43572B415A3A51670A1F3443596B2137
49243A4C1E3648223C4D1A34450F2B3C223E4F1A3647213D4E1B3546344E5F15
2F401830421D3547162F432F475D2A4256162E4014283A1F3344203342384B5A
0114235A6D7C25394A1D3142203648203648172F43142C42172E44243B512941
551B334721394D253D51314B5C354F601731421B3546112C401C374B233E5226
41551A354A3C576B0A2234364F5F2F47592840521E3648273F51253D5130485C
223A4E2B4357223A4C2E46581D35471A32442942521F394A1A324829435B405B
75203B55213A5427415930465F546C800012244C60721C3041182F3F435B6F39
546816324A24435A1428333E525D0C1E290A1C270D1F2A1729340E202B273944
2A3C47192B361627341B2C391A2A3A1D2D3D0D1D2D2033420D2132253B4D1B31
431A30421B3143415769273D4F33495B071D2F374D5F23394B2B4153243A4C1A
30422B41531A32441C374C2D4A5F3F5A742B46601C3450273F5B28415B3F5971
2D455B2740541C3647223C4D273F532F475B33496242576D0E2136485C6E2C42
542B4355203A4B233F502341521331422745561533441B394A18344527415112
2B3B1F36462A4254142D412A4258243C50142C3E15293B203445203342384B5A
00101F5467762E4253283C4D243A4C263C4E1E364A1D35490B22381D344A243C
50162E421E3648223A4C2C46572F495A2640512842530E2A3B1F3B4C1C374B37
5266132E43425D71031B2D2E47573049591E3747263E501C34462D4559273F53
243C50273F531E36482E46581F38481C35452841511A34451C344A314B633C57
7128435D1C354F243E562F455E576F830013254054651E32430C23333F576B0C
273B1D3951203F561B27313C4B5406151E0C1D260E202B1C2E3912242F2C3E49
2435421A2B382434411D2D3A1E2E3E1E2E3E1121311B2E3D14283A253B4D1D33
451B3143182E40495F71273D4F3147590B2133354B5D203648293F51263C4E1C
32442E44561C34481B384D34536A35536C3F5A7416314B2E47612039533F5971
435B71314A5E274152264051374F632E455B364D634A5F75071A2F44586A2D43
55273F511B35461A354929475A0D2D402442551533461533462A4657233D4E1B
334510283A1B33451C344A2B4359243C50182E40172B3C1E31401C2C3C344756
0E2130475B6C2438492A4052283E502D43552A40522B4153162D4322394F263E
521B3347223A4C1F3749243C4E2942521E36481B34440F293A112B3C233D4E36
4F63112A3E3C5569031B2D3851612E47572A4353223A4C21394B2C4458253D51
273F53243C50172F432A42541E36481E37472A42541B354616334838576E3553
6C405B751B344E2C445C253C52566B80000E203E52631A2E3F4357681A304217
30441833472A455913131943464E161E251E29311A2B341D2F3A1D313C364956
1D2D3D1423332330402330402F3E4E2030400E212E192E3D051B2D2D42571B2F
412A3E50162A3B3448592D41523145560D213241556622384A304658223A4E1C
34482F475B273F5514324B24455F2C4A6553728B2947601E3A52425C74344F64
3E576B2C44582B43572C44582F465C1A314732495F3D546A091E333D5569223A
4E364F631B364A1F3A4F355065102D42203B50213C511530452944581C354926
3F5310293D1A33472B475F1431461E364A1C304123344114243016263240515E
0517284C607221394D1F374B32485A1F36462335462E42531E3348182D432338
4D1D32471026382C43531930402F4655162A3B2338472034450E22333347583C
50621B2F413B5163051C2C384F5F2D43551A30421E364A1F374B253D53294157
2D455B2D455B1A32482A4357253E521A3445334B5F233E5212324921435B2B4D
6458778E254159294157384F65576C81000F213D4E612C3E4F30425320344518
2C3D364D5D213847100A0F403E4423262E101A2120313A152A322A404C2B3E4B
152535091729212E3E17243425344420313E1023302237461A304223384D2135
473347591428393D51622135462B3F500B1F303F5666263C4E2C4456243C501B
33472C43591E38501E3C57284B652E4F6942617A25445B2643583D586D374F65
3C54682E465A223A4E263E523B5268253C522940563A51670B23373C54682139
4D1D364A213A4E193449324A60173247284058233B51152D4327405420384C21
394D1D35491D364A28455A1530452039491A2D3A27384121303917262F334350
0D1F30485D7230475D273F5530485C1E34462C405125394A2A3F5422394F2E43
591E33480B21332239491C33433D5261263A4B1D32412A3E4F182C3D293B4C38
4C5D192A3D3F5364071E2E304757283E50263C4E233B4F20384C2A4258354D63
2A455A294459263E542C4559243D511D364A2A4256203B50204259264A622B4D
653D5D742E4A622E465C3F566C52677C07182D4F60733443562F41521C2E3F2E
41503043521E313E1511173D3D431D232A0A161C2A3B441C31393C525E263946
0A1A2A0F1E2E202D3D1B28382B3B481B2C39182B38192F3B263D4D1E36482339
4B253B4D233A4A2B4252162D3D2D4454081F2F405767293F51273F51263E521C
35492C445A1B354D1E3D562F516933526B2D4C651F3E552A475C365166395266
3B5367284054294155263E52233A50263D53374D663B5268081E30465C6E1A30
42223A4C1F37492B4458233B4F1D364A2E455B223A4E183044263E502137491C
3343263D4D1B3242233D4E142D3D2136450F212C20303729363E1E2A343B4856
0A1C2D50657A3B536B253F57354D65193147253D511C34482C43591D354B253C
52172F4311293D20384A152D3F2A41512137491B32421A304222384A1D314322
384A24374C394F610D2434344B5B1C344630485A142C40273F532D455B3B5369
2A42582840562B445827405421394D223A4C263C4E20394D1D3C5532546C3251
6A2B4A6128425A2941573C5369566B80000C214E5F724152651B2C3F1E2F4228
3C4D283C4D1D324117171D474A4F1B232A15222A1629310A1E29283E4A1B313D
0013221F2F3F162535222F3F33435011212D2739440B212D223949334B5D0117
29253C4C2239492C4353041B2B395060081F2F3C5363243C4E1A3244223B4F1B
344829415717324716354C34546B2E4D641F3E551B384D284358334C60375064
3850641E364A2C4458284054172E4421384E3C526B41586E081E303E55652339
4B1D3345283E50284052253D4F1B33452840541D334522384A2A3E4F1C304128
3B4A2C3F4E1B303F1C3140152B372739440D1C251A282E28343A202D3543535F
0D1E31455A70445C7437506A233E58122D472F4961122D422E48601C364E263E
561B364B20384E2841551A3347223C4D233B4D223A4C1A3244253D4F152D411C
34481F344932475C0D23352F4656273F51223A4C1B334720384C3951672E465C
263E54263F53223B4F1C36471C344621394B23394B1B3347112F483957722E4C
65233E581B334B293F5832465F556A80000B22506176435469162A3C2B3F512A
3E502C4052283C4D15171F494C54111A2317242C152830172B36263C48102534
001221213141101F2F1A29392C3C490F1F2B293B460E222D29404F2C45550013
231F3646253C4C2A4150031827394E5D061D2C384F5E1D36461029391B354616
30411D364A0B263B1E3B503A596E223F541B364B1A3549253E52314A5E30485C
2F475B193145263D53233A50294157253D532A425A465D73092030394E5D2337
481B32421A31412138482A41511C334323394B172B3C2C40512A3D4C15283739
4A572E3F4C24364120323D1E31392F3F4618262C2430362531371B283040505C
03142751687E40597335506B2A476216334E223D571E3953233E581A364E2640
58173449102B40142F441530452B465A243D511730442942561C354918304637
4F65142B413D5569001628354B5D162E40334B5D112A3E2F485C2D465A274054
233C50274054183044162E401C32441D34442135460E26381C385038566F243F
5917304A1B324C30465F2E425B4A5F75000F264C5F741F32471A2D42273A4F28
3E50182E40182E40070D14454D5419242C1120291E303B283E4A2E45540B2231
051A291A2D3C1D2D3D1B2B3823333F192A33192A3311232E304554132A3A263D
4D1F3443263B4A1B303F0E2332364B5A091E2D3A5160203747112A3A1A324416
2E40152D41092236324D613D586C1730441D37481A33472840542D4559273F53
233B4F1A3246364D631C33491E364C273F55324A6242596F041B2B3A4F5E1D31
422C4051102737223949283F4F172E3E273B4C15293A31445324374611222F3A
4B5826364221313D2B3C45283A412A3A4117252B29353B2733391D2C353F4F5C
05192A465D733E566E3F5A7427445F15324D23405B1C375129445E26425A314B
63254257122F441330451B364B3853681A3549132E42203B4F122D411D354B37
4F65152D433C5468081E30394F61162E40263E50183145223B4F274054284155
223B4F284155162E40162E401D3444182F3F1B2F400B21332E495E3551692740
5A162E462137502D435C2F435C475C720719304C5F7422354A23384D2C415627
3C511A30421B314300030C4B565E2D394313242D0D212C152B371A31400B2231
0E2332203342293A4721323F1D2D391A2B340B1C2511222B2A3D4A152A392D42
512D404F172A391F323F1225323A4D5A0C1F2C415461243746182D3C1B2F401A
31411A30421B334538506231495B142C3E2740501830422A4254233B4D243C4E
21394D193145465E72193145152D43263E543B536B3F566C03192B374E5E243A
4C243A4C22384A182E402F455712283A294050132A3A2E43522336451C2D3A35
465322323E1929352D3E472E40472131380E1E2525323A202F3822303C3D4E5B
07192A51667B39506638506840597317324C15304A213B532843582540552840
56274256153044183347142F432B465A2540541F3A4E183145162F431B34481D
364A152D412A4256081E30485E70172F411C3446142C401D354920384C2A4256
233B4F263E521F3547172D3F1B2F401C30411C2F3E1E3243314A5E304B602B43
5B253D531E354B283D532C3E554B5E730114293F52672A3F54213749253B4D21
394B183042172F4105121A47545C1728310F212C122532253B47172E3D0F2635
142938293E4D22354221333E13242D1222291020271928312A3A472030401F2F
3F1D2E3B25354222323F20303D3646530C1C2941525F213141172A3917293A1E
32432337493246573145562037461A2E3F344B5B172E3E2B42521B3143273F51
253D511830443C5468193145344C62284056263E5441586E031B2D445A6C182E
40243A4C192F411931432C4254172F41283E501128382A4151263B4A2E415033
4653273845182A3521333E2F414C20313A0E1F2820303C1828351C2C39314151
1224355165774054663D52674E667A1C344A1A32481F384C2E465A294153253D
4F294354152F401B35461630412C48592E4859152F401D37481830421C344622
3A4C1B3345384E60000F2142586A2F4557071F31284054132B3F2941551F374B
243C50223A4C253B4D142B3B162A3B1F334420334235495A2C44562B4458223B
4F364E621A30422B4153233749475B6D071B2D4256682A40522B4252172F413A
5363172F41152E3E0A19220B1C251E2E3A182A350F222F1F344309202F122938
1B32410B202F172A3720323D0F202904141B09141C0C19210D1B270C1C290D1D
2A0515220B18260614200E1C281826321A283405131F000C1A0414210B1A2A06
162609192A2032430B1E2D0C222E051827132837142938051C2B0B2232041B2B
0F27390F273918304411293D031B2F142C400B233701192D152D4111293D1028
3C11293D0A223610293D193145072034294155132B3D10283A162D3D0D243414
29380C1F2E182B381C323E142A36162B3A1429381428391325360E2031112433
172738021222000C1C011423081B2A02162705192A1E32430C20310A1E2F051C
2C0F26360A21310B2434031C2C051F2F0E27370E2737162F3F112838041B2B16
2D3D0D243405192A192D3E1027370E2535172E3E061C2E142A3C193143041C2E
2A425410283A13293B142B3B1226371126350E2130182D3C19304011293B122B
3B1128380B2232142B3B081F2F0E25351B3242081F2F1C3343102736132C3C1E
3846142E3E112C3A182A3510222D31434E2F404D3A4D5C3043522D425139505F
3249581E36421C303B30434B2D3D441C2A3018222907101924303C1D2A382330
3E111D29232F3B17232F2B3743313D4944505C27333F141F2D0D1A28111E2E12
21311927392F3F4F2E3F4C172A371F323F1D303D384B5A1126352A3E4F1C3343
1B3143374F612A42561E364A2D45592E465A132B3F223A4E273F53233B4F223A
4E243C501F384C2942563850662D455B4E677B30495D253D512C4456273D4F34
4B5B223949223948314858223B4B193242223A4C243C5033495B2B3F51324455
3F4F5F23334010202D0D1B270F1F2B12222E1829362F404D283946182B382336
43203544324756112837263D4C1E38461B35433953612D445321384732475633
4857182D3C273C4B304352293D4E2438492940501E34462E44563C526430485A
4F6779334B5D233A4A2F4656223647374C5B253847283D4C364D5C1C36441A31
40253C4B29404F2F4655233A49314857314857223948374E5D273E4D2A445224
3E4C2843512742502F424F384B584154614A5D6C3C4F5E435665384C5D435867
3C53623D55613F535E52656D45555C2D393F3740442C343B3F49533B4753434F
5B323B48434C59343E48434D57434D57515B653B4751323E4A2F3D4935425038
4553384555404F5F3D4D5A34465130424D3F525F3A4D5C2C4150384C5D354C5C
3046583A50623A50623F5567364C5E3C52643C526433495B384E60374D5F364E
603B5365354E6237506440586E354D635570853B566A364F633A53672F475B3F
5769324A5C2F48584B63753E58692E475B395266344C62455D73394E63415567
4A5A6A374754323E48313D4737444C3A474F38475040505C3C4C583747532939
4541525F394C59304652394F5B2F475330475639505F3B505F405564384B583F
525F3E515E3548553A4B583D505F3A4D5C405564364A5B3950603D5365374D5F
586E803F55673F5567384F5F3047573D54643A4E5F3449584A61704159653B53
5F364E5A38505C4C64703E55643A5160445B6A3B526149606F39505F3F59672F
49573E58663A5462283E4A2D434F3B4E5D2F42513346552C3F4E354758334857
3148572C454F2A3E493C4F56404E543540443E434630363B353F493844503B47
53343E4838424C333D47343E48333D47454F5935414B333F4B2E3C482E3B4932
3F4D313E4E32424F3949552E3E4A283A4530424D33465334475635495A223647
2B4153344A5C2D4355354B5D2C4254314858384E6032465735495A2F46562B42
522E46582D455730485C3B5367374F653D556B284056314A5E2C4559263E5231
495D30485A2C4456324A5C2D4758294256304B6028425A324C642A4157364A5C
3E4E5E33414D353F49323D45323E4434414931404934434C38475037464F2B3B
472D3F4A1F303D1F323F263C481C31402138472A4150253A492C415024374629
3C493344512B3C49293A472D3E4B21323F2336451F32412438492B3F50304658
2B41531C32442D43551E34461D3444243B4B293D4E1C304122394818303C1E35
44263E4A233A49283F4E1A3140263D4C2A41512940502940502037472841511F
38482E4757223B4B0F2635081F2E162B3A1528371F2F400D1F30182A3B1C3140
0B22310B242E162A351B2E3518262C1720241D20242025281A252D1C2B341D2C
3514202A18242E16232B1A272F1A272F212E3619262E1D293318273013212D15
25311626331626331C2C38162730172733162833142734102332162A3B0F2334
1229391C3343132738172B3C0F2334142938192D3E122534192C3B1629381326
35192D3E1B2F40162C3E1C3244172F431A3246061E321830440A2236122A3C13
2B3D192F411127390F26360D243410293D102B400D273F0D273F0B223815293B
1C2C3C17262F1F2A321D272E17222A19262E1827301626321B29351826321F2F
3C152633091929102332162B3A1F3646193040243B4B1B2F401F3443182B3A1D
303F2535451D2E3B22323E22323E11212D1425321124311429381B2F40263A4B
192F4112283A162E40183042102638263C4E192F411027371229390E2534182F
3F2138471C33431D34441027371D344412283A1E344613293B112739152B3D19
2F4123394B182E40031D2B09202F1429381528371323341626370D1F300F2433
1328370B242E11262E12242B18242A1A21241011150B0E120E19210F20291D2E
3708172017272E08181F1222290B1B2219262E0C1C23101F280B1C250515210C
1E290F202D0D1F2A1A2B340C1D260E1E2A0E202B12233000111E051A29132738
0A2131182F3F1024350F24330E2332162B3A1326350E1F2C1829361426310E1F
2C1326331528370D213211253612283A102638041C2E183044051D2F0D253706
1C2E0A20320E2233162B3A0E23320E26380C25390D273F0C263E0A223811263B
1424340C1B24141F27111C240B161E111D2710202C0E1E2B1D2D390616220E1E
2B0E1E2E172A391B2F40132A3A283F4F1C32442B425222384A2337482135462B
3E4D29394A2434442A3A46293A431C2C3824344020313E1D303D1E3342283C4D
253B4D1F3547273F511D35471D334523394B1D33451E34461C32441D34442238
4A1E35451A3042293F511A30421A2F44162B40293E531E33481E33491B304624
394F2A3F55293E54142F3D1933413F53641C2E3F3040512E3E4F304253223746
1D324129424C31464E2F41482733391D242722212520232719262E20333B3346
4E1F30392C3E451A2C3321333A17293045555C26383F192A330D2028091B2616
2A351E323D1C303B3F50591928311F2F3B0C1E294758651B2E3B2035441B303F
243849485C6D2E43521B303F3B4E5D4255622435423749543A495232414A2533
3F253541283946273A473B4E5D4C60712B3F50283F4F354B5D2940502A415127
3B4C2337483247563547522C404B273E4D2B4355294459304A622E465C394E63
4252622836421F2933141F270E1A241B29352030401C2F3E40505D1929362332
420F1F2F3E52631B31431B31431A32441E364A445C6E2C44581A3042384C5E3E
526322334639495937455132424924333C2C3C482738452A3D4A374C5B495D6E
2B4153243A4C344C5E1D35472C44561C344620384A2B4355344A5C23394B263B
5032485A31465B34495E2A3F543C516724394F2D4258283D53293D562F405A31
425C34455F3B4C66395462385260566A7B3F5162404E6042526339495A3B505F
3C5160445D67394E5641545949555B4146494443473033373441493E535B4A5D
653F525A40535A3E515842545B4052595A6C733A4C5330434B2F424A31455040
545F3F5560364A5544555E3D4C553C4C583648535364713B4E5B304554394E5D
495D6E4F6374485D6C374C5B3B4E5B5164714355603F505943525B47545C4251
5A4859624757633C4E594558675568774357684054653A51613D5464465A6B4C
60713A4E5F4D606F51646C4F626A465B6A4A62743B5369435D753C53694B6075
5969793C4A5635414B34414938445043536041546336495845556540505D3545
553548574D61733A50622E465A344C60435C704C6579465E72344C60374B5D4D
61734051643F4F5F47556146535B3F4E574A5B643F4F5C3B4E5B475A69536877
43596B3D53653C54663B5365475F71455D6F364E60475F714B6075475C714A5F
74465B703E5368495E7340556B495E7441556E3B4F68394D663A4E674F607B49
5A75495A7552637E}
Left = 304
Top = 88
end
object ImageList1: TImageList
Height = 20
Width = 20
Left = 276
Top = 416
Bitmap = {
494C01010D000E00040014001400FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000500000005000000001002000000000000064
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000C0C0C000C0C0C00000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000C0C0C000C0C0C000C0C0C000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C0C0C000C0C0C000C0C0C0000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000C0C0C000C0C0C000C0C0
C000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000C0C0C000C0C0
C000C0C0C0000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000C0C0
C000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000008080800080808000808080008080800080808000808080008080
8000808080008080800000000000000000000000000000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF000000000000000000000000000000000000000000000000000000
000000000000808080000000000000000000000000000000000080808000FFFF
FF0000000000FFFFFF0080808000FFFFFF0000000000FFFFFF0080808000FFFF
FF0000000000FFFFFF0080808000FFFFFF000000000000000000000000000000
0000000000000000000080808000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF000000000000000000000000000000000000000000000000000000
0000000000008080800000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C0C0C00000FFFF00C0C0C00000FF
FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF
FF00000000000000000000000000000000000000000000000000000000008080
80000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF000000000000000000000000000000000000000000000000000000
0000000000008080800000000000000000000000000080000000800000008000
0000800000008000000080000000800000008000000080000000800000008000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF0000000000C0C0C00000FFFF00C0C0
C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0
C0000000000000000000000000000000000000000000000000000000000000FF
FF0000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF000000000000000000000000000000
00000000000000000000000000000000000000000000FFFF0000FF0000000000
0000FFFFFF000000000000000000000000000000000000000000000000000000
000000000000808080000000000000000000000000008000000000FF000000FF
000000FF000000FF000000FF000000FF000000FF000000FF0000800000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000FFFF000000000000FFFF00C0C0C00000FF
FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF
FF00C0C0C0000000000000000000000000000000000000000000000000008080
80000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FF0000000000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00000000000000000000000000000000008000000000FF00008000
000080000000800000008000000000FF000000FF000080000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF0000FFFF000000000000FFFF00C0C0
C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0
C00000FFFF0000000000000000000000000000000000000000000000000000FF
FF00808080008080800000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF0080808000000000000000
00000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000008000000000FF00008000
0000808080008000000000FF000000FF00008000000000000000000000008080
8000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000FFFF00FFFFFF0000000000C0C0C00000FF
FF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FFFF00C0C0C00000FF
FF00C0C0C00000FFFF0000000000000000000000000000000000000000008080
800000FFFF0080808000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0080808000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFFFF00FFFF0000FFFF
0000FF000000FF000000FF00000000FFFF0000FFFF0000FFFF0000FFFF0000BF
BF0000000000000000000000000000000000000000008000000000FF00008000
00008000000000FF000000FF0000800000000000000000000000000000000000
0000000000008080800000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF0000FFFF00FFFFFF00000000000000
0000000000000000000000000000C0C0C00000FFFF00C0C0C00000FFFF00C0C0
C00000FFFF00C0C0C000000000000000000000000000000000000000000000FF
FF00808080008080800080808000808080008080800080808000808080008080
8000808080008080800080808000808080008080800080808000000000000000
000000000000000000000000000000000000FFFF0000FFFFFF00FFFF0000FFFF
0000FFFF0000FF000000FF0000008080800000FFFF0000FFFF0000FFFF0000FF
FF0000BFBF00000000000000000000000000000000008000000000FF00008000
000000FF000000FF000080000000000000000000000080808000000000000000
0000C0C0C0000000000000000000808080000000000000000000000000000000
000000000000000000000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008080
800000FFFF008080800000FFFF0080808000FFFF0000FFFF0000FFFF0000FFFF
0000808080008080800000FFFF00808080000000000000000000000000000000
00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF
0000FFFF000000BF000000BF00008080800000FFFF0000FFFF000000BF0000BF
BF0000FFFF00000000000000000000000000000000008000000000FF000000FF
000000FF0000800000000000000000000000000000000000000000000000C0C0
C000FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000FFFF008080800000FFFF0000000000FFFF0000FFFF0000FFFF
0000808080008080800080808000808080000000000000000000000000000000
00000000000000000000000000000000000000000000FFFF0000FFFF0000FFFF
000000BF000000BF000000BF000000BF0000FFFFFF0000FFFF000000BF000000
BF0000FFFF0000BFBF000000000000000000000000008000000000FF000000FF
0000800000000000000000000000000000000000000000000000808080000000
0000FFFFFF00FFFFFF00FFFFFF00C0C0C0000000000000000000000000000000
000000000000000000000000000000FFFF00FFFFFF0000FFFF00FFFFFF0000FF
FF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF
0000808080000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FFFF0000FFFF
000000BF000000BF000000BF000000BF000000BF00000000BF000000BF000000
BF0000FFFF0000BFBF000000000000000000000000008000000000FF00008000
0000000000000000000000000000000000000000000000000000000000000000
0000C0C0C000FFFFFF00FFFFFF00C0C0C0000000000000808000000000000000
0000000000000000000000000000FFFFFF0000FFFF00FFFFFF0000FFFF00FFFF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF000000000000FFFF
0000808080000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FFFF0000FFFF
000000BF000000BF000000BF000000BF00000000BF000000BF0000FFFF000000
0000000000000000000000000000000000000000000080000000800000000000
0000000000000000000000000000000000000000000000000000000000008080
800000000000C0C0C000C0C0C0000000000000FFFF0080000000008080000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000FFFF0000FFFF0000FFFF000000000000000000008080
8000808080000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FFFF
000000BF000000BF000000BF000000BF000000BF000000000000000000000000
0000000000000000000000000000000000000000000080000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF0000FFFF0000FFFF00800000000080
8000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000FFFF0000FFFF0000FFFF00000000000000000000000000000000
0000808080000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FFFF
FF00FFFF0000FFFF000000BF000000BF00000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000FFFF00FFFFFF00FFFFFF0000FFFF0000FFFF008000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000FFFF0000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFF0000FFFF000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000FFFF00FFFFFF00FFFFFF0000FFFF0000FF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000FFFF00FFFFFF00FFFFFF0000FF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008080
8000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000FFFF000080800000FFFF000080800000FFFF000080800000FFFF000080
800000FFFF000080800000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000808000C0C0C0000000000000000000000000000000000000000000C0C0
C0000080800000FFFF0000808000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000FF000000FF000000FF000000FF00000000
000000FF000000FF00000000000000FF000000FF000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000FFFF0000808000C0C0C000000000000000000000000000000000000000
0000C0C0C0000080800000FFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000008080800000FF000000FF000000BF000000FF
000000FF00000000000000FF000000FF00000000000000000000000000008080
8000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
0000FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF000000BF000000FF000000FF000000FF
000000FF000000FF000000FF000000000000000000000000000080808000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000
0000FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000BFBF000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000BFBF0000BFBF0000BFBF00000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF000000BF000000FF000000FF
000000BF000000FF000000BF0000000000000000000080808000FFFF0000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF00FFFFFF000000
0000FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000BFBF0000BFBF0000BFBF0000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000BFBF0000BFBF0000BFBF00000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF000000BF000000FF
000000FF000000BF0000FFFF00008080800080808000FFFF0000FFFF0000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000C0C0C000FFFFFF00FFFFFF00FFFFFF00000000000000000000000000FFFF
FF00FFFFFF00C0C0C00080808000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000BFBF
0000BFBF0000BFBF0000BFBF0000BFBF00000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000BFBF0000BFBF0000BFBF00000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF000000BF
000000BF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000000000000000000000000000000000000000000000000000000000000000
000000000000C0C0C000FFFFFF00FFFFFF00808080000000000080808000FFFF
FF00C0C0C000C0C0C00000000000808080000000000000000000000000000000
0000000000000000000000000000000000000000000000000000BFBF0000BFBF
0000BFBF0000BFBF0000BFBF0000BFBF0000BFBF000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000BFBF0000BFBF0000BFBF00000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000FFFFFF00FFFFFF00808080000000000080808000C0C0
C000000000000000000080808000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000BFBF0000BFBF0000BFBF0000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000BFBF0000BFBF0000BFBF0000BFBF0000BFBF0000BFBF
0000BFBF00000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF0000FFFF000000BFBF0000BFBF00FFFF0000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000BFBF0000BFBF0000BFBF0000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000BFBF0000BFBF0000BFBF0000BFBF0000BFBF
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF000000BFBF0000FFFF0000FFFF0000BFBF00FFFF
0000000000000000000000000000000000000000000000000000000000000000
000000000000FFFFFF00FFFFFF00FFFFFF00C0C0C0000000000080808000C0C0
C000808080008080800000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000BFBF0000BFBF0000BFBF0000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000BFBF0000BFBF0000BFBF00000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF000000BFBF0000FFFF0000FFFF0000BFBF00FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000808080000000000000000000000000000000000000000000000000000000
0000000000000000000080808000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000BFBF0000BFBF0000BFBF0000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000BFBF0000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF0000FFFF000000BFBF0000BFBF00FFFF0000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000008080800000000000808080000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000BF000000BF000000BF000000BF000000BF000000BF000000
BF000000BF000000BF0000000000000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF0000000000C0C0C000C0C0
C000FF000000FF000000FF000000FF000000C0C0C000C0C0C00000000000FFFF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000BF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000BF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000C0C0C000C0C0
C000FF000000FF000000FF000000FF000000C0C0C000C0C0C000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
BF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000BF000000000000000000000000000000
000000000000000000000000000000000000FFFFFF0000000000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C00000000000FFFF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000BF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000BF0000000000000000000000
0000000000000000000080808000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000808080000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF0000000000000000000000
000000000000000000000000000000FF000000FF000000FF000000FF00000000
000000FF000000FF00000000000000FF000000FF000000000000C0C0C000C0C0
C00000000000000000000000000000000000000000000000BF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000BF00000000000000
0000000000000000000000000000FFFFFF0000000000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C00000000000FFFFFF000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000FFFFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000008080800000FF000000FF000000BF000000FF
000000FF00000000000000FF000000FF000000000000C0C0C000C0C0C0008080
8000000000000000000000000000000000000000BF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000BF000000
00000000000080808000000000000000000080808000C0C0C000C0C0C000C0C0
C0000000FF000000FF000000FF00C0C0C0008080800000000000000000008080
8000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF000000000000000000000000000000
0000000000000000000000000000FFFFFF000000000000000000000000000000
0000000000000000000000000000FFFF000000BF000000FF000000FF000000FF
000000FF000000FF000000FF000000000000C0C0C000C0C0C00080808000FFFF
00000000FF00C0C0C00000000000000000000000BF000000FF00FFFFFF00FFFF
FF00FFFFFF000000FF000000FF00FFFFFF000000FF000000FF00FFFFFF00FFFF
FF00FFFFFF000000FF00FFFFFF000000FF000000FF000000FF000000BF000000
00000000000000000000FFFFFF0000000000C0C0C000C0C0C000FF000000FF00
00000000FF000000FF000000FF00C0C0C00000000000FFFFFF00000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF000000000000000000000000000000
00000000000000000000FFFFFF00000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF000000BF00000000FF00C0C0
C00000BF000000FF000000BF0000C0C0C000C0C0C00080808000FFFF0000FFFF
0000000000000000000000000000000000000000BF000000FF000000FF000000
FF00FFFFFF000000FF000000FF00FFFFFF000000FF000000FF00FFFFFF000000
FF00FFFFFF000000FF00FFFFFF000000FF000000FF000000FF000000BF000000
000000000000000000000000000000000000C0C0C000C0C0C000FF000000FF00
00000000FF000000FF000000FF00C0C0C0000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF0000000000000000000000
00000000000000000000FFFFFF00000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF00000000FF000000FF000000
FF00C0C0C00000BF0000FFFF00008080800080808000FFFF0000FFFF00000000
FF00C0C0C0000000000000000000000000000000BF000000FF00FFFFFF00FFFF
FF00FFFFFF000000FF000000FF00FFFFFF000000FF000000FF00FFFFFF000000
FF00FFFFFF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF000000BF000000
00000000000000000000FFFFFF0000000000C0C0C000C0C0C000FF000000FF00
0000FF000000FF000000C0C0C000C0C0C00000000000FFFFFF00000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000FFFFFF00000000000000
000000000000FFFFFF0000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF00000000FF000000FF000000
FF00C0C0C000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00000000FF00C0C0
C000000000000000000000000000000000000000BF000000FF00FFFFFF000000
FF000000FF000000FF000000FF00FFFFFF000000FF000000FF00FFFFFF000000
FF00FFFFFF000000FF00FFFFFF000000FF00FFFFFF000000FF000000BF000000
00000000000080808000000000000000000080808000C0C0C000FF000000FF00
0000FF000000FF000000C0C0C000C0C0C0008080800000000000000000008080
8000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF00000000FF000000
FF000000FF00C0C0C000FFFF0000FFFF0000FFFF00000000FF000000FF00C0C0
C000000000000000000000000000000000000000BF000000FF00FFFFFF00FFFF
FF00FFFFFF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF00FFFFFF00FFFF
FF00FFFFFF000000FF00FFFFFF00FFFFFF00FFFFFF000000FF000000BF000000
0000000000000000000000000000FFFFFF0000000000C0C0C000FF000000FF00
0000FF000000FF000000C0C0C000C0C0C000C0C0C00000000000FFFFFF000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FFFF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF00000000
FF000000FF000000FF00C0C0C000FFFF00000000FF000000FF00C0C0C000FFFF
0000000000000000000000000000000000000000BF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000BF000000
00000000000000000000000000000000000000000000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C00000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FFFFFF000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
00000000FF000000FF000000FF000000FF000000FF00C0C0C00000BFBF00FFFF
0000000000000000000000000000000000000000BF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000BF000000
0000000000000000000000000000FFFFFF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FFFFFF000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000FFFFFF00000000000000
0000FFFFFF000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
0000FFFF00000000FF000000FF000000FF00C0C0C00000FFFF0000BFBF00FFFF
000000000000000000000000000000000000000000000000BF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000FF000000BF00000000000000
0000000000000000000080808000000000000000000000000000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C00080808000000000000000
0000808080000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF0000000000000000000000
00000000000000000000FFFFFF00000000000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
00000000FF000000FF000000FF000000FF000000FF00C0C0C000FFFF0000FFFF
00000000000000000000000000000000000000000000000000000000BF000000
FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000FF000000BF0000000000000000000000
000000000000000000000000000000000000FFFFFF0000000000C0C0C000C0C0
C000C0C0C000C0C0C0000000FF000000FF000000FF00C0C0C00000000000FFFF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF000000000000000000000000000000
0000000000000000000000000000FFFFFF000000000000000000000000000000
0000000000000000000000000000FFFF0000FFFF0000FFFF0000FFFF00000000
FF000000FF000000FF00C0C0C000FFFF00000000FF00C0C0C000FFFF0000FFFF
0000000000000000000000000000000000000000000000000000000000000000
BF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF000000BF000000000000000000000000000000
0000000000000000000000000000000000000000000000000000C0C0C000C0C0
C000FF000000FF0000000000FF000000FF000000FF00C0C0C000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000FFFFFF0000000000000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF0000000000000000000000
000000000000000000000000000000000000000000000000FF000000FF000000
FF000000FF00C0C0C0000000000000000000000000000000FF000000FF00C0C0
C000000000000000000000000000000000000000000000000000000000000000
00000000BF000000FF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000FF000000BF00000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFF0000000000C0C0C000C0C0
C000FF000000FF0000000000FF000000FF000000FF00C0C0C00000000000FFFF
FF00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000FF000000FF000000FF000000
FF00C0C0C00000000000000000000000000000000000000000000000FF000000
FF00C0C0C0000000000000000000000000000000000000000000000000000000
0000000000000000BF000000BF000000BF000000BF000000BF000000BF000000
BF000000BF000000BF0000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000C0C0C000C0C0
C000FF000000FF000000FF000000FF000000C0C0C000C0C0C000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000FF000000FF00C0C0C0000000
0000000000000000000000000000000000000000000000000000000000000000
FF000000FF00C0C0C00000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000424D3E000000000000003E000000
2800000050000000500000000100010000000000C00300000000000000000000
000000000000000000000000FFFFFF00FFFFF0000000000000000000FFFFF000
0000000000000000FFFFF0000000000000000000FFFFF0000000000000000000
F9FFF0000000000000000000F87FF0000000000000000000FC3FF00000000000
00000000FC1FF0000000000000000000FE0FF0000000000000000000FF05F000
0000000000000000EF81F0000000000000000000E7C1F0000000000000000000
F2E0F0000000000000000000F8C070000000000000000000F8F8700000000000
00000000F0FC70000000000000000000FFFFF0000000000000000000FFFFF000
0000000000000000FFFFF0000000000000000000FFFFF0000000000000000000
FFFFFFFFFFFFFFFFFFFF000080007FFFFFFFFFFFE0010000C0007FFFFFFFFFFF
E801000080007FFFFFC000FFE7F90000C0007C000FC000FFE739000080007C00
07C0007F84090000800FFC0007C0007E07F90000801FFC0003C0007C00050000
803FFC0003C0003800010000800FFC0001C0003C000700008083FC0001C0003E
000300008180FC0003C000FF0003000083C07C000FC000FF0001000087C03C00
0FF807FF800100008FE01C001FFC07FF800300009FE00E0FFFF827FFC01F0000
BFF00FFFFFF077FFC07F0000FFF80FFFFFF8FFFFE0FF0000FFFC0FFFFFFDFFFF
F3FF0000FFFF0FFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF
FFFFFFFFFFFF0000E001FFFFFFFFFFFFFFFF0000E000FFFFFFFFFFFC00070000
E000FFFFFFFFFFFC00370000E000FFFFFFFFFFFC00670000E000FFFBFFFE0FFC
00C70000E000FFF1FFFE0FFC01870000E000FFE0FFFE0FFC00070000E000FFC0
7FFE0FFC00070000F000FF803FF001FC00070000F801FF001FF803FC00070000
F001FFE0FFFC07FC00070000F001FFE0FFFE0FFC00070000F001FFE0FFFF1FFC
00070000FF1FFFE0FFFFBFFC00070000FF1FFFFFFFFFFFFC00070000FFFFFFFF
FFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000
FFFFFFFFFFFFFFFFFFFF0000F803FE0007FFFFFFFFFF0000F001FE0007FFFFFF
FFFF0000E000FE0007FFFFFC00070000C0007C0007FFFE7C0007000080003C00
0FF9FFFC00070000000018000FF0FCFC00030000000018001FF0F9FC00070000
000018001FF871FC00070000000018001FFC23FC00070000000018000FFE07FC
0007000000001C000FFF0FFC0007000000001C000FFE07FC0007000000001C00
0FFC27FC0007000080003C0007F071FC00070000C0007E0007E0F8FC00070000
E000FE0007E3FC7C00070000F001FE0007FFFFFF07C70000F803FE0007FFFFFF
1FE30000FFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000
000000000000}
end
object ActionList1: TActionList
Images = ImageList1
OnUpdate = ActionList1Update
Left = 292
Top = 440
object acAddImages: TAction
Category = 'GlueIt'
Hint = 'Add images from file.'
ImageIndex = 7
OnExecute = btnAddImagesClick
end
object acDeleteAll: TAction
Category = 'GlueIt'
Hint = 'Clear all images from list.'
ImageIndex = 2
OnExecute = btnClearAllClick
end
object acDeleteOne: TAction
Category = 'GlueIt'
Hint = 'Delete one selected image from list.'
ImageIndex = 3
OnExecute = btnDeleteSelectedClick
end
object acSaveToFile: TAction
Category = 'GlueIt'
Hint = 'Save image to file.'
ImageIndex = 11
OnExecute = btnSaveClick
end
object acGlueIt: TAction
Category = 'GlueIt'
Hint = 'Glue all images from list to one.'
ImageIndex = 4
OnExecute = btnGlueItClick
end
object acGlueIzonometrics: TAction
Category = 'GlueIt'
Enabled = False
Hint = 'Glue images as isonometric picture.'
ImageIndex = 8
end
object acUpSelection: TAction
Category = 'GlueIt'
Hint = 'Go up image in list.'
ImageIndex = 6
OnExecute = btnUpSelectionClick
end
object acDownSelection: TAction
Category = 'GlueIt'
Hint = 'Go down image in list.'
ImageIndex = 5
OnExecute = btnDownSelectionClick
end
object acAnimateOn: TAction
Category = 'Anime'
Hint = 'Start Animation'
ImageIndex = 1
OnExecute = btnPlayClick
end
object acAnimateStop: TAction
Category = 'Anime'
Hint = 'Stop Animation.'
ImageIndex = 0
OnExecute = btnStopClick
end
object acAnimeFontOff: TAction
Category = 'AnimeFont'
Hint = 'Start drawing font off.'
ImageIndex = 0
OnExecute = btnFontAnimationStopClick
end
object acAnimeFontOn: TAction
Category = 'AnimeFont'
Hint = 'Start drawing font on.'
ImageIndex = 1
OnExecute = btnFontAnimationStartClick
end
object acLoadImage: TAction
Category = 'Preview'
ImageIndex = 9
OnExecute = LoadImagedirectly1Click
end
object acSaveImage: TAction
Category = 'Preview'
ImageIndex = 11
OnExecute = btnSaveClick
end
object acGetTransparent: TAction
Category = 'Preview'
Caption = 'acGetTransparent'
Enabled = False
Hint = 'Get transparent color from current image.'
ImageIndex = 12
OnExecute = acGetTransparentExecute
end
end
end
/VCL_DELPHIX_D6/DXGlueItEdit.pas
0,0 → 1,1461
unit DXGlueItEdit;
//(c)2007 Jaro Benes
//All Rights Reserved
 
{
Complex application for users of unDelphiX as component editor:
 
Supported:
a) many small images glue into one image.
b) generate font image as one image with subpictures.
c) use image effect for DIB.
d) animation the glued image and font preview.
e) restructuralize of images to square size or unlimeted in one size direction up 2048 px.
f) it works in 24bit deepth always.
g) store into DXImageList directly.
h) reset of transparent color.
i) force size for all images with different size.
j) use the loupe preview for glued image (in preview page).
k) generate mask for alphachannel for characters of fonts.
}
 
interface
 
{$I DelphiXcfg.inc}
 
uses
Windows, Messages, SysUtils, Classes, Graphics, ShellAPI, StdCtrls, Dialogs,
DXClass, DIB, jpeg, Menus, DXDraws, ComCtrls, Buttons, Controls, ExtCtrls, Forms,
{$IFDEF VER17UP}System.UITypes,{$ENDIF}
ExtDlgs,{$IFDEF VER6UP} Types,{$ENDIF} ActnList, ImgList;
 
type
TOperationGlueIt = (ogiNew, ogiEdit);
{injected class}
TEdit = class(StdCtrls.TEdit)
private
function GetAsInteger: Integer;
procedure SetAsInteger(const Value: Integer);
published
public
property AsInteger: Integer read GetAsInteger write SetAsInteger;
end;
TDXGlueItEditor = class(TForm)
OpenDialog1: TOpenDialog;
DXTimer1: TDXTimer;
SaveDialog1: TSaveDialog;
DXImageList1: TDXImageList;
Panel5: TPanel;
btnExit: TButton;
Button1: TButton;
PopupMenu1: TPopupMenu;
LoadImagedirectly1: TMenuItem;
mainPageControl: TPageControl;
tsGlueIt: TTabSheet;
tsFontGen: TTabSheet;
Panel1: TPanel;
grManagementOfTheFrames: TGroupBox;
Panel4: TPanel;
chbCrop: TCheckBox;
chbCentered: TCheckBox;
ListBox1: TListBox;
Panel3: TPanel;
btnAddImages: TSpeedButton;
btnDeleteSelected: TSpeedButton;
btnClearAll: TSpeedButton;
btnSave: TSpeedButton;
btnGlueIt: TSpeedButton;
btnGlue2Iso: TSpeedButton;
btnUpSelection: TSpeedButton;
btnDownSelection: TSpeedButton;
chbTransparent: TCheckBox;
Panel2: TPanel;
grPictureAnimationPreview: TGroupBox;
DXDraw1: TDXDraw;
Panel6: TPanel;
btnStop: TSpeedButton;
btnPlay: TSpeedButton;
LAnimationSpeed: TLabel;
pbAnimationSpeed: TProgressBar;
tsPreview: TTabSheet;
GroupBox1: TGroupBox;
Panel7: TPanel;
ScrollBox1: TScrollBox;
Image1: TImage;
GroupBox4: TGroupBox;
Panel8: TPanel;
gbFontSettings: TGroupBox;
Label1: TLabel;
Label4: TLabel;
Label10: TLabel;
cbFontName: TComboBox;
FontSize: TEdit;
gbFontEffects: TGroupBox;
Label5: TLabel;
Label7: TLabel;
eOffset: TEdit;
eOpacity: TEdit;
gbColorSettings: TGroupBox;
Label14: TLabel;
Label15: TLabel;
btnFontGenerate: TButton;
FontPageControl: TPageControl;
tsFont: TTabSheet;
ScrollBox2: TScrollBox;
imgFont: TImage;
tsMask: TTabSheet;
ScrollBox3: TScrollBox;
imgMask: TImage;
tsPreviewFont: TTabSheet;
PreviewMemo: TMemo;
PreviewDraw: TDXDraw;
PreviewTimer: TDXTimer;
FontDXImageList: TDXImageList;
Label16: TLabel;
btnAllChars: TButton;
memAlphabet: TMemo;
cbAntialias: TCheckBox;
cbDrawGrid: TCheckBox;
SavePictureDialog: TSavePictureDialog;
ColorDialog: TColorDialog;
pnlFG: TPanel;
pnlBG: TPanel;
Panel20: TPanel;
btnABold: TSpeedButton;
btnAItalic: TSpeedButton;
btnAUnderline: TSpeedButton;
DXDIB1: TDXDIB;
Label11: TLabel;
Sources: TMemo;
Panel9: TPanel;
btnFontAnimationStop: TSpeedButton;
btnFontAnimationStart: TSpeedButton;
Splitter1: TSplitter;
Splitter2: TSplitter;
Panel10: TPanel;
LDuration: TLabel;
Label6: TLabel;
pbDuration: TProgressBar;
cbEffectsList: TComboBox;
btnApply: TButton;
Panel11: TPanel;
grSubimages: TGroupBox;
LPatternWidth: TLabel;
LPatternHeight: TLabel;
ePatternWidth: TEdit;
ePatternHeight: TEdit;
btnResize: TButton;
btnReplace: TButton;
Panel12: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Label2: TLabel;
panTColor: TPanel;
EWidthOfImages: TEdit;
EHeightOfImages: TEdit;
LWidthOfImages: TLabel;
LHeightOfImages: TLabel;
chbForceSize: TCheckBox;
ImageList1: TImageList;
ActionList1: TActionList;
acAddImages: TAction;
acDeleteAll: TAction;
acDeleteOne: TAction;
acSaveToFile: TAction;
acGlueIt: TAction;
acGlueIzonometrics: TAction;
acUpSelection: TAction;
acDownSelection: TAction;
acAnimateOn: TAction;
acAnimateStop: TAction;
acAnimeFontOff: TAction;
acAnimeFontOn: TAction;
Image2: TImage;
GroupBox2: TGroupBox;
Label13: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Slider: TTrackBar;
chbZoomOut: TCheckBox;
CheckBox1: TCheckBox;
btnGetTransparentcolor: TSpeedButton;
btnCrop: TSpeedButton;
btnFill: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton13: TSpeedButton;
btnWand: TSpeedButton;
btnMask: TSpeedButton;
acLoadImage: TAction;
acSaveImage: TAction;
acGetTransparent: TAction;
Label8: TLabel;
panBColor: TPanel;
Panel13: TPanel;
EFromImage: TEdit;
EToImage: TEdit;
Label3: TLabel;
LToImage: TLabel;
chbAutoAply: TCheckBox;
procedure chbAutoAplyClick(Sender: TObject);
procedure pbDurationMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure pbDurationMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure cbEffectsListChange(Sender: TObject);
procedure chbForceSizeClick(Sender: TObject);
procedure acGetTransparentExecute(Sender: TObject);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure btnGetTransparentcolorClick(Sender: TObject);
procedure btnResizeClick(Sender: TObject);
procedure btnReplaceClick(Sender: TObject);
procedure btnFontAnimationStartClick(Sender: TObject);
procedure btnFontAnimationStopClick(Sender: TObject);
procedure PreviewMemoChange(Sender: TObject);
procedure PreviewTimerTimer(Sender: TObject; LagCount: Integer);
procedure btnAUnderlineClick(Sender: TObject);
procedure btnAItalicClick(Sender: TObject);
procedure btnABoldClick(Sender: TObject);
procedure btnFontGenerateClick(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure btnAllCharsClick(Sender: TObject);
procedure pnlFGClick(Sender: TObject);
procedure cbFontNameDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure pbAnimationSpeedMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DXDraw1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure LoadImagedirectly1Click(Sender: TObject);
procedure btnApplyClick(Sender: TObject);
procedure pbDurationMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure ListBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
procedure btnStopClick(Sender: TObject);
procedure btnAddImagesClick(Sender: TObject);
procedure btnClearAllClick(Sender: TObject);
procedure btnUpSelectionClick(Sender: TObject);
procedure btnDownSelectionClick(Sender: TObject);
procedure btnDeleteSelectedClick(Sender: TObject);
procedure btnGlueItClick(Sender: TObject);
procedure btnPlayClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
 
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ActionList1Update(Action: TBasicAction;
var Handled: Boolean);
procedure chbZoomOutClick(Sender: TObject);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure mainPageControlChange(Sender: TObject);
private
{ Private declarations }
tmpPicture: TPicture;
StartingPoint: TPoint;
FDuration: Integer;
ListObjects: TStringList;
dX, dY: Integer;
FFontStyles: TFontStyles;
charArr: string;
sizesArr: array of Integer;
Zdvih: Integer;
WPattern: Integer;
InitIntInMs: Integer;
WCounter: Integer;
FOperationGlueIt: TOperationGlueIt;
SelectionOfTransparentColor: Boolean;
procedure WMDropFiles(var Message: TWMDropFiles); message wm_DropFiles;
procedure RestructuralizeWithResize(NewWidth, NewHeight: Integer; TranspColor: TColor = clMaroon);
procedure SetOperationGlueIt(const Value: TOperationGlueIt);
procedure DoBitmapEffect(Picture: TPicture);
public
{ Public declarations }
property Operation: TOperationGlueIt read FOperationGlueIt write SetOperationGlueIt;
procedure LoadImageFromList(const iName: string; Image: TPicture; PatternWidth,
PatternHeight: Integer; Transparent: Boolean; TransparentColor: Integer);
procedure SaveImageIntoList(oItem: TPictureCollectionItem);
end;
 
var
DXGlueItEditor: TDXGlueItEditor;
 
implementation
 
{$R *.DFM}
 
 
uses {$IFDEF StandardDX}DirectDraw{$ELSE}DirectX{$ENDIF};
 
{ TEdit }
 
function TEdit.GetAsInteger: Integer;
begin
try
Result := StrToInt(Self.Text);
except
Result := 0;
end;
end;
 
procedure TEdit.SetAsInteger(const Value: Integer);
begin
Self.Text := IntToStr(Value)
end;
 
procedure TDXGlueItEditor.btnStopClick(Sender: TObject);
begin
DXTimer1.Enabled := False;
end;
 
{ TDXGlueItEditor }
 
procedure TDXGlueItEditor.btnAddImagesClick(Sender: TObject);
var
i: Integer;
TI: TPicture;
begin
if OpenDialog1.Execute then
if OpenDialog1.Files.Count > 0 then begin
ListObjects.Clear;
with OpenDialog1.Files do
for I := 0 to Count - 1 do
if FileExists(Strings[I]) then
begin
TI := TPicture.Create;
TI.LoadFromFile(Strings[I]);
EWidthOfImages.AsInteger := Max(EWidthOfImages.AsInteger, TI.Width);
EHeightOfImages.AsInteger := Max(EHeightOfImages.AsInteger, TI.Height);
ListObjects.AddObject(Strings[I], TI);
end;
ListBox1.Items.Assign(ListObjects);
end;
end;
 
procedure TDXGlueItEditor.btnClearAllClick(Sender: TObject);
var
I: Integer;
begin
if MessageDlg('Do you really want delete all frames?', mtWarning, [mbYes, mbNo], 0) = mrNo then Exit;
btnStop.Click;
for I := 0 to ListBox1.Items.Count - 1 do (ListBox1.Items.Objects[I] as TPicture).Free;
ListBox1.Clear;
ListObjects.Clear;
DXImageList1.Items.Clear;
end;
 
procedure TDXGlueItEditor.btnUpSelectionClick(Sender: TObject);
begin
if ListBox1.ItemIndex > 0 then begin
btnStop.Click;
ListBox1.Items.Move(ListBox1.ItemIndex, ListBox1.ItemIndex - 1);
end;
end;
 
procedure TDXGlueItEditor.btnDownSelectionClick(Sender: TObject);
begin
if (ListBox1.ItemIndex <> -1) and (ListBox1.ItemIndex < (ListBox1.Items.Count - 1)) then begin
btnStop.Click;
ListBox1.Items.Move(ListBox1.ItemIndex, ListBox1.ItemIndex + 1);
end;
end;
 
procedure TDXGlueItEditor.btnDeleteSelectedClick(Sender: TObject);
begin
if ListBox1.ItemIndex <> -1 then begin
if MessageDlg('Do you want delete selected item?', mtWarning, [mbYes, mbNo], 0) = mrYes then begin
(ListBox1.Items.Objects[ListBox1.ItemIndex] as TPicture).Free;
ListObjects.Delete(ListBox1.ItemIndex);
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
end;
end;
 
procedure TDXGlueItEditor.FormCreate(Sender: TObject);
var
cnt: Integer;
begin
DXImageList1.Items.MakeColorTable;
DXDraw1.ColorTable := DXImageList1.Items.ColorTable;
DXDraw1.DefColorTable := DXImageList1.Items.ColorTable;
DXDraw1.UpdatePalette;
tmpPicture := TPicture.Create;
ListObjects := TStringList.Create;
DragAcceptFiles(Handle, True);
WPattern := 0; InitIntInMs := 200; //5 pict per sec
WCounter := 0;
for cnt := 0 to Screen.Fonts.Count - 1 do
cbFontName.Items.Add(Screen.Fonts.Strings[cnt]);
pbAnimationSpeed.Position := 200;
pbDuration.Position := 5;
mainPageControl.ActivePage := tsGlueIt;
FontPageControl.ActivePage := tsPreviewFont;
if chbZoomOut.Checked then Image1.OnMouseMove := Image1MouseMove
else Image1.OnMouseMove := nil;
Tag := 0;
{$IFDEF VER4UP}
pbAnimationSpeed.Smooth := True;
pbDuration.Smooth := True;
{$ENDIF}
end;
 
procedure TDXGlueItEditor.SaveImageIntoList(oItem: TPictureCollectionItem);
begin
oItem.Picture.Assign(DXImageList1.Items[0].Picture);
oItem.Transparent := DXImageList1.Items[0].Transparent;
oItem.TransparentColor := DXImageList1.Items[0].TransparentColor;
oItem.Name := DXImageList1.Items[0].Name;
oItem.PatternWidth := DXImageList1.Items[0].Width;
oItem.PatternHeight := DXImageList1.Items[0].Height;
end;
 
procedure TDXGlueItEditor.LoadImageFromList(const iName: string; Image: TPicture;
PatternWidth, PatternHeight: Integer; Transparent: Boolean; TransparentColor: Integer);
{function for loading existing image from dximagelist do component editor}
var
D: TPictureCollectionItem;
begin
btnPlay.Click;
DXImageList1.Items.Clear;
D := TPictureCollectionItem(DXImageList1.Items.Add);
D.Picture.Assign(Image);
D.Name := Name;
Image1.Picture.Assign(Image);
D.PatternWidth := PatternWidth;
D.PatternHeight := PatternHeight;
D.Transparent := Transparent;
D.TransparentColor := TransparentColor;
DXImageList1.Items.Restore;
ePatternWidth.AsInteger := PatternWidth;
ePatternHeight.AsInteger := PatternHeight;
end;
 
procedure TDXGlueItEditor.btnGlueItClick(Sender: TObject);
// function GetScale(SourceWidth, SourceHeight, TargetWidth, TargetHeight: Integer): Single;
// from DIB unit
// var
// XScale, YScale: Single;
// begin
// XScale := 1;
// YScale := 1;
// if TargetWidth < SourceWidth then
// XScale := TargetWidth / SourceWidth;
// if TargetHeight < SourceHeight then
// YScale := TargetHeight / SourceHeight;
// Result := XScale;
// if YScale < Result then
// Result := YScale;
// end;
var
i: Integer;
XL, YL, X, Y, QX, QY: Integer;
P: TPicture;
C: Double;
Rz: Integer;
B, BB: TBitmap; Icon: TIcon; DIB: TDIB;
CI: TPictureCollectionItem;
ImageIsBigger: Boolean;
OldName: string;
begin
XL := 0; YL := 0;
B := TBitmap.Create;
B.PixelFormat := pf24bit;
try
if chbForceSize.Checked then begin
XL := EWidthOfImages.AsInteger;
YL := EHeightOfImages.AsInteger;
end
else begin
//must be the same size
for i := 0 to ListBox1.Items.Count - 1 do begin
P := ListBox1.Items.Objects[i] as TPicture;
if Assigned(P) then begin
XL := Max(XL, P.Width);
YL := Max(YL, P.Height);
end;
end;
end;
//square od image
C := Sqrt(ListBox1.Items.Count);
Rz := Trunc(C);
if Frac(C) > 0 then Inc(Rz);
//dimension of Image
B.Width := Rz * XL;
B.Height := Rz * YL;
{set color by user settings}
B.Canvas.Brush.Color := panBColor.Color;
B.Canvas.FillRect(Bounds(0, 0, B.Width, B.Height));
for i := 0 to ListBox1.Items.Count - 1 do begin
P := ListBox1.Items.Objects[i] as TPicture;
if Assigned(P) then begin
if P.Graphic is TIcon then begin
Icon := (P.Graphic as TIcon);
BB := TBitmap.Create;
try
BB.Width := Icon.Width;
BB.Height := Icon.Height;
BB.Canvas.Draw(0, 0, Icon);
BB.Transparent := True;
P.Graphic := BB;
finally
BB.Free;
end;
end;
X := (i mod Rz) * XL;
Y := (i div Rz) * YL;
if chbForceSize.Checked then begin
ImageIsBigger := (P.Width > XL) or (P.Height > YL);
if ImageIsBigger then begin
{image will be crop}
if chbCrop.Checked then begin
B.Canvas.CopyRect(Bounds(X, Y, XL, YL), P.Bitmap.Canvas, Bounds(0, 0, XL, YL))
end
else begin {image will be shrink}
C := GetScale(P.Width, P.Height, XL, YL);
DIB := TDIB.Create;
try
DIB.SetSize(P.Width, P.Height, 24);
DIB.Canvas.Draw(0, 0, P.Graphic);
DIB.DoResample(Round(P.Width * C), Round(P.Height * C), ftrLanczos3);
B.Canvas.StretchDraw(Bounds(X, Y, Round(P.Width * C), Round(P.Height * C)), {P.Graphic} DIB);
finally
DIB.Free;
end;
end;
end
else begin
QX := 0;
QY := 0;
if chbCentered.Checked then begin
QX := (XL - P.Width) div 2;
QY := (YL - P.Height) div 2;
end;
if not chbTransparent.Checked then
B.Canvas.Draw(X + QX, Y + QY, P.Graphic)
else
B.Canvas.BrushCopy(Bounds(X + QX, Y + QY, P.Width, P.Height), P.Bitmap, Bounds(0, 0, P.Width, P.Height), P.Bitmap.Canvas.Pixels[0, P.Height - 1]);
end;
end
else
if not chbTransparent.Checked then
B.Canvas.Draw(X, Y, P.Graphic)
else
B.Canvas.BrushCopy(Bounds(X, Y, XL, YL), P.Bitmap, Bounds(0, 0, XL, YL), P.Bitmap.Canvas.Pixels[0, P.Height - 1]);
end;
end;
Image1.Picture.Assign(B);
 
{reset after image assign}
cbEffectsList.ItemIndex := -1; pbDuration.Position := 5; chbAutoAply.Checked := False;
 
OldName := 'Test';
if DXImageList1.Items.Count > 0 then
if Operation = ogiEdit then
OldName := DXImageList1.Items[0].Name; {puvodni jmeno}
 
DXImageList1.Items.Clear;
CI := TPictureCollectionItem(DXImageList1.Items.Add);
CI.Name := OldName;
CI.Picture.Assign(B);
CI.Transparent := chbTransparent.Checked;
CI.PatternWidth := XL;
CI.PatternHeight := YL;
ePatternWidth.AsInteger := XL;
ePatternHeight.AsInteger := YL;
DXImageList1.Items.Restore;
 
EFromImage.AsInteger := 1;
EToImage.AsInteger := ListBox1.Items.Count;
finally
B.Free;
end;
mainPageControl.ActivePage := tsPreview;
end;
 
procedure TDXGlueItEditor.btnPlayClick(Sender: TObject);
begin
DXTimer1.Enabled := True;
if Image1.Picture.Bitmap.Empty then
btnStop.Click;
end;
 
procedure TDXGlueItEditor.btnSaveClick(Sender: TObject);
begin
if MessageDlg('Do you want save image to file?', mtWarning, [mbYes, mbNo], 0) = mrNo then Exit;
if SaveDialog1.Execute then
Image1.Picture.SaveToFile(SaveDialog1.FileName);
end;
 
procedure TDXGlueItEditor.btnExitClick(Sender: TObject);
begin
btnStop.Click;
btnFontAnimationStop.Click;
Tag := 1;
Close
end;
 
function SpeedConst(InitValue, PerSec, LagCount: Integer): Integer; {$IFDEF VER9UP}inline; {$ENDIF}
begin
Result := InitValue + (PerSec * Round(LagCount / 1000))
end;
 
procedure TDXGlueItEditor.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
if DXImageList1.Items.Count <= 0 then Exit;
if not DXDraw1.CanDraw then Exit;
DXDraw1.Surface.Fill(DXDraw1.Surface.ColorMatch(clBlack));
DXDraw1.BeginScene;
try
{clear surface with predefined windows color}
DXDraw1.Surface.Fill(DXDraw1.Surface.ColorMatch(clBlack));
 
//----------------------------------------------------------------------------
{All drawing here like}
Inc(WCounter, LagCount);
{timming}
if WCounter > InitIntInMs then begin
Inc(WPattern);
if WPattern > DXImageList1.Items[0].PatternCount then WPattern := 0;
{only for interval from EFromImage to EToImage}
if WPattern > (EToImage.AsInteger - 1) then WPattern := EFromImage.AsInteger - 1;
{reset counter}
WCounter := 0;
end;
{drawing}
with DXImageList1.Items[0] do
Draw(DXDraw1.Surface, dX-(Width div 2), dY-(Height div 2), WPattern);
//----------------------------------------------------------------------------
finally
DXDraw1.EndScene;
end;
 
{ Draw FrameRate }
with DXDraw1.Surface.Canvas do
try
Brush.Style := bsClear;
Font.Color := clWhite;
Font.Size := 10;
Textout(3, 3, 'FPS: ' + IntToStr(DXTimer1.FrameRate));
if doHardware in DXDraw1.NowOptions then begin
Textout(3, 14, 'Device: Hardware');
end
else begin
Textout(3, 14, 'Device: Software');
end;
finally
Release; { Indispensability }
end;
DXDraw1.Flip;
end;
 
procedure TDXGlueItEditor.FormDestroy(Sender: TObject);
begin
tmpPicture.Free;
ListObjects.Free;
DragAcceptFiles(Handle, False);
end;
 
procedure TDXGlueItEditor.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
StartingPoint.X := X;
StartingPoint.Y := Y;
end;
 
procedure TDXGlueItEditor.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source = ListBox1;
end;
 
procedure TDXGlueItEditor.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
DropPosition, StartPosition: Integer;
DropPoint: TPoint;
begin
DropPoint.X := X;
DropPoint.Y := Y;
with Source as TListBox do
begin
StartPosition := ItemAtPos(StartingPoint, True);
DropPosition := ItemAtPos(DropPoint, True);
 
Items.Move(StartPosition, DropPosition);
end;
end;
 
procedure TDXGlueItEditor.WMDropFiles(var Message: TWMDropFiles);
var
FileCount, I: Integer;
FileName: PChar;
FileNameSize: Integer;
S: string;
TI: TPicture;
begin
try
FileCount := DragQueryFile(Message.Drop, Cardinal(-1), nil, 0);
for I := 0 to FileCount - 1 do
begin
FileNameSize := DragQueryFile(Message.Drop, I, nil, 0);
FileName := AllocMem(FileNameSize + 1);
try
DragQueryFile(Message.Drop, I, FileName, FileNameSize + 1);
S := ExtractFileExt(Filename);
if (S = '.bmp') or (S = '.dib') or (S = '.jpg') then begin
TI := TPicture.Create;
TI.LoadFromFile(Filename);
ListBox1.Items.AddObject(FileName, TObject(TI));
end;
finally
FreeMem(FileName);
end;
end;
finally
DragFinish(Message.Drop);
end;
end;
 
procedure TDXGlueItEditor.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
var
I: TPicture;
begin
I := TPicture(ListObjects.Objects[Index]);
if Assigned(I) then
Height := I.Height;
end;
 
procedure TDXGlueItEditor.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
I: TPicture; Ri: TRect; S: string; A: array[0..255] of Char;
Dest, Src: TRect; Icon: TIcon; B: TBitmap;
begin
ListBox1.Canvas.FillRect(Rect);
I := ListBox1.Items.Objects[Index] as TPicture;
if Assigned(I) then begin
if I.Graphic is TIcon then begin
Icon := (I.Graphic as TIcon);
B := TBitmap.Create;
try
B.Width := Icon.Width;
B.Height := Icon.Height;
B.Canvas.Draw(0, 0, Icon);
B.Transparent := True;
I.Graphic := B;
finally
B.Free;
end;
end;
Dest := Rect;
Dest.Right := I.Width - 1;
Src := Bounds(0, 0, I.Width, I.Height);
if chbTransparent.Checked then
ListBox1.Canvas.BrushCopy(Dest, I.Bitmap, Src, I.Bitmap.Canvas.Pixels[0, I.Height])
else
ListBox1.Canvas.Draw(Rect.Left, Rect.Top, I.Graphic);
Ri := Rect;
Ri.Left := Ri.Left + 4 + I.Width;
S := ExtractFileName(ListBox1.Items[Index]);
DrawText(ListBox1.Canvas.Handle, StrPCopy(A, S), -1, Ri, dt_SingleLine or dt_Left or dt_VCenter);
end;
end;
 
procedure TDXGlueItEditor.pbDurationMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
newPosition: integer;
begin
with Sender as TProgressBar do begin
if ssLeft in Shift then
begin
Cursor := crHSplit;
newPosition := Round(x * Max / ClientWidth);
Position := newPosition;
end
else
begin
Cursor := crDefault;
end;
FDuration := Position;
LDuration.Caption := Format('Duration (%d)', [FDuration]);
end;
if ssLeft in Shift then
if chbAutoAply.Checked and (cbEffectsList.ItemIndex <> -1) and not tmpPicture.Graphic.Empty then begin
DoBitmapEffect(tmpPicture);
Application.ProcessMessages;
end;
end;
 
procedure TDXGlueItEditor.DoBitmapEffect(Picture: TPicture);
var
I, dX, dY: Integer;
TT: TDIB;
tbp: Integer;
begin
TT := TDIB.Create;
try
if Assigned(Picture.Bitmap) then
TT.Assign(Picture.Bitmap)
else begin
TT.Width := Picture.Width;
TT.Height := Picture.Height;
TT.Canvas.Draw(0, 0, Picture.Graphic);
end;
 
dX := TT.Width;
dY := TT.Height;
if pbDuration.Position > 5 then
begin
dX := Trunc(pbDuration.Position / 100 * TT.Width);
dY := Trunc(pbDuration.Position / 100 * TT.Height);
end;
tbp := pbDuration.Position;
{ E F F E C T S }
with TT do
case cbEffectsList.ItemIndex of
0: DoGaussianBlur(tbp);
1: DoSplitBlur(tbp);
2: DoAddColorNoise(tbp * 3);
3: DoAddMonoNoise(tbp * 3);
4: for i := 1 to tbp do DoAntiAlias;
5: DoContrast(tbp * 3);
6: DoFishEye(tbp div 10 + 1);
7: DoLightness(tbp * 2);
8: DoDarkness(tbp * 2);
9: DoSaturation(255 - ((tbp * 255) div 100));
10: DoMosaic(tbp div 2);
11: DoTwist(200 - (tbp * 2) + 1);
12: DoSplitlight(tbp div 20);
13: DoTile(tbp div 10);
14: DoSpotLight(tbp, Rect(tbp, tbp, tbp + tbp * 2, tbp + tbp * 2));
15: DoTrace(tbp div 10);
16: for i := 1 to tbp do DoEmboss;
17: DoSolorize(255 - ((tbp * 255) div 100));
18: DoPosterize(((tbp * 255) div 100) + 1);
19: DoGrayscale;
20: DoInvert;
21: DoBrightness(tbp);
22: DoColorize(clRed, clBlue);
{resampling functions}
23: DoResample(dX, dY, ftrBox);
24: DoResample(dX, dY, ftrTriangle);
25: DoResample(dX, dY, ftrHermite);
26: DoResample(dX, dY, ftrBell);
27: DoResample(dX, dY, ftrBSpline);
28: DoResample(dX, dY, ftrLanczos3);
29: DoResample(dX, dY, ftrMitchell);
end; {Case}
Image1.Picture.Bitmap := TT.CreateBitmapFromDIB;
Image1.Invalidate;
finally
TT.Free;
end;
end;
 
procedure TDXGlueItEditor.btnApplyClick(Sender: TObject);
begin
if not Assigned(Image1.Picture.Graphic) then begin
MessageDlg('Not graphics found in image, please glue it first.', mtWarning, [mbOK], 0);
Exit;
end;
btnApply.Enabled := False;
Screen.Cursor := crHourGlass;
try
DoBitmapEffect(Image1.Picture); Application.ProcessMessages;
finally
Screen.Cursor := crDefault;
btnApply.Enabled := True;
end;
end;
 
procedure TDXGlueItEditor.LoadImagedirectly1Click(Sender: TObject);
var
Q: TPictureCollectionItem;
begin
OpenDialog1.Options := OpenDialog1.Options - [ofAllowMultiSelect];
try
if OpenDialog1.Execute then begin
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
DXImageList1.Items.Clear;
Q := TPictureCollectionItem(DXImageList1.Items.Add);
Q.Name := ExtractFileName(OpenDialog1.FileName);
Q.Picture.LoadFromFile(OpenDialog1.FileName);
Q.Transparent := True;
if Q.Picture.Graphic is TBitmap then begin
Q.TransparentColor := Q.Picture.Bitmap.Canvas.Pixels[Q.Width - 1, Q.Height - 1];
panTColor.Color := Q.TransparentColor;
end;
DXImageList1.Items.Restore;
end;
finally
OpenDialog1.Options := OpenDialog1.Options + [ofAllowMultiSelect]
end;
end;
 
procedure TDXGlueItEditor.DXDraw1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
dX := X;
dY := Y;
end;
 
procedure TDXGlueItEditor.pbAnimationSpeedMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
newPosition: integer;
begin
with Sender as TProgressBar do begin
if ssLeft in Shift then
begin
Cursor := crHSplit;
newPosition := Round(x * Max / ClientWidth);
Position := newPosition;
end
else
begin
Cursor := crDefault;
end;
InitIntInMs := Position;
LAnimationSpeed.Caption := Format('Animation speed (%f/sec):', [InitIntInMs / 1000]);
end;
end;
 
procedure TDXGlueItEditor.cbFontNameDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TComboBox).Canvas do
begin
Font.Name := Screen.Fonts.Strings[Index];
//Font.Size := seSize.AsInteger;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, PChar(Screen.Fonts.Strings[Index]))
end;
end;
 
procedure TDXGlueItEditor.pnlFGClick(Sender: TObject);
begin
ColorDialog.Color := (Sender as TPanel).Color;
if ColorDialog.Execute then
(Sender as TPanel).Color := ColorDialog.Color;
end;
 
procedure TDXGlueItEditor.btnAllCharsClick(Sender: TObject);
var
I: Integer;
S: string;
begin
S := '';
for I := 0 to 255 do
if Char(I) < ' ' then S := S + ' ' else S := S + Char(I);
memAlphabet.Lines.Add(S);
end;
 
procedure TDXGlueItEditor.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssShift in Shift then with Image1.Canvas do begin
Brush.Color := panTColor.Color;
Brush.Style := bsSolid;
FloodFill(X, Y, Pixels[X, Y], fsSurface);
end;
end;
 
procedure TDXGlueItEditor.btnFontGenerateClick(Sender: TObject);
var
S, vizfntname: string;
C: Double;
Rz, vX, vY, I, absX, absY, V, X, Y, offC: Integer;
B: TBitmap;
LogFont: TLogFont;
fnt: TFont;
dib, alpha: TDIB;
q, d: TPictureCollectionItem;
begin
{no preview}
btnFontAnimationStop.Click;
{private font def.}
fnt := TFont.Create;
try
fnt.Assign(cbFontName.Font);
V := eOpacity.AsInteger;
fnt.Color := RGB(V, V, V); //0..255
fnt.Name := cbFontName.Text;
fnt.Size := FontSize.AsInteger;
fnt.Style := FFontStyles;
{antialiased/ttf}
if not cbAntialias.Checked then begin
GetObject(fnt.Handle, SizeOf(LogFont), Addr(LogFont));
with LogFont do begin
if cbAntialias.Checked then
lfQuality := ANTIALIASED_QUALITY
else
lfQuality := NONANTIALIASED_QUALITY;
lfOutPrecision := OUT_TT_ONLY_PRECIS;
end;
fnt.Handle := CreateFontIndirect(LogFont);
end;
{get set of chars}
S := TrimRight(memAlphabet.Lines.Text);
if S = '' then begin
btnAllChars.Click;
S := TrimRight(memAlphabet.Lines.Text);
end;
{target square}
C := Sqrt(Length(S));
Rz := Trunc(C);
if Frac(C) > 0 then Inc(Rz);
{generate mask font}
B := TBitmap.Create;
try
B.PixelFormat := pf8bit;
B.Canvas.Brush.Color := clBlack;
B.Canvas.Font.Assign(fnt);
{absolute sizes}
charArr := s;
SetLength(sizesArr, Length(charArr));
vY := B.Canvas.TextHeight(S); Zdvih := vY;
vX := 0;
for I := 0 to Length(S) - 1 do begin
sizesarr[I] := B.Canvas.TextWidth(S[I + 1]);
vX := Max(vX, sizesarr[I]);
end;
 
offC := eOffset.AsInteger;
vX := vX + offC;
vY := vY + offC;
 
absX := Rz * vX;
absY := Rz * vY;
 
B.Width := absX;
B.Height := absY;
 
B.Canvas.FillRect(Bounds(0, 0, B.Width, B.Height));
B.Canvas.Brush.Style := bsClear;
{shadow as offset}
if eOffset.AsInteger > 0 then
for I := 0 to Length(S) - 1 do begin
X := offC + (i mod Rz) * vX;
Y := offC + (i div Rz) * vY;
B.Canvas.TextOut(X, Y, S[I + 1]);
end;
{masked chars}
B.Canvas.Font.Color := clWhite;
for I := 0 to Length(S) - 1 do begin
X := (i mod Rz) * vX;
Y := (i div Rz) * vY;
B.Canvas.TextOut(X, Y, S[I + 1]);
end;
imgMask.Picture.Assign(B);
finally
B.Free;
end;
{generate font}
B := TBitmap.Create;
try
B.PixelFormat := pf24bit;
B.Width := absX;
B.Height := absY;
B.Canvas.Brush.Color := pnlBG.Color;
B.Canvas.Font.Assign(fnt);
B.Canvas.Font.Color := pnlFG.Color;
B.Width := absX;
B.Height := absY;
B.Canvas.FillRect(Bounds(0, 0, B.Width, B.Height));
B.Canvas.Brush.Style := bsClear;
for I := 0 to Length(S) - 1 do begin
X := (i mod Rz) * vX;
Y := (i div Rz) * vY;
B.Canvas.TextOut(X, Y, S[I + 1]);
end;
imgFont.Picture.Assign(B);
finally
B.Free;
end;
finally
vizfntname := fnt.name;
fnt.Free;
end;
 
Sources.Lines.Clear;
Sources.Lines.Add('{Generated constants for simple use of the font}');
Sources.Lines.Add('const');
Sources.Lines.Add(Format(' offsY = %d;', [Zdvih]));
Sources.Lines.Add(Format(' offYbyOrder: array [0..%d] of Integer = (', [Length(charArr) - 1]));
s := '';
for i := Low(sizesArr) to High(sizesArr) do
s := s + IntToStr(sizesArr[i]) + ', ';
Delete(s, Length(s) - 2, 2);
Sources.Lines.Add(s);
Sources.Lines.Add(');');
 
dib := TDIB.Create;
alpha := TDIB.Create;
try
alpha.Assign(imgMask.Picture.Bitmap);
dib.Assign(imgFont.Picture.Bitmap);
dib.AssignAlphaChannel(alpha);
{for preview}
FontDXImageList.Items.Clear;
q := TPictureCollectionItem(FontDXImageList.Items.Add);
q.Picture.Assign(dib);
q.Name := vizfntname;
q.PatternWidth := vX;
q.PatternHeight := vY;
q.Transparent := True;
q.TransparentColor := pnlBG.Color;
FontDXImageList.Items.Restore;
{showing}
Image1.Picture := nil;
Image1.Picture.Bitmap := dib.CreateBitmapFromDIB;
{for exchange with master thread}
DXImageList1.Items.Clear;
d := TPictureCollectionItem(DXImageList1.Items.Add);
d.Picture.Assign(dib);
d.Name := vizfntname;
d.PatternWidth := vX;
d.PatternHeight := vY;
d.Transparent := True;
d.TransparentColor := pnlBG.Color;
DXImageList1.Items.Restore;
 
finally
alpha.Free;
dib.Free;
end;
if PreviewMemo.Lines.Count > 0 then
btnFontAnimationStart.Click;
end;
 
procedure TDXGlueItEditor.btnABoldClick(Sender: TObject);
begin
if btnABold.Down then FFontStyles := FFontStyles + [fsBold]
else FFontStyles := FFontStyles - [fsBold]
end;
 
procedure TDXGlueItEditor.btnAItalicClick(Sender: TObject);
begin
if btnAItalic.Down then FFontStyles := FFontStyles + [fsItalic]
else FFontStyles := FFontStyles - [fsItalic]
end;
 
procedure TDXGlueItEditor.btnAUnderlineClick(Sender: TObject);
begin
if btnAUnderline.Down then FFontStyles := FFontStyles + [fsUnderline]
else FFontStyles := FFontStyles - [fsUnderline]
end;
 
procedure TDXGlueItEditor.PreviewTimerTimer(Sender: TObject; LagCount: Integer);
var i, x, y, j: Integer;
s: string;
begin
if not PreviewDraw.CanDraw then Exit;
 
PreviewDraw.Surface.Fill(PreviewDraw.Surface.ColorMatch(pnlBG.Color));
PreviewDraw.BeginScene;
PreviewDraw.Surface.FillRect(Bounds(0, 0, PreviewDraw.Width, PreviewDraw.Height), pnlBG.Color);
y := 5;
for i := 0 to PreviewMemo.Lines.Count - 1 do begin
s := PreviewMemo.Lines[i];
x := 5;
for j := 1 to Length(s) do begin
FontDXImageList.Items[0].Draw(PreviewDraw.Surface, x, y, Ord(s[j]));
x := x + sizesarr[Ord(s[j])];
end;
y := y + Zdvih;
end;
PreviewDraw.EndScene;
PreviewDraw.Flip;
end;
 
procedure TDXGlueItEditor.PreviewMemoChange(Sender: TObject);
begin
PreviewTimer.Enabled := PreviewMemo.Lines.Text <> '';
end;
 
procedure TDXGlueItEditor.btnFontAnimationStopClick(Sender: TObject);
begin
PreviewTimer.Enabled := False;
PreviewDraw.Surface.FillRect(Bounds(0, 0, PreviewDraw.Width, PreviewDraw.Height), pnlBG.Color);
PreviewDraw.Flip;
end;
 
procedure TDXGlueItEditor.btnFontAnimationStartClick(Sender: TObject);
begin
PreviewTimer.Enabled := True;
end;
 
procedure TDXGlueItEditor.RestructuralizeWithResize(NewWidth, NewHeight: Integer; TranspColor: TColor = clMaroon);
var
C: Double;
Rz: Integer;
Q: TPictureCollectionItem;
IMG: TBitmap;
DIB: TDIB;
I, X, Y, dX, dY: Integer;
DDS: TDirectDrawSurface;
begin
dX := DXImageList1.Items[0].PatternWidth;
dY := DXImageList1.Items[0].PatternHeight;
if NewWidth <> dX then dX := NewWidth;
if NewHeight <> dY then dY := NewHeight;
{target square}
C := Sqrt(DXImageList1.Items[0].PatternCount);
Rz := Trunc(C);
if Frac(C) > 0 then Inc(Rz);
{new picture};
IMG := TBitmap.Create; {glued picture}
DIB := TDIB.Create; {converted sub-image}
DDS := TDirectDrawSurface.Create(DXDraw1.DDraw); {dds}
DDS.SetSize(dX, dY);
{note: there occur error, when surface is not self, but nothing created}
{for this correct run has to set size as power two and must be remaps to mesh}
{or better simple turn off D3D acceleration}
{$IFDEF D3D_deprecated}
DXDraw1.Options := DXDraw1.Options - [do3d]; // dds may be any size
{$ENDIF}
try
IMG.Width := Rz * dX; {new size}
IMG.Height := Rz * dY;
IMG.PixelFormat := pf24bit; {implicit}
IMG.Canvas.Brush.Color := clMaroon; {fill it wit}
IMG.Canvas.FillRect(Bounds(0, 0, IMG.Width, IMG.Height)); {fill now}
{for all non restructuralized image}
for i := 0 to DXImageList1.Items[0].PatternCount - 1 do begin
{refill by transparent color as background}
DDS.Fill(DDS.ColorMatch(TranspColor));
{draw sub-image to dds}
DXImageList1.Items[0].Draw(DDS, 0, 0, i);
{convert to dib}
DIB.Assign(DDS);
{draw to new position}
X := (i mod Rz) * dX;
Y := (i div Rz) * dY;
IMG.Canvas.Draw(X, Y, DIB)
end;
{for preview}
Image1.Picture.Assign(IMG);
{to collection item}
Q := TPictureCollectionItem(DXImageList1.Items.Add);
Q.Picture.Assign(IMG);
Q.PatternWidth := dX;
Q.PatternHeight := dY;
Q.Name := DXImageList1.Items[0].Name; //it has to have name
Q.Transparent := DXImageList1.Items[0].Transparent;
Q.TransparentColor := DXImageList1.Items[0].TransparentColor;
{original image get out}
{$IFNDEF VER5UP}
DXImageList1.Items[0].Free;
{$ELSE}
DXImageList1.Items.Delete(0);
{$ENDIF}
{Indispensability restore}
DXImageList1.Items.Restore;
finally
{freeing resources}
IMG.Free;
DIB.Free;
DDS.Free;
{$IFDEF D3D_deprecated}
DXDraw1.Options := DXDraw1.Options + [do3d];
{$ENDIF}
end;
end;
 
procedure TDXGlueItEditor.btnReplaceClick(Sender: TObject);
begin
if DXImageList1.Items.Count > 0 then
if (ePatternWidth.AsInteger > 0) and (ePatternHeight.AsInteger > 0) then begin
{must be set subimage first}
if DXImageList1.Items[0].PatternWidth <> ePatternWidth.AsInteger then
DXImageList1.Items[0].PatternWidth := ePatternWidth.AsInteger;
if DXImageList1.Items[0].PatternHeight <> ePatternHeight.AsInteger then
DXImageList1.Items[0].PatternHeight := ePatternHeight.AsInteger;
 
DXImageList1.Items.Restore;
RestructuralizeWithResize(DXImageList1.Items[0].PatternWidth,
DXImageList1.Items[0].PatternHeight, panTColor.Color);
end
else
MessageDlg('Please set subimage size first!', mtConfirmation, [mbOK], 0);
end;
 
procedure TDXGlueItEditor.btnResizeClick(Sender: TObject);
begin
if DXImageList1.Items.Count > 0 then {contain image}
if (ePatternWidth.AsInteger > 0) and (ePatternHeight.AsInteger > 0) then begin
{must be set subimage first}
if DXImageList1.Items[0].PatternWidth <> ePatternWidth.AsInteger then
DXImageList1.Items[0].PatternWidth := ePatternWidth.AsInteger;
if DXImageList1.Items[0].PatternHeight <> ePatternHeight.AsInteger then
DXImageList1.Items[0].PatternHeight := ePatternHeight.AsInteger;
 
DXImageList1.Items.Restore;
RestructuralizeWithResize(ePatternWidth.AsInteger, ePatternHeight.AsInteger, panTColor.Color);
end
else
MessageDlg('Please set subimage size first!', mtConfirmation, [mbOK], 0);
end;
 
procedure TDXGlueItEditor.ActionList1Update(Action: TBasicAction;
var Handled: Boolean);
begin
btnAllChars.Enabled := Trim(memAlphabet.Lines.Text) = '';
acDeleteAll.Enabled := ListBox1.Items.Count > 0;
acDeleteOne.Enabled := ListBox1.ItemIndex <> -1;
acSaveToFile.Enabled := not Image1.Picture.Bitmap.Empty;
acGlueIt.Enabled := ListBox1.Items.Count > 0;
btnGetTransparentcolor.Enabled := not Image1.Picture.Bitmap.Empty;
end;
 
procedure TDXGlueItEditor.chbZoomOutClick(Sender: TObject);
begin
if (Sender as TCheckBox).Checked then Image1.OnMouseMove := Image1MouseMove
else Image1.OnMouseMove := nil;
end;
 
procedure TDXGlueItEditor.Image1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
Srect, Drect: TRect;
iWidth, iHeight, DmX, DmY: Integer;
iTmpX, iTmpY: Real;
C: TCanvas;
hDesktop: Hwnd;
dx, dy: Integer;
PP: TPoint;
begin
PP := Image1.ClientToScreen(Point(X, Y));
dx := PP.x;
dy := PP.y;
hDesktop := GetDesktopWindow;
 
iWidth := Image2.Width;
iHeight := Image2.Height;
Drect := Rect(0, 0, iWidth, iHeight);
iTmpX := iWidth / (Slider.Position * 4);
iTmpY := iHeight / (Slider.Position * 4);
Srect := Rect(dx, dy, dx, dy);
InflateRect(Srect, Round(iTmpX), Round(iTmpY));
 
if Srect.Left < 0 then OffsetRect(Srect, -Srect.Left, 0);
if Srect.Top < 0 then OffsetRect(Srect, 0, -Srect.Top);
if Srect.Right > Screen.Width then OffsetRect(Srect, -(Srect.Right - Screen.Width), 0);
if Srect.Bottom > Screen.Height then OffsetRect(Srect, 0, -(Srect.Bottom - Screen.Height));
 
C := TCanvas.Create;
try
C.Handle := GetDC(GetDesktopWindow);
Image2.Canvas.CopyRect(Drect, C, Srect);
finally
ReleaseDC(hDesktop, C.Handle);
C.Free;
end;
with Image2.Canvas do begin
DmX := Slider.Position * 2 * (dX - Srect.Left);
DmY := Slider.Position * 2 * (dY - Srect.Top);
MoveTo(DmX - (iWidth div 4), DmY); // -
LineTo(DmX + (iWidth div 4), DmY); // -
MoveTo(DmX, DmY - (iHeight div 4)); // |
LineTo(DmX, DmY + (iHeight div 4)); // |
end;
end;
 
procedure TDXGlueItEditor.mainPageControlChange(Sender: TObject);
begin
Image2.Visible := mainPageControl.ActivePage = tsPreview;
end;
 
procedure TDXGlueItEditor.SetOperationGlueIt(const Value: TOperationGlueIt);
begin
FOperationGlueIt := Value;
if FOperationGlueIt = ogiNew then
mainPageControl.ActivePage := tsGlueIt
else
mainPageControl.ActivePage := tsPreview;
end;
 
procedure TDXGlueItEditor.btnGetTransparentcolorClick(Sender: TObject);
begin
SelectionOfTransparentColor := (Sender as TSpeedButton).Down;
end;
 
procedure TDXGlueItEditor.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if SelectionOfTransparentColor then begin
panTColor.Color := Image1.Picture.Bitmap.Canvas.Pixels[X, Y];
btnGetTransparentcolor.Down := False;
SelectionOfTransparentColor := False;
end;
end;
 
procedure TDXGlueItEditor.acGetTransparentExecute(Sender: TObject);
begin
SelectionOfTransparentColor := (Sender as TSpeedButton).Down;
end;
 
procedure TDXGlueItEditor.chbForceSizeClick(Sender: TObject);
begin
EWidthOfImages.Enabled := chbForceSize.Checked;
LWidthOfImages.Enabled := chbForceSize.Checked;
EHeightOfImages.Enabled := chbForceSize.Checked;
LHeightOfImages.Enabled := chbForceSize.Checked;
chbCentered.Enabled := chbForceSize.Checked;
chbCrop.Enabled := chbForceSize.Checked;
end;
 
procedure TDXGlueItEditor.cbEffectsListChange(Sender: TObject);
begin
if cbEffectsList.ItemIndex <> -1 then
if Image1.Picture.Bitmap.Empty then begin
ShowMessage('Image has not to be empty for effects!');
cbEffectsList.ItemIndex := -1;
//tmpBitmap.Assign(Image1.Picture.Bitmap);
end;
end;
 
procedure TDXGlueItEditor.pbDurationMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if chbAutoAply.Checked then
if not Image1.Picture.Bitmap.Empty then begin
tmpPicture.Assign(Image1.Picture.Bitmap); //save default image
if not tmpPicture.Graphic.Empty then begin
DoBitmapEffect(tmpPicture);
Application.ProcessMessages;
end;
end;
end;
 
procedure TDXGlueItEditor.pbDurationMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if chbAutoAply.Checked then
if not Image1.Picture.Bitmap.Empty then
if (MessageDlg('Do you want make changes permanent?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
Image1.Picture.Bitmap.Assign(tmpPicture); //restore default image
end;
 
procedure TDXGlueItEditor.chbAutoAplyClick(Sender: TObject);
begin
btnApply.Enabled := not chbAutoAply.Checked;
end;
 
end.
/VCL_DELPHIX_D6/DXInptEdit.dfm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/VCL_DELPHIX_D6/DXMapEdit.dfm
0,0 → 1,298
object DelphiXMapEditForm: TDelphiXMapEditForm
Left = 320
Top = 226
Width = 618
Height = 442
Caption = 'Background Sprite Map Editor'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = True
Position = poScreenCenter
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object pnlRight: TPanel
Left = 467
Top = 0
Width = 143
Height = 408
Align = alRight
BevelOuter = bvNone
TabOrder = 0
object CancelButton: TButton
Left = 5
Top = 40
Width = 73
Height = 25
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 0
end
object DelphiXMapEditPropertiesPane: TPanel
Left = 0
Top = 72
Width = 138
Height = 267
BevelOuter = bvNone
BorderStyle = bsSingle
TabOrder = 1
end
object OKButton: TButton
Left = 5
Top = 8
Width = 73
Height = 25
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 2
OnClick = OKButtonClick
end
end
object pnlLeft: TPanel
Left = 0
Top = 0
Width = 467
Height = 408
Align = alClient
BevelOuter = bvNone
BorderWidth = 8
TabOrder = 1
object pblBase: TPanel
Left = 8
Top = 8
Width = 451
Height = 392
Align = alClient
BevelOuter = bvNone
BorderWidth = 4
BorderStyle = bsSingle
TabOrder = 0
object Panel1: TPanel
Left = 4
Top = 61
Width = 439
Height = 323
Align = alClient
BevelOuter = bvNone
BorderWidth = 1
Caption = 'Panel1'
TabOrder = 1
object Splitter1: TSplitter
Left = 114
Top = 1
Width = 3
Height = 321
Cursor = crHSplit
end
object PicturesToChip: TListBox
Left = 1
Top = 1
Width = 113
Height = 321
Align = alLeft
DragMode = dmAutomatic
ItemHeight = 16
PopupMenu = PopupMenu1
Style = lbOwnerDrawVariable
TabOrder = 0
Visible = False
OnDrawItem = PicturesToChipDrawItem
OnMeasureItem = PicturesToChipMeasureItem
end
object ScrollBox1: TScrollBox
Left = 117
Top = 1
Width = 321
Height = 321
Align = alClient
TabOrder = 1
object MapArea: TDrawGrid
Left = 1
Top = 1
Width = 165
Height = 165
TabStop = False
BorderStyle = bsNone
DefaultColWidth = 32
DefaultRowHeight = 32
FixedCols = 0
FixedRows = 0
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected]
PopupMenu = PopupMenu2
ScrollBars = ssNone
TabOrder = 0
Visible = False
OnDblClick = MapAreaDblClick
OnDragDrop = MapAreaDragDrop
OnDragOver = MapAreaDragOver
OnDrawCell = MapAreaDrawCell
OnMouseDown = MapAreaMouseDown
OnMouseMove = MapAreaMouseMove
end
end
end
object pnlLabels: TPanel
Left = 4
Top = 4
Width = 439
Height = 57
Align = alTop
BevelOuter = bvNone
TabOrder = 0
object BtnSetSize: TSpeedButton
Left = 413
Top = 3
Width = 21
Height = 46
Hint = 'Set up size.'
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00DDDDDDDDDDDD
DDDDDDDDDDDDDDD0DDDDDDDDDDDDDD080DDDDDDDDDDDD080DDDDDDDDDDDD080D
DDDDDDDDDDD080DDDDDDDDDDDD080DDDDDDDDDDDD080DDDDDDDDDDD0080DDDDD
DDDDDD0FF0DDDDDDDDDDDD0FF0DDDDDDDDDDDD0F0DDDDDDDDDDDDD00DDDDDDDD
DDDDDD0DDDDDDDDDDDDDDD0DDDDDDDDDDDDDDDDDDDDDDDDDDDDD}
ParentShowHint = False
ShowHint = True
OnClick = BtnSetSizeClick
end
object LAreaOfChips: TLabel
Left = 121
Top = 44
Width = 234
Height = 13
Caption = 'Area of Chips (doubleclick to properties change):'
FocusControl = ScrollBox1
Transparent = True
end
object LHeight: TLabel
Left = 288
Top = 31
Width = 46
Height = 13
Caption = 'Chip size:'
FocusControl = EHeight
end
object LImageToSet: TLabel
Left = 5
Top = 5
Width = 109
Height = 13
Caption = 'Image by name to set:'
FocusControl = ImageToSet
end
object LMapSizeX: TLabel
Left = 242
Top = 7
Width = 45
Height = 13
Caption = 'Map size:'
FocusControl = eMapSizeX
end
object LMapSizeY: TLabel
Left = 347
Top = 7
Width = 6
Height = 13
Caption = 'x'
FocusControl = eMapSizeY
end
object LPicturesToChip: TLabel
Left = 5
Top = 44
Width = 42
Height = 13
Caption = 'Pictures:'
FocusControl = PicturesToChip
end
object LWidth: TLabel
Left = 370
Top = 31
Width = 6
Height = 13
Caption = 'x'
FocusControl = EWidth
end
object EHeight: TEdit
Left = 334
Top = 28
Width = 32
Height = 21
TabOrder = 0
Text = '32'
end
object eMapSizeX: TSpinEdit
Left = 293
Top = 4
Width = 50
Height = 22
MaxValue = 128
MinValue = 1
TabOrder = 1
Value = 1
end
object eMapSizeY: TSpinEdit
Left = 360
Top = 4
Width = 50
Height = 22
MaxValue = 128
MinValue = 1
TabOrder = 2
Value = 1
end
object EWidth: TEdit
Left = 378
Top = 28
Width = 32
Height = 21
TabOrder = 3
Text = '32'
end
object ImageToSet: TComboBox
Left = 5
Top = 19
Width = 153
Height = 21
Style = csDropDownList
Enabled = False
ItemHeight = 13
TabOrder = 4
OnChange = ImageToSetChange
end
end
end
end
object PopupMenu1: TPopupMenu
OnPopup = PopupMenu1Popup
Left = 104
Top = 320
object Fillall1: TMenuItem
Caption = 'Fill all'
OnClick = Fillall1Click
end
end
object PopupMenu2: TPopupMenu
OnPopup = PopupMenu2Popup
Left = 256
Top = 200
object ClearOneChip1: TMenuItem
Caption = 'Clear One Chip'
OnClick = ClearOneChip1Click
end
object Clear1: TMenuItem
Caption = 'Clear All Chips'
GroupIndex = 1
OnClick = Clear1Click
end
end
end
/VCL_DELPHIX_D6/DXMapEdit.pas
0,0 → 1,522
unit DXMapEdit;
//(c)2007 Jaro Benes
//All Rights Reserved
 
{
Complex application for users of unDelphiX as component editor:
 
Supported:
a) create image map and store it into rersource.
b) allow do change.
c) controll map by each chip.
 
}
interface
{$INCLUDE DelphiXcfg.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, {$IFDEF VER4UP}ImgList,{$ENDIF}
Grids, Menus, DXMapEditProperties, Spin,
DXSprite, DXClass, DXDraws{$IfNDef StandardDX}, DirectX{$EndIf}, DIB;
 
type
{injected class}
 
{ TEdit }
 
TEdit = class(StdCtrls.TEdit)
private
function GetAsInteger: Integer;
procedure SetAsInteger(const Value: Integer);
published
public
property AsInteger: Integer read GetAsInteger write SetAsInteger;
end;
 
{ TDrawGrid }
// TDrawGrid = class(Grids.TDrawGrid)
// procedure CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
// procedure CMMouseLeave(var Msg: TMessage); message CM_MouseLeave;
// end;
 
{ TDelphiXMapEditForm }
 
TDelphiXMapEditForm = class(TForm)
pblBase: TPanel;
LHeight: TLabel;
LMapSizeX: TLabel;
LMapSizeY: TLabel;
EHeight: TEdit;
EWidth: TEdit;
eMapSizeX: TSpinEdit;
eMapSizeY: TSpinEdit;
OKButton: TButton;
CancelButton: TButton;
LWidth: TLabel;
ImageToSet: TComboBox;
LImageToSet: TLabel;
ScrollBox1: TScrollBox;
BtnSetSize: TSpeedButton;
PicturesToChip: TListBox;
LPicturesToChip: TLabel;
MapArea: TDrawGrid;
PopupMenu1: TPopupMenu;
Fillall1: TMenuItem;
PopupMenu2: TPopupMenu;
Clear1: TMenuItem;
LAreaOfChips: TLabel;
ClearOneChip1: TMenuItem;
DelphiXMapEditPropertiesPane: TPanel;
pnlRight: TPanel;
pnlLeft: TPanel;
pnlLabels: TPanel;
Panel1: TPanel;
Splitter1: TSplitter;
procedure OKButtonClick(Sender: TObject);
procedure MapAreaDblClick(Sender: TObject);
procedure ClearOneChip1Click(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
procedure PopupMenu2Popup(Sender: TObject);
procedure Clear1Click(Sender: TObject);
procedure Fillall1Click(Sender: TObject);
procedure MapAreaMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ImageToSetChange(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure PicturesToChipDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure PicturesToChipMeasureItem(Control: TWinControl; Index: Integer;
var Height: Integer);
procedure FormCreate(Sender: TObject);
procedure MapAreaDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure MapAreaDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure BtnSetSizeClick(Sender: TObject);
procedure MapAreaDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure MapAreaMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
DIB: TDIB;
maparea_X, maparea_Y: Integer;
pct: TDXPictureClip;
FocusPopUpPositionCol, FocusPopUpPositionRow: Integer;
DragPositionCol, DragPositionRow: Integer;
DelphiXMapEditPropertiesForm: TDelphiXMapEditPropertiesForm;
procedure MapTypeDefaultValuesByObject(out MapType: TMapType);
public
DXBackgroundSprite: TBackgroundSprite;
DXImageList: TCustomDXImageList; //instance only
function LoadSplittedImage(ClearContentOfMapArea: Boolean{$IFDEF VER4UP} = False{$ENDIF}): Boolean;
procedure ResizeMapArea;
end;
 
var
DelphiXMapEditForm: TDelphiXMapEditForm;
 
implementation
 
{$R *.dfm}
 
{ TEdit }
 
function TEdit.GetAsInteger: Integer;
begin
try
Result := StrToInt(Self.Text);
except
Result := 0;
end;
end;
 
procedure TEdit.SetAsInteger(const Value: Integer);
begin
Self.Text := IntToStr(Value)
end;
 
{ TDrawGrid }
 
//procedure TDrawGrid.CMMouseEnter(var Msg: TMessage);
//begin
//
//end;
//
//procedure TDrawGrid.CMMouseLeave(var Msg: TMessage);
//begin
//end;
 
//------------------------------------------------------------------------------
 
{TDelphiXMapEditForm}
 
procedure TDelphiXMapEditForm.MapAreaDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
DropPositionCol, DropPositionRow: Integer;
begin
MapArea.MouseToCell(X, Y, DropPositionCol, DropPositionRow); // convert mouse coord.
if Source is TListBox then begin
if Sender is TDrawGrid then
with Sender as TDrawGrid do begin
with DXBackgroundSprite do
Chips[DropPositionCol, DropPositionRow] := (Source as TListBox).ItemIndex;
Invalidate;
end;
end
else
if Source is TDrawGrid then begin
if Sender is TDrawGrid then
if (DropPositionCol <> DragPositionCol) or (DropPositionRow <> DragPositionRow) then
with Sender as TDrawGrid do begin
with DXBackgroundSprite do
Map[DropPositionCol, DropPositionRow] := Map[DragPositionCol, DragPositionRow];
Invalidate;
end;
end;
end;
 
procedure TDelphiXMapEditForm.MapAreaDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
var
CurrentCol, CurrentRow: Integer;
begin
MapArea.MouseToCell(X, Y, CurrentCol, CurrentRow); // convert mouse coord.
Accept := ((Source = PicturesToChip) or (Source = Sender))
{ Accept dragged stuff only when the mouse is now over an acceptable region }
and (CurrentCol >= 0) and (CurrentRow >= 0);
if Source = Sender then
MapArea.SetFocus;
end;
 
procedure TDelphiXMapEditForm.MapAreaDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
TmpRect: TRect;
A: array[1..255] of Char;
begin
with MapArea.Canvas do begin
FillRect(Rect);
if pct.IsEmpty then Exit;
with DXBackgroundSprite do begin
DIB.SetSize(pct.Width, pct.Height, 24);
pct.Draw(DIB.Canvas, 0, 0, Chips[ACol, ARow]);
if gdFocused in State then begin
DIB.DoDarkness(80);
end
else begin
if CollisionMap[ACol, ARow] then
DIB.Darker(50)
end;
if Map[ACol, ARow].MirrorFlip <> [] then DIB.Mirror(rmfMirror in Map[ACol, ARow].MirrorFlip, rmfFlip in Map[ACol, ARow].MirrorFlip);
Draw(Rect.Left, Rect.Top, DIB);
end;
if gdFocused in State then
begin
if goDrawFocusSelected in MapArea.Options then
Pen.Color := clHighlight
else
Pen.Color := MapArea.Color;
Brush.Style := bsClear;
{$IFDEF VER5UP}
Rectangle(Rect); InFlateRect(Rect, -1, -1); Rectangle(Rect);
{$ELSE}
Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); InFlateRect(Rect, -1, -1);Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
{$ENDIF}
end;
with DXBackgroundSprite do begin
Font.Name := 'Arial';
Font.Size := 9;
Font.Color := clHighlightText;
Brush.Style := bsClear;
TmpRect := Rect;
TmpRect.Bottom := TmpRect.Bottom - ((TmpRect.Bottom - TmpRect.Top) div 2);
if CollisionMap[ACol, ARow] then
DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'brick'), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
TmpRect := Rect;
TmpRect.Top := TmpRect.Bottom - ((TmpRect.Bottom - TmpRect.Top) div 2);
case Map[ACol, ARow].Rendered of
rtDraw: DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'D:' + IntToStr(Map[ACol, ARow].Alpha)), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
rtBlend: DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'B:' + IntToStr(Map[ACol, ARow].Alpha)), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
rtAdd: DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'A:' + IntToStr(Map[ACol, ARow].Alpha)), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
rtSub: DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'S:' + IntToStr(Map[ACol, ARow].Alpha)), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
end
end;
end;
end;
 
procedure TDelphiXMapEditForm.FormCreate(Sender: TObject);
begin
DelphiXMapEditPropertiesForm := TDelphiXMapEditPropertiesForm.Create(Self);
DelphiXMapEditPropertiesForm.Parent := DelphiXMapEditPropertiesPane;
DelphiXMapEditPropertiesForm.ParentWindow := Self.DelphiXMapEditPropertiesPane.Handle;
DelphiXMapEditPropertiesForm.Top := 0;
DelphiXMapEditPropertiesForm.Left := 0;
DelphiXMapEditPropertiesForm.BorderStyle := bsNone;
DelphiXMapEditPropertiesForm.Align := alClient;
{nothing selected}
FocusPopUpPositionCol := -1;
FocusPopUpPositionRow := -1;
DIB := TDIB.Create;
pct := TDXPictureClip.Create(nil);
{$IFDEF VER4UP}
MapArea.DoubleBuffered := True;
{$ENDIF}
end;
 
procedure TDelphiXMapEditForm.PicturesToChipMeasureItem(Control: TWinControl;
Index: Integer; var Height: Integer);
begin
Height := pct.Height;
end;
 
procedure TDelphiXMapEditForm.ResizeMapArea;
{$IFNDEF VER4UP}
type
TOldMap = array[0..0, 0..0] of TMapType;
POldMap = ^TOldMap;
{$ENDIF}
var
{$IFDEF VER4UP}
oldmap: array of array of TMapType;
{$ELSE}
oldmap: POldMap;
{$ENDIF}
i, j, oldw, oldh: Integer;
MapType: TMapType;
begin
{older size, save old layout}
oldw := DXBackgroundSprite.MapWidth;
oldh := DXBackgroundSprite.MapHeight;
{$IFDEF VER4UP}
SetLength(oldmap, oldw, oldh);
{$ELSE}
GetMem(oldmap, oldw * oldh * SizeOf(TMapType));
try
{$ENDIF}
{old the content of map}
if not DXBackgroundSprite.IsMapEmpty then
for i := 0 to oldw - 1 do
for j := 0 to oldh - 1 do
oldmap{$IFNDEF VER4UP}^{$ENDIF} [i, j] := DXBackgroundSprite.Map[i, j];
{size realocation}
with DXBackgroundSprite do begin
SetMapSize(eMapSizeX.Value, eMapSizeY.Value);
{prevent resize of cleared by the content object}
MapTypeDefaultValuesByObject(MapType);
for i := 0 to eMapSizeX.Value - 1 do
for j := 0 to eMapSizeY.Value - 1 do begin
Chips[i, j] := 0;
CollisionMap[i, j] := False;
Map[i, j] := MapType;
end;
end;
{back context}
for i := 0 to oldw - 1 do
for j := 0 to oldh - 1 do
DXBackgroundSprite.Map[i, j] := oldmap{$IFNDEF VER4UP}^{$ENDIF} [i, j];
{$IFNDEF VER4UP}
finally
FreeMem(oldmap)
end;
{$ENDIF}
MapArea.ColCount := eMapSizeX.Value;
MapArea.RowCount := eMapSizeY.Value;
MapArea.Width := eMapSizeX.Value * (EWidth.AsInteger + 1);
MapArea.Height := eMapSizeY.Value * (EHeight.AsInteger + 1);
MapArea.Invalidate;
end;
 
procedure TDelphiXMapEditForm.MapTypeDefaultValuesByObject(out MapType: TMapType);
begin
FillChar(MapType, SizeOf(MapType), 0);
{ default values from owner's object }
MapType.CollisionChip := DXBackgroundSprite.Collisioned;
MapType.Overlap := 0;
MapType.AnimLooped:= DXBackgroundSprite.AnimLooped;
MapType.AnimStart := DXBackgroundSprite.AnimStart;
MapType.AnimCount := DXBackgroundSprite.AnimCount;
MapType.AnimSpeed := DXBackgroundSprite.AnimSpeed;
MapType.Alpha := DXBackgroundSprite.Alpha;
MapType.Rendered := DXBackgroundSprite.BlendMode;
MapType.AnimPos := DXBackgroundSprite.AnimPos;
MapType.Angle := DXBackgroundSprite.Angle;
MapType.MirrorFlip := DXBackgroundSprite.MirrorFlip;
MapType.TextureFilter := DXBackgroundSprite.TextureFilter;
MapType.CenterX := DXBackgroundSprite.CenterX;
MapType.CenterY := DXBackgroundSprite.CenterY;
end;
 
procedure TDelphiXMapEditForm.BtnSetSizeClick(Sender: TObject);
begin
ResizeMapArea
end;
 
procedure TDelphiXMapEditForm.PicturesToChipDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
R: TRect;
I: Integer;
begin
with PicturesToChip.Canvas do begin
if not (odSelected in State) then
if Odd(Index) then Brush.Color := {$IFDEF VER6UP}clMoneyGreen{$ELSE}clGreen{$ENDIF}
else Brush.Color := clWhite;
FillRect(Rect);
pct.Draw(PicturesToChip.Canvas, Rect.Left, Rect.Top, Index);
Brush.Style := bsClear;
R := Rect;
R.Left := Rect.Left + pct.Width + 2;
I := Rect.Top + (Rect.Bottom - Rect.Top - PicturesToChip.Canvas.TextHeight(PicturesToChip.Items[index])) div 2;
TextOut(Rect.Left + pct.Width + 2, I, PicturesToChip.Items[index]);
end;
end;
 
procedure TDelphiXMapEditForm.FormDestroy(Sender: TObject);
begin
DIB.Free;
pct.Free;
end;
 
function TDelphiXMapEditForm.LoadSplittedImage(ClearContentOfMapArea: Boolean): Boolean;
var
I, V: Integer;
begin
if (ImageToSet.ItemIndex <> -1) and Assigned(DXImageList) then begin
DXImageList.Items[ImageToSet.ItemIndex].Restore;
pct.Picture := DXImageList.Items[ImageToSet.ItemIndex].Picture;
pct.Width := DXImageList.Items[ImageToSet.ItemIndex].PatternWidth;
pct.Height := DXImageList.Items[ImageToSet.ItemIndex].PatternHeight;
EWidth.AsInteger := pct.Width;
EHeight.AsInteger := pct.Height;
PicturesToChip.Clear;
V := DXImageList.Items[ImageToSet.ItemIndex].PatternCount;
for I := 0 to V - 1 do begin
PicturesToChip.Items.Add(Format(ImageToSet.Text + ' [%d]', [I]));
end;
PicturesToChip.ItemHeight := DXImageList.Items[ImageToSet.ItemIndex].PatternHeight;
{seznam je videt a take MapArea}
PicturesToChip.Visible := True;
{pri zmene obrazku vymazat content!}
if ClearContentOfMapArea then
Clear1.Click;
MapArea.Visible := True;
MapArea.Invalidate;
Result := True;
end
else
Result := False;
end;
 
procedure TDelphiXMapEditForm.ImageToSetChange(Sender: TObject);
begin
if ImageToSet.ItemIndex <> -1 then
begin
LoadSplittedImage(True);
end;
end;
 
procedure TDelphiXMapEditForm.MapAreaMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
{ Convert mouse coordinates X, Y to to StringGrid related col and row numbers }
MapArea.MouseToCell(X, Y, DragPositionCol, DragPositionRow);
{ Allow dragging only if an acceptable cell was clicked (cell beyond the fixed column and row) }
if (Button = mbLeft) and (DragPositionCol >= 0) and (DragPositionRow >= 0) then
begin
{ Begin dragging after mouse has moved 4 pixels }
MapArea.BeginDrag(False{$IFDEF VER4UP}, 2{$ENDIF});
end;
end;
 
procedure TDelphiXMapEditForm.MapAreaMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
FocusPositionCol, FocusPositionRow: Integer;
begin
maparea_X := X; maparea_Y := Y;
MapArea.MouseToCell(X, Y, FocusPositionCol, FocusPositionRow);
if not MapArea.Focused then
MapArea.SetFocus;
MapArea.Row := FocusPositionRow;
MapArea.Col := FocusPositionCol;
end;
 
procedure TDelphiXMapEditForm.Fillall1Click(Sender: TObject);
var
i, j: Integer;
begin
if PicturesToChip.ItemIndex <> -1 then
begin
with DXBackgroundSprite do
for i := 0 to MapArea.ColCount - 1 do
for j := 0 to MapArea.RowCount - 1 do
Chips[i, j] := PicturesToChip.ItemIndex;
MapArea.Invalidate;
end;
end;
 
procedure TDelphiXMapEditForm.Clear1Click(Sender: TObject);
var
i, j: Integer;
MapType: TMapType;
begin
MapTypeDefaultValuesByObject(MapType);
with DXBackgroundSprite do
for i := 0 to MapArea.ColCount - 1 do
for j := 0 to MapArea.RowCount - 1 do
begin
Chips[i, j] := 0;
CollisionMap[i, j] := False;
Map[i, j] := MapType;
end;
MapArea.Invalidate;
end;
 
procedure TDelphiXMapEditForm.PopupMenu2Popup(Sender: TObject);
var
Shift: TShiftState;
begin
Shift := [];
MouseMove(Shift, maparea_X, maparea_Y);
MapArea.MouseToCell(maparea_X, maparea_Y, FocusPopUpPositionCol, FocusPopUpPositionRow);
end;
 
procedure TDelphiXMapEditForm.PopupMenu1Popup(Sender: TObject);
begin
Fillall1.Enabled := PicturesToChip.ItemIndex <> -1;
end;
 
procedure TDelphiXMapEditForm.ClearOneChip1Click(Sender: TObject);
var
MapType: TMapType;
begin
MapTypeDefaultValuesByObject(MapType);
with DXBackgroundSprite do
begin
Map[MapArea.Col, MapArea.Row] := MapType;
end;
MapArea.Invalidate;
end;
 
procedure TDelphiXMapEditForm.MapAreaDblClick(Sender: TObject);
begin
{Reset the flag}
DelphiXMapEditPropertiesForm.Tag := 0;
DelphiXMapEditPropertiesForm.Panel2.Color := {$IFDEF VER6UP}clSkyBlue{$ELSE}clBlue{$ENDIF};
if not DelphiXMapEditPropertiesForm.Showing then
DelphiXMapEditPropertiesForm.Show;
Application.ProcessMessages;
DelphiXMapEditPropertiesForm.Col := MapArea.Col;
DelphiXMapEditPropertiesForm.Row := MapArea.Row;
DelphiXMapEditPropertiesForm.LoadCellToForm(DXBackgroundSprite.Map[MapArea.Col, MapArea.Row], MapArea.Col, MapArea.Row);
end;
 
procedure TDelphiXMapEditForm.OKButtonClick(Sender: TObject);
begin
if DelphiXMapEditPropertiesForm.Tag = 1 then
DelphiXMapEditPropertiesForm.btnOK.Click;
end;
 
end.
/VCL_DELPHIX_D6/DXMapEditProperties.dfm
0,0 → 1,221
object DelphiXMapEditPropertiesForm: TDelphiXMapEditPropertiesForm
Left = 575
Top = 327
BorderIcons = [biSystemMenu]
BorderStyle = bsToolWindow
Caption = 'Chip property'
ClientHeight = 265
ClientWidth = 131
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = True
Position = poDefault
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 0
Top = 0
Width = 131
Height = 265
Align = alClient
BevelOuter = bvNone
BorderWidth = 2
TabOrder = 0
object LAlpha: TLabel
Left = 10
Top = 193
Width = 74
Height = 13
Caption = 'Alpha (0..255):'
FocusControl = EAlpha
end
object LAnimCount: TLabel
Left = 21
Top = 106
Width = 63
Height = 13
Caption = 'Anim. Count:'
FocusControl = EAnimCount
end
object LAnimSpeed: TLabel
Left = 20
Top = 125
Width = 64
Height = 13
Caption = 'Anim. Speed:'
FocusControl = EAnimSpeed
end
object LAnimStart: TLabel
Left = 26
Top = 68
Width = 58
Height = 13
Caption = 'Anim. Start:'
FocusControl = EAnimStart
end
object LAnimPos: TLabel
Left = 33
Top = 87
Width = 51
Height = 13
Caption = 'Anim. Pos:'
FocusControl = EAnimPos
end
object EAlpha: TEdit
Left = 84
Top = 190
Width = 43
Height = 18
AutoSize = False
TabOrder = 0
Text = '255'
end
object EAnimCount: TEdit
Left = 84
Top = 103
Width = 43
Height = 18
AutoSize = False
TabOrder = 1
Text = '0'
end
object EAnimSpeed: TEdit
Left = 84
Top = 122
Width = 43
Height = 18
AutoSize = False
TabOrder = 2
Text = '0'
end
object EAnimStart: TEdit
Left = 84
Top = 65
Width = 43
Height = 18
AutoSize = False
TabOrder = 3
Text = '0'
end
object EAnimPos: TEdit
Left = 84
Top = 84
Width = 43
Height = 18
AutoSize = False
TabOrder = 4
Text = '0'
end
object Panel2: TPanel
Left = 2
Top = 2
Width = 127
Height = 23
Align = alTop
BevelOuter = bvLowered
BorderWidth = 2
Caption = 'Chip (%d,%d)'
Color = 16776176
TabOrder = 5
end
object chbCollisioned: TCheckBox
Left = 16
Top = 31
Width = 97
Height = 17
Caption = 'Collisioned Chip'
TabOrder = 6
end
object chbAnimated: TCheckBox
Left = 16
Top = 46
Width = 105
Height = 17
Caption = 'Animation On/Off'
TabOrder = 7
end
object rgBlendMode: TRadioGroup
Left = 3
Top = 141
Width = 124
Height = 47
Caption = ' Blend mode: '
Columns = 2
Items.Strings = (
'Draw'
'Blend'
'Add'
'Sub')
TabOrder = 8
end
object btnOK: TBitBtn
Left = 4
Top = 244
Width = 56
Height = 19
Caption = 'OK'
Default = True
TabOrder = 9
OnClick = btnOKClick
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000E0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
77007777777777777700777774F7777777007777444F777777007774444F7777
770077444F44F77777007444F7744F777700774F77774F7777007777777774F7
770077777777774F7700777777777774F7007777777777774700777777777777
7700}
Spacing = -1
end
object btnCancel: TBitBtn
Left = 68
Top = 244
Width = 56
Height = 19
Cancel = True
Caption = 'Cancel'
TabOrder = 10
Visible = False
OnClick = btnCancelClick
Glyph.Data = {
EE000000424DEE000000000000007600000028000000100000000F0000000100
0400000000007800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
777777777777777770F77770F7777777777777000F7777770F7777000F777770
F777777000F77700F7777777000F700F77777777700000F77777777777000F77
77777777700000F777777777000F70F77777770000F77700F77770000F777770
0F77700F7777777700F77777777777777777}
Spacing = -1
end
object GroupBox1: TGroupBox
Left = 3
Top = 208
Width = 124
Height = 33
Caption = ' Flip/Mirror: '
TabOrder = 11
object chbFlip: TCheckBox
Left = 8
Top = 13
Width = 38
Height = 17
Caption = 'Flip'
TabOrder = 0
end
object chbMirror: TCheckBox
Left = 56
Top = 13
Width = 57
Height = 17
Caption = 'Mirror'
TabOrder = 1
end
end
end
end
/VCL_DELPHIX_D6/DXMidiEdit.dfm
0,0 → 1,187
object DelphiXMidiEditForm: TDelphiXMidiEditForm
Left = 288
Top = 239
BorderStyle = bsDialog
Caption = 'Midi Editor'
ClientHeight = 226
ClientWidth = 346
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
Position = poScreenCenter
Scaled = False
OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object Bevel2: TBevel
Left = 8
Top = 8
Width = 249
Height = 209
Shape = bsFrame
end
object OKButton: TButton
Left = 264
Top = 8
Width = 73
Height = 25
Caption = 'OK'
Default = True
TabOrder = 0
OnClick = OKButtonClick
end
object CancelButton: TButton
Left = 264
Top = 40
Width = 73
Height = 25
Cancel = True
Caption = 'Cancel'
TabOrder = 1
OnClick = CancelButtonClick
end
object ClearButton: TButton
Left = 176
Top = 184
Width = 73
Height = 25
Caption = '&Clear'
TabOrder = 4
OnClick = ClearButtonClick
end
object SaveButton: TButton
Left = 96
Top = 184
Width = 73
Height = 25
Caption = '&Save...'
TabOrder = 3
OnClick = SaveButtonClick
end
object LoadButton: TButton
Left = 16
Top = 184
Width = 73
Height = 25
Caption = '&Load...'
TabOrder = 2
OnClick = LoadButtonClick
end
object Panel1: TPanel
Left = 16
Top = 16
Width = 233
Height = 161
BevelOuter = bvNone
BorderStyle = bsSingle
TabOrder = 5
object LengthLabel: TLabel
Left = 16
Top = 16
Width = 19
Height = 13
Caption = 'File:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object SizeLabel: TLabel
Left = 16
Top = 38
Width = 23
Height = 13
Caption = 'Size:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object filenamelabel: TLabel
Left = 72
Top = 16
Width = 42
Height = 13
Caption = 'Filename'
end
object SizeValueLabel: TLabel
Left = 72
Top = 38
Width = 20
Height = 13
Caption = 'Size'
end
end
object btnPlay: TBitBtn
Left = 111
Top = 128
Width = 25
Height = 25
TabOrder = 6
OnClick = btnPlayClick
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777777777777777777777777777777777777777077777777777777700077777
7777777700000777777777770000000777777777000000000777777700000007
7777777700000777777777770007777777777777077777777777777777777777
7777777777777777777777777777777777777777777777777777}
end
object btnStop: TBitBtn
Left = 136
Top = 128
Width = 25
Height = 25
TabOrder = 7
OnClick = btnStopClick
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777777777777777777777777777777777777777777777777777777700000000
7777777700000000777777770000000077777777000000007777777700000000
7777777700000000777777770000000077777777000000007777777777777777
7777777777777777777777777777777777777777777777777777}
end
object SaveDialog: TSaveDialog
DefaultExt = 'mid'
Filter = 'Midi (*.mid)|*.mid|All files (*.*)|*.*'
Options = [ofOverwritePrompt]
Title = 'Save MIDI file.'
Left = 312
Top = 80
end
object OpenDialog: TOpenDialog
DefaultExt = 'mid'
Filter = 'Midi (*.mid)|*.mid|All files (*.*)|*.*'
Options = [ofFileMustExist]
Title = 'Load MIDI file.'
Left = 280
Top = 80
end
object DXSound1: TDXSound
AutoInitialize = True
Options = []
Left = 272
Top = 120
end
object DXMusic1: TDXMusic
DXSound = DXSound1
Midis = <>
Left = 304
Top = 120
end
end
/VCL_DELPHIX_D6/DXMidiEdit.pas
0,0 → 1,192
unit DXMidiEdit;
//(c)2007 Jaro Benes
//All Rights Reserved
 
{
Complex application for users of unDelphiX as component editor:
 
Supported:
a) load existing midi file and store it into rersource.
b) allow do play.
 
}
interface
uses
Windows, SysUtils, Classes, Forms, Dialogs, Controls, StdCtrls, ExtCtrls,
Buttons, ComCtrls, Graphics, DXSounds;
 
type
 
{ TDelphiXWaveEditForm }
 
TDelphiXMidiEditForm = class(TForm)
Bevel2: TBevel;
OKButton: TButton;
CancelButton: TButton;
SaveDialog: TSaveDialog;
OpenDialog: TOpenDialog;
ClearButton: TButton;
SaveButton: TButton;
LoadButton: TButton;
Panel1: TPanel;
LengthLabel: TLabel;
SizeLabel: TLabel;
filenamelabel: TLabel;
SizeValueLabel: TLabel;
DXSound1: TDXSound;
DXMusic1: TDXMusic;
btnPlay: TBitBtn;
btnStop: TBitBtn;
procedure btnStopClick(Sender: TObject);
procedure btnPlayClick(Sender: TObject);
procedure OKButtonClick(Sender: TObject);
procedure CancelButtonClick(Sender: TObject);
procedure LoadButtonClick(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure ClearButtonClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FChanged: Boolean;
FMidiFileName: string;
FPlaying: Boolean;
T: TMusicListCollectionItem;
procedure UpDateData;
procedure SetPlaying(const Value: Boolean);
public
MidiData: string;
property MidiFileName: string read FMidiFileName write FMidiFileName;
property Playing: Boolean read FPlaying write SetPlaying;
end;
 
var
DelphiXMidiEditForm: TDelphiXMidiEditForm;
 
implementation
 
uses DXConsts;
 
{$R *.DFM}
 
procedure TDelphiXMidiEditForm.FormDestroy(Sender: TObject);
begin
if Playing then T.Stop;
end;
 
procedure TDelphiXMidiEditForm.FormShow(Sender: TObject);
begin
if Length(MidiData) <> 0 then begin
T := DXMusic1.Midis.Add;
T.Midi.MusicData := MidiData;
// if FileExists(MidiFileName) then
// T.LoadFromFile(MidiFileName);
end;
filenamelabel.Caption := MidiFileName;
SizeValueLabel.Caption := Format('%d bytes', [Length(MidiData)]);
UpDateData;
end;
 
procedure TDelphiXMidiEditForm.OKButtonClick(Sender: TObject);
begin
if FChanged then
begin
Tag := 1;
end;
Close;
end;
 
procedure TDelphiXMidiEditForm.CancelButtonClick(Sender: TObject);
begin
Close;
end;
 
procedure TDelphiXMidiEditForm.ClearButtonClick(Sender: TObject);
begin
if Playing then Playing := False;
SetLength(MidiData, 0);
MidiFileName := '';
filenamelabel.Caption := '';
SizeValueLabel.Caption := '';
DXMusic1.Midis.Clear;
FChanged := True;
UpdateData;
end;
 
procedure TDelphiXMidiEditForm.LoadButtonClick(Sender: TObject);
begin
if OpenDialog.Execute then
begin
if Playing then Playing := False;
MidiFileName := OpenDialog.FileName;
filenamelabel.Caption := ExtractFileName(MidiFileName);
T := DXMusic1.Midis.Add;
T.LoadFromFile(MidiFileName);
MidiData := T.Midi.MusicData;
SizeValueLabel.Caption := Format('%d bytes', [T.Size]);
FChanged := True;
UpdateData;
end;
end;
 
procedure TDelphiXMidiEditForm.SaveButtonClick(Sender: TObject);
var
F: file;
begin
if SaveDialog.Execute then
begin
if Playing then Playing := False;
if Length(MidiData) = 0 then Exit;
if FChanged then
begin
if AnsiCompareFileName(MidiFileName, SaveDialog.FileName)=0 then Exit;
end;
AssignFile(F, SaveDialog.FileName);
Rewrite(F,1);
try
BlockWrite(F, MidiData[1], Length(MidiData));
finally
CloseFile(F);
end;
end;
end;
 
procedure TDelphiXMidiEditForm.UpDateData;
begin
if Length(mididata) > 0 then begin
SaveButton.Enabled := True;
ClearButton.Enabled := True;
btnPlay.Enabled := True;
end
else begin
SaveButton.Enabled := False;
ClearButton.Enabled := False;
btnPlay.Enabled := false;
end
end;
 
procedure TDelphiXMidiEditForm.FormCreate(Sender: TObject);
begin
Tag := 0;
FPlaying := False;
end;
 
procedure TDelphiXMidiEditForm.SetPlaying(const Value: Boolean);
begin
if not Value then T.Stop;
FPlaying := Value;
end;
 
procedure TDelphiXMidiEditForm.btnPlayClick(Sender: TObject);
begin
FPlaying := True;
T.Play;
end;
 
procedure TDelphiXMidiEditForm.btnStopClick(Sender: TObject);
begin
if Playing then Playing := False;
end;
 
end.
/VCL_DELPHIX_D6/DXMisc.pas
0,0 → 1,409
unit DXMisc;
 
// Contains miscellaneous code
 
interface
 
uses classes, controls;
 
type
// This obtains the co-ords for the mouse relative to a control
TMousePos = class(Tobject)
private
{ Private declarations }
// Data
fControl: TControl;
 
fMouseX: integer;
fMouseY: integer;
fXDelta: integer;
fYDelta: integer;
// used to scale the mouse input
fSensitivity: Single;
// Options
fClipToControl: boolean;
protected
{ Protected declarations }
procedure SetClipState(Value: boolean);
public
{ Public declarations }
constructor Create(Control: TControl);
destructor Destroy; override;
// Sets the control to use
procedure SetControl(AControl: TControl);
// Grabs the latest mouse co-ords
procedure Update;
// Relative to the parent control
property MouseX: integer read fMouseX;
property MouseY: integer read fMouseY;
property XDelta: integer read fXDelta;
property YDelta: integer read fYDelta;
// The sensitivity of the mouse
property Sensitivity: Single read fSensitivity write fSensitivity;
property ClipToControl: Boolean read fClipToControl write SetClipState;
 
property Control: TControl read fControl write SetControl;
published
{ Published declarations }
end;
 
// This is an example of how to cap the frame rate
// this has NOT been optimized and is just to hide the relatively
// mess code needed to properly calc the time delta for a frame
// and the time delta since the last render
TTiming = class(TObject)
protected
{ Protected declarations }
// Used to implement frame capping
fGraphicsTimeDelta: longword;
LastTimeFrame: longword;
// the number of ms each frame has in its budget
FrameRateBudget: longword; // this is just for the graphics system
// see the properties section
fTimeDelta: longword;
 
TimeFrame: longword;
fFrameRate: longword;
fFrameRateGoal: longword;
 
fNoGraphics: boolean;
// sets up various timing stuff
procedure InitTiming(FrameRate: longword);
public
{ Public declarations }
constructor Create(AFrameRateGoal: longword);
// Calculates the time delta from the last frame
procedure CalcNewTimeDelta;
// Checks if the designated time till the next render has passed
function TimeToRender: boolean;
// Prepares internal info for the next frame
procedure UpdateGraphicsTimeDelta;
procedure CalcFrameRate;
 
property GraphicsTimeDelta: longword read fGraphicsTimeDelta;
// used to determine how much time has elapsed from the last frame in ms
property TimeDelta: longword read fTimeDelta;
// The timestamp for the current frame
property FrameStamp: longword read TimeFrame;
// The frame rate that is being achieved
property FrameRate: longword read fFrameRate;
// The goal frame rate for the frame skipping mechanism
// This also Limits the frame rate to this to
property FrameRateGoal: longword read fFrameRateGoal write InitTiming;
 
// TimeTorender always returns false, used to disable graphics stuff
property NoGraphics: boolean read fNoGraphics write fNoGraphics;
end;
 
TStateMachine = class;
 
TState = class(TObject) // a state aware class
private
fStateIndex: integer;
fStateMachine: TStateMachine;
public
constructor Create; virtual;
 
procedure Execute; virtual; abstract;
property StateIndex: integer read fStateIndex;
property StateMachine: TStateMachine read fStateMachine;
end;
 
// This is a state machine which removes the need for large case statements when executing the current state
TStateMachine = class(TObject)
private
{ Private declarations }
protected
{ Protected declarations }
// Holds a list of the valid states
fStatesList: Tlist;
// the number of states
fStates: integer;
// The max number of allowed states
fMaxStates: integer;
// The current state
fCurrentState: TState;
// Function GetState(index :integer) : TState; virtual;
public
{ Public declarations }
constructor Create;
destructor Destroy; override;
// This registers a state, if the state exists then it is updated
// Dont pass < 0 as the state constant
procedure AddState(State: TState); virtual;
// This removes a registerd state
procedure RemoveState(State: TState); virtual;
// This clears all the states
procedure ClearStates; virtual;
 
// allows easy state changes
procedure ActivateNextState; virtual;
// The current state's id
property CurrentState: TState read fCurrentState write fCurrentState;
 
// The Number of valid states
property States: integer read fStates;
property MaxStates: integer read fMaxStates write fMaxStates;
{
// Allows direct access to the states of an object
Property StateList[index :integer] : TState read GetState;
}
property StateList: Tlist read fStatesList;
end;
const
// This is the default strating number of states the TStateMachine will allocate
StartStates = 16; // This is also what it allocates when it tries to add a new state
MaxNumStates = 255; // this is the max number of states allowed. Why would you want more :)
 
// Scans a Component and the components owned by the Component for a Component of the class type 'Classtype'
function FindComponentType(Aowner: TComponent; Classtype: TComponentClass): TComponent;
 
implementation
 
uses windows, Sysutils, mmsystem;
 
function FindComponentType(Aowner: TComponent; Classtype: TComponentClass): TComponent;
var
index: integer;
begin
if not assigned(AOwner) then
begin
result := nil;
exit;
end;
if AOwner is Classtype then
begin
result := AOwner;
end
else
begin
// For some reason, when in the designer AOwner.ComponentIndex = -1!
// thus this search algo would failed in designer mode
for index := 0 to AOwner.ComponentCount - 1 do
begin
if AOwner.Components[index] is Classtype then
begin
result := AOwner.Components[index];
exit;
end;
end;
result := nil;
end;
end;
 
// -----------------------------------------------------------------------------
// TTiming
// -----------------------------------------------------------------------------
 
constructor TTiming.Create(AFrameRateGoal: longword);
begin
inherited create;
FrameRateGoal := AFrameRateGoal;
InitTiming(FrameRateGoal);
end; {TTiming}
 
procedure TTiming.InitTiming(FrameRate: longword);
begin
fFrameRateGoal := FrameRate;
FrameRateBudget := 1000 div fFrameRateGoal;
fGraphicsTimeDelta := 0;
fTimeDelta := 0;
TimeFrame := timegettime;
LastTimeFrame := TimeFrame;
end; {InitTiming}
 
procedure TTiming.CalcNewTimeDelta;
var
NewTimeFrame: Longword;
begin
// update the time delta & time frame stamps
NewTimeFrame := TimeGetTime;
fTimeDelta := NewTimeFrame - TimeFrame;
TimeFrame := NewTimeFrame;
end; {CalcNewTimeDelta}
 
procedure TTiming.UpdateGraphicsTimeDelta;
begin
// get how long it took to render the frame
LastTimeFrame := timegettime;
fGraphicsTimeDelta := 0;
end;
 
procedure TTiming.CalcFrameRate;
begin
if GraphicsTimeDelta <> 0 then
fFrameRate := 1000 div GraphicsTimeDelta
else
fFrameRate := 0;
end; {CalcFrameRate}
 
function TTiming.TimeToRender: boolean;
begin
// Check to see if we can update the screen
fGraphicsTimeDelta := Timegettime - LastTimeFrame;
result := (GraphicsTimeDelta >= FrameRateBudget) and (not fNoGraphics);
end; {TimeToRender}
 
// -----------------------------------------------------------------------------
// TMousePos
// -----------------------------------------------------------------------------
 
constructor TMousePos.Create(Control: TControl);
begin
inherited Create;
if not assigned(Control) then
raise Exception.Create('Parent can''''t = nil');
fSensitivity := 1.0;
fClipToControl := true;
SetControl(Control);
end; {Create}
 
destructor TMousePos.Destroy;
begin
SetControl(nil);
inherited;
end; {Destroy}
 
procedure TMousePos.SetControl(AControl: TControl);
begin
assert(self <> nil);
if assigned(AControl) then
begin
fControl := AControl;
// This gets the intitial value
Update;
// This gets the correct mouse X,Y deltas
Update;
end
else
begin
fControl := nil;
end;
end; {SetControl}
 
procedure TMousePos.SetClipState(Value: boolean);
begin
if fClipToControl <> value then
begin
fClipToControl := Value;
// Re-obtain the co-ords with the correct option
Update;
end;
end; {SetClipState}
 
procedure TMousePos.Update;
var
pos: TPoint;
begin
// Get the latest mouse info
pos := mouse.CursorPos;
// Convert them to relative to the Control
pos := fControl.ScreenToClient(pos);
if fClipToControl then
begin
if pos.x >= fControl.width then
pos.x := fControl.width - 1
else if pos.x < 0 then
pos.x := 0;
if pos.Y >= fControl.Height then
pos.Y := fControl.Height - 1
else if pos.Y < 0 then
pos.Y := 0;
end;
// Update the mouse delta's
// fmouse? = old mouse pos
// pos.? = new mouse pos
fXDelta := pos.X - fMouseX;
fYDelta := pos.Y - fMouseY;
// Scale the mouse co-ords
if fSensitivity - 1.0 > 0.00001 then
begin
fMouseX := fMouseX + Trunc(fXDelta * fSensitivity);
fMouseY := fMouseY + Trunc(fYDelta * fSensitivity);
end
else
begin
fMouseX := pos.X;
fMouseY := pos.Y;
end;
end; {Update}
 
// -----------------------------------------------------------------------------
// TStateMachine
// -----------------------------------------------------------------------------
 
constructor TStateMachine.Create;
begin
inherited;
fMaxStates := MaxNumStates;
fStatesList := Tlist.create;
end; {Create}
 
destructor TStateMachine.Destroy;
begin
ClearStates;
fStatesList.free;
inherited;
end; {Destroy}
 
procedure TStateMachine.AddState(State: TState);
begin
if (fStatesList.IndexOf(State) = -1) and
(fStates < MaxStates) then
begin
State.fStateIndex := fStatesList.add(State);
State.fStateMachine := self;
if fCurrentState = nil then
fCurrentState := state;
inc(fStates);
end;
end; {AddState}
 
procedure TStateMachine.RemoveState(State: TState);
var
index: integer;
begin
index := fStatesList.IndexOf(State);
if (index <> -1) then
begin
if fCurrentState = state then
fCurrentState := nil;
fStatesList.Delete(index);
Dec(fStates);
end;
end; {RemoveState}
 
procedure TStateMachine.ClearStates;
var
state: Tstate;
begin
while fStatesList.count <> 0 do
begin
state := fStatesList.Items[fStatesList.count - 1];
state.free;
fStatesList.Delete(fStatesList.count - 1);
end;
end; {ClearStates}
 
procedure TStateMachine.ActivateNextState;
var
index: integer;
begin
if fStatesList.count = 0 then
exit;
if fCurrentState = nil then
fCurrentState := fStatesList[0];
index := fCurrentState.StateIndex;
inc(index);
if index >= fStatesList.count - 1 then
index := 0;
fCurrentState := Tstate(fStatesList[index]);
end; {ActivateNextState}
 
constructor Tstate.Create;
begin
inherited Create;
end; {Create}
 
end.
/VCL_DELPHIX_D6/DXSpriteEdit.dfm
0,0 → 1,441
object DelphiXSpriteEditForm: TDelphiXSpriteEditForm
Left = 309
Top = 201
BorderStyle = bsDialog
Caption = 'Sprite Init Editor'
ClientHeight = 373
ClientWidth = 370
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
Position = poScreenCenter
Scaled = False
PixelsPerInch = 96
TextHeight = 13
object Bevel2: TBevel
Left = 8
Top = 8
Width = 273
Height = 361
Shape = bsFrame
end
object OKButton: TButton
Left = 288
Top = 8
Width = 73
Height = 25
Caption = 'OK'
Default = True
TabOrder = 0
OnClick = OKButtonClick
end
object CancelButton: TButton
Left = 288
Top = 40
Width = 73
Height = 25
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
object ClearButton: TButton
Left = 288
Top = 344
Width = 73
Height = 25
Caption = '&Clear'
TabOrder = 2
Visible = False
end
object Panel1: TPanel
Left = 16
Top = 16
Width = 257
Height = 345
BevelOuter = bvNone
BorderStyle = bsSingle
TabOrder = 3
object LAlpha: TLabel
Left = 8
Top = 74
Width = 69
Height = 13
Caption = 'Alpha (0..255):'
FocusControl = EAlpha
end
object LAngle: TLabel
Left = 8
Top = 98
Width = 69
Height = 13
Caption = 'Angle (0..255):'
FocusControl = EAngle
end
object LAnimCount: TLabel
Left = 23
Top = 122
Width = 54
Height = 13
Caption = 'AnimCount:'
FocusControl = EAnimCount
end
object LAnimPos: TLabel
Left = 33
Top = 170
Width = 44
Height = 13
Caption = 'AnimPos:'
FocusControl = EAnimPos
end
object LAnimSpeed: TLabel
Left = 20
Top = 194
Width = 57
Height = 13
Caption = 'AnimSpeed:'
FocusControl = EAnimSpeed
end
object LAnimStart: TLabel
Left = 29
Top = 218
Width = 48
Height = 13
Caption = 'AnimStart:'
FocusControl = EAnimStart
end
object LHeight: TLabel
Left = 43
Top = 242
Width = 34
Height = 13
Caption = 'Height:'
FocusControl = EHeight
end
object LMapHeight: TLabel
Left = 142
Top = 99
Width = 55
Height = 13
Caption = 'MapHeight:'
FocusControl = EMapHeight
end
object LMapWidth: TLabel
Left = 145
Top = 123
Width = 52
Height = 13
Caption = 'MapWidth:'
FocusControl = EMapWidth
end
object LWidth: TLabel
Left = 46
Top = 266
Width = 31
Height = 13
Caption = 'Width:'
FocusControl = EWidth
end
object LX: TLabel
Left = 187
Top = 267
Width = 10
Height = 13
Caption = 'X:'
FocusControl = EX
end
object LY: TLabel
Left = 187
Top = 291
Width = 10
Height = 13
Caption = 'Y:'
FocusControl = EY
end
object LZ: TLabel
Left = 187
Top = 315
Width = 10
Height = 13
Caption = 'Z:'
FocusControl = EZ
end
object Label1: TLabel
Left = 18
Top = 50
Width = 59
Height = 13
Caption = 'Blend mode:'
FocusControl = EBlendMode
end
object Label2: TLabel
Left = 8
Top = 6
Width = 83
Height = 13
Caption = 'Available Images:'
FocusControl = eImage
end
object Label3: TLabel
Left = 156
Top = 51
Width = 41
Height = 13
Caption = 'CenterX:'
FocusControl = ECenterX
end
object Label4: TLabel
Left = 156
Top = 75
Width = 41
Height = 13
Caption = 'CenterY:'
FocusControl = ECenterY
end
object Label5: TLabel
Left = 16
Top = 315
Width = 61
Height = 13
Caption = 'Texture filter:'
FocusControl = ETexFilter
end
object EAlpha: TEdit
Left = 80
Top = 71
Width = 48
Height = 21
TabOrder = 3
Text = '255'
end
object EAngle: TEdit
Left = 80
Top = 95
Width = 48
Height = 21
TabOrder = 4
Text = '0'
end
object EAnimCount: TEdit
Left = 80
Top = 119
Width = 48
Height = 21
TabOrder = 5
Text = '0'
end
object EAnimPos: TEdit
Left = 80
Top = 167
Width = 48
Height = 21
TabOrder = 7
Text = '0'
end
object EAnimSpeed: TEdit
Left = 80
Top = 191
Width = 48
Height = 21
TabOrder = 8
Text = '0'
end
object EAnimStart: TEdit
Left = 80
Top = 215
Width = 48
Height = 21
TabOrder = 9
Text = '0'
end
object EHeight: TEdit
Left = 80
Top = 239
Width = 48
Height = 21
TabOrder = 10
Text = '0'
end
object EMapHeight: TEdit
Left = 200
Top = 96
Width = 48
Height = 21
TabOrder = 15
Text = '0'
end
object EMapWidth: TEdit
Left = 200
Top = 120
Width = 48
Height = 21
TabOrder = 16
Text = '0'
end
object EWidth: TEdit
Left = 80
Top = 263
Width = 48
Height = 21
TabOrder = 11
Text = '0'
end
object EX: TEdit
Left = 200
Top = 264
Width = 48
Height = 21
TabOrder = 22
Text = '0'
end
object EY: TEdit
Left = 200
Top = 288
Width = 48
Height = 21
TabOrder = 23
Text = '0'
end
object EZ: TEdit
Left = 200
Top = 312
Width = 48
Height = 21
TabOrder = 24
Text = '0'
end
object EBlendMode: TComboBox
Left = 80
Top = 47
Width = 72
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 2
Items.Strings = (
'Draw'
'Blend'
'Add'
'Sub')
end
object eImage: TComboBox
Left = 8
Top = 22
Width = 153
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 0
OnChange = eImageChange
OnExit = eImageExit
end
object ECenterX: TEdit
Left = 200
Top = 48
Width = 48
Height = 21
TabOrder = 13
Text = '0'
end
object ECenterY: TEdit
Left = 200
Top = 72
Width = 48
Height = 21
TabOrder = 14
Text = '0'
end
object chbBlurImage: TCheckBox
Left = 59
Top = 288
Width = 69
Height = 17
Alignment = taLeftJustify
Caption = 'Blur Image'
TabOrder = 12
end
object chbAnimLooped: TCheckBox
Left = 48
Top = 144
Width = 80
Height = 17
Alignment = taLeftJustify
Caption = 'AnimLooped'
TabOrder = 6
end
object chbMoved: TCheckBox
Left = 194
Top = 144
Width = 54
Height = 17
Alignment = taLeftJustify
Caption = 'Moved'
TabOrder = 17
end
object chbCollisioned: TCheckBox
Left = 177
Top = 168
Width = 71
Height = 17
Alignment = taLeftJustify
Caption = 'Collisioned'
TabOrder = 18
end
object chbPixelCheck: TCheckBox
Left = 175
Top = 192
Width = 73
Height = 17
Alignment = taLeftJustify
Caption = 'PixelCheck'
TabOrder = 19
end
object chbTile: TCheckBox
Left = 209
Top = 216
Width = 39
Height = 17
Alignment = taLeftJustify
Caption = 'Tile'
TabOrder = 20
end
object chbVisible: TCheckBox
Left = 196
Top = 240
Width = 52
Height = 17
Alignment = taLeftJustify
Caption = 'Visible'
TabOrder = 21
end
object btnMapEdit: TButton
Left = 173
Top = 13
Width = 75
Height = 25
Caption = 'Map Edit'
Enabled = False
TabOrder = 1
OnClick = MapEditButtonClick
end
object ETexFilter: TComboBox
Left = 80
Top = 312
Width = 89
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 25
Items.Strings = (
'POINT'
'LINEAR'
'FLATCUBIC'
'GAUSSIANCUBIC'
'ANISOTROPIC')
end
end
end
/VCL_DELPHIX_D6/DXWave.pas
0,0 → 1,726
unit DXWave;
 
interface
 
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, SysUtils, Classes, MMSystem;
 
type
 
{ EWaveError }
 
EWaveError = class(Exception);
 
{ TWave }
 
TWave = class(TPersistent)
private
FData: Pointer;
FFormat: PWaveFormatEx;
FFormatSize: Integer;
FSize: Integer;
procedure SetFormatSize(Value: Integer);
procedure SetSize(Value: Integer);
protected
procedure DefineProperties(Filer: TFiler); override;
procedure ReadData(Stream: TStream); virtual;
procedure WriteData(Stream: TStream); virtual;
public
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
procedure Clear;
procedure LoadFromFile(const FileName : string);
procedure LoadFromStream(Stream: TStream);
procedure SaveToFile(const FileName : string);
procedure SaveToStream(Stream: TStream);
procedure SetPCMFormat(SamplesPerSec, BitsPerSample, Channels: Integer);
property Data: Pointer read FData;
property Format: PWaveFormatEx read FFormat;
property FormatSize: Integer read FFormatSize write SetFormatSize;
property Size: Integer read FSize write SetSize;
end;
 
{ TCustomDXWave }
 
TCustomDXWave = class(TComponent)
private
FWave: TWave;
procedure SetWave(Value: TWave);
public
constructor Create(AOnwer: TComponent); override;
destructor Destroy; override;
property Wave: TWave read FWave write SetWave;
end;
 
{ TDXWave }
 
TDXWave = class(TCustomDXWave)
published
property Wave;
end;
 
{ EWaveStreamError }
 
EWaveStreamError = class(Exception);
 
{ TCustomWaveStream }
 
TCustomWaveStream = class(TStream)
private
FPosition: Integer;
protected
function GetFilledSize: Integer; virtual;
function GetFormat: PWaveFormatEx; virtual; abstract;
function GetFormatSize: Integer; virtual;
function GetSize: Integer; {$IFDEF VER5UP} reintroduce;{$ENDIF} virtual;
function ReadWave(var Buffer; Count: Integer): Integer; virtual;
procedure SetFormatSize(Value: Integer); virtual; abstract;
procedure SetSize(Value: Integer); override;
function WriteWave(const Buffer; Count: Integer): Integer; virtual;
public
function Read(var Buffer; Count: Longint): Longint; override;
function Seek(Offset: Longint; Origin: Word): Longint; override;
function Write(const Buffer; Count: Longint): Longint; override;
procedure SetPCMFormat(SamplesPerSec, BitsPerSample, Channels: Integer);
property FilledSize: Integer read GetFilledSize;
property Format: PWaveFormatEx read GetFormat;
property FormatSize: Integer read GetFormatSize write SetFormatSize;
property Size: Integer read GetSize write SetSize;
end;
 
{ TCustomWaveStream2 }
 
TCustomWaveStream2 = class(TCustomWaveStream)
private
FFormat: PWaveFormatEx;
FFormatSize: Integer;
protected
function GetFormat: PWaveFormatEx; override;
function GetFormatSize: Integer; override;
procedure SetFormatSize(Value: Integer); override;
public
destructor Destroy; override;
end;
 
{ TWaveObjectStream }
 
TWaveObjectStream = class(TCustomWaveStream)
private
FWave: TWave;
protected
function GetFormat: PWaveFormatEx; override;
function GetFormatSize: Integer; override;
function GetSize: Integer; override;
function ReadWave(var Buffer; Count: Integer): Integer; override;
procedure SetFormatSize(Value: Integer); override;
procedure SetSize(Value: Integer); override;
function WriteWave(const Buffer; Count: Integer): Integer; override;
public
constructor Create(AWave: TWave);
end;
 
{ TWaveStream }
 
TWaveStream = class(TCustomWaveStream2)
private
FDataPosition: Integer;
FDataHeaderPosition: Integer;
FOpened: Boolean;
FOriPosition: Integer;
FReadMode: Boolean;
FSize: Integer;
FStream: TStream;
procedure CloseWriteMode;
procedure OpenReadMode;
procedure OpenWriteMode;
protected
function GetSize: Integer; override;
function ReadWave(var Buffer; Count: Integer): Integer; override;
function WriteWave(const Buffer; Count: Integer): Integer; override;
public
constructor Create(AStream: TStream);
destructor Destroy; override;
procedure Open(WriteMode: Boolean);
end;
 
{ TWaveFileStream }
 
TWaveFileStream = class(TWaveStream)
private
FFileStream: TFileStream;
public
constructor Create(const FileName: string; FileMode: Integer);
destructor Destroy; override;
end;
 
procedure MakePCMWaveFormatEx(var Format: TWaveFormatEx;
SamplesPerSec, BitsPerSample, Channels: Integer);
 
implementation
 
uses DXConsts;
 
procedure MakePCMWaveFormatEx(var Format: TWaveFormatEx;
SamplesPerSec, BitsPerSample, Channels: Integer);
begin
with Format do
begin
wFormatTag := WAVE_FORMAT_PCM;
nChannels := Channels;
nSamplesPerSec := SamplesPerSec;
wBitsPerSample := BitsPerSample;
nBlockAlign := nChannels*(wBitsPerSample div 8);
nAvgBytesPerSec := nBlockAlign*nSamplesPerSec;
cbSize := 0;
end;
end;
 
{ TWave }
 
const
WavePoolSize = 8096;
 
destructor TWave.Destroy;
begin
Clear;
inherited Destroy;
end;
 
procedure TWave.Assign(Source: TPersistent);
var
AWave: TWave;
begin
if Source=nil then
begin
Clear;
end else if Source is TWave then
begin
if Source<>Self then
begin
AWave := TWave(Source);
Size := AWave.Size;
FormatSize := AWave.FormatSize;
Move(AWave.Data^, FData^, FSize);
Move(AWave.Format^, FFormat^, FFormatSize);
end;
end else
inherited Assign(Source);
end;
 
procedure TWave.Clear;
begin
FreeMem(FData, 0); FData := nil;
FreeMem(FFormat, 0); FFormat := nil;
 
FSize := 0;
FFormatSize := 0;
end;
 
procedure TWave.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
Filer.DefineBinaryProperty('WAVE', ReadData, WriteData, True);
end;
 
procedure TWave.LoadFromFile(const FileName : string);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
 
procedure TWave.LoadFromStream(Stream: TStream);
var
WaveStream: TWaveStream;
begin
Clear;
 
WaveStream := TWaveStream.Create(Stream);
try
WaveStream.Open(False);
 
FormatSize := WaveStream.FormatSize;
Move(WaveStream.Format^, Format^, FormatSize);
Size := WaveStream.Size;
WaveStream.ReadBuffer(FData^, Size);
finally
WaveStream.Free;
end;
end;
 
procedure TWave.ReadData(Stream: TStream);
begin
LoadFromStream(Stream);
end;
 
procedure TWave.SaveToFile(const FileName : string);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
SaveToStream(Stream);
finally
Stream.Free;
end;
end;
 
procedure TWave.SaveToStream(Stream: TStream);
var
WaveStream: TWaveStream;
begin
if (FFormatSize<=0) or (FSize<=0) then Exit;
 
WaveStream := TWaveStream.Create(Stream);
try
WaveStream.FormatSize := FormatSize;
Move(Format^, WaveStream.Format^, FormatSize);
 
WaveStream.Open(True);
WaveStream.WriteBuffer(FData^, Size);
finally
WaveStream.Free;
end;
end;
 
procedure TWave.SetFormatSize(Value: Integer);
begin
if Value<=0 then Value := 0;
ReAllocMem(FFormat, Value);
FFormatSize := Value;
end;
 
procedure TWave.SetPCMFormat(SamplesPerSec, BitsPerSample, Channels: Integer);
begin
FormatSize := SizeOf(TWaveFormatEx);
MakePCMWaveFormatEx(Format^, SamplesPerSec, BitsPerSample, Channels);
end;
 
procedure TWave.SetSize(Value: Integer);
var
i: Integer;
begin
if Value<=0 then Value := 0;
 
i := (Value+WavePoolSize-1) div WavePoolSize;
if i<>(FSize+WavePoolSize-1) div WavePoolSize then
ReAllocMem(FData, i*WavePoolSize);
 
FSize := Value;
end;
 
procedure TWave.WriteData(Stream: TStream);
begin
SaveToStream(Stream);
end;
 
{ TCustomDXWave }
 
constructor TCustomDXWave.Create(AOnwer: TComponent);
begin
inherited Create(AOnwer);
FWave := TWave.Create;
end;
 
destructor TCustomDXWave.Destroy;
begin
FWave.Free;
inherited Destroy;
end;
 
procedure TCustomDXWave.SetWave(Value: TWave);
begin
FWave.Assign(Value);
end;
 
{ TCustomWaveStream }
 
function TCustomWaveStream.GetFilledSize: Longint;
begin
Result := -1;
end;
 
function TCustomWaveStream.GetFormatSize: Integer;
begin
Result := 0;
end;
 
function TCustomWaveStream.GetSize: Integer;
begin
Result := -1;
end;
 
function TCustomWaveStream.Read(var Buffer; Count: Longint): Longint;
begin
if GetSize<0 then
Result := ReadWave(Buffer, Count)
else
begin
if FPosition>Size then
FPosition := Size;
if FPosition+Count>Size then
Result := Size-FPosition
else
Result := Count;
 
Result := ReadWave(Buffer, Result);
end;
 
Inc(FPosition, Result);
end;
 
function TCustomWaveStream.ReadWave(var Buffer; Count: Integer): Integer;
begin
Result := 0;
end;
 
function TCustomWaveStream.Seek(Offset: Longint; Origin: Word): Longint;
begin
case Origin of
soFromBeginning: FPosition := Offset;
soFromCurrent : FPosition := FPosition + Offset;
soFromEnd : FPosition := GetSize + Offset;
end;
if FPosition<0 then FPosition := 0;
if FPosition>GetSize then FPosition := GetSize;
 
Result := FPosition;
end;
 
procedure TCustomWaveStream.SetPCMFormat(SamplesPerSec, BitsPerSample, Channels: Integer);
begin
FormatSize := SizeOf(TWaveFormatEx);
MakePCMWaveFormatEx(Format^, SamplesPerSec, BitsPerSample, Channels);
end;
 
procedure TCustomWaveStream.SetSize(Value: Integer);
begin
end;
 
function TCustomWaveStream.Write(const Buffer; Count: Longint): Longint;
begin
if FPosition>Size then
FPosition := Size;
Result := WriteWave(Buffer, Count);
Inc(FPosition, Result);
end;
 
function TCustomWaveStream.WriteWave(const Buffer; Count: Integer): Integer;
begin
Result := 0;
end;
 
{ TCustomWaveStream2 }
 
destructor TCustomWaveStream2.Destroy;
begin
FormatSize := 0;
inherited Destroy;
end;
 
function TCustomWaveStream2.GetFormat: PWaveFormatEx;
begin
Result := FFormat;
end;
 
function TCustomWaveStream2.GetFormatSize: Integer;
begin
Result := FFormatSize;
end;
 
procedure TCustomWaveStream2.SetFormatSize(Value: Integer);
begin
ReAllocMem(FFormat, Value);
FFormatSize := Value;
end;
 
{ TWaveObjectStream }
 
constructor TWaveObjectStream.Create(AWave: TWave);
begin
inherited Create;
FWave := AWave;
 
FormatSize := FWave.FormatSize;
Move(FWave.Format^, Format^, FormatSize);
end;
 
function TWaveObjectStream.GetFormat: PWaveFormatEx;
begin
Result := FWave.Format;
end;
 
function TWaveObjectStream.GetFormatSize: Integer;
begin
Result := FWave.FormatSize;
end;
 
function TWaveObjectStream.GetSize: Integer;
begin
Result := FWave.Size;
end;
 
function TWaveObjectStream.ReadWave(var Buffer; Count: Integer): Integer;
begin
Result := Count;
Move(Pointer(Integer(FWave.Data)+Position)^, Buffer, Count);
end;
 
procedure TWaveObjectStream.SetFormatSize(Value: Integer);
begin
FWave.FormatSize := Value;
end;
 
procedure TWaveObjectStream.SetSize(Value: Integer);
begin
FWave.Size := Value;
end;
 
function TWaveObjectStream.WriteWave(const Buffer; Count: Integer): Integer;
begin
Result := Count;
if Position+Count>Size then
SetSize(Size+(Position+Count+Size));
Move(Buffer, Pointer(Integer(FWave.Data)+Position)^, Count);
end;
 
{ TWaveStream }
 
const
ID_RIFF = Ord('R') + Ord('I')*$100 + Ord('F')*$10000 + Ord('F')*$1000000;
ID_WAVE = Ord('W') + Ord('A')*$100 + Ord('V')*$10000 + Ord('E')*$1000000;
ID_FMT = Ord('f') + Ord('m')*$100 + Ord('t')*$10000 + Ord(' ')*$1000000;
ID_FACT = Ord('f') + Ord('a')*$100 + Ord('c')*$10000 + Ord('t')*$1000000;
ID_DATA = Ord('d') + Ord('a')*$100 + Ord('t')*$10000 + Ord('a')*$1000000;
 
type
TWaveFileHeader = packed record
FType: Integer;
Size: Longint;
RType: Integer;
end;
 
TWaveChunkHeader = packed record
CType: Longint;
Size: Longint;
end;
 
constructor TWaveStream.Create(AStream: TStream);
begin
inherited Create;
FStream := AStream;
 
FOriPosition := FStream.Position;
end;
 
destructor TWaveStream.Destroy;
begin
if FOpened and (not FReadMode) then
CloseWriteMode;
inherited Destroy;
end;
 
function TWaveStream.GetSize: Integer;
begin
if FOpened then
begin
if not FReadMode then
Result := FStream.Size-FDataPosition
else
Result := FSize;
end else
Result := 0;
end;
 
function TWaveStream.ReadWave(var Buffer; Count: Integer): Integer;
begin
if not FOpened then
raise EWaveStreamError.Create(SStreamNotOpend);
 
FStream.Position := FDataPosition+Position;
Result := FStream.Read(Buffer, Count);
end;
 
function TWaveStream.WriteWave(const Buffer; Count: Integer): Integer;
begin
if not FOpened then
raise EWaveStreamError.Create(SStreamNotOpend);
 
if FReadMode then
begin
if Position+Count>FSize then
Count := FSize-Position;
end;
 
FStream.Position := FDataPosition+Position;
Result := FStream.Write(Buffer, Count);
end;
 
procedure TWaveStream.Open(WriteMode: Boolean);
begin
if WriteMode then
OpenWriteMode
else
OpenReadMode;
end;
 
procedure TWaveStream.OpenReadMode;
var
WF: TWaveFileHeader;
WC: TWaveChunkHeader;
 
procedure Readfmt; { fmt }
begin
FormatSize := WC.Size;
FStream.ReadBuffer(Format^, WC.Size);
end;
 
procedure Readdata; { data }
begin
FSize := WC.Size;
FDataPosition := FStream.Position;
FStream.Seek(FSize, 1);
end;
 
begin
if FOpened then
raise EWaveStreamError.Create(SStreamOpend);
 
FOpened := True;
FReadMode := True;
 
FStream.Position := FOriPosition;
 
//if FStream.Size-FStream.Position<=0 then Exit;
 
{ File header reading. }
FStream.ReadBuffer(WF, SizeOf(TWaveFileHeader));
 
{ Is it Wave file of the file? }
if (WF.FType<>ID_RIFF) or (WF.RType<>ID_WAVE) then
raise EWaveStreamError.Create(SInvalidWave);
 
{ Chunk reading. }
FillChar(WC, SizeOf(WC), 0);
FStream.Read(WC, SizeOf(TWaveChunkHeader));
while WC.CType<>0 do
begin
case WC.CType of
ID_FMT : Readfmt;
ID_DATA: Readdata;
else
{ Chunk which does not correspond is disregarded. }
FStream.Seek(WC.Size, 1);
end;
 
FillChar(WC, SizeOf(WC), 0);
FStream.Read(WC, SizeOf(TWaveChunkHeader));
end;
end;
 
procedure TWaveStream.OpenWriteMode;
 
procedure WriteFmt; { fmt }
var
WC: TWaveChunkHeader;
begin
with WC do
begin
CType := ID_FMT;
Size := FFormatSize;
end;
 
FStream.WriteBuffer(WC, SizeOf(WC));
FStream.WriteBuffer(FFormat^, FFormatSize);
end;
 
procedure WriteData; { data }
var
WC: TWaveChunkHeader;
begin
FDataHeaderPosition := FStream.Position;
 
with WC do
begin
CType := ID_DATA;
Size := 0;
end;
 
FStream.WriteBuffer(WC, SizeOf(WC));
 
FDataPosition := FStream.Position;
end;
 
var
WF: TWaveFileHeader;
begin
if FOpened then
raise EWaveStreamError.Create(SStreamOpend);
 
if FormatSize=0 then
raise EWaveStreamError.Create(SInvalidWaveFormat);
 
FOpened := True;
FStream.Position := FOriPosition;
 
FStream.WriteBuffer(WF, SizeOf(TWaveFileHeader));
 
{ Chunk writing. }
WriteFmt;
WriteData;
end;
 
procedure TWaveStream.CloseWriteMode;
 
procedure WriteDataHeader; { data }
var
WC: TWaveChunkHeader;
begin
FStream.Position := FDataHeaderPosition;
 
with WC do
begin
CType := ID_DATA;
Size := Self.Size;
end;
 
FStream.WriteBuffer(WC, SizeOf(WC));
end;
 
var
WF: TWaveFileHeader;
begin
with WF do
begin
FType := ID_RIFF;
Size := (FStream.Size-FOriPosition)-SizeOf(TWaveChunkHeader);
RType := ID_WAVE;
end;
FStream.Position := FOriPosition;
FStream.WriteBuffer(WF, SizeOf(TWaveFileHeader));
WriteDataHeader;
FStream.Position := FStream.Size;
end;
 
{ TWaveFileStream }
 
constructor TWaveFileStream.Create(const FileName: string; FileMode: Integer);
begin
FFileStream := TFileStream.Create(FileName, FileMode);
inherited Create(FFileStream);
end;
 
destructor TWaveFileStream.Destroy;
begin
inherited Destroy;
FFileStream.Free;
end;
 
end.
/VCL_DELPHIX_D6/DXWaveEdit.dfm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/VCL_DELPHIX_D6/DXWaveEdit.pas
4,7 → 4,7
 
uses
Windows, SysUtils, Classes, Forms, Dialogs, Controls, StdCtrls, ExtCtrls,
Buttons, ComCtrls, DXSounds, Wave, Graphics;
Buttons, ComCtrls, DXSounds, DXWave, Graphics;
 
type
 
/VCL_DELPHIX_D6/DelphiX.bdsproj
0,0 → 1,177
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType"></Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{6EC6E3ED-F62F-4EBA-BD15-B71B48535D8D}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX.dpk</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">8</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">0</Compiler>
<Compiler Name="D">0</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">1</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">0</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">0</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">0</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler> <Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">0</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">False</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription">DelphiX - DirectX components for Delphi</Linker> <Linker Name="GenerateHpps">False</Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir">.\</Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir">.\</Directories>
<Directories Name="SearchPath"></Directories>
<Directories Name="Packages"></Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="RemoteHost"></Parameters>
<Parameters Name="RemotePath"></Parameters>
<Parameters Name="RemoteLauncher"></Parameters>
<Parameters Name="RemoteCWD"></Parameters>
<Parameters Name="RemoteDebug">False</Parameters> <Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000000</Language>
<Language Name="RootDir"></Language>
</Language>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">8</VersionInfo>
<VersionInfo Name="Build">3</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1029</VersionInfo>
<VersionInfo Name="CodePage">1250</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">unDelphiX for Delphi 6, 7, 2005, 2006, 2007, 2009</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.8.3</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">unDelphiX</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">© Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks">© Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">DELPHIX</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">unDelphiX 1.08.3</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.8.3</VersionInfoKeys>
<VersionInfoKeys Name="Comments">Unofficial version DelphiX with hardware acceleration.</VersionInfoKeys>
</VersionInfoKeys>
</Delphi.Personality>
</BorlandProject>
/VCL_DELPHIX_D6/DelphiX.dcr
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/VCL_DELPHIX_D6/DelphiX.dpk
0,0 → 1,102
package DelphiX;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi'}
{$IFDEF VER140} { Borland Delphi 6.x }
{$LIBSUFFIX '60'}
{$ENDIF}
{$IFDEF VER145} { Borland C++Builder 6.x }
{$LIBSUFFIX '65'}
{$ENDIF}
{$IFDEF VER150} { Borland Delphi 7.x }
{$LIBSUFFIX '70'}
{$ENDIF}
{$IFDEF VER170} { Borland Delphi 2005 9.x }
{$LIBSUFFIX '90'}
{$ENDIF}
{$IFDEF VER180} { Borland Delphi 2006, Turbo 10.x } // JB
{$LIBSUFFIX '100'}
{$ENDIF}
{$IFDEF VER185} { Borland Delphi 2007 11.x } // JB
{$LIBSUFFIX '110'}
{$ENDIF}
{$IFDEF VER200} { Borland Delphi 2009 12.x } // JB
{$LIBSUFFIX '120'}
{$ENDIF}
{$IFDEF VER210} { Borland Delphi 2010 14.x } // JB
{$LIBSUFFIX '140'}
{$ENDIF}
 
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
{Note: must be defined as global for SXMedia using}
{$DEFINE D3D_deprecated}
 
requires
vcl,
vclsmp,
designide,
//png,
rtl,
vcljpg,
vclx;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm},
SXReg in '.\SXMedia\SXReg.pas',
SXEditor in '.\SXMedia\SXEditor.pas',
SXAbout in '.\SXMedia\SXAbout.pas',
MpSndSys in '.\SXMedia\MpSndSys.pas',
SXEngine in '.\SXMedia\SXEngine.pas',
SXModPlayer in '.\SXMedia\SXModPlayer.pas',
SXMovie in '.\SXMedia\SXMovie.pas';
 
end.
/VCL_DELPHIX_D6/DelphiX.dproj
0,0 → 1,107
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{6ec6e3ed-f62f-4eba-bd15-b71b48535d8d}</ProjectGuid>
<MainSource>DelphiX.dpk</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>C:\Users\Public\Documents\RAD Studio\5.0\Bpl\DelphiX110.bpl</DCC_DependencyCheckOutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_AssertionsAtRuntime>False</DCC_AssertionsAtRuntime>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_WriteableConstants>True</DCC_WriteableConstants>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DcuOutput>
</DCC_DcuOutput>
<DCC_ObjOutput>
</DCC_ObjOutput>
<DCC_HppOutput>
</DCC_HppOutput>
<DCC_DcpOutput>
</DCC_DcpOutput>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_AssertionsAtRuntime>False</DCC_AssertionsAtRuntime>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_WriteableConstants>True</DCC_WriteableConstants>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Package_Options><Package_Options Name="PackageDescription">DelphiX - DirectX components for Delphi</Package_Options><Package_Options Name="ImplicitBuild">True</Package_Options><Package_Options Name="DesigntimeOnly">True</Package_Options><Package_Options Name="RuntimeOnly">False</Package_Options><Package_Options Name="LibSuffix">110</Package_Options></Package_Options><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">8</VersionInfo><VersionInfo Name="Build">3</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1029</VersionInfo><VersionInfo Name="CodePage">1250</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName">Unofficial version DelphiX with hardware acceleration.</VersionInfoKeys><VersionInfoKeys Name="FileDescription">unDelphiX for Delphi 6, 7, 2005, 2006, 2007, 2009</VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.8.3</VersionInfoKeys><VersionInfoKeys Name="InternalName">unDelphiX</VersionInfoKeys><VersionInfoKeys Name="LegalCopyright">© Hiroyuki Hori</VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks">© Hiroyuki Hori</VersionInfoKeys><VersionInfoKeys Name="OriginalFilename">DELPHIX</VersionInfoKeys><VersionInfoKeys Name="ProductName">unDelphiX 1.08.3</VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.8.3</VersionInfoKeys><VersionInfoKeys Name="Comments">Unofficial version DelphiX with hardware acceleration.</VersionInfoKeys></VersionInfoKeys><Source><Source Name="MainSource">DelphiX.dpk</Source></Source></Delphi.Personality></BorlandProject></BorlandProject>
</ProjectExtensions>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
<ItemGroup>
<DelphiCompile Include="DelphiX.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="$(SystemRoot)\system32\designide.dcp" />
<DCCReference Include="$(SystemRoot)\system32\rtl.dcp" />
<DCCReference Include="$(SystemRoot)\system32\vcl.dcp" />
<DCCReference Include="$(SystemRoot)\system32\vcljpg.dcp" />
<DCCReference Include="$(SystemRoot)\system32\vclsmp.dcp" />
<DCCReference Include="$(SystemRoot)\system32\vclx.dcp" />
<DCCReference Include="DelphiX.dcr" />
<DCCReference Include="DelphiX.dcr" />
<DCCReference Include="DIB.pas" />
<DCCReference Include="DXClass.pas" />
<DCCReference Include="DXConsts.pas" />
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="DXDraws.pas" />
<DCCReference Include="DXETable.pas" />
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXInput.pas" />
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXPlay.pas" />
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXReg.pas" />
<DCCReference Include="DXRender.pas" />
<DCCReference Include="DXSounds.pas" />
<DCCReference Include="DXSprite.pas" />
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXWave.pas" />
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas" />
</ItemGroup>
</Project>
/VCL_DELPHIX_D6/DelphiX.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX100.bdsproj
0,0 → 1,175
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">Delphi.Personality</Option>
<Option Name="ProjectType">VCLApplication</Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{0B6521B6-2815-496E-BCCD-81462FB6EE32}</Option>
</Option>
</PersonalityInfo>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX100.dpk</Source>
</Source>
<FileVersion>
<FileVersion Name="Version">7.0</FileVersion>
</FileVersion>
<Compiler>
<Compiler Name="A">8</Compiler>
<Compiler Name="B">0</Compiler>
<Compiler Name="C">0</Compiler>
<Compiler Name="D">0</Compiler>
<Compiler Name="E">0</Compiler>
<Compiler Name="F">0</Compiler>
<Compiler Name="G">1</Compiler>
<Compiler Name="H">1</Compiler>
<Compiler Name="I">1</Compiler>
<Compiler Name="J">1</Compiler>
<Compiler Name="K">0</Compiler>
<Compiler Name="L">0</Compiler>
<Compiler Name="M">0</Compiler>
<Compiler Name="N">1</Compiler>
<Compiler Name="O">1</Compiler>
<Compiler Name="P">1</Compiler>
<Compiler Name="Q">0</Compiler>
<Compiler Name="R">0</Compiler>
<Compiler Name="S">0</Compiler>
<Compiler Name="T">0</Compiler>
<Compiler Name="U">0</Compiler>
<Compiler Name="V">1</Compiler>
<Compiler Name="W">0</Compiler>
<Compiler Name="X">1</Compiler>
<Compiler Name="Y">0</Compiler>
<Compiler Name="Z">1</Compiler>
<Compiler Name="ShowHints">True</Compiler>
<Compiler Name="ShowWarnings">True</Compiler>
<Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler>
<Compiler Name="NamespacePrefix"></Compiler>
<Compiler Name="GenerateDocumentation">False</Compiler>
<Compiler Name="DefaultNamespace"></Compiler>
<Compiler Name="SymbolDeprecated">True</Compiler>
<Compiler Name="SymbolLibrary">True</Compiler>
<Compiler Name="SymbolPlatform">True</Compiler>
<Compiler Name="SymbolExperimental">True</Compiler>
<Compiler Name="UnitLibrary">True</Compiler>
<Compiler Name="UnitPlatform">True</Compiler>
<Compiler Name="UnitDeprecated">True</Compiler>
<Compiler Name="UnitExperimental">True</Compiler>
<Compiler Name="HResultCompat">True</Compiler>
<Compiler Name="HidingMember">True</Compiler>
<Compiler Name="HiddenVirtual">True</Compiler>
<Compiler Name="Garbage">True</Compiler>
<Compiler Name="BoundsError">True</Compiler>
<Compiler Name="ZeroNilCompat">True</Compiler>
<Compiler Name="StringConstTruncated">True</Compiler>
<Compiler Name="ForLoopVarVarPar">True</Compiler>
<Compiler Name="TypedConstVarPar">True</Compiler>
<Compiler Name="AsgToTypedConst">True</Compiler>
<Compiler Name="CaseLabelRange">True</Compiler>
<Compiler Name="ForVariable">True</Compiler>
<Compiler Name="ConstructingAbstract">True</Compiler>
<Compiler Name="ComparisonFalse">True</Compiler>
<Compiler Name="ComparisonTrue">True</Compiler>
<Compiler Name="ComparingSignedUnsigned">True</Compiler>
<Compiler Name="CombiningSignedUnsigned">True</Compiler>
<Compiler Name="UnsupportedConstruct">True</Compiler>
<Compiler Name="FileOpen">True</Compiler>
<Compiler Name="FileOpenUnitSrc">True</Compiler>
<Compiler Name="BadGlobalSymbol">True</Compiler>
<Compiler Name="DuplicateConstructorDestructor">True</Compiler>
<Compiler Name="InvalidDirective">True</Compiler>
<Compiler Name="PackageNoLink">True</Compiler>
<Compiler Name="PackageThreadVar">True</Compiler>
<Compiler Name="ImplicitImport">True</Compiler>
<Compiler Name="HPPEMITIgnored">True</Compiler>
<Compiler Name="NoRetVal">True</Compiler>
<Compiler Name="UseBeforeDef">True</Compiler>
<Compiler Name="ForLoopVarUndef">True</Compiler>
<Compiler Name="UnitNameMismatch">True</Compiler>
<Compiler Name="NoCFGFileFound">True</Compiler>
<Compiler Name="ImplicitVariants">True</Compiler>
<Compiler Name="UnicodeToLocale">True</Compiler>
<Compiler Name="LocaleToUnicode">True</Compiler>
<Compiler Name="ImagebaseMultiple">True</Compiler>
<Compiler Name="SuspiciousTypecast">True</Compiler>
<Compiler Name="PrivatePropAccessor">True</Compiler>
<Compiler Name="UnsafeType">False</Compiler>
<Compiler Name="UnsafeCode">False</Compiler>
<Compiler Name="UnsafeCast">False</Compiler>
<Compiler Name="OptionTruncated">True</Compiler>
<Compiler Name="WideCharReduced">True</Compiler>
<Compiler Name="DuplicatesIgnored">True</Compiler>
<Compiler Name="UnitInitSeq">True</Compiler>
<Compiler Name="LocalPInvoke">True</Compiler>
<Compiler Name="MessageDirective">True</Compiler>
<Compiler Name="CodePage"></Compiler>
</Compiler>
<Linker>
<Linker Name="MapFile">0</Linker>
<Linker Name="OutputObjs">0</Linker>
<Linker Name="GenerateHpps">False</Linker>
<Linker Name="ConsoleApp">1</Linker>
<Linker Name="DebugInfo">False</Linker>
<Linker Name="RemoteSymbols">False</Linker>
<Linker Name="GenerateDRC">False</Linker>
<Linker Name="MinStackSize">16384</Linker>
<Linker Name="MaxStackSize">1048576</Linker>
<Linker Name="ImageBase">4194304</Linker>
<Linker Name="ExeDescription">DelphiX - DirectX components for Delphi</Linker>
</Linker>
<Directories>
<Directories Name="OutputDir"></Directories>
<Directories Name="UnitOutputDir"></Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath"></Directories>
<Directories Name="Packages"></Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>
<Directories Name="UsePackages">False</Directories>
</Directories>
<Parameters>
<Parameters Name="RunParams"></Parameters>
<Parameters Name="HostApplication"></Parameters>
<Parameters Name="Launcher"></Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="DebugCWD"></Parameters>
<Parameters Name="Debug Symbols Search Path"></Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<Language>
<Language Name="ActiveLang"></Language>
<Language Name="ProjectLang">$00000000</Language>
<Language Name="RootDir"></Language>
</Language>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">8</VersionInfo>
<VersionInfo Name="Build">4</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1029</VersionInfo>
<VersionInfo Name="CodePage">1250</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">unDelphiX for Delphi 2006/Turbo</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.9.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">unDelphiX</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">© Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks">© Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">DELPHIX</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">unDelphiX 1.09.0</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.9.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments">Unofficial version DelphiX with hardware acceleration.</VersionInfoKeys>
</VersionInfoKeys>
</Delphi.Personality>
</BorlandProject>
/VCL_DELPHIX_D6/DelphiX100.dpk
0,0 → 1,73
package DelphiX100;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 2006'}
{$DESIGNONLY}
{$IMPLICITBUILD OFF}
 
requires
vcl,
vclsmp,
designide,
rtl,
vcljpg,
vclx;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX100.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX110.dpk
0,0 → 1,72
package DelphiX110;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 2007'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vcljpg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX110.dproj
0,0 → 1,102
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{5feb56dc-7ab1-463a-b31f-4b2e44162275}</ProjectGuid>
<MainSource>DelphiX110.dpk</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>C:\Documents and Settings\Micrel\Dokumenty\RAD Studio\5.0\Bpl\DelphiX110.bpl</DCC_DependencyCheckOutputName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_AssertionsAtRuntime>False</DCC_AssertionsAtRuntime>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_WriteableConstants>True</DCC_WriteableConstants>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_AssertionsAtRuntime>False</DCC_AssertionsAtRuntime>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_WriteableConstants>True</DCC_WriteableConstants>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Package_Options><Package_Options Name="PackageDescription">DelphiX - DirectX components for Delphi 2007</Package_Options><Package_Options Name="ImplicitBuild">True</Package_Options><Package_Options Name="DesigntimeOnly">True</Package_Options><Package_Options Name="RuntimeOnly">False</Package_Options></Package_Options><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">8</VersionInfo><VersionInfo Name="Build">4</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1029</VersionInfo><VersionInfo Name="CodePage">1250</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName">Hiroyuki Hori</VersionInfoKeys><VersionInfoKeys Name="FileDescription">unDelphiX for Delphi 2007</VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.8.4</VersionInfoKeys><VersionInfoKeys Name="InternalName">unDelphiX</VersionInfoKeys><VersionInfoKeys Name="LegalCopyright">© Hiroyuki Hori</VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks">© Hiroyuki Hori</VersionInfoKeys><VersionInfoKeys Name="OriginalFilename">DELPHIX</VersionInfoKeys><VersionInfoKeys Name="ProductName">unDelphiX 1.08.4</VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.8.4</VersionInfoKeys><VersionInfoKeys Name="Comments">Unofficial version DelphiX with hardware acceleration.</VersionInfoKeys></VersionInfoKeys><Excluded_Packages>
<Excluded_Packages Name="C:\Documents and Settings\All Users\Dokumenty\RAD Studio\5.0\Bpl\jbLib110.bpl">jbLib (part 1)</Excluded_Packages>
<Excluded_Packages Name="$(BDS)\bin\dcloffice2k100.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDS)\bin\dclofficexp100.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages><Source><Source Name="MainSource">DelphiX110.dpk</Source></Source></Delphi.Personality></BorlandProject></BorlandProject>
</ProjectExtensions>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
<ItemGroup>
<DelphiCompile Include="DelphiX110.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr" />
<DCCReference Include="DelphiX.dcr" />
<DCCReference Include="designide.dcp" />
<DCCReference Include="DIB.pas" />
<DCCReference Include="DXClass.pas" />
<DCCReference Include="DXConsts.pas" />
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="DXDraws.pas" />
<DCCReference Include="DXETable.pas" />
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXInput.pas" />
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXPlay.pas" />
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXReg.pas" />
<DCCReference Include="DXRender.pas" />
<DCCReference Include="DXSounds.pas" />
<DCCReference Include="DXSprite.pas" />
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXWave.pas" />
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="rtl.dcp" />
<DCCReference Include="TurboPixels.pas" />
<DCCReference Include="vcl.dcp" />
<DCCReference Include="vcljpg.dcp" />
<DCCReference Include="vclsmp.dcp" />
</ItemGroup>
</Project>
/VCL_DELPHIX_D6/DelphiX110.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX120.dpk
0,0 → 1,73
package DelphiX120;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 2009'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX120.dproj
0,0 → 1,175
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{144096F0-D488-4452-8A4D-981EBF9B99CC}</ProjectGuid>
<MainSource>DelphiX120.dpk</MainSource>
<Config Condition="'$(Config)'==''">Debug</Config>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<ProjectVersion>12.0</ProjectVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_DebugInformation>false</DCC_DebugInformation>
<DCC_WriteableConstants>true</DCC_WriteableConstants>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Platform>x86</DCC_Platform>
<DCC_DependencyCheckOutputName>C:\Documents and Settings\All Users\Dokumenty\RAD Studio\6.0\Bpl\DelphiX120.bpl</DCC_DependencyCheckOutputName>
<DCC_Description>DelphiX - DirectX components for Delphi 2009</DCC_Description>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_N>false</DCC_N>
<DCC_K>false</DCC_K>
<GenDll>true</GenDll>
<DCC_S>false</DCC_S>
<DCC_AssertionsAtRuntime>false</DCC_AssertionsAtRuntime>
<GenPackage>true</GenPackage>
<DCC_F>false</DCC_F>
<DCC_E>false</DCC_E>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="DelphiX120.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<DCCReference Include="DelphiX.dcr"/>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX120.dpk</Source>
</Source>
<Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">8</VersionInfo>
<VersionInfo Name="Build">4</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1029</VersionInfo>
<VersionInfo Name="CodePage">1250</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">unDelphiX for Delphi 2009</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.8.4</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">unDelphiX</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">© Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks">© Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">DELPHIX</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">unDelphiX 1.08.4</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.8.4</VersionInfoKeys>
<VersionInfoKeys Name="Comments">Unofficial version DelphiX with hardware acceleration.</VersionInfoKeys>
</VersionInfoKeys>
<Excluded_Packages>
<Excluded_Packages Name="$(BDS)\bin\dcloffice2k120.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDS)\bin\dclofficexp120.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
</Project>
/VCL_DELPHIX_D6/DelphiX120.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX140.dpk
0,0 → 1,73
package DelphiX140;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi 2010'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX140.dproj
0,0 → 1,172
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{EDE2D9FF-D101-436D-BE6E-B71045750312}</ProjectGuid>
<MainSource>DelphiX140.dpk</MainSource>
<Config Condition="'$(Config)'==''">Debug</Config>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<ProjectVersion>12.0</ProjectVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_DebugInformation>false</DCC_DebugInformation>
<DCC_WriteableConstants>true</DCC_WriteableConstants>
<DCC_DependencyCheckOutputName>..\..\..\Bpl\DelphiX140.bpl</DCC_DependencyCheckOutputName>
<DCC_Platform>x86</DCC_Platform>
<DCC_UnitAlias>WinTypes=Windows;WinProcs=Windows;$(DCC_UnitAlias)</DCC_UnitAlias>
<DCC_Description>DelphiX - DirectX components for Delphi 2010</DCC_Description>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_N>false</DCC_N>
<DCC_K>false</DCC_K>
<GenDll>true</GenDll>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<GenPackage>true</GenPackage>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_E>false</DCC_E>
<DCC_AssertionsAtRuntime>false</DCC_AssertionsAtRuntime>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="DelphiX140.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX140.dpk</Source>
</Source>
<Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">8</VersionInfo>
<VersionInfo Name="Build">4</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1029</VersionInfo>
<VersionInfo Name="CodePage">1250</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">unDelphiX for Delphi 2010</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.0.8.4</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">unDelphiX</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">© Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks">© Hiroyuki Hori</VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">DELPHIX</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">unDelphiX 1.08.4</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.0.8.4</VersionInfoKeys>
<VersionInfoKeys Name="Comments">Unofficial version DelphiX with hardware acceleration.</VersionInfoKeys>
<VersionInfoKeys Name="LastCompiledTime">25.2.2011 13:27:10</VersionInfoKeys>
</VersionInfoKeys>
</Delphi.Personality>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
</Project>
/VCL_DELPHIX_D6/DelphiX140.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX140_Icon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX150.dpk
0,0 → 1,73
package DelphiX150;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi XE'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX150.dproj
0,0 → 1,175
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{40C51905-1F0A-4D72-A87A-C9C8D9665324}</ProjectGuid>
<MainSource>DelphiX150.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform>Win32</Platform>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<ProjectVersion>12.3</ProjectVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_WriteableConstants>true</DCC_WriteableConstants>
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>false</DCC_DebugInformation>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_UnitAlias>WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;WinTypes=Windows;WinProcs=Windows;$(DCC_UnitAlias)</DCC_UnitAlias>
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_Description>DelphiX - DirectX components for Delphi XE</DCC_Description>
<DCC_N>false</DCC_N>
<DCC_K>false</DCC_K>
<GenDll>true</GenDll>
<DCC_S>false</DCC_S>
<DCC_AssertionsAtRuntime>false</DCC_AssertionsAtRuntime>
<GenPackage>true</GenPackage>
<DCC_F>false</DCC_F>
<DCC_E>false</DCC_E>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="DelphiX150.dpk">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX150.dpk</Source>
</Source>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1029</VersionInfo>
<VersionInfo Name="CodePage">1250</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k150.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp150.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
</Project>
/VCL_DELPHIX_D6/DelphiX160.dpk
0,0 → 1,73
package DelphiX160;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi XE2'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX170.dpk
0,0 → 1,76
package DelphiX170;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi XE3'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX170.dproj
0,0 → 1,200
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{1B8334F4-5772-413C-A193-734E8502FFD1}</ProjectGuid>
<MainSource>DelphiX170.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>14.4</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<DCC_E>false</DCC_E>
<DCC_S>false</DCC_S>
<VerInfo_Locale>1029</VerInfo_Locale>
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_K>false</DCC_K>
<DCC_Description>DelphiX - DirectX components for Delphi XE3</DCC_Description>
<GenPackage>true</GenPackage>
<DCC_N>false</DCC_N>
<DCC_F>false</DCC_F>
<GenDll>true</GenDll>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=;CFBundleDisplayName=;CFBundleIdentifier=;CFBundleVersion=;CFBundlePackageType=;CFBundleSignature=;CFBundleAllowMixedLocalizations=;CFBundleExecutable=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>rtl;vclimg;vcl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>rtl;vclimg;vcl;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_DebugInformation>false</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX170.dpk</Source>
</Source>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1029</VersionInfo>
<VersionInfo Name="CodePage">1250</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
<VersionInfoKeys Name="CFBundleName"/>
<VersionInfoKeys Name="CFBundleDisplayName"/>
<VersionInfoKeys Name="CFBundleIdentifier"/>
<VersionInfoKeys Name="CFBundleVersion"/>
<VersionInfoKeys Name="CFBundlePackageType"/>
<VersionInfoKeys Name="CFBundleSignature"/>
<VersionInfoKeys Name="CFBundleAllowMixedLocalizations"/>
<VersionInfoKeys Name="CFBundleExecutable"/>
</VersionInfoKeys>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX170.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX180.dpk
0,0 → 1,76
package DelphiX180;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi XE4'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX180.dproj
0,0 → 1,215
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{0B5603A8-5BDE-4468-8CCA-29D742741EFB}</ProjectGuid>
<MainSource>DelphiX180.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>14.6</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_N>false</DCC_N>
<VerInfo_Locale>1029</VerInfo_Locale>
<GenDll>true</GenDll>
<DCC_Description>DelphiX - DirectX components for Delphi XE3</DCC_Description>
<DCC_K>false</DCC_K>
<DCC_S>false</DCC_S>
<DCC_ImageBase>00400000</DCC_ImageBase>
<GenPackage>true</GenPackage>
<DCC_E>false</DCC_E>
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<DCC_F>false</DCC_F>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=;CFBundleDisplayName=;UIDeviceFamily=;CFBundleIdentifier=;CFBundleVersion=;CFBundlePackageType=;CFBundleSignature=;CFBundleAllowMixedLocalizations=;UISupportedInterfaceOrientations=;CFBundleExecutable=;CFBundleResourceSpecification=;LSRequiresIPhoneOS=;CFBundleInfoDictionaryVersion=;CFBundleDevelopmentRegion=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>vcl;rtl;vclimg;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>vcl;rtl;vclimg;vclx;VclSmp;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_DebugInformation>false</DCC_DebugInformation>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_Optimize>false</DCC_Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX180.dpk</Source>
</Source>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">0</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1029</VersionInfo>
<VersionInfo Name="CodePage">1250</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
<VersionInfoKeys Name="CFBundleName"/>
<VersionInfoKeys Name="CFBundleDisplayName"/>
<VersionInfoKeys Name="UIDeviceFamily"/>
<VersionInfoKeys Name="CFBundleIdentifier"/>
<VersionInfoKeys Name="CFBundleVersion"/>
<VersionInfoKeys Name="CFBundlePackageType"/>
<VersionInfoKeys Name="CFBundleSignature"/>
<VersionInfoKeys Name="CFBundleAllowMixedLocalizations"/>
<VersionInfoKeys Name="UISupportedInterfaceOrientations"/>
<VersionInfoKeys Name="CFBundleExecutable"/>
<VersionInfoKeys Name="CFBundleResourceSpecification"/>
<VersionInfoKeys Name="LSRequiresIPhoneOS"/>
<VersionInfoKeys Name="CFBundleInfoDictionaryVersion"/>
<VersionInfoKeys Name="CFBundleDevelopmentRegion"/>
</VersionInfoKeys>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX180.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX190.dpk
0,0 → 1,76
package DelphiX190;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi XE5'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX190.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX200.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX210.dpk
0,0 → 1,52
package DelphiX210;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi XE7'}
{$DESIGNONLY}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vclx,
vclimg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm}{$IFDEF SXEXTENSIONS},
SXReg in 'SXMedia\SXReg.pas',
MpSndSys in 'SXMedia\MpSndSys.pas',
SXAbout in 'SXMedia\SXAbout.pas' {AboutBox},
SXEditor in 'SXMedia\SXEditor.pas',
SXEngine in 'SXMedia\SXEngine.pas',
SXModPlayer in 'SXMedia\SXModPlayer.pas',
SXMovie in 'SXMedia\SXMovie.pas'{$ENDIF};
 
end.
/VCL_DELPHIX_D6/DelphiX210.dproj
0,0 → 1,160
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{578A4D41-825A-401C-AF9B-AC5829013818}</ProjectGuid>
<MainSource>DelphiX210.dpk</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>16.0</ProjectVersion>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_Description>DelphiX - DirectX components for Delphi XE7</DCC_Description>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
<DCC_E>false</DCC_E>
<DCC_ImageBase>00400000</DCC_ImageBase>
<VerInfo_Locale>1029</VerInfo_Locale>
<DCC_K>false</DCC_K>
<GenDll>true</GenDll>
<DCC_F>false</DCC_F>
<SanitizedProjectName>DelphiX210</SanitizedProjectName>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=</VerInfo_Keys>
<DCC_S>false</DCC_S>
<DesignOnlyPackage>true</DesignOnlyPackage>
<DCC_N>false</DCC_N>
<GenPackage>true</GenPackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_Optimize>false</DCC_Optimize>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="DelphiX.dcr"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="vclsmp.dcp"/>
<DCCReference Include="designide.dcp"/>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vclx.dcp"/>
<DCCReference Include="vclimg.dcp"/>
<DCCReference Include="DIB.pas"/>
<DCCReference Include="DXClass.pas"/>
<DCCReference Include="DXConsts.pas"/>
<DCCReference Include="DXDraws.pas"/>
<DCCReference Include="DXETable.pas"/>
<DCCReference Include="DXInput.pas"/>
<DCCReference Include="DXPlay.pas"/>
<DCCReference Include="DXPlayFm.pas">
<Form>DelphiXDXPlayForm</Form>
</DCCReference>
<DCCReference Include="DXRender.pas"/>
<DCCReference Include="DXReg.pas"/>
<DCCReference Include="DXSounds.pas"/>
<DCCReference Include="DXSprite.pas"/>
<DCCReference Include="DXWave.pas"/>
<DCCReference Include="DXFFBEdit.pas">
<Form>DelphiXFFEditForm</Form>
</DCCReference>
<DCCReference Include="DXGUIDEdit.pas">
<Form>DelphiXGUIDEditForm</Form>
</DCCReference>
<DCCReference Include="DXInptEdit.pas">
<Form>DelphiXInputEditForm</Form>
</DCCReference>
<DCCReference Include="DXPictEdit.pas">
<Form>DelphiXPictureEditForm</Form>
</DCCReference>
<DCCReference Include="DXWaveEdit.pas">
<Form>DelphiXWaveEditForm</Form>
</DCCReference>
<DCCReference Include="TurboPixels.pas"/>
<DCCReference Include="DXSpriteEdit.pas">
<Form>DelphiXSpriteEditForm</Form>
</DCCReference>
<DCCReference Include="DXMidiEdit.pas">
<Form>DelphiXMidiEditForm</Form>
</DCCReference>
<DCCReference Include="DXMapEditProperties.pas">
<Form>DelphiXMapEditPropertiesForm</Form>
</DCCReference>
<DCCReference Include="DXMapEdit.pas">
<Form>DelphiXMapEditForm</Form>
</DCCReference>
<DCCReference Include="DxPathEdit.pas">
<Form>DelphiXPathsEditForm</Form>
</DCCReference>
<DCCReference Include="DXGlueItEdit.pas">
<Form>DXGlueItEditor</Form>
</DCCReference>
<DCCReference Include="DXDIBEffectEdit.pas">
<Form>TDelphiXDIBEffectEditForm</Form>
</DCCReference>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">DelphiX210.dpk</Source>
</Source>
</Delphi.Personality>
<Platforms>
<Platform value="Android">False</Platform>
<Platform value="iOSDevice">False</Platform>
<Platform value="iOSSimulator">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
/VCL_DELPHIX_D6/DelphiX210.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX220.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX30.dpk
0,0 → 1,60
package DelphiX30;
 
{$R *.RES}
{$R 'DelphiX.dcr'}
{$ALIGN ON}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS OFF}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $00400000}
{$DESCRIPTION 'DelphiX - DirectX component collection for Delphi'}
{$IMPLICITBUILD ON}
 
requires
vcl30,
VCLSMP30;
 
contains
DIB,
DXClass,
DXConsts,
DXDraws,
DXETable,
DXInput,
DXPlay,
DXPlayFm,
DXRender,
DXReg,
DXSounds,
DXSprite,
DXWave,
DXFFBEdit,
DXGUIDEdit,
DXInptEdit,
DXPictEdit,
DXWaveEdit,
turbopixels,
DXSpriteEdit,
DXMidiEdit,
DXMapEdit,
DXMapEditProperties,
DXPathEdit,
DXDIBEffectEdit;
 
end.
/VCL_DELPHIX_D6/DelphiX30.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX40.dpk
0,0 → 1,62
package DelphiX40;
 
{$R *.RES}
{$R 'DelphiX.dcr'}
{$ALIGN ON}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS OFF}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $00400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi'}
{$IMPLICITBUILD ON}
 
requires
vcl40,
VCLSMP40,
vcljpg40;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
turbopixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas',
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DXPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm};
 
end.
/VCL_DELPHIX_D6/DelphiX40.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX50.dpk
0,0 → 1,62
package DelphiX50;
 
{$R *.RES}
{$R 'DelphiX.dcr'}
{$ALIGN ON}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS OFF}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi'}
{$IMPLICITBUILD ON}
 
requires
vcl50,
VCLSMP50,
vcljpg50;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
turbopixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DXPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm};
 
end.
/VCL_DELPHIX_D6/DelphiX50.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX60.dpk
0,0 → 1,64
package DelphiX60;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS OFF}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi'}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vcljpg;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DXPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm};
 
end.
/VCL_DELPHIX_D6/DelphiX60.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX70.dpk
0,0 → 1,65
package DelphiX70;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS OFF}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi'}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vcljpg,
vclx;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DXPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm};
 
end.
/VCL_DELPHIX_D6/DelphiX70.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DelphiX90.dpk
0,0 → 1,65
package DelphiX90;
 
{$R *.res}
{$R 'DelphiX.dcr'}
{$ALIGN 8}
{$ASSERTIONS OFF}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'DelphiX - DirectX components for Delphi'}
{$IMPLICITBUILD ON}
 
requires
vcl,
vclsmp,
designide,
rtl,
vcljpg,
vclx;
 
contains
DIB in 'DIB.pas',
DXClass in 'DXClass.pas',
DXConsts in 'DXConsts.pas',
DXDraws in 'DXDraws.pas',
DXETable in 'DXETable.pas',
DXInput in 'DXInput.pas',
DXPlay in 'DXPlay.pas',
DXPlayFm in 'DXPlayFm.pas' {DelphiXDXPlayForm},
DXRender in 'DXRender.pas',
DXReg in 'DXReg.pas',
DXSounds in 'DXSounds.pas',
DXSprite in 'DXSprite.pas',
DXWave in 'DXWave.pas',
DXFFBEdit in 'DXFFBEdit.pas' {DelphiXFFEditForm},
DXGUIDEdit in 'DXGUIDEdit.pas' {DelphiXGUIDEditForm},
DXInptEdit in 'DXInptEdit.pas' {DelphiXInputEditForm},
DXPictEdit in 'DXPictEdit.pas' {DelphiXPictureEditForm},
DXWaveEdit in 'DXWaveEdit.pas' {DelphiXWaveEditForm},
TurboPixels in 'TurboPixels.pas',
DXSpriteEdit in 'DXSpriteEdit.pas' {DelphiXSpriteEditForm},
DXMidiEdit in 'DXMidiEdit.pas' {DelphiXMidiEditForm},
DXMapEditProperties in 'DXMapEditProperties.pas' {DelphiXMapEditPropertiesForm},
DXMapEdit in 'DXMapEdit.pas' {DelphiXMapEditForm},
DxPathEdit in 'DxPathEdit.pas' {DelphiXPathsEditForm},
DXGlueItEdit in 'DXGlueItEdit.pas' {DXGlueItEditor},
DXDIBEffectEdit in 'DXDIBEffectEdit.pas' {TDelphiXDIBEffectEditForm};
 
end.
/VCL_DELPHIX_D6/DelphiX90.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/VCL_DELPHIX_D6/DxPathEdit.dfm
0,0 → 1,676
object DelphiXPathsEditForm: TDelphiXPathsEditForm
Left = 292
Top = 187
Width = 610
Height = 508
Caption = 'Paths Editor'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = True
Position = poScreenCenter
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Panel2: TPanel
Left = 0
Top = 74
Width = 602
Height = 381
Align = alClient
BevelOuter = bvNone
BorderWidth = 5
Caption = 'Panel2'
TabOrder = 0
object ScrollBox1: TScrollBox
Left = 5
Top = 5
Width = 592
Height = 371
Align = alClient
TabOrder = 0
object Pane: TPanel
Left = 0
Top = 0
Width = 640
Height = 480
BevelOuter = bvNone
Color = clBlack
TabOrder = 0
OnResize = PaneResize
object Image1: TImage
Left = 0
Top = 0
Width = 640
Height = 480
Cursor = crCross
Align = alClient
end
object Shape1: TShape
Left = 16
Top = 16
Width = 16
Height = 16
Brush.Color = clYellow
Pen.Color = clRed
OnMouseDown = ShapeMouseDown
OnMouseMove = ShapeMouseMove
OnMouseUp = ShapeMouseUp
end
end
end
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 602
Height = 74
Align = alTop
BevelOuter = bvNone
BorderStyle = bsSingle
TabOrder = 1
object Label1: TLabel
Left = 4
Top = 28
Width = 97
Height = 13
Caption = 'Active editing trace:'
FocusControl = cbListOfTraces
end
object LAmount: TLabel
Left = 124
Top = 28
Width = 41
Height = 13
Caption = 'Amount:'
FocusControl = eAmount
end
object Label2: TLabel
Left = 172
Top = 28
Width = 54
Height = 13
Caption = 'Show (ms):'
FocusControl = eShowOn
end
object Label3: TLabel
Left = 464
Top = 48
Width = 11
Height = 13
Caption = 'R:'
end
object cbListOfTraces: TComboBox
Left = 4
Top = 44
Width = 113
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 1
OnChange = cbListOfTracesChange
end
object eAmount: TEdit
Left = 124
Top = 44
Width = 41
Height = 21
TabOrder = 2
Text = '32'
end
object btnNewTrace: TButton
Left = 312
Top = 40
Width = 65
Height = 25
Caption = 'New Trace'
TabOrder = 5
OnClick = btnNewTraceClick
end
object eShowOn: TEdit
Left = 172
Top = 44
Width = 41
Height = 21
TabOrder = 3
Text = '25'
end
object Panel12: TPanel
Left = 0
Top = 0
Width = 521
Height = 28
BevelOuter = bvLowered
TabOrder = 0
object btnSetTimming: TSpeedButton
Left = 2
Top = 2
Width = 24
Height = 24
Hint = 'Blit show time refresh.'
AllowAllUp = True
GroupIndex = 2
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777777770000077777777700FBFBF007777770BFBFBFBFB077770BFBFBFBFBF
B07770FB0BFBFBFBF0770FBFB0BFBFBFBF070BFBFB0BFBFBFB070FBFBFB00000
0F070BFBFBFBFBFBFB070FBFBFBFBFBFBF0770FBFBFBFBFBF07770BFBFBFBFBF
B077770BFBF0FBFB077777700FBFBF0077777777700000777777}
ParentShowHint = False
ShowHint = True
OnClick = btnSetTimmingClick
end
object btnLine: TSpeedButton
Left = 32
Top = 2
Width = 24
Height = 24
Hint = 'Create line.'
AllowAllUp = True
GroupIndex = 3
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
8000008000000080800080000000800080008080000080808000C0C0C0000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00888888888888
8888888888888888888888888888888888888888888888880888888888888880
8888888888888808888888888888808888888888888808888888888888808888
8888888888088888888888888088888888888888088888888888888088888888
8888880888888888888888888888888888888888888888888888}
ParentShowHint = False
ShowHint = True
OnClick = btnLineClick
end
object btnCircle: TSpeedButton
Left = 56
Top = 2
Width = 24
Height = 24
Hint = 'Create ellipse/circle.'
AllowAllUp = True
GroupIndex = 3
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
8000008000000080800080000000800080008080000080808000C0C0C0000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00888888888888
8888888888888888888888888888888888888888888888888888888800000088
8888880088888800888880888888888808880888888888888088088888888888
8088088888888888808880888888888808888800888888008888888800000088
8888888888888888888888888888888888888888888888888888}
ParentShowHint = False
ShowHint = True
OnClick = btnLineClick
end
object btnSelectionArea: TSpeedButton
Left = 132
Top = 2
Width = 24
Height = 24
Hint = 'Selection.'
AllowAllUp = True
GroupIndex = 4
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777700000007770777777777077700000007778777777777877700000007080
8080808080807000000077788888888888777000000077708888888880777000
0000777888888888887770000000777088888888807770000000777888888888
8877700000007770888888888077700000007778888888888877700000007770
8888888880777000000077788888888888777000000070808080808080807000
0000777877777777787770000000777077777777707770000000777777777777
777770000000}
ParentShowHint = False
ShowHint = True
OnClick = btnSelectionAreaClick
end
object btnSelectAll: TSpeedButton
Left = 180
Top = 2
Width = 24
Height = 24
Hint = 'Select single.'
Enabled = False
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777700000007777000777777000700000007777000444444000700000007777
0007777770007000000077777477777777477000000000077477777777477000
0000000444777777774770000000000774777777774770000000747774777777
7747700000007477000777777000700000007477000444444000700000007477
0007747770007000000074777777747777777000000000077777000777777000
0000000444440007777770000000000777770007777770000000777777777777
777770000000}
ParentShowHint = False
ShowHint = True
end
object btnGrid: TSpeedButton
Left = 156
Top = 2
Width = 24
Height = 24
Hint = 'Show/hide grid...'
AllowAllUp = True
GroupIndex = 5
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777777877877877877777787787787787777880880880880887777877877877
8777777877877877877778808808808808877778778778778777777877877877
8777788088088088088777787787787787777778778778778777788088088088
0887777877877877877777787787787787777777777777777777}
ParentShowHint = False
ShowHint = True
OnClick = btnGridClick
end
object brnSelectAsOne: TSpeedButton
Left = 204
Top = 2
Width = 24
Height = 24
Hint = 'SSelect one.'
Enabled = False
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777700000007000777777777700000000007000774444444400000000007000
7747777777000000000077777747777777747000000077777747777777747000
0000774444477777777470000000774777477777777470000000774777477777
7774700000007747774777777774700000007747774444444444700000007747
7777774777777000000077477777774777777000000070007777774777000000
0000700044444447770000000000700077777777770000000000777777777777
777770000000}
ParentShowHint = False
ShowHint = True
end
object btnBringToFront: TSpeedButton
Left = 252
Top = 2
Width = 24
Height = 24
Hint = 'Bring to front.'
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777700000007777777777777777700000007777770000000007700000007777
7708888888077000000077777708888888077000000070000000000088077000
000070FBFBFBFBF088077000000070BFBFBFBFB088077000000070FBFBFBFBF0
88077000000070BFBFBFBFB000077000000070FBFBFBFBF077777000000070BF
BFBFBFB077777000000070FBFBFBFBF077777000000070BFBFBFBFB077777000
0000700000000000777770000000777777777777777770000000777777777777
777770000000}
ParentShowHint = False
ShowHint = True
OnClick = btnBringToFrontClick
end
object btnMoveDown: TSpeedButton
Left = 308
Top = 2
Width = 24
Height = 24
Hint = 'Move down.'
AllowAllUp = True
Flat = True
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7000777777777777700077777707777770007777706077777000777706660777
7000777066666077700077066666660770007000066600007000777706660777
7000777706660777700077770666077770007777000007777000777777777777
7000}
ParentShowHint = False
ShowHint = True
OnClick = btnMoveDownClick
end
object btnSendToBack: TSpeedButton
Left = 228
Top = 2
Width = 24
Height = 24
Hint = 'Send to back.'
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777700000007777777777777777700000007777770000000007700000007777
7708888888077000000077777708888888077000000070000008888888077000
000070FBFB08888888077000000070BFBF08888888077000000070FBFB088888
88077000000070BFBF00000000077000000070FBFBFBFBF077777000000070BF
BFBFBFB077777000000070FBFBFBFBF077777000000070BFBFBFBFB077777000
0000700000000000777770000000777777777777777770000000777777777777
777770000000}
ParentShowHint = False
ShowHint = True
OnClick = btnSendToBackClick
end
object btnMoveUp: TSpeedButton
Left = 284
Top = 2
Width = 24
Height = 24
Hint = 'Move up.'
AllowAllUp = True
Flat = True
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7000777777777777700077770000077770007777066607777000777706660777
7000777706660777700070000666000070007706666666077000777066666077
7000777706660777700077777060777770007777770777777000777777777777
7000}
ParentShowHint = False
ShowHint = True
OnClick = btnMoveUpClick
end
object btnMoveLeft: TSpeedButton
Left = 332
Top = 2
Width = 24
Height = 24
Hint = 'Move left.'
AllowAllUp = True
Flat = True
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7000777777077777700077777007777770007777060777777000777066000007
7000770666666607700070666666660770007706666666077000777066000007
7000777706077777700077777007777770007777770777777000777777777777
7000}
ParentShowHint = False
ShowHint = True
OnClick = btnMoveLeftClick
end
object btnMoveRight: TSpeedButton
Left = 356
Top = 2
Width = 24
Height = 24
Hint = 'Move right.'
AllowAllUp = True
Flat = True
Glyph.Data = {
DE000000424DDE0000000000000076000000280000000D0000000D0000000100
0400000000006800000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7000777777077777700077777700777770007777770607777000770000066077
7000770666666607700077066666666070007706666666077000770000066077
7000777777060777700077777700777770007777770777777000777777777777
7000}
ParentShowHint = False
ShowHint = True
OnClick = btnMoveRightClick
end
object btnCurve: TSpeedButton
Left = 104
Top = 2
Width = 24
Height = 24
Hint = 'Free style.'
AllowAllUp = True
GroupIndex = 3
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
8000008000000080800080000000800080008080000080808000C0C0C0000000
FF00C0C0C00000FFFF00FF000000C0C0C000FFFF0000FFFFFF00DADADADADADA
DADAADADADADAD0DADADDADADADAD0DADADAADADADAD000DADADDADADAD0D0D0
DADAADADADA0A0A0ADADDADADAD0DA00DADAADADADAD0DADADADDADADADAD0DA
DADAADAD00ADAD0DADADDAD0DA0ADA0ADADAADA0ADA0AD0DADADDADA0ADA00DA
DADAADADA0ADADADADADDADAD0DADADADADAADADA0ADADADADAD}
ParentShowHint = False
ShowHint = True
OnClick = btnLineClick
end
object btnProperties: TSpeedButton
Left = 488
Top = 2
Width = 24
Height = 24
Hint = 'Properties...'
GroupIndex = 11
Enabled = False
Flat = True
Glyph.Data = {
F6000000424DF600000000000000760000002800000010000000100000000100
0400000000008000000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777777777777777777777B387777777777777BB387777777777777BB3877777
77777777BB387777777777777BB387777777777777BB387788777777777BB388
008777777777BB300007777777777B0008877777777770008077777777770008
0B77777777700080B77777777777777777777777777777777777}
ParentShowHint = False
ShowHint = True
end
object btnRect: TSpeedButton
Left = 80
Top = 2
Width = 24
Height = 24
Hint = 'Create rectangle.'
AllowAllUp = True
GroupIndex = 3
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
7777700000007777777777777777700000007777777777777777700000007000
0000000000007000000070777777777777707000000070777777777777707000
0000707777777777777070000000707777777777777070000000707777777777
7770700000007077777777777770700000007077777777777770700000007077
7777777777707000000070777777777777707000000070777777777777707000
0000700000000000000070000000777777777777777770000000777777777777
777770000000}
ParentShowHint = False
ShowHint = True
OnClick = btnLineClick
end
object LDist: TLabel
Left = 384
Top = 7
Width = 26
Height = 13
Hint = 'Rotation distance 1..255'
Caption = 'Dist.:'
FocusControl = eDist
ParentShowHint = False
ShowHint = True
Transparent = True
end
object btnRotateLeft: TSpeedButton
Left = 440
Top = 2
Width = 24
Height = 24
Hint = 'Rotate left'
AllowAllUp = True
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
777770000000777777555555777770000000777775FBFBFB5777700000007777
5FBFBFBFB577700000007775FBFBFBFBFB5770000000775FBFBFBFBFBF577000
0000775BFBFBFBFBFBB570000000775FBFBF00BFBFF570000000775BFBFB00FF
BFB570000000775FBFB9B9BBFBF570000000775BFB9BF9FBFB57700000007775
B91FB9BFBF577000000077779B1999FBF57770000000777975BFB9BF57777000
0000709777555955777770000000700777770977777770000000777777770077
777770000000}
ParentShowHint = False
ShowHint = True
OnClick = btnRotateLeftClick
end
object btnRotateRight: TSpeedButton
Left = 464
Top = 2
Width = 24
Height = 24
Hint = 'Rotate right'
AllowAllUp = True
Flat = True
Glyph.Data = {
42010000424D4201000000000000760000002800000011000000110000000100
040000000000CC00000000000000000000001000000010000000000000000000
BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777
77777000000077777555555777777000000077775BFBFBF57777700000007775
BFBFBFBF577770000000775BFBFBFBFBF57770000000775FBFBFBFBFBF577000
000075BBFBFBFBFBFB577000000075FFBFB00FBFBF577000000075BFBFF00BFB
FB577000000075FBFBB9B9BFBF5770000000775BFBF9FB9BFB5770000000775F
BFB9BF19B577700000007775FBF9991B97777000000077775FB9BFB579777000
0000777775595557779070000000777777790777770070000000777777700777
777770000000}
ParentShowHint = False
ShowHint = True
OnClick = btnRotateRightClick
end
object eDist: TEdit
Left = 412
Top = 3
Width = 25
Height = 21
TabOrder = 0
Text = '1'
end
end
object Panel3: TPanel
Left = 518
Top = 0
Width = 80
Height = 70
Align = alRight
BevelOuter = bvNone
TabOrder = 7
object OKButton: TButton
Left = 4
Top = 8
Width = 73
Height = 25
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 0
OnClick = OKButtonClick
end
object CancelButton: TButton
Left = 4
Top = 39
Width = 73
Height = 25
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
object btnRefresh: TBitBtn
Left = 232
Top = 40
Width = 75
Height = 25
Caption = 'Refresh'
TabOrder = 4
OnClick = btnRefreshClick
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
0400000000000001000000000000000000001000000010000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
3333333333FFFFF3333333333999993333333333F77777FFF333333999999999
3333333777333777FF33339993707399933333773337F3777FF3399933000339
9933377333777F3377F3399333707333993337733337333337FF993333333333
399377F33333F333377F993333303333399377F33337FF333373993333707333
333377F333777F333333993333101333333377F333777F3FFFFF993333000399
999377FF33777F77777F3993330003399993373FF3777F37777F399933000333
99933773FF777F3F777F339993707399999333773F373F77777F333999999999
3393333777333777337333333999993333333333377777333333}
NumGlyphs = 2
end
object Button1: TBitBtn
Left = 384
Top = 40
Width = 74
Height = 25
Caption = 'Reset Sel.'
TabOrder = 6
OnClick = Button1Click
Glyph.Data = {
76010000424D7601000000000000760000002800000020000000100000000100
0400000000000001000000000000000000001000000010000000000000000000
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00500005000555
555557777F777555F55500000000555055557777777755F75555005500055055
555577F5777F57555555005550055555555577FF577F5FF55555500550050055
5555577FF77577FF555555005050110555555577F757777FF555555505099910
555555FF75777777FF555005550999910555577F5F77777775F5500505509990
3055577F75F77777575F55005055090B030555775755777575755555555550B0
B03055555F555757575755550555550B0B335555755555757555555555555550
BBB35555F55555575F555550555555550BBB55575555555575F5555555555555
50BB555555555555575F555555555555550B5555555555555575}
NumGlyphs = 2
end
end
object StatusBar1: TStatusBar
Left = 0
Top = 455
Width = 602
Height = 19
Panels = <
item
Width = 50
end
item
Width = 100
end
item
Width = 50
end>
SimplePanel = False
end
object PopupMenu1: TPopupMenu
Left = 216
Top = 64
object Activate1: TMenuItem
Caption = 'Activate'
end
end
end
/VCL_DELPHIX_D6/DxPathEdit.pas
0,0 → 1,1157
unit DXPathEdit;
//(c)2007 Jaro Benes
//All Rights Reserved
 
{
Complex application for users of unDelphiX as component editor:
 
Supported:
a) create path for default shape.
b) allow do change like move or rotate path layout.
c) create new trace by free-hand.
 
}
interface
{$INCLUDE DelphiXcfg.inc}
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus, Buttons, Math, ComCtrls,
DXClass, DXDraws, DIB;
 
type
{ TEdit }
TEdit = class(StdCtrls.TEdit) {injected class}
private
function GetAsInteger: Integer;
procedure SetAsInteger(const Value: Integer);
published
public
property AsInteger: Integer read GetAsInteger write SetAsInteger;
end;
{ TShape }
TShape = class(ExtCtrls.TShape)
procedure CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
procedure CMMouseLeave(var Msg: TMessage); message CM_MouseLeave;
end;
{ TDelphiXTracesEditForm }
TDPoint = record
X, Y: Double;
StayOn: Double;
end;
TDPointArr = array{$IFNDEF VER4UP} [0..0]{$ENDIF} of TDPoint;
{$IFNDEF VER4UP}
PDPointArr = ^TDPointArr;
{$ENDIF}
TDelphiXPathsEditForm = class(TForm)
ScrollBox1: TScrollBox;
Pane: TPanel;
Shape1: TShape;
Panel2: TPanel;
Panel1: TPanel;
Label1: TLabel;
LAmount: TLabel;
cbListOfTraces: TComboBox;
eAmount: TEdit;
btnNewTrace: TButton;
PopupMenu1: TPopupMenu;
Activate1: TMenuItem;
Label2: TLabel;
eShowOn: TEdit;
Panel12: TPanel;
btnSetTimming: TSpeedButton;
btnLine: TSpeedButton;
btnCircle: TSpeedButton;
btnSelectionArea: TSpeedButton;
btnSelectAll: TSpeedButton;
btnGrid: TSpeedButton;
brnSelectAsOne: TSpeedButton;
btnBringToFront: TSpeedButton;
btnMoveDown: TSpeedButton;
btnSendToBack: TSpeedButton;
btnMoveUp: TSpeedButton;
btnMoveLeft: TSpeedButton;
btnMoveRight: TSpeedButton;
Panel3: TPanel;
OKButton: TButton;
CancelButton: TButton;
btnCurve: TSpeedButton;
btnProperties: TSpeedButton;
btnRect: TSpeedButton;
Image1: TImage;
btnRefresh: TBitBtn;
Label3: TLabel;
StatusBar1: TStatusBar;
Button1: TBitBtn;
eDist: TEdit;
LDist: TLabel;
btnRotateLeft: TSpeedButton;
btnRotateRight: TSpeedButton;
procedure btnRotateLeftClick(Sender: TObject);
procedure btnRotateRightClick(Sender: TObject);
procedure btnMoveRightClick(Sender: TObject);
procedure btnMoveLeftClick(Sender: TObject);
procedure btnMoveDownClick(Sender: TObject);
procedure btnMoveUpClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure btnLineClick(Sender: TObject);
procedure btnGridClick(Sender: TObject);
procedure btnSelectionAreaClick(Sender: TObject);
procedure btnRefreshClick(Sender: TObject);
procedure PaneResize(Sender: TObject);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure OKButtonClick(Sender: TObject);
procedure cbListOfTracesChange(Sender: TObject);
procedure rgShapeClick(Sender: TObject);
procedure btnNewTraceClick(Sender: TObject);
procedure ShapeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure ShapeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnSendToBackClick(Sender: TObject);
procedure btnBringToFrontClick(Sender: TObject);
procedure btnSetTimmingClick(Sender: TObject);
private
{ Private declarations }
FCapture, FClicked: Boolean;
MouseDownSpot: TPoint;
LastShape: TShape;
FTracesList: TTraces;
tmpRect: TRect;
{$IFNDEF VER4UP}
tmpPointArrSize: Integer;
{$ENDIF}
tmpPointArr: {$IFNDEF VER4UP}PDPointArr{$ELSE}TDPointArr{$ENDIF};
X0, Y0, LX, LY: Integer;
IsDownNow: Boolean;
procedure btnCreateNewTrace(Sender: TObject);
procedure DoMakePoints;
procedure CreatePathFromActiveTrace(index: Integer);
function GetSizesOfTrace(out x, y, oWidth, oHeight: Integer): Boolean;
procedure RotatePathForAngle(Angle: Integer);
public
{ Public declarations }
property PrivateTraces: TTraces read FTracesList write FTracesList;
procedure ShowTracesOnPane_;
procedure RewriteTracesFromPane;
procedure ShowTracesOnPane;
procedure RefreshShowTracesOnPaneOnly;
end;
 
var
DelphiXPathsEditForm: TDelphiXPathsEditForm;
 
implementation
 
{$R *.dfm}
 
{ TEdit }
 
procedure TEdit.SetAsInteger(const Value: Integer);
begin
Self.Text := IntToStr(Value)
end;
 
function TEdit.GetAsInteger: Integer;
begin
try
Result := StrToInt(Self.Text);
except
Result := 0;
end;
end;
 
{ TShape }
 
procedure TShape.CMMouseLeave(var Msg: TMessage);
begin
Shape := stRectangle;
end;
 
procedure TShape.CMMouseEnter(var Msg: TMessage);
begin
Shape := stCircle;
end;
 
{ TDelphiXTracesEditForm }
 
procedure TDelphiXPathsEditForm.FormCreate(Sender: TObject);
begin
FTracesList := TTraces.Create(Self);
{$IFNDEF VER4UP}
tmpPointArrSize := 0;
tmpPointArr := nil;
{$ENDIF}
Image1.Picture.Bitmap.Width := Pane.Width;
Image1.Picture.Bitmap.Height := Pane.Height;
btnGrid.Click;
end;
 
procedure TDelphiXPathsEditForm.FormDestroy(Sender: TObject);
begin
{$IFNDEF VER4UP}
if tmpPointArrSize > 0 then
System.ReallocMem(tmpPointArr, 0);
{$ENDIF}
FTracesList.Free;
FTracesList := nil;
end;
 
procedure SetActiveColor(Active: Boolean; S: TShape);
begin
if Active then S.Pen.Color := clRed
else S.Pen.Color := $008080FF;
if Active then
if Active then S.Brush.Color := clYellow
else S.Brush.Color := $0095FFFF
else
if Active then S.Brush.Color := clGray
else S.Brush.Color := $00C4C4C4;
end;
 
procedure TDelphiXPathsEditForm.ShowTracesOnPane_;
var
I, J: Integer;
S: TShape;
B: Boolean;
begin
Screen.Cursor := crHourGlass;
{uvolni predchozi}
for I := ComponentCount - 1 downto 0 do
if Components[I] is TShape then with Components[I] as TShape do begin
if Parent = Pane then
Free;
end;
{projdi seznam}
for I := 0 to FTracesList.Count - 1 do begin
{slozky-udelej pomocne pole}
CreatePathFromActiveTrace(I);
B := cbListOfTraces.ItemIndex = I; {aktivni radek}
{vlastni stopy}
{$IFNDEF VER4UP}
for J := 0 to tmpPointArrSize - 1 do
{$ELSE}
for J := Low(tmpPointArr) to High(tmpPointArr) do
{$ENDIF}
begin
S := TShape.Create(Self);
//----------
S.Parent := Pane;
S.Width := 16;
S.Height := 16;
SetActiveColor(B, S);
//----------
S.Left := Round(tmpPointArr[J].X) - 8; {na stred}
S.Top := Round(tmpPointArr[J].Y) - 8; {na stred}
S.ShowHint := True;
S.Hint := FTracesList.Items[I].Name;
if Trim(S.Hint) = '' then S.Hint := Format('(unnamed[%d])', [I]);
S.ShowHint := True;
//Upravovat ale lze pouze jen tu cestu, ktera je aktivni v combobox
if cbListOfTraces.ItemIndex = I then begin
S.OnMouseDown := ShapeMouseDown;
S.OnMouseMove := ShapeMouseMove;
S.OnMouseUp := ShapeMouseUp;
end;
S.Tag := Integer(J);
 
end;
end;
btnGrid.Click;
Screen.Cursor := crDefault;
end;
 
procedure TDelphiXPathsEditForm.ShowTracesOnPane;
var
I, J, index: Integer;
S: TShape;
P: TPath;
begin
Screen.Cursor := crHourGlass;
{uvolni predchozi}
for I := ComponentCount - 1 downto 0 do
if Components[I] is TShape then with Components[I] as TShape do begin
if Parent = Pane then
Free;
end;
{projdi seznam}
for I := 0 to FTracesList.Count - 1 do begin
{slozky-udelej pomocne pole}
index := i;
if index = -1 then Exit;
{vlastni stopy}
with FTracesList.Items[index].Blit do
if GetPathCount > 0 then begin
for J := 0 to GetPathCount - 1 do
begin
S := TShape.Create(Self);
//----------
S.Parent := Pane;
S.Width := 16;
S.Height := 16;
SetActiveColor(cbListOfTraces.ItemIndex = I, S);
//----------
S.Left := Round(Path[J].X) - 8; {na stred}
S.Top := Round(Path[J].Y) - 8; {na stred}
S.ShowHint := True;
S.Hint := FTracesList.Items[I].Name;
if Trim(S.Hint) = '' then S.Hint := Format('(unnamed[%d])', [I]);
S.ShowHint := True;
//Upravovat ale lze pouze jen tu cestu, ktera je aktivni v combobox
if cbListOfTraces.ItemIndex = I then begin
S.OnMouseDown := ShapeMouseDown;
S.OnMouseMove := ShapeMouseMove;
S.OnMouseUp := ShapeMouseUp;
end;
S.Tag := Integer(J);
P := Path[J];
P.Tag := Integer(S);
Path[J] := P;
end;
end;
end;
btnGrid.Click;
Screen.Cursor := crDefault;
end;
 
procedure TDelphiXPathsEditForm.RefreshShowTracesOnPaneOnly;
var
I, J, index: Integer;
S: TShape;
// P: TPath;
begin
Screen.Cursor := crHourGlass;
{projdi seznam}
for I := 0 to FTracesList.Count - 1 do begin
{slozky-udelej pomocne pole}
index := i;
if index = -1 then Exit;
{vlastni stopy}
with FTracesList.Items[index].Blit do
if GetPathCount > 0 then begin
for J := 0 to GetPathCount - 1 do
begin
S := TShape(Path[J].Tag);
if Assigned(S) then begin
S.Left := Round(Path[J].X) - 8;
S.Top := Round(Path[J].Y) - 8;
SetActiveColor(cbListOfTraces.ItemIndex = I, S);
//----------
//Upravovat ale lze pouze jen tu cestu, ktera je aktivni v combobox
if cbListOfTraces.ItemIndex = I then begin
S.OnMouseDown := ShapeMouseDown;
S.OnMouseMove := ShapeMouseMove;
S.OnMouseUp := ShapeMouseUp;
end
else
begin
S.OnMouseDown := nil;
S.OnMouseMove := nil;
S.OnMouseUp := nil;
end;
end;
end;
end;
end;
btnGrid.Click;
Screen.Cursor := crDefault;
end;
 
procedure TDelphiXPathsEditForm.ShapeMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
M: TPoint;
begin
if FCapture and (ssLeft in Shift) then begin
TShape(Sender).Left := TShape(Sender).Left - (MouseDownSpot.x - x);
TShape(Sender).Top := TShape(Sender).Top - (MouseDownSpot.y - y);
end;
//pro zmenu velikosti
if FClicked and (ssRight in Shift) and Assigned(LastShape) then begin
M := Pane.ScreenToClient({$IFNDEF VER4UP}Point(X, Y){$ELSE}Mouse.CursorPos{$ENDIF});
LastShape.Width := M.X - LastShape.Left;
LastShape.Height := M.Y - LastShape.Top;
end;
end;
 
procedure TDelphiXPathsEditForm.ShapeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if FCapture then
begin
ReleaseCapture;
FCapture := False;
TShape(Sender).Left := TShape(Sender).Left - (MouseDownSpot.x - x);
TShape(Sender).Top := TShape(Sender).Top - (MouseDownSpot.y - y);
end;
LastShape := nil;
FClicked := False;
RewriteTracesFromPane;
ShowTracesOnPane;
Cursor := crDefault;
end;
 
procedure TDelphiXPathsEditForm.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
P: TPoint;
begin
FCapture := ssLeft in Shift;
MouseDownSpot.X := X;
MouseDownSpot.Y := Y;
FClicked := ssRight in Shift;
if FClicked and (Sender is TShape) then begin
P := TShape(Sender).ClientToScreen(Point(X, Y));
PopupMenu1.Popup(P.X, P.Y);
Exit;
end;
ShapeMouseMove(Sender, Shift, X, Y);
if (Sender is TShape) then
LastShape := TShape(Sender);
Cursor := {$IFNDEF VER4UP}crSIZE{$ELSE}crSizeAll{$ENDIF};
end;
 
procedure TDelphiXPathsEditForm.RewriteTracesFromPane;
var
I: Integer;
S: TShape;
//TT: TTracePoint;
T: TPath;
begin
for I := ComponentCount - 1 downto 0 do
if Components[I] is TShape then begin
S := Components[I] as TShape;
if S.Parent = Pane then
if S.Hint = cbListOfTraces.Text then //active item only
begin
T := PrivateTraces.Items[cbListOfTraces.ItemIndex].Blit.Path[S.Tag];
T.X := S.Left + 8;
T.Y := S.Top + 8;
{tady lze prepsat jine atributy treba Rychlost...}
PrivateTraces.Items[cbListOfTraces.ItemIndex].Blit.Path[S.Tag] := T;
end;
end;
end;
 
procedure TDelphiXPathsEditForm.btnBringToFrontClick(Sender: TObject);
var
T: TTrace;
begin
if cbListOfTraces.ItemIndex <> -1 then begin
T := FTracesList.Add;
T.Assign(FTracesList.Items[cbListOfTraces.ItemIndex]);
{$IFDEF VER5UP}
FTracesList.Delete(cbListOfTraces.ItemIndex);
{$ELSE}
FTracesList.Items[cbListOfTraces.ItemIndex].Free;
{$ENDIF}
cbListOfTraces.Items.Move(cbListOfTraces.ItemIndex, cbListOfTraces.Items.Count - 1);
cbListOfTraces.ItemIndex := cbListOfTraces.Items.Count - 1;
ShowTracesOnPane
end;
end;
 
procedure TDelphiXPathsEditForm.btnCreateNewTrace(Sender: TObject);
var
S: string;
T: TTrace;
begin
if InputQuery('Name of new Trace:', 'Trace name', S) then begin
if Trim(S) = '' then begin
ShowMessage('Name for new trace mustn''t be empty.');
Exit;
end;
if cbListOfTraces.Items.IndexOf(S) <> -1 then begin
ShowMessage('Name for new trace has to be unique.');
Exit;
end;
T := FTracesList.Add;
T.Name := S;
cbListOfTraces.Items.AddObject(S, Pointer(PrivateTraces.Count - 1));
cbListOfTraces.ItemIndex := cbListOfTraces.Items.IndexOf(S);
cbListOfTracesChange(cbListOfTraces);
end;
end;
 
procedure TDelphiXPathsEditForm.btnNewTraceClick(Sender: TObject);
begin
btnCreateNewTrace(Sender);
end;
 
procedure TDelphiXPathsEditForm.rgShapeClick(Sender: TObject);
begin
btnNewTrace.Enabled := btnLine.Down or btnCircle.Down or btnCurve.Down;
end;
 
procedure TDelphiXPathsEditForm.cbListOfTracesChange(Sender: TObject);
begin
RewriteTracesFromPane;
RefreshShowTracesOnPaneOnly
end;
 
procedure TDelphiXPathsEditForm.OKButtonClick(Sender: TObject);
begin
RewriteTracesFromPane;
Tag := 1;
end;
 
procedure TDelphiXPathsEditForm.Image1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
{zapnou se funkce pro sber}
begin
if ssleft in Shift then begin
X0 := X; LX := X;
Y0 := Y; LY := Y;
Image1.Picture.Bitmap.Canvas.Pen.Mode := pmNotXor;
Image1.Picture.Bitmap.Canvas.Pen.Color := clRed;
Image1.Picture.Bitmap.Canvas.Brush.Style := bsClear;
IsDownNow := True;
if btnCurve.Down then begin
{$IFNDEF VER4UP}
tmpPointArrSize := 1;
System.ReallocMem(tmpPointArr, tmpPointArrSize * SizeOf(TDPoint));
tmpPointArr[tmpPointArrSize - 1].X := X;
tmpPointArr[tmpPointArrSize - 1].Y := Y;
{$ELSE}
SetLength(tmpPointArr, 1);
tmpPointArr[High(tmpPointArr)].X := X;
tmpPointArr[High(tmpPointArr)].Y := Y;
{$ENDIF}
end;
end;
end;
 
procedure TDelphiXPathsEditForm.Image1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
{zabira ze plocha}
begin
if IsDownNow then with Image1.Picture.Bitmap.Canvas do begin
if btnSelectionArea.Down then begin
Rectangle(X0, Y0, LX, LY);
Rectangle(X0, Y0, X, Y);
end;
if btnLine.Down then begin
MoveTo(x0, y0);
LineTo(lx, ly);
MoveTo(x0, y0);
LineTo(x, y);
end;
if btnCircle.Down or btnRect.Down then begin
Rectangle(X0, Y0, LX, LY);
Rectangle(X0, Y0, X, Y);
end;
if btnCurve.Down then begin
if (X <> LX) or (Y <> LY) then begin
{$IFNDEF VER4UP}
Inc(tmpPointArrSize);
System.ReallocMem(tmpPointArr, tmpPointArrSize * SizeOf(TDPoint));
tmpPointArr[tmpPointArrSize - 1].X := X;
tmpPointArr[tmpPointArrSize - 1].Y := Y;
{$ELSE}
SetLength(tmpPointArr, Length(tmpPointArr) + 1);
tmpPointArr[High(tmpPointArr)].X := X;
tmpPointArr[High(tmpPointArr)].Y := Y;
{$ENDIF}
 
MoveTo(LX, LY);
LineTo(x, y);
end;
end;
LX := X;
LY := Y;
end;
StatusBar1.Panels[1].Text := Format('(x,y)=(%d,%d)', [X, Y]);
end;
 
{$IFNDEF VER4UP}
function Min(i1, i2: integer): integer;
begin
if i1 < i2 then Result := i1 else Result := i2;
end;
 
function Max(i1, i2: integer): integer;
begin
if i1 > i2 then Result := i1 else Result := i2;
end;
{$ENDIF}
 
procedure TDelphiXPathsEditForm.Image1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
{koncovy bod}
var
i, v, a, b, c: Integer;
beta, sinbeta, cosbeta, angle, step, ii, vx, vy, alpha, sinalpha, cosalpha, p, vv, a1, b1: Double;
begin
if IsDownNow then with Image1.Picture.Bitmap.Canvas do begin
if btnCurve.Down then begin
DoMakePoints;
Label3.Caption := '';
Image1.OnMouseDown := nil;
Image1.OnMouseMove := nil;
Image1.OnMouseUp := nil;
btnCurve.Down := False;
end;
if btnSelectionArea.Down then begin
if ssShift in Shift then begin
Rectangle(X0, Y0, LX, LY); //smazat
Pen.Mode := pmCopy; //napevno
v := Max(Abs(X0 - x), Abs(X0 - y));
Rectangle(X0, y0, X0 + v, Y0 + v); //vykreslit
end
else begin
Pen.Mode := pmCopy; //napevno
Rectangle(x0, y0, x, y);
end;
tmpRect := Rect(x0, y0, x, y);
Label3.Caption := Format('R:((%d,%d),(%d,%d))', [x0, y0, x, y]);
Image1.OnMouseDown := nil;
Image1.OnMouseMove := nil;
Image1.OnMouseUp := nil;
btnSelectionArea.Down := False;
end;
if btnLine.Down then begin
MoveTo(x0, y0);
LineTo(x, y);
{$IFNDEF VER4UP}
tmpPointArrSize := 2;
System.ReallocMem(tmpPointArr, tmpPointArrSize * SizeOf(TDPoint));
{$ELSE}
SetLength(tmpPointArr, 2);
{$ENDIF}
C := 0;
tmpPointArr[C].X := X0;
tmpPointArr[C].Y := Y0;
Inc(C);
tmpPointArr[C].X := X;
tmpPointArr[C].Y := Y;
DoMakePoints;
Label3.Caption := '';
Image1.OnMouseDown := nil;
Image1.OnMouseMove := nil;
Image1.OnMouseUp := nil;
btnLine.Down := False;
end;
if btnCircle.Down then begin
Rectangle(X0, Y0, LX, LY); //smazat
{$IFNDEF VER4UP}
tmpPointArrSize := eAmount.AsInteger;
System.ReallocMem(tmpPointArr, tmpPointArrSize * SizeOf(TDPoint));
{$ELSE}
SetLength(tmpPointArr, eAmount.AsInteger);
{$ENDIF}
{neni pootocena}
angle := 0;
beta := -angle / 180 * PI;
 
sinbeta := Sin(beta);
cosbeta := Cos(beta);
step := 360 / eAmount.AsInteger;
ii := 0; v := {$IFNDEF VER4UP}0{$ELSE}Low(tmpPointArr){$ENDIF};
a := Abs(LX - X0) div 2; //mayor
b := Abs(LY - Y0) div 2; //minor
vx := X0 + a; //center x
vy := Y0 + b; //center y
while ii < 360 do begin
alpha := ii / 180 * PI;
sinalpha := Sin(alpha);
cosalpha := Cos(alpha);
tmpPointArr[v].X := vx + (a * cosalpha * cosbeta - b * sinalpha * sinbeta);
tmpPointArr[v].Y := vy + (a * cosalpha * sinbeta + b * sinalpha * cosbeta);
inc(v);
ii := ii + step;
end;
DoMakePoints;
Label3.Caption := '';
Image1.OnMouseDown := nil;
Image1.OnMouseMove := nil;
Image1.OnMouseUp := nil;
btnCircle.Down := False;
end;
if btnRect.Down then begin
Rectangle(X0, Y0, LX, LY); //smazat
{$IFNDEF VER4UP}
tmpPointArrSize := eAmount.AsInteger;
System.ReallocMem(tmpPointArr, tmpPointArrSize * SizeOf(TDPoint));
{$ELSE}
SetLength(tmpPointArr, eAmount.AsInteger);
{$ENDIF}
a1 := LX - X0;
b1 := LY - Y0;
//c := 2 * (LX - X0) + 2 * (LY - Y0); //delka
ii := (2 * a1 + 2 * b1) / eAmount.AsInteger; //delka useku
//first point is here
vv := 0;
tmpPointArr[0].X := X0; p := X0;
tmpPointArr[0].Y := Y0;
{rozhodit body po obdelniku}
for I := 1 to eAmount.AsInteger - 1 do begin
p := p + ii;
vv := vv + ii;
if vv < a1 then begin
tmpPointArr[I].X := p;
tmpPointArr[I].Y := Y0;
end
else
if vv < (a1 + b1) then begin
tmpPointArr[I].X := LX;
tmpPointArr[I].Y := Y0 + (vv - a1);
end
else
if vv < (2 * a1 + b1) then begin
tmpPointArr[I].X := LX - (vv - (a1 + b1));
tmpPointArr[I].Y := LY;
end
else
if vv < (2 * a1 + 2 * b1) then begin
tmpPointArr[I].X := X0;
tmpPointArr[I].Y := LY - (vv - (2 * a1 + b1));
end;
end;
DoMakePoints;
Label3.Caption := '';
Image1.OnMouseDown := nil;
Image1.OnMouseMove := nil;
Image1.OnMouseUp := nil;
btnRect.Down := False;
end;
end;
IsDownNow := False;
end;
 
procedure TDelphiXPathsEditForm.PaneResize(Sender: TObject);
begin
Image1.Picture.Bitmap.Width := Pane.Width;
Image1.Picture.Bitmap.Height := Pane.Height;
end;
 
procedure TDelphiXPathsEditForm.DoMakePoints;
function distance2d(x1, z1, x2, z2: single): single;
var
diffx, diffz: single;
begin
diffX := x1 - x2;
diffZ := z1 - z2;
result := system.Sqrt(diffX * diffX + diffZ * diffZ);
end;
var
T: TTrace;
Q: TPath;
I, D, C: Integer;
DX, DY, TX, TY: Single;
begin
if btnLine.Down then begin
C := 0;
if {$IFNDEF VER4UP}tmpPointArrSize{$ELSE}Length(tmpPointArr){$ENDIF} = 2 then begin
D := Round(distance2d(tmpPointArr[C].X, tmpPointArr[C].Y, tmpPointArr[C + 1].X, tmpPointArr[C + 1].Y));
if cbListOfTraces.ItemIndex <> -1 then begin
{ziskej aktivni stopu}
T := PrivateTraces.Items[cbListOfTraces.ItemIndex];
T.Blit.SetPathLen(0); //smaz
{vytvoreni slozek}
{korekce, je-li bodu vic nez delka cary}
if eAmount.AsInteger > D then
eAmount.AsInteger := D;
{nastaveni velikosti cesty}
T.Blit.SetPathLen(eAmount.AsInteger);
{rozhozeni bodu na caru}
DX := (tmpPointArr[C + 1].X - tmpPointArr[C].X) / eAmount.AsInteger;
DY := (tmpPointArr[C + 1].Y - tmpPointArr[C].Y) / eAmount.AsInteger;
TX := tmpPointArr[C].X;
TY := tmpPointArr[C].Y;
for I := 1 to eAmount.AsInteger do begin
FillChar(Q, SizeOf(Q), 0);
Q.X := Round(TX + (I - 1) * DX);
Q.Y := Round(TY + (I - 1) * DY);
Q.StayOn := eShowOn.AsInteger;
T.Blit.Path[I - 1] := Q;
end;
T.Active := True;
ShowTracesOnPane;
end;
end;
end;
if btnCircle.Down or btnRect.Down or btnCurve.Down then begin
if cbListOfTraces.ItemIndex <> -1 then begin
{ziskej aktivni stopu}
T := PrivateTraces.Items[cbListOfTraces.ItemIndex];
T.Blit.SetPathLen(0); //smaz
{vytvoreni slozek}
{$IFNDEF VER4UP}
T.Blit.SetPathLen(tmpPointArrSize);
for I := 0 to tmpPointArrSize - 1 do
{$ELSE}
T.Blit.SetPathLen(Length(tmpPointArr));
for I := Low(tmpPointArr) to High(tmpPointArr) do
{$ENDIF}
begin
FillChar(Q, SizeOf(Q), 0);
Q.X := Round(tmpPointArr[I].X);
Q.Y := Round(tmpPointArr[I].Y);
Q.StayOn := eShowOn.AsInteger;
T.Blit.Path[I] := Q;
end;
T.Active := True;
ShowTracesOnPane;
end;
end;
end;
 
procedure TDelphiXPathsEditForm.btnRefreshClick(Sender: TObject);
begin
DoMakePoints;
end;
 
procedure TDelphiXPathsEditForm.btnSelectionAreaClick(Sender: TObject);
begin
Image1.OnMouseDown := Image1MouseDown;
Image1.OnMouseMove := Image1MouseMove;
Image1.OnMouseUp := Image1MouseUp;
end;
 
procedure TDelphiXPathsEditForm.btnSendToBackClick(Sender: TObject);
var
T: TTrace;
I: Integer;
begin
if cbListOfTraces.ItemIndex <> -1 then begin
T := FTracesList.Items[cbListOfTraces.ItemIndex]; //saved
//from selected to first
for I := cbListOfTraces.ItemIndex-1 downto 0 do begin
FTracesList.Items[I] := FTracesList.Items[I + 1];
end;
FTracesList.Items[0] := T;
cbListOfTraces.Items.Move(cbListOfTraces.ItemIndex, 0);
cbListOfTraces.ItemIndex := 0; {it is first now}
ShowTracesOnPane
end;
end;
 
procedure TDelphiXPathsEditForm.btnSetTimmingClick(Sender: TObject);
var
T: TTrace;
I: Integer;
P: TPath;
begin
if MessageDlg(Format('Do you want change show time to %d ms for each point ?', [eShowOn.AsInteger]), mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
{move selected path to down}
if cbListOfTraces.ItemIndex <> -1 then begin
{ziskej aktivni stopu}
T := PrivateTraces.Items[cbListOfTraces.ItemIndex];
for I := 0 to T.Blit.GetPathCount - 1 do
begin
P := T.Blit.Path[I];
P.StayOn := eShowOn.AsInteger;
T.Blit.Path[I] := P;
end;
end;
ShowTracesOnPane;
end;
end;
 
procedure TDelphiXPathsEditForm.btnGridClick(Sender: TObject);
const
ccGrid = 32;
ccShift = 16;
var I: Integer;
{$IFNDEF VER4UP}
// pp: Pointer;
{$ELSE}
pp: array of TPoint;
{$ENDIF}
begin
if btnGrid.Down then
with Image1.Picture.Bitmap.Canvas do begin
Brush.Color := clBlack;
FillRect(Bounds(0, 0, Image1.Picture.Bitmap.Width, Image1.Picture.Bitmap.Width));
Pen.Color := clDkGray;
Pen.Style := psDot;
Pen.Mode := pmCopy;
Pen.Width := 1;
for I := 0 to Image1.Picture.Bitmap.Width div ccGrid do begin
MoveTo(I * ccGrid + ccShift, 0);
LineTo(I * ccGrid + ccShift, Image1.Picture.Bitmap.Height);
end;
for I := 0 to Image1.Picture.Bitmap.Width div ccGrid do begin
MoveTo(0, I * ccGrid + ccShift);
LineTo(Image1.Picture.Bitmap.Width, I * ccGrid + ccShift);
end;
Pen.Color := clLtGray;
Pen.Style := psSolid;
Pen.Width := 1;
for I := 0 to Image1.Picture.Bitmap.Width div 32 do begin
MoveTo(I * 32, 0);
LineTo(I * 32, Image1.Picture.Bitmap.Height);
end;
for I := 0 to Image1.Picture.Bitmap.Width div 32 do begin
MoveTo(0, I * 32);
LineTo(Image1.Picture.Bitmap.Width, I * 32);
end;
end
else
with Image1.Picture.Bitmap.Canvas do begin
Brush.Color := clBlack;
FillRect(Bounds(0, 0, Image1.Picture.Bitmap.Width, Image1.Picture.Bitmap.Width));
end;
if (tmpRect.Right > 0) and (tmpRect.Bottom > 0) then
with Image1.Picture.Bitmap.Canvas do begin
Pen.Color := clGreen;
Pen.Width := 1;
Pen.Mode := pmCopy;
Brush.Style := bsClear;
{$IFDEF VER5UP}
Rectangle(tmpRect);
{$ELSE}
Rectangle(tmpRect.Left, tmpRect.Top, tmpRect.Right, tmpRect.Bottom);
{$ENDIF}
end;
with Image1.Picture.Bitmap.Canvas do begin
CreatePathFromActiveTrace(cbListOfTraces.ItemIndex);
{$IFNDEF VER4UP}
if tmpPointArrSize <= 0 then Exit;
MoveTo(Round(tmpPointArr[0].X), Round(tmpPointArr[0].Y));
for I := 1 to tmpPointArrSize - 1 do
LineTo(Round(tmpPointArr[I].X), Round(tmpPointArr[I].Y));
{$ELSE}
if Length(tmpPointArr) = 0 then Exit;
SetLength(pp, Length(tmpPointArr));
for I := Low(tmpPointArr) to High(tmpPointArr) do
pp[I] := Point(Round(tmpPointArr[I].X), Round(tmpPointArr[I].Y));
Pen.Color := clWhite;
Pen.Width := 1;
Pen.Mode := pmCopy;
Brush.Style := bsClear;
Polyline(pp);
{$ENDIF}
end;
end;
 
procedure TDelphiXPathsEditForm.btnLineClick(Sender: TObject);
begin
Image1.OnMouseDown := Image1MouseDown;
Image1.OnMouseMove := Image1MouseMove;
Image1.OnMouseUp := Image1MouseUp;
end;
 
procedure TDelphiXPathsEditForm.Button1Click(Sender: TObject);
begin
tmpRect := Rect(0, 0, 0, 0);
Label3.Caption := 'R:<none>';
end;
 
procedure TDelphiXPathsEditForm.CreatePathFromActiveTrace(index: Integer);
var
J: Integer;
begin
{$IFNDEF VER4UP}
tmpPointArrSize := 0;
System.ReallocMem(tmpPointArr, tmpPointArrSize * SizeOf(TDPoint));
{$ELSE}
SetLength(tmpPointArr, 0);
{$ENDIF}
if index = -1 then Exit;
{vlastni stopy}
with FTracesList.Items[index].Blit do
if GetPathCount > 0 then begin
{$IFNDEF VER4UP}
tmpPointArrSize := GetPathCount;
System.ReallocMem(tmpPointArr, tmpPointArrSize * SizeOf(TDPoint));
{$ELSE}
SetLength(tmpPointArr, GetPathCount);
{$ENDIF}
for J := 0 to GetPathCount - 1 do
begin
tmpPointArr[J].X := Path[J].X;
tmpPointArr[J].Y := Path[J].Y;
tmpPointArr[J].StayOn := Path[J].StayOn;
end;
end;
end;
 
procedure TDelphiXPathsEditForm.btnMoveUpClick(Sender: TObject);
var
T: TTrace;
I: Integer;
P: TPath;
begin
{move selected path to up}
if cbListOfTraces.ItemIndex <> -1 then begin
{ziskej aktivni stopu}
T := PrivateTraces.Items[cbListOfTraces.ItemIndex];
for I := 0 to T.Blit.GetPathCount - 1 do
begin
P := T.Blit.Path[I];
P.Y := P.Y - eDist.AsInteger;
T.Blit.Path[I] := P;
end;
end;
ShowTracesOnPane;
end;
 
procedure TDelphiXPathsEditForm.btnMoveDownClick(Sender: TObject);
var
T: TTrace;
I: Integer;
P: TPath;
begin
{move selected path to down}
if cbListOfTraces.ItemIndex <> -1 then begin
{ziskej aktivni stopu}
T := PrivateTraces.Items[cbListOfTraces.ItemIndex];
for I := 0 to T.Blit.GetPathCount - 1 do
begin
P := T.Blit.Path[I];
P.Y := P.Y + eDist.AsInteger;
T.Blit.Path[I] := P;
end;
end;
ShowTracesOnPane;
end;
 
procedure TDelphiXPathsEditForm.btnMoveLeftClick(Sender: TObject);
var
T: TTrace;
I: Integer;
P: TPath;
begin
{move selected path to left}
if cbListOfTraces.ItemIndex <> -1 then begin
{ziskej aktivni stopu}
T := PrivateTraces.Items[cbListOfTraces.ItemIndex];
for I := 0 to T.Blit.GetPathCount - 1 do
begin
P := T.Blit.Path[I];
P.X := P.X - eDist.AsInteger;
T.Blit.Path[I] := P;
end;
end;
ShowTracesOnPane;
end;
 
procedure TDelphiXPathsEditForm.btnMoveRightClick(Sender: TObject);
var
T: TTrace;
I: Integer;
P: TPath;
begin
{move selected path to right}
if cbListOfTraces.ItemIndex <> -1 then begin
{ziskej aktivni stopu}
T := PrivateTraces.Items[cbListOfTraces.ItemIndex];
for I := 0 to T.Blit.GetPathCount - 1 do
begin
P := T.Blit.Path[I];
P.X := P.X + eDist.AsInteger;
T.Blit.Path[I] := P;
end;
end;
ShowTracesOnPane;
end;
 
procedure Rotate(iRotAng: Single; x, y: Double; var Nx, Ny: Double);
procedure SinCosS(const Theta: Single; var Sin, Cos: Single); register;
// EAX contains address of Sin
// EDX contains address of Cos
// Theta is passed over the stack
asm
FLD Theta
FSINCOS
FSTP DWORD PTR [EDX] // cosine
FSTP DWORD PTR [EAX] // sine
end;
const PI256 = 2 * PI / 256;
var
SinVal, CosVal, RotAng: Single;
begin
RotAng := iRotAng * PI256;
SinCosS(RotAng, SinVal, CosVal);
Nx := x * CosVal - y * SinVal;
Ny := y * CosVal + x * SinVal;
end;
 
procedure RotateO(RotAng: Double; x, y, ox, oy: Double; var Nx, Ny: Double);
begin
Rotate(RotAng, x - ox, y - oy, Nx, Ny);
Nx := Nx + ox;
Ny := Ny + oy;
end;
 
function TDelphiXPathsEditForm.GetSizesOfTrace(out x, y, oWidth, oHeight: Integer): Boolean;
var
T: TTrace;
I: Integer;
P: TPath;
maxX, minX, maxY, minY: Single;
begin
Result := False;
oWidth := 0;
oHeight := 0;
maxX := 0;
minX := MaxInt;
maxY := 0;
minY := MaxInt;
if cbListOfTraces.ItemIndex <> -1 then begin
{ziskej aktivni stopu}
T := PrivateTraces.Items[cbListOfTraces.ItemIndex];
for I := 0 to T.Blit.GetPathCount - 1 do
begin
P := T.Blit.Path[I];
if P.X > maxX then maxX := P.X;
if P.Y > maxY then maxY := P.Y;
if P.X < minX then minX := P.X;
if P.Y < minY then minY := P.Y;
end;
x := Round(minX);
y := Round(minY);
oWidth := Abs(Round(maxX) - Round(minX));
oHeight := Abs(Round(maxY) - Round(minY));
Result := True;
end;
end;
 
procedure TDelphiXPathsEditForm.RotatePathForAngle(Angle: Integer);
var
T: TTrace;
I, x, y, width, height: Integer;
P: TPath;
nX, nY, dX, dY: Double;
begin
if GetSizesOfTrace(x, y, Width, Height) then
begin
dX := (x + width / 2);
dY := (y + height / 2);
T := PrivateTraces.Items[cbListOfTraces.ItemIndex];
for I := 0 to T.Blit.GetPathCount - 1 do
begin
P := T.Blit.Path[I];
RotateO(Angle, P.X, P.Y, dX, dY, nX, nY);
P.X := nX;
P.Y := nY;
T.Blit.Path[I] := P;
end;
end;
end;
 
procedure TDelphiXPathsEditForm.btnRotateLeftClick(Sender: TObject);
begin
RotatePathForAngle(-1 * eDist.AsInteger);
RefreshShowTracesOnPaneOnly
end;
 
procedure TDelphiXPathsEditForm.btnRotateRightClick(Sender: TObject);
begin
RotatePathForAngle(eDist.AsInteger);
RefreshShowTracesOnPaneOnly
end;
 
end.
/VCL_DELPHIX_D6/turbopixels.pas
0,0 → 1,937
unit turbopixels;
 
// turboPixels 1.2
// for use with DelphiX DirectX Headers and Components
 
// (c) 2000 Michael Wilson -- no.2 games
// www.no2games.com & turbo.gamedev.net
// wilson@no2games.com
 
// 1.2 Features:
// DelphiX 7 support
// Powered by PixelCore release
// PixelCore ASM routines by Henri Hakl aka A-Lore
// Updated WinAmp font routine
 
// 1.1 Features:
// Incorporated ASM conversion by LifePower
// Incorporated ASM putpixels by JerK
// Added non-RGB versions of 8/16/24 PutPixels
// Faster clipping and no surface passing
// Auto 565 and 555 detection that works!!!
// Re-oganized demo for more speed and FPS counter
 
// 1.0 Inital release
 
// [ Credits and thanks... ]
// Based on FastPixels v0.2 for DelphiX -- but faster ;)
// 24-bit put loosely based on Erik Englund's Setpixel.pas
// Thanks to Tim Baumgarten for some bit shifting ideas
// Thanks to John Hebert for teaching me AlphaBlending
// Thanks to Hugo for introducing me to Wu
// ASM conversion routines by LifePower (faster...)
// ASM put routines by JerK (jdelauney@free.fr)
// PixelCore ASM routines by Henri Hakl aka A-Lore
// Font from a WinAmp skin
// Windows SDK help for confusing me about RGB values
 
// [ Legal ]
// THIS SOFTWARE AND THE ACCOMPANYING FILES
// ARE WITHOUT WARRANTIES AS TO PERFORMANCE
// OR MERCHANTABILITY OR ANY OTHER WARRANTIES
// WHETHER EXPRESSED OR IMPLIED.
// Because of the various hardware and software
// environments into which turboPixels may be put,
// NO WARRANTY OF FITNESS FOR A PARTICULAR
// PURPOSE IS OFFERED.
 
 
interface
{$INCLUDE DelphiXcfg.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics,
DXDraws, DXClass,
{$IfDef StandardDX}
DirectDraw;
{$Else}
DirectX;
{$EndIf}
 
const
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ"at 0123456789<>=()-''!_+\/{}^&%.=$#ÅÖÄ?*';
numbers = '0123456789-';
 
// *** locking functions ***
 
function turboLock(DxDrawSurface: TDirectDrawSurface): Boolean;
procedure turboUnlock;
 
// *** pixel manipulation ***
 
procedure turboSetPixel8(const X, Y: Integer; color: byte);
procedure turboSetPixel8A(const X, Y: Integer; color: Integer);
procedure turboSetPixel8PC(x, y, color: integer);
procedure turboSetPixel16RGB(const X, Y: Integer; R, G, B: byte);
procedure turboSetPixel24RGB(const X, Y: Integer; R, G, B: byte);
procedure turboSetPixel16(const X, Y: integer; color: cardinal);
procedure turboSetPixel16A(X, Y: Integer; color: cardinal);
procedure turboSetPixel16PC(x, y, color: integer);
procedure turboSetPixel32PC(x, y, color: integer);
procedure turboSetPixel24(const X, Y: integer; color: cardinal);
procedure turboSetPixel24A(X, Y: Integer; Color: cardinal);
procedure turboSetPixel24PC(x, y, color: integer);
function turboGetPixel8(const X, Y: Integer): byte;
function turboGetPixel8PC(x, y: integer): integer;
function turboGetPixel16(const x, y: Integer): cardinal;
function turboGetPixel16PC(x, y: integer): integer;
function r16(color: cardinal): byte;
function g16(color: cardinal): byte;
function b16(color: cardinal): byte;
function turboGetPixel24(const x, y: Integer): dword;
function turboGetPixel24PC(x, y: integer): integer;
function r24(color: cardinal): byte;
function g24(color: cardinal): byte;
function b24(color: cardinal): byte;
function turboGetPixel32PC(x, y: integer): integer;
procedure turboSetPixelAlpha16(const X, Y: Integer; color: cardinal; A: byte);
procedure turboSetPixelAlpha24(const X, Y: Integer; color: cardinal; A: byte);
procedure turboSetPixelAlpha16RGB(const X, Y: Integer; R, G, B, A: byte);
procedure turboSetPixelAlpha24RGB(const X, Y: Integer; R, G, B, A: byte);
function Conv15to24(Color: Word): Integer; register;
function Conv16to24(Color: Word): Integer; register;
function Conv24to15(Color: Integer): Word; register;
function Conv24to16(Color: Integer): Word; register;
 
// *** graphic primitives ***
 
procedure turboLine16(x1, y1, x2, y2: Integer; R, G, B: byte);
procedure turboLine24(x1, y1, x2, y2: Integer; R, G, B: byte);
procedure turboWuLine16(x1, y1, x2, y2: Integer; R, G, B: byte);
procedure turboWuLine24(x1, y1, x2, y2: Integer; R, G, B: byte);
procedure turboWrite(DxDrawSurface: TDirectDrawSurface; Imagelist: TDXImageList; font, text: string; x, y: integer);
procedure turboWriteD(DxDrawSurface: TDirectDrawSurface; Imagelist: TDXImageList; font, text: string; x, y: integer);
 
implementation
 
var
LockedSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface4{$ELSE}IDirectDrawSurface7{$ENDIF};
LockedSurfaceDesc: TDDSurfaceDesc2;
LockedRect: TRect;
bitfix: cardinal; // for 555 or 565
xmax, ymax: integer; // clipping
 
function turboLock(DxDrawSurface: TDirectDrawSurface): Boolean;
begin
LockedSurface := DxDrawSurface.{$IFDEF D3D_deprecated}ISurface4{$ELSE}ISurface7{$ENDIF};
LockedSurfaceDesc.dwSize := SizeOf(TDDSurfaceDesc);
LockedRect := Rect(0, 0, LockedSurfaceDesc.dwWidth,
LockedSurfaceDesc.dwHeight);
if LockedSurface.Lock(@LockedRect, // do the lock
LockedSurfaceDesc,
DDLOCK_SURFACEMEMORYPTR + DDLOCK_WAIT,
0) <> DD_OK
then Result := False
else Result := True;
xmax := DxDrawSurface.Width - 1; // Max X clip
ymax := DxDrawSurface.Height - 1; // Max Y clip
if LockedSurfaceDesc.ddpfPixelFormat.dwGBitMask = 2016 // if there are 6 bits
then bitfix := 0 else bitfix := 1; // of GREEN were looking at 565
end;
 
procedure turboUnlock;
begin
LockedSurface.Unlock(@LockedRect);
LockedSurface := nil; // free locked surface
end;
 
procedure turboSetPixel8(const X, Y: Integer; color: byte);
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
pbyte(integer(LockedSurfaceDesc.lpsurface) + // surface pointer
y * LockedSurfaceDesc.lpitch + x)^ := color; // offset for 1 byte pixel
end;
 
procedure turboSetPixel8A(const X, Y: Integer; color: Integer); assembler;
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
asm
push ebx // ASM put routines by JerK (jdelauney@free.fr)
push esi // Don't seem much faster
push edi
mov esi,LockedSurfaceDesc.lpSurface
mov eax,[LockedSurfaceDesc.lpitch]
mul [Y]
add esi,eax
mov ebx,[X]
add esi,ebx
mov ebx,[Color]
mov ds:[esi],ebx
pop edi
pop esi
pop ebx
end;
end;
 
procedure turboSetPixel16RGB(const X, Y: Integer; R, G, B: byte);
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
pword(integer(LockedSurfaceDesc.lpsurface) + // surface pointer
y * LockedSurfaceDesc.lpitch + x * 2)^ := // offset for *2* byte pixel
((R shr 3) shl (11 - bitfix)) or // r value shifted
((G shr (2 + bitfix)) shl 5) or // g value shifted
(B shr 3); // add blue
end;
 
procedure turboSetPixel24RGB(const X, Y: Integer; R, G, B: byte);
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
pdword(integer(LockedSurfaceDesc.lpsurface) + // surface pointer
y * LockedSurfaceDesc.lpitch + x * 3)^ :=
(r shl 16) or (g shl 8) or b; // Could use RGB(r,g,b)
end;
 
procedure turboSetPixel16(const X, Y: integer; color: cardinal);
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
if bitfix = 0 then
pword(integer(LockedSurfaceDesc.lpsurface) + // surface pointer
y * LockedSurfaceDesc.lpitch + x * 2)^ := // offset for *2* byte pixel
Conv24to16(color)
else
pword(integer(LockedSurfaceDesc.lpsurface) + // surface pointer
y * LockedSurfaceDesc.lpitch + x * 2)^ := // offset for *2* byte pixel
Conv24to15(color);
// ((R16(color) shr 3) shl (11 - bitfix)) or // r value shifted
// ((G16(color) shr (2 + bitfix)) shl 5) or // g value shifted
// (B16(color) shr 3); // add blue
end;
 
procedure turboSetPixel16A(X, Y: Integer; Color: cardinal); assembler;
var
convertedcolor: integer;
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
if bitfix = 0 then
convertedcolor := Conv24to16(color)
else
convertedcolor := Conv24to15(color);
asm
push ebx // ASM put routines by JerK (jdelauney@free.fr)
push esi
push edi
mov esi,LockedSurfaceDesc.lpSurface
mov eax,[LockedSurfaceDesc.lpitch]
mul [Y]
add esi,eax
mov ebx,[X]
shl ebx,1
add esi,ebx
mov ebx,[convertedcolor]
mov ds:[esi],ebx
pop edi
pop esi
pop ebx
end;
end;
 
procedure turboSetPixel24(const X, Y: Integer; color: cardinal);
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
pdword(integer(LockedSurfaceDesc.lpsurface) + // surface pointer
y * LockedSurfaceDesc.lpitch + x * 3)^ :=
color;
end;
 
procedure turboSetPixel24A(X, Y: Integer; Color: cardinal); assembler;
begin
asm
push ebx // ASM put routines by JerK (jdelauney@free.fr)
push esi
push edi
mov esi,LockedSurfaceDesc.lpSurface
mov eax,[LockedSurfaceDesc.lpitch]
mul [Y]
add esi,eax
mov ebx,[X]
imul ebx,3
add esi,ebx
mov ebx,[Color]
mov ds:[esi],ebx
pop edi
pop esi
pop ebx
end;
end;
 
function turboGetPixel8(const X, Y: Integer): byte;
begin
result := 0;
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
result := pbyte(integer(LockedSurfaceDesc.lpsurface) + // surface pointer
y * LockedSurfaceDesc.lpitch + x)^; // offset for 1 byte pixel
end;
 
function turboGetPixel16(const x, y: Integer): cardinal;
begin
result := 0;
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
result := pword(integer(LockedSurfaceDesc.lpsurface) + // surface pointer
y * LockedSurfaceDesc.lpitch + x * 2)^;
end;
 
function r16(color: cardinal): byte;
begin;
result := (color shr (11 - bitfix)) shl 3;
end;
 
function g16(color: cardinal): byte;
begin;
if bitfix = 0 then
result := ((color and 2016) shr 5) shl 2
else
result := ((color and 992) shr 5) shl 3;
end;
 
function b16(color: cardinal): byte;
begin;
result := (color and 31) shl 3;
end;
 
function turboGetPixel24(const x, y: Integer): dword;
begin
result := 0;
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
result := pdword(integer(LockedSurfaceDesc.lpsurface) + // surface pointer
y * LockedSurfaceDesc.lpitch + x * 3)^;
end;
 
function r24(color: cardinal): byte;
begin;
result := (color shr 16) and 255; // or GetRValue(color);
end;
 
function g24(color: cardinal): byte;
begin;
result := (color shr 8) and 255; // or GetGValue(color);
end;
 
function b24(color: cardinal): byte;
begin;
// Some video boards may return a blue value in the first byte
// i.e. result := color and 255;
result := (color shr 24) and 255; // or GetBValue(color);
end;
 
procedure turboSetPixelAlpha16RGB(const X, Y: Integer; R, G, B, A: byte);
var color: integer;
begin
// This function could use a lot of speed work, but it's faster than
// alpha blending Canvas.Pixels ;) but Hori's FillRectAdd is faster
// for large areas
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
color := turboGetPixel16(x, y); // get "color"
turboSetPixel16RGB(X, Y, // set new pixel
(A * (R - r16(color)) shr 8) + r16(color), // R alpha
(A * (G - g16(color)) shr 8) + g16(color), // G alpha
(A * (B - b16(color)) shr 8) + b16(color)); // B alpha
end;
 
procedure turboSetPixelAlpha24RGB(const X, Y: Integer; R, G, B, A: byte);
var color: dword;
begin
// This function could use a lot of speed work, but it's faster than
// alpha blending Canvas.Pixels ;) but Hori's FillRectAdd is faster
// for large areas
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
color := turboGetPixel24(x, y); // get "color"
turboSetPixel24RGB(X, Y, // set new pixel
(A * (R - r24(color)) shr 8) + r24(color), // R alpha
(A * (G - g24(color)) shr 8) + g24(color), // G alpha
(A * (B - b24(color)) shr 8) + b24(color)); // B alpha
end;
 
 
procedure turboSetPixelAlpha16(const X, Y: Integer; color: cardinal; A: byte);
var oldcolor: integer;
begin
// This function could use a lot of speed work, but it's faster than
// alpha blending Canvas.Pixels ;) but Hori's FillRectAdd is faster
// for large areas
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
oldcolor := turboGetPixel16(x, y); // get old color
turboSetPixel16RGB(X, Y, // set new pixel
(A * (r16(color) - r16(oldcolor)) shr 8) + r16(oldcolor), // R alpha
(A * (g16(color) - g16(oldcolor)) shr 8) + g16(oldcolor), // G alpha
(A * (b16(color) - b16(oldcolor)) shr 8) + b16(oldcolor)); // B alpha
end;
 
procedure turboSetPixelAlpha24(const X, Y: Integer; color: cardinal; A: byte);
var oldcolor: dword;
begin
// This function could use a lot of speed work, but it's faster than
// alpha blending Canvas.Pixels ;) but Hori's FillRectAdd is faster
// for large areas
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
oldcolor := turboGetPixel24(x, y); // get "color"
turboSetPixel24RGB(X, Y, // set new pixel
(A * (r24(color) - r24(oldcolor)) shr 8) + r24(oldcolor), // R alpha
(A * (g24(color) - g24(oldcolor)) shr 8) + g24(oldcolor), // G alpha
(A * (b24(color) - b24(oldcolor)) shr 8) + b24(oldcolor)); // B alpha
end;
 
// *** ASM pixel routines straight from PixelCore by Henri Hakl aka A-Lore ***
// *** Surface clipping added by Michael Wilson 09/07/2000
 
procedure turboSetPixel8PC(x, y, color: integer);
{ on entry: x = eax, y = edx, color = ecx }
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
asm
push esi // must maintain esi
mov esi,LockedSurfaceDesc.lpSurface // set to surface
add esi,eax // add x
mov eax,[LockedSurfaceDesc.lpitch] // eax = pitch
mul edx // eax = pitch * y
add esi,eax // esi = pixel offset
mov ds:[esi],cl // set pixel (lo byte of ecx)
pop esi // restore esi
ret // return
end;
end;
 
procedure turboSetPixel16PC(x, y, color: integer);
{ on entry: x = eax, y = edx, color = ecx }
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
asm
push esi
mov esi,LockedSurfaceDesc.lpSurface
shl eax,1
add esi,eax // description similar to PutPixel8
mov eax,[LockedSurfaceDesc.lpitch]
mul edx
add esi,eax
mov ds:[esi],cx
pop esi
ret
end;
end;
 
procedure turboSetPixel24PC(x, y, color: integer);
{ on entry: x = eax, y = edx, color = ecx }
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
asm
push esi
mov esi,LockedSurfaceDesc.lpSurface
imul eax,3
add esi,eax // description similar to PutPixel8
mov eax,[LockedSurfaceDesc.lpitch]
mul edx
add esi,eax
mov eax,ds:[esi] // the idea is to get the current pixel
and eax,$ff000000 // and the top 8 bits of next pixel (red component)
or ecx,eax // then bitwise OR that component to the current color
mov ds:[esi+1],ecx // to ensure the prior bitmap isn't incorrectly manipulated
pop esi // can't test if it works... so hope and pray
ret
end;
end;
 
procedure turboSetPixel32PC(x, y, color: integer);
{ on entry: x = eax, y = edx, color = ecx }
begin
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
asm
push esi
mov esi,LockedSurfaceDesc.lpSurface
shl eax,2
add esi,eax // description similar to PutPixel8
mov eax,[LockedSurfaceDesc.lpitch]
mul edx
add esi,eax
mov ds:[esi],ecx
pop esi
ret
end;
end;
 
function turboGetPixel8PC(x, y: integer): integer;
{ on entry: x = eax, y = edx }
begin
Result := -1;
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
asm
push esi // myst maintain esi
mov esi,LockedSurfaceDesc.lpSurface // set to surface
add esi,eax // add x
mov eax,[LockedSurfaceDesc.lpitch] // eax = pitch
mul edx // eax = pitch * y
add esi,eax // esi = pixel offset
mov eax,ds:[esi] // eax = color
and eax,$ff // map into 8bit
pop esi // restore esi
ret // return
end;
end;
 
function turboGetPixel16PC(x, y: integer): integer;
{ on entry: x = eax, y = edx }
begin
Result := -1;
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
asm
push esi
mov esi,LockedSurfaceDesc.lpSurface
shl eax,1
add esi,eax // description similar to GetPixel8
mov eax,[LockedSurfaceDesc.lpitch]
mul edx
add esi,eax
mov eax,ds:[esi]
and eax,$ffff // map into 16bit
pop esi
ret
end;
end;
 
function turboGetPixel24PC(x, y: integer): integer;
{ on entry: x = eax, y = edx }
begin
Result := -1;
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
asm
push esi
mov esi,LockedSurfaceDesc.lpSurface
imul eax,3
add esi,ebx // description similar to GetPixel8
mov eax,[LockedSurfaceDesc.lpitch]
mul edx
add esi,eax
mov eax,ds:[esi]
and eax,$ffffff // map into 24bit
pop esi
ret
end;
end;
 
function turboGetPixel32PC(x, y: integer): integer;
{ on entry: x = eax, y = edx }
begin
Result := -1;
if (X < 0) or (X > xmax) or // Clip to DelphiX Surface
(Y < 0) or (Y > ymax) then Exit;
asm
push esi
mov esi,LockedSurfaceDesc.lpSurface
shl eax,2
add esi,eax // description similar to GetPixel8
mov eax,[LockedSurfaceDesc.lpitch]
mul edx
add esi,eax
mov eax,ds:[esi]
pop esi
ret
end;
end;
 
// *** end of Pixel Core routines
 
procedure turboLine16(x1, y1, x2, y2: Integer; R, G, B: byte);
var
i, deltax, deltay, numpixels,
d, dinc1, dinc2, x, xinc1, xinc2,
y, yinc1, yinc2: integer;
begin
deltax := abs(x2 - x1); // Calculate deltax and deltay for initialisation
deltay := abs(y2 - y1);
if deltax >= deltay then // Initialize all vars based on which is the independent variable
begin
numpixels := deltax + 1; // x is independent variable
d := (2 * deltay) - deltax;
dinc1 := deltay shl 1;
dinc2 := (deltay - deltax) shl 1;
xinc1 := 1;
xinc2 := 1;
yinc1 := 0;
yinc2 := 1;
end
else
begin
numpixels := deltay + 1; // y is independent variable
d := (2 * deltax) - deltay;
dinc1 := deltax shl 1;
dinc2 := (deltax - deltay) shl 1;
xinc1 := 0;
xinc2 := 1;
yinc1 := 1;
yinc2 := 1;
end;
if x1 > x2 then // Make sure x and y move in the right directions
begin
xinc1 := -xinc1;
xinc2 := -xinc2;
end;
if y1 > y2 then
begin
yinc1 := -yinc1;
yinc2 := -yinc2;
end;
x := x1; // Start drawing at <x1, y1>
y := y1;
for i := 1 to numpixels do // Draw the pixels
begin
turboSetPixel16RGB(X, Y, R, G, B);
if d < 0 then
begin
d := d + dinc1;
x := x + xinc1;
y := y + yinc1;
end
else
begin
d := d + dinc2;
x := x + xinc2;
y := y + yinc2;
end;
end;
end;
 
procedure turboLine24(x1, y1, x2, y2: Integer; R, G, B: byte);
var
i, deltax, deltay, numpixels,
d, dinc1, dinc2, x, xinc1, xinc2,
y, yinc1, yinc2: integer;
begin
deltax := abs(x2 - x1); // Calculate deltax and deltay for initialisation
deltay := abs(y2 - y1);
if deltax >= deltay then // Initialize all vars based on which is the independent variable
begin
numpixels := deltax + 1; // x is independent variable
d := (2 * deltay) - deltax;
dinc1 := deltay shl 1;
dinc2 := (deltay - deltax) shl 1;
xinc1 := 1;
xinc2 := 1;
yinc1 := 0;
yinc2 := 1;
end
else
begin
numpixels := deltay + 1; // y is independent variable
d := (2 * deltax) - deltay;
dinc1 := deltax shl 1;
dinc2 := (deltax - deltay) shl 1;
xinc1 := 0;
xinc2 := 1;
yinc1 := 1;
yinc2 := 1;
end;
if x1 > x2 then // Make sure x and y move in the right directions
begin
xinc1 := -xinc1;
xinc2 := -xinc2;
end;
if y1 > y2 then
begin
yinc1 := -yinc1;
yinc2 := -yinc2;
end;
x := x1; // Start drawing at <x1, y1>
y := y1;
for i := 1 to numpixels do // Draw the pixels
begin
turboSetPixel24RGB(X, Y, R, G, B);
if d < 0 then
begin
d := d + dinc1;
x := x + xinc1;
y := y + yinc1;
end
else
begin
d := d + dinc2;
x := x + xinc2;
y := y + yinc2;
end;
end;
end;
 
procedure turboWuLine16(x1, y1, x2, y2: Integer; R, G, B: byte);
var
deltax, deltay, loop, start, finish: integer;
dx, dy, dydx: single; // fractional parts
begin
deltax := abs(x2 - x1); // Calculate deltax and deltay for initialisation
deltay := abs(y2 - y1);
if (deltax = 0) or (deltay = 0) then begin // straight lines
turboLine16(x1, y1, x2, y2, R, G, B);
exit;
end;
if deltax > deltay then // horizontal or verticle
begin
if y2 > y1 then // determine rise and run
dydx := -(deltay / deltax)
else
dydx := deltay / deltax;
if x2 < x1 then
begin
start := x2; // right to left
finish := x1;
dy := y2;
end
else
begin
start := x1; // left to right
finish := x2;
dy := y1;
dydx := -dydx; // inverse slope
end;
for loop := start to finish do begin
turboSetPixelAlpha16RGB(loop, trunc(dy), R, G, B,
trunc((1 - frac(dy)) * 255)); // plot main point
turboSetPixelAlpha16RGB(loop, trunc(dy) + 1, R, G, B,
trunc(frac(dy) * 255)); // plot fractional difference
dy := dy + dydx; // next point
end;
end
else
begin
if x2 > x1 then // determine rise and run
dydx := -(deltax / deltay)
else
dydx := deltax / deltay;
if y2 < y1 then
begin
start := y2; // right to left
finish := y1;
dx := x2;
end
else
begin
start := y1; // left to right
finish := y2;
dx := x1;
dydx := -dydx; // inverse slope
end;
for loop := start to finish do begin
turboSetPixelAlpha16RGB(trunc(dx), loop, R, G, B,
trunc((1 - frac(dx)) * 255)); // plot main point
turboSetPixelAlpha16RGB(trunc(dx) + 1, loop, R, G, B,
trunc(frac(dx) * 255)); // plot fractional difference
dx := dx + dydx; // next point
end;
end;
end;
 
procedure turboWuLine24(x1, y1, x2, y2: Integer; R, G, B: byte);
var
deltax, deltay, loop, start, finish: integer;
dx, dy, dydx: single; // fractional parts
begin
deltax := abs(x2 - x1); // Calculate deltax and deltay for initialisation
deltay := abs(y2 - y1);
if (deltax = 0) or (deltay = 0) then begin // straight lines
turboLine24(x1, y1, x2, y2, R, G, B);
exit;
end;
if deltax > deltay then // horizontal or verticle
begin
if y2 > y1 then // determine rise and run
dydx := -(deltay / deltax)
else
dydx := deltay / deltax;
if x2 < x1 then
begin
start := x2; // right to left
finish := x1;
dy := y2;
end
else
begin
start := x1; // left to right
finish := x2;
dy := y1;
dydx := -dydx; // inverse slope
end;
for loop := start to finish do begin
turboSetPixelAlpha24RGB(loop, trunc(dy), R, G, B,
trunc((1 - frac(dy)) * 255)); // plot main point
turboSetPixelAlpha24RGB(loop, trunc(dy) + 1, R, G, B,
trunc(frac(dy) * 255)); // plot fractional difference
dy := dy + dydx; // next point
end;
end
else
begin
if x2 > x1 then // determine rise and run
dydx := -(deltax / deltay)
else
dydx := deltax / deltay;
if y2 < y1 then
begin
start := y2; // right to left
finish := y1;
dx := x2;
end
else
begin
start := y1; // left to right
finish := y2;
dx := x1;
dydx := -dydx; // inverse slope
end;
for loop := start to finish do begin
turboSetPixelAlpha24RGB(trunc(dx), loop, R, G, B,
trunc((1 - frac(dx)) * 255)); // plot main point
turboSetPixelAlpha24RGB(trunc(dx) + 1, loop, R, G, B,
trunc(frac(dx) * 255)); // plot fractional difference
dx := dx + dydx; // next point
end;
end;
end;
 
// *** ASM conversion routines by LifePower ***
 
function Conv15to24(Color: Word): Integer; register;
asm
xor edx,edx // not used in LIB
mov dx,ax // ASM code by LifePower
mov eax,edx
shl eax,27
shr eax,8
mov ecx,edx
shr ecx,5
shl ecx,27
shr ecx,16
or eax,ecx
mov ecx,edx
shr ecx,10
shl ecx,27
shr ecx,24
or eax,ecx
end;
 
function Conv16to24(Color: Word): Integer; register;
asm
xor edx,edx // not used in LIB
mov dx,ax // ASM code by LifePower
mov eax,edx
shl eax,27
shr eax,8
mov ecx,edx
shr ecx,5
shl ecx,26
shr ecx,16
or eax,ecx
mov ecx,edx
shr ecx,11
shl ecx,27
shr ecx,24
or eax,ecx
end;
 
function Conv24to15(Color: Integer): Word; register;
asm
mov ecx,eax // ASM code by LifePower
shl eax,24
shr eax,27
shl eax,10
mov edx,ecx
shl edx,16
shr edx,27
shl edx,5
or eax,edx
mov edx,ecx
shl edx,8
shr edx,27
or eax,edx
end;
 
function Conv24to16(Color: Integer): Word; register;
asm
mov ecx,eax // ASM code by LifePower
shl eax,24
shr eax,27
shl eax,11
mov edx,ecx
shl edx,16
shr edx,26
shl edx,5
or eax,edx
mov edx,ecx
shl edx,8
shr edx,27
or eax,edx
end;
 
procedure turboWrite(DxDrawSurface: TDirectDrawSurface; Imagelist: TDXImageList; font, text: string; x, y: integer);
var
loop, line, letter, offset, i: integer;
begin
i := Imagelist.items.IndexOf(font); // find font once
offset := Imagelist.items[i].patternwidth;
line := 1;
for loop := 1 to Length(text) do
begin { each letter }
if text[loop] = '|' then // fake a <P>
begin
inc(y, Imagelist.items[i].patternheight + 1);
line := 1;
end
else begin
letter := pos(uppercase(text[loop]), alphabet) - 1;
if letter < 0 then letter := 30;
Imagelist.items[i].draw(DxDrawSurface, x + (offset * line), y, letter);
inc(line);
end;
end; { loop }
end; { graphics write }
 
procedure turboWriteD(DxDrawSurface: TDirectDrawSurface; Imagelist: TDXImageList; font, text: string; x, y: integer);
var
loop, line, letter, offset, i: integer;
begin
i := Imagelist.items.IndexOf(font); // find font once
offset := Imagelist.items[i].patternwidth;
line := 1;
for loop := 1 to Length(text) do
begin { each letter }
if text[loop] = '|' then // fake a <P>
begin
inc(y, Imagelist.items[i].patternheight + 1);
line := 1;
end
else begin
letter := pos(uppercase(text[loop]), numbers) - 1;
if letter < 0 then letter := 30;
Imagelist.items[i].draw(DxDrawSurface, x + (offset * line), y, letter);
inc(line);
end;
end; { loop }
end; { graphics write digits }
 
end.
 

/VCL_DELPHIX_D6
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/ComLevelReader.pas
0,0 → 1,763
unit ComLevelReader;
 
interface
 
uses
Classes;
 
type
// If you add a new enemy or item, please edit
// - ComLevelReader.pas : EnemyTypeHasLives()
// - GamMain.pas : TMainForm.SceneMain
// - LevMain.pas : * GUI
// * TMainForm.SelectedEnemyType
// * TEnemyOrItem.Create
// * TMainForm.DXDrawMouseMove
// * TMainForm.DXDrawMouseDown
// - Add integer type to OIDplus: https://hosted.oidplus.com/viathinksoft/?goto=oid%3A1.3.6.1.4.1.37476.2.8.10
TEnemyType = (
etUnknown,
etEnemyAttacker,
etEnemyAttacker2,
etEnemyAttacker3,
etEnemyMeteor,
etEnemyUFO,
etEnemyUFO2,
etEnemyBoss,
etItemMedikit
);
 
TEnemyAdvent = record
enemyType: TEnemyType;
x: integer;
y: integer;
lifes: integer;
end;
 
TLevelData = class(TPersistent)
strict private
procedure SortEnemies;
strict protected
procedure AssignTo(Dest: TPersistent); override;
public
RasterErzwingen: boolean;
LevelEditorLength: integer;
LevelName: string;
LevelAuthor: string;
EnemyAdventTable: array of TEnemyAdvent;
function IndexOfEnemy(x,y:integer;enemyType:TEnemyType;lifes:integer): integer;
procedure AddEnemy(x,y:integer;enemyType:TEnemyType;lifes:integer);
procedure DeleteEnemy(i: integer); overload;
procedure DeleteEnemy(x,y:integer;enemyType:TEnemyType;lifes:integer); overload;
function CountEnemies: integer;
function HasBoss: boolean;
procedure Clear;
procedure LoadFromStrings(sl: TStrings); // version 0.3 - version 1.2 files
procedure LoadFromFile(filename: string); // version 0.2 - version 1.2 files
procedure SaveToStrings(sl: TStrings);
procedure SaveToFile(filename: string);
destructor Destroy; override;
end;
 
TGameMode = (gmUnknown, gmLevels, gmRandom, gmEditor);
 
TSaveData = class(TPersistent)
strict protected
procedure AssignTo(Dest: TPersistent); override;
public
Score: integer;
Life: integer;
Level: integer;
GameMode: TGameMode;
LevelData: TLevelData;
procedure Clear;
procedure LoadFromStrings(sl: TStrings);
procedure LoadFromFile(filename: string);
procedure SaveToStrings(sl: TStrings);
procedure SaveToFile(filename: string);
destructor Destroy; override;
end;
 
TLevelFile = record
levelNumber: integer;
fileLocation: string;
isUser: boolean;
found: boolean;
end;
 
function GetLevelFileName(lev: integer; forceuserdir: boolean): TLevelFile;
 
function EnemyTypeHasLives(et: TEnemyType): boolean;
 
implementation
 
uses
SysUtils, StrUtils, Global, Windows, System.Types;
 
const
// { iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 37476 products(2) spacemission(8) file-format(1) lev-sav-v12(1) }
// https://hosted.oidplus.com/viathinksoft/?goto=oid%3A1.3.6.1.4.1.37476.2.8.1.1
OID_LEVSAV_VER12 = '1.3.6.1.4.1.37476.2.8.1.1'; // do not localize
 
resourcestring
SLevelFileFolder = 'Levels';
SLevelFileSubFolder = 'SpaceMission';
SExtraContentAfterLine = 'Zeile %d ist ungültig (Zusatzinfo am Ende)';
 
function GetLevelFileName(lev: integer; forceuserdir: boolean): TLevelFile;
 
function _GetLevelVerzeichnisSystem: string;
begin
// Für die Auslieferungs-Levels
result := OwnDirectory + SLevelFileFolder;
end;
 
function _GetLevelVerzeichnisUser: string;
begin
try
result := GetKnownFolderPath(FOLDERID_SavedGames);
except
result := '';
end;
if result = '' then
begin
// Pre Vista
result := OwnDirectory + SLevelFileFolder;
end
else
begin
result := IncludeTrailingPathDelimiter(result);
result := result + SLevelFileSubFolder;
end;
result := IncludeTrailingPathDelimiter(result);
ForceDirectories(result);
end;
 
function _GetLevelFileNameUser(lev: integer): string;
var
old, new: string;
begin
new := IncludeTrailingPathDelimiter(_GetLevelVerzeichnisUser)+'Level '+inttostr(lev)+'.lev'; // Version 0.3+ Level Files // do not localize
old := IncludeTrailingPathDelimiter(_GetLevelVerzeichnisUser)+'Lev'+inttostr(lev)+'A1.lev'; // Version 0.2 Level Files // do not localize
if fileexists(new) then exit(new);
if fileexists(old) then exit(old);
exit(new);
end;
 
function _GetLevelFileNameSystem(lev: integer): string;
var
old, new: string;
begin
new := IncludeTrailingPathDelimiter(_GetLevelVerzeichnisSystem)+'Level '+inttostr(lev)+'.lev'; // Version 0.3+ Level Files // do not localize
old := IncludeTrailingPathDelimiter(_GetLevelVerzeichnisSystem)+'Lev'+inttostr(lev)+'A1.lev'; // Version 0.2 Level Files // do not localize
if fileexists(new) then exit(new);
if fileexists(old) then exit(old);
exit(new);
end;
 
var
usr, sys: string;
bfound: boolean;
begin
result.levelNumber := lev;
usr := _GetLevelFileNameUser(lev);
sys := _GetLevelFileNameSystem(lev);
bfound := fileexists(usr);
if bfound or forceuserdir then
begin
result.isUser := true;
result.fileLocation := usr;
result.found := bfound;
exit;
end;
bfound := fileexists(sys);
if bfound then
begin
result.isUser := false;
result.fileLocation := sys;
result.found := bfound;
exit;
end;
result.isUser := true;
result.fileLocation := usr;
result.found := false;
end;
 
// this is just an example, there are many
// different ways you can implement this
// more efficiently, ie using a TStringBuilder,
// or even modifying the String in-place...
function CollapseSpaces(const S: string): string;
var
P: PChar;
AddSpace: Boolean;
begin
Result := '';
AddSpace := False;
P := PChar(S);
while P^ <> #0 do
begin
while CharInSet(P^, [#1..' ']) do Inc(P);
if P^ = #0 then Exit;
if AddSpace then
Result := Result + ' '
else
AddSpace := True;
repeat
Result := Result + P^;
Inc(P);
until P^ <= ' ';
end;
end;
 
{ TLevelData }
 
procedure TLevelData.AssignTo(Dest: TPersistent);
var
DestLevelData: TLevelData;
i: integer;
begin
DestLevelData := Dest as TLevelData;
if Assigned(DestLevelData) then
begin
DestLevelData.RasterErzwingen := Self.RasterErzwingen;
DestLevelData.LevelEditorLength := Self.LevelEditorLength;
DestLevelData.LevelName := Self.LevelName;
DestLevelData.LevelAuthor := Self.LevelAuthor;
SetLength(DestLevelData.EnemyAdventTable, Length(Self.EnemyAdventTable));
for i := 0 to Length(Self.EnemyAdventTable)-1 do
begin
DestLevelData.EnemyAdventTable[i] := Self.EnemyAdventTable[i];
end;
end
else
begin
inherited;
end;
end;
 
procedure TLevelData.Clear;
begin
SetLength(EnemyAdventTable, 0);
LevelEditorLength := DefaultLevelLength;
LevelName := '';
LevelAuthor := '';
end;
 
function TLevelData.CountEnemies: integer;
begin
result := Length(EnemyAdventTable);
end;
 
procedure TLevelData.DeleteEnemy(i: integer);
var
j: integer;
begin
for j := i+1 to CountEnemies-1 do
begin
EnemyAdventTable[j-1] := EnemyAdventTable[j];
end;
SetLength(EnemyAdventTable, Length(EnemyAdventTable)-1);
end;
 
procedure TLevelData.DeleteEnemy(x, y: integer; enemyType: TEnemyType;
lifes: integer);
begin
DeleteEnemy(IndexOfEnemy(x, y, enemyType, lifes));
end;
 
destructor TLevelData.Destroy;
begin
Clear;
inherited;
end;
 
function TLevelData.HasBoss: boolean;
var
i: integer;
begin
for i := 0 to Length(EnemyAdventTable) - 1 do
begin
if EnemyAdventTable[i].enemyType = etEnemyBoss then
begin
result := true;
exit;
end;
end;
result := false;
end;
 
procedure TLevelData.AddEnemy(x,y:integer;enemyType:TEnemyType;lifes:integer);
resourcestring
SInvalidXCoord = 'X-Koordinate muss ohne Rest durch %d teilbar sein';
SInvalidYCoord = 'Y-Koordinate muss ohne Rest durch %d teilbar sein';
begin
SetLength(EnemyAdventTable, Length(EnemyAdventTable)+1);
 
if enemyType = etEnemyMeteor then lifes := 0;
if RasterErzwingen then
begin
if x mod LevEditRasterW <> 0 then raise Exception.CreateFmt(SInvalidXCoord, [LevEditRasterW]);
if y mod LevEditRasterH <> 0 then raise Exception.CreateFmt(SInvalidYCoord, [LevEditRasterH]);
end;
if lifes > MaxPossibleEnemyLives then lifes := MaxPossibleEnemyLives;
 
EnemyAdventTable[Length(EnemyAdventTable)-1].x := x;
EnemyAdventTable[Length(EnemyAdventTable)-1].y := y;
EnemyAdventTable[Length(EnemyAdventTable)-1].enemyType := enemyType;
EnemyAdventTable[Length(EnemyAdventTable)-1].lifes := lifes;
end;
 
function TLevelData.IndexOfEnemy(x, y: integer; enemyType: TEnemyType;
lifes: integer): integer;
var
i: integer;
begin
for i := 0 to Length(EnemyAdventTable) - 1 do
begin
if (EnemyAdventTable[i].x = x) and
(EnemyAdventTable[i].y = y) and
(EnemyAdventTable[i].enemyType = enemyType) and
(EnemyAdventTable[i].lifes = lifes) then
begin
result := i;
exit;
end;
end;
result := -1;
end;
 
procedure TLevelData.LoadFromStrings(sl: TStrings);
resourcestring
SInvalidLevelFile = 'Level-Format nicht unterstützt oder Datei ist beschädigt';
SEnemyTypeNotImplemented = 'Gegner-Typ %d wird nicht unterstützt (Alte Spielversion?)';
var
curline: integer;
z, act: integer;
sl2: TStringList;
tmpX, tmpY, tmpLifes: integer;
tmpEnemy: TEnemyType;
ergebnis: string;
ary: TStringDynArray;
sLine: string;
iEnemy: Integer;
begin
Clear;
 
LevelEditorLength := DefaultLevelLength;
LevelName := '';
LevelAuthor := '';
 
if sl.Strings[0] = '; SpaceMission 0.3' then // do not localize
begin
{$REGION 'Backwards compatibility level format 0.3 (convert to 0.4)'}
sl.Strings[0] := '; SpaceMission 0.4'; // do not localize
sl.Insert(1, '; LEV-File'); // do not localize
{$ENDREGION}
end;
 
if (sl.Strings[0] = '; SpaceMission 0.4') and // do not localize
(sl.Strings[1] = '; LEV-File') then // do not localize
begin
{$REGION 'Backwards compatibility level format 0.4 (convert to 1.0)'}
sl2 := TStringList.Create;
try
z := 0;
act := 0;
while z < sl.Count do
begin
inc(z);
if z > 2 then inc(act);
if act = 5 then act := 1;
ergebnis := sl.Strings[z-1];
if ergebnis = '; SpaceMission 0.4' then // do not localize
sl2.Add('; SpaceMission 1.0') // do not localize
else
begin
if (ergebnis = '30000') and (z = 3) then
sl2.Add(IntTostr(DefaultLevelLength))
else
begin
//if not (((ergebnis = '0') and (z = 4)) or ((ergebnis = '-624') and (z = 5)) or ((ergebnis = '222') and (z = 6)) or ((ergebnis = '3') and (z = 7))) then
if (z < 4) or (z > 7) then
begin
if act = 4 then
sl2.Add(inttostr(strtoint(ergebnis) + 32 - (5 * (strtoint(ergebnis) div 37))))
else
sl2.Add(Ergebnis);
end;
end;
end;
end;
sl.Text := sl2.Text;
finally
FreeAndNil(sl2);
end;
{$ENDREGION}
end;
 
if (sl.Strings[0] = '; SpaceMission 1.0') and // do not localize
(sl.Strings[1] = '; LEV-File') then // do not localize
begin
{$REGION 'Level format 1.0'}
LevelEditorLength := StrToInt(sl.Strings[2]);
curline := 3;
while curline < sl.Count do
begin
iEnemy := strtoint(sl.Strings[curline]);
if TEnemyType(iEnemy) = etUnknown then // <-- for some reason, etUnknown will also be set if iEnemy is too large. This is actually good!
raise Exception.CreateFmt(SEnemyTypeNotImplemented, [iEnemy]);
tmpEnemy := TEnemyType(iEnemy);
Inc(curline);
tmpX := strtoint(sl.Strings[curline]);
Inc(curline);
tmpY := strtoint(sl.Strings[curline]);
Inc(curline);
tmpLifes := strtoint(sl.Strings[curline]);
Inc(curline);
AddEnemy(tmpX, tmpY, tmpEnemy, tmpLifes);
end;
{$ENDREGION}
end
else if (SameText(sl.Strings[0], '['+OID_LEVSAV_VER12+']')) then
begin
{$REGION 'Level format 1.2'}
for curline := 1 to sl.Count-1 do
begin
sLine := sl.Strings[curline].Trim;
if (sLine = '') or (Copy(sLine, 1, 1) = ';') then continue;
ary := SplitString(CollapseSpaces(sLine), ' ');
if SameText(ary[0], 'Width') then // do not localize
begin
LevelEditorLength := StrToInt(ary[1]);
if (Length(ary) > 2) and (Copy(ary[2], 1, 1) <> ';') then
raise Exception.CreateFmt(SExtraContentAfterLine, [curline+1]);
end
else if SameText(ary[0], 'Name') then // do not localize
begin
LevelName := Trim(Copy(sLine, Length(ary[0])+2, Length(sLine)));
end
else if SameText(ary[0], 'Author') then // do not localize
begin
LevelAuthor := Trim(Copy(sLine, Length(ary[0])+2, Length(sLine)));
end
else if SameText(ary[0], 'Enemy') then // do not localize
begin
iEnemy := strtoint(ary[1]);
if TEnemyType(iEnemy) = etUnknown then // <-- for some reason, etUnknown will also be set if iEnemy is too large. This is actually good!
raise Exception.CreateFmt(SEnemyTypeNotImplemented, [iEnemy]);
tmpEnemy := TEnemyType(iEnemy);
tmpX := strtoint(ary[2]);
tmpY := strtoint(ary[3]);
tmpLifes := strtoint(ary[4]);
if (Length(ary) > 5) and (Copy(ary[5], 1, 1) <> ';') then
raise Exception.CreateFmt(SExtraContentAfterLine, [curline+1]);
AddEnemy(tmpX, tmpY, tmpEnemy, tmpLifes);
end;
end;
{$ENDREGION}
end
else
begin
raise Exception.Create(SInvalidLevelFile);
end;
 
SortEnemies; // Sortierung nach X-Koordinate ist sehr wichtig für das Spiel!
end;
 
procedure TLevelData.LoadFromFile(filename: string);
var
sl: TStringList;
i, j: integer;
temp: string;
m: array[1..6] of tstrings;
begin
sl := TStringList.Create;
try
if EndsText('A1.lev', filename) then // do not localize
begin
{$REGION 'Backwards compatibility level format 0.2 (split into 5-6 files; convert to 0.3)'}
m[1] := TStringList.create;
m[2] := TStringList.create;
m[3] := TStringList.create;
m[4] := TStringList.create;
m[5] := TStringList.create;
m[6] := TStringList.create;
try
for i := 1 to 6 do
begin
filename[Length(filename)-4] := IntToStr(i)[1]; // ...A2.sav, ...A3.sav, etc.
if FileExists(filename) then
m[i].loadfromfile(filename);
end;
m[1].strings[0] := '-624';
if m[6].Text = '' then m[6].Text := '30000';
 
sl.Add('; SpaceMission 0.3'); // do not localize
sl.Add(temp);
for j := 0 to m[1].count-2 do
begin
for i := 0 to m[1].count-2 do
begin
if strtoint(m[1].strings[i]) > strtoint(m[1].strings[i+1]) then
begin
m[1].exchange(i, i+1);
m[2].exchange(i, i+1);
m[3].exchange(i, i+1);
m[4].exchange(i, i+1);
m[5].exchange(i, i+1);
end;
end;
end;
for i := 0 to m[3].count-1 do
begin
for j := 1 to 4 do
begin
if j = 1 then sl.Add(m[3].strings[i]);
if j = 2 then sl.Add(m[1].strings[i]);
if j = 3 then sl.Add(m[2].strings[i]);
if j = 4 then sl.Add(m[4].strings[i]);
end;
end;
finally
FreeAndNil(m[1]);
FreeAndNil(m[2]);
FreeAndNil(m[3]);
FreeAndNil(m[4]);
FreeAndNil(m[5]);
FreeAndNil(m[6]);
end;
{$ENDREGION}
end
else
begin
sl.LoadFromFile(filename);
end;
 
LoadFromStrings(sl);
finally
FreeAndNil(sl);
end;
end;
 
procedure TLevelData.SaveToStrings(sl: TStrings);
resourcestring
SLevelEnemyLineComment = '; Type XCoord YCoord Lives';
var
i: integer;
begin
sl.Clear;
sl.Add('['+OID_LEVSAV_VER12+']');
if LevelName <> '' then sl.Add('Name ' + LevelName); // do not localize
if LevelAuthor <> '' then sl.Add('Author ' + LevelAuthor); // do not localize
sl.Add('Width ' + IntToStr(LevelEditorLength)); // do not localize
SortEnemies;
sl.Add(SLevelEnemyLineComment);
for i := 0 to Length(EnemyAdventTable)-1 do
begin
sl.Add(Trim(
'Enemy'.PadRight(6, ' ')+ // do not localize
' '+
IntToStr(Ord(EnemyAdventTable[i].enemyType)).PadRight(6, ' ')+
' '+
IntToStr(EnemyAdventTable[i].x).PadRight(6, ' ')+
' '+
IntToStr(EnemyAdventTable[i].y).PadRight(6, ' ')+
' '+
IntToStr(EnemyAdventTable[i].lifes).PadRight(6, ' ')+
' '
));
end;
end;
 
procedure TLevelData.SaveToFile(filename: string);
var
sl: TStringList;
begin
sl := TStringList.Create;
try
SaveToStrings(sl);
sl.SaveToFile(filename);
finally
FreeAndNil(sl);
end;
end;
 
procedure TLevelData.SortEnemies;
var
i, n: integer;
e: TEnemyAdvent;
begin
// Bubble Sort Algorithmus
for n := Length(EnemyAdventTable) downto 2 do
begin
for i := 0 to n - 2 do
begin
if
// Sort by X-coord (important for the game!)
(EnemyAdventTable[i].x > EnemyAdventTable[i+1].x)
or
// Sort by Y-coord (just cosmetics)
((EnemyAdventTable[i].x = EnemyAdventTable[i+1].x) and (EnemyAdventTable[i].y > EnemyAdventTable[i+1].y))
then
begin
e := EnemyAdventTable[i];
EnemyAdventTable[i] := EnemyAdventTable[i + 1];
EnemyAdventTable[i + 1] := e;
end;
end;
end;
end;
 
{ TSaveData }
 
procedure TSaveData.AssignTo(Dest: TPersistent);
var
DestSaveData: TSaveData;
begin
DestSaveData := Dest as TSaveData;
if Assigned(DestSaveData) then
begin
DestSaveData.Score := Self.Score;
DestSaveData.Life := Self.Life;
DestSaveData.Level := Self.Level;
DestSaveData.GameMode := Self.GameMode;
if not Assigned(DestSaveData.LevelData) then DestSaveData.LevelData := TLevelData.Create;
DestSaveData.LevelData.Assign(Self.LevelData);
end
else
begin
inherited;
end;
end;
 
procedure TSaveData.Clear;
begin
Score := 0;
Life := 0;
Level := 0;
GameMode := gmUnknown;
FreeAndNil(LevelData);
end;
 
destructor TSaveData.Destroy;
begin
Clear;
inherited;
end;
 
procedure TSaveData.SaveToStrings(sl: TStrings);
var
sl2: TStringList;
begin
sl2 := TStringList.Create;
try
sl.Add('['+OID_LEVSAV_VER12+']');
sl.Add('Score ' + IntToStr(Score)); // do not localize
sl.Add('Lives ' + IntToStr(Life)); // do not localize
sl.Add('Level ' + IntToStr(Level)); // do not localize
sl.Add('Mode ' + IntToStr(Ord(GameMode))); // do not localize
LevelData.SaveToStrings(sl2);
sl2.Delete(0); // Delete additional level signature
sl.AddStrings(sl2);
finally
FreeAndNil(sl2);
end;
end;
 
procedure TSaveData.LoadFromStrings(sl: TStrings);
resourcestring
SInvalidFile = 'Spielstand-Format nicht unterstützt oder Datei beschädigt';
var
curline: Integer;
ary: TStringDynArray;
sLine: string;
begin
if (sl.Strings[0] = '; SpaceMission 1.0') and // do not localize
(sl.Strings[1] = '; SAV-File') then // do not localize
begin
Score := StrToInt(sl.Strings[2]);
Life := StrToInt(sl.Strings[3]);
Level := StrToInt(sl.Strings[4]);
GameMode := TGameMode(StrToInt(sl.Strings[5]));
if Assigned(LevelData) then FreeAndNil(LevelData);
end
else if SameText(sl.Strings[0], '['+OID_LEVSAV_VER12+']') then
begin
Score := 0;
Life := 0;
Level := 0;
GameMode := gmUnknown;
for curline := 1 to sl.Count-1 do
begin
sLine := sl.Strings[curline].Trim;
if (sLine = '') or (Copy(sLine, 1, 1) = ';') then continue;
ary := SplitString(CollapseSpaces(sLine), ' ');
if SameText(ary[0], 'Score') then // do not localize
begin
Score := StrToInt(ary[1]);
if (Length(ary) > 2) and (Copy(ary[2], 1, 1) <> ';') then
raise Exception.CreateFmt(SExtraContentAfterLine, [curline+1]);
end
else if SameText(ary[0], 'Lives') then // do not localize
begin
Life := StrToInt(ary[1]);
if (Length(ary) > 2) and (Copy(ary[2], 1, 1) <> ';') then
raise Exception.CreateFmt(SExtraContentAfterLine, [curline+1]);
end
else if SameText(ary[0], 'Level') then // do not localize
begin
Level := StrToInt(ary[1]);
if (Length(ary) > 2) and (Copy(ary[2], 1, 1) <> ';') then
raise Exception.CreateFmt(SExtraContentAfterLine, [curline+1]);
end
else if SameText(ary[0], 'Mode') then // do not localize
begin
GameMode := TGameMode(StrToInt(ary[1]));
if (Length(ary) > 2) and (Copy(ary[2], 1, 1) <> ';') then
raise Exception.CreateFmt(SExtraContentAfterLine, [curline+1]);
end;
end;
if Assigned(LevelData) then FreeAndNil(LevelData);
LevelData := TLevelData.Create;
LevelData.RasterErzwingen := false;
LevelData.LoadFromStrings(sl);
end
else
begin
raise Exception.Create(SInvalidFile);
end;
end;
 
procedure TSaveData.LoadFromFile(filename: string);
var
sl: TStringList;
begin
sl := TStringList.Create;
try
sl.LoadFromFile(filename);
LoadFromStrings(sl);
finally
FreeAndNil(sl);
end;
end;
 
procedure TSaveData.SaveToFile(filename: string);
var
sl: TStringList;
begin
sl := TStringList.Create;
try
SaveToStrings(sl);
sl.SaveToFile(filename);
finally
FreeAndNil(sl);
end;
end;
 
function EnemyTypeHasLives(et: TEnemyType): boolean;
begin
result := (et <> etEnemyMeteor) and (et <> etItemMedikit);
end;
 
end.
/ENU/GamSplash.dfm
0,0 → 1,10055
object SplashForm: TSplashForm
Left = 241
Top = 158
BorderIcons = []
BorderStyle = bsNone
Caption = '"Please wait..."'
ClientHeight = 480
ClientWidth = 640
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poScreenCenter
TextHeight = 13
object SplashImage: TImage
Left = 0
Top = 0
Width = 640
Height = 480
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000002800000
01E00802000000BAB34BB30000000970485973000004BB000004BB016E1F0EAE
0000000467414D410000B18E7CFB51930000FFFF4944415478DAD4BD79B86D55
75A73DF739A4AD4AA51ACB5E5AE945AEA022229644B14220420C8140E8A2A0F4
207D4FE8EEA51301810B4A495D90D8017628A2C1520491468242A174A2D15499
EA53E94BEEDDDF8FFD3ADF8CB3F6D927A1EAFBBE27B5FE38CF3E7BAF35D79C63
8E39FA66D45A9B9B9BFBC7FFF81F8FC7E3FFF5BFFED7DFFCCDDFFCECCFFEECEA
D5ABE7E7E7F3EFCFFFFCCF3F33B9FEE93FFDA77FFAA77FBAD65A6BFDE4273FC9
4FDB6FBFFD5D77DD95EF73431EFFEBBFFEEB356BD6FCE22FFEE25FFEE55FE69E
7CFF0BBFF00B7FF5577FF5333FF333F9DC665C7963DE95017FEEE77E2E23ACBF
FEFADFFBDEF7F27D9EE2D78C9C5FF9F08217BCE0BFFDB7FFC6ACF83573FEF33F
FFF34C35BFE6EDBC313F650299C9FFFC9FFF33C332990C92EF734FEE644A1967
341AE559BECF6DACE29FFC937FF2677FF6670CCEC27367FE7267AEFCCB07BEC9
6D7FF1177F91FBF399E5F36BBECF64F27D66952FF337AFCB9D0157DE956F32B7
803AAFCEF78B0287F7E6C17CF01540DBB7E4D78C9071D659679D3FFEE33F66B6
9958D698FBF36FC09BDB02B17C6037014856CA372F7CE10BFFCB7FF92FA79E7A
EAFBDFFFFEFFFEDFFF7B06CF46FFD7FFFA5F33AB8C909BFFD13FFA47D9F70C9B
7F01547ECABFC02A40661A9B6CB2C91FFEE11F6651CF7BDEF33213A69157E45D
792AF301DAB9FED93FFB67997F5ECDF8B9F26B469B8527793023BCF6B5AFBDEF
BEFB32FFDC1C6800B78CEF6C337260CE7CB20A379711801EA0CEE73CF53FFEC7
FF6021DE36B89EFFFCE7FFC99FFC493E5C71C515871F7E78DDDFCC21180522E5
A5997CFE7DC94B5E92856786F9F7577EE557EEBDF75E0E54BE0996FED22FFD12
D3E6D94035FFFEF22FFF72EEC9AFF91EBC0D00F37D66951BB2967C030A019F7C
00679C646ECB2B382F995BDE921BF26FFEB2EA7CC34AF35456CD39CDF79943DE
9EEFF32B90C9BBCE3BEFBC33CE3823CFE60616029204BB7EF0831F0420391AC1
6A0E5A769F85CF4D2EC09E99671A192D9F39B69088DC09F4F8FBB297BD2C6739
DF07E5DEF9CE77DE79E79D193FF764F9E0E47FFC8FFF915767A8DC96BF995576
2A930450B9195CCD6879C58B5FFCE23FFAA33F5A7BEDB5F377B3CD367BF4D147
395F7930D0C88483C3793063B2F680250F6640A80A8785755D7EF9E5C71D775C
1EE4D433CEB265CB3266A09DA7A0002C93C9F06086058CC004F807DA792A7F73
C3BFF817FF22B89A9B734FFECD3D5960A09AC1BFF9CD6FE65DF932DF00463036
9FF376095ABEF9E7FFFC9F6762B92D10086432BDFC9B07F38AFC9BDB58512E88
9E47C05390BFCC9CBFA053DE18E0641CE8C3BFFC97FF327B0D26640E50A1BF99
5C994006CF232C8761734FF0014ACB91E75D2C81D30A8DE5ED192D5FFED66FFD
D60D37DC208DCAE433C88F7FFCE3FC9B0FF93EA4298BCA66FDE7FFFC9FC1F680
9D1371E491475E70C1051913220353C80D2F7AD18BDEF086377CFCE31FCF5A5C
B2EFF5B0E7CE830E3AE8031FF840C891F48ABD96B4C2BFF85E26521715F40B26
3FFDF4D339C2DC9FF94024615B5248E700A8D95F0035CA54B297CC8C79409E18
D133CF2BD99E4C8B33900F793CA70882E2A1CD3D99741E07D08B12383726F704
F4F9BCF9E69B6731FFE93FFD2788544683A166913FFCE10F7D2A5726C962984F
80987F33E76C55C66139A12F59FCA1871EFAE10F7F38BFE63372462696EDCCDF
BC9A25C09503C4CC242FCD42B2EA0C9EB7672D3066F6B2E2311FF89C7771C219
012C01E1C02D773D8357529B09E7BDB3A4930C9547004EE60F7264B43C9E2583
949946702EA81CC2C1538BF2B07C9F71329FBC31EB42C8801ED543557707AA0D
C9431282E7E591002484233B05F5C96855326017200AF93253CD411D4C29CB07
E6B90154992588E47539EA3BECB0C31D77DC114C6339797B0E6776396FCF5FD0
1DB4E603878D09B0907CFFD297BE344F65F21924742AA3650E4A33D3EF0DB664
5D7984456599AB56AD7AD7BBDE059BC9B31916390319828307C2F3DE7C13F042
B28124E211EBCDE0F91736C34BF353FE150F416F4EA580CABF6151795DA08A10
00AAE4C140C3A79843BE418E042C9588705B26EF2439CB6166FFE13FFC87DC10
592A6BCF97871D76D835D75C130CCFCDD9CDC82521114148E0ECA140C002CF91
18722EF2C6C02AD3CB07609579E6FB6C3D141FE865DAD911241E61C52A7243C6
47628368B0D87C50C2434F8056725A3326948EF3C580E06AA697C920B8303247
2377667519077C067F32ABC099A3C7E4A5939C62A84DC6C9B09E650842E82FA7
2027F4473FFAD180F4412D33C8BAEBAEFBE4934F42F406C41A5AE74F7CE01403
7F6602A0C0B76C4DA601E51CBC51A65BCF5AA69A0D62811CEA4083CDF211C46E
F617C80414D9B2DC9957231E05141C074990FC06F8700AFC12C10EB0E4599084
85C0ECDB448D01A45954EECF3D6C41E6C38B44F5480CA160994FF62ED08E0007
936226428343C7E943CEF39864F0D34F3FFDFCF3CFCFF8192DD4D5B74F5345D5
3F9455D01EE87116F27D5E04F71DC09C412005CF72C0AC16411B792DDF56CD26
73CD390CA2E46588DB6866B92049014DEEA9080AD7E1B44F33605101FAC5FE31
69B4C9FC4541CC676ECE7CF8373FB1C2681BD088CCBC1E24363B13CB4F9912DF
C03C90625497595D6EB8ECB2CB4E3EF9E42C04A2C06D1CB31C8CEF7FFFFBADAB
3E88E76DC68518A1BC93CFC8ECB3F8CADF79212EC01E10849906E065E1D963F4
6364266D0F596F3E87768480224FB0416C4AF611BA005A4038180A8E8594005A
0711AB9A78CC31C784D3C34278295B894016FA2523CF97882FFBEEBBEF55575D
F5F297BF3C54263084A6A094ECB8E38ED17E98DB2C4081F18808AC9D9943BF32
B7B0673433BE84974C33E00033B7B5222D6532E79C73CE89279EB8E87BE18581
3962281B91F11159D4A137DC70C3C71F7F1C1CC608D426EA9132566012AE96B7
9F7AEAA979F6ACB3CECAE3D21AFEE64EC828F225F26BFE06F3590EC8CC9DBE1D
0A853C94C751C1B901F603A064F09C380E3B6265669B19AAD043E54133842D86
82DA7A707891BBC35F7ECD1579779F7DF6F175600EBC1C0CACEA1197B6AB8C1C
9AC824198D4738C2DE8F4E0C0FE6BD0E08116C13158AC308A1D47A71E185179E
70C209DCCC4222514513CABFD9A9EDB7DFFE339FF90CBBC946B42E37B335F91E
B2060BC9CC813FF8997F43349E78E2893CE84CBC946C20771936E0CD9DD572C6
7AABEA86A89D9B77DA69A72F7DE94B594B1EC9EB82CC2CBC025319C5DDA9DA42
EBAAB0670D9A5FE9156290E687AA6648BD4515E5AAE933DB1632609EF5F0E633
148CDD6140D100806407B3EAE0430E78969C330B1671F0F30AA4109931DB8415
8461397A4C29BFE62D39354C83455566C48AB454714C32F2061B6C1024C1E2A2
0D55711075AB4D04FA9D77DE390A3D26B13C8E18075584F208F3FA61C4B2E1A3
1C57860E14B20D5921CB0B2DCE0DD842031A2C3FAC1939948304B9E7F0284329
D0D5ED44AA523647A2848ED73D830A00DF238F3CF2E28B2F8EDC1452CEE39CC3
56C4795007E15AB46310CFB3F7E72D6CB6C24E8E0D26A94079D75D77FDD4A73E
9507232BFDF8C73F96302D4AAF513195D1D85105B4016A2ED88082AC4B70EB6C
D036DB6C73FFFDF77368350FBA46588567066B2DBA429804F661443644486437
268910E701C853C8C5C19B8C16BC8FEEF8D0430FE5D8836DF2DA2BAEB8229339
EDB4D3809E0603CD4A7969F62B2CAA52010EB9FF8630AD58B1E280030E980558
3FB3E9F99069E3BCC81A333774146C983260D5020779C52B5E11187EEE739FCB
6E069E59726EAE947DF05E44CC2A652B17A3DB05A3F6DE7BEFA8C5194A1EB3DE
7AEB3DFDF4D3CAFBB94796CF1966F92AAF08E081157B8165120E1AD29319227E
E55F9C1A5B6FBDF5830F3E08C5E7ECE4D0B14C841B6C986AE7198D8554410AD2
C099E580A350B689BAA00548E327A68E6C7AA85B4097D13281BCB7720EF4CEBC
2E3B820A92B7E4CE8D37DEF8D1471FAD8754BC8532A0B4E1D7901A5626548D87
FC5B656E1D559961B0E8631FFB58E69C79E6455938665276FFE1871FCE36651A
2040E60FD9C9E3F91762EDBE64B1B901212CFF627B40C2639B9086D9D0DD77DF
FDBAEBAED302C42145778463712EB078617709AEB6899EC0AF18CC733F980373
CD37471D7554E483E00F071C83369670250F84039528A1E4BF758FD4C0B83FFA
6204058E5280F38E77BC63E5CA95412DCF9A5214D303386D22C8663E58206611
3A69FB8001E7D73C1E760807D16305628087C8E59870323D10DE7B20562AC10A
315000A85F702F9BFEC8238F0C3C71F8745A97E47850F346C8510E329A64F66B
B3CD367BECB1C790C0248F921A9C74192133DC76DB6DEFB9E79E2A46E41E2500
6C87EEACF6D4D149279D74D14517E5B160464E4E5013092BABCDDF5FFDD55FFD
FDDFFF7DC11A75E1924B2EC9F74108ECB78BDA3C5B77913EA70BDD1A8756B03F
AFC80AB34FD056C85F161C0A88F8CFE681E2596A40909FF254A6A485193492C8
625DC962435340D0B090F0F57CC60CC23620AB86EFE68DB8C3F317982CC18099
39EF5281A81618442AA6AD234DA5B92DB4714156EAFCB186715B451AFDB58C2F
AF424F6D5DB168DDFDC3F6A3A24129320EE6C7FABA90A4FCCA082E0D6EADAF0B
B52F53E538E91503CBF32CFBE237483CDC094D076E4B00168CAFDE1027093509
97223840FF8D1AB0589EA72EBDF4D2638F3D16FE94A5A1A9B39C591B0AEE3179
F85FFE664559428E287C3447264882BB1714CD693AE59453C2E9EFBAEB2EC53B
CF39D41CDBBB1B11F8E39DC59600E7630BB04670D698466655CD0C7819C167CC
B9D833105BB92D6826B3C90891628F38E208F9933C2F73CB2BA0A41599C552B5
8DBC6BABADB6FAD18F7E94C721E8F00F8DCFD5A901F9030DB04561B104B60120
762629571876485EB59A563557826E780AAB66AAF0B95674EE3A936CC4DBDEF6
B610B4EC94765AC5A320529E459AC1F987A1181D979940A3F246F0010D35F8BC
FEFAEB47F10550820B36D026A20C50CDBBB081E381D6AF87D4A5B157568AB693
2F03E7FCCDB4F7D8638F7FFB6FFF6D8662CE838B01C17F4D08831BE4CDAD0B88
E28932016E2FF5287EF528A96EF2BDD10FC8F1D5D6ED516AC57E2BA97758BD8D
BEA275CF63C0BBD75E7B5D7FFDF579DD8D37DE1879B775A91152C9923109E058
45DC54C44467D5046868823664F52583900C20C8CD7A4654D2C040F170101AD2
BAF13204E790430EC9FCC352A346E7B000ED6A9F78F66FEE0E343363E078DE79
E78527855EE7CBD6ADE7AADB482BEC81AEA959F4AB3D970B3E0A91955F029D68
A501E57EFBED1749107711180C498A04970386D4836982F82975442D69B84F94
D79879F03BE727BC366220B40CC508CB7C066103E49A6CEAF4853708D30A811E
22873B34B008E9F3AFD6AA6A41929DA09E1A089007817F0D0D1077F5F86A36C7
D8E5D9D03EC9C89AEE7D0423369E6C28113497C74331F1DC20AA2BDE4E1FBC7A
B159EE35D265205F892902841A0FE49E91F520E899E6B3DE148DB7E87FD32668
A6171296F7E6988540FFE5E49A3561CCB36E1933441D3418C4A511D3149A1896
896440E0558E55E5376EBDF673C3AFD84775773922568D1A63880E843A95C9E4
4E6C1B1E19B00546187E73FBEDB79F70C209E79E7B2ED6F2564272D85F5E8452
45F084267A8F150E1A90844899D0C79C0B1405095C6ECEAB31B967F0003037E7
7061A54741E7F431ECC0A77BC61967448F24E0433AE32E037011A92A8E794BE6
ACCEED42086B5AB1624548471E0FA7E7BD8161FE8D2E71F0C10783F04490E08A
82172A3029EC6651599AD10608977A3D31C9E85C6026803123471A70151228C8
05EABBBBDFBAA00CD2F20D2181B921043D43711CC46D999966D2568CBDFC6B58
C0C004AD9BAC8A475831F52EB76EC5AC1AED85175E78F5D5570756A106795679
A80ABEADEBD9AECEB81FA4762C616E2EF44AEF64EBB671C7514963AA04D3B141
C83D441A824E21DDC18A8C8FA8A4819673A4B68390042E656BF239A81EB6929B
33A0B7F9415AA4DD1E991EF3307E68BEDC65975DEEBDF75EF8B7024A5B689F18
E999685D56C572C8B221676D22C0E643040DD4D0488B59064B5D947E3D57DF67
CEDE59679D252BC2061E51FD81071EF8CC673EC397C4DD3937C3379C3637645F
F3A5875CA32B086DF0973E80FC25A80715A475EB476491B3CF3EFB577EE557EE
BFFFFE9CCF430F3DF4F2CB2F5F625D986D0108B14E0426640E79D7DA6BAF1DF9
06D4D40F67805F2B1A803B04B6551F4CE09FD1AADD0F320469E366281D0E48DD
BD355C859F3C906ADB21A93FF8C10F5A09AE36C61B7104A04520BDF5D65B032E
CFA483545A308D0F99C33AEBACF3F4D34F23A8E611CC7D9A07F42741CBE4B58E
59654F0901CC385325869F43CBFC091221EC1CB183A3888A03BD18D0772F3460
0411F08A77716C2285844F649E608E4663B7C6385B9CDFAD5B35D0FBB7DB6EBB
CF7EF6B346705451A62203BB867E9C499E7EFAE9D75E7B2DF676C84D94A1830E
3A28930C5DD68AAB5F4D914B7D054F13D611C4054C64357301F14ECF0EA605C4
5079F3ACF3CE5FC082111898C3DBEAA173FBD4CE33ED2C04EA9F2FB12B54CF25
4C05B4D13E09056410681F2AAF8A0BFE23219C47020DB0379B98494ABBF378D6
ABAE9FC9C30F32324C3A68F0D4534F81EDC01CFA8E2809AB76BBA1600846A79D
76DA0D37DC90C3654823E41E175B5E010E4894C1937CC85BF068B4EEB8818E57
572E87CE830F4A8BCC6C811B3AA0CC487B8440238B6FB1C5160F3FFC70EB1AD1
A221B4B93F4BCEFD481804C9CB60A63D6B0306CCE788C2F9D76082561CC3E046
B60941B646D1C3E73076E65F1DD206402137C3DDF3D4C9279F1CCEA27A908D26
E9007C80EE0D522108756283FC573D87B30391C9D961282CAFAC0B0355BE21AC
3DF713A28F56C3EE40B4A1D8238805A61BE917E2307BCF4E67944019D4C99C0E
3CF0C0CB2EBB6C8914A3E7CA80736C588F0619564B1A0C2C1654D349C332905E
2522A038465AF646F8826458812055FEE4980C027A698EE30A9EE50068E71C5C
7976D9B2650F3DF4100948D00208964630E917D1010AD735F87CD4C3AD8D4AAB
BC073D3B1819B212420CC7AA5E4CA513D892EA828922D5F2836914FBD8BAEBAE
9BBD0E82E645CC2D6FC1E9A2D787BF3BEEB8E397BEF4255FC154F314E47B09D7
4396BFCD36DB4424444CC9DC80439DBF669C2A026AF862738DE6E5B842C2182A
A0CEF79936A0FED0873E946379D2492745FAF9D3C9152DF089279EF02C49E6A4
1198733D54FBEFBFFFAA55AB08BA811A467BCEDC5062500AC5BDBC347FA1D7C4
526836AF263BB90E9A1FB659D60299C88A30D46BFC4086F371D24220DC647605
F2679E7966C8CDEB5FFFFAAF7FFDEBDA7E8873C1BF801720335CBE7CF929A79C
020C390ED0EE7A58AAE7156E04AE42E9C8418244E6713C883A65E122A4486415
E27FE519153182F9F99B3BD935439A5B918AAA56479C0B123631718248F784FA
4AEB11EC0488C0118DC421FC0DB714F06C5DEB424CD744919B23A14687161A51
92C2DA1116B92DF3DF76DB6DEFB8E30E169B0161ED279C7042F445A66128893A
9FC65E5F078DD690C6C952863034B215FDB22AB548C6F006C31ECDDEACF41906
2C21628608709A36A7C520A2F14331C21188F81DF530F556E2BC7C7051133466
57A0079263EA374647A3B1E967FC84E7A24D747A633E383E39E67BEFBDF79557
5E99B798BAA91428BED5A837235B515E3DA4352ECC43A167530242881CD3A8CE
0E18CA565B6D158E0091E4B0F339F7434F9EB5B510B48D94B1D1461B3DFEF8E3
7AB031B5B90D30B06C7FD00E7AF7BCE73D6F3AC3E47FEF22E685F0961C45D47C
A80CF20B272A6FCC22F3AF4A499B68C6597C08EB7BDFFBDE0B2EB8200422B711
40A18165DCF370327E663EEA59B96033308D44FC8637BC21E727DF44DFBDE69A
6B324E2683A8AB9762D1F9873DE3CAFAC0073E90F396A7342D6417C9580DBEE6
6FE6902598ADC87C704BB7857A30549B88034D94A838885706DC67F97923A64E
3C341953615CFD839C480E36278477D5C4B38C10EEBEEBAEBB46D9E218C0A25C
A9AE771411D921B466167CE0D69B6CB249561DB0B71EEE07D1CCFCF32CE60A30
A1A64571DEF47013701E5419F76480E973B5E805220955081330CFE4F5F4ECBE
FBEED12C0393DC137EF6B9CF7D0EF8E0E04401427B764CC82814C11C2D636579
7B24F1ABAEBA2ABA17DC3AE811048683624C0E1AE72D358846BA4CEC02FC0372
808F533AFE9297BC84509A4C32E3A353564B60EB218D596CDE4BB85C860D9C4D
D6AF3C5E522BB961A5AF7EF5ABDFFDEE771F79E491049607E0A0109680B666AC
79CD48936759FBEA67D65F7FFD40180247D21A111EF93E584ACEA5DE6B537A98
A4DB0AE411BBC116ED13F9297320D681C9871CE7C441B5B3BF279E78E245175D
44B27BEB016BA6A86ACB852B33BD7C9343142D8D352A2823A2D52053D5F76C2B
7330AA116A9BD9BEEB5DEF8AE41A1D9A097B3C5B8989231981C80C6DD706AF61
C4424CC100AE28A3D963B095E833A001AF809022A8A996311A22570E69B80024
97D35DE3193165999929A3527CA97E5C554FED58A392CF2919CF80001F88710F
DE9CFC8491A696795043837182158664EFB7DF7E1FFDE84711445851CDEF1A48
065570315E27C0846703612D82BAAB89ED6ADDD2C9CC518D90E6F5D2229D2800
791E177CD0CB0552AA7968B0658A3F33B9CCA6AFFAD9FFF9A5E980971E72C821
37DF7C7318218EE7B0C9202274CA47C2273255182D1E6B4A5E104B456008F238
68849190250020D52CE188E77F34C9340DBDF0F0075132C2120C663CC93039E7
9C730077EECF84431643E010E76B18172EAB9A81FD73930B73310181F910A6FE
477FF4476021A2622D09B2F1C61B07D5F252CC77E8D626A8048611C6EFBEFBEE
D64DF7AD04D1543A1BA96BEBADB7BEE5965BF2C861871D76F9E5970313C358C0
10021F480325C71A3D0F1A1DA862EB9B15548C8709266D2D028B4B200ED7F973
D568886A73C62292ADC1EA004D818B2F6A95A9FA90592558AA897EC23E4CB599
8C938543F208D7C2B2A2C30C81409148330082CE200F84445B24F42C79830D36
88A0A6C50F5DD63C99BA46CC150E85C302524ECD0DF225F2D3ADB7DEBACB2EBB
002EB45880A08A3F30DB181C04CC75EAD70B3CE7C405209979361DB008465407
9C6124EFCDB505FE45875A3DFE5B9517C736CC7B348986C5F485410BE990584B
0A0C903D02FDA91A95F4AB2AEE96A0D1029F71326C568AD7A075414D132B1E10
F8817938DE96F375E699671276CAB926F8FC861B6EF8DDDFFD5D041A3C7166E6
C0E7B8B3C2C17A06F829DFF8C6378619E71B1465F6A2BA7220DF6C9FBE24B097
703922125458A13C66C30F4CC178139472F6DC73CF681AEE3BAB965058860224
94B38E17A639A1BDD4F09A56981CCB0127B1811BD907FEE3CFAEC2071AB08671
B042B11BDFBC9162E3529841475806C7245EC3CDAA303A8B018F7A602943B55E
890133B2D27F4E44EEDC69A79D6EBBED364A85882AE6828A4BA256A5BA95F53E
FBD702259AF50CEBAF91EE801210074CA1234F3FFDF49AD9859C9EEB6564CAE6
9B6F1EB4809DB0DACA74A1C8B243B60D413EEBCF2079103DBE927EA30A07FE27
D520BD98DAF4C8EA23EEDF74BD5672BAA7091684BB6649B622B5E4185F7AE9A5
418E6F7FFBDBF083952B571E7BECB1F98947E407AD3B0536DC70C3EF7CE73B03
750D7B234E11A85EF662CB2DB78C66F9DDEF7E979D0A041E7BECB1886979170A
B45958507C0092C79151387E06E000D2903F13BB15E7B9A1860E2246645FD65D
77DD880BB36432D00ED9991DB1864074A057BEF295997016EBFCF96C7D1983E6
98C09A5E096B871D76B8F3CE3B21E588178B7AAD463D3B1EB106AAC72A327314
29E383F2EFBEFBEEFBE52F7F39C425D48A7355BD98D5C7A6155464C3106DC91E
AC8ECB972F3FFAE8A34DD372211C5D8CAEE8CD0621434D38C619872478236C73
C33EFBEC73DD75D7F95EC98469C435742E2FCA1232026E782B455053A9AEA832
60BE343223D320EC3CEB854BE5279CB5D47AFB9BBFFAEB096D1B8F261BCE16E7
9F3CF5A217BD28FF86BE0720CB2757604B629B416A91F9088918583531004C27
10B71E438B7C039270A791169C7A03B333CF134E38E18A2BAE80EB3348CD0D6D
13D9026EC7A66B5AE4DF36D1A7C9C3AC414F242961388447B2B3016F5E4AD92F
28AD66124C20992A36B64A945C6C5528735BA0946157AC5871F2C927B72E72A9
16633CAFDC77CD8C3A481639F0039BC55E6BE59217D4676B98B19F473DECB115
6355BDF01C67B48C8CE98E19C22FCDDBC47156C32988C9D25A86918C1C2409E3
A8479E12135069CEC01B6DE44A9BD2806B903FD6B52815018EB93978486BC02F
989FC960EFC488AB857C5C426EEBB11AFC1D8D7A5A9579D6040848D106A113EA
130A2F8B92BCF65CAE8C19792AAC77D4936A72CE830ABC9A2599B80D7DC15D27
EA9C7EFAE9514083A311EEAEBDF65A9EB23426533560159911EF3D528C099A10
5CB55582712C65374BC343F3769F349322656763A8DBD7BA66698E292151D238
3DD9F91B1D3792C4B8D7393276208B8D381FFEFAB5AF7D0DF61CD0F138322953
AA9F1523EA9C0D556D9DD5A19784389E7FFEF986FB425F347E20A5D680498412
230616850FDB81FFA61A6FD93B45EF4AEB9575AADBACEE4846C04760B82C310E
D36FE7006059DA64934DC2DDC19C9AC765358C0A2B8568E23CD1DAA16B9E05AC
555697C4F96498186E1AFC0239A54F3CF1843183C1B490BF68F0A141D929A316
20AC5AFF781DEE834C3B83FCD9E4625342CB22F7A89951EB8DDA3835773680CD
9D8F3CF248C65CB56AD5FEFBEFEFBBC8529B562E813C36C05A1D2992C455575D
45708A5AFB7892381B913193F9F18F7F4C0911E512B7D5F81AB02E83FFDEEFFD
DE29A79CA2A9890DBDF8E28BC3604871D60C3E1D2B37EAD9CF2095E1F18ADA37
DF7CF36FFEE66FB685C5433817D364B19A6D2DC924B9E33366C2E38F3F3E9A31
4555A5CB9642C32599B5B3EA9AD085122CD9443DB2325A75781BF7E036A99562
8B22455BEF619B24B0E65F537507DA9E62013645B626142F6424B22FAA304321
60C180A71909474F1051C62420458485011BEE9B47A21E64C9063AA06360D2CB
A6E4BDD5ED3AEE3541833F04CA49675A778DB3C57E537DF09690534E1D95BC67
B054F5639A01F3597348568AD50497259CDB00402EA2BA2C56011B5697AB8921
D378FBD3CFAA8383CA5B35EABA0667053AF90686349D7FED65F88F874D3783C9
30121727471459BE219D579A0B531CF7DAD1CA3E06D91BC890B760CFE4049A90
3A2B5DAA72B55632E104880743F7738D2630DE413F652564E35E16D1CC044407
D2528F39E698FC5AEBF550DB761058CE01D683327021E8CDC55308060328035F
B1E0B97D2C4107393B05576825069E40212083E58799CFF742A6A6722A314026
8C181A006A51F8533245E36D801C9AB544D131AC32083773BDE0700D8A5E9401
B3465062F3CD370F175483372DB8C6AF99EBC923BA00D94A6EA87155B58E2087
107311BB40650675DF8F7EF4A3BFFDDBBFCDBE844653EB06134BB56456AD8E82
D23509182D01B7139174D9AFDCC9C111563AA13378086BA8096810F932039A38
60F107E9AC34F7AD6F7DEBDD77DF6DB55BC93DC5F6281E10A69B5547788D1096
B563214758A990912C8A39F91C021D061060E691503ADD1F482D54B5CB5B105B
17D580EB9752835AAD101997B767BDF00F935B2ACE70706ADA09BB89FCE15923
53390CF8D8638F3DF3CC3357F7029C9C9A6C10D558ABAAB7DD76DB3DF0C003EF
79CF7B2EB8E002CE20AE53069CAE47EB9460EA9900260142BE2D7B670566008E
0C6D65F5B9527F789A5073641047A89A9971DEF296B7DC71C71D1487E071CBC5
48DFF040E5913C4EBA9DC972322ACC8AD9FDDD76DBED8B5FFCA2F13A3C15C844
CAA7365CC08866059942A6C73A8D1BD11D91E657EF3B265F134DABB5AC9A9DDB
DFC58065931C732803152E11024CCACA54A18D180B390E6F7EF39BBFFDED6F67
7F234D56D3FD400C9ADEE59F462BE40845ACBBFAEAAB5FFFFAD7DF7EFBED84D8
E086613D180F11CC71CBA9F82F4A28818B4467E084AF9E33EE979C714ECE3BEF
BC6C8F5656EE31D2D5A0CA0103D66065CD746DA74B306045549609128C4ADA43
46D86BAFBD3EF8C10F4E57079572CDF7FAE9D30C3873D874D34DA3751D72C821
2B57AEE44E92D22CAB44C2A2F64C32AC30B310905211A55A3034E4560E84D220
E25ACCC408D58173A1E6F256A1CAE2F595C7D4F9FB0AB6469DDB14A39A47380B
FE188E4059A6A44B6CFA8228E33B47A4531468C5235B917EBEF7CF98BE564F2A
38BEFCE52F7FF8E187F11F53E6C97417B1CB8CCF1AAE92F55A0D0A0F4240FD9A
D7BCE62B5FF90AF281A13A9816C84D02D31013C12E90CA439E61F365A8FC5D77
DD950749FC0392E1DC9FFEF4A75D660624493D3F65266F7FFBDB3FF7B9CF5D79
E595071E7820561305444510DE48341927BA758953AF3F6C63342982C6DBB3AE
D050B891557AF6D8638F1C8AFCFAA637BD2944A3C2DFD7D52020E43FBC21621D
38A3A9D6C22FE843D5A730888B6EC58837D080C7BDE23F2242ADE95DD5A95908
E634AC870F0181F311E0C90DBBEEBA6BB6836252D98B830F3EF8FCF3CF3FEAA8
A3DEFFFEF7E368274F69DCD32BA2716699B0BAAAEF5AAA0C09AFDA8D2B913464
2994E4A69B6ECA9DE4D1629ED961871D2259662659728DE3199C3E721131B35B
514B2B0B679CBA167AA3A1633C4BFC8A249D7DCC21426072A72C0496C3853BC9
E45DA853D0E3E8A38F0E3DD4C925C051543886AD274439F8C0992AC9D24E6638
91A4B275D1610913B4A369ABAB448F807F425F85A429FE41302AA53019932A35
C8B7D9D768BADE2F9238B80B3BB41EAC7ECA5A1861161E3B45E3631542311B66
55997A70C8242D761DE70D7BE02021F1E80AB55E4F7D7B15FC6BD400EAD412F3
D4D232EAD1FF3A0809B2A8B94373BD5709E7BCE6A7D79DF673B5B699C80FDF8D
F643B52FFEF5D843FA03644BE37A08A75D08E31E408729128995FB4F3BEDB465
CB961D70C001D077806FF914D9AD622648039C9940B59C0B55968F05B29A9431
AF611FD320C1E1B7D2CDA2F047FA26DE87641EC8D6A2F7E7B6D0B8C30E3B6C20
6448E6A6C9749BCDFEB12985E9C266EC53C4699C2B45FBB407C2B7287F911D0C
26B3A7084F997F284ED423C420C4A94A8207755B6187D00B8C01AD9B43A21A12
8287F6837D9BEAB898BCD8D075D75DF7473FFA919A6E2DCDA8DEE61E011FEB7E
507482842290A422214FD16F4A88850787FBE2108174BCF7BDEF8DAC6C1E3641
DD8446CE2DAC2AC3BF9663B4930FE36025CE047203E782ED3EFDF4D383C91699
5F8201B3B49AEE6F693F5C03369BD29038502146A50474EBD932A8F2EC3E9168
B987B4BDF1C2387CF2C7484EF3278A9E12EBB7BAB7D6316D8F9D026212A25A4C
431D0B5F29FB422C55EB8931E848E19A592CBCD33A71836017A210A88B805D1D
AA6BFC69E69F2FF34DED60D6A60A82B69E604D59989D76DAE90B5FF8825CCD84
7E89860D30783683E77591DB6EB8E1068CF644B0134D8DBE5E5F270FAE7E7189
6D4D93B19EB167A12DAC49522B2B8C178B826E3D370C742240C43433425210A6
DB248C51DF04E448C5AFD662AA2F1A32608F1CDE780B08A00BC205CDCD37B670
BEB4F35BF4323E7075EFEE906316F119293B8F6FBEF9E6D1D9611E60AA89B95A
4D89C518F5420D38C94C915E7C3D3DF4C31DD24B3FEB11F5C26A3F6913D93CD3
D6E00994D52AAAC153138D7BE9070F9532BE1800C19DEB858420FD1610370018
DCAD4B9E163BA8591A4933FF22B55403E9A8545E25A8523182E9A16A7B364C80
AB0120D0B8512F61C14F64696FB4D146193CA277AD7ECEBAC6BDEBD62CE00FD4
6E640E18CCA2F75761DCEA54793CD36056445AA987E1865862F75DB85B03391B
588D06E2369810B04353289A81BA60F48D9C80AC3008969E6F4A9F562295EBEA
ABAF3EFEF8E339719212CEA01390678C7B4D7576A12D0C77AF660CACBB148E37
6FAA4D145FEB4528E0DAD9CC38642DB7F3BDDE671E3FF1C4132FBCF042346964
88BA9B9A7FA52484D50C8A1ED80702F99EB28E6830F90BDC702A05BB34A80E84
D19AAC61241A63C2A830D552AAB01682ADC4D75D1EF752396091EAAF5535F213
F0D462818500F9838000B96CEB0CC91ABA524ED80CE157BA302544350F986315
C5FA965B6E41C6A57A3FE24BEBB6812DB6D8E291471EA9195C56F2119F6BD781
5AAF517516DE03176CBD634FC5FF56AC08E09BE6EBD6BD1E603EC67FCC1E4C29
50A2AC66486BFE329AEE278258E5F4FABCE1D0E35E48B9955871365A41413430
7AB4FA56ACCE3B8B01D7F2EC3AB6AC38B6BAD70AAC62A59D6FC01C4EEB9ADE07
61D423012B031AE806330953D08581A872102C210FBD75097D601998A66BB921
72CDAFFDDAAF5D7BEDB5C0B1C62084013FFAE8A3440F8D7AE564D906E21E2668
58383A22C5C64C739C26916A78C268E950ED2A4CF159E915B647928615EC0651
BE730B0BAB2E0A8750DE8C19199FE22C56C0A1681F223FA1A44009B29EDB36DC
70C3806BD1F73A797DED1432B5961B7A2D5A54A0A7126319C5F95E8DD2A43A0A
1851AEABD6516A45781CF5FA5C039BB3AD6F30774BFD07594FD357261C8DF6B8
E38E8BFCF7D4534FF125B1B58BDE4F3F54E550BF77DF65849CFF7CB974723022
9D0544E1078ADB55E21E95340FBBA000D236E1C1DC503B038642054AC71E7BEC
25975CF2FEF7BFFFD0430F7DCD6B5EF3C0030FC8865B31F7E5D52F7AD18B2846
A6D36789B83F643EC5B8ECF5134F3C813D1FD305819A41BF1C99C8BE943FA35E
1BBA3E15752EBAE822E327F01A2848298EF3464E65C6CC410E5EE193C67B820A
4E8EAC1666A5CF5A0CC7363B2861266F58BA9CFCD74CA056A759F494554729E8
2A1EF20D9DB22C6984D304EDB096CF1CE82B6B2DEC13230DD18348B470B8C5C9
279F7CE9A5979A4C08EE81F66452E0B040A797CE60A59478027CFCCAB5633172
D86892BF2BFFABFDEF5AE78573BD8694D0D02F33EAF1FFC8C1024126CA981699
9203E137C160C068386294AA5B29CA38DFABE513D33EEE318FF05D3C3539E667
9C710686E50CB2E79E7BDE74D34D4AF9CC3F380C11A8C5E78DBAA81D44287654
0BCFA178CCF5DEF070AEFCBBCF3EFBE4C4D10E04AD008B7175837266D5A7E74B
316D8E618DE1CD38AF7DED6B33E640111FF56A364E8657687AE457D246D8FD67
830058EAF465E89DA951AF7AD5ABEEBFFFFEF1A43312E95F4B54C2FABDDFFBBD
33CF3C3353E1F8055861B4ECB10E6AEB4B308E65C618A1665EE318A3272EC092
BD0D4EA35412E0CEF5F2B3B39475CD8C1E724E322F3DFBECB38334C822D46AE0
48ACEE3D682BF35E74FCD18CFA70ECC421871CF28217BC206FC9D2F0C48B5573
A5BAF2A231145C62B9965B1979ED98FD0B936BAFBDF65AB56A1561BA8E2FAC9E
F7BCE74597FDD6B7BE8594079950B36945FC1498F44D222365907F55214C5CEE
2CFE676C0BE273E0F0E4934F2EADB3D64A4FEF7BDFFB38D8AD07FA711ED6EA1D
9F96B0977074B1EEACE9DD4C2B820D2E746E5230716821A40328EC9C442F8F7A
59C1CC21B2111962ADC41FD530997129C166DE4B6DFFE2C91F846DB7AEB499D2
3A2AAD47C06D1322F58BD7AB4DB8C5565B6DF5E0830F4AC8607B541538F2C823
0361D192DE000461C0BA880523091B2A8CB4570B0369C46A0B2B602C0A640B11
6B3984782D8142B52D582B2ADA6FFEE66FDE7CF3CDC8F750586D249879E67AF3
CDEA891BD82DABA9CF000B4C14642B91B687E1176AABB9AB4D24337BFEA00BAA
C009847C38E2882322A2D5FA42BAE4B5084230DD626D2AB5180E42A4814874E1
AC1E905A166A50BB86A0B07CA3B9DB4A61D3677FADD2B31905A90A016A11D41B
31A26850EAEEC20B2FA44127B5E70E3BECB0E5CB97C3E3CDAF81B2D5683EF7C2
FAB21C8DB57A333D1D2EA605B7DEA6BA461E108A38EA1523B415CF955ACDA4B7
28D380336F7CE31B3FFDE94F5706DC3A07F15CCF95BEF56A3B3282BF0D8A5A22
3CB58645E04E0F289FE97D2494B0167DDC9D638F835E37DC7043D08893902FAF
B9E69A7DF7DD17FD92DC03A68BE1DA44B4DC19E8531B1268523E66D67B0731B1
AC730959C1485A4376572FACA01B2137B29B9A22C50E518E4188F16291997E26
D49E32F1044672443164A12E5476C88477D96597CF7FFEF3E79C73CEE9A79FFE
E217BF98ECAC59F36F258BBA953A7FC674D8E5039E84C2C46951A8878E44B379
FAE9A79FE93DE3B425563EC1BEDBC48635662139E711B956AC58A15316DBE3D2
26E88C69896FE4EB0C4E95BB45EF87A0908C8121A49E4CF3F3E0E5DAA6969880
C4BAE67AD59A3E6DAA1A9F56D6B95E57DC1045F4955AC12EDBBD6CD9B28835A3
4946BBB41294A38C3010C66E61331F227DC016888B4179B8336BB8594D1B1D84
F0D4AB95681415CABC2B47FB9BDFFC2695E650BC6A9A56087D66550BA48C26D5
82107A6CDB3757FACC1B0B034CB06A56DAB28423C9FCDDEABA93B4CDC222D24C
336D9DB87904CCD78C09626BDAE5A2D87BD60251E606DE3EDF7BA507D4EBADB7
5E8E216787903ABB05C0F36893156245A1BAC0815651279E78E2C73EF6B14C43
7E3CBFB05B97344443974965EC7E95AD5B9774335AE867944842106AB1082433
FDC4AD87F5E00277E15614201627CC9E69E7E6A38E3A2A52973B9EF990516988
FEB8E7BEFBB9EAE8B51F2B1E90830F3EF8E28B2F86A4DB49105AC43199E6AF27
9C70C2CA952B8DE8C62A0900B1D6D49290B23A8412BE5713E5028C6A2CF89BC1
2B42C745B94AC3612883E9597A7A9A014B4B2126B03F03D0E04D685F3F6D183F
0BA76B901B51911AAF5AB1A78F6607378559660B2DF9A47C8160023874B15455
72DAB24DE6861456CBE7B43754DDC879FEA4341B9FBEAAD7A7061D04E7A29E7E
E4231F79EAA9A7C8BB6F3D9E7654CA9B55D7C860583EBCFEF5AFCFB9253C4A43
90624DD87968DF030F3C902F11786BCD2691C972306D8ADF8F4BA6530D7A8493
21D2B649D1282441B7951B065E10F1C638D881DF11BB654640B9C99C738C9F78
E289516F4577E38D37DE7DF7DDB7DF7EFB638F3DD6BAB766094374849B88384C
06696CB7DD76FBD4A73E350BAFAC0A0EFACDF7EE2898C5708BA073B7898F1366
B9C4EEBBBA17BCE00514BDD2A3AFD4DF7A2ED6A283E4ED79367B47A11218704D
27AB09D9ADB0FCD6959B51E9C8B6E1861B46060A050CF541DBAE282ADF628603
9EDABAC565519FC868B188452EDE6E7793D683B0F2AEC8CD21F4C4586131CE46
6739F844CD9765238018A546A18FD6FA681382D87AF9AD254CEBA3A9B48D6A82
9EBECC7C354C12DE8955DCC9A8C4C048B8D934273515E55143B839EC50614BC6
92748B90C153900E4E01D6A32BAEB8E21DEF78878AAC6B01A36A626175492212
656E1442D860830D36DF7CF3071F7C304C17B3B64B8E1E76E79D779A9026A180
40D5865AADD4A020645ACE54016B95476B190D2A3D2025A346A34D562B63EBF5
99718D2339A19502848AF91E042D70D41870B41046ECC6D6BD1757DDCD1AB194
A3075A66048D82E01EC262CDC421961BE301150E705E54D65399EB749BA6E97B
E4C74A214C9E6A16BA1E5A4F3AF8E908B334E04B2FBD343288BAFC124131D55B
5E438A903A3375CC59885A7AD14071CCE2E690B07EA42AEBE08804244D9E71C6
19CB972F27227CAE549669A52E0C72C7741FC01A5C636D749000B9D2DC65F35B
8C5A42E55A42E0009F80037C020508BF887762909FE598340A467AD17A5A54A5
B0AD87E66295AAD9CC58662C5243D11CC49D00F0D0430F8DD4FCDDEF7E97C103
5BCC3BAB4B77BF2A09B6EED9E2CA7200485E17A9F6FAEBAFE724233B1BA13048
09B0A081F28D356BF019DBDE0A419ED4C67149CAAC092AB5BC22617AD8E5982D
7895F1F5FEAEB5B02FC55AA59DF0ACAD1C9CABB6A497C1133BDDDDB9BAEB243A
60E0EADE6E96CD457FB23F63A80F21D0D05CC84410239448D3F460D5528481D6
3E2016D317BCD330A58C9F6F8894CC1525F23BDFF90EB59CD0740F38E080ECFB
9A5E9B095D9073CDF9B5DDDE6852E167871D76887A1D5152392912C9565B6DF5
C52F7EB1CDB8A6A7BA442401F62D280FA41984C44160472F17CBF79060532A08
92C271EEB046066434837EE1A07916CB8D0DECF2216CE6FBDFFF3E929C8C0A2D
255FE67192DCE67A7F406D6F88D135A3AF75FB3067B3C666D72E7036D493F622
B1E92D86ABA14C3367DA9FBCF5AD6F0DFC23F2C21E5464ED6341F202C27A96B0
DE7AEB2191E7152039554241570E2C317AF3939E898140DE85A7D2D228188AA0
E441F581D3DA0D5573354381EF230B867CD9E4A6F6F1833C7200CF39E79CCB2E
BB8C98533295352DD4E69B0A46D85C41CECA83B589EA4644B2074472968A9CEC
2CC6C59A5907CDD74BCD45ECC84C064CF5000AA3E04A5CF43623DD252E982E5F
F5AA57FDE11FFE21F2949A5CD577D7F42AAC6CCFA0F89C6700CF41AD8564551D
6DB986BF66C2D57D0553A1CF125221BFE62F457CE62675F5D8E00B2FBC300287
CDC0CF3DF7DC2BAFBC322C99F42104CF25F2536D1A5FBD175E586EDB8495EA24
58741CE89AF9FB79756DE53B4D610761A56E0AB84ED873F035F0AFC69901DE57
7B267350A9D2A152B700DCC2BEA70BAAA69F0F3229D18F3588298151DD130B5E
EBF150FCF44CE989ABB032D76BFEB5D28778DCB3FE67D16B880EF7C8D4E77B2F
DEB6985161E0056C4B86F251369CA6435923E9DD28AF88CC3FE96D621964F5A4
7637F3E19E41682531A24609418FF047F8D241E08261204BDB6316FD32DA76A4
ED002458478BDFC19DDA4E5B2FE89173914986085A9463DC6BB3183BFA4C6F4D
460E311F721BE49B620E6DC6252ABA234B30606D3388BF5015359E6A0314EDC1
190BBF8F7BFFEC3A01D8A71E506CE9D985E38F3F5EC4965992B84C8A26CD57D8
59FDC1AD5B3B54B2070C78756F8CBDE79E7BAE5AB58A6A5079302350AA828201
D820A9E9866E076C9138954A6115941C818CFCEB7FFDAFBFF0852F102D5F59D7
C04E9BF7666723FC59F632CF66C068DB77DF7D37A432D3C0D35FFD140C658146
DDE1CC2D9321A29E8076DE152933AAD41E7BECD1BAED81DC5782C55882C60343
9910045B57CC08287309D5DA94F964F996D4F574B0D7A1F65FFEF2979F7CF2C9
6C8AF1D2AD9494804F61B65CC25AD3A64CD0A3D26782DBF2C6B7BCE52D6188E1
236CB4215D4B158C5462DD74D34D8D2299BE873A26488558D8F3F93DEF794F4E
359417D76F544C1A5BB685ED9D5B2779DA07905C087BC3C2E0F9E1030631D40B
11281843421BB88E8541E6544B1B0E0E39FB8DCFA6754E83E90C4E50D33696B0
43C22DC6BDF5A6112EADDB845B09EB9F4550B4322139EEBDF7DE9FF8C42754A0
A7AD883212D7D27A00D720447954AA38E52D992DC522F43DD7F1E5C110D32053
FED2A8801C6E856E45A856BC77DA246A9E2EFCC9E2D8E4BD8C7AB4E134D92576
345C81107160680DD86AC76BB3D5BB0A6A3A451AB03AF0294E07F40D34E059E3
D7CC7DABA7D5808BB6307AA5F5689A41494E1438940370DB336C09747A6004BD
090BA80CD8C90C04B281A76A1A568130A5C8E140614BF98B62446A295A148A97
B92B95EC6A6CC08681C80857C69C58BD9EF29B5971918B1A1B96B0401839B5BA
F763B00C9CCD5CB55BEADCCDCDD75E7BEDBBDEF52ED3858DD66492A804B249AC
7AA34987DA1D77DC31DC883A1BEBACB30E722D0870D34D37EDB5D75EA6595370
1BCE016446BD9987238F7A0462EB6DD7A980587D55AD842B62501D28CA8A1188
3E6B7A730BB2C8F24D143E24721A535E7CF1C5617E048E653E5170C96847E5C5
30096CF1D4A299E8514229CC5361CC79D71D77DCF1831FFC2083238BA3316709
4A63005C1C5B7BEDB573A815E950B2390E78B82C8005DD209D097BC668D201B3
1E280E5DF84B786AA4495BA96AE143785225C32725E3401546126A25E97F20CE
82CFDA2AC653C53E2B43E15C30AB1CD53C9BC38B4ED5BAA6F153F7539B7DE5A6
5FFDD55FFDFEF7BFFFE8A38FCEC27EBC86DA4F548207C5DBF06AB0AF0A7D6AF7
6EEA33BDD718A9EBBC82D2CD925D444B54193B38666F3EF0810FE43881A0D93F
820E089EB4DA0E678F8DFFCC673EF3B6B7BD0D251B59CFBAE4203727D9AAFAAD
A79ACCA21AC6D0B71217A0DF57DA477EE7AC90CE1A0D9B6783F764F70ED28EBD
DF1631557955CD82E1D9DD8FC685042DB72299926636A0CE0C15BC79C31BDE70
DB6DB7D5EE0B1C8CFCB5C6566DC8DA7AA7EBF1C2DE29E23A30575A6A33989CB9
07683636205BD34B998E7B3AC4DCC20644D3049ABE31AEFAA7E10FFFEFF51131
8A985AC150196738571A8B99DA5F2B1DEA7BE338406E2A690E3043B382334AF7
16B7A9E690814351802C2D43E081469792B6BEF6B5AFBDE79E7B5A316F9A03AA
956BDC336E113DB1E54277C6BD0C85A53F086F6C3DAA796917C0AC79CE3A3260
23361E8415533691EC6B9D1C126C10C52C99E96806D6C92661C6B93823A3D20E
AB361F83BC980458738760FF7AA3074158A3926A8FBB4771872836CCD72ACD9A
00492944D8AD31E708E5D8E414EF6C98C6349C0981D9D6A91D4DA2A06D786AE5
324828B1DF2452E35B6C5D13AD0DBC733F0134440918F734289194EF33ED68DB
ADC7046819E5BAEEBAEB0E3CF040400A8483F3E3529C5F014B7110991545882D
58D38B078BABCC102BA32D7C5A370E0F421A8D20B10AF2A2419AF5DFD5BD7E78
FEEEB2CB2E914EA4AEC43386F4ADEE9D6F46D07A5B57AE29CD5F2D1B4BF9B459
A7C5CDCB872C1E3988AE73419DC0578A89643A9014DC18022238361648ABC9C1
5CF6A5113406F786BE67BF110C0732576DAE30288FEC62D93080BBF9E69BE71E
8AFE8C7ADDCD1A7A377D618A6C5D116C45FD9D2B457C96489E1635418E41595A
E36BD62CAC2E34F0F98D1726E1B5CEF6140536D96413EC19765E9B2FF551F531
4320705470C06A38BEC5A2D1DBF0B4311975E2AA8ECB634CC6F714B585694EAD
D85769DDD34A78B39B5E0DD135726D51E5898D1EC4670E34E069EBC2B41EBCE8
1574DA669B6DEEBFFF7EFC0B6A87A312B9A623BC75634C8E62D6BBEDB6DBDE7E
FBEDF0EC514FD924D81ED72F52A9295E41CB7C78E73BDFF9BEF7BDAF5A3E2A09
182D99983EFD7D755021100444518F8E3FFE782ADFE9C33304AC025C5F1A2887
9B063998926ACA49BA4B5B77DC2E7104FE3E5FBA9C40387FDFF296B74468C8CE
D2A260DCABBAA26D0FA2E589FB7590DC96B547FEAEC6B6FC3DE8A0833EFCE10F
67FBB223483FD09F9C9D2C64C58A15C71D771C4E65BA08403FC137BEB78DF433
A549A276912A379B644C91004813C1BA26D75ADAD31652267AC85A2AC1B4E90B
45CD6CFB5D0B71547786C479547232DD8251A914A6546152161A171A141882A3
5AEAB46661352B11B8468FCEF502D4C2C767B1B35AA2D25C73204FF40C8A93F3
B7F6DC34A1680BED730ABE4A21834C907ABF0C8B9401664BD841CD12541637EB
29871A88417B7F0A6B3652928D67CE9A82B6955814FB71B9839A175D74D169A7
9D563B37B4DE5F81F61AAD1B9F05BA7B30EEC51FC693C26C005A93695571402F
FEC2A858926C75BE5F4699D71455840C0DE3A856BAFAF3EF4B5FFA52887E4809
E60ED59725A8302A1D5E10C6C47E6E5EBF8EBA2552625A8F6A817058D4DAEA80
02AD324BC5AEF1C2BCE42A7D2B13E041D968A38DA2ACE7116D416BF5A68D8A0B
9552B023348922EDA17561132CD43500FBD115A4B11A76CBE3F40FC0358BC176
2043C068B353AF7BDDEBBEF295AFA807DBA7683CD5C87369065C3BD28C7AB880
E19712BE5A26693AA26A50EBD160AE361165B0151B9D5179704D11692583A0F5
CA5FAD44C08E4BAE17E403B2525F1774CDAFCAC455B0D01E3BEA09F11A8D6631
3CACDFD8B190F1ED2C220AE15FD4F28F45216F09BA6EB6D966D1CF88840FD0C2
B1AEB8E28AD1A43F042DCE4CD83044912451929D30505B600BDD1124ACF4C1E4
DD5674E8D64537B802A6B2D5BDF6E1AC384713A848286297B3E9CB962D43E987
E7B16BF6416AC53A5ABD9B689903733A06E736B14B8B395021DCE455FDD57AE1
3716C43564CF53AFC910564708CB5C2FD42500DBC47028AF52D8C550610F66A4
935958E14BA7C53B89582D11EF11B6F19115B594081DAD76CC6C5D92AE32EB78
D27350D357D5B02DFD3D70F140DBC7BDA512B48893DE7A80EA5CEF3F4B909DE0
AA1D655A8FC2B175348F0B13A1A4E1619A4F71E270CA987D5A2D6460DA08421F
DA8A42A396262A98A4BCE83E01C1E0C17BDEF39E33CF3C1317779674DE79E75D
70C105999CD5A489E037E0D67233D52ECFDBDDD49F9F5C54A79B46F49C6D1AA4
E8A0C5746C8F520C47F9F5777EE7773EF2918FE44BC08AA9190943FBB0357D40
5303715B69FFB9B4A371BA0F3192E9A86437B562E39A358EF80487335305D2AF
25AA75D7320356D26955202AD91A18591D27E83A515FF6DC73CFEBAEBB0E87F7
B8347F5CDD7B3C1C71C411975E7A69EBBA8E3D0A1118C904D0F54B0416710070
1D8350C2A53219B030BF6EB7DD765FFBDAD7F869DAC38742B0F1C61B5BC24631
A84645CD95C66DB3B606BBC55C2977E580D371F24AAF9C76CD7D6DA1A15B22C5
7A0DD38062E2F752DF52181A95781F8465D301B51299B34F299F6AC8A10E4086
05E00AAC2A13E471B5A938B5AA2B4F5FD2B8B6B01D78BD415B3AACCE40598C93
74A460A38118E5FEA90F2A0320AEB3D6EE96317018E72675B6ABD7069C07E1CD
F03124C2F9B46ECE992FCD2D66AD57BF953BF8CA57BE326866C416EB0A6DA56D
1F49FC86F9E4E060E80EB5C17D6065D63553D52A5A8F0ECBC83BEEB8E3E73FFF
79FDDF035C9A2B6514C70B3BA00C02B578450E23E6ABAAEF46FAB9F6DA6BC7A5
E464A8475E9D7922555823E1924B2E39E594538CFE6D0BB92323AC59AC1E1C1A
85DFD8FD89E86E730EA71D1F8313EA2E0F6C1B41278CB47CCE5686686CB0C106
915DA0159501CFF5FEB9C60FA103D8D24DD31762A8825420B6CB2EBBFCBB7FF7
EFB6DF7EFB2F7CE10B73938C7CD362F165E880AF5B8303ABDA83B56F410357AC
5871F5D55793F009286A55C18C70F0C1075F75D555EBACB34E54A06755114687
CA63526FDD1868382BFAC7A2D84CBC31E28361E88066F5A4196A2677DC71C785
C48734502E07600114CB7643B660572CEFB5AF7DEDCE3BEF1CA62E8699C30AAC
AFBFFEFABDF7DEDB6C221CEF39FFC4D9939109178130CDF7C61DD94B4BB38225
A4F0B3220B72E9E094C12F51512BF3BFF1C61BC3E9E53773A578C5A844A0AC59
B23677EBF1E7C84D73A5D46565C0B21F2826C2667D177DAB34F7518D12710CEB
1CF51F007815F3AB6C642807AF03AD758454935ACDB6C49E6942917ABC7EA9B5
7AB76302CE07362E0F7CEBBA1D635276634076E50D4B3B74091F3568486F0B7E
EBB5D75E9B029CA35EBB9503A9C3B5C6C26866AF55DDDB4416CE6855EB02741C
04857D04174C3894149012D104867280AD5480A2862B9549307262AF425C46D9
026E7BEDB5D7ADB7DE4A4489F60C0D274B987C3307ACFD0073BE37B3D23CE039
ADBEBAAA31803FF56FEB9110F669805A11DE416F761B9B0A617B5A38C2A8D4F6
1AF5207CA228707FB489881C05E0ECB3CF36EDCDD2CD8B1E55CA4D9C7BEEB927
9F7C32D56133C94C29D279D86A7E3AFCF0C3E9786FED7A832AEA4CE80284D080
F4600282A6087498ACF455AF7AD537BEF10DBB3C0DD4CAD60DD1957057C7792B
26224F0DD51F596C804C1C3BEE5525066FCEAA8960875A2273D788D1CA6EAB46
3B5E582D0075A8CE0455A196F06C537EA569AC1B387A84552BB1149C7D7BB6E2
DCD41A6F757AD37E5096C6BD3BB8D62C2C5BA01C31715456DE70C30D9F7CF249
4F31DCC18E039816C84AD5C5DE2676CAFC94254BED0DE952A6C77D0E24B10E6A
ED032661F3CFF6A5F661A227B8637569436D8055EB76003DCC08C584D8E150B1
11262109ABA7EAC9514B126CCE9232DDAC19FB557B2E1761F784FCF9A5A88613
3EA00F9433D588E479DD85175E9853AA1317150496F0CE77BEF3E69B6F260D2E
07EF9C73CEA919E835A0BC95E0A0712F0793A1028D638F3DF6ACB3CE0AFF366F
AA36C7AD3E7CCED820A1DB841FC20DDAC41D5EBD9EAD34E5D6CF14C13F38F4C8
238F50CBDE80615BF5B5EEDE369202616BAE573FCF2B726EFF7C72E59E10E29C
61F3FAD93509040057C4DE74D34DA3F4E39E090AE56FE6B0DE7AEB3DF0C00324
5CA231DB103AE0B26C562B3196AD5779AC0256EB2130F8D22AEE514F87414693
4CB3E05285F680E02E5BB6ECA1871E22F406F9409338E74A550C234A75A0AC2E
15893515C2FF2AEF41CFCE2AAC1B60B5967A76DA545E7235A28A0C447BE259A4
F14E88485EC4DC90353980D5DD1B1DEB4B5FFA92AF18F5182ED06696ECC8F2B7
D9669B7BEFBD17312573030E75FE8322826D61DF78AC265A86710AB0597611CD
F79936A0FED0873E945379D2492745FAF9D3C915340E1DF08861C354179F9F34
268274124FB4FFFEFBAF5AB54A02B5F9E69BFFFB7FFFEF0319E24EC64BE66D5B
FFD95C23E05F8F644E7D36945D1E4D129A031CEAC5668BA94A6BF05135A4DB61
0259A4F5D8E60AA86ADA158C83934E4FDCEA09AA279113072F7CDDEB5E77CF3D
F7988129E1CA5923BA5BEFBB321306B059C9901556D3DF80578458E7A599EA76
DB6D177568AE374870AA15E516F50D99FF03A2663BE80B123C09218AD6C40870
A8AC22F7AB29CD9762CEDEC39758E98CD5CD45D1157604C7ADEDB04CF420D01A
0736E1ABB987363610F0EC7B36289B628F42983D56DE37BDE94DDFFAD6B76890
9C1719E062DE07422DA483B8D767050878E745175D74EAA9A7524C24CF6CBDF5
D6C1661C5DE6E69AC5AB360D2924F4D196E373BDDECA786138195B62C41A2A5A
C6DC7EFBEDEFBCF34EBBE8FC3D2FE317F449ACE90DE34E3BEDB4152B5660BB86
7C73B4608DA8ECF6A269A5A8A99D49AC1AAADD068A1640A313D70022F36B0D67
D7F397673FFEF18FE76C442F81B8E4414C8822A89E7C7C6C9C1F80A658833403
3162929C5EAC5BC1D4EF7DEF7BE35EA4508CCC53B84040B510B837BFF9CDEBAF
BFFE09279C106AC85642C42DA49CF31C9A78E289271AD18D9CA123AACAC861DB
5B6DB5D597BFFC65180F376063A0523F0A0AC004E032E34B2EB9E498638E0113
C8771C68E1198DD2A7621A1B8760AB8935C36EB6D96699ED273FF9C9D5338A7E
073E04B77FE0031FC8DA8315E64172D88218D12FF33700C9C9CF808F3EFA6846
C65566F1A3AA070B6AEB999B9749F828CE0EC2CEF3467420F62863BA34230AF1
D1A06BB27CDE5503673242906DD75D77BDF6DA6BB1C4D6904967858F195B9425
8209995EF42801B44D36D924AB46F2B3307D7EC26A8592379EC4675455406FF1
EADE7E0E6D6CBCB04F9F024D96B37CF9F220582696313D71034729C833EE4D55
B1F41004CB1A2D82B1BAB768E51BEB1EB4D9BA178C937BDEFAD6B7DE76DB6D8C
99E3966960C7C62B67D83FFE7873F0DEFEF6B7DF7FFFFD38E6E9D7A9BCD816BA
2AD4A59442544CE5555E1AF631CE074B8396D0AE6AFBF1301A0685229BF9676B
AAEF9C6C4398C4B8570A134F10262A77AC7F67410FB7F1C0DF19AAF2C31FFEB0
6AF6F3A5B3537D7C54922CEA8A06D682BC2580BAF4D24BA33211FD8A423C3000
B42217D6DEA908D673BD31C39A5E3B48EF75F697886026000A71EE6AD89A0ED3
EAE48A1AF3EA57BF3AE73734046F82796E03A5DF809EBA765FC134461E0F5434
6C29E4DB8C7B3CAD3C18B86B8D618528F8AB7B1952A406AAEAB4A9DE6198DAA9
82DD26B221F2CE73D58011C470A4B7DE7F319301C9028ED34F3FFDDC73CF359A
26BCE78E3BEEA899A0EC1975F500B4C535C11B1876EB8D8672736485CF7FFEF3
6D61E02827198238E8C707E178FEF39F9FBD89BC4F1639AC5D539513AEDD36F2
EA7CD879E79DFFE00FFEA0D23B2E43C461E18684586F3DFB152C09B1D093C469
E72DD3352FAB268A4DDB2E9876F7ABB2B0AA5536DAD8727FC50D233D62044815
0B84ECAAF3BDE31DEFC84FB7DC728BDC1ACBCF6EBBEDF6B18F7DCCBA57EE1A58
44505875995B756F1A55CE3AEBAC73CE390770855267F921F4149EE40819244F
C1A05AB79D16E2988BB10C6127A05215F235C60667B8F1C61BEFB7DF7E792927
0559ADA6AC6CBBEDB677DF7D775BD840701AC81B6DB45144E140268F1C76D861
975F7E398759C96CD43B6DAC9EB4DF09F3A0C005D61D384D608E8C38AB98008A
175894A1B0EE62BE23F00D3C77FE5CB5D94EB53913F51AE4C1EA605037BEA751
2FBA691B8F4C9B240B05596DF2863868774146E4880508790A637EA61A80C051
8CCB9DD55183FDE208E7B61CFF28CDFBECB3CFC5175F9C2F71FD62FC1C970255
6C1CE98879B0BA2708EF7FA677B1D4855F7DFF06618C4BEEEF20A2C74EA0EC5A
9683DFA1AACB15AB81F601071CF0D5AF7E35F2BD5A0DC4DCF241785B6A060A44
B8152BEE2C06391D9921C500BBA80F68E0B1C12E351A7416016FDD325A0DA591
4D23B91A93FFB297BD2C5811385884A47AA0B43F1B784BE89F4DDC65D59B6EBA
6940A4664848208C8F4A03107F917CD5AA55471C71847D2C024C84038DE12656
B995E349B66DF03083043864D2B7853101D562DF26212623249A57BCE2150F3F
FCB0DE8B2C60CB2DB7BCF7DE7B5FF7BAD7DD75D75D2E83869DE35E7ED2901382
2F30106143E0908CA6523BA41A762EABDCFAEF7FE906D0A463C58C6C12C220F1
CF04B385BEA08864B156A8605DB939E0908E1028885066CE686E3EF5D45357AE
5C498935A27FF17C67F2EABEE81CF980F2C42B5EFAD297062666E21A198F7B0F
32C783B6D2E3286EB7DD76F7DD771FFA3A04489D0C6DCF8A079676726BA41728
49DAD6C4B06BAEB9E6E8A38F46B3093B013BAB34A0E37C3AC4293B68C1104812
5992E8F7E4293D33691A38F05DB5928D66F7CDE8AF9912EA8BF686FCF4A637BD
E92B5FF94A2B6622A26A2378B259C6646168CA16E7AC4E1F786CD430DDDAAF49
D3D099679E19593B40F8F6B7BF0D30B3D1C71E7B6C7EE211B27174F6E48D1B6E
B8E177BEF31D289AB18156B727888FF66A3947D12CC9FBCA9CC3531F7BECB11C
B7BC0B051A4516489A0F46B46DFE25B6C8AC419C9716F7E1D5EC3837D488686D
0FEBAEBB6E38D3A21D2D5B774372F6E53A6839113D5FF9CA5766C259ACF3E733
2F35F8B37533FE9ADE9D62871D76B8F3CE3B75A34064293E15C21AF2940743FB
B2EF3AF0DAC4E2829D4CF79E4EF4CD37DFFC91471EC9C8E14C9955345760A586
013510FEB3040E54105C3910310C5181AA9E758E492D568C24BDFBEEBB470C62
1CB428283EF58234F00E92DC585D359BE12EAD0642BE77A35B11B3E64BFB5BB7
0CE356ADAECCE135141C474634C83CFEDEF7BE37C4D6D417EC13C8B54B44D7FA
AEFAE540DACE0EA2E41912659BB84110569B32682360596E0C3C39E8A083AEBC
F24ACC5D082B1049762D7FA96AD716061ECFF762B77402C548666A4CDEB2C71E
7B1001A701CC7C395B8BB24D1E7614897149280521DB44A6C9B3210E11B20F3C
F040184A208F5FC008798735F0502D48FBF1DF86005478E126A9D5045B8FCE47
D6A67A03289BFD6606EC0D72681DB3427F3CA97A7FDE79E745A257B15E22B8E9
B95ED924D4F16C4C6662C79E56FCE4B55C1960CAD97EF2C92789C538E69863CE
3EFBECCC9C8E8A48CAA349B7BEE8C1466F0190FCABC10D9D98FA73FA05F1791B
2A923BD9F5B952C13C07DB8463E34A5A7172E0B2AA99E666BFA9F379E621BE61
39E4E1C19CF2544620A03770B8EEBAEB424A4C716104E357514D0875998E6411
4FF2A250764CEB9580825E1017C884711CC6A011885EB93B7046A4C0DB372804
0FD1C9418A5C88B8E04F946247639EAE158AF78E93C359C54C8AFE512D57903C
6D5084441908BD56694D1A1DF7F1C71F1F97F6155AC523B884BF7EED6B5F833D
938733C0BAFA590B679D73D02983C332D9653AF02C5FBEFCFCF3CFC7128B2383
1D271207E919898D561CA0C77AEBADF7F4D34FCFD245E67A25AFB54A9344895A
95D65948C5BA5A86A9063667045A9C197288F70B438206EA8B2EBA28FC2C2C19
C66C715963097593A37FE4A90B2EB820AAC9806872129989F2EB12BA57E57FC6
7EC2B3897F26091B3282E10AAB00D62C7C8D167852735522E145065BA0B1E55F
CC2AE38597E85D3FCFF5AEB484611B1C372E2940161AB2D90E5A5D4D1F523903
FF076F6CBDF222CC0FA655330EB85359B9D2995A53DDFC576D003EAB6DD6002B
C3919C49F63D6312481F998F3E2E4C3B400BC21F7CF0C1358AB3A6081AC08CF4
1F9A1F6137C7E4B4D34E6347F097E7575A48B1CB7AEEE5F19AFA5A496455513E
FDF4D38F3FFE78FB5ED4943F834C57F72AF71C4600321D45A1ABFEA4934E0A0D
99C980C1808CA2733BD33DFCF0C33FFAD18F8676A06E463FFEC637BEC1E18149
90500B755874D8C0F7A9A79E02FAC69211FFF59C18EDDC54490A9158FD1B7D3D
53C2A3CEAF354E15EB62B6078F20078FDE5B34E7C9E3365E6CA55D441E79E10B
5F881BAF627F9B781CB3D378F5E9B28761645CCA4299A2476661A879E823B671
0095FD0BAEC0686B6C39D6120F982E070F790DE6C25EA71382B7E7D56DD29126
9FB31708280840047DE4A908A19FFCE427B38A1AD13D2AA9BABC3A808D92FA99
CF7C86AA67D8BE3866DC4C313F46303802DDB7E2255E588BB3F352F602226E78
4B2B1E77B2D56B1211BE5B53E6C410FD94D527322E5DA478295A7BEE8F361C21
8C784BE94566581B1C79A2DAC2B636F583DEDCD1A429C5B8E78F592871501006
7305F6CCD5BDA906A14CBCCEE40A9C3EADA7363AF3F95E64B896689062D62035
037FDAECB2E4A8776698642FC2809730ED0279849BB9DEE5B306458F7AA511A8
D8AC30111D871C874D36D9846879645369289CDE8EF4355167D4ABC158CEC202
5EADD49F19F59A56561A31D1133D1269BE16C371B1A8683853F278087494A1DA
328422F61E2EF5994174712BEEB9FA0D4B18F5424EAA50ADF7C3AEA273609EB7
E07A68A59A713DB373A516903F993101235FABF4BDB780C67C6FB5D44AA4E480
012367B30BAD971B6BBDDA86FCD25C09768D332E35E014F8764DE8445C52F18A
F3485228670A290DAF197E621A5511B587D5DA20CD087C6161BC9D5029F82BDC
47818085788A5B89D5F09E818CFBE10F7FF880030E5026B3B50966AD01778BEA
2C0F5DC07DB9780736C69ADB6EA727AB25EB6D4260CFDA22ADB4525E60FA5A33
A9BCFAA31FFD68A38D360A03BBECB2CB22CFB6C562E4FE9ED7B475743CA9D696
F5433E4881A899DA302A9977E61C89293707D6071E78E0B5D75E0BCD7DDFFBDE
F79EF7BC275C2A8C50DB11E73060F9B55FFBB58F7CE4239CD82834B9F3C61B6F
7CE49147B82D48136619B964AE14798151D5767250CCF0EC4800D8B2CC8094A3
DB5E29DF6CBBEDB65FFCE21769DA1AF28D850ACA3B703521CD211EC2DAF3F60C
953D2548072A8635C62049B6DBAE32BCA2B296011B632B6B4000357150CEC093
D5BD0B4275166683287C58E3E7AD8EAB26C769647CABF68C7B22BF6DA0B4BDD7
28682371E67B2BF869069C096CBAE9A6DFF9CE770E39E490952B5772276E2D5E
6A7678ADAC64496AAA5B8BBA035956436EE54078CEA4E6A6BAA9DC0CAC023597
B76A57D3D9A2A213F3F715C8A3EADCA61839D4DCECBE20D824CCC46D4BF623C1
48889267107E155E4D5064E6D67EA95C67B4B0EF6FD063C71D77FC833FF80326
6FC3313AEF521C7B3A53B68AA1CE795C8A1919AB2566AA7220472AC1A820C2F8
A11EF67A313192BECEE42FE8B4D243AFD2F6852F7C61E79D77AE785809575B98
68243A4D5762D2778B301191F1A8A38EE22CD7A00D471820FFE08D5B6CB1C5C3
0F3FCCB0E15511B334BA400D3889D8C3C449E55725C5B65052E7ED58F83938B5
DC539B38F5DEFBDEF712F91198139C01C51EF76844966C98DEF5D75FBFFFFEFB
BB2FE35211881519B43C2AD99B3BECB0C3B7BEF5ADA050C4F71C0D2B3FB6CE59
075577AAE30C6F37FC8E5851ECE1FA7AF886B24EF91E1F592BBDD1309AE26F6D
13352F4FEDBEFBEE575E79656E9EC98007D22B1849EE66EB45305031B55700BB
28C4E1AC73BD29E900C9903A3993E89A0480C8E19E13DF5554D17A60CABF64C2
18B10149E25F7432FD2E810E45BBB807EADC7A6B04180C93AFC557A70D1AE299
512A52160331146CBD1900827F9543B7AE66916B31574A2BA8630D18F089279E
78CB2DB77CF7BBDF1DF5861E2ACD84D5042C190114B1F2C06EBBED163102991D
AF15605C9458D4D4754E5ADE1BD0292D02D5710FCFD65569811EF3E8479324E3
D6956674680B26006A103A9C1BF72AD6758BD392C412DC8BE4B7BA14FD1FF732
F76DA1FDCD59F152F4154DA3794B662EBDF0B81ADA8D8859CB084CC7918E7B2C
7A443112636CCF70DA69A72D5BB62C2233FB6EBD7E8415D92DA090D7D2BEC25E
935ACE2B4D645D089D326C6C54D6B6D34208C358A2CA6C2686144B08959DE117
BD3FB745963DECB0C30642C6A89403337C66DC2B2F4E33608AB549D6293F429D
1F9524F8DFC04253152F33F1C8806F93DE3B98AC5A2F46A607142CAA3D0024CD
9A97BD39542B37E4A7D0C0A81C36AE7756ADD415194D72C9824551333EF8C10F
5208BD2D165735573AA556DEB9A65400A45910F44792152979CDA45E21CDA630
9F2830555FECF429E6C28A1E2064F030C5F3CE3B4F897CCB2DB70CEBC2C46256
D520D168D453251D70F06ACC30601A421814C6D254DAC36AC987F124A629E245
8E3FB1051E28345D2858561DDCA6D979EB328A0419A72CA65C2D2ED4D6B6218D
A76F6093907A8C7BFF37BE4123CFA1CEBED7BE7C969CC23C130DED8FFFF88FEF
BDF75EF39DAC3691CF1B6CB0419E7D36376151AAC12B656C12F7674A673AB381
8980CFF7A832D9BFECE2A07896FC92E99A55A998F05C3560255C93882A7F25B9
1E652587E4E28B2F1E58DECC569CE57BCE310B2A0463F221D41FA2066527482D
D3263E9C8C8581515DC64C4620E86B5364A2939E29BDD2C6A5AF80A6A7811109
78E262670E88FC040E685AAF01D5382D6862639515232DE5FD049313FE0AB2AE
BBEEBADFFBDEF796D897710FF9B31576EB99F2392D44C09E7CF2C9175C70017C
DA8809E3D490F030046197960DB792DF32ADB6D66FAA25CD4E5C8338CCAAE155
062CE6E847B4B606D6D7B9D2DC5A99AC95006032F417B4D79E1264B3C0CD36DB
8C8E1A4833B57491323B8D2351375923D3B3E2412B51B2483CA352C45F45C4AA
4C14A2DA68A38D201383F87C516E560C4E9B52BB9139D06366A18456076C9598
467F9AEFD8CBCD56CDA6CDD0C91449C14CE436D369204435FE689A010B9C5098
DC496F9CF02A966008A4C8C6329FE90D7956976630F6060DC7A59DDC68128448
ED0B786DDE0273C51B2585A1B3A45E5292D63CCE836CE03625E9B622C1E71590
9D6A0BE58D3576C102096B962CF823770C7246FD0D55099ED8E897A42C6B65D7
521EE8A375B38CED90FB56068C5F3263861B0DF2A0CC0A01CDA8018C772F1F90
C37884A545C5CF2491BFCF3DF7DC48B14CCFF04363B0AB7D88E6B31C0DFD5F50
098B01805A3C3E901EC067BBE3CCF7564873933AA670190661B696D05242D22C
B4A697DE3373ECD96AC7B308873E80AAECB785EA02AC22EA024A77B02DA3D754
D4D154DBB8402D1C7A5CB23C09EE78AE0C78AE74C592892A9C129461D3AE2A8C
575BDFC019592FCB3E644556F8B3A86F00170C38F2C82381350568486F603284
61031FC494F95ED2B93A933434D5DCD6693C1E4F82110834C0AB9DBF2B57AE3C
E490439C30D86CFC36C40ED9B3BA586A00BDB524F7DD77DF6BAEB9061FED78E2
26C7E21DBC99553E2987245409289D72CA29975F7E79DE0E3FC604DD26590499
27063D12F2486DD2B8A2FF15211AFE043E58EEEEEFC98075ADB9A173A588D834
5DE3CBAC2233218211A10D6752A64AB439F5B0E41C7A34A27047EE469C5A34BA
B8DAE5486383042367648488C011A4D4CF5AC9EB9FEFD528B591644A010BE5BA
6A65BB56EA8269771DD89C4D42C3DCED860EB29E163D02D1688F3BEEB84863B6
F9A2CEEBA2F7870611FA2E028899A8836609129F3F2B2A3BF76FBBEDB68F3DF6
18558EA96F6C4FDFFC74CF3DF7D8AFCC66C3557F68C50A3D9E3455C44278FCF1
C75F76D96566C6CFF5EAA4DC064140DECA19C9DA6FBAE9A62C1C06407A1EB9BF
9E656C33D535A04986629CCCCD6CE05612EB070C789A00564E805008BB42B7C3
D60D6FA0E9D04E3BED74DB6DB7118425036E0B959F8A9F5C8874B43622199D70
04547CECEA845BE757BDFB03B169A0C269D2470C0A770F3DFCE637BF89DC9FB3
F3F8E38F6337AE8991ADCB1346CF803641390AFEEFBCF3CE1FFFF8C77D2F1C0E
B9D962FE350378E063E68821111E75D4511FFCE0078D0F78F7BBDF0D011C1447
028B383E78730929ADE105CE4434708B71CEE60A41D3EE98D1882B22C6732603
76C32A1BC08B699579E502FA33AF2965500C0C69DD64D1260C2C8FE4598DB71A
729F2B035603435160620404222D66CDF94BBEFFC0D4E339276961D6F83BECB0
C35D77DDC5F97CC73BDE71E38D37E275C7F723F471BAB05B3A0B0F3DF4D0F7BD
EF7DE0811D1B89B221B883D869C1A28A2083199C167255294E2B3BB746A6A237
87A47529BE75D1C720CC0CB5CD36DB84F493D99C018D929077069F28888848B1
287C4653D984AD4748D5E8E59A2A204B60D85A2A28F039FAE8A33FFAD18FE6C0
635F15BC03BBF1B4A200E6309A731E2FEC4B316B09B2AE2A5F92C013E1E6052F
78C1D9679F1DC86075D0CC505D00D5D738B89475B4DCCAC82131FA0873EDB5D7
5EAB56ADC2AEEEF886C107D5A3CB7EEB5BDFC2B90E0FB0BB49EB86CA9A716834
7BEBD52DA66738D7AB8C2D3A7FB555D03257E010A17989A3AA6F8CBF3902679C
7186655EC63D45826D5AA2B1981D446CF402F0E1BB064B1BFE366B1C328548CE
C91618C80DA2627735CB9C7F0355A37B6099428F3752890C9EB7A6B71EB2708D
45635C9DC546483DE7408DCBD5A6EA320A4CB7C9FD1D97B8C26AF6237A83E0DB
EA6568859E0F64562D2539984F3CF144C6BCEEBAEB228BFBD2DC4F26883EAC6A
D7ACB2CE78B1BC2344435028472968801F2A82C2E73FFF79DBD5589375BBEDB6
BBFBEEBB7334B6DE7AEBAF7FFDEBE79C734E247B62AC0C645BDD7BBC12238988
70C411475C72C925D848AA6C0A7DC3DDC0C434DCBEEC652F2378052F0318B566
61699451A9688485AC9E14BDAEA0B769F451C6B01D92206EF1108F67E6892417
096FC58A153319F0E07B6C41993D0E8F20DCD34F3F8D210B428CB245446B14E2
9AC835EEC1110A23F06CC2596184B3422B675DB88D6B63732165DF093A8E2141
8397AA4A6692D9994EB395F7E494D2F63C6F79EB5BDFFAA94F7DCAB052F1006D
C6FD460185DBC17888B2A30E730DA7042768D73CEAD1EAF6301F976CFDD603B8
88E8230890931F2671FDF5D76747881804927661628DB5F7351840524A9B6833
39B466B3A844C2EF75D5CC22B5FA47735B38046372D5F00DCB67A2F81AE33AEE
B5972B9953A19C65379EC5804121264349D136C3A0E767804FA9FD3593FAA952
76BC357ACDABA577975D7609F9087538FDF4D3A3E2B37D8B82C8A94A8E250DC6
04A01CB7D25213FE0A22497033424846202CCD5DABB48ED7358541E2A52F7DA9
D97716FE0C19CD69D70E847D6B6913F478D20D1A5D04812983471BC6D9367D49
CED06E574F7500CC80A46FC15C17ADE03DEE81A3585F14293278E61C243F6F72
714306A711646506EE3B269CDA3C2D5F46EF39E8A0836AB7E06A70E2F4F15232
E5C897AD45618D925320969DB3D89A4C4FB7F9134F3C3182C8686169C6014E0E
9650315F7F81D95986BB4309D13DE626CDA9A8D350317F9AB58FCA9567A35D7C
E94B5FFAE10F7F9861833C9065D652D163BE37C6A8F6B9369540E507AB849A62
CEEB086469251FC9A202403E7388CA5B8369681148C41942B035A279C4DA76EC
29E63D2CEAD3DDA830746910D6E034B04668C3AF3E11D018028E73842233402C
83EFB7DF7E51D30973D14B2216B5125D9B39FF34C4B5CA2C425047DAA88774DA
6F3280D8628B2DEEBBEF3EF21131709304E25655495C9A389AF44DCAECB31892
3D28F4313FBBDBD212D461804F6127B6E346C0C1D2450554AD22B6C4A994EE17
2717775A50D42A3CD8A63082E96630A9B74D586F9649FE157E2643DBC39942B2
6FBEF96612B703F14C2FF7D08CF32D6F794B501F597B6E529CD934F351C99A35
722A98CAD6B0E58A5D4450E3887AD7BBDE75FBEDB7071D236AE5DF5D77DD35E2
646688CA0B4A91E76AEF3C8E4AC4C9206818361D6133E6DBDEF6B6CF7EF6B38B
C21FFF3A1E5FBF24AB0A87B70D7C38B1744D31B8A3D64E022943CB42F2680997
63B668105F3DED03715E6FA574B03A02A7E95DAED7BFFEF54112C2A394F19573
B3172F7FF9CB1F78E0014AB50C6A87990D054A4CE3645B98E95483E1E164D094
36C9A42284C4905A6E182FAC80AFFB0D97649517C7BD831BF0879665CEC116AA
AC73486FBCF1C66818C10DE228A1A74B18A223A19F7CF2C94C062FCC6EBBED16
317496C0015327AA8E6002B643E6917785F8E6ED48BDD5555F0188E91EDE0F53
D15A40F51E646262D4C939D6373C60666C6BE85550BA16D8699364246A151972
C1066DB5D5560F3EF8206E112B900F6A5461280A540F38E080952B574225DCBE
5A2E430CB4F91D9ADC5E7BED75F5D5571BD327D64D33E36A8FAC8282070473C8
B897EDAC8C6480421E52344ED39D432D73F0E77AA39720181A7F8D4D514C69DD
1A21D611BCD6BA843A28CC87230C5BCBB8C7A8621144A31D4D32154793A04B92
1DC0F3D0731CDBA409307953C888D1C15A16AC88F4D03AAFF59C220351CD069A
66F3D00C525D725FFCE2177FFDD77F9D9A0DC47059A07EAE770FC407C191515F
D2146A423CC9ABA8DA6032931F9846D0D69E5D3E50AE268B019DAA0C987904C4
793E948BD960ACC7E985C417716FF9F2E5E1255ACCA4B6B59B66EBD6B9259A95
CEBA2846C81AB03D72C0609CBFF11BBFF1B18F7D8C5DA772FDA817101F4DC22C
C36CD012FE9E59BCEACDD930CCDAECC77C6FA19A9FD8D768A5FFE6DFFC1B33BB
F361934D36A110D25C6997CD41A502BE498A5A963C57D6E4239681A062512A93
C99799F0D65B6F1D56C153A1BCF20673E06A0A3FF48B6A2FE4BFCA44FFD5BFFA
575FFDEA57DBC47E12E272DD75D72D1171C387F94941CA802B5C81D0A41ADA6D
C80321158A8D35D93F5F62C931EF68F7DD778FC8B2C4EE4F6BC0175C704114A3
D6E3BA073757320A9FC0915F2BB5B65E0C64561F59F398A12CDAFFABFDB0E641
629EA9353A46BDD00AEB8D4A1A0EA775F4D0430FBDE9A69B822A0C1E5070340C
0B683DC5B3F23CED8DB897C8B83BF8E083AFBFFE7AA44328BE5DF6A414360E22
4140C9D27228F88C810FB406720CC24BE66AF2AB75435B0F685FA22006525A9B
882016F969BDC9AE0C15B390241E91AEA660B6A227545D42B9AA4D4455B26808
7A0864224C446188546AF91AA8D0DE7BEF7DDB6DB7D105A14D427872B3B1CDBC
919AF0E492224D2AF955CDBED62A805C18A350DB5CDA48715128AD59581252CE
2A039EEBFD0C6A2EF83403B61899A67BAD0210647D19D6399FEF1D45DBC29867
0DB3FA41B0BD993689ABC5BE00B52807C88376C8F151642161327333D88D138A
A80479CF0D74D843E56034A57CABC229F7F0EF1E7BEC913DCD3E22BC0EF29EC1
3D98A5D542DA4235D2475A8FB6C96C21B355F032B0C67D1934F20A55441C916D
8F6AB8D72C1A2771212AC43DB0C1671696D9547F188EC69A0D0C3BC4AF0E39B6
A7D834FBFF3BAF718F1423E2001C8A5019D283F17DCB2DB78C2E659E652B0EAA
FFC32C5EC015BDF6D65B6FDD628B2DF2944AD26852F98842271C36981CC15984
C34144B070323E2C41640203B0A64295101B33A5305D0B27ADB7DE7A519B0C6C
D11E4ECE0950E518B05F44F3075044C10CEC545E1413AE956B16BDEC4FB26856
286C0391566C3155C05040CD538CB6FEFAEB13674437928A7B4B2027BF9AB334
7D33F90F048D4FFB1DD90E688181E88B2E194C30269618C8EA73AA6C605C929E
EB35D76B8013F61C68E7E0A84FD759594D65C080D5813C6EB51C15120C966D49
80B61C2954EBB409FD58682BA8C11A7F32B95A0F23E227994D1556AA1743923D
EE45F61785A7715866E5AE2E85CDAB7F072F12568160FB7852230CD62E1799D6
1D71D1E15CA880C518531B205AC77BBCB0922B88219B37D17CD4F3B9DBC23AA9
AA5F68D5BA722A64C443CA2AE49B57BFFAD5F7DD77DF9A85BDE346A55097DCB4
AE4E6D78D40B9898A3B128033658152149F8D75CF3B690DF8B7295199BCA81C2
C0C962F2B5020C6EF2B6903F5180A2F54E74CFF466F0E3DE74005023E912F995
6FF6DB6FBF4F7DEA5384837DF8C31F8E8404929047646D7F5E5403660925C3D9
27BA565720ED3DD44A6BB2689ECD217AFCF1C7D586D5B5584B44E76BAFBD96FA
8F08D68318AE4A636DDD8D17C3B4F567376E40C846A59CD880D8197E49E530DA
0D056AAF7CE52BBFF18D6F2047230392FB186E410D1D50DC4C6DCDB33518F27F
2308EB8A2BAE38FCF0C333994C4C6D15132889CFAA9EFF1F65F16A8850D17193
34696EB4D146D9C5B5D75E9B7E0CAD84F2834621BEE1DC0862941730940E06CC
86B5AE3104EDC2A58C1BB4B915F17EE1CA791DEE2B108B4242B8CC5D08219422
134AD8061B6C9041C29EADD0B4846B0050D34D08057AD9B265391B279C708292
A93743BE77DD75D74F7EF293F9097E2390A99380AA31A8AF3940CEBAFB839F34
C74DF33CB9C5B8D7421A97FAAE881AAD97436A8B798EB9F454814E59EC273EF1
8941AB933A3DA127216BDD0A3208516653A020A62756DF731D5F1E3CDFDBA8E5
2F891024E5DBC57DBE94B9370952CE515303E0C116C726E1B81A6607623A611F
D4651BF74EAEAAAD83C48759477B3C2903FED4534FAD559AFEBEFFFDEF8F342C
5F69BDCC7BEBF5E32EBAE8A2DC89B5837C872A260E7C9F7A796BFB673EB3F6F9
491B92419C26CEDD4A4FC5494B40F01936A345041B26C484072B035ED3DB110E
AC7D386E2523AD1361F90ADB5D4FE2C0BD52F9F1DF6982C6DEF64C6FAB034BB0
C01969662C73C0E0C73D79A4BA540873835C44550DF220910FDAA2A3BD6CBCF1
C64F3EF924D64AC891557A8880238D0A7F1CFA62460E057BE28927B0F9D55A2E
6B7A575DFA1FE429950173A3E74B81D8BC11F332AA6AF51057BB05C42A27227C
EDA1871ECA7CFEE44FFE845FB103419323363DF8E083AD873E487FF41C57FF4E
3556E7EC53A982EE87C30CE069C2C795731EFE61D0578D7E023BB1D942CA812C
4168B2DBF985ED1BAD2F6A44E8AC538AE42257600E48A355E55FABB4E4FCFF3F
8B57B857973EA29F02A0B6B5E73FFFF9BC54011FB2A88C42B7A8EDB7DFFEEB5F
FF3A965BE2B9EC20665552ADBB78ADC45D756BB41C5601AD1F8477692EE3ED47
1C71C4CA952B4D8321D5C1B8B636A92467DA9F871C4AD77AEC462B061C2BA649
47AA2C5F95FEB6B030B2546F41C6671B8D5BD7035AA73BEDD9E14C6E9E45E8F9
B7C6D0D52824A26C10EA1745C5B57AE74D22FF434DC8EE1DA41D7B3F88D1A662
3A4C59C6F62E53CFA6E3DF82AE65D5545CD74130E0C1C1ED37BCE10DB7DD765B
EDBE80810A330FB61FF536B80282E3B804977121D251431149A8BE74401CAC59
88615FBCD5DF392E79ED4B1BB70C2DCE51C2F6B86661F38F51AFAAC1310FC10D
40B09CA1CB4E870BF82FA2FFA0EE69669B0318FCA40F04920A4215472C1B113E
61A4029963CA01D8422B13AD151CEDAD32EEE5716A8D14290320426921679479
9A1035D7BB0ACE95FE8303B23CED345C82017B2AABB951DC501AF6430DF5AFB1
41223CF413640307D03E75FD2A590AF6418351990831220160F03F1FF09BCA6B
463D012750C2F8C44F6190DFFEF6B7DFFCE637DF7DF7DD16DBE774C8715EFCE2
179F7AEAA9071F7CB010A8957646BD6429AE7D80AFC112DD49DE3C5F4AFC6A8E
1E24B262CDAED15B83ADB1D4FFA8B705FB5B13B4F20EB0ABBEF75CD16CAEB9E6
9A7C19626A7F72823B9E99F40CC7A51AADF4D8638FD5D14B6AA336AE9AA18CC1
61D48B99CD3A9FE39EB9D1BAE162DC43616BFCCBE0FA0795C54B5A9456627474
6088B9D87CAA9A4D98F90703E83A40566E6ED865975D427091F5CC7536500598
13A8428003B30A10DEFEF6B77FF5AB5F45D0A90C58C8D3A4A8E6B30F7A21D46A
BAD54C5703439C79858CA685B65801A0D1247A2ECB37C3BDF5CA4D18C3C7A564
D5B362E39FFF45456B91644D1BD36C75D16082BC02DE667AB1EA6F0DAB5E33D5
F7699AC061821EC4B44FDB8D5A116E2A41AC34AE75B6A728A0CDC660934170A6
B610C0D27A655DDAE7A98751FD8DD38E8D84C9A81357751CF7243C3B9F15A35D
452BD1B0DAC9D659671DE2DE2D116AC67935440F4A280F36250A74F6F49C73CE
39E698639050338E1663646593D191D40F38E0805B6FBD35DFE4F8604A51ED68
25F25CFEC7A653250A8195A234BE450383DAAABD29AD692F9D111A1293D6654D
BBF3CA80353829AD5ACEC2B023A7417EA3D558E71616C66A53266831BFE2675B
ACA296331F974A64B842A85AD82682AFE98B9A240720857F60738688F9769478
743E037AF4CE9A05AEDD11ACA8A2CC2F4F2E7CE16829588972409E99342C377E
08B3B3FA18155158A9E8076DB47BE6B3F52E46A3A034951C212FAD387A7465B6
DEF0787569510A57E6AC412AF189CC4D0A331B2BA0D5B0624BB54C303E473BF7
E7A73085BFCD0993FB82F416D0E26F4409266D78BDEE1F83B969076465CEC0EE
A8A38E3AE38C33DC3FF30E2555BA126765E557064C3C170C9BCFFFD765F1222D
E25E95FCE1CD023E7A2330A45B0F0808481907917E28EB765FC14E72D1451745
18F2110DADF5B83A5B832F82F7410B70259B4EADD06AA31BE462896AD54E45E1
FE3695C2D8168B2DE006A2DB486F07E04C75C58A15A79C724ACE0CAAFFFC686E
20E230C85A3FFBB7A2E500FEA87438E011D5CDD4C2F8A900B1B4AE667BED005F
9CD73FA4CA5299E5A8D4F2AD0603566DB6EBB847B504FE91BAA2ACE711F3C76A
0CBF0CD817D91A9910FA71A98E5B8B29D25B0D73ABDB64D93C2CD824CF60EECA
67FCF7031902461B7C7BDDEB5EF795AF7C453D58D34525FADCBC4486A1C83970
0087B366AA114D38A7DB6EBBEDAFFFFAAF070DBC9FB413236CABFDA9AE4E91CE
F3921BE807C3718086288DE99EF7CB566AAA54B734378F27D16103060C9BE7A5
06FD4A66255C9A25AB21AD566262BB07B9CEF51079102AAF9DC58047BD48AD51
38F91C95F4D1471FE538032BA326CDBF50FE803560D7851DDA040F564A9C8AD1
0CF26C339A74900316A89C9493F203D4A8C15EB5E5965B4603C1716B04B26A40
C85DFE42F15CDAA69B6E4AEB8E8C5CCD69F2DAE863BFFBBBBFFBA10F7D88AEA6
4601D7DA88286348B15870C725A4C34D69250ACAF1179598357EA013AE5AB56A
FFFDF76F93123DA3B9A98EADCA629552F36E2474F01E0116528BD21C886447EF
BBEF3EA69BEDC966C015ACEEA6C1F6FAEBAF0F9F33916B9A6E6AFF91D18E7BAD
3B05CF59B1D379EA252F79094A7920F80F338BF7E0830FBEE1861BC8239271EA
F35FD3BB29F0D9361218AB89A234D38E2544D6B9EAAAAB54A643A46878803B20
2F0A61C54DD84AA007F2074E1AA29F80BC6165AC228BCD1BB17352EB67F554C1
F7B95E460A88B1709CD30AC595F5B69EACE9E399CCAB5FFDEA77BFFBDD471E79
E49A491F313C256DA2303DEBF65E339E5BA87683E53F59FD6C4EAD6982F5CA3D
5893FC462BD9A8B41077024B7843444B389CA6A0F95ED65FB560AE37935FD33B
A4D6C63BF9095F06DAB3E48317C15D02FF3DF7DCF3BAEBAED3A8058630084697
238E38E2D24B2F6D5D93B647A135CE4817017F8800627FC725A0A64DA4F24C06
C3497EDD6EBBEDBEF6B5AF79E8A61DF0B927CA04698735A05D741D95D646B38C
0A06D150659A54341B474A64FF7A7269BE53CACC879A3C2ABF57128292E2D4E4
842E5BB6EC8D6F7C63DE72F3CD37A3AF703F2154A86BA8BC0B8C2BDD0EACB008
30253E9501570B10C03411A5751502E5CFB098C0C1EA81D599854FCD90DAB630
0DA915C77C9544AB6C3A8B016BF3885C1BB4D143A14EBF56694C591930621CE5
C103B1DD77DFFDA69B6E0ADA10C09C9FF6D9679FA83AF2DA6A86AD7ED68A12C6
A3F88D12E14E3BEDF4918F7C8482A6D92FE533BA47FCC66FFCC6673FFB59D229
717265F07DF7DD371330DFAC36A8E05D942B01F8957EEA75D6913CD7BBCB545D
D4E81FCBB3B8E3EC6C35530DD8193BCB21A5D5CD4F63B8F4E2B452177EB07FD3
22527D8151F5A8ED1E6C834D90262CB36ECF0A246EC3D9C5155E4D88D6208BB7
4D1C8DF2E045CFF6EADE201DA19E0C849A6BF10F3F8B972285AF78C52B9E7CF2
496D53F686AB26414469362843457E8CE4C16271B4CC4FFA610DFA564A7A1C6A
6ED23A09D732E49B3A59F9E9D65B6F0D1C5AF78BCF9742DC35F3A41E2AC82810
D60B50AF51EFE810200474F8268847E306D909C649CECC5C5B401C1D6AF57881
8D74C03072267FE7777E67101832EE7D619599D62C593EB7758117F9A3CA5895
01CB7E64061C1CDF45B4A0B60D369A4DC400432D058B630F188C564D193CB7B1
351ABB0C3CD47A46ED02AC794CB51622C023B556EF768C1AB168980FDF18BD82
1DB59AF44DEC19F7FE138B0213D92BA24CA6044FB2C79A818A6ED97AEBAD177A
97D7FDF66FFF76D417300AAA322EF975302DB82F8380AE864C06D3727EBFF7BD
EFA12B33134552B33C060E85D1C29267A31E053DB7B006351D415AF7D1045B76
DE79E74F7CE213A385219CE6170067BC4588B690410897C1F9F01B7FD50C3048
99D3C8AC605A5757A58A7A4C24A46B7A056F0C729C3B77994AD4D12F33139A85
5B4C9E841CD48F6A04528CE04BB88C9DCD50273226C8F9C217BE905C6DC829D8
482F1CEBBFA23269D5A86E752C94014BF0E4873FFCA1BE98DC6FF208D9CFB5E1
4D5B683068DDD638D7EB3CE72F51B1269E09ABDA4068D4735C45186DDA5ADD39
9E4083115078461664500DC70055F70938627926C9215CA1263C706EC58CEA0C
5F679D757254E67B6BE175D75D97D657E810465155E4C809C904082FCA651ABE
5A85E2E72CE19ACDA60C37015C681BC1ECBF9A5CFF1765F1020A6D5338B410D5
C793AC094207972F5F7EF4D147A3777236D80E737E305A444E923EB27CCC0F19
879AA58A99B921F26C3430400AAF0556E0B7F646E321B3BF1901EF206F37A4A2
CAC215B5F8B2367BCFFC831BC1759CA0185A58E9B3168BBF9AF424696322B046
73131DABF729CAFE52856DDC334733CFC0E4D8638F3DEBACB3C02B9BEF6A5737
6C1BDBDAEAA992B0125F6C776DE256AF5E4F696ECDCFC92E87223FF2C82384A9
1B306CAB3E8046317A4455D5BBEC3BE687908F3F9F5CB927800D4C7444C15774
2EEA96630E215E51FAB122E0E5C91C429E82691C3A3466683AD4CAB259AD8707
D7441D031D46BDC58D1E25432E3805E02477DA8A95652A6E42E6D0391043F360
2016C232A8AA6FF740399C5412AAAD1591D85AB6833243F2F58037F7835138BC
38AD708BEA7AA81EE581F9BDF5CA1E468788D50804EF7CE73B7FFFF77F3F4B46
56184F8A8DA3270D82D17252328D37BDE94DD1F0502B45B93C92798E4B0FB11C
C30F7EF0836C7AF642110A06896C074719046A4D5B37A779B0555FEA0C757E99
56C00D00BC4DF5AB08D5AA15B907C75CF171BE57FF8588E51199CE79E79D77F6
D9676371945E8D4BB806F447E9D3EF6BD388B630E6C08C41B92065433CE04638
016DFC35C01398581BBF2D0C05ADF19BB5FA349134DABD01636DCD37EA65BD49
FD78564468DD3840EE41D61FB488C653E7D74A45BD2A6FF2326606EDA84D575A
E9CCA3F91EDB66762248869204C7AD40443DA7B8749BAA76AB915DDBEFF4A5E6
1D08E671FA87288E65B1E79F7FFE49279DF49AD7BCE6FEFBEF771747FF80B378
AD8AA0D46FCD3CB01F7409DD0985624A882091781E7AE8A1D0EE00A48A59E861
4621F23A7C3C19E4CF2617E7936E7AC493433121BBF63D658FC2297367F84DC6
C4C9E1BB68A433705FF1A0D57AB181B3CB871F7EF865975D665E4DF537D713BE
682D49A22DA4654833ECAFFA0A5BF3F18F7FFC9E7BEE09AAA3B504C299003A37
548393A3282DFED763CFABD97D2296414E363A608F782A311D9522069C1DB025
7CE5CD6F7E7364D9134E38016300C67CC24FD8ACC027187BE28927EA21B3E6FB
B8C496337E3662ABADB6FAF297BF0C0273038998B4D202B570762201CB8C2FB9
E492638E390642660FD4AA858F4B2715EBFBA036D568C40CBBD9669B65B69FFC
E427ABD9B3150B271B542914E19CF066F2BEA44E84AD5AAC43B3D09A5E5D0440
FDD2E47AD5AB5E75CB2DB7383DE8A97D295AA98D3CD70B5968B566643DCA7C9F
3151A6ABADCE6EB294D7B76521F2B7F82CF9AEC6EAD69510345D2C4F35382E38
969FF6DA6BAF8B2FBE581164D75D77FDF4A73F8DE2483C94F9B2226A35500FEC
16D33C12A582851B9EA6AC6FFD4B8906C9EB10795C5799C36FFDD66F5D71C515
6D4ACFE6D5A142C1EA903B5C8AE31E21DFBA2D014C43F4648B15E302614819F1
EAAD383850ACADB837EAC9CAD0253116D021E2E33B9836D1F357357775E953DE
7AC20E084C1E0A3A3A2768C71D777CECB1C7FE1FF6DE044CB2B23CFB7FCFA9AD
BB676355715805C40CF0810A28EA77B99004138D06302A268AA8082220209BEC
6E8323BBCAAA28E03F1143142410C5200105090A61191411148890A808220333
D3DD5575BEFB9C5F9F9BA7ABBA3B12FD9B7069053B3555A7CEF22ECF7A3FF723
19E21209068A000C529D2976BE7F9A8192EA1C861970B6DB6EBB9B6FBE794001
F3B41C89CE8F2002F804D0402CD3A2028EEB6EE4796864CF39E71C16AE3E9474
D684A1B09D961FC0BF1455A7420CE158EA90423A2426C3075E980BEC162686EE
6C595DA4E894BEC3E9C40CFF9757F1226E486CB01974ABB4E0250CCEC6BEE8A2
8BDEFCE63733C25A79BACF4816C65EF21DE2CA901D010AE1C218848269F9741B
3A121DC338C7248A4E2E8122EB8145462595390523364177BEEDB6DB4A8BC826
000C4F4182EDE5DF844BD260C0546728B06707FAF131DD1A1C66B65177466325
00C689A4BE362634AA7AF39AD7BCE6AAABAE7229B95FAC64EE3CA28A9065AC76
8C3C135C385EEAB630D18A8F9E282280781553DFAF5BAFC7C131A4C5184E7F8B
B395EA380D67C029E101D173DE59EF78C73BF4953499B53579FDBFFCCBBFFCE2
17BFE8EC43C42B19141653E614E0917B2205E3E920C307E3075E11F30B705D5F
39599E82419F6AEA5D521844D77445C3CB99597DE596DE0862144CF4F61861C7
D51C528ED22F85FA3ADB70DDE93D16F9D62128EB121C74B4237F0D534D43752C
A42468F48461C70669561D058E3FFEF8638E3906D51B69255C3421B951CC54E9
9766F27DAD805D04CCCA61BD791FD95CB31CB06E739A63EBADB706103090A2E6
133915B208FFEDDFFE2D464DF8B9CBF0FC22CC895260A9CF08524B814B358A08
20AE45857877FF5DC4B8CF63C112CBDCDD1DC49E8664BBDE20C1EC40CBAE958F
C13F9187FA2B11149B84B24F391B26265804D2A0F815AC90D26EC0E22B022A12
3341637ACB2DB778555125FDC217BE50BA5976FAC73FFE717761C442C942B129
781962B3208C8AE9B03D562D858F123A04F4E04CD7615B6DB5D5F2E5CB357CA0
D2ED0EA24D99D41D76D8E13BDFF9CE6CE92543A5F43702EBF35948791C84C45B
75BFC648E3E2F3FC0F56F192A67DF18B5F7CFDF5D7C3D5E0C212F04AE06ED0FA
0455C88E20980C1E910ED0875B6CB1C575D75DA71F4A11DA2991E696896D641C
B3C0BCE83E77DD75D72BAEB8E28C33CE78D7BBDE852D92D78447561BE69B7437
12000B7C4B0F5D82D8FDBA032EC9FE39D04FBF3E9724CE0A16AB1EDFBE6FA326
33B7FDAEF7EBAFBFBE46C606073AB25B378B754DA7531226817AE94B5FAAE5C7
66C10FE3B486D9A396A27D594C675902541F5B89B89241D6EA81071E0850563E
34A568D11A20E0E9D30E5827260CC14FA2BA0CFFDEB9039CEC343D3E49008D15
CB43C97FD52D495B982A9275F28A57BCE29A6BAE49D379A0B4A840961A139ED7
7C909A29EA85627170AB6E59ADBFD2E8FFF88FFFE85CE9739EF39CD7BEF6B517
5E78218C579A44DD004DD4C115A60A3866C248BF242B75663D9DEEF06B5FFBDA
D2A54B8F3CF2483DB2EE6D00851081BE186AB184BD31BD650BB61A67E057D622
244D08B31144B4099B6A6CBF97AE0B935003C03EACD449B29032C3CC1DE63863
23301D98262869FDF3E52F7FB98433D98A58EC3BB03C06DE3B214DCB45AD31F7
3FD015CB3A991A2484BDC5F198F25476388BD10F645E598DE286DA05E169D71F
CD1D8B410830B806047DE4D0B1D56ABFA6DC8A93C8AE87D13AAB898670855DCE
E7AAD76C3AAF88EF16D43436071D7DDEFDEE779F7CF2C96C0A9C131DACAD271F
838D1C738E56B12904F0754BA0C9E4FD1F74D0415FF8C2174C0DE9DCD39365A0
58A064EC748A9D77DEF91BDFF8069CCFA966EC63ACA5D535314C838372CE596A
096AD1CBF1C5ADC1BE2622E798BEFBD6E9739DAA5FB7CE8652C472CAE93A2C3E
E60CCCDB21871C72FAE9A7CF5186E45B725D0D05B27328EC08476AD4349E34F4
76C3F9C89005B722E1EEDF65152F8925A237ACB368959BFFD65473BCC1796260
79105AD292B3C400D202D08CB8EF3A87B1B2713B10255E76A4A8B3BAED36BD8A
C9BB93CA65DC64AEC96833B4E7231FF98854B8CE496F699B9333B25AA6A7CE25
99EA1400F503BA04FB4A776ED4BD798B5CC20F28CFF0137697C42E567056D338
474D4F5C1AB05BAA238A269835A187D786F7888E27D0A711D0AF7406E22BDA6E
9FFBDCE7DEF08637E873B606672080E60E83C615CE285EB16E37DE786342EB7E
46DE60497069B664117AAAEB3D0198A8DD71863029745791BDCFD7D5D9DEF8C6
37DE78E38DACF9B8B374CF78CC3476D48338BAE0940D5D92982C5D4543E7CEC1
A83A074219792DB3DD77DFFDF39FFF3C0EA5CEAC25670317D4926E12107EC45B
11EAC42C33B493035CDC85D19F6A7665A4FF4E3BED241F4EBF32394C5EB3E6C9
BE84CFCB33E240AB438EAEFDCD43FF72AF256E4FA7CAAACE04C4F3F557F30E4A
9C5A0C1D492E899D62FC1AE26B9B6DB6B9EDB6DB2257579A093D970D61DAF989
BB89C3B9E491CFA7B3D246CAEB54D726593FC5826C1C41F2774EDB63C1389241
58056FA711F8EA7D15DD8C163CDE4511988E06C650C7BFF295AFFCF18F7F2C13
9088348E9FBE92A839E9A493880D68DE1D3CCF03BB08D2833E1CBE0D53E77224
5635FB9A9410A78266DC2617E69A3B8B9B3D826BE9063456AE0B2DFDAE54FBF2
8EF223D00D54F6704499124BAF588BE6524FB581E396C54C2AF8755208EF7FFF
FB659C5AE701C48F524CBAEACA2BAFC47A4A432C5AEE30381B084BC793571E68
4590CD596112C90A9C5B72B5007C1A4462F52C203F5D3DC912B7136CB6A3F4FF
43156F5EF7C060C5E3ECEA36306B3C35260F8A90F5B3CF3EFBD0430F85CBC9AE
24A600B3666A5C27419920735C609E4739324C1E193317BA379074A9B6A84066
F5EBB6E1B1ABC18CB3F394B8247598C6810CE5AFD969232250E03BE4B6C103DF
7BEFBDF0CD16752B18EAACCCBC86448097D132C8B2C6C0E06C3A990E43E1A252
F645AA70E37A2F1790223AF2DF1A7F424A7BEDB5D725975CA2A78888EE8815E2
D29A23B980975D76199975AA5910A31C8C44B0C3E100CF404494EEA25A9671B9
B2A7244AF4B9B9E752C8B8BBC542AA4D55B74A33034324A3272D02F2438FC9B7
F6991C190239A1E988C8525FDD5C407A435F905479C94C0A67A317A1665F2B01
1EC1BC7E393C468835AE28264EBA102204833171B5E1E5C7D0D498E455AB5742
26B1C420923B1274443AEB66C85BE53547A976FD11471C31503890D50C0D303F
D87C2426CC318E1245FD345C3230A0830D5070002636CBB14DCF4E71C32BD789
D875190E2E6675FD2A9E25FD159C1965D7ECB2CB2E175F7CB1C57EAAF14D4EF6
BB3C240A99816254DE5075C90A27F8AC6B5162600BC07598455D5363B8BBBEA5
850903ABCB51CF69BF9F554AD7610CAF543576F32DA1439D9BC06DD0A6D009DF
FCE6375F70C1053C38FBCB5B60AA16D3FC38C3FD3D22509BB9E17367A1091E6A
A4B4DC65815E7AE9A53278F1F92878E2BE899660777B436EB5D556B440C011D4
577419A3217CAA8D6B549DEC323C6CB63D9A6036856A0C21469CB6258D57E778
459C73B45575123DB843197250CE3FFF7CA84C5EF292975C71C515AE7526B2DF
A829A9532826FBED56F166758D1690756DDA534E39E5939FFCE4BEFBEEBBFDF6
DBDF74D34D455DA14B00DC56306FECBED0C7DBA625717B6484697A3480E79E7B
EEBBDFFD6E1D033A9FB4535EF1B1110020686F620A89FED7BDEE75140EEA782D
03CB473C1B22190672739539CCA35F9F4B52B7FD9B74DA48A1AF00410ED9D488
1E5FCB72DF21717DB2E38E3B7EFDEB5F970886D79AD0A24B0E9C76B2FD4E3601
D5AEABEB54008E08FFEAB464FABDCF9929BC70EB2A1B3AD9F4EACF54E372B102
BD08D9922E4CEFD54CBC45E019D0E264E119A940481F9945DEC4DBDF552511E8
8E41E987658A099521075848C41B18C9882CA3DA42924B1B96A1B6370C2C43CF
A59B876EF62FFEE22F24C1914B2C369D64D75D77FDC637BE81C4742C0D9B80EC
581ED82B23AAD419F448E8C162D302A603BA9347765A3C5096AAA8252B36FA29
D9CC92D48A049C9E022F27864597F8E0073FA8AD27A14AA0058CA44EAB0191AD
43790C9B88C884163695900399D11955637CAF830F3BEC300DDA0F7FF8436A2C
91605EEACE61A3CC986E4BCB819E5D455D4FEC959982196DCB4C370FF20BD807
42D29E9EFE42392EE176EAA9A76AFC253351D2B13A390B8D3178B15A9C9EB7AC
D0C8EB0C7123BB501059ADCBB10DB10634ADBABA5C410D8B911C28FE8849E272
B108C2B6027B903B643CB91F23C8A63C60E78DBD158DFE75FAD0861523CE1EF3
0FD99F2E7BA263148105BC4696940317AC426E14D96DD1C03DE8D635047A365A
9F5AF0D9EBC5399BDBA325F5E88AE91959FE7945D88B611A5A2BFD8AC0BD5F13
23A3F22911C130840DC0848BAC42172BA7E9BEFB6FB78A97B02A6BAB5F37618D
AEA74D3354380208FB00950081D130AA330B0536CDBA513C9C70445D8CAC612F
45CE36DBD1035C69EC586E7ECB2DB7D4310EED323E03BB68E0F594B8247F2B9D
366253C554F3B4442654737BF15BDA8CE7814137ABCBD90714F0E1871FFEE52F
7FF9073FF801B38F382842BD38557CECF9BCE6F093512B3302E3430385A79E66
62164B75B3040343F0F501EB31BF6CC0013BD5DE7F0A69DAACEE2F69C590050E
45861AFDA739225C44741D7DAFF7D40E6DB0C1065A0F0850A7EE0648BF63DB73
1BF7DE41E0AAB0B9B96EA4FA8AB2CF5D25C86B127B937BA09323BBEC374BC268
C7E99E351D6CB739B25A067378A7F01583E97286D813498769A9534011F19EAE
0AF1C2C8026F0F65F4C813DD309A40CAF8C8238F74C28BE78A080F472FA84D8A
81E268107877C7E3535DC7A1B351E58199A59F50A4A0BF1A7F5984AC0A143CA3
3D801C8C0EB4C61C7BDD483D4C4C3D23336BDD91A6974DDA86E36C9190196F3B
D611A51AC0E14BE07868D84109685D69C1BCFAD5AF96E364AC0F625C17D29106
B17B9D7BA717354509E60EE6ACA36E7A0A80B4CE06A690C3F6BC93062573EF63
50E453A5EBA611E8864E172940FE064412C30D9684256B5C9C065DDECFA73FFD
69943C862A00106226146B3A61E3058127413D89771D2F221E8062CC4364F0DE
F0EB139FF8C4FEFBEFEFC88936BFCE3FD0F16D406C5993C9E9917BE45D442129
EE8203326F7DEB5BAFBEFA6AED04DD152AC7A2AD984EC31D6B52D36FB58AD721
539D1C6998D77C3DB6B0FC68B60401A9124FE671E274B345F94B151DA230329D
DA71476FD9BE493510433F07DFEE6A6C77FE915D058130F54288FB7C4EFEA9F4
14B924ED0CFD163B6D3898E1BA9422504BDA8562492313919E03A4AD11508D2F
A5BFD47EB092DDF53D8586CA485B42A33ACCB19C39AC4FCB442D0FC317F473AD
A86DB7DDF6D65B6FFDC0073EB06CD932F4B49781716AA8077D8B02886A38D57E
C080C35D4C6F9CE7DBCB42F389E10E2EBC81FD86D6D4C4F7908694E0B33C588D
BAF4F6DB6F7FC30D37F87162E226D284C5BC23D09648714CC0C30D0D753C630E
F7CB1C0A9813127C223026C18A6EDB6BAFBD3EFBD9CF52C7E2044144BF0F30A8
DB81B3F031218C05B21EFCB4D34E7BCF7BDE93EAE6F0441DB4C22531CE3CF34C
39588C959E51525E9B8B9333594ED5B13E6DED919ECCABAEB4367A4093314A3C
29910FEE59527DF7DD77D7CD0CF039731E07FC4843985E2605A68BE160381595
98831C3CD09745E741B4BA194FAC2F822E03F42B56A6D73051A2484793025B1C
99D081EE3E5806FD9A53081B081BCB028AA4AA6D2FA6CC311E9327C62A6A2255
4C3D883054BEE36D539BC492A55FD365392BC0D1D6C438C1B1CF2B0657AA1BEE
EA16A5C39044845C98D44898C95361EF138863E8317324D3696BE524B6135D26
7F70D06C4631C4F18EA273FC1C0ABBA859F2754E6DFB3BEFBC3336ABF2CFD9DB
916234969612F477596DA36E758E11C090321AC56FA38A97DBC3032036E54090
2BD6FD4FF707F4192039D1FC522232800DD16606A5E2042D06BE69314821EBDB
BFFEEBBFFEC217BEA00F1191849ACD666A2BC19524A4D57D3FC4D0BAFF55438E
5F9F4B5293F8BBECB481D30FCC180C9AFE9E75D659084D5E60DD4D8F8728C700
8A0921EF5BE7EFB53564EA9D73CE396CBAA2E20460D82375C3C04B4290AEE39A
35F94C32467575F4B159D0B5D2749FB81AB83218342C03FBA658CC4004528D05
7310E2D754C0A6D5C38CE031355CFADC818A33CE38E3B0C30EC39F4855C8DD4D
82518A2EAB8D319B48091063214EB512C96372317CD155B6C386E5C66CB0122C
3FE7593514B63BEDF14870A151089803AE6CD65D0B9956E3CFE3A27558657860
F5B936A34E4B8D5C9454C309B82C54AB73DA46DD1A928C460AA0BC546382086D
62DE7DE8431F3AF1C41363BF0A1D036E94F50300C2D068F39977EB5EBCBA377D
059A5A6776C0390FACC8A96E1C3440244053F9254B962C5FBE3CAFA9F2B50B62
01A1CB0D623893556AB7981F22228C6907A9CE3296B404812879F5A217BDE8F2
CB2FD78398E7806D68320993FF732ABBC58C8F4923082993ED4EA1FDB94C968F
7DEC63FBECB30FB9734746318CA62503FCEAD62DEECD6E3310F8E615B734A5C7
18D40E2AE2D712678E29747836624D18DAC8E86896C8C1071F4C5304EFB1D984
CEF08BD0B7CE89C770F6D967CBEA8F2421C3BB8B29DF72CB2DA505DDE22DAF59
676D9D4560023FF12364A1B16B941411DBF2DBAAE2E59CEF7FFFFB2FB8E002AD
7BB2E38E3899E5CAC21175C5ADEEB0C30EAF79CD6B8E3BEE38DFA40BAE580917
5E78E15BDEF2166C3D5D97D5A99B0160A23D8038F0AE6BD40DB7E100A291A7C3
A10E49E9A10887B8599E157C73A656BEBC8AA7C22569E85FFA9D77DA800D0A75
EEE732108C4857AA5984521DBB069F4F885EB24096AB96AB7940BD0DD9688647
6052CC385C805090CE03941751F8C6F887650DA7C5926331687C0E3CF040AD49
8A1771473C2F31931A5588EF24D5904C33C445FD67A405013DB68FB7B94B3B6C
EB6B3476DB6DB78B2FBE982564167A6BACAC26ECE5FC6C43F4AE05BA8163E8EC
285BE6C669C6C890F6CEB265CB90F5DAD1A67EE360B886B83D4E2B0BE3BDEF7D
AFBD5B929D7194A24937A0576C736352DB7503314E1B2BE863891122E80974A5
DA41D202F8C94F7EE29FB013590C317AC7752D16BC6080585B9A99FECFED198A
0098A73CD5C03D53A6A4E9762DC7D0BBD79B853D8299AE93EB13F2EB3CB50676
E79D77D69DFCE8473FD22E83BBCD2158CEE3B079A49A48B579ED7EDB1E649247
BCD7752999931BB6D34E3B9D77DE79AECE7732882431F873F8D7088AE8A1604D
318179AA2A91241E7976D80601A32190CB840E2B381614BAF8CC5A33A6646238
C51236ABE887308D750732664924EBE0D34F3F5D2B0FF64A3D1B626E009D48D1
855E445474972480757F5C4547CE5DF86BE81360139B026CB64F7FFAD3324022
2E20FA318D5908A59954CDF1669B6D268B0CF506A40207976446AA528F68BBA2
A622412E63BA1AF0493C60FBEDB7BFE69A6B7E2B55BCD75E7BAD5323443F58EE
4CB3AEA89B973131877339E3CB3443D1DC71A41A3432817DAD0449195DEEE31F
FFF841071D64E14EB081F5F3CE77BEF34B5FFA1284F8B2813EFCE10F47351049
095268AD5AFC77B9245D6393FD8F76DA90072C2346FB9FB98084CF917396A2FB
1DA5DA0005E59B2A235D934ECEDE4BB4A8DB09F76B76B0D9548543BE909B724E
5E8E6CC78CA9090DAC0CB2BAEE22D5580A0BE58877FD751430F8065DEB924B2E
79F5AB5FCD09A9184E35BC9F2D63E329C23C354AD21C4C6E541BAC0DF21DD114
C8EA0A13AF5E575E35EB967670F70F945138F63EE3A872331CE082497FAB413E
F9E493F7D8630FFB4F8E6A60D9DB3122D28B168C49A214A205C6F7EA257D7FDF
7DF769CBEB0CF2A8A4EC630ED8F9118BEB46DD578AF82DB1137DAB1D74CE39E7
5025E1E1C2A9D03935DA3A2D7A859520114D2CD7D8787DAB6B0182E15988ED53
F16FE23CF76BC1C2369E2B8EB323F0261848759F3E9DE1539FFAD4DE7BEFCD18
EA00CAD0C94B6A3C35D4D2BE3647EC39E81EC8931262345C0E3C29661C87616B
5ADA90D9D5233B2BAAF5A981EAD56D8FA98BB303069F3129F654D90DA9CE1802
8945CEE3BA98495B278C7C20DE1AD9808512EDA0E8D49B7B3ACA38C7EE8CDFA3
3ADB959D26DB332C2205A885338E8EE85E79E59532705C730C9B1581D65FA7F0
37BE1CA38016437FC901477B33AE89D94EABDB268B89296A2043162AC98A9A7D
0659469E4F8F0065074DE2502A7A4CA9F3BBEEBA2BFB6D54F1C2EEE63BF11400
BAD10FFFEFFFFDBFDFFCE63767F3FB677BB930310BE5EA3CDDD1471F7DC20927
10BB2680C1EE423502DC73F953AAF385A6124439E13D476E0744063B367A12FF
3D2EC9FFFD9D36683BF1FAD7BFFEDBDFFEB6EE109717B5473A8A548EA5B0E4AF
54A004043DF874CED7BDEE75FFF88FFF38E3F4917D1F0851E20822B38C73E9D6
BDD0B5611DFB8D403F64B496DFC61B6FBCEDB6DB6AB42522678BD35A740C84A0
1D0F24FE2673FCB4D34E8B5076F7724F352CD1728D8C8696BA6690C23FDD9E04
F4BFFCCBBF7CFDEB5FD7D9069AB80CA84CA91657BA6FB4D14612F1D75D771DD2
DFB5AD8641A51ACB33E3A8FA18D86D9199F22B64DC64554117F4A260ACF49775
88983EF2C8236577E6A1172FEEA3336836E6F2D0040285119B03BA92DBC91D82
04C003B350A4804F6658288F060214D30A6D8A27FD8637BCE18B5FFCA22D0F6F
3ABF343B80AEE5C9ECBFFFFEB40090F039F1C4132596413339D2604565DC6834
8FE2C332051855FAABB5E728A9CE06F894C563DC560A2024322628A681DA3958
9BE2B3986D5ECBA0A8CA40B4A21A3505298349413911206D679DC79560D626BA
B1E38F3FFED0430F8DBA031C835312A9F62B22FB9E79AB9C9E670D64F97456B6
BCA68232B92B7B430B48A3AFD58C700725EFB0ADBD7BBD077E49365BE69B2E73
48F5E2318E3BEEB8238E3822051CE3134F3C3E3636B268D102A92A89A046DE5A
F1B8F48D2C03ADE609F9B0E3135D69642DC8390A7FA9D682BD051B39866E28A0
76F01D1784340650EDB913909E0383BDF3E93D34E236B60F073D1EC38D1406EF
6E5CD56F52C50BC494356A7947E0118323555E05A4484FD5032EEACED046B590
E13019D331C71CF3918F7C8492682DD99D76DAE91BDFF8065C33BE55DD8C9E4B
ABDCAC370E66E82F0A3B559C47A81FD90AFFF44FFF94EA28D66FC225F934EAB4
118BD4535D5D06F61E509295E8CB5FFEF26BAFBD9675F8F6B7BFFD739FFBDC40
07AAE1150B21A5640175B1C6E64427D85C6CE62FCB437B41A0A49A0BFBA312D6
3259E65E3C7153E8EFB265CB3EFAD18FA69A224DC2FA4FFEE44FBEF6B5AF6148
C54A62061945EEC87F3CB9593CD92CE045ACB923CC871FC635A36FA1318A2744
0D14751BAB343BB40D79E28C8086855E021A4C32BE60A3526D7B692D49E87DF0
831F4CB51A60593AB6EF887716F85607C2D17CB5E5965B4AF092088023C5FA9E
2B122C0423E2F80A5BD8D866B67051B36B39FCD09FCE660F77E6273FF949D949
1FFBD8C70E3BEC30605F6623C0DCE41212EF1A040744FFF66FFFF6AD6F7D6BC4
3751D21625A4C348DC067F2FBCF0C2B7BDED6DA9D2F43A1EDA25576003F2A093
92B14BE0ABB94A5E51DA018893C041CE171505E6AB5EF5AA4B2EB9C4B95442F4
90B1A4A056410A139370488633C343E911D013C99C3AF8E0839D4DD026354075
EBADB7BEEDB6DB8ABAE005358A4AA5C7866EDBB5F2940C3C592CE18274630DA2
F4B724627009A41475A78814CAC02D4D743198B78816225980FCAC5EAD7D9ECD
9B37D6EB4E1C77DCE15FB9F473CF7CE6482A267FF6D04AC98A9FFEEC8935168D
ACBD56EF99CF1899189FF8D563BD5F3C923FF4D0F8BCF953BED1B016C6859544
83078EA6EE7CA8E7A4C30158531430995A82BAB3E11E79617C115D0739E9B453
04E3F0627761ABFAB48459503F2E459FBB8AD76A9887C274A5A383C959C0980C
F0111A1644BB082221B3592D73CB50C34A236306BC80545ED16281AC89960400
756713F39A501E88992B978C4532B9920E3EEAA8A3CE3AEB2C57E0FD265C923A
F9D3AED386A698CE5188F201DBCE2F3DB8EE2D9FCE4C34FC62F3C7CEA603EB99
C18FB95503466C1D024F23E9ABF3C84E923181C31AF367C3EA6A5801BB66C903
C8F3C62278B9AAB4EBB0E2FFFBBFFFFB5D76D9C5245C925F8407B91FFDD5617B
EFBDB7364EBC565460AC5EED05BD414FA4BA22CE9E651A0243CDB1293098BC86
5D07AC597607C95437E622852F790D59233B9D99CD43A7E43C749AB12471A294
B3BDF6B5AFBDE69A6BA048C40C8AB95E3691F36EA9EE5E65FC47AAF1442E1082
7F9B8E583A00E2304640E3294DEFDCBC81EBE87B1288A96E7F64646B51D317BA
F765A4DEB4B41C8E3E028126A9876A30F1994E2523E0FCF3CFD785786ACC5F88
7D004CB9529480A2DB3AB13D53803EF46A4272FD7CE79D77FED6B7BE25ABDD81
3D6302F821C812BDB42C77DC71472D45F27A38184E4044CE3BCBE1489A9BEA0C
0B092F99025AD2914BA384A933104C64115A8BB81506434CA1B78E946770D75D
77E9F9A55F35401FFAD0875C43C9942343D948E47AE94F67527E2DB9850B3A9B
6CFCACD1D16CFE68BEF8D90BD65A2B6FB424E2277B93AB1F7EF8B1C756649D91
89B51616CD562F659256D94F1EE8DEF7EFBD9FFE6CD56457F681CCD5AC5FDEAA
364FC1D2659A35D0E48F991B982206CA4C237E8790D11CB28C0D8FE5E1927CC4
D38C07B3F42980617CC9B15185098286CDEFE8AEEE41D20D3F2C85BAD518ADF2
64237D1004FC6D86EE69FAAB0197B7A17971B4608E64E1537D810C42EB6CB8E1
86106B44A19F0274D0D25CF6FB3DF7DC033A5F96A3168C9EFDF8E38F3FEEB8E3
10AFFAA7F6334D2D416FA5DF804B123F237F1A76DAC86A1A5B7622774EE46AD3
4D37D5498C2B49752067C669C23BD73DC3029DAA46F46F79CB5BE4CD3859EE83
B12F5FFFFAD74B3AD8B37492085943587E805F33CAD0014535F095D7217175CB
6E87E31C78C0178FC966DC4A8449ECDF80F553548401A493A30DCA4B1B444BD1
6560EE87A3E1D53D68FCF58CB168D5250F0E050F642E91D494E0D3346CAFBDF6
D276F3C14568C7BBF9E69BCBD8D255F6DC734F7A7A6A12698DE52228073F5AA1
77B22595373852141B0E68314A9153915FB4616A81C0823775620C0B13852EA6
7725B24BC7924605E0CC81C5618F0386F0CBA3AD4B683C1DD230EA902A7023E0
B8568C18E73517B7B35DF4DA0247C62ECB6A9A2099B01435BCE215AFB8EAAAAB
B09EBD30403FF56B624B0C08A28F280806A41F38ABE35AE5D989150147B0F745
E5925D7068E0986B9E0526197E9855B4BE46A7423404E8E7B4D34E3BE08003BC
D834B31939398408396A2036D877785A585B46F4192B613F8C091E205F343394
3CA8B5D75AD46E35D758347FF1E275DBADFE3A6BB51BAD6C6CA45189B2BEBCEE
22AD2AFAABA4BC9A9ABE897E56E8A9C66508365A237ACCEE64F7F115E3793F7B
6275B16255FEC8A3BADBFCF1277A3F7F68F2170FF7FABD4CCE314D190DABCEEA
FA57C63452C1319D26809D9B35C66BD7D2B9115AB365A118344D0F449BF124AB
5B6D509687011BE112928FB7DD769BBE72FD7BAAA3AC14F217752FE4ACA60F84
EA84580D9FE8182972164111CA5E81F53E25459B4FEF46EE055AD42D01526DF5
93B9E1C6623824D53D2AB424287E307A50C76B3CB53AF5F358FF6E13523FF94D
B8248721754F974E1B59A0894FA1F4CE25F8FBEFBFFF59679D655A1876A53BD8
A7CAF38845D5C5F4FA9CD86C80056C38120BB83FD44567A02ED3580D6BE27840
9EB222D55A30D538C72A5C450CCCA1574058A9C6582010638DA26BF6DC791E03
881C93EB029AA11FF3C05AD5EB0D6F78C337BFF94DCA521943C0E414FBC50245
7CA322B0D00F9C8A61B1B5E7C3D65B6F3D2A67526086B12CCD43733D2F72D7D0
6B21119E352AC217C58AB59B6BE32CAF19CDF439EA501BF0D8638F952DABF7BA
195918AC28F37FF1D4547F1555B7284B69645A1CC02CBCE80FAD6F75CE73CF3D
576BCFB4DB31F8E75F010ACB2B161182282CC88F7DEC63E79C730E30C0184F45
CFC5CAB1BC66024E1502609F7DF639FBECB3BD062229AF1E41A3418CC1CBC696
9664237C17EC7AB069DE748D9AB3DAF2CDA29B243DA84F3AF39E74D249FBEEBB
6F8ABD13AA9D05A2A5573705D1C11189164B4B6C6D10CD769D2ABC3765833EAC
30DC02BD809B9B7F2405DA7D87FEF3C06C4720AB1AB85615AB9CC8ABCD9797E9
BD0DB7DDF6FFFCF09EDBD658B860FD0D166FB0C1E2B5D698BF72E58A871FFEA9
6C9146B3228249F271BB459ACCD378CA57EB7DBB5B86238ADE4A6DE8466B3435
F2D2CF4DDD2CE523EDAA5A346B35AA8D34D1ED3FBEA2BBAAD378EC810D2EBBE2
072B1E9FE23A2F2A2202DA23C6641BE05EAC0A5789308573547498A446034DE8
752070148B44673C09E424D0B85330800563373A7A8D03420D8F2722D265516A
35BFEF7DEF932CA6A0D6D7ED57CD3A6476C9B793023BFDF4D3B56DD2EC69ADFF
F2351091631CA4A2B41258702C74BBA404AB634E4BDB6FE9D2A58006DFF5AE77
7DE6339F61FF9F7AEAA9071D74902C06C920A739B10A35447FE0924CBFC75C92
119A84D0E4A9B93D27B007B289A92AF9D0AA30271DA2D076A1150F3563A0F47B
75230DD21376336295BF234C915E037D133590739659DD423822FC350E24E375
2A77484CA10556AA7B11EA87B877E8331E507B6438AD6860113455460CA1775D
5B6F68B771F8A9468647F80B9E288F9687AEA3787BAE1A62780714700A51F458
19EC854DA04BAFD82F0873A45F3341C6D031889614F8E0305988C3FB3171D325
5D5DFDA8137ACCCD69430B514DBACB70E3231435899E051D061F7BC7740ED974
32C754C5B7E58E7315670CE99443AD5AECE694EA96CFDE4A989E990791ED4DF8
149E17787076DB6DB74B2EB984B85631BDF9A5CDA55436677DD9DD77DFF5F02F
7EDEE9B4FA5D89C2FE261B3F73BBED5ED01EE9569ED0D89A8BE67546DA8FFD4A
02F797D50E29776FA3D4D6D2C1D222AB8A3491B289E6E44AA9DB5EBFAC0669B6
475379E4782ABA8D567B7424EFF7345BDA9FFDD1B1CEA2459DCEA8ACEEE2915F
B67E70D75A0FFC6CE137AFBB413ABDE8A7E7FDD112CD1C7D57BCB84D6D8AFC72
F677A0CAD9664B367B45E00056227E38871A8BF1AE5413A90CC487ED8EE09713
906476E075E2F8CD36DB0C78672456CC42E908BE26B091D918B3E7D6BBC60418
D681C91649F8E0B2E9855E8491906FC08FD17284B48B632C86CC561373847FE0
92FCBDE59274AA08B39546A870B29A5CCCA79599F258F5D2A27AF39BDFFCF9CF
7F9EB43D5C0D447AC970EBFC7A04D904BBEFBEBBCC3BDFAD47430F7BD861877D
F2939F4401C7CC4E747F5D23808F6BFE5716896113585AE857DD9BDEBFFEF5AF
BFE8A28B9C8E45DBE9BD8682502A27D109B7DB6EBB9B6EBAC94C96DE0E2654A7
360651863490CDFAA94F7D8A9A37ACC0ACEA6C08FCD08608702757990FF4DE40
FB12C2F17551391B6EB8A18614304A9AA9EA843A17EA1D4CEF432E9CC4DC40A6
CFE2A5173A1842F411378E868B494756B3EC8DB8B632A351D89FFDD99F6966F5
F9F39FFFFC5B6EB98565E9C839EE99157C0AAC20082E02C8601D528DBA456BDA
3537DA9732571E5C5781238138BC7B201AAA4D05505153D479ED953151E35006
06349F4E48192DF42829AC83C7463B953F245F36ADB1666B8BCD37DFE4391B2D
5AB4A0D19A6866B2ADB2563B9737BB62C5A34F3C51DE4A7FF2B1466973E58D66
D1C8268A6C75D15F55BAC2BDF17E3151A4FE48BBD568B6525FFF9CCC92767BB3
D11E9B1C9F90DDA67FEAA7F317CE5F7BED7CB4DD5D35DE5AB172D1A38F368AC6
E27BEEF9C55DF7FCFCE147269F5839B972E5D4863172CAA1A11876061F616722
F6701DD0A0FE67F480FD7E36050C8FB1461C0631E87E9074ADBAED366B949390
F0E77E3806A7C7F7A3450902D37514BE25F0507C627DFF543D600B568740A27E
D57284714237B0DF7EFB9D74D24931646A86813972CFB83EB482D10E071C8737
43CAE40F5C92BFCF5C92767631941D6AD620A38748AE733C6A06781A318348AA
E3594B553814C5AF7BD37E2463CA24F66BD6FA482FEFF1C15173F824A2FD3DF2
8EFAC4CA96489AA85993EEA446C8FB1DAA263DA334EEB7BEF52DD20A8E84132F
058AA8E3DFF4A6375D70C1057A461DE0B26C4AB4ADAA53E5BD617650FFEA3EF0
2067C137E18A603D3466E92AED676761B8C4716ED85DAA5375ECC158C1818ED4
C19AF408D71D96AE5E5DB63C18E1254B96ECB2CB2E679C71065822224FA4D2D9
59B4DC80A9C6D96E4A0638B9FB34386EE4A51E6F437289B64091839A75D8AFC8
955FF18A575C7CF1C59606CF7EF6B3755AA055E8602D12E09CB112A755F7DB26
A03D0584F455710A7978ACD4B8163D31563CD6CA53CB4E4E6A33B5F23432DA7A
D633D7DE70A3C5EBACB356A7D5A8C84CA44AA57D35D6BD5FFEF291152BCA905A
2B4D349A996C6C29E03CEBF68A95FDDECA52F5F62652DE2DFA13CD72ED35F449
5674B33C35F36691B526BB93FC53AE73ABDD5CB87074ADB5CB7B6977C6524F36
CED8C478EB57E30BAEFA97FB6FBFE3978F3FA1C97872331BCD84CB65D3CF4F17
B796EB71675C67337AC0B3E933840BCAD24637331A0730AAAB28E98C88C6A626
4989EB8C02F3A58F3EFAE88F7EF4A3FA27288654034F9EAA02467C67D37B97EA
5A5AE2B193717476535DB6C8A6E26E670BECB31C81E4B800D49143C9C13F7049
FEDE72493A594EAE1D9E0453584009801CEC865E3D118FAA1BD30810B7972FA2
E3015B41F83C9083D031279F7CF241071D847D80691BD121A9B6DB0C924A2144
E4CC7D1A32C7FD743A894EAE47C61A8E10334021EE648CA180010A662DE2D835
E3A6824797C808D3983B9F4AC0A05FF50040803B0445C07F55F5CAEB1EBD9633
038AD0F30E5E09EB846FE9713EA01A8A1A64E7242E13811DC60D90628FD85513
40455542188CCB99FEA5A8C812907EC81CC3CE9D4071A546E489D28849744054
879D44D0C80AD8577715A2AE8E891FA3323111839C79C94B5EF2DDEF7E973DAE
AFE8E947BFF3AC66F6366AA45F719452408F69C2EA9A2AC477EB0C0F8DF38E73
48E781A5566EE99EB64A63D34D37DE6CD38D46C7DAAB56AF6864FDF9F3C75ACD
D22E6EB7E406F7A435573CBEE2A1877ED12FD282917259779A65EE384B93BDFE
CA6E7745AF5F2A60A9E46E5752A69F671AA65E9EF5A5893329F012F6DCCF0A2D
FA42BE71BB998F8CB4D65DB7393A9AF7BA1AD666231FC99AF35AAD790F3DB2EA
7B77AF79D1C5B748544A071B703180BDB2F203D6C8031AD9FFDF4E9D0EBC7415
5A3DA79A51DD743F455D55ECBA1783459942F2886E86C15A61E207125490A6EA
13CB44DB8F4FF541EC81E19160661ACE2D59264100C980B9A8BC362C5863926C
F8FCAF7CE52BAFBBEE3A1EFF1DEF78C7DFFEEDDF125002B1F2072EC9DF5B2E49
BB1A741FD120ECB9E79EE79D771E4C8A262AD0DF0D36D8E0FEFBEF7712443F7F
F18B5F7CE38D373AF6E38A1D8A4F60867AE73BDF79E18517E2A66873E930EC24
BB1CCC7B5123727D6FB13C9447CBEB2604337AC0D8A03AB9A606F641E4AA9BAC
605D7DF8C31F76920575E5C1673BA0504D00C7C8802770F99CAEBEF5D65BDF7C
F3CDFC500FABFB746E9BABA74088EBC7E4B79ECAF88AA57792061A43E8808A1A
F91C9790D78C8B0F09B4DADB668BC13A472D038B2D9B0E62E57D2C6D60EFC067
E2FE4E9C1070998ED7BCEFB8E38E9209E41A68E8E4CCBA6EE6A8A38EFAD0873E
A431743FBA3CB4AB4158B1BB6321460469C619319306F017AA07353BFBECB3CF
29A79CA227FAF297BF2C4F9DA7701525E95D473E38B9C6E4C95E4E4E38C16C12
633851D65B2244028192AC67EDF6A69B6EB2C97336181D69757BAB3BAD7CCD35
172C58386FA4BD669EC9F6197FE28915FDDEB85CD8471E7EF8F195AB168E8DCA
2B6E95E2AE68E4E3DDFE13FDDEAA5EB1BAD998487288272764B032C9599EE930
4D50AB29059CAD5E55FAC4EDB63CE0C6D848E719CFCC25A527C6FB4599501E49
F9E848471F1777DFDFFFE17DCFF8F6B71FB8FFBE07F3BA1665187B55D4C8DEA7
69875AAFDDD85CCCB45FACADD98AA6667B91368E5E78AAA3AF166D5AA6E4E7B2
BADD4A3644A4379B87A75B954948364B8FF9A77FFAA7975E7AA9CBDE3C92D91F
B8247FFFB8248D56B51DE62541EC87CF75AA430E3964D9B2655899DA3E5A8DB1
C59EE954F1BCB931ED74D0AD4E3CA7908DD38EFEFEF7BF1FA3918D9AB739B2D8
E681E7D296FD30080B436100CD804AC65E243BA05BD2831C7DF4D1D45C519046
D184DD039C42EACBE977C434F150310C906AE6322EA19F1C77DC713A3963A87F
929E8C1643369DBFCC2F838F4C38432518BE598C24F18A2E23EBCD0E0F210D79
8DDAF26C49EEDCFC0A6EB1639CBCDE9C70C209F2EF2D8A63DB5D133DB9320570
6B0449456409ED9381C560AF1BDAC236615EA29F639C0102CD1246139AAA2C09
DC9CB220314A488B183292426566E49E649F72B629E4A3479C7EEF3A918CA91F
FEF0870F3D84918B2EA9E7262BFF6B64534E74517D397F744CBF7AC10E8B37DF
7C735DEC8107FE9DD64BF3E697BDF6367A761923268E0145F5F8F8C4F8EA89D2
A94DA5179B37A53B57E7D9AA225B55A2A07B2B2427FBDD55294F79B3AD5BD68F
53A6916AB65B79B7973DFED82A0D7EA72519DD925DBBDEFA8D76A3DFEDB75291
F7FA8DF2B076A3D34E13939D9F3CFCCC5FFEC7FC4BBE7AFB83FFF14B5D7446EC
1523F2F4ED50CB6423058812EBDBD34E3BEDE0830F9661282F738E82D1D95E03
2218F88C5630770EBD785E11B06133B203D94EDC8C75F08CE7E75BF36A81A58F
90B43F7049FEDE7249D2A7520F0EEC5F57D1BCE8B7C71E7BAC9C188FCFEEBBEF
FEC52F7EF1B9CF7DEEEDB7DF4E78495B58520BE031129C4E0CA9A61A865F1089
E9C63B9CD059734C40A9734DA204025617EB27929FF873FB82CEDA689911EED6
9860040FD489394D980211BA43E845C59228E1C9537852207DE34356324A91B0
3C3D97B405E4FF714BAE616391132B7ACD6B5EF3D5AF7ED5CB526BD2AC4C56E4
038558FA90AEBA1A6A1D2C5B61E9D2A5864DC4C0351E3F29803DF7DCF3339FF9
8C9E91074444B0CB6C9D209422559911B248E0F3CF3FFFED6F7FBB671C8D0570
0C3709D3843D4BEA2A527C9BE499F0AF3E2475859CD432B03D6AE5AAB5FAAA57
BD4AD765B8A817887431D4018345B007EF1C0AE69A16EA49279D74F8E1871F71
C4110ED86804A811B58E286A1AB8CCE8245BD680446693DAD3A47339EE69C3C5
8B37DA78C3ADB77956AD685757972C710165FDC3F80AAF6FAA562A21A22BCA28
C89BB9D64A2FCBB59457FED728E851A9CFF4CB876568ACEA8C68D5E66B2EEAAC
B7B83DD2AAB0EC65803ACF1BA9D9D0136645365A641B67CD85377EF7579FFDDC
8DE3E37AF2CC61E75463AF0C5E78FA76A87516C044F39C9060D71CF4B6B3BDE8
190C30AA171A311169DC75D75DF1E66968486FB2A2AE54B6204BB3E7C5DD2758
7FE9F449B34258CE11BBF91FB8247F2FB924ED4871CED89687CF29CE89EA3026
95317D1068FA09361C18728C54CDA9965C2C1C48B59154D44DE51C0889DD3F59
D5DCB6FDC208B3727619141E0B40F7B6DD76DB5D75D55530F435EA36EC68A69D
76DA49069CAE4BB602C7AB57F741C96B660C32230E0879F62991889D86E9226A
0F3585E82ECF4575ACA7C3B02CB686AB78FD73EE0A7884C554114AC66304857B
436F019163F1E3EE33BC5A8DC4D58C30453F61C9B9B380BE3DE8A0834E3FFD74
6E006C9A6F9B58143D12ECF246885956D1DE41E0CFAE8175C72D1C9808F6AF03
E6D48001928A900E9625687C6E608F3DF6F8BBBFFBBB0113844103066B995654
8C983FF9C94FB40CB4CE11FE31B29879350F94E76784A90AF46CF58F22E7E1FB
859EB068E45A70C5C2F9239B3F77D32DB678EEFACF1E7BF8915FE0C84B1B56C6
5459FAB6E2B147D9A5454DE53865943D4514B48E6D8F2EC89B638F3EBC52078F
8D65F3E635D75CABB568612E375AF32F053CD92DB2BC284B858BD41A59A333BA
5EAB33FACB47FA175DFAEF77DEFEB3477FA5C195FAEF0D089AA77B875A941F32
822D044694E0642C39FF355F45DD62086803EBE1DC73CF95FF4750544FA44798
1175126135B3E5389DB084D71EBB98581057FC0397E4EF3397A471B03A550473
0D206681BC6615A70166AE8E211B877CA76F0113170DD3E816C7FD9B6AFBCC16
8C632DD8B21A643991679E79263F89597C275C6C38FAB431651EB7B6F38203EC
AD8E7FA2B7FC204C9C0F76EB59F6A921171EC638B9F8674F52A6E4B9A68305CF
50D88CCBA63393B09CB804B51BA6FD1958E418B24E39A3BD88D235EBD6B9A972
7929C226A1C07E9F91FF0497310518840E5B7FFDF5418119BA64B56505CCDCF1
136E431795C97BD65967B9A8815CACC7C4F1F668E03A747CEAA9A71E78E0815A
A83243497BD15601AD11D14251D2FAC6307C237AC3074CD5017B5F65A12DCFA0
022E1AA8E122E9A44596A46CD21A8B46D67BF63A1B6DB8F819CF58679D353AD4
66C903AEB64A6F2A67DC6ED92246FB325B73A0A0A58625330750D0C09EF3C6FC
5513925FFDB5D76ECE9BDF18E9149D7621772969E9F672A9D754F4A47DA5D5C7
C6D66C9597D6FC759E9818FDDEF255D77FFBE1DB96FF62C5E3BABDA9E40AE21B
9B485B9420F9D3AB436D5ED377A73A9D89C8203CC5BAFF6F80B0685F4A5333DA
81317D5EA3588B047863A3684766F2D99B3783B3A0B015D120415092C2D44920
874CFEC025F9FBC625390057E18A447D30E922E91E1E8CA9C79A7577395D515F
115E2AAA56B85A1EC71F7FBCECE06DB6D946561D266F44E2F84991E0E40E717A
C8F001C8A078DDBC2266473086DF41CB4838C53987DD7AB397536FA6135291F5
A637BD897AD654339CE8CE8F3EFA68230C9CD2D2E869ADF2ECC54CEC75F185BE
312824E6CB719CA43E6545A168490C6904C0CA45DC780AC8F988C6B2A69439AB
3BD4ADBEFFFDEF97174B4F3C94BA331A59DD91D0812B362FDBDC50DFAC66CD64
2BBDE0052FB8FEFAEB6D49E075B0901CEA47F04A7F6BB73AC1C79419B2E73C20
E91B8B53F62C017F407FFA27F0E654C393A58C4F3BED340278C0899C53C74CF1
E5F2AA59936B2BD21070AA54DEA94E2F399B38B5327A934F2AE0A259FBC1FA6F
B2FAB4BB707E6BB3CD37D86AABCDD67DC69A52AF238DBC4A98F72B007AE94F4F
76CB0063B335423DA53E37FAA984ECCE8282EE8EAF2E523765AB1B65AA790A05
AD4907F62CC5DD6C75162C6CCE5FD868B67540D1960E2A73D225A5D62A79CBE5
70A476ABDD698D1669A5AED1199DBF70D1DAF317ACBDFC8E55679EB3FCEE7B1E
5DB162A547138A168C6836E4D3AB432D1BD85C07C6C5F039CF3207948C3BF7FA
C03BE1418055B3CFA5E4F6DC73CF134F3C51071F72C821B225718249FC205CD0
A69C76EEE6CD7E2893755867CF76FC1FB824D3EF0797A447D85456F8828497C0
22217653EDB0A61A2D45E682CE075AF6EF79CF7B34DA7E5293E0131C02C64C22
A398DE2021AB095830C1CDB0E15B1DEE601F755EA4F4D11D62CF99D18CB0846E
86672438415DB86EF8E28B2F36FDD195575E49FF06EC489763B9303D9A53DE53
D1EA8DB1687601CCC970AD6048C9A4D07E6136F53AE79C73741B7BECB1C70517
5C802BBFCF3EFB5C73CD35247A08CE0F03057C03F9F486CA2E67A7E33BA01934
B4343D53600B1EA585C06CD6BDA7000438E90E278CF1A18DC00AECBD8024977C
BEF0C20BA544B90A6B49CFAB47901DB3D34E3B9D7DF6D9261645E53B98AF9F48
D34B82B15AE89608264083BFC1061BC808B3F3E6A18E8B81F358AED21D87A4B5
A30853421B2B152F0A2F274D0194BA95D2AD3666197C9E7ADF6AEA4DB7D5ECAF
B3EEC2ADB6DC6CC9969B2F5C343AB1FAF156DEAA0550511925530498AB4B37A3
ECD20A7F21A35652F1CD1F330A3ACFC6BBBD27BADD95DDDECAF1D512A3DD3C9B
CC1BDD86146CBFFCBF5623017BEEB45B63F38AD1D1C6485B065DCA4B9F239505
488D4E2A1572A73CB859AE83662ED13129ADDC6C8E2E58B8EE1AEBAE377F74ED
2F5E7CEF399FF9CE23BF5C89B53180BD3296AAF9F4E9506BA4AB8B2075AB1434
E390CD1D488F592E0C02360042DF0921AC04149B6E922098CD0E28A9496E41A3
FAEB346FE6D232BAF5149C3FD2840D2BEC88C977944F03AB3B375545C4B21195
752AC85B05954345238611944F1AF9AF7EF5ABFA2AD63AEB5A920BDAB76C6F6E
92FC13DA4823B0EBAEBB5E7BEDB5183A51017BE41916C25618EC03F12827AAA3
54F5A9AC53234A854931942FD5709B01FF55E68856113E195F114527185ED444
5A2CCB958F3F11135A9EAC7E2A60014475E193B9FC345E91C503E18CB3031AD5
3FFBB33FF331C8594692DB704C880358483C14B4FE5945811EAD524C2EEA8B38
83D93411B53AF3830F3E1861ED06074CA5D86A832F668B5228E7EDD70D778BBA
4A73E38D37A6F6DA8D958034BBBEBC3FBDA9F080364A55E825468CDCDF97F089
A61E74154004BD37CDBE4D310DBEA6AF5FB5CCA176C349A898D4180E417327DA
0EB0393A0FE2A6EC681A4A9EB06030553198CCF89807F6E6343D7180C147FC9C
909273F00816DA25B914CA984D96AEF4E27DF7DD1707CDC6B1E3796E6288B68A
CF8BE8430113ADD16469FDC31F9C2AD2665B008620B0DD8AA1B654C448008E4D
913607230C0FBE1F3A3F66815D202E300E70C98C3FF4D932BC2B97FA3D09B84F
AD19A5619E261B795A7B9D459B6CB2DE861BADB7D6DAF3474B4E95347F6C518D
70A9606CFD49E678D5CA7174066DB9BC981694543859A755C9B14CE27565A983
7BE3BDD52BF2464FFFB55B927165885C8F295DDA6EF547465B9DB17CDE68D669
E7CD466A643A4F31315E8402A4D1327E9C3D5124FDB09F32A9E346B79737DBF3
9FF1AC8D17ADB9DEA34F74962DFDB7EBBF7DC73AEBAC0BF463187B458CF1E9D2
A1D6045279DD88C2210EA71207D25D51115AA8816B60BFE1587B6D39064B6373
3600D23F762CCE029330F6DC6C202CCA51A41806404C7378EA56485CABA8DB76
0137E59C9A4A5A146BCC1101D8283C91351C1B60A071480A6CEF1E13A60F705C
246CD2B7279E78A24CEC48101F45798CDCA61064B3B591AAA4295CA1B1967AA0
162B2EADAC662A906820DE9E87FE13C54C952456094450CD406EBFE184134E38
F2C823A59271FDA96EC8A673DE6555F981CD05DDB6268E1C9E59F7DC1DDC2017
46C6B4E1038C1938CD11A862C1671967FB0CE246D2C02E848B8F69CF1E9CB0C6
67BFFDF63BE698636CFE222E413E4752D5C6F476847EDE22948C13B8024EE186
E279DDFE280F0DEC08CF6435C78EF30830BE39ACC56CEA2BE48CCD0BAE0E7715
182E6B20DDA11406AD75B85BFA096A1CDEFBDEF79E71C6195EB15615712B5935
CAE8DC71C71DAFBEFAEA7BEEB927AB791FB5008E3DF65882A5E82AC49A96F7B9
E79E8BD073A98271E3C32807EE217EA85F69CCE55B6735B36F51D7D7B190341D
8E1BE9E0ADB7DE1A6E5A0AE5BDBCA94462C0ED6F4499C0CD8099C0DF459D611E
215A01B2811B2027A2E5A7E745663A061E59AC5308E498F21DDF29AF3B380D0C
B2F7BBB71E4CDA2F7FF9CBFFF55FFF154B0257DB619E2C46CC1CC72F75646AFB
E4D5C29CDA21ADAC377FC1D873B7D878DB6D96ACB5F68289D58F359AB26A17AD
7CA2EAAF99152CBE76BBC963772726B927C42222A0124925D4B6045A3553D698
48FD55DDBE84E644DE7D226F948D08A580DB9DD42AF74E2A53B9F3E4AEE51ADE
9156D62A9DE67E9EF5F262860224CDD4849669158B2E924C723D6763D11ACF5E
7B9D678C8E2CFAC6F5FD8F7CE44BAB574B1ECD80BDB2E07B5A74A835529A20BF
D9DD2EBCF0C27DF7DDD79DFB66536CFA96AA737605104A788BFAA1771897D3E2
C372D2B766814F751A46AA4E9FE82F17C5719F8D83BA98CE60ACE7323BE31CAF
689144EB5227D1DC61DBEA41DEF086379C7FFEF9BABA8E79C94B5E72C51557A0
3BDD9B0BC918E1366E2341988EA71BA84090903AF3CC332127D191121F343C60
A6F4D454F1D97F724E084C0D36966B84BC00586C8B172FD615A970C011611D46
494AF4520F8B2827DF8F61348C398F51C7387ADB6DB7DDDE7BEF7DC0010718EB
8BB78DA39CFA453EDDED669C277BDDE73CE7391A610392F14BB4ECF5B9A439FA
09EB0DA7CA408448E4C9C8E3CDE0F9C1D004F994EE81F6E1DCFC861B6E78FFFD
F723E634BF871F7EB88C1EB7D4D56FA5FBE50BFA914D6300B24F075075665840
9A6E5A1575BD1FC850AB5EDC53C79F6305609A1E28EAD5CDBFD99B361DBC3263
9CC3C9C5E8B7196D8B03275D0546890C8BF6A31E79CF3DF7F4CC5226C0B3E800
4995A38F3EBA51B7FF33D66900051D13C3EE153BB0547C18C388D5CEFA917D46
B76FE06091C7342E39743CCBCC8E75DCBCD8F1FC4473F7B297BDEC861B6ED023
7B52206337BD8C53E6260CA7002926DA106EBDE91D968C587652891C9617B6E6
4537C3624BC17FF0DC6910745136B8D78F91F0311065BFB91F788B59155928C4
276E11B9B152CC01A7E0073070E54165E429976E6C64E05AF590722BCB9CD092
E76DB4EDF3B75C7FC37547CA76C245E589665EC44E7D31A9D80E401800CD9330
EB947D06CB55DB9202CEFB795ADD2FC68BD46D16E359DE6B9665BEFD76A73FD2
295AEDB2D86974ACA5CFF3ACDB6AF41BB9FE2B8545A31273830548A92FB778B2
DBABF657A348AD5E91B79A23CD86CCC94E6AACFBF5AB7EF52FD7DEFB9F3F7D74
72B23B80BD222BA9333F2D3AD4C24909B2C02046D70C90B904EB349B568BD1E0
5477E021B08929804F43EC88EDA791F9F33FFFF3CB2EBB4C17D210D9D633F828
8524D91C17A55A9FBF697A426BE015A1E05E9FEEC5ED942A2A1F1A19F03B18B9
0ED53AF293EA7C6AF4DDCD921379546084C0CB21FA2AAF85102819239DC180C9
58808B9713C3E61477412B6F9E2C7D75F9E597BFF6B5AF4D751D5A23107103DE
19C04B6B9C71B8F14E5C801B5F59DDD1013812B90986C5C3081302763D81843C
3DA9EFA3073C55EF5FEB0C0434A210D31310405EB74765D7E873F34FA59AF72D
0D15194720AB4BECCCA2A0F38093D763A26E89724B91E8937BEFBD175D857F83
FF404441CF4EBDA6BE35AA43C7D04010EB01C34B43E4208A4BC331F58AAA316B
11589179520E73E688D5CB3EE5D26E7500F76F0AB10D3F9D63AABE44B424188D
65CB9649CB7266C454AA128AC71F7FBC3CD48140450C9E4705365ABD74805BB9
C4C25F97EAA6BA96971A27B2578EBBC41D3110FC8B6ACC924452C202DF763688
54F68ECC0B08E1ADB17C157C0CD470AA4BFBB6D9669BBBEEBA0B0B380612525D
A28638855B9B7BF3EEE6E97054F0B222440EF1625856AA7B69D8A1CF439B26FD
50EFC907C78897B5BB19B319A814CCF119C73323528AE987CB322583F2AC54B8
E5FFAB146AB909BB595E6CB0E1B336DD6483CD9FBBF19A6B8D256DB7EEEAAC5F
86829BCDB6654DCC13A071D924BC9F62D36D8E34AA0793722D2B9AB2C924055C
4CB6B2D59507DC6FEBBF91A2DD293AADD468EA4D5692594A37EBBFA61CDEC465
8AA102247DDAEDC968AD982CCB3B97135D0D8166241F9DBF60ED5667EDEFDCBC
EAC2FFEFA69FFFFC57BA9D01EC95C57DE37F7D875A680571D4F45E7EE4F2E5CB
536DE7366A46E2D91421280C4825F573A9FC9D76DAE9C61B6F84A698F5AD6727
09E48DD4AC3AAACAB474D70A187C3444C83BC292E8E319AFFB894F7C62FFFDF7
7749864C6CDD0099F5195F594DAFAA51D280634B7ADBE048D9BDD03FDFFAD6B7
5E7DF5D50F3DF490F618EE6F44CDC4B465C4D6A5BA68442731219A7EA5FDBC74
E9D2030F3C10BF13216842419734E0379B8587E808FB5FE7D110C1DF49F85407
FCCDDFFC8D39E2D1B5980898D8E6066209E9424C901E5F5A87ABDB761C4603C5
18B8C31514F640344FC0405F699478D27281AD5A0DEA2AAB2543B955AB8D26BD
D5A81ABD694096562F40C87A7CDC2F080B4D871973100400FA43B4FBDCA711E9
2C398E34F6D52525642BD073F82534E0E349B168490DB226F3BA19003362F785
EB129DC6C73500135F0AB7D8553D844C387F64BFB24E75B14A5155A3E913A05E
2E19F06C5AEC3A2A6051435EC9E047A37EA23E66B3133E2171335C6168858176
7749349FD3C596DC4D242C33AE05B09BE3A0B1BAC6F1981929666D7FB808DE82
8EAEC6481820E5AE48F6224F35111B16A7210BFECA0F8296B5E4B1DB635896C5
26AB1D639D47E0A11804D3BCD8334E014895D58C6671DEAD711BF54B62506790
3832B3D330020E8D8EC530304D5336A83FB5C5AD91921376FB1DCB7B937D4A8F
4A9871EA962E6633DF7E87FFB378BD673C7BF1BAA3635ADC2B4BC073554C3C51
5F3AAF7BCE18995997274DB80CA9BC5CD6E2319A152F98CE5FA4B200A993AF2E
156DB354C0AD4EBFD396075C349AA9ECAA2447B951EAE0CA094E5306BB6454AF
E102A46A80CA01EC97A1E9AC74AECBBF0DE97BD946CDD6E848675EAB337FBCDB
3EFBDC5BBFF9AD1FCB4B713A5D8F4FCBBCA74B875A56157E0CE25B07EB5B8957
9CA454D9CBFC70F8E564956BE00CC8F4CE77B770B358B3D958A39E50B70727E0
015DED6CA0AABC26F38B4DD109EECD787C51D7F8EB8ACF7BDEF3EEBCF34ECE6C
63939F73DD88F58D1039B65CB76E57ECA7C60870B2073E3997EABBE44607D0C8
1DF31C2211593CB7DE7AAB26548A876A1923DA181C5F4E5F41B2AF93ACA85ECC
B5968D4C1937D5A0890AF502111C2465A323B5DE74CE0B2EB8608F3DF6F0B516
2F5E4C016E1A02A6925004A58F35A03B912571E69967D2BEC95E7B51D1C26CBE
F9E6BA19C962E087B64BACC2074C439D5CAED891471E197BA14B6D9C74D2491F
F8C00708BD380C3E9017F727885D368251C7ECA32F7DE94BBBEDB65BAA8325FC
CA3BC54E8CF308D190C2DD89DD67DD430230B63B260D38DF3198E11D1A090E3F
F5A94F1D70C00114E7E008C67EDECDAAD333615E129034A820D0CD6949D968A0
6486FEDDDFFD9D7ECB2AF5C00EE09C4136E942BAE8473FFAD1FDF6DB2F55B623
A71A004F30E084E2296274357984E622A2F1D1714F71969CF98E1E9BF311595D
09C6C6D7C9D96B08015323D005C16B324EBA368BCCA65EDD95CEF07EE708B059
6D36F12DBBC92608712988BE39F2BCF3CE93456BA0A8B9D0ADF93C8931D26626
5736A93C07CD85E94162E04DA7A25E2E763772B239D2FB38121C9F3106C053A8
8F288F94CC954D0D74CD135F62141F5FD1EF5284D42852590BA4ED3C7FC1D88B
5EBCEDBA6B2F5A7B9D35E4A44E4E48A2492F4A4337578DF79C34E2C2A9AEA340
01C7F63E180759654C9455BCA5AF3D59160117FD56AE3DD36B36BA8D66B7CC04
B7FBAD76CA1B1261A56296EA9591D0CC4B8074B53A2AAACAA2B16ABC54F56581
7251E9B9CAF14D79BBD968F7FAFABF6C6CDE5AEDCEC2D2D996575C46BFC7AEBF
E1A7679D7BE38A1553B111D91C1A01E4E0D3A543ED5E7BEDA56D76EEB9E77ADF
4A3AFFD55FFD150B71B8AFE2C00B5DD2ABFB1EBAF376248271EE70975D7639EA
A8A38CA18551E4FEFBEFC756D02667F9620513999F03800DAC469726FB7BF6D9
674B640F04B5FC8A0DE63426D282DE24114C11613E68567E62AE662387A3A59C
824F83ECD036233889F444CAD8F7BDE8A28BDEFCE63733C2D24CAEA8C1FDE23C
035E1DE83668AD0C0E201C4D9A00EC581EBAA0A7DAD036E0564A5A23CFD4004F
7570B551370048018FCAFB3FFDD33FBDFEFAEB4D67E1FC881E8DBB925891D245
626EB2C9267A7622E4182B7164ECBEC760DDA69B6E7AD75D77693041CF3205B6
5AE8A9AEAB90F39ED1038E1F46598959E016055C9D963ED17B4BA18F16F746BD
1327811F543335A34991D7B5FB886CE2E79C967E62D16F86D730226BA811D0DF
77BFFBDDFFF00FFF20BD62DA0AC4A005BDE3CF3AA106FCF9CF7FBE56914EA2E7
FACBBFFCCBCB2FBF9CE6014821DD3C1BC1F5E8C6FA211FCCCB1861B303E83963
2CE06E731B0376C421871C2277C26CDE03A68CB33C337AC0DC0F77480089A267
243C2D9BACA508E7D8B6D018BEE0052F904C0381EC7B76923E5AE40C17BA0384
291A247690649D906A31FDB85E040F8C0FC745219DE73E8C8CA41B23EABD26FD
473FFA91ADC6180AD585649EDE77DF7D844C1CB3E4315D5268E22303AC9CBF88
A010EBC78407CC04D89F9822BEC92BFBB4549392D193FABBCEBA0B9EF5AC75B6
D976C99A8B162C5838D22FC6C757AF9C98589DB3839A1D2BE066DD9A2AD5696D
C6CEDE61B5F42B56E9AC51D61EEA878514F0A4F651D67BAC647E4E937973B2D5
986CB67BCD120E9DB53BAB1A79D16A96CE7115884EF67753D6ECF55B7D29E3A2
FCB02C1E4E79AFD003744647174E4EAE2A74739D75B2D42A4A6A6B793F6D49C5
9F3C38F9B193FE65E5AA293423EB00D9F1B4E8504B5A916292811DA84B48464B
A4EA71888F5169A037911C801E50DCA771A1BDBA1BA383DE36CF67CBD1623CCA
5FBFE5965BA49211D06E8998EAE2C8A9DC7FA7A32BD2C516FCC8A73FFDE97DF6
D967C6844A9A9D501AD341BE912EB47CF9723D08B54C00DAC96659A0E3FFE128
B3C361ED01158886EB5794EEDB6FBFFD35D75C83E5C16818AF84018ED6A73E81
7961482DAC755A7DB8C5165B5C77DD75FA612C8292E6FECA57BEE2D4944E48B3
F454213F77DD75D72BAEB8E28C33CE78D7BBDEE5A6AACE3BF24FAE089A2C92C6
44794D916556178C998C09DB0253527FDFF8C6376AE4F5ED2B5EF18A2BAFBC32
859C992FE78D0CF88E70623F5030E2FCC5BE43A9EECDCE72B5F1C7F1C31E3061
BAE8011735B32E260249101ECDCF1B812666C358B264891E1050218A9F136A4E
BFF39DEF68B79E70C209871E7AA88E74D7C8A883B39A2F4803F8C217BEF06B5F
FB1AF1218CEC54C708C1EF10D220A6FA246EA69A29DC2C7AE741C200D503B10D
C7F609CFD27231D5DE185F99F7862BA20C34087FF4477F247347E7D4998991CC
A88063F9296FFEE99FFE69B7DD76E3EA5AEA3ABFC613AB4E27D70C025AA4AC31
D6B666439078B4830C719D61EFBDF73EEDB4D3DCF3D479375645F4209DEBE12B
077807D643B36E796499E62CAFA130B4DF767609CB0C346B3FB4CDB03A0703EF
3AF2684AFADE900F203C9CC92689C6A603F6AFC77437087015D06DC67582AC20
5DA5BB925946CC1F68823D604660CAA2D1BA3CF6D86331C983755A0E4069E7F6
C17F4B193CE3399B6EB4D1461B2C9C3F3636AFD3EBAF9A58BDBADB9BC8AA5845
37F006B06E383F4B9CADE8855E8632FADD32449CF2D4AB50643D0D8114B0B4F0
A329EBE76932CB65E04CB43AFD66AB68350A8D92FCE066A35F9627E5FD526F47
7F37B5B3BCD56087972A3DEB158DBC31D66EAF51F427522683A55D9E3E95AD0C
3B236332B056AC4C575FBFF2AAAFFDEB132B57B1569E5E1D6A0932A3E38D7EA2
6281BE75FA1C804CAA19918CDEF4CEA4E25E076B0D1C74D041C4FA6234CF05A3
A9A6EB1B7EE5359B23B150B7321CCE51F965618D33E7F64DC381CA34BD7B4F7C
616AE8595033A08841A20D83013918BD054E92E43AC05A175F499DD3D413CBDD
A5AE76AC2D2EDD7306E16B265BCC596D66594EA0C731803492BA3DF8074C8EB8
F1C61B535E625B9BC104E343DCD232117562B4AD4E480ED8A8638F2A363B1649
6495910E264F6F2979F2C9271F75D4511897C8743044033DED53ED1EC1CBC600
82CEE33CAC1CE0A3745C4F558CE798638E39FAE8A31D099C4301F3687620F457
3B51AB8274067E89B91263DE844FFCEC364FD99545A8FAF375790A2B60E7A7AD
8FF5389ABE2C54D6D121C3FC53D2F41E43ED38F40DB43CCCC8F1C71F2F65CF5D
E900DD92A6DB5C13CE8CEAD1E8BFFEBEF7BD4FCA0C28197391EADC30A166EF4A
9E7DB610B4794329B9C1561B605FD1E2FCF18F7F5CD4F423697A2D56B3EA0E44
1C7B38043D004D20C3A8D7B9E79E2B0949CF1203D0904B26D6B0F2039EE23C4B
36BD126720BDADC1D400CA37255C5454FD2A682D85C2721E8D5DEC3ECAE61547
E43ACBF6DCE73E578FAF29237C95EAE8916140AE3771A7732F30DBA003B2C845
A1A4BA209CD185EEBDF75E6E0649926AFF0A1D5CAA0CFDEFC4134F3CF2C823B1
6151D46552EAD15F6AE42A9C75D6EBF7C646D3669B6FB2C5169BAEB1C65AF3C7
463A9D66BF98E84E968E3C141C8FAD5A61DD800246210DD74BF166A2585DFABD
DDACB47DA58DBB13BDFEA4D65AD65F5595F04EE48DC976ABDB1E91C62D73CFA3
235A4992A1FD76B3A4A12E81D3C1DFEDA746AB312295A46356AE2E7B03371BA3
59BE502BA1D74823A9333EA1792A39A5DB23C5A245238DD6BC477FD1BCEF81F1
7FB874F9F7EFFC91B6FFD3AB43ADA3494C164463F870EF7FFFFB972E5DEAA88E
C957BDC2CE3EFB6C799C94219AFAD13CFE29E44B526544932C9C9B98330578BD
F779B36EDE996A7839506D9026319B028622D5C037FB61C479E608657BF48C1F
713C6340D667A1AB0F73440A2055CDCE4C7C6D5C953501760C660DCF68745B0A
D00CBD34B092B9DA6FD484E0BB109FF70D58D6D8A68186330DF5C6F17A23BA4B
C0D3F9CE543B82607169B4E7042DFD22C12113B925BC61B17EF8E1877FFCE31F
473A9BB234AF3B523BFC8B92E33123CC9B97051CB17A1C3E27B318371A0E3ADE
9B8650D0FDD01BC7262FE704910BBB64F435534834384EA04796A69796FDE427
3F59D41C70BE4FA391234439BA045E308C333F74C49EF89386547F5DBB05E281
782C95E23AB3DE6CBEF9E6D216941D7FE0031F9024912E7704DBF1E4013F8CE6
C4468DC41226C647E77FDBDBDEF6A52F7D89840B4F3123088B93EB00C93199D7
F8151402E132422E4B2655EF3FFBD9CF1E7CF0C1FA0ABE086E6C2004ED7DC423
501490AA109D7EC89AE78665EBE82B1E8DA9895CBCFA56374660C328C5A2EE13
1A9F37D51E8B1E5CF6D01D77DCC1D4100C0029A9F7AF79CD6BBEF295AF78D658
12AE1465B7B292F17423E75DAABB3D62CA20948653391CC653702ABD0C60D469
A930F44A8693A0EC04B8D146B8D4A9AE0FCAEBB6A15E96599A5E406201DA94F6
A3ACAD6A41B87041FBB95B6CF2BC3FDA6C7464D168093149DDDEEAC989AA5A3C
2F1D8BC7279F880A186F03316ACF2F0577A49B5616FD92C7AA37D12B27626252
CEB4646FABA2BA941BD068763BED6E6724B53B59AB994B664AEFB69A851CE266
DECDB3222FA6F9BB296B359A1DFD4FDA3BCBDB13237A8C11E95D190A3A49A3D9
EA755190AB16CCD7C16BAD1E5F4BF2F65F6FFDC5A7CFBE787CBCFBF4EA504B0B
55560C19595003BA81254B967CFFFBDFD779B6DA6A2B6062EC3D7D65108A4D4B
1C0B2D172D267D65B645EE903A7ABA5A49B4CDA680539DE4709EDB380854024A
4E32912428B5E0287B8D1B7965C2FE286027CC7A75EFC8D95EAC2E0437FEA205
6B0C2AF072E16614B2BE3D0E4037A393E8972583E694534E91589799B5FDF6DB
DF74D34DDE66A9F2E0295E2206404784BC661C8C7CFD032F1EDF1018C9BEBBEF
BE9BBE059480E38248F16B7569166027D000B230E655AF77BDEB5DB29E11C4B8
A42652480137CB15A106D33961DE20270D15062E38EC548E30BB3F414C4C600F
E1B6F2137AF4D28A2ED50DECA8C1352866C0ECB034E78DB15791D5527FCB562E
2B5644FE64403A780F66897242DD5E0539AF54599F14EE4B17EAAEE466484933
E603109B1811952ED46D102A685444E56C1C365D0A2D8475F58F7CE423279C70
C240B38A2C101EBDFBDDEF3EE79C735215AED7451F7CF041DDB07696DEB0CDED
A91B00E5EA4402A1D132B6626ED45D4FA26AB469A26FF7DB6FBFF3CE3BCFA5E7
36B50D4866D6480EB2F0185B620F34F4CD86CA6608E4BAA80C4BD1D0045C4CAD
64424DEC446EC036E28089E9CA9FA2E6A6400465753B26864B238CF5A00B1D7B
ECB15AF6687DD070A93685637D94878218000A5867E60E07F6A373E4BEA8A5B4
5B081B8897D72DAAF05B8ABA981301A8BDACA190ECA56ADF752206CC7A104A1A
160AB6B833D4C9949D9E8AD1B1720574278B76272D7EF63A1B6D2C09F38C858B
4AF535A550FBD5DC5463F7F8AAC78BBAFA985219E2E046823906C5584FF65655
A2B65F5E6182247125474A82C97E89BA6A6BB5A5D131F9BE79AB9535F3879A8D
ACD5CE3BADA2553AC1DD546880FA2B5616E4928BB25F4327971A96CB98B71A9D
7E2ADA52E8BDAE9EA5373A3A2E4B256F8CE5697C64745EABB968BC98A7B9BE63
F92FCF3FFFFAEF7DFF1EDDD4D3AB43AD660AB00C6681D7B4719E060BE0C1DB2F
240EA9B3C5A698C64646AAA0341D9A9FCD4EE8C1CA7104D57B9ED019C92ADC32
E0391A31A010BDE9AD97F3D0D382F19FA36B107361100702140D3AE3C118CE24
F20173828104AF4B9CB351F7AD63A1EA1EB45DE1264B017FE414BEEF96E9D0AC
39C94AA71AE3C5D2106CDBC36B7446165A48B9D2DFF66B31F46279D01037052C
3A10219DEA80030E38F5D4530DAED4A4EB5689A39A5053230F830A71171CC788
3A248E65EB7038EC195F047E6CE65B02CC062030F1857589D5D86EBBEDA6AD94
552595AE4B7182466F3465EC50893C6C4D07DE2C67EC6319EF4DF412CD64BD1B
F9AD52E8A6EE15DE9FDE788E203CCC3C3680CCB74C93533611021609A06FDD2F
287AC079E08806B4C12642E813F624974C6A5CA3A15D2C738A3E13B1DCD1F616
75CCD86AFAB9C33C8CD281071E78C61967B836CFA60CCBEF2D6F79CB45175DC4
7906427464DC190152065E182CB9BCEA61E55B9A6D9D6066613778EFF015D3ED
401AE68E33417C1ED76A4447B396FC20D1F7639A30A7F8D0E1E2588ACD859015
FC24E2C64934409D4D930603B2B8BA8B9DD85031B5CFF3C2490727A8DCF7A976
6396747A98329EAC95216D362207ABDBEFA5050B9B1BACBFDE061B3EF399CF5C
6764B40DEAAABCD15E9500A8C09F13BDA92416F004421C8DBA5DCF2C0A385558
836EA5E6FBD546283ACDA26CBDD028F937A4803B2379A7D36837F34E7B4509C5
6A69708B56495129BD3A21CDBA6A5C039D9755CA79A38255B7F2EA4DDE99285D
F15647CE73968FF6261FD1F2181D5DD06ECDCFB391A2DFE8771616FDE64F1EE8
9E7AF2D7977FEFFE55AB563F5D3AD46EB3CD36B7DF7E3B7136A25EA8B7ACA28D
D4918EB118D700565927F7CDA49AD6C74923842CF5FBAEAC705B85811E15F1E5
449A0126B1C02926F6D0795EE5B625BD930DC0B1708C409EE19785B5611A8DC0
CF1E932E697A20DAC63E9B0A772AAB4801E39E9140DC76DB6D6FBBED363685CB
0C58CFC8D9A2EE859CD59C82005CC136EB57D15276D421A6FF2DC5ECC75816C4
570A0C44762875ADCD36DBECE69B6F26F2865B10CBB424A37557EEE7CA69DDEB
D0190A2750F0BC59158C89019F968FF974E6E1F872FD6E445CDA7B98F1C52207
51E884655635A4FBF18F7FECB6C7265721EAAB2762A6A2D3EFCB799460BA60FD
3308C64C5963C51014C0280C5C820AA4E1FB816A3B1A46006B639131B74138C1
8101AC5E24B2F52E404830EAEE2191EAEE49595DC0E6C16740EC04BFF0852FD4
BCC78B3A1002BF0A387CD7313BAFE93310F4423E98815CABE86FFEE66F4E3BED
B41915B03F61937A4CFCF89826B4EE880F3BF0CA028395A69E8831B158DF8CD1
246E9F1513C99A47C8E062E83832AFC51D14778D394AAD3BD9CB92B7515CFB24
86CD1ACBADAB4BCECB1F95E1AB3398F29A911F600173562B5569A322C0D47586
2C92AB7950CA47EA69561A7AEA54A4673C73C1861B3CFB59658FA945CD569E7A
75EEA15F5A58E355D9A21430E21EF80FB4992681CA6AD62E8B1B692B56ADD477
75DF53818E4E855D2D7B1FB54AD5DB6937DB65C45BD6CAEA4A01E7ED568982CE
D264EA4FF48BB27AD82679236FF92ACDD6CABC59D6E18D74E6B7DA63DD89271A
CDEEFC798B3AED8559DE91EA6D8CCCCB9BA3FFF1607ECA2957DD7AFB7D3FFFF9
D3A9432D3786D396AA0C6B8CEAD887C645E62AD8ADF2CB698C4156CC8E4E39B5
8B16D1ECCCF6A3853E00AB34FB0B13DE491D1BA145A85E30228F906051B782E0
1EB002B1A09DE38CF08D19F7B0B3AAB25120BD2AA6F3AA47B0DB8C27D13DE8B7
9A4DF279286013EEA7D0BD985744A839C48A29AD4F36DF7C738DE1FBDEF7BEB3
CE3A0B6FDBB815F642AC0B1FD0A9718886055FBCFF81AFB83A4953DB52D0E07D
FEF39F7FEB5BDF0AC68A88B116861E07B9EF4A391B7F9C2D55E01D249D0998A8
2942D6CC115A1F489EA500A69DF17873DFBA831B56145171DF8CF10408E8888E
199894E18172C51AF613F920245EAA3447BF26E2E0C3386BE892484C31FC80B6
A42129634D1212D38063D0386D4CC47EA0100E2A50563B09266CE8134E38E1F8
E38F87E44477F5BAD7BDEEB2CB2EEB55ED9234087BEFBDB7BC583B85314136A0
36008850CA5F54F45E8CA17D470E460421649CA81A98B898A98DDC61200C4C1B
39DBF2882F1380A43AE4107D03A0218C5B2CDEF55C3398EC59368E9E05405C9A
DE9A37BEC8D391F6D23E3DFDF4D3D998EC8EA38E3AEAD0430F6582C852C37FA9
B3494CEDBBEFBE279D74926B469C2C67FD10FBC1D64420E3EF9A27BC08DDB281
8E96EEAE01B190FD1ABB3BD9D329F4B37EAB99D6DFE05952C06BAC3926B7B6D5
6EF4266AF6D4A2146DDAA0657EB10A72E2FEEAD641DC906688567C30E0A71470
AC50D2B49629DEAC6A3EDA6976AA7A8666A31CDCF6BC154D29D8765612639539
E0C9544C961C1C79B7281570AF52DBA5F32BB7BC0A4794466EB32D6B60C1E8C8
C2A25C31DDB1790B473A0B9BB9B46CAB68E8DEE67DFF07BDCF9CF7AD6BAEBD65
F5EA09CB2F3D02722AFB5FD9A1165D8543409CD9ABB351F5398007C0EE26376C
7434F214725DDD9873C6B60F74FC1E7BEC71F9E5973FF0C003FA27C8C629BAE0
59646E446946FC48162AE1EC986EB9E5961A0A8D8F0F0356E6F2761ED0FC3208
08378DC86A6EF7196FA608D55C2928B96C4E5ECC34048A890908BFDCF80F9B0F
831D316D66501D2697140834FCB78485E886E6D0747C8498631BF0DAE320CF78
FFE84EC394747E7D420724BDE433DD79E79D6032F174DFFEF6B75F78E18506E8
699031DB23EF1B1DD3B28AC3EB95AF7CA5DC2CAD1C0B7459242F78C10BBEFEF5
AFCF2658876F7536EDEBA94774986A98E56452E2888561B13998914FEF6834E3
8BA56B34104B28D5C699936E595DA909AC264611F2E904A5D9F4B2054765230F
94EE5F52FEE0830F96D46679E84350693267DFF9CE772E5DBA548BE7924B2E79
D39BDE84D9A715E2C25F4A0F48DBFB41004EA6DA6A890ACCFBD7D364BA0C0742
B4428091EB5AF271CF3FFFFC81BEC57920B074E9C1F03A741C3BC25674AA1D77
DCF1C52F7EB16C0202C83AF38CC5DF7EB9533D7BEDC3D58B9DA5A1D05FEAA3E8
C5646BEC94534ED97FFFFDB5CEF5AD04A3CE404899C9457CD9F44F4301B068FA
E824DA381A52D4968154C423B5FC1CCEA463EF165B6CB17CF972870C531DB934
DF994BE7699B980239092F902E44A149ED67A92664304D3996543FC91CD35817
F3E78D3E67D30DA58047C74A160BE9C58955AB497550C2DBABC02FBFAAA028BA
BC3D60C68293474CDDD45E2ABB164EA2801DB02A8F21042DC7B1D9AA98A2A77C
E8F6FC47A480B53DCBBE848D92143A2FDB0697DABA6A7D58B52C6C35F2923544
1265A2D1A243F8D8E8BC850BE6AF2933B16C8DD46E75DA6514BA91B735CEE313
F36EBEF5F1CBAEF8B75B6EBEF33F7FFA08CE2E82A05FB7E99871E9FC4F75A825
330ADA486F64BEBDF7BDEF85105F2B09D0B509318C5B01B0236DAAEB9285A527
287D12B567B4AAE46D132A71A6D9CDBA69C307F667B6BD64E2D32808B29AB88E
354DF8851883E5949D9298598C9B162494A119C3EC22C3167A3EBDAF5CAAFB93
CC269D7FF6B39F61326AF4E02DC286C59B617E2DA67B1591ACD94B3090A38096
7ED2080F50C94BB21C73CC31518A0D8872870A862DF719EFDC1F52BEA201A13A
6E38FF4D331997E8683C65D2E92665FC9994C322DBE90370702803E2A27AA3C3
504B73D09CA521B8C0B03131305FA9EE68C49AD10D00118AA5F35E7BC085EC22
6735F42F9FDE26CF77620D6D2F8A6D85742AEAC65FFE395177CDB8EE6180BF62
E0013D894E2DBB1D0266161BD03D7119370A96D004660B00F40429AC7B1EB37E
9C1F344E8AC2B654D58E3BDF4FFED8B94CC7CF39DE5159EB6CDEE8AFE6D141B2
A2C681DB154933D5043AD9E49D4594588F4C1823223DE7068E009B02B3525408
F318DED07BE4950ED690EA60C275A895BC629AF4D3E1B0C2F24D5C3D1A552984
97D0A6A673E14EF4575B69D9B265C0D709E931261135ED8408FA1E655CD4A553
A96E54F5EA57BFFAD24B2FD54976D965177932C4272263C9938E44AA6D190241
AE9A2AD55555F6B9C6A2855B3C6FD38D375A7F64546BB4D7686693ABC789D115
BD3EEE80AEBD72F5143D21E91696635693613A19EEF968350AC01A9275A5E99D
A6D6773F2FF23A0BD86E5499D78A73B23DFFD132B5DB4CADA69CF2B220B891C9
102E1A653552BF99CB33CE3B6DA9EBF2868A7EB7689409989179F317CC5F63DE
FC35A577758EB2B97026A53EDA6C6811CF7FF4B1CEEDDF7BE49BDF5ABEFC8EBB
FEE30199102B5C054FA1F7FFC20EB58C211369F64AD440BCA2DB7C9A97F1CA2B
AFDC79E79D4D2D646A492B6C76020B48BB9A0D7CC41147C8548FAC4CC32FEC09
4C6F148F0D912CB0CA8177401940D668125DC75D6713D03C1AE00BC67F20A758
0CC16B073CE0D914808D8314E01EF66906DC775E269EB53CC2C7A593127E3020
5E549759EF6918AE7505187EC0974A3375908D3EF18C124D7AD778DA54B5FBD5
DF9FFFFCE778C31225900010A03614C8624EF681830DE4AA91F286E81BD6E45C
695157A6CE365F337AC0730862F45FAFA68474C990DD0537028985378E181B37
976672D736D9649397BEF4A5575F7DB54649A62A65216053AC80FB81761140C0
409498C4F640B220ABA13DA9EE580AC642F32B5749C690AE65C8A4EBBCF9213E
9004C25D77DD05BEDAA925AA8640F198038405067604A19FD55DB666DB952848
20B8F4D7CA6A881F46212CB3FD9A0AD771722FC5E19D95424C2B9AB636374DCA
91A64BC5E117F66EB44BD82652811FF8C007C86002D8D40C921A43E81138E4FC
44A4FA752BB37EDD880917C5698548F2E3C7A11F497C3A4055BA258968F37939
FBB6E5965BDE79E79DDA53F8DC038F83A603EA916A232F5525D72CB91817847A
9DF8E554D884E7C11F9D122B453F6F94CD8FD65C63C1922D9FFB9C4D3694072C
05AC0F7B13933870FD6E455B532DCA896E3F22688C7F8B21DCACA647282F9F43
FF241DDEADDE8043E9772B75DB280F2BCA88B27ED228699F1B6DADB9B20B61D5
8CA1277F57DB47DAB739B25A5E72474AB5D39407DC6E6679D59DA9D77C4CEEEE
A85CF1D1851DFDD75ED86ACECBCBCE4EA9727FC75675E7FFEA57CDBBEEF9C5BF
DEF8BDDB6EBFF3DE7B1E26530B8D8EE6788EC4A19760F6BBED50CB82C399D6CA
D0FB43AA17937ADC71C7495FA6DA00679B61450255309501115D33CD0E4048CC
20E3B2224C07A632BA6B04877B81BF37D5CCECF2CEB59168674DCD8647C69134
7765994D8858B4D912B21F90CD5E1CFC945E7A16A3886D94A49042738EA75F37
FAB69D0EB794078AE54D8970CC296A30B52135D4CE25BB65778C92C55C6954B7
73DB10B86B380A0C8B2EBDC30E3BDC70C30D29A43F2D678B1A0058D415B7B085
E078B9669DD568EA8F7ECD3164A9FA5F86F487EF73C6CF31D38991CA5C400A9B
4C23AF7B2AF8E4B84A6862F6DD1CD6550ABD2FED53026562D6D2F41CB0D170CC
AC157F749107AE682092C92C535DD2ADC1C42763BB39C7A1D32E5EBCD884F018
A908FA934F3E59DB198031E97684356BD2B84EEC129EC8E45951CD30E94E6F19
1B48FA83392D2A460BF7B74835D55736BD99F78C20AC683B6635261CF852AA8B
EB18D5390CEB98E541C2681074CF10E2EA546F7CE31BE58140660E39AE4EC818
EAB635C83026C5F804F4BD9E9A886CE7454481C856AAE255FA049257EC7B7604
311E5D826C8E493F525D3E4470911977EBD5BC6EE951D4DC3EEE9098EA18731A
48D231313A08E960A84556161BA57E4FC262F48F966CBED9A61B8FCDD3922DDD
CDD4C373EDA280F36ACA578D4F4639E2C51A29B1F240C1D5CE39A662C84ABD4A
01571D05CA29ACC2BF951E6D48E94ED13E8F979F17DD2CEF361BA5026E360AE9
E6D1854FB43B4DD94BF33AED4A01E7CDCA69EE8FAC86ECADD599D76A8E351AF3
DAAD79CDC6880ED178F68BF9AB27DA8F3E9EFFE8DE5FDC70C31DB7DCFABDBBBE
FF338209C44835DF33F69989AF8873CE7E271D6A7D09B9ADD86570A76045B186
226CE1139FF8C401071C10179FDB90591C9036061B52D434373C35500592CD26
0B239C52D4358BE68561EF99D528124AA7CA3436CFF6EB5FFFFA4B2FBD543F44
E6BA9FCC6C1BD514BB2EE919683C926682DE0CFBC133BEF4EC2F7AD18BBEFBDD
EF122AB077E8671C00469ADB484FBDE38E3B5E79E595AC16FB4FFA2D06900300
EE2520E9A037EF7CE73B4F3DF5D427732EE12667D4C1C30312FF898182B0466D
6888962E5D7AE8A187E293D93C32042C96C0467881668A5C32211640BC965FE6
774C75E276C6DB9B71CBCCB18FD871FAFBC77FFCC7321A34B35AD8165E96D111
18E8BA612B66E36687E73A1A5878991193952A055CD42868FCB9CD36DB6CABAD
B6D2124D958767944C9A2949EFA5A87B204CAA4B98F4DFD446596847CF5A7AD9
CB5E76CB2DB7E061F3F900EBB80D3B9613195004054D3B6865064ACE91E1A22E
B8726721F098A8103F3B3E2B554F8E3F1775C92F56F58CEB2D7AC0466071368C
EC54A7E48737E9C08B21320ED4528E2C9B7E8B1F098C26AB7A5F72A4A41F311E
A295343EA26EE53DEF79CF673EF31932B8D813CE32A45037982A2D68783FEB59
EA5F434AE84B47FED55FFDD517BEF005DD83BC05173AC38252D4F55D6C0783F0
0917915274189CAD946AD61DB215D2B6D0C6951EF04B5FFA529DE2DA6BAFD5A7
0068CBDA8911F925E3A9903B356FD3CD36DA68C30DA4CB26BBE32323ADDC9660
15822E95B2044DD1B765DA9FDE7A2CBAC576851B50394F459EA78EAFA822BD7F
A67CE27A1D54E52B65D32439C9E36573A4564F3A785EA73F3A3A327F417BDEFC
76E904779AAD1201DA4E9D15ADE648BB3DD66C8C3653696636AB1B58DD2B1B22
E5CDF9DDC9CE638FE7F7DFF7E88DDFB9F3D65B7F70D70F7F5129DD292CB7B64C
5D983F039AEE7FAA436D649D25744C7F3A93F2F35BA8EF74693ED7F2A2289935
447513794D0A130989BBF33157610303E5A090DC1932DC822C14AD120DA3EA80
9BA7694C560194065C46908A2E146659CFA180B11F2D7FD1FA7E5827934C40EF
FA9FE1F972A572BC7F8DA43B51463E9DAC2E3D8C51AC483A4127A254FB04B638
0D3B27014F68D197D31AA02E33DE9B734B385B594D1B42E47F0E8587794E5E1C
5C42B36E998E46A1DE174B1C95434421AFE859962C59221BE8EEBBEFD6B71AB4
BDF6DA4B134734D2B138B48EEB44A1A001DB6F42EF54873151062C511B192ED2
4BD32393B895F86A444A1867C283B3096EEB18EAFA5060FAD01E5854D879A0C0
8CA9777DFEA10F7DE8F8E38F4F359F2B5744AC1395B15D35909E1F8EC9175575
32358144115CDA8E0AD4DFD8A456B2FEED6F7FFBB265CB88276B21691662359A
23C0DDBAD5A92D5AFC04072D186DFF3046E9A17F3FFAE8A38F38E288E73FFFF9
D2F7EC350858C0E561BD0D136F35A6F7BBF583C7ECB20339FE2AA66006E8E5B3
1A526E1887533F28B0F5D75F1F779312A654B98CC840D0DACCAC1E4AE721DF7C
E081077EF0831F04A28511A391D457EE3BE238B321697E40BC0BCD5ABFEA09ED
1400E10472BAAF7CE52B2FBFFCF25413A815358E8F55E11C1359E7E8B039066C
8518AB3934E6BA1F5DAE0C6F6008907567C808A3AD9E182FFB0B6569AD35E76D
BCC9861BACBFDED858698D96BD106CA75729607839F256B31F5E56C0B6BEA3F6
2DBDF246564FED933AB880D96A9A029E52D2BDEE78E97CF77B459AC8B3F1BCEC
D3D06DB68AB196346A6BFE8291B179ADB19166BB845995A9ACC6BC89A6EEA931
9A67EDACAF059A55B1ED62B218EB8C8E65B914467BC5E3AD071F78FCA69B7F70
DB6D3FBCE7478F56CD4D276B999ED5EB6F066490DD9DFEEFB043AD696530BECC
F26A14348B0CFDE473A247CD3D1B85BE768B4EF2B6B7BDEDDC73CF6501B05E11
E892115ACAFA956B438D8FB5376CA1EC08ADD964B439F598260AA03D1C8A1364
1685D4D69AC34D4679B169F34077E52DE4C4A71F360BAC0229F4D14BD3E35496
26BD407C9FEA082DA2C46365E1CBC963D89C147BE49663DF7266B72CF54F481E
231170328AC0AC6B12F2C8A890875E58338E4FAC138D050FF100C7D2593011D9
EB8E14CC3223068ED2107DC402FE59ACFF718A84F827AE5B6CB2691222DC5CEC
B608D6739894C5D008CD2DE636C874695D62871D76906B0BCF25852206E94417
B098FEF2A962668726F3DA4780893C746665F179861307066C923F461398D0DF
015EE438C58AA94EC4DAB8249EE9B9B63D670B2C1AE80E7E0E8F8F7E08AED0F4
D7D6139C241AEB1AA277BCE31D975C7209E14F4A28FBA12FA48DB668FF51B48D
B1DEA8599D31F5F05C49BD6150F2508DD0DE313E1DAF819EBE9A085927DA0E87
1F7E38403CA346226B90C79046A55A8AFE7CB8E8193903B591349FBFE266A059
E5066294682A585B8DB65FC80746C092900D15532703F5E8D8139EB8A54B977E
FCE31F2FC1B92E71D3A8C915FED6B7BE553392E4A9E45E6EACB168FE7ACF5EF7
59CF5C6764A45D762BCAFBCDAC8E24735CE501B746A678C323A3420A1D1A4CCA
C1E7EDA60DD22735EE93DBAC7AAFF3D5BBAE0C795767EDF67BE3291F6F352B0F
B895465BE39D4E4BEEEFBC79AD9191E66885FF2AA11CF3FB8DBCA34D5174B312
AF4DBA3A2BB2E6BC567B34E5F2FFE499B5FEF3A7AB6EBDF5C7DFBBE3EEEFFFE0
E12A88E11E82596D2E3DB9F3A31448BFF30EB5598D574A73A28A065EC71E7BAC
8C44AB2256C949279D74D34D375D76D9657CC89EB4DE7245A9E1F11CC0CDA0F2
AD860708F47D937CE20247040DE7FFE8473F2AE7E355AF7AD577BFFB5D2DC17D
F7DDF7139FF8C41C5162F8170D1A6237126C282A8CE2830F3E58D4B5B65C5D87
39E11A8B089DB6EF4E2DA7A961045B11BD2EB0E8C4FCBB75E7706C532C15B25C
D6371A13BE8A7DAE5087B2B529262153A041B01F8339C2A0EDBEFBEE32B76124
E0DE7C12F211330E0E0282404851F391E1313B3CE0AE212E7FEA07BA6F8BF5F8
37D50560EED3902A8FAA57F5E34291E879AD801961F7B4F019629824AB3986C0
AA38AF26C973D041076949E00E12541FC6B9785E9C387487F901645924791DC0
4F79C6797CCFBB4FC51A7BEF7BDFAB35A985A7E930BAC78F1053068ECF3BB6CC
F96163CE425B524C31E2EA9C907C24618346A085CF0201A425864C25C7CFCD80
9DA6D3E00C14CD5B07834B020AB4F3CE3B7FF9CB5FD6277A76286091338470F9
A157758C30F195011C3E43AA2DBF2C1422BB6E1BDF144197EAF4A781230E2FC5
565A6C37648EBB27F56A82522C30C34E53C0CA0CF0FAE9F60E3EF8600940041A
10B965CB969D78E28965D9CEAF7EE5041909786A3D1C2A738C015F8265407B78
876AD8F53A3978B114124903028D6C82AB8F607128D379B84D8CD792254BEEBE
FB6EA2F91393BD56BB21A5BB70C1D85A6B2F5C63E182664B9A6C527F5B7983D0
534EF0A1BA686AE471953BDA63EC5554C059D50DB8729CB1289FD4C1BEEF627A
747A0A6FD1EBF6CB64F0AA8A29BA2F777CAC3D51E680E73547461B7285351A63
9D91564B3A39CBB3562AA41EB26E6983F6B27EA5806529B4E5018F4C743BABC7
3B0FFD7CF5F2E5F7DEF1BD1FDD7EC7CFB432B44AEB35ED54C72000B5A84998F3
DF61875AAFCBEC29828F807DB1D60DAA720F0054ACEBAF8C84A7AE1C73D29CD8
A90ED2C67869AA4B66B59E28A5479A18D4CA394DD6886B18D5899487C4C46CCC
4AFAEDB6DB6E7BEBADB7B28D8998B1E5ECF178071247B267DC08AD9F62B001FD
17750F7EB6B6935C76ED25A45594657136635D720CA27A91E8FC4471F5A10496
54A3F6304148E09D60611899549B537FF2277FF2CFFFFCCFBE841D2F73EFCD36
C57A7C82B1880FDD1BE310EFDF2BCA0F1261474CAE23C3C4F4D0679C4A43ADCF
895E6AA83FFBD9CFCA743BE28823E85FAB970B1F538DE521E6EC881C89AD46CD
8B4B1B2EC7D8C1CE6864A433FEFDDFFFBD98B36E3B46057CFE3FFEE33FBEF2CA
2B1D8B666D0C83802C97CC3D020662BFFDF6BBE8A28BDC066D75C56DA0F77253
8E3AEA28436AB380AAB581E5BA413DE33AEBACC3FD0FF42834B43BD50103EEC4
D1FB48229D6AC222BD39FDF4D3DFF7BEF7E1EA799D1B36613A2A43F189CCB9FF
4ACCC5443E808151B5ED324C00EE890081882FF1F77FFFF75AD5F250F9EDA69B
6E2A278447A3DE216655E8F9DD0F54D52980D8532849EA871E44B14039AB89F3
D835DE8988A3AC2E024E957DA0CF69846A6656B2095A1232FD0F3BEC303C4C86
8B8E81D88598837AC30FCDEF11B526B602851E8B172FD6200C87D6667BFD3FDA
CE034E92B25AFB6F55774FDCDD6123CBC292D6250A8222C835DCEB45D48B4812
4510143120E02292040444C292BC822012445110F11301C58011451104D31511
490B927761E36C98D4DDF59DAA7FBFCF9EA99E19E50BFDD3A177A6BBEAAD379C
F89CE7B0259063DC2837D182331CF4CAD3186BF12C3BA74CEE9D3A75CAA4DECE
9064C3C3831D9DE97A055C60B888488F8CEEF7A9FD2A7FBC329A14BADA52BD39
C8998D3D3AD25B3C92CF1367B51CA595D34F0F26A9ED8FA15A47D3AC81DE8E21
53C0DD5D959CB4B2C31C941A2649DA51CD39A2B36A7D2433059C0BBB6023343D
D45133059C748ED46DA53B5F5C3AFCE05F9FFCFB438BFEF6E8729B713B9271BD
93B8F6997FA87474A79D528FA0C6FF9F0EB577DE79E77854BAFFF4452E596CF2
E46F907A3E500342D2FEE92927EDBDED5A13ACFFFDDFFF6D96A3C95C481689AA
69BD2076862030295AEFD9DEC274654F6FB2C9266F78C31B7EF18B5FD86FCCDF
BDFAEAAB69698EDB2172CA31C74F47117B73CD35D7D8E1B16F619170DA49AB9B
7F693F6D0CF608F08AC0D24E9645B049CDA17073BE0B13C1C346D1701B8B98B6
CA76474C52A4AA5D53AD8E9547A0901F5F1361E1998F843637D9B7EFBEFB5E7B
EDB544629516F5A322C74CACDE13EF25E3A3886DCCDB6CB38D3D35381D20ACA8
55489EF10ED9098AAF4ADA7A8D82EB9945B8101F9341638FB370E14213BBC451
E5354A6802379326209E49FAC0C6067DA0381735DB21C66044021AC66732CA22
4FB8CAD870D44CA39B5960CF0B0E512500CC617B0E9898390025D5C7ABD80F6C
9A5272F65CE6EAB5E7B6096084D8F5CFF6FC0E3BECF0FBDFFFDE27B3392CB269
143AF61B52110BC949292441282AB1C3A9A7FD626E9BAE81188AC46E6183C1FD
C5D3C2C266CBA935B8FD09BA0CF61BC432C807F951AA7D6059F1E0B15DC8C8DA
EF65E0322AB63DC84DFBFC8E3BEEF8C73FFE5111416D272963AC25B1644BF7DB
AE36ED68E3A4840F754E9C5FF7F2701CB3A2AEBBEE3ADB607642EDA100BAFABE
2FB6AC7476B71B11805177138A9DE04B61785B6FBDF5A1871EFAD9CF7E56D92E
C4B5C215F4743193D1360C881CCA9FBC552D8793DC8A78994C94996D376BD6AC
161107E537A4F4A2C56492A0D2D3DB356DEAE49933A7F54DE931753838B8AE5A
0B84A073155B049F51C0C3CE9C97EA0D0EF2E073C0F99EABF0BEA0C04CD599D2
3172E00D47C51C4CEFE7CD07EDAF7573E42AB5E19C93B21A26759A8199747699
5ECD4C1FE740E822071CD2CE82233A698CE429D5C648BD70A99BDDDDBDD54A67
33AB0E0EDB91E858BA74F8A1879E7EF891271E796245B1F946296086A1C5AEB8
06A221FA3DF257C2FF9F0EB5D88FFF67DA37C4FEA08A091F75D451B7DC720B4D
D4EDF7B6E96DA742C3ABAF989EB0A940D1D22C8866EC0802024DAA5EC703E070
2A512D1941C4582D8F94A0D221B4A365579840C1D8D5EC0C9C73CE39084D0A03
805A10EAF4302ED35510BA42141322ED09E16222FCA4ED61AA42469079922165
07EFFDEF7FBFDD94002C3E874F2FEDBEFBEEBFFDED6FC3E806828DB6EEE25B6D
B5D56B5EF39A5B6FBDD5BE4248933911F03889E4C3D011D8B450FC40E04ED5D5
B82CE3D553B2CD449F4274570CFE28183F7E5E2C50E240B321BA142C37510781
BAB1269348BA693F6DA836601B36AD30E557493A038EE58CE0EB43080516C926
C1BE45309FFEF082BCC2CB3D71796B89781940A9FD924A42E2137AA83113C0DE
C2B0A7A02655A9227395CCF10DCEFA69CFFE86D19803C0343C85FC3F051EC41F
A24C399A18D3C47351A93E0A4D0FB2E9E0830FFED297BEE4AB131144AA66F6DB
43A87B98CEB2A2F04C430D85DBCD987D7311DF134FB00F64A907D01183556F1F
F9CD679D75D6F9E79F8FB4C1DDFCD8C73E6676AAF9CA18AC8A366BE6A53B4990
9988B02D846DCA6197A9AD64BC6A3EC54D54899CED7653CEB550233BEFBCF37D
F7DD474812962BBF6DC0128A0060975D76B9EBAEBBBCB5217275F0012A522573
BFCF3EFBFCF0873F443EF8C92FD54F4BAC2951623F6DBB528C9A8B53F18872B4
D693272479D2AED691CC98DEB7C9261BCF9A39D5945FF181AC1A15090E2A1E6C
A3D896CDD194E5FA99B611717414D549C58E2C3CCB8AA0070D17452F367D819E
CA15705AA8ED4A3DAD346C45AAB58629E09E9A39B595AECE50ADE57D82D3BC1D
9279E7D546DA9DE47D95F204F0C8909DC6BC19B05D6152F7942CA90E0D878181
6CDD6065F98AC6A38F3EFBD863CF3CF6D4B2A2BA4EAA3489B3B91E55A818B284
35028B9855186DB6FFBFEA503B0102F65F7929BAB2FDF6DB9B39893A59DF7263
B444963AE4100248B1ED6B17B12F9668D524DA9AAE1166C335776AC4CE71696C
C20535235B4EA971ACCEF15C7CBB14307289155ECA037DE6339FB9F4D24BEDEC
3DF0C0031CE92BAFBCF284134EB03FF115A1D379701BCCFCF9F3FFFEF7BF978A
C7C0E0D8C754CC3D6FDEBC57BDEA55E6594247670F6233F0C8238FBCF295AFB4
7B61D5AA0A0BE424134294AC5274D1A08D23328B291506845B331B7CC023A231
236C5DCC0233B1528A51953692E823A4506D0C5B6EB9A5391F3660C2838C5FA1
42EA34049A6300CDD89DE2CD6F7EF3AF7FFD6B5C4C4172B0A24C2C9AB854D986
27F707D5824193C456A40CC6B6DF830F3E6857361565A3BAE38E3B982B9F35E4
1C31FF13D0AE2591F400F30279DD748D4FF42C0A7266AEA75E69EAF063F0FFE0
A123844BDF59F51F0BCE9750205A01709971213A761E566D5FA1AFA8BE428678
CC721DC50851C0AAD3F554C1484E451792C8AB651F302D78EAA9A7DA9B0B2EB8
C06C3E9AB80038802BAD1949A1C154A3E7CCC497EA0D91095C216E245E1A890E
CD2F344753BD4D7D84964750999032C159E43C082E1B5289ECA70AB0133960EA
EC790F3CF040DB844F3DF514761E2211924EE994347295F801882396C9B1F726
43389558A5E0A8B5636DFC64127D241C958FCB81A98188E38C880FA45210BE92
7FF9A7E168CC444C58620F89D07A426AB4E0E3D5EE467D24A48DE95337D87C8B
B973369A69AA7960709DB99B15C58A9BC5FE2B766633091ABD4741A76D2494FC
A9560931349D78055C1C98669CDC42948397CEEB77EDAF453386AAA925D3BEF5
4AB5D95DB5594EF24E83D5666A6640D22A016A64BDB6392BA1D26C6445A3A566
EE6D5793CEA4BBDE4CD7AE1BB6B55E37545DB1A2BE68D1E227163DFBC4F32B8A
DC648383C63416E6C8A89396B8FE658A96F8948C62417CF2FFA6436D88443325
CDFDB21430C524502F71244CCB723C38BDA1085AAAC529B24325C236C233CE38
C31C503B03071D74D0B5D75ECBB7E0D415204BD5EB76118E84B8A3A998B2932F
6404DE6AE660B41390FBE37983E1E2001026659BD1F182EFE259AAD7299028A1
CF94C986D3D52C892CF62E5445A93DEC269B6C62FAF537BFF90DEA993A9C30BA
25837FEF11767A2913295587FC5DB870A1894522B1A0259147881BCC79112C48
EE131C1B6FDDD3C8E4E59B24CA18928FAE79F0914FED5B65C7E55D912368C696
F5D49E12485080FAE28B2F36116F2A19C58CB328320792FDC1310CDBB72EBCF0
C2050B1668B7B37970DC1989D874C77B5E9D3B8AEB6C21D842CA0BF0010E9DAF
0FF6C727194DF909B88CD1A29F92480BC506230EAC902C0B47809D47E0A6CC9E
089CEDA1285FF1E91E684F084AB1FA78A2A5369452C0C20AA08C4B9D8C43E42F
C358274B42BC4A8D297D1F8B107BA0A126CDE3B40D6F83B4E380A627825A19DD
D9502751D84396C0DEDB5980B0C5FE4A7B531314A4D2ED317152ED9A488024D6
100AB929235E5C5A426CD8D68504B094214D5C7B4A459E58056A2E407831033C
BB4FABB1BB1401D201F7F3A30639648ED0B53244A889B2EF7EF8C31FBEEAAAAB
ECD1FEF33FFFF3F6DB6F57E706BF751515AE385A40B6DCC73EF6B19B6FBE39F1
597129F0DC630BF67EA428439ABCD966B902EEECB2DD3354C942DC1F75CCAE9C
A02ADF3495D056ABA34164EB9B20B554514735877089358B40B44B1B0739C738
C1CD50B173DD69EABF1AAA95461E6DEE4CCD21B6AD9B7F3D6D24A673B346D192
308F8DD4C3142CC97C7459C15B56EB2CBCC97E737FD7F48FACE96F9A0C5CB5A2
FEC4932F3CF3F4F30FBFB0DCC797F0D8B2582E6222C67615B36FEB6A2B4D7E65
82571201933A5D25551AC6E950CB09A724BFDD9E12FC47FB52596415C30859ED
83E7546E50CE2B99CB76CF62F7EF2C627D4B6638B9281C0E46E5117D633EBED7
6A0C3244C8896FF01922414FD3B1110587ED549ED267564A1B1A2C22914FF386
8F3FFE78FB2B3604F7F2F8463F93210633159BD11B6573B176F16B8570092EA8
8B1A03E18CA52C238CB41FB723AA0CFB015768C45EC84203659193590A55C753
940EC1E1A7820B79955EE81E9592DB249BA09938B44BAE0B132A8BDDD17D5483
C7AF445AF26C7423C5D4715984D8E66F9B6DB631173C8DBD1654F485AE52FB0D
653D4374BC90A1E869EF4279762A13AC056EA3CE74793B8CD551E625897DDE04
59F266878A47351B0AF680810A0E4AE99772975D76F9CB5FFE825CE62CCB0622
F6AED280F9F3E7DB056D37DA4391001202DC1750705935C7558CC1F7050A8575
AE8E3D3078F079CCAC3436B4079A3058BC585FF6A43E4FE914ADC13D92DC87A3
6551A9EDA9BA4D10A755846FCC7D253F3875BDEE394AEA39A143649F34496B5E
3B511331DACACD2D51EDFA794B0B2E0E95F3DA17E588B3CA34C3B6BF927153D9
BAEEAE11322DF8BE9FFCE4273FFFF9CF5337CFF1219345E2830251A8BC0199B2
9F357B9C05CC0E852210C51CCCC423CE7D446568B88E02DEA0AF77934DE69802
EEEAEECC03B90D1DB011AF80CD24F551562FD17C0E4627B6A0B8CA075052C008
56E43FFE712B5A9B98A56F4A34CD93D09566ADC30468A556358738E7CE4AF30E
C1235968A06B0BC28DDC30B4FFE360D7D25A47D1DD61A8BE66605D63E58A8155
FD2343EBAAFDFDCD679F79E9B9675F7CE899257EB49EEDD616D5BCA2C71E7B0C
AA3C5BAD37BDE94D66F28497F3C27EA44BB3C45312D19862A44B62B397F13634
8721757439255461E9EBDAA91C75925B9E323344F0B040C589EBDFECE3196C53
A9D57FAA8055E3C8864601CBBA07DF7BF0C1077FF9CB5FF60939E9037DACA47A
83A362D876DB6DFFFEF7BF1F75D451575E79259FA4B52A175471856756824603
5F013BA07DC786E84895E0A09E4920B8027C8F445DBFC3E3175357242DEDA8BC
9D8FC869FCBA054B239F5B254675D77A72BCF927EFA84A5CF680EF335F129478
7B60C291B6F206148A44D492BC1C33A8E38301A60BF7DC73CF9FFFFCE70C5E5D
DF712984AC195301EB3A6AF41422DE5E916D512BF0A29D8E582D43D4D615D768
D517D5941A4D9AB6A35F90D4863850A9C567F7B25864C1F7DA6BAFAF7DED6B59
0466DBF070B630A91BB1B385FDF3F2CB2F3FEEB8E3245204B754BAC107BD43C4
60DAE0CF3AEBACABAFBEFA85175EA0BF1C9E9CEFAF20BC37D55C175C70411A9B
9DC828513F4A42EE84FA891261A6109350FC430BAD347388603DB10E80C36509
2AAE394AE9451C989A78E4860E026FF0A1ED9A78C97BEFBDF79D77DE29E249FB
8CB0F7E9E89A786D925294CB3E6C6F6CA292889D16EA4D69020D06730D9B5816
701639C659685B11FB18AE8B087F6CD83648A4960D1543D083C9ABB1B7A3171D
21222D5409B2DE59AEB8CEA9B98159B05AD9234C99DC3367CE6C53C0BD93723F
6064605D4C818C30FB2D055CEBF0FAD5E3ADBCDCD4894D9BD018A53CAA9CDD5A
47259EE74C9E58AE8043352F8BEA303FD8645696FFEC4873D2AB5ADE8921ADE4
0C5959A39E87A00B71319485CE229D938305427EA46BC5ADD68D0CAD5D33B87C
D9DA952B1B23C3D5B56B92E79F5BF6DCB38B1F7DE6C5E014B0B08EBC80475144
61877662A69EF1049CD78BAAD65704923323969909404992654288F0C60E3F61
431B9E5D9F7C8F44581AB92CECBBEA202D7C41C375F00EA303DDDE8DF6CE10F6
E004E3544903C6384E8C4AD7ED3CF8DA21C1494A044315C703AC9164B1CC03A1
6C0F0B728D59B5C5B22B6372D2ED5C755FF861305879A3D3ABDEC4A1F1EDF899
5CA6B044ED194E3FFDF49D76DAE9F0C30FE7F831F995486225754BF249BA9679
66003E72AE59E5F1C16DFA9032015EB05A0A4870C47C27CAF6F9870F017B1FC1
64D332DE7AD9C74C761F73CC31252343990B168521658E98A2A4805BC5153100
00FD882986CF7CE633EA4CAE9A544492B2AA4DD7B50623C01E0195A30833D34B
A6537B00558A0457E58F00F028E0CCC1A63CC7131B8F07049A40945571751B36
EA5C156BCA5B83DEA24E941527875D120E0C8FF9413473E44F3BED34FB8D3D8B
5D44E6AF7AF4FA26757A79E0BA0C08E6A1FDBEB05EF39832373D730BB7439A31
57E4CEC4F5C6FA7AF88E40C88A982A143CE6BE9202164B0C03509EC2DBA600D9
50D29A64A8DCD830CA46A945870DFE231FF9C855575DC5B0C9A31147643B6591
6794CBDAF3DA2980CA571C3560450567F3CE8F8231EA2786A7AE55106D278777
D34D377DEAA9A70013342237BBE078E8239EC2364F4E33A7DBD8F360D1B4225D
FC2509937A3B67CD9AB1D1EC5953A6E4BC1343EB561368F20AB8F0614785A4A4
809351C5456E611AF598E417403A2491B7DAF4A8D7C1F6A619CC7731056C9E6C
5AAD64795BA4C203B665CDAF908EE41C1D593DE48D81F395AE76AEE70303D855
29C0DB03F560C6CAAA15836BD63447866AABFAEB4F3FB5F899A7173FF7E27A8C
A8876C80C4A35061C71D77342577CF3DF7D86F5E6E2E169B7D9B6DB679F4D147
495E52FF805A5265BAB7D6C77CA1BAF05410FD760E6D3C9872F6F5EDB7DFFE81
071E60E3A28194A352D414873B8955F66C883472058F7790E45E6B5B37266C8A
E0C37DDEC5B101032924E0C9D112B780AF3ECC22F188D6456FAAAE0BBA629BAD
EC46117D55EA512438E06F95FE819DC03F72BBD961CBB4DD76DB99936DFFC46A
F119A9A4E0A7A5DA016A0599110C4FEDE142F47485794C5C5F55D928E209A24A
7BABADB6B28BDB29D5E0434CA966B18DCF04FBCD8B366C0EDF35B2F492AD435E
13709C7D1D3E2CEF4C280917C64A3965AE8489A60240CCC8A12AA35CAAA52929
604D0EBDC5A8AAB7DD6B8FC0FADA31B4F74C0506AB621E708DB12B5427D65E80
0040EFFAEBAFFFD4A73E857F69CB6A877D75F1E23469ADE7CD9BF7E4934FA200
C84784C25701286B9F2C55C69BD146CAC37EE3093A541C150ACD4A969494966A
730592B745572C04A91D46FBBEFE8809C381B887EC70B7DD76FBDBDFFE665723
F4CAB2320FA6EF6DCC36B1845E595C8664EBC5189236C837DB5B9659296134C1
BE4251A9B7077CBD707A7022ECAF1C3492D9F6275B141C477C5F7BC066D16E55
1CCEF218DFFCE637DF75D75D5FF8C217162C58005D894E1C5AD376914D230D22
1BB1F79798F8AEB9E69AF7BDEF7D0ABE7ABA85D243216F7DD136A46C50856035
BEF18D6FFCFDEF7F8F28260482491A9CF2B66D00258059A5890E2A6BC6F6CDA7
B89045491A3A3B2A1B6C3065E68C6976A71C8736D24A32D7EBC331765D48C9B4
22DF31388B581E4C29C497D4F32847A59A440FB875482AA2A88C3AB835178939
B495CEA27B638EADAADAC357AA2DE5DD4C2BCD34349A5941625204503BBAB176
09A116CABEA3B07383F99AC9D0405837900CAC0B2FBDB4F6B147FFF1E413CFAC
E81FF292D7C7D2B3D8EAC4F6258D757D80FA5F7C4151B9D75E7BFDFCE73F875E
079603DB5E666B53EAAA1634CDD164DAA50D6D1F3027CF2E75EDB5D772F2B1D6
85767EE8A187C4E28BCC9528012142081A158E8F48D35F9099DED7D4C2C9C393
D06F8EDF64D72F77E65A27219D517B302F7AA2B892FE90D732E654D82F4D6CD9
356DF7DBCE8439815837287F4A53ECAFD21C2A3C983F7FBE4DD798F7D5E0E528
E046B05EF807760593C8E616CB3F0BAEBB5925B251AA48C38664EB055D972C2D
3D266EA5E2AEA598336022003E1EED55AA7A1A73BF99477BE289279A2C5BB468
11BFB461F8A0AB7F011325B95812F15A77C52A88938F791DFBFCEEBBEFFEC823
8F402C4FA64DB156FBD3BDF7DEABA6086A365C927789632BA314DBE6F0A4934E
3221AB46DA2A83B1CD6C5B57362856918DD9F3A827B12A52274B3ECDB1C71E7B
EBADB7DA61915FC831246387E9100A7D59C24061C0D1E60805639BD9F4A8D2BA
BE2DAE37A14221CAED2B9AC3B4E08CA3C3FC01071CF0F0C30FFFF297BF0CA36B
BA2AAEB59FCE0EAA88C8BC047D88D69E6F284E0C4636A84A64FA3F0000FFFF49
444154FA1D99AD60632694A2DCF0FA76F131619439506DD3355FF12080F1E495
57C0C46929223FE49043BEF9CD6F626DF8B4B43F1D26E2CE38E30C3B3B242C78
103EA06844257208E2BCC20140C8012828A746454DB8D4BE36524D5493C8DEAC
0717800B7CF825975C72D4514775172F3AE609851A0ABFDCE69C927191AA565C
E36446AE62CE7CDE7CD85AADB9F3D457AD80415572C7B1ABAB63AA29E1299372
0F3AA947DB673D082BFF673A8A7355B38F2B90B84684BC6ACD08738F3A3849FC
C73274703C96F6E9EE4A35EDA8A479D1706296458A07DC0CB6C07967A424CD09
27B966350F4ED7B3A4A57D1BC196BFDA91F3647556AB7DD54A57C83AD70D64FD
2B479E7DE6A5071F7CFCF1C7FFB166A03E9EAC2FD5EA49468497F3E2CA945786
9890C0C3DB79E79DCD68CA0AB639DB3713D71D9D75D6596637016707126CB203
DD89282760C259E53AA289E70A123DCAC1D8CEA6905132A8DDB34922665B7115
91C38D394E9D5E963B8B08796E7AF6D9679F79E69958B5748E425293D8CB46F3
988E797DC650775D7B4344539B64B4436216AEDDC51E0D3124D7C10B659F6B2C
BDE4C629722B45CE994C62152F99ECAF7FFDEB202CBC8462AE4CAA9A2FFB97BF
FC056F83E419B2525A21B85874882946807EA5FA2B3FC344DBC61C7F89C7D85E
360FB6D127D8B759ECE6C44F9335B646CA5664B133B964E878D7114ECA842CFA
9EC94701082CDD9EEC28BDEC5B7623357857AA0F481D3008C5393C876B52B04C
D0D60C5E91D2542711508656A09686F8103B8A83F0C94F7EF2AAABAE2238699F
4425432DC7ACDAC5172E5C684792EAD8D7BCE6356679989437A3C7D60E960602
18849795EEE101ED14DB1818A1A781C4BDB38BD8A8EC6A3045E000D842C0DC44
81F8873FFC61DBE461346259469BDD0E88A58C429ECE5491ED287B5EFBB09944
66AFE354885D92FA3ABF345E07FB88F4BFA280B5A942A1A2A4FEED7170F6EC97
A41888FF131086674A7D21E9662D8B59712F5835506976359B1334AE875CD805
BFFAD5AFBEFBDDEFDE61871DEC61A9E5250267B7BEE9A69B0E3CF04071AA7844
148FA6400EAA1A3926035DBBBD527425D108859A545502CB849340BCC4162849
C782DAE6065747C68D433367849E3C69929D9C1C6E5A6D443E8A46840A17A89F
4A5533AE4C954F21085BCB3F3BB20AFE2E3A38FE697D7517FC945968E5BDD24A
6F0E8D2E169D8ADE5A47C5FCE166C819A1ABB5A492DAAC35AB8580ABE688B0DC
BEC87570EEA0875A67B5BBB7CBBCD0AEEAF4CECE9E3431855A7F69C99A454F3E
FFE05F1F59F4F8536B87C7703A4BA9235B30D20C617CA69EF15E9548678A58F4
5806369F308D8A918E791D08658832D9865BB060C10D37DC205A70FBE5D5575F
7DD861876123534C82B7C48610DD124018B821ED6AE61993631BEFBE254C2CFB
7B025B41485A8163E5F93186534F3DD55C34798A901DE21C7BF6A2D272E8BD9D
4F7B40DC8E66C1F22AC94ED6B3197BA5F948EFDE7BEFFDA31FFDE89C73CE31B3
DACE36D559E38D3FB82A6ABFE20A5529C786F18AD340C64B595222BA666B9B34
114C43E5134A75AB87922D1CE1109ED11EC48485995CE79F7FBE427FC8B28943
D05964D325AC859632994E854CFB4B0C0378B70DD75028449267CAB7D4AFBE7D
EAD866C0A43D7ECD2E4E0CF0BCE2A5EA141A417AC91E1CCA41DB5542EDCB5FFE
F2C73EF6B15098A1B6828434EC65BA04DF8E0433AB63E6C2E1871F6E0A52C864
2D22E3378D8E0759226BB4A36157360D6A1F805B2629B05762096E38CE76AE4C
9F12BE2510BB6D690F0EE2C02AF7646F70FED4BC92403A42D5DF2B44AB519BD9
36C90B2FBCC09EB18109E2E06144A1886613D1A467AD9858D8841876EA0F4113
BD37BCE10D77DE79273417AA0451B459A9DF301A9331C12B8B6520EC7991E128
D8130A4B8BA0345F51BB08AABF8815E31CCA362224498219D5C8A83023CC1822
436197B25FDA2AD82DEC76F6BCEC25332E4F38E1048E2A37458372AC7CA2CDE6
C77ECAFB2A998FB41784008BBD0723AFF09569AC83E7EB2039D8B1F6D7DC4DE7
0FE2AC592F5E9BF522CF5A353D58ADA6A680EDD279A7DBDE6A34169A52C0F958
2B559F65515D1ABA241DFDCA37415651B951B5A6DFB7CA4B8065E597CAEAADE4
687552E149E515BD216BE43AB556310B36A4F56A0E8DCE6AD5505C2DEDCCB1CF
D5467DA4889C862C6DA4D5B4B3AB5628E05A573ABDA3B327099DFDAB869E7F7E
F9138B9EFBEB838F3FF1C43FD68D94F75312294430FFBDAB3101EA6F828DC8D9
83E6B012BB92D97BD1A105D7ED6E028BD294A59D25513EE960A0DD4BD5F1DE95
6C8F6C7FEB5BDF7AEF7BDF1BA21DA7C8677B365466ACC6E9897EDA5F492CF310
DA82AD6547C2DC53B33A172D5A047F4D88511A79C0617486A97D51ECF56FFFF6
6FA63E8147295227E7DEA48999357FF8C31FEC9744267DF5A4526E13F43DCD5C
A5932FCF4393D1263D14A45144F55532C107BCEF9EB98263565C4F270BAFB778
D91570956CCC262FE812C82ADF78E38DBFFDED6F7FF2939F988F152227CC0481
68336ECCC461305863FBEDB7DF77BFFBDDF1F69558C1D97E784B4A36233DB7DF
7E7BBBBB84E998FB04CF00199A161D0F152D30A1036690E89C6774CA46F34C69
481493980F0442908FC1FA090C228B7DDD55E68480C30E20E5A650538891407C
440D1BF8B129836DB6D9E6E1871F1635823D85896C8A5CC92F90D7B0CD2399B6
F3CE3BDF7FFFFDEC0D48EB70FDEDA9D97BD0F4A34510DF988C7C056B86ED2192
29C874A928C5DE6A149DC454DDAEFC2235FDEC3DCF791E46F37B2840AA39374D
BFEFBEFB7EEF7BDF033FA8D4A1F9887FFBDBDF507E0C29C468531671FE8903B2
F9D8FE78F20A335D742EC4726D4F9AC56F33668B8B42A247A7EAF843A10B097B
D87CD294501B4615A11C498E89FDD32CEC5D77DDF594534E092EE64C2216223F
051B44DD9FB4E1B433D71F5AE113F6CCB9E79E6B261D8110E225328C34E11ECE
9CB9820819DF26666D0BD99F6C121205E2244C5BE54A49DEC02FD7AD39016498
DA3769FA8CBE9E9EAEA99327E78CDB5D2D5A5113982D8D9BCA8B6DD5E003A96D
C67684E968468ECE4A4768358D490AEBA355E1DECC5ABDB26567355A8DB15A22
CFC6945FD3CC8202D69C54D676546B1D9DB90B52ABE4C5465DB9DF5E74E7B095
CAEB839B795BA76AD125A9338FA6DBB6191E0A2F2DED7FFAA9258F3FFEEC534F
3DB77CD9AA556BD77939ABB36A73642B4708B7E25AD394EA0B838BB58EB711B5
D11522F660BFF6CF0B9EE07B689379E284D80E500E559C1E9A70218C541B831F
A3F48F7C3BDBE5760ECF3CF34CDB5B8D829E975D2EE8BCBA6962C5B7F7014C1D
D5170743DC7B18DA3E6D060647A8255CAE090C0E95AF00236473A3BCFDEC1190
1F0F9DAEFA01F112845816E53126215A90AC918F1D21B805ED0188ABE8E8D147
1FFD9DEF7CC7C43717B7B9B5DF0B09A9789D9753B802BCEC719810BB9D3979D7
5F7F3DB15F813F53D78131294A932588D5B53E44CA43E58CD5DEAA1A3B93A38D
648EF82E34800FF415DCBEF1D6054F31449A52513F82E2914245E4893D1F90BF
A71909A3E102FC86ED84020E85DB61DF359D2D662EA4339103B6375171669B4A
1B9A27FA1B994F6CD68F88936C05ED9F975E7AA98FD086C246B48B9801F7C73F
FED1E4AC294E2EA2B9F527A274F6B5975054A83D26565C132AAB05BBC7F07C1B
C7D0D6482AB822400269FAAB5C6A34B4F2E23609261F28FA22EE8DF5AC434D9D
4FDEFA3DDEDAF41C5401728B6539E13D7B9BD26F8609F2089889F08BB17C0CA0
EA1A379999F2BEF7BDEFCA2BAFC4C1850805614B125D6932D5044BA756467791
8A78DE14E4A9EC8666A42F648A9A919612E59D8DE670F4D6B3578E7CB254826C
671F97972007590F5FC4CF56492333A0AF6ECDC9F335538C8C73953759ECEB1A
19B6A3520FCDDCD79C3675CAAC0D67F4F5F5F61415CAF963B782C3F5567BAC8E
9A8F37E29547DDB93E67A007AB25D5C4716EB4F8B072ADD9D4F6F55363FAC22B
E0A4E8289C8FB93254CDC159B9902988A0AB1DA667AB79BAB7111A59B0356E64
393D56CD1CEDFCA4353AEB23CDD56B87972C5EF1CCD32F3EFDF4E21797AC58BB
7660DDF088CFDE29808971EAB94AC6846B867F9615C63300F827DE479C830936
2EEF0596B6E7A5B136C74C9E9CF7779BB1899838D5D8D6FECC90D052E320E659
39361F6649228C8B43A81A92A46088A4FB82F0D56A3C42F00767FAA28B2E3AF9
E493B7DE7A6B0819CC84BCE28A2B4C25533E84C337417D2AB17A393DA5BF22D3
51A53ED2D8FE62997040913EBE956F490D648E21B9B428087A44A729399BFFF6
F632B285C917941266BA3E9FF14B804944645BB81B1F9DF2840C8449282F91B0
6073A21A398321C6B7F893A489375698B4CAE83EC4D8BEE3CDA77058EAA02058
7E180D3321BB4F54C0844E56708421CE24CB92361016950224174A138B3F2742
3A1DDB12639DCC1D7B52E4BEDDCE4E1C4FCD5065DDDA529A0975DE79E70930C1
9FD4DA564D6C881233E73AC25E5805873340A812AC16C2C61B403CB892C47E9F
73F4B00C98BDB4E825AAE5165E5A34CBBAB5EFBFC4A652BC172A0FBB0E23870F
8B09B121615F9E75D659279C70825D1FA20931E5614984B6F8734988E99F492C
C251F90D2788C7F1B6DA76DB6D679E37EA50D7E780D830B6D8620BFBAB00DB8A
B5B076FEBE4A71966AC45908E9579FBAF6C653BB02666E4361F0C9226C463A4F
FBABF217826B71B230BE85534962CF5948F1C46693737101E5B0175B131CE9AC
8DA6AD5AD9BF6AD5EAFA7071547ABA66CE9A367DFAD4E97D53EC195BE7B60038
17AB36680A580F83B9D168A3A5F40F5CCD6A11E79C88F72AD71CD5F56D94FCA2
D6730AEA9CD32A6F6AD424B699D6F2F0B51DC2DC35E934D5DBC1CF6AB1FFAACD
7C4F0E65393E2CA7B2CC3B0C3693A1C1E6D048D6DFBF76F10BCB9F7EFAC5179E
5FBAB2DFCE5B23CD13CA150C79A97F95127A39C53AF9DCB9370C27F0E44261AE
9E74D249A6841085DB6EBB2D3CC3ED2F14B67A4DABE1E8273FF949B3D9115EA4
7E412B688492EF2196F1C87AC051A674875A43853D7843C13E6B275C22F11FE1
B988024939790FA3A4C9A8482EB10770CE1545F09EE878F380B650EC288B4520
218686F8A744C398D7918CE3601C72C82137DF7CB31CE8F650AAB20C7A1649B7
124439713D25ED2E365AC8A42482FDF5A58351C07668ED27AD15A9E196589109
2529C074219DBD044707ABA61CA48FD7405A115E84F2CC160122CE1C4A145646
773B98603FCF9B376FD1A245DE1BBBFCF2CB6D7FFA4CA15C0D7263B462353D67
BFB17F02F629CDBCDECBA0F7ED9FF17AD35881EA054E68239B63F062C56A44AA
5DE85330AF21CAB0CF2405FD243F7D636FFF5E7B924A6EC1FABCDAE03D068AAC
1CD535D1794257D33AAA6D09BFE4D836636B13516DAB02076B0C57878D3167CE
1C9303421A0BCDEEF34422A3B0636887FDA0830EBAE4924B04C5D7040AD429EA
BA3DF6D8E3FEFBEF27F15CD255A57D52F2B55A089EB1C2D49EFF5CBF8179238B
A5E78AE735231FB5864AE0C75FB3E4E34946895583CB8AC63244C23B21A8DB15
B06C716423240A765AED3D75D56A00A39A31B3696C29A92BA1011DD36886F511
471C619B1F190BCD5992C402C42C5676F20C5336C84F75CE6C117255D7D3DDB9
D19C5973E6CCEEAA121C8E51BB4A206F570FEBDD05B9FC3A18BE1800A3B5D2AC
C669A34E3496BB54474DA55E28E0C2562962F4C5A8F258B379B649913AED303F
B8DA5164800BFCB69DFCE146D6B03F575BC9F03034D230056CEAB67FD5BA1716
2F7BE6E9C58B97AC5CB366201F5D44F612DC20E9A2B8813F6052759EB8271B5D
C0DAFEE250D9C29032DC6BAFBDCC157EE8A187C6FB3C9EB7AAEEE40483DC533C
C40E3695219E5148A5B7692CD5259149864C7E24D4CD12BB94D92071887086A2
92F59A6BAEF9E8473F9A146D6E09EB89F80D55845C1026E5F6DB6FDF679F7D70
B2EDF32605D4C45BF527C4A308B373977F2AE8F9A7E04BA5905D12290EC64305
576343620A31CD23A7BAB75476ACCF33155E8E30512A39450A4BA913ABE4BB54
F4D99352665692505CCA54EF1BDEF0863BEEB8C3775F40D0930B4449084B89BC
60A14BF69FE43B732E6B69CCE7D2544037E81B1B372395A99C8FF49F91CB7B78
11EDE4DA0D6E50142883D9B367D380D2EE62926BCC96BDFA27DAD18761851096
3CD5CB979B7BB89CAC4C0C14BBB5AD14D834256866CD9A656B71CB2DB7E88B26
1C412FB23ACAF0019C561F05E562138751D2C06079C449B56F4184D78C1C7038
B2C427C51DC1727866784D7225F6540EAE68478AD6BEF2BAD7BDEE9E7BEE41A9
788C18C15E1C7736B08C9E1D76D8E1AF7FFD2B4CAEB4156124DA3F34C222EE4A
092C53540AD86AAD4B723B14CA9BCFB094D2A684F4F105013092B8B183F9F8E3
8FAB696612A12D9A0A6643B1995231A48694BA6E51C121163D9566284C7FEC30
9CF276058CF583E09226E6F873E818DB0D37DC70D86187292B0F45BC42329B6E
BAE9E2C58B6D65297C62D55A623C38623C117CD8F95FBEA2350595C2CFADA466
F8CFD868CE8633A74E21C552B85285D194E6F7583BD46AFD81D2E58105C5E252
F8ECADB04CB3C6462DA6B955F25B7CA6BCA2BC1A9522C41D8A3685C50475542B
2D9ED2C281EEC813C0E6C6A660AAEDE27673BB728E7FEEEE4EAB1D8DBAD9E9F5
D5FD038383C3CB96AF7AE1F9979E79EEC5E5CB560F8FD8EDD2A25570951A32F6
377D6CBC3FE7C58A428882C37887693C5DA2FC281DBB68E536DE8745324CBC88
D69BB467A16FB92426E1A6F6A1B263ECA6A1C8D5B11DD9B21E31CF4BAC05DAF1
02F7128C22845571FD2742C4709672453EBC09C43189C9F2EDB7DFDE3E635F41
D934221FF204652D74300C2E1C24F757318930BA52A2FDC5080941CBE8967353
12DCA1CDADD15D3C6BA6E05DEC76203C21D6F88718132EE5983996B4DC10D1BF
67CC87188F7C33808CB455225F51542938AA8D3436898381CF979F963C0FC947
B302899AA8F19C16DD07A24BBCFFA54531DBCBF6CC39E79C73FCF1C7B32592A2
1BB4F61ED68312AB36B6C30F3FFC073FF881FDC6F600A17B5FF5EE234C89232A
B12722300B6D453ABA69EE048B1E622483DCB38DD6C6A01DCBB9106F179C0F02
0A48E8FBAA590DD2D685F0A3C88A4561C8EC410B6C5FA430F4D39FFEB4B93E5C
C48E09FCCC7605AC1049607FB87A8A976D30B69C52122274931AE60376233A70
63AE259116D4C7ABF8A70DA05EB46E0C6D310366AC28D75C1F5C1583778878AE
7F5D01CB76292574BC018D63C03F217DE4EB6A8A90142546495B313719312F33
C3683789E48BC2D1BE0ABFEADA290262185301EBB2B65214E852B2419B38C41D
CCE1B2C2BFFEF5AF9BC742DA8EFC45D3F5CCB6CD6C3FE9E79883B0FC79B37BD8
98B868B5A084B4B5367D37343490E4230E7D1B4CDA798757DAC77A7BF1A50670
C54C07AF195CCBD410C02453E811D849EC5F0D6E226DA0ECA3C84B549F5746D5
B6E460AD337AC005F9591E378B0AB8C04E174CD1452E396985F8F279AC2439F2
B9679229A966231D693457AEC82B3B16BFB0F4E9675F78E9A5156BD7350A17BF
838037C712808F9D55ADAEDFA372349934F216F24BC6130728540C2E32883A00
E3090E95515E7CF1C5A79F7E3ADB51BAAD52F457A0716F88C1E724F2C3F97A47
B61DEA1F11A690A977717CC9078A0AE9AC7D56892F94967DDD97A8621D2B308E
2D4F6B6466C9761B42DFA6D7BE4E295E1AD9EAC713A0B87444FCBC7FD08C748F
DE079A4010D31B95825199DEAADFD0A4796599B8A60252C68A79AAFE4FB2C0E6
CD8EA239EBF615A421BC16CA594801EB46AC084DA2A82E0D5157215E951A801E
52B81805AB51B77C1DF48A7DDDDE131F2BD910285A5B29F3967EF5AB5FC90F56
4F272F7A92880E1D6F4AA5E94B0960D3AC3654D31C6CD4DD77DFFD9DEF7CE769
A79DA6CF034F25F0E683C942D8AACEB214A715E2867D28FBBE64777A450EE70C
E5B6C2ACF14FE91ED153C3E0E12BFE851FC6614291D8F877DB6D379BB15FFEF2
9778F3496450F26C4ABA08D35B8D4D4BA189B6DFC035C6A499F5469536003A02
45A85B5B5CD1A7D8C889828A4E4B9034D24399C3937B118A7366EA012DCE0E47
B39263D6F3A2EDC2E8F801533A73E64C40DDFF7A089AC2364143B054442A22FB
4F8D37F4023FE139CF157C0E31F36256A0193725BDEB7F7ADB884E4DB6F19A8E
0D030740FC9A6386A08909813F5700929A789521B19708DA4B1FE3D3D68BFE72
90F1919F1A458AE78FCD9BDEF4261BCACF7EF6B3DC7E8F28B0B4184AB592E5B9
D58E74AB2DB7B085B43D610AAFA01F1AE4F106EA2D0F9859C3626AC64ECE9AC1
96F66D79C0CC5A716C1219E9A3F2407ADFAC56A34C340F98EE4628E07CC757F3
34303C5949DE25B1D1CC9AD566C8AB957265D0D55DAD7434333BB1D9B2652B4C
DE3DF7C24B4B162F5DD53F501FC98D0CFBEB487D404A8BD494A21C7E55F4425E
2711E7293293F1882944A2145C35CB04E54CDCCEA61A1E5D903536E166475F78
E185667F094542A25A80DBAAEB0F2ACF468246FB1E90243888928D6CC7CCA467
E6DA771381C1E921B6862078DFFBDE77D34D37D92F51D8E296933D8B98A62302
A24740DC5068623B75635694FA7968EF430C122771D54D217A8413E7E02BAE49
9FCA36E44E496EA6B1993C1B581160D5E0C3188021D2748D90A55DCC903FE8A0
83AEBBEE3A12DE996BFED8883D1E162C5870E9A5970697204448E113C309ACD4
2F393FB4481669F111E8CA39C126FBFAD7BFFE37BFF90D7FCADA40092889ADB7
DEFAA1871E0AA30B4C7D4CAF5486D1FE429A10AEB425463C89AA97E596AB27A7
4DE9587B4398B1E208C695DCC58E679BA92E7CA79D76320175C515576832B53A
15D70323B405DE995216CEA41CF5EE0850225E2FBEF8225BD7A766758818A166
9B63C8D8C8B5833243DCC91C07D2486D0CE927DA1CD93521D8225CC1686D036C
B7DD767FF8C31F42E1915343BCDF7EFBCD9D3BF78C33CEE0A4D395124FDDB305
50F55E4A8864A35B83C8A1D75CD1892871EC3A82B20B69C82D944FF19BC47B99
A1CD8BF0CA98608098CF4B0EB70C7A1C621B27E9673915220FF1753E8838B34A
6D116D1BFB4C44189DEB51CC2F14C6AECDEA534F3D958C7EF1E1F172C09ED2EE
CB5FFEF2D1471F6D9FFCEC673F6B323914C48226F79003B80A3CA0727364913C
8F34CA58DB637DC4C046690E8D3D1B458D210F2CA78D7ABE92B99A29D0DA369B
5B6CBA911D78DBC73D3D5D2414F18347C2B01E1B21CBF6F5659DE8E0A8803BB3
4CAC87EB03D11E7AE5A7B51E01E65E01E752B2C2694C5BF02BBB700E93AEAF5B
CBA9CED21A61EA8EAC691B282C59FC92EDBC1797DA8E5ABD6EA05168FFB4F85F
9D58AE4D0A662949F5129ACE6F320401C251B565E3115364050B238123881269
CB3C5E1912D1153625266A25B6A369144D3C6C78279E78A289F8679F7D96548D
B00918988D48118EF84B628BD35D77DDF51DEF78876D2085A09564E2B9AEBFFE
FA430E3944D1721B891D6CDB31366C5C2EEA3DEC2B14987280F186ED52F69828
3636BD0259C2972AC129053F81E162E3BFF1C61B4DD37BEE7E76852A8C9513CD
C607C13118EEA5A0AE3793B3C8AECC4695321064837BD1854D5CC7B05192D4A1
CA0BEE21265C78192918C43A925A16036975E912CC0B5F3489AB4D79820A8AE4
C7F331B5A813E07CBC2299107D4AAEA98CA6773294091E6F3EC91A9829634302
9A00C20E3B00B3434B66CA83BDF1DEF7BEF7AB5FFD2ADB86487BE66A0A5453D4
88F4E0AAFD438CB0CF9BB1113DABA30D2CD8A682D84951AF65CF82FEB00DFFB6
B7BDEDC73FFE31BF11F446991A09509D08956F72658198686E06E52F90089288
724CD5FD42DCA2F6D37E79EEB9E77EEE739FB34D22F438599EEDB7DF1E183083
6F38E6760EE6FEFBEF7FE79D77DA49B49901CEEDAB01E12467A8DA3C024C904B
A2C5908D410C27427A7348F9BCEFC661573651BFFBEEBB9B57668F60AA614CA8
E3C406B40FB9639D60E072B23C8A5310EE12565CAD12650DB3DC267328A8F505
7EE9E8EA50F182D9D7C9415422376488C112D5708E1782C63E00BDA86B725FFB
25991772078418D5E92B4498AAEF434CCD216D635A5C13DA7C76951D77DCF181
071EC8BBD9B70E0365739833D994DE8E4D3699634768D2A49E22DB6A139A0BD3
E146DD5B2208E822D2B2BE3C067143DC381B599F45907A4601670E26AED5CDAA
EBA743267091FA6DB11F74A83EAA788D0CE61AA85E684FBB52D624B41596AE19
58B9A2DFFCE0356BD6D93F0BFFBED54A8CA8FDBC79F3EC2E8B162D02C0365E08
4E3113A0469E95C287B6B2080F5139938FA1E9E22C8CC82ED85EF65395062AC9
50C3106DA04AEC1F0C768CDA1EDB0AB63B6172082FE7457C8C18867E29690E1A
D9F693D9E6365433E2EC76175D7491B9E94AE23269A8840F7DE843B7DC720BF3
73EAA9A79E73CE3912CAC101F779091C94C5CA5108B44F38E1043339613B525E
5CCD71BD184582F891FB6C3D688B50A4C34BE00E7F48B8855999F3E7CF7FF0C1
07891D0930AC567DC131F860F0CABD333D01D275A38D365A53BCEC33662C2F59
B28467876928755CBB4C7816D92EB7DD765B9A766056DB4F1B83A931739290F8
BE55009B47B45921761445AEA94FAD0CAC50442CD3C864E9F71EA4135C24292A
CD6C2F31DB4DD7101E198A4D0928C1BE683366CEA52F4AE69A92B0369FB62115
D234C9FEFCF3CFA3A514046639E6CC99630F28BD6ED36B9FF73800BBE6DBDFFE
F69FFEF4A776404C2B784894E4B52F9065960061D97DCD1A48234F351B490693
3621DA3138306DE2CA407928CFBD901480D877BEF39D37DC700387D71EDF96CC
8C21FB69EE7556546129C1E9B303590431507744E037C4769CE4AD8E3CF248B3
B649C448B233786609DD9F1625B012F4D482936EA728DFFC7EEC7E6C2FCD8FEC
DAF65EC56C6FA5A21105B20FD4C7C94B3CC189EC2E471C71C497BEF4250A6F9A
B16F849F044EAE10DDB62554A82675EB956B18DD2F4744954A8A4F6C10E8115E
F9CA57DA010F31D18050F58524C42993B19A7950305692C38ADE87D1342049EC
C5043E8EF3DED2B950A752D48F6D65DBE5EF7FFF7B7FBF825DA314706735CC9E
BDE1461B6D3879726F778FC9C7DC16C893C4D544B123657F9BEEA5E01E0F3332
B0BE0CCECF9789A6305647846625F3093F450E3BD22005CC198BA9BB1113FB03
037966AB5964F1ECBF79C9C7DA3C04B46AD5EA75E6FFD6338FFF60DF28495E9F
B0D1F4EB5FFF7A3BF9CF3CF30CFFA4AB0167800320D759C1228C061C44A1E183
ABE255724282401D9EA99AC81C3ABF94AD6469F1A5C0BFBCF18D6FFCF5AF7FED
29E0FF95970804948DE35E36B1A79F7EFAF9E79F4FEC1AF985644735E2B20BEF
1A62050EC539369F6488F19E15EF42652229EC4F1E40A4FA5AAC10F9AC4CDDB7
BFFDED7BEFBDF7073FF881C9F45004BA61DD93FDEBE52F069074B6CC1AAC19F4
3783647791B43395F9C4134F48E6CAAEB26F61AE21B94CAFECB1C71E5B6EB9E5
C9279F6CC288A5C48A1291B289A1534E39E5539FFA9410DDD819BC9AAE3E3814
10DC57BFFAD5E6EED880F918C70AE9A9702E93C9844B197FFEF39F3FFEF8E3D9
0936ABB42EA88CEE23A9D67EEABE2EFA46A91CBBEC76DB6D67A3BDEDB6DB5826
05E224105920493D7B11C865A352F7A5EA2C148FC83A900F59AC5A66CF40D068
AF9D77DEF9D65B6F2D3587C7EDD006E35EE2B4625A88EE6A0B09356D1739E9A4
93CE3AEB2C948ADD82D39AC40265EDD51033359AD23476B82A118F53CE80FA91
54B51933AB14778DAF6FBAE9A6A681162E5C087D3FB2BE24F7C861A9D45E06A8
AC43822E9E423289642C21B6FB3DEAA8A32EBFFC724E0728934A41399E451E2E
4662932013503C3C1000F0C8FEE0D06FD166E3E69B6F7EF7BBDFCD39B5619C71
C619B6DB43C47F21737030A498054584018DEDEDF93815CD5646DF97448A7220
8C4EEA4BE871D265E1714D2595C7936FC4E4F041CD3DB8FAEAAB91D8C1557905
57C85E0A56EB9CA6E3D4C7370A0A6EA4AE4D2CA02D51737813BF156308D1604C
634F6962A4B977D8CA09D5A5804D50D452137693A74DDBC014F094BE49058A24
0F103592A14CF4D02D8ACA4253868AF2C1D216F9861B182E59162DAFB1A3E277
E7FA49777D616574E47E4CDA0A5EA180D90A69411B5D54360FE44B989941DA5C
B76EB048950D16145123C3C323E61FDB308BA1E6A9E5D455792B2C3FDE5A527C
493769337676DA692773F56C2B9862FED39FFE8449C8CE264B448B1E8FA1E5D8
64B1CA9BD8B2373389D18979C77603C594DE3AD15C111E81D03514290D24E0CB
F580316E5A34E0A15563D68C9D706CABD8D93BF7DC736D269165A67B7EF18B5F
4053D0702CF3363F3496C09CA7D088F914732F8C13F661B3157EF4A31F85C866
25372E44B2B0523F3E4C199B5EDBB736C3485854BB32581AB0771AECD6F6E61D
EF78C7CF7FFE7399EDDEF86846DE188F2A52098AAD97ADB8C917490AC54BED2E
ED9C97DE1345871109F4BE4E2997863CCACB1022B65C7F2585213DC11580F6A8
DD0D55DA7CC0A4ADFDC93499B4755A3039ECB7DF7EFFEB7FFD2FF15E790F4FA0
B0CCA5CC010A24B1CB90CD8967F1554105AD8DD86F00D7ED4F4A964BCE785813
D2D0FE5A62DC6565ED4FDB6EBBAD3903211AA932E0DA4B5785D90158D474443A
90BB49916B3E3592301A2EAE308FDE8418ED00830334FDD0430F25BA83B803CF
1C1C98119B46310F82643ED5E285BBFDC9BCE73BEEB803EBC1F612615B2DF715
575CF1E94F7FBA517479B26D4C5C04B3866D76C209279C73CE394A0A08FE6357
B60D6F1A9479C67157C01C3C9A3DBEA9673368ECCAF65C575D751545C6D89D8A
07900B5048438DC2E0B5368D6BE381D116E22A490312E104E7ECA7EDC06F7EF3
9B25CC816A567DD73FE5D715E49087806F60B297B6CD1EB3ADCFB7BFA8E682EF
93C7B159C29414E614435CA6FC78118B3056972D8D815497FDDEB370239FB190
5A89B01093C3F05653FD86A08BB764042D07B4803BE540CA9EDE2E34714F6F0E
13AF37D62AF8ECFDB3463D554853D22D5775F5310AE7C3E86CB11ECCC6611E36
8179F964AD4F666988054E14B411880E9D64629AA67D6D8B0E0C0C9A7458B9A2
7FC5329B0B53B4A170D2B322408DC01DF10752EF275060E45D749885F8C53436
214595910DE9B2CB2E3BF2C823CDB3B1FD77CC31C7D83F5FF7BAD7DD7DF7DDF2
7AD5B784CD4DD52F262A3C9198C0127CA5148517DFD89B4472A4AD5F96020EB1
DE2EC4E8289E87CD86C9057B04F0CF2FBCF082ED1CBA912386C450C173890857
721C8383F712FD2656AEBCF24ABBACD0BF64BED59655051869C158C40CD8FB4D
36D9C4E644C01351D5484C9038F7611FE4A01949F7DF7F3F3A003F8CCB021F43
3C29F927248BE40EF0510C7605C774CCCCA63EEEB8E3F0816C2798838E3B286B
4089F3768893ADA0274542CB82CE158567BD681AD88E8551359A5268E68DD990
6C4A7DBCC1FEF41FFFF11FBFFAD5AF828BCFDB17E92A9D396EA934F241DA1253
2FE48B83A551ECA7C9D3EF7FFFFB49AC7B31B9BCF7DE7B5F7FFDF504126D116D
0076051892597413D6B6B22529691B800A511BE18F7FFC63F31A4F3BED347B64
1B9BCD989F2566B2BD7A0D410CB80F472244FCA3A49ED9CA071C70C099679EE9
BDDE303AC2CC6F94430563983A3650FBEB6B5FFBDADFFFFEF79EDF74EEDCB9FB
EFBFFF97BFFC65EA06B93E4B89D694B8F0E21B396613A55669A96B3E08158FCE
7E524044E18984530943C4A6024EABAC00E50AE649C0EC55AF7AD59FFFFC67A6
4B649632FE880760C4D8EF15F8B1AF730BD5253303A645C0039BF1FDDDEF7E17
0E1966C026D9E6EAFDEF7FBF7DF7D24B2F35A56E0FAE3E19985FB63AF61B5153
790C87C78D7296858AF00914FFE2D9172C58F0B9CF7D4EA6D804C43E59A45E67
27D88473AE11DAE03DC528E957AA5DDE86B142E279C96B9A125156B4C6961ECB
49FBAA19BBA127AA4030414F635A10F0E623C67BF0DF98E24E8A946A4EC56C1A
A877C60C9BFF69DD3D5D211905C2928E1C1A6C30D1501363B3E708942CF85C66
E28823145E807932E2B1734CB3DDBCD1D29CEB15701649FF6D8DC1ECE5D9FEAE
4AD6647FDB56AE2F5BBAE2B9E75EC82B43D6C6CAA222375CC0AFEC0E9582B472
8C091D6F21D1BEB6C36CBA007F6254E2C272D8CE3AEBAC2F7CE10BEC3F7150D8
207DD3CD10ABD014BBE027D741A5B1B1C06DB607EDE510DB093CEFBCF34CC1CB
B19E00DCF4725F764A71C7652CFB3FF14452C0215A75DB6FBFFDE38F3FCE493E
FEF8E3CF3EFB6C1B391D1571769302020A853DC1F910ED478482FD129FD8A60E
43A411FB80FA64957D52ADD7912FA170A454704CD896B15562A340DC23FC33D4
3F72C40343A478503690E010D9A333BC5D81089ECDC375D75D77E0810702E593
CB4E20441D0629A32F75B70C2EE46337DA7CF3CD09ADEB198543E16489CF2F73
B567F69EC0ACD7EECC332605740A3E0D1F22E5E17BDEF39EFBEEBB0F73417FB2
DFDB98F19869EC487C952DAAF4215D92582CDC4D750E26CD2CF40D336FA7E3E0
830FBEE1861B2064B52BDB5651F35AB143D8B06913A4DD8E97E911005227186D
E60F816D96F21065269BD3831F2B8E7C3F38678032399B40206FC418D07C843A
D9878A6D602233A58ADF725FDC65559EC8E0D3CC4BD69169F20B9A14C05A946E
163B4495309BE8574C2E0F192154E03B04F3524181AC01E5CBD5B75116864FBE
DA95ED03D2DFFC12698632A6DB1561E71271AC599C2046EDF304AE45DD9339E4
23BA435E8D6D21FBBCED37A60E9A5BF8DAF4EC04EAA4D8144701E33DA61C235A
2611CD2FD972A10D9AE31DEB314F6BFBCB06A06F116FA39681E9B215B435F54D
A31345E76C066DFA6836596CD091B8C5991ADBA631101DCD6E53F6D3674CDD70
C39939915B18D186A6ED792CA0AC01F88468142FA4406A8C08A895C52AC96249
1C202B649534A472FFABA150E48DA1415330EB9999F578705620BEBBBA7B8B8B
A405EFD51A33604D012F5FDE6FD6706140648DBA14709A77224E47316928333C
9E07D9FE7BEA4600D401D7B4C744736013007D14BF15671500C2C73FFEF16F7D
EB5B2620D88EE61FFFEE77BF83360525817B4DA54A2944CF4F733B162D5AC459
B5BD6B23C79B6C17F413BFD2364A0AC926F9DFF8EB3624240B7FF5657CE4026C
AB0143204F66A2D63E4F731EFBBA4A298223DFB6AFA850C4E30643115778EEB9
E7A06F84C988425E8FAAC0E927D90C1EF8C9279F24362EE1624B80A2F5D87278
19155C51F445A14E0FE622A7AB5610DC1DE80077B7B5C040C100B2E932B168DF
FAC8473E72DB6DB7D9537844777B6EC926D65CC0DB6FBF9D8067A5E8EA233C48
88092AAE8040F4A056AD827D0C29E323C0AC057D2A7D01A832EE6AB1A075DF6E
BBEDA85952CB4BFE8AFD04569902127B4C5F6B415D32AAC5A68E421A6176BC3A
11579ABDB1A3CAEF4D1CB1285CCD3C4B9BC0E078B0B30894F5194D6D63958779
64195A592B1B1CAC4673DBEA945E482E7B04F3C2CF3FFF7C22C3EA0B821EB5AB
D9956D905C0AC906BE173FE4139FF8C4C5175FEC938B5E70FBD8A6083B89D84B
F1F308341846DFDBF1B13B0ACC0F1097F467335259B1B254481230F755EFF2CC
A462D107045D406FD99CDB46B5EFAAA74B7054EAB6A58F3DF6D86F7EF39B9889
A65CCD0155B911F3633B814889D8BB84CC80798649F391D12C968AE0C4B34C9C
774F0022E3D27E9A89BFEBAEBB7EFBDBDF0E45055788141FE3C96DAD2F163FA5
74DC88A9B3676FC4AEE4E3B57A0B0EB3565A4DFC5A41F9EC594C70D9E6D9638F
3D4CA4D386D9FE4446DF76789238CA6FEDE022E1311C194352ED8FA25F6FB163
0A9A1AFBEF94BE2E3BBAD3A74FEDEAEC40A8519BC436A21481B92640810B5548
930121B63257625BAD76685B56121A00B71E0F1C5611FA6B983D5098C6EB1953
316D7815E5C19D454CACB966CDBAA52F2D37D1D0DFBFDA5CFDCEEE5AA17DF37B
E6B1ED8C4318EC4A3EBEAFF18C57A74BCC870C963DAC9D0ABABEDB64FA40134D
94C9531256223D060DA43029443C7C2D075862DB22361E53CF175C7041281AC4
7200DA5F364E629B66E49A0233CF7BC18205614240E0C4AFF6E86856346CB0F3
831F809925971489E367CCC6BC70E142B8603EFCE10F5F7BEDB57803975C72C9
273FF949D35276AE4A78199B96BDF6DAEBA69B6E422F9AD7629FBCF1C61B012B
726C4C0A985D92BAD655282AA9C310191B6CEB9B0500705775C992FB6AAF64BF
D97DF7DD81D4122AC48D5025A576828A64281C40B553E802E008D16397050309
0F1F2639C60AC518DC42C237713542FC64293D20001B8E9023FB8461F045F925
B64084793D7E5E44B30874102EC430EDFAC2ADC8CD521B28C5DEF138510F892B
7964263DB28C44A9C904B283CADFF314B639EDB9487899B87CE73BDF79F3CD37
B3E1A926B08B1C70C001BFF8C52FD0EBCABF6213085491C50E8FA20AF1B064C1
9B797C362A8F961614AA3466F767470637A96EAA7DCE38E38CB3CF3E1B2FCD06
6C7BD516CE0620F7C5FBC1EA44E2FF0A1E1EA1DFEEBFFA176B617365EAC4E483
0D4F04D4BEE0DB3E435E962A8C8AEBE384A202BB247B42E101A4073A554574CA
7F338DBE97868AF5D96C5E5ED9DEDE79E79D7FF8C31F86982FE776360F76F1AB
AEBAEAB0C30EA3DC80FBDA81B5FB8AC68BCCB440E6A252514510032662E15D52
54956AF994E8C5ED9695A38A9EF1C41A9601D16FB07B1C649BC0CF7EF6B3266C
43B46BBD03E63137A533EB15B0A49F2DD07BDEF39E9FFDEC673821ECCF6F7CE3
1B871E7A688831F0DC42AD14FD196C6FB1CC36B991D2368D11F95689240AD8EE
98B34D55024646A56A677E839933A7CF9EB521D61FC80EFC831C80D351F56548
42639A3FCC03341DAB597148BA3557D59CD66A0C1C56336B16A640254D6C6D06
1B8DF5C90380D0B9D3B0D636506E9EAF58B16AD9D2156BD742789B7BBC76B166
83F9CADB05C77B8F88C526B80623E32DA4DDE588238EB0DD26878C8C0B014C90
470A03A8E64F85BC92987C91DACD1049307031C59080103187D834EB984E79B4
5D5ACD0DF135A9F093867B597A5791312D19E0520F7915464CB023442DFF6487
09926A9208D22E3E23708D6A16259E7C55836615FDA1805E7078252D194A9791
331E7D589DDBE5DD8A5389EF528529A52E7B5CC03129E04F7DEA53B7DE7AEBC3
0F3F8C38F0781F58176C5AEC0A0832E5CCF6DB6F3F33237088017B338DED564E
88CD12E4E7E1EB0B9E8A860027E24B62E4FD0797A64D6203738FEA147A96A946
EC0AB149741D7D6FEFA91DB2BD07375C88E10AC50314AED76CAB45A61A26DA4D
C1556933D87D3DD597E706525709FB005EA0FD52BAA79D1D53E10A1BC06B5FFB
DA7BEFBD175249EAAFD80CF68CE2E64B2371BAE6DC6356B4229A55BB94A79F43
436491123589E5187947B83445D9A8B342A99255B68E6CAFE0821F4CA0A94925
E3D5D19DEE9649AC02506B3F6C3E7B4FA843AEB90E2CCA15A495D688585D1AFB
FA218E783A0FC6F6EC8CC125986C36ECBD3DA6E20AF8548A48D9153802285D29
1B751C97BC4A62597C1A499BB1E36D058F39E618B389CDD4861F9458A96077D8
CD6203D5A3297A3A01AF80A790E397F42F11690949681F0C2B29DAF633AB0FE0
73B2D9D836C48138117859F0A0B592FAB2837C70DF73797B1BA408103D67B669
1101B63FA59A8B8D379E69BB7CEAD4BE028E38D2E2C0CC1A69522B309205FE30
C96251921D8CAA4F78ACDF884D3D6156C943C3EB5157692D6D1D12539B694E52
6D9BBFB87E43AD0FA5CE878603764071125AD5C0F9D7B3DAD80B1346FC5C9722
B1A5E01E6BEF43E8449289166AF77B85E4494842589FFF662FD65D673A5503DB
4FF363ECF7B832E79D77DEA73FFDE9127996468B465447EEF5398697E9014BB0
0AA2E2F56BC17D3684A565A6E2E73EF739EF3AA8906082DC33AE8F2D8ABD3129
4C0702CD21AC5EE0C36D36F4380AAA6BFE15E9120819B39A588B3A8265AEAF40
651CD27CE6931C2463C0F6C2995368DD03AA1137541FF208A180ECE12C4A1C90
A3A2450487889EED61C21C92D0D4B68B10796A8A056CE4D4534FBDF0C20BD1D3
2225104E0D914DC48FB8B4D4B096B5E4706791BA35B4A1EB85CC170745180D5F
30690B6B29814D650D60C6C614207469B74641EA7154392DD09FCE946F148859
2005994482555574806AB19FFBEFBFBF7966F5A2E5705670AF82FD963B185C8F
3CFBA72A70148154685ADB2689556DBEBE2338DE120F2317D39F1A24A7A31B98
A69175CE5B7B3225D3D86C83DA56B4B8DFB73E6C1EA2C92BED28BCB16FB0A16C
8B6FDBEC5947A4B6050C66545A4AAE40969D304C12A9A96040CB754757230C85
1E93F759B31A2AC3B5CA407338E99B942D4FFB66D6562D5F3663EAA4D34E3AF7
539F3ABDBBD36ED1FF9DAFDFF6EEC3DE631EDC7062DE50DEF3A7AB6FCA60FFCA
6DE66DBBE8C927F2204D77EFE0F0406834AB1D791674686804BB4D2BAE6C2619
10494E848FE659263E07368B14C2020C1E7CF0C1175D7451E65E25CD2A6B490A
AB14B262964AAD4291C010B00037E1F864115FDD22C6508905000185BF4384C2
722492A22ADFFCE3871F7EA8B0595AE02CDED8C766CC98628B6A523527E8C895
44CB33181EA61A38BF71A3C537D042D546E68D544F9E7F6E845CAC8D32A9A6EB
E1E6C560D737F9893C0669AD6ABB275094C9C599EEC1A14069A93D4D5228F262
B2EC72632BE0245DDFB52938262015A50181D1D125BFE281AC3C0E1B82924476
B92AADE556EA08F9AF03D38710982367D281F085ADA26D2F5F8A9AB4B58D3BFD
F4D3617B5795A7E2752F4B01A7B18152EAF8296D596D67D33F0ED483B72D349E
2C12E095EC15FF12ED833D1181D6E0E20DB66BCF3DF7DC638F3D964D6C827BC9
92254C29830186CDFC60A6C852F4BE91C0A5BEB6B5747292081A07664C56DB7E
5E79E595471D7594B748E40D207C1158E2F14022C8FF538ECD56FFB0C30EBBFA
EAABC9D19226E7A0A94541FB6BF6ECD9A6AB98A5D34E3BEDB2CB2EB3BBA38FAB
B1C19C1D431BA7BD27F24F34D20757B838A6B7502AEC07796FFFA202AEB83E6E
C41889A8DBEF15A8B8E28A2B4E3EF964DB9F0AB92BE4036A01E340D95C4DAC37
C14759E14572179791C5B53BA2564BA0E510A379CC18918CE052DA89AB7594ED
953ABEF4E07C7784A62F49C24B43D964AEC423712F5D2A718DCC4384777975EE
77A97ABC6352436082A42D7DC533BEE94104E5B307B7614BFB1290DB70C30D6D
ADC7CC837A081E05668C248B746FEAD0C79E978BAC58172073269C22EFBC7DF8
E4AEFACAB5265B67CCDEE8D9975E08B5EAB49E298379295D6856928146164C2D
6F34B3B172D9EB8F38B4D15159D66C6C336B931F7CE9ABD9532F7666CD49DD3D
CB06D685AE70DEE9679FF599B34D09B0C6B9095B4BF37C653DA38C028A31EC0C
1D43827F9EBF2C8CEE9BA2ECB5EC1E0278A8120C6B1F8EF5389B64342CD7BF84
FE6BB8A66A20426C8AEC9C3EF5D453D274F5D8D042B5B8B94E538CC86B0206D1
700DAE15D32F7C59CECFFA6D9A2F582DAFCDB01B4F9ADC03272DACCE0AD19866
CF838023431C45AC6099BDBAD7F0D048B10B4367AD9AA449BDD16CC472C9E1E1
C1E22B26DFABDAFD69566D64AD4A27D0F9E4F04D09FAE3AAA29AAC59195BF154
9AD9E8466649ECE2D78CEC2D8A08D5638FE5F6E5F1D8109FB2F21FE6E5D50059
4C657D64C9D23A4D7160D15F346307723D1D8C6892890AE4BE5C052C0F8C1963
609C529B13DBB5E4C0986A7FC215D36359C7EB6E645F79F39BDF7CF7DD7763DF
1C71C41137DE7823F623C13D799C401398670819EC2B471F7D341D4C914120DA
280A22B62630A78E873C8C3143F77653CA2A300B50E7E2C81410CCDE7098E9A9
2CF908F30071C5DD76DBCD7C682A9B290144A04B7742F183BD3B9E8192C492EE
D04679E145A7EFA5A1D8A08C3F05156D7E8E3BEEB86F7DEB5BA6B001BB6A7ABD
B13F41A88DAB292842B1AF3EC07110B98418DC184CA9E781CDC6BBDEF5AE9B6F
BE99002000570FA8E18EDA48240BD1BB72E644532C926D2F5B0F39E4906F7CE3
1B1852AC9442BEFE79B99A690E35000E4508E4C4134F34E36F4C05AC4196A608
F559CA5CF8B503012376B0AA6B35E6593FF9A72C271C213C7BC922A185E58293
BBC57C014A02B60E7032EBA256692236B1E7B529B29D80BF086AAC11FBAEAAE2
967A219B5EFB241B924270F0165A5F463EADBBA7122A238D64B53D6B73A86F93
D9FFBEF5768FDCF5BB473AFBCD337EC3BEEF1EEE489F5AF38FE9F3371AEE9CB2
626DBAF9B49E8EAE4E9B9BE9DD3D3BCDDDF2AC033E1806C2F4109667E641D69A
F958AA23F566489A23F522719EB5CACF6CF03058C9754405AAADA7AFB092F12D
66053B8FA2BA33E39E0201CF8ADA1C4DC298B67160F14FF238AA7760CEC173A9
320D6FCD5755F940484B012BAB47A84ADE262B27D156F2C44B098CA4480EDB1D
BBBAF25633BDBDB90EAED65A840985FCAA14CB5620B30A0AE88E5AA7E876F16F
6204C6FEDAACA62D4AAC46C1EC4C70D964BEC9F642FBBABE34F5B4D16C39C4F6
8436B3F63805D8643D03781A29B927C8E9DA89ABB4B522978EA48B803047A246
2ACD830496ED549B3DD364CF3DF71C89522FECBC5E244A29E8D6BC79F3A05C47
0D43C8C507ECCC98432C90453ABA2393A0ECA64EB0FD51841374B319F345DAD8
C71B43B49AC5F46BE608B05E542372C1F3F6C9096B7FD95037DE786320AF36AB
6F7DEB5BBFFBDDEF7A4312F345009F1033B8286C30846941BD49B565A9B72042
C76E61BE75121BC56353CA23D1CA0AD04476193FD216D73CE0EBAFBFDE5604EA
0066525D987846F53B0A317D03CA3714BEA61D19D26C9202596C27DC8C24BD63
CE8F7281041B6C0B714D5EBEA64519D33476C3F4C7538000A0379ED7C9DFEB9F
2A60B690DDEBB6DB6E7BFBDBDFCE05495286D1E5F22267F541239AF161004106
EE294BE99D558AFBC95DE037AABCE289D42348181950BEE4BCB7DD76DB871E7A
8819566CC61F523D970A6D094EA8EEB3E288C1834B30B71BD09A6A1F53F1DAB1
1929BA3C7B9D32D0D2C4D0E7A9005D5B3414C14C447968234AF431649FCE9C3B
77EEC2850B0F3BECB0E02AEB3CDC9DB161646311A2809955AFAE7C1CCB16EBAA
ABAEFAE0073FE8EB00E56BBEEE75AFFBEBEF7E3718D2465A0DB5CE69937A562C
5BD231250C6561DA47A75586B7187A69C6D4297D49BAB4D659EFE99D1B1AB37B
36CE66D8CAA5D52D66CD7EE68945DBEFB05D3D6B4C99D677ECCEEF0A45738024
87C7A69326F7AE59B7DA26AF6F72EB1989BD7134B0E150C37616480041C94201
3A781A24C6A9A79E7ACA29A768D39AE96F92870ED682919614B09F31BFB2EC4F
2681CC97AC43DF2B2944D23D84B6871AAC3FAA36ACBBEEBAEBCF7FFEB30A1F05
82F04AC8D6D2A69B07CE46935FB74E0E034DD2AEEE3C943A6952AB1CA8D11C06
265AAF0F179AA3A502C5F38EE787A157086253A749E16E55BC4962FEADFDAB98
88AC2888229C9BD64742A3DE323CE12800FFD5D5350DDC4DEEF3A6AD244A81DE
1AAFACA841DE05FBCE477A33C78D2ED21255799656CBFFD39791A56D6C6A5E10
B0E3CD28DB61871DEEBFFF7EFB96487F54041246E7E9894141B39C147D93E03C
BBF4D24B8F3FFE78883E2AE3775B1AEF5512C144C24DA3B3DBEC789B62838902
E397274A63AB1FCF5933E6F5F9AB882908A379026115F58642F5DA67A8BF22D7
08CA9F9DBDF7DE7BDF72CB2DF6495309B6CBA1F2A61EE32D6F79CBCF7EF633C0
0E6941CE6CB7F329C01272CAC6C3D8582F556580A0A6ADFA473FFAD19FFCE427
D017DB3FF7DD77DF7BEEB9C74688CB8B2CA67294007B88F809102B7626E9C167
D7DC679F7DBEFFFDEF8F393FE4D74991EA973882A457D881044292827F1876A1
50C47EB543580E52749B6FBEF94E3BED74EFBDF79AC93F5E659D4E7A2904DD8C
5D6888851C73CC31B6C1BCA964BB4EA904DCAC50040F422C2E329BD2561033D4
86F7C52F7EF197BFFCE54F7FFA53BB9AAF522DE9365B448A7A49F46EB6D96676
3AE0AEC1E7C3F2B035B2C7B719B6C32278A017D36316D485E8E07A72153B41F6
5E9C8032D74A31C9923AF7D7F7AEB337F27C5936DA8EEC9E0C47FB89FEE08DAE
96C6E67DA51CB0DE3763C70B3B08B63F159CB00D6397B519983D7BB62D7A1671
A069410D864CB3893DE38C33CE3AEB2CA90DE526D9B740F6BA8BD715575CF1A3
1FFDC8AC52322CB6DF4C1768843970FDD6EFADAA64C9B469D94BABA685916A2D
BCB87998FA5F5BAF98F94858B6D194F4B58D978666F6D67B6ACD55CB9AF3B778
5D6DFA70A837B6DBEA15AB57AD9CBBF9C6B59E8EA5FDCB67CD9DFDBA35BDFFF9
FABDCD699E3D6BCE92C5797ABEABD78637541F6E6883113EE14951B7C445BC02
B6C12B0A281B9D20813DBB6D3CE14081AF0B4234A6026E3F2CB65B80E608BEBE
C71E7B7CE73BDFF1568BF02249EC505912FEF97B99C6648C88C9E0E5D05F2C14
F1CCD7BCE63536CADFFEF6B745F5D17A240BF2C23E33B86E289256A6E6F1DA5C
7476D50AF7B73A69720FC016536485C39716FB6C089589F195451C53A14EB24A
D5ECD04449971C5F3E3498A42DCF9D3D5DADD6466C55B2DAE0E030E020320470
7BD43ABA25D395AA29C63C51BF5ED03DA4E8F896180F4AFD5EC4645B9A53DFBC
1A9213B2F4CC64BB87214BBC5A74E736516E42079F869D94148910FA6C9C79E6
9966DE42FD81CE93B42590227D2F8EFBF13CD1F15E9011B223893D927A21D268
278D1A21CABDA01E64457C7C3EB4D9257AA94F30351BF4ACB6F7C403A92411A4
880D40B0C8BCD2AF7CE52BA2B5B237C07C42F4363CEC76B7DD76BBEFBEFB2014
F33D53992B1C74254D453E67BFB77B513E64BF34AD69DB9E267158DC8416C4C8
8173ECB30F448C485E82C5E5A9FFFDDFFFDDCC5CB6C7E1871F7EDD75D78D5791
A2798390D2CE3975B102527927D8071BC9D1A6AEBD202DEA4C2DC91F3DF0C003
4D524FB0FAEDFBF3C20B2F3CEFBCF3420CD598D0D973CF3D7FFCE31FE3927AD7
8A4996299CB491DC89C59388BA7D80404568536C7CD1F38FDA5F4DCD433A8889
ACAEF5204BD128C4B4D91E0451C5EF1D5C8818D301792D495D89A4F9AA870931
15E583CCC129D7D28C79235B364A492B4BC389BAC713F0F98DEAB154DE64D478
70DA2809E3A42847E09BE9B68889924449348C637BF6934F3EF9820B2E50BB0E
0D4F096F6F19DBFCDB2C017750AC48A8FEB4D95831B02E24956E930443EB4EFA
EF636E5A7ED743230F876A7D5AD72603CF4E9F5E9B9B349A0383FDAF7CD52E4F
3DBB748B9EDECDB79F5F9F540B1D61A319D366556AE9D2551B764D1A1A5EDD5B
EB7BCF1E0787E1D0D3D5D7D3DDB57479DE1BB7566DF55D0DCEB1B1FD639AB811
3B384901DBB3C0E775F1C5179F70C20912DD343F55CFA210E3432233680F4157
5DD3F1C668E2585E37DF7CF341071DC4A133E961A7159F9B332BBEA0F51AB704
A2263A078196C4901406084FA0E4F62AEC8E54FB18EE0B2CB855CB5717DC56B0
74340A5D996F9D0DA6F6DAF24C9ED28B67607A19B354802F7C269D10138C2375
B3706D18A966A4385179F429E4DC96B6ABF21E83495A5DB674952D8D3DA4899E
8266CB3FD9284375CC872F891E52803E21DD8C8DCFA8D4022BE1AB59DAD72373
BC1002E04D705F215094000EB1711EBC6EB431911E25D1E8AB81D3D81211F396
9815C1C9F640C53F7D65B1C5106BC45EBFE69A6BCCBE26A4615361EA50E52E12
2E58CD7217C6CB712A6169DBC9BE4E188D8DCE1D4D229C72CA29F0FC8518C3B1
0F20BEC904632409EE0FD8956487DAD5B1582176FA5499134FA1A497FDD526D9
94AE28E1B6D8620BDAAE0968C64182178559A5A297F532F16D7B8384597B79BE
5EB0F3C422F871EB41519948D5F6BFB2A35A247671B7C0A217221C8CD4383E01
57DB72CB2D4DCAB0C3C723D81BEFB0A866C9D789D9F37AC22073556D436AE7DB
20BFFDED6FEFBFFFFE22E1328D4B448EF1D0DAEBC8238FFCFCE73FEFEFE543B8
A8223383AA45DF5C7930BC11CB412882AEF444C13441BB0B80938EDF96515958
15CE016BF0C91DD5C68C67507A65ACF0BE42D3DC516E80B833C5B311224CDAAC
49B15E53AE0D61538851710FC2C21F50FC001985B424344552D3B3BF955E083A
CC74A59CB57B99347145D919B4AD8B3340E911B107404C2D43A127CDD636CC07
AE4DE91A48D6CD3E78B3C5B5A77AB7E94907D70DBC18FA1AF3B355B38656756E
BAF996D529E1C515CF6FB0D1E65B6D323759D1BFC32673D391E18DE6CCECEAEB
AE757765FD4BEB6BB223FEEB0369B33B5BDBB4A9EFEEAA0E0C0FD035DE1EF323
1FF9C895575EF98A57BCC2C6463B4885C4993AB2AD0236098EA7EC214AD19E17
59449F6696BE1D8445A22D8B0D51B4979A9177019966D3487E1D53E6A4934E32
DDAFE4BD6844FD0E6FED1FB54C61216D49C0F27098CD40B0ABDBE151266C6868
7DAA000791D51A1EAA2721F751A935321D9C141B3E24F569D3FA6C2DBBBA490F
770BB7568FAFE6A817DDE26C8775DB50F940BE272A66062543C359A3DE2C9252
3DBD3D93162F5EB27CF90A7F3A24529AD9186D502756C0FE9F5E929A17327FFE
FC3FFDE94F086215F9B51F695EBE1512ABEE3B15B6DF517ADAD602C942F671C7
1D77FCDDEF7E871DCA8CD99FD0169C01D65B6BA7F0AC8EC7C48F3CDE3C5C71C5
15C71C738C0DC6060693303EBD4C72C86288F3E0D17A018449319EE79D152516
14B612E1871B5D596415D2F8541F7B268B8D399B05A5C3A38F3EBAE9A69BD28F
2114211C7219180D76F0EC7C52964DAB3B215C50C02A0645A5D921312D25FE0A
22403033DB339A56B6DB115345F49BC47CE49147F0B174D2C4F8EF05DCBC79F3
EC2276027D87D7F10C238C2DEC5A1CE89D76DAE990430E3167C5D32368E7D823
ECBBEFBEB7DD769B3C4B8FE915717F895FD3EB8FF14E41491D125717BFB73683
020F187F3ED94CB342219ED4BF41856726C24827FB13CACBD4BC094795818167
54F9994DB21D0480081FF8C0074CDFDB8755C7816C8153C987A93CFA54E0530E
940DCFCC083AF2CA89F70A6F3C835BE1E5ACAD4045674115FF6847619889B4A1
3BDFFFFEF7DF72CB2DB63D00CAA16231B37CBDAC5F14AC19F6987779ED50983D
0478B0191B1ACA0605B346F8C1DEA0B39B058585C0E18A2D07574FCC0935E1B0
60C102DC68BB3B7D17729FA4239BDB3975A47FF5E25A3D7DEF2BB29DD36CE9A3
3D4958D71572FCF38AA91B365F952D9B3973DAC6C3D9928EDE351B5736DF7AA7
ED473AC2485A9F31B36FEECC19EB96BC64C6F2E4BE505FD9ACACAA1DB9CFE195
D06D267912EAB58E64A4DE527B8009F0F2E1982B79C088087C48854918AD2FC4
5227158C3C61114ACAC26B4D1FEF645955AC4FA0541DBA94B017DDA6BF943FFB
491251CADA737C8D7D4C29AAFDE42015018AB10577ADDA393C526882A4C0E615
EF3B6A1D8D6C9DE96824941D4E130A787B401C29F6B7C306248F246E4747FE00
D54A6ADABAF07DEB45ABA26A7FFFC0AA556BE7CCC9F78D6DBE79F35EF1D0430F
8DE928FC1FBC34EFA5394564B089853BE524F83CB1A2FC7483808F934F565C87
9F51F35EBC4CBB9B641114AEBDDA122405C7A0123B87C3BF2A03D9E3D855D5C7
17C753C00AAA4B2B30063631B06A3228769E3FF8C10F9A41671F3EF1C413CDFC
C409268C86C78336E5B2BBEEBAEBFDF7DF3FDE7D059512598736F4789F17E88C
502AC2C2971CE83A26A6291D16F3112753360ADD48DEF8C637DE73CF3DB808E0
B9049A10A9A1348AE753947300E883EC80246309DE95444C2F7737B16553C77E
E0A6B215283150F6D163A9549FA38882B2BC624C436A344713DA78A73FC46C48
A98AD77F20379C43143D212A92A2704F3E59285C4F405821721A20C53C6F7089
83A5A77881ECB327C597F2755CA517E7E2C0030FFCF5AF7F6DF684886C052667
F3C8CEA0274FE958AD974B9118526BADDA56CC629926E6915F7DF5D50C5B255B
253B52A1FEE88DAC8F6478562C668C5BAB29B25D19222DDA178AA0232BDA1E6C
BDF5D6344B16978ED96D8F3FFE38996C09F110553E1B2F8D9D18EC5BA79F7EFA
45175DA49647FEF3B9164FEB23C355DBD4492D87351CB7E08C85E79F1D92C1E0
B080FEC4D6C386695835654AEFAAFEA15E734C2BABD7AE1D9A317DF3A54BFF21
90B9197C30A0E5D6D5DAA1DE9175760827BDE5D56BFA7AABC9B28E8D9E5A3777
6DD7CA4D87EA4F4F9E1DFA5F0AE99A2D77AD7D28D4FF3ADC59CB7AA6FCFB6B77
EC6FACDB6C5A7767DA19A65437087D8B963CD7D1B1F90BD5955B0F0D0D86D5BD
2B87CE3FE0C465496D5A63D2CA7495300AA97BD9E49C7FFEF9679F7DB65960D7
5D77DDD1471F2D2A72927A741FB229BAE4924BECAF1834EDFACED49CED6AFB3C
0C16FF545F94D4B37F93B9977E3F1EE83291FE508C3B89B4B79241E44BEC3785
9C1D1B5C53B42C0A93274D5EBD2657241BF46DB072D5CA6AA55A6F0E02C731CD
6D9A18563920B5403DA947426EB22F617B1F1919EEE9EE1A1ACE037D8D7AA3E8
E51CFAFB57637A40988E39F94F27EB5F7965059CD2AE46997916C1A8218680C8
9120717CB8268C469612FAE33D17A40DF59852C65EE6D9D8B1B78B9B60626763
A9601D8B23F78B5FFCE209279CA0442FE59550AB84D1AC3D7406C42098D8E397
5F4E51077E9BEC5F40BF5C4703B36D2A361C98EEE9DA86976FCF6E633325FD85
2F7C618232A410D3A854A973FDF148CFD9129AC0D4358AB1A9B0918BAAC23364
119525C4E4C528A2CABC67BA0E884F67EFBDF7BEE38E3BEC4FBED6D9EE45031F
E69C4112AF431BD90C1C70C00177DD7517868E57C08943B9E3CB2A9D56EA85A0
4475188D09F2275923F7F5CD22080B31465AF25F4D8B10A353730EA2B504C333
D7F927F7BAD6AC6D0F14E57A3DE43176C06536365827D570C6DF91CDC39E5476
C066F5BFFEEBBFF419242333C93054691646E3BF48FAF0E098BF883066AFA4ED
D8F0A14D0E86D8DB987E79219615A189436CB56BF7B27DD22858BBC90A370BFE
321B00F12754A927EBF5156E25B6165513612A69C0606BA8DC053869F360CAB8
E4555F76D965679C7106AD2FC82C94123D214A7381E388454179ADEC8CFDC404
E7B2937B9235EBAA7923B8247FF0D9B3E62E59F242DF0661E59AF131228554DB
A037D97FBF03AFBBFEE68E8E504B27177DD687A02539E8A083BEF39DEFD8FCE4
735BA9551B23595FD2B1FB2E03BD5392FABA8E0D960CCD5C12BAD656926A63B0
1ED2EADC74EF19E9E3C32BF6686CB4E495DD1B76CC9DF3DABEDAD2B46FFE567D
9567BA1E6C2EDE38DB70D9DAC56B3A86BB4706935A36A7A3EFA83D3F62666165
A496A50D9FCB17A782DA5DDB22DAF3DA8CC12AA846C5583F440AD5DF2C1DDD88
C95EA69B6FBAE9265B0E3FB77C7D4C09E673BA3E81C2D74B6B3A510A32C4A09F
D21E1273B61DF7DF7F7F530FD88366EFD8B61818183B7DD5DD95B7801E1C1AAC
A4C5D9181C30ED9B4717FB97D9DE5394D88C0FE2CC66CE926C9D3367F6F3CF2F
9E3CD9CEED5AF31E8949873CD5B4C18A15AB0ACAC9504CB81DC261748C48E183
030DFE5FBE32C7F106EAC7438E358F447508D784D17581ACAB398BF7DE7BAF99
AE726415476D5F3FFB493FCBE078747598792F075AC7C9B4E0273EF18933CF3C
33440A8534F2F80810A45462A91D8A7F5E99E104B7919B1886CA5A29062BD621
2AB254B05BF2BF559B345ECE8C08929DD8128869024F3D4485C4BDB2D8C55DE1
77E036B0CFD81C02B805F9ACBEF7728245ED145CF996DCB5127720B2D21336D9
5F4176E82B80683C1D923F814287C9DA0845D214AE505F4B5DAAC5D249F48153
4A2FC2E82A177906A5BDCA07609CA74648D2CA7E6F7EC369A79D662A19D73F67
7D1D2B825AED589F47B461DBC251E06EE3E798508E8293C1CE9113096DB8FC6C
B117915FC4D5D0BC95C69F4554261F109A41D0741E10554AEBC93056449D1C19
A664899955AD73EDFDC2850BAFB8E28AE79E7B4E9BC15339DA674E39E5143382
D93684FA6D83C13AC0C084480A11B88045A2FE4B0496381DF6F3DA6BAFFDD087
3E84CAA40F182903A5307DD042FB5FD9193F481E47667470E970332CC0730C0F
0D4DEA996E327EDDD0CA4993AAABFBC3A4DE49AB0756D62A7D7EFEFDBECDC2DA
5A47B53932A9911FCFB5D5B4526F7475760D6BD5881B4113DDD1D93B34D23F7D
874DD76EBEE9BA7472B2B66146EC48F7CAF0AAC7A775F7AD5AB2A6A33AB577A4
A3F252DF06B366BD944C7AC586D3779A3965F20EAF9FD978361B9CB76AC6F29E
7F6CF08FE6D25DBAD68E0C0EAF99DA1386C2F0EA91A15543177CE0E49EBE4983
CBD7B5C7F69358874D6C0C4B5DD54130C308B12867A63D142CF9C93FEDF3543A
B4A3E87D84298CC62EB487978373B4C6F58043183B57CA7B65B035D0F1046B6F
EFE43DF7DCD3BC01AA924D3EBEF6B5AFFDCD6F7EE3C3B66134C7B21D519B23F6
B45AE52862A3A3CBC17EDFFB0EFEDEF7BE77F0C107FFE8473FB2556760138CE7
E5BE688B66B7C6DEC7C72DA15D24EF044192640C110A41CD891791102B365D2D
BF263944C10DA097B0924D8B1D1B55B921AD5EF18A57DC7FFFFD4825BB853D7B
896D40E561D75F7FBD5973EADC379E62C3F027D94CDF43DB7038D6C020354254
2FA11111E2EBCCA3EAEC373480C25901573CE67DB3D10CC6364B62679CE0E571
CE3EAF661731B1057BB93DC881071EF8B5AF7D2DEFCD9524FFF66FFFF6C31FFE
50B3448097D08E849AA0A458BB745F56E70C19BF66EB7CE94B5FE240DA274D0F
D1F08074803DB56D1EB8BBB52B94A7A07A07F4132B2258193B01242738473232
0DD79E448F4F148ABA67762686513BE69C6FF95EB93CE92EBBEC72E491471E7B
ECB1406761690D45DC3EF7609A59C9ED669E471AF52DB7DCD26658B512E83C93
50F67B333481FB61BD21F884F352BF2F554FB11C442678AF4A36BF43B2D8158A
CA3ACD95E7360A0EA881EE19339F4D420EEB8710C2669B6DF6F18F7FFC339FF9
8C5D8AC3AE203F010F7B6FCB6D8748203EDB63E6FAFFE94F7FC299A63FA3924A
BEF2441A3189D56E8AD80159E2F39EB016F06088CD7C42ECD62793318B9C12E4
47D487407846C98450E87E9BD512F156FE7364D814F0E0C09A46666B94DA66DC
6CB3AD9E7AFA6FF42C66FA5B2987E24DA563CBC91B642B5F5C1CB2CEC9537B56
F73F6FBE77DA0C23F5F51D0C45049D27E91A9DAB929573FE73C7A5BD1DC3D9A4
746DD2D56C64617060F68ACAF4A7B3C9EB427747F385E159FDFBBE6AE7CAF32B
BA5FD73D7DDA9CF9BB6C3B3954B75D3DF23FCB9E98BCA26BF1C67DF357AEF8DD
D446F75F3A9AC32F0E6FD0B761A8755EB6CF473373C3C218DD87422436818D07
9797FC2BE585DA339C5CC9AE9295CC060378017F22BFB7B3C9ACB6DBB8ED2329
FD3371AFE05248A5D7A8EA727F51252788C8118419CF9D2A0E7CF75BDFFA5653
C0EC3FFBBA1DF8BBEFBEBBF4B45260362F6F7BDBDBBEFBDDEFCE9F3FDF74CFBB
DEF52E7B0F94D43613C2056B1AC13763C6341581604552C8F5724146E3BD5800
7B73D861877DE52B5F21352B5AD1C4310368C194636FB651DCD1CCD20E33A857
C84BFD426AD8D8D70A0897DC6EED18FC45452F75F638D8640A9282A65F6D3E31
0F2758321F0D0EB1030F029110A2DABFCB7EB7E3BDD75E7BDD7EFBED7623D39A
72B3043E0A8E6676829B82FEE76770A1D7F6972798440173E015DBC72D40E5D3
7C86C27CE27B0AD53662BB0E1D06EFBB33E6126296A4230B44F4D52C6825F889
5EAA87952FC02561E1ED6B8ABB6CC05054421C617FFAC10F7EB0F7DE7B8708DC
F344DC58DF25BC34A5EAA1E87BA8252B1FE9D8D1C12C039B1072134C8BA69132
36F42281843424ED7220B7DCB3F5163DCC85248F1A458F3C5C0AD18BB252C496
B13B091A811222BC24AC1671E392451B5CCB394DA9B033D443D30E4BCC881323
1C836B70AB372CB4FE49C350EAD1F1D1C53291C4FEF0AAE9041B4161BA1D702A
059A055B91443C069C782B8353CC6A1181C706D92AB36763C058E4CC8A844B2C
78F2FB919F80DAE80ACAE2EEB8E38E0F3CF000A9227B3A22D8F6FED0430FBDF2
AACB8706AB49684C9D561DC8E772E6478E3A7EBFF7BC736565B6849257339357
376ADDF54AA5FAAB5FFCF1DC334E9CDC37B47AD5735D61D26078494F4195790B
8B10260DF53527BF6587D561206F725BEFE80C6967BDB96CB816A63E1BE63D11
6687B072E38DD6AC9AB9F48066BA24E998BED39BE6CF9FF6EAE1C98FF574BD2A
0B7F7F7255675F4FDD9CF4EA9291873BD2CEB5B5FED5836B06877EF0B1336B21
194A46C2582038BD146821526873655ECD638F3D4602C8E77D4AFBBC64B06291
9320305977C30D37840961F0A5A3A76B7AED5B521FA5AF8CA17D7550A9F5644F
30D1E3E9BBAEAE6E3CA4E09C3F14582957A421D23A2DA7319B36CD7EA99A3F5F
CF2A3F8903497557289C92B3CF3E3B4C185E7F592F481FCDB1B633402E933E30
C1D5E1494C9086F4E9736DDF520882BA1DF123B643EC004316FD1F077129D82B
404B30DC747AE9B4C369B7A930E15B89AD854D1AD2539AFDA75AB2F1E607382B
5595F675931A7BECB1C77DF7DD47EE191562230735A3984435F63C5736855C9D
CD9B4925FB8D5A838D576973D965972D58B040A48F73E7CEB501F828CB987B9A
309A3DB2495EE57224D30502B27F9AFD74E79D779A75A29EDB9E33C86F459998
5A290887C1A0526E61EBB270E1C2E38E3B0EBF9323EA3BE4208910BB6216647B
A86C03D602ED6AFB8009C4EBAEBB4EF79589805013FE96BD64376281ECF19F7C
F249EE6E57032D91B495DB7A7B57061C7586B637EC7909181068E1497394D9C0
20A8AB244A8F5C0B66CDEE8204E3E0830FBEFCF2CB45782945EBE3F61C76CA63
3C751AA34281B139F949D6C0575E2A7890B9068BD255681D12FC764C801D40F0
A970CB983A58ED0E09219025215F43208DCCB47D0CE2333028A4BD7DFB483B32
F608A4CF052CF03587E408D8FF685F347A28B2EF766A385338F13E620CB76288
B16BDF5A31753D1B44A9663F2FBEF8E2E38F3F5E9D09F00730A7C48CED8B9DCC
D59A3563E3E5CB96D6B3A1491BCCB8FE5BBFF98FB76EB36638CCAD3057EB7FF2
A6BF636D164656379AB574DA437F796CCF5DB7CA217AF5E0ABED450D9D632342
EFE00EB36B3BCC19195C53CBEA59254D9A594FBD526DCE684C1A59D9F578D8F4
85C9D37A877ED73FFC0B7BF8ADC3DA47D2A1C9DF7AF0DB4FDEBDB863DA92FF59
D67CE5D46C78C38D1F5BB274E0D915C39D5D49B3FAE813FF78D556DBDFF8B153
270FA76BC29AF6950DB15C1E0A7D88E2498ACB6DF06B34417F74E12B7D3F6C13
AA2663B3D19CFF13BF04BD2CE101C7F580DBA3B85E42299F6F3B12176770706C
4FC5BE84DBC181E7E417E318A57A9B2D926D93085DEBD6D9C53B06074D6ACFE4
60E075AD5EBD76A38D36C47C5EBA74F9D4A97D0504661AE93D9BC4534E39E5D3
9FFEB499FFF84FFF4F5EB8AA60D9E14AA5B658D39A8C2EF8F393562AC0F7FA58
16AB2F63F06B93C57E9F99E373F00D44D1229E9420B8CE3C2A1024B669DBD1CE
3F4E5228AC63B027ED2FE1EC74903C9A9449101B1781475057AC8BE8F5437479
9931B4083ED078F38C3D28327A8510C7D957ADD8A3DD915A49B52C55E5B46A30
DAD366AC0834ADF5D8AE584F8D1120D42E7CB0A29E57C98D7DC0CC0EACE95010
2CDBC3DAE1FC9FFFF91F5306A69680E60AD1C6E4E87694CBDBB0ED22AB8B5728
E4B5793F2694E90A05E88F449400473C851D25FBA40968BBE6D7BFFEF50F7CE0
03BA179524DEB6D381A735B5ED1962E07CDEAC9F638F3DD69481691D82DEAC6F
3EEC5A51DF55F8BBB56A8DAC55A3D9489C54B281BDFAD5AFA63EDB161D420C05
F6B92FCF0B622B449A27F8BF5A70DC087E5678D6870AA48009ED841863245960
57A3BB898FEB485597449E4EAECAD9439B138CD6A4662F8B15F00216F8F3AB3E
0DCD826A5FF9D7993367DAF5399BA6CEF7DC73CFBBEFBEDBEC2441D2D8EAF3E6
CDB3C345DA5B757D66ADDA67306BECF4FDE31FFFC88AEE2064F19048180AC03F
436C5FEF3D1C76ECA69B6E6AAA629F7DF6F9DEF7BEA72C0FC4B444F28647862B
053F77A8D687D3BE634FBA7ABB5DDE316D4E7565583EA66A99DC9FD49381C993
A777A45D77DC7EC7173EF3A110565593CE7A6305FE3DA802163AA764A9665D6F
D96D555F677560A4A73EFCBF597B0F384BCA326BFCADAA9B6F87E9E9C9892433
644110D0352CE8222614152448CE022A0C2279244806092AB02C208288E9D3DD
357C2A98C18023202230E380334C9ECE7DF3AD5BF53F55A7EBF0F6EDB0F2FFF6
AECBAFA7BB6ED55B6F78E279CE53C906BEDF48059EDF48E7B2A91A36C31C2765
FE1C3CD75148974A9B169AC28029D4CCAAF0865FDD576BF46E5BF36777CFBD5E
FDF3CAADFD7E219F73B70D6C0D2BBDDB2FAABDDA37DB297C6FC5ED78F5497D09
2769186A92943F568479841B6EB8016A42D1479BC1D7FEBA8E0FBBE64843AB5F
7898F041D9DF9A4A8F70074A014B884DA980459E602CDB394CF84585CFC2E0B0
FFE29CD3E4374AA5C6843E371C1F6975CBE1382485C900C56A8A8E919152CC23
9D2B9518118A0EEAE5D167C53EFBBCF1E9A79F651F62599D4C0E712F4E95DC7E
BD1FBE236516C1A24E5C23A4848A633168F3A08A23C61BDF6450D24478DD368F
D096142A55623295250A843841586015202BA96318A224EA1262E8CA2BAFC4D8
EEB9E71E0A23FC12D2F988238EA0C296873A154A5C0CB4ACF150EAC8EEEDA3DC
E1E1871F8EAD2C0C2DFB14AD5DBB9671330C06A2047284B20CAB1F474AA6DCA3
747D18C38454BAFBEEBB2FBEF862DBBCB03FCC7D7024BBEFBE3BB4A0A28E8C3C
63C6DA603ED4ACFC8AB89A851CA69E9604B7137850901B376E640C8A14F66444
91EFFBE8A38F1E75D4519C61E84555D4B0B6556BCDA8B5228DCCFEB2CDBBB12A
9DC43DC7DA3CD2E0702476121A37C73EC4CC73695849853F29D4D1961B4BCE63
A4B7F6DF7FFF238F3CF2820B2E2073354748C38B14195CFAC8EBCAC6B8E5202A
DFA7BB1F2909BFE95AF945BC3296ECA5975EE22473C9948EE13666849963504F
24564C1238C9F8B362124ADA1142A1A02B0F1DAEC4D7A93B6D8F50DA510693D0
D46D3AF8B4D34E3BE8A083702E18C2C5B443AC5C7DF5D54E425E8D47C0A0BFF1
C61B1982A6A2252CC0CE2213CBC6EDC4FA1613FB490C4270C6F057F2818BDA42
D8F59D77DE995EBB7891D4838842067FC2895EB1628549A01576C717E2439992
E09925F843804D2E28A504E30182EFE0F7E79E7BEEEDB7DF10F8D986DF328E6F
DC591F3BFDD6DEED0E28B7829E72872D97F4B31FCC0C52A520EA635B19E87FFA
07DF5B614AAB228A667F9C1F42432D923641A3FBC3070EB7C25433DF1D9AD142
D8089B4E900DDD7AC64F17C2663EE36EFAE15FD373863E76CC09DFFAE38373FD
CE743DBD2D68545E285D71FF1DD0C61B5E7EA592CE54AA8D52505E5A6DF5CF31
03A946664BD9EBE87EE2AA7B4DA961639D24B469FC31DFC1405D1BB051758066
7CD4C18C8F45AB78D724D52B582966FD6C928A8916DEA4EEAB63D5554E8A917C
6DCE25CB24A915F0510F764A1FFC7E9ADC9E6D5948B5D8C9CEB60FCF1EE68B41
426641C8E1C2BC1AFF442DCEA34888602B694F6DC643A2E451D17D5449252363
8A1E0716A1B91C1A93E4EA299570BDB62F8F90DDED80772357114682A3C5D8AF
00936A32C187F2590A16EDB9E79E4F3FFDB4B42015D8BEFBEEBB72E5CA0B2FBC
108240486F8ECDB18A4D899761E10AE7C776A9F9205C0C190D3F18829521688A
3CDBB8C330301E16D590494E45C6C66ADE2E19C78CDDA4EB18C414D66F79CB5B
F052ECBD852FAA2522EFA0F1E3AF5C3BB118DE7BEFBD679E79A60D21B6F18053
114A9BD87480FF870761F2D9949B8C1341C2F3279348546B2AFF2080454CABCC
286312DEFCE637FFF297BFA4E5A11C1EF14AA447E049E15614EEC39698B82D7E
B96CD932B8412C6E91D508CD0DEF449945DC106B845B99187DF3918F7CE4873F
FCE197BFFCE5534F3D9507508509322FB439D5FF671AB01BDB1ADA36EB180708
563F9D218A228C9B9A443890A869DC1888C12E6FD532C964E1A3F5BE12C184E0
D1D72433227611DE91D938EA33326370A5646D381638D9C6F789EF90671FCFC5
8E624C55303A637930C60A890B6ECDADCB42703D0EE361899D3C0405787807DA
617C2E5787A7BEED717C77F66C5EBE7CF92DB7DC62AC4614947BAC689274B569
95DAEE238A0C63D52F71F78649C102D376C4968749CB0D27E91586D714E088A2
8F181AA28A320E9E9EAAD4FC4CA1E3E44F7DF6CB5FF9DA47CFB930C8766DF50B
4CD2AB94C090A8BF3E3AABBB581DD834AFC3FDFA0D5798B0DC996E356B7E2A09
A10B2DCB6C74E15F534DA786397203930AE0D81582C23C539C512E578B616E56
2DBFF6D7BFCFED9ADFEFD03DDD2DB95FDDF38B51C71CFCEE1D57D65E095B5DEE
DFC2F79E77F2EA59E5F4C0B0576AA60A5DE9566664DB7061DECC4A3832376CFD
F2F66F99CA586736DF6A3868C3D3F08EB07ED6AF5F2FBBC76E992346616962A6
F9A9C2B513D4FD8C47601A07464627FFCB28A022FF349EB6DB6E3B529D9046C9
241D1014F58C964F6A89475471730E05EF70DD75D77DEA539FE22952EDDD540A
381CDF34699AF212CA65613768864B4CF004526AF3BF760997686FC533A2BA78
3B7EAB53C7EC08DF5F54299A5911A862337DE2139F804A20C409E79009215EC6
FC999D426009C1D1471FFDCD6F7E1373CD84B193147ADB7C1D82E7E02BEF79CF
7B1E7FFC71723EF397C432506812ABC994B00D92A280BBE4924B6026F3B9CCEE
886E9A3A497DEBD8242B483A5F522672E36A924F38E10438CDB8184B7CDE79E7
1112659333A860D424D48093AE3BD91C190B552B43D91F133F825CD19953FBA6
3668A2EE3FD501C0CCE05DA8E4B85775DEDC094DC4A89219B7C73B92B283A923
155F419DC3BD236E88E96105B1D5F8CC243D6AA880C5C6C737A204DC69A79DD4
458006106612C3C3147173F2329A29B63B8E9FD99B441EB04C013281C37B634C
4C31DEA9CE17E7844D26682EE0B951D666FDFA4C3A26D36E45A7063A38E0E6F4
5254FC94AAD8CF709BCE3EFB6C6371A7A8268A860BF7334BE7C3A489B5A82482
A44F00B5B510D1A40B35E3A15B7619372D66458F76DC7147187624D3A65AA2EE
6F0BDAD92FCE682DFD457A36663CCD326F8E0160EF51E7E1329C9DC30E3BECAB
5FFDAACD22622C188A1D2094E274ADE6107618C658B1716C039AE694B9768ACA
24462766608F3DF680FEC07828A619E8621532878437C20FF7DC730FF43DE650
F60A678C004CA687886090B68E30957E904EB91DB9F4E0D028C6DA4C158D9737
35DFF8FD99D82C88CC8558D675E1D4E3DD7B7636E592C9A74D69C860E61A6513
36BB3A8B23A3651A52D408128FB9779AC0336E542B6CB2A1D7F453A530DBC2BC
F6B4DC8A3BBB366BFDEF5699F9DE01EF7FD30F6EFF697E4B77716EAD62D6CC39
64CFF21663D698779E7AF4B3A57FECD13DBB9A69FAC6C97AE9DA68C3ED983154
091604339FBCEB1BA639646F6F01D4099E5231B4498ADD95B3135A7B221F803C
0DF94EBC9E1513A45025606252F983CD4341CA70911EA4138D953AE38C334C82
42506F6C0A93B1D830BF6627E4C8FF4C3C086E7DF2C927E346B4B3A621F79F08
009B3E714D4F02AF2AF93BB69031AA855BCAEE25A7E1F144F1BFF212088D566C
87C1617AD8980B3BFECE59A0A100F18D59B673422AD6B471B9FC8A3817B1B4F4
E16878D2A1A1E3ABC1B8E3B95B6928F15C09A86C12E56A3F4B11368E9FC75B0E
225F4D7DDF18BFC25B13CC823BE3645E7BEDB562AEC050F1FA1C36239677DF7D
373C4EE25745FD288386436D0BF5D3716F4DDD3ECF583007BD8B2AD94DECC713
D0C76E74CA028AC155B0E4206919C9E4DCC4DA92898F3649030C2A51D79DA45C
C1B1BAFA50CDB0C5A189EBC8E5A20957A5B43DED18D5BC7169C4946E43D631B1
9FFDEC677994086B2222891938AE23975B7293687FE5E0DBD0D4F6F83563F656
6158722A83983112E61A71E5DBDFFEF6175F7C11C2DD23515DD45B2C6E03E08E
3560C7EF397B7859FA7F0CD24267AF5AB58A0DC6497FC18EAA2AC2E6D6523338
1E2E1BD29F4A9ADA7EFEF39FBFF4D24BF9155A812CF360E65B9A491D7FB95598
C5847303C38EE46536BA581FA2BE4502457E155A33DAE426C9A16AC76A4BE0B6
583B988FF83A9E423B122361330C5266DA269DBDAF48BEFF2FFFF22F2B57AEA4
39E8245C1F5C6BB1B2DBA8B489B2D1662A15CDA1D69A529BA7891624D58C8078
5C3E93B4A2B28BFD70C32BAFBFF5F24B3EE7366B50A97E13F69681BBBA70E1BC
CD1B367714BC52A595F6A2345FA1901E2D35C3886D3F9AB152B5918E36A7EF65
73A974A68E1BE6527443695DBDF5AD6F7DF2C927A192D36FAD349CD037213CE0
E8CC876ECD31F0214C107AAE99D5ECECFF5BA5735ECF7EFFB6EF376EF9566F33
0AE0FBE9910F5E7CC2FFFDFA63666B66EFA30FDBDCDCBA38CC0F748C0C5607BB
0A59B85675373B5475B77716FEF56B3F35C166CA7302ACDAEAACF0C305175CF0
ED6F7F5BD425122637DE782344226603DE05372AB7AE6C2CB1E091BD47079009
C1691C4839BE6AA7A1ADCE8CAD63D1809B18D2A5D6A2364ACBB1D107E451E2D7
C4FCC070106FF73FA28EEDDB4E9A9DD296A24C79F8E187E18AE1CE2C2B124A82
8E08379C02386A2E411FD1C6128709D90295B113F703100B2B190D69AF11DC0B
8B9BFF3CF0C0030F39E4102C920D6B6C03223A63BD8A235145448F42DC8A4538
497DAA3759FB3093707D087F64AB0A9E4CBB91AAFC398C7CEEDCB9D822DFFFFE
F73FFCE10F53B25029B21E9FC80EBA56EA5D285C25E99CE8BBDB763DEF8FBBE1
D1901A0C5571485C179C70089DCEF80333709A5C3BDF57B916DB0662108F849A
4C82920E82D382A9A0B94A9B8F6786E617DD26A5B826FDD0D0E1D21367A406EF
36AC811FAE0BFD5DDD56C3E305D4CD34DAD8711206CDADB7DE7AE79D777EF293
9F547F087E30423AB8D84EF82F190938061BBEA72A1106B119A7617447314393
808318A2C4CC4358D822585C3F2CB76515266B99A6398FB4B5F952CB962DC3E1
67B991971E8335A53231AE877AA81691ACE162280CFCF7BCF3CEBBEEBAEB18A2
508B30DE568229B448A0EC508149D2582C5B3209D10163FB6ED2239CC1157E51
74223A2C785932F45234610F135DC895D581D2EB73FF733C58B5DD77DF1D9E03
8316931A64F2B08D0511E03F31EDF8EE5D77DDC56BD45F5DC3B36BD574671A25
342664CCBDEB5DEF7AFCF1C76DA3AA2DA263270815D2A433CD8DCDF015EEF393
9FFC4412C6062E980455B060C1022C31BE22ADCF23C90C0B74AE5F2DCF99DDE3
5746E092C4AFE995AA2D3FD70309DB316BD63EFBECF39B9FFD2C9AF959B3A2D7
195D3B5235BD338B5B06CAA16B5A815B9C3113BFAF0CF7DBB597EA5D9D7D73D5
4F9BA667021F1E70A4E0E137E337D0F761CB3803F96D7FA8CED86ECEE76FBBFC
C4F71D9FAB16FC3035ECF49FF9B973FEF8DB17B7BCF0F7ED3FFE8ED16239D50C
F2E1BCBE91A1EEAE22BE371A547CAFB5244C3FF7C84F72C138FE388EC14D08AB
2996638C708D7E0B4D4FD9B8663C6529D794F616BE45B39BC9384692B96FA749
F1286FC29B501951E9D8C078AE202409B4EFD2A54BFFF8C73FD297E3EC453136
13B3BD43F35D7DF5D5FFF11FFF71D8618741E2483EEABC99D89D223CC14CFBF9
2715307E0F8D72F4D14793CB10FFC40F343CD99058D0CDFDF7DFFFA0830EBAE1
861B086552CC81729366ACFD38DAE942C3DA895ECE884A2DD5625DD145F693E2
08A9AE6896B2EA838A999D030435E416E4658A163A56C746657D842AA7D72B32
265A6AD28854F32A27E580B90A981F8A5DA2FF3903CA3A68CC22DFE1E4B0E893
93C3B83ABE8B23AA50893D78339E4CC05663534979650168A368125A494745AA
014C1441C5ECCA493BCFB15AC46890F4ED14539AEAC32EBC5C17C61B28F727BD
588D2B9849E219A3E4A25F45D3952FD2468FA50F91381CBC33A1FE87462131C3
0CCBAB5E0BC70F3F53A4DE7FFFFD279E78A2493858C856662732DFF296B7FCF6
B7BF15D5949BB04FD35E816EB67BF84C8FB1608D99B604730A7C593F88FBAE47
39E0C8D38502C6B021239E7BEE394C3BF6091E44BB904B899F71011C568C8AEB
286B06F7D977DF7D619D281B47E79BA1236A23BC0EDF5490692686C8278C5BE1
B6D893F8016E311B6E9AD8383EF4D043AFBCF24A82A26D76D536C44998D41411
070B9B92915BC5A5EC1DEB2444AD0A6B7187B3A0857B158248E605FEA9AD68D7
4D39096BAF7A783024C6FC17531EC40761FCB89280E736189174B0CC3293F4EC
525A11CE09F60F4FABCAAF21159F78E209DC1C338625E60C131CC77B527F5C1F
7F6AD572EC9044BF2F4264D59AB962576DB4E405634EF6BCB9B34885D4F443D7
319942114627F62A7D30CC2D9E82BD412383E1FDF3CF3F1FCA82FADE596A7233
9D544F2E0279E18C0451411B96B998CA6C1B6A14837C6DAD57CCE51FF9BF0F8E
0EF57DF8C00FE1A9D7FCFBC5994AF5C12F3EB02930C50FE6BCA5B991A1A145C3
EF1CA9841DE90541C52DB79A85CEB067A4FFC56FFE62C1AC05782F4E665BAB6C
D2CC11432A2F53E104A82D0C18DFA5D1891384EB8957E0DC9E74D2493FFAD18F
680E2A4129337D9AF365926A141E2E9BB155BF577F2D62489F7FFE79D60A9998
8F39F2926D7219DA11E419D0EFE5A1139B308D4BFEBA42D061CC7E8041A83A90
C3E52F196611D8CA7E04C3A1A2C8A043C9A814F5AB49B27414A95284071C70C0
DBDEF6B6DB6EBB4D547F2AF0D741D2539442BEF9E69B3FFFF9CF53C5E24A1E09
6CCD3BEEB8830350204B45CF5ED258341CDFBFD3AED6D0BBC871E48453AABA71
3B231E45F5EE8084827974EFBDF7F26E983446D7B95D9C9836120BA4F552E892
502F2690A465F9826A6A463D4AD35B2C1F6AAB6093CAB67D840C7712AA48BBC0
49C9609BEC4DA90486E9788D00044C7F7202DBD0FF6D1FA5AB051B6CAB48B105
9CBC072526C57E45DBC8A645D48BD07AC5CE8722B433460494F11A6C0CF64D82
58C421649F79AACC30A1E7B4A1031A2DAD4C45B1647462DAA1CCC2B822C5368C
547B464DCFFD390D28927130FE136B8A318C65073263A469B808A693F1DC4247
476528BA92205EAE0829BA68D407560778FB15C664F7BC791FFCE007BFF39DEF
10444293DA0EA773C09887188E7B3BD79DBD924E39E594FFFEEFFF562E530744
C2C18EC48AF6D95E5CC762461384C52EA077C77374CB81E68740332265EC09C4
002EBDF4521C739C29166E4D54C0AA51A614E26FA4AAA19557AC5871DE79E74D
4349DB26D0EDE5E361A48CE21CF244930684F56382B0B5913F7FEE739F7BF8E1
87E9077378A9C895EA0E5D6F5BDF9071B0E49D41ADE17676A787366044C56214
D3FEFB9A881377F6ACC8B21F0C3BCE3AEBACF973E75C7ED18591576B823DF7D8
EDC5175F0C4287DEC285175E08A7886388E67F76A530B7E8CE4A379DB25F6FA6
B0B93C2774DCD12DDEDC9D666F5AB3A1509959593FB0E33BB75B7EC1A736AFDE
F4725F7F7151F1DECF7D29D56F726FCF36F70B6AA9A6D93E935B03893CA360B6
0F876604614F4FE78CECDA6D6B7FF0D8CC9E0EB27B52244AE46AC330768B69FC
EE77BF7BF8E1871BCB7574120A6125209821C6A1602C934D4DB05B3E1B7F847F
324941F0A4FA8B896746108F39E698471E798406EB75D75D77F1C5173B569529
16118FB33BEE285FE308BEC4E1DA296B0A38956DA8A9E13482F89F076149F4AB
9C8E2D158DD5CE0FA3A48BC36DA44DCF2C91209AA2612276461637A71E0B6362
28A33237E273E648703782B02834791386CB14D6C0EE64369E69791B0042D9ED
241D70A93FB84BA8786C1C16679282D5CEBB537993C6CF4E0AC83A26E3C476DB
6D07E54A79C1BA55133BF7F646144C97F9302DA2133720C34D88EC60132A6E50
FC80BBD1726CE315C2A305CE9CEAC31511F584639558683338491117DBDA2B4D
C831702BD3B964DE81F0D1A91AE618ABFE0FB762BFDBB6F60093C2734C5293AA
4DC80326DD46B01B9FCEA913AB36CD2327A99391A3AC238365C5E328F1B903F9
A79D76DA09734BC5490A686649F8834D3D6DDB73F6F42A270257862A41839FEA
7C911E99D81C227EC7865A1AC54A44F5F8B07522CB358E18170A7EA5A6720ECA
04F290E0AF471E79247424253B06036F0C86BC8979B82013B9EE2235A325078D
A56C1C4F01A9551526A1E6206A1D9741D5DD74D34D7834BDD8FBEEBBEFD4534F
351694CC6ECCCC38B6B1482B79CCD9E6814BC06A6CC13B643AD8E509DA9CB22A
180EA17C502C8715CF3AAAB6FEB6E3F08A2761E6F1FAAB56ADA2317DE69967AE
5CB91216958EC9441016370FA52B5315D2D9ACA9237A9CB211375FBF7E3DAE84
ED026583B389FDCFE0B3B1D83A95ED8253B87AF5EA258B1746945B8DD8C77023
C6DCAD5BB6F44695EEC3D9CECE7ABC819D3878DB820181170CC7CE5D577777A3
5E55BA84DE0E5D3515914797CD29A6E667C2D9CDAA5BF29B266A42E816823057
EEAFB7B2E5DE855DB5B5B5D33E71FA6D377F69EE5E3DA5CD95A091F3E7179B4F
6D346537F7C15DEBF3FA8A41B991CD35BAFB4CDA649DCE74B9C30BE7E55B7383
674AF5DFAD3FE39C2361E1F1989B8447886284101C6C27CC3CA53477A3F220B8
8CE93C56ED4B8F30DEC02D277813FD07BB51DB540A98FB0A17EB80D3602239AE
4840F14F1C134C38D68E743D8A861A515132E8276788084CDAAD70BCA02D1473
73FE97CA90546F8E63CCB3AA743A243EDE84BA81017D6A5CE545C8BEC47A7F86
13C55E44CDCA2027CB1C4D624CD0AFE2E124DD3967508E2C03D7CAFB727215E8
13EC8BBE0BF5AB486EDBF026260EE04B03F1978EC509609307D92D756513A8DB
815DBAA3982DFD5AC63AA44EBCA453A6ED6E7260424773D5612043DE6154CA19
6B0670FD09279CF0831FFC00875CBB678C2E780A456897CAB451BE85499D801C
D3DD77DF1DAF8F8DA8CBB8F5553149652C8EC069407F84EEE389BBECB20B641C
E33F76E9972D64892665D899C7956A893B8A6718B30459B666CD1A9C1F26D79D
A41C8B0BC1C3135AEDDC19782011348D09E1F8B45518A2645081B41B141F2681
BC311FC1238DE340760EFC9E594F5972DC907489F8150AF4A9048470B35C8231
E0B4EBA81E3F9DCBF9410BB6612697833FC499518A94C7011F51C2A934888503
DC3CE294C6FC90490A6F871579EEB9E758CBAEBC1503B9F299881267A2819005
05035427CDB7E3C9D2C620C4A64D018BB8860F72E2A23B110587E3F9DB5B498F
ED3061667012FCB60C507C6BEFBDF77EE69967986CA2656C2650DDD93613A954
B8B22A16C78BB0699BC82C83846BD34C8817DA05C4147A5C7D46A170066D1C80
B6049F4EDB9113AE3A1CC233A347FBD0A92184505767B15E1E6D35C354DCEEA8
E2F22861B74441F2FEFE41D836D8205DF87DCA148A510E1847B7A777F6C0C060
77EFACE1BECD8C9009F8F2C0030FC42995547AA19BD9DE093AEAD85E5ED3D42B
39BFEC143B9C6076A5DA30B39B5E6BD42BCEE9AE412D9BEE9941DFDFB19E1BC2
B9F9EDD7CEAD1B7FCDE220DDB7A551FDD74E93C32EF55375E3364DA3AFC3FCBA
EAAD728B5D11950DD98225F1340FF881447E102C0A3E336DA108A228B8DB242D
0F3E04ACFA182AD0D2966BB73FDC5A826ED06C85E3FB852F7C81F5A2380834F5
D41F565F1484CDD854946D1FD6B9E2A6A79D76DADD77DFCD27D9247CC6620056
B12CED113C807244BE94ADE029A7047A74AC3E6EDC97DAE2F66E3313A8D81920
15C93B3B93E0F79017B00D2FB9E412EE8F36F5460C0853B9FC0DB629C64F7D2F
AF5AE324C7024745C490B1BA70DB0B19249CFEEA26B4D75E7B4172612D6D2F4A
302E6D20D1D688F1D149E87C693170AE6EBEF9E60B2FBC90B20917DF7EFBED67
9F7D36D92BC5462B420CDDB3187FA04D291F211DB0C9886DC6B70E3CF040084A
78549C461A078225F330636EE5424DFA51E36463110C3909CBA64A4B29C87801
9373CC17522E33CE815F2E5FBEFC9A6BAE21CB31436A02199A2408494B4B1DE5
308D6A9B6A63796C2C8289E34E369F391EF1A10F7DE8DE7BEFF59386BEA2EFD0
26F4929EC7748068D6703599A0C5088F3FFE78AC05A530E68A65668C58928A88
405F9CCC0B2EB8803E258FAB264D7EA119EFB8DBF18396D503582EB26AF35417
A0823D99290206F21176C10C9683EB1ECD49C135351834DD2383C36E9870CE44
43090AF94CD4E63BE51D73EC713FFEF18FD7AE83B9EC15B3A6516FF961DCAC8C
FEA51BCF5503BBDF9F3B67EEE6AD5BC6F01333BAB1465B376D9ED53BEB80030E
F8D5AF7E15E5BCE3DEC39974C64DA59906121F2426F017BFF8C5F0F0A032F134
BEA977C929C683033BF2FEFBEFC78667212F2390CC3473073228625ECF871345
0F5B7C203447D4276DCC7C191F2BB2174E192E8652F027880E72B532B9C6F927
D081EB62330DD89E137EC3FE7AC62A88629E9243E214E1D46083E97DB9736C3E
A620A18FE68AE34FFBEDB71FE4A7B18C660132243DB8576D4215892FFC97C464
9C1F3FF04DA7D9EDADDBAF1B5A571A094C8799D193AD458906981441A3860D89
3D1C7A69932BE6CBE5AAEFA57229E3B6FC0666C2CBA58A4BFCD4BC9A9F33F59F
CEF153C3FBF6D4DD6D663B63460BCE172AF386E6F767227FF7B8E38EC38A6BAB
2B3EEF4CF8A8199D5CE43BEFBCF3DC73CFE50187FB71D9659751F56EDAB44904
678AFE0A134A43961962097027A189956DC7AD4E370F0E319921A4B028C7689F
91CF5192734A05CC3D04F181EFB495DE5334130EAE689BEC0E6EAFEBAFBFFEA2
8B2E52165A4529ADA417B7E23036C0274C287095BCA49B480F92DB94F48AF8EF
C1071FFCD8638F1160C28D8E338CBDC50A6BCE9D6A0F6C5A54C57E172C5880D3
CB2554E293D34AAF5A644364AB5EBA74E9AA55AB68DAE85812CC2689C991D376
3EEBACB3EEBAEB2E4A163B8D2A01EA582C041AB328128D4587C6364DB412F015
BA2666BC65A7F5E6F9B179197FF2939F40AEA9E658CC0352D8ACAD62C1227712
BE8815BCF6DA6BDB5A03B57DB8A5987DA78BA92277F9195C53AD26D3DE84CED1
0715028ED686E069A79E7A2ACE9BDE94A61E4B6FF9B30D8C2410C6B5283F8DD5
1FDB2EF553B92DC3F876F4BE2D4768D73328AE40ACB2139358F132FAD361D2C4
82F5694CD48918597BC906C462005C08BE755BAB60BD02052891266C8F8889DA
61871D5E7EF96511AED1ACE4D956C12E45BC8AA64C921822C8204898C222705F
A3E24088D6708EC28C13B99B2BAEBA12167D77B1D0373870E2F1273CFAE8B75A
26AC366A5E2ADBF49B1D1D71D221A0FF44C026EBF25BAAB74965D27E33E2D28A
EC182F8AE808272572B18ECE48BFE2B20CDC086C9B540ADE4314124CB99FF8C4
27B0FA782FD89DBFFFFDEF7FFEF39FEB78720EDB5A95D03DA09CE57E9E1E253E
8DDC4B253DDB156924B535CF1DC9CED4F6D84C8652E466D31130166B8400986D
383E26CBEC3F61A72D59B2E44D6F7A13AC16B6D31007386967180B24B5087B6F
28EB695B6F9481728B4970CB540213ED32AF9D1891C7B004734F544E7890DA8E
31AFC10E25A4DF8AE051336794EA43DDF3D3C303CD3DDEB5EBDACDEBAA61B9B3
C71BEC6FA5B3261F2D388E4F2EEA7E376A66CD2B5446E17B4705C638AF4D936B
3A9D7E66A69BE96CA407E697529B52434E6B6B763B536BB9E9EF07DEE6190D37
8AA310C9EC594D91EDD7B4DF9AEE10142DBCC7356BD6309A4B55D5D68D4D15EA
26B6F29513A4152EE9C4B0B6F41DBF684394DA0A08191823D4490E866775637B
CD429A74237294A256A78E610C8AE809EE7B92B1C959A411CAE327C654261D09
B0620C90A06D3B95A20D6ADBEF4CC752FA4F4CC008BA457A3C9A210C910966A5
E9133F2DE53E862A1EF95B6EB905EE326D1FEC398C9C695A92F5D8D32A23A38D
CA43F254CE9C5088B8AD0A3D8D95306690004EDED5575F0D276CDDBA756A3C2E
0606292DAC257EA6A941CF0FE3C4232E883F26368D57AC58017D2961C45D85AF
332A28D5AB90801A3ECACCE7872ADF4687B13C6E7A43CD588CFCDCCA1824D512
437334D79C846B89D5562CE46FD349F8E5CE3BEF8C27F26E22C4A7F1470745BE
23F7005E997DEBC4D8158E2F3B31E3D137B6C7D9766CEC64A18C2AFD86DE3007
202249BB628D89065A66625BD4CD6DFC97BA6C71243671BC9982B82E4CFAEAB0
199189AD460A1A3140851388E31901731298A19080D42224048563FAE057BF5A
C8E6AEBCEC8A6BAFF942063BA4D92CD5CB69376D82E692F98BD66E5AEF39E97A
D8849F9BCDE4D2B9ECD068C47210AD8783198B394D4D14E56EB4AAE91854C11E
1E1464D1E973C7D0E602F933D0DAF4A3E39A85848119173B0450C3B86DD08AA8
92E9B109CECA3887CA11A90219A0E6BADBA59CD3CCE4F41F79C0F64C0656F724
63D562D96545F6B31473E68E2208DFC44603390E136AFD31E395679F8FD609E2
D1262AD65855E072BC6CE6A6368A6C7BF39BC494B4CD68611704E1D60F2689B5
D885CBC6F2E9F95C9509448FAE96BB7A3B470647A3AC66CA6CFFD61DFB5B1BDC
CE7AA1009511F960A3C3AD7CDE7415E185C74E42DA6D3583B4EBA473B9462B18
AEB7C26CAED0D9359A7DC3DC0137E737D6FEFA4933D32C3A68E1869F6D080793
36F2F187363177B22D97DA64142144B46E459481912B16AB082B639C1FFEF087
9F7EFA6998747C475C0F03148EB2028A70A81E7EF861C289C461C00DA9161A26
7624F04FA20770673B3AA8689C36D8741EB05208EC45CAB9A630A50DCB3DA4FD
A103CF30A9EDAA1BAB5A14EFF95FFFF55FD452531D0F3BF3CA6320E49B49F828
8284066C62D70B1135DB2507A22011A98D89D3096D8E232E839DB57AF56AA84F
3C08675EB46736513B953191538CC908F1A12493B81758A5F7EAABAFDA246742
231368C61BB26B0DF70D47A8F0BEF4876AA51860A056A6F5C31DC0AD40E67D4D
A9D215548D3C57F4F58904667E85F573F8199EC499679EC909275E66AA7DC2E4
13352505939C660C1BF3436E6A6E21829FEDE00417177348C663DD99EB428F81
0BC15834DF574133C2EE18C06823369707C36DA08C2F5F8A511C6E243B21A76F
E905ED9A93D34F3FDDC4D8C8071F7C30B458EF199AC39F98E0C78C31198F81D1
A4D36A126028FDCD7DB2D34E3B9145CFB1D8E16DAC1F97497B95EFAB0D89DF13
CC892922E099C616431AF8D92EE8B269CC753673997CAD5A72C855895FA4DCD9
73E644288D6AB3669AB37BE7F40F0D76CD9AB571CBA6742E72268C139B32B0B7
9C149C5E58BC29279AE76A90A4D9E293DD3B2BDA0F610BE34F8B5B6674B44C76
F759B366F6F5471E5B212E588ADACA7ADEE8C84847672714B6F86AA0B4F05DCC
27014A2A845529361E01070517D0CB21264307DFBC9E8F93341D6A2B2897DB44
501BB3ADC4B7CB3168936676B76646FBC97EAAC233EE460256962F5F7ED55557
293B6857305373B008058B8B9FC5D9C4ADA8C27D11794EFCB411D4B4D14D4820
8CF5168CA504AD5BAA138561F12DC5E105CB8D003DC38358F19E8E8E663DA8C3
6ACBD43A76CBA47AFDD14AD0AA9BAE599124EFDF06830C3A385B29D58B39D3F2
236E6927E5B5C2A0E60761DAA4F0CBC2C11DFFA80CFEE1F94C504D7785E5A065
304CF823A161EA44C57E7412A6C14098C4E495D781B7C06F0E3BECB0830F3EF8
9C73CEC106234D021D39FCC01600CA9AC136DDBC793345CDB265CB582F8769F7
E326ADFBECB3CF9FFEF427C609E6CD9B879B289EA7FA6327615E12F7BEDA0708
A43CF906A580200B2E85AF42A3246A664015BF21658134229799C56A5C48C13A
3859EF7BDFFB7EF4A31FD969D436C02AFEC49A6339BEAE45B3AC3827452A760C
11C50C10516F89C480E29BA9175B1591FCF2ECB3CF86E348CF864FE10CB24DDE
7EFBEDF7BDEF7D8F83E77920C11B6FF2C10F7EF085175EB0198F35361E2A9E1F
9B595474D0E29A204514B73EBC10F8F15836EC6F0C8CA7D13E2A3C0F3432183A
667F3A3BB68961602BE02950754AA062EB6CD8B0016B44EE3462A4557B2D7392
2CDC64645CB56A9597F451E7769F066D2B5B017738F9E493EFBEFB6E25B9153D
E6D263CE313039DC0C4B30524787FEDFFFFDDFF915FA887C059A268CF9B0DB9A
5D24AD40F497BFFC65CC9B8C306D71E6CC48784B49CAB40837E4C47DA8036C43
138C95D83BE8A083F6DD775FCCE16DB7DDA6A88F3D27AC0493BD68BB11B69BC2
0B66C5BC0750C098735E36A902E69BB2E6C18614302D622C97857D8BC5C3E7C6
6D1E8C95E1A3E9430B9DF58E9152774C4FD78CD1E1A19E62C768B9544879997C
6E68B43C3F57F4211F9BCD7210BD0C14B5974943BFA762A186AB20929B8D5694
028CF05DA6734E14F6A8976BB97CB6ABA3F30D3140544D23EA751C0788D16667
2736218C5DC76F854C883012C3E00117880A9B9B87F6BAA22C4C7FF28C8BB2C3
8E6C7309A6693F37D5470E4A90F487A0C5865D7DC5155750F1D899021AD036AE
AAED5CA8C24D30113BE72A4B942D226C052C10AB88F99CA46FBCED36F0D8AA1C
BFED9C8613AA9B84B554B5985C37E8128A0E885FDC76EDDAB5825C10FAC04A7A
9E3E6A0736798C9277AE37A3A3A33232EA608F643B47BCD130D3ECDAD52BCE2C
962AA3A39570E6FC48C60E6EF36774E3FB9928E5E1985660A28E3C9EC967634B
BA69BAAA3BF6AD7C39EB171ACD56E88569CFC5DACF4D776F690E32076433030A
7439F14D79CC3975A422E18910B5A7B1DC5019282C1962B84E2A434108B904C4
BA0AC707B98A079188ED339FF90CB60A2684554C74A64D1275E31A05096BD358
0676D28DA8509596470134DE17FF24D64B5B5C20492D18C404113DCC55A8F448
F2B14DC428E4CB6F61A660D8C22A113A7122A88AE171BB8A9717E87A1E006D4D
52D6C9A09370742D5A79A6041833572B5F7B13D3E823A9135D3AE551949F104A
D024A541F47884852176493039CE9BDC6811F2893AD85804DD8CDC72626913B0
8329B42FF156AAC1807CDF61871D9E7DF6591BFD212C8F9370E699C4D556B101
3CBC33CE388337C72AB0F4655281456F0C8FC67FF1E2679D75D63DF7DC13C4BD
51211661E240B2BCE31DEF78ECB1C704A792E8A10860FA00EAF39A6BAEC1EFC5
A089F9C7353839C4A17CFAD39FBEFDF6DBA195991D6050847A0563FECA57BE82
DDAFD48014B017B7E8C195EA88CEC88D338149831F456E180F1452417AFA231F
F908E43B6606BBE8D65B6FA5278DA1C2512071D8FBDFFFFE7BEFBD976948723B
B02D1DAD0A1BE86792B09EA21A53054E9DA4EC8A057B0C71E30062305FFFFAD7
79D0684E61B1A07BDAFA571205ADB8771BC34914A8C8A61AF8653398D3511C2E
958B11E1C3E27FFCE3D5DE5C715BAD0CCD86A51AA955B2DDDD5B0606BB7B3A2B
83A363597C3FE2F49037ED27E2C4C30F81993F77D6C0B63E2C48E0E229A95ADD
4F79C66F9919DDD8B7A5562C3C8B8531DE984A35524BB367F56EEBEB6F59FD7C
A43668D18A6F52213ACC1EF63314E465975D26335A02E19F54BDDACFF611A688
97C9C875A40250172CDB51B65730483A06F2E2458B1611D64EA9C2BF2A19A7B3
C987D292702C9A1AF559C23FE11E1C75D451DFF8C637B067ECF48D8DDA9D28B5
B88D5BE31BB40B6935B1D69F3B0AB2228CCB32850AA2C76C628EF1D744BA939E
D33BA3512967BD62DFE848A1ABE867ABD55AB57B6976DE9279EBFBD6969B66F6
421CBD666DB495CF7AF5B0E5A5BD267CE56698754D47BA681A4175A85A5E69D2
B31C674BD848B951634CDFEDE8EE4A0D0F0CB8AD20A17EB469BD276516B37FD0
C4D219C5CF381A9837AA09957A723938990C2CB3092FED5D76A2C4D10BE32237
DC44E17AC93D05B7148CD1EAE30E0CE071734A01BF96B29E74239AA4F909E79D
B5169FFAD4A71E78E00119E02661E2151488B02013C746A4BC555249042C13C3
6D01719354374B494328EFBEFBEE7FFBDBDF284AC4CE48CF495DF3E008626CB4
4D44CFCD3B50E8F0B6B49A99FDC50E8646E12CE367DC5F4606F3AF6D124AF93F
9E9689B531F480A9B64DD21E87482E7EE54B5FFAD239E79C23CD672CA231E689
8D55F18967D9ACB0729B589284EB715A04193349721A3767651BE79321650C80
F4499899050B16B09281B5FC4433D9FC21AAABE6E3D40A7A9AFA6F599A1CFF4F
7FFAD377BFFBDD90835FF8C21728CBA8F074015D5E06CF499A4A60212E6095B3
A8600495E283983C8B6A1993E3C4ADC293A074946BB54A15FF095F56E4E161D2
E542EB65AFA34C3109624E0EAD5712A8C1033EF4D043D7AC59839B3CF2C823C2
62503CB1190363EFB009EEB8E30EDB37527F78BE9A2AE5981F991852E3CCDB71
4B7CE5E4934F7EF4D1471901C269C790C8E14C330BBFDF6FBFFD5E7EF9657217
88F3C4661A51A91BDF1493DE057FB615608296F4F442920ED46B7B2E59B266DD
BAEDE72D59B379DD95575F73DEE5976170B9627EB05C75A3A97602E3D482C8F9
8DDA2939C687A28D61359D853CFCD97AAD998AB4B099D9D1D1572A157263A0DF
6ABD997293F44160F2996CB551EFC84741A35AB3D155EC1829971AB1D8D26194
596F1F49B19B190B8D68CB9C89408DFFF1E35AE4A61220BA096F2EF7947E2D7F
B0DD09A10E791F2F6E46B9F3CE3BFFF9CF7FB68D032653687F13E4C55A060D46
E5E9D84B24E0A3B015C891882AC7624074A6AD5B3589FF60120BD58929F44585
7BF8E187FFEE77BF3BFEF8E3AFBBEE3A420E790A70D6B08D4F3AE924BB731AB5
03BE1BB98C153F93751ACDDAF2E5E7DD74E39D0B172CD9B8711D8E75D069BC5E
B3F33EDBF755360F566B850E77742088CAC44CDA7841E846F3966A386E25D31A
30AD51E36EAE8FA64C67C3943A32A19F2AD4C28AE7CF31A941D7D7D4716255E7
39D5FBAA1D16CBCDDBF295C6EA4EC8BD84CDC3E6252C3A67773E93A48DB4BE36
0E4ECD187067D8DC3001219619C638FAE8A39F78E20946A7F8211E9B516865BB
A654C037DD74D3E5975FCED2A8302E64C620EEBCF34E11BB088020CF404474C6
CAF0531571A71265D0A63C8C856493ABA153C446D636184AA63D370DE4CE0107
1CF0F8E38F63B24441A70A5D2C181D5CE81EAC044415A113346A28C469444B37
408612D38F91ABB16E6891D6525BE0B9CC04F0EB764C9F00139BF6993721B08B
3C647885DB6EBB0D0FD28CD1C2B5FB595275898C82CE226F081FEBB7BFFDAD89
3193781706E1D5C2F6CA2BAF3CFFFCF34DE231F3CC086FC51FE0DD62D256AF5E
ADE60752752CD7511E9AB6D754D97A0506DB18D3B83A586BDC9F65242C647493
EE5D840D0B522804AF4C4B253855D4C4F160A2307BCC97330EC6302073BD5C8E
3605CC008C8DBDB2F3A06D404A3ABE9268AA23D4E131711A65C71D77A4838241
C2F9E6A11045B34865955357FF2EFED3C4F8036194E895CA8309A7284362B371
DED68C2FCDB235ABC8F044B363129E3BAA347E5118EFA81CDF847EA3D9699CD9
F9CE91EAC8CE33664127546AE5AE6C777146D7FAAD9BFBC246269569A5539BAA
959E422E4867203BE18756EAB5060480E7C29B69F8269F4B576B4D27AE3185F6
CD7A5EA3D54A1B276607364D5830F14969E0C4C569627661624C153F44F22B0C
D2AEB778D95232C33351223F46D5B482F5325AC6B00A54020D6B61F7A6E1309F
6A3FCBF02242828083871E7AE8B8E38EE36CEFB1C71E4F3DF514A3682CB65678
A30D2864177013C12BC3D18C2F4392C014748BB1130D86004FDADFF82FAD6A66
BB8D450ED52657DB1492D845ECF345C142942F4D55F54FA38783ED8DE306AB9A
6139D19BF362689DEBAFBF3EF4D35EA619A41ADD3D33B6AD1F72C2ECCC6C57B5
3EF2A56FDE71F22967CCDCAD5098975DBF7970EE7685A1814A2EED39D574D3D4
9CB4C9A48C3F6846D79970AB49B5526953A8E61B33ABB5D16CA6590FE1688F74
BBCE0814C76BB83395D54EF3CA61D2F2CF24A6B649388B84E909C677B0B6CF91
DAD5701B504A13364B82553593C67F6910A820905DCE689D480B485D6A938C09
1F790CCE64ACBCD273766DCC85175EF88D6F7C83D121ACA848705445AE10073B
0790AB13476B975D7681D360AB0411FB29C92103CD195F573795256BE760EC40
102D50E97E22E2882FA0101455422A6EAFCDE4225D400EECD39FFEF47DF7DD37
1158A8E70A1483FFE28B320CED8514140B7B147A91EE2F1E073B80A869FC46E5
C59A0A0E5E714551F37033A9B704DD17A546BCA49901771525970DEAB1C7CFF3
4C974E0001D95232269407B5CB2D6CF8BAFA2E380907A71C023DCB2EE661B36B
D2E3E1E4C341C4F1A67927971716007E60F708CE189792A625CD0E0D8C197ABC
E999679E092949BDCE0931562645FBDC8C873AF31D99A7B021CA26C11BEBA00A
E7CCD378F0C107E3A431D98F8BEFB8FDF67C3EDB552C0C0CC07C4E076EBA526D
CC9CB77070D3DA4224A7AA0B162E1C181EA995C899D545C64ABB2A9FE7C83379
C74464BCCDD00F4D3C60FCC383B3D984420B636DD2D1DDD1ACF83D1DB3FAB6F5
2FDC6E0E4E1605B1CC440E9899AA8E42B15C29BBB1AA8BFEEA780DBF1E95E1C2
1CF14C50874A3529C79DE18705E3741BB7C7710BB1A5D2324E23805B9C1EAD96
3BBBBB07CAE54C3E370267D435CD56AB64C27F7DD7C1BF79F28951C8CA66AB19
EDA8DC50A9E6C79960D704A95801A72061A27F62A378F816FB40A4BD14364AB5
D1E84A654B99965F8988120BD97C5FBD8A352B668B477EE4A30F7FF751EE2BD2
29504B65E35225C7382C2376CC185E263AB6CD0691AE8C971A0B22F47A15B044
900D0EA0FF802D7AEEB9E7E22CC34CBCF8E28B455B684B275ECC5FDA484C8C93
3173262C48324A654CAD4F2825837C36CE96594F397F426011D32BA253BBA5A3
8DA7D159168841370C128651559953FB1E79E491F7DC730F03EC2CD5A397CCBA
1866E838212CC561D1A98C24156B44F3601A6E0BFB2CDA794E36CCCC4817E6E6
F0DF2810D25F1BDD586E0C35DD16B689091D662A5CF933B62467B858FFB5DF4E
49223B95A9F725F780B03B9496CC06CA6FE48712865E326CACE79E7B8E8900BA
40CC7CE132B8A6587763759DC241C3C9A58E537C8B6B81438D3B10BB632C60C7
6BBB45E946C965B121F267DE91728A156C73E6CC21A197E2D2C6AA42617980B1
A03736E72DFE09AD76CA29A79884A08A5B81BB7062F95A1B2065E2C72E29B6AF
91E3288F996F4A0FA04D28DBA5ABE28F253A6E9A10C744A4BEBC64EA3379FF82
3232D14293534917CA5FCCEAB1C71EFBF0C30F2B3CD09600268703DD1AE95AA9
4937691CAB0433F59C9D23B14BE5A426B989E50B52C3F1E6F21EA69162EE046E
5BDEDF6E5CA3ECB8CD7245C4008944ECFDD356AE0DABE54B5FFA12031BB4DFE9
4953533A71893DBF2BBE0219349A468E8486B38DBCD029B5F98CEEBAEBAEB3CF
3E9B9245200061DC289D71D9C73FFE712C1946850B208E478607BFF295BB6EB8
E1FACF5E78119F9BCBA6D9BD0AC37EFCE7BFDCB2655B3E5EC12A5CF6A8EAA642
E4205169DC4577DE79E7F2CF9E8B11456DDC62911E9A98B72A340E543A147B3E
571E1D8982BC7E90CBA49B8D7AC6EAFFA897126AEFF2CB2FBFE4A28BA3E8482A
353018E18D431A79C542B55C21E619FFCB416784E19C54B61884D9A0B178E69C
254B9694AAB535FF782515AF60A1BB73B85CA9B69AF556D0D9D3DD373080CD0D
5F67D5A6CD9DB96C2A9FADFBADBED172DA357527A644C680231D1C46CD979C58
017BAE1FBB2F0D3F52C06E10561BF5CE54B69131E9C0CCEE9CD93F3CDCC8A683
4CBABFBFAFE0E5475A51F69194D7C6F2EC5DF39A88B0B734143016EEACB3CEC2
B72837C9A5357D3F8F7F5E01EB08B303A0FAA189108D6E960D11E205943FD8F9
A79F7EFA6DB7DD66A79F24124F3AE9A4071E7840495C3BEC612B09064509ADB0
EB7AA560EC66DEF63EB735B1DE54E47D8CFCD9142E8C42E1CEACC3E169259495
202686C1ED1614FC937899C4F7E01B3FDA0361DA099C46588F779B891A166274
38E5D8B92D033718BF6F393059C2943B66E68613283F25D87181AC2B6732F6D9
30A136E33F15CDB2ADF089A919FCCC84B72A542597C4344EFF4A08472C0746C2
DA6B280EDC90491F02483106CE0F3D138DCDD6538EB11871F933F71669E81957
C483BFF8C52FC2F4534C55C458E43150076C6E4166C258B34C3B480D6BA93F44
28CA7DA3B00C3DFA4915F05407662A0FCF265DD20B3265A2036057647236ED50
83493AD24FFA5C6E5C4104B9E77866542767C39E75209934DD7EFBEDA124C8D8
407D836771421812C1A4B1029286A78D14B0959FC041046E28462AC865DB5CB5
8534ED6F8968C256D2F61755AE63135648FD2B5AABBC32EF29262993981A42D1
ABD19B7A3E1A4BD9F311C44198F1D0532502EC79E69F60721E73CC31B7DC720B
362106803D4CA9A48CA00241B660155498179F71C6198F3CF208834B2AE8FAC0
073EF0831FFC80928839A1F7BEF7BDD82A0B162C58BB76ED760BE7A573F99E39
0B33D99C0983534F3C7664DBA6622EFDF5FFF3431DD7FE81A1A8743EEA5558EF
9931D6900A7F828CA3570115F2C9B8CC696C7D234D9B8AD5B0136501CBA38149
173BBAB259AFBF7F533A13EEB5E72E2B57BE60128C02279C9179F6668F0B5A1D
BFE5D34AEAECE81CA94411F262BE50AB560A5EAA804BFC00527156BED0AC46D8
AB05C5CE421CEDAF34A3B6B125BFB66C871DD7BEBA61D0AF2F9C3DEFE56D9B21
A167173BCBAD869B8ADA096F18199DD73BB36F78B0EC873D9DC5FE4A4C4A0309
1806582497FB215ADC48EEA4B23185137CF120AC556B5DD97CA55987DCDD7EC6
DC5787B678B98E6DB5C8D69CD9D9B3B53CCCAC046C08D2FB617E22AB28CEBAD1
F7E5A90F62C2AEDE5819DC78E38D175E78A17D48FF7F84A0A752C03A11B63C91
7416A686011BCCBF88A9695DD94DE3F122F82E29D218022107755B8D228F867D
4C741060AB9D7FFEF9420CF0AFEC5BCCE34F8944875B85D10237A811A7225B61
DCFC03BFDFB2658BED6AEBF850432B784E94861D2054C45149C0E8B25603DB37
ED64DC101BCD6F193FD2C1DC8E41A47D5326ED3A6EE004BE6946EAA83576F629
97585A421387479E7345BCC83490EF3675B0CB2EBBE07A92FD31836B8B7162CB
55F666E2524FF239D3C6224938742A6BC0EC5A7C63519599D86DD86DB7DD9E7D
F6592761B2140ED74CAA8029DF19A1A5BB2D1BCA26C6E4AAD3CAFE7CFC61D251
154A5C0F26FC8488613F511A470AFCF2E6DC94EF78C73B7EFDEB5FAF58B10227
0717C391B7E5AF31FF731DFD544056FD9E5602DE029B9EF9212EAD931417A999
2E2E7EE31BDF0887ECA8A38EFAF6B7BF4DE4DB5403E04DC440E624DCFA2C39E0
BAF267FAA676BEC724D93B7E7DF6ECD9F827EFC3340FAD36319CF19C9BF19D58
A4876CBD280D4D9348D8EFA942085C1766B06C60B619DF55224CB8CCF42037A1
6C9453A82C00FF2AB39AF3EC24ED9939572CB460876031297283313E8F7F42B1
C10CD264B681426DB9230A21EE55BBB10713D27055E93404497B0C29603B00C0
FE3F0F3DF4D089279E78CA29A77CED6B5FE3F6B6BFC20F6E88C3FCBEF7BD0FF7
DC79E79DA3D358AF74F7CE19A936EFBAF3CB1BB76E36CDEAFC9E826954EE78F0
FF44A0B35C664677E735D75C3377DE0228E06CA168FC3A9F8EFB908E9B31B160
460ECB16C9A668E19CA879BA1FCBE258D266331D954633164A6EA53682BF67D3
590606249EB0CFF1674C1D660376F359679E994EA5B3E974A51AE98C80ADA81C
E385A6D34D158CD7E9A63DE3B4FCDAAC6257A7E70595121E9A2DE4BD54A60E13
CE35471C71C4EFFFF0873FFDF52F8B162E2E576BA3A552AD519B3977EEEA2D9B
97CCEACD158AFFD8F06A2B3050BC9994371CEF35D3A2DE329E33C69D628228FC
E065D241D387079C76DC66B5D6D3D93D383A34BF63E6760B173DF9D25F22D9DC
5128576AADA0598B85E0C9279F7CDD75D72977CE10B48915B0ACC968E325F4D6
5841A861FE5EFDC25FD7672A05CC7203D28D7157304D2803548949F885D88110
65B8123B04969C5832B84C8AF1E002FC869CD58A039B18E5C0D20F25B3580943
6580EFAAD0808D19D8D511A7E690430EF9DEF7BE471F94702D1271F3D4B81619
9C6B35B6A2ABCAA203929F10FA8B3B5C7DF5D5679F7D3659D85482451750AC5B
3C6266BC7D6F12A3B052AB4001BBA1E746B9895816A5023715AF4BE0B82D2F68
45A5BE810942278062F68CD7663329F8D416E0945733A9889348CFC59FFDF7DF
FFE9A79F666D859C783593E023F6D8638F55AB564128E1F59D0925128C7C5C7B
EDB5B008190C604812221A33A3321F95C3A8360466D64452015B55398CA66240
9005902C0C58D3DD56DE9B4E18D1E7182E9593CA28E916E085D57AC5B1481695
AE6018106B8C9B93FB89325A349076DAA6CD039EE62C8D3328924DC01A593C08
9372EAA9A742C1DB8D9EA463B88AAC1122E289B061926690E06DAA87B201162D
329B50891207D6280660E72D1499618371BC320F1E69ED5847248E085560D335
E77B71239AF158033399152232018582DB8C2F3521E0519429BD64C912AC1A71
837620A8ADE112E5456871B619CB33A6358D5F8A25809B95550D2CCE616F1013
7332435A857147581E724556F0EEB85E08038A548A42A155299A69DFB0705CDD
5B79CC087AD261B3D3D86ED258908110B1B71386C675C135D84B8C93E3A5885A
5023AFFDF6DB0F8384CCCDA59CE172CDA4B2956AEDED6F7F7B269DDA63979D4B
43FDCFBCBCB577E68CBFBFF0DC50DF96FFB8F7DE62315F2AD767CF99E337EBD8
EAAA32202F5804C51C89C2CE104529C775424C78D535CD0CD4492E8631852656
A36E3106452F5AB2B06FEB3631A1126843E012036BD1B66CFA1071A9C8178D4E
E2C0C870219FF5ABF5D9C50E1F7E9509E798426706C2BA51CC66B2F0979BF574
CACD43941853AE5406EA91E1BF796B849E2B053E660D7A7A6379A433B2AB72AD
30D8DAA817A1BF4D982F760C954BAD4CECFD84C1D85EF3C6EC33CF84D41FF57A
132E4FC6F1C2A63FAB6B86D70A3B33B9A56F58B67160E0E9B57FDFE6D7162F5A
7CCA49A75E75CB0D6CFFC54E35D45251CCC37B2DD26ED789657263A95015764B
70FFAF28E030E97AA46A63990526E919430703A3A5EF8EA7EFB4D34E0C7499A4
8E5FF149FCFC96B7BCE577BFFB9D0A14891BC507DAE2F7BFFFBD9A4930CF6292
BAF99B6FBE194AD1C400D5356BD6182BB024583B73C344891A0B6F2582580A13
D810904284592861477402E70163C36F704E55462FACA5490815DA3A77B9497B
1B228F6AADAA03A3AFE599444445C6539CC5E77F99CE8FE0F35EE0A49CA03E76
1D73D518003BD1D1BE543B4E92FBB6E2FEB0767C2EB4FADF705DF0C1356F78C3
1B56AF5EAD523DC1A6E421E035D571528E10A1A90C0088C4972813BB5536D52D
2E8621820BE04F5E7FFDF5AA8CA0189F32078CFF27C00FDF842DF3F2CB2FDB7F
56AB268A30BB00979B12B370EEB9E7C2215665115F9E017112A9F0C5942B85B4
C2B95AB972A57C6B13FB6A620B7B5D0A78A2A9C205A05EFCEE77BFFBD18F7E94
F116AE1073BDCAFCD1F363C24F8809137BA8621199F4B95424380C175D7491C2
A4EC0F418F0DF6D433CF3C437B992A991550AC49DD7BEFBD9F7AEA2901BE7001
96E09BDFFC26B4113BCF30BF72D34D375D7AE9A534CAF0CB7DF7DD17F3E64EA0
2C36E3F108F63827D695CA3EB5493A75B7A54B97E2BCE1D1B698A3A091309276
6F0325DA9EB149E2DB2AB3711282307C859690B226AC4F637D9493147AB5F5DE
20D8554D08A8741975A0BA65B4A08D5B805940A63626056129F5259625810A25
58ED523A93D8C2CC3B1C74D0418CA88F5972851CBCCDBEA1D1771DFA8157B70E
1DF82F6FFFDE7FFFC8AF95BD4669FFBD770B9BB546BDEA7AE942B17370A0EFA7
3FFD29CBF9702B52E2E159733ABCBA1FE27FD57A0BB3D1BF7563AD5CC37497D3
71C82EC42352F013464BF5D9B3E61F75F427EEBAEB8B0AD0D1665294658CF5AC
2336E012F907B1E7865114B0DB4B777B996C33EC70D26ED0E82A74D56B954226
D5DD99AFD7AB9B4606E1A375B8A9D1B085D585B931BF1035E8AD07CDAE7C44C0
D4571DDD75F192575E5D974A656A7EA315D56C4602B7EC448E5A3388EA8B5AC6
6883160B99563CBC5AB59E0A4DC6441B18BADCADD58BA93CDCA9B57D5BFBC266
39ED0C57A3F7AD5B36DF01071C00110C773332B39A3E63CED19E8F69A6B9E79B
2D9FAD4253560B4BAEFBFF960296052FC25AFCC0B213EE495A81AC62E096E048
54D06C836624EB9440A56EC0D3F7DC734FB86BB62E6170911621EFA6F02FBBD5
5152A968CAFED9584689609EDCD8301F7FFEF39F5306721A79B4E92A70E72BF5
C390180F3B0D0572CFF1006AFB8949778CDEC0B49C300ECE87AEF205E335502C
E71DE20DC34C2A2B5FC876256DC61B9BE39333E6244D42258814B252E28F617C
1AD976A69CE21AFB045AECBAEBAEE39F18C4A5972FB2429338369000905A1C06
E60723C48A085CCC214180D39D1012DE4C9503B639CCA050B1B73074968D7322
880D96C341BF10FF9559243E6B7A0F641C542F552761B3A2D0C78EA169C6A61C
181F143F79BC54C7E68C07D04F736026D5D3320208A70A1276787A93AA7CD509
27B4CF24A11E56DDD18C9D0684A5A240A672EDC650B8F3B265CB5E7CF14585F4
790169C9648BD0ACA1ADCA32651BFE268B9BCA469AA00DEF672BE0B65F3A5370
4DD81F6659A495D90189BE26CF2DCF9230EADC8226414ADB5BCA1E180D323A61
B6FEC667C71D77C446FFF8C73FCEA58105033B03CF85E68390F59376CE6250C1
31205A8D6EB444AA622AFCA710E96C092777968AD96666B03D601D4215CE0B09
6F927E3822DF171C5DC89A306ED171E081070E8C947B3AB2D5E1FE94EB98FC8C
4DD5D4FE877CE4E77FFC6BA655C938AD547D68DF5D7728F56D7AE985E7B094EB
376CC29EC14160E52EBC0AE21CA3616CF73EDFE4BCDCEC6C71AE6B3A9BE596F1
5BF0177FF3D55366CCEF1EDAFA9209625AABC87170E7CEDD6EDBB6B5F42C4DD2
74C4495A53F36036EB5192321D8BC5D8F08FCED9AE3BECB0FE955776E89DD715
A6FC9151B8162DD398DF31B790CF0C0DF7551A955426E3A532D546BDCF6FEEBD
C7EE70D337F50FE48C3BA77736D762564FF7FAC17E2CF65D5FBCE3ACF33ED591
CE979AD542263FD28AD44F3334418CE18E3AB9C707C84B43EF9B2C0E4B0D0AD8
494739E2566FA1AB103ACD6A65CE9C05ABB6AE87CDB5A1325C0D4C57B1D072A2
AD08B9245C274F8D6B41A019D18DD44C18E4ACD20356D29387FC7FCB03568987
0AF6E880DA75833CA4F2C3B8972858943696078CBF1E7FFCF177DC71079B6861
3B6963DB405FFD938D2C2940548BC55A73FC0053008E29FC3C35069654E48657
A0C846A5EDB0C30E14F26AC82DD82CF51959D67958546D75CB2DB7C02B50F5B0
5248548A6A2544934282C8F1AC36B5AD585E39C16B02BCD50E70C19CE059786B
72BDE15698226A102FEE38F4C20B2F18AB7B158727CC1AF96D083E67E2805602
5F815E2FE78472DB2E5DD975D75D71736953CCD285175E78FAE9A7E367D24F9A
84948252E5B2CB2E83CB4B3B86E5490AEE3266C6B0D9E40A98628B3762296A1B
0440AD0D45BA84EF7FE52B5FF9E4273FC982271B1F0FB70F5E20FC4EBB7D26BF
CB8E492C38113E8DB3A9E02D77F3FF3B084BA82EDAA4F2F004F669258D75B91E
02B0C88652E8782AAE519E43AC076C55CA65DC072F88D721F26D526A565B3FD9
586B7C6BB7DD767BEEB9E7D47C8D23271A9E3075EE2A06408C55871D8EE7A1D5
23DC8403994B2E65C9CB3CAB47EF4485CD090C2D4A6A292AB9BF7C0AAD5DDB23
E7693FE28823FEF8C73F3244260E7749314EAFAC22EC2B82E68898A3E36B8399
C56960127C190F5E2AEE1B8FDD25DA3976FB503E9E3721DC71521096768ED2C9
ECB3EB5B9D9B09C1A02287C7C010BD9B7C1E7BEC31E8D199F3B773EAC35E63B4
BB98DF3854FBFB687AF65E07BF32E477B586EFB9EDF270B4DCEDD6C3CA603A76
D8204A72F9224C90A80D51BC4B19348EAA3C5341332CA4F28BBB7B76CBE71687
F5A2D348A54D2A931BAD555FFDC9F7BF64C2F5B97CC38D0AA08394570CC2AAC2
AD5C7495608DE1D4BC94DFF2538ECB3856A93494CFE5CE3EF58C87EEFD8F19E9
BC53AE7A7E6346AAA3335F181CEDAF9A5A3A0A1B3B90647E54B9E48D84AD08FA
65CC7673E6366A0DBF1E45E476DB65F7975E7C3603199B8F16D44B67B68D0C16
52B9B25F8B40CFD15EF170C002D7336EFC5F63FA4B25FCA5504807B0275C0F0A
38A8357ABB66D44786B69BB568AFBDF6FEC6CF7FE0E78A5B1AE53097AE559AA1
7564E4264636597DAC285FB5005114B4E52F5EB2047E12565FAE216BB2FF4703
F49F54C09A64B564BDF6DA6B3FF399CF98A4CACE24C00E6315809804212C528B
564C7BAE1E0C02129A241186BF422060635070730C92511405F27A1516B24FAE
63F1A7DAA06B938421F3F107525D68539A9B7C0B921892124436B77C8CAF7FFD
EBC71C730CE7966F17C6E58EA9F12D32190F8872734EAA1515D485868650F2DF
543ADEB1AD31CE702782CA7BF092E1317B49E33B4E0BEBA729252840F0CBA38E
3AEAD1471FB5AB1FDB1430C5BE9BB03F86315D8130AAF687B009CCE7B9E79E7B
DF7DF731142A8E49F6D4B2E31F34BE9589602122B98D29F9A9F2A94DA8F57524
270941ABED818C23C62419ADB54B89A051882C0827FB047117E28F7DEC630F3E
F8E055575DB57CF9720E681A0F12C28ED01BB5F8509F1C41C3C527A028BF3DE3
D3E478707F58850CA56EBFFDF6D00476AF0F928D7142F7DB6FBF430E3904669D
189B69B7DAAD7927BDBFD89245FA3A0DEEC3CE71E22B6F7EF39B57AF5E0DC1ED
8C2FBF365685CCEB3244A6FAD0B60D933A7171535010287D88CFBBDFFD6EE812
3E9705CA6269C0C030996BD7AEE54E80568365F0873FFC01AF43FB4CA872A593
99E552029B6A95FA9B6E250F399D7E45C0DADC77937020D3B8E6EF65B4A90284
7B9DEBC5F3206C059590285C3006ED67D5CB518FCA869007A3C3CC45A1F5F3B3
9FFD0C77C3C26142701CF01642BFE3D13423F059B06001B97369FCAA9C093761
793E2316B05FE1F7B324949936F106E31A5CC9A809F66D61E19E3FFBAF97DDFA
FC6271F8EB8F9C6D52D58E9C5B2DF5B44CBF38ADECC2E5EEB9E69C4FDEF28515
0F5C78FDAD7BBC656933D34AE57AABD55C676B3882C3504C078E0ED41F7FF8B7
47EF7AEB9C413327B5B0DEB961CB607EA6970F5B038B76D9FBE9179FD97EFE92
2D7DDBF299EC687968D71D96BEEB9DFFFAC8830F653369F8B98D66CD3750F069
E386F5C0AF64C352CD74655C5818AF0E8F42EA64F3E926846BB9E97A4E23CA52
7BB834E5876ECBCF3B9956D8E84D43F1B8237ECB9D3B737D69A46F74A4B3A393
2278B8349A8BADB754261D75498AFA0D8F410AC4C82F3675860AA99608088878
08EA5E88035A4F9BE2ECD3CEFFC53EEF5CD433B3305CD9D8E5E4263D2FE986B3
F2972F5DBFE2DD4E58EEEE34A3556C95AE5A3062EA460CBB8C4EC1C484ACA3C8
1AF3CE935ECBB2536D6A8EB6A21A869DB85836F455291E1E5B1A67E4DF208297
6796A18E30C10FEA9F0CEFA940514283A758CD214C92A15060D25835A8D205B2
41A93F08D1A2794A01C2321E865E5476811F70FC71047040585363771F927093
C343BF4B4BC04037E750D556ACCA11631795114F715B09565BCF6C0A58452608
1C6641369D752A54E8089C323ACDC60A4238495F48F67054A8B29534E70DE3C6
074CDD422640E851CD9F74D249F09DE82EAB6F848C242D74F4D38F7FFCE3C30E
3B0C7FA641C4B14221DD74D34D9B376FF6E2D608545D7435DAF40A7F50AC8F65
368C3F4C5306C065668E5062D4CE6B0A53DD4641D77693A9140FD17DB2434959
4E83D16E576E271554DF6C2CD2FC6914AACD146DEFAD49AF77ADBEAD26319665
DFD8E952528548F7FF3F2AE0C4EF29D9D508DC8894148422E39AE38F3F1E4625
6D089BCA9B93AF540AE354501BD82AB8C9BEFBEE8B4DC2405698343FA0B52EBB
9B368A2C153675666718FB9766B294BF824BF6A233BD74C10517DC78E38D4494
E0E9175F7C3136AD94A80DCFA6F3CD1761A99F1A898B164E4F94DF0309421C29
1137DCFCCC16BFED6D6F5BBA74296603EE352F6385037D235C0C830F0A15EFF8
C31FFE10A3852AC5C524C0C29F54798FB566673AB2C5F2E09838CC4E3A784A13
18464FAD7A7E76E75E85D492A7FEF8989B5E67C24A04C9F27B5ACE6B2465F676
F2D35105E6E3BF5AFBD60316A59CB898A919F11C5463BDE324AE4898FCDC6FCC
C65F998FFF6B7A76DADFDA3433F38B9D606B97E78FD472AD886CD2CFC78669B9
34D295C79B14CA8383D974C60B0D344260FCB4930EBCC8D5A89956AE981B29D7
30D78B162EEC2B8F6E1A1A49A5DD8CE341B615BA3BFA874AA9F8890B7245D70F
6677759687465A81DFB360C9531B5F86B7DF8C42E87009A2F352F7A33EC15104
CB319891345C936A8DC2917D90F00A82403279AFFC0E0389E908251E38D919BF
FBCDEA7DDFD49DF29AA6BACDA46637E2FD36F18379A8D7CC86E747DEB6DF769E
89F845D2B97AAD39944D8DC977ED37B63E3449024E0A408ACD0E0BB9133A699A
38484679ADC6F2C6F2A729C7250F5951A2F41F234F52C0F249646487E35BADEB
3E32BB85DE10968AC54B047EB2ADAA508AB256196D964FE958BCE24ACAD21865
E37666F46856AA1BB75D73253A04F5F316B44D4F179F815D4C659759ABFB2A95
1CA3231226EA6AA34ECC74DC29A318D2200696E91BC76A2820378F6610050B5F
5F5465A145806312D26956A22B26AF9E1C6D29B0D7B4851D09116474A79D76A2
5DC098893690AD1BF85F512ADA2AB08D23A64D2149D829DD2844B400FA52A57E
D252507B8E4B359196590A124711321AEE38EE0909A8E2285BEFF2302BAB77FF
FDF79F7EFAE9D285D8F436A37DDBFD4D9CA850FF25E6BFED62B289D7CB3A0B62
0679E82DAEA2ED075327BDDE5CF8541F6594B5A1599C3D5624100F9ED6E2EEBB
EFFEFCF3CF5F74D145B7DF7E3B7515BE48E4A1EDBBF32B6AFA2622377DB47D65
8AE11AD62DE0DDAFB9E69A4B2EB9844768D9B265EBD6ADC3B368594F9C2E1E1E
C5AB291A6C5CBA339E49A36D18F604AA00831F76B293433CD16C92D96B2C3490
7C4DFCFC9EF7BC077F65EF2991D23100804132F703F58CF7C2357859D8B89801
16C4639F60EA56AF5E8D998186662763CA32E68D703D5E934637E670E5CA95B3
16A5FBA018FD744416645A7CDD8C57305174B0C1334F824013077832AED34AEF
70D2A76E7ACB7BDE5B4FF9A3950D737BBACB43954C9C59303157061D7F461D36
8C54467E35E7BE6B3A6698FAACC22E6B2A2FEE34AFA73C38DCAAA7765DB6DB1F
5E7A6646A6586D543DE36433998146759E03CF369376DC20A2A60AE34A5FA7D9
822636F5B0D54C791BFD46219B1EAE3773855C6450FAADA12A8CE9C832EBE99E
E1D49AE9D0E92F8D2CF672854C36688543ADD6BA56B9E1A6E62C5AB46EDD3F7C
33E608E29ED12AC791CA42B158C8E515E8A3FFA4F60638EC77DE792736097B85
5119A4C2967167D7C3CA19E7FFF73B3EB463E8CEF18AC3E5C1DEAEECE40C7741
A6E85736BCF4C496AB577CC8A9435C2C0ECDEA7C7EB6EF0FC99A170930175DC1
30FE1E8A845DC838B12DAB37B91C12CA3D784EB018E8DED9544D76009C21714A
090274746CDDF1CD7CCC78275B3F48F1E3EBD84BF22B145BB21B81E00E0F3CF0
00BCB7360E83B62A0F9B9FD5E6A56A5974EBD2F40ADEBA56BB58391BD411BBEC
B2CB473EF211D8D37445080FA29450985D0DE0E959A97322EFD046B23191E740
BFB7535454900CAAF197A227A2F34D5D20EF45B3CAB4BDFD6A7421E8D5A87ADB
2404FE6C1FA232C8D7C29C544BBC9A4D00398994B9B650B3131B1A87569A2F40
140FE12A1CCD34E8651B952AF4AC948480FE0409CBA73149249DDF9A2A474B77
848DEB598915C4FD7948A2E4C4A5A812CD8C9F13A9480B00BA0733006765AAF1
937556FF1469ED54D75322133AFB6FFFF66F7FF9CB5F683E73BFAA0A50AEF0FF
96023649350E11CB9C643B6E66122394FA86E6F039E79C73DF7DF7919DD14E5C
B909A10CC120F690B8E22491D62FD9AA92D87D7B48D4CDB8C9873FFCE19FFDEC
67505434E1F5BEA155FEA43E4EA2DD603A4DCAC6C4892B63694A3B6CC0DB8ADE
160B8D1FB0DBD55CCC58296D5DCF2E66049F6BA2D4100C1B09DEF677BEF31DDC
01DBEC90430EB9F2CA2B596EF8E28B2FC2F7C572E3DD172F5E8CB93AF6D863E9
A541EEF0D0D2C05AB162054FAF9C001D5D4614699213CED6F41B701B71C6236F
D44FE7325DB5C660C48FE58C51CC538CD23C8F0A48D2E9A14ACF899FBEAB91DB
21DB31B388091C189DD5D1B3A91ABD8813BD691015E9461D15A0247C6F7E7AE8
B9FFFCED439F99592F2CE8ED6EE536BEB0A19531CE6E73B7DFFFC0037EFEEB5F
D4033F1614F99EAEEE72A91496AA11E01B47D20FDCA0957671B348D934C33A5E
A9ABA3737379D4ED28BE3A5AEE888C96545FA59676A35E49D8E69E1341B4B06C
8B66CE4E8D94719F46D3CFCC9EB5A1565A3B3CB860E1E2F5EB5F35F9AC68AB29
9778EA19B9A1B38B39BFFBEEBB094826FD0813584C164600B4667374A8DA72EB
1DF33A8F3FF65BB5E6826C7AAF7C4FA36FDB70AE589BF4B0542372E2B58DC135
5FBFFF988E0E53DAE66292536ED16FBD4617AC2C95E00B843590989DABA646E6
D2A6145FB6BCB21BF54C75BAA57E6CF12B463F33BE9B9E6EE25A5DBCC47525FD
C12225DA8BD22BD8B1CB972FBFFCF2CBB1DFE81AB27E8F9A1B5B5A250FF28019
F3172099C7DCA6FB203AEC95575E31E3D94BE401E31A984D77DD75174188744C
591CAFEC35352E868731C06487D9CA0268080D2A29DD8ACEC01E7BEC813348DC
A8A62BB4BA6B689F98B858DCBE400A980299315AC256EC4A6E1C7F280BE1784C
ECBE6378B7DE7AEBC5175F2CF4B19482B18C0F2FE94B68E401DBC1469A93ACB0
E6B6D861871D2086884C615461527D1026A4FCB67D61A68D1287E3093CF5C413
4E38E137BFF90D949FEAB1E858D8DBCBB19898A6B93F7F80A8A5BE696B02E159
BD60ED23A14D394D190353F40CDEE2FE6420A3F89BF47A95C7912895A911963F
719753AB61230ACE3E6908FAF5A23AF90A8C22F0BD08911053153BACB1EB8678
A34C92318D7CA998D6472C3C340EA8FFDC84E84AC6BECDD4214C13BBBA2AACC2
9BF0372C1D51EB721B42C28FD4BF89ED39668CB8B568CCAA445255E96D3751CC
87B76295302E26E4505CE2AA9EE20CE3F0BCF18D6FC4FAAE5AB58A268BD0C512
7F41D24759A4F93419DFF4A637915BF4D0430F65D13CCE271119F82E26FCC413
4FE4F663DD3CE304B886751D7C4DC521594477D717FFFDA4D38F8DD02B199376
6796AA8DB973F35BFAB7197F0CA38B616026152EEAC4D2CFEFDD5CED3AF8F44B
82DEF91B47861A61B398CFCDAEE7A37D1AAD960F77369D72A302DDA63FA7DEF5
F0FDEF5D3052EC0EBCA2375285DF98EA4D43E80C6F78C30E3BAFDFB4BEBF5662
8B85AC8900AD9D8E9B755359C7CB60724227E524B53A5D1DA395F240A3829D77
E8473FF487E7FEF2D4B3CF556218573E9FAB06CD4ABDB5E76E4B57FD6D1536F4
AE0B17BF71C19297FFFEF7FEC1A1234E3BF5B6871E28BB4E3A972F0D0E87858C
603E4B972EC52EC211B3831F7243F973A4E3E34E5F34AA14249B9B5EB8D97F35
84304FE78FB8E2C76B4A2FD7B299F48CB0674B61D2F33273B07B7EEFDC2F5F73
887123A7B0A3683266FEC0D02678E08CB8D2C4145A5E8295CD2428076C452B48
0D77B8D800B1F1386086BE14F46A935D61C237C05A17C81CDC4A34678E556C63
8740A5F54D02ECBFEAAAABE05F42AAE06E9C37A681705B3812D467767686F14B
7A75071F7CF0534F3DC59EDCF4F0A8A5043EA5DEB2C165BC8CB5B3B2573CAB35
88ED5B1330CB383CEFC62A7C132B60426525FADA729AB6BBC9AAFA238F3CF23F
FFF33F49D8A9E09C10243CCB61C25542B2E13041412B27451785D16F4A0FD199
E14A76FC643B5A6D457C05AB43E39B9D0E14D1248A7372054C5C1901239A7DD6
8171A99CF1346C1CBDB1005DD29D2C6861328C101E9B657AD28F931041A876ED
8E3BEE38EBACB33000CC29C41F04342B94B8C6FF3C08CB8B7BE090678A7A97F1
04313D71B40A3890413315779FA59025BC76AA660CF8CA15575C71D34D373121
2FEE0E3BCED9A608E94192D504538491336588FBE06E77DE7927C9496C5A8C89
67F2F52A60297EE10065540A34681BE0DCCAE484C230E0A17EFFFBDF9756E6B1
E429B263326D4FA4C54DCC88321F6CC340CB9AA0505634924947D54DF6CBDA46
BD4ADD68E5C82EA17EB2FB4C4F14617C47685CCC30E776D1A2455093CF3CF30C
94968DBDB2078035C50251E84BE0CA5BC50D317E1C7876CDE386C17BEDB5D75E
B445CE39E71C76CBC12624612CBEF2B9CF7D0E03C09E640A9CA79774457C2ECB
FF8985A10CE2212A7AF35A6EC538F572056678ECEDB52AE99C694628A134D757
CDD2F1F45DF6DAF1F9BFAC3641FAFA1BEEB8F4C2CF2DEA9A996996ABD56DEB0D
F44F065AB7D5C4466D659D488AB78266902A1453E579DED294593552369D6641
901FDD541DED82228EFECF196ED4E7747635EBB510DE6A2ADDD16CA55C0F6651
1ADA778CF3D9857E2EFB15CFB8053898BE9FE9ED59B965235EB26746D16DB9A5
5A35CC78A572FD84138EFDD5CF1EDFB47133A4FBD2CE99CD7A6373A3F48665BB
FFF2A5E7292CB0847E6A6C1D71DB486955AAD47CE96C94D1A087A046E8CCBBB3
088D6E288903A1E142374C174CA7BBFDC8F03F3266F68CDC36E808CF64B6B953
7044E77C535D929D3358DFEAF7CC983118A9DEF9F9CE4DF5F2984FA9D0227FC0
B360695D7FFDF5471C718449EA38B84B85F370C7778155FCD6068228F26CACC4
9C0C476E03FA5222F4505A344C18CE79D2B581C38469C74D98625D8BB294BB45
56B2EA7D29CAE8BDD16F7EF39BDF0C056CBF5D2B69A1463B9ECA86F005DAC7AC
9FC49F6EB8E186152B56906698981E9398B03C385CD6B6760B14F8F44AA98055
7A84A384476303B03C49CD0F580781BFE254C6B9FFB42A1D74B4EDDE44B2A1E5
24C89C72129244E68C9563A56CC72FB104E40EE2B7202D8F3BEEB87BEEB98725
A6A294B0894A6C2ADC712168BB14849A9C9E10C7BA64C9123C49948D4C1FDA7A
D796598AB013C3C65D355568C5491A8CDBB61BEFB0E79E7B3EF7DC735A27C68D
B9BAB6446E03CDB67DA856B90C147911943486C806492F4F7DB78DD391961466
436C4D133F9C7ADAC2302D2FB9E41236479A4A61E34A313CF0BDB0512EBBECB2
F3CF3F1F2BCAE434DE14BF6762C3CEB5B72912F37A3E36FA9A475D89061D399C
0D3AE51025F813FB3662C6F0570652789C680C32A9C31811D5B08D75B27316D4
1F263663D9478FC245B6243590DA2A4CBA9A0A5FF37AEA2746F9546C67924E1B
3A42123D8A94D8C2C2367128DD2606188404E11991C1418A7FCE9B4D4F8DCF3E
FBEC4350DBC73FFE711E691A67982EFC15AA973242DCB37C04B3C294B64CDFB4
110CF140E5F29DF51AB66EAB6766F7E0C0D68ECE5C69B4D6D90977AA629264B9
C200988A4B2FBAE9CAAB2EF35B65F85F4D3F4220074ED34B19BF6E72F96CDA75
62551AC55BA18D3185BDD19F7A46C2E1B409AEBAF4BC2FDEF2B54DB5FE030E3C
E0A5954F979B0D27866BCD801C6834E00167BC5457AB15E5838DEB19B897914F
8C8D603C77D91B767AF96F2FA5A33E485EC9401B671ABDC575C3037ECB04AED3
4A394395C6B21D97AC7B659D1B9A19B97CBA565D347B3E1EF1C250BF29E66322
722FAC374BCD5A269F87BDD66AC6DE4FEC7C777576418BB701186D48BC922CCC
35F0F0BA7847AFA35E6FF6F6CCEE1F5A0F253EB373E940F9F949CF8B5B308EEF
B4A27E5191D7EC999C97CE349C2D26B1AB1952A24146B8A2EC578A72FA52A48F
A5C0A5E78045E1050CFF9088EA95575E512ACD86E74848CA915ABE7CF9934F3E
F9D7BFFE95682365EBA480DB4058C6AA543449BF42F2023164C2583ADE058629
C41D732B447153D4B3478EE04E9C73956BBE46B5111708A853BB58C0D8EA9B4F
9FD89D563C890AA4433CD210E741F6927E33E264B4C979D4CE9C7A514817BBD4
C52478141A4376829C6164D6C8F0FE9C49B9790C5AA809378F6A5BA6C04672E1
AD0F3DF450F82A44A77EE73BDFF9D8C73EA6F24BFAB7848EDBC189680B9D79E6
99F7DF7FBF491A834358635E687AE0F130EB1E78E001AA19767467BADE4C0841
2BAF6E170E4D5308EF597DE21C8B9B97E1089E2EBC00269A13AAB24B1B133B8D
82BFF6DA6B2FBEF8621E4E6A205C7CFBEDB79F7BEEB9DA97DAF19C7A762DC4EB
DF7AEBADB0DA48AB349542659A9098EAFF11324DFDC13D0AEB89B10B913F10B3
27A400AED1DEFD7F57C078DCDE7BEFFDC4134FF00E782243AF5C26EEA13677D6
6E69A54A414D7890F48E549F6A7B3348E7913C96720A7BFDFDEF7FFF430F3D24
F01773309C79EEE0894C5EF271F7DB6FBF3FFDE94FF7DD771F8C954F7FFAD357
5D7595CD7F69E79E151CD38BD842CA1604824DDA90786385EFE4C488694B4133
BC0E368932643CE4D0BE78C4F1C71F4F1E2E139B1DEC127FDA69A7C97CA1BC68
6BC58A3B93FFC4AE7930966F140DAC10B46A269DEA6E058D5CB6E9B9C16824BE
BA3C6F54284D35FE8A4C93663DED9A7CC64041F7CEE9DCD85782AEEC5838B7BC
764B3E97CDA5BC7AA5DC0A5A98BB8CE760967B23F6CBDE72BEBFD958385C1F58
BC5D75E366335A378B3BA232B6A0D52CE60B8D72B5E6B7663A50BA4E4FAC1433
06EE2F1CD648417B6E1460AC362A3B167B7BDD8253F547FDE646535D6DCA9488
9942BEBF529D33BB67EBB6C1C5F3E70C6DEB87E65E9C8FD8055AE9549FDFDC66
02AAFAAC9BAA077E54740429548C0227F0B9474786D3A9B46FC2B1363B569702
9314A7D1D81230275A88FA825AB0D6647DCF2F9A54D9AFF7E666F5D7464C66F2
40153E1DC694B2DE2227BFBE54336E6B5690ED0BEA70F27DBB1C4351473A2790
30AC5927D2D0C6274B2FE244C0E686D326FCC1E1871FFEA31FFD889DC2196BB4
DD3563C180B11F644633F345BD2261A850A22AC2253329EEAFBBEE3A988026E1
7852C3798CE4031FF8C0E38F3FCE30E179E79DF7D5AF7E951790F9875486D097
D8A244C9D8205646D11451A3FA541F718C93749BB65EB0A14CF82704F29D77DE
49042BAE676052CDA68CD5D81B13C817A74F856388DDAE52603C9DB8748643F0
575CCCF0950DF25583F6F7BEF7BDB06648142A63CE26733649BF2301CAC444CB
280BC306E262E2F5045BB949631BE519858276ADAE33919059BC783169B44C9C
F6C3774471826171F6B99F6C68B8B1723036CF9993905E71465AE35B70F0F78C
C46A6704E36984F1C3B265CBA021687110768F6761242FBDF412FE6AD3825376
6BBFAAA59D4816B5476DD21611A272D67818B4BF191755EBB1A950CD72F15542
8041B2B580B829DA40E78C98D1B9B1791E6CF638C7AA2877C7F700B0E142133F
7620A10D6DA87A09C676F8BE61C24BC7AFE31ABC3E9686484B5C86D19E7EFAE9
37DD74138BD0C4E0833FA987B1CE861BB7CFC25CC929A4B452A723C2389945E3
A32FBDF4D22BAFBC92C7D5667C14A1152D003AAC0C19A904DE2E36A0F00D121A
3C4E38C6C03824CF2D06C64996374F3033C98CB04F48786BC637E5DE79E79DB1
0FB997B858175D74D1CD37DF4C61C70ADD975F7E792C449C0062D903FB9E7BEE
C15410CFC2B7C67D60D55161E3292FBEF8A2B8E444038EA7B09C97D1020E8627
45FC246D5579749769B95216885747875C68E1E8267137A4E38E3BEE6B5F7DB0
23978D1B58FA1DE96C572B6C042D78C4E942AE65A25E814E100506CB2325D802
BD1D79B7545BE41552AD3ABCDBEE7477BE39DA91E9AC36B0D8B051329566152E
EE92454BFCBE7E3CB35C2DED306BBB8D7D5B61A63D5DEFAFE5331131D9F048BD
D10C7369B790DDDC370ADD3F2F9D9BDD4A43BF0D9AE6DC9D767C116BE1A4DC5C
6EB05A0A634D3C16D8A8D5A07A5B7E339BC936FCE8ADFC88C1213E1761904967
6005CB0CC74230EF3E668834A6D4B4D37CC2F1EDEB234C68B512F596883CA1A8
D1442A939E356FEEE60DEB8D978F061AF8C60DA8A54AD55A696008068909C234
FCF694D7747DE3846E26DD9D2B9686FBF17B2C4E3107332333522AE73ABB6BE5
8A13362852DA7A0AA9BA4460088284DB2237B61F62CB1CA65D79B8747068B888
C30B06FA33CF3C432C08A5CD92254BB0B19DA45EB98DE0825F877C80018173FA
D8638F3DFFFCF37877EA45DBA2A5493431EF6B2C1A3B2A051C81534E39055602
D5A74948E8F8757EF18A2BAEC009E2B4E09F279D74125CC7DD77DFFD2F7FF98B
195FB2CC6BCC148DE4692EC8BA250A9D8DA1D47308B77DF6D9674F3EF9E4471F
7DB48DEFDA9E6121BDF15C4C080D14B233493FEEB8E38E34CE8456E3B6A497E5
705EF06595C06EBFFDF6471D75D4F5D75FAFE709644FD1A6A88BD0A14E523C6E
0F94B3CF8804AB2914AFB37DF9B6A40525AF58D698A287785ABE7C391C7C322B
F1976EDC428E1628C51F06A98CAFE815E5A5B17B89CE15076CF748B8E5965BF0
14936441B8CF9CA9EB80A9D2C8F0AC3486490A79C53C472003137B61D22C9380
3D556A4DCC6DDB3B381CDF1A73AAF1E8C0F018532D292928B2595A45541B6C7B
8039C7217CF2C927696629CDC919A3A3DF6696C29D3DFBECB3D57ADA998CAD9E
DB5A268510A49C19FC950158E96C6E591D78352A507A468246B88489A782A136
C57938FFA246C2D8F06AEC6534916F4B482B2EBDEC62BC23440CA412E927A1AA
615FE34AECB4050B16C03A61191584082EDEB061035EE481071EC066C0CD7119
742D1E87AF3FF5D453307430AA75EBD67DE8431FC200585ACD6D7CD6596789B7
55BCD62C07B0C36E26A198C7BC61244296C1D558B972254C408658281728DD04
7D8FCCD9D1B84676B7DD5E78FE6F9908420D4561F28ED71191F4BA4DE8813088
8A833D68C2E880C0C2AAB68285BD33B2E5C68EB99ECE46E03583742E35DB8D14
03DCDEEE593386CBA567FBD72DC8751E73ECB1FFF5AD471BB5A6F9FF587B0F70
CBCAF26CF85D65F77DCA9C339D3230D2040CFEB6200A8928516330B1204AB160
45404054B022360615A4D81021894010F9E3C767024413490C2A1A839F28D261
1818A6CF9CBAEB6ADFFDAEFBACDBF7EC3367D45CDFBAE69AEB9C7DD65EE52D4F
BD9FFB89B25A50E927E90E136D0ED2D64879DF7DF77BFC91472DE2CC377125F8
F2555FBDE07DE796FA69238A4757AEFE3F5B9E844D510B4AF84AD724E56ABD6F
52B1D3049E6F0B02F33519A796D23283D76E13C5B114B029A20B2EDC34F91F35
631056882D7EE7BA850E0D4FCDD8F653ABF6DE1BC30E99F58ED3DEFEF5AF7DAD
EE572CF96816E1AEA57250B2E5C2FD761CD981B763EBF54D366B9B6BE49E7D29
CCB75842918727C79B767B51CFEA0CC3F6A6928A949CC6092EBA815C9752C355
C06E70C814D8052FAF70E37A203E03AF86358345ABACB9EAA0B84F19C0A73825
171529E1D480D5E4C69F254B29BA0EB81B930B8FB00939F13CC7A5EE11AD3AAD
643A5D74D514B872219F69C1EA2CFA2A194984AAA91CDC9FDFA75CCB40B02437
0147D3D92D32A4CA27924BEA96CF4CEE17C2ACE81653D14ACEE30AD0DFD8F5AC
A1FAC0073EF0E94F7F5A6026426184FFF05C482789F229919914A4F025004F8F
AE40B91BF222ECCD959203A9082A95673DEB59F7DF7F3F5789C02FAEC5C4C02C
1E202B5AF291A3405C33E2C9E210D3D3E71570CE6B5FFBDADB6FBF5DBDE7B4FE
F033AC8A7FFEE77FC6DCC36E8269A34E82D4BEAA4D72493E85CE5D78B09F3CBE
FBD9CF7E16CE1C9B841033CC1589EF32F12C9350AC175A43AE4A932D22F4AFAB
7755C8BF078B3E73086EF45EDC481C3D469F5C266A55AD89502D2D38B43D877E
CFB5B79AF9816B4A40B8A00602AF30328C5D0B122F1093A0CB32B65803A0EA46
0E1443B27C179E067D8CA173E3D5AE6DEB2E3C1112B984B4DA96F8E4E4934FBE
F6DA6B21D3F1D8471C7104CC7FD64A31BBCC8813818BA6B0AC8F3DF658D6E672
EE98E1C3837DF7BBDF65BF2646D49971BFECB2CB48C54E5B84AB1DB7F8C10F7E
C00A51C6034C9E20307923454C13FECA7ED5F8962C1BBE1D197FC8ABC5C665EF
78C73B2EBFFC72E5087132EEA20884CB71A6D8D29C204B73AABF7EBF5C0A4D9C
C0CDADD87CAD37E68561AD028536DBEB28459DF4A356B7FBE7473EEFB9871CFA
EB7FBB6B72E3FA7D4C75AFDA523B479D7868A439313BBD33996A56862A438D7E
16619FEF9ADAD5ED77970E8F47B3D1F0F0E883939BA6CA95ADA63B323EB67DF3
B69EC92A4375AF51EB45FD5D3B67EA3080FC465C0D6702D3F56CEB86A89F64E5
60FBEC54AF90E6247F1E1B199D9CCA3B01FB15BC826D6D177A54C096CD3F7F55
D757231104A4D66229AAC50EE5265D8BC7625FDADDA52B566CDDBE159EAE094B
E3F54632DD3671543359DD84555BCD15D998BC1F42CCF5D3C42F079E7595BDAE
C926927826E71EA91A6FCA78CD469385E3AF7EF5AB6FFA871B43DFEE8D566457
E92DB7DC72C209276055101960F28831960A991C842E36BB43C32C54C02E132D
ABD4F0578AD31B6FBC11BB403A8969115ADE2E47ECCB5EF6B2FFF5BFFE17B721
911F0CEC8BA990874800FDF93D7F2878797DF836575D7515AB89B4C1E98CE2FA
EF7CE73BBFF4A52FA9917CE0B47BA1FE537F52CA1995EDBA72437A648000CACD
2E317394E63C8F0C27A865AFAE4CEE39D6730BBD250A3FE3F08EC993E6107DF5
AB5F3DE79C73C839484F80CE2ECD38551BE12B78F7ABAFBEFADDEF7EB7E7C663
F140ACA8D198AAF889216F868E212C30850C76338EC10427EF472F84D10CBC27
C6FD8A2BAE20391CA7CD25A31858405C5B6E1ACF35ACDCD174516D302EF09C98
1BFA9D6E1B635338E2B81764E89D77DE49EA73BCA35B67C66970895A7E2F17B4
D6166E871FE876D35E6110292B1A6840C4435C9E75D659F8F994534EB9E1861B
5C3A0BB5F818783529666525FD829475B7CF43231167C214D8B0610345394D30
DCEB231FF9C8E73EF739DA0D34458952D9B469930C404EB178E094B01C20B472
E348AAC155F5B64A9EB0A3BEF39DEF60AED7AF5F3F5041CE1166EC94A93219C8
2AACE42391B9825B459D2A4411BA7091F010DF8D080BB5F499B4C33958819C5F
329C0F406094A9120F3E4302AE39C23F9148047B950A9B76D5ADB7DE8A3F4141
624DE2649187E03A7830165B73D3BAED9E38B00C9F240E4D37CE87B980BDAAAC
2749A0B29CA99BEF88CF396EC71C73CC1D77DCB1706D98025BDB1C1EC2644D4F
4D0D351BB16D6E1457213733681153F24378B456BD51E2C03D8EE2154B1AFD56
A79E999571704038BC14FAAEDFEB9856C3349AE5E1D84BDA713F2D7BF87F269A
CD2CAE1A0E56343E32DE9BED8E8D2D7F78DBD3DBC3EC89B89D7B80B67B71CBC4
5BA3E4CACB2EF9E8FBCF5F39325AE9C4A5B1D187B76C84A21BADD4E10CCE1808
B5EA8E288FBBE6185E93B3D6ECDAB1B31FF76B8DD199D6AC6DCD084FD8AE43DB
F6C1D6EA9A797953EC4A2C6FCCCE9EAB30161E0CE470D8B9561935094D189B74
C9EA1513DB36C371F5DBFDE526AC59DB25AE1BBF1178419206963D1BFE7000CD
9BF8516875AEDFCECC2E13B76C80C18397FB7062D572B539D4CD55FBF2E5CB26
77EEA8944A7ED9FA4FD0FD5A6CDA140C3D92AE87DB59EE9D5980F6D720B846AA
37BF9B35332FECFE0BA30DC290A02157D212E7453A49C6815D6A462A08065758
A6ACECCF805BC59E28B4FFF00C6BD6ACC15EA0F52966241C471F7DF45D77DD45
794B2D23D3817A1D4F7BFCF1C7E339050BA51C7033E27842B6BFA3FB3190DCE4
75F02DBC32BDF9D7BCE635FFF44FFFA40E572CA3672A5ACFA69E2EA6F0715D51
469416398FA9C299C32666199F63839343D42512B8F0C20B593E0341318737A1
67C641E11B320427D784D3C93427EF4D96280AF4A2D14AE6A28B0579A7EBA3A7
A76E9010971922D06996B37C510A602DAA392E3EE1603134441B9F607453444E
3E991F449D31C32171E626CFC8F1A4EC3577A95A5DBAA9E23D80C8688551F6E1
F531CA9C06A955FAF1344DB85EC579229C8837BF0C7A602F713A69AFB94A7AE1
C118039E8175E82C16C4879C32FCCF96D10C8393A380349F14DFF8C1D66C14C5
CD540622DFF08B7E41320B8E3AEAA89FFEF4A7B475682AD2EC50F52AD9C7DCA8
388697FD91948C77ABAE7129FE89CA12E6028C062C036232F1277E5DF87CB380
FD47BE2623662499635A08377271D7F8E1B5AF7DED2F7FF9CB071E78209BDF40
D438C936E242D9CD90A1721A55FBECB30F7319B8F2F5D75FCF8D4A1781611518
C2B8C2CF7EF633D90ADC3E620DE33B1276C0724C326131C46D722A4ABCCB4927
9DF4AD6F7D4B4AC5CD9B487E2902A606E92CC0E344674E4F0E9AC5E5EA1CED7E
D4EBFAB6097A56B6582ABF09E720B3BA815D054D929683B056AE64EDA9343378
A66706CDBD9360D4244D531EAA37A34E8AF3BD925FAA56A67AB35BFA3B7C13AE
5AB67A3BD475AF6B1B1445A65CA94F9B6C53D6DBD89FA995AAB87D278BC366B3
13645D93B4A6BA4BFC60556508BF6E9C9D5ABD6AAF5D3B26FA513C6BFA7EB936
63D25E3F67760C4B78B5FDF65D83BD69DBD20D2F99989A0CAB9538E9639D85E5
52D2EB873E14A0EF5684AB28F37F1082E6A453118A1827809BDBA8B5DA336BD7
EEFBF4634F8E19F327ABF69ADEBC156E38E4572D4B4B990D337B790328DB9C31
FF87039205EBA36BEBA4FD20F51FAC85D3DD6E14949A4BC7DBF01A33DBD2D6FA
CFB1DDF22CBE17DE021EFC95575E79F6D96753F6322E95168DBA17EA5DFDAA19
67C617EB012B4D512EE3C08B8CD3AF1DE32638982E2BC8A488EEB96554963320
8524A6A8F90439A4F3FD8637BCE1DBDFFE36638774EE21B2D4E8D66504931251
C1159E8D85F2AEA6304EB7471EDC41F25625914CE1E0D1EEC7BD18E5955783C7
C393E0E2871E7AE8FDF7DF7FD14517414DBA602E53F8BE7C2FEE383EC669A79D
76DD75D7A9820B87C0D80CCE316C40794B267C4A603BA0071C7000A4366416B3
D9260FD313B885FF2126F094129AB8D30F7FF8432C4DFA16C46A335E2FFC9E9B
D4A44F8CC93EF7DC73BFF18D6FB09003CFC759E7A4AA2489EE173B019802B38E
4F582AAA09F60B166F9936981BD10A1A8775C5143536B81D7623633BA2201695
891BC371BD9C3D705913E88B0541D6305C47A5F4AA1C10572AAF26E83C71714C
CE2F16E276DD2055FA63D10885BEF07CC643A0A8785941FE682AE905D9E2C32D
46A49AA725EB3B2D72DDBD44E5C1102E96111521277A0000EFD64EB846AEBB93
B9676800B152D6388453A6E08BC6F072E8545DE0B29DB8B92253187CF8D30B5E
F082871E7A087B43711DA9524E991BA1C5DD7105C63C9883E0EA12584C91768D
8642FDB4E83FFDE94F3392C62A405CF9AAABAEC25FEFB9E71E2CB6E73FFFF9EC
97255E2DE5DBA8745D2758997B06F0A9A1614713868A9114C30EB3CE42086AB5
D01897432F11F0BB005AFED9D8F8381CCA9267A036E071D74B956178F0ED3674
6AB954B6A8E624AD972BA343C3FD899D2BC6C6D25D536371B2CA9883AB2BCABE
D9DADE32EA2F85CE6B47ED69331B9AF2E8C8582F8EB6B5B6F89566EA07B39D76
25A846704D479A8FB6763DDD6F57AD2AAD6C897BE530881BD51DD3AD5A6082D8
3CA3BE647D7BA25AA91EF3D297FEE4AE9FF6D3AC6DD2CDADE9AC54EE477D3F4F
9456CB15965C77DBEDAC54ED45FDDA50B3D3B24B25288552C0EA824C09BBE7E6
287B3E709137BFF9CD9087B06569C8C2BA6BD66BFDE92988F0B5C3CD787AB669
AC5D1258F3C5B27AD5ACBF6E43E47D9345B0FB31B0B93EC63668E52AD9F64F34
D96F7CDBEA78470A2BC3AF2C59D26BCD5CF8C98F7F69DDBAE1E612951B30BDC5
9052965329291F21BAA4C5E48664A9F63BF60E59EE716081EDB7DF7EF058A880
59F04390A66C65AF6097649DAE4C7FD5CB0A64AA6DA89F07961CB120A6E82084
FFB18C712FD511F064BE9470B20338705E5F1BD9CC27BBC5436277509EE3FA37
DC70C3AB5EF52A533016F08D4CEEF8F15B64C8812E902324D25CB91C5C007848
765BA10320DF92D711B284D86CD620402DBEE73DEFF9DBBFFD5B16079F7EFAE9
F006714D5C0A263BDF08E7E382840D6155CFF5C495EC8374A6EAA26C65DD1807
82A145A5A999E3249938097B39F17C61852EF12D5C13EAD3CDF3634C0F3BEC30
081752B6EA43B57038E69863EEBCF34EB8EA9FFDEC67393A74C4DD9319EBE000
519E2A2AA2E6B549D1AD889A80E0856BAEB9066684DB6684D75433064642084A
5C6C03437D624CE974A679EB2E46ABF015865C244C99BDC087A41AA7F6FDF8C7
3F0EC1AD8B0F04543D6F2E37EF26C8315BB80EFCB6DD3E8FB2ECEE8157F8C007
3EB06EDD3A3A85787D2C0BFCC0D123AB8E8C38FCCA56D51C19A5758DE36552EB
D04B8092C04EE6E6D97FFFFDB1C8DEF8C6379E77DE798CAFD2FFC06E8735C0D5
89D717444E8D29F5E20A2B310CCBADCE44C611471C71EFBDF77EFDEB5FBFECB2
CB18ED906BEE3945754A41E1A6B8B5AA7A589BC8EEB0DAED748E8520130A9D29
22F20FB8F00AC5E759FF80EF721740D9E395C94240E18569C5C57FF4A31FF135
F14582BC7435D62A704C08B052ED0AEECB07738B91041363944C6005229F496F
C91C957840D92DD4356D597C6CF76FB91447117CA2D6CC6C35B46AB9562A37CA
55ACE0CC7665B5B8212FCF0A574D580E4B61DCA958CD12BDA0B97ABC9354928E
AD3BC25F4C10C570E44AE54AA907311DDB478DD3A465A252B9D683051394EC88
371B8FB5279E8ABBA390C2F591C94E2BAA95B7F4DA49E0A5FD6CB4541A8BBCB0
D9787476626973A45CAE6E9B9ADA9E74CBF5DA647BAE23B597992889421FD65E
0C153E1BC336F257AFD967EBF62D51A7E38741DA8F1882A6352681EB96C9FDE1
07EB732013E457CD6109CB7EDAEA8D7966EF4A2DEA76FE74EF7D9EDCF8D4B26A
D8EEC6155BBA64A3D0560F990C4E4D025F374EAB78A234EB5BAE1483E72C6536
36FD5439DBD84FB75BADEC75C352E67B4116A791DDBAC46F13C44E343B45AE02
4BCC41B081C742B9A44CE7801CC022C7BE83B0D250B0D7023E67B7793511C241
2300B7639887E7B31864E148064587A5AC206E33F381C7DC80B8147CBC7FFFF7
7F979948AC0FC1CF10082CC42276840B551141D991984A7889F7DD779F2960CC
4C16B046068FA7BEBA7C06C5CC4920415143E7818122BCEC05175C80DDCAB0A8
A03FB21B781115D4D0191BA85A14653421D04A8C9202CC14E12846AA0443C680
60CFCE159A7250B0B7F10EAC1F5717238CCE59679DF5F9CF7F9E74FC50A25CE2
3C59B537B896C84507EC3297BE4A9D8A094CC5D8B10F0C1D2642D88D037C200C
8411C8C021D756F9AC8BED92E582A54691CAD4375706C1B74C55322DCAA02E3F
24A014DF2586C5E404A182202D56F6C3E951D19B29AC3C771B7395244E5F2028
2D169BBB3D3716469E3DA7D2CE2F1A606064F0762C28DAEDF3900E972153DA7A
18C94B2FBDF4E28B2F86F2536E090B82094B3C15B3417811CCAF48425491AC74
382D09176A81AB3DEF79CFFB977FF9177C2E51450388D97405ABB9A2984F7AE1
0B5F08779016006E01B54D675DFDE35CA9814F04B9FCD6B7BE058FC41489B181
B8BDEFF445760B0DB95171293CEAAF7EF52B6C0301EB8805A3E5CEA6BCC42864
4E6B6EF174AA73254609BFE26A3FFEF18F8578C77AFBEE77BF4B8B136762C031
6277DF7D372D2D2FA70063888F5639C6106610EE082BF37BDFFB9E1B3A66D8F9
E69B6FC6B7700203517C5416C463103014B045CE39E71C5555724CF016B838DD
1A3E3F5F3071DAD5D91A92219B33EA6027964B5E92667152836D1D94FCA857AB
59750EDFD7C6A5FDC040A9469D86C9563497859DEEB357EC559F9CA942C7FB59
3F894C92750C947150F12BB65B12E13F590CE59C95C34E924C745A1D93F4BCEA
F672BA35EDD4A36CBCB164476BD21B1A9A30FDAD33DD914A58F7C2655DAFE3A5
3BB25EB55C6F3487B74C4D4E65FDA9342D57F22885C942ABB69266A54EC4E9CE
D9767368E819871CB4E1A927B66DDA54AE56FAED4E2908A324AECDEFDC2556A3
3F4A01AB3C0F73040F81A1601B7D29994A6296A5E6D091B1646A177CDFD192D7
89B2A60931804D3F2C9B141649DB24ED3C0A1D546AD50C464A1AC1ECF132883C
6CCE304AB79A682B866964EC81A9C909EB3087397A2BEBE5BD7A1885E29C62B1
BDF5AD6FFDCC673E030314BBC6E4B5820CDE2E54C09EC3A2658A748CEC0F8E0C
269744981008F0CC145262460F8B0A6E097E86997BF6D9670FB42A125E929EA8
29786179D301C0CA40B502E93669100BE1A59A284A15A572C53AA9830E315FC7
CC8F6EF210710D9F96704BE14E54044845C3740F814D6494749B88F367D9CA54
D814957A5321CFB5EFF03FE5038617D751D1E68B5FFC62080ACA0D4232198A27
669BA8146FB1058A1161C527E3AB546F70AEE156D3F960000D8636CC6D9CF68A
57BC62FDFAF57050F0641C083A281407D4B87461053CE340733A93A287E50025
A10E7E912549A608D6F1EB8CE305F90AA6DC812274B3111A325314A767452F07
051C08CDC7FF2ABE5403BBDD1E5C19DAF32A5CE12DB8E0B8B6A8F0948413270B
979752D182F651F1739404B7A3227753B3D2317A0002978C130AE6AFEF7FFFFB
B1A98C03EB38E594536EBCF146FC153BED965B6E814DE092E852078B828A6FEA
B6DED48AC7E2C3B7941B6634C2E4160C16314BEB9483A127CA98BF1B3A1E2833
70298D8484A2534E624B6D788D83F62D5BB6B93010F1B72892264EB8852C2BAE
C5CD2C118C2A9CACF407D7EDDAB56B69B5C858C139FFF88FFF8887F9D4A73E05
F3F6DFFEEDDFF045B6F29611C3D0911BD663BF3C1101B2BE93402D3E3C09CCC9
C52DAB42F5577C546A08D991CCBB5F75D555679E79A60BF1E33A61FB1D966A6C
7AFA29B88D63F53AD4F08AF1A59B366DAC42C6A5493FCDB08BC66B43A5D4EBF6
66567AD52CF06B5EB63A2BEFE755970441D78B27B35E3931BDA8572D55866BCD
89E91D23E5E1FDF7DE0FFBEE91D6B6A81F25265E39B64F36DCB8FB8907CCC8F0
86A99D4B8DED48581F1ADAD69EDE81F12F59777BACD698E9B7EB263051BCCFDE
CF583FB1637D6BAA9F076CB5F182FC45FD6272FA491696CA5E18C03CB0E5B426
F5F2E46B5AAC224D2586F7FEFBEFFFA315702530FD38482D242D815982D14BD8
4E3E1ECBCCEACC5B05399BB36459C4998F9F6DABA69A0D04D8C5D0EAB6E33C2E
5DAF84496AE9B3922C2732F46CA41AFF6F8D92E92CDDE9998992D9EEF9BB3052
36D65031DD099B07F2E0F1670916B06F22939A3431D1EFA60F4B05EB873D72C8
82C0054999EE15740B02D5AA8589BB9DA50F887054F53925153F3185F1CAEDE6
52BFC545A76152BC512078F35B7F7A05FF149FCAED21418C950293D2DC94C07C
1196BC534AAB8C45958A8C35B2DF06AE40363197C15E0DE629A9DEF18E775C79
E5951CC00F7EF083B08F25737865EE2921763D87127140C64A40B92FA5B80B4D
843DF40260B60E8F84EDCCA1833FB6A8027639CC3876E4C4E053AA2882B14D3F
6FD84E174A076D8A534F3DF5AEBBEE6234831E123EA77DC1E496B68D8B2C5878
D09F3085832FD0B28AC3A8AE88C275096224B6CC828A759C497F5AE072759DE3
15F6E001FB4E1378F9F74256B3CC0E0FECAA1FCEABEBB7D124C499E444952EA1
0A570458D84256827160D3F9A48FAE93ADA6CE0CBC93FA4ABC685EDE6087F7C5
6AC66313C8F6F18F7F1CE6365F4497E5EB08DE4C25C1BF62FA5EF292977CFBDB
DFA6B1E2E632156330F3A1DD6E0FF0CC69652A1C045E8D0D94588426B6135194
C88AA2294DDF5A58B9CC212DD721F4A3571007BA3D15DC15E22D20C362F84499
72AE1606B5DCE5075715A60C24DAADB7DEFAFDEF7F9F196B1AF58A96F3CA5FF9
CA57DEF39EF71027C201C1CB72CAD4E191C3A255A1F28FDD3E274F26A8822DAD
58BCEE0E0293204F3DF5142FF2EE77BFFB861B6EE8F73A2BC7976DDFBA75DFE5
2BB66EDB1AE41A65BFBDF782FB3B3B31E5C7E9587378E7C4B6657845138ED5AA
FB9787F6CF2AF57E34D19B99C83AB5D072A78C0E0D57FCD2AE1D3B5B597B456D
59AB33BBD1CC2C1F5ADE8962A882E7FCF931FF70C7F736A6DD5AA53E6641C2DE
E6B803DF7A479A04CD72DED7A1840D5049824ED25D36BA7253AFB53D8DFBBE81
3668158FEF73064D118A4CE16397FC52D887A9902BE0001A2EB3D06D39BE9CA9
830F3EF8A1871EDA830DBDDB230BAD3550CEEF6CE3E4B6D5845F35FE5E266D1A
6F8981CB9BD60C6942706F534F4C1EB1B70A7B6E76724AB07ED485EAC43F6E4B
A8A3B23D2D4BC3720B8E8D4961876E4FCDB62C9B819F1C5412AF63515A360D90
17DE047E8C8BA5F1487384C820975A475E8ABBF25DBF5F5AC10D1FAA5894BB55
0241EFAEA01D91C02E57B30A0A241918FC13A3962BD35C49ABEA5693DBE53405
7030B32E94A512CF824032B4CBC58C27C187DC1D8CD5C91F80AD79DE79E7519A
B1FC928E0461281C0A61189552E4876EB11337B571DA8173FB53D39BDC1AE668
BBC93E9527294E2EFEDD81438871EA9D97BEF4A5F7DC730FD4DFA20A58834EB7
92BE822BDC5D55C4E116F7105353D4F3ECB443D837F1C69C3C0CD65FFDD55FDD
7EFBED642726029636FB620ACFE43E3E2ECBCA6E4659C5F0C0F5648A526B97F1
CBCC8FEE425B6779DB09B7F649D5C6C42A331439D0A264E180F2455CD5828B93
448CD911D97A032A410774DE05175CC0CF99181601C84273848A568BC0A58C5E
B97225843E17254BAD7011B7CE585029E5FBA99EDD2837AB78B94B55D8CEEC3B
F4223E57798F3A8B9D7FFEF9EBD6ADC3AFE469E30650E725E36871E300DC5CE0
1B17BA205A0C68AB965A88471527689F28B9C28087B8DF5C334BDF723B74F1D0
9499F9505237AFCCD1633DB7A20B8C81A705BF20460386C8CD37DF7CC925979C
71C619EA91A5F839C699E74331C35A35B90B42F403CB18146B21D49F752F038C
578B190A0A380BEFC6783E33BEDC959C534C2EA966B8D12AE57066721A52A759
AE34ABB524EED1C5EFF5FAC3B5FA4CC7160E0D79A5FDFD4A3F892002D6969A07
98DA5092467ED2AD78BD08FA0F9E56258DE24AA9BAB5BB65993F0EE768264CB3
209C4E7A3BE3CED27DD73CB4F1C9569A34478693A989FDC656ED9C9A5AB276EF
7B373E3169C5BAA9603326D95EB5B1D00BB3E1FA6FB76F793AB19E0E061A46A8
97CDBD2F75307EB5112328B8B064A09FB218969767523FB5DD15A1AEE408D2BF
81B0DAB061C36206F4624790B1602ACD3C5C382B67D938EC0F533AC42481756D
63DF6A5FAB803D7AE6293FCFD5B017E44EAC9FA4E974DF2A60EC372EB89299F3
80874B96D9AD9F669DCCECCCCC2693EE347EDB0F770691F5B3ADC39D2F3C1AEE
69520AE716ADF013A6E885EC3A9DA6083B73DEE9D530E5C19F6172BDF39DEFC4
62A3CE23BE048BE7D8638FBDFFFEFB9F7CF24905A85D460EA6392863098C70A5
19A3F4A6D0DC8CDEB9DAC1C5C1098E40FF9802C72D51215C83D574ECA5815D40
0084902838E135AF79CD9D77DE29761A355BD44DB5CD251E193A655D8C1E46E5
4982569905A55C94E1A6283772215D9A0853F0C6ABE860B7EB2A2DC8B4F975C1
8A1755C0445D2ABE4188B6DB7ECB38559B8CBE623E203AEDF2CA1D0B45ED3519
7C4A2566082A7103477B38C43F4C179E23C5FA19C83B11F57DEC631F834A2332
CD155B3ADC20955770840A469B16ECA32C2F86A85ACC20088AF6737C29B1102B
96AB5BBB9D2977FB5E4C31BA3539041BFB45C7123A3A6C9C878B53831E78E081
9842D82EE2BBC05BFFCDDFFCCD37BFF94D0E290410B6872AD69532142728A358
0C90B2560783C66D893FC151FBE217BF484A2077D7B1B4090FC60167BE44AC55
228210F3B8147056B4B976C3BCA6003A2A5F457C2FA1032CC2535C4BAEB3E0F7
03243EC1FC5648AEDAC6F5857EE2AF1CD5C51873082553428ECF4FB30C6F44CC
94F6959C69BCB8501E7C3CE945ED7C5E47744B1C40CEA90B23B8E9A69B4E3AE9
24F6287451AF0B3D602C54CC8EBA364928935A849F63A7E081699CE17CCBE5E4
6561E6C5FDFE58BD31DB6E35AC291FCCF6FA4B4786833CAC0ACDFA8CB56B8F68
8EED9A9C4CA6269775B2D5ADB41A771393C5E5200AFD567B26B21EA93978EF83
9FDEB8B1D9B0D6DBF6A8159782C9B89F342B8FCCEC5ABD6CC5B61DDBBB59BA7F
D0A884A5ADBDC9BEF1B799B4346CA541DC49F631DEBE4BF681A2DA1EF5EE9DDD
8A678DE056D69AD3390AC6BE6CF63B1D9CBF7E804D9BF95E6212AC03388C5E9A
EBCC22EBA9A9E490FEB121E83C0AE763E19A1043903612B3C694F70EEB6BE2A9
2467FD8873A71C7F2C9BA0641B4EF4E15B94AC269E9BD37E1CB5A27ECF967559
054C5C4329270E817A1CF5E10AFB1563DB28438A6D31E9D6C09F098347A36EDE
CEC22451CC27F672C03ADE902FA2FEF3A24D35858E498BE6015484A6700FE40D
9B3C656BE6B70382B8802B29435F5134D60B3181825F193F736BF3B89CF02BA4
CD6DB7DDA69C20736494F31417ACDC633491CB9265AEDABC94935CB41492106B
8F3CF208DF6E808B868A466D7D49FBF3A1FC90327293743435D45ADB14BCB62E
CA5AC6BAA8BB5C40098D6CB7FF8A3062AA86324E887EC035750FBDCB00E9D89E
3C600A62E25328264441EE153C20BA250CFFD7BFFEF5B7DC720B240861A8C41E
D349C7AF6AC54311A3ACBB8ACF2079CF3CF34C7881BB7D9E97BFFCE53FFFF9CF
59A3A6A025B7DC273EF189CB2EBB0CB6D2030F3C600A466BB7A7BD2BEE21D148
F8677206222E56E20F4987C4FA7D4CED89279E78EBADB7BABD35DC83EB861911
6926FECC77644D1BCB275CF96B1644C24D6149E12B64936659B60B6D50352DE7
EFE0830F7EF4D14761BDFEC77FFC072B6E091561905F8E3B2D4DE62764FDA970
88D837BCFBBBDEF5AE2F7DE94BFC2B5E1FDB529509248CE415B8DBDD7C244E60
D30BCE26C33804E8BB0FEFEADA8583E08652A5CCDCA6DFA2A815B30F7FA5AFEC
06C6077C5C5E590A5866AC5C2589A701C5669CCC0B0D3EB77DF79CA42E1231B4
939807A141C0A69634BA391A98508C246C798A332C424222655FF34C358A60AC
4875046E39CD8002F69C16D4E4E7622B1B21FFB920494E891FF03F79CAA03261
AD1CBA76ED138F3F3E3E34323933550F8217BFF8C5471DF9C2CB2FBF7CBAD74D
734DB37F9E911D36E62033F44CD3586253B769BFE4753C9B23C88B57CDE1871D
FEE8E3EB3102ED5E7BD6F32AC3CD0D535BB35A757B6766D5AABDD66F7EBAE605
6B4697857EB06CD5AABBEFFB3F3B4C12D62B9D760F0F7048B8A4D91CDED59EDD
94749F4A3AB3151801F90C96429316D08DFC07CE53E057A005F10F0AD85001E7
39E0A470A794A8536CE08F3DE0FB5ADCB74D2CC7B5C81C68FC35616D346ECDB5
64F24D989A6A66EA59A99285BB4A51096AD778509C14E2BDA8DF4AE2BEEF41E3
F5331F6A38B317CB2A5EEA7BA6969846609A5EC986FA53B3CD4BB785DE4CE0FF
BA1B11284046042F57C05032E57A8DD4BC6F7BDBDBE0AA42065208A84E495D93
195CA4FBABD21D799C5FFBDAD7205DB9E9C4FF4A35C6458ECB5232D7F2834624
4E7BDEF39EF7F0C30F63211138ADDA1E46C5E91333AB18E4BDB12931F07517CA
1A14CD6654F9C9A21D8178F8D6C27C915A00520E52880F29241404026414EB02
2869A1386891301EC941D0A5284F20DFCE3DF75CB88862D35B4C5372C4249D54
9A2CF8957C592199702F0ED71E889B9889D756E50CCEC1CD1653C00AA341B35E
7FFDF5C659E2D2FF2E848CA0127DE8F2F2133B278629A56CFFF22FFFF2273FF9
09F4874B64B1DB434E1B5D22593A340E38ACA4BF27BE80C431D2BEEE7B51F8B2
27ABDB4DC5EDBB874F588EBDD8F830FAE74A641777670A6233BF68A820BF7F20
2DCDC9A0FA67EE990FC3822522E528FA5909A3BB93D89265CDA27D21AA99E790
C9598A5093A29839D3A8A45FA6FB4EABEB95AF7CE5FFFEDFFF5BA4666AFA9639
5D23315669CE688AF33192471D75D40F7EF0032A15265C99801908EDBA043766
7E5E40B84DFA8558D3981ACA089712561166F6FEC42B10D6C86CCDC2ECAF1680
97F7A162E057295EAF202B308E85C483C2858101ED408A3CDC14E3FCD0430F99
221A8F7370F14D9B36A9059E0A973114F82B06193FB0185D605733BF9D38BBBB
88AC83E258CC097B0841631C706B2E577C0E517BFAE9A74B164B0FF12E948F76
DD6619545F8F567958DE7FAFD58F6D78020371F0BEFB3DF8E413FBAE5C05B778
627A7A4D602331A341F00CAF7E485A1B8BB35ED29B31BD96C94A61054E683F89
97AF58F5E4D6A742CFBA3B33D5605777A267E2D05422639FB5DAC869DB6767F6
5EB1EAE52F7FC5F7FEEDFB8F6DDD3C1DF5A03257941A2BEA4B8252B879766A53
BFFB74DA69875E2FCE461B43D3FD8E542FFDE0B94D175423CC0C3EF3AD6B0C1D
39A08083A2296A5234CEFBE3B42F94A4CD38FB967212539398B5C6C04D1FF533
3FC8F3E19E2967A69AF8E52C2C9B70A26C5160264ED278CE4634BE078371324B
E801F7AC176B9FD03AC1D87799698656014390CF2609341E243796D76F6C8387
0AF64094C46420F1F216CB2426330ED10A0FBEA66C2C3746C5382773B4F28C59
E1C26546C8959B64D11709AF1162115F24528746B00BF924B101A3E28A3C919D
86F50B0325093C58BDE9C2579596C2328606F9C52F7E811F18D956B28C2E9F2A
F509FFC4BD589527AA1C6E4FFC4FB14C1E24314F888487BD70DC5A292F0748BB
C17C8530454B3C30C85E418787FFE1AEC0205898E4720F8E86FA5268E41755C0
5FFEF297CF3FFF7C42CEF010D75C73CDBBDFFD6EF53CD069CCFB7A05288EDA11
23A85222C265692C08A286B7A5A6749B3A991CF5EE2E32F7707BF8F07DE04C9C
72CA29575C7105D5123E616F73DE545C0403AE275EEAF6DB6FFFD5AF7EC5CBE2
2BB82029EC797D2275BDA265E662E3E37253F0EE6EDA6F283F1890173E599772
7FA046917147C1C19A131177F0FA2AD0725932F4339F0737FAD0873E74DD75D7
E11970325606AEE37E8B7B8C53C0C21B3CF03EFBEC0323D7255AA26FE7153D77
613FE2B27C18BAA45A678A03D3F3A6D017F879C0CD950A59F8A116157D4DD8AA
78363CBCBB5E79F0571634BBAFAFCDB370904D5EC20111867DC288AE9246EE69
EE411B9C0814F564C42261FAE3C8238FFCED6F7F8BF7858CA0A1ED8A48F599D0
1E810A670E8FBD9258F84816174E07458CAEC690BE48825C6CC4C210B4925518
3AF9E26C77434D2F924B7678A5EC181D199A9D9A19AD565FFED297FDD36DFF3C
64CCEA652BA727ACAF3FD36E410F4DC6FDAACD40DA3AD711D873263CDC0C3DA3
32EC97FCE9B4B7AD3D5B2A575AFD7664D2D0ABCC66DD7AD080EED910CD362AB5
AA17948C0FDD3C154D8F8C2DDDBC6BDB6C182471B466C5DE0F6CDD88B91FAE36
E0C92E6B2EE9D7CAAD4EF7A9899D1BB3EE2EDB8EB732DA1C7DD5CBFEE26FBFF3
0FC6717F9900B67B24ACF5E2080A188F614F482228CA12965C96322AE6FAC1FE
E2ED4A173D7CEB5F5B17383061D61F49CCBE980E4C3DDE08DEB79795E6B8A733
BAE5BDC087EAB59C62CC585BFFD90F4BA55DFD6E9C59160E2AE020076A05BEA9
A7A609FBB56C033C6D4BFB65F00F42FD97A694057EE4C3BE892DADA667A9B3B0
ED433F9053ABE266692F387F649BA76E50DC8B0C7DA2BAA3E867EC8738676242
D9F0662E109A1BB8B46219C11EC8219AF9505CE3848B59E44AC5E64A487620C6
8391A0975D3B7FFDEB5FAB461F5A40C11E8146B97A0F39E490E38E3BEEC61B6F
64868BD44FA6D0CA32B63020F8842DFB583224D393DA0E363103A284A7D02219
300B162E12DF69254EA0B171D2A0124A04FC1E74D04118072260F4A781439037
1AD622D3DE93074C314721488C99B41A95BF29520B26376DF09410E5184197F7
92CF44E4DBE1871F7EEFBDF72A02CE0F494F28DCD61E149EA26D18533AAF428A
6286F06E4C79623E94485BE8040B9CACB42861539E036F839CC5F3405863853D
FAE8A3BB7D1E563D31EB60729F95FC355ED190E7831FFCE0C5175F8C65F4E083
0F1A07E33D30D92C0833B9C38AC7265B08561EAC0452B5E9FAEA8D485B019FAB
6D1F879A9B908159BC0B2EE8AE1B33BF817C50F45993C1A87602DC75B83B3E81
92A097FCA637BDE9EEBBEF269A5D54E34C6FD3D2640AD9055EBAC167FDEC39E0
3257A1524030604E1E0F3C15C7D373D095FAFF7DEF7BDF17BEF00586316849D0
1A5DCCE349733E6138A0922F030FE3268CBDBC9CDAE4BA133FBFF5AD6FBDE186
1B5CD6025DCA14968D589AC5B3C62DC7EE9990506F7EF39B6FBAE926B211E178
C31BDE70CB2DB7D0600DF296C9380D03FEF9CF7F1EAF468E0272C10FD4B30E28
60EC05A86A059F4D119793D92E2758C9A7B9661B5066BE8F3D3C363CD29D6D95
E368A8DA80BCE9F53BE55235F2B24E12C5707393B4590E473C6FAF9E39D434D6
96A1A9D3EDFD999E1F942AE5594B8551F2C2204AB3384BA16E83E5ABDEF49AD7
DE75DB0F1EDDF8C08869408A4FC69DCAF010F46B7FB65DCAFCC83238FBE5A0D4
48FCA5B5910D417F72767687E9B77DAF550E5B70F8FAE9F30F3BE2BF1EBACFCB
7EE7FEE64227A740B2A0B0D8128694F3745D1A430143A4B5FB3DA5A5C80BC492
C23F960B1A77096D9363EBDD56C378348D567BD972DF5B1A55CA26AB7A5EE8A7
91493A26E9C2C1F5E69A22563CBF52B2E1AB6E6C1B2396C3523B8DE001777327
38CED53A3437FE8746AF07956AA504D716CFDCCB4C2FF37A26BD3BA8F5B2A49D
C2F9B5354F5ED9D2009B28B60DAB8A8C29A1914A02126886CD2E3789E63B573B
73B1142F594EDBA7D8CCDBDFFEF66F7CE31B342529091947C55AC222C4725239
25235258BDEC1EA6A548B5870BB29084D00AA526B9955C335D81404549DD9224
5300BEF0DDD5AB579F74D2495FFFFAD7E956B91595783CF23E49F2883853D751
D3175921DA17C1FC76AE52646E51A832C1A6A88C85203AFAE8A37FFCE31FB387
8402A5FC99FF43C8C381A10FB6D87ACB1CDE46814FEDB0B8693933BF2F022E27
B82CAD06DC58FD6D940CA73D45AC8A60B70C9C6605CD320F06E8BC1CB2CB6A36
BC0C2B3D4CC12AC23757945BF1409363B021BFA8CED5158743CF51234C8E0110
55A652E83CF7B9CFBDE79E7B34F404DDD1C1554343853BE8FC89DC517D1C4DC1
EFCFD500F57CDF7DF761DD93CF85B2928310E4ED2BF0752E2355B55249F08272
5FA89B197626C6876FC795C74237DCEED8638FBDEBAEBB366DDAE4DA130B3D48
2912B7D079E141909DC05378862F7FF9CBA79F7EBA291C7146A2189961DA89A1
4BF537D44D655F2BB033B0D48C13C17681155CCAF2EC35F86E418EC01A597150
7FB0DC9E0EC17BDEF39EEBAFBF7EA09F9AF2318C64B8806A02A715E052BE598A
79B7E567AE0DB1F07337FBC83B6A4D2A876D1C079D22D2E4C9053AC76E331F17
E1C5CC0B973AC40D612C1470F81F862FC641EDE1980EE7D272DB8AFC0E44D3EB
FA9917E004ECAAC083E86D66C1501A8C04F818DA244BB234B6CC1A699E93B0F9
CB666696996085A9C21819CAFC15A5DAF2DA70BBDB494BDED6D66473A8D169CF
4609345F69787CE4A9AD9B563DE319BF78ECB191FAF8780D36C4968A0922136D
0BDB416C1DC1A6659E0E4DB992944ADB67263698D82B85A656DD3C3D53A9555A
BD3E86208432EB474C827472C287A034B7C06803613BE075208E0F38E0007808
18968B2EBA68DDBA759C776E5BAEDE3FB61F30F67023312D3F81B27C5E521A87
B7EB47AB1333522D597CB2ED309867344D16C5692F8DD8E6C812878541C96387
441BA69EF07C8B56CBB2BE2A91F2695D01BFDCCE6529F1FC6E9AC0E0E8A431D6
E513613558BBFAB8135EF7A5755FF26084786958A904BD7E12787C6BD19C61E5
D31DA470937F660A5B909B82A160AE79C566B4C6580ACC70341706E52A4D7C45
5C841A3105BD81CA2E3EFCE10F5F72C925D411F8136EC19C8BE770DB3122C8CA
3D01357811B6CA9628B8F2CA2BAFB8E20A52AC8BF040D5190C6D52200B7E4B05
C1B40ED436FB03C949658A9A5B00F2E1073FF8C1F1C71F8F5B0CE0345D3496DB
4F96F7A5C681570937CCF5275DC1BB50D14A9431B7ADAC998294C681622D0A11
A498C320422E9F76DA69FC502E94D8915CB949CC2A550873F2D49D84288B2F09
3FE082975D7699CB268165F4E4934FD2A164D482A6961209B089308EF813A415
5B265080BAE803CEBDC648082F7C78CA29A77CF7BBDF254D01956E56343C71CB
7FE9FAB0A286B07BDE5D884A393D78B0356BD660E96705C9B3B48E57703389C6
8CBE325906BDA25E5EC6975F50F59A02BEC89FD523D3146C888468ED5601BBC1
1F3794BA18C25C405CF583C2A4FCFDDFFF3DD3908C64AA3180968B1BFD3605B2
C0B519E5595221CD0159E7B78B66A29A8993D4E915CA61579007FF9B3CC442FD
A464B03EA75DE8361B51636D4A1CB70E016792A683CF4F5BD03563CDFC26E18B
852EBD05A4A16E105B9CAC1A76975ACF38E6115D76BFE8CFCA12F68155610AFE
19956D78F3CB10F1822C91E256E234B90FA00C19B7BD7D0CCF3A7981F1523F83
02868AA3025E5ECB891DE0B5E4D0A6C8AA61DB52A11AFAF5D85B62C251BF54F3
CD78A9BA7678D97E4B963EBC75E38B9E75C44FFFF34EDF0433A6D71C1D8DA767
2BA979D04CC3A02BD74AE5A1915E2782AAE926D16477763C320DBF540E422F0B
EDDAAA56F06FA235B3C54BB775DB514E4FBD756257B9DE6875DAFD240DBDB9E2
EF88F8067F4E1330E83550078F713BF4D04321BEA936240AF62028173B1653C0
C39530892D2EDA9EE48718A25E0257386D93341EB211D3041F37B53D914ABED7
4E4D3E8CA63F47046D8D0F18DDE3383F0FF726068E6FD649D3765ECEFC903110
6AF5154B26B64E54FC7237CB210299E5185329398D66D7A8C585FEFCCFFF1C72
151E18F5342D3F4A511682D271622D1CE184F8E195AF7CE5EDB7DF2E1A224942
8E983C579264B1B0C514A12F0A01165998BCA84654CF1083447E5186F3EB9218
69D19F9BB29D5B40AC8B780BB7F4CE2FA8DDDDDC330165A2F1A1B4B9F9E69B4F
3CF144333FC22761A5DDAD86B603AB823FD39DE3B748080ABDFBF297BFFC9BDF
FCE6C22BEF413E50F70BC2499125D62017F3C15CDEBC14A97BF03B9C54975C90
496CC5E830AF0CF19BDCCEC21BF26D290BC4DF2DE00F4503F53715122692814D
B10F0AC0422786521E26D219679CC16723668F8537B80227523E19F72D5D04CF
690942424A957379456DA822F26EE52B05B1EC0C0268D50084AADDC50828EA65
9CCA5789573EB6DBB5432952895AB78B14CD31D69BD2E31498D9B54CDD053428
479C3CEBEE054D5E212A229BACE02F9387AA1F82A2370B762F299DD91F8DDD2F
14B3D54DA5745532242F9FDA1A23C3D811B420394DB1128872C412C269D8CC70
CDB1BDA9B9B11E5833C743517D4E8A4AB14D61292B5E82EBA8B93551272AC035
0ECDA75B8C48FE9085D97AD9CB0375C63274F409A1798C219326CCCCCF34D35E
61C24C4B5D6100F9282210D06062F619245435A0BE25D9F7C217BEF0EEBBEF16
67881EEC7760C9C4C66CE501DB3AE05C012FF56DABE0284DF225E825BE89734C
4AC5D876490DE3E7BD7DD2A6316B2BE3FB8F2ECF764C8EECB3FC374FDC7F507D
55AB6D01D58DDACA473AF65DF63AF0198F6DDDF6C4F44E5B495CAD3DD4ED8C55
CC9A7EB593F54B5E6578E9D25EE0D9A46FAFD5CED149E56A6DA6DB9B34D06779
05AECD955A0D3707F8C8DF945824E6FCF8CAFBEDB71F860E23ACC20A0153BD02
DF9EFE0FA8281751C043156BA0A4B15D28B868DFC0B54DB1B161346569E267A6
EA5968B4855959A45858F1B324F36293F653ABB8ED46F672C8714EFC1027708E
4DEC7B36499C25F0929F0C2A8F24BDAE6F4A5E5809CAB331B4733654AECCF4E6
82799036A40D2761FB1CE23A4F0E32874AE401951916C945175D74D555579116
91CEA2B00259DE5B89D95F52C09E7AEAA937DD7413D6CC473FFAD10B2FBC5055
9D94396290E0755CAE63F78088802EC032A3AC502A90B28EBA5345AA22C0A246
2792912CDCAC71A2C6A1DC763B3148389BA2FD2B0390046A54F283EA4D4DEF99
A6A4A9ADD498EBA598A24CD90DEBE287830E3A889031B244B829DE3D7BC00352
C2755C1595A43AF006A81F5D8F4AA02FEE5ECAA937BCE10D3FFAD18F68FB9029
572DD3CF3DF7DC2F7DE94B928FAC35862425520EDF854D41E7954B0A934D08D5
BEFBEE3B951FD4D00A35C8D0C053C1037EE73BDF0901845FF1DC905CF881ED0D
6816D03CA47E22E3B4C2986E4F1E970B822971C6C009BF72B520214BCA897A39
F73D11D7BC8B827B949262C572F3FCC4E83316C4CF151E7799BF24C4256D89A1
C0E8AD5FBFDE14E69BCB78B5F0185084BF77A1885779002CCA620306FA703BBC
2FD70ACC9D97BCE4253FF9C94F4479B6FFFEFB6342F5D80B732A26B7E43CA719
0083691FFEF0872FBBEC323181D33612C290DC8A6ED36FCA0BE6DD618731F6A5
C4B6E07259D18399A92F5D530E3ACEFCDCE73E878547E5E4024139BF4C4C0C94
2499F9F582BB55C0A68842D35BC5F4110FA122345D50FC091855A6544C6EC8E2
07D56A9BF9AC785E0EE1C64D31E0F7DF7F3F6513A13704CE305A8B6F5D70C105
18585AFA69D11587E330672F864138C75C61EB67830C0AD81BCA826579998F8D
9AE6854699ADC6B149CB91C40BF39E80F0E07A18DB2C5E6AFCE57EB39BF60F6F
AC58D9F3E034B7472BEBDBBB562E5FB17EE3833BBD7A6C43AF71C5787513EC34
9D678CAE988C5A958E4D9386CDC654DCDD3C3BBD39EA41088DAD5CD2D9321556
AB53DDCEF8DE7B3FBCF1298C10BEDEA836DA512F4E625B8AC360553447AC4F0B
FEB0C30E5BBB76ED1D77DCC1C006C699D6BC58A2B8C717A270FFC70A78A46ADD
03982F70BD23CF06963BB9C5301BF86992C2468102AEE42067BC38DCBAF13CA4
1F65967323C9727601BF94DB1376897663BBF262E345816F15706AD69B604B39
9BC8D2AA5789FB73B5C050C07D93D246146645080C82A464DF33EA43518CB966
F72D82F049D74F47C58D60D17DA2CBC1021E8862964E640561838430C10454CC
F8228B7D2187D95ED76D1C2ED978E38D379E7CF2C9AC79912FA73C822B96710E
6BF3702FE6AA5D59A796B5DCB0DA207847FC896941AA247DEB939FFC24EE0E49
E5B630A7AC1E50C0D2772EDD340644CFA636B50A4AED812151C29F5B8F563885
2DF1D87C18A2C10931196400E16351A8654EC35D33BF0791DBA90A6387AB0BFA
84EF5E7CF1C5D0C7AA9C917E9246A4E0606F19F2F63154422028969197574FEF
21B68CBB7CEA539FFAD0873E441F91DA9D75D3F4EE714DA6D6E82B93E44524E0
7C5459854233317493E52CE1947481D3CF98912ECD8D3BE5CA3212696C8A3A63
7EC2F2797A60748B5DE9403DE4E5A57B2E1E987E9232B56EBFCC01E5EA820BA4
33CCEFB3D438A1DA66B452310BC24AB8ED8FF039134E780C9C49CC3335AB990F
6A10C0CF0D9771E7A85087E69AC9A3C158399FCA8F238F3CF2DFFFFDDF65F2D3
54C498B0AB12DFE5BDEF7DEFB5D75E4B5A3BB78321C32138E79C73CE59B76E1D
45004B6C19CEE199ACD2A1F7EF153D07B92DD9B9723105ACE15D4C01CBD7E7B2
C1AC41206AB179F3ABB0F0F399679EF995AF7C05EBF691471E7113E1037BCD38
AD1404AC13CDAF0B79A3C226F08446214B3CD5E0395FF196E1C9B35AD6BA9F70
DD868C379C85ABC3B2ED2C84D18EA34EDC8F4D62F557295C129B20CD4A7EE855
4A3D13F5BB3DE8C36153DAD784E5A1D1C97EA79A7AAF7AF14BFEEBBE7B7FB4FD
D115471DB1A19FBDEFBDEF1D4ABD3561E313EF7CEFAAC6E8E4F44465A861BDBB
5AA5ED250FEFDA8E490DEAC18EB67D841163562D5BB161FBD6D95CF0CD74BAF9
C8FAB1972569B2500133A848E18B6543BE490D9AB2366ECFA83F50F5CE4DF462
0AB8D248A07A7305DC35D6F7ED5A63C54CE5A494B62361E055331F0642296F20
B1D467083A8D7232693BA19E5D1B6139A0024E727016DCD2BEF592CD13267CDC
C451D54FBBA9AD64AA5523086B686E470FC162836CC4DBD132C69BF23521B244
9D464A70DAA3949672BF5CAA0A42284C61DA7239C9BE712349E2A620F489C69C
361D6F2AD42A21C70C232909C273DC7206968972A750F0726BB0E50F45345E96
A04E6A0AD576CB2495C34A62197AE7B83223ED784138C4CC7051F8D0A07795AE
998FA1210A957E173691BEC2B651DCB96E4BC4C5E4AA5F34266794D75516744A
2994709DEBAEBB6E8EA8C82DD9E423928C1B27B13C911F12014F8B8CF15B6297
385578670C0425354FE086C1C42BF2003D247AA9CF7CE633975E7A29AE8651C3
603102CCAFBBFC883C28B8718BE38E3BEE7BDFFB1ED9AF48E74D0DCA137847FE
AF9E019A784EADAB1EF03AB4FED8D702A6007B20FED99FFDD90F7FF8432942BE
322E0571095F50B02CDD5DA02D49520C2C7EE61432E5AC642AE526AD048A0C97
4885CA98B40CB4EBD96596AB44E9998115F07B5DDE818391DB81A40B15D54517
5D74FEF9E71F75D4513FFDE94F09296201922051344845B5EA3928E5C4690BBD
5B101647E6861B6E38F5D45331D41FFFF8C7B3A2693CE387C476322BC1B24292
358A049BF81197565AE62D65040799A07D09203AF12E044CE5611A7686A0DD0D
E61A31D270667E48591B9827D0A1374EDC68E104C9DB56636058155FF8C217F4
788AD064F39B9FEB04AE70C23ABCBC75928CE685BA9C07096ABABDAE0A674D5E
D53AEC85436930961339E1667D3864B684D55829522E0D2599D78B42DBA630EC
FA592BED5994AFADD20956F8F5346A0D0D2F0B0FDCBBB7AC393135FD8E37BFB5
373E16F4BAE1CED96B3FF1996784CD65E546278AA7FB9D6DE5DE869D9B597233
D2AC9AC09F9C6A1FB0DFDE531B7734C74737EFD819956DA7FADE1CC9836D61B0
DB1034631B845BE238FEF8E37FF6B39F616661CC9D7DF6D91450DC2674FDFF68
2EE8451470332CD3728AD2AC6B12D617E199663DFBA05601E79072C85DC8D3B2
1F34BC9421684B079DCF7C982BE05A0EAA8A129BDC8507DC839ACCAC27BDAD31
F29BD694375CED4E77876B436D934001D783B01DF74D91A1B0ED633D0F2F8B99
C1AB41B2BBFE09A50DEDF5534E3905CB89A47232015D949F5754B2900C00BFE2
6A34675D9D214A3ED5E2BFE52D6FF9C637BE31961FAC1021B78CA40AD515B7F9
77BFFBDD57BFFAD55481A247E54663D89C094D3DA1E4F6EF02364E3344B7E7A6
80202E2898A58302E570E36B3BB8A5190BE524DF5106343FC41D49732487F00F
046149A01D78E081E443656C1C238379F9E0073FA839F5C416E6CA4DAFE01BC2
55B0C46FBDF556B1000A2DACA6CAD049279F7CF265975DE6E5F8520C81741EFE
0459A916431A17360B528B1B2FA7DBC6271CC1356BD650FE0ACEAAD6878415D0
A9370EE85CF25DD2CAC5F7E2672878410324E04C4166493702BE29839C4A828A
8C50868FAA0CBD0220268253FE7AD24927DD73CF3DEC5BE9A290F0BF5832D4FA
0ACF79C82187C02652F0802FC5A64F24B79223C82CF86221B58148861B8E5EEC
FCD46982CB720276E962CB11F77DB5463923F2B6B5A6D5FC64000B660AD8B072
C00C180A24823725428DC0783C098BAF38D792056A858B1BB12D9AA261ECC74C
D49ECBD4FAAC673DEBFEFBEFC71D2186C8D392E66CCC9C505A662EF0CD14114E
651CDCA113AA5C594651D6F150D2911A91E68230011C28190AB432F152443070
04B49C1E33250000FFFF49444154DAE9B22B076C9C3603FCBA38E0340B41D1C4
549DD460447EEC631F8381FBFEF7BF1F5B061787796A1552D40F536B71C33983
02867530EC05F08097D8825B68B9D4A2788D97F9B61F00666EBC51AFB4E366EC
95BD60D68B7726D86C26A8967B9D78E5410794960C8D8E2EE94ECFBEE1A49347
D6ECED8F0FC577FEFCAA2F7CE1992B56B71EDFB02CA86D696F8B4D7DB381E8AA
6DEBB52B015CDB14BEA017A5FB2C5D7EFADBDF79CD2D37FFEAF147312E575C75
D53BCE3A0B8F1696C25E04DF370B833910969D08FF77705C53D4651065A24626
26F780B160E8C4780515D4FF13053C1CFA24E3C2DCE43A38637D51370853C8C9
3C535ECE915665CF9482DCABC93DE03C046D6B7A831C7EB7246F76843D01ADDC
33F63ABD3C1AB1A154DB60BAED7218B7E2D0047D2F5F90794913DE42BC4EF48B
58BD297384F61CFEC77222C59297E301951D57C28EEF485F8539573ABEF44189
D1651F58626518FAE6D544F347EBD638F4D4CCBC908B06FB114FC55A26CD0B59
51B9E352A7530E4D464A03E25E2969F14830D01F7EF8E19FFFFCE70C16AAA0C0
5DF3A62870A2A0A6E5CDBE9C3C93BE389F5C70A5852168AF207634791886AA9D
DF5206C72B58BD041ADFEDFA51B9171E0C328D980C4158184124AFF39CBF2E06
1057B27B0555103E674ED72BC802B1C3C95391166D2E685F0CB4F4614F1B3E25
170D3D5A85824D1E5B27A318AD0FFA287838184D309D303172D849C6A656913C
DF2D59E1D0F37F4AEDD7BFFEF5F7E787DBE85194E2528D0C1733939DE51DE868
8251490882ABA9C522A69BC5F33D87619C0A98ADB264AFF1C52994DFF8C63792
A899582A3E3F6C145C9F6B8EF59A1CE7AF7EF5AB50B7B461398C5C1903654503
F2656124633105ACC524820E0974EE4F3C36F72D7E769B154A25BB6FCD50D840
B3C53D80B0B4CDDC4D252B878DD2FC9C7F8E519677BDEB5D37DD74D3D34F3FCD
D7A1B986CF3186EA6FC8C247BE1A560E6C38AC043CB6885479C25BDFFAD6EF7C
E73B2ECC9EF1A2ACA0A85CC810641CAA58E6AD99A0558E362BCAE2895655E113
27DA763EC833DF146AA4C422FACCAD4CA0712D20370359A6E8D6620A78170D50
F9E282752868C4454E53585D6B58C76F6B051B753F864E487A7074733AA96666
FBC91FB26CA5256FE976AC8CCC1B0EF4621BF61D2A9925516985A9364A955993
6C4D3BED8AE737AAF5430EEAB53BC3C3A3AF7DD39B0E7AE6A1D634E94495D4BB
E46FFE127B2948D21A26346799D8550B37C77118993276C7E8F08E9D1363F5DA
92526D6A6AD701432B7F32B3656C6464DBCC7427CDEAA3C3DB27A7ABF56AABDD
B59AAC94331FC1E381122C52182EB797D219B4CCD43B9C27780559ECFF13053C
1A16336EAC4D6013B7B907DCF3CB58C19E6D8C64115861DEF8A80A6FBE1F5BE2
E80565482B53DB2E091785FBDB4D93B68D66DB50F6637EB9B37CF8B16D3B7C4B
03E2E18A8DE1E1DED4A4576C4CB279D3E763E332C542A41D6946730B280A22E7
84F1007518739356A24262F30353E09BDCD4860B16C14DF13CF4742DAD69DE9E
E8CC33CFBCEEBAEB5CC413CE67E1B2BB955C44924B9C121444B3B49CF424A470
F70AFE76D6DA51814929D232807066BCD6F574D9166900C6ACA09D30A4429991
3293AB883B14B6EC873EF421953619C764DFAD5CE57852F7ABE1BA294818791A
25AA6DE90B4DC9DEA59450CCEC72F4B975D5884A66B8BAB311A0A422574E30C1
506219253D05EB85701A24E9CD37DF8C919233AA8A589C40D380BE821B2DC139
279C70C26DB7DDA6BA235A346AFEAAD26C1705C3808C97171DD16F5088584006
419D4D91C33385A1EDEE5E57CFFDDEDC2AD330342DC58FC8A24F051BD2F9348D
031A8B33C4F809069345D534EB5C97D48DB4B86F649CFA6CDA19AA5257C09C7B
292DDAB709AF4F53E3C20B2F84F3A4D27BA96798239835820C05BE53CD3B23D5
4A88CA4B13189EFEA5D0AAC629BFA38DAF22770E1157946CF001A4185BAAD19D
BDFCF2CBB149D282F69DCA92EB8AAFC91A33AE5B6D7B45E015DA151DA92C4B53
70FB510629DF0FFF12A3449B4CC5E2C6019D71E8B88C35477C9273CE39E78B5F
FCA20BDAA226E612E5173920BC8EFACCF08DF0DD8F7EF4A30CFC2C2A08FC1103
3D1078691279706D3BADD1A54B5FF5AA57DD72CBDF7B9D2848CDD048B35B09A6
27A796FB8D52B737E265DC26955AF5E99D3BEA8DDA54A7B374E5B2BD7625DBBA
936163386E541BAB56F84B8692921FD6AB67FCF5A9CD6563A5A17AB95EEB765A
B5C874B6EDB8F8639FDCBCE18186F19B893FE4DBD0DAAEAC93942B51C99FAD1B
F8D9E589D6F2B41C623D9A282CD55B516F6BA5F694D7D91A261004D5D9141659
1FFEF750B33F33030F384EE246BDD16AB7021F3A3D814A6632D8382C2E5C2A9A
41B5CEA599F247695F3B6EF592E926E3A65E49BA637012AA95D16E7BCCA4B339
45561E5E8625E17B9967916626DD8CC5607FCDBC34C32A6984D5B26F9DE5ADFD
56099B2CF33B2699F1B29E673B46944DD84863088211BF540FCA90AA3BD3DECE
2C6DFB665375E9AAB56B7EF3D8C33B3B33999F9B0EFD68B8DE986EB7B8FE2FBA
E8A24F7FFAD34C37F01DFFE44FFEE4D7BFFEB5719AE210C1A0B0161358D4408A
23BA0CAC41DE941E034591C8DDA19A72D1A072F5724132623A7098829A70FDFA
F55E4EF3C07815775F56B4A839E8A083603031EEC534A5A490E7948D0927E136
02A78A51677BBE94D88855ED23BE393FA79B2617A16423970A237974BAA8E679
47D28AE1AFEBD6AD3BEFBCF37065764A96EFE1157C20F44FDC40A06C71815D24
84A9B9B3A28F8BBCF3B980BC9F3765640D833C12697B1550C2D8913F416D47FB
48E01D6F3EAD2E87580171160EE18509E962631F1A6EA27190F79C152DA2A499
BC9CA58FB13515CF70158AFD8073C993697FC975F0E7378B76E93BA808A50E19
7E217683E865797B030A780FE84A2E0ECF21A310C9B3AA59F48371600E72BF8C
83DDE7F3F38D04AC186871A8D5E03608D29A6605BDC9FDB3CCE9CB6B0AAE5001
C5A9B798B627DB83AB7DD5CC80B0463E0C11832C93374EE9339F875FE7E6773B
842F54C0EE5BF00426ECBDF945D50B23C35C78036007D70E50B6821609DF112F
826D76C10517609B116AEEDA31A4E724325FA0011D021F78454139C18D5EC120
6D0AD814432C1CF6673FFBD910977C4168D00F7CE003DCDEAC9AC016A3A3B0DF
7EFB6DD8B00146F7473EF211B6C4E083D189E710C1CF8021CBD759CCC31B0AEC
5B9F72CA89D7FEDDCD70CEEBCDE11DBBA61BF5CA743F855F365CADCE7467B3C0
D4ABE5A0D55F5B5FD26E4F2CA93620838E7DE94BBF7CDD357BAD5EFDD0A64DF5
929F44E9F225CBF63FF4E0A95E7764C5F2E1A56327BDF92DB65B4E6E6A4F4CEC
9C9C98D86B6CFC952F79D9885FCED23E4CC567EEBBFF3ECB576D7E6AE3D35B37
25A1DFF6E02C42AA648DCC42AEF60D862C58A95AE907A693F47ED3E96C0EFA53
150B65F2DA16481C566BA5F125ADAD36B619C551B562C943A88C3DE3599A4667
8A5D1D600AF602357AC91667465B5401FB968EA469194A7A75635695822551B2
DC829C7DDBCCD786844DAD5CF20DACA2A417C59DC006C76D135FEBE37A8D5215
8F9546F12E2F2E659E6FC1D2D9B49776F3BCBBE51DAB954DA7DFF07C081A2860
5816D379F3A807D35AB5D9786A725B58AD5A1879AFB7F7AABD366F7A5A4F4FDD
63E6771CA128E68EC6F238FFFCF32FBBEC328A0BAE7C394B2E7C417931ACF6B7
BDED6D575F7DB52B52D89490F281314886705EFEF2977FE73BDF91333720C4D2
82A78846A492C16A3F8C2B7CFEF39F3FFBECB3B5D35D53C0F57C5CC145492238
91C9C36378B6A38F3EFAAEBBEEA2C1A1FD481AC4934E3AE9AAABAE52F85DB297
0296928D36017EFDABBFFAAB1FFEF0870C2CE18B5FFBDAD7E8FEE1C50952738B
A4597A20ADE4FA87A670AE38417C6CF9DC8CB1AB2313937D2CEC9EC38330B127
5FD614548B1838558C317C91161DDD292F6478D28487ED830913D85ADEEAC242
66AFE0BF16E605621D0FE0664375E86D695589374328658510B9E5E8E50CF894
9A78D1CAF84E9B49AE92012893CE59A880170BEDAAC077006B37C0AAEAFED5AD
76DF6DAD8B0BB5A06F2D15C5B83D9D21668E65D3B9FD8CF522F8CA21871CF282
17BCE01FFFF11FD98D84498E57BCE215DFFFFEF7E9F311FE80E9C00FE42B16AE
CD1504B4AF39EC9C112C7AFCE0E2B4A5D1B16DF0C05A826AC49B16AD99F0F361
871DF6E0830FCA1A53E595ABD83432AE0BAE2BB06AD01D3A77C9A9BAD1144965
B76B905F7468611114C398025C28CFEA92C1BAA689FA1B2A96252005EFC87BB1
60977E865848192B92FAC7E74CF2A9B50BAF00A180B9D6DB893766B7EB7008D6
55D5F878E47275DB44BB52AF8E2F5D7EDA69A77DF6F22F47AD4E3D0CE0B2D586
2AD1CC74D88E70F278A531D36B0D85D6F278F489F59D2C1A5FBAEC557F7D3C36
F3E34FAC6F8E8E4CB7DAEB2EB92484EB56AE4C4F4C6E4C67864AD5E1B0548EB2
E38E3966AFA52B2C342489FDC4EBDB0E7DD524B3C4578D211B812C85FE703F5D
D518AAF5D265E58667FF963ED6DB39E4D71ECAE25DE574B262739E412BA9A441
75C9707DE9F8CE0D4FD920581297C2D25C89489CE71776B783B8C2B5328588DC
43779AC58EB21F64A957A9D73ABDAE67FA2BABE1D27EBC2AF4463B50C08925DC
28994ADEF4B70705DC8F1B7E4918B1921F94C3BCE6308966021F0AD88302CED2
699BE8B55C1CE53C460D1B65F550A31284DB26A776E5517AD81A4F551AD3BD56
0962B66B1DD0B1F1F1891D3B6D9BE15C9AABD997585CE8A87DF0831FD4521763
397430CC3BB9A42C6894C2A3A814A6471DECF1D8F086CF38E30C587EBCA05B16
9F158CE86ED9AABBCBB4B994AE36852746975D8067BC05692C653D9B229E2159
ED56A928BACEFC0E778AC0B60C474BCDFB0517E1273EF1896BAEB9863020E328
2059D8743C5C54260F89352538989F5660D98DAF780B4A4E5C5DE3E744754F3C
F10473DB746E53877CC98E00D535F34374E7D5CD983E22113A22A16484E199CF
7CE6A38F3EFAE4934FB254063307531D8FFEAC673DEB37BFF98D7C11958DF357
86A3C54DC10455963352A58B30FFE90D159477893DE9F27270B3A2D6CA55FC2E
F856A3AF6C191B4A8B6F52DA8E4A85A6D36E01A566F11074B0A0BDB1BFBB2691
2E182F289AFCB8D3C313B8E81984E4B3B15321A71C3F1F7EF8E11870069A0850
E233D096A28F45AA64F7EEEC709215F5F8F8E439CF790EAE63F2403733496EE7
25EA7286773EF399CF5C78E1856E9A96A69C761D232D780061F78D533946C63B
2A1B4E0D03067897238E38E2BFFEEBBFBCA2168BA878CDB5A049DEFC6AE3CC69
FE6A8A5A3D19491A67A53C5C2E0E751B84D6C1D35235D224D70FC60C22A21903
B8F4D24BDFF39EF71015CF54BA7160EA9C5355A9E28D44C3425B5666BBAC58AE
643AC48C85609AC86CC085ADA27CD2EFB98D45171E8DD1A52D0C48E685CDA1B8
D5827596B466EBC3CDDED4CE91E1C6C4748B12AE94FF1BAB940FDC6BFF5D98C2
A99D25CFB6D76B47BDBE495E70E491D5D5ABB3C03FE09907BFF6F5AFF332BF64
FCD6D474D97259F64BFD24DE397DF209AFC37B97FDEAB6B40BE3BE545A32D19A
6965DDD1A5A33166B9D7AD2766DFE52B9BB3EDD9D9E923563F63CDD2D53FFBF5
DD95A019974BBB3AB34F87D94C90CE947D4B171565D0DFA57AB5343434916FCC
344B037F4EE273F659536B7687375477323798F1C746A1599BEFD7EA51844BA5
C39E59159935BEB7343573482BCFF644826913DB92656FA408AD99BC727A2EEB
9165D3BEC915B0D735E94C0E99C697E0DF0F5947DA8C06B6D3D1449CC04BC0F4
6FEFB4EE8AD3E6D0D06CB713964B679FF5BE2F5E72C948737876663A712412A5
8408110F38E0000861628C199AC66AC42E20C52CD6B34B03679C4020838E5CAB
A49FC35FE95F41EB10644E1B94F7A2DD698A166ABB1565DCC8F8E1A31FFDE867
3FFB59AA1C468FD8D35A9C33704FCF3AEB2C6F3E3B9EFC48E3B8924A3FF37345
E9589701DD46674F8CB66487C68BE3E7356BD6B03998D416F3D670F088F55147
07DD5DBF326A257D01C7E081071E50F657B1683D73EAB0E5D00BE2457097238F
3CF217BFF8059B39E2578A68B9D4F65B9229342E0406D3A310C1C4ECA3FA5DA8
8C6CC0B2600B3C193E1C3837F0C85FE3BCDD3D868F7908B245520DCB21966C95
C9EF3B9DF598F9E3F55D9214BA4AA29870F7AAC0AB6420C2D79FFDEC67DF73CF
3D5C5BBC329BB9AA19B559600798C57D5FFD95121617BFF7DE7BA14109255828
08F452EE5276A36AB8CE71C71DF7AFFFFAAF4AC6C8BAA42993E67498307D38F8
6490A17DF7BEF7BD0F9AF2A28B2E82B264D488998F2CAF86D2A257BB621EC28E
B24B09D62811001C340DAFE73067C10CBFF8E28B49A282A7921A965254639F6B
AFBDF684134ED07A9009A51A448C150C76D503703A70654608140A96E1CC48E3
6E5B4DB8C6A9C4B7162D76D46F7FFB5B38A3F819DAF7939FFC2446098B1077C1
ED581B462352D99001639FBA5031186667282C9483570ED8E4AEF9A9A79EFA2F
FFF22F580C6EC5217164A4E07031686CAEAC1E0F38071FB2D8115F87E2C760EE
D9B70B8796C6BD08E36B42DFC4BDA13A545C6F9F95E33B376DDED5B5FC882BF7
5AB9F9E96DF552254DA23BEEB8AD3335F5B39FFE14CF0CFFC9922E753BA7BCED
2DE54A65D58A7D5FF7A6139FD8B4D1947350613F5A3E3AD69E9E197F62F3D9EF
3ABD998526EAAFFBE2174E39EB9D1361B2ADDF9F866AAA943B51B739D2E84EB6
1A9647DAD4F37ADFBA298F551BC395E6F6A95DB1F177994E62820963CB6A7BA5
2009A05CBD34B230ECCCF33B163E6CB5EF5C8433D7BBBE6715B0BB4D8C53CACF
05BC7AF56AB6B21E209DF8030F22AE2B8D66AFDB33497F9917AC865833D561B8
F5C6AB7AF06B6D2B88D406AB03AF542EC711BC61BB20F3A512DBE223BBFC2692
8CA068C85AC8C128EFC7804F56D41BB3B087AC320E3A266D05A51D491F3BF061
DB6CD8B7549741609BD7BEEF7DF09EEB956AAB37B7A45D7BCB0D173355246A2A
D10161796739A99C9A40F3BBF464082754A2877126CFA1B2E1E87129CA3F1603
8FD95D04829E22FE3FF6D863EFBCF34E6C2216B3A83A888F872B0B244475E386
FD3CA750DEBD3EC1ADFAF58A2BAE38F7DC73E963A828596014A27F18AF65BE4C
92C16D1A4B418787219122C50B5F19C28D042618BD17BDE845FFF11FFFC1F8A8
3A7C88CDC9CC57C0F2374C0EA53EF4D04319D563B08AA834DB082B9F0E1B8266
A653F688AC39E5AE29020409612C5B7E0046197A54A816E95A42B1DC368A02AA
707C5FFFFAD7DF77DF7D8F3FFEB80823CDEE1A1A2FD4766E89B05BA16B1CEFC7
755F8CE3C108534EBD023F1E8298029DA8519ECF05CD915114D77583F6A08331
6134C1C483EFB613705F4A0960CD9F789ED382F0E54FFFF44F7FFEF39F33652E
9C144D162C3B1613335049B648DA988476E3A66C184C88E3C0C0E20AEC43650A
34A99B65C4158E39E618D86E5E5E20689CB40D631E04EB92738795CAE251C9F2
F256D70223F89E95703879B11C30339A6ED257600DA1133511822EBB31F68150
BF3B65BA2915BCC295A6689CCC9FF93A7249DD5018179E2A85B2A21B28AB38F4
D8DA4DAE05493F00B3E31515775AAE03B038ED02BC3BA973F4F062EE14D1DB1E
BAAFE0C9FCD084A572A793479B8A22995658CB4B5C42DB372FACDE71EBFFDFA8
97B6ECD8F2D31FDB8C1A5C8F6AA9DC8BA3D1254BE0048F8D8FBFE5D527FDFAC1
FBC7572D0B1A556B4EB43A63F5C68E4D5B6E38F9CC1DDB36974DB67264F9E353
4FB58C3F5B32DBA376A75A4FC26CC76C67E9D26634333B1656CAADA86EBC4A60
86ABCD99D654C9044B869675B374364DB6B7A77A39F756EC0571E06365F793B4
973714EADB66BF59B954F4CC29DAE266F3E1575951444EC9082571F0C107DF76
DB6D72711603A92D7640C7065ED8A88FB4DA5D2F4A5604C1B25E7F7550ADC7B3
0D5BDDEBD9B05816A5964CBBE497C238EA79F90358811B5B23D1B79D7D4B33FD
C8E6B38DDF8396C562B66548A69AB33B87C60619B2209C8CE32D69D43141756C
ECEEC91DFBEFBF3F341C0B79776CB314699552D9B69C726A404CC1C643D35999
41B7CE8DC85B2D3F57FC9ADCFC656C8F5A8A6AF5EAABAF3EE38C330844C0F9A4
761880220ED08A79BBABA3350E7695158614AA8AE4713AB0E370534EA25B37E1
CA55D7FDD5AD599243579B8E32C1CF18136E22C6ED082BA6F96E0AEA6286A615
4533F3F9F38D83CAC69890FA8A8F44F1E5A2C15D8FCE15E93A81A182B4E851CB
365692B74227CC2580556825AE10E5D82835DCDA32DE4FDD09F9AB6E234837A3
D97E413DAACB0EA087B820A45DDC4E82034A4E6CCF6E4859316759C1C4F4BADA
77406572943D870289F371E28927C2617DF8E1875501B267F3790F2868A83DFC
F08A57BC026620E692BD87DDD0E8C0C27567D12B0E3A4F52875C2E12FA0C92D0
25A515A99A22326B2A81610A738CA97153E0935DC14D73815E350B8AF0839A7D
727EA19E896C54EB27E87B7CEB2D6F79CB2DB7DCC2EEC55CDF38191FDE70C30D
A4AE8539824B91138E4FE572F6660E2326DF8B39023D9EA4AD717C9D0134BB2A
4F04571E0099E3E24AB8D2E655D288AB85D57B447E52D37324DD408B961C318D
0B17B3427C9A6E3D06BD5B970CCE4D4CC8B7A8E5870C3853A0EA5C9235052154
4FB2DB7558832AAD076F3AEDF42F5FFD775611D891B1B77BFE6BCEAE2F1F838E
ECEFDCD69C9DBAF0BDA775DA9B2FBBEA92D66C7CF8A1870D372DC39D6D04D9ED
ACDC7BAFD3CF78EFD6C7378E2E1BEFC6516B66CA747B2B1B4377DE7ADB37AFFC
CA415D4B6359F1FCD964AA6C2A7EBD36157777F6274B43A313AD99B8E42781B7
B5DD5F3954DE39D31F0BCDFE2B563EFCF496D5E5EACA657B6DC1508F8DFDD92B
5FF1B7FF707D27B5AC8B496A3A5ED6F2AD6B9E25791F032F8339502957D82C64
B6355B0AE7B2AD7C77379D497307A3814DF79BDFFC0653C934A11B06FB030F5B
98959A46B5D9EAC0C4CF6A81D748A271E3EF6BD2BA67867D7FD80B4A9997E475
C05807B6419252AA091C78AB806137E0C772EA05C6B37CD1C6D62C95A0BC8D3F
95DA97EAF4BBADDC3386BD3CBADF9AE71D7DCCB537DF9CC6C9A9A79EFA777FFF
77764914095D37512A18018524D6060B55541592163DEBCC7CBD4BC011F374EC
FECB9F557DC46B3EE739CF79E08107C4EA2A24260D7AF1342C3A7445DD30AC5B
3C3C43719882BFFEEBBFBEF5D65BF157180DF890A5C3AA53606AC98586B9A141
2960D59EB9A51F544F448AF9059D0E4B699821F6169013F80E452BBB072968AC
56EE2CCAE72D5C9E225E6D803C640084C5B4B49C58B54EA098520A5531B0DF65
225537CDF495CCA52CAF35E2ABD2361760DD14149A6EEB9501722553006D0423
A246D1FE518568BA3BE674CF299A768B820451163B1D950A6B52D5B180633160
05DBEAABFC0A5873AA898608C6DAD2331083866B72AD7B7F701912339AF83A89
304DD18262A167C643E81EA5E899A1615A14AA024A0B234FC5868D849FA55AB8
C724DC4F3BEDB46BAFBD160372C20927E0877DF6D907273372CB95CD0972A1D1
328F32A72C9846093D2D6E3C7E912E3235965A20509399A240994FAEE68F2EF1
A7D415CD43F9880C6368FBA9AD85BA5D51AC70668951E7BDC8D1EA7674C07051
D608EBAF6590E424F59C6BBE206F6472AA4BE3B8CB8A49B0558BD22EA6B05DB8
ECB951C5C8B35001BBDA97E6302B83B5CBF0031E1EEAF6FDEF7FFFA5975E8A27
64B85E30104A90A38E3A0A361C6501E7DA6DA4B898878721CB2A43266BBCF4B4
B37AA5D15DED280BECA6DB198D6E9DD81ED6B3D5E578DDDB4FDAC79FFAF0B9A7
B6BA3B82D2F27AB5363B353D940FE08B8F3E7AA6DD8227F7C6379F627B2378A6
3B3DBDDFE8F8CB8E78FE75975C7EF9A72FF6A3F6259FFEEC673E7E61889559A9
F693DEC6D6E69543ABBA516B7B77BA3632BA616AB236D63CE12DA7DCF09D6F3F
B56572B967F6C2CB6EDFD58AE2E5C34B9F9EDE71D811CFFDEF7B7F1D552D5438
89B3A9246AB3671041EB99A5A284AEA297C37892C5F1B5663DA7258E4247DCF2
5021BFFCE52F4D9EACA1F2580CA4B60705ECA7A65969CE76FBA997D9946FBF3F
149883631B481F3566ACE4374B76D25BBD7E0BC662E04739041A16810FB7384B
AD071C84E53C071CA450D250B4311CFA20F32AC67F1A0ADB33138C7E2D19F9ED
C414647F73F978679B057658A0561E7B9B9A9DC10FBD7ECF337388D7A0E874CE
1826ED54426A58AE433007D7869C36C83A9764C33804B7260F8341E57FFDEB5F
A78427EE8F85B6595E49EC366395D3E28A41572A4AF2F35BC403D17727F73095
F78D37DEF8F6B7BF9D713BCF294EA16A5092557AC138614271625077E2CA975F
7EF939E79C43AE40B735855A7C9ADCC9663C898BC12D1571418E7C6CB12CB3F8
9314C26BD6AC218792EBF2EDB60CC90D650972A4E8054127ECF9C6F1B742E779
CF7BDE7FFFF77F730818D9C3BD311F90057C20FCE9F8E38FBFEDB6DB2C955D91
96A7C414FA948FA5D6541C1186EC64F80B17CA4FD8DF83EA99C13465FB5D8345
ED8076BB61188A61829D8C65A60866EE7E8315197817782512A2812CA95C64CA
4DDF690CC743700F992CA6B0D1C8A0C650FC1EFA92327EAEBAAF030E38004A85
CC187EC13FCE65477D494B901901F1B8F234AA4995EBB9A5505CEB8A87BBB5F0
D2400B434C94EFBCA9CA5561586CD9B2E5F4D34FC7BEC575F0B28CAC4ACDB830
349CCF8EF45845388116890EA667B01BAFBEFA6AA603F4392E8239623DBAD0FF
842D7CE31BDF78EF7BDF4B19A4C6852CB976B1D69C2C02CB859624AD18D16778
18F181B01B20B10EB8C241071D04139E806A15101367CE95A3D9E41069F607A0
EF66F16C45E6709B1B07DDADBC328D54760BC68672ED0937036A6C454F29EAB4
861A9599560FBF0D2D5BBD6BCB0ED35C7BF41BDE08A5FBD8D35B1A23CB3B89D7
E9277E589AACAEACA5B3A5D9A7C6D3ED23BDED3B1EFDF5E4C62796346BBB7AFE
81071E9864798D409E1AB45AADDFFBDEB55FB9AF1585CD252B3BBBDEFA9263A6
66834953AE8FA6A3FDD1D9F6D3CF5F5A31D3C147CEB9E20B5FF8F892A18EDFA9
4E443BBD5ABAB3932E1F5DBD35DB545A75389CFB1595FEB6E97447BFB3EFF8B2
4D3BB70F8D8E6E9D9C4C030F62A9451BDDB34E709CA509659A370777567519B1
429C417C02E9C492480E3B56176BD3253DDC7E507F940256F13A5D8EDF25E066
760DA7DE8199B736811AB6ECCE98B9B864269210C60EC47C2D2C599EAFB86F9B
38FAA69A9AA120AC87E534CEBA498C933B26EB98B86D82AE97CD04FE54904DC3
E94FB218836E730273ED63DDC02F6C688C9E949312856E71ADA41039C0294C4E
3AE9A4EBAFBF9E182BB6ACA763C05F19975295C140B9A652B002A30C2CBCDD8E
1BEF4EEC154E932BE982A295E452CE9E1397169D91160A798579DDD0311F8FE6
2C8D604A03375A207756941DD4B5CA5569CFBA1689B86F598FCAE1554855EA5C
BE3BAE8F17578F3B7715995C79B31F8626D40DC7CEF996B8DF473EF29175EBD6
E14157AC58016D9F1574D2A2A5C6A81D7CF0C10F3FFC70563443660A41A284FE
10453055A9182B55E321D5A5D211333FCF472DEB862044696D16F738A1097EF4
A31F5176D3D0236469E07CFDEAA2AB0E3DF4D0871E7A489D18984AC9E6379697
432C1E416522599AEC86075DD605167731C8B3877208E54A19873CEFBCF3E00C
9982E1C82F9ADED0BE3345390D75834AB44D5157C36FD1EB15EF74565050B93B
8ACC65DCCC2AEB625081F0457E9116B1FA4A697608FE320EA78C123FF895242F
6AD5E20699DDF1E4E79805E2158D138C5DB81BB990F06C0C03E0936BAEB9E6CC
33CFA4EF8B8950198682486E3F705C4D38640578F50985110504FE7FD18B5EF4
AFFFFAAFF4DDD558DB8D121122C080D26E45D2EF95FB62DD7279F84C0130A4C4
C4C569A7BABDA8CDFCE81C4EBB64DDE73E74DE79516A96ADDE67473B4D5BF1AB
DEF1DE47828360F7B055146BC9A0512C5561BCBD3FB3FDD907EDFDEE93FFFA6F
5EFCDC030E588B77DBBA7973BD39CC6B421D58D04ACED06EF1654BC71AA5FDBF
79D547DE74C20BC221F3F066D39B364B6DAF78B3EFC8F2DEC4B6A60957D4C64C
6F7B23ED2E2FADF4A2DACA6796FEBFE7FEE9B76FB867AA7CFFFA3E448C09FA66
C2983F39F899BF7AE801AB6B6AB5995E67060FBC74C9933B262C9BB26F53BE69
66FFE7A6E39A17DB91C068AB57AF86852A6F4CD13861D7B11820F1E906FC0FCA
9038C8FC3AD3315427A61A36E3749FD4DB2F0896662648E304A3E5995E126626
B6E549F645BDFC25ACFD9006A66AFD60B86EA61F2550BAD8B17D936ECD0C2C5F
588870575BF87A66288FB22254463B8FF6345EF6DE7BEFF51CD83F253B5F567B
8D883385D920CFAFBCF24AD2D468FD981C8AF1177FF117B09BA5C9949372B9ED
4C1107CA165014FFDE7163EF73BAE0F080EFBCF34ED6CB50465149AB4B2E668A
693225CE5831B55B9C8D5B83601C6A5899C27EC110C59161809711633544E22A
523B5E9C40C88E2908C5E46871B469AFD326A3DED568107A894572E28927FEE7
7FFE27F3F13828585CD94599A6F2D4016492C7582BBE46D3D2AD4482447BDDEB
5E87BF7EEB5BDF62DA8F46A51C05E320939536A0FFAE80096F86CB2A89CB059D
383DD7248BA57818F716E6991D5D16536024B996A054C8D7734A7DF403FC098A
572E4A35215E88DBCA1CCE0A6E75EA579A05CCF02B13C997A50E1603A5BEB267
EA32690EFDC00A1C952C7B7921D0002C8845B7AC32A27272A32E14EE035C25AE
63AAE7098B83BD375846CC2828953D351C465849043730659C7C86EFF4D066AE
9A8BE4F9CF7FFE2F7EF10B5398A5C6A12BE24A50DC854D05A002319858B8C4C9
FB054B14334CB4DED8DD4802976B89A6212D71E160855C5385F1B7BFFDED37BE
F18D0A8CB34A92490DEE907DF7DD97F4AD9247DC785941E8ED0EA09B6ED7F17B
1530D7069C4E5C8DEF0E5F019EFD85175E68722B5BC5DFC2B56AF7CE13945936
B664A8D5EE6461AD1D6393D70E3EF655D5A125CDD6D32B968D675137EDB5968D
364DD4DEB165D38A654BB724CD91E17A6B6A62666647A35A9B989AE974E3952B
F77AC111876304B08466DB2D367C7D6AE3C6DB6FBFFDE24B3F5D4D9606DEA3C7
1DF7BA2438B8B6AABEE3E9FF63BCBD837863DD9865A5712FF6C787D2DE8EEE41
F57D47FC99787667AD71509A3D5DEAED28579EF558F248544F6726D64C79EBDB
19FC3F6CF0D2AE7EB47CD5B227376FF77CD3F3ACBEF2F2459D25BF1B3DAD733C
099E0A26974B6B70C71D771C77DC7126C7AC52C8C890A5A58861FCDCE73EE70A
813FF0F0F34EA06F7FFBDBBFF295AF48B8DB29DE391124D128E4E9FFE5EC4CC0
E42AABF4FFDDAADE3B7B48C22661DF6415450671DC1D1C196610044431AC9100
41F65D2024806CB26FC230880828A088A08038A3A322ABC08008486411086BC8
DAE9ADAAFE6FD52FF7E5F4ADEE16FFF5E4C9D35D5D75EF77BFE5ACEF794FA93C
453A5207AA81B71A2C97529D0BBA5EDDDBDEA835CA1AFF0FB4D61FA75C6D7000
D4956EAD374BD5529A9F5AFA6A95A5D5DAD2BC9D439611C01C8C36ABC5A689EE
A3C08C39205C4CFC75896B2D59AD51AA14E963014BB363D9DB16B9187C858ABB
940385D0CD71E38D346F0E413B6AA821E95C6881E87A57381AB59C3F0011E72A
41E4462D9023F9FAF10AD115262C1C759EB50993A30F9F74D249F3E6CD4B3906
48E25A5F24680F0BBDE3DB6E1728D39C5FD1CAD59CB3367213996FD8E594DEBD
A8065DF3939FFCE46F7FFB5B9E2E2AE0950F62B91CCD258F2F0B0D0CCCAFE428
8D892F5866C94DB80BC0E9B124ECE961AB69B5CBFFF33FFF33E52859D75093D5
487937A8D1259A949674C60B2FBC80EDA3E976DE31A297FD752EE8321BA62942
827D0E992CCFB56BB7CDE3013314DA22CEA9F7963DAD51362EEB17F9F334B6A3
8F3E5ADB25F68A77D3C6B3CF3EFBB0C30E339574CA41BCD2C7471C71C429A79C
E2980F515FBAB379B1206E4D8DD8831E8446551837A6F2D0BDF6DA6BAF3BEEB8
43979563AD53C412537EE7661810C2617F50A4A45F09FFC6AA79FDBFC30E3BDC
7FFFFDC0E323EFB12EA59FA1D4D753038C2CE5B45F6EE6E5780C27440FA80113
69C03223640D888C435580473971AB8FC1C3AC99D453D8DA356F0C2B851C89E1
BE98D3A5061AF61CF67934B09ACB33865D770BD042F9168682ABA531296C8F16
701F7A8DE9685DB6BCB74AC8366BFFFA2187B78D9DFCC49FFFB2FEB85A394B63
3ADB06562C5BBAF0CD555799581B90B2AB0EB68CEB1D90335679E16F2F4F99B6
C63B8B96748D9D3C5049E3CAF50AC0AC51883565DAD459B366690EFFE737BF1E
DBBAB0ADEDD3EF56DFBAFA9AF34A6FBFBBF6F405AFF46CF5CA823B5A07577BF7
DDE5F2DFCA6D63ABED4FB72EDD785C7A636979F5CD3B524F6FDB6A9D6BAC5D9B
347FF9A3935AA72C2FA56F1CBCC789175EB9BC56A7D2A8B49517F757F4437B77
4B6FDF601D9F5D3F330DED3B5823F25C4FA936CE1D69FE1933667CEF7BDF93E9
23D3D01695A317262481F19F988D96188FFF1FF58053A049A75FD6CAE857D692
6AD5B654D5969D9465E36AA531A9DA99CAEFB60F962AF5AE099D39CF46E38152
7B65E5D3B43402EC3DB506BEAC9C1E2BB5F5572BBDD5CA0A4071F2FDB30604A4
D267B1A30D0608401B83CAD7B80F0D5D24009B72BE2A82616C1BFE776A26E5C5
9F84C72431A472002DF2A4054F97604FF4806B4399859A5FD8FD044D89E25ADB
A5DCB94759C413870CC117426B20A60AD16FCBD588B9B371800D4120935B63E5
3357DCE8E31FFFF8AF7FFDEBC83AAC8B40BCC35D7039489923F38DE2B61026CC
800AD0277529FB60F16179B91066A38D367AF2C9275D05531008F53975C3617B
81F15AA6C4423444923396994261AABB521E61367875EEDCB973E6CC411C93E7
D3ED20F923CAC49E30C319B534265624D0878F32ECC26B8AA554183FF146FB34
69A8EFCB0FFA8C565AFBF580030EB8E9A69B7034638D5DB30035790A81779E5A
9BFEDC73CFFDEA57BF7AE9A5971E7AE8A129EFC6185BE099E6228DAC83AFBAEA
AA9933679AFE0DCDE1A2755D07BDB8F1C61BEB52D3A74FBFF3CE3B3D5A3D88B6
0269069C248C0F7D40C3A3A1AFF531711EF90DF7DD771FD11E93B967792741C7
A2F5D75AA39A8872DB3A2C368F423BB41B39A118AA5E5A5632AC1C2A5405B56A
38C7CED3F804FABEB1EFC5165B6C21694B1F4C2738B027DC9E8C872572A3F1C8
6439EAA8A3249775350083FA8C9646FEAEFB626DB6D9664F3CF1844F8BAD5452
ECA4936DF794021F99A1E9661431D503DE79F34EE3E7519A01D84C4EB94512AB
35CC4AEDFCB7456144CE571ACD66CBA56A7B4BB9AFBF2E26AAF5BCCC3716F6B5
620D8F1D3FB1F1FF04244BEDDD57A74E5DE5DDC5F2427B071B6265D1A225E3C6
8C6F2FB700BA696B80C3E79D79066D57AAE5BF4C6EF9EC5DBFFED140AD6F9DDA
D6D5B7EFEF9BD27EDE2D93178E934735AE6DB5A796A68E850B376B9BFC9B29E5
C92FDD38B77DD96B5DADABB70CF4ADBB5AC7EA4BB67AA3EFF17275ED15B517CF
BAE6BFF6DE7FDFA9D3D77CFAA557064B69F2AA937BFA7A572C5E9E5AEB65B3A5
8602AE0D5609C89202364C06218010D47E26D3C93B2608C456F332B1971068FF
1F0A98D823D7077EB864294DC0AA2D59EAAA56EA6A38B58C2FB7BD53E969CF52
67963A1A5D81DB72B6CC31593D515C656DB2D28A4AB5AF561BCC6A0F341E6D70
658EBB6145D559A2533DA8DF1086DA09D3A64D735D1C2A24E545103127CACFD8
A6905E4100C906367632923DE97DFAA6571B9DC1B0A46B81A0DE5BDD9B3F5A96
A3E4806B39E12BC06C833F62C315009B04A8C054B28EA4CF5CE8D8ACA8FCC829
4F4D3A2C6F6F272EB444841ECD4D2CA0C1816927E53112C9FF6BAEB9C66DD6BE
FFFDEFEFBEFBEE1223975D76D9D5575FFD873FFCC1690E63D0DC83C70130B628
082F5B1229A4F30AA0EE6172C0466A49CE6ABEEC0641454D3B49C332D16D9602
38DD286352A772B71F7AE8A1E38E3BEE8C33CE807684A25544248CE1F68631D9
340EED09A2223A5DF296E40DCF9F3FBF50AD344AD98F341F9DCF292CF1562B6C
0E5E38D9B159A1D606A7301B5A0CEDC3ECC215F656D43AFAAEFE645564CC4884
0D4770ECB0E347991D7BECB1575C710591347052D82591FCD96152D3B6B92964
CA1B44E295F2C8667D72F1F4B6DB6E0BDB94DCE5DFFFFEF78F3CF2882B1CF415
B4B8C1D20E231702F2592866E54D742AA372F95996B7CC8A9960FBB8AE07230D
C329F2FF071E78E02DB7DC82A74B88897DC8033AEE82F1A7B9822E4026D19147
1E49DB700C1AC362ED30792A3845B109B92EA5E9723B8742C2A694374EB15521
13818B10411976BB8EE481D572261323F84C4812F3CA5C5FE61439A08259597F
475E55B9D45E4E837D7DE3BA5A56F40C76B7A6DE81BA32686FAD239BC64E1AF3
EA5BCBCAADA5D6CEAE254B96B5754FED5BBE3495500183DAEFDD1D1DCB97F6B6
135E4BF5B3DCD3D7FFF39FDF59AFADD4665BB3D4FFABEECBCE3E60D96A8FBFB0
206DD49DB5B44EDB79BFABDAC7545F7FEBB9D6F1D5BE6CCDE5958F2C5ADAD296
551FFCEF3FBED136F5EDB65FADD9B1DE5FBFF7E5B5B2CF8C1BF3ECE281C51DFD
D35FACBE34D088B8F69652E7C4EE154B7BA4A0C68CAF933DE9694A0D19552F40
4A25CF36DC0B8E393583311D83F14AB14388EBE84F9151E77DBE704089097130
C9074BEC57EB09EA527D7095C1F6549D90B2F12DED6D83BD9DA945FFDA53ADA5
F12FD5693A2AFDF5D0724902B8B7529588ACA4AC37D5FDFEE709B9670D47B6DA
3856B55ABECE55A4E5061B6CF0FCF3CF536DAF3D86BE8934790C353E9ACD35A2
508536509A164E31B2574B7CE185174A02B8562705068814DCCDF70FC2420BC4
05B2968AE8CE42DC8E37258DA57AF4D4CF3EFBECB0E59A05F9E95E64A82404D1
D4A953B55292EAD007E9E92EB9E412CB28DF5D7B43AB89B8DB6DB7DD7EFAD39F
6A6C85E6C118D93A9E68713B0C2860B696BEAE61CB77927B696735124723E2B4
85B409A5A15037C384A0D96492DD8458B578D63159A83876FF7613699A2630D6
A871DD484EA44782C1431739E490436468E857D73BEABE525146C4452986F4E7
C9E90F38ECC2A3176DDA3873167746B43B2084824102F7D7141C31B5500B0C0F
B22EB5571C7376D7207C441ED6AD31A3898A1A4821DED8FC02E646FE18BC5B0A
2821363134179C4F08E73475981A11D69872CF5BB3AA3BCAA6F1767798AE80A5
228A6BBA50D72DAC6CDE9E3B79575E79E561871D868903A6CC6D3D5826D495B9
AC63A494222536954B95525EF48C94C1DB00B817ABF13C4BFA8CBEE546DFFAD6
A9A79E2A75EB4A4794D93EFBEC73E38D371AB6E6D6CEBC8CF0D2A4E92BCC30FB
96E5DB6FBFFDAEBBEEBAE9D3A7937B662381464629BA409905BAE1861B4E3CF1
44F9135815CD10E834AA024EA1AF03803E4DA34642EA87280528922DB6D8E2FE
FBEF8FA7377A27689D7ABC54B2A394EA0ABD21E277DD6DF7FBEEBBEFB537DE6C
3402A86727DBBBBAFAEB33D636902A13274F58F8E6EBA5D6ACDA5FE7C32BD752
B9E14EF5CAEC2B971E78F821DD5A52A336BEEBEA99FB947A5E7B74711A3F75CD
1D3658EFC1A77EF3DB979F6A59B16947C760B57759A973EC05DFBD7E45A53B2B
F74E9AB8E4B8EF5FDF31F50B8B1694BA7E755AA9B26AE7E0C6D5D26F5AAAAB97
27AE78E3DD77B331EDCB07FAA487B38EB65A4FFF84091397BF6B105656ADD9C7
7B8F22B896D76F6033C1AE0A6ADD936982FB949BF5B19F47FA475E3E1760F750
FF2B538C0DDC526A48FFD2607F4B56D5A19A5029B797DB3AA45007074AF51873
E3E8D7C937AA1D6DED323017F7D5778C0C3A3D59EFE0605FE3130D35FE1E2A47
764F7B6B1B95395AD3B5D65A0BE5446AC33BB0A080D9901CC6830F3EF8AAABAE
82B854BBE599679E01901C396539473A14D2768623D926B61F1CC5A0832EE9EF
C11A6AA12C9EB2B1C83305AA8E224680B79FFEF4A7EFBAEB2E1BE87A7F975D76
914B80148DF78DEB125F0C9B1261560AE12971BDF3CE3B5F74D14544F25110FA
C1081B7F9D2CB5F9EAB1B4F4B386AD9981C1D0063A37420E584F43C6E0FD69A0
5CAC92209A3D12B82CF301768DBF33916EF9423495E21CBDAF71EB6764993E5C
6DB443479A541B5C92D2107A30A21F48375D478739CBDB3732447E96E542F766
39CD279C700273917205ECF3338A07ECC6AB7E137DEFFD5D78728296EC5D9A52
B17ED5A1CD74539EE4DF6CB3CD9E7EFA69720CA43CBD351DEEF6568BC45EE433
52C3221989539A44A9F919341BDA2BD204D2790681174AD676DD75D7DB6EBB4D
A74B13FBB5AF7DEDACB3CEB2DCD1B63BEEB8E34CC2C219A0541F880D1DB3750B
798414B7E047D6F206C62B036E0D2A1C6B9A8B2FBEF8F0C30F67D56C9C11FE82
078A5DA4A770BC14CB89E53375409677352058ED131BB306963B98BD461E48DD
1E7DF4D10622A2A75D4FC554CB8896E8F19FB057A8764BB9C7C0574C06628F47
DFD2E46B7E224B17C23DE5B0C68841939494B0C0439A3B77AEE6E7BD4315F6EA
48216826C7D287B6A986B3B9373026FCA69B6E2A9728EEE15A5EBD3DAE3DEB1D
A87717EAED1B9482ADF5D7490F75F534D03F658D35DE7AF56FD3565BF59DB75E
AF0CF48D1FD3BD74D9F2310DEC4FDD1995DFD956D6814F55898952476A5DD1D7
D7A1ADA8BBB7B5FEE8B65B3956C7CE386C6AE7330B16A78FEF72D6C05BAF3CF3
EBCB964F99FC91E31E59346679FB60A97B70E28ADE4595F6775BBAA6F4F60EDC
F3CBCBA7BDB255FF268FF62CDAE1951B3FDB92A6ADD29D7A96D795BF16A9B5A3
7569DF40E7E4712B962DD5EDD7FAC0F497FFFA4257439BE4654879AF852C7576
BC878AA01ACDD5DB168B18D36EDD23CBC9C6903EEFEE78E91F79B995596C8656
0F8C657532AEACD4DADADED5D25AAE47640665BE0FD62AA5526B5BB9561DECEB
2FE72255FBAC5BB2B1AB6BB094BDB56C799D9CB2ABABA5AD75A06F20ADE8A9F7
7D8A122CFCECF496F6A1EBFE0B0AD891393B3F00E9A9E72900FB536EA3C77710
7706C99A13A3927763CBF212C498034EA3EA60D3C294F266ED2BF767C3BC3615
B1A587D421EC1998CEFA134820B73B8C69E9987689B96AC35D7DB471C139D480
BFAAA1C9105361E3DEA16F7D98A4153D6DEDB863F0456F3316F2E87FF0BFB550
3DA8EF9A988148BB49EC4754C011D3454205598FBFEB8027974B392D67A1CDA4
D549356FC964E82970003C77474735FA5AA3D6DBDCF41C2DD2F82D792773FDEC
7B8D7460223F67CAFD6F8E9FC6E30C7184E36BA5F9FA77BEF39DD34F3F1D7D13
032CB18B031EB0A433E485A5406EEED5657F3012DD7DBBEDB67BECB1C766CE9C
79F9E5974B2E703B23239C6BC4C888BCC1C46FB1ECAC600043A6DCDA289C04C6
5CA869D6F5B5BD6C47F32CA59C6DD5148631A7EBBE8460EE318FB2BCC09C0C82
46222547DB0663A34826C9EABCFBEEBB657BB924AC10FDEB6ABC403D7CF5AB5F
FDC10F7EE0145D296F3EEF5C4E6C55C6D7B57C80DB3515D3A64D03DCC853A341
23C5742177CB86D450E504D32A0A8B5547119ED82CB097BB2E30CB6BEA8D3B73
8B536CB8941BFB6C75CE2191404D2388747BD2661D42CBE2C3D9B367A137D964
937DF7DDF7D8638FF579AE05BA224B1C4798F4F98D36DA486EEECAFC6E1E318A
666B0CDF658101DFB6CB4AF32EAD8CBA0F34DAEEDE7DEF3D48A2E30EDE6B49FF
925267FAFCC777EF5FB241CBE4D7EF7CF0DE35D738EAED71D992BE3726ACDAFD
C682C109E32674B4BCD9B6E863CFDCF1B954CB3A52B9D4FACB9E8113DABA9FAA
2CEF1A2371D1F78AB497FCEFBE9E9E8EEEEE5EB9B00DBA985B6FBDB56D456FA9
CEF451EF2F3490AA7D957A07A404323AF77DA9E1D67ED6D3C9B2B78395F27088
77B8CFB89E941E004384DD708CEE05A562FD8124F4ACF2BEB3AA4C8ED334DEF0
7CD2BD2F3989D4E3AEB7DE7ACF3DF79C3E49057381C31C6DAAB5A020CD1556A3
381E3ECEE670A57D38C50205062817525E71C515471E79A4E1CA3C0B848E1AF6
861B6E28670311E4E8AEF96E5D8AC9C1E71045CDEA7930AA9400981E99CDE636
3031E504CC883D499A52F7353312A2353A66CED120FC750A3466B3F4B8B1586D
685307648253AE38A6D07AF02086CB60D0E88206E2B013C0E850021A359DC52F
4BE9F87301E399F28A093716AA072323880B8FD35C5F9812318D6C76081F75EE
94055A2BD33915C20880EC41D29A76038B062E7BD6D23EB7AF40E860948D6837
02CB8EBD72E28927DE7CF3CDEC78A6869C90C1697A47DB5D4794EF3A85C9921B
FA6F70C151471D75F5D557EBBB11F8A38F45DF9491B86B34F954EA79E2325045
0A630B52DED953AB0D7E00F14B810D8D4E91FBCDA2849C28E1F433CF3C73DEBC
794E25E0497B89110D9C076F236C43470562C5BAAD511C91AF7CE52B3FFCE10F
65554054E998367869F71E30FCDB958B29A7DF9A33678E7C591357817807EDEC
3353CA79955D5565C50C4681C974F5335549B6365201E9D0D0E56BAFBDB6CEEA
830F3E089D10F841E690E83414B2D8E648735C07625C548AC72523984650848D
2DFF03F606F062B16BA1F11A6EAD91426F474B5E0B0EE6900F4024C4C927BA6E
3A78466B4A38CF8093D6B59C668E3B5A3720C8DE633819AC37FEABEFFCD6D665
CB97DD73EFBDBA91D6BAB658CAAFFBE8130F79F62FF767E5D7B3716FDE7E4779
E96B170D0E7EACA3BDDC238F767C6B7FCF40A53E937F4A533E937A577495D6E9
59F6B731137B972F4D2D95AE81C1CE3AB3F292DE7A7F7A3D57032504E78CDCFA
CEC1AC560F41D7A14B8D2467BD17425D9E0C56A83FD47EB6CB0272C78C4E6C09
BD235D2BB1EE744F2DA7F88F28C8349C0317B3E92920895C60EA8260A7903486
8B2EBAE8D0430F050941EBAA94834E225088D498E941B4FD24C76A8197D75524
D043C6A03A6647418916E49EA504EAD608C172E8096F191B632AD40268BA0E3E
F8E08B2FBE181F89ADBBD75E7BDD74D34D4C02A516FCD56923C4B24705E1924B
9023EAC550099D29CE8EA9512C2B104D2824742143BDF0C20B67CD9A65EB902D
8DD677DD8A260DFCD4ECD9B3E5475143CCE3BB66A159017B025DB66A0B03CA68
1F6ADFDD855598E08E2FF22D1BC7B138C8555ED8460810F6B0C3811ED87BDF64
E200DF97F2AECE60A4E350528EC9245F18259DE5A6CBA7B06EE01424B3654961
EC2E396D0DD7A8547D405AE4BCF3CED39E30A267D88D88F1B2F1C61B3FFBECB3
DA4FD291D676AE7861C750136553EED4534F3DE5945362C1FEB00A38364BE644
45925537AE6175C17339408A94E77F0A661C353AA3F122465A10070E9B177880
4D6E35AC02B6856BF70BD3981D89794178C7DDAB5829E2197EBAD818240B0D95
5935A41EBEBE0B065054EE225C7822D0D7664FA57093C0BBABC9A58FB5D69C1C
1367A6D01184C3401E451BF2A5975E72F5B335960DB5E6AD52CB29F4409BA3C9
38428CD6640EB89B968C9A968F7EF4A3BFFBDDEFE2D54C90AE47C0642607A9EF
F2EB0D37DCF0B5AF7D4DBFAEBEFAEAEEEF94023423068D0013447A325B606C5D
FB558510BA5B4016E2A5C8CA8865E50AD6C1C62B4449940657B27F2C5BD13379
D2E48B2FBDE4FFFEEFFFEA5AA4B6A2D4AD25E97FF14F69C5DB5353E78BE569CB
7FF0A33FA4DE57DADA53BF4E58A55D4AF3DAEF9D73EA49472F7A5D9258639870
C9B9577DF3F8AFA4D6D2B2DE7163A7742F59FAB7D52734EAD9AA15FAFB3AD85C
6E8C360DE5788FEE26EF509E7EEDB5D7EEBFFFFEDA42A951BD566070D384E87F
EC30192E10B44506B1B8880E0916B42F2F9C1E6DCB73CE3907BA508AB6F7DC73
4F1D5B0434FF47A08CAFA91F0082D1881E418472D23ED765A581B476BA854D04
FD40AC8B80A70FF54820B252E8FCC1A9F491B4F64D4323790CD5DBAFDE73E988
23F4742001795307444FCAA1003C1B93BBBA29559710BFFB2E5C5346F9165B6C
F1873FFC0158A851AB8E00A3442211A191CFA67A36AD15CE181C521AC3698D17
F668A1F227B2D6FB748CA2804D228BD2C5BCC0C2367316513DE7AAB8381A3AE5
2C0BDCCB451951395A01A3596C824352AD3964E1EA043B2984A0535EB582A436
52D407955381FC25504050CE822C05A7CAF077AEEF1423E827A216E060B3BC0C
06EB1E35F69FFFF99F3A6C3C0C95F8C36EC41861DB72CB2D639149CAC389EC03
7F858EEBE848C8CD011CC5CC5F2C71A6DDFACC99332FB9E4122AF34C9C843DC1
72CA283EFFFCF391146E12E03801D3A28F012907179042E957296FD18C243DF9
E493D1499A433D977C91B973E78E5455EC4C33C13AB62F019928A19A59A9BD4C
F85286F5C6E9B502AB063ED8EA50D653D84C8D5C8D5A1C7F22E53DA8F5085B6D
B5150D2ACC89A65B53086E051C475860FBE24D7ED69FC8703B8247C2B880A7B3
371F6B15DC82C2CACF941AAC38661F907ECC50AD1DDE27219C5A5E164C93D1AC
4121A22FEA82DA09FA22E790398FA12AFF1C4B44341EFD4F7F654C6C561F260A
F02311EA68EFD9146C44EA3C816CA758B0C1A3B1F1B4ED19EACA46670D52BCBE
FE3EAD7D477BC701330FD44DEB519CDA92E5834B2AB59681A563AB4B6BD5F2AB
CFBEF6F45DF73C3469C5A49E5A5A75CA84850B174F98307E69DF7C29E3556A1F
AF4DF85DCFD271B5D4B574F02DCD757BE7B49EDE775BC6F7B42E6FEB1FE82F65
254C5E265C4EE15F5EFA2B31CD3A2E49276EA02E7C2943CAF2AE9708388E8F7E
95B38B414C504D3386499105F2D414729F8523138F796A8A4513B8E2E0D07B27
E5857914C545218E11E9B3C075288867AB2382534EF9A7D95E6FBDF5B46A6C39
22701277FAA4BB0A462CCBE8096C441F86B5F798C39E3192646D8156803E5D33
C96922E2AA4F125DC395D4F8E7CD9B77D2492711B6D4F82582EEB8E30E083D30
7669EA0A5F1BB3C441269F65D25CC46CA9D189CF2CBF05329FF8ABBB1239A568
C888A422CD4F7D82ACDB34879A5BED0D074B4652C05CDF4811027EF178DAAD92
6F7DD96597A1A19DE00014421136B43C9041D9AF2D28E018D6D203CA28E72CAF
240989D6047B17E311F27A22AE0EA7783939BD24E41CBF45C099AECF8D1521C7
001FFFD9CF7EF6BEFBEEB348D5826913A0D578F3C4134F94EFCB93E82EF25365
308EE201E37C801AD3451CD884C48305C09C417E696C16790E60326097BE6543
A9C039CCC43D7460F08911AC7C9183AAF775775D70DD75D7D577A5CC4C1740CD
B4BE15034A3A065AB34278304221E80E66167552E3265B29685FE818192A4B6E
14B1B7722C0C40DBB976AD5075DA2C028CFD436720DD4C64163525366C61EBB3
C108CCEAE7F5D75F5F0735BACE2D431BE8A65CFE6639AD8C0E0C54245FF8C217
EEBAEB2E8D811096D1064624149C60AFA96E044927A962BB26DE09C47E38F304
C458B528CA4BA12F217B5B42EA3BDFF90E9005AAA5F5C5030F3CF08A2BAEE029
7095F09B8D87E47965D49F70C209718D484BB3B58E3CF2C86BAEB906A3844037
5B9470742CC6709D652162590AECBE7E275A2126616D2B95A57DDB5ADBB4F557
F4AED864D34D3FF5A94FD5DB63D726B7748E2DB74D5CF2CE8BE3C7BDFAFC5F9E
E8EEFEE8BB8B56FFF12D470FD6A4F5534BA96DB0DA3FA675AD6C704C5FF6F429
E77DF384E32E2AB5A4EAA01479EA5DDE56AA75C9BA2EA5A51D6D1D3A293AF20F
3CF0C0DB0B57DAD383AD592A9575D3D654EF865B1DACE89FFCE3F6A0309C02F0
C1A19694FE5A3A929AC36F7FFBDB5B6FBDF5A38F3ECA7672FFAE61A1E969680D
8FFF6A6BDEA6DE8F7EF4A3BDF6DA2BA6CC35639A43E73BA2F6C5ADE96EBCB4D6
CE98663977152B1BD9065DB808CD80ED635B66A3A4DEB2C0F41E49704DAFE1CD
602F369229A6DC464115E13950F48FBC45B6BBBD8FBF2E03FA739FFBDCD5575F
8DCAC1188D0CF04C82E13E51B960E392EBA14E04416D3C0D9B19E3128E1A421D
F066D80DD3C0740B43AEB8F5EEBBEF7EF3CD37DBFA1F56015B1C6924FA2E2146
1C59C2005A59EECE9A12C725FB46529C263D48D7C289B3542496462186792135
78D481AE3F67CE9C830E3A28CB72BA3E5C5E965F42412A104F99F83E53639A2E
7D5FD3B7F3CE3BDF72CB2D9B6DB6D9934F3EE99CAEE3D2BA202B8AF940852E9B
C07B2BB68B421E1930261DF6FCF3CF3B926036AE613762CA1B40A2AB6C52902F
D4836824B2539C18031FAB3DB7EBAEBBFEE217BF406D63813687A02927D7F47D
FDEB5FBFF4D24B5975E8365DB4C34870926436CA4C4B21D6EF34120B0C75A22B
04CAA11F3093E06E1BA03030A89961DCBB611530C125C6B0F7DE7BDF7AEBAD7A
2EC223A82817B9C7DA5CBD36DF7CF3175E7841373DF8E083B5A06E8459986706
1693D936BC20AA8C0D0F5C7E174D0A361B712DE20D469C5E78E185C71F7F7C6A
380AD6257CD1B07C8FC41805DD88D8606A843A1C1D1A2904CD7CA6DC17C701A5
0AD9F11B27C98C998C8A0AD179F6D9674B3542BF059ECE004000ABDA5A1B6EB8
A16695398F368DDD599398923CD699D2A5B07711CAB6E73CFFD59C9915F8B4B6
3A60344E3B079E6362D1DC9CFA8A421F71B092BEA6ADBDB7AFB7ABB3ABCEBF3C
38901A36A89CF8D4DF521BB3A4A36BB59E85F54C554BADEDA9BF3EDA39EDA581
855BFCFC9E1B5BDAFA16BEDBD33D2EF52C4BF546C27D529FD3C74DED5EF2F65F
4B5DA5D66CB06FD98A715DABAC585E696B5F410EA26E752DAECFEABAEBACAB29
5DB06C519D85A32E442BF552A47A3554DD34EC1F1C122A60E4B278F48CA79C72
CAB1C71E6BDF053983AAB6E2D4AF7295F449AF6C6157344F0B0297720FC221B0
20E89ABA8BD47C21746F1455161AB3F3BE16D71E790ACD4ED83388051F933543
E741593C941238793452081A71E1C22187B8B0574849B82CD0522246BC092F93
FA8D44F74689466609073E198F859B2701563BA2142EEBE763D652D2EE5FFDEA
576FBFFD762A7C28F821A464089107002CC3E6142029E63F326BC61704F5E4BC
78F66141586E5DCA0C6B59750A1CDB93317DF8E187EB4D4493BD531E01816C1F
BA4EAE3E76ACFD8D084343F550E8A5BB48D7DC79E79D9E195F7365E2D681293D
B06E2F11A3AB6BA960C2732346EE04FB81A39D05DE7C834DF072F43FF14650AC
5C9C76F1CE014B8EE82BAE86E60AFA1F1C1A2AB3D02529DE0E2BC6BBCD1D6F9C
12DF72CB2D351284B851A91877ECD75864620F38E5E485663E22E465DE700D58
8747EAD955DBAE00B351C6A18560E580030ED061D6AED2E4B0B438D6DE25A6EC
A8E6F4E8DA5274D68C0D06A20EB6F665EFBA2D173A866575A1116616A11E8667
A27F66D869E618BF8D02DDAACEF8055EE40B7C200DDBCE867684B4F969D652C0
F006A0996D1BDBCB079E2BA3753803DA335FFCE217AFBAEA2AFC5A5D0DE3A310
608C1365E0BD4F9D66957A4430DEABAFBE3A2C6CF6C5E3D18844602E2976544A
7FD5D83875B19516FB04AB99B5B6C095EC933770FAE9A75F7FFDF5460BC68272
5C6DB9CE14B64A62AEB7DE7A2FBEF862A435C01CD430A89527811D4B35BCA5D9
5D3CA9FE97A091C9C5D2D79D9B4617DBFE81FECEAE7AB0E1AD77DEE6BB33F7FD
FA9A1B8F79FCA9BF7D6CDBED572C79BEB5B6466F7FE79F5FBDB3B3A5EB9D57A7
DCF1F31BBBC7A7FEC55306AA69C294B7162DAE337C541B5C13DD63C72E5FBCBC
CE0B554D59ADB3A53C60783348345D5CB72BB7B532C27A41546DE57A119F40F6
1111D5234BA1122D2021455C8432424D9164BDBEF2D4534F4573CD4AB7D90F46
B7156A6CEC01BBCF81FD5DC82B4E3AE924DB64CE7738E06F53CFA51FFCE03D6C
740F058DFC1A6968D350DA0A9FA3E6171A1197DA9CF3A490EDCC18ED550BEC22
F88EC6721A4EEC2D8AA033915F3567FB0152A4A7E63A24AD5D166F401F32846D
ECE60A4E32725E242D1D78232D8A7DAFEF52858129A92F9A139069C1C07256BE
94F7F83186D1CA68941074EC1A9742CB6DD60EF56CCC170A9B1571961D24B266
40EE16348886673A43471C9E07240C46D8461F93D7AA8DBA12B3625BA634B4AD
82CD9CEF7EF7BB3367CEFCFCE73F7FEFBDF7E2EE10FD5B679D758822E2259B99
C83BC9B9F1885A32E312DB488E82448FB6F5F9E79F8F0F4DB484F836AA9132B5
51080D62FECF2CC42E5AD507E44F93CBB1C03222CC7693B50E16A573C0DE04BA
9406864127A12937D7D5BD5A099FF98B2FBE586242239178759BE858D8CAD6A4
3B4504E2A6A1202C4D171D217505384B23774CB3078C51864FB3C9269B68E68D
D77594180DE44237A2D0707FEA49B7DF7EFBFBEFBFDFFB350DF5128CA488CD91
C8EBEBC3F25F655791B3741F5FE2BD517F1B1EA94BC9893CEFBCF35C4AAF6B5A
4E1172E41C6A6E310151CFD449A3985D6E4E7F4C62C550B615147096D3C8212C
4A39DDB4361E99753C0FB8D8405D0210336735B958C48DB3986C753A371354AC
35AAF55862AA419C409A3D7B36E400921D9C028EB72E42DC1E4668CF4F44693A
897ED4514769836160693F3CFFFCF34E4662D47A32E33E41A5B158CCEA99679E
79DA69A791A85B595EA8D52CD773818B9735A8831BA2BCBEB1176603A577BE36
E3E0B1E33ADA5B174C68DDBC32B8666DDCFC579E7EB5BD7B45CFC2F137FFF857
DD6DEF2CED7FBBBB6BE240256BED7B77ECB8AE854B077A6AE3EBB0E7F446A923
D506EAFF1C23B194AC67731A432D97CA752C74C061999D1BF915BB8A31458523
EFB021CFA82BEB0A1897C346A1CDA71673404465100B6635F077F16652E8069D
421012D8A963CB9182B114DAF142AEC265F1326509CD9A35EBC4134F941DF6C2
0B2F7029932E8D14828ED96EBBC2E49BD3D0AA01CFAAABED8D24B005E307646C
28A758AB934258DEE08FC83BED61139E8D7D50F05FD149B27165B9024D651B9B
3A8A0000A82B60A1101351284559145C0B687A6B5012B1802281E3202E8655C0
DE7BB23E1F78E081FFFBBFFF233D6FB58DA235352CB29A1CB6FB0DBB72077F0C
873BCBAB04CB7963F56810486850EC6A238C4DB27275D1589C52A4A475A4C559
015F37FACBFB2622E0298CC15642D702C0C69F8830E9534E39E5D4534FD5BD34
051276E69F3294C9F96D2B12478178452ACAC2C6051F61154B3617CB4E6FCA6E
8045D987D93452C49C538E94615DB5A5A4BFF5EB873EF4A1471E79C4DD791DDB
27664060C45E5D4BDEFA10F18709A967778D7204437112DCEA2BA25B3DDBB540
DD9542EC2EE2D1AA79CF2242D3C3CECF4821AF02CCCF2061C48DCFB9B763618D
DC2DD8E85C1D802BAFBC92BF4AD06B5FCA5ED19F70647535B0C4167C84EE5D38
48021BA3D270247CCA684BF9F81951E92782C19525B0D5283978C9259720D631
38CCF6EC35359AD47E06C9E39867F5A4551B546BD688C6FF03F22225664186CF
046885102BE2DEBD5948B51C7DF4D137DE7823D3154D1C0B472CF4886920C588
6C85F0CEA20151CEAA596E5AF7678D621BFA76CF98314313A579636B699CB871
B2D1A307E01C902B447D4D77A98A8C7D0589E1A9334144CA837BDEC3843DF0AE
0A2DB65228AF4879DF657D580EF419679C418B434C67B7A08F0601B3842623FB
43504123D191715F778BA3421C3B0A4042293102A46FC938931A6B6974F1DA6D
B7DDAEBAEAAAD4C078534BE6C88A897D38B0DECC2D79137BD61DA31C2217FC51
8D596FEEBEFBEE975D7619679CC78FF5050613701DFB6DB5463B3B248CC6891B
6A0FC1F5B858DE40D5B2D00911BFC51C7994997973E2F417206FCDFA221271D4
02151713AEF3C2E9D868A38DDC3E3CE5FEB1371E3F9842188C951FC483B40BE1
0D066D91B68A8E98934498655C79EBADB796A322C155C99BFA001A2F38DCA929
FA42A6091B88C0808579662165C995054A8A82021E69C38DA480F1F3227E474B
2B55C703E027595FC6D89D69E44C7AE01EB4DE04B8B3163A56C0B5BCEC645805
038C0D2F843DC17D514B520CDABB34A9E5BCD9A44580325A26946B3AA9F6939F
FC64975D76493930D5F06FEFCE9493AABB588D58A8CD4CF937C71D775C2D2F16
22B4A80F94F326390573BE80AFF1AF2DA16F2882CC890AF9C75B6CB1C52DB7DC
3292A21D6941DD8A231A07EE6AC01C4671A6F9D464CACD25B415C3B39E7F320E
06844B57117172D7305259E655773B4FAB767C115869A8268FC8A31889653EB9
1A8B4844979F0192400FE4058D6443AE0DD5C8B51565A5B1BE78062ECA2AC40F
AAA17919C3305711895B5D9608331BC33BC1406B4DE3BFFEEBBFFEE217BF58D1
78A586EDAF4156F36ED0D1F02AE5844195D04C020FB29AF7F0B67629E79D70B8
2C4F0D0D93FEF4B39FFD6CA79D762292848963DE92BDF6DA8B3A280DE0E73FFF
B9FEBFE79E7B082DE017924005708478621A2D223DC3D9507AE1B8BD1D378A58
106D15EA67A22D4ECF73A07C313962B83EBB91D8A9695528518DBBC833998512
5BAE76CC31C7FCD77FFD9737271CBF696490146A128D1515705406CE9B3A2845
0C166BD2D731C22BE5902E2C784DB28CFEDFFDEE776ED5EA59F52E2AECBD7841
9E9431802B8607431B4067F680030E200CE96144A336DA0491D0C3EA5C63FBCC
673E73D34D37C580198611453811D511A7B19473415BDDF0838674F2C9276BEF
5D74D145D28E1ADE0F7FF8433D784C1231BDFAF5F39FFFBC4431810186641451
1492848B887539D96AFF5EA70C7A4B1B76F8DCA438E527605E78AFA69C0ECC6A
98C5728A0DF46E16CA76647865A5A67AB878C566D59B8D8A8C6F9E505429D124
90A584F2F0E7B4DEC077B39CDFBFD4A097232AA8411B54A58F7DF18B5FBCFDF6
DBAD624D2558883259E80C3B3047008841C5BC053FB8DF3B45353ADEE604AEE5
74C72E18A056C4F034D42406A0EFE876D329541F3AD2580B1D0FA9E902B08628
21EAC207D8B89C559F6D439C62C149CAA302B5BCEA3F560067D97BD0F7F7FFC2
08ADE46DCF6B39134BA4FB61B9012271B02585356C0B08E02136C5F41969E873
CF3D577B5A7F922F8888C73A895CD044EC093C98D44292C251475A23B8E2D992
D47B3D86CB7477E90CE06691F94B321AFA2A2AF6B4AC2472AA39ED286ACC7CDD
F079610D14425EDE87A5BCAD21DA5D1FFED4A73EF5FBDFFF9E39D15FA5BFE9DB
931AC619F5EBA506079ECBFC7174B82CB850ABB4725327C4080B30BECF6E0A5A
1F99EBF3AEC7AC8526B21FFCE007255C747714BCD3D2EE67E5BA14FD558ECE93
4F3EA90D70E79D77EA2E50FEE290F91490B024C68E1E35E30128D6E6AC419448
60DF08EBC55E7B6C7E9C6C302B7E9072682147DC9B0B1A4B911A4D2753DE708C
E3E081B1EE4E04EA7FF686C5744C2D8D72640AC1AA189CB41D694E34AA8AA55A
7EF9CB5F82662085EC839C02DD07D283EC584BDE95162F303542740618C7A472
6968AB832C27BEB065669EFF6818C5106E96D3093BB1C524E026C5BA2C7F9DDE
44A91135B1A41DC9032ECC6741B09B832C3E85A32F66E97199F2F5D75F7FE289
276EBBEDB63FFEF18F53F0F76CAD22D3625837E671539E309694C05533FDC01E
7BECF1F0C30FCB92B67CF035E3C12F85AE39B2961E7AE821948B239DC380149A
0F736AAA96FBBBAF68D1204D705374020D07882F12871C755280CCA05BE8E819
76D8610749AE98F224BA954600DD0C3B30BEA21B6DB7DD76FACC030F3CE026F6
EE821E7B6214CE703CBAA5C0FC99F27CB66F0410B1B0A5E201C872EA92B85458
8BB415E3C06B24723266CC98A15F09E3173C2DF4B1A96A228786A39136C0EDC6
FDDD856B96262DA15BA57D3B0428FE903BEC52E11353742920301DA5D705D75C
734DA916BB380475BFFFFDEFEFBDF7DEEC0AF06EFAE215575C316BD62C295DDD
11EA0066B8904477A639053679CFB94BF448E70358D591F0202FB9E492934E3A
C97486B5BCD3976350DC1786D42CA7CBC8F26E0DD1F82B38DFDE30A07659596C
6A9D086A46EDDAC6738187A7F974889807A12822D691DBA4F3066006B2A6B23A
4BAE52830857A6AD2C09EB2D4907A84ED658630D9938061060FFC5D98EE8C858
1B9D1A502900BD08E8425F3CABEAD877B62004FD3F4F6DAF85C2845AA8C78D60
A26A5E11EBC8165FC70401B86EF16A1AFC2CEF166029E1A4A04BF953201828E5
34907F372258D80C4E06C79E4BB012B22536D964135260F61DB997A38329F76A
0C96B6411C07EFFB1A8DE130A12BC549BB424207D0C4FC4D05D72B7A8DDCDD59
39D35EA2A59864A38591574C1446461AAE54212AE042F036E54C761620884762
3FC8225A12500284F0C902B92CCE40D620BE4821F6E3D88026507BFED9679F2D
7483F55E25DD6EA00658AD880F20AA4A12DAD9C91442CB9AABCD37DF1C125F1D
F38F7FFCE38F3EFA689D2BA6F9519B256FFAC75FBE8E6D25234239241E9629CA
780624B8257BAC4F350EC892B470E60B0778D881394AA359D66748E31BECCE30
7064DD7F29925A9000E3A6003DD88566EBC60423CC481644278D9A45CF6794C8
6C56BBA4067C313334B3242F8E80E01445D56BADE37362739BE1C5FC04A7429F
2F84809A17AEF08A8993C8F690F206537A5858C0806FE0B0C2C8CDC49A399634
672C8572FB645D16C777DAB469C4A98038512A0689A3EDA494670DB49BFFF77F
FF3719D91FCA42620C164F37364D338103B8744DBEAC01FD15001DE07CF0833C
7E2493B3D7A5F53DEAA8A34E3DF5D458619982F786D768E6DB827F800BAEBB5C
7AE9A5C71C730CF10C824371FE0D47AAE54012E8739B45731A9A85AA36113218
DEE814F236DB6C237160B996423ED559610F09BA1BF7DF25B46BAA57607DF8F4
1A98AD527A75E8D6281822C058DBB5A164993EBFA6503506D3712607B491EF64
01B40365D940A8C741461023A65D265E4861F86A91B8DBFC770E1AEB312169E1
F86010D801687E453BAC703C4D470ABCD63DBB2C9A52A835A8E5D9599B5929CF
A319F1EA75E4A10C7465D5087EBAF16535EF639F05AA735656FB7FCF3DF7BCE9
A69BD0C4293761A37964AB944364052C4773EEDCB929F728682E42F24BCF224B
0EAB22E5F677413E171450B3F44623005AA40609081B206AEE3B7DFA74506C2C
31294BC9765D9322556438C7D9191986F4E52F7FF9861B6E70FC35E59835E2B2
84C74C20432A9A68AEE6DF36A88933239331A283034B068D85E3A01583B7FE79
A41CEAFBD4C7D1A271690ACF40508510AE1E92127B030BD9DF9244679F7DB6DE
0107AF8F515A078968ACAD6C5EB0D13DE0949BEA51B41153C2F574CA2AC67809
56000071143D855C8BA489D6094BD0354BC4F468618BE42D58CD6C5FF30C6330
9AEC14730FB303E9131183165B31D9E039AF068237ECB56A4E1BF23E17AEF9E5
7AFF18D44A79584C4B23A5B5B2A6250700A740166DCD11F181A67176E92D8138
77FE907A3BF6D8634F38E1042A3E659DB845ABBE8BFD7ED86187C96906AFE832
AA9800CE4267620766FD14C71F7FFCB7BFFD6D9EC5782E0BE868B702C3C1C825
2E8A9D64628118DB88C6908508961CFD839144F6E0294EB098E01691A68009E1
EC98A5C1C41A36B3B2BCA3733CB3C31E0ACF4C3CF54831139AA6C0888BC238F0
C0032FBFFC722DB71E99E40B6155B70BA4EB1CA2476FFEEC673FFB8FFFF80F1F
2266150B75EDB5D7C6688BB18A91C64610BBD4206C9216D720C194E94F288CED
B6DBEEC1071F7425BA4B30990ACF09A11A6EAA15993163C6430F3D2469F8CA2B
AF909602700BC6D51D3E1C6E6512A21F3C929C8C695733BFEA0773A91A1D6D97
8353A64D08140BE778580F38DECB0D5AEC9FF8EEACDD461B6DE4F633519B7AF3
78A8605F5A4237B95843E8CF131444013B8A4B29A69F82C572B09319705D4021
1833ACD8895EB85790638B1183A0C0C1D534EEB1C71E0F3CF0C0FCF9F3C9E545
5B8DBA67774F6795233E4E96A2BE8810A68CD684A088F79D76DAE9AEBBEE82C8
D60C5C1E3C13AED9FBD39FFE64056C691985A17F5E29AC46CA01BFCF50F348AF
68D1D472E0C9CC9933AFBBEEBA9443995268930E94DC5C80D43E450401273CC2
7062A4E5FDBF6A7999135A81AD8F1225590B63976599D98F7162304B51C00484
49AA11B2B0DFB0F1C61BEB087DEE739FFBE52F7F49E8C37890180C8CBE292841
E91B170030608E90D5702D102CA4E04FB38EDE556C3E820DC41252EE70E3408F
545F38CABC455F81A31E63037E19ADA6BB473E7A9C7B2EF2F5AF7FFDFAEBAF77
C30F56C45D9F4DD64A7A8C0F648DCA69B23B0EE47247F471813CC89BD9049FC4
6048EA1B46A73FC9789F376F9E034D7866523F7C5D43D2A6FDC637BEC1F6D3DD
F1595D7095723C4141E5F32BD11D725759600D2BF083DA53FFC4273E217D4051
63EC8994421F9828925CEE8950C369C3FF88C7306E8096BC77276294F84D2CCC
E3C5D3190DC799C550A67685DEE698658586547E52A9732D13D98A8B2FBE5886
35B97FAD2FF3ECD4899F6B58EF876382BA8A547FEC16875BA8BE73DD6396E3AE
CB8DF603911422E5D6333207EFD387D4A1F588FC8766D5253DE0A54749D94405
CC636AF9A45C3512F81A4D4041DB37D691883ABBC20674B3026690FC1C6BEEB9
4896179E62EA7DF2939FFC9FFFF99F587315239400977488CC8FE178759637F3
B0C7CC80091346051C0B2ED65C734DBDF9E28B2F72A9CF7CE6333BEEB8E3B7BE
F52D04C54A0AC61142D023193408C668175A48AEBBEEBA7A5819AFE007534E57
A7AF407418C34EFED5787200348422984C5395455FC8958AE07EF4C233C68520
40BBE5965BFEE10F7F28A46B9D1C6156513DBAB23E0FF86988EFEFFF0B9C76FF
A89E2B24D5799259B3665D7BEDB52C9B067DC51557ECB3CF3E7A80F5D75F5F66
17FB8633663A319D7C0D9A8E6F6674A2DC132B350E7BF4258C328B78606AC05E
8848648D6E24918AC55429E01AD0CA2869A2A02EE6C3F647CD94432B126D0849
A5D8B411D412FA0995A64B69EBCBBC920F8722815D0FED45920F6C088D42252C
22082BE526AD4B45390F56C02E8FB13CFAFF5B50D0223104CD7E22B887FC655D
3033B5D6175E78A159DA356C4D0EC24E76E273CF3DD75CB562F1C77550F0B26A
6FBFFD762DB41FD0C2977DEFEE6395D0FE25DA2540544E3BEDB4B973E75229CB
4E8BE168E7C922834F04FB145A086311BAF69DF31C73F3598061479C4B0A4627
014CFC305F87746FE47C8ED9BE58F7852F8E435FCA5BE0B17B25A430640B5220
C2D76D8BF8B99047FA559AECE5975F76C1AEED0C7614359D8602301E52336E7F
02E1B0FEA75B067120CE2F5D02792860748593CBA459FA93B0C7E2B19776D041
07CD9E3DDBB1D318FE89A3E22CC8B8DF7AEBAD81FD4792DA5268F9C7E970DED7
350E86893133C80D9FA3422C2DBE0A0A181B820A284291CE6AA36BAD1A0B5DAD
526E5B174058D12066F56B392E3505B58A49BADA6AAB49D6BBF74941503B578A
1502CD452DAFD4A8E5D5D2B5A1E0F08202D6FF5A0E9C07C69F35C85F21BA623F
3B57DD4C305250C0CD29D1286DD2D04603A506C1B20E2C46A7992DDC62C795C1
293786701220782905067BFC691C9EE86B7992E155B4A58285E46991A0D3D12E
606EACEF51A9110B5D97453136827E76CCF01F12D0B5A1C0631F7B0462CC48F3
839B15A746EE01C4291959103D60C65C8886C8C303E03AB1DE340597C24F6499
455818D03201F0E6BA616610F2108B3F1B4D54F47EED6B5FDB65975D64E3C861
F27DF18AF4C94D36D94456D8B0CE10679B360CD255B546F99375BCAE20352337
8B7DC0424013B1C61A6B1C71C4111AB6E4548C3B7DE4231F79F8E18723314D6A
B82C6E8EA6D7565B6DF5D9CF7E962A2047633C4BA3AF6F3C0F3C88D688093709
33567944C9392651CB99777C66B246258023AE3CB821A0DCCB4CB62D792BB494
93917184B07F0F3FFCF0934F3E19FF0078B94D25D6945387A2A584461F8652CD
366FCA3D06B478ADD16E057215F05906ED637A3BC86CA2BEC1BC79B399FA39D5
081D27F3FCB29D115B3E683229FD2476A2499E3163868CD4C8F36739187D5F2F
4D96A352BDB21AAA9CCBF9F3E70F0BEFF4AF56AB4E3D72BEE4BE48C36977690C
2E4C2078808B8C1D46A4DA58300F35CB8BA06A79ABDA98E2C5F8E0D670AAD88A
753DA126D663733418C79DB437D698EB7674058D596F4AFE6AADCDF6A7E9B520
6687D8FA2C05D2A10855AD0E2576B6FE230FE5F8560AA5C60EF85773B2FE18BE
72C2D88FE65570AEC1D286436D6033F5055C6765CFE69089473DDB6469F6A30A
3F680C9A2502FED199CBF23688647F1C75F709359F46ECD69572109933659233
DFFEF6B7E940E59A521BB82D79CF2BBDE9AF007031181E1817093B3CC0022D3C
F3A0D122DBC1664669CFBD88CF710547CE52E8F8A903A28BC4500D09EF02FAAC
32943F9FC7D78468E74B2010876393F0954268A1F02AA474AD17567EDA359A66
C67F9F841B511CC40BA660C9163644CA1530FC851216071E78E099679E090414
45ABC7D359929CF2BC13C924F08B596D5735CB3B2A461FC51BD442C70B9F0D57
37EC1E88C71E7B2CC1B1D85A2706645C504BC4836094DEFFD297BE74CF3DF7C4
EA8E38DDCE5BD32C01830368282DBA10827407C373F5EEB12A42646B9BCA0EB8
EDB6DB52C32F775826623B21962A87E69D595E26CF8C554726DC88EBE5177AD1
243E31CC18A9DDB4B9F5264CA2CC9ECD20D42AB94344B9F79861C0B613759E4F
39E59448E367802BB6B6B68A973B35E25AA858630E7C66B05863FD5FE1C55E5A
7BEDB5F1C6C8F01186BAECB2CB66CE9C69FA2AC6A34D2259536E90FADA2FE749
231539E11CEA538D568D8D5451F02827A961ED252DA5E42FF9BF96D0131EF3A2
30786731EDEDB199498D6BF2A302B6414CF20C89EC89A248C1BB022E14AEC942
93B7B3FB42FCC0887A6D4B643A2135072162328C489266CC6CDB9A5B39B2DAAB
1AD282050BE80E49FE980E667C3EEA2ABF7043497FF8F35863514D124AC1BB35
2F5B14E8D1166721A2D319B318EE9767AA999443826B0D142ED163EEEE52632F
4A0A21285C343B3CEE6E223148A931D12F2A08304D28E0C1E783AF2A2623A202
F6CF05913BD8D457D84EA4710F29EF2BE3804A2D6FF11E67DECA095B41CFA50D
A303824CC34087ABD8059F18B559603463A8D123F74EF609B279576EB046BB72
CFE83C0FCC9929801429579C12A73A59924BF556988D49D3531F7AE8A1BAE095
575EA9F7F5ABAEA65D873968A00C3B04EB1CCBC991093D35C8245BC046C5A691
89AA0ADEE97BAB63422F1E63C71D7794167168F7FDBFAC809B01A8A929BE9D72
03131C8AF7A2B3A10CC09918434935056E980899087677E4F1F1900846B1605A
C86DB6D906B4451A2E645D80F2BB3D561A811C0A0A057B6FB1474A41E4F12B15
8A967A20CB220607FBC08781CA5D0EB9EE12890BA81940DF947256E73494E535
4A07DD5126059585B51C583E4AEE6A985DD2D0B5A5A1D5F7FC1C8923220F11C1
862CC77F926EA4BC1BC982851B192B6D21ADBBEEBA524238D6A96194E8076C1D
AD8BF6866B12B419089795720274A440AD510CAAA7D69BDA2DB41521329FE598
35A7B111D311986D1007FC1EBA820B8440F9EA67288D1C08C181D86EBBED7EFB
DBDF82CF241A118908B0234B3957700A74ADF6A86A796749AC8D6ADE1179A4F5
72C4AF3CB433552C1968DE8D295464A5BC2DB4768E1E0A5427DE8943B5B8FE6C
605FD9DC849AB73973E69C70C2092606412411876026ED1FE82258AEFAD6B71A
AF5855E2A52CE5343524FCC08E02572C907880B4D7AF12B5FA303060D41EA3CD
F2AE1EC38A457BED862E3ADB8AE16BA60E77FAC352441C399E61578C4002900E
8B8EA8B69DAA3453183115F6B68FA78D72B6E5DCB9732FBFFC729D1D53468FA4
809B85BED5093722064E08C7090EBD6F2C0BB6266B07E722EE38401CEB452E1E
33AFC81CB62BFE5229341CACE69DADF10438177AA879F3E6E92CEBD1A4DB74D6
343C69746877CD40B7CF3EFBFCE637BFA1434FADD12A37E5FD2D08D2904D9049
77C30D371012275410390F6C077B846E73901A0914F24A59CE5C8B23C482BAF4
A365B89E63D6C1CD86CEB0BBEE3DD15ACE49FCA1C5FAF0873FFCF8E38F17CAF2
DECFCB35E9DECD2947D93507F4FD8AE8762C6B04288707439218A66D52F62B4A
DAE8507236D3A74F87C5B09C3784F20E884D55477A49AB55735620A0B92E42C0
D6CE1A38CC5AA37D3A5FA19B070B89C47160CA22CFE7E4631FFB982C0076A1D9
371D16E65454F2169831FAA44B6DBEF9E6FABC36BAA910195B215A8E7AD37EC2
370226E0070480503069FFEE4649B9028EE9ED8240470C21B553CED8C09F5C3A
9C1A411E13D0EBD9DD41D38A470F25B1AE65D2AFA858D3405E7FFDF55FFFFAD7
B91172798B2DB6A0693CF6A9BEF8D24B2FF9BC398C19494C475F7D429D881ECE
5E29B4E6D50F1282679F7D3602176B8088197D6334F9DFFCE637F5015C87D430
CBECE65ABBF35CC8A04F7EF2937FFCE31F495069D87A04CD099A2F8A6C530D64
43D1DD29CFF6A55CC45BD545DF2B4A674495264792CEC48A964D9A6D4DA0FE64
25E7E89C09B723AB91C746662B8564732DB4F5D4074E3FFD74DA8C627970B4F7
DF7F7FF97C6C12CE351E98FE5A6E503F3280E38F3F5E0ADE82CF0EB1964C17FF
977FF997279F7C524BEF56312ED34A39F19CE3C9715A78C5A23E47CED2D06C6B
5CC108D727A8631A6A524851ECA06C62421A416772B7E6972D75C7C3D98A6E4E
4C75CDFB51C051EA46B0052FB8B4B0846EBAE9A65D77DD95290535D25CAD9486
BA1997345E3A0B1CD2D8E9B5C0C3E5D88676DD4E3BED74EBADB746438489B21F
88EDFBE52F7FF9EEBBEFB67C30D359944B0CACC07A16BDE7C2A98F0464B4B3D3
3B981A4EA2B92583D1DA7C6C30EF615C3025E32E1A1D7B54308CDE13ADFCAE95
886888D1195E867DD995B18C88D8FAD4A47DF16E5DB2E69972C2D541A70F7CE0
0332B4B1D635CEBFFDED6F5980F5733BC90B5D812C2C210BDD1AF1576BB05BD8
1169CEA5311770F7E8D6B2E2752F5D64FBEDB77FF0C1075370EE23B30F254395
46D7646D94534F3D55322292C51714B05EDB6EBBED238F3C12C3D7B8DDBE324F
8D2C633C6602C1F68FF170E7BFD9B2B85C3EFC595E1A78F3CD377FE52B5FA1E2
1E37A5DC68153C7AAEA220E5B39CD836CBA91EBCCACE023891E38B987DC90242
EF5F75D555E79F7F3E4581C62747D2B894D36959A310BF4A015EE1F844A11CDE
4089185E932271BD56D64416B6C71E7BDC75D75D34FEB2F4B4B2B4F47192120C
20EA013D84D5680FC6A8E6949BC391921EF1ED7341B2A096635C79F9EE2086AA
39296E6928D9590A91529F081F3D7EB0B0889ADB65813A4D32586531C805D1B3
DB1D679EB9A6C4BD1E2A0A070B32AE13E9708D9E8D29B43866E7117846BA86B0
99F5B0BA4E0436C251A54F927DD70646683078EB12FBA0C4665343C74720742D
14C1B316AE0B28A8A8B80429F77D5D66C619D490584AD01B00796C54016BD017
7990C8E1036E4E2381090E5613EF0790E4101D7B53159C2D23D21171A32BE061
E52D4163DD481797B3A829BDE0820B7828C2BCE0E328522029ABC794B09A3F7F
BED1C2327F6964CEF1A45B5754A2B12D37297C36338D403499C036813EA406AF
91E32BA448565D7555FD5557D6CF30C08306C81A601A2243DE60845191C95443
40118F7C60F50B85BF29474A1BC743FEC851F172CE59C6FCDBA8259781DC2E14
CE0D3BED7E153EF95E0E982E0D3C0CA61C9BE91F0D419BF9CC3294A9190525E8
4AD02C2F6C8F792642949A880D37DC502E91048406A6132B27D2B5685C0AB354
DF95AA964071DACC322232D01297683E7E946063F570B474E4647A6B839AA78D
782FCE25114E92F93626A2621B25E887336DBE34DB1C6C23273E6D64D8DBD049
D009B18315ED3B248E153005B22EAD46C9D99A6B8EA2C44116F616FB243ABEF1
D1F0687DF796469363329A2D795FBC48A480E142FC8753EAD8209245FA40DE92
AEE94E7F1A36CEAEE3F3869B110D234959E8CF8114D3600E3FFCF00B2FBC90C2
09C36DD86C1C33C733222625E5DD1ACC6E7DC00107C851480D9E3FDEE1A98937
38CEEC45893161C382F4A6D645F20599E5C612E82422A59B6EBAE90B2FBC00DC
C9D5E7CD652129389A05C3C2E1B25A1337358F162BB9631771360CC7049A0B36
B92151D59CDADA9A038BD38EB57921BC10882D3A67BB1F86A72EE26F892590A0
915AD507F0C275D9CB2FBF9CCE1C8ED841A6016C05AADAD80D896C3A85E99E07
14306AA0B9CAC3410B4EA503AAC6312004AC177D88D06AEE3299F2A4B83447CC
8895730E29EAD970824B39EFBDF5B44782214EEC1DBD45F8974203699A6115F0
482FCC295DCAE84884BF1BFFF9529C02CC74BEEB94019902C0A45008470270E3
EAD9C9D59C2F3335D47F6A1846667604C7C3309C3D4489204853A3338AC42FA9
AB428A9057A1090AB8013D239F6F8E3120046265A6811D40449B6B5B0CC6745C
04CBA336B4C4DF47ECFD28E0A207EC17A722F26DBEFF9759732320BE90948D2F
048A315305B9C051615B4840682B932F5C7FFDF5E53C71F2ED39359F25CB591B
471859A3305150FE412284926DCDC34B2FBD44E806F161D19CF244B5399E9CDF
F5D2163C48838189D5C0ED8C28D70730421D8ED606655B1895A0DBD90B89043A
E6CEF446D4FB92EFEBAEBBEEEF7EF73B4E2C1BD788898146CBF798AE8EAF4290
C0F9BC02E3A325BB81C10E5AFEEC673FFBB77FFB375B0F4435A9D0A7B417A16C
7C8D2D2D87DF5D8D879A8C713344369B07580A0B7146E3951AC152A27C38A3FA
D58E5D3C2A4E5266792914E4567CDDA45DD5BCC55B349F1161B2F6BEF18D6F9C
72CA29F6EDF40150BE5A62AAC98D128F07018F0D478A28370B84E5AE37B7DA6A
AB279E7862658D60E365126626DC169835446A0A5AF8D8FB22B55010052BCE82
050B2C5B89ADB944AA604F1B4BE118ACF910BEF39DEF1C7AE8A13C69256F9152
C9BBC1138B022D21FB89C69738CD086E3769C67694B5245D9BF21C10DE126180
94E366F15D6C3639AA8C7D267D2CC1AD7531CD7B6D2827112C545913550BBFCA
76D4E202AD770B29025DC04756B6716D682FADD1C5175FACC7677DD918975C72
C9ECD9B337DB6C3359514621914D406D6BE7689C4E70A4DC1B23291BC3BC0624
43BD62265AEB80F7AF80BD75254BBFF295AFFCF4A73FADE6CD1639B9D75E7BED
D1471FCD333A80A4FDA039D7B33CF6D86332FD199E3E13EB71D11706A9A540B3
CF0932E1CC8F7EF4A3FDF7DFDFE15F7A3F6007EB1DE7FBFDF5A38E3AEAFCF3CF
2FE492082480E2B6E876A7F042040B27D070B0582993050CA9850CE288B80B30
3AA241267C8DA55F317FDAEC6E8DFECAE20B8AF95ADE99A0145A88BCFF17898D
94439F4C116C9BA530383BC7EE87EC066AC8EB34B45B192FE3B3A826E44DAD07
EA1F7D0600C70C975E5787AAD27020AC345C61406A8AF59B23C6CBC0EED11E95
65E0E5299C6DDED1983500A7823056CC30470C533FC33AC415E8F3CA3B043F29
1528343F662B185EAF9F3FF8C10FFEE94F7F72F7AB52833F28E56573A31098C4
8A972C104A8FC4E485A569FF897A6574180245E707DC2040E294578B726C1855
CC0021B8E3AE70E48D526CB03FBCC9C71C74D20F00494A392513C1036AAFAB39
DD744BDE838C2DEA99B19763AC9CAE76D249270114723CDCA185943749B58C48
79AAAF1618CB531E7AC5EFBFE8A28BF6DB6FBF942732DC19D0710E2C862CF401
24525DCE79D9CCE417F159B5A1E43E592842755AC171EC4A686697F2C8CA9C39
73A4BA48C7F0743444C91A507C63FA4A43BB1CA248340F581E845531C1AD8019
0335660E7B20EC982BF8E050F046329B333CE5958AEC1C2A8C0945A61C8656CE
39A2A1CFD3FB32C82EBDF452DA3FC44C21837778A6395B04A6044C35007E9DBB
238E38E2DC73CFD58D74D9534F3D152420CA18035D33462307220A5E4D6F691E
50EF7CF18B5FBCEFBEFBE853A24FBABA3292E4C7680A52D46BCAD860C31D5D01
47C115750F65D968320D4FE70589C7FEA1239954AF46883071E4C91E1AC7CDC2
C4B9A1022493F123C66DDB99B3E5B0C30ED394FAFDD4209CD284B8334D2CCBA6
17A7FE8FFC7AB1BC3ECB499378B390D4F01130096BCCCD5703E7A8E39D9C5C13
A6A646A8D55032EF9FDA7010F4F7A97D131E309143D7F9A45C076319E1B1A546
42CBA02746E02CBD5EDFFCE637EFBDF7DEA79F7E9A55874DA2102975CF0387DD
EC9F794219892E285354A28DF34FB4D639705FCD90229FD8387D0E70C1AF669E
C291140F300AF8967529D98977DF7D3738CFE617EBA7AD49FD0FF3A3BD45798C
57DAD8251C56126FAFBEFA2A87C14CD78452699181EB03B90F1BD104EE3ABA77
DC7147C41AF8A1502A2C9FF73459F0345CC87D24636DFAF4E912CABA2930317B
6FA384563CF90E03E8E7DD76DBED9A6BAE01DC8FB365FE328CAAC821C0CE8EBA
2DA2DC6D87B9679F3E13ABC8C0D9B21B4F38E1840B2EB8802C60AD012F808B1B
930E4DAFAF938AB3ECF3CE89F0370D18CBDACD6831FF5DEA83D1E0CC05DB12D5
42DC9847F6695F6FBDF5B4BE384F7C970F18B60D1B36BAD66D2D2CC84A818AC4
DF2D18F529AFBF8C118BD2D086B22E4B2B44D24C16C1CE41C493B9F083F8449B
9B37CAC188458F4562B5BC1D2C071C64A59BBD47D488EBCB6DC0914FC152A93B
372DADA994F50FF4A7C6F3965ACA95DE3ECD6F2D0DFEC78CFDEEFFF54F079EEF
1B9BBA5E6E7B33D53A53A9B194AB4ED87CA7CFB74DAE875BC70C0C3EF05F37A4
9E34AE521A18AC65A9AD925AAAA934900DA496BEC9D3577BE7F9D790B9B66E25
06A1C78189895888CD7AF78D2E18DC2395A3503D4188116B00A96BFB269ED372
CE9AC70C83A2B726CE72083733196BF6D250D33F5ACC36A9F92BCCC67A9659B3
665D7EF9E558B46C12D37D1B8F4D97307789D512531A004AD14C5BB5F0B2C5A3
2D0432D9D87212CFD5409FE9C1D3F20F17D9B15213E3A446A0CB62877DC25F5D
AF9F02FE397601F1CF4EDB030EDF68A38D9E7AEAA9C2C6D6F36EB3CD367FFCE3
1FB14E0892C738A863E908492BB28802F6875DACEF74DECA15B23A8CE9ABE60C
B35D37CF2C4A1AA82DD3010B41CC75632599F6C5FBA016DA747837F3D2636B9A
E4073CFCF0C31895961A48F9580446EC9E2F9A13C0D17CAD8164EE0E3BECF093
9FFC440F354A79D569A79D76FAE9A79BCA8042BD3472837ADD4BEE82DC23AFA8
6BD1A2F39185FE272CF98C1933BEF7BDEF41491F755BA9C1E7229DE73B6A5A10
3A7E7C3B5E365C22D281DDA3DBC9FDD575008497863620FBBB0AF8ECB3CF96C3
A71F8E3EFA68DD454A549722DA36ECE79DF24FB99F8757943508ADBCAC482E16
C53A63ADB5D6925033337E243672758DBD43FA9060BF17CABDB250A80D2C48F7
DA77DF7DE56B624610A2E7B039B34553010784C91190D22EE554CF6C2D9A2162
4DEB93B7DC72CBCE3BEFCCD850905A383A55933BB0DFB0E79E7B6A0249CDC4BA
1D36182A2AD629F9A1BCCF4B79C76BC4349566ACA9AE8007030708A1692B7BF0
3E05819882351C4B5D4B0DF67C8463AC572E94E1998017B30C09E58D91E5C455
3EEC9CC4238F3CF29C73CE49B92F08C2DC50559F978202DE6BAFBD7EFDEB5FCB
BF34BA9813412BF1BAC478BBBEB55A6493497065A5D45DDE74F2062FBCB87845
F7AB55D9F92D1FD876C74D6BBD0B6BDDABF5B6A4711F587D517F7D176DB4C61A
CB5F5DB0F6E429B5D6B68B4F392D2DEA2BB77557962C1FD3DA31D0DFDB9695D3
982EEF103C3F06A93B9A96C0250C18D9C3967B8D74BE9822CC9A18DE8BC64D4C
0321754B3945923F4675107E9E4BEA238371B302763A2C22399C74A79A2BCBE9
AB885DA177890A989123856862E4ED1A1694949AB8BD6CAA124D344F649617A1
11E8065362C5C9FEB7FE2B0DADF8470DE946B367CF3EEFBCF30C4649B98ECC86
3647628951903C9484B9C40564B7E506CD24F75D7BEDB5F5A451804350C17759
CD68017829D10B8CC405020E5C95F2AE1899EB9A5DA362C48796815BD209555B
DFA106174AF201448923156EE7542073362F4425F4D2719E63DEBC799A050E39
7D9BB972CA9D66A6CC9D3B4D92EE6002268F9FDCE9580E4CECB9DDFC42E21758
8AD2C8A8B672835D164BDF95793626A4F5F5455343A440F3641DC0A35542CB42
4D2F1C752CDB76DB6DF7E8A38F6AC24137682751248778658B386C45BB24CD5B
B494B109FE21058C55C451B1953ABA07CCE1311F10EFEBC10F3DF4D09B6EBA09
C46696338A207F817818FB9D1A96B89129C059014158B4195FE3F9AF0DC503B3
AD299B4EA174874894FD5AC892F4453A0FBAD4C11DA81CE9212ECA3EB7404451
B926C79BC70D12A292033BE6B9328F4F846C0004D5FB1FFEF0871F79E41192AF
6EBCE1CA45A6CE6E280051585FA4D7F5BEE699743B006637892B886317B76401
D5CF53736C7DC689F96B06B4992917B1FC35146B24FE6D03E8F05C8D97E4E0F3
75BEE5C45335E786C4B2B4F487138AB0613D8CB47CD9F87175913AA6AB7B79CF
F231DD0D5CDB92C5B5CE495356641D69C2DFD69F3F7EAF693DCF6FB15A1A9C30
AEF6E6B272A9A36DECC449CB1B9C68AB4D9AD0DD529E30A6BB7395556ABD2BBA
0607369E3A6DC6A7BF92FAD3B4B163572CEE6B99348682CC180875E68BEC9829
A5880E16D46D212CD97C5E526E62EA79097A45239B858E99FE483087D76BEC1E
6C5F70FB6872D03484850AD1F5C200E279B797C62D4CAEE02084AEE685D66064
6E7EF4A31FBDF3CE3B4D06093F97AF1C3DECD408AA49243236936481156846F0
C497B9D09D34A1EC931DC21761D93471B786A79D233514735848665BBD298F47
3A1EC384475F4BD3B2E38E3BDE7EFBED29E7D44C0DD623F74A72D629C23BEC10
BBB2573FC3D990F218552D40C9EAEFC436679626ACBD29840C284DB9A5835D66
E22EDC6A14B00599D6494E582C548DDE127941568E5A1147A4EDFA5898C6583F
548E969B294F12A0C5C9DB81EBA148401A91782C5260A4F23B6C193EE030C028
0408B5BCC30433A651E9D91D47F5C76807C6CF2E1C2A545216EAB55243FD6BFC
F2921F7BECB1943B4C513F1D72C821175C70013167DD1128BBFED70523251659
B4F48F28E0E6F7311E63E025BE4AA1312AC25DC3D0FB5272583CFE2E0933BB7A
3EF931EA9B42B2CA46B13101585D18162CD34805EB4EFD128F2576444CDB0E37
FF9F7FFEF973E6CCD1F5491FC4788C140F4DF4409E5BFEFA2EE6C3730229E5BD
5A23EF2EEE2C9A8634B9C7C07E40F3FDEBBFFEAB7C3E09534D1D52863B3A8950
CB61BA64E06EBBEDB6DD77DF3DE534B94441903BF614E332319FC61C18FCE52C
807ED86CB3CD6431E0FD6BAE00BB6EBAE9A67FFEF39FF55C1A09602B26D6A056
8C66D7267084BFF9CD6F5E75D555FA0AEB2E693063C68CB3CE3A4BB3AA370954
443E8DE6CD690C6A0AD88553E79E7EFA69A78DE9E8EA41132F695C21652DED63
06FA3A2A53DE5A65E6B8B73B7ACB7DD3D658FA89775F7B6AECAAD3C78F19DBD9
DE35D05B67D96CEF284F993AA99A55BB7A4BAB4D1DBFDAE4CEE50BDF98D2357E
8F2F7E3D49A2B48D49794D0E07161968766B301C887EE70B0A1AB7507BDDBC33
DDFA459B419AEC81071EA035359112AF8B8319594EED675E88182EE275F2C927
CB81E15839146C911BCFF5B007DF8819EFE4AC014EE6D464399CD63B0AD11753
BCA5A646F4844F34661A952E58B02092C368F6D8BAC6FA6579AD23A72C924F0D
2B73A83E30B78F149E363F9420084C0D927C1394995C33E52957B8022D85B8D7
3AEBACA3BDEA7261539BA5DC5F4A8DB89D76F2E9A79F7ECC31C7DC70C30DDA1E
D8D0E4269813B42F17F7757C465224C028E53C1540EC98915A8EFEB2390CA847
E3C632E54291D9959F4D9B42397F0A5DEB4B396F14B80CF3D4E0D6E0DABA3735
063E4A519BDE04D9EC12C2D72EBA77330082428E1EB00F08E2636AD1946AD883
41850CD60D76136579239551B1BA6410B188535E93B3E5965B3EF7DC7374CD23
40570B9855DC74763615844C38EA4193E948972324BA0E2AC1F50F0E0A91DE4E
79936ADAB6939271E948FA4714B07B45C032E384C2289100DBB011CC19B9E8BC
8B389C12C17A2E66C6883F3C4B7D9D640C7565585130A2386E59E0138852869D
CD6E89D92C6BEE94A7978C592D8428526EFD1053420246D64C6F0F86C15A6050
6B4D9DE341B1A5DC9CB57555CA995923350777977CC79EF39B345AC1B7B0931D
212DD89A72E58F3EFA681BA0E8090E88A3821161E49C3183673C06BCE057E998
F0ECFAC0C61B6FFCFCF3CF97F3BE7EAD8D57A1AB7CF32E22E98B01819BE8A238
B2E304456A23B44AD4B9E08BC600AE147FEBAEB3E0D55707FBFAC776E9CACBF5
1DED8CAC5CAAF6F4F5AF5A6D3F34F569D79753A93365AF6D35BD65CB85CB5E99
3471627B6AADF657D6FEC05A2D9DE5D5A7AF3E581DD868EA5A9D9DB5658BFEB6
C15AAB5696F5D596B5EFF5D9AFA54A6B777B1BCBAA3BE251706C890790FE00A8
AC45D749BFEFBEFB52F06B0BF1DEE6572D47E731E7DAEDCF3EFB6C96F7ABE62C
54F26EC74401198FDE04C3EC5A6A265FCBADC5A21C8B2BE07EC412F034B25960
EB395240CBAD84728B664A241A5C2DA9170548EC556D45B8190A9966E7C2A5B1
348D859E34D02ED5F29E7DFE19470E19E80C45CA2B8E10089A105BC9988F9230
2E12411FD9EE7752D6E9120F95B3A94BD12984722F49275D5057239EC4014408
E82BC71E7B2CF9145FDFC22DB65EE04D88BD520E1FD15D787C7D97D4523DB208
2C05CD9772523A47DB59750D4BB73FF3CC33BFF5AD6F6119315C079A5878986F
6D97EDB1C71EF7DE7BEF71C71D77E79D77FEFEF7BF478868BBE807EC94F5D65B
0F0EB96A206A07280B7C463F909940132050348FB50617953385FAE2E73EF7B9
871F7E585B9999DD7CF3CDFFF297BF44907D16B83B463A18D1322AA8AB613FCF
299578FAC637BE71C41147301B9161C3E88998A7F12B92F2689090C345D43BBA
30E2B9F0A5D8F718433A817629A2408FF8C9F48F28E02CD044477CF54839E05A
20F2347353D491BE88CBD8536EEE18AD602A696DB6ADB7DEFAB7BFFDAD0BE789
42A3DA516C856729E52CE731D3C9CBB1107E8D7956E723500C106B00C2B41D56
00C0FB711C86D2EB820B2ED0D2A7862A02A259884EFBA04A96699549151B744A
E21910162967C33730CBFCAB993BF57972C900F75069E41D8C969745A8A3540B
441C9E9FA880BDC138831B6CB0C1ECD9B367CD9AE5E9E2BCC4689B25BBFEBAEE
BAEB6AB73FF1C41318FB6865325EBE8B6783D41AA68F4B660DB6B06B6E4F281E
13EBFEFA89AB5552B5B6DB2EBBFEE4C7B7954BE5B6AECE652B96A7AC966AADAB
CE697D3DF5B44E686F7FBDAFDCD5B6F8A5FE555BF6ED5BF4C2D429533ACAEDE5
545E6DDAAAE3278E99386542A536D832B66DB34DD67FE7B5BFAE396162EBB281
F46EB6D7E7BED6923AAAB595B594DEAB76071174AC3E93AFFFC90234C7784791
1BA5D04CDA0800320259DEF24F3FE844481569A161A200810FD2CAB17D748F84
8064BD7406AE586528F767B302F6D870B26D1D1A6A67001A7F8D2A8D5A503A46
A378644300DA2F9007782A4C311BBD49A7266B3967B8C3D16BAFBD36F59FA5D0
62956A08C200FBEDB7DF77BEF39D993367DE7CF3CD386C5C4D23D1EE3DFCF0C3
390B30B7484F9F75D659175E78A1E64757B8FEFAEBF7DC734FCADB001845FBC3
A156B446A10C87708823374E30C5DA27337810634B016E66D8A949B6EB6668CA
7B761E75D451175D74D1A73FFDE9BBEFBEBB3494C18B9373E595571E72C821CC
324BA28F698BE8A8EB4EDFFDEE77E598A73C3FAFD5D2BC9B698C780BE44111A2
49A51D5686E118244A2957D5F455F3A602FAF0DCB9734F38E1047D66DEBC79A7
9C720A158DFA5F479A68B9F11A3EBD6C3EFC9E5150D02EBD48A1F51E20D8613F
AFA7B3578759901A99BCEBAEBB6EEFBDF7A66E84DE32142A98BD81DA127C650D
469B46EE05FB40128D8E28F3E7CF2FF09573544C034209A69302086292A9C400
1C1DAAE65D84A3D24AA386A0C92C98409F628C91E6CD292B534749157DE10B5F
B8E1861B9C9E31513ECC3BC71F7F3CB9467A9EC7E888E9992256087A07FD2A29
4335360A292ADD984021FE66842DF3638208E7F3D8337A403CD473CF3DF79863
8EE17481D125456415EEBC692534DA224E1B6B15F0FC38CC59DED4451FD3B468
7DE5DCEBFA4641239BF4754D089B843C426AD003A51CBC46A62666C1E379C626
30750650BE022826C609AC410BA04B1E93CA37B3BC39D48FA38F2FCBD8F4A41A
3936B45F3EDD2E9923A3CFB6749821FA3168BB025B191956DF8B3C48FD115ACA
CB2419B372AD8A1D91A5722D7577ADF5F91D5E1E7B6FE766ABAE58FC7A5A2AC1
923ABA3BDE7D71930D5BD619337EDC807CDE81CA8471E337DA609D09E3C78C1F
DBDD5B59B6DAAA535BCB69E19B6F4F681FBB4AC7A4F94FCCFFD69127762E1BC0
80D03E94F2833205317ACD35D71C70C00129AF3D437CB92EA3F6BE4B5022BA2A
A6390DF5672A7458489F19529EF2CA31FF2AD1ADB5664BDB1436F8CEEA76D8C3
1ED5B033ACDA9C569328DA82CD4A940E7713DCC9965B6E29FFCAF56F31189072
7C9FCB4A9DCC8E7962076320ABD96CB3CD9E7EFA69E4A73D8A88C37717356E6A
A7C5C4006C1E5C64975D11FE941693BFE4121E14101940F21D2E32263861A65B
3C01F037FA353AD31698388A29EFE186E7200F4D8F83391B73AC9C91CC05B812
10E48A2DB5F527E95748FC658EFDF33FFFF38F7FFCE34215E6AEBBEEFAA31FFD
08217BFEF9E79F71C619E4066CDA1BC1E11062249B8CB0BD0F7DE8438F3FFEB8
5C5EA91F9E6DDF7DF7FDDEF7BEB7D65A6B71C863F73D5785E207A3AAC16B602F
5318EE70BCDBBDB9F344E1E52A4F72121625A358B2DAA0D29D7A109883AC1828
A4D317357B84A963E0310D8D8118D3CFE3507C5580036043915D8EEDACF58CCC
3F6BCF7E2D20E0FFD110B443CAD14E6AEEDF19E7C1E91FE7A5B6DF7EFBFBEFBF
3F85F80F3C098E9A1A7F9105A659537090F0F3E0DD8526AE4B6968BF9A2C74B8
42355229171B56A63C3CE5F03812C7C3762F01A8CDCA79CF06B6593449237AB9
9413D216F89023A89B5995F494CAF784F0A60D6A8E7A2C29D69F0055917661D2
888BEAE2FA24890FFB4F5C5666F491471E49409262D961FD78A63D4A6D1E0159
E92E8D0499E21C72CA4C769FF26AB76A687BECDC3665B8CC15F5CD5019EBD1CC
41163DE0665DC560C834D52F9EA58D36DC68E79DFEED86EBAF5FF0F69B49626D
C2D8D5D75FE7B535FABA5B3A6BE39FE899D691C6D5D2DBBD13BB3EF06E65C9B4
173E3C71CA2A72394BAD756DB1F5A61B972A0313C78EF9C8B4292FBFF146D72A
935F5F52879F94DABBDADABBDE78E3ADEDDF6C9D3D7B368FE3C487575026948E
2795AF1A980B93223799CFC5B0E7A594F7B48F3B271E3176175F8F8534D4FC7C
F6B39FFDD5AF7E45EC14B8808B734CF563E8BBAD99E6331B7F8DBCFAA91189D4
06D3037EEA539FD2BD061BFD1FB3501DEEA760956940445671582074DC3C7E40
17E25773C66C3B1B9B6CB2C933CF3C13215D28C8982D95B49775A2C9A13E987A
BCEDB6DB4E1A042A0262CB3A8FD4BC1986AD1B9D73CE3973E6CC814AAC34942A
D5424FD7DC79E79D255A256F89D61835C6CB7D5F9A635DDE065CEDE0830FBEE2
8A2BE43D4BFA39C9951AB0D3BA00F4F25773C63B8B2A4DF755575D25A30F8C0F
75323A3C98F67CDEED68F80AA947902CB4554979EC916D51CE9BB66256786134
807DF6D9E7EAABAF46A15E72C925071D7410457810AFB8788E15C5F0A404D352
C3DCDF9E144A4D288929E0B6CA4399EE5360A0D53581BA54F23EA6CD2FF23148
43AE4FA0BBD2E86177D4514771002819A4D0A53294CF3D8A4E447F4BE8028955
55CB7913E3B676D6C1986D503C3E42CDA896611567C4FDBA29CA48A0444B6A77
8030B3A31DC442E4100E4862097A2E335239A38FE48A1BD7C672D4DCB6A9B17C
1DAD35117429E761774D30AAD77D998C1F2935D1299B5EC7F800D357998B8D11
2291530E614D39A308C05DC3E86CA4BB44A416DA12300C6E5ACD390809ADE316
3BF8C90C9C78E2899A4377F036F108F0130373B47F08F070C44E3AE9A479F3E6
A13B1DF384018AA7767F59C48AE71FF38EF749F5E9BE5A38691D422CB5D08826
6ACD52E0094FC1F888D40ACC9ED9FE1C871F562B308744DD8DC3D23E5FB0E00D
E9E0B6CECE96157D59ADB23CD5D2B8D2F8CF6D2F67A667B0B7326671EB6AAF67
93DFAC0F51F7AC4CEE7E63F3ED279496F77EA0B76B70CCC4B4E9EA533FB6EE1A
CFBEF581F23A95EE6CFCD23757544AD5BE6C494BB6EC039D1D7DAFBCB57CD22A
A7FCC7AC8E45A92DB5D6EDA0AE968B2E3CEFA899870CE6AB46449A888EFDD794
87D9405047F4BE8F617C402C18BEC5EAB3D5DD8407F3B15E37D152B74A2BD54A
5B6B5BFF40FFE4499365C1FCF1B13F6A9F9ABBD4EC63BACBA1871E7AEBADB7A2
337C9A223973CC527B9C4E37E03B71BE742372B736494B81B19FB36F0AE1C1D0
F354DF4546991B00890D836F6CCDE9BC2902392246E3FFA3CCA4E75C9792F3F6
DC73CFB97119E68BA58D3E2993E217BFF8456AB0C9460C2C9B5C5ADFE1077704
30601672374D29B84B467272E3556AB4A7A3479F6B7CC8A8EA331AD55FFFFA57
66B8F995C52265209A80F110F4E00EC06DFA50F93C43C944E2871A09562806C7
C956A6865F12A3138E9BB33684E96CFB333BA64875F1B55B796B6C9AEB682712
D6F79C9222DD69A79D64C510C8329A1C6091D1104433E2BABA8C2A8D0A3ED2CC
B881E0B9E79E7BFAE9A7B347D97040B87910177D23CDA1DB25D489D2C56567B1
AB394570611732126D914F7FFAD3F22FE1CE3586D66ACC7BBA94F7F44823BC5C
FAE903304AB9113173A7730A2F4406A7CE4219EB270A1D7C531356A49C56B3DA
68882B6382D0086823D3C280ADAB345A1163026B56DD929206C37A167DDD9696
FED7674CA29235D142A580B2C6067736884D0B5A55BF460235E0BE5663B13E9B
182079416D512CAA82E95DCBF9A152E8756A165CFE6A920DEEEE5254365BA431
8128FF90430EB9EEBAEB88B6692780CBDD6DB7DD7EF0831FB03D22931F9D59F5
26D08D638F3D76EEDCB94C85AEA6FF3575D6B2B2DC7FFEF39FBFF8E28B36F890
15ECB7986E8C1182B89198AE485BC16BDB6DB77DE8A1875240E9378B5A4D29C3
8ED673FD34F5AE68EB6A6D6F695DB1B84762A5B72D8DFDD00669AD5596F7F4D7
CAA55A7B35752E4913DE2E8D5D526DADA46A2A2D4AD5F6CF7CB0674AB9639571
93CA1FFBD0F4D7DBBB3F3A41575B7F79D6FADA3B8BCAD5C18969B0BA7C61B9AD
B565EC9825955AEFD30B6E3CEDB2856FBE5BEA1EDBD3B7544AB2B59ABA1B7024
2774107486ADD8CCAAE585A1D192484D95C18ED6F84F6473F5D266730AA311CC
1B7006943B6EB8E18652156FBCB100A79C3B6207633639F3E2E87DA1CA3C4A36
7B2FEC40622D29B8AD16FB6C542D252E56648204C3614AA296D010C5CA3B560A
9832280D65A0CB8652DE16662CCB5FCC98E102848538EC4425D350B75BDE27A9
4C000A387E0858348B66ECFCF3CF97D7444E01998C2C2228A5B3EC8222C40E02
DC882D0FD2157A2984C4A267555C85D4A80FA1971CBB3CCB1B6671C0806C99AC
B840C54E58BF9AB7C2D0AFB366CD92FF1A1555396F4956480FB8B3AF3388BC00
5EC1C5A36F69FAF6DD775F4D90F6A5C4B4A660C68C19DFFDEE77914D281E8482
D3CFD0AEA65098856FE74D437523C1BDD430A368FB6AA78A1EBAAFBDF6DA28A0
2D0D8CC679FC80C830E68BB89C938EBAB29C12893C6F0EC71EF980ABA8293E69
06FA6639CF91843B1DA1FD2C5A114DFB7FFFF77FD3B02CDAB62329547F86632C
C379EBADB7DE7FFFFD47F1983DB14600E00B46AF88FD608A159C1847A7E1A988
784857CB1D70C001D75E7BAD8C6ECE0F93E30003CFE847D6EADC78E38D7BEEB9
277D009DCEC0D28A0DC65127D8E9050F2085C035252EF8E83161AF616CB3CD36
8F3DF698BE42BF6ECC1AF8DAC04FDA0B49A1FDD141071D74D75D77393F1A2B5C
53EE3EA2A8B40F89A4A5A1D5E7F6BC53D0F47A1CD979DA453C32C59A08351BAF
A5465BB0975E7A4997327511A5F0BE3E2D16F0393463FCD5629AC5F2578863C7
C6E12664B531810513D9FB628D0ADFD21510DCDA6C5A6B1D55CE60B3B44D792A
8484D7BFFFFBBF3FFCF0C31A70DDF8CB52D798B65AA5DADB33D8D2960DB4D5D6
FC971D5EABF65607FBA47C4AB5D6FEC14AEAAAB54F5B5A9DF0E240CB8A49E326
4DBE678DC9DB6CBA384980766E3A71957DD6DDED4FABCC4F6F541664836FA7BE
7195CA46ED5D834B963EF9D65B8BC68DEB6E2BAD59E93E6197992D83A5C1541A
33695CEFB2C5A5FE4A7FEE151029D16809FEA5C0AA6B8D620C7C3346A1F918BA
3C0C9615E00E43B184124A726334C3F5FD3F69D284850B17B9CF0FF628385923
AA7C009D0DCC86A326D56BC71D77D4F6361964CAEB29F4755005C41D3135A25C
723E25D61372530293284587153FF1894FCC9F3F5F12954A2A700F8EBA5543B3
AF3839FE3956CFC709749530C6259C655AA0683D189FE8C0983E697CB29D317B
179CD6D34E3B4D6E9523F059DE24D8B776C134BC0BB10095A3E41A012664F80D
E0EC23A391E0B8F0C20B6DB6A00B3D4AACF852A327B9D6C395B248B7BDF7DEFB
273FF909AE00A717CD6FCE04321F595E8C6C2C0367955E3192236641D203600C
023FC3A0405C1207F0CC9A7680758DF1D298B1D39BE79C73CECD37DFFCC73FFE
11294FE3307DFEB4C64B6F4A34ECB7DF7E71BF0E3B710496750BE90C92D61104
6EA7010DC4083578CD1B6D0938BDA45BD8408851D6B8507F6CEDCBE161721C15
E167232362436FDD7A24109955911BEE366FFA820276E7ED98A764ED76DA69A7
3BEFBCF3B8E38E3BFBECB3E11630E9A3DB92C7D8ACE5B2D983F5ADE79E7BCE56
333BCA007BAF855318E6D3D776954E22809F1A5EA076A6BEA85B3B30502071F3
21C1B7202B49140B89633CA43E2041A3C771B123F9170C91422D2633832E4409
E9146830D59C4239E5E16B328BBA82CCA62BAEB8C22B68767BA6971162B6BB90
51BF6ADBC8E08387CB9DEF902058091E4F24DAC5A6916ED63C3BFC70F1C5174B
9DDB8831B5B5C6090D2D317C8853F450286303EE782EDA65B21B3D1857792197
6DDFBBE5940FAF375861BF61556B48DAD8BBEFBEFBEDB7DFDE98994503FD83A5
AC54CB52ADBBBD36AE63DC87375D92FA53A9ABB565A05C1DA8F4B5A752676972
6F9A32BFBFFBB5DA92B163D61CB7F65B5BF62D4F6DADB5CF7CEC9F6B93AAD3BB
BFD0B2FC4F6FF5F7B48C97EA5D38B6AFAFB3ADFB2F4B7A17B58F5BFEEECB032F
BC73E745D7AD3771CDF9CF3F5F3F0EB5CAF7AFF9EE81B3BFE9CD89B82FF03040
D1AC657518B3F9C4A51162AA05E03746D5CA79CE2413E4174AF6C25B52AB8FA8
965ACA2DA41BB45894EAC1A14B623805D56E7CB59305A5C00DBEF9E69BCBE4C5
1A4B8120D6DC581E242611A02A7DFECB5FFEF23DF7DC037110BB8B9E5AFAF9E0
830F968384AED211200791E5A56E007237DD74D3679F7D5622B494779D2A9087
14FE078217A344B66C50F9B18A87EC8C5B98C465A2B67BABADB67AF4D1479166
FA80769AF6ADE650528B0A2BFD8C1D4FE0211B4ACCE2983F7368CD4D836A1808
307A46A29D786FF5536E7703EBD02D8DE08AC933376E44F7486669FA1C9AC022
4640DB44B2BC2E18CB292FD6D409A76E182F39F60DE4BB7100E82A5D64ADB5D6
DA638F3D649BA0E3530E4A04F1A4C1BBC10B6B494098C883E9DCD84C116DE4CC
041EBFA3FFA3A08553DE030A3717B0062298F5D0BAEA221A363573F855005623
190AF60AB57431CE9F8646AE5C4EC067DC8BD4CA9EA5D4C722D1DA280AB59C37
E491ACD4834BFAC7029BC28B4F3A71A231F0032A81ADE691B831594C0C534A9E
02513B8F1323166C778C0C3FA649FB8025134DE103D8B3E6BEB78F42BD6C342C
A2B043D7F2C2B5D50CACB9E69AF2B4E6CE9D5B287E4843A3058809DD42A74042
E437BFF90D828F4364E4B6EF5BCE5B6B3B0954CE1B04CD9933E7C8238F243C00
57173B598321DA69F7A2194AA3CFE84D6D786AEE110AF49921318C91E4E0D031
C71C73D1451791D021C8AFB9926EF6BCA13EED25700B139B13333CEBACB34E3E
F9E44ADE9BDDAC76A59C4D8FA81DAD392365201BA6A5D102CBD97DD7958DA480
9D414C8D28A21EB631F8092B7A967794CA597B6B4F6960DC8736E919DF5AE96C
2D0DAE52197CBD9C16B796DAB5A7065A2AB571EFB64D5C3CB0CADB1D0B06AB37
B7B6BC33A6B3AD65717AEBA207CE7F6BC9AA0B57BCBDF4ED451BAFB7DE40A5E7
A9179FEE4DE5C1EAD8526DFC3B4B5EDC60FCAA4FDFFDBB076FBF37ADA8945375
FA5AD35F7EF9A5C9D3A6FDD33FFDD35D77DDE5E82E47DE342F6C452D1CA7A000
122C88C1E653898DCE8970F5737DD75565AD96659337249554A934713D20B4A2
67C075ED8491310E0CAC89C7AAC0DB6F25570BAC4CD4C2A1516293BAE8F53AF4
85E67EF2C927E3076CB342B2A4593AFAE8A3C971B484CEA48064DD73D367A414
784FA31AB6DC8B58FDE6174E9A265FEB02E10F352CB1B70A8AD3E171D38F7085
0235907FB5956C456BFC8AF41768444E5679380A684D1A8524C32B606B5FA4F6
4F7FFA53892117075BA81969CDD2EA39757AB104713D1DBFFAD0873EA48501A7
6A0EB90869B3E3054B8891234C6EEC24C56248B36A4313C9A4C482310307271C
A4F1ECBAEBAE3A1EBBECB2CBE5975F5E4855464C6CCABD101F7E7EA6BCDDA5E8
24F3F47F6C455E1010D228F478B0248AD14B7CA072E0E6766A5CC38637CE9411
1FFBD8C7FEF77FFFD7D831CD3F0CDBCDF1AB66A428A95C90D896FB9A01DDC5C1
80E617050C645BAD60881F0CFB79D93D5FFAD2972EBBEC327D65BDF5D67BFCF1
C753605961956D15C64D850FA419D0333EFCF0C3BABE09199837BC641D5A8245
245C4D25C39235C78D498E2062883D904AD738E5013816E4223A8BBC660F38E6
02287FC4BD368725880C2AB931E6B8824D4C36B3C68C0BC83997C9F8F2CB2FF3
4990C3D8EFD5BC4FEAD4A953E179C56D757F98D4C40E66723A8D449F646F4392
C03C4494839E0B1FA894B3B5BB51B41D7144526A98D41C768024D8589A46633E
34728D93380DA8B1E38E3BEE924B2E21EBE912CC78C6F9A2164272505F913374
D04107D90A015619E5F5B01BBB9673D718B0B6F203E5715D5949C76979EAAB76
0C4EFFB74FBDDEBFA8DA526AAB4D5ED1F74E4A4BDA3BDA74C2FAFAF5A8D58ECE
52EBE6CF2C99D793D6C8D29871F5CE0B0B97955E1C73ECAFCE68ED18FFEA9F5F
9ED43D71B02B7BFCD5BFBCD5B3B463A0ABBDA7A3AFBD776CA5347E79F5A7E75E
DA9EB56B4BE9AEAB3784BBAC643D17901FF49C5B29BB856DCAA191264269266B
2BA840EF6DC47A1628421B2AB9FEDD818162222CA6751D70B6A26D09DD732342
CA3775F2C5C058B6871E0473505BE2ECB3CF96E279F1C517A92724D5E8E81432
5CFB4DD2E099679EA16709559778F06425280D8234C2DC9098EC080D07F0B3D0
77390DD5C1F104112034B017FB951364525BAB406D36A24D487B274F097479D3
BA6627D6FE69F05A4AA99E7DF7DDF7B6DB6E83883EE5503506691B08239E5651
1FFDE847DD0AB699FEA1A8806124E11CEAC614F8BBE45F17C5E4E1D04618242F
4723F1FC78D4D470C653832F3E0D85C0385566808903CBE68C74340C0A40E605
2909AC94249C91CF8C96C2123D02FD8371ADA8E6344101E13B785CBD5A29F7CB
D9A68698A690456F7E1994EFA022CC261B6EB8E1B3CF3E6BC0829CF51FFFF8C7
C0E1CCC14690136D0DD00C78B93EE04C1B436A56C0A0AF3DEDAE8E477340C11F
C3CE2379C0B367CFBEF8E28B6951A289D565B564F3E7CF1FE9F358FA3EE1EE3A
629E551D5124B52B586048AFE6C4A54633991EC4314C77E0817CC715DB9A4C38
984A3977B98D68ADA34483FB0839BB29A971FCF1C7EBD6DA5D5A08B60D122AE5
1D090B8F16094C2CB9CCF8C8FB482B726CBA2966AF817248043BF188B32CB494
E0BB294F65419E8A52E70CE3B503E68ACD4568A4CA086D28C8F2831B12280391
215C4FBEE81A5CC2BF484CC721CD34A4FDA90FC84A60FFC486EA9C1A96EC8003
0EB8F5D65BF526CBE761940249AF779A6BC96C87A5BC7380A988FCBEBB75352B
608AAA4D30821DA06F2D59B6626C5BE740EF925EDD6D6A5AE59F365DFAFF487B
0F38DBCAFADEFB596BB7A9A7D2BB940328A0A0128D9AAB9F9744CD4DA2D18005
2C8014B9A834514001E94D94A254351154A258A2895EA2AFCA255CCD35421451
10E500877E386DCED45DD67A7F6B7D67FD7866CFCCD1DC77878C73F6ECBDD6B3
9EF2AFBFFFEF1FA6DBBDF670ADD1E90DF492A15080193B49AF9B4C8564A6D1FB
D1CFC23E7B1F7AC83E5FFDD93F0DAC0C83EBC2731BF75DF9EBDF1DF3F50B27F3
E6EF9FDBF4F4D8A6766FA29EE44B06978476AD379086C999A5D3D98B966E77E3
F9977727A7374D4D34978EB4378D7B15344531550B4154BA9C1997CE3C108B5E
30BF139B2C31A4C8E217098EEA256EE70C54F9C52C9DD757A316B5E5F1B135E2
C91AD72537F88838827CCBE8D1FABC0630A13211B891E9F7F5D2C630E82906DC
71F025ACF40B628D3E66264C8EF98663E3209EAEA462D48A9DC03037CEA4E922
12A62373C105177CF8C31F7EE52B5F293FD0395DC9372914CD03226EBE528C0D
1A3D91FC69F0345A6E1E0A6C0A5C289E6DD8CADEFEF6B75F75D5556C7EDDD118
5E375B2358B2A05C9DAD832639A74BEFBDF7DEBFFDED6FF130E2741D50119F52
B2B0943F9B182FA9AA929D0261289E50F88F9288CD00DE00AD475A76E7A69815
1309DDE96C1C83D1739E7CF2C93C18C924A4D84D37DD248D624C7F985B301377
BD30318893A9C865A35A08DF935C8963C57D2F3DE9D1471F7DEBADB76A0CEF7C
E73BE57C4B0E22B070EBF38A539EA43865D624C618D5CB5EF6B25FFCE217840A
78D1F5D6F9BF10797E49C4A260BB955A67FFD3DA252ED35ACC80C0CAC390D7B4
2352B70016D095E5C2DE7DF7DD5483601B85B9A43649C5E66A4BD93119EC36D3
59DB6230710A5BC834874CD1B9E79EFB894F7CC2720AB03D51326AF635B76C48
483DE943F0E94F7FFA431FFA5052358DF631888F34B20C18141365FC7988D064
FACC9E7BEEA913C1CC7824988086383A76E7E942B5A050BD85B823647E1A9896
49E75C12219F5BBA03CCA71E355AB6DD63EDAE7774ECBFF9CD6F029606BDC991
7133223B46287B5D5FF373C20927D0F1DE25EF9A40D42D729F1C9BE366BA23ED
EA5C64C5E4300686373F2A18B7CB24D743EEDCD466664DFF831E3060167D528E
45515C5E0F238D7A36D54D47436B9F15EB4666D2E17AD6996E2533497DC776D8
3D4BEAA1313194CE249BBB33CF65DDDA9AB7FCC901039B77BFF6FAABEAADDE0B
FF6C55AFB9E9A94DDB87DF3DF986938E5BBF629BC79F7C66EB902C957794664F
CD4CD45A43F9F8F46EA3CB7F78D5F5613A34F2D0D4B3CC4C9C74E249B2A4E5DE
D167DAD82243FCDEF8C637FEFBBFFF3BC103687D0D7CB13A89BDDE5813872A25
E400A649089A8D21126433ED8ACD342943B579BB56B56B337D6C7C4D54781675
80C690B57086EF08D2099F0BFC31A8BEF6DD77DF871F7E987C6A2C6AD28A7AC8
C4A2EC3AD7B318554A86D84D6E8818E9A4432EEB944DA8707C7E843E4BC5BA43
9F27F4C2E7AD23984FB4635C34AC73414237C69DF4F18D98A716DDC493021EEA
559D72482B38A417DB31A12A82A8552F927A60C5BDAC8B82611DAD25FFE41001
6C127C48FAFFC0030FBCF7DE7B316D0016850A311422BF01D24B7DD172D9C86C
8C17FC4EF21C58462F7DE94B7FF6B39FE1144AD8C9508A0B76A9BAD34F42BB44
BCE34E5EE00EDC030E9A564AD08827DBD9424B391B112B39BDF3EE77BF5BD250
123FA6B63EF4D043BFF6B5AFB950077D0F32089968C74E6BC03EC032C8A22697
16A0683B165E973AE594533EF9C94F862A166AE30E1907D006A79694A7C73FBF
AA1D91A72BC4B624E2CFC98C580F615E304BFAE221871CF2DDEF7E577B282685
0855482044440DF35F6C5C4AB9307EE3EEB03615EDFF31211822B5B9DD6443E5
29324ED455280BD8D2B98CCD8809FD72F6D9679F7FFEF944B148CDEA841C75D4
5132C8587A2693FD43C48C6A25DDE5631FFBD839E79CE30977C88ED93BF1C413
BFFDED6F3FFAE8A31039395262CFCCB8B92DE02C1C2DB7723572125395A7482A
B2FB2BAFBCF2CC33CF24051857B4F7B5BE2676D7ABBA821BE61AE7FFFA2AEB6C
B8580D30BDB5AA212B7B5B53A4EF72F0B71C22864CD194877150CEB6A007C083
ECBAEBAEDAD2DCC80A3E36D7E28396450C6E9865EC9FE9CEF46836DACBB3C9E6
C4C86BC2781A960C85C673CD89A176BD27EB64281998199F991AAE85A513236B
7E323EBAFFF0017BEDF3FFFEE34F5A5D9D94900D76F67AE58ECF6EDE38F37867
DFF7BCE9F1D0DD79A0BB7DE7D94456476DB73CDD636CE8C9CDBDB064A679CF4D
DFDA66BA3ED99B1A4F66422DECB1CB1E3295742A5FFDEA573FF2C823FFF11FFF
11A20274A64B5B1AFA24AFBE9F8519EEAB959FFB4A177C97680431B9B955FE5B
0279A515C9549F5D686913AA5EDAF162CD8F8A870AB28062237D9B57555860A3
5C8265BD4E8F2673CD86D238C00BCC4BF4B8042CDE115776081A90A385983B8F
5141A773FDA94F7D0ADEF550055F2D001DC5A1B81C210386D7FB107E46E93B3E
E312646E6A8C673C93EE8766C3250EFC78D2426432860A19E3BCBB5166489E3C
E24E4888D7C79099B7BCE52DDFF9CE77782A34795ED1FC1AF8E338AA642EC44C
D07D797FC0CC82151C2FB3D71E116C27E6E31FFFB8A40F312E139C126D77F6A8
6F336104B1BAF66BF38A4EC5BE426D6EFB1D2BE02482E3F38EBD07A7BD49069B
ABABEF159BF9EC21B3B7F795B72755239D98C73F54C1CF0515B0F48A9C3F2A61
B0900C6AAF45DD2CFAEC65541D3A0CE989C11E2A6722EE8B10AA8ABDBDF6DA6B
F5EAD54EE43B974922071BDF12B6EF651DC952BA182056C0DE76BDA86FB92EAE
5D44FD1B66B5D965D137C0BE98ABB4EA8B2EEFF6A4934E0A51DCB81EF571E3FA
071D74102877AC225397D7AB36E37A138D057F058EAF4F17070C551D4BB77887
E85240E8A9F1A79C26EE7612C7D3B00FDCA3D48BCE91D118F42DFDC251C2B7C0
0DA5A69354715C37C920D1CDB21A8F3FFE781913DE2771FFB1582ECC97C5B12D
AFFD76D55557D1942C464E3974D677048C43E98BD0E0A6F327D7C2F5F1635B20
C2BB6994599C028CC78F5986D4EB86EED26449AFD39B5E3A39FAB2C6D49276B3
136A1B9BDD25EDD0AEE5BD8130D099EAB447E4288F2F7DE2DF3785DDC351EF3B
F2920F5EB855BEBD7CE3E9DAF8FFF3BEBFF8DFFFF1B3C15F8CBEF088D7FFAEB9
7E30C9967793B4918FD7A736F72697861D37E7BD6579EB77B77CBBD50EB5249D
4CCACAECC1596CADBBCB1135D11A11B282F5EF15AF78C55D77DD65E29D0531CF
FF770AD88D2C2BCE8D7E86008395C2DCF8F6965FB13CF417810E20991105F6D3
8C0A8C8944507571AADE95F1A16A90C501D427413EDB00E5D4387E96545D8A49
D9C63D5DE29221BB433C8513A66E14C4802D004DCBCCE761F45C600DAAE31F22
EE740497CF8E15703CED7E3911E0DC4ACCF9DF77128BA7F0322364E3D6EEDC83
8021D6B7A3FC6F78C31B6EB9E5963DF6D8436E225040D71A7EF18B5F94F7E0C2
061E29762F6C2BC5455A4626DB1F427221BC801DDAB843B9C64D3FE8BFE66CA2
1D0E2C06C25FF831B111CA6062509855A9A18C8EA533485D0A020D9C2A52B6FA
9DE6489A74F79E637BD99F0B11F917DB5A0E813601722A89FA44F6B94D8E4638
5462FA65AB3DF6996DC93E41C9EEF9EA57BF7AD8618749815D7CF1C5A400CD32
EFAA6E72F3EC18DD5DDBF4D7BFFE355F5F4C013B24A529D217354E5B7F4954F6
E36DA7CBE2F66986FFECCFFEEC9BDFFC269BD58C36582AB15B6C7F8E5EF4FA49
F51A64EB186A6682F546621149A9A200425914412E87D4C065975D76EEB9E7A2
EDF2A8460EB1A26BEAF37282D9156C09D2ABB696F419C0D854121BE597563D6E
391A71FB369F32F6E709279C70F9E597A3B488DF50528541ECAA120810246278
765D41638359CC39273B01A4966358A97F6760F1E6E703AB56AD9211E67C33C9
6357718485D07F717E24FEA7199A6C76FB9A4462D8215E5FB744EB45BD114364
BF8698C22CCD86F2E1D00BD34313E95E61E9EEF5F1B16E433EEA92901799DF7A
6D20B443A79527CDB1656B7FBE211CB4D515E79D75FC21870F87B23C21AC3BEC
C3477FFFEEFF48FEFDB9556F7FE3E323C379A7BDA437596B651AEED4647749B2
6232E96CD56C3DF8C5AF25D361C9E892B1F1CD4B0646364D6D0E91B517E602E5
EC1D529D184A731950BA13347F48152E6AE0A2C08C814A67C92C9F4F8DC549D3
F90A18616E92A9BEE8778CD6EE8B905B10B13965A6FFE637BF09118634447C17
C810C8612CAB638EA0F7BFFFFD37DE78239B1F8207BBDA0E4C7AFB8512CB46C0
15C317AA096386D830BBECB28BEE0E7126B92D34482843A1FA7ADCB28CF0158B
C202E99A6078FBF268F1665ED0843212AD6F65F38A11CF1B9ECC7AAC74FA4A24
12909FE79C73CEADB7DEFAE0830FBA9A2DCC05A0BB90E6231FF9883E29452B51
7EF2C9275B01600CEA968E95239808BA122174349F13685AF939164115E6757F
A810E5AB88B3617DF34E1AD12C9BF4835E5DB491EA3306D3881B3936DBD38A37
4A4FF4D18F7E542E4528294AF4D35CA09C3D09BE430F3DF4E69B6FD61D09F01E
77DC71F21EF44548BAF1C5814152DD811061EB8054D29C1C75D451D75D775D1E
1144C4107C42CA3EC01A9E7C1D70CB58E2046F89FDC6595203EB6B559B643759
A2C9A346E88C00F20E7199547D0BA80BD7FBBAA384B22641A2BFAFE0D52F18B2
74121E7BEC31CDC30D37DC80D9E45E43F95C2246F69B56E788238EB8FAEAAB8D
82D60780BB03AACAAA064AA610B726E6ACEA5924E9302FD016DC174A4EBA4B71
926546BCE52D6FB9F2CA2BC9CBE2C4C85A627BC73EBAADBA58BC5253A1372FB8
E0826BAFBD169C20DD4CF109E819ECB60D7198D7D9A3502132BCD9786A7D5E3B
EDC20B2FAC57BD17A9E8CF2AFE515D473B4D3E6E52559751666D426CCA94A110
718CC4E85C2BB018E3E35854529147DA557DC73BDEF195AF7C25DEED5BCED186
79D14E4E681C0C0855A522FC65D822175D74D179E79D67061E979C0197651109
3BDB436224BDB457EF34D290B69399B03C6CFBCAE10DE31303B5D0AB17F9DAAC
97D607A58EDB793BAD8F8D8C3DB029ECB0F5376EBBA9DE6DBFEEA0BF908FFCC9
CF5EB26E62EA86EBBF1466C686DEB6727287B1FAE665236B0F6A8CEF32D2680F
D69E583B319237F395B5DA83B77E23CC84E650AB3DD1599E0C6D4A263158D999
36FD79C56E435EE27229D3D2D3696F9807664181BEE517273144F9A03FE8DDCE
D62F55F14F3007E8A73E304488C254F315B083B43ADD6BD6ACF9DBBFFDDB7FFE
E77FDE77DF7DB5D34CC28A4947718A219971E304DFC575A74C88AD348261AE82
7152CF54719A491D90534E3905E901292C4D6B4E3DF5D44F7EF2937D8C7BCEA3
852A4CADCF9C7EFAE96F7EF39BBFFEF5AFB3B721B79A3F7516C58BADD48200B1
BE90B51E90F3183FA363AE7120AAD0776E114F0A5A8FC703700010D32499B05C
30C925D1BEF18D6FE8F3DB6FBFFD934F3EA9C945F5C616B4412B40649D8E8E03
4D7D8DC9702F101C043A2835416ABBA5ABA78027F43A994618B9F3D297BEF4BE
FBEE93E5F599CF7C069C11D8DD0537311E243D5BC839A525FF57A8309C80AB31
058C8605E60ABC851312B7EE3210C049BB1071AA491249D0F0271F369F045C7F
806052847A288AE2F1B9B9BEE5AC3E2F7F5ABE910BC6B820F3ACAFE8221A67EC
2AC5B28FE8165FE1C19D9BD4EBE0830FD65E5F2C77E565C54EC73632EA92278A
31C04061797C8D0A5B984B7DE0031FA07EDFD1EC5EC588EBB02A1B06D8398931
A3E5B9885306C87487348C19096524CAB4E1FC9515674E9023449B4D81ABCB6A
D8FAE799679E2903F4B7BFFD2D5F41105B57CD2A89882199689E94B79E8E29A2
F535F329C9256BAC17F50646F16BC9E0538B8114CE6F61F450C8245115972782
6C32B538E66CBE509BBF3892861F4F230AEC66A605660F2FF416C47DA810E624
F6DC483BAD58E9113224F00C90CC4B70A264B7DE07C2A3BF624E85A87FA59B76
1447A3163229572960A9C7A1B0D32BB71ACBD72783B5CE7467B0DEE8CC744323
99CAB3EE4C18EE8D4C3D3BB35D6F87B064EAE2EB2EBBFB9EFB8A58CEC4C6AFDE
F8952561DB275FF858786133AC68873C8C6603D31B465BD3BB8DB6B79BCCA686
0706974C741EF8C6F7C3E65E3AD0CCA6BBCB426B6378BE6A252626C34A36D225
54862FF63180264723FF083F7881F3D5A7B99345E8A2626DE7CC0226350AD840
99B8AC60B11CB05166495923A34591F094A8774B445D817E94728B7155633260
9F381BA0C6BEF8E0CCCF5F20F021D9C588CFCB620ABDA383AFBB33C3A1046150
8C00D19B248644259A488742E60212002D0BECDF813122B50E79926CEA8BF0C5
3AB84FCBFA682FA880B39255F7252F79C977BFFBDDACEA33D10753ED5BBEE4E2
8B2FBEECB2CB28BA375C052A76D409234E2B82823EE0CC0B5EF00209116D3239
C7D75F7F3D7830906FD4DD4BD44A3710CA3683397B027D4C356AFCFC043D38C9
21F2804314524F4B4A6A834D9C4F2270A73F51A3D9F7F5302F62D61715EF956C
BAAC346A439795E9F4D6B7BE95A305913725C8A172CB7828B4A39C12EDC877BF
FBDD92D4071D74D09D77DEE9317374617A03E01D6317FBC41CD4224E2740C389
6A8CD53CDA9AEC887E01016151EBF6DD14AA4BDE615810F1F379EE2B2921C189
ECD6FAD2EF73410101853530317864283CB5FEEE53C0A1B4E52937D4B6F139D7
CF3DF6D883F8B067D539691334F6A27EDDA1B22D42855B06720976C3FCDB543E
5005617A6442CA9E87A4E2CB253603A302EAF9C8238F94ADC9D18AED3C90AE46
4DBBA63C545576BCAF8B6800DAFFA630644E1C52E2496FB8E186E38E3B4E1612
E7D3DCCB7959E0EBAA0F7D18D6EB10E559083F605CF2A6E130286047564214A5
34AC096B430FB56AD52A6DF24B2FBDD4AE4C58DC03F651EAF380B522C810CA17
2D3408E6C318AC3D430D853E2927E6D39FFE34DA1A392371A15B83D10B95AFF9
FC21D5ADF274B03E90A779BB39BDCDDECBDBCBA7A69B53E9CCD060AD3E313ED6
498B2E0CA11B4687865ADDF4B9BBC6C392B0D32BB67F7C5399607AEAA9155963
FDEF3A3BFFE56B9F5A7A6F77E5A6301896AE0C9BDA5A8E5EE84D0F6D3C604563
79EFFE751BFFED77C964984A9334C9477B6163773A4EE6395F13AA16D171EF3C
FBC198D1045A1C72584CD5FE41651C1FC19854C30B1447D1BC0381E32070624B
11FDB7A0071C2A2323CE62C40151626FFE2766313B396E3EE8F20A7AE55D75D5
553EE0F84E1EB9014A1AA74E0A89182222F8C714B8727E930A6F683D859AEF6B
2CC638990A1802A0990A55D98B99044304C8DDF212F4698D302F046D62251D49
ABFC1869182A0388D45EF165576E19D163102FA59CE07E51962E15FFDCE73EF7
BEF7BD8F8C1DB7276A8F9D4EEA1B23976427182EF35410A7652E70B28985FABC
79A7EEBFFFFEBAD1873EF4214BB4BC220D370325712DDD54DF62BBF349883AB5
395812AF5F3297959009BAF0C20BCF3AEB2C6D26ADA223AE167304D8096C12EB
365B376152ED3099206EDDDAD7A329540D8E48D1519A46A3C6050F8044D5D147
1F2DD9A4EF524EE3A06852816689B5C25078F9E597DF7EFBED3FF9C94FD87FFA
8A7E215E6ABBC121CA1039E2DE22EC7EE0A94EC2E19C194FB7E08E34BA4D1B00
A3C789097BC00E4BC034ABABE92E2F7CE10BB5346E15608A25AB4F16D10C182E
9ED6EFEF7AD7BBBEFCE52F03D98DE9C308D9119146446655A33D5DEAF5AF7FFD
D7BEF635DBFE7A13503D2A872039869DF3581AE4AF7FFDEB103964EC55CC4740
22CE14B832C41127A03AEE518FE0C68575F029293B5742EB16AAD21D7D521BF2
B4D34EA352CBA492575E79E5873FFC615945B4C284FD34CE4D6AEA7400F1F209
21C6E86E260720455E757D26A5674A38E6105B365EE83ED51B670A2D46355A02
6638EB5E5696BE56B585D6988DF5D380F5C50F7EF083F204B4ED292AC5EBB5C2
8B1255257830D5B3D5B25A2F5BDE19DD77604363B239B962A8914F8D6FC81B21
6BD524AD465BF5C15ADE98DE6AB2B776DB1D7758F378E157AD585E1F5BBFA137
39D05ABECDB3599E8C347AE1E1D1DD66368D6A8B486DB7C2C6FA92999563DF7E
ACB53A34C3E0E690A5C3493A31DDADA0643E2F7D6176D691F575610296257BA9
2FFCF8472A608827F965AE2B3C7B7ED3B9A4D3BD795D9810560E3EE7113A3D2C
1282B64060FE319B641F4B8C1304E664813BD3017473027B2300603977846191
93AED6056315231550C0310E0679EB27C285706A4F2FDED1D9D11888AE6947E9
747CEA539FFAD33FFDD31FFDE84776E16C16E8E0C81094A378ECB1C742E70726
DF5AACCFEB5D2C1CBD600E38949BC43180B8D1915F20BD396B454820544173D4
2767CF0D380158E942871E7AE8F7BEF73D0899DD1D4CE32697A6CF43FC0B28D4
A81346B0FBEEBBAF5EBD3A8F3A20C134848110571BF719E9A4F4A96A0F1511A6
E7453F01CA4A659E74D249175C7001B40FB013C8E72040A78F49795F7DF5D5FA
80F46B3EAF07248B4D84D93C187A7C69FD9B6FBE996386BFEE7A0F46A867D49B
586AA16CA9411346BCD2EDB7DFDE494ABECB19A8CFED7EB8D801085534D56C91
BA11740DE87862B0F2B0E59E02040367A849F323A066E27634CCB683967DDC69
5C44F7D25D7025F50157CD2F28204CB84D74D1F8F63E2B27CE47B285AC51F0E6
35B0F3CF3F5F22D814DFA14A32E5558799ACEAA1CB4DD1CD2ECEB3C513A26A1F
E43E9762FF703B0332C96E6011A34AD1491C5DE62DCE2A21CE7A556F4D6B8874
5E7FE22442A59A1DC9B07CF7FBCA2BDC3EEF6061B00F4D5C4ACD18FCE1B45576
9E8CC9278F20E1F2C0030F38A11BD7DC7B77F9AF310E80A98B63514955176485
B1A0029E1FBA0C73390D2CC4EDF1C7012700F0CEA0F3151D1C006B2132659E2F
DE486A85AB9AA7B5504B43D269B657BE7A645D733C3CB57C7828E9B6D7B79634
D3E181F1998946E8B542D8988465A3B56C436FA457DCAB3B3CF5DC78686D3732
335E0F8D6D562E79C1C4E38F26C34F4F2DDD58DF3E196D0D6E5832BD64C3F2B1
1BD78D6E0CC361ABA7C3C4F07603936B37B41A038656B8C601D4671CAD89B7BD
9ECE6536B1BDF25F52C0E5C45A0117BF7B1DE64376AD5CFBB6A297AF8FCB627E
2C30D640B1B07224B9AF309D8FB17577DB6DB7534F3D55A29855B3C1EAEA0334
AEA6059A451BBE315DAB6940906304A575B57DF6D9E7BEFBEECBABA64FF6A60C
B3F249B4F430A589BC11F8B920A7C3F775589834621C48B01A4AE65176F469A8
BE0844A838F3F52D4D17AE9A6B9C4285D2A2F25E832F40A38E8C5D72C925679E
79A6AE2B7DF9D6B7BE553602F4EBE430E0272349CC33FB31DC8B86243FE9E4B4
EA8EA22BC7E4124804FB3144478D28E1A934D7128EB253F009DC8E29990B2ED5
7A6BA877DC7187AE231DFCFBDFFF5E37D2904C629545BC1C69F55AACB1BC6B28
6968C5905057ACA84BC448E0B36B65156A45FD08BE9ABFE2624DC77C20A0E179
718201ADF0502C39F542BA35545988244DDA5FFEE55FDE76DB6DD8B92CA11B5A
C4A2C1791A8E871913A96FD14F94B1630921CCA163D5CF134E38E1339FF98CC6
73CC31C77CF6B39FC5C5374C298BAAFB597DF85B78AE430E39E45FFFF55FD38A
7A8CA73617ABCF894BDA50D80E2CDB4DA7A62B2D29D280ADE90A3C4B52B5A8D3
67645D69DFC6347271D0D5F225EECC112AA2250C14BD73CD35D79C78E2897601
43847999270DFBE17BF116CAA25692AEC0317B3B41206361582F07EE382FC600
93B0773A5C173FF7DC73E510E765B933D175362D65815AA04F7CE213FA0C3B76
BEE9DD37607D17F6560D80F61531ECD145964989934F225A9550B519C5D87510
0F6C7F289107719694DE12FAE588238EF8C77FFC4774B0D68B2CB54EAEFC2A56
4D26BE0C7D5A59C46400B146191A189D9C9ACC43566F26DDBC275DBCFF4B5F78
DFBDBFDEEACFEADD5A77A6161AC3413BBAB739ECB47264E353E3B591C16E32D3
A967B43EAFE7A1D14DEB796BA03635D66B4DD5770FC32F9052CFA79FAE4F3F3C
90AD1B3B386C9BAF7CE65FD68587C3B2EEF281FAC00EAB767872C3E3531BA709
32C7B58249C4B6DFEF8C26F9AC4A4D664B76D931B564A897F7D290356A12086D
7DA8D54C071ACDF593D3E56E29B46CB757FC227F5B73DC6895F0E019C9C9D048
B56A698954D085D2244F7B1A4E29DECA1F45743EE459318A5C7252EABAB8B7FE
A79E866EA61D580CB29B95AE705A06B4F5B7EEF330BA6C6ED7133F291630A6BC
8EA7A487D7D7BDE5F3E8156BF73E83200EBCC5B807B758D05D64689E71C61927
9F7CB26B17AFBCF24AED7C9B1D2E6566B3398564E1192A9E2FA41648CFB464E0
22A09D57A4B0212A1088D97C5D4AE067B103E9F4AB4F07C73CAF78CBFD22C388
07152A0B5B23217A8A9D91B8B411D146145723BEF0C20B2FBAE822D9208EC887
C89E35FAE0F6DB6F7FCF7BDE639E291712782EB8BD0EB91E4FE73CAF08EA0C70
25A641B4C12546BD8AB71311839D9E5765C44E066B6C7A933688D258E815849D
E357B19B9B44A563F305D3A5975E2A51EE6259EB608D4D0A49CE594C31CF02E3
89F2E09A40BAE1EA7D97FCDA72C4D48A33C10E7BA2CF80E67A3C706540A762D2
637B8DA61E4BE6960A3039DC82EDFBC217BEF0DE7BEF655919D591471EF9CFFF
FCCFF4020B15DFA1930E087783E310E5B6F1993D074B7846BAA668CBD6CA9E39
1A121822943D919610956AC4CDBD69A044EA1D04598C2F5DB56A95F4BAAEAC6B
9A27445FC76AE4B23241B439B9ACEB95FBF2616C062F28DB09F705B9B0EFBEFB
CAEA32B14ED892A7B2A59789176C4713FCA7A5B156D3EDA1180CBC54BE69DCEB
82AD45C61A9B5217D7836B5921CC71CB04A7156280DE62E32704ED1B1D7BECB1
37DE7823FE745C1A1EABFF5035EE45F669486C3FBBEFFE585C381E2A7C80B193
B256B54F8CE824998D154E48D31219F1B7F039CDD2E1A1616991E999C966ABD6
C97ACDC1FACC44370C855DFE649B4DDDF51379577A67C948A160870B486A5B3E
73D24C022597B206DB45094F61650D8C4CD546DABD56BDB97459BD39FDE4D3E3
BF7B5CD739E80D2F1DDE387CDF1DBF9ADA38D1AC35B6DB7DFB87563F94F49E2F
ECDE82D7686192D667BDBA7A5A2BF7620FC534D01AD1ED9B456FC102985CBCD3
285DDB96567F60C58A658383AD24CD4B8BAB3ED39E92930FAA716A7C42275B57
E35C4F4E4ADFD632D920ED6EBB97497D4D757AC5F5507F28BBA45E6860E9D8C2
04A89746409E487327794FB3346B16F47B7EFE6788B2C54644F3BEF624FACCA6
2DA3CAE6317FE50BE198D8E1FABAFB7721F64384BD45356847C117D477A24395
F2881B95FA2E9044BA2CDE5515187656C07E46449941A9FA4911B351B4046E63
C9E0CF1BA34E24C9DC23644243054F411B7A720C34493827E88C50B91DA14AB9
BBF699844DDC4188C119A519CB9DBE3D1A77568FDB4DB8E52A60FD1075F3B605
61A23BFBC77DA0FC73CE39E7BCF3CE7334FB631FFB98FC805ED50331CCF55192
C511FC3864A82E135C20FB7A11672954C366A472DD8EFB87F39251F20FFFF00F
8E764AC0D11AD3FD79EC71DAE678D7BBDE25598CFFEDE80A467712911CA1FB89
F7EA91FB2ACAB9236B17D3892022B10680BA20B877DE79E7A38F3E5A6E131F23
CE41126BFFFDF7FFCD6F7E63AF5DEFE06D7B0EB59B4F3DF554A226D0CB91FED1
8A9C75D65971B91B8FD3870C67279C7DF6D9175C7001D87D0DB25E76B3D7ED74
2F59001A89A65193699B433F31B33CF31A217FA29384E37231381937B76F4B33
36A7813506F9EE3FFCE10FB7D0422ACC4D0B25D10B539DA501BDC9121F7FFCF1
5FF8C2178CB7D49C77AB3E867406244A19AA281FAE30D4F0D80A8CE7BDEF7DEF
CD37DFEC83403E12AE370C418FD0AC2C0B8E3FAD18AD4305E9D20693A8628710
18A44DA174B3668CF4B07B9D6A92F5D7030E38E0C73FFE3184D858452CB12EF2
C94F7E525B42768021F77CC03E53CC1EAFAFBFE94D6FD2A5981F3A9C0392EF56
2DE76269AED7F0E092B171780427A43B864764DF4C27F550A89366D8E1C5DB8F
251B075736D615A7A0EC9D9AC917D5E5D250E25D82846DBD782BCF9A53BDE96E
3D0C0E0FB4F291DE33F58987A7B367BADBEFB9D5538F3E9174C2486338EBB6A7
F3E9AC96159E647776187D55FB2EEBEA1F6ADAEC75DB956C94FE250B10924AFC
24C54A85AD570E49E31619999DB76B0D34A480878606F2D02D9C885A989999EA
E6C56C64DD0219DA9E9A25186FD4EADDF650893EAF499376DADDF1E999E7366D
D8B8696AA69B4C4FE533D3850EAED79BB5B444C9F4DAD2D6A1F088A1602D14B4
1473B14B9334560C7D9994746E872294310BEAAC565C6B1B27B9AD2617CC559F
7EFAE992A58E9321D20DE5716375CF703CCFF108E3125E06CF2F98DAA649F1B1
B2AFECEA801095728408D54FC8CAE4B88EDEC700640E51A86200683A8B08D3AF
D24902F168871819F53C67A1EEA73F5053E554685F3C3D940E87AB3EF898D171
0BDA86D63436079086DDB2B1BCDE9148C2EFD965975D74653747C2C43082260E
FE301759455677C61967C83DE52E18562EE28E5F5BCEC17845D95871C8DE691E
FDAE41D2FD974F82B020E646D29778A0440F010DFA995B77F6214A1C99D452ED
BAEBAE12C716F1FEB0CF3C41059CA7830E3AE8E73FFFB94F8EEEC29FEC481925
81A0972A45F2C6FE25CE2EB17AF69013C97AE78D6F7CE3DD77DFAD357AF8E187
BDD6FBEDB7DFFDF7DF2F8B475A138B847022AB43C2FB4FFEE44F7EFAD39F86AA
A5AB2EF8F18F7FFCC31FFEB063387D24270EA8C621AF503558050AC4E3B00A3E
99E6BAB3BF45D225D68879547E87EF6583DD5964B634611B775CDFB202F65EF2
790675423984AE661AE71D76D8012880339D440560CC201ECBB9B5FF1783DBF1
E9096B13CB25900095A66CC1BCAA13053B0699C99673F6082C2D0D011BDEAF95
7D8AA8C3264DA515A7BB00B970702ECC18807C60FCB6C2E35E75212AF707CF95
54142B612E9E366E061A438BE72BB62AEB61033ADB71C7ED2FBBECB2C38F78D7
D0706B3059B66EFC99301AF67CD96E6B363DB2D50B963DB17E6363B8503B69A7
FCAF5736FB93CFDC08FA2F69078DBAD90C438D66FBB96CECA16E78AEBE24DDEA
D57FFAAA1FFDDB0F3A613AAD877617399B96E1A56E1C4E0B115AB84FF1CCB211
847AA758CDF2BC27D27659AD78D87470586653B7D5D4FCAF78C1AE3BEFBAEB4E
B57AA2C99C6A8FCB8F95D72BB75E3BB75EB8C5B9FC5E9D2D88C7F35ED6CBBABA
1006E5606DB459AF4B7D1673D2CD364D4CAF5DB7FED9F5EB9FDB948E8F4F8F6D
CCA6A60B1D5F4BA5036441E449361B119C4570D56B65A54F636A72D2E1DFE479
960F9D9AE7D9256342157C47AF32B804F7FC8897AC4F01F7656D5EFEF2973FF0
C003986ED0CBB8E9BBCB9C9093C603F69DBB3EA3C71039B690AB10DD64C2919B
1829195F363611E00BD27E067EE45651A6A90F912B088C31ABBAE0501F85B626
946B8F2854482618EC0B94C63EFBECB37AF56A4C69E92D791BB7DE7AEB638F3D
1697D55A8419A3E1BFC6C0E605C14D8C1B56332C775036E04DB40058CA6E95D3
C799E7098AA98CBDBA586404CF6D9119EA1CE60685FEA00286C7D50E531C5843
3A60C540F2002D0B1AC595D3400CF45756BA0F6FC58D08D5629739D8C246A15C
12DCAC414331AB3652183C0ED901FD29C627BFE4252FF9CFFFFCCFFFF13FFEC7
673EF3192717DFF6B6B77DEE739F437003E8D7FCCBEB95FFAAAF100406766757
86DE566618EF6B6FA9116AFC1A9E7ECF2B92BC58AAC615A8F8F421EAED9344AC
6714CF9C74D249F29CF4BEEC9B871E7A486EBD76A0F7807D262C4A0D460A805E
D9BAAFF68FF4042CD0348D8E535921A282CA2A22214A9BB0B2F3B21F702863B9
B212E8776B54C81FAF806144D1E3E89ADA8724EF1DCB0166C9BE62CFC0A721AB
EBD1471F35264E63DB76DB6D258C1C2BBAEAAAAB3EF4A10FB93128397BB49AB7
8AFB9CE3F45BAF2F38FEB4EAE4C85AD08A5CDF951835E33C9578EC22BE15B352
FB115CF9CDA1701C8BB633CEBC68D5D0E55A35DD8534181123D0E3DC37EEA22A
69407813B3329E6D7935500E2C5D3A8A9DB4C376DB3FF5F4534361B01DDA432B
06364D4CECF0B265BD91990DD954DE2CB4AC26A25584820BF12A2D3A53066807
F3303298D4DAC39B9E9C997ABC938C87C14E5ACB93953BEFF1C4338F8DAE1C5A
BF61BDBCDEC1462B74EABD6EE82493F942B0A65AD43425AFF87C0AAEBAB440C3
76BA3345E4BBD07EA1D92A48DC0E3C70AFB1B18DCD5663971D77D865D71DE4F2
763BED75EBD63EFAF8C3535393DA4AC323ADC121F9490D8D465E7EA3D6E5B2CD
9278B75CD41296584B6AA91E2A14CE7C081393BDE7366C5ABF71FCC975D9D464
6F7C7357A26B7A26F4BA69B717F22CC97BB3DEA1BCE0C2EA4A8A206D9160DABC
89305BDE5F8B9819C308BA980DAC0D86C4D679817488396133CCEAF845C2CE21
8A6420181D70E565D10DA158EC84C41749E7315D032D666F3B9DE194565ED652
6ACC471C71C475D75DD7C7B0162B6020DF6EC54BE6850E25A47B7D41F7F06648
346227B316678209F561611B68ECCEA4859AE773925CF0CDFA90301D9C8AD8E3
2648853B455AAB6F66FB0C136C9997BDEC65D26D926E679E79666C40B95D12FC
611CAD785262BE7B9B51F12D2C2F006FA32DD010F3556C5F9E237EB1B7D2B9A4
FF3CAC2D175C28EF12ED9E638E39E68A2BAE001C24B10BE48A3A489BFCF09038
0EEF68B67ECAE87BE491471C3786278B2C6F98D7B7D8EA1CA5A825877D5303A6
B0D5F7D56ED345108BFA493F1FBA8284CAE34476F3681A92AD1F8C803CA26763
2FC6ED71DC97D0EE14F626060133A9FBEAE9F44F8D049F0F9A0BD2339896DEBE
E47A6311ACBF4AF79C70C20938F18EFF5C7DF5D5679C71062961AF9D876A2046
2C1CE3726737083243A72690C2275402058E71D5F8820A38CC0B4173532936AA
86484F68C0B2EAA462591D935D50C8C45378F031D61A7146708238903E63BB04
6B15F001519FF9B43E5B30346D0E5240FCE77FFEE73FF8C10FD8EA7EEAFDF6DB
EF57BFFA157472F64A43693E523240F987A5271B80DE6D3C8561CF21B29C7C53
8F4717C198C397CAA35EB316E873B90B52AFF8AB5EF9A7FFFB27FF5BFF5EB664
D9D8D88656B331D56E3747C3541AB67FD1F0C630B16CDBE6C44C57DE5F2FCA3B
D58A38703A9C67336361EAB946777D33DB14B2F64C2374F5A7A98132DACCE465
6164606866BC9B84463B4C20F45838D6C53CB2A1F2A838416586AE3E35312905
5C68CD5CC23D2C5B5A182207BFE280767B7A747850AAB735504F348CF6D4F8F8
D8FAF5EBA66726A577B7DE66C5D265C343C30D4DC3E4E478E84E94ACFB531A5B
112F9B0D616769D88C32CD7B9D5E9EB43BD9D84477F3F8F4FACD49D69592D021
6D4E4D249BC6BA9BC626A7263B25C6AB18465A4385246979127B9DCC5EE3EC83
901C0E5D7C219D0E8878890BE611341AC1A587E23032035944E2166BB83C0261
91770300CF61D7BD70D290F64EAFF2614ED37C278A70A079644D8E417E4ABB0E
EE0E97B4C17BE3F05812A17A5DF5C495EB514FDEF8A9E5E1FCF297BFCC4AD658
C323902A78C988C498F22894B42106D084884DA870095CC5816484E8D86C967C
216E374B7D67A81C0B333987455E2647351F16A68A0E9E748F7ED96BAFBDA49B
B1B6A4CC4E3BED34B88E5D3E61B8BF25AC4F635E55703BB0CE8CC475AB71D277
0B0A98AD061428EE521947F3E07C9683A2B1E1BB5888C0299157F013F703B0AF
90463487BCB4487283B49CDCC22CBEA403C0A9115F8D833F86EF87D269C365E9
B336624D16E6BA2F4C97D64217A19E8F9D44350E90195C28ED128036715F1D89
7EFD091605600EDEA338792ED992252719ED27753A90226317B0C6597FD055BA
A9E188507C93F0A6E1016576D0E238A20EE5CB81071EF87FFECFFF71EE7FBE8D
9CCF05F119EE8E0FD7376FFF5510562C5FE62A8C80198464215AC53A6AF6F450
7A041E16B79BAC84564113A8C388DB9194848214B35D73CD35471E7924B9FFD8
9966E7EB59A817586C9C1604D43861A56975F20A5CA3BD6468FDA73EF5A9534F
3DD5149E3E147D9BAD567575E4178D472377691C377DD18B5E74FFFDF7EB1739
F49FFFFCE729B2B2568EEBE248FF6379E7735FE5C268136EBF71C3865EA7C861
4D8C6DCEBAB9FE6F78F9D0A60D63A303238D666DB237319D757778F18AC96CF3
403AD46974DBADE95EBD1426DD5A7366A0D1A9CB237CE6910D616318A80F17FD
0BA7C6A4A7E505CC74C3C0606BB0D9DAB06EAC2A46A99591ADC1A4EA96C352C6
34B1F1A2B3A3A428A550B5F59A753D54181AACEFB8D3F63BEFBCE3F63BAC6815
859D43B2C1B25E3B49F3F6F4D4C64D1B9E7EEA996E4F2ED1E0D6DB2C1B191D18
182C92B3EDF6CC50A3A8059D962E4D42AD9E17C1EC1CCD31564B73190E8515D9
0B7AABDDA94DB7F3B65CEE7C2024A3211F9D690FC8997AFAE94DCFADDFB076FD
6C3FC39A869625DD5E4927D26CF6DAF384E42C8EEBF9340DFD8BF4224F81B587
00FCF8C73F2EA17DF8E187DF72CB2DB1079CCF2D939DEF13B3551CA57BDDEB5E
F7C31FFE90582054B59A55B7E3739CBFEF68E7731B7838776BB02732CD9DE643
54FE60E59247540144BF25AF68A78D8D0BF65B4FADEFBEE215AF9090B1948089
01CF078D3358BEFEE22FFEE2A73FFD29E81C77E48CFB0F85AAACB97892BE8633
B098526E0402B90FBBE436BDE81BC79FE3F47B5FA40E6C451FBFBCF4D6073EF0
011AB9208BF3AA73783E97AB369689F3130C243BC16687D200277490CF03616D
41B0E206C5EACA3945E30E6C79B80C432615B931868DFBAB8F9D74D249175E78
A163A726A6703112D3AE9DC122C5C5D0611E4B465F4A8FF8B62B9D40F1306CB9
920F3DF4108D710027A366A4B17429AA4D8CA147D0833E8338C5731537CB7443
C3B422CA4FAADE35A424380396A1718AD77CE0F123C41B8689E52B0EB4E25B70
38F9B03EF0D18F7EF4BCF3CE8BB9825DBC4F34FBECB3CF9638706521466E2F6A
B4E2034978EA6D6F7BDB8F7FFC63EAB6F5616B1D166BCB5881645E19521F6A21
ADFA2E609AE8E9682B891FAF9F37DF7CF399679EA907E1F3EC589FA0B89B087D
EE42D50ED970B630B7DDBA0F3653BA85F1330FDC826F99FAC3D0481AA9C6282A
82ABA0268922C08574DB6DB7BDFDED6F3FEAA8A3BEF9CD6F52F2CE78DC291653
C3D816F87BBB55AF6EB68D3B5A3A0C1897218528E8D568358BDC6A5ED4DCDC7C
FD8DC71E7FFCE8E0C8F8D478B7D6DD65D7BD9E5DF34CB7E860DF4B86E45BE46D
89E6C9505B1106764A9A2B8A8C5D7B7D77FAF1BC574C672B743B3ACCB572CAD3
7ADA4B1B5948867AB56EAF4B8D4B2DA94DE693794DC7206C37B21DE14D1C83B8
138C3798857271B892BC3C296178B03630D858B67474CF3D77D3611CDBB4B64C
F7340AA4559A48D74E4D4E3CF6D8639BC7C67B5977C992A1152B9748FB365BC9
C060BDD0869D274B83BBDBA8273539CCDD4E896A9697BAB95E2BC0643D6E5B93
661EE8E5F5BC9366BD46C8476AE98A6E36BC7153EF8927D6AD5DBBE1990D9DB2
70409E6F018FEEF6666D85F6F4BC6603E5036579DB3E983B09CE2776E5033A9E
EE7FDCA780F3454058BA2624187BECB107A81A0EF2C9279F2CB3CF3B9C5AF6BE
DAD10543A173E8A5CA90AA6CBE638E39E6F8E38F0F6569ABDC3CD812B38A74DA
AADD74CD34737BC31BDEF0BDEF7D4FDB529A1833EBCD6F7EB3F6B976BEFEBA76
ED5A9313E4652910CADB3154CD95D97B5C85EC91DF74D34D7A4019A37C2B217A
E9CD141BAD0EAAB8F88FE0A471557EBF8F5E20E6D1E55B4C6E1EB523A4CDAA99
D6C195108808F3C8CDB760D1EB5BEE01EC3370EEB9E75E70C1057D7D4B9CD200
D8E280839B0EF5AA066A2E5A8D79F9CD65CA0C9C73CE3937DC7003DD115C3A89
E76AEC89938E313F2A0AC9A82EB20B164F71C0CD368DA12E7C4BDE0FCE370C59
0EEA86A8159DEB47633469BC5FB115B00789F9F4AA06C646C5539B4BF0DC1CCB
E619A69B1E33E6AC64ADEAC2C66AB213F47523A8A9DFC51174723AABBAD76515
09A2792A5C9CC046E59073593D9AEB6762DE862D28CE18F2A38BBCF5AD6FBDFD
F6DB5190AED8D68ED532E9B244E9593EABBAA4E23FD72F183ACE56F031C2D158
453142C71F03F342E00E0B2F54A8FE785BEAA04A7CC498E1AC6A03104A3AEB6C
6E53F450259C1C8E73E2C6E13B1F6787E8D38A3498B8579C82C1E1265001BF15
D639C464A1E2FEE58E9850310E8ECBC65238FC575EF9DC86A1B67B3001635466
884274495488E2028A5099B071D6C302D16C2A284E57B2C54C9C59D9548393E2
4E53B39E53498D5904C60BCE4AF9A4BDA48418D7EB5AA96CE58AE69E7BBE60FB
EDB61A1A2EA2AC59A7B7CD361256C573D51B3AD70D9D92A9E989CD9B37AD5DBB
AE3C2F8DA1C186B46FBD216757DE58BB9E4FE867C867F26C3A290B8A9222FE9C
248D769199EED43A3DFD4BD233A4CDACD84A49B3D7D50E6C767B3AFB031393E9
E64D9D89C9F686B1A98D1BB3B56B67C6278B69498A92688DB4D9C967A471537D
3927F85C761A4E6605A9B6B3DCEBF26877AC7D39DAC71E7BEC1D77DC210108DC
01FBC99236AE4AE5C09A10CDD5B160A731FB74A6D6AD5BA7AFC03564CF27548E
693EB700CCFB219DD7DE801892916531F7806575FC0B6E640CF0843A900DCFF1
9CFFC26173EC5A3F0F3EF86039C79C47DED765254277DD755778A8E86887347B
D5AB5E25AB8B78F82CF20D8786966A881EFDC2B942921A9C96540C0C48018EBD
D381B16AC48F41A080E9707D21BA7C7E6E80F3E6EA66FE84E65BECA04209C253
68FDA4930C10302E9A9D611266E7DBCC5F9357C0F1B899BC9D72135040FDA8AF
A051ACFC62E253595B0F3CF000C34337A090081B20E6080213F14EE611EA3A51
D7577315AA7429D2562E947CBE988295ED029F9F73300B2A606FD65856E2136B
6C306E92E6D7C50126C02229EDDBC704EB52540C615D41AB9094DD7B0E3BECB0
2F7FF9CB18B9D4491340D6D56C8524554B00B3B392ECA06C805B9C78E289D75E
7B6DA8DC6B5B4BB615F28AB669B1DCAD5D524400D279F7DD775FB3660D6808C8
9F111F32514F3BED348D84EABBAC6A5CA195D5B19139FC4FFFF44F640DD848B8
71BAEC2DB7DCA24776E10DC635755FA1A4C1D3EDC049E555D3272F7112159BC5
74220EE0C76A238FD0EF905AF0B1F3CF3FFF924B2E21BBAC8B00B6322B4B5635
0C88E3BA76E0F2AA9746AD6A68CAB6776C233611E29006A74056EF29A79C12E6
A249D3A827F47F55012FF62737998983D83182DAB3E4787E88FA72326FA65930
EE77CB0A18572CAE8AE4FDA2DEB79B9745B7A0B17A4582B6843D6FB7FDD2BDF6
D86D871DB71A1A2CF24783CD565968D71B19199678EF7467A6A62664FACAA3D5
75A483CB0853DAA84B37E7B5B49D8776A17ADB63592E4F5D2B3889022EF4BC54
6643EA2D91F53ED30905323CCDD3A6446E68A4F55E5ECB3319D6437936D4EE34
66DA49A79DB7B3D6C64DD9D3CFCC3CBB76D3C68DEBA7A77B494FC643AD885E17
46844C8752D314BA3D97026E1696643235D559323A3236361E7B44C6F1217628
D53598DF3E80A52B3F9967CADE5031AE6E304BB1D78E64705E023C43E5FBFD91
0AD825CB7D8C6FA855BA42E17818F4C3B9901CD35D5C9287B459AC20029B8CE6
130E1ABDE31DEFB8F5D65B43D478D818EF3017E421F172C5155714BD2E4C18E6
B8A2B7AC6E70F8E187CBF5D6F176C5083DD4E2E07B4C23A7FB513B6B42D45AD9
FD4D4AD1D81F7DC0D88DF9F0F4BC62EAF0F59D655CECA0F2C95AD4098B3FD9E0
D59F5EF18A57486FC5856B3C6028D155E62B616FD1621D50554C5784DB878FCB
2D80C9607F60CA6969DFFFFEF77FF6B39F0D112510CB4CD6445ED7F7BEF73D30
A821CA8BF40555D0288E31840A71A0BBE315B19F0C0D4311020A835E0A601168
52CFD58201F9BC62FBC3C98313DBA5687153CF1035A1824315B2D23E98B473D2
A85E5B33A8190E6A4C0CCBCCF3206E5C6F4A3516CBEA9FC373D145179D7DF6D9
0CC900F82DA0975D716826E478CCE6FA18295FBA1AB123E9CBB46A241047E3F5
C8B8F28452D1703C3848EC18B584A5AF973600116F6C0897D4E7152524196E47
5928746603C466A215892FE290B509D4340CDDC5BA073E3FB7F8B52EB12B6CF6
4AAB22F2BE66EDD08E222D05FC9E3D4015A2EEA555A6E5094B66ED9B56A43A8B
11E02CF6CAE7925C7A119D977101B7819CA1E23FC2AEF5A2136CC39072C3A87A
D488DE7B062DBEA0020E7359043CB05AA3DEEB140CD5B594BD076EB1BE7CD9C0
0107ECB7DB0B766C35D35ED6999E18977A2D7A66D70AF52F4F77A63DB569D306
09F0620CA996A6A479977E4D937AAD1B9299ACF07ADB696F2A0FDDBC2773411E
705B43D014940A585AB7D6EBA6ED995EBB5738E28D5668B6C2E8C088FE9E8781
24190CE990F64E129A21694C67A39BC792A79E997EF4B1A71F7FF2898D1B3675
A70B7476B74475E559AD20C7D2554A05AC0B643DED8D8278AB3D93C95C989E6E
C331EE7E622ED3805302003061242B3C0C1753C0EA1D63E3F392AAD3B2DA7B1E
47C509261D6DEDED77BEF39D175C70C1820A38D61DB12CB556761B18CE178A09
2166C33A2DE9F6C0D3E8AF882F10398B198278C09C7DA232AED3F12122A984D6
A76F10F601876B962999F101B8C5BD40A3201FFFFAAFFF5AC63E1CBFDEA06C59
EF7840403C958625FF861A414A12796C04A553D92649080BA5D3C83D53FE65CA
F8C50EAA2378EE50042C4DBF4B8C723839937012D96772E00E7CAF0510B12C3F
601A757FEA2B168AEBE71CE1D4E0A5056FBCF146781649DAD522CA656347699A
C4EEECB3DC39F331F156AC5710F40C29468987AA73406C6AA5F3BAD92CB6A51C
0B49CA72A0471E79445EBE14A446284FF1F1C71F67D548331378D03B5AEE7DF7
DDF79E7BEE8145415BCA61E4382282F886795FD7DC6FBFFD640F712A08AD1351
D4C875770AD5F4CB073FF8C1ABAFBE5ADF7244448F0C39575EF529331A0E1C40
1F1B5C2CD043C4A1E8DCB98E8106E05660469CC999BBF2CA2B6D258408CF693E
32FC45F695151E7BC08CF3279C7082FC69BD49BCDACA83089055943352A13271
CC7E6547D3A11423AE35721907AB57AFD602C935770984FEA4FBFEFDDFFFBD36
BFF69BCE3521190D127E5D36582F6A9B88AE754E843821C721F6804394E6E0C5
A2709AC095F41DCF9889FABFF4EA53C04945B070CD35D77CEC631FD3D2B31026
9BD35F97942F7D0672B410959F91C7C1F240F4C738D83EBAEC304F012F98772C
BE524BF3727D8A752999375A0DD9ACCBF67DD16EABF6DE63A0551B1FDF544B68
EC5D4049968E8ECC5EA420E5EA9536C47499539F2CBDE750972F5BEB25A9CECE
B4245F2374E4014B01E7F98C3CE0827A232DB5644363AB152E6CAFD034B57ADE
1A6A0E0E35960E0EA74933AD35D330189256485B696DA09636364C0E4F4C359E
79B6FDD89AA7D73CF98424CFF8C6E999C95E47E3E88542BAC8832F42E839B5CB
690D96853054043CA6E27D18C7A26984609569AB3DC6F0EA4D7D5EAA44BE1CAA
FAE0830F064B8C22B72B6C3FDB3DC2912134245E50016F0193311F66C5EF0870
3BCA5E62BB7C063F6DA19E3E54D85B675D438976B6208AF3D6B18220DE06EB46
B103F9048AEADCF215AA108DFECC842631197AB900E8768D6F45F9D2772D5C6C
90E6552D818672C411477CF7BBDFA59D006E449F6BDF3783269A26D26B5F70FE
CBA745573EF0C003EFBEFB6EC7EE687C4119A2F4C725975C229FE9D4534FBDF8
E28B43C52C6126CE983F99161F587C8E5B1223052B4F78D6F9241A40E515541D
C06788EA8888394B39518E06D84F5F411FC460311B712E79D29985C77FCF3DF7
947265F720F8F48265579F34E1B3E65FBFEB93481CEF8305F56E32B76C8C4385
E9C3B1410DA45577745F4D77D177F13B1D158FBB7FB085687181C985D6C1890F
11DAC08C0D109878247473E31DCDB0B619BD50342ADD1DBA73EBC2F94771FE3E
C11E320F946EA7C93FE8A083FEEDDFFECDF28251C98E01576C7E0C8E197B5BC6
3285464959C68DC6224853E07227269C1266545A41A01CC81A37CA75CEC51E6D
52D5087A77C515E4C643F0A46EDE403495F7DD622876DD42E5E223D46242096F
80383BEE45F1B4C0F241C694CA13E40357035609369E6265E79B6B55ABCA2D84
94177CCDFF7C5CA5EA280BD6009C71BDAAB7291D5C42C585A9A13A451D4AEFCD
79F1B46A94D9474611E629600CFD24E2C08A765D313029C35ED6D3A7B7DD6E78
A79DB7DBFD053BECB8D3F6EDF6D4C6F5CFB6061A7996B465B50F0C8F8C0E31D4
F24CD508C09646615973517499486AF55E9A1421E83C746A597B560167336952
6479EBA9EE25B726B8264A836D34939182B5AC39586BD4D266AD3E90D4060A05
9C34F38290B2B6B9BD6C7AAAF1DCFADE53CF6E7AE6D9E774729F7AF2B975CF8E
4D7502E8E8503C41ADAA41CA927476E78C94C6CAF0F0286ACC3886D889821A81
909549D9E663D310B3E8363698D691463E4C29FC10569C59D5999B74CF7F4901
DB69891322ACBBCEAFEE48AE8160188927095849182830E3FCD7622FD4B34410
B4B83285DD82D3FDB0AD5F1CAC9A053F57D8E1C4F6AC5C0182AB3A4E140E71FC
62CE0D30D93102426F52C660C9E2436BB8698CD20A155424995731CC4BDA4BC6
115F975DFFEA57BF5A9A9B64F56207D542EAA52F7DA9BE8B38A336836303E49D
70A88EA8CCE79B6EBA492A191386FA28B34EA6152DB383D29C40A3409D41B44B
E46C5F6C76118D6184F8D031CC355416405F902D44D12D6D080D38AF3A186615
8974DC2F3244404137CFC1C6679217335CBC7193A8A8CEC7A94C4ACD76B3B73D
A1BBD31BD880ACD835775E565A4AE298444B5EB5C5761E08CB8348A9461B130E
FBA5AD4CD04563A066AE56BD6EB8E1860F7CE003586F6820294B39EB2E045FAC
6D22E17ABE05E2CCADBAB44FE00E8B7B91EA93F2B464AE19E7CFBAEBD911FD4E
CDB2939D8CD065B5B2B2FC10FAFAD67BDFFBDEEF7CE73BEE87A19F08A9F94E55
52756443F440D608C69B681E36190F4B459CE108EE2CE49D8F978F7160387D3E
97E5C63930DE71F980219DEC79371BA64CD1ACB924CEDFF296B71027EBCBE4C5
72F0FF2E071C4B58CC975A49D64F9D925E5A5610E6D6A071A1415CA362EFFCAB
5FFDEA61871DC694DAB274878CB088071C8BA9D85A92322DE9A80A8F569EEEB2
E503BBBF60C79D77D96168B8BECD365B27796FD3D8BA62757B993ED96C0C24E9
F3392617BC164B95165F2F0D02FDB317929990CDF432FD9C420187BC5D940237
82146CA18007D366BD564003EBB99CF0662B1D6C355B034D39C67AAB561F4A6B
83696DA8E0E70CF55E9EF4C2F2F6CCE0C6F1DAFA8D331BC6363DBB76DDEA871F
7FE2B167368CCDE85864BDE279E43ACB8608C526D41CCE6898AD566D665A6ED8
7239355452488ADE71C71D4C8EB32D8476D999E04CCDE6EB92048399311AAEB8
E20A79446E2443A931A194B855895B065841FC910A38569369C51085A1B9EBAE
BB3EF1C41370ADB3E7E18EA5DACA1B2666599FFF420813927155A7FF4AF40B1F
1ABBD646FCF5D75F7FF2C92703379E3DFF7298E44664556F13C7C14806F7F540
76B4CA2A9D6F992287E7C41AC5E3C12A476C39B2D7172AB4E7670B173207840B
6D89173BA831A902A0301E4F2394B1C31A939A02DB02AA486F72CD989B5E934E
2B53D28A56754E336BF11E7BEC313F780C91C77781C810D480B3E96C0B5DFCD2
4B2FFDD0873E84EF1B73A3CC7F289E45B7D0EA489AEFB2CB2EB2457EFAD39F6A
A5D88EFA0C28655F1F7BC216D5628C488E40C632C51771A823E6F8D530DEF7BE
F77DE31BDF70F953527178B95993C5740C2CE217103D2E2BD23B9A878F7CE423
DA030466B98B1B73F9E470B039CC1C1570D7EC40C640EC21A9D8B5B6E0012355
9D737524CDBD87C1751BDECC0492AA711D366AD56C12B7DE7AEB11471C71E699
675E75D5554C26C6848D338D10826B6FCB3E4736CCF54443D5BFD9D2D97DA2CC
64C94F89426914C9087B7BFA3C52A32F6711AA5EB676CAFB96DEFBC1E2CF4071
ADCB9D77DEF9DFFEDB7FE3F3687D82070807D2F6B8D7943319051D2A056C17FF
8F7FCD8F3F23CA39A798659224C0BE38D749C54A96571568216A76699560F23E
A36493AA73CC1F54C061AE6B553C785E126C75DB79AF3DBAA4B5FBEE3BADDA7B
D76DB75B29FF70747848F64FBB33DD9E9E29A272DDBC88F1A66D72CFD2C7DA0C
C6370C3630986ACD460D0874B737297FA7D71DD3670B087468D7D34201177AB7
564F06B54F92562369D4F3E2CD46AADF0B244AAD5EF65D68D61ADA78A3493AD8
CBEA5996E4C9B02663AA3D3C3E1926DAD3EB376C7CF4E1A71E7BF4E9A79EDDBC
69E3F8C4B806272D55EB65B3E70E41BE61C3E6654B976CDC38A67D45B6056FCF
492EED4370F2E82DD75BC6D6BC839D46509A7E80E4A0F3FA64B5AC1A9861C420
3267B11CF0827AC1174107E755B76F086D407EE11FA268B4C9EFBEFB6E78E830
9149B96EF9FA680A94374910F7048A41F859D5A291370958EA5B898DC4CB2EBB
ECF4D34F27EEEAEE780C1D47101FC2474B368B9E815242E48E55789CF28C9301
2C46ECF1F4D935A12213702B189D34CCFC2DCFB5EEA8F148FD1835EEF8B97EDF
6BAFBDE4B785CA22A6403654D95F4DBDD6C3E568A06F8E3EFA68992A00C7355A
67AF5FFFFAD7FFEBBFFEAB0BAB42E5F9E511838F6BAB38D8AC3DAC587818BA3E
8A332640EE5B5A7D0B2098DFB7CBE5EC859FC89EA57307A6D7E8F3487CA33ED7
277E690E256701EE1ADF8B2DA5017FF6B39F3DE6986334C8BFFAABBFFAFEF7BF
EF4E2371E52BE61A4E89E1F106AFEA33BA3EBCD9AE8A71791857BBFAEAABB51B
CD3B66E648CAC3882282A6F1098F294817DC2431AF4DA80C141ED0591F23ADB0
EB01BBE5158F34790AD47FACF02873EF557DAB92AA96BDA8F32B35937B66B860
A66FFEE39233CCD9CF7DEE73EF7AD7BBCCC5C65172778D506208B8A64382E6C6
22191F7B037D48D138949A56A4BB71D20BBF90380A0479DA0F71198F318F54C4
02F5B0F1E1A74BFE7F9421F5ED5B143047062163A84B88DAC3B8AC31AF1A2DFB
65A85A98EB1CF719250B2A6057152615EB1980F0C1D650C9C4372E05BCED76CB
F7DF7FAFBDF7D96DC5CA25BD76A79769F34B65A6727F35A29025D353ED7A2B27
3E59A2D3DB941B48310FB58A70C5809CD8C146A329AD3ED3E94E767B3353935A
C74EC867E401376AA1D194D22D7474DED26191DECD5BCDD06A268D66DAA8957D
16927A2FCBB35E2349A5FE97C809EEF6B452A17099EB2BF3B06226ABCBB39E98
987A7CCD338F3FB6F69135EBD73DB77EC3FA894E5782BD4806D74A50950E2BE0
C1C9093912050537A93733DFE9050130362B0189B3CE3AEBB4D34EB3BE319C56
4BB6F3CE3B4BCCC240CEACF2BE6B6DE255307932712982947FA402EE0B7D8728
79C1B79CB772B5027BB52F9FE5E6758BED4F7D1142E26BAFBDF6C4134FE42ED7
5C738D6CF1071F7C30442D11B9204E20705DDADC155FC14799FF02D31BFF3394
CEA2410DEEC7C42C10D2C144656B922440FEE29223AC4D8C194A2729E6D637C9
83EF1B17692C384E9C157DCCB14147A4911A5C9004305D11A5D5481A81CA267C
2F358F9840CD2425321C551AD75992A5E018E37EB9F81225411491B6F612CD9C
7983A87541DD4B66013D09CE38E38CF3CF3FDF053031B57D32171DED5F1C5A88
0B039C338E016E49052C64A2E23A48EB2ABBDACEA5214CA5FFA4653DAB80778E
3CF2C87FF8877F40B51069E08B449C386C260AFEFBBFFFFBF7BEF7BD7195B93C
3942D364D3DD7CDE016D4E3832D4C5D971A83F44EC92463DA04139C3175E78E1
273EF10988695C11885EE179D388AE3C8EBBB2D036C0634BD19D71815699898C
E3840FADCFCB153BE79C73987FA6054B085FD64AC8629D8310AFA33712FBD6B5
950E85F92C987CCA3CEF0649207A9C13E96BF96CA81713129F6E664372E4965B
6ED1C73892641F30C4ED9A58AC848AF5C9991A669B27425F6207CB1A88695542
14DFA322912814F072C7FCBDE763216898181B86A498A5139112AED3E7768385
76D82954E6AF0BB8F93CF36932137B2D05896379104BDC8C7ED5892BA6314D1A
9974447762F98AA155AB76DB69E7AD972D191A1E1918196E5455E9A53D925462
36C9084E92AA9F2A5F05DEAD88271709ECA181963CDA9074BA9D0929E0F6E458
1E3463D36922D3B35D107414FBA2D64BB50365F4248D5A56AFE5CDC2F5D5DA97
4C594941FE2C4D9A87669E0FE64933E48D6E7D246423596F494886EACD4696D7
366D985EBB6E7CCD9A671F7FFCA9C7D63C333121959FE3B3C98B6E35865CC913
238AF592AFB2DF7EFBC90F01FBA6617FFEF39FD761A71196055D1F58CF6A3576
CFBC55B8D181071E78DF7DF7911B36CED4106B963E8BBAB8CE87F8C5A1E9BEEC
5E52D57C2FA6EF1032D9DC1620DE90AC9AFD01288CF48CDADBF6396DE1D956F0
AD4355CCA60F13D665AF2646C9F6BDF4215D0B89607F2EDEAF3E061C21C41378
138057085F44468CE347FE7265363A397C2C147C11466546D0BE4297F875D451
47FDF0873FC4A3451486920CCB143FFAA2DC68FDC49D757D946E016D6FEC1825
1525080F8BF4871B12EFADAFAF91EB35DD0F84BC85972ACE7FC7F539264FB67F
E9C000FDAD6CFDC43A385435C1B6F20C96B12CA3D702B10ACA8AF84CDC362344
5111DFD7F1F0BC629D24F4AAF10082754D5156B14D61C48588ACDB17E403CEAB
49E012A0E64F98B72E058E4FC5FC66EF712D694C5BC16529F86643E2B185120D
AE936C3B1AD32444F9F5BCEA9514DF9AE2635D67AFBDF60256C6181CD72174A1
E9D5177910F2E59088D925352E57EF48955A16D83F4361203BB422F274FFE7FF
FC9F6636D5E07FF39BDFE85B2EAF4A2202F77847D97689B538BFE8FCEAD6B621
208E4773B3DC9602049CB8358DB33C217139409F20C3A7A133310221A6A770F9
BB0537A139243884A38E39114FA688DCD1A37CA1CEBB49C52DCFC98D6369CE11
84CAC521E28255173394814D61F3C711113238A6EC20CA4534A2F870D64B92D9
46F77941BAA1EB2485564EEBDDF6746B20DD67DFDD0F3AF0852B568E66DDE9B4
960F0E50E6C4E9AD5550A082610A78A91530166A413459AFB79ACD965CE1824F
A3DDED4DF5BAED3C9B4C422724D25233ADA68CB67CB0D990571D1A458D903675
2DE9160AB88C60EBEA3C574F37CA24B274C607BA592DCFEA93D940A3B6AC51DF
2AA90DD51B2D4D831E7D6A227FF2D90D6B1E7BF2F7ABD73CB776D3D8660D4612
2014B645DA8A1BD079DDF3A81B92B65F5A520FC57166930730D549D9C3C01437
1861C618D2E08B9C8BE6FC90430EB9EDB6DBD2A8AB8D4519D1B23E3627EFCFF9
39E00515705A35E59BFFAA452D92E67FC6014EE7F5F80C3C8366988FEB95C35C
6C07BE100D490F3FFCF0BBEEBAEBC9279F841165E1576C843AE0192A3BDA91CF
B85A8690825C10797512553A9C56547C86D86FDCC1580BF0D18F7E5476936596
6BB771E9EC95F64593FCA21E8BBC85ABB64D95873B62CFAF2FD0E7B070CC01E4
4C922D68F607784554145736598439C91C8566DB992B005D6E9FC9E07004071A
0E14180B162768FB7EC6341DB1D9EEB2164F94298279B9D56098CBECE1940CE6
02BC0DB6033C33B6346B55EBE5BEE65412E8925F869B01D27EC73BDE71DD75D7
21100DDB4632B25E5CDCDD30499452C7895916D70910C04177D215402F5D9027
ED554DA0F54979729FFDEC67F1D540D4E3B1397E557927B3E9760A7079965D76
D9E54D6F7A9334E2430F3DC479DB7BEFBD75CCF414EF7CE73BAFBEFA6A93CFB9
7B4152D26B4351422310500B71F884C1030BF0BC618799391C8DEBB3C045586E
874656AD5AA5878D417F6945D21E2A1C2991A72499E5B9E3D9899F0330C4D787
3A0635C6314151B1875DADE7E98A259DE656B6EF35D75C4303AE5061E2624A13
67EB311ABEF5AD6FC94F72D829943920B8A5FCC8AEEEF59EB7ED65A5DE8D7AB2
EEBFFFFEB2B498376A5774A997BFFCE5FFEB7FFD2F82FF56FF04395DD9E217F8
708DF00D6F78C3CF7EF633CDAD0D74F044E03C661BFA9627A06C0891CD36ECCB
BBCDBA36FFD62F7BF98BF7DB6F555A6B4F4D8C953D0F0A37B4B263EAE583107A
996D5147931B4AEC0A9BA36C3358E8E0A2DBAF547C41BE5104B193E924EDD66A
B203BACD5636D84A5BCD9A14706D206F35925A5DC398A9CB1B6E686FD12A292B
A89E354B254D47BB5BEBB66BFA7DAAD31A1CDA667860DB7A6338917AAD954C1D
BDE6B3EBC71E5FF3F443BF7D64F5234F3FF3CCBAF189226C5E68D6A459368198
F537ACC03C7B46867A13F6F1D422030D760915CD1FB82A87915C144010983A46
36061C004626396A15D786F56D4BBFAC98FB0CB8C5F49D75EA82DAD720150435
7E941F4DFB44B703A5E8C012A3F5AD5DBD122AC2223CD83F9098897D1A0BDF30
8F70C3E95BDDE3C8238FFCC217BE80803669A55D2B7B6C78F1565A06DA583331
E3CCF51642D07EC2984588334398CBCCB7A1449FE2B382E70C513D833DC23017
14A38B80376143682AF4261E83EB23DD709EF5C06976A9B15914DC45D2113048
8528E4201389B0CEE6323AC5CF6EAFCE2ACA9F81508DC5D2B05FF5AA57490CC9
EFD7C84987CBBF79E08107DC9635CC651EB5E70148812344D12D054526CD88F7
2B71334C87242AFB768C51A698665863433463A5B9E107CA1819ED786FDF12BB
90C0452338F4D8CE4670A086C1609389D74D3FF2918F4813B3EEF9DC7669BC62
8C025B2E9444F3B214E3F82A1A021E344D859E51FFC442C77ED2E3D87D648DE4
519D7AEAA9A79F7E3A17C7B8B153257B452EAFCFB063C2209F69281257DA1814
FD96B7BCE5EB5FFFBA6C594C6FBC61900A21229FB176BFFEFAEB35065D6A7ED4
D720091C3EF8C0FB96389DDBA1DD2FAAFBF49850F7852A390279087ACE66B19E
85DA0AAE79EDB5D75E7AE9A56BD6AC612431708C6D9C569DD52D139D03E64041
E6635441886A2E42E597906662F02EC7DF669B6DF0FBF956DC990D0FD8E10D04
25E9A482CB3A09CC41D96157FE65C90AA961867C971DB7DE6BD5EE7BECB9F3CA
15A39DEE64AF33353C32D869F72A6142836A37F3C9D8F0D6BEB39D884293672C
83C9BA4B56326175EB69A180EB6947724BFFC9D51E68A6C576196CD71BA19EEA
29A66B49AFD928DDCD5C0E719E053D51E8F642BB13A667349F450EB8930F0D0F
6E3D34B46DA33994A749D15638C8F2181E1B9F79E6E975BFFBFDE3BF7BE8D147
1E7D4A27B5D12CC97D93963162B1FCE1C41903111F70D2F0C84C19DC58A81CCF
B422F66711D38A9DD7357E168F6080F44F6A4088E1718598A33054D9965848A6
73894B4314F10A73EB3C177BC5FB9C4F127FD5D8CCE14860950ED93C11F4C0DA
3CB2FB65A087AAF225AB18D692A81A258E16F0E00B0FC85C0146F490D93529FF
1E7BEC21318D6F41D830540573DCD88DD689BE62F1E9AFDAE2AEEB77AE45B783
4643EFA0D45DD4E42E7B0B8E139918076643D52F81F8920F731261ED9C7E0074
664C87CDEDBE2531DB8B69AD3000C96733CB5873268E2622AA278A1B09EB9F50
869AADDB8212556794C7820F8BF34DB4DFB691CC461AEEF691575377C19BFAFD
89279E90ECFE977FF917DC716F5F074E5FF39AD7DC75D75D5E7DE7720C700B0B
B54F479D6B185FF9CA57FEFAAFFF9AAF9B7C515F3CFCF0C3E527F5A55E5CAF12
A3F6E2C21E54025A764105DCAB3A644815D1A42FAFA843294B75229F15372C88
C8B34FA38BF1B3AA1391F9E5F1C9244DD8E40E1B801270369D134847267632DB
DE75B47C46EF531F9F94E5C272B2BFFCE52FC7968DAB2F38264EBBD89B04D525
3D213BC34929E73B488F190A8747CB50695D75CA29A75C77DD75788AA43FB04B
60893226DCAE0CB5D7A028C25C9E6D97531B9CC8A4B920C262B75635A722F683
F7437B092DB7760E37D58679F2C9276DDF23431654C046996AFC9AF3B7BEF5AD
342DC689B74199545447B17D79C00107E8A6DAE47D05E876C5E047A425281C73
24D18B4D38AB80A5FC68A73323ED2B65D46CE52F3960FF7DF6DD73C992E152D4
B593BCD36CD5678A9E10B392274DCA5EBE019B3EC389C7FD60D5CA7DD820525D
1416D5D3A2D351D2D687D37C4ADEB03645A3DED603351B050E4BDA361D9C6AD4
E5CA76F230932685175EAF950A433FF3340B891470A79BB63B69B75DEF664911
721A583A34B0B2D11A92B66F7743AF3B18F2813C6D8E6D9A7AE2F1E71E7AE8F1
877FFFC4DA751B93D028C457B7881FD8148B0FAF2BE5C2DC641C9613AE1E1630
3296CA4942923A56886BB744F3C299D386BBB8394A2C24C33C9F211E582DEACD
BCA04FBC05053CDFC48C95B7AD436D786CD6589449FA211E258A91600EB38508
336B88891ECD10D464CB0322542BF10D11528C6F9497405D9DB51DEE0B7A1A11
6F562922633C03CC595A30DA745F71C51532D2DDB3DDAC8484918DF6DAF2389D
928CAB63B1ADDC6680D72B5FF9CA9FFCE427DA07F0091C7FFCF1E79D77DE6C9A
676E08823B7EF4A31F95C301AA0D494AB9A7734EAF7BDDEB7441DD4546FD6597
5D86BF8814839A202959786233C2C93F13E95D7EF9E5679D751600B1501634FF
FCE73F0F8BBC6089D21DBFF4A52F490021BF686F6E251427956D82BDE4252FB9
FFFEFBD19DE833EEA87F1238C5699062F8BBBFFB3BE22431E7B3F147A84F8B5D
B76720BAC09BE8E0983081C0A6E18E3C3EEA5F7FD5453493B7DF7E3B63735632
C4BCBB51085A7B9D669FEF7DEF7BBFF18D6F98421DEBD2B8770DE9BBDFFDEE21
871C8224B507EC23CA5AD82C251AC9B091CE7628498ABB568A7E413A8D3CCBC5
175F2C6F1B7B910E0DFAEE09279CA09545AFB01CCEC4435A8E8E74AC8F01A08D
98678AAC628E1E2F476C2431697E34DD1DDACEBC22DB72AD9D993E43D52194F3
68E08C9BA9ECB0C30E3213EFBCF34E67647A519B0DBE2EB1B06AD52A792A7D10
87B8A1675C37EF50398F865C9649013738297CE7D2C24221E8AC6A3F8A0DE192
0DAF917ED7D568AF091692701F690B9C3357AC39A0CAE4B0B82F7AD18B34FFFA
C5EC78858D98A4254945A1808B0D984929EA5BADD1252D29E0DDF7D8A5D9940B
AED9CE3B3313EDCE74AD31381BB79F154EF5CA8EE9B199C94C3FEF39A40D083D
EA451D6FC14A553050864E9215741C6922413ADDA8771BF5AC210F582A7D60A6
D1D461EFA541E65AA76C7A98EA4B85FE4DF48B7CDC5A3793486C74B346D64B3B
DDBC5E1BD6BE6BB406421AA6DB79AF33208B6E607074A61D366E987A74F5B30F
3CF8C89A479FDD3C3925152E051C978F7B73B2D94CE7C91CE280B9B803BA219C
2856DF53ED923FD27646E438C1AF05C206256CA9A5A485917E4736C6FDDC8C43
0A51EA90331E97BCC719D92D78C0F93CE07DA85284925A8CFCCD6F7EF30F7EF0
03CA1FB4919009A14A1E99DC3E0E7D237EDD673D7ED8D9DFB7301A0926FDA233
2605492596AB0B7C09574C1B32C73850A2F87F480D92A3F0CAD299DCD9537D45
6AF8DDEF7E373425D8A4D9428C957D2F12B18E4EB8E8252F61DF263B3432C80E
7DDC02CFB748E662B0FD8CFA98A682AA737BB440F031E54861C6756C3062226E
D8B830281D7AE8A1724365044917C61869A68B3CF1969B4F38E24D4D0E85C2AE
1B66B6F5136C4B5CB16D8916E7D4F7D9671F7D4C173CEEB8E3A4C9F4019C5792
AC14C2BADC3E8602DAF845D899B5DF17D7F3BAE5B0D614010D779D498B5EFBDA
D7DE7DF7DDA44BDDC4C20B04AC7A3110169B4717D4F8EDEED0938A100BDB8C79
C060F2998C57D96122AE6F3413D39B567D329C2E99CF1C624E4478336C7402F1
23E410A791F896AFC37D9162320AF7DB6FBF7BEFBD97EA2677EAB567067609F6
3133A991BC70E17F1F47B489CA6920CDAED698B5B8869AE3086288F85CBBA973
DFA1E83BFB714DE78B5FFCE27BEEB9C76920C34F5C0F6DAC1F8014FDF3EAABAF
96A5A2A142E90348A28FF9C8F77509781ED592F9312D7CC9BE633410BE0258B0
200687F9715199AC37C08666CE29EE9BA4BD2CC797ED95048EF2F3972C19DD69
E76D56EDB9C70E3B6ED368A48D7AE865333353DAF3EDFA40CB407B5D1EABA5A4
9AEA24159AD2BE414AD258FF9B97FC68658D58D983A15DE674DB59984893A952
D1E68D52D7D65B72D06B32606AE94C2DEDD41B1A59283AFDA26C0A222B99AA8D
900F66C5CF46567471186C34878BC0552E8119B27CA4515B562F5A320DCFB4EB
4FAC59F79BFB1F910E7EEAC9B5131353ED5EDA8DDAC27A133A4414E686FD7971
F6658C9E71C6196E6D6233D7EA73EFBDF776AEBD56B51ED267004FE8C04A3622
555CE1E9A01A41475FCA0157632C8872F1BEBF1E5B720BCAD5BE1CF07C54172F
3A917BF36B0C1A27B9153A08D0F3AD2F71E3B8261598BAC2F375F98B99037117
81DD77DF9D864A44C690233AC9306C48EEE8AE4E1DC5713C377B7AE31BDFF8BD
EF7DEFF39FFFFCD1471F0D5C054016A52CA627D432BCF39DEFBCEBAEBB740092
AA96D438CCC514928B103C8996B6315508F3A2BBC30ECD3B1264F26EE7D7E3C6
A965C4312D9A87CA57CC9848EA48573EF0C00363B795DD192A963B47D50835F7
AA2E0BEC12C9DCFBEEBB8F3818293D23F8FB7680FB16DB69D3AAEB17421C205A
FB3AC3D0C640D70416AB87C545430BFA467171BD564A86828D4D6D3B081F92AA
174AA8923164730D7DB4363208BC57B521F3910851EADDEDB648EF21CAE3BEC8
C6D63AD4C1D5E24684B1B241F8CA2DFED297BEC459ED96BDFFEC9CF952DE2ACC
B90126C439E1577295F3EB5FFFFA3BEEB883A83EDE1BC45BBAA3A4F611471C71
D34D37B967A503397C17B80394A2BC49D8C3D4D6A1E2C6E2E5A4002F8CEB38DF
498C979035EE20B17AF7000D15A795E6B35632E0C75104A495ECDD638E39464F
A48D8DBB1F17011313A29E27EED950AB1A2D6715D99CFD5A1EEDE31FFFF86597
5D86E99C57CD2BDDB6C85E78288B851C8BBBA87C1947D6C71416E72FD0B24821
A6D17AD7C60DD553248942C43192579C740472C2DC7A3C67823466286C357B10
98177E7FDA28CF6F495C5C74B1CF244297AF58BAFFFEFBEEBAF34E5B6FBDB256
CF3BEDA9F1898D79AF8062142D124A96E6D26828147CA35EC85C696E47A466E1
57989565F2B6D4C1E516CD3ABA4BD10DA95B68E23C9F48C2649AB49B0D89BBA4
5150724CB59A69B391A5F599BA1473232D9DE65E3D2DC3B021CD937A51861486
CA660CCD5653DEA174ED909CEBE94E7BA6AD9DB06C6860EBB4313034B8340DC3
4F3DBDF9D7BF5AFDCBFB1E7CF8F76B366CD834399359CDE4734BC663E2813037
928FFF43EB4C4D66CCC881586303E8BCDC7CF3CDCEEE19F4C341DE65975D64AF
BB7ADE3D58A1BE315ED26D516C75F529600CDF78232D8866F0F016FC2B8E07A4
EB126BE61BF99BBFF99B2F7FF9CB7D6491BE571A7547CDA386637C3E8E5D2DEA
011B738811117BF7FE8C6B312D07DDBAD99131821506BBE2019BAEDA86000B80
290454C4E52808F12D3092B8842B54A656127162B039F2AA40C8E6522F6A3A1B
73AFC455CEFA136164884BF4F3AFFEEAAF6EB9E5161E0131E439610740DA4282
FC924B2E39F5D4535D06133FAF0BDDC0AA58F43B79B6D846612DDEF18E7768F9
89F9104EEF552D9B42048B9095138BF2D8C2701D2AEA84B90A953B182AFE6740
10AE018BD580139CFCFCC217BEA051B170406F646C4991531A6E4A39898756B3
35D39E191E19DD3CBEB95EAB777AE5CA26A15516C9146E8A16BDCC62148BD5CB
D8DF79551A8F4A80B01AA1891B04CA09451EEF01661E2BC1A6A19B8632CFCE9E
E0055E7AE9A5C71F7F3C115A4EB26E21D572D6596785A8A29A828A0F7CE003D7
5E7BADF13EDE0F962FBDAACFB4557BDFC977FAC30CD28677F2B0AE9B0C55D14E
9C24D62F279D74D215575C61E38CF385ED5B8B5AE1DA9B67CB9D73CE39B4CD9E
6FB3A7D5CB3420360AC9441866E5E89743768845FF3566D8D7F02EBFFCF2D34F
3F3DAF5A086B4274D9238F3C52160C27880DC68664990C66D668CF3CF34C9B35
1855B2AE08B69F76DA693A9B042AD9BD08166C350E6C9CA5EA1377C9DCC24DDC
62D24CE5E216048FC56316A9DF5CEAB1D90A7BEEB5D3FEFBEDBD7CC9D2254B8B
160B9D1929D44E591054EB961CCF2CBA29440AA992CD2AE0746E837AA9CB62DF
74F3AC27358A7FACFFEF84A25F513709F22EA66AA926B6333850B8DAF57A22D5
DB6C4D173E71AD5936696897D9E2026E5DB629AE170D91928290324D9A997CE1
C12215D60B0509977441ABB964A0359AD6970D0C2EA9A74B376CE8FDFEA1277F
7ECFFDF7DE73DFA38FAEE98506830FA50B115BA861214725AF18055CEC2B3D4A
CD8B959F112AE4476A15DB33E29D3971236DBDF3FEF7BFFF5BDFFA16A56E8BC9
7F5B9C943C1C76D861DFFEF6B7A5BFB914023F8E34C43195D821EE434B255567
1A0774D9C00466CC17D9ABDAA27046D8A8A6E537ECB18FAB91FD807C5B5401C7
21F550B93BC45169D24E64DC42C40A18FE011498A506071207C2D613BE233539
5A36B30D78494CF11A0751FB5EB5B9FDCC5DEE196BD658B1F5454DEDF6412841
6ECFF5B89E77090E1D78576BE02E38EB1697183AF98AB48D3942190FE66152B6
CB350489D0313499A14ABD2FF8BC86B341E3C5802595CE3EFB6C8B3FE61FFFCC
C4A27D3AD80CA54E0AFA824945E414E6DA613E69C6473072D0737A6A1B4FACE3
BEFBEEFBEB5FFF3A96FE85180AB3DD7FDBA5DE4D4BBBB870DF8706018516925D
3F4B85AD7B4D4D4C02F6369C1EB1A88B4815693BEDBDF7DE0F3EF8203BCDB238
4647FBA0862A9DEC5E9021C2CFC7EDADA84A74EB341934E46B319E5045B4E60C
25C93011CBBEE3C38B2CB2B6BA4645BA2854B436EC6A17BD70F839BDEEF8E49C
19F99A98D72C4E0478454C146AC18114B8F0C20BB54338F6A41234D5EF79CF7B
BEF8C52F9AE2C0CAC002A8EFD46821744DDDC84E2A273A2E7F4477E6552D835E
9FFEF4A74F3EF964049C73C0C60D30E15413C5D290217140A04FEA554CF29A4F
4921400F6C12A2EEA4D5C35C64BB97431FB361AA5F3826E486E7E32E59B8B97D
1A8ADA9D822A39C8CF2BFCD2E52B9AABF6DEE305BBEDB874647464B4A8D993BE
940A05F4DC0B1D9202B3DBBED4BE45E8A2963A9F1D2BE0AC5668DF424C974D92
3AED5E67A674E0922C95D39CC8E96CD78B52E07CA0A5C9A9359AA1DE986EB43A
052C2BD5D8925A3213D2190DB0381D52C0792D49079274A856FC6C165F69D55B
03DA7879A7F8B30CD325ADE668ADB9B4D51C09F9F0E64DE1E1D56B7FF9CBDFDE
7BCF2F57AF7E74FDA66954057AD7BEEF620A384666DD70C30DC71D775C885023
218AF1A6F39A815A62C4925CDF9200A167DA169AF1C403D0F0F6DB6FBF5FFDEA
570EF358F76711E5DC620AD858071CC850516730543639D252EFC37E63BFCE1D
2338747CD86115D7D68232E38BCF9F9AC51ECC11A750B134EB25974E87163229
E0246862FBB86EF7861AC08BB29B627B1F92FA2F7DE94B7A9F5E0B316A31AE26
5C8CD3D8E3A466836221BF6F3C5EA888708951B34B1C58B389101F54BE8BACE7
883AC8801AB6780D113A94F526EE874386B0463F8579ECDECC2D4EB05585BEA5
6D77F0C107DF78E38D0B3EAFF7BA7724292E2A5588AB1B816230CB7C1D4C920C
AD66AE09838131D91CE40C95852819A72BFFF7FFFEDF7FF4A31FB909AB54A07C
324D8B94072D725D3360C242C090FAA59114C9F29D641D3FB27AB834D78AA5E9
761A65BA8146DC1AB626EAE28B2F968B36335534BD27149C57748956AE0421F1
B9016EC4681D36BDF6A73E60524FF42871450C41C73099843FFFF33FFFFEF7BF
CF824AB1E98BCC83AE2347F3B2CB2E0B51838D98C42A9E5E2795E5377FE6339F
81E28E3DA021E99A471C71C40F7EF003DEB76DC705ED50DAD5832FDE5D9F356C
4CEC34E29F8A7346FA79DD75D749089AE48B3876ECA3E88B482B543BCF98CD23
F0638ADC00EA6FFEE66F3439B3818AAA2497F0B2F1D8F807842229F39561A43F
E914E8D6BAA029EF938AA28FAF1891CEF462A01B19809F71EEB9E77EEA539FA2
C0DD7965F78A064E88E6662609549070B5C4D41830EE6113CB16624742E584E7
7B55A5B5B4D1CBB09632E9BFED77D86AAF557B6CBBCDF2E181C152B185AC5B28
CFA49C463C601E870385986AB49AB102B600E99585A38550EA163FBBEDAA8972
D11E49DBB857AB678D7A6F70200CB4A47DD38166566BC8036E4B01D7EBCD5AD0
399D09C98CBE4408A6E0760ECD5A3A9814ED089BB5A6F484BE584BEB45D30529
E66663B45E1BAC4907A783722B368FE54F3E35FEC0038FFDE7BDF7FFF6778F3C
F5D486580187B9AC2C0BCA61DB4CEE04C3E18A63A8B1B98319A465C20D407158
025BDF6FC1FD0D1108376E241CF7100B91E36B70D67C051CE6823DED70BEE635
AFF9C52F7E81C18DC4B3611A47D4F88A3DCF50FA7826143AFFFCF33FF2918FC4
E49236F7B7A48093A841AC1FE0C52F7EB106C4F401018D23E09665065F305637
C1A508C1083714ED8E3BEE28D1F6E10F7F78F9F2E52C4936971A8913BEE0380D
3EC25441EB80E9F5E009836415F1135A30A9F0D8183B0E0EC4103BBF895B8CE4
8A39997DD938CF8F24C295212EAA3F49709F72CA29946C33C8924276D29948CC
05B6DA7C0EE7BE0D670E1ADA3BC6FC5C69D55C5ACB6F90DE822F4427211AB920
F7DF7FBFAB54F117E316310E2AEAA7EC837BEEB9C7FD0C928A8B7441AB96FD60
C8DBF4D4D4562BB77AFDEB5FFFA33B7F0C3196ACF1A5CB96613FCA1F4CCBB3C4
778BD8516736AC9254DD41108BA03F6806AC0F489F7DE52B5FA1E80BD54B4603
AC69A8A2404945A212B33118E489E0A06419256DD26F8C15735FD08822540161
70BC217268AC89E9ACACC727B368AB8E7E506CF5D8E974B04183E7D4E8C3871E
7AE86DB7DD8667E9722328352CA1D8515851BA1459613379698AF445DC561F58
13537BEBC62377C527C15E3DA92CE68B2EBA88241CD207801E413927BA6CDAA7
5163A250A2253460C24EC4C908A7517F4C08D1090219FA175C7081CF1AA4FFB1
FD0AC40F2A53EC33EEEBDCBC3EF3894F7C42FE37910C8A831D15C00336DB6232
AFF2B04F7053CE5BCAA522BE3B3ADADC65D7ED77DD6DC7ADB75ADE2C82D3A57B
5769D20200DC9946FEBAF24AB72E721665B16CAC8099F64ED629132EBD52FB76
668F5E372FB3CEF2BEE5EF1635480383B5A181BAF4A82C9C7A530E71A1801B35
29D4823E3A84E95E57A3E875678D06E9CF963C60D900A13E5506CF535900CDC6
60B335D2A88D14AA376D4A4FB73B8DC989FAFA8DBDD5ABD7DE73EF830FFCE6A1
279ED8E0867DF1617176ACCF7D0C55E021E65441385489F0596BC6BEA905085F
89AB4343D4679A93B8989E62F36711FD6A12D1247B33C7699DC514B0DFF14ED6
3F6DFFC50D462DDC9208486FDF5AE6A61E0744373B969A6607779DD59ABDDD62
823EF6D66365C3ECC4052A140DF74166B035885292AD314617BD0BBE3C946107
780A99357374C8427FF0C1076912D7D73FD82F0938F7634707C7B68F9FD96939
27DB30400C8421229D478482AF7DED6BEFBCF34EC99D279E7802F10D3914671E
88811140B69E6246EBB83097C79458B9E28A2B9C26BCFEFAEB4F38E104DB7AB4
2FC5698BDB30C4AFB8A6451305C4C62BCDA262784ACCC5256B7D0B1D5B6A1A9E
6E97542D2AFB5265CECC994DC5EB89848F0000FFFF4944415487041F51F343EF
5E7A42BB2134183AA28E542895443F058DF08E3B17D1E30292315C54CD4AB3D5
CA885FA15D483097EE4211F9C883FD54B70371A50A19443DC8E9A79F7EF5D557
BB76DCC7DE3BCAE61489865AD57E20CC2B28FCDCE73EA7457119CCBEFBEEBB7A
F56A021BDA848443E172D11E9047F89DEF7C07372E8F0A816221DEE760E9A1F5
2C68883800E3B30D5619DDA6E93DFAE8A3A58AF8625EB22752F5EF8B842A9A8D
8168143AE9155DC7ECE5E62707E986216873A44FFB5AF8BA1A1B91AA7900EBA4
CF9C7CF2C9DACF460698DDDADE86FE79E08107DE7BEFBD717FE83EAB911C04D2
96A34A44C752DBF97E0EACDE212C8FB1054A83EA09F764A37A8438C117BEF085
638F3D362D3BD5507605EF470C908951B2FE2544152CE58E628D7A491A566E35
BCEB6E3B6CBBEDD65BAD5C2697B2E86A5FF4B52F7836B2D2DB1E9F1AC7786524
7AE1FD03A0ABCDED915708875E8F8BA07D8B5E0E95E75D04E4EA4919764E0606
1B0312A2CD5AA33E536BC8B49A6E15E8EBB20638E92461BA142DDD2CAFD87FA5
9D8BA87733AF4B026B4592C6406B6870C9C0E092667D695200B5EA59AE496B4C
779A93138D354F8CDD73CF43F7FFEAB70F3FFC2C4910832EDD35C0E22B9E3737
190B152E354459BCF82038E9A32DA155931C984FCCC7EF768BC3E25530D656A1
B2006208BD071CA26CDA820A3889EA82FAC2D47E52F62D3AAB0F14154F453C30
AA6DE9164AB885393149C69672C0B6C7ED44E6257BB3DE77C360971839E4EB50
BED90A21AD3EE38C33E402B2ED2CD36365293F586AC01EAA697A62376BFEEBC8
238F949A84549697A48C6E27BFC42334651AE5CBC625E9401E7EF8E15FFCE217
FD08CE5121BC982CB41D38784665827EECB82C6AC0871081805E1B11FE5B824B
A6D963F65D40E9280D4E4CDC8C61C1AD26F9FBC637BEF1F6DB6FB7C962342964
BF44ECE7B795EEBB66565149EBF79B6EBA493ACC72D9E4357D9B1545AB8772E0
B1CF24345BB87D5FC7095974397DFF1F67EF01655955668F9F1B5EAAD4D589A6
9BD004414006C3B89419E35F19C338328A230C82840583E42059403292115092
C8888220BA049DE510465D66C79FC240C390A1BBE986066CECAEEE4A2FDDFBDF
E7EC77777FF5AA5E09F356AF5E55AFDEBBF7DC13BEB8BFFDE5AA67F552C3131C
60EB4009C003C2B413148D315C76D965A79E7A6ADECED4D79257D63977A62850
BC959613987DE325026423BB3000AA072854AC0569C55844C459A2BBA9D98B0D
C1850B8E2FC603C52CEE7E4A2B370DB5EE020808B720FA918E970B645B105242
48081F2E60A3D84E702FEC58061828BC601F5C7FFDF5ECACC7A849629A6D2BCC
C594819A31730333B8A718959A5649D3485489B188E16BCC1E762CD96334B6AD
B6DAEAF9E79FA7794A6354C5277847B0648BEBC65E65FB704C0B6B9CA282DF40
42934163E674A3A23BA40BD6361E8788EBBC2808B436870B06E5673FFBD9DB6F
BF5DDE98E644E60E81879A25B9B97981409C511EB63B94F8795A8A162F59B8CD
B65B0C0C54E70ECFF1EA370B0E6B3BF334CC210EB1A1600762B89B48755A0656
013B9136B850C3E98DA13AB46FAB1DAA3F3C22DABBB1E1ECC4255F6A0C7FBA1C
62DA2D1F822E7B3A0EEF82C72E8A5B91AB43F562FB7B4475141C03CFF69F462E
69BBF55E01A71EEAD8DF3F54EB9B5F2E0D2671D947AAE34A3B2B375A7D8D66DF
9A971B0FFDCFB38F3CF2D4938FAF52EB141AAC2CB624FDAA452A71EAC48A2FC5
638B48ADFFC6009BCE0BA5220B612C7B12535794CC76BDA6CBC3AEB0AB829776
780AE8F652C0F2ECF599B8286A256135A34A346419FEE9350F587D1C19E68989
299307A88A062662A8417A5A1622167185C217F94E5E3064E107D195D1AEB1BC
74E24BE24574203DD55960F16563512A787ABD3CDE1FFAD087EEBBEFBEABAEBA
EAE4934FA601DE6B909CA324D0E2B376DEC23E997A61A457454DCE943A308468
2FF8B6B7BD8D989A830E3AE89E7BEEC1D79F7EFA693E146E0193FF2B5FF90ACD
73153B7213281C4120185BD9C818D46662C212231457A5C4BA30A5D3B1B27A29
DDCB698104C4F55500C0CC2E91E718959A90778912ED5D7C92B200B39115BCF9
D4347A3A15DD2A25ACDA68C20B77DB6DB765CB9689DC43C85B3533894391B4C2
213C1E38F8DE58094A0E1AB516CE210F3C1D623A67F5894935A2E7B9551886C7
5552553B10BB1C9752B8F23DEF79CF5E7BEDF5A52F7D292FDAC4DA0323EC02B1
BB7841CAC3EBBDFBEEBB6D55B72C56F97F7C934805C202669C675C41215FEC3A
6A3B8966BC78351508B8C281C0B7F05D1ACBF816E32E14437FF3377FF3C4134F
C8AE77455C447E3C8F1EE3F396658C0103296CEB7F5B2638E960053C68986278
4C5530814AA1A9224005902353D5433A6BFAC4071C70C077BFFB5DF53996E0B3
6969C60F692ED3C23BE9A493E06473F5594F812B63CE993E27F710C1A1587A0A
8A1D76D801A60655859A4EB2B935B722119736F8EF7A77C8CE0B4C56C19F1557
AAE976DB6FB9ED765B97CB715FAD0A05DC6AFB6C029C572A608C672CB0E651EC
548B977F8A690A98B7C8F01BD4AD179C4DB632843F4D03B813B04E830E0EAF10
2DC2144D24A5895292E3F7528C6BC2356F64793D8EF04396C6594212107F9BA4
99ADC3D5E2523008FAE7F4F7CDAB56E6C46935A899BE28AE35B2FE567BF09557
DB0F3EF8FCC30F3FF9F8632FC06F539D3ACD5FAE882DEF894DCB0D4939F5F553
E2C615405D5724D7F1311ECC134F3C91DFB5DD00199F13D546574EB74B016B32
2D8A65C6D5ECAA69ECF28073038496A120F4923445AA58DDD4FD63B7B4D41FCE
1D01A48423B00411D78438BAF2CA2B3B70A25E0F6613154A4A47454F0CCBEDC0
7113A549F5A3500025D7D5575F7DE9A597E25470B26811904A82D160F523B34C
C5B6275DAF71B2225913474E259E43C5BD55948C55141EC4157C49ACD5A1BEE1
C0E424A9E79A2C410C89993645C38436A2374CE798F28E2040D57E1D77DC7137
DD741303989017F83CAB235434C94D8311EEB2CB2EBFF9CD6F7AAD0BC600D3FE
85175EA081CF740006C07C3655207EC03C74C5B1ED1C76111A40CCDD78E38D6A
18D72E78A125D06545D1D797C487B6D87DF7DDEFBFFF7EAC1D1D419AA284E6B2
0F1D16911938095C170652AE5420B720DBF0E471D0BBFEFA41FE4AE936263B65
3074EE1574B5A15D4A25D5ECCAACE14EE06C58A799510A5724861917C2078857
CC035C16FA5B6109DA588AE860EDD88289A837EC1345B6BBC256CE10A7C827A0
7B07FF0F3E1F8D1561CA7476F83373311815B728658D5A3513BAA59BD24217DB
8C4232471C71C477BEF31DE6C299E3202E89A5C93C08ACF9C94D8F0A49AEB8E8
E748839B24C69C4FECC373CE3907A2848E11574D454454ED4C1C7054AEA81224
3B15A3CAC4E038E3BBDBF6155D104586D069D0D442550D9B8971F2F919622F6C
F093E757CD43590069C9FDA7BFE269ACC2954AA95E272628E91FA8BE79A76DB7
7FD3D6A1236F4A05EC796A030ADA050132112C579AE68CC311A7520E2774BA02
8ED8A4D9B57338BFCD7A1EE0D67E93E71D91DB016E79E55B0EF8EC56948C2729
147056F28E719CA42D1CFDDC4D625430868362F6574DA35008148F4531B4425A
AE55FB6A831093B5EA7029AD796EEB725F9CF6B7F3C16636E7D53FE70F3EF8DC
430F79058C17513ED4880C7A51564F57C00AFE8BD0948EA38D3CD356CB0AD658
AA58EE55463264D34B074BC6F692FF829ED801D86694F294E89FF40261D94CAB
42EEE412C6518520853F76EFBDF7F2E0CB8254B658DB46B887F3CF3F1F12153A
1BE7340FD47E5055382FA79C720AD331F2DA677E300294980363DC89428A7106
91C6F1C3424467450F60C91442695C119F3CF4D0436FBBED369E6A8A331E3365
191938627F3711ECD9A24357340090AC71A64B0FB3D19C119ABD78E08B2FBE98
E48EE4ACB071480C5BA553CAFA08C2CA5FE9C6E5A1AA52554C94447C7C3147B2
AF302EBBEFBEFBDE79E79D4CD06248B82F3C51C61FC89FF2F9CF7F1ECB6355A3
0D49B9229DACFC9CE0ACB3184C8C9AB210799B6DB68116FFDDEF7E8745948767
7324B6468B815F6EE53DF7DCF3B1C71E83E7A4ACB9B50DBBB02A5C1D883C7653
56C32595D0F10334C22C588FFD7F7035923DB9A2F992C23E5897786AAF2D76BD
C64240E5431B25531B705A8A738A69CBD8ACFC3123A51C9838405CC11342154B
9A4357D8ECB6F4222ADA02E6D3FA86BA2218631745CE9C64317F509999AA18E5
6BCE526EA7A2F32BAEB8E2CC33CF4C8AC68262AC94F81374455A8DF07555E83A
C3DB6CED3067582453D35458D3481019ABC31558864D40B352D8081511E06344
02AA03043E73C619675C78E1853CA7AAF79030D159EE2A7DD1F02828E0169F7C
F2C9F95FEB96D6EB9517043E2A6CFB2BA91F97B3DB101EA49D35FEF69D6FDD7A
E962E83D887A3601F46A29A46F5DD818CDA2D9A5829F69A17AB9919465EF1CFC
8E10E7A16B17B1884D004FA855FDEF1F39F5A1DA145F8D9B49DC86F64DCB6D28
5D0FB3F271E6D81347A7AE845FC37DA21256D995CA79B556F10AB836A7521A4E
E25A5CEB4B925252AAE2A88D4F9647D6458F3FBEE6C1079F78E2F1E54F3DF9DC
FA751BEBAD1001EDB06DC46452EFDA45849ACEA8D87ABDACE274453F531E7949
5789771E5295F8CBE462D18458E5E3A23FB73D35BC0285CF4E3BEDF4F4D34F77
251DA2A2265B45BDC2CCDB0A58B1DB3295C6DA1F8546E4F9C8E0E01491CBC5C6
78E82C29033B9B07CC4F9F7AEAA938F0A4BB724613B8A20C9436CB35D75C033D
FDB39FFD8CA394EBCCEBCB816658CC19A78AE787E3566D32AE0C310A91AA96BA
AAAFCA4D233F2EB9181F25E2216E48F98D6FC1006164C39A458A69C07EC74956
E8CC19C89CC422335B626184D0DF72CB2D1F7EF8615C8A8E1D9C0C324E88DF84
7C8132149C019B1C7BECB1975D7619F5041988BA6EAAAD4362C22EEEEF5EEBC5
C008BD46523BB1107E7A4D24D79E32AEAB1CD3064275C66CF3DA681A58940696
44BFB20CAAFDC514B1B72EE39604F51C70C00137DD741333E5F895AE8C7547A8
5939783A4C18C0D9679F7DEEB9E7B2D721A173160A679D1EC6DEA9B474D4B9C7
302DA4D4B18C168AAA75B5639266926D64AD78AB7D0503A16BC83682FC93FAC6
EB9AD2BB24DFA61B4DA3B8570E322E38D8D957839B3F2EEA92896FC24E639BAF
AC20C27445DA09BF1E77DC71175C7081EC92AEAE9D6CBDC72593436C7BCF11A6
8EBFC2B4276F396E8415C45F89F9E4A6C53BF80C9BE1B8D0D69A2E02BD79DA82
38A7102674084581A70C972BEC5159DB9A7F1BE2867DF9D4534F29D3FC5725FE
F4F99440B759B39E843F2E8F3A53D117C5D9DBDEBEEBD65B6F51AE40DBE57151
96D60AC829D7F653D1EA30B26CE24292093BA3028E9D363FBF52A0C7238180D4
772F346F70BE1B84F7925DDBB74B82022EB592D4F9BE4995B8564DFAFAD25A25
A956D24AEA0DA6BC04DD10A525EFCA57AB7D95D2509AF44301C31B88BD02EECB
F3DA44BDB27143FAC4136BFEE77F9E7AF491E7A08047D68F36825D14777A0E3A
3655B478F5E9442EAF47013B634BE501FB499D9A9946E00C910A01A0168791E9
7DC7571741108764E3409801EC1378B1575E79E58CB961D5AA5188E11D084686
F4D42282B12E0C832282F526A441647A98993B5E99F160D6B32867473C328D30
D9BE3D053A9F19DAE5BAEBAEC398C8484285442A5A4D04E16A32575924A346EB
3CE19169F2D305F0B160041B6423A65794E5B4F42FBAE8A2D34F3F5DD4A0D329
17484AC089A018D2A8F0754A3A3E8832E4928C5D3FE0F5F77FFFF750B11061AA
6C911B27CC27E78A15D63C7552F074B37841CA650C9866110377F65E56F1B3DB
233EA0DC03A3DF9679D5BEF8BCAAE875460552EA3162494DC36797C148354C4F
85683DAA015B45CD9FADCAE150590C83B98D42FB5581B30434B0E74D55B349D1
F4D7BAC57C64C651B1C437DE78236B7C19DC86B83FE18413AEBAEA2A4A497C18
EFF0A1B82EB8177EC5DDE118C141944FC9C7A4D58CFBEEB3CF3EBFFFFDEFE1BA
110C4C8C1E9BC23208A638BC458ED83CFD8C60AB7C2AEC59B9288B43E10A72E9
5983C1988A9AF8C238989EB3E70B3A8F65396C2D60099F31D5B06B61F8520C31
A74307423DBBF0A4745889CEA371439882B53994F8A7C14E09A8201BA7E5B4D3
4EBBF8E28B252548E9EC02A93864023E79E9A59732CE869B424261902C88E2B9
23FB2963CBB4DE043890387605D6C119774775C69662FA231FF9C86F7EF31B15
9BBDFE97258EB0B6C82C840F012F880F972BD5D25B76DD71CB2D1757AA89CB1B
7469BDD86D8522D72C68CAB443D42335CCEB649DDE47B1906E3CF569AC33A57A
0D3392885F57196E16E5AD70B55694377DD8396DC21448D276C9D363C5FD7DA5
FEFED2405FDA57F3B9E7323473B9E919A403922BF595C155DF00D1553CAD659A
96CA83B9C33CF7E1303DF3CC9F973DF2CC430F3EF7CCD3CB376E18B70AD84A1B
817369EE3B13B17F3D0A189F5107F4CCB46C577F3C0825212805C4236685FCF9
8CDF709FAB23AA2B626984E9082144C48CA4B1CDFADB3032D40A3ED005F8C245
6056B2EEE0DA6BAF8542B4581099117230F42DBEC9334ECDCDCDAF06A3DCF63D
15307116ACA975C1BFA4918E9FF7DA6BAFBBEFBE3B299A8A90B41D7284B12915
C061D6C84CE48A1E7354811CA8D5BBBA2F035CCCCCB1570CEE2E5E3A5C1CE215
1EA45C7B86BBA9F2093FDB7DF7DD7FF18B5FC006A7514FA8886D2343594F34CA
D7BFFE750814F5FD982E58BB90F41C09713782A7297825B75E2D22D4270A9B86
CC4D144CE4CA50155357E20D2FF81970F88E3CF2C8AF7EF5AB7022B12DC8AF96
4F03D96AD88A9970A26415321F8335C215F03E330B5C3B28AA3BEEB8E3F9E79F
E7386121DE79E79D828CD2466306349ED61756FBB8647A4DBB6027B1C912EB88
5C40FCC2E9CC4D87577B9219F6107B8E6DCFC7C864A9C80AB3992BD6547E36C3
A41A4C6ABA04D2D5B6D53E74FE64C05A46560B1EC6E05D30A7B815B9572DA6C3
CD648830C6887910848A794AE2380883C2786052E0FDAE8E2E2E5857B294677C
61A5A0F6B85BA04A59428D9B5234E0FA37DF7CF3F1C71FCFAD85FF69B769F732
94424814B3DAC4FCD36A61B760F6B771C1F0C2721C7DF4D10A81587A1C39F45A
05314CB98228062B45FBD815AC73626368873E921EA6140C5622DD1854B34B49
8CBA8D4F2A07CF420C5622911EC1F58E0CF57A7124B4D119399FB1F59E3D5F85
D68FE60C0F6EB7DDD2C54B16546BE5766B2C2DBC586AC9243C41522E09D42635
EC4CA3787AC09B147014AE1077146D71DB6C93508A78FA3AEA3976C134C4CCB5
27A2BC1E258DC4F74A8AD2CA68B51CF7F597A083FB6AA5FE5AB9160E72A9E2D2
524CE110B924CF4A79967A773609FAB7D2DF7635E88BC989CAF2E75F7BF4B1E7
1FFCD3F2E79E5D390E17A005EBA15B014BE3AAC46316828B5EF3C97D65D98893
691D06F7DE7B6F18582C2723C5B733208FAC607CE287C9A7A61D6BEBFD6C97EB
AE531C15E4AC743378F1254B964073E1B95883E042C00C020A62993EE7273FF9
C97BEFBD97FA554025CA011E28712A2887A8CA468228A95E670B414B69C12525
DD3F6D46D26530892B4D664F0EA52A2D5C7ACC4A7173F47A720BA2E3AF975C72
C949279DE40AB78C40535E87271C1301478D9C8E0A0564861E96F5FE621493D5
EC8CB1C360028D6EFDC9CD5443A20A60B152501BB1A6908415A42DECA2D8E6DD
F574743B3093048512E44C1A67ABD8A480C9F32C0C2D864144C02C1BDA8A758B
99E2EAD86836FD542D04660CE3C160A0350F39E4903FFCE10FDC1FBA38659F9B
49F168895DD1860C7BE65FFEE55FEEBAEB2E8836DA5B14FA4C4E73C559DA2B37
8B66ACE09110DFF82B51E2D4A3F492C588C2D205C180F175F557E61EBBE9A69B
A08D0809A4B2A1138C17F70C968F8397EB8FFD864FAA208DF6229120B23BA717
F56A1E1855866EE01E608CB70BAFA16038C30C9C37DC8295A9987FF8B8471D75
54AF25162B055F4C6148B22B3C43C78209F256D17247CCA9B466E8FDB3C588E8
A67959EC93C58B173FF6D863E27577A6AA84470C573BE79C73CE3AEB2C1C4F7C
1DDB86A7158F4F3E326E42C12DF3A24E9A616D7568E020F17925C22DC3AB3309
2F65F1D94CC585E22E6C27580930C75939EDDEC88BF3C0834C1F8310EB5E06AE
F59936DB6C01B4EF8285C3D51AD458BD14274CECC53C1141956646AC76210666
0C41072A2B267BF943577C251429394E4B08C9B83498A7AD766B3CCBEB49EC15
7092E695EA78090AB81AC303AE5593FE5A0527CFA3B4FA535A9F30147DD38656
D46EF978B2AF4D2A95A180E1DBB7DBD5C97ADFAA17363CF9C4F23FFE69E5F3CF
BD3039D16CB4B3762B8FD344989EAEA23551F4BC21052C9808251B6429118824
7DC3BEC2BAC06AA73A548286A7801907E209700552EB33B8F5C31FFE105B0B02
0DFFCBA456EBC32E372C2A42177C0A3A75707BB0A3F0311E673A5A5C2CDC9AED
B1F915D8C12B57AEA4E025BC1937651586D0AF4A3D1059429AB0B7BFFDED8F3C
F208A5714F054CAE1F86ADF6DD775FF84934783923906EF0CC6456BCF9CD6FC6
C85475AAA26176C8A151CC2998DE38C2194B0463BDE5965B0E3BEC30351256D3
1BE17148AA40DF88759F8C24F38EEDA227810041E24C60B68FA2840684AA1559
14A4D362E7A1AB305C4CD14AEE32399F16BDEBAD05C7F5E6FFF8E275D75D77CC
31C7D07181C8C0FB7088B59CD61C8B8A56B55069584B71537771844D3DA2B94D
8468245D74DCCE6802D662624D2D70117FA59A57F0B62B4DD02592F00ED301CC
AD62CB9E76DA69A79F7EBA33754A90E96421E58D0480A40D284DCF318BB18833
4CFD4A8389FCDEB6E33DC3A12A54253B92748033016149070645D9E85031D5AF
7DED6B9C64268FB5D5690188324270AAE9A299A82EFCF0894F7CE281071E80A5
B56CD932574079390FD8BAB43CB4D9E4794364E0465D8970FB6268EEC20B2F3C
E38C33D8031C8FCC325F068AA5B12C0928BF4BDB8B55D1DC420CC9F000CA5EC4
35B91CCC258B539AE430B224E895E26A2FBFFCB2B5EAF068575C71050C08E1C6
F945380DD0D6942716FDC727B21805B151DA683FBD1C91C2524A60BA20160866
C903F3CCFFC103A6B8C00008B3A7A1F6D714B0FF6FCB2D97CC9D37343C175B14
276E0C0A98C19224246EA080FD87A24D5FEC3AE00A414B07D3F58D84B44A7447
BB1932FAC19D5F3CE5653B8714CCEA2E6FB8A89E96DB699C95AB93A534106675
FEC14BF7CDC84B55F251C3F24E5A4D8862AF56FDF5E2403D5BAEB55DB5D5ACC0
DC7DE9A5D1279F5CF1E043AB963FBF4A0A384AE230F918D51490113B5BDB2EF4
EE75E78055AEC333A54EDB165A9B17CCF33631DCE5E7484ABFED6D6F7BF8E187
9DA1FA5749AAFA31C850906AE4AF18C6CE3BEF8CAF2F5DBA941DA369F72B01CA
17B18414CE8A21B9A98DBABB8A3F597AA0C724333C03C3F9EC4C587C543C3FB3
56B23109A412A6372DFA49D95DC5733EBD47A1966D3A5BBA5D421ADA510146EF
AAF88C0DD7B6AA5489818244C0C1C6F0247D14706F170D319833A70BC2FE7D6E
D6D013135D2C9CE08269BA313904E58A1B48EE32C3E39807E85A667345EEA19E
073035BEF18D6F741D54DE9444489FFCE427EFBBEF3E7AE1EA5CD46B9CCE885D
C566293A095E93CBA548299322F830D4DE934F3EC9081573A5CAFBA6D37A35DA
9BDAE02DDD5C9677E3F1B935F120FBEDB71FCC353B6FD6A4650A87641DCE20CC
D91C82BB85C632E793A6860BF103526E71CCAC55E55C6154D809045B91A19A86
2A5D436E9EEDB7DF9E4568CB972FC79F6053DE7EFBEDAB57AFD613D9A202456B
34D5D62E71C11F251393727E0C4FF13A33F606507C5505C1B3882D4E3531562E
448985448356860D1105EADD3C5449E16062C2F126BD467195E0BB6454E0396A
9BB6924C48F35739A9A2E114A1988DDECB98D63167761F1F238136D533AB9F59
C59B17F4B40CBE61F21954944ECA8BF66B6E5AEB7567FACCE811384EA2EDFEAA
C4EF9A4F5B21D3B59AD35FF45A6910BCE94DDBF4F55786E64001A71313EBCB64
714B532294635E70266E4B5704576650C02E2FDE0F9F89A5C32CFD72186DC816
E759EC5532DEF139E0461C3592520B0F54ABB5E0FE54AB71AD12552B69B552EA
0BC41D5119735E4E13C881A8516F43AD84798E2A4916A5495AAA6579DA6855E1
22AD7969ECE9675E78F891D52B96AFEE28E0761E75687D9D1E85E7144B8FFD86
45A14C7B432168EE2E3653D12E2234819A825723AE05CB7DD555579D75D6598C
F110E14F038E8B628BE079AC2064F0496287B9FF45FEDAB5E5B8EBDEF9CE77C2
31C590E0265D7BEDB5F8C0A9A79E7AEBADB7424E72A50811B02DB65C30E83124
5C967C93F875BBEDB6832C65E44C9604358E9503344FA3D9CFBC1A21E067F622
A68083E28192B755A771D167869285E609D3C672BC9857B68EEF74EF8A5B997A
82D12706CA9CE92EEC0AD7810F403F9B3FE745E104F3D0620A7545384B2008D9
47B65ADC9E37FE40CB9D76136683D1665912B6156B6C9AC6D85831DD29BA14DC
64F800BCE1030E3840C5B8BA9DF246AE2064E8EA69D5CB42E7DCDA3A3657A810
05E139B1125E342D717D167DB19F3C7933700571BEA8D1AFC2E3769CEC384980
BAE536890B82088C8A05C1A472B434295DB5984C2ED08967F08781474D26558B
E47217E44DDA1D627A63784D5F0BA21E080B38E8A083EEBEFB6E0E492B4EDC04
B7596E180652D3ECBD2B17CE97C2CBBBEDB61B940A86AA060CDCAE74E8717D9C
F34F7FFAD3175D7411F715A7222B7A45F7E29CC98BCE48127FB89A38B6989765
CB61D5DF738665EDE116C40190FF4FD34571661D5CEE1FABD284D8A45B10179C
7162C7141652E61AEE75C411475C7CF1C5F81873CF32D7B88EF8FCE5975F7ECA
29A7C40539972D82E046A5BDA58A8E8F7DEC633FFBD9CFF02B659F5C8D59C053
B30837C5B7C53234638AA178C52A56D965971D2BD57460B03A5D01FBCF854FB7
0B5564B34B6EAA073C15841559056C9C60271DCCB83415701C95FCFB1E81DD74
51530A78A01F2E515E2EB94A09BB3DAFB0FE384D5D292FA5F052CA591B8675B3
3ED96903552DE554C098867A0B1332F0F29AB1679F59F5D8132F4B0187D60E1C
8FFFCF1544FA8C482D58B08065816F54015314FCEBBFFEEB3DF7DC63175A721E
173FFDF4D3AFB9E61A02FB79966DE4CCDAF154E4D812F822C4A6B6B7F66A97D3
EC0A00AF12043A5F62A526591BEE0521491096ED0183CFB33A239F4AF1C13ED9
7A522A5A215EF1144CFFF1913B2D3C9965518E9377D20347450D00B1456E6AB4
212FEA5661F062405C155C1033B2CF3EFB5C70C10551C08EF3A96C644C9512CE
B01AB1225B6E4D6ED8492C639F642B737E046D61008466D028EBB5F0100D984D
85A621231832EDF579B159611878A2EF7DEF7BA4DB9EF1F34A5FB12302F6C1AE
BBEE0A4F8B0B0655CA2715210023B77834E156D418D1996A2E09448909EA1226
567D6D62619A4988F078779D7FBDB86FF2A2657A570F796D1DCEADA4B3941FD3
FCCED479B3F73B9798C8582EBA620C64BA21628E78696604F302B346D57BF2C9
275F7DF5D552CC0C02F3A99537E245E87ED18987ACBFFEFAEB5DD1C7824FCD3B
0A982D260182E9683B8A45CBCA4757F44055B48D63FB3F087AF5E8B53CA36E6A
7736F1185806B1B4E8702EC7743A7E44275FD00A3CF2B1C71E7BC5155740D162
47B1904F804CBAAD279D74127B2A581B451D44883CC80A2AF9C83041E275DC71
C7C139D080BB6AB5E52BD3F7E596C0C571D03036F2FED8CE898C72CD72F4F843
5C10ADE3FFCF7DEE733FFEF18F31990C7B8AA445861A7B45D059176E0BD382F1
E067B54025A93583ED240311E8BDF7603A34BAF3E7CFD97AE9160B160E954AE9
C60DEB13E74DBA7225857EF4664ADEA616D502597C9945414745056A70AEBD7A
A3B04E52464773E1FB3A6220CA8AC0A927E9F01A2BF69D91D2247351232DB7CB
A5B8529AF0EE6EC5954BBE6F715A307E94CAD524AE440EFE62D26C649B302291
23B10774EDE868D66A545F7DB5BE62F99A65CFBCBA6AD58BF5C95651071C2B12
4BD9257218866118E3EDC215AB10C012945AD3DC1525A30CCB890E963752D374
45ECA8F94440243CBC332D7175585AA6A1ADA00CD3D1F23A50D22FB4FE996D54
31BAE88F98EBA51DAF725E254A683892A3829B3336E480AE08F871D3FAA8BE2D
42E8A286E7F7651E5234F02A5DDA97E68C62D15DA12AFBB4C2B8D2677586D55A
B5D84434582CAEBAB8F0696977335E21D56EF96E5CEF6812EF65590818849C25
047DD555579D70C2090C7FC545FB815EF59AF23694788641B472E54A1A1694AA
4C04F2F3679E79E65D77DDC54A59E60BE3D081BCAB90DA46A7455EC14565CDB1
2B622F44BA4B0FE984776D38EE4E36FED3D664B9735634E4A2E67345335D4155
6D15A0E2AB027671E7E0EEEA8B72F3CD377FE94B5F621B6992B0532CAA4F1163
096ACECA3BA6A14BB1B5586343A0CF37051EE6C9E4F5B9FDA40370118EC4426A
A58CB36994759A1F9BB6E84241BFFE17CF6432536373E18008AD77A16A5666A5
20DC78C67DF7DD1773D87577458C2453687A33A401ED6B5D703A9D94835D602E
57A09F585971E8A187E25E54934B972E25EC9CFE84769AF53C343FB82F93EB5C
7D5EC7B7800FF106575025A8475B3C6B979B5E2F225F74BEF85C18CF57BFFAD5
C30F3F9CBCB35C748AFE1D77DC113FBFEB5DEFFAE52F7F49B23366D0D43BEFCE
3BEFDC6BAFBD701DCCC92CAE5BF853A7BBCCBC79435B6DBD64B345C3954AB93E
391EE7815D01AA2C0B68C42C745434F487996998261474D7D14E1DB572D4A580
8DB6CE09D1EA58A28116040AB80CB716BF25CDB404C737AA9426D39283562EA7
799C7836CA8ECE8ECB81141A1E7054245502B628FC8F4B8D8ED5378EB4204D5F
FBF3E4CA152F3FB972FD0B2FAC6ED4DB54C0BE2762C801076E6A7F2EB0C1283A
18ADECAAB6B2F6A533B4F38A48A992C7226439BD5859B8C5B7DC728BD830C462
A6EEB47C47C1125754092BC124F7803151FA3969EFBEF27A71840A5B32978CC1
1C7CF0C1AED05FF85FB483D45C79C1574A65DFD5799684946A37C2E34F3A1A1F
49D873CF3DA10318F0A11466774F81BCA959F9B476966D20EEB0C30E7BFCF1C7
1F7CF041E23FE9DCA8DF19D1BCA49F66758A84B808896CE0546245D58AB2DFE3
40222D24116D1C0BF061DDF42C07C915114561E867F16C684453E9C2573EEDB4
D3E2BFD617938FA627923942542A43760CCE3381413144602AAFACECDA74D013
93E2582352B1E0F350E1575E79A50B4EAD3078AAF7E0769FAE80D97E8A311935
ABC7BC4DC7964360EDB4D34EF7DF7FBF33840C506FF88160286D7A9B53604005
77C138E9D9E3C49234945E3B5BC211FFCCAD4C7704B760C1D557BEF21578C3DA
D33CC9B6ACB6ABDC56965C1C989868715F70C105B80E9FC83663B04E9533E141
FD6FF783F53EFF0FA14ED6FF11CDA15A40CD338F344B9C992822BF0FDEE4F2E1
F4DA82C8AE9D8C77D497102F954AD390A29612199EE054AA9FE639E591A71081
1667B9B04C10D5DC7705AB290D54B06B7B789373868286561DFEC7421C79E491
2A0E993DA5A215D7A6B258B0C4F4D256C48ED0598643612E43E08A6143B32D29
CF8B0B62C24AC55E000B67147098F04128E0CD17CFABD5AA59BBC9C2DF38F1FD
8003135698B768D317AD02B64A3733BDB352E68FA980039CABE32227AE08572B
6D192CD110A42E27B18758A58E0AB802BD5B6AB27761923A284DCF4149DE577F
B9146E5B9EE19C92992B342A4ED2760E15D25EBF6E74FD48A3D5A8AC5BD77C61
C52BCFAE1E59BDFAA5E90A58202C9B357306DCE48C2DEB0A8E399D1A719263A2
601B3DF9E493F42F99E0538499E04A760A507085DE33A5318328B45C052571A6
DD21298AE5987EFAD39FFEF18F7FCCA48F1DB6B61FBD9A34F456C7E684C483FD
0A3B00462407C6CDEF0A6EC4B8A055E9C2B72BCF4269CF31F38B0412F1797966
B7DA6AABE80B5FF8C277BEF31D7A42CAB53075445F937A5B540676F4F6251312
1FE6C1E86205D319A02B49B983C16DBEF9E60C172B092FAE133A28DAB296921B
8F41566B429A498D49C38711B35914A47C53F93AB3F4DF55F8D18534C3AA55AB
3048F179CDF8EAB2E9647641B4C1D5E662E3D1A81A5534E28A06E364EC9B31D1
C869E19ED35F757DA6FD38690CACD9FE24D3C5F7A2458BB064D8E8D073AE30D3
84A852E515EE881D4F6E237C809183B868CDAB9892E2DEBC38CC821B6EB8814D
E0A9B67990689361E7E1828C58E04D065AC42125F75DA52C0AD6294DC875617A
9BF11255A5BB829893117EAC148D1B015F9D8992754DAF9D1F37D57EE7F5DF28
D847D4D9B47C4544C52B330E8FC727B38D02D114343C32BDFC6F1BC1C652627A
B1AB950EE70EC49638FAE8A3616853172A4C6591893A89CE58182AD952BE6397
5D7679F8E18715D696C853DC8B5FBFFCF2CB4F3CF144D52010222B5C9B206F04
6ACD1E7F56D2417556D497383E2C67178E9A6604B4FB75D75DC7D69FBC9D25D1
744552869C421800BEC84800EB2066076386B3DCF1EAA080B7DC6AF1E225F307
06FADBAD866B07110CE1DF6C4901E7C99476BFCE647FF5BEA5CA8A3381B036E9
E04DD9E28E1A7605748BE95F28E0D48718E03127ED52190A3829973C5F55EAE3
CF9009ED282779ADF7C8B1F8504691633FC42834154EAB250FBEDB38567F6DED
86919166DEAEAD1F69AE7EE1D5675F78EDC517D7B49A3915B067EA0A202C2A60
6BF8CADFB0EEAF3535185CC10184A86707306E0FE54AE971292205E97AD45147
9D77DE799484B679A544EBCE3BEF8C0DF9F39FFFDC3A18562ABA42679301E66D
6F7B1BDBD8330C363D821B4F65D3E3438963D8F6FD7345ABE319314C9C198D93
347FF88052967C406262FC11E021A7A275C101E74745F3C4AC38F974A607D0F5
C0422AA6A6092E736F8C860BE3AA2E40D0C4580F320CECB1C71E3FF9C94F9C41
99AB78835B1632944D9B215221AAA0EF61D4FCC77FFC074BAF5C11647385A333
4B2EA72B30CE21CDA2B0B16FF0F8EC76E7A61626CDF89A9E28D5D487D33B17CF
0BBB47B2184BC0849CB8A69D09B75A11104D25FE66092343853062945F544768
D5EFCE28BE999E3CFCF0C36FBCF1C6BCA826E25F29A933D3B81E4702861A1651
CCC3B81A1BAA5B05AC84C5F1C71F0F57CC15046CA4C526A4CB059A8BEF7EF7BB
471C7104E90C610C2AD1CEE560CD95ED0AC51093EED295DA14ED174D4BE129B8
D33EFEF18FDF77DF7D3AA56E5A7FEBE9D256AC264C0B450520FF8D864C59F0E3
0C13AA90D5F134C67F490D9A89981C6A2CDBB3AB2B25C177CE3EFBEC73CE3947
7764FA53651B2E1003697D6DEBA13C1012B1B4970A95CC1E9423B46565D40BC4
4743473960AA467C80813EF523C1FBCCFAF31031246E0B115D6F85D74B01E3F3
3BECB0C3A38F3E4A4F222E88DEF0743802C42B70006AC7C43612B8BB6D4BA506
C90C3BB1C45966E2F45770F73B341A73E6F42F5EB21914F0D0D060AB59CF0301
56E6BB28F8AA6BE680F3644AB7416760B75D8FD979B53B7C9354B1495AB8BDA1
2543385639D1D1C24EBBA080CBE5D43784485AA5720C0F186BE819A17D44BB19
7928982F578A42FC1A87AF54AA24313E1C85A68A3E4F9D26B053DB1B4727D6BE
BA71C3C6B6CB21A81B2FAE7EF5D9157F5EB3E615B8CB8D56E0C13621685798D1
360338FD0409EBAA9DA669DF75D75D1F7BEC315BBA23DC133E03ABC85673F00A
12DA38DAB814D9B2F2A9D5445DD1290E4FAC769CE61915B0C402041A4628C4BE
2B12DE344689CEA1436C83C15698584F9D87D7153CC4785876C4A2D140B917E9
C45E71C515E79F7F3EFE86A3C2CEEAE44397EB69E5D7F417B91168698A84D299
64C06EBBEDB662C50AB667F9DEF7BEB721BC9CC15229F4272E27677281CEF019
512B881D9B60C8B3CE3AEBB2CB2EFBC0073E70FFFDF7CF682B68A59548880A0E
94BFDA6D491BA28BFD60C6974ABEACCC853CDA7FFFFD61A1D38B82A8C26CC4A1
F4169F51A742CC069E8E4DE6DD4C2168CA65DB88C9B688811A83D58699B9F3CE
3B2146E9F94D8F3FEBF013CA887B6178C4A130B767BBAB52D2D9082A97789B6D
B639E8A08320F7A7DB0A7CA94B317F654D7917F314D794694B5E9CD87DDB1B47
B895ACE8302A1AA32E8B3536BDED70CD2854E6581059978098653F8BC285F3CC
9EEA3492DC1B79C120603648AD4A5CE1A0AB7102A149C4E2E15E38809837BECF
78834566D8E5E35488E1929164E6C50922C5B2DAF012BFA8C82DB114B4ADB9E8
5C5C1283B8C28364EA1723A4CF4A8B449EB132C4AEC8F2D25E61A2049782850D
FB80382F3286BEFFFDEFFFD5AF7EC51B59656C5FBD42D0242782394220184742
830C9FB9E4924BBEFEF5AFB3FC8C3E5932AD9D03468B2F327B2284A9C010BDE4
40B8575EF0CA55172C9CBB68F3B973E60CB9BC4D054C0F580AB859504BE65389
86A2A9AF4D1BB2E58ACF143898B45324A3F833D3C074883B54C171C93784C027
E10197E2728918AEBC94C043C6B96BBBBC93EF850F1CCCDF2A953AFC589F474E
5C9E95E0E68E4F6623EBEAA3A3ED3CABAC7B6D62C5CAD52B57BFF6EAAB7FC1D7
DA79D2CEDA046179CF3B1C17AB802DC1809D315A090CC650E412CA8417A434EC
6FCA496D2492B8E14DC85B2C31C497DC36EA086E33B1A5328E026DADECAFAD1E
A6E2645894207CDC57911E372D04EDA6F6D2A60EB2A8493EB2EDDFD3051F9129
253E86EBAFBF1ECAEE4D6F7A13B62BBE2B8F5F254C185287C491B85C85B05CC1
28C407E0F9642CBA57D791C8703B330947839AD85AAA8DA8A0A1A7748B8BFE04
BCB52435C37D7222E9FB33E0CC51D182E05CD08EE0B055E222F4D0F417F1A20C
72E27F3C3E216DBD9E4B2114ED00A6317A1D540A20016805BBC803CC5D9155AE
3413B15941D52DFD171B4280E9202CB18FF1D9F108DC6AB2126C3B29DB35D22E
162719D7C1873121F0839948E68BC2CB6643BB6005EAEAD8AB72836706BE3E0C
2366EEC505414DA0AD2CFC362796B4D5D8A03BEDB4D3934F3E490A0E3EB85A26
6873AAB44099029E220B7784FE38E49043CE38E38C2E1341C7A6D77EA6E5AB59
22FBF42C646433BE58F6CD31B78A6E9E4A19D0D2E283CB4714C0986C6BD6E4EF
DA0F79A8FAC5C452CDA8910B4CD2F3CE3BEFE0830F66AE97782ECE273749170B
0A2750C8478A06659DE9F542B1611AD53D42A789C511F830F534FD336209E95C
AA35E7741AF3371A4E7005C682B810EE31DA1344F6D9C83343621232E44CC01D
6FBFFDF67DF6D9E7E4934FFEE637BF892D2D922F02117AC981803FCD695B6053
0CCF1D9CBF60101E30741EBB2F786AC856BB4B013BE3E3464529B9BC43AB8693
BCC48B50DDF2782649A781AEFF4CD46997C45FD38420ACD01ED8F744CA4AE51C
AE301DDC246DA750C051CBF718E6AD53E7BB1E79999CF9A687790B4EB3078E45
7D918742432C47E3A379BD11AD7969ED334F3FB7EAA5756BD76EC4E532177AB7
94E2B0273B0A58D820B92EF6592CD25B95DCD47FDCA8546044CC59CA7A5E1007
618F3DF6B8EDB6DBAC24E1C7B09F4F3CF1C4ABAFBE9A679C8791661F854364D8
152516B887F9B159FA0A73C388449641665214C4A163BA33859D336E5D0A0D35
7F531DB00E0BBD2F88C1BDF6DAEB5BDFFA96BF8EDC4DAEAB5ADAA97495496C72
04769DA22E7B5CB592EA41E10AC51C056E45F62CA3FDCB6215EA09C12BC87FA4
3224DBB08C363BEF053F0F3F4346C3B8A057AD26AF1CC02CA1421A479C5CCC11
1D9459405B34B8E482280AD76B21295E2D894F01DCF0AC110AC228EE4DB09228
2CF0A70F7EF083FFF44FFF443E4E9B4AB1AA82A2931D66E86A908484C4A4ECE6
C1B9ED25F224B209DD52A32E25DDA763E2B81308A06746C042850582B0D29C7C
81DC330A00E268EDBFFFFE32F508C7BFF4D24B4F3DF554C69C99B99991BCC219
ED2BDA13F97649C1BACE37B14F70441935911CD43670459CDFBEA317D7451E30
1F195BE58DE6802911B8BDB9D599947253C9AA483D4FD405ED12CED52DB7DC72
D45147B123829BC903D6FEA170A158A4FD4AFBCC368469176D9E6D1A456C56CC
14F004510FF1B2EC9DC0C81B072F1F3A2F68FCF0C371C71D07DD061B42047044
63314A49126992B02ADC3D4B9F57BB225D883966E0B8819535CF8A5EDAB4E1E8
BB087627BB47B4742EE489557DC71DE57ADB04E19A9D20273CAEFE81EAF0DCBE
C1C181FEBE6AA7FB429C0B84E56574B2491B490147A60CC9EA607FCDA812B60B
03CE51814C349F893A3C9485A2CBF22C2A51384781D0AAE4CA50984925F13F47
D0AFB16B9392CB1FC94A1291A22B6B67394E561B1F48E1345786CBA5FE7279A8
DD2AE3188D8FB657AC58F5BF4F3CB36AD59FD7AD1BC7F5F22860F553B6BBC7A5
369506083120B9D1E586F1A51849176880F05B6D7528086C30AE29C17D02CF53
980824C4380A29876939713328BB24F8B0F2D354F61253D3179A790A6203D5A0
D3121548B6D87A426B0DF3F119C422AD0D03B1B0F360B9121A4C6374EFBDF7FE
E10F7FD8A986C7176071AC5AB54A7EB16A9CF1855D77DDF589279EF8E217BF78
CD35D7702AE9DE696329FCC853D1259EF4B4339DAE48468A338DC6C8B8D6C561
4D81AE8248C91D5961B474B80C0AEE253E6FC1F2AF94DB1D22CE8E815CF9EC3E
3B8B14B0C91B5B54D0EBF39A13A96105486502CBAA880A2E40522959A0990CCC
C8944E2947CE68983490FD6257B74E57F069A8590783BD0C3F4ACE72027B755B
62469F3829B6E976052FABCA002410C9AADA653DC8F0C790B0D9F003F622815D
C440922B1B129C4748AD38DEFAD6B73EF6D863DC00F4CC242E679C7FC5156CD4
C882D2E99959CA527B6E69E1F2F8F1912D00F08D3A6D175E78E15D77DD45863C
1F718A22D602A8EA574875C5D6C495C6396759812DF28E8A0ECD78E7A28B2E3A
FBECB315FE617108F3263C92A2B592852AC5669370F80A9CE6638F3D560115FC
95487B790F8C5AA9E842EA4459C95E56295F71519DC91832793048E345291C87
8A2C1E7FAE9125CE53AA687AEE80FB8A7B49EB2EACACD64EAD69B87521D6C820
C62F2AD866833A4C78FB7C07B9287217EA38D25A5F6568A87F60B00F3AAFE2A1
82217DEB43C4BE3F42A3516FC5A9336167C66F6CF5845C467EA0146DCA9B26C5
CBCFAD776F05DBCE986CF6AB9F633EA11F3B19CD2886248C93D485E683B98B3C
3D565AF6F2A754A996D2725C294D6E18ED2F55FAD2D2E4D878544AFBE6F4670E
9BBC3CAF7FCEC2E1CD5E7CF52F73976EFBE0FF3EFEECB32B9E79FCE9E79F79B5
59F7445B298690965B2E6F654D582078279ECAF61315C5CA9121B5D0D2601791
2E70D9B2659C5BFA7BE26ED25E6A17CD28E5A5D0FB64690691AADC6C1402D2E2
2C1D266A4465F41A00B61629A854A3C8949F58D5883EB1EDC3A382A84EB137A1
A995369213ACB8B782BB7C407814575C7105712DEA504EC59A844EDE9D102977
1B9F99BE332402F382DAC17806FCC9C240AC29E73A30D1B20499968726D18CA7
919614D7232F1A3684276F1F7EF8E137DC7003B5143E70C20927DC74D34D189E
2C77AD139E19460467900288D1D7D0417694EA16BA1B9A9A379D3F1FFEEE7ACE
11D1A7D22EB308741D122DC62C0A983E9362E0723169C7E91C3AD30C8BA74B76
A212635C51813C450CC49E5C6409C717AFBDF65A38495C5DAEB41685455F367E
A214A95D263949B368176A6805A255E3EB0ABE0B7D8C810DCD989BAA80152467
612E1E048E2FCC3B5A03D44069D1D99E49CAD34F3F1D3A068F0FEDC2F4DEECE3
DC73CF3D7FF6B39FC119C28EC57574D2ACF7294F8837555256268BED82C78245
06C37BED935E2F0A234BC8D56510FCFBBFFFFBC9279F0C5B44A794C8200E8FBB
94391DB589545920F35BF8966593E0BE12CE99A13F57109FE159F0A4C71F7FFC
99679EA981C90BC1BA90259B50BBEDB7DF1E46B94AF6E96D70BAA8F2BB08BFA6
2F8D35C2948EB535A094B0182D5B45E545159F672F0E7E3347C80D633D2D37D5
38DE76DB6D9F7AEA29CD03EFCEBE4C786A5C24096DEC98C016E318694A5D7000
E8A330906E3BBD771E240EF8A39C01A1184A6DCE9C81C1A1FEFE5AD557D3572B
5ED0E5DEBE6937431543A92C6128EDD2360D8F5DE123763CA7A256C82AE080BA
DA847FA67BE9E50F5CDBB68B2388C7D4B72A842F0C259DFA4E4D589EF1FAC6BE
81EA668BB09DD6CE1B9A1737F3725A9918A9FFE617BF5CBDA2319838AC65BDED
CA1597D6A04BDC863F7B86E9E145E54FECBB5F6960F0F9E75E78E4C1871E7BF9
95FA64A3DD74695C6280A1D96E744152C45AD815B7579517C55D1C7A76A93F81
426502D9E50577822BBA76CE98DBE22E557B782E3DD5960B657B6E2A7A9F85AF
8ADADAC38E5F8F3EFA684889E79F7F5E704E86825893296A58CA3DEE49FE2FD0
1247457A25352594718CC1DF7CF3CD871E7AA82B4C0AF27BE06394008CDA761A
DA30096A29FD7880972E5D8A6780077DF9E5976B34D6EFD66CFA52726EFA001E
F0E9B88C3A7866C030448ACC679E6D2960678C560EC652F6539309596359E385
3A8B3C675EA7B12B97936D06DEF296B7FCF297BFB6C3C0B3EFB8E38E78FF073F
F8C12C62B45728B897C025FE858CB814734C603B1339E0BC31581106DCCFBA08
58E55FFFFAD7D50B880F2BC88910E9CC64B30106C413AEC92DB8D5565BBDF39D
EFC4DEC21520D92FB9E4922814161345C5B556490C1D7A255067516C14E5D8B5
B0EC3054E583452BC8EDCBC73FF8E083A1572CDE410A98E3E7C2615AA023A16F
98E9A09DC1CC2B5377B80B37802A5089A7887B530662DFE2713EF6B18FC1EF24
A9A48ACED5EF882871E121F1279E6D5697599407EBCBD3D058131F5028F80DBD
3827A469C3241369A9B2754EBB1A8CE3490950200790F229DA7534C8C43AC417
BB30B1668C194DC5812CEBA7338EA35A2FB05720268796E2DE7BEFCDBA445C70
BBEDB68369CB4C900D2DAA108597C2523228AD1E9D36EB29538FEE3ECE05341C
A61ADB8651414A34ECD56F7DEB5BEC3041E389010F354CD413CDA880CF38E38C
ABAEBA8A59467C5EC40BFBEEBBEF8D37DE28EE527650E79E27BF200180B28673
D30C808A8730A2167451BE8909B95C89878731F0C1C181BEC17ECF479BA6898F
41B79B59CB1FB476925AC39D274EBAAA2B13EC95BADBA492AD071CD052B17058
7482836283024E426B239F7CF6B9E1C42BE06AE2FA86FA5F79EDD5B9F3E6F4A5
E568BCF51FDFFDE570C5CDAB0C8CAE1F85A89DE3FD64AFCBDB7936EA75B91BF6
CE5F7963B3B53189D7D727DB2EEF77B567FBFDB9C04347F0B37DAB0888F32645
A1721FDC425844D115BB022BC79D464C868A4B79E2E82C8AC8C2EE64094F39AC
F8244E3129F46992F2EBC40CB1E894EEA23D71820461FF7CF2939FFCC52F7E01
D164899B280D5884460D22B75B26B8EADAD5510617613B235A6F7CBA7DF6D9E7
DE7BEF553B4B17AC3A961433C34D55A50A40398AF8D987096571F0A06A97AB49
75607E99C748942D19B4759FE1E730B92E4A0C27B38FDB4433831A92A8A25DE8
4C0957A5DA11798C91AAFB02DCE2FFFEEFFF5EB66C99029E8AD0D283C7C0CE3B
EFBCEBAFBF1EEE4E571422AC3A76461C947789313406D3A893E425CCA87ADD4C
68E45E6A18CE1C0C1FD69C519433766AEB9162C301CB716275D91F03538D0FD3
1D514385B669236109E1AC138F172C8955AB561170C88EAD30FF71292C33E40E
AE8FEBDC71C71DFBEFBFBFF8AD142A675C6146AA369D0D1E982DB7DC1266E331
C71C03B9C6F12F5AB40872534169BCC99B5A0F58539707262F11471C70C001DF
FEF6B7A3A21B0F1F5CD4C19B764B2113A54E7A81ECF2A25318BB78CA73C2A980
4CC7E31F79E49174F2EC3076D861073CC27BDFFBDE9FFEF4A70200D27867B8FB
FBDFFF3E44B93249AFFF85F130F173CA29A75C7BEDB57834BA8CDAA2B43F0E3A
E8A06F7CE31B501B224A54375C6E51560C0B7B49E7831F609CD94D4D93670577
2E6F81A7C07DA1F6301BACF7A0B8F9F297BF0CBD254658C551B8096DAA98F722
D10DB1E574BE6D2CC442609CC97F333ACD8485ED318C7738187A1EF8197BE913
9FF8C46DB7DD46638252BB0B6A3B63089AE50314D942564313E368BFF8E28B58
7D8C4131BCC58B17B37C91540FC481320279E185177EF18B5FCC8BCAAB4DF7F5
ACCB2EB89BA1855F12CD9B3F67EEDC3950C003B5BE5A9FE7A38AA3D0AFB7EDC1
5893D994D49514B025DF70C6452E45B13379D34D0A38F22540851DB3A95B70AB
990466ABA2B4DD278F33F83EF5B10D4BB6DC62BC31514ACA9B0FCDAD8C673FB9
F5FB4349796DBD31D745F3A381386F345D1D3AB8E4CA4D97A57ECF641B5C3371
25CC5A54F5698B3E57FA433A3ED9820BE543DD41E465F0EFD3F0E43C7A581DCC
2D83F64C9D2A71C3EDC73A05CBB4C887E2CA2A28A8886664005C79C140CC1D48
2335321027172C480C80315A76C815DBA528485D11F8D11EA6C5E08AF6F64CFD
72C3E8CAE2A4E4DD85D7813BFBC0030F9001023B0A2AE9DC73CF953EC60FA413
56084D3A48B8680CEFB39FFDEC8F7FFC638A477C25E23E7BCF7BDEF3DBDFFE96
405C418BE5DACB8552E04B33458FCABB51ED4E8B66A9D590AEC05EE9A180E3CA
744DE60F553425E5A663A0003D8D2071E5F3EBEC3F457431C3DAB00A79A479B5
F1F1C981813EE8053B862EF8DC8CE3945053A6DDBE39C37315580FEAA128F032
326BAB53A71FF0D72DB6D80292F1C0030FBCE5965B3EFDE94FFFFCE73FB7041A
727F3B89A29084B09626E6814DB8C40E78D65967DD74D34D0C445B3E10DB355D
055D3CBD62B111ABD1F417CF8CB286B631005950E849505A694F772DB17E859C
C575E4E593F40363830682F83BFEF8E3899B60524705ACAA1576BDA3D07968D8
4E4A1D177201625E14CA9155A1B024707DBCA3C8129165EA202984B612DBB3D4
8BF77A09052DD71F6E259C33C61EB834D46162D713F997CE1A8D45262995C755
4C48D96BC15B702F366D64208EB3C178208310EDA26717C3CBF813A61D3B9081
0D38A3B00688D016044F1256D5200ACA31BCA4F87C2F05AC6D40996833D0962B
986DE9982F20904A211FD75B01E705FF1FED124264AD9B8E2B70DB33AA84FF49
D26E79D7398D3C56A259B53E56F038F390208CE062C2095EB8605ED50BA7D457
E8FA946DE4BC63D61A6F37A550395AC999BCE8F864D35B54C091E9D35038C7C5
9B1D8B5D75AB815A32EAF48F0AA02A5FD73B3CE09775E1FCCD563FB3FCD1DFFE
BFB979A93AD91ECDDA3B0C2F98D8301265CD39515F3989C75BE32D9755CBB57A
63A296423DE4F140FF331BD747A199C4C272EDFFB59A1BB3D69817DF314D5DE8
E0928B5BB193D5CE1A51B6FDD15A14E2B71358EE223B63DD2303AE5DDD279D49
6EEA48E24DBABF34D44E3FFDF40B2EB880679C871A46EDD9679FCD5019A359C4
1BCA5666F08C784CC2E099E6F8D0873EF4DC73CFE1F8B300921A571206EFBCE5
2D6F217443DA87A3E26955249C66315B21EDB7DF7EF086995BC1DD77DF7DF707
1F7C104F4A7C956AF670350C86A9B10E2BA1AEE84C4DB472BAD6EBE2397105DA
48A94D1FBA08865E50BAD0AF1D4286BCB702966DE88C271D107A1DB14E1DC63F
31EFCDA4117339FC98CC7C9251E051F190CA37842B13F1DBF668C1508DCEE517
A71D65D3ECF59DD33DE0D93F6C1B373177AB263391A919B72E0B6BB4D9BF4102
CEC2A928820394AC238F2CD902613BEA0F832F9E7AEAA9975F7EB95A86C16DE5
9595B2B51D7E5CC1FEDDAB2E5379595738435141E340DF9D7FDA65975D9E7DF6
59869866F48099F78588C7419218E5E191EEA7CAE4BE22AA50088BBFCAF54D1B
82BCC40CE98B2C93972505AB78363AE992A9FEB46D2C4FD0046BF9454BFEFA5F
7A7661B67171A89FB860CCA1818F1F8E3BEEB86F7FFBDB307CBB9CA4686A074C
5718D78A6E31522D189422FF38D73C088CC4F04559496DCAC22A425A287D48D0
C3672464894F6DB3A18CA5735A20716EB8E106C50C4487343D048D4BC1F220CC
F388238EB8F5D65B097EE41EC66BFBEDB7C7B4F03A77DD75D7BEFBEECB00234E
8425B9743D42D0F2AE04AD676A86F963853AB40FF101086E6C06F6CEA2358919
8083F2B5AF7D4D12DC26BFC2390D4EA783CD1A0DCDF128E8ADB7DA2234DC0D61
5A58540CD6B69B13D994F23FCAF776D13947D85A8DBF14A5FA7C6400D2410117
349645143A7C0C7E082C9BA43077DA8141DAB340C74D974EB6572F7BFAC517FF
3CDFB91DE6CE9FDC303AD1AEF78534617F94CC1D1A6C66EDF5631B1B99ABC511
656EB5BFF2EA78BD7F287563ADB8E556A7E50DADF65AD786FB35EEA200667550
C04DD7DD50481825C5EDA3A24BAC8099941E78936E80FC4B7ED222A8791EC516
E002549E3A88CE34AB7E25BDE980CAC58C0B12755B36A9B129AC4D2F8E1FB0B4
13AE68A9293148AB1D46212CD42F7FF9CBDC5AD8276AC8AB5BD09BA27FAC2A15
3AC7B82F36A1D89C48CB0A3703978D78B0CF3BEFBCF3CF3F9F66059EE11DEF78
C7B265CBD45F8851389164590F98F234289B0E6B07C3059B10A4D9CC82924746
C62071402196D2B4BD0AECAC9133992612EE4BE18537D5EA846E19DE3FE8A083
EEB8E37691034C4CD4B7DD76E9F2E52B535F4E9E4913B829B9E79E9CB4D365FD
2C202CF87024A592EBC05003C949745FDB1983BFE203F818610558483C884D7E
DB5E52949E4C8AE091990E11389E0DA599D1E7A6E7B4D0CC923BC89170F733AD
58840A7AF61BE618B8ABD4F2DA150E0DEE32195E320BBA9C15AD9D38FD391836
AB6048137B1457C6C110705780FCD8F0DDC4BD1BA7CB037EF7BBDFFDA73FFD29
35CDAA33D3B3212A4ACB141EC083B31C40412A3602619C7FC672EAD7F3E256C1
3962699FFA660AB7C9983C1691191F3EB200C36E6ADC1ED3821F606EC3B2C62A
3059639D0C61C7A8B4F008DB6EBBED134F3C816F7DE6339FF9FEF7BF8F27C2C4
2ABA8EB5236C421EAD0B8824A5C36505D2B3C405B7D9661B6C244C14EEFB777F
F777BFFFFDEF49A12AB2E52E55A724A84E193BC7C996C205B128966C873069A5
FF5557360B084BA4D0023D598E4C9E0E85D6F0F8DC6024DF16C39D2BEA8C65E4
118E40C5EFEFE692CEDE8B5AD55A5AAB55B7DC62F1FCE1B9C3C3435E67346123
B6A2C07D319937AD2145F5C08CBE05722ADD9BBA64FABC111343A54B055CCC70
E6A2B24058506705082B6EE4CDC57D7397FDD76F4AEBEB8B926ADC9ECC42CBA3
52EE962E580831BD76C308BE53AB9661224CB6B3B969350F53DA2AB9D7C6EA43
03E9409EB4C6EAEB92D2DA76EB6597BF9CB8F5793C19F28D9E702BABEB206BA8
9C344B92C3BFAA1780548352ADB47D25FFA553B8816D7843C81E8856283CD623
91DF0DDB4685E9022D33B443660B22FB98C16170D4C25D459245C18B6160A7C1
26BBE9A69BA05C1F7FFC718E1F03804827829AC014DBF507A3122D0C85240991
70FDFDF7DFFF5BDFFA1647CBF40763C99FFAD4A7FEEBBFFE8B24719DD3A2448E
2D8A90955154BF95241A66E4F0D324321AE658BC9BA5330A261AADAEE84E2305
9CBB8652F1AE284F522E6A7A619F64045E34DE69BF50D7E2F9607EE1881D74D0
01B7DD761BB96008A836F031370BC1888D3CF77AA7EBF3AC4B8B8A8E8A7A046A
0EAE93F2D0C45ECA0A13CD322426710A0C399086495078597CAE3050A865092F
E2D888F8EDA28BB3997EC96EC5A26761D924FA1A2A0A9EB40DC5C844604E9A44
6B168CEDA62626206D710551B289B5EA924B2EF9C217BEC02683342DA166E04C
BB02C46F8F7DD2BB013BCB5198996630403C6E2CF4C20E87ED79D145175960B9
E44857102C2AE0516A31A418F8EB7C5130893A4A33C369EFEA47A2CA78678AD0
78003FF7B9CFDD73CF3DB429C9E4870F70F6D48842C5BE2234B0CC1E24E27085
DF80CF10BDA9FE510C94610BE19A2AB760EC9D1042CE39779A62DA0AF52BF0D8
6BFFB0870C0F88F60C2D60FC0FD71306934094AE080BD10D550CDC199FD2AA2B
FA3494AA84F2EDB1C71E3FFDE94F1913528D293977F1573834DFFEF6B7C510C2
FF15E86685BDF47781E98D5C1EA49F0FF2795AA8722559306FFE565B2C86C55C
AD961BF58946A31EFB3C6932D69A6C172FFABB34762D87306D74FA30491EBB99
B1268ACD8412A62204DDF6A680E776761D43A49D963CC37352290D35D33FFDE4
77BB560792496FD324916B446E6EE6E694FAB184D8E5A56A69647C749DF3DC1F
0BCA037913CF128DB6EB1B5C36AF9C2E2CF7D74747D643BD3987F3B3063FC46E
3C83F79D949252B3352EBA59656AEDBA2B9CCB2431F733D35B145334AC79B8A6
13266AE713B682853BF4D043991C11211D568D5720CC58613F825A58C54EFA7A
EE3A58FC18068C7E31BEB910C8E1F8E590502928A74BDE246193758E92A2DF8F
A8186DAD411C5868C4036301CE34FA698248027492342A4411D2813530B41CE9
7531A66A51DDFC3CEF34772EFCE311D8685B6E0937E2654F4F1AC36F0E9E9007
DD252E4F435FE7B08B63C70AB6460BE73CDB71871D9E7DEEE99060870022C7FA
BA4AA554AF379D074F790855A55C1B1BC378FC353B7F0AD0AA4AA5DC15F52A56
B4549C9F8CC8D8109DAAF716103D99ADE2821F47795C8A39955548363171A5ED
A8583DFFCA1328D8F03BDFF9CE3FFEF18F94F849D1B65387F090430EB9FBEEBB
F149BAB0B8B5A2A9338E939A9BE59B8C4F52613387CAFEC7E4D184AA3BE9A493
F282E994217DFC8CF17CE4231FF9CA57BED24B803A4368CCDB512B8B3715973A
F7DC736FB8E106FA91B269B46764A2890E302AAA30256D1917110B9B6DB7278B
3536EC83AEE82D48F3653A963B2A5A6E70F68881ECB2E1A46654B374DD75D741
461F75D451575C710593D0564668A52CAF722F054C6B89CDBBFEE11FFEE117BF
F8054FB83586D431B79A9624B046C7421EDD850297B8C3C31B87AD22AF77B0BF
C31EC02663F6D6BCBE787998C0B6BE35068FF1FCE10F7F80A8E220610341D8C5
817C83E654A35E4FE250BE3539514A217F9BB5AAC785B6F276ADAF6F627C7CCE
F0F0C8FAF5E510C8C187CBA532C58D2039B47E28496CA247F69FC86D18AE64FE
4B78A5B8686B2D8679ED2569323C1D39D7C837EE8A0E2B679F7DF6C9279FCC35
B2A8852BAFBC128BABF6887951F4397B255E9776A41E5A38CF436FB6DA6A0B1C
AE3871013DE7E325F5D60461BAC251D2160F1D0B5B59D1DE83D709659125A5E4
A4DBC2833767145951192E70A939D1AA0E0CBE34F2DAC09CA139E54A6B74D4FD
F64908D63E4C38F46BE8DFC402E6268E48CB8BE05A9256E1CAE69D279ACCBD24
8583DB6665918BE1F778319764CDB61BCF1D44C3ABCEAD8EA235D88930151A4D
4F489D67A13D728C81A6E552A3D9888B2E49828EC2AC8416C469F28CC7E1ECE0
D7CF7CE63338593CE95820AE238B62D511272A48E8D8362D2E3AF20A764A88BB
CA35699F6DB9E596F813753356FCA31FFDE8030F3C80FDA0C49C802962AAB11E
08578A395D22B3F6DC734FF8AF6A544FDD71EBADB71E78E0818A232A5D882BC0
685BB3668D3C63FA84BC2C6FA79887801D1D9C9D80E334D59D89D731374C5969
298E7133A6551819A3A01F1A1A683427B1E3CF3FFF2B5B2C81CC7A65EE30FC06
38D6B878EA41F351406CF942F24074323EFAB6DD767BF4B1478E3DF6E8AF7EF5
2ACFFC3EF217DCBC5AA9E2338D067449ADD9C2E975B059B98D588B8913484149
B3C04D83F97803AD4543950DD59322DCD17CA30AD802342C48D832AD88CE3E2B
5A1C5A88A3B23EA490E49B58A777BDEB5DCB962DC39AD954992B2C09B691B123
D979E79DE1259C7FFEF9B38C13B7C0FF6C998019D6156243E060A38B9A34E9D7
5E1E30B71A632CDC06D61490A1C7E822B5AF0C527A66946E50F0575D75150C02
8D5094C56C96C28030FB32D15A24350403EC4A06BB10FA26A6D71556336990BB
54AFE687B1191235C82951D11D6356C41C302FC0F4AA684FF2821987E2C30AF4
59E64D614FCB932A300E533CFBEDB7DFF7BFFFFD4EB902AE96862C57B3313830
C847C6A8EAB94F2D3A037BEC805C9A2DA59AF08320632A02D1346AC56D2132A5
926CFCBFFDDBBF7DE8A187B47BFD7297FD9F20C5A15969C460602ED8D13E9316
F2D01B466079FBD0CEA2458B5E5AFD22494ED449457E397E8617FEECB3CFE2F0
B2E32159ACB9B2964281DB95692692E0AA588B5A8D65A07C8ABC68DB408217A6
99F9033E03E10B614D91ED42848F3A9E98894D70D12C93A077BD5F56CEF0A6E5
C4FB6AB8CB669B2DA8F5B16CCC87B84727360867477F11C3F38FE91DB0A672F6
14BFDE09CE52ED528564C21234EDAD35805629732D17E7C9E09CB9CD766BA854
5EBF62D5F84BAF2E1AF77E6D258E2A599E78EBCDE77D93142EAC2F5381C35576
712949E1D4F821B55B0D28DACCD50354270A595EEF2A612F95A2B627CD8A37BA
7CAD8B5F8CDC2B2E5A17C42436561A6C06BF93B34E104E9DEB14A4A422146D00
B628710624A7EBA2C1B254154C69E103D88D3FFDE94FB997F0C5AE5622B7DD76
DB01071CA0A42FD53F64086E848BE0F338590C0132C241DB9D4C8B71E857A856
E871D13110AF638F3DF6FAEBAF6F9B6E9E749918CAC2D6C53074A82D4D269F82
81134BE0A828DA74D5D309415327DB703C5EB81676B042D3EA5103D183215E73
CD35AE28F657E6D51F1E1CCB6A3A39D1AAD5FACBA5DAC8868D58AA3CC39A26EC
C541D9D16A35E0CB6E1C1DC93C12AFB260C1BCB5AFBD3A591F87EAF5F661BB55
8394F775DF9DBAF5C54B168EACEF700833FA7FF0C107DF79E79D7878CA627B30
8A0855F8D589C2CDB19D8809E9BC2E054C9B4854B7222E605ED03A19EA0031DD
4F92981632399ECAAE174FA3ADE0FEC67A1F76D861505ACCCFD98D325D34D826
ACAE70C729EE097CED14D417646156EF523A73BBCC787D6A507CF29BDFFCE6A1
871E8A0FE3A959EC44DE2BAA37852E39E0AEFE7D6C55D98563928D296036179D
42939408A79E7AEA97BFFC65B97154907C047A96C25CCCE8FE6AAA79B61569B7
800E57848B6D6604973DEDB4D3CE3CF34CD6A462E45D517A0E691605CC2AA328
D46B29919F17CD8EF899F7BDEF7DBFFEF5AF93D034AC3931494D008FB3AFD637
3EE1F73C0E5133EA0478AC02F6FBB99DEDB8E38EFFFBBFFF2B1B88BA47B17D4C
0BA9ED59538B71B2668307A70B15AFFE424C56F9FAC8FE012A48DCE5F1271EF7
8E4E9ECD9F377FEDBAD7FAE1B204E9B9CDB6DB52A162AE2EBFF4B2A8289AE076
A21DA3408B5E4A61B0AC53DB5B6870ABE7A8999473A1AB206FE3BDEF7DEF9FFE
F427854C383F74C48F39E6989B6FBE19C7D312AD10DDC368B0C5875BA45BAF53
A67DD531AF3D38A8B664C9E68B172F9A333C1862305E868D4D6EB4991729609A
7D364E43050C0FD4B2EC49747858B5B9BBD470336AF97873A596E55163627241
545AF7C853C32D3708151B4725EFC1FA58A3DFE4210D37DE68552010E2246A75
4C0D68DF8976733272ADDC4124B119441CE2D2A98B16C49EE7D22F5F1EAF6BB7
5ECEA186DD681CAD883DCA3BC586C7F456AB73063D06D3D34BC79BC45736B559
AA10677141124EA40B2D30D6BB538CF098085D2F1208F99182CE4030C2A98D42
4336611A544F2B14151D36DA820A3DE6A615CAE5975F7ECA29A7D0DA63648EA9
1937159B2C97F7820B2E8034B0CDBC597F1F05B261C1B06DC8D315A91CEB5F6D
12506E2A779570F3F832A415EEAA8AC90B2FBCF08C33CEE0B00410977580C7F8
E10F7FB07CF9F289897A904A937DD539E393939552350A60A3D493947AB9E961
82BEDCA819CE249459DF5F46D6C2286BB6EB7DD53EA8E100641D0D6CA7AD6DB7
DD7664641D6604DF651C0C6EC1C6D18DEF7BEFFB7EFBDBDF4216847848D8946E
2AD5BE53C364D2C8757600CE5A8FC3D5D303A627F7E10F7FF857BFFA155682B2
860A89A69FA89225E8BBF2C414B8C49AE207EE0C510849D6D8E551EB0C7C5E9D
88A872661C2711AD0C29136823674B124D824C1884682ACDF52C393CA6246C87
5A5E96D40A78168A7BE6AD85D5B2A2362A3AFAF1A108A053EACE999824FD51C5
1E2931797AF12D061BE80CD11A63281B5F27B5C2A6153573C5F1D38A52F18094
28AE4FF8315C19682FA64559ADC4D2436683586C8A2FEEB0C30E4F3FFD34093E
674765335C4C3D2DE52D8A5AEBF675B4380110A5D06F60627C9BA5DBAC58B962
687068E3C41835EE26B862904473E70C7FEC631FFBC94F7E8263883DB37AF56A
9AE782717640B645FF0FB80838D49C679BF894FE13F92BBB17F0A6F8D6BBDFFD
6E9C387CBED35DB152A6F8C37D1BF5FA702016F02D4E5FF10E286D4179C091A1
07C275FEF0873F60071E72C8217062E485B01F0E0BB82DDDAE2B7C146273A2A9
5CD65826FC401747EDAB7953826FA300FC161F0ECE080392A2A58C8B8E87DC60
B3339DD973DD112F7E1396E7CD9BBB70B3F9F3E60DF7F5559314176C857F9970
58B48C3915B61A588899BC950BD5616D8EB434A56783C680EBE7D091FDFDEB47
C75A13F5254975DDC3CFED54ED8F27C74A71024F378594756DEFD426317C1F88
E55AA9E21D5FE6D14B693BCFC69B8DB1A07A7126EBBEE4174E73540A69E3B979
E683D569021777A4D558EBF2F5CE4DC4EE8FB983C584757F69D52AFCB0D38E3B
BEB872D5C8FA7571A9439825002677BE2B7C184C2C898358C72F743DF71BDE21
685F9C39F8136BC72D5D062F85FF197F2526F199679E91F1F49DEF7C076E318F
12FE4A9432FEFAB5AF7DEDA8A38EC241BEEEBAEB0E3AE8203163E0EB8C417239
944CD48674A18FDFB265CB7876F008D83C947EE22A38E79C73E02371C3634372
A1E5D03AC3B71317CC5FF2B83A0AD8997EAEB2D0A9DB8F38E2885B6EB9855286
893A32E608EEC110993CFA0057D9807D05895A2B0FE04BA5B45A2EF7C5AE123A
5A33E80D3B6C63E052E95B3FB2AE5E9F0869BF74DDC8BA8AE76DCE27EA101659
B994369AF5905DF671EC5AB54347CC2018542F15A1B672D05D051CB45C2BD0FE
ADF0A64CD737A68055FFCAD34BC0943869B17BF0BC58C22E70D07458353D5A1B
F8B5AC265D275C8E2936251BEE92B765961C30BF45C42089A824E8BB4A29A6F7
A5494C6FCB59C06554A58C161E7EF8E1575F7D35E106D897A3E1151942546738
BF1819A60D484361FAF5691A739CF83CAE80C3C3868604A051879D7EFAE9D75F
7F3D2B195462AF98156E3D636B528E1F92F7431FFAD0EF7EF73B1C217A5AD0A3
8F3CF2081CC44F7CE21377DC71072D0641DE387B5CA69D77DEF989279ED00571
357C0BEFF388AAD877FA8BEBAE25A02DCB5FF133EEA5FEF61431DB068DCBEFC2
D6FCFCE73F7FEFBDF72E5FB1DC85C6383A9EE210AD4FF81A47223375478601C9
A84CE22DDE17337CFCF1C74358E4A6A7902B40C204982818C691935C9AA018CA
C7CE898B5C1D531D8E007EA0370C01534E4B04FD896896113F32F0F1CA941EB0
E6CF3BEF3C350183A895E3AEA347BF84313D1A70F22D44CA8FAF5C7CF1C5F074
09BF504B44521AB86060115A4FAD8CB5FED18F7E245386179713F2FA51EE9DF0
21545D2986DE1D1A1A1C9E3B00B3ADAFBF12BCEAB64A8FB2A92F1501CB15F6B1
B13CB619C04D2A21D9C4CE61753084EF78A399D46A939157E18BE2D2F25F3DBA
C4B92DB19A2E2EFB20731E6579DBE571EA8564B3DEAAA49EEFD2C33FF12758DB
918313BC31CF5A9E2C2999F4AE89779A6158798035ACC6D80DC035CFF2B1660B
F21767A31EB9DFE66ED1E69B2FDD7EBBC79F7C62E3BAF5BE77ED5A78C0D964CB
C7D5A2A2CE8D9299134B5389F2939B932003B9A11FF8C0077EF9CB5F5E76D965
975E7A29F618C183B4B093A2B78DADEA113C1E7B8FA1C71B6FBC71BFFDF6C334
E24F14AA49686117855A23D2D889C99914AA2C9CA117A1BA47B1ED8A09007F3D
F2C823A501F9B211235C9C37E575C896416081C5EA5B4DEC0C654D2704ED0C1E
382A984B7142F060EC00837372F4D147C38EA09267CB1ACA4D6698F96B98E58D
A1542EAD9606279BAD81EA20B46FA5348095F5454945FBEE466B3D8EFCC88691
6A151A6E62C992CDC7273CFD5EBDB571F3CD367FF5D557CE38E3F45BFEFD66B8
C81B366E983B3C3C39D10E5AD9BF966CBE046775C992254CF36CD2BEC6BB573C
166E74240A37ECB0A8578E67E683C776491682CBA438912FB80B6C76767913D1
6897AD2A914D24AD0BDE2D74002C9BAF7EF5AB56015B9D2DFB91346410C4F7DD
771F9F77C67132CA8111DAE48AFA191099450DC70791ADC7E5A050B0C8A6AE17
93AFFA80AD0DB37407DCD02A58A27E22A44285CBCCEDE1574A7CC68189EFC7A5
58B5A9F0B528F2A1097065FA91F81614C977BFFB5DA21F9DE9C13CA394D4DCB2
BEC586918996646A072A90306FD241580302DFC2DE666B6ACCEDB9E79E8BE3A0
BBCC82CA262DE2A38F3EAA6C8EEAC1584DC80BAA513CD91C312AAC9A820A5E76
34EA52C059D157D8EBC87A43B476B8207EC01E1375892641DBE984134EB8EAAA
ABE8491089AA02E23C547533CCBEC962234771A897531D20A4432534283CF490
431212C9AD5BF737BBEDF6E8B26570D69987E6491734ECE31FFFF8FDF7DF4F48
3FB941BAE210AE48E4B38E4E36AE20145DBB910291511C62EBE89A5B0E1C26C5
B5E5683D0B67AA9E48B9E99BF2FA1570714ED3D03D302E5792FE81CAF0F0D0DC
79438383FD596B53C9AF6098CEC7FC5B0A92B1776454F4069586EECA46C50599
496C1A24C7FEB0BBB452CE62DFF47A4E96AF7FFCC5CD23B76DEE93BE659CAA38
48759767F81704BDAF220E5230C370E25062ECB927EB7994D4E3A89E4575884A
7CD745E534C64AC067EA875F9B3BD8CEEB031AAB0E0F18EABE529EBF78D16B23
EB376ED8E0D9B95AED6A529A687788626CB74ABD54328B853BF4D043AFB9E61A
DA7F743421D6042D164CDD19702B360C7EC063E2EB2CE7DB71C71DD9BD8DF616
FE448A0F55F4AAE59D0A04C8CD40080B13BDF404A4D771C071175549E50531D1
17BFF8C5CB2FBF9CBA73FBEDB7C7E6E441204C87EB826BE233279D74120BDB04
CE557C858A831C2F2A26F2E697335CFCFC900B5612CD55AA1992217495A9BCE3
1DEF804F20D0075C84679F7D36E45D6A914B9B0DD852A5850B369F9C6CA54935
4D6A7996FA1AB9BC83F91A1ACE3DCD6C63120BB160E1BCD0DDC2572A0F0CFAEA
94D0B1326B6730D6DA5B2CD962EDDA5793B8A85868B7FAFBFA47C747ABE56ABD
51AF942BCE388EDABB34A09ACD4063EB9427CE5CD48B70A3A7E7C7E42E839398
16463FA863B0422CBE8E8AB639F9547ECDE294C64C1BD381A3534BED3223E883
3A125A017FC5C615FC8FAD26661C27B1C4181E3D0C3A40D273CA3E520733FC42
D160AB48675124DC8B0CF9F28460B7DD74D34D3EDD55049039ED44322BA14814
37DBD9D2F895CC553C80C6A047E105EB9563C0A1A5D32F435549A3C434F2231C
4F3838199876325D11E621D4D6626DF4033D5D4E14D3A8D48B1DC29A4076A84A
03C6A5F3823C6496DCF929A79C0271830B6293600B1D76D861679D7516E7198A
196F726F601E68CA501058E04567F0F126B4BCD8FB4AC1411195982D99509730
ADBEDC6EB9E0CE14FBF1A188F6E430B8A53D745264701D60858F734C4E4C4007
C3F7653A302EA855A178EC16B212438D8D9DE9788309F9CFFFFCCF8F7EF4A384
A16187C3D6111D95B6A5A223386ED86F04DE0BCE6A69A2BB5C0D95A7F3529C52
583FB4F62804BB2A9A5CEF57973D173C9852E25DCC2877D8EDF9E0506DB3453E
169D16CC55AE60E128707FCA85E5A40DA19250858598CEF4750B9D959BD17059
258B4AEDB89C472FAF5C3ED876F3EA6ECB5A6DB03E89A1A485CEF6DE2DD47CDB
AF63BBD54E5D043FD8078A33E8DAA854AD8C4D4E36F199249E6CBB3A43D6216A
DDDFCE6A49524BE09ABBF1566324CFB06C93B17B3CEADBD81EAF87BEC42E4DF0
3C91477B45D0E8968438330464DC90D8F6E79F7F3EAD220813929D1157C427A5
258A79C029C3D9C7B6E10EE1FED159D051E591270D1F1614DA44FD0AA9B0E04F
C3506692250A5DC818FC93C14AEC0BE98F946366B11C81965C14726909CC68F7
03636FC28EB05C48CB2D0B92D298C96972DAAB34237205B111850815B0FA92C6
A69185DA99C1F23DE69863DA455707678C88607242290E8C8ED5ABA5219727FD
7D73F07FE42A9DEC7EDE215D7ADF07FF06AEC633CF3C35340796CBD8C4E458BD
5D5F347F61A339064D8C2787567E7EC5739B2D58B07EE42F0DAFCF7DC32ED6CC
61784270E4536B03ECABD8F1B0395BA12F66F003B2F1D98F56D7CB260654F960
C5B176866A27E2A99DB96422B9A2B49F601086C5661C09B729AFCFFD44E5374B
DF6281B620F1A11A051A74C127905126520535AFD61DB96F6699073ACA4A3653
23AA1EA95D747AE12DE86BC281C33B0CF0CA3855C053134501440D042DB562C5
0A3CECE1871FFECD6F7E93E8153C02C91AD9D68258E5071E78007E150B4E98BC
ECA28AB43F8BAC477D4BF8EC843E915A84C4939C1C352639EFBCF34E3EF9649C
349C02461471DA3FFFF9CFC38FD45DE2DECD21E853BAC21AB36ADE12ACDA3FE1
70E188D177E40C7BB86F29B50A185E860B7F82A0573F73677C05A566DCD4C88A
95892AC7545B0E6B32528A95AB6157C3F80E810A2F4130605627B75A55F81961
FC6991C04E934D8A5F9B412D5D79713AE834F1E9045B3D6DF17436DE4E036EFF
FDF7BFEFBEFB20F52C804EA460B699152D89AC600FC694E25CECB2CB2E0F3EF8
A09B4A2DA0079F850FA097028EA34A5884ACD19CC030AB35B768F3B90B16CC9B
333864AB4B3A10687FBE3AA5472ED83D6CE12A2A3A57B0460B264DADA6F8B396
69BC1A27A3CDE42F639B570637BEF8D270EE16BBB4DFB5FA2AA9B793DA218E0D
3BCF4593D82C9E6AD2353378B76EB052C5B8C74240A556AD4EC04382F08F92F1
3C6B0600420051BBB95902AD558D53A8F3F1AC3DE2BC029E88A2E7D2FE46E25E
9B1C9DF4BC5F7E12AA956AD4CED26A457DA824816536C942A2002FA6A243D32B
2E0B1CF9DB6EBB6D8F3DF6F8D18F7E2428BE20C44CF410E642F62BDE0E328185
0C7168822E9CAC68D154E2085D861FB0F7441DA880333528AB54549DA84649CA
D2E238F32E96DED9156D758882943CEC32EC88F062DBEFD89059756C46181DE4
4124452ACF405C34EB880B6AB4D34E3BEDB2CB2E834C61B699C1589A00838373
EA93CDD1311CB374AB25DBC0017BE9A597E70E6C0D9F7864FD86A1A17971546E
B7A0DD9B3002B67ED3DCC03C370937D777B24CBCB93D30D80F0F75CD2BAB976C
BEE4A59757D5AAE54A1506D16B73E60C8F8DB4DAAE5D492A4C5FC1E41A9B189B
3F77FEC8FAB100B528B262A50EBF47E2DB23D61BCDC966B3113CE016D3C0A4C6
8CA6D6742A40E7A6B21C33E74A7F4E53C6DD43CDAACA6E5B513EE3D1A5ABE1A6
42195D61DF59F3569FA7E45565AA943D858B1531449468A31097FFE637BFF9C0
030FFCD297BEA4BE1A5DE53494B0EAD2A5A6B37C47D615E7539DD8395A463EF8
26838D165E841FF6FED77DA020F1F3F8D8D8D26DB621858DFFEB64A7DF2DF31A
96EF5EAC437C4CF148888F66F9F2E55D58569A1DB65174BB779306E13894CE11
BF922BAA9389BAD4E121C7533B3410D5B6A1F1470B83C313778FDD570AEC3B43
B22F191A17645ED375A4B8D248CDC1727E7CE5B8E38EBBE79E7B3060F621B7D5
4D6A0CD70E6D5BD876A9D73CE82B1C9ECC2F2D22A785C14006E2A827B8D968F5
CFB2CF25B634D58A2B0A42C5220B69FABCE06D15413F0315AEE85B47F81E3EF6
918F7CE4A1871E5ABB762DB71FEB956739774CE3B54DF33B9E6B5C8D71511B27
B4CDA1DDD408562F7062E448F3E911A3B0F6E3C4CD9D3B84A7DB728B85342B03
262B83538161F8D289A68FA8556B9510606870E7405C97CB7DB40B3BED878B87
A297DFE55C7AE33E6EC523F5F66075726C7CF39523C3F02FE2F61659DADF1796
B5458EB0B41D3BDCB2DE6A4D26B16F139C675EBFE25F12979318C27203DC13E7
53C5ADB6AFDA0C654B51E2E2E1B24769350240BA8E1FB2BC1102204FB978A5CB
9A708DB312E46B3AE089A8CAADF644DBDBDCD0A06C73C9A2DEBC376320D515CD
A6AECD2FDCB83D3E5C3236CE617C68C71D77FCD4A73E75E59557DA94B98E2115
AA52CE94D2B373FECFF8BE741FF33ECA08507CA949971ADBB86057D108880A2E
F4AE8666CE809D37398B144FF834A901F524FA10BF89BB52FF4745279F229293
071EEF688BC54BC7C626DB2D4C41B6D9C245750F73ABBCFACA9F77D8E1CDD0BB
D54ADF9A35AF7819DAD7DAB0717D9AD0AEF7171FAB8F95A21216769B6DB68667
BCF9E285AB5E5A7EF65967DEFCCD1B5E7CE9C5C1DA42EA399F2A188734CC0607
06474647FACA438557DA312DBD97802D946452C099473E771470146F6AA7984D
A54814AB995D729972F65B94E66AAACCF082624A332E2423B46E9A02B636B5D5
E21C125514D5005B525BD14609D285B1223885E568D80779E0577345DD37FD2A
D55932ECA17684F6FD2E9E04674C138C8A64F7A20D670C938FC048C0E09CA1F5
45931C48CA2659D530095907E0435CAB9B1A2DC4F5098860648978A87A484E30
3DFCBEF7BDEFE73FFFB9D0529141EFCF9EC3136A9DB60B66860A0067185A8D31
676A56E269C9640273F3E28B2F76C191255DA8568D9A8C0C38ECAC1217AD43F3
D02ED7CAEE19B750AF038F5BE3A9393CBE20DA186D535F175754FA33E3C0D9E3
44B95953095D804F359EB28D5F9C09D568F5F927C5BA66899470D3B2EA9DD3A8
8C1AB3B0D836909E789F05058A1BD94321E7C9CE0C8D7EA1B4A2025CCDC575BD
5FBAAC947A5E74DF52B85BE03BF746147008EC7946A090356B4383F5F7FBE0D6
D2AD97D46ABE17AA8786E57EE78C8F8F7A83268BA915A298A1E9662110620BDA
9210B09B272F6AB1FCFE89F378C3447BB06F726C74F10B1BA8809764C96025A1
E6F25A1D73986793D88D01E71C0542062AE05AE42A5E627A760628602C40333C
6F1C7A2F4131575CD6CADAF5CC7FB719B900D4F270D697FA861E1BDF900F941B
A38DE1FE39EBC637C2388A1BF5E1706CB121D52641D0DF59E4A1E4274D4CE1D2
5D61A76A1E2CEB915E74286DA457CB6437920D1EBCF11C7FAC2B4F01C1990ED9
EDA2EB22FFDAD557D085A00E71A35D7E5A0784658B225C114FE60DECC3F0C54B
C8A4951B542EF5CF9FBF70DD5F4630F30BE66FBEFAC5358B162E86B7ED5A7D6C
90B0F2E5954BE62F59F3DA9A3935AF151AF575EDBCDD57EDCBB3CEFC6E1C1FF5
DD0C63D7C826FBAB1598C2EDAC9E96A2B1F1918181FEB1F16862628CF35EADFA
B2C27A23A06D735F5FD16EC12DAEA6D8362E8661879F5B6E030C4C7CC62B60BF
739A54C0499A5B7349EBA40A1967E27822CF9B1EE8565E9D9C4D96D4A2D742BA
A9EE0EFFA70FDD5502C8F140BF7EFCE31FBFE38E3B98C0207D04578A12D326C9
B82284A258C49365661192109F672F39FC4A20AE94BDCA4919B7A171675B5DC2
1DFFB77FFBB7BBEEBA8BC93C3C6D7F1F56670C16363B4057CA957AA38E9D1517
905A2F4CE1B0929CA1D9223336E5A9A771D8B0C1461DA6973BDB6A1FA630A923
B5A119D762EC6E16C58047BEFCF2CB8F39E6185E5C25BC30A2F1A62B08E05C00
E6E0FF4B2FBDF494534E2196925E940E1B6B5BF1DDFDF6DBEFE69B6FFEC77FFC
C7BBEFBEDB15CD7AA9BF0595EA420674490ABBAFF857C539980CCE8AFA5717A2
6DF89948342E13FB0DE04F7BEFBDF70F7EF0039AD1D6989B3E0FDC75F4B7C42B
49B14ECB1DFFE3E2785F46B925A3C51D493F3EE3F585341415B33ACCF0B9A8F8
71652C2514B042267A2237B530121B9843C575B6DF7EFB5FFFDAF7F3C6D1A0FD
47BB84E1C45ECF4B674B55BF7C52F145C405FF86320256A05B293CB384CED300
EDF4FF3A89AA04DB209D3B3C3877EE1C883E4C260C456FD97BA6E876B3D1418A
64B9A82A19704EDD54D8A62B2C0C2B19E4C9794ECCF5E3D99C5A7D7C62F10BEB
E7B9248FDA5BE4D17039507A65AE09F5E9DCA4CB2723D7CCDD4860E4E8B8BFC5
3FFC3A542D07F7B7DDF0D02CDCC56B5F38DD31BEDE6C4E06C705FFDA514C05FC
AC4B5F885A90D4E5B8D457AE8D34BD953CBFD6F7CABAD7708E4E3CF1C43C9008
D1CC657DE08CD32611CA3A1A6E03FA185D717E45286D68AAAB3B96264A1717A8
AD4B6ECFB24F667CDFC24D225347E40AC032AB95F8388459911B8BDE3693D392
0C76713BCBDAF530B285A72B0CBE706CF061717AD1A6C010E70C6DF6917FF8D8
CF7FFECBC8257F59B7E14DDBBD19175FF3D22B69D41746D338EC0B87DE78E38D
F3E6CD5DB1FAF9BE725F3530EE552AB5C989063E59ABF537EA011DD36A8C4F8E
86E69BCD286ED5B3F1729C0E0F0F4DB6DCBA0DEB3C482F2DC36D86ABD96C37FB
AAD55A1526FCC66696D7D2814AA53F6B43019771B5A65BEBDDD1A080DBBEAFB4
A7DF0AC723B30691330AF5C0030FBCF5D65BD5FA4ACE84959836C7CC5F056679
FBDBDFFE8E77BCE3861B6EE8B5E1EC4CDA4065D7D6E10F140DBBEFBEFBEF7EF7
3BAE88DD0A3678AB26924B972E5DBD7AF509279C8093F0C10F7E109EA22045C4
D6F289449DAA0B8A3A982432B4ABC88F4848B3881138CEF7BFFFFD7FFCE31F19
528EDA1E4A363E315E2E95B9057D18A0516F476E60707074E3C65AC06D51C04D
8C8FF7F5F743EFBEBC660DC13BFE9121DD20FA87BCE8677690ACC5AC58650715
4626287A441B42CDC4F8A41470AF83C40C3A691FF003750023603463312A961E
12310E718F6F613054519681CB9954FA5BDFFAD6071F7C10530ADFF4E0830FFE
C637BE1105BEEBE5CB978B39B62BD632A3F6B5E70B16060BB1D467F7BAEBAEC3
D8AEBFFE7A968653F78B669C31708C131A8E7C4F6E564390EA47FCB2DC6C5069
2FBFFCB2253190219F879AABE79E7B8E53C4B2E65E841579D1754A9E25DD5606
72E813731FDA923C6A4189577D975620671EEF10B22E6B4C5B77B6107188E2F2
1929AC740BC593784CA8C8ED83CC1EDCEE8C3C2AB7331A0D4E0704DE6D12C15A
1ADC6CD1025824213DD9B92623AE747CDBA14561D8D50D1F122E5E5304748810
280B4E05EC5F799B0AB83951DF72CDE87C17070F389AEB059C8326ADE7ED0997
8F47793D72EDC4BDD674B014CA91ABE61DED5B76BE01D38272022F19C2B1E1E3
D6810C2B2860CF20DD685001FB5E4B2EAE471E13FB7C547A3E6FA6F30646FF32
3A6F70EE6BA3015257AE64694CDDC9B23189A959EAAA35BDCC2531231ECD5442
C2CB0AB322A94564FB8C061355606B6A17765975AFFF65E11DAACFCE8B026EAC
2C2B9B391E322270870BCA804D8B09E9B82B064F37830256470BD7DB22C88BAA
A6C4F45C0C6729D976E9F6CB57AE18A80DF7F7E1A04ED4AA83F57AB39C78F13D
91E1B8E6D5249D6C8F2F98B3001728456C3B551E1B9D08594C389DFE3AEBD78D
CC9B3FF7E5B52FCD1B1A5EBF61EDC2050BE001C3C12AF779B7A3DE9AD871FB1D
9E7BFE9976DEFCFF3EF081DFFCE6378303F3A1805B795689BD02CE215B926A50
C0AFCEA880BD5E9F6661D9108728B661BA623C5D8DCCBACE2791C6128522C39A
5110CC3EB13647981BDA17C2F078056A0E861CE08C6281A17431DAACE8F3E30C
BE94D914F82B30C13EF7B9CF7DEF7BDFC305F97490F2F80A795EA09E21B5718B
7DF6D9E79E7BEE21E06EC696882A92710639CFA782FAF46D412727162E58F8E7
B57FEEABF58D4D8E8B2E87995D4267375BB4E8539FFAD49D77DEB9616464EBA5
4B3D127E727278EEDCF57F59A7A9E0D1A2C65526982F457D2D32CEDA43B38422
DFF296B740AFD3EDC3B7180060B1D669A79D76C10517B070D6154486AEE8D744
CD21E148CB574DD07453757DA0D74559694DE6E921AC19BD615172528E30A0CD
B5E0269106C2C0481F8F67513C9FA646AF6D468F995B8B73ABA8B2AD86C21662
4717FCFACFFFFCCFB7DF7E3B761ACC11CE361FB3D7F5713558242B57AE644B83
73CF3D1757BBE4924BD4788E162161A56CC8C12712D13757767A5A5D2F4A2A99
68B384165577949836795DAD57E92233AB42CF58CACFFDB5579290046D130D40
E780783FD897A50E0E0EE07F5FAE9972976605AAC67F1D3A98FB1CC289911ECB
E4A5DD45CBD27AC0F5563B1A19CF866AED467DEB3F4F2C84C64FDB4B5AF16038
0D54C0E3B9479C36220F6EDEE0B9AA226CA6B29302F6439813F93AA5A6EF8153
B051C67E787D304D1A3E7818E03351C345132EC30E5B19147069FEE0C6D7360E
5607E66FB564F9B3CF0E55AA1B26C7A54770BE28126D43AA5E52D4156A4909AF
190F85B20CB6F055A7DE1983895B9426E6F4B0F32C865AAF114645CD6E6EBA6F
D99C9DCEBEBA2832DCC216E3448AF025609D9345E84C0DA57C7C5DD73E615480
F488EA265D0E2D171F7698B368DD5F46E6CF5F1847A50F7FF8A3FF3F69EF0166
6B599E8DBE5F5B7DADE9BB6F606FAA084462073DFC62ACC9D16308A868C06305
454090A6C22FC5129A28CD02BF35B902C18209B12497F8A368148510942E65F7
993D75F5AF9FFBFDEEF91EDE5933B335E75F726D67D67CF52D4FBD9FFBF987DB
6EDBB2F9C0E6427BB639B775D3D69999BD9A2733E8C176DFBB7752AF330B1B63
910608EF45295F2C94A1339DC546B0FA659ADD79276BD46579F084464BE5C213
4F3D8661D9BC71FDF69DCF960A9AE2A3D7F5A324F5ECB2E7962C05E7A080EB84
6A76C510F4F2FEC41C532292A8EDC8C03250493930CD62BF73CF7057EC63A9ED
6382655E854B8B3E19A592492925461F45245B1F426E0AF68FF13A95E1D8CD13
A95106C0BAD42BA25FA19F7EFFFBDFF34FBCBE4472542E0D312CA4FE967C213B
F3706D6DD9B2E515AF78C50F7EF003DCCB2D785CA0DC30AD66136691EE80343F
FFBC238E78243B052F13F97EA95AED773AAEE34AFB263C3C2E059F12237CF6D9
6793F7945D4AB8F459599FE6843262900ADFD3F20F031B100D787EBAB3647E96
EC03B1E2342BC997042DC819A1AA602F7795BB8662F1109454CA3E9808FC8A7F
B91EA4D66B79085A5A400EA4844D6895046FA5D602F32529068E3FB6D55FFCC5
5F7CE73BDF614095D301E3CCCC169B1FE92C24F90821F2254E905CA118E1E38F
3FFEC73FFE31161BCC358C332CB31B6EB8E1231FF908FBAF0C10959BEB998BCD
842648159995779A4AF2CE07F498C936CFA08E9DD3B55A06552A3116EC24287E
8C487CDCD16C016E7EF027189AE4065119FDA45AA680550EB7540628FA4F54C0
6A69CB67994A27EB1D683BFA16D56A199395B5AF77F00D8141D9C111512361EE
011372C5A914E0E4229F415E4FBC18B7568B216828E0FDA7BB6BE0CD3AD186C8
6A140BD9235951A2A3CA3DA5FFC534683F519708A78C42EB0685783A2B2DA650
CFA94EF1EAB60F9454BA57EC90A3FDE834D6CE74004F5AE15209C67A9BE56DB7
43A8F346A51E74FDD7BCF9AFB048468A255570199C301B7CED5BEE0D24DA39DD
02C837BF4C97B55D126882BDACE59AD870035A7C1F6127F5A72960333CC3B54D
5B9932840B69EBD6AD501C98D39B6FBEF98C33CE60C66A20DA6A1978BA45D3C3
A4705A6E4E9ABF72BB520D28A37DA16D150B05CD3A393C3C562AD6A62667F0E4
DDA0BFDFDAFDB74F6EAFB8958F7FE2A2CF7CE6333921940B1BABDBEBD0F6B432
38BB3645CBF80BFBE43461D746A1A6069C9D9D9BEBCCB9AA5329975ABDE611CF
3BFC89271FA9372AA79EFAB7DFFAD6379ACD6EA26954313CF0ED35DDB4E7EA80
46A4DA2B82B0E00A0FA852910B4239F695AF7CE57DEF7B9F6E6F9237AB52CB62
C8E278717029B86944FF299B563E52DC25081189ACF2B27C4E618449F3D272B3
EC47E80E48AEC69238225759EA8EBF923F4470809C4122A8F1CC82D45746473F
F2BC50ED89A5C518E973B13B3F935FCC6487E1A6FDF7DFF1ECB35EA984F505B1
51CF5DCC2E1F2FF3894B993A8129D71819A15CD65432D333A60893ACF0C5175F
7CD555573129409B174F057528D5FA92EC315DC31537D28D37DE08FD21218A03
0F3C900509C447489C9F89407653217488916A2E75B30987C9B72CB97C12E0B1
34C26CF43D10E1302DFD014921BDF394017C1365CCE1227A88D7847097AC1031
5CFB285753794C85D38ACB526E92235A07AB723E19D8404F3DF5946058A89F36
6DDA74CA29A7C09DDD47D9151E9EE3C3725B3C1E0D410C354BC5F86AA405B5F3
6EAC248CE4DA66E592197D950FC71F4E39ECBC8F7EF4A39FFEF4A7D95C64B5F7
85916AB661A66BA28CA63D12DDC5AF7824F82B82BF356DA67D0C267F20AE30DB
CB8B7FC8FE4F73E542AC55B34FA95450564C98241E27DBC2414E3853126BCC24
CF92364D1C8AE7A2296E319D6D4301477EF780BDFD0968083B5C1FA972D1D350
58DD704E236AE234E9C73A06D8D508D954B74ACC52BFAE4EE26ABDD20BE30432
D1D6F231CCDF066F3D9AA45A493B05AD8093A40D7F5A257D4B4D971B8F749BDD
8286750D551A56555B3061AB69656920A14DC615B8B4F6AD80C5961225676AD9
81D8324B30C4A5361BAB2B235E22A0BC8124C29F9250586D7EC516140DCA82CC
430F3DF4D1471FE54E37838562DAB2B12C04266940CC975AF4CE45EE881B91A6
4B1AD4AF6844B06928372DF69896DD1DDDD00D5306BB2D0A61D5AE2B781AA51D
0531B1241025BAE9A9BDC8799DDAA566733E731F6D6D89A571BFAFD94C023FCD
02E8E3AD66AF5E1B4E348F8B564BB633AD49FBA28E6ECF12741215D6AA30ABDB
AE53CAF496065DE3EE054FDB01BA5632EDAF5886E4B8A94C9819DCA765008BE6
FCF3CF3FF7DC7359864B64935AA6AD65CB898C9039DEC782337F95C358AF2600
772BAFC7E5F1746844E34A923EC9BA77B1588D8D10840948E5194A096C905F97
ABC1E4A1148718B38919D9B66D1BF965ACBCA509F3AF3441E8B5F0439DA45843
557029F1B5CCED7627D6AFDF9B056F4B5EA1DFEB8D8C8ECECDCE8E64CCAE599C
2D39E8D0439F7CEC31E8697C33C74E9CAEAE5CD444B4D92BB36B2FB51A03B9F4
C9F8B492A41C3081939CAA70B53A4E91ECDC1B5439DC36787D2C4E2803668531
9E6C1E4062933427585739970D3B1988034A4A07DCFACC33CF84AD80BBE082A4
1091A08818E66A5919925A8AB410D58557C67C41D55D70C105783CE29ED80043
10184C7F8AF74F31CD4CED6A0A122B9CD401B80B5EE184134EB8FDF6DB856480
4DB5A923A16BD9B8825B002F8507C0A6302B8C575BE75C36524187C7C635391A
141D18E1D7BFFEF550A212A4319D03F166046B2AD737913878171667EFA31906
840F2B2F55AE2325642D03CE7585BFBEE10D6FF8CE77BE23B9C33F45012F4A15
D8FE8552260D168B5574977BC5D7C918068B2EDB7F5976C446F1C5A297ADC934
CF7FA7522E6C72BA89B7C4EF2904F4C8789574AE1DD50B50C0FB4FF6261C3BB1
8275914A169B1AA9A2ED96BC8CD421D222B9AFFB2CE0A2B19D5131788EE5660A
78DA8F5262ACAC144227CA5F741406132EE2C20C72B0DC5B49D4B192C0524F25
D67CAD38D9ED8F0F8FCDCFCE459682191D355B817A2EA4B1221FCEF27522E24E
19550C03872DF7924D1CBB5A29B547C3343108C8CC75F527CA67F94831885ADA
B5C8CA3ADAC1DFA5CF4600016E271CFED75D771D762EE3C469DE60465EEAB9E7
5106690E8FA3AE5E4D901160E2E48D665FF18A57DC7DF7DDBA96B934D46CB7AB
E57AA95809C3A4D969D7CB43AD5ECB56DEA6F59BA07A5BFDD6BAB175DCDEDA63
28D548A1899D3F353755B48BC71C73CCDD3FBF7B62689D7E429DADB01DBBDCA8
8F4001C30956B60E29C7495F5981E3E990491CFB7112F4FA81E77863636BF74C
EDAD141AD0A449ACF992FA613708FA382555519206195022A6D53934545F5868
F1358B458D60CADCD60412E7ACB3CEBAF4D24B258526F140C91E99AC6103061A
AB0B541EE662D88DE25EDC1DEA4E9ECECB4288AC5FBFFEBEFBEE236D9EF83D74
50B8924C394EBB72CD9A35D0527FFDD77FFDC31FFE50D03A8CA7894A603530BE
3FF1C413FFE99FFE897E06BB6BE15C7A6FA2C8A5E0C4ECA5839F8F3AEAA8071E
78404BC9D4CB83A584992CEE9F28C9B82DB9DF3C3BCD887E0A652FE88663E3C3
33D3F3D55AE5D39FBDF2AC33CEF02AE5356BD6ED7CFA59F8987194681E253F28
96CB4114BA6EA15176986E67360E6BF7E69B6F6609AC9377C015D129580C41F3
92DFF5652F7BD9F7BEF73D930E53E5F96C0E26C303F499844D93782E8C392E45
2544279865B8185BD1FD027C33A352524440DF97B72B65996FC265AC9C024CD4
00AB6005A06EC2EBA0BA30DA5295400F58189825F324E63F9341F82B16129B16
13212C716C955772F35199A9E27832A34184943066E0D9AC0C02CDB02D516959
9B5B5F72D2745857AC17A7E0C3335C74D145E79C738E746D910529D6245B5C08
505F4C43CEE96A829B7B41800E03DCD1E4E2E096B10D627D1399C11B89A761E5
BDE5F1BD964559A64624B5F8A022A657343E1885E2804BA729337728DA027A17
3B6E6474A8562BEB805F015350F00A8E1DB98234946224097D498F1DB1093C55
88FDC88E1D3C62D86939CDB97569B2B1E0C1742A2BABAEDC72AA3B48472A8CDC
34F6ACD0B7D93A1027971CFDB4307971AF661C6A2BC072BA56DC828F9BAA82FE
CF2A3B69D576AB96EDA556ACAC769ACEC7713B4D1E2F37A67BF38E5B6C45BEB2
2DAF5C0AFB7DDB7193209456831C13E9A12B194C13036582E03889A6AA53391F
8B49763B90705DAE1DB9B4E8C01C7CF0C18F3DF698C9256719ACAB2AAF7C9124
B14878D3E932FBB9C98311E3CDBB30F069658430DCE9679C71C66DB7DD46BB93
A6304F842C85DCA6817BFAE9A77FFDEB5FC76ED57BCD74FCD5525F7B1FC68B98
B4CF752F09AC6C65FB63A36BDBED8EE71535205983E9DCD9D66CBD54D7FD8AA7
76179C02E551A22C7A6FF5BA8EA761F25EFAD2973EF2C8EF9F7D66D2730B199E
1962DD2D97E020A653B3D323752BD634773D5D996685A9EA43AD2669383C34B2
676AAAE895FD302AD8956AB58E5374F4DB6FFA3EF4999F6A0C4194A581B12731
BEC54E67719FE3F19EFFFC23E1626653ABC16CD0C1183BE10294CEA9B274064C
723354207A22C9A98F856FC5CA5B422AA3D645EAB83EF5A94F7DF2939F644893
0D61E08D5979C76FB30A456EC744353437069F05B21849562DF3EE69465DC9C3
245FC816374C154BF657B25F0C1E724B48B89524C95AE1A59EA42CA98065D56A
551AF46C18194AFB2241CFB73D2BF15358FC1A8B575D6C54F0A5AFDC7ADA69A7
D9C96293F662A9E2F7FB4EA1184338E2FA892FF8263CB91892764E06641A22B2
2189742031A1CABC2BFC4C4B9C582467B153F5226B1DBE6150DD7C59527CB0EB
30B5264E810570C30D37501FD330153E5B692E2B4547D848BDECC34585539889
900364EFE0002C7528CBFBEFBF5FD889E5BDA465162F421166B69894D7971005
D78CF02A9B224304D64060401C415A84CAE0E3A4E168656557A95110C1E7211D
1BF58132A0E003F5E2E4D4A531074347E511B9814E8E03DD7F9935B47346CC7D
8019712F312ECD6A4B3BA777B5F2E68F5C09A4EAE461495EE6CECC856491F8FC
CCC29899201299C9402D57C0690EFCA102488D160BA22CCD986AAA017A857A03
6F50812C2A57F4962C958A2A5CC25829254A0CC0D089E763D040F4C33409E1CE
7AD08249BFEB2DCCAF0DE37596AABA0EBE77B3960CA562C1762D3F09FA415CB0
32384286FA716C47FCC85692B80A0A587555DAB4520CBA97E05C55B655C9B6EA
167672EAC75A376B2A4AA51E2A549B4127B1EC42A5DC0DB49117F9BE96D7E50A
6526BEA1FFC045452C8BD48989C5AC72D01F0D2621C21306409A7D71DEA140D6
03B36366875D195B0136E282575D75D515575CC1800D6F447D2F2234353A9A8B
7AC6913A4C6BE4F2B94A499F8995C0FA49AE22D94156CE434C80214C7C2F0FC8
9B8608BEC406875541C802AFB3881623C095B639AB4257DB00F2585C6702CEB4
5277E3864DF3F3CD56A7D3A80E373B9DB1A189998599CDEB0ED8B16747B558E5
BD717D064E774D4DEA66BD2AF15CAF1FF58A6E11B6BF6EB7E2D63192C542054E
30847EB9D4C024B69A1D4C5C924201F7A3B813C5ED4469358CC13CF2C8E73FF0
C0838542090ABBE78745A7323434D2D33A20E9F53A7ED8D3F1154BD7C8A78B88
7AB5658B667BC731D9EE0DE804303428124A10348CEF9976898420CC30910C8E
59B6247C2878DF534F3DF5D7BFFEF5A38F3ECA819544BB48525E416283AC9894
88872C1482C5F833F48D6E5F61187426E58AD9D0104B87746B04FA8A61416F46
BA6932ADA072FE2089D4E9D516F21D9923924851922A58C35EB49898490AF068
FB3DCBB51B5EA9DDC9DC3B572368165ADA0E8590EDB4741572CF0F38F8198561
A8295CD2404AE5A45253220D03112A919BB2434822C8D3C53DC22DA8111912E0
352568C1A4032F220D13190067C68E4068897F50045B79E119E1C712B4504BDB
0030532B247103B1351A40C27DC17EA5B2E72961B17808FF86C27EE52B5F79C7
1D778821621AECA4E3A080635CF7CE3BEFE4680870544EA4D490F881E8690EC5
F28499C9404473417A10EDA35E5CFAA088FD273228DF6B4AD66A92B780E45C60
EEAC0C61AE56F950F2481D9A38EEFCABF455A4A32F53234A9752D8CCB2098C43
19AC29A295050F2F255BCB3DE08165A90CE48E99ED5386015D84130A3FA3E032
3D0C95DC6FF9F44C28BBE5A9D8928E800C8A17A23E3B01CCA0082E480A6B2A0A
6A9DDE86486D84A7A5F93DF42E751DDD0658CF7556ED54750A79042B4DF2D670
D0BBAD58535FA54A136E34551ADA9907ACEC729A942DE8605CCEEAA631E6A3AD
5B165ABF5069A1046F278CB236AFF078BAED8E6B3BF855B8BEC5D2BDECB2CBCE
3AEB2C93C0400ACAF9009CA00F7CE003DFF8C637A433A6891E151A7CD1C132E3
120D1AC80F8A434CC222E2A5212AC9D610E50DBF251364E7ED77B985D38CE01D
F34E3A209AE01298B4724A007E691A9466644E7852F12F7C713854424B22A790
BED032990E376EDC78C821873CF2C823FB489E9BED44240E86CFC8D0E8FC0246
CDAA551A69E274FADDB1E109BCCCEC427362449358CDB7E747EA238C97462A82
8A6558CFCE692069446CDE74F0CCF42C3657C12B63AE5DA7582AD6607FF7DA2D
EDC8A67E10B6F05F9C7631E9AEAB3B90E891AA0C61F5B65A580AC5B1B1B55A0E
F6E6B5028EB402B6B5C248323020B719552C0D6D3D495825975F7E29F5199785
5964C54992AD255A59A09226B8462C3B76A7A0FAC4A520E20780A9D40D6CEEA1
F28621D4FAECF038A07806265848F665FAE9D561E95050BEED6D6FBBFDF6DB31
C70C3B8BCD65BA230C0C62E9735D9254442D8548E4F8808C384DFF2F5954BD14
436E51A53176B056E18D6ABFDB0B026DC91633DB4E43973BEDBEEE66DF08FCA8
8F3F5989ED41A647A562096A586FB940EBB63409F8D66946FA4AE743A0AD03A9
382B6F172F5C60345D657FE280F5EBD793B59FD259DA4011CD64366FE0AEE344
D00AE63230E9DE042A2C2827899BD16EC01832B6CF835908C8C26295B722A728
9157108C121E92951B586F2C0DA224623530FDFB3407DF492A4BD6DBE1871FFE
F0C30FB36FE075D75D47A0B26035F96A560E3F16A64311F10C2CCBF898C55DB2
F6B8D3F92B4D4086EF96D78B733BE3678C3054173980B805E4480A567A3F6C89
68625BCC615F51FE70ADDA461B318E6D9C138C4B208AAF0CB1B663C70EB31928
0D5919C0742910DDCA09B6326FB544F3880A78B9F63527C254C3664A7B29AC97
FF59C43C38BA5A49EFBB6EBBCFA7226A52681864C1988F97A9EA42A7DB6D6B4A
675C396DC4EAC0D8D9A0DC71E56B9073D989B5EB9CE08F25CB2E7A2547B353EA
D3630E54E60ADBAEDD8EB4076C6555461D8DC3D29CFB45ECEA3472B35A6158D0
BD345948D4824A7CDBFD65121202C235562EEAAA7A27F399485DC7E48B54C772
75D14913E8AE24F27130D63F5126C40DD0F4B7F3661252FA2F5E0AC9B6B07878
3B993E73FC65B848BF2CB12E953B3CE2587347C820D3653AF4D0431F7BEC314A
F238E387C793937832C929E599B9130BDEB4B7049B828BE382471E79E47DF7DD
878DF0F4D34F538B4B9465D14E676F452253366DDAB46DDBB67D70668AF128D9
506E4E3CCB6DFFF84F279FFC4E98551B36ECD76E61109D99F9B975E31BF088AC
DF874C7C7AFBD3C3B561D8BC8F3EF17410F9AEA59B04C3CE7674FFAB686464EC
CF8E7CC9E38F3F3E3B3B0FBD8B850DCBAF58A86A2FA1ABFDDDD4EA8751DB0F9A
50C08E1B790567BE3539541F89A314431146292E582E57CBA56AC79FEBF7BB61
EC5B30E1EC9821682CD64AA5945731DA595C712DA5BC9D31C371D789D792E658
793194C4533137B0BDB4AD0A9B0DBCEE75AFFBE10F7FC89A3089C630BEC774BD
985D4C49AA3C2F62D6802DF7B3053D2435A614D310FD7224C537F401FDE317BD
E845BFFBDDEF887DA39FC70EB24CF291715ABC490910A9C176C2A4D2A4E3FE9C
C4B11D2F893558BAE815366E5AFFE4638FEB0E54B12E6FB02DE56747619772A5
962B9566B7A37954A2B458F07A41A869B3C24C01A78B092171DA0664A232624D
947A5FFBDAD7DEF5AE77E19B9B6FBE195A87D40D0C3CB0A121DE05DFE3AFCC59
0A0888A044AA224DCC5B2AC158F9D297BE2448633C89F41A634CCCCAB9B2B9AF
2EB8E0824F7DEA53B457F03D2CFD8F7DEC63C2E874C20927DC76DB6DD246491E
5B90F374D1240CC86D2FEA010AE394534EB9E5965B606150CA505D99DB50A223
24D0C0B978F8EDDBB7D3E849B2AE6AB43CB856998D369D5DE1C8E5225F913324
C909B1A5EC98F167F96679BDB8D0748BFC25CE806E9C988C5CA23865BFFDF683
7F008180172417BDA40357933F2A070A700789A9215848FA91FC06D377FCF1C7
DF75D75D149D029E9732303147E4FA828931A3EE52946FFA5BA2ADFF74054CE0
55765F0693F2097DEEF4E7563B4E823F2C0E80B9FE1B856AA7DF6B07FD58C5CA
5123CADD9CB86B63774DDA2EDBD0822ECCE2B01F59DA9D758A56B16BF74552E9
0AA5481BD4B83814B0975A8E0635A76DA543D00E1C5F3CA695A449A6B23DB76F
3BD3513C9B25FF1EB513ED625B163675A35617DC86E5E89D42554AA23A2A51D2
DA083381CABD5EA926C00E85D548D1E4E44D5920D37098205ACCB2311C70F4D1
473FF4D0436C88C45CC9C0BCD040A719CD76586CB480CD42720C1ECC81950095
C9128F07E323A92C1BCDD2797C033F8AB95BF2102779031B73193018CEA80FDE
E2A0830E8227E6E4EDC2246BB3280D3816EC7C2E61679EBCDA0610F49A591B83
C5B2FF7EFB6FDBB623635371C647D74CCFCE0ED74718D1C1BBED9ADCE56AA7C8
C5286CDFB57D68783FBF0F1FAEEAB979A7C204CE4763746402DA888CFCF4E259
0518E9C28A24557E94B4836821497BB613382E0C3A3DAC7B76EFC5CB62EB15F4
D5F4864C6C8DC082DEB56C9C156AEA993C045DAF6B2AC45B6EF95FA79D761A06
1FAF93F92E7B85EE40CC25317BC5FB142884A9802DA3AE89213B3CF081071EC8
025913782C1FBE1457158F67BC02234FC6DD81BE5722206427D3F9938B33FE49
2E492987C71AE5F4BFE52D6FF9EE77BFCB8621C2E84B424A8D54CF0A8A52A341
AC098CCFFD7B799625D1D462C18D82A858D074DE9BD6AF7FF6D91D1A63E95956
565458AA78AD6E385CAFCCB5BA25CFED691309EB0D4F18158A6EDF8F60790571
466E9AAF7E6E36B3A47DF920705421A9CF3BEFBC3BEEB8037A8E2292B81E4692
210B285BC97CC9A411C7848A56F61B8E871A80F6BAE69A6BAEBCF24A8CA1D9F3
510AED78533B231D8372C5F5315C5093EF7DEF7BD9A551973B6745BAB0E577EF
DE8DA1BBFDF6DBFFF66FFF76792D8DCA82DEEC89466DC14984F98B7B315F405F
4130167C4E16440D8C06362F83587854F603E7AC510949851B1E8C202333D562
820C4CC4E94064EF2FFFF22F7FF0831F5C78E185181F8C1E6EC7C396D78B4B10
4519D0507AA86610D232E0B2D75F7F3DA940497465AD540969CA1FB141995FE7
AF5CB474E5252AAE32FBE6D8638FBDF7DE7B95E1D68BF832F33B7247F92B4D3A
BA6BA6845DAE6E07F6A69577C01405BCDC6F564B9D5A93B065E03370302D8334
A38E847C8BED04FAB3945AC3915D53E9817077D3B0ACA2BA6355B0D352270ED2
50452D4BB765756C5580168C9320D29D07617DF7E2B094DA8E72A2141E70D2D7
A54A70829DC4B5D9402DB29DB6ADA6A2785E597063672DF83370A7A3AC7454C7
B275FA667E6E6478B1F05742AA42A12323C9871718942C72D8C424EEE0F7D8D1
279D745292F5EB843728800F19CC238E38E2E1871F66304F2078CB6D476A6BE9
3B6E4EB4097D302B30F1A7A38E3AEA8D6F7CE3D5575F8D2BC01426DA439AEE98
904349F0CB1DB96C881BE5F5A595AA32226A14DAB4862DA1EDA0ECE3A348C3C2
E51F0A320981525169D84EA3D66AB537ACDFB873D764BDDAC05B43FA958A950F
7EF0C3B7DE7AEBECC22C0C3BD776A95AB48F02A74239D5CAF0F0D0DA24F2C2C0
2A15EB90099D7637087DDD2B5ADB608157801CD16ADEF24B7064538595D30AE3
66A23A590E18AE6FB35828CF35E787AA63FD1EDEB65129D7A025E75ABB333672
05051C27BA1E49C7A26DCD0F3737B750AB55FAFD20AB016DE77B35A1F720D296
533E0025954C8CB9EB4C3F7839B28653C2E8BF6871B91AB9B49823110C0B51A3
ABF97FD02258F458DF0F3EF8209193EC92CB1719CF59D15FF08217DC77DF7D74
C7A9122871483FC4076683614654B807F8CA92E110134D27961605D092605AC9
B15CCB0E82D8D66DC0B3761CA9AA963D4F2FADEAB63D738DB23DB176ED93CFEC
3EF4E003A0F6DAA18E696B430103D5F5B156C32823553014304798CE872C4E19
0A9183D8B7B80E0EC33EC15667CD3BBEB9E9A69BCE3CF34C46776872329E4FE7
8F941AC439B325BB90D6D242C75CC0C1FDCC673E8341938E08A6ABC76FA0FBA1
7D19DDA2EDCF841307108741FB9E78E289B206C48FE182E1E6FFF33FFFF3279E
78E23DEF790F9C0049FCD39F236719E7944D70B98424A0628E09CEFAE217BFF8
BEF7BD8F17617F37499472AEB1AEF046B8A6198533299165192BA3AAD2D4A902
9B12A4FDF27A71959766D2DBE0333091C1E7970EC45C8DC4E04899354DC37DF4
BD4E33AE6C46AD2973656AA449499AB7525FC4B92CE5D2123F9E650B74946569
C9C13C97ACA83250CB43D0E9328E08F35222A35753AB6C21A39676F192781B65
85998AE22AD571FBBEEE07E8690D986619C18C6952A98D5EA91C06E32A596BA9
F182E758B61F249D246C3BB8858E62553CDD6130862CC25EB3BDC88ACA709195
0D83B9ABE29E6E8CA40F9B87951C47816E41A86653856DE0DBAE536F745AB385
523909C24D1B363EBBED59AF50F0CAA54EBB093F9CCA5560DB981726F518DDE1
8E56B9774710005E04561734023B9A0C844944CFD1A566DCDB1C43B3ADEA0046
C44400D0BDE11E645A97B7E6CA97049698DAD263464C766584A3F1C0D8AD279F
7CB2E4927309F91CF31DEFCB9E0252B42958512C6F1AA67AE5A89C094BC8C0EC
7D308FE76A401A89C8A2B4B2800646094AB754ACCE379B1BD76F9E9B85E7BE08
269C5B98DBB87EE309279CF08D6F7C436FBCD27EB0CED3B858298F745A71E8BB
13E39BC2401B63D56A19633533BBBBD99A29955DD85B73CD9975B5ADCA8AE1F8
C6693B4A5A71D2CE22229172DA610661D96FF3D6A7B63D6B296F7C684DAFE7F7
A3796A719C1E463D3FE84919D225977CE2AAABAE82DCC882B1DAE816BDC2789D
ACFB24EFEDA372526841BE89916E2A60CEBA949C62A0F13344B3D9303C27FF5A
2C73C405A5B11DA140A2FF06825DFC55EADCA5B2C5AC2213EC92D96A90420D53
46D209A816280F7A5DAC7CA5421A70FD071A79E2A118B1CB1F29FBCF565EA436
6D1CEFB4DA43D54A737E7EC3BAF553937BA092CB156FC7DEEEA15BD73EF3CCE4
E878ADDF0B665AC1BAF1DA820F93DA23AAA299C9CD6E0F7BC3F6E384AC2C1224
E4330CB862CAC0079572924B890289B32BE5311801CCF545175D2421DC3407C7
A99C5C93812C9264B11E89A0536E3076C83181182C1097D21DB2E170EE482B4F
5780D791853420857105D8DABFFAD5AF0859C2AE86AD4DC5265868AA13B1A8B8
0225ED24321A0F004381BA8D8A50F2D6521C2C251618799A1D826FA0BEB79792
DF0992459C3F38BEA47691D1B056AA175746DD171715A7D5A42E5719B9187F65
46809696D9037B3510A8CA5B2C9BF6287E15F0202D152A695C070ED9934F3EB9
75EB563C1EBE918E581C1FAA6D662EF811B816ADA877BCE31D7FFFF77F6F62F7
D4520FD808112D49432E5FB1A25C8D8B2CCE205C915419C7642C5A499A072A1C
979D3A4D305737E9E18C429468F96A6757B2B50C83441C556A8B6D6D52E970AA
EC54535162093675C356AD59AB50DF291C97D0D69458F0891228E00A3C605D6B
A47B1A279913BC2BCB07630EE0EE4D6A7C968A4AD5FADAB50BBBB661BE3DDBBD
E0BCF3BE7BE79D4F6D7BA6D7EF2ACF2D248BADC018CB617F30ACE4534F3D1503
4819C87528B0792931A2A2D2BD1AF322580E148F3731FCF8123B65E7CE9D588D
981D214B5F710AECBC6F20B90229578F3EFAE83FFCE10F2C3623713D751FC796
1BE4852F7CE16F7FFBDB3487E0C94A56B9E92920479597024A7D298D27263B4C
64A82C69EE295D119EE1B92C3633A79820CB0143013CC1ACB3DC776DF59BFEEA
CDDFFFE7EFAF9958373A32F6E8E38F978BD5C0CF7AD80D4DF4FA1DCD36EE306B
05C15A8492EEF9A369E2AC5FBB65B8B151A5E585B96072CF7C46D301B5A46C37
84E9E6B889EB59E4C94AFA50186DAFA052AB37DFDC6539ED5225E9FBBA914EB3
B5C094E7AEC9DD439589FD366FF9FD638F14BDC40FBB9572A1D76F3A19BD6BA8
81BC56ADE1FECD09277DE31BFF8035B06662EDD4DE4988294C1F37A19833F2B2
2C0BC3AF975D76D925975CF2F297BFFC97BFFCA5D087F1B0238F3CF2A1871EA2
80C30733248873957332AF96D3DABC79337C9D5FFFFAD7CC474A85AE32E8D6CC
558505FDC31FFE10129F29493357A1F21A27C9C941BA3DFBECB35C55E2F1D0A1
A12E7FEB5BDFFAE52F7FD9CEBA0F41AE410E4E4EEEA17E354CAEECCA76D1F6EC
C8EF158A5EE087D8C96547950AAE6F29CD728BD1F4354EBA5C525E51AFCB7E2B
2E95B4868BA27872B2FB9AD71CF3D39FFEC275556168786A6A7EFF2D9B1FFB83
6E085169949BCD1E4EE9FBA4517C5819A4C419467A71DC2A95ACE1571A9B5685
64DF059160E70D925967C5099572DE030E38003FBCE10D6F200504E191B8178D
0F9A4D62600948D2AC35E43032888DC3603C3DF3CC33D41FDC1A1C6D5370701E
05C6A5724C96983826E05C12B7E6A4ABCC65E4AF2609178997F94814168251E2
2B8B4EA279272E292FC55C1A1D476E73E2A7A47AC70CDC71254BD20BDB6DC57A
71C9AA4A7244202DA47931E7D7CE5B2242834AF5D14D37DDA4CBD572E7551ABD
51DEF17B92104010E3A55EFBDAD7DE73CF3D3429E86C6110DEFBDEF742EEB318
C684F098C89581DC213F7818F178F090FBEFBF3F8651588D643CF9545232BEBC
1A4A2D0DE30FD837CB3FCBC3DA228B5466CC61A1E28E7865B1206D83BC569208
899354427548B15AF7BB1BEC42CD81A19FCC05DA97B5331C4721FBD7C90095A9
FED571955580A8D5ACD1319CE0B6154367B7E3CA64DC8570F1CBA5A7A6672636
AD9D9A9C3EEEB85761A869A648359A89A463512CA912F154842262DC288E0449
20010CB5945941B60C7F60824336A619AC3569E984792331CAB56D83BD79C081
21804BE5583CAE7CEC052C60953BE80CF45A793523E3344C03D356A04A66510F
DB48A8A5E92AD1C4F4C7844CDE8C5DEB153E408568E734D37856E9E7C04D4B7B
61C5704AF6D2D69A8935537BA7B35E205ACE8F8F69CA75DF8F182B4A1731F465
D729C1B6EB0713D06BE3239B2BE5B12870BB9D248ED4BAB59B34583CEC5A76E4
15D258BF69374EB454F5D27218FAA5B263397EAB33A9EC56B19CFA416B628DAE
1BC12D7430B9581E1E1E7FF9CB5EF9B37B7EBE6B7A279C9120ECD4EA5EA5EAEE
DABDB35CD65B2849A389F1B1E9E979589DE572A5D36D572A90808BEE91D9138D
461C313256565EC25C291E468A68618E41109F72CA295FFBDAD7384AE79E7BEE
6DB7DD068F96B1657ACCFB08E9E3AFD8E46C8CCA48B2590047D34C7ACCA93C29
A80CDF94CFC9B913DF5A0C70D9D8B24C1909A440A14CA4AB4435B0A28C106B7D
6C627406FE77AA466B85D80F60B78F8D0D779B2D0FDF34EAD0BCDD1E8C2D6C3F
77C3FAF5DBB76F6F36D5E84801B2E395AF3CEEDFFFFDDF61089787C7B6ED9AF9
F2976FF8F8C597F8511CC449B3D53AE9A4B7FDFD77EF3CECF0C3619CEA028691
E1858516CBE6131862DD6E054E6173C1815ECCDAC810404E5E43864FA5130BFD
21FAA9429F49C4BFA08DE00F3DFDF4D35412694EFE971AADB64D2A22D3B8A67A
63C4023A180B8F163DC3093987F9625F4BF1C66825F04B219DC089D85F583C52
5E8C5916ACC072054CC8719A37AE171DA6727E2EC6E82495F8A94F7DEA861B6E
60645EF4A81468EDB7DF7EF8E1D5AF7EF58F7EF42381A799024E1965B5949EAC
6B141764B57A71F12748C689E7840286158873B1CE31BF44774BB525DF9ABA8D
6E34C58EC9F325CA4FDE977E3C874B308C1C1FD66B0A49169E9F7683D462328A
E018CD30962B426E1CB16F60CDB05D121E5B948484B22594B50F2236D1A9ABC9
0173D2EDA50CE7F815EB99945E58302BDE48A2D6898ABD285D6B39C369BCD6F1
0A7158D1788CB46FEB7223BCBC975AAE16D13921A0D27D718A3A3BACA234F155
DCCF1A003F6379B06A77063DFC5A19AE4FCFEBBCE17063687A7686F69C408899
E6A0654FE5A4B2E802B532E10B666306E95BC0E52A8D81ADBC9052CACCD29CF8
D66CF387C3D89B8B02D64C46A83C4E2970DAE50A98D16C012ACBB9EF7AD7BBEE
BAEB2EB2B8ABBC464860DB6A29B1124501F6172CC577BFFBDD3831D34183A904
73FF8A3CB70D1A2C468ED5E05799C8C0C638F6D863EFBEFB6ECC3A8B8B3928AB
2DA04AA9DAED75D7AFDBE8F783D9F9F9EBAEFDC2D9E79C33D218996BCE95BC92
EDA830802070CBA5BAA5701DACA183317123431B3CB7E6F754123BF5FAD0C107
1FFA9FFFF99B76A75528C26BA946719FCCB4985C4717AFC5F080A3B833DFDCED
87B396DD0F93EE61871DF8FB477F3F3A348C49DA35B9E70BD7DE78E5DF5DEBFB
61BB19DE70E3B5679CF93E5BC7C5DB091CE05887F5533C889FD46A8D76BB5BD4
EC719A309D2C98345E582FCBE95706844A70B99271E4349C79E699D75E7BAD44
8FD967D7CAFB998BF9B20F056C624A053B2A768032A02E92D820165778E4694C
898F45852AC92D8A51AE48E99C351014354C7877C5E78424C4458E3FFE7FFCE8
873FAC14ECF14623E876CA9EF7B727FCCD7DBFFCC5D38F3D592B798D4AB1DFD3
6DAF86471A41DFCF6A0F74739EC08F082AD65DAA6CB7D5E96E9BEB3CFFA0FD76
4DED2DD7EACFEE9AAA558B3B3BFEE8F8F8D4F474AA0159D576B7B318A0C3F440
35EA9CB25EC4EF7CC7DBFFE55FFE85D84B49CF889210F382AF6319458103F072
332E2474198C4A518830F623F97E293963BA4870F24C04C0A566F52D079CFFD2
3B1432350A203377C3199467607DAD6DB401353730F726AF430AB98F7FFCE35F
F8C217B06889B3E3801C73CC31BFF9CD6F98BA86B038E18413E0EBB3AE495485
AC2B1CCFBC14CB7CCF38E38C7FFCC77F64C8E4FCF3CFBFF4D24B694172259B05
18A2FB97D78B13754273C4C434A81C7FBE8FE990426A5E4176905C849B912C40
049AF2EE22F5B853A874E9A74AB64F0A90947AAEDE412D4542A93CC7CC0A13C9
02103177FAE9A77FF5AB5F65E5182EBE79F3662274E405CDF6AC6A69FF25B9F5
6AD93DCB2830B38D06031CF672D6C8048F2486B8A96C28A6E8CCF5FAF0634328
BD21DB5E5328C0685A57AEC02D9DEC763C4BD7F8963227D8CAC3DFFDACEEC84D
33AAE82CECACBBFF2AF5BB52B513F49B496C17BC524D1B4C97FECFCB3E73C567
FEE20DAF86A7281D7EAC9C2FC88C12B31796084FC11C71EDF1B195913D954A13
8613E87DD2AAB60D0E2CC9FBA8BC0538C9851283A26700D3B05C010FCC85D85B
8C0F49ED9308104A5AAE6759FC381827620F8A7D40F34EF85ED44AB69DB9CCE4
984524FD40129BE621BC726C66D9390C10ADB6805C5B13F764DC0B56B55C8775
522E55774FED76B361D5D7CF38581C0B3ACFCB48B20EC67A68D4D7468113F8A9
6EA290B5A09F9B9FEA741730BCAE67753A2DC840C7CE6AF693BE265C2DEAA446
CF9F8D93B6E30519C0AAB366EDC4E4E4EE0C345BB52DE7A52F3DF6DFFFED2741
5A9A680C3B5E34B7B0C38F9AE3E3F5D9D92928065D9AD9872980C59ABA3AAF89
2B849913AC3346A41DE64C63343FFFF9CFC355C2B863E36164CF3AEBACEF7EF7
BBC4368BC68281FFD4534F115C3E40D5C49F07ECF7818F007F448372F548F093
56BCA4DCB81C29FD0776B844084DE098D911CC8C89A9BCA289D5B7C6A3AE1CE1
7075576F75CCCB5FF2ABFFF875A3E20E57CBFD66AB5A281E79D0965DDB9EEDCC
F5466B6EBD5C8AFD5E92C6A552B1DBF6E1A6F22DE0E140EF7BAE46092C8471A9
52EE747BC36BD76CDB3915DACA0FD4F068652E726395CEC0F1D5CC2930C655B9
56AD946BD373F370D361665E74FE79FA8D6C45678BC3A2F21CBCE07EB91BB913
68ED327FC6FA2B7ACFC48008798DB09BD106E798437B45461FD634A781A49AA1
A460BC8466135D7029D116794109CEB20AFC2CE29BC6FE8B5FFCE2FBEEBB4F78
ACCCFD69261139B93C9117A7A36F65C5C4D0AF18222CD40B2FBCF0EAABAFA6F2
E063B0E101B730A3592A47F90A8F155F9CE320A15A0678F1573A948ED10512B7
A689A956AE174FCC78AC32E28A036028316D4D1256B321318605BFB219331D77
795A4E1C4795225B65187232CF3044611A0ACB55DD6A9251601CF4AEC4F5E7D5
0870950C1D51F7071F7CF0C30F3F2C17E115482EAD32625A79FDD56EFD4764B4
81E41275425B103FB0741E63482901E1D6ED77B4D51AC555CD87A5D664BAB648
82E8EC9BA2B2DD5C01074E46B59F684A9D4859BE867459B1B27FA97471C2D0E8
C8BC4E64D8C56269F386CDCF3CF5878DFB6F8433C6C21ED3AB23C51E660432FC
F9CF7FFEBDF7DECBA2F6679E794626425C11E9152872493EB8322E75F9E5979F
7BEEB9C4F1B1060F560E3949544EACB628979622F9FFA8072C7734D38222AE85
4346268256A0E875B37325B94BF7EEDD9B1AF4D7CB277160230F187C96B5BA67
26114B0A0B21345879D5A4D6FEFBEDFFECB6ED70295F71ECFFF5B37BEFAD5786
5ADD56AD5C0BC2BEA59C2CBB6E433EDB56A952A92B7590E7564B85E185392875
A75AA977BAAD30EA8D8EC10185EF5FC0CF5981F230FE343B3B57F4824CFD0441
D80B238DC3B2EC008E72B33DB36EDD9AD9D9E962A930393D39541D8527DD6A76
92B081BF2ABBAF5929C3D94E771EFAC00FB287CF9232FBEFB76572720A1387C7
8322BBE69A6BCE39E79C81221F13C72811E9030E38007F4AF2C69C2262A40F33
64BD9947544BC97E0715DB524A7DDA5F9202112E3A610551463EDF5E89C388F7
654619A6287C237C03A5056B5DCA51F00DA50975F3622FC84543C15BF1394B19
5AD9B355D15323B54AC5758356ABE83A33CD687D5DAD1F6E14146CA43EF6AFE3
66A425B12E12C8047A4C3104834CF754A8D626A716B61EB2E59E879EDE6F53BD
50AD2D74BA937B17124B572505A92A948B3A6FA1D49FFDF90B8F7EC10B6FBDF5
7F3546469A5A7D6AAD502E159E78E20958A0785A080276081850AE226439EC82
1812176DF18D323D21DF987B52E269A698303110703A61E39B314931BFB2B477
44D5CB500A951957146E8AEF71161FF56FFEE66FE0D0AB0C94A48C10C8720F98
5286C96321F6137C161E00EB931802DCE2031FF8C057BEF215769580E4A28C50
46089A8B99341AA22FE9494BF9B8847679162E8527C7CF58485BB76E255B80B9
206524657D126F952E65A2975547108300DD996C5339CEC50CF0A6592D19AD16
D3DF55064C4C2D058E2923403280DD332396CB25A69DB3643337448DCE3DB265
0B24C62406C7CA69CE548680C368DC7FFFFD82D1E54A60753EA3296201FFD1F8
F3C001E25FD2F853B9E747DB112F889FC91C8EA1A63DDD6AF59CA2AB997122DF
5656294A0F59BBA13B3D535591CEF52ABBA441CE96432108C7D7D1582F8C602F
55DD24E9AA34B0756F86673D07A38FA34627D6CC4ECF28A8F372ADDFEBC62A32
25CF6261B1E103E04B2CF85DBB76C91A960881EC14DB686B2FA91F59E7DC95A6
AE91CD25F8184E2EE38E0CEF09D2909FD514F06A8A90F84D951B3AC213200B8F
493A2C5A2650187FE6DB718A712401ADF20003CA740070B0F8BE038C4E82D8E4
1B56B4A475696BEF1B4430DC18C91272B8BAB57EDDC65D7BF68C8FACC96887EB
7064B96471934E3BF0DCF2F0D0B8651D044DECDA8D76332D166A9A31A735B7B0
306739BA22A85EAF4101E385A142C6C7D7ECD93D552DEB6DD6EECCB75AF341D8
E9070B61D42A14E128EB2EA1B6A37B5742E2C3B59D999EEB04BDA1D27A658549
DA0BA23978C0A3A3553FD0DE2FD470E04328975EF98AE37EF293BBC984DE6A2D
66CE49C728FE0106977ED5D4D414859D1484F178AC00E247F011D63ACA203B67
1556CBC878972B609123DC4584C261C45865A496E251455598400651F64C93E0
ACB56BD71E7EF8E177DF7DB7528B5E23F159244551465E4A2287BA72C3CA080A
0C4C269BBAD43D5D70D96EFB876C5DDF999FB3FA3E5C95B1A1214883A14ACD0A
C3EEEC8C15C68D7AB9E0664DDF624D3198F5D66D650C328BA89CC02A541AB5A9
D9D942A331DD6E3D31D95B33E1A58E5B2F8ECCCD2F74822071DC855EBF1BEBE8
CCD89A75381D82A05AAFF7DAADACE543028703DE1E0681429F996F9AD5925EE2
EE95B48D388E26B7BBD97957E5863C55355D67717CC577A1678C73B1D4A99604
C368E2C64DF426AE79C61967B0A5F140C5211E80502606DC84364FAD9203A666
827370E59557B229EFF6ED1AC8063D81C9A56746618723191F234D1857729AB7
7512275256204D7BBA922CD860769C0AC00C200B89A6446296D58B2FE1105DEE
F0ADF8E50077BA0CB232EA4A0960C916615BB01AFC12B7C36A3FE9A493BEFAD5
AFE267229F9551C76FE6D74C81A8560A419BCDD5499EC368369F87B38079E70A
CC2A29D632246319EC08842930B5618EC6BE4158A6AD209AC364AB15BCAECA69
9E843E3617024A373BD188E8B052AB571CE790CD074CEDDC6DB79ABA1F701C3B
9A4132B6163778EA697F57FBBE5D2BEDA409846FA680959FDACAD50D94A07A6B
F53AB6B35E45F5469C26144A625570B844DF086645DE94911BF14AB9410614B0
40B1AEBEFAEA0B2FBC50656963AC70AC07D629D04B619D1ED600FCE3AF7FFDEB
BB77EF96343F0E300D1D33A46F2A60E1B01C38CC5C9F5235CA71A660C7A6BBF8
E28BDFF5AE777DE94B5FA2D06099B295734298EC55CBD5FC8ABF5A96D1AF63E0
416D833B57AADDD5EA390C9545B34786C73E7CC699975D71C5BA351BF64C4D95
BC92EB408B40412EB6FDD2E15FBB50ADD693E48028F08ADE581A57CAA5E1ACF4
A21527BE5750BD7EAB522906617766662FD41E64C7EEDD93D552EA7A7686EAEA
164B769CF4A2A483C3C2085BC5EE76DBEDEE0274A9AEAB53B6CE3586F121876C
7DF0A15F7BC5E8D477BDEDC69BAEC3338C8F8FC058692E7471D8E1CF3BE2F73A
7084297183A09FF5CDAE12B9C3F5846DCC548795776065CB7AA20020FBA4D21C
0F89618178621485DEAAA490499EB0DAC673F21657DC5734B5B8E1055DC996EF
02E6E494735E046FC92538E06773E940111E77DC71BFFAD5AFF0CC4C3AE21B46
264D44A2C97468FA07D4F75E1CAF5F33DCEBB4D64F8C4DEE982AC1E42A394395
4AC149633F74C2B0645B233A13E5E83058AF9F71CDEB4ED4FD9E16FA8D8646BA
2E2CF43E70D687BFF1AD6F3EB97B7EE3011347BFFCE5FFF5F8234FEFDA35BBD0
49421DF3EAA72A7654B13614286BBAD9C4738C4EAC9FCD304AE3E3631FFBD8C7
AEBAF2B3C2E849CF52E5C14C163398FD80397AACCC91A42F552FE151E6621654
8E6C0A110AA9D13C9C2E3536FFC9279FCC46BCB83EFE959EA0A2D518B365080B
6B896A0C53F6E94F7FFAEFFEEEEFCC06F2825D37EBBF4D89CC78232D27BE14E5
084600EF2BF53F6C472324F59483B011A5052F3F54C9B4B0CD6E42B7DC72CB45
175D8427C7080B00B3987DCC560A5CF6D62AF5E2FC990E8468651A07E6EB48C8
876F8A87A4AD403F03F73AEBACB33EF7B9CF89A6C1434A387DE02331241A04D2
A99A1C87036997E5D3BD5C444A4092FA9E65E2CA2876E0C70C840E445C04E3A3
96064EF6AD80ED9CEF565C1D3BE76997B56A3EF040066A60D9AB3C14C1D04BBD
58D41B2C4E2CAD7D17BB16AAECDF34D3C171564FBCD82F09E77A050E298D36C8
D8971DF3F29FFFEC5ED759529A6132A50B948F89039523FCA5BD15CD35060FD2
A525D7023034E355BC85B944250D4C62483B272EB473D24A738DADA8D796D3BD
F17B42BAA4EB94DC8EF03D996EEE1A81679BB967C693CCFD6BDA76AB4DBDA556
094FA74B7BF890CF61F9643F371396965671925EFA3F2FBBF5D6AFEED8B1AB5C
D268DEA2379275FC4D933463CE8C75C938766EA5FAFC6E3BA9963614DC51C7AE
64A2B355AE7838727E7EBA562FC2A9DD3BBD07BB08026E6A726FADA20547ABD5
84B2C45F93B4EF076D1C9F69C7CAB61D4FD56BD5280E376ED8F4C81F1EB39433
D6180AC25EAB375D2ED9E58ADDEECC427FC303D69493B1AE7FAFD786A08CF1D2
41D82F978B94E010555BB66C2173EC5FFDD55FDD73CF3DB829EB3E31020CF731
DD2531678641B88C7805D9BDC2FFB26F6631330A2D6420BC38542FFEF4F297BF
FCDFFEEDDFC8C124F13D331B646E72E9A2C33B52C552859B2EB5F867564E2CBA
D85423B708F3D6DC8BDC78A5389D18AB763B9D6A117B25DEB27E83EAFB0B33D3
23C552E2878D4261AC5A5761BFB3B0502D15D7AD9DD8B16B27EB2C31DA7891F1
F109726F156A23BBF74E568687DB51E83BF6933BA7A07147D78CCEB7BBE3136B
7B71FCC4333B5A89728BAE9F5AD813BD76DFA3C91C06A572D9B652AA34EC8737
BDE94DDFF9CE77705916D172C4A8CC187BA0D9C40932FBC88A84152F47F0D2E2
6DD0D0B68CBA64192802A127272785795138A5A52B19342EB3B38C583267C6C8
04E4F8134F3C814BE1CA871D76D8E38F3F6E565F7076560C41F3003A67787D2A
48DEDAE4D4250F3359D24C3273113D8232357B65925B5BA486B8A47C7D9C4B45
8EBF7EF0831FFCE637BF49036279BD38038C643B11B949E72CCD29A84C5F99D4
6FCA804A304BC2C5094BF1BCF3CE3BFDF4D369F2724245F3116325FEF751471D
F5BBDFFD0E6F87B3181BB09731F58B62131139A0833968DC35B0003EFAD18F32
9B6302E8ECBC971444137E1062F081EAC481D0F7400874F987D364FA85B6418F
256F218067C93D3D0781CE3E2E7C9038AD60DB542B7BE767C7D6AD9DDE3BA9AB
8D926C57B3BC184FE15A1A52E1DB9A7CD2CE60D1D8AB49AAD13A19262B59ECC4
6E25962A94601805C56A418516034E5457260F9444CBC59A1743843E2E93A95C
BA62E6AABC9923F958E033ECDAB58BD92BCEB2EC5CD35BD87F7FDD5027C99B93
322A29EA56B47BFA2783B04C14946C64D9805C1542558B9580DD8D9FA58184B5
AC178E39AD66FC7879827FE50541B7CF0C3548225A8275CAC82A0DD5873520A2
EF8F0C8DCE6963DFF6EC62B61376E1181CD0EDF4F3E5E266DDE337EDBFE9905A
7562666FB7DD0A2B651DD269B51792D4AFD7AB69D6ECA854F6B23490CE70C441
BBD7EB668D0543E8E66E0FA67DBDD787DB6113F798451A7BEF7FFFFB3F73ED67
FEFCF017355B33EDEECC426B8F1FCCDB6EC83AB128A2FC756D4B1B0541E8178B
90683D4D69192DE67D857A973245B613239C54BD82AAA08A252DA29469C9A4CA
2A9405611AD7045BD11EC4150E3EF860F67626728AF6A0D45952B69A10566941
43803EBF64104F588BC5AEB4F21A53562767FBD589E2A856ADB53A9A033C0803
DBB1748313DD984883E53CD70EE1DA5A104985340E474B3AB51B8741C5B527EA
8DBAE3C236C6BB0D15E04AA4C54461037971E25AB1CB12F88C4C00FAD28653AB
2B0E9D48B30DD8DBA766C7D68FC212DE3E3BDDB7ADC6C438FEBA7B72B21929EC
423FD6B0CBD8F17A613CD3EEE04F766989E2547429D2B458289AD2D3CA3F541B
4CE325199BDDA1871E7AEFBDF7323E217AD7AC3B22E851A8FCD9450A7BECED6F
7F3B143CA36749DE1FCCEC2DAFF28A5E167F6305D2FC92123571D6891822D448
7495861CCECD917193E05ED205F0E1996A52B9D5CF0A4B2BC7634B418B10B0C8
477C7DCE3B4F119AADD52258CC2992AA22C9E8A56890D1BC5079A188D9F55619
590CCA5C6E07820CC4D4B3F2FA46FE49A88ECC0E1076DEE60B4742D742B1FDFE
F7BF27FA5400FFB29BA492842333C03A27DCDAD4E27259E9F9B662545CE4AF28
33BA44D89BA44DC87BA76A7187CB6635EBBFE3E98242379F641F8A76B5F137ED
0391D418B4638E39E617BFF8C5809EE6BA357DE534EF4E2D8A5908A4A83F18FB
E5221940A548A1296B2CEDBCE39E989866D444192DC884BD47D86DD95C047F1A
1B1BE3FA372B7FB0AE5EFDEA57FFEC673F636A83DB21C369F6D29C168D096012
A8897EA5D9CD19973032A7C3A4B7946540192ED4E24C0951148BCA14F7924547
B2A2A47D137701E35E428C014B94814F73A8ED9C0651F019CBD52D2DCEC5F25F
832BED8F1486B3188EFEB568628EA64C9B7E8D54C395AFBFFEC60F7EE843A3C3
E3D0855188DB6059E82E3DB80B14B08E91AAD8D68D2A4B05EFCFD6AF3BA05C1C
5D988BBA9DD073355E0383353A0EFF6F2608BB8EABFB1725C9620466B85E7C76
F733A3755C2AE9FBED7AA302831EE3D2E9B65841444538D4D0B12CCD23ED04BD
7EB3DD9D245C4B135BEA714CB385D2CE3080161C343FE895CB1EEC06681D4EA7
20874DFA2A2E7AB1A4B882CDECACAC48496FA8A57978CE0D09AE850A9167D145
83997FF3CD37BFE0052FF8CFFFFC4F59FADC3052BFC14087CA303B827D37F1F1
03E937BE024BF8490029B679A9A00946600F57352B67BF522B371732F669DBCD
546F80575D33363C33338F77A855BD35D562B7DD2ED86AA45E2F2451D2EED53D
776268C4E9B53C6849CCA94A8A490AAB1A8A1A86B59B2960364A4A522BB69CD8
D2C50EFD24ED2511546F5470FA2A6D86413F7BE0050C9BE3B67A7E3F56FDD80A
2DBB1FC55EA1D48CFD014B96E2DEB51DB592A748316DF62F93CA6949B753F5D2
58917A7F5A39F8190AFBC1071F240A494818D8C6915E20573E77A94477CDA626
040AD0DFE514489884220CBA192BF6E8A38F866540CA49116DE6871293AA4B9A
21A606B7F0BEDD2929C7A295466CCB3E223104F8A89C2792DF0B6DAA30FE5846
DF11B552A8CDCEF90807549D0CA332F0A52653AE8817DAF7D2C695D9169A1AB4
4EE40104D7433F29CD4BBDC55B5A11FC48327D315C0656516AF4365619433514
89C0B3890E3BF5D453EFBAEB2E7C8F65B36EDDBA471E79848871EE538AE63F41
ED2E197F51C0A6B38E15F59297BCE43FFEE33F0855630023C989AC93A5DC4F2A
8FA89108880876694D2D1C552AC34EABDC1265F04326828CE2347D04CC8FE5CD
8090D9734C36148771C3860D700A0551214A8BFB8B4D11F02B8B94A4E8DCECA7
2B9C8C2AA7E630ABF0E9808A8BC92C89A0A5640989BF2115F65C48D2145C54BB
E458696B26794B06FC55372C5F5ABD0253FE23D987A283D92EBA644C9A709F8A
01972EA51917254238B3FCBBAA02C6750950A42620690306CEAC69618C11DF68
8D62EB8450DF0FCA45F8B26EA7E78F3446F570F889346311D3468F697AD0707D
6DC6C2518802CFB117E9DA5FF492239F79E649E8CE62091E6A8F4D7270FDD9B9
1DEBC6D7EC9EDE393E3C92AAD02BD8BBA776564B3A468F81C64EE826DDF1DAF8
747B7ABF35FBE1F89E3F1BC659DB064DA616E6AA90A36C8F8D4E5C78E145975C
72311470D6B06131872D3E16F35B42982291C934475A32D1CB8207BA05DCC992
29375335140A92B3E487E81289613265A8F24E2F429DCA064AE434E0B6A1ACA1
47AE71C54BC97B85F0687C7C1CD797C63EBCA9E44BE0EC562BD5F7BFFFFDD75E
778D5E7C6902A3288BE468FFB25C2A56CA65BFD34EC26878A8562D57FEEFE38F
7DF081FBA7F7ECA9178B35D7AE28CB8BD3B8DB9F287B85C4D2E50D49ECC10057
99F6B555C1769595587A48D238C54F2E74B06EBB522CEF5D98EBDA6961B8DEB3
D4EEB9D96E10962AE5DDBD7EB95AEBF861B136B473663E758B53BAE8C5694385
E76B5A191A378D072181E952621DB6E11429E0E65DE8A984ACAC8007FB53328B
54818C3AE248D8E9F7DC730F0D174ABA37BFF9CD77DE79A799915279534EA6ED
E978C901AC9165B69EA968E2F504148A99C283E1E02D5BB63CFDF4D3C4D4E05E
9FFEF4A7AFB8E20A764D10933C6FE1A5D42ADCC26A5956421C4D8AEC7DD7A34B
FAD6649E92C4845ACA0E4DC925C36E2AB064297D9868053CCC5BDFFAD63BEEB8
832433820C2786885B408C5A7ECCCA1395FBFA123FC7954935CCC61BF81E0613
163C8EE7AE7CFBDBDFFEFDEF7F9F7E1B0EE0389C7DF6D9D75E7BADA49FCDE7E7
63534CD1E9A16B6B0A62899D9884621C67A861DC17B61413816621D67F4B010F
AC6A13DD29F106A9ACB59622BACDF8275351C2B2427A1FB2145C74D1455FFAD2
97C87682D7B9F8E28B2FBBEC327911A95FE7BA95E8BA949F5939F75C94374D67
94824EB630E0E2492EB9E4925B6FBDF5E4934FC698737207821FE67A96B73343
F762FC89D3CF53680A5B79B71EEA7BE109661C9B24869CCDE585701234E6F1C7
1D77DC6B5EF39AB3CE3A8B015D485DECDF0B2EB8E0F2CB2F8758E09E15D94251
BC75EB56AC317CF9F5AF7F1D26BE2444EC657DA0EDBC6D1D2FCE152529B3553D
609A0C9FFCE427BFFCE52F63E831706C63275496F80652E99FFFF99FF528B876
16E0B50B6E5977D172CB3052ABD57ABF870DE3727432411FF1093A9D35A5E250
B938E6D9A396AAA489F695F553360AF3F3B37ED0763DCD4309E99DF5A50A36AC
CD3A4FA9B0D369C789065E1D7CC8414F3FFD071DE6B4AC6657ABAEA1EAD0F070
832194A999A7324C4F3751902654B118743B0BAFD5E1A0D76B8D56BB89D9DFBC
79FDCE5D3BE1BEB314878F2A168D2860B3DC9B03CA582566E8FAEBAFC70EC174
9E76DA69F8796063F0747CF39EF7BCE71FFEE11F309D1410101CC4AF4BA98C28
630A2CBC88C814CC05D9F5082F64B776CA0EE2BC92AC7707841A2514FD5DFCE9
94534EC1F4E1013077B82937B36660986F8E8F8D4FCF4C8F8C6A368672B594B5
23C9CAECA02AE617EC8CAFAEE4A89146E3E0430E0C6676CD4ECF3869E26296FB
6AF34879DDF070777E7EADE76168E0FB9692B4A8AC8A63153CC773E04447996C
CBBA372A1BDA37B25CECADAEB2FA49D249A38EAD7CC78213DC0BA3308EFAB56A
B71FC48ED7EA079D386DF6F1280E747337E72B564B69B7C5D15F31C183F77DF1
8B5F0C6908D941892F240912F314FE748C2D0D523228618258548073F12B4C7E
469829ADDEF18E77E0B28F3DF61893BB92E8A265CD083F814BB8F2D5575FFDA1
0F7DE8139FF804142A0E78F7BBDF7DFBEDB7C38A278E89810D338B2CD96B91EC
19EEA14570BEF9A6A9D1377E35854A1BD18CF4AAD59D665AD2388BBC6C1C2B3A
A903D68F39CE964175A28C26E76A299C4D98F584F5D3A440974D27AC0B58C9DB
B76F678842F4A234B4E064F1CAD8084CCBA93C08C15185758BE371114A3D3A4F
705BBFF7BDEF6154E59481E0330D0E0A74FC7BD45147FDE637BFE16220B0885A
84749534AD24E2853FC1B723A5DD3EAA1EFE144D6CFE6A8E305BECA559C91665
F7F264B62453CC7307BA439A113521C5E3BF94F9182E1A8BD47C34FE2C03AA29
0818A2044C462A7AD29CA0AC084213C5E05F56751228233D0F78712934108169
2DC5AC5939BB0E771691861C1F01C9539CB270062AFFAAABAEC22E836376DE79
E7DD74D34D4C29AABCAF115F8D92939966582190E42A2F40B50D220776DA664A
48C2A25C6C18288C21DD2A8C2A5685694CD806F50A6E44DA4189594A247CE50D
09ED02CF80B6B9CA6BDBCDED4A85F4DAD7BEF6C73FFEB1CA3175CF3BECF98F3C
FA58C1AD36EAF0275A9572ADD96D432F66FAA0D30BB3464E4A13C9F603E8DD52
C1192DB863565A0D032B8E123DE07654AB97FA7E2B0C7B43C3356CEA454BA7AF
8760CFE4AECD9B362569F0B6B79D74C38DD7F3E1D9CB082382F7DDB479C3A38F
3EAADDC7600F664D597E6A69B5AD07215BD8E3E318DF997A6DA8D56E4F8C8FF7
FA9DD7BFFE2FEEF8F6774AC5C5601DEB344C108129E5655710149066FC098C5A
6832EAAC4D9B0978113144B642AC6FFC60C6A952831A82213E2E65E24DF0EFA5
975E0A092E5DA74C189E32F002B031CF39E71CF995F385DBE1187C0FA78A6D5C
19AED18BAF58E9FBFD35136BA667F766A18B8CD5B25E85E459989BB72D552F17
6BC5928A42F8BF911F14FA2D0CE0DAB1EA48A96CF783F5438D896AAD3D3B5F58
68B9A956C01565D76C0BFE71BD5C2E16DCCEF48C06586A47557BC0D0A6D0C189
652FC4A92ABACD24DADBEFF66DCBAE94034C71B7D7AB963BBEDFF2C3726364D7
EC8253AD4D37DB6D3FEAE5A4EA94E302BB904D3BA096C4646691C040AE4BC2F5
3852E73B464799D2136925F89D818F502C31EA20123FCD5AA6E3A9B0E1B1D5E9
D4720A184F1354BCCABD10A1EDC587FC181924A225C0632B635AE629A420203A
7A458FC1D48BA6ECA61C7CDDEB5EF7A31FFD48F0E1905692965EAEB059A605C3
E5C1071FC43A84D768E28906702B821292C0AF3C98008EC4CA611C828E382B29
21E320D720D118C9B4722A0F1C803184F079E8A1879CBC23160E60BB2AC292F1
6535FBC094649F44286CB613C6C571BABC2361EA2AF7E6715FFE89C39EE67556
E2A9884E627F495AE4D4FDF40565EA1984A43367E5F50803B8E8FF73EDABF260
2F79365887430743065998A4B8B525D2A3F22E3BE2AD4A593689DEB8A7685CAA
CCA7C43293D4AFC8792C666904C41A717C4F481A330854C034953EFFF9CF9F7D
F6D9C40332F5438A2E9C0521C6623C78749069F886DD51E9A3DB46153E63212A
EFFD2A190DCC3234EB35D75C43863209F84B6A83F13F1C898BDF78E38D1FF9C8
47C82E47252D2EBB50A8F25C7224E09A9FFDEC675901C5665C69D6388E44D662
00B1BCC5A4A864A8808B7FA0E12693D35494B8E311471CF1C0030FE01BE2B725
ADB9AA074C1B47CCA571A8AB5ECF8CBF2923F1E064AD87424D97E47A4E258C93
35A31BB44F9CF9B57DBF07B3CCF5F0345196512F24F6B095965C7BB8E08CDBAA
9E268524D64FD3EDB61B43B538E90761078B84D8E962A11CFA731A9C95EACDDC
F7BBB39DE9934F78DB3DF7DCB3777A4F160977CB95A2D2C95188F17EABDF72ED
4EC6E8D24BB51FAC15B06EA897EDB2A1212CB556A958260B87EBAA0D1BD74DEE
99E182964A7F139C2C424A5C5B46EAA409CC00FEC22CE94973DE35D10D5C25D8
CC6CC3CCEB0B444B0E930C2EC69FE8682C3238D9DFFEF6B7310B2637108514D7
3455382372245260F0934816DE427B5A7E448FA4E7EB4C861FF8C32343F3737A
5156CA3035BDCE5CEBF4F7FDBFDFB9FDB6F985EE960D13636EB8776ABE64AB75
43D58A4A2B892AA71636E5818D869D7565810D8209A8DA6EA5E0603E129D5126
B0328DB299F0531BC3EA17CB7D2B6D27E1421CB654D2B3750D626229BF5EDBB9
676F2F5298B09EA5AC52C52E1567E61666C34115BB18044BF71582962CA0B3B4
01ADA4C6E9254883642A3F6A5F8A1B6C3CAA67495B0A6E8EC92AB3F4501AFB30
CBC5B02763158C7FC21EC2C310A8C5F8AD647C697E617249AA40120361A520FC
FECB5FFEF289279E285E88893B5BEE30899266A08CA683F840FB08415391D04E
975E17723BC1B8AADC91E262E32BCB97A2AA939C5E5E4247184F8C065CFF73CF
3D17F68AA0A625F068E73D7D7118F605438E4CB5703488AFE6F24E73B436BE61
2F4813FF22891BFCFCBCE73DEF91471E51B91535E0E250BECB9697E8B169BA49
1291AF2384FB129D66568806AE3858FF3F14F08A3A5819E159E9D5219978DA16
5CF3E652574A0DC82E7924167AF07472CEE0C30509AF114344E01223738C1B13
8BC4320A711BE4318422D78C870BF489BB46BC1A16D31325C7788670FF0940C9
EC4A209782BB8989BBE0820BBEFFFDEFC3CBA28424253BE12FF44A29B4E9DDD2
6CC253D1AB61D6499625C42F1639DE970D89B90285DF43195C2E621C8B8DC5C2
7AFE2C8D14B924041CC7E5C4B7C038C02279EAA9A7688E53C8D37A5B85586378
98C137E20C3FF4A10F7DEB5BDF22ED08B3688CD8D042D7ED2074C0D3ABD746A6
A7E75DA71C44F1706D1C7B737404B67CBBD569BA8E0DCD8ACDD8E968A4A855A8
B84E15DAD7B5465D7B043FDB165C40278ED2F98569F8BEF54669EFDEDDD0B56C
40313A547874DBA3076D3870A1A9DBDAAC5BB7E6C9279F8C92C075740545B1E4
6172BBDDCEF4FC54BD023FA36BB9BD2485EAED6B7A352BCEFC27162061945D38
E87D1805FDAEE7398D46656676CEB117B3B0564EAD2E05E666964824A0540868
6FBEDFA7B4A5149031349D068CD581071EF8F4D34F4BB7794916F216B425A562
1297C597D4EE5810DCF64EDE108621200A23AA07CCCE3BDFF94EA1D4606047D2
390CE0B0828540472BA3A27BDE61CF7BF8510D37B51CE5F70378C00C44D74B05
BF171CBC79C3B6EDBBD60E55866A75BB35E95AAA562C542C5B75FA9EAFD6D60A
EBC746EB6154482D0F4A3D0CA186BD2472313896D5A0A2D4EDAF7437343F517E
62E187AE570861F63AE9828AE6A3A01D45A16E0C6D6FEBF60F7BDE61FFF5C413
E77DE292ABAEBFF175FFCF0937DD720B36FD4CB0B82D5385CB3E870E8DD315BA
978B28A782140A78A9179436856A2989BFF8611C3D3AB5F8D317BFF8451C7CFE
F9E74B88986B839B4A0224D896B8CBC73FFEF18B2FBE58C0CF02FE1274B45969
C360262F2B9D03E46118321598C90095D200E8C954ABF203DDB54B2EB9E4739F
FB9CCED1649202DE2DC9655714F1E239A9DC2196849F5A0A8761AE9A6E19D692
B428E7B399F9022B67A237DD47B10CA862E9D299ECE5FC9805DCCA2879126397
1BEA6D6F7BDBBDF7DE8BA9C4405D71C515975F7E39A689E468ACEC4FF31E0CBA
0D79E64B309829082FFE953F102949402F3B4A91085ADA75ABA5E4CFD2E9C19C
917D941DFE773FDCCB69D61A8FEB4AE20AE9B2121A2A5406D213A3893D7D44AE
0189F140C233F0C6EF45C7D0E25F5E554FB4844936679275338027992F3C362F
C28010BB59E007F158E81DA639C3AB295D055EC7DDC175280D3C64851035695A
18348028BA31B9B817BE240D9C986BD75E7BED79E79DC7F6A3A456A5FB2EAF49
958773F1FC69569EF7FAD7BFFE8E3BEEE072A53E66B2CF0C6132FB4BB35B19C9
32B57AB9F6735B6CC5894F0DDE3E9A1E0C854B69016F802FF986BA902C1B8A62
A11A06AA54ACA689D3A88F4CCFCE56CB550C66928661E4777A2D5B5923A3430B
DD5EC1AB43FBAAB861A575E841D72DA589B571C301FFF5C8FD071EB0DF41076F
F9AFFFBA7F7E6116B7C012E9B6A68686F4867FCB5FBFF90B377DA15228710314
4B2A4EA08D8A90873BA69E29DA5E3FE955BC8AB23B71E227690F0AD8CEDA16C7
711A47ECB9BB303C343AAFB7108485B566CD68ABBDD06EF505EC201CE25C6A03
A92F53885C7FFDF51FFEF0873101871F7EF8030F3CC075264B4AA24302B6246C
4DD86BA97105E56FC2E52914485C65D6B062F3BFEE75AFFBE94F7F2AAC5B4CAB
D0796236E24D6F7AD35D77DD05298073B128F18329C7A178B66DDB662B073BED
ECB3CFFED8272ED249B8542B15CC20FDE08AE778296CEA78E36863ACD178FC99
1D5B2B6A78A85CB46C2F0EC74B9561C755ED6ED0EA6EAED78AB655551A9605BF
12D2085BC452E990CAB4A56E7B6685A9F253AB877BA46A328A2BC30DBFE04EF5
DAB3A11F7A6E68A7DD7ED0F6BC8576BF13A9C69AE12776CED7C7EB4D3F9C6BF6
DB4E563C40E63CCB16DE92307E0E6D2EB24FD248E688A9DCFCA7F5CA78145EF9
2D6F79CB9D77DE49035C4C166112E5FCB2A72F15B9E4BD784D5AA25293C6EDC7
FD4970006519D53FBD4932CD3214411F0ECE196CF933CF3C139A5E6A66A4252D
5F04070BB590190CB0F20A0D73CF9A4B94301C063F08B012D6C615F73B0EC313
42B5D021C09726DBC0003486917C221504B445D37039529A1F7C4FE638E67AD2
AC12DACA51C774FAE966A9CC808029032188256D560C0B5088FE8DE495393822
4C3917AC57219534DD1A4A6D3C2AE6081767D055E4A354313103CA318482FFE6
37BF8997653E9E3AC3EC7FCC0F69444DA6B3FF13BD2BA773AE71EB37BCE10D0F
3FFC3076AE00686D83B84394716AB01E9A7A5A360501222A2B391194328EA11D
CF9CA309BF97634E3AE9248C0383BA5C512C3FB196E1C6A5164008C5B85099AF
648D38A3505C24B2540418C5A765CC9CA60F871DD60316D89E3D7B2457C8D522
380F0A5E29BB6243055E930637B71293414444B2BA015A0C9201736A8673181B
C0EB40627045E15F3C8914B90DAC7093D7D68C0430DB8D31E122945E6D7A578A
4D3190C59170071737A9E90413C1B1E6E5683A59196721EF68E1A64EB9546C14
BC32EC1E5C157A2E4E8276BF0935FD82171CF5B297BDE45BB7DF9E44F097CA2A
A9D969C3B5873CB7E238C582E3763A1AB39EB9ADF19E49C84AAFD3EF8C34CA70
B37111585A85A2675B6CA9613B1EA627E8F5DB7005E33474B3808C8E3EF577BA
1E663409A39E7E296B3107EC389ECA713ACC826095E075B66CC104EDFFDBDFFE
96DE098698EB66C588900C97B5EC43E64E8CF8C1071F4CDE1C016111B6A68C92
95E38F3F1E3A60C5EB53E2637D24595B4D06E2586047765F0EBEF873BC359355
5400584F54D252DF06A981BF62C16925B47B57210B2231D4C16D16417A96BCA8
1F0E37EA69BFFFC5CF5F77C985E7CFCC775E74C4FE0BBB9EAD595EDC0CABAEDA
B87EC8F603AFD9DB3C321ACECED54BC561AF887D003B109ABCE85A254C7F1C67
E5FCD0134E68295F27036C38BB0B61D4F1AC3995B6556217CB49B1B4B7DBD939
3F5F1CAD0451DC8DE36EAABAA9DD49550F06540C877A687A7EAE502A6E39F890
877EF710DC604C7041DB2801653D551163A1928F111C8A69564BDE4E19BC866C
1DCF20980CBE09D7920492F4B9A2161148A7E940B355DFFBDEF73EC2E5303B5C
5D829EE5CC8A2BC629B38CE222FA37A4FB6138844D2AD5B28A7E79CED5D62793
1D6C846C65FC245213C963045142F097CAF320A6B56EFDB132C50101C4D32952
8E3AEAA8279E78828DD997AB25FE8CFB325B8FB9C3FA24A726212A9492A676E7
F194FEB46328CD898EA6BE5199714C3C1D24F562942F83CBF2071EC6BEB0E4B8
660121362C79EED29C1C918A8A35AC9C653EAACA6D74C1638B03CDE1E5DA9092
A1812192F8B95962BB8FD4C08ADF4B958E543D88CF4D5A63866A08D69124B795
F35D3B79E30D09E9338EFAAA57BDEA273FF98928216A20B2B54C4C4C4C4E4EF2
4D1954E39AC1A5BEF6B5AF7DF0831FC460EA9685C3C318A234AF811C78772BE7
B5A6A7AE3227C4C410D04EA54C932BE021714768472B47E9337C2DD6B0D96145
B42F0EC6015806E79C73CEF9E79F6F16BC397947262E36865EE476B4AE707D98
6B2CF95539990CDB523154C07827179BC970A9F256953483A84754EEF2D20816
7DBA643F0C6C2AB3C9B95410F118280F4EDBADB7DE0A71A305C12A0AB8D70DA3
18C61AC6C883131C84DD72B9343CD2986DFA49ECC4919BE9E0A2EB54E13AEB78
C85C0B22AFD3D10228F023B241359B3072E79515D94E8CA1B36CCDFC4C53A0D5
99CEB0AC107381E3DA14017A209CF94E772149D95F2BEB3AAD98665892FB5139
7801B37FE8A1876EDFBE5DA213FB1640F22753FB72885878FEF6B7BFFDB6DB6E
8352870CE2F19C24E1B35579B67F350137D0CE45AA564CC0C2006E16062C0105
071C7000FC60A21ED8E50D23C3C4069EEAAD6F7D6BA952EEF77AD55AADD36E7B
2C5F863D383CEC477EBFDDC3EA5671325474BD34DEB47E7CD78EBDE5441DB679
78B4580CBA9DD8EF397E7CC4A675AF7DE92B1EF8DF3F850953F0A37212579214
2ABDEC5845CF1981A0B36CCD269B581090BD24EDA54E00BD9BAAA6AB5A8ED577
6DAD800BA5661ACF87FE54B7090F144BAA9B58DDD412053CD94D6B956A37F44F
7CFBC9B7FDD3EDFBEFB7E5F1C71EB373C6AE81A8E9400E4CE5812C95D9C86296
52AC3059CBE96028891C64FCE6F2CB2FBFE28A2B703C0920B181AFBCF24AEC2B
7179C90DC9EDB77CA638D44CB01149840B7EF2939F54995B29470A104332DC37
DE78E3E9A79F2E0F2FDD9CA4F992D9F76D3545C8EF25FBEBE4FD85F88124857C
A1D742EB591222785A8A6F526C4A93A215AFAF9666B994D14E9BE5EC2C6DE768
C80619D856744F29D0AFBBEE3A8C33DD23332AC874A394FD38463743F1392882
F93A661742692366196C8E645CE180734E21D00E3AE82098AD38DD940FDC685C
63ACD8965024A584998917541ABD978122E38199924542716AAE8AE54266F987
7166A80A36C7E5E9423B2A7B418A88245E22EE9644E9981CE16BC2C2800CB4F2
C66B8CFA30A42F424C82A00CB130528D7F313ECF3CF3CC05175C70EDB5D7B2E3
0863F8F22203181A6A59B3DE442E8ECBE2009C2BE4FC1C259C7EDA69A7C1BAC5
34E1A6986E42AE04264637972EB8640A18DA347BD870F6257A8FD714CA233A2D
6296A5594F6261DEA0E9865FF12F8E27163D35DAC0082841A48DE03739A4E2DF
A73945D273D9A3246F044163393538336DA39903051FF1DCB2315653C0810F1B
A717A54141FB701E74A7EEC21EC785F25A2CC83872C2401354B16A0207548BA3
ED56B7D11871EC62E0A773B3AD7A7D388ED24A158FDE0BE3B6B27CAFA0E94B61
1CE3FDA162172372CAD6F41E929271663BBD56D6E7238610CE4C512E02CF2CCF
32502D0985A9CA3B9CD3DAF853C014E626E1C660808576370501C368694E25A6
721B761F962FEBE8B1C18831917672F81EC2E2E1871F4E734A109A96241396BD
2D20ED012145A9D7ED75CBB0E0BADD0D199FF0FCDCDCBAF5EBF7ECDE5DAD55BA
ED6EC1B6610DF97D7FACEA4D8CD6DBCDF9B18233E416AC9EEFA9B85129B9815F
8BD2FD87C74AED56DCF32193F61F1919AF54F07D12F8587A8D2829C01E72DC38
4D7A61D282E39BAA44B96DCF69AA78D68A7B3A310C5D9BF61CCB2FB833A17615
BBB156D55D657512AB17C750C00B49B1E3F7E10107496A39B6DF0B5C4CB11EDB
548C56BC2F594D301A12AA65088EEB5E657E0CC79FE15F9108F23323014ED6D1
59CA09644EA3A5AD6DE96A63303FFBD9CF7EE2139F307393425CC58D8D7FCF38
E30CA85565F47E3685EF721C99E03B7030E60E77E4F1B27E78B0E910AFF881E5
2A21353E958833494CA89CDF40650173566D11D8C25C9A59986B7E4447DA5987
09957B8AD24A5D65716032499955B3036F0DCFE9AB5FFD2AC6841053B12C09FA
8DF386D6B1D1E068205F232C9EAC691968052D3FF05D044EAF96A12C85564922
A203C10938521B376E3CF7DC73CD087062306B9A9E9C64C4CD99E563080A441A
E9A8FF66A441E56C013C5777B26936A5A70B2D3695199DA9D1D05ADE85FA55E5
3CE7B23C84CB9A2FC5861F587898231852E2F02D52E965B6AF6482A59689AA57
2495E9049BBE0AD3B42A3752B93C88B63BF3CC33B1245446372445B72A2F1B91
8010BF17C351421102CCB6F2F6A0924919E0DF3501835479F8F98D6F7CE3BFFE
EBBFE20718DC3007C57C64A401373DF1C413BFF9CD6F32272D9241D246B27AB9
FD6110C0A0A1BA158F9F01008EBF45B7CCACB06C641F28798A0F739F9B4B4D16
37C55C5F7BD32B85A07BBA00085E7E9C68368C52A9502A6BA6BA6EA7CAD383B0
EF0730A08242D12A14DD4E2BF1DCB26397CAA5C61B5F7FC2FFFEE92FB64F4EBE
F088973CF6D803B57AD12B249DDEF442732A4A7BAE037F17DBC9B2350DB50D05
BC08C18F21CB7B41B207B783BECF9E977CFA7AAE83A06F9AA5E24608EE94F248
42FCFFDD5C8EB9D64D5C280596884BDC8E85A7AB09503EA1B85CD863975D76D9
473FFA511A8F52A198E4E4A504EE3293C718A6084AE6CC88BD12421CCCD578E6
09293D821A5CDA84A01F1D9D9B992D788E95A4B0D636AF5F3BBF77328DD4E68D
43F1C242C3B5ABA95D2F7923F5AAEAF5ED857643397F7DEC4BA777EDEAED9DA9
61BF6121418686AA58509B3181050F1386476AF5836618F5131B2B60260E1754
DC293A21746AA4DA38A55C7247861EDDB3C74FA20E1570EA40314319F7A378AA
974419BA20D2ADBBEC343787306FCC7C8B0E867F79D6596799797709CB130629
1364763BC1DE8076FCC0073E806360D562842FBCF04296E1D3C13DF6D8637FF4
A31FE116647F85D0C4F8D322C6A8DE70C30DEF79CF7B842200C348F65622F2B8
A2B66EDDBA63C70E21625C9E3E343F7020AEB9E69A8B2EBAE8965B6E21E84680
97A667CF0DBC0FEB90F2850046A9D4E466675EF9F39FFF3CEE8575B56BD72E52
5E306C2874D6C258B2E2F539ECA61FCC75CE5344E90E08A6E59B45DE88C7336F
C261140F8932578AB9794D6E28696F251A1A7F124A32E84B084D2E78B13E45E3
CAB97C60A941102D25969C84A3B0CCB8D170220BFFACBC9FB49463495190B5B4
1254E50429C71D77DC6B5FFB5A2C57AE1911F1FB9003CB3F1C04717059D296F5
AAF165E191FC813037F35DACBC9B0B4317720B5E8D21105C0DD28923F6CA57BE
F2E73FFFB9247A999A25FD2429B4241E6072434A6DB74C749AD77DD939C5A938
24981D9553B0890A9736AFD44AD80E921BC5BAC51EA4397BD86187BDF39DEF84
298CD7A7F72830756E492A38E9BC69FA9C9247E760D2EDC665E9FF70DF0DB07C
BFE8452FBAFFFEFBB98404C829D525D4F78C19E3215FFDEA577FFBDBDFE60A94
0E3AA6F36D59CB22CFB8316BA579A818505C5E82D5E46623D453DB2630405652
C0ADA69FA5A0F5E086910F959951C5DA6130A1F7AD8389ECF7FC6610B632B454
62A9D29F1D75F46F7EF360AABCE1DADA85767FBFF55BB6EFDE5DB46CC785F7DC
F193A66345A532BC81B8D7EF562BC3F095A17DD39477C7313E947A944EE12192
3482C6E5662B952A6962B5DA73E67E504B0B2831647835A9D397ACFE8AB263C5
1D92E6BD4B05C5C3FA7D729332C3C1F9A0AFBC8F1093A40A18ED17361622F2C5
6B61365156008BF0F0161239116382EB95E7AEDBA0FD5DE860BA14DC451A33DC
EBE3816A70177CBFE6D9AE958C0E5542BF3B6CDB435EA16EBB25C72A3AAA9424
C3CA99289447C35E67AEE9066A5DC5192E78A524AE148BA38DBADA3B5B2E164A
8562A2D2AE1FB530738985ED3813064D2BE9953D28E09E1F433A46C582373AFC
87F9B900EA1B8615DE5787A02DBC333CE05DDDA85AAE2CC05FC77876309E63F3
8BAD2FB47C217D31812104CD5A06F983329059700789A091DA2106A289EBA130
1AF0D238A426B846606ED416B47B70EE17BEF085D34E3B4D0A2EC5434AB35A3E
EA7EB35D01F3976A59F1AE9551AC602298C51728A69942A6F740D9644A93E50A
52653E045D491CC96A1CC823FC4A3001AB7D18CD8280C3AAC06531500C42B290
63DF4D44A8D1C587E39AA7394BEFCAE8333DB8714C81C344A38C8695376FA61F
4661F7C217BEF035AF790DE4ACB4BE60029E83404C1C5D25161A89D3CFB016ED
1E73DBCA8C30004EDD203687191E3311ECE2AEE176AC0C943026AF6C32779A0A
585420716164B72668834B57FD773EB26C70EEAB5EF5AAC71F7FFC61DDDB4DD1
84C28345D162FE8E5D58B81D842ECACCB972354A513B2D1B29B9564B21452AE7
E63CE8A083205ECC0A3D128711F94CCCA3E00FD452E4A02860EE97246FE420B4
F9BC08251E17006F413830DF911E2DCC17320B711948B605B7806EC292268895
F75D919E4C2CB081BEC5521F28F6DC00F7380E80EEC7B04B3CC6045B50EA6223
CB2899A49BB21E2C593492BD50FF1F6B6F02264959A5FB7F91597B7575374BD3
EC4B2320A22088023ACB1D44FFEAA0731144940157560165DF6407511490E541
0404C56D80514747BC5E65B83A5E441904940101071045767AABBD2A33E3BE11
BF8E774E452D3373FF371F1FCCCECA8CF8E25BCEFA9EF7CCCCFC47ECA5EBB4C0
DF4768FE7C21E8D6749974694D9666750E4EA1988E7CD3E27D7753EEE9E4D4F0
A47CA4B66CF0E9A98E7679B6C17A1B6DB6E9568F3CF2D8365BBFE2D1C71FDB7C
F9560540B660811E9E9A1EED1F680E950533050AA97F436DA1AC606DD2146B08
1AD3E8C4C4C874A7386C9D7CAA5C511D9BDE762B6B15BB70DA1D7EAA6DB1AEF3
0F905767BF78F0F904504D8E4497DAD6B44BBF4DB8DA28794409EFCF278FBC22
144548E29C79E699D85F866BD668A2B3D0B43CCA7A200312E8911F671D68BE60
815E8428D97BEFBD7FF4A31F69757B8A9E65ADAE324FD025BFB3936FBCDE407F
5F73726274F3C58BB3B10939AD52C0033DCD8166D7D054AB7B727A59A3D3DDC9
37E8ED5F560AECE991B5D954DEDB9D36D6B5BABB7A6928349D0FB7DBE379369D
35D7B4DB6B537BB8A721D763F5E8C40BC313A359EA0C36A707FBE5EF8EB7724D
CD586A8E750A0F78AAD55E359526B5879A0D29E3EEDE9EE9C9964E6DA760B1E9
75992F7C0B74B2CB663636B102B62BE6F6C0C0DC1C95D2BA501BB3D1461B3DFE
F8E3F4A1824B96CC900F213464FAAF3CC833CE38C3219308B2039669636BA79D
767AF2C927CDE69FE6C9E032D4934F3EF9B39FFDACC3D4B18F026A0F435B8FCC
F3CEB97FCE3EFBECF3CE3B0FEBC121193F02E162EC098B57533FC6F6D20B1888
911DDA4084C81DE800524D82C76BEA730A63C0BC680048520C17EC18829F31F6
4E9533B15C67F7A9E642EEA36E21ECD375F446CE8AD4031A1D0D842A9D330435
3B374F2E50DF4753BA1529891E371B48331B1FD590AD685CE8DFB19B9B335B27
FDE75F8891183097F3A0C7A43C46E3A427B419CDCC7E6CCBC0462A8A874DCE80
0DADD04E73F05677E414D070DA354BDACFFA508F13AB927831BCD96233AB6ADE
20D0C6474F815E4A17D787CEDDBAF31267DCA45D45FB9F32DDE3AC472A713090
D9EDB3CF3EFFFCCFFF3C1FC8C67A2DAB7AEAA4CABA0243C02383B127C9954ABF
DF3CC1A87F379C704088E64EA02FB917B66C0A3AF4DF75B08F93B3EE11C09285
C2CA39CD614C92054058F0428C8D8FB59364BAD4F6BAB45C7B7AA3428B77F594
4163F9AC3A6CE3ADF6D478FB85D34E39FDEAABAF2AFBFBCA8B5F5A8CB2919E7D
667CDBAD56ACBFC1E2175E78EEE9A7FF90A76CC9E2F5FAFB0627C79B25C34661
4C15DD091B5323632FAE59FB522BD7BCCBBED39C92FAEE481D0C0D2D5EB9EA79
1470391D335604892C35EC70EE02E8C4F95E7955FB083CCAA899C8E4EC942155
AA735E07740317440CE987B49903D4AE4D8046EF54DCB091BF9A280A4E9249E3
0842A2B9172D1E624FB7A6A7FBFA0B40967ED5DBD7D71A9FE82985C2404FB7F4
F0605FD7C8C8F4861B76F58CB6D6EBEDDE7870B0576B3735362097A2D9BB3835
3692426E4DF74CB6B4738BFF75F2A5837D8B0707B235C3DDCDAE9E223629F738
8DCABBED34744AD64C4CADED4AE3BDDD533D5D13ED7C78BA3DDA48ADDEEE975A
53938507DC1A2D405BD96819829621BD521B2765B2E2A476A66543A5666B1D71
5521E3A4422407D9DC9205B2544E3CF1C428F55C937AFAE9A7FFE0073FB8FFFE
FB995E1AAA9367A57645136507170B06291309E5AD502FBAE8A273CE39475218
30884B7E5395FE71DA126EB25D77DDF59E7BEEB109B500E8862434D299581FA7
D2B946E405827B81088AC6E08A64FD70BBEDB67BED6B5F7BDB6DB711B74F81C3
0F81423A8381E18553A1315F8A24F63A244848AE84A746E29BA170B62EF77B54
913B3F6A4AFFF22FFFF2FBDFFF3EDAC5ED6B38479E01E8997047B0BD1CEFE164
5D72C925279C7002959340CC76D86187071F7CD0781F2ECB08C976A36E4DBB18
5505AB8645459E528361D181FFE0F3793209FBD70A5B71F8F041B10F5C2B855E
F9AFCA19B75F03314EE1062A0DA34463D3DC62754577BC11A8E5DA551F170FC6
C4E9044850CF24565D428916D1772EB8E002997AAED08329055A373DA0DB50DA
1C6133101BC7D2C237005BAA0F4F3AE9A4B3CE3A8B3A7E169A8BA7AA3F52ECC5
4B3DB78627EB4A5B1D6FC4712C423E51358233B00F691B917146D6230C3B9F7A
6E6D702E339F07D611D3DE69215C82A549DB7CF3CD1F7BEC3114A88DDA34B313
6216BD3787E981FBF3862095466018370104B6EFBAC0FA3C0AB8F4BBD625530B
27AC3DDD48C5D5BA9B9B17FAA2AB87BAA0E969E9E002C9BC68BDE9679E7F4A3F
D6D70706BBD70EBF5C80615B9DAE7CF9B265CBFAFA0B22C0C989A9DEB2CE786C
747CBD259B4B8FE80B05C5DDE2BE46D7E4CBAB9E7E71D5D33DDDADA9E90949BC
BEBE9ED15109CDC62BB6DD7E8F3DF6FCC637BF5C4D816541F13F66460B20C12A
F18AE8716FF3390F40FC67346510BE9189898C5D1EDA55E681A872CEEB033B27
9B7BECB1C75E7FFDF5263137801EB9D0A8BAC7DB9F33E03E55A92FB7A6877CA0
EC16D538F8E083AFFDC217966DB4D18B25F06FF192256BD7ACE9A2584BABDC6C
64EDCEE04073A0BFD9694F6DD4DDDFD36A2FEEEAEED57475A6869ACDF5B3EEDE
C9E9A1AE5CD27730CF063AF9A2942FEEE9DB606860B0BF6FE5EF9F6A668DEEA2
D56897ECC0F18E7470D26CCA091E6EE6C35DCD027BD54963791AC93BE38D7C6D
EA940AB85DE09FB3C6589B10B47CE2AEA952E5CA00992EC229EB44B02C394EDA
965B6EF9F4D34F6B3277DE7967FA393AB611DFFF7BDFCC00A422AE6BAB453AC9
A48F70E2A4AAE85EB37DD04107DD7EFBEDFA5C329D1661E453A9B5B544B01310
DB3698D235C2AF6A3BC7BF82994BEBC8656787D317F879549050A4E555D92202
34818928B78D9B1E9A360B6FE3831FFCE017BFF8C55416947FEB5BDF9A6FFF23
01A8BAE1D1648E3FFAE8A36CC5087BA981B066E3CEA88FE77941997218F55FAD
02FE34FA92F24DD780452CF42B5EF10A0A605069FA8E3BEB112DFCF5AF7FDDA8
88CCE8B6446FDA39C97352A57D8111A0ECA90CB453456A89196018B083E9BDA3
AF76776C1F733C630D5BFAAF83B062F3223253767075E50B2FBCF0DC73CF3546
49E6D7534F3D9555157A79C5609557257CCED31305A9D57063AB515040F52D77
BFF6DA6B8F3BEE383A8349DDB285AC50CC74112B621D830529E65A26A78D0943
128074512F0BA44374E8A1875E7CF1C5EC25B37C1082B287A3034B7A8E640AB2
372A3F0BD8ACAA8CC78CCB03C936C628045BC86A02CBD8C7DA3386B86AC01205
AE1A77EC9A6D831AF63E9C638F45B45ECC482132F8999EE4CFFEECCFEEBCF34E
A29D731FF8DE81F189D1465121546CB6FE9E25D3539A82CDB01699F418C1EEE9
5AAEE95DB278D9E444AB4C514C7775672FBDF442B32B5B33BE72516FCFF0E40B
8312FDF9F89FFDC5EEF7DEFBCB552B8B79EC2A7E2ACBA5A7BF6FB174EBD8D8D4
E0C0626D8091E1228731353DD23F28D7EB9991D1559D348C6DCEC166CD28C098
6FA383BBD19B3BEEB8639F7DF6490BC68538E18DD0A383199F0F357AC61967FC
8FFFF13FEEBBEFBE5441AB48FF447C0A043A6C44BBAD38ACD4B06615BB9E6338
12526077F91AF6AF5BA0B82157540F15C54797BCBE8181FED1F1926DBF51ECB3
BCD5EAE96D4E4D4CF736536FF12CEDC1AEB464703075DA43ED49C9C881AEC6D2
BE9E7E19D163138D89A9CD37DAA8B966E5E2BE8125DDDDFD79A76B7AA2BBD36E
CA5B6DA4FEA9C2266864BA6CA6A1686493A933DDEA8C647D53A93396151A7724
6F8F48B777DAB22986FB7BE48269DC239D6CAC938F68E15B854A1E9E4CDD5DDD
93ADA99EDEBE89A9E2905040D5D55CC750289F89F244269048BB713AEDAACB2F
F2919CA54B81B12075D2B0C1F521448C4042A405F120D1F1A4CA622F614B0DC3
180DE1B1DBE15442AD29A97D3E87709D5B0231D7283932110DCEE33AC04B0E08
6131E77EB3DCA9A916BC0A470EB4430A3AD20ACD44C75C9B260B83BCCCC10B14
45837CE73BDF89C28EFD5EA254B29A77B549AAE072AE5F88A1ECD92FC62C4124
ABF48A2BAE905CFADFFFFB7FA7AA391B4E15E59B9C05D01838FD9E6A087358AC
88B57430897BBDF6B5AF95D36CB0BDFEC408CD622D9BE3031FF880F410F74558
937FC575A30934FCA3B49166CF385D6D14D57CA1DA051C80188AB794A73197A6
E298638EB9FAEAAB5309BBB59286049BA3A1DFCA3F7BE28927F8ED65975DF6F9
CF7F5E168C350A9FEB14E8B7D89A3604A122A164AB111A3C3018B7078E25CE5E
74CDEAFDF7DF6F28BBAD1393D5FBF14D644D36DA31FC1462B9E851F66A4CC3E7
558DA2011991E2021988829465F6C8238FA0F264C3FDF8C73F86D88EB3C9050D
75367FA72BF70CB7B47FCC41237CCDF33EF0C003A9027F44BF2ECBFEA3F82A09
33EA4A75C666D756C71D31D05F14B7F474F735B2EED67463F9F24DC746A7D8F1
A5D0694705DCDFB771BB5524678786D65BBB66987C70892F7D6670B07F626A4D
5F7FF6E2EAA7B57F962E1958BDE6E5A1C1E59C99EEAEDE62EA1A7D52C065EFBC
DE258BD79B98982AA0CE696ACDD873FD7D9DD189D5FDFD89B5C7D4D2339B6A60
CEE11B3AE8D0DC4E3BED4461FE7C072055241B2CCFC239B3ACA27245E8C7FECA
3867266342FCC1FBE3B159F5461DE36DEA3D912A3F89F6477A967FFDD77FD50F
673B5EBCFAFB7BC7272637DD6CB39756AE9E1A1F1FD472AF5D9DF2D4D795693A
87FA7A1AA5425D6FE9D225EDC9028C2CBFA1BBA9F12D1B1CE8CF53B3D51E9C9A
1CECEA5ADCD535D848FABC3B6F7715B190CED2AE9E76AB641F2B4FADF68196A7
95F2A99EA1E9948D65EDE1463E2ADF57DBB1E8D6D059D995E1018FE799B4CA58
A731DA9A9E9C6E4FE5BD13D3933DDD3D537ACCBCD327F93851CAC77C461D0240
2A8E74843BE655C3512C9E6C26E5054754F37FCA29A79C75D6595E7A0B441DAA
D34F3FFDD4534F85FF447318492AA28B1379DBA3BB692EA154B9BF56A251C23A
F8C45D6A3BD3F10C873DC804035D9E73BF3566F64E704CF5924B2E39E79C735C
86CEBD08B6FB743B489016B44129CC007AA3F1DC76DB6DFBEDB79FF7A7E3644C
08C05AC968CBA9582980E63034BD96339EB9630B9DAAFFEA3A4EBF5965DA9E80
37F1CA2BAFFCF8C73F8EB943AC38E2636B0B91059659C93D0DF288238EB8FDF6
DB694263C3CBA0741ED0F8006266B6EA52A86B72C7682B89198528552D499A05
CA5BE0D5A81AA71A189C571C58E0EDCD53C130AEBBEEBAE38F3F1E1962469A4F
7EF2939FFBDCE7888DD98D364A08087D0C0FB857127D7949CFEBE2A00509DEC4
7D6502571F49CDC6473FFAD11B6FBC91EF702EA80024954B4AD819D3E8A367A1
2FBB4FB10DB5885AB0F71CC35D6681E54F3827FAC269A79D76EEB9E752BC6B37
9AC190B073B1A24D103074E4895389A0264C4D883E76F4C15D368CC35C1CC985
D173AA0A2B18773DB25B3DAF519CE752A1D3ADE92CE9A2F2057B170DAE373D95
77773799D03C590117B3363EDD3DD833B4786883DD76DDE3778F3D393DD5D1F3
4B10680EA5809FFED3931B6CB8F899E77EDF4E133D6553C266573E36516CEBEE
060AB8A7A77B51A72D3DD1AF33507818DDE9A597FFB464BD9E763ED2EE4CF40F
140E44E41F5858A000B220DEC5FEC6249FCDE1C98B4013CB09420AD1335F4E77
CF3DF7BCFBEEBB5308E093CF302BA131B78E5BDABD66CCBAE376DB6DF7F0C30F
3BE61C01756EB3E58D48408C0EB5B6C7D907650EA6A0705BBB76A4403615C7A0
045FC83C4F9DC1FE81A2246968E08DAF7FC3BDBFB87B4A4E799E365BD4DD6EB5
B6DC74E3D5CF3DBB6C403E5AF6AE7DDEFCCF77DC29DBBE37CBFAF53FB944D2BE
9D02BDD56CA4F57B0BB5D19A6A35BB7B9A52C659A3D355CCE9F3C353D3593EDE
48A38D3496F209A9E422FC9FBDD06969228ADADFAC7BBAD11CEBA4910217D01A
6BA58D976F7CD249279D70F249438B86D68E0C036E24B6A3C73173270EA554E9
57BFFA5500BDA6644A33C9E8A3E2246E4198C4A210B182E6B3668D2CB8F18CA4
5043EF2A14EC00A3DF5D4E8612A27D96BEC9F9A4D85177E4A82331D91B944BC2
BD8522E954CCC3FF99AEEF358875AAFC7EA0F50C83AA0F806C912D6B61831277
D38E17D059574920F74900CF3E41A84CB37E7A81A23932DFB923F21457137787
45A13538D021F0ED4CA926EA6FFEE66FBEF39DEF00F832F22E852041368B5251
8B456215E8286972E057AC91B784B5B20998640168244E5BA2C91C8E6606007B
B2222E1CFA4FEA608FD3A203894472049703AD4C8219B143CA8080BF641D4A48
2EE0A38F3EEA508D1E61934D36D1339AEA4B8EB2FE290B55A69BEE22B5FD99CF
7C06F493FEC9C83D154830772B7275867D5653AF58549211A78C8A3853AD9D62
7C53DB9059286E8E7F0503B1FBEEBBFFEC673F338302B82D1ECAF482FAC4208F
54611AF408FAE48C33CE90FD6DDB8B5D9795D57D9A46AC5594AB435F9E0AA332
0F3BECB0EBAFBF3E1A0ACE88B3E7EBF9181F30433F9C885AA02E76BD254B57AF
59C5057A7B06FB7A87A48BFBFBD675CFE8E485074C2FA3AC51FAFED35943CA34
EB79C58A9D9EFAFD33DD5D5212AD8D976F323A322D892D39BC64E9A24D365DF6
D043BFD1F78787D7B4D3AA5681C1C9713B87162DEDEF1BD24F365C6FC56F9F7C
68C3A1F5A53B4E3CF998934EFFD89E6FD8E517F7FCAC6C019001B1A1A6D019AF
05040ADBC57C2808F139BF6F8F19B331557401F3CD0F425F3B4072471E832588
437386219826148801B5C21AC98A152BFEFAAFFF5A46BD81D0A09064A13B5A58
F37B78D9B18BEDD24AC955B24FAC59AB71A7ACF9F56F7EF3E0830ED204172A67
7CACDD9A7ECD2BB77FEC91C7D65F3CD4D5D5E8195F2B3F7874CDAA6D36DBE4F9
DF3F7BE2911FFEF637BE363532B5F5FA4372F4FA34211A52BBD39375FA7A7B06
7A7B362B2354E323E38DACC8018F4E4DC8C16D76778DB40AF2E7F10C05DC91E6
97026EE7D9CB794BFE6EA980F585AEB14E3E3C393D3ED16A370BAB6EA0BFB4D9
2727B6D87C8B3F3EFDC73CC46648F8CDCEB6DA8B229E1C957154C059D5DC504F
AD5590D074E3779F49034C3A55AB165BB2FE0487868C80E4DDADB7DE7AE08107
FAB72860EC215CC654226977DC71C7C71E7B0CE4172B45D931F2112616968F68
2DC306F39955640273EEB70584780494E197CC261123569F6606B1E30B45A8E7
2D1096A59344501D5D82DE8D545C9C14DC2C4D0531F0349354204AD505084638
1D1C1986E18251EA8E48C1C851D329062CA62F68AA7FF39BDF1850E302F1686A
44051C593C53E56B42C728C97EF4D1475F7CF1C5C4AB703018862FC29CD0C8C1
195FCA8DB8268BABEFBCE73DEFF9D6B7BED598D9D937FD472F2F1391DBD8F82B
EE7CD8C130741C2A2031071C04E4398E4A010D29DB1E6CBFFDF652C99ABD48A2
E2E66044508159115D774D5DBB6A6D9E2AB2745D1003142C3AE62391704E8D13
E1AE2E033F5C3BA4B33137DE3031B7DA08DD9DA9A9431A50AF18A1CED2FAFA1A
811FDD5D26FE0D37DC00F8D1F29FA98BAC61F18D934A8C047FC0FA3BB2FDC8C3
BEE8A28B901876EBD76D7BC44D5EB5CC4B332B6A30AC905F0694CEB72324A64B
30DEF0D0A2F58647C6B6DAFC15A32393139363E5166F95B0A722068307DC3FB0
787878B45DC2B625C0BBD3C0D2C5CBA4532727082C148FF4EAD7EC74F7DD7795
276DB8AB774C8A59BF2D3A1D35D2B20D37EAEF2F9B177564688FE669BA7FA0E7
8FCFFD6EF34D973DFDCCE34B96AC6B241CFD75D9A4BBECB28BACE03987CFE251
B661B684C6FC5CD05A30D9560F3CF08023C9C8E5F99C128CE8189B8ABD1F40BA
127E246C1225058D20F5A1B691AE038F2066EC5BDEF216C96B7755F2EA20F5F0
E0818C72C67460B0C40707FB4BFC6727350A599035BBC7868707172F9E182DB2
E9EF39E0DD7FF7B5AF4E4E4E2C19EC1F191DDF6883F5BAC7D60CF4F52C1D5AB4
76E54B679F74E217AFB8A2A7D5DA62934DA756BEDC93A581AC31D868CA2290EB
2185BD74E9E2CED4C49AD5AB27C78BA8499E1AA363F2F4DBA9BB39DDE82B1470
9E8F661DFD571EF074D1D7285BDD4C53A5029E4E5D13A931DEEE0C4FC8036E4B
DCCAF31E1CA8D83457AFD2FB2263D49A469A107BC0CB61FE756C346F8404D17C
31099466C61B3945DA1BB263A41A9F7AEA293A8BF9B045843312CD0A38569E44
3CA4669B727EA252117C8E24029FAC5B935DA65D8C4433CCF23626D884B0D2B3
736A06F19CFEA505F46CDDAC0F891FBA3DA24421BD5A2523FEF22FFFF2273FF9
492A73DE301EA7FF081C54C3633ACD8C6622DF492EDCE7C8CD98F557D8FCD3CC
36760B243E53459D88DE750215578620015F7341B6418BEBB8EFABD00569F554
75F18B00375B60B2123478734D539C6DD02CB2D1500342502C137AD7D8171D5B
33FEF380DAA27887FA9556444E794DF6FE6772C029F4EBB52D9242F121DEF0BE
FBEEFBF39FFF5C43D59603E58ED3AC611F7CF0C172CE520918961568B0B47605
2549F800BA94062983C92D0849F01B42E597EEA861E8FB963936135D5043EF07
E23DC042A99795A6B41F9FAAC0463B749B3650C99363CFC781932C505638106D
B967767D8486B17E5A0B021BC8DE58F8402209F547FD313879E2ED3CA3A97598
130799611AC64772843205AFBD7816E634E272E392A38108E3180F36E786D866
6B1DDAA774DF0D3658EFE597D75C73F5F5C71C73FC861B6CA467900AD0EF52D6
297AD8E48517ABF9ECEE19284DC2A523C3134B972C9F9E6A0CF62F7DE9A5D5CB
976DA9679668D0CCEB01FEF4FCB31B6FB8714113B1E685C2D56CB447C756B73B
9312F11A95266E787C7AC9C0D0C9A71CFFE9CF5CD4DB97E9AFB2387BFB64A68D
337248C6B1103160E71CBFC18D3EBA9AE2134E38E1ECB3CF9EF3FBE6ADA47737
7279817202ADCD39E79C73D6596749EF6A3D76DB6DB7FBEEBB0F81AEF538F6D8
636FBBED369D4FE4E9EEBBEF7EEFBDF76A00B0B032E7F2EDFEEAAFFEEA6B5FFB
1A75022008DEF8C637EA74A5A0C53B15DD3106938EFA7BDFFBDE6BAFBD563F91
2E01275C39FA1BBEF8E24B5AEC829372721A9EC281DEC191E1611DBB5C365347
5E636BC5365B3EF3C7A77B5A9D3D767BD5BDF73DBCFD16EBAF7A76E516CB162D
EAEECAE4D569353B9DBEBCD19F35BAF38EB6C8E2C181A25DC40B7F989A683572
0D6CA0A7A74F5250BA3E6B36D64EC9EBED48EF8EE605146B326FB7DA05BD9596
67AADD9A2890D269A29D8D4E7746A75B53AD3C2B5BE848344C416394647B2D7B
F1A517F32A1B8408C03CE73DDE069C3850FD11C988E1298B3973627060882CE5
55EFC29A4034599215701EB805CCAE87AD804AE0D06AB77CFAD39F3EF1C41369
84AE7D1BE114BA17CDE60CFB94D72B7578E38D37220528D3E761719EA01371FB
81F95EB3E35B94AFC0D6E28251BA7AD0F2163925992249B4000E8BF029A1368D
87B363A0EFAB5FFDEA471E7944BE9DEC5D7D53870EC1EA66415FF9CA57341B30
63C4BAED08B159E0B922DABF111A86CA95DC7FFFFDA15839FFFCF3757E5315F8
41194732CB1A8395C5622D038DC5F3DFFFFB7FD709356288ED814F693BC0F5D6
9E6DB35C596DE425E11AF25A66904481032DB3D76E01051CF906CC744802D8DA
88A7A01AC7B80400E454EFA48AE0DADFC76AF4B16297929E908A9292C66602AB
984AA4B19600B71EFA260DE3B2CB2E3BEEB8E388C6A3A46BA94C5B78A6C7FF8B
BFF88B5FFCE217F8BE79208A7266A736B13503259A9B9D8AE60C3B982C0F7F72
DCDBA83AAD1DA94F7DD3ECAADA304583DD929C04030ECC0D91679BC2FA27A033
5CA3ABAEBAEA90430ED1EDB0FE5D2A9DAAF6181E6723104A66A491F3992F6F71
C776500C0BD5C51607BB4B6E4E315F59575FEFD092C5B22C8A62DC225297A61B
45F8B8D5C90B48ACAED1D5DD3535D5921F363A3AD9D73BA86959B268A3D52323
CD34B07CC3E53ADA83038B25C4A49E172D2AA6A335D59C6E8D678D297947532D
ED575D6A7A746274B06F5006DF4BAB5ED864F946139323AB56AFECE9818DB9C7
F0D4F944527C69DFC801928B7CF7DD776B73D00E9360DA9CDF277C0F53959307
3642E7FC3E048744830F3DF4D0BDF7DEFBC31FFE308400248FB1C538B4663765
DF344A22493F82F98DAD12A2A0E4AF464A83832070043D2F6BAF292ADE640D79
88BD038B26C7C6D65FB6ECD8A33E71C185E7ADB764E9CB2B5F6AA47CBB6DB7F9
B7C7FF6DFDF5969E79CC11675FF099159BACD7DFDD688D8E6CBAFED255CF3DBF
E946CB7A3A536DB9B9ED34D8EC2AC4C074AB9915032ED2BE9D5C4BDDC8B3BC93
4D770A6267AD992CAFA92C4D669DB1948FE59DC9029B27059C0F17FF2D0A9326
5AF9682B9F98CE274A585D86D9D76A2FDB60433DC2E8C8F092C54BF4CFE1C975
F588D81CC67B9377D08E970E903BFBF8E38FA7D2C8F56198FD22FBA053A779E3
6B9E55E06FF8A6A4F11AD52B55B80F04A5858B21AFB87AB8BFA90AD09173256A
A7CF4173A089B3B226D2BD77B08C8912BB5403F16A5AD3052234763BE2278E43
6AFBDD72CB2DD8191AAA3ED4B0A5BABEF8C52FEAFD165B6C4107FBB4A0075CDB
75E6F730EC99C8041039D30553EB05DEB011FA504505DC5EB06DA25505694837
74C2AA709F985456A4E8B8E555119A5B35988A2E054A7607457816ED1969C79A
0A741247B6ECEAF205A72C5D19F28ABD4B4F27C5F66FFFF66F7955AA2EFD2DE3
40EF756B8D41C750A3D5F5212C9481321B3497167CD54058EC167C56C83835CF
F8AC46513178DBEE4C14F607D1386007FAB92C037D9318526CA57CF1C5175F74
D1453848A98AE4A50A274809168B224FE3D4534F4D5538D72CD31057C932FBE1
0F7F8865C92348A30345C660B5DE75C076BE09E9546D8FD3CCD41BC109DE532B
68260DF292E0C22C696D529864D025D1A9C2CA991B0EBFCE24ED9E07D752EB13
4D97EEAB152FBCC4F249D32C5064666D9C66F186B39F8C8EB38B3CDF446CB1F9
C67FFCE3B3E5934BE8A745034B46C6A63658BAD1DAB5AB5B9DE93CB51BA990C7
795A37295D3D32B2747D09A0C9462673B233D0B7646242F3DEBDA85F66F8A474
F4B20D37999A6A6FB07E11FD587FC98AB5C32B9B5D53434B9A53AD3523A32B5B
ED427A4BA98F8F8F36BBB2A969CD6F87E05E39EC55B1CF86668A6CCD7C8238C6
A952657F2C20B85D85C6FED029D27F23D75DED15C9EBC1586238732343E15951
D9C885CF570630DDF3B953F5EAD20E0041A0F5D61D5D3AE2820ADB1CECEF3FFF
F33FFFD9CF7E463756A80DCB104AFFF0F0E881071EF09DEF7EAF5C8E4243CB56
EA6EF49756CB748FC4FDF4449624E9FA26C72696F5659B6EBCF18B2F3CD7D3C8
07BA9B69B4BDD5264B573DBF7AD30D06A7C6C69BEDCEFAB226BB7BF242024F35
A437FB5ADD4D7D37155A37CFE4FCCA039E6EEB6FCD76964B648E67693CE5D345
72A218D1CB053957A3A8186EE7A3539DB1E982FCB9931AEDD491206F4FB72450
56AF5C25BBB4ABD19C989AE854063E51201470EC4AC44E3010B1568717D34B84
EB415A01D281DDDEFE9F8DD9D80A26CDCAB31ADA83AB676EBC5895A1C53AE288
232EB9E412AF14DF21D780EC935C8ECC652E19028499552C51D8E0F3455C6AA0
159F7C6364CCAB60FA910895479B2E5056E7BBD454141977FD57CFBBEDB6DB3E
F1C413B45FD4D7DC435317A76B6704003B7F69993BE71D99A55ACC3F969C1973
8B03C4236455B38D54B9E90415F3AA6146ED169856663241675B34C7642AFA46
179183A82F3B37B4EFBEFBFEE8473F2241EE322DE293FAA68E61EC73C5E06B2E
D0C22F1B4064CDC83B1A524EA8CF34DAD88284829C8A82854623BCF2CA2BE5B0
1A306C19885EB1691B1DFDBC6A2BE26080DBB2B912A9C6C2168B7660CEF2D6CA
AA96BD1C10C8A752C8E9CEB64B6ADEB0FB56595BC30C4360D9386A70B5DAF0BB
EFBEFBB7BFFDED549101D8088B7120A85DC05E20E78D7B8D9883545105A4AA80
1065CCADC98FF065E4091E91A124F3BA77B66D6BD3172D8B547963C5279916AC
7F627C4AFBB9A7BB4FFFB77CA34D9E7FE1C566569EAE7CBABFAFB75DC04730F6
8BC8A4D64FAB4ED8C155AA5D5D3DCD46CFE454BEC9465B8E0C4F4F4DE44B976C
A46D3CD8F3CAD1D13583438DB189957D03EDA9D6AAE9D688946E3B5FCB997737
28DEC744425C2DCBDF766800890F1A231ED40E5A40D4D00D29446C583C6CA5F0
145D4636F239DEAD76B37E25C7F7FAEBAF8F1C6959451393CF6CD542A3728C6E
5BDF46D999AA7481AE35B5D08D19F8EC4841EA84ED4C6F031443E48C2D985D9B
594F4F97D4F6D2A1816C7A7264E5CAC16663EBCD37CB5F7A6E6A74BAAF993618
5AD49B6572510B0B6370607CCD70B3A7BB444EB51B5D59DFE0A25462025FD611
5DB278E5DA61ED623DE4AA91D1E189CEFA1B0CBD383A225F7CB29D8FB7F295E3
72D47AE5316B37E5253449A2533EC437BFF94D73DB02B265C0BACBE1871F2E97
0E7621F81439F95AC7547600B4AD0D05779A590E3F5BE42DECF9491643F4C369
744F08594EB015DE78E38D5A65F2466ECE4ABF36237490D4EDB28D5A5E714C42
87892302F501EA04B6E4D7BDEE75BFFAD5AFCE3BEF3C2D19127381714239E744
5A5EF5CE8283C27E8C35563EEBC5A5E0D56384A066169E1F6F5DF7E8753C56B7
7EEB5BDFFAE31FFF98B802CDEFE6BC0ECEB1CB3C7CE20C4C7198D42E20F13924
267904C70CD22C860D0DE3A73FFD69A7EAE7161D9DF8F278AEB9E69AA38E3A0A
0B8F234F99227FB51CF7C0B45175C069C24D57035C493991679E79260AECCD6F
7E7341015B66C4B5C9B51C8E139811222E4434FB6A3C274809A496F91481311B
65163B366A2DB4793A65477A22A8D4FE9A01C695DCA96414D717F409D5475601
E054C0421375902A02430AFE0616AAAC2252045A65A00C2073A3996A3D286BC7
10A1E41A368C0373BE46BBC18F6C72923C7434E03B9A28DD4E97A2B78466039C
23365C348CD8544E36A7C087836DA76F4AD7EAE79498823A0429A9D990BBEF5A
357DAE2DF4C52F7ED154044580CD4A25C2103CDC4EE8B899AADA290C13CC7016
A330F9FB8BF87357B33130A04D3076D9A5979F70E249BD3DBD9353D38527A36B
4ABF34F4FC3810DA0DEB5C047A58DA502A6041A9B16CC38DF7FEABFFEF3BDFBE
7D4ACB93FA36DC60A389D13E29D3C9A9910D371AFAFD9F1ED964F9FA438B7B1E
FBDDA3D2A42EB864F679AF15027F64EBC61C9E29F041C6954B55B51F08678C2F
80FB5E5A6B2F17F22261ED3153B71041F91C4BEC3B226F263B053D912AC4A03B
E56106EA2E3864BA88769E8C2CF434952D589A4804971ECEA730CCEED4A99A84
A3B96B444BA0066AB93104F7809E65516FDE6EA54E7BE960DF92FEDEAE56BBD1
690F35F366E1DEB66470F67535FB9AC5648E8FB5375C5AF2D51535BE991CE03C
6B760A047B9A6A74CB02945E7A79CD9A91C9BCD9DB5C6FD9068F3FF942EF0683
ABD68C2E597FBD675F5CD56964EDAC393ED9EAD6FE999E628FB9778245006588
60A64CA0C139D7D6979E76BF3622C9B1260D4D4C4C18A16053C376F402F3F9F9
CF7F9ECE4B6E8244BA97BC1126512C50915C83DF2755B5893534755E110412F6
4855ABB8BCEAC3A33FC17247E443F7D545BC7FE61C670A0E652390EF6B72F45B
8C065318D65251D134995D20B74005546C4E67FBD5BDDEC0F99B3F6476BFFAD9
8F60F96B06442F19C211E3C6E1074B006497738A6966358BF42210C8489092E6
8A1C30001CE8D86C0387890198F2890015FF756FCA14A20B26F4678AB0339C54
62FFA41288072623CD8A5B7A5DCC6EC89CEB8732A62FB8E082F7BCE73DB2EF4D
E6A3BD071B52F49279A8D90DA79984E8806117F2435909184C2E3CCBABF6F0DA
4EBBEEBAEB3BDEF18ECB2EBB8C47A6AC88F927A88041C6A9F4184CE792850662
69162A9E23CF71E0C83B95EE08B06D2F6F061E369FD926D2756536E008F698BC
48AB09CB8ACE383DBC67BF6C0EEA31A51375C18F7CE423D75D775DAA88658E3F
FE784D850EBB11D16926AA8E616756458D8A20B453D146A6AA288A308BBEF99A
D7BCE6AEBBEE8AA6A817B2DD996E3628C893F86EF4F56A2AC73A79A7D9E82EBF
A0156D15FD7F5BDAB85AE0868E9E77A7996560A8E1540E2D5A9C72F90A93AD4E
BBA8506D143D940606FBA6A6C69B5DB96EF5C637BEE1273FBD73647822E672E2
FB54E565D9E568689766827727F6889F1479D49820C2926624AF51B71B014190
0DF21D7DED6FFEE66FBEF7BDEF45CA3A5EB10A882D8E8189B5EE7E1A5B6FBDF5
8E3BEEF8939FFCC4BA99D30E6E93B580CF5D9316690DE6DC2804DC905954BBFA
5EFAAD6E71F4D147CB5D239645AC296E5C9B7E3D05D95957C1F9D94E4B17752D
E9ED6E8D8D4F8FA5C543597796D65FB478FD458B5AA3A3AB57AD1E1AEADF7CF3
CD9F7FA68013E78DACABBB470A78AA5512B0F4144C59BF7B7ACD365BAE373C3E
26AFAABB7F60CDE898B4ECAAE9EEB6D474A36B786CA2E8C1D429405B834383C3
23631FFDE847FFFEEFFF5E03E6984574438D19C661092A5039CFCE4DA6CAD0F1
2137638ED34856870B6885487DA799A4F634959A15FC05C340D11A4B89B2D11E
C82B08A867D882559F1C71C411B291E5279D75D6595A20FD0AE19E57545F46FD
2C0C8A8CA89FF8B93901C80E12AED4B67451662D15E53673A87F6CCDC81233FB
BE3C324C498833C37FA216F732CD37D584EF7C78233605B5873C25E76A715473
9A6B8F5F83EAF06554608CF9C5C7895347E4DF42267626C64034101A905AE4F4
9774968C3665874FAEB7B4692BDA552BF114E2E129240E6BEBAE7BE9B2D24664
76755917A1BAAA273E057E88AFE01832710E5835F06BE9815153CC4654E9CD0E
3BECF0F8E38FA3F3E22A58D6194EE1008CCF02E1717BE756C3B35781F58A077F
ABADB63AE8A083BEFEF5AF533864EBC17117B05DF19479D1632215939D6813BC
A42C3AAB832115337AF64BE38DCCA1C49177224C6F749CAFBAEA2A0083FAE791
471E099526D65B61A4DA48C427C8AA2691760862CD130140BE89EE7187358DAD
74143BE53F8B29EEE9EE2BF74A9A9A9E2A888B52A7DCEE9D5864EDF68D7A78BD
4701F0F0D5AA37A469CAF846D127FC99679EEBEBEB613A5872B9B88D992D4752
055143EC1AA4CA8BEDE8B23CDDDA4514F7DD77DF6EBBEDE6D405A65FAB7AA552
25B3D87959E5FDF4D34F4781429C0134C409279CF099CF7C469F48526BC34921
3DF9E4937803A6968DC95AC8C75945ADBACE00F35CF4501C18D0B600AD1AE98A
6A5A673E41C695110A3630B7D9661BF9D3A6E764DACD39373BA15258D945FBBF
A209E0D060B70EF7D4D8D4D2819E6DB7DAFA89DF3DB664D1903C8EB1B5938B7A
D2261B2FD3659F7E6ECD661B36E80F29DF576F3A79D6C94AB3BD6FE8A597562E
D960BD3F3DBF6ACB155B3CF1873FAE1A4BEB2FE97976BCC8A33FFBDCB37DBD7D
1393138D2C75F51685CE7DFD831C033DBB5927B3D08DDC92913043AC3C495526
468B026A3DB2A1217CB38A41D74E8619B2E69C4FC2DAF0ADEB6A5B6EB9E55BDF
FA566D06F9C4A4D068958135E38E349A64CE363E440C3CA49939697BCC4402BD
409C172287045D16566048BA46D523C15E145E02DD4FF520DAB1B527AD5DF0D2
4B2FD5667EF5AB5FFDAFFFFAAF009E41472F1021D0B1D21B734E5169CADE860D
D4FC500BD4D9D7E2C679D51E1B601A0AD8A1457BDB6916BF553EB388255E10B3
9BCC9AEB3BE7CB35424F68AA00104C55D06E1D9B15B940007450C45022C15444
922CD74469E7E8AFE456D179E8AD7FF8877F38F0C003ED2CCE56C078113192C7
15E0FEC4D6D127844C30136BD17E6BFDDD77DFFD9E7BEEC17D2BF0100000E1BD
494441542E2771065D01D577DC4E7345372453A8220FF7DE7BEFBBEFBE1BB9A7
0FA9BD36AB0C48A53433BC1AA3E2ACA9F947E7EB9E942A3235679AF509D1C154
D51145866D8A9A2CC73A55BB435633E2FE624E2A4EA6C56C0CA2B87F83199052
552BAC7F9AA1451F7EFAD39FFED8C73E8606D142B8F4068D634467C645232B77
A36AA41C63FD9121DD23E68477AA76DF55B36B4D59A1B0C11DA0897529B854F4
570AE62842C746C30F6676A47A2597748B55ABD65C73CDD5279CF88972FA24AA
B4BDB4DE65B7D112B6A22B4F4C90F59C5B010325B7C0ED842E8A5A276D470AE3
F41432E21E7EF8E138FB1A92A6D5F40898510639774AE23747BC359B3A2A7222
D1EE8818FD577ECC15575CA12DA2BBC01B600FDB8CB8CE55C4B2969A66C5C3D6
145D7EF9E5175C7081E6CD9C004EB72C2010B3AAB37AAADAE4E9BFAF7AD5ABEE
BFFF7E93C44A2B68076BC75C7DF5D5AC57A447E09F8BFABAC727CAB64E033D5D
52C61353DB6FBDF59BF6DAF3CEDB7F985AEDA1FEFE25FDFD5363A32B57BEA43D
B77CE38D56BEF4C70234D8C9476544E725B8B135BD66B83DD6497BECB5EB1D77
DDBF7CC38176D678FEC591ADB7DD5C771F6994E0D5F65419145DD5DDD540CDB4
DA05FE80E242824EB55CB8178E64812607E60ACD8F3ED73789116176ECBCF3CE
7AAE071E78E00F7FF803A83414A49F37550180F9CA6FF89A3BCE6241A351ACD8
CCD7ADE9D596A6BD2E9A4093FCD5AF7E1543673EC549340C09EBA0BA250276DE
7F8892250080390231859732F6C1A59384E36F35A9A7D799679E79C30D37BCEB
5DEFD2B06DC691339BF3BE189DA96AE745D620667910942E829FEF414C709102
7562A36A4DE8C03882D575DED9CC1A0F7F27556E6E4CAF98CBC57E1BD31513C0
8E225848D2E0DD0D5F3B552B40BDA7F88AC2D6C1F24535AD4433F04C6D575263
FA93375E2A03D4844950B7DAE7EC581440ED307A1332399A676DF8584D0E7004
AEC4148A6ADCF69801180882CDEDC236002B6F7FFBDB7FF4A31FA14D63B4C39B
872BC8E6909E267209020E618E2F67608A39120CA979FDEB5F2FA9EB32933C94
1ECDA980795E0D86041F66A50B73B7DE7AEBD7BDEE75B7DF7EBBA3FA0EE3D5FC
57FCFB48BD6E0E7FCC14CA3E990AAA9FE315B82633EF18B81D391D769B022C9C
870DB6C3E4625949CAE402F47553E01BC48003720AB884DB23BFED6D6FBBF3CE
3B8F3DF6586905FD095B490F58F5349C519CA0BB22B000F8107175C20C128057
BEF2950F3EF860750CBA4A18F7AAAC21EB66E961871D76F9E59715CDEA3A8503
F1ECB3CF1728CA66CFD0D0E2027698A6E2A6AC613E39B120001D31883DBAC9C3
6BC36990575E79A59E2856975BCEA6D2F165B5B4D27BEDB5D737BFF94D04CDB5
D75E7BCC31C77074ADA48973BAD12621BE7C66E586B36E8693705AB06F0892A7
D2429799ACAF69B1312C6A3D46D885F3454DC92CB8FB0DC1222D99361673627D
06B4275655FAFC1766534F5769EC6BC7A4EE666AB6D2064B966CBDF9668F3FF4
485F4F5767AA95F2CEFA8383CB37DA70727AE2B9E79E5FD297160D0EB5533E32
36DAD5D3B778E992A9E9B62673A2BB6B64B8B5E9E6CB5A297BE6B917F4F093ED
BCE0A25CB4448B42C5616F6F77C9722CF12DD3A120D678FFFBDF0FB37C2A0324
E496BCD19979866D0C0B08037C657D8DEE757CC26C9B5866CE10F4021E1E0ADE
01318957AD08082CDD1A7DC651C766BDE9A69B3EF4A10F69D7716B1FC248DC93
074E2E933F532EC9ED5826AD35810AE3E7171827AE188513AED66857AD1B3506
6D602BADF960681007D20A97D92664B7C07DF55F69EB430E394463D662E911E0
7FD060F444147BD0FE7D010F9E79D65FA503B8DD9BDEF4A67DF7DDF7C20B2F74
04885D4DB8C2AE6D14E82C684C4B71E8B0749D02B33D5D03C4441C964F905EF2
2E28D3825EBF59360625D7837D0F3EC305AF1217F7DE7B2F6B6149C2860411F2
EE77BFFB0B5FF842B403F085DC8D270FA538C6D3696E5994A81A61BD666792A5
629F60766B0EAFBAEA2A4954492D3FF5C73FFE71B98C279C7002210A660C3963
166BB04E464ABBE09BE30666050382F8258371BC1DB704EFC5D1B5146A49BC8E
F385A001C6E27EA4D05D06D99E02B44236C12EBBEC72C71D7770232723B0095E
F18A57485B91D28E7907EC2479D5BFFCE52F63A839C2F2D18FEB3031155B6D56
B2F43BA2B3FDF6DB3FF4D04331FDE4102333833B2A65BA4E1347C59E2A6FCF09
336C165D5757C1E6A5F7A71B0360A54AD668BA3194B473E4B5CA5B5D3B3CB278
F1C0DA35635B6EB9F99FFDD99FFDE217F7682F923990C12275A25D22E544AB00
5970E6CBB5916BA2356214FCD34A9108B365474D0DBB65A3A962B57E50C1E9D6
C8380C13EF2A6F1A0C284367596F2814CCB623EFF6ECB3CF269EC06CB84A2185
86B2F83A5FFAD2973EF2918FB0038859C54E993EF0A804E37A20DF262AC50F19
B64E8B66F2F8E38FD718F6DE7BEF1FFEF0870B83629807C45024634B55188A29
7502C2AA5D93CCC62A5457D12DB8A7DCD0ED2EEDCF76D11750C35DBEC1FA5393
E3FDDD5D4B0616E9CDEA975737BA25DFD7EF0CAF6C16C2AE21F5DA3FB86868C9
E289228CBC7AFD4D36DB73CF3DAFBDF1EB977FF6E24F9E73EEA2A5EBBDF8C24B
FACE58BBF38A6D573CFEFB270B620F29733A3C77754D4F163EB1F7B19BD035AA
8EE27166524501A66535C3805B20B4AB8EADAC2FA854AE5603612D10D23756D3
69369F1ADB7C98C68E5E6277C26B86334752A32652EDA1F2A4368C8C7425E9B8
D34E3B11B0C1885C40813566316E223B6A8020C91DD9079FF9CC67E6BB0E4428
A67135C873BEEF23949D044D8199447ECF4F7EF2133618EC020B84A04D9741F1
3A621AC0BF315C298473B380198EFF8C5961205A9C08F68CA1DD11FF1155AF3F
2157AAF7BBEDB69B9680343F07C7BD712C0DE49948A5E58176430FA2E3A6EFF3
08185B10C84867E8737335A7121762D59B87D29ABC625436864BB611EE3558DC
A38F3EFA9A6BAED1871A06EDAD305FC063EB8E5A44495D4AB10980BB9CDA0E89
B73A6E430C20A70AFCEC6E25141D3402BF26E22592DEA38071DE382C72BA6473
B8D1C56C54410D84C51B762F617059B77442C42EA40ADCA15C2729AC05B8889E
5D5F63B953204BE0BD54E39FFEF4279E94C09B513B359B0C9C39481AAD9DF692
161181A3D77EFBED27B1CC6EF10620DE76E8A1877EE52B5FD1CCCBEE39EDB4D3
D6B1FC334D5657B13D4016CA9022F38B0404163D84F580C22727C75BAD4E510A
DC9681B668F5EA919E927063EBADE525FF017BA1746E74DF0E116C302C0082AA
32BE29D40F8252123F4B599EA6D7456E7B1B9B6FBED9134FFC510273E9D2C155
2BC7E654C006EBB30F9862C4F7B9E58B82CB934E3AE9739FFB9CE6E8C0030FD4
C675AC80B6E460CA8D6220AA46188A3A5D22EDFAAFBEA30DC197654695E1F72E
72AE86B65A6619BC8A14B061E8B899DBA81D7CF0C15FFBDAD7F2B252029E6102
59BA1AEDB25385DC4EF3BCCC548001D1A8E8F7B8916F9D952CBE663C465451AC
A20FE1EE2896B5C035A7DE9EEE9E46B3276B2EEA1FF8D3EA17A5307B9B69B0B7
68FEDBEEB4B26671AFA1BC48F64FB5F26677A37F70A8D95D142AAC5E33DE9A92
97DFD7D5DDFBF2EA357DFD83A3E38569ADEB4C76A62EB9E492633F7EC2B2E5CB
9E7BFE457D7FBD22B5B3AA591055E66E604279BBE11EA825C35210D9FA9AEE75
E491475E76D96558CDF03A91FEB0F9982A746504FDFAF3F9A694650297004400
7D0FA824521AC1F2E8F3A9EFD321AE965F4C33338E48736292AE5E23C9CD22CA
2F7CFCF1C7237BF39CE3ACB512C1FC6A578D75F38AF2C9711D8BD79A2B6C6689
3CB450C4A39DF3BE902CFA9F923272B69C2900B3E3468A31EF335B01FBC80057
D108F5EC24ADD9C6766A3B81867DB634706BF7541156933376B08A13112721AE
8853CB0C3B7A2366BF324697F41320125BF69A2E7D689E61FA356199B9BE8B4D
6ECC546CF164ED9B55658A761FDDBA27C2DC52C5666AA6017C24DBAFA9CA6AA3
5D70D3DD409354A0BE0F63B94D0AFC60C6C3CCC741FA8553DBA978AF5C10886D
813DC45D28E2689464A5FCB6D6373A2E84E1B41C0472CF3584B94C10DD8EBE4C
F6716376C92FAC70F60C2D49F024EDEF36673588F4CB7022B47B0A1DEAB6DD76
5BB9D7C015991FF45D210F4B6A0E208A24D4C8356450C3B3845224BBEEBAAB1E
0C4FCE530F2D1465BBB19F57EDE5AE3BC6BC39FAE13658EC781C59AD874C03F3
EBEAE2BBEFBEBB0670D5555721DD9CDA7174423B43FFFCC0073E70E38D37D205
3A55AE3DDA85BBBB3450F3223FF5939FFCE41E7BECF18B5FFC82ADECFEA0AC9C
1B3D693AF4E0945739C682818C0675ECAB0670778CCB0E592CBD90C3BAD75E7B
7DFDEB5F8FE64BAA42A0EC66CE30FB0F2BE4FCF3CF3FF5D4536FBDF5D6F7BCE7
3D146F68E68DBB89E42F0CC36081B86BED51D147CF414B864DF44CFF8589904C
33EE85ED000656447E3A25D9597FD18B97FF76951E64D69ADA76C5564F3CF194
6EBCFD762BDEFFFEF76B0EF5B0CDC971E06CC313EDA543BD6B86270706BA245B
FA4BA8F0EA35239C89458B07D6F193347B3990C8884F7DEA53A79F7E3A2922A7
039DC063F73BD9533B33FAE4CC33CF945D053692BEDC8EAFA4D0A40C2A5A176C
A01E107F0888D84116F1C43767A7EAD3CC3A4B99776F7EF39BBFFBDDEF9293D3
E35C78E185A05ED1A94EF0A31B6296B459F51C8C8AA4394F7FDC9A93C48736AA
AC517864F49691C37A2F97542AE17FFECFFFE9048D73A8F6BC1B552B62227EC4
815C2BE598ADE704A9AA89DD669B6D50B79A344E9C233DDC6B3EF737556031DB
079E8DB3CE3A4BBB4B066E5E91213BB3607046166A0EDD1062BBEDB683871520
24C542A807835A5C2C10718E6E399C667AC69EF65499B97A5ED9F40EB4A05951
EDB8137AA8F7BEF7BD7280B41CB82E3A9B1ADEFEFBEFFF8D6F7C0375CECC5F77
DD75871F7EB8B933AD30781CA23BBDE54B13AB1DAED99654944F89D4226A98AA
CC77744B8E3BEE380D00F62E5D9F64BCB1F15821EC7947951A815B26722312D1
A12888738AB3EB243D33198D21D7E6DA6C9AAD20C91F71BAF5279DCA279E78C2
7A84A7C07D02844109B231408628B3E7C146716C0989E7815C997DE523DCA8C8
CCE3B18A7D77F0B87C46D80F5E5F0DE6B0C30E2359E6426AE4AA6EE4A49584A4
961BD3276310B8C95989CAA3218C3B0760A699FA188371F68B55C1508D46A5C7
AADBE3B1996C2C82F8F9AFAEA01BC9522361C6A13534D107E335AF79CD830F3E
085F0926A131B10E0C3A28AF65404F5B2BA36E63CF13C4AB0B039C99F0E16F04
BEB754C11F5CE28D70749D09A3C2E28BC5A07E5E365694B93557800BFA2CB110
46FDCDA980A35C70A8242F7B2C12B13FE4904374AA7565F985F24BF8EB45175D
24BF13FE714E3862C8342E06BA0F0C16C417BA7A4F05E590F89426CE5AE353D3
9DA145FDC323E34B160FDABE5EAFB777F5C8787757319913539323637A70CD5B
3AF3EC4F9E7BDE859B6CBCEC831FF9F0E5975F3E3A3EB5C51645EFB3E9A9BC26
C4A1F92567C1D85057555C649A2C0327D0F9609270322BE5A360C6B11599256D
C282CFB2ACE181BBC0FA5B3BE14D6F7AD35D77DD656E391F781F486F8CAC62E4
B77DE6B49003A712C7326D77D965975FFFFAD7D086D47AC5D8D867B67D689D0B
C802C5CF02E54635DFDDFF34B8CFD41FAE3E4AC17F22A2C8F77D7754AFF1E484
100D2EF32D50667113EA255343B623CFA233A569FCD39FFEC4D4C558B14109F3
3D57AAE8CC38A4AE87E6BCB325D22C0232184BACC5757D7E7ED45147493FD11D
1D8613D28791FC0EDA139715111A954B20CD6D34AF45734C21A1CB29AA06FC4C
D0283E5156E26E00B19341A0A4B5ABECE89795BD142521A39E0373E454ABBE09
37DF69A79D46771DAC647D28175616A73E34F5B4EB882C36CDB941ACD19C94A9
42C63130965592501A5DAADADC0F7955C4E1885AAD0C21D635717231FA238ADB
780B4C93E8EF7AFE3DCF2C9C0CF18B2FBED8C2594F417EDD791FCD2A36A25E94
C85B5FEA9A72EA402FD11F85A403C1BFC62CF2E06C16FADDE7946372E9A5977E
E2139F700B3B92F4CC808BCA4C8C15EBA6E244A13BD6B555E60F0E2644748FF6
9346BCDF7EFB49709B216F016A3AE3B909F4F1DEFCF2B814583714C6110E220E
46D5500CD2BA042D55B126C74C9AA1CFB3EF8E6BAF073EFAE8A36FBAE9267C56
F06CF6FCF493238F3C52721F28A3C649460417D0FDAAB4F0A9A44F329B95EBAF
B07A9CCF48A105ECECFA5168B94C63865CA3B808EE21F7E9D478489FE8A9A53C
0E3CF040F94CAEA3779A765DED764845581CA42AD4E69C0743725706875ED937
2E5A77CB1D742D51F1B7BCE52D77DC718761DBE5CC8F34CBC6445D65444BE207
4D2C437F62A255D676D30417F85E81D2EA6E66D3ED62644B962C1A1B1F9F9C6A
4B43AF1C1EDD68A3F5CB26B8C5140D2CEE1F1B2E365E56F605892462AEB837BC
D9AEA1432C18A43E09ADAA055E349BD8997955B9C15641C4A062211222A0E430
8F33373EF9357602EB5D2FB74DA5684E11F5310CDEB2862FF08CEF7BDFFB6411
E755C7CF583663A4D87C20BBD88F21DA0ABC90053E5C363B9849D73ED6E2C05C
9354A54E07C601F346E5928CB6CF7FFEF305A4AE129759E8880C6788264D5FFE
E4273F29ADC00C585FA62A23BB4033095AE651524F0938CD5C39D17878B8BC1C
70EC215482C68CD78890C1BBA5D167AAB2B9160B0E83A592416F361282FD60C7
23AF1AC7F9DC11BB32188ABD148F1B9E89CD0236A7CEB54ED92DB7DC22F59995
2CB629F0DFE1AEE056523049AA956A63F02BAC635ED5D7BA93A91B1D4651C961
27894618529AE9A1871ED2459C12AE2D81532AA6E4440AC1F296AA460E043E71
67D96F1151E4448999DBB978A3A2408EF8473D8BCC569D68CE78A36A70022709
0118E3E6CCEC51E38B6D547CBD08C31827778ABD86848DB8B068D1D6F0255108
6B4570764177DB84C5A6F160ACA40C35903CA1908FE04116ED5C9E0A41401736
7DA2FD015A327A6CB35F8ECA5A13B884E0E0830F960AD76FDD98364A2B375BC5
26025067B999551D601831C7A66682611C7059F64A0CF6027BA15C8711FEFDDF
FFFD01071CE061103D40BB4BA06B2AD96D59281922501F417731B0E30D94AA70
3D290127535D72CEE0F18750C0663B8B4230869ADB55672B3B01358488770C15
A8BABE85F86C73C1BB90D81D868E26EAAAABAEFAD8C73E46DD8B1E900E2A06D6
EB229B6DBEE5D3A5FF3DB868D1E8C8C8B1C71D77D59557360A013ADDD32B2BB2
1C7C9EFA8A9850E19276751A9CC689E9726B56BE69D64CB90692A5ACABD1ABDD
5978D5A97FD1E0F89A7F27C74855C932F5DC786644A51C17A200ECAFFFFAAFFF
F11FFF51CBAD2593CAD4E31024C005A19D941E4A3FE7F048D6E88924358035E8
9A40949D2FD0B6D79891BF32BDBFFAD5AFD2A650D290996F575D9C91D744A880
EC794B38F5E57D088814BFCD76009C56FA9514F097BEF4253243264F9D4FE3D6
5EB351B25E771ECAAD203A555F7422631A838EF6CE3BEF4C43E2152B56E84F1A
008688637DFAADF6863C5A8734B5379E7CF2C93FFFF33FD734120A06984906A4
55755D741C6836A82D9FD97C70BE4773A4314E782CDCF48601AF60E1A80FE585
4BF74B1AD0D4D6E174943163466E9201C55BC2494833D9F1E22B0BB549967B0E
8F6B0EB5FD1CCDC6CA77E283952278C36F21164DA58EE7D17440708CCE3FFFFC
B3CF3E9BFD73FDF5D74BD65B9ADBDC217A6C411A75465682F03521871F7EB8BC
584960694D9D47C83A0C8FD7C5B5E1356CED81D1F2E56C0ECBCD009A55DF4090
47455162E99A4B918402D44259BEF6B5AFBDF7DE7BFD8035F6348216FA9AA459
5995BA0E558E55CD758E3AEAA8DB6EBB0D73045582CB4E958ABC4F5D210A7C9E
57173FE490431E7EF861CD27F3DFA93A1BDA0240967AC0BA2C9EB4215A0E6CC4
C96C84A64C368FB04D0978E4155F8DFE445F13EA68C09D582FB0DFF465B97FC7
1C730C42E3CC33CF5C878236001DA7533796EDF9D39FFED4140DD21F04D017D0
C1F879AE29C4B4A9A92B6D1A0AD48C3EC0B567D6E2C563D40B9DE190AF8520BE
A3C616B9F84D82EA4EDDA61177DD954E269004CC526DAF830E3AE8E69B6F3665
922654572692A0F5DE7BEFBDEFBAEB2E9D2EAC48997E0F3EF860ED58D622814E
FFE8846B8BCBA1F48E8C638BDB48E3D717A4F00CAA44A0C0A2A25B93869C6FFE
8928186A68EC9246ABFDAA39D1534B8BE365A6807877EDA6368DBE1081FE06F7
97B8B934B478F1F0DAB55DA5D95858E2A3A34B365CBC66E5EA6611AEEB9A1C9B
78DD1B76FFD53DF7F6F4F70EF50CFDEDA187C8C0D749DB74B3CD4A04D66A3DC6
D8F8DA75D8FDB5231B2C2FE829F2B24B562A3AFFFE7BF30CA769A52448E681AA
48556109615E1A1598F99679B0D4D083ECB3CF3EDAC635FA7E9E1DBD68622C18
82E8C40CD686358D7813B805F045B8CEF6DB6FBFC71E7B687D2531F30A00EC33
95CD240C89100A6872D933F0689AC8C5C1D52CC07AFFAB2FF801708CF6DB6F3F
C95FFC952C3459D1BDB4E2DAE4B309C52C323CB7C4C9FDCD3901385C9CE00161
303D3EDD5C606DA48F88F7EAC2E1340709B015F42CF48CD327F08CE2E37A4858
C95A0B60AE9E46D78B732A4DA0C130DEFEF6B7CBD69425115D40804B6C48AA25
517256C07E43CB07FADEC8A3FDEE77BFAB45941D2FA54E78135183B34E3016DD
0C753333EC40A8DB05A2D70D0EF0CE81DAB6A0AC299D04C40269D7B244F35960
3E18AF8E7F000A8B651A314424A793AEF5711D89C033814CAFCB69D81E36AD48
CCE1C67029D77A19E91673161AA744A2F4B4EBEFA3ED48DB256D214D827B35A2
08F119DC83D27701E5EABEDDEC4C7605BC87451FF1AA0F87B36C9A9CB2E96D1B
19D8151A0EC57968549CE46C57FA8B801372797A24354B33190F53051264AA65
7990EA655AF4CF7528680F2BAFAA177475C274F85E2C9843D873BE580C1C6D36
1CD6B4248B269181E298237D38962686C5494D213DE6F9E2BD3F34D8CAE12007
5A3184755CF527DD8B002043A25A1C162AB632B30F9C9895F664D582726CE508
0699532CE276B80C1C27401F522A90CCFF5911E9A52A230E842AD61F93B138F0
C003FFE99FFE893DADBF6A7FBB397CED15CBB11AA1B9A9137B06FA73909C90E6
736D2C8D96F804FC4D5435A48A233A654D5A77713504496F810F18C3274EA530
1A191EDE70D9B2977450F3860B81BA0B177C4A7E4A5BC2A5BF7742EAADC40F17
F5704FFDBE777050EE6D4FB68E51C1C173AC040481D1613C97095578767D47C2
45C735AFA0FB56848CC1A94A3603AEA18D3916052DA84FE43C9D75D65984C163
EB40BD4E3EF9644AA5C128509508ECC00D456C5333F38CB0C6086896D3144A98
085BC5DC70AC6D9D2F545BDB8AB57F9A080CA347FFD52C19D3E7EF138B266A8A
974FE49FD84CDCF3F04873880C594246D7CC3E3D4E59EFB0AE972A97B20D8D49
ED82A2D92F7F0DB8500A5EE991471E79EBADB7423FA42B1F7DF4D1DFF8C63770
7FD9E1FAFC9A6BAEF9D4A73E45E8AE53F5BA8FBC1C28574223660E211D6B13BF
06B54B0B66DCF57AD5AB5E2527CC3A00CE07B3876AF24DAF91420E1EB62CCD95
BB914A7C139363BB3AF38D2E6712D0430E0EBB3CCF31488409C65084C712A0D2
7F213F300226853E5191BF229561455D5CDF4485E3DBD5B8F44DCA485ACDC879
CF9EA347BA9D9E917EC0A90A9D5A5EA50A589742F6074A19E43322C86E77A7A2
9EE529D8EA9844355E237F9FD531A480D0BDB5C9EC1034A60662C785CE140119
18AB2F5F7FFDF5BAE0E9A79F8EBD02CF9AEC096C20ED2B80753C1749AE82E1CE
75A2EC78933DCD26AF8949FBD92F774F74B3523E811259BB1CF0BD1540C400DB
B5670C18B6BE728CB1901461B4C8298E0D3DA4D846CEDE61C6C666095C44F6A9
26C56D31CCE866F045DCC7EE3BC62673D14BD4D031165D73B37C6EB1378978EB
B75424635E35AB965EFA27C7CF4CE22C1591583AA5CFE96D7B9610491C06E4A3
AEF0918F7C842ACFDD77DF5D8627568286212976C001074430055209A7D028B6
CA0B6C64707A4C4F0F96816BA2C4AF79F5AB1E7FFC71BD417C5C72C92545719B
E6A19DF7568DA1362825516A965DD2FEF474B1BBCA46494581AF4DC5EA811A25
8FA3D14C29D4A3D79E5DDF94689095401331767C2A39BD6329ADDD5019191AAA
FBC576959DC34F3AE924BB4A668AD69F64FAECB5D75EC71E7B6CAAEA3438B72E
1B8B217D8C2D7B454879CAA51C12B4EA8D75045A88682F1B6EE3078CF8D539CF
5D33F4FBAAE58039CBA4C97DF8595F808A596871CA2C397C4A909690AC5BA552
544A1251FB4A8F1C87CA8448F369B3E9C8FB314DAE69A2538AC74C493BE773B9
7C8E2B60DFE8BE575D75D505175CA0ED04C1909EEEA1871EB25EC158D4E64101
D8CF73022B4A30F092AE8D71BC2DC6AB11BE88A939974017A4B288D0374457CE
46CBDB3BECB0C3EEBAEB2E02609A043865B1E62342B31108F6355422BDC43034
FF6ECFFCA637BD49EFB52DCF3BEF3CD6C58E353F34D2CDA151DAD6CAB6B315A8
D3A10FB1FBB38A1C0D3198AAF47CAA80DCCCE4FBDEF7BE6F7EF39B59E8EA4803
25761A016AA6313242C75942BCD7DA6F44BA6FFEC421457069CC679E79E68D37
DE88919142A237BA856C7BCD3CD5C9EB20A2654D5756B264906F22D86069604C
2B0455B5A23E2BE358EB8505932AB413C637C25C83B191A1B1E9BDB6A8CE82AC
432433707756DF51C6826AC68220265609D099D11E0C82C37173BECC28C946B7
BD40A058FFD45181FEE38A2BAE38E288237C47C428C1DEB817ED25D480A35945
856A026E7E4599ECA5975E7AC619671C77DC7192028ECB6715E3A6A1D74C8A3C
307C5F4D1692487FD2A43018DB5F665D3107503E8B98268584018796A1A215CC
05E85D682B21B67D361060871D7678F4D147A92EC71566BDBD1B662B603D3E45
F47619F38A1782709613489C46FEC9346AFE757DAC7562EC664830C064C365CB
5FA22D681937D3F44AD14E162B581C2742646EC5A84FB6DE72ABC79F787CF32D
B6D0808B139B25305C599E160D2E1A1E2D33D9CDB2A7CDD4D4D0D2A5C3AB5637
ABDE99B6DEFC5FFC2AE213269E4C655230D62611CFC031D5A3D1701B762DE656
4F2A9BE3CA2BAFB4FDEB623389513C7E8AF11D4F46BC628012AE88AC499179D8
2D806253979A7DC34220DF678770FBCA179616D69B61590BD425D772C0D184B7
16E12298B6460CB09F6DF87AA8A6C6E5D13835EDD0B180988163517E524E1928
4B04B74FEE3BDEF18E071F7CF0F7BFFF3DE3E473D4C3020AD849440EA30B5462
5416CB2F55E623729C7A361DB198EEE90A8D8FACE02510B55538F2F818385BC6
A680B289646111CDEBC5DD7AEBAD65A581FFA26A8E59425568301AB0DCC74660
9A735A94B42206740410A432C44A4211E28154B19AA4AA052AA19AA8F3786423
F6ED95F2736388DC2B22561CF9FAA4E78CC2D173E9CB0EB412D7D5175C836B80
A46B9A63490FDB4FD734351B2B15DD182B30C7E15315FD668977DE79E7DFFCE6
370E8CE7156B450AF85F1F342E58CBF4796EF5A777BFFBDD0F3FFCF0238F3C12
0D82D965487CAEC7D44DA9943119307B83E533E596450A55CBA9EA936B8303B5
EDE442962DC8A413A379CE014424828798578DA24E3EF9E40B2FBC70D75D777D
E08107B035289FC746335B29F21D92F70F7FF8C35FFFFAD789FFC4B5B4F28862
CE3C61CEB3423111ED146A2D5CDC26DDFFF4D34F9BA281330C0BEEA73EF5A973
CF3D97CC90A14F84F875323589316A549B9F7C26481D79EA7ACD984E801D4993
8040D16ED666BAFFFEFB7176513084F2F457DDF76D6F7B9BEC4D07F40C03B6D0
37C0CD90AB9D76DA499B090B1118645E56FAB305ED137B48D01A0C972FF6287E
0698117C945475BCF0639AC2D7C68DD70843929881D7977EC96EB1C7302800D0
7B4C813CB425F03934E5A1D1A7B58C1142169E4E9333B8C6A606F949C145E384
B878064149FB17AA2A996D9330BB1C08E96C58135E20E694FB72A6D08FCB69E0
F9F60F4C2F8842B268BAF28E3BEE283B007E25977C58FE1292D5AF10A3AE35C4
F4893B901574F12E796BFD934D6E4F3455F5EBFA9A5C64DACB106E4901BC1AEB
35AD414D85CD05FDECDB6CB3CDEF7EF73B7403C3405BCF390FB134CBCB14ABEC
A0E4950F6497917400512853CA70FDD986E97C3EC3669B6D0690C73ADE95F1E8
DD76D58DD8B232F2194495E6920D375EE3CCA68A443AD6E158AE924631E8246A
50B30DB2C3BBE6EAF6C6C4B6677670F2E37BA818FAA849FB7CCDAAB5E5965B6E
89D16965E3FFDA8736EF84BFE60EE5116A47590EF5DF262189D039034263D404
DD86FDD428C92065A344A23A176D32ABE83FCC3E9B32CC09DBC6F5E5713F4455
1ACBD5223F31D2202EB10557F4DAED2F49781245074087CCC4F4B4176E45C61E
009B4D3A406F28FA9A570163C523E2CD78CE8CD7BEC91590D436F4528585CE2B
5EAD152B56C8CC649D0E3EF8602A85C0D992AF4D73213B1A818D8B479A5DEDC3
6924DF4EF00781E28AF54F7CE21337DF7CB3BE59F3FC8A1C78F95C8E789333BB
F8E28B3FFDE94F635F1B2E5F7BD59CE9385ADE4728B8658169BBF1B3B9B899F0
08A5A63234A18341AAB559B5CCC32C98CD1CE48D28A17CE28927CA9E2055EF32
27AF42B4F53427D75D771D07C64C3D8E41590177559D8C5D4EAD43458751E35C
BCA79D046230EE0DDE0E84AB44568099381E6B6E236EC711C50CAFB544F5ABC6
11CF7D4DB73BA702361C373A977CC2BAEB9BB1B2A206D66D54C43A91552D55E8
D65893EA833AE77989A3AA9D23A685094C55919205964332911841B7D0346241
02BD710C9C688D73B40B6C668E0FF50E98B324D5509CF6066A9E5FAD02DEDBDE
11C54B2FBD541B12213B9FA76BAB28AFFA1876AAFE04D219C03FF7DF7FFF5B6E
B9C5B5E9B18604598C3E8B2AC44EC27C91030DEC1FFEE11F207B4A65ECCDDD0B
52A89F71002F557A8BF80407D959B6D7BDEE75F7DD779F6E4728D24D1DD2CC08
99A323358B13C3917209DA33F327B03235F723852675F9CC420C0784A1A02F8B
FD5A2833D74150CDE5FAC6DABCCD56C05E749F23E2A8471F7DF4D5575F8DEE41
8299E11C1EE998C48CA715C4864C01B6B1DD24A29E6E2DE3E2490E29B39AAD23
52FCF7BC4C042AC710E37C065FAAC8496C313B85E4221DE3B9BCCDE2094522FD
EDDFFEED9D77DEE90653B6996C31A45915564C88BD29186AE755C0471D75D417
BFF8458C0E6A9CB98D53EB7179E271CA2B12D714407D4E6E2128AD68F566DF7D
F7FDEE77BFABCF1DDF70719B45462D270DA2415786F05A7F220C6238400D2F5D
635D778E87841F0951C7A8531984D4F7A590AC87E67C715A4046A0235D89CB1A
F8EC7924AE5837F8057FDDDD8A524523D7A89A28102BB30FCDAD114C74FBA2BA
3F55B62A959D91E425CAA35A182DC66DF4D4F47B608ACC2AC59462CA59071C7A
E8A1B269D83FB6BDB07C357EFDF398638ED1B21A97D8A83A191BFA4B106236A6
4F1FDA51762D41A7EA19E088565EF5FFA270B053D1A6CF2E147190CAEB9B85B2
31CDF95BDFFA560D157801C6812CB0E38F3F3E1EA19A290D64BA5D76FF65BFE1
CDF327A49223D2736E1EA7514830EB93534E39E5924B2E81374A7F75AC38DA9D
5D65E769ED4CFDF7831FFCA04C280477A362158D52633AF4C48DFB10925B0EB5
259D9B5BD89F9BDDF8322AE01A7D81D10F9E2EA364D9B7F3CD83E5600A192876
94A93C10583EC2911EA451358FF1DEAE29E0F972E718BB0E18B2EBF4FDBDF7DE
FB9E7BEE31C92B7E36D3BECF3EFBC80E70D0D52952E234A4D52DBBB3EAE5C9B7
1F697437E9C93457D593439D5106C6F7F1D1AC20A3C91811BF5C50F38981F5EF
38CA2A879266DAB835051C1F04FD815EC7BEB174F54FC806E244B285CCCCCFF2
916741B64422A6D93BAD1118DA81794767D4866F7C6AC7476B6E7D9C16B6BD5B
1E80754F333D406320D2CC7C934BF3492799F8A59646AC1D1C27171A15893DF3
932D7030B6DA6A2BD30981E377155D0CAEB212D12A24F8091FC2B1C71E7BEFBD
F7FEEC673FE3FBC6739159D443BEF6B5AFBDFBEEBB9DFFF376F4F499E9D486B6
1618274CFBE9D65B6FFDD5AF7E75C30D37487940A1CC2D88B63958879D15AB80
DC7AC11C5511BFCE0238B23FA700754ACF9353FB8E97CD6434790532E76CE415
6127CFCB247823762AAAB3BC621867EBB8B88D1C12A21CA09901D52C8153B936
0ED8CAB694CF3AEBAC73CE39873818A5FDEE55E090A3B121EE7C422F36DD947E
A2D8E9E800C8D9DD7A5D4B00BEA3D67193E7720DA5DE4861FFE217BFF8CD6F7E
133A4CAF6BE2E43CA879ECD0165293C71D77DCE5975F5E64A327279D569FF315
83133544ABCB30F4B9FC06CAC06ABE45FC7E6C9FCE7B979F9AE8C0A1AAF93C30
0E24F16422755404D5BEE64C988B897D40A884461944F9E2A0518DCC32559CCF
5AA3EEB2F939B9C346E0E1D3E35C70C105471C7104E39789832A8AD23962CDA2
1070A035F2A2A4592C6FB3E58CC3B6B5C407AC4F3535D3A9DA7762A2A5AAE48F
1FCE0E41CFF7E2B0002B8B7606F08B34B3C10699170C3EA0945FF8C2170E39E4
1087ACED45617E3542639F88D7D327071C70C04F7EF213CA10407EE916E0A400
609B7D33AF603471056BA1666BC7289410291AA45BE311CCB073EC12383465DC
937E13CFCB6CE0670A295B04A61E9C0C0E6BED5C95C529113E3D2F766A5671C9
756631E93AB68FC8420E2C5BB66CFBEDB7977C60BDC8A7B403736A9A4911684B
BD06076B541CF2C8648718758B2DB6D8420284B5337CD2DE919738421F5CECD0
A848B51AB3380A3D304C52B7C6010FB8500E9837B2E99E7EFA697B3FB507B6A9
C211B2F2B365E40790FD52148396FE93769BC6614E09FB2288981A8D91BD2EA3
DB0905501F922A0DED2EC7EE879302A6AC96407548A4569AC911D2007447B926
54B6CC7786350CD928C86E439CFC7DCB620B1A6BD65A1DB02BB0A374B0FB02B8
312F2960CCA2F2FAD7BFFEBEFBEE937173D5555799E22755E552AE62740E2355
9E9023B4348ED6810134A7232A0FECECB3CF66452CCE3C630645C34FAB877DC7
3BDEF1831FFC00DD40980EAD608C12B81EE6593F69977D732D2F62D9370699B3
2FA9228F6C0726DB5411B3D891258643F8AE53B586F569AFEDE4F9641687446B
AD492075A299E994CCE7B5B5F6F75DAF4C01522AD3841A3F1CFD1A9EDEC82638
F1C41337D96413D348D55E363735A5D834787B847FB1B2993A53F45D73CD3567
9C7186D69A32D3152B563CFEF8E3D8DD79D518CA1E43CCE145F1CD762264EDC8
3FD92F84B283DB5955F1559326BC22FA3A4E1163E0D15C87369B643FBE20ACC8
CBBA06B7AC8F991D6283EEBD862996CFAC44888F19C733DFF92518E35902439B
57B51524B36CE26869D0BE3EB9E4E65299E04434EBBFAE996105E754C0BBECB2
CB830F3ED80E4D8839ADDD55D36E4CAE054CFF39B771CCFE620B52E42971612E
C99B6FBEF9031FF88043EBA893C65C9D28D34C032BCE646326DB1279163419E3
21F70F5B3818523C047617D342672D921D40779DE54C15348F2F634C30E7AF7C
E52B1F7EF8E1AC62ADB2A1996606621D94CE67D285DA99C197707B447632C0D5
98D9A1DAD8F340CB677C0F00BC5A6E4E28AB0F80C60A312EBD259E9F31761099
5B01EB7EC0D558247A3EA7501A918202B66B1503FA4E68936224B711E1FE587F
983F64112C920853E0F822C50CD7B4E9C132C8D4D2BD707D8CDCE6F0588DB9C8
5D23C1C6C9AA960991A281C1DBCE78E31BDFF8F39FFF7CBE03CC3EDB73CF3D65
CFDA0FA6CB29EBDAA8B881E85C64DBCA8E2F8B0416200FE491162831D8C2F4B2
8F0D6490207EF6D967413C1A49EF46CB4C72EC1D96AA06C93A005047E9A6681D
571F9A93D29BD5E94C302F8672B80691580A611C67BF8846582C124E6854ED77
6A0F683B17CBD435A67C18237856C0D1208DF1524BA55AE8B8B6CFBDACC09448
B59296D67FC9E4A5591077E7F2355D9A938873E16A086EE4325522F39D2F2604
0F3885CE9EB153244C3D8DAADFAD76AFD9D05208A62D6C23D632917E96089BB2
E5A43F2D5FBE5C43229B65AD30E7D4D97A8E4E6AAD93419AC54B30E75418101B
D972885D9B8B067D1CD90DD101A6299D33043D5FFD345B825A5B582DF9DCC895
6801DB4CD7BA6BCBDD74D34D727F311FB7D9661B19431A00A8916F7DEB5B5A74
72FF7386A0B9ACAE43AA88B09CBEFFBEF7BDEFF6DB6F974515573326146B7E70
2D329C57E0440E0E25C81413432F6381CCBEE2E0B442FFDDD93B276E7EDFDAE0
44A7A58CAAC130228BFFA52F7DE9139FF804DE2A0892B1F2C5C5CDEE494AD5D8
60C623DD26C162416717AE9613897CE08623188A85508D93694731AF0A6ECD4F
9C9598060DF8924B2E49A181290FE836531C0AF7E54C337955D34CE5E8694CC1
1D775A0AB1CC2D16F2807557FD461BC59EBB6BE7E32660104C0115AEB182D632
17624B5AA3C039E009B5D2251F833223BF05BE1F7455A7A2F58A681D9F49137B
721A7D71590FE0113833CC82E5425611AE5294AD5BF0F99BDFFCE67FFAA77F5A
607EF4FD1D76D881D27BA3371D56F5734951496949977BD5BDEF9D7E4B55F0B0
5971C43B13E609F451F7D7D0C78ED3D6241DB45676670D6AD002E910EA9A4610
9051FEE4273FF9D9CF7E966C2EE931360D03F0303083E4795F78E1853A277E28
275009BD9E7AEAA9DFF9CE771E7AE8A15441D3ED88B3763EB78428C05FF01DCC
52971658F9652101CC8B0EA6180D64B65CFF537B45A442942CEF7DEF7BB5CAC4
DE914ACCC06CC5C392F127077BBC9738F0F6F3703BA8F95BE07C354A88FE934F
3EA97938F7DC732FB8E082934F3EF97BDFFB1E0C85A9340A3980C6B8E916C469
30DBBDE2B60F18EA9C1C17B5DC5EF4D2A85F74C75F1628F66D4C33E30A9DC02E
1955B21D4A1697E1CD399FBC387A4C235EA6E1AFDAF09AE1A79E7A8ADD0BE221
FAC1C40638D7D93C39E0F914B0018FA932A6E1C195DEC22643AFC313F7FEF7BF
FF861B6E702F0A9E9DD0A0532A794501E60AB79AE9C30626366B4194AA321567
316253CB181BAB41B1627ECA097EBD286ED600D89F679E79A62C03E261EC6D17
29392557DBE171296B41142FB4EE426F4D9313786B41EAE29694A0E8B1D119BC
853669321F224286BAD7B6DB6EAB45079D833A80C984A7E690BA603D0BF8DC54
05A8D02CF9CCF28A144C468CCB18E80695469740C4B8551833E6ECBE5D6460D2
51F853798C356F74A1B5246E8CBD32F0C8F32A60FD123E26FB6774938EA7BD16
03C9AAF23EC3D3ED836A648D922FD7CFD3A83AA3F11DFFD0EBE13A3C527431CA
EF69C5083269570A85566C354390CC01228910EB6AFC26AB40C87A0379489A59
C439E7CBA93E831B31825C43C226D3A90368E309A95973B6219AA10111C7C3ED
B4F6DF7FFF7FFCC77FA47ACF9C12F057BB21819BAFA1F01AA1F62696D8F280B8
9258A3917D9ADC790C4E724A3512C9178E31C29A5A6DE311DCC525A60F00FB34
2BF67F172945936BCE8925EE6AE162672B0F9D278C9E88E0D83457083A7E5E73
23CE3FFF7CC9A954F9B254CD4696D0288C78D18FEBCB5FFEF209279CA025B099
CCE31044A10C7FBEF3054A9CE0AA31F9708DB1A3881F7ACF58FD630C19F813BB
C6A659C930DB2BFE6757D5B9B611C8891A556F44AAD1A82489C8D5D9F399CD44
C95A40B3E1BDA6A6325DE004A17A35877BEDB5D71D77DC919548573241707DAC
6B045ECD0C23B740675FCD97039E2F3C80188990AE54D9ACAE77D2A8B446F4E7
C00B0736E5CA63C913C23C54DC624DA6D2A275BDFEEC3224367334C7358C2DB7
DCF2D1471F7528C8AE55940C292860C709BC0AC81CAC434628BB9FD8A195076F
624AAE362DD1868B8E753C02EE8C67CE4BD0705887A09477D96517C8E47184FC
144C38B14F4325D830EEAFB0FDF6DB4BE03BE16552C95AC55AED29BCDCBA8E81
9C44566A51040C022C3F173BDC72CB2D1FF8C00730E62CF1D8575CEAA0830E92
132531EEC4B0F5B44BD7748481E3687E6C67703A90542860B4B56E0D9DD6BC21
880F7FF8C3DFFFFEF7B5846443ED0123E5ED6F99527CB7DD76BBEFBEFB5285F5
C53F8370AB533153BA329295B0E472DA983530FCC7072C55959760BB783C83B9
B2AA5B03C4755E27B744D6FB9D77DE798F3DF6F8CA57BE42C0C135E6914ACD99
5A976C5B07FBF010B84E218D17139FF3CD67C487C74D6313C9510E3B94CC43A7
E20147EC32E048AF9A2A86587B6036A2A35AF23E6624F2CB3551DA37CB972F97
496E78912EAE73CBE1C1ACF10F09A065552DA30BF85EFFFAD7FFCBBFFC8BD988
882C31693EB451816181DA5C6B54FC707C270A2CAB1F7BFF7A23C79D35326800
29FFD18F7EF4073FF881F499E334E8EC85D1C85E5FEA987183102BA96200B0C5
A07B1D7EF8E1D75E7B6D0AD02D2359FCA48DF00207D00835CA9C6A9375187360
1A23BE9CAA660F98989A528246595502A42BC37E9CFE5FBC6038D2B35F71C515
3AF85E14F229367A108B6CB6A8B699F358DD80F1E455982D4053E5B439ED8A6D
E7449AB3DAB3816C163EE489E276F27233C2F914B0C9786993ECFA90BC42A7F3
A156E7F8E38FBFF4D24B1D3FC3AC771C8B7DA243F4A10F7D48BEA6B5883E3CE9
A4933EF7B9CFA50AFB962A6C33ECF479599C9D66B658F001B110B6A71EF91DFD
747EC3936207CBDC7FFBDBDF7EF3CD37C355F9FCF3CF231B61A34C95556429E1
A872ADF8900078CC563896E6BA1A4286849DBDB8B15B5F5CEB1851D36577D861
870F7EF083A79D761A3687F1B996783E53DCD1070A9D6A998CBD0B9280ECFB65
975D26CB380A9F9AA33827542A16769B1ED11FE2E7F02121C31AE0990BC21067
03D409F254E2FBF6DC73CFBFFBBBBFC303D4E125A53DB76092352A29AC335963
9C71C11315C7BA9FAE2B6F4023DB71C71D1F78E00136909BC39809BDAB6A4A6A
EF90427E146AA72AF6B74D67782453D6AE98BE5370F9A1A50483A7ABE1A06BCB
1E79E491D75F7F3D62D4647B29C4C3B30051C92BAE5D6D5CEA7062C289D9707A
3BA6CAC0D7443310E53A9F8CCB2B3033601337445BB1620561468872A2596A72
1FB6235BC1069AE9D7231BB88F41C49721B811FA0EF37A4DA9C6A66B906E5450
34FFF18FAC1DADD0B4DB74A47FF6B39FC17D8317EBD9B8E4924BCE3DF7DC4659
529C2AD05C3C3FF124D86E75A12AC72F9643C449B3B983CCD5BD4E39E51420EE
D8CE182BDAA8AEE7B1AB84505E5801FB8E86D9BB81C774E88FC9DD9D768214F7
C4134FBCFCF2CB892280328D4EA1CB75A2F6F5E637B7545671CE98ED2195AD30
B38AB3CC8583575F7DF531C71C93AA6A40B2EC0B3CD77FE995CF047C727DA766
B14E5AA1A978AAD0E0D109CB2BEABE9AE5C77B2F379155CC08A745897918AF60
2466CC44E0DF6082C83DD57997D772D34D372128AC21D8B1794940381F773DB1
0442CD04662C91912AD080D31FCCE086BCEA2BEAD2388D5923A19F920E0E8EE6
8D37DEF8B18F7DCC510D270E7529A9F32F7DE94B0E25D218CD0DB26647683A15
3DB2F39DD6978D4015CE7BAB4F04A669AE7127005850F19F66E6E6F57DADA6E3
C6696624DC4D1D28764833E1458EB1194D96978851568AEDED4A8A5441DCE3B1
B234A0B744F4F87D71A73CA2DAB352D7936A2B9E75D6599FFDEC67F5A11B35FE
E715B0E1BAF6EEA21B63DEBA5A69FE9C782B6EEABEC529E4BCA195E48C1C76D8
61B7DE7AEBBC0A18575AA3D1B381B589D48C66054A41ABC5185A0A7D37AD004C
B08092C36049C191F5C9499575EC07D3FE78E73BDF29F3215510415B82CE0FA5
D2CAF8DDEF7EA749910121E7C08D055368D6441E94AC30E19488C845A112A4CD
ABCE771A792CBDD7758E3AEAA85B6EB945BEA38B9774293A5DCC27E06CFAB105
DDEF9DBDCB96D57728EDC59E65FBBAD9A4FEBBF7DE7BDF79E79D669E22F2A3A1
66259B040597C41B906B3120CFC9D44D91F27AA2FDF6DB4F9B40C3B63942492B
CFCE4DC9D3C0779A2AF51609B7F11B102531A5E7731275AA03AA2C2ECB11E3FC
31B561031FF1AD1DA8F72012F6D8638F471E790496257E684C1F7AD7053C4884
05CA819C13615D1CEB63C3036F9600C2048E1574404E22E1700DE89455A02D03
9A58AF66D9D8C79A809D03B96EC403A6D0DC5B372536EE18C902EEDDFFC58B73
842581778853080C18234FB73EF5D4536573E88DCC9DADB7DEFAD1471F85108D
D835F201A96A73D9947B3103ED163DB160DDC656AA8C0016850D8652A9150818
E9A67FCA9A64FFDBA45B8089CC54948EDC78BF4523E3820B2E90584F554336D7
BD58FE460007D1299C601C0C4D1ACD30621896C7D7BD346F11C1578BF4F24F76
117C937C4E5F0D30BAF92CBE04E4AABE208BF93BDFF98E3BF7219C357B6F7BDB
DBEEB9E71E1433320D5BF390430E91D3AC4D2EB109FD884F872EF2C4134F383F
68565D43B591365D558FB254119CB503F55E56F135F11466EBE3B2261733E75A
ADDC861FBA6C09CB8C7BD1E0153662EAA01CCC984F015BC2386F92E6B23B9DAD
E36AEE62E0586054C02CAEBEFFAE77BD6BDF7DF77DEF7BDF9B4A0F4733A92795
E7A0B3832DAE277599D6BC0A184200B49A6E09191ED2DC01BA481CE197BBB951
590BA4C853E0E83FBE97C4E8AF7EF5AB73CB976EA1CDDA3557274EAEF696B7BC
E5C73FFEB1B766AADC230D491B9D2D653399C020670C959FAA964A525472D669
83CAF5E54A820002C5E32C2C380BE2F5E6EBC096947C81AED988836833CE77E6
A391E572497615AC9CA9722C9C72485573727AE272BCF95524EE0132A36B4A5E
9C71C6196C535C25FBD07945ED469458F3633E7783D87D0C4C059A55C063FC1B
0D0FFF9827D2E73A9FCF3CF30C4F8449617375B686306738262A11F89A871A7F
15A3949E3100EDAEF031F816DA452C6E2BE02CB0DECCA978DC6599C029A7FDA4
934EBAF4D24BEDB6625E00D2919092A3536377A929604B1CE3094091449F83F0
1DB77609386E8A7E02C85C8796461AFE957B0C479FE9FFFF4BF309AF88FCB38F
7CE423B1F02195242DDA2D5A5C76A959B2CD0CE3ED7DDD75D7C9364DA508DE6E
BBED64B290B4822D879D6C87B2A696626A0607200BE5EF310362BC987FF8F18F
7F5C9681C6A0D38D9D74E595576AA37EFAD39F9EF379316763D9450AA1357635
75269A6ADD2E3656F25A64258E5A2F90628D8A04AA260D1C5AD8628B2D346311
3A0A9883D074CD27B302B63C04799002CF685EF1F34777993BD2739751DD74D3
4D471C7104FEAB5C1459AEEE7A6479EBA28654C5D856AC58410F12D210A67648
C15630A9051934B7FC8AE87A67D9889C39FE079B8D434736B96A26850F788480
38C5431729024518044E992DAC80A304C82B16362DDF2B5FF9CA5FFFFAD71A27
C9534750343FBBEDB6DB2F7FF94B1D61E627AFB86C536570DB532793A591D0F4
56EAE6FEFBEFC78638E59453BEFDED6F6B09F06DE655C00C5D3A5F3F938D1673
9CEDAA6730A78803A6B9069F0684C7017DACBF188F4A15311E5049C60AEF4F0C
A566A1BEA246FA682D9BCA8A6F8B09BAF5012D33C299958BF2B7ABECD1AB5F91
06F784F2D7D34F3FFDE28B2FB63A7486987B69A5910271DE1D346BCCE4968A2F
A4159A4FF3B3CF3EFBDC71C71D78DB795920CF83DB6CC440C94AD8A466094BC8
3396AA4814BB9F8D4B358E39C5C8D136AB466638EB9A674622034DD60C46953E
D1F55914D711A1CCDC15008BDEF98C3493B08D4D8F39EF1E44B3B753AA8873F3
D01BCE71DA3433555C13973A185A91785373FD7455AD063D7E3E44C26270CCC7
68661B3C856E1F56D83BEDB4D3430F3D647646BEF38637BCE1B7BFFDADE656EE
A964964B6FD35C0607BA84A01C9FB804C51938DDEEB39FFDAC548877298462B8
DAA9AA7E8173C7CE314AE8FF9502467C1382324F321D3EB2508C61318D0B92CA
B4085B8523A9B1812A80A02DAB208D9FFBDCE73EFFF9CFFBA8A659544D696662
488BE222CB4EC5328803C0462569C2A14BA5CE38E79C73CE3BEF3C7A2A4B7968
8D1608416B4B90728A8518EDAA799A0591117935ACD9EC8D1D6597D367F072E8
9AFA931D6B7BFFD2F1EF79CF7B2407A456C9FAA7CA97722C074344075F13A533
2BA7561791914101023B3C2A954EC5B79F2AFF815D845474E58873D5E8D714E8
2D712AF413E97B9D384E2B969329AF6DFDC77C30DF21931597382E2EBB4826AC
0C9A1A52CFB131EF019BF2B66E63BC1D7B886490FB14609A984074B6029EEF15
D7917687C63C11DFCE4BB600BD616E1D6F7348DCE155FC4F24734FD90F3B8504
B3A951B02FE755C09AFDDFFCE637FEA7F3FC2E00B01DB7CB2EBBFCB7FFF6DF74
BA4C8F401D2AFA3855E1883C34104C15B90F45605C9F289615A713C3FC15DE47
9A8D4023605BA9BF7CD184C0CE377833431C716B38635E784D8A2EA8AD8C49C1
4E05D9C821C42740461B9E873D2165A32BB8A351CFCC168AF3BD228A8D6DD755
355AA6B5B8A42A15BAEF7BDFFBFED7FFFA5F3A00483AF3FA9226D41B6D38ED33
39BB1AA7BC5E0D09EF53A33DFFFCF3E5BDB1A7EDFA232B9DCF9031AE2BD00888
3D84AD0AD88423E7965BEC66C98BB5E54B7FD238F7D8638FDB6FBF5D3F3FF3CC
33AFB8E20AEA0E11430B94DF9049E27DECB7315B1FF860E058ECBAEBAE9A9038
935457DB20201FDCA85A3F995C0CEB64BE686DCC7DBAD68E78804DF2430F3DF4
CB5FFEB22C0099C03FF8C10F74E6B50D220D53CD37AA85DC5B55C33B0E852142
0490B0D9212E80A7D7F803883E881CA29B213F015FEDFDF91FEEBAFFCC8BF924
8CA4DD088920E59BB67D89874BFA930540F5C6B604A98A3F9315D245D89324AD
C889EAA1F0CC5CC59B66192ED87FCC838FB9E719E8D9C5E5EBA0830E92CF5D2B
1545D5219A1748B151EE820796829FCA61C44EA58BA266065B36A25252D5899C
EE813AB688534CE74EC96C8C5FCB9CE45581562A73FCA067F54F1D43C78D1D65
B513EC7C9CBE403BA054A15CF182DC2FA451B56273D34C763236101636363476
7FBBEAD7841C66903623F44F7DAE1970C59DC5572C1330FD7E6C481CFB5B8082
CC2BCE4E6D217DED75AF7BDDBFFCCBBF689C54D6E232C63ADD3493549248A73F
6727D85AE576D6C1B6ECFF4B0AD82E90E33AD867AF7AD5AB642EFCFCE73F47A0
11FF27C5E072501FFF4649AF4BBB1D4798A519258DFFF0873F4413CD009D853C
602C779F104B31EC1D1ADA1BE6030299D3083CC7E11DB60269CE4EC524670A02
BD07F5C3AC41CC842312931CC8A0D8F6CE4944B608BA9C59D3D8A227ED936328
3CE0345337B8E08C94306A09B08C41E479D951F199679E31ED784FD539B8BB6C
0EEF00EF9CF3F9FAD7BFFE57BFFA152A4A0F22012AA78733CFD6B9E8A28B2886
61F1BC89318D4D2199825D198D8054457725E39C198D655D1A9BFE44576627B4
52085E711AED7C58E8E3E759C1B005BDE3E576E841389FD8FBECFBF9EA2F2914
767234CD22C275F6D7A78BE08AFC4E882ADD67CD867044B0636A38426B472A9B
1FED1F319F59D94192C7E14CD2B484B4CB873EF4A11B6EB8C187DC67DE69CE39
CF11E95BC46E2A4DDB430E39E4C20B2FC4D644DCC38028CBE9ECB3CF4E211EE8
8A17E4B837BF37F67CFBEDBFFAAA014139237A7C1C74DC713661CD47C1CF23F1
4F3C0C4E3AA822311623557BAA8A9B0DF9899EA5E7D0C4B74E4020EC6813ABB1
C1ED83178EBED70589E5F21363C4E67C5EFD70BBEDB67BECB1C70C82C5FA34B1
224700BB012C7124028A3914C75409183881C509D5A99470E3D9BFF5AD6FEDBF
FFFEB14C0B62A276D53F2755954B761BCC301CEB025269B751FCE3835C4B8250
10ACAF49FA9F77DE79243B9C37F1214225233F1918ED7D6271A0FD2269A3871F
7ED89A12AF06398CE1EE4A68D0C81165E9E36FC6EC48C26CF73156D0A600C2F2
7B24732A6B0470847447578EB081ED49CFA78067A78AF2503E67D826C71CBC2D
BA898411691436675E751B7234D4D9076D307D1FCBCC1805D9F1709DE6158E7D
A176848047D004DE9A0422ECDD4AACEB8DCE983D5AC3D890E62869280699356E
411095DDE6D0ABCC5B1D24FB4F1E1ECB0CF2330A71CD0E8D83E0277AE73BDF79
CB2DB7D83B4F55FD0FF6545E35CDB06185E0766910DFD11C9D70C2091FFFF8C7
8D5375CC1C87D8DD3453959FB073BF40F79B886BF7E68BC15B5D5683D1E3FBFC
63CFC6A8033A55BF02879C4A65C3866369880D401F6F74D58E3BEEF8DBDFFEF6
B4D34ED36964C231634D921E5BC16301B03ABAA6EC6EC9299D401ECDFD8E8C3E
23B1FDFDEF7FFF6D6F7B5BD419B52D6EF16100A7897F3B33690EE37B428EEE88
ECBF466A4C9709E515C518A451C86B68EDE6DBE78DD0D48C690483E6D38EAB07
F185F61E44609A5B4D3BBD5322C175ED61F3AA6569BB6AC511FB3448AC6B81F4
4F9032A499F573608FC66411B9E14F6C3099449A61B64D6DAAFFAF5FB641390B
FAEF6DB7DD76C00107A4403DCD1EC6E3C92B2661570DB087D97B975F7EF9F1C7
1F4FF8A11358C4393E94B6EB6BFA8EACB7D9E0A3BC42CB831C74CF4DC206B04C
A08063AD0B47182DC80658B81B154B391B22808305357A0AA07A9632463EB28A
59D0E6913739518D68461360A0A20C69A95F9177A4203586915340BAF04F783D
B555345402152800FB15368C889371C4C04EEA0A871F7EF8CD37DFEC63CE64FE
1FE6DE34D8AAF25CDB7DE75CEB9CAFEA7CA7EAFC49DC7B9BB8897D8B4654D4B2
4763AFB1DB6C63870D880D763422BD8020A2821D2AD8A0A2A8C12606C5BEA334
04151548EC6213F72EB755F975CE8FF3EB9335CFEDB878EF3C73CC39062EC3A9
EF1B3FA8C55A738EF18EB779DAFBB91F674F2241A12610D6420E1D8E130D7165
80DE7AEBAD76691CF6E008ECB0C30E7233B46D5C0C89D9CAB300C39331DC669B
6D2826C448E2EB36832CB123C4AC2793E211AA64E6633BA30D811BDC5FEF9702
EECD0D22E9D5C876D50018A4A64593F9CD37DF60727969ACCEC0D2025AD4D4E9
07930CEA3748C5E8F9E0106F544256FEFC56371A3366CC73CF3D47CE5F5F6364
35E51CF88E087A8764F5E173CE39E7830F3E2072D2DBDED25C3F13E774D53325
567A2BB2479E7D9711130D33B0A827F3173A8C697412498E466E501541B9C605
F46536699D0162F7724DA4BFB15F5C3D62904E23332CA676AE5A2F80FDADAE07
DEC7DB0805F3516033F275CCE4AA79A6F485B4AEBE02B53AB0260313524E9018
31E8DFA7EC6A10588E74136E4BE262BB141ACEB8850B85197845680E627D6C35
4961E87F3B9BBCF2943973E62C5DBA74EDDAB529D7607807F78656DE4E2E0038
7288CC613D2EE7A76DAEE20CFDFAD7BF96208028CA304E9E12C36E0EA9010981
F05CD241E6B9942B9060F640AC2EB5A5122932AA2E7263A9707F5B19549F321E
1031E7CC3A63B3353662C4889B6EBA49E6E0279F7C1233A69CD658971943A396
3B3132DCC8746F7CC0E7BDD44C13999E321408E9692E1D6C5FCE97E5A3AB6252
01C2A056927002E01D84BB6D5CC74B5D2F9BDAAD1656F6924B2E59B56AD57BEF
BDC7AE23BA66B7CC2567BA0FD03F531CA0231B9975A42A426073CD247A10BF34
33FBBAB6D0A38F3EEAAC9659E7AC98BD3FE5330C1A34E8B7BFFDADFE8B1A3699
306B0DCC5013386FDEBC2BAFBCF27F2B5AD973074223F6010C2174F0AFB7A3AD
590CC046EE7D4B157651C446B0A350E10681C6C893B70159063B51981D3022E8
C5A545B4BED0EF18B6894D698320AA25BB3AD192B0B48C4B130974F997701DB5
0F0864F6BFE641469BA611440EBAD69E742317AD344239AB2D60D31C452EA0FF
3D77BC8E0674D4DC884A62CB6E36A3BF723063DED333490D1293EFF881B6F49D
77DE092E8A55FB3EECE129A0BF907D474C27CEAA0B9F7B6BBBBBE849C71C73CC
3BEFBC23F985AD2A83E8C30F3F34C0D86BE9F7348209EB7E43EED6EE9DE75686
F078210E4A6D0F5C2C6B051CB76C2B13957907A38F530E6AB1FC7818DA61A425
B4E47604F9B001FD710F21E6341E6032AE26ACD1C1C607610AD946468D6990E4
FC6B4043A9BD7105C7A915DAB5A6D0BEDEB2D5C7C0F143361F433241554F6EA7
13C318F8CA1A2754C90E84EA24CC9E3D1B74EB94295366CE9C49FE899AE0D29C
C7309AC9FF5286B29B61D5CE6E2374B8A3CC205282F0016BEB66E82DCA62C98E
244E4E32C611B9D27C1A07071305C25DDA17C35FDFD29C686F2C5AB4483E04AA
142C1BEA0A91DDAA2E739274963B0B5C88541FCB1DCB946DBF97DA53E229A650
95E496098815A45889DAC21D79A9A9309B476CFE11CBA3BD497C4C1A81428BD0
94CE05237169162289321B7D8B40D4C5175F7CF7DD77DB868B3DBEAC147D0A1C
AE88E85FBF08921D8BCA279AE7D20C8DCC8B26D32654CA88365DD130AD394729
F4372C555732F9047840424D9D3AF5E69B6FA64651F78F154406584D9F3E7DDA
B469C4E4B1AE74730907C9130DC6993F5C1A7006EEF1DC6C6F97E24172585281
9B8924801695F6D12D30BD8E204ED8A57A117B9C687A8D87FD0327815EF3B4D3
4E7BF6D96789006DC87D73D1B566674330BAB3AA2BE64B49435F9D0A989DA0A7
93AC8CDC0C7E170993193366109FE7B801CB8F3C89FA98564413AE016B576892
3D27550AB8549EEE289A075952C025CA52105E4032C91311D28B5CF75E6508B9
B4619C2B741722F67F83F9C58A640339541B3D6B5BC13560168D4627D0845628
DAB812A5469E11B9C7B1B4D6D4B72822241888E54E4C554FD1EF4DB36517D9B0
E4AAC08587D10CEDA923BBDB7F2B2E4979FD0B19325CF0948549100F1E3C98B6
895023C1736B4063CAB57D555CC45ED44666BFB292638BF4E58E7B1C862A056C
9345AAE5A0830E7AEAA9A7BCF35247FCB3F45DFFB591CB1BBC7B8CE9B025EED1
4645C809D1070E3CF0C0575E79C5772332E9E2CB8DD1957621C254639EB77233
478FEDAAABAE7AFCF1C725F21C45C0F205971483ED1895313A446A0A2CAEFE8D
2C3F042DD04688574C34FED5E7478E1CF9BBDFFD4E9BCA015EBCAB499326C987
FEECB3CF52764C5D451615700C21745D2FBA5C6080A2877C286C8F474A770669
33D1AA2EE5DA01F68016DD640EBC2346AAB75F33D05439868C8C202BA4FD03CC
9E13F1774C66BBA126036BFCF8F19C5F67A3504E7C524792723EFD12B8BEA7A2
743CBDAF1C9722C8EC0F77D23BC48945458159437B19FF8510EBC9BDFC52117A
D5B025C4BB129DA69C63262687B2742C3AAAF35464CD5C5F8409C5BA30BDD4E2
23F18902EAB937DD7493A617FC9AC3275E05C6890A0111620516A58427C13557
487CBDDAB5D75E3B71E2449B560E3098222605A7364637DD6358D7B871E36440
B32D0959E36ED289C4FC2751FEA76CBDC5A89B7E49B15C34A45A8104AD33C560
B7D2D6865E4A8FA6C081E40BEC406C726C1DBE45E911121828AB016E2997CBE3
94DBD48B5B9138F3ADB7DE7AC1051738F4D5CC34C99DF213EDC35BE3F2120397
4C803DB4A7E875E147901C193B76ACD688D36DEBB944034584F5FBE71176B011
4794090416BEB33BFDD5081A0941A92BF0C36E44C891C381F6F2C4A48B8D0ED6
0919A1C71D77DC71CB972FA78EEABF171725F6F22788704696E6AE0A83638F3E
76AA40ABA5FBB8FD85DF85A4C286C015CE15F9AA62E921360EEEF2D5575F4D9C
F0FDF7DF27E3982AAEE86A44CB43B3A1453283A6775BD79B10DC70C910FD9D4A
AC6FF5574CAB370A14A5891DCC02D379A1DE1CAA35E37184233DF6D8631A8C36
9FFE2A714C531DDF01E4DDD9679F2D3B0618428C7FD0FA42679213950A9F1505
ACA7ECB1C71E5F7CF18544C6AC59B3C86EF05C9D01891B1922AFBDF69A4586AC
370D66F8F0E177DE79E75E7BEDA5C72167F52D79C6FA00910C19F2FA9877946E
882E31D601B9AC55D65B1B16DBC89521A84F046BCAF9ECAE8BDE0C4C5829076C
224491A5D448F48E9E7F1B28948A22471007CEBFA41C3FF0D6D2F9DFADB81E79
E411AA89CC17D6CAEDBF8C5B74F0B9D3E0F3C16C14042FA0DFB7DA6A2B6D6FDD
D021567FDE7197D2618C37B47BD4C8D4F9D82551615B70939C723B74341F42BF
95F92828E7D07FCDBB07380356FD2876BAAE8B8322DA45279D74927E96390B02
837C3FC1ED92211BF925CC9E0D431C995DEDA2525323DC099768A64216936BA4
13303A2F7AC0B6D1250DD887A6F3F38473A0A8F560E60D1D6772742AE9921E17
1A0B524FDC7BEFBDD7AF5F1FEFE9184974638C9571E48C673919E720652B1065
A46C7861D9941430075FD32E3342161ED90436BCF488862DF940C4C5C48B8E06
45C885E397F8B2A5704E1C86C52F5205334887DA68C7AE008E14228E7AC49E7B
EEB966CD1A071B4CE385BAE435CDAD644E69903D0E5892F8B7C4DED89DC3CAB9
2774F831399FEDBE1ACF4CB3A64DEFE42E3E2BAE86C14AB6F4099B70F314CA1E
B8950623D9A1E976734087C18D6C24D0DFCC449225058C2714A977531196DC7E
FBED25A963501D848B5E503B72432631D724908747EB60C810DE6199352ABD14
4D9F88432627D53715828E022E65EBA12FF7A14C9BE2AF8FE93D937379DF971E
E15D18F765CA168F7BA092D78C2ABC6422F04B1C419A10FBD44940E88B981D98
0E4C9A7480A4BF26930380B9A359D5E2221CFDFA367DB8308F6C1DE321B1859C
4D81FA83ADA51B12A0462B404B9942B5A5A355A034A74D9BA65790B6D3B04DE5
A10FEBB93AFC6BD7AE056246AA9579D06F62FF41076FED7EA55A05EC885F0A9C
82445653066CEB59471D75D4CA952BF1EAC85203989069F2D65B6F51BF84A742
6C4643D2875D7E63501EF257BF193264C88A152B7816F9E6146C47340DA6AD51
2A9DFB24157A51AFACC9C71D9128A4470B42939C28553D44A74A22D85EAF23DB
2918CD3DED5D837C8AFBDA09C3AD1298402C45FB61A6C73177102A5C3F5481B0
9CFF738537B96A3C07A2535E531E04C025EE730EAC7F00A78288431D6ADAB7DC
72CBFDF6DBEF85175ED01D68DD4D8C07F5C9621154B3026E85E6A43652317180
77E9AF1283044BF0A7B1F370C19D762134058470C18205E79E7BAEF76A4426A3
02382072A0815B4665E62D810C771130DD7A88CA46D049E95B5687ADC02E0253
A69E3B72E4C8175F7C115034792EDE17B75063D3EA7863EB151E78E001D0CE04
A55C4D43E97CABE0D501D49642FED17B0F1B9467617E11F2B4C82D85A00D9DA1
6E5BE6BE9B49987E31067AC9A069C368A2806ED1F626EE79B4FE46A63638D051
CB6EA0EDCA68BED0CCAD6D6B14702353CD610B00E20506D9A9810CEF86989443
3278F060D9A1928F31A7650B8521B971158108E7113B759BBD049C0604B16610
7A3C4B431B01749577229DCDCDD262EC50408CE10CF7373B00110C900AAC56AA
BEBA8ED3A51DBDB96558CD4DF0DB783B8D64CA9429F2BF491EA70A745FD7FFB6
0AF21750A98E3859CC3542B53B1F90D895CEB373206BA35194A87237681A3D8D
9A58994A1A1579CDDED018CA32CB986D1F3CB24A91C9841172B4883DE285A35C
ADB96D51D15D84901435ACC86E1E6A78B64C6FC8BCE49A4804600B73C0F4DF12
213B7683DED4EA3FF6DEE88C94962EE790F0981D82B684ED6C6A12CF087EB9C4
7D6FE8B41813B1EEC06328625FEEB572E081074A73FB592927FEA5B9A5EC5F7F
FD7537E1F8C52F7EC1F275EE1FD43C80C158E1E645C472F5B74A39206FB6526E
2BDA9D96CEF62C5959278FAD959DF6D6ACCE9D3BF7D24B2F95B7A0A5C415862A
5CFFCE9933A719D8EBBAAE0B05AC36C409F8C55A007B1168417473E4D9355ACD
500C3731736A89A5DF669B6DC000DA6CB513C2DD162E5C78C925974405ECD317
7BA9999C67EAD4A9B366CD72390366198A10EF961829FE800E02DBDE410BBB5B
460C31CED23AF28375AA1D3B07DB7DA0E840D017FAE8947691B781712AD477D1
9482C24E664F630396A8DDEEFBFF1FC5A59B137233DD98D7C82DBD3B1F6DB9EA
E1C50C0E742E5DC18036224D7A614BDAD49BBC1133CFF2799340C6A02F12D567
21F42C4340D8301B091D35F5B7DE7AEBD8B163CD7C44EECACC067634AB048D19
6A527B9F4B4777E34BC6CA9FDED0E2D85135897BF94F988AF01598E4AC649AC5
BC6649C1706CF86E674214AC0ADA0EE43D407CBC2B7B4EB6767D56F1C22D7CA1
DF6A6502EEFADEE3D1258D032E35BAA851C0781504C71C37D674B9B96FE96AB5
53AFD9C9E0DCE21B91F524C5E2D7ECE9687F9642953AEF0223CF01071CF0F6DB
6FA7405CDC6C6F29118D037254AD82DB04CB3D05FA5237CB24646A854D988EE6
7D3DA10F286610017037614486F252C8651C38E811EC834652278869EC9BBA39
71AC9B04FEDD2AEAAF6842876A8F2AA7EBFC7BBF59C1F0EEF114A4A071AD968C
AEF49FE8A6AE911822E4F5F2C94210188DE29110C722010C9EC54D9652B50161
994BCCC9AEB6AB12A4BCB5A0FAD3B871E31E7FFC71FAB5C5BD973ADA23A6ACA7
99E1945DDE28EB317DF80C5605DB7843E85B6C01AD330B496FE48BA8670A737F
759434962239DD9EDC1010E49AFBB8B07962B35E9706E07BC5565D0EF899D1DD
91D22882F4DF254B968C1831C2F1BC9838EF0B7DA80C74C75327A4892D821272
37AA56A6B3BEFAEAAB6FBFFD763C6F8AE96DC236338984D9D67C36536EDEE0F8
470C2E22702CEA2510E4C2D2F4C91AAE337896DA11302E61D2C9C53BD2170158
D81E320B105288F0D5983163264C98009E913C311B9E435A6A19122B0CEDB85B
AAE8331A8CF60F45DE111A5C3AB9F6467C161A99402602592CDB4DC919D3707A
DCE5975F7EEDB5D71AFDB0518EE159925ED6E79E7AEAA9B3CE3ACB0DFE62DEA2
D3C78A973BABC762AC481AE0438818EA097D276C9A51C680CAB70D58CAFA200A
9BB9EDAE6DAE663B79377BCBF84999211C4BAC42EF2DFDBBC30E3BC8F97EF8E1
87759EB584871E7A2838408A528CE87144DD1B25C2CADC9FB94677C6E77A9B3A
ABE758BD31595D6FE28462AB40E8497398C1B56A03A5F660A0B1097A05492EDD
EAB0C30E7BEEB9E7FE47EE731E435E1697C86E9E2BB7E38B2FBE6062BD76ACCB
8D37DE78CD35D77080F51BFD1EB6CB184E8CB844BD029855E42066139A98C1A0
F33433D2EE1819FAE49E7BEEB96AD5AA14AC282F3A5BC261676416FBD0FABB91
FBF6686CD48DB8D636C6727D2B922FC60C5B2B978E5FD7F5C24749D91E750238
9E0E6D301D4369C4EDB7DF5EAE92152AED6989554A5411BCD1CFFAFD05175C70
F7DD779B7ECF2418DE36648EB7DB6E3B7D46AFC37675DF4F878E1CBC2D81F862
086EABADB6D2A924C714C110D08DD9E2F97B5AAB8306BC640AA40EDC46942D8D
4CFBFC7F1617481427C8FA8A6621180D5A3BB4889B66EA5F791E5224C3860D73
BD47D77571535B36982361B847F4B4F7B063A9553333D570A608DE184F876233
441F922CA2FDFA19325A9C271CD32843E289EBCD3D9788A01836C8E9B01F4622
494BCCCED4C8A574E7CF9F2FE34C4BAF5533D9A49783DC0A8C024EE2624A1A2A
DF6940DB386885C641145BC33C6ABBB6E45A742680099BEB0EA5C204A28C041A
71104D54C0E3E2468DA70F470BE9110542A702C61F25FE6FA1D1E886F84BEDC9
3E9738728E7A32833D016753C1F7B5B798F3A1F37C9A88D03B6A23D34AE7A5DF
CBB6452BA76CAC61EBA5FE5C580D11A3618694AACF5B5BA7ACABD870BC18916D
FC037341C0B2E67C4F4F7B73DF4680A463685BDC93A7A18D064B22E906519C13
0FE4ED5B99029E407D4CECC1C0AC9782492A56EFA55A9AA4941BB3A7CC4711F3
DCD1EC28410F80C53A575A931AF04EEA5A85C24CEABDCCA959C565DDCA4CDD26
5423D7428416E7C3EC30B13EBD7455CD839D5A7BDE31D4E1D246840EFE0AAF4F
3E1E90A049061A19E60D0E457F85686CF6ECD9B7DC728B7EE3EA5EBB4D8DC0F2
CF89E58444FCA4ED4B769776823C7E08FCAAC077A49AD89CD1224C81B03E85AA
A458DDBB21F76D8CDD8408E9F3617B57D142D2FEA143510A7AD433E99DCF9EC1
FE306F5DD775974575CF3DF710A13153690A641429A8DB9A1415E7CEF68DC6AC
A1CAA7D1FDE9003168D0A08F3FFE98894A4131C78C6CCCEC3AB44B700FD71040
168CBECE7C775E36340D4C61661A01F39F421CD25503E827ED791E542ABC899E
862B476C5BA7F6DE76A6BFC00BF22621B4806B7BD96597C9325BB162455F669B
EA2DFA0450FDE547C35A4AA719900D40140902A1C23B6780A097F6BF11B8ECFF
08712D1D5BDBB8A846B2783A657EA85F13D1ED324BBDA3FEF56BF2FAE09C752B
4960E8F67443323E9687119AAAB7D3BF714D1D368BE374900F1D0980892857AC
674B45DEF39D77DE49ED453A2E74F4EBB88CD3F3C002993E8C9FADF29D5772B6
88547D64BDDE78EA5D0650BA343E39FBB7DE7AABB96A09F4D5E738BB1EE0285F
D2A61452235CA91D9A013C1BE3053B8E785194F576C822E18B561705C364997E
819B104F43CC8D1E3DFA861B6E40DCE3D4BA63319FDC628B2DA047407BB572F9
1030043BC76685B4795E958B724E9E51D98D707EDA481FDE9D21A55C94A27D09
5556D5FD63593A7E0F0690314A6850A33DABD6858DBE64C99233CF3CD3A11E5E
93C83916B43D807E6D128EAEB56C0A054BBC78D4BB5155447A55F6A79B8DC3C2
C37CEA6340C75D9E14E9BA9C13E2D82091D97531FE6654672AAA7BE54C9F72CA
29CB962D2302560F9AB3ED689945110B87A291EB2B480D3A60401487881F4E4C
23F74D6224881E2681C13B3E54C29244058CBDE2A9E8DA3CC3970646B744ED7C
E8BEEDEDA51051F4C9ADDA87E0E390F2D8D0FACDDE7BEFFDD24B2FD1150ADAFA
BED061D057692138D1975C72C9CC9933491EB13A20D2AD8AEA73C0CC1B653958
CF669AEC6B6F87E7DC273AC001805253C8E8F035325B21878E13C7D451F2EE76
350E04F66462DDE82A30243D88958A1C96969636AFF10762280E1F3756BF343A
F0AAD631B17F6D4901C7BDC157CC1885D6C19C351F43C98289569771A360B3FF
4768F59D3245926E157161985972EB6FBCF146B8E7FC314F57699337DA592125
AEE7CC99A301E805F5ACD8EFEEBAEBAED39F0CF9EC34534A411A4F056A888932
32891483AC99B163C76A736A7EB4E1D942FC55FFC61CE5F7E7B459DD405EEBA7
B38769E3AE4155219DAACB703BAC48F6598D07DCAAE8D768522440AA0841D977
A8525AD3BBBB991D7C9D19BDB35CF9B56BD7521C066735247FEE9B143BCCD00A
D7FB3815981D393AE0D9F41B498DF7DF7F9FD3D209ABE1BBF69E29B66BD63603
D876DB6D65E4223ED819EEA39CB2696683DDBF24AE106963BBDEDF548E71E1F4
146DE851A346C11B356DDAB4C993271365AD11582459314422058FCB99527BD1
67D57DBAFEDE44C7CE3A434BABF3C38127584A0DAE9689F827A4D9908871AE40
FFBBC0408EAF8E1F1293C3EFC2410074E6DF801DD7A8A8C88710476E8709C1DA
5790A9D5789090AC9D71C61930AC115A27181E438E40254CAC8FFFCD89457835
039B18138E858E3EF8D9CF7E76E8A1873EF2C8237A0BCA75AA6493D9631CD4E5
F755290F072AADA7BD3939D1A98343A37EDDEDB2104D0515EFB02DABDCA9697C
99AF4DFFD29521859413FD225361F10061A93A17588DEC2514BFEF1F31105687
8CB337B74EA114B526E5E402B3A896BCE2FAAB9C7E99FB3806A65FF68BA3DB5C
40CC53CCF58BCC61FE1D567490209E4D471CA34DC665052C6D072482D6148DDC
3DA26A1DD9F918FDFA79FBEDB71F3468D0430F3D44A538A9106F547BAB46CFB9
A13554BB7A3B4D2CECD024A189A211C6D07F2FBBECB2C58B1743039932CC1888
99E58F21059101022EDE14688B4C3E8A5D4B45AF74644F6E208D442D052F53C8
1EFA72A52BADE50DE682B50D43537BE697BFFCA5862D3D156D1AAD32BDDBBF4F
F5561D98D871DD38D2FA5067D7EBE73FFF39DC6C76F00198541DB0689DA576D0
900B0FF0E476DD75D7AFBEFA4AAF4DAB9C75EBD61994ABE3A77703C3C2DE825F
CDB120D4926999F9167F0273EB7937532B5943A41B8DCF4A1BCEB126CC376D14
626EC01FAA249449303664566AE269CDCC4BE7EDCE968DB171B725D10BBAA2A6
7435735B34C898F449B6A09EAB5FD236CE558C354C6784FEDC1D4F1F8E641751
54A50C3CA959DFCECBAE5B4424910204A0E14FC6D0B434D991471EF9F4D34FC3
A16D9982D54C2307A4274276C08001FA3D7B892CA96EA24322978B574335C6BA
EA5288D52D0B0D4B34A747D7F7429B52C3C3731D946B74547A7859090C626319
A05E82C344B54A45B8D6914FCA06B77F1FD5707C8A441E352443870E7DFDF5D7
4141771D7FCA94C2CDD02530069F6D05A66A43B027B3C6C2F98378D53DDD289E
7A5C6DC8529360DFB3915B80CBDAF8BF8B0B3B7B8F3DF6907D230BD2C8DEBE4C
315B6318E15C3A818D1037B8297574E3D16724707EF5AB5FFDF6B7BFB51F66FE
E4CEDCB917B7E468A68075E232B4854C53F4417B738B02B8F91C53E5243A4C82
2636C2ABC4546A4FBDD18EC4646084EB24A5B561B42E3A0B1F7EF861AAE65CC2
49708B178E83433B483027CB1C342A9584513A68BE3F6DDDF1E3C7CB13D53B22
E1A1DF21BAB6E38E3B6A48B14DC84F7FFA53A9FC4F3EF98454A08F4344D1533B
D7973BE544342535A5546D1D77DC712B56ACC0ECB002F69E890AB824C1DCE7C6
1030F72E32C5981EA489855D24024BB5E71150DFF769A8F1547C8C914AF5D46E
5597D52795A67D995CBEAA3EAF74EA4A383A569D438B89C039D1FB68319AB91B
54AAE8CE6B33C46A3565758258C4106B842EBF5CFABC564B93A079D7F223AD70
CB28844FED66977430D680A3EE558ACD46A2998970825DAB9042FAD6BDFC5AB9
26121C443DE100C74063D08725ADDE7EFBED529D5F6C2651E501334EE78A6260
3C05EC5B245BA8D90F5D2F3838FD5F3D0B90114977C4969EC818C85F92E4E390
A30BB19F484E47C1E75A73968C083CF2CE1634F2B4A4504B0106E6217621ADEF
BAE379230043FCC0F524AD40779072B98EDE0B961F22F0E0547B32B97CABBD12
01754BAD244F7127B8AE13CEA635F83965087ACD7A19BFEDE8ABCF91655FEAA6
694ACFD5D2941AC699D30D0406D302952970BF38F846004E92ED26B5E4014009
071A8860634D3D3DE638D1DD134E3861F9F2E56C39F7E1B0078C68A600577F3D
F6D863253A3FFAE823364CC921F19823EEA611F0CCCDD03D7AE79D77FEF4D34F
51158C07F4492AE48639598D2931B4D08E84F7434FEEF9E1D429D024B338A50E
378ED34A9B57FAA3EB0565CAC8C27070B8B485A29945EE0C4CABE9513989A53D
609B75BBEDB63BE594536EB8E1066F09DAD6F18389BDC03CA2CC6CAD322D7829
443DF9D73E6B3C17ADA23EC2B00C73CEDBD84220EB5BC816A25F2950A0FB354B
E8E898CA41980C1F3E9C226F0904ED408D53BE101A33E572237725EFCD7D9CE4
01EB2C6CA4C0AC3A7829E7D5528002F5D70336B3318E2F50821A8551F5FB66EE
9F63EDD813E8E9199E29A5F80ADC9029870BB0DC013D120C21CC624F2E5E8038
407811F069E4EAB738A4463BB498C7E1D492D8D3CD35695A8C9AF775BB50171D
A600666916ECD0124C46E260BBC5A0420D08081C04717B7D1DB78F86161A1B11
78F65C23334B542D652B5761E2204211C59D3BD56A7F15B0CB6F62085ABFD409
9190E240EADFA953A74E983081D2611366C1474366881A65A82D7865BD2C7B98
47DB8600AE625A7FB6103AC0D451A584995D22CB44733257795AB7DF7EBBC6AF
7F6D4DC756A0A93DE7628F047C033487917326B50B417E60487A2F82AEA9A807
E3FC576D39028F5494C999F8E0830F52F5E5196024A06AA38D652155E5D3A7F6
6E600011A4CE5997D83208B1C8A14B1DA52C5C469622F1A9CE82147AC488110B
162CD04D2EBAE8A2FBEEBBCFADD83A2F760B9A03BF045EEB1883F1BBC7502A67
8D2AF6A8593B57273AEEF12DD83CF8463C85E526756210161CCE50DEEA5F5E16
33CE92C745C3460961531AB05642C9441DDCC868F3382DBBEDB69B3C4BF3AC95
96208630A30705476CF4411DB061B74748F0A851A31E7DF4517A3495FA9A44A0
3ED5804698D3022065CC762A68C089E4459FDBB81C07E4409BD3C25CFB0D371D
2C981691B8140799A44F0AA664E7598BA91C3E1CD124906AB046C64CC4B4694F
E872B1D1B7AE3A759442C293C926FE21BD5F3A2F1D89356BD6AC5FBFDECCA23D
A19D53E7D5F50CB3B1D0DC863E1AC26A20B74BA4BDCF9844939DB296CE864211
E73C0A446ED486BBB43F866E88669F7FFEF93ADB0EF9761E304D9D1E645C4C4F
41551F8B854A17DA05A727DE07A882FEDD6AABADA4244C97436CCA969A76C041
071DF4CC33CF74BD39121CC4AC33C13E15F6C09843A7723B2F7A36EB8BBA09B8
E2924FDFA8A8CFFE8117072362EC0920BB5F324625DDE071BE69DB872D8959A0
A579E4914760C636E4185259305032F01F7CF041DA2D5C71C515F3E7CFD76780
E042194DEB18BBA79DFBD0D36576EB92F55DBACCC866E30CCBBDB39A207A90F1
E93EB49D1A8ECF3B8403B9819E78F1C517CF9D3BB7F3FE292B4B7B45C68F5445
3E30765D6492B2C1EAF867F4186AD61D3FC0C0579DA37DF6D967DDBA753A205A
D03DF6D863EDDAB520D5DD3095ABB40AAEDF6D854A364F26912DBC0DC3C4BA8E
A7950BF7B56D2EBFFCF2C9932793D592FA2995E121D691E38E90F9EBA0174B59
F01815288D9FC8562BD7C4E3A3530B8BEA6DE5DA0A22A27A23FA1F370A76A368
AC78E6A302C62EA153727457E2EAD8176FE42E1D48096879522E30EB342C6236
903E25DA7BA466B1771DB42BB108787E38C5242070F7D105FBEDB7DF5B6FBD05
29A1E939DD8F9999717D91893580CE4512402F37CDBC63E479FFFDF77FF9E597
537BAD0730029309966CAF78CF38755E7D9C52583F01799D75D6594B972EA576
D752BA91F96B4DED8E07FFFD025585A0FB0A1A52D2C020C7227FDE0FBF0CD9C0
B9F92EF49DAEF9565751AE5F6A4843860C79EAA9A75CD7657C32DAC5C9B99EDC
5EDB9C0CC667119ED25FC78C1973F3CD37E31CDBF2658EB89B7E397AF4E8458B
16A18961602925A862452349327969D3A64D2334EDF6F5F520292D8F74C05D77
DD65586F7C040A03F3227230D15305ABB9CA0333418AF4B476F9EAD5AB09599B
FA27B59BB455E39440977CD4D8F4AF660613C4B9D2C81B50025F94AE9A79183B
76ECF5D75F6FEE4979BA37DD7493D98075730A2ADC7815EE270DDB4935BC5B80
BBB42AD37CC258628715E5C74C5AC7DB12E70EB12EB6844588A2DF78A29AC810
82839D138BD36217E478D4CDDCCBA37B4313F8D4618937425B785364BBAB58D5
B4F765FE57E204781E55988C7818DDCDB4B3053282BEC47C57BA897620B1076E
E88219E61CCF467726B91B43DCF13E3680A0CA019CC17E7688CE03A680B06A1F
9ACD389AB3CE16C5640A3A8CB7D68ED2382510D00D6E6BD8A98063AA3E0A3D76
9723318859B6220841C78D63D7C8DEA2B7A6EC609DDFE87C47EDCB2565205B19
0966FC510A065C94AECC18DBACD9DE2F32EECC526E9B4F4A4DBA33AC312BCEC7
D9B14171600AEB33B2921F7AE8214E9FD3254E49985DD2BC3AAE023551A0C3B1
8DDC8F39EA7BCFBFCF32351AE848A781DC5CC4E34CEDFA3546BC4A27881970A9
A4E48F6C4A760EF0460E17E3343D510A7C3E3E2675216828C180989BAB883C99
EB4FF0E2B56F34116ECFAEEFE2A73602378237376FC561E33C0301B508881A4E
7F923E0344EEDE6A5ED7C8CA4BF4A399FB127ADE2D2C8CC14E85158F9EB3DFD3
5F8FADEAB2BD89FB1BADAD58A91C294AAAEED3CA24A0F81C7C5D524CA69CAC45
8D1F3BD1214DBD9D0BF25C5183A00163D9C8CDC5EAAD9FFF29174290001A1A45
DA57D60F3B8A55D38942677862F579923DF8EE006BC91211086139CC2400A697
0D536F70B83E1BAC8D9CA4050B16B886CFD22122992549E5C9BDF7DE7BF63F62
F29EC0209C44C8293EE30EC72513BE744587D81A54C7FB9A6BAE59B26489EC4B
D7E8F383F37F48BDABAEBAEA8E3BEE881DA04B979388F197744F933F7DCB2DB7
60CE5A14F4E6D66C884BB2A70EC59B47C23619C610F90EB740C63C326D45CAFD
0423B289358DDD8BA357473A46BFDF7DF7DDE5DF90706916CD6D58A31AEC8591
2824D1F50874A1CF2C123C7A511A1EF146C7E45051FE8A13B7CEF54648545C65
F0F9FA62EC38C96D510CCEB8EFBDF7DEF445BEF7DE7BB58E7A352CCE2DB6D802
6D2D990077234CCEBFFAD5AF9E7DF6590666CD14315996C6CD4C05D8991BC6D8
8AD85BE3BA1D4873FA0602DA934F3E59E374E36D1AD6791E48DB1358D67B91E3
E318C2C8612B9096A63888CC9EF3E23DB9D91AEDBCC8A140C0E91635F2D05E7B
ED353EE9F422D3CBD9B1A5E2938509058932F2A72FF7C18CDD90520869980836
E227C8145080CE1C8243326F41CA7C612983762B15308F2F1598734E5C7748D5
4AA44D29E976D6CCA8E088A1ED7CA2D321101251854291ABC5A8D3B70E3A1921
6282E89ED03FAB91EB1398352B6903655D7DDB5F8291AA4B4F84B3A92734E673
AF43CC02AC3F6A5EAB220A31DAE315E1155C7D8196F56695BC38FAE8A39F7CF2
49DE1D8224F6812613299F72767973191C9BEB0215E5BA7EF06E66C947719658
DFB6DE7A6B6ACF98077954905CF2155BC76C2D8332348D3BEFBCF39FFEF42738
476B729604575A05F7F58E3BEEE8B8A8C49CE432A9B894633C6C518C21D35DF5
1454E4AEBB60E74F9A3469FEFCF9383416E284D96B72F984D4B0746D9148F2EA
37883C97D3940A1E40751ADD5AA3E04D5FA37BEA63BA1B1B69D0A041EFBFFFBE
3F69239B78AC83D8BC2F4A2BD2E13979ECC62A58BDFAA23B2A1AFB8A67C94233
5D988F7A96DC08B7F1B6764F99CEE2FEFBEF3FF3CC33F190F42F19B8C30F3FFC
85175EE8FABE403420F0F2D9DF90DB4BF35FA012280F83481AB93B35E6AC535A
2528493374A52D81EA1BB928FFEAABAF9E316386C4C5F8F1E365E12D5AB4E8D2
4B2FC562D05C1179D6CDEFBEFBEE51A346FDFEF7BF3FF6D8637D5808FE918C37
9997E6E1A28B2E92B5C47218E64290D975C6A5288533CA29D035E3B01AACE44F
BA941958936C88B163C7A65CA985DD83114C2CCA8830DB1F77DD7597CC885641
6F47628279E675501950BE981D052146EE869C233B13D224074B402FEEB3CF3E
5A74E05D58DE0C8C43643118777E0ADCA829C4667C94D038461A3532A785E601
41610FC7AE604C83F6E5D6B7A5E76E0C9374DDA07E49A832511829501F704E76
DA69A7AFBEFA0A64B2AB27A1D063F963790945087A1313D7992E8E1D892D8C48
C24C66557A73AF78986035A1129DB4D62148EE438B29D4CA78694C4593A1F8B4
EB9E1249EBD7AF4F45B4D3C1B17FFCD21359BC66EE200D3A867C095314DDE2AA
F90766054E449F21CAB121F71EA0860A92901462686693367A8E5E1FEC0F13FA
A4FFF514300AC08026BD0876B13B967038E1BD239BE8AEF500DAB14264956BFE
0DE548ED84919EF9AE0506A5F190E56DE6DEF24CB25673B7DD76D3CE6187C7E2
108448A4B4E5B20B054683FA723B8B1C285CF91A34752B143FE8875D77DDF5CF
7FFEB3FFEA784FCA71A618306F0506E61A83CFADFD52B6864B2F122BC4A8AD1A
3870E01B6FBC0131CB942953A44E0E3EF8601904E4F908D23A004BEE40F71C3D
7A34C5F14C1D1F88A68311C8A5D172BAADC3E25FAFB9E61AE960377633E971CD
7C22550DD4009B22198DAE2D51A698F6D9AAB4330AC24DA64D9BA6A9704B06B3
E7A6C260D212CB389050C2D88A76B6539B4E769AEC938405A292013B84E67A5F
4E8413B4A85E572A32E6584D4EE233E2613BD1BF29B77892BB2267D7FCBB7AC4
F9E79FFFCA2BAFE001632A99AA562F72E289276A6358A8A2D2F431FD6CA48B43
B84C6FA42F341CAF9453F025D1AAAF0C1B366CC1820578D2C8370DDB08E41871
C40487A9307503F73945ADC33872E4C8C58B17EBFE285DDB5EDC13C618F85E62
E246BFD18789035968A47642B7945150A970849881EE1BD404058E70A2DB992F
D04FA81659409A052C0BB685A3C43C184E6083938F3CF2C837DF7C73E2C489B2
E968FFA23BEB29FA0AE11DD35E12A907B5C1C69235C0E482E635E69E63C34BE2
82A482285CE2E08F7FFC2325CFFAF0565B6D25E9C027410178E1379742322C59
4B357CF87059A39046E12EF06AB07CD830ACBA4FA3A8F2266A8725E19A6CAC7E
4479ABBDE32C1E061CAD9AF3923EF009EF6F2EFFFFEF8B400505BBC62EDE79E7
9D12ACE60440E2CB7905340E864E675BAECFCD37DF4C168D53012703484BCEB0
453C334FE178CDFCF32D668923E084A296126164524F5641CB8AD06F65127510
3AC48DB41B2172B1B7A1016B93836FD75B80BEAEE9EBAC3B902CD4429F76DA69
1270700B1353F92EB794370AD42206B58DDF594339E984910425D04B738781C8
4D4518D059C09933672E5CB890BE52925C1ABFDE9DBE082E66450C2183704428
E4D5B728226AE6CEB22638848F02A9AA7F291441983A6FCA1513AB7AEE09279C
20EF2A15BDB924256296BAEBFBDAF7050F41D3025B54A93D95C8B734C8DFFCE6
372B56ACD0B089581885C7A18B1D17F49AFA22A7D25AC1DE556A6F275CD29466
648C3452361FED201A6F61462D5936F3E6CDFBF6DB6FADF5FD52C631914A40DF
47504E2C3437018B3EA691ECB7DF7EEFBEFB2E02331560692DB781A5AE1AB227
A0F32503D12D53BD09ED89192FDDCA95F41C13633522C0FBBBDC6EA82FF7C340
A611D701518FEEE06EA48DF474EA1A9003DE905D4173D103768C16A810BAE381
071E909C7114C7F493F15CA7EC48F4E4E64BDE36B10ECD88998D8E72D506A5C7
DCB871E3A445860C19F2E28B2FC68ECDAEE19B3C79B2A42461318CA094D9A3FA
0A0E5E1D54B435795C8D9EA2FEAE8292A113E471B1BC47A5A9E11C4224C4AB6A
2432BDC13D4D9D3A553FB3DB747FA84FF00BF1B34B74DE9C9C4DB611FCE15724
B1622139603A18E3C78FA799A043D335DD93646168F289736A21060D1AB47AF5
6AF9D325AA2F340AFB29E6CF0804B93EC74C78ADDA22DDFF89970629198A5195
323394F33140F9F50A9A1622AEADCCDBAC8F4923EA93FCAC49AE32ECB83C4BF5
A87E1F92545875AEA337642322EF52E6F8753033A2FD7FF2939F38D6DA2C6884
C9CEFCFAD7BF7EFCF1C7F55E18BBF514AD8E64326CE2E70E1E7246746A3445A6
6225118571E90ABAAAFB63CF9532A6D81CF86150C4C056C60982DFA6119A9B19
D6C4C56BA6C2D8274944741110099E44CADD249958CC0BCC62433D52287968B6
B7808C10390E7BF4362C8E3A2FE65CD3621241FC66F7D5415C10F300234652CC
3902746AF4BCFB32DDBF8EB65EA4AFE027D72C69F561E5BBECB2CB24A6500F24
D7A0D7FD2E7446076688DC2727CD8AD3BD9BEA419612F7A32F13B532C3BAB4DB
77DC7147592D11F11E39C62585D09DBDB9A15EEA50C08D5C6BC7F2D1AD8730AF
67C086720A58F4286063EAC7668D3368F1B255EA208D7349C4DB238907314E9B
9B6653D1B3A85632132DABA66D400D3A2E75C942F5EB33720913ED2222AFA469
CD7D0465A98D24306810DAE8325CB42AA2D06C6F8F8DFEAA0B416FC81DE864B2
593B227AE0ACC1341E3A74E87DF7DD07B796D128FBEEBBAF1486768F2405C579
B006B229F52D8DBE2A5468A82A3FEFB3CF3EAB56AD024B86CF7DF2C927CB0895
EEA790AEAFE8E40A97371160DF8A33499E98945E2AFAF33433C73D25D8A01EFA
A12EAA2F4071BA1B2C77C4B270CE3478F6BDCEA48EB4ADECAAFBA440A2E6DA18
7B72ACB79B052132B063B493E4FABFF4D24B5803CC063310DB95FC2F75F1BE9A
191D575488931D1C7B5AFA70CEF51BE27890891263183E7CF8BDF7DE5B95DAB0
59CDD4B91761CDFC3743073D1BC5C84433CB5B70508A0A75808D2A6D3F1D7BA3
D0FB329F3EC00D9422F128FD558B08EF66D7F150FA0C43426C0A198B946CFCD9
5C88FB87A6C255A0242C775C04721FB2F96476DF70C30DAE743451062927B23F
4EACF05DD43089734B0C6C44EEAF77D7599629990A058FBA8D6902330C13D485
8F25F6268F2CF9114A638CA7DB70716ABABE2F45B71484C04E0C8CDC78027DB1
950B6D23F49D9204B3A3901B721F71F9C71286B8AD7CA5A4B6274C9870FBEDB7
1B6F55625533379FF4F44D37DDC4F6D06CEFBEFBEE52A8F6D1ED0B12FFC342F2
E9B01964DFDDCA5B7FD260A8AD4751495A7655C04EDE7367771120054E93F966
E8959B32BB270040B69C09BF305674134D94AB409BA16F4D4FE831EAA07A2BF3
46917945969AFBC14D480DBD761343EE2FC571FCF1C7CF9E3D9B11BAF632750B
419B66DF2143A72F61BC828BD476B9CEC277456F6C52A56674778D5969735A01
C71AE58D345E350231925D303B9C64BDD5C48913D9AC3A4EBA29E2CC34A49A1D
BD2DD3A1054B8539A0B5D187F57B4A955337B08C332E36DC860D1BB678F1625C
076D5F999C3A605A180D03DC5A5F669E4B8542C256E06A861EABF1EDA835B443
F323CAABAAAEE8CDA422E20403B0063C6AD4A8BBEFBE5B071B69AE4FEAA15565
126C14809A71FCE67B739E2FD6F931FF5A23FD468F28355672806833BEEFE6BA
7A435F3C98EAB4D073E6CC41D3B8909F774148999A0EFB8339EF9C4F5C2237BC
C218BAEAAAABB4A9FEDFE2AA9AFF883D2163E7BA4623AB4D59C0B922950BEC4E
E3D96BAFBDDE78E30DB20FFA3DE5B93AD8580698D5AE52709D5ED7F1B4722B24
77EC6814FD98B5BE54E8C6636F4D1C6B39E073A82A3732E8D24F69164DC1F52E
7A1CFAC315C0BCB5F715B361984869F20D3F71320F9F0662044B0CCDD2175F7C
419006FF8332D98B2EBAE8AEBBEE924BB76EDD3AB45DEA10A00646A5E04BB966
B76A3EF1EACC4E6C4E2559F3D80729BB8FBC781456CDD0D54DA3A5233D8B427D
4B4C25D0B08BB30C920896E31428573506C23C7DA14F063FC4463D067592F570
18195D48E400A54E602FE5389C756A2A7C50A9732F50CCA9B70247B4730DA457
90D8D165726C20A6366CCA9871253254A78C90C720765B3633EBB976800DA99F
F5146D033C60EE49A4C7907EF46EDCB734FF4E39E0CF386DBBA76EC41A869EE1
34737E29F03582183241DD4AEBA5E1912CC38688989EAE5BAEB3C6E1EF75635D
37682337F460CAFC335E26F00142795E0F748369421D168009599725113989AE
E52298F9084DC8407A73DBE09EDC9C98A9744E9A7A067A45D09A3EC213DCB4DC
6564FAF019679C215DE862D04E68DC8FBE5AB91715800B09FAA54B97D23B0C64
2C1693A5554D48D055EDBCAFFB7E3B76CA0EE60E7ACD638E39E6C5175F343775
A9FAAB95CB557DA836CBFB6EAE8BC3D3939B43C8BC63D5A251CC3130CEC02138
A31B36E45E3D5DCBDB98106EE2D2E19A2A8054A81623262C9876D861872FBFFC
D21544B1E0C13446388B70436242F168728D36B471202422755B09D6E9D3A75F
7BEDB55DC7437414D627C292FA8DEC514D141FE045A8A276ADA4E736D2E4562D
8143EE311F69B04F29499902872542965DEA2E5BE0155C0864B88D4628AF5AC6
A8016228BF112346DC73CF3D3ABF5F7DF595A791BA8E58491247EB3DCC7E366F
83394D2D3A3A2FFD69EAD4A953A64C41753169FAA274D575D75DA7DFF705CA33
1B3D3DB98BB68432A977BE6E827A57B32006D9B470ADEB33CEA99BCCAB93438D
3F6DBBEDB61A89DE822081A9D91C3623476BEE3F5869894968EF5D7AE9A5325E
79051786B9CC4F72F8EBAFBF8614052E4F1E5D0A994662BE880FE72070ABE8E1
C42CBE1D7A6E6E1AFF147A1FF1F9A87A4D6FE0B85D0A5477680720BDE8234241
C6F9DA204632980A82EC550A7172EBBE56BEE25677D30B8D61C890216FBEF926
25B89EE179F3E6690F13814332138473596C3334A9E4BF31076CD9B2891CF0C6
2AA5C2E8B3AC71F537195F1AD1B8F946CAE2DE1D007931FD7BD45147BDF0C20B
9ED9CE51A61CF7236D204113415271FA584B1D8373CF3D17AE061A189C7FFEF9
F7DF7F3F063B2327E4E5C2891AE963D4773370D1812EC141711CA91E32DD2A68
481119440B0CB374791956AA95CAB871E366CD9A65DDE02E754495396071D377
15B855AF76C92597AC58B14242CD02AB1427295DB6229904F91FBBECB28B9CD1
AA5C1A715442C4ECBFE8AC732BCD0364C56C71A6452F3B66CC98993367920867
78CC806371C86882C9B1956494C53EA82E12AD79AFB8570DDAF48EE23735AD78
6A2E371B7027380663041662571B78E4C8914B962CA98A7CF4F7B241E6BC9789
A6BB7E3EFAC7846163C13A9D0CB0EA4A9C39CD406E6CB00C2570A79E7AEAF3CF
3F0FC77D5F6E01D9087C2C1087B9DB8FD71AEFBCE6EDEC06F84C514982DE825F
1AEA7534A2B68A14B96C6B8AC539C2A6A941B8DF7EFBEDD24FBC9415867E298D
A593EE3C5F8C6D5AB0E23610C0831E8B0207EA2C74CF050B168C1F3F9EF63808
6597446B18FA18BDEB39FE2E4637DC3A054F111BAB0A9467799532EE526F813D
544A8DA79C8C67D19DD9B13875ADAD2BEBA2FB6BA0A271BFF8639E9CDEDC273B
86B23D4E0C08948DABE17DC44A043EAE4A22CBEBB77314D067D66E373FC4AC44
0A245FDE3650ADB1758D64F2544456869273BCE79E7BBA060F3C9A4B7B060C18
207FD2E456B653B136F4E8529E281EC9E879773FA8449F6CDD8C1E3D5A6ADF85
1936FAA27AD35349D844A8A7F6E8B1C71E2B230290646C475502671B18A6D703
E9CEEF29F0A5C20CACB96362D4F25A43831A4BB973B0959CC64933C11A012D1D
2345A545C2A86400DA2B975D769994BA6E75F5D557CF9F3F9FB351E3419AD94A
0B40AF08DDCD75CF8D76226B475C818CE92B1471975AA469BA587222365D438E
551CCE44381B9962C912AD067CD40A75E888899A794B05108FAD661BC50760FF
FDF77FE79D77860D1BF6E0830FCAE9FCAFFFFA2F363DF49058D08DA2E4D47773
DCC20D6DA00D02B3E6FE396EA06B498406AA09E1627968B4148170F64A759F0E
15F63722128DE812934C4FD1BB547A77D1A24548B11F71FFAA0B303F569A5D81
9AF0462B345720E3AEB925E2DA93DB4A3A830EAB3647D582D8678A38AA24AC3E
2F53F8965B6E292101816D33C97C57F383ADB6C973E43A5ABEAB316B27EB74FB
F3A41535BD529CF265E5D5FDE94F7FE28B383DD41AB84A02EA02EA8E388F646A
8909A15F7115105F98532933273857C5EC1974065A05998B26B6A442E6423347
C1AE7911284F48A1D75C6C746DD6FEFA26192E3349A1963712F146056C6FCFF8
C16857C5AA45829778F3EE25C0875991AAA60B29C4576C076078A58E92B66660
60ECF414FD6113757972DC8F072FCBA99312AA99923F8E86F61B9148BDA38BA1
1BB9B996C195A95B6E985B11FEC15A72BD9F11FBA62B21000330458FD601D13E
ACAA38FDFBD2542DB0639EDAEB707A9520BB202352E676D0C6DA6AABAD48EFD3
BB036B5A6AF28B2FBE30AA0D83345A4C299842CEE5A44220B20B591207940CAB
4945941F5CB1B4EFE1871FBE78F162588B538E5D786FD930EFFABE80B463115E
6A6F6969861D123035028E6D87BBE31C3E8A990809E5AA94D0B14D6DE545BE4F
DD04A811C10D6C4F83413A413755E349816CD2CC9D35EBEEA2024D9D06A3D9EB
DC97BE88161A730F2D3BDA97D9D3B0A57A11C4D8B692FBBC7B49CBBAFC8CF88F
3D307D4BFFD598CF38E38CD75F7F5DF644E472411CE8563487A86ACBC8198E88
0FE254B84D4417F1E62969F8110AD238203C4B5EC7F5637A6BE9B9E820F6F7FE
35EB9B0A852491A4A9937BA7535015B1A090AF99D93165558F1D3B5692221585
827A778D9F9026D23C2A42934F3933D228088AC98DE907F7FA74C8D1D5EADC41
4B294DF9EDB7DFEA4F9C8EAA715A2C103BD5B30E39E490F7DE7B4F1B892202A3
AB4C0EAF3DA0B30FC2D63484FAFA8D37DEA839D1085381CCF22348EDBB75AB49
BE3454D8D74BFB2752341B56865C226B8669EB042D5F44A9E3A294660F13DFB9
4902B61B42574127A1AAE6A72777864685580EC4D3DACA0C1B462D1178B8F7DE
7BAFB8E20AB0321C61A20B64C79C888DF4859C9A94C3A7A99D8897AB11AE9451
2CEE9E022D01782EB466098AECCD8318418A42FA868ED4F080E2E3E730D57E47
DF0A01E2AA21061F49461DFE01706E226EA39453E6C6E7C00E1932E40F7FF883
19D9604ED54421D0B41B31D78C8435059EB3FB5DD7B15201C7B204FD3C7BF6EC
993367368AE6395161F024A632820BAC2AEC6AE89C482FE282A011A3024E21A9
03911077888DF34A663800600E30879010017059FC729DC3E38F3F5EFEF71147
1C21A9147B5475DDD0B1FE0C6C213BA011E0E3D29D9A04973577DE274636287F
8ABFC1DC4601BBA444A2999349B126F3A9D1C2F9100B6131473ACB4EAAD691B7
20A6CDFE062152F5F91D76D84126148C89CCAD3EEFC6359D97FC12D93DCB962D
23A514DBCA968296296B5CC35C7FF2939FC875368F29297F37C1E4F8C1209672
CD831BFEB84EC9E11D78D3AA6C2324085801EA501D57D4B4ECB8E38EDA3F84BF
C8103B7CF4032F6C8856EE8B0752C37166C7CCFF7B71E9E69B51017B2AB83FC8
DB1A030B548B3EB6CB2EBB681E060F1EBC72E54AEBDA940BF7356003C4224A03
A7018DEBC82A62CE7E1EF1616D6CCC477B4B1419D38738D5F617C70A8C24D8AC
11DAAE51B0F9E39DDB7137C3A56C119DF7871E7A883ED991C426153066F410AA
5733A657D090282AD55BE8D103070E94B26FE4EA11346B6CB9135DAE18C93345
94F77C29CE17E3A2DB6DB79DDEC80EA8C63F71E24479F38E42D5D4EBDB31603C
B16AB6A4455A99C28543A7CDA96701C74939801C33E50ECE79F2B12CF17F9090
C60AB0D6B15B576AEF1AC20E89002BB8C36CE5F395E85AA476C2108FDF808356
26DF8E832C858EA3CA68E6BEB4AEA0F3A8806496B22DEC762EB2BF4696408482
794DDBC4850B179E7FFEF953A64C917E6400FBEFBFFFAA55AB6223C5AEE58ED6
F1DD0FAAB371104EE95EEE6C45EB2E90694EBFA7C071D8CA2C3320ADAD35894D
B94D4D7C67832A5D32E1A98FFD9EB03B62C75FFD5506357B3A164AF2AF648D66
99EC2391C02A4F0EAA1744B0F57AAC8E90E0D086C3C1AA29E74839B5E62239C6
465D2FBEACE482164966C1F70D9933E0101FD7E5EA8C93E081591DB0B8AB8817
BA0EC68E4B6FEEA0DED74E7F53BA2EBCF0C2254B9620C87097C1FB6D3252C283
3011FA72AFA4D8C8084E41EFFE54C4FA623990398CF0D4FB32B377A3C0B8EA2B
648E35BD129D6C1897BAA64DF5B56DE6DEE088124E1DDE89812AA4CA7041FA0B
5273DD2AB11FCC73F61B0019FD408317CEED77FD6CEB597581BAB74242740214
AF5A2FE3A49AB9C585F6E7F0E1C39F7FFE79B83C7D5A4DB2EF824BE26C4435E8
C6C15601D7032117DE9E46326AD4A8458B1691B327FC130F94F3C15DC7C932D9
3F767D0E2B6E91A23BEBE90874935AE88B26711C3972A44ED689279EB87CF972
7842503CBAA4EAE6CE9D4BCA80DC9E8FA1E3161BDAFBEBA5F6A6524E5B7A8458
75C481626212ED684078FC13D6395202BB1C8B0AC76693204DD33EA08323C745
0C44F786EE995B6CB10565909037E162729A2EBDF4D2FBEEBB4F7776FF031C47
BBD7D6EE2407D9CFA88618D66E0458357BC3001466C95979C3FBD96054D0D8DC
B7E34E4EA4995984E1562AC5D8FD15EF73B72D90F4D673C90B98119A12ED98C1
8DE2C211FE18D721ABC2CFF7DC738F76385B145673A2084608354269591C5E8C
10D485A0630F321391C7B26EBD091825D2E3AE45D356663F95D8CC1D9CB10DD8
087CEBB6DDA8CCD351D12BD961C508E0846068FB0DF5E8B163C7DE78E38DD6FA
EE4A218BF2FAEBAFD7B104FBD095D52C2E1B51325749F1E24E4873C93EA064B3
EA3EC71D77DC5B6FBDA5910F1D3AF4EDB7DFD6FC38E06C3E01F0F1E6BBB11CD1
670E38E0007DCB4F27AB873BE5C177520F5609686FD092E95A25A08DB8D6E36C
FAD43F62AFBDF692BBA0F15032CE2F23DEA19111B08DC0F3CE6AEA117A966462
8444A69CD0A5C29B0C25CD9509653742E9245212EC1E8D8F6A041667DEACD1A8
220D001492830435A0B69A798EA538B6FAD9EA6E2A473E025BB05FF7AFBA509F
0EA5EA925FFBD1471FD5A45AE8138555A731432B9632EAC7FD85B6DA6AAB934E
3AE9B6DB6E734E2E6682987CEAECBD102C0D2FAECF134D41EBB0E5800463226C
927AD34A173DA12533A9452A42EE3A385AB2CB2FBF5C8A9678604C346A0C9326
4D9A3E7D3ACB41B071FCF8F19F7DF6D9B265CB48BB02B1DE7AEBADA521B431E4
F16B78FA0D68067A0CB83026E2465B994B21756BBA17B575D4825684BA212006
6A8E756A3ABB923B275AB3DF785FEBE956A87A4FEDA95F42860E84122CD43B5E
77DD7593274F6654BBEFBEFBBA75EB52F6BEB0BFA12871E4C3B95BB426388C18
3EC149F544E9A103070EFCF0C30F1943A3C08723580C0626D645C04333AF4D45
9514E3DF71C71DB5C7B45574B7EDB7DF5EE274E79D775EBB762D5AA3A6B20861
6ECC798CA43212DDEDF3CF3FC710715F8DE8C7A7DC94857A7A0D9BD8156C24D8
88B8E6066FC2CE41FD6D2B93E720674AE602EB5BA980B1AC6390992D62A1DC28
7A806B2E3EFEF863EAB253202F751CC3704417DD1B62C720B0C47167414EE967
2939292DCD8E7E09CA91978CEC9AFC0B8889DD8F5DEF57D0CED66FA04136A567
D5FB723E298BA2025237D4AA0F1B364C4F9776C76A236A7AFAE9A73FFEF8E35D
EFE386C4BA21C5EF085F24179F893966A01CAE70D0BFE79D77DEC30F3F0CE297
936C79A77F252CBA92EFD758CA787E11B755D37CC2EDF0E8D8FACA2BAF1075A9
A9578EF87B8CB694C32108326C7CEC301F54A33D2FB9E412D9927C1E919D0244
73F4E8D10B172EA4AE86109039FA5D0762E2DCFAD06B2A6A43F522FBEEBBEF1B
6FBCC1729F71C6198F3DF6180A4CAA4BC6D39D77DEC99F527FAE56AE7065D892
1A12F429343900C7410FD17A50DB8F782E991169113DE5E69B6F1E376E5C1590
DBA916A492FD485D184F0639F76516B0144282680EE008902F4A087036A377CB
FD29D077D9490A7DDAD3A6FA8B03EA7412C4B6A3BB569811D01FB339EE481281
073DDDC4BAE693379AAF6452F0F40889F27F234EC7423F26FC4053EABF3E2C11
6A64F9ABE7622B1C79E491B2D43506EC186D1EEDBD112346B0B14B21D6CEF989
79012060B07A21815347014CCA6E1C265ACA25C2B02A49B0D3012515BDEE5326
774326633D136A8ED52B113615C1CC0E6752B6A7B31081A22EF7407F1B774242
213278A422C92515003A045E528926A4444DF3125369D2B00B160AF70075C214
BE552C86B846F10720EEE4C2A45308FD6A909A64B7D4E37D75BA7588EEBAEBAE
2BAFBCD222CB85E32505CC4CD679C02E3C47AC1C7DF4D12B57AE749728B6087C
BCFE162B0AE4A795DBCD72B1006CBE0DED1D37F94023370971C240337EE18517
4A3E928872ECDA20DB94BD67443049440EA78D4DAA05EC8857BDAF513F78C031
4268E3D420F81AF46623D44FA70C04D36A31A40863D9488392B377AE8173157F
CC983672396C55FBB91ACF3E16EA3472F7EF5471E19A603AE0B8D7746B4FB963
0C69A4280ACD0FE0E23C1317E028BB2208C005FD398E38E288175E78C1BCEA64
68908FC0550C2E4D39BA6EDD00C6B5EAD58C774D856D41DC1B1E34D28A6681AF
6728AB9907F33769C6745864BB9010490585B286A7A77076C82DF5EBFE5517C6
B8BBE099B6BA8AE2943D5C2A156B6416688D2DD69AFBC8380442C319883F5B99
0DD4C10F57EAF3F51B6EB861CE9C3974AD60D71921D1CC5C4E350AA6C4B52251
F3D7BFFED5FBDCDDCAF120ED8523E6A88474C4CE0373353387FA9FFEE99F3430
98B0F481534E39E5C9279F44677BDB388318AF98D94D81E2C6253D4C5794B9CD
4C598A5B8F7CD383D88D006B3028CDAB5563A8E1C3F1492D3A459B7013B9B82B
2A601FB72DB7DC92A085259EB360B8A1A4186CF13BBF03179515B025248EAC83
D5F68E6C33B1401107431A915010FBB62774C3C41F75FD3D75D8407A017001EA
8C6662A7F4B3FE027F60D82678284B45F0594E39D9AE6A050C1DA41F6E1B1A21
D9C4939CCAF16AA6F6B275577E46EF7C230F65CD02F3FE46333A714BF081301A
0214FDA4773BF5D453972E5D6A0A536C3164849CC86BAFBD16441294601140D1
DC142315885F9F49E6C5E9CC9E8AE68926CC8B97F7165B109955938B32BE2315
36574C48EBF784D1C8FB7A96800B113535E2CCF40BFCEC4A0CFFCC4D08BAD67B
72C0025D69CE268E768F375C15E1092058BDCEAC59B3E465CE9E3D7BEEDCB932
3C6B9E4B034A7D60F7DD777FEFBDF7FA6A39A51B99D501B63F76085FD1D8860C
19B27CF9726265EC45F9C1F7DE7B2F796E9BC0359E3AAE0CA1722870F53A35A8
DA1F7131D53675395A1137471CCFFC91AE76B5AC214FA657D07E7089943940F4
57B9FEE3C78FD70E31477FCDFC479E3C83AD5220A831D9322AD6F90E770CD487
F90A75F3C83BF6BF05371683B3F8291BA01640CC79CD38F5A0F9F3E75F7CF1C5
AE08E2D8824DC35221676692042957CD899CBF850B17E272B14529A037451AF1
3D8AC2A9FF71A0252668E226D4E3501B78BA93264DBAF9E69BB186811DF4167D
215328A24343986829A29C3CED36CA1DDE885D4F62F2CEA90DBBD116539AC956
C1D9E949B6B96010965996B0833164E3B3F05391A2AECAC32F8A10F456A0EA44
08C08765E08506306FDEBCB3CF3EDB2018FC1992FD314BAA8922859402EF951D
5FB308185715BB126DB3CD3612C8C71F7FFCD34F3F8DA88CC0AB1A79528F068F
0D6A634905D50706B4BBE093FF8244F32EB5DEF50FB12D105F79E8A187CE39E7
1C7632456536E99AB9DF7C23F4CA8C8EAF3B43A722F0DECA64B7751EF0F4E9D3
AFBFFE7A2AA9A920E25EF6C9BC8766CE9C29D75BCAE9DAE24AEDEC2764FBF403
A5B1E85AA3F9533B16BA66A2010B60927CD7DE0EBDA768F58C04C48A77BAC589
4F3604E72152DBD42C7C2B70935E71C515922C9A476D41FDFE6F7FFB5B2C5A95
50D6C67AE4914790207ACAA5975EBA60C1023A354148C943F937EE69E7807513
02A4555C1F44B64D79AA3B4B765310E9BA676B027FAB93F233E29B2480A032A8
99876620BC445B50F75205AF4724FDF4A73FD59BCA2C93D7EE84B79EE2523149
019D01A8EAA3A964906DD590607A019D78E699673EF0C00384AFFB0B9EAABA34
813A9F7A4DD90ACF3CF38C8BA3FA0A26B83DF6D863FDFAF504667A8AF63E9418
19319B724883FC3D3490B6F14B7D6C089042015183E236D31C47EFA69B6E9A3A
752ABAB695B971FC617040C056C96598DD5073AB91031A9709AF7744D53532F7
02F5FDB8AD29B7736747F504EAE9AEE304C44E89ADDE45239413CCFB229A314F
8F3CF2C8175F7C11C094AB5C8C0A76B180467BECB1C782B18F891B23CC35C894
2B15BB8E67C28409B272308239899AEA01030668B7BB076DCA529B208A21A556
57299732B74233F694ED60A2592CAB8F1B05786626C75070561B1719B41AE702
1A8D942DFE58631A5736722D59C4C701A742AFECBFFFFECF3DF75CACE734B0D4
731B6387262490C8D2BEF230F40159459A7F685CA5CC64BB983CC414FA8EB453
68400AC009FE585063442AE725DA79CDD096B8F3AAFABD5D2F1C1BCB3DCFF929
A79CF2DA6BAFE94FA41B40A1437074D249273DF6D863541563D811A622B4101B
E9A600DF416D9B00C44102F208AC854F7A4FE87FA31F22A0D89BB9EE2069AC7A
B0249D9947E2E70D85775FB6C18307BFF5D65BADA25B834C5A0EB316C37CE586
A1A7D0F589AF6F1224159147D8839A2F629231C1C9E5DE76E42FE35F41398D1C
39522E17E1CD9A3A2D1B8070279105D7EB80FAE1F58969F88D6CEF13C8750731
B89638A8A6D4E80B54A2EC634973795A1BAA49F37D2CB5E4FAAFEC3BC810B4E3
0DF931959A145BD7A617C41BB163F012528EE1573D17CE07A02B7AAF830F3EF8
D5575FAD3798522122351ECD18DB1A5880BEFBFCF3CF93FC4678C9035EBC78B1
FE0ABBACE68AA466BDA7853700FA89BDB47973AB18B02010CF38E30C6D861933
66602E687BC7AE21B6FAF561C40DA460EE6FE300B513879A76BA46EA56B8A7BA
B91CE2AEE3896876244E33D308EB7190C1816F72B3ED94A1EFC6977AC2890C39
4401F81F7B9480D65E7BEDB566CD1AB7FAE0A176E66214AE748121700CC0B89E
943B8B130033DD9B09E0F88C3727A203CF9B7324A90DF31D65A006BFA4C06E58
023DA5422CCADA407DBA6DAD5190080A1EA1DFCB6B97CBD16C270E8CE0DE54B0
1DE8BFC430CC9CC3B993490A5237D6163BA7A6FFC65CB866C0861A8B4B489F80
8A398EC8F4E9A1840AECE64690572B5CDC3FC6201D278B9CAC1873FBECB3CFCA
952B1998E6509F3FE28823E49BCA159E3871A226846A14E328BDCA440BA865F0
96C0A0C76399346992568AD0A92397467239171BBDAF1F7772ED1D39FFE29947
DB2127298F74AF179004D40EE01A3169445CF0FE09927354255E5871FB397D99
FB9D50B19E22EFEBD9679F35D2D30A3815262CC75C43D200F4B86DB6D9867C4A
A502D6825D75D555F4CD26C642121BD6025C7E747ECAD959D4BE83336410F575
F9EC7250284570658EBE0E9EC87871278AAAE69A6533019E29E659D7566E5D62
E4179BCCD124E435FDAA52A6F0361B5C8DA0B70830C0C106E3E4C993B5D56C9D
6872522686B490A26ACBF588175E78A16663EFBDF796A552C2A913ABF781EC3A
1EBDBB3EE658A8839C1C8098304E2128DAD9F6D1CFD5A6C4C0AAE7A6067AE33E
3C92147A742492ED1C27C01CDB8912796447F45C2A714DA7DC088D579129301E
D774B3217913ED7722635586547FAF88C761BA2C6D53361989FDE20391B8321B
095AD98D78B564575E79A5DC41841D625DEA76E6CC99D75F7FFDFCF9F3B53DA0
67E140757D5F039DD8871C7B9B5651C26A30142368CEE56A48DC5098401F27AA
AEC905E867360C1B03D30A3FBE2FF738E110E986DAC614AF6F92A189025C5379
EBBBFA17E5C4DEC6BE779A16CBC0896143AB9867F38BA1901C91F6431DC76A84
E6E75121A58CF1B64A0022AA01482C5AE6B822BF8497B1B6D38B4845AD58B1A2
2FF32A1B9D8AE727D773FDFAF5CCB3D608D66B8FD68128A2DFD8DF0C5E2F3570
E0405900B244B9A13DAA071F7CF0CC33CFF4CA62CEA6ACB95B1D5D8CFCCA9176
90B783381393D75801F3541395C4A5462043FF84F2D0A331EC76DC71C77DF7DD
F7C9279F7494CEF103DD0D2D3868D0A00F3EF800AF915C03A971276B4A94BAA9
DAC72D7DAC73BF7128C8A138AA64C25A2C2DB72FD30FFAA47E8371E9423BB029
F46CD644711E77D861076D78B354DABAFD2E5FEE2FAE276A4EFEF0873FC40C0E
51AE9403CEB2CFB4BE73E6CC4138D01BAA2E04AD2DA54FE8D3D80B31A340B6D2
FAC6FCE3FAEF6DB7DD262B12B9C9DEDA6EBBEDBEFAEA2B9C06FD0630B7568BFE
276832ADDC0F41B17A31F4DF5D76D9E5BCF3CE93C7607C263E74C4345181AAD1
42A544B9145B1F5B521FAECF01EB9EC3860D5BB4681187D380F294B9C7102BE6
73C7B6A5922A156AFEA28B2EBAE38E3BF4457C029B6925025840DA9A167D0094
44D7F1E893175C70C17DF7DDE7FA199BFF4EA8A7C27187EE4E6BD1B53FAE6DD2
68F1D4E4E0E93A87F1C136C0FAAB21BB87C344FF12E74CED5C95881E4CF59828
622ADCCABEEA406240500567126FCBCA7FFCD2C074376D5446689F1200045EA3
2BE31DCCE0652598621C8CE3B370E14259B49C919EDC4F4D0B01341AD150B30F
6B1430093CAC2BC6C0BE92163CE080035E7EF96572A586CDB35D35008DE7AEBB
EED27B9D7CF2C99F161769750D4FEEFEFDF7DF8F643736AD0482AB5A17E249B8
C27403236FAA71EAE6241A7091E109700987F3FAE4BC9CA9415922B61CC4D32B
133680D623D675A4D05C8FC68204276CA0B84F1FB6053975FD0C039AC13B1B72
CFAB94BB11E88692B3AB56AD72C919C6A2C6A9E5D36E41D639CF3A77EEDC3163
C638F8648AC76668C340AD9AA967B1F338328CD30142427A7115621D941FAA3B
00FA654E407B4820ECBEFBEEEFBEFB6E8941281A07FAA43E4F66A799DB3ED2D9
BDE40FB00AE04B4882B0332D8B8C1B8029C8ED0D584A27C8D33FAC800D6A0190
01BC00278175717F201D37F8D72828A272C71D63B5972888C0093CFBECB39F7A
EAA954643780D0A6CC518A89696898D3DB8E8135326B5823F334103DE58BC084
F5AF79C237A1F0883BE100C5C6821AB1DEF090430E912727CDE42C941BAA8395
70EF17AF312BD72A3A1B6AA65812D8096ACA121C5BC7CFD35ABAA0B0140D73C1
A84CC8534F3DF5E9A79FD656C6AE97CA97CF8DA4D30D478C18F1E8A38FCAE494
A35F458CD0C8E56E9EE8E1C3872F5EBC18230B418C0FDA93FB1DB9B08FDF6B4E
88036307D14F148999729910397C962465FBBD46C0B1E73005F415B88DF80DB1
658AE7DC2AA4B75B7F5C824E74784531D4A352B1F1C96C1199AC2F236986DE26
2EE4277AA6A5919C2293875D0C521D9B66E2C4890B162C20305B554E03407ACA
942993264DC2380013B1B972C0C61C68F6D0A0F4F532BCD3C1D2485B21313778
F0E0E5CB975B0B46D8A05E7FD75D77FDFAEBAFB142C85FEA8B4855B28655F35F
1582A6644E17AE9B61F3C4BAB5E1B507F45F0AF90872E05A6148B137A427A48C
CDA540BA9A1A5979E79A6164A8C4961C02ED963BEFBC53B66FD5BC39CD14D399
9A49DD56D3E8E8ABB61F0E5664498B2409A4D8E38AEBF793274F5EBA7429616D
2B361003A95B089A1F1C7234585DC710468EC852900A1BDA5CC72527D8AE24D1
17D617133FD21E943A4FB8BC9004965F87283AFC9DAEC9D6235CE98E92667846
57718E5A99BCBA5411647E122E0497A9B9E102229F228DE26A0BB78EF56CD04E
CA9DADF549C9138DF0B3CF3E837683605E2985ECD8A704A0DE62C08001F2AF9A
B9890253618AA42860E389ABBAAAE48CAD10A75DB54B350C895CAD0BA62AE134
4E2E551BFAAB5E90591D3A74A876940F7BE95D745D79E595B7DC728BB55B4C25
905F70E20630602353B534326F97EB72999C73CF3D572E19199F4A054CD448D7
84091324E6F424B980D267B7DF7E3B6EB806A455C4148A859EEC423FCF4E0F09
18F3B33B2F9DB2475BEFC1E803DB6CB38D16FE2F7FF90B77E8C9ED441A994885
1084167EEBADB77EF5D557D973DA04645E893B11BEE684B015DC2FB3EAB92C8C
DE54CF72F72772788692EA8684FB9853CD95963F72ACC42A498B54A3E3289005
66AC9FA9B8E83A1E8DD6940E7AA26E2BD57EFAE9A73FFCF0C39E494D0B47A82B
24B8191A9E58DE41A65D937345C9C948D483B4197EF39BDFC84382D1A26AFFE8
D86BC9A468D985FBECB38F5C07CB4D3E6099855D657099237BF5217110069A8A
D8652B6D8E0B298CAF5F4A9FA35C4D6B0A26A851B0B4EA932C3D2371634476A0
062C3D77EBADB71AB280D1D61758766B0CC1AE202CED409D3B90A8B1C88D0490
B51DE45CE43880E1B4025B16D85AC6CC998AA7D866AEB3C8355881946D057617
4163BB0EDAD83A6BF813BAEDBFFDDBBF3DF2C823CC2AB961976F72E12D8D1E3D
5AC779EDDAB51B724B4AEF3119131A898C8C2AC385F3821472C11E8E1A963A1C
7FD81C764F5BED2D7D4A97264793C9309C94614FB261A831D5C144F1F7B63706
65EB6A485A23CD06707AA2B2DE1500DFF817BD8BACD76FA40B3FFDF4D3E8EB73
61281078200867E20440F8A5DD852AF29B6A4E08EA38B1E8BE1A2E882AE5FE5D
B9640A30A2629424A4509ADF939BFB6ED2D1EAEF459043534DB930AE0514AA76
FC08B440C372DD75D74992132EE28BA478E938A7AF68C37CFBEDB7BDF972E379
3689462E934B738203EDE0444C88D820C024E2743B11998AF00F79A88D919B9A
038F58349988E671F6ECD973E6CCE1F1A02A4C454940D2345DD2DC684A7B9CF0
E030179C345C61D6A3BEACC5C420AEDC42349815DDE57AC04A8926B9D6DE3B0F
B16E5820A6438DE7A7EFCA219B316386DB23A6C24E24DAAC77D48420DDB0FA6D
503BC6CB23982553936304A4DC71D6AC2EC4DF6A0E3F1D1AF0A7B10CF45F2881
5211388562C68CD929673137B4F7C7A53F57C489C8D1915D565FD8EEC3C916AF
0959B732DF19261A2961D7B631E1B108B595BB15994CCAD0DCAEF7C76A31A795
41F59BE554A7C0A08BF34721324714943BF28B98879D5136E499679EF9C61B6F
80FB30E5ECA1871EBA72E54AB0EE3A11C4124C9DC8B46829AB38B76BCA9062CD
2EE044D72F60AABB043966CB0C9FB4B2C4A5035DA87D857DA97FA9698667DBA8
FBFA28344B697421A02A07AB3C5D865B936FC6EDE64F8485620ED8D88E940BB8
BD796AD0B391FD317534E1313799E684765244173C1568414F6F6FEE65D21B5A
C7EB63F4E942ED91D8327948A4E940831A22604DE0242B9619FD9ACCC8FBDA6B
AF1D76D861165CB2E1647B71643AA14C5CF1A14C2319372A1798376C05ACB148
B50458C7213A2A9A6221752A9C99984173450C66594FD1D7044046A4148D8B15
A92BFFF1A3CAEA48144BBF6A605A4A496C99A7CE976162821439F8E083972F5F
6ED25FF6B99700BE52B28D00179816DBF764211B99D7D681F74851D5C8F5C48E
E41B0E82D42244FABDE2F37D2D1C537B329F234177C2CD35652950AABA95A6F9
376C772314D8E2FD7D2E614C1B62B27D6EBCF1C6CDC84064C628C25F575F7DF5
2DB7DC12C1235806E6DDE5D5860E1DFAE4934FBAD6DE5D96FD9BB87E5D1B9557
190AEE52C2BF9C5E872B2D686C21A5D062DDB1172A40687579D14517C9BC3025
A44F57646FC622E637247DC1F74F2C2EC374810B5C73CD35F3E6CD839DD54831
1D129D192C18F22588EC885FA83A755857A07FAD9F526ED4111527B7C27B4BD9
3BD7319343FF97BFFCE5C30F3FD4DC7AFC2947961C7BB47B9142E48089A2BB8B
54D433CF3C630EE194CB456A283CF14DB5B8DA3F9A01E619158E0783ABC45E22
8A8525E77AAD98EAEB74DAB4E1E55C4A8E984CC3F5BB26796EE4A6BF35E97652
45B6A45D7A5B7F8E08447304AC0C2CF2285639E288235E7EF965EA824A33D3C8
DD005BA1F7577DF953D5A5B99565998A40ABDEC276A1A31A7661EDC3B532CB84
491BFC5CF3D9D96AD1DC1285A6F2CA090BA7AED05296AE244A528E08BA751D92
1DE810B918A346222FBA96E0F2CB2F9702B6056F46681F161F04AE527F7BCD86
3686036C311CE5D699E8121B0AEC551C380A17C1C0B28B30B322139653C8F570
819ACD9302F99A47DE0C14D329735960E290E340B600C2870391F5A27C884A04
820AD4916BB1586B387FF4579422D61E7618445A3449339587F92F6D76B85972
3353EDFAC54D25A95F52989A72800D66A4BF3364A676E63904592ACA6CB6DB6E
3B8821379702767B5AA34BF4F2DA7084715A05190D7130023EFD2558D0B93AF9
E493EFBDF75E16CF8CE735A1B3FEEE9246E821BFF7DE7BBFF7DE7BFC49DB1764
2CF32E6751E7934FDA4701560A25906F18A1CBCDA28D923E06540D83B1A6FC03
0D3470E0C075EBD6390EC63D717A743702C218BF1AC9AEBBEEFAF1C71F7BF3F1
08EF01D46A8CAE10029527B77AF56ACD2467988995672C592F850DF93EB51366
A9E58634094939024398F4FF29AE142899C84C13184CD50257624ECFB5B6A6CB
5E0ABE913F69FBC61E243B2D15B400FA8DE4B2310A464F94F67923301999691C
C98B7C6CE506677C57ABACFFD6B435D4EF355DF7DD771FF0783252C046AC1459
8B187EA4B908A9D312F03526C3FA8AEE082C900D9498506F647209009F9D557C
BEB458325324B2B54CAD4CC1AFABAA4EBD955909FD1413F220A92D5877DB6D37
3AF8EA0314D653A1D113BAF1C4129AFA107DCD8501D1CA4C14ADD070535275DC
B8713367CEF4D8B05009E639E3EB7973D1ADED30CDB3EEFFD1471F69C7024170
90BCB7BD454D89942A85F4B32446AB20BE45F3198EA747833EE3261C49E32BE3
EAC75C4634B0BCEEFA13328A4C133B8A3A226E5E32E04C628C2581EE29B5C9E1
7210252AE00844EAD76239141A131906D9A5F696BDDE4B9164C6C15A62A5A4B4
E97FA59FE557DC7DF7DD6C803BEEB8E3B2CB2E239978DE79E7CD9F3F9FD41245
CC5A7D2D07EDD76EBDF5D63163C6B86AC3A87B3BDF31C318FFEA35A22EDF7010
84C3F721C958D09D42970F08CA31C3B5F0526672DD005BF5F70074BDBC63346E
09326D2C6F4D3C7AC7EEB0C2FABB90BA1B5B2D5AB8117DF70F5E2EE341A15A1F
B3D8980E863B19FF092DAA7D0277A730EDAACF556FE85FCB13A3E5D5791115E7
E8126F81AE84BF42D93D7CF8F0071E78001F4B2EF5C1071F0CEFA38D417D72CE
9C39D75E7BADBE2817560E2BA17E82E73C9DC268760BE63C43D500F427ED10CC
465E3C9A7798F02C072D2EA481E06C9114D3CCFCF9CF7FFEE69B6F0CF727B257
D3F6D10D7D8D2625BBC612CBEE41B5505BE9B837964A27054F09E2843BEE67C5
63AF3B9F70C209CB962DD3DD8C5231F520F1370DBB7EBDF0AE6CFDA4C0ADC8DD
E213A9427EECB1C774677697BE4B9CD00BE733B52174DA71C0D09B8D0ED3BCB5
66E690430E81F5A5669C940E237D0052D4E4DA5BEDED11391DF6B653E87FC75E
F5D419034C36DD8EBB651CABD65F943BE540005E346F9A3D077E6354900FB339
1D38F1C62871ACA6EC6B3A7B1D9D78B3C1E3AED8718F2146161D2389614486CE
1270C4EC2E31F8E19E69E654F21CC65A6AB374E90EC71C73CC902143468D1A15
DD6B6B383768E180332AC3C5D969B0A822EBDCF3CA87C8A9E87F5C013743EF87
AEA5C3CE5BA560C74867E1EA807EE5E930F65806A6C01F49D00B97CC3C0D9034
44CE090ED186DCE2C298A11875B7E08D0644CA705A4499964F5F3CE79C7364F5
8E1E3D9AB445C32F96DA8D0BCE33A926BDCC26737EFDBD78D081071EF8C1071F
8C1F3F5E82383EDD50A95626C4E9AFE78A2C76E11DB356036EEAEFE5ACB34397
C451A9F792BD22A7810EE72E3028ED33BCD278C6482ED2B985DA5CE7170965D7
A3C4D1439CE446A6C66533F145397C3A5A449BF51BED4838D90DFAF006E2BDB0
2B233135DEB91D1A4E604C1C30986829E38893BDE38DF4B1A54B975E70C10550
F2EA719A22C422AC52C06565216EB21289B012086D027744F928A8252874C411
47BCF2CA2B29672211E28401D85D507872869D4BB6B7E4C8330FB53434228926
F6807A305362FAA6CAE0BBE5965BAEBCF24A0C1102686EBAE57C951BDC7298B7
DD76DB534F3D95C072AB5BDDA75D8494898A8C54279C8B04C1BC400B6EBFFDF6
5F7EF9654DFA7CF6ECD9D3A74FA70524A4690041AB9A73E0A9F4E6DEB1E64DB4
24C2B123B1CAC7A096D3075C50D4CAF4738DC032FBE34076CC86CC625930F278
F0743D69A66AA711B5C43774FF2974B72444E7F810E7B1AFA34705AFE362A792
C7D6C817C6A5591BE937CA66307B06AA6BE0C081EBD7AF671EAC0841CE13236D
E56E07517A971E41E0C77B20C6115D7E6D6C542B949C59929428EABCB1CD1F9C
DA4D46176ED503D9AA2E8C068E4054C0769F1AB9D88CFBB3850C80C09D60FC40
1F989398B0074C80FD81191AD985BD7C1C1FBAF2FCF297BF5CBD7A358E0AF68A
6E22EFF9B6DB6E830311F8ED86DC079AD0022BCE878D1CD4A1D63D41F8CB0BFA
7BD8CA9B9277D3E84179B8BE16729FCD9543753D00BD8CF024F43336FEFF555C
D43C0083D2D5DF85242B80648933BB59C61F4D30FC57D2D524D8791CC7862437
7E8074DEA79F7ECA99410B72BCE3E4EB0E5AD1356BD6902B2D51D3D5F44568E5
0A2572514649C424905B1261DA470F9B0C90142189438A10623357EE03B510C5
85F66BB133F4BE92A186071BEDA9FF46578C4646D4C6D086C5A4F929A7762C4A
AA88353845607A29A870569E6BF2E4C90F3EF8A03E60DC1F76009393023CA724
297A3B5A9437027938E01447110969F0318C3C388F582C7CDC9AC5C2D322949D
0A3B5A5F31E4C75307B11A6DC15C5091727A0F694530C9038E4E67E41C4ED9C8
A0EAC9935995DAD09AEA26144AD1B8BEFEF38DC0EC6F1272A75D9AB981154910
F374C63B90B783CE17C3CED56B3F22FCE636DB78309898B178C69FA4040E394E
A3275BC9297B78D1AFC5CE602661FA8CC11B87124BE979A8C12211AF9D7E760E
E946FDF7B4D34E5BB66C997C0669E89453E31804FA4CA9821F31DEC89CCFC460
53E1B739DE83B0A5EC2D856E01ACA65E9FDF98C2429FBCF1C61BAFBAEA2AAC7F
705898AAD4DAC68C98E56AD758F10FBF50C09C41F425212E87A63CEDCCEA9429
53A64E9D4A6C66E6CC993366CCD02FB569414123198CCCD0F8255A39B0082B27
C8EC29D94CC7C1C076813726B537A7775698B7062161EC9B4185E87E3D5AF797
6C97B7C994C2A754D6464C9F8D292C1A0E09E4B15507EF475CADA235B416D2DD
C1C079C97D193A74E8BC79F368E7649FACBF37B7CA71172DCD6355D9CC8F187C
0AFD914C1C0AA68E1891513F5E2DAA5010CD2903B81C4172E196C6490B6BDE3D
C28BAA04BA239F29BB7A1634BA060C18208F10F8347B08AB4DA25F2602EE886F
15D9CC3512F8379C49B5BBCCC68A915B8C620E3C7866FA1070E031A8FD2E91B6
D3A0B3462640881BB266FE23DE84A891ABF2298D4DB9CC91029E1432110E1218
3CEF683648607461B3BDF5965E53CB9A8A0A7D9E0BD5833EA91764BDF4C53973
E68C1B37AE06D86FC992B21F861A762B56DBEC253DC1055D06C5DF680E730BA7
8E9A37DB1FFA3DA58AAC2F81A5DED0F7BEEB3C13978BB4B735EB6204BE89C36C
FBD2328F5736EC60ECD8B1AFBDF6DAFBEFBF4FA90659589E85EE4C2147D05BDB
97BAEBA5D581B31D63D4806AB6AB7E2F0DF7F9E79F0352D368E5F14F9830018E
052771E2364311E2A39B0C39E6627180D8D5F8C429F335A28F097BDAAE8D6176
5687F0F82F7EF18B8F3EFAC8E81E1CA1D871CB6DD10DCD71FCB62F732363BBB7
72113F07A12F379A34A96DCADD732132D2DA3533A1660ABC2571569D87620796
FC7E9FD0FEEA605E0105CCE460B495B00EAEC222E4C072B0644067526E3C8564
8600CE3C86A6FA32CACCD5288DDC4AC1104873B9A422F680DDCC08F122343946
44B3E8840D8C3BE1DC914ED62035CFBAE146160E63C92C621801E45666953244
79737990B880BCB6E58B1EAA177606C8514D92C4FDBDBF268EBE69A6B4BDE69A
6B6EB8E186CD32FE947BAD10E5300D8A3CF5FBEFBF5FB34FB911A8C26DB6D9E6
CB2FBFA4D6DE6CAE34984CB9E20B115362C3661E5CAC529F7BA3BA5C1F23829D
729798E8647366B01B9C1F4AA13284A208FD46968A9C5D6D143C151602251ACB
F0636D8CFE8A0EE6BD0CBA762DAC619344721046DAC40E59DBE643A9E8BF35A9
07DD5036EF238F3CB266CD1A591560D1F59B943590391A9DAA8F9C418E958195
2BD12FFCEC673FD3D4A1991CBCD507E4135C7FFDF558C13A7BFA01125A9D73C2
4ADAAB175C70C1FCF9F3F5527FFDEB5F6B1430F969030C010A1075D0EB6BF269
FCDC083C9DA9B0C1F545C20FEE17C4117657357EE310254FECC98D6FE3CF4C11
067BD77102CF86C60E986E23934B77FD3CD120233952D16F431A2EE528949BF8
3230BD32195967E8599798DDD86DB7DD3EF9E413E705FA7548CF3DF7DCC58B17
A7C00D6738B4A734321345CC660AC08B08FC890A18BA2117437A09F09FF80CD3
850124774D0A1EEBD3CD1377DD7557E9DA18AB8B1D789C89C0DE6586D179365E
4B362BC11E34B70119FAE5B469D3A64F9F6EEB8DB3194BE952EEB8CCEEA27ACD
3EA27EA9D5D443753A56AD5A054F62B4C97C84FD9B1F118566A27A72F752DBA9
D1B78E6A586B8A44E25983070F7EE79D77F46A7BEEB9E71FFFF847570A415C61
0517F1F98DA260156A71271D9C1D4FB9D5A9DE54C75F863565FDD495C0E88E2D
8BE2D7CFFFF22FFF220F4A5FA113017111F93C72D0CF3FFF7C9C6F7660C3FD85
62B6A9139605B1C3E64A00A7DCEC41A33FEDB4D31E7EF861577FA60C8530A136
067B7F153FE673A360F88C14F09BCB838FB12673E621D1E0CD36EC8D731E5569
CC72F586EE5458FD36C1A2CFE1A2F8AA7980699928D6C5175FBC68D122383D52
26EED148C02AB73211012E97C35616A90C9586714C17406EC2710C1BCBC33034
A48345955362256E64FD3066CC98DB6EBB0D8A5A3761345B6CE77BD5181CB61E
802622583996047CE8150F612FF300B0A2BECC9AE530F5660AFE8D3BC0B8290D
7139F7B3C36976BFB69A8845A459C0CBD4DD4CD7A7C93FE8A0835E7EF96562A1
4E3CBBAE9DD7EC6C5D5C72389CB9441C536A427C12054CCA1317B96A9E4F38E1
84E5CB97A7505D5AA3085B455B724D3E43D58B1C78E08112D6104F1A7B95DAFB
1C50B1635B10EB5CFFC5A43BF9E4937FF7BBDF21C8FA7B7ED9B4DA093A14B28A
BCFADE3C6EC70B966ADF7DF75DBD7A752430313820D6BC725A9910706A294480
7DA253C0423BAD48080A3D17474265393584A050E194F8EAABAF78B406039662
437B8F3FCF6464F090504A0580833DE65CB2F680AB781D6BFD2EB7239388A055
A837BFC159716BEDB4D34E3289FCF4A82CE3277F8402B605C9B09D46B5BA6DE5
EA67434D899333819A61ED2E6417FE8F2B74A538F5496F78CB9F520B87941D62
B822B407E0BB75D4C4F5E8BBECB20B181AE7FE51071247FFFAAFFFFAD9679FB9
C29319464C114836BEB85163A1C7DEDA29DB74C8A651A346E96562D8C113EDD4
23384F1B5624B19A99D02BF6F8C482D0B36ABA12B1AB22E4C18C1C550BC980BD
5A3E21AE4291D2D24CAD5BB7CEA97BC76430086288A6D3104193119607A4562F
20E49CC9FE8D2165969CAD7FEAA9A7AE58B18214784DB9975303DC84C4032220
C23D52C0EE6AE6CF3AEBAC3BEEB883B5A3C2A1BF07435371F9E597EB2664F57A
732320E729C171686E6150EA2BB888496D32E0881E4CEDB0494C4E7317C43F21
8BFD5F78E062ECC83CA02CB48F9329F2317B7F443AAA4640A42C37C1137198DD
6F91035CB242229DD68F80E2477215A33C62683A22B0B8DC83DD345B6C4E8F04
1DE0BC7264548D7169930FA71C9C678663F00D894F80D4E3ECEDC6B9DF399F91
50B627B76FB3A1E0F06604B92052AD1489EF59383472EB43EC57D3BDA5E21413
9BAD5A8212B623D277F07B1F5ECAEA4A38385715DACD4A01029D728B6B5E563F
938D325B729C5E175F71A652E187EDB3CF3E6BD7AED57AB1011852C461B9B022
15E22515FDF8DE78E30DB87AAC892356CB2B08C8CE218A584681CF075F8A67C0
8E04F3C92BEBB66C0C6203FAAFEF99DAB9E4BACA2BAB1B398B4B972E95C30043
BE4602F291B0815BD8B542CF0272BD84C781B25280873FA38F4199D7898F4B59
8B951064E416CF39E79C254B96A0C8C1C67234F49A575C71C5A4499348F9B151
BD61B83963604FE2ACA3C8CDE7D368D4E6D8982FBD127451DC4BD789279EF8E4
934FC60017467A4C4BC07B8722D464B9D891E680443F6086A23D38E4098DEABA
492BD1524AA0EBE7A387AA47EBB82217ACF3F4446798203D2125638B01F9856B
D2198A8F2088DEDC73A906B5ABE78E1831E2BEFBEE031282DA267865E405297D
ADABFE5B1512C48070E6D85B3F0A8E4E601DC61A6CC63F8448A14A50CA5EF9FC
F3CFADE4DCD3AD591024514B968A089E36EE6EBBEDF6C1071F68CB6AFEFFF6B7
BF31690658F56496548B422CD694950DF3895048013203BB4D2AAC7B5C0A77D3
6A15CC359A497D7DCE9C39B28BB1D228CFEDD7FBD65CE82797D998EF17238C14
1171118832785F5BF4FEA15F0F2D95803393B1C6D432C5E598C41E5145087A54
A9264D9E1034ECFA8D7CBEF5EBD76B8AB07D238A1E9A717D121DC95B635BC30B
ADBDAA5169DFEA63FA939BB4C34DC80AD6B8D72933F6A5AC3C38114C9AC30CC6
7FB1BBB425468E1C295BD0E101AB5EDB0D508593CE24158D85D1CA1DC16BE41E
D2139D8449ED4815A15D84C0A04183DE7FFFFDBE70A58E9E31BE67CA208312E0
231AF7682FAC3A3D94B07FCA4956F48D5E87EC4F0A49569F74FE75F09F738A81
C5236270311551659253E833433E093C50076CE49DED30E61977903C94F7DB77
45CB739AEED1F50E4147C29BFD063231DAC425D0160BEAF2D1587A1BCBB42257
0699A6934E3AE989279EB0E434E0D4F10383243AAD558BD3283C394D76F799F6
94E90B81C8D0969183863FA0FFEA97C6BB917F6402B13C2CED79629D0293E8D4
E2913A45EE10C3A1822D4E0AC2E8BBDCC55A6BA00DA4C7E303395FE55966D047
1F7DF4ABAFBE4A6E3C15E120047AD7839142576433875581B3B05380589343B2
E1A97DA9114ACA60138D1E3DFAF6DB6F1F3A74E8B265CBD08E44444DF5D7158C
666194324DA6FE0AA8B56AFC7BEEB9A714520A96B5E59DD912D86D3539397287
E604D730B6DB6EBBCF3EFB2CAADBB8BDD0D64831684E916BFD2534B040C49A61
3F697DC911E2BC32451076EA1DE560E90839E0118B29B96C3B9BACAAE49738B6
B3E5965BD209BC555082C7E4A8D60BFE4EA7307A72AF2108891CCFE8D7FBD6CC
033F5840C82979F7DD7739059C0B98D223B8D708AF466018F811CFC59476AED1
429CFBA7DC072D5A90320B201BB1C76026D4BEDC8B9A5D078BF5F4E9D367CD9A
75D861873DFFFCF31C522246BCA04E318AEDAEBBEE1A33668CA3442CB1DB873B
6D89E5571FB2F6C6D6BC118625CA8ADD16A5E4D65B6FADBD576AEF1D11129C77
3692BB19A6400A88DC8F07B06A4896F2ADD0EE25B22618BBDE0A554629D84031
999D42C52D0ACC6CA02E2580F6C115BAFA301081088368E68E8DF1FC7A367CE4
23F922E7483727BCE1BE5B0E232D5FBE5C0E15312A8A59CDD3A7A75855D3BB5A
77EE2C9E26106239A92F6AD86ED4DD79F4A88CEA1C7F0AB5EC86493A56CF808D
7BB515E2A9C00236D6AF14FBC1758E91BF92024EED69EC18D54FD91735D8D616
4F2C58F7DD1CF732E215308D5FFFB4D34E7BEEB9E790CC9BA82B6DE48A496A01
E3567022044395836D738F65260763804F6A4FA411BB83EA925357351E9DBDFF
FCCFFFA473B8967CBFFDF65BB97225567CD7CF130FE134C2008594970FA79F53
AE55D56FB6DD765B2930E9FE534F3DF5D9679F9500E548538B4C01436739164F
E1843BD8587FAABD75307CEC45B9D1186ACC6DCEAA6E4518DC7541064D786FC5
3DE4920FB78C4438F637244BB2930DA76907760F7DAEB61198EAD44E6AE12F6E
686FCB11372B1AC5E78D3A1F53C4C5479F75D659340BD3BB68B134037A77ADA6
7E38F8E083DF7AEBAD5641EECD8AB3DF5C56216F584664BFDEB7E6A21D21B97C
2C1B448C66E6924B2E79F8E1875DA1611562486A4C98F5EBA156C04064D92106
C7953CE01498875371E0D9B748284B7CD00903060C183162C4DCB97351632EFD
72F76B2F819E7EF1C517DF7BEFBDF415D531041A09989F6D96B2A0E45F6D4E57
F7767DAF66687DAD4720431800D15A59A8980BFA4166C1030F3CF0CFFFFCCF1A
EA85175EF8E8A38F6A24BA33A61EC0754F8849EC31565802C2723572A691CBA8
B4B5BEFEFA6B8EBC3FEC525A3019DFE5E6A72903DF527B10A2E4DBF9605A4373
3A22F986AEBDF6DA6BCD9A3511ED2C65AF698C6D2A3A87ED118244718D2F9699
434DB82EB8B3E0B958BB66D14B8D874A361218E79E4B962C39FBECB3213077D4
DA915EAD1A21134030A58ABE562ED9A29609BFA82FD37DA7F6405D0A5DD4B49A
FAD9C68711D77AB48EBF6E3279F2E4B163C73672A998FB17310CA72C2133C01A
7039400C3EC7E081C3D1FE253284603E9052EB5176A65105B1B5B9E7D9713BA3
1DF9FA01071CF0F6DB6F6FDC1255079E129414E8DFD88E0E676152959270C6C7
B34EE66169660E046EA2F161ADA01B8E3DF6D8679E79A6542A5E1A0FA863D8C5
E80A505317CB79F82E774B66F37991B4A1A5B4908364EC0113699311498BA416
5D0949B8A1CD1F493169A01A058C094966C53975D6460F1D356AD4ECD9B38DE6
489B2AF3D07D1037FACA21871CA2E32ABBA1F39C3B6BD5CA94A7DECDFD55C08D
D096DCC14FDDF9DFFFFDDF5F7EF9650962EB6003384165E33601A734B548CAF9
48BF298223053DEDFD468B153258BAB95E19C4A32514734B768A35251FC30FE0
DA36A307CCDC6A07D29264E8D0A12FBDF412BC98443E2195D5F02813C21044EC
C2B4AA4FD6D47377BD62083A82DA6A84F2A44993162F5E2C2F4D9B56B341DCC2
F85E9629B660235C8F564805C8137B8B901A02179D8D7094DBF4EAABAF4ACAB0
64F83D309AB1C724288F3AEAA8279E7822D27575BE975D76AC529C78073C63FB
237BD82983A7FC576D36F8CEBCED356CCA55491CA6A286C49FAF57C07AD0C081
03F5229A96E8495B9EC2874C496E0A9E93CB49DC229A976AE4FA3A8C6C3B55A6
B56121E0223EFEF8E3E55DE833EEDB5DC24896F45C3C4729AB0D22E73C4E77C0
A960F549299AE6890A60B4692B34CCA0B291BC69CA6832C080D8CDC4C38948E1
9F986DD1212E5C266B298844D0179EB168AFF405DAF938E1CD4C214E5F043800
08CD82E7D5B790A8A0319A99C72A86D6489C7B8D3ACDA3CE8D61F039A7D85F74
22A915D8C5B1F338E0049668306AE417A41F25C87A25051D6CA863C68CB9F9E6
9BCD29E1F8832B85A87C4DD988D0332885A4EC040111F9C423E582211B5438D4
7806BC8C0BF3DD96A73E878D7D802C4EC161C544D04694E076DE9AA022B63358
5609176DAFAE949C6E754CC9E0A04183D6AD5BA779A8023791CB2C159BFAC33C
1AA389085555081AC4BCD6C2E111122DD1AC8B1B0B191D3BC6C3B8D65F6EED56
01E6D29DE137C612C4ECE5AC4E983061C68C19FAD811471C218564087723D30E
1B611113D59E014BC688CD76BB08D3FAB8BE08961282FF88007AAAD35115EA09
B6532754F81FB9C8F79BCD03FC85493034BD90E9E36CF5163DDE53C6162119F1
4DABBA4ED52F01EB88738678B5FC8A3B044006157D9C14E3755D64ECFA314B13
EC3F6EEBF2E8D34F3FFDF7BFFFBD7E202604E304451DFA166820C8BD4BB93772
132EA7AEF1804B81C1184471077BFDA0A9C37975308030234A8513CA8B13B262
C3A4D0C991765E1CDEAAF3C58BEBB6DA54FFF11FFF1133FDF163A5EC9BF13BAD
CC0DE99653385E3DB9AF0CD9655EB0157AB0F615AD85C910197D8D81FBE69B6F
D2D13C6AB2D215B5AF858C63C88CD6B0C1F9F3E75F7CF1C58D5C696DB7A49171
DA11A0CE2677233B7AEB12BDD3CC378B26EBB2FE098E9622B129A71A49289883
C19DC46CB2C4EC6F648563AE5897123ED779658E64649561924DD16C9FC1164F
9C7CB65F33B4C98A530A7015820A63729BB95B97E7A7991966BC3A522EB24E22
55A7FF8A31A4DBD6A1A05B19E2AB7F91B931776B90A7230F4ECB9B1BB927F7D9
A05E0ABB0934363B0C80003A0FAFBA464AC65C91BD9F9AA82F8CA629543858F1
1397E78DA64F9F7EDB6DB76954126AEBD7AFD7B734121AC96984DA613A123D15
4D295A01A64BBDBF357DE7E5F83CB4064C572353AA92A421ABAD01C8E899366D
5AD7FBD813758937118846A88E88A7D102C570D056A0CBFFE11796D665975D36
6BD62CAF172263D8B0610F3CF08049F288B4687B498FD2FD1B25844C71C62865
EFA715A08FF26376DF7D77598B7A3532ACD8DA7A0494C5BA9531265CC8E8666E
AEA9BB413A0F08420396B869169D2DFAF5BEF597CDDE94B1C48D4085E38610CD
D0D18537D51C7216AA1440FDFE27BB2C2FF3E38F3FC6B42D01EEBCFA5A8EE1C3
87DF7FFFFD5A3857C1599F69B3E903871F7EF892254B881638F4E793F55DE857
880AD4CCEB4D638F20401BD879FC92A5040F6122827AEBA7D58EA68C959A0032
70899CF2970E9012753E92D21AB25A3A35D75F7FBD067CF5D557CF9E3D1B42BD
6FBEF9863DA9DDB5E79E7BAE5EBDBAE485C4CB9186284C639F4163CB4B760F21
B7780C1D734243B8B6D0B298D966057FFEF39FEB119200B088837403C41A0390
584535D5222907934818F5E57667BA894CE43973E6B8E48F59B5788C6E151A05
5F05463C0D7BC182059A5EC004BA090DA775CF3BEFBC138B070D675ACA46EEB5
858E3CEAA8A364087EFAE9A78CCDE448680DFB4B8C996DEC182117C396BEA72F
3B86057A5ABFD4D4E15460C1B3F18CC3C24B3465214F2C29E01286867F9B057D
18A1665EDC85DD6E951109152C16B8F4D6EFBCF3CE55575D3575EA54EC272FBD
D95A2A2DD346A6B2E3A38423F4AA928C94BD3A45943ABC7272C0B0BA6C0884E0
6455CDEE9642A331CC93AAD01C8A1FEF0791613C7DD7CFCBC47BE2892700DFF3
447AE51A869772479DE88E37721752204EA593D917DA32328320B719CF267922
233AD4A92F576B90AB009B5EC37DDDCA1C966C7437E98C0CB725F8A55E591F36
8E86D45AEAE7C573192D30B156811B4F855620BB1CBD9614BC5B6F59BD97B4A3
2C1882D51676268DD37DB6DF7EFBCF3EFBCC5EDAF4E2C25CC39EEBCB54D571B6
F1339804098579F3E6F15733D96E2E0FD8928245375C40FF95B297D03756DFE0
58E77DE372F7773CA86D5670A79D76D21C9AA0B4F476D66724837410162E5C68
7DA3AF83221C356AD4830F3E88EF185B48D1C284D3CDF8790AB6327B58EBA817
213BC3D81A459131C7DC5177DE9448584D799EBD1F7BC3AD769AFB030F3C70CD
9A350487622F3F936FDB2A251B1D2BFDB84C414A77DB9A72C1566E554B0C2315
607B0A1608EA323044B93107A9BD591E2A243A918EB846A61D76113929CA66C8
D4387C9A7269006164C007C8F766E8A216C7EFE672FBEEBB2FCDC750632E148C
AD21B186D197AE8372821668313A4F2ACDB06777204D05A5B98E1B4D9D1DEC34
B8CC511FCD98639629B094B07051013B266A33C2A686ADD8C30E3B6CE5CA95AC
29F6251F70D4C1B162BEEEDC3FBFE13346C979BD3C9F56C0040990F0B19D5AC9
7A8B5DABFDDFD8FE08A27BA2F78D4C7C0644A3D15F4160C5CCBB794523CD4DA3
BD011306C8C489132549A17F72C939E7199BC54625FDB167CC9871E59557D2CA
E6FF6BEDDC42AD2ADF35FE8DE9BADEB7FF4032D3CC12D3A2881204A573D909CA
2EA428CBECE0A9D42CB5B3655A794ACB434907324AA3A40483AC4CA2ACE8402A
694A7482A88B7DB1F7CD66B7D6DC0FE3F7FF1EDE35E61CA3BDCC7121CBB5C61C
F31BDFE13D3EEFF3DA1E8C502F0265030DA5D65D45E8F6EA6280A8D53AE78140
287842DED4CD009CBB020AC186B3F870BB18769B830A0E953015583CE08AFB72
7BF0E6BA67D68548D75FB9F53A7B28E5CE36246B0D59342F66AB3FBB6CA5CE95
BA20D2E114F634C7B15D2D677A0A130FB183515DAD925B47325137540A858F82
FEAC797D8DCB43B5B3D9ECE7C59EF6BDB9F349E78599685FE16F39C66D034507
319E589EE35A67C706ECD03B265FF7FC1830F4CFCB972FD789EBCB6C532EE532
7C4CDB4002B1B3EB4B8575E1D81A2E5DAF98C9D6A69A3265CAABAFBEEAA2BE98
58F590082973163008A2FD87F7D6CEACC875E3A974AE74E2A652B49AFA039853
095F88F89D54EE76325928787E392834A792BF280382F083FB9A788F71BEB819
69C054A06B4D89E3D9B00233D3A79F166B6FF4047D565E87350DFC0D44B39C4C
65B7C74C7C91292DEDA0DB9A44F546F898E991F1709C9F8AEBD5CED4EE38A08C
B0151A0EC6EE70B14019AF9101204050C3E015B0B1643202270273A727C03ECB
E41C77DC71F2D479B57FFDEB5FE3C78FDFBB772FA6400C6358AD7AD5989CC8E6
E6E6EE84BBB46A7FFEF9A7BDF6D4BFF958EAEF0D1B32E59DCC220E58013BEECA
14B403469F8D88116AA483CB66E48CBFFBEEBBC65978F798E58A70931658B359
41EAC771BBD1446F635BB4815E684790CF362F52A360D550B500EE70E07A3BE3
AB8BD08583BD357CF870B917CC9816D58D6822C9003B8C79338B16F2A841016B
CF69E12B942EDE01D4A4EA8D2476651A7FF4D147847180CF50E816E1825DEB5C
A99502FCAC6DAD0F9206AE9B1F066FBA440B29B64D4F6837D40E5C9E3097112D
DCB76F1FFC8EFFFCC274A0F5505F6E45C79F2015E168F9FE66858AAD1039CEEA
EED7EBC319CB5BB3F38999EB4B251FE3164AFD332C29B45BA84B19D8DFED09DD
67918FB0DCD05972D1A245A0A8B0EA52683C4ACD9BE3077EFD58C7F2CFAF0605
6C5F5973A59981483526CF8AD06B56FF1D3C78B044AA0CF4A54B97222210FAF8
527D81AFAA791D2924259415E5989D69FC51660C850DA6069D8476370C9854F4
ECD9B3B76EDD4AB29348F8EAD5ABF5100D75C18205765750E704BAB0B0539672
E657276A4AF50791B9C813EEADEB1577E2806EF3104291B8758A90B773E923D1
0223C830DD6231454501734EB108E5FBEA65E1A6A054442F822626E2455A34AE
A06900DC9528F246547678857F3B825E1DD68A65CAB86A1A83EE3CFDF4D3F7EC
D9E3FA257D4A4FA364C3BD288C87E5AD3D9346CC7953E9EBA64E9DBA64C91283
0FFEA3BCB4162860B008166B6C39643E5A9613E75010EEB8BDF30113023862E0
8A11642B8615F10A491C52BF24215A654344662AB273B93119216B3C24831450
42DA2EA4703057DD610A43E9185AE8281B304DCC6F434E77506E156E91EAC3CC
5F91A77A17A86D883FF059A7CF89D622E6468E1C79F0E0415797A65C875794ED
4738210D21F798C3A38DB6664C82006DEA9390CA6A39D9B0EC369D25AD14B029
22F316949D75AE76A43053084B3484CAC149AE58B1E2965B6EE178C75E22D40B
EA8DF4044E14A7CB5DC33400F3BBFEF36BEDDAB5B366CD22F8433492C080E15D
C46CF136F011BB3EC7A160BDBB7CB5EDDBB76B32617CAD9B87482142428E9B35
1B101F32277AA64486812A2077E89127B3A9CE10712EC371FE9413F6688B1490
CF7115402D1C7FFCF1201E3CC898CE380AAC40DD5571A93BA13AB1EF166366FC
DC69B52A29317FFEFC279E78429B47338363E1F621CC00B05E824C75B9D2566E
7B87C90BAD1B68233487C37B8E9D428A6086EAF82F536AFA65C3656CBEF48416
5BA81613EFF484A68D8E36A54CA2994245D9E4C9933FF8E0038D818A20E09FB0
0D027903026636D3566EA860A253DBD31596C3CE32B6D4BFB342CA38830A9228
959A8F2431B7990F270577DC915E3FCDA525187F3DB971964B364CB38FB9FC57
D9728DD3A1D9BEE4924B5E7BED35FE2AAF86865176B5B1960C8687454A4F063F
C8A290504819DD9DB2F11A0D59433E0100A68CEA258845EE03CBD55C5D95B58E
EF6EE96726937FD3720DE82059011765ED8DCE404CEB0293035A9C42E8C6F104
D72FB1BAA80A1B71EC211C8BA79E7A4AC78C35704023BE5B730E78A0D7A851A3
5C3E21B574F1C517CB926D4035CF983163DBB66DB043D8BC284289CE983163C8
654AEE6FDEBC197F11117CCE39E77CF6D96704DB89C94316E62E7EE63E95E5B5
65CB16B4949E2C254D4FE9CE0B9C082132D9DAF20FDCEFCFD97E2C2F077F1CB4
944AD66D2E9EEB5AE7AADB56AE5C298B9E09E71D1B22108C07A206149E356B0A
995486610FDBBBBC3730BC1F93F565185ACDDB6FBFFDE9A79F7668D790511225
F49FC070EE7AC52ECE7E7283A156E45EBC29777DE0F704483406397345595FC7
A1C0248D82DB2989AECF8F653CA93F2B562A252FDC0E787248FCBEB2D58A31A2
D1D530CE390557E098CC7FA73F1AD37E76EF52AE2F92E7A761D09AC2AF362877
C841D79A5707121BC79C7C7FBB9E998E44385BB49D696B25D0E07849814B2B65
316AC2A34E6302FC878D21777F49D9B773E60F1F48F7CB8CF8E8A38FBEFEFA6B
1D0D68CC1DE5B6B717213F1AA16E73520610066E4F6C99A51DF55FE5C51BB532
2F7A2A3D1FA38B1D6667BF756EA1BE1A62AF56E87DA429D290E8B02E51036788
53DD2988E84EAC3B17D2C0D1EC14325671C57D3F3C309ABAE5CB9783F6D06B2E
5AB448BA0DBBE7C1071FD4FE99366D9A5BDD500E0008A6F3ECB854D5AF1CCB96
D8693D65233519ACFF5D5EB27588792030792F67DC5C9840FAAF9D3941B5B5F6
EDDB377BF6ECD5AB576BB494B7D13FED6842D038F57AA8661F2C06E388DD0E62
1B5AD756BB152B0B49EE87A23A988DA9F576145713B170E1C255AB56492BFFFE
FBEF644C5DF57114F5AC0DEF65A6154D3769F3BEFA767238FDBD81DF9C4414E8
71B8499D8D37C79B01EB29F448800068E2C4897BF6ECD10C7CFFFDF7EDCCC5C3
CD804A38BACDA151DBE3B2608C034FA560D5A36055D557C8A2778DBCA1613CDC
0434953A57DDF0E38F3F6A73EB66A9285AA390F26998D2143AD873B4103118EF
60585C27432A0B9DD12A7B47C2517CACD6971F62D63366CDC182EABD4C18DBF5
3916401C4EA2020DF5EB0409AC5D680A426CD0F04B0E307878F7AEB11522D3B0
CEEA4A0134C45E35384E274866048CFC88DD9933676ED8B021954953FD5E0245
CAC6D0048310DDB7878336D07AE5E6F9B753E5A4B5B5A65157E4FE5908078D8A
DCB70DD7CD6CC6E8BCE9D3A7AF5FBFBEC2740D8F669D2D65B34F2702BC058745
F3FFCE3BEF5C78E1852954A83333380FB87726AA34813CE24EB34A743486F7AC
7D31C1115F16083A17A46907E54EEF0837E78029E0C13CE5A5E88E470D9E81E8
4465264C98B073E74EA7787DD0C09D6002C634478302EE14AD0EEC239F2BF539
0E7DC753167301D1F8F6D7B9DF622AB53832C7E958D6C8141626974E9907576F
AAD774640EB0ADC626B7E7E5975FE67D51759A10CDD5B871E3E468496D99B739
BABCA9A33C922BB6FE4DD9C04AB9CBA4FB75CA1C91A88F6DACB8C7670AD801F8
2763FB8F46C0217D7076919BEC1E30EBA8162924BA1E464A23D6D5D9ECF3CF3F
7FD7AE5D72D7EEBFFF7E42F68608612D6AB84CA8D4C0175F7C6180437CE03111
1024333C3002C2ADC6A608EE45954AEBD2E06A541A1154DDE6FE2AF6D7D93AED
DC754BEB41798911ED5839FA3D9C3844C5BD665DC74371173170647D4F6EFECA
C16BE5CE272967748A928484D814E71F3FB56B9D2B0B27097EEBADB77ACB5255
59373FB11F30F59A8EC050668D393966CC9803070ED02CB30845C311DDF0CF2F
79F9E6EA428E6B5484D15C24DD17DAACD69D8B254B96AC5CB9525B45DB559FD5
1AB9AAAD6E1EC0F11E3A74E8871F7ED0EAE883575C71C573CF3D479A43671B25
11A7A828DBD322DC2FBEF8E28F3FFEB8AE8F753BB78571C759EF584863107050
F9B057C920DC78E38DCF3FFFFCA9A79E8A768FDE864DC374AC41589DA1CE22B7
CF72655705F6D1EAE8974A0C1F0B929BB50F69009A3246A45D76E79430F9F2CB
2FBB8E8762FA1D3B765C7EF9E5D89DFAF6A54B97CE9831836DCF59C348354B41
C5B575332B031D1CB9890C275E145767A5C05743CCDFF38F9F4D5044CFD4A8B4
793EFFFC73DD49F80AEBD0694B8A458BDC76E2E4934F96A7E5C21BCEA0F507DC
C5ADDCD63AF24C75AE4BEAE6019B9BDD81134933EC033C31B32CA4EC0EC6754C
D9858338851D5E945D4735D4134F3CF1BBEFBE03DC4AAD26E91E52FBEE20CE9F
1CC5A14C142E0EDE88D264FD498EB2E6E1DE7BEFB5FBEB748C212F955393FAC7
4EDAB9BD15C2133A7157005A8A32306C0EFA8A6287A56C165011F7F3CF3F1B72
3876ECD86FBFFD76C00A3832B9C4F3637627C7FA639F0DF31C0DCA9D9ED86418
0E36E210D69C4610CE367CB46040E18D723CBAA6020D02C27C40768FBA9A81F1
00E3D50D1B364C8764DBB66D506F92D5200D0C5C931F3403A3478F96145EBC78
F1B265CB347EBEC8A51D94F710D32E72771A13DF3487D470052EBBEC329929FA
EF1F7FFC8105903220B955D271D3A3501B1D64602B1001C632B076479D6B2AE3
3F44EDF4271D39475D1AC6A355D319983A75AACF3CFCBACE7815256DB80E8F5D
84541A43BA4167E91802A191C89C0AE072F3E7CF7FE699674C8F90729C001AE1
BA79A6888BF0A08F169E7DC33EB104E41DA1D27430B3E8D67CDE6521D291B2D9
1B147C91B9969C69864A5082A6C2CB4F3C0DA1A33D408F6AA498AB2C225C030E
D76335FF29C7725336015316201C01A8F7503C985F11B6E33532A41F000EBF81
0FBCC281EA17A91B0F6E19C45E8ED31A94E0B81D562C707D0727624BB794137B
44C52C0F8D77313027E5E8B78E95CC2343BD52968D988328600EA0FB23B18B0C
F14DA11B4AD4FDBA8DD229DD29D3E4C89123A4C9FBCA5E46B86BBAA4AA651416
E18A20ACE6485BCA217A8BF1E9D3A76FDDBA959433BA0DF7B7C8D49E0EED1243
2208442CC12970BD8E9EE91614069DE0EFA51CBCB111E31D8BCEE6E46A4A51B1
6621654E00219BD0A3C84C1AF8182C41AC1CB30266DA2B4E30AF699B4CDF4BFD
5E2AAD1C597EB26B91FC9666AB56AD9A33674E0A75A15AA0A30941637BF29E46
0AD8D8A97453E9CBED0A9814E0A6AEB288B42F76CE7C96D8D09178C1CD1898DF
9ED034ED1F5E11A7D7CAAD4953A3828F98E448ECE7F6F214B9BB5AD41693D1EA
D8BC1649600DA27D332893EC63F439FBD2755DFCBD318F2E351303FECCAD590E
A06D33939197A9B3CE5577F25793D4639636CC0F9170C3C263C775DED7670F60
146E4D1128668E6D8A410FD7EBB8148A680DDE953B70987FBFB9814F4FEEAA66
9AC06681E5673A53907208E1975F7E31B1178788BC438527A1D9F04A99BA4ECF
94D63CE38C33DE7CF34D942B85A47047803B436CF12F2BCB8A1852C70F43860C
B9FEFAEB1F7FFCF16335FFA99B027641AD9370D75D77DDEBAFBFEE6899BD13F6
302387F908938E34B69D397332BBB4AFEB78384DE82436339A4FDFA2EDFAEBAF
BFDA4074BDD635D75CF3F6DB6F43FD615AC094F1D2AC9A4B0A2379962B85FCED
8E344088812D6E67866305F682D22628AF25BE653212B3010279D34D376DDEBC
593BC79100E9667222FAAF1CFAFBEEBB8F04D3EAD5ABE7CD9B077F4314B97565
487539FB54DA402E1980C77ECB962D93264DD20D326D35000A8E6358DBCC1ECE
60021264DDD102786BE79D77DEA79F7E0A00C5AD9AD9AB5E6E3D07918504763D
2A78585880B48238E5469678BDF09E913348605C26F64C0CC5A75C8E8C18D45C
51D19082C503684EAEC255575DB57DFB767D979B1D01C161F0B8196EE021B1FC
F2CB2FB3AC030661F5766B147FFFFDF7BFF8E28BDAA9AECA30DA3385780BB621
73C1288DCD614B69856EB8E186F5EBD7337AF8D94D22815B40B6D5A9B8BA030F
71746C269AFABBEC8683794B19F280B289DBC8790E360A9B98CD1DEBA1915FBD
B993522B7388BB64194F94FEE44EF9207F5380E347E82CB33D62C488F1E3C76F
DAB4A96E69909B0E71B432F9B88B6E53690936E73879888194000899049FC008
E36A65F6763D907660B6136562CBC7FA2B77A2F612D429005745A3DA31866414
6B53B92899D0A8714F989F1CC266CAC9221701F3226EAD41FA93B3576105F267
39E1BD65138EE69C37A6D5DCB97357AE5C09A2BB4E912F5EBCB8EB79B9F3CE3B
376EDCC83070CEF44B3D50B6D4D0A1432191F0C6D00F7071531FD9CA6D64343F
FA6A4E9FA11880ED712839C2B6209B895FA2C1C4368EAD8E117045C9A0028209
1F117BAB194196B2071F697F5AB97D083754FA8B23106978673805906917E2F7
E65E580DA5EADEBA0C95D9A068C7C180D8B61DCA71E2313EE01EAA6B0D8CA8E8
0B6DA95A815CB395D9874C3CC2DBE90401A38D76AD13D511508D1037BB9633DF
294387EC0B01ED24644A1A95F7D51B11FF4C038F20DA24B292D6099D3061C295
575EA9AD6B4E0CF7C1ADC0562AF674844131726D27A864F5FBB3CE3AEBC08103
349A23205164AA13D60B57102306EA4DBDA98D398FC1DD4BF54CE69916E6DA24
FAAC9E0C6A1A46A318A9AD981171BA383B46EFA3C2C81B0ECA8D5691C0A9749F
F82B2979FD69DAB46932EC162E5C78341E70CA91B4D8080CBEE954065860948D
202C43B1DCC8413FEB85E14BC34E4776C8BAC46C21D872EBADB7CA06A76F65E5
2CFD2DC34E0A3C946C65CC2EC341539927D3629026816B894395CA108A130086
5E47A6116F416623F6CBA4D84B93134539CA0648854B9E64963EF4D043B473E1
6C238990BF29E7B9914D24DD1BD62565154E122565A0B28F8A06A051FD6DDB47
6B7108E718837E89FD010A26E5349839174F39E59443870E996AC07CB9AE754E
D9A2EC0C81B23B6DE520B03099354B92B0123A985CA05E7590CC004C4B697D6F
4317A9229325A5EC8F46A26073931112A726CAA38AB4440D4428FCA0D7D4F46A
8925282FBDF45299925DEF3FE9A493EACE8B5E9650391B2696F3B702A956EC83
E6D44F94D4564B941EE999880307ABB5A088E3E67A7A37FDC442D526A41B12A2
B0B39E5B86029A581F94943972E44803652CC5F4C8323C2117C6D4F51767CFE8
370F3CF0C00B2FBCA08D217367E6CC997EA646488D4D03BBADE3DE31FFE76D8F
FEB6DB104B86B439ED4B10D2700D127BBE0EBE44C4CE7D148C47ABD4E7A4FEA4
5A5E027E636F0CA046CA7021EB7216DD122FE5DE035A086D0046A87B64CA7FF2
C92750A8A6815C8E54936533FFE2FF9497EDC8D8C0C071DD0AFE2E85C4301BC9
01515023D44043A118C1ED1E33C3D0CC13B733CB552A2D00EC42C768BDD01C16
3D13930E8392D9731829F2ADA6C093D8CE5CDF31066601C20169057278DBBBFA
F9DC73CFFDEAABAFE0D0D62F5D6672340B8038ABD80B29D3D018908D1E428C22
5E5DE4106B618D9D33B8CE6D29A500A0724DA1C24C0BF3D34F3F8103AC23B51F
366C18C56194665B0B56F2ED5CB1081273CC39330B5C6710A11A26CFEFC4AD74
1BDE8903C89196CFC1766B474E081B486B79F3CD374B9478F7AC59B3E6EEBBEF
76BACED16CF81A1BD605393B28B7A84A39138FD98525D4DC0BCF9591AEC6EE8A
832D02518313FCB6F4AD45348DA9048FC469EF0A028AEE94DB1FC550BC84ECC3
0F3FCCA94023023234EED103EBFA5EED506B6FAF02961C6F54CA044F3BED340D
C9F5CA9051BB2EB04E014F9F3EFDFDF7DF3F7CF830FF8D8091BAF1743D2F29D0
D75057C67AE17EC97A2380E1639FB283EE167E681DD210CE79CBBC03A04B4082
8D1449361AE68D9D8C7BA161687EF6EDDB6782CFA2ACF6A6ED8A1682EC63CC83
A6ACABBA3EFFF2CB2FDFBF7F3F0ADBD36BE4C75F1DFDC56985994ACBD2A5A2FA
AB7EA65A9730899663DDBA7511E2D0B981C976A183F5D537DD74D3B3CF3E4B4C
15702F0CA3C822E2E42851A6DAD28FD966EBEA2374EB228963598C33AA4B8B18
F3DF9E76ABED8AF67540D841026B0B27568D5B76ACAB2FF3585588D528767084
E028523CB1E72C0E15CC45A9342591574C4B8C9FD95EB7CDD10A7D2CFC0392C4
0C049E6157FBA4A0B309152C5FBEFC9E7BEE615DC84A385386E6FB2B774E4C21
109B424623E506A39DA5FC9CDF2294F6B533556A3B947A9BD3C289062F712BB0
D499BFD326B516EB681430F1D2F8AD64DD89F21358377C3C7ED645383DB9B9B1
7E29DDB376ED5AD762022A93F8B35267D61C2EA6400258816DF9CE6BCA9429BB
77EF8644A69DBB1DE8F9F0A8E997C3870FD75F91E67AB85E8A2E1F28C5ABAFBE
7AFBF6EDCE1960F6B21206472064595D5BC1A9749D639D25C86A0E0337B300B1
9E8ADDA61592612141A3FBC9FFB1CFF0D89A51A9BA01962B19595827FAF80927
9C2005431E5D371072A0ECA14E31B40249B57E78F4D147B53A7A4D16DA704D14
ADA3E5F813B001574A1DBCFF5A813FA8B30C26E574A0790C8A5C77A82F92C9A5
D5D1F8357573E7CE956C95F8E06C8350653C6655EB7A21DFF5404873B0088934
DAF9D65FC9CB82648931DB945B8D767D3809276D037D8596CF189C3ADA6D6309
2BE705A64FE87E34C8BBEEBAEBC9279F7410323AB818558EA8F3AF0BE12485A5
ADA9C877C23BE5FA51D780920234B0B34EE69A467850D9515BA6675C59C3A7CD
69A57FCF3CF3CCBD7BF79AB0B64E016BC6346F950A3D045FD7FEE2AE4F25114B
4F56324D041B8934920B6C00C7E9C5B59710F486C9F0A779F3E63DF5D453AC88
843B485A3DCAECF7CEA6E3EF02FF7121626FEE4063748F370FD8FB8A4758E4E6
19C4F3225974917B82E15CBAB14A0CD75B8BF358C7BAE36DB18B435CE8A350C0
91C02495AACBB4F9D69778A2EE5DEF197025525F68ED97FAC7A511B6C810F61B
2F68DE02AB43E40F2C1C4CD43BEFBC237B8E8A640D29462688B96A3CDA36FAB7
E237A6006966ED4098B67343B64A3EDBAEBF2D6C1FBA8A83E7CA2B9F11AF85EF
1F7008DA5D5D094B226E7A42EF656005AE0AE0006382F192BC1E0A86D7731315
6A16B1864843EABF0E4C4D9C38F1C30F3F7CE081071E79E411279FBA8ED38409
7AA68145BD99A239327F9AE5840D4A3218485B5C21000E7AC76BAFBDF6BDF7DE
D393C1BC013A9F3C79F2962D5BF459CC0B6A005A99DCD5314C3F10330D139253
0DE48FB8BA3D1BD70BB94ABDD222226EDCFF2D3BC0C37EE5789D8B117B42AF75
0AFFEBD6977122DFF51C3373A59CF2A72423851ADF56E00B4407EB87A143874A
FD7B715D6E514704E1487ECCC77300FE4D19530A14FCDD08C7734FADD491648A
EF85056604A934C415575CA18D64E1552106894BA6A1EA75468C18B173E7CEBA
E7FBEC55F84FBADE1F73B1F1BCA49CF5B4BDE24E00C3860D3B78F0A05F10D7BC
1588FB53695C8F1C39F2D24B2F95DA90F27EFAE9A75D74EE860A29E3AE416F80
3F6F687F99021195B18A985CB1E18C0165986229E3A1FED670E487CAF2B914B5
D25F3CA69FC9867288A0D430391D5FDA10FA765D90714973E6CC59B56A9531FF
0693524F4F80C47E4F2A11B991D0D42DC6BDBED61C9E3D138944ADE9F3DB972F
CF00DA0BB38FF54299619D58E37AFBE19038391AA11B2C16B3CAF8490F0D9468
C54F7324A0955930EDB83B4B924237ADB89DE221B51648591ACBAEA2A0167488
89FC2254DB11B8DE40DB4E1931360AD6AD8E3C9CBBBA7FF1E2C572278C21EFAC
F725B5E11C1CD156E6B92FB091636522E250C03C048BB01538355BA1C521707A
37022F42EFA20183B07C00F88D7D533B3A9E324B58235C6C7F5198B860C182CD
9B37736E0D538ABDA353CE84F17A1CBF58B153377EA37B580948AA3518AAFB51
30E848265162DD35D4A8314711992C464E32C667C0063B5138147934339D02E7
ECC9C7A51D299969C2F8B366CD7AE18517887952064D12D41169164C5B473A80
2AA3AE07435F0197A1F52E821B05EF448566523FD45127C688909E3375EAD4B7
DE7A4B3753C95EF1FF8815C7D03A613A7D9DBE65F4E8D1DF7DF79DE6103CA715
6D572A44CF157A05E910DDF422F0E9981457DF3E78F0E0FF2CAFD468D1735C51
E4F40289E40F18102C22CC44AC20B3C1B6D464EAA5EACAA262999383516E8351
F791CEF3A209F9F1C71F35546DBFCB2EBBECA5975E62E74BBE9F75D659BB77EF
A636C9A4C729937A72B65D74A0DD2EEB870D801E623038CAA98CACF0F339E79C
73FEF9E73FF4D0430D83749435950905C3DAF5A5D49A3B74AF85405439C8D95C
D6A2E5D3B0A9A84ED9AA88A9D9AEFDC5CD97E93C025F019A5DEF4BFC00B9D4F5
7B630E1E3B5EDB524B0FF29F6F31DD87C676F7DD776FD8B0810A34A7DE8BCC2E
E778FBA4499376EDDAF5D8638FDD77DF7D710EBD2D23F563F4747B735B8222F4
A88FE7C2997817769A91308622F01A1DC7AA44B32391706A4C0DD45DF6E4CC18
13FF6A918838D5BFBFFDF65B7C7DBFAFF795535D18762EBE003896FA934247F5
66482041A3549A44FA08140E3A35D3A64D7BF2C927392CDA8D38BECE919153B0
2E378031F62D365990316E46E617B9E99F85957CF1C3870F33C37D99613B22F9
236CC256EC8015309EA59E256520DF9F87F68416D3D1E444915061E263E34C0F
659700FFE456EED8B1835D65460BCEA7CCCF9EDC30DCACE558D6DE949D97B720
A02AF499FB01EB4B6FBEF9E6575E7965C89021DF7EFB2DB9641BDD48286A9CBC
571CB8C78D20D9A60FD27DDD9E8A6D25FDAB2591304533699CBAF9820B2E90F7
AC07D2F553C2451B943A076053F2A4DF7FFF7DBB2929473C9CF5AC43751ACACB
7F2BEDD8345ABD9484A33CFB534E39E5CB2FBF345EB172B916455F8A4559941C
40E79D779EDEC57DE099CF76E8888CD647E4310C6D657D8BE92711646E656AA1
80FBC58E1C3B76EC37DF7C136BCD69B24B737B770836905E9F9D3B77EEB265CB
74837EAFADD200C24A1D043729781E1530519C5867161ACAAE68348405662DD2
000026C0D3795E18897D0BCD210E996EA3EB8B9B49B7731F24A2057D99065C9F
B5C780773B7FFEFC75EBD6C9E83124D01E30C1864A8BE5AEFBCA13656C9D29B4
22782D65E4E3C2850B1F7FFC71E9B9FDFBF73778D851CD70EE30239CA0A9F417
D7A3F427C8D5794DB742D1F620F3A7FB9F78E289071F7CD065A09D970C1D9D68
D867490C7164C0AC603FE1CAB3D3162D5AB466CD1ADB9131178019E74463E7E9
EB3AAB516B1AA568411F33533C4A52827E4A1C19944DEA0FF3D173C08757BA20
1059D50FD4C2A6ACAADBF5BC0275173ADB4C0FBC0502966A6CA4478C0D18EF1D
9D48EB8B4E4F74D4A851870E1D8A54AF6C80D4DF8CE3ED20F1B6631D41AF44A7
EDF4EB82019E488091F67E0B8EDE45175D247B4E2ADC2462C0745269B3C648B8
278165A25E9FC839C724054A4B0CB5C80BE9CCC28073C01C30D9179B366D32F8
C8693C4B049CBCA54B97EA7DA475607EB036C2E535D144443CE241F2F2F6EB99
2323AAD8850D45C0315CE6890063AC6570E7C894634D8E343241B7DC72CB1B6F
BC61FE9422906E531066F2397BEA92953A24F2F974DBB061C3E42A698A366EDC
48FA96650354AC4799A0D5C5FEB7DF7EFB8A152B6232BF08A5E22953B13484D4
98100C05C4A5B5A3F19929672B8B46B4B05B4FDB072557C7B7231C7B3369250B
EAA494F7340DFE98671F33673E3ADBE1694E6EBBED36A98A2253D3718CAD1E08
4A3BF889BBA37FEFB8E38EF5EBD793566F063D21A0D97ED84C4E68F95B28A771
10CFAF5CE4DEA55D9F8F67008369CA4ECFDF86403BCF4B0A69113205CE91A76C
05C64699804EA9307193732EE296368088D9F4E54664A8345BE875E7C89ACFFB
4A7B5BF23185D217A76F23F9A2A37345E016EEBC6282D38A87DC794FB7FEE258
36907CB143243177EEDC19E9E22168D35A3418645075A60CAEC47B060862382B
E56DB292A5DA2BE540CE2C125460727427B5AD9A2299AADEF3910ACAFB275A1E
0088527F8868911BC7B139C78D1B77B8BCE20124809732CDB8FE7BF6D9674BEB
5060CADCB673C195035404186271D4FFFF42DDA28A6CB3FA4D234A5F53A7B995
18E4ACB962CAF2A1C290D5CACC6292BD205207E5BE6186FDA61CC967E3B53399
81F17A29070B757C2878A1A25D52970C3D7BC3B5218E70A4AC778841FA50631E
15B9F95E3B13CFA5AC8FB9B39509737A427F2A8FD9EB1E13A0BCEFFF015AB03D
44233550ED0000000049454E44AE426082}
Transparent = True
end
object Label1: TLabel
Left = 104
Top = 83
Width = 195
Height = 18
Caption = 'Loading game...'
Font.Charset = ANSI_CHARSET
Font.Color = clAqua
Font.Height = -16
Font.Name = 'Arial Rounded MT Bold'
Font.Style = []
ParentFont = False
end
object Label2: TLabel
Left = 56
Top = 21
Width = 313
Height = 64
Caption = 'SpaceMission'
Font.Charset = ANSI_CHARSET
Font.Color = clLime
Font.Height = -48
Font.Name = 'Arial Unicode MS'
Font.Style = [fsBold]
ParentFont = False
end
end
/ENU/GamSplash.dfn
0,0 → 1,260
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\GamSplash.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\GamSplash.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4429398148</prop>
<prop prop-type="OrigDateTime">45408.4422453704</prop>
<prop prop-type="XlatDateTime">45407.694375</prop>
<prop prop-type="Translated">43</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:SplashForm.Left" resname="O:SplashForm.Left">
<source>241</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">1</prop><prop prop-type="Order">0</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Top" resname="O:SplashForm.Top">
<source>158</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">1</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.BorderIcons" resname="O:SplashForm.BorderIcons">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.BorderStyle" resname="O:SplashForm.BorderStyle">
<source>bsNone</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">3</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Caption" resname="O:SplashForm.Caption">
<source>'Bitte warten...'</source>
<target>'"Please wait..."'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">1</prop><prop prop-type="Order">4</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.ClientHeight" resname="O:SplashForm.ClientHeight">
<source>480</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>497</source>
<target>497</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45408.3372372454</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:SplashForm.ClientWidth" resname="O:SplashForm.ClientWidth">
<source>640</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>658</source>
<target>658</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45408.3372424653</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:SplashForm.Color" resname="O:SplashForm.Color">
<source>clBlack</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Charset" resname="O:SplashForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Color" resname="O:SplashForm.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Height" resname="O:SplashForm.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Name" resname="O:SplashForm.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Style" resname="O:SplashForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Position" resname="O:SplashForm.Position">
<source>poScreenCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.TextHeight" resname="O:SplashForm.TextHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Left" resname="O:SplashForm.O:SplashImage.Left">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>8</source>
<target>8</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45408.3372424653</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Top" resname="O:SplashForm.O:SplashImage.Top">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>8</source>
<target>8</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45408.3372424653</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Width" resname="O:SplashForm.O:SplashImage.Width">
<source>640</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Height" resname="O:SplashForm.O:SplashImage.Height">
<source>480</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.AutoSize" resname="O:SplashForm.O:SplashImage.AutoSize">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Picture.Data" resname="O:SplashForm.O:SplashImage.Picture.Data">
<source>0954506E67496D61676589504E470D0A1A0A0000000D4948445200000280000001E00802000000BAB34BB30000000970485973000004BB000004BB016E1F0EAE0000000467414D410000B18E7CFB51930000FFFF4944415478DAD4BD79B86D5575A73DF739A4AD4AA51ACB5E5AE945AEA022229644B14220420C8140E8A2A0F4207D4FE8EEA51301810B4A495D90D8017628A2C1520491468242A174A2D15499EA53E94BEEDDDF8FFD3ADF8CB3F6D927A1EAFBBE27B5FE38CF3E7BAF35D79C638E39FA66D45A9B9B9BFBC7FFF81F8FC7E3FFF5BFFED7DFFCCDDFFCECCFFEECEAD5ABE7E7E7F3EFCFFFFCCF3F33B9FEE93FFDA77FFAA77FBAD65A6BFDE4273FC94FDB6FBFFD5D77DD95EF73431EFFEBBFFEEB356BD6FCE22FFEE25FFEE55FE69E7CFF0BBFF00B7FF5577FF5333FF333F9DC665C7963DE95017FEEE77E2E23ACBFFEFADFFBDEF7F27D9EE2D78C9C5FF9F08217BCE0BFFDB7FFC6ACF83573FEF33FFFF34C35BFE6EDBC313F650299C9FFFC9FFF33C332990C92EF734FEE644A1967341AE559BECF6DACE29FFC937FF2677FF6670CCEC27367FE7267AEFCCB07BEC96D7FF1177F91FBF399E5F36BBECF64F27D66952FF337AFCB9D0157DE956F32B7803AAFCEF78B0287F7E6C17CF01540DBB7E4D78C9071D659679D3FFEE33F66B69958D698FBF36FC09BDB02B17C6037014856CA372F7CE10BFFCB7FF92FA79E7AEAFBDFFFFEFFFEDFFF7B06CF46FFD7FFFA5F33AB8C909BFFD13FFA47D9F70C9B7F01547ECABFC02A40661A9B6CB2C91FFEE11F6651CF7BDEF33213A69157E45D792AF301DAB9FED93FFB67997F5ECDF8B9F26B469B8527793023BCF6B5AFBDEFBEFB32FFDC1C6800B78CEF6C337260CE7CB20A379711801EA0CEE73CF53FFEC7FF6021DE36B89EFFFCE7FFC99FFC493E5C71C515871F7E78DDDFCC21180522E5A5997CFE7DC94B5E92856786F9F7577EE557EEBDF75E0E54BE0996FED22FFD12D3E6D94035FFFEF22FFF72EEC9AFF91EBC0D00F37D66951BB2967C030A019F7C00679C646ECB2B382F995BDE921BF26FFEB2EA7CC34AF35456CD39CDF79943DE9EEFF32B90C9BBCE3BEFBC33CE3823CFE60616029204BB7EF0831F0420391AC16A0E5A769F85CF4D2EC09E99671A192D9F39B69088DC09F4F8FBB297BD2C6739DF07E5DEF9CE77DE79E79D193FF764F9E0E47FFC8FFF915767A8DC96BF9955762A930450B9195CCD6879C58B5FFCE23FFAA33F5A7BEDB5F377B3CD367BF4D147395F7930D0C88483C3793063B2F680250F6640A80A8785755D7EF9E5C71D775C1EE4D433CEB265CB3266A09DA7A0002C93C9F06086058CC004F807DA792A7F73C3BFF817FF22B89A9B734FFECD3D5960A09AC1BFF9CD6FE65DF932DF004630369FF376095ABEF9E7FFFC9F6762B92D10086432BDFC9B07F38AFC9BDB58512E889E47C05390BFCC9CBFA053DE18E0641CE8C3BFFC97FF327B0D26640E50A1BF995C994006CF232C8761734FF0014ACB91E75D2C81D30A8DE5ED192D5FFED66FFDD60D37DC208DCAE433C88F7FFCE3FC9B0FF93EA4298BCA66FDE7FFFC9FC1F6809D1371E491475E70C1051913220353C80D2F7AD18BDEF086377CFCE31FCF5A5CB2EFF5B0E7CE830E3AE8031FF840C891F48ABD96B4C2BFF85E26521715F40B263FFDF4D339C2DC9FF94024615B5248E700A8D95F0035CA54B297CC8C79409E18D133CF2BD99E4C8B33900F793CA70882E2A1CD3D99741E07D08B12383726F704F4F9BCF9E69B6731FFE93FFD2788544683A166913FFCE10F7D2A5726C962984F80987F33E76C55C66139A12F59FCA1871EFAE10F7F38BFE63372462696EDCCDFBC9A25C09503C4CC242FCD42B2EA0C9EB7672D3066F6B2E2311FF89C7771C219012C01E1C02D773D8357529B09E7BDB3A4930C9547004EE60F7264B43C9E2583949946702EA81CC2C1538BF2B07C9F71329FBC31EB42C8801ED543557707AA0DC9431282E7E591002484233B05F5C96855326017200AF93253CD411D4C29CB07E6B90154992588E47539EA3BECB0C31D77DC114C6339797B0E6776396FCF5FD01DB4E603878D09B0907CFFD297BE344F65F21924742AA3650E4A33D3EF0DB6645D7984456599AB56AD7AD7BBDE059BC9B31916390319828307C2F3DE7C13F042B28124E211EBCDE0F91736C34BF353FE150F416F4EA580CABF6151795DA08A1000AAE4C140C3A79843BE418E042C9588705B26EF2439CB6166FFE13FFC87DC10592A6BCF97871D76D835D75C130CCFCDD9CDC82521114148E0ECA140C002CF9118722EF2C6C02AD3CB07609579E6FB6C3D141FE865DAD911241E61C52A7243C647628368B0D87C50C2434F8056725A3326948EF3C580E06AA697C920B83032472377667519077C067F32ABC099A3C7E4A5939C62A84DC6C9B09E650842E82FA72027F4473FFAD180F4412D33C8BAEBAEFBE4934F42F406C41A5AE74F7CE014037F6602A0C0B76C4DA601E51CBC51A65BCF5AA69A0D62811CEA4083CDF211C46EF617C80414D9B2DC9957231E05141C074990FC06F8700AFC12C10EB0E459908485C0ECDB448D01A45954EECF3D6C41E6C38B44F5480CA160994FF62ED08E0007936226428343C7E943CEF39864F0D34F3FFDFCF3CFCFF8192DD4D5B74F5345D53F9455D01EE87116F27D5E04F71DC09C412005CF72C0AC16411B792DDF56CD2673CD390CA2E46588DB6866B92049014DEEA9080AD7E1B44F33605101FAC5FE3169B4C9FC4541CC676ECE7CF8373FB1C2681BD088CCBC1E24363B13CB4F9912DFC03C90625497595D6EB8ECB2CB4E3EF9E42C04A2C06D1CB31C8CEF7FFFFBADAB3E88E76DC68518A1BC93CFC8ECB3F8CADF79212EC01E10849906E065E1D963F46364266D0F596F3E87768480224FB0416C4AF611BA005A4038180A8E8594005A0711AB9A78CC31C784D3C34278295B894016FA2523CF97882FFBEEBBEF55575DF5F297BF3C54263084A6A094ECB8E38ED17E98DB2C4081F18808AC9D9943BF32B7B0673433BE84974C33E00033B7B5222D6532E79C73CE89279EB8E87BE185813962281B91F11159D4A137DC70C3C71F7F1C1CC608D426EA9132566012AE96B79F7AEAA979F6ACB3CECAE3D21AFEE64EC828F225F26BFE06F3590EC8CC9DBE1D0A853C94C751C1B901F603A064F09C380E3B6265669B19AAD043E54133842D8682DA7A707891BBC35F7ECD1579779F7DF6F175600EBC1C0CACEA1197B6AB8C1C9AC824198D4738C2DE8F4E0C0FE6BD0E08116C13158AC308A1D47A71E185179E70C209DCCC4222514513CABFD9A9EDB7DFFE339FF90CBBC946B42E37B335F91EB2060BC9CC813FF8997F43349E78E2893CE84CBC946C20771936E0CD9DD572C67AABEA86A89D9B77DA69A72F7DE94B594B1EC9EB82CC2CBC025319C5DDA9DA42EBAAB0670D9A5FE9156290E687AA6648BD4515E5AAE933DB1632609EF5F0E633148CDD6140D100806407B3EAE0430E78969C330B1671F0F30AA4109931DB84158461397A4C29BFE62D39354C83455566C48AB454714C32F2061B6C1024C1E2A20D55711075AB4D04FA9D77DE390A3D26B13C8E18075584F208F3FA61C4B2E1A31C57860E14B20D5921CB0B2DCE0DD842031A2C3FAC1939948304B9E7F0284329D0D5ED44AA523647A2848ED73D830A00DF238F3CF2E28B2F8EDC1452CEE39CC356C4795007E15AB46310CFB3F7E72D6CB6C24E8E0D26A94079D75D77FDD4A73E9507232BFDF8C73F96302D4AAF513195D1D85105B4016A2ED88082AC4B70EB6CD036DB6C73FFFDF77368350FBA46588567066B2DBA429804F661443644486437268910E701C853C8C5C19B8C16BC8FEEF8D0430FE5D8836DF2DA2BAEB8229339EDB4D3809E0603CD4A7969F62B2CAA52010EB9FF8630AD58B1E280030E9805583FB3E9F99069E3BCC81A333774146C983260D5020779C52B5E11187EEE739FCB6E069E59726EAE947DF05E44CC2A652B17A3DB05A3F6DE7BEFA8C5194A1EB3DE7AEB3DFDF4D3CAFBB94796CF1966F92AAF08E081157B8165120E1AD29319227EE55F9C1A5B6FBDF5830F3E08C5E7ECE4D0B14C841B6C986AE7198D8554410AD2C099E580A350B689BAA00548E327A68E6C7AA85B4097D13281BCB7720EF4CEBC2E3B820A92B7E4CE8D37DEF8D1471FAD8754BC8532A0B4E1D7901A5626548D87FC5B656E1D559961B0E8631FFB58E69C79E6455938665276FFE1871FCE36651A2040E60FD9C9E3F91762EDBE64B1B901212CFF627B40C2639B9086D9D0DD77DFFDBAEBAED302C42145778463712EB078617709AEB6899EC0AF18CC733F980373CD37471D7554E483E00F071C83369670250F84039528A1E4BF758FD4C0B83FFA6204058E5280F38E77BC63E5CA95412DCF9A5214D303386D22C8663E582066113A69FB8001E7D73C1E760807D16305628087C8E59870323D10DE7B20562AC10A315000A85F702F9BFEC8238F0C3C71F8745A97E47850F346C8510E329A64F66BB3CD367BECB1C790C0248F921A9C74192133DC76DB6DEFB9E79E2A46E41E25006C87EEACF6D4D149279D74D14517E5B160464E4E5013092BABCDDF5FFDD55FFDFDDFFF7DC11A75E1924B2EC9F74108ECB78BDA3C5B77913EA70BDD1A8756B03FAFC80AB34FD056C85F161C0A88F8CFE681E2596A40909FF254A6A485193492C8625DC962435340D0B090F0F57CC60CC23620AB86EFE68DB8C3F317982CC1809939EF5281A81618442AA6AD234DA5B92DB4714156EAFCB186715B451AFDB58C2FAF424F6D5DB168DDFDC3F6A3A24129320EE6C7FABA90A4FCCA082E0D6EADAF0BB52F53E538E91503CBF32CFBE237483CDC094D076E4B00168CAFDE102709350997223840FF8D1AB0589EA72EBDF4D2638F3D16FE94A5A1A9B39C591B0AEE3179F85FFE664559428E287C3447264882BB1714CD693AE59453C2E9EFBAEB2EC53BCF39D41CDBBB1B11F8E39DC59600E7630BB04670D698466655CD0C7819C167CCB9D833105BB92D6826B3C90891628F38E208F9933C2F73CB2BA0A41599C552B58DBC6BABADB6FAD18F7E94C721E8F00F8DCFD5A901F9030DB04561B104B60120762629571876485EB59A563557826E780AAB66AAF0B95674EE3A936CC4DBDEF6B610B4EC94765AC5A320529E459AC1F987A1181D979940A3F246F0010D35F8BCFEFAEB47F10550820B36D026A20C50CDBBB081E381D6AF87D4A5B157568AB6932F03E7FCCDB4F7D8638F7FFB6FFF6D8662CE838B01C17F4D08831BE4CDAD0B88E28932016E2FF5287EF528A96EF2BDD10FC8F1D5D6ED516AC57E2BA97758BD8DBEA275CF63C0BBD75E7B5D7FFDF579DD8D37DE1879B775A91152C9923109E05845DC54C44467D5046868823664F52583900C20C8CD7A4654D2C040F170101AD2BAF13204E790430EC9FCC352A346E7B000ED6A9F78F66FEE0E343363E078DE79E78527855EE7CBD6ADE7AADB482BEC81AEA959F4AB3D970B3E0A91955F029D68A501E57EFBED1749107711180C498A04970386D4836982F82975442D69B84F94D79879F03BE727BC366220B40CC508CB7C066103E49A6CEAF4853708D30A811E22873B34B008E9F3AFD6AA6A41929DA09E1A089007817F0D0D1077F5F86A36C7D8E5D9D03EC9C89AEE7D0423369E6C28113497C74331F1DC20AA2BDE4E1FBC7AB159EE35D265205F892902841A0FE49E91F520E899E6B3DE148DB7E87FD32668A6171296F7E6988540FFE5E49A3561CCB36E1933441D3418C4A511D3149A1896896440E0558E55E5376EBDF673C3AFD84775773922568D1A63880E843A95C9E44E6C1B1E19B00546187E73FBEDB79F70C209E79E7B2ED6F2564272D85F5E845245F084267A8F150E1A90844899D0C79C0B1405095C6ECEAB31B967F0003037E77061A54741E7F431ECC0A77BC61967448F24E0433AE32E037011A92A8E794BE6ACCEED42086B5AB1624548471E0FA7E7BD8161FE8D2E71F0C10783F04490E08A82172A3029EC6651599AD10608977A3D31C9E85C6026803123471A70151228C805EABBBBDFBAA00CD2F20D2181B921043D43711CC46D999966D2568CBDFC6B58C0C004AD9BAC8A475831F52EB76EC5AC1AED85175E78F5D5570756A106795679A80ABEADEBD9AECEB81FA4762C616E2EF44AEF64EBB671C7514963AA04D3B141C83D441A824E21DDC18A8C8FA8A4819673A4B68390042E656BF239A81EB6929B33A0B7F9415AA4DD1E991EF3307E68BEDC65975DEEBDF75EF8B7024A5B689F18E999685D56C572C8B221676D22C0E643040DD4D0488B59064B5D947E3D57DF67CEDE59679D252BC2061E51FD81071EF8CC673EC397C4DD3937C3379C3637645FF3A5875CA32B086DF0973E80FC25A80715A475EB476491B3CF3EFB577EE557EEBFFFFE9CCF430F3DF4F2CB2F5F625D986D0108B14E0426640E79D7DA6BAF1DF906D4D40F67805F2B1A803B04B6551F4CE09FD1AADD0F320469E366281D0E48DDBD355C859F3C906ADB21A93FF8C10F5A09AE36C61B7104A04520BDF5D65B032ECFA483545A308D0F99C33AEBACF3F4D34F23A8E611CC7D9A07F42741CBE4B58E59654F0901CC385325869F43CBFC091221EC1CB183A3888A03BD18D0772F34600411F08A77716C2285844F649E608E4663B7C6385B9CDFAD5B35D0FBB7DB6EBBCF7EF6B346705451A62203BB867E9C499E7EFAE9D75E7B2DF676C84D94A1830E3A28930C5DD68AAB5F4D914B7D054F13D611C4054C64357301F14ECF0EA605C45079F3ACF3CE5FC082111898C3DBEAA173FBD4CE33ED2C04EA9F2FB12B54CF254C05B4D13E09056410681F2AAF8A0BFE23219C47020DB0379B98494ABBF378D6ABAE9FC9C30F32324C3A68F0D4534F81EDC01CFA8E2809AB76BBA1600846A79D76DA0D37DC90C3654823E41E175B5E010E4894C1937CC85BF068B4EEB8818E57572E87CE830F4A8BCC6C811B3AA0CC487B8440238B6FB1C5160F3FFC70EB1AD1A221B4B93F4BCEFD481804C9CB60A63D6B0306CCE788C2F9D76082561CC3E046B60941B646D1C3E73076E65F1DD206402137C3DDF3D4C9279F1CCEA27A908D26E9007C80EE0D522108756283FC573D87B30391C9D961282CAFAC0B0355BE21AC3DF713A28F56C3EE40B4A1D8238805A61BE917E2307BCF4E67944019D4C99C0E3CF0C0CB2EBB6C8914A3E7CA80736C588F0619564B1A0C2C1654D349C332905E2522A038465AF646F8826458812055FEE4980C027A698EE30A9EE50068E71C5C7976D9B2650F3DF4100948D00208964630E917D1010AD735F87CD4C3AD8D4AABBC073D3B1819B212420CC7AA5E4CA513D892EA828922D5F2836914FBD8BAEBAE9BBD0E82E645CC2D6FC1E9A2D787BF3BEEB8E397BEF4255FC154F314E47B09D74396BFCD36DB4424444CC9DC80439DBF669C2A026AF862738DE6E5B842C2182AA0CEF79936A0FED0873E946379D2492745FAF9D3C9152DF089279EF02C49E6A41198733D54FBEFBFFFAA55AB08BA811A467BCEDC5062500AC5BDBC347FA1D7C4526836AF263BB90E9A1FB659D60299C88A30D46BFC4086F371D24220DC647605F2679E7966C8CDEB5FFFFAAF7FFDEBDA7E8873C1BF801720335CBE7CF929A79C020C390ED0EE7A58AAE7156E04AE42E9C8418244E6713C883A65E122A4486415E27FE519153182F9F99B3BD935439A5B918AAA56479C0B123631718248F784FA4AEB11EC0488C0118DC421FC0DB714F06C5DEB424CD744919B23A14687161A5192C2DA1116B92DF3DF76DB6DEFB8E30E169B0161ED279C7042F445A66128893A9FC65E5F078DD690C6C952863034B215FDB22AB548C6F006C31ECDDEACF419062C21628608709A36A7C520A2F14331C21188F81DF530F556E2BC7C705113346657A0079263EA374647A3B1E967FC84E7A24D747A633E383E39E67BEFBDF795575E99B798BAA91428BED5A837235B515E3DA4352ECC43A167530242881CD3A8CE0E18CA565B6D158E0091E4B0F339F7434F9EB5B510B48D94B1D1461B3DFEF8E37AB031B5B90D30B06C7FD00E7AF7BCE73D6F3AC3E47FEF22E685F0961C45D47CA80CF20B272A6FCC22F3AF4A499B68C6597C08EB7BDFFBDE0B2EB8200422B71140A18165DCF370327E663EEA59B96033308D44FC8637BC21E727DF44DFBDE69A6B324E2683A8AB9762D1F9873DE3CAFAC0073E90F396A7342D6417C9580DBEE66FE6902598ADC87C704BB7857A30549B88034D94A838885706DC67F97923A64E3C341953615CFD839C480E36278477D5C4B38C10EEBEEBAEBB46D9E218C0A25CA9AE771411D921B466167CE0D69B6CB249561DB0B71EEE07D1CCFCF32CE60A30A1A64571DEF47013701E5419F76480E973B5E805220955081330CFE4F5F4ECBEFBEED12C0393DC137EF6B9CF7D0EF8E0E04401427B764CC82814C11C2D6365797B24F1ABAEBA2ABA17DC3AE811048683624C0E1AE72D358846BA4CEC02FC0372808F533AFE9297BC84509A4C32E3A353564B60EB218D596CDE4BB85C860D9C4DD6AF3C5E522BB961A5AF7EF5ABDFFDEE771F79E491049607E0A0109680B666AC79CD48936759FBEA67D65F7FFD40180247D21A111EF93E584ACEA5DE6B537A98A4DB0AE411BBC116ED13F9297320D681C9871CE7C441B5B3BF279E78E245175D44B27BEB016BA6A86ACB852B33BD7C9343142D8D352A2823A2D52053D5F76C2B7330AA116A9BD9BEEB5DEF8AE41A1D9A097B3C5B8989231981C80C6DD706AF61C4424CC100AE28A3D963B095E833A001AF809022A8A996311A22570E69B8002497D35DE3193165999929A3527CA97E5C554FED58A392CF2919CF80001F88710FDE9CFC8491A696795043837182158664EFB7DF7E1FFDE84711445851CDEF1A48065570315E27C0846703612D82BAAB89ED6ADDD2C9CC518D90E6F5D2229D2800791E177CD0CB0552AA7968B0658A3F33B9CCA6AFFAD9FFF9A5E980971E72C82137DF7C7318218EE7B0C9202274CA47C2273255182D1E6B4A5E104B456008F23868849190250020D52CE188E77F34C9340DBDF0F0075132C2120C663CC93039E79C730077EECF84431643E010E76B18172EAB9A81FD73930B73310181F910A6FE477FF4476021A2622D09B2F1C61B07D5F252CC77E8D626A8048611C6EFBEFBEED64DF7AD04D1543A1BA96BEBADB7BEE5965BF2C861871D76F9E5970313C358C010021F480325C71A3D0F1A1DA862EB9B15548C8709266D2D028B4B200ED7F973D568886A73C62292ADC1EA004D818B2F6A95A9FA90592558AA897EC23E4CB5998C938543F208D7C2B2A2C30C81409148330082CE200F84445B24F42C79830D3688A0A6C50F5DD63C99BA46CC150E85C302524ECD0DF225F2D3ADB7DEBACB2EBB002EB45880A08A3F30DB181C04CC75EAD70B3CE7C405209979361DB0084654079C6124EFCDB505FE45875A3DFE5B9517C736CC7B348986C5F485410BE990584B0A0C903D02FDA91A95F4AB2AEE96A0D1029F71326C568AD7A075414D132B1E10F8817938DE96F375E699671276CAB926F8FC861B6EF8DDDFFD5D041A3C7166E6C0E7B8B3C2C17A06F829DFF8C6378619E71B1465F6A2BA7220DF6C9FBE24B097703922125458A13C66C30F4CC178139472F6DC73CF681AEE3BAB96505886022494B38E17A639A1BDD4F09A56981CCB0127B1811BD907FEE3CFAEC2071AB08671B042B11BDFBC9162E3529841475806C7245EC3CDAA303A8B018F7A602943B55E890133B2D27F4E44EEDC69A79D6EBBED364A85882AE6828A4BA256A5BA95F53EFBD702259AF50CEBAF91EE801210074CA1234F3FFDF49AD9859C9EEB6564CAE69B6F1EB4809DB0DACA74A1C8B243B60D413EEBCF2079103DBE927EA30A07FE27D520BD98DAF4C8EA23EEDF74BD5672BAA7091684BB6649B622B5E4185F7AE9A5418E6F7FFBDBF083952B571E7BECB1F98947E407AD3B0536DC70C3EF7CE73B03750D7B234E11A85EF662CB2DB78C66F9DDEF7E979D0A041E7BECB1886979170AB45958507C0092C79151387E06E000D2903F13BB15E7B9A1860E2246645FD65D77DD880BB36432D00ED9991DB1864074A057BEF295997016EBFCF96C7D1983E698C09A5E096B871D76B8F3CE3B21E588178B7AAD463D3B1EB106AAC72A32731429E383F2EFBEFBEEFBE52F7F39C425D48A7355BD98D5C7A6155464C3106DC91EAC8ECB972F3FFAE8A34DD372211C5D8CAEE8CD0621434D38C619872478236C73C33EFBEC73DD75D7F95EC98469C435742E2FCA1232026E782B455053A9AEA83260BE343223D320EC3CEB854BE5279CB5D47AFB9BBFFAEB096D1B8F261BCE16E79F3CF5A217BD28FF86BE0720CB2757604B629B416A91F9088918583531004C2710B71E438B7C039270A791169C7A03B333CF134E38E18A2BAE80EB3348CD0D6D13D9026EC7A66B5AE4DF36D1A7C9C3AC414F242961388447B2B3016F5E4AD92F28AD66124C20992A36B64A945C6C5528735BA0946157AC5871F2C927B72E72A916633CAFDC77CD8C3A481639F0039BC55E6BE59217D4676B98B19F473DECB1156355BDF01C67B48C8CE98E19C22FCDDBC47156C32988C9D25A86918C1C2409E3A8479E12135069CEC01B6DE44A9BD2806B903FD6B52815018EB93978486BC02F989FC960EFC488AB857C5C426EEBB11AFC1D8D7A5A9579D6040848D106A113EA130A2F8B92BCF65CAE8C19792AAC77D4936A72CE830ABC9A2599B80D7DC15D27EA9C7EFAE9514083A311EEAEBDF65A9EB23426533560159911EF3D528C099A105CB55582712C65374BC343F3769F349322656763A8DBD7BA66698E292151D2383DD9F91B1D3792C4B8D7393276208B8D381FFEFAB5AF7D0DF61CD0F138322953AA9F1523EA9C0D556D9DD5A19784389E7FFEF986FB425F347E20A5D680498412230616850FDB81FFA61A6FD93B45EF4AEB9575AADBACEE4846C04760B82C310ED36FE7006059DA64934DC2DDC19C9AC765358C0A2B8568E23CD1DAA16B9E05AC555697C4F96498186E1AFC0239A54F3CF1843183C1B490BF68F0A141D929A31620AC5AFF781DEE834C3B83FCD9E4625342CB22F7A89951EB8DDA3835773680CD9D8F3CF248C65CB56AD5FEFBEFEFBBC8529B562E813C36C05A1D2992C455575D45708A5AFB7892381B913193F9F18F7F4C0911E512B7D5F81AB02E83FFDEEFFDDE29A79CA2A9890DBDF8E28BC3604871D60C3E1D2B37EAD9CF2095E1F18ADA37DF7CF36FFEE66FB685C5433817D364B19A6D2DC924B9E33366C2E38F3F3E9A314555A5CB9642C32599B5B3EA9AD085122CD9443DB2325A75781BF7E036A995628B22455BEF619B24B0E65F537507DA9E62013645B626142F6424B22FAA30432160C180A71909474F1051C62420458485011BEE9B47A21E64C9063AA06360D2CBA6E4BDD5ED3AEE3541833F04CA49675A778DB3C57E537DF09690534E1D95BC67B054F5639A01F3597348568AD50497259CDB00402EA2BA2C56011B5697AB8921D378FBD3CFAA8383CA5B35EABA0667053AF90686349D7FED65F88F874D3783C930121727471459BE219D579A0B531CF7DAD1CA3E06D91BC890B760CFE4049A903A2B5DAA72B55632E104880743F7738D2630DE413F652564E35E16D1CC044407D2528F39E698FC5AEBF550DB761058CE01D683327021E8CDC55308060328035FB1E0B97D2C4107393B05576825069E40212083E58799CFF742A6A6722A3140268C181A006A51F8533245E36D801C9AB544D131AC32083773BDE0700D8A5E9401B3465062F3CD370F175483372DB8C6AF99EBC923BA00D94A6EA87155B58E2087107311BB40650675DF8F7EF4A3BFFDDBBFCDBE844653EB06134BB56456AD8E82D23509182D01B7139174D9AFDCC9C111563AA13378086BA8096810F932039A3860F107E9AC34F7AD6F7DEBDD77DF6DB55BC93DC5F6281E10A69B5547788D1096B563214758A990912C8A39F91C021D061060E691503ADD1F482D54B5CB5B105B17D580EB9752835AAD101997B767BDF00F935B2ACE70706ADA09BB89FCE1592353390CF8D8638F3DF3CC3357F7029C9C9A6C10D558ABAAB7DD76DB3DF0C003EF79CF7B2EB8E002CE20AE53069CAE47EB9460EA9900260142BE2D7B670566008E0C6D65F5B9527F789A5073641047A89A9971DEF296B7DC71C71D1487E071CBC548DFF040E5913C4EBA9DC972322ACC8AD9FDDD76DBED8B5FFCA2F13A3C15C844CAA7365CC08866059942A6C73A8D1BD11D91E657EF3B265F134DABB5AC9A9DDBDFC58065931C732803152E11024CCACA54A18D180B390E6F7EF39BBFFDED6F677F234D56D3FD400C9ADEE59F462BE40845ACBBFAEAAB5FFFFAD7DF7EFBED84D8E086613D180F11CC71CBA9F82F4A28818B4467E084AF9E33EE979C714ECE3BEFBC6C8F5656EE31D2D5A0CA0103D66065CD746DA74B306045549609128C4ADA4346D86BAFBD3EF8C10F4E57079572CDF7FAE9D30C3873D874D34DA3751D72C8212B57AEE44E92D22CAB44C2A2F64C32AC30B310905211A55A3034E4560E84D220E25ACCC408D58173A1E6F256A1CAE2F595C7D4F9FB0AB6469DDB14A39A47380BFE188E4059A6A44B6CFA8228E33B47A4531468C5235B917EBEF7CF98BE564F2A38BEFCE52F7FF8E187F11F53E6C97417B1CB8CCF1AAE92F55A0D0A0F4240FD9AD7BCE62B5FF90AF281A13A9816C84D02D31013C12E90CA439E61F365A8FC5D77DD950749FC0392E1DC9FFEF4A75D660624493D3F65266F7FFBDB3FF7B9CF5D79E595071E7820561305444510DE48341927BA758953AF3F6C63342982C6DBB3AED050B891557AF6D8638F1C8AFCFAA637BD2944A3C2DFD7D52020E43FBC21621D38A3A9D6C22FE843D5A730888B6EC58837D080C7BDE23F2242ADE95DD5A95908E634AC870F0181F311E0C90DBBEEBA6BB6836252D98B830F3EF8FCF3CF3FEAA8A3DEFFFEF7E368274F69DCD32BA2716699B0BAAAEF5AAA0C09AFDA8D2B9134642994E4A69B6ECA9DE4D1629ED961871D2259662659728DE3199C3E721131B35B514B2B0B679CBA167AA3A1633C4BFC8A249D7DCC21426072A72C0496C3853BC9E45DA853D0E3E8A38F0E3DD4C925C051543886AD274439F8C0992AC9D24E663891A4B275D1610913B4A369ABAB448F807F425F85A429FE41302AA53019932A35C8B7D9D768BADE2F9238B80B3BB41EAC7ECA5A1861161E3B45E3631542311B6655997A70C8242D761DE70D7BE02021F1E80AB55E4F7D7B15FC6BD400EAD412F3D4D232EAD1FF3A0809B2A8B94373BD5709E7BCE6A7D79DF673B5B699C80FDF8DF643B52FFEF5D843FA03644BE37A08A75D08E31E408729128995FB4F3BEDB465CB961D70C001D077806FF914D9AD622648039C9940B59C0B55968F05B29A9431AF611FD320C1E1B7D2CDA2F047FA26DE87641EC8D6A2F7E7B6D0B8C30E3B6C206448E6A6C9749BCDFEB12985E9C266EC53C4699C2B45FBB407C2B7287F911D0C26B3A7084F997F284ED423C420C4A94A8207755B6187D00B8C01AD9B43A21A128287F6837D9BEAB898BCD8D075D75DF7473FFA919A6E2DCDA8DEE61E011FEB7E507482842290A422214FD16F4A88850787FBE2108174BCF7BDEF8DAC6C1E3641DD8446CE2DAC2AC3BF9663B4930FE36025CE047203E782ED3EFDF4D383C916995F8201B3B49AEE6F693F5C03369BD29038502146A50474EBD932A8F2EC3E9168B987B4BDF1C2387CF2C7484EF3278A9E12EBB7BAB7D6316D8F9D026212A25A4C431D0B5F29FB422C55EB8931E848E19A592CBCD33A71836017A210A88B805D1DAA6BFC69E69F2FF34DED60D6A60A82B69E604D59989D76DAE90B5FF8825CCD847E89860D30783683E77591DB6EB8E1068CF644B0134D8DBE5E5F270FAE7E71896D4D93B19EB167A12DAC49522B2B8C178B826E3D370C742240C43433425210A6DB248C51DF04E448C5AFD662AA2F1A32608F1CDE780B08A00BC205CDCD37B670BEB4F35BF4323E7075EFEE906316F119293B8F6FBEF9E6D1D9611E60AA89B95A4D89C518F5420D38C94C915E7C3D3DF4C31DD24B3FEB11F5C26A3F6913D93CD3D6E00994D52AAAC153138D7BE9070F9532BE1800C19DEB858420FD1610370018DCAD4B9E163BA8591A4933FF22B55403E9A8545E25A8523182E9A16A7B364C80AB0120D0B8512F61C14F64696FB4D146193CA277AD7ECEBAC6BDEBD62CE00FD46E640E18CCA2F75761DCEA54793CD36056445AA987E1865862F75DB85B03391B588D06E2369810B04353289A81BA60F48D9C80AC3008969E6F4A9F562295EBEAABAF3EFEF8E339719212CEA01390678C7B4D7576A12D0C77AF660CACBB148E376FAA4D145FEB4528E0DAD9CC38642DB7F3BDDE671E3FF1C4132FBCF04234696488BA9B9A7FA52484D50C8A1ED80702F99EB28E6830F90BDC702A05BB34A80E84D19AAC61241A63C2A830D552AAB01682ADC4D75D1EF752396091EAAF5535F213F0D462818500F9838000B96CEB0CC91ABA524ED80CE157BA302544350F986315C5FA965B6E41C6A57A3FE24BEBB6812DB6D8E291471EA9195C56F2119F6BD7815AAF517516DE03176CBD634FC5FF56AC08E09BE6EBD6BD1E603EC67FCC1E4C2950A2AC66486BFE329AEE278258E5F4FABCE1D0E35E48B9955871365A414134307AB4FA56ACCE3B8B01D7F2EC3AB6AC38B6BAD70AAC62A59D6FC01C4EEB9ADE0761D423012B031AE806330953D08581A872102C210FBD75097D601998A66BB92172CDAFFDDAAF5D7BEDB5C0B1C62084013FFAE8A3440F8D7AE564D906E21E266858383A22C5C64C739C26916A78C268E950ED2A4CF159E915B647928615EC0651BE730B0BAB2E0A8750DE8C19199FE22C56C0A1681F223FA1A44009B29EDB36DC70C3806BD1F73A797DED1432B5961B7A2D5A54A0A7126319C5F95E8DD2A43A0A1851AEABD6516A45781CF5FA5C039BB3AD6F30774BFD07594FD357261C8DF6B8E38E8BFCF7D4534FF125B1B58BDE4F3F54E550BF77DF65849CFF7CB9747230229D0544E1078ADB55E21E95340FBBA000D236E1C1DC503B038642054AC71E7BEC25975CF2FEF7BFFFD0430F7DCD6B5EF3C0030FC8865B31F7E5D52F7AD18B2846A6D36789B83F643EC5B8ECF5134F3C813D1FD305819A41BF1C99C8BE943FA35E1BBA3E15752EBAE822E327F01A2848298EF3464E65C6CC410E5EE193C67B820A4E8EAC1666A5CF5A0CC7363B2861266F58BA9CFCD74CA056A759F494554729E82A1EF20D9DB22C6984D304EDB096CF1CE82B6B2DEC13230DD18348B470B8C5C9279F7CE9A5979A4C08EE81F66452E0B040A797CE60A59478027CFCCAB5633172D86892BF2BFFABFDEF5AE78573BD8694D0D02F33EAF1FFC8C1024126CA9816999203E137C160C068386294AA5B29CA38DFABE513D33EEE318FF05D3C3539E6679C710686E50CB2E79E7BDE74D34D4AF9CC3F380C11A8C5E78DBAA81D442876540BCFA178CCF5DEF070AEFCBBCF3EFBE4C4D10E04AD008B7175837266D5A7E74B316D8E618DE1CD38AF7DED6B33E640111FF56A364E8657687AE457D246D8FD67830058EAF465E89DA951AF7AD5ABEEBFFFFEF1A43312E95F4B54C2FABDDFFBBD33CF3C3353E1F8055861B4ECB10E6AEB4B308E65C618A1665EE318A3272EC092BD0D4EA35412E0CEF5F2B3B39475CD8C1E724E322F3DFBECB38334C822D46AE048ACEE3D682BF35E74FCD18CFA70ECC421871CF28217BC206FC9D2F0C48B5573A5BAF2A231145C62B9965B1979ED98FD0B936BAFBDF65AB56A1561BA8E2FAC9EF7BCE74597FDD6B7BE8594079950B36945FC1498F44D222365907F55214C5CEE2CFE676C0BE273E0F0E4934F2EADB3D64A4FEF7BDFFB38D8AD07FA711ED6EA1D9F96B0977074B1EEACE9DD4C2B820D2E746E5230716821A40328EC9C442F8F7A59C1CC21B2111962ADC41FD530997129C166DE4B6DFFE2C91F846DB7AEB499D23A2AAD47C06D1322F58BD7AB4DB8C5565B6DF5E0830F4AC8607B541538F2C8230361D192DE000461C0BA880523091B2A8CB4570B0369C46A0B2B602C0A640B116B3984782D8142B52D582B2ADA6FFEE66FDE7CF3CDC8F750586D249879E67AF3CDEA891BD82DABA9CF000B4C14642B91B687E1176AABB9AB4D24337BFEA00BAAC009847C38E2882322A2D5FA42BAE4B5084230DD626D2AB5180E42A4814874E1AC1E905A166A50BB86A0B07CA3B9DB4A61D3677FADD2B31905A90A016A11D41B31A26850EAEEC20B2FA44127B5E70E3BECB0E5CB97C3E3CDAF81B2D5683EF7C2FAB21C8DB57A333D1D2EA605B7DEA6BA461E108A38EA1523B415CF955ACDA4B728D380336F7CE31B3FFDE94F5706DC3A07F15CCF95BEF56A3B3282BF0D8A5A223CB58645E04E0F289FE97D2494B0167DDC9D638F835E37DC7043D08893902FAFB9E69A7DF7DD17FD92DC03A68BE1DA44B4DC19E8531B1268523E66D67B0731B1AC730959C1485A4376572FACA01B2137B29B9A22C50E518E4188F16291997E26D49E32F1044672443164A12E5476C88477D96597CF7FFEF3E79C73CEE9A79FFEE217BF98ECAC59F36F258BBA953A7FC674D8E5039E84C2C46951A8878E44B379FAE9A79FE93DE3B425563EC1BEDBC48635662139E711B956AC58A15316DBE3D226E88C69896FE4EB0C4E95BB45EF87A0908C8121A49E4CF3F3E0E5DAA6969880C4BAE67AD59A3E6DAA1A9F56D6B95E57DC1045F4955AC12EDBBD6CD9B28835A34946BBB41294A38C3010C66E61331F227DC016888B4179B8336BB8594D1B1D84F0D4AB95681415CABC2B47FB9BDFFC2695E650BC6A9A56087D66550BA48C26D582107A6CDB3757FACC1B0B034CB06A56DAB28423C9FCDDEABA93B4CDC222D24C336D9DB87904CCD78C09626BDAE5A2D87BD60251E606DE3EDF7BA507D4EBADB75E8E216787903ABB05C0F36893156245A1BAC0815651279E78E2C73EF6B14C437E3CBFB05B97344443974965EC7E95AD5B9774335AE867944842106AB1082433FDC4AD87F5E00277E15614201627CC9E69E7E6A38E3A2A52973B9EF990516988FEB8E7BEFBB9EAE8B51F2B1E90830F3EF8E28B2F86A4DB49105AC43199E6AF279C70C2CA952B8DE8C62A0900B1D6D49290B23A8412BE5713E5028C6A2CF89BC12B42C745B94AC3612883E9597A7A9A014B4B2126B03F03D0E04D685F3F6D183F0BA76B901B51911AAF5AB1A78F6607378559660B2DF9A47C8160023874B1545572DAB24DE6861456CBE7B43754DDC879FEA4341B9FBEAAD7A7061D04E7A29E7EE4231F79EAA9A7C8BB6F3D9E7654CA9B55D7C860583EBCFEF5AFCFB9253C4A4390624DD87968DF030F3C902F11786BCD2691C972306D8ADF8F4BA6530D7A849321D2B649D1282441B7951B065E10F1C638D881DF11BB654640B9C99C738C9F78E289516F4577E38D37DE7DF7DDB7DF7EFB638F3DD6BAB766094374849B88384C06696CB7DD76FBD4A73E350BAFAC0A0EFACDF7EE2898C5708BA073B7898F1366B9C4EEBBBA17BCE00514BDD2A3AFD4DF7A2ED6A283E4ED79367B47A11218704D27AB09D9ADB0FCD6959B51E9C8B6E1861B46060A050CF541DBAE282ADF6286039EDABAC565519FC868B188452EDE6E7793D683B0F2AEC8CD21F4C4586131CE466739F844CD9765238018A546A18FD6FA681382D87AF9AD254CEBA3A9B48D6A829EBECC7C354C12DE8955DCC9A8C4C048B8D934273515E55143B839EC50614BC692748B90C153900E4E01D6A32BAEB8E21DEF78878AAC6B01A36A626175492212656E1442D860830D36DF7CF3071F7C304C17B3B64B8E1E76E79D779A9026A18040D5865AADD4A020645ACE54016B95476B190D2A3D2025A346A34D562B63EBF599718D2339A19502848AF91E042D70D41870B41046ECC6D6BD1757DDCD1AB194A3075A66048D82E01EC262CDC421961BE301150E705E54D65399EB749BA6E97BE4C74A214C9E6A16BA1E5A4F3AF8E908B334E04B2FBD343288BAFC124131D55B5E438A903A3375CC59885A7AD14071CCE2E690B07EA42AEBE08804244D9E71C619CB972F27227CAE549669A52E0C72C7741FC01A5C636D749000B9D2DC65F35B8C5A42E55A42E0009F80037C020508BF887762909FE598340A467AD17A5A54A5B0AD87E66295AAD9CC58662C5243D11CC49D00F0D0430F8DD4FCDDEF7E97C1035BCC3BAB4B77BF2A09B6EED9E2CA7200485E17A9F6FAEBAFE724233B1BA1304809B0A081F28D356BF019DBDE0A419ED4C67149CAAC092AB5BC22617AD8E5982D7895F1F5FEAEB5B02FC55AA59DF0ACAD1C9CABB6A497C1133BDDDDB9BAEB243A60E0EADE6E96CD457FB23F63A80F21D0D05CC84410239448D3F460D5528481D63E2016D317BCD330A58C9F6F8894CC1525F23BDFF90EB59CD0740F38E080ECFB9A5E9B095D9073CDF9B5DDDE6852E167871D76887A1D5152392912C9565B6DF5C52F7EB1CDB8A6A7BA442401F62D280FA41984C44160472F17CBF79060532A0892C271EEB046066434837EE1A07916CB8D0DECF2216CE6FBDFFF3E929C8C0A2D255FE67192DCE67A7F406D6F88D135A3AF75FB3067B3C666D72E7036D493F622B1E92D86ABA14C3367DA9FBCF5AD6F0DFC23F2C21E5464ED6341F202C27A96B0DE7AEB2191E7152039554241570E2C317AF3939E898140DE85A7D2D228188AA0E441F581D3DA0D5573354381EF230B867CD9E4A6F6F1833C7200CF39E79CCB2EBB8C98533295352DD4E69B0A46D85C41CECA83B589EA4644B2074472968A9CEC2CC6C59A5907CDD74BCD45ECC84C064CF5000AA3E04A5CF43623DD252E982E5FF5AA57FDE11FFE21F2949A5CD577D7F42AAC6CCFA0F89C6700CF41AD8564551D6DB986BF66C2D57D0553A1CF125221BFE62F457CE62675F5D8E00B2FBC300287CDC0CF3DF7DC2BAFBC322C99F42104CF25F2536D1A5FBD175E586EDB8495EA2458741CE89AF9FB79756DE53B4D610761A56E0AB84ED873F035F0AFC69901DE577B267350A9D2A152B700DCC2BEA70BAAA69F0F3229D18F3588298151DD130B5EEBF150FCF44CE989ABB032D76BFEB5D28778DCB3FE67D16B880EF7C8D4E77B2FDEB6985161E0056C4B86F251369CA6435923E9DD28AF88CC3FE96D621964F5A47637F3E19E41682531A24609418FF047F8D241E08261204BDB6316FD32DA76A4ED002458478BDFC19DDA4E5B2FE89173914986085A9463DC6BB3183BFA4C6F4D460E311F721BE49B620E6DC6252ABA234B30606D3388BF5015359E6A0314EDC1190BBF8F7BFFEC3A01D8A71E506CE9D985E38F3F5EC4965992B84C8A26CD57D859FDC1AD5B3B54B2070C78756F8CBDE79E7BAE5AB58A6A5079302350AA828201D820A9E9866E076C9138954A6115941C818CFCEB7FFDAFBFF0852F102D5F59D7C04E9BF7666723FC59F632CF66C068DB77DF7D37A432D3C0D35FFD140C658146DDE1CC2D9321A29E8076DE152933AAD41E7BECD1BAED81DC5782C55882C603439910045B57CC08287309D5DA94F964F996D4F574B0D7A1F65FFEF2979F7CF2C96C8AF1D2AD9494804F61B65CC25AD3A64CD0A3D26782DBF2C6B7BCE52D6188E1236CB4215D4B158C5462DD74D34D8D2299BE873A26488558D8F3F93DEF794F4E359417D76F544C1A5BB685ED9D5B2779DA07905C087BC3C2E0F9E1030631D40B11281843421BB88E8541E6544B1B0E0E39FB8DCFA6754E83E90C4E50D33696B043C22DC6BDF5A6112EADDB845B09EB9F4550B4322139EEBDF7DE9FF8C42754A0A7AD883212D7D27A00D720447954AA38E52D992DC522F43DD7F1E5C110D32053FED2A8801C6E856E45A856BC77DA246A9E2EFCC9E2D8E4BD8C7AB4E134D92576345C81107160680DD86AC76BB3D5BB0A6A3A451AB03AF0294E07F40D34E059E3D7CC7DABA7D5808BB6307AA5F5689A41494E1438940370DB336C09747A6004BD090BA80CD8C90C04B281A76A1A568130A5C8E140614BF98B62446A295A148A97B92B95EC6A6CC08681C80857C69C58BD9EF29B5971918B1A1B96B0401839B5BAF763B00C9CCD5CB55BEADCCDCDD75E7BEDBBDEF52ED3858DD66492A804B249AC7AA34987DA1D77DC31DC883A1BEBACB30E722D0870D34D37EDB5D75EA65953701BCE016446BD9987238F7A0462EB6DD7A980587D55AD842B62501D28CA8A11883E6B7A730BB2C8F24D143E24721A535E7CF1C5617E048E653E5170C96847E5C530096CF1D4A299E8514229CC5361CC79D71D77DCF1831FFC2083238BA33167094A63005C1C5B7BEDB573A815E950B2390E78B82C8005DD209D097BC668D201B31E280E5DF84B786AA4495BA96AE143785225C32725E3401546126A25E97F20CE82CFDA2AC653C53E2B43E15C30AB1CD53C9BC38B4ED5BAA6F153F7539B7DE5A65FFDD55FFDFEF7BFFFE8A38FCEC27EBC86DA4F548207C5DBF06AB0AF0A7D6AF76EEA33BDD718A9EBBC82D2CD925D444B54193B38666F3EF0810FE43881A0D93F820E089EB4DA0E678F8DFFCC673EF3B6B7BD0D251B59CFBAE4203727D9AAFAADA79ACCA21AC6D0B71217A0DF57DA477EE7AC90CE1A0D9B6783F764F70ED28EBDDF1631557955CD82E1D9DD8FC685042DB72299926636A0CE0C15BC79C31BDE70DB6DB7D5EE0B1C8CFCB5C6566DC8DA7AA7EBF1C2DE29E23A30575A6A33989CB907683636205BD34B998E7B3AC4DCC20644D3049ABE31AEFAA7E10FFFEFF511318A985AC150196738571A8B99DA5F2B1DEA7BE338406E2A690E3043B382334AF716B7A9E690814351802C2D43E081469792B6BEF6B5AFBDE79E7B5A316F9A03AA956BDC336E113DB1E54277C6BD0C85A53F086F6C3DAA796917C0AC79CE3A326023361E8415533691EC6B9D1C126C10C52C99E96806D6C92661C6B93823A3D20EAB361F83BC980458738760FF7AA3074158A3926A8FBB4771872836CCD72ACD9A00492944D8AD31E708E5D8E414EF6C98C6349C0981D9D6A91D4DA2A06D786AE5324828B1DF2452E35B6C5D13AD0DBC733F0134440918F734289194EF33ED68DBADC7046819E5BAEEBAEB0E3CF040400A8483F3E3529C5F014B7110991545882D58D38B078BABCC102BA32D7C5A370E0F421A8D20B10AF2A2419AF5DFD5BD7E78FEEEB2CB2E914EA4AEC43386F4ADEE9D6F46D07A5B57AE29CD5F2D1B4BF9B459A7C5CDCB872C1E3988AE73419DC0578A89643A9014DC18022238361648ABC9C15CF6A5113406F786BE67BF110C0732576DAE30288FEC62D93080BBF9E69BE71E8AFE8C7ADDCD1A7A377D618A6C5D116C45FD9D2B457C96489E1635418E41595AE36BD62CAC2E34F0F98D1726E1B5CEF6140536D96413EC19765E9B2FF551F5314320705470C06A38BEC5A2D1DBF0B4311975E2AA8ECB634CC6F714B585694EADD85769DDD34A78B39B5E0DD135726D51E5898D1EC4670E34E069EBC2B41EBCE81574DA669B6DEEBFFF7EFC0B6A87A312B9A623BC75634C8E62D6BBEDB6DBDE7EFBEDF0EC514FD924D81ED72F52A9295E41CB7C78E73BDFF9BEF7BDAF5A3E2A09182D99983EFD7D755021100444518F8E3FFE782ADFE9C33304AC025C5F1A28879B063998926ACA49BA4B5B77DC2E7104FE3E5FBA9C40387FDFF296B74468C8CED2A260DCABBAA26D0FA2E589FB7590DC96B547FEAEC6B6FC3DE8A0833EFCE10F67FBB223483FD09F9C9D2C64C58A15C71D771C4E65BA08403FC137BEB78DF433A549A276912A379B644C91004813C1BA26D75ADAD31652267AC85A2AC1B4E90B45CD6CFB5D0B71547786C479547232DD8251A914A6546152161A171A141882A35AEAB46661352B11B8468FCEF502D4C2C767B1B35AA2D25C73204FF40C8A93F3B7F6DC34A1680BED730ABE4A21834C907ABF0C8B9401664BD841CD12541637EB29871A88417B7F0A6B3652928D67CE9A82B6955814FB71B9839A175D74D169A79D563B37B4DE5F81F61AAD1B9F05BA7B30EEC51FC693C26C005A93695571402FFEC2A858926C75BE5F4699D71455840C0DE3A856BAFAF3EF4B5FFA52887E4809E60ED59725A8302A1D5E10C6C47E6E5EBF8EBA2552625A8F6A817058D4DAEA8002AD324BC5AEF1C2BCE42A7D2B13E041D968A38DA2ACE7116D416BF5A68D8A0B9552B023348922EDA17561132CD43500FBD115A4B11A76CBE3F40FC0358BC1762043C068B353AF7BDDEBBEF295AFA807DBA7683CD5C87369065C3BD28C7AB880E19712BE5A26693AA26A50EBD160AE361165B0151B9D5179704D11692583A0F5CA5FAD44C08E4BAE17E403B2525F1774CDAFCAC455B0D01E3BEA09F11A8D66313CACDFD8B190F1ED2C220AE15FD4F28F45216F09BA6EB6D966D1CF88840FD0C2B1AEB8E28AD1A43F042DCE4CD83044912451929D30505B600BDD1124ACF4C1E4DD5674E8D64537B802A6B2D5BDF6E1AC384713A848286297B3E9CB962D43E987E7B16BF6416AC53A5ABD9B689903733A06E736B14B8B395021DCE455FDD57AE13716C43564CF53AFC910564708CB5C2FD42500DBC47028AF52D8C550610F66A4935958E14BA7C53B89582D11EF11B6F19115B594081DAD76CC6C5D92AE32EB78D27350D357D5B02DFD3D70F140DBC7BDA512B48893DE7A80EA5CEF3F4B909DE0AA1D655A8FC2B175348F0B13A1A4E1619A4F71E270CA987D5A2D6460DA08421FDA8A42A396262A98A4BCE83E01C1E0C17BDEF39E33CF3C1317779674DE79E75D70C105999CD5A489E037E0D67233D52ECFDBDDD49F9F5C54A79B46F49C6D1AA4E8A0C5746C8F520C47F9F5777EE7773EF2918FE44BC08AA9190943FBB0357D405303715B69FFB9B4A371BA0F3192E9A86437B562E39A358EF80487335305D2AF25AA75D7320356D26955202AD91A18591D27E83A515FF6DC73CFEBAEBB0E87F7B8347F5CDD7B3C1C71C411975E7A69EBBA8E3D0A1118C904D0F54B04167100701D8350C2A53219B030BF6EB7DD765FFBDAD7F869DAC38742B0F1C61B5BC24631A84645CD95C66DB3B606BBC55C2977E580D371F24AAF9C76CD7D6DA1A15B22C57A0DD38062E2F752DF52181A95781F8465D301B51299B34F299F6AC8A10E408605E00AAC2A13E471B5A938B5AA2B4F5FD2B8B6B01D78BD415B3AACCE40598C9374A460A38118E5FEA90F2A0320AEB3D6EE96317018E72675B6ABD7069C07E1CDF03124C2F9B46ECE992FCD2D66AD57BF953BF8CA57BE326866C416EB0A6DA56D1F49FC86F9E4E060E80EB5C17D6065D63553D52A5A8F0ECBC83BEEB8E3E73FFF79FDDF035C9A2B6514C70B3BA00C02B578450E23E6ABAAEF46FAB9F6DA6BC7A5E464A8475E9D7922555823E1924B2E39E594538CFE6D0BB92323AC59AC1E1C1A85DFD8FD89E86E730EA71D1F8313EA2E0F6C1B41278CB47CCE5686686CB0C106915DA0159501CFF5FEB9C60FA103D8D24DD31762A8825420B6CB2EBBFCBB7FF7EFB6DF7EFB2F7CE10B73938C7CD362F165E880AF5B8303ABDA83B56F410357AC5871F5D55793F009286A55C18C70F0C1075F75D555EBACB34E54A06755114687CA63526FDD1868382BFAC7A2D84CBC31E28361E88066F5A4196A2677DC71C785C48734502E07600114CB7643B660572CEFB5AF7DEDCE3BEF1CA62E8699C30AACAFBFFEFABDF7DEDB6C221CEF39FFC4D9939109178130CDF7C61DD94B4BB38225A4F0B3220B72E9E094C12F51512BF3BFF1C61BC3E9E53773A578C5A844A0AC59B23677EBF1E7C84D73A5D46565C0B21F2826C2667D177DAB34F7518D12710CEB1CF51F007815F3AB6C642807AF03AD758454935ACDB6C49E6942917ABC7EA9B57AB76302CE07362E0F7CEBBA1D635276634076E50D4B3B74091F3568486F0B7EEBB5D75E9B029CA35EBB9503A9C3B5C6C26866AF55DDDB4416CE6855EB02741C04857D04174C3894149012D104867280AD5480A2862B9549307262AF425C46D9026E7BEDB5D7ADB7DE4A4489F60C0D274B987C3307ACFD0073BE37B3D23CE039ADBEBAAA31803FF56FEB9110F669805A11DE416F761B9B0A617B5A38C2A8D4F61AF5207CA228707FB489881C05E0ECB3CF36EDCDD2CD8B1E55CA4D9C7BEEB9279F7C32D56133C94C29D279D86A7E3AFCF0C3E9786FED7A832AEA4CE80284D080F4600282A6087498ACF455AF7AD537BEF10DBB3C0DD4CAD60DD1957057C7792B26224F0DD51F596C804C1C3BEE5525066FCEAA8960875A2273D788D1CA6EAB463B5E582D0075A8CE0455A196F06C537EA569AC1B387A84552BB1149C7D7BB6E2DCD41A6F757AD37E5096C6BD3BB8D62C2C5BA01C31715456DE70C30D9F7CF2494F31DCC18E039816C84AD5C5DE2676CAFC94254BED0DE952A6C77D0E24B10E6AED032661F3CFF6A5F661A227B8637569436D8055EB76003DCC08C584D8E150B111262109ABA7EAC9514B126CCE9232DDAC19FB557B2E1761F784FCF9A5A886133EA00F9433D588E479DD85175E9853AA1317150496F0CE77BEF3E69B6F260D2E07EF9C73CEA919E835A0BC95E0A0712F0793A1028D638F3DF6ACB3CE0AFF366FAA36C7AD3E7CCED820A1DB841FC20DDAC41D5EBD9EAD34E5D6CF14C13F38F4C8238F50CBDE80615BF5B5EEDE369202616BAE573FCF2B726EFF7C72E59E10E29C61F3FAD93509040057C4DE74D34DA3F4E39E090AE56FE6B0DE7AEB3DF0C003245CA231DB103AE0B26C562B3196AD5779AC0256EB2130F8D22AEE514F874146934CB3E05285F680E02E5BB6ECA1871E22F406F9409338E74A550C234A75A0AC2E15893515C2FF2AEF41CFCE2AAC1B60B5967A76DA545E7235A28A0C447BE259A4F14E88485EC4DC90353980D5DD1B1DEB4B5FFA92AF18F5182ED06696ECC8F2B7D9669B7BEFBD17312573030E75FE8322826D61DF78AC265A86710AB0597611CDF79936A0FED0873E945379D2492745FAF9D3C915340E1DF08861C354179F9F34268274124FB4FFFEFBAF5AB54A02B5F9E69BFFFB7FFFEF0319E24EC64BE66D5BFFD95C23E05F8F644E7D36945D1E4D129A031CEAC5668BA94A6BF05135A4DB610259A4F5D8E60AA86ADA158C83934E4FDCEA09AA279113072F7CDDEB5E77CF3DF7988129E1CA5923BA5BEFBB321306B059C9901556D3DF80578458E7A599EA76DB6D177568AE374870AA15E516F50D99FF03A2663BE80B123C09218AD6C40870A8AC22F7AB29CD9762CEDEC39758E98CD5CD45D1157604C7ADEDB04CF420D01A0736E1ABB987363610F0EC7B36289B628F42983D56DE37BDE94DDFFAD6B768909C1719E062DE07422DA483B8D767050878E745175D74EAA9A7524C24CF6CBDF5D6C1661C5DE6E69AC5AB360D2924F4D196E373BDDECA786138195B62C41A2A5AC6DC7EFBEDEFBCF34EBBE8FC3D2FE317F449ACE90DE34E3BEDB4152B5660BB867C73B4608DA8ECF6A269A5A8A99D49AC1AAADD068A1640A313D70022F36B0D67D7F397673FFEF18FE76C442F81B8E4414C8822A89E7C7C6C9C1F80A6588334033162929C5EAC5BC1D4EF7DEF7BE35EA4508CCC53B84040B510B837BFF9CDEBAFBFFE09279C106AC85642C42DA49CF31C9A78E289271AD18D9CA123AACAC861DB5B6DB5D597BFFC65180F376063A0523F0A0AC004E032E34B2EB9E498638E0113C8771C68E1198DD2A7621A1B8760AB8935C36EB6D96699ED273FF9C9D5338A7E073E04B77FE0031FC8DA8315E64172D88218D12FF33700C9C9CF808F3EFA6846C65566F1A3AA070B6AEB999B9749F828CE0EC2CEF3467420F62863BA34230AF1D1A06BB27CDE5503673242906DD75D77BDF6DA6BB1C4D6904967858F195B94258209995EF42801B44D36D924AB46F2B3307D7EC26A8592379EC4675455406FF1EADE7E0E6D6CBCB04F9F024D96B37CF9F220582696313D71034729C833EE4D55B1F41004CB1A2D82B1BAB768E51BEB1EB4D9BA178C937BDEFAD6B7DE76DB6D8C99E3966960C7C62B67D83FFE7873F0DEFEF6B7DF7FFFFD38E6E9D7A9BCD816BA2AD4A59442544CE5555E1AF631CE074B8396D0AE6AFBF1301A0685229BF9676BAAEF9C6C4398C4B8570A134F10262A77AC7F67410FB7F1C0DF19AAF2C31FFEB06AF6F3A5B3537D7C54922CEA8A06D682BC2580BAF4D24BA33211FD8A423C3000B42217D6DEA908D673BD31C39A5E3B48EF75F697886026000A71EE6AD89A0ED3EAE48A1AF3EA57BF3AE73734046F82796E03A5DF809EBA765FC134461E0F54346C29E4DB8C7B3CAD3C18B86B8D618528F8AB7B1952A406AAEAB4A9DE6198DAA982DD26B221F2CE73D58011C470A4B7DE7F319301C9028ED34F3FFDDC73CF359A26BCE78E3BEEA899A0EC1975F500B4C535C11B1876EB8D8672736485CF7FFEF36D61E02827198238E8C707E178FEF39F9FBD89BC4F1639AC5D539513AEDD36F2EA7CD879E79DFFE00FFEA0D23B2E43C461E18684586F3DFB152C09B1D093C469E72DD3352FAB268A4DDB2E9876F7ABB2B0AA5536DAD8727FC50D233D620448150B84ECAAF3BDE31DEFC84FB7DC728BDC1ACBCF6EBBEDF6B18F7DCCBA57EE1A5844505875995B756F1A55CE3AEBAC73CE390770855267F921F4149EE40819244FC1A05AB79D16E2988BB10C6127A05215F235C60667B8F1C61BEFB7DF7E7929270559ADA6AC6CBBEDB677DF7D775BD840701AC81B6DB45144E140268F1C76D861975F7E398759C96CD43B6DAC9EB4DF09F3A0C005D61D384D608E8C38AB98008A175894A1B0EE62BE23F00D3C77FE5CB5D94EB53913F51AE4C1EA605037BEA7512FBA691B8F4C9B240B05596DF2863868774146E4880508790A637EA61A80C0518CCB9DD55183FDE208E7B61CFF28CDFBECB3CFC5175F9C2F71FD62FC1C9702556C1CE98879B0BA2708EF7FA677B1D4855F7DFF06618C4BEEEF20A2C74EA0EC5A9683DFA1AACB15AB81F601071CF0D5AF7E35F2BD5A0DC4DCF241785B6A060A44B8152BEE2C06391D9921C500BBA80F68E0B1C12E351A7416016FDD325A0DA5914D23B91A93FFB297BD2C5811385884A47AA0B43F1B784BE89F4DDC65D59B6EBA6940A4664848208C8F4A03107F917CD5AA55471C71847D2C024C84038DE12656B995E349B66DF03083043864D2B7853101D562DF26212623249A57BCE2150F3FFCB0DE8B2C60CB2DB7BCF7DE7B5FF7BAD7DD75D75D2E83869DE35E7ED29013822F30106143E0908CA6523BA41A762EABDCFAEF7FE906D0A463C58C6C12C220F1CF04B385BEA08864B156A8605DB939E0908E1028885066CE686E3EF5D45357AE5C498935A27FF17C67F2EABEE81CF980F2C42B5EFAD297062666E21A198F7B0F32C783B6D2E3286EB7DD76F7DD771FFA3A04489D0C6DCF8A079676726BA4172849DAD6C4B06BAEB9E6E8A38F46B3093B013BAB34A0E37C3AC4293B68C11048125992E8F7E4293D33691A38F05DB5928D66F7CDE8AF9912EA8BF686FCF4A637BDE92B5FF94A2B6622A26A2378B259C6646168CA16E7AC4E1F786CD430DDDAAF49D3D099679E19593B40F8F6B7BF0D30B3D1C71E7B6C7EE211B27174F6E48D1B6EB8E177BEF31D289AB18156B727888FF66A3947D12CC9FBCA9CC3531F7BECB11CB7BC0B051A4516489A0F46B46DFE25B6C8AC419C9716F7E1D5EC3837D488686D0FEBAEBB6E38D3A21D2D5B774372F6E53A6839113D5FF9CA5766C259ACF3E7332F35F8B37533FE9ADE9D62871D76B8F3CE3B75A34064293E15C21AF2940743FBB2EF3AF0DAC4E2829D4CF79E4EF4CD37DFFC91471EC9C8E14C9955345760A586013510FEB3040E54105C3910310C5181AA9E758E492D568C24BDFBEEBB470C621CB428283EF58234F00E92DC585D359BE12EAD0642BE77A35B11B3E64BFB5BB70CE356ADAECCE135141C474634C83CFEDEF7BE37C4D6D417EC13C8B54B44D7FAAEFAE540DACE0EA2E41912659BB84110569B32682360596E0C3C39E8A083AEBCF24ACC5D082B1049762D7FA96AD716061ECFF762B77402C548666A4CDEB2C71E7B1001A701CC7C395B8BB24D1E7614897149280521DB44A6C9B3210E11B20F3CF040184A208F5FC008798735F0502D48FBF1DF86005478E126A9D5045B8FCE47D6A67A03289BFD6606EC0D72681DB3427F3CA97A7FDE79E745A257B15E22B8E9B95ED924D4F16C4C6662C79E56FCE4B55C1960CAD97EF2C92789C538E69863CE3EFBECCC9C8E8A48CAA349B7BEE8C1466F0190FCABC10D9D98FA73FA05F1791B2A923BD9F5B952C13C07DB8463E34A5A7172E0B2AA99E666BFA9F379E621BE6139E4E1C19CF2544620A03770B8EEBAEB424A4C716104E357514D0875998E64114FF2A250764CEB9580825E1017C884711CC6A011885EB93B7046A4C0DB3728040FD1C9418A5C88B8E04F946247639EAE158AF78E93C359C54C8AFE512D57903C6D5084441908BD56694D1A1DF7F1C71F1F97F6155AC523B884BF7EED6B5F833D938733C0BAFA590B679D73D02983C332D9653AF02C5FBEFCFCF3CFC7128B23831D271207E919898D561CA0C77AEBADF7F4D34FCFD245E67A25AFB54A9344895A95D65948C5BA5A86A9063667045A9C197288F70B438206EA8B2EBA28FC2C2C19C66C715963097593A37FE4A90B2EB820AAC9806872129989F2EB12BA57E57FC67EC2B3897F26091B3282E10AAB00D62C7C8D167852735522E145065BA0B1E55FCC2AE38597E85D3FCFF5AEB484611B1C372E2940161AB2D90E5A5D4D1F523903FF076F6CBDF222CC0FA655330EB85359B9D2995A53DDFC576D003EAB6DD6002BC3919C49F63D6312481F998F3E2E4C3B400BC21F7CF0C1358AB3A6081AC08CF41F9A1F6137C7E4B4D34E6347F097E7575A48B1CB7AEEE5F19AFA5A496455513EFDF4D38F3FFE78FB5ED4943F834C57F72AF71C4600321D45A1ABFEA4934E0A0D99C980C1808CA2733BD33DFCF0C33FFAD18F8676A06E463FFEC637BEC1E1814990500B755874D8C0F7A9A79E02FAC69211FFF59C18EDDC54490A9158FD1B7D3D53C2A3CEAF354E15EB62B6078F20078FDE5B34E7C9E3365E6CA55D441E79E10B5F881BAF627F9B781CB3D378F5E9B28761645CCA4299A2476661A879E823B6710095FD0BAEC0686B6C39D6120F982E070F790DE6C25EA71382B7E7D56DD291269FB31708280840047DE4A908A19FFCE427B38A1AD13D2AA9BABC3A808D92FA99CF7C86AA67D8BE3866DC4C313F46303802DDB7E2255E588BB3F352F602226E784B2B1E77B2D56B1211BE5B53E6C410FD94D527322E5DA478295A7BEE8F361C218C784BE94566581B1C79A2DAC2B636F583DEDCD1A429C5B8E78F5928715010067305F6CCD5BDA906A14CBCCEE40A9C3EADA7363AF3F95E64B896689062D62035037FDAECB2E4A8776698642FC2809730ED0279849BB9DEE5B306458F7AA511A8D8AC30111D871C874D36D9846879645369289CDE8EF4355167D4ABC158CEC2025EADD49F19F59A56561A31D1133D1269BE16C371B1A8683853F278087494A1DA328422F61E2EF5994174712BEEB9FA0D4B18F5424EAA50ADF7C3AEA273609EB7E07A68A59A713DB373A516903F993101235FABF4BDB780C67C6FB5D44AA4E480012367B30BAD971B6BBDDA86FCD25C09768D332E35E014F8764DE8445C52F18AF3485228670A290DAF197E621A5511B587D5DA20CD087C6161BC9D5029F82BDC47818085788A5B89D5F09E818CFBE10F7FF880030E5026B3B50966AD01778BEA2C0F5DC07DB9780736C69ADB6EA727AB25EB6D4260CFDA22ADB4525E60FA5A33A9BCFAA31FFD68A38D360A03BBECB2CB22CFB6C562E4FE9ED7B475743CA9D696F5433E4881A899DA302A9977E61C89293707D6071E78E0B5D75E0BCD7DDFFBDEF79EF7BC275C2A8C50DB11E73060F9B55FFBB58F7CE4239CD82834B9F3C61B6F7CE49147B82D48136619B964AE14798151D5767250CCF0EC4800D8B2CC8094A3DB5E29DF6CBBEDB65FFCE21769DA1AF28D850ACA3B703521CD211EC2DAF3F60C953D2548072A8635C62049B6DBAE32BCA2B296011B632B6B4000357150CEC093D5BD0B4275166683287C58E3E7AD8EAB26C769647CABF68C7B22BF6DA0B4BDD728682371E67B2BF869069C096CBAE9A6DFF9CE770E39E490952B5772276E2D5E6A7678ADAC64496AAA5B8BBA035956436EE54078CEA4E6A6BAA9DC0CAC023597B76A57D3D9A2A213F3F715C8A3EADCA61839D4DCECBE20D824CCC46D4BF623C148889267107E155E4D5064E6D67EA95C67B4B0EF6FD063C71D77FC833FF803266FC3313AEF521C7B3A53B68AA1CE795C8A1919AB2566AA7220472AC1A820C2F8A11EF67A313192BECEE42FE8B4D243AFD2F6852F7C61E79D77AE785809575B9868243A4D5762D2778B301191F1A8A38EE22CD7A00D471820FFE08D5B6CB1C5C30F3FCCB0E15511B334BA400D3889D8C3C449E55725C5B65052E7ED58F83938B5DC539B38F5DEFBDEF712F91198139C01C51EF76844966C98DEF5D75FBFFFFEFBBB2FE35211881519B43C2AD99B3BECB0C3B7BEF5ADA050C4F71C0D2B3FB6CE59075577AAE30C6F37FC8E5851ECE1FA7AF886B24EF91E1F592BBDD1309AE26F6D13352F4FEDBEFBEE575E79656E9EC98007D22B1849EE66EB45305031B55700BB28C4E1AC73BD29E900C9903A3993E89A0480C8E19E13DF5554D17A60CABF64C218B10149E25F7432FD2E810E45BBB807EADC7A6B04180C93AFC557A70D1AE299512A52160331146CBD1900827F9543B7AE66916B31574A2BA8630D18F089279E78CB2DB77CF7BBDF1DF5861E2ACD84D5042C190114B1F2C06EBBED163102991DAF15605C9458D4D4754E5ADE1BD0292D02D5710FCFD65569811EF3E8479324E3D6956674680B26006A103A9C1BF72AD6758BD392C412DC8BE4B7BA14FD1FF732F76DA1FDCD59F152F4154DA3794B662EBDF0B81ADA8D8859CB084CC7918E7B2C7A443112636CCF70DA69A72D5BB62C2233FB6EBD7E8415D92DA090D7D2BEC25E935ACE2B4D645D089D326C6C54D6B6D34208C358A2CA6C2686144B08959DE117BD3FB745963DECB0C30642C6A89403337C66DC2B2F4E33608AB549D6293F429D1F9524F8DFC04253152F33F1C8806F93DE3B98AC5A2F46A607142CAA3D0024CD9A97BD39542B37E4A7D0C0A81C36AE7756ADD415194D72C9824551333EF8C10F5208BD2D165735573AA556DEB9A65400A45910F44792152979CDA45E21CDA6309F2830555FECF429E6C28A1E2064F030C5F3CE3B4F897CCB2DB70CEBC2C46256D520D168D453251D70F06ACC30601A421814C6D254DAC36AC987F124A629E2458E3FB1051E28345D2858561DDCA6D979EB328A0419A72CA65C2D2ED4D6B6218DA76F6093907A8C7BFF37BE4123CFA1CEBED7BE7C969CC23C130DED8FFFF88FEFBDF75EF39DAC3691CF1B6CB0419E7D36376151AAC12B656C12F7674A673AB3818980CFF7A832D9BFECE2A07896FC92E99A55A998F05C3560255C93882A7F25B91E652587E4E28B2F1E58DECC569CE57BCE310B2A0463F221D41FA2066527482DD3263E9C8C8581515DC64C4620E86B5364A2939E29BDD2C6A5AF80A6A781110978E262670E88FC040E685AAF01D5382D6862639515232DE5FD049313FE0AB2AEBBEEBADFFBDEF796D897710FF9B31576EB99F2392D44C09E7CF2C9175C70017CDA8809E3D490F030046197960DB792DF32ADB6D66FAA25CD4E5C8338CCAAE155062CE6E847B4B606D6D7B9D2DC5A99AC95006032F417B4D79E1264B3C0CD36DB8C8E1A4833B57491323B8D2351375923D3B3E2412B51B2483CA352C45F45C4AA4C14A2DA68A38D201383F87C516E560C4E9B52BB9139D06366A18456076C9598467F9AEFD8CBCD56CDA6CDD0C91449C14CE436D369204435FE689A010B9C5098DC496F9CF02A966008A4C8C6329FE90D7956976630F6060DC7A59DDC68128448ED0B786DDE0273C51B2585A1B3A45E5292D63CCE836CE03625E9B622C1E715909D6A0BE58D3576C102096B962CF823770C7246FD0D55099ED8E897A42C6B65D7521EE8A375B38CED90FB56068C5F3263861B0DF2A0CC0A01CDA8018C772F1F90C37884A545C5CF2491BFCF3DF7DC48B14CCFF04363B0AB7D88E6B31C0DFD5F50098B01805A3C3E901EC067BBE3CCF7564873933AA670190661B696D05242D22CB4A697DE3373ECD96AC7B308873E80AAECB785EA02AC22EA024A77B02DA3D754D4D154DBB8402D1C7A5CB23C09EE78AE0C78AE74C592892A9C129461D3AE2A8C575BDFC019592FCB3E644556F8B3A86F00170C38F2C82381350568486F60328461031FC494F95ED2B93A933434D5DCD6693C1E4F82110834C0AB9DBF2B57AE3CE490439C30D86CFC36C40ED9B3BA586A00BDB524F7DD77DF6BAEB9061FED78E226C7E21DBC99553E2987245409289D72CA29975F7E79DE0E3FC604DD2659049927063D12F2486DD2B8A2FF15211AFE043E58EEEEEFC98075ADB9A173A588D8345DE3CBAC2233218211A10D6752A64AB439F5B0E41C7A34A27047EE469C5A34BAB8DAE5486383042367648488C011A4D4CF5AC9EB9FEFD528B591644A010BE5BA6A65BB56EA8269771DD89C4D42C3DCED860EB29E163D02D1688F3BEEB84863B6F9A2CEEBA2F7870611FA2E028899A8836609129F3F2B2A3BF76FBBEDB68F3DF618558EA96F6C4FDFFC74CF3DF7D8AFCC66C3557F68C50A3D9E3455C44278FCF1C75F76D96566C6CFF5EAA4DC064140DECA19C9DA6FBAE9A62C1C06407A1EB9BF9E656C33D535A04986629CCCCD6CE05612EB070C789A00564E805008BB42B7C3D60D6FA0E9D04E3BED74DB6DB7118425036E0B959F8A9F5C8874B43622199D7004547CECEA845BE757BDFB03B169A0C269D2470C0A770F3DFCE637BF89DC9FB3F3F8E38F6337AE8991ADCB1346CF803641390AFEEFBCF3CE1FFFF8C77D2F1C0EB9D962FE350378E063E68821111E75D4511FFCE0078D0F78F7BBDF0D011C1447028B383E78730929ADE105CE4434708B71CEE60A41D3EE98D1882B22C673260376C32A1BC08B699579E502FA33AF2965500C0C69DD64D1260C2C8FE4598DB71A729F2B035603435160620404222D66CDF94BBEFFC0D4E339276961D6F83BECB0C35D77DDC5F97CC73BDE71E38D37E275C7F723F471BAB05B3A0B0F3DF4D0F7BDEF7DE0811D1B89B221B883D869C1A28A2083199C167255294E2B3BB746A6A23787A47529BE75D1C720CC0CB5CD36DB84F493D99C018D929077069F28888848B1287C4653D984AD4748D5E8E59A2A204B60D85A2A28F039FAE8A33FFAD18FE6C0635F15BC03BBF1B4A200E6309A731E2FEC4B316B09B2AE2A5F92C013E1E6052F78C1D9679F1DC86075D0CC505D00D5D738B89475B4DCCAC82131FA0873EDB5D75EAB56ADC2AEEEF886C107D5A3CB7EEB5BDFC2B90E0FB0BB49EB86CA9A7168347BEBD52DA66738D7AB8C2D3A7FB555D03257E010A17989A3AA6F8CBF3902679C7186655EC63D45826D5AA2B1981D446CF402F0E1BB064B1BFE366B1C328548CEC91618C80DA2627735CB9C7F0355A37B6099428F3752890C9EB7A6B71EB2708D45635C9DC546483DE7408DCBD5A6EA320A4CB7C9FD1D97B8C26AF6237A83E0DBEA6568859E0F64562D2539984F3CF144C6BCEEBAEB228BFBD2DC4F26883EAC6AD7ACB2CE78B1BC2344435028472968801F2A82C2E73FFF79DBD5589375BBEDB6BBFBEEBB7334B6DE7AEBAF7FFDEBE79C734E247B62AC0C645BDD7BBC1223898870C411475C72C925D848AA6C0A7DC3DDC0C434DCBEEC652F2378052F0318B56661699451A9688485AC9E14BDAEA0B769F451C6B01D92206EF1108F67E6892417096FC58A153319F0E07B6C41993D0E8F20DCD34F3F8D210B428CB245446B14E29AC835EEC1110A23F06CC2596184B3422B675DB88D6B63732165DF093A8E21418397AA4A6692D9994EB395F7E494D2F63C6F79EB5BDFFAA94F7DCAB052F1006DC6FD460185DBC17888B2A30E730DA7042768D73CEAD1EAF6301F976CFDD603B888E8230890931F2671FDF5D76747881804927661628DB5F7351840524A9B683339B466B3A844C2EF75D5CC22B5FA47735B38046372D5F00DCB67A2F81AE33AEEB5972B9953A19C65379EC5804121264349D136C3A0E767804FA9FD3593FAA95276BC357ACDABA577975D7609F9087538FDF4D3A3E2B37D8B82C8A94A8E250DC604A01CB7D25213FE0A22497033424846202CCD5DABB48ED7358541E2A52F7DA9D97716FE0C19CD69D70E847D6B6913F478D20D1A5D04812983471BC6D9367D49CED06E574F7500CC80A46FC15C17ADE03DEE81A3585F14293278E61C243F6F72714306A711646506EE3B269CDA3C2D5F46EF39E8A0836AB7E06A70E2F4F15232E5C897AD45618D925320969DB3D89A4C4FB7F9134F3C3182C8686169C6014E0E9650315F7F81D95986BB4309D13DE626CDA9A8D350317F9AB58FCA9567A35D7CE94B5FFAE10F7F9861833C9065D652D163BE37C6A8F6B9369540E507AB849A62CEEB086469251FC9A202403E7388CA5B8369681148C41942B035A279C4DA76EC29E63D2CEAD3DDA830746910D6E034B04668C3AF3E11D018028E73842233402C83EFB7DF7E51D30973D14B2216B5125D9B39FF34C4B5CA2C425047DAA88774DA6F3280D8628B2DEEBBEF3EF21131709304E25655495C9A389AF44DCAECB318923D28F4313FBBDBD212D461804F6127B6E346C0C1D2450554AD22B6C4A994EE172717775A50D42A3CD8A63082E96630A9B74D586F9649FE157E2643DBC39942B26FBEF96612B703F14C2FF7D08CF32D6F794B501F597B6E529CD934F351C99A35722A98CAD6B0E58A5D4450E3887AD7BBDE75FBEDB7071D236AE5DF5D77DD35E2646688CA0B4A91E76AEF3C8E4AC4C9206818361D6133E6DBDEF6B6CF7EF6B38BC21FFF3A1E5FBF24AB0A87B70D7C38B1744D31B8A3D64E022943CB42F268099763B668105F3DED03715E6FA574B03A02A7E95DAED7BFFEF54112C2A394F19573B3172F7FF9CB1F78E0014AB50C6A87990D054A4CE3645B98E95483E1E164D09436C9A42284C4905A6E182FAC80AFFB0D97649517C7BD831BF0879665CEC116AAAC73486FBCF1C66818C10DE228A1A74B18A223A19F7CF2C94C062FCC6EBBED16317496C0015327AA8E6002B643E6917785F8E6ED48BDD5555F0188E91EDE0F53D15A40F51E646262D4C939D6373C60666C6BE85550BA16D8699364246A151972C1066DB5D5560F3EF8206E112B900F6A5461280A540F38E080952B574225DCBE5A2E430CB4F91D9ADC5E7BED75F5D5571BD327D64D33E36A8FAC8282070473C8B897EDAC8C6480421E52344ED39D432D73F0E77AA39720181A7F8D4D514C69DD1A21D611BCD6BA843A28CC87230C5BCBB8C7A8621144A31D4D32154793A04B921DC0F3D0731CDBA409307953C888D1C15A16AC88F4D03AAFF59C220351CD069A66F3D00C525D725FFCE2177FFDD77F9D9A0DC47059A07EAE770FC407C191515FD2146A423CC9ABA8DA6032931F9846D0D69E5D3E50AE268B019DAA0C987904C4793E948BD960ACC7E985C417716FF9F2E5E1255ACCA4B6B59B66EBD6B9259A95CEBA2846C81AB03D72C0609CBFF11BBFF1B18F7D8C5DA772FDA817101F4DC22CC36CD012FE9E59BCEACDD930CCDAECC77C6FA19A9FD8D768A5FFE6DFFC1B33BBF361934D36A110D25C6997CD41A502BE498A5A963C57D6E4239681A062512A93C99799F0D65B6F1D56C153A1BCF20673E06A0A3FF48B6A2FE4BFCA44FFD5BFFA575FFDEA57DBC47E12E272DD75D72D1171C387F94941CA802B5C81D0A41ADA6DC80321158A8D35D93F5F62C931EF68F7DD778FC8B2C4EE4F6BC0175C704114A3D6E3BA073757320A9FC0915F2BB5B65E0C64561F59F398A12CDAFFABFDB0E641629EA9353A46BDD00AEB8D4A1A0EA775F4D0430FBDE9A69B822A0C1E5070340C0B683DC5B3F23CED8DB897C8B83BF8E083AFBFFE7AA44328BE5DF6A414360E224140C9D27228F88C810FB406720CC24BE66AF2AB75435B0F685FA22006525A9B882016F969BDC9AE0C15B390241E91AEA660B6A227545D42B9AA4D4455B268087A0864224C446188546AF91AA8D0DE7BEF7DDB6DB7D105A14D427872B3B1CDBC919AF0E492224D2AF955CDBED62A805C18A350DB5CDA48715128AD59581252CE2A039EEBFD0C6A2EF83403B61899A67BAD0210647D19D6399FEF1D45DBC298670DB3FA41B0BD993689ABC5BE00B52807C88376C8F151642161327333D88D138AA80479CF0D74D843E56034A57CABC229F7F0EF1E7BEC913DCD3E22BC0EF29EC13D98A5D542DA4235D2475A8FB6C96C21B355F032B0C67D1934F20A55441C916D8F6AB8D72C1A2771212AC43DB0C1671696D9547F188EC69A0D0C3BC4AF0E39B6A7D834FBFF3BAF718F1423E2001C8A5019D283F17DCB2DB78C2E659E652B0EAAFFC32C5EC015BDF6D65B6FDD628B2DF2944AD26852F98842271C36981CC15984C34144B070323E2C41640203B0A64295101B33A5305D0B27ADB7DE7A519B0C6CD11E4ECE0950E518B05F44F3075044C10CEC545E1413AE956B16BDEC4FB26856286C0391566C3155C05040CD538CB6FEFAEB13674437928A7B4B2027BF9AB3347D33F90F048D4FFB1DD90E688181E88B2E194C30269618C8EA73AA6C605C929EEB35D76B8013F61C68E7E0A84FD759594D65C080D5813C6EB51C15120C966D4980B61C2954EBB409FD58682BA8C11A7F32B95A0F23E227994D1556AA1743923DEE45F61785A7715866E5AE2E85CDAB7F072F12568160FB7852230CD62E1799D61D71D1E15CA880C518531B205AC77BBCB0922B88219B37D17CD4F3B9DBC23AA9AA5F68D5BA722A64C443CA2AE49B57BFFAD5F7DD77DF9A85BDE346A55097DCB4AE4E6D78D40B9898A3B128033658152149F8D75CF3B690DF8B7295199BCA81C2C0C962F2B5020C6EF2B6903F5180A2F54E74CFF466F0E3DE74005023E912F9956FF6DB6FBF4F7DEA5384837DF8C31F8E8404929047646D7F5E5403660925C3D927BA565720ED3DD44A6BB2689ECD217AFCF1C7D586D5B5584B44E76BAFBD96FA8F08D68318AE4A636DDD8D17C3B4F567376E40C846A59CD880D8197E49E530DA0D056AAF7CE52BBFF18D6F2047230392FB186E410D1D50DC4C6DCDB33518F27F2308EB8A2BAE38FCF0C333994C4C6D15132889CFAA9EFF1F65F16A8850D1719334696EB4D146D9C5B5D75E9B7E0CAD84F2834621BEE1DC0862941730940E06CC86B5AE3104EDC2A58C1BB4B915F17EE1CA791DEE2B108B4242B8CC5D08219422134AD8061B6C9041C29EADD0B4846B0050D34D08057AD9B265391B279C708292A93743BE77DD75D74F7EF293F9097E2390A99380AA31A8AF3940CEBAFB839F34C74DF33CB9C5B8D7421A97FAAE881AAD97436A8B798EB9F454814E59EC273EF18941AB933A3DA127216BDD0A3208516653A020A62756DF731D5F1E3CDFDBA8E52F891024E5DBC57DBE94B9370952CE515303E0C116C726E1B81A6607623A611FD4651BF74EAEAAAD83C48759477B3C2903FED4534FAD559AFEBEFFFDEF8F342C5F69BDCC7BEBF5E32EBAE8A2DC89B5837C872A260E7C9F7A796BFB673EB3F6F9491B92419C26CEDD4A4FC5494B40F01936A345041B26C484072B035ED3DB110EAC7D386E2523AD1361F90ADB5D4FE2C0BD52F9F1DF6982C6DEF64C6FAB034BB0C01969662C73C0E0C73D79A4BA540873835C44550DF220910FDAA2A3BD6CBCF1C64F3EF924D64AC891557A8880238D0A7F1CFA62460E057BE28927B0F9D55A2E6B7A575DFA1FE429950173A3E74B81D8BC11F332AA6AF51057BB05C42A27227CEDA1871ECA7CFEE44FFE845FB103419323363DF8E083AD873E487FF41C57FF4E3556E7EC53A982EE87C30CE069C2C795731EFE61D0578D7E023BB1D942CA812C4168B2DBF985ED1BAD2F6A44E8AC538AE42257600E48A355E55FABB4E4FCFF3F8B57B857973EA29F02A0B6B5E73FFFF9BC54011FB2A88C42B7A8EDB7DFFEEB5FFF3A965BE2B9EC20665552ADBB78ADC45D756BB41C5601AD1F8477692EE3ED471C71C4CA952B4D8321D5C1B8B636A92467DA9F871C4AD77AEC462B061C2BA64947AA2C5F95FEB6B030B2546F41C6671B8D5BD7035AA73BEDD9E14C6E9E45E8F9B7C6D0D52824A26C10EA1745C5B57AE74D22FF434DC8EE1DA41D7B3F88D1A6623A4C59C6F62E53CFA6E3DF82AE65D5545CD74130E0C1C1ED37BCE10DB7DD765BEDBE80810A330FB61FF536B80282E3B804977121D251431149A8BE74401CAC5988615FBCD5DF392E79ED4B1BB70C2DCE51C2F6B86661F38F51AFAAC1310FC10D40B09CA1CB4E870BF82FA2FFA0EE69669B0318FCA40F04920A4215472C1B113E61A4029963CA01D8422B13AD151CEDAD32EEE5716A8D142903204269216794799A1035D7BB0ACE95FE8303B23CED345C82017B2AABB951DC501AF6430DF5AFB141223CF413640307D03E75FD2A590AF6418351990831220160F03F1FF09BCA6B463D012750C2F8C44F6190DFFEF6B7DFFCE637DF7DF7DD16DBE774C8715EFCE2179F7AEAA9071F7CB010A8957646BD6429AE7D80AFC112DD49DE3C5F4AFC6A8E1E24B262CDAED15B83ADB1D4FFA8B705FB5B13B4F20EB0ABBEF75CD16CAEB9E69A7C19626A7F72823B9E99F40CC7A51AADF4D8638FD5D14B6AA336AE9AA18CC161D48B99CD3A9FE39EB9D1BAE162DC43616BFCCBE0FA0795C54B5A94566274746088B9D87CAA9A4D98F90703E83A40566E6ED865975D427091F5CC753650059813A8428003B30A10DEFEF6B77FF5AB5F45D0A90C58C8D3A4A8E6B30F7A21D46ABAD54C5703439C79858CA685B65801A0D1247A2ECB37C3BDF5CA4D18C3C7A564D5B362E39FFF45456B91644D1BD36C75D16082BC02DE667AB1EA6F0DAB5E33D5F7699AC061821EC4B44FDB8D5A116E2A41AC34AE75B6A728A0CDC660934170A6B610C0D27A655DDAE7A98751FD8DD38E8D84C9A81357751CF7243C3B9F15A35D452BD1B0DAC9D659671DE2DE2D116AC67935440F4A280F36250A74F6F49C73CE39E698639050338E1663646593D191D40F38E0805B6FBD35DFE4F8604A51ED6825F25CFEC7A653250A8195A234BE450383DAAABD29AD692F9D111A1293D6654DBBF3CA80353829AD5ACEC2B023A7417EA3D558E71616C66A53266831BFE2675BACA296331F974A64B842A85AD82682AFE98B9A240720857F60738688F9769478743E037AF4CE9A05AEDD11ACA8A2CC2F4F2E7CE16829588972409E99342C377E08B3B3FA18155158A9E8076DB47BE6B3F52E46A3A034951C212FAD387A7465B6DEF0787569510A57E6AC412AF189CC4D0A331B2BA0D5B0624BB54C303E473BF7E7A73085BFCD0993FB82F416D0E26F4409266D78BDEE1F83B969076465CEC0EEA8A38E3AE38C33DC3FF30E2555BA126765E557064C3C170C9BCFFFD765F1222DE25E95FCE1CD023E7A2330A45B0F0808481907917E28EB765FC14E72D145174518F2110DADF5B83A5B832F82F7410B70259B4EADD06AA31BE462896AD54E45E1FE3695C2D8168B2DE006A2DB486F07E04C75C58A15A79C724ACE0CAAFFFC686E20E230C85A3FFBB7A2E500FEA87438E011D5CDD4C2F8A900B1B4AE667BED005F9CD73FA4CA5299E5A8D4F2AD0603566DB6EBB847B504FE91BAA2ACE711F3C76A0CBF0CD817D91A9910FA71A98E5B8B29D25B0D73ABDB64D93C2CD824CF60EECA67FCF7031902461B7C7BDDEB5EF795AF7C453D58D34525FADCBC4486A1C839700087B366AA114D38A7DB6EBBEDAFFFFAAF070DBC9FB413236CABFDA9AE4E91CEF3921BE807C3718086288DE99EF7CB566AAA54B734378F27D16103060C9BE7A506FD4A66255C9A25AB21AD566262BB07B9CEF51079102AAF9DC58047BD48AD5138F91C95F4D1471FE538032BA326CDBF50FE803560D7851DDA040F564A9C8AD10CF26C339A74900316A89C9493F203D4A8C15EB5E5965B4603C1716B04B26A40C85DFE42F15CDAA69B6E4AEB8E8C5CCD69F2DAE863BFFBBBBFFBA10F7D88AEA64601D7DA88286348B15870C725A4C34D69250ACAF1179598357EA013AE5AB56AFFFDF76F93123DA3B9A98EADCA629552F36E2474F01E0116528BD21C886447EFBBEF3EA69BEDC966C015ACEEA6C1F6FAEBAF0F9F33916B9A6E6AFF91D18E7BAD3B05CF59B1D379EA252F79094A7920F80F338BF7E0830FBEE1861BC8239271EAF35FD3BB29F0D9361218AB89A234D38E2544D6B9EAAAAB54A643A46878803B202F0A61C54DD84AA007F2074E1AA29F80BC6165AC228BCD1BB17352EB67F554C1F7B95E460A88B1709CD30AC595F5B69EACE9E399CCAB5FFDEA77BFFBDD471E79E49A491F313C256DA2303DEBF65E339E5BA87683E53F59FD6C4EAD6982F5CA3D5893FC462BD9A8B41077024B7843444B389CA6A0F95ED65FB560AE37935FD33BA4D6C63BF9095F06DAB3E48317C15D02FF3DF7DCF3BAEBAED3A8058630084697238E38E2D24B2F6D5D93B647A135CE4817017F8800627FC725A0A64DA4F24C06C3497EDD6EBBEDBEF6B5AF79E8A61DF0B927CA04698735A05D741D95D646B38C0A06D150659A54341B474A64FF7A7269BE53CACC879A3C2ABF57128292E2D4E4842E5BB6EC8D6F7C63DE72F3CD37A3AF703F2154A86BA8BC0B8C2BDD0EACB00830253E9501570B10C03411A5751502E5CFB098C0C1EA81D599854FCD90DAB6300DA915C77C9544AB6C3A8B016BF3885C1BB4D143A14EBF56694C591930621CE5C103B1DD77DFFDA69B6E0ADA10C09C9FF6D9679FA83AF2DA6A86AD7ED68A12C6A3F88D12E14E3BEDF4918F7C8482A6D92FE533BA47FCC66FFCC6673FFB59D229717265F07DF7DD371330DFAC36A8E05D942B01F8957EEA75D6913CD7BBCB545DD4E81FCBB3B8E3EC6C35530DD8193BCB21A5D5CD4F63B8F4E2B452177EB07FD322527D8151F5A8ED1E6C834D90262CB36ECF0A246EC3D9C5155E4D88D6208BB74D1C8DF2E045CFF6EADE201DA19E0C849A6BF10F3F8B972285AF78C52B9E7CF2496D53F686AB26414469362843457E8CE4C16271B4CC4FFA610DFA564A7A1C6A6ED23A09D732E49B3A59F9E9D65B6F0D1C5AF78BCF9742DC35F3A41E2AC82810D60B50AF51EFE810200474F8268847E306D909C649CECC5C5B401C1D6AF578818D74C03072267FE7777E67101832EE7D619599D62C593EB7758117F9A3CA589501CB7E64061C1CDF45B4A0B60D369A4DC400432D058B630F188C564D193CB7B1351ABB0C3CD47A46ED02AC794CB51622C023B556EF768C1AB168980FDF18BD821DB59AF44DEC19F7FE138B0213D92BA24CA6044FB2C79A818A6ED97AEBAD177A97D7FDF66FFF76D417300AAA322EF975302DB82F8380AE864C06D3727EBFF7BDEFA12B33134552B33C060E85D1C29267A31E053DB7B006351D415AF7D1045B76DE79E74F7CE213A385219CE6170067BC4588B690410897C1F9F01B7FD50C304899D3C8AC605A5757A58A7A4C24A46B7A056F0C729C3B77994AD4D12F33139A855B4C9E841CD48F6A04528CE04BB88C9DCD50273226C8F9C217BE905C6DC829D8482F1CEBBFA23269D5A86E752C94014BF0E4873FFCA1BE98DC6FF208D9CFB5E14D5B683068DDD638D7EB3CE72F51B1269E09ABDA4068D4735C45186DDA5ADD399E4083115078461664500DC70055F70938627926C9215CA1263C706EC58CEA0C5F679D757254E67B6BE175D75D97D657E810465155E4C809C904082FCA651ABE5A85E2E72CE19ACDA60C37015C681BC1ECBF9A5CFF1765F1020A6D5338B410D5C793AC094207972F5F7EF4D147A3777236D80E737E305A444E923EB27CCC0F19879AA58A99B921F26C3430400AAF0556E0B7F646E321B3BF1901EF206F37A4A2CAC215B5F8B2367BCFFC831BC1759CA0185A58E9B3168BBF9AF424696322B04673131DABF729CAFE52856DDC334733CFC0E4D8638F3DEBACB3C02B9BEF6A57376C1BDBDAEAA992B0125F6C776DE256AF5E4F696ECDCFC92E87223FF2C82384A91B306CAB3E8046317A4455D5BBEC3BE687908F3F9F5CB927800D4C7444C157742EEA96630E215E51FAB122E0E5C91C429E82691C3A3466683AD4CAB259AD8707D7441D031D46BDC58D1E25432E3805E02477DA8A95652A6E42E6D0391043F3602016C232A8AA6FF740399C5412AAAD1591D85AB6833243F2F58037F7835138BC38AD708BEA7AA81EE581F9BDF5CA1E468788D50804EF7CE73B7FFFF77F3F4B4656184F8A8DA3270D82D17252328D37BDE94DD1F0502B45B93C92798E4B0FB11CC30F7EF0836C7AF642110A06896C074719046A4D5B37A779B0555FEA0C757E9956C00D00BC4DF5AB08D5AA15B907C75CF171BE57FF8588E51199CE79E79D77F6D9676371945E8D4BB806F447E9D3EF6BD388B630E6C08C41B92065433CE04638016DFC35C01398581BBF2D0C05ADF19BB5FA349134DABD01636DCD37EA65BD49FD78564468DD3840EE41D61FB488C653E7D74A45BD2A6FF2326606EDA84D575AE9CCA3F91EDB66762248869204C7AD40443DA7B8749BAA76AB915DDBEFF4A5E61D08E671FA87288E65B1E79F7FFE49279DF49AD7BCE6FEFBEF771747FF80B378AD8AA0D46FCD3CB01F7409DD0985624A882091781E7AE8A1D0EE00A48A59E8614621F23A7C3C19E4CF2617E7936E7AC493433121BBF63D658FC2297367F84DC6C4C9E1BB68A433705FF1A0D57AB181B3CB871F7EF865975D665E4DF537D713BE682D49A22DA4654833ECAFFA0A5BF3F18F7FFC9E7BEE09AAA3B504C299003A37548393A3282DFED763CFABD97D2296414E363A608F782A311D9522069C1DB0257CE5CD6F7E7364D9134E38016300C67CC24FD8ACC027187BE28927EA21B3E6FBB8C496337E3662ABADB6FAF297BF0C0273038998B4D202B570762201CB8C2FB9E492638E390642660FD4AA858F4B2715EBFBA036D568C40CBBD9669B65B69FFCE427ABD9B3150B271B542914E19CF066F2BEA44E84AD5AAC43B3D09A5E5D0440FDD2E47AD5AB5E75CB2DB7383DE8A97D295AA98D3CD70B5968B566643DCA7C9F3151A6ABADCE6EB294D7B76521F2B7F82CF9AEC6EAD69510345D2C4F35382E38969FF6DA6BAF8B2FBE581164D75D77FDF4A73F8DE2483C94F9B2226A35500FEC16D33C12A582851B9EA6AC6FFD4B8906C9EB10795C5799C36FFDD66F5D71C5156D4ACFE6D5A142C1EA903B5C8AE31E21DFBA2D014C43F4648B15E302614819F1EAAD383850ACADB837EAC9CAD0253116D021E2E33B9836D1F357357775E953DE7AC20E084C1E0A3A3A2768C71D777CECB1C7FE1FF6DE044CB2B23CFB7FCFA9ADBB676355715805C40CF0810A28EA77B99004138D06302A268AA8082220209BEC6E8323BBCAAA28E03F1143142410C5200105090A61191411148890A808220333D3DD5575BEFB9C5F9F9BA7ABBA3B12FD9B7069053B3555A7CEF22ECF7A3FF72319E21209068A000C529D2976BE7F9A8192EA1C861970B6DB6EBB9B6FBE794001F3B41C89CE8F2002F804D0402CD3A2028EEB6EE4796864CF39E71C16AE3E9474D684A1B09D961FC0BF1455A7420CE158EA90423A2426C3075E980BEC162686EE6C595DA4E894BEC3E9C40CFF9757F1226E486CB01974ABB4E0250CCEC6BEE8A28BDEFCE63733C25A79BACF4816C65EF21DE2CA901D010AE1C218848269F9741B3A121DC338C7248A4E2E8122EB8145462595390523364177BEEDB6DB4A8BC826000C4F4182EDE5DF844BD260C0546728B06707FAF131DD1A1C66B6517746632500C689A4BE362634AA7AF39AD7BCE6AAABAE7229B95FAC64EE3CA28A9065AC768C3C135C385EEAB630D18A8F9E282280781553DFAF5BAFC7C131A4C5184E7F8BB395EA380D67C029E101D173DE59EF78C73BF4953499B53579FDBFFCCBBFFCE217BFE8EC43C42B19141653E614E0917B2205E3E920C307E3075E11F30B705D5F39599E82419F6AEA5D521844D77445C3CB99597DE596DE0862144CF4F61861C7D51C528ED22F85FA3ADB70DDE93D16F9D62128EB121C74B4237F0D534D43752CA42468F48461C70669561D058E3FFEF8638E3906D51B69255C3421B951CC54E99766F27DAD805D04CCCA61BD791FD95CB31CB06E739A63EBADB706103090A2E6133915B208FFEDDFFE2D464DF8B9CBF0FC22CC895260A9CF08524B814B358A0820AE45857877FF5DC4B8CF63C112CBDCDD1DC49E8664BBDE20C1EC40CBAE958FC13F9187FA2B11149B84B24F391B26265804D2A0F815AC90D26EC0E22B022A123341637ACB2DB778555125FDC217BE50BA5976FAC73FFE717761C442C942B129781962B3208C8AE9B03D562D858F123A04F4E04CD7615B6DB5D5F2E5CB357CA0D2ED0EA24D99D41D76D8E13BDFF9CE6CE92543A5F43702EBF35948791C84C45B75BFC648E3E2F3FC0F56F192A67DF18B5F7CFDF5D7C3D5E0C212F04AE06ED0FA0455C88E20980C1E910ED0875B6CB1C575D75DA71F4A11DA2991E696896D641CB3C0BCE83E77DD75D72BAEB8E28C33CE78D7BBDE852D92D78447561BE69B743712000B7C4B0F5D82D8FDBA032EC9FE39D04FBF3E9724CE0A16AB1EDFBE6FA32633B7FDAEF7EBAFBFBE46C606073AB25B378B754DA7531226817AE94B5FAAE5C766C10FE3B486D9A396A27D594C675902541F5B89B89241D6EA81071E0850563E34A568D11A20E0E9D30E5827260CC14FA2BA0CFFDEB9039CEC343D3E49008D15CB43C97FD52D495B982A9275F28A57BCE29A6BAE49D379A0B4A840961A139ED77C909A29EA85627170AB6E59ADBFD2E8FFF88FFFE85CE9739EF39CD7BEF6B5175E78218C579A44DD004DD4C115A60A3866C248BF242B75663D9DEEF06B5FFBDAD2A54B8F3CF2483DB2EE6D00851081BE186AB184BD31BD650BB61A67E057D622244D08B31144B4099B6A6CBF97AE0B935003C03EACD449B29032C3CC1DE6386323301D98262869FDF3E52F7FB98433D98A58EC3BB03C06DE3B214DCB45AD31F73FD015CB3A991A2484BDC5F198F25476388BD10F645E598DE286DA05E169D71FCD1D8B410830B806047DE4D0B1D56ABFA6DC8A93C8AE87D13AAB898670855DCEE7AAD76C3AAF88EF16D43436071D7DDEFDEE779F7CF2C96C0A9C131DACAD271F838D1C738E56B12904F0754BA0C9E4FD1F74D0415FF8C2174C0DE9DCD39365A058A064EC748A9D77DEF91BDFF8069CCFA966EC63ACA5D535314C838372CE596A096AD1CBF1C5ADC1BE2622E798BEFBD6E9739DAA5FB7CE8652C472CAE93A2C3EE60CCCDB21871C72FAE9A7CF5186E45B725D0D05B27328EC08476AD4349E34F476C3F9C89005B722E1EEDF65152F8925A237ACB368959BFFD65473BCC179626079105AD292B3C400D202D08CB8EF3A87B1B2713B10255E76A4A8B3BAED36BD8AC9BB93CA65DC64AEC96833B4E7231FF98854B8CE496F699B9333B25AA6A7CE2599EA1400F503BA04FB4A776ED4BD798B5CC20F28CFF0137697C42E567056D338474D4F5C1AB05BAA238A269835A187D786F7888E27D0A711D0AF7406E22BDA6E9FFBDCE7DEF08637E873B606672080E60E83C615CE285EB16E37DE786342EB7E46DE60497069B664117AAAEB3D0198A8DD71863029745791BDCFD7D5D9DEF8C637DE78E38DACF9B8B374CF78CC3476D48338BAE0940D5D92982C5D4543E7CEC1A83A074219792DB3DD77DFFDF39FFF3C0EA5CEAC25670317D4926E12107EC45B11EAC42C33B493035CDC85D19F6A7665A4FF4E3BED241F4EBF32394C5EB3E6C9BE84CFCB33E240AB438EAEFDCD43FF72AF256E4FA7CAAACE04C4F3F557F30E4A9C5A0C1D492E899D62FC1AE26B9B6DB6B9EDB6DB2257579A093D970D61DAF989BB89C3B9E491CFA7B3D246CAEB54D726593FC5826C1C41F2774EDB63C138924158056FA711F8EA7D15DD8C163CDE4511988E06C650C7BFF295AFFCF18F7F2C139088348E9FBE92A839E9A493880D68DE1D3CCF03BB08D2833E1CBE0D53E772245635FB9A9410A78266DC2617E69A3B8B9B3D826BE9063456AE0B2DFDAE54FBF28EF223D00D54F6704499124BAF588BE6524FB581E396C54C2AF8755208EF7FFFFB659C5AE701C48F524CBAEACA2BAFC47A4A432C5AEE30381B084BC793571E684590CD596112C90A9C5B72B5007C1A4462F52C203F5D3DC912B7136CB6A3F4FF43156F5EF7C060C5E3ECEA36306B3C35260F8A90F5B3CF3EFBD0430F85CBC9AE24A600B3666A5C27419920735C609E4739324C1E193317BA379074A9B6A84066F5EBB6E1B1ABC18CB3F394B8247598C6810CE5AFD969232250E03BE4B6C103DF7BEFBDF0CD16752B18EAACCCBC86448097D132C8B2C6C0E06C3A990E43E1A252F645AA70E37A2F1790223AF2DF1A7F424A7BEDB5D725975CA2A78888EE8815E2D29A23B980975D76199975AA5910A31C8C44B0C3E100CF404494EEA25A9671B9B2A7244AF4B9B9E752C8B8BBC542AA4D55B74A33034324A3272D02F2438FC9B7F6991C190239A1E988C8525FDD5C407A435F905479C94C0A67A317A1665F2B011EC1BC7E393C468835AE28264EBA102204833171B5E1E5C7D0D498E455AB574226B1C420923B1274443AEB66C85BE53547A976FD11471C31503890D50C0D303FD87C2426CC318E1245FD345C3230A0830D5070002636CBB14DCF4E71C32BD789D875190E2E6675FD2A9E25FD159C1965D7ECB2CB2E175F7CB1C57EAAF14D4EF6BB3C240A99816254DE5075C90A27F8AC6B5162600BC07598455D5363B8BBBEA5850903ABCB51CF69BF9F554AD7610CAF543576F32DA1439D9BC06DD0A6D009DFFCE6375F70C1053C38FBCB5B60AA16D3FC38C3FD3D22509BB9E17367A1091E6AA4B4DC65815E7AE9A53278F1F92878E2BE899660777B436EB5D556B440C011D4577419A3217CAA8D6B549DEC323C6CB63D9A6036856A0C21469CB6258D57E778459C73B45575123DB843197250CE3FFF7CA84C5EF292975C71C515AE7526B2DFA829A9532826FBED56F166758D1690756DDA534E39E5939FFCE4BEFBEEBBFDF6DBDF74D34D455DA14B00DC56306FECBED0C7DBA625717B6484697A3480E79E7BEEBBDFFD6E1D033A9FB4535EF1B1110020686F620A89FED7BDEE75140EEA782D03CB473C1B22190672739539CCA35F9F4B52B7FD9B74DA48A1AF00410ED9D4881E5FCB72DF21717DB2E38E3B7EFDEB5F970886D79AD0A24B0E9C76B2FD4E3601D5AEABEB54008E08FFEAB464FABDCF9929BC70EB2A1B3AD9F4EACF54E372B102BD08D9922E4CEFD54CBC45E019D0E264E119A940481F9945DEC4DBDF552511E88E41E987658A099521075848C41B18C9882CA3DA42924B1B96A1B6370C2C43CFA59B876EF62FFEE22F24C1914B2C369D64D75D77FDC637BE81C4742C0D9B80EC581ED82B23AAD419F448E8C162D302A603BA9347765A3C5096AAA8252B36FA29D9CC92D48A049C9E022F27864597F8E0073FA8AD27A14AA0058CA44EAB0191AD43790C9B88C884163695900399D11955637CAF830F3BEC300DDA0F7FF8436A2C91605EEACE61A3CC986E4BCB819E5D455D4FEC959982196DCB4C370FF20BD80742D29E9EFE42392EE176EAA9A76AFC253351D2B13A390B8D3178B15A9C9EB7ACD0C8EB0C7123BB501059ADCBB10DB10634ADBABA5C410D8B911C28FE8849E272B108C2B6027B903B643CB91F23C8A63C60E78DBD158DFE75FAD0861523CE1EF30FD99F2E7BA263148105BC4696940317AC426E14D96DD1C03DE8D635047A365A9F5AF0D9EBC5399BDBA325F5E88AE91959FE7945D88B611A5A2BFD8AC0BD5F1323A3F22911C130840DC0848BAC42172BA7E9BEFB6FB78A97B02A6BAB5F37618DAEA74D3354380208FB00950081D130AA330B0536CDBA513C9C70445D8CAC612F45CE36DBD1035C69EC586E7ECB2DB7D4310EED323E03BB68E0F594B8247F2B9D366253C554F3B4442654737BF15BDA8CE7814137ABCBD90714F0E1871FFEE52F7FF9073FF801B38F382842BD38557CECF9BCE6F093512B3302E3430385A79E6662164B75B3040343F0F501EB31BF6CC0013BD5DE7F0A69DAACEE2F69C590050E45861AFDA739225C44741D7DAFF7D40E6DB0C1065A0F0850A7EE0648BF63DB731BF7DE41E0AAB0B9B96EA4FA8AB2CF5D25C86B127B937BA09323BBEC374BC268C7E99E351D6CB739B25A067378A7F01583E97286D813498769A9534011F19EAE0AF1C2C8026F0F65F4C813DD309A40CAF8C8238F74C28BE78A080F472FA84D8A81E268107877C7E3535DC7A1B351E58199A59F50A4A0BF1A7F5984AC0A143CA33D801C8C0EB4C61C7BDD483D4C4C3D23336BDD91A6974DDA86E36C9190196F3BD611A51AC0E14BE07868D84109685D69C1BCFAD5AF96E364AC0F625C17D29106B17B9D7BA717354509E60EE6ACA36E7A0A80B4CE06A690C3F6BC93062573EF6350E453A5EBA611E8864E172940FE064412C30D9684256B5C9C065DDECFA73FFD69943C862A00106226146B3A61E3058127413D89771D2F221E8062CC4364F0DEF0EB139FF8C4FEFBEFEFC88936BFCE3FD0F16D406C5993C9E9917BE45D442129EE8203326F7DEB5BAFBEFA6AED04DD152AC7A2AD984EC31D6B52D36FB58AD721539D1C6998D77C3DB6B0FC68B60401A9124FE671E274B345F94B151DA230329DDA71476FD9BE493510433F07DFEE6A6C77FE915D058130F54288FB7C4EFEA9F414B924ED0CFD163B6D3898E1BA9422504BDA8562492313919E03A4AD11508D2FA5BFD47EB092DDF53D8586CA485B42A33ACCB19C39AC4FCB442D0FC317F473ADA86DB7DDF6D65B6FFDC0073EB06CD932F4B49781716AA8077D8B02886A38D57EC080C35D4C6F9CE7DBCB42F389E10E2EBC81FD86D6D4C4F7908694E0B33C588DBAF4F6DB6F7FC30D37F87162E226D284C5BC23D09648714CC0C30D0D753C630EF7CB1C0A9813127C223026C18A6EDB6BAFBD3EFBD9CF52C7E2044144BF0F30A8DB81B3F031218C05B21EFCB4D34E7BCF7BDE93EAE6F0441DB4C22531CE3CF34C39588C959E51525E9B8B9333594ED5B13E6DED919ECCABAEB4367A4093314A3C29910FEE59527DF7DD77D7CD0CF039731E07FC4843985E2605A68BE16038159598831C3CD09745E741B4BA194FAC2F822E03F42B56A6D73051A2484793025B1C99D081EE3E5806FD9A53081B081BCB028AA4AA6D2FA6CC311E9327C62A6A22554C3D883054BEE36D539BC492A55FD365392BC0D1D6C438C1B1CF2B0657AA1BEEEA16A5C39044845C98D44898C95361EF138863E8317324D3696BE524B6135D267F70D06C4631C4F18EA273FC1C0ABBA859F2754E6DFB3BEFBC3336ABF2CFD9DB916234969612F477596DA36E758E11C090321AC56FA38A97DBC3032036E540902BD6FD4FF707F4192039D1FC522232800DD16606A5E2042D06BE69314821EBDBBFFEEBBFFEC217BEA00F1191849ACD666A2BC19524A4D57D3FC4D0BAFF55438E5F9F4B5293F8BBECB481D30FCC180C9AFE9E75D659084D5E60DD4D8F8728C7008A0921EF5BE7EFB53564EA9D73CE396CBAA2E20460D82375C3C04B4290AEE39A35F94C32467575F4B159D0B5D2749FB81AB83218342C03FBA658CC4004528D057310E2D754C0A6D5C38CE031355CFADC818A33CE38E3B0C30EC39F4855C8DD4D82518A2EAB8D319B48091063214EB512C96372317CD155B6C386E5C66CB0122C3FE7593514B63BEDF14870A151089803AE6CD65D0B9956E3CFE3A27558657860F5B936A34E4B8D5C9454C309B82C54AB73DA46DD1A928C460AA0BC546382086D62DE7DE8431F3AF1C41363BF0A1D036E94F50300C2D068F39977EB5EBCBA377D059A5A6776C0390FACC8A96E1C3440244053F9254B962C5FBE3CAFA9F2B50B6201A1CB0D623893556AB7981F22228C6907A9CE3296B404812879F5A217BDE8F2CB2FD78398E7806D68320993FF732ABBC58C8F4923082993ED4EA1FDB94C968F7DEC63FBECB30FB9734746318CA62503FCEAD62DEECD6E3310F8E615B734A5C718D40E2AE2D712678E29747836624D18DAC8E86896C8C1071F4C5304EFB1D984CEF08BD0B7CE89C770F6D967CBEA8F2421C3BB8B29DF72CB2DA505DDE22DAF59676D9D4560023FF12364A1B16B941411DBF2DBAAE2E59CEF7FFFFB2FB8E002AD7BB2E38E3899E5CAC21175C5ADEEB0C30EAF79CD6B8E3BEE38DFA40BAE5809175E78E15BDEF2166C3D5D97D5A99B0160A23D8038F0AE6BD40DB7E100A291A7C3A10E49E9A10887B8599E157C73A656BEBC8AA7C22569E85FFA9D77DA800D0A75EEE732108C4857AA5984521DBB069F4F885EB24096AB96AB7940BD0DD96886476052CC385C805090CE03941751F8C6F887650DA7C5926331687C0E3CF040AD498A1771473C2F31931A5588EF24D5904C33C445FD67A405013DB68FB7B94B3B6CEB6B3476DB6DB78B2FBE982564167A6BACAC26ECE5FC6C43F4AE05BA8163E8EC285BE6C669C6C890F6CEB265CB90F5DAD1A67EE360B886B83D4E2B0BE3BDEF7DAFBD5B929D7194A24937A0576C736352DB7503314E1B2BE863891122E80974A5DA41D202F8C94F7EE29FB013590C317AC7752D16BC6080585B9A99FECFED198A0098A73CD5C03D53A6A4E9762DC7D0BBD79B853D8299AE93EB13F2EB3CB50676E79D77D69DFCE8473FD22E83BBCD2158CEE3B079A49A48B579ED7EDB1E649247BCD7752999931BB6D34E3B9D77DE79AECE7732882431F873F8D7088AE8A1604D318179AA2A91241E7976D80601A32190CB840E2B381614BAF8CC5A33A6646238C51236ABE887308D750732664924EBE0D34F3F5D2B0FF64A3D1B626E009D48D1855E445474972480757F5C4547CE5DF86BE81360139B026CB64F7FFAD33240222E20FA318D5908A59954CDF1669B6D268B0CF506A40207976446AA528F68BBA2A622412E63BA1AF0493C60FBEDB7BFE69A6B7E2B55BCD75E7BAD5323443F58EE4CB3AEA89B973131877339E3CB3443D1DC71A41A3432817DAD0449195DEEE31FFFF841071D64E14EB081F5F3CE77BEF34B5FFA1284F8B2813EFCE10F47351049095268AD5AFC77B9245D6393FD8F76DA90072C2346FB9FB98084CF917396A2FB1DA5DA0005E59B2A235D934ECEDE4BB4A8DB09F76B76B0D9548543BE909B724E5E8E6CC78CA9090DAC0CB2BAEE22D5580A0BE58877FD751430F8065DEB924B2E79F5AB5FCD09A9184E35BC9F2D63E329C23C354AD21C4C6E541BAC0DF21DD114C8EA0A13AF5E575E35EB967670F70F945138F63EE3A872331CE082497FAB413EF9E493F7D8630FFB4F8E6A60D9DB3122D28B168C49A214A205C6F7EA257D7FDF7DF769CBEB0CF2A8A4EC630ED8F9118BEB46DD578AF82DB1137DAB1D74CE39E75025E1E1C2A9D03935DA3A2D7A859520114D2CD7D8787DAB6B0182E15988ED53F16FE23CF76BC1C2369E2B8EB323F0261848759F3E9DE1539FFAD4DE7BEFCD18EA00CAD0C94B6A3C35D4D2BE3647EC39E81EC8931262345C0E3C29661C87616B5ADA90D9D5233B2BAAF5A981EAD56D8FA98BB303069F3129F654D90DA9CE18028945CEE3BA98495B278C7C20DE1AD9808512EDA0E8D49B7B3ACA38C7EE8CDFA33ADB959D26DB332C2205A885338E8EE85E79E59532705C730C9B1581D65FA7F037BE1CA38016437FC901477B33AE89D94EABDB268B89296A2043162AC98A9A7D0659469E4F8F0065074DE2502A7A4CA9F3BBEEBA2BFB6D54F1C2EEE63BF11400BAD10FFFEFFFFDBFDFFCE63767F3FB677BB930310BE5EA3CDDD1471F7DC2092710BB2680C1EE423502DC73F953AAF385A6124439E13D476E0744063B367A12FF3D2EC9FFFD9D36683BF1FAD7BFFEDBDFFEB6EE109717B5473A8A548EA5B0E4AF54A004043DF874CED7BDEE75FFF88FFF38E3F4917D1F0851E20822B38C73E9D6BDD0B5611DFB8D403F64B496DFC61B6FBCEDB6DB6AB42522678BD35A740C84A01D0F24FE2673FCB4D34E8B5076F7724F352CD1728D8C8696BA6690C23FDD9E04F4BFFCCBBF7CFDEB5FD7D9069AB80CA84CA91657BA6FB4D14612F1D75D771DD2DFB5AD8641A51ACB33E3A8FA18D86D9199F22B64DC64554117F4A260ACF4977588983EF2C8236577E6A1172FEEA3336836E6F2D0040285119B03BA92DBC91D8204C003B350A4804F6658288F060214D30A6D8A27FD8637BCE18B5FFCA22D0F6F3ABF343B80AEE5C9ECBFFFFEB40090F039F1C4132596413339D2604565DC68348FE2C332051855FAABB5E728A9CE06F894C563DC560A2024322628A681DA39589BE2B3986D5ECBA0A8CA40B4A21A3505298349413911206D679DC79560D626BAB1E38F3FFED0430F8DBA031C835312A9F62B22FB9E79AB9C9E670D64F97456B6BCA68232B92B7B430B48A3AFD58C700725EFB0ADBD7BBD077E49365BE69B2E7348F5E2318E3BEEB8238E3822051CE3134F3C3E3636B268D102A92A89A046DE5AF1B8F48D2C03ADE609F9B0E3135D69642DC8390A7FA9D682BD051B39866E28A076F01D1784340650EDB913909E0383BDF3E93D34E236B60F073D1EC38D1406EF6E5CD56F52C50BC494356A7947E0118323555E05A4484FD5032EEACED046B590E13019D331C71CF3918F7C8492682DD99D76DAE91BDFF8065C33BE55DD8C9E4BABDCAC370E66E82F0A3B559C47A81FD90AFFF44FFF94EA28D66FC225F934EAB4118BD4535D5D06F61E509295E8CB5FFEF26BAFBD9675F8F6B7BFFD739FFBDC4007AAE1150B21A5640175B1C6E64427D85C6CE62FCB437B41A0A49A0BFBA312D63259E65E3C7153E8EFB265CB3EFAD18FA69A224DC2FA4FFEE44FBEF6B5AF6148C54A62061945EEC87F3CB9593CD92CE045ACB923CC871FC635A36FA1318A27440D14751BAB343BB40D79E28C8086855E021A4C32BE60A3526D7B692D49E87DF0831F4CB51A60593AB6EF887716F85607C2D17CB5E5965B4AF092088023C5FA9E2B122C0423E2F80A5BD8D866B67051B36B39FCD09FCE660F77E6273FF949D9491FFBD8C70E3BEC30605F6623C0DCE41212EF1A040744FFF66FFFF6AD6F7D6BC43751D21625A4C348DC067F2FBCF0C2B7BDED6DA9D2F43A1EDA25576003F2A09392B14BE0ABB94A5E51DA018893C041CE171505E6AB5EF5AA4B2EB9C4B95442F490B1A4A056410A139370488633C343E911D013C99C3AF8E0839D4DD026354075EBADB7BEEDB6DB8ABAE005358A4AA5C7866EDBB5F2940C3C592CE18274630DA2F4B724627009A41475A78814CAC02D4D743198B78816225980FCAC5EAD7D9ECD9B37D6EB4E1C77DCE15FB9F473CF7CE6482A267FF6D04AC98A9FFEEC8935168DACBD56EF99CF1899189FF8D563BD5F3C923FF4D0F8BCF953BED1B016C685954483078EA6EE7CA8E7A4C30158531430995A82BAB3E11E79617C115D0739E9B45304E3F0627761ABFAB48459503F2E459FBB8AD76A9887C274A5A383C959C0980CF0111A1644BB082221B3592D73CB50C34A236306BC80545ED16281AC89960400756713F39A501E88992B978C4532B9920E3EEAA8A3CE3AEB2C57E0FD265C923AF9D3AED386A698CE5188F201DBCE2F3DB8EE2D9FCE4C34FC62F3C7CEA603EB99C18FB95503466C1D024F23E9ABF3C84E923181C31AF367C3EA6A5801BB66C903C8F3C62278B9AAB4EBB0E2FFFBBFFFFB5D76D9C5245C925F8407B91FFDD5617BEFBDB7364EBC565460AC5EED05BD414FA4BA22CE9E651A0243CDB1293098BC865D07AC597607C95437E622852F790D59233B9D99CD43A7E43C749AB12471A294B3BDF6B5AFBDE69A6BA048C40C8AB95E3691F36EA9EE5E65FC47AAF1442E10827F9B8E583A00E2304640E3294DEFDCBC81EBE87B1288A96E7F64646B51D317BAF765A4DEB4B41C8E3E028126A9876A30F1994E2523E0FCF3CFD785786ACC5F887D004CB9529480A2DB3AB13D53803EF46A4272FD7CE79D77FED6B7BE25ABDD813D6302F821C812BDB42C77DC71472D45F27A38184E4044CE3BCBE1489A9BEA0C0B092F99025AD2914BA384A933104C64115A8BB81506434CA1B78E946770D75D77E9F9A55F35401FFAD0875C43C9942343D948E47AE94F67527E2DB9850B3A9B6CFCACD1D16CFE68BEF8D90BD65A2B6FB424E2277B93AB1F7EF8B1C756649D9189B51616CD562F659256D94F1EE8DEF7EFBD9FFE6CD56457F681CCD5AC5FDEAA364FC1D2659A35D0E48F991B982206CA4C237E8790D11CB28C0D8FE5E1927CC4D38C07B3F42980617CC9B15185098286CDEFE8AEEE41D20D3F2C85BAD518ADF264237D1004FC6D86EE69FAAB0197B7A17971B4608E64E1537D810C42EB6CB8E186106B44A19F0274D0D25CF6FB3DF7DC033A5F96A3168C9EFDF8E38F3FEEB8E310AFFAA7F6334D2D416FA5DF804B123F237F1A76DAC86A1A5B7622774EE46AD34D37D5498C2B49752067C669C23BD73DC3029DAA46F46F79CB5BE4CD3859EE83B12F5FFFFAD74B3AD8B37492085943587E805F33CAD0014535F095D7217175CB6E87E31C78C0178FC966DC4A8449ECDF80F553548401A493A30DCA4B1B444BD16560EE87A3E1D53D68FCF58CB168D5250F0E050F642E91D494E0D3346CAFBDF6D276F3C14568C7BBF9E69BCBD8D255F6DC734F7A7A6A12698DE52228073F5AA177B22595373852141B0E68314A9153915FB4616A81C0823775620C0B13852EA67725B24BC7924605E0CC81C5618F0386F0CBA3AD4B683C1DD230EA902A7023E0B8568C18E73517B7B35DF4DA0247C62ECB6A9A2099B01435BCE215AFB8EAAAABB09EBD30403FF56B624B0C08A28F280806A41F38ABE35AE5D989150147B0F745E5925D7068E0986B9E0526197E9855B4BE46A7423404E8E7B4D34E3BE08003BCD834B31939398408396A2036D877785A585B46F4192B613F8C091E205F3433943CA8B5D75AD46E35D758347FF1E275DBADFE3A6BB51BAD6C6CA45189B2BEBCEE22AD2AFAABA4BC9A9ABE897E56E8A9C66508365A237ACCEE64F7F115E3793F7B6275B16255FEC8A3BADBFCF1277A3F7F68F2170FF7FABD4CCE314D190DABCEEAFA57C63452C1319D26809D9B35C66BD7D2B9115AB365A118344D0F449BF124AB5B6D509687011BE112928FB7DD769BBE72FD7BAAA3AC14F217752FE4ACA60F84EA84580D9FE8182972164111CA5E81F53E25459B4FEF46EE055AD42D01526DF593B9E1C6623824D53D2AB424287E307A50C76B3CB53AF5F358FF6E13523FF94DB8248721754F974E1B59A0894FA1F4CE25F8FBEFBFFF59679D655A1876A53BD8A7CAF38845D5C5F4FA9CD86C80056C38120BB83FD44567A02ED3580D6BE278409EB222D55A30D538C72A5C450CCCA1574058A9C6582010638DA26BF6DC791E03881C93EB029AA11FF3C05AD5EB0D6F78C337BFF94DCA521943C0E414FBC502457CA322B0D00F9C8A61B1B5E7C3D65B6F3D2A67526086B12CCD43733D2F72D7D06B21119E352AC217C58AB59B6BE32CAF19CDF439EA501BF0D8638F952DABF7BA195918AC28F37FF1D4547F1555B7284B69645A1CC02CBCE80FAD6F75CE73CF3D576BCFB4DB31F8E75F010ACB2B161182282CC88F7DEC63E79C730E30C0184F45CFC5CAB1BC66024E1502609F7DF639FBECB3BD062229AF1E41A3418CC1CBC6969664237C17EC7AB069DE748D9AB3DAF2CDA29B243DA84F3AF39E74D249FBEEBB6F8ABD13AA9D05A2A5573705D1C11189164B4B6C6D10CD769D2ABC3765833EAC30DC02BD809B9B7F2405DA7D87FEF3C06C4720AB1AB85615AB9CC8ABCD9797E9BD0DB7DDF6FFFCF09EDBD658B860FD0D166FB0C1E2B5D698BF72E58A871FFEA96C9146B3228249F271BB459ACCD378CA57EB7DBB5B86238ADE4A6DE8466B3435F2D2CF4DDD2CE523EDAA5A346B35AA8D34D1ED3FBEA2BBAAD378EC810D2EBBE2072B1E9FE23A2F2A2202DA23C6641BE05EAC0A5789308573547498A446034DE8752070148B44673C09E424D0B85330800563373A7A8D03420D8F2722D265516A35BFEF7DEF932CA6A0D6D7ED57CD3A6476C9B793023BFDF4D3B56DD2EC69ADFFF2351091631CA4A2B41258702C74BBA404AB634E4BDB6FE9D2A58006DFF5AE777DE6339F61FF9F7AEAA9071D74902C06C920A739B10A35447FE0924CBFC75C92119A84D0E4A9B93D27B007B289A92AF9D0AA30271DA2D076A1150F3563A0F47B75230DD21376336295BF234C915E037D133590739659DD423822FC350E24E3752A77484CA10556AA7B11EA87B877E8331E507B6438AD6860113455460CA1775D5B6F68B771F8A9468647F80B9E288F9687AEA3787BAE1A62780714700A51F45819EC854DA04BAFD82F0873A45F3341C6D031889614F8E0305988C3FB3171D3255D5DFDA8137ACCCD69430B514DBACB70E3231435899E051D061F7BC7740ED97432C754C5B7E58E7315670CE99443AD5AECE694EA96CFDE4A989E990791ED4DF8149E17787076DB6DB74B2EB984B85631BDF9A5CDA55436677DD9DD77DFF5F02F7EDEE9B4FA5D89C2FE261B3F73BBED5ED01EE9569ED0D89A8BE67546DA8FFD4A02F797D50E29776FA3D4D6D2C1D222AB8A3491B289E6E44AA9DB5EBFAC0669B6475379E4782ABA8D567B7424EFF7345BDA9FFDD1B1CEA2459DCEA8ACEEE2915FB67E70D75A0FFC6CE137AFBB413ABDE8A7E7FDD112CD1C7D57BCB84D6D8AFC72F677A0CAD9664B367B45E00056227E38871A8BF1AE5413A90CC487ED8EE09713906476E075E2F8CD36DB0C78672456CC42E908BE26B091D918B3E7D6BBC60418D681C91649F8E0B2E9855E8491906FC08FD17284B48B632C86CC561373847FE092FCBDE59274AA08B39546A870B29A5CCCA79599F258F5D2A27AF39BDFFCF9CF7F9EB43D5C0D447AC970EBFC7A04D904BBEFBEBBCC3BDFAD47430F7BD861877DF2939F4401C7CC4E747F5D23808F6BFE5716896113585AE857DD9BDEBFFEF5AFBFE8A28B9C8E45DBE9BD8682502A27D109B7DB6EBB9B6EBAC94C96DE0E2654A7360651863490CDFAA94F7D8A9A37ACC0ACEA6C08FCD08608702757990FF4DE40FB12C2F17551391B6EB8A18614304A9AA9EA843A17EA1D4CEF432E9CC4DC40A6CFE2A5173A1842F411378E868B494756B3EC8DB8B632A351D89FFDD99F6966F5F9F39FFFFC5B6EB98565E9C839EE99157C0AAC20082E02C8601D528DBA456BDA3537DA9732571E5C5781238138BC7B201AAA4D05505153D479ED953151E3500606349F4E48192DF42829AC83C7463B953F245F36ADB1666B8BCD37DFE4391B2D5AB4A0D19A6866B2ADB2563B9737BB62C5A34F3C51DE4A7FF2B1466973E58D66D1C8268A6C75D15F55BAC2BDF17E3151A4FE48BBD568B6525FFF9CCC92767BB3D11E9B1C9F90DDA67FEAA7F317CE5F7BED7CB4DD5D35DE5AB172D1A38F368AC6E27BEEF9C55DF7FCFCE147269F5839B972E5D4863172CAA1A11876061F616722F6701DD0A0FE67F480FD7E36050C8FB1461C0631E87E9074ADBAED366B949390F0E77E3806A7C7F7A3450902D37514BE25F0507C627DFF543D600B568740A27ED57284714237B0DF7EFB9D74D24931646A86813972CFB83EB482D10E071C873743CAE40F5C92BFCF5C92767631941D6AD620A38748AE733C6A06781A318348AAE3594B553814C5AF7BD37E2463CA24F66BD6FA482FEFF1C15173F824A2FD3DF28EFAC4CA96489AA85993EEA446C8FB1DAA263DA334EEB7BEF52DD20A8E84132F058AA8E3DFF4A6375D70C1057A461DE0B26C4AB4ADAA53E5BD617650FFEA3EF02067C137E18A603D3466E92AED676761B8C4716ED85DAA5375ECC158C1818ED4C19AF408D71D96AE5E5DB63C18E1254B96ECB2CB2E679C71065822224FA4D2D959B4DC80A9C6D96E4A0638B9FB34386EE4A51E6F437289B64091839A75D8AFC8955FF18A575C7CF1C59606CF7EF6B3755AA055E8602D12E09CB112A755F7DB26A03D0584F455710A7978ACD4B8163D31563CD6CA53CB4E4E6A33B5F23432DA7AD633D7DE70A3C5EBACB356A7D5A8C84CA44AA57D35D6BD5FFEF291152BCA905A2B4D349A996C6C29E03CEBF68A95FDDECA52F5F62652DE2DFA13CD72ED35F4495674B33C35F36691B526BB93FC53AE73ABDD5CB87074ADB5CB7B6977C6524F36CED8C478EB57E30BAEFA97FB6FBFE3978F3FA1C97872331BCD84CB65D3CF4F17B796EB71675C67337AC0B3E933840BCAD24637331A0730AAAB28E98C88C6A6264989EB8C02F3A58F3EFAE88F7EF4A3FA27288654034F9EAA02467C67D37B97EA5A5AE2B193717476535DB6C8A6E26E670BECB31C81E4B800D49143C9C13F7049FEDE72493A594EAE1D9E0453584009801CEC865E3D118FAA1BD30810B7972FA2E3015B41F83C9083D031279F7CF241071D847D80691BD121A9B6DB0C924A2144E4CC7D1A32C7FD743A894EAE47C61A8E10334021EE648CA180010A662DE2D835E3A6824797C808D3983B9F4AC0A05FF50040803B0445C07F55F5CAEB1EBD9633038AD0F30E5E09EB846FE9713EA01A8A1A64E7242E13811DC60D90628FD8551340455542188CCB99FEA5A8C812907EC81CC3CE9D4071A546E489D28849744054879D44D0C80AD8577715A2AE8E891FA3323111839C79C94B5EF2DDEF7E973DAEAFE8E947BFF3AC66F6366AA45F719452408F69C2EA9A2AC477EB0C0F8DF38E7348E781A5566EE99EB64A63D34D37DE6CD38D46C7DAAB56AF6864FDF9F3C75ACDD22E6EB7E406F7A435573CBEE2A1877ED12FD282917259779A65EE384B93BDFECA6E7745AF5F2A60A9E46E5752A69F671AA65E9EF5A5893329F012F6DCCF0A2DFA42BE71BB998F8CB4D65DB7393A9AF7BA1AD666231FC99AF35AAD790F3DB2EA7B77AF79D1C5B748544A071B703180BDB2F203D6C8031AD9FFDF4E9D0EBC74155A3DA79A51DD743F455D55ECBA1783459942F2886E86C15A61E207125490A6EA13CB44DB8F4FF541EC81E19160661ACE2D59264100C980B9A8BC362C5863926CF8FCAF7CE52BAFBBEE3A1EFF1DEF78C7DFFEEDDF125002B1F2072EC9DF5B2E49BB1A741FD120ECB9E79EE79D771E4C8A262AD0DF0D36D8E0FEFBEF7712443F7FF18B5F7CE38D373AF6E38A1D8A4F60867AE73BDF79E18517E2A66873E930EC24BB1CCC7B5123727D6FB13C9447CBEB2604337AC0D8A03AB9A606F641E4AA9BAC605D7DF8C31F76920575E5C1673BA0504D00C7C8802770F99CAEBEF5D65BDF7CF3CDFC500FABFB746E9BABA74088EBC7E4B79ECAF88AA57792061A43E8808A1AF91C9790D78C8B0F09B4DADB668BC13A472D038B2D9B0E62E57D2C6D60EFC067E2FE4E9C1070998ED7BCEFB8E38E9209E41A68E8E4CCBA6EE6A8A38EFAD0873EA431743FBA3CB4AB4158B1BB6321460469C619319306F017AA07353BFBECB3CF29A79CA227FAF297BF2C4F9DA7701525E95D473E38B9C6E4C95E4E4E38C16C12633851D65B2244028192AC67EDF6A69B6EB2C97336181D69757BAB3BAD7CCD35172C58386FA4BD669EC9F6197FE28915FDDEB85CD8471E7EF8F195AB168E8DCA2B6E95E2AE68E4E3DDFE13FDDEAA5EB1BAD998487288272764B032C9599EE9304D50AB29059CAD5E55FAC4EDB63CE0C6D848E719CFCC25A527C6FB4599501E49F9E848471F1777DFDFFFE17DCFF8F6B71FB8FFBE07F3BA1665187B55D4C8DEA769875AAFDDD85CCCB45FACADD98AA6667B91368E5E78AAA3AF166D5AA6E4E7B2BADD4A3644A4379B87A75B954948364B8FF9A77FFAA7975E7AA9CBDE3C92D91FB8247FFFB8248D56B51DE62541EC87CF75AA430E3964D9B2655899DA3E5A8DB1C59EE954F1BCB931ED74D0AD4E3CA7908DD38EFEFEF7BF1FA3918D9AB739B2D8E681E7D296FD30080B436100CD804AC65E243BA05BD2831C7DF4D1D45C519046D184DD039C42EACBE977C434F150310C906AE6322EA19F1C77DC713A3963A87F929E8C1643369DBFCC2F838F4C38432518BE598C24F18A2E23EBCD0E0F210D798DDAF26C49EEDCFC0A6EB1639CBCDE9C70C209F2EF2D8A63DB5D133DB93205706B0449456409ED9381C560AF1BDAC236615EA29F639C0102CD1246139AAA2C09DC9CB220314A488B183292426566E49E649F72B629E4A3479C7EEF3A918CA91FFEF0870F3D84918B2EA9E7262BFF6B64534E74517D397F744CBF7AC10E8B37DF7C735DEC8107FE9DD64BF3E697BDF6367A761923268E0145F5F8F8C4F8EA89D2A94DA5179B37A53B57E7D9AA225B55A2A07B2B2427FBDD55294F79B3AD5BD68F53A6916AB65B79B7973DFED82A0D7EA72519DD925DBBDEFA8D76A3DFEDB75291F7FA8DF2B076A3D34E13939D9F3CFCCC5FFEC7FC4BBE7AFB83FFF14B5D7446EC1523F2F4ED50CB6423058812EBDBD34E3BEDE0830F9661282F738E82D1D95E032218F88C5630770EBD785E11B06133B203D94EDC8C75F08CE7E75BF36A81A58F90B43F7049FEDE7249D2A7520F0EEC5F57D1BCE8B7C71E7BAC9C188FCFEEBBEFFEC52F7EF1B9CF7DEEEDB7DF4E78495B58520BE031129C4E0CA9A61A865F1089E9C63B9CD059734C40A9734DA204025617EB27929FF873FB82CEDA689911EED69860040FD489394D980211BA43E845C59228E1C9537852207DE34356324A91B03C3D97B405E4FF714BAE616391132B7ACD6B5EF3D5AF7ED5CB526BD2AC4C56E4038558FA90AEBA1A6A1D2C5B61E9D2A5864DC4C0351E3F29803DF7DCF3339FF98C9E91074444B0CB6C9D209422559911B248E0F3CF3FFFED6F7FBB671C8D05700C3709D3843D4BEA2A527C9BE499F0AF3E2475859CD432B03D6AE5AAB5FAAA57BD4AD765B8A817887431D4018345B007EF1C0AE69A16EA49279D74F8E1871F71C4110ED86804A811B58E286A1AB8CCE8245BD680446693DAD3A47339EE69C3C58B37DA78C3ADB77956AD685757972C710165FDC3F80AAF6FAA562A21A22BCA28C89BB9D64A2FCBB59457FED728E851A9CFF4CB876568ACEA8C68D5E66B2EEAACB7B83DD2AAB0EC65803ACF1BA9D9D0136645365A641B67CD85377EF7579FFDDC8DE3E37AF2CC61E75463AF0C5E78FA76A87516C044F39C9060D71CF4B6B3BDE8190C30AA171A311169DC75D75DF1E66968486FB2A2AE54B6204BB3E7C5DD27587FE9F449B34258CE11BBF91FB8247F2FB924ED4871CED89687CF29CE89EA302695317D1068FA09361C18728C54CDA9965C2C1C48B59154D44DE51C0889DD3F59D5DCB6FDC208B3727619141E0B40F7B6DD76DB5D75D55530F435EA36EC68A69D76DA49069CAE4BB602C7AB57F741C96B660C32230E0879F62991889D86E9226A0F3585E82ECF4575ACA7C3B02CB686AB78FD73EE0A7884C554114AC66304857B436F019163F1E3EE33BC5A8DC4D58C30453F61C9B9B380BE3DE8A0834E3FFD746E006C9A6F9B58143D12ECF246885956D1DE41E0CFAE8175C72D1C9808F6AF03E6D48001928A900E9625687C6E608F3DF6F8BBBFFBBB0113844103066B9956548C983FF9C94FB40CB4CE11FE31B29879350F94E76784A90AF46CF58F22E7E1FB859EB068E45A70C5C2F9239B3F77D32DB678EEFACF1E7BF8915FE0C84B1B56C65459FAB6E2B147D9A5454DE53865943D4514B48E6D8F2EC89B638F3EBC52078F8D65F3E635D75CABB568612E375AF32F053CD92DB2BC284B858BD41A59A333BA5EAB33FACB47FA175DFAEF77DEFEB3477FA5C195FAEF0D089AA77B875A941F32822D044694E0642C39FF355F45DD62086803EBE1DC73CF95FF4750544FA447981175126135B3E5389DB084D71EBB98581057FC0397E4EF3397A471B03A5504730D206681BC6615A70166AE8E211B877CA76F0113170DD3E816C7FD9B6AFBCC168C632DD8B21A643991679E79263F89597C275C6C38FAB431651EB7B6F38203ECAD8E7FA2B7FC204C9C0F76EB59F6A921171EC638B9F8674F52A6E4B9A68305CF50D88CCBA63393B09CB804B51BA6FD1958E418B24E39A3BD88D235EBD6B9A9727929C226A1C07E9F91FF0497310518840E5B7FFDF5418119BA64B56505CCDCF1136E431795C97BD65967B9A8815CACC7C4F1F668E03A747CEAA9A71E78E0815AA83243497BD15601AD11D14251D2FAC6307C237AC3074CD5017B5F65A12DCFA0022E1AA8E122E9A44596A46CD21A8B46D67BF63A1B6DB8F819CF58679D353AD466C903AEB64A6F2A67DC6ED92246FB325B73A0A0A58625330750D0C09EF3C6FC5513925FFDB5D76ECE9BDF18E9149D7621772969E9F672A9D754F4A47DA5D5C7C6D66C9597D6FC759E9818FDDEF255D77FFBE1DB96FF62C5E3BABDA9E40AE21B9B485B9420F9D3AB436D5ED377A73A9D89C8203CC5BAFF6F80B0685F4A5333DA81317D5EA3588B047863A3684766F2D99B3783B3A0B015D120415092C2D44920874CFEC025F9FBC625390057E18A447D30E922E91E1E8CA9C79A7577395D515F115E2AAA56B85A1EC71F7FBCECE06DB6D946561D266F44E2F84991E0E40E717AC8F001C8A078DDBC2266473086DF41CB4838C53987DD7AB397536FA6135291F5A637BD897AD654339CE8CE8F3EFA68230C9CD2D2E869ADF2ECC54CEC75F185BE312824E6CB719CA43E6545A168490C6904C0CA45DC780AC8F988C6B2A69439AB3BD4ADBEFFFDEF97174B4F3C94BA331A59DD91D0812B362FDBDC50DFAC66CD642BBDE0052FB8FEFAEB6D49E075B0901CEA47F04A7F6BB73AC1C79419B2E73C20E91B8B53F62C017F407FFA27F0E654C393A58C4F3BED340278C0899C53C74CF1E5F2AA59936B2BD21070AA54DEA94E2F399B38B5327A934F2AE0A259FBC1FA6FB2FAB4BB707E6BB3CD37D86AABCDD67DC69A52AF238DBC4A98F72B007AE94F4F76CB0063B335423DA53E37FAA984ECCE8282EE8EAF2E523765AB1B65AA790A05AD4907F62CC5DD6C75162C6CCE5FD868B67540D1960E2A73D225A5D62A79CBE570A476ABDD698D1669A5AED1199DBF70D1DAF317ACBDFC8E55679EB3FCEE7B1E5DB162A547138A168C6836E4D3AB432D1BD85C07C6C5F039CF3207948C3BF7FAC03BE1418055B3CFA5E4F6DC73CF134F3C51071F72C821B225718249FC205CD0A69C76EEE6CD7E2893755867CF76FC1FB824D3EF0797A447D85456F8828497C022217653EDB0A61A2D45E682CE075AF6EF79CF7B34DA7E5293E0131C02C64C22A398DE2021AB095830C1CDB0E15B1DEE601F755EA4F4D11D62CF99D18CB0846E86672438415DB86EF8E28B2F36FDD195575E49FF06EC489763B9303D9A53DE53D1EA8DB1687601CCC970AD6048C9A4D07E6136F53AE79C73741B7BECB1C705175C802BBFCF3EFB5C73CD35247A08CE0F03057C03F9F486CA2E67A7E33BA01934B4343D53600B1EA585C06CD6BDA7000438E90E278CF1A18DC00AECBD8024977CBEF0C20BA544B90A6B49CFAB47901DB3D34E3B9D7DF6D9261645E53B98AF9F48D34B82B15AE89608264083BFC1061BC808B3F3E6A18E8B81F358AED21D87A4B5A30853421B2B152F0A2F274D0194BA95D2AD3666197C9E7ADF6AEA4DB7D5ECAFB3EEC2ADB6DC6CC9969B2F5C343AB1FAF156DEAA0550511925530498AB4B37A3ECD20A7F21A35652F1CD1F330A3ACFC6BBBD27BADD95DDDECAF1D512A3DD3C9BCC1BDD86146CBFFCBF5623017BEEB45B63F38AD1D1C6485B065DCA4B9F239505488D4E2A1572A73CB859AE83662ED13129ADDC6C8E2E58B8EE1AEBAE377F74ED2F5E7CEF399FF9CE23BF5C89B53180BD3296AAF9F4E9506BA4AB8B2075AB1434E390CD1D488F592E0C02360042DF0921AC04149B6E922098CD0E28A9496E41A3FAEB346FE6D232BAF5149C3FD2840D2BEC88C977944F03AB3B375545C4B21195752AC85B05954345238611944F1AF9AF7EF5ABFA2AD63AEB5A920BDAB76C6F6E92FC13DA4823B0EBAEBB5E7BEDB5183A51017BE41916C25618EC03F12827AAA354F5A9AC53234A854931942FD5709B01FF55E68856113E195F114527185ED4445A2CCB958F3F11135A9EAC7E2A60014475E193B9FC345E91C503E18CB3031AD53FFBB33FF331C8594692DB704C880358483C14B4FE5945811EAD524C2EEA8B3883D93411B53AF3830F3E1861ED06074CA5D86A832F668B5228E7EDD70D778BBA4A73E38D37A6F6DA8D958034BBBEBC3FBDA9F080364A55E825468CDCDF97F089A61E74154004BD37CDBE4D310DBEA6AF5FB5CCA176C349A898D4180E417327DA0EB0393A0FE2A6EC681A4A9EB06030553198CCF89807F6E6343D7180C147FC9C909273F00816DA25B914CA984D96AEF4E27DF7DD1707CDC6B1E3796E6288B68ACF8BE8430113ADD16469FDC31F9C2AD2665B008620B0DD8AA1B654C448008E4D913607230C0FBE1F3A3F66815D202E300E70C98C3FF4D932BC2B97FA3D09B84FAD19A5619E261B795A7B9D459B6CB2DE861BADB7D6DAF3474B4E95347F6C518D70A9606CFD49E678D5CA7174066DB9BC981694543859A755C9B14CE27565A9837BE3BDD52BF2464FFFB55B927165885C8F295DDA6EF547465B9DB17CDE68D669E7CD466A643A4F31315E8402A4D1327E9C3D5124FDB09F32A9E346B79737DBF39FF1AC8D17ADB9DEA34F74962DFDB7EBBF7DC73AEBAC0BF463187B458CF1E9D2A1D6045279DD88C2210EA71207D25D51115AA8816B60BFE1587B6D39064B63733600D23F762CCE029330F6DC6C202CCA51A41806404C7378EA56485CABA8DB760137E59C9A4A5A146BCC1101D8283C91351C1B60A071480A6CEF1E13A60F705C246CD2B7279E78A24CEC48101F45798CDCA61064B3B591AAA4295CA1B1967AA0162B2EADAC662A906820DE9E87FE13C54C952456094450CD406EBFE184134E38F2C823A59271FDA96EC8A673DE6555F981CD05DDB6268E1C9E59F7DC1DDC201746C6B4E1038C1938CD11A862C1671967FB0CE246D2C02E848B8F69CF1E9CB0C667BFFDF63BE698636CFE222E413E4752D5C6F476847EDE22948C13B8024EE186E279DDFE280F0DEC08CF6435C78EF30830BE39ACC56CEA2BE48CCD0BAE0E7715182E6B20DDA11406AD75B85BFA096A1CDEFBDEF79E71C6195EB15615712B5935CAE8DC71C71DAFBEFAEA7BEEB927AB791FB5008E3DF65882A5E82AC49A96F7B9E79E8BD073A98271E3C32807EE217EA85F69CCE55B6735B36F51D7D7B190341D8E1BE9E0ADB7DE1A6E5A0AE5BDBCA94462C0ED6F4499C0CD8099C0DF459D611E215A01B2811B2027A2E5A7E745663A061E59AC5308E498F21DDF29AF3B380D0CB2F7BBB71E4CDA2F7FF9CBFFF55FFF154B0257DB619E2C46CC1CC72F75646AFBE4D5C29CDA21ADAC377FC1D873B7D878DB6D96ACB5F68289D58F359AB26A17AD7CA2EAAF99152CBE76BBC963772726B927C42222A0124925D4B6045A3553D69848FD55DDBE84E644DE7D226F948D08A580DB9DD42AF74E2A53B9F3E4AEE51ADE9156D62A9DE67E9EF5F262860224CDD4849669158B2E924C723D6763D11ACF5E7B9D678C8E2CFAC6F5FD8F7CE44BAB574B1ECD80BDB2E07B5A74A835529A20BFD9DD2EBCF0C27DF7DDD79DFB66536CFA96AA737605104A788BFAA1771897D3E2C372D2B766814F751A46AA4E9FE82F17C5719F8D83BA98CE60ACE7323BE31CAF689144EB5227D1DC61DBEA41DEF086379C7FFEF9BABA8E79C94B5E72C51557A03BDD9B0BC918E1366E2341988EA71BA84090903AF3CC332127D191121F343C60A6F4D454F1D97F724E084C0D36966B84BC00586C8B172FD615A970C011611D46494AF4520F8B2827DF8F61348C398F51C7387ADB6DB7DDDE7BEF7DC0010718EB8BB78DA39CFA453EDDED669C277BDDE73CE7391A610392F14BB4ECF5B9A439FA09EB0DA7CA408448E4C9C8E3CDE0F9C1D004F994EE81F6E1DCFC861B6E78FFFDF723E634BF871F7EB88C1EB7D4D56FA5FBE50BFA914D6300B24F0750756658409A6E5A1575BD1FC850AB5EDC53C79F6305609A1E28EAD5CDBFD99B361DBC32639CC3C9C5E8B7196D8B03275D0546890C8BF6A31E79CF3DF7F4CC5226C0B3E8004995A38F3EBA51B7FF33D66900051D13C3EE153BB0547C18C388D5CEFA917D46B76FE06091C7342E39743CCBCC8E75DCBCD8F1FC4473F7B297BDEC861B6ED0237B52206337BD8C53E6260CA7002926DA106EBDE91D968C587652891C9617B6E64537C3624BC17FF0DC6910745136B8D78F91F0311065BFB91F788B59155928C4276E11B9B152CC01A7E0073070E54165E429976E6C64E05AF590722BCB9CD092E76DB4EDF3B75C7FC37547CA76C245E589665EC44E7D31A9D80E401800CD9330EB947D06CB55DB9202CEFB795ADD2FC68BD46D16E359DE6B9665BEFD76A73FD2295AEDB2D86974ACA5CFF3ACDB6AF41BB9FE2B8545A31273830548A92FB778B2DBABF657A348AD5E91B79A23CD86CCC94E6AACFBF5AB7EF52FD7DEFB9F3F7D7472B23B80BD222BA9333F2D3AD4C24909B2C02046D70C90B904EB349B568BD1E05477E021B08929804F43EC88EDA791F9F33FFFF3CB2EBB4C17D210D9D633F8288524D91C17A55A9FBF697A426BE015A1E05E9FEEC5ED942A2A1F1A19F03B18B90ED53AF293EA7C6AF4DDCD921379546084C0CB21FA2AAF85102819239DC180C958808B9713C3E61477412B6F9E2C7D75F9E597BFF6B5AF4D751D5A23107103DE19C04B6B9C71B8F14E5C801B5F59DDD1013812B90986C5C3081302763D81843C3DA9EFA3073C55EF5FEB0C0434A210D31310405EB74765D7E873F34FA59AF72D0D15194720AB4BECCCA2A0F38093D763A26E89724B91E8937BEFBD175D857F83FF404441CF4EBDA6BE35AA43C7D04010EB01C34B43E4208A4BC331F58AAA316B11589179520E73E688D5CB3EE5D26E7500F76F0AB10D3F9D63AABE44B424188D65CB9649CB7266C454AA128AC71F7FBC3CD48140450C9E4705365ABD74805BB9C4C25F97EAA6BA96971A27B2578EBBC41D3110FC8B6ACC924452C202DF76368854F68ECC0B08E1ADB17C157C0CD470AA4BFBB6D9669BBBEEBA0B0B380612525DA28638855B9B7BF3EEE6E97054F0B222440EF1625856AA7B69D8A1CF439B26FD50EFC907C78897B5BB19B319A814CCF119C73323528AE987CB322583F2AC54B8E5FFAB146AB909BB595E6CB0E1B336DD6483CD9FBBF19A6B8D256DB7EEEAAC5F86829BCDB6654DCC13A071D924BC9F62D36D8E34AA0793722D2B9AB2C924055C4CB6B2D59507DC6FEBBF91A2DD293AADD468EA4D5692594A37EBBFA61CDEC4658AA102247DDAEDC968AD982CCB3B97135D0D8166241F9DBF60ED5667EDEFDCBCEAC2FFEFA69FFFFC57BA9D01EC95C57DE37F7D875A680571D4F45E7EE4F2E5CB536DE7366A46E2D91421280C4825F573A9FC9D76DAE9C61B6F84A698F5AD672709E48DD4AC3AAACAB474D70A187C3444C83BC292E8E319AFFB894F7C62FFFDF77749864C6CDD0099F5195F594DAFAA51D280634B7ADBE048D9BDD03FDFFAD6B75E7DF5D50F3DF490F618EE6F44CDC4B465C4D6A5BA68442731219A7EA5FDBC74E9D2030F3C10BF13216842419734E0379B8587E808FB5FE7D110C1DF49F85407FCCDDFFC8D39E2D1B5980898D8E6066209E9424C901E5F5A87ABDB761C4603C518B8C31514F640344FC0405F699478D27281AD5A0DEA2AAB2543B955AB8D26BDD5A81ABD694096562F40C87A7CDC2F080B4D871973100400FA43B4FBDCA711E92C398E34F6D52525642BD073F82534E0E349B168490DB226F3BA19003362F785EB129DC6C73500135F0AB7D8553D844C387F64BFB24E75B14A5155A3E913A05E2E19F06C5AEC3A2A6051435EC9E047A37EA23E66B3133E2171335C61688581767749349FD3C596DC4D242C33AE05B09BE3A0B1BAC6F1981929666D7FB808DE828EAEC6481820E5AE48F6224F35111B16A7210BFECA0F8296B5E4B1DB635896C526AB1D639D47E0A11804D3BCD8334E014895D58C6671DEAD711BF54B625067903832B3D330020E8D8EC530304D5336A83FB5C5AD91921376FB1DCB7B937D4A8F4A9871EA962E6633DF7E87FFB378BD673C7BF1BAA3635ADC2B4BC073554C3C515F3AAF7BCE18995997274DB80CA9BC5CD6E2319A152F98CE5FA4B200A993AF2E156DB354C0AD4EBFD396075C349AA9ECAA2447B951EAE0CA094E5306BB6454AFE102A46A80CA01EC97A1E9AC74AECBBF0DE97BD946CDD6E848675EAB337FBCDB3EFBDC5BBFF9AD1FCB4B713A5D8F4FCBBCA74B875A56157E0CE25B07EB5B89579CA454D9CBFC70F8E564956BE00CC8F4CE77B770B358B3D958A39E50B70727E0015DED6CA0AABC26F38B4DD109EECD787C51D7F8EB8ACF7BDEF3EEBCF34ECE6C63939F73DD88F58D1039B65CB76E57ECA7C60870B2073E3997EABBE44607D0C81DF31C2211593CB7DE7AAB26548A876A1923DA181C5F4E5F41B2AF93ACA85ECCB5968D4C1937D5A0890AF502111C2465A323B5DE74CE0B2EB8608F3DF6F0B5162F5E4C016E1A02A6925004A58F35A03B912571E69967D2BEC95E7B51D1C26CBEF9E6BA19C962E087B64BACC2074C439D5CAED891471E197BA14B6D9C74D2491FF8C00708BD380C3E9017F727885D368251C7ECA32F7DE94BBBEDB65BAA8325FCCA3BC54E8CF308D190C2DD89DD67DD430230B63B260D38DF3198E11D1A090E3FF5A94F1D70C00114E7E008C67EDECDAAD333615E129034A820D0CD6949D968A06486FEDDDFFD9D7ECB2AF5C00EE09C4136E942BAE8473FFAD1FDF6DB2F55B623A71A004F30E084E2296274357984E622A2F1D1714F71969CF98E1E9BF311595D09C6C6D7C9D96B08015323D005C16B324EBA368BCCA65EDD95CEF07EE708B0596D36F12DBBC92608712988BE39F2BCF3CE93456BA0A8B9D0ADF93C8931D266265736A93C07CD85E94162E04DA7A25E2E763772B239D2FB38121C9F3106C053A88F288F94CC954D0D74CD135F62141F5FD1EF5284D42852590BA4ED3C7FC1D88B5EBCEDBA6B2F5A7B9D35E4A44E4E48A2492F4A4337578DF79C34E2C2A9AEA34001C7F63E180759654C9455BCA5AF3D59160117FD56AE3DD36B36BA8D66B7CC04B7FBAD76CA1B1261A56296EA9591D0CC4B8074B53A2AAACAA2B16ABC54F565817251E9B9CAF14D79BBD968F7FAFABF6C6CDE5AEDCEC2D2D996575C46BFC7AEBFE1A7679D7BE38A1553B111D91C1A01E4E0D3A543ED5E7BEDA56D76EEB9E77ADF4A3AFFD55FFD150B71B8AFE2C00B5DD2ABFB1EBAF376248271EE70975D7639EAA8A38CA18551E4FEFBEFC756D02667F9620513999F03800DAC469726FB7BF6D9674B640F04B5FC8A0DE63426D282DE24114C11613E68567E62AE662387A3A59C824F83ECD036233889F444CAD8F7BDE8A28BDEFCE63733C2D24CAEA8C1FDE23C035E1DE83668AD0C0E201C4D9A00EC581EBAA0A7DAD036E0564A5A23CFD4004F7570B551370048018FCAFB3FFDD33FBDFEFAEB4D67E1FC881E8DBB925891D245626EB2C9267A7622E4182B7164ECBEC760DDA69B6E7AD75D77693041CF3205B65AE8A9AEAB90F39ED1038E1F46598959E016055C9D963ED17B4BA18F16F746BD1327811F543335A34991D7B5FB886CE2E79C967E62D16F86D730226BA811D0DF77BFFBDDFFF00FFF20BD62DA0AC4A005BDE3CF3AA106FCF9CF7FBE56914EA2E7FACBBFFCCBCB2FBF9CE6014821DD3C1BC1F5E8C6FA211FCCCB1861B303E839632CE06E731B0376C421871C2277C26CDE03A68CB33C337AC0DC0F77480089A267243C2D9BACA508E7D8B6D018BEE0052F904C0381EC7B76923E5AE40C17BA0384291A247690649D906A31FDB85E040F8C0FC745219DE73E8C8CA41B23EABD26FD473FFA91ADC6180AD585649EDE77DF7D844C1CB3E4315D5268E22303AC9CBF88A010EBC78407CC04D89F9822BEC92BFBB4549392D193FABBCEBA0B9EF5AC75B6D976C99A8B162C5838D22FC6C757AF9C98589DB3839A1D2BE066DD9A2AD5696DC6CEDE61B5F42B56E9AC51D61EEA878514F0A4F651D67BAC647E4E937973B2D5986CB67BCD120E9DB53BAB1A79D16A96CE7115884EF67753D6ECF55B7D29E3A2FCB02C1E4E79AFD003744647174E4EAE2A74739D75B2D42A4A6A6B793F6D49C59F3C38F9B193FE65E5AA293423EB00D9F1B4E8504B5A916292811DA84B48464BA4EA71888F5169A037911C801E50DCA771A1BDBA1BA383DE36CF67CBD1623CCA5FBFE5965BA49211D06E8998EAE2C8A9DC7FA7A32BD2C516FCC8A73FFDE97DF6D967C6844A9A9D501AD341BE912EB47CF9723D08B54C00DAC96659A0E3FFE128B3C361ED01158886EB5794EEDB6FBFFD35D75C83E5C16818AF84018ED6A73E817961482DAC755A7DB8C5165B5C77DD75FA612C8292E6FECA57BEE2D4944E48B3F454213F77DD75D72BAEB8E28C33CE78D7BBDEE5A6AACE3BF24FAE089A2C92C644794D916556178C998C09DB0253527FDFF8C6376AE4F5ED2B5EF18A2BAFBC32859C992FE78D0CF88E70623F5030E2FCC5BE43A9EECDCE72B5F1C7F1C31E3061BAE8011735B32E260249101ECDCF1B812666C358B264891E1050218A9F136A4EBFF39DEF68B79E70C209871E7AA88E74D7C8A883B39A2F4803F8C217BEF06B5FFB1AF1218CEC54C708C1EF10D220A6FA246EA69A29DC2C7AE741C200D503B10DC7F609CFD27231D5DE185F99F7862BA20C34087FF4477F247347E7D4998991CCA88063F9296FFEE99FFE69B7DD76E3EA5AEA3ABFC613AB4E27D70C025AA4AC31D6B666439078B4830C719D61EFBDF73EEDB4D3DCF3D479375645F4209DEBE12B077807D643B36E796499E62CAFA130B4DF767609CB0C346B3FB4CDB03A0703EF3AF2684AFADE900F203C9CC92689C6A603F6AFC77437087015D06DC67582AC205DA5BB925946CC1F68823D604660CAA2D1BA3CF6D86331C983755A0E4069E7F6C17F4B193CE3399B6EB4D1461B2C9C3F3636AFD3EBAF9A58BDBADB9BC8AA584537F006B06E383F4B9CADE8855E8632FADD32449CF2D4AB50643D0D8114B0B4F0A329EBE76932CB65E04CB43AFD66AB68350A8D92FCE066A35F9627E5FD526F477F37B5B3BCD56087972A3DEB158DBC31D66EAF51F427522683A55D9E3E95AD0C3B236332B056AC4C575FBFF2AAAFFDEB132B57B1569E5E1D6A0932A3E38D7EA26281BE75FA1C804CAA19918CDEF4CEA4E25E076B0D1C74D041C4FA6234CF05A3A9A6EB1B7EE5359B23B150B7321CCE51F965618D33E7F64DC381CA34BD7B4F7C616AE8595033A08841A20D83013918BD054E92E43AC05A175F499DD3D413CBDDA5AE76AC2D2EDD7306E16B265BCC596D66594EA0C731803492BA3DF8074C8EB8F1C61B535E625B9BC104E343DCD232117562B4AD4E480ED8A8638F2A363B16496495910E264F6F2979F2C9271F75D4511897C8743044033DED53ED1EC1CBC60082CEE33CAC1CE0A3745C4F558CE798638E39FAE8A31D099C4301F3687620F4573B51AB8274067E89B91263DE844FFCEC364FD99545A8FAF375790A2B60E7A7AD8FF5389ABE2C54D6D121C3FC53D2F41E43ED38F40DB43CCCC8F1C71F2F65CF5DE900DD92A6DB5C13CE8CEAD1E8BFFEBEF7BD4FCA0C28197391EADC30A166EF4A9E7DB610B4794329B9C1561B605FD1E2FCF18F7F5CD4F423697A2D56B3EA0E441C7B38043D004D20C3A8D7B9E79E2B0949CF1203D0904B26D6B0F2039EE23C4B36BD126720BDADC1D400CA37255C5454FD2A682D85C2721E8D5DEC3ECAE61547E43ACBF6DCE73E578FAF29237C95EAE8916140AE3771A7732F30DBA003B2C845A1A4BA209CD185EEBDF75E6E0649926AFF0A1D5CAA0CFDEFC4134F3CF2C823B16151D46552EAD15F6AE42A9C75D6EBF7C646D3669B6FB2C5169BAEB1C65AF3C7463A9D66BF98E84E968E3C141C8FAD5A61DD800246210DD74BF166A2585DFABDDDACB47DA58DBB13BDFEA4D65AD65F5595F04EE48DC976ABDB1E91C62D73CFA3235A4992A1FD76B3A4A12E81D3C1DFEDA746AB312295A46356AE2E7B03371BA359BE502BA1D74823A9333EA1792A39A5DB23C5A245238DD6BC477FD1BCEF81F17FB874F9F7EFFC91B6FFD3AB43ADA3494C164463F870EF7FFFFB972E5DEAA88EC957BDC2CE3EFB6C799C94219AFAD13CFE29E44B526544932C9C9B98330578BDF779B36EDE996A7839506D9026319B028622D5C037FB61C479E608657BF48C1F713C6340D667A1AB0F73440A2055CDCE4C7C6D5C953501760C660DCF68745B0AD00CBD34B092B9DA6FD484E0BB109FF70D58D6D8A68186330DF5C6F17A23BA4BC0D3F9CE543B82607169B4E7042DFD22C12113B925BC61B17EF8E1877FFCE31F473A9BB234AF3B523BFC8B92E33123CC9B97051CB17A1C3E27B318371A0E3ADE9B8650D0FDD01BC7262FE704910BBB64F435534834384EA04796A69796FDE4273F59D41C70BE4FA391234439BA045E308C333F74C49EF89386547F5DBB05E281782C95E23AB3DE6CBEF9E6D216941D7FE0031F9024912E7704DBF1E4013F8CE6C4468DC41226C647E77FDBDBDEF6A52F7D89840B4F3123088B93EB00C93199D7F8151402E132422E4B2655EF3FFBD9CF1E7CF0C1FA0ABE086E6C2004ED7DC423501490AA109D7EC89AE78665EBE82B1E8DA9895CBCFA56374660C328C5A2EE131A9F37D51E8B1E5CF6D01D77DCC1D4100C0029A9F7AF79CD6BBEF295AF78D65812AE1465B7B292F17423E75DAABB3D62CA20948653391CC653702ABD0C60D469A930F44A8693A0EC04B8D146B8D4A9AE0FCAEBB6A15E96599A5E406201DA94F6A3ACAD6A41B87041FBB95B6CF2BC3FDA6C7464D168093149DDDEEAC989AA5A3C2F1D8BC7279F880A186F03316ACF2F0577A49B5616FD92C7AA37D12B27626252CEB4646FABA2BA941BD068763BED6E6724B53B59AB994B664AEFB69A851CE266DECDB3222FA6F9BB296B359A1DFD4FDA3BCBDB13237A8C11E95D190A3A49A3D9EA755190AB16CCD7C16BAD1E5F4BF2F65F6FFDC5A7CFBE787CBCFBF4EA504B0B55560C19595003BA81254B967CFFFBDFD779B6DA6A2B6062EC3D7D65108A4D4B1C0B2D172D267D65B645EE903A7ABA5A49B4CDA680539DE4709EDB380854024A4E32912428B5E0287B8D1B7965C2FE286027CC7A75EFC8D95EAC2E0437FEA2056B0C2AF072E16614B2BE3D0E4037A393E8972583E694534E91589799B5FDF6DBDF74D34DDE66A9F2E0295E2206404784BC661C8C7CFD032F1EDF1018C9BEBBEFBE9BBE059480E38248F16B7569166027D000B230E655AF77BDEB5DB29E11C4B8A42652480137CB15A106D33961DE20270D15062E38EC548E30BB3F414C4C600FE1B6F2137AF4D28A2ED50DECA8C1352866C0ECB034E78DB15791D5527FCB562E2B5644FE64403A780F66897242DD5E0539AF54599F14EE4B17EAAEE466484933E603109B1811952ED46D102A685444E56C1C365D0A2D8475F58F7CE423279C70C240B38A2C101EBDFBDDEF3EE79C735215AED7451F7CF041DDB07696DEB0CDEDA91B00E5EA4402A1D132B6626ED45D4FA26AB469A26FF7DB6FBFF3CE3BCFA5E736B50D4866D6480EB2F0185B620F34F4CD86CA6608E4BAA80C4BD1D0045C4CAD64424DEC446EC036E28089E9CA9FA2E6A6400465753B26864B238CF5A00B1D7BECB15AF6687DD070A93685637D94878218000A5867E60E07F6A373E4BEA8A5B45B081B8897D72DAAF05B8ABA981301A8BDACA190ECA56ADF752206CC7A104A1A160AB6B833D4C9949D9E8AD1B1720574278B76272D7EF63A1B6D2C09F38C858B4AF535A550FBD5DC5463F7F8AAC78BBAFA985219E2E046823906C5584FF65655A2B65F5E6182247125474A82C97E89BA6A6BB5A5D131F9BE79AB9535F3879A8DACD5CE3BADA2553AC1DD546880FA2B5616E4928BB25F4327971A96CB98B71A9D7E2ADA52E8BDAE9EA5373A3A2E4B256F8CE5697C64745EABB968BC98A7B9BE63F92FCF3FFFFAEF7DFF1EDDD4D3AB43AD660AB00C6681D7B4719E060BE0C1DB2F240EA9B3C5A698C64646AAA0341D9A9FCD4EE8C1CA7104D57B9ED019C92ADC32E0391A31A010BDE9AD97F3D0D382F19FA36B107361100702140D3AE3C118CE24F20173828104AF4B9CB351F7AD63A1EA1EB45DE1264B017FE414BEEF96E9D0AC39C94AA71AE3C5D2106CDBC36B7446165A48B9D2DFF66B31F46279D01037052C3A10219DEA80030E38F5D4530DAED4A4EB5689A39A5053230F830A71171CC7883A248E65EB7038EC195F047E6CE65B02CC062030F1857589D5D86EBBEDA6AD94552595AE4B7182466F3465EC50893C6C4D07DE2C67EC6319EF4DF412CD64BD1BF9AD52E8A6EE15DE9FDE788E203CCC3C3680CCB74C93533611021609A06FDD2F287AC079E08806B4C12642E813F624974C6A5CA3A15D2C738A3E13B1DCD1F61675CCD86AFAB9C33C8CD281071E78C61967B836CFA60CCBEF2D6F79CB45175DC47906427464DC190152065E182CB9BCEA61E55B9A6D9D6066613778EFF015D3ED401AE68E33417C1ED76A4447B396FC20D1F7639A30A7F8D0E1E2588ACD859015FC24E2C64934409D4D930603B2B8BA8B9DD85031B5CFF3C2490727A8DCF7A9766396747A98329EAC95216D362207ABDBEFA5050B9B1BACBFDE061B3EF399CF5C6764B40DEAAABCD15E9500A8C09F13BDA92416F004421C8DBA5DCF2C0A385558836EA5E6FBD546283ACDA26CBDD028F937A4803B2379A7D36837F34E7B4509C56A69708B56495129BD3A21CDBA6A5C039D9755CA79A38255B7F2EA4DDE99285DF15647CE73968FF6261FD1F2181D5DD06ECDCFB391A2DFE8771616FDE64F1EE89E7AF2D7977FEFFE55AB563F5D3AD46EB3CD36B7DF7E3B7136A25EA8B7ACA28DD4918EB118D700565927F7CDA49AD6C74923842CF5FBAEAC705B85811E15F1E5449A0126B1C02926F6D0795EE5B625BD930DC0B1708C409EE19785B5611A8DC0CF1E932E697A20DAC63E9B0A772AAB4801E39E9140DC76DB6D6FBBED363685CB0C58CFC8D9A2EE859CD59C82005CC136EB57D15276D421A6FF2DC5ECC75816C4570A0C44762875ADCD36DBECE69B6F26F2865B10CBB424A37557EEE7CA69DDEBD0190A2750F0BC59158C89019F968FF974E6E1F872FD6E445CDA7B98F1C5220751E884655635A4FBF18F7FECB6C7265721EAAB2762A6A2D3EFCB799460BA60FD3308C64C5963C51014C0280C5C820AA4E1FB816A3B1A46006B639131B74138C18101AC5E24B2F52E404830EAEE2191EAEE49595DC0E6C16740EC04BFF0852FD4BCC78B3A1002BF0A387CD7313BAFE93310F4423E98815CABE86FFEE66F4E3BEDB41915B03F61937A4CFCF89826B4EE880F3BF0CA028395A69E8831B158DF8CD1246E9F1513C99A47C8E062E83832AFC51D14778D394AAD3BD9CB92B7515CFB2486CD1ACBADAB4BCECB1F95E1AB3398F29A911F600173562B5569A322C0D475862C92AB7950CA47EA69561A7AEA54A4673C73C1861B3CFB59658FA945CD569E7A75EEA15F5A58E355D9A21430E21EF80FB4992681CA6AD62E8B1B692B56ADD47775DF53818E4E855D2D7B1FB54AD5DB6937DB65C45BD6CAEA4A01E7ED568982CED264EA4FF48BB27AD82679236FF92ACDD6CABC59D6E18D74E6B7DA63DD89271ACDEEFC798B3AED8559DE91EA6D8CCCCB9BA3FFF1607ECA2957DD7AFB7D3FFFF9D3A9432D3786D396AA0C6B8CEAD887C645E62AD8ADF2CB698C4156CC8E4E39B58B16D1ECCCF6A3853E00AB34FB0B13DE491D1BA145A85E30228F906051B782E01EB002B1A09DE38CF08D19F7B0B3AAB25120BD2AA6F3AA47B0DB8C27D13DE8B79A4DF279286013EEA7D0BD985744A839C48A29AD4F36DF7C738DE1FBDEF7BEB3CE3A0B6FDBB815F642AC0B1FD0A9718886055FBCFF81AFB83A4953DB52D0E07DFEF39F7FEB5BDF0AC68A88B116861E07B9EF4A391B7F9C2D55E01D249D0998A82942D6CC115A1F489EA500A69DF17873DFBA831B56145171DF8CF10408E8888E199894E18172C51AF613F920245EAA3447BF26E2E0C3386BE892484C31FC80B6A42129634D1212D38063D0386D4CC47EA0100E2A50563B09266CE8134E38E1F8E38F87E44477F5BAD7BDEEB2CB2EEB55ED9234087BEFBDB7BC583B85314136A036008850CA5F54F45E8CA17D470E460421649CA81A98B898A98DDC61200C4C1B39DBF2882F1380A43AE4107D03A0218C5B2CDEF55C3398EC59368E9E05405C9ADE9A37BEC8D391F6D23E3DFDF4D3D998EC8EA38E3AEAD0430F6582C852C37FA9B3494CEDBBEFBE279D74926B469C2C67FD10FBC1D64420E3EF9A27BC08DDB2818E96EEAE01B190FD1ABB3BD9D329F4B37EAB99D6DFE05952C06BAC3926B7B6D56EF4266AF6D4A2146DDAA0657EB10A72E2FEEAD641DC906688567C30E0A71470AC50D2B49629DEAC6A3EDA6976AA7A8666A31CDCF6BC154D29D8765612639539E0C9544C961C1C79B7281570AF52DBA5F32BB7BC0A4794466EB32D6B60C1E8C8C2A25C31DDB1790B473A0B9BB9B46CAB68E8DEE67DFF07BDCF9CF7AD6BAEBD65F5EA09CB2F3D02722AFB5FD9A1165D8543409CD9ABB351F5398007C0EE26376C7434F214725DDD9873C6B60F74FC1E7BEC71F9E5973FF0C003FA27C8C629BAE059646E446946FC48162AE1EC986EB9E5961A0A8D8F0F0356E6F2761ED0FC320808378DC86A6EF7196FA608D55C2928B96C4E5ECC34048A890908BFDCF80F9B0F831D316D66501D2697140834FCB78485E886E6D0747C8498631BF0DAE320CF78FFE84EC394747E7D420724BDE433DD79E79D6032F174DFFEF6B75F78E18506E8699031DB23EF1B1DD3B28AC3EB95AF7CA5DC2CAD1C0B7459242F78C10BBEFEF5AFCF2658876F7536EDEBA94774986A98E56452E2888561B13998914FEF6834E38BA56B34104B28D5C699936E595DA909AC264611F2E904A5D9F4B2054765230F94EE5F52FEE0830F96D46679E84350693267DFF9CE772E5DBA548BE7924B2E79D39BDE84D9A715E2C25F4A0F48DBFB41004EA6DA6A890ACCFBD7D364BA0C0742B4428091EB5AF271CF3FFFFC81BEC57920B074E9C1F03A741C3BC25674AA1D77DCF1C52F7EB16C0202C83AF38CC5DF7EB9533D7BEDC3D58B9DA5A1D05FEAA3E8C5646BEC94534ED97FFFFDB5CEF5AD04A3CE404899C9457CD9F44F4301B068FAE824DA381A52D4968154C423B5FC1CCEA463EF165B6CB17CF972870C531DB934DF994BE7699B980239092F902E44A149ED67A92664304D3996543FC91CD35817F3E78D3E67D30DA58047C74A160BE9C58955AB497550C2DBABC02FBFAAA028BABC3D60C68293474CDDD45E2ABB164EA2801DB02A8F21042DC7B1D9AA98A2A77CE8F6FC47A480B53DCBBE848D92143A2FDB0697DABA6A7D58B52C6C35F29235441265A2D1A243F8D8E8BC850BE6AF2933B16C8DD46E75DA6514BA91B735CEE313F36EBEF5F1CBAEF8B75B6EBEF33F7FFA08CE2E82A05FB7E99871E9FC4F75A825330ADA486F64BEBDF7BDEF85105F2B09D0B509318C5B01B0236DAAEB9285A527287D12B567B4AAE46D132A71A6D9CDBA69C307F667B6BD64E2D32808B29AB88E354DF8851883E5949D9298598C9B162494A119C3EC22C3167A3EBDAF5CAAFB93CC269D7FF6B39F61326AF4E02DC286C59B617E2DA67B1591ACD94B3090A380967ED2080F50C94BB21C73CC31518A0D8872870A862DF719EFDC1F52BEA201A13A6E38FF4D331997E8683C65D2E92665FC9994C322DBE90370702803E2A27AA3C3504B73D09CA521B8C0B03131305FA9EE68C49AD10D00118AA5F35E7BC085EC226735F42F9FDE26CF77620D6D2F8A6D85742AEAC65FFE395177CDB8EE6180BF62E0013D894E2DBB1D0266161BD03D7119370A96D004660B00F40429AC7B1EB37E9C1F344E8AC2B654D58E3BDF4FFED8B94CC7CF39DE5159EB6CDEE8AFE6D141B2A2C681DB154933D5043AD9E49D4594588F4C1823223DE7068E009B02B3525408F318DED07BE4950ED690EA60C275A895BC629AF4D3E1B0C2F24D5C3D1A55298497D0A6A673E14EF4575B69D9B265C0D709E931261135ED8408FA1E655CD4A553A96E54F5EA57BFFAD24B2FD54976D965177932C4272263C9938E44AA6D190241AE9A2AD55555F6B9C6A2855B3C6FD38D375A7F64546BB4D7686693ABC789D115BD3EEE80AEBD72F5143D21E91696635693613A19EEF968350AC01A9275A5E99DA6D6773F2FF23A0BD86E5499D78A73B23DFFD132B5DB4CADA69CF2B220B891C9102E1A653552BF99CB33CE3B6DA9EBF2868A7EB7689409989179F317CC5F63DEFC35A577758EB2B97026A53EDA6C6811CF7FF4B1CEEDDF7BE49BDF5ABEFC8EBBFEE30199102B5C054FA1F7FFC20EB58C211369F64AD440BCA2DB7C9A97F1CA2BAFDC79E79D4D2D646A492B6C76020B48BB9A0D7CC41147C8548FAC4CC32FEC094C6F148F0D912CB0CA8177401940D668125DC75D6713D03C1AE00BC67F20A7580CC16B073CE0D914808D8314E01EF66906DC775E269EB53CC2C7A593127E30205E549759EF6918AE7505187EC0974A3375908D3EF18C124D7AD778DA54B5FBD5DF9FFFFCE778C31225900010A03614C8624EF681830DE4AA91F286E81BD6E45C695157A6CE365F337AC0730862F45FAFA68474C990DD0537028985378E181B37976672D736D9649397BEF4A5575F7DB54649A62A65216053AC80FB81761140C0409498C4F640B220ABA13DA9EE580AC642F32B5749C690AE65C8A4EBBCF9213E9004C25D77DD05BEDAA925AA8640F198038405067604A19FD55DB666DB95284820B8F4D7CA6A881F46212CB3FD9A0AD771722FC5E19D95424C2B9AB636374DCA91A64BC5E117F66EB44BD82652811FF8C007C86002D8D40C921A43E81138E4FC44A4FA752BB37EDD880917C5698548F2E3C7A11F497C3A4055BA258968F37939FBB6E5965BDE79E79DDA53F8DC038F83A603EA916A232F5525D72CB91817847A9DF8E554D884E7C11F9D122B453F6F94CD8FD65C63C1922D9FFB9C4D3694072C05AC0F7B13933870FD6E455B532DCA896E3F22688C7F8B21DCACA647282F9F43FF241DDEADDE8043E9772B75DB280F2BCA88B27ED228699F1B6DADB9B20B61D58CA1277F57DB47DAB739B25A5E72474AB5D39407DC6E6679D59DA9D77C4CEEEEA85CF1D1851DFDD75ED86ACECBCBCE4EA9727FC75675E7FFEA57CDBBEEF9C5BFDEF8BDDB6EBFF3DE7B1E26530B8D8EE6788EC4A19760F6BBED50CB82C399D6CAD0FB43AA17937ADC71C7495FA6DA00679B61450255309501115D33CD0E4048CC20E3B2224C07A632BA6B04877B81BF37D5CCECF2CEB59168674DCD8647C691347765994D8858B4D912B21F90CD5E1CFC945E7A16A3886D94A49042738EA75F37FAB69D0EB794078AE54D8970CC296A30B52135D4CE25BB65778C92C55C6954B773DB10B86B380A0C8B2EBDC30E3BDC70C30D29A43F2D678B1A0058D415B7B085E078B9669DD568EA8F7ECD3164A9FA5F86F487EF73C6CF31D38991CA5C400A9B4C23AF7B2AF8E4B84A6862F6DD1CD6550ABD2FED53026562D6D2F41CB0D170CCAC157F749107AE682092C92C535DD2ADC1C42763BB39C7A1D32E5EBCD884F018A908FA934F3E59DB198031E97684356BD2B84EEC129EC8E45951CD30E94E6F191B48FA83392D2A460BF7B74835D55736BD99F78C20AC683B6635261CF852AA8BEB18D5390CEB98E541C2681074CF10E2EA546F7CE31BE58140660E39AE4EC818EAB635C83026C5F804F4BD9E9A886CE7454481C856AAE255FA049257EC7B7604311E5D826C8E493F525D3E4470911977EBD5BC6EE951D4DC3EEE9098EA18731A48D231313A08E960A84556161BA57E4FC262F48F966CBED9A61B8FCDD3922DDDCDD4C373EDA280F36ACA578D4F4639E2C51A29B1F240C1D5CE39A662C84ABD4A01571D05CA29ACC2BF951E6D48E94ED13E8F979F17DD2CEF361BA5026E360AE9E6D1854FB43B4DD94BF33AED4A01E7CDCA69EE8FAC86ECADD599D76A8E351AF3DAAD79CDC6880ED178F68BF9AB27DA8F3E9EFFE8DE5FDC70C31DB7DCFABDBBBEFF338209C44835DF33F69989AF8873CE7E271D6A7D09B9ADD86570A76045B186226CE1139FF8C401071C10179FDB90591C9036061B52D434373C35500592CD260B239C52D4358BE68561EF99D528124AA7CA3436CFF6EB5FFFFA4B2FBD543F44E6BA9FCC6C1BD514BB2EE919683C926682DE0CFBC133BEF4EC2F7AD18BBEFBDDEF122AB077E8671C00469ADB484FBDE38E3B5E79E595AC16FB4FFA2D06900300EE2520E9A037EF7CE73B4F3DF5D427732EE12667D4C1C30312FF898182B0466D6888962E5D7AE8A187E293D93C32042C96C0467881668A5C32211640BC965FE6774C75E276C6DB9B71CBCCB18FD871FAFBC77FFCC7321A34B35AD8165E96D11118E8BA612B66E36687E73A1A5878991193952A055CD42868FCB9CD36DB6CABADB6D2124D958767944C9A2949EFA5A87B204CAA4B98F4DFD446596847CF5A7AD9CB5E76CB2DB7E061F3F900EBB80D3B9613195004054D3B6865064ACE91E1A22EB8726721F098A8103F3B3E2B554F8E3F1775C92F56F58CEB2D7AC0466071368CEC54A7E48737E9C08B21320ED4528E2C9B7E8B1F098C26AB7A5F72A4A41F311EA295343EA26EE53DEF79CF673EF31932B8D813CE32A45037982A2D68783FEB59EA5F434AE84B47FED55FFDD517BEF005DD83BC05173AC38252D4F55D6C0783F00917915274189CAD946AD61DB215D2B6D0C6951EF04B5FFA529DE2DA6BAFD5A70068CBDA8911F925E3A9903B356FD3CD36DA68C30DA4CB26BBE32323ADDC966015822E95B2044DD1B765DA9FDE7A2CBAC576851B50394F459EA78EAFA822BD7FA67CE27A1D54E52B65D32439C9E36573A4564F3A785EA73F3A3A327F417BDEFC76E904779AAD1201DA4E9D15ADE648BB3DD66C8C3653696636AB1B58DD2B1B22E5CDF9DDC9CE638FE7F7DFF7E88DDFB9F3D65B7F70D70F7F5129DD292CB7B64C5D983F039AEE7FAA436D649D25744C7F3A93F2F35BA8EF74693ED7F2A2289935447513794D0A130989BBF33157610303E5A090DC1932DC822C14AD120DA3EA809BA7694C560194065C46908A2E146659CFA180B11F2D7FD1FA7E5827934C40EFFA9FE1F972A572BC7F8DA43B51463E9DAC2E3D8C51AC483A4127A254FB04B6380D3B27014F68D197D31AA02E33DE9B734B385B594D1B42E47F0E8587794E5E1C5C42B36E998E46A1DE174B1C95434421AFE859962C59221BE8EEBBEFD6B71AB4BDF6DA4B134734D2B138B48EEB44A1A001DB6F42EF54873151062C511B192ED24BD32393B895F86A444A1867C283B3096EEB18EAFA5060FAD01E5854D879A0C08CA9777DFEA10F7DE8F8E38F4F359F2B5744AC1395B15D35909E1F8EC917557532358144115CDA8E0AD4DFD8A456B2FEED6F7FFBB265CB88276B21691662359A23C0DDBAD5A92D5AFC04072D186DFF3046E9A17F3FFAE8A38F38E288E73FFFF9D2F7EC350858C0E561BD0D136F35A6F7BBF583C7ECB20339FE2AA66006E8E5B31A526E1887533F28B0F5D75F1F779312A654B98CC840D0DACCAC1E4AE721DF7CE081077EF0831F04A28511A391D457EE3BE238B321697E40BC0BCD5ABFEA09ED1400E10472BAAF7CE52B2FBFFCF25413A815358E8F55E11C1359E7E8B039066C8518AB3934E6BA1F5DAE0C6F6008907567C808A3AD9E182FFB0B6569AD35E76DBCC9861BACBFDED858698D96BD106CA75729607839F256B31F5E56C0B6BEA3F62DBDF246564FED933AB880D96A9A029E52D2BDEE78E97CF77B459AC8B3F1BCECD3D06DB68AB196346A6BFE8291B179ADB19166BB845995A9ACC6BC89A6EEA9319A67EDACAF059A55B1ED62B218EB8C8E65B914467BC5E3AD071F78FCA69B7F70DB6D3FBCE7478F56CD4D276B999ED5EB6F066490DD9DFEEFB043AD696530BECCF26A14348B0CFDE473A247CD3D1B85BE768B4EF2B6B7BDEDDC73CF6501B05E11E892115ACAFA956B438D8FB5376CA1EC08ADD964B439F598260AA03D1C8A13641685D4D69AC34D4679B169F34077E52DE4C4A71F360BAC0229F4D14BD3E3549626BD407C9FEA082DA2C46365E1CBC963D89C147BE49663DF7266B72CF54F481E231170328AC0AC6B12F2C8A890875E58338E4FAC138D050FF100C7D2593011D9EB8E14CC3223068ED2107DC402FE59ACFF718A84F827AE5B6CB2691222DC5CECB608D6739894C5D008CD2DE636C874695D62871D76906B0BCF25852206E94417B098FEF2A962668726F3DA4780893C746665F179861307066C923F461398D0DF015EE438C58AA94EC4DAB8249EE9B9B63D670B2C1AE80E7E0E8F8F7E08AED0F4D7D6139C241AEB1AA277BCE31D975C7209E14F4A28FBA12FA48DB668FF51B48DB1DEA8599D31F5F05C49BD6150F2508DD0DE313E1DAF819EBE9A085927DA0E871F7E38403CA346226B90C79046A55A8AFE7CB8E8193903B591349FBFE266A059E5066294682A585B8DB65FC80746C092900D15532703F5E8D8139EB8A54B977EFCE31F2FC1B92E71D3A8C915FED6B7BE553392E4A9E45E6EACB168FE7ACF5EF759CF5C6764A45D762BCAFBCDAC8E24735CE501B746A678C323A3420A1D1A4CCAC1E7EDA60DD22735EE93DBAC7AAFF3D5BBAE0C795767EDF67BE3291F6F352B0FB895465BE39D4E4BEEEFBC79AD9191E66885FF2AA11CF3FB8DBCA34D5174B312AF4DBA3A2BB2E6BC567B34E5F2FFE499B5FEF3A7AB6EBDF5C7DFBBE3EEEFFFE0E12A88E11E82596D2E3DB9F3A31448BFF30EB5598D574A73A28A065EC71E7BAC8C44AB2256C949279D74D34D375D76D9657CC89EB4DE7245A9E1F11CC0CDA0F2AD860708F47D937CE20247040DE7FFE8473F2AE7E355AF7AD577BFFB5D2DC17DF7DDF7139FF8C41C5162F8170D1A6237126C282A8CE2830F3E58D4B5B65C5D8739E11A8B089DB6EF4E2DA7A961045B11BD2EB0E8C4FCBB75E7706C532C15B25CD6371A13BE8A7DAE5087B2B529262153A041B01F8339C2A0EDBEFBEE32B76124E0DE7C12F211330E0E0282404851F391E1313B3CE0AE212E7FEA07BA6F8BF5F837D50560EED3902A8FAA57F5E34291E879AD801961F7B4F019629824AB3986C0AA38AF26C973D041076949E00E12541FC6B9785E9C387487F901645924791DC04F79C6797CCFBB4FC51A7BEF7BDFAB35A985A7E930BAC78F1053068ECF3BB6CCF96163CE425B524C31E2EA9C907C24618346A085CF0201A425864C25C7CFCD809DA6D3E00C14CD5B07834B020AB4F3CE3B7FF9CB5FD6277A76286091338470F9A157758C30F195011C3E43AA2DBF2C1422BB6E1BDF144197EAF4A781230E2FC5565A6C37648EBB27F56A82522C30C34E53C0CA0CF0FAE9F60E3EF8600940041A10B965CB969D78E28965D9CEAF7EE5041909786A3D1C2A738C015F8265407B78876AD8F53A3978B114124903028D6C82AB8F607128D379B84D8CD792254BEEBEFB6EA2F91393BD56BB21A5BB70C1D85A6B2F5C63E182664B9A6C527F5B7983D0534EF0A1BA686AE471953BDA63EC5554C059D50DB8729CB1289FD4C1BEEF627A747A0A6FD1EBF6CB64F0AA8A29BA2F777CAC3D51E680E73547461B7285351A639D91564B3A39CBB3562AA41EB26E6983F6B27EA5806529B4E5018F4C743BABC73B0FFD7CF5F2E5F7DEF1BD1FDD7EC7CFB432B44AEB35ED54C72000B5A84998F3DF61875AAFCBEC29828F807DB1D60DAA720F0054ACEBAF8C84A7AE1C73D29CD8A90ED2C67869AA4B66B59E28A5479A18D4CA394DD6886B18D5899487C4C46CCC4AFAEDB6DB6E7BEBADB7B28D8998B1E5ECF178071247B267DC08AD9F62B001FD17750F7EB6B6935C76ED25A45594657136635D720CA27A91E8FC4471F5A1049654A3F6304148E09D60611899549B537FF2277FF2CFFFFCCFBE841D2F73EFCD36C57A7C82B1880FDD1BE310EFDF2BCA0F1261474CAE23C3C4F4D0679C4A43ADCF895E6AA83FFBD9CFCA743BE28823E85FAB970B1F538DE521E6EC881C89AD46CD8B4B1B2EC7D8C1CE6864A433FEFDDFFFBD98B36E3B46057CFE3FFEE33FBEF2CA2B1D8B666D0C83802C97CC3D020662BFFDF6BBE8A28BDC066D75C56DA0F772538E3AEA28436AB380AAB581E5BA413DE33AEBACC3FD0FF42834B43BD50103EEC4D1FB48229D6AC222BD39FDF4D3DFF7BEF7E1EA799D1B36613A2A43F189CCB9FF4ACCC5443E808151B5ED324C00EE890081882FF1F77FFFF75AD5F250F9EDA69B6E2A278447A3DE216655E8F9DD0F54D52980D8532849EA871E44B14039AB89F3D835DE8988A3AC2E024E957DA0CF69846A6656B2095A1232FD0F3BEC303C4C868B8E81D88598837AC30FCDEF11B526B602851E8B172FD6200C87D6667BFD3FDACE034E92B25AFB6F55774FDCDD6123CBC292D6250A8222C835DCEB45D48B48124510143120E02292040444C292BC822012445110F11301C58011451104D31511490B927761E36C98D4DDF59DAA7FBFCF9EA99E19E50BFDD3A177A6BBEAAD379CF89CE7B0259063DC2837D182331CF4CAD3186BF12C3BA74CEE9D3A75CAA4DECE9064C3C3831D9DE97A055C60B888488F8CEEF7A9FD2A7FBC329A14BADA52BD39C8998D3D3AD25B3C92CF1367B51CA595D34F0F26A9ED8FA15A47D3AC81DE8E2153C0DD5D959CB4B2C31C941A2649DA51CD39A2B36A7D2433059C0BBB6023343DD45133059C748ED46DA53B5F5C3AFCE05F9FFCFB438BFEF6E8729B713B9271BD93B8F6997FA87474A79D528FA0C6FF9F0EB577DE79E77854BAFFF4452E596CF2E46F907A3E500342D2FEE92927EDBDED5A13ACFFFDDFFF6D96A3C95C481689AA69BD2076862030295AEFD9DEC274654F6FB2C9266F78C31B7EF18B5FD86FCCDFBDFAEAAB69698EDB2172CA31C74F47117B73CD35D7D8E1B16F619170DA49AB9B7F693F6D0CF608F08AC0D24E9645B049CDA17073BE0B13C1C346D1701B8B98B6CA76474C52A4AA5D53AD8E9547A0901F5F1361E1998F843637D9B7EFBEFB5E7BEDB544629516F5A322C74CACDE13EF25E3A3886DCCDB6CB38D3D35381D20ACA855489EF10ED9098AAF4ADA7A8D82EB9945B8101F9341638FB370E14213BBC451E5354A6802379326209E49FAC0C6067DA0381735DB21C66044021AC66732CA224FB8CAD870D44CA39B5960CF0B0E512500CC617B0E9898390025D5C7ABD80F6C9A5272F65CE6EAB5E7B6096084D8F5CFF6FC0E3BECF0FBDFFFDE27B3392CB269143AF61B52110BC949292441282AB1C3A9A7FD626E9BAE81188AC46E6183C1FDC5D3C2C266CBA935B8FD09BA0CF61BC432C807F951AA7D6059F1E0B15DC8C8DAEF65E0322AB63DC84DFBFC8E3BEEF8C73FFE5111416D272963AC25B1644BF7DBAE36ED68E3A4840F754E9C5FF7F2701CB3A2AEBBEE3ADB607642EDA100BAFABE2FB6AC7476B71B11805177138A9DE04B61785B6FBDF5A1871EFAD9CF7E56D92EC4B5C215F4743193D1360C881CCA9FBC552D8793DC8A78994C94996D376BD6AC161107E537A4F4A2C56492A0D2D3DB356DEAE49933A7F54DE931753838B8AE5A0B84A073155B049F51C0C3CE9C97EA0D0EF2E073C0F99EABF0BEA0C04CD599D23172E00D47C51C4CEFE7CD07EDAF7573E42AB5E19C93B21A26759A81997476995ECD4C1FE740E822071CD2CE82233A698CE429D5C648BD70A99BDDDDBDD54A6733AB0E0EDB91E858BA74F8A1879E7EF891271E796245B1F946296086A1C5AEB806A221FA3DF257C2FF9F0EB5D88FFF67DA37C4FEA08A091F75D451B7DC720B4DD4EDF7B6E96DA742C3ABAF989EB0A940D1D22C8866EC0802024DAA5EC703E0702A512D1941C4582D8F94A0D221B4A365579840C1D8D5EC0C9C73CE39084D0A03805A10EAF4302ED35510BA42141322ED09E16222FCA4ED61AA4246907992216507EFFDEF7FBFDD94002C3E874F2FEDBEFBEEBFFDED6FC3E806828DB6EEE25B6DB5D56B5EF39A5B6FBDD5BE4248933911F03889E4C3D011D8B450FC40E04ED5D5B82CE3D553B2CD449F4274570CFE28183F7E5E2C50E240B321BA142C37510781BAB1269348BA693F6DA836601B36AD30E557493A038EE58CE0EB43080516C926C1BE45309FFEF082BCC2CB3D71796B89781940A9FD924A42E2137AA83113C0DEC2B0A7A02655A9227395CCF10DCEFA69CFFE86D19803C0343C85FC3F051EC41FA24C399A18D3C47351A93E0A4D0FB2E9E0830FFED297BEE4AB131144AA66F6DB43A87B98CEB2A2F04C430D85DBCD987D7311DF134FB00F64A907D01183556F1FF9CD679D75D6F9E79F8FB4C1DDFCD8C73E6676AAF9CA18AC8A366BE6A53B49909988B02D846DCA6197A9AD64BC6A3EC54D54899CED7653CEB550233BEFBCF37DF7DD474812962BBF6DC0128A0060975D76B9EBAEBBBCB5217275F0012A522573BFCF3EFBFCF0873F443EF8C92FD54F4BAC2951623F6DBB528C9A8B53F18872B4D693272479D2AED691CC98DEB7C9261BCF9A39D5945FF181AC1A15090E2A1E6CA3D896CDD194E5FA99B611717414D549C58E2C3CCB8AA0070D17452F367D819ECA15705AA8ED4A3DAD346C45AAB58629E09E9A39B595AECE50ADE57D82D3BC1D9279E7D546DA9DE47D95F204F0C8909DC6BC19B05D6152F7942CA90E0D8781816CDD6065F98AC6A38F3EFBD863CF3CF6D4B2A2BA4EAA3489B3B91E55A818B28435028B9855186DB6FFBFEA503B0102F65F7929BAB2FDF6DB9B39893A59DF7263B444963AE4100248B1ED6B17B12F9668D524DA9AAE1166C335776AC4CE71696CC20535235B4EA971ACCEF15C7CBB14307289155ECA037DE6339FB9F4D24BEDEC3DF0C0031CE92BAFBCF284134EB03FF115A1D379701BCCFCF9F3FFFEF7BF978AC7C0E0D8C754CC3D6FDEBC57BDEA55E6594247670F6233F0C8238FBCF295AFB47B61D5AA0A0BE424134294AC5274D1A08D23328B291506845B331B7CC023A231236C5DCC0233B1528A51953692E823A4506D0C5B6EB9A5391F3660C2838C5FA142EA34049A6300CDD89DE2CD6F7EF3AF7FFD6B5C4C4172B0A24C2C9AB854D98627F707D5824193C456A40CC6B6DF830F3E6857361565A3BAE38E3B982B9F35E41C31FF13D0AE2591F400F30279DD748D4FF42C0A7266AEA75E69EAF063F0FFE0A123844BDF59F51F0BCE9750205A01709971213A761E566D5FA1AFA8BE428678CC721DC50851C0AAD3F554C1484E451792C8AB651F302D78EAA9A7DA9B0B2EB8C06C3E9AB80038802BAD1949A1C154A3E7CCC497EA0D91095C216E245E1A890ECD2F344753BD4D7D84964750999032C159E43C082E1B5289ECA70AB0133960EAEC790F3CF040DB844F3DF514761E2211924EE994347295F801882396C9B1F72643389558A5E0A8B5636DFC64127D241C958FCB81A98188E38C880FA45210BE927FF9A7E168CC444C58620F89D07A426AB4E0E3D5EE467D24A48DE95337D87C8BB973369A69AA7960709DB99B15C58A9BC5FE2B766633091ABD4741A76D2494FCA9560931349D78055C1C98669CDC42948397CEEB77EDAF453386AAA925D3BEF54AB5D95DB5594EF24E83D5666A6640D22A016A64BDB6392BA1D26C6445A3A566EE6D5793CEA4BBDE4CD7AE1BB6B55E37545DB1A2BE68D1E227163DFBC4F32B8ADC648383C63416E6C8A89396B8FE658A96F8948C62417CF2FFA6436D88443325CDFDB21430C524502F71244CCB723C38BDA1085AAAC529B24325C236C233CE38C31C503B03071D74D0B5D75ECBB7E0D415204BD5EB76118E84B8A3A998B2932F6404DE6AE660B41390FBE37983E1E2001026659BD1F182EFE259AAD7299028A1CF94C986D3D52C892CF62E5445A93DEC269B6C62FAF537BFF90DEA993A9C30BA25837FEF11767A2913295587FC5DB870A1894522B1A0259147881BCC79112C48EE131C1B6FDDD3C8E4E59B24CA18928FAE79F0914FED5B65C7E55D912368C696F5D49E12485080FAE28B2F36116F2A19C58CB328320792FDC1310CDBB72EBCF0C2050B1668B7B37970DC1989D874C77B5E9D3B8AEB6C21D842CA0BF0010E9DAF0FF6C727194DF909B88CD1A29F92480BC506230EAC902C0B47809D47E0A6CC9E089CEDA1285FF1E91E684F084AB1FA78A2A5369452C0C20AA08C4B9D8C43E42FC358274B42BC4A8D297D1F8B107BA0A126CDE3B40D6F83B4E380A627825A19DDD9502751D84396C0DEDB5980B0C5FE4A7B531314A4D2ED317152ED9A488024D6100AB929235E5C5A426CD8D68504B094214D5C7B4A459E58056A2E407831033CBB4FABB1BB1401D201F7F3A30639648ED0B53244A889B2EF7EF8C31FBEEAAAABECD1FEF33FFFF3F6DB6F57E706BF751515AE385A40B6DCC73EF6B19B6FBE39F1597129F0DC630BF67EA428439ABCD966B902EEECB2DD3354C942DC1F75CCAE9CA02ADF3495D056ABA34164EB9B20B554514735877089358B40B44B1B0739C738C1CD50B173DD69EABF1AAA95461E6DEE4CCD21B6AD9B7F3D6D24A673B346D192308F8DD4C3142CC97C7459C15B56EB2CBCC97E737FD7F48FACE96F9A0C5CB5A2FEC4932F3CF3F4F30FBFB0DCC797F0D8B2582E6222C67615B36FEB6A2B4D7E6582571201933A5D25551AC6E950CB09A724BFDD9E12FC47FB52596415C30859ED83E7546E50CE2B99CB76CF62F7EF2C627D4B6638B9281C0E46E5117D633EBED76A0C3244C8896FF01922414FD3B1110587ED549ED267564A1B1A2C22914FF3868F3FFE78FB2B3604F7F2F8463F93210633159BD11B6573B176F16B8570092EA88B1A03E18CA52C238CB41FB723AA0CFB015768C45EC84203659193590A55C753940EC1E1A7820B79955EE81E9592DB249BA09938B44BAE0B132A8BDDD17D5483C7AF445AF26C7423C5D4715984D8E66F9B6DB631173C8DBD1654F485AE52FB0D653D4374BC90A1E869EF4279762A13AC056EA3CE74793B8CD551E625897DDE0459F266878A47351B0AF680810A0E4AE99772975D76F9CB5FFE825CE62CCB0622F6AED280F9F3E7DB056D37DA4391001202DC1750705935C7558CC1F7050A8575AE8E3D3078F079CCAC3436B4079A3058BC585FF6A43E4FE914ADC13D92DC87A36551A9EDA9BA4D10A755846FCC7D253F3875BDEE394AEA39A143649F34496B5E3B511331DACACD2D51EDFA794B0B2E0E95F3DA17E588B3CA34C3B6BF927153D9BAEEAE11322DF8BE9FFCE4273FFFF9CF5337CFF1219345E2830251A8BC0199B29F357B9C05CC0E852210C51CCCC423CE7D446568B88E02DEA0AF77934DE69802EEEAEECC03B90D1DB011AF80CD24F551562FD17C0E4627B6A0B8CA075052C00856E43FFE712B5A9B98A56F4A34CD93D09566ADC30468A556358738E7CE4AF30EC1235968A06B0BC28DDC30B4FFE360D7D25A47D1DD61A8BE66605D63E58A8155FD2343EBAAFDFDCD679F79E9B9675F7CE899257EB49EEDD616D5BCA2C71E7B0CAA3C5BAD37BDE94D66F28497F3C27EA44BB3C45312D19862A44B62B397F136348721757439255461E9EBDAA91C75925B9E323344F0B040C589EBDFECE3196C53A9D57FAA8055E3C8864601CBBA07DF7BF0C1077FF9CB5FF60939E9037DACA47A83A362D876DB6DFFFEF7BF1F75D451575E79259FA4B52A1754718567568246035F013BA07DC786E84895E0A09E4920B8027C8F445DBFC3E3175357242DEDA8BC9D8FC869FCBA054B239F5B254675D77A72BCF927EFA84A5CF680EF335F1294787B60C291B6F206148A44D492BC1C33A8E38301A60BF7DC73CF9FFFFCE70C5E5DDF712984AC195301EB3A6AF41422DE5E916D512BF0A29D8E582D43D4D615D768D517D5941A4D9AB6A35F90D4863850A9C567F7B25864C1F7DA6BAFAF7DED6B590466DBF070B630A91BB1B385FDF3F2CB2F3FEEB8E3245204B754BAC107BD43C460DAE0CF3AEBACABAFBEFA85175EA0BF1C9E9CEFAF20BC37D55C175C70411A9B9DC828513F4A42EE84FA891261A6109350FC430BAD347388603DB10E80C365092AAE394AE9451C989A78E4860E026FF0A1ED9A78C97BEFBDF79D77DE29E249FB8CB0F7E9E89A786D925294CB3E6C6F6CA292889D16EA4D69020D06730D9B5816701639C659685B11FB18AE8B087F6CD83648A4960D1543D083C9ABB1B7A3171D21222D5409B2DE59AEB8CEA9B98159B05AD9234C99DC3367CE6C53C0BD93723F6064605D4C818C30FB2D055CEBF0FAD5E3ADBCDCD4894D9BD018A53CAA9CDD5A47259EE74C9E58AE8043352F8BEA303FD8645696FFEC4873D2AB5ADE8921ADE40C5959A39E87A00B71319485CE229D938305427EA46BC5ADD68D0CAD5D33B87CD9DA952B1B23C3D5B56B92E79F5BF6DCB38B1F7DE6C5E014B0B08EBC8047514461877662A69EF1049CD78BAAD65704923323969909404992654288F0C60E3F61431B9E5D9F7C8F44581AB92CECBBEA202D7C41C375F00EA303DDDE8DF6CE10F6E004E3544903C6384E8C4AD7ED3CF8DA21C1494A044315C703AC9164B1CC03A16C0F0B728D59B5C5B22B6372D2ED5C755FF861305879A3D3ABDEC4A1F1EDF8995CA6B044ED194E3FFDF49D76DAE9F0C30FE7F831F995486225754BF249BA967966003E72AE59E5F1C16DFA9032015EB05A0A4870C47C27CAF6F9870F017B1FC164D332DE7AD9C74C761F73CC31252343990B168521658E98A2A4805BC515310000FD882986CF7CE633EA4CAE9A544492B2AA4DD7B50623C01E0195A30833D34BA6537B00558A0457E58F00F028E0CCC1A63CC7131B8F07049A40945571751B36EA5C156BCA5B83DEA24E941527875D120E0C8FF9413473E44F3BED34FB8D3D8B5D44E6AF7AF4FA26757A79E0BA0C08E6A1FDBEB05EF39832373D730BB7439A3157E4CEC4F5C6FA7AF88E40C88A982A143CE6BE9202164B0C03509EC2DBA600D950D29A64A8DCD830CA46A945870DFE231FF9C855575DC5B0C9A31147643B65916794CBDAF3DA2980CA571C3560450567F3CE8F8231EA2786A7AE55106D278777D34D377DEAA9A70013342237BBE078E8239EC2364F4E33A7DBD8F360D1B4225DFC2509937A3B67CD9AB1D1EC5953A6E4BC1343EB561368F20AB8F0614785A4A4809351C5456E611AF598E417403A2491B7DAF4A8D7C1F6A619CC7731056C9E6C5AAD64795BA4C203B665CDAF908EE41C1D593DE48D81F395AE76AEE70303D85529C0DB03F560C6CAAA15836BD63447866AABFAEB4F3FB5F899A7173FF7E27A8CA8876C80C4A35061C71D77342577CF3DF7D86F5E6E2E169B7D9B6DB679F4D147495E52FF805A5265BAB7D6C77CA1BAF05410FD760E6D3C9872F6F5EDB7DFFE81071E60E3A28194A352D414873B8955F66C883472058F7790E45E6B5B37266C8AE0C37DDEC5B101032924E0C9D112B780AF3ECC22F188D6456FAAAE0BBA629BADEC46117D55EA512438E06F95FE819DC03F72BBD961CBB4DD76DB99936DFFC46AF119A9A4E0A7A5DA016A0599110C4FEDE142F47485794C5C5F55D928E209A24A7BABADB6B28BDB29D5E0434CA966B18DCF04FBCD8B366C0EDF35B2F492AD435E13709C7D1D3E2CEF4C280917C64A3965AE8489A60240CCC8A12AA35CAAA52929604D0EBDC5A8AAB7DD6B8FC0FADA31B4F74C0506AB621E708DB12B5427D65E800040EFFAEBAFFFD4A73E857F69CB6A877D75F1E23469ADE7CD9BF7E4934FA200C84784C25701286B9F2C55C69BD146CAC37EE3093A541C150ACD4A969494966A730592B745572C04A91D46FBBEFE8809C381B887EC70B7DD76FBDBDFFE665723F4CAB2320FA6EF6DCC36B1845E595C8664EBC5189236C837DB5B9659296134C1BE4251A9B7077CBD707A7022ECAF1C3492D9F6275B141C477C5F7BC066D16E551CCEF218DFFCE637DF75D75D5FF8C217162C58005D894E1C5AD376914D230D221BB1F79798F8AEB9E69AF7BDEF7D0ABE7ABA85D243216F7DD136A46C50856035BEF18D6FFCFDEF7F8F28260482491A9CF2B66D00258059A5890E2A6BC6F6CDA7B89045491A3A3B2A1B6C3065E68C6976A71C8736D24A32D7EBC331765D48C9B422DF31388B581E4C29C497D4F32847A59A440FB875482AA2A88C3AB835178939B495CEA27B638EADAADAC357AA2DE5DD4C2BCD34349A5941625204503BBAB17609A116CABEA3B07383F99AC9D0405837900CAC0B2FBDB4F6B147FFF1E413CFACE81FF292D7C7D2B3D8EAC4F6258D757D80FA5F7C4151B9D75E7BFDFCE73F875E079603DB5E666B53EAAA1634CDD164DAA50D6D1F3027CF2E75EDB5D772F2B1D685767EE8A187C4E28BCC9528012142081A158E8F48D35F9099DED7D4C2C9C393D06F8EDF64D72F77E65A27219D517B302F7AA2B892FE90D732E654D82F4D6CD9356DF7DBCE8439815837287F4A53ECAFD21C2A3C983F7FBE4DD798F7D5E0E528E046B05EF807760593C8E616CB3F0BAEBB5925B251AA48C38664EB055D972C2D3D266EA5E2AEA598336022003E1EED55AA7A1A73BF99477BE289279A2C5BB46811BFB461F8A0AB7F011325B95812F15A77C52A88938F791DFBFCEEBBEFFEC8238F402C4FA64DB156FBD3BDF7DEABA6086A365C927789632BA314DBE6F0A4934E3221AB46DA2A83B1CD6C5B57362856918DD9F3A827B12A52274B3ECDB1C71E7BEBADB7DA61915FC831246387E9100A7D59C24061C0D1E60805639BD9F4A8D2BABE2DAE37A14221CAED2B9AC3B4E08CA3C3FC01071CF0F0C30FFFF297BF0CA36BBA2AAEB59FCE0EAA88C8BC047D88D69E6F284E0C4636A84A64FA3F0000FFFF49444154FA1D99AD60632694A2DCF0FA76F131619439506DD3355FF12080F1E49557C0C46929223FE49043BEF9CD6F626DF8B4B43F1D26E2CE38E30C3B3B242C78103EA06844257208E2BCC20140C8012828A746454DB8D4BE36524D5493C8DEAC0717800B7CF825975C72D4514775172F3AE609851A0ABFDCE69C927191AA565CE36446AE62CE7CDE7CD85AADB9F3D457AD80415572C7B1ABAB63AA29E12993720F3AA947DB673D082BFF673A8A7355B38F2B90B84684BC6ACD08738F3A3849FCC73274703C96F6E9EE4A35EDA8A479D1706296458A07DC0CB6C07967A424CD0927B966350F4ED7B3A4A57D1BC196BFDA91F3647556AB7DD54A57C83AD70D64FD2B479E7DE6A5071F7CFCF1C7FFB166A03E9EAC2FD5EA49468497F3E2CA9457869890C0C3DB79E79DCD68CA0AB639DB3713D71D9D75D6596637016707126CB203DD89282760C259E53AA289E70A123DCAC1D8CEA6905132A8DDB34922665B711591C38D394E9D5E963B8B08796E7AF6D9679F79E69958B5748E425293D8CB46F3988E797DC650775D7B4344539B64B4436216AEDDC51E0D3124D7C10B659F6B2CBDE4C629722B45CE994C62152F99ECAF7FFDEB202CBC8462AE4CAA9A2FFB97BFFC056F83E419B2525A21B85874882946807EA5FA2B3FC344DBC61C7F89C7D85E360FB6D127D8B759ECE6C44F9335B646CA5664B133B964E878D7114ECA842CFA9EC94701082CDD9EEC28BDEC5B7623357857AA0F481D3008C5393C876B52B04CD0D60C5E91D2542711508656A09686F8103B8A83F0C94F7EF2AAABAE2238699F4425432DC7ACDAC5172E5C684792EAD8D7BCE6356679989437A3C7D60E96060218849795EEE101ED14DB1818A1A781C4BDB38BD8A8EC6A3045E000D842C0DC4481F8873FFC61DBE461346259469BDD0E88A58C429ECE5491ED287B5EFBB0994466AFE354885D92FA3ABF345E07FB88F4BFA280B5A942A1A2A4FEED7170F6EC97A41888FF131086674A7D21E9662D8B59712F5835506976359B1334AE875CD805BFFAD5AFBEFBDDEFDE61871DEC61A9E5250267B7BEE9A69B0E3CF04071AA7844148FA6400EAA1A3926035DBBBD527425D108859A545502CB849340BCC4162849C782DAE6065747C68D433367849E3C69929D9C1C6E5A6D443E8A46840A17A89F4A5533AE4C954F21085BCB3F3BB20AFE2E3A38FE697D7517FC945968E5BDD24A6F0E8D2E169D8ADE5A47C5FCE166C819A1ABB5A492DAAC35AB8580ABE688B0DCBEC87570EEA0875A67B5BBB7CBBCD0AEEAF4CECE9E3431855A7F69C99A454F3EFFE05F1F59F4F8536B87C7703A4BA9235B30D20C617CA69EF15E9548678A58F45806369F308D8A918E791D08658832D9865BB060C10D37DC205A70FBE5D5575F7DD861876123534C82B7C48610DD124018B821ED6AE61993631BEFBE254C2CFB7B025B41485A8163E5F93186534F3DD55C34798A901DE21C7BF6A2D272E8BD9D4F7B40DC8E66C1F22AC94ED6B3197BA5F948EFDE7BEFFDA31FFDE89C73CE31B3DACE36D559E38D3FB82A6ABFE20A5529C786F18AD340C64B595222BA666B9B34114C43E5134A75AB87922D1CE1109ED11EC48485995CE79F7FBE427FC8B28943D05964D325AC859632994E854CFB4B0C0378B70DD75028449267CAB7D4AFBE7DEAD866C0A43D7ECD2E4E0CF0BCE2A5EA141A417AC91E1CCA41DB5542EDCB5FFEF2C73EF6B15098A1B6828434EC65BA04DF8E0433AB63E6C2E1871F6E0A52C8642D22E3378D8E0759226BB4A36157360D6A1F805B2629B05762096E38CE76AE4C9F12BE2510BB6D690F0EE2C02AF7646F70FED4BC92403A42D5DF2B44AB519BD936C90B2FBCC09EB18109E2E06144A1886613D1A467AD9858D8841876EA0F4113BD37BCE10D77DE79273417AA0451B459A9DF301A9331C12B8B6520EC7991E128D8130A4B8BA0345F51BB08AABF8815E31CCA362224498219D5C8A83023CC1822436197B25FDA2AD82DEC76F6BCEC25332E4F38E1048E2A37458372AC7CA2CDE6C77ECAFB2A998FB41784008BBD0723AFF09569AC83E7EB2039D8B1F6D7DC4DE70FE2AC592F5E9BF522CF5A353D58ADA6A680EDD279A7DBDE6A34169A52C0F9582B559F65515D1ABA241DFDCA37415651B951B5A6DFB7CA4B8065E597CAEAADE4687552E149E515BD216BE43AB556310B36A4F56A0E8DCE6AD5505C2DEDCCB1CFD5467DA4889C862C6DA4D5B4B3AB5628E05A573ABDA3B327099DFDAB869E7F7EF9138B9EFBEB838F3FF1C43FD68D94F75312294430FFBDAB3101EA6F828DC8D983E6B012BB92D97BD1A105D7ED6E028BD294A59D25513EE960A0DD4BD5F1DE956C8F6C7FEB5BDF7AEF7BDF1BA21DA7C8677B365466ACC6E9897EDA5F492CF310DA82AD6547C2DC53B33A172D5A047F4D88511A79C0617486A97D51ECF56FFFF66FA63E8147295227E7DEA48999357FF8C31FEC9744267DF5A4526E13F43DCD5CA5932FCF4393D1263D14A45144F55532C107BCEF9EB98263565C4F270BAFB778D91570956CCC262FE812C82ADF78E38DBFFDED6F7FF2939F988F152227CC048168336ECCC461305863FBEDB7DF77BFFBDDF1F69558C1D97E784B4A36233DB7DF7E7BBBBB84E998FB04CF00199A161D0F152D30A1036690E89C6774CA46F34C69481493980F0442908FC1FA090C228B7DDD55E68480C30E20E5A650538891407C440D1BF8B129836DB6D9E6E1871F1635823D85896C8A5CC92F90D7B0CD2399B6F3CE3BDF7FFFFDEC0D48EB70FDEDA9D97BD0F4A34510DF988C7C056B86ED219229C874A928C5DE6A149DC454DDAEFC2235FDEC3DCF791E46F37B2840AA39374DBFEFBEFB7EEF7BDF033FA8D4A1F9887FFBDBDF507E0C29C468531671FE8903B2F9D8FE78F20A335D742EC4726D4F9AC56F33668B8B42A247A7EAF843A10B097BD87CD294501B4615A11C498E89FDD32CEC5D77DDF594534E092EE64C2216223F051B44DD9FB4E1B433D71F5AE113F6CCB9E79E6B261D8110E225328C34E11ECE9CB9820819DF26666D0BD99F6C121205E2244C5BE54A49DEC02FD7AD39016498DA3769FA8CBE9E9EAEA99327E78CDB5D2D5A5113982D8D9BCA8B6DD5E003A96DC67684E968468ECE4A4768358D490AEBA355E1DECC5ABDB26567355A8DB15A22CFC6945FD3CC8202D69C54D676546B1D9DB90B52ABE4C5465DB9DF5E74E7B095CAEB839B795BA76AD125A9338FA6DBB6191E0A2F2DED7FFAA9258F3FFEEC534F3DB77CD9AA556BD77939ABB36A73642B4708B7E25AD394EA0B838BB58EB711B5D11522F660BFF6CF0B9EE07B689379E284D80E500E559C1E9A70218C541B831FA3F48F7C3BDBE5760ECF3CF34CDB5B8D829E975D2EE8BCBA6962C5B7F7014C1DD5170743DC7B18DA3E6D060647A8255CAE090C0E95AF00236473A3BCFDEC11901F0F9DAEFA01F112845816E53126215A90AC918F1D21B805ED0188ABE8E8D1471FFD9DEF7CC7C43717B7B9B5DF0B09A9789D9753B802BCEC719810BB9D3979D75F7F3DB15F813F53D78131294A932588D5B53E44CA43E58CD5DEAA1A3B93A38D648EF82E34800FF415DCBEF1D6054F31449A52513F82E2914245E4893D1F90BFA71909A3E102FC86ED84020E85DB61DF359D2D662EA4339103B6375171669B4A1B9A27FA1B994F6CD68F88936C05ED9F975E7AA98FD086C246B48B9801F7C73FFED1E4AC294E2EA2B9F527A274F6B5975054A83D26565C132AAB05BBC7F07C1BC7D0D6482AB822400269FAAB5C6A34B4F2E23609261F28FA22EE8DF5AC434D9D4FDEFA3DDEDAF41C5401728B6539E13D7B9BD26F8609F2089889F08BB17C0CA0EA1A379999F2BEF7BDEFCA2BAFC4C1850805614B125D6932D5044BA7564677918A78DE14E4A9EC8666A42F648A9A919612E59D8DE670F4D6B3578E7CB254826C671F97972007590F5FC4CF56492333A0AF6ECDC9F335538C8C73953759ECEB1A19B6A3520FCDDCD79C3675CAAC0D67F4F5F5F61415CAF963B782C3F5567BAC8E9A8F37E29547DDB93E67A007AB25D5C4716EB4F8B072ADD9D4F6F55363FAC22BE0A4E8289C8FB93254CDC159B9902988A0AB1DA667AB79BAB7111A59B0356E64393D56CD1CEDFCA4353AEB23CDD56B87972C5EF1CCD32F3EFDF4E21797AC58BB7660DDF088CFDE29808971EAB94AC6846B867F9615C63300F827DE479C8309362EEF0596B6E7A5B136C74C9E9CF7779BB1899838D5D8D6FECC90D052E320E65939361F6649228C8B43A81A92A46088A4FB82F0D56A3C42F00767FAA28B2E3AF9E493B7DE7A6B0819CC84BCE28A2B4C25533E84C337417D2AB17A393DA5BF22D351A53ED2D8FE62997040913EBE956F490D648E21B9B428087A44A729399BFFF6F632B285C917941266BA3E9FF14B804944645BB81B1F9DF2840C8449282F91B06073A21A398321C6B7F893A489375698B4CAE83EC4D8BEE3CDA77058EAA020587E180D3321BB4F54C0844E56708421CE24CB92361016950224174A138B3F27423A1DDB12639DCC1D7B52E4BEDDCE4E1C4FCD5065DDDA529A0975DE79E70930C19FD4DA564D6C881233E73AC25E5805873340A812AC16C2C61B403CB892C47E9F73F4B00C98BDB4E825AAE5165E5A34CBBAB5EFBFC4A652BC172A0FBB0E23870F8B09B121615F9E75D659279C70825D1FA20931E5614984B6F8734988E99F492CC251F90D2788C7F1B6DA76DB6D679E37EA50D7E780D830B6D8620BFBAB00DB8AB5B076FEBE4A71966AC45908E9579FBAF6C653BB02666E4361F0C9226C463A4FFBABF217826B71B230BE85534962CF5948F1C46693737101E5B0175B131CE9AC8DA6AD5AD9BF6AD5EAFA7071547ABA66CE9A367DFAD4E97D53EC195BE7B6003817AB36680A580F83B9D168A3A5F40F5CCD6A11E79C88F72AD71CD5F56D94FCA2D6730AEA9CD32A6F6AD424B699D6F2F0B51DC2DC35E934D5DBC1CF6AB1FFAACD7C4F0E65393E2CA7B2CC3B0C3693A1C1E6D048D6DFBF76F10BCB9F7EFAC5179E5FBAB2DFCE5B23CD13CA150C79A97F95127A39C53AF9DCB9370C27F0E44261AE9E74D249A6841085DB6EBB2D3CC3ED2F14B67A4DABE1E8273FF949B3D9115EA47E412B688492EF2196F1C87AC051A674875A43853D7843C13E6B275C22F11FE1B988024939790FA3A4C9A8482EB10770CE1545F09EE878F380B650EC288B4520218686F8A744C398D7918CE3601C72C82137DF7CB31CE8F650AAB20C7A1649B7124439713D25ED2E365AC8A42482FDF5A58351C07668ED27AD15A9E1965891092529C074219DBD044707ABA61CA48FD7405A115E84F2CC160122CE1C4A145646773B98603FCF9B376FD1A245DE1BBBFCF2CB6D7FFA4CA15C0D7263B462353D67BFB17F02F629CDBCDECBA0F7ED9FF17AD35881EA054E68239B63F062C56A44AA5DE85330AF21CAB0CF2405FD243F7D636FFF5E7B924A6EC1FABCDAE03D068AAC1CD535D1794257D33AAA6D09BFE4D836636B13516DAB02076B0C57878D3167CE1C9303421A0BCDEEF34422A3B0636887FDA0830EBAE4924B04C5D7040AD429EABA3DF6D8E3FEFBEF27F15CD255A57D52F2B55A089EB1C2D49EFF5CBF8179238BA5E78AE735231FB5864AE0C75FB3E4E34946895583CB8AC63244C23B21A8DB15B06C716423240A765AED3D75D56A00A39A31B3696C29A92BA1011DD36886F511471C619B1F190BCD5992C402C42C5676F20C5336C84F75CE6C117255D7D3DDB9D19C5973E6CCEEAA121C8E51BB4A206F570FEBDD05B9FC3A18BE1800A3B5D2ACC669A34E3496BB54474DA55E28E0C2562962F4C5A8F258B379B649913AED303FB8DA5164800BFCB69DFCE146D6B03F575BC9F03034D230056CEAB67FD5BA17162F7BE6E9C58B97AC5CB366201F5D44F612DC20E9A2B8813F6052759EB8271B5DC0DAFEE250D9C29032DC6BAFBDCC157EE8A187C6FB3C9EB7AAEEE40483DC533CC40E3695219E5148A5B7692CD5259149864C7E24D4CD12BB94D92071887086A292F59A6BAEF9E8473F9A146D6E09EB89F80D55845C1026E5F6DB6FDF679F7D70B2EDF32605D4C45BF527C4A308B373977F2AE8F9A7E04BA5905D12290EC64305576343620A31CD23A7BAB75476ACCF33155E8E30512A39450A4BA913ABE4BB54F4D99352665692505CCA54EF1BDEF0863BEEB8C3775F40D0930B4449084B89BC60A14BF69FE43B732E6B69CCE7D2544037E81B1B372395A99C8FF49F91CB7B7811EDE4DA0D6E50142883D9B367D380D2EE62926BCC96BDFA27DAD187618510963CD5CB979B7BB89CAC4C0C14BBB5AD14D834256866CD9A656B71CB2DB7E88B261C412FB23ACAF0019C561F05E562138751D2C06079C449B56F4184D78C1C7038B2C427C51DC1727866784D7225F6540EAE68478AD6BEF2BAD7BDEE9E7BEE41A9788C18C15E1C7736B08C9E1D76D8E1AF7FFD2B4CAEB4156124DA3F34C222EE4A092C53540AD86AAD4B723B14CA9BCFB094D2A684F4F105013092B8B183F9F8E38FAB696612A12D9A0A6643B1995231A48694BA6E51C121163D9566284C7FEC309CF276058CF583E09226E6F873E818DB0D37DC70D86187292B0F45BC42329B6EBAE9E2C58B6D65297C62D55A623C38623C117CD8F95FBEA2350595C2CFADA466F8CFD868CE8633A74E21C552B85285D194E6F7583BD46AFD81D2E58105C5E252F8ECADB04CB3C6462DA6B955F25B7CA6BCA2BC1A9522C41D8A3685C50475542B2D9ED2C281EEC813C0E6C6A660AAEDE27673BB728E7FEEEE4EAB1D8DBAD9E9F5D5FD038383C3CB96AF7AE1F9979E79EEC5E5CB560F8FD8EDD2A25570951A32F6377D6CBC3FE7C58A428882C37887693C5DA2FC281DBB68E536DE8745324CBC88D69BB467A16FB92426E1A6F6A1B263ECA6A1C8D5B11DD9B21E31CF4BAC05DAF102F7128C22845571FD2742C4709672453EBC09C43189C9F2EDB7DFDE3E635F41D934221FF204652D74300C2E1C24F757318930BA52A2FDC5080941CBE896735312DCA1CDADD15D3C6BA6E05DEC76203C21D6F88718132EE5983996B4DC10D1BF67CC87188F7C33808CB455225F51542938AA8D3436898381CF979F963C0FC947B302899AA8F19C16DD07A24BBCFFA54531DBCBF6CC39E79C73FCF1C7B32592A21BB4F61ED68312AB36B6C30F3FFC073FF881FDC6F600A17B5FF5EE234C89232AB12722300B6D453ABA69EE048B1E622483DCB38DD6C6A01DCBB9106F179C0F020A48E8FBAA590DD2D685F0A3C88A4561C8EC410B6C5FA430F4D39FFEB4B93E5CC48E09FCCC7605AC1049607FB87A8A976D30B69C52122274931AE60376233A7063AE259116D4C7ABF8A70DA05EB46E0C6D310366AC28D75C1F5C1583778878AE7F5D01CB76292574BC018D63C03F217DE4EB6A8A90142546495B313719312F33C3683789E48BC2D1BE0ABFEADA290262185301EBB2B65214E852B2419B38C41DCCE1B2C2BFFEF5AF9BC742DA8EFC45D3F5CCB6CD6C3FE9E79883B0FC79B37BD898B868B5A084B4B5367D37343490E4230E7D1B4CDA798757DAC77A7BF1A50670C54C07AF195CCBD410C02453E811D849EC5F0D6E226DA0ECA3C84B549F5746D5B6E460AD337AC005F9591E378B0AB8C04E174CD1452E396985F8F279AC2439F2B9679229A966231D693457AEC82B3B16BFB0F4E9675F78E9A5156BD7350A17BF838037C712808F9D55ADAEDFA372349934F216F24BC6130728540C2E32883A00E3090E95515E7CF1C5A79F7E3ADB51BAAD52F457A0716F88C1E724F2C3F97A47B61DEA1F11A690A977717CC9078A0AE9AC7D56892F94967DDD97A8621D2B308E2D4F6B6466C9761B42DFA6D7BE4E295E1AD9EAC713A0B87444FCBC7FD08C748FDE079A4010D31B95825199DEAADFD0A4796599B8A60252C68A79AAFE4FB2C0E6CD8EA239EBF615A421BC16CA594801EB46AC084DA2A82E0D5157215E951A801E52B81805AB51B77C1DF48A7DDDDE131F2BD910285A5B29F3967EF5AB5FC90F564F272F7A92880E1D6F4AA5E94B0960D3AC3654D31C6CD4DD77DFFD9DEF7CE769A79DA6CF034F25F0E683C942D8AACEB214A715E2867D28FBBE64777A450EE70CE5B6C2ACF14FE91ED153C3E0E12BFE851FC6614291D8F877DB6D379BB15FFEF29778F3496450F26C4ABA08D35B8D4D4BA189B6DFC035C6A499F5469536003A0245A85B5B5CD1A7D8C889828A4E4B9034D24399C3937B118A7366EA012DCE0E47B39263D6F3A2EDC2E8F801533A73E64C40DDFF7A089AC2364143B054442A22FB4F8D37F4023FE139CF157C0E31F36256A0193725BDEB7F7ADB884E4DB6F19A8E0D030740FC9A6386A08909813F5700929A789521B19708DA4B1FE3D3D68BFE7290F1919F1A458AE78FCD9BDEF4261BCACF7EF6B3DC7E8F28B0B4184AB592E5B9D58E74AB2DB7B085B43D610AAFA01F1AE4F106EA2D0F9859C3626AC64ECE9AC196F66D79C0CC5A716C1219E9A3F2407ADFAC56A34C340F98EE4628E07CC757F334303C5949DE25B1D1CC9AD566C8AB957265D0D55DAD7434333BB1D9B2652B4CDE3DF7C24B4B162F5DD53F501FC98D0CFBEB487D404A8BD494A21C7E55F4425E2711E7293293F1882944A2145C35CB04E54CDCCEA61A1E5D903536E166475F78E185667F094542A25A80DBAAEB0F2ACF468246FB1E90243888928D6CC7CCA467E6DA771381C1E921B6862078DFFBDE77D34D37D92F51D8E296933D8B98A62302A24740DC5068623B75635694FA7968EF430C122771D54D217A8413E7E02BAE499FCA36E44E496EA6B1993C1B581160D5E0C3188021D2748D90A55DCC903FE8A083AEBBEE3A12DE996BFED8883D1E162C5870E9A5970697204448E113C309ACD42F393FB4481669F111E8CA39C126FBFAD7BFFE37BFF90D7FCADA40092889ADB7DEFAA1871E0AA30B4C7D4CAF5486D1FE429A10AEB425463C89AA97E596AB27A74DE9587B4398B1E208C695DCC58E679BA92E7CA79D76320175C515576832B53A15D70323B405DE995216CEA41CF5EE0850225E2FBEF8225BD7A766758818A1669B63C8D8C8B5833243DCC91C07D2486D0CE927DA1CD93521D8225CC1686D036CB7DD767FF8C31F42E1915343BCDF7EFBCD9D3BF78C33CEE0A4D395124FDDB30550F55E4A8864A35B83C8A1D75CD1892871EC3A82B20B69C82D944FF19BC47B99A1CD8BF0CA98608098CF4B0EB70C7A1C621B27E9673915220FF1753E8838B34A6D116D1BFB4C44189DEB51CC2F14C6AECDEA534F3D958C7EF1E1F172C09ED2EECB5FFEF2D1471F6D9FFCEC673F6B323914C48226F79003B80A3CA0727364913C8F34CA58DB637DC4C046690E8D3D1B458D210F2CA78D7ABE92B99A29D0DA369B5B6CBA911D78DBC73D3D5D2414F18347C2B01E1B21CBF6F5659DE8E0A8803BB34CAC87EB03D11E7AE5A7B51E01E65E01E752B2C2694C5BF02BBB700E93AEAF5BCBA9CED21A61EA8EAC691B282C59FC92EDBC1797DA8E5ABD6EA05168FFB4F85F9D58AE4D0A662949F5129ACE6F320401C251B565E3115364050B238123881269CB3C5E1912D1153625266A25B6A369144D3C6C78279E78A289F8679F7D96548DB00918988D48118EF84B628BD35D77DDF51DEF78876D2085A09564E2B9AEBFFEFA430E3944D1721B891D6CDB31366C5C2EEA3DEC2B14987280F186ED52F698283636BD0259C2972AC129053F81E162E3BFF1C61B4DD37BEE7E76852A8C9513CDC607C13118EEA5A0AE3793B3C8AECC4695321064837BD1854D5CC7B05192D4A1CA0BEE21265C78192918C43A925A16036975E912CC0B5F3489AB4D79820A8AE4C7F331B5A813E07CBC2299107D4AAEA98CA6773294091E6F3EC91A98296343029A00C20E3B00B3434B66CA83BDF1DEF7BEF7AB5FFD2ADB86487BE66A0A5453D488F4E0AAFD438CB0CF9BB1113DABA30D2CD8A682D84951AF65CF82FEB00DFFB6B7BDEDC73FFE31BF11F446991A09509D08956F72658198686E06E52F90089288724CD5FD42DCA2F6D37E79EEB9E77EEE739FB34D22F438599EEDB7DF1E1830836F38E6760EE6FEFBEF7FE79D77DA49B49901CEEDAB01E12467A8DA3C024C904BA2C5908D410C27427A7348F9BCEFC661573651BFFBEEBB9B57668F60AA614CA8E3C406B40FB9639D60E072B23C8A5310EE12565CAD12650DB3DC267328A8F5057EE9E8EA50F182D9D7C9415422376488C112D5708E1782C63E00BDA86B725FFB25991772078418D5E92B4498AAEF434CCD216D635A5C13DA7C76951D77DCF181071EC8BBD9B70E0365739833D994DE8E4D3699634768D2A49E22DB6A139A0BD3E146DD5B2208E822D2B2BE3C067143DC381B599F45907A4601670E26AED5CDAAEBA743267091FA6DB11F74A83EAA788D0CE61AA85E684FBB52D624B41596AE1958B9A2DFFCE0356BD6D93F0BFFBED54A8CA8FDBC79F3EC2E8B162D02C0365E084E3113A0469E95C287B6B2080F5139938FA1E9E22C8CC82ED85EF65395062AC950C3106DA04AEC1F0C768CDA1EDB0AB63B6172082FE7457C8C18867E29690E1AD9F693D9E6365433E2EC76175D7491B9E94AE23269A8840F7DE843B7DC720BF373EAA9A79E73CE3912CAC101F779091C94C5CA5108B44F38E1043339613B525E5CCD71BD184582F891FB6C3D688B50A4C34BE00E7F48B8855999F3E7CF7FF0C107891D0930AC567DC131F860F0CABD333D01D275A38D365A53BCEC33662C2F59B28467876928755CBB4C7816D92EB7DD765B9A766056DB4F1B83A931739290F8BE55009B47B45921761445AEA94FAD0CAC50442CD3C864E9F71EA4135C24292ACD6C2F31DB4DD7101E198A4D0928C1BE683366CEA52F4AE69A92B0369FB62115D234C9FEFCF3CFA3A514046639E6CC99630F28BD6ED36B9FF73800BBE6DBDFFEF69FFEF4A776404C2B784894E4B52F9065960061D97DCD1A48234F351B4906933621DA3138306DE2CA407928CFBD901480D877BEF39D37DC700387D71EDF96CC8C21FB69EE7556546129C1E9B303590431507744E037C4769CE4AD8E3CF248B3B649C448B233786609DD9F1625B012F4D482936EA728DFFC7EEC7E6C2FCD8FECDAF65EC56C6FA5A21105B20FD4C7C94B3CC189EC2E471C71C497BEF4250A6F9AB16F849F044EAE10DDB62554A82675EB956B18DD2F4744954A8A4F6C10E8115EF9CA57DA010F31D18050F58524C42993B19A7950305692C38ADE87D1342049ECC5043E8EF3DED2B950A752D48F6D65DBE5EF7FFF7B7FBF825DA314706735CC9EBDE1461B6D3879726F778FC9C7DC16C893C4D544B123657F9BEEA5E01E0F3332B0BE0CCECF9789A6305647846625F3093F450E3BD22005CC198BA9BB1113FB03037966AB5964F1ECBF79C9C7DA3C04B46AD5EA75E6FFD6338FFF60DF28495E9FB0D1F4EB5FFF7A3BF9CF3CF30CFFA4AB0167800320D759C1228C061C44A1E183ABE255724282401D9EA99AC81C3ABF94AD6469F1A5C0BFBCF18D6FFCF5AF7FED29E0FF95970804948DE35E36B1A79F7EFAF9E79F4FEC1AF985644735E2B20BEF1A62050EC539369F6488F19E15EF42652229EC4F1E40A4FA5AAC10F9AC4CDDB7BFFDED7BEFBDF7073FF881C9F45004BA61DD93FDEBE52F069074B6CC1AAC19F43783647791B43395F9C4134F48E6CAAEB26F61AE21B94CAFECB1C71E5B6EB9E5C9279F6CC288A5C48A1291B289A1534E39E5539FFA9410DDD819BC9AAE3E381410DC57BFFAD5E6EED880F918C70AE9A9702E93C9844B197FFEF39F3FFEF8E3D90936ABB42EA88CEE23A9D67EEABE2EFA46A91CBBEC76DB6D67A3BDEDB6DB582605E224105920493D7B11C865A352F7A5EA2C148FC83A900F59AC5A66CF40D068AF9D77DEF9D65B6F2D3587C7EDD006E35EE2B4625A88EE6A0B09356D1739E9A493CE3AEB2C948ADD82D39AC40265EDD51033359AD23476B82A118F53CE80FA9154B51933AB14778DAF6FBAE9A6A681162E5C087D3FB2BE24F7C861A9D45E06A8AC43822E9E423289642C21B6FB3DEAA8A32EBFFC724E0728934A41399E451E2E4662932013503C3C1000F0C8FEE0D06FD166E3E69B6F7EF7BBDFCD39B5619C71C619B6DB43C47F21737030A498054584018DEDEDF93815CD5646DF97448A72208C4EEA4BE871D265E1714D2595C7936FC4E4F041CD3DB8FAEAAB91D8C155790557C85E0A56EB9CA6E3D4C7370A0A6EA4AE4D2CA02D51737813BF156308D1604C634F6962A4B977D8CA09D5A5804D50D452137693A74DDBC014F094BE49058A240F103592A14CF4D02D8ACA4253868AF2C1D216F9861B182E59162DAFB1A3E277E7FA49777D616574E47E4CDA0A5EA180D90A69411B5D54360FE44B989941DA5CB76EB048950D16145123C3C323E61FDB308BA1E6A9E5D455792B2C3FDE5A527C493769337676DA692773F56C2B9862FED39FFE8449C8CE264B448B1E8FA1E5D864B1CA9BD8B2373389D18979C77603C594DE3AD15C111E81D03514290D24E0CBF580316E5A34E0A15563D68C9D706CABD8D93BF7DC736D269165A67B7EF18B5F4053D0702CF3363F3496C09CA7D088F914732F8C13F661B3157EF4A31F85C86625372E44B2B0523F3E4C199B5EDBB736C3485854BB32581AB0771AECD6F6E61DEF78C7CF7FFE7399EDDEF86846DE188F2A52098AAD97ADB8C917490AC54BED2EED9C97DE1345871109F4BE4E2997863CCACB1022B65C7F2585213DC11580F6A8DD0D55DA7CC0A4ADFDC93499B4755A3039ECB7DF7EFFEB7FFD2FF15E790F4FA0B0CCA5CC010A24B1CB90CD8967F1554105AD8DD86F00D7ED4F4A964BCE785813D2D0FE5A62DC6565ED4FDB6EBBAD3903211AA932E0DA4B5785D90158D474443A90BB49916B3E3592301A2EAE308FDE8418ED00830334FDD0430F25BA83B803CF1C1C98119B46310F82643ED5E285BBFDC9BCE73BEEB803EBC1F612615B2DF715575CF1E94F7FBA517479B26D4C5C04B3866D76C209279C73CE394A0A08FE6357B60D6F1A9479C67157C01C3C9A3DBEA9673368ECCAF65C575D751545C6D89D8A07900B5048438DC2E0B5368D6BE381D116E22A490312E104E7ECA7EDC06F7EF39B25CC816A567DD73FE5D715E49087806F60B297B6CD1EB3ADCFB7BFA8E682EF93C7B159C29414E614435CA6FC78118B3056972D8D815497FDDEB370239FB1905A89B01093C3F05653FD86A08BB764042D07B4803BE540CA9EDE2E34714F6F0E13AF37D62AF8ECFDB3463D554853D22D5775F5310AE7C3E86CB11ECCC6611E368179F964AD4F666988054E14B411880E9D64629AA67D6D8B0E0C0C9A7458B9A27FC5329B0B53B4A170D2B322408DC01DF10752EF275060E45D749885F8C53436214595910DE9B2CB2E3BF2C823CDB3B1FD77CC31C7D83F5FF7BAD7DD7DF7DDF27AD5B784CD4DD52F262A3C9198C0127CA5148517DFD89B4472A4AD5F96020EB1DE2EC4E8289E87CD86C9057B04F0CF2FBCF082ED1CBA912386C450C173890857721C8383F712FD2656AEBCF24ABBACD0BF64BED59655051869C158C40CD8FB4D36D9C4E644C01351D5484C9038F7611FE4A01949F7DF7F3F3A003F8CCB021F433C29F927248BE40EF0510C7605C774CCCCA63EEEB8E3F0816C2798838E3B286B4089F3768893ADA0274542CB82CE158567BD681AD88E8551359A5268E68DD9906C4A7DBCC1FEF41FFFF11FBFFAD5AF828BCFDB17E92A9D396EA934F241DA12532FE48B83A551ECA7C9D3EF7FFFFB49AC7B31B9BCF7DE7B5F7FFDF504126D116D0076051892597413D6B6B22529691B800A511BE18F7FFC63F31A4F3BED347B641B9BCD989F2566B2BD7A0D410CB80F472244FCA3A49ED9CA071C70C099679EE9BDDE303AC2CC6F94430563983A3650FBEB6B5FFBDADFFFFEF79EDF74EEDCB9FBEFBFFF97BFFC65EA06B93E4B89D694B8F0E21B396613A55669A96B3E08158FCE7E524044E18984530943C4A6024EABAC00E50AE649C0EC55AF7AD59FFFFC67A64B649632FE880760C4D8EF15F8B1AF730BD5253303A645C0039BF1FDDDEF7E170E1966C026D9E6EAFDEF7FBF7DF7D24B2F35A56E0FAE3E19985FB63AF61B5153790C87C78D7296858AF00914FFE2D9172C58F0B9CF7D4EA6D804C43E59A45E6727D88473AE11DAE03DC528E957AA5DDE86B142E279C96B9A125156B4C6961ECB49FBAA19BBA127AA4030414F635A10F0E623C67BF0DF98E24E8A946A4EC56C1AA877C60C9BFF69DD3D5D211905C2928E1C1A6C30D1501363B3E708942CF85C66E28823145E807932E2B1734CB3DDBCD1D29CEB15701649FF6D8DC1ECE5D9FEAE4AD6647FDB56AE2F5BBAE2B9E75EC82B43D6C6CAA222375CC0AFEC0E9582B4728C091D6F21D1BEB6C36CBA007F6254E2C272D8CE3AEBAC2F7CE10BEC3F7150D8207DD3CD10ABD014BBE027D741A5B1B1C06DB607EDE510DB093CEFBCF34CC1CBB19E00DCF4725F764A71C7652CFB3FF14452C0215A75DB6FBFFDE38F3FCE493EFEF8E3CF3EFB6C1B391D1571769302020A853DC1F910ED478482FD129FD8A60E43A411FB80FA64957D52ADD7912FA170A454704CD896B15562A340DC23FC33D43F72C40343A478503690E010D9A333BC5D81089ECDC375D75D77E0810702E593CB4E20441D0629A32F75B70C2EE46337DA7CF3CD09ADEB198543E16489CF2F73B567F69EC0ACD7EECC332605740A3E0D1F22E5E17BDEF39EFBEEBB0F73417FB2DFDB98F19869EC487C952DAAF4215D92582CDC4D750E26CD2CF40D336FA7E3E0830FBEE1861B2064B52BDB5651F35AB143D8B06913A4DD8E97E911005227186DE60F816D96F21065269BD3831F2B8E7C3F38678032399B40206FC418D07C843AD9878A6D602233A58ADF725FDC65559EC8E0D3CC4BD69169F20B9A14C05A946E163B4495309BE8574C2E0F192154E03B04F3524181AC01E5CBD5B75116864FBEDA95ED03D2DFFC12698632A6DB1561E71271AC599C2046EDF304AE45DD9339E423BA435E8D6D21FBBCED37A60E9A5BF8DAF4EC04EAA4D8144701E33DA61C235A2611CD2FD972A10D9AE31DEB314F6BFBCB06A06F116FA39681E9B215B435F54DA31345E76C066DFA6836596CD091B8C5991ADBA631101DCD6E53F6D3674CDD70C39939915B18D186A6ED792CA0AC01F88468142FA4406A8C08A895C52AC962491C202B649534A472FFABA150E48DA1415330EB9999F578705620BEBBBA7B8B8BA405EFD51A33604D012F5FDE6FD6706140648DBA14709A77224E47316928333C9E07D9FE7BEA4600D401D7B4C744736013007D14BF15671500C2C73FFEF16F7DEB5B2620D88EE61FFFEE77BF83360525817B4DA54A2944CF4F733B162D5AC459B5BD6B23C79B6C17F413BFD2364A0AC926F9DFF8EB3624240B7FF5657CE4026CAB0143204F66A2D63E4F731EFBBA4A298223DFB6AFA850C4E30643115778EEB9E7A06F84C988425E8FAAC0E927D90C1EF8C9279F24362EE1624B80A2F5D8727819155C51F445A14E0FE622A7AB5610DC1DE80077B7B5C040C100B2E932B168DFFAC8473E72DB6DB7D9537844777B6EC926D65CC0DB6FBF9D8067A5E8EA233C4888092AAE8040F4A056AD827D0C29E323C0AC057D2A7D01A832EE6AB1A075DF6EBBEDA85952CB4BFE8AFD04569902127B4C5F6B415D32AAC5A68E421A6176BC3A11579ABDB1A3CAEF4D1CB1285CCD3C4B9BC0E078B0B30894F5194D6D6395877964195A592B1B1CAC4673DBEA945E482E7B04F3C2CF3FFF7C22C3EA0B821EB5ABD9956D905C0AC906BE173FE4139FF8C4C5175FEC938B5E70FBD8A6083B89D84BF1F308341846DFDBF1B13B0ACC0F1097F467335259B1B254481230F755EFF2CCA462D107045D406FD99CDB46B5EFAAA74B7054EAB6A58F3DF6D86F7EF39B9889A65CCD0155B911F3633B814889D8BB84CC80798649F391D12C968AE0C4B34C9C774F0022E3D27E9A89BFEBAEBB7EFBDBDF0E45055788141FE3C96DAD2F163FA574DC88A9B3676FC4AEE4E3B57A0B0EB3565A4DFC5A41F9EC594C70D9E6D9638F3D4CA4D386D9FE4446DF76789238CA6FEDE022E1311C194352ED8FA25F6FB1630A9A1AFBEF94BE2E3BBAD3A74FEDEAEC40A8519BC436A21481B92640810B5548930121B63257625BAD76685B56121A00B71E0F1C5611FA6B983D5098C6EB1953316D7815E5C19D454CACB966CDBAA52F2D37D1D0DFBFDA5CFDCEEE5AA17DF37BE6B1ED8C4318EC4A3EBEAFF18C57A74BCC870C963DAC9D0ABABEDB64FA40134D94C9531256223D060DA43029443C7C2D075862DB22361E53CF175C7041281AC47200DA5F364E629B66E49A0233CF7BC18205614240E0C4AFF6E86856346CB0F3831F809925971489E367CCC6BC70E142B8603EFCE10F5F7BEDB57803975C72C9273FF949D35276AE4A78199B96BDF6DAEBA69B6E422F9AD7629FBCF1C61B012B726C4C0A985D92BAD655282AA9C310191B6CEB9B0500705775C992FB6AAF64BFD97DF7DD81D4122AC48D5025A576828A64281C40B553E802E008D163970503090F1F2639C60AC518DC42C237713542FC64293D20001B8E9023FB8461F045F925B64084793D7E5E44B30874102EC430EDFAC2ADC8CD521B28C5DEF138510F892B7964263DB28C44A9C904B283CADFF314B639EDB9487899B87CE73BDF79F3CD37B3E1A926B08B1C70C001BFF8C52FD0EBCABF6213085491C50E8FA20AF1B064C19B797C362A8F961614AA3466F767470637A96EAA7DCE38E38CB3CF3E1B2FCD066C7BD516CE0620F7C5FBC1EA44E2FF0A1E1EA1DFEEBFFA176B617365EAC4E4830D4F04D4BEE0DB3E435E962A8C8AEBE384A202BB247B42E101A4073A554574CA7F338DBE97868AF5D96C5E5ED9DEDE79E79D7FF8C31F86982FE776360F76F1ABAEBAEAB0C30EA3DC80FBDA81B5FB8AC68BCCB440E6A252514510032662E15D5254956AF994E8C5ED9695A38A9EF1C41A9601D16FB07B1C649BC0CF7EF6B3266C43B46BBD03E63137A533EB15B0A49F2DD07BDEF39E9FFDEC673821ECCF6F7CE31B871E7A688831F0DC42AD14FD196C6FB1CC36B991D2368D11F95689240AD8EE98B34D55024646A56A677E839933A7CF9EB521D61FC80EFC831C80D351F5654842639A3FCC03341DAB597148BA3557D59CD66A0C1C56336B16A640254D6C6D061B8DF5C90380D0B9D3B0D636506E9EAF58B16AD9D2156BD742789B7BBC76B16683F9CADB05C77B8F88C526B80623E32DA4DDE588238EB0DD26878C8C0B014C90470A03A8E64F85BC92987C91DACD1049307031C59080103187D834EB984E79B45D5ACD0DF135A9F093867B597A5791312D19E0520F7915464CB023442DFF648709926A9208D22E3E23708D6A16259E7C55836615FDA1805E7078252D194A9791331E7D589DDBE5DD8A5389EF528529A52E7B5CC03129E04F7DEA53B7DE7AEBC30F3F8C38F0781F58176C5AEC0A0832E5CCF6DB6F3F33237088017B338DED564E88CD12E4E7E1EB0B9E8A860027E24B62E4FD0797A64D6203738FEA147A96A946EC0AB149741D7D6FEFA91DB2BD07375C88E10AC50314AED76CAB45A61A26DA4DC1556933D87D3DD597E706525709FB005EA0FD52BAA79D1D53E10A1BC06B5FFBDA7BEFBD175249EAAFD80CF68CE2E64B2371BAE6DC6356B4229A55BB94A79F43436491123589E5187947B83445D9A8B342A99255B68E6CAFE0821F4CA0A94925E3D5D19DEE9649AC02506B3F6C3E7B4FA843AEB90E2CCA15A495D688585D1AFBFA218E783A0FC6F6EC8CC125986C36ECBD3DA6E20AF8548A48D9153802285D291B751C97BC4A62597C1A499BB1E36D058F39E618B389CDD4861F9458A96077D8CD6203D5A3297A3A01AF80A790E397F42F11690949681F0C2B29DAF633AB0FE073B2D9D836C48138117859F0A0B592FAB2837C70DF73797B1BA408103D67B6691101B63FA59A8B8D379E69BB7CEAD4BE028E38D2E2C0CC1A69522B309205FE30C96251921D8CAA4F78ACDF884D3D6156C943C3EB5157692D6D1D12539B694E526D9BBFB87E43AD0FA5CE878603764071125AD5C0F9D7B3DAD80B1346FC5C9722B1A5E01E6BEF43E8449289166AF77B85E4494842589FFF662FD65D673A5503DB4FF363ECF7B832E79D77DEA73FFDE9127996468B465447EEF5398697E9014BB00AA2E2F56BC17D3684A565A6E2E73EF739EF3AA8906082DC33AE8F2D8ABD31294C0702CD21AC5EE0C36D36F4380AAA6BFE15E9120819B39A588B3A8265AEAF40651CD27CE6931C2463C0F6C2995368DD03AA1137541FF208A180ECE12C4A1C90A3A2450487889EED61C21C92D0D4B68B10796A8A056CE4D4534FBDF0C20BD1D32225104E0D914DC48FB8B4D4B096B5E4706791BA35B4A1EB85CC170745180D5F30690B6B29814D650D60C6C614207469B74641EA7154392DD09FCE946F1488592005994482555574806AB19FFBEFBFBF7966F5A2E5705670AF82FD963B185C8F3CFBA72A70148154685ADB2689556DBEBE2338DE120F2317D39F1A24A7A31B98A69175CE5B7B3225D3D86C83DA56B4B8DFB73E6C1EA2C92BED28BCB16FB0A16C8B6FDBEC5947A4B6050C66545A4AAE40969D304C12A9A96040CB754757230C851E93F759B31A2AC3B5CA407338E99B942D4FFB66D6562D5F3663EAA4D34E3AF7539F3ABDBBD36ED1FF9DAFDFF6EEC3DE631EDC7062DE50DEF3A7AB6FCA60FFCA6DE66DBBE8C927F2204D77EFE0F0406834AB1D791674686804BB4D2BAE6C261910494E848FE659263E07368B14C2020C1E7CF0C1175D7451E65E25CD2A6B490AAB14B262964AAD4291C010B00037E1F864115FDD22C6508905000185BF4384C2722492A22ADFFCE3871F7EA8B0595AE02CDED8C766CC98628B6A523527E8C89544CB33181EA61A38BF71A3C537D042D546E68D544F9E7F6E845CAC8D32A9A6EBE1E6C560D737F9893C0669AD6ABB275094C9C599EEC1A14069A93D4D5228F262B2EC72632BE0245DDFB52938262015A50181D1D125BFE281AC3C0E1B82924476B92AADE556EA08F9AF03D38710982367D281F085ADA26D2F5F8A9AB4B58D3BFDF4D3617B5795A7E2752F4B01A7B18152EAF8296D596D67D33F0ED483B72D349E2C12E095EC15FF12ED833D1181D6E0E20DB66BCF3DF7DC638F3D964D6C827BC992254C29830186CDFC60A6C852F4BE91C0A5BEB6B5747292081A07664C56DB7E5E79E595471D7594B748E40D207C1158E2F14022C8FF538ECD56FFB0C30EBBFAEAABC9D19226E7A0A94541FB6BF6ECD9A6AB98A5D34E3BEDB2CB2EB3BBA38FABB1C19C1D431BA7BD27F24F34D20757B838A6B7502AEC07796FFFA202AEB83E6EC41889A8DBEF15A8B8E28A2B4E3EF964DB9F0AB92BE4036A01E340D95C4DAC37C14759E14572179791C5B53BA2564BA0E510A379CC18918CE052DA89AB7594ED953ABEF4E07C7784A62F49C24B43D964AEC423712F5D2A718DCC4384777975EE77A97ABC6352436082A42D7DC533BEE94104E5B307B7614BFB1290DB70C30D6DADC7CC837A081E05668C248B746FEAD0C79E978BAC58172073269C22EFBC7DF8E4AEFACAB5265B67CCDEE8D9975E08B5EAB49E298379295D6856928146164C2D6F34B3B172D9EB8F38B4D15159D66C6C336B931F7CE9ABD9532F7666CD49DD3DCB06D685AE70DEE9679FF599B34D09B0C6B9095B4BF37C653DA38C028A31EC0C1D43827F9EBF2C8CEE9BA2ECB5EC1E0278A8120C6B1F8EF5389B64342CD7BF84FE6BB8A66A20426C8AEC9C3EF5D453D274F5D8D042B5B8B94E538CC86B0206D1700DAE15D32F7C59CECFFA6D9A2F582DAFCDB01B4F9ADC03272DACCE0AD19866CF838023431C45AC6099BDBAD7F0D048B10B4367AD9AA449BDD16CC472C9E1E1C1E22B26DFABDAFD69566D64AD4A27D0F9E4F04D09FAE3AAA29AAC59195BF1549AD9E8466649ECE2D78CEC2D8A08D5638FE5F6E5F1D8109FB2F21FE6E5D500594C657D64C9D23A4D7160D15F346307723D1D8C6892890AE4BE5C052C0F8C1963609C529B13DBB5E4C0986A7FC215D36359C7EB6E645F79F39BDF7CF7DD7763DF1C71C41137DE7823F623C13D799C401398670819EC2B471F7D341D4C914120DA280A22B62630A78E873C8C3143F77653CA2A300B50E7E2C81410CCDE7098E9A92CF908F30071C5DD76DBCD7C682A9B290144A04B7742F183BD3B9E8192C492EED04679E145A7EFA5A1D8A08C3F05156D7E8E3BEEB86F7DEB5BA6B001BB6A7ABDB13F41A88DAB292842B1AF3EC07110B98418DC184CA9E781CDC6BBDEF5AE9B6FBE99002000570FA8E18EDA48240BD1BB72E644532C926D2F5B0F39E4906F7CE31B1852AC9442BEFE79B99A690E35000E4508E4C4134F34E36F4C05AC4196A608F559CA5CF8B503012376B0AA6B35E6593FF9A72C271C213C7BC922A185E58293BBC57C014A02B60E7032EBA256692236B1E7B529B29D80BF086AAC11FBAEAAE2967A219B5EFB241B924270F0165A5F463EADBBA7122A238D64B53D6B73A86F93D9FFBEF5768FDCF5BB473AFBCD337EC3BEEF1EEE489F5AF38FE9F3371AEE9CB2626DBAF9B49E8EAE4E9B9BE9DD3D3BCDDDF2AC033E1806C2F4109667E641D69AF958AA23F566489A23F522719EB5CACF6CF03058C9754405AAADA7AFB092F12D66053B8FA2BA33E39E0201CF8ADA1C4DC298B67160F14FF238AA7760CEC173A9320D6FCD5755F940484B012BAB47A84ADE262B27D156F2C44B098CA4480EDB1DBBBAF25633BDBDB90EAED65A840985FCAA14CB5620B30A0AE88E5AA7E876F16F6204C6FEDAACA62D4AAC46C1EC4C70D964BEC9F642FBBABE34F5B4D16C39C4F68436B3F63805D8643D03781A29B927C8E9DA89ABB4B522978EA48B803047A2462ACD830496ED549B3DD364CF3DF71C89522FECBC5E244A29E8D6BC79F3A05C470D43C8C507ECCC98432C90453ABA2393A0ECA64EB0FD51841374B319F345DAD8C71B43B49AC5F46BE608B05E542372C1F3F6C9096B7FD95037DE786320AF36AB6F7DEB5BBFFBDDEF7A4312F345009F1033B8286C30846941BD49B565A9B72042C76E61BE75121BC56353CA23D1CA0AD04476193FD216D73CE0EBAFBFDE5604EA0066525D987846F53B0A317D03CA3714BEA61D19D26C9202596C27DC8C24BD63CE8F7281041B6C0B714D5EBEA64519D33476C3F4C7538000A0379ED7C9DFEB9F2A60B690DDEBB6DB6E7BFBDBDFCE05495286D1E5F22267F541239AF161004106EE294BE99D558AFBC95DE037AABCE289D42348181950BEE4BCB7DD76DB871E7A8819566CC61F523D970A6D094EA8EEB3E288C1834B30B71BD09A6A1F53F1DAB11929BA3C7B9D32D0D2C4D0E7A9005D5B3414C14C447968234AF431649FCE9C3B77EEC2850B0F3BECB0E02AEB3CDC9DB161646311A2809955AFAE7C1CCB16EBAAABAEFAE0073FE8EB00E56BBEEE75AFFBEBEF7E3718D2465A0DB5CE69937A562C5BD231250C6561DA47A75586B7187A69C6D4297D49BAB4D659EFE99D1B1AB37B36CE66D8CAA5D52D66CD7EE68945DBEFB05D3D6B4C99D677ECCEEF0A4573802487C7A69326F7AE59B7DA26AF6F72EB1989BD7134B0E150C37616480041C942013A781A24C6A9A79E7ACA29A768D39AE96F92870ED682919614B09F31BFB2EC4F2681CC97AC43DF2B2944D23D84B6871AAC3FAA36ACBBEEBAEBCF7FFEB30A1F0582F04AC8D6D2A69B07CE46935FB74E0E034DD2AEEE3C943A6952AB1CA8D11C06265AAF0F179AA3A502C5F38EE787A157086253A749E16E55BC4962FEADFDAB9888AC2888229C9BD64742A3DE323CE12800FFD5D5350DDC4DEEF3A6AD244A81DE1AAFACA841DE05FBCE477A33C78D2ED21255799656CBFFD39791A56D6C6A5E10B0E3CD28DB61871DEEBFFF7EFB96487F54041246E7E9894141B39C147D93E03CBBF4D24B8F3FFE78883E2AE3775B1AEF5512C144C24DA3B3DBEC789B62838902E397274A63AB1FCF5933E6F5F9AB882908A379026115F58642F5DA67A8BF22D708CA9F9DBDF7DE7BDF72CB2DF6495309B6CBA1F2A61EE32D6F79CBCF7EF633C00E6941CE6CB7F329C01272CAC6C3D8582F556580A0A6ADFA473FFAD19FFCE427D017DB3FF7DD77DF7BEEB9C74688CB8B2CA67294007B88F809102B7626E9C167D7DC679F7DBEFFFDEF8F393FE4D74991EA973882A457D881044292827F1876A150C47EB543580E52749B6FBEF94E3BED74EFBDF79AC93F5E659D4E7A2904DD8C5D6888851C73CC31B6C1BCA964BB4EA904DCAC50040F422C2E329BD2561033D486F7C52F7EF197BFFCE54F7FFA53BB9AAF522DE9365B448A7A49F46EB6D966763AE0AEC1E7C3F2B035B2C7B719B6C32278A017D36316D485E8E07A72153B41F65E9C8032D74A31C9923AF7D7F7AEB337F27C5936DA8EEC9E0C47FB89FEE08DAE96C6E67DA51CB0DE3763C70B3B08B63F159CB00D6397B519983D7BB62D7A1671A069410D864CB3893DE38C33CE3AEB2CA90DE526D9B740F6BA8BD715575CF1A31FFDC8AC52322CB6DF4C1768843970FDD6EFADAA64C9B469D94BABA685916A2DBCB87998FA5F5BAF98F94858B6D194F4B58D978666F6D67B6ACD55CB9AF3B7785D6DFA70A837B6DBEA15AB57AD9CBBF9C6B59E8EA5FDCB67CD9DFDBA35BDFFF9FABDCD699E3D6BCE92C5797ABEABD78637541F6E6883113EE14951B7C445BC02B6C12B0A281B9D20813DBB6D3CE14081AF0B4234A6026E3F2CB65B80E608BEBEC71E7B7CE73BDFF1568BF02249EC505912FEF97B99C6648C88C9E0E5D05F2C14F1CCD7BCE63536CADFFEF6B745F5D17A240BF2C23E33B86E289256A6E6F1DA5C7476D50AF7B73A69720FC016536485C39716FB6C089589F195451C53A14EB24AD5ECD04449971C5F3E3498A42DCF9D3D5DADD6466C55B2DAE0E030E0203204707BD43ABA25D395AA29C63C51BF5ED03DA4E8F896180F4AFD5EC4645B9A53DFBC1A9213B2F4CC64BB87214BBC5A74E736516E42079F869D94148910FA6C9C79E69966DE42FD81CE93B42590227D2F8EFBF13CD1F15E9011B223893D927A21D268278D1A21CABDA01E64457C7C3EB4D9257AA94F30351BF4ACB6F7C403A92411A4880D40B0C8BCD2AF7CE52BA2B5B237C07C42F4363CEC76B7DD76BBEFBEFB2014F33D53992B1C74254D453E67BFB77B513E64BF34AD69DB9E267158DC8416C4C88173ECB30F448C485E82C5E5A9FFFDDFFFDDCC5CB6C7E1871F7EDD75D78D5791A2798390D2CE3975B102527927D8071BC9D1A6AEBD202DEA4C2DC91F3DF0C0034D524FB0FAEDFBF3C20B2F3CEFBCF3420CD598D0D973CF3D7FFCE31FE3927AD78A4996299CB491DC89C59388BA7D80404568536C7CD1F38FDA5F4DCD433A8889ACAEF5204BD128C4B4D91E0451C5EF1D5C8818D301792D495D89A4F9AA87093115E583CCC129D7D28C79235B364A492B4BC389BAC713F0F98DEAB154DE64D47870DA2809E3A42847E09BE9B68889924449348C637BF6934F3EF9820B2E50BB0E0D4F096F6F19DBFCDB2C017750AC48A8FEB4D95831B02E24956E930443EB4EFAEF636E5A7ED743230F876A7D5AD72603CF4E9F5E9B9B349A0383FDAF7CD52E4F3DBB748B9EDECDB79F5F9F540B1D61A319D366556AE9D2551B764D1A1A5EDD5BEB7BCF1E0787E1D0D3D5D7D3DDB57479DE1BB7566DF55D0DCEB1B1FD639AB8113B384901DBB3C0E775F1C5179F70C20912DD343F55CFA210E3432233680F41575DD3F1C668E2585E37DF7CF341071DC4A133E961A7159F9B332BBEA0F51AB704A2263A078196C4901406084FA0E4F62AEC8E54FB18EE0B2CB855CB5717DC56B074340A5D996F9D0DA6F6DAF24C9ED28B67607A19B354802F7C269D10138C2375B3706D18A966A4385179F429E4DC96B6ABF21E83495A5DB674952D8D3DA4899E8266CB3FD9284375CC872F891E52803E21DD8C8DCFA8D4022BE1AB59DAD72373BC1002E04D705F215094000EB1711EBC6EB431911E25D1E8AB81D3D81211F3969815C1C9F640C53F7D65B1C5106BC45EBFE69A6BCCBE26A4615361EA50E52E122E58CD7217C6CB712A6169DBC9BE4E188D8DCE1D4D229C72CA29F0FC8518C3B10F20BEC904632409EE0FD8956487DAD5B1582176FA5499134FA1A497FDD526D994AE28E1B6D8620BDAAE0968C64182178559A5A297F532F16D7B8384597B79BE5EB0F3C422F871EB41519948D5F6BFB2A35A247671B7C0A217221C8CD4383E0157DB72CB2D4DCAB0C3C723D81BEFB0A866C9D789D9F37AC22073556D436AE7DB20BFFDED6FEFBFFFFE22E1328D4B448EF1D0DAEBC8238FFCFCE73FEFEFE543B8A8223383AA45DF5C7930BC11CB412882AEF444C13441BB0B80938EDF9651595815CE016BF0C91DD5C68C67507A65ACF0BE42D3DC516E80B833C5B311224CDAAC49B15E53AE0D61538851710FC2C21F50FC001985B424344552D3B3BF955E083ACC74A59CB57B99347145D919B4AD8B3340E911B107404C2D43A127CDD636CC07AE4DE91A48D6CD3E78B3C5B5A77AB7E94907D70DBC18FA1AF3B355B38656756EBAF996D529E1C515CF6FB0D1E65B6D323759D1BFC32673D391E18DE6CCECEAEBAE757765FD4BEB6BB223FEEB0369B33B5BDBB4A9EFEEAA0E0C0FD035DE1EF3231FF9C895575EF98A57BCC2C6463B4885C4993AB2AD0236098EA7EC214AD19E1759449F6696BE1D8445A22D8B0D51B4979A9177019966D3487E1D53E6A4934E32DDAFE4BD6844FD0E6FED1FB54C61216D49C0F27098CD40B0ABDBE151266C68687DAA000791D51A1EAA2721F751A935321D9C141B3E24F569D3FA6C2DBBBA490F770BB7568FAFE6A817DDE26C8775DB50F940BE272A66062543C359A3DE2C92523DBD3D93162F5EB27CF90A7F3A24529AD9186D502756C0FE9F5E929A17327FFEFC3FFDE94F086215F9B51F695EBE1512ABEE3B15B6DF517ADAD602C942F671C71D77FCDDEF7E871DCA8CD99FD0169C01D65B6BA7F0AC8EC7C48F3CDE3C5C71C515C71C738C0DC6060693303EBD4C72C86288F3E0D17A018449319EE79D15251614B612E1871B5D596415D2F8541F7B268B8D399B05A5C3A38F3EBAE9A69BD28F2114211C7219180D76F0EC7C52964DAB3B215C50C02A0645A5D921312D25FE0A22403033DB339A56B6DB115345F49BC47CE49147F0B174D2C4F8EF05DCBC79F3EC2276027D87D7F10C238C2DEC5A1CE89D76DAE990430E3167C5D32368E7D823ECBBEFBEB7DD769B3C4B8FE915717F895FD3EB8FF14E41491D125717BFB73683020F187F3ED94CB342219ED4BF41856726C24827FB13CACBD4BC09479581816754F9994DB21D0480081FF8C0074CDFDB8755C7816C8153C987A93CFA54E0530E940DCFCC083AF2CA89F70A6F3C835BE1E5ACAD4045674115FF6847619889B4A13BDFFFFEF7DF72CB2DB63D00CAA16231B37CBDAC5F14AC19F6987779ED50983D0478B0191B1ACA0605B346F8C1DEA0B39B058585C0E18A2D07574FCC0935E1B060C102DC68BB3B7D17729FA4239BDB3975A47FF5E25A3D7DEF2BB29DD36CE9A33D4958D71572FCF38AA91B365F952D9B3973DAC6C3D9928EDE351B5736DF7AA7ED473AC2485A9F31B36FEECC19EB96BC64C6F2E4BE505FD9ACACAA1DB9CFE195D06D267912EAB58E64A4DE527B8009F0F2E1982B79C088087C48854918AD2FC45227158C3C61114ACAC26B4D1FEF645955AC4FA0541DBA94B017DDA6BF943FFB491251CADA737C8D7D4C29AAFDE42015018AB10577ADDA393C526882A4C0E615EF3B6A1D8D6C9DE96824941D4E130A787B401C29F6B7C306248F246E4747FE00D54A6ADABAF07DEB45ABA26A7FFFC0AA556BE7CCC9F78D6DBE79F35EF1D0430F8DE928FC1FBC34EFA5394564B089853BE524F83CB1A2FC7483808F934F565C879F51F35EBC4CBB9B641114AEBDDA122405C7A0123B87C3BF2A03D9E3D855D5C717C753C00AAA4B2B30063631B06A3228769E3FF8C10F9A41671F3EF1C413CDFCC409268C86C78336E5B2BBEEBAEBFDF7DF3FDE7D059512598736F4789F17E88C502AC2C2971CE83A26A6291D16F3112753360ADD48DEF8C637DE73CF3DB808E0B9049A10A9A1348AE753947300E883EC80246309DE95444C2F7737B16553C77EE0A6B215283150F6D163A9549FA38882B2BC624C436A344713DA78A73FC46C48A98AD77F20379C43143D212A92A2704F3E59285C4F405821721A20C53C6F708983A5A77881ECB327C597F2755CA517E7E2C0030FFCF5AF7F6DF684886C052667F3C8CEA0274FE958AD974B9118526BADDA56CC629926E6915F7DF5D50C5B255B253B52A1FEE88DAC8F6478562C668C5BAB29B25D19222DDA178AA0232BDA1E6CBDF5D6344B16978ED96D8F3FFE38996C09F110553E1B2F8D9D18EC5BA79F7EFA45175DA49647FEF3B9164FEB23C355DBD4492D87351CB7E08C85E79F1D92C1E0B080FEC4D6C386695835654AEFAAFEA15E734C2BABD7AE1D9A317DF3A54BFF2190B9197C30A0E5D6D5DAA1DE9175760827BDE5D56BFA7AABC9B28E8D9E5A37776DD7CA4D87EA4F4F9E1DFA5F0AE99A2D77AD7D28D4FF3ADC59CB7AA6FCFB6B77EC6FACDB6C5A7767DA19A65437087D8B963CD7D1B1F90BD5955B0F0D0D86D5BD2B87CE3FE0C465496D5A63D2CA7495300AA97BD9E49C7FFEF9679F7DB65960D75D77DDD1471F2D2A72927A741FB229BAE4924BECAF1834EDFACED49CED6AFB3C0C16FF545F94D4B37F93B9977E3F1EE83291FE508C3B89B4B79241E44BEC37859C1D1B5C53B42C0A93274D5EBD2657241BF46DB072D5CA6AA55A6F0E02C731CD6D9A18563920B5403DA947426EB22F617B1F1919EEE9EE1A1ACE037D8D7AA3E8E51CFAFB57637A40988E39F94F27EB5F7965059CD2AE46997916C1A8218680C89120717CB8268C469612FAE33D17A40DF59852C65EE6D9D8B1B78B9B60626763A9601D8B23F78B5FFCE209279CA0442FE59550AB84D1AC3D7406C42098D8E3975F4E51077E9BEC5F40BF5C4703B36D2A361C98EEE9DA86976FCF6E633325FD852F7C618232A410D3A854A973FDF148CFD9129AC0D4358AB1A9B0918BAAC23364119525C4E4C528A2CABC67BA0E884F67EFBDF7BEE38E3BEC4FBED6D9EE45031FE69C4112AF431BD90C1C70C00177DD7517868E57C08943B9E3CB2A9D56EA85A04475188D09F2275923F7F5CD22080B31465AF25F4D8B10A353730EA2B504C333D7F927F7BAD6AC6D0F14E57A3DE43176C06536365827D570C6DF91CDC39E5476C066F5BFFEEBBFF419242333C93054691646E3BF48FAF0E098BF883066AFA4EDD8F0A14D0E86D8DB987E79219615A189436CB56BF7B27DD22858BBC90A370BFE321B00F12754A927EBF5156E25B6165513612A69C0606BA8DC053869F360CAB8E4555F76D965679C7106AD2FC82C94123D214A7381E388454179ADEC8CFDC404E7B2937B9235EBAA7923B8247FF0D9B3E62E59F242DF0661E59AF131228554DBA037D97FBF03AFBBFEE68E8E504B27177DD687A02539E8A083BEF39DEFD8FCE4735BA9551B23595FD2B1FB2E03BD5392FABA8E0D960CCD5C12BAD656926A63B01ED2EADC74EF19E9E3C32BF6686CB4E495DD1B76CC9DF3DABEDAD2B46FFE567D9567BA1E6C2EDE38DB70D9DAC56B3A86BB4706935A36A7A3EFA83D3F62666165A496A50D9FCB17A782DA5DDB22DAF3DA8CC12AA846C5583F440AD5DF2C1DDD88C95EA69B6FBAE9265B0E3FB77C7D4C09E673BA3E81C2D74B6B3A510A32C4A09FD21E1273B61DF7DF7F7F530FD88366EFD8B61818183B7DD5DD95B7801E1C1AACA4C5D9181C30ED9B4717FB97D9DE5394D88C0FE2CC66CE926C9D3367F6F3CF2F9E3CD9CEED5AF31E8949873CD5B4C18A15AB0ACAC9504CB81DC261748C48E183030DFE5FBE32C7F106EAC7438E358F447508D784D17581ACAB398BF7DE7BAF99AE726415476D5F3FFB493FCBE078747598792F075AC7C9B4E0273EF18933CF3C33440A8534F2F80810A45462A91D8A7F5E99E104B7919B1886CA5A29062BD6212AB254B05BF2BF559B345ECE8C08929DD8128869024F3D4485C4BDB2D8C55DE177E036B0CFD81C02B805F9ACBEF7728245ED145CF996DCB5127720B2D21336D95F4176E82B80683C1D923F814287C9DA0845D214AE505F4B5DAAC5D249F481534A2FC2E82A177906A5BDCA07609CA74648D2CA7E6F7EC369A79D662A19D73F677D1D2B825AED589F47B461DBC251E06EE3E798508E8293C1CE9113096DB8FC6CB117915FC4D5D0BC95C69F4554261F109A41D0741E10554AEBC93056449D1C19A664899955AD73EDFDC2850BAFB8E28AE79E7B4E9BC15339DA674E39E5143382D93684FA6D83C13AC0C084480A11B88045A2FE4B0496381DF6F3DA6BAFFDD0873E84CAA40F182903A5307DD042FB5FD9193F481E47667470E970332CC0730C0F0D4DEA996E327EDDD0CA4993AAABFBC3A4DE49AB0756D62A7D7EFEFDBECDC2DA5A47B53932A9911FCFB5D5B4526F7475760D6BD5881B4113DDD1D93B34D23F7D874DD76EBEE9BA7472B2B66146EC48F7CAF0AAC7A775F7AD5AB2A6A33AB577A4A3F252DF06B366BD944C7AC586D3779A3965F20EAF9FD978361B9CB76AC6F29E7F6CF08FE6D25DBAD68E0C0EAF99DA1386C2F0EA91A15543177CE0E49EBE4983CBD7B5C7F69358874D6C0C4B5DD54130C308B12867A63D142CF9C93FEDF3543AB4A3E87D84298CC62EB487978373B4C6F58043183B57CA7B65B035D0F1046B6FEFE43DF7DCD3BC01AA924D3EBEF6B5AFFDCD6F7EE3C3B66134C7B21D519B23F6B45AE52862A3A3CBC17EDFFB0EFEDEF7BE77F0C107FFE8473FB2556760138CE7E5BE688B66B7C6DEC7C72DA15D24EF044192640C110A41CD891791102B365D2DBF263944C10DA097B0924D8B1D1B55B921AD5EF18A57DC7FFFFD4825BB853D7B896D40E561D75F7FBD5973EADC379E62C3F027D94CDF43DB7038D6C0203542542FA11111E2EBCCA3EAEC373480C25901573CE67DB3D10CC6364B62679CE0E571CE3EAF661731B1057BB93DC881071EF8B5AF7D2DEFCD9524FFF66FFFF6C31FFE50B3448097D08E849AA0A458BB745F56E70C19BF66EB7CE94B5FE240DA274D0FD1F08074803DB56D1EB8BBB52B94A7A07A07F4132B2258193B012427384732320DD79E448F4F148ABA67762686513BE69C6FF95EB93CE92EBBEC72E491471E7BECB1406761690D45DC3EF7609A59C9ED669E471AF52DB7DCD26658B512E83C9350F67B333481FB61BD21F884F352BF2F554FB11C442678AF4A36BF43B2D8158ACA3ACD95E7360A0EA881EE19339F4D420EEB8710C2669B6DF6F18F7FFC339FF98C5D8AC3AE203F010F7B6FCB6D8748203EDB63E6FAFFE94F7FC299A63FA3924ABEF2441A3189D56E8AD80159E2F39EB016F06088CD7C42ECD62793318B9C12E447D487407846C98450E87E9BD512F156FE7364D814F0E0C09A46666B94DA66DC6CB3AD9E7AFA6FF42C66FA5B2987E24DA563CBC91B642B5F5C1CB2CEC9537B56F73F6FBE77DA0C23F5F51D0C45049D27E91A9DAB929573FE73C7A5BD1DC3D9A4746DD2D56C64617060F68ACAF4A7B3C9EB427747F385E159FDFBBE6AE7CAF32BBA5FD73D7DDA9CF9BB6C3B3954B75D3DF23FCB9E98BCA26BF1C67DF357AEF8DDD446F75F3A9AC32F0E6FD0B761A8755EB6CF473373C3C218DD87422436818D079797FC2BE585DA339C5CC9AE9295CC060378017F22BFB7B3C9ACB6DBB8ED2329FD3371AFE05248A5D7A8EA727F51252788C8118419CF9D2A0E7CF75BDFFA5653C0EC3FFBBA1DF8BBEFBEBBF4B45260362F6F7BDBDBBEFBDDEFCE9F3FDF74CFBBDEF52E7B0F94D43613C2056B1AC13763C6341581604552C8F5724146E3BD58007B73D861877DE52B5F21352B5AD1C4310368C194636FB651DCD1CCD20E33A857C84BFD426AD8D8D70A0897DC6EED18FC45452F75F638D8640A9282A65F6D3E310F2758321F0D0EB1030F029110A2DABFCB7EB7E3BDD75E7BDD7EFBED7623D39A72B3043E0A8E6676829B82FEE76770A1D7F6972798440173E015DBC72D40E5D37C86C27CE27B0AD53662BB0E1D06EFBB33E6126296A4230B44F4D52C6825F8895EAA87952FC02561E1ED6B8ABB6CC05054421C617FFAC10F7EB0F7DE7B8708DCF344DC58DF25BC34A5EAA1E87BA8252B1FE9D8D1C12C039B1072134C8BA6913236F42281843424ED7220B7DCB3F5163DCC85248F1A458F3C5C0AD18BB252C496B13B091A811222BC24AC1671E392451B5CCB394DA9B033D443D30E4BCC8813231C836B70AB372CB4FE49C350EAD1F1D1C53291C4FEF0AAE9041B4161BA1D702A059A055B91443C069C782B8353CC6A1181C706D92AB36763C058E4CC8A844B2C78F2FB919F80DAE80ACAE2EEB8E38E0F3CF000A9227B3A22D8F6FED0430FBDF2AACB8706AB49684C9D561DC8E772E6478E3A7EBFF7BC736565B6849257339357376ADDF54AA5FAAB5FFCF1DC334E9CDC37B47AD5735D61D26078494F4195790B8B10260DF53527BF6587D561206F725BEFE80C6967BDB96CB816A63E1BE63D116687B072E38DD6AC9AB9F48066BA24E998BED39BE6CF9FF6EAE1C98FF574BD2A0B7F7F7255675F4FDD9CF4EA9291873BD2CEB5B5FED5836B06877EF0B1336B21194A46C2582038BD146821526873655ECD638F3D4602C8E77D4AFBBC64B062919320305977C30D37840961F0A5A3A76B7AED5B521FA5AF8CA17D7550A9F5644F30D1E3E9BBAEAE6E3CA4E09C3F14582957A421D23A2DA7319B36CD7EA99A3F5FCF2A3F8903497557289C92B3CF3E3B4C185E7F592F481FCDB1B633402E933E30C1D5E1494C9086F4E9736DDF520882BA1DF123B643EC004316FD1F077129D82B404B30DC747AE9B4C369B7A930E15B89AD854D1AD2539AFDA75AB2F1E607382B5595F675931A7BECB1C77DF7DD47EE191562230735A3984435F63C5736855C9DCD9B4925FB8D5A838D576973D965972D58B040A48F73E7CEB501F828CB987B9A309A3DB2495EE57224D30502B27F9AFD74E79D779A75A29EDB9E33C86F4599985A290887C1A0526E61EBB270E1C2E38E3B0EBF9323EA3BE4208910BB6216647BA86C03D602ED6AFB8009C4EBAEBB4EF79589805013FE96BD64376281ECF19F7CF249EE6E57032D91B495DB7A7B57061C7586B637EC7909181068E1497394D9C020A8AB244A8F5C0B66CDEE8204E3E0830FBEFCF2CB45782945EBE3F61C76CA633C751AA34281B139F949D6C0575E2A7890B9068BD255681D12FC764C801D40F0A970CB983A58ED0E09219025215F43208DCCB47D0CE2333028A4BD7DFB483B32F608A4CF052CF03587E408D8FF685F347A28B2EF766A385338F13E620CB76288B16BDF5A31753D1B44A9663F2FBEF8E2E38F3F5E9D09F00730A7C48CED8B9DCCD59A3563E3E5CB96D6B3A1491BCCB8FE5BBFF98FB76EB36638CCAD3057EB7FF2A6BF636D164656379AB574DA437F796CCF5DB7CA217AF5E0ABED450D9D632342EFE00EB36B3BCC19195C53CBEA59254D9A594FBD526DCE684C1A59D9F578D8F485C9D37A877ED73FFC0B7BF8ADC3DA47D2A1C9DF7AF0DB4FDEBDB863DA92FF59D67CE5D46C78C38D1F5BB274E0D915C39D5D49B3FAE813FF78D556DBDFF8B153270FA76BC29AF6950DB15C1E0A7D88E2498ACB6DF06B34417F74E12B7D3F6C13AA2663B3D19CFF13BF04BD2CE101C7F580DBA3B85E42299F6F3B12176770706C4FC5BE84DBC181E7E417E318A57A9B2D926D93085DEBD6D9C53B06074D6ACFE460E075AD5EBD76A38D36C47C5EBA74F9D4A97D0504661AE93D9BC4534E39E5D39FFEB499FFF84FFF4F5EB8AA60D9E14AA5B658D39A8C2EF8F393562AC0F7FA5816AB2F63F06B93C57E9F99E373F00D44D1229E9420B8CE3C2A1024B669DBD1CE3F4E5228AC63B027ED2FE1EC74903C9A9449101B1781475057AC8BE8F54374799931B4083ED078F38C3D28327A8510C7D957ADD8A3DD915A49B52C55E5B46A30DAD366AC0834ADF5D8AE584F8D1120D42E7CB0A29E57C98D7DC0CC0EACE950102CDBC3DAE1FC9FFFF91F5306A69680E60AD1C6E4E87694CBDBB0ED22AB8B5728E4B5793F2694E90A05E88F449400473C851D25FBA40968BBE6D7BFFEF50F7CE003BA179524DEB6D381A735B5ED1962E07CDEAC9F638F3DD69481691D82DEAC6F3EEC5A51DF55F8BBB56A8DAC55A3D9489C54B281BDFAD5AFA63EDB161D420C05F6B92FCF0B622B449A27F8BF5A70DC087E5678D6870AA48009ED84186324596057A3BB898FEB485597449E4EAECAD9439B138CD6A4662F8B15F00216F8F3AB3E0DCD826A5FF9D7993367DAF5399BA6CEF7DC73CFBBEFBEDBEC2441D2D8EAF3E6CDB3C345DA5B757D66ADDA67306BECF4FDE31FFFC88AEE2064F19048180AC03F436C5FEF3D1C76ECA69B6E6AAA629F7DF6F9DEF7BEA72C0FC4B444F28647862B053F77A8D687D3BE634FBA7ABB5DDE316D4E7565583EA66A99DC9FD49381C993A777A45D77DC7EC7173EF3A110565593CE7A6305FE3DA802163AA764A9665D6FD96D555F677560A4A73EFCBF597B0F384BCA326BFCADAA9B6F87E9E9C9892433644110D0352CE8222614152448CE022A0C2279244806092AB02C208288E9D3DD357C2A98C18023202230E380334C9ECE7DF3AD5BF53F55A7EBF0F6EDB0F2FFF6AECBAFA7BB6ED55B6F78E279CE53C906BEDF48059EDF48E7B2A91A36C31C2765FE1C3CD75148974A9B169AC28029D4CCAAF0865FDD576BF46E5BF36777CFBD5EFDF3CAADFD7E219F73B70D6C0D2BBDDB2FAABDDA37DB297C6FC5ED78F5497D092769186A92943F568479841B6EB8016A42D1479BC1D7FEBA8E0FBBE64843AB5F7898F041D9DF9A4A8F70074A014B884DA980459E602CDB394CF84585CFC2E0B0FFE29CD3E4374AA5C6843E371C1F6975CBE1382485C900C56A8A8E919152CC239D2B9518118A0EEAE5D167C53EFBBCF1E9A79F651F62599D4C0E712F4E95DC7EBD1FBE236516C1A24E5C23A4848A633168F3A08A23C61BDF6450D24478DD368FD096142A55623295250A843841586015202BA96318A224EA1262E8CA2BAFC4D8EEB9E71E0A23FC12D2F988238EA0C296873A154A5C0CB4ACF150EAC8EEEDA3DCE1E1871F8EAD2C0C2DFB14AD5DBB9671330C06A2047284B20CAB1F474AA6DCA3747D18C38454BAFBEEBB2FBEF862DBBCB03FCC7D7024BBEFBE3BB4A0A28E8C3C63C6DA603ED4ACFC8AB89A851CA69E9604B7137850901B376E640C8A14F6644491EFFBE8A38F1E75D4519C61E84555D4B0B6556BCDA8B5228DCCFEB2CDBBB12A9DC43DC7DA3CD2E0702476121A37C73EC4CC73695849853F29D4D1961B4BCE63A4B7F6DF7FFF238F3CF2820B2E2073354748C38B14195CFAC8EBCAC6B8E5202ADFA7BB1F2909BFE95AF945BC3296ECA5975EE22473C9948EE13666849963504F24564C1238C9F8B362124ADA1142A1A02B0F1DAEC4D7A93B6D8F50DA510693D0D46D3AF8B4D34E3BE8A083702E18C2C5B443AC5C7DF5D54E425E8D47C0A0BFF1C61B1982A6A2252CC0CE2213CBC6EDC4FA1613FB490C4270C6F057F2818BDA42D8F59D77DE995EBB7891D4838842067FC2895EB1628549A01576C717E2439992E09925F843804D2E28A504E30182EFE0F7E79E7BEEEDB7DF10F8D986DF328E6FDC591F3BFDD6DEED0E28B7829E72872D97F4B31FCC0C52A520EA635B19E87FFA07DF5B614AAB228A667F9C1F42432D923641A3FBC3070EB7C25433DF1D9AD142D8089B4E900DDD7AC64F17C2663EE36EFAE15FD373863E76CC09DFFAE38373FDCE743DBD2D68545E285D71FF1DD0C61B5E7EA592CE54AA8D52505E5A6DF5CF3103A946664BD9EBE87EE2AA7B4DA961639D24B469FC31DFC1405D1BB0517580667CD4C18C8F45AB78D724D52B582966FD6C928A8916DEA4EEAB63D5554E8A917C6DCE25CB24A915F0510F764A1FFC7E9ADC9E6D5948B5D8C9CEB60FCF1EE68B41426641C8E1C2BC1AFF442DCEA34888602B694F6DC643A2E451D17D54492523638A1E0716A1B91C1A93E4EA299570BDB62F8F90DDED80772357114682A3C5D8AF00936A32C187F2590A16EDB9E79E4F3FFDB4B42015D8BEFBEEBB72E5CA0B2FBC108240486F8ECDB18A4D899761E10AE7C776A9F9205C0C190D3F18829521688A3CDBB8C330301E16D590494E45C6C66ADE2E19C78CDDA4EB18C414D66F79CB5BF052ECBD852FAA2522EFA0F1E3AF5C3BB118DE7BEFBD679E79A60D21B6F18053114A9BD87480FF870761F2D9949B8C1341C2F3279348546B2AFF2080454CABCC286312DEFCE637FFF297BFA4E5A11C1EF14AA447E049E15614EEC39698B82D7EB96CD932B8412C6E91D508CD0DEF449945DC106B845B99187DF3918F7CE4873FFCE197BFFCE5534F3D9507508509322FB439D5FF671AB01BDB1ADA36EB180708563F9D218A228C9B9A443890A869DC1888C12E6FD532C964E1A3F5BE12C184E0D1D72433227611DE91D938EA33326370A5646D381638D9C6F789EF90671FCFC58E624C55303A637930C60A890B6ECDADCB42703D0EE361899D3C0405787807DA617C2E5787A7BEED717C77F66C5EBE7CF92DB7DC62AC4614947BAC689274B56995DAEE238A0C63D52F71F78649C102D376C4968749CB0D27E91586D714E088A28F181AA28A320E9E9EAAD4FC4CA1E3E44F7DF6CB5FF9DA47CFB930C8766DF50B4CD2AB94C090A8BF3E3AABBB581DD834AFC3FDFA0D5798B0DC996E356B7E2A09A10B2DCB6C74E15F534DA786397203930AE0D81582C23C539C512E578B616E562DBFF6D7BFCFED9ADFEFD03DDD2DB95FDDF38B51C71CFCEE1D57D65E095B5DEEDFC2F79E77F2EA59E5F4C0B0576AA60A5DE9566664DB7061DECC4A3832376CFDF2F66F99CA586736DF6A3868C3D3F08EB07ED6AF5F2FBBC76E992346616962A6F9A9C2B513D4FD8C47601A07464627FFCB28A022FF349EB6DB6E3B529D9046C9241D1014F58C964F6A89475471730E05EF70DD75D77DEA539FE22952EDDD540A381CDF34699AF212CA65613768864B4CF004526AF3BF760997686FC533A2BA783B7EAB53C7EC08DF5F54299A5911A862337DE2139F804A20C409E79009215EC6FC999D426009C1D1471FFDCD6F7E1373CD84B193147ADB7C1D82E7E02BEF79CF7B1E7FFC71723EF397C432506812ABC994B00D92A280BBE4924B6026F3B9CCEE886E9A3A497DEBD8242B483A5F522672E36A924F38E10438CDB8184B7CDE79E71112659333A860D424D48093AE3BD91C190B552B43D91F133F825CD19953FBA63668A2EE3FD501C0CCE05DA8E4B85775DEDC094DC4A89219B7C73B92B283A923155F419DC3BD236E88E96105B1D5F8CC243D6AA880C5C6C737A204DC69A79DD4458006106612C3C3147173F2329A29B63B8E9FD99B441EB04C013281C37B634C4C31DEA9CE17E7844D26682EE0B951D666FDFA4C3A26D36E45A7063A38E0E6F45254FC94AAD8CF709BCE3EFB6C6371A7A8268A860BF7334BE7C3A489B5A82482A44F00B5B510D1A40B35E3A15B7619372D66458F76DC7147187624D3A65AA2EE6F0BDAD92FCE682DFD457A36663CCD326F8E0160EF51E7E1329C9DC30E3BECAB5FFDAACD22622C188A1D2094E274ADE6107618C658B1716C039AE694B9768ACA24462766608F3DF680FEC07828A619E8621532878437C20FF7DC730FF43DE650F60A678C004CA687886090B68E30957E904EB91DB9F4E0D028C6DA4C158D973735DFF8FD99D82C88CC8558D675E1D4E3DD7B7636E592C9A74D69C860E61A651336BB3A8B23A3651A52D408128FB9779AC0336E542B6CB2A1D7F453A530DBC2BCF6B4DC8A3BBB366BFDEF5699F9DE01EF7FD30F6EFF697E4B77716EAD62D6CC3964CFF21663D698779E7AF4B3A57FECD13DBB9A69FAC6C97AE9DA68C3ED983154091604339FBCEB1BA639646F6F01D4099E5231B4498ADD95B3135A7B221F803C0DF94EBC9E1513A45025606252F983CD4341CA70911EA4138D953AE38C334C8242506F6C0A93B1D830BF6627E4C8FF4C3C086E7DF2C927E346B4B3A621F79F08009B3E714D4F02AF2AF93BB69031AA855BCAEE25A7E1F144F1BFF212088D566C87C1617AD8980B3BFECE59A0A100F18D59B673422AD6B471B9FC8A3817B1B4F4E16878D2A1A1E3ABC1B8E3B95B6928F15C09A86C12E56A3F4B11368E9FC75B0E225F4D7DDF18BFC25B13CC823BE3645E7BEDB562AEC050F1FA1C36239677DF7D373C4EE25745FD288386436D0BF5D3716F4DDD3ECF583007BD8B2AD94DECC713D0C76E74CA028AC155B0E4206919C9E4DCC4DA92898F3649030C2A51D79DA45CC1B1BAFA50CDB0C5A189EBC8E5A20957A5B43DED18D5BC7169C4946E43D631B19FFDEC677994086B2222891938AE23975B7293687FE5E0DBD0D4F6F83563F6566158722A83983112E61A71E5DBDFFEF6175F7C11C2DD23515DD45B2C6E03E08E3560C7EF397B7859FA7F0CD24267AF5AB58A0DC6497FC18EAA2AC2E6D65233381E2E1BD29F4A9ADA7EFEF39FBFF4D24BF9155A812CF360E65B9A491D7FB95598C5847303C38EE46536BA581FA2BE4502457E155A33DAE426C9A16AC76A4BE0B6583B988FF83A9E423B122361330C5266DA269DBDAF48BEFF2FFFF22F2B57AEA439E8245C1F5C6BB1B2DBA8B489B2D1662A15CDA1D69A529BA7891624D58C80785C3E93B4A2B28BFD70C32BAFBFF5F24B3EE7366B50A97E13F69681BBBA70E1BCCD1B367714BC52A595F6A2345FA1901E2D35C3886D3F9AB152B5918E36A7EF6573A974A68E1BE6527443695DBDF5AD6F7DF2C927A192D36FAD349CD037213CE0E8CC876ECD31F0214C107AAE99D5ECECFF5BA5735ECF7EFFB6EF376EF9566F330AE0FBE9910F5E7CC2FFFDFA63666B66EFA30FDBDCDCBA38CC0F748C0C5607BB0A59B85675373B5475B77716FEF56B3F35C166CA7302ACDAEAACF0C305175CF0ED6F7F5BD425122637DE782344226603DE05372AB7AE6C2CB1E091BD47079009C1691C4839BE6AA7A1ADCE8CAD63D1809B18D2A5D6A2364ACBB1D107E451E2D7C4FCC070106FF73FA28EEDDB4E9A9DD296A24C79F8E187E18AE1CE2C2B124A828E08379C02386A2E411FD1C6128709D90295B113F703100B2B190D69AF11DC0B8B9BFF3CF0C0030F39E4102C920D6B6C03223A63BD8A235145448F42DC8A4538497DAA3759FB3093707D087F64AB0A9E4CBB91AAFC398C7CEEDCB9D822DFFFFEF73FFCE10F53B25029B21E9FC80EBA56EA5D285C25E99CE8BBDB763DEF8FBBE1D1901A0C5571485C179C70089DCEF80333709A5C3BDF57B916DB0662108F849A4C82920E82D382A9A0B94A9B8F6786E617DD26A5B826FDD0D0E1D21367A406EF36AC811FAE0BFD5DDD56C3E305D4CD34DAD8711206CDADB7DE7AE79D777EF2939F547F087E30423AB8D84EF82F190938061BBEA72A1106B119A7617447314393808318A2C4CC4358D822585C3F2CB76515266B99A6398FB4B5F952CB962DC3E167B991971E8335A53231AE877AA81691ACE162280CFCF7BCF3CEBBEEBAEB18A2508B30DE568229B448A0EC508149D2582C5B3209D10163FB6ED2239CC1157E5174223A2C785932F45234610F135DC895D581D2EB73FF733C58B5DD77DF1D9E038316931A64F2B08D0511E03F31EDF8EE5D77DDC56BD45F5DC3B36BD574671A25342664CCBDEB5DEF7AFCF1C76DA3AA2DA263270815D2A433CD8DCDF015EEF3939FFC4412C6062E980455B060C1022C31BE22ADCF23C90C0B74AE5F2DCF99DDE35746E092C4AFE995AA2D3FD70309DB316BD63EFBECF39B9FFD2C9AF959B3A2D7195D3B5235BD338B5B06CAA16B5A815B9C3113BFAF0CF7DBB597EA5D9D7D73D54F9BA667021F1E70A4E0E137E337D0F761CB3803F96D7FA8CED86ECEE76FBBFCC4F71D9FAB16FC3035ECF49FF9B973FEF8DB17B7BCF0F7ED3FFE8ED16239D50CF2E1BCBE91A1EEAE22BE371A547CAFB5244C3FF7C84F72C138FE388EC14D08AB2996638C708D7E0B4D4FD9B8663C6529D794F616BE45B39BC9384692B96FA749F1286FC29B501951E9D8C078AE202409B4EFD2A54BFFF8C73FD297E3EC45313613B3BD43F35D7DF5D5FFF11FFF71D8618741E2483EEABC99D89D223CC14CFBF92715307E0F8D72F4D14793CB10FFC40F343CD99058D0CDFDF7DFFFA0830EBAE1861B086552CC81729366ACFD38DAE942C3DA895ECE884A2DD5625DD145F693E208A9AE6896B2EA838A999D030435E416E4658A163A56C746657D842AA7D72B32265A6AD28854F32A27E580B90A981F8A5DA2FF3903CA3A68CC22DFE1E4B0E89393C3B83ABE8B23AA50893D78339E4CC05663534979650168A368125A494745AA014C1441C5ECCA493BCFB15AC46890F4ED14539AEAC32EBC5C17C61B28F727BD588D2B9849E219A3E4A25F45D3952FD2468FA50F91381CBC33A1FE87462131C30CCBAB5E0BC70F3F53A4DE7FFFFD279E78A2493858C856662732DFF296B7FCF6B7BF15D5949BB04FD35E816EB67BF84C8FB1608D99B604730A7C593F88FBAE4739E0C8D38502C6B021239E7BEE394C3BF6091E44BB904B899F71011C568C8AEB286B06F7D977DF7D619D281B47E79BA1236A23BC0EDF5490692686C8278C5BE1B6D893F8016E311B6E9AD8383EF4D043AFBCF24A82A26D76D536C44998D41411070B9B92915BC5A5EC1DEB2444AD0A6B7187B3A0857B158248E605FEA9AD68D74D39096BAF7A783024C6FC17531EC40761FCB89280E736189174B0CC3293F4EC525A11CE09F60F4FABCAAF21159F78E209DC1C338625E60C131CC77B527F5C1F7F6AD572EC9044BF2F4264D59AB962576DB4E405634EF6BCB9B34885D4F443D7319942114627F62A7D30CC2D9E82BD412383E1FDF3CF3F1FCA82FADE596A72339D544F2E0279E18C0451411B96B998CA6C1B6A14837C6DAD57CCE51FF9BF0F8E0EF57DF8C00FE1A9D7FCFBC5994AF5C12F3EB02930C50FE6BCA5B991A1A145C3EF1CA9841DE90541C52DB79A85CEB067A4FFC56FFE62C1AC05782F4E665BAB6CD2CC11432A2F53E104A82D0C18DFA5D1891384EB8957E0DC9E74D2493FFAD18F680E2A4129337D9AF365926A141E2E9BB155BF577F2D62489F7FFE79D60A99988F39F2926D7219DA11E419D0EFE5A1139B308D4BFEBA42D061CC7E8041A83A90C3E52F196611D8CA7E04C3A1A2C8A043C9A814F5AB49B27414A95284071C70C0DBDEF6B6DB6EBB4D547F2AF0D741D2539442BEF9E69B3FFFF9CF53C5E24A1E096CCD3BEEB8830350204B45CF5ED258341CDFBFD3AED6D0BBC871E48453AABA713B231E45F5EE8084827974EFBDF7F26E983446D7B95D9C9836120BA4F552E892502F2690A465F9826A6A463D4AD35B2C1F6AAB6093CAB67D840C7712AA48BBC049C9609BEC4DA90486E9788D00044C7F7202DBD0FF6D1FA5AB051B6CAB48B1059CBC072526C57E45DBC8A645D48BD07AC5CE8722B433460494F11A6C0CF64D8258C421649F79AACC30A1E7B4A1031A2DAD4C45B1647462DAA1CCC2B822C5368C547B464DCFFD390D28927130FE136B8A318C65073263A469B808A693F1DC4247476528BA92205EAE0829BA68D407560778FB15C664F7BC791FFCE007BFF39DEF10444293DA0EA773C09887188E7B3BD79DBD924E39E594FFFEEFFF562E530744C2C18EC48AF6D95E5CC762461384C52EA077C77374CB81E68740332265EC09C4002EBDF4521C739C29166E4D54C0AA51A614E26FA4AAA19557AC5871DE79E74D4349DB26D0EDE5E361A48CE21CF244930684F56382B0B5913F7FEE739F7BF8E187E9077378A9C895EA0E5D6F5BDF9071B0E49D41ADE17676A787366044C56214D3FEFB9A881377F6ACC8B21F0C3BCE3AEBACF973E75C7ED18591576B823DF7D8EDC5175F0C4287DEC285175E08A7886388E67F76A530B7E8CE4A379DB25F6FA6B0B93C2774DCD12DDEDC9D666F5AB3A1509959593FB0E33BB75B7EC1A736AFDEF4725F7F7151F1DECF7D29D56F726FCF36F70B6AA9A6D93E935B03893CA360B60F876604614F4FE78CECDA6D6B7FF0D8CC9E0EB27B52244AE46AC330768B69FCEE77BF7BF8E1871BCB7574120A6125209821C6A1602C934D4DB05B3E1B7F847F324941F0A4FA8B896746108F39E698471E798406EB75D75D77F1C5173B56952916118FB33BEE285FE308BEC4E1DA296B0A38956DA8A9E13482F89F076149F4AB9C8E2D158DD5CE0FA3A48BC36DA44DCF2C91209AA2612276461637A71E0B636228A33237E273E648703782B02834791386CB14D6C0EE64369E69791B0042D9ED241D70A93FB84BA8786C1C16679282D5CEBB537993C6CF4E0AC83A26E3C476DB6D07E54A79C1BA55133BF7F646144C97F9302DA2133720C34D88EC60132A6E50FC80BBD1726CE315C2A305CE9CEAC31511F584639558683338491117DBDA2B4DC831702BD3B964DE81F0D1A91AE618ABFE0FB762BFDBB6F60093C2734C5293AA4DC80326DD46B01B9FCEA913AB36CD2327A99391A3AC238365C5E328F1B903F9A79D76DA09734BC5490A686649F8834D3D6DDB73F6F42A270257862A41839FEA7C911E99D81C227EC7865A1AC54A44F5F8B07522CB358E18170A7EA5A6720ECA04F290E0AF471E79247424253B06036F0C86BC8979B82013B9EE2235A325078DA56C1C4F01A9551526A1E6206A1D9741D5DD74D34D7834BDD8FBEEBBEFD4534F351694CC6ECCCC38B6B1482B79CCD9E6814BC06A6CC13B643AD8E509DA9CB22A180EA17C502C8715CF3AAAB6FEB6E3F08A2761E6F1FAAB56ADA2317DE69967AE5CB91216958EC9441016370FA52B5315D2D9ACA9237A9CB211375FBF7E3DAE84ED026583B389FDCFE0B3B1D83A95ED8253B87AF5EA258B1746945B8DD8C77023C6DCAD5BB6F44695EEC3D9CECE7ABC819D3878DB820181170CC7CE5D577777A35E55BA84DE0E5D3515914797CD29A6E667C2D9CDAA5BF29B266A42E816823057EEAFB7B2E5DE855DB5B5B5D33E71FA6D377F69EE5E3DA5CD95A091F3E7179B4F6D346537F7C15DEBF3FA8A41B991CD35BAFB4CDA649DCE74B9C30BE7E55B7383674AF5DFAD3FE39C2361E1F1989B8447886284101C6C27CC3CA53477A3F220B88CE93C56ED4B8F30DEC02D277813FD07BB51DB540A98FB0A17EB80D3602239AE4840F14F1C134C38D68E743D8A861A515132E8276788084CDAAD70BCA02D147373FE97CA90546F8E63CCB3AA743A243EDE84BA81017D6A5CE545C8BEC47A7F8613C55E44CDCA2027CB1C4D624CD0AFE2E124DD3967508E2C03D7CAFB727215E813EC8BBE0BF5AB486EDBF026260EE04B03F1978EC509609307D92D756513A8DB815DBAA3982DFD5AC63AA44EBCA453A6ED6E7260424773D5612043DE6154CA196B0670FD09279CF0831FFC00875CBB678C2E780A456897CAB451BE85499D801CD3DD77DF1DAF8F8DA8CBB8F5553149652C8EC069407F84EEE389BBECB20B641CE33F76E9972D64892665D899C7956A893B8A6718B30459B666CD1A9C1F26D79DA41C8B0BC1C3135AEDDC19782011348D09E1F8B45518A2645081B41B141F2681BC311FC1238DE340760EFC9E594F5972DC907489F8150AF4A9048470B35C8231E0B4EBA81E3F9DCBF9410BB6612697833FC499518A94C7011F51C2A934888503DC3CE294C6FC90490A6F871579EEB9E758CBAEBC1503B9F299881267A281900505035427CDB7E3C9D2C620C4A64D018BB8860F72E2A23B110587E3F9DB5B498FED3061667012FCB60C507C6BEFBDF77EE69967986CA2656C2650DDD93613A954B8B22A16C78BB0699BC82C83846BD34C8817DA05C4147A5C7D46A170066D1C80B6049F4EDB9113AE3A1CC233A347FBD0A92184505767B15E1E6D35C354DCEEA8E2F22861B74441F2FEFE41D836D8205DF87DCA148A510E1847B7A777F6C0C06077EFACE1BECD8C9009F8F2C0030FC42995547AA19BD9DE093AEAD85E5ED3D42B39BFEC143B9C6076A5DA30B39B5E6BD42BCEE9AE412D9BEE9941DFDFB19E1BC2B9F9EDD7CEAD1B7FCDE220DDB7A551FDD74E93C32EF55375E3364DA3AFC3FCBAEAAD728B5D11950DD98225F1340FF881447E102C0A3E336DA108A228B8DB242D0F3E04ACFA182AD0D2966BB73FDC5A826ED06C85E3FB852F7C81F5A2380834F5D41F565F1484CDD854946D1FD6B9E2A6A79D76DADD77DFCD27D9247CC6620056B12CED113C807244BE94ADE029A7047A74AC3E6EDC97DAE2F66E3313A8D8192015C93B3B93E0F79017B00D2FB9E412EE8F36F5460C0853B9FC0DB629C64F7D2FAF5AE324C7024745C490B1BA70DB0B19249CFEEA26B4D75E7B4172612D6D2F4A302E6D20D1D688F1D149E87C693170AE6EBEF9E60B2FBC90B20917DF7EFBED679F7D36D92BC5462B420CDDB3187FA04D291F211DB0C9886DC6B70E3CF040084A78549C461A078225F330636EE5424DFA51E36463110C3909CBA64A4B29C878019373CC17522E33CE815F2E5FBEFC9A6BAE21CB31436A02199A2408494B4B1DE5308D6A9B6A63796C2C8289E34E369F391EF1A10F7DE8DE7BEFF59386BEA2EFD026F4929EC7748068D6703599A0C5088F3FFE78AC05A530E68A65668C58928A88405F9CCC0B2EB8803E258FAB264D7EA119EFB8DBF18396D503582EB26AF35417A0823D99290206F21176C10C9683EB1ECD49C135351834DD2383C36E9870CE4443090AF94CD4E63BE51D73EC713FFEF18FD7AE83B9EC15B3A6516FF961DCAC8CFEA51BCF5503BBDF9F3B67EEE6AD5BC6F01333BAB1465B376D9ED53BEB80030EF8D5AF7E15E5BCE3DEC39974C64DA59906121F2426F017BFF8C5F0F0A032F134BEA977C929C683033BF2FEFBEFC78667212F2390CC3473073228625ECF8713450F5B7C203447D4276DCC7C191F2BB2174E192E8652F027880E72B532B9C6F927D081EB62330DD89E137EC3FE7AC62A88629E9243E214E1D46083E97DB9736C3EA620A18FE68AE34FFBEDB71FE4A7B18C660132243DB8576D4215892FFC97C4649C1F3FF04DA7D9EDADDBAF1B5A571A094C8799D193AD458906981441A3860D893D1C7A69932BE6CBE5AAEFA57229E3B6FC0666C2CBA58A4BFCD4BC9A9F33F59FCEF153C3FBF6D4DD6D663B63460BCE172AF386E6F767227FF7B8E38EC38A6BAB2B3EEF4CF8A8199D5CE43BEFBCF3DC73CFE50187FB71D9659751F56EDAB44904678AFE0A134A43961962097027A189956DC7AD4E370F0E319921A4B028C7689F91CF5192734A05CC3D04F181EFB495DE5334130EAE689BEC0E6EAFEBAFBFFEA28B2E52165A4529ADA417B7E23036C0274C287095BCA49B480F92DB94F48AF8EFC1071FFCD8638F1160C28D8E338CBDC50A6BCE9D6A0F6C5A54C57E172C5880D3CB2554E293D34AAF5A644364AB5EBA74E9AA55AB68DAE85812CC2689C991D3763EEBACB3EEBAEB2E4A163B8D2A01EA582C041AB328128D4587C6364DB412F015BA2666BC65A7F5E6F9B179197FF2939F40AEA9E658CC0352D8ACAD62C1227712BE8815BCF6DA6BDB5A03B57DB8A5987DA78BA92277F9195C53AD26D3DE84CED10715028ED686E069A79E7A2ACE9BDE94A61E4B6FF9B30D8C2410C6B5283F8DD51FDB2EF553B92DC3F876F4BE2D4768D73328AE40ACB2139358F132FAD361D2C482F5694CD48918597BC906C462005C08BE755BAB60BD02052891266C8F8889DA61871D5E7EF96511AED1ACE4D956C12E45BC8AA64C921822C8204898C222705FA3E24088D6708EC28C13B99B2BAEBA12167D77B1D0373870E2F1273CFAE8B75A26AC366A5E2ADBF49B1D1D71D221A0FF44C026EBF25BAAB74965D27E33E2D28AEC182F8AE808272572B18ECE48BFE2B20CDC086C9B540ADE4314124CB99FF8C427B0FA782FD89DBFFFFDEF7FFEF39FEB78720EDB5A95D03DA09CE57E9E1E253E8DDC4B253DDB156924B535CF1DC9CED4F6D84C8652E466D31130166B8400986D383E26CBEC3F61A72D59B2E44D6F7A13AC16B6D31007386967180B24B5087B6F28EB695B6F9481728B4970CB540213ED32AF9D1891C7B004734F544E7890DA8E31AFC10E25A4DF8AE051336794EA43DDF3D3C303CD3DDEB5EBDACDEBAA61B9B3C71BEC6FA5B3261F2D388E4F2EEA7E376A66CD2B5446E17B4705C638AF4D936B3A9D7E66A69BE96CA407E697529B52434E6B6B763B536BB9E9EF07DEE6190D378AA310C9EC594D91EDD7B4DF9AEE10142DBCC7356BD6309A4B55D5D68D4D15EA26B6F29513A4152EE9C4B0B6F41DBF684394DA0A08191823D4490E866775637BCD429A74237294A256A78E610C8AE809EE7B92B1C959A411CAE327C654261D09B0620C90A06D3B95A20D6ADBEF4CC752FA4F4CC008BA457A3C9A210C910966A5E9133F2DE53E862A1EF95B6EB905EE326D1FEC398C9C695A92F5D8D32A23A38DCA43F254CE9C5088B8AD0A3D8D95306690004EDED5575F0D276CDDBA756A3C2E0606292DAC257EA6A941CF0FE3C4232E883F26368D57AC58017D2961C45D85AF332A28D5AB90801A3ECACCE7872ADF4687B13C6E7A43CD588CFCDCCA1824D512437334D79C846B89D5562CE46FD349F8E5CE3BEF8C27F26E22C4A7F1470745BE23F7005E997DEBC4D8158E2F3B31E3D137B6C7D9766CEC64A18C2AFD86DE3007202249BB628D89065A66625BD4CD6DFC97BA6C71243671BC9982B82E4CFAEAB0199189AD460A1A3140851388E31901731298A19080D42224048563FAE057BF5AC8E6AEBCEC8A6BAFF942063BA4D92CD5CB69376D82E692F98BD66E5AEF39E97AD8849F9BCDE4D2B9ECD068C47210AD8783198B394D4D14E56EB4AAE91854C11E1E1464D1E973C7D0E602F933D0DAF4A3E39A85848119173B0450C3B86DD08AA892E9B109CECA3887CA11A90219A0E6BADBA59CD3CCE4F41F79C0F64C0656F72463D562D96545F6B31473E68E2208DFC44603390E136AFD31E395679F8FD609E2D1262AD65855E072BC6CE6A6368A6C7BF39BC494B4CD68611704E1D60F2689B5D885CBC6F2E9F95C9509448FAE96BB7A3B470647A3AC66CA6CFFD61DFB5B1BDCCE7AA1009511F960A3C3AD7CDE7415E185C74E42DA6D3583B4EBA473B9462B18AEB7C26CAED0D9359A7DC3DC0137E737D6FEFA4933D32C3A68E1869F6D08079336F2F187363177B22D97DA64142144B46E459481912B16AB082B639C1FFEF0879F7EFA6998747C475C0F03148EB2028A70A81E7EF861C289C461C00DA9161A267624F04FA20770673B3AA8689C36D8741EB05208EC45CAB9A630A50DCB3DA4FDA103CF30A9EDAA1BAB5A14EFF95FFFF55FD452531D0F3BF3CA6320E49B49F8288284066C62D70B1135DB2507A22011A98D89D3096D8E232E839DB57AF56AA84F3C08675EB46736513B953191538CC908F1A12493B81758A5F7EAABAFDA246742231368C61BB26B0DF70D47A8F0BEF4876AA51860A056A6F5C31DC0AD40E67D4DA9D215548D3C57F4F58904667E85F573F8199EC499679EC909275E66AA7DC2E413352505939C660C1BF3436E6A6E21829FEDE00417177348C663DD99EB428F810BC15834DF574133C2EE18C06823369707C36DA08C2F5F8A511C6E243B21A76FE905ED9A93D34F3FDDC4D8C8071F7C30B458EF199AC39F98E0C78C31198F81D1A4D36A126028FDCD7DB2D34E3B9145CFB1D8E16DAC1F97497B95EFAB0D89DF13CC892922E099C616431AF8D92EE8B269CC753673997CAD5A72C855895FA4DCD973E644288D6AB3669AB37BE7F40F0D76CD9AB571CBA6742E72268C139B32B0B79C149C5E58BC29279AE76A90A4D9E293DD3B2BDA0F610BE34F8B5B6674B44C76F759B366F6F5471E5B212E588ADACA7ADEE8C84847672714B6F86AA0B4F05DCC27014A2A845529361E01070517D0CB21264307DFBC9E8F93341D6A2B2897DB44501BB3ADC4B7CB3168936676B76646FBC97EAAC233EE460256962F5F7ED55557293B6857305373B008058B8B9FC5D9C4ADA8C27D11794EFCB411D4B4D14D48208CF5168CA504AD5BAA138561F12DC5E105CB8D003DC38358F19E8E8E663DA8C36ACBD43A76CBA47AFDD14AD0AA9BAE599124EFDF06830C3A385B29D58B39D3F2236E6927E5B5C2A0E60761DAA4F0CBC2C11DFFA80CFEE1F94C504D7785E5A065304CF823A161EA44C57E7412A6C14098C4E495D781B7C06F0E3BECB0830F3EF89C73CEC106234D021D39FCC01600CA9AC136DDBC793345CDB265CB582F8769F7E326ADFBECB3CF9FFEF427C609E6CD9B879B289EA7FA6327615E12F7BEDA0708A43CF906A580200B2E85AF42A3246A664015BF21658134229799C56A5C48C13A3859EF7BDFFB7EF4A31FD969D436C02AFEC49A6339BEAE45B3AC3827452A760C11C50C10516F89C480E29BA9175B1591FCF2ECB3CF86E348CF864FE10CB24DDE7EFBEDF7BDEF7D8F83E77920C11B6FF2C10F7EF085175EB0198F35361E2A9E1F9B595474D0E29A204514B73EBC10F8F15836EC6F0C8CA7D13E2A3C0F3432183A667F3A3BB68961602BE02950754AA062EB6CD8B0016B44EE3462A4557B2D73922CDC64645CB56A9597F451E7769F066D2B5B017738F9E493EFBEFB6E25B9153DE6D263CE313039DC0C4B30524787FEDFFFFDDFF915FA887C059A268CF9B0DB9A5D24AD40F497BFFC65CC9B8C306D71E6CC48784B49CAB40837E4C47DA8036C43138C95D83BE8A083F6DD775FCCE16DB7DDA6A88F3D27AC0493BD68BB11B69BC20B66C5BC0750C098735E36A902E69BB2E6C18614302D622C97857D8BC5C3E7C66D1E8C95E1A3E9430B9DF58E9152774C4FD78CD1E1A19E62C768B9544879997C6E68B43C3F57F4211F9BCD7210BD0C14B5974943BFA762A186AB20929B8D5694028CF05DA6734E14F6A8976BB97CB6ABA3F30D3140544D23EA751C0788D166672736218C5DC76F854C883012C3E00117880A9B9B87F6BAA22C4C7FF28C8BB2C38E6C7309A6693F37D5470E4A90F487A0C5865D7DC5155750F1D899021AD036AEAAED5CA8C24D30113BE72A4B942D226C052C10AB88F99CA46FBCED36F0D8AA1CBFED9C8613AA9B84B554B5985C37E8128A0E885FDC76EDDAB5825C10FAC04A7A9E3E6A0736798C9277AE37A3A3A33232EA608F643B47BCD130D3ECDAD52BCE2C962AA3A39570E6FC48C60E6EF36774E3FB9928E5E1985660A28E3C9EC967634BBA69BAAA3BF6AD7C39EB171ACD56E88569CFC5DACF4D776F690E32076433030A7439F14D79CC3975A422E18910B5A7B1DC5019282C1962B84E2A434108B904C4BA0AC707B98A079188ED339FF90CB60A2684554C74A64D1275E31A05096BD3580676D28DA8509596470134DE17FF24D64B5B5C20492D18C404113DCC55A8F448F2B14DC428E4CB6F61A660D8C22A113A7122A88AE171BB8A9717E87A1E006D4D52D6C9A09370742D5A79A6041833572B5F7B13D3E823A9135D3AE551949F104AD024A541F47884852176493039CE9BDC6811F2893AD85804DD8CDC72626913B08329B42FF156AAC1807CDF61871D9E7DF6591BFD212C8F9370E699C4D556B1013CBC33CE388337C72AB0F4655281456F0C8FC67FF1E2679D75D63DF7DC13C4BD51211661E240B2BCE31DEF78ECB1C704A792E8A10860FA00EAF39A6BAEC1EFC5A089F9C7353839C4A17CFAD39FBEFDF6DBA195991D6050847A0563FECA57BE82DDAFD48014B017B7E8C195EA88CEC88D338149831F456E180F1452417AFA231FF908E43B6606BBE8D65B6FA5278DA1C2512071D8FBDFFFFE7BEFBD976948723BB02D1DAD0A1BE86792B09EA21A53054E9DA4EC8A057B0C71E30062305FFFFAD779D0684E61B1A07BDAFA571205ADB8771BC34914A8C8A61AF8653398D3511C2E958B11E1C3E27FFCE3D5DE5C715BAD0CCD86A51AA955B2DDDD5B0606BB7B3A2B83A363597C3FE2F49037ED27E2C4C30F81993F77D6C0B63E2C48E0E229A95ADD4F79C66F9919DDD8B7A5562C3C8B8531DE984A35524BB367F56EEBEB6F59FD7CA43668D18A6F52213ACC1EF63314E465975D26335A02E19F54BDDACFF611A68897C9C875A40250172CDB51B65730483A06F2E2458B1611D64EA9C2BF2A19A7B3C987D292702C9A1AF559C23FE11E1C75D451DFF8C637B067ECF48D8DDA9D28B5B88D5BE31BB40B6935B1D69F3B0AB2228CCB32850AA2C76C628EF1D744BA939ED33BA3512967BD62DFE848A1ABE867ABD55AB57B6976DE9279EBFBD6969B66F6421CBD666DB495CF7AF5B0E5A5BD267CE56698754D47BA681A4175A85A5E69D2B31C674BD848B951634CDFEDE8EE4A0D0F0CB8AD20A17EB469BD276516B37FD0C4D219C5CF381A9837AA09957A723938990C2CB3092FED5D76A2C4D10BE32237DC44E17AC93D05B7148CD1EAE30E0CE071734A01BF96B29E74239AA4F909E79DB5169FFAD4A71E78E00119E02661E2151488B02013C746A4BC555249042C13C36D01719354374B494328EFBEFBEE7FFBDBDF284AC4CE48CF495DF3E008626CB44D44CFCD3B50E8F0B6B49A99FDC50E8646E12CE367DC5F4606F3AF6D124AF93F9E9689B531F480A9B64DD21E87482E7EE54B5FFAD239E79C23CD672CA231E6898D55F18967D9ACB0729B589284EB715A04193349721A3767651BE79321650C80F4499899050B16B09281B5FC4433D9FC21AAABE6E3D40A7A9AFA6F599A1CFF4F7FFAD377BFFBDD90835FF8C21728CBA8F074015D5E06CF499A4A60212E6095B3A8600495E283983C8B6A1993E3C4ADC293A074946BB54A15FF095F56E4E161D2E542EB65AFA34C3109624E0EAD5712A8C1033EF4D043D7AC59839B3CF2C823C262503CB1190363EFB009EEB8E30EDB37527F78BE9A2AE5981F991852E3CCDB714B7CE5E4934F7EF4D1471901C269C790C8E14C330BBFDF6FBFFD5E7EF965721788F3C4661A51A91BDF1493DE057FB615608296F4F442920ED46B7B2E59B266DDBAEDE72D59B379DD95575F73DEE5976170B9627EB05C75A3A97602E3D482C8F98DDA2939C687A28D61359D853CFCD97AAD998AB4B099D9D1D1572A157263A0DF6ABD997293F44160F2996CB551EFC84741A35AB3D155EC1829971AB1D8D26194596F1F49B19B190B8D68CB9C89408DFFF1E35AE4A61220BA096F2EF7947E2D7FB0DD09A10E791F2F6E46B9F3CE3BFFF9CF7FB68D032653687F13E4C55A060D46E5E9D84B24E0A3B015C891882AC7624074A6AD5B3589FF60120BD58929F445857BF8E187FFEE77BF3BFEF8E3AFBBEE3A420E790A70D6B08D4F3AE924BB731AB503BE1BB98C153F93751ACDDAF2E5E7DD74E39D0B172CD9B8711D8E75D069BC5EB3F33EDBF755360F566B850E77742088CAC44CDA7841E846F3966A386E25D31A30AD51E36EAE8FA64C67C3943A32A19F2AD4C28AE7CF31A941D7D7D4716255E739D5FBAA1D16CBCDDBF295C6EA4EC8BD84CDC3E6252C3A67773E93A48DB4BE360E4ECD187067D8DC3001219619C638FAE8A39F78E20946A7F8211E9B516865BBA654C037DD74D3E5975FCED2A8302E64C620EEBCF34E11BB088020CF404474C6CAF0531571A71265D0A63C8C856493ABA153C446D636184AA63D370DE4CE01071CF0F8E38F63B24441A70A5D2C181D5CE81EAC044415A113346A28C469444B37408612D38F91ABB16E6891D6525BE0B9CC04F0EB764C9F00139BF6993721B08B3C647885DB6EBB0D0FD28CD1C2B5FB595275898C82CE226F081FEBB7BFFDAD893193781706E1D5C2F6CA2BAF3CFFFCF34DE231F3CC086FC51FE0DD62D256AF5EADE60752752CD7511E9AB6D754D97A0506DB18D3B83A586BDC9F65242C647493EE5D840D0B522804AF4C4B253855D4C4F160A2307BCC97330EC6302073BD5C8E3605CC008C8DBDB2F3A06D404A3ABE9268AA23D4E131711A65C71D77A4838241C2F9E6A11045B34865955357FF2EFED3C4F8036194E895CA8309A7284362B371DED68C2FCDB235ABC8F044B363129E3BAA347E5118EFA81CDF847EA3D9699CD9F9CE91EAC8CE33664127546AE5AE6C777146D7FAAD9BFBC246269569A5539BAA959E422E4867203BE18756EAB5060480E7C29B69F8269F4B576B4D27AE3185F6CD7A5EA3D54A1B276607364D5830F14969E0C4C569627661624C153F44F22B0CD2AEB778D95232C33351223F46D5B482F5325AC6B00A54020D6B61F7A6E1309F6A3FCBF02242828083871E7AE8B8E38EE36CEFB1C71E4F3DF514A3682CB65678A30D2864177013C12BC3D18C2F4392C014748BB1130D86004FDADFF82FAD6A66BB8D450ED52657DB1492D845ECF345C142942F4D55F54FA38783ED8DE306AB9A6139D19BF362689DEBAFBF3EF4D35EA619A41ADD3D33B6AD1F72C2ECCC6C57B53EF2A56FDE71F22967CCDCAD5098975DBF7970EE7685A1814A2EED39D574D3D49CB4C9A48C3F6846D79970AB49B5526953A8E61B33ABB5D16CA6590FE1688F74BBCE0814C76BB83395D54EF3CA61D2F2CF24A6B649388B84E909C677B0B6CF91DAD5701B504A13364B82553593C67F6910A820905DCE689D480B485D6A938C091F790CCE64ACBCD273766DCC85175EF88D6F7C83D121ACA848705445AE10073B0790AB13476B975D7681D360AB0411FB29C92103CD195F573795256BE760EC40102D50E97E22E2882FA0101455422A6EAFCDE4225D400EECD39FFEF47DF7DD371158A8E70A1483FFE28B320CED8514140B7B147A91EE2F1E073B80A869FC46E5C59A0A0E5E714551F37033A9B704DD17A546BCA49901771525970DEAB1C7CFF34C974E0001D95232269407B5CB2D6CF8BAFA2E380907A71C023DCB2EE661B36BD2E3E1E4C341C4F1A67927971716007E60F708CE189792A625CD0E0D8C197ABCE999679E092949BDCE0931562645FBDC8C873AF31D99A7B021CA26C11BEBA00AE7CCD378F0C107E3A431D98F8BEFB8FDF67C3EDB552C0C0CC07C4E076EBA526DCC9CB77070D3DA4224A7AA0B162E1C181EA995C899D545C64ABB2A9FE7C83379C74464BCCDD00F4D3C60FCC383B3D984420B636DD2D1DDD1ACF83D1DB3FAB6F52FDC6E0E4E1605B1CC440E9899AA8E42B15C29BBB1AA8BFEEA780DBF1E95E1C21CF14C50874A3529C79DE18705E3741BB7C7710BB1A5D2324E23805B9C1EAD963BBBBB07CAE54C3E370267D435CD56AB64C27F7DD7C1BF79F28951C8CA66AB19EDA8DC50A9E6C79960D704A95801A72061A27F62A378F816FB40A4BD14364AB5D1E84A654B99965F8988120BD97C5FBD8A352B668B477EE4A30F7FF751EE2BD229504B65E35225C7382C2376CC185E263AB6CD0691AE8C971A0B22F47A15B044900D0EA0FF802D7AEEB9E7E22CC34CBCF8E28B455B684B275ECC5FDA484C8C933173262C48324A654CAD4F2825837C36CE96594F397F426011D32BA253BBA5A38DA7D159168841370C128651559953FB1E79E491F7DC730F03EC2CD5A397CCBA1866E838212CC561D1A98C24156B44F3601A6E0BFB2CDA794E36CCCC4817E6E6F0DF2810D25F1BDD586E0C35DD16B689091D662A5CF933B62467B858FFB5DF4E49223B95A9F725F780B03B9496CC06CA6FE48712865E326CACE79E7B8E8900BA40CC7CE132B8A6587763759DC241C3C9A58E537C8B6B81438D3B10BB632C60C76BBB45E946C965B121F267DE91728A156C73E6CC21A197E2D2C6AA42617980B1A03736E72DFE09AD76CA29A79884A08A5B81BB7062F95A1B2065E2C72E29B6AF91E3288F996F4A0FA04D28DBA5ABE28F253A6E9A10C744A4BEBC64EA3379FF823232D14293534917CA5FCCEAB1C71EFBF0C30F2B3CD09600268703DD1AE95AA94937691CAB0433F59C9D23B14BE5A426B989E50B52C3F1E6F21EA69162EE046E5BDEDF6E5CA3ECB8CD7245C4008944ECFDD356AE0DABE54B5FFA12031BB4DFE94953533A71893DBF2BBE0219349A468E8486B38DBCD029B5F98CEEBAEBAEB3CF3E9B9245200061DC289D71D9C73FFE712C1946850B208E478607BFF295BB6EB8E1FACF5E78119F9BCBA6D9BD0AC37EFCE7BFDCB2655B3E5EC12A5CF6A8EAA642E4205169DC4577DE79E7F2CF9E8B11456DDC62911E9A98B72A340E543A147B3E571E1D8982BC7E90CBA49B8D7AC6EAFFA897126AEFF2CB2FBFE4A28BA3E8482A353018E18D431A79C542B55C21E619FFCB416784E19C54B61884D9A0B178E69C254B9694AAB535FF782515AF60A1BB73B85CA9B69AF556D0D9D3DD373080CD0D5F67D5A6CD9DB96C2A9FADFBADBED172DA357527A644C680231D1C46CD979C58017BAE1FBB2F0D3F52C06E10561BF5CE54B69131E9C0CCEE9CD93F3CDCC8A6834CBABFBFAFE0E5475A51F69194D7C6F2EC5DF39A88B0B734143016EEACB3CEC2B72837C9A5357D3F8F7F5E01EB08B303A0FAA189108D6E960D11E205943FD8F9A79F7EFA6DB7DD66A79F24124F3AE9A4071E7840495C3BEC612B09064509ADB0EB7AA560EC66DEF63EB735B1DE54E47D8CFCD9142E8C42E1CEACC3E169259495202686C1ED1614FC937899C4F7E01B3FDA0361DA099C46588F779B891A16627438E5D8B92D033718BF6F393059C2943B66E68613283F25D87181AC2B6732F6D930A136E33F15CDB2ADF089A919FCCC84B72A542597C4344EFF4A08472C0746C2DA6B280EDC90491F02483106CE0F3D138DCDD6538EB11871F933F71669E81957C483BFF8C52FC2F4534C55C458E43150076C6E4166C258B34C3B480D6BA93F4428CA7DA3B00C3DFA4915F05407662A0FCF265DD20B3265A2036057647236ED5083493AD24FFA5C6E5C4104B9E77866542767C39E75209934DD7EFBEDA124C8D8407D836771421812C1A4B1029286A78D14B0959FC041046E28462AC865DB5CB58534ED6F8968C256D2F61755AE63135648FD2B5AABBC32EF29262993981A42D1ABD19B7A3E1A4BD9F311C44198F1D0532502EC79E69F60721E73CC31B7DC720B362106803D4CA9A48CA00241B660155498179F71C6198F3CF208834B2AE8FAC0073EF0831FFC80928839A1F7BEF7BDD82A0B162C58BB76ED760BE7A573F99E390B33D99C0983534F3C7664DBA6622EFDF5FFF3431DD7FE81A1A8743EEA5558EF9931D6900A7F828CA3570115F2C9B8CC696C7D234D9B8AD5B0136501CBA38149173BBAB259AFBF7F533A13EEB5E72E2B57BE60128C02279C9179F6668F0B5A1DBFE5D34AEAECE81CA94411F262BE50AB560A5EAA804BFC00527156BED0AC46D8AB05C5CE421CEDAF34A3B6B125BFB66C871DD7BEBA61D0AF2F9C3DEFE56D9B21A167173BCBAD869B8ADA096F18199DD73BB36F78B0EC873D9DC5FE4A4C4A03091806582497FB215ADC48EEA4B23185137CF120AC556B5DD97CA55987DCDD7EC6DC5787B678B98E6DB5C8D69CD9D9B3B53CCCAC046C08D2FB617E22AB28CEBAD1F7E5A90F62C2AEDE5819DC78E38D175E78A17D48FF7F84A0A752C03A11B63C917416A686011BCCBF88A9695DD94DE3F122F82E29D218022107755B8D228F867D4C741060AB9D7FFEF9420CF0AFEC5BCCE34F8944875B85D10237A811A7225B61DCFC03BFDFB2658BED6AEBF850432B784E94861D2054C45149C0E8B25603DB37ED64DC101BCD6F193FD2C1DC8E41A47D5326ED3A6EE004BE6946EAA83576F62997585A421387479E7345BCC83490EF3675B0CB2EBBE07A92FD31836B8B7162CB55F666E2524FF239D3C6224938742A6BC0EC5A7C63519599D86DD86DB7DD9E7DF6592761B2140ED74CAA8029DF19A1A5BB2D1BCA26C6E4AAD3CAFE7CFC61D251154A5C0F26FC8488613F511A470AFCF2E6DC94EF78C73B7EFDEB5FAF58B102270717C391B7E5AF31FF731DFD544056FD9E5602DE029B9EF9212EAD931417A9992E2E7EE31BDF0887ECA8A38EFAF6B7BF4DE4DB5403E04DC440E624DCFA2C39E0BAF267FAA676BEC724D93B7E7DF6ECD9F827EFC3340FAD36319CF19C9BF19D58A4876CBD280D4D9348D8EFA942085C1766B06C60B619DF55224CB8CCF42037A16C9453A82C00FF2AB39AF3EC24ED9939572CB460876031297283313E8F7F42B1C10CD264B681426DB9230A21EE55BBB10713D27055E93404497B0C29603B00C0FE3F0F3DF4D089279E78CA29A77CED6B5FE3F6B6BFC20F6E88C3FCBEF7BD0FF7DC79E79DA3D358AF74F7CE19A936EFBAF3CB1BB76E36CDEAFC9E826954EE78F0FF44A0B35C664677E735D75C3377DE0228E06CA168FC3A9F8EFB908E9B31B160460ECB16C9A668E19CA879BA1FCBE258D266331D954633164A6EA53682BF67D3590606249EB0CFF1674C1D660376F359679E994EA5B3E974A51AE98C80ADA81CE385A6D34D158CD7E9A63DE3B4FCDAAC6257A7E70595121E9A2DE4BD54A60E13CE35471C71C4EFFFF0873FFDF52F8B162E2E576BA3A552AD519B3977EEEA2D9B97CCEACD158AFFD8F06A2B3050BC9994371CEF35D3A2DE329E33C69D628228FCE065D241D387079C76DC66B5D6D3D93D383A34BF63E6760B173DF9D25F22D9DC5128576AADA0598B85E0C9279F7CDD75D72977CE10B48915B0ACC968E325F4D65841A861FE5EFDC25FD7672A05CC7203D28D7157304D2803548949F885D8811065B8123B04969C5832B84C8AF1E002FC869CD58A039B18E5C0D20F25B35809436580EFAAD0808D19D8D511A7E690430EF9DEF7BE471F94702D1271F3D4B816199C6B35B6A2ABCAA203929F10FA8B3B5C7DF5D5679F7D3659D85482451750AC5B3C6266BC7D6F12A3B052AB4001BBA1E746B9895816A5023715AF4BE0B82D2F6845A5BE810942278062F68CD7663329F8D416E0945733A9889348CFC59FFDF7DFFFE9A79F666D859C783593E023F6D8638F55AB564128E1F59D0925128C7C5C7BEDB5B008190C604812221A33A3321F95C3A8360466D64452015B55398CA662409005902C0C58D3DD56DE9B4E18D1E7182E9593CA28E916E085D57AC5B1481695AE6018106B8C9B93FB89325A349076DAA6CD039EE62C8D3328924DC01A593C089372EAA9A742C1DB8D9EA463B88AAC1122E289B061926690E06DAA87B201162D329B50891207D6280660E72D1499618371BC320F1E69ED5847248E085560D335E77B71239AF158033399152232018582DB8C2F3521E0519429BD64C912AC1A71837620A8ADE112E5456871B619CB33A6358D5F8A25809B95550D2CCE616F10137332435A857147581E724556F0EEB85E08038A548A42A155299A69DFB0705CDD5B79CC087AD261B3D3D86ED258908110B1B71386C675C135D84B8C93E3A5885A5023AFFDF6DB0F8384CCCDA59CE172CDA4B2956AEDED6F7F7B269DDA63979D4B43FDCFBCBCB577E68CBFBFF0DC50DF96FFB8F7DE62315F2AD767CF99E337EBD8EAAA32202F5804C51C89C2CE104529C775424C78D535CD0CD4492E8631852656A36E3106452F5AB2B06FEB3631A1126843E012036BD1B66CFA1071A9C8178D4EE2C0C870219FF5ABF5D9C50E1F7E9509E798426706C2BA51CC66B2F0979BF574CACD43941853AE5406EA91E1BF796B849E2B053E660D7A7A6379A433B2AB72AD30D8DAA817A1BF4D982F760C954BAD4CECFD84C1D85EF3C6EC33CF84D41FF57A132E4FC6F1C2A63FAB6B86D70A3B33B9A56F58B67160E0E9B57FDFE6D7162F5A7CCA49A75E75CB0D6CFFC54E35D45251CCC37B2DD26ED789657263A95015764B70FFAF28E030E97AA46A63990526E919430703A3A5EF8EA7EFB4D34E0C7499A48E5FF149FCFC96B7BCE577BFFB9D0A14891BC507DAE2F7BFFFBD9A4930CF6292BAF99B6FBE194AD1C400D5356BD6182BB024583B73C344891A0B6F2582580A13D810904284592861477402E70163C36F704E55462FACA5490815DA3A77B9497B1B228F6AADAA03A3AFE599444445C6539CC5E77F99CE8FE0F35EE0A49CA03E761D73D518003BD1D1BE543B4E92FBB6E2FEB0767C2EB4FADF705DF0C1356F78C31B56AF5EAD523DC1A6E421E035D571528E10A1A90C0088C4972813BB5536D52D2E8621820BE04F5E7FFDF5AA8CA0189F32078CFF27C00FDF842DF3F2CB2FDB7F56AB268A30BB00979B12B370EEB9E7C2215665115F9E017112A9F0C5942B85B4C2B95AB972A57C6B13FB6A620B7B5D0A78A2A9C205A05EFCEE77BFFBD18F7E94F116AE1073BDCAFCD1F363C24F8809137BA8621199F4B95424380C175D7491C2A4EC0F418F0DF6D433CF3C437B992A991550AC49DD7BEFBD9F7AEA2901BE700196E09BDFFC26B4113BCF30BF72D34D375D7AE9A534CAF0CB7DF7DD17F3E64EA02C36E3F108F63827D695CA3EB5493A75B7A54B97E2BCE1D1B698A3A0913092766F0325DA9EB149E2DB2AB3711282307C859690B226AC4F637D9493147AB5F5DE20D8554D08A8741975A0BA65B4A08D5B805940A63626056129F5259625810A2558ED523A93D8C2CC3B1C74D0418CA88F5972851CBCCDBEA1D1771DFA8157B70E1DF82F6FFFDE7FFFC8AF95BD4669FFBD770B9BB546BDEA7AE942B17370A0EFA73FFD29CBF9702B52E2E159733ABCBA1FE27FD57A0BB3D1BF7563AD5CC37497D371C82EC42352F013464BF5D9B3E61F75F427EEBAEB8B0AD0D1665294658CF5AC2336E012F907B1E7865114B0DB4B777B996C33EC70D26ED0E82A74D56B954226D5DD99AFD7AB9B4606E1A375B8A9D1B085D585B931BF1035E8AD07CDAE7C44C0D4571DDD75F192575E5D974A656A7EA315D56C4602B7EC448E5A3388EA8B5AC66883160B99563CBC5AB59E0A4DC6441B18BADCADD58BA93CDCA9B57D5BFBC26639ED0C57A3F7AD5B36DF01071C00110C773332B39A3E63CED19E8F69A6B9E79B2D9FAD4253560B4BAEFBFF960296052FC25AFCC0B213EE495A81AC62E096E04854D06C836624EB9440A56EC0D3F7DC734FB86BB62E6170911621EFA6F02FBBD55152A968CAFED9584689609EDCD8301F7FFEF39F5306721A79B4E92A70E72BF5C390180F3B0D0572CFF1006AFB8949778CDEC0B49C300ECE87AEF205E335502CE71DE20DC34C2A2B5FC876256DC61B9BE39333E6244D42258814B252E28F617C1AD976A69CE21AFB045AECBAEBAEE39F18C4A5972FB2429338369000905A1C06E60723C48A085CCC214180D39D1012DE4C9503B639CCA050B1B73074968D7322880D96C341BF10FF9559243E6B7A0F641C542F552761B3A2D0C78EA169C6A61C181F143F79BC54C7E68C07D04F736026D5D3320208A70A1276787A93AA7CD50927B4CF24A11E56DDD18C9D0684A5A240A672EDC650B8F3B265CB5E7CF14585F4790169C9648BD0ACA1ADCA32651BFE268B9BCA469AA00DEF672BE0B65F3A53704DD81F6659A495D90189BE26CF2DCF9230EADC8226414ADB5BCA1E180D323A61B6FEC667C71D77C446FFF8C73FCEA58105033B03CF85E68390F59376CE6250C131205A8D6EB444AA622AFCA710E96C092777968AD96666B03D601D4215CE0B096F927E3822DF171C5DC89A306ED171E081070E8C947B3AB2D5E1FE94EB98FC8C4DD5D4FE877CE4E77FFC6BA655C938AD547D68DF5D7728F56D7AE985E7B094EB376CC29EC14160E52EBC0AE21CA3616CF73EDFE4BCDCEC6C71AE6B3A9BE596F15BF0177FF3D55366CCEF1EDAFA9209625AABC87170E7CEDD6EDBB6B5F42C4DD274C4495A53F36036EB5192321D8BC5D8F08FCED9AE3BECB0FE955776E89DD715A6FC9151B8162DD398DF31B790CF0C0DF7551A955426E3A532D546BDCF6FEEBDC7EE70D337F50FE48C3BA77736D762564FF7FAC17E2CF65D5FBCE3ACF33ED591CE979AD542263FD28AD44F3334418CE18E3AB9C707C84B43EF9B2C0E4B0D0AD8494739E2566FA1AB103ACD6A65CE9C05ABB6AE87CDB5A1325C0D4C57B1D072A2AD08B9245C274F8D6B41A019D18DD44C18E4ACD20356D29387FC7FCB035689870AF6E880DA75833CA4F2C3B8972858943696078CBF1E7FFCF177DC71079B68613B6963DB405FFD938D2C2940548BC55A73FC0053008E29FC3C35069654E48657A0C846A5EDB0C30E14F26AC82DD82CF51959D67958546D75CB2DB7C02B50F5B05248548A6A2544934282C8F1AC36B5AD585E39C16B02BCD50E70C19CE059786B72BDE15698226A102FEE38F4C20B2F18AB7B158727CC1AF96D083E67E28056025F815E2FE78472DB2E5DD975D75D71736953CCD285175E78FAE9A7E367D24F9A84948252E5B2CB2E83CB4B3B86E5490AEE3266C6B0D9E40A98628B3762296A1B0440AD0D45BA84EF7FE52B5FF9E4273FC982271B1F0FB70F5E20FC4EBB7D26BFCB8E492C38113E8DB3A9E02D77F3FF3B084BA82EDAA4F2F004F669258D75B91E02B0C88652E8782AAE519E43AC076C55CA65DC072F88D721F26D526A565B3FD9586B7C6BB7DD767BEEB9E7D47C8D23271A9E3075EE2A06408C55871D8EE7A1D523DC8403994B2E65C9CB3CAB47EF4485CD090C2D4A6A292AB9BF7C0AAD5DDB23E7693FE28823FEF8C73F3244260E7749314EAFAC22EC2B82E68898A3E36B8399C56960127C190F5E2AEE1B8FDD25DA3976FB503E9E3721DC71521096768ED2C9ECB3EB5B9D9B09C1A02287C7C010BD9B7C1E7BEC31E8D199F3B773EAC35E63B4BB98DF3854FBFB687AF65E07BF32E477B586EFB9EDF270B4DCEDD6C3CA603A76D8204A72F9224C90A80D51BC4B19348EAA3C5341332CA4F28BBB7B76CBE71687F5A2D348A54D2A931BAD555FFDC9F7BF64C2F5B97CC38D0AA08394570CC2AAC2AD5C7495608DE1D4BC94DFF2538ECB3856A93494CFE5CE3EF58C87EEFD8F19E9BC53AE7A7E6346AAA3335F181CEDAF9A5A3A0A1B3B90647E54B9E48D84AD08FA65CC7673E6366A0DBF1E45E476DB65F7975E7C3603199B8F16D44B67B68D0C1652B9B25F8B40CFD15EF170C002D7336EFC5F63FA4B25FCA5504807B0275C0F0A38A8357ABB66D44786B69BB568AFBDF6FEC6CF7FE0E78A5B1AE53097AE559AA17564E4264636597DAC285FB5005114B4E52F5EB2047E12565FAE216BB2FF4703F49F54C09A64B564BDF6DA6B3FF399CF98A4CACE24C00E6315809804212C528B564C7BAE1E0C02129A241186BF422060635070730C92511405F27A1516B24FAE63F1A7DAA06B938421F3F107525D68539A9B7C0B921892124436B77C8CAF7FFDEBC71C730CE7966F17C6E58EA9F12D32190F8872734EAA1515D485868650F2DF543ADEB1AD31CE702782CA7BF092E1317B49E33B4E0BEBA729252840F0CBA38E3AEAD1471FB5AB1FDB1430C5BE9BB03F86315D8130AAF687B009CCE7B9E79E7BDF7DF731142A8E49F6D4B2E31F34BE9589602122B98D29F9A9F2A94DA8F57524270941ABED818C23C62419ADB54B89A051882C0827FB047117E28F7DEC630F3EF8E055575DB57CF9720E681A0F12C28ED01BB5F8509F1C41C3C527A028BF3DE3D3E478707F58850CA56EBFFDF6D00476AF0F928D7142F7DB6FBF430E3904669D189B69B7DAAD7927BDBFD89245FA3A0DEEC3CE71E22B6F7EF39B57AF5E0DC1ED8C2FBF365685CCEB3244A6FAD0B60D933A7171535010287D88CFBBDFFD6EE8123E9705CA6269C0C030996BD7AEE54E80568365F0873FFC01AF43FB4CA872A59399E552029B6A95FA9B6E250F399D7E45C0DADC77937020D3B8E6EF65B4A902847B9DEBC5F3206C059590285C3006ED67D5CB518FCA869007A3C3CC45A1F5F3B39FFD0C77C3C26142701CF01642BFE3D13423F059B06001B97369FCAA9C093761793E2316B05FE1F7B324949936F106E31A5CC9A809F66D61E19E3FFBAF97DDFAFC6271F8EB8F9C6D52D58E9C5B2DF5B44CBF38ADECC2E5EEB9E69C4FDEF285150F5C78FDAD7BBC656933D34AE57AABD55C676B3882C3504C078E0ED41F7FF8B747EF7AEB9C413327B5B0DEB961CB607EA6970F5B038B76D9FBE9179FD97EFE922D7DDBF299EC687968D71D96BEEB9DFFFAC8830F653369F8B98D66CD3750F069E386F5C0AF64C352CD74655C5818AF0E8F42EA64F3E926846BB9E97A4E23CA527BB834E5876ECBCF3B9956D8E84D43F1B8237ECB9D3B737D69A46F74A4B3A3932278B8349A8BADB754261D75498AFA0D8F410AC4C82F3675860AA9960808887808EA5E88035A4F9BE2ECD3CEFFC53EEF5CD433B3305CD9D8E5E4263D2FE986B3F2972F5DBFE2DD4E58EEEE34A3556C95AE5A3062EA460CBB8C4EC1C484ACA3C81AF3CE935ECBB2536D6A8EB6A21A869DB85836F455291E1E5B1A67E4DF2082976796A18E30C10FEA9F0CEFA940514283A758CD214C92A15060D25835A8D205B241A93F08D1A2794A01C2321E865E5476811F70FC71047040585363771F927093C343BF4B4BC04037E750D556ACCA11631795114F715B09565BCF6C0A584526081C6641369D752A54E8089C323ACDC60A4238495F48F67054A8B29534E70DE3C6074CDD422640E851CD9F74D249F09DE82EAB6F848C242D74F4D38F7FFCE3C30E3B0C7FA641C4B14221DD74D34D9B376FF6E2D608545D7435DAF40A7F50AC8F65368C3F4C5306C065668E5062D4CE6B0A53DD4641D77693A9140FD17DB24349594E83D16E576E271554DF6C2CD2FC6914AACD146DEFAD49AF77ADBEAD26319665DFD8E952528548F7FF3F2AE0C4EF29D9D508DC8894148422E39AE38F3F1E46256D089BCA9B93AF540AE354501BD82AB8C9BEFBEE8B4DC2405698343FA0B52EBB9B368A2C153675666718FB9766B294BF824BF6A233BD74C10517DC78E38D4494E0E9175F7C3136AD94A80DCFA6F3CD1761A99F1A898B164E4F94DF0309421C291137DCFCCC16BFED6D6F5BBA74296603EE352F6385037D235C0C830F0A15EFF8C31FFE10A3852AC5C524C0C29F54798FB566673AB2C5F2E09838CC4E3A784A1318464FAD7A7E76E75E85D492A7FEF8989B5E67C24A04C9F27B5ACE6B2465F676F2D35105E6E3BF5AFBD60316A59CB898A919F11C5463BDE324AE4898FCDC6FCCC65F998FFF6B7A76DADFDA3433F38B9D606B97E78FD472AD886CD2CFC78669B934D295C79B14CA8383D974C60B0D344260FCB4930EBCC8D5A89956AE981B29D730D78B162EEC2B8F6E1A1A49A5DD8CE341B615BA3BFA874AA9F8890B7245D70F6677759687465A81DFB360C9531B5F86B7DF8C42E87009A2F352F7A33EC15104CB319891345C936A8DC2917D90F00A82403279AFFC0E0389E908251E38D919BFFBCDEA7DDFD49DF29AA6BACDA46637E2FD36F18379A8D7CC86E747DEB6DF769E89F845D2B97AAD39944D8DC977ED37B63E3449024E0A408ACD0E0BB9133A699A38484679ADC6F2C6F2A729C7250F5951A2F41F234F52C0F249646487E35BADEB3E32BB85DE10968AC54B047EB2ADAA508AB256196D964FE958BCE24ACAD21865E37666F46856AA1BB75D73253A04F5F316B44D4F179F815D4C659759ABFB2A951CA3231226EA6AA34ECC74DC29A318D2200696E91BC76A2820378F6610050B5F5F5465A145806312D26956A22B26AF9E1C6D29B0D7B4851D09116474A79D76A25DC098893690AD1BF85F512ADA2AB08D23A64D2149D829DD2844B400FA52A57ED252507B8E4B359196590A124711321AEE38EE0909A8E2285BEFF2302BAB77FFFDF79F7EFAE9D285D8F436A37DDBFD4D9CA850FF25E6BFED62B289D7CB3A0B620679E82DAEA2ED075327BDDE5CF8541F6594B5A1599C3D5624100F9ED6E2EEBBEFFEFCF3CF5F74D145B7DF7E3B7515BE48E4A1EDBBF32B6AFA2622377DB47D658AE11AD62DE0DDAFB9E69A4B2EB9844768D9B265EBD6ADC3B368594F9C2E1E1EC5AB291A6C5CBA339E49A36D18F604AA00831F76B293433CD16C92D96B2C34907C4DFCFC9EF7BC077F65EF2991D23100804132F703F58CF7C2357859D8B8980116C4639F60EA56AF5E8D998186662763CA32E68D703D5E934637E670E5CA95B316A5FBA018FD744416645A7CDD8C57305174B0C1334F824013077832AED34AEF70D2A76E7ACB7BDE5B4FF9A3950D737BBACB43954C9C59303157061D7F461D368C54467E35E7BE6B3A6698FAACC22E6B2A2FEE34AFA73C38DCAAA7765DB6DB1F5E7A6646A6586D543DE36433998146759E03CF369376DC20A2A60AE34A5FA7D9822636F5B0D54C791BFD46219B1EAE3773855C6450FAADA12A8CE9C832EBE99EE1D49AE9D0E92F8D2CF672854C36688543ADD6BA56B9E1A6E62C5AB46EDD3F7C33E608E29ED12AC791CA42B158C8E515E8A3FFA4F60638EC77DE792736097B855119A4C2967167D7C3CA19E7FFF73B3EB463E8CEF18AC3E5C1DEAEECE40C7741A6E85736BCF4C496AB577CC8A9435C2C0ECDEA7C7EB6EF0FC99A170930175DC130FE1E8A845DC838B12DAB37B91C12CA3D784EB018E8DED9544D76009C21714A090274746CDDF1CD7CCC78275B3F48F1E3EBD84BF22B145BB21B81E00E0F3CF000BCB7360E83B62A0F9B9FD5E6A56A5974EBD2F40ADEBA56BB58391BD411BBECB2CB473EF211D8D37445080FA29450985D0DE0E959A97322EFD046B23191E740BFB7535454900CAAF197A227A2F34D5D20EF45B3CAB4BDFD6A7421E8D5A87ADB2404FE6C1FA232C8D7C29C544BBC9A4D00398994B9B650B3131B1A87569A2F40140FE12A1CCD34E8651B952AF4AC948480FE0409CBA73149249DDF9A2A474B77848DEB598915C4FD7948A2E4C4A5A812CD8C9F13A9480B00BA0733006765AAF1937556FF1469ED54D75322133AFB6FFFF66F7FF9CB5F683E73BFAA0A50AEF0FF96023649350E11CB9C643B6E66122394FA86E6F039E79C73DF7DF7919DD14E5CB909A10CC120F690B8E22491D62FD9AA92D87D7B48D4CDB8C9873FFCE19FFDEC67505434E1F5BEA155FEA43E4EA2DD603A4DCAC6C4892B63694A3B6CC0DB8ADE160B8D1FB0DBD55CCC58296D5DCF2E66049F6BA2D4100C1B09DEF677BEF31DDC01DBEC90430EB9F2CA2B596EF8E28B2FC2F7C572E3DD172F5E8CB93AF6D863E9A541EEF0D0D2C05AB162054FAF9C001D5D4614699213CED6F41B701B71C6236FD44FE7325DB5C660C48FE58C51CC538CD23C8F0A48D2E9A14ACF899FBEAB91DB21DB31B388091C189DD5D1B3A91ABD8813BD691015E9461D15A0247C6F7E7AE8B9FFFCED439F99592F2CE8ED6EE536BEB0A19531CE6E73B7DFFFC0037EFEEB5FD4033F1614F99EAEEE72A91496AA11E01B47D20FDCA0957671B348D934C33A5EA9ABA3737379D4ED28BE3A5AEE888C96545FA59676A35E49D8E69E1341B4B06C8B66CE4E8D94719F46D3CFCC9EB5A1565A3B3CB860E1E2F5EB5F35F9AC68AB299778EA19B9A1B38B39BFFBEEBB094826FD0813584C164600B4667374A8DA72EB1DF33A8F3FF65BB5E6826C7AAF7C4FA36FDB70AE589BF4B0542372E2B58DC1355FBFFF988E0E53DAE66292536ED16FBD4617AC2C95E00B843590989DABA646E6D2A6145FB6BCB21BF54C75BAA57E6CF12B463F33BE9B9E6EE25A5DBCC47525FDC12225DA8BD22BD8B1CB972FBFFCF2CBB1DFE81AB27E8F9A1B5B5A250FF28019F3172099C7DCA6FB203AEC95575E31E3D94BE401E31A984D77DD75174188744C591CAFEC35352E868731C06487D9CA0268080D2A29DD8ACEC01E7BEC813348DCA8A62BB4BA6B689F98B858DCBE400A980299315AC256EC4A6E1C7F280BE1784CECBE6378B7DE7AEBC5175F2CF4B19482B18C0F2FE94B68E401DBC1469A93ACB0E6B6D861871D2086884C615461527D1026A4FCB67D61A68D1287E3093CF5C4134E38E137BFF90D949FEAB1E858D8DBCBB19898A6B93F7F80A8A5BE696B02E159BD60ED23A14D394D190353F40CDEE2FE6420A3F89BF47A95C7912895A911963F719753AB61230ACE3E6908FAF5A23AF90A8C22F0BD08911053153BACB1EB8678A34C92318D7CA998D6472C3C340EA8FFDC84E84AC6BECDD4214C13BBBA2AACC29BF0372C1D51EB721B42C28FD4BF89ED39668CB8B568CCAA445255E96D3751CC87B76295302E26E4505CE2AA9EE20CE3F0BCF18D6FC4FAAE5AB58A268BD0C5127F41D24759A4F93419DFF4A637915BF4D0430F65D13CCE271119F82E26FCC4134FE4F663DD3CE304B886751D7C4DC521594477D717FFFDA4D38F8DD02B1993766796AA8DB973F35BFAB7197F0CA38B616026152EEAC4D2CFEFDD5CED3AF8F44B82DEF91B47861A61B398CFCDAEE7A37D1AAD960F77369D72A302DDA63FA7DEF5F0FDEF5D3052EC0EBCA2375285DF98EA4D43E80C6F78C30E3BAFDFB4BEBF56628B85AC8900AD9D8E9B755359C7CB60724227E524B53A5D1DA395F240A3829D77E8473FF487E7FEF2D4B3CF556218573E9FAB06CD4ABDB5E76E4B57FD6D1536F4AE0B17BF71C19297FFFEF7FEC1A1234E3BF5B6871E28BB4E3A972F0D0E87858C603E4B972EC52EC211B3831F7243F973A4E3E34E5F34AA14249B9B5EB8D97F3584304FE78FB8E2C76B4A2FD7B299F48CB0674B61D2F33273B07B7EEFDC2F5F73887123A7B0A3683266FEC0D02678E08CB8D2C4145A5E8295CD2428076C452B480D77B8D800B1F1386086BE14F46A935D61C237C05A17C81CDC4A34678E556C638740A5F54D02ECBFEAAAABE05F42AAE06E9C37A681705B3812D467767686F14B7A75071F7CF0534F3DC59EDCF4F0A8A5043EA5DEB2C165BC8CB5B3B2573CAB3588ED5B1330CB383CEFC62A7C132B60426525FADA729AB6BBC9AAFA238F3CF23FFFF33F49D8A9E09C10243CCB61C25542B2E13041412B27451785D16F4A0FD199E14A76FC643B5A6D457C05AB43E39B9D0E14D1248A7372054C5C1901239A7DD68171A99CF1346C1CBDB1005DD29D2C6861328C101E9B657AD28F931041A876ED8E3BEE38EBACB33000CC29C41F04342B94B8C6FF3C08CB8B7BE090678A7A97F104313D71B40A3890413315779FA59025BC76AA660CF8CA15575C71D34D3731212FEE0E3BCED9A608E94192D504538491336588FBE06E77DE7927C9496C5A8C8967F2F52A60297EE10065540A34681BE0DCCAE484C230E0A17EFFFBDF9756E6B1E429B263326D4FA4C54DCC88321F6CC340CB9AA0505634924947D54DF6CBDA46BD4ADD68E5C82EA17EB2FB4C4F14617C47685CCC30E776D1A2455093CF3CF30C94968DBDB2078035C50251E84BE0CA5BC50D317E1C7876CDE386C17BEDB5D75EB445CE39E71C76CBC12624612CBEF2B9CF7D0E03C09E640A9CA79774457C2ECBFF8985A10CE2212A7AF35A6EC538F572056678ECEDB52AE99C694628A134D757CDD2F1F45DF6DAF1F9BFAC3641FAFA1BEEB8F4C2CF2DEA9A996996ABD56DEB0DF44F065AB7D5C4466D659D488AB78266902A1453E579DED294593552369D6641901FDD541DED82228EFECF196ED4E7747635EBB510DE6A2ADDD16CA55C0F66511ADA778CF3D9857E2EFB15CFB8053898BE9FE9ED59B965235EB26746D16DB9A55A35CC78A572FD84138EFDD5CF1EDFB47133A4FBD2CE99CD7A6373A3F48665BBFFF2A5E7292CB0847E6A6C1D71DB486955AAD47CE96C94D1A087A046E8CCBBB3088D6E288903A1E142374C174CA7BBFDC8F03F3266F68CDC36E808CF64B6B9537044E77C535D929D3358DFEAF7CC983118A9DEF9F9CE4DF5F2984FA9D0227FC0B360695D7FFDF5471C718449EA38B84B85F370C7778155FCD6068228F26CACC49C0C476E03FA5222F4505A344C18CE79D2B581C38469C74D98625D8BB294BB4556B2EA7D29CAE8BDD16F7EF39BDF0C056CBF5D2B69A1463B9ECA86F005DAC7AC9FC49F6EB8E186152B56906698981E9398B03C385CD6B6760B14F8F44AA980557A84A384476303B03C49CD0F580781BFE254C6B9FFB42A1D74B4EDDE44B2A1E524C89C72129244E68C9563A56CC72FB104E40EE2B7202D8F3BEEB87BEEB98725A6A294B0894A6C2ADC712168BB14849A9C9E10C7BA64C9123C49948D4C1FDA7AD796598AB013C3C65D355568C5491A8CDBB61BEFB0E79E7B3EF7DC735A27C68DB9BAB6446E03CDB67DA856B90C147911943486C806492F4F7DB78DD391961466436C4D133F9C7ADAC2302D2FB9E41236479A4A61E34A313CF0BDB0512EBBECB2F3CF3F1F2BCAE434DE14BF6762C3CEB5B72912F37A3E36FA9A475D89061D399C0D3AE51025F813FB3662C6F0570652789C680C32A9C31811D5B08D75B27316D41F263663D9478FC245B6243590DA2A4CBA9A0A5FF37AEA2746F9546C67924E1B3A42123D8A94D8C2C2367128DD2606188404E11991C1418A7FCE9B4D4F8DCF3EFBEC4350DBC73FFE711E691A67982EFC15AA973242DCB37C04B3C294B64CDFB4110CF140E5F29DF51AB66EAB6766F7E0C0D68ECE5C69B4D6D90977AA629264B9C200988A4B2FBAE9CAAB2EF35B65F85F4D3F4220074ED34B19BF6E72F96CDA7562551AC55BA18D3185BDD19F7A46C2E1B409AEBAF4BC2FDEF2B54DB5FE030E3CE0A5954F979B0D27866BCD801C6834E00167BC5457AB15E5838DEB19B897914F8C8D603C77D91B767AF96F2FA5A33E485EC9401B671ABDC575C3037ECB04AED34A394395C6B21D97AC7B659D1B9A19B97CBA565D347B3E1EF1C250BF29E66322722FAC374BCD5A269F87BDD66AC6DE4FEC7C777576418BB701186D48BC922CCC35F0F0BA7847AFA35E6FF6F6CCEE1F5A0F253EB373E940F9F949CF8B5B308EEFB4A27E5191D7EC999C97CE349C2D26B1AB1952A24146B8A2EC578A72FA52A48FA5C0A5E78045E1050CFF9088EA95575E512ACD86E74848CA915ABE7CF9934F3EF9D7BFFE95682365EBA480DB4058C6AA543449BF42F2023164C2583ADE058629C41D732B447153D4B3478EE04E9C73956BBE46B5111708A853BB58C0D8EA9B4F9FD89D563C890AA4433CD210E741F6927E33E264B4C979D4CE9C7A514817BBD4C52478141A4376829C6164D6C8F0FE9C49B9790C5AA809378F6A5BA6C04672E1AD0F3DF450F82A44A77EE73BDFF9D8C73EA6F24BFAB7848EDBC189680B9D79E699F7DF7FBF491A834358635E687AE0F130EB1E78E001AA19767467BADE4C08412BAF6E170E4D5308EF597DE21C8B9B97E1089E2EBC00269A13AAB24B1B133B8D82BFF6DA6B2FBEF8621E4E6A205C7CFBEDB79F7BEEB9DA97DAF19C7A762DC4EBDF7AEBADB0DA48AB349542659A9098EAFF11324DFDC13D0AEB89B10B913F10B327A400AED1DEFD7F57C078DCDE7BEFFDC4134FF00E782243AF5C26EEA13677D66E69A54A414D7890F48E549F6A7B3348E7913C96720A7BFDFDEF7FFF430F3D24F01773309C79EEE0894C5EF271F7DB6FBF3FFDE94FF7DD771F8C954F7FFAD3575D7595CD7F69E79E151CD38BD842CA1604824DDA90786385EFE4C488694B4133BC0E368932643CE4D0BE78C4F1C71F4F1E2E139B1DEC127FDA69A7C97CA1BC686BC58A3B93FFC4AE7930966F140DAC10B46A269DEA6E058D5CB6E9B9C16824BEBA3C6F54284D35FE8A4C93663DED9A7CC64041F7CEE9DCD85782AEEC5838B7BC764B3E97CDA5BC7AA5DC0A5A98BB8CE760967B23F6CBDE72BEBFD958385C1F58BC5D75E366335A378B3BA232B6A0D52CE60B8D72B5E6B7663A50BA4E4FAC143306EE2F1CD648417B6E1460AC362A3B167B7BDD8253F547FDE646535D6DCA94889942BEBF529D33BB67EBB6C1C5F3E70C6DEB87E65E9C8FD8055AE9549FDFDC6602AAFAAC9BAA077E54740429548C0227F0B9474786D3A9B46FC2B1363B5697029314A7D1D81230275A88FA825AB0D6647DCF2F9A54D9AFF7E666F5D7464C66F240153E1DC694B2DE2227BFBE54336E6B5690ED0BEA70F27DBB1C4351473A279030AC5927D2D0C6274B2FE244C0E686D326FCC1E1871FFEA31FFD889DC2196BB4DD3563C180B11F644633F345BD2261A850A22AC2253329EEAFBBEE3A988026E17852C3798CE4031FF8C0E38F3FCE30E179E79DF7D5AF7E951790F9875486D097D8A244C9D8205646D11451A3FA541F718C93749BB65EB0A14CF82704F29D77DE49042BAE676052CDA68CD5D81B13C817A74F856388DDAE52603C9DB8748643F0575CCCF0950DF25583F6F7BEF7BDB06648142A63CE26733649BF2301CAC444CB280BC306E262E2F5045BB949631BE519858276ADAE33919059BC783169B44C9CF6C3774471826171F6B99F6C68B8B1723036CF9993905E71465AE35B70F0F78CC46A6704E36984F1C3B265CBA021687110768F6761242FBDF412FE6AD38253766BBFAAA59D4816B5476DD21611A272D67818B4BF191755EBB1A950CD72F155428041B2B580B829DA40E78C98D1B9B1791E6CF638C7AA2877C7F700B0E142133F7620A10D6DA87A09C676F8BE61C24BC7AFE31ABC3E9686484B5C86D19E7EFAE937DD74138BD0C4E0833FA987B1CE861BB7CFC25CC929A4B452A723C2389945E3A32FBDF4D22BAFBC92C7D5667C14A1152D003AAC0C19A904DE2E36A0F00D121A3C4E38C6C03824CF2D06C64996374F3033C98CB04F48786BC637E5DE79E79DB10FB997B858175D74D1CD37DF4C61C70ADD975F7E792C449C0062D903FB9E7BEEC15410CFC2B7C67D60D55161E3292FBEF8A2B8E444038EA7B09C97D1020E862745FC246D5579749769B95216885747875C68E1E8267137A4E38E3BEE6B5F7DB023978D1B58FA1DE96C572B6C042D78C4E942AE65A25E814E100506CB2325D802BD1D79B7545BE41552AD3ABCDBEE7477BE39DA91E9AC36B0D8B051329566152EEE92454BFCBE7E3CB35C2DED306BBB8D7D5B61A63D5DEFAFE5331131D9F048BDD10C7369B790DDDC370ADD3F2F9D9BDD4A43BF0D9AE6DC9D767C116BE1A4DC5C6EB05A0A634D3C16D8A8D5A07A5B7E339BC936FCE8ADFC88C1213E17619049676005CB0CC74230EF3E668834A6D4B4D37CC2F1EDEB234C68B512F596883CA1A8D1442A939E356FEEE60DEB8D978F061AF8C60DA8A54AD55A696008068909C234FCF694D7747DE3846E26DD9D2B9686FBF17B2C4E3107332333522AE73ABB6BE58A13362852DA7A0AA9BA4460088284DB2237B61F62CB1CA65D79B8747068B888C30B06FA33CF3C432C08A5CD92254BB0B19DA45EB98DE0825F877C80018173FAD8638F3DFFFCF37877EA45DBA2A5493431EF6B2C1A3B2A051C81534E39055602D5A74948E8F8757EF18A2BAEC009E2B4E09F279D74125CC7DD77DFFD2F7FF98B195FB2CC6BCC148DE4692EC8BA250A9D8DA1D47308B77DF6D9674F3EF9E4471F7DB48DEFDA9E6121BDF15C4C080D14B233493FEEB8E38E34CE8456E3B6A497E5705EF06595C06EBFFDF6471D75D4F5D75FAFE709644FD1A6A88BD0A14E523C6E0F94B3CF8804AB2914AFB37DF9B6A40525AF58D698A287785ABE7C391C7C322BF1976EDC428E1628C51F06A98CAFE815E5A5B17B89CE15076CF748B8E5965BF014936441B8CF9CA9EB80A9D2C8F0AC3486490A79C53C472003137B61D22C93803D556A4DCC6DDB3B381CDF1A73AAF1E8C0F018532D292928B2595A45541B6C7B8039C7217CF2C927696629CDC919A3A3DF6696C29D3DFBECB3D57ADA998CAD9EDB5A268510A49C19FC950158E96C6E591D78352A507A468246B88489A782A136C57938FFA246C2D8F06AEC6534916F4B482B2EBDEC62BC23440CA412E927A1AA615FE34AECB4050B16C03A61191584082EDEB061035EE481071EC066C0CD7119742D1E87AF3FF5D453307430AA75EBD67DE8431FC200585ACD6D7CD6596789B755BCD62C07B0C36E26A198C7BC61244296C1D558B972254C408658281728DD047D8FCCD9D1B84676B7DD5E78FE6F9908420D4561F28ED71191F4BA4DE88130888A833D68C2E880C0C2AAB68285BD33B2E5C68EB99ECE46E03583742E35DB8D1403DCDEEE593386CBA567FBD72DC8751E73ECB1FFF5AD471BB5A6F9FF587B0F70CBCAF26CF85D65F77DCA9C339D3230D2040CFEB6200A8928516330B1204AB16045404054B022360615A4D81021894010F9E3C767024413490C2A1A839F28D2611818A6CF9CBAEB6ADFFDAEFBACDBF7EC3367D45CDFBAE69AEB9C7DD65EE52D4FBD9FFB89B25A50E927E90E136D0ED2D64879DF7DF77BFC91472DE2CC377125F8F2555FBDE07DE796FA69238A4757AEFE3F5B9E844D510B4AF84AD724E56ABD6F52B1D3049E6F0B02F33519A796D23283D76E13C5B114B029A20B2EDC34F91F35631056882D7EE7BA850E0D4FCDD8F653ABF6DE1BC30E99F58ED3DEFEF5AF7DADEE572CF96816E1AEA57250B2E5C2FD761CD981B763EBF54D366B9B6BE49E7D29CCB75842918727C79B767B51CFEA0CC3F6A6928A949CC6092EBA815C9752C355C06E70C814D8052FAF70E37A203E03AF86358345ABACB9EAA0B84F19C0A73825171529E1D480D5E4C69F254B29BA0EB81B930B8FB00939F13CC7A5EE11AD3AAD643A5D74D514B872219F69C1EA2CFA2A194984AAA91CDC9FDFA75CCB40B024370147D3D92D32A4CA27924BEA96CF4CEE17C2ACE81653D14ACEE30AD0DFD8F5ACA1FAC0073EF0E94F7F5A6026426184FFF05C482789F229919914A4F025004F8FAE40B91BF222ECCD959203A9082A95673DEB59F7DF7F3F5789C02FAEC5C4C02C1E202B5AF291A3405C33E2C9E210D3D3E71570CE6B5FFBDADB6FBF5DBDE7B4FEF033AC8A7FFEE77FC6DCC36E8269A34E82D4BEAA4D72493E85CE5D78B09F3CBEFBD9CF7E16CE1C9B841033CC1589EF32F12C9350AC175A43AE4A932D22F4AFAB7755C8BF078B3E73086EF45EDC481C3D469F5C266A55AD89502D2D38B43D877ECFB5B79AF9816B4A40B8A00602AF30328C5D0B122F1093A0CB32B65803A0EA460E1443B27C179E067D8CA173E3D5AE6DEB2E3C1112B984B4DA96F8E4E4934FBEF6DA6B21D3F1D8471C7104CC7FD64A31BBCC8813818BA6B0AC8F3DF658D6E672EE98E1C3837DF7BBDF65BF2646D49971BFECB2CB48C54E5B84AB1DB7F8C10F7EC00A51C6034C9E20307923454C13FECA7ED5F8962C1BBE1D197FC8ABC5C665EF78C73B2EBFFC72E5087132EEA20884CB71A6D8D29C204B73AABF7EBF5C0A4D9CC0CDADD87CAD37E68561AD028536DBEB28459DF4A356B7FBE7473EEFB9871CFAEB7FBB6B72E3FA7D4C75AFDA523B479D7868A439313BBD33996A56862A438D7E16619FEF9ADAD5ED77970E8F47B3D1F0F0E883939BA6CA95ADA63B323EB67DF3B69EC92A4375AF51EB45FD5D3B67EA3080FC465C0D6702D3F56CEB86A89F64E560FBEC54AF90E6247F1E1B199D9CCA3B01FB15BC826D6D177A54C096CD3F7F55D757231104A4D66229AAC50EE5265D8BC7625FDADDA52B566CDDBE159EAE094BE3F54632DD3671543359DD84555BCD15D998BC1F42CCF5D3C42F079E7595BDAEC926927826E71EA91A6FCA78CD469385E3AF7EF5AB6FFA871B43DFEE8D566457E92DB7DC72C209276055101960F28831960A991C842E36BB43C32C54C02E132DABD4F0578AD31B6FBC11BB403A8969115ADE2E47ECCB5EF6B2FFF5BFFE17B721911F0CEC8BA990874800FDF93D7F2878797DF836575D7515AB89B4C1E98CE2FAEF7CE73BBFF4A52FA9917CE0B47BA1FE537F52CA1995EDBA72437A648000CACD2E317394E63C8F0C27A865AFAE4CEE39D6730BBD250A3FE3F08EC993E6107DF5AB5F3DE79C73C839484F80CE2ECD38551BE12B78F7ABAFBEFADDEF7EB7E7C663F140ACA8D198AAF889216F868E212C30850C76338EC10427EF472F84D10CBC27C6FD8A2BAE20391CA7CD25A31858405C5B6E1ACF35ACDCD174516D302EF09C981BFA9D6E1B635338E2B81764E89D77DE49EA73BCA35B67C66970895A7E2F17B4D6166E871FE876D35E6110292B1A6840C4435C9E75D659F8F994534EB9E1861B5C3A0BB5F818783529666525FD829475B7CF43231167C214D8B0610345394D30DCEB231FF9C8E73EF739DA0D34458952D9B469930C404EB178E094B01C20B472E348AAC155F5B64A9EB0A3BEF39DEF60AED7AF5F3F5041CE1166EC94A93219C82AACE42391B9825B459D2A4411BA7091F010DF8D080BB5F499B4C33958819C5F329C0F406094A9120F3E4302AE39C23F9148047B950A9B76D5ADB7DE8A3F4141624DE2649187E03A7830165B73D3BAED9E38B00C9F240E4D37CE87B980BDAAAC2749A0B29CA99BEF88CF396EC71C73CC1D77DCB1706D98025BDB1C1EC2644D4F4D0D351BB16D6E1457213733681153F24378B456BD51E2C03D8EE2154B1AFD56A79E999571704038BC14FAAEDFEB9856C3349AE5E1D84BDA713F2D7BF87F269ACD2CAE1A0E56343E32DE9BED8E8D2D7F78DBD3DBC3EC89B89D7B80B67B71CBC45BA3E4CACB2EF9E8FBCF5F39325AE9C4A5B1D187B76C84A21BADD4E10CCE1808B5EA8E288FBBE6185E93B3D6ECDAB1B31FF76B8DD199D6AC6DCD084FD8AE43DBF6C1D6EA9A797953EC4A2C6FCCCE9EAB30161E0CE470D8B9561935094D189B74C9EA1513DB36C371F5DBFDE526AC59DB25AE1BBF1178419206963D1BFE7000CD9BF8516875AEDFCECC2E13B76C80C18397FB7062D572B539D4CD55FBF2E5CB2677EEA8944A7ED9FA4FD0FD5A6CDA140C3D92AE87DB59EE9D5980F6D720B846AA37BF9B35332FECFE0BA30DC290A02157D212E7453A49C6815D6A462A08065758A6ACECCF805BC59E28B4FFF00C6BD6ACC15EA0F52966241C471F7DF45D77DD45794B2D23D3817A1D4F7BFCF1C7E339050BA51C7033E27842B6BFA3FB3190DCE475F02DBC32BDF9D7BCE635FFF44FFFA40E572CA3672A5ACFA69E2EA6F0715D51469416398FA9C299C32666199F63839343D42512B8F0C20B593E0341318737A167C641E11B320427D784D3C93427EF4D96280AF4A2D14AE6A28B0579A7EBA3A7A76E9010971922D06996B37C510A602DAA392E3EE1603134441B9F607453444E3E991F449D31C32171E626CFC8F1A4EC3577A95A5DBAA9E23D80C8688551F6E1F531CA9C06A955FAF1344DB85EC579229C8837BF0C7A602F713A69AFB94A7AE1C118039E8175E82C16C4879C32FCCF96D10C8393A380349F14DFF8C1D66C14C5CD540622DFF08B7E41320B8E3AEAA89FFEF4A7B475682AD2EC50F52AD9C7DCA8388697FD91948C77ABAE7129FE89CA12E6028C062C036232F1277E5DF87CB380FD47BE2623662499635A08377271D7F8E1B5AF7DED2F7FF9CB071E78209BDF40D438C936E242D9CD90A1721A55FBECB30F7319B8F2F5D75FCF8D4A1781611518C2B8C2CF7EF633D90ADC3E620DE33B1276C0724C326131C46D722A4ABCCB49279DF4AD6F7D4B4AC5CD9B487E2902A606E92CC0E344674E4F0E9AC5E5EA1CED7ED4EBFAB6097A56B6582ABF09E720B3BA815D054D929683B056AE64EDA9343378A66706CDBD9360D4244D531EAA37A34E8AF3BD925FAA56A67AB35BFA3B7C13AE5AB67A3BD475AF6B1B1445A65CA94F9B6C53D6DBD89FA995AAB87D278BC366B313645D93B4A6BA4BFC60556508BF6E9C9D5ABD6AAF5D3B26FA513C6BFA7EB93663D25E3F67760C4B78B5FDF65D83BD69DBD20D2F99989A0CAB9538E9639D85E552D2EB873E14A0EF5684AB28F37F1082E6A453118A1827809BDBA8B5DA336BD7EEFBF4634F8E19F327ABF69ADEBC156E38E4572D4B4B990D337B790328DB9C31FF87039205EBA36BEBA4FD20F51FAC85D3DD6E14949A4BC7DBF01A33DBD2D6FACFB1DDF22CBE17DE021EFC95575E79F6D96753F6322E95168DBA17EA5DFDAA1967C617EB012B4D512EE3C08B8CD3AF1DE32638982E2BC8A488EEB965549633208524A6A8F90439A4F3FD8637BCE1DBDFFE36638774EE21B2D4E8D66504931251C1159E8D85F2AEA6304EB7471EDC41F25625914CE1E0D1EEC7BD18E5955783C7C393E0E2871E7AE8FDF7DF7FD14517414DBA602E53F8BE7C2FEE383EC669A79D76DD75D7A9820B87C0D80CCE316C40794B267C4A603BA0071C7000A4366416B3D9260FD313B885FF2126F094129AB8D30F7FF8432C4DFA16C46A335E2FFC9E9BD4A44F8CC93EF7DC73BFF18D6FB09003CFC759E7A4AA2489EE173B019802B38E4F582AAA09F60B166F9936981BD10A1A8775C5143536B81D7623633BA2201695891BC371BD9C3D705913E88B0541D6305C47A5F4AA1C10572AAF26E83C71714CCE2F16E276DD2055FA63D10885BEF07CC643A0A8785941FE682AE905D9E2C32D46A49AA725EB3B2D72DDBD44E5C1102E96111521277A0000EFD64EB846AEBB93B9676800B152D6388453A6E08BC6F072E8545DE0B29DB8B92253187CF8D30B5EF082871E7A087B43711DA9524E991BA1C5DD7105C63C9883E0EA12584C91768D8642FDB4E83FFDE94F3392C62A405CF9AAABAEC25FEFB9E71E2CB6E73FFFF9EC97255E2DE5DBA8745D2758997B06F0A9A1614713868A9114C30EB3CE42086AB5D01897432F11F0BB005AFED9D8F8381CCA9267A036E071D74B956178F0ED36746AB954B6A8E624AD972BA343C3FD899D2BC6C6D25D536371B2CA9883AB2BCABED9DADE32EA2F85CE6B47ED69331B9AF2E8C8582F8EB6B5B6F89566EA07B39D7625A846704D479A8FB6763DDD6F57AD2AAD6C897BE530881BD51DD3AD5A6082D83CA3BE647D7BA25AA91EF3D297FEE4AE9FF6D3AC6DD2CDADE9AC54EE477D3F4F9456CB15965C77DBEDAC54ED45FDDA50B3D3B24B25288552C0EA824C09BBE7E6287B3E709137BFF9CD9087B06569C8C2BA6BD66BFDE92988F0B5C3CD787AB669AC5D1258F3C5B27AD5ACBF6E43E47D9345B0FB31B0B93EC63668E52AD9F64F34D96F7CDBEA78470A2BC3AF2C59D26BCD5CF8C98F7F69DDBAE1E612951B30BDC59052965329291F21BAA4C5E48664A9F63BF60E59EE716081EDB7DF7EF058A88059F04390A66C65AF6097649DAE4C7FD5CB0A64AA6DA89F07961CB120A6E82084FFB18C712FD511F064BE9470B20338705E5F1BD9CC27BBC5436277509EE3FA37DC70C3AB5EF52A533016F08D4CEEF8F15B64C8812E902324D25CB91C5C007848765BA10320DF92D711B284D86CD620402DBEE73DEFF9DBBFFD5B16079F7EFAE9F006714D5C0A263BDF08E7E382840D6155CFF5C495EC8374A6EAA26C65DD180782A145A5A999E3249938097B39F17C61852EF12D5C13EAD3CDF3634C0F3BEC30081752B6EA43B57038E69863EEBCF34EB8EA9FFDEC67393A74C4DD9319EBE000519E2A2AA2E6B549D1AD889A80E0856BAEB9066684DB6684D75433064642084A5C6C03437D624CE974A679EB2E46ABF015865C244C99BDC087A41AA7F6FDF8C73F0EC1AD8B0F04543D6F2E37EF26C8315BB80EFCB6DD3E8FB2ECEE8157F8C0073EB06EDD3A3A85787D2C0BFCC0D123AB8E8C38FCCA56D51C19A5758DE36552EBD04B8092C04EE6E6D97FFFFDB1C8DEF8C6379E77DE798CAFD2FFC06E8735C0D589D717444E8D29F5E20A2B310CCBADCE44C611471C71EFBDF77EFDEB5FBFECB2CB18ED906BEE3945754A41E1A6B8B5AA7A589BC8EEB0DAED748E8520130A9D2922F20FB8F00AC5E759FF80EF721740D9E395C94240E18569C5C57FF4A31FF135F14582BC7435D62A704C08B052ED0AEECB07738B91041363944C6005229F496FC91C957840D92DD4356D597C6CF76FB91447117CA2D6CC6C35B46AB9562A37CA55ACE0CC7665B5B8212FCF0A574D580E4B61DCA958CD12BDA0B97ABC9354928EAD3BC25F4C10C570E44AE54AA907311DDB478DD3A465A252B9D683051394EC88371B8FB5279E8ABBA390C2F591C94E2BAA95B7F4DA49E0A5FD6CB4541A8BBCB0D9787476626973A45CAE6E9B9ADA9E74CBF5DA647BAE23B597992889421FD65E0C153E1BC336F257AFD967EBF62D51A7E38741DA8F1882A6352681EB96C9FDE107EB732013E457CD6109CB7EDAEA8D7966EF4A2DEA76FE74EF7D9EDCF8D4B26AD8EEC6155BBA64A3D0560F990C4E4D025F374EAB78A234EB5BAE1483E72C653636FD5439DBD84FB75BADEC75C352E67B4116A791DDBAC46F13C44E343B45AE024BCC41B081C742B9A44CE7801CC022C7BE83B0D250B0D7023E67B7793511C2412300B7639887E7B31864E148064587A5AC206E33F381C7DC80B8147CBC7FFFF77F979948AC0FC1CF10082CC42276840B551141D991984A7889F7DD779F2960CC4C16B046068FA7BEBA7C06C5CC4920415143E7818122BCEC05175C80DDCAB0A8A03FB21B781115D4D0191BA85A14653421D04A8C9202CC14E12846AA0443C68060CFCE159A7250B0B7F10EAC1F5717238CCE59679DF5F9CF7F9E74FC50A25CE23C59B537B896C84507EC3297BE4A9D8A094CC5D8B10F0C1D2642D88D037C200C8411C8C021D756F9AC8BED92E582A54691CAD4375706C1B74C55322DCAA02E3F24A014DF2586C5E404A182202D56F6C3E951D19B29AC3C771B7395244E5F20282D169BBB3D3716469E3DA7D2CE2F1A606064F0762C28DAEDF3900E972153DA7A18C94B2FBDF4E28B2F86F2536E090B82094B3C15B3417811CCAF48425491AC74382D09176A81AB3DEF79CFFB977FF9177C2E51450388D97405ABB9A2984F7AE10B5F08779016006E01B54D675DFDE35CA9814F04B9FCD6B7BE058FC41489B181B8BDEFF445760B0DB95171293CEAAF7EF52B6C0301EB8805A3E5CEA6BCC428644E6B6EF174AA73254609BFE26A3FFEF18F8578C77AFBEE77BF4B8B136762C0316277DF7D372D2D2FA70063888F5639C6106610EE082BF37BDFFB9E1B3A66D8F9E69B6FC6B7700203517C5416C463103014B045CE39E71C5555724CF016B838DD1A3E3F5F3071DAD5D91A92219B33EA6027964B5E92667152836D1D94FCA857AB59750EDFD7C6A5FDC040A9469D86C9563497859DEEB357EC559F9CA942C7FB593F894C92750C947150F12BB65B12E13F590CE59C95C34E924C745A1D93F4BCEAF672BA35EDD4A36CBCB164476BD21B1A9A30FDAD33DD914A58F7C2655DAFE3A53BB25EB55C6F3487B74C4D4E65FDA9342D57F22885C942ABB69266A54EC4E9CED9767368E819871CB4E1A927B66DDA54AE56FAED4E2908A324AECDEFDC2556A33F4A01AB3C0F73040F81A1601B7D29994A6296A5E6D091B1646A177CDFD192D789B2A60931804D3F2C9B141649DB24ED3C0A1D546AD50C464A1AC1ECF132883C6CCE304AB79A682B866964EC81A9C909EB3087397A2BEBE5BD7A1885E29C62B1BDF5AD6FFDCC673E030314BBC6E4B5820CDE2E54C09EC3A2658A748CEC0F8E0C269744981008F0CC145262460F8B0A6E097E86997BF6D9670FB42A125E929EA829786179D301C0CA40B502E93669100BE1A59A284A15A572C53AA9830E315FC7CC8F6EF210710D9F96704BE14E54044845C3740F814D6494749B88F367D9CA54D814957A5321CFB5EFF03FE5038617D751D1E68B5FFC62080ACA0D4232198A27669BA8146FB1058A1161C527E3AB546F70AEE156D3F960000D8636CC6D9CF68A57BC62FDFAF57050F0641C083A281407D4B87461053CE340733A93A287E50025A10E7E912549A608D6F1EB8CE305F90AA6DC812274B3111A325314A767452F07051C08CDC7FF2ABE5403BBDD1E5C19DAF32A5CE12DB8E0B8B6A8F0948413270B979752D182F651F1739404B7A3227753B3D2317A0002978C130AE6AFEF7FFFFBB1A98C03EB38E594536EBCF146FC153BED965B6E814DE092E852078B828A6FEAB6DED48AC7E2C3B7941B6634C2E4160C16314BEB9483A127CA98BF1B3A1E283370298D8484A2534E624B6D788D83F62D5BB6B93010F1B72892264EB8852C2BAEC5CD2C118C2A9CACF407D7EDDAB56B69B5C858C139FFF88FFF8887F9D4A73E05F3F6DFFEEDDFF045B6F29611C3D0911BD663BF3C1101B2BE93402D3E3C09CCC9C52DAB42F5577C546A08D991CCBB5F75D555679E79A60BF1E33A61FB1D966A6C7AFA29B88D63F53AD4F08AF1A59B366DAC42C6A5493FCDB08BC66B43A5D4EBF666567AD52CF06B5EB63A2BEFE755970441D78B27B35E3931BDA8572D55866BCD89E91D23E5E1FDF7DE0FFBEE91D6B6A81F25265E39B64F36DCB8FB8907CCC8F086A99D4B8DED48581F1ADAD69EDE81F12F59777BACD698E9B7EB263051BCCFDECF583FB1637D6BAA9F076CB5F182FC45FD6272FA491696CA5E18C03CB0E5B426F5F2E46B5AAC224D2586F7FEFBEFFFA315702530FD38482D242D815982D14BD84E3E1ECBCCEACC5B05399BB36459C4998F9F6DABA69A0D04D8C5D0EAB6E33C2E5DAF84496AE9B3922C2732F46CA41AFF6F8D92E92CDDE9998992D9EEF9BB305236D65031DD099B07F2E0F1670916B06F22939A3431D1EFA60F4B05EB873D72C882C0054999EE15740B02D5AA8589BB9DA50F887054F53925153F3185F1CAEDE652BFC545A76152BC512078F35B7F7A05FF149FCAED21418C950293D2DC94C07C1196BC534AAB8C45958A8C35B2DF06AE40363197C15E0DE629A9DEF18E775C79E5951CC00F7EF083B08F25737865EE2921763D87127140C64A40B92FA5B80B4D843DF40260B60E8F84EDCCA1833FB6A8027639CC3876E4C4E053AA2882B14D3F6FD84E174A076D8A534F3DF5AEBBEE6234831E123EA77DC1E496B68D8B2C5878D09F3085832FD0B28AC3A8AE88C275096224B6CC828A759C497F5AE072759DE315F6E001FB4E1378F9F74256B3CC0E0FECAA1FCEABEBB7D124C499E444952EA10A570458D84256827160D3F9A48FAE93ADA6CE0CBC93FA4ABC685EDE6087F7C56AC66313C8F6F18F7F1CE6365F4497E5EB08DE4C25C1BF62FA5EF292977CFBDBDFA6B1E2E632156330F3A1DD6E0FF0CC69652A1C045E8D0D94588426B6135194C88AA2294DDF5A58B9CC212DD721F4A3571007BA3D15DC15E22D20C362F8449972AE1606B5DCE5075715A60C24DAADB7DEFAFDEF7F9F196B1AF58A96F3CA5FF9CA57DEF39EF71027C201C1CB72CAD4E191C3A255A1F28FDD3E274F26A8822DAD58BCEE0E0293204F3DF5142FF2EE77BFFB861B6EE8F73A2BC7976DDFBA75DFE52BB66EDB1AE41A65BFBDF782FB3B3B31E5C7E9587378E7C4B6657845138ED5AAFB9787F6CF2AF57E34D19B99C83AB5D072A78C0E0D57FCD2AE1D3B5B597B456D59AB33BBD1CC2C1F5ADE8962A882E7FCF931FF70C7F736A6DD5AA53E6641C2DEE6B803DF7A479A04CD72DED7A1840D5049824ED25D36BA7253AFB53D8DFBBE813668158FEF73064D118A4CE16397FC52D887A9902BE0001A2EB3D06D39BE9CA9830F3EF8A1871EDA830DBDDB230BAD3550CEEF6CE3E4B6D5845F35FE5E266D1A6F8981CB9BD60C6942706F534F4C1EB1B70A7B6E76724AB07ED485EAC43F6E4BA8A3B23D2D4BC3720B8E8D4961876E4FCDB62C9B819F1C5412AF63515A360D9017DE047E8C8BA5F1487384C820975A475E8ABBF25DBF5F5AC10D1FAA5894BB550241EFAEA01D91C02E57B30A0A241918FC13A3962BD35C49ABEA5693DBE534057030B32E94A512CF824032B4CBC58C27C187DC1D8CD5C91F80AD79DE79E7519AB1FC928E0461281C0A61189552E4876EB11337B571DA8173FB53D39BDC1AE668BBC93E9527294E2EFEDD81438871EA9D97BEF4A5F7DC730FD4DFA20A58834EB792BE822BDC5D55C4E116F7105353D4F3ECB443D837F1C69C3C0CD65FFDD55FDD7EFBED642726029636FB620ACFE43E3E2ECBCA6E4659C5F0C0F5648A526B97F1CBCC8FEE425B6779DB09B7F649D5C6C42A331439D0A264E180F2455CD5828B93448CD911D97A032A410774DE05175CC0CF99181601C84273848A568BC0A58C5EB97225843E17254BAD7011B7CE585029E5FBA99EDD2837AB78B94B55D8CEEC3BF4223E57798F3A8B9D7FFEF9EBD6ADC3AFE469E30650E725E36871E300DC5CE01B17BA205A0C68AB965A88471527689F28B9C28087B8DF5C334BDF723B74F1D09499F9505237AFCCD1633DB7A20B8C81A705BF20460386C8CD37DF7CC925979C71C619EA91A5F839C699E74331C35A35B90B42F403CB18146B21D49F752F038C578B190A0A380BEFC6783E33BEDC959C534C2EA966B8D12AE57066721A52A759AE34ABB524EED1C5EFF5FAC3B5FA4CC7160E0D79A5FDFD4A3F892002D6969A0798DA5092467ED2AD78BD08FA0F9E56258DE24AA9BAB5BB65993F0EE768264CB3209C4E7A3BE3CED27DD73CB4F1C9569A34478693A989FDC656ED9C9A5AB276EF7B373E3169C5BAA9603326D95EB5B1D00BB3E1FA6FB76F793AB19E0E061A46A897CDBD2F75307EB5112328B8B064A09FB218969767523FB5DD15A1AEE408D2BF81B0DAB061C36206F4624790B1602ACD3C5C382B67D938EC0F533AC42481756D63DF6A5FAB803D7AE6293FCFD5B017E44EAC9FA4E974DF2A60EC372EB89299F380874B96D9AD9F669DCCECCCCC2693EE347EDB0F770691F5B3ADC39D2F3C1AEE69520AE716ADF013A6E885EC3A9DA6083B73DEE9D530E5C19F6172BDF39DEFC462A3CE23BE048BE7D8638FBDFFFEFB9F7CF24905A85D460EA6392863098C70A519A3F4A6D0DC8CDEB9DAC1C5C1098E40FF9802C72D51215C83D574ECA5815D400084902838E135AF79CD9D77DE29761A355BD44DB5CD251E193A655D8C1E46E54982569905A55C94E1A6283772215D9A0853F0C6ABE860B7EB2A2DC8B4F975C18A1755C0445D2ABE4188B6DB7ECB38559B8CBE623E203AEDF2CA1D0B45ED35197C4A2566082A7103477B38C43F4C179E23C5FA19C83B11F57DEC631F834A2332CD155B3ADC20955770840A469B16ECA32C2F86A85ACC20088AF6737C29B1102B96AB5BBB9D2977FB5E4C31BA3539041BFB45C7123A3A6C9C878B53831E78E0819842D82EE2BBC05BFFCDDFFCCD37BFF94D0E290410B6872AD69532142728A3580C90B2560783C66D893FC151FBE217BF484A2077D7B1B4090FC60167BE44AC55228210F3B8147056B4B976C3BCA6003A2A5F457C2FA1032CC2535C4BAEB3E0F703243EC1FC5648AEDAC6F5857EE2AF1CD5C51873082553428ECF4FB30C6F44CC94F6959C69BCB8501E7C3CE945ED7C5E47744B1C40CEA90B23B8E9A69B4E3AE924F6287451AF0B3D602C54CC8EBA364928935A849F63A7E081699CE17CCBE5E46561E6C5FDFE58BD31DB6E35AC291FCCF6FA4B4786833CAC0ACDFA8CB56B8F688EED9A9C4CA6269775B2D5ADB41A771393C5E5200AFD567B26B21EA93978EF839FDEB8B1D9B0D6DBF6A8159782C9B89F342B8FCCEC5ABD6CC5B61DDBBB59BA7FD0A884A5ADBDC9BEF1B799B4346CA541DC49F631DEBE4BF681A2DA1EF5EE9DDD8A678DE056D69AD3390AC6BE6CF63B1D9CBF7E804D9BF95E6212AC03388C5E9AEBCC22EBA9A9E490FEB121E83C0AE763E19A1043903612B3C694F70EEB6BE2A92467FD8873A71C7F2C9BA0641B4EF4E15B94AC269E9BD37E1CB5A27ECF967559054C5C4329270E817A1CF5E10AFB1563DB28438A6D31E9D6C09F098347A36EDECEC22451CC27F672C03ADE902FA2FEF3A24D35858E498BE6015484A6700FE40D9B3C656BE6B70382B8802B29435F5134D60B3181825F193F736BF3B89CF02BA4CD6DB7DDA69C20736494F31417ACDC633491CB9265AEDABC94935CB41492106B8F3CF208DF6E808B868A466D7D49FBF3A1FC90327293743435D45ADB14BCB62ECA5AC6BAA8BB5C40098D6CB7FF8A3062AA86324E887EC035750FBDCB00E9D89E3C600A62E25328264441EE153C20BA250CFFD7BFFEF5B7DC720B240861A8C41ED349C7AF6AC54311A3ACBB8ACF2079CF3CF34C7881BB7D9E97BFFCE53FFFF9CF59A3A6A025B7DC273EF189CB2EBB0CB6D2030F3C600A466BB7A7BD2BEE21D148F8677206222E56E20F4987C4FA7D4CED89279E78EBADB7BABD35DC83EB8619116926FECC77644D1BCB275CF96B1644C24D6149E12B64936659B60B6D50352DE7EFE0830F7EF4D14761BDFEC77FFC072B6E091561905F8E3B2D4DE62764FDA97088D837BCFBBBDEF5AE2F7DE94BFC2B5E1FDB529509248CE415B8DBDD7C244E60D30BCE26C33804E8BB0FEFEADA8583E08652A5CCDCA6DFA2A815B30F7FA5AFEC06C6077C5C5E590A5866AC5C2589A701C5669CCC0B0D3EB77DF79CA42E1231B4939807A141C0A69634BA391A98508C246C798A332C424222655FF34C358A60AC4875046E39CD8002F69C16D4E4E7622B1B21FFB920494E891FF03F79CAA03261AD1CBA76ED138F3F3E3E34323933550F8217BFF8C5471DF9C2CB2FBF7CBAD74D734DB37F9E911D36E62033F44CD3586253B769BFE4753C9B23C88B57CDE1871DFEE8E3EB3102ED5E7BD6F32AC3CD0D535BB35A757B6766D5AABDD66F7EBAE6056B4697857EB06CD5AABBEFFB3F3B4C12D62B9D760F0F7048B8A4D91CDED59EDD94749F4A3AB3151801F90C96429316D08DFC07CE53E057A005F10F0AD85001E739E0A470A794A8536CE08F3DE0FB5ADCB74D2CC7B5C81C68FC35616D346ECDB564F24D989A6A66EA59A99285BB4A51096AD778509C14E2BDA8DF4AE2BEEF41E3F5331F6A38B317CB2A5EEA7BA6969846609A5EC986FA53B3CD4BB785DE4CE0FFBA1B11284046042F57C05032E57A8DD4BC6F7BDBDBE0AA42065208A84E495D93195CA4FBABD21D799C5FFBDAD7205DB9E9C4FF4A35C6458ECB5232D7F28346244E7BDEF39EF7F0C30F63211138ADDA1E46C5E91333AB18E4BDB12931F07517CA1A14CD6654F9C9A21D8178F8D6C27C915A00520E52880F29241404026414EB022869A1386891301EC941D0A5284F20DFCE3DF75CB88862D35B4C5372C4249D549A2CF8957C592199702F0ED71E889B9889D756E50CCEC1CD1653C00AA341B35E7FFDF5C659E2D2FF2E848CA0127DE8F2F2133B278629A56CFFF22FFFF2273FF909F4874B64B1DB434E1B5D22593A340E38ACA4BF27BE80C431D2BEEE7B51F8B227ABDB4DC5EDBB874F588EBDD8F830FAE74A641777670A6233BF68A820BF7F202DCDC9A0FA67EE990FC3822522E528FA5909A3BB93D89265CDA27D21AA99E790C9598A5093A29839D3A8A45FA6FB4EABEB95AF7CE5FFFEDFFF5BA4666AFA96395D23315669CE688AF33192471D75D40F7EF0032A15265C99801908EDBA0437667E5E40B84DFA8558D3981ACA089712561166F6FEC42B10D6C86CCDC2ECAF168097F7A162E057295EAF202B308E85C483C2858101ED408A3CDC14E3FCD0430F99221A8F7370F14D9B36A9059E0A973114F82B06193FB0185D605733BF9D38BBBB88AC83E258CC097B0841631C706B2E577C0E517BFAE9A74B164B0FF12E948F76DD6619545F8F567958DE7FAFD58F6D78020371F0BEFB3DF8E413FBAE5C05B778627A7A4D602331A341F00CAF7E485A1B8BB35ED29B31BD96C94A61054E683F8997AF58F5E4D6A742CFBA3B33D5605777A267E2D05422639FB5DAC869DB6767F65EB1EAE52F7FC5F7FEEDFB8F6DDD3C1DF5A03257941A2BEA4B8252B879766A53BFFB74DA69875E2FCE461B43D3FD8E542FFDE0B94D175423CC0C3EF3AD6B0C1D39A08083A2296A5234CEFBE3B42F94A4CD38FB967212539398B5C6C04D1FF5333FC8F3E19E2967A69AF8E52C2C9B70A26C5160264ED278CE4634BE078371324BE801F7AC176B9FD03AC1D87799698656014390CF2609341E243796D76F6C83870AF64094C46420F1F216CB2426330ED10A0FBEA66C2C3746C5382773B4F28C59E1C26546C8959B64D11709AF1162115F24528746B00BF924B101A3E28A3C919D86F50B0325093C58BDE9C2579596C2328606F9C52F7E811F18D956B28C2E9F2AF509FFC4BD589527AA1C6E4FFC4FB14C1E24314F888487BD70DC5A292F0748BBC17C8530454B3C30C85E418787FFE1AEC0205898E4720F8E86FA5268E41755C05FFEF297CF3FFF7C42CEF010D75C73CDBBDFFD6EF53CD069CCFB7A05288EDA1123A85222C265692C08A286B7A5A6749B3A991CF5EE2E32F7707BF8F07DE04C9C72CA29575C7105D5123E616F73DE545C0403AE275EEAF6DB6FFFD5AF7EC5CBE22BB82029EC797D2275BDA265E662E3E37253F0EE6EDA6F283F1890173E5997727FA046917147C1C19A131177F0FA2AD0725932F4339F0737FAD0873E74DD75D7E11970325606AEE37E8B7B8C53C0C21B3CF03EFBEC0323D7255AA26FE7153D77613FE2B27C18BAA45A678A03D3F3A6D017F879C0CD950A59F8A116157D4DD8AA78363CBCBB5E79F0571634BBAFAFCDB370904D5EC20111867DC288AE9246EE69EE411B9C0814F564C42261FAE3C8238FFCED6F7F8BF7858CA0A1ED8A48F599D01E810A670E8FBD9258F84816174E07458CAEC690BE48825C6CC4C210B49255183AF9E26C77434D2F924B7678A5EC181D199A9D9A19AD565FFED297FDD36DFF3C64CCEA652BA727ACAF3FD36E410F4DC6FDAACD40DA3AD711D873263CDC0C3DA332EC97FCE9B4B7AD3D5B2A575AFD7664D2D0ABCC66DD7AD080EED910CD362AB5AA17948C0FDD3C154D8F8C2DDDBC6BDB6C182471B466C5DE0F6CDD88B91FAE36E0C92E6B2EE9D7CAAD4EF7A9899D1BB3EE2EDB8EB732DA1C7DD5CBFEE26FBFF30FC6717F9900B67B24ACF5E2080A188F614F482228CA12965C96322AE6FAC1FEE2ED4A173D7CEB5F5B17383061D61F49CCBE980E4C3DDE08DEB79795E6B8A733BAE5BDC087EAB59C62CC585BFFD90F4BA55DFD6E9C59160E2AE020076A05BEA9A7A609FBB56C033C6D4BFB65F00F42FD97A694057EE4C3BE892DADA667A9B3B0ED433F9053ABE266692F387F649BA76E50DC8B0C7DA2BAA3E867EC8738676242D9F0662E109A1BB8B46219C11EC8219AF9505CE3848B59E44AC5E64A487620C68391A0975D3B7FFDEB5FAB461F5A40C11E8146B97A0F39E490E38E3BEEC61B6F64868BD44FA6D0CA32B63020F8842DFB583224D393DA0E363103A284A7D02219300B162E12DF69254EA0B171D2A0124A04FC1E74D04118072260F4A7814390371AD622D3DE93074C314721488C99B41A95BF29520B26376DF09410E5184197F792CF44E4DBE1871F7EEFBDF72A02CE0F494F28DCD61E149EA26D18533AAF428A6286F06E4C79623E94485BE8040B9CACB42861539E036F839CC5F3405863853DFAE8A3BB7D1E563D31EB60729F95FC355ED190E7831FFCE0C5175F8C65F4E0830F1A07E33D30D92C0833B9C38AC7265B08561EAC0452B5E9FAEA8D485B019FAB6D1F879A9B908159BC0B2EE8AE1B33BF817C50F45993C1A87602DC75B83B3E8192A097FCA637BDE9EEBBEF269A5D54E34C6FD3D2640AD9055EBAC167FDEC39E03257A1524030604E1E0F3C15C7D373D095FAFF7DEF7BDF17BEF00586316849D01A5DCCE349733E6138A0922F030FE3268CBDBC9CDAE4BA133FBFF5AD6FBDE1861B5CD6025DCA14968D589AC5B3C62DC7EE9990506F7EF39B6FBAE926B211E178C31BDE70CB2DB7D0600DF296C9380D03FEF9CF7F1EAF468E0272C10FD4B30E2860EC05A86A059F4D119793D92E2758C9A7B9661B5066BE8F3D3C363CD29D6D95E368A8DA80BCE9F53BE55235F2B24E12C5707393B4590E473C6FAF9E39D434D696A1A9D3EDFD999E1F942AE5594B8551F2C2204AB3384BA16E83E5ABDEF49AD7DE75DB0F1EDDF8C08869408A4FC69DCAF010F46B7FB65DCAFCC83238FBE5A0D448FCA5B5910D417F72767687E9B77DAF550E5B70F8FAE9F30F3BE2BF1EBACFCB7EE7FEE64227A740B2A0B0D8128694F3745D1A430143A4B5FB3DA5A5C80BC492C23F960B1A77096D9363EBDD56C378348D567BD972DF5B1A55CA26AB7A5EE8A791493A26E9C2C1F5E69A22563CBF52B2E1AB6E6C1B2396C3523B8DE00177732738CED53A3437FE8746AF07956AA504D716CFDCCB4C2FF37A26BD3BA8F5B2A49DC2F9B5354F5ED9D2009B28B60DAB8A8C29A1914A02126886CD2E3789E63B573B73B1142F594EDBA7D8CCDBDFFEF66F7CE31B342529091947C55AC222C472523925235258BDEC1EA6A548B5870BB29084D00AA526B9955C335D81404549DD92245300BEF0DDD5AB579F74D2495FFFFAD7E956B91595783CF23E49F2883853D751D3175921DA17C1FC76AE52646E51A832C1A6A88C85203AFAE8A37FFCE31FB3878402A5FC99FF43C8C381A10FB6D87ACB1CDE46814FEDB0B8693933BF2F022E27B82CAD06DC58FD6D940CA73D45AC8A60B70C9C6605CD320F06E8BC1CB2CB6A36BC0C2B3D4CC12AC23757945BF1409363B021BFA8CED5158743CF51234C8E011055A652E83CF7B9CFBDE79E7B34F404DDD1C1554343853BE8FC89DC517D1C4DC1EFCFD500F57CDF7DF761DD93CF85B2928310E4ED2BF0752E2355B55249F082725FA89B197626C6876FC795C74237DCEED8638FBDEBAEBB366DDAE4DA130B3D482912B7D079E141909DC05378862F7FF9CBA79F7EBA291C7146A2189961DA89A14BF537D44D655F2BB033B0D48C13C17681155CCAF2EC35F86E418EC01A5971507FB0DC9E0EC17BDEF39EEBAFBF7EA09F9AF2318C64B8806A02A715E052BE598A79B7E567AE0DB1F07337FBC83B6A4D2A876D1C079D22D2E4C9053AC76E331F17E1C5CC0B973AC40D612C1470F81F862FC641EDE1980EE7D272DB8AFC0E44D3EBFA9917E004ECAAC083E86D66C1501A8C04F818DA244BB234B6CC1A699E93B0F9CB666696996085A9C21819CAFC15A5DAF2DA70BBDB494BDED6D66473A8D169CF4609345F69787CE4A9AD9B563DE319BF78ECB191FAF8780D36C4968A0922136D0BDB416C1DC1A6659E0E4DB992944ADB67263698D82B85A656DD3C3D53A9555ABD3E86208432EB474C827472C287A034B7C06803613BE075208E0F38E000780818968B2EBA68DDBA759C776E5BAEDE3FB61F30F67023312D3F81B27C5E521A87B7EB47AB1333522D597CB2ED309867344D16C5692F8DD8E6C812878541C96387441BA69EF07C8B56CBB2BE2A91F2695D01BFDCCE6529F1FC6E9AC0E0E8A431D6E513613558BBFAB8135EF7A5755FF26084786958A904BD7E12787C6BD19C61E5D31DA470937F660A5B909B82A160AE79C566B4C6580ACC70341706E52A4D7C455C841A3105BD81CA2E3EFCE10F5F72C925D411F8136EC19C8BE770DB3122C8CA3D01357811B6CA9628B8F2CA2BAFB8E20A52AC8BF040D5190C6D52200B7E4B05C1B40ED436FB03C949658A9A5B00F2E1073FF8C1F1C71F8F5B0CE0345D3496DB4F96F7A5C681570937CCF5275DC1BB50D14A9431B7ADAC998294C681622D0A11A498C320422E9F76DA69FC502E94D8915CB949CC2A550873F2D49D84288B2F093FE082975D7699CB268165F4E4934FD2A164D482A6961209B089308EF813A4155B265080BAE803CEBDC648082F7C78CA29A77CF7BBDF254D01956E56343C71CB7FE9FAB0A286B07BDE5D884A393D78B0356BD660E96705C9B3B48E57703389C68CBE325906BDA25E5EC6975F50F59A02BEC89FD523D3146C888468ED5601BBC11F3794BA18C25C405CF583C2A4FCFDDFFF3DD3908C64AA3180968B1BFD3605B2C0B519E5595221CD0159E7B78B66A29A8993D4E915CA61579007FF9B3CC442FDA464B03EA75DE8361B51636D4A1CB70E016792A683CF4F5BD03563CDFC26E18B852EBD05A4A16E105B9CAC1A76975ACF38E6115D76BFE8CFCA12F68155610AFE19956D78F3CB10F1822C91E256E234B90FA00C19B7BD7D0CCF3A7981F1523F8302868AA3025E5ECB891DE0B5E4D0A6C8AA61DB52A11AFAF5D85B62C251BF54F3CD78A9BA7678D97E4B963EBC75E38B9E75C44FFFF34EDF0433A6D71C1D8DA7672BA979D04CC3A02BD74AE5A1915E2782AAE926D16477763C320DBF540E422F0BEDDAAA56F06FA235B3C54BB775DB514E4FBD756257B9DE6875DAFD240DBDB9E2EF88F8067F4E1330E83550078F713BF4D04321BEA936240AF62028173B1653C0C39530892D2EDA9EE48718A25E0257386D93341EB211D3041F37B53D914ABED74E4D3E8CA63F47046D8D0F18DDE3383F0FF726068E6FD649D3765ECEFC9031106AF5154B26B64E54FC7237CB210299E5185329398D66D7A8C585FEFCCFFF1C72151E18F5342D3F4A511682D271622D1CE184F8E195AF7CE5EDB7DF2E1A2249428E983C579264B1B0C514A12F0A01165998BCA84654CF1083447E5186F3EB921869D19F9BB29D5B40AC8B780BB7F4CE2FA8DDDDDC330165A2F1A1B4B9F9E69B4F3CF144333FC22761A5DDAD86B603AB823FD39DE3B748080ABDFBF297BFFC9BDFFCE6C22BEF413E50F70BC2499125D62017F3C15CDEBC14A97BF03B9C54975C90496CC5E830AF0CF19BDCCEC21BF26D290BC4DF2DE00F4503F53715122692814DB10F0AC0422786521E26D219679CC16723668F8537B80227523E19F72D5D04CF690942424A957379456DA822F26EE52B05B1EC0C0268D50084AADDC50828EA659CCA5789573EB6DBB5432952895AB78B14CD31D69BD2E31498D9B54CDD053428479C3CEBEE054D5E212A229BACE02F9387AA1F82A2370B762F299DD91F8DDD2F14B3D54DA5745532242F9FDA1A23C3D811B420394DB1128872C412C269D8CC70CDB1BDA9B9B11E5833C743517D4E8A4AB14D61292B5E82EBA8B93551272AC0350ECDA75B8C48FE9085D97AD9CB0375C63274F409A1798C219326CCCCCF34D35E61C24C4B5D6100F9282210D06062F619245435A0BE25D9F7C217BEF0EEBBEF1667881EEC7760C9C4C66CE501DB3AE05C012FF56DABE0284DF225E825BE89734C4AC5D876490DE3E7BD7DD2A6316B2BE3FB8F2ECF764C8EECB3FC374FDC7F507D55AB6D01D58DDACA473AF65DF63AF0198F6DDDF6C4F44E5B495CAD3DD4ED8C55CC9A7EB593F54B5E6578E9D25EE0D9A46FAFD5CED149E56A6DA6DB9B34D0677905AECD955A0D3707F8C8DF945824E6FCF8CAFBEDB71F860E23ACC20A0153BD02DF9EFE0FA8281751C043156BA0A4B15D28B868DFC0B54DB1B161346569E267A6EA5968B4855959A45858F1B324F36293F653ABB8ED46F672C8714EFC1027708E4DEC7B36499C25F0929F0C2A8F24BDAE6F4A5E5809CAB331B4733654AECCF4E682799036A40D2761FB1CE23A4F0E32874AE401951916C945175D74D55557911691CEA2B00259DE5B89D95F52C09E7AEAA937DD7413D6CC473FFAD10B2FBC50559D94396290E0755CAE63F78088802EC032A3AC502A90B28EBA5345AA22C0A2462792912CDCAC71A2C6A1DC763B3148389BA2FD2B0390046A54F283EA4D4DEF99A6A4A9ADD498EBA598A24CD90DEBE287830E3A889031B244B829DE3D7BC00352C2755C1595A43AF006A81F5D8F4AA02FEE5ECAA937BCE10D3FFAD18F68FB9029572DD3CF3DF7DC2F7DE94B928FAC35862425520EDF854D41E7954B0A934D08D5BEFBEE3B951FD4D00A35C8D0C053C1037EE73BDF0901845FF1DC905CF881ED0D6816D03CA47E22E3B4C2986E4F1E970B822971C6C009BF72B520214BCA897A39F73D11D7BC8B827B949262C572F3FCC4E83316C4CF151E7799BF24C4256D89A1C0E8AD5FBFDE14E69BCB78B5F0185084BF77A1885779002CCA620306FA703BBC2FD70ACC9D97BCE4253FF9C94F4479B6FFFEFB6342F5D80B732A26B7E43CA7190083691FFEF0872FBBEC323181D33612C290DC8A6ED36FCA0BE6DD618731F6A5C4B6E07259D18399A92F5D530E3ACEFCDCE73E878547E5E4024139BF4C4C0C942499F9F582BB55C0A68842D35BC5F4110FA122345D50FC091855A6544C6EC8E207D56A9BF9AC785E0EE1C64D31E0F7DF7F3F6513A13704CE305A8B6F5D70C10518585AFA69D11587E330672F864138C75C61EB67830C0AD81BCA826579998F8D9AE6854699ADC6B149CB91C40BF39E80F0E07A18DB2C5E6AFCE57EB39BF60F6FAC58D9F3E034B7472BEBDBBB562E5FB17EE3833BBD7A6C43AF71C5787513EC349D678CAE988C5A958E4D9386CDC654DCDD3C3BBD39EA41088DAD5CD2D9321556AB53DDCEF8DE7B3FBCF1298C10BEDEA836DA512F4E625B8AC360553447AC4F0BFEB0C30E5BBB76ED1D77DCC1C006C699D6BC58A2B8C717A270FFC70A78A46ADD03982F70BD23CF06963BB9C5301BF86992C2468102AEE42067BC38DCBAF13CA41F65967323C9727601BF94DB1376897663BBF262E345816F15706AD69B604B399BC8D2AA5789FB73B5C050C07D93D246146645080C82A464DF33EA43518CB966F72D82F049D74F47C58D60D17DA2CBC1021E8862964E640561838430C10454CCF8228B7D2187D95ED76D1C2ED978E38D379E7CF2C9AC79912FA73C822B96710E6BF3702FE6AA5D59A796B5DCB0DA207847FC896941AA247DEB939FFC24EE0E49E5B630A7AC1E50C0D2772EDD340644CFA636B50A4AED812151C29F5B8F5638852DF1D87C18A2C10931196400E16351A8654EC35D33BF0791DBA90A6387AB0BFA84EF5E7CF1C5D0C7AA9C917E9246A4E0606F19F2F63154422028969197574FEF21B68CBB7CEA539FFAD0873E441F91DA9D75D3F4EE714DA6D6E82B93E44524E07C5459854233317493E52CE1947481D3CF98912ECD8D3BE5CA3212696C8A3A637EC2F2797A60748B5DE9403DE4E5A57B2E1E987E9232B56EBFCC01E5EA820BA433CCEFB3D438A1DA66B452310BC24AB8ED8FF039134E780C9C49CC3335AB990F6A10C0CF0D9771E7A85087E69AC9A3C158399FCA8F238F3CF2DFFFFDDF65F2D354C498B0AB12DFE5BDEF7DEFB5D75E4B5A3BB78321C32138E79C73CE59B76E1D45004B6C19CEE199ACD2A1F7EF153D07B92DD9B9723105ACE15D4C01CBD7E7B2C1AC41206AB179F3ABB0F0F399679EF995AF7C05EBF691471E7113E1037BCD38AD1404AC13CDAF0B79A3C226F08446214B3CD5E0395FF196E1C9B35AD6BA9F70DD868C379C85ABC3B2ED2C84D18EA34EDC8F4D62F557295C129B20CD4A7EE8554A3D13F5BB3DE8C36153DAD784E5A1D1C97EA79A7AAF7AF14BFEEBBE7B7FB4FDD115471DB1A19FBDEFBDEF1D4ABD3561E313EF7CEFAAC6E8E4F44465A861BDBB5AA5ED250FEFDA8E490DEAC18EB67D841163562D5BB161FBD6D95CF0CD74BAF9C8FAB1972569B2500133A848E18B6543BE490D9AB2366ECFA83F50F5CE4DF4620AB8D248A07A7305DC35D6F7ED5A63C54CE5A494B62361E055331F0642296F20B1D467083A8D7232693BA19E5D1B6139A0024E727016DCD2BEF592CD13267CDCC451D54FBBA9AD64AA5523086B686E470FC162836CC4DBD132C69BF23521B2449D464A70DAA3949672BF5CAA0A42284C61DA7239C9BE712349E2A620F489C69C361D6F2AD42A21C70C232909C273DC7206968972A750F0726BB0E50F45345E96A04E6A0AD576CB2495C34A62197AE7B83223ED784138C4CC7051F8D0A07795AE998FA1210A957E173691BEC2B651DCB96E4BC4C5E4AA5F34266794D75516744A2994709DEBAEBB6E8EA8C82DD9E423928C1B27B13C911F12014F8B8CF15B6297385578670C0425354FE086C1C42BF2003D247AA9CF7CE633975E7A29AE8651C3603102CCAFBBFC883C28B8718BE38E3BEE7BDFFB1ED9AF48E74D0DCA137847FEAF9E019A784EADAB1EF03AB4FED8D702A6007B20FED99FFDD90F7FF8432942BE322E0571095F50B02CDD5DA02D49520C2C7EE61432E5AC642AE526AD048A0C974885CA98B40CB4EBD96596AB44E9998115F07B5DDE818391DB81A40B15D545175D74FEF9E71F75D4513FFDE94F09296201922051344845B5EA3928E5C4690BBD5B101647E6861B6E38F5D45331D41FFFF8C7B3A2693CE387C476322BC1B24292358A049BF81197565AE62D65040799A07D09203AF12E044CE5611A7686A0DD0DE61A31D270667E48591B9827D0A1374EDC68E104C9DB56636058155FF8C217F4788AD064F39B9FEB04AE70C23ABCBC75928CE685BA9C07096ABABDAE0A674D5ED53AEC85436930961339E1667D3864B684D55829522E0D2599D78B42DBA630ECFA592BED5994AFADD20956F8F5346A0D0D2F0B0FDCBBB7AC393135FD8E37BFB5373E16F4BAE1CED96B3FF1996784CD65E546278AA7FB9D6DE5DE869D9B597233D2AC9AC09F9C6A1FB0DFDE531B7734C74737EFD819956DA7FADE1CC9836D61B0DB1034631B845BE238FEF8E37FF6B39F616661CC9D7DF6D91450DC2674FDFF682EE8451470332CD3728AD2AC6B12D617E199663DFBA05601E79072C85DC8D3B21F34BC9421684B079DCF7C982BE05A0EAA8A129BDC8507DC839ACCAC27BDAD31F29BD694375CED4E77876B436D934001D783B01DF74D91A1B0ED633D0F2F8B99C1AB41B2BBFE09A50DEDF5534E3905CB89A47232015D949F5754B2900C00BFE26A34675D9D214A3ED5E2BFE52D6FF9C637BE31961FAC1021B78CA40AD515B7F977BFFBDD57BFFAD55481A247E54663D89C094D3DA1E4F6EF02364E3344B7E7A680202E2898A58302E570E36B3BB8A5190BE524DF5106343FC41D49732487F00F046149A01D78E081E443656C1C238379F9E0073FA839F5C416E6CA4DAFE01BC255B0C46FBDF556B1000A2DACA6CAD049279F7CF265975DE6E5F8520C81741EFE0459A916431A17360B528B1B2FA7DBC6271CC1356BD650FE0ACEAAD6878415D0A9370EE85CF25DD2CAC5F7E2672878410324E04C4166493702BE29839C4A828A8C50868FAA0CBD0220268253FE7AD24927DD73CF3DEC5BE9A290F0BF5832D4FA0ACF79C82187C02652F0802FC5A64F24B79223C82CF86221B58148861B8E5EECFCD46982CB720276E962CB11F77DB5463923F2B6B5A6D5FC64000B660AD8B072C00C180A24823725428DC0783C098BAF38D792056A858B1BB12D9AA261ECC74CD49ECBD4FAAC673DEBFEFBEFC71D2186C8D392E66CCC9C505A662EF0CD14114E651CDCA113AA5C594651D6F150D2911A91E68230011C28190AB432F15244307004B49C1E33250000FFFF49444154DAE9B22B076C9C3603FCBA38E0340B41D1C4549DD460447EEC631F8381FBFEF7BF1F5B061787796A1552D40F536B71C3398302867530EC05F08097D8825B68B9D4A2788D97F9B61F00666EBC51AFB4E366EC95BD60D68B7726D86C26A8967B9D78E5410794960C8D8E2EE94ECFBEE1A49347D6ECED8F0FC577FEFCAA2F7CE1992B56B71EDFB02CA86D696F8B4D7DB381E8AA6DEBB52B015CDB14BEA017A5FB2C5D7EFADBDF79CD2D37FFEAF147312E575C75D53BCE3A0B8F1696C25E04DF370B833910969D08FF77705C53D4651065A2462626F780B160E8C4780515D4FF13053C1CFA24E3C2DCE43A38637D51370853C8C93C535ECE915665CF9482DCABC93DE03C046D6B7A831C7EB7246F76843D01ADDC33F63ABD3C1AB1A154DB60BAED7218B7E2D0047D2F5F90794913DE42BC4EF48B58BD297384F61CFEC77222C59297E301951D57C28EEF485F8539573ABEF44189D1651F58626518FAE6D544F347EBD638F4D4CCBC908B06FB114FC55A26CD0B5951B9E352A7530E4D464A03E25E2969F14830D01F7EF8E19FFFFCE70C16AAA0C05DF3A62870A2A0A6E5CDBE9C3C93BE389F5C70A5852168AF207634791886AA9DDF5206C72B58BD041ADFEDFA51B9171E0C328D980C4158184124AFF39CBF2E061057B27B0555103E674ED72BC802B1C3C95391166D2E685F0CB4F4614F1B3E25170D3D5A85824D1E5B27A318AD0FFA287838184D309D303172D849C6A656913CDF2D59E1D0F37F4AEDD7BFFEF5F7E787DBE85194E2528D0C1733939DE51DE8688251490882ABA9C522A69BC5F33D87619C0A98ADB264AFF1C52994DFF8C63792A899582A3E3F6C145C9F6B8EF59A1CE7AF7EF5AB50B7B461398C5C1903654503F2656124633105ACC524820E0974EE4F3C36F72D7E769B154A25BB6FCD50D840B3C53D80B0B4CDDC4D252B878DD2FC9C7F8E519677BDEB5D37DD74D3D34F3FCDD7A1B986CF3186EA6FC8C247BE1A560E6C38AC043CB6885479C25BDFFAD6EF7CE73B2ECC9EF1A2ACA0A85CC810641CAA58E6AD99A0558E362BCAE2895655E11327DA763EC833DF146AA4C422FACCAD4CA0712D20370359A6E8D6620A78170D50F9E282752868C4454E53585D6B58C76F6B051B753F864E487A7074733AA96666FBC91FB26CA5256FE976AC8CCC1B0EF4621BF61D2A9925516985A9364A9559936C4D3BED8AE737AAF5430EEAB53BC3C3A3AF7DD39B0E7AE6A1D634E94495D4BBE46FFE127B2948D21A26346799D8550B37C77118993276C7E8F08E9D1363F5DA92526D6A6AD701432B7F32B3656C6464DBCC7427CDEAA3C3DB27A7ABF56AABDDB59AAC94331FC1E381122C52182EB797D219B4CCD43B9C27780559ECFF13053C1A16336EAC4D6013B7B907DCF3CB58C19E6D8C64115861DEF8A80A6FBE1F5BE2E80565482B53DB2E091785FBDB4D93B68D66DB50F6637EB9B37CF8B16D3B7C4B03E2E18A8DE1E1DED4A4576C4CB279D3E763E332C542A41D6946730B280A22E784F1007518739356A24262F30353E09BDCD4860B16C14DF13CF4742DAD69DE9EE8CC33CFBCEEBAEB5CC413CE67E1B2BB955C44924B9C121444B3B49CF424A470F70AFE76D6DA51814929D232807066BCD6F574D9166900C6ACA09D30A44299913293AB883B14B6EC873EF421953619C764DFAD5CE57852F7ABE1BA294818791A25AA6DE90B4DC9DEA59450CCEC72F4B975D5884A66B8BAB311A0A422574E30C1506219253D05EB85701A24E9CD37DF8C919233AA8A589C40D380BE821B2DC139279C70C26DB7DDA6BA235A346AFEAAD26C1705C3808C97171DD16F5088584006419D4D91C33385A1EDEE5E57CFFDDEDC2AD330342DC58FC8A24F051BD2F9348D031A8B33C4F809069345D534EB5C97D48DB4B86F649CFA6CDA19AA5257C09C7B292DDAB709AF4F53E3C20B2F84F3A4D27BA96798239835820C05BE53CD3B23D54A88CA4B13189EFEA5D0AAC629BFA38DAF22770E1157946CF001A4185BAAD19DBDFCF2CBB149D282F69DCA92EB8AAFC91A33AE5B6D7B45E015DA151DA92C4B5370FB510629DF0FFF12A3449B4CC5E2C6019D71E8B88C35477C9273CE39E78B5FFCA20BDAA226E612E5173920BC8EFACCF08DF0DD8F7EF4A30CFC2C2A08FC11033D1078691279706D3BADD1A54B5FF5AA57DD72CBDF7B9D2848CDD048B35B09A627A796FB8D52B737E265DC26955AF5E99D3BEA8DDA54A7B374E5B2BD7625DBBA936163386E541BAB56F84B8692921FD6AB67FCF5A9CD6563A5A17AB95EEB765AB5C874B6EDB8F8639FDCBCE18186F19B893FE4DBD0DAAEAC93942B51C99FAD1BF8D9E589D6F2B41C623D9A282CD55B516F6BA5F694D7D91A261004D5D91416591FFEF750B33F33030F384EE246BDD16AB7021F3A3D814A6632D8382C2E5C2A9A41B5CEA599F247695F3B6EF592E926E3A65E49BA637012AA95D16E7BCCA4B33945561E5E8625E17B9967916626DD8CC5607FCDBC34C32A6984D5B26F9DE5ADFD56099B2CF33B2699F1B29E673B46944DD84863088211BF540FCA90AA3BD3DECE2C6DFB665375E9AAB56B7EF3D8C33B3B33999F9B0EFD68B8DE986EB7B8FE2FBAE8A24F7FFAD34C37F01DFFE44FFEE4D7BFFEB5719AE210C1A0B0161358D4408A23BA0CAC41DE941E034591C8DDA19A72D1A072F5724132623A7098829A70FDFAF55E4EF3C07815775F56B4A839E8A083603031EEC534A5A490E7948D0927E13602A78A51677BBE94D88855ED23BE393FA79B2617A16423970A237974BAA8E67947D28AE1AFEBD6AD3BEFBCF37065764A96EFE1157C20F44FDC40A06C71815D2484A9B9B3A28F8BBCF3B980BC9F3765640D833C12697B1550C2D8913F416D47FB48E01D6F3EAD2E87580171160EE18509E962631F1A6EA27190F79C152DA2A499BC9CA58FB13515CF70158AFD8073C993697FC975F0E7378B76E93BA808A50E197E217683E865797B030A780FE84A2E0ECF21A310C9B3AA59F48371600E72BF8C83DDE7F3F38D04AC186871A8D5E03608D29A6605BDC9FDB3CCE9CB6B0AAE5001C5A9B798B627DB83AB7DD5CC80B0463E0C11832C93374EE9339F875FE7E6773B842F54C0EE5BF00426ECBDF945D50B23C35C78036007D70E50B6821609DF112F826D76C10517609B116AEEDA31A4E724325FA0011D021F78454139C18D5EC1206D0AD814432C1CF6673FFBD910977C4168D00F7CE003DCDEAC9AC016A3A3B0DF7EFB6DD8B00146F7473EF211B6C4E083D189E710C1CF8021CBD759CCC31B0AEC5B9F72CA89D7FEDDCD70CEEBCDE11DBBA61BF5CA743F855F365CADCE7467B3C0D4ABE5A0D55F5B5FD26E4F2CA93620838E7DE94BBF7CDD357BAD5EFDD0A64DF5929F44E9F225CBF63FF4E0A95E7764C5F2E1A56327BDF92DB65B4E6E6A4F4CEC9C9C98D86B6CFC952F79D9885FCED23E4CC567EEBBFF3ECB576D7E6AE3D35B3725A1DFF6E02C42AA648DCC42AEF60D862C58A95AE907A693F47ED3E96C0EFA53150B65F2DA16481C566BA5F125ADAD36B619C551B562C943A88C3DE3599A46678A5D1D600AF602357AC91667465B5401FB968EA469194A7A75635695822551B2DC829C7DDBCCD786844DAD5CF20DACA2A417C59DC006C76D135FEBE37A8D52158F9546F12E2F2E659E6FC1D2D9B49776F3BCBBE51DAB954DA7DFF07C081A28605816D379F3A807D35AB5D9786A725B58AD5A1879AFB7F7AABD366F7A5A4F4FDD63E6771CA128E68EC6F238FFFCF32FBBEC328A0BAE7C394B2E7C417931ACF6B7BDED6D575F7DB52B52D89490F281314886705EFEF2977FE73BDF91333720C4D282A78846A492C16A3F8C2B7CFEF39F3FFBECB3B5D35D53C0F57C5CC14549223891C9C36378B6A38F3EFAAEBBEEA2C1A1FD481AC4934E3AE9AAABAE52F85DB2970296928D36017EFDABBFFAAB1FFEF0870C2CE18B5FFBDAD7E8FEE1C50952738BA4597A20ADE4FA87A670AE38417C6CF9DC8CB1AB2313937D2CEC9EC38330B1275FD614548B1838558C317C91161DDD292F6478D28487ED830913D85ADEEAC24266AFE0BF16E605621D0FE0664375E86D695589374328658510B9E5E8E50CF8949A78D1CAF84E9B49AE92012893CE59A880170BEDAAC077006B37C0AAEAFED5AD76DF6DAD8B0BB5A06F2D15C5B83D9D21668E65D3B9FD8CF522F8CA21871CF28217BCE01FFFF11FD98D84498E57BCE215DFFFFEF7E9F311FE80E9C00FE42B16AECD1504B4AF39EC9C112C7AFCE0E2B4A5D1B16DF0C05A826AC49B16AD99F0F361871DF6E0830FCA1A53E595ABD83432AE0BAE2BB06AD01D3A77C9A9BAD1144965B76B905F7468611114C398025C28CFEA92C1BAA689FA1B2A96252005EFC87BB160977E865848192B92FAC7E74CF2A9B50BAF00A180B9D6DB893766B7EB7008D655D5F878E47275DB44BB52AF8E2F5D7EDA69A77DF6F22F47AD4E3D0CE0B2D5862AD1CC74D88E70F278A531D36B0D85D6F278F489F59D2C1A5FBAEC557F7D3C36F3E34FAC6F8E8E4CB7DAEB2EB92484EB56AE4C4F4C6E4C67864AD5E1B0548EB2E38E3966AFA52B2C342489FDC4EBDB0E7DD524B3C4578D211B812C85FE703F5DD518AAF5D265E58667FF963ED6DB39E4D71ECAE25DE574B262739E412BA9A44175C9707DE9F8CE0D4FD920581297C2D25C89489CE71776B783B8C2B5328588DC43779AC58EB21F64A957A9D73ABDAE67FA2BABE1D27EBC2AF4463B50C08925DC28994ADEF4B70705DC8F1B7E4918B1921F94C3BCE6308966021F0AD88302CED2699BE8B55C1CE53C460D1B65F550A31284DB26A776E5517AD81A4F551AD3BD560962B66B1DD0B1F1F1891D3B6D9BE15C9AABD997585CE8A87DF0831FD4521763397430CC3BB9A42C6894C2A3A814A6471DECF1D8F086CF38E30C587EBCA05B169F158CE86ED9AABBCBB4B994AE36852746975D8067BC05692C653D9B229E2159ED56A928BACEFC0E778AC0B60C474BCDFB0517E1273EF1896BAEB9863020E3282059D8743C5C54260F89352538989F5660D98DAF780B4A4E5C5DE3E744754F3CF10473DB746E53877CC98E00D535F34374E7D5CD983E22113A22A16484E199CF7CE6A38F3EFAE4934FB254063307531D8FFEAC673DEB37BFF98D7C11958DF35786A3C54DC10455963352A58B30FFE90D159477893DE9F27270B3A2D6CA55FC2EF856A3AF6C191B4A8B6F52DA8E4A85A6D36E01A566F11074B0A0BDB1BFBB26912E182F289AFCB8D3C313B8E81984E4B3B15321A71C3F1F7EF8E11870069A0850E233D096A28F45AA64F7EEEC709215F5F8F8E439CF790EAE63F2403733496EE725EA7286773EF399CF5C78E1856E9A96A69C761D232D780061F78D533946C63B2A1B4E0D03067897238E38E2BFFEEBBFBCA2168BA878CDB5A049DEFC6AE3CC69FE6A8A5A3D19491A67A53C5C2E0E751B84D6C1D35235D224D70FC60C22A21903B8F4D24BDFF39EF71015CF54BA7160EA9C5355A9E28D44C3425B5666BBAC58AE643AC48C85609AC86CC085ADA27CD2EFB98D45171E8DD1A52D0C48E685CDA1B8D5827596B466EBC3CDDED4CE91E1C6C4748B12AE94FF1BAB940FDC6BFF5D98C2A99D25CFB6D76B47BDBE495E70E491D5D5ABB3C03FE09907BFF6F5AFF332BF64FCD6D474D97259F64BFD24DE397DF209AFC37B97FDEAB6B40BE3BE545A32D19A6965DDD1A5A33166B9D7AD2766DFE52B9BB3EDD9D9E923563F63CDD2D53FFBF5DD95A019974BBB3AB34F87D94C90CE947D4B171565D0DFA57AB5343434916FCC344B037F4EE273F659536B7687375477323798F1C746A1599BEFD7EA51844BA5C39E59159935BEB7343573482BCFF644826913DB92656FA408AD99BC727A2EEB9165D3BEC915B0D735E94C0E99C697E0DF0F5947DA8C06B6D3D1449CC04BC0F46FEFB4EE8AD3E6D0D06CB713964B679FF5BE2F5E72C948737876663A712412A58408110F38E0000861628C199AC66AC42E20C52CD6B34B03679C4020838E5CABA49FC35FE95F41EB10644E1B94F7A2DD698A166ABB1565DCC8F8E1A31FFDE8673FFB59AA1C468FD8D35A9C33704FCF3AEB2C6F3E3B9EFC48E3B8924A3FF37345E9589701DD46674F8CB66487C68BE3E7356BD6B03998D416F3D670F088F5514707DD5DBF326A257D01C7E081071E50F657B1683D73EAB0E5D00BE2457097238F3CF217BFF8059B39E2578A68B9D4F65B9229342E0406D3A310C1C4ECA3FA5DA88C6CC0B2600B3C193E1C3837F0C85FE3BCDD3D868F7908B245520DCB21966C95C9EF3B9DF598F9E3F55D9214BA4AA29870F7AAC0AB6420C2D79FFDEC67DF73CF3D5C5BBC329BB9AA19B559600798C57D5FFD95121617BFF7DE7BA1410925582808F452EE5276A36AB8CE71C71DF7AFFFFAAF4AC6C8BAA42993E67498307D38F86490A17DF7BEF7BD0F9AF2A28B2E82B264D488998F2CAF86D2A257BB621EC28EB24B09D62811001C340DAFE73067C10CBFF8E28B49A282A7921A965254639F6BAFBDF684134ED07A9009A51A448C150C76D503703A70654608140A96E1CC48E36E5B4DB8C6A9C4B7162D76D46F7FFB5B38A3F819DAF7939FFC2446098B1077C1ED581B462352D99001639FBA5031186667282C9483570ED8E4AEF9A9A79EFA2FFFF22F580C6EC5217164A4E07031686CAEAC1E0F38071FB2D8115F87E2C760EED9B70B8796C6BD08E36B42DFC4BDA13A545C6F9F95E33B376DDED5B5FC882BF75AB9F9E96DF552254DA23BEEB8AD3335F5B39FFE14CF0CFFC9922E753BA7BCED2DE54A65D58A7D5FF7A6139FD8B4D1947350613F5A3E3AD69E9E197F62F3D9EF3ABD998526EAAFFBE2174E39EB9D1361B2ADDF9F866AAA943B51B739D2E84EB61A9647DAD4F37ADFBA298F551BC395E6F6A95DB1F177994E62820963CB6A7BA52009A05CBD34B230ECCCF33B163E6CB5EF5C8433D7BBBE6715B0BB4D8C53CACF05BC7AF56AB6B21E209DF8030F22AE2B8D66AFDB33497F9917AC865833D561B8F5C6AB7AF06B6D2B88D406AB03AF542EC711BC61BB20F3A512DBE223BBFC26928CA068C85AC8C128EFC7804F56D41BB3B087AC320E3A266D05A51D491F3BF061DB6CD8B7549741609BD7BEEF7DF09EEB956AAB37B7A45D7BCB0D173355246A2AD10161796739A99C9A40F3BBF464082754A2877126CFA1B2E1E87129CA3F16038FD95D04829E22FE3FF6D863EFBCF34E6C2216B3A83A888F872B0B244475E386FD3CA750DEBD3EC1ADFAF58A2BAE38F7DC73E963A828596014A27F18AF65BE4C92C16D1A4B418787219122C50B5F19C28D042618BD17BDE845FFF11FFFC1F8A83A7C88CDC9CC57C0F2374C0EA53EF4D04319D563B08AA834DB082B9F0E1B8266A653F688AC39E5AE29020409612C5B7E0046197A54A816E95A42B1DC368A02AA707C5FFFFAD7DF77DF7D8F3FFEB80823CDEE1A1A2FD4766E89B05BA16B1CEFC7755F8CE3C108534EBD023F1E8298029DA8519ECF05CD915114D77583F6A083316134C1C483EFB613705F4A0960CD9F789ED382F0E54FFFF44F7FFEF39F33652E9C144D162C3B1613335049B648DA988476E3A66C184C88E3C0C0E20AEC43650A34A99B65C4158E39E618D86E5E5E20689CB40D631E04EB92738795CAE251C9F2F256D70223F89E95703879B11C30339A6ED257600DA1133511822EBB31F68150BF3B65BA2915BCC295A6689CCC9FF93A7249DD5018179E2A85B2A21B28AB38F4D8DA4DAE05493F00B3E31515775AAE03B038ED02BC3BA973F4F062EE14D1DB1EBAAFE0C9FCD084A572A793479B8A22995658CB4B5C42DB372FACDE71EBFFDFA897B6ECD8F2D31FDB8C1A5C8F6AA9DC8BA3D1254BE0048F8D8FBFE5D527FDFAC1FBC7572D0B1A556B4EB43A63F5C68E4D5B6E38F9CC1DDB36974DB67264F9E3534FB58C3F5B32DBA376A75A4FC26CC76C67E9D26634333B1656CAADA86EBC4A6086ABCD99D654C9044B869675B374364DB6B7A77A39F756EC0571E06365F793B4973714EADB66BF59B954F4CC29DAE266F3E1575951444EC9082571F0C107DF76DB6D72711603A92D7640C7065ED8A88FB4DA5D2F4A5604C1B25E7F7550ADC7B30D5BDDEBD9B05816A5964CBBE497C238EA79F90358811B5B23D1B79D7D4B33FDC8E6B38DDF8396C562B66548A69AB33B87C60619B2209C8CE32D69D43141756CECEEC91DFBEFBF3F341C0B79776CB314699552D9B69C726A404CC1C643D3599941B7CE8DC85B2D3F57FC9ADCFC656C8F5A8A6AF5EAABAF3EE38C330844C0F9A4761880220ED08A79BBABA3350E7695158614AA8AE4713AB0E370534EA25B37E1CA55D7FDD5AD599243579B8E32C1CF18136E22C6ED082BA6F96E0AEA6286A6154533F3F9F38D83CAC69890FA8A8F44F1E5A2C15D8FCE15E93A81A182B4E851CB365692B74227CC2580556825AE10E5D82835DCDA32DE4FDD09F9AB6E234837A3D97E413DAACB0EA087B820A45DDC4E82034A4E6CCF6E4859316759C1C4F4BADA77406572943D870289F371E28927C2617DF8E1875501B267F3790F2868A83DFCF08A57BC026620E692BD87DDD0E8C0C27567D12B0E3A4F52875C2E12FA0C92D025A515A99A22326B2A81610A738CA97153E0935DC14D73815E350B8AF0839A7D727EA19E896C54EB27E87B7CEB2D6F79CB2DB7DCC2EEC55CDF38191FDE70C30DA4AE8539824B91138E4FE572F6660E2326DF8B39023D9EA4AD717C9D0134BB2A4F04571E0099E3E24AB8D2E655D288AB85D57B447E52D37324DD408B961C318D0B17B3427C9A6E3D06BD5B970CCE4D4CC8B7A8E5870C3853A0EA5C92350521544FB2DB7558832AAD076F3AEDF42F5FFD775611D891B1B77BFE6BCEAE2F1F838EECEFDCD69C9DBAF0BDA775DA9B2FBBEA92D66C7CF8A1870D372DC39D6D04D9EDACDC7BAFD3CF78EFD6C7378E2E1BEFC6516B66CA747B2B1B4377DE7ADB37AFFCCA415D4B6359F1FCD964AA6C2A7EBD36157777F6274B43A313AD99B8E42781B7B5DD5F3954DE39D31F0BCDFE2B563EFCF496D5E5EACA657B6DC1508F8DFDD92B5FF1B7FF707D27B5AC8B496A3A5ED6F2AD6B9E25791F032F8339502957D82C64B6355B0AE7B2AD7C77379D497307A3814DF79BDFFC0653C934A11B06FB030F5B98959A46B5D9EAC0C4CF6A81D748A271E3EF6BD2BA67867D7FD80B4A9997E475C05807B6419252AA091C78AB806137E0C772EA05C6B37CD1C6D62C95A0BC8D3F95DA97EAF4BBADDC3386BD3CBADF9AE71D7DCCB537DF9CC6C9A9A79EFA777FFF77764914095D37512A18018524D6060B55541592163DEBCC7CBD4BC011F374ECFECB9F557DC46B3EE739CF79E08107C4EA2A24260D7AF1342C3A7445DD30AC5B3C3C43719882BFFEEBBFBEF5D65BF157180DF890A5C3AA53606AC98586B9A1412960D59EB9A51F544F448AF9059D0E4B699821F6169013F80E452BBB072968AC56EE2CCAE72D5C9E225E6D803C640084C5B4B49C58B54EA098520A5531B0DF65225537CDF495CCA52CAF35E2ABD2361760DD14149A6EEB9501722553006D0423A246D1FE518568BA3BE674CF299A768B820451163B1D950A6B52D5B18063316005DBEAABFC0A5873AA898608C6DAD2331083866B72AD7B7F701912339AF83A89304DD18262A167C643E81EA5E899A1615A14AA024A0B234FC5868D849FA55AB8C724DC4F3BEDB46BAFBD160372C20927E0877DF6D907273372CB95CD0972A1D1328F32A72C9846093D2D6E3C7E912E3235965A20509399A240994FAEE68F2EF1A7D415CD43F9880C6368FBA9AD85BA5D51AC70668951E7BDC8D1EA7674C07051D608EBAF6590E424F59C6BBE206F6472AA4BE3B8CB8A49B0558BD22EA6B05DB8ECB951C5C8B35001BBDA97E6302B83B5CBF0031E1EEAF6FDEF7FFFA5975E8A2764B85E30104A90A38E3A0A361C6501E7DA6DA4B898878721CB2A43266BBCF4B4B37AA5D15DED280BECA6DB198D6E9DD81ED6B3D5E578DDDB4FDAC79FFAF0B9A7B6BA3B82D2F27AB5363B353D940FE08B8F3E7AA6DD8227F7C6379F627B2378A63B3DBDDFE8F8CB8E78FE75975C7EF9A72FF6A3F6259FFEEC673E7E61889559A9F693DEC6D6E69543ABBA516B7B77BA3632BA616AB236D63CE12DA7DCF09D6F3FB56572B967F6C2CB6EDFD58AE2E5C34B9F9EDE71D811CFFDEF7B7F1D552D543889B3A9246AB3671041EB99A5A284AEA297C37892C5F1B5663DA7258E4247DCF25021BFFCE52F4D9EACA1F2580CA4B60705ECA7A65969CE76FBA997D9946FBF3F149883631B481F3566ACE4374B76D25BBD7E0BC662E04739041A16810FB7384BAD071C84E53C071CA450D250B4311CFA20F32AC67F1A0ADB33138C7E2D19F9EDC414647F73F978679B057658A0561E7B9B9A9DC10FBD7ECF337388D7A0E874CE1826ED54426A58AE433007D7869C36C83A9764C33804B7260F8341E57FFDEB5FA78427EE8F85B6595E49EC366395D3E28A41572A4AF2F35BC403D17727F73095F78D37DEF8F6B7BF9D713BCF294EA16A5092557AC138614271625077E2CA975F7EF939E79C43AE40B735855A7C9ADCC9663C898BC12D1571418E7C6CB12CB3F89314C26BD6AC218792EBF2EDB60CC90D650972A4E8054127ECF9C6F1B742E779CF7BDE7FFFF77F730818D9C3BD311F90057C20FCE9F8E38FBFEDB6DB2C955D9196A7C414FA948FA5D6541C1186EC64F80B17CA4FD8DF83EA99C13465FB5D8345ED8076BB61188A61829D8C65A60866EE7E8315197817782512A2812CA95C64CA4DDF690CC743700F992CA6B0D1C8A0C650FC1EFA92327EAEBAAF030E38004A85CC187EC13FCE65477D494B901901F1B8F234AA4995EBB9A5505CEB8A87BBB5F0D2400B434C94EFBCA9CA5561586CD9B2E5F4D34FC7BEC575F0B28CAC4ACDB830349CCF8EF45845388116890EA667B01BAFBEFA6AA603F4392E8239623DBAD0FF842D7CE31BDF78EF7BDF4B19A4C6852CB976B1D69C2C02CB859624AD18D1677818F181B01B20B10EB8C241071D04139E806A15101367CE95A3D9E41069F607A0EF66F16C45E6709B1B07DDADBC328D54760BC68672ED0937036A6C454F29EAB4861A9599560FBF0D2D5BBD6BCB0ED35C7BF41BDE08A5FBD8D35B1A23CB3B89D7E9277E589AACAEACA5B3A5D9A7C6D3ED23BDED3B1EFDF5E4C62796346BBB7AFE81071E9864798D409E1AB45AADDFFBDEB55FB9AF1585CD252B3BBBDEFA9263A666834953AE8FA6A3FDD1D9F6D3CF5F5A31D3C147CEB9E20B5FF8F892A18EDFA94E443BBD5ABAB3932E1F5DBD35DB545A75389CFB1595FEB6E97447BFB3EFF8B24D3BB70F8D8E6E9D9C4C030F62A9451BDDB34E709CA509659A370777567519B1429C417C02E9C492480E3B56176BD3253DDC7E507F940256F13A5D8EDF25E066760DA7DE8199B736811AB6ECCE98B9B864269210C60EC47C2D2C599EAFB86F9B38FAA69A9AA120AC87E534CEBA498C933B26EB98B86D82AE97CD04FE54904DC3E94FB218836E730273ED63DDC02F6C688C9E949312856E71ADA41039C0294C4E3AE9A4EBAFBF9E182BB6ACA763C05F19975295C140B9A652B002A30C2CBCDD8E1BEF4EEC154E932BE982A295E452CE9E1397169D91160A798579DDD0311F8FE62C8D604A03375A207756941DD4B5CA5569CFBA1689B86F598FCAE1554855EA5CBE3BAE8F17578F3B7715995C79B31F8626D40DC7CEF996B8DF473EF29175EBD6E14157AC58016D9F1574D2A2A5C6A81D7CF0C10F3FFC70563443660A41A284FE10453055A9182B55E321D5A5D211333FCF472DEB862044696D16F738A1097EF4A31F5176D3D0236469E07CFDEAA2AB0E3DF4D0871E7A489D18984AC9E6379697432C1E416522599AEC86075DD605167731C8B3877208E54A19873CEFBCF3E00C9982E1C82F9ADED0BE3345390D75834AB44D5157C36FD1EB15EF74565050B93B8ACC65DCCC2AEB625081F0457E9116B1FA4A697608FE320EA78C123FF895242F6AD5E20699DDF1E4E79805E2158D138C5DB81BB990F06C0C03E0936BAEB9E6CC33CFA4EF8B8950198682486E3F705C4D38640578F50985110504FE7FD18B5EF4AFFFFAAFF4DDD558DB8D121122C080D26E45D2EF95FB62DD7279F84C0130A4C4C4C569A7BABDA8CDFCE81C4EBB64DDE73E74DE79516A96ADDE67473B4D5BF1ABDEF1DE47828360F7B055146BC9A0512C5561BCBD3FB3FDD907EDFDEE93FFFA6F5EFCDC030E588B77DBBA7973BD39CC6B421D58D04ACED06EF1654BC71AA5FDBF79D547DE74C20BC221F3F066D39B364B6DAF78B3EFC8F2DEC4B6A60957D4C64C6F7B23ED2E2FADF4A2DACA6796FEBFE7FEE9B76FB867AA7CFFFA3E448C09FA66C2983F39F899BF7AE801AB6B6AB5995E67060FBC74C9933B262C9BB26F53BE6966FFE7A6E39A17DB91C068AB57AF86852A6F4CD13861D7B11820F1E906FC0FCA9038C8FC3AD3315427A61A36E3749FD4DB2F0896662648E304A3E5995E126626B6E549F645BDFC25ACFD9006A66AFD60B86EA61F2550BAD8B17D936ECD0C2C5F588870575BF87A66288FB22254463B8FF6345EF6DE7BEFF51CD83F253B5F567B8D883385D920CFAFBCF24AD2D468FD981C8AF1177FF117B09BA5C9949372B9ED4C1107CA165014FFDE7163EF73BAE0F080EFBCF34ED6CB50465149AB4B2E668A693225CE5831B55B9C8D5B83601C6A5899C27EC110C59161809711633544E22A523B5E9C40C88E2908C5E46871B469AFD326A3DED568107A894572E28927FEE77FFE27F3F13828585CD94599A6F2D4016492C7582BBE46D3D2AD4482447BDDEB5E87BF7EEB5BDF62DA8F46A51C05E320939536A0FFAE80096F86CB2A89CB059D383DD7248BA57818F716E6991D5D16536024B996A054C8D7734A7DF403FC098A572E4A35215E88DBCA1CCE0A6E75EA579A05CCF02B13C997A50E1603A5BEB267EA32690EFDC00A1C952C7B7921D0002C8845B7AC32A27272A32E14EE035C25AE63AAE7098B83BD375846CC2828953D351C465849043730659C7C86EFF4D066AE9A8BE4F9CF7FFE2F7EF10B5398A5C6A12BE24A50DC854D05A002319858B8C4C9FB054B14334CB4DED8DD4802976B89A6212D71E160855C5385F1B7BFFDED37BEF18D0A8CB34A92490DEE907DF7DD97F4AD9247DC785941E8ED0EA09B6ED7F17B1530D7069C4E5C8DEF0E5F019EFD85175E68722B5BC5DFC2B56AF7CE13945936B664A8D5EE6461AD1D6393D70E3EF655D5A125CDD6D32B968D675137EDB5968D364DD4DEB165D38A654BB724CD91E17A6B6A62666647A35A9B989AE974E3952BF77AC111876304B08466DB2D367C7D6AE3C6DB6FBFFDE24B3F5D4D9606DEA3C71DF7BA2438B8B6AABEE3E9FF63BCBD837863DD9865A5712FF6C787D2DE8EEE41F57D47FC99787667AD71509A3D5DEAED28579EF558F248544F6726D64C79EBDB19FC3F6CF0D2AE7EB47CD5B227376FF77CD3F3ACBEF2F2459D25BF1B3DAD733C099E0A26974B6B70C71D771C77DC7126C7AC52C8C890A5A58861FCDCE73EE70A813FF0F0F34EA06F7FFBDBBFF295AF48B8DB29DE391124D128E4E9FFE5EC4CC0E42AABF4FFDDAADE3B7B48C22661DF6415450671DC1D1C196610044431AC910041F65D2024806CB26FC230880828A088A08038A3A322ABC08008486411086BC8DAE9ADAAFE6FD52FF7E5F4ADEE16FFF5E4C9D35D5D75EF77BFE5ACEF794FA93C453A5207AA81B71A2C97529D0BBA5EDDDBDEA835CA1AFF0FB4D61FA75C6D7000D4956EAD374BD5529A9F5AFA6A95A5D5DAD2BC9D439611C01C8C36ABC5A689EEA3C08C39205C4CFC75896B2D59AD51AA14E963014BB363D9DB16B9187C858ABB940385D0CD71E38D346F0E413B6AA821E95C6881E87A57381AB59C3F0011E72A41E4462D9023F9FAF10AD115262C1C759EB50993A30F9F74D249F3E6CD4B390648E25A5F24680F0BBDE3DB6E1728D39C5FD1CAD59CB3367213996FD8E594DEBDA8065DF3939FFCE46F7FFB5B9E2E2AE0950F62B91CCD258F2F0B0D0CCCAFE4288D892F5866C94DB80BC0E9B124ECE961AB69B5CBFFF33FFF33E52859D75093D5487937A8D1259A949674C60B2FBC80EDA3E976DE31A297FD752EE8321BA62942827D0E992CCFB56BB7CDE3013314DA22CEA9F7963DAD51362EEB17F9F334B6A38F3E5ADB25F68A77D3C6B3CF3EFBB0C30E339574CA41BCD2C7471C71C429A79CE2980F515FBAB379B1206E4D8DD8831E8446551837A6F2D0BDF6DA6BAF3BEEB843979563AD53C412537EE7661810C2617F50A4A45F09FFC6AA79FDBFC30E3BDC7FFFFDC0E323EFB12EA59FA1D4D753038C2CE5B45F6EE6E5780C27440FA8011369C03223640D888C435580473971AB8FC1C3AC99D453D8DA356F0C2B851C89E1BE98D3A5061AF61CF67934B09ACB33865D770BD042F9168682ABA531296C8F16701F7A8DE9685DB6BCB74AC8366BFFFA2187B78D9DFCC49FFFB2FEB85A394B633ADB06562C5BBAF0CD555799581B90B2AB0EB68CEB1D90335679E16F2F4F99B6C63B8B96748D9D3C5049E3CAF50AC0AC51883565DAD459B366690EFFE737BF1EDBBAB0ADEDD3EF56DFBAFA9AF34A6FBFBBF6F405AFF46CF5CA823B5A07577BF7DDE5F2DFCA6D63ABED4FB72EDD785C7A636979F5CD3B524F6FDB6A9D6BAC5D9B347FF9A3935AA72C2FA56F1CBCC789175EB9BC56A7D2A8B49517F757F4437B774B6FDF601D9F5D3F330DED3B5823F25C4FA936CE1D69FE1933667CEF7BDF93E923D3D01695A317262481F19F988D96188FFF1FF58053A049A75FD6CAE857D6926AD5B654D5969D9465E36AA531A9DA99CAEFB60F962AF5AE099D39CF46E381527B65E5D3B43402EC3DB506BEAC9C1E2BB5F5572BBDD5CA0A4071F2FDB30604A4D267B1A30D0608401B83CAD7B80F0D5D24009B72BE2A82616C1BFE776A26E5C59F84C72431A472002DF2A4054F97604FF4806B4399859A5FD8FD044D89E25ADBA5DCB94759C413870CC117426B20A60AD16FCBD588B9B371800D4120935B63E53357DCE8E31FFFF8AF7FFDEBC83AAC8B40BCC35D7039489923F38DE2B61026CC800AD0277529FB60F16179B91066A38D367AF2C9275D05531008F53975C3617B81F15AA6C4423444923396994261AABB521E61367875EEDCB973E6CC411C93E7D3ED20F923CAC49E30C319B534265624D0878F32ECC26B8AA554183FF146FB3469A8EFCB0FFA8C565AFBF580030EB8E9A69B7034638D5DB30035790A81779E5A9BFEDC73CFFDEA57BF7AE9A5971E7AE8A129EFC6185BE099E6228DAC83AFBAEAAA9933679AFE0DCDE1A2755D07BDB8F1C61BEB52D3A74FBFF3CE3B3D5A3D88B60269069C248C0F7D40C3A3A1AFF531711EF90DF7DD771FD11E93B967792741C7A2F5D75AA39A8872DB3A2C368F423BB41B39A118AA5E5A5632AC1C2A5405B56A38C7CED3F804FABEB1EFC5165B6C21694B1F4C2738B027DC9E8C872572A3F1C86439EAA8A3249775350083FA8C9646FEAEFB626DB6D9664F3CF1844F8BAD5452ECA4936DF794021F99A1E9661431D503DE79F34EE3E7519A01D84C4EB94512AB35CC4AEDFCB7456144CE571ACD66CBA56A7B4BB9AFBF2E26AAF5BCCC3716F6B5620D8F1D3FB1F1FF04244BEDDD57A74E5DE5DDC5F2427B071B6265D1A225E3C68C6F2FB700BA696B80C3E79D79066D57AAE5BF4C6EF9EC5DBFFED140AD6F9DDAD6D5B7EFEF9BD27EDE2D93178E934735AE6DB5A796A68E850B376B9BFC9B29E5C92FDD38B77DD96B5DADABB70CF4ADBB5AC7EA4BB67AA3EFF17275ED15B517CFBAE6BFF6DE7FDFA9D3D77CFAA557064B69F2AA937BFA7A572C5E9E5AEB65B3A58602AE0D5609C89202364C06218010D47E26D3C93B2608C456F332B1971068FF1F0A98D823D7077EB864294DC0AA2D59EAAA56EA6A38B58C2FB7BD53E969CF5267963A1A5D81DB72B6CC31593D515C656DB2D28A4AB5AF561BCC6A0F341E6D70658EBB6145D559A2533DA8DF1086DA09D3A64D735D1C2A24E545103127CACFD8A6905E4100C906367632923DE97DFAA6571B9DC1B0A46B81A0DE5BDD9B3F5A96A3E4806B39E12BC06C833F62C315009B04A8C054B28EA4CF5CE8D8ACA8FCC8294F4D3A2C6F6F272EB444841ECD4D2CA0C1816927E53112C9FF6BAEB9C66DD6BEFFFDEFEFBEFBEE1223975D76D9D5575FFD873FFCC1690E63D0DC83C70130B628082F5B1229A4F30AA0EE6172C0466A49CE6ABEEC0641454D3B49C332D16D960238DD286352A772B71F7AE8A1E38E3BEE8C33CE807684A25544248CE1F68631D9340EED09A2223A5DF296E40DCF9F3FBF50AD344AD98F341F9DCF292CF1562B6C0E5E38D9B159A1D606A7301B5A0CEDC3ECC215F656D43AFAAEFE645564CC48840D4770ECB0E347991D7BECB1575C710591347052D82591FCD96152D3B6B92964CA1B44E295F2C8667D72F1F4B6DB6E0BDB94DCE5DFFFFEF78F3CF2882B1CF415B4B8C1D20E231702F2592866E54D742AA372F95996B7CC8A9960FBB8AE07230DC329F2FF071E78E02DB7DC82A74B88897DC8033AEE82F1A7B9822E4026D191471E49DB700C1AC362ED30792A3845B109B92EA5E9723B8742C2A694374EB1552113818B10411976BB8EE481D572261323F84C4812F3CA5C5FE61439A08259597F475E55B9D45E4E837D7DE3BA5A56F40C76B7A6DE81BA32686FAD239BC64E1AF3EA5BCBCAADA5D6CEAE254B96B5754FED5BBE3495500183DAEFDD1D1DCB97F6B6135E4BF5B3DCD3D7FFF39FDF59AFADD4665BB3D4FFABEECBCE3E60D96A8FBFB0206DD49DB5B44EDB79BFABDAC7545F7FEBB9D6F1D5BE6CCDE5958F2C5ADAD296551FFCEF3FBED136F5EDB65FADD9B1DE5FBFF7E5B5B2CF8C1BF3ECE281C51DFDD35FACBE34D088B8F69652E7C4EE154B7BA4A0C68CAF933DE9694A0D19552F404A25CF36DC0B8E393583311D83F14AB14388EBE84F9151E77DBE704089097130C9074BEC57EB09EA527D7095C1F6549D90B2F12DED6D83BD9DA945FFDA53ADA5F12FD5693A2AFDF5D0724902B8B7529588ACA4AC37D5FDFEE709B9670D47B6DA3856B55ABECE55A4E5061B6CF0FCF3CF536DAF3D86BE8934790C353E9ACD35A2508536509A164E31B2574B7CE185174A02B8562705068814DCCDF70FC2420BC405B2968AE8CE42DC8E37258DA57AF4D4CF3EFBECB0E59A05F9E95E64A82404D1D4A953B55292EAD007E9E92EB9E412CB28DF5D7B43AB89B8DB6DB7DD7EFAD39F6A6C85E6C118D93A9E68713B0C2860B696BEAE61CB77927B696735124723E2B485B409A5A15037C384A0D96492DD8458B578D63159A83876FF7613699A2630D6A871DD484EA44782C1431739E490436468E857D73BEABE525146C4452986F4E7C9E90F38ECC2A3176DDA3873167746B43B2084824102F7D7141C31B5500B0C0FB22EB5571C7376D7207C441ED6AD31A3898A1A4821DED8FC02E646FE18BC5B0A2821363134179C4F08E73475981A11D69872CF5BB3AA3BCAA6F1767798AE80A5228A6BBA50D72DAC6CDE9E3B79575E79E561871D868903A6CC6D3D5826D495B9AC63A494222536954B95525EF48C94C1DB00B817ABF13C4BFA8CBEE546DFFAD6A9A79E2A75EB4A4794D93EFBEC73E38D371AB6E6D6CEBC8CF0D2A4E92BCC30FB96E5DB6FBFFDAEBBEEBAE9D3A7937B662381464629BA409905BAE1861B4E3CF144F9135815CD10E834AA024EA1AF03803E4DA34642EA87280528922DB6D8E2FEFBEF8FA7377A27689D7ABC54B2A394EA0ABD21E277DD6DF7FBEEBBEFB537DE6C3402A86727DBBBBAFAEB33D636902A13274F58F8E6EBA5D6ACDA5FE7C32BD752B9E14EF5CAEC2B971E78F821DD5A52A336BEEBEA99FB947A5E7B74711A3F75CD1D3658EFC1A77EF3DB979F6A59B16947C760B57759A973EC05DFBD7E45A53B2BF74E9AB8E4B8EF5FDF31F50B8B1694BA7E755AA9B26AE7E0C6D5D26F5AAAAB9727AE78E3DD77B331EDCB07FAA487B38EB65A4FFF84091397BF6B105656ADD9C77B8F22B896D76F6033C1AE0A6ADD936982FB949BF5B19F47FA475E3E1760F750FF2B538C0DDC526A48FFD2607F4B56D5A19A5029B797DB3AA45007074AF51873E3E8D7C937AA1D6DED323017F7D5778C0C3A3D59EFE0605FE3130D35FE1E2A47764F7B6B1B95395AD3B5D65A0BE5446AC33BB0A080D9901CC6830F3EF8AAABAE82B854BBE599679E01901C396539473A14D2768623D926B61F1CC5A0832EE9EFC11A6AA12C9EB2B1C83305AA8E224680B79FFEF4A7EFBAEB2E1BE87A7F975D76914B80148DF78DEB125F0C9B1261560AE12971BDF3CE3B5F74D14544F25110FAC1081B7F9D2CB5F9EAB1B4F4B386AD9981C1D0063A37420E584F43C6E0FD69A05CAC92209A3D12B82CF301768DBF33916EF9423495E21CBDAF71EB6764993E5C6DB443479A541B5C92D2107A30A21F48375D478739CBDB3732447E96E542F76639CD279C700273917205ECF3338A07ECC6AB7E137DEFFD5D78728296EC5D9A52B17ED5A1CD74539EE4DF6CB3CD9E7EFA69720CA43CBD351DEEF6568BC45EE43352C3221989539A44A9F919341BDA2BD204D2790681174AD676DD75D7DB6EBB4DA74B13FBB5AF7DEDACB3CEB2DCD1B63BEEB8E34CC2C219A0541F880D1DB3750B798414B7E047D6F206C62B036E0D2A1C6B9A8B2FBEF8F0C30F67D56C9C11FE82078A5DA4A770BC14CB89E53375409677352058ED131BB306963B98BD461E48DD1E7DF4D10622A2A75D4FC554CB8896E8F19FB057A8764BB9C7C0574C06628F47DFD2E46B7E224B17C23DE5B0C68841939494B0C0439A3B77AEE6E7BD4315F6EA48216826C7D287B6A986B3B9373026FCA69B6E2A9728EEE15A5EBD3DAE3DEB1DA87717EAED1B9482ADF5D7490F75F534D03F658D35DE7AF56FD3565BF59DB75EAF0CF48D1FD3BD74D9F2310DEC4FDD1995DFD956D6814F55898952476A5DD1D7D7A1ADA8BBB7B5FEE8B65B3956C7CE386C6AE7330B16A78FEF72D6C05BAF3CF3EBCB964F99FC91E31E59346679FB60A97B70E28ADE4595F6775BBAA6F4F60EDCF3CBCBA7BDB255FF268FF62CDAE1951B3FDB92A6ADD29D7A96D795BF16A9B5A37569DF40E7E4712B962DD5EDD7FAC0F497FFFA4257439BE4654879AF852C7576BC878AA01ACDD5DB168B18D36EDD23CBC9C6903EEFEE78E91F79B995596C86560F8C657532AEACD4DADADED5D25AAE47640665BE0FD62AA5526B5BB9561DECEB2FE72255FBAC5BB2B1AB6BB094BDB56C799D9CB2ABABA5AD75A06F20ADE8A9F77D8A122CFCECF496F6A1EBFE0B0AD891393B3F00E9A9E72900FB536EA3C777107706C99A13A3927763CBF212C498034EA3EA60D3C294F266ED2BF767C3BC3615B1A587D421EC1998CEFA134820B73B8C69E9987689B96AC35D7DB471C139D480BFAAA1C9105361E3DEA16F7D98A4153D6DEDB863F0456F3316F2E87FF0BFB5503DA8EF9A988148BB49EC4754C011D3454205598FBFEB8027974B392D67A1CDA4D549356FC964E82970003C77474735FA5AA3D6DBDCF41C2DD2F82D792773FDEC7B8D7460223F67CAFD6F8E9FC6E30C7184E36BA5F9FA77BEF39DD34F3F1D7D13032CB18B031EB0A433E485A5406EEED5657F3012DD7DBBEDB67BECB1C766CE9C79F9E5974B2E703B23239C6BC4C888BCC1C46FB1ECAC600043A6DCDA289C04C65CA869D6F5B5BD6C47F32CA59C6DD5148631A7EBBE8460EE318FB2BCC09C0C8246222547DB0663A34826C9EABCFBEEBB657BB924AC10FDEB6ABC403D7CF5AB5FFDC10F7EE0145D296F3EEF5C4E6C55C6D7B57C80DB3515D3A64D03DCC853A34123C5742177CB86D450E504D32A0A8B5547119ED82CB097BB2E30CB6BEA8D3B738B536CB8941BFB6C75CE2191404D2388747BD2661D42CBE2C3D9B367A137D964937DF7DDF7D8638FF579AE05BA224B1C4798F4F98D36DA486EEECAFC6E1E318A666B0CDF658101DFB6CB4AF32EAD8CBA0F34DAEEDE7DEF3D48A2E30EDE6B49FF925267FAFCC777EF5FB241CBE4D7EF7CF0DE35D738EAED71D992BE3726ACDAFDC682C109E32674B4BCD9B6E863CFDCF1B954CB3A52B9D4FACB9E8113DABA9FAA2CEF1A2371D1F78AB497FCEFBE9E9E8EEEEE5EB9B00DBA985B6FBDB56D456FA9CEF451EF2F3490AA7D957A07A404323AF77DA9E1D67ED6D3C9B2B78395F2708877B8CFB89E941E004384DD708CEE05A562FD8124F4ACF2BEB3AA4C8ED334DEF07CD2BD2F3989D4E3AEB7DE7ACF3DF79C3E49057381C31C6DAAB5A020CD1556A3381E3ECEE670A57D38C50205062817525E71C515471E79A4E1CA3C0B848E1AF6861B6E28670311E4E8AEF96E5D8AC9C1E71045CDEA7930AA9400981E99CDE6363031E504CC883D499A52F7353312A2353A66CED120FC750A3466B3F4B8B1586D685307648253AE38A6D07AF02086CB60D0E88206E2B013C0E850021A359DC52F4BE9F87301E399F28A093716AA072323880B8FD35C5F9812318D6C76081F75EE94055A2BD33915C20880EC41D29A76038B062E7BD6D23EB7AF40E860948D683702CB8EBD72E28927DE7CF3CDEC78A6869C90C1697A47DB5D4794EF3A85C9921BFA6F70C151471D75F5D557EBBB11F8A38F45DF9491B86B34F954EA79E23250450A630B52DED953AB0D7E00F14B810D8D4E91FBCDA2849C28E1F433CF3C73DEBC794E25E0497B89110D9C076F236C43470562C5BAAD511C91AF7CE52B3FFCE10F65554054E998367869F71E30FCDB958B29A7DF9A33678E7C591357817807EDEC3353CA79955D5565C50C4681C974F5335549B6365201E9D0D0E56BAFBDB6CEEA830F3E089D10F841E690E83414B2D8E648735C07625C548AC72523984650848D2DFF03F606F062B16BA1F11A6EAD91426F474B5E0B0EE6900F4024C4C927BA6E3A78466B4A38CF8093D6B59C668E3B5A3720C8DE633819AC37FEABEFFCD6D665CB97DD73EFBDBA91D6BAB658CAAFFBE8130F79F62FF767E5D7B3716FDE7E4779E96B170D0E7EACA3BDDC238F767C6B7FCF40A53E937F4A533E937A577495D6E959F6B731137B972F4D2D95AE81C1CE3AB3F292DE7A7F7A3D57032504E78CDCFACEC1AC560F41D7A14B8D2467BD17425D9E0C56A83FD47EB6CB0272C78C4E6C09BD235D2BB1EE744F2DA7F88F28C8349C0317B3E92920895C60EA8260A79034868B2EBAE8D0430F050941EBAA94834E225088D498E941B4FD24C76A8197D75524D043C6A03A6647418916E49EA504EAD608C172E8096F191B632AD40268BA0E3EF8E08B2FBE181F89ADBBD75E7BDD74D34D4C02A516FCD56923C4B24705E1924B9023EAC550099D29CE8EA9512C2B104D2824742143BDF0C20B67CD9A65EB902D8DD677DD8A260DFCD4ECD9B3E5475143CCE3BB66A159017B025DB66A0B03CA681F6ADFDD855598E08E2FF22D1BC7B138C8555ED8460810F6B0C3811ED87BDF64E200DF97F2AECE60A4E350528EC9245F18259DE5A6CBA7B06EE01424B3654961EC2E396D0DD7A8547D405AE4BCF3CED39E30A267D88D88F1B2F1C61B3FFBECB3DA4FD291D676AE7861C750136553EED4534F3DE5945362C1FEB00A38364BE64445925537AE6175C17339408A94E77F0A661C353AA3F122465A10070E9B1778804D6E35AC02B6856BF70BD3981D89794178C7DDAB5829E2197EBAD818240B0D955935A41EBEBE0B065054EE225C7822D0D7664FA57093C0BBABC9A58FB5D69C1C1367A6D01184C3401E451BF2A5975E72F5B335960DB5E6AD52CB29F4409BA3C938428CD6640EB89B968C9A968F7EF4A3BFFBDDEFE2D54C90AE47C0642607A9EFF2EB0D37DCF0B5AF7D4DBFAEBEFAEAEEEF94023423068D0013447A325B606C5DFB558510BA5B4016E2A5C8CA8865E50AD6C1C62B4449940657B27F2C5BD13379D2E48B2FBDE4FFFEEFFFEA5AA4B6A2D4AD25E97FF14F69C5DB5353E78BE569CB7FF0A33FA4DE57DADA53BF4E58A55D4AF3DAEF9D73EA49472F7A5D9258639870C9B9577DF3F8AFA4D6D2B2DE7163A7742F59FAB7D52734EAD9AA15FAFB3AD85C6E8C360DE5788FEE26EF509E7EEDB5D7EEBFFFFEDA42A951BD566070D384E87FEC30192E10B44506B1B8880E0916B42F2F9C1E6DCB73CE3907BA508AB6F7DC734F1D5B0434FF47A08CAFA91F0082D1881E418472D23ED765A581B476BA854D04FD40AC8B80A70FF54820B252E8FCC1A9F491B4F64D4323790CD5DBAFDE73E98823F4742001795307444FCAA1003C1B93BBBA29559710BFFB2E5C5346F9165B6CF1873FFC0158A851AB8E00A3442211A191CFA67A36AD15CE181C521AC3698D17F668A1F227B2D6FB748CA2804D228BD2C5BCC0C2367316513DE7AAB8381A3AE52C0BDCCB451951395A01A3596C824352AD3964E1EA043B2984A0535EB582A43652D407955381FC25504050CE822C05A7CAF077AEEF1423E827A216E060B3BC0C06EB1E35F69FFFF99F3A6C3C0C95F8C36EC41861DB72CB2D639149CAC389EC037F858EEBE848C8CD011CC5CC5F2C71A6DDFACC99332FB9E4122AF34C9C843DC172CA283EFFFCF391146E12E03801D3A28F012907179042E957296FD18C243DF9E493D1499A433D977C91B973E78E5455EC4C33C13AB62F019928A19A59A9BD4CF85286F5C6E9B502AB063ED8EA50D653D84C8D5C8D5A1C7F22E53DA8F5085B6DB5150D2ACC89A65B53086E051C475860FBE24D7ED69FC8703B8247C2B880A7B3371F6B15DC82C2CACF941AAC38661F907ECC50AD1DDE27219C5A5E164C93D1AC4121A22FEA82DA09FA22E790398FA12AFF1C4B44341EFD4F7F654C6C561F260AF02311EA68EFD9146C44EA3C816CA758B0C1A3B1F1B4ED19EACA46670D52BCBEFE3EAD7D477BC701330FD44DEB519CDA92E5834B2AB59681A563AB4B6BD5F2ABCFBEF6F45DF73C3469C5A49E5A5A75CA84850B174F98307E69DF7C29E3556A1FAF4DF85DCFD271B5D4B574F02DCD757BE7B49EDE775BC6F7B42E6FEB1FE82F65254C5E265C4EE15F5EFA2B31CD3A2E49276EA02E7C2943CAF2AE9708388E8F7E95B38B414C504D3386499105F2D414729F8523138F796A8A4513B8E2E0D07B27E5857914C545218E11E9B3C075288867AB2382534EF9A7D95E6FBDF5B46A6C3922701277FAA4BB0A462CCBE8096C441F86B5F798C39E3192646D8156803E5D33C96922E2AA4F125DC395D4F8E7CD9B77D2492711B6D4F82582EEB8E30E083D307669EA0A5F1BB3C441269F65D25CC46CA9D189CF2CBF05329FF8ABBB1239A568C888A422CD4F7D82ACDB34879A5BED0D074B4652C05CDF4811027EF178DAAD926F7DD96597A1A19DE00014421136B43C9041D9AF2D28E018D6D203CA28E72CAF240989D6047B17E311F27A22AE0EA7783939BD24E41CBF45C099AECF8D1521C7001FFFD9CF7EF6BEFBEEB348D5826913A0D578F3C4134F94EFCB93E82EF25365308EE201E37C801AD3451CD884C48305C09C417E696C16790E60326097BE6543A9C039CCC43D7460F08911AC7C9183AAF775775D70DD75D7D577A5CC4C1740CDB4BE15034A3A065AB34278304221E80E66167552E3265B29685FE818192A4B6E14B1B7722C0C40DBB976AD5075DA2C028CFD436720DD4C64163525366C61EBB3C108CCEAE7F5D75F5F0735BACE2D431BE8A65CFE6639AD8C0E0C54245FF8C217EEBAEB2E8D811096D1064624149C60AFA96E044927A962BB26DE09C47E38F304C458B528CA4BA12F217B5B42EA3BDFF90E9005AAA5F5C5030F3CF08A2BAEE0297095F09B8D87E47965D49F70C209718D484BB3B58E3CF2C86BAEB906A38440375B9470742CC6709D652162590AECBE7E275A2126616D2B95A57DDB5ADBB4F557F4AED864D34D3FF5A94FD5DB63D726B7748E2DB74D5CF2CE8BE3C7BDFAFC5F9EE8EEFEE8BB8B56FFF12D470FD6A4F5534BA96DB0DA3FA675AD6C704C5FF6F429E77DF384E32E2AB5A4EAA01479EA5DDE56AA75C9BA2EA5A51D6D1D3A293AF20F3CF0C0DB0B57DAD383AD592A9575D3D654EF865B1DACE89FFCE3F6A0309C02F0C1A19694FE5A3A929AC36F7FFBDB5B6FBDF5A38F3ECA7672FFAE61A1E969680D8FFF6A6BDEA6DE8F7EF4A3BDF6DA2BA6CC35639A43E73BA2F6C5ADE96EBCB4D6CE98663977152B1BD9065DB808CD80ED635B66A3A4DEB2C0F41E49704DAFE1CD602F369229A6DC464115E13950F48FBC45B6BBBD8FBF2E03FA739FFBDCD5575F8DCAC1188D0CF04C82E13E51B960E392EBA14E04416D3C0D9B19E3128E1A421DF066D80DD3C0740B43AEB8F5EEBBEF7EF3CD37DBFA1F56015B1C6924FA2E21461C59C2005A59EECE9A12C725FB46529C263D48D7C289B354249646218679213578D481AE3F67CE9C830E3A28CB72BA3E5C5E965F42412A104F99F83E53639A2E7D5FD3B7F3CE3BDF72CB2D9B6DB6D9934F3EE99CAEE3D2BA202B8AF940852E9BC07B2BB68B421E1930261DF6FCF3CF3B926036AE613762CA1B40A2AB6C52902FD4836824B2539C18031FAB3DB7EBAEBBFEE217BF406D63813687A02927D7F47DFDEB5FBFF4D24B5975E8365DB4C34870926436CA4C4B21D6EF34120B0C75A22B04CAA11F3093E06E1BA03030A89961DCBB611530C125C6B0F7DE7BDF7AEBAD7A2EC223A82817B9C7DA5CBD36DF7CF3175E7841373DF8E083B5A06E84599867061693D936BC20AA8C0D0F5C7E174D0A361B712DE20D469C5E78E185C71F7F7C6A380AD6257CD1B07C8FC41805DD88D8606A843A1C1D1A2904CD7CA6DC17C701A50AD9F11B27C98C998C8A0AD179F6D9674B3542BF059ECE004000ABDA5A1B6EB8A16695398F368DDD599398923CD699D2A5B07711CAB6E73CFFD59C9915F8B4B63A60344E3B079E6362D1DC9CFA8A421F71B092BEA6ADBDB7AFB7ABB3ABCEBF3C38901A36A89CF8D4DF521BB3A4A36BB59E85F54C554BADEDA9BF3EDA39EDA581855BFCFC9E1B5BDAFA16BEDBD33D2EF52C4BF546C27D529FD3C74DED5EF2F65F4B5DA5D66CB06FD98A715DABAC585E696B5F410EA26E752DAECFEABAEBACAB295DB06C519D85A32E442BF552A47A3554DD34EC1F1C122A60E4B278F48CA79C72CAB1C71E6BDF053983AAB6E2D4AF7295F449AF6C6157344F0B0297720FC221B020E89ABA8BD47C21746F1455161AB3F3BE16D71E790ACD4ED83388051F933543E741593C941238793452081A71E1C22187B8B0574849B82CD0522246BC092F93FA8D44F74689466609073E198F859B2701563BA2142EEBE763D652D2EE5FFDEA576FBFFD762A7C28F821A464089107002CC3E6142029E63F326BC61704F5E4BC78F66141586E5DCA0C6B59750A1CDB93317DF8E187EB4D4493BD531E01816C1FBA4EAE3E76ACFD8D084343F550E8A5BB48D7DC79E79D9E195F7365E2D681293DB06E2F11A3AB6BA960C2732346EE04FB81A39D05DE7C834DF072F43FF14650AC5C9C76F1CE014B8EE82BAE86E60AFA1F1C1A2AB3D02529DE0E2BC6BBCD1D6F9C12DF72CB2D351284B851A91877ECD75864620F38E5E485663E22E465DE700D588747EAD955DBAE00B351C6A18560E580030ED061D6AED2E4B0B438D6DE25A6ECA8E6F4E8DA5274D68C0D06A20EB6F665EFBA2D173A866575A1116616A11E8667A27F66D869E618BF8D02DDAACEF8055EE40B7C200DDBCE867684B4F969D652C0F006A0996D1BDBCB079E2BA3753803DA335FFCE217AFBAEA2AFC5A5D0DE3A310608C1365E0BD4F9D66957A4430DEABAFBE3A2C6CF6C5E3D18844602E2976544A7FD5D83875B19516FB04AB99B5B6C095EC933770FAE9A75F7FFDF5460BC682725C6DB9CE14B64A62AEB7DE7A2FBEF862A435C01CD430A89527811D4B35BCA5D95D3CA9FE97A091C9C5D2D79D9B4617DBFE81FECEAE7AB0E1AD77DEE6BB33F7FDFA9A1B8F79FCA9BF7D6CDBED572C79BEB5B6466F7FE79F5FBDB3B3A5EB9D57A7DCF1F31BBBC7A7FEC55306AA69C294B7162DAE337C541B5C13DD63C72E5FBCBCCE0B554D59ADB3A53C60783348345D5CB72BB7B532C27A41546DE57A119F40F61111D5234BA1122D2021455C8432424D9164BDBEF2D4534F4573CD4AB7D90F46B7156A6CEC01BBCF81FD5DC82B4E3AE924DB64CE7738E06F53CFA51FFCE03D6C740F058DFC1A6968D350DA0A9FA3E6171A1197DA9CF3A490EDCC18ED550BEC22F88EC6721A4EEC2D8AA033915F3567FB0152A4A7E63A24AD5D166F401F32846DECE60A4E32725E242D1D78232D8A7DAFEF52858129A92F9A139069C1C07256BE94F7F83186D1CA68941074EC1A9742CB6DD60EF56CCC170A9B1571961D24B26640EE16348886673A43471C9E07240C46D8461F93D7AA8DBA12B3625BA634B4AD82CD9CEF7EF7BB3367CEFCFCE73F7FEFBDF7E2EE10FD5B679D758822E2259B99C83BC9B9F1885A32E312DB488E82448FB6F5F9E79F8F0F4DB484F836AA9132B551080D62FECF2CC42E5AD507E44F93CBB1C03222CC7693B50E16A573C0DE04BA9406864127A12937D7D5BD5A099FF98B2FBE586242239178759BE858D8CAD6A43B4504E2A6A1202C4D171D217505384B23774CB3078C51864FB3C9269B68E68DD77594180DE44237A2D0707FEA49B7DF7EFBFBEFBFDFFB350DF5128CA488CD91C8EBEBC3F25F655791B3741F5FE2BD517F1B1EA94BC9893CEFBCF35C4AAF6B5A4E1172E41C6A6E310151CFD449A3985D6E4E7F4C62C550B615147096D3C8212C4A39DDB4361E99753C0FB8D8405D0210336735B958C48DB3986C753A371354AC35AAF55862AA419C409A3D7B36E400921D9C028EB72E42DC1E4668CF4F44693A897ED4514769836160693F3CFFFCF34E4662D47A32E33E41A5B158CCEA99679E79DA69A791A85B595EA8D52CD773818B9735A8831BA2BCBEB1176603A577BE36E3E0B1E33ADA5B174C68DDBC32B8666DDCFC579E7EB5BD7B45CFC2F137FFF857DD6DEF2CED7FBBBB6BE240256BED7B77ECB8AE854B077A6AE3EBB0E7F446A923D506EAFF1C23B194AC67731A432D97CA752C74C061999D1BF915BB8A31458523EFB021CFA82BEB0A1897C346A1CDA71673404465100B6635F077F16652E8069D421012D8A963CB9182B114DAF142AEC265F1326509CD9A35EBC4134F941DF6C20B2F7029932E8D14828ED96EBBC2E49BD3D0AA01CFAAABED8D24B005E307646C28A758AB934258DEE08FC83BED61139E8D7D50F05FD149B27165B9024D651B9B3A8A0000A82B60A1101351284559145C0B687A6B5012B1802281E3202E8655C0DE7BB23E1F78E081FFFBBFFF233D6FB58DA235352CB29A1CB6FB0DBB72077F0C873BCBAB04CB7963F56810486850EC6A238C4DB27275D1589C52A4A475A4C559015F37FACBFB2622E0298CC15642D702C0C69F8830E9534E39E5D4534FD5BD34051276E69F3294C9F96D2B12478178452ACAC2C6051F61154B3617CB4E6FCA6E8045D987D93452C49C538E94615DB5A5A4BFF5EB873EF4A1471E79C4DD791DDB27664060C45E5D4BDEFA10F18709A967778D7204437112DCEA2BA25B3DDBB540DD9542EC2EE2D1AA79CF2242D3C3CECF4821AF02CCCF2061C48DCFB9B763618DDC2DD8E85C1D802BAFBC92BF4AD06B5FCA5ED19F70647535B0C4167C84EE5D3848021BA3D270247CCA684BF9F81951E92782C19525B0D5283978C9259720D63138CCF6EC35359AD47E06C9E39867F5A4551B546BD688C6FF03F22225664186CF046885102BE2DEBD5948B51C7DF4D137DE7823D3154D1C0B472CF4886920C5886C85F0CEA20151CEAA596E5AF7678D621BFA76CF98314313A579636B699CB871B2D1A307E01C902B447D4D77A98A8C7D0589E1A9334144CA837BDEC3843DF0AE0A2DB65228AF4879DF657D580EF419679C418B434C67B7A08F0601B3842623FB43504123D191715F778BA3421C3B0A4042293102A46FC938931A6B6974F1DA6DB7DDAEBAEAAAD4C078534BE6C88A897D38B0DECC2D79137BD61DA31C2217FC518D596FEEBEFBEE975D7619679CC78FF5050613701DFB6DB5463B3B248CC6891B6A0FC1F5B858DE40D5B2D00911BFC51C7994997973E2F417206FCDFA221271D402151713AEF3C2E9D868A38DDC3E3CE5FEB1371E3F9842188C951FC483B40BE10D066D91B68A8E98934498655C79EBADB796A322C155C99BFA001A2F38DCA929FA42A6091B88C0808579662165C995054A8A82021E69C38DA480F1F3227E474B2B55C703E027595FC6D89D69E44C7AE01EB4DE04B8B3163A56C0B5BCEC645805038C0D2F843DC17D514B520CDABB34A9E5BCD9A44580325A26946B3AA9F6939FFC64975D76493930D5F06FEFCE9493AABB588D58A8CD4CF937C71D775C2D2F1622B4A80F94F326390573BE80AFF1AF2DA16F2882CC890AF9C75B6CB1C52DB7DC3292A21D6941DD8A231A07EE6AC01C4671A6F9D464CACD25B415C3B39E7F320E06844B57117172D7305259E655773B4FAB767C115869A8268FC8A31889653EB91A8B4844979F0192400FE4058D6443AE0DD5C8B51565A5B1BE78062ECA2AC40FAAA17919C3305711895B5D9608331BC33BC1406B4DE3BFFEEBBFFEE217BF58D178A586EDAF4156F36ED0D1F02AE5844195D04C020FB29AF7F0B67629E79D70B82C4F0D0D93FEF4B39FFD6CA79D762292848963DE92BDF6DA8B3A280DE0E73FFFB9FEBFE79E7B082DE017924005708478621A2D223DC3D9507AE1B8BD1D378A58106D15EA67A22D4ECF73A07C313962B83EBB91D8A9695528518DBBC8339985125BAE76CC31C7FCD77FFD9737271CBF696490146A128D1515705406CE9B3A28450C166BD2D731C22BE5902E2C784DB28CFEDFFDEE776ED5EA59F52E2AECBD78419E9431802B8607431B4067F680030E200CE96144A336DA0491D0C3EA5C63FBCC673E73D34D37C580198611453811D511A7B19473415BDDF0838674F2C9276BEF5D74D145D28E1ADE0F7FF8433D784C1231BDFAF5F39FFFBC44318101866414511492848B887539D96AFF5EA70C7A4B1B76F8DCA438E527605E78AFA69C0ECC6A98C5728A0DF46E16CA76647865A5A67AB878C566D59B8D8A8C6F9E505429D12490A584F2F0E7B4DEC077B39CDFBFD4A097232AA8411B54A58F7DF18B5FBCFDF6DBAD624D2558883259E80C3B3047008841C5BC053FB8DF3B45353ADEE604AEE574C72E18A056C4F034D42406A0EFE876D329541F3AD2580B1D0FA9E902B0862821EAC207D8B89C559F6D439C62C149CAA302B5BCEA3F560067D97BD0F7F7FFC208ADE46DCF6B39134BA4FB61B9012271B02585356C0B08E02136C5F41969E873CF3D577B5A7F922F8888C73A895CD044EC093C98D44292C251475A23B8E2D992D47B3D86CB7477E90CE06691F94B321AFA2A2AF6B4AC2472AA39ED286ACC7CDDF079610D14425EDE87A5BCAD21DA5D1FFED4A73EF5FBDFFF9E39D15FA5BFE9DB931AC619F5EBA506079ECBFC7174B82CB850ABB4725327C4080B30BECF6E0A5A1F99EBF3AEC7AC8526B21FFCE007255C747714BCD3D2EE67E5BA14FD558ECE934F3EA90D70E79D77EA2E50FEE290F91490B024C68E1E35E30128D6E6AC41944860DF08EBC55E7B6C7E9C6C302B7E9072682147DC9B0B1A4B911A4D2753DE708CE3E081B1EE4E04EA7FF686C5744C2D8D72640AC1AA189CB41D694E34AA8AA55A7EF9CB5F82662085EC839C02DD07D283EC584BDE95162F303542740618C7A4726968AB832C27BEB065669EFF6818C5106E96D3093BB1C524E026C5BA2C7F9DDE44A91135B1A41DC9032ECC6741B09B832C3E85A32F66E97199F2F5D75F7FE289276EBBEDB63FFEF18F53F0F76CAD22D3625837E671539E309694C05533FDC01E7BECF1F0C30FCB92B67CF035E3C12F85AE39B2961E7AE821948B239DC380149A0F736AAA96FBBBAF68D1204D705374020D07882F12871C755280CCA05BE8E81976D8610749AE98F224BA954600DD0C3B30BEA21B6DB7DD76FACC030F3CE026F6EE821E7B6214CE703CBAA5C0FC99F27CB66F0410B1B0A5E201C872EA92B854588BB415E3C06B24723266CC98A15F09E3173C2DF4B1A96A228786A39136C0EDC6FDDD856B96262DA15BA57D3B0428FE903BEC52E11353742920301DA5D705D75C734DA916BB380475BFFFFDEFEFBDF7DEEC0AF06EFAE215575C316BD62C295DDD11EA0066B8904477A639053679CFB94BF448E70358D591F0202FB9E492934E3AC97486B5BCD3976350DC1786D42CA7CBC8F26E0DD1F82B38DFDE30A07659596C6A9D086A46EDDAC6738187A7F974889807A12822D691DBA4F3066006B2A6B23A4BAE52830857A6AD2C09EB2D4907A84ED658630D9938061060FFC5D98EE8C8581B9D1A502900BD08E8425F3CABEAD877B62004FD3F4F6DAF85C2845AA8C78D60A26A5E11EBC8165FC70401B86EF16A1AFC2CEF166029E1A4A04BF953201828E534907F372258D80C4E06C79E4BB012B22536D964135260F61DB997A38329F76A0C96B6411C07EFFB1A8DE130A12BC549BB424207D0C4FC4D05D72B7A8DDCDD5939D35EA2A59864A38591574C1446461AAE54212AE042F036E54C7616208847623FC8225A12500284F0C902B92CCE40D620BE4821F6E3D88026507BFED9679F2D7483F55E25DD6EA00658AD880F20AA4A12DAD9C91442CB9AABCD37DF1C125F1DF38F7FFCE38F3EFA689D2BA6F9519B256FFAC75FBE8E6D25234239241E9629CA780624B8257BAC4F350EC892B470E60B0778D881394AA359D66748E31BECCE307064DD7F29925A9000E3A6003DD88566EBC60423CC481644278D9A45CF6794C86C56BBA4067C313334B3242F8E80E01445D56BADE37362739BE1C5FC04A7429F2F84809A17AEF08A8993C8F690F206537A5858C0806FE0B0C2C8CDC49A399634672C8572FB645D16C777DAB469C4A98038512A0689A3EDA494670DB49BFFF77FFF3719D91FCA42620C164F37364D338103B8744DBEAC01FD15001DE07CF0833C7E2493B3D7A5F53DEAA8A34E3DF5D458619982F786D768E6DB827F800BAEBB5C7AE9A5C71C730CF10C824371FE0D47AAE54012E8739B45731A9A85AA36113218DEE814F236DB6C237160B996423ED559610F09BA1BF7DF25B46BAA57607DF8F41A98AD527A75E8D6281822C058DBB5A164993EBFA6503506D3712607B491EF6401B40365D940A8C741461023A65D265E4861F86A91B8DBFC770E1AEB312169E1F86010D801687E453BAC703C4D470ABCD63DBB2C9A52A835A8E5D9599B5929CFA319F1EA75E4A10C7465D5087EBAF16535EF639F05AA735656FB7FCF3DF7BCE9A69BD0C4293761A37964AB944364052C4773EEDCB929F728682E42F24BCF224B0EAB22E5F677413E171450B3F44623005AA40609081B206AEE3B7DFA74506C2C31294BC9765D9322556438C7D9191986F4E52F7FF9861B6E70FC35E59835E2B284C74C20432A9A68AEE6DF36A88933239331A283034B068D85E3A01583B7FE79A41CEAFBD4C7D1A271690ACF40508510AE1E92127B030BD9DF9244679F7DB6DE0107AF8F515A078968ACAD6C5EB0D13DE0949BEA51B41153C2F574CA2AC6780956000071143D855C8BA489D6094BD0354BC4F468618BE42D58CD6C5FF30C63309AEC14730FB303E9131183165B31D9E039AF068237ECB56A4E1BF23E17AEF9E57AFF18D44A79584C4B23A5B5B2A6250700A740166DCD11F181A67176E92D813877FE907A3BF6D8634F38E1042A3E659DB845ABBE8BFD7ED86187C96906AFE832AA9800CE4267620766FD14C71F7FFCB7BFFD6D9EC5782E0BE868B702C3C1C8252E8A9D64628118DB88C6908508961CFD839144F6E0294EB098E01691A68009E1EC98A5C1C41A36B3B2BCA3733CB3C31E0ACF4C3CF54831139AA6C0888BC238F0C0032FBFFC722DB71E99E40B6155B70BA4EB1CA2476FFEEC673FFB8FFFF80F1F2266150B75EDB5D7C6688BB18A91C64610BBD4206C9216D720C194E94F288CEDB6DBEEC1071F7425BA4B30990ACF09A11A6EAA15993163C6430F3D2469F8CA2BAF909602700BC6D51D3E1C6E6512A21F3C929C8C695733BFEA0773A91A1D6D978353A64D08140BE778580F38DECB0D5AEC9FF8EEACDD461B6DE4F633519B7AF378A8605F5A4237B95843E8CF131444013B8A4B29A69F82C572B09319705D40211833ACD8895EB85790638B1183A0C0C1D534EEB1C71E0F3CF0C0FCF9F3C9E5455B8DBA67774F6795233E4E96A2BE8810A68CD684A088F79D76DAE9AEBBEE82C8D60C5C1E3C13AED9FBD39FFE64056C691985A17F5E29AC46CA01BFCF50F348AF68D1D472E0C9CC9933AFBBEEBA9443995268930E94DC5C80D43E450401273CC27062A4E5FDBF6A7999135A81AD8F1225590B63976599D98F7162304B51C0048449AA11B2B0DFB0F1C61BEB087DEE739FFBE52F7F49E8C37890180C8CBE292841E91B170030608E90D5702D102CA4E04FB38EDE556C3E820DC41252EE70E3408F545F38CABC455F81A31E63037E19ADA6BB473E7A9C7B2EF2F5AF7FFDFAEBAF77C30F56C45D9F4DD64A7A8C0F648DCA69B23B0EE47247F471813CC89BD9049FC46048EA1B46A73FC9789F376F9E034D7866523F7C5D43D2A6FDC637BEC1F6D3DDF1595D7095723C4141E5F32BD11D725759600D2BF083DA53FFC4273E217D405163EC8994421F9828925CEE8950C369C3FF88C7306E8096BC77276294F84D2CCCE3C5D3190DC799C550A67685DEE698658586547E52A9732D13D98A8B2FBE588635B97FAD2FF3ECD4899F6B58EF876382BA8A547FEC16875BA8BE73DD6396E3AECB8DF603911422E5D6333207EFD387D4A1F588FC8766D5253DE0A54749D94405CC636AF9A45C3512F81A4D4041DB37D691883ABBC20674B3026690FC1C6BEEB94896179E62EA7DF2939FFC9FFFF99F587315239400977488CC8FE178759637F3B0C7CC80091346051C0B2ED65C734DBDF9E28B2F72A9CF7CE6333BEEB8E3B7BEF52D04C54A0AC61142D023193408C668175A48AEBBEEBA7A5819AFE007534E57A7AF407418C34EFED5787200348422984C5395455FC8958AE07EF4C233C6852040BBE5965BFEE10F7F28A46B9D1C6156513DBAB23E0FF86988EFEFFF0B9C76FFA89E2B24D5799259B3665D7BEDB52C9B067DC51557ECB3CF3E7A80F5D75F5F6617FB8633663A319D7C0D9A8E6F6674A2DC132B350E7BF4258C328B78606AC05E8848648D6E24918AC55429E01AD0CA2869A2A02EE6C3F647CD94432B126D0849A5D8B411D412FA0995A64B69EBCBBC920F8722815D0FED45920F6C088D42252C22082BE526AD4B45390F56C02E8FB13CFAFF5B50D0223104CD7E22B887FC655D3033B5D6175E78A159DA356C4D0EC24E76E273CF3DD75CB562F1C77550F0B26A6FBFFD762DB41FD0C2977DEFEE6395D0FE25DA2540544E3BEDB4B973E75229CB4E8BE168E7C922834F04FB145A086311BAF69DF31C73F3598061479C4B0A4627014CFC305F87746FE47C8ED9BE58F7852F8E435FCA5BE0B17B25A430640B5220C2D76D8BF8B99047FA559AECE5975F76C1AEED0C7614359D8602301E52336E7F02E1B0FEA75B067120CE2F5D02792860748593CBA459FA93B0C7E2B19776D04107CD9E3DDBB1D318FE89A3E22CC8B8DF7AEBAD81FD4792DA5268F9C7E970DED7350E86893133C80D9FA3422C2DBE0A0A181B820A284291CE6AA36BAD1A0B5DAD526E5B174058D12066F56B392E3505B58A49BADA6AAB49D6BBF74941503B578A1502CD452DAFD4A8E5D5D2B5A1E0F08202D6FF5A0E9C07C69F35C85F21BA623F3B57DD4C305250C0CD29D1286DD2D04603A506C1B20E2C46A7992DDC62C795C1293786701220782905067BFC691C9EE86B7992E155B4A58285E46991A0D3D12E606EACEF51A9110B5D97453136827E76CCF01F12D0B5A1C0631F7B0462CC48F3839B15A746EE01C4291959103D60C65C8886C8C303E03AB1DE340597C24F6499455818D03201F0E6BA616610F2108B3F1B4D54F47EED6B5FDB65975D64E3C861F27DF18AF4C94D36D94456D8B0CE10679B360CD255B546F99375BCAE203523378B7DC0424013B1C61A6B1C71C4111AB6E4548C3B7DE4231F79F8E18723314D6AB82C6E8EA6D7565B6DF5D9CF7E962A2047633C4BA3AF6F3C0F3C88D68809370933567944C9392651CB99777C66B246258023AE3CB821A0DCCB4CB62D792BB49493917184B07F0F3FFCF0934F3E19FF0078B94D25D6945387A2A584461F8652CD366FCA3D06B478ADD16E057215F05906ED637A3BC86CA2BEC1BC79B399FA39D5081D27F3FCB29D115B3E683229FD2476A2499E3163868CD4C8F36739187D5F2F4D96A352BDB21AAA9CCBF9F3E70F0BEFF4AF56AB4E3D72BEE4BE48C36977690C2E4C2078808B8C1D46A4DA58300F35CB8BA06A79ABDA98E2C5F8E0D670AAD88A753DA126D663733418C79DB437D698EB7674058D596F4AFE6AADCDF6A7E9B5206687D8FA2C05D2A10855AD0E2576B6FE230FE5F8560AA5C60EF85773B2FE18BE72C2D88FE65570AEC1D286436D6033F5055C6765CFE69089473DDB6469F6A30A3F680C9A2502FED199CBF23688647F1C75F709359F46ECD69572109933659233DFFEF6B7E940E59A521BB82D79CF2BBDE9AF007031181E1817093B3CC0022D3CF3A0D122DBC1664669CFBD88CF710547CE52E8F8A903A28BC4500D09EF02FAAC32943F9FC7D78468E74B2010876393F0954268A1F02AA474AD17567EDA359A66C67F9F841B511CC40BA660C9163644CA1530FC851216071E78E099679E09041445ABC7D359929CF2BC13C924F08B596D5735CB3B2A461FC51BD442C70B9F0D5737EC1E88C71E7B2CC1B1D85A2706645C504BC4836094DEFFD297BE74CF3DF7C4EA8E38DDCE5BD32C01830368282DBA10827407C373F5EEB12A42646B9BCA0EB8EDB6DB52C32F775826623B21962A87E69D595E26CF8C554726DC88EBE5177AD1243E31CC18A9DDB4B9F5264CA2CC9ECD20D42AB94344B9F79861C0B613759E4F39E59448E367802BB6B6B68A973B35E25AA858630E7C66B05863FD5FE1C55E5A7BEDB5F1C6C8F01186BAECB2CB66CE9C69FA2AC6A34D2259536E90FADA2FE749231539E11CEA538D568D8D5451F02827A961ED252DA5E42FF9BF96D0131EF3A230786731EDEDB199498D6BF2A302B6414CF20C89EC89A248C1BB022E14AEC94293B7B3FB42FCC0887A6D4B643A2135072162328C489266CC6CDB9A5B39B2DAAB1AD282050BE80E49FE980E667C3EEA2ABF7043497FF8F35863514D124AC1BB352F5B14E8D1166721A2D319B318EE9767AA999443826B0D142ED163EEEE52632F4A0A21285C343B3CEE6E223148A931D12F2A08304D28E0C1E783AF2A2623A202F6CF05913BD8D457D84EA4710F29EF2BE3804A2D6FF11E67DECA095B41CFA50DA303824CC34087ABD8059F18B559603463A8D123F74EF609B279576EB046BB72CFE83C0FCC9929801429579C12A73A59924BF556988D49D3531F7AE8A1BAE095575EA9F7F5ABAEA65D873968A00C3B04EB1CCBC991093D35C8245BC046C5A69189AA0ADEE97BAB63422F1E63C71D7794167168F7FDBFAC809B01A8A929BE9D7203131C8AF7A2B3A10CC09918434935056E980899087677E4F1F1900846B1605AC86DB6D906B4451A2E645D80F2BB3D561A811C0A0A057B6FB1474A41E4F12B158A967A20CB220607FBC08781CA5D0EB9EE12890BA81940DF947256E73494E5354A07DD5126059585B51C583E4AEE6A985DD2D0B5A5A1D5F7FC1C8923220F11C1862CC77F926EA4BC1BC982851B192B6D21ADBBEEBA524238D6A96194E8076C1DAD8BF6866B12B419089795720274A440AD510CAAA7D69BDA2DB41521329FE59835A7B111D311986D1007FC1EBA820B8440F9EA67288D1C08C181D86EBBED7EFBDBDF82CF241A118908B0234B3957700A74ADF6A86A796749AC8D6ADE1179A4F572C4AF3CB433552C1968DE8D295464A5BC2DB4768E1E0A5427DE8943B5B8FE6C605FD9DC849AB73973E69C70C2092606412411876026ED1FE82258AEFAD6B71AAF5855E2A52CE5343524FCC08E02572C907880B4D7AF12B5FA303060D41EA3CDF2AE1EC38A457BED862E3ADB8AE16BA60E77FAC352441C399E61578C4002900E8B8EA8B69DAA3453183115F6B68FA78D72B6E5DCB9732FBFFC729D1D53468FA4809B85BED5093722064E08C7090EBD6F2C0BB6266B07E722EE38401CEB452E1E33AFC81CB62BFE5229341CACE69DADF10438177AA879F3E6E92CEBD1A4DB74D6343C69746877CD40B7CF3EFBFCE637BFA1434FADD12A37E5FD2D08D2904D904977C30D371012275410390F6C077B846E73901A0914F24A59CE5C8B23C482BAF4A365B89E63D6C1CD86CEB0BBEE3DD15ACE49FCA1C5FAF0873FFCF8E38F17CAF2DECFCB35E9DECD2947D93507F4FD8AE8762C6B04288707439218A66D52F62B4ADAE8507236D3A74F87C5B09C3784F20E884D55477A49AB55735620A0B92E42C0D6CE1A38CC5AA37D3A5FA19B070B89C47160CA22CFE7E4631FFB982C0076A1D9371D16E65454F2169831FAA44B6DBEF9E6FABC36BAA910195B215A8E7AD37EC2370226E0070480503069FFEE4649B9028EE9ED8240470C21B553CED8C09F5C3A9C1A411E13D0EBD9DD41D38A470F25B1AE65D2AFA858D3405E7FFDF55FFFFAD7B91172798B2DB6A0693CF6A9BEF8D24B2FF9BC398C19494C475F7D429D881ECE5E29B4E6D50F1282679F7D3602176B8088197D6334F9DFFCE637F5015C87D430CBECE65ABBF35CC8A04F7EF2937FFCE31F495069D87A04CD099A2F8A6C530D6443D1DD29CFF6A55CC45BD545DF2B4A674495264792CEC48A964D9A6D4DA0FE6425E7E89C09B723AB91C746662B8564732DB4F5D4074E3FFD74DA8C627970B4F7DF7F7FF97C6C12CE351E98FE5A6E503F3280E38F3F5E0ADE82CF0EB1964C17FF977FF997279F7C524BEF56312ED34A39F19CE3C9715A78C5A23E47CED2D06C6B5CC108D727A8631A6A524851ECA06C62421A416772B7E6972D75C7C3D98A6E4E4C75CDFB51C051EA46B0052FB8B4B0846EBAE9A65D77DD95290535D25CAD9486BA1997345E3A0B1CD2D8E9B5C0C3E5D88676DD4E3BED74EBADB746438489B21F88EDFBE52F7FF9EEBBEFB67C30D359944B0CACC07A16BDE7C2A98F0464B4B3D33B981A4EA2B92583D1DA7C6C30EF615C3025E32E1A1D7B54308CDE13ADFCAE95886888D1195E867DD995B18C88D8FAD4A47DF16E5DB2E69972C2D541A70F7CE00332B4B1D635CEBFFDED6F5980F5733BC90B5D812C2C210BDD1AF1576BB05BD81169CEA5311770F7E8D6B2E2752F5D64FBEDB77FF0C1075370EE23B30F25439546D7646D94534F3D55322292C51714B05EDB6EBBED238F3C12C3D7B8DDBE324F8D2C633C6602C1F68FF170E7BFD9B2B85C3EFC595E1A78F3CD377FE52B5FA1E21E37A5DC68153C7AAEA220E5B39CD836CBA91EBCCACE023891E38B987DC90242EF5F75D555E79F7F3E4581C62747D2B894D36959A310BF4A015EE1F844A11CDE4089185E932271BD56D64416B6C71E7BDC75D75D34FEB2F4B4B2B4F47192120C20EA013D84D5680FC6A8E6949BC391921EF1ED7341B2A096635C79F9EE2086AA39296E6928D9590A91529F081F3D7EB0B0889ADB65813A4D32586531C805D1B3DB1D679EB9A6C4BD1E2A0A070B32AE13E9708D9E8D29B43866E7117846BA86B099F5B0BA4E0436C251A54F927DD70646683078EB12FBA0C4665343C74720742D14C1B316AE0B28A8A8B80429F77D5D66C619D490584AD01B00796C54016BD0177990C8E1036E4E2381090E5613EF0790E4101D7B53159C2D23D21171A32BE061E52D4163DD481797B3A829BDE0820B7828C2BCE0E328522029ABC794B09A3F7FBED1C2327F6964CEF1A45B5754A2B12D37297C36338D403499C036813EA406AF91E32BA448565D7555FD5557D6CF30C08306C81A601A2243DE60845191C9544340118F7C60F50B85BF29474A1BC743FEC851F172CE59C6FCDBA8259781DC2E14CE0D3BED7E153EF95E0E982E0D3C0CA61C9BE91F0D419BF9CC3294A9190525E84AD02C2F6C8F792642949A880D37DC502E91048406A6132B27D2B5685C0AB354DF95AA964071DACC322232D01297683E7E946063F570B474E4647A6B839AA78D782FCE25114E92F93626A2621B25E887336DBE34DB1C6C23273E6D64D8DBD049D009B18315ED3B248E153005B22EAD46C9D99A6B8EA2C44116F616FB243ABEF1D1F0687DF796469363329A2D795FBC48A480E142FC8753EAD8209245FA40DE92AEE94E7F1A36CEAEE3F3869B110D234959E8CF8114D3600E3FFCF00B2FBC90C209C36DD86C1C33C733222625E5DD1ACC6E7DC00107C851480D9E3FDEE1A9893738CEEC45893161C382F4A6D645F20599E5C612E82422A59B6EBAE90B2FBC00DCC9D5E7CD652129389A05C3C2E1B25A1337358F162BB9631771360CC7049A0B36B92151D59CDADA9A038BD38EB57921BC10882D3A67BB1F86A72EE26F892590A0915AD507F0C275D9CB2FBF9CCE1C8ED841A6016C05AADAD80D896C3A85E99E0714306AA0B9CAC3410B4EA503AAC6312004AC177D88D06AEE3299F2A4B83447CC8895730E29EAD970824B39EFBDF5B44782214EEC1DBD45F8974203699A6115F0482FCC295DCAE84884BF1BFFF9529C02CC74BEEB94019902C0A45008470270E3EAD9C9D59C2F3335D47F6A1846667604C7C3309C3D4489204853A3338AC42FA9AB428A9057A1090AB8013D239F6F8E3120046265A6811D40449B6B5B0CC6745C04CBA336B4C4DF47ECFD28E0A207EC17A722F26DBEFF9759732320BE90948D2F048A315305B9C051615B4840682B932F5C7FFDF5E53C71F2ED39359F25CB591B471859A3305150FE412284926DCDC34B2FBD44E806F161D19CF244B5399E9CDFF5D2163C48838189D5C0ED8C28D70730421D8ED606655B1895A0DBD90B89043AE6CEF446D4FB92EFEBAEBBEEEF7EF73B4E2C1BD788898146CBF798AE8EAF4290C0F9BC02E3A325BB81C10E5AFEEC673FFBB77FFB375B0F4435A9D0A7B417A16C7C8D2D2D87DF5D8D879A8C713344369B07580A0B7146E3951AC152A27C38A3FAD58E5D3C2A4E5266792914E4567CDDA45DD5BCC55B349F1161B2F6BEF18D6F9C72CA29F6EDF40150BE5A62AAC98D128F07018F0D478A28370B84E5AE37B7DA6AAB279E7862658D60E365126626DC169835446A0A5AF8D8FB22B55010052BCE82050B2C5B89ADB944AA604F1B4BE118ACF910BEF39DEF1C7AE8A13C69256F9152C9BBC1138B022D21FB89C69738CD086E3769C67694B5245D9BF21C10DE12618094E366F15D6C3639AA8C7D267D2CC1AD7531CD7B6D2827112C545913550BBFCA76D4E202AD770B29025DC04756B6716D682FADD1C5175FACC7677DD918975C72C9ECD9B337DB6C3359514621914D406D6BE7689C4E70A4DC1B23291BC3BC062443BD62265AEB80F7AF80BD75254BBFF295AFFCF4A73FADE6CD1639B9D75E7BEDD1471FCD333A80A4FDA039D7B33CF6D86332FD199E3E13EB71D11706A9A540B3CF0932E1CC8F7EF4A3FDF7DFDFE15F7A3F6007EB1DE7FBFDF5A38E3AEAFCF3CF2FE492082480E2B6E876A7F042040B27D070B0582993050CA9850CE288B80B303AA241267C8DA55F317FDAEC6E8DFECAE20B8AF95ADE99A0145A88BCFF17898D94439F4C116C9BA530383BC7EE87EC066AC8EB34B45B192FE3B3A826E44DAD07EA1F7D0600C70C975E5787AAD27020AC345C61406A8AF59B23C6CBC0EED11E9565E0E5299C6DDED1983500A7823056CC30470C533FC33AC415E8F3CA3B043F291528343F662B185EAF9F3FF8C10FFEE94F7F72F7AB52833F28E56573A31098C48A972C104A8FC4E485A569FF897A6574180245E707DC2040E294578B726C1855CC0021B8E3AE70E48D526CB03FBCC9C71C74D20F00494A392513C1036AAFAB39DD744BDE838C2DEA99B19763AC9CAE76D249270114723CDCA185943749B58C4879AAAF1618CB531E7AC5EFBFE8A28BF6DB6FBF942732DC19D0710E2C862CF40124525DCE79D9CCE417F159B5A1E43E592842755AC171EC4A686697F2C8CA9C3973A4BA48C7F0743444C91A507C63FA4A43BB1CA248340F581E845531C1AD80190335660E7B20EC982BF8E050F046329B333CE5958AEC1C2A8C0945A61C8656CE39A2A1CFD3FB32C82EBDF452DA3FC44C21837778A6395B04A6044C35007E9DBB238E38E2DC73CFD58D74D9534F3D152420CA18035D33462307220A5E4D6F691E50EF7CF18B5FBCEFBEFBE853A24FBABA3292E4C7680A52D46BCAD860C31D5D0147C115750F65D968320D4FE70589C7FEA1239954AF46883071E4C91E1AC7CDC2C4B9A1022493F123C66DDB99B3E5B0C30ED394FAFDD4209CD284B8334D2CCBA617A7FE8FFC7AB1BC3ECB499378B390D4F01130096BCCCD5703E7A8E39D9C5C13A6A646A8D55032EF9FDA7010F4F7A97D131E309143D7F9A45C076319E1B1A54642CBA02746E02CBD5EDFFCE637EFBDF7DEA79F7E9A55874DA2102975CF0387DDEC9F794219892E285354A28DF34FB4D639705FCD90229FD8387D0E70C1AF669EC291140F300AF8967529D98977DF7D3738CFE617EBA7AD49FD0FF3A3BD45798C57DAD8251C56126FAFBEFA2A87C14CD78452699181EB03B90F1BD104EE3ABA77DC7147C41AF8A1502A2C9FF73459F0345CC87D24636DFAF4E912CABA2930317B6FA384563CF90E03E8E7DD76DBED9A6BAE01DC8FB365FE328CAAC821C0CE8EBA2DA2DC6D87B9679F3E13ABC8C0D9B21B4F38E1840B2EB8802C60AD012F808B1B930E4DAFAF938AB3ECF3CE89F0370D18CBDACD6831FF5DEA83D1E0CC05DB12D542DC9847F6695F6FBDF5B4BE384F7C970F18B60D1B36BAD66D2D2CC84A818AC4DF2D18F529AFBF8C118BD2D086B22E4B2B44D24C16C1CE41C493B9F083F8449B9B37CAC188458F4562B5BC1D2C071C64A59BBD47D488EBCB6DC0914FC152A93B372DADA994F50FF4A7C6F3965ACA95DE3ECD6F2D0DFEC78CFDEEFFF54F079EEF1B9BBA5E6E7B33D53A53A9B194AB4ED87CA7CFB74DAE875BC70C0C3EF05F37A49E34AE521A18AC65A9AD925AAAA934900DA496BEC9D3577BE7F9D790B9B66E2506A1C78189895888CD7AF78D2E18DC2395A3503D4188116B00A96BFB269ED372CE9AC70C83A2B726CE72083733196BF6D250D33F5ACC36A9F92BCCC67A9659B3665D7EF9E558B46C12D37D1B8F4D97307789D512531A004AD14C5BB5F0B2C5A32D0432D9D87212CFD5409FE9C1D3F20F17D9B15213E3A446A0CB62877DC25F5DAF9F02FE397601F1CF4EDB030EDF68A38D9E7AEAA9C2C6D6F36EB3CD367FFCE31FB14E0892C738A863E908492BB28802F6875DACEF74DECA15B23A8CE9ABE60CB35D37CF2C4A1AA82DD3010B41CC75632599F6C5FBA016DA747837F3D2636B9AE4073CFCF0C31895961A48F9580446EC9E2F9A13C0D17CAD8164EE0E3BECF0939FFC440F354A79D569A79D76FAE9A79BCA8042BD3472837ADD4BEE82DC23AFA86BD1A2F39185FE272CF98C1933BEF7BDEF41491F755BA9C1E7229DE73B6A5A103A7E7C3B5E365C22D281DDA3DBC9FDD575008497863620FBBB0AF8ECB3CF96C3A71F8E3EFA68DD454A549722DA36ECE79DF24FB99F8757943508ADBCAC482E16C53A63ADB5D6925033337E243672758DBD43FA9060BF17CABDB250A80D2C48F7DA77DF7DE56B624610A2E7B039B34553010784C91190D22EE554CF6C2D9A21624DEB93B7DC72CBCE3BEFCCD850905A383A55933BB0DFB0E79E7B6A0249CDC4BA1D36182A2AD629F9A1BCCF4B79C76BC4349566ACA9AE8007030708A1692B7BF03E05819882351C4B5D4B0DF67C8463AC572E94E1998017B30C09E58D91E5C4553EEC9CC4238F3CF29C73CE49B92F08C2DC50559F978202DE6BAFBD7EFDEB5FCBBF34BA9813412BF1BAC478BBBEB55A6493497065A5D45DDE74F2062FBCB87845F7AB55D9F92D1FD876C74D6BBD0B6BDDABF5B6A4711F587D517F7D176DB4C61ACB5F5DB0F6E429B5D6B68B4F392D2DEA2BB77557962C1FD3DA31D0DFDB9695D3982EEF103C3F06A93B9A96C0250C18D9C3967B8D74BE9822CC9A18DE8BC64D4C0321754B3945923F4675107E9E4BEA238371B302763A2C22399C74A79A2BCBE9AB885DA177890A989123856862E4ED1A1694949AB8BD6CAA124D344F649617A111E8065362C5C9FEB7FE2B0DADF8470DE946B367CF3EEFBCF30C4649B98ECC863647628951903C9484B9C40564B7E506CD24F75D7BEDB5F5A451804350C17759CD68017829D10B8CC405020E5C95F2AE1899EB9A5DA362C48796815BD209555BDFA106174AF201448923156EE7542073362F4425F4D2719E63DEBC799A050E397D9BB972CA9D66A6CC9D3B4D92EE6002268F9FDCE9580E4CECB9DDFC42E217588AD2C8A8B672835D164BDF95793626A4F5F5455343A440F3641DC0A35542CB424D2F1C752CDB76DB6DF7E8A38F6AC24137682751248778658B386C45BB24CD5BB494B109FE21058C55C451B1953ABA07CCE1311F10EFEBC10F3DF4D09B6EBA09C46696338A207F817818FB9D1A96B89129C059014158B4195FE3F9AF0DC503B3AD299B4EA174874894FD5AC892F4453A0FBAD4C11DA81CE9212ECA3EB7404451B926C79BC70D12A292033BE6B9328F4F846C0004D5FB1FFEF0871F79E41192AF6EBCE1CA45A6CE6E280051585FA4D7F5BEE699743B006637892B886317B76401D5CF53736C7DC689F96B06B4992917B1FC35146B24FE6D03E8F05C8D97E4E0F375BEE5C45335E786C4B2B4F487138AB0613D8CB47CD9F87175913AA6AB7B79CFF231DD0D5CDB92C5B5CE495356641D69C2DFD69F3F7EAF693DCF6FB15A1A9C30AEF6E6B272A9A36DECC449CB1B9C68AB4D9AD0DD529E30A6BB7395556ABD2BBA0607369E3A6DC6A7BF92FAD3B4B163572CEE6B99348682CC180875E68BEC9829A5880E16D46D212CD97C5E526E62EA79097A45239B858E99FE483087D76BEC1E6C5F70FB6872D03484850AD1F5C200E279B797C62D4CAEE02084AEE685D660646E7EF4A31FBDF3CE3B4D06093F97AF1C3DECD408AA49243236936481156846F0C497B9D09D34A1EC931DC21761D93471B786A79D233514735848665BBD298F473A1EC384475F4BD3B2E38E3BDE7EFBED29E7D44C0DD623F74A72D629C23BEC10BBB2573FC3D990F218552D40C9EAEFC436679626ACBD29840C284DB9A5835D66E22EDC6A14B00599D6494E582C548DDE127941568E5A1147A4EDFA5898C6583F548E969B294F12A0C5C9DB81EBA148401A91782C5260A4F23B6C193EE030C0280408B5BCC30433A651E9D91D47F5C76807C6CF2E1C2A545216EAB55243FD6BFCF2921F7BECB1943B4C513F1D72C821175C70013167DD1128BBFED70523251659B4F48F28E0E6F7311E63E025BE4AA1312AC25DC3D0FB5272583CFE2E0933BB7A3EF931EA9B42B2CA46B13101585D18162CD34805EB4EFD128F2576444CDB0E37FF9F7FFEF973E6CCD1F5491FC4788C140F4DF4409E5BFEFA2EE6C3730229E5BD5A23EF2EEE2C9A8634B9C7C07E40F3FDEBBFFEAB7C3E09534D1D52863B3A8950CB61BA64E06EBBEDB6DD77DF3DE534B94441903BF614E332319FC61C18FCE52C807ED86CB3CD6431E0FD6BAE00BB6EBAE9A67FFEF39FF55C1A09602B26D6A0568C66D7267084BFF9CD6F5E75D555FA0AEB2E693063C68CB3CE3A4BB3AA370954443E8DE6CD690C6A0AD88553E79E7EFA69A78DE9E8EA41132F695C21652DED6306FA3A2A53DE5A65E6B8B73B7ACB7DD3D658FA89775F7B6AECAAD3C78F19DBD9DE35D05B67D96CEF284F993AA99A55BB7A4BAB4D1DBFDAE4CEE50BDF98D2357E8F2F7E3D49A2B48D49794D0E07161968766B301C887EE70B0A1AB7507BDDBC33DDFA459B419AEC81071EA035359112AF8B8319594EED675E88182EE275F2C927CB81E15839146C911BCFF5B007DF8819EFE4AC014EE6D464399CD63B0AD11753BCA5A646F4844F34661A952E58B02092C368F6D8BAC6FA6579AD23A72C924F0D2B73A83E30B78F149E363F9420084C0D927C1394995C33E52957B8022D85B8D73AEBACA3BDEA7261539BA5DC5F4A8DB89D76F2E9A79F7ECC31C7DC70C30DDA1ED8D0E4269813B42F17F7757C465224C028E53C1540EC98915A8EFEB2390CA847E3C632E54291D9959F4D9B42397F0A5DEB4B396F14B80CF3D4E0D6E0DABA3735063E4A519BDE04D9EC12C2D72EBA77330082428E1EB00F08E2636AD1946AD88341850CD60D76136579239551B1BA6410B188535E93B3E5965B3EF7DC7374CD2340570B9855DC74763615844C38EA4193E948972324BA0E2AC1F50F0E0A91DE4E79936ADAB6939271E948FA4714B07B45C032E384C2289100DBB011CC19B9E8BC8B389C12C17A2E66C6883F3C4B7D9D640C7565585130A2386E59E0138852869DCD6E89D92C6BEE94A7978C592D8428526EFD1053420246D64C6F0F86C15A60506B4D9DE341B1A5DC9CB57555CA995923350777977CC79EF39B345AC1B7B0931D212DD89A72E58F3EFA681BA0E8090E88A3821161E49C3183673C06BCE057E998F0ECFAC0C61B6FFCFCF3CF97F3BE7EAD8D57A1AB7CF32E22E98B01819BE8A238B2E304456A23B44AD4B9E08BC600AE147FEBAEB3E0D55707FBFAC776E9CACBF51DED8CAC5CAAF6F4F5AF5A6D3F34F569D79753A93365AF6D35BD65CB85CB5E993471627B6AADF657D6FEC05A2D9DE5D5A7AF3E581DD868EA5A9D9DB5658BFEB6C15AAB5696F5D596B5EFF5D9AFA54A6B777B1BCBAA3BE251706C890790FE00A8AC45D749BFEFBEFB52F06B0BF1DEE6572D47E731E7DAEDCF3EFB6C96F7ABE62C54F26EC74401198FDE04C3EC5A6A265FCBADC5A21C8B2BE07EC412F034B25960EB395240CBAD84728B664A241A5C2DA9170548EC556D45B8190A9966E7C2A5B1348D859E34D02ED5F29E7DFE19470E19E80C45CA2B8E10089A105BC9988F92302E12411FD9EE7752D6E9120F95B3A94BD12984722F49275D5057239EC4014408E82BC71E7B2CF9145FDFC22DB65EE04D88BD520E1FD15D787C7D97D4523DB2082C05CD9772523A47DB59750D4BB73FF3CC33BFF5AD6F6119315C079A5878986F6D97EDB1C71EF7DE7BEF71C71D77E79D77FEFEF7BF478868BBE807EC94F5D65B0F0EB96A206A07280B7C463F909940132050348FB50617953385FAE2E73EF7B9871F7E585B9999DD7CF3CDFFF297BF44907D16B83B463A18D1322AA8AB613FCF299578FAC637BE71C41147301B9161C3E88998A7F12B92F2689090C345D43BBA30E2B9F0A5D8F718433A817629A2408FF8C9F48F28E02CD044477CF54839E05A20F2347353D491BE88CBD8536EEE18AD602A696DB6ADB7DEFAB7BFFDAD0BE78942A3DA516C856729E52CE731D3C9CBB1107E8D7956E723500C106B00C2B41D5600C0FB711C86D2EB820B2ED0D2A7862A02A259884EFBA04A96699549151B744AE21910162967C33730CBFCAB993BF57972C900F75069E41D8C969745A8A3540B441C9E9FA880BDC138831B6CB0C1ECD9B367CD9AE5E9E2BCC4689B25BBFEBAEEBAEB6AB73FF1C41318FB6865325EBE8B6783D41AA68F4B660DB6B06B6E4F281E13EBFEFA89AB5552B5B6DB2EBBFEE4C7B7954BE5B6AECE652B96A7AC966AADABCE697D3DF5B44E686F7FBDAFDCD5B6F8A5FE555BF6ED5BF4C2D429533ACAEDE5545E6DDAAAE3278E99386542A536D832B66DB34DD67FE7B5BFAE396162EBB281F46EB6D7E7BED6923AAAB595B594DEAB76071174AC3E93AFFFC90234C77847911BA5D04CDA0800320259DEF24F3FE844481569A161A200810FD2CAB17D748F848064BD7406AE586528F767B302F6D870B26D1D1A6A67001A7F8D2A8D5A503A46A378644300DA2F9007782A4C311BBD49A7266B3967B8C3D16BAFBD36F59FA5D062956A08C200FBEDB7DF77BEF39D993367DE7CF3CD386C5C4D23D1EE3DFCF0C3390B30B7484F9F75D659175E78A1E64757B8FEFAEBF7DC734FCADB001845FBC3A156B446A10C87708823374E30C5DA27337810634B016E66D8A949B6EB6668CA7B761E75D451175D74D1A73FFDE9BBEFBEBB3494C18B9373E595571E72C821CC324BA28F698BE8A8EB4EDFFDEE77E598A73C3FAFD5D2BC9B698C780BE44111A249A51D5686E118244A2957D5F455F3A602FAF0DCB9734F38E1047D66DEBC79A79C720A158DFA5F479A68B9F11A3EBD6C3EFC9E5150D02EBD48A1F51E20D8613FAFA7B3578759901A99BCEBAEBB6EEFBDF7A66E84DE32142A98BD81DA127C650D469B46EE05FB40128D8E28F3E7CF2FF09573544C034209A69302086292A9C4001C1DAAE65D84A3D24AA386A0C92C98409F628C91E6CD292B534749157DE10B5FB8E1861B9C9E31513ECC3BC71F7F3CB9467A9EC7E888E9992256087A07FD2A294335360A292ADD984021FE66842DF3638208E7F3D8337A403CD473CF3DF798638EE17481D125456415EEBC692534DA224E1B6B15F0FC38CC59DED4451FD3B4687DE5DCEBFA4641239BF4754D089B843C426AD003A51CBC46A62666C1E379C62630750650BE022826C609AC410BA04B1E93CA37B3BC39D48FA38F2FCBD8F4A41A3936B45F3EDD2E9923A3CFB6749821FA3168BB025B191956DF8B3C48FD115ACACB2419B372AD8A1D91A5722D7577ADF5F91D5E1E7B6FE766ABAE58FC7A5A2AC1923ABA3BDE7D71930D5BD619337EDC807CDE81CA8471E337DA609D09E3C78C1FDBDD5B59B6DAAA535BCB69E19B6F4F681FBB4AC7A4F94FCCFFD69127762E1BC080D03E94F2833205317ACD35D71C70C00129AF3D437CB92EA3F6BE4B5022BA2AA6390DF5672A7458489F19529EF2CA31FF2AD1ADB5664BDB1436F8CEEA76D8C31ED5B033ACDA9C569328DA82CD4A940E7713DCC9965B6E29FFCAF56F311890727C9FCB4A9DCC8E7962076320ABD96CB3CD9E7EFA69E4A73D8A88C37717356E6AA7C5C4006C1E5C64975D11FE941693BFE4121E14101940F21D2E32263861A65B3C01F037FA353AD31698388A29EFE186E7200F4D8F83391B73AC9C91CC05B81210E48A2DB5F527E95748FC658EFDF33FFFF38F7FFCE34215E6AEBBEEFAA31FFD08217BFEF9E79F71C619E4066CDA1BC1E11062249B8CB0BD0F7DE8438F3FFEB85C5EA91F9E6DDF7DF7FDDEF7BEB7D65A6B71C863F73D5785E207A3AAC16B602F5318EE70BCDBBDB9F344E1E52A4F72121625A358B2DAA0D29D7A109883AC1828A4D317357B84A963E0310D8D8118D3CFE3507C5580036043915D8EEDACF58CCC3F6BCF7E2D20E0FFD110B443CAD14E6AEEDF19E7C1E91FE7A5B6DF7EFBFBEFBF3F85F80F3C098E9A1A7F9105A659537090F0F3E0DD8526AE4B6968BF9A2C74B842355229171B56A63C3CE5F03812C7C3762F01A8CDCA79CF06B6593449237AB99413D216F89023A89B5995F494CAF784F0A60D6A8E7A2C29D69F0055917661D2888BEAE2FA24890FFB4F5C5666F491471E49409262D961FD78A63D4A6D1E0159E92E8D0499E21C72CA4C769FF26AB76A687BECDC3665B8CC15F5CD5019EBD1CC41163DE0665DC560C834D52F9EA58D36DC68E79DFEED86EBAF5FF0F69B49626DC2D8D5D75FE7B535FABA5B3A6BE39FE899D691C6D5D2DBBD13BB3EF06E65C9B4173E3C71CA2A72394BAD756DB1F5A61B972A0313C78EF9C8B4292FBFF146D72A935F5F52879F94DABBDADABBDE78E3ADEDDF6C9D3D7B368FE3C487575026948E2795AF1A980B93223799CFC5B0E7A594F7B48F3B271E3176175F8F8534D4FC7CF6B39FFDD5AF7E45EC14B8808B734CF563E8BBAD99E6331B7F8DBCFAA91189D406D3037EEA539FD2BD061BFD1FB3501DEEA760956940445671582074DC3C7E4017E25773C66C3B1B9B6CB2C933CF3C13215D28C8982D95B49775A2C9A13E987ABCEDB6DB4E1A042A0262CB3A8FD4BC1986AD1B9D73CE3973E6CC814AAC34942AD5424FD7DC79E79D255A256F89D61835C6CB7D5F9A635DDE065CEDE0830FBEE28A2BE43D4BFA39C9951AB0D3BA00F4F25773C63B8B2A4DF755575D25A30F8C0F75323A3C98F67CDEED68F80AA947902CB4554979EC916D51CE9BB66256786134807DF6D9E7EAABAF46A15E72C925071D7410457810AFB8788E15C5F0A404D352C3DCDF9E144A4D288929E0B6CA4399EE5360A0D53581BA54F23EA6CD2FF2314843AE4FA0BBD2E86177D4514771002819A4D0A53294CF3D8A4E447F4BE802895555CB7913E3B676D6C1986D503C3E42CDA896611567C4FDBA29CA48A0444B6A778030B3A31DC442E4100E4862097A2E335239A38FE48A1BD7C672D4DCB6A9B17C1DAD35117429E761774D30AAD77D998C1F2935D1299B5EC7F800D357998B8D112291530E614D39A308C05DC3E86CA4BB44A416DA12300C6E5ACD390809ADE3163BF8C90C9C78E2899A4377F036F108F0130373B47F08F070C44E3AE9A479F3E6A13B1DF384018AA7767F59C48AE71FF38EF749F5E9BE5A38691D422CB5D088266ACD52E0094FC1F888D40ACC9ED9FE1C871F562B308744DD8DC3D23E5FB0E00DE9E0B6CECE96157D59ADB23CD5D2B8D2F8CF6D2F67A667B0B7326671EB6AAF6793DFAC0F51F7AC4CEE7E63F3ED279496F77EA0B76B70CCC4B4E9EA533FB6EE1ACFBEF581F23A95EE6CFCD23757544AD5BE6C494BB6EC039D1D7DAFBCB57CD22AA7FCC7AC8E45A92DB5D6EDA0AE968B2E3CEFA899870CE6AB46449A888EFDD79487D9405047F4BE8F617C402C18BEC5EAB3D5DD8407F3B15E37D152B74A2BD54A5B6B5BFF40FFE4499365C1FCF1B13F6A9F9ABBD4EC63BACBA1871E7AEBADB7A2337C9A223973CC527B9C4E37E03B71BE742372B736494B81B19FB36F0AE1C1D0F354DF4546991B00890D836F6CCDE9BC2902392246E3FFA3CCA4E75C9792F3F6DC73CFB97119E68BA58D3E2993E217BFF8456AB0C9460C2C9B5C5ADFE107770430601672374D29B84B467272E3556AB4A7A3479F6B7CC8A8EA331AD55FFFFA5766B8F995C52265209A80F110F4E00EC06DFA50F93C43C944E2871A09562806C7C956A6865F12A3138E9BB33684E96CFB333BA64875F1B55B796B6C9AEB682712D6F79C9222DD69A79D64C510C8329A1C6091D1104433E2BABA8C2A8D0A3ED2CCB881E0B9E79E7BFAE9A7B347D97040B87910177D23CDA1DB25D489D2C56567B1AB394570611732126D914F7FFAD3F22FE1CE3586D66ACC7BBA94F7F44823BC5CFAE903304AB9113173A7730A2F4406A7CE4219EB270A1D7C531356A49C56B3DA68882B6382D0086823D3C280ADAB345A1163026B56DD929206C37A167DDD9696FED7674CA29235D142A580B2C6067736884D0B5A55BF460235E0BE5663B13E9B182079416D512CAA82E95DCBF9A152E8756A165CFE6A920DEEEE5254365BA4318128FF90430EB9EEBAEB88B6692780CBDD6DB7DD7EF0831FB03D22931F9D59F526D08D638F3D76EEDCB94C85AEA6FF3575D6B2B2DC7FFEF39FBFF8E28B36F89015ECB7986E8C1182B89198AE485BC16BDB6DB77DE8A1875240E9378B5A4D29C38ED673FD34F5AE68EB6A6D6F695DB1B84762A5B72D8DFDD00669AD5596F7F4D7CAA55A7B35752E4913DE2E8D5D526DADA46A2A2D4AD5F6CF7CB0674AB963957193CA1FFBD0F4D7DBBB3F3A41575B7F79D6FADA3B8BCAD5C18969B0BA7C61B9ADB565EC9825955AEFD30B6E3CEDB2856FBE5BEA1EDBD3B7544AB2B59ABA1B70242774107486ADD8CCAAE585A1D192484D95C18ED6F84F6473F5D266730AA311CC1B7006943B6EB8E18652156FBCB100A79C3B6207633639F3E2E87DA1CA3C4A367B2FEC40622D29B8AD16FB6C542D252E56648204C3614AA296D010C5CA3B560A9832280D65A0CB8652DE16662CCB5FCC98E102848538EC4425D350B75BDE27A94C000A387E0858348B66ECFCF3CF97D7444E01998C2C2228A5B3EC8222C40E02DC882D0FD2157A2984C4A267555C85D4A80FA1971CBB3CCB1B6671C0806C99ACB840C54E58BF9AB7C2D0AFB366CD92FF1A1555396F4956480FB8B3AF3388BC005EC1C5A36F69FAF6DD775F4D90F6A5C4B4A660C68C19DFFDEE77914D281E8482D3CFD0AEA65098856FE74D437523C1BDD430A368FB6AA78A1EBAAFBDF6DA28A02D0D8CC679FC80C830E68BB89C938EBAB29C12893C6F0EC71EF980ABA8293E6906FA6639CF91843B1DA1FD2C5A114DFB7FFFF77FD3B02CDAB62329547F86632CC379EBADB7DE7FFFFD47F1983DB14600E00B46AF88FD608A159C1847A7E1A988784857CB1D70C001D75E7BAD8C6ECE0F93E30003CFE847D6EADC78E38D7BEEB9277D009DCEC0D28A0DC65127D8E9050F2085C035252EF8E83161AF616CB3CD368F3DF698BE42BF6ECC1AF8DAC04FDA0B49A1FDD141071D74D75D77393F1A2B5C53EE3EA2A8B40F89A4A5A1D5E7F6BC53D0F47A1CD979DA453C32C59A08351BAFA5465BB0975E7A4997327511A5F0BE3E2D16F0393463FCD5629AC5F2578863C7C6E12664B531810513D9FB628D0ADFD21510DCDA6C5A6B1D55CE60B3B44D792A8484D7BFFFFBBF3FFCF0C31A70DDF8CB52D798B65AA5DADB33D8D2960DB4D5D6FC971D5EABF65607FBA47C4AB5D6FEC14AEAAAB54F5B5A9DF0E240CB8A49E3264DBE678DC9DB6CBA384980766E3A71957DD6DDED4FABCC4F6F541664836FA7BE7195CA46ED5D834B963EF9D65B8BC68DEB6E2BAD59E93E6197992D83A5C1541A33695CEFB2C5A5FE4A7FEE151029D16809FEA5C0AA6B8D620C7C3346A1F918BA3C0C9615E00E43B184124A726334C3F5FD3F69D284850B17B9CF0FF628385923AA7C009D0DCC86A326D56BC71D77D4F6361964CAEB29F4755005C41D3135A25C723E25D61372530293284587153FF1894FCC9F3F5F12954A2A700F8EBA5543B3AF3839FE3956CFC709749530C6259C655AA0683D189FE8C0983E697CB29D317B179CD6D34E3B4D6E9523F059DE24D8B776C134BC0BB10095A3E41A012664F80DE0EC23A391E0B8F0C20B6DB6A00B3D4AACF852A327B9D6C395B248B7BDF7DEFB273FF909AE00A717CD6FCE04321F595E8C6C2C0367955E3192236641D203600C023FC3A0405C1207F0CC9A7680758DF1D298B1D39BE79C73CECD37DFFCC73FFE11294FE3307DFEB4C64B6F4A34ECB7DF7E71BF0E3B710496750BE90C92D611046EA7010DC4083578CD1B6D0938BDA45BD8408851D6B8507F6CEDCBE161721C15E167232362436FDD7A24109955911BEE366FFA820276E7ED98A764ED76DA69A73BEFBCF3B8E38E3BFBECB3E11630E9A3DB92C7D8ACE5B2D983F5ADE79E7BCE56333BCA007BAF855318E6D3D776954E22809F1A5EA076A6BEA85B3B30502071F321C1B7202B49140B89633CA43E2041A3C771B123F9170C91422D2633832E4409E9146830D59C4239E5E16B328BBA82CCA62BAEB8C22B68767BA6971162B6BB9051BF6ADBC8E08387CB9DEF902058091E4F24DAC5A6916ED63C3BFC70F1C5174B9DDB8831B5B5C6090D2D317C8853F450286303EE782EDA65B21B3D18577921976DDFBBE5940FAF375861BF61556B48DAD8BBEFBEFBEDB7DFDE98994503FD83A5AC54CB52ADBBBD36AE63DC87375D92FA53A9ABB565A05C1DA8F4B5A7526769726F9A32BFBFFBB5DA92B163D61CB7F65B5BF62D4F6DADB5CF7CEC9F6B93AAD3BBBFD0B2FC4F6FF5F7B48C97EA5D38B6AFAFB3ADFB2F4B7A17B58F5BFEEECB032FBC73E745D7AD3771CDF9CF3F5F3F0EB5CAF7AFF9EE81B3BFE9CD89B82FF03040D1AC657518B3F9C4A51162AA05E03746D5CA79CE2413E4174AF6C25B52AB8FA8965ACA2DA41BB45894EAC1A14B623805D56E7CB59305A5C00DBEF9E69BCBE4C51A4B8120D6DC581E242611A02A7DFECB5FFEF23DF7DC037110BB8B9E5AFAF9E0830F968384AED211200791E5A56E007237DD74D3679F7D5622B494779D2A908714FE078217A344B66C50F9B18A87EC8C5B98C465A2B67BABADB67AF4D1479166FA80769AF6ADE650528B0A2BFD8C1D4FE0211B4ACCE2983F7368CD4D836A1808307A46A29D786FF5536E7703EBD02D8DE08AC933376E44F7486669FA1C9AC0224640DB44B2BC2E18CB292FD6D409A76E182F39F60DE4BB7100E82A5D64ADB5D6DA638F3D649BA0E3530E4A04F1A4C1BBC10B6B494098C883E9DCD84C116DE4CC041EBFA3FFA3A08553DE030A3717B0062298F5D0BAEA221A363573F855005623190AF60AB57431CE9F8646AE5C4EC067DC8BD4CA9EA5D4C722D1DA280AB59C37E491ACD4834BFAC7029BC28B4F3A71A231F0032A81ADE691B831594C0C534A9E02513B8F1323166C778C0C3FA649FB8025134DE103D8B3E6BEB78F42BD6C342CA2B043D7F2C2B5D50CACB9E69AF2B4E6CE9D5B287E4843A3058809DD42A74042E437BFF90D828F4364E4B6EF5BCE5B6B3B0954CE1B04CD9933E7C8238F243C0057173B598321DA69F7A2194AA3CFE84D6D786AEE110AF49921318C91E4E0D031C71C73D1451791D021C8AFB9926EF6BCA13EED25700B139B13333CEBACB34E3EF9E44ADE9BDDAC76A59C4D8FA81DAD392365201BA6A5D102CBD97DD7958DA4809D414C8D28A21EB631F8092B7A967794CA597B6B4F6960DC8736E919DF5AE96C2D0DAE52197CBD9C16B796DAB5A7065A2AB571EFB64D5C3CB0CADB1D0B06AB37B7B6BC33A6B3AD65717AEBA207CE7F6BC9AA0B57BCBDF4ED451BAFB7DE40A5E7A9179FEE4DE5C1EAD8526DFC3B4B5EDC60FCAA4FDFFDBB076FBF37ADA8945375FA5AD35F7EF9A5C9D3A6FDD33FFDD35D77DDE5E82E47DE342F6C452D1CA7A000122C88C1E653898DCE8970F5737DD75565AD96659337249554A934713D20B4A267C075ED8491310E0CAC89C7AAC0DB6F25570BAC4CD4C2A1516293BAE8F53AF485E67EF2C927E3076CB342B2A4593AFAE8A3C971B484CEA48064DD73D367A414784FA31AB6DC8B58FDE6174E9A265FEB02E10F352CB1B70A8AD3E171D38F70850235907FB5956C456BFC8AF41768444E5679380A684D1A8524C32B606B5FA4F64F7FFA53892117075BA81969CDD2EA39757AB104713D1DBFFAD0873EA48501A76A0EB90869B3E3054B8891234C6EEC24C56248B36A4313C9A4C482310307271CA4F1ECBAEBAE3A1EBBECB2CBE5975F5E4855464C6CCABD101F7E7EA6BCDDA5E824F3F47F6C455E1010D228F478B0248AD14B7CA072E0E6766A5CC38637CE94111FFBD8C7FEF77FFFD7D831CD3F0CDBCDF1AB66A428A95C90D896FB9A01DDC5C180E617050C645BAD60881F0CFB79D93D5FFAD2972EBBEC327D65BDF5D67BFCF1C753605961956D15C64D850FA419D0333EFCF0C3BABE09199837BC641D5A8245245C4D25C39235C78D498E2062883D904AD738E5013816E4223A8BBC660F38E602287FC4BD368725880C2AB931E6B8824D4C36B3C68C0BC83997C9F8F2CB2FF34990C3D8EFD5BC4FEAD4A953E179C56D757F98D4C40E66723A8D449F646F4392C03C4494839E0B1FA894B3B5BB51B41D7144526A98D41C768024D8589A46633E34728D93380DA8B1E38E3BEE924B2E21EBE912CC78C6F9A2164272505F913374D04107D90A015619E5F5B01BBB9673D718B0B6F203E5715D5949C76979EAAB760C4EFFB74FBDDEBFA8DA526AAB4D5ED1F74E4A4BDA3BDA74C2FAFAF5A8D58ECE52EBE6CF2C99D793D6C8D29871F5CE0B0B97955E1C73ECAFCE68ED18FFEA9F5F9ED43D71B02B7BFCD5BFBCD5B3B463A0ABBDA7A3AFBD776CA5347E79F5A7E75EDA9EB56B4BE9AEAB3784BBAC643D17901FF49C5B29BB856DCAA191264269266B2BA840EF6DC47A1628421B2AB9FEDD818162222CA6751D70B6A26D09DD732342CA3775F2C5C058B6871E0473505BE2ECB3CF96E279F1C517A92724D5E8E814325CFB4DD2E099679EA16709559778F06425280D8234C2DC9098EC080D07F0B3D077390DD5C1F104112034B017FB951364525BAB406D36A24D487B274F097479D3BA6627D6FE69F05A4AA99E7DF7DDF7B6DB6E83883EE5503506691B08239E56511FFDE847DD0AB699FEA1A8806124E11CEAC614F8BBE45F17C5E4E1D04618242F4723F1FC78D4D470C653832F3E0D85C0385566808903CBE68C74340C0A40E6052909AC94249C91CF8C96C2123D02FD8371ADA8E6344101E13B785CBD5A29F7CBD9A68698A690456F7E1994EFA022CC261B6EB8E1B3CF3E6BC0829CF51FFFF8C7C0E1CCC14690136D0DD00C78B93EE04C1B436A56C0A0AF3DEDAE8E477340C11FC3CE2379C0B367CFBEF8E28B6951A289D565B564F3E7CF1FE9F358FA3EE1EE3A629E551D5124B52B586048AFE6C4A54633991EC4314C77E0817CC715DB9A4C38984A3977B98D68ADA34483FB0839BB29A971FCF1C7EBD6DA5D5A08B60D122AE51D090B8F16094C2CB9CCF8C8FB482B726CBA2966AF817248043BF188B32CB494E0BB294F65419E8A52E70CE3B503E68ACD4568A4CA086D28C8F2831B12280391215C4FBEE81A5CC2BF484CC721CD34A4FDA90FC84A60FFC486EA9C1A96EC80030EB8F5D65BF526CBE761940249AF779A6BC96C87A5BC7380A988FCBEBB75352B608AAA4D30821DA06F2D59B6626C5BE740EF925EDD6D6A5AE59F365DFAFF487B0F38DBCAFADEFB596BB7A9A7D2BB940328A0A0128D9AAB9F9744CD4DA2D180052C8014B9A834514001E94D94A254351154A258A2895EA2AFCA255CCD3542145110E500877E386DCED45DD67A7F6B7D67FD7866CFCCD1DC77878C73F6ECBDD6B39EF2AFBFFFEF1FA6DBBDF670ADD1E90DF492A15080193B49AF9B4C8564A6D1FBD1CFC23E7B1F7AC83E5FFDD93F0DAC0C83EBC2731BF75DF9EBDF1DF3F50B27F3E6EF9FDBF4F4D8A6766FA29EE44B06978476AD379086C999A5D3D98B966E77E3F9977727A7374D4D34978EB4378D7B15344531550B4154BA9C1997CE3C108B5E30BF139B2C31A4C8E217098EEA256EE70C54F9C52C9DD757A316B5E5F1B135E2C91AD72537F88838827CCBE8D1FABC0630A13211B891E9F7F5D2C630E82906DC71F025ACF40B628D3E66264C8EF98663E3209EAEA462D48A9DC03037CEA4E92212A62373C105177CF8C31F7EE52B5F293FD0395DC9372914CD03226EBE528C0D1A3D91FC69F0345A6E1E0A6C0A5C289E6DD8CADEFEF6B75F75D5556C7EDDD1185E375B2358B2A05C9DAD832639A74BEFBDF7DEBFFDED6FF130E2741D50119F52B2B0943F9B182FA9AA929D0261289E50F88F9288CD00DE00AD475A76E7A698151309DDE96C1C83D1739E7CF2C93C18C924A4D84D37DD248D624C7F985B301377BD30318893A9C865A35A08DF935C8963C57D2F3DE9D1471F7DEBADB76A0CEF7CE73BE57C4B0E22B070EBF38A539EA43865D624C618D5CB5EF6B25FFCE217840A78D1F5D6F9BF10797E49C4A260BB955A67FFD3DA252ED35ACC80C0CAC390D7B42352B70016D095E5C2DE7DF7DD5483601B85B9A43649C5E66A4BD93119EC36D359DB6230710A5BC834874CD1B9E79EFB894F7CC2720AB03D51326AF635B76C48483DE943F0E94F7FFA431FFA5052358DF631888F34B20C18141365FC7988D064FACC9E7BEEA913C1CC7824988086383A76E7E942B5A050BD85B823647E1A989649E75C12219F5BBA03CCA71E355AB6DD63EDAE7774ECBFF9CD6F029606BDC9917133223B46287B5D5FF373C20927D0F1DE25EF9A40D42D729F1C9BE366BA23EDEA5C64C5E4300686373F2A18B7CB24D743EEDCD466664DFF831E3060167D528E45515C5E0F238D7A36D54D47436B9F15EB4666D2E17AD6996E2533497DC776D83D4BEAA1313194CE249BBB33CF65DDDA9AB7FCC901039B77BFF6FAABEAADDE0BFF6C55AFB9E9A94DDB87DF3DF986938E5BBF629BC79F7C66EB902C957794664FCD4CD45A43F9F8F46EA3CB7F78D5F5613A34F2D0D4B3CC4C9C74E249B2A4E5DED167DAD82243FCDEF8C637FEFBBFFF3BC103687D0D7CB13A89BDDE5813872A25E400A649089A8D21126433ED8ACD342943B579BB56B56B337D6C7C4D5478167580C690B57086EF08D2099F0BFC31A8BEF6DD77DF871F7E987C6A2C6AD28A7AC8C4A2EC3AD7B318554A86D84D6E8818E9A4432EEB944DA8707C7E843E4BC5BA439F27F4C2E7AD23984FB4635C34AC73414237C69DF4F18D98A716DDC493021EEA559D72482B38A417DB31A12A82A8552F927A60C5BDAC8B82611DAD25FFE410016C127C48FAFFC0030FBCF7DE7B316D0016850A311422BF01D24B7DD172D9C86C8C17FC4EF21C58462F7DE94B7FF6B39FE1144AD8C9508A0B76A9BAD34F42BB44BCE34E5EE00EDC030E9A564AD08827DBD9424B391B112B39BDF3EE77BF5BD250123FA6B63EF4D043BFF6B5AFB950077D0F32089968C74E6BC03EC032C8A2269716A0683B165E973AE594533EF9C94F862A166AE30E1907D006A79694A7C73FBFAA1D91A72BC4B624E2CFC98C580F615E304BFAE221871CF2DDEF7E577B2826850855482044440DF35F6C5C4AB9307EE3EEB03615EDFF31211822B5B9DD6443E529324ED455280BD8D2B98CCD8809FD72F6D9679F7FFEF944B148CDEA841C75D45132C8587A2693FD43C48C6A25DDE5631FFBD839E79CE30977C88ED93BF1C413BFFDED6F3FFAE8A31039395262CFCCB8B92DE02C1C2DB7723572125395A7482AB2FB2BAFBCF2CC33CF24051857B4F7B5BE2676D7ABBA821BE61AE7FFFA2AEB6CB8580D30BDB5AA212B7B5B53A4EF72F0B71C22864CD194877150CEB6A007C083ECBAEBAEDAD2DCC80A3E36D7E28396450C6E9865EC9FE9CEF46836DACBB3C9E6C4C86BC2781A960C85C673CD89A176BD27EB64281998199F991AAE85A513236B7E323EBAFFF0017BEDF3FFFEE34F5A5D9D94900D76F67AE58ECF6EDE38F37867DFF7BCE9F1D0DD79A0BB7DE7D94456476DB73CDD636CE8C9CDBDB064A679CF4DDFDA66BA3ED99B1A4F66422DECB1CB1E3295742A5FFDEA573FF2C823FFF11FFF11A20274A64B5B1AFA24AFBE9F8519EEAB959FFB4A177C97680431B9B955FE5B0279A515C9549F5D686913AA5EDAF162CD8F8A870AB28062237D9B57555860A35C8265BD4E8F2673CD86D238C00BCC4BF4B8042CDE115776081A90A385983B8F5141A773FDA94F7D0ADEF550055F2D001DC5A1B81C210386D7FB107E46E93B3EE312646E6A8C673C93EE8766C3250EFC78D2426432860A19E3BCBB5166489E3CE24E4888D7C79099B7BCE52DDFF9CE77782A34795ED1FC1AF8E338AA642EC44CD07D797FC0CC82151C2FB3D71E116C27E6E31FFFB8A40F312E139C126D77F6A86F336104B1BAF66BF38A4EC5BE426D6EFB1D2BE02482E3F38EBD07A7BD49069BABABEF159BF9EC21B3B7F795B72755239D98C73F54C1CF0515B0F48A9C3F2A61B0900C6AAF45DD2CFAEC65541D3A0CE989C11E2A6722EE8B10AA8ABDBDF6DA6BF5EAD54EE43B974922071BDF12B6EF651DC952BA182056C0DE76BDA86FB92EAE5D44FD1B66B5D965D137C0BE98ABB4EA8B2EEFF6A4934E0A51DCB81EF571E3FA071D74102877AC225397D7AB36E37A138D057F058EAF4F17070C551D4BB77887E85240E8A9F1A79C26EE7612C7D3B00FDCA3D48BCE91D118F42DFDC251C2B7C00DA5A69354715C37C920D1CDB21A8F3FFE781913DE2771FFB1582ECC97C5B12DAFFD76D55557D1942C464E3974D677048C43E98BD0E0A6F327D7C2F5F1635B20C2BB6994599C028CC78F5986D4EB86EED26449AFD39B5E3A39FAB2C6D49276B3136A1B9BDD25EDD0AEE5BD8130D099EAB447E4288F2F7DE2DF3785DDC351EF3BF2920F5EB855BEBD7CE3E9DAF8FFF3BEBFF8DFFFF1B3C15F8CBEF088D7FFAEB97E30C9967793B4918FD7A736F72697861D37E7BD6579EB77B77CBBD50EB5249D4CCACAECC1596CADBBCB1135D11A11B282F5EF15AF78C55D77DD65E29D0531CFFF770AD88D2C2BCE8D7E86008395C2DCF8F6965FB13CF417810E20991105F6D38C0A8C8944507571AADE95F1A16A90C501D427413EDB00E5D4387E96545D8A49D9C63D5DE29221BB433C8513A66E14C4802D004DCBCCE761F45C600DAAE31F22EE740497CF8E15703CED7E3911E0DC4ACCF9DF77128BA7F0322364E3D6EEDC838021D6B7A3FC6F78C31B6EB9E5963DF6D8436E225040D71A7EF18B5F94F7E0C2061E29762F6C2BC5455A4626DB1F427221BC801DDAB843B9C64D3FE8BFE66CA21D0E2C06C25FF831B111CA6062509855A9A18C8EA533485D0A020D9C2A52B6FA9DE6489A74F79E637BD99F0B11F917DB5A0E813601722A89FA44F6B94D8E46385462FA65AB3DF6996DC93E41C9EEF9EA57BF7AD8618749815D7CF1C5A400CD32EFAA6E72F3EC18DD5DDBF4D7BFFE355F5F4C013B24A529D217354E5B7F4954F6E36DA7CBE2F66986FFECCFFEEC9BDFFC269BD58C36582AB15B6C7F8E5EF4FA49F51A64EB186A6682F546621149A9A200425914412E87D4C065975D76EEB9E7A2EDF2A8460EB1A26BEAF37282D9156C09D2ABB696F419C0D854121BE597563D6E391A71FB369F32F6E709279C70F9E597A3B488DF50528541ECAA120810246278765D41638359CC39273B01A4966358A97F6760F1E6E703AB56AD9211E67C33C96357718485D07F717E24FEA7199A6C76FB9A4462D8215E5FB744EB45BD114364BF8698C22CCD86F2E1D00BD34313E95E61E9EEF5F1B16E433EEA92901799DF7A6D20B443A79527CDB1656B7FBE211CB4D515E79D75FC21870F87B23C21AC3BECC3477FFFEEFF48FEFDB9556F7FE3E323C379A7BDA437596B651AEED4647749B26232E96CD56C3DF8C5AF25D361C9E892B1F1CD4B0646364D6D0E91B517E602E5EC1D529D184A731950BA13347F48152E6AE0A2C08C814A67C92C9F4F8DC549D3F90A18616E92A9BEE8778CD6EE8B905B10B13965A6FFE637BF09118634447C17C810C8612CAB638EA0F7BFFFFD37DE78239B1F8207BBDA0E4C7AFB8512CB46C015C317AA096386D830BBECB28BEE0E7126B92D34482843A1FA7ADCB28CF0158BC202E99A6078FBF268F1665ED0843212AD6F65F38A11CF1B9ECC7AAC74FA4A2412909FE79C73CEADB7DEFAE0830FBA9A2DCC05A0BB90E6231FF9883E29452B517EF2C9275B01600CEA968E95239808BA122174349F13685AF939164115E6757FA810E5AB88B3617DF34E1AD12C9BF4835E5DB491EA3306D3881B3936DBD38A374A4FF4D18F7E542E4528294AF4D35CA09C3D09BE430F3DF4E69B6FD61D09F01E77DC71F21EF44548BAF1C5814152DD811061EB8054D29C1C75D451D75D775D1E1144C4107C42CA3EC01A9E7C1D70CB58E2046F89FDC6595203EB6B559B643759A2C9A346E88C00F20E7199547D0BA80BD7FBBAA384B22641A2BFAFE0D52F18B274121E7BEC31CDC30D37DC80D9E45E43F95C2246F69B56E788238EB8FAEAAB8D82D60780BB03AACAAA064AA610B726E6ACEA5924E9302FD016DC174A4EBA4B71926546BCE52D6FB9F2CA2BC9CBE2C4C85A627BC73EBAADBA58BC5253A1372FB8E0826BAFBD169C20DD4CF109E819ECB60D7198D7D9A3502132BCD9786A7D5E3BEDC20B2FAC57BD17A9E8CF2AFE515D473B4D3E6E52559751666D426CCA94A110718CC4E85C2BB018E3E35854529147DA557DC73BDEF195AF7C25DEED5BCED18679D14E4E681C0C0855A522FC65D822175D74D179E79D67061E979C01976511093BDB436224BDB457EF34D290B69399B03C6CFBCAE10DE31303B5D0AB17F9DAAC97D607A58EDB793BAD8F8D8C3DB029ECB0F5376EBBA9DE6DBFEEA0BF908FFCC9CF5EB26E62EA86EBBF1466C686DEB6727287B1FAE665236B0F6A8CEF32D2680FD69E583B319237F395B5DA83B77E23CC84E650AB3DD1599E0C6D4A263158D99936FD79C56E435EE27229D3D2D3696F9807664181BEE517273144F9A03FE8DDCED62F55F14F3007E8A73E304488C254F315B083B43ADD6BD6ACF9DBBFFDDB7FFEE77FDE77DF7DB5D34CC28A4947718A219971E304DFC575A74C88AD348261AE827152CF54719A491D90534E3905E901292C4D6B4E3DF5D44F7EF2937D8C7BCEA3852A4CADCF9C7EFAE96F7EF39BBFFEF5AFB3B721B79A3F7516C58BADD48200B1BE90B51E90F3183FA363AE7120AAD0776E114F0A5A8FC703700010D32499B05C30C925D1BEF18D6FE8F3DB6FBFFD934F3EA9C945F5C616B4412B40649D8E8E034D7D8DC9702F101C043A2835416ABBA5ABA78027F43A994618B9F3D297BEF4BEFBEE93E5F599CF7C069C11D8DD0537311E243D5BC839A525FF57A8309C80AB31058C8605E60ABC851312B7EE3210C049BB1071AA491249D0F0271F369F045C7F806052847A288AE2F1B9B9BEE5AC3E2F7F5ABE910BC6B820F3ACAFE8221A67EC2AC5B28FE8165FE1C19D9BD4EBE0830FD65E5F2C77E565C54EC73632EA92278A31C04061797C8D0A5B984B7DE0031FA07EDFD1EC5EC588EBB02A1B06D8398931A3E5B9885306C87487348C19096524CAB4E1FC9515674E9023449B4D81ABCB6AD8FAE799679E2903F4B7BFFD2D5F41105B57CD2A89882199689E94B79E8E29A2F535F329C9256BAC17F50646F16BC9E0538B8114CE6F61F450C82451159727826C32B538E66CBE509BBF3892861F4F230AEC66A605660F2FF416C47DA810E624F6DC483BAD58E9113224F00C90CC4B70A264B7DE07C2A3BF624E85A87FA59B761447A3163229572960A9C7A1B0D32BB71ACBD72783B5CE7467B0DEE8CC74432399CAB3EE4C18EE8D4C3D3BB35D6F87B064EAE2EB2EBBFB9EFB8A58CEC4C6AFDEF8952561DB275FF858786133AC68873C8C6603D31B465BD3BB8DB6B79BCCA6860706974C741EF8C6F7C3E65E3AD0CCA6BBCB426B6378BE6A252626C34A36D22554862FF63180264723FF083F7881F3D5A7B99345E8A2626DE7CC0226350AD84099B8AC60B11CB05166495923A34591F094A8774B445D817E94728B71556332609F381BA0C6BEF8E0CCCF5F20F021D9C588CFCB620ABDA383AFBB33C3A10461508C00D19B248644259A488742E60212002D0BECDF813122B50E79926CEA8BF0C53AB84FCBFA682FA880B39255F7252F79C977BFFBDDACEA33D10753ED5BBEE4E28B2FBEECB2CB28BA375C052A76D409234E2B82823EE0CC0B5EF00209116D3239C7D75F7F3D7830906FD4DD4BD44A3710CA3683397B027D4C356AFCFC043D38C921F2804314524F4B4A6A834D9C4F2270A73F51A3D9F7F5302F62D61715EF956CBAAC346A439795E9F4D6B7BE95A305913725C8A172CB7828B4A39C12EDC877BFFBDD92D4071D74D09D77DEE9317374617A03E01D6317FBC41CD4224E2740C3896A8CD53CDA9AEC887E01016151EBF6DD14AA4BDE615810F1F379EE2B2921C189ECD6FAD2EF73410101853530317864283CB5FEEE53C0A1B4E52937D4B6F139D7CF3DF6D883F8B067D539691334F6A27EDDA1B22D42855B06720976C3FCDB543E5005617A6442CA9E87A4E2CB253603A302EAF9C8238F94ADC9D18AED3C90AE464DBBA63C545576BCAF8B6800DAFFA630644E1C52E2496FB8E186E38E3B4E1612E7D3DCCB7959E0EBAA0F7D18D6EB10E559083F605CF2A6E130286047564214A534AC096B430FB56AD52A6DF24B2FBDD4AE4C58DC03F651EAF380B522C810CA172D3408E6C318AC3D430D853E2927E6D39FFE34DA1A392371A15B83D10B95AFF9FC21D5ADF274B03E90A779BB39BDCDDECBDBCBA7A69B53E9CCD060AD3E313ED6498B2E0CA11B4687865ADDF4B9BBC6C392B0D32BB67F7C5399607AEAA9155963FDEF3A3BFFE56B9F5A7A6F77E5A6301896AE0C9BDA5A8E5EE84D0F6D3C60456379EFFE751BFFED77C964984A9334C9477B6163773A4EE6395F13AA16D171EF3CFBC198D1045A1C72584CD5FE41651C1FC19854C30B1447D1BC0381E32070624B11FDB7A0071C2A2323CE62C40151626FFE2766313B396E3EE8F20A7AE55D75D5553EE0F84E1EB9014A1AA74E0A89182222F8C714B8727E930A6F683D859AEF6B2CC638990A1802A0990A55D98B99044304C8DDF212F4698D302F046D62251D49ABFC1869182A0388D45EF165576E19D163102FA59CE07E51962E15FFDCE73EF7BEF7BD8F8C1DB7276A8F9D4EEA1B23976427182EF35410A7652E70B28985FABC79A7EEBFFFFEBAD1873EF4214BB4BC220D370325712DDD54DF62BBF349883AB5395812AF5F3297959009BAF0C20BCF3AEB2C6D26ADA223AE167304D8096C12EB365B376152ED3099206EDDDAD7A329540D8E48D1519A46A3C6050F8044D5D1471F2DD9A4EF524EE3A06852816689B5C25078F9E597DF7EFBED3FF9C94FD87FFA8A7E215E6ABBC121CA1039E2DE22EC7EE0A94EC2E19C194FB7E08E34BA4D1B00A3C789097BC00E4BC034ABABE92E2F7CE10BB5346E15608A25AB4F16D10C182E9ED6EFEF7AD7BBBEFCE52F03D98DE9C308D9119146446655A33D5DEAF5AF7FFDD7BEF635DBFE7A13503D2A872039869DF3581AE4AF7FFDEB103964EC55CC474022CE14B832C41127A03AEE518FE0C68575F029293B5742EB16AAD21D7D521BF2B4D34EA352CBA492575E79E5873FFC615945B4C284FD34CE4D6AEA7400F1F20921C6E86E260720455E757D26A5674A38E6105B365EE83ED51B670A2D46355A026638EB5E5696BE56B585D6988DF5D380F5C50F7EF083F204B4ED292AC5EBB5C28B1255257830D5B3D5B25A2F5BDE19DD77604363B239B962A8914F8D6FC81B216BD524AD465BF5C15ADE98DE6AB2B776DB1D7758F378E157AD585E1F5BBFA13739D05ABECDB3599E8C347AE1E1D1DD66368D6A8B486DB7C2C6FA92999563DF7EACB53A34C3E0E690A5C3493A31DDADA0643E2F7D6176D691F575610296257BA92FFCF8472A608827F965AE2B3C7B7ED3B9A4D3BD795D9810560E3EE7113A3D2C1282B64060FE319B641F4B8C1304E664813BD3017473027B230060397784619193AED6056315231550C0310E0679EB27C285706A4F2FDED1D9D11888AE6947E9747CEA539FFAD33FFDD31FFDE84776E16C16E8E0C81094A378ECB1C742E70726DF5AACCFEB5D2C1CBD600E38949BC43180B8D1915F20BD396B454820544173D42767CF0D380158E942871E7AE8F7BEF73D0899DD1D4CE32697A6CF43FC0B28D4A81346B0FBEEBBAF5EBD3A8F3A20C134848110571BF719E9A4F4A96A0F1511A6E7453F01CA4A659E74D249175C7001B40FB013C8E72040A78F49795F7DF5D5FA80F46B3EAF07248B4D84D93C187A7C69FD9B6FBE996386BFEE7A0F46A867D49B586AA16CA9411346BCD2EDB7DFDE494ABECB19A8CFED7EB8D801085534D56C91BA11740DE87862B0F2B0E59E02040367A849F323A066E27634CCB683967DDC695C44F7D25D7025F50157CD2F28204CB84D74D1F8F63E2B27CE47B285AC51F0E635B0F3CF3F5F22D814DFA14A32E5558799ACEAA1CB4DD1CD2ECEB3C513A26A1FE43E9762FF703B0332C96E6011A34AD1491C5DE62DCE2A21CE7A556F4D6B88745E7FE22442A59A1DC9B07CF7FBCA2BDC3EEF6061B00F4D5C4ACD18FCE1B455769E8CC9278F20E1F2C0030F38A11BD7DC7B77F9AF310E80A98B63514955176485B1A0029E1FBA0C73390D2CC4EDF1C7012700F0CEA0F3151D1C006B2132659E2FDE486A85AB9AA7B5504B43D269B657BE7A645D733C3CB57C7828E9B6D7B79634D3E181F1998946E8B542D8988465A3B56C436FA457DCAB3B3CF5DC78686D3732335E0F8D6D562E79C1C4E38F26C34F4F2DDD58DF3E196D0D6E5832BD64C3F2B11BD78D6E0CC361ABA7C3C4F07603936B37B41A038656B8C601D4671CAD89B7BD9ECE6536B1BDF25F52C0E5C45A0117BF7B1DE64376AD5CFBB6A297AF8FCB627E2C30D640B1B07224B9AF309D8FB17577DB6DB7534F3D55A29855B3C1EAEA0334AEA6059A451BBE315DAB6940906304A575B57DF6D9E7BEFBEECBABA64FF6A60CB3F249B4F430A589BC11F8B920A7C3F775589834621C48B01A4AE65176F469A8BE0844A838F3F52D4D17AE9A6B9C4285D2A2F25E832F40A38E8C5D72C925679E79A6AE2B7DF9D6B7BE553602F4EBE430E0272349CC33FB31DC8B86243FE9E4B4EA8EA22BC7E4124804FB3144478D28E1A934D7128EB253F009DC8E29990B2ED57A6BA877DC7187AE231DFCFBDFFF5E37D2904C629545BC1C69F55AACB1BC6B286968C5905057ACA84BC448E0B36B65156A45FD08BE9ABFE2624DC77C20A0E179718201ADF0502C39F542BA35545988244DDA5FFEE55FDE76DB6DD8B92CA11B5AC4A2C1791A8E871913A96FD14F94B1630921CCA163D5CF134E38E1339FF98CC673CC31C77CF6B39FC5C5374C298BAAFB597DF85B78AE430E39E45FFFF55FD38A7A8CA73617ABCF894BDA50D80E2CDB4DA7A62B2D29D280ADE90A3C4B52B5A8D367645D69DFC6347271D0D5F225EECC112AA2250C14BD73CD35D79C78E289760143847999270DFBE17BF116CAA25692AEC0317B3B41206361582F07EE382FC60093B0773A5C173FF7DC73E510E765B933D175362D65815AA04F7CE213FA0C3B76BEE9DD37607D17F6560D80F61531ECD145964989934F225A9550B519C5D875100F6C7F289107719694DE12FAE588238EF8C77FFC4774B0D68B2CB54EAEFC2A564D26BE0C7D5A59C46400B146191A189D9C9ACC43566F26DDBC275DBCFF4B5F78DFBDBFDEEACFEADD5A77A6161AC3413BBAB739ECB47264E353E3B591C16E32D3A967B43EAFE7A1D14DEB796BA03635D66B4DD5770FC32F9052CFA79FAE4F3F3C90AD1B3B386C9BAF7CE65FD68587C3B2EEF281FAC00EAB767872C3E3531BA70932C7B58249C4B6DFEF8C26F9AC4A4D664B76D931B564A897F7D290356A12086D7DA8D54C071ACDF593D3E56E29B46CB757FC227F5B73DC6895F0E019C9C9D048B56A698954D085D2244F7B1A4E29DECA1F45743EE459318A5C7252EABAB8B7FEA79E866EA61D580CB29B95AE705A06B4F5B7EEF330BA6C6ED7133F291630A6BC8EA7A487D7D7BDE5F3E8156BF73E83200EBCC5B807B758D05D64689E71C619279F7CB26B17AFBCF24AED7C9B1D2E6566B3398564E1192A9E2FA41648CFB464E022A09D57A4B0212A1088D97C5D4AE067B103E9F4AB4F07C73CAF78CBFD22C38807152A0B5B23217A8A9D91B8B411D146145723BEF0C20B2FBAE822D9208EC887C89E35FAE0F6DB6F7FCF7BDE639E291712782EB8BD0EB91E4FE73CAF08EA0C7025A641B4C12546BD8AB71311839D9E5765C44E066B6C7A933688D258E815849DE357B19B9B44A563F305D3A5975E2A51EE6259EB608D4D0A49CE594C31CF02E389F2E09A40BAE1EA7D97FCDA72C4D48A33C10E7BA2CF80E67A3C706540A762D2637B8DA61E4BE6960A3039DC82EDFBC217BEF0DE7BEF655919D591471EF9CFFFFCCFF4020B15DFA1930E087783E310E5B6F1993D074B7846BAA668CBD6CA9E391A121822943D919610956AC4CDBD69A044EA1D04598C2F5DB56A95F4BAAEAC6B9A27445FC76AE4B23241B439B9ACEB95FBF2616C062F28DB09F705B9B0EFBEFBCAEA32B14ED892A7B2A59789176C4713FCA7A5B156D3EDA1180CBC54BE69DCEB82AD45C61A9B5217D7836B5921CC71CB04A7156280DE62E32704ED1B1D7BECB137DE7823FE745C1A1EABFF5035EE45F669486C3FBBEFFE585C381E2A7C80B193B256B54F8CE824998D154E48D31219F1B7F039CDD2E1A1616991E999C966ABD6C97ACDC1FACC44370C855DFE649B4DDDF51379577A67C948A160870B486A5B3E73D24C022597B206DB45094F61650D8C4CD546DABD56BDB97459BD39FDE4D3E3BF7B5CD739E80D2F1DDE387CDF1DBF9ADA38D1AC35B6DB7DFB87563F94F49E2FECDE82D7686192D667BDBA7A5A2BF7620FC534D01AD1ED9B456FC102985CBCD3285DDB96567F60C58A658383AD24CD4B8BAB3ED39E92930FAA716A7C42275B57E35C4F4E4ADFD632D920ED6EBB97497D4D757AC5F5507F28BBA45E6860E9D8C204A89746409E487327794FB3346B16F47B7EFE6788B2C54644F3BEF624FACCA62DA3CAE6317FE50BE198D8E1FABAFB7721F64384BD45356847C117D477A24395F2881B95FA2E9044BA2CDE5515187656C07E46449941A9FA4911B351B4046E63C9E0CF1BA34E24C9DC23644243054F411B7A720C34493827E88C50B91DA14AB9BBF699844DDC4188C119A519CB9DBE3D1A77568FDB4DB8E52A60FD1075F3B60561A23BFBC77DA0FC73CE39E7BCF3CE7334FB631FFB98FC805ED50331CCF55192C511FC3864A82E135C20FB7A11672954C366A472DD8EFB87F39251F20FFFF00F8E764AC0D11AD3FD79EC71DAE678D7BBDE25598CFFEDE80A467712911CA1FB89F7EA91FB2ACAB9236B17D3892022B10680BA20B877DE79E7A38F3E5A6E131F23CE41126BFFFDF7FFCD6F7E63AF5DEFE06D7B0EB59B4F3DF554A226D0CB91FED18A9C75D65971B91B8FD3870C67279C7DF6D9175C7001D87D0DB25E76B3D7ED742F59001A89A65193699B433F31B33CF31A217FA29384E37231381937B76F4B3336A7813506F9EE3FFCE10FB7D0422ACC4D0B25D10B539DA501BDC9121F7FFCF15FF8C2178CB7D49C77AB3E867406244A19AA281FAE30D4F0D80A8CE7BDEF7DEFCD37DFEC83403E12AE370C418FD0AC2C0B8E3FAD18AD4305E9D20693A862871018A44DA174B3668CF4B07B9D6A92F5D7030E38E0C73FFE3184D858452CB12EF2C94F7E525B42768021F77CC03E53CC1EAFAFBFE94D6FD2A5981F3A9C0392EF562DE76269AED7F0E092B171780427A43B864764DF4C27F550A89366D8E1C5DB8F251B075736D615A7A0EC9D9AC917D5E5D250E25D82846DBD782BCF9A53BDE96E3D0C0E0FB4F291DE33F58987A7B367BADBEFB9D5538F3E9174C2486338EBB6A7F3E9AC96159E647776187D55FB2EEBEA1F6ADAEC75DB956C94FE250B10924AFC24C54A85AD570E49E31619999DB76B0D34A480878606F2D02D9C885A989999EAE6C56C64DD0219DA9E9A25186FD4EADDF650893EAF499376DADDF1E999E7366DD8B8696AA69B4C4FE533D3850EAED79BB5B444C9F4DAD2D6A1F088A1602D14B41473B14B9334560C7D9994746E872294310BEAAC565C6B1B27B9AD2617CC559F7EFAE992A58E9321D20DE5716375CF703CCFF108E3125E06CF2F98DAA649F1B1B2AFECEA801095728408D54FC8CAE4B88EDEC700640E51A86200683A8B08D3AFD24902F168871819F53C67A1EEA73F5053E554685F3C3D940E87AB3EF898D1710BDA86D63436079086DDB2B1BCDE9148C2EFD965975D74653747C2C43082260EFE301759455677C61967C83DE52E18562EE28E5F5BCEC17845D95871C8DE691EFDAE41D2FD974F82B020E646D29778A0440F010DFA995B77F6214A1C99D452EDBAEBAE12C716F1FEB0CF3C41059CA7830E3AE8E73FFFB94F8EEEC29FEC48192581A0972A45F2C6FE25CE2EB17AF69013C97AE78D6F7CE3DD77DFAD357AF8E187BDD6FBEDB7DFFDF7DF2F8B475A138B847022AB43C2FB4FFEE44F7EFAD39F86AAA5AB2EF8F18F7FFCC31FFEB063387D24270EA8C621AF503558050AC4E3B00A3E99E6BAB3BF45D225D68879547E87EF6583DD5964B634611B775CDFB202F65EF2790675423984AE661AE71D76D8012880339D440560CC201ECBB9B5FF1783DBF1E9096B13CB25900095A66CC1BCAA13053B0699C99673F6082C2D0D011BDEAF957D8AA8C3264DA515A7BB00B970702ECC18807C60FCB6C2E35E75212AF707CF9554142B612E9E366E061A438BE72BB62AEB61033ADB71C7ED2FBBECB2C38F78D7D0706B3059B66EFC99301AF67CD96E6B363DB2D50B963DB17E6363B8503B69A7FCAF5736FB93CFDC08FA2F69078DBAD90C438D66FBB96CECA16E78AEBE24DDEAD57FFAAA1FFDDB0F3A613AAD877617399B96E1A56E1C4E0B115AB84FF1CCB211847AA758CDF2BC27D27659AD78D87470586653B7D5D4FCAF78C1AE3BEFBAEB4EB57AA2C99C6A8FCB8F95D72BB75E3BB75EB8C5B9FC5E9D2D88C7F35ED6CBBABA1006E5606DB459AF4B7D1673D2CD364D4CAF5DB7FED9F5EB9FDB948E8F4F8F6DCCA6A60B1D5F4BA5036441E449361B119C4570D56B65A54F636A72D2E1DFE479960F9D9AE7D9256342157C47AF32B804F7FC8897AC4F01F7656D5EFEF2973FF0C003986ED0CBB8E9BBCB9C9093C603F69DBB3EA3C71039B690AB10DD64C2919B1829195F363611E00BD27E067EE45651A6A90F912B088C31ABBAE0501F85B626946B8F2854482618EC0B94C63EFBECB37AF56A4C69E92D791BB7DE7AEB638F3D1697D55A8419A3E1BFC6C0E605C14D8C1B56332C775036E04DB40058CA6E95D3C799E7098AA98CBDBA586404CF6D9119EA1CE60685FEA00286C7D50E531C58433A60C540F2002D0B1AC595D3400CF45756BA0F6FC58D08D5629739D8C246A15C12DCAC414331AB3652183C0ED901FD29C627BFE4252FF9CFFFFCCFFFF13FFEC7673EF3192717DFF6B6B77DEE739F437003E8D7FCCBEB95FFAAAF10040676675786DE566618EF6B6FA9116AFC1A9E7ECF2B92BC58AAC615A8F8F421EAED9344AC6714CF9C74D249F29CF4BEEC9B871E7A486EBD76A0F7807D262C4A0D460A805ED9BAAFF68FF4042CD0348D8E535921A282CA2A22214A9BB0B2F3B21F702863B9B212E8776B54C81FAF806144D1E3E89ADA8724EF1DCB0166C9BE62CFC0A721ABEBD1471F35264E63DB76DB6D258C1C2BBAEAAAAB3EF4A10FB93128397BB49AB78AFB9CE3F45BAF2F38FEB4EAE4C85AD08A5CDF951835E33C9578EC22BE15B352FB115CF9CDA1701C8BB633CEBC68D5D0E55A35DD8534181123D0E3DC37EEA22A69407813B3329E6D7935500E2C5D3A8A9DB4C376DB3FF5F4534361B01DDA432B06364D4CECF0B265BD91990DD954DE2CB4AC26A25584820BF12A2D3A53066807F3303298D4DAC39B9E9C997ABC938C87C14E5ACB93953BEFF1C4338F8DAE1C5ABF61BDBCDEC1462B74EABD6EE82493F942B0A65AD43425AFF87C0AAEBAB440C376BA3345E4BBD07EA1D92A48DC0E3C70AFB1B18DCD5663971D77D865D71DE4F2763BED75EBD63EFAF8C3535393DA4AC323ADC121F9490D8D465E7EA3D6E5B2CD9278B75CD41296584B6AA91E2A14CE7C081393BDE7366C5ABF71FCC975D9D4646F7C7357A26B7A26F4BA69B717F22CC97BB3DEA1BCE0C2EA4A8A206D9160DABC89305BDE5F8B9819C308BA980DAC0D86C4D679817488396133CCEAF845C2CE218A6420181D70E565D10DA158EC84C41749E7315D032D666F3B9DE194565ED6526ACC471C71C475D75DD7C7B0162B6020DF6EC54BE6850E25A47B7D41F7F06648346227B316678209F561611B68ECCEA4859AE773925CF0CDFA90301D9C8AD8E32648853B455AAB6F66FB0C136C9997BDEC65D26D926E679E79666C40B95D12FC611CAD785262BE7B9B51F12D2C2F006FA32DD010F3556C5F9E237EB1B7D2B9A4FF3CAC2D175C28EF12ED9E638E39E68A2BAE001C24B10BE48A3A489BFCF090380EEF68B67ECAE87BE491471C3786278B2C6F98D7B7D8EA1CA5A825877D5303A6B0D5F7D56ED345108BFA493F1FBA8284CAE34476F3681A92AD1F8C803CA267632FC6ED71DC97D0EE14F626060133A9FBEAE9F44F8D049F0F9A0BD2339896DEBEE47A6311ACBF4AF79C70C20938F18EFF5C7DF5D5679C71062961AF9D876A20462C1CE3726737083243A72690C2275402058E71D5F8820A38CC0B4173532936AA86484F68C0B2EAA462591D935D50C8C45378F031D61A7146708238903E63BB046B15F001519FF9B43E5B30346D0E5240FCE77FFEE73FF8C10FD8EA7EEAFDF6DBEF57BFFA157472F64A43693E523240F987A5271B80DE6D3C8561CF21B29C7C538F4717C198C397CAA35EB316E873B90B52AFF8AB5EF9A7FFFB27FF5BFF5EB664D9D8D88656B331D56E3747C3541AB67FD1F0C630B16CDBE6C44C57DE5F2FCA3BD58A38703A9C67336361EAB946777D33DB14B2F64C2374F5A7A98132DACCE4656164606866BC9B84463B4C20F45838D6C53CB2A1F2A838416586AE3E353129055C68CD5CC23D2C5B5A182207BFE280767B7A747850AAB735504F348CF6D4F8F8D8FAF5EBA66726A577B7DE66C5D265C343C30D4DC3E4E478E84E94ACFB531A5B112F9B0D616769D88C32CD7B9D5E9EB43BD9D84477F3F8F4FACD49D69592D0216D4E4D249BC6BA9BC626A7263B25C6AB18465A4385246979127B9DCC5EE3EC83901C0E5D7C219D0E8878890BE611341AC1A587E23032035944E2166BB83C026191770300CF61D7BD70D290F64EAFF2614ED37C278A70A079644D8E417E4ABB0EEE0E97B4C17BE3F05812A17A5DF5C495EB514FDEF8A9E5E1FCF297BFCC4AD658C323902A78C988C498F22894B42106D084884DA870095CC5816484E8D86C967C216E374B7D67A81C0B333987455E2647351F16A68A0E9E748F7ED96BAFBDA49BB1B6A4CC4E3BED34B88E5D3E61B8BF25AC4F635E55703BB0CE8CC475AB71D2770B0A98AD061428EE521947F3E07C9683A2B1E1BB5888C0299157F013F703B0AF90463487BCB4487283B49CDCC22CBEA403C0A9115F8D833F86EF87D269C365E9B336624D16E6BA2F4C97D64217A19E8F9D44350E90195C28ED128036715F1D897EFD091605600EDEA338792ED992252719ED27753A90226317B0C6597FD055BAA9E188507C93F0A6E1016576D0E238A20EE5CB81071EF87FFECFFF71EE7FBE8D9CCF05F119EE8E0FD7376FFF5510562C5FE62A8C80198464215AC53A6AF6F4507A041E16B79BAC84564113A8C388DB9194848214B35D73CD35471E7924B9FFD89966E7EB59A817586C9C1604D43861A56975F20A5CA3BD6468FDA73EF5A9534F3DD5149E3E147D9BAD567575E4178D472377691C377DD18B5E74FFFDF7EB1739F49FFFFCE729B2B2568EEBE248FF6379E7735FE5C268136EBF71C3865EA7C8614D8C6DCEBAB9FE6F78F9D0A60D63A303238D666DB237319D757778F18AC96CF3403AD46974DBADE95EBD1426DD5A7366A0D1A9CB237CE6910D616318A80F17FD0BA7C6A4A7E505CC74C3C0606BB0D9DAB06EAC2A46A99591ADC1A4EA96C352C634B1F1A2B3A3A428A550B5F59A753D54181AACEFB8D3F63BEFBCE3F63BAC6815859D43B2C1B25E3B49F3F6F4D4C64D1B9E7EEA996E4F2ED1E0D6DB2C1B191D18182C92B3EDF6CC50A3A8059D962E4D42AD9E17C1EC1CCD31564B73190E8515D90B7AABDDA94DB7F3B65CEE7C2024A3211F9D690FC8997AFAE94DCFADDFB076FD6C3FC39A869625DD5E4927D26CF6DAF384E42C8EEBF9340DFD8BF4224F81B58700FCF8C73F2EA17DF8E187DF72CB2DB1079CCF2D939DEF13B3551CA57BDDEB5EF7C31FFE90582054B59A55B7E3739CBFEF68E7731B7838776BB02732CD9DE64354FE60E59247540144BF25AF68A78D8D0BF65B4FADEFBEE215AF9090B194808901CF078D3358BEFEE22FFEE2A73FFD29E81C77E48CFB0F85AAACB97892BE8633B098526E0402B90FBBE436BDE81BC79FE3F47B5FA40E6C451FBFBCF4D6073EF0011AB9208BF3AA73783E97AB369689F3130C243BC16687D200277490CF03616D41B0E206C5EACA3945E30E6C79B80C432615B931868DFBAB8F9D74D249175E78A163A726A6703112D3AE9DC122C5C5D0611E4B465F4A8FF8B62B9D40F1306CB9920F3DF4108D710027A366A4B17429AA4D8CA147D0833E8338C5731537CB7443C3B422CA4FAADE35A424380396A1718AD77CE0F123C41B8689E52B0EB4E25B7038F9B03EF0D18F7EF4BCF3CE8BB9825DBC4F34FBECB3CF9638706521466E2F6AB4E2034978EA6D6F7BDB8F7FFC63EAB6F5616B1D166BCB5881645E19521F6A21ADFA2E609AE8E9682B891FAF9F37DF7CF399679EA907E1F3EC589FA0B89B087DEE42D50ED970B630B7DDBA0F3653BA85F1330FDC826F99FAC3D0481AA9C6282A82ABA0268922C08574DB6DB7BDFDED6F3FEAA8A3BEF9CD6F52F2CE78DC291653C3D816F87BBB55AF6EB68D3B5A3A0C1897218528E8D568358BDC6A5ED4DCDC7CFD8DC71E7FFCE8E0C8F8D478B7D6DD65D7BD9E5DF34CB7E860DF4B86E45BE46D89E6C9505B1106764A9A2B8A8C5D7B7D77FAF1BC574C672B743B3ACCB572CAD37ADA4B1B5948867AB56EAF4B8D4B2DA94DE693794DC7206C37B21DE14D1C83B8138C3798857271B892BC3C296178B03630D858B67474CF3D77D3611CDBB4B64CF7340AA4559A48D74E4D4E3CF6D8639BC7C67B5977C992A1152B9748FB365BC9C060BDD0869D274B83BBDBA8273539CCDD4E896A9697BAB95E2BC0643D6E5B93661EE8E5F5BC9366BD46C8476AE98A6E36BC7153EF8927D6AD5DBBE1990D9DB270409E6F018FEEF6666D85F6F4BC6603E5036579DB3E983B09CE2776E5033A9EEE7FDCA780F3454058BA2624187BECB107A81A0EF2C9279F2CB3CF3B9C5AF6BEDAD10543A173E8A5CA90AA6CBE638E39E6F8E38F0F6569ABDC3CD812B38A74DAAADD74CD34737BC31BDEF0BDEF7D4FDB529A1833EBCD6F7EB3F6B976BEFEBA76ED5A9313E4652910CADB3154CD95D97B5C85EC91DF74D34D7A4019A37C2B217AE9CD141BAD0EAAB8F88FE0A471557EBF8F5E20E6D1E55B4C6E1EB523A4CDAA99D6C195108808F3C8CDB760D1EB5BEE01EC3370EEB9E75E70C1057D7D4B9CD200D8E280839B0EF5AA066A2E5A8D79F9CD65CA0C9C73CE3937DC7003DD115C3A89E76AEC89938E313F2A0AC9A82EB20B164F71C0CD368DA12E7C4BDE0FCE370C590EEA86A8159DEB47633469BC5FB115B00789F9F4AA06C646C5539B4BF0DC1CCBE619A69B1E33E6AC64ADEAC2C66AB213F47523A8A9DFC51174723AABBAD7651509A2792A5C9CC046E59073593D9AEB6762DE862D28CE18F2A38BBCF5AD6FBDFDF6DB5190AED8D68ED532E9B244E9593EABBAA4E23FD72F183ACE56F031C2D158453142C71F03F342E00E0B2F54A8FE785BEAA04A7CC498E1AC6A03104A3AEB6C6E53F450259C1C8E73E2C6E13B1F6787E8D38A3498B8579C82C1E1265001BF15D639C464A1E2FEE58E9850310E8ECBC65238FC575EF9DC86A1B67B3001635466884274495488E2028A5099B071D6C302D16C2A284E57B2C54C9C59D9548393E24E53B39E53498D5904C60BCE4AF9A4BDA48418D7EB5AA96CE58AE69E7BBE60FBEDB61A1A2EA2AC59A7B7CD361256C573D51B3AD70D9D92A9E989CD9B37AD5DBBAE3C2F8DA1C186B46FBD216757DE58BB9E4FE867C867F26C3A290B8A9222FE9C248D769199EED43A3DFD4BD233A4CDACD84A49B3D7D50E6C767B3AFB031393E9E64D9D89C9F686B1A98D1BB3B56B67C6278B69498A92688DB4D9C967A471537D3927F85C761A4E6605A9B6B3DCEBF26877AC7D39DAC71E7BEC1D77DC210108DC01FBC99236AE4AE5C09A10CDD5B160A731FB74A6D6AD5BA7AFC03564CF27548E693EB700CCFB219DD7DE801892916531F7806575FC0B6E640CF0843A900DCFF19CFFC26173EC5A3F0F3EF86039C79C47DED765254277DD755778A8E86887347BD5AB5E25AB8B78F82CF20D8786966A881EFDC2B942921A9C96540C0C48018EBDD381B16AC48F41A080E9707D21BA7C7E6E80F3E6EA66FE84E65BECA04209C25368FDA4930C10302E9A9D611266E7DBCC5F9357C0F1B899BC9D72135040FDA8AFA051ACFC62E253595B0F3CF000C34337A090081B20E6080213F14EE611EA3A51D7577315AA7429D2562E947CBE988295ED029F9F73300B2A606FD65856E2136B6C306E92E6D7C50126C02229EDDBC704EB52540C615D41AB9094DD7B0E3BECB02F7FF9CB18B9D4491340D6D56C8524554B00B3B392ECA06C805B9C78E289D75E7B6DA8DC6B5B4BB615F28AB669B1DCAD5D524400D279F7DD775FB3660D6808C89F111F32514F3BED348D84EABBAC6A5CA195D5B19139FC4FFFF44F640DD848B871BAEC2DB7DCA24776E10DC635755FA1A4C1D3EDC049E555D3272F7112159BC574220EE0C76A238FD0EF905AF0B1F3CF3FFF924B2E21BBAC8B00B6322B4B56350C88E3BA76E0F2AA9746AD6A68CAB6776C233611E29006A74056EF29A79C12E6A249D3A827F47F55012FF62737998983D83182DAB3E4787E88FA72326FA65930EE77CB0A18572CAE8AE4FDA2DEB79B9745B7A0B17A4582B6843D6FB7FDD2BDF6D86D871DB71A1A2CF24783CD565968D71B19199678EF7467A6A62664FACAA3D575A483CB0853DAA84B37E7B5B49D8776A17ADB63592E4F5D2B3889022EF4BC546643EA2D91F53ED30905323CCDD3A6446E68A4F55E5ECB3319D6437936D4EE3466DA49A79DB7B3D6C64DD9D3CFCC3CBB76D3C68DEBA7A77B494FC643AD885E1746844C8752D314BA3D97026E1696643235D559323A3236361E7B44C6F1217628D53598DF3E80A52B3F9967CADE5031AE6E304BB1D78E64705E023C43E5FBFD910AD825CB7D8C6FA855BA42E17818F4C3B9901CD35D5C9287B459AC20029B8CE6130E1ABDE31DEFB8F5D65B43D478D818EF3017E421F172C5155714BD2E4C18E6B8A2B7AC6E70F8E187CBF5D6F176C5083DD4E2E07B4C23A7FB513B6B42D45AD9FD4D4AD1D81F7DC0D88DF9F0F4BC62EAF0F59D655CECA0F2C95AD4098B3FD9E0D59F5EF18A57486FC5856B3C6028D155E62B616FD1621D50554C5784DB878FCB2D80C9607F60CA6969DFFFFEF77FF6B39F0D112510CB4CD6445ED7F7BEF73D30A821CA8BF40555D0288E31840A71A0BBE315B19F0C0D4311020A835E0A60116852CFD58201F9BC62FBC3C98313DBA5687153CF1035A1824315B2D23E98B473D2A85E5B33A8190E6A4C0CCBCCF3206E5C6F4A3516CBEA9FC373D145179D7DF6D90CC900F82DA0975D716826E478CCE6FA18295FBA1AB123E9CBB46A241047E3F5C8B8F28452D1703C3848EC18B584A5AF973600116F6C0897D4E7152524196E475928746603C466A215892FE290B509D4340CDDC5BA073E3FB7F8B52EB12B6CF64AAB22F2BE66EDD08E222D05FC9E3D4015A2EEA555A6E5094B66ED9B56A43A8B11E02CF6CAE7925C7A119D977101B7819CA1E23FC2AEF5A2136CC39072C3A87AD488DE7B062DBEA0020E7359043CB05AA3DEEB140CD5B594BD076EB1BE7CD9C00107ECB7DB0B766C35D35ED6999E18977A2D7A66D70AF52F4F77A63DB569D30609F0620CA996A6A479977E4D937AAD1B9299ACF07ADB696F2A0FDDBC2773411E705B43D014940A585AB7D6EBA6ED995EBB5738E28D5668B6C2E8C088FE9E878124190CE990F64E129A21694C67A39BC792A79E997EF4B1A71F7FF2898D1B3675A70B7476B74475E559AD20C7D2554A05AC0B643DED8D8278AB3D93C95C989E6EC331EE7E622ED3805302003061242B3C0C1753C0EA1D63E3F392AAD3B2DA7B1E47C509261D6DEDED77BEF39D175C70C1820A38D61DB12CB556761B18CE178A092166C33A2DE9F6C0D3E8AF882F10398B198278C09C7DA232AED3F12122A984D6A76F10F601876B962999F101B8C5BD40A3201FFFFAAFFF5AC63E1CBFDEA06C59EF7840403C958625FF861A414A12796C04A553D92649080BA5D3C83D53FE65CAF8C50EAA2378EE50042C4DBF4B8C723839937012D96772E00E7CAF0510B12C3F601A757FEA2B168AEBE71CE1D4E0A5056FBCF146781649DAD522CA656347699AC4EEECB3DC39F331F156AC5710F40C29468987AA73406C6AA5F3BAD92CB6A51C0B49CA72A0471E79445EBE14A446284FF1F1C71F67D548331378D03B5AEE7DF7DDF79E7BEE8145415BCA61E4382282F886795FD7DC6FBFFD640F712A08AD1351D4C875770AD5F4CB073FF8C1ABAFBE5ADF7244448F0C39575EF529331A0E1C401F1B5C2CD043C4A1E8DCB98E8106E05660469CC999BBF2CA2B6D258408CF693E32FC45F695151E7BC08CF3279C7082FC69BD49BCDACA83089055943352A13271CC7E6547D3A11423AE35721907AB57AFD602C935770984FEA4FBFEFDDFFFBD36BFF69BCE3521190D127E5D36582F6A9B88AE754E843821C721F6804394E6E0C5A2709AC095F41DCF9889FABFF4EA53C04945B070CD35D77CEC631FD3D2B310269BD35F97942F7D0672B410959F91C7C1F240F4C738D83EBAEC304F012F98772CBE524BF3727D8A752999375A0DD9ACCBF67DD16EABF6DE63A0551B1FDF544B68EC5D4049968E8ECC5EA420E5EA9536C47499539F2CBDE750972F5BEB25A9CECEB4245F2374E4014B01E7F98C3CE0827A232DB5644363AB152E6CAFD034B57ADE1A6A0E0E35960E0EA74933AD35D330189256485B696DA09636364C0E4F4C359E79B6FDD89AA7D73CF98424CFF8C6E999C95E47E3E88542BAC8832F42E839B5CB690D96853054043CA6E27D18C7A26984609569AB3DC6F0EA4D7D5EAA44BE1CAAFAE0830F064B8C22B72B6C3FDB3DC2912134245E50016F0193311F66C5EF08703BCA5E62BB7C063F6DA19E3E54D85B675D438976B6208AF3D6B18220DE06EB46B103F9048AEADCF215AA108DFECC842631197AB900E8768D6F45F9D2772D5C6C90E6552D818672C411477CF7BBDFA59D006E449F6BDF3783269A26D26B5F70FECBA745573EF0C003EFBEFB6EC7EE687C4119A2F4C725975C229FE9D4534FBDF8E28B43C52C6126CE983F99161F587C8E5B1223052B4F78D6F9241A40E515541DC06788EA8888394B39518E06D84F5F411FC460311B712E79D29985C77FCF3DF7947265F720F8F48265579F34E1B3E65FBFEB93481CEF8305F56E32B76C8C4385E9C3B1410DA45577745F4D77D177F13B1D158FBB7FB085687181C985D6C1890F11DAC08C0D109878247473E31DCDB0B619BD50342ADD1DBA73EBC2F94771FE3EC11E320F946EA7C93FE8A083FEEDDFFECDF28251C98E01576C7E0C8E197B5BC63285464959C68DC6224853E07227269C1266545A41A01CC81A37CA75CEC51E6D52D5087A77C515E4C643F0A46EDE403495F7DD622876DD42E5E223D46242096F80383BEE45F1B4C0F241C694CA13E40357035609369E6265E79B6B55ABCA2D8494177CCDFF7C5CA5EA280BD6009C71BDAAB7291D5C42C585A9A13A451D4AEFCD79F1B46A94D9474611E629600CFD24E2C08A765D313029C35ED6D3A7B7DD6E78A79DB7DBFD053BECB8D3F6EDF6D4C6F5CFB6061A7996B465B50F0C8F8C0E31D4F24CD508C09646615973517499486AF55E9A1421E83C746A597B5601673369526479EBA9EE25B726B8264A836D34939182B5AC39586BD4D266AD3E90D4060A059C34F38290B2B6B9BD6C7AAAF1DCFADE53CF6E7AE6D9E774729F7AF2B975CF8E4D7502E8E8503C41ADAA41CA927476E78C94C6CAF0F0286ACC3886D889821A81909549D9E663D310B3E8363698D691463E4C29FC10569C59D5999B74CF7F4901DB69891322ACBBCEAFEE48AE8160188927095849182830E3FCD7622FD4B34410B4B83285DD82D3FDB0AD5F1CAC9A053F57D8E1C4F6AC5C0182AB3A4E140E71FC62CE0D30D93102426F52C660C9E2436BB8698CD20A155424995731CC4BDA4BC6115F975DFFEA57BF5A9A9B64F56207D542EAA52F7DA9BE8B38A336836303E49D70A88EA8CCE79B6EBA492A191386FA28B34EA6152DB383D29C40A3409D41B44BE46C5F6C76118D6184F8D031CC355416405F902D44D12D6D080D38AF3A1866158974DC2F3244404137CFC1C6679217335CBC7193A8A8CEC7A94C4ACD76B3B73DA1BBD31BD880ACD835775E565A4AE298444B5EB5C5761E08CB8348A9461B130EFBA5AD4CD04563A066AE56BD6EB8E1860F7CE003586F6820294B39EB2E045FAC6D22E17ABE05E2CCADBAB44FE00E8B7B91EA93F2B464AE19E7CFBAEBD911FD4ECDB2939D8CD065B5B2B2FC10FAFAD67BDFFBDEEF7CE73BEE87A19F08A9F94E5552756443F440D608C69B681E36190F4B459CE108EE2CE49D8F978F7160387D3E97E5C63930DE71F980219DEC79371BA64CD1ACB924CEDFF296B71027EBCBE4C572F0FF2E071C4B58CC975A49D64F9D925E5A5610E6D6A071A1415CA362EFFCAB5FFDEA61871DC694DAB274878CB088071C8BA9D85A92322DE9A80A8F569EEEB2E503BBBF60C79D77D96168B8BECD365B27796FD3D8BA62757B993ED96C0C24E9F3392617BC164B95165F2F0D02FDB317929990CDF432FD9C420187BC5D94023782146CA18007D366BD564003EBB99CF0662B1D6C355B034D39C67AAB561F4A6B83696DA8E0E70CF55E9EF4C2F2F6CCE0C6F1DAFA8D331BC6363DBB76DDEA871F7FE2B167368CCDE85864BDE279E43ACB8608C526D41CCE6898AD566D665A6ED87239355452488ADE71C71D4C8EB32D8476D999E04CCDE6EB92048399311AAEB8E20A79446E2443A931A194B855895B065841FC910A38569369C51085A1B9EBAEBB3EF1C41370ADB3E7E18EA5DACA1B2666599FFF420813927155A7FF4AF40B1F1ABBD646FCF5D75F7FF2C92703379E3DFF7298E44664556F13C7C14806F7F54076B4CA2A9D6F992287E7C41AC5E3C12A476C39B2D7172AB4E7670B173207840B6D89173BA831A902A0301E4F2394B1C31A939A02DB02AA486F72CD989B5E934E2B53D28A56754E336BF11E7BEC313F780C91C77781C810D480B3E96C0B5DFCD24B2FFDD0873E84EF1B73A3CC7F289E45B7D0EA489AEFB2CB2EB2457EFAD39F6AA5D88EFA0C28655F1F7BC216D5628C488E40C632C51771A823E6F8D530DEF7BEF77DE31BDF70F953527178B95993C5740C2CE217103D2E2BD23B9A878F7CE423DA030466B98B1B73F9E470B039CC1C1570D7EC40C640EC21A9D8B5B6E00123559D737524CDBD87C1751BDECC0492AA711D366AD56C12B7DE7AEB11471C71E699675E75D5554C26C6848D338D10826B6FCB3E4736CCF54443D5BFD9D2D97DA2CC64C94F89426914C9087B7BFA3C52A32F6711AA5EB676CAFB96DEFBC1E2CF4071ADCB9D77DEF9DFFEDB7FE3F3687D82070807D2F6B8D7943319051D2A056C17FF8F7FCD8F3F23CA39A798659224C0BE38D749C54A96571568216A76699560F23EA36493AA73CC1F54C061AE6B553C785E126C75DB79AF3DBAA4B5FBEE3BADDA7BD76DB75B29FF70747848F64FBB33DD9E9E29A272DDBC88F1A66D72CFD2C7DA0CC6370C3630986ACD460D0874B737297FA7D71DD3670B087468D7D34201177AB7564F06B54F92562369D4F3E2CD46AADF0B244AAD5EF65D68D61ADA78A3493AD8CBEA5996E4C9B02663AA3D3C3E1926DAD3EB376C7CF4E1A71E7BF4E9A79EDDBC69E3F8C4B806272D55EB65B3E70E41BE61C3E6654B976CDC38A67D45B6056FCF492EED4370F2E82DD75BC6D6BC839D46509A7E80E4A0F3FA64B5AC1A9861C4203267B11CF0827AC1174107E755B76F086D407EE11FA268B4C9EFBEFB6E78E8309149B96EF9FA680A94374910F7048A41F859D5A291370958EA5B898DC4CB2EBBECF4D34F27EEEAEE780C1D47101FC2474B368B9E815242E48E55789CF28C93012C46ECF1F4D935A12213702B189D34CCFC2DCFB5EEA8F148FD1835EEF8B97EDF6BAFBDE4B785CA22A6403654D95F4DBDD6C3E568A06F8E3EFA68992A00C7355A67AF5FFFFAD7FFEBBFFEAB0BAB42E5F9E511838F6BAB38D8AC3DAC587818BA3E8A332640EE5B5A7D0B2098DFB7CBE5EC859FC89EA57307A6D7E8F3487CA33ED7277E690E256701EE1ADF8B2DA5017FF6B39F3DE6986334C8BFFAABBFFAFEF7BFEF4E2371E52BE61A4E89E1F106AFEA33BA3EBCD9AE8A71791857BBFAEAABB51BCD3B66E648CAC3882282A6F1098F294817DC2431AF4DA80C141ED0591F23ADB0EB01BBE5158F34790AD47FACF02873EF557DAB92AA96BDA8F32B35937B66B860A66FFEE39233CCD9CF7DEE73EF7AD7BBCCC5C65172778D506208B8A64382E6C622191F7B037D48D138949A56A4BB71D20BBF90380A0479DA0F71198F318F54C402F5B0F1E1A74BFE7F9421F5ED5B143047062163A84B88DAC3B8AC31AF1A2DFB65A85A98EB1CF719250B2A6057152615EB1980F0C1D650C9C4372E05BCED76CBF7DF7FAFBDF7D96DC5CA25BD76A79769F34B65A6727F35A29025D353ED7A2B273E59A2D3DB941B48310FB58A70C5809CD8C146A329AD3ED3E94E767B3353935AC74EC867E401376AA1D194D22D7474DED26191DECD5BCDD06A268D66DAA8957D16927A2FCBB35E2349A5FE97C809EEF6B452A17099EB2BF3B06226ABCBB39E98987A7CCD338F3FB6F69135EBD73DB77EC3FA894E5782BD4806D74A50950E2BE0C1C9093912050537A93733DFE9050130362B0189B3CE3AEBB4D34EB3BE319C564BB6F3CE3B4BCCC240CEACF2BE6B6DE255307932712982947FA402EE0B7D872879C1B79CB772B5027BB52F9FE5E6758BED4F7D1142E26BAFBDF6C4134FE42ED75C738D6CF1071F7C30442D11B9204E20705DDADC155FC14799FF02D31BFF3394CEA2410DEEC7C42C10D2C144656B922440FEE29223AC4D8C194A2729E6D637C983EF1B17692C384E9C157DCCB14147A4911A5C9004305D11A5D5481A81CA267C2F358F9840CD2425321C551AD75992A5E018E37EB9F81225411491B6F612CD9C7983A87541DD4B66013D09CE38E38CF3CF3FDF053031B57D32171DED5F1C5A880B039C338E016E49052C64A2E23A48EB2ABBDACEA5214CA5FFA4653DAB80778E3CF2C87FF8877F40B51069E08B449C386C260AFEFBBFFFFBF7BEF7BD7195B93C3942D364D3DD7CDE016D4E3832D4C5D971A83F44EC92463DA04139C3175E78E1273EF10988695C11885EE179D388AE3C8EBBB2D036C0634BD19D71815699898CE3840FADCFCB153BE79C73987FA6054B085FD64AC8629D8310AFA33712FBD6B5950E85F92C987CCA3CEF0649207A9C13E96BF96CA81713129F6E664372E4965B6ED1C73892641F30C4ED9A58AC848AF5C9991A669B27425F6207CB1A8869554214DFA322912814F072C7FCBDE763216898181B86A498A5139112AED3E776838576D82954E6AF0BB8F93CF36932137B2D05896379104BDC8C7ED5892BA6314D1A9974447762F98AA155AB76DB69E7AD972D191A1E1918196E5455E9A53D92546236C9084E92AA9F2A5F05DEAD88271709ECA181963CDA9074BA9D0929E0F6E4581E3463D36922D3B35D107414FBA2D64BB50365F4248D5A56AFE5CDC2F5D5DA974C594941FE2C4D9A87669E0FE64933E48D6E7D246423596F494886EACD4696D7366D985EBB6E7CCD9A671F7FFCA9C7D63C333121959FE3B3C98B6E35865CC913238AF592AFB2DF7EFBC90F01FBA6617FFEF39FD761A71196055D1F58CF6A3576CFBC55B8D181071E78DF7DF7911B36CED4106B963E8BBAB8CE87F8C5A1E9BEEC5E52D57C2FA6EF1032D9DC1620DE90AC9AFD01288CF48CDADBF6396DE1D956F0AD4355CCA60F13D665AF2646C9F6BDF4215D0B89607F2EDEAF3E061C21C41378138057085F44468CE347FE7265363A397C2C147C11466546D0BE4297F875D45147FDF0873FC4A3451486920CCB143FFAA2DC68FDC49D757D946E016D6FEC18251525080F8BF4871B12EFADAFAF91EB35DD0F84BC85972ACE7FC7F539264FB67FE9C000FDAD6CFDC43A385435C1B6F20C96B12CA3D702B10ACA8AF84CDC3623445111DFD7F1F0BC629D24F4AAF10082754D5156B14D61C48588ACDB17E403CEAB49E012A0E64F98B72E058E4FC5FC66EF712D694C5BC16529F86643E2B185120DAE936C3B1AD32444F9F5BCEA9514DF9AE2635D67AFBDF60256C6181CD72174A1E9D5177910F2E59088D925352E57EF48955A16D83F4361203BB422F274FFE7FFFC9F6636D5E07FF39BDFE85B2EAF4A2202F77847D97689B538BFE8FCEAD6B621208E4773B3DC9602049CB8358DB33C217139409F20C3A7A133310221A6A770F9BB0537A139243884A38E39114FA688DCD1A37CA1CEBB49C52DCFC98D6369CE1184CAC521E28255173394814D61F3C711113238A6EC20CA4534A2F870D64B92D946F77941BAA1EB2485564EEBDDF6746B20DD67DFDD0F3AF0852B568E66DDE9B4960F0E50E6C4E9AD5550A082610A78A91530166A413459AFB79ACD965CE1824FA3DDED4DF5BAED3C9B4C422724D25233ADA68CB67CB0D990571D1A458D9036752DE9160AB88C60EBEA3C574F37CA24B274C607BA592DCFEA93D940A3B6AC51DF2AA90DD51B2D4D831E7D6A227FF2D90D6B1E7BF2F7ABD73CB776D3D8660D46122014B645DA8A1BD079DDF3A81B92B65F5A520FC57166930730D549D9C3C014371861C618D2E08B9C8BE6FC90430EB9EDB6DBD2A8AB8D4519D1B23E3627EFCFF939E00515705A35E59BFFAA452D92E67FC6014EE7F5F80C3C8366988FEB95C35C6C07BE100D490F3FFCF0BBEEBAEBC9279F841165E1576C843AE0192A3BDA91CFB85A8690825C10797512553A9C56547C86D86FDCC1580BF0D18F7E54769365966BB771E9EC95F64593FCA21E8BBC85ABB64D95873B62CFAF2FD0E7B070CC01E44C922D68F607784554145736598439C91C8566DB992B005D6E9FC9E07004071A0E14180B162768FB7EC6341DB1D9EEB2164F94298279B9D56098CBECE1940CE602BC0DB6033C33B6346B55EBE5BEE65412E8925F869B01D27EC73BDE71DD75D721100DDB4632B25E5CDCDD30499452C7895916D70910C04177D215402F5D9027ED554DA0F54979729FFDEC67F1D540D4E3B1397E557927B3E9760A7079965D76D9E54D6F7A9334E2430F3DC479DB7BEFBD75CCF414EF7CE73BAFBEFA6A93CFB97B4152D26B4351422310500B71F884C1030BF0BC618799391C8DEBB3C045586E874656AD5AA5878D417F6945D21E2A1C2991A72499E5B9E3D9899F0330C4D7873A0635C6314151B1875DADE7E98A259DE656B6EF35D75C4303AE5061E2624A1367EB311ABEF5AD6FC94F72D829943920B8A5FCC8AEEEF59EB7ED65A5DE8D7AB2EEBFFFFEB2B498376A5774A997BFFCE5FFEB7FFD2F82FF56FF04395DD9E217F8708DF00D6F78C3CF7EF633CDAD0D74F044E03C661BFA9627A06C0891CD36ECCBBBCDBA36FFD62F7BF98BF7DB6F555A6B4F4D8C953D0F0A37B4B263EAE583107A996D5147931B4AEC0A9BA36C3358E8E0A2DBAF547C41BE5104B193E924EDD66AB203BACD5636D84A5BCD9A14706D206F35925A5DC398A9CB1B6E686FD12A292BA89E354B254D47BB5BEBB66BFA7DAAD31A1CDA667860DB7A6338917AAD954C1DBDE6B3EBC71E5FF3F443BF7D64F5234F3FF3CCBAF189226C5E68D6A459368198F537ACC03C7B46867A13F6F1D422030D760915CD1FB82A87915C144010983A4636061C004626396A15D786F56D4BBFAC98FB0CB8C5F49D75EA82DAD7201504357E941F4DFB44B703A5E8C012A3F5AD5DBD122AC2223CD83F9098897D1A0BDF308F70C3E95BDDE3C8238FFCC217BE80803669A55D2B7B6C78F1565A06DA583331E3CCF51642D07EC2984588334398CBCCB7A1449FE2B382E70C513D833DC2301714A38B80376143682AF4261E83EB23DD709EF5C06976A9B15914DC45D21130488528E4201389B0CEE6323AC5CF6EAFCE2ACA9F81508DC5D2B05FF5AA57490CC9EFD7C84987CBBF79E08107DC9635CC651EB5E70148812344D12D054526CD88F72B71334C87242AFB768C51A698665863433463A5B9E107CA1819ED786FDF12BB90C0452338F4D8CE4670A086C1609389D74D3FF2918F4813B3EEF9DC7669BC628C025B2E9444F3B214E3F82A1A021E344D859E51FFC442C77ED2E3D87D648DE4519D7AEAA9A79F7E3A17C7B8B153257B452EAFCFB063C2209F69281257DA1814FD96B7BCE5EB5FFFBA6C594C6FBC61900A21229FB176BFFEFAEB35065D6A7ED4D720091C3EF8C0FB96389DDBA1DD2FAAFBF49850F7852A390279087ACE66B19E85DA0AAE79EDB5D75E7AE9A56BD6AC612431708C6D9C569DD52D139D03E64041E6635441886A2E42E597906662F02EC7DF669B6DF0FBF956DC990D0FD8E10D0425E9A482CB3A09CC41D96157FE65C90AA961867C971DB7DE6BD5EE7BECB9F3CA15A39DEE64AF33353C32D869F72A6142836A37F3C9D8F0D6BEB39D884293672C83C9BA4B56326175EB69A180EB6947724BFFC9D51E68A6C576196CD71BA19EEA29A66B49AFD928DDCD5C0E719E053D51E8F642BB13A667349F450EB8930F0D0F6E3D34B46DA33994A749D15638C8F2181E1B9F79E6E975BFFBFDE3BF7BE8D1471E7D4A27B5D12CC97D93963162B1FCE1C41903111F70D2F0C84C19DC58A81CCFB422F66711D38A9DD7357E168F6080F44F6A4088E1718598A33054D9965848A673894B4314F10A73EB3C177BC5FB9C4F127FD5D8CCE14860950ED93C11F4C0DA3CB2FB65A087AAF225AB18D692A81A258E16F0E00B0FC85C0146F490D93529FF1E7BEC21318D6F41D830540573DCD88DD689BE62F1E9AFDAE2AEEB77AE45B7834643EFA0D45DD4E42E7B0B8E139918076643D52F81F8920F731261ED9C7E0074664C87CDEDBE2531DB8B69AD3000C96733CB5873268E2622AA278A1B09EB9F50869AADDB8212556794C7820F8BF34DB4DFB691CC461AEEF691575377C19BFAFD89279E90ECFE977FF917DC716F5F074E5FF39AD7DC75D75D5E7DE7720C700B0BB54F479D6B185FF9CA57FEFAAFFF9AAF9B7C515F3CFCF0C3E527F5A55E5CAF12A3F6E2C21E54025A764105DCAB3A644815D1A42FAFA843294B75229F15372C88C8B34FA38BF1B3AA1391F9E5F1C9244DD8E40E1B801270369D134847267632DBDE75B47C46EF531F9F94E5C272B2BFFCE52FC7968DAB2F38264EBBD89B04D5253D213BC34929E73B488F190A8747CB50695D75CA29A75C77DD75788AA43FB04B60893226DCAE0CB5D7A028C25C9E6D97531B9CC8A4B920C262B75635A722F683F7437B092DB7760E37D58679F2C9276DDF23431654C046996AFC9AF3B7BEF5AD342DC689B74199545447B17D79C00107E8A6DAE47D05E876C5E047A425281C7324D18B4D38AB80A5FC68A73323ED2B65D46CE52F3960FF7DF6DD73C992E152D4B593BCD36CD5678A9E10B392274DCA5EBE019B3EC389C7FD60D5CA7DD820525D1416D5D3A2D351D2D687D37C4ADEB03645A3DED603351B050E4BDA361D9C6AD4E5CA76F230932685175EAF950A433FF3340B891470A79BB63B69B75DEF664911721A583A34B0B2D11A92B66F7743AF3B18F2813C6D8E6D9A7AE2F1E71E7AE8F1877FFFC4DA751B93D028C457B7881FD8148B0FAF2BE5C2DC641C9613AE1E16303296CA4942923A56886BB744F3C299D386BBB8394A2C24C33C9F211E582DEACDBCA04FBC05053CDFC48C95B7AD436D786CD6589449FA211E258A91600EB38508336B88891ECD10D464CB0322542BF10D11528C6F9497405D9DB51DEE0B7A1A116F562922633C03CC595A30DA745F71C51532D2DDB3DDAC8484918DF6DAF2389D928CAB63B1ADDC6680D72B5FF9CA9FFCE427DA07F0091C7FFCF1E79D77DE6C9A676E08823B7EF4A31F95C301AA0D494AB9A7734EAF7BDDEB7441DD4546FD65975D86BF8814839A202959786233C2C93F13E95D7EF9E5679D751600B1501634FFFCE73F0F8BBC6089D21DBFF4A52F490021BF686F6E251427956D82BDE4252FB9FFFEFBD19DE833EEA87F1238C5699062F8BBBFFB3BE22431E7B3F147A84F8B5DB76720BAC09BE8E0983081C0A6E18E3C3EEA5F7FD5453493B7DF7E3B63735632C4BCBB51085A7B9D669FEF7DEF7BBFF18D6F98421DEBD2B8770DE9BBDFFDEE21871C8224B507EC23CA5AD82C251AC9B091CE7628498ABB568A7E413A8D3CCBC5175F2C6F1B7B910E0DFAEE09279CA09545AFB01CCEC4435A8E8E74AC8F01A08D98678AAC628E1E2F476C2431697E34DD1DDACEBC22DB72AD9D993E43D52194F368E08C9BA9ECB0C30E3213EFBCF34E67647A519B0DBE2EB1B06AD52A792A7D1087B8A1675C37EF50398F865C9649013738297CE7D2C24221E8AC6A3F8A0DE1920DAF917ED7D568AF091692701F690B9C3357AC39A0CAE4B0B82F7AD18B34FFFAC5EC78858D98A4254945A1808B0D984929EA5BADD1252D29E0DDF7D8A5D9940BAED9CE3B3313EDCE74AD31381BB79F154EF5CA8EE9B199C94C3FEF39A40D083DEA451D6FC14A553050864E9215741C6922413ADDA8771BF5AC210F582A7D60A6D1D461EFA541E65AA76C7A98EA4B85FE4DF48B7CDC5A3793486C74B346D64B3BDDBC5E1BD6BE6BB406421AA6DB79AF33208B6E607074A61D366E987A74F5B30F3CF8C89A479FDD3C3925152E051C978F7B73B2D94CE7C91CE280B9B803BA219C2856DF53ED923FD27646E438C1AF05C206256CA9A5A485917E4736C6FDDC8C430A51EA90331E97BCC719D92D78C0F93CE07DA85284925A8CFCCD6F7EF30F7EF003CA1FB4919009A14A1E99DC3E0E7D237EDD673D7ED8D9DFB7301A0926FDA2332605492596AB0B7C09574C1B32C73850A2F87F480D92A3F0CAD299DCD9537D456AF8DDEF7E373425D8A4D9428C957D2F12B18E4EB8E8252F61DF263B3432C80E7DDC02CFB748E662B0FD8CFA98A682AA737BB440F031E54861C6756C3062226ED8B830281D7AE8A1724365044917C61869A68B3CF1969B4F38E24D4D0E85C2AE1B66B6F5136C4B5CB16D8916E7D4F7D9671F7D4C173CEEB8E3A4C9F4019C5792AC14C2BADC3E8602DAF845D899B5DF17D7F3BAE5B0D614010D779D498B5EFBDAD7DE7DF7DDA44BDDC4C20B04AC7A3110169B4717D4F8EDEED0938A100BDB8C79C060F2998C57D96122AE6F3413D39B567D329C2E99CF1C624E4478336C7402F123E410A791F896AFC37D9162320AF7DB6FBF7BEFBD97EA2677EAB567067609F63133A991BC70E17F1F47B489CA6920CDAED698B5B8869AE3086288F85CBBA973DFA1E83BFB714DE78B5FFCE27BEEB9C76920C34F5C0F6DAC1F8014FDF3EAABAF96A5A2A142E90348A28FF9C8F77509781ED592F9312D7CC9BE633410BE0258B0200687F9715199AC37C08666CE29EE9BA4BD2CC797ED95048EF2F3972C19DD69E76D56EDB9C70E3B6ED368A48D7AE865333353DAF3EDFA40CB407B5D1EABA5A49AEA24159AD2BE414AD258FF9B97FC68658D58D983A15DE674DB59984893A952D1E68D52D7D65B72D06B32606AE94C2DEDD41B1A59283AFDA26C0A222B99AA8D900F66C5CF46567471186C34878BC0552E8119B27CA4515B562F5A320DCFB4EB4FAC59F79BFB1F910E7EEAC9B5131353ED5EDA8DDAC27A133A4414E686FD7971F6658C9E71C6196E6D6233D7EA73EFBDF776AEBD56B51ED267004FE8C04A3622555CE1E9A01A41475FCA0157632C8872F1BEBF1E5B720BCAD5BE1CF07C54172F3A917BF36B0C1A27B9153A08D0F3AD2F71E3B8261598BAC2F375F98B9903711781DD77DF9D864A44C690233AC9306C48EEE8AE4E1DC5713C377B7AE31BDFF8BDEF7DEFF39FFFFCD1471F0D5C054016A52CA627D432BCF39DEFBCEBAEBB740092AA96D438CCC514928B103C8996B6315508F3A2BBC30ECD3B1264F26EE7D7E3C6A965C4312D9A87CA57CC9848EA48573EF0C00363B795DD192A963B47D50835F7AA2E0BEC12C9DCFBEEBB8F3818293D23F8FB7680FB16DB69D3AAEB17421C205AFB3AC3D0C640D70416AB87C545430BFA467171BD564A86828D4D6D3B081F92AA174AA8923164730D7DB4363208BC57B521F3910851EADDEDB648EF21CAE3BEC8C6D63AD4C1D5E24684B1B241F8CA2DFED297BEC459ED96BDFFEC9CF952DE2ACCB90126C439E1577295F3EB5FFFFA3BEEB883A83EDE1BC45BBAA3A4F611471C71D34D37B967A503397C17B80394A2BC49D8C3D4D6A1E2C6E2E5A4002F8CEB38DF498C979035EE20B17AF7000D15A795E6B35632E0C75104A495ECDD638E39464FA48D8DBB1F17011313A29E27EED950AB1A2D6715D99CFD5A1EEDE31FFFF865975D86E99C57CD2BDDB6C85E78288B851C8BBBA87C1947D6C71416E72FD0B24821A6D17AD7C60DD553248942C43192579C740472C2DC7A3C67823466286C357B1098177E7FDA28CF6F495C5C74B1CF244297AF58BAFFFEFBEEBAF34E5B6FBDB256CF3BEDA9F1898D79AF8062142D124A96E6D26828147CA35EC85C696E47A466E157989565F2B6D4C1E516CD3ABA4BD10DA95B68E23C9F48C2649AB49B0D89BBA45150724CB59A69B391A5F599BA1473232D9DE65E3D2DC3B021CD937A51861486CA660CCD5653DEA174ED909CEBE94E7BA6AD9DB06C6860EBB4313034B8340DC34F3DBDF9D7BF5AFDCBFB1E7CF8F76B366CD834399359CDE4734BC663E2813037928FFF43EB4C4D66CCC881586303E8BCDC7CF3CDCEEE19F4C341DE65975D64AFBB7ADE3D58A1BE315ED26D516C75F529600CDF78232D8866F0F016FC2B8E07A4EB126BE61BF99BBFF99B2F7FF9CB7D6491BE571A7547CDA386637C3E8E5D2DEA011B738811117BF7FE8C6B312D07DDBAD99131821506BBE2019BAEDA86000B80290454C4E52808F12D3092B8842B54A656127162B039F2AA40C8E6522F6A3A1B73AFC455CEFA136164884BF4F3AFFEEAAF6EB9E5161E0131E439610740DA4282FC924B2E39F5D4535D06133FAF0BDDC0AA58F43B79B6D846612DDEF18E7768F989F9104EEF552D9B42048B9095138BF2D8C2701D2AEA84B90A953B182AFE674010AE018BD580139CFCFCC217BEA051B170406F646C4991531A6E4A39898756B335D39E191E19DD3CBEB95EAB777AE5CA26A15516C9146E8A16BDCC62148BD5CBD8DF79551A8F4A80B01AA1891B04CA09451EEF01661E2BC1A6A19B8632CFCE9EE0055E7AE9A5C71F7F3C115A4EB26E21D572D6596785A8A29A828A0F7CE003D75E7BADF13EDE0F962FBDAACFB4557BDFC977FAC30CD28677F2B0AE9B0C55D14E9C24D62F279D74D215575C61E38CF385ED5B8B5AE1DA9B67CB9D73CE39B4CD9E6FB3A7D5CB3420360AC9441866E5E89743768845FF3566D8D7F02EBFFCF2D34F3F3DAF5A086B4274D9238F3C52160C27880DC68664990C66D668CF3CF34C9B351855B2AE08B69F76DA693A9B042AD9BD08166C350E6C9CA5EA1377C9DCC24DDC62D24CE5E216048FC56316A9DF5CEAB1D90A7BEEB5D3FEFBEDBD7CC9D2254B8B160B9D1929D44E591054EB961CCF2CBA29440AA992CD2AE0746E837AA9CB62DF74F3AC27358A7FACFFEF84A25F513709F22EA66AA926B6333850B8DAF57A22D5DB6C4D173E71AD5936696897D9E2026E5DB629AE170D91928290324D9A997CE1C12215D60B0509977441ABB964A0359AD6970D0C2EA9A74B376CE8FDFEA1277F7ECFFDF7DE73DFA38FAEE98506830FA50B115BA861214725AF18055CEC2B3D4ACD8B959F112AE4476A15DB33E29D3971236DBDF3FEF7BFFF5BDFFA16A56E8BC97F5B9C943C1C76D861DFFEF6B7A5BFB914023F8E34C43195D821EE434B2555671A0774D9C00466CC17D9ABDAA27046D8A8A6E537ECB18FAB91FD807C5B5401C721F550B93BC45169D24E64DC42C40A18FE011498A506071207C2D613BE2335395A36B30D78494CF11A0751FB5EB5B9FDCC5DEE196BD658B1F5454DEDF64128416ECFF5B89E77090E1D78576BE02E38EB1697183AF98AB48D3942190FE66152B6CB350489D0313499A14ABD2FF8BC86B341E3C5802595CE3EFB6C8B3FE61FFFCCC4A27D3AD80CA54E0AFA824945E414E6DA613E69C6473072D0737A6A1B4FACE3BEFBEEFBEB5FFF3A96FE85180AB3DD7FDBA5DE4D4BBBB870DF8706018516925D3F4B85AD7B4D4D4C02F6369C1EB1A88B4815693BEDBDF7DE0F3EF8203BCDB2384647FBA0862A9DEC5E9021C2CFC7EDADA84A74EB341934E46B319E5045B4E60C25C93011CBBEE3C38B2CB2B6BA4645BA2854B436EC6A17BD70F839BDEEF8E49C19F99A98D72C4E0478454C146AC18114B8F0C20BB54338F6A41234D5EF79CF7BBEF8C52F9AE2C0CAC002A8EFD46821744DDDC84E2A273A2E7F4477E6552D835E9FFEF4A74F3EF964049C73C0C60D30E15413C5D290217140A04FEA554CF29A4F4921400F6C12A2EEA4D5C35C64BB97431FB361AA5F3826E486E7E32E59B8B97D1A8ADA9D822A39C8CF2BFCD2E52B9AABF6DEE305BBEDB874647464B4A8D993BE940A05F4DC0B1D9202B3DBBED4BE45E8A2963A9F1D2BE0AC5668DF424C974D923AED5E67A674E0922C95D39CC8E96CD78B52E07CA0A5C9A9359AA1DE986EB43A052C2BD5D8925A3213D2190DB0381D52C0792D49079274A856FC6C165F69D55B03DA7879A7F8B30CD325ADE668ADB9B4D51C09F9F0E64DE1E1D56B7FF9CBDFDE7BCF2F57AF7E74FDA66954057AD7BEEF620A384666DD70C30DC71D775C885023218AF1A6F39A815A62C4925CDF9200A167DA169AF1C403D0F0F6DB6FBF5FFDEA570EF358F76711E5DC620AD858071CC850516730543639D252EFC37E63BFCE1D2338747CD86115D7D68232E38BCF9F9AC51ECC11A750B134EB25974E87163229E0246862FBB86EF7861AC08BB29B627B1F92FA2F7DE94B7A9F5E0B316A31AE265C8CD3D8E3A466836221BF6F3C5EA888708951B34B1C58B389101F54BE8BACE7883AC8801AB6780D113A94F526EE874386B0463F8579ECDECC2D4EB05585BEA56D77F0C107DF78E38D0B3EAFF7BA7724292E2A5588AB1B816230CB7C1D4C920CAD66AE09838131D91CE40C95852819A72BFFF7FFFEDF7FF4A31FB909AB54A07C324D8B94072D725D3360C242C090FAA59114C9F29D641D3FB27AB834D78AA5E9761A65BA8146DC1AB626EAE28B2F968B36335534BD27149C57748956AE0421F1B9016EC4681D36BDF6A73E60524FF42871450C41C73099843FFFF33FFFFEF7BFCF824AB1E98BCC83AE2347F3B2CB2E0B51838D98C42A9E5E2795E5377FE6339F81E28E3DA021E99A471C71C40F7EF003DEB76DC705ED50DAD5832FDE5D9F356C4CEC34E29F8A7346FA79DD75D749089AE48B3876ECA3E88B482B543BCF98CD23F0638ADC00EA6FFEE66F3439B3818AAA2497F0B2F1D8F807842229F39561A43FE914E8D6BAA029EF938AA28FAF1891CEF462A01B19809F71EEB9E77EEA539FA2C0DD7965F78A064E88E6662609549070B5C4D41830EE6113CB16624742E584E77B55A5B5B4D1CBB09632E9BFED77D86AAF557B6CBBCDF2E181C152B185AC5B28CFA49C463C601E870385986AB49AB102B600E99585A38550EA163FBBEDAA8972D11E49DBB857AB678D7A6F70200CB4A47DD38166566BC8036E4B01D7EBCD5AD0399D09C98CBE4408A6E0760ECD5A3A9814ED089BB5A6F484BE584BEB45D30529E66663B45E1BAC4907A783722B368FE54F3E35FEC0038FFDE7BDF7FFF6778F3CF5D486580187B9AC2C0BCA61DB4CEE04C3E18A63A8B1B98319A465C20D407158025BDF6FC1FD0D1108376E241CF7100B91E36B70D67C051CE6823DED70BEE635AFF9C52F7E81C18DC4B3611A47D4F88A3DCF50FA7826143AFFFCF33FF2918FC4E49236F7B7A48093A841AC1FE0C52F7EB106C4F401018D23E09665065F305637C1A508C1083714ED8E3BEE28D1F6E10F7F78F9F2E52C4936971A8913BEE0380D3EC25441EB80E9F5E009836415F1135A30A9F0D8183B0E0EC4103BBF895B8CE48A39997DD938CF8F24C295212EAA3F49709F72CA29946C33C8924276D29948CC05B6DA7C0EE7BE0D670E1ADA3BC6FC5C69D55C5ACB6F90DE822F4427211AB920F7DF7FBFAB54F117E316310E2AEAA7EC837BEEB9C7FD0C928A8B7441AB96FD60C8DBF4D4D4562BB77AFDEB5FFFA33B7F0C3196ACF1A5CB96613FCA1F4CCBB3C4778BD8516736AC9254DD41108BA03F6806AC0F489F7DE52B5FA1E80BD54B4603AC69A8A2404945A212B33118E489E0A06419256DD26F8C15735FD0882254016170BC217268AC89E9ACACC727B368AB8E7E506CF5D8E974B04183E7D4E8C3871E7AE86DB7DD8667E9722328352CA1D8515851BA1459613379698AF445DC561F5813537BEBC62377C527C15E3DA92CE68B2EBA88241CD207801E413927BA6CDAA75163A250A2253460C24EC4C908A7517F4C08D1090219FA175C7081CF1AA4FFB1FD0AC40F2A53EC33EEEBDCBC3EF3894F7C42FE37910C8A831D15C00336DB6232AFF2B04F7053CE5BCAA522BE3B3ADADC65D7ED77DD6DC7ADB75ADE2C82D3A57B5769D20200DC9946FEBAF24AB72E721665B16CAC8099F64ED629132EBD52FB76668F5E372FB3CEF2BEE5EF1635480383B5A181BAF4A82C9C7A530E71A1801B3529D4823E3A84E95E57A3E875678D06E9CF963C60D900A13E5506CF535900CDC660B335D2A88D14AA376D4A4FB73B8DC989FAFA8DBDD5ABD7DE73EF830FFCE6A1279ED8E0867DF1617176ACCF7D0C55E021E65441385489F0596BC6BEA905085F89AB4343D4679A93B8989E62F36711FD6A12D1247B33C7699DC514B0DFF14ED63F6DFFC50D462DDC9208486FDF5AE6A61E0744373B969A6607779DD59ABDDD62823EF6D66365C3ECC4052A140DF74166B035885292AD314617BD0BBE3C946107780A99357374C8427FF0C1076912D7D73FD82F0938F7634707C7B68F9FD9693927DB30400C8421229D478482AF7DED6BEFBCF34EC99D279E7802F10D3914671E88811140B69E6246EBB83097C79458B9E28A2B9C26BCFEFAEB4F38E104DB7AB42FC5698BDB30C4AFB8A6451305C4C62BCDA262784ACCC5256B7D0B1D5B6A1A9E6E97542D2AFB5265CECC994DC5EB89848F0000FFFF4944415487041F51F343EF5E7A42BB2134183AA28E542895443F058DF08E3B17D1E30292315C54CD4AB3D5CA885FA15D483097EE4211F9C883FD54B70371A50A19443DC8E9A79F7EF5D557BB76DCC7DE3BCAE61489865AD57E20CC2B28FCDCE73EA7457119CCBEFBEEBB7AF56A021BDA848443E172D11E9047F89DEF7C07372E8F0A816221DEE760E9A1F52C68883800E3B30D5619DDA6E93DFAE8A3A58AF8625EB22752F5EF8B842A9A8D8168143AE9155DC7ECE5E62707E986216873A44FFB5AF8BA1A1B91AA7900EBA4CF9C7CF2C9DACF460698DDDADE86FE79E08107DE7BEFBD717FE83EAB911C04D296A34A44C752DBF97E0EACDE212C8FB1054A83EA09F764A37A8438C117BEF085638F3D362D3BD5507605EF470C908951B2FE2544152CE58E628D7A491A566E35BCEB6E3B6CBBEDD65BAD5C2697B2E86A5FF4B52F7836B2D2DB1E9F1AC77865247AE1FD03A0ABCDED915708875E8F8BA07D8B5E0E95E75D04E4EA4919764E06061B0312A2CD5AA33E536BC8B49A6E15E8EBB20638E92461BA142DDD2CAFD87FA59D8BA87733AF4B026B4592C6406B6870C9C0E092667D695200B5EA59AE496B4C779A93138D354F8CDD73CF43F7FFEAB70F3FFC2C4910832EDD35C0E22B9E3737190B152E354459BCF82038E9A32DA155931C984FCCC7EF768BC3E25530D656A1B2006208BD071CA26CDA820A3889EA82FAC2D47E52F62D3AAB0F14154F453C30AA6DE9164AB885393149C69672C0B6C7ED44E6257BB3DE77C360971839E4EB50BED90A21AD3EE38C33E402B2ED2CD36365293F586AC01EAA697A62376BFEEBC8238F949A84549697A48C6E27BFC42334651AE5CBC625E9401E7EF8E15FFCE217FD08CE5121BC982CB41D38784665827EECB82C6AC0871081805E1B11FE5B824BA6D963F65D40E9280D4E4CDC8C61C1AD26F9FBC637BEF1F6DB6FB7C962342964BF44ECE7B795EEBB66565149EBF79B6EBA493ACC72D9E4357D9B1545AB8772E0B1CF24345BB87D5FC7095974397DFF1F67EF01655955668F9F1B5EAAD4D589A69BD004414006C3B89419E35F19C338328A230C82840583E42059403292115092C8888220BA049DE510465D66C79FC240C390A1BBE986066CECAEEE4A2FDDFBDFE7EC77777FF5AA5E09F356AF5E55AFDEBBF7DC13BEB8BFFDE5AA67F552C3131C60EB4009C003C2B413148D315C76D965A79E7A6ADECED4D79257D63977A62850BC959613987DE325026423BB3000AA072854AC0569C55844C459A2BBA9D98B0DC1850B8E2FC603C52CEE7E4A2B370DB5EE020808B720FA918E970B645B10524248081F2E60A3D84E702FEC58061828BC601F5C7FFDF5ECACC7A849629A6D2BCCC594819A31730333B8A718959A5649D3485489B188E16BCC1E762CD96334B6ADB6DAEAF9E79FA7794A6354C5277847B0648BEBC65E65FB704C0B6B9CA282DF4042934163E674A3A23BA40BD6361E8788EBBC2808B436870B06E5673FFBD9DB6FBF5DDE98E644E60E81879A25B9B97981409C511EB63B94F8795A8A162F59B8CDB65B0C0C54E70ECFF1EA370B0E6B3BF334CC210EB1A1600762B89B48755A0656013B9136B850C3E98DA13AB46FAB1DAA3F3C22DABBB1E1ECC4255F6A0C7FBA1C62DA2D1F822E7B3A0EEF82C72E8A5B91AB43F562FB7B4475141C03CFF69F462E69BBF55E01A71EEAD8DF3F54EB9B5F2E0D2671D947AAE34A3B2B375A7D8D66DF9A971B0FFDCFB38F3CF2D4938FAF52EB141AAC2CB624FDAA452A71EAC48A2FC5638B48ADFFC6009BCE0BA5220B612C7B12535794CC76BDA6CBC3AEB0AB829776780AE8F652C0F2ECF599B8286A256135A34A346419FEE9350F587D1C19E68989299307A88A062662A8417A5A1622167185C217F94E5E3064E107D195D1AEB1BC74E24BE24574203DD55960F16563512A787ABD3CDE1FFAD087EEBBEFBEABAEBAEAE4934FA601DE6B909CA324D0E2B376DEC23E997A61A457454DCE943A3084682FF8B6B7BD8D989A830E3AE89E7BEEC1D79F7EFA693E146E0193FF2B5FF90ACD73153B7213281C4120185BD9C818D46662C212231457A5C4BA30A5D3B1B27A29DDCB698104C4F55500C0CC2E91E718959A90778912ED5D7C92B200B39115BCF9D4347A3A15DD2A25ACDA68C20B77DB6DB765CB9689DC43C85B3533894391B4C2213C1E38F8DE58094A0E1AB516CE210F3C1D623A67F5894935A2E7B9551886C75552553B10BB1C9752B8F23DEF79CF5E7BEDF5A52F7D292FDAC4DA0323EC02B1BB7841CAC3EBBDFBEEBB6D55B72C56F97F7C934805C202669C675C41215FEC3A6A3B8966BC78351508B8C281C0B7F05D1ACBF816E32E14437FF3377FF3C4134FC8AE77455C447E3C8F1EE3F396658C0103296CEB7F5B2638E960053C689862784C5530814AA1A9224005902353D5433A6BFAC4071C70C077BFFB5DF53996E0B36969C60F692ED3C23BE9A493E06473F5594F812B63CE993E27F710C1A1587A0A8A1D76D801A60655859A4EB2B935B722119736F8EF7A77C8CE0B4C56C19F1557AAE976DB6FB9ED765B97CB715FAD0A05DC6AFB6C029C572A608C672CB0E651EC548B977F8A690A98B7C8F01BD4AD179C4DB632843F4D03B813B04E830E0EAF102DC2144D24A5895292E3F7528C6BC2356F64793D8EF04396C6594212107F9BA499ADC3D5E2523008FAE7F4F7CDAB56E6C46935A899BE28AE35B2FE567BF09557DB0F3EF8FCC30F3FF9F8632FC06F539D3ACD5FAE882DEF894DCB0D4939F5F553E2C615405D5724D7F1311ECC134F3C91DFB5DD00199F13D546574EB74B016B322D8A65C6D5ECAA69ECF28073038496A120F4923445AA58DDD4FD63B7B4D41FCE1D01A48423B00411D78438BAF2CA2B3B70A25E0F6613154A4A47454F0CCBEDC07113A549F5A3500025D7D5575F7DE9A597E25470B26811904A82D160F523B34CC5B6275DAF71B2225913474E259E43C5BD55948C55141EC4157C49ACD5A1BEE1C0E424A9E79A2C410C89993645C38436A2374CE798F28E2040D57E1D77DC7137DD741303989017F83CAB235434C94D8311EEB2CB2EBFF9CD6F7AAD0BC600D3FE85175EA081CF740006C07C3655207EC03C74C5B1ED1C76111A40CCDD78E38D6A18D72E78A125D06545D1D797C487B6D87DF7DDEFBFFF7EAC1D1D419AA284E6B20F1D16911938095C170652AE5420B720DBF0E471D0BBFEFA41FE4AE936263B653074EE1574B5A15D4A25D5ECCAACE14EE06C58A799510A5724861917C2078857CC035C16FA5B6109DA588AE860EDD88289A837EC1345B6BBC256CE10A7C827A07B07FF0F3E1F8D1561CA7476F83373311815B728658D5A3513BAA59BD24217DB8C4232471C71C477BEF31DE6C299E3202E89A5C93C08ACF9C94D8F0A49AEB8E8E748839B24C69C4FECC373CE3907A2848E11574D454454ED4C1C7054AEA812243B15A3CAC4E038E3BBDBF6155D104586D069D0D442550D9B8971F2F919622F6CF093E757CD43590069C9FDA7BFE269ACC2954AA95E272628E91FA8BE79A76DB77FD3D6A1236F4A05EC796A030ADA050132112C579AE68CC311A7520E2774BA028ED8A4D9B57338BFCD7A1EE0D67E93E71D91DB016E79E55B0EF8EC56948C2729147056F28E719CA42D1CFDDC4D625430868362F6574DA35008148F4531B4425AAE55FB6A831093B5EA7029AD796EEB725F9CF6B7F3C16636E7D53FE70F3EF8DC430F79058C17513ED4880C7A51564F57C00AFE8BD0948EA38D3CD356CB0AD658AA58EE55463264D34B074BC6F692FF829ED801D86694F294E89FF40261D94CAB42EEE412C6518520853F76EFBDF7F2E0CB8254B658DB46B887F3CF3F1F12153A1BE7340FD47E5055382FA79C720AD331F2DA677E300294980363DC89428A710691C6F1C3424467450F60C91442695C119F3CF4D0436FBBED369E6A8A331E3365191938627F3711ECD9A24357340090AC71A64B0FB3D19C119ABD78E08B2FBE98E48EE4ACB071480C5BA553CAFA08C2CA5FE9C6E5A1AA52554C94447C7C3147B2AF302EBBEFBEFBDE79E79D4CD06248B82F3C51C61FC89FF2F9CF7F1ECB6355A30D49B9229DACFC9CE0ACB3184C8C9AB210799B6DB68116FFDDEF7E87459487677324B6468B815F6EE53DF7DCF3B1C71E83E7A4ACB9B50DBBB02A5C1D883C765356C32595D0F10334C22C588FFD7F7035923DB9A2F992C23E5897786AAF2D76BDC64240E5431B25531B705A8A738A69CBD8ACFC3123A51C9838405CC11342154B9A4357D8ECB6F4222ADA02E6D3FA86BA2218631745CE9C64317F509999AA18E56BCE526EA7A2F32BAEB8E2CC33CF4C8AC68262AC94F81374455A8DF07555E83AC3DB6CED3067582453D35458D3481019ABC31558864D40B352D8081511E0634402AA03043E73C619675C78E1853CA7AAF79030D159EE2A7DD1F02828E0169F7CF2C9F95FEB96D6EB9517043E2A6CFB2BA91F97B3DB101EA49D35FEF69D6FDD7AE962E83D887A3601F46A29A46F5DD818CDA2D9A5829F69A17AB9919465EF1CFC8E10E7A16B17B1884D004FA855FDEF1F39F5A1DA145F8D9B49DC86F64DCB6D285D0FB3F271E6D81347A7AE845FC37DA21256D995CA79B556F10AB836A7521A4EE25A5CEB4B925252AAE2A88D4F9647D6458F3FBEE6C1079F78E2F1E54F3DF9DCFA751BEBAD1001EDB06DC46452EFDA45849ACEA8D87ABDACE274453F531E79495789771E5295F8CBE462D18458E5E3A23FB73D35BC0285CF4E3BEDF4F4D34F77251DA2A2265B45BDC2CCDB0A58B1DB3295C6DA1F8546E4F9C8E0E01491CBC5C678E82C29033B9B07CC4F9F7AEAA938F0A4BB724613B8A20C9436CB35D75C033DFDB39FFD8CA394EBCCEBCB816658CC19A78AE787E3566D32AE0C310A91AA96BAAAAFCA4D233F2EB9181F25E2216E48F98D6FC1006164C39A458A69C07EC74956E8CC19C89CC422335B626184D0DF72CB2D1F7EF8615C8A8E1D9C0C324E88DF847C8132149C019B1C7BECB1975D7619F5041988BA6EAAAD4362C22EEEEF5EEBC5C008BD46523BB1107E7A4D24D79E32AEAB1CD3064275C66CF3DA681A5894069644BFB20CAAFDC514B1B72EE39604F51C70C00137DD741333E5F895AE8C7547A85939783A4C18C0D9679F7DEEB9E7B2D721A173160A679D1EC6DEA9B474D4B9C7302DA4D4B18C168AAA75B5639266926D64AD78AB7D0503A16BC83682FC93FAC6EB9AD2BB24DFA61B4DA3B8570E322E38D8D957839B3F2EEA92896FC24E639BAFAC20C27445DA09BF1E77DC71175C7081EC92AEAE9D6CBDC72593436C7BCF11A68EBFC2B4276F396E8415C45F89F9E4A6C53BF80C9BE1B8D0D69A2E02BD79DA8238A7102674084581A70C972BEC5159DB9A7F1BE2867DF9D4534F29D3FC5725FEF4F99440B759B39E843F2E8F3A53D117C5D9DBDEBEEBD65B6F51AE40DBE5715196D60AC829D7F653D1EA30B26CE24292093BA3028E9D363FBF52A0C7238180D4772F346F70BE1B84F7925DDBB74B82022EB592D4F9BE4995B8564DFAFAD25A25A956D24AEA0DA6BC04DD10A525EFCA57AB7D95D2509AF44301C31B88BD02EECBF3DA44BDB27143FAC4136BFEE77F9E7AF491E7A08047D68F36825D14777A0E3A3655B478F5E9442EAF47013B634BE501FB499D9A9946E00C910A01A0168791E97DC7571741108764E3409801EC1378B1575E79E58CB961D5AA5188E11D084686F4D42282B12E0C832282F526A441647A98993B5E99F160D6B32867473C328D30D9BE3D053A9F19DAE5BAEBAEC398C8484285442A5A4D04E16A32575924A346EB3CE19169F2D305F0B160041B6423A65794E5B4F42FBAE8A2D34F3F5DD4A0D32917484AC089A018D2A8F0754A3A3E8832E4928C5D3FE0F5F77FFFF750B11061AA6C911B27CC27E78A15D63C7552F074B37841CA650C9866110377F65E56F1B3DB233EA0DC03A3DF9679D5BEF8BCAAE875460552EA3162494DC36797C148354C4F85683DAA015B45CD9FADCAE150590C83B98D42FB5581B30434B0E74D55B349D1F4D7BAC57C64C651B1C437DE78236B7C19DC86B83FE18413AEBAEA2A4A497C18EFF0A1B82EB8177EC5DDE118C141944FC9C7A4D58CFBEEB3CF3EBFFFFDEFE1BA110C4C8C1E9BC23208A638BC458ED83CFD8C60AB7C2AEC59B9288B43E10A72E95983C1988A9AF8C238989EB3E70B3A8F65396C2D60099F31D5B06B61F8520C31A74307423DBBF0A4745889CEA371439882B53994F8A7C14E09A8201BA7E5B4D34EBBF8E28B252548E9EC02A93864023E79E9A59732CE869B424261902C88E2B923FB2963CBB4DE043890387605D6C119774775C69662FA231FF9C86F7EF31B159BBDFE97258EB0B6C82C840F012F880F972BD5D25B76DD71CB2D1757AA89CB1B7469BDD86D8522D72C68CAB443D42335CCEB649DDE47B1906E3CF569AC33A57A0D3392885F57196E16E5AD70B55694377DD8396DC21448D276C9D363C5FD7DA5FEFED2405FDA57F3B9E7323473B9E919A403922BF595C155DF00D1553CAD659A96CA83B9C33CF7E1303DF3CC9F973DF2CC430F3EF7CCD3CB376E18B70AD84A1B817369EE3B13B17F3D0A189F5107F4CCB46C577F3C0825212805C4236685FCF98CDF709FAB23AA2B626984E9082144C48CA4B1CDFADB3032D40A3ED005F8C2456056B2EEE0DA6BAF8542B4581099117230F42DBEC9334ECDCDCDAF06A3DCF63D15307116ACA975C1BFA4918E9FF7DA6BAFBBEFBE3B299A8A90B41D7284B12915C061D6C84CE48A1E7354811CA8D5BBBA2F035CCCCCB1570CEE2E5E3A5C1CE2151EA45C7B86BBA9F2093FDB7DF7DD7FF18B5FC006A7514FA8886D2343594F34CAD7BFFE750814F5FD982E58BB90F41C09713782A7297825B75E2D22D4270A9B86CC4D144CE4CA50155357E20D2FF81970F88E3CF2C8AF7EF5AB7022B12DC8AF964F03D96AD88A9970A26415321F8335C215F03E330B5C3B28AA3BEEB8E3F9E79FE7386121DE79E79D828CD2466306349ED61756FBB8647A4DBB6027B1C912EB885C40FCC2E9CC4D87577B9219F6107B8E6DCFC7C864A9C80AB3992BD6547E36C3A41A4C6ABA04D2D5B6D53E74FE64C05A46560B1EC6E05D30A7B815B9572DA6C3CD648830C6887910848A794AE2380883C2786052E0FDAE8E2E2E5857B294677C61A5A0F6B85BA04A59428D9B5234E0FA37DF7CF3F1C71FCFAD85FF69B769F73294424814B3DAC4FCD36A61B760F6B771C1F0C2721C7DF4D10A81587A1C39F45A05314CB98228062B45FBD815AC73626368873E921EA6140C5622DD1854B34B498CBA8D4F2A07CF420C5622911EC1F58E0CF57A7124B4D119399FB1F59E3D5F85D68FE60C0F6EB7DDD2C54B16546BE5766B2C2DBC586AC9243C41522E09D42635EC4CA3787AC09B147014AE1077146D71DB6C93508A78FA3AEA3976C134C4CCB527A2BC1E258DC4F74A8AD2CA68B51CF7F597A083FB6AA5FE5AB9160E72A9E2D2524CE110B924CF4A79967A773609FAB7D2DF7635E88BC989CAF2E75F7BF4B1E71FFCD3F2E79E5D390E17A005EBA15B014BE3AAC46316828B5EF3C97D65D98893691D06F7DE7B6F18582C2723C5B733208FAC607CE287C9A7A61D6BEBFD6C97EBAE531C15E4AC743378F1254B964073E1B95883E042C00C020A62993EE7273FF9C97BEFBD97FA554025CA011E28712A2887A8CA468228A95E670B414B69C12525DD3F6D46D26530892B4D664F0EA52A2D5C7ACC4A7173F47A720BA2E3AF975C72C949279DE40AB78C40535E87271C1301478D9C8E0A0564861E96F5FE621493D5EC8CB1C360028D6EFDC9CD5443A20A60B152501BB1A6908415A42DECA2D8E6DDF574743B3093048512E44C1A67ABD8A480C9F32C0C2D864144C02C1BDA8A758B99E2EAD86836FD542D04660CE3C160A0350F39E4903FFCE10FDC1FBA38659F9B49F168895DD1860C7BE65FFEE55FEEBAEB2E8836DA5B14FA4C4E73C559DA2B378B66ACE09110DFF82B51E2D4A3F492C588C2D205C180F175F557E61EBBE9A69BA08D0809A4B2A1138C17F70C968F8397EB8FFD864FAA208DF6229120B23BA717F56A1E1855866EE01E608CB70BAFA16038C30C9C37DC8295A9987FF8B8471D7554AF25162B055F4C6148B22B3C43C78209F256D17247CCA9B466E8FDB3C588E8A67959EC93C58B173FF6D863E27577A6AA84470C573BE79C73CE3AEB2C1C4F7C1DDB86A7158F4F3E326E42C12DF3A24E9A616D7568E020F17925C22DC3AB33092F65F1D94CC585E22E6C27580930C75939EDDEC88BF3C0834C1F8310EB5E06AEF59936DB6C01B4EF8285C3D51AD458BD14274CECC53C1141956646AC762106660C41072A2B267BF943577C251429394E4B08C9B83498A7AD766B3CCBEB49EC157092E695EA78090AB81AC303AE5593FE5A0527CFA3B4FA535A9F30147DD38656D46EF978B2AF4D2A95A180E1DBB7DBD5C97ADFAA17363CF9C4F23FFE69E5F3CFBD3039D16CB4B3762B8FD344989EAEA23551F4BC21052C9808251B64291188247DC3BEC2BAC06AA73A548286A7801907E209700552EB33B8F5C31FFE105B0B020DFFCBA456EBC32E372C2A42177C0A3A75707BB0A3F0311E673A5A5C2CDC9AEDB1F915D8C12B57AEA4E025BC1937651586D0AF4A3D1059429AB0B7BFFDED8F3CF208A5714F054CAE1F86ADF6DD775FF84934783923906EF0CC6456BCF9CD6FC6C85475AAA26176C8A151CC2998DE38C2194B0463BDE5965B0E3BEC30351256D31BE17148AA40DF88759F8C24F38EEDA227810041E24C60B68FA2840684AA155914A4D362E7A1AB305C4CD14AEE32399F16BDEBAD05C7F5E6FFF8E275D75D77CC31C7D07181C8C0FB7088B59CD61C8B8A56B55069584B71537771844D3DA2B94D8468245D74DCCE6802D662624D2D70117FA59A57F0B62B4DD02592F00ED301CCAD62CB9E76DA69A79F7EBA33754A90E96421E58D0480A40D284DCF318BB188334CFD4A8389FCDEB6E33DC3A12A54253B92748033016149070645D9E85031D5AF7DED6B9C64268FB5D5690188324270AAE9A299A82EFCF0894F7CE281071E80A5B56CD932574079390FD8BAB43CB4D9E4794364E0465D8970FB6268EEC20B2F3CE38C33D8031C8FCC325F068AA5B12C0928BF4BDB8B55D1DC420CC9F000CA5EC435B91CCC258B539AE430B224E895E26A2FBFFCB2B5EAF068575C71050C08E1C6F945380DD0D6942716FDC727B21805B151DA683FBD1C91C2524A60BA20160866C903F3CCFFC103A6B8C00008B3A7A1F6D714B0FF6FCB2D97CC9D37343C175B14276E0C0A98C19224246EA080FD87A24D5FEC3AE00A414B07D3F58D84B44A7447BB1932FAC19D5F3CE5653B8714CCEA2E6FB8A89E96DB699C95AB93A534106675FEC14BF7CDC84B55F251C3F24E5A4D8862AF56FDF5E2403D5BAEB55DB5D5ACC0DC7DE9A5D1279F5CF1E043AB963FBF4A0A384AE230F918D51490113B5BDB2EF4EE75E78055AEC333A54EDB165A9B17CCF33631DCE5E7484ABFED6D6F7BF8E1879DA1FA5749AAFA31C850906AE4AF18C6CE3BEF8CAF2F5DBA941DA369F72B01CA17B18414CE8A21B9A98DBABB8A3F597AA0C724333C03C3F9EC4C587C543C3FB356B23109A412A6372DFA49D95DC5733EBD47A1966D3A5BBA5D421ADA510146EFAAF88C0DD7B6AA5489818244C0C1C6F0247D14706F170D319833A70BC2FE7D6ED6D013135D2C9CE08269BA313904E58A1B48EE32C3E39807E85A667345EEA19E073035BEF18D6F741D54DE9444489FFCE427EFBBEF3E7AE1EA5CD46B9CCE885DC566293A095E93CBA548299322F830D4DE934F3EC9081573A5CAFBA6D37A35DA9BDAE02DDD5C9677E3F1B935F120FBEDB71FCC353B6FD6A4650A87641DCE20CCD91C82BB85C632E793A6860BF103526E71CCAC55E55C6154D809045B91A19A862A5D436E9EEDB7DF9E4568CB972FC79F6053DE7EFBEDAB57AFD613D9A202456B34D5D62E71C11F251393727E0C4FF13A33F606507C5505C1B3882D4E3531562E448985448356860D1105EADD3C5449E16062C2F126BD467195E0BB6454E0396A9BB6924C48F35739A9A2E114A1988DDECB98D63167761F1F238136D533AB9F59C59B17F4B40CBE61F21954944ECA8BF66B6E5AEB7567FACCE811384EA2EDFEAAC4EF9A4F5B21D3B59AD35FF45A6910BCE94DDBF4F55786E64001A71313EBCB64714B532294635E70266E4B5704576650C02E2FDE0F9F89A5C32CFD72186DC816E759EC5532DEF139E0461C3592520B0F54ABB5E0FE54AB71AD12552B69B552EA0BC41D5119735E4E13C881A8516F43AD84798E2A4916A5495AAA6579DA6855E122AD7969ECE9675E78F891D52B96AFEE28E0761E75687D9D1E85E7144B8FFD8645A14C7B432168EE2E3653D12E2234819A825723AE05CB7DD555579D75D6598CF110E14F038E8B628BE079AC2064F0496287B9FF45FEDAB5E5B8EBDEF9CE77C231C590E0265D7BEDB5F8C0A9A79E7AEBADB7424E72A50811B02DB65C30E831245C967C93F875BBEDB6832C65E44C9604358E9503344FA3D9CFBC1A21E067F622A68083E28192B755A771D167869285E609D3C672BC9857B68EEF74EF8A5B997A82D12706CA9CE92EEC0AD7810F403F9B3FE745E104F3D0620A7545384B2008D947B65ADC9E37FE40CB9D76136683D1665912B6156B6C9AC6D85831DD29BA14DC64F800BCE1030E3840C5B8BA9DF246AE2064E8EA69D5CB42E7DCDA3A3657A81005E139B1125E342D717D167DB19F3C7933700571BEA8D1AFC2E3769CEC384980BAE536890B82088C8A05C1A472B434295DB5984C2ED08967F08781474D26558BE47217E44DDA1D627A63784D5F0BA21E080B38E8A083EEBEFB6E0E492B4EDC04B7596E180652D3ECBD2B17CE97C2CBBBEDB61B940A86AA060CDCAE74E8717D9CF34F7FFAD3175D7411F715A7222B7A45F7E29CC98BCE48127FB89A38B6989765CB61D5DF738665EDE116C40190FF4FD34571661D5CEE1FABD284D8A45B10179C7162C7141652E61AEE75C411475C7CF1C5F81873CF32D7B88EF8FCE5975F7ECA29A7C40539972D82E046A5BDA58A8E8F7DEC633FFBD9CFF02B659F5C8D59C053B30837C5B7C53234638AA178C52A56D965971D2BD57460B03A5D01FBCF854FB70B5564B34B6EAA073C15841559056C9C60271DCCB83415701C95FCFB1E81DD7451530A78A01F2E515E2EB94A09BB3DAFB0FE384D5D292FA5F052CA591B8675B33ED96903552DE554C098867A0B1332F0F29AB1679F59F5D8132F4B0187D60E1C8FFFCF1544FA8C482D58B08065816F54015314FCEBBFFEEB3DF7DC63175A721E173FFDF4D3AFB9E61A02FB79966DE4CCDAF154E4D812F822C4A6B6B7F66A97D3EC0A00AF12043A5F62A526591BEE0521491096ED0183CFB33A239F4AF1C13ED97A522A5A215EF1144CFFF1913B2D3C9965518E9377D20347450D00B1456E6AB4212FEA5661F062405C155C1033B2CF3EFB5C70C10551C08EF3A96C644C9512CEB01AB1225B6E4D6ED8492C639F642B737E046D61008466D028EBB5F0100D984D85A621231832EDF579B159611878A2EF7DEF7BA4DB9EF1F34A5FB12302F6C1AEBBEE0A4F8B0B0655CA2715210023B77834E156D418D1996A2E09448909EA1226567D6D62619A4988F078779D7FBDB86FF2A2657A570F796D1DCEADA4B3941FD3FCCED479B3F73B9798C8582EBA620C64BA21628E78696604F302B346D57BF2C9275F7DF5D552CC0C02F3A99537E245E87ED18987ACBFFEFAEB5DD1C7824FCD3B0A982D260182E9683B8A45CBCA4757F44055B48D63FB3F087AF5E8B53CA36E6A7736F1185806B1B4E8702EC7743A7E44275FD00A3CF2B1C71E7BC5155740D16247B1904F804CBAAD279D74127B2A581B451D44883CC80A2AF9C83041E275DC71C7C139D080BB6AB5E52BD3F7E596C0C571D03036F2FED8CE898C72CD72F4F8435C10ADE3FFCF7DEE733FFEF18F31990C7B8AA445861A7B45D059176E0BD382F1E067B54025A93583ED240311E8BDF7603A34BAF3E7CFD97AE9160B160E954AE9C60DEB13E74DBA7225857EF4664ADEA616D502597C9945414745056A70AEBD7AA3B04E52464773E1FB3A6220CA8AC0A927E9F01A2BF69D91D2247351232DB7CBA5B8529AF0EE6EC5954BBE6F715A307E94CAD524AE440EFE62D26C649B30229123B10774EDE868D66A545F7DB5BE62F99A65CFBCBA6AD58BF5C95651071C2B124BD9257218866118E3EDC215AB10C012945AD3DC1525A30CCB890E963752D37445ECA8F94440243CBC332D7175585AA6A1ADA00CD3D1F23A50D22FB4FE996D5431BAE88F98EBA51DAF725E254A683892A3829B3336E480AE08F871D3FAA8BE2D42E8A286E7F7651E5234F02A5DDA97E68C62D15DA12AFBB4C2B8D2677586D55AB5D84434582CAEBAB8F0696977335E21D56EF96E5CEF6812EF65590818849C25047DD555579D70C2090C7FC545FB815EF59AF23694788641B472E54A1A1694AA4C04F2F3679E79E65D77DDC54A59E60BE3D081BCAB90DA46A7455EC14565CDB12B622F44BA4B0FE984776D38EE4E36FED3D664B9735634E4A2E67345335D41556D15A0E2AB027671E7E0EEEA8B72F3CD377FE94B5F621B6992B0532CAA4F1163096ACECA3BA6A14BB1B5586343A0CF37051EE6C9E4F5B9FDA40370118EC4426AA58CB36994759A1F9BB6E84241BFFE17CF6432536373E18008AD77A16A5666A520DC78C67DF7DD1773D87577458C2453687A33A401ED6B5D703A9D94835D602E57A09F585971E8A187E25E54934B972E25EC9CFE84769AF53C343FB82F93EB5C7D5EC7B7800FF106575025A8475B3C6B979B5E2F225F74BEF85C18CF57BFFAD5C30F3F9CBCB35C748AFE1D77DC113FBFEB5DEFFAE52F7F49B23366D0D43BEFCE3BEFDC6BAFBD701DCCC92CAE5BF853A7BBCCBC79435B6DBD64B345C3954AB93E391EE7815D01AA2C0B68C42C745434F487996998261474D7D14E1DB572D4A5808DB6CE09D1EA58A28116040AB80CB716BF25CDB404C737AA9426D39283562EA7799C7836CA8ECE8ECB81141A1E7054245502B628FC8F4B8D8ED5378EB4204D5FFBF3E4CA152F3FB972FD0B2FAC6ED4DB54C0BE2762C801076E6A7F2EB0C1283A18ADECAAB6B2F6A533B4F38A48A992C7226439BD5859B8C5B7DC728BD830C462A6EEB47C47C1125754092BC124F7803151FA3969EFBEF27A71840A5B32978CC11C7CF0C1AED05FF85FB483D45C79C1574A65DFD5799684946A37C2E34F3A1A1F49D873CF3DA10318F0A11466774F81BCA959F9B476966D20EEB0C30E7BFCF1C71F7CF041E23FE9DCA8DF19D1BCA49F66758A84B808896CE0546245D58AB2DFE340222D24116D1C0BF061DDF42C07C915114561E867F16C684453E9C2573EEDB4D3E2BFD617938FA627923942542A43760CCE3381413144602AAFACECDA74D01393E2582352B1E0F350E1575E79A50B4EAD3078AAF7E0769FAE80D97E8A311935ABC7BC4DC7964360EDB4D34EF7DF7FBF33840C506FF88160286D7A9B5360400577C138E9D9E3C49234945E3B5BC211FFCCAD4C7704B760C1D557BEF21578C3DAD33CC9B6ACB6ABDC56965C1C989868715F70C105B80E9FC83663B04E9533E141FD6FF783F53EFF0FA14ED6FF11CDA15A40CD338F344B9C992822BF0FDEE4F2E1F4DA82C8AE9D8C77D497102F954AD390A29612199EE054AA9FE639E591A710811667B9B04C10D5DC7705AB290D54B06B7B789373868286561DFEC7421C79E4912A0E993DA5A215D7A6B258B0C4F4D256C48ED0598643612E43E08A6143B32D29CF8B0B62C24AC55E000B67147098F04128E0CD17CFABD5AA59BBC9C2DF38F1FD8003135698B768D317AD02B64A3733BDB352E68FA980039CABE32227AE08572B6D192CD110A42E27B18758A58E0AB802BD5B6AB27761923A284DCF4149DE577FB9146E5B9EE19C92992B342A4ED2760E15D25EBF6E74FD48A3D5A8AC5BD77C61C52BCFAE1E59BDFAA5E90A58202C9B357306DCE48C2DEB0A8E399D1A719263A2601B3DF9E493F42F99E0538499E04A760A507085DE33A5318328B45C052571A6DD21298AE5987EFAD39FFEF18F7FCCA48F1DB6B61FBD9A34F456C7E684C483FD0A3B00462407C6CDEF0A6EC4B8A055E9C2B72BCF4269CF31F38B0412F1797966B7DA6AABE80B5FF8C277BEF31D7A42CAB53075445F937A5B540676F4F62513121FE6C1E86205D319A02B49B983C16DBEF9E60C172B092FAE133A28DAB296921B8F41566B429A498D49C38711B35914A47C53F93AB3F4DF55F8D18534C3AA55AB3048F179CDF8EAB2E9647641B4C1D5E662E3D1A81A5534E28A06E364EC9B31D1C869E19ED35F757DA6FD38690CACD9FE24D3C5F7A2458BB064D8E8D073AE30D384A852E515EE881D4F6E237C809183B868CDAB9892E2DEBC38CC821B6EB8814DE0A9B67990689361E7E1828C58E04D065AC42125F75DA52C0AD6294DC875617A9BF11255A5BB829893117EAC148D1B015F9D8992754DAF9D1F37D57EE7F5DF28D847D4D9B47C4544C52B330E8FC727B38D02D114343C32BDFC6F1BC1C652627AB1AB950EE70EC49638FAE8A3616853172A4C6591893A89CE58182AD952BE63975D7679F8E18715D696C853DC8B5FBFFCF2CB4F3CF144D52010222B5C9B206F046ACD1E7F56D2417556D497383E2C67178E9A6604B4FB75D75DC7D69FBC9D25D1744552869C421800BEC84800EB2066076386B3DCF1EAA080B7DC6AF1E225F30706FADBAD866B07110CE1DF6C4901E7C99476BFCE647FF5BEA5CA8A3381B036E9E04DD9E28E1A7605748BE95F28E0D48718E03127ED52190A3829973C5F55EAE3CF9009ED282779ADF7C8B1F8504691633FC42834154EAB250FBEDB38567F6DED86919166DEAEAD1F69AE7EE1D5675F78EDC517D7B49A3915B067EA0A202C2A606BF8CADFB0EEAF3535185CC10184A86707306E0FE54AE971292205E97AD451479D77DE799484B679A544EBCE3BEF8C0DF9F39FFFDC3A18562ABA42679301E66D6F7B1BDBD8330C363D821B4F65D3E3438963D8F6FD7345ABE319314C9C198D93347FF88052967C406262FC11E021A7A275C101E74745F3C4AC38F974A607D0F5C0422AA6A6092E736F8C860BE3AA2E40D0C4580F320CECB1C71E3FF9C94F9C4199AB78835B1632944D9B215221AAA0EF61D4FCC77FFC074BAF5C11647385A3334B2EA72B30CE21CDA2B0B16FF0F8EC76E7A61626CDF89A9E28D5D487D33B17CF0BBB47B2184BC0849CB8A69D09B75A11104D25FE66092343853062945F544768D5EFCE28BE999E3CFCF0C36FBCF1C6BCA826E25F29A933D3B81E4702861A1651CCC3B81A1BAA5B05AC84C5F1C71F0F57CC15046CA4C526A4CB059A8BEF7EF7BB471C7104E90C610C2AD1CEE560CD95ED0AC51093EED295DA14ED174D4BE129B8D33EFEF18FDF77DF7D3AA56E5A7FEBE9D256AC264C0B450520FF8D864C59F0E30C13AA90D5F134C67F490D9A89981C6A2CDBB3AB2B25C177CE3EFBEC73CE39477764FA53651B2E1003697D6DEBA13C1012B1B4970A95CC1E9423B46565D40BC44743473960AA467C80813EF523C1FBCCFAF31031246E0B115D6F85D74B01E3F33BECB0C3A38F3E4A4F222E88DEF0743802C42B70006AC7C43612B8BB6D4BA506C90C3BB1C45966E2F45770F73B341A73E6F42F5EB21914F0D0D060AB59CF030156E6BB28F8AA6BE680F3644AB7416760B75D8FD979B53B7C9354B1495AB8BDA12543385639D1D1C24EBBA080CBE5D43784485AA5720C0F186BE819A17D44BB197928982F578A42FC1A87AF54AA24313E1C85A68A3E4F9D26B053DB1B4727D6BEBA71C3C6B6CB21A81B2FAE7EF5D9157F5EB3E615B8CB8D56E0C13621685798D1360338FD0409EBAA9DA669DF75D75D1F7BEC315BBA23DC133E03ABC85673F00A12DA38DAB814D9B2F2A9D5445DD1290E4FAC769CE61915B0C402041A4628C4BE2B12DE344689CEA1436C83C15698584F9D87D7153CC4785876C4A2D140B917E9C45E71C515E79F7F3EFE86A3C2CEEAE44397EB69E5D7F417B91168698A84D29964C06EBBEDB662C50AB667F9DEF7BEB721BC9CC15229F4272E27677281CEF019512B881D9B60C8B3CE3AEBB2CB2EFBC0073E70FFFDF7CF682B68A59548880A0E94BFDA6D491BA28BFD60C6974ABEACCC853CDA7FFFFD61A1D38B82A8C26CC4A1F4169F51A742CC069E8E4DE6DD4C2168CA65DB88C9B688811A83D58699B9F3CE3B2146E9F94D8F3FEBF013CA887B6178C4A130B767BBAB52D2D9082A97789B6DB639E8A08320F7A7DB0A7CA94B317F654D7917F314D794694B5E9CD87DDB1B47B895ACE8302A1AA32E8B3536BDED70CD2854E6581059978098653F8BC285F3CC9EEA3492DC1B79C120603648AD4A5CE1A0AB7102A149C4E2E15E38809837BECF78834566D8E5E35488E1929164E6C50922C5B2DAF012BFA8C82DB114B4ADB9E85C5C1283B8C28364EA1723A4CF4A8B449EB132C4AEC8F2D25E61A2049782850DFB80382F3286BEFFFDEFFFD5AF7EC51B59656C5FBD42D0242782394220184742830C9FB9E4924BBEFEF5AFB3FC8C3E5932AD9D03468B2F327B2284A9C010BDE440B8575EF0CA55172C9CBB68F3B973E60CB9BC4D054C0F580AB859504BE6538986A2A9AF4D1BB2E58ACF143898B45324A3F833D3C074883B54C171C93784C027E10197E2728918AEBC94C043C6B96BBBBC93EF850F1CCCDF2A953AFC589F474E5C9E95E0E68E4F6623EBEAA3A3ED3CABAC7B6D62C5CAD52B57BFF6EAAB7FC1D7DA79D2CEDA046179CF3B1C17AB802DC1809D315A090CC650E412CA8417A434EC6FCA496D2492B8E14DC85B2C31C497DC36EA086E33B1A5328E026DADECAFAD1EA6E2645894207CDC57911E372D04EDA6F6D2A60EB2A8493EB2EDDFD3051F9129253E86EBAFBF1ECAEE4D6F7A13B62BBE2B8F5F254C185287C491B85C85B05CC128C407E0F9642CBA57D791C8703B330947839AD85AAA8DA8A0A1A7748B8BFE04BCB52435C37D7222E9FB33E0CC51D182E05CD08EE0B055E222F4D0F417F1A20C72E27F3C3E216DBD9E4B2114ED00A6317A1D540A20016805BBC803CC5D9155AE3413B15941D52DFD171B4280E9202CB18FF1D9F108DC6AB2126C3B29DB35D22E162719D7C1873121F0839948E68BC2CB6643BB6005EAEAD8AB72836706BE3E0C2366EEC505414DA0AD2CFC362796B4D5D8A03BEDB4D3934F3E490A0E3EB85A266873AAB44099029E220B7784FE38E49043CE38E38C2E1341C7A6D77EA6E5AB5922FBF42C646433BE58F6CD31B78A6E9E4A19D0D2E283CB4714C0986C6BD6E4EFDA0F79A8FAC5C452CDA8910B4CD2F3CE3BEFE0830F66AE97782ECE273749170B0A2750C8478A06659DE9F542B1611AD53D42A789C511F830F534FD336209E95CAA35E7741AF3371A4E7005C682B810EE31DA1344F6D9C83343621232E44CC01D6FBFFDF67DF6D9E7E4934FFEE637BF892D2D922F02117AC981803FCD695B60530CCF1D9CBF60101E30741EBB2F786AC856BB4B013BE3E3464529B9BC43AB8693BCC48B50DDF2782649A781AEFF4CD46997C45FD38420ACD01ED8F744CA4AE51CAE301DDC246DA750C051CBF718E6AD53E7BB1E79999CF9A687790B4EB3078E457D918742432C47E3A379BD11AD7969ED334F3FB7EAA5756BD76EC4E532177AB794E2B0273B0A58D820B92EF6592CD25B95DCD47FDCA8546044CC59CA7A5E1007618F3DF6B8EDB6DBAC24E1C7B09F4F3CF1C4ABAFBE9A679C8791661F854364D8152516B887F9B159FA0A73C388449641665214C4A163BA33859D336E5D0A0D357F531DB00E0BBD2F88C1BDF6DAEB5BDFFA96BF8EDC4DAEAB5ADAA97495496C7204769DA22E7B5CB592EA41E10AC51C056E45F62CA3FDCB6215EA09C12BC87FA43224DBB08C363BEF053F0F3F4346C3B8A057AD26AF1CC02CA1421A479C5CCC111D9459405B34B8E482280AD76B21295E2D894F01DCF0AC110AC228EE4DB092282CF0A70F7EF083FFF44FFF443E4E9B4AB1AA82A2931D66E86A908484C4A4ECE6C1B9ED25F224B209DD52A32E25DDA763E2B81308A06746C042850582B0D29C7C81DC330A00E268EDBFFFFE32F508C7BFF4D24B4F3DF554C69C99B99991BCC219ED2BDA13F97649C1BACE37B14F70441935911CD43670459CDFBEA317D7451E301F195BE58DE6802911B8BDB9D599947253C9AA483D4FD405ED12CED52DB7DC72D45147B123829BC903D6FEA170A158A4FD4AFBCC368469176D9E6D1A456C56CC14F004510FF1B2EC9DC0C81B072F1F3A2F68FCF0C371C71D07DD061B4204704463314A49126992B02ADC3D4B9F57BB225D883966E0B8819535CF8A5EDAB4E1E8BB087627BB47B4742EE489557DC71DE57ADB04E19A9D20273CAEFE81EAF0DCBEC1C181FEBE6AA7FB429C0B84E56574B2491B490147A60CC9EA607FCDA812B60B03CE51814C349F893A3C9485A2CBF22C2A51384781D0AAE4CA50984925F13F47D0AFB16B9392CB1FC94A1291A22B6B67394E561B1F48E1345786CBA5FE7279A8DD2AE3188D8FB657AC58F5BF4F3CB36AD59FD7AD1BC7F5F22860F553B6BBC7A5369506083120B9D1E586F1A51849176880F05B6D7528086C30AE29C17D02CF53980824C4380A29876939713328BB24F8B0F2D354F61253D3179A790A6203D5A0D3121548B6D87A426B0DF3F119C422AD0D03B1B0F360B9121A4C6374EFBDF7FEE10F7FD8A986C7176071AC5AB54A7EB16A9CF1855D77DDF589279EF8E217BF78CD35D7702AE9DE696329FCC853D1259EF4B4339DAE48468A338DC6C8B8D6C5614D81AE8248C91D5961B474B80C0AEE253E6FC1F2AF94DB1D22CE8E815CF9EC3E3B8B14B0C91B5B54D0EBF39A13A96105486502CBAA880A2E40522959A0990CCCC8944E2947CE68983490FD6257B74E57F069A8590783BD0C3F4ACE72027B755B62469F3829B6E976052FABCA002410C9AADA653DC8F0C790B0D9F003F622815DC440922B1B129C4748AD38DEFAD6B73EF6D863DC00F4CC242E679C7FC5156CD4C882D2E99959CA527B6E69E1F2F8F1912D00F08D3A6D175E78E15D77DD45863C1F718A22D602A8EA574875C5D6C495C6396759812DF28E8A0ECD78E7A28B2E3AFBECB315FE617108F3263C92A2B592852AC5669370F80A9CE6638F3D560115FC95487B790F8C5AA9E842EA4459C95E56295F71519DC91832793048E345291C878A2C1E7FAE9125CE53AA687AEE80FB8A7B49EB2EACACD64EAD69B87521D6C820C62F2AD866833A4C78FB7C07B9287217EA38D25A5F6568A87F60B00F3AAFE2A182217DEB43C4BE3F42A3516FC5A9336167C66F6CF5845C467EA0146DCA9B26C5CBCFAD776F05DBCE986CF6AB9F633EA11F3B19CD2886248C93D485E683B98B3C3D565AF6F2A754A996D2725C294D6E18ED2F55FAD2D2E4D878544AFBE6F4670E9BBC3CAF7FCEC2E1CD5E7CF52F73976EFBE0FF3EFEECB32B9E79FCE9E79F79B559F7445B298690965B2E6F654D582078279ECAF61315C5CA9121B5D0D26017912E70D9B2659C5BFA7BE26ED25E6A17CD28E5A5D0FB64690691AADC6C1402D2E22C1D266A4465F41A00B61629A854A3C8949F58D5883EB1EDC3A382A84EB137A1A995369213ACB8B782BB7C407814575C7105712DEA504EC59A844EDE9D1029771B9F99BE332402F382DAC17806FCC9C240AC29E73A30D1B20499968726D18CA7919614D7232F1A3684276F1F7EF8E137DC7003B5143E70C20927DC74D34D189E2C77AD139E19460467900288D1D7D0417694EA16BA1B9A9A379D3F1FFEEE7ACE11D1A7D22EB308741D122DC62C0A983E9362E0723169C7E91C3AD30C8BA74B76A212635C51813C450CC49E5C6409C717AFBDF65A38495C5DAEB41685455F367EA214A95D263949B368176A6805A255E3EB0ABE0B7D8C810DCD989BAA80152467612E1E048E2FCC3B5A03D44069D1D99E49CAD34F3F1D3A068F0FEDC2F4DEECE3DC73CF3D7FF6B39FC119C28EC57574D2ACF7294F8837555256268BED82C7824506C37BED935E2F0A234BC8D56510FCFBBFFFFBC9279F0C5B44A794C8200E8FBB94391DB589545920F35BF8966593E0BE12CE99A13F57109FE159F0A4C71F7FFC99679EA981C90BC1BA90259B50BBEDB7DF1E46B94AF6E96D70BAA8F2BB08BFA62F8D35C2948EB535A094B0182D5B45E545159F672F0E7E3347C80D633D2D37D538DE76DB6D9F7AEA29CD03EFCEBE4C786A5C24096DEC98C016E318694A5D7000E8A330906E3BBD771E240EF8A39C01A1184A6DCE9C81C1A1FEFE5AD557D3572B5ED0E5DEBE6937431543A92C6128EDD2360D8F5DE123763CA7A256C82AE080BADA847FA67BE9E50F5CDBB68B2388C7D4B72A842F0C259DFA4E4D589EF1FAC6BE81EA668BB09DD6CE1B9A1737F3725A9918A9FFE617BF5CBDA2319838AC65BDEDCA1597D6A04BDC863F7B86E9E145E54FECBB5F6960F0F9E75E78E4C1871E7BF995FA64A3DD74695C6280A1D96E744152C45AD815B7579517C55D1C7A76A93F81426502D9E50577822BBA76CE98DBE22E557B782E3DD5960B657B6E2A7A9F85AF8ADADAC38E5F8F3EFA684889E79F7F5E704E86825893296A58CA3DEE49FE2FD01247457A25352594718CC1DF7CF3CD871E7AA82B4C0AF27BE06394008CDA761ADA30096A29FD7880972E5D8A6780077DF9E5976B34D6EFD66CFA52726EFA001EF0E9B88C3A7866C030448ACC679E6D2960678C560EC652F6539309596359E3853A8B3C675EA7B12B97936D06DEF296B7FCF297BFB6C3C0B3EFB8E38E78FF073FF8C12C62B45728B897C025FE858CB814734C603B1339E0BC31581106DCCFBA0858E55FFFFAD7D50B880F2BC88910E9CC64B30106C413AEC92DB8D5565BBDF39DEFC4DEC21520D92FB9E4922814161345C5B556490C1D7A255067516C14E5D8B5B0EC3054E583452BC8EDCBC73FF8E083A1572CDE410A98E3E7C2615AA023A16F98E9A09DC1CC2B5377B80B37802A5089A7887B530662DFE2713EF6B18FC1EF24A9A48ACED5EF882871E121F1279E6D5697599407EBCBD3D058131F5028F80DBD3827A469C3241369A9B2754EBB1A8CE3490950200790F229DA7534C8C43AC417BB30B1668C194DC5812CEBA7338EA35A2FB05720268796E2DE7BEFCDBA445C70BBEDB68369CB4C900D2DAA108597C2523228AD1E9D36EB29538FEE3ECE05341CA61ADB8651414A34ECD56F7DEB5BEC3041E389010F354CD413CDA880CF38E38CABAEBA8A59467C5EC40BFBEEBBEF8D37DE28EE527650E79E27BF200180B28673D30C808A8730A2167451BE8909B95C89878731F0C1C181BEC17ECF479BA6898F41B79B59CB1FB476925AC39D274EBAAA2B13EC95BADBA492AD071CD052B170587482836283024E426B239F7CF6B9E1C42BE06AE2FA86FA5F79EDD5B9F3E6F4A5E568BCF51FDFFDE570C5CDAB0C8CAE1F85A89DE3FD64AFCBDB7936EA75B91BF6CE5F7963B3B53189D7D727DB2EEF77B567FBFDB9C04347F0B37DAB0888F32645A1721FDC425844D115BB022BC79D464C868A4B79E2E82C8AC8C2EE64094F39ACF8244E3129F46992F2EBC40CB1E894EEA23D71820461FF7CF2939FFCC52F7E01D164899B280D5884460D22B75B26B8EADAD5510617613B235A6F7CBA7DF6D9E7DE7BEF553B4B17AC3A961433C34D55A50A40398AF8D987096571F0A06A97AB4975607E99C748942D19B4759FE1E730B92E4A0C27B38FDB4433831A92A8A25DE84C0957A5DA11798C91AAFB02DCE2FFFEEFFF5EB66C99029E8AD0D283C7C0CE3BEFBCEBAFBF1EEE4E571422AC3A76461C947789313406D3A893E425CCA87ADD4C68E45E6A18CE1C0C1FD69C519433766AEB9162C301CB716275D91F03538D0FD31D514385B669236109E1AC138F172C8955AB561170C88EAD30FF71292C33E40EAE8FEBDC71C71DFBEFBFBFF8AD142A675C6146AA369D0D1E982DB7DC1266E331C71C03B9C6F12F5AB40872534169BCC99B5A0F58539707262F11471C70C001DFFEF6B7A3A21B0F1F5CD4C19B764B2113A54E7A81ECF2A25318BB78CA73C2A9804CC7E31F79E49174F2EC3076D861073CC27BDFFBDE9FFEF4A70200D27867B8FBFBDFFF3E44B93249AFFF85F130F173CA29A75C7BEDB57834BA8CDAA2B43F0E3AE8A06F7CE31B501B224A54375C6E51560C0B7B49E7831F609CD94D4D936705772E6F81A7C07DA1F6301BACF7A0B8F9F297BF0CBD254658C551B8096DAA98F722D10DB1E574BE6D2CC442609CC97F333ACD8485ED318C7738187A1EF8197BE9139FF8C46DB7DD46638252BB0B6A3B63089AE50314D942564313E368BFF8E28B587D8C4131BCC58B17B37C91540FC481320279E185177EF18B5FCC8BCAAB4DF7F5ACCB2EB89BA1855F12CD9B3F67EEDC3950C003B5BE5A9FE7A38AA3D0AFB7EDC15893D994D49514B025DF70C6452E45B13379D34D0A38F22540851DB3A95B70AB990466ABA2B4DD278F33F83EF5B10D4BB6DC62BC31514ACA9B0FCDAD8C673FB9F5FB4349796DBD31D745F3A381386F345D1D3AB8E4CA4D97A57ECF641B5C337125CC5A54F5698B3E57FA433A3ED9820BE543DD41E465F0EFD3F0E43C7A581DCC2D83F64C9D2A71C3EDC73A05CBB4C887E2CA2A28A8886664005C79C140CC1D482335321027172C480C80315A76C815DBA528485D11F8D11EA6C5E08AF6F64CFD72C3E8CAE2A4E4DD85D7813BFBC0030F9001023B0A2AE9DC73CF953EC60FA41356084D3A48B8680CEFB39FFDEC8F7FFC638A477C25E23E7BCF7BDEF3DBDFFE96405C418BE5DACB8552E04B33458FCABB51ED4E8B66A9D590AEC05EE9A180E3CA744DE60F553425E5A663A0003D8D2071E5F3EBEC3F457431C3DAB00A79A479B5F1F1C981813EE8053B862EF8DC8CE3945053A6DDBE39C37315580FEAA128F032326BAB53A71FF0D72DB6D80292F1C0030FBCE5965B3EFDE94FFFFCE73FB7041A727F3B89A29084B09626E6814DB8C40E78D65967DD74D34D0C445B3E10DB355D055D3CBD62B111ABD1F417CF8CB286B631005950E849505A694F772DB17E859CC575E4E593F40363830682F83BFEF8E3899B60524705ACAA1576BDA3D07968D84E4A1D177201625E14CA9155A1B024707DBCA3C8129165EA202984B612DBB3D48BF77A09052DD71F6E259C33C61EB834D46162D713F997CE1A8D45262995C7554C48D96BC15B702F366D64208EB3C178208310EDA26717C3CBF813A61D3B90810D38A3B00688D016044F1256D5200ACA31BCA4F87C2F05AC6D40996833D0962B986DE9982F20904A211FD75B01E705FF1FED124264AD9B8E2B70DB33AA84FF49D26E79D7398D3C56A259B53E56F038F390208CE062C2095EB8605ED50BA7D457E8FA946DE4BC63D61A6F37A550395AC999BCE8F864D35B54C091E9D35038C7C59B1D8B5D75AB815A32EAF48F0AA02A5FD73B3CE09775E1FCCD563FB3FCD1DFFEBFB979A93AD91ECDDA3B0C2F98D8301265CD39515F3989C75BE32D9755CBB57A63A296423DE4F140FF331BD747A199C4C272EDFFB59A1BB3D69817DF314D5DE8E0928B5BB193D5CE1A51B6FDD15A14E2B71358EE223B63DD2303AE5DDD279D496EEA48E24DBABF34D44E3FFDF40B2EB880679C871A46EDD9679FCD5019A359C41BCA5666F08C784CC2E099E6F8D0873EF4DC73CFE1F8B300921A571206EFBCE52D6F217443DA87A3E26955249C66315B21EDB7DF7EF086995BC1DD77DF7DF7071F7C104F4A7C956AF670350C86A9B10E2BA1AEE84C4DB472BAD6EBE2397105DA48A94D1FBA08865E50BAD0AF1D4286BCB702966DE88C271D107A1DB14E1DC63F31EFCDA4117339FC98CC7C9251E051F190CA37842B13F1DBF668C1508DCEE517A71D65D3ECF59DD33DE0D93F6C1B373177AB263391A919B72E0B6BB4D9BF4102CEC2A928820394AC238F2CD902613BEA0F832F9E7AEAA9975F7EB95A86C16DE59595B2B51D7E5CC1FEDDAB2E5379595738435141E340DF9D7FDA65975D9E7DF659869866F48099F78588C7419218E5E191EEA7CAE4BE22AA50088BBFCAF54D1B82BCC40CE98B2C93972505AB78363AE992A9FEB46D2C4FD0046BF9454BFEFA5F7A7661B67171A89FB860CCA1818F1F8E3BEEB86F7FFBDB307CBB9CA4686A074C5718D78A6E31522D189422FF38D73C088CC4F04559496DCAC22A425A287D48D0C3672464894F6DB3A18CA5735A20716EB8E106C50C4487343D048D4BC1F220CCF388238EB8F5D65B097EE41EC66BFBEDB7C7B4F03A77DD75D7BEFBEECB00234E8425B9743D42D0F2AE04AD676A86F963853AB40FF101086E6C06F6CEA23589198083F2B5AF7D4D12DC26BFC2390D4EA783CD1A0DCDF128E8ADB7DA2234DC0D615A58540CD6B69B13D994F23FCAF776D13947D85A8DBF14A5FA7C6400D2410117349645143A7C0C7E082C9BA43077DA8141DAB340C74D974EB6572F7BFAC517FF3CDFB91DE6CE9FDC303AD1AEF78534617F94CC1D1A6C66EDF5631B1B99ABC511656EB5BFF2EA78BD7F287563ADB8E556A7E50DADF65AD786FB35EEA200667550C04DD7DD50481825C5EDA3A24BAC8099941E78936E80FC4B7ED222A8791EC516E002549E3A88CE34AB7E25BDE980CAC58C0B12755B36A9B129AC4D2F8E1FB0B413AE68A9293148AB1D46212CD42F7FF9CBDC5AD8276AC8AB5BD09BA27FAC2A153AC7B82F36A1D89C48CB0A3703978D78B0CF3BEFBCF3CF3F9F66059EE11DEF78C7B265CBD45F8851389164590F98F234289B0E6B07C3059B10A4D9CC82924746C62071402196D2B4BD0AECAC9133992612EE4BE18537D5EA846E19DE3FE8A083EEB8E37691034C4CD4B7DD76E9F2E52B535F4E9E4913B829B9E79E9CB4D365FD2C202CF87024A592EBC05003C949745FDB1983BFE203F818610558483C884D7EDB5E52949E4C8AE091990E11389E0DA599D1E7A6E7B4D0CC923BC89170F733AD58840A7AF61BE618B8ABD4F2DA150E0DEE32195E320BBA9C15AD9D38FD391836AB6048137B1457C6C110705780FCD8F0DDC4BD1BA7CB037EF7BBDFFDA73FFD2935CDAA33D3B3212A4ACB141EC083B31C40412A3602619C7FC672EAD7F3E256C13962699FFA660AB7C9983C1691191F3EB200C36E6ADC1ED3821F606EC3B2C62A3059639D0C61C7A8B4F008DB6EBBED134F3C816F7DE6339FF9FEF7BF8F27C2C42ABA8EB5236C421EAD0B8824A5C36505D2B3C405B7D9661B6C244C14EEFB777FF777BFFFFDEF49A12AB2E52E55A724A84E193BC7C996C205B128966C873069A5FF5557360B084BA4D0023D598E4C9E0E85D6F0F8DC6024DF16C39D2BEA8C65E4118E40C5EFEFE692CEDE8B5AD55A5AAB55B7DC62F1FCE1B9C3C3435E67346123B6A2C07D319937AD2145F5C08CBE05722ADD9BBA64FABC111343A54B055CCC70E6A2B24058506705082B6EE4CDC57D7397FDD76F4AEBEB8B926ADC9ECC42CBA352EE962E580831BD76C308BE53AB9661224CB6B3B969350F53DA2AB9D7C6EA4303E9409EB4C6EAEB92D2DA76EB6597BF9CB8F5793C19F28D9E702BABEB206BA89C344B92C3BFAA1780548352ADB47D25FFA553B8816D7843C81E8856283CD62391DF0DDB4685E9022D33B443660B22FB98C16170D4C25D459245C18B6160A7C126BBE9A69BA05C1F7FFC718E1F03804827829AC014DBF507A3122D0C8524099170FDFDF7DFFF5BDFFA1647CBF40763C99FFAD4A7FEEBBFFE8B24719DD3A2448E2D8A90955154BF95241A66E4F0D324321AE658BC9BA5330A261AADAEE84E23059CBB8652F1AE284F522E6A7A619F64045E34DE69BF50D7E2F9607EE1881D74D001B7DD761BB96008A836F031370BC1888D3CF77AA7EBF3AC4B8B8A8E8A7A046A0EAE93F2D0C45ECA0A13CD322426710A0C399086495078597CAE3050A865092FE2D888F8EDA28BB3997EC96EC5A26761D924FA1A2A0A9EB40DC5C844604E9A446B168CEDA62626206D710551B289B5EA924B2EF9C217BEC02683342DA166E04CBB02C46F8F7DD2BB013BCB5198996630403C6E2CF4C20E87ED79D145175960B9E44857102C2AE0516A31A418F8EB7C5130893A4A33C369EFEA47A2CA78678AD078003FF7B9CFDD73CF3DB429C9E4870F70F6D48842C5BE2234B0CC1E24E27085DF80CF10BDA9FE510C94610BE19A2AB760EC9D1042CE39779A62DA0AF52BF0D86BFFB0870C0F88F60C2D60FC0FD71306934094AE080BD10D550CDC199FD2AA2BFA3494AA84F2EDB1C71E3FFDE94F1913528D293977F1573834DFFEF6B7C510C2FF15E86685BDF47781E98D5C1EA49F0FF2795AA8722559306FFE565B2C86C55CAD961BF58946A31EFB3C6932D69A6C172FFABB34762D87306D74FA30491EBB99B1268ACD8412A62204DDF6A680E776761D43A49D963CC37352290D35D33FFDE477BB560792496FD324916B446E6EE6E694FAB184D8E5A56A69647C749DF3DC1F0BCA037913CF128DB6EB1B5C36AF9C2E2CF7D74747D643BD3987F3B3063FC46E3C83F79D949252B3352EBA59656AEDBA2B9CCB2431F733D35B145334AC79B8A613266AE713B682853BF4D043991C11211D568D5720CC58613F825A58C54EFA7AEE3A58FC18068C7E31BEB910C8E1F8E590502928A74BDE246193758E92A2DF8FA8186DAD411C5868C4036301CE34FA698248027492342A4411D2813530B41CE97531A66A51DDFC3CEF34772EFCE311D8685B6E0937E2654F4F1AC36F0E9E9007DD252E4F435FE7B08B63C70AB6460BE73CDB71871D9E7DEEE99060870022C7FABA4AA554AF379D074F790855A55C1B1BC378FC353B7F0AD0AA4AA5DC15F52A56B4549C9F8CC8D8109DAAF716103D99ADE2821F47795C8A39955548363171A5EDA8583DFFCA1328D8F03BDFF9CE3FFEF18F94F849D1B65387F090430EB9FBEEBBF149BAB0B8B5A2A9338E939A9BE59B8C4F52613387CAFEC7E4D184AA3BE9A493F282E994217DFC8CF17CE4231FF9CA57BED24B803A4368CCDB512B8B3715973AF7DC736FB8E106FA91B269B46764A2890E302AAA30256D1917110B9B6DB7278B3536EC83AEE82D48F3653A963B2A5A6E70F68881ECB2E1A46654B374DD75D741461F75D451575C710593D0564668A52CAF722F054C6B89CDBBFEE11FFEE117BFF8054FB83586D431B79A9624B046C7421EDD850297B8C3C31B87AD22AF77B0BFC31EC02663F6D6BCBE787998C0B6BE35068FF1FCE10F7F80A8E220610341D8C5817C83E654A35E4FE250BE3539514A217F9BB5AAC785B6F276ADAF6F627C7CCEF0F0C8FAF5E510C8C187CBA532C58D2039B47E28496CA247F69FC86D18AE64FE4B78A5B8686B2D8679ED2569323C1D39D7C837EE8A0E2B679F7DF6C9279FCC35B2A8852BAFBC128BABF6887951F4397B255E9776A41E5A38CF436FB6DA6A0B1CAE3871013DE7E325F5D60461BAC251D2160F1D0B5B59D1DE83D709659125A5E4A4DBC2833767145951192E70A939D1AA0E0CBE34F2DAC09CA139E54A6B74D4FDF64908D63E4C38F46BE8DFC402E6268E48CB8BE05A9256E1CAE69D279ACCBD248583DB6665918BE1F778319764CDB61BCF1D44C3ABCEAD8EA235D88930151A4D4F489D67A13D728C81A6E552A3D9888B2E49828EC2AC8416C469F28CC7E1ECE0D7CF7CE63338593CE95820AE238B62D511272A48E8D8362D2E3AF20A764A88BBCA35699F6DB9E596F813753356FCA31FFDE8030F3C80FDA0C49C802962AAB11E08578A395D22B3F6DC734FF8AF6A544FDD71EBADB71E78E0818A232A5D882BC0685BB3668D3C63FA84BC2C6FA79887801D1D9C9D80E334D59D89D731374C5969298E7133A6551819A3A01F1A1A683427B1E3CF3FFF2B5B2C81CC7A65EE30FC0638D6B878EA41F351406CF942F24074323EFAB6DD767BF4B1478E3DF6E8AF7EF52ACFFC3EF217DCBC5AA9E2338D067449ADD9C2E975B059B98D588B8913484149B3C04D83F97803AD4543950DD59322DCD17CA30AD802342C48D832AD88CE3E2B5A1C5A88A3B23EA490E49B58A777BDEB5DCB962DC39AD954992B2C09B691B123D979E79DE1259C7FFEF9B38C13B7C0FF6C998019D6156243E060A38B9A34E9D75E1E30B71A632CDC06D61490A1C7E822B5AF0C527A66946E50F0575D75150C028D5094C56C96C28030FB32D15A24350403EC4A06BB10FA26A6D71556336990BB54AFE687B1191235C82951D11D6356C41C302FC0F4AA684FF2821987E2C30AF459E64D614FCB932A300E533CFBEDB7DFF7BFFFFD4EB902AE96862C57B3313830C847C6A8EAB94F2D3A037BEC805C9A2DA59AF08320632A02D1346AC56D2132A5926CFCBFFDDBBF7DE8A187B47BFD7297FD9F20C5A15969C460602ED8D13E9316F2D01B466079FBD0CEA2458B5E5AFD22494ED449457E397E8617FEECB3CFE2F0B2E32159ACB9B2964281DB95692692E0AA588B5A8D65A07C8ABC68DB408217A699F9033E03E10B614D91ED42848F3A9E98894D70D12C93A077BD5F56CEF0A6E5C4FB6AB8CB669B2DA8F5B16CCC87B84727360867477F11C3F38FE91DB0A672F614BFDE09CE52ED528564C21234EDAD35805629732D17E7C9E09CB9CD766BA8545EBF62D5F84BAF2E1AF77E6D258E2A599E78EBCDE77D93142EAC2F5381C35576712949E1D4F821B55B0D28DACCD50354270A595EEF2A612F95A2B627CD8A37BA7CAD8B5F8CDC2B2E5A17C42436561A6C06BF93B34E104E9DEB14A4A422146D00B628710624A7EBA2C1B254154C69E103D88D3FFDE94FB997F0C5AE5622B7DD76DB01071CA0A42FD53F64086E848BE0F338590C0132C241DB9D4C8B71E857A856E871D13110AF638F3DF6FAEBAF6F9B6E9E749918CAC2D6C53074A82D4D269F8281134BE0A828DA74D5D309415327DB703C5EB81676B042D3EA5103D183215E73CD35AE28F657E6D51F1E1CCB6A3A39D1AAD5FACBA5DAC8868D58AA3CC39A26ECC541D9D16A35E0CB6E1C1DC93C12AFB260C1BCB5AFBD3A591F87EAF5F661BB558394F775DF9DBAF5C54B168EACEF700833FA7FF0C107DF79E79D7878CA627B308A0855F8D589C2CDB19D8809E9BC2E054C9B4854B7222E605ED03A19EA0031DD4F92981632399ECAAE174FA3ADE0FEC67A1F76D861505ACCCFD98D325D34D826ACAE70C729EE097CED14D417646156EF523A73BBCC787D6A507CF29BDFFCE6A1871E8A0FE3A959EC44DE2BAA37852E39E0AEFE7D6C55D98563928D296036179D42939408A79E7AEA97BFFC65B97154907C047A96C25CCCE8FE6AAA79B61569B7800E57848B6D6604973DEDB4D3CE3CF34CD6A462E45D517A0E691605CC2AA328D46B29919F17CD8EF899F7BDEF7DBFFEF5AF93D034AC3931494D008FB3AFD6373EE1F73C0E5133EA0478AC02F6FBB99DEDB8E38EFFFBBFFF2B1B88BA47B17D4C0BA9ED59538B71B2668307A70B15AFFE424C56F9FAC8FE012A48DCE5F1271EF78E4E9ECD9F377FEDBAD7FAE1B204E9B9CDB6DB52A162AE2EBFF4B2A8289AE076A21DA3408B5E4A61B0AC53DB5B6870ABE7A8999473A1AB206FE3BDEF7DEF9FFEF427854C383F74C48F39E6989B6FBE19C7D312AD10DDC368B0C5875BA45BAF53A67DD531AF3D38A8B664C9E68B172F9A333C1862305E868D4D6EB4991729609A7D364E43050C0FD4B2EC49747858B5B9BBD470336AF97873A596E55163627241545AF7C853C32D3708151B4725EFC1FA58A3DFE4210D37DE68552010E2246A754C0D68DF8976733272ADDC4124B119441CE2D2A98B16C49EE7D22F5F1EAF6BB75ECEA186DD681CAD883DCA3BC586C7F456AB73063D06D3D34BC79BC45736B559AA10677141124EA40B2D30D6BB538CF098085D2F1208F99182CE4030C2A98D424336611A544F2B14151D36DA820A3DE6A615CAE5975F7ECA29A7D0DA63648EA91937159B2C97F7820B2E8034B0CDBC597F1F05B261C1B06DC8D315A91CEB5F6D12506E2A779570F3F832A415EEAA8AC90B2FBCF08C33CEE0B00410977580C7F8E10F7FB07CF9F289897A904A937DD539E393939552350A60A3D493947AB9E96182BEDCA819CE249459DF5F46D6C2286BB6EB7DD53EA8E100641D0D6CA7AD6DB7DD7664641D6604DF651C0C6EC1C6D18DEF7BEFFB7EFBDBDF4216847848D8946E2AD5BE53C364D2C8757600CE5A8FC3D5D303A627F7E10F7FF857BFFA155682B2860A89A69FA89225E8BBF2C414B8C49AE207EE0C510849D6D8E551EB0C7C5E9D88A872661C2711AD0C29136823674B124D824C1884682ACDF52C393CA6246C875A5E96D40A78168A7BE6AD85D5B2A2362A3AFAF1A108A053EACE999824FD51C51E2931797AF12D061BE80CD11A63281B5F27B5C2A6153573C5F1D38A52F1809428AE4FF8315C19682FA64559ADC4D2436683586C8A2FEEB0C30E4F3FFD34093E674765335C4C3D2DE52D8A5AEBF675B4380110A5D06F60627C9BA5DBAC58B962687068E3C41835EE26B862904473E70C7FEC631FFBC94F7E8263883DB37AF56A9AE782717640B645FF0FB80838D49C679BF894FE13F92BBB17F0A6F8D6BBDFFD6E9C387CBED35DB152A6F8C37D1BF5FA702016F02D4E5FF10E286D4179C091A107C275FEF0873F60071E72C8217062E485B01F0E0BB82DDDAE2B7C146273A2A95CD65826FC401747EDAB7953826FA300FC161F0ECE080392A2A58C8B8E87DC60B3339DD973DD112F7E1396E7CD9BBB70B3F9F3E60DF7F5559314176C857F997058B48C3915B61A588899BC950BD5616D8EB434A56783C680EBE7D091FDFDEB47C75A13F5254975DDC3CFED54ED8F27C74A71024F378594756DEFD426317C1F88E55AA9E21D5FE6D14B693BCFC69B8DB1A07A7126EBBEE4174E73540A69E3B979E683D569021777A4D558EBF2F5CE4DC4EE8FB983C584757F69D52AFCB0D38E3BBEB872D5C8FA7571A9439825002677BE2B7C184C2C898358C72F743DF71BDE21685F9C39F8136BC72D5D062F85FF197F2526F199679E91F1F49DEF7C076E318F12FE4A9432FEFAB5AF7DEDA8A38EC241BEEEBAEB0E3AE8203163E0EB8C417239944CD48674A18FDFB265CB7876F008D83C947EE22A38E79C73E02371C3634372A1E5D03AC3B71317CC5FF2B83A0AD8997EAEB2D0A9DB8F38E2885B6EB9855286893A32E608EEC110993CFA0057D9807D05895A2B0FE04BA5B45A2EF7C5AE123A5A33E80D3B6C63E052E95B3FB2AE5E9F0869BF74DDC8BA8AE76DCE27EA101659B994369AF5905DF671EC5AB54347CC2018542F15A1B672D05D051CB45C2BD0FEADF0A64CD737A68055FFCAD34BC0943869B17BF0BC58C22E70D07458353D5A1BF8B5AC265D275C8E2936251BEE92B765961C30BF45C42089A824E8BB4A29A6F7A5494C6FCB59C06554A58C161E7EF8E1575F7D35E106D897A3E1151942546738BF1819A60D484361FAF5691A739CF83CAE80C3C3868604A051879D7EFAE9D75F7F3D2B195462AF98156E3D636B528E1F92F7431FFAD0EF7EF73B1C217A5AD0A38F3CF2081CC44F7CE21377DC71072D0641DE387B5CA69D77DEF989279ED00571357C0BEFF388AAD877FA8BEBAE25A02DCB5FF133EEA5FEF61431DB068DCBEFC2D6FCFCE73F7FEFBDF72E5FB1DC85C6383A9EE210AD4FF81A47223375478601C9A84CE22DDE17337CFCF1C74358E4A6A7902B40C204982818C691935C9AA018CAC7CE898B5C1D531D8E007EA0370C01534E4B04FD896896113F32F0F1CA941EB0E6CF3BEF3C350183A895E3AEA347BF84313D1A70F22D44CA8FAF5C7CF1C5F07409BF504B44521AB86060115A4FAD8CB5FED18F7E245386179713F2FA51EE9DF021545D2986DE1D1A1A1C9E3B00B3ADAFBF12BCEAB64A8FB2A92F1501CB15F6B1B13CB619C04D2A21D9C4CE61753084EF78A399D46A939157E18BE2D2F25F3DBAC4B92DB19A2E2EFB20731E6579DBE571EA8564B3DEAAA49EEFD2C33FF12758DB918313BC31CF5A9E2C2999F4AE89779A6158798035ACC6D80DC035CFF2B1660BF21767A31EB9DFE66ED1E69B2FDD7EBBC79F7C62E3BAF5BE77ED5A78C0D964CBC7D5A2A2CE8D9299134B5389F2939B932003B9A11FF8C0077EF9CB5F5E76D965975E7A29F618C183B4B093A2B78DADEA113C1E7B8FA1C71B6FBC71BFFDF6C334E24F14AA49686117855A23D2D889C99914AA2C9CA117A1BA47B1ED8A09007F3DF2C823A501F9B211235C9C37E575C896416081C5EA5B4DEC0C654D2704ED0C1E382A984B7142F060EC00837372F4D147C38EA09267CB1ACA4D6698F96B98E58DA1542EAD9606279BAD81EA20B46FA5348095F5454945FBEE466B3D8EFCC886916A151A6E62C992CDC7273CFD5EBDB571F3CD367FF5D557CE38E3F45BFEFD66B8C81B366E983B3C3C39D10E5AD9BF966CBE046775C992254CF36CD2BEC6BB573C166E74240A37ECB0A8578E67E683C776491682CBA438912FB80B6C76767913D16897AD2A914D24AD0BDE2D74002C9BAF7EF5AB56015B9D2DFB91346410C4F7DD771F9F77C67132CA8111DAE48AFA191099450DC70791ADC7E5A050B0C8A6AE1793AFFA80AD0DB37407DCD02A58A27E22A44285CBCCEDE1574A7CC68189EFC7A558B5A9F0B528F2A1097065FA91F81614C977BFFB5DA21F9DE9C13CA394D4DCB2BEC586918996646A072A90306FD241580302DFC2DE666B6ACCEDB9E79E8BE3A0BBCC82CA262DE2A38F3EAA6C8EEAC1584DC80BAA513CD91C312AAC9A820A5E7634EA52C059D157D8EBC87A43B476B8207EC01E1375892641DBE984134EB8EAAAABE8491089AA02E23C547533CCBEC962234771A897531D20A4432534283CF490431212C9AD5BF737BBEDF6E8B26570D69987E6491734ECE31FFFF8FDF7DF4F483FB941BAE210AE48E4B38E4E36AE20145DBB910291511C62EBE89A5B0E1C26C5B5E5683D0B67AA9E48B9E99BF2FA1570714ED3D03D302E5792FE81CAF0F0D0DC79438383FD596B53C9AF6098CEC7FC5B0A92B1776454F4069586EECA46C50599496C1A24C7FEB0BBB452CE62DFF47A4E96AF7FFCC5CD23B76DEE93BE659CAA3848759767F81704BDAF220E5230C370E25062ECB927EB7994D4E3A89E4575884A7CD745E534C64AC067EA875F9B3BD8CEEB031AAB0E0F18EABE529EBF78D16B23EB376ED8E0D9B95AED6A529A687788626CB74ABD54328B853BF4D043AFB9E61ADA7F743421D6042D164CDD19702B360C7EC063E2EB2CE7DB71C71DD9BD8DF616FE448A0F55F4AAE59D0A04C8CD40080B13BDF404A4D771C071175549E50531D117BFF8C5CB2FBF9CBA73FBEDB7C7E6E441204C87EB826BE233279D74120BDB04CE557C858A831C2F2A26F2E697335CFCFC900B5612CD55AA1992217495A9BCE31DEF804F20D0075C84679F7D36E45D6A914B9B0DD852A5850B369F9C6CA549354D6A7996FA1AB9BC83F91A1ACE3DCD6C63120BB160E1BCD0DDC2572A0F0CFAEA94D0B1326B6730D6DA5B2CD962EDDA5793B8A85868B7FAFBFA47C747ABE56ABD51AF942BCE388EDABB34A09ACD4063EB9427CE5CD48B70A3A7E7C7E42E83939816463FA863B0422CBE8E8AB639F9547ECDE294C64C1BD381A3534BED3223E8833A125A017FC5C615FC8FAD26661C27B1C4181E3D0C3A40D273CA3E520733FC42D160AB48675124DC8B0CF9F28460B7DD74D34D3EDD55049039ED44322BA1481437DBD9D2F895CC553C80C6A047E105EB9563C0A1A5D32F435549A3C434F2231C4F3838199876325D11E621D4D6626DF4033D5D4E14D3A8D48B1DC29A4076A84A03C6A5F3823C6496DCF929A79C0271830B6293600B1D76D861679D7516E7198A196F726F601E68CA501058E04567F0F126B4BCD8FB4AC1411195982D99509730ADBEDC6EB9E0CE14FBF1A188F6E430B8A53D745264701D60858F734C4E4C4007C3F7653A302EA855A178EC16B212438D8D9DE9788309F9CFFFFCCF8F7EF4A384A16187C3D6111D95B6A5A223386ED86F04DE0BCE6A69A2BB5C0D95A7F3529C52583FB4F62804BB2A9A5CEF57973D173C9852E25DCC2877D8EDF9E0506DB3453E169D16CC55AE60E128707FCA85E5A40DA19250858598CEF4750B9D959BD17059258B4AEDB89C472FAF5C3ED876F3EA6ECB5A6DB03E89A1A485CEF6DE2DD47CDBAF63BBD54E5D043FD8078A33E8DAA854AD8C4D4E36F199249E6CBB3A43D6216ADDDFCE6A49524BE09ABBF1566324CFB06C93B17B3CEADBD81EAF87BEC42E4DF03C91477B45D0E8968438330464DC90D8F6E79F7F3EAD220813929D1157C427A5258A79C029C3D9C7B6E10EE1FED159D051E591270D1F1614DA44FD0AA9B0E04FC3506692250A5DC818FC93C14AEC0BE98F946366B11C81965C14726909CC68F703636FC28EB05C48CB2D0B92D298C96972DAAB34237205B111850815B0FA92C6A69185DA99C1F23DE69863DA455707678C88607242290E8C8ED5ABA5219727FD7D73F07FE42A9DEC7EDE215D7ADF07FF06AEC633CF3C35340796CBD8C4E458BD5D5F347F61A339064D8C2787567E7EC5739B2D58B07EE42F0DAFCF7DC32ED6CC61784270E4536B03ECABD8F1B0395BA12F66F003B2F1D98F56D7CB260654F960C5B176866A27E2A99DB96422B9A2B49F601086C5661C09B729AFCFFD44E5374BDF6281B620F1A11A051A74C127905126520535AFD61DB96F6699073ACA4A365323AA1EA95D747AE12DE86BC281C33B0CF0CA3855C053134501440D042DB562C50A3CECE1871FFECD6F7E93E8153C02C91AD9D68258E5071E78007E150B4E98BCECA28AB43F8BAC477D4BF8EC843E915A84C4939C1C352639EFBCF34E3EF9649C349C02461471DA3FFFF9CFC38FD45DE2DECD21E853BAC21AB36ADE12ACDA3FE170E188D177E40C7BB86F29B50A185E860B7F82A0573F73677C05A566DCD4C88A95892AC7545B0E6B32528A95AB6157C3F80E810A2F4130605627B75A55F81961FC6991C04E934D8A5F9B412D5D79713AE834F1E9045B3D6DF17436DE4E036EFFFDF7BFEFBEFB20F52C804EA460B699152D89AC600FC694E25CECB2CB2E0F3EF8A09B4A2DA0079F850FA097028EA34A5884ACD19CC030AB35B768F3B90B16CC9B333864AB4B3A10687FBE3AA5472ED83D6CE12A2A3A57B0460B264DADA6F8B39669BC1A27A3CDE42F639B570637BEF8D270EE16BBB4DFB5FA2AA9B793DA218E0D3BCF4593D82C9E6AD2353378B76EB052C5B8C74240A556AD4EC04382F08F92F13C6B0600420051BBB95902AD558D53A8F3F1AC3DE2BC029E88A2E7D2FE46E25E9B1C9DF4BC5F7E12AA956AD4CED26A457DA824816536C942A2002FA6A243D32B2E0B1CF9DB6EBB6D8F3DF6F8D18F7E2428BE20C44CF410E642F62BDE0E3281850C7168822E9CAC68D154E2085D861FB0F7441DA880333528AB54549DA84649CAD2E238F32E96DED9156D758882943CEC32EC88F062DBEFD89059756C46181DE44124452ACF405C34EB880B6AB4D34E3BEDB2CB2E834C61B699C1589A00838373EA93CDD1311CB374AB25DBC0017BE9A597E70E6C0D9F7864FD86A1A17971546EB7A0DD9B3002B67ED3DCC03C370937D777B24CBCB93D30D80F0F75CD2BAB976CBEE4A59757D5AAE54A1506D16B73E60C8F8DB4DAAE5D492A4C5FC1E41A9B189B3F77FEC8FAB100B528B262A50EBF47E2DB23D61BCDC966B3113CE016D3C0A4C68CA6D6742A40E7A6B21C33E74A7F4E53C6DD43CDAACA6E5B513EE3D1A5ABE1A642195D61DF59F3569FA7E45565AA943D858B1531449468A31097FFE637BFF9C0030FFCD297BEA4BE1A5DE53494B0EAD2A5A6B37C47D615E7539DD8395A463EF826838D165E841FF6FED77DA020F1F3F8D8D8D26DB621858DFFEB64A7DF2DF31A96EF5EAC437C4CF148888F66F9F2E55D58569A1DB65174BB779306E13894CE11BF922BAA9389BAD4E121C7533B3410D5B6A1F1470B83C313778FDD570AEC3B43B22F191A17645ED375A4B8D248CDC1727E7CE5B8E38EBBE79E7B3060F621B7D54D6A0CD70E6D5BD876A9D73CE82B1C9ECC2F2D22A785C14006E2A827B8D968F5CFB2CF25B634D58A2B0A42C5220B69FABCE06D15413F0315AEE85B47F81E3EF6918F7CE4A1871E5ABB762DB71FEB956739774CE3B54DF33B9E6B5C8D71511B27B4CDA1DDD408562F7062E448F3E911A3B0F6E3C4CD9D3B84A7DB728B85342B03262B83538161F8D289A68FA8556B9510606870E7405C97CB7DB40B3BED878B87A297DFE55C7AE33E6EC523F5F66075726C7CF39523C3F02FE2F61659DADF1796B5458EB0B41D3BDCB2DE6A4D26B16F139C675EBFE25F12979318C27203DC13E753C5ADB6AFDA0C654B51E2E2E1B24769350240BA8E1FB2BC1102204FB978A5CB9A708DB312E46B3AE089A8CAADF644DBDBDCD0A06C73C9A2DEBC376320D515CDA6AECD2FDCB83D3E5C3236CE617C68C71D77FCD4A73E75E59557DA94B98E2115AA52CE94D2B373FECFF8BE741FF33ECA08507CA949971ADBB86057D108880A2EF4AE8666CE809D37398B144FF834A901F524FA10BF89BB52FF4745279F229293071EEF688BC54BC7C626DB2D4C41B6D9C245750F73ABBCFACA9F77D8E1CDD0BBD54ADF9A35AF7819DAD7DAB0717D9AD0AEF7171FAB8F95A21216769B6DB68667BCF9E285AB5E5A7EF65967DEFCCD1B5E7CE9C5C1DA42EA399F2A188734CC060706474647FACA438557DA312DBD97802D946452C099473E771470146F6AA7984DA54814AB995D729972F65B94E66AAACCF082624A332E2423B46E9A02B636B5D5E21C125514D5005B525BD14609D285B1223885E568D80779E0577345DD37FD2AD55932ECA17684F6FD2E9E04674C138C8A64F7A20D670C938FC048C0E09CA1F545931C48CA2659D530095907E0435CAB9B1A2DC4F5098860648978A87A484E303DFCBEF7BDEFE73FFFB9D0529141EFCF9EC3136A9DB60B66860A0067185A8D31676A56E269C9640273F3E28B2F76C191255DA8568D9A8C0C38ECAC1217AD43F3D02ED7CAEE19B750AF038F5BE3A9393CBE20DA186D535F175754FA33E3C0D9E344B95953095D804F359EB28D5F9C09D568F5F927C5BA66899470D3B2EA9DD3A88C1AB3B0D836909E789F05058A1BD94321E7C9CE0C8D7EA1B4A2025CCDC575BD5FBAAC947A5E74DF52B85BE03BF746147008EC7946A090356B4383F5F7FBE0D6D2AD97D46ABE17AA8786E57EE78C8F8F7A83268BA915A298A1E9662110620BDA9210B09B272F6AB1FCFE89F378C3447BB06F726C74F10B1BA8809764C96025A1E6F25A1D73986793D88D01E71C0542062AE05AE42A5E627A760628602C40333C6F1C7A2F4131575CD6CADAF5CC7FB719B900D4F270D697FA861E1BDF900F941BA38DE1FE39EBC637C2388A1BF5E1706CB121D52641D0DF59E4A1E4274D4CE1D25D61A76A1E2CEB915E74286DA457CB6437920D1EBCF11C7FAC2B4F01C1990ED9EDA2EB22FFDAD557D085A00E71A35D7E5A0784658B225C114FE60DECC3F0C54BC8A4951B542EF5CF9FBF70DD5F4630F30BE66FBEFAC5358B162E86B7ED5A7D6C90B0F2E5954BE62F59F3DA9A3935AF151AF575EDBCDD57EDCBB3CEFC6E1C1FF5DD0C63D7C826FBAB1598C2EDAC9E96A2B1F1918181FEB1F16862628CF35EADFAB2C27A23A06D735F5FD16EC12DAEA6D8362E8661879F5B6E030C4C7CC62B60BF739A54C0499A5B7349EBA40A1967E27822CF9B1EE8565E9D9C4D96D4A2D742BAA9EE0EFFA70FDD5502C8F140BF7EFCE31FBFE38E3B98C0207D04578A12D326C9B82284A258C49365661192109F672F39FC4A20AE94BDCA4919B7A171675B5DC21DFFB77FFBB7BBEEBA8BC93C3C6D7F1F56670C16363B4057CA957AA38E9D1517905A2F4CE1B0929CA1D9223336E5A9A771D8B0C1461DA6973BDB6A1FA630A923B5A119D762EC6E16C58047BEFCF2CB8F39E6185E5C25BC30A2F1A62B08E05C00E6E0FF4B2FBDF494534E2196925E940E1B6B5BF1DDFDF6DBEFE69B6FFEC77FFCC7BBEFBEDB15CD7AA9BF0595EA420674490ABBAFF857C539980CCE8AFA5717A26DF89948342E13FB0DE04F7BEFBDF70F7EF0039AD1D6989B3E0FDC75F4B7C42B49B14ECB1DFFE3E2785F46B925A3C51D493F3EE3F585341415B33ACCF0B9A8F871652C2514B042267A2237B530121B9843C575B6DF7EFB5FFFDAF7F3C6D1A0FD47BB84E1C45ECF4B674B55BF7C52F145C405FF86320256A05B293CB384CED300EDF4FF3A89AA04DB209D3B3C3877EE1C883E4C260C456FD97BA6E876B3D1418A64B9A82A19704EDD54D8A62B2C0C2B19E4C9794ECCF5E3D99C5A7D7C62F10BEBE7B9248FDA5BE4D17039507A65AE09F5E9DCA4CB2723D7CCDD4860E4E8B8BFC53FFC3A542D07F7B7DDF0D02CDCC56B5F38DD31BEDE6C4E06C705FFDA514C05FCAC4B5F885A90D4E5B8D457AE8D34BD953CBFD6F7CABAD7708E4E3CF1C43C9008D1CC657DE08CD32611CA3A1A6E03FA185D717E45286D68AAAB3B96264A1717A8AD4B6ECFB24F667CDFC24D225347E40AC032AB95F8388459911B8BDE3693D3920C76713BCBDAF530B285A72B0CBE706CF061717AD1A6C010E70C6DF6917FF8D8CF7FFECBC8257F59B7E14DDBBD19175FF3D22B69D41746D338EC0B87DE78E38DF3E6CD5DB1FAF9BE725F3530EE552AB5C989063E59ABF537EA011DD36A8C4F8E86E69BCD286ED5B3F1729C0E0F0F4DB6DCBA0DEB3C482F2DC36D86ABD96C37FBAAD55A1526FCC66696D7D2814AA53F6B43019771B5A65BEBDDD1A080DBBEAFB4A7DF0AC723B30691330AF5C0030FBCF5D65BD5FA4ACE84959836C7CC5F056679FBDBDFFE8E77BCE3861B6EE8B5E1EC4CDA4065D7D6E10F140DBBEFBEFBEF7EF73BAE88DD0A3678AB26924B972E5DBD7AF509279C8093F0C10F7E109EA22045C4D6F289449DAA0B8A3A982432B4ABC88F4848B3881138CEF7BFFFFD7FFCE31F19528EDA1E4A363E315E2E95B9057D18A0516F476E60707074E3C65AC06D51C04D8C8FF7F5F743EFBEBC660DC13BFE9121DD20FA87BCE8677690ACC5AC586507154626287A441B42CDC4F8A41470AF83C40C3A691FF003750023603463312A961E12310E718F6F613054519681CB9954FA5BDFFAD6071F7C10530ADFF4E0830FFEC637BE1105BEEBE5CB978B39B62BD632A3F6B5E70B16060BB1D467F7BAEBAEC3D8AEBFFE7A968653F78B669C31708C131A8E7C4F6E564390EA47FCB2DC6C50692FBFFCB2253190219F879AABE79E7B8E53C4B2E65E841579D1754A9E25DD560672E813731FDA923C6A4189577D975620671EEF10B22E6B4C5B77B6107188E2F21929AC740BC593784CA8C8ED83CC1EDCEE8C3C2AB7331A0D4E0704DE6D12C15A1ADC6CD1025824213DD9B92623AE747CDBA14561D8D50D1F122E5E5304748810280B4E05EC5F799B0AB83951DF72CDE87C17070F389AEB059C8326ADE7ED09978F47793D72EDC4BDD674B014CA91ABE61DED5B76BE01D38272022F19C2B1E1E3D6810C2B2860CF20DD685001FB5E4B2EAE471E13FB7C547A3E6FA6F30646FF323A6F70EE6BA3015257AE64694CDDC9B23189A959EAAA35BDCC2531231ECD5442C2CB0AB322A94564FB8C061355606B6A17765975AFFF65E11DAACFCE8B026EAC2C2B9B391E322270870BCA804D8B09E9B82B064F37830256470BD7DB22C88BAAA6C4F45C0C6729D976E9F6CB57AE18A80DF7F7E1A04ED4AA83F57AB39C78F13D91E1B8E6D5249D6C8F2F98B3001728456C3B551E1B9D08594C389DFE3AEBD78DCC9B3FF7E5B52FCD1B1A5EBF61EDC2050BE001C3C12AF779B7A3DE9AD871FB1D9E7BFE9976DEFCFF3EF081DFFCE6378303F3A1805B795689BD02CE215B926A50C0AFCEA880BD5E9F6661D9108728B661BA623C5D8DCCBACE2791C6128522C39A5110CC3EB13647981BDA17C2F078056A0E861CE08C6281A17431DAACE8F3E30CBE94D914F82B30C13EF7B9CF7DEF7BDFC305F97490F2F80A795EA09E21B5718B7DF6D9E79E7BEE21E06EC696882A92710639CFA782FAF46D412727162E58F8E7B57FEEABF58D4D8E8B2E87995D4267375BB4E8539FFAD49D77DEB9616464EBA54B3D127E727278EEDCF57F59A7A9E0D1A2C65526982F457D2D32CEDA43B38422DFF296B740AFD3EDC3B7180060B1D669A79D76C10517B070D6154486AEE8D744CD21E148CB574DD07453757DA0D74559694DE6E921AC19BD615172528E30A0CDB5E0269106C2C0481F8F67513C9FA646AF6D468F995B8B73ABA8B2AD86C216624717FCFACFFFFCCFB7DF7E3B761ACC11CE361FB3D7F5713558242B57AE644B8373CF3D1757BBE4924BD4788E162161A56CC8C12712D13757767A5A5D2F4A2A9968B384165577949836795DAD57E92233AB42CF58CACFFDB5579290046D130D40E780783FD897A50E0E0EE07F5FAE9972976605AAC67F1D3A98FB1CC289911ECBE4A5DD45CBD27AC0F5563B1A19CF866AED467DEB3F4F2C84C64FDB4B5AF160380D54C0E3B9479C36220F6EDEE0B9AA226CA6B29302F6439813F93AA5A6EF8153B051C67E787D304D1A3E7818E03351C345132EC30E5B19147069FEE0C6D7360E5607E66FB564F9B3CF0E55AA1B26C7A54770BE28126D43AA5E52D4156A4909AF190F85B20CB6F055A7DE1983895B9426E6F4B0F32C865AAF114645CD6E6EBA6FD99C9DCEBEBA2832DCC216E3448AF025609D9345E84C0DA57C7C5DD73E615480F488EA265D0E2D171F7698B368DD5F46E6CF5F1847A50F7FF8A3FF3F69EF01666B599E8DBE5F5B7DADE9BB6F606FAA084462073DFC62ACC9D16308A868C06305454090A6C22FC5129A28CD02BF35B902C18209B12497F8A368148510942E65F7993D75F5AF9FFBFDEEF91EDE5933B335E75F726D67D67CF52D4FBD9FFBF987DB6EDBB2F9C0E6427BB639B775D3D69999BD9A2733E8C176DFBB7752AF330B1B63910608EF45295F2C94A1339DC546B0FA659ADD79276BD46579F084464BE5C2134F3D8661D9BC71FDF69DCF960A9AE2A3D7F5A324F5ECB2E7962C05E7A080EB846A76C510F4F2FEC41C532292A8EDC8C03250493930CD62BF73CF7057EC63A9ED6382655E854B8B3E19A592492925461F45245B1F426E0AF68FF13A95E1D8CD13A95106C0BAD42BA25FA19F7EFFFBDFF34FBCBE4472542E0D312CA4FE967C213BF3706D6DD9B2E515AF78C50F7EF003DCCB2D785CA0DC30AD66136691EE80343FFFBC238E78243B052F13F97EA95AED773AAEE34AFB263C3C2E059F12237CF6D96793F7945D4AB8F459599FE6843262900ADFD3F20F031B100D787EBAB3647E96EC03B1E2342BC997042DC819A1AA602F7795BB8662F1109454CA3E9808FC8A7FB91EA4D66B79085A5A400EA4844D6895046FA5D602F32529068E3FB6D55FFCC55F7CE73BDF614095D301E3CCCC169B1FE92C24F90821F2254E905CA118E1E38F3FFEC73FFE31161BCC358C332CB31B6EB8E1231FF908FBAF0C10959BEB998BCD842648159995779A4AF2CE07F498C936CFA08E9DD3B55A06552A3116EC24287E8C487CDCD16C016E7EF027189AE4065119FDA45AA680550EB7540628FA4F54C06A69CB67994A27EB1D683BFA16D56A199395B5AF77F00D8141D9C111512361EE011372C5A914E0E4229F415E4FBC18B7568B216828E0FDA7BB6BE0CD3AD186C86A140BD9235951A2A3CA3DA5FFC534683F519708A78C42EB0685783A2B2DA650CFA94EF1EAB60F9454BA57EC90A3FDE834D6CE74004F5AE15209C67A9BE56DB743A8F346A51E74FDD7BCF9AFB048468A255570199C301B7CED5BEE0D24DA39DD02C837BF4C97B55D126882BDACE59AD870035A7C1F6127F5A72960333CC3B54D5B9932840B69EBD6AD501C98D39B6FBEF98C33CE60C66A20DA6A1978BA45D3C3A4705A6E4E9ABF72BB520D28A37DA16D150B05CD3A393C3C562AD6A62667F0E4DDA0BFDFDAFDB74F6EAFB8958F7FE2A2CF7CE6333921940B1BABDBEBD0F6B43238BB3645CBF80BFBE43461D746A1A6069C9D9D9BEBCCB9AA5329975ABDE611CF3BFC89271FA9372AA79EFAB7DFFAD6379ACD6EA26954313CF0ED35DDB4E7EA8046A4DA2B82B0E00A0FA852910B4239F695AF7CE57DEF7B9F6E6F9237AB52CB62C8E278717029B86944FF299B563E52DC25081189ACF2B27C4E618449F3D272B3EC47E80E48AEC69238225759EA8EBF923F4470809C4122A8F1CC82D45746473FF2BC50ED89A5C518E973B13B3F935FCC6487E1A6FDF7DFF1ECB35EA984F505B151CF5DCC2E1F2FF3894B993A8129D71819A15CD65432D333A60893ACF0C5175F7CD555573129409B174F057528D5FA92EC315DC31537D28D37DE08FD21218A030F3C900509C447489C9F89407653217488916A2E75B30987C9B72CB97C12E0B134C26CF43D10E1302DFD014921BDF394017C1365CCE1227A88D7847097AC10315CFB285753794C85D38ACB526E92235A07AB723E19D8404F3DF5946058A89F366DDA74CA29A7C09DDD47D9151E9EE3C3725B3C1E0D410C354BC5F86AA405B5F36EAC248CE4DA66E592197D950FC71F4E39ECBC8F7EF4A39FFEF4A7D95C64B5F785916AB661A66BA28CA63D12DDC5AF7824F82B82BF356DA67D0C267F20AE30DBCB8B7FC8FE4F73E542AC55B34FA95450564C98241E27DBC2414E3853126BCC24CF92364D1C8AE7A2296E319D6D4301477EF780BDFD0968083B5C1FA972D1D35058DD704E236AE234E9C73A06D8D508D954B74ACC52BFAE4EE26ABDD20BE30432D1D6F231CCDF066F3D9AA45A493B05AD8093A40D7F5A257D4B4D971B8F749BDD8286750D551A56555B3061AB69656920A14DC615B8B4F6AD80C5961225676AD981D8324B30C4A5361BAB2B235E22A0BC8124C29F9250586D7EC516140DCA82CC430F3DF4D1471FE54E37838562DAB2B12C04266940CC975AF4CE45EE881B91A64B1AD4AF6844B06928372DF69896DD1DDDD00D5306BB2D0A61D5AE2B781AA51D0531B1241025BAE9A9BDC8799DDAA566733E731F6D6D89A571BFAFD94C023FCD02E8E3AD66AF5E1B4E348F8B564BB633AD49FBA28E6ECF12741215D6AA30ABDBAE53CAF496065DE3EE054FDB01BA5632EDAF5886E4B8A94C9819DCA765008BE6FCF3CF3FF7DC7359864B64935AA6AD65CB898C9039DEC782337F95C358AF2600772BAFC7E5F1746844E34A923EC9BA77B1588D8D10840948E5194A096C905F97ABC1E4A1148718B38919D9B66D1BF965ACBCA509F3AF3441E8B5F0439DA45843557029F1B5CCED7627D6AFDF9B056F4B5EA1DFEB8D8C8ECECDCE8E64CCAE599C2D39E8D0439F7CEC31E8697C33C74E9CAEAE5CD444B4D92BB36B2FB51A03B9F4C9F8B492A41C3081939CAA70B53A4E91ECDC1B5439DC36787D2C4E28036685319E6C1E4062933427585739970D3B1988034A4A07DCFACC33CF84AD80BBE082A41091A08818E66A5919925A8AB410D58557C67C41D55D70C105783CE29ED8004310184C7F8AF74F31CD4CED6A0A122B9CD401B80B5EE184134EB8FDF6DB8564804DB5A923A16BD9B8825B002F8507C0A6302B8C575BE75C36524187C7C635391A141D18E1D7BFFEF550A212A4319D03F166046B2AD737913878171667EFA31906840F2B2F55AE2325642D03CE7585BFBEE10D6FF8CE77BE23B9C33F45012F4A15D8FE8552260D168B5574977BC5D7C918068B2EDB7F5976C446F1C5A297ADC934CF7FA7522E6C72BA89B7C4EF2904F4C8789574AE1DD50B50C0FB4FF6261C3BB18275914A169B1AA9A2ED96BC8CD421D222B9AFFB2CE0A2B19D5131788EE5660A78DA8F5262ACAC144227CA5F741406132EE2C20C72B0DC5B49D4B192C0524F25D67CAD38D9ED8F0F8FCDCFCE459682191D355B817A2EA4B1221FCEF27522E24E19550C03872DF7924D1CBB5A29B547C3343108C8CC75F527CA67F94831885ADAB5C8CA3ADAC1DFA5CF4600016E271CFED75D771D762EE3C469DE60465EEAB9E75106690E8FA3AE5E4D901160E2E48D665FF18A57DC7DF7DDBA96B934D46CB7ABE57AA95809C3A4D969D7CB43AD5ECB56DEA6F59BA07A5BFDD6BAB175DCDEDA6328D548A1899D3F353755B48BC71C73CCDD3FBF7B62689D7E429DADB01DBBDCA88F4001C30956B60E29C7495F5981E3E990491CFB7112F4FA81E77863636BF74CEDAD141AD0A449ACF992FA613708FA382555519206195022A6D53934545F5868F1358B458D60CADCD60412E7ACB3CEBAF4D24B258526F140C91E99AC6103061AAB0B541EE662D88DE25EDC1DEA4E9ECECB4288AC5FBFFEBEFBEE236D9EF83D7450B8924C394EBB72CD9A35D0527FFDD77FFDC31FFE50D03A8CA7894A603530BE3FF1C413FFE99FFE897E06BB6BE15C7A6FA2C8A5E0C4ECA5839F8F3AEAA8071E78404BC9D4CB83A584992CEE9F28C9B82DB9DF3C3BCD887E0A652FE88663E3C333D3F3D55AE5D39FBDF2AC33CEF02AE5356BD6ED7CFA59F8987194681E253F2896CB4114BA6EA15176986E67360E6BF7E69B6F6609AC9377C015D129580C41F392DFF5652F7BD9F7BEF73D930E53E5F96C0E26C303F499844D93782E8C392E452544279865B8185BD1FD027C33A352524440DF97B72B65996FC265AC9C024CD400AB6005A06EC2EBA0BA30DA5295400F58189825F324E63F9341F82B16129B1613212C716C955772F35199A9E27832A34184943066E0D9AC0C02CDB02D5169599B5B5F72D2745857AC17A7E0C3335C74D145E79C738E746D910529D6245B5C08505F4C43CEE96A829B7B41800E03DCD1E4E2E096B10D627D1399C11B89A761E5BDE5F1BD964559A64624B5F8A022A657343E1885E2804BA729337728DA027A173B6E6474A8562BEB805F015350F00A8E1DB98234946224097D498F1DB1093C5588FDC88E1D3C62D86939CDB97569B2B1E0C1742A2BABAEDC72AA3B48472A8CDC34F6ACD0B7D93A1027971CFDB4307971AF661C6A2BC072BA56DC828F9BAA82FECF2A3B69D576AB96EDA556ACAC769ACEC7713B4D1E2F37A67BF38E5B6C45BEB22DAF5C0AFB7DDB7193209456831C13E9A12B194C13036582E03889A6AA53391F8B49763B90705DAE1DB9B4E8C01C7CF0C18F3DF698C9256719ACAB2AAF7C9124B14878D3E932FBB9C98311E3CDBB30F069658430DCE9679C71C66DB7DD46BB93A6304F842C85DCA6817BFAE9A77FFDEB5FC76ED57BCD74FCD5525F7B1FC68B98B4CF752F09AC6C65FB63A36BDBED8EE71535205983E9DCD9D66CBD54D7FD8AA776179C02E551A22C7A6FF5BA8EA761F25EFAD2973EF2C8EF9F7D66D2730B199E1962DD2D97E020A653B3D323752BD634773D5D996685A9EA43AD2669383C34B2676AAAE895FD302AD8956AB58E5374F4DB6FFA3EF4999F6A0C4194A581B12731BEC54E67719FE3F19EFFFC23E1626653ABC16CD0C1183BE10294CEA9B274064C723354207A22C9A98F856FC5CA5B422AA3D645EAB83EF5A94F7DF2939F6448930D61E08D5979C76FB30A456EC744353437069F05B21849562DF3EE69465DC9C3245FC816374C154BF657B25F0C1E724B48B89524C95AE1A59EA42CA98065D56A551AF46C18194AFB2241CFB73D2BF15358FC1A8B575D6C54F0A5AFDC7ADA69A7D9C96293F662A9E2F7FB4EA1184338E2FA892FF8263CB91892764E06641A22B22189742031A1CABC2BFC4C4B9C582467B153F5226B1DBE6150DD7C59527CB0EB30B5264E810570C30D37501FD330153E5B692E2B4547D848BDECC34585539889900364EFE0002C7528CBFBEFBF5FD889E5BDA465162F421166B69894D7971005D78CF02A9B224304D64060401C415A84CAE0E3A4E168656557A95110C1E7211D1BF58132A0E003F5E2E4D4A531074347E511B9814E8E03DD7F9935B47346CC7D8019712F312ECD6A4B3BA777B5F2E68F5C09A4EAE461495EE6CECC856491F8FCCCC29899201299C9402D57C0690EFCA102488D160BA22CCD986AAA017A857A036F50812C2A57F4962C958A2A5CC25829254A0CC0D089E763D040F4C33409E1CE7AD08249BFEB2DCCAF0DE37596AABA0EBE77B3960CA562C1762D3F09FA415CB032384286FA716C47FCC85692B80A0A587555DAB4520CBA97E05C55B655C9B6EA167672EAC75A376B2A4AA51E2A549B4127B1EC42A5DC0DB49117F9BE96D7E50A6526BEA1FFC045452C8BD48989C5AC72D01F0D2621C21306409A7D71DEA140D603B36366875D195B0136E282575D75D515575CC1800D6F447D2F2234353A9A8B7AC6913A4C6BE4F2B94A499F8995C0FA49AE22D94156CE434C80214C7C2F0FC89B8608BEC406875541C802AFB3881623C095B639AB4257DB00F2585C6702CEB45277E3864DF3F3CD56A7D3A80E373B9DB1A189998599CDEB0ED8B16747B558E5BD717D064E774D4DEA66BD2AF15CAF1FF58A6E11B6BF6EB7E2D63192C542054E30847EB9D4C024B69A1D4C5C924201F7A3B813C5ED4469358CC13CF2C8E73FF0C0838542090ABBE78745A7323434D2D33A20E9F53A7ED8D3F1154BD7C8A78B887AB5658B667BC731D9EE0DE804303428124A10348CEF9976898420CC30910C8E59B6247C2878DF534F3DF5D7BFFEF5A38F3ECA819544BB48525E416283AC989488872C1482C5F833F48D6E5F61187426E58AD9D0104B87746B04FA8A61416F46BA6932ADA072FE2089D4E9D516F21D9923924851922A58C35EB49898490AF068FB3DCBB51B5EA9DDC9DC3B572368165ADA0E8590EDB4741572CF0F38F8198561A8295CD2404AE5A45253220D03112A919BB2434822C8D3C53DC22DA8111912E0352568C1A4032F220D13190067C68E4068897F50045B79E119E1C712B4504BDB0030532B247103B1351A40C27DC17EA5B2E72961B17808FF86C27EE52B5F79C71D778821621AECA4E3A080635CF7CE3BEFE4680870544EA4D490F881E8690EC5F28499C9404473417A10EDA35E5CFAA088FD273228DF6B4AD66A92B780E45C60EEAC0C61AE56F950F2481D9A38EEFCABF455A4A32F53234A9752D8CCB2098C4319AC29A295050F2F255BCB3DE08165A90CE48E99ED5386015D84130A3FA3E0323D0C95DC6FF9F44C28BBE5A9D8928E800C8A17A23E3B01CCA0082E480A6B2A0A6A9DDE86486D84A7A5F93DF42E751DDD0658CF7556ED54750A79042B4DF2D670D0BBAD58535FA54A136E34551ADA9907ACEC729A942DE8605CCEEAA631E6A3AD5B165ABF5069A1046F278CB236AFF078BAED8E6B3BF855B8BEC5D2BDECB2CBCE3AEB2C93C0400ACAF9009CA00F7CE003DFF8C637A433A6891E151A7CD1C132E3120D1AC80F8A434CC222E2A5212AC9D610E50DBF251364E7ED77B985D38CE01DF34E3A209AE01298B4724A007E691A9466644E7852F12F7C713854424B22A790BED032990E376EDC78C821873CF2C823FB489E9BED44240E86CFC8D0E8FC0246CDAA551A69E274FADDB1E109BCCCEC427362449358CDB7E747EA238C97462A828A6558CFCE692069446CDE74F0CCF42C3657C12B63AE5DA7582AD6607FF7DA2DEDC8A67E10B6F05F9C7631E9AEAB3B90E891AA0C61F5B65A580AC5B1B1B55A0EF6E6B5028EB402B6B5C248323020B719552C0D6D3D495825975F7E29F51997855964C54992AD255A59A09226B8462C3B76A7A0FAC4A520E20780A9D40D6CEEA1F28621D4FAECF038A07806265848F665FAE9D561E95050BEED6D6FBBFDF6DB31C70C3B8BCD65BA230C0C62E9735D9254442D8548E4F8808C384DFF2F5954BD14436E51A53176B056E18D6ABFDB0B026DC91633DB4E43973BEDBEEE66DF08FCA88F3F5989ED41A647A562096A586FB940EBB63409F8D66946FA4AE743A0AD03A9382B6F172F5C60345D657FE280F5EBD793B59FD259DA4011CD64366FE0AEE344D00AE63230E9DE042A2C2827899BD16EC01832B6CF835908C8C26295B722A7289157108C121E92951B586F2C0DA224623530FDFB3407DF492A4BD6DBE1871FFEF0C30FB36FE075D75D47A0B26035F96A560E3F16A64311F10C2CCBF898C55DB2F6B8D3F92B4D4086EF96D78B733BE3678C3054173980B805E4480A567A3F6C8968625BCC615F51FE70ADDA461B318E6D9C138C4B208AAF0CB1B663C70EB319280D5919C0742910DDCA09B6326FB544F3880A78B9F63527C254C3664A7B29AC97FF59C43C38BA5A49EFBB6EBBCFA7226A52681864C1988F97A9EA42A7DB6D6B4A675C396DC4EAC0D8D9A0DC71E56B9073D989B5EB9CE08F25CB2E7A2547B353EAD3630E54E60ADBAEDD8EB4076C6555461D8DC3D29CFB45ECEA3472B35A6158D0BD345948D4824A7CDBFD65121202C235562EEAAA7A27F399485DC7E48B54C77275D14913E8AE24F27130D63F5126C40DD0F4B7F3661252FA2F5E0AC9B6B078783B993E73FC65B848BF2CB12E953B3CE2587347C820D3653AF4D0431F7BEC314AF238E387C793937832C929E599B9130BDEB4B7049B828BE382471E79E47DF7DD878DF0F4D34F538B4B9465D14E676F452253366DDAB46DDBB67D70668AF128D9506E4E3CCB6DFFF84F279FFC4E98551B36ECD76E61109D99F9B975E31BF088ACDF874C7C7AFBD3C3B561D8BC8F3EF17410F9AEA59B04C3CE7674FFAB686464ECCF8E7CC9E38F3F3E3B3B0FBD8B850DCBAF58A86A2FA1ABFDDDD4EA8751DB0F9A50C08E1B790567BE3539541F89A314431146292E582E57CBA56AC79FEBF7BB61EC5B30E1EC9821682CD64AA5945731DA595C712DA5BC9D31C371D789D792E658793194C4533137B0BDB4AD0A9B0DBCEE75AFFBE10F7FC89A3089C630BEC774BD985D4C49AA3C2F62D6802DF7B3053D2435A614D310FD7224C537F401FDE317BDE845BFFBDDEF887DA39FC70EB24CF291715ABC490910A9C176C2A4D2A4E3FE9CC4B11D2F893558BAE815366E5AFFE4638FEB0E54B12E6FB02DE56747619772A5962B9566B7A37954A2B458F07A41A869B3C24C01A78B092171DA0664A232624D947A5FFBDAD7DEF5AE77E19B9B6FBE195A87D40D0C3CB0A121DE05DFE3AFCC590A0888A044AA224DCC5B2AC158F9D297BE2448633C89F41A634CCCCAB9B2B9AF2EB8E0824F7DEA53B457F03D2CFD8F7DEC63C2E874C20927DC76DB6DD246491E5B90F374D1240CC86D2FEA010AE394534EB9E5965B606150CA505D99DB50A22324D0C0B978F8EDDBB7D3E849B2AE6AB43CB856998D369D5DE1C8E5225F913324C909B1A5EC98F167F96679BDB8D0748BFC25CE806E9C988C5CA23865BFFDF6837F008180172417BDA40357933F2A070A700789A9215848FA91FC06D377FCF1C7DF75D75D149D029E9732303147E4FA828931A3EE52946FFA5BA2ADFF74054CE055765F0693F2097DEEF4E7563B4E823F2C0E80B9FE1B856AA7DF6B07FD58C5CA5123CADD9CB86B63774DDA2EDBD0822ECCE2B01F59DA9D758A56B16BF74552E90AA5481BD4B83814B0975A8E0635A76DA543D00E1C5F3CA695A449A6B23DB76F3BD3513C9B25FF1EB513ED625B163675A35617DC86E5E89D42554AA23A2A51D2DA083381CABD5EA926C00E85D548D1E4E44D5920D37098205ACCB2311C70F4D1473FF4D0436C88C45CC9C0BCD040A719CD76586CB480CD42720C1ECC81950095C9128F07E323A92C1BCDD2797C033F8AB95BF2102779031B73193018CEA80FDEE2A0830E8227E6E4EDC2246BB3280D3816EC7C2E61679EBCDA0610F49A591B83C5B2FF7EFB6FDBB623635371C647D74CCFCE0ED74718D1C1BBED9ADCE56AA7C8C5286CDFB57D68783FBF0F1FAEEAB979A7C204CE4763746402DA888CFCF4E2590518E9C28A24557E94B4836821497BB613382E0C3A3DAC7B76EFC5CB62EB15F4D5F4864C6C8DC082DEB56C9C156AEA993C045DAF6B2AC45B6EF95FA79D761A061FAF93F92E7B85EE40CC25317BC5FB142884A9802DA3AE89213B3CF081071EC8025913782C1FBE1457158F67BC02234FC6DD81BE5722206427D3F9938B33FE492E492987C71AE5F4BFE52D6FF9EE77BFCB8621C2E84B424A8D54CF0A8A52A341AC098CCFFD7B799625D1D462C18D82A858D074DE9BD6AF7FF6D91D1A63E95956565458AA78AD6E385CAFCCB5BA25CFED691309EB0D4F18158A6EDF8F60790571466E9AAF7E6E36B3A47DF920705421A9CF3BEFBC3BEEB8037A8E2292B81E4692210B285BC97CC9A411C7848A56F61B8E871A80F6BAE69A6BAEBCF24A8CA1D9F3510AED78533B231D8372C5F5315C5093EF7DEF7BD9A551973B6745BAB0E577EFDE8DA1BBFDF6DBFFF66FFF76792D8DCA82DEEC89466DC14984F98B7B315F405F4130167C4E16440D8C06362F83587854F603E7AC510949851B1E8C202333D562820C4CC4E94064EF2FFFF22F7FF0831F5C78E185181F8C1E6EC7C396D78B4B104519D0507AA86610D232E0B2D75F7F3DA940497465AD540969CA1FB141995FE7AF5CB474E5252AAE32FBE6D8638FBDF7DE7B95E1D68BF832F33B7247F92B4D3ABA6BA6845DAE6E07F6A69577C01405BCDC6F564B9D5A93B065E03370302D8334A38E847C8BED04FAB3945AC3915D53E9817077D3B0ACA2BA6355B0D352270ED250452D4BB765756C5580168C9320D29D07617DF7E2B094DA8E72A2141E70D2D7A54A70829DC4B5D9402DB29DB6ADA6A2785E597063672DF83370A7A3AC7454C7B275FA667E6E6478B1F05742AA42A12323C9871718942C72D8C424EEE0F7D8D1279D745292F5EB843728800F19CC238E38E2E1871F66304F2078CB6D476A6BE93B6E4EB4097D302B30F1A7A38E3AEA8D6F7CE3D5575F8D2BC01426DA439AEE98904349F0CB1DB96C881BE5F5A595AA32226A14DAB4862DA1EDA0ECE3A348C3C2E51F0A320981525169D84EA3D66AB537ACDFB873D764BDDAC05B43FA958A950F7EF0C3B7DE7AEBECC22C0C3BD776A95AB48F02A74239D5CAF0F0D0DA24F2C2C02A15EB90099D7637087DDD2B5ADB608157801CD16ADEF24B7064538595D30AE366A23A590E18AE6FB35828CF35E787AA63FD1EDEB65129D7A025E75ABB33367205051C27BA1E49C7A26DCD0F3737B750AB55FAFD20AB016DE77B35A1F720D296533E0025954C8CB9EB4C3F7839B28653C2E8BF6871B91AB9B49823110C0B51A3ABF97FD02258F458DF0F3EF8209193EC92CB1719CF59D15FF08217DC77DF7D74C7A9122871483FC4076683614654B807F8CA92E110134D27961605D092605AC9B15CCB0E82D8D66DC0B3761CA9AA963D4F2FADEAB63D738DB23DB176ED93CFEC3EF4E003A0F6DAA18E696B430103D5F5B156C32823553014304798CE872C4E190A9183D8B7B80E0EC33EC15667CD3BBEB9E9A69BCE3CF34C46776872329E4FE78F941AC439B325BB90D6D242C75CC0C1FDCC673E8341938E08A6ABC76FA0FBA17D19DDA2EDCF841307108741FB9E78E289B206C48FE182E1E6FFF33FFFF3279E78E23DEF790F9C0049FCD39F236719E7944D70B98424A0628E09CEFAE217BFF8BEF7BD8F17617F37499472AEB1AEF046B8A6198533299165192BA3AAD2D4A9029B12A4FDF27A71959766D2DBE0333091C1E7970EC45C8DC4E04899354DC37DF4BD4E33AE6C46AD2973656AA449499AB7525FC4B92CE5D2123F9E650B74946569C9C13C97ACA83250CB43D0E9328E08F35222A35753AB6C21A39676F192781B6585998AE22AD571FBBEEE07E8690D986619C18C6952A98D5EA91C06E32A596BA9F182E758B61F249D246C3BB8858E62553CDD6130862CC25EB3BDC88ACA7091950D83B9ABE29E6E8CA40F9B87951C47816E41A86653856DE0DBAE536F745AB385523909C24D1B363EBBED59AF50F0CAA54EBB093F9CCA5560DB981726F518DDE18E56B9774710005E04561734023B9A0C844944CFD1A566DCDB1C43B3ADEA0046C44400D0BDE11E645A97B7E6CA97049698DAD263464C766584A3F1C0D8AD279F7CB2E4927309F91CF31DEFCB9E0252B42958512C6F1AA67AE5A89C094BC8C0EC7D308FE76A401A89C8A2B4B2800646094AB754ACCE379B1BD76F9E9B85E7BE08269C5B98DBB87EE309279CF08D6F7C436FBCD27EB0CED3B858298F745A71E8BB13E39BC2401B63D56A19633533BBBBD99A29955DD85B73CD9975B5ADCA8AE1F8C6693B4A5A71D2CE22229172DA610661D96FF3D6A7B63D6B296F7C684DAFE7F7A3796A719C1E463D3FE84919D225977CE2AAABAE82DCC882B1DAE816BDC2789DACFB24EFEDA372526841BE89916E2A60CEBA949C62A0F13344B3D9303C27FF5A2C73C405A5B11DA140A2FF06825DFC55EADCA5B2C5AC2213EC92D96A90420D5346D209A816280F7A5DAC7CA5421A70FD071A79E2A118B1CB1F29FBCF565EA4366D1CEFB4DA43D54A737E7EC3BAF553937BA092CB156FC7DEEEA15BD73EF3CCE4E878ADDF0B665AC1BAF1DA820F93DA23AAA299C9CD6E0F7BC3F6E384AC2C1224E4330CB862CAC0079572924B890289B32BE5311801CCF545175D2421DC3407C7A99C5C93812C9264B11E89A0536E3076C83181182C1097D21DB2E170EE482B4F5780D791853420857105D8DABFFAD5AF0859C2AE86AD4DC5265868AA13B1A8B80225ED24321A0F004381BA8D8A50F2D6521C2C251618799A1D826FA0BEB79792DF0992459C3F38BEA47691D1B056AA175746DD171715A7D5A42E5719B9187F6546809696D9037B3510A8CA5B2C9BF6287E15F0202D152A695C070ED9934F3EB975EB563C1EBE918E581C1FAA6D662EF811B816ADA877BCE31D7FFFF77F6F62F7D4520FD808112D49432E5FB1A25C8D8B2CCE205C915419C7642C5A499A072A1C979D3A4D305737E9E18C429468F96A6757B2B50C83441C556A8B6D6D52E970AAEC54535162093675C356AD59AB50DF291C97D0D69458F0891228E00A3C605D6BA47B1A279913BC2BCB07630EE0EE4D6A7C968A4AD5FADAB50BBBB661BE3DDBBDE0BCF3BE7BE79D4F6D7BA6D7EF2ACF2D248BADC018CB617F30ACE4534F3D15034819C87528B0792931A2A2D2BD1AF322580E148F3731FCF8123B65E7CE9D588D981D214B5F710AECBC6F20B90229578F3EFAE83FFCE10F2C3623713D751FC7961BE4852F7CE16F7FFBDB3487E0C94A56B9E92920479597024A7D298D27263B4C64A82C69EE295D119EE1B92C3633A79820CB0143013CC1ACB3DC776DF59BFEEACDDFFFE7EFAF9958373A32F6E8E38F978BD5C0CF7AD80D4DF4FA1DCD36EE306B05C15A8492EEF9A369E2AC5FBB65B8B151A5E585B96072CF7C46D301B5A46C3784E9E6B889EB59E4C94AFA50186DAFA052AB37DFDC6539ED5225E9FBBA914EB3B5C094E7AEC9DD439589FD366FF9FD638F14BDC40FBB9572A1D76F3A19BD6BA881BC56ADE1FECD09277DE31BFF8035B06662EDD4DE4988294C1F37A19833F2B22C0BC3AF975D76D925975CF2F297BFFC97BFFCA5D087F1B0238F3CF2A1871EA280C30733248873957332AF96D3DABC79337C9D5FFFFAD7CC474A85AE32E8D6CC558505FDC31FFE10129F29493357A1F21A27C9C941BA3DFBECB35C55E2F1D0A1A12E7FEB5BDFFAE52F7FD9CEBA0F41AE410E4E4EEEA17E354CAEECCA76D1F6ECC8EF158A5EE087D8C96547950AAE6F29CD728BD1F4354EBA5C525E51AFCB7E2B2E95B4868BA27872B2FB9AD71CF3D39FFEC275556168786A6A7EFF2D9B1FFB836E085169949BCD1E4EE9FBA4517C5819A4C419467A71DC2A95ACE1571A9B568564DF059160E70D925967C5099572DE030E38003FBCE10D6F200504E191B8178D0F9A4D62600948D2AC35E43032888DC3603C3DF3CC33D41FDC1A1C6D5370701E05C6A5724C96983826E05C12B7E6A4ABCC65E4AF2609178997F94814168251E22B8B4EA279272E292FC55C1A1D476E73E2A7A47AC70CDC71254BD20BDB6DC57A71C9AA4A7244202DA47931E7D7CE5B2242834AF5D14D37DDA4CBD572E7551ABD51DEF17B92104010E3A55EFBDAD7DE73CF3D3429E86C6110DEFBDEF742EEB318C684F098C89581DC213F7818F178F090FBEFBF3F8651588D643CF9545232BEBC1A4A2D0DE30FD837CB3FCBC3DA228B5466CC61A1E28E7865B1206D83BC569208899354427548B15AF7BB1BEC42CD81A19FCC05DA97B5331C4721FBD7C90095A9FED571955580A8D5ACD1319CE0B6154367B7E3CA64DC8570F1CBA5A7A6672636AD9D9A9C3EEEB85761A869A648359A89A463512CA912F154842262DC288E044920010CB5945941B60C7F60824336A619AC3569E984792331CAB56D83BD79C08121804BE5583CAE7CEC052C60953BE80CF45A793523E3344C03D356A04A66510FDB48A8A5E92AD1C4F4C7844CDE8C5DEB153E408568E734D37856E9E7C04D4B7B61C5704AF6D2D69A8935537BA7B35E205ACE8F8F69CA75DF8F182B4A1731F465D729C1B6EB0713D06BE3239B2BE5B12870BB9D248ED4BAB59B34583CEC5A76E415D258BF69374EB454F5D27218FAA5B263397EAB33A9EC56B19CFA416B628DAE1BC12D7430B9581E1E1E7FF9CB5EF9B37B7EBE6B7A279C9120ECD4EA5EA5EAEEDABDB35CD65B2849A389F1B1E9E979589DE572A5D36D572A90808BEE91D9138D461C313256565EC25C291E468A68618E41109F72CA295FFBDAD7384AE79E7BEE6DB7DD068F96B1657ACCFB08E9E3AFD8E46C8CCA48B2590047D34C7ACCA93C29A80CDF94CFC9B913DF5A0C70D9D8B24C1909A440A14CA4AB4435B0A28C106B7D6C627406FE77AA466B85D80F60B78F8D0D779B2D0FDF34EAD0BCDD1E8C2D6C3F77C3FAF5DBB76F6F36D5E84801B2E395AF3CEEDFFFFDDF61089787C7B6ED9AF9F2976FF8F8C597F8511CC449B3D53AE9A4B7FDFD77EF3CECF0C3619CEA028691E1858516CBE6131862DD6E054E6173C1815ECCDAC810404E5E43864FA5130BFD21FAA9429F49C4BFA08DE00F3DFDF4D35412694EFE971AADB64D2A22D3B8A67A63C4023A180B8F163DC3093987F9625F4BF1C66825F04B219DC089D85F583C525E8C5916ACC072054CC8719A37AE171DA6727E2EC6E82495F8A94F7DEA861B6E60645EF4A81468EDB7DF7EF8E1D5AF7EF58F7EF42381A799024E1965B5949EAC6B141764B57A71F12748C689E7840286158873B1CE31BF44774BB525DF9ABA8D6E34C58EC9F325CA4FDE977E3C874B308C1C1FD66B0A49169E9F7683D462328AE018CD30962B426E1CB16F60CDB05D121E5B948484B22594B50F2236D1A9ABC90173D2EDA50CE7F815EB99945E58302BDE48A2D6898ABD285D6B39C369BCD6F10A7158D1788CB46FEB7223BCBC975AAE16D13921A0D27D718A3A3BACA234F155DCCF1A003F6379B06A77063DFC5A19AE4FCFEBBCE17063687A7686F69C408899E6A0654FE5A4B2E802B532E10B666306E95BC0E52A8D81ADBC9052CACCD29CF8D66CF387C3D89B8B02D64C46A83C4E2970DAE50A98D16C012ACBB9EF7AD7BBEEBAEB2EB2B8ABBC464860DB6A29B1124501F6172CC577BFFBDD3831D34183A90473FF8A3CB70D1A2C468ED5E05799C8C0C638F6D863EFBEFB6ECC3A8B8B3928AB2DA04AA9DAED75D7AFDBE8F783D9F9F9EBAEFDC2D9E79C33D218996BCE95BC92EDA830802070CBA5BAA5701DACA183317123431B3CB7E6F754123BF5FAD0C1071FFA9FFFF99B76A75528C26BA946719FCCB4985C4717AFC5F080A3B833DFDCED87B396DD0F93EE61871DF8FB477F3F3A348C49DA35B9E70BD7DE78E5DF5DEBFB61BB19DE70E3B5679CF93E5BC7C5DB091CE05887F5533C889FD46A8D76BB5BD4EC719A309D2C98345E582FCBE95706844A70B99271E4349C79E699D75E7BAD448FD967D7CAFB998BF9B20F056C624A053B2A768032A02E92D820165778E4694C898F45852AC92D8A51AE48E99C351014354C7877C5E78424C4458E3FFE7FFCE8873FAC14ECF14623E876CA9EF7B727FCCD7DBFFCC5D38F3D592B798D4AB1DFD36DAF86471A41DFCF6A0F74739EC08F082AD65DAA6CB7D5E96E9BEB3CFFA0FD764DED2DD7EACFEE9AAA558B3B3BFEE8F8F8D4F474AA0159D576B7B318A0C3F44035EA9CB25EC4EF7CC7DBFFE55FFE85D84B49CF889210F382AF6319458103F072332E2474198C4A518830F623F97E293963BA4870F24C04C0A566F52D079CFFD23B1432350A203377C3199467607DAD6DB401353730F726AF430AB98F7FFCE35FF8C217B06889B3E3801C73CC31BFF9CD6F98BA86B038E18413E0EBB3AE495485AC2B1CCFBC14CB7CCF38E38C7FFCC77F64C8E4FCF3CFBFF4D24B694172259B0518A2FB97D78B13754273C4C434A81C7FBE8FE990426A5E4176905C849B912C40049AF2EE22F5B853A874E9A74AB64F0A90947AAEDE412D4542A93CC7CC0A13C902103177FAE9A77FF5AB5F65E5182EBE79F3662274E405CDF6AC6A69FF25B9F56AD93DCB2830B38D06031CF672D6C8048F2486B8A96C28A6E8CCF5FAF0634328BD21DB5E5328C0685A57AEC02D9DEC763C4BD7F8963227D8CAC3DFFDACEEC84D33AAE82CECACBBFF2AF5BB52B513F49B496C17BC524D1B4C97FECFCB3E73C567FEE20DAF86A7281D7EAC9C2FC88C12B31796084FC11C71EDF1B195913D954A138613E87DD2AAB60D0E2CC9FBA8BC0538C9851283A26700D3B05C010FCC85D85B8C0F49ED9308104A5AAE6759FC381827620F8A7D40F34EF85ED44AB69DB9CCE4984524FD40129BE621BC726C66D9390C10ADB6805C5B13F764DC0B56B55C8775522E55774FED76B361D5D7CF38581C0B3ACFCB48B20EC67A68D4D7468113F8A96EA290B5A09F9B9FEA741730BCAE67753A2DC840C7CE6AF693BE265C2DEAA446CF9F8D93B6E30519C0AAB366EDC4E4E4EE0C345BB52DE7A52F3DF6DFFFED27415A9A680C3B5E34B7B0C38F9AE3E3F5D9D92928065D9AD9872980C59ABA3AAF892B849913AC3346A41DE64C63343FFFF9CFC355C2B863E36164CF3AEBACEF7EF7BBC4368BC68281FFD4534F115C3E40D5C49F07ECF7818F007F448372F548F09356BCA4DCB81C29FD0776B844084DE098D911CC8C89A9BCA289D5B7C6A3AE1CE17075576F75CCCB5FF2ABFFF875A3E20E57CBFD66AB5A281E79D0965DDB9EEDCCF5466B6EBD5C8AFD5E92C6A552B1DBF6E1A6F22DE0E140EF7BAE46092C8471A952EE747BC36BD76CDB3915DACA0FD4F068652E726395CEC0F1D5CC2930C655B956AD946BD373F370D361665E74FE79FA8D6C45678BC3A2F21CBCE07EB91BB91368ED327FC6FA2B7ACFC48008798DB09BD106E798437B45461FD634A781A49AA1A460BC8466135D7029D116794109CEB20AFC2CE29BC6FE8B5FFCE2FBEEBB4F78ACCCFD69261139B93C9117A7A36F65C5C4D0AF18222CD40B2FBCF0EAABAFA6F2E063B0E101B730A3592A47F90A8F155F9CE320A15A0678F1573A948ED10512B7A689A956AE174FCC78AC32E28A036028316D4D1256B321318605BFB219331D77795A4E1C4795225B65187232CF3044611A0ACB55DD6A9251601CF4AEC4F5E7D50870950C1D51F7071F7CF0C30F3F2C17E115482EAD32625A79FDD56EFD4764B481E41275425B103FB0741E63482901E1D6ED77B4D51AC555CD87A5D664BAB64882E8EC9BA2B2DD5C01074E46B59F684A9D4859BE867459B1B27FA97471C2D0E8C8BC4E64D8C56269F386CDCF3CF5878DFB6F8433C6C21ED3AB23C51E660432FCF9CF7FFEBDF7DECBA2F6679E794626425C11E9152872493EB8322E75F9E5979F7BEEB9C4F1B1060F560E3949544EACB628979622F9FFA8072C7734D38222AE854346268256A0E875B37325B94BF7EEDD9B1AF4D7CB277160230F187C96B5BA6726114B0A0B21345879D5A4D6FEFBEDFFECB6ED70295F71ECFFF5B37BEFAD57865ADD56AD5C0BC2BEA59C2CBB6E433EDB56A952A92B7590E7564B85E185392875A75AA977BAAD30EA8D8EC10185EF5FC0CF5981F230FE343B3B57F4824CFD0441D80B238DC3B2EC008E72B33DB36EDD9AD9D9E962A930393D39541D8527DD6A7692B081BF2ABBAF5929C3D94E771EFAC00FB287CF9232FBEFB76572720A1387C78322BBE69A6BCE39E79C81221F13C72811E9030E38007F4AF2C69C2262A40F3364BD9947544BC97E0715DB524A7DDA5F9202112E3A610551463EDF5E89C388F7654619A6287C237C03A5056B5DCA51F00DA50975F3622FC84543C15BF1394B195AD9B355D15323B54AC5758356ABE83A33CD687D5DAD1F6E14146CA43EF6AFE366A425B12E12C8047A4C3104834CF754A8D626A716B61EB2E59E879EDE6F53BD50AD2D74BA937B17124B572505A92A948B3A6FA1D49FFDF90B8F7EC10B6FBDF57F3546469A5A7D6AAD502E159E78E20958A0785A080276081850AE226439EC821812176DF18D323D21DF987B52E269A698303110703A61E39B314931BFB2B47744D5CB500A951957146E8AEF71161FF56FFEE66FE0D0AB0C94A48C10C8720F985286C96321F6137C161E00EB931802DCE2031FF8C057BEF215769580E4A28C5046089A8B99341AA22FE9494BF9B8847679162E8527C7CF58485BB76E255B80B9206524657D126F952E65A2975547108300DD996C5339CEC50CF0A6592D19AD16D3DF55064C4C2D058E2923403280DD332396CB25A69DB3643337448DCE3DB2650B24C62406C7CA69CE548680C368DC7FFFFD82D1E54A60753EA3296201FFD1F8F3C001E25FD2F853B9E747DB112F889FC91C8EA1A63DDD6AF59CA2AB997122DF5656294A0F59BBA13B3D535591CEF52ABBA441CE96432108C7D7D1582F8C602F55DD24E9AA34B0756F86673D07A38FA34627D6CC4ECF28A8F372ADDFEBC62A3225CF6261B1E103E04B2CF85DBB76C91A960881EC14DB686B2FA91F59E7DC95A6AE91CD25F8184E2EE38E0CEF09D2909FD514F06A8A90F84D951B3AC213200B8F493A2C5A2650187FE6DB718A712401ADF20003CA740070B0F8BE038C4E82D8E41B56B4A475696BEF1B4430DC18C91272B8BAB57EDDC65D7BF68C8FACC96887EB7064B96471934E3BF0DCF2F0D0B8651D044DECDA8D76332D166A9A31A735B7B0306739BA22A85EAF4101E385A142C6C7D7ECD93D552DEB6DD6EECCB75AF341D8E9070B61D42A14E128EB2EA1B6A37B5742E2C3B59D999EEB04BDA1D27A658549DA0BA23978C0A3A3553FD0DE2FD470E04328975EF98AE37EF293BBC984DE6A2D66CE49C728FE0106977ED5D4D414859D1484F178AC00E247F011D63ACA203B671556CBC878972B609123DC4584C261C45865A496E251455598400651F64C93E0ACB56BD71E7EF8E177DF7DB7528B5E23F159244551465E4A2287BA72C3CA080A0C4C269BBAD43D5D70D96EFB876C5DDF999FB3FA3E5C95B1A1214883A14ACD0AC3EEEC8C15C68D7AB9E0664DDF624D3198F5D66D650C328BA89CC02A541AB5A9D9D942A331DD6E3D31D95B33E1A58E5B2F8ECCCD2F74822071DC855EBF1BEBE8CCD89A75381D82A05AAFF7DAADACE543028703DE1E0681429F996F9AD5925EE2EE95B48D388E26B7BBD97957E5863C55355D67717CC577A1678C73B1D4A99604C368E2C64DF426AE79C61967B0A5F140C5211E80502606DC84364FAD9203A666827370E59557B229EFF6ED1AC8063D81C9A56746618723191F234D1857729AB77512275256204D7BBA922CD860769C0AC00C200B89A6446296D58B2FE1105DEEF0ADF8E50077BA0CB232EA4A0960C916615BB01AFC12B7C36A3FE9A493BEFAD5AFE267229F9551C76FE6D74C81A8560A419BCDD5499EC368369F87B38079E70ACC2A29D632246319EC08842930B5618EC6BE4158A6AD209AC364AB15BCAECA699E843E3617024A373BD188E8B052AB571CE790CD074CEDDC6DB79ABA1F701C3B9A4132B6163778EA697F57FBBE5D2BEDA409846FA680959FDACAD50D94A07A6BF53AB6B35E45F5469C26144A625570B844DF086645DE94911BF14AB9410614B040B1AEBEFAEA0B2FBC50656963AC70AC07D629D04B619D1ED600FCE3AF7FFDEBBB77EF96343F0E300D1D33A46F2A60E1B01C38CC5C9F5235CA71A660C7A6BBF8E28BDFF5AE777DE94B5FA2D06099B295734298EC55CBD5FC8ABF5A96D1AF63E0416D833B57AADDD5EA390C9545B34786C73E7CC699975D71C5BA351BF64C4D95BC92EB408B40412EB6FDD2E15FBB50ADD693E48028F08ADE581A57CAA5E1ACF4A21527BE5750BD7EAB522906617766662FD41E64C7EEDD93D552EA7A7686EAEA164B769CF4A2A483C3C2085BC5EE76DBEDEE0274A9AEAB53B6CE3586F121876C7DF0A15F7BC5E8D477BDEDC69BAEC3338C8F8FC058692E7471D8E1CF3BE2F73A7084297183A09FF5CDAE12B9C3F5846DCC548795776065CB7AA20020FBA4D21C0F89618178621485DEAAA490499EB0DAC673F21657DC5734B5B8E1055DC996EF02E6E494735E046FC92538E06773E940111E77DC71BFFAD5AFF0CC4C3AE21B46264D44A2C97468FA07D4F75E1CAF5F33DCEBB4D64F8C4DEE982AC1E42A3943954AC149633F74C2B0645B233A13E5E83058AF9F71CDEB4ED4FD9E16FA8D8646BA2E2CF43E70D687BFF1AD6F3EB97B7EE3011347BFFCE5FFF5F8234FEFDA35BBD049421DF3EAA72A7654B13614286BBAD9C4738C4EAC9FCD304AE3E3631FFBD8C7AEBAF2B3C2E849CF52E5C14C163398FD80397AACCC91A42F552FE151E66216548E6C0A110AA9D13C9C2E3536FFC9279FCC46BCB83EFE959EA0A2D518B365080B6B896A0C53F6E94F7FFAEFFEEEEFCC06F2825D37EBBF4D89CC78232D27BE14E5084600EF2BF53F6C472324F59483B011A5052F3F54C9B4B0CD6E42B7DC72CB45175D8427C7080B00B3987DCC560A5CF6D62AF5E2FC990E8468651A07E6EB48C8876F8A87A4AD403F03F73AEBACB33EF7B9CF89A6C1434A387DE02331241A04D2A99A1C87036997E5D3BD5C444A4092FA9E65E2CA2876E0C70C840E445C04E3A396064EF6AD80ED9CEF565C1D3BE76997B56A3EF040066A60D9AB3C14C1D04BBD58D41B2C4E2CAD7D17BB16AAECDF34D3C171564FBCD82F09E77A050E298D36C8D8971DF3F29FFFEC5ED759529A6132A50B948F89039523FCA5BD15CD35060FD2A525D7023034E355BC85B944250D4C62483B272EB473D24A738DADA8D796D3BDF17B42BAA4EB94DC8EF03D996EEE1A81679BB967C693CCFD6BDA76AB4DBDA556094FA74B7BF890CF61F9643F371396965671925EFA3F2FBBF5D6AFEED8B1AB5CD268DEA2379275FC4D933463CE8C75C938766EA5FAFC6E3BA9963614DC51C7AE64A2B355AE7838727E7EBA562FC2A9DD3BBD07BB08026E6A726FADA20547ABD584B2C45F93B4EF076D1C9F69C7CAB61D4FD56BD5280E376ED8F4C81F1EB39433D6180AC25EAB375D2ED9E58ADDEECC427FC303D69493B1AE7FAFD786A08CF1D241D82F978B94E010555BB66C2173EC5FFDD55FDD73CF3DB829EB3E31020CF731DD2531678641B88C7805D9BDC2FFB26F6631330A2D6420BC38542FFEF4F297BFFCDFFEEDDFC8C124F13D331B646E72E9A2C33B52C552859B2EB5F867564E2CBAD85423B708F3D6DC8BDC78A5389D18AB763B9D6A117B25DEB27E83EAFB0B33D323C552E2878D4261AC5A5761BFB3B0502D15D7AD9DD8B16B27EB2C31DA7891F1F109726F156A23BBF74E568687DB51E83BF6933BA7A07147D78CCEB7BBE3136B7B71FCC4333B5A89728BAE9F5AD813BD76DFA3C91C06A572D9B652AA34EC8737BDE94DDFF9CE77705916D172C4A8CC187BA0D9C40932FBC88A84152F47F0D2E26DD0D0B68CBA64192802A127272785795138A5A52B19342EB3B38C583267C6C804E4F8134F3C814BE1CA871D76D8E38F3F6E565F7076560C41F3003A67787D2A48DEDAE4D4250F3359D24C3273113D8232357B65925B5BA486B8A47C7D9C4B458EBF7EF0831FFCE637BF49036279BD38038C643B11B949E72CCD29A84C5F99D46FCA804A304BC2C5094BF1BCF3CE3BFDF4D369F2724245F3116325FEF751471DF5BBDFFD0E6F87B3181BB09731F58B62131139A0833968DC35B0003EFAD18F329B6302E8ECBC971444137E1062F081EAC481D0F7400874F987D364FA85B6418F256F218067C93D3D0781CE3E2E7C9038AD60DB542B7BE767C7D6AD9DDE3BA9AB8D926C57B3BC184FE15A1A52E1DB9A7CD2CE60D1D8AB49AAD13A19262B59ECC46E25962A94601805C56A418516034E5457260F9444CBC59A1743843E2E93A95CBA62E6AABC9923F958E033ECDAB58BD92BCEB2EC5CD35BD87F7FDD5027C99B93322A29EA56B47BFA2783B04C14946C64D9805C1542558B9580DD8D9FA58184B5AC178E39AD66FC7879827FE50541B7CF0C3548225A8275CAC82A0DD5873520A2EF8F0C8DCE6963DFF6EC62B61376E1181CD0EDF4F3E5E266DDE337EDBFE9905A7562666FB7DD0A2B651DD269B51792D4AFD7AB69D6ECA854F6B23490CE70C441BBD7EB668D0543E8E66E0FA67DBDD787DB6113F798451A7BEF7FFFFB3F73ED67FEFCF017355B33EDEECC426B8F1FCCDB6EC83AB128A2FC756D4B1B0541E8178B90683D4D69192DE67D857A973245B613239C54BD82AAA08A252DA29469C9A4CA2A9405611AD7045BD11EC4150E3EF860F67626728AF6A0D45952B69A1056694143803EBF64104F588BC5AEB4F21A53562767FBD589E2A856ADB53A9A033C0803DBB1748313DD984883E53CD70EE1DA5A104985340E474B3AB51B8741C5B527EA8DBAE3C236C6BB0D15E04AA4C54461037971E25AB1CB12F88C4C00FAD28653AB2B0E9D48B30DD8DBA766C7D68FC212DE3E3BDDB7ADC6C438FEBA7B72B21929EC423FD6B0CBD8F17A613CD3EEE04F766989E2547429D2B458289AD2D3CA3F541B4CE325199BDDA1871E7AEFBDF7323E217AD7AC3B22E851A8FCD9450A7BECED6F7F3B143CA36749DE1FCCEC2DAFF28A5E167F6305D2FC92123571D6891822D4487495861CCECD917193E05ED205F0E1996A52B9D5CF0A4B2BC7634B418B10B0C8477C7DCE3B4F119AADD52258CC2992AA22C9E8A56890D1BC5079A188D9F55619590CCA5C6E07820CC4D4B3F2FA46FE49A88ECC0E1076DEE60B4742D742B1FDFEF7BF27FA5400FFB29BA492842333C03A27DCDAD4E27259E9F9B662545CE4AF2833BA44D89BA44DC87BA76A7187CB6635EBBFE3E98242379F641F8A76B5F137ED0391D418B4638E39E617BFF8C5809EE6BA357DE534EF4E2D8A5908A4A83F18FBE5221940A548A1296B2CEDBCE39E989866D444192DC884BD47D86DD95C047F1A1B1BE3FA372B7FB0AE5EFDEA57FFEC673F636A83DB21C369F6D29C168D096012A8897EA5D9CD19973032A7C3A4B7946540192ED4E24C0951148BCA14F7924547B2A2A47D137701E35E428C014B94814F73A8ED9C0651F019CBD52D2DCEC5F25F832BED8F1486B3188EFEB568628EA64C9B7E8D54C395AFBFFEC60F7EE843A3C3E3D0855188DB6059E82E3DB80B14B08E91AAD8D68D2A4B05EFCFD6AF3BA05C1C5D988BBA9DD073355E0383353A0EFF6F2608BB8EABFB1725C9620466B85E7C76F733A3755C2AE9FBED7AA302831EE3D2E9B65841444538D4D0B12CCD23ED04BD7EB3DD9D245C4B135BEA714CB385D2CE3080161C343FE895CB1EEC06681D4EA720874DFA2A2E7AB1A4B882CDECACAC48496FA8A57978CE0D09AE850A9167D14583997FF3CD37BFE0052FF8CFFFFC4F59FADC3052BFC14087CA303B827D37F1F103E937BE024BF8490029B679A9A00946600F57352B67BF522B371732F669DBCD546F80575D33363C33338F77A855BD35D562B7DD2ED86AA45E2F2451D2EED53D776268C4E9B53C6849CCA94A8A490AAB1A8A1A86B59B2960364A4A522BB69CD8D2C50EFD24ED2511546F5470FA2A6D86413F7BE0050C9BE3B67A7E3F56FDD80A2DBB1FC55EA1D48CFD014B96E2DEB51DB592A748316DF62F93CA6949B753F5D258917A7F5A39F8190AFBC1071F240A494818D8C6915E20573E77A94477CDA626040AD0DFE514489884220CBA192BF6E8A38F866540CA49116DE6871293AA4B9A21A606B7F0BEDD2929C7A295466CCB3E223104F8A89C2792DF0B6DAA30FE5846DF11B552A8CDCEF90807549D0CA332F0A52653AE8817DAF7D2C695D9169A1AB44EE40104D7433F29CD4BBDC55B5A11FC48327D315C0656516AF436561943351489C0B3890E3BF5D453EFBAEB2E7C8F65B36EDDBA471E79848871EE538AE63F41ED2E197F51C0A6B38E15F59297BCE43FFEE33F0855630023C989AC93A5DC4F2A8FA89108880876694D2D1C552AC34EABDC1265F04326828CE2347D04CC8FE5CD8090D9734C36148771C3860D700A0551214A8BFB8B4D11F02B8B94A4E8DCECA72B9C8C2AA7E630ABF0E9808A8BC92C89A0A5640989BF2115F65C48D2145C54BBE458696B26794B06FC55372C5F5ABD0253FE23D987A283D92EBA644C9A709F8A01972EA51917254238B3FCBBAA02C6750950A42620690306CEAC69618C11DF688D62EB8450DF0FCA45F8B26EA7E78F3446F570F889346311D3468F697AD0707D6DC6C2518802CFB117E9DA5FF492239F79E649E8CE62091E6A8F4D7270FDD9B91DEBC6D7EC9EDE393E3C92AAD02BD8BBA776564B3A468F81C64EE826DDF1DAF8747B7ABF35FBE1F89E3F1BC659DB064DA616E6AA90A36C8F8D4E5C78E145975C72311470D6B06131872D3E16F35B42982291C934475A32D1CB8207BA05DCC99229375335140A92B3E487E81289613265A8F24E2F429DCA064AE434E0B6A1ACA147AE71C54BC97B85F0687C7C1CD797C63EBCA9E44BE0EC562BD5F7BFFFFDD75E778D5E7C6902A3288BE468FFB25C2A56CA65BFD34EC26878A8562D57FEEFE38F7DF081FBA7F7ECA9178B35D7AE28CB8BD3B8DB9F287B85C4D2E50D49ECC1005799F6B555C1769595587A48D238C54F2E74B06EBB522CEF5D98EBDA6961B8DEB3D4EEB9D96E10962AE5DDBD7EB95AEBF861B136B473663E758B53BAE8C5694385E76B5A191A378D072181E952621DB6E11429E0E65DE8A984ACAC8007FB53328B54818C3AE248D8E9F7DC730F0D174ABA37BFF9CD77DE79A799915279534EA6EDE978C901AC9165B69EA968E2F504148A99C283E1E02D5BB63CFDF4D3C4D4E05E9FFEF4A7AFB8E20A764D10933C6FE1A5D42ADCC26A5956421C4D8AEC7DD7A34BFAD6649E92C4845ACA0E4DC925C36E2AB064297D9868053CCC5BDFFAD63BEEB8832433820C2786885B408C5A7ECCCA1395FBFA123FC7954935CCC61BF81E0613163C8EE7AE7CFBDBDFFEFDEF7F9F7E1B0EE0389C7DF6D9D75E7BADA49FCDE7E763534CD1E9A16B6B0A62899D9884621C67A861DC17B61413816621D67F4B010FAC6A13DD29F106A9ACB59622BACDF8275351C2B2427A1FB2145C74D1455FFAD297C87682D7B9F8E28B2FBBEC327911A95FE7BA95E8BA949F5939F75C94374D6794824EB630E0E2492EB9E4925B6FBDF5E4934FC698737207821FE67A96B73343F762FC89D3CF53680A5B79B71EEA7BE109661C9B24869CCDE585701234E6F1C71D77DC6B5EF39AB3CE3A8B015D485DECDF0B2EB8E0F2CB2F8758E09E15D94251BC75EB56AC317CF9F5AF7F1D26BE2444EC657DA0EDBC6D1D2FCE152529B3553D609A0C9FFCE427BFFCE52F63E831706C63275496F80652E99FFFF99FF528B87616E0B50B6E5977D172CB3052ABD57ABF870DE3727432411FF1093A9D35A5E250B938E6D9A396AAA489F695F553360AF3F3B37ED0763DCD4309E99DF5A50A36ACCD3A4FA9B0D369C789065E1D7CC8414F3FFD071DE6B4AC6657ABAEA1EAD0F070832194A999A7324C4F3751902654B118743B0BAFD5E1A0D76B8D56BB89D9DFBC79FDCE5D3BE1BEB314878F2A168D2860B3DC9B03CA582566E8FAEBAFC70EC1749E76DA69F8796063F0747CF39EF7BCE71FFEE11F309D1410101CC4AF4BA98C28630A2CBC88C814CC05D9F5082F64B776CA0EE2BC92AC7707841A2514FD5DFCE994534EC1F4E1013077B82937B36660986F8E8F8D4FCF4C8F8C6A368672B594B523C9CAECA02AE617EC8CAFAEE4A89146E3E0430E0C6676CD4ECF3869E26296FB6AF34879DDF070777E7EADE76168E0FB9692B4A8AC8A63153CC773E04447996CCBBA372A1BDA37B25CECADAEB2FA49D249A38EAD7CC78213DC0BA3308EFAB56AB71FC48ED7EA079D386DF6F1280E747337E72B564B69B7C5D15F31C183F77DF18B5F0C6908D941892F240912F314FE748C2D0D523228618258548073F12B4C7E469829ADDEF18E77E0B28F3DF61893BB92E8A265CD083F814BB8F2D5575FFDA10F7DE8139FF804142A0E78F7BBDF7DFBEDB7C38A278E89810D338B2CD96B91EC19EEA14570BEF9A6A9D1377E35854A1BD18CF4AAD59D665AD2388BBC6C1C2B3AA903D68F39CE964175A28C26E76A299C4D98F584F5D3A440974D27AC0B58C9DBB76F678842F4A234B4E064F1CAD8084CCBA93C08C15185758BE371114A3D3A4F705BBFF7BDEF6154E59481E0330D0E0A74FC7BD45147FDE637BFE16220B0885A84749534AD24E2853FC1B723A5DD3EAA1EFE144D6CFE6A8E305BECA559C91665F7F264B62453CC7307BA439A113521C5E3BF94F9182E1A8BD47C34FE2C03AA290818A2044C462A7AD29CA0AC084213C5E05F56751228233D0F787129341081692DC5AC5939BB0E771691861C1F01C9539CB270062AFFAAABAEC22E836376DE79E7DD74D34D4C29AABCAF115F8D92939966582190E42A2F40B50D220776DA664A48C2A25C6C18288C21DD2A8C2A5685694CD806F50A6E44DA4189594A247CE50D09ED02CF80B6B9CA6BDBCDED4A85F4DAD7BEF6C73FFEB1CA3175CF3BECF98F3CFA58C1AD36EAF0275A9572ADD96D432F66FAA0D30BB3464E4A13C9F603E8DD52C1192DB863565A0D032B8E123DE07654AB97FA7E2B0C7B43C3356CEA454BA7AF8760CFE4AECD9B362569F0B6B79D74C38DD7F3E1D9CB082382F7DDB479C3A38F3EAADDC7600F664D597E6A69B5AD07215BD8E3E318DF997A6DA8D56E4F8C8FF7FA9DD7BFFE2FEEF8F6774AC5C5601DEB344C108129E5655710149066FC098C5A6832EAAC4D9B0978113144B642AC6FFC60C6A952831A82213E2E65E24DF0EFA5975E0A092E5DA74C189E32F002B031CF39E71CF995F385DBE1187C0FA78A6D5C19AED18BAF58E9FBFD35136BA667F766A18B8CD5B25E85E459989BB72D552F176BC5928A42F8BF911F14FA2D0CE0DAB1EA48A96CF783F5438D896AAD3D3B5F5868B9A956C01565D76C0BFE71BD5C2E16DCCEF48C06586A47557BC0D0A6D0C189652FC4A92ABACD24DADBEFF66DCBAE94034C71B7D7AB963BBEDFF2C3726364D7EC8253AD4D37DB6D3FEAE5A4EA94E302BB904D3BA096C4646691C040AE4BC2F53852E73B464799D2136925F89D818F502C31EA20123FCD5AA6E3A9B0E1B1D5E9D4720A184F1354BCCABD10A1EDC587FC181924A225C0632B635AE629A420203A7A458FC1D48BA6ECA61C7CDDEB5EF7A31FFD48F0E1905692965EAEB059A605C3E5C1071FC43A84D768E28906702B821292C0AF3C98008EC4CA611C828E382B2921E320D720D118C9B4722A0F1C803184F079E8A1879CBC23160E60BB2AC292F16535FBC094649F44286CB613C6C571BABC2361EA2AF7E6715FFE89C39EE67556E2A9884E627F495AE4D4FDF40565EA1984A43367E5F50803B8E8FF73EDABF2602F79365887430743065998A4B8B525D2A3F22E3BE2AD4A593689DEB8A7685CAACCA7C43293D4AFC8792C666904C41A717C4F481A330854C034953EFFF9CF9F7DF6D9C40332F5438A2E9C0521C6623C78749069F886DD51E9A3DB46153E63212AEFFD2A190DCC3234EB35D75C43863209F84B6A83F13F1C898BDF78E38D1FF9C847C82E47252D2EBB50A8F25C7224E09A9FFDEC675901C5665C69D6388E44D66200B1BCC5A4A864A8808B7FA0E12693D35494B8E311471CF1C0030FE01BE2B725ADB9AA074C1B47CCA571A8AB5ECF8CBF2923F1E064AD87424D97E47A4E258C9335A31BB44F9CF9B57DBF07B3CCF5F0345196512F24F6B095965C7BB8E08CDBAA9E268524D64FD3EDB61B43B538E90761078B84D8E962A11CFA731A9C95EACDDCF7BBB39DE9934F78DB3DF7DCB3777A4F160977CB95A2D2C95188F17EABDF72ED4EC6E8D24BB51FAC15B06EA897EDB2A1212CB556A958260B87EBAA0D1BD74DEE99E182964A7F139C2C424A5C5B46EAA409CC00FEC22CE94973DE35D10D5C25D8CC6CC3CCEB0B444B0E930C2EC69FE8682C3238D9DFFEF6B7310B2637108514D73455382372245260F0934816DE427B5A7E448FA4E7EB4C861FF8C32343F3737A5156CA3035BDCE5CEBF4F7FDBFDFB9FDB6F985EE960D13636EB8776ABE64AB7543D58A4A2B892AA71636E5818D869D7565810D8209A8DA6EA5E0603E129D5126B0328DB299F0531BC3EA17CB7D2B6D27E1421CB654D2B3750D626229BF5EDBB9676F2F5298B09EA5AC52C52E1567E61666C34115BB18044BF71582962CA0B3B401ADA4C6E9254883642A3F6A5F8A1B6C3CAA67495B0A6E8EC92AB3F4501AFB30CBC5B02763158C7FC21EC2C310A8C5F8AD647C697E617249AA40120361A520FCFECB5FFEF289279E285E88893B5BEE30899266A08CA683F840FB08415391D04E975E17723BC1B8AADC91E262E32BCB97A2AA939C5E5E4247184F8C065CFF73CF3D17F68AA0A625F068E73D7D7118F605438E4CB5703488AFE6F24E73B436BE612F4813FF22891BFCFCBCE73DEF91471E51B91535E0E250BECB9697E8B169BA491291AF2384FB129D66568806AE3858FF3F14F08A3A5819E159E9D5219978DA165CF3E652574A0DC82E7924167AF07472CEE0C30509AF114344E01223738C1B138BC4320A711BE4318422D78C870BF489BB46BC1A16D31325C7788670FF0940C9EC4A209782BB8989BBE0820BBEFFFDEFC3CBA28424253BE12FF44A29B4E9DDD26CC253D1AB61D6499625C42F1639DE970D89B90285DF43195C2E621C8B8DC5C27AFE2C8D14B924041CC7E5C4B7C038C02279EAA9A7688E53C8D37A5B8558637898C137E20C3FF4A10F7DEB5BDF22ED08B3688CD8D042D7ED2074C0D3ABD746A6A7E75DA71C44F1706D1C7B737404B67CBBD569BA8E0DCD8ACDD8E968A4A855A8B84E15DAD7B5465D7B043FDB165C40278ED2F98569F8BEF54669EFDEDDD0B56C40313A547874DBA3076D3870A1A9DBDAAC5BB7E6C9279F8C92C075740545B1E46172BBDDCEF4FC54BD023FA36BB9BD2485EAED6B7A352BCEFC27162061945D38E87D1805FDAEE7398D46656676CEB117B3B0564EAD2E05E666964824A05408686FBEDFA7B4A5149031349D068CD581071EF8F4D34F4BB7794916F216B425A5621297C597D4EE5810DCF64EDE108621200A23AA07CCCE3BDFF94EA1D4606047D2390CE0B0828540472BA3A27BDE61CF7BF8510D37B51CE5F70378C00C44D74B05BF171CBC79C3B6EDBBD60E55866A75BB35E95AAA562C542C5B75FA9EAFD6D60AEBC746EB6154482D0F4A3D0CA186BD2472313896D5A0A2D4EDAF7437343F517E62E187AE570861F63AE9828AE6A3A01D45A16E0C6D6FEBF60F7BDE61FFF5C413E77DE292ABAEBFF175FFCF0937DD720B36FD4CB0B82D5385CB3E870E8DD315BA978B28A782140A78A9179436856A2989BFF8611C3D3AB5F8D317BFF8451C7CFEF9E74B88986B839B4A0224D896B8CBC73FFEF18B2FBE58C0CF02FE1274B45969C360262F2B9D03E46118321598C90095D200E8C954ABF203DDB54B2EB9E4739FFB9CCED1649202DE2DC9655714F1E239A9DC2196849F5A0A8761AE9A6E19D692B428E7B399F9022B67A237DD47B10CA862E9D299ECE5FC9805DCCA28791263971BEA6D6F7BDBBDF7DE8BA9C4405D71C515975F7E39A689E468ACEC4FF31E0CBA0D79E64B309829082FFE953F102949402F3B4A91085ADA75ABA5E4CFD2E9C19C917D941DFE773FDCCB69D61A8FEB4AE20AE9B2121A2A5406D213A3893D7D44AE0189F140C233F0C6EF45C7D0E25F5E554FB4844936679275338027992F3C362FC28010BB59E007F158E81DA639C3AB295D055EC7DDC175280D3C64851035695A18348028BA31B9B817BE240D9C986BD75E7BED79E79DC7F6A3A456A5FB2EAF49958773F1FC69569EF7FAD7BFFE8E3BEEE072A53E66B2CF0C6132FB4BB35B19C932B57AB9F6735B6CC5894F0DDE3E9A1E0C854B69016F802FF986BA902C1B8A62A11A06AA54ACA689D3A88F4CCFCE56CB550C66928661E4777A2D5B5923A3430BDD5EC1AB43FBAAB861A575E841D72DA589B571C301FFF5C8FD071EB0DF41076FF9AFFFBA7F7E6116B7C012E9B6A68686F4867FCB5FBFF90B377DA152287103144B2A4EA08D8A90873BA69E29DA5E3FE955BC8AB23B71E227690F0AD8CEDA16C7711A47ECB9BB303C343AAFB7108485B566CD68ABBDD06EF505EC201CE25C6A03A92F53885C7FFDF51FFEF0873101871F7EF8030F3CC075264B4AA24302B6246C4DD86BA97105E56FC2E52914485C65D6B062F3BFEE75AFFBE94F7F2AAC5B4CABD0796236E24D6F7AD35D77DD05298073B128F18329C7A178B66DDB662B073BEDECB3CFFED8272ED249B8542B15CC20FDE08AE778296CEA78E36863ACD178FC991D5B2B6A78A85CB46C2F0EC74B9561C755ED6ED0EA6EAED78AB655551A9605BF12D2085BC452E990CAB4A56E7B6685A9F253AB877BA46A328A2BC30DBFE04EF5DAB3A11F7A6E68A7DD7ED0F6BC8576BF13A9C69AE12776CED7C7EB4D3F9C6BF6DB4E563C40E63CCB16DE92307E0E6D2EB24FD248E688A9DCFCA7F5CA78145EF92D6F79CB9D77DE49035C4C166112E5FCB2A72F15B9E4BD784D5AA25293C6EDC7FD4970006519D53FBD4932CD3214411F0ECE196CF933CF3C139A5E6A66A4252D5F04070BB590190CB0F20A0D73CF9A4B94301C063F08B012D6C615F73B0EC31342B5D021C09726DBC0003486917C221504B445D37039529A1F7C4FE638E67AD2AC12DACA51C774FAE966A9CC808029032188256D560C0B5088FE8DE4953938224C3917AC57219534DD1A4A6D3C2AE6081767D055E4A354313103CA318482FFE637BF8997653E9E3AC3EC7FCC0F69444DA6B3FF13BD2BA773AE71EB37BCE10D0F3FFC3076AE00686D83B84394716AB01E9A7A5A360501222A2B391194328EA11DCF9CA309BF97634E3AE9248C0383BA5C512C3FB196E1C6A5164008C5B85099AF648D38A3505C24B2540418C5A765CC9CA60F871DD60316D89E3D7B2457C8D522380F0A5E29BB6243055E930637B71293414444B2BA015A0C9201736A8673181BC0EB40627045E15F3C8914B90DAC7093D7D68C0430DB8D31E122945E6D7A578A4D3190C59170071737A9E90413C1B1E6E5683A59196721EF68E1A64EB9546C14BC32EC1E5C157A2E4E8276BF0935FD82171CF5B297BDE45BB7DF9E44F097CA2AA9D969C3B5873CB7E238C582E3763A1AB39EB9ADF19E49C84AAFD3EF8C34CA70B37111585A85A2675B6CA9613B1EA627E8F5DB7005E33474B3808C8E3EF577BA1E663409A39E7E296B3107EC389ECA713ACC826095E075B66CC104EDFFDBDFFE96DE098698EB66C588900C97B5EC43E64E8CF8C1071F4CDE1C016111B6A68C9295E38F3F1E3A60C5EB53E2637D24595B4D06E2586047765F0EBEF873BC3593555400584F54D252DF06A981BF62C16925B47B57210B2231D4C16D16417A96BCA81F0E37EA69BFFFC5CF5F77C985E7CFCC775E74C4FE0BBB9EAD595EDC0CABAEDAB87EC8F603AFD9DB3C321ACECED54BC561AF887D003B109ABCE85A254C7F1C67E5FCD0134E68295F27036C38BB0B61D4F1AC3995B6556217CB49B1B4B7DBD9393F5F1CAD0451DC8DE36EAABAA9DD49550F06540C877A687A7EAE502A6E39F890877EF710DC604C7041DB2801653D551163A1928F111C8A69564BDE4E19BC866C1DCF20980CBE09D7920492F4B9A2161148A7E940B355DFFBDEF73EC2E5303B5C5D829EE5CC8A2BC629B38CE222FA37A4FB6138844D2AD5B28A7E79CED5D627931D6C846C65FC245213C963045142F097CAF320A6B56EFDB132C50101C4D329528E3AEAA8279E78828DD997AB25FE8CFB325B8FB9C3FA24A726212A9492A676E7F194FEB46328CD898EA6BE5199714C3C1D24F562942F83CBF2071EC6BEB0E4B8660121362C79EED29C1C918A8A35AC9C653EAACA6D74C1638B03CDE1E5DA9092A1812192F8B95962BB8FD4C08ADF4B958E543D88CF4D5A63866A08D69124B795F35D3B79E30D09E9338EFAAA57BDEA273FF98928216A20B2B54C4C4C4C4E4EF24D1954E39AC1A5BEF6B5AF7DF0831FC460EA9685C3C318A234AF811C78772BE7B5A6A7AE3227C4C410D04EA54C932BE021714768472B47E9337C2DD6B0D96145B42F0EC6015806E79C73CEF9E79F6F16BC397947262E36865EE476B4AE707D986B2CF95539990CDB523154C07827179BC970A9F256953483A84754EEF2D208167DBA643F0C6C2AB3C9B95410F118280F4EDBADB7DE0A71A305C12A0AB8D70DA318C61AC6C883131C84DD72B9343CD2986DFA49ECC4919BE9E0A2EB54E13AEB78C85C0B22AFD3D10228F023B241359B3072E79515D94E8CA1B36CCDFC4C53A0D599CEB0AC107381E3DA14017A209CF94E772149D95F2BEB3AAD98665892FB51397801B37FE8A1876EDFBE5DA213FB1640F22753FB72885878FEF6B7BFFDB6DB6E8352870CE2F19C24E1B35579B67F350137D0CE45AA564CC0C2006E16062C0105071C7000FC60A21ED8E50D23C3C4069EEAAD6F7D6BA952EEF77AD55AADD36E7B2C5F863D383CEC477EBFDDC3EA5671325474BD34DEB47E7CD78EBDE5441DB67978B4580CBA9DD8EF397E7CC4A675AF7DE92B1EF8DF3F850953F0A372125792142ABDEC5845CF1981A0B36CCD269B581090BD24EDA54E00BD9BAAA6AB5A8ED5776DAD800BA5661ACF87FE54B7090F144BAA9B58DDD412053CD94D6B956A37F44F7CFBC9B7FDD3EDFBEFB7E5F1C71EB373C6AE81A8E9400E4CE5812C95D9C8629652AC3059CBE96028891C64FCE6F2CB2FBFE28A2B703C0920B181AFBCF24AEC2B7179C90DC9EDB77CA638D44CB01149840B7EF2939F54995B29470A104332DC37DE78E3E9A79F2E0F2FDD9CA4F992D9F76D3545C8EF25FBEBE4FD85F88124857CA1D742EB591222785A8A6F526C4A93A215AFAF9666B994D14E9BE5EC2C6DE768C80619D856744F29D0AFBBEE3A8C33DD23332AC874A394FD38463743F1392882F93A661742692366196C8E645CE180734E21D00E3AE82098AD38DD940FDC685C63ACD8965024A584998917541ABD978122E38199924542716AAE8AE54266F9877166A80A36C7E5E9423B2A7B418A88245E22EE9644E9981CE16BC2C2800CB4F2C66B8CFA30A42F424C82A00CB130528D7F313ECF3CF3CC05175C70EDB5D7B2E30863F8F22203181A6A59B3DE442E8ECBE2009C2BE4FC1C259C7EDA69A7C1BAC534E1A6986E42AE04264637972EB8640A18DA347BD870F6257A8FD714CA233A2D6296A5594F6261DEA0E9865FF12F8E27163D35DAC0082841A48DE03739A4E2DFA73945D273D9A3246F044163393538336DA39903051FF1DCB2315653C0810F1BA717A54141FB701E74A7EEC21EC785F25A2CC83872C2401354B16A0207548BA3ED56B7D11871EC62E0A773B3AD7A7D388ED24A158FDE0BE3B6B27CAFA0E94B611CE3FDA162172372CAD6F41E929271663BBD56D6E7238610CE4C512E02CF2CCF32502D0985A9CA3B9CD3DAF853C014E626E1C660808576370501C368694E25A6721B761F962FEBE8B1C18831917672F81EC2E2E1871F4E734A109A96241396BD2D20ED012145A9D7ED75CBB0E0BADD0D199FF0FCDCDCBAF5EBF7ECDE5DAD55BAED6EC1B6610DF97D7FACEA4D8CD6DBCDF9B18233E416AC9EEFA9B85129B9815F8BD2FD87C74AED56DCF32193F61F1919AF54F07D12F8587A8D2829C01E72DC384D7A61D282E39BAA44B96DCF69AA78D68A7B3A310C5D9BF61CCB2FB833A17615BBB156D55D657512AB17C750C00B49B1E3F7E10107496A39B6DF0B5C4CB11EDB548C56BC2F594D301A12AA65088EEB5E657E0CC79FE15F9108F23323014ED6D159CA09644EA3A5AD6DE96A63303FFBD9CF7EE2139F307393425CC58D8D7FCF38E30CA85565F47E3685EF721C99E03B7030E60E77E4F1B27E78B0E910AFF881E52A21353E958833494CA89CDF40650173566D11D8C25C9A59986B7E4447DA598709957B8AD24A5D65716032499955B3036F0DCFE9AB5FFD2AC6841053B12C09FA8DF386D6B1D1E068205F232C9EAC691968052D3FF05D044EAF96A12C85564922A203C10938521B376E3CF7DC73CD087062306B9A9E9C64C4CD99E563080A441AE9A8FF66A441E56C013C5777B26936A5A70B2D3695199DA9D1D05ADE85FA55E53CE7B23C84CB9A2FC5861F587898231852E2F02D52E965B6AF6482A59689AA572495E9049BBE0AD3B42A3752B93C88B63BF3CC33B1245446372445B72A2F1B918010BF17C351421102CCB6F2F6A0924919E0DF3501835479F8F98D6F7CE3BFFEEBBFE20718DC3007C57C64A401373DF1C413BFF9CD6F32272D9241D246B27AB9FD6110C0A0A1BA158F9F01008EBF45B7CCACB06C641F28798A0F739F9B4B4D1637C55C5F7BD32B85A07BBA00085E7E9C68368C52A9502A6BA6BA6EA7CAD383B0EF0730A08242D12A14DD4E2BF1DCB26397CAA5C61B5F7FC2FFFEE92FB64F4EBEF088973CF6D803B57AD12B249DDEF442732A4A7BAE037F17DBC9B2350DB50D05BC08C18F21CB7B41B207B783BECF9E977CFA7AAE83A06F9AA5E24608EE94F24842FCFFDD5C8EB9D64D5C280596884BDC8E85A7AB09503EA1B85CD863975D76D9473FFA511A8F52A198E4E4A504EE3293C718A6084AE6CC88BD12421CCCD578E609293D821A5CDA84A01F1D9D9B992D788E95A4B0D636AF5F3BBF77328DD4E68D43F1C242C3B5ABA95D2F7923F5AAEAF5ED857643397F7DEC4BA777EDEAED9DA961BF6121418686AA58509B3181050F1386476AF5836618F5131B2B60260E1754DC293A21746AA4DA38A55C7247861EDDB3C74FA20E1570EA40314319F7A378AA974419BA20D2ADBBEC343787306FCC7C8B0E867F79D6596799797709CB1306291364763BC1DE8076FCC0073E806360D562842FBCF04296E1D3C13DF6D8637FF4A31FE116647F85D0C4F8D322C6A8DE70C30DEF79CF7B842200C348F65622F2B8A2B66EDDBA63C70E21625C9E3E343F7020AEB9E69A8B2EBAE8965B6E21E8468097A667CF0DBC0FEB90F2850046A9D4E466675EF9F39FFF3CEE8575B56BD72E525E306C2874D6C258B2E2F539ECA61FCC75CE5344E90E08A6E59B45DE88C7336FC261140F8932578AB9794D6E28696F251A1A7F124A32E84B084D2E78B13E45E3CAB97C60A941102D25969C84A3B0CCB8D170220BFFACBC9FB49463495190B5B41254E50429C71D77DC6B5FFB5A2C57AE1911F1FB9003CB3F1C04717059D296F5AAF165E191FC813037F35DACBC9B0B4317720B5E8D21105C0DD28923F6CA57BEF2E73FFFB9247A999A25FD2429B4241E6072434A6DB74C749AD77DD939C5A93824981D9553B0890A9736AFD44AD80E921BC5BAC51EA4397BD86187BDF39DEF84298CD7A7F72830756E492A38E9BC69FA9C9247E760D2EDC665E9FF70DF0DB07CBFE8452FBAFFFEFBB98404C829D525D4F78C19E3215FFDEA577FFBDBDFE60A940E3AA6F36D59CB22CFB8316BA579A818505C5E82D5E46623D453DB2630405652C0ADA69FA5A0F5E086910F959951C5DA6130A1F7AD8389ECF7FC6610B632B45462A9D29F1D75F46F7EF360AABCE1DADA85767FBFF55BB6EFDE5DB46CC785F7DCF193A66345A532BC81B8D7EF562BC3F095A17DD39477C7313E947A944EE121923482C6E5662B952A6962B5DA73E67E504B0B2831647835A9D397ACFE8AB263C51D92E6BD4B05C5C3FA7D729332C3C1F9A0AFBC8F1093A40A18ED17361622F2C56B61365156008BF0F0161239116382EB95E7AEDBA0FD5DE860BA14DC451A33DCEBE3816A70177CBFE6D9AE958C0E5542BF3B6CDB435EA16EBB25C72A3AAA9424C3CA99289447C35E67AEE9066A5DC5192E78A524AE148BA38DBADA3B5B2E164A8562A2D2AE1FB530738985ED3813064D2BE9953D28E09E1F433A46C582373AFC87F9B900EA1B8615DE5787A02DBC333CE05DDDA85AAE2CC05FC77876309E63F38BAD2FB47C217D31812104CD5A06F983329059700789A091DA2106A289EBA1301AF0D238A426B846606ED416B47B70EE17BEF085D34E3B4D0A2EC5434AB35A3EEA7EB35D01F3976A59F1AE9551AC602298C51728A69942A6F740D9644A93E50A52653E045D491CC96A1CC823FC4A3001AB7D18CD8280C3AAC06531500C42B29063DF4D44A8D1C587E39AA7394BEFCAE8333DB8714C81C344A38C8695376FA61F4661F7C217BEF035AF790DE4ACB4BE60029E83404C1C5D25161A89D3CFB016ED1E73DBCA8C30004EDD203687191E3311ECE2AEE176AC0C943026AF6C32779A0A585420716164B72668834B57FD773EB26C70EEAB5EF5AAC71F7FFC61DDDB4DD184C28345D162FE8E5D58B81D842ECACCB972354A513B2D1B29B9564B21452AE7E63CE8A083205ECC0A3D128711F94CCCA3E00FD452E4A02860EE97246FE420B4F9BC08251E17006F413830DF911E2DCC17320B711948B605B7806EC292268895F75D919E4C2CB081BEC5521F28F6DC00F7380E80EEC7B04B3CC6045B50EA6223CB2899A49BB21E2C593492BD50FF1F6B6F02264959A5FB7F91597B7575374BD3EC4B2320A22088023ACB1D44FFEAA0731144940157560165DF6407511490E5410404C56D80514747BC5E65B83A5E441904940101071045767AABBD2A33E3BE11BF8E774E452D3373FF371F1FCCCECA8CF8E25BCEFA9EF7CCCCFC47ECA5EBB4C0DF4768FE7C21E8D6749974694D9666750E4EA1988E7CD3E27D7753EEE9E4D4F0A47CA4B66CF0E9A98E7679B6C17A1B6DB6E9568F3CF2D8365BBFE2D1C71FDB7CF9560540B660811E9E9A1EED1F680E950533050AA97F436DA1AC606DD2146B081AD3E8C4C4C874A7386C9D7CAA5C511D9BDE762B6B15BB70DA1D7EAA6DB1AEF30F905767BF78F0F904504D8E4497DAD6B44BBF4DB8DA28794409EFCF278FBC22144548E29C79E699D85F866BD668A2B3D0B43CCA7A200312E8911F671D68BE60815E8428D97BEFBD7FF4A31F69757B8A9E65ADAE324FD025BFB3936FBCDE407F5F73726274F3C58BB3B10939AD52C0033DCD8166D7D054AB7B727A59A3D3DDC937E8ED5F560AECE991B5D954DEDB9D36D6B5BABB7A6928349D0FB7DBE379369D35D7B4DB6B537BB8A721D763F5E8C40BC313A359EA0C36A707FBE5EF8EB7724DCD586A8E750A0F78AAD55E359526B5879A0D29E3EEDE9EE9C9964E6DA760B1E975992F7C0B74B2CB663636B102B62BE6F6C0C0DC1C95D2BA501BB3D1461B3DFEF8E3F4A1824B96CC900F213464FAAF3CC833CE38C3219308B2039669636BA79D767AF2C927CDE69FE6C9E032D4934F3EF9B39FFDACC3D4B18F026A0F435B8FCCF3CEB97FCE3EFBECF3CE3B0FEBC121193F02E162EC098B57533FC6F6D20B1888911DDA4084C81DE800524D82C76BEA730A63C0BC680048520C17EC18829F31F64E9533B15C67F7A9E642EEA36E21ECD375F446CE8AD4031A1D0D842A9D3304353B374F2E50DF4753BA1529891E371B48331B1FD590AD685CE8DFB19B9B335B27FDE75F8891183097F3A0C7A43C46E3A427B419CDCC7E6CCBC0462A8A874DCE800DADD04E73F05677E414D070DA354BDACFFA508F13AB927831BCD96233AB6ADE20D0C6474F815E4A17D787CEDDBAF31267DCA45D45FB9F32DDE3AC472A713090D9EDB3CF3EFFFCCFFF3C1FC8C67A2DAB7AEAA4CABA0243C02383B127C9954ABFDF3CC1A87F379C704088E64EA02FB917B66C0A3AF4DF75B08F93B3EE11C09285C2CA39CD614C92054058F0428C8D8FB59364BAD4F6BAB45C7B7AA3428B77F5944163F9AC3A6CE3ADF6D478FB85D34E39FDEAABAF2AFBFBCA8B5F5A8CB2919E7D667CDBAD56ACBFC1E2175E78EEE9A7FF90A76CC9E2F5FAFB0627C79B25C346614C15DD091B5323632FAE59FB522BD7BCCBBED39C92FAEE481D0C0D2D5EB9EA791470391D335604892C35EC70EE02E8C4F95E7955FB083CCAA899C8E4EC942155AA735E07740317440CE987B49903D4AE4D8046EF54DCB091BF9A280A4E9249E30842A2B9172D1E624FB7A6A7FBFA0B40967ED5DBD7D71A9FE82985C2404FB7F4F0605FD7C8C8F4861B76F58CB6D6EBEDDE7870B0576B3735362097A2D9BB38353692426E4DF74CB6B4738BFF75F2A5837D8B0707B235C3DDCDAE9E223629F7388DCABBED34744AD64C4CADED4AE3BDDD533D5D13ED7C78BA3DDA48ADDEEE975A53938507DC1A2D405BD96819829621BD521B2765B2E2A476A66543A5666B1D715521E3A4422407D9DC9205B2544E3CF1C428F55C937AFAE9A7FFE0073FB8FFFEFB995E1AAA9367A57645136507170B06291309E5AD502FBAE8A273CE3947521830884B7E5395FE71DA126EB25D77DDF59E7BEEB109B500E8862434D299581FA7D2B946E405827B81088AC6E08A64FD70BBEDB67BED6B5F7BDB6DB711B74F81C30F81423A8381E18553A1315F8A24F63A244848AE84A746E29BA170B62EF77B54913B3F6A4AFFF22FFFF2FBDFFF3EDAC5ED6B38479E01E8997047B0BD1CEFE1645D72C925279C7002959340CC76D86187071F7CD0781F2ECB08C976A36E4DBB185505AB8645459E528361D181FFE0F3793209FBD70A5B71F8F041B10F5C2B855EF9AFCA19B75F03314EE1062A0DA34463D3DC62754577BC11A8E5DA551F170FC6C4E9044850CF24565D428916D1772EB8E002997AAED08329055A373DA0DB50DA1C6133101BC7D2C237005BAA0F4F3AE9A4B3CE3A8B3A7E169A8BA7AA3F52ECC54B3DB78627EB4A5B1D6FC4712C423E51358233B00F691B917146D6230C3B9F7A6E6D702E339F07D611D3DE69215C82A549DB7CF3CD1F7BEC3114A88DDA34B3136216BD3787E981FBF3862095466018370104B6EFBAC0FA3C0AB8F4BBD625530B27AC3DDD48C5D5BA9B9B17FAA2AB87BAA0E969E9E002C9BC68BDE9679E7F4A3FD6D70706BBD70EBF5C80615B9DAE7CF9B265CBFAFA0B22C0C989A9DEB2CE786C747CBD259B4B8FE80B05C5DDE2BE46D7E4CBAB9E7E71D5D33DDDADA9E90949BCBEBE9ED15109CDC62BB6DD7E8F3DF6FCC637BF5C4D816541F13F66460B20C12AF18AE8716FF3390F40FC67346510BE9189898C5D1EDA55E681A872CEEB033B279B7BECB1C75E7FFDF5263137801EB9D0A8BAC7DB9F33E03E55A92FB7A6877CA0EC16D538F8E083AFFDC217966DB4D18B25F06FF192256BD7ACE9A2584BABDC6C64EDCEE04073A0BFD9694F6DD4DDDFD36A2FEEEAEED57475A6869ACDF5B3EEDEC9E9A1AE5CD27730CF063AF9A2942FEEE9DB606860B0BF6FE5EF9F6A668DEEA2D56897ECC0F18E7470D26CCA091E6EE6C35DCD027BD54963791AC93BE38D7C6DEA940AB85DE09FB3C6589B10B47CE2AEA952E5CA00992EC229EB44B02C394EDA965B6EF9F4D34F6B3277DE7967FA393AB611DFFF7BDFCC00A422AE6BAB453AC9A48F70E2A4AAE85EB37DD04107DD7EFBEDFA5C329D1661E453A9B5B544B01310DB3698D235C2AF6A3BC7BF82994BEBC8656787D317F879549050A4E555D9220234818928B78D9B1E9A360B6FE3831FFCE017BFF8C55416947FEB5BDF9A6FFF2301A8BAE1D1648E3FFAE8A36CC5087BA981B066E3CEA88FE77941997218F55FAD02FE34FA92F24DD780452CF42B5EF10A0A605069FA8E3BEB112DFCF5AF7FDDA888CCE8B6446FDA39C97352A57D8111A0ECA90CB453456A89196018B083E9BDA3AF76776C1F733C630D5BFAAF83B062F3223253767075E50B2FBCF0DC73CF354649E6D7534F3D9555157A79C5609557257CCED31305A9D57063AB515040F52D77BFF6DA6B8F3BEE383A8349DDB285AC50CC74112B621D830529E65A26A78D0943128074512F0BA44374E8A1875E7CF1C5EC25B37C1082B287A3034B7A8E640AB2372A3F0BD8ACAA8CC78CCB03C936C628045BC86A02CBD8C7DA3386B86AC01205AE1A77EC9A6D831AF63E9C638F45B45ECC482132F8999EE4CFFEECCFEEBCF34EA29D731FF8DE81F189D1465121546CB6FE9E25D3539A82CDB01699F418C1EEE95AAEE95DB278D9E444AB4C514C7775672FBDF442B32B5B33BE72516FCFF0E40B8312FDF9F89FFDC5EEF7DEFBCB552B8B79EC2A7E2ACBA5A7BF6FB174EBD8D8D4E0C0626D8091E1228731353DD23F28D7EB9991D1559D348C6DCEC166CD28C0986FA383BBD19B3BEEB8639F7DF6490BC68538E18DD0A383199F0F357AC61967FC8FFFF13FEEBBEFBE5441AB48FF447C0A043A6C44BBAD38ACD4B06615BB9E633812526077F91AF6AF5BA0B82157540F15C54797BCBE8181FED1F1926DBF51ECB3BCD5EAE96D4E4D4CF736536FF12CEDC1AEB464703075DA43ED49C9C881AEC6D2BE9E7E19D163138D89A9CD37DAA8B966E5E2BE8125DDDDFD79A76B7AA2BBD36ECA5B6DA4FEA9C2266864BA6CA6A1686493A933DDEA8C647D53A93396151A77246F8F48B777DAB22986FB7BE48269DC239D6CAC938F68E15B854A1E9E4CDD5DDD93ADA99EDEBE89A9E2905040D5D55CC750289F89F244269048BB713AEDAACB2FF2919CA54B81B12075D2B0C1F521448C4042A405F120D1F1A4CA622F614B0DC3180DE1B1DBE15442AD29A97D3E87709D5B0231D7283932110DCEE33AC04B0E086131E77EB3DCA9A916BC0A470EB4430A3AD20ACD44C75C9B260B83BCCCC10B1445837CE73BDF89C28EFD5EA254B29A77B549AAE072AE5F88A1ECD92FC62C4124ABF48A2BAE905CFADFFFFB7FA7AA391B4E15E59B9C05D01838FD9E6A087358AC88B57430897BBDF6B5AF95D36CB0BDFEC408CD622D9BE3031FF880F410F74558937FC575A30934FCA3B49166CF385D6D14D57CA1DA051C80188AB794A73197A6E298638EB9FAEAAB5309BBB59286049BA3A1DFCA3F7BE28927F8ED65975DF6F9CF7F5E168C350A9FEB14E8B7D89A3604A122A164AB111A3C3018B7078E25CE5E74CDEAFDF7DF6F28BBAD1393D5FBF14D644D36DA31FC1462B9E851F66A4CC3E7558DA2011991E2021988829465F6C8238FA0F264C3FDF8C73F86D88EB3C9050D75367FA72BF70CB7B47FCC41237CCDF33EF0C003A9027F44BF2ECBFEA3F82A0933EA4A75C666D756C71D31D05F14B7F474F735B2EED67463F9F24DC746A7D8F1A5D0694705DCDFB771BB5524678786D65BBB66987C70892F7D6670B07F626A4D5F7FF6E2EAA7B57F962E1958BDE6E5A1C1E59C99EEAEDE62EA1A7D52C065EFBCDE258BD79B98982AA0CE696ACDD873FD7D9DD189D5FDFD89B5C7D4D2339B6A60CEE11B3AE8D0DC4E3BED4461FE7C072055241B2CCFC239B3ACA27245E8C7FECA3867266342FCC1FBE3B159F5461DE36DEA3D912A3F89F6477A967FFDD77FD50F673B5EBCFAFB7BC7272637DD6CB39756AE9E1A1F1FD472AF5D9DF2D4D795693A87FA7A1AA5425D6FE9D225EDC9028C2CBFA1BBA9F12D1B1CE8CF53B3D51E9C9A1CECEA5ADCD535D848FABC3B6F7715B190CED2AE9E76AB641F2B4FADF68196A795F2A99EA1E9948D65EDE1463E2ADF57DBB1E8D6D059D995E1018FE799B4CA58A731DA9A9E9C6E4FE5BD13D3933DDD3D537ACCBCD327F93851CAC77C461D02402A8E74843BE655C3512C9E6C26E5054754F37FCA29A79C75D6595E7A0B441DAAD34F3FFDD4534F85FF447318492AA28B1379DBA3BB692EA154B9BF56A251C23AF8C45D6A3BD3F10C873DC804035D9E73BF3566F64E704CF5924B2E39E79C735C86CEBD08B6FB743B489016B44129CC007AA3F1DC76DB6DFBEDB79FF7A7E3644C08C05AC968CBA9582980E63034BD96339EB9630B9DAAFFEA3A4EBF5965DA9E8037F1CA2BAFFCF8C73F8EB943AC38E2636B0B91059659C93D0DF288238EB8FDF6DB694263C3CBA0741ED0F8006266B6EA52A86B72C7682B89198528552D499A05CA5BE0D5A81AA71A189C571C58E0EDCD53C130AEBBEEBAE38F3F1E1962469A4F7EF2939FFBDCE7888DD98D364A08087D0C0FB857127D7949CFEBE2A00509DEC47D6502571F49CDC6473FFAD11B6FBC91EF702EA80024954B4AD819D3E8A367A12FBB4FB10DB5885AB0F71CC35D6681E54F3827FAC269A79D76EEB9E752BC6B379AC190B073B1A24D103074E4895389A0264C4D883E76F4C15D368CC35C1CC985D173AA0A2B18773DB25B3DAF519CE752A1D3ADE92CE9A2F2057B170DAE373D9577773799D03C590117B3363EDD3DD833B4786883DD76DDE3778F3D393DD5D1F34B10680EA5809FFED3931B6CB8F899E77EDF4E133D6553C266573E36516CEBEE060AB8A7A77B51A72D3DD1AF33507818DDE9A597FFB464BD9E763ED2EE4CF40F140E44E41F5858A000B220DEC5FEC6249FCDE1C98B4013CB09420AD1335F4E77CF3DF7BCFBEEBB5308E093CF302BA131B78E5BDABD66CCBAE376DB6DF7F0C30F3BE61C01756EB3E58D48408C0EB5B6C7D907650EA6A0705BBB76A4403615C7A0045FC83C4F9DC1FE81A2246968E08DAF7FC3BDBFB87B4A4E799E365BD4DD6EB5B6DC74E3D5CF3DBB6C403E5AF6AE7DDEFCCF77DC29DBBE37CBFAF53FB944D2BE9D02BDD56CA4F57B0BB5D19A6A35BB7B9A52C659A3D355CCE9F3C353D3593EDE48A38D3496F209A9E422FC9FBDD06969228ADADFAC7BBAD11CEBA4910217D01A6BA58D976F7CD249279D70F249438B86D68E0C036E24B6A3C73173270EA554E957BFFA5500BDA6644A33C9E8A3E2246E4198C4A210B182E6B3668D2CB8F18CA45043EF2A14EC00A3DF5D4E8612A27D96BEC9F9A4D85177E4A82331D91B944BC2BD8522E954CCC3FF99AEEF358875AAFC7EA0F50C83AA0F806C912D6B61831277D38E17D059574920F74900CF3E41A84CB37E7A81A23932DFB923F2145713778745A13538D021F0ED4CA926EA6FFEE66FBEF39DEF00F832F22E852041368B52518B456215E8286972E057AC91B784B5B20998640168244E5BA2C91C8E6606007BB2222E1CFA4FEA608FD3A203894472049703AD4C8219B143CA8080BF641D4A482EE0A38F3EEA508D1E61934D36D1339AEA4B8EB2FE290B55A69BEE22B5FD99CF7C06F493FEC9C83D154830772B7275867D5653AF58549211A78C8A3853AD9D627C53DB9059286E8E7F0503B1FBEEBBFFEC673F338302B82D1ECAF482FAC4208F54611AF408FAE48C33CE90FD6DDB8B5D9795D57D9A46AC5594AB435F9E0AA3320F3BECB0EBAFBF3E1A0ACE88B3E7EBF9181F30433F9C885AA02E76BD254B57AF59C5057A7B06FB7A87A48BFBFBD675CFE8E485074C2FA3AC51FAFED35943CA34EB79C58A9D9EFAFD33DD5D5212AD8D976F323A322D892D39BC64E9A24D365DF6D043BFD1F78787D7B4D3AA5681C1C9713B87162DEDEF1BD24F365C6FC56F9F7C68C3A1F5A53B4E3CF998934EFFD89E6FD8E517F7FCAC6C019001B1A1A6D019AF05040ADBC57C2808F139BF6F8F19B331557401F3CD0F425F3B4072471E832588437386219826148801B5C21AC98A152BFEFAAFFF5A46BD81D0A09064A13B5A58F37B78D9B18BEDD24AC955B24FAC59AB71A7ACF9F56F7EF3E0830ED204172A677CACDD9A7ECD2BB77FEC91C7D65F3CD4D5D5E8195F2B3F7874CDAA6D36DBE4F9DF3F7BE2911FFEF637BE363532B5F5FA4372F4FA34211A52BBD39375FA7A7B067A7B362B2354E323E38DACC8018F4E4DC8C16D76778DB40AF2E7F10C05DC91E697026EE7D9CB794BFE6EA980F585AEB14E3E3C393D3ED16A370BAB6EA0BFB4D92727B6D87C8B3F3EFDC73CC46648F8CDCEB6DA8B229E1C957154C059D5DC504FAD5590D074E3779F49034C3A55AB165BB2FE0487868C80E4DDADB7DE7AE08107FAB72860EC215CC654226977DC71C7C71E7B0CE4172B45D931F2112616968F682DC306F39955640273EEB70584780494E197CC261123569F6606B1E30B45A8E72D1096A59344501D5D82DE8D545C9C14DC2C4D0531F0349354204AD5050846381D1C1986E18251EA8E48C1C851D329062CA62F68AA7FF39BDF1850E302F1686A44051C593C53E56B42C728C97EF4D1475F7CF1C5C4AB703018862FC29CD0C8C1195FCA8DB8268BABEFBCE73DEFF9D6B7BED598D9D937FD472F2F1391DBD8F82BEE7CD8C130741C2A2031071C04E4398E4A010D29DB1E6CBFFDF652C99ABD48A2E2E66044508159115D774D5DBB6A6D9E2AB2745D1003142C3AE62391704E8D13E1AE2E033F5C3BA4B33137DE3031B7DA08DD9DA9A9431A50AF18A1CED2FAFA1A811FDD5D26FE0D37DC00F8D1F29FA98BAC61F18D934A8C047FC0FA3BB2FDC8C3BEE8A28B901876EBD76D7BC44D5EB5CC4B332B6A30AC905F0694CEB72324A64B30DEF0D0A2F58647C6B6DAFC15A32393139363E5166F95B0A722068307DC3FB0787878B45DC2B625C0BBD3C0D2C5CBA4532727082C148FF4EAD7EC74F7DD7795276DB8AB774C8A59BF2D3A1D35D2B20D37EAEF2F9B177564688FE669BA7FA0E78FCFFD6EF34D973DFDCCE34B96AC6B241CFD75D9A4BBECB28BACE03987CFE251B661B684C6FC5CD05A30D9560F3CF08023C9C8E5F99C128CE8189B8ABD1F40BA127E246C1225058D20F5A1B691AE038F2066EC5BDEF216C96B7755F2EA20F5F0E0818C72C67460B0C40707FB4BFC6727350A599035BBC7868707172F9E182DB2E9EF39E0DD7FF7B5AF4E4E4E2C19EC1F191DDF6883F5BAC7D60CF4F52C1D5AB476E54B679F74E217AFB8A2A7D5DA62934DA756BEDC93A581AC31D868CA2290EB2185BD74E9E2CED4C49AD5AB27C78BA8499E1AA363F2F4DBA9BB39DDE82B14709E8F661DFD571EF074D1D7285BDD4C53A5029E4E5D13A931DEEE0C4FC8036E4BDCCAF31E1CA8D83457AFD2FB2263D49A469A107BC0CB61FE756C346F8404D17C31099466C61B3945DA1BB263A41A9F7AEA293A8BF9B045843312CD0A38569E443CA4669B727EA252117C8E24029FAC5B935DA65D8C4433CCF23626D884B0D2B3736A06F19CFEA505F46CDDAC0F891FBA3DA24421BD5A2523FEF22FFFF2273FF9492A73DE301EA7FF081C54C3633ACD8C6622DF492EDCE7C8CD98F557D8FCD3CC36760B243E53459D88DE750215578620015F7341B6418BEBB8EFABD00569F55475F18B00375B60B2123478734D539C6DD02CB2D1500342502C137AD7D8171D5B33FEF380DAA27887FA9556444E794DF6FE6772C029F4EBB52D9242F121DEF0BEFBEEFBF39FFF5C43D59603E58ED3AC611F7CF0C172CE520918961568B0B476052549F800BA94062983C92D0849F01B42E597EEA861E8FB963936135D5043EF07E23DC042A99795A6B41F9FAAC0463B749B3650C99363CFC781932C505638106DB967767D8486B17E5A0B021BC8DE58F8402209F547FD313879E2ED3CA3A97598130799611AC64772843205AFBD7816E634E272E392A38108E3180F36E786D8666B1DDAA774DF0D3658EFE597D75C73F5F5C71C73FC861B6CA467900AD0EF52D6297AD8E48517ABF9ECEE19284DC2A523C3134B972C9F9E6A0CF62F7DE9A5D5CB976DA9679668D0CCEB01FEF4FCB31B6FB8714113B1E685C2D56CB447C756B73B9312F11A95266E787C7AC9C0D0C9A71CFFE9CF5CD4DB97E9AFB2387BFB64A68D337248C6B1103160E71CBFC18D3EBA9AE2134E38E1ECB3CF9EF3FBE6ADA477377279817202ADCD39E79C73D6596749EF6A3D76DB6DB7FBEEBB0F81AEF538F6D8636FBBED369D4FE4E9EEBBEF7EEFBDF76A00B0B032E7F2EDFEEAAFFEEA6B5FFB1A75022008DEF8C637EA74A5A0C53B15DD3106938EFA7BDFFBDE6BAFBD563F912E01275C39FA1BBEF8E24B5AEC829372721A9EC281DEC191E1611DBB5C3653475E636BC5365B3EF3C7A77B5A9D3D767BD5BDF73DBCFD16EBAF7A76E516CB162DEAEECAE4D569353B9DBEBCD19F35BAF38EB6C8E2C181A25DC40B7F989A6835720D6CA0A7A74F5250BA3E6B36D64EC9EBED48EF8EE605146B326FB7DA05BD959667AADD9A2890D269A29D8D4E7746A75B53AD3C2B5BE848344C416394647B2D7BF1A517F32A1B8408C03CE73DDE069C3850FD11C988E1298B3973627060882CE555EFC29A4034599215701EB805CCAE87AD804AE0D06AB77CFAD39F3EF1C4136984AE7D1BE114BA17CDE60CFB94D72B7578E38D37220528D3E761719EA01371FB81F95EB3E35B94AFC0D6E28251BA7AD0F2163925992249B4000E8BF029A1368D87B363A0EFAB5FFDEA471E7944BE9DEC5D7D53870EC1EA66415FF9CA57341B3063C4BAED08B159E0B922DABF111A86CA95DC7FFFFDA15839FFFCF3757E5315F841194732CB1A8395C5622D038DC5F3DFFFFB7FD709356288ED814F693BC0F5D69E6DB35C596DE425E11AF25A66904481032DB3D76E01051CF906CC744802D8DA88A7A01AC7B80400E454EFA48AE0DADFC76AF4B16297929E908A9292C66602AB984AA4B19600B71EFA260DE3B2CB2E3BEEB8E388C6A3A46BA94C5B78A6C7FF8BBFF88B5FFCE217F8BE79208A7266A736B13503259A9B9D8AE60C3B982C0F7F72DCDBA83AAD1DA94F7DD3ECAADA304583DD929C04030ECC0D91679BC2FA27A0335CA3ABAEBAEA90430ED1EDB0FE5D2A9DAAF6181E6723104A66A491F3992F6F71C776500C0BD5C51607BB4B6E4E315F59575FEFD092C5B22C8A62DC225297A61B45F8B8D5C90B48ACAED1D5DD3535D5921F363A3AD9D73BA86959B268A3D52323CD34B07CC3E53ADA83038B25C4A49E172D2AA6A335D59C6E8D678D297947532DED575D6A7A746274B06F5006DF4BAB5ED864F946139323AB56AFECE9818DB9C7F0D4F944527C69DFC801928B7CF7DD776B73D00E9360DA9CDF277C0F539593073642E7FC3E048744830F3DF4D0BDF7DEFBC31FFE308400248FB1C538B4663765DF344A22493F82F98DAD12A2A0E4AF464A83832070043D2F6BAF292ADE640D7988BD038B26C7C6D65FB6ECD8A33E71C185E7ADB764E9CB2B5F6AA47CBB6DB7F9B7C7FF6DFDF5969E79CC11675FF099159BACD7DFDD688D8E6CBAFED255CF3DBFE946CB7A3A536DB9B9ED34D8EC2AC4C074AB9915032ED2BE9D5C4BDDC8B3BC934D770A6267AD992CAFA92C4D669DB1948FE59DC9029B27059C0F17FF2D0A93265AF9682B9F98CE274A585D86D9D76A2FDB60433DC2E8C8F092C54BF4CFE1C975F588D81CC67B9377D08E970E903BFBF8E38FA7D2C8F56198FD22FBA053A779E36B9E55E06FF8A6A4F11AD52B55B80F04A5858B21AFB87AB8BFA90AD09173256AA7CF4173A089B3B226D2BD77B08C8912BB5403F16A5AD3052234763BE2278E436AFBDD72CB2DD8191AAA3ED4B0A5BABEF8C52FEAFD165B6C4107FBB4A0075CDB75E6F730EC99C8041039D30553EB05DEB011FA504505DC5EB06DA2550569483774C2AA709F985456A4E8B8E555119A5B35988A2E054A7607457816ED1969C79A0A741247B6ECEAF205A72C5D19F28ABD4B4F27C5F66FFFF66F7955AA2EFD2DE340EF756B8D41C750A3D5F5212C9481321B3497167CD54058EC167C56C83835CFF8AC46513178DBEE4C14F607D1386007FAB92C037D9318526CA57CF1C5175F74D1453848A98AE4A50A274809168B224FE3D4534F4D5538D72CD31057C932FBE10F7F8865C92348A30345C660B5DE75C076BE09E9546D8FD3CCD41BC109DE532B68260DF292E0C22C696D529864D025D1A9C2CA991B0EBFCE24ED9E07D752EB134D97EEAB152FBCC4F249D32C5064666D9C66F186B39F8C8EB38B3CDF446CB1F9C67FFCE3B3E5934BE8A745034B46C6A63658BAD1DAB5AB5B9DE93CB51BA990C7795A37295D3D32B2747D09A0C9462673B233D0B7646242F3DEBDA85F66F8A474F4B20D37999A6A6FB07E11FD587FC98AB5C32B9B5D53434B9A53AD3523A32B5BED427A4BA98F8F8F36BBB2A969CD6F87E05E39EC55B1CF86668A6CCD7C8238C6A952657F2C20B85D85C6FED029D27F23D75DED15C9EBC1586238732343E15951D9C885CF570630DDF3B953F5EAD20E0041A0F5D61D5D3AE2820ADB1CECEF3FFFF33FFFD9CF7E463756A80DCB104AFFF0F0E881071EF09DEF7EAF5C8E4243CB56EA6EF49756CB748FC4FDF4449624E9FA26C72696F5659B6EBCF18B2F3CD7D3C807BA9B69B4BDD5264B573DBF7AD30D06A7C6C69BEDCEFAB226BB7BF242024F35A437FB5ADD4D7D37155A37CFE4FCCA039E6EEB6FCD76964B648E67693CE5D34572A218D1CB053957A3A8186EE7A3539DB1E982FCB9931AEDD491206F4FB7245056AF5C25BBB4ABD19C989AE854063E51201470EC4AC44E3010B1568717D34B84EB415A01D281DDDEFE9F8DD9D80A26CDCAB31ADA83AB676EBC5895A1C53AE288232EB9E412AF14DF21D780EC935C8ECC652E19028499552C51D8E0F3455C6AA0159F7C6364CCAB60FA910895479B2E5056E7BBD454141977FD57CFBBEDB6DB3EF1C413B45FD4D7DC435317A76B6704003B7F69993BE71D99A55ACC3F969C19738B03C4236455B38D54B9E90415F3AA6146ED169856663241675B34C7642AFA46179183A82F3B37B4EFBEFBFEE8473F2241EE322DE293FAA68E61EC73C5E06B2ED0C22F1B4064CDC83B1A524EA8CF34DAD88284829C8A82854623BCF2CA2BE5B01A306C19885EB1691B1DFDBC6A2BE26080DBB2B912A9C6C2168B7660CEF2D6CAAA96BD1C10C8A752C8E9CEB64B6ADEB0FB56595BC30C4360D9386A70B5DAF0BBEFBEFBB7BFFDED549101D8088B7120A85DC05E20E78D7B8D9883545105A4AA801065CCADC98FF065E4091E91A124F3BA77B66D6BD3172D8B547963C5279916AC7F627C4AFBB9A7BB4FFFB77CA34D9E7FE1C566569EAE7CBABFAFB75DC04730F68BC8A4D64FAB4ED8C155AA5D5D3DCD46CFE454BEC9465B8E0C4F4F4DE44B976CA46D3CD8F3CAD1D13583438DB189957D03EDA9D6AAE9D688946E3B5FCB99773728DEC744425C2DCBDF766800890F1A231ED40E5A40D4D00D29446C583C6CA5F0145D4636F239DEAD76B37E25C7F7FAEBAF8F1C6959451393CF6CD542A3728C6E5BDF46D999AA7481AE35B5D08D19F8EC4841EA84ED4C6F031443E48C2D985D9B594F4F97D4F6D2A1816C7A7264E5CAC16663EBCD37CB5F7A6E6A74BAAF9936185AD49B6572510B0B6370607CCD70B3A7BB444EB51B5D59DFE0A25462025FD6115DB278E5DA61ED623DE4AA91D1E189CEFA1B0CBD383A225F7CB29D8FB7F295E372D47AE5316B37E5253449A2533EC437BFF94D73DB02B265C0BACBE1871F2E970E7621F81439F95AC7547600B4AD0D05779A590E3F5BE42DECF9491643F4C369744F08594EB015DE78E38D5A65F2466ECE4ABF36237490D4EDB28D5A5E714C4287892302F501EA04B6E4D7BDEE75BFFAD5AFCE3BEF3C2D19127381714239E7445A5EF5CE8283C27E8C35563EEBC5A5E0D56384A066169E1F6F5DF7E8753C56B77EEB5BDFFAE31FFF98B802CDEFE6BC0ECEB1CB3C7CE20C4C7198D42E20F13924267904C70CD22C860D0DE3A73FFD69A7EAE7161D9DF8F278AEB9E69AA38E3A0A0B8F234F99227FB51CF7C0B45175C069C24D57035C493991679E79260AECCD6F7E7341015B66C4B5C9B51C8E139811222E4434FB6A3C274809A496F91481311B65163B366A2DB4793A65477A22A8D4FE9A01C695DCA96414D717F409D5475601E054C0421375902A02430AFE0616AAAC2252045A65A00C2073A3996A3D286BC710A1E41A368C0373BE46BBC18F6C72923C7434E03B9A28DD4E97A2B78466039C23365C348CD8544E36A7C087836DA76F4AD7EAE79498823A0429A9D990BBEF5A357DAE2DF4C52F7ED154044580CD4A25C2103CDC4EE8B899AADA290C13CC7016A330F9FB8BF87357B33130A04D3076D9A5979F70E249BD3DBD9353D38527A36B4ABF34F4FC3810DA0DEB5C047A58DA502A6041A9B16CC38DF7FEABFFEF3BDFBE7D4ACB93FA36DC60A389D13E29D3C9A9910D371AFAFD9F1ED964F9FA438B7B1EFBDDA3D2A42EB864F679AF15027F64EBC61C9E29F041C6954B55B51F08678C2F80FB5E5A6B2F17F22261ED3153B71041F91C4BEC3B226F263B053D912AC4A03BE56106EA2E3864BA88769E8C2CF434952D589A4804971ECEA730CCEED4A99A84A3B96B444BA0066AB93104F7809E65516FDE6EA54E7BE960DF92FEDEAE56BBD1690F35F366E1DEB66470F67535FB9AC5648E8FB5375C5AF2D51535BE991CE03C6B760A047B9A6A74CB02945E7A79CD9A91C9BCD9DB5C6FD9068F3FF942EF0683ABD68C2E597FBD675F5CD56964EDAC393ED9EAD6FE999E628FB977824500658860A64CA0C139D7D6979E76BF3622C9B1260D4D4C4C18A16053C376F402F3F9F9CF7F9ECE4B6E8244BA97BC1126512C50915C83DF2755B5893534755E110412F64855ABB8BCEAC3A33FC17247E443F7D545BC7FE61C670A0E652390EF6B72F45B8C065318D65251D134995D20B74005546C4E67FBD5BDDEC0F99B3F6476BFFAD98F60F96B06442F19C211E3C6E1074B006497738A6966358BF42210C8489092E68A1C30001CE8D86C0387890198F2890015FF756FCA14A20B26F4678AB0339C5462FFA41288072623CD8A5B7A5DCC6EC89CEB8732A62FB8E082F7BCE73DB2EF4DE6A3BD071B52F49279A8D90DA79984E8806117F2435909184C2E3CCBABF6F0DA4EBBEEBAEB3BDEF18ECB2EBB8C47A6AC88F927A88041C6A9F4184CE79285066269162A9E23CF71E0C83B95EE08B06D2F6F061E369FD926D2756536E008F698BC48AB09CB8ACE383DBC67BF6C0EEA31A51375C18F7CE423D75D775DAA88658E3FFE784D850EBB11D16926AA8E616756458D8A20B453D146A6AA288A308BBEF99AD7BCE6AEBBEE8AA6A817B2DD996E3628C893F86EF4F56A2AC73A79A7D9E82EBFA0156D15FD7F5BDAB85AE0868E9E77A7996560A8E1540E2D5A9C72F90A93AD4EBBA8506D143D940606FBA6A6C69B5DB96EF5C637BEE1273FBD73647822E672E2FB54E565D9E568689766827727F6889F1479D49820C2926624AF51B71B0141900DF21D7DED6FFEE66FBEF7BDEF45CA3A5EB10A882D8E8189B5EE7E1A5B6FBDF58E3BEEF8939FFCC4BA99D30E6E93B580CF5D9316690DE6DC2804DC905954BBFA5EFAAD6E71F4D147CB5D239645AC296E5C9B7E3D05D95957C1F9D94E4B17752DE9ED6E8D8D4F8FA5C543597796D65FB478FD458B5AA3A3AB57AD1E1AEADF7CF3CD9F7FA68013E78DACABBB470A78AA5512B0F4144C59BF7B7ACD365BAE373C3E26AFAABB7F60CDE898B4ECAAE9EEB6D474A36B786CA2E8C1D429405B834383C323631FFDE847FFFEEFFF5E03E6984574438D19C661092A5039CFCE4DA6CAD0F12137638ED34856870B6885487DA799A4F634959A15FC05C340D11A4B89B2D11EC82B08A867D882559F1C71C411B291E5279D75D6595A20FD0AE19E57545F46FD2C0C8A8CA89FF8B93901C80E12AED4B67451662D15E53673A87F6CCDC81233FBBE3C324C498833C37FA216F732CD37D584EF7C78233605B5873C25E76A7154739A6B8F5F83EAF06554608CF9C5C7895347E4DF42267626C64034101A905AE4F49774968C3665874FAEB7B4692BDA552BF114E2E129240E6BEBAE7BE9B2D2466476755917A1BAAA273E057E88AFE01832710E5835F06BE9815153CC4654E9CD0E3BECF0F8E38FA3F3E22A58D6194EE1008CCF02E1717BE756C3B35781F58A077FABADB63AE8A083BEFEF5AF533864EBC17117B05DF19479D1632215939D6813BCA42C3AAB832115337AF64BE38DCCA1C49177224C6F749CAFBAEA2A0083FAE791471E099526D65B61A4DA48C427C8AA2691760862CD130140BE89EE7187358DAD74143BE53F8B29EEE9EE2BF74A9A9A9E2A888B52A7DCEE9D5864EDF68D7A78BD4701F0F0D5AA37A469CAF846D127FC99679EEBEBEB613A5872B9B88D992D4752055143EC1AA4CA8BEDE8B23CDDDA4514F7DD77DF6EBBEDE6D405A65FAB7AA55225B3D87959E5FDF4D34F4781429C0134C409279CF099CF7C469F48526BC349213DF9E4937803A6968DC95AC8C75945ADBACE00F35CF4501C18D0B600AD1AE98A6A5A673E41C695110A3630B7D9661BF9D3A6E764DACD39373BA15258D945FBBFA209E0D060B70EF7D4D8D4D2819E6DB7DAFA89DF3DB664D1903C8EB1B5938B7AD2261B2FD3659F7E6ECD661B36E80F29DF576F3A79D6C94AB3BD6FE8A597562ED960BD3F3DBF6ACB155B3CF1873FAE1A4BEB2FE97976BCC8A33FFBDCB37DBD7D1393138D2C75F51685CE7DFD831C033DBB5927B3D08DDC92913043AC3C495526468B026A3DB2A1217CB38A41D74E8619B2E69C4FC2DAF0ADEB6A5B6EB9E55BDFFA566D06F9C4A4D068958135E38E349A64CE363E440C3CA49939697BCC4402BD409C172287045D16566048BA46D523C15E145E02DD4FF520DAB1B527AD5DF0D24B2FD5667EF5AB5FFDAFFFFAAF009E41472F1021D0B1D21B734E5169CADE860DD4FC500BD4D9D7E2C679D51E1B601A0AD8A1457BDB6916BF553EB388255E10B39BCC9AEB3BE7CB35424F68AA00104C55D06E1D9B15B940007450C45022C15444922CD74469E7E8AFE456D179E8AD7FF8877F38F0C003ED2CCE56C078113192C715E0FEC4D6D127844C30136BD17E6BFDDD77DFFD9E7BEEC17D2BF0100000E1BD494441542E2771065D01D577DC4E7345372453A8220FF7DE7BEFBBEFBE1BB9A70FA9BD36AB0C48A53433BC1AA3E2ACA9F947E7EB9E942A3235679AF509D1C154D51145866D8A9A2CC73A55BB435633E2FE624E2A4EA6C56C0CA2B87F83199052552BAC7F9AA1451F7EFAD39FFED8C73E8606D142B8F4068D634467C645232B77A36AA41C63FD9121DD23E68477AA76DF55B36B4D59A1B0C11DA0897529B854F4570AE62842C746C30F6676A47A2597748B55ABD65C73CDD5279CF88972FA24AAB4BDB4DE65B7D112B6A22B4F4C90F59C5B010325B7C0ED842E8A5A276D470AE3F41432E21E7EF8E138FB1A92A6D5F40898510639774AE23747BC359B3A2A7222D1EE8818FD577ECC15575CA12DA2BBC01B600FDB8CB8CE55C4B2969A66C5C3D6145D7EF9E5175C7081E6CD9C004EB72C2010B3AAB37AAADAE4E9BFAF7AD5ABEEBFFF7E93C44A2B68076BC75C7DF5D5AC57A447E09F8BFABAC727CAB64E033D5D52C61353DB6FBDF59BF6DAF3CEDB7F985AEDA1FEFE25FDFD5363A32B57BEA43DB77CE38D56BEF4C70234D8C9476544E725B8B135BD66B83DD6497BECB5EB1D77DDBF7CC38176D678FEC591ADB7DD5C771F6994E0D5F65419145DD5DDD540CDB4DA05FE80E242824EB55CB8178E64812607E60ACD8F3ED73789116176ECBCF3CE7AAE071E78E00F7FF803A83414A49F37550180F9CA6FF89A3BCE6241A351ACD8CCD7ADE9D596A6BD2E9A4093FCD5AF7E1543673EC549340C09EBA0BA250276DE7F8892250080390231859732F6C1A59384E36F35A9A7D799679E79C30D37BCEB5DEFD2B06DC691339BF3BE189DA96AE745D620667910942E829FEF414C7091027562A36A4DE8C03882D575DED9CC1A0F7F27556E6E4CAF98CBC57E1BD31513C08E225848D2E0DD0D5F3B552B40BDA7F88AC2D6C1F24535AD4433F04C6D575263FA93375E2A03D4844950B7DAE7EC581440ED307A1332399A676DF8584D0E7004AEC4148A6ADCF69801180882CDEDC236002B6F7FFBDB7FF4A31FA14D63B4C39B872BC8E6909E267209020E618E2F67608A39120CA979FDEB5F2FA9EB32933C941ECDA980795E0D86041F66A50B73B7DE7AEBD7BDEE75B7DF7EBBA3FA0EE3D5FC57FCFB48BD6E0E7FCC14CA3E990AAA9FE315B82633EF18B81D391D769B022C9C870DB6C3E4625949CAE402F47553E01BC48003720AB884DB23BFED6D6FBBF3CE3B8F3DF6586905FD095B490F58F5349C519CA0BB22B000F8107175C20C128057BEF2950F3EF860750CBA4A18F7AAAC21EB66E961871D76F9E59715CDEA3A8503F1ECB3CF1728CA66CFD0D0E2027698A6E2A6AC613E39B120001D31883DBAC9C36BC36990575E79A59E2856975BCEA6D2F165B5B4D27BEDB5D737BFF94D04CDB5D75E7BCC31C77074ADA48973BAD12621BE7C66E586B36E8693705AB06F0892A7D2429799ACAF69B1312C6A3D46D885F3454DC92CB8FB0DC1222D99361673627D06B4275655FAFC1766534F5769EC6BC7A4EE666AB6D2064B966CBDF9668F3FF4485F4F5767AA95F2CEFA8383CB37DA70727AE2B9E79E5FD297160D0EB5533E3236DAD5D3B778E992A9E9B62673A2BB6B64B8B5E9E6CB5A297BE6B917F4F093EDBCE0A25CB4448B42C5616F6F77C9722CF12DD3A120D678FFFBDF0FB37C2A0324E496BCD19979866D0C0B08037C657D8DEE757CC26C9B5866CE10F4021E1E0ADE01318957AD08082CDD1A7DC651C766BDE9A69B3EF4A10F69D7716B1FC248DC93074E2E933F532EC9ED5826AD35810AE3E7171827AE188513AED66857AD1B35066D602BADF960681007D20A97D92664B7C07DF55F69EB430E394463D662E911E07FD060F444147BD0FE7D010F9E79D65FA503B8DD9BDEF4A67DF7DDF7C20B2F7404885D4DB8C2AE6D14E82C684C4B71E8B0749D02B33D5D03C4441C964F905EF22E28D3825EBF59360625D7837D0F3EC305AF1217F7DE7B2F6B6149C2860411F2EE77BFFB0B5FF842B403F085DC8D270FA538C6D3696E5994A81A61BD666792A5629F60766B0EAFBAEA2A4954492D3FF5C73FFE71B98C279C7002210A660C3963166BB04E464ABBE09BE30666050382F8258371BC1DB704EFC5D1B5146A49BC8EF385A001C6E27EA4D05D06D99E02B44236C12EBBEC72C71D7770232723B0095EF18A57485B91D28E7907EC2479D5BFFCE52F63A839C2F2D18FEB3031155B6D56B2F43BA2B3FDF6DB3FF4D04331FDE4102333833B2A65BA4E1347C59E2A6FCF09336C165D5757C1E6A5F7A71B0360A54AD668BA3194B473E4B5CA5B5D3B3CB278F1C0DA35635B6EB9F99FFDD99FFDE217F7682F923990C12275A25D22E544AB005970E6CBB5916BA2356214FCD34A9108B365474D0DBB65A3A962B57E50C1E9D6C8380C13EF2A6F1A0C284367596F2814CCB623EFF6ECB3CF269EC06CB84A218586B2F83A5FFAD2973EF2918FB0038859C54E993EF0A804E37A20DF262AC50F19B64E8B66F2F8E38FD718F6DE7BEF1FFEF0870B83629807C45024634B55188A297502C2AA5D93CCC62A5457D12DB8A7DCD0ED2EEDCF76D11750C35DBEC1FA5393E3FDDD5D4B0616E9CDEA975737BA25DFD7EF0CAF6C16C2AE21F5DA3FB86868C9E289228CBC7AFD4D36DB73CF3DAFBDF1EB977FF6E24F9E73EEA2A5EBBDF8C24BFACE58BBF38A6D573CFEFB270B620F29733A3C77754D4F163EB1F7B19BD035AA8EE27166524501A66535C3805B20B4AB8EADAC2FA854AE5603612D10D23756D369369F1ADB7C98C68E5E6277C26B86334752A32652EDA1F2A4368C8C7425E9B8D34E3B11B0C1885C40813566316E223B6A8020C91DD9079FF9CC67E6BB0E4428A67135C873BEEF23949D044D8199447ECF4F7EF2133618EC020B84A04D9741F13A621AC0BF315C298473B380198EFF8C5961205A9C08F68CA1DD11FF1155AF3F2157AAF7BBEDB69B9680343F07C7BD712C0DE49948A5E58176430FA2E3A6EFF308185B10C84867E8737335A7121762D59B87D29ABC625436864BB611EE3558DCA38F3EFA9A6BAED1871A06EDAD305FC063EB8E5A44495D4AB10980BB9CDA0E89B73A6E430C20A70AFCEC6E25141D3402BF26E22592DEA38071DE382C72BA6473B8D1C56C54410D84C51B762F617059B77442C42EA40ADCA15C2729AC05B8889E5D5F63B953204BE0BD54E39FFEF4279E94C09B513B359B0C9C39481AAD9DF692161181A3D77EFBED27B1CC6EF10620DE76E8A1877EE52B5FD1CCCBEE39EDB4D3D6B1FC334D5657B13D4016CA9022F38B0404163D84F580C22727C75BAD4E510ADC9681B668F5EA919E927063EBADE525FF017BA1746E74DF0E116C302C0082AA32BE29D40F8252123F4B599EA6D7456E7B1B9B6FBED9134FFC510273E9D2C1552BC7E654C006EBB30F9862C4F7B9E58B82CB934E3AE9739FFB9CE6E8C0030FD4C675AC80B6E460CA8D6220AA46188A3A5D22EDFAAFBEA30DC197654695E1F72E72AE86B65A6619BC8A14B061E8B899DBA81D7CF0C15FFBDAD7F2B252029E610259BA1AEDB25385DC4EF3BCCC548001D1A8E8F7B8916F9D952CBE663C465451ACA20FE1EE2896B5C035A7DE9EEE9E46B3276B2EEA1FF8D3EA17A5307B9B69B0B768FEDBEEB4B26671AFA1BC48F64FB5F26677A37F70A8D95D142AAC5E33DE9A9297DFD7D5DDFBF2EA357DFD83A3E38569ADEB4C76A62EB9E492633F7EC2B2E5CB9E7BFE457D7FBD22B5B3AA591055E66E604279BBE11EA825C35210D9FA9AEE75E491475E76D96558CDF03A91FEB0F9982A746504FDFAF3F9A6946502970044007D0FA824521AC1F2E8F3A9EFD321AE965F4C33338E48736292AE5E23C9CD22CA2F7CFCF1C7237BF39CE3ACB512C1FC6A578D75F38AF2C9711D8BD79A2B6C66893CB450C4A39DF3BE902CFA9F923272B69C2900B3E3468A31EF335B01FBC80057D108F5EC24ADD9C6766A3B81867DB634706BF7541156933376B08A13112721AE8853CB0C3B7A2366BF324697F41320125BF69A2E7D689E61FA356199B9BE8B4D6ECC546CF164ED9B55658A761FDDBA27C2DC52C5666AA6017C24DBAFA9CA6AA35D70D3DD409354A0BE0F63B94D0AFC60C6C3CCC741FA8553DBA978AF5C10886D813DC45D28E2689464A5FCB6D6373A2E84E1B41C0472CF3584B94C10DD8EBE4CF6716376C92FAC70F60C2D49F024EDEF36673588F4CB7022B47B0A1DEAB6DD765BB9D7C015991FF45D210F4B6A0E208A24D4C8356450C3B3845224BBEEBAAB1E0C4FCE530F2D1465BBB19F57EDE5AE3BC6BC39FAE13658EC781C59AD874C03F3EBEAE2BBEFBEBB0670D5555721DD9CDA7174423B43FFFCC0073E70E38D37D2053A55AE3DDA85BBBB3450F3223FF5939FFCE41E7BECF18B5FFC82ADECFEA0AC9C1B3D693AF4E0945739C682818C0675ECAB0670778CCB0E592CBD90C3BAD75E7B7DFDEB5F8FE64BAA42A0EC66CE30FB0F2BE4FCF3CF3FF5D4536FBDF5D6F7BCE73D146F68E68DBB89E42F0CC36081B86BED51D147CF414B864DF44CFF8589904C33EE85ED000656447E3A25D9597FD18B97FF76951E64D69ADA76C5564F3CF1946EBCFD762BDEFFFEF76B0EF5B0CDC971E06CC313EDA543BD6B86270706BA245BFA4BA8F0EA35239C89458B07D6F193347B3990C8884F7DEA53A79F7E3A2922A7039DC063F73BD9533B33FAE4CC33CF945D053692BEDC8EAFA4D0A40C2A5A176CA01E107F0888D84116F1C43767A7EAD3CC3A4B99776F7EF39BBFFBDDEF9293D3E35C78E185A05ED1A94EF0A31B6296B459F51C8C8AA4394F7FDC9A93C48736AAAC517864F49691C37A2F97542AE17FFECFFFE9048D73A8F6BC1B552B62227EC4815C2BE598ADE704A9AA89DD669B6D50B79A344E9C233DDC6B3EF737556031DB079E8DB3CE3A4BBB4B066E5E91213BB3607046166A0EDD1062BBEDB68387152024C542A807835A5C2C10718E6E399C667AC69EF65499B97A5ED9F40EB4A05951EDB8137AA8F7BEF7BD7280B41CB82E3A9B1ADEFEFBEFFF8D6F7C0375CECC5F77DD75871F7EB8B933AD30781CA23BBDE54B13AB1DAED99654944F89D4226A98AACC77744B8E3BEE380D00F62E5D9F64BCB1F15821EC7947951A815B26722312D1A12888738AB3EB243D33198D21D7E6DA6C9AAD20C91F71BAF5279DCA279E78C27A84A7C07D02844109B231408628B3E7C146716C0989E7815C997DE523DCA8C8CCE3B18A7D77F0B87C46D80F5E5F0DE6B0C30E2359E6426AE4AA6EE4A49584A4961BD3276310B8C95989CAA3218C3B0760A699FA188371F68B55C1508D46A5C7AADBE3B1996C2C82F8F9AFAEA01BC9522361C6A13534D107E335AF79CD830F3E085F0926A131B10E0C3A28AF65404F5B2BA36E63CF13C4AB0B039C99F0E16F04BEB754C11F5CE28D70749D09A3C2E28BC5A07E5E365694B93557800BFA2CB11046FDCDA980A35C70A8242F7B2C12B13FE4904374AA7565F985F24BF8EB45175D24BF13FE714E3862C8342E06BA0F0C16C417BA7A4F05E590F89426CE5AE353D39DA145FDC323E34B160FDABE5EAFB777F5C8787757319913539323637A70CD5B3AF3EC4F9E7BDE859B6CBCEC831FF9F0E5975F3E3A3EB5C51645EFB3E9A9BC26C4A1F92567C1D85057555C649A2C0327D0F9609270322BE5A360C6B11599256DC282CFB2ACE181BBC0FA5B3BE14D6F7AD35D77DD656E391F781F486F8CAC62E4B77DE6B49003A712C7326D77D965975FFFFAD7D086D47AC5D8D867B67D689D0BC802C5CF02E54635DFDDFF34B8CFD41FAE3E4AC17F22A2C8F77D7754AFF1E484100D2EF32D50667113EA255343B623CFA233A569FCD39FFEC4D4C558B14109F33D57AAE8CC38A4AE87E6BCB325D22C0232184BACC5757D7E7ED45147493FD11D1D8613D28791FC0EDA139715111A954B20CD6D34AF45734C21A1CB29AA06FC4CD0283E5156E26E00B19341A0A4B5ABECE89795BD142521A39E0373E454ABBE0937DF69A79D46771DAC647D28175616A73E34F5B4EB882C36CDB941ACD19C94A942C63130965592501A5DAADADC0F7955C4E1885AAD0C21D635717231FA238ADB780B4C93E8EF7AFE3DCF2C9C0CF18B2FBED8C2594F417EDD791FCD2A36A25E94C85B5FEA9A72EA402FD11F85A403C1BFC62CF2E06C16FADDE7946372E9A5977EE2139F700B3B92F4CC808BCA4C8C15EBA6E244A13BD6B555E60F0E2644748FF69346BCDF7EFB49709B216F016A3AE3B909F4F1DEFCF2B814583714C6110E220E46D5500CD2BA042D55B126C74C9AA1CFB3EF8E6BAF073EFAE8A36FBAE9267C56F06CF6FCF493238F3C52721F28A3C649460417D0FDAAB4F0A9A44F329B95EBAFB07A9CCF48A105ECECFA5168B94C63865CA3B808EE21F7E9D478489FE8A9A53C0E3CF040F94CAEA3779A765DED764845581CA42AD4E69C0743725706875ED9372E5A77CB1D742D51F1B7BCE52D77DC718761DBE5CC8F34CBC6445D65444BE2074D2C437F62A255D676D30417F85E81D2EA6E66D3ED62644B962C1A1B1F9F9C6A4B43AF1C1EDD68A3F5CB26B8C5140D2CEE1F1B2E365E56F605892462AEB837BCD9AEA1432C18A43E09ADAA055E349BD8997955B9C15641C4A062211222A0E4308F33373EF9357602EB5D2FB74DA5684E11F5310CDEB2862FF08CEF7BDFFB6411E755C7CF583663A4D87C20BBD88F21DA0ABC90053E5C363B9849D73ED6E2C05C9354A54E07C601F346E5928CB6CF7FFEF305A4AE129759E8880C6788264D5FFEE4273F29ADC00C585FA62A23BB4033095AE651524F0938CD5C39D17878B8BC1C70EC215482C68CD78890C1BBA5D167AAB2B9160B0E83A592416F361282FD60C723AF1AC7F9DC11BB32188ABD148F1B9E89CD0236A7CEB54ED92DB7DC22F599952CB629F0DFE1AEE056523049AA956A63F02BAC635ED5D7BA93A91B1D4651C96127894618529AE9A1871ED2459C12AE2D81532AA6E4440AC1F296AA460E043E7167D96F1151E4448999DBB978A3A2408EF8473D8BCC569D68CE78A36A700227090118E3E6CCEC51E38B6D547CBD08C31827778ABD86848DB8B068D1D6F02551086B4570764177DB84C5A6F160ACA40C35903CA1908FE04116ED5C9E0A414017367DA2FD015A327A6CB35F8ECA5A13B884E0E0830F960AD76FDD98364A2B375BC526025067B999551D601831C7A66682611C7059F64A0CF6027BA15C8711FEFDDFFFFD01071CE061103D40BB4BA06B2AD96D59281922501F417731B0E30D94AA703D290127535D72CEE0F18750C0663B8B4230869ADB55672B3B01358488770C15A8BABE85F86C73C1BB90D81D868E26EAAAABAEFAD8C73E46DD8B1E900E2A06D6EB229B6DBEE5D3A5FF3DB868D1E8C8C8B1C71D77D59557360A013ADDD32B2BB21C7C9EFA8A9850E19276751A9CC689E9726B56BE69D64CB90692A5ACABD1ABDD5978D5A97FD1E0F89A7F27C74855C932F5DC786644A51C17A200ECAFFFFAAFFFF11FFF51CBAD2593CAD4E31024C005A19D941E4A3FE7F048D6E88924358035E89A40949D2FD0B6D79891BF32BDBFFAD5AFD2A650D290996F575D9C91D744A880EC794B38F5E57D088814BFCD76009C56FA9514F097BEF4253243264F9D4FE3D65EB351B25E771ECAAD203A555F7422631A838EF6CE3BEF4C43E2152B56E84F1A008688637DFAADF6863C5A8734B5379E7CF2C93FFFF33FD734120A06984906A455755D741C6836A82D9FD97C70BE4773A4314E782CDCF48601AF60E1A80FE5854BF74B1AD0D4D6E174943163466E9201C55BC2494833D9F1E22B0BB549967B0E8F6B0EB5FD1CCDC6CA77E283952278C36F21164DA58EE7D17440708CCE3FFFFCB3CF3E9BFD73FDF5D74BD65B9ADBDC217A6C411A75465682F03521871F7EB8BC584960694D9D47C83A0C8FD7C5B5E1356CED81D1F2E56C0ECBCD009A55DF409047455162E99A4B918402D44259BEF6B5AFBDF7DE7BFD8035F6348216FA9AA4595995BA0E558E55CD758E3AEAA8DB6EBB0D73045582CB4E958ABC4F5D210A7C9E57173FE490431E7EF861CD27F3DFA93A1BDA0240967AC0BA2C9EB4215A0E6CC4C96C84A64C368FB04D0978E4155F8DFE445F13EA68C09D582FB0DFF465B97FC71C730C42E3CC33CF5C878236001DA7533796EDF9D39FFED4140DD21F04D017D0C1F879AE29C4B4A9A92B6D1A0AD48C3EC0B567D6E2C563D40B9DE190AF8520BEA3C616B9F84D82EA4EDDA61177DD954E269004CC526DAF830E3AE8E69B6F3665922654572692A0F5DE7BEFBDEFBAEB2E9D2EAC48997E0F3EF860ED58D622814EFFE8846B8BCBA1F48E8C638BDB48E3D717A4F00CAA44A0C0A2A25B93869C6FFE8928186A68EC9246ABFDAA39D1534B8BE365A6807877EDA6368DBE1081FE06F797B8B934B478F1F0DAB55DA5D95858E2A3A34B365CBC66E5EA6611AEEB9A1C9B78DD1B76FFD53DF7F6F4F70EF50CFDEDA187C8C0D749DB74B3CD4A04D66A3DC6D8F8DA75D8FDB5231B2C2FE829F2B24B562A3AFFFE7BF30CA769A52448E681AA48556109615E1A1598F99679B0D4D083ECB3CF3EDAC635FA7E9E1DBD68622C1882E8C40CD686358D7813B805F045B8CEF6DB6FBFC71E7B687D2531F30A00EC3395CD240C89100A6872D933F0689AC8C5C1D52CC07AFFAB2FF801708CF6DB6F3FC95FFC952C3459D1BDB4E2DAE4B309C52C323CB7C4C9FDCD3901385C9CE00161303D3EDD5C606DA48F88F7EAC2E1340709B015F42CF48CD327F08CE2E37A4858C95A0B60AE9E46D78B732A4DA0C130DEFEF6B7CBD69425115D40804B6C48AA25517256C07E43CB07FADEC8A3FDEE77BFAB45941D2FA54E78135183B34E3016DD0C753333EC40A8DB05A2D70D0EF0CE81DAB6A0AC299D04C40269D7B244F359603E18AF8E7F000A8B651A314424A793AEF5711D89C033814CAFCB69D81E36AD48CCE1C67029D77A19E91673161AA744A2F4B4EBEFA3ED48DB256D214D827B35A208F119DC83D27701E5EABEDDEC4C7605BC87451FF1AA0F87B36C9A9CB2E96D1B19D8151A0EC57968549CE46C57FA8B801372797A24354B33190F53051264AA657990EA655AF4CF7528680F2BAFAA177475C274F85E2C9843D873BE580C1C6D361CD6B4248B269181E298237D38962686C5494D213DE6F9E2BD3F34D8CAE120075A3184755CF527DD8B002043A25A1C162AB632B30F9C9895F664D582726CE5080699532CE276B80C1C27401F522A90CCFF5911E9A52A230E842AD61F93B138F0C003FFE99FFE893DADBF6A7FBB397CED15CBB11AA1B9A9137B06FA73909C90E6736D2C8D96F804FC4D5435A48A233A654D5A77713504496F810F18C3274EA5301A191EDE70D9B2977450F3860B81BA0B177C4A7E4A5BC2A5BF7742EAADC40F17F5704FFDBE777050EE6D4FB68E51C1C173AC040481D1613C97095578767D47C245C735AFA0FB56848CC1A94A3603AEA18D3916052DA84FE43C9D75D65984C163EB40BD4E3EF9644AA5C128509508ECC00D456C5333F38CB0C6086896D3144A98085BC5DC70AC6D9D2F545BDB8AB57F9A080CA347FFD52C19D3E7EF138B266A8A974FE49FD84CDCF3F04873880C594246D7CC3E3D4E59EFB0AE972A97B20D8D49ED82A2D92F7F0DB8500A5EE991471E79EBADB7423FA42B1F7DF4D1DFF8C637707FD9E1FAFC9A6BAEF9D4A73E45E8AE53F5BA8FBC1C28574223660E211D6B13BF06B54B0B66DCF57AD5AB5E2527CC3A00CE07B3876AF24DAF91420E1EB62CCD95BB914A7C139363BB3AF38D2E6712D0430E0EBB3CCF31488409C65084C712A0D27F213F300226853E5191BF229561455D5CDF4485E3DBD5B8F44DCA485ACDC879CF9EA347BA9D9E917EC0A90A9D5A5EA50A589742F6074A19E43322C86E77A7A29EE529D8EA9844355E237F9FD531A480D0BDB5C9EC1034A60662C785CE14011918AB2F5F7FFDF5BAE0E9A79F8EBD02CF9AEC096C20ED2B80753C1749AE82E1CE75A2EC78933DCD26AF8949FBD92F774F74B3523E811259BB1CF0BD1540C400DBB5670C18B6BE728CB1901461B4C8298E0D3DA4D846CEDE61C6C666095C44F6A926C56D31CCE866F045DCC7EE3BC62673D14BD4D031165D73B37C6EB1378978EBB75424635E35AB965EFA27C7CF4CE22C1591583AA5CFE96D7B9610491C06E4A3AEF0918F7C842ACFDD77DF5D8627568286212976C001074430055209A7D028B6CA0B6C64707A4C4F0F96816BA2C4AF79F5AB1E7FFC71BD417C5C72C92545719BE6A19DF7568DA1362825516A965DD2FEF474B1BBCA46494581AF4DC5EA811A258FA3D14C29D4A3D79E5DDF94689095401331767C2A39BD6329ADDD5019191AAAFBC576959DC34F3AE924BB4A668AD69F64FAECB5D75EC71E7B6CAAEA3438B72E1B8B217D8C2D7B454879CAA51C12B4EA8D75045A88682F1B6EE3078CF8D539CF5D33F4FBAAE58039CBA4C97DF8595F808A596871CA2C397C4A909690AC5BA552544A1251FB4A8F1C87CA8448F369B3E9C8FB314DAE69A2538AC74C493BE773B97C8E2B60DFE8BE575D75D505175CA0ED04C1909EEEA1871EB25EC158D4E64101D8CF73022B4A30F092AE8D71BC2DC6AB11BE88A939974017A4B288D0374457CE46CBDB3BECB0C3EEBAEB2E02609A043865B1E62342B31108F6355422BDC43034FF6ECFFCA637BD49EFB52DCF3BEF3CD6C58E353F34D2CDA151DAD6CAB6B315A8D3A10FB1FBB38A1C0D3198AAF47CAA80DCCCE4FBDEF7BE6F7EF39B59E8EA480325761A016AA6313242C75942BCD7DA6F44BA6FFEC421457069CC679E79E68D37DE88919142A237BA856C7BCD3CD5C9EB20A2654D5756B264906F22D86069604C2B0455B5A23E2BE358EB8505932AB413C637C25C83B191A1B1E9BDB6A8CE82AC432433707756DF51C6826AC68220265609D099D11E0C82C37173BECC28C946B7BD40A058FFD45181FEE38A2BAE38E288237C47C428C1DEB817ED25D480A35945856A026E7E4599ECA5975E7AC619671C77DC7192028ECB6715E3A6A1D74C8A3C307C5F4D1692487FD2A43018DB5F665D3107503E8B98268584018796A1A215CC05E85D682B21B67D361060871D7678F4D147A92EC71566BDBD1B662B603D3E45F47619F38A1782709613489C46FEC9346AFE757DAC7562EC664830C064C365CB5FA22D681937D3F44AD14E162B581C2742646EC5A84FB6DE72ABC79F787CF32DB6D0808B139B25305C599E160D2E1A1E2D33D9CDB2A7CDD4D4D0D2A5C3AB5637ABDE99B6DEFC5FFC2AE213269E4C655230D62611CFC031D5A3D1701B762DE6564F2A9BE3CA2BAFB4FDEB623389513C7E8AF11D4F46BC628012AE88AC499179D82D806253979A7DC34220DF678770FBCA179616D69B61590BD425D772C0D184B716E12298B6460CB09F6DF87AA8A6C6E5D13835EDD0B180988163517E524E19284B04B74FEE3BDEF18E071F7CF0F7BFFF3DE3E473D4C3020AD849440EA30B54625416CB2F55E623729C7A361DB198EEE90A8D8FACE02510B55538F2F818385BC6A680B289646111CDEBC5DD7AEBAD65A581FFA26A8E59425568301AB0DCC746609A735A94B42206740410A432C44A4211E28154B19AA4AA052AA19AA8F3786423F6ED95F2736388DC2B22561CF9FAA4E78CC2D173E9CB0EB412D7D5175C836B80A46B9A63490FDB4FD734351B2B15DD182B30C7E15315FD668977DE79E7DFFCE6370E8CE7156B450AF85F1F342E58CBF4796EF5A777BFFBDD0F3FFCF0238F3C120D82D965487CAEC7D44DA9943119307B83E533E596450A55CBA9EA936B8303B5EDE442962DC8A413A379CE014424828798578DA24E3EF9E40B2FBC70D75D777DE08107B035289FC746335B29F21D92F70F7FF8C35FFFFAD789FFC4B5B4F28862CE3C61CEB3423111ED146A2D5CDC26DDFFF4D34F9BA281330C0BEEA73EF5A973CF3D97CC90A14F84F875323589316A549B9F7C26481D79EA7ACD984E801D49938040D16ED666BAFFFEFB7176513084F2F457DDF76D6F7B9BEC4D07F40C03B6D037C0CD90AB9D76DA499B090B1118645E56FAB305ED137B48D01A0C972FF6287E0698117C945475BCF0639AC2D7C68DD70843929881D7977EC96EB1C7302800D07B4C813CB425F03934E5A1D1A7B58C1142169E4E9333B8C6A606F949C145E384B878064149FB17AA2A996D9330BB1C08E96C58135E20E694FB72A6D08FCB69E0F9F60F4C2F8842B268BAF28E3BEE283B007E25977C58FE1292D5AF10A3AE35C4F4893B901574F12E796BFD934D6E4F3455F5EBFA9A5C64DACB106E4901BC1AEB35AD414D85CD05FDECDB6CB3CDEF7EF73B7403C3405BCF390FB134CBCB14ABECA0E4950F6497917400512853CA70FDD986E97C3EC3669B6D0690C73ADE95F1E8DD76D58DD8B232F2194495E6920D375EE3CCA68A443AD6E158AE924631E8246A50B30DB2C3BBE6EAF6C6C4B6677670F2E37BA818FAA849FB7CCDAAB5E5965B6E89D16965E3FFDA8736EF84BFE60EE5116A47590EF5DF262189D039034263D404DD86FDD428C92065A344A23A176D32ABE83FCC3E9B32CC09DBC6F5E5713F44551ACBD5223F31D2202EB10557F4DAED2F49781245074087CCC4F4B4176E45C61E009B4D3A406F28FA9A570163C523E2CD78CE8CD7BEC91590D436F4528585CE2B5EAD152B56C8CC649D0E3EF8602A85C0D992AF4D73213B1A818D8B479A5DEDC36924DF4EF00781E28AF54F7CE21337DF7CB3BE59F3FC8A1C78F95C8E789333BBF8E28B3FFDE94F635F1B2E5F7BD59CE9385ADE4728B8658169BBF1B3B9B899F008A5A63234A18341AAB559B5CCC32C98CD1CE48D28A17CE28927CA9E2055EF3227AF42B4F53427D75D771D07C64C3D8E41590177559D8C5D4EAD43458751E35CBCA79D046230EE0DDE0E84AB44568099381E6B6E236EC711C50CAFB544F5ABC611CF7D4DB73BA702361C373A977CC2BAEB9BB1B2A206D66D54C43A91552D55E8D65893EA833AE77989A3AA9D23A685094C55919205964332911841B7D034624102BD710C9C688D73B40B6C668E0FF50E98B324D5509CF6066A9E5FAD02DEDBDE11C54B2FBD541B12213B9FA76BAB28AFFA1876AAFE04D219C03FF7DF7FFF5B6EB9C5B5E9B18604598C3E8B2AC44EC27C91030DEC1FFEE11F207B4A65ECCDDD0B52A89F71002F557A8BF80407D959B6D7BDEE75F7DD779F6E4728D24D1DD2CC0899A323358B13C3917209DA33F327B03235F723852675F9CC420C0784A1A02F8BFD5A2833D74150CDE5FAC6DABCCD56C05E749F23E2A8471F7DF4D5575F8DEE418299E11C1EE998C48CA715C4864C01B6B1DD24A29E6E2DE3E2490E29B39AAD2352FCF7BC4C042AC710E37C065FAAC8496C313B85E4221DE3B9BCCDE2094522FDEDDFFEED9D77DEE90653B6996C31A45915564C88BD29186AE755C0471D75D417BFF8458C0E6A9CB98D53EB7179E271CA2B12D714407D4E6E2128AD68F566DF7DF7FDEE77BFABCF1DDF70719B45462D270DA2415786F05A7F220C6238400D2F5D635D778E87841F0951C7A8531984D4F7A590AC87E67C715A4046A0235D89CB1AF8EC7924AE5837F8057FDDDD8A524523D7A89A28102BB30FCDAD114C74FBA2BA3F55B62A959D91E425CAA35A182DC66DF4D4F47B608ACC2AC59462CA59071C7AE8A1B269D83FB6BDB07C357EFDF398638ED1B21A97D8A83A191BFA4B106236A64F1FDA51762D41A7EA19E088565EF5FFA270B053D1A6CF2E147190CAEB9B85B231CDF95BDFFA560D157801C6812CB0E38F3F3E1EA19A290D64BA5D76FF65BFE1CDF327A49223D2736E1EA7514830EB93534E39E5924B2E81374A7F75AC38DA9D5D65E769ED4CFDF7831FFCA04C280477A362158D52633AF4C48DFB10925B0EB5259D9B5BD89F9BDDF8322AE01A7D81D10F9E2EA364D9B7F3CD83E5600A19287694A93C10583EC2911EA451358FF1DEAE29E0F972E718BB0E18B2EBF4FDBDF7DEFB9E7BEE31C92B7E36D3BECF3EFBC80E70D0D52952E234A4D52DBBB3EAE5C9B71F697437E9C93457D593439D5106C6F7F1D1AC20A3C91811BF5C50F38981F5EF38CA2A879266DAB835051C1F04FD815EC7BEB174F54FC806E244B285CCCCCFF2916741B64422A6D93BAD1118DA81794767D4866F7C6AC7476B6E7D9C16B6BD5B1E80754F333D406320D2CC7C934BF3492799F8A59646AC1D1C27171A15893DF3932D7030B6DA6A2BD30981E377155D0CAEB212D12A24F8091FC2B1C71E7BEFBDF7FEEC673FE3FBC6739159D443BEF6B5AFBDFBEEBB9DFFF376F4F499E9D486B61618274CFBE9D65B6FFDD5AF7E75C30D37487940A1CC2D88B63958879D15AB80DC7AC11C5511BFCE0238B23FA700754ACF9353FB8E97CD6434790532E76CE4156127CFCB247823762AAAB3BC621867EBB8B88D1C12A21CA09901D52C8153B9360ED8CAB694CF3AEBAC73CE39873818A5FDEE55E090A3B121EE7C422F36DD947EA2D8E9E800C8D9DD7A5D4B00BEA3D67193E7720DA5DE4861FFE217BFF8CD6F7E133A4CAF6BE2E43CA879ECD0165293C71D77DCE5975F5E64A327279D569FF31583133544ABCB30F4B9FC06CAC06ABE45FC7E6C9FCE7B979F9AE8C0A1AAF93C300E24F16422755404D5BEE64C988B897D40A884461944F9E2A0518DCC32559CCF5AA3EEB2F939B9C346E0E1D3E35C70C105471C7104E39789832A8AD23962CDA21070A035F2A2A4592C6FB3E58CC3B6B5C407AC4F3535D3A9DA7762A2A5AAE48F1FCE0E41CFF7E2B0002B8B7606F08B34B3C10699170C3EA0945FF8C2170E39E41087ACED45617E3542639F88D7D327071C70C04F7EF213CA10407EE916E0A400609B7D33AF603471056BA1666BC7289410291AA45BE311CCB073EC12383465DC937E13CFCB6CE0670A295B04A61E9C0C0E6BED5C95C529113E3D2F766A5671C9756631E93AB68FC8420E2C5BB66CFBEDB7977C60BDC8A7B403736A9A4911684BBD06076B541CF2C8648718758B2DB6D8420284B5337CD2DE919738421F5CECD0A848B51AB3380A3D304C52B7C6010FB8500E9837B2E99E7EFA697B3FB507B6A9C211B2F2B365E40790FD52148396FE93769BC6614E09FB2288981A8D91BD2EA3DB0905501F922A0DED2EC7EE879302A6AC96407548A4569AC911D2007447B92654B6CC7786350CD928C86E439CFC7DCB620B1A6BD65A1DB02BB0A374B0FB02B8312F2960CCA2F2FAD7BFFEBEFBEE937173D5555799E22755E552AE62740E23559E9023B4348ED6810134A7232A0FECECB3CF66452CCE3C630645C34FAB877DC73BDEF1831FFC00DD40980EAD608C12B81EE6593F69977D732D2F62D9370699B32FA9228F6C0726DB5411B3D891258643F8AE53B586F569AFEDE4F9641687446BAD492075A299E994CCE7B5B5F6F75DAF4C01522AD3841A3F1CFD1A9EDEC82638F1C41337D96413D348D55E363735A5D834787B847FB1B2993A53F45D73CD35679C7186D69A32D3152B563CFEF8E3D8DD79D518CA1E43CCE145F1CD762264EDC83FD92F84B283DB5955F1559326BC22FA3A4E1163E0D15C87369B643FBE20ACC8CBBA06B7AC8F991D6283EEBD862996CFAC44888F19C733DFF92518E35902439B57B51524B36CE26869D0BE3EB9E4E65299E04434EBBFAE996105E754C0BBECB2CB830F3ED80E4D8839ADDD55D36E4CAE054CFF39B771CCFE620B52E42971612EC99B6FBEF9031FF88043EBA893C65C9D28D34C032BCE646326DB1279163419E321F70F5B3818523C047617D342672D921D40779DE54C15348F2F634C30E7AF7CE52B1F7EF8E1AC62ADB2A1996606621D94CE67D285DA99C197707B447632C0D598D9A1DAD8F340CB677C0F00BC5A6E4E28AB0F80C60A312EBD259E9F317610995B01EB7EC0D558247A3EA7501A918202B66B1503FA4E68936224B711E1FE587F983F64112C920853E0F822C50CD7B4E9C132C8D4D2BD707D8CDCE6F0588DB9C85D23C1C6C9AA960991A281C1DBCE78E31BDFF8F39FFF7CBE03CC3EDB73CF3D65CFDA0FA6CB29EBDAA8B881E85C64DBCA8E2F8B0416200FE491162831D8C2F4B28F0D6490207EF6D967413C1A49EF46CB4C72EC1D96AA06C93A005047E9A6681D571F9A93D29BD5E94C302F8672B80691580A611C67BF8846582C124E6854ED776A0F683B17CBD435A67C18237856C0D1208DF1524BA55AE8B8B6CFBDACC09448B59296D67FC9E4A5591077E7F2355D9A938873E16A086EE4325522F39D2F26040F3885CE9EB153244C3D8DAADFAD76AFD9D05208A62D6C23D632917E96089BB2E5A43F2D5FBE5C43229B65AD30E7D4D97A8E4E6AAD93419AC54B30E75418101BD972885D9B8B067D1CD90DD101A6299D33043D5FFD345B825A5B582DF9DCC8956801DB4CD7BA6BCBDD74D34D727F311FB7D9661B19431A00A8916F7DEB5B5A7472FF7386A0B9ACAE43AA88B09CBEFFBEF7BDEFF6DB6F974515573326146B7E702D329C57E0440E0E25C81413432F6381CCBEE2E0B442FFDDD93B276E7EDFDAE044A7A58CAAC130228BFFA52F7DE9139FF804DE2A0892B1F2C5C5CDEE494AD5D860C623DD26C162416717AE9613897CE08623188A85508D93694731AF0A6ECD4F9C9598060DF8924B2E49A181290FE836531C0AF7E54C337955D34CE5E8694CC11D775A0AB1CC2D16F2807557FD461BC59EBB6BE7E32660104C0115AEB182D63217624B5AA3C039E009B5D2251F833223BF05BE1F7455A7A2F58A681D9F49137B721A7D71590FE0113833CC82E5425611AE5294AD5BF0F99BDFFCE67FFAA77F5A607EF4FD1D76D881D27BA3371D56F5734951496949977BD5BDEF9D7E4B55F0B05971C43B13E609F451F7D7D0C78ED3D6241DB45676670D6AD002E910EA9A46109051FEE4273FF9D9CF7E966C2EE931360D03F0303083E4795F78E1853A277E28275009BD9E7AEAA9DFF9CE771E7AE8A15441D3ED88B3763EB78428C05FF01DCC52971658F9652101CC8B0EA6180D64B65CFF537B45A442942CEF7DEF7BB5CAC4DE914ACCC06CC5C392F127077BBC9738F0F6F3703BA8F95BE07C354A88FE934F3EA97938F7DC732FB8E082934F3EF97BDFFB1E0C85A9340A3980C6B8E916C46930DBBDE2B60F18EA9C1C17B5DC5EF4D2A85F74C75F1628F66D4C33E30A9DC02E1955B21D4A1697E1CD399FBC387A4C235EA6E1AFDAF09AE1A79E7A8ADD0BE221FAC1C40638D7D93C39E0F914B0018FA932A6E1C195DEC22643AFC313F7FEF7BFFF861B6E702F0A9E9DD0A0532A794501E60AB79AE9C30626366B4194AA321567316253CB181BAB41B1627ECA097EBD286ED600D89F679E79A62C03E261EC6D1729392557DBE171296B41142FB4EE426F4D9313786B41EAE29694A0E8B1D119BC853669321F224286BAD7B6DB6EAB45079D833A80C984A7E690BA603D0BF8DC5405A8D02CF9CCF28A144C468CCB18E80695469740C4B8551833E6ECBE5D6460D251F853798C356F74A1B5246E8CBD32F0C8F32A60FD123E26FB6774938EA7BD1603C9AAF23EC3D3ED836A648D922FD7CFD3A83AA3F11DFFD0EBE13A3C527431CAEF69C5083269570A85566C354390CC01228910EB6AFC26AB40C87A0379489A59C439E7CBA93E831B31825C43C226D3A90368E309A95973B6219AA10111C7C3EDB4F6DF7FFF7FFCC77FA47ACF9C12F057BB21819BAFA1F01AA1F62696D8F280B89258A3917D9ADC790C4E724A3512C9178E31C29A5A6DE311DCC525A60F00FB342BF67F172945936BCE8925EE6AE162672B0F9D278C9E88E0D83457083A7E5E7323CE3FFF7CC9A954F9B254CD4696D0288C78D18FEBCB5FFEF209279CA025B099CCE31044A10C7FBEF3054A9CE0AA31F9708DB1A3881F7ACF58FD630C19F813BBC6A659C930DB2BFE6757D5B9B611C8891A556F44AAD1A82489C8D5D9F399CD44C95A40B3E1BDA6A6325DE004A17A35877BEDB5D71D77DC919548573241707DAC6B045ECD0C23B740675FCD97039E2F3C80188990AE54D9ACAE77D2A8B446F4E7C00B0736E5CA63C913C23C54DC624DA6D2A275BDFEEC3224367334C7358C2DB7DCF2D1471F7528C8AE55940C292860C709BC0AC81CAC434628BB9FD8A195076F624AAE362DD1868B8E753C02EE8C67CE4BD0705887A09477D96517C8E47184FC144C38B14F4325D830EEAFB0FDF6DB4BE03BE16552C95AC55AED29BCDCBA8E819C44566A51040C022C3F173BDC72CB2D1FF8C00730E62CF1D8575CEAA0830E92132531EEC4B0F5B44BD7748481E3687E6C67703A90542860B4B56E0D9DD6BC21880F7FF8C3DFFFFEF7B5846443ED0123E5ED6F99527CB7DD76BBEFBEFB5285F5C53F8370AB533153BA329295B0E472DA983530FCC7072C55959760BB783C83B9B2AA5B03C4755E27B744D6FB9D77DE798F3DF6F8CA57BE42C0C135E6914ACD995A976C5B07FBF010B84E218D17139FF3CD67C487C74D6313C9510E3B94CC43A7E20147EC32E048AF9A2A86587B6036A2A35AF23E6624F2CB3551DA37CB972F97496E78912EAE73CBE1C1ACF10F09A065552DA30BF85EFFFAD7FFCBBFFC8BD988882C31693EB451816181DA5C6B54FC707C270A2CAB1F7BFF7A23C79D3532680029FFD18F7EF4073FF881F499E334E8EC85D1C85E5FEA987183102BA96200B0C5A07B1D7EF8E1D75E7B6D0AD02D2359FCA48DF00207D00835CA9C6A93751873601A23BE9CAA660F98989A528246595502A42BC37E9CFE5FBC6038D2B35F71C5153AF85E14F229367A108B6CB6A8B699F358DD80F1E455982D4053E5B439ED8A6DE7449AB3DAB3816C163EE489E276F27233C2F914B0C9786993ECFA90BC42A7F3A156E7F8E38FBFF4D24B1D3FC3AC771C8B7DA243F4A10F7D48BEA6B5883E3CE9A4933EF7B9CFA50AFB962A6C33ECF479599C9D66B658F001B110B6A71EF91DFD747EC3936207CBDC7FFBDBDF7EF3CD37C355F9FCF3CF231B61A34C95556429E1A872ADF8900078CC563896E6BA1A4286849DBDB8B15B5F5CEB1851D36577D861870F7EF083A79D761A3687F1B996783E53DCD1070A9D6A998CBD0B9280ECFB65975D26CB380A9F9AA33827542A16769B1ED11FE2E7F02121C31AE0990BC2106703D409F254E2FBF6DC73CFBFFBBBBFC303D4E125A53DB76092352A29AC3359639C71C11315C7BA9FAE2B6F4023DB71C71D1F78E00136909BC39809BDAB6A4A6AEF90427E146AA72AF6B74D67782453D6AE98BE5370F9A1A50483A7ABE1A06BCB1E79E491D75F7F3D62D4647B29C4C3B30051C92BAE5D6D5CEA7062C289D9707A3BA6CAC0D7443310E53A9F8CCB2B3033601337445BB1620561468872A2596A721FB6235BC1069AE9D7231BB88F41C49721B811FA0EF37A4DA9C6A66B906E545034FFF18FAC1DADD0B4DB74A47FF6B39FC17D8317EBD9B8E4924BCE3DF7DC4659529C2AD05C3C3FF124D86E75A12AC72F9643C449B3B983CCD5BD4E39E51420EED8CE182BDAA8AEE7B1AB84505E5801FB8E86D9BB81C774E88FC9DD9D768214F7C4134FBCFCF2CB892280328D4EA1CB75A2F6F5E637B7545671CE98ED2195AD30B38AB3CC8583575F7DF531C71C93AA6A40B2EC0B3CD77FE995CF047C727DA766B14E5AA1A978AAD0E0D109CB2BEABE9AE5C77B2F379155CC08A745897918AF602466CC44E0DF6082C83DD57997D772D34D372128AC21D8B1794940381F773DB10442CD04662C91912AD080D31FCCE086BCEA2BEAD2388D5923A19F920E0E8EE68D37DEF8B18F7DCC510D270E7529A9F32F7DE94B0E25D218CD0DB26647683A153DB2F39DD6978D4015CE7BAB4F04A669AE7127005850F19F66E6E6F57DADA6E3C6696624DC4D1D28764833E1458EB1194D96978851568AEDED4A8A5441DCE3B1B234A0B744F4F87D71A73CA2DAB352D7936A2B9E75D6599FFDEC67F5A11B35FEE715B0E1BAF6EEA21B63DEBA5A69FE9C782B6EEABEC529E4BCA195E48C1C76D861B7DE7AEBBC0A18575AA3D1B381B589D48C66054A41ABC5185A0A7D37AD004CB08092C36049C191F5C9499575EC07D3FE78E73BDF29F3215510415B82CE0FA5D2CAF8DDEF7EA749910121E7C08D055368D6441E94AC30E19488C845A112A4CDABCE771A792CBDD7758E3AEAA85B6EB945BEA38B9774293A5DCC27E06CFAB105DDEF9DBDCB96D57728EDC59E65FBBAD9A4FEBBF7DE7BDF79E79D669E22F2A3A166259B040597C41B906B3120CFC9D44D91F27AA2FDF6DB4F9B40C3B63942492BCFCE4DC9D3C0779A2AF51609B7F11B102531A5E7731275AA03AA2C2ECB11E3FC31B561031FF1AD1DA8F72012F6D8638F471E790496257E684C1F7AD7053C488405CA819C13615D1CEB63C3036F9600C2048E1574404E22E1700DE89455A02D039A58AF66D9D8C79A809D03B96EC403A6D0DC5B372536EE18C902EEDDFFC58B73842581778853080C18234FB73EF5D4536573E88DCC9DADB7DEFAD1471F85108DD835F201A96A73D9947B3103ED163DB160DDC656AA8C0016850D8652A9150818E9A67FCA9A64FFDBA45B8089CC54948EDC78BF4523E3820B2E90584F554336D7BD58FE460007D1299C601C0C4D1ACD30621896C7D7BD346F11C1578BF4F24F76117C937C4E5F0D30BAF92CBE04E4AABE208BF93BDFF98E3BF7219C357B6F7BDBDBEEB9E71E1433320D5BF390430E91D3AC4D2EB109FD884F872EF2C4134F383F68565D43B591365D558FB254119CB503F55E56F135F11466EBE3B2261733E75AADDC861FBA6C09CB8C7BD1E0153662EAA01CCC984F015BC2386F92E6B23B9DADE36AEE62E0586054C02CAEBEFFAE77BD6BDF7DF77DEF7BDF9B4A0F4733A92795E7A0B3832DAE277599D6BC0A184200B49A6E09191ED2DC01BA481CE197BBB951590BA4C853E0E83FBE97C4E8AF7EF5AB73CB976EA1CDDA3557274EAEF696B7BCE5C73FFEB1B766AADC230D491B9D2D653399C020670C959FAA964A525472D66983CAF5E54A820002C5E32C2C380BE2F5E6EBC096947C81AED988836833CE77E6A391E572497615AC9CA9722C9C72485573727AE272BCF95524EE0132A36B4A5E9C71C6196C535C25FBD07945ED469458F3633E7783D87D0C4C059A55C063FC1B0D0FFF9827D2E73A9FCF3CF30C4F8449617375B686306738262A11F89A871A7F15A3949E3100EDAEF031F816DA452C6E2BE02CB0DECCA978DC6599C029A7FDA4934EBAF4D24BEDB6625E00D2919092A3536377A929604B1CE3094091449F83F01DB77609386E8A7E02C85C8796461AFE957B0C479FE9FFFF4BF309AF88FCB38F7CE423B1F02195242DDA2D5A5C76A959B2CD0CE3ED7DDD75D7C9364DA508DE6EBBED64B290B4822D879D6C87B2A696626A0607200BE5EF310362BC987FF8F18F7F5C9681C6A0D38D9D74E595576AA37EFAD39F9EF379316763D9450AA135763575269A6ADD2E3656F25A64258E5A2F90628D8A04AA260D1C5AD8628B2D3463113A0A9883D074CD27B302B63C04799002CF685EF1F34777993BD2739751DD74D34D471C7104FEAB5C1459AEEE7A6479EBA28654C5D856AC58410F12D210A67648C15630A9051934B7FC8AE87A67D9889C39FE079B8D434736B96A26850F78848038C5431729024518044E992DAC80A304C82B16362DDF2B5FF9CA5FFFFAD71A27C9534750343FBBEDB6DB2F7FF94B1D61E627AFB86C536570DB532793A591D0F456EAE6FEFBEFC78638E59453BEFDED6F6B09F06DE655C00C5D3A5F3F938D16739CEDAA6730A78803A6B9069F0684C7017DACBF188F4A15311E5049C60AEF4F0CA566A1BEA246FA682D9BCA8A6F8B09BAF5012D33C299958BF2B7ABECD1AB5F9106F784F2D7D34F3FFDE28B2FB63A7486987B69A5910271DE1D346BCCE4968A2FA4159A4FF3B3CF3EFBDC71C71D78DB795920CF83DB6CC440C94AD8A466094BC83396AA4814BB9F8D4B358E39C5C8D136AB466638EB9A674622034DD60C46953ED1F55914D711A1CCDC15008BDEF98C3493B08D4D8F39EF1E44B3B753AA8873F3D01BCE71DA3433555C13973A185A91785373FD7455AD063D7E3E44C26270CCC768661B3C856E1F56D83BEDB4D3430F3D647646BEF38637BCE1B7BFFDADE656EEA964964B6FD35C0607BA84A01C9FB804C51938DDEEB39FFDAC548877298462B8DAA9AA7E8173C7CE314AE8FF9502467C1382324F321D3EB2508C61318D0B92CAB4085B8523A9B1812A80A02DAB208D9FFBDCE73EFFF9CFFBA8A659544D696662488BE222CB4EC5328803C0462569C2A14BA5CE38E79C73CE3BEF3C7A2A4B79688D1608416B4B90728A8518EDAA799A0591117935ACD9EC8D1D6597D367F072E89AFA931D6B7BFFD2F1EF79CF7B2407A456C9FAA7CA97722C074344075F13A5332BA7561791914101023B3C2A954EC5B79F2AFF815D845474E58873D5E8D714E82D712AF413E97B9D384E2B969329AF6DFDC77C30DF21931597382E2EBB4826AC0C9A1A52CFB131EF019BF2B66E63BC1D7B886490FB14609A984074B6029EEF15D7917687C63C11DFCE4BB600BD616E1D6F7348DCE155FC4F24734FD90F3B8504B3A951B02FE755C09AFDDFFCE637FEA7F3FC2E00B01DB7CB2EBBFCB7FFF6DF74BA4C8F401D2AFA3855E1883C34104C15B90F45605C9F289615A713C3FC15DE479A8D4023605BA9BF7CD184C0CE377833431C716B38635E784D8A2EA8AD8C49C14E05D9C821C42740461B9E873D2165A32BB8A351CFCC168AF3BD228A8D6DD755355AA6B5B8A42A15BAEF7BDFFBFED7FFFA5F3A00483AF3FA9226D41B6D38ED3339BB1AA7BC5E0D09EF53A33DFFFCF3E5BDB1A7EDFA232B9DCF9031AE2BD008883D84AD0AD88423E7965BEC66C98BB5E54B7FD238F7D8638FDB6FBF5D3F3FF3CC33AFB8E20AEA0E11430B94DF9049E27DECB7315B1FF860E058ECBAEBAE9A9038935457DB20201FDCA85A3F995C0CEB64BE686DCC7DBAD68E78804DF2430F3DF4CB5FFEB22C0099C03FF8C10F74E6B50D220D53CD37AA85DC5B55C33B0E8521420490B0D9212E80A7D7F803883E881CA29B213F015FEDFDF91FEEBAFFCC8BF9248CA4DD088920E59BB67D89874BFA930540F5C6B604A98A3F9315D245D89324ADC889EAA1F0CC5CC59B66192ED87FCC838FB9E719E8D9C5E5EBA0830E92CF5D2B1545D5219A1748B151EE820796829FCA61C44EA58BA266065B36A25252D5899CEE813AB688534CE74EC96C8C5FCB9CE45581562A73FCA067F54F1D43C78D1D65B513EC7C9CBE403BA054A15CF182DC2FA451B56273D34C7632361016363634767FBBEAD7841C66903623F44F7DAE1970C59DC5572C1330FD7E6C481CFB5B8082CC2BCE4E6D217DED75AF7BDDBFFCCBBF689C54D6E232C63ADD3493549248A73F6727D85AE576D6C1B6ECFF4B0AD82E90E33AD867AF7AD5AB642EFCFCE73F47A011FF27C5E072501FFF4649AF4BBB1D4798A519258DFFF0873F4413CD009D853C602C779F104B31EC1D1ADA1BE6030299D3083CC7E11DB60269CE4EC524670A02BD07F5C3AC41CC842312931CC8A0D8F6CE4944B608BA9C59D3D8A227ED9363283CE0345337B8E08C94306A09B08C41E479D951F199679E31ED784FD539B8BB6C0EEF00EF9CF3F9FAD7BFFE57BFFA152A4A0F22012AA78733CFD6B9E8A28B288661F1BC89318D4D2199825D198D8054457725E39C198D655D1A9BFE44576627B452085E711AED7C58E8E3E759C1B005BDE3E576E841389FD8FBECFBF9EA2F2914767234CD22C275F6D7A78BE08AFC4E882ADD67CD867044B0636A38426B472A9B1FED1F319F59D94192C7E14CD2B484B4CB873EF4A11B6EB8C187DC67DE69CE39CF11E95BC46E2A4DDB430E39E4C20B2FC4D644DCC38028CBE9ECB3CF4E211EE88A17E4B837BF37F67CFBEDBFFAAA014139237A7C1C74DC713661CD47C1CF23F14F3C0C4E3AA822311623557BAA8A9B0DF9899EA5E7D0C4B74E4020EC6813ABB1C1ED83178EBED70589E5F21363C4E67C5EFD70BBEDB67BECB1C70C82C5FA34B1224700BB012C7124028A3914C75409183881C509D5A99470E3D9BFF5AD6FEDBFFFFEB14C0B62A276D53F2755954B761BCC301CEB025269B751FCE3835C4B825010ACAF49FA9F77DE79243B9C37F1214225233F1918ED7D6271A0FD2269A3871F7ED89A12AF06398CE1EE4A68D0C81165E9E36FC6EC48C26CF73156D0A600C2F27B24732A6B0470847447578EB081ED49CFA78067A78AF2503E67D826C71CBC2DBA898411691436675E751B7234D4D9076D307D1FCBCC1805D9F1709DE6158E7DA176848047D004DE9A0422ECDD4AACEB8DCE983D5AC3D890E62869280699356E411095DDE6D0ABCC5B1D24FB4F1E1ECB0CF2330A71CD0E8D83E0277AE73BDF79CB2DB7D83B4F55FD0FF6545E35CDB06185E0766910DFD11C9D70C2091FFFF8C78D5375CC1C87D8DD3453959FB073BF40F79B886BF7E68BC15B5D5683D1E3FBFC63CFC6A8033A55BF02879C4A65C3866369880D401F6F74D58E3BEEF8DBDFFEF6B4D34ED36964C231634D921E5BC16301B03ABAA6EC6EC9299D401ECDFD8E8C3E23B1FDFDEF7FFF6D6F7B5BD419B52D6EF16100A7897F3B33690EE37B428EEE88ECBF466A4C9709E515C518A451C86B68EDE6DBE78DD0D48C690483E6D38EAB07F185F61E44609A5B4D3BBD5322C175ED61F3AA6569BB6AC511FB3448AC6B81F44F9032A499F573608FC66411B9E14F6C3099449A61B64D6DAAFFAF5FB641390BFAEF6DB7DD76C00107A4403DCD1EC6E3C92B2661570DB087D97B975F7EF9F1C71F4FF8A11358C4393E94B6EB6BFA8EACB7D9E0A3BC42CB831C74CF4DC206B04CA08063AD0B47182DC80658B81B154B391B22808305357A0AA07A9632463EB28A59D0E6913739518D68461360A0A20C69A95F9177A4203586915340BAF04F783DB555345402152800FB15368C889371C4C04EEA0A871F7EF8CD37DFEC63CE64FE1FE6DE34D8AAF25CDB7DE75CEB9CAFEA7CA7EAFC49DC7B9BB8897D8B4654D4B24763AFB1DB6C63870D880D763422BD8020A2821D2AD8A0A2A8C12606C5BEA33404151548EC6213F72EB755F975CE8FF3EB9335CFEDB878EF3C73CC39062EC3A9EF1B3FA8C55A738EF18EB779DAFBB91F674F2241A12610D6420E1D8E130D716580DE7AEBAD76691CF6E008ECB0C30E7233B46D5C0C89D9CAB300C39331DC669B6D2826C448E2EB36832CB123C4AC2793E211AA64E6633BA30D811BDC5FEF9702EECD0D22E9D5C876D50018A4A64593F9CD37DF60727969ACCEC0D2025AD4D4E907930CEA3748C5E8F9E0106F544256FEFC56371A3366CC73CF3D47CE5F5F636435E51CF88E087A8764F5E173CE39E7830F3E2072D2DBDED25C3F13E774D53325567A2BB2479E7D9711130D33B0A827F3173A8C697412498E466E501541B9C605F46536699D0162F7724DA4BFB15F5C3D62904E23332CA676AE5A2F80FDADAE07DEC7DB0805F3516033F275CCE4AA79A6F485B4AEBE02B53AB0260313524E901831E8DFA7EC6A10588E74136E4BE262BB141ACEB8850B85197845680E627D6C354961E87F3B9BBCF2943973E62C5DBA74EDDAB529D7607807F78656DE4E2E00387288CC613D2EE7A76DAEE20CFDFAD7BF96208028CA304E9E12C36E0EA9010981F05CD241E6B9942B9060F640AC2EB5A5122932AA2E7263A9707F5B19549F321E1031E7CC3A63B3353662C4889B6EBA49E6E0279F7C1233A69CD658971943A3963B3132DCC8746F7CC0E7BDD44C13999E321408E9692E1D6C5FCE97E5A3AB625201C2A056927002E01D84BB6D5CC74B5D2F9BDAAD1656F6924B2E59B56AD57BEFBDC7AE23BA66B7CC2567BA0FD03F531CA0231B9975A42A426073CD247A10BF3433FBBAB6D0A38F3EEAAC9659E7AC98BD3FE5330C1A34E8B7BFFDADFE8B1A3699306B0DCC5013386FDEBC2BAFBCF27F2B5AD973074223F6010C2174F0AFB7A3AD590CC046EE7D4B157651C446B0A350E10681C6C893B70159063B51981D3022E8C5A545B4BED0EF18B6894D698320AA25BB3AD192B0B48C4B130974F997701DB50F0864F6BFE641469BA611440EBAD69E742317AD344239AB2D60D31C452EA0FF3D77BC8E0674D4DC884A62CB6E36A3BF723063DED333490D1293EFF881B6F49D77DE092E8A55FB3EECE129A0BF907D474C27CEAA0B9F7B6BBBBBE849C71C73CC3BEFBC23F985AD2A83E8C30F3F34C0D86BE9F7348209EB7E43EED6EE9DE75686F078210E4A6D0F5C2C6B051CB76C2B13957907A38F530E6AB1FC7818DA61A425B4E47604F9B001FD710F21E6341E6032AE26ACD1C1C607610AD946468D6990E4FC6B4043A9BD7105C7A915DAB5A6D0BEDEB2D5C7C0F143361F433241554F6EA713C318F8CA1A2754C90E84EA24CC9E3D1B74EB94295366CE9C49FE899AE0D29CC7309AC9FF5286B29B61D5CE6E2374B8A3CC205282F0016BEB66E82DCA62C98E244E4E32C611B9D27C1A07071305C25DDA17C35FDFD29C686F2C5AB4483E04AA142C1BEA0A91DDAA2E739274963B0B5C88541FCB1DCB946DBF97DA53E229A65095E496098815A45889DAC21D79A9A9309B476CFE11CBA3BD497C4C1A81428BD094CE05237169162289321B7D8B40D4C5175F7CF7DD77DB868B3DBEAC147D0A1CAE88E85FBF08921D8BCA279AE7D20C8DCC8B26D32654CA88365DD130AD394729F4372C555732F9047840424D9D3AF5E69B6FA64651F78F154406584D9F3E7DDAB469C4E4B1AE74730907C9130DC6993F5C1A7006EEF1DC6C6F97E241725852819B8924801695F6D12D30BD8E204ED8A57A117B9C687A8D87FD0327815EF3B4D34E7BF6D96789006DC87D73D1B566674330BAB3AA2BE64B49435F9D0A989DA0A793AC8CDC0C7E170993193366109FE7B801CB8F3C89FA98564413AE016B5768923D27550AB8549EEE289A075952C025CA52105E4032C91311D28B5CF75E6508B9B4619C2B741722F67F83F9C58A640339541B3D6B5BC13560168D4627D0845628DAB812A5469E11B9C7B1B4D6D4B72822241888E54E4C554FD1EF4DB36517D9B0E4AAC08587D10CEDA923BBDB7F2B2E4979FD0B19325CF0948549100F1E3C98B6895023C1736B4063CAB57D555CC45ED44666BFB292638BF4E58E7B1C862A056C9345AAE5A0830E7AEAA9A7BCF35247FCB3F45DFFB591CB1BBC7B8CE9B025EED14645C809D1070E3CF0C0575E79C5772332E9E2CB8DD1957621C254639EB77233478FEDAAABAE7AFCF1C725F21C45C0F205971483ED1895313A446A0A2CAEFE8D2C3F042DD04688574C34FED5E7478E1CF9BBDFFD4E9BCA015EBCAB499326C987FEECB3CF52764C5D451615700C21745D2FBA5C6080A2877C286C8F474A77066933D1AA2EE5DA01F68016DD640EBC2346AAB75F33D05439868C8C202BA4FD03CC9E13F1774C66BBA126036BFCF8F19C5F67A3504E7C524792723EFD12B8BEA7A2743CBDAF1C9722C8EC0F77D23BC48945458159437B19FF8510EBC9BDFC52117AD5B025C4BB129DA69C63262687B2742C3AAAF35464CD5C5F8409C5BA30BDD4E223F18902EAB937DD7493A617FC9AC3275E05C6890A0111620516A58427C13557487CBDDAB5D75E3B71E2449B560E3098222605A7364637DD6358D7B871E36440B32D0959E36ED289C4FC2751FEA76CBDC5A89B7E49B15C34A45A8104AD33C560B7D2D6865E4A8FA6C081E40BEC406C726C1DBE45E911121828AB016E2997CBE394DBD48B5B9138F3ADB7DE7AC1051738F4D5CC34C99DF213EDC35BE3F21203974C803DB4A7E875E147901C193B76ACD688D36DEBB944034584F5FBE71176B0114794090416BEB33BFDD5081A0941A92BF0C36E44C891C381F6F2C4A48B8D0ED60919A1C71D77DC71CB972FA78EEABF171725F6F22788704696E6AE0A83638F3E76AA40ABA5FBB8FD85DF85A4C286C015CE15F9AA62E921360EEEF2D5575F4D9CF0FDF7DF27E3982AAEE86A44CB43B3A1453283A6775BD79B10DC70C910FD9D4AAC6FF5574CAB370A14A5891DCC02D379A1DE1CAA35E37184233DF6D8631A8C369FFE2A714C531DDF01E4DDD9679F2D3B0618428C7FD0FA42679213950A9F1505ACA7ECB1C71E5F7CF18544C6AC59B3C86EF05C9D01891B1922AFBDF69A4586AC370D66F8F0E177DE79E75E7BEDA5C72167F52D79C6FA00910C19F2FA9877946E882E31D601B9AC55D65B1B16DBC89521A84F046BCAF9ECAE8BDE0C4C5829076C224491A5D448F48E9E7F1B28948A22471007CEBFA41C3FF0D6D2F9DFADB81E79E411AA89CC17D6CAEDBF8C5B74F0B9D3E0F3C16C14042FA0DFB7DA6A2B6D6FDDD021567FDE7197D2618C37B47BD4C8D4F9D82551615B70939C723B74341F42BF95F92828E7D07FCDBB07380356FD2876BAAE8B8322DA45279D74927E96390B02837C3FC1ED92211BF925CC9E0D431C995DEDA2525323DC099768A64216936BA413303A2F7AC0B6D1250DD887A6F3F38473A0A8F560E60D1D6772742AE9921E171A0B524FDC7BEFBDD7AF5F1FEFE9184974638C9571E48C673919E720652B1065A46C7861D9941430075FD32E3342161ED90436BCF488862DF940C4C5C48B8E0645C885E397F8B2A5704E1C86C52F5205334887DA68C7AE008E14228E7AC49E7BEEB966CD1A071B4CE385BAE435CDAD644E69903D0E5892F8B7C4DED89DC3CAB92774F831399FEDBE1ACF4CB3A64DEFE42E3E2BAE86C14AB6F4099B70F314CA1EB8950623D9A1E976734087C18D6C24D0DFCC449225058C2714A977531196DC7EFBED25A963501D848B5E503B72432631D724908747EB60C810DE6199352ABD144D9F88432627D53715828E022E65EBA12FF7A14C9BE2AF8FE93D937379DF971EE15D18F765CA168F7BA092D78C2ABC6422F04B1C419A10FBD44940E88B981D980E4C9A7480A4BF26930380B9A359D5E2221CFDFA367DB8308F6C1DE321B1859C4D81FA83ADA51B12A0462B404B9942B5A5A355A034A74D9BA65790B6D3B04DE5A10FEBB93AFC6BD7AE056246AA9579D06F62FF41076FED7EA55A05EC885F0A9C82445653066CEB59471D75D4CA952BF1EAC85203989069F2D65B6F51BF84A7426C4643D2875D7E63501EF257BF193264C88A152B7816F9E6146C47340DA6AD512A9DFB24157A51AFACC9C71D9128A4470B42939C28553D44A74A22D85EAF23DB2918CD3DED5D837C8AFBDA09C3AD1298402C45FB61A6C73177102A5C3F5481B09CFF738537B96A3C07A2535E531E04C025EE730EAC7F00A78288431D6ADAB7DC72CBFDF6DBEF85175ED01D68DD4D8C07F5C9621154B3026E85E6A4365231718077E9AF1283044BF0A7B1F370C19D762134058470C18205E79E7BAEF76A4426A302382072A0815B4665E62D810C771130DD7A88CA46D049E95B5687ADC02E0253A69E3B72E4C8175F7C115034792EDE17B75063D3EA7863EB151E78E001D0CE04A55C4D43E97CABE0D501D49642FED17B0F1B9467617E11F2B4C82D85A00D9DA16E5BE6BE9B49987E31067AC9A069C368A2806ED1F626EE79B4FE46A63638D051CB6EA0EDCA68BED0CCAD6D6B14702353CD610B00E20506D9A9810CEF869894433278F060D9A1928F31A7650B8521B971158108E7113B759BBD049C0604B166107A3C4B431B01749577229DCDCDD262EC50408CE10CF7373B00110C900AAC56AABEBA8ED3A51DBDB96558CD4DF0DB783B8D64CA9429F2BF491EA70A745FD7FFB60AF21750A98E3859CC3542B53B1F90D895CEB373206BA35194A87237681A3D8D9A58994A1A1579CDDED018CA32CB986D1F3CB24A91C9841172B4883DE285A35CADB96D51D15D84901435ACC86E1E6A78B64C6FC8BCE49A4804600B73C0F4DF12213B7683DED4EA3FF6DEE88C94962EE790F0981D82B684ED6C6A12CF087EB9C47D6FE8B41813B1EEC06328625FEEB572E081074A73FB592927FEA5B9A5EC5F7FFD7537E1F8C52F7EC1F275EE1FD43C80C158E1E645C472F5B74A39206FB6526E2BDA9D96CEF62C5959278FAD959DF6D6ACCE9D3BF7D24B2F95B7A0A5C415862A5CFFCE9933A719D8EBBAAE0B05AC36C409F8C55A007B1168417473E4D9355ACD500C3731736A89A5DF669B6DC000DA6CB513C2DD162E5C78C925974405ECD3177BA9999C67EAD4A9B366CD72390366198A10EF961829FE800E02DBDE410BBB5B460C31CED23AF28375AA1D3B07DB7DA0E840D017FAE8947691B781712AD477D19482C24E664F630396A8DDEEFBFF1FC5A59B137233DD98D7C82DBD3B1F6DB9EAE1C50C0E742E5DC18036224D7A614BDAD49BBC1133CFF2799340C6A02F12D56721F42C4340D8301B091D35F5B7DE7AEBD8B163CD7C44EECACC067634AB048D196A527B9F4B4777E34BC6CA9FDED0E2D85135897BF94F988AF01598E4AC649AC5BC6649C1706CF86E674214AC0ADA0EE43D407CBC2B7B4EB6767D56F1C22D7CA1DF6A6502EEFADEE3D1258D032E35BAA851C0781504C71C37D674B9B96FE96AB553AFD9C9E0DCE21B91F524C5E2D7ECE9687F9642953AEF0223CF01071CF0F6DB6FA7405CDC6C6F29118D037254AD82DB04CB3D05FA5237CB24646A854D988EE67D3DA10F286610017037614486F252C8651C38E811EC834652278869EC9BBA3971AC9B04FEDD2AEAAF6842876A8F2AA7EBFC7BBF59C1F0EEF114A4A071AD968CAEF49FE8A6AE911822E4F5F2C94210188DE29110C722010C9EC54D9652B50161994BCCC9AEB6AB12A4BCB5A0FAD3B871E31E7FFC71FAB5C5BD973ADA23A6ACA799E1945DDE28EB317DF80C5605DB7843E85B6C01AD330B496FE48BA8670A737F759434962239DD9EDC1010E49AFBB8B07962B35E9706E07BC5565D0EF899D1DD91D22882F4DF254B968C1831C2F1BC9838EF0B7DA80C74C75327A4892D82127237AA56A6B3BEFAEAAB6FBFFD763C6F8AE96DC236338984D9D67C36536EDEE0F8470C2E22702CEA2510E4C2D2F4C91AAE337896DA11302E61D2C9C53BD2170158D81E320B105288F0D5983163264C98009E913C311B9E435A6A19122B0CEDB85BAAE8331A8CF60F45DE111A5C3AB9F6467C161A99402602592CDB4DC919D3707ADCE5975F7EEDB5D71AFDB0518EE159925ED6E79E7AEAA9B3CE3ACB0DFE62DEA2D3C78A973BABC762AC481AE0438818EA097D276C9A51C680CAB70D58CAFA200A9BB9EDAE6DAE663B79377BCBF84999211C4BAC42EF2DFDBBC30E3BC8F97EF8E187759EB584871E7A2838408A528CE87144DD1B25C2CADC9FB94677C6E77A9B3AABE758BD31595D6FE28462AB40E8497398C1B56A03A5F660A0B1097A05492EDDEAB0C30E7BEEB9E7FE47EE731E435E1697C86E9E2BB7E38B2FBE6062BD76ACCB8D37DE78CD35D77080F51BFD1EB6CB184E8CB844BD029855E42066139A98C1A0F33433D2EE1819FAE49E7BEEB96AD5AA14AC282F3A5BC261676416FBD0FABB91FBF6686CD48DB8D636C6727D2B922FC60C5B2B978E5FD7F5C24749D91E7502389E0E6D301D4369C4EDB7DF5EAE92152AED6989554A5411BCD1CFFAFD05175C70F7DD779B7ECF2418DE36648EB7DB6E3B7D46AFC37675DF4F878E1CBC2D81F862086EABADB6D2A924C714C110D08DD9E2F97B5AAB8306BC640AA40EDC46942D8D4CFBFC7F1617481427C8FA8A6621180D5A3BB4889B66EA5F791E5224C3860D73BD47D77571535B36982361B847F4B4F7B063A9553333D570A608DE184F876233441F922CA2FDFA19325A9C271CD32843E289EBCD3D9788A01836C8E9B01F4622494BCCCED4C8A574E7CF9F2FE34C4BAF5533D9A49783DC0A8C024EE2624A1A2ADF6940DB386885C641145BC33C6ABBB6E45A742680099BEB0EA5C204A28C041A71104D54C0E3E2468DA70F470BE9110542A702C61F25FE6FA1D1E886F84BEDC93E9738728E7A32833D016753C1F7B5B798F3A1F37C9A88D03B6A23D34AE7A5DFCBB6452BA76CAC61EBA5FE5C580D11A3618694AACF5B5BA7ACABD870BC18916DFC037341C0B2E67C4F4F7B73DF4680A463685BDC93A7A18D064B22E906519C130FE4ED5B99029E407D4CECC1C0AC9782492A56EFA55A9AA4941BB3A7CC4711F3DCD1EC28410F80C53A575A931AF04EEA5A85C24CEABDCCA959C565DDCA4CDD265423D7428416E7C3EC30B13EBD7455CD839D5A7BDE31D4E1D246840EFE0AAF4F3E1E90A049061A19E60D0E457F85686CF6ECD9B7DC728B7EE3EA5EBB4D8DC0F2CF89E58444FCA4ED4B769776823C7E08FCAAC077A49AD89CD1224C81B03E85AAA458DDBB21F76D8CDD8408E9F3617B57D142D2FEA143510A7AD433E99DCF9EC1FE306F5DD775974575CF3DF710A13153690A641429A8DB9A1415E7CEF68DC6ACA1CAA7D1FDE9003168D0A08F3FFE98894A4131C78C6CCCEC3AB44B700FD71040168CBECE7C775E36340D4C61661A01F39F421CD25503E827ED791E542ABC899E862B476C5BA7F6DE76A6BFC00BF22621B4806B7BD96597C9325BB162455F669BEA2DFA0450FDE547C35A4AA719900D40140902A1C23B6780A097F6BF11B8ECFF08712D1D5BDBB8A846B2783A657EA85F13D1ED324BBDA3FEF56BF2FAE09C752B4960E8F67443323E9687119AAAB7D3BF714D1D368BE374900F1D0980892857AC674B45DEF39D77DE49ED453A2E74F4EBB88CD3F3C002993E8C9FADF29D5772B688547D64BDDE78EA5D0650BA343E39FBB7DE7AABB96A09F4D5E738BB1EE0285FD2A61452235CA91D9A013C1BE3053B8E785194F576C822E18B561705C364997E819B104F43CC8D1E3DFA861B6E40DCE3D4BA63319FDC628B2DA047407BB572F91030043BC76685B4795E958B724E9E51D98D707EDA481FDE9D21A55C94A27D095556D5FD63593A7E0F0690314A6850A33DABD6858DBE64C99233CF3CD3A11E5E93C83916B43D807E6D128EAEB56C0A054BBC78D4BB5155447A55F6A79B8DC3C2C37CEA6340C75D9E14E9BA9C13E2D82091D97531FE6654672AAA7BE54C9F72CA29CB962D2302560F9AB3ED689945110B87A291EB2B480D3A60401487881F4E4C23F74D6224881E2681C13B3E54C29244058CBDE2A9E8DA3CC3970646B744ED7CE8BEEDEDA51051F4C9ADDA87E0E390F2D8D0FACDDE7BEFFDD24B2FD1150ADAFABED061D057692138D1975C72C9CC9933491EB13A20D2AD8AEA73C0CC1B653958CF669AEC6B6F87E7DC273AC001805253C8E8F035325B21878E13C7D451F2EE76350E04F66462DDE82A30243D88958A1C96969636AFF10762280E1F3756BF343AF0AAD631B17F6D4901C7BDC157CC1885D6C19C351F43C98289569771A360B3FF4768F59D3245926E157161985972EB6FBCF146B8E7FC314F57699337DA592125AEE7CC99A301E805F5ACD8EFEEBAEBAED39F0CF9EC34534A411A4F056A88893232891483AC99B163C76A736A7EB4E1D942FC55FFC61CE5F7E7B459DD405EEBA7B38769E3AE4155219DAACB703BAC48F6598D07DCAAE8D768522440AA0841D977A8525AD3BBBB991D7C9D19BDB35CF9B56BD7521C066735247FEE9B143BCCD00AD7FB3815981D393AE0D9F41B498DF7DF7F9FD3D209ABE1BBF69E29B66BD63603D876DB6D65E4223ED819EEA39CB2696683DDBF24AE106963BBDEDF548E71E1F4146DE851A346C11B356DDAB4C993271365AD11582459314422058FCB99527BD167D57DBAFEDE44C7CE3A434BABF3C38127584A0DAE9689F827A4D9908871AE40FFBBC0408EAF8E1F1293C3EFC2410074E6DF801DD7A8A8C88710476E8709C1DA5790A9D5789090AC9D71C61930AC115A27181E438E40254CAC8FFFCD89457835039B18138E858E3EF8D9CF7E76E8A1873EF2C8237A0BCA75AA6493D9631CD4E5F755290F072AADA7BD3939D1A98343A37EDDEDB2104D0515EFB02DABDCA9697C99AF4DFFD29521859413FD225361F10061A93A17588DEC2514BFEF1F311056878CB337B74EA114B526E5E402B3A896BCE2FAAB9C7E99FB3806A65FF68BA3DB5C40CC53CCF58BCC61FE1D567490209E4D471CA34DC665052C6D072482D6148DDC3DA26A1DD9F918FDFA79FBEDB71F3468D0430F3D44A538A9106F547BAB46CFB9A13554BB7A3B4D2CECD024A189A211C6D07F2FBBECB2C58B1743039932CC188899E58F21059101022EDE14688B4C3E8A5D4B45AF74644F6E208D442D052F53C81EFA72A52BADE50DE682B50D43537BE697BFFCA5862D3D156D1AAD32BDDBBF4FF5561D98D871DD38D2FA5067D7EBE73FFF39DC6C76F00198541DB0689DA576D0900B0FF0E476DD75D7AFBEFA4AAF4DAB9C75EBD61994ABE3A77703C3C2DE825FCDB120D4926999F9167F0273EB7937532B5943A41B8DCF4A1BCEB126CC376D14626EC01FAA249449303664566AE269CDCC4BE7EDCE968DB171B725D10BBAA2A67435735B34C898F449B6A09EAB5FD236CE558C354C6784FEDC1D4F1F8E64175154A50C3CA959DFCECBAE5B4424910204A0E14FC6D0B434D991471EF9F4D34FC3A16D9982D54C2307A4274276C08001FA3D7B892CA96EA24322978B574335C6BAEA5288D52D0B0D4B34A747D7F7429B52C3C3731D946B74547A7859090C626319A05E82C344B54A45B8D6914FCA06B77F1FD5707C8A441E352443870E7DFDF5D74141771D7FCA94C2CDD02530069F6D05A66A43B027B3C6C2F98378D53DDD289E7A5C6DC8529360DFB3915B80CBDAF8BF8B0B3B7B8F3DF6907D230BD2C8DEBE4C315B6318E15C3A818D1037B8297574E3D16724707EF5AB5FFDF6B7BFB51F66FEE4CEDCB917B7E468A68075E232B4854C53F4417B738B02B8F91C53E5243A4C822636C2ABC4546A4FBDD18EC4646084EB24A5B561B42E3A0B1F7EF861AAE65CC249708B178E83433B483027CB1C342A9584513A68BE3F6DDDF1E3C7CB13D53B22E1A1DF21BAB6E38E3B6A48B14DC84F7FFA53A9FC4F3EF98454A08F4344D1533BD7973BE544342535A5546D1D77DC712B56ACC0ECB002F69E890AB824C1DCE7C61030F72E32C5981EA489855D24024BB5E71150DFF769A8F1547C8C914AF5D46E5597D52795A67D995CBEAA3EAF74EA4A383A569D438B89C039D1FB68319AB91B54AAE8CE6B33C46A3565758258C4106B842EBF5CFABC564B93A079D7F223AD70CB28844FED66977430D680A3EE558ACD46A2998970825DAB9042FAD6BDFC5AB926121C443DE100C74063D08725ADDE7EFBED529D5F6C2651E501334EE78A62603C05EC5B245BA8D90F5D2F3838FD5F3D0B90114977C4969EC818C85F92E4E390A30BB19F484E47C1E75A73968C083CF2CE1634F2B4A4504B0106E6217621ADEFBAE379230043FCC0F524AD40779072B98EDE0B961F22F0E0547B32B97CABBD1201754BAD244F7127B8AE13CEA635F83965087ACD7A19BFEDE8ABCF91655FEAA6694ACFD5D2941AC699D30D0406D302952970BF38F846004E92ED26B5E4014009071A8860634D3D3DE638D1DD134E3861F9F2E56C39F7E1B0078C68A600577F3DF6D863253A3FFAE823364CC921F19823EEA611F0CCCDD03D7AE79D77FEF4D34F51158C07F4492AE48639598D2931B4D08E84F7434FEEF9E1D429D024B338A50E378ED34A9B57FAA3EB0565CAC8C27070B8B485A29945EE0C4CABE9513989A53D609B75BBEDB63BE594536EB8E1066F09DAD6F18389BDC03CA2CC6CAD322D7829443DF9D73E6B3C17ADA23EC2B00C73CEDBD84220EB5BC816A25F2950A0FB354BE8E898CA41980C1F3E9C226F0904ED408D53BE101A33E572237725EFCD7D9CE401EB2C6CA4C0AC3A7829E7D5528002F5D70336B3318E2F50821A8551F5FB66EE9F63EDD813E8E9199E29A5F80ADC9029870BB0DC013D120C21CC624F2E5E8038407811F069E4EAB738A4463BB498C7E1D492D8D3CD35695A8C9AF775BB50171DA600666916ECD0124C46E260BBC5A0420D08081C04717B7D1DB78F86161A1B1178F65C23334B542D652B5761E2204211C59D3BD56A7F15B0CB6F62085ABFD4099190E240EADFA953A74E983081D2611366C1474366881A65A82D7865BD2C7B9847DB8600AE625A7FB6103AC0D451A584995D22CB44733257795AB7DF7EBBC6AF7F6D4DC756A0A93DE7628F047C033487917326B50B417E60487A2F82AEA9A807E3FC576D39028F5494C999F8E0830F52F5E5196024A06AA38D652155E5D3A7F66E600011A4CE5997D83208B1C8A14B1DA52C5C469622F1A9CE82147AC488110B162CD04D2EBAE8A2FBEEBBCFADD83A2F760B9A03BF045EEB1883F1BBC7502A678D2AF6A8593B57273AEEF12DD83CF8463C85E526756210161CCE50DEEA5F5E1633CE92C745C3460961531AB05642C9441DDCC868F3382DBBEDB69B3C4BF3AC9596208630A30705476CF4411DB061B74748F0A851A31E7DF4517A3495FA9A44A03ED5804698D3022065CC762A68C089E4459FDBB81C07E4409BD3C25CFB0D371D2C981691B8140799A44F0AA664E7598BA91C3E1CD124906AB046C64CC4B4694FE872B1D1B7AE3A759442C293C926FE21BD5F3A2F1D89356BD6AC5FBFDECCA23DA19D53E7D5F50CB3B1D0DC863E1AC26A20B74BA4BDCF9844939DB296CE864211E73C0A446ED486BBB43F866E88669F7FFEF93ADB0EF9761E304D9D1E645C4C4F41551F8B854A17DA05A727DE07A882FEDD6AABADA4244C97436CCA969A76C041071DF4CC33CF74BD39121CC4AC33C13E15F6C09843A7723B2F7A36EB8BBA09B8E2924FDFA8A8CFFE8117072362EC0920BB5F324625DDE071BE69DB872D8959A0A579E4914760C636E4185259305032F01F7CF041DA2D5C71C515F3E7CFD76780E042194DEB18BBA79DFBD0D36576EB92F55DBACCC866E30CCBBDB39A207A90F1E93EB49D1A8ECF3B8403B9819E78F1C517CF9D3BB7F3FE292B4B7B45C68F54453E30765D6492B2C1EAF867F4186AD61D3FC0C0579DA37DF6D967DDBA753A205AD03DF6D863EDDAB520D5DD3095ABB40AAEDF6D854A364F26912DBC0DC3C4BA8EA7950BF7B56D2EBFFCF2C9932793D592FA2995E121D691E38E90F9EBA0174B59F01815288D9FC8562BD7C4E3A3530B8BEA6DE5DA0A22A27A23FA1F370A76A368AC78E6A302C62EA153727457E2EAD8176FE42E1D48096879522E30EB342C6236903E25DA7BA466B1771DB42BB108787E38C5242070F7D105FBEDB7DF5B6FBD0529A1E939DD8F9999717D91893580CE4512402F37CDBC63E479FFFDF77FF9E597537BAD0730029309966CAF78CF38755E7D9C52583F01799D75D6594B972EA576D752BA91F96B4DED8E07FFFD025585A0FB0A1A52D2C020C7227FDE0FBF0CD9C0B9F92EF49DAEF9565751AE5F6A4843860C79EAA9A75CD7657C32DAC5C9B99EDC5EDB9C0CC667119ED25FC78C1973F3CD37E31CDBF2658EB89B7E397AF4E8458B16A18961602925A862452349327969D3A64D2334EDF6F5F520292D8F74C05D77DD65586F7C040A03F3227230D15305ABB9CA0333418AF4B476F9EAD5AB09599BFA27B59BB455E39440977CD4D8F4AF660613C4B9D2C81B50025F94AE9A79183B76ECF5D75F6FEE4979BA37DD7493D98075730A2ADC7815EE270DDB4935BC5B80BBB42AD37CC258628715E5C74C5AC7DB12E70EB12EB6844588A2DF78A29AC81082839D138BD36217E478D4CDDCCBA37B4313F8D4618937425B785364BBAB58D5B4F765FE57E204781E55988C7818DDCDB4B3053282BEC47C57BA897620B1076EE88219E61CCF467726B91B43DCF13E3680A0CA019CC17E7688CE03A680B06A1F9ACD389AB3CE16C5640A3A8CB7D68ED2382510D00D6E6BD8A98063AA3E0A3D769723318859B6220841C78D63D7C8DEA2B7A6EC609DDFE87C47EDCB2565205B190966FC510A065C94AECC18DBACD9DE2F32EECC526E9B4F4A4DBA33AC312BCEC7D9B14171600AEB33B2921F7AE8214E9FD3254E49985DD2BC3AAE023551A0C3B18DDC8F39EA7BCFBFCF32351AE848A781DC5CC4E34CEDFA3546BC4A27881970A9A4E48F6C4A760EF0460E17E3343D510A7C3E3E2675216828C180989BAB883C99EB4FF0E2B56F34116ECFAEEFE2A73602378237376FC561E33C0301B508881A4E7F923E0344EEDE6A5ED7C8CA4BF4A399FB127ADE2D2C8CC14E85158F9EB3DFD35F8FADEAB2BD89FB1BADAD58A91C294AAAEED3CA24A0F81C7C5D524CA69CAC458D1F3BD1214DBD9D0BF25C5183A00163D9C8CDC5EAAD9FFF29174290001A1A45DA57D60F3B8A55D38942677862F579923DF8EE006BC91211086139CC2400A6970D536F70B83E1BAC8D9CA4050B16B886CFD22122992549E5C9BDF7DE7BF63F62F29EC0209C44C8293EE30EC72513BE744587D81A54C7FB9A6BAE59B26489EC4BD7E8F383F37F48BDABAEBAEA8E3BEE881DA04B979388F197744F933F7DCB2DB760CE5A14F4E6D66C884BB2A70EC59B47C23619C610F90EB740C63C326D45CAFD0423B289358DDD8BA357473A46BFDF7DF7DDE5DF90706916CD6D58A31AEC85912824D1F50874A1CF2C123C7A511A1EF146C7E45051FE8A13B7CEF54648545C65F0F9FA62EC38C96D510CCEB8EFBDF7DEF445BEF7DE7BB58E7A352CCE2DB6D8026D2D990077234CCEBFFAD5AF9E7DF6590666CD14315996C6CD4C05D8991BC6D88AD85BE3BA1D4873FA0602DA934F3E59E374E36D1AD6791E48DB1358D67B91E3E318C2C8612B9096A63888CC9EF3E23DB9D91AEDBCC8A140C0E91635F2D05E7BED353EE9F422D3CBD9B1A5E2938509058932F2A72FF7C18CDD90520869980836E227C8145080CE1C8243326F41CA7C612983762B15308F2F1598734E5C7748D54AA44D29E976D6CCA8E088A1ED7CA2D321101251854291ABC5A8D3B70E3A19216282E89ED03FAB91EB1398352B6903655D7DDB5F8291AA4B4F84B3A92734E673AF43CC02AC3F6A5EAB220A31DAE315E1155C7D8196F56695BC38FAE8A39F7CF249DE1D8224F6812613299F72767973191C9BEB0215E5BA7EF06E66C947719658DFB6DE7A6B6ACF98077954905CF2155BC76C2D8332348D3BEFBCF39FFEF42738476B729604575A05F7F58E3BEEE8B8A8C49CE432A9B894633C6C518C21D35DF51454E4AEBB60E74F9A3469FEFCF9383416E284D96B72F984D4B0746D9148F2EA37883C97D3940A1E40751ADD5AA3E04D5FA37BEA63BA1B1B69D0A041EFBFFFBE3F69239B78AC83D8BC2F4A2BD2E13979ECC62A58BDFAA23B2A1AFB8A67C942335D988F7A96DC08B7F1B6764F99CEE2FEFBEF3FF3CC33F190F42F19B8C30F3FFC85175EE8FABE403420F0F2D9DF90DB4BF35FA012280F83481AB93B35E6AC535A2528493374A52D81EA1BB928FFEAABAF9E316386C4C5F8F1E365E12D5AB4E8D24B2FC562D05C1179D6CDEFBEFBEE51A346FDFEF7BF3FF6D8637D5808FE918C379997E6E1A28B2E92B5C47218E64290D975C6A5288533CA29D035E3B01AACE44FBA941958936C88B163C7A65CA985DD83114C2CCA8830DB1F77DD7597CC8856416F47628279E675501950BE981D052146EE869C233B13D224074B402FEEB3CF3E5A74E05D58DE0C8C43643118777E0ADCA829C4667C94D038461A3532A785E60141610FC7AE604C83F6E5D6B7A5E76E0C9374DDA07E49A832511829501F704E76DA69A7AFBEFA0A64B2AB27A1D063F963790945087A1313D7992E8E1D892D8C48C24C66557A73AF78986035A1129DB4D62148EE438B29D4CA78694C4593A1F8B4EB9E1249EBD7AF4F45B4D3C1B17FFCD21359BC66EE200D3A867C095314DDE2AAF90766054E449F21CAB121F71EA0860A92901462686693367A8E5E1FEC0F13FAA4FFF514300AC08026BD0876B13B967038E1BD239BE8AEF500DAB14264956BFE0DE548ED84919EF9AE0506A5F190E56DE6DEF24CB25673B7DD76D3CE6187C7E2108448A4B4E5B20B054683FA723B8B1C285CF91A34752B143FE8875D77DDF5CF7FFEB3FFEA784FCA71A618306F0506E61A83CFADFD52B6864B2F122BC4A8AD1A3870E01B6FBC0131CB942953A44E0E3EF8601904E4F908D23A004BEE40F71C3D7A34C5F14C1D1F88A68311C8A5D172BAADC3E25FAFB9E61AE960377633E971CD7C22550DD4009B22198DAE2D51A698F6D9AAB4330AC24DA64D9BA6A9704B06B3E7A6C260D212CB389050C2D88A76B6539B4E769AEC938405A292013B84E67A5F4E8413B4A85E572A32E6584D4EE233E2613BD1BF29B77892BB2267D7FCBB7AC4F9E79FFFCA2BAFE001632A99AA562F72E289276A6358A8A2D2F431FD6CA48B43B84C6FA42F341CAF9453F025D1AAAF0C1B366CC1820578D2C8370DDB08E41871C40487A9307503F73945ADC33872E4C8C58B17EBFE285DDB5EDC13C618F85E62E246BFD18789035968A47642B7945150A970849881EE1BD404058E70A2DB992FD04FA81659409A052C0BB685A3C43C184E6083938F3CF2C837DF7C73E2C489B2E968FFA23BEB29FA0AE11DD35E12A907B5C1C69235C0E482E635E69E63C34BE282A482285CE2E08F7FFC2325CFFAF0565B6D25E9C027410178E1379742322C594B357CF87059A39046E12EF06AB07CD830ACBA4FA3A8F2266A8725E19A6CAC7E4479ABBDE32C1E061CAD9AF3923EF009EF6F2EFFFFEF8B400505BBC62EDE79E79D12ACE60440E2CB7905340E864E675BAECFCD37DF4C168D53012703484BCEB0453C334FE178CDFCF32D668923E084A296126164524F5641CB8AD06F651275103AC48DB41B2172B1B7A1016B93836FD75B80BEAEE9EBAC3B902CD4429F76DA691270700B1353F92EB794370AD42206B58DDF594339E984910425D04B738781C84D4518D059C09933672E5CB890BE52925C1ABFDE9DBE082E66450C2183704428E4D5B728226AE6CEB22638848F02A9AA7F291441983A6FCA1513AB7AEE09279C20EF2A15BDB924256296BAEBFBDAF7050F41D3025B54A93D95C8B734C8DFFCE6372B56ACD0B089581885C7A18B1D17F49AFA22A7D25AC1DE556A6F275CD29466648C3452361FED201A6F61462D5936F3E6CDFBF6DB6FADF5FD52C631914A40DF47504E2C3437018B3EA691ECB7DF7EEFBEFB2E02331560692DB781A5AE1AB227A0F32503D12D53BD09ED89192FDDCA95F41C13633522C0FBBBDC6EA82FF7C340A611D701518FEEE06EA48DF474EA1A9003DE905D4173D103768C16A810BAE381071E909C7114C7F493F15CA7EC48F4E4E64BDE36B10ECD88998D8E72D506A5C7DCB871E3A445860C19F2E28B2FC68ECDAEE19B3C79B2A42461318CA094D9A3FA0A0E5E1D54B435795C8D9EA2FEAE8292A113E471B1BC47A5A9E11C4224C4AB6A2432BDC13D4D9D3A553FB3DB747FA84FF00BF1B34B74DE9C9C4DB611FCE15724B1622139603A18E3C78FA799A043D335DD93646168F289736A21060D1AB47AF56AF9D325AA2F340AFB29E6CF0804B93EC74C78ADDA22DDFF89970629198A5195323394F33140F9F50A9A1622AEADCCDBAC8F4923EA93FCAC49AE32ECB83C4BF5A87E1F92545875AEA337642322EF52E6F8753033A2FD7FF2939F38D6DA2C6884C9CEFCFAD7BF7EFCF1C7F55E18BBF514AD8E64326CE2E70E1E7246746A3445A66225118571E90ABAAAFB63CF9532A6D81CF86150C4C056C60982DFA6119A9B19D6C4C56BA6C2D8274944741110099E44CADD249958CC0BCC62433D52287968B6B7808C10390E7BF4362C8E3A2FE65CD3621241FC66F7D5415C10F300234652CC3902746AF4BCFB32DDBF8EB65EA4AFE027D72C69F561E5BBECB2CB24A6500F24D7A0D7FD2E7446076688DC2727CD8AD3BD9BEA419612F7A32F13B532C3BAB4DB77DC7147592D11F11E39C62585D09DBDB9A15EEA50C08D5C6BC7F2D1AD8730AF67C086720A58F4286063EAC7668D3368F1B255EA208D7349C4DB238907314E9B9B6653D1B3A85632132DABA66D400D3A2E75C942F5EB33720913ED2222AFA469CD7D0465A98D24306810DAE8325CB42AA2D06C6F8F8DFEAA0B416FC81DE864B2593B227AE0ACC1341E3A74E87DF7DD07B796D128FBEEBBAF1486768F2405C579B006B229F52D8DBE2A5468A82A3FEFB3CF3EAB56AD024B86CF7DF2C927CB0895EEA790AEAFE8E40A97371160DF8A33499E98945E2AFAF33433C73D25D8A01EFAA12EAA2F4071BA1B2C77C4B270CE3478F6BDCEA48EB4ADECAAFBA440A2E6DA187B72ACB79B052132B063B493E4FABFF4D24B5803CC063310DB95FC2F75F1BE9A191D575488931D1C7B5AFA70CEF51BE27890891263183E7CF8BDF7DE5B95DAB059CDD4B91761CDFC3743073D1BC5C84433CB5B70508A0A75808D2A6D3F1D7BA3D0FB329F3EC00D9422F128FD558B08EF66D7F150FA0C43426C0A198B946CFCD95C88FB87A6C255A0242C775C04721FB2F96476DF70C30DAE743451062927B23F4EACF05DD43089734B0C6C44EEAF77D7599629990A058FBA8D6902330C13D4858F25F6268F2CF9114A638CA7DB70716ABABE2F45B71484C04E0C8CDC78027DB1950B6D23F49D9204B3A3901B721F71F9C71286B8AD7CA5A4B6274C9870FBEDB71B6F55625533379FF4F44D37DDC4F6D06CEFBEFBEE52A8F6D1ED0B12FFC342F2E9B01964DFDDCA5B7FD260A8AD4751495A7655C04EDE7367771120054E93F966E8959B32BB270040B69C09BF305674134D94AB409BA16F4D4FE831EAA07A2BF346917945969AFBC14D480DBD761343EE2FC571FCF1C7CF9E3D9B11BAF632750B419B66DF2143A72F61BC828BD476B9CEC277456F6C52A56674778D5969735A01C71AE58D345E350231925D303B9C64BDD5C48913D9AC3A4EBA29E2CC34A49A1DBD2DD3A1054B8539A0B5D187F57B4A955337B08C332E36DC860D1BB678F1625C076D5F999C3A605A180D03DC5A5F669E4B8542C256E06A861EABF1EDA835B443F323CAABAAAEE8CDA422E20403B0063C6AD4A8BBEFBE5B071B69AE4FEAA15565126C14809A71FCE67B739E2FD6F931FF5A23FD468F28355672806833BEEFE6BA7A435F3C98EAB4D073E6CC41D3B8909F774148999A0EFB8339EF9C4F5C2237BCC218BAEAAAABB4A9FEDFE2AA9AFF883D2163E7BA4623AB4D59C0B922950BEC4EE3D96BAFBDDE78E30DB20FFA3DE5B93AD8580698D5AE52709D5ED7F1B4722B2477EC6814FD98B5BE54E8C6636F4D1C6B39E073A82A3732E8D24F69164DC1F52E7A1CFAC315C0BCB5F715B361984869F20D3F71320F9F0662044B0CCDD2175F7C419006FF8332D98B2EBAE8AEBBEE924BB76EDD3AB45DEA10A00646A5E04BB966B76A3EF1EACC4E6C4E2559F3D80729BB8FBC781456CDD0D54DA3A5233D8B427D4B4C25D0B08BB30C920896E31428573506C23C7DA14F063FC4463D067592F57018195D48E400A54E602FE5389C756A2A7C50A9732F50CCA9B70247B4730DA45790D8D165726C20A6366CCA9871253254A78C90C720765B3633EBB976800DA99FF5146D033C60EE49A4C7907EF46EDCB734FF4E39E0CF386DBBA76EC41A869EE134737E29F03582183241DD4AEBA5E1912CC38688989EAE5BAEB3C6E1EF75635D37682337F460CAFC335E26F00142795E0F748369421D168009599725113989AEE52298F9084DC8407A73DBE09EDC9C98A9744E9A7A067A45D09A3EC213DCB4DC6564FAF019679C215DE862D04E68DC8FBE5AB91715800B09FAA54B97D23B0C642C1693A5554D48D055EDBCAFFB7E3B76CA0EE60E7ACD638E39E6C5175F343775A9FAAB95CB557DA836CBFB6EAE8BC3D3939B43C8BC63D5A251CC3130CEC02138A31B36E45E3D5DCBDB98106EE2D2E19A2A8054A81623262C9876D861872FBFFCD21544B1E0C13446388B70436242F168728D36B471202422755B09D6E9D3A75F7BEDB55DC7437414D627C292FA8DEC514D141FE045A8A276ADA4E736D2E4562D8143EE311F69B04F29499902872542965DEA2E5BE0155C0864B88D4628AF5AC6A8016228BF112346DC73CF3D3ABF5F7DF595A791BA8E58491247EB3DCC7E366F83394D2D3A3A2FFD69EAD4A953A64C41753169FAA274D575D75DA7DFF705CA331B3D3DB98BB68432A977BE6E827A57B32006D9B470ADEB33CEA99BCCAB93438D3F6DBBEDB61A89DE822081A9D91C3623476BEE3F5869894968EF5D7AE9A5325E79051786B9CC4F72F8EBAFBF8614052E4F1E5D0A994662BE880FE72070ABE8E1C42CBE1D7A6E6E1AFF147A1FF1F9A87A4D6FE0B85D0A5477680720BDE8234241C6F9DA204632980A82EC550A7172EBBE56BEE25677D30B8D61C890216FBEF92625B89EE179F3E6690F13814332138473596C3334A9E4BF31076CD9B2891CF0C62AA5C2E8B3AC71F537195F1AD1B8F946CAE2DE1D007931FD7BD45147BDF0C20B9ED9CE51A61CF7236D204113415271FA584B1D8373CF3D17AE061A189C7FFEF9F7DF7F3F063B2327E4E5C2891AE963D4773370D1812EC141711CA91E32DD2A68481119440B0CB374791956AA95CAB871E366CD9A65DDE02E754495396071D37715B855AF76C92597AC58B14242CD02AB1427295DB6229904F91FBBECB28B9CD1AA5C1A715442C4ECBFE8AC732BCD0364C56C71A6452F3B66CC9899336792086778CC806371C86882C9B1956494C53EA82E12AD79AFB8570DDAF48EE23735AD786A2E371B7027380663041662571B78E4C8914B962CA98A7CF4F7B241E6BC9789A6BB7E3EFAC7846163C13A9D0CB0EA4A9C39CD406E6CB00C2570A79E7AEAF3CF3F0FC77D5F6E01D9087C2C1087B9DB8FD71AEFBCE6EDEC06F84C514982DE825F1AEA7534A2B68A14B96C6B8AC539C2A6A941B8DF7EFBEDD24FBC9415867E298DA593EE3C5F8C6D5AB0E23610C0831E8B0207EA2C74CF050B168C1F3F9EF638086597446B18FA18BDEB39FE2E4637DC3A054F111BAB0A9467799532EE526F813D544A8DA79C8C67D19DD9B13875ADAD2BEBA2FB6BA0A271BFF8639E9CDEDC273B86B23D4E0C08948DABE17DC44A043EAE4A22CBEBB77314D067D66E373FC4AC440A245FDE3650ADB1758D64F2544456869273BCE79E7BBA060F3C9A4B7B060C18207FD2E456B653B136F4E8529E281EC9E879773FA8449F6CDD8C1E3D5A6ADF851936FAA27AD35349D844A8A7F6E8B1C71E2B230290646C475502671B18A6D703E9CEEF29F0A5C20CACB96362D4F25A43831A4BB973B0959CC64933C11A012D1D2345A545C2A86400DA2B975D769994BA6E75F5D557CF9F3F9FB351E3419AD94A0B40AF08DDCD75CF8D76226B475C818CE92B1471975AA469BA587222365D438E551CCE44381B9962C912AD067CD40A75E888899A794B05108FAD661BC50760FFFDF77FE79D77860D1BF6E0830FCAE9FCAFFFFA2F363DF49058D08DA2E4D47773DCC20D6DA00D02B3E6FE396EA06B498406AA09E1627968B4148170F64A759F0E15F63722128DE812934C4FD1BB547A77D1A24548B11F71FFAA0B303F569A5D819AF0462B345720E3AEB925E2DA93DB4A3A830EAB3647D582D8678A38AA24AC3E2F53F8965B6E292101816D33C97C57F383ADB6C973E43A5ABEAB316B27EB74FBF3A41535BD529CF265E5D5FDE94F7FE28B383DD41AB84A02EA02EA8E388F646A8909A15F7115105F98532933273857C5EC1974065A05998B26B6A442E6423347C1AE7911284F48A1D75C6C746DD6FEFA26192E3349A1963712F146056C6FCFF8C16857C5AA45829778F3EE25C0875991AAA60B29C4576C076078A58E92B6666060ECF414FD6113757972DC8F072FCBA99312AA99923F8E86F61B9148BDA38BA11BB9B996C195A95B6E985B11FEC15A72BD9F11FBA62B21000330458FD601D13EACAA38FDFBD2542DB0639EDAEB707A9520BB202352E676D0C6DA6AABAD48EFD3BB036B5A6AF28B2FBE30AA0D83345A4C299842CEE5A44220B20B591207940CAB4945941F5CB1B4EFE1871FBE78F162588B538E5D786FD930EFFABE80B463115E6A6F6969861D123035028E6D87BBE31C3E8A990809E5AA94D0B14D6DE545BE4FDD04A811C10D6C4F83413A413755E349816CD2CC9D35EBEEA2024D9D06A3D9EBDC97BE88161A730F2D3BDA97D9D3B0A57A11C4D8B692FBBC7B49CBBAFC8CF88F3D307D4BFFD598CF38E38CD75F7F5DF644E472411CE8563487A86ACBC8198E880FE254B84D4417F1E62969F8110AD238203C4B5EC7F5637A6BE9B9E820F6F7FE35EB9B0A852491A4A9937BA7535015B1A090AF99D93165558F1D3B5692221585827A778D9F9026D23C2A42934F3933D228088AC98DE907F7FA74C8D1D5EADC414B294DF9EDB7DFEA4F9C8EAA715A2C103BD5B30E39E490F7DE7B4F1B892202A3AB4C0EAF3DA0B30FC2D63484FAFA8D37DEA839D1085381CCF22348EDBB75AB49BE3454D8D74BFB2752341B56865C226B8669EB042D5F44A9E3A294660F13DFB94902B61B42574127A1AAE6A72777864685580EC4D3DACA0C1B462D1178B8F7DE7BAFB8E20AB0321C61A20B64C79C888DF4859C9A94C3A7A99D8897AB11AE94512CEE9E022D01782EB466098AECCD8318418A42FA868ED4F080E2E3E730D57E47DF0A01E2AA21061F49461DFE01706E226EA39453E6C6E7C00E1932E40F7FF88319D9604ED54421D0B41B31D78C8435059EB3FB5DD7B15201C7B204FD3C7BF6EC993367368AE6395161F024A632820BAC2AEC6AE89C482FE282A011A3024E21A903911077888DF34A663800600E30879010017059FC729DC3E38F3F5EFEF711471C21A9147B5475DDD0B1FE0C6C213BA011E0E3D29D9A04973577DE274636287F8ABFC1DC4601BBA444A2999349B126F3A9D1C2F9100B6131473ACB4EAAD691B720A6CDFE062152F5F91D76D84126148C89CCAD3EEFC6359D97FC12D93DCB962D23A514DBCA968296296B5CC35C7FF2939FC875368F29297F37C1E4F8C1209672CD831BFEB84EC9E11D78D3AA6C2324085801EA501D57D4B4ECB8E38EDA3F84BFC8103B7CF4032F6C8856EE8B0752C37166C7CCFF7B71E9E69B51017B2AB83FC8DB1A030B548B3EB6CB2EBB681E060F1EBC72E54AEBDA940BF7356003C4224A03A7018DEBC82A62CE7E1EF1616D6CCC477B4B1419D38738D5F617C70A8C24D8AC11DAAE51B0F9E39DDB7137C3A56C119DF7871E7A883ED991C426153066F410AA5733A657D090282AD55BE8D103070E94B26FE4EA11346B6CB9135DAE18C9334594F77C29CE17E3A2DB6DB79DDEC80EA8C63F71E24479F38E42D5D4EBDB31603CB16AB6A4455A99C28543A7CDA96701C74939801C33E50ECE79F2B12CF17F9090C60AB0D6B15B576AEF1AC20E89002BB8C36CE5F395E85AA476C2108FDF80835626DF8E832C858EA3CA68E6BEB4AEA0F3A8806496B22DEC762EB2BF4696408482794DDBC4850B179E7FFEF953A64C917E6400FBEFBFFFAA55AB6223C5AEE58ED6F1DD0FAAB371104EE95EEE6C45EB2E90694EBFA7C071D8CA2C3320ADAD35894DB94D4D7C67832A5D32E1A98FFD9EB03B62C75FFD5506357B3A164AF2AF648D6699EC2391C02A4F0EAA1744B0F57AAC8E90E0D086C3C1AA29E74839B5E62239C6465D2FBEACE482164966C1F70D9933E0101FD7E5EA8C93E081591DB0B8AB8817BA0EC68E4B6FEEA0DED74E7F53BA2EBCF0C2254B9620C87097C1FB6D3252C2833011FA72AFA4D8C8084E41EFFE54C4FA623990398CF0D4FB32B377A3C0B8EA2B648E35BD129D6C1897BAA64DF5B56DE6DEE088124E1DDE89812AA4CA7041FA0B5273DD2AB11FCC73F61B0019FD408317CEED77FD6CEB597581BAB74242740214AF5A2FE3A49AB9C585F6E7F0E1C39F7FFE79B83C7D5A4DB2EF824BE26C4435E8C6C15601D7032117DE9E46326AD4A8458B1691B327FC130F94F3C15DC7C932D93F767D0E2B6E91A23BEBE90874935AE88B26711C3972A44ED689279EB87CF9727842503CBAA4EAE6CE9D4BCA80DC9E8FA1E3161BDAFBEBA5F6A6524E5B7A845875C481626212ED684078FC13D6395202BB1C8B0AC76693204DD33EA08323C7450C44F786EE995B6CB10565909037E162729A2EBDF4D2FBEEBB4F7776FF031C47BBD7D6EE2407D9CFA88618D66E0458357BC3001466C95979C3FBD96054D0D8DCB7E34E4EA4995984E1562AC5D8FD15EF73B72D90F4D673C90B98119A12ED98C18DE2C211FE18D721ABC2CFF7DC738F76385B145673A2084608354269591C5E8C10D485A0630F321391C7B26EBD091825D2E3AE45D356663F95D8CC1D9CB10DD8087CEBB6DDA8CCD351D12BD961C508E0846068FB0DF5E8B163C7DE78E38DD6FAEE4A218BF2FAEBAFD7B104FBD095D52C2E1B51325749F1E24E4873C93EA064B3EA3EC71D77DC5B6FBDA5910F1D3AF4EDB7DFD6FC38E06C3E01F0F1E6BBB11CD1670E38E0007DCB4F27AB873BE5C177520F5609686FD092E95A25A08DB8D6E36CFAD43F62AFBDF692BBA0F15032CE2F23DEA19111B08DC0F3CE6AEA117A9664628444A69CD0A5C29B0C25CD9509653742E9245212EC1E8D8F6A041667DEACD1A8220D001492830435A0B69A798EA538B6FAD9EA6E2A473E025BB05FF7AFBA509F0EA5EA925FFBD1471FD5A45AE8138555A731432B9632EAC7FD85B6DA6AAB934E3AE9B6DB6E734E2E6682987CEAECBD102C0D2FAECF134D41EBB0E5800463226C927AD34A173DA12533A9452A42EE3A385AB2CB2FBF5C8A9678604C346A0C93264D9A3E7D3ACB41B071FCF8F19F7DF6D9B265CB48BB02B1DE7AEBADA521B431E4F16B78FA0D68067A0CB83026E2465B994B21756BBA17B575D4825684BA2120066A8E756A3ABB923B275AB3DF785FEBE956A87A4FEDA95F42860E84122CD43B5E77DD7593274F6654BBEFBEFBBA75EB52F6BEB0BFA12871E4C3B95BB426388C183EC149F544E9A103070EFCF0C30F1943A3C08723580C0626D645C04333AF4D459514E3DF71C71DB5C7B45574B7EDB7DF5EE274E79D775EBB762D5AA3A6B208616ECC798CA43212DDEDF3CF3FC710715F8DE8C7A7DC94857A7A0D9BD8156C24D888B8E6066FC2CE41FD6D2B93E720674AE602EB5BA980B1AC6390992D62A1DC287A806B2E3EFEF863EAB253202F751CC3704417DD1B62C720B0C47167414EE9672939292DCD8E7E09CA91978CEC9AFC0B8889DD8F5DEF57D0CED66FA04136A567D5FB723E298BA2025237D4AA0F1B364C4F9776C76A236A7AFAE9A73FFEF8E35DEFE386C4BA21C5EF085F24179F893966A01CAE70D0BFE79D77DEC30F3F0CE297936C79A77F252CBA92EFD758CA787E11B755D37CC2EDF0E8D8FACA2BAF1075A9A9578EF87B8CB694C32108326C7CEC301F54A33D2FB9E412D9927C1E919D024473F4E8D10B172EA4AE86109039FA5D0762E2DCFAD06B2A6A43F522FBEEBBEF1B6FBCC1729F71C6198F3DF6180A4CAA4BC6D39D77DEC99F527FAE56AE7065D8921A12F429343900C7410FD17A50DB8F782E991169113DE5E69B6F1E376E5C1590DBA916A492FD485D184F0639F76516B0144282680EE008902F4A087036A377CBFD29D077D9490A7DDAD3A6FA8B03EA7412C4B6A3BB569811D01FB339EE481281073DDDC4BAE693379AAF6452F0F40889F27F234EC7423F26FC4053EABF3E2C116A64F9ABE7622B1C79E491B2D43506EC186D1EEDBD112346B0B14B21D6CEF98979012060B07A21815347014CCA6E1C265ACA25C2B02A49B0D3012515BDEE5326774326633D136A8ED52B113615C1CC0E6752B6A7B31081A22EF7407F1B774242213278A422C92515003A045E528926A4444DF3125369D2B00B160AF70075C214BE552C86B846F10720EEE4C2A45308FD6A909A64B7D4E37D75BA7588EEBAEBAE2BAFBCD222CB85E32505CC4CD679C02E3C47AC1C7DF4D12B57AE749728B6087CBCFE162B0AE4A795DBCD72B1006CBE0DED1D37F94023370971C240337EE185174A3E928872ECDA20DB94BD67443049440EA78D4DAA05EC8857BDAF513F78C0314268E3D420F81AF46623D44FA70C04D36A31A40863D9488392B377AE8173157FCC983672396C55FBB91ACF3E16EA3472F7EF5471E19A603AE0B8D7746B4FB9630C69A4280ACD0FE0E23C1317E028BB2208C005FD398E38E288175E78C1BCEA6468908FC0550C2E4D39BA6EDD00C6B5EAD58C774D856D41DC1B1E34D28A6681AF6728AB9907F33769C6745864BB9010490585B286A7A77076C82DF5EBFE5517C6B8BBE099B6BA8AE2943D5C2A156B6416688D2DD69AFBC8380442C319883F5B990DD4C10F57EAF3F51B6EB861CE9C3974AD60D71921D1CC5C4E350AA6C4B52251F3D7BFFED5FBDCDDCAF120ED8523E6A88474C4CE0373353387FA9FFEE99F343098B0F481534E39E5C9279F44677BDB388318AF98D94D81E2C6253D4C5794B9CD4C598A5B8F7CD383D88D006B3028CDAB5563A8E1C3F1492D3A459B7013B9B82B2A601FB72DB7DC92A085259EB360B8A1A4186CF13BBF03179515B025248EAC83D5F68E6C33B1401107431A915010FBB62774C3C41F75FD3D75D8407A017001EA8C6662A7F4B3FE027F60D82678284B45F0594E39D9AE6A050C1DA41F6E1B1A21D9C4939CCAF16AA6F6B275577E46EF7C230F65CD02F3FE46333A714BF081301A0214FDA4773BF5D453972E5D6A0A536C3164849CC86BAFBD16441294601140D1DC142315885F9F49E6C5E9CC9E8AE68926CC8B97F7165B109955938B32BE231536574C48EBF784D1C8FB7A96800B113535E2CCF40BFCEC4A0CFFCC4D08BAD67B72C0025D69CE268E768F375C15E1092058BDCEAC59B3E465CE9E3D7BEEDCB9323C6B9E4B034A7D60F7DD777FEFBDF7FA6A39A51B99D501B63F76085FD1D8860C19B27CF9726265EC45F9C1F7DE7B2F796E9BC0359E3AAE0CA1722870F53A35A8DA1F7131D53675395A1137471CCFFC91AE76B5AC214FA657D07E7089943940F457B9FEE3C78FD70E31477FCDFC479E3C83AD5220A831D9322AD6F90E770CD487F90A75F3C83BF6BF05371683B3F8291BA01640CC79CD38F5A0F9F3E75F7CF1C5AE08E2D8824DC35221676692042957CD899CBF850B17E272B14529A037451AF13D8AC2A9FF71A0252668E226D4E3501B78BA93264DBAF9E69BB186811DF4167D215328A24343986829A29C3CED36CA1DDE885D4F62F2CEA90DBBD116539AC956C1D9E949B6B96010965996B0833164E3B3F05391A2AECAC32F8A10F456A0EA4408C08765E08506306FDEBCB3CF3EDB2018FC1992FD314BAA8922859402EF951D5FB308185715BB126DB3CD3612C8C71F7FFCD34F3F8DA88CC0AB1A79528F068F0D6A634905D50706B4BBE093FF8244F32EB5DEF50FB12D105F79E8A187CE39E71C7632456536E99AB9DF7C23F4CA8C8EAF3B43A722F0DECA64B7751EF0F4E9D3AFBFFE7A2AA9A920E25EF6C9BC8766CE9C29D75BCAE9DAE24AEDEC2764FBF403A5B1E85AA3F9533B16BA66A2010B60927CD7DE0EBDA768F58C04C48A77BAC5894F3604E72152DBD42C7C2B70935E71C515922C9A476D41FDFE6F7FFB5B2C5A9550D6C67AE4914790207ACAA5975EBA60C1023A354148C943F937EE69E780751302A4555C1F44B64D79AA3B4B765310E9BA676B027FAB93F233E29B2480A032A899876620BC445B50F75205AF4724FDF4A73FD59BCA2C93D7EE84B79EE2523149019D01A8EAA3A964906DD590607A019D78E699673EF0C00384AFFB0B9EAABA34813A9F7A4DD90ACF3CF38C8BA3FA0A26B83DF6D863FDFAF504667A8AF63E941819319B724883FC3D3490B6F14B7D6C089042015183E236D31C47EFA69B6E9A3A752ABAB695B971FC617040C056C96598DD5073AB91031A9709AF7744D53532F702F5FDB8AD29B7736747F504EAE9AEE304C44E89ADDE45239413CCFB229A314F8F3CF2C8175F7C11C094AB5C8C0A76B180467BECB1C782B18F891B23CC35C8942B15BB8E67C28409B272308239899AEA01030668B7BB076DCA529B208A21A55657299732B74233F694ED60A2592CAB8F1B05786626C75070561B1719B41AE7021A8D942DFE58631A5736722D59C4C701A742AFECBFFFFECF3DF75CACE734B0D4731B6387262490C8D2BEF230F40159459A7F685CA5CC64BB983CC414FA8EB45368400AC009FE585063442AE725DA79CDD096B8F3AAFABD5D2F1C1BCB3DCFF929A79CF2DA6BAFE94FA41B40A1437074D249273DF6D863541563D811A622B4101BE9A600DF416D9B00C44102F208AC854F7A4FE87FA31F22A0D89BB9EE2069AC7AB0249D9947E2E70D85775FB6C18307BFF5D65BADA25B834C5A0EB316C37CE586A1A7D0F589AF6F1224159147D8839A2F629231C1C9E5DE76E42FE35F41398D1C39522E17E1CD9A3A2D1B8070279105D7EB80FAE1F58969F88D6CEF13C8750731B89638A8A6D4E80B54A2EC634973795A1BAA49F37D2CB5E4FAAFEC3BC810B4E30DF931959A145BD7A617C41BB163F012528EE1573D17CE07A02B7AAF830F3EF8D5575FAD3798522122351ECD18DB1A5880BEFBFCF3CF93FC4678C9035EBC78B1FE0ABBACE68AA466BDA7853700FA89BDB47973AB18B02010CF38E30C6D86193366602E687BC7AE21B6FAF561C40DA460EE6FE300B513879A76BA46EA56B8A7BAB91CE2AEE3896876244E33D308EB7190C1816F72B3ED94A1EFC6977AC2890C394401F81F7B9480D65E7BEDB566CD1AB7FAE0A176E66214AE748121700CC0B89E943B8B130033DD9B09E0F88C3727A203CF9B7324A90DF31D65A006BFA4C06E58023DA5422CCADA407DBA6DAD5190080A1EA1DFCB6B97CBD16C270E8CE0DE54B01DE8BFC430CC9CC3B993490A5237D6163BA7A6FFC65CB866C0861A8B4B489F808A398EC8F4E9A1840AECE64690572B5CDC3FC6201D278B9CAC1873FBECB3CFCA952B1998E6509F3FE28823E49BCA159E3871A226846A14E328BDCA440BA865F096C0A0C76399346992568AD0A92397467239171BBDAF1F7772ED1D39FFE29947DB2127298F74AF179004D40EE01A3169445CF0FE09927354255E5871FB397D99FB9D50B19E22EFEBD9679F35D2D30A3815262CC75C43D200F4B86DB6D9867C4AA502D6825D75D555F4CD26C642121BD6025C7E747ECAD959D4BE83336410F575F9EC7250284570658EBE0E9EC87871278AAAE69A6533019E29E659D7566E5D62E4179BCCD124E435FDAA52A6F0361B5C8DA0B70830C0C106E3E4C993B5D56C9D6872522686B490A26ACBF588175E78A16663EFBDF796A552C2A913ABF781EC3A1EBDBB3EE658A8839C1C8098304E2128DAD9F6D1CFD5A6C4C0AAE7A6067AE33E3C92147A742492ED1C27C01CDB8912796447F45C2A714DA7DC088D579129301ED774B3217913ED7722635586547FAF88C761BA2C6D53361989FDE20391B8321B095AD98D78B564575E79A5DC41841D625DEA76E6CC99D75F7FFDFCF9F3B53DA067E140757D5F039DD8871C7B9B5651C26A30142368CEE56A48DC5098401F27AAAEC905E867360C1B03D30A3FBE2FF738E110E986DAC614AF6F92A189025C5379EBBBFA17E5C4DEC6BE779A16CBC0896143AB9867F38BA1901C91F6431DC76A84E6E75121A58CF1B64A0022AA01482C5AE6B822BF8497B1B6D38B4845AD58B1A22FF32A1B9D8AE727D773FDFAF5CCB3D608D66B8FD68128A2DFD8DF0C5E2F3570E0405900B244B9A13DAA071F7CF0CC33CFF4CA62CEA6ACB95B1D5D8CFCCA917690B783381393D75801F3541395C4A5462043FF84F2D0A331EC76DC71C77DF7DDF7C9279F7494CEF103DD0D2D3868D0A00F3EF800AF915C03A971276B4A94BAA9DAC72D7DAC73BF7128C8A138AA64C25A2C2DB72FD30FFAA47E8371E9423BB029F46CD644711E77D861076D78B354DABAFD2E5FEE2FAE276A4EFEF0873FC40C0E51AE9403CEB2CFB4BE73E6CC4138D01BAA2E04AD2DA54FE8D3D80B31A340B6D2FAC6FCE3FAEF6DB7DD262B12B9C9DEDA6EBBEDBEFAEA2B9C06FD0630B7568BFE276832ADDC0F41B17A31F4DF5D76D9E5BCF3CE93C7607C263E74C4345181AAD142A544B9145B1F5B521FAECF01EB9EC3860D5BB4681187D380F294B9C7102BE673C7B6A5922A156AFEA28B2EBAE38E3BF4457C029B6925025840DA9A167D009444D7F1E893175C70C17DF7DDE7FA199BFF4EA8A7C27187EE4E6BD1B53FAE6DD268F1D4E4E0E93A87F1C136C0FAAB21BB87C344FF12E74CED5C95881E4CF59828622ADCCABEEA406240500567126FCBCA7FFCD2C074376D5446689F1200045EA32BE31DCCE0652598621C8CE3B370E14259B49C919EDC4F4D0B01341AD150B30F6B1430093CAC2BC6C0BE92163CE080035E7EF96572A586CDB35D35008DE7AEBBEED27B9D7CF2C99F161769750D4FEEFEFDF7DF8F643736AD0482AB5A17E249B8C27403236FAA71EAE6241A7091E109700987F3FAE4BC9CA9415922B61CC4D32B133680D623D675A4D05C8FC68204276CA0B84F1FB6053975FD0C039AC13B1B72CFAB94BB11E88692B3AB56AD72C919C6A2C6A9E5D36E41D639CF3A77EEDC3163C638F8648AC76668C340AD9AA967B1F338328CD30142427A7115621D941FAA3B00FA654E407B4820ECBEFBEEEFBEFB6E8941281A07FAA43E4F66A799DB3ED2D9BDE40FB00AE04B4882B0332D8B8C1B8029C8ED0D584A27C8D33FAC800D6A019001BC00278175717F201D37F8D72828A272C71D63B5972888C0093CFBECB39F7AEAA954643780D0A6CC518A89696898D3DB8E8135326B5823F334103DE58BC084F5AF79C237A1F0883BE100C5C6821AB1DEF090430E912727CDE42C941BAA839570EF17AF312BD72A3A1B6AA65812D8096ACA121C5BC7CFD35ABAA0B0140D73C1A84CC8534F3DF5E9A79FD656C6AE97CA97CF8DA4D30D478C18F1E8A38FCAE494A35F458CD0C8E56E9EE8E1C3872F5EBC18230B418C0FDA93FB1DB9B08FDF6B4E88036307D14F148999729910397C962465FBBD46C0B1E73005F415B88DF80DB1658AE7DC2AA4B75B7F5C824E74784531D4A352B1F1C96C1199AC2F236986DE262EE4277AA6A5919C2293875D0C521D9B66E2C4890B162C20305B554E03407ACA942993264DC2380013B1B972C0C61C68F6D0A0F4F532BCD3C1D2485B21313778F0E0E5CB975B0B46D8A05E7FD75D77FDFAEBAFB142C85FEA8B4855B28655F35F1582A6644E17AE9B61F3C4BAB5E1B507F45F0AF90872E05A6148B137A427A48CCDA540BA9A1A5979E79A6164A8C4961C02ED963BEFBC53B66FD5BC39CD14D3999A49DD56D3E8E8ABB61F0E5664498B2409A4D8E38AEBF793274F5EBA7429616D2B361003A95B089A1F1C7234585DC710468EC852900A1BDA5CC72527D8AE24D117D617133FD21E943A4FB8BC9004965F87283AFC9DAEC9D6235CE98E9266784657718E5A99BCBA5411647E122E0497A9B9E102229F228DE26A0BB78EF56CD04ECA9DADF549C9138DF0B3CF3E837683605E2985ECD8A704A0DE62C08001F2AF9AB9890253618AA42860E389ABBAAAE48CAD10A75DB54B350C895CAD0BA62AE1344E2E551BFAAB5E90591D3A74A876940F7BE95D745D79E595B7DC728BB55B4C25905F70E20630602353B534326F97EB72999C73CF3D572E19199F4A054CD448D784091324E6F424B980D267B7DF7E3B6EB806A455C4148A859EEC423FCF4E0F0918F3B33B2F9DB2475BEFC1E803DB6CB38D16FE2F7FF90B77E8C9ED441A9948851084167EEBADB77EF5D557D973DA04645E893B11BEE684B015DC2FB3EAB92C8CDE54CF72F72772788692EA8684FB9853CD95963F72ACC42A498B54A3E328900566AC9FA9B8E83A1E8DD6940E7AA26E2BD57EFAE9A73FFCF0C39E494D0B47A82B24B8191A9E58DE41A65D937345C9C948D483B4197EF39BDFC84382D1A26AFFE8D86BC9A468D985FBECB38F5C07CB4D3E6099855D657099237BF5217110069A8AD8652B6D8E0B298CAF5F4A9FA35C4D6B0A26A851B0B4EA932C3D2371634476A0062C3D77EBADB71AB280D1D61758766B0CC1AE202CED409D3B90A8B1C88D0490B51DE45CE43880E1B4025B16D85AC6CC998AA7D866AEB3C8355881946D0576174163BB0EDAD83A6BF813BAEDBFFDDBBF3DF2C823CC2AB961976F72E12D8D1E3D5AC779EDDAB51B724B4AEF3119131A898C8C2AC385F3821472C11E8E1A963A1C7FD81C764F5BED2D7D4A97264793C9309C94614FB261A831D5C144F1F7B6370665EB6A485A23CD06707AA2B2DE1500DFF817BD8BACD76FA40B3FFDF4D3E8EB7361281078200867E20440F8A5DD852AF29B6A4E08EA38B1E8BE1A2E882AE5FE5DB9640A30A2629424A4509ADF939BFB6ED2D1EAEF459043534DB930AE0514AA76FC08B440C372DD75D74992132EE28BA478E938A7AF68C37CFBEDB7BDF972E3793689462E934B738203EDE0444C88D820C024E2743B11998AF00F79A88D919B9A038F58349988E671F6ECD973E6CCE1F1A02A4C454940D2345DD2DC684A7B9CF0E030179C345C61D6A3BEACC5C420AEDC42349815DDE57AC04A8926B9D6DE3B0FB16E5820A6438DE7A7EFCA219B316386DB23A6C24E24DAAC77D48420DDB0FA6D503BC6CB23982553936304A4DC71D6AC2EC4DF6A0E3F1D1AF0A7B10CF45F28815211388562C68CD929673137B4F7C7A53F57C489C8D1915D565FD8EEC3C916AF0959B732DF19261A2961D7B631E1B108B595BB15994CCAD0DCAEF7C76A31A79541F59BE554A7C0A08BF34721324714943BF28B98879D5136E499679EF9C61B6F80FB30E5ECA1871EBA72E54AB0EE3A11C4124C9DC8B46829AB38B76BCA9062CD2EE044D72F60AABB043966CB0C9FB4B2C4A5035DA87D857DA97FA9698667DBA8FBFA28344B697421A02A07AB3C5D865B936FC6EDE64F8485620ED8D88E940BB8BD796AD0B391FD317534E1313799E684765244173C1568414F6F6FEE65D21B5AC7EB63F4E942ED91D8327948A4E940831A22604DE0242B9619FD9ACCC8FBDA6BAF1D76D861165CB2E1647B71643AA14C5CF1A14C2319372A1798376C05ACB148B50458C7213A2A9A6221752A9C99984173450C66594FD1D7044046A4148D8B15A92BFFF1A3CAEA48144BBF6A605A4A496C99A7CE976162821439F8E083972F5F6ED25FF6B99700BE52B28D00179816DBF764211B99D7D681F74851D5C8F5C48EE41B0E82D42244FABDE2F37D2D1C537B329F234177C2CD35652950AABA95A6F9376C772314D8E2FD7D2E614C1B62B27D6EBCF1C6CDC84064C628C25F575F7DF52DB7DC12C1235806E6DDE5D5860E1DFAE4934FBAD6DE5D96FD9BB87E5D1B9557190AEE52C2BF9C5E872B2D686C21A5D062DDB1172A40687579D14517C9BC3025A44F57646FC622E637247DC1F74F2C2EC374810B5C73CD35F3E6CD839DD548311D129D192C18F22588EC885FA83A755857A07FAD9F526ED4111527B7C27B4BD93BD7319343FF97BFFCE5C30F3FD4DC7AFC2947961C7BB47B9142E48089A2BB8B54D433CF3C630EE194CB456A283CF14DB5B8DA3F9A01E619158E0783ABC45E228A8525E77AAD98EAEB74DAB4E1E55C4A8E984CC3F5BB26796EE4A6BF35E9765245B6A45D7A5B7F8E08447304AC0C2CF2285639E288235E7EF965EA824A33D3C8DD005BA1F7577DF953D5A5B99565998A40ABDEC276A1A31A7661EDC3B532CB84491BFC5CF3D9D96AD1DC1285A6F2CA090BA7AED05296AE244A528E08BA751D921DE810B918A346222FBA96E0F2CB2F9702B6056F46681F161F04AE527F7BCD863686036C311CE5D699E8121B0AEC551C380A17C1C0B28B30B322139653C8F570819ACD9302F99A47DE0C14D329735960E290E340B600C2870391F5A27C884A04820AD4916BB1586B387FF4579422D61E7618445A3449339587F92F6D76B859723353EDFAC54D25A95F52989A72800D66A4BF3364A676E63904592ACA6CB6DB6E3B8821379702767B5AA34BF4F2DA7084715A05190D7130023EFD2558D0B93AF9E493EFBDF75E16CF8CE735A1B3FEEE9246E821BFF7DE7BBFF7DE7BFC49DB17642CF32E6751E7934FDA4701560A25906F18A1CBCDA28D923E06540D83B1A6FC030D3470E0C075EBD6390EC63D717A743702C218BF1AC9AEBBEEFAF1C71F7BF3F108EF01D46A8CAE10029527B77AF56ACD2467988995672C592F850DF93EB51366A9E58634094939024398F4FF29AE142899C84C13184CD50257624ECFB5B6A6CB5E0ABE913F69FBC61E243B2D15B400FA8DE4B2310A464F94F67923301999691CC98B7C6CE506677C57ABACFFD6B435D4EF355DF7DD771FF0783252C046AC14598B187EA4B908A9D312F03526C3FA8AEE082C900D9498506F647209009F9D557CBEB458325324B2B54CAD4CC1AFABAA4EBD955909FD1413F220A92D5877DB6D373AF8EA0314D653A1D113BAF1C4129AFA107DCD8501D1CA4C14ADD070535275DCB8713367CEF4D8B05009E639E3EB7973D1ADED30CDB3EEFFD1471F69C702417090BCB7BD454D89942A85F4B32446AB20BE45F3198EA747833EE3261C49E32BE3EAC75C4634B0BCEEFA13328A4C133B8A3A226E5E32E04C628C2581EE29B5C9E17210252AE00844EAD76239141A131906D9A5F696BDDE4B9164C6C15A62A5A4B4E97FA59FE557DC7DF7DD6C803BEEB8E3B2CB2E239978DE79E7CD9F3F9FD41245CC5A7D2D07EDD76EBDF5D63163C6B86AC3A87B3BDF31C318FFEA35A22EDF701084C3F721C958D09D42970F08CA31C3B5F0526672DD005BF5F70074BDBC63346E09326D2C6F4D3C7AC7EEB0C2FABB90BA1B5B2D5AB8117DF70F5E2EE341A15A1FB3D8980E863B19FF092DAA7D0277A730EDAACF556FE85FCB13A3E5D5791115E7E8126F81AE84BF42D93D7CF8F0071E78001F4B2EF5C1071F0CEFA38D417D72CE9C39D75E7BADBE2817560E2BA17E82E73C9DC268760BE63C43D500F427ED10CC465E3C9A7798F02C072D2EA481E06C9114D3CCFCF9CF7FFEE69B6F0CF727B257D3F6D10D7D8D2625BBC612CBEE41B5505BE9B837964A27054F09E2843BEE67C563AF3B9F70C209CB962DD3DD8C5231F520F1370DBB7EBDF0AE6CFDA4C0ADC8DDE213A9427EECB1C774677697BE4B9CD00BE733B52174DA71C0D09B8D0ED3BCB566E690430E81F5A5669C940E237D0052D4E4DA5BEDED11391DF6B653E87FC75EF5D419034C36DD8EBB651CABD65F943BE540005E346F9A3D077E6354900FB3391D38F1C62871ACA6EC6B3A7B1D9D78B3C1E3AED8718F2146161D2389614486CE1270C4EC2E31F8E19E69E654F21CC65A6AB374E90EC71C73CC902143468D1A15DD6B6B383768E180332AC3C5D969B0A822EBDCF3CA87C8A9E87F5C013743EF87AEA5C3CE5BA560C74867E1EA807EE5E930F65806A6C01F49D00B97CC3C0D903444CE090ED186DCE2C298A11875B7E08D0644CA705A4499964F5F3CE79C7364F58E1E3D9AB445C32F96DA8D0BCE33A926BDCC26737EFDBD78D081071EF8C1071F8C1F3F5E82383EDD50A95626C4E9AFE78A2C76E11DB356036EEAEFE5ACB34397C451A9F792BD22A7810EE72E3028ED33BCD278C6482ED2B985DA5CE7170965D7A3C4D1439CE446A6C66533F145397C3A5A449BF51BED4838D90DFAF006E2BDB02B233135DEB91D1A4E604C1C30986829E38893BDE38DF4B1A54B975E70C10550F2EA719A22C422AC52C06565216EB21289B012086D027744F928A8252874C41147BCF2CA2B29672211E28401D85D507872869D4BB6B7E4C8330FB53434228926F6807A305362FAA6CAE0BBE5965BAEBCF24A0C1102686EBAE57C951BDC7298B7DD76DB534F3D95C072AB5BDDA75D8494898A8C54279C8B04C1BC400B6EBFFDF65F7EF9654DFA7CF6ECD9D3A74FA70524A4690041AB9A73E0A9F4E6DEB1E64DB424C2B123B1CAC7A096D3075C50D4CAF4738DC032FBE34076CC86CC625930F278F0743D69A66AA711B5C43774FF2974B72444E7F810E7B1AFA34705AFE362A792C7D6C817C6A5591BE937CA66307B06AA6BE0C081EBD7AF671EAC0841CE13236DE56E07517A971E41E0C77B20C6115D7E6D6C542B949C59929428EABCB1CD1F9CDA4D46176ED503D9AA2E8C068E4054C0769F1AB9D88CFBB3850C80C09D60FC401F989398B0074C80FD81191AD985BD7C1C1FBAF2FCF297BF5CBD7A358E0AF68A6E22EFF9B6DB6E830311F8ED86DC079AD0022BCE878D1CD4A1D63D41F8CB0BFA7BD8CA9B9277D3E84179B8BE16729FCD9543753D00BD8CF024F43336FEFF555CD43C0083D2D5DF85242B80648933BB59C61F4D30FC57D2D524D8791CC78624377E8074DEA79F7ECA99410B72BCE3E4EB0E5AD1356BD6902B2D51D3D5F44568E50A2572514649C424905B1261DA470F9B0C90142189438A10623357EE03B510C585F66BB133F4BE92A186071BEDA9FF46578C4646D4C6D086C5A4F929A7762C4AAA88353845607A29A870569E6BF2E4C90F3EF8A03E60DC1F76009393023CA724297A3B5A9437027938E01447110969F0318C3C388F582C7CDC9AC5C2D322949D0A3B5A5F31E4C75307B11A6DC15C5091727A0F694530C9038E4E67E41C4ED9C8A0EAC9935995DAD09AEA26144AD1B8BEFEF38DC0EC6F1272A75D9AB981154910F374C63B90B783CE17C3CED56B3F22FCE636DB78309898B178C69FA4040E394EA3275BC9297B78D1AFC5CE602661FA8CC11B87124BE979A8C12211AF9D7E760EE946FDF7B4D34E5BB66C997C0669E89453E31804FA4CA9821F31DEC89CCFC46053E1B739DE83B0A5EC2D856E01ACA65E9FDF98C2429FBCF1C61BAFBAEA2AAC7F705898AAD4DAC68C98E56AD758F10FBF50C09C41F425212E87A63CEDCCEA942953A64E9D4A6C66E6CC993366CCD02FB569414123198CCCD0F8255A39B0082B27C8EC29D94CC7C1C076813726B537A7775698B7062161EC9B4185E87E3D5AF7976C97B7C994C2A754D6464C9F8D292C1A0E09E4B15507EF475CADA235B416D2DDC1C079C97D193A74E8BC79F368E7649FACBF37B7CA71172DCD6355D9CC8F187C0AFD914C1C0AA68E1891513F5E2DAA5010CD2903B81C4172E196C6490B6BDE3DC28BAA04BA239F29BB7A1634BA060C18208F10F8347B08AB4DA25F2602EE886F15D9CC3512F8379C49B5BBCCC68A915B8C620E3C7866FA1070E031A8FD2E91B6D3A0B3462640881BB266FE23DE84A891ABF2298D4DB9CC91029E1432110E12183CEF683648607461B3BDF5965E53CB9A8A0A7D9E0BD5833EA91764BDF4C53973E68C1B37AE06D86FC992B21F861A762B56DBEC253DC1055D06C5DF680E730BA78E9A37DB1FFA3DA58AAC2F81A5DED0F7BEEB3C13978BB4B735EB6204BE89C36CFBD2328F5736EC60ECD8B1AFBDF6DAFBEFBF4FA90659589E85EE4C2147D05BDB97BAEBA5D581B31D63D4806AB6AB7E2F0DF7F9E79F0352D368E5F14F9830018E052771E2364311E2A39B0C39E6627180D8D5F8C429F335A28F097BDAAE8D61765687F0F82F7EF18B8F3EFAC8E81E1CA1D871CB6DD10DCD71FCB62F732363BBB772113F07A12F379A34A96DCADD732132D2DA3533A1660ABC2571569D87620796FC7E9FD0FEEA605E0105CCE460B495B00EAEC222E4C072B0644067526E3C85648600CE3C86A6FA32CACCD5288DDC4AC1104873B9A422F680DDCC08F12234394644B3E8840D8C3BE1DC914ED62035CFBAE146160E63C92C621801E4566695324479737990B880BCB6E58B1EAA177606C8514D92C4FDBDBF268EBE69A6B4BDE69A6B6EB8E186CD32FE947BAD10E5300D8A3CF5FBEFBF5FB34FB911A8C26DB6D9E6CB2FBFA4D6DE6CAE34984CB9E20B115362C3661E5CAC529F7BA3BA5C1F23829D729798E8647366B01B9C1F4AA13284A208FD46968A9C5D6D143C151602251ACBF0636D8CFE8A0EE6BD0CBA762DAC619344721046DAC40E59DBE643A9E8BF35A907DD5036EF238F3CB266CD1A591560D1F59B943590391A9DAA8F9C418E9581952BD12FFCEC673FD3D4A1991CBCD507E4135C7FFDF558C13A7BFA01125A9D73C24ADAAB175C70C1FCF9F3F5527FFDEB5F6B1430F969030C010A1075D0EB6BF269FCDC083C9DA9B0C1F545C20FEE17C4117657357EE310254FECC98D6FE3CF4C11067BD77102CF86C60E986E23934B77FD3CD120233952D16F431A2EE528949BF83230BD32195967E8599798DDD86DB7DD3EF9E413E705FA7548CF3DF7DCC58B17A7C00D6738B4A734321345CC660AC08B08FC890A18BA2117437A09F09FF80CD3850124774D0A1EEBD3CD1377DD7557E9DA18AB8B1D789C89C0DE6586D179365E4B362BC11E34B70119FAE5B469D3A64F9F6EEB8DB3194BE952EEB8CCEEA27ACD3EA27EA9D5D443753A56AD5A054F62B4C97C84FD9B1F118566A27A72F752DBA9D1B78E6A586B8A44E25983070F7EE79D77F46A7BEEB9E71FFFF847570A415C610517F1F98DA260156A71271D9C1D4FB9D5A9DE54C75F863565FDD495C0E88E2D8BE2D7CFFFF22FFF220F4A5FA113017111F93C72D0CF3FFF7C9C6F7660C3FD8562B6A9139605B1C3E64A00A7DCEC41A33FEDB4D31E7EF861577FA60C8530A136067B7F153FE673A360F88C14F09BCB838FB12673E621D1E0CD36EC8D731E5569CC72F586EE5458FD36C1A2CFE1A2F8AA7980699928D6C5175FBC68D122383D5226EED148C02AB73211012E97C35616A90C9586714C17406EC2710C1BCBC33034A48345955362256E64FD3066CC98DB6EBB0D8A5A3761345B6CE77BD5181CB61E802622583996047CE8150F612FF300B0A2BECC9AE530F5660AFE8D3BC0B8290D7139F7B3C36976BFB69A8845A459C0CBD4DD4CD7A7C93FE8A0835E7EF96562A14E3CBBAE9DD7EC6C5D5C72389CB9441C536A427C12054CCA1317B96A9E4F38E184E5CB97A7505D5AA3085B455B724D3E43D58B1C78E08112D6104F1A7B95DAFB1C50B1635B10EB5CFFC5A43BF9E4937FF7BBDF21C8FA7B7ED9B4DA093A14B28ABCFADE3C6EC70B966ADF7DF75DBD7A752430313820D6BC725A9910706A2944807DA253C0423BAD48080A3D17474265393584A050E194F8EAABAF78B406039662437B8F3FCF6464F090504A0580833DE65CB2F680AB781D6BFD2EB7239388A055A837BFC159716BEDB4D34E3289FCF4A82CE3277F8402B605C9B09D46B5BA6DE5EA67434D899333819A61ED2E6417FE8F2B74A538F5496F78CB9F520B87941D62B822B407E0BB75D4C4F5E8BBECB20B181AE7FE51071247FFFAAFFFFAD9679FB9C29319464C114836BEB85163A1C7DEDA29DB74C8A651A346E96562D8C113EDD423384F1B5624B19A99D02BF6F8C482D0B36ABA12B1AB22E4C18C1C550BC980BD5A3E21AE4291D2D24CAD5BB7CEA97BC76430086288A6D3104193119607A4562F20E49CC9FE8D2165969CAD7FEAA9A7AE58B18214784DB9975303DC84C4032220C23D52C0EE6AE6CF3AEBAC3BEEB883B5A3C2A1BF07435371F9E597EB2664F57A732320E729C171686E6150EA2BB888496D32E0881E4CEDB0494C4E7317C43F218BFD5F78E062ECC83CA02CB48F9329F2317B7F443AAA4640A42C37C1137198DD6F91035CB242229DD68F80E2477215A33C62683A22B0B8DC83DD345B6C4E8F041DE0BC7264548D7169930FA71C9C678663F00D894F80D4E3ECEDC6B9DF399F9150B627B76FB3A1E0F06604B92052AD1489EF59383472EB43EC57D3BDA5E214139BAD5A8212B623D277F07B1F5ECAEA4A38385715DACD4A01029D728B6B5E563F938D325B729C5E175F71A652E187EDB3CF3E6BD7AED57AB1011852C461B9B02215E22515FDF8DE78E30DB87AAC892356CB2B08C8CE218A584681CF075F8A67C08E04F3C92BEBB66C0C6203FAAFEF99DAB9E4BACA2BAB1B398B4B972E95C30043BE4602F291B0815BD8B542CF0272BD84C781B25280873FA38F4199D7898F4B598B951064E416CF39E79C254B96A0C8C1C67234F49A575C71C5A4499348F9B151BD61B83963604FE2ACA3C8CDE7D368D4E6D8982FBD127451DC4BD789279EF8E4934FC60017467A4C4BC07B8722D464B9D891E680443F6086A23D38E4098DEABA492BD1524AA0EBE7A387AA47EBB82217ACF3F4446798203D2125638B01F9856BD2198A8F2088DEDC73A906B5ABE78E1831E2BEFBEE031282DA267865E405297DADABFE5B1512C48070E6D85B3F0A8E4E601DC61A6CC63F8448A14A50CA5EF9FCF3CFADE4DCD3AD591024514B968A089E36EE6EBBEDF6C1071F68CB6AFEFFF6B7BF31690658F56496548B422CD694950DF3895048013203BB4D2AAC7B5C0A77D36A15CC359A497D7DCE9C39B28BB1D228CFEDD7FBD65CE82797D998EF17238C141171118832785F5BF4FEA15F0F2D95803393B1C6D432C5E598C41E5145087A54A9264D9E1034ECFA8D7CBEF5EBD76B8AB07D238A1E9A717D121DC95B635BC30BADBDAA5169DFEA63FA939BB4C34DC80AD6B8D72933F6A5AC3C38114C9AC30CC67FB1BBB425468E1C295BD0E101AB5EDB0D508593CE24158D85D1CA1DC16BE41ED2139D8449ED4815A15D84C0A04183DE7FFFFDBE70A58E9E31BE67CA208312E0231AF7682FAC3A3D94B07FCA4956F48D5E87EC4F0A49569F74FE75F09F738A81C5236270311551659253E833433E093C50076CE49DED30E61977903C94F7DB7745CB739AEED1F50E4147C29BFD063231DAC425D0160BEAF2D1587A1BCBB422570699A6934E3AE989279EB0E434E0D4F10383243AAD558BD3283C394D76F799F694E90B81C8D0969183863FA0FFEA97C6BB917F6402B13C2CED79629D0293E8D4E2913A45EE10C3A1822D4E0AC2E8BBDCC55A6BA00DA4C7E303395FE55966D0471F7DF4ABAFBE4A6E3C15E120047AD7839142576433875581B3B05380589343B2E1A97DA9114ACA60138D1E3DFAF6DB6F1F3A74E8B265CBD08E44444DF5D7158C666194324DA6FE0AA8B56AFC7BEEB9A714520A96B5E59DD912D86D3539397287E604D730B6DB6EBBCF3EFB2CAADBB8BDD0D64831684E916BFD2534B040C49A613F697DC911E2BC32451076EA1DE560E90839E0118B29B96C3B9BACAAE49738B6B3E5965BD209BC555082C7E4A8D60BFE4EA7307A72AF2108891CCFE8D7FBD6CC033F5840C82979F7DD7739059C0B98D223B8D708AF466018F811CFC59476AED1429CFBA7DC072D5A90320B201BB1C76026D4BEDC8B9A5D078BF5F4E9D367CD9A75D861873DFFFCF31C522246BCA04E318AEDAEBBEE1A33668CA3442CB1DB873B6D89E5571FB2F6C6D6BC118625CA8ADD16A5E4D65B6FADBD576AEF1D11129C773692BB19A6400A88DC8F07B06A4896F2ADD0EE25B22618BBDE0A554629D84031999D42C52D0ACC6CA02E2580F6C115BAFA301081088368E68E8DF1FC7A367CE423F922E7483727BCE1BE5B0E232D5FBE5C0E15312A8A59CDD3A7A75855D3BB5A77EE2C9E26106239A92F6AD86ED4DD79F4A88CEA1C7F0AB5EC86493A56CF808D7BB515E2A9C00236D6AF14FBC1758E91BF92024EED69EC18D54FD91735D8D6164F2C58F7DD1CF732E215308D5FFFB4D34E7BEEB9E790CC9BA82B6DE48A496A01E3567022044395836D738F65260763804F6A4FA411BB83EA925357351E9DBDFFFCCFFFA473B8967CBFFDF65BB97225567CD7CF130FE134C2008594970FA79F53AE55D56FB6DD765B2930E9FE534F3DF5D9679F9500E548538B4C01436739164FE1843BD8587FAABD75307CEC45B9D1186ACC6DCEAA6E4518DC7541064D786FC53DE4920FB78C4438F637244BB2930DA76907760F7DAEB61198EAD44E6AE12F6E686FCB11372B1AC5E78D3A1F53C4C5479F75D659340BD3BB68B134037A77ADA67E38F8E083DF7AEBAD5641EECD8AB3DF5C56216F584664BFDEB7E6A21D21B97C2C1B448C66E6924B2E79F8E1875DA1611562486A4C98F5EBA156C04064D92106C7953CE01498875371E0D9B748284B7CD00903060C183162C4DCB97351632EFD72F76B2F819E7EF1C517DF7BEFBDF415D531041A09989F6D96B2A0E45F6D4E57F7767DAF66687DAD4720431800D15A59A8980BFA4166C1030F3CF0CFFFFCCF1AEA85175EF8E8A38F6A24BA33A61EC0754F8849EC31565802C2723572A691CBA8B4B5BEFEFA6B8EBC3FEC525A3019DFE5E6A72903DF527B10A2E4DBF9605A43733A22F986AEBDF6DA6BCD9A3511ED2C65AF698C6D2A3A87ED118244718D2F9699434DB82EB8B3E0B958BB66D14B8D874A361218E79E4B962C39FBECB3213077D4DA915EAD1A21134030A58ABE562ED9A29609BFA82FD37DA7F6405D0A5DD4B49AFAD9C68711D77AB48EBF6E3279F2E4B163C73672A998FB17310CA72C2133C01A7039400C3EC7E081C3D1FE253284603E9052EB5176A65105B1B5B9E7D9713BA31DF9FA01071CF0F6DB6F6FDC1255079E129414E8DFD88E0E676152959270C6C7B34EE66169660E046EA2F161ADA01B8E3DF6D8679E79A6542A5E1A0FA863D8C5E80A505317CB79F82E774B66F37991B4A1A5B4908364EC0113699311498BA4165D0949B8A1CD1F493169A01A058C094966C53975D6460F1D356AD4ECD9B38DE6489B2AF3D07D1037FACA21871CA2E32ABBA1F39C3B6BD5CA94A7DECDFD55C08DD096DCC14FDDF9DFFFFDDF5F7EF9650962EB6003384165E33601A734B548CAF948BF298223053DEDFD468B153258BAB95E19C4A32514734B768A35251FC30FE0DA36A307CCDC6A07D29264E8D0A12FBDF412BC98443E2195D5F02813C21044ECC2B4AA4FD6D47377BD62083A82DA6A84F2A44993162F5E2C2F4D9B56B341DCC2F85E9629B660235C8F564805C8137B8B901A02179D8D7094DBF4EAABAF4ACAB064F83D309AB1C724288F3AEAA8279E7822D27575BE975D76AC529C78073C63FB237BD82983A7FC576D36F8CEBCED356CCA55491CA6A286C49FAF57C07AD0C08103F5229A96E8495B9EC2874C496E0A9E93CB49DC229A976AE4FA3A8C6C3B55A6B56121E0223EFEF8E3E55DE833EEDB5DC24896F45C3C4729AB0D22E73C4E77C0A960F549299AE6890A60B4692B34CCA0B291BC69CA6832C080D8CDC4C38948E19F986DD1212E5C266B298844D0179EB168AFF405DAF938E1CD4C214E5F04380008CD82E7D5B790A8A0319A99C72A86D6489C7B8D3ACDA3CE8D61F039A7D85F7422A915D8C5B1F338E0049668306AE417A41F25C87A25051D6CA863C68CB9F9E69BCD29E1F8832B85A87C4DD988D0332885A4EC040111F9C423E582211B5438D47806BC8C0BF3DD96A73E878D7D802C4EC161C544D04694E076DE9AA022B633585609176DAFAE949C6E754CC9E0A04183D6AD5BA779A8023791CB2C159BFAC33C1AA389085555081AC4BCD6C2E111122DD1AC8B1B0B191D3BC6C3B8D65F6EED5601E6D29DE137C612C4ECE5AC4E983061C68C19FAD811471C218564087723D30E1B611113D59E014BC688CD76BB08D3FAB8BE08961282FF88007AAAD35115EA09B6532754F81FB9C8F79BCD03FC85493034BD90E9E36CF5163DDE53C6162119F14DABBA4ED52F01EB88738678B5FC8A3B044006157D9C14E3755D64ECFA314B13EC3F6EEBF2E8D34F3FFDF7BFFFBD7E202604E304451DFA166820C8BD4BB93772132EA7AEF1804B81C1184471077BFDA0A9C37975308030234A8513CA8B13B262C3A4D0C991765E1CDEAAF3C58BEBB6DA54FFF11FFF1133FDF163A5EC9BF13BADCC0DE99653385E3DB9AF0CD9655EB0157AB0F615AD85C910197D8D81FBE69B6FD2D13C6AB2D215B5AF858C63C88CD6B0C1F9F3E75F7CF1C58D5C696DB7A49171DA11A0CE2677233B7AEB12BDD3CC378B26EBB2FE098E9622B129A71A49289883C19DC46CB2C4EC6F648563AE5897123ED779658E64649561924DD16C9FC1164F9C7CB65F33B4C98A530A7015820A63729BB95B97E7A7991966BC3A522EB24E2255A7FF8A31A4DBD6A1A05B19E2AB7F91B931776B90A7230F4ECB9B1BB927F7D9A05E0ABB0934363B0C80003A0FAFBA464AC65C91BD9F9AA82F8CA629543858F11397E78DA64F9F7EDB6DB76954126AEBD7AFD7B734121AC96984DA613A123D154D295A01A64BBDBF357DE7E5F83CB4064C572353AA92A421ABAD01C8E899366D5AD7FBD813758937118846A88E88A7D102C570D056A0CBFFE11796D665975D366BD62CAF172263D8B0610F3CF08049F288B4687B498FD2FD1B25844C71C62865EFA715A08FF26376DF7D77598B7A3532ACD8DA7A0494C5BA9531265CC8E8666EAEA9BB413A0F08420396B869169D2DFAF5BEF597CDDE94B1C48D4085E38610CDD0D18537D51C7216AA1440FDFE27BB2C2FF3E38F3FC6B42D01EEBCFA5A8EE1C387DF7FFFFD5A3857C1599F69B3E903871F7EF892254B881638F4E793F55DE857880AD4CCEB4D638F20401BD879FC92A5040F6122827AEBA7D58EA68C959A003270899CF2970E9012753E92D21AB25A3A35D75F7FBD067CF5D557CF9E3D1B42BD6FBEF9863DA9DDB5E79E7BAE5EBDBAE485C4CB9186284C639F4163CB4B760F21B7780C1D734243B8B6D0B298D966057FFEF39FEB119200B088837403C41A0390584535D5222907934818F5E57667BA894CE43973E6B8E48F59B5788C6E151A055F05463C0D7BC182059A5EC004BA090DA775CF3BEFBC138B070D675ACA46EEB5858E3CEAA8A364087EFAE9A78CCDE448680DFB4B8C996DEC182117C396BEA72F3B86057A5ABFD4D4E15460C1B3F18CC3C24B3465214F2C29E01286867F9B057D18A1665EDC85DD6E951109152C16B8F4D6EFBCF3CE55575D3575EA54EC272FBDD95A2A2DD346A6B2E3A38423F4AA928C94BD3A45943ABC7272C0B0BA6C0884E06455CDEE9642A331CC93AAD01C8A1FEF0791613C7DD7CFCBC47BE2892700DFF3447AE51A869772479DE88E37721752204EA593D917DA32328320B719CF267922233AD4A92F576B90AB009B5EC37DDDCA1C966C7437E98C0CB725F8A55E591F368E86D45AEAE7C573192D30B156811B4F855620BB1CBD9614BC5B6F59BD97B4A32C1882D51676268DD37DB6DF7EFBCF3EFBCC5EDAF4E2C25CC39EEBCB54D571B6F1339804098579F3E6F15733D96E2E0FD8928245375C40FF95B297D03756DFE058E77DE372F7773CA86D5670A79D76D21C9AA0B4F476D66724837410162E5C687DA3AF83221C356AD4830F3E88EF185B48D1C284D3CDF8790AB6327B58EBA817213BC3D81A459131C7DC5177DE9448584D799EBD1F7BC3AD769AFB030F3C70CD9A350487622F3F936FDB2A251B1D2BFDB84C414A77DB9A72C1566E554B0C2315607B0A1608EA323044B93107A9BD591E2A243A918EB846A61D76113929CA66C8D4387C9A7269006164C007C8F766E8A216C7EFE672FBEEBB2FCDC750632E148CAD21B186D197AE8372821668313A4F2ACDB06777204D05A5B98E1B4D9D1DEC34B8CC511FCD98639629B094B07051013B266A33C2A686ADD8C30E3B6CE5CA95AC29F6251F70D4C1B162BEEEDC3FBFE13346C979BD3C9F56C0040990F0B19D5AC97A8B5DABFDDFD8FE08A27BA2F78D4C7C0644A3D15F4160C5CCBB794523CD4DA3BD011306C8C489132549A17F72C939E7199BC54625FDB167CC9871E59557D2CAE6FF6BEDDC42AD2ADF35FE8DE9BADEB7FF4032D3CC12D3A2881204A573D909CA2EA428CBECE0A9D42CB5B3655A794ACB434907324AA3A40483AC4CA2ACE8402A694A7482A88B7DB1F7CD66B7D6DC0FE3F7FF1EDE35E61CA3BDCC7121CBB5C61CF31BDFE13D3EEFF3DA1E8C502F0265030DA5D65D45E8F6EA6280A8D53AE78140287842DED4CD009CBB020AC186B3F870BB18769B830A0E953015583CE08AFB727BF0E6BA67D68548D75FB9F53A7B28E5CE36246B0D59342F66AB3FBB6CA5CE95BA20D2E114F634C7B15D2D677A0A130FB183515DAD925B47325137540A858F82FEAC797D8DCB43B5B3D9ECE7C59EF6BDB9F349E78599685FE16F39C66D034507319E589EE35A67C706ECD03B265FF7FC1830F4CFCB972FD789EBCB6C532EE5327C4CDB4002B1B3EB4B8575E1D81A2E5DAF98C9D6A69A3265CAABAFBEEAA2BE9858F590082973163008A2FD87F7D6CEACC875E3A974AE74E2A652B49AFA039853095F88F89D54EE76325928787E392834A792BF280382F083FB9A788F71BEB81969C054A06B4D89E3D9B00233D3A79F166B6FF4047D565E87350DFC0D44B39C4C65B7C74C7C91292DEDA0DB9A44F546F898E991F1709C9F8AEBD5CED4EE38A08CB0151A0EC6EE70B14019AF9101204050C3E015B0B1643202270273A727C03ECBE41C77DC71F2D479B57FFDEB5FE3C78FDFBB772FA6400C6358AD7AD5989CC8E6E6E6EE84BBB46A7FFEF9A7BDF6D4BFF958EAEF0D1B32E59DCC220E58013BEECA14B403469F8D88116AA483CB66E48CBFFBEEBBC65978F798E58A70931658B35941EAC771BBD1446F635BB4815E684790CF362F52A360D550B500EE70E07A3BE3AB8BD08583BD357CF870B917CC9816D58D6822C9003B8C79338B16F2A841016BCF69E12B942EDE01D4A4EA8D2476651A7FF4D147847180CF50E816E1825DEB5CA99502FCAC6DAD0F9206AE9B1F066FBA440B29B64D4F6837D40E5C9E3097112DDCB76F1FFC8EFFFCC274A0F5505F6E45C79F2015E168F9FE66858AAD1039CEEAEED7EBC319CB5BB3F38999EB4B251FE3164AFD332C29B45BA84B19D8DFED09DD67918FB0DCD05972D1A245A0A8B0EA52683C4ACD9BE3077EFD58C7F2CFAF06056C5F5973A59981483526CF8AD06B56FF1D3C78B044AA0CF4A54B97222210FAF8527D81AFAA791D2924259415E5989D69FC51660C850DA6069D8476370C9854F4ECD9B3B76EDD4AB29348F8EAD5ABF5100D75C18205765750E704BAB0B0539672E657276A4AF50791B9C813EEADEB1577E2806EF3104291B8758A90B773E923D10223C830DD6231454501734EB108E5FBEA65E1A6A054442F822626E2455A34AEA06900DC9528F246547678857F3B825E1DD68A65CAB86A1A83EE3CFDF4D3F7ECD9E3FA257D4A4FA364C3BD288C87E5AD3D9346CC7953E9EBA64E9DBA64C912830FFEA3BCB4162860B008166B6C39643E5A9613E75010EEB8BDF30113023862E08A11642B8615F10A491C52BF24215A654344662AB273B93119216B3C2483145042DA2EA4703057DD610A43E9185AE8281B304DCC6F434E77506E156E91EAC3CC5F91A77A17A86D883FF059A7CF89D622E6468E1C79F0E0415797A65C875794ED4738210D21F798C3A38DB6664C82006DEA9390CA6A39D9B0EC369D25AD14B02922F316949D75AE76A43053084B3484CAC149AE58B1E2965B6EE178C75E22D40BEA8DF4044E14A7CB5DC33400F3BBFEF36BEDDAB5B366CD22F8433492C080E15DC46CF136F011BB3EC7A160BDBB7CB5EDDBB76B32617CAD9B87482142428E9B351B101F32277AA64486812A2077E89127B3A9CE10712EC371FE9413F6688B1490CF7115402D1C7FFCF1201E3CC898CE380AAC40DD5571A93BA13AB1EF166366FCDC69B52A29317FFEFC279E78429B47338363E1F621CC00B05E824C75B9D2566E7B87C90BAD1B68233487C37B8E9D428A6086EAF82F536AFA65C3656CBEF484165BA81613EFF484A68D8E36A54CA2994245D9E4C9933FF8E0038D818A20E09FB00D027903026636D3566EA860A253DBD31596C3CE32B6D4BFB342CA38830A9228959A8F2431B7990F270577DC915E3FCDA525187F3DB971964B364CB38FB9FC57D9728DD3A1D9BEE4924B5E7BED35FE2AAF86865176B5B1960C8687454A4F063FC8A290504819DD9DB2F11A0D59433E0100A68CEA258845EE03CBD55C5D95B58EEF6EE96726937FD3720DE82059011765ED8DCE404CEB0293035A9C42E8C6F104D72FB1BAA80A1B71EC211C8BA79E7A4AC78C35704023BE5B730E78A0D7A851A35C3E21B574F1C517CB926D4035CF983163DBB66DB043D8BC284289CE983163C8654AEE6FDEBC197F11117CCE39E77CF6D96704DB89C94316E62E7EE63E95E5B565CB16B4949E2C254D4FE9CE0B9C082132D9DAF20FDCEFCFD97E2C2F077F1CB4944AD66D2E9EEB5AE7AADB56AE5C298B9E09E71D1B22108C07A206149E356B0A995486610FDBBBBC3730BC1F93F565185ACDDB6FBFFDE9A79F7668D790511225F49FC070EE7AC52ECE7E7283A156E45EBC29777DE0F704483406397345595FC7A1C0248D82DB2989AECF8F653CA93F2B562A252FDC0E787248FCBEB2D58A31A2D1D530CE390557E098CC7FA73F1AD37E76EF52AE2F92E7A761D09AC2AF362877C841D79A5707121BC79C7C7FBB9E998E44385BB49D696B25D0E07849814B2B65316AC2A34E6302FC878D21777F49D9B773E60F1F48F7CB8CF8E8A38FBEFEFA6B1D0D68CC1DE5B6B717213F1AA16E73520610066E4F6C99A51DF55FE5C51BB5322F7A2A3D1FA38B1D6667BF756EA1BE1A62AF56E87DA429D290E8B02E5103678853DD2988E84EAC3B17D2C0D1EC14325671C57D3F3C309ABAE5CB9783F6D06B2E5AB448BA0DBBE7C1071FD4FE99366D9A5BDD500E0008A6F3ECB854D5AF1CCB96D8693D65233519ACFF5D5EB27588792030792F67DC5C9840FAAF9D3941B5B5F6EDDB377BF6ECD5AB576BB494B7D13FED6842D038F57AA8661F2C06E388DD0E621B5AD756BB152B0B49EE87A23A988DA9F576145713B170E1C255AB56492BFFFEFBEF644C5DF57114F5AC0DEF65A6154D3769F3BEFA767238FDBD81DF9C4414E871B8499D8D37C79B01EB29F448800068E2C4897BF6ECD10C7CFFFDF7EDCCC5C3CD804A38BACDA151DBE3B2608C034FA560D5A36055D557C8A2778DBCA1613CDC0434953A57DDF0E38F3F6A73EB66A9285AA390F26998D2143AD873B4103118EF60585C27432A0B9DD12A7B47C2517CACD6971F62D63366CDC182EABD4C18DBF53916401C4EA2020DF5EB0409AC5D680A426CD0F04B0E307878F7AEB11522D3B0CEEA4A0134C45E35384E274866048CFC88DD9933676ED8B021954953FD5E0245CAC6D0048310DDB7878336D07AE5E6F9B753E5A4B5B5A65157E4FE5908078D8ADCB70DD7CD6CC6E8BCE9D3A7AF5FBFBEC2740D8F669D2D65B34F2702BC058745F3FFCE3BEF5C78E1852954A83333380FB87726AA34813CE24EB34A743486F7AC7D31C1115F16083A17A46907E54EEF0837E78029E0C13CE5A5E88E470D9E81E84465264C98B073E74EA7787DD0C09D6002C634478302EE14AD0EEC239F2BF5390E7DC753167301D1F8F6D7B9DF622AB53832C7E958D6C8141626974E9907576FAAD774640EB0ADC626B7E7E5975FE67D51759A10CDD5B871E3E468496D99B739BABCA9A33C922BB6FE4DD9C04AB9CBA4FB75CA1C91A88F6DACB8C7670AD801F82763FB8F46C0217D7076919BEC1E30EBA8162924BA1E464A23D6D5D9ECF3CF3F7FD7AE5D72D7EEBFFF7E42F68608612D6AB84CA8D4C0175F7C6180437CE031111024333C3002C2ADC6A608EE45954AEBD2E06A541A1154DDE6FE2AF6D7D93AEDDC754BEB41798911ED5839FA3D9C3844C5BD665DC74371173170647D4F6EFECAC16BE5CE272967748A928484D814E71F3FB56B9D2B0B27097EEBADB77ACB525559373FB11F30F59A8EC050668D393966CC9803070ED02CB30845C311DDF0CF2F79F9E6EA428E6B5484D15C24DD17DAACD69D8B254B96AC5CB9525B45DB559FD51AB9AAAD6E1EC0F11E3A74E8871F7ED0EAE883575C71C573CF3D479A43671B2511A7A828DBD322DC2FBEF8E28F3FFEB8AE8F753BB78571C759EF584863107050F9B057C920DC78E38DCF3FFFFCA9A79E8A768FDE864DC374AC41589DA1CE22B7CF72655705F6D1EAE8974A0C1F0B929BB50F69009A3246A45D76E79430F9F2CB2FBB8E8762FA1D3B765C7EF9E5D89DFAF6A54B97CE9831836DCF59C348354B41C5B575332B031D1CB9890C275E145767A5C05743CCDFF38F9F4D5044CFD4A8B4793EFFFC73DD49F80AEBD0694B8A458BDC76E2E4934F96A7E5C21BCEA0F507DCC5ADDCD63AF24C75AE4BEAE6019B9BDD81134933EC033C31B32CA4EC0EC6754CD9858338851D5E945D4735D4134F3CF1BBEFBE03DC4AAD26E91E52FBEE20CE9F1CC5A14C142E0EDE88D264FD498EB2E6E1DE7BEFB5FBEB748C212F955393FAC74EDAB9BD15C2133A7157005A8A32306C0EFA8A6287A56C165011F7F3CF3F1B723876ECD86FBFFD76C00A3832B9C4F3637627C7FA639F0DF31C0DCA9D9ED864180E36E210D69C4610CE367CB46040E18D723CBAA6020D02C27C40768FBA9A81F100E3D50D1B364C8764DBB66D506F92D5200D0C5C931F3403A3478F96145EBC78F1B265CB347EBEC8A51D94F710D32E72771A13DF3487D470052EBBEC329929FAEF1F7FFC8105903220B955D271D3A3501B1D64602B1001C632B076479D6B2AE33F44EDF4271D39475D1AC6A355D319983A75AACF3CFCBACE7815256DB80E8F5D84541A43BA4167E91802A191C89C0AE072F3E7CF7FE699674C8F90729C001AE1BA79A6888BF0A08F169E7DC33EB104E41DA1D27430B3E8D67CDE6521D291B2D91B147C91B9969C69864A5082A6C2CB4F3C0DA1A33D408F6AA498AB2C225C030ED76335FF29C7725336015316201C01A8F7503C985F11B6E33532A41F000EBF810FBCC281EA17A91B0F6E19C45E8ED31A94E0B81D562C707D0727624BB794137B44C52C0F8D77313027E5E8B78E95CC2343BD52968D988328600EA0FB23B18B0CF14DA11B4AD4FDBA8DD229DD29D3E4C89123A4C9FBCA5E46B86BBAA4AA651416E18A20ACE6485BCA217A8BF1E9D3A76FDDBA959433BA0DF7B7C8D49E0EED12432208442CC12970BD8E9EE91614069DE0EFA51CBCB111E31D8BCEE6E46A4A51B16621654E00219BD0A3C84C1AF8182C41AC1CB30266DA2B4E30AF699B4CDF4BFD5E2AAD1C597EB26B91FC9666AB56AD9A33674E0A75A15AA0A30941637BF29E460AD8D8A97453E9CBED0A9814E0A6AEB288B42F76CE7C96D8D09178C1CD1898DF9ED034ED1F5E11A7D7CAAD4953A3828F98E448ECE7F6F214B9BB5AD41693D1EAD8BC1649600DA27D332893EC63F439FBD2755DFCBD318F2E351303FECCAD590EA06D33939197A9B3CE5577F25793D4639636CC0F9170C3C263C775DED7670F60146E4D1128668E6D8A410FD7EBB8148A680DDE953B70987FBFB9814F4FEEAA669AC06681E5673A53907208E1975F7E31B1178788BC438527A1D9F04A99BA4ECF94D63CE38C33DE7CF34D942B85A47047803B436CF12F2BCB8A1852C70F43860CB9FEFAEB1F7FFCF16335FFA99B027641AD9370D75D77DDEBAFBFEE6899BD13F6302387F908938E34B69D397332BBB4AFEB78384DE82436339A4FDFA2EDFAEBAFBFDA4074BDD635D75CF3F6DB6F43FD615AC094F1D2AC9A4B0A2379962B85FCED8E344088812D6E67866305F682D22628AF25BE653212B3010279D34D376DDEBC593BC79100E9667222FAAF1CFAFBEEBB8F04D3EAD5ABE7CD9B077F4314B97565487539FB54DA402E1980C77ECB962D93264DD20D326D35000A8E6358DBCC1ECE60021264DDD102786BE79D77DEA79F7E0A00C5AD9AD9AB5E6E3D07918504763D2A78585880B48238E5469678BDF09E913348605C26F64C0CC5A75C8E8C18D45C51D19082C503684EAEC255575DB57DFB767D979B1D01C161F0B8196EE021B1FCF2CB2FB3AC030661F5766B147FFFFDF7BFF8E28BDAA9AECA30DA3385780BB62173C1288DCD614B69856EB8E186F5EBD7337AF8D94D22815B40B6D5A9B8BA030F71746C269AFABBEC8683794B19F280B289DBC8790E360A9B98CD1DEBA1915FBDB993522B7388BB64194F94FEE44EF9207F5380E347E82CB33D62C488F1E3C76FDAB4A96E69909B0E71B432F9B88B6E53690936E73879888194000899049FC008E36A65F6763D907660B6136562CBC7FA2B77A2F612D429005745A3DA318664146B53B92899D0A8714F989F1CC266CAC9221701F3226EAD41FA93B3576105F26739E1BD65138EE69C37A6D5DCB97357AE5C09A2BB4E912F5EBCB8EB79B9F3CE3B376EDCC83070CEF44B3D50B6D4D0A1432191F0C6D00F7071531FD9CA6D64343FFA6A4E9FA11880ED712839C2B6209B895FA2C1C4368EAD8E117045C9A00282091F117BAB194196B2071F697F5AB97D083754FA8B23106978673805906917E2F7E65E580DA5EADEBA0C95D9A068C7C180D8B61DCA71E2313EE01EAA6B0D8CA8E80B6DA95A815CB395D9874C3CC2DBE90401A38D76AD13D511508D1037BB9633DF294387EC0B01ED24644A1A95F7D51B11FF4C038F20DA24B292D6099D3061C295575EA9AD6B4E0CF7C1ADC0562AF674844131726D27A864F5FBB3CE3AEBC08103349A23205164AA13D60B57102306EA4DBDA98D398FC1DD4BF54CE69916E6DA24FAAC9E0C6A1A46A318A9AD981171BA383B46EFA3C2C81B0ECA8D5691C0A9749FF82B2979FD69DAB46932EC162E5C78341E70CA91B4D8080CBEE954065860948D202C43B1DCC8413FEB85E14BC34E4776C8BAC46C21D872EBADB7CA06A76F65E52CFD2DC34E0A3C946C65CC2EC341539927D3629026816B894395CA108A1300865E47A6116F416623F6CBA4D84B93134539CA0648854B9E64963EF4D043B473E16C238990BF29E7B9914D24DD1BD62565154E122565A0B28F8A06A051FD6DDB476B7108E718837E89FD010A26E5349839174F39E59443870E996AC07CB9AE754ED9A2EC0C81B23B6DE520B03099354B92B0123A985CA05E7590CC004C4B697D6F4317A9229325A5EC8F46A26073931112A726CAA38AB4440D4428FCA0D7D4F46A8925282FBDF45299925DEF3FE9A493EACE8B5E9650391B2696F3B702A956EC83E6D44F94D4564B941EE999880307ABB5A088E3E67A7A37FDC442D526A41B12A2B0B39E5B86029A581F94943972E44803652CC5F4C8323C2117C6D4F51767CFE8370F3CF0C00B2FBCA08D217367E6CC997EA646488D4D03BBADE3DE31FFE76D8FFEB6DB104B86B439ED4B10D2700D127BBE0EBE44C4CE7D148C47ABD4E7A4FEA45A5E027E636F0CA046CA7021EB7216DD122FE5DE035A086D0046A87B64CA7FF2C92750A8A6815C8E54936533FFE2FF9497EDC8D8C0C071DD0AFE2E85C4301BC901515023D44043A118C1ED1E33C3D0CC13B733CB552A2D00EC42C768BDD01C163D13930E8392D9731829F2ADA6C093D8CE5CDF31066601C20169057278DBBBFAF9DC73CFFDEAABAFE0D0D62F5D6672340B8038ABD80B29D3D018908D1E428C225E5DE4106B618D9D33B8CE6D29A500A0724DA1C24C0BF3D34F3F8103AC23B51F366C18C56194665B0B56F2ED5CB1081273CC39330B5C6710A11A26CFEFC4AD741BDE8903C89196CFC1766B474E081B486B79F3CD374B9478F7AC59B3E6EEBBEF76BACED16CF81A1BD605393B28B7A84A39138FD98525D4DC0BCF9591AEC6EE8A832D02518313FCB6F4AD45348DA9048FC469EF0A028AEE94DB1FC550BC84ECC30F3FCCA94023023234EED103EBFA5EED506B6FAF02961C6F54CA044F3BED340DC9F5CA9051BB2EB04E014F9F3EFDFDF7DF3F7CF830FF8D8091BAF1743D2F29D0D75057C67AE17EC97A2380E1639FB283EE167E681DD210CE79CBBC03A04B40828D1449361AE68D9D8C7BA161687EF6EDDB6782CFA2ACF6A6ED8A1682EC63CC83A6ACABBA3EFFF2CB2FDFBF7F3F0ADBD36BE4C75F1DFDC56985994ACBD2A5A2FAAB7EA65A9730899663DDBA7511E2D0B981C976A183F5D537DD74D3B3CF3E4B4C15702F0CA3C822E2E42851A6DAD28FD966EBEA2374EB228963598C33AA4B8B18F3DF9E76ABED8AF67540D841026B0B27568D5B76ACAB2FF3585588D528767084E028523CB1E72C0E15CC45A9342591574C4B8C9FD95EB7CDD10A7D2CFC0392C40C049E6157FBA4A0B309152C5FBEFC9E7BEE615DC84A385386E6FB2B774E4C21109B424623E506A39DA5FC9CDF2294F6B533556A3B947A9BD3C289062F712BB0D499BFD326B516EB681430F1D2F8AD64DD89F21358377C3C7ED645383DB9B9B17E29DDB376ED5AD762022A93F8B35267D61C2EA6400258816DF9CE6BCA9429BB77EF8644A69DBB1DE8F9F0A8E997C3870FD75F91E67AB85E8A2E1F28C5ABAFBE7AFBF6EDCE1960F6B21206472064595D5BC1A9749D639D25C86A0E0337B300B19E8ADDA61592612141A3FBC9FFB1CFF0D89A51A9BA01962B19595827FAF809279C2005431E5D371072A0ECA14E31B40249B57E78F4D147B53A7A4D16DA704D14ADA3E5F813B001574A1DBCFF5A813FA8B30C26E574A0790C8A5C77A82F92C9A5D5D1F8357573E7CE956C95F8E06C8350653C6655EB7A21DFF5404873B0088934DAF9D65FC9CB82648931DB945B8D767D3809276D037D8596CF189C3ADA6D63092BE705A64FE87E34C8BBEEBAEBC9279F7410323AB818558EA8F3AF0BE12485A5ADA9C877C23BE5FA51D780920234B0B34EE69A467850D9515BA6675C59C3A7CD69A57FCF3CF3CCBD7BF79AB0B64E016BC6346F950A3D045FD7FEE2AE4F25114B4F56324D041B8934920B6C00C7E9C5B59710F486C9F0A779F3E63DF5D453AC88843B485A3DCAECF7CEA6E3EF02FF7121626FEE4063748F370FD8FB8A4758E4E619C4F3225974917B82E15CBAB14A0CD75B8BF358C7BAE36DB18B435CE8A350C091C02495AACBB4F9D69778A2EE5DEF197025525F68ED97FAC7A511B6C810F61B2F68DE02AB43E40F2C1C4CD43BEFBC237B8E8A640D29462688B96A3CDA36FAB7E237A6006966ED4098B67343B64A3EDBAEBF2D6C1FBA8A83E7CA2B9F11AF85EF1F7008DA5D5D094B226E7A42EF656005AE0AE0006382F192BC1E0A86D77313156A16B1864843EABF0E4C4D9C38F1C30F3F7CE081071E79E411279FBA8ED384097AA68145BD99A239327F9AE5840D4A3218485B5C21000E7AC76BAFBDF6BDF7DED393C1BC013A9F3C79F2962D5BF459CC0B6A005A99DCD5314C3F10330D1392530DE48FB8BA3D1BD70BB94ABDD222226EDCFF2D3BC0C37EE5789D8B117B42AF750AFFEBD6977122DFF51C3373A59CF2A72423851ADF56E00B4407EB87A143874AFD7B715D6E514704E1487ECCC77300FE4D19530A14FCDD08C7734FADD491648AEF85056604A934C415575CA18D64E1552106894BA6A1EA75468C18B173E7CEBAE7FBEC55F84FBADE1F73B1F1BCA49CF5B4BDE24E00C3860D3B78F0A05F10D7BC1588FB53695C8F1C39F2D24B2F95DA90F27EFAE9A75D74EE860A29E3AE416F803F6F687F99021195B18A985CB1E18C0165986229E3A1FED670E487CAF2B914B5D25F3CA69FC9867288A0D430391D5FDA10FA765D90714973E6CC59B56A9531FF0693524F4F80C47E4F2A11B991D0D42DC6BDBED61C9E3D138944ADE9F3DB972FCF00DA0BB38FF54299619D58E37AFBE19038391AA11B2C16B3CAF8490F0D9468C54F7324A0955930EDB83B4B924237ADB89DE221B51648591ACBAEA2A016748889FC2254DB11B8DE40DB4E1931360AD6AD8E3C9CBBBA7FF1E2C572278C21EFACF725B5E11C1CD156E6B92FB091636522E250C03C048BB01538355BA1C521707A37022F42EFA20183B07C00F88D7D533B3A9E324B58235C6C7F5198B860C182CD9B37736E0D538ABDA353CE84F17A1CBF58B153377EA37B580948AA3518AAFB5130E848265162DD35D4A8314711992C464E32C667C0063B5138147934339D02E7ECC9C7A51D299969C2F8B366CD7AE18517887952064D12D41169164C5B473A802AA3AE07435F0197A1F52E821B05EF448566523FD45127C688909E3375EAD4B7DE7A4B3753C95EF1FF8815C7D03A613A7D9DBE65F4E8D1DF7DF79DE6103CA7156D572A44CF157A05E910DDF422F0E9981457DF3E78F0E0FF2CAFD468D1735C51E4F40289E40F18102C22CC44AC20B3C1B6D464EAA5EACAA262999383516E8351F791CEF3A209F9F1C71F35546DBFCB2EBBECA5975E62E74BBE9F75D659BB77EFA636C9A4C729937A72B65D74A0DD2EEB870D801E623038CAA98CACF0F339E79C73FEF9E73FF4D0430D83749435950905C3DAF5A5D49A3B74AF85405439C8D95CD6A2E5D3B0A9A84ED9AA88A9D9AEFDC5CD97E93C025F019A5DEF4BFC00B9D4F57B630E1E3B5EDB524B0FF29F6F31DD87C676F7DD776FD8B0810A34A7DE8BCC2EE778FBA4499376EDDAF5D8638FDD77DF7D710EBD2D23F563F4747B735B8222F4A88FE7C2997817769A91308622F01A1DC7AA44B32391706A4C0DD45DF6E4CC1813FF6A918838D5BFBFFDF65B7C7DBFAFF795535D18762EBE003896FA934247F566482041A3549A44FA08140E3A35D3A64D7BF2C927392CDA8D38BECE919153B02E378031F62D365990316E46E617B9E99F85957CF1C3870F33C37D99613B22F9236CC256EC8015309EA59E256520DF9F87F68416D3D1E444915061E263E34C0F659700FFE456EED8B1835D65460BCEA7CCCF9EDC30DCACE558D6DE949D97B720A02AF499FB01EB4B6FBEF9E6575E7965C89021DF7EFB2DB9641BDD48286A9CBC571CB8C78D20D9A60FD27DDD9E8A6D25FDAB2591304533699CBAF9820B2E90F7AC07D2F553C2451B943A076053F2A4DF7FFF7DBB2929473C9CF5AC43751ACACB7F2BEDD8345ABD9484A33CFB534E39E5CB2FBF345EB172B916455F8A4559941C40E79D779EDEC57DE099CF76E8888CD647E4310C6D657D8BE92711646E656AA180FBC58E1C3B76EC37DF7C136BCD69B24B737B770836905E9F9D3B77EEB265CB74837EAFADD200C24A1D043729781E1530519C5867161ACAAE68348405662DD2000026C0D3795E18897D0BCD210E996EA3EB8B9B49B7731F24A2057D99065C9FB5C780773B7FFEFC75EBD6C9E83124D01E30C1864A8BE5AEFBCA13656C9D29B422782D65E4E3C2850B1F7FFC71E9B9FDFBF73778D851CD70EE30239CA0A9F417D7A3F427C8D5794DB742D1F620F3A7FB9F78E289071F7CD065A09D970C1D9D68D867490C7164C0AC603FE1CAB3D3162D5AB466CD1ADB9131178019E74463E7E9EB3AAB516B1AA568411F33533C4A52827E4A1C19944DEA0FF3D173C08757BA201059D50FD4C2A6ACAADBF5BC0275173ADB4C0FBC0502966A6CA4478C0D18EF1D9D48EB8B4E4F74D4A851870E1D8A54AF6C80D4DF8CE3ED20F1B6631D41AF44A7EDF4EB82019E488091F67E0B8EDE45175D247B4E2ADC2462C0745269B3C648B8278165A25E9FC839C724054A4B0CB5C80BE9CCC28073C01C30D9179B366D32F8C8693C4B049CBCA54B97EA7DA475607EB036C2E535D144443CE241F2F2F6EB992323AAD8850D45C0315CE6890063AC6570E7C894634D8E343241B7DC72CB1B6FBC61FE9422906E531066F2397BEA92953A24F2F974DBB061C3E42A698A366EDC48FA96650354AC4799A0D5C5FEB7DF7EFB8A152B6232BF08A5E22953B13484D498100C05C4A5B5A3F19929672B8B46B4B05B4FDB072557C7B7231C7B3369250BEAA494F7340DFE98671F33673E3ADBE1694E6EBBED36A98A2253D3718CAD1E084A3BF889BBA37FEFB8E38EF5EBD793566F063D21A0D97ED84C4E68F95B28A77110CFAF5CE4DEA55D9F8F67008369CA4ECFDF86403BCF4B0A69113205CE91A76C05C64699804EA9307193732EE296368088D9F4E54664A8345BE875E7C89ACFFB4A7B5BF23185D217A76F23F9A2A37345E016EEBC6282D38A87DC794FB7FEE25836907CB143243177EEDC19E9E22168D35A3418645075A60CAEC47B060862382BE56DB292A5DA2BE540CE2C125460727427B5AD9A2299AADEF3910ACAFB275A1E0088527F8868911BC7B139C78D1B77B8BCE20124809732CDB8FE7BF6D9674BEB5060CADCB673C195035404186271D4FFFF42DDA28A6CB3FA4D234A5F53A7B99518E4ACB962CAF2A1C290D5CACC6292BD205207E5BE6186FDA61CC967E3B5339981F17A29070B757C2878A1A25D52970C3D7BC3B5218E70A4AC778841FA50631E15B9F95E3B13CFA5AC8FB9B39509737A427F2A8FD9EB1E13A0BCEFFF015AB03D44233550ED0000000049454E44AE426082</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">0</prop><prop prop-type="Order">20</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">0</prop><prop prop-type="Open">{</prop><prop prop-type="Close">}</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Transparent" resname="O:SplashForm.O:SplashImage.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335368866</prop><prop prop-type="Status">6</prop><prop prop-type="Order">21</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Left" resname="O:SplashForm.O:Label1.Left">
<source>104</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759375</prop><prop prop-type="Status">6</prop><prop prop-type="Order">22</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Top" resname="O:SplashForm.O:Label1.Top">
<source>83</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759375</prop><prop prop-type="Status">6</prop><prop prop-type="Order">23</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>91</source>
<target>91</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45408.3470762037</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Width" resname="O:SplashForm.O:Label1.Width">
<source>195</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759375</prop><prop prop-type="Status">6</prop><prop prop-type="Order">24</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Height" resname="O:SplashForm.O:Label1.Height">
<source>18</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759375</prop><prop prop-type="Status">6</prop><prop prop-type="Order">25</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Caption" resname="O:SplashForm.O:Label1.Caption">
<source>'Das Spiel wird geladen...'</source>
<target>'Loading game...'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759375</prop><prop prop-type="Status">1</prop><prop prop-type="Order">26</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Charset" resname="O:SplashForm.O:Label1.Font.Charset">
<source>ANSI_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759375</prop><prop prop-type="Status">6</prop><prop prop-type="Order">27</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Color" resname="O:SplashForm.O:Label1.Font.Color">
<source>clAqua</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759375</prop><prop prop-type="Status">6</prop><prop prop-type="Order">28</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Height" resname="O:SplashForm.O:Label1.Font.Height">
<source>-16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759375</prop><prop prop-type="Status">6</prop><prop prop-type="Order">29</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Name" resname="O:SplashForm.O:Label1.Font.Name">
<source>'Arial Rounded MT Bold'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759375</prop><prop prop-type="Status">6</prop><prop prop-type="Order">30</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Style" resname="O:SplashForm.O:Label1.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">31</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.ParentFont" resname="O:SplashForm.O:Label1.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">32</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Left" resname="O:SplashForm.O:Label2.Left">
<source>56</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">33</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Top" resname="O:SplashForm.O:Label2.Top">
<source>21</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">34</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Width" resname="O:SplashForm.O:Label2.Width">
<source>313</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">35</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Height" resname="O:SplashForm.O:Label2.Height">
<source>64</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">36</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Caption" resname="O:SplashForm.O:Label2.Caption">
<source>'SpaceMission'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">1</prop><prop prop-type="Order">37</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Font.Charset" resname="O:SplashForm.O:Label2.Font.Charset">
<source>ANSI_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">38</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Font.Color" resname="O:SplashForm.O:Label2.Font.Color">
<source>clLime</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">39</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Font.Height" resname="O:SplashForm.O:Label2.Font.Height">
<source>-48</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">40</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Font.Name" resname="O:SplashForm.O:Label2.Font.Name">
<source>'Arial Unicode MS'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">41</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.Font.Style" resname="O:SplashForm.O:Label2.Font.Style">
<source>[fsBold]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">42</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label2.ParentFont" resname="O:SplashForm.O:Label2.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4205759491</prop><prop prop-type="Status">6</prop><prop prop-type="Order">43</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/LevEdit_DRC.RES
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/ENU/LevEdit_DRC.rcn
0,0 → 1,3864
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="C:\SVN\SpaceMission\LevEdit.drc" source-language="de-DE" target-language="en-US" datatype="cpp" tool="ETM v10.0" ts="C:\SVN\SpaceMission\LevEdit.drc">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4428703704</prop>
<prop prop-type="OrigDateTime">45408.4428703704</prop>
<prop prop-type="XlatDateTime">45408.409537037</prop>
<prop prop-type="Translated">487</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="LevMain_status_lives" resname="LevMain_status_lives">
<source>"Leben: "</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Lifes: "</target>
</trans-unit>
<trans-unit id="LevMain_status_nolives" resname="LevMain_status_nolives">
<source>"Einheit hat keine Lebensangabe"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Unit has no lives"</target>
</trans-unit>
<trans-unit id="LevMain_SUnknownEnemyType" resname="LevMain_SUnknownEnemyType">
<source>"???"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="LevMain_SExitWithoutSave" resname="LevMain_SExitWithoutSave">
<source>"Beenden ohne abspeichern?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Close without saving?"</target>
</trans-unit>
<trans-unit id="LevEdit_SAlreadyStarted" resname="LevEdit_SAlreadyStarted">
<source>"Der Editor wurde bereits gestartet."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The editor is already open"</target>
</trans-unit>
<trans-unit id="LevEdit_STitel" resname="LevEdit_STitel">
<source>"SpaceMission Level-Editor"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"SpaceMission Level Editor"</target>
<alt-trans>
<source>"SpaceMission Leveleditor"</source>
<target>"SpaceMission Leveleditor"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45407.8486206481</prop>
</prop-group>
</alt-trans>
</trans-unit>
<trans-unit id="LevEdit_SFileMissing" resname="LevEdit_SFileMissing">
<source>"%s fehlt. Bitte installieren Sie SpaceMission erneut."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"%s is missing. Please reinstall SpaceMission."</target>
</trans-unit>
<trans-unit id="Vcl_OleConst_sNoRunningObject" resname="Vcl_OleConst_sNoRunningObject">
<source>"Es kann kein Zeiger auf ein ausgeführtes Objekt geholt werden, dass mit OLE für %s/%s registriert ist"</source>
<target>"Unable to retrieve a pointer to a running object registered with OLE for %s/%s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_EdgeConst_SWebViewFailure" resname="Vcl_EdgeConst_SWebViewFailure">
<source>"Edge-Browser-Steuerelement konnte nicht erstellt werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Edge-Browser control could not be created"</target>
</trans-unit>
<trans-unit id="Vcl_EdgeConst_SNoWebView" resname="Vcl_EdgeConst_SNoWebView">
<source>"Das zugrunde liegende WebView2-Steuerelement ist nicht initialisiert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"WebView2 control was not initialized"</target>
</trans-unit>
<trans-unit id="IEConst_sNotSupportedByEdge" resname="IEConst_sNotSupportedByEdge">
<source>"Vorgang wird vom Edge WebView2-Steuerelement nicht unterstützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Action not supported by Edge WebView2 control"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExMissingExpression" resname="System_RegularExpressionsConsts_SRegExMissingExpression">
<source>"Ein in RegEx angegebener regulärer Ausdruck ist erforderlich"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"A regular expression is required in RegEx"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExExpressionError" resname="System_RegularExpressionsConsts_SRegExExpressionError">
<source>"Fehler in regulärem Ausdruck bei Offset %d: %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Error in regular expression at offset %d: %s"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExStudyError" resname="System_RegularExpressionsConsts_SRegExStudyError">
<source>"Fehler beim Untersuchen von regex: %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Error while evaluating regex: %s"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExMatchRequired" resname="System_RegularExpressionsConsts_SRegExMatchRequired">
<source>"Übereinstimmung erforderlich"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Match required"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExStringsRequired" resname="System_RegularExpressionsConsts_SRegExStringsRequired">
<source>"Strings-Parameter darf nicht Nil sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Strings parameter must not be nil"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExIndexOutOfBounds" resname="System_RegularExpressionsConsts_SRegExIndexOutOfBounds">
<source>"Index überschreitet das Maximum (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Index is greater than maximum (%d)"</target>
</trans-unit>
<trans-unit id="LevMain_SFileError" resname="LevMain_SFileError">
<source>"Die Datei kann von SpaceMission nicht geöffnet werden!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"File cannot be opened by SpaceMission"</target>
</trans-unit>
<trans-unit id="LevMain_SCaption" resname="LevMain_SCaption">
<source>"SpaceMission %s - Level-Editor"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"SpaceMission %s - Level Editor"</target>
<alt-trans>
<source>"SpaceMission %s - Leveleditor"</source>
<target>"SpaceMission %s - Level Editor"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45407.8486262847</prop>
</prop-group>
</alt-trans>
</trans-unit>
<trans-unit id="LevMain_SYes" resname="LevMain_SYes">
<source>"Ja"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Yes"</target>
</trans-unit>
<trans-unit id="LevMain_SNo" resname="LevMain_SNo">
<source>"Nein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No"</target>
</trans-unit>
<trans-unit id="LevMain_SReallyDeleteLevel" resname="LevMain_SReallyDeleteLevel">
<source>"Level wirklich löschen?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Do you want to delete this level?"</target>
</trans-unit>
<trans-unit id="LevMain_status_info" resname="LevMain_status_info">
<source>"Zeigen Sie mit dem Mauszeiger auf eine Einheit, um deren Eigenschaften anzuzeigen..."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Hover your mouse cursor over an entity to show its properties"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SSelbsterstellt" resname="LevSpeicherung_SSelbsterstellt">
<source>"Selbsterstellt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Own creation"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SLevelFileNotFound" resname="LevSpeicherung_SLevelFileNotFound">
<source>"Leveldatei nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Level file not found"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SReallyDeleteLevel" resname="LevSpeicherung_SReallyDeleteLevel">
<source>"Dieses Level wirklich löschen?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Do you really want to delete this level?"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SLoadNewLevelAndDiscardChanges" resname="LevSpeicherung_SLoadNewLevelAndDiscardChanges">
<source>"Neues Level laden und Änderungen verwerfen?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Load new level and discard changes?"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SLevelIsEmpty" resname="LevSpeicherung_SLevelIsEmpty">
<source>"Das Level ist leer!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The level is empty!"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SLevelAlreadyExists" resname="LevSpeicherung_SLevelAlreadyExists">
<source>"Level ist bereits vorhanden. Ersetzen?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Level with the same number already exists. Replace?"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SYes" resname="LevSpeicherung_SYes">
<source>"Ja"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Yes"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SNo" resname="LevSpeicherung_SNo">
<source>"Nein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SFields" resname="LevSpeicherung_SFields">
<source>"%d Felder"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"%d Fields"</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SXbyY" resname="LevSpeicherung_SXbyY">
<source>"%s von %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"%s by %s"</target>
</trans-unit>
<trans-unit id="ComInfo_SVersion" resname="ComInfo_SVersion">
<source>"Version %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_OleConst_SBadPropValue" resname="Vcl_OleConst_SBadPropValue">
<source>"'%s' ist kein gültiger Wert für die Eigenschaft"</source>
<target>"'%s' is not a valid property value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_OleConst_SCannotActivate" resname="Vcl_OleConst_SCannotActivate">
<source>"Aktivierung des OLE-Steuerelements misslungen"</source>
<target>"OLE control activation failed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_OleConst_SNoWindowHandle" resname="Vcl_OleConst_SNoWindowHandle">
<source>"Das Fenster-Handle des OLE-Elements nicht verfügbar"</source>
<target>"Could not obtain OLE control window handle"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_OleConst_SInvalidLicense" resname="Vcl_OleConst_SInvalidLicense">
<source>"Lizenz-Information für %s ist ungültig"</source>
<target>"License information for %s is invalid"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_OleConst_SNotLicensed" resname="Vcl_OleConst_SNotLicensed">
<source>"Lizenz-Information für %s nicht gefunden. Sie können dieses Steuerelement im Entwurfsmodus nicht verwenden"</source>
<target>"License information for %s not found. You cannot use this control in design mode"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_JConsts_sChangeJPGSize" resname="Vcl_Imaging_JConsts_sChangeJPGSize">
<source>"Die Größe einer JPEG-Grafik kann nicht verändert werden"</source>
<target>"Cannot change the size of a JPEG image"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_JConsts_sJPEGError" resname="Vcl_Imaging_JConsts_sJPEGError">
<source>"JPEG-Fehler #%d"</source>
<target>"JPEG error #%d"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_JConsts_sJPEGImageFile" resname="Vcl_Imaging_JConsts_sJPEGImageFile">
<source>"JPEG-Grafikdatei"</source>
<target>"JPEG Image File"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Global_SDownloadError" resname="Global_SDownloadError">
<source>"Ein Fehler ist aufgetreten. Wahrscheinlich ist keine Internetverbindung aufgebaut, oder der der ViaThinkSoft-Server vorübergehend offline."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Could not download version information from the ViaThinkSoft server. Please try again later."</target>
</trans-unit>
<trans-unit id="Global_SNewProgramVersionAvailable" resname="Global_SNewProgramVersionAvailable">
<source>"Eine neue Programmversion ist vorhanden. Möchten Sie diese jetzt herunterladen?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"A new program version is available! Download now?"</target>
</trans-unit>
<trans-unit id="Global_SNoUpdateAvailable" resname="Global_SNoUpdateAvailable">
<source>"Es ist keine neue Programmversion vorhanden."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"You are already using the latest version"</target>
</trans-unit>
<trans-unit id="ComLevelReader_SLevelFileFolder" resname="ComLevelReader_SLevelFileFolder">
<source>"Levels"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="ComLevelReader_SLevelFileSubFolder" resname="ComLevelReader_SLevelFileSubFolder">
<source>"SpaceMission"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="ComLevelReader_SExtraContentAfterLine" resname="ComLevelReader_SExtraContentAfterLine">
<source>"Zeile %d ist ungültig (Zusatzinfo am Ende)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Line %d is invalid (additional information at line end)"</target>
</trans-unit>
<trans-unit id="ComLevelReader_SInvalidXCoord" resname="ComLevelReader_SInvalidXCoord">
<source>"X-Koordinate muss ohne Rest durch %d teilbar sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"X-Coordinate must be a multiple of %d."</target>
</trans-unit>
<trans-unit id="ComLevelReader_SInvalidYCoord" resname="ComLevelReader_SInvalidYCoord">
<source>"Y-Koordinate muss ohne Rest durch %d teilbar sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Y-Coordinate must be a multiple of %d."</target>
</trans-unit>
<trans-unit id="ComLevelReader_SInvalidLevelFile" resname="ComLevelReader_SInvalidLevelFile">
<source>"Level-Format nicht unterstützt oder Datei ist beschädigt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Level file format is not supported or the file is corrupt."</target>
</trans-unit>
<trans-unit id="ComLevelReader_SEnemyTypeNotImplemented" resname="ComLevelReader_SEnemyTypeNotImplemented">
<source>"Gegner-Typ %d wird nicht unterstützt (Alte Spielversion?)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Enemy type %d not supported (Old game version?)"</target>
<alt-trans>
<source>"Enemy Type %d not implemented"</source>
<target>"Gegner-Typ %d ist nicht implementiert"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45406.840819456</prop>
</prop-group>
</alt-trans>
</trans-unit>
<trans-unit id="ComLevelReader_SLevelEnemyLineComment" resname="ComLevelReader_SLevelEnemyLineComment">
<source>"; Type XCoord YCoord Lives"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="ComLevelReader_SInvalidFile" resname="ComLevelReader_SInvalidFile">
<source>"Spielstand-Format nicht unterstützt oder Datei beschädigt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Savegame format is not supported or the file is corrupt."</target>
</trans-unit>
<trans-unit id="LevSpeicherung_SLevelListBox" resname="LevSpeicherung_SLevelListBox">
<source>"Level %d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownCriticalChunkText" resname="Vcl_Imaging_pnglang_EPNGUnknownCriticalChunkText">
<source>"Dieses \"Portable Network Graphics\" Bild enhält einen unbekannten aber notwendigen Teil, welcher nicht entschlüsselt werden kann."</source>
<target>"This \"Portable Network Graphics\" image contains an unknown critical part which could not be decoded."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownCompressionText" resname="Vcl_Imaging_pnglang_EPNGUnknownCompressionText">
<source>"Dieses \"Portable Network Graphics\" Bild wurde mit einem unbekannten Komprimierungsalgorithmus kodiert, welcher nicht entschlüsselt werden kann."</source>
<target>"This \"Portable Network Graphics\" image is encoded with an unknown compression scheme which could not be decoded."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownInterlaceText" resname="Vcl_Imaging_pnglang_EPNGUnknownInterlaceText">
<source>"Dieses \"Portable Network Graphics\" Bild benutzt ein unbekanntes Interlace-Schema, welches nicht entschlüsselt werden kann."</source>
<target>"This \"Portable Network Graphics\" image uses an unknown interlace scheme which could not be decoded."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownColorTypeText" resname="Vcl_Imaging_pnglang_EPNGUnknownColorTypeText">
<source>"Dieses PNG-Bild (Portable Network Graphics) verwendet einen unbekannten Farbtyp, der nicht decodiert werden konnte."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This PNG image (Portable Network Graphics) contains an unknown color type, which could not be decoded."</target>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCannotAssignChunkText" resname="Vcl_Imaging_pnglang_EPNGCannotAssignChunkText">
<source>"Die Abschnitte müssen kompatibel sein, damit sie zugewiesen werden können."</source>
<target>"The chunks must be compatible to be assigned."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnexpectedEndText" resname="Vcl_Imaging_pnglang_EPNGUnexpectedEndText">
<source>"Dieses \"Portable Network Graphics\" Bild ist ungültig: Der Dekoder ist unerwartete auf das Ende der Datei gestoßen."</source>
<target>"This \"Portable Network Graphics\" image is invalid because the decoder found an unexpected end of the file."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGNoImageDataText" resname="Vcl_Imaging_pnglang_EPNGNoImageDataText">
<source>"Dieses \"Portable Network Graphics\" Bild enthält keine Daten."</source>
<target>"This \"Portable Network Graphics\" image contains no data."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCannotAddChunkText" resname="Vcl_Imaging_pnglang_EPNGCannotAddChunkText">
<source>"Das Programm versucht einen existierenden und notwendigen Abschnitt zum aktuellen Bild hinzuzufügen. Dies ist nicht zulässig."</source>
<target>"The program tried to add a existent critical chunk to the current image which is not allowed."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334983218</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCannotAddInvalidImageText" resname="Vcl_Imaging_pnglang_EPNGCannotAddInvalidImageText">
<source>"Es ist nicht zulässig, einem ungültigen Bild einen neuen Abschnitt hinzuzufügen."</source>
<target>"It's not allowed to add a new chunk because the current image is invalid."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCouldNotLoadResourceText" resname="Vcl_Imaging_pnglang_EPNGCouldNotLoadResourceText">
<source>"Das PNG Bild konnte nicht aus den Resourcendaten geladen werden."</source>
<target>"The png image could not be loaded from the resource ID."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGOutMemoryText" resname="Vcl_Imaging_pnglang_EPNGOutMemoryText">
<source>"Es stehen nicht genügend Resourcen im System zur Verfügung, um die Operation auszuführen. Schließen Sie einige Fenster und versuchen Sie es erneut."</source>
<target>"Some operation could not be performed because the system is out of resources. Close some windows and try again."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCannotChangeTransparentText" resname="Vcl_Imaging_pnglang_EPNGCannotChangeTransparentText">
<source>"Das Setzen der Bit-Transparent-Farbe ist für PNG-Images die Alpha-Werte für jedes Pixel enthalten (COLOR_RGBALPHA und COLOR_GRAYSCALEALPHA) nicht zulässig"</source>
<target>"Setting bit transparency color is not allowed for png images containing alpha value for each pixel (COLOR_RGBALPHA and COLOR_GRAYSCALEALPHA)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGHeaderNotPresentText" resname="Vcl_Imaging_pnglang_EPNGHeaderNotPresentText">
<source>"Die Datei, die gelesen wird, ist kein gültiges \"Portable Network Graphics\" Bild, da es keinen gültigen Header enthält."</source>
<target>"This operation is not valid because the current image contains no valid header."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EInvalidNewSize" resname="Vcl_Imaging_pnglang_EInvalidNewSize">
<source>"Die neue Größe für die Größenanpassung des Bildes ist ungültig."</source>
<target>"The new size provided for image resizing is invalid."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EInvalidSpec" resname="Vcl_Imaging_pnglang_EInvalidSpec">
<source>"\"Portable Network Graphics\" konnte nicht erstellt werden, weil ungültige Bildtypparameter angegeben wurden."</source>
<target>"The \"Portable Network Graphics\" could not be created because invalid image type parameters have being provided."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGInvalidBitDepthText" resname="Vcl_Imaging_pnglang_EPNGInvalidBitDepthText">
<source>"Das PNG-Bild (Portable Network Graphics) konnte nicht geladen werden, weil das Bild eine ungültige Bit-Tiefe verwendet."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The PNG image (Portable Network Graphics) could not be loaded, because the image contains an unsupported bit-depth."</target>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDIB" resname="DXConsts_SInvalidDIB">
<source>"DIB is invalid"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDIBBitCount" resname="DXConsts_SInvalidDIBBitCount">
<source>"Bitcount in invalid (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDIBPixelFormat" resname="DXConsts_SInvalidDIBPixelFormat">
<source>"PixelFormat in invalid"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDisplayBitCount" resname="DXConsts_SInvalidDisplayBitCount">
<source>"Display requires 8, 16, 24 or 32 bits"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SNotSupportGraphicFile" resname="DXConsts_SNotSupportGraphicFile">
<source>"Graphic format not suported"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDXTFile" resname="DXConsts_SInvalidDXTFile">
<source>"DXT file is invalid"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SCannotLoadGraphic" resname="DXConsts_SCannotLoadGraphic">
<source>"Can not load graphic"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPngInvalidCRCText" resname="Vcl_Imaging_pnglang_EPngInvalidCRCText">
<source>"Dieses \"Portable Network Graphics\" Bild ist ungültig, weil Teile der Daten fehlerhaft sind (CRC-Fehler)"</source>
<target>"This \"Portable Network Graphics\" image is not valid because it contains invalid pieces of data (crc error)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGInvalidIHDRText" resname="Vcl_Imaging_pnglang_EPNGInvalidIHDRText">
<source>"Dieses \"Portable Network Graphics\" Bild konnte nicht geladen werden, weil wahrscheinlich einer der Hauptdatenbreiche (IHDR) beschädigt ist"</source>
<target>"The \"Portable Network Graphics\" image could not be loaded because one of its main piece of data (ihdr) might be corrupted"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGMissingMultipleIDATText" resname="Vcl_Imaging_pnglang_EPNGMissingMultipleIDATText">
<source>"Dieses \"Portable Network Graphics\" Bild ist ungültig, weil Grafikdaten fehlen."</source>
<target>"This \"Portable Network Graphics\" image is invalid because it has missing image parts."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGZLIBErrorText" resname="Vcl_Imaging_pnglang_EPNGZLIBErrorText">
<source>"Die Grafik konnte nicht entpackt werden, weil Teile der komprimierten Daten fehlerhaft sind. \r\nBeschreibung: "</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This graphics could not be decompressed because parts of the compressed data is invalid. \r\nDescription: "</target>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGInvalidPaletteText" resname="Vcl_Imaging_pnglang_EPNGInvalidPaletteText">
<source>"Das \"Portable Network Graphics\" Bild enthält eine ungültige Palette."</source>
<target>"The \"Portable Network Graphics\" image contains an invalid palette."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGInvalidFileHeaderText" resname="Vcl_Imaging_pnglang_EPNGInvalidFileHeaderText">
<source>"Die gerade gelesene Datei ist kein gültiges PNG-Bild (\"Portable Network Graphics\"), weil sie keinen gültigen Header enthält. Diese Datei ist möglicherweise beschädigt. Versuchen Sie, eine neue Version davon zu bekommen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The read file is not a valid PNG picture (\"Portable Network Graphics\"), because it does not contain a valid header. The file is probably corrupt. Please try to receive a newer version of the file."</target>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGIHDRNotFirstText" resname="Vcl_Imaging_pnglang_EPNGIHDRNotFirstText">
<source>"Dieses \"Portable Network Graphics\" Bild wird nicht unterstützt oder ist ungültig.\r\n(Der IHDR-Abschnitt ist nicht der erste Abschnitt in der Datei)."</source>
<target>"This \"Portable Network Graphics\" image is not supported or it might be invalid.\r\n(IHDR chunk is not the first)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGSizeExceedsText" resname="Vcl_Imaging_pnglang_EPNGSizeExceedsText">
<source>"Dieses PNG-Bild (Portable Network Graphics) wird nicht unterstützt, weil die Breite oder Höhe die maximale Größe von 65535 Pixel überschreitet."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This PNG image (Portable Network Graphics) cannot be loaded because width or height exceeds 65535 piels."</target>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownPalEntryText" resname="Vcl_Imaging_pnglang_EPNGUnknownPalEntryText">
<source>"Es gibt keinen solchen Palettenwert."</source>
<target>"There is no such palette entry."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectDrawSurface" resname="DXConsts_SDirectDrawSurface">
<source>"Surface"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectDrawPrimarySurface" resname="DXConsts_SDirectDrawPrimarySurface">
<source>"Primary Surface"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_STexture" resname="DXConsts_STexture">
<source>"Texture"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SNotMade" resname="DXConsts_SNotMade">
<source>"%s not made"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SCannotMade" resname="DXConsts_SCannotMade">
<source>"%s cannot be made"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SCannotInitialized" resname="DXConsts_SCannotInitialized">
<source>"%s cannot be initialized"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDLLNotLoaded" resname="DXConsts_SDLLNotLoaded">
<source>"%s is not loaded"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SImageNotFound" resname="DXConsts_SImageNotFound">
<source>"Image '%s' not found"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SListIndexError" resname="DXConsts_SListIndexError">
<source>"Index of the list exceeds the range. (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SScanline" resname="DXConsts_SScanline">
<source>"Index of the scanning line exceeded the range. (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SNoForm" resname="DXConsts_SNoForm">
<source>"Form not found"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SSinceDirectX6" resname="DXConsts_SSinceDirectX6">
<source>"Requires DirectX 6.0 or later"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SSinceDirectX7" resname="DXConsts_SSinceDirectX7">
<source>"Requires DirectX 7.0 or later"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_S3DDeviceNotFound" resname="DXConsts_S3DDeviceNotFound">
<source>"3D device not found"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDisplayModeChange" resname="DXConsts_SDisplayModeChange">
<source>"Display mode cannot be changed (%dx%d %dbit)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDisplayModeCannotAcquired" resname="DXConsts_SDisplayModeCannotAcquired">
<source>"Display mode cannot be acquired"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleFormatError" resname="Vcl_Consts_SStyleFormatError">
<source>"Ungültiges Stilformat"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid style format"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleHookClassRegistered" resname="Vcl_Consts_SStyleHookClassRegistered">
<source>"Klasse '%s' ist für '%s' bereits registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Class '%s' is already registered for '%s'"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleHookClassNotRegistered" resname="Vcl_Consts_SStyleHookClassNotRegistered">
<source>"Klasse '%s' ist für '%s' nicht registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Class '%s' is not registered for '%s'"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleInvalidParameter" resname="Vcl_Consts_SStyleInvalidParameter">
<source>"Parameter %s darf nicht nil sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Parameter %s must not me nil"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleFeatureNotSupported" resname="Vcl_Consts_SStyleFeatureNotSupported">
<source>"Funktion wird von diesem Stil nicht unterstützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Function is not supported by this style"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleNotRegistered" resname="Vcl_Consts_SStyleNotRegistered">
<source>"Der Stil '%s' ist nicht registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The style '%s' is not registered"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleUnregisterError" resname="Vcl_Consts_SStyleUnregisterError">
<source>"Die Registrierung des Systemstils kann nicht aufgehoben werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The registry of the system style cannot be removed"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleNotRegisteredNoName" resname="Vcl_Consts_SStyleNotRegisteredNoName">
<source>"Stil nicht registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style not registered"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_sBeginInvokeNoHandle" resname="Vcl_Consts_sBeginInvokeNoHandle">
<source>"BeginInvoke kann nicht ohne übergeordnetes Element oder Fenster-Handle aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"BeginInvoke cannot be called without superior window or window handle"</target>
</trans-unit>
<trans-unit id="System_Win_ComConst_SOleError" resname="System_Win_ComConst_SOleError">
<source>"OLE-Fehler %.8x"</source>
<target>"OLE error %.8x"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_Win_ComConst_SNoMethod" resname="System_Win_ComConst_SNoMethod">
<source>"Die Methode '%s' wird vom Automatisierungsobjekt nicht unterstützt"</source>
<target>"Method '%s' not supported by automation object"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_Win_ComConst_SVarNotObject" resname="System_Win_ComConst_SVarNotObject">
<source>"Variante referenziert kein Automatisierungsobjekt"</source>
<target>"Variant does not reference an automation object"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_Win_ComConst_STooManyParams" resname="System_Win_ComConst_STooManyParams">
<source>"Dispatch-Methoden unterstützen maximal 64 Parameter."</source>
<target>"Dispatch methods do not support more than 64 parameters"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_Win_ComConst_SDCOMNotInstalled" resname="System_Win_ComConst_SDCOMNotInstalled">
<source>"DCOM ist nicht installiert"</source>
<target>"DCOM not installed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectDraw" resname="DXConsts_SDirectDraw">
<source>"DirectDraw"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectDrawClipper" resname="DXConsts_SDirectDrawClipper">
<source>"Clipper"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDomain" resname="Vcl_Consts_SDomain">
<source>"&amp;Domäne"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"&amp;Domain"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SLogin" resname="Vcl_Consts_SLogin">
<source>"Anmelden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Login"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SErrorSettingCount" resname="Vcl_Consts_SErrorSettingCount">
<source>"Fehler beim Setzen von %s.Count"</source>
<target>"Error setting %s.Count"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SListBoxMustBeVirtual" resname="Vcl_Consts_SListBoxMustBeVirtual">
<source>"Stil des Listenfeldes (%s) muss virtuell sein, damit Count gesetzt werden kann"</source>
<target>"Listbox (%s) style must be virtual in order to set Count"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_STrayIconRemoveError" resname="Vcl_Consts_STrayIconRemoveError">
<source>"Shell-Benachrichtigungssymbol kann nicht entfernt werden"</source>
<target>"Cannot remove shell notification icon"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SWindowsVistaRequired" resname="Vcl_Consts_SWindowsVistaRequired">
<source>"Für %s ist Windows Vista oder höher erforderlich"</source>
<target>"%s requires Windows Vista or later"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_STaskDlgButtonCaption" resname="Vcl_Consts_STaskDlgButtonCaption">
<source>"Button%d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">6</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_STaskDlgRadioButtonCaption" resname="Vcl_Consts_STaskDlgRadioButtonCaption">
<source>"RadioButton%d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">6</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidTaskDlgButtonCaption" resname="Vcl_Consts_SInvalidTaskDlgButtonCaption">
<source>"Caption darf nicht leer sein"</source>
<target>"Caption cannot be empty"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleLoadError" resname="Vcl_Consts_SStyleLoadError">
<source>"Stil '%s' kann nicht geladen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style '%s' cannot be loaded"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleLoadErrors" resname="Vcl_Consts_SStyleLoadErrors">
<source>"Stile %s können nicht geladen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Styles %s cannot be loaded"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleRegisterError" resname="Vcl_Consts_SStyleRegisterError">
<source>"Stil '%s' bereits registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style '%s' is already registered"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleClassRegisterError" resname="Vcl_Consts_SStyleClassRegisterError">
<source>"Stilklasse '%s' bereits registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style class '%s' is already registered"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleNotFound" resname="Vcl_Consts_SStyleNotFound">
<source>"Stil '%s' nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style '%s' not found"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleClassNotFound" resname="Vcl_Consts_SStyleClassNotFound">
<source>"Stilklasse '%s' nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style class '%s' not found"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleInvalidHandle" resname="Vcl_Consts_SStyleInvalidHandle">
<source>"Ungültiges Stil-Handle"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid style handle"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInsertLineError" resname="Vcl_Consts_SInsertLineError">
<source>"Zeile kann nicht eingefügt werden"</source>
<target>"Unable to insert a line"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SIconToClipboard" resname="Vcl_Consts_SIconToClipboard">
<source>"Zwischenablage unterstützt keine Symbole"</source>
<target>"Clipboard does not support Icons"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCannotOpenClipboard" resname="Vcl_Consts_SCannotOpenClipboard">
<source>"Zwischenablage %s kann nicht geöffnet werden"</source>
<target>"Cannot open clipboard: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidMemoSize" resname="Vcl_Consts_SInvalidMemoSize">
<source>"Text überschreitet Memo-Kapazität"</source>
<target>"Text exceeds memo capacity"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidPrinterOp" resname="Vcl_Consts_SInvalidPrinterOp">
<source>"Operation auf ausgewähltem Drucker nicht verfügbar"</source>
<target>"Operation not supported on selected printer"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoDefaultPrinter" resname="Vcl_Consts_SNoDefaultPrinter">
<source>"Aktuell ist kein Standarddrucker ausgewählt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Currently no default printer is selected"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SDuplicateMenus" resname="Vcl_Consts_SDuplicateMenus">
<source>"Menü '%s' wird bereits von einem anderen Formular verwendet"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Menü '%s' is already used for a different form"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockedCtlNeedsName" resname="Vcl_Consts_SDockedCtlNeedsName">
<source>"Angedocktes Steuerelement muss einen Namen haben."</source>
<target>"Docked control must have a name"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockTreeRemoveError" resname="Vcl_Consts_SDockTreeRemoveError">
<source>"Fehler beim Entfernen des Steuerelements aus der Andock-Hierarchie"</source>
<target>"Error removing control from dock tree"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockZoneNotFound" resname="Vcl_Consts_SDockZoneNotFound">
<source>" - Andockzone nicht gefunden"</source>
<target>" - Dock zone not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockZoneHasNoCtl" resname="Vcl_Consts_SDockZoneHasNoCtl">
<source>" - Andockzone enthält kein Steuerelement"</source>
<target>" - Dock zone has no control"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockZoneVersionConflict" resname="Vcl_Consts_SDockZoneVersionConflict">
<source>"Fehler beim Laden der Andockzone aus dem Stream. Version %d erwartet, aber %d gefunden."</source>
<target>"Error loading dock zone from the stream. Expecting version %d, but found %d."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SPromptArrayTooShort" resname="Vcl_Consts_SPromptArrayTooShort">
<source>"Länge des Werte-Arrays muss &gt;= der Länge des Prompt-Arrays sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Length of the value array must be &gt;= length of the prompt array"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SPromptArrayEmpty" resname="Vcl_Consts_SPromptArrayEmpty">
<source>"Prompt-Array darf nicht leer sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Prompt array must not be empty"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SUsername" resname="Vcl_Consts_SUsername">
<source>"&amp;Benutzername"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"&amp;Username"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SPassword" resname="Vcl_Consts_SPassword">
<source>"&amp;Passwort"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"&amp;Password"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcSpace" resname="Vcl_Consts_SmkcSpace">
<source>"Leer"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Space"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcPgUp" resname="Vcl_Consts_SmkcPgUp">
<source>"BildAuf"</source>
<target>"PgUp"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcPgDn" resname="Vcl_Consts_SmkcPgDn">
<source>"BildAb"</source>
<target>"PgDn"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcEnd" resname="Vcl_Consts_SmkcEnd">
<source>"Ende"</source>
<target>"End"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcHome" resname="Vcl_Consts_SmkcHome">
<source>"Pos1"</source>
<target>"Home"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcLeft" resname="Vcl_Consts_SmkcLeft">
<source>"Links"</source>
<target>"Left"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcUp" resname="Vcl_Consts_SmkcUp">
<source>"Auf"</source>
<target>"Up"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcRight" resname="Vcl_Consts_SmkcRight">
<source>"Rechts"</source>
<target>"Right"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcDown" resname="Vcl_Consts_SmkcDown">
<source>"Ab"</source>
<target>"Down"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcIns" resname="Vcl_Consts_SmkcIns">
<source>"Einfg"</source>
<target>"Ins"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcDel" resname="Vcl_Consts_SmkcDel">
<source>"Entf"</source>
<target>"Del"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcShift" resname="Vcl_Consts_SmkcShift">
<source>"Umsch+"</source>
<target>"Shift+"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcCtrl" resname="Vcl_Consts_SmkcCtrl">
<source>"Strg+"</source>
<target>"Ctrl+"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcAlt" resname="Vcl_Consts_SmkcAlt">
<source>"Alt+"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SOutOfRange" resname="Vcl_Consts_SOutOfRange">
<source>"Wert muss zwischen %d und %d liegen"</source>
<target>"Value must be between %d and %d"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_sAllFilter" resname="Vcl_Consts_sAllFilter">
<source>"Alle"</source>
<target>"All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgYes" resname="Vcl_Consts_SMsgDlgYes">
<source>"&amp;Ja"</source>
<target>"&amp;Yes"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgNo" resname="Vcl_Consts_SMsgDlgNo">
<source>"&amp;Nein"</source>
<target>"&amp;No"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgOK" resname="Vcl_Consts_SMsgDlgOK">
<source>"OK"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgCancel" resname="Vcl_Consts_SMsgDlgCancel">
<source>"Abbrechen"</source>
<target>"Cancel"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgHelp" resname="Vcl_Consts_SMsgDlgHelp">
<source>"&amp;Hilfe"</source>
<target>"&amp;Help"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgAbort" resname="Vcl_Consts_SMsgDlgAbort">
<source>"&amp;Abbrechen"</source>
<target>"&amp;Abort"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgRetry" resname="Vcl_Consts_SMsgDlgRetry">
<source>"&amp;Wiederholen"</source>
<target>"&amp;Retry"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgIgnore" resname="Vcl_Consts_SMsgDlgIgnore">
<source>"&amp;Ignorieren"</source>
<target>"&amp;Ignore"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgAll" resname="Vcl_Consts_SMsgDlgAll">
<source>"&amp;Alle"</source>
<target>"&amp;All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgNoToAll" resname="Vcl_Consts_SMsgDlgNoToAll">
<source>"&amp;Alle Nein"</source>
<target>"N&amp;o to All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgYesToAll" resname="Vcl_Consts_SMsgDlgYesToAll">
<source>"A&amp;lle Ja"</source>
<target>"Yes to &amp;All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgClose" resname="Vcl_Consts_SMsgDlgClose">
<source>"S&amp;chließen"</source>
<target>"&amp;Close"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcBkSp" resname="Vcl_Consts_SmkcBkSp">
<source>"Rück"</source>
<target>"BkSp"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcTab" resname="Vcl_Consts_SmkcTab">
<source>"Tab"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcEsc" resname="Vcl_Consts_SmkcEsc">
<source>"Esc"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcEnter" resname="Vcl_Consts_SmkcEnter">
<source>"Eingabe"</source>
<target>"Enter"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SHelpButton" resname="Vcl_Consts_SHelpButton">
<source>"&amp;Hilfe"</source>
<target>"&amp;Help"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCloseButton" resname="Vcl_Consts_SCloseButton">
<source>"&amp;Schließen"</source>
<target>"&amp;Close"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SIgnoreButton" resname="Vcl_Consts_SIgnoreButton">
<source>"&amp;Ignorieren"</source>
<target>"&amp;Ignore"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SRetryButton" resname="Vcl_Consts_SRetryButton">
<source>"&amp;Wiederholen"</source>
<target>"&amp;Retry"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SAbortButton" resname="Vcl_Consts_SAbortButton">
<source>"Abbrechen"</source>
<target>"Cancel"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SAllButton" resname="Vcl_Consts_SAllButton">
<source>"&amp;Alle"</source>
<target>"&amp;All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCannotDragForm" resname="Vcl_Consts_SCannotDragForm">
<source>"Formulare können nicht gezogen werden"</source>
<target>"Cannot drag a form"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVMetafiles" resname="Vcl_Consts_SVMetafiles">
<source>"Metadateien"</source>
<target>"Metafiles"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVEnhMetafiles" resname="Vcl_Consts_SVEnhMetafiles">
<source>"Erweiterte Metadateien"</source>
<target>"Enhanced Metafiles"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVIcons" resname="Vcl_Consts_SVIcons">
<source>"Symbole"</source>
<target>"Icons"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVBitmaps" resname="Vcl_Consts_SVBitmaps">
<source>"Bitmaps"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVTIFFImages" resname="Vcl_Consts_SVTIFFImages">
<source>"TIFF-Grafiken"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"TIFF graphics"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgWarning" resname="Vcl_Consts_SMsgDlgWarning">
<source>"Warnung"</source>
<target>"Warning"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgError" resname="Vcl_Consts_SMsgDlgError">
<source>"Fehler"</source>
<target>"Error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgInformation" resname="Vcl_Consts_SMsgDlgInformation">
<source>"Informationen"</source>
<target>"Information"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgConfirm" resname="Vcl_Consts_SMsgDlgConfirm">
<source>"Bestätigen"</source>
<target>"Confirm"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMenuNotFound" resname="Vcl_Consts_SMenuNotFound">
<source>"Untermenü ist nicht im Menü"</source>
<target>"Sub-menu is not in menu"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoTimers" resname="Vcl_Consts_SNoTimers">
<source>"Nicht genügend Timer verfügbar"</source>
<target>"Not enough timers available"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SNotPrinting" resname="Vcl_Consts_SNotPrinting">
<source>"Der Drucker druckt aktuell nicht"</source>
<target>"Printer is not currently printing"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SPrinting" resname="Vcl_Consts_SPrinting">
<source>"Druckvorgang läuft"</source>
<target>"Printing in progress"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SPrinterIndexError" resname="Vcl_Consts_SPrinterIndexError">
<source>"Druckerindex außerhalb des zulässigen Bereichs"</source>
<target>"Printer index out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidPrinter" resname="Vcl_Consts_SInvalidPrinter">
<source>"Ausgewählter Drucker ist ungültig"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Selected printer is invalid"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SDeviceOnPort" resname="Vcl_Consts_SDeviceOnPort">
<source>"%s an %s"</source>
<target>"%s on %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SGroupIndexTooLow" resname="Vcl_Consts_SGroupIndexTooLow">
<source>"GroupIndex darf nicht kleiner sein als der GroupIndex eines vorherigen Menüelements"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"GroupIndex must not be smaller than the GroupIndex of a previous menu item"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoMDIForm" resname="Vcl_Consts_SNoMDIForm">
<source>"Formular kann nicht erstellt werden. Aktuell sind keine MDI-Formulare aktiv"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Form cannot be created. Currently no MDI forms are active"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SImageCanvasNeedsBitmap" resname="Vcl_Consts_SImageCanvasNeedsBitmap">
<source>"Ein Bild kann nur geändert werden, wenn es ein Bitmap enthält"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"A picture can only be changed if it contains a bitmap"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SControlParentSetToSelf" resname="Vcl_Consts_SControlParentSetToSelf">
<source>"Steuerelement kann nicht sich selbst als Vorfahr haben"</source>
<target>"A control cannot have itself as its parent"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SControlNonMainThreadUsage" resname="Vcl_Consts_SControlNonMainThreadUsage">
<source>"Steuerelement '%s' wird nicht für einen Haupt-Thread verwendet"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Control '%s' is not used for a main thread"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SOKButton" resname="Vcl_Consts_SOKButton">
<source>"OK"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCancelButton" resname="Vcl_Consts_SCancelButton">
<source>"Abbrechen"</source>
<target>"Cancel"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SYesButton" resname="Vcl_Consts_SYesButton">
<source>"&amp;Ja"</source>
<target>"&amp;Yes"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoButton" resname="Vcl_Consts_SNoButton">
<source>"&amp;Nein"</source>
<target>"&amp;No"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SImageIndexError" resname="Vcl_Consts_SImageIndexError">
<source>"Ungültiger ImageList-Index"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid ImageList index"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SImageReadFail" resname="Vcl_Consts_SImageReadFail">
<source>"ImageList-Daten konnten nicht aus dem Stream gelesen werden"</source>
<target>"Failed to read ImageList data from stream"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SImageWriteFail" resname="Vcl_Consts_SImageWriteFail">
<source>"ImageList-Daten konnten nicht in den Stream geschrieben werden"</source>
<target>"Failed to write ImageList data to stream"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SWindowDCError" resname="Vcl_Consts_SWindowDCError">
<source>"Fehler beim Erstellen des Fenster-Gerätekontexts"</source>
<target>"Error creating window device context"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SWindowClass" resname="Vcl_Consts_SWindowClass">
<source>"Fehler beim Erzeugen einer Fensterklasse"</source>
<target>"Error creating window class"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCannotFocus" resname="Vcl_Consts_SCannotFocus">
<source>"Deaktiviertes oder unsichtbares Fenster kann den Fokus nicht erhalten"</source>
<target>"Cannot focus a disabled or invisible window"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SParentRequired" resname="Vcl_Consts_SParentRequired">
<source>"Element '%s' hat kein übergeordnetes Fenster"</source>
<target>"Control '%s' has no parent window"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SControlPath" resname="Vcl_Consts_SControlPath">
<source>". Pfad:\r\n%s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>". Path:\r\n%s"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SParentGivenNotAParent" resname="Vcl_Consts_SParentGivenNotAParent">
<source>"Das angegebene übergeordnete Element ist kein übergeordnetes Element von '%s'"</source>
<target>"Parent given is not a parent of '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMDIChildNotVisible" resname="Vcl_Consts_SMDIChildNotVisible">
<source>"Untergeordnetes MDI-Formular kann nicht verborgen werden"</source>
<target>"Cannot hide an MDI Child Form"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVisibleChanged" resname="Vcl_Consts_SVisibleChanged">
<source>"Eigenschaft Visible kann in OnShow oder OnHide nicht verändert werden"</source>
<target>"Cannot change Visible in OnShow or OnHide"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCannotShowModal" resname="Vcl_Consts_SCannotShowModal">
<source>"Sichtbares Fenster kann nicht in modales geändert werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"A visible window cannot be converted to a modal window."</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SScrollBarRange" resname="Vcl_Consts_SScrollBarRange">
<source>"Eigenschaft Scrollbar außerhalb des zulässigen Bereichs"</source>
<target>"Scrollbar property out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SPropertyOutOfRange" resname="Vcl_Consts_SPropertyOutOfRange">
<source>"Eigenschaft %s außerhalb des zulässigen Bereichs"</source>
<target>"%s property out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMenuIndexError" resname="Vcl_Consts_SMenuIndexError">
<source>"Menüindex außerhalb des zulässigen Bereichs"</source>
<target>"Menu index out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMenuReinserted" resname="Vcl_Consts_SMenuReinserted">
<source>"Menü zweimal eingefügt"</source>
<target>"Menu inserted twice"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidImage" resname="Vcl_Consts_SInvalidImage">
<source>"Ungültiges Bild"</source>
<target>"Invalid image"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SScanLine" resname="Vcl_Consts_SScanLine">
<source>"Bereichsüberschreitung bei Zeilenindex"</source>
<target>"Scan line index out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SChangeIconSize" resname="Vcl_Consts_SChangeIconSize">
<source>"Die Größe eines Symbols kann nicht geändert werden"</source>
<target>"Cannot change the size of an icon"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SChangeWicSize" resname="Vcl_Consts_SChangeWicSize">
<source>"Die Größe einer WIC-Grafik kann nicht verändert werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The size of a WIC picture cannot be changed"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SOleGraphic" resname="Vcl_Consts_SOleGraphic">
<source>"Ungültige Operation für TOleGraphic"</source>
<target>"Invalid operation on TOleGraphic"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SUnknownExtension" resname="Vcl_Consts_SUnknownExtension">
<source>"Unbekannte Bilddateierweiterung (.%s)"</source>
<target>"Unknown picture file extension (.%s)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SUnknownClipboardFormat" resname="Vcl_Consts_SUnknownClipboardFormat">
<source>"Nicht unterstütztes Zwischenablagenformat"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Clipboard format not supported"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SUnknownStreamFormat" resname="Vcl_Consts_SUnknownStreamFormat">
<source>"Nicht unterstütztes Stream-Format"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Stream format not supported"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SOutOfResources" resname="Vcl_Consts_SOutOfResources">
<source>"Systemressourcen erschöpft"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"System resources are exhausted"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoCanvasHandle" resname="Vcl_Consts_SNoCanvasHandle">
<source>"Canvas erlaubt kein Zeichnen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Canvas does not allow characters"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidTextFormatFlag" resname="Vcl_Consts_SInvalidTextFormatFlag">
<source>"Das Textformat-Flag '%s' wird nicht unterstützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Text format flag '%s' is not supported"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidFrameIndex" resname="Vcl_Consts_SInvalidFrameIndex">
<source>"Ungültiger Bild-Frame-Index %d: es sind %d Frames vorhanden (0-%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid picture frame index %d: there are %d frames available (0-%d)"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidImageSize" resname="Vcl_Consts_SInvalidImageSize">
<source>"Ungültige Bildgröße"</source>
<target>"Invalid image size"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidImageList" resname="Vcl_Consts_SInvalidImageList">
<source>"Ungültige Bilderliste"</source>
<target>"Invalid ImageList"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SReplaceImage" resname="Vcl_Consts_SReplaceImage">
<source>"Bild kann nicht ersetzt werden"</source>
<target>"Unable to Replace Image"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInsertImage" resname="Vcl_Consts_SInsertImage">
<source>"Bild kann nicht eingefügt werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Picture cannot be inserted"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SWinRTInstanceError" resname="System_RTLConsts_SWinRTInstanceError">
<source>"Instanz der Klasse %s kann nicht erstellt werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Instance of class %s cannot be created"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverUnsupported" resname="System_RTLConsts_sObserverUnsupported">
<source>"Observer wird nicht unterstützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Observer is not supported"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverMultipleSingleCast" resname="System_RTLConsts_sObserverMultipleSingleCast">
<source>"Der Observer-Kollektion können nicht mehrere Einfach-Typumwandlungs-Observer hinzugefügt werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Multiple single cast observers cannot be added to observer collection"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverNoInterface" resname="System_RTLConsts_sObserverNoInterface">
<source>"Das Objekt implementiert das Observer-Interface nicht"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The object does not implement the observer interface"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverNoSinglecastFound" resname="System_RTLConsts_sObserverNoSinglecastFound">
<source>"Der Observer-Kollektion wurde kein Einfach-Typumwandlungs-Observer mit der ID %d hinzugefügt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No single cast observer with ID %d found in collection"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverNoMulticastFound" resname="System_RTLConsts_sObserverNoMulticastFound">
<source>"Der Observer-Kollektion wurde kein Mehrfach-Typumwandlungs-Observer mit der ID %d hinzugefügt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No multi cast observer with ID %d found in collection"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverNotAvailable" resname="System_RTLConsts_sObserverNotAvailable">
<source>"Observer ist nicht verfügbar"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Observer is not available"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidDateString" resname="System_RTLConsts_SInvalidDateString">
<source>"Ungültiger Datums-String: %s"</source>
<target>"Invalid date string: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidTimeString" resname="System_RTLConsts_SInvalidTimeString">
<source>"Ungültiger Zeit-String: %s"</source>
<target>"Invalid time string: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidOffsetString" resname="System_RTLConsts_SInvalidOffsetString">
<source>"Ungültiger Zeit-Offset-String: %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid time offset string: %s"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sMustWaitOnOneEvent" resname="System_RTLConsts_sMustWaitOnOneEvent">
<source>"Es muss auf mindestens ein Ereignis gewartet werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Waiting for at least one event"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sBeginInvokeDestroying" resname="System_RTLConsts_sBeginInvokeDestroying">
<source>"BeginInvoke kann bei der Freigabe für TComponent nicht aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"BeginInvoke cannot be called to free TComponent"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidBitmap" resname="Vcl_Consts_SInvalidBitmap">
<source>"Bitmap ist ungültig"</source>
<target>"Bitmap image is not valid"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidIcon" resname="Vcl_Consts_SInvalidIcon">
<source>"Ungültiges Symbol"</source>
<target>"Icon image is not valid"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidMetafile" resname="Vcl_Consts_SInvalidMetafile">
<source>"Metadatei ist ungültig"</source>
<target>"Metafile is not valid"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidPixelFormat" resname="Vcl_Consts_SInvalidPixelFormat">
<source>"Ungültiges Pixel-Format"</source>
<target>"Invalid pixel format"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2008" resname="System_RTLConsts_SWindowsServer2008">
<source>"Windows Server 2008"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows7" resname="System_RTLConsts_SWindows7">
<source>"Windows 7"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2008R2" resname="System_RTLConsts_SWindowsServer2008R2">
<source>"Windows Server 2008 R2"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows2000" resname="System_RTLConsts_SWindows2000">
<source>"Windows 2000"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsXP" resname="System_RTLConsts_SWindowsXP">
<source>"Windows XP"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2003" resname="System_RTLConsts_SWindowsServer2003">
<source>"Windows Server 2003"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2003R2" resname="System_RTLConsts_SWindowsServer2003R2">
<source>"Windows Server 2003 R2"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2012" resname="System_RTLConsts_SWindowsServer2012">
<source>"Windows Server 2012"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2012R2" resname="System_RTLConsts_SWindowsServer2012R2">
<source>"Windows Server 2012 R2"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2016" resname="System_RTLConsts_SWindowsServer2016">
<source>"Windows Server 2016"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2019" resname="System_RTLConsts_SWindowsServer2019">
<source>"Windows Server 2019"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2022" resname="System_RTLConsts_SWindowsServer2022">
<source>"Windows Server 2022"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows8" resname="System_RTLConsts_SWindows8">
<source>"Windows 8"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows8Point1" resname="System_RTLConsts_SWindows8Point1">
<source>"Windows 8.1"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows10" resname="System_RTLConsts_SWindows10">
<source>"Windows 10"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows11" resname="System_RTLConsts_SWindows11">
<source>"Windows 11"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SGenericItemNotFound" resname="System_RTLConsts_SGenericItemNotFound">
<source>"Eintrag nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Entry not found"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SGenericDuplicateItem" resname="System_RTLConsts_SGenericDuplicateItem">
<source>"Duplikate nicht zulässig"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Duplicates are not allowed"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInsufficientRtti" resname="System_RTLConsts_SInsufficientRtti">
<source>"Unzureichende RTTI zur Unterstützung dieser Operation verfügbar"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Not enough RTTI for this operation"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SParameterCountMismatch" resname="System_RTLConsts_SParameterCountMismatch">
<source>"Parameteranzahl stimmt nicht überein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Parameter count not matched"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SNonPublicType" resname="System_RTLConsts_SNonPublicType">
<source>"Typ '%s' ist im interface-Abschnitt einer Unit nicht deklariert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Type '%s' is not declared in the interface-Abschnitt of a unit"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SByRefArgMismatch" resname="System_RTLConsts_SByRefArgMismatch">
<source>"VAR- und OUT-Argumente müssen exakt mit dem Parametertyp übereinstimmen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"VAR- and OUT-arguments must match the parameter type"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SPropIsReadOnly" resname="System_RTLConsts_SPropIsReadOnly">
<source>"Eigenschaft '%s' ist schreibgeschützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Property '%s' is write-protected"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SPropIsWriteOnly" resname="System_RTLConsts_SPropIsWriteOnly">
<source>"Eigenschaft '%s' kann nur geschrieben werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Property '%s' can only be written"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidRttiDestroy" resname="System_RTLConsts_SInvalidRttiDestroy">
<source>"RTTI-Objekte können nicht manuell vom Anwendungscode freigegeben werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"RTTI objects cannot be freed through source code"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SServiceNotFound" resname="System_RTLConsts_SServiceNotFound">
<source>"Angegebener Dienst für die Anmeldeinformationen nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Service for login information not found"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SVersionStr" resname="System_RTLConsts_SVersionStr">
<source>"%s (Version %d.%d, Build %d, %5:s)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SSPVersionStr" resname="System_RTLConsts_SSPVersionStr">
<source>"%s Service Pack %4:d (Version %1:d.%2:d, Build %3:d, %5:s)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SVersion32" resname="System_RTLConsts_SVersion32">
<source>"32-Bit-Edition"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"32 bit edition"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SVersion64" resname="System_RTLConsts_SVersion64">
<source>"64-Bit-Edition"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"64 bit edition"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows" resname="System_RTLConsts_SWindows">
<source>"Windows"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsVista" resname="System_RTLConsts_SWindowsVista">
<source>"Windows Vista"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_sSpinCountOutOfRange" resname="System_RTLConsts_sSpinCountOutOfRange">
<source>"SpinCount außerhalb des Bereichs. Muss zwischen 0 und %d liegen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"SpinCount outside range. It must be between 0 and %d"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sTimespanTooLong" resname="System_RTLConsts_sTimespanTooLong">
<source>"TimeSpan zu lang"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"TimeSpan too long"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sInvalidTimespanDuration" resname="System_RTLConsts_sInvalidTimespanDuration">
<source>"Die Dauer kann nicht zurückgegeben werden, weil der absolute Wert den Wert von TTimeSpan.MaxValue überschreitet"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Duration cannot be returned because the absolute value exceeds TTimeSpan.MaxValue"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sTimespanValueCannotBeNan" resname="System_RTLConsts_sTimespanValueCannotBeNan">
<source>"Wert darf nicht NaN"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Wert must not be NaN"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sCannotNegateTimespan" resname="System_RTLConsts_sCannotNegateTimespan">
<source>"Negation des Minimalwertes einer Zeitspanne ist ungültig"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Negation of mimimum value of a time range is invalid"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sInvalidTimespanFormat" resname="System_RTLConsts_sInvalidTimespanFormat">
<source>"Ungültiges TimeSpan-Format"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid TimeSpan format"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sTimespanElementTooLong" resname="System_RTLConsts_sTimespanElementTooLong">
<source>"TimeSpan-Element zu lang"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334984722</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"TimeSpan element too long"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoContext" resname="System_RTLConsts_SNoContext">
<source>"Keine kontextsensitive Hilfe installiert"</source>
<target>"No context-sensitive help installed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoContextFound" resname="System_RTLConsts_SNoContextFound">
<source>"Keine Hilfe für Kontext %d gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No help available for context %d"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoIndex" resname="System_RTLConsts_SNoIndex">
<source>"Index kann nicht geöffnet werden"</source>
<target>"Unable to open Index"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoSearch" resname="System_RTLConsts_SNoSearch">
<source>"Suche kann nicht geöffnet werden"</source>
<target>"Unable to open Search"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoTableOfContents" resname="System_RTLConsts_SNoTableOfContents">
<source>"Inhaltsverzeichnis nicht gefunden"</source>
<target>"Unable to find a Table of Contents"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoTopics" resname="System_RTLConsts_SNoTopics">
<source>"Kein themenbezogenes Hilfesystem installiert"</source>
<target>"No topic-based help system installed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNothingFound" resname="System_RTLConsts_SNothingFound">
<source>"Keine Hilfe für %s gefunden"</source>
<target>"No help found for %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SArgumentOutOfRange" resname="System_RTLConsts_SArgumentOutOfRange">
<source>"Argument außerhalb des Bereichs"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Argument outside of valid range"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SArgumentNil" resname="System_RTLConsts_SArgumentNil">
<source>"Argument darf nicht nil sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Argument must not be Nil"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadExternalCheckTerminated" resname="System_RTLConsts_SThreadExternalCheckTerminated">
<source>"CheckTerminated kann nicht für einen extern erstellten Thread aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"CheckTerminated cannot be called for an external created thread"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadExternalSetReturnValue" resname="System_RTLConsts_SThreadExternalSetReturnValue">
<source>"SetReturnValue kann nicht für einen extern erstellten Thread aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"SetReturnValue cannot be called for an external created thread"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SParamIsNil" resname="System_RTLConsts_SParamIsNil">
<source>"Parameter %s darf nicht Nil sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Parameter %s must not be Nil"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SParamIsNegative" resname="System_RTLConsts_SParamIsNegative">
<source>"Parameter %s darf kein negativer Wert sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Parameter %s must not be negative"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInputBufferExceed" resname="System_RTLConsts_SInputBufferExceed">
<source>"Eingabepuffer für %s = %d, %s = %d überschritten"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Input buffer of %s = %d, %s = %d exceeded"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidCharsInPath" resname="System_RTLConsts_SInvalidCharsInPath">
<source>"Ungültige Zeichen im Pfad"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid character in file path"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidCharsInFileName" resname="System_RTLConsts_SInvalidCharsInFileName">
<source>"Ungültige Zeichen im Dateinamen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid character in file name"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SEmptyFileName" resname="System_RTLConsts_SEmptyFileName">
<source>"Dateiname ist leer"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Filename is empty"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SPathTooLong" resname="System_RTLConsts_SPathTooLong">
<source>"Der angegebene Pfad ist zu lang"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The path is too long"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SDriveNotFound" resname="System_RTLConsts_SDriveNotFound">
<source>"Das Laufwerk wurde nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Drive not found"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_hNoFilterViewer" resname="System_RTLConsts_hNoFilterViewer">
<source>"Kein Hilfe-Viewer, der Filter unterstützt"</source>
<target>"No help viewer that supports filters"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_sArgumentInvalid" resname="System_RTLConsts_sArgumentInvalid">
<source>"Ungültiges Argument"</source>
<target>"Invalid argument"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_sInvalidStringAndObjectArrays" resname="System_RTLConsts_sInvalidStringAndObjectArrays">
<source>"Die Länge von String- und Objekt-Arrays muss gleich sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Length of string and object array must be equal"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sSameArrays" resname="System_RTLConsts_sSameArrays">
<source>"Quell- und Ziel-Arrays dürfen nicht gleich sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Source and target arrays must be different"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sNoConstruct" resname="System_RTLConsts_sNoConstruct">
<source>"Klasse %s soll nicht erzeugt werden"</source>
<target>"Class %s is not intended to be constructed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_sInvalidTimeoutValue" resname="System_RTLConsts_sInvalidTimeoutValue">
<source>"Ungültiger Wert für Zeitüberschreitung: %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid value for timeout: %s"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SReadError" resname="System_RTLConsts_SReadError">
<source>"Stream-Lesefehler"</source>
<target>"Stream read error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SReadOnlyProperty" resname="System_RTLConsts_SReadOnlyProperty">
<source>"Eigenschaft kann nur gelesen werden"</source>
<target>"Property is read-only"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SRegCreateFailed" resname="System_RTLConsts_SRegCreateFailed">
<source>"Erzeugung von Schlüssel %s misslungen"</source>
<target>"Failed to create key %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SRegGetDataFailed" resname="System_RTLConsts_SRegGetDataFailed">
<source>"Fehler beim Holen der Daten für '%s'"</source>
<target>"Failed to get data for '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SRegSetDataFailed" resname="System_RTLConsts_SRegSetDataFailed">
<source>"Fehler beim Setzen der Daten für '%s'"</source>
<target>"Failed to set data for '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SResNotFound" resname="System_RTLConsts_SResNotFound">
<source>"Ressource %s nicht gefunden"</source>
<target>"Resource %s not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SSeekNotImplemented" resname="System_RTLConsts_SSeekNotImplemented">
<source>"%s.Seek nicht implementiert"</source>
<target>"%s.Seek not implemented"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SSortedListError" resname="System_RTLConsts_SSortedListError">
<source>"Operation für sortierte Listen nicht zulässig"</source>
<target>"Operation not allowed on sorted list"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SUnknownGroup" resname="System_RTLConsts_SUnknownGroup">
<source>"%s befindet sich nicht in einer Gruppe für Klassenregistrierungen"</source>
<target>"%s not in a class registration group"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SUnknownProperty" resname="System_RTLConsts_SUnknownProperty">
<source>"Eigenschaft %s existiert nicht"</source>
<target>"Property %s does not exist"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWriteError" resname="System_RTLConsts_SWriteError">
<source>"Stream-Schreibfehler"</source>
<target>"Stream write error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadCreateError" resname="System_RTLConsts_SThreadCreateError">
<source>"Fehler beim Erzeugen des Thread: %s"</source>
<target>"Thread creation error: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadError" resname="System_RTLConsts_SThreadError">
<source>"Thread-Fehler: %s (%d)"</source>
<target>"Thread Error: %s (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadExternalTerminate" resname="System_RTLConsts_SThreadExternalTerminate">
<source>"Ein extern erstellter Thread kann nicht beendet werden"</source>
<target>"Cannot terminate an externally created thread"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadExternalWait" resname="System_RTLConsts_SThreadExternalWait">
<source>"Auf einen extern erstellten Thread kann nicht gewartet werden"</source>
<target>"Cannot wait for an externally created thread"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadStartError" resname="System_RTLConsts_SThreadStartError">
<source>"Start kann für einen laufenden oder unterbrochenen Thread nicht aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Start cannot be called for a started or paused thread"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SFCreateErrorEx" resname="System_RTLConsts_SFCreateErrorEx">
<source>"Datei \"%s\" kann nicht erstellt werden. %s"</source>
<target>"Cannot create file \"%s\". %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SFOpenErrorEx" resname="System_RTLConsts_SFOpenErrorEx">
<source>"Datei %s kann nicht geöffnet werden. %s"</source>
<target>"Cannot open file \"%s\". %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidImage" resname="System_RTLConsts_SInvalidImage">
<source>"Ungültiges Stream-Format"</source>
<target>"Invalid stream format"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidName" resname="System_RTLConsts_SInvalidName">
<source>"''%s'' ist kein gültiger Komponentenname"</source>
<target>"''%s'' is not a valid component name"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidProperty" resname="System_RTLConsts_SInvalidProperty">
<source>"Ungültiger Eigenschaftswert"</source>
<target>"Invalid property value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidPropertyPath" resname="System_RTLConsts_SInvalidPropertyPath">
<source>"Ungültiger Pfad für Eigenschaft"</source>
<target>"Invalid property path"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidPropertyValue" resname="System_RTLConsts_SInvalidPropertyValue">
<source>"Ungültiger Eigenschaftswert"</source>
<target>"Invalid property value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidRegType" resname="System_RTLConsts_SInvalidRegType">
<source>"Ungültiger Datentyp für '%s'"</source>
<target>"Invalid data type for '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SListCapacityError" resname="System_RTLConsts_SListCapacityError">
<source>"Kapazität der Liste ist erschöpft (%d)"</source>
<target>"List capacity out of bounds (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SListCountError" resname="System_RTLConsts_SListCountError">
<source>"Zu viele Einträge in der Liste (%d)"</source>
<target>"List count out of bounds (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SListIndexError" resname="System_RTLConsts_SListIndexError">
<source>"Listenindex außerhalb des gültigen Bereichs (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Index outside valid range (%d)"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SListIndexErrorRangeReason" resname="System_RTLConsts_SListIndexErrorRangeReason">
<source>". %s-Bereich ist 0..%d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>". %s range is 0..%d"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SListIndexErrorEmptyReason" resname="System_RTLConsts_SListIndexErrorEmptyReason">
<source>". %s ist leer"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>". %s is empty"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SMemoryStreamError" resname="System_RTLConsts_SMemoryStreamError">
<source>"Expandieren des Speicher-Stream wegen Speichermangel nicht möglich"</source>
<target>"Out of memory while expanding memory stream"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoComSupport" resname="System_RTLConsts_SNoComSupport">
<source>"%s wurde nicht als COM-Klasse registriert"</source>
<target>"%s has not been registered as a COM class"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SPropertyException" resname="System_RTLConsts_SPropertyException">
<source>"Fehler beim Lesen von %s%s%s: %s"</source>
<target>"Error reading %s%s%s: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidCharCount" resname="System_SysConst_SInvalidCharCount">
<source>"Ungültige Anzahl (%d)"</source>
<target>"Invalid count (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidDestinationIndex" resname="System_SysConst_SInvalidDestinationIndex">
<source>"Ungültiger Zielindex (%d)"</source>
<target>"Invalid destination index (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidCodePage" resname="System_SysConst_SInvalidCodePage">
<source>"Ungültige Codeseite"</source>
<target>"Invalid code page"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidEncodingName" resname="System_SysConst_SInvalidEncodingName">
<source>"Ungültiger Codierungsname"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid coding name"</target>
</trans-unit>
<trans-unit id="System_SysConst_SNoMappingForUnicodeCharacter" resname="System_SysConst_SNoMappingForUnicodeCharacter">
<source>"Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No mapping for Unicode character in the target Multibyte code page found"</target>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidStringBaseIndex" resname="System_SysConst_SInvalidStringBaseIndex">
<source>"Ungültiger StringBaseIndex"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid StringBaseIndex"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SAncestorNotFound" resname="System_RTLConsts_SAncestorNotFound">
<source>"Vorfahr für '%s' nicht gefunden"</source>
<target>"Ancestor for '%s' not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SAssignError" resname="System_RTLConsts_SAssignError">
<source>"%s kann nicht zu %s zugewiesen werden"</source>
<target>"Cannot assign a %s to a %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SBitsIndexError" resname="System_RTLConsts_SBitsIndexError">
<source>"Bits-Index außerhalb des zulässigen Bereichs"</source>
<target>"Bits index out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SCantWriteResourceStreamError" resname="System_RTLConsts_SCantWriteResourceStreamError">
<source>"In einen zum Lesen geöffneten Ressourcen-Stream kann nicht geschrieben werden"</source>
<target>"Can't write to a read-only resource stream"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SCheckSynchronizeError" resname="System_RTLConsts_SCheckSynchronizeError">
<source>"CheckSynchronize wurde vom Thread $%x aufgerufen, der NICHT der Haupt-Thread ist."</source>
<target>"CheckSynchronize called from thread $%x, which is NOT the main thread"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SClassNotFound" resname="System_RTLConsts_SClassNotFound">
<source>"Klasse %s nicht gefunden"</source>
<target>"Class %s not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SDuplicateClass" resname="System_RTLConsts_SDuplicateClass">
<source>"Klasse mit der Bezeichnung %s existiert bereits"</source>
<target>"A class named %s already exists"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SDuplicateItem" resname="System_RTLConsts_SDuplicateItem">
<source>"Liste gestattet keine doppelten Einträge ($0%x)"</source>
<target>"List does not allow duplicates ($0%x)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SDuplicateName" resname="System_RTLConsts_SDuplicateName">
<source>"Komponente mit der Bezeichnung %s existiert bereits"</source>
<target>"A component named %s already exists"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SDuplicateString" resname="System_RTLConsts_SDuplicateString">
<source>"In der String-Liste sind Duplikate nicht zulässig"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Duplicates are not allowed in a StringList"</target>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameWed" resname="System_SysConst_SShortDayNameWed">
<source>"Mi"</source>
<target>"Wed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameThu" resname="System_SysConst_SShortDayNameThu">
<source>"Do"</source>
<target>"Thu"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameFri" resname="System_SysConst_SShortDayNameFri">
<source>"Fr"</source>
<target>"Fri"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameSat" resname="System_SysConst_SShortDayNameSat">
<source>"Sa"</source>
<target>"Sat"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameSun" resname="System_SysConst_SLongDayNameSun">
<source>"Sonntag"</source>
<target>"Sunday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameMon" resname="System_SysConst_SLongDayNameMon">
<source>"Montag"</source>
<target>"Monday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameTue" resname="System_SysConst_SLongDayNameTue">
<source>"Dienstag"</source>
<target>"Tuesday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameWed" resname="System_SysConst_SLongDayNameWed">
<source>"Mittwoch"</source>
<target>"Wednesday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameThu" resname="System_SysConst_SLongDayNameThu">
<source>"Donnerstag"</source>
<target>"Thursday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameFri" resname="System_SysConst_SLongDayNameFri">
<source>"Freitag"</source>
<target>"Friday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameSat" resname="System_SysConst_SLongDayNameSat">
<source>"Samstag"</source>
<target>"Saturday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SCannotCreateDir" resname="System_SysConst_SCannotCreateDir">
<source>"Verzeichnis kann nicht erstellt werden"</source>
<target>"Unable to create directory"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidSourceArray" resname="System_SysConst_SInvalidSourceArray">
<source>"Ungültiges Quell-Array"</source>
<target>"Invalid source array"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidDestinationArray" resname="System_SysConst_SInvalidDestinationArray">
<source>"Ungültiges Ziel-Array"</source>
<target>"Invalid destination array"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SCharIndexOutOfBounds" resname="System_SysConst_SCharIndexOutOfBounds">
<source>"Zeichenindex außerhalb des gültigen Bereichs (%d)"</source>
<target>"Character index out of bounds (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SByteIndexOutOfBounds" resname="System_SysConst_SByteIndexOutOfBounds">
<source>"Startindex außerhalb des gültigen Bereichs (%d)"</source>
<target>"Start index out of bounds (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameDec" resname="System_SysConst_SShortMonthNameDec">
<source>"Dez"</source>
<target>"Dec"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameJan" resname="System_SysConst_SLongMonthNameJan">
<source>"Januar"</source>
<target>"January"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameFeb" resname="System_SysConst_SLongMonthNameFeb">
<source>"Februar"</source>
<target>"February"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameMar" resname="System_SysConst_SLongMonthNameMar">
<source>"März"</source>
<target>"March"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameApr" resname="System_SysConst_SLongMonthNameApr">
<source>"April"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameMay" resname="System_SysConst_SLongMonthNameMay">
<source>"Mai"</source>
<target>"May"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameJun" resname="System_SysConst_SLongMonthNameJun">
<source>"Juni"</source>
<target>"June"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameJul" resname="System_SysConst_SLongMonthNameJul">
<source>"Juli"</source>
<target>"July"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameAug" resname="System_SysConst_SLongMonthNameAug">
<source>"August"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameSep" resname="System_SysConst_SLongMonthNameSep">
<source>"September"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameOct" resname="System_SysConst_SLongMonthNameOct">
<source>"Oktober"</source>
<target>"October"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameNov" resname="System_SysConst_SLongMonthNameNov">
<source>"November"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameDec" resname="System_SysConst_SLongMonthNameDec">
<source>"Dezember"</source>
<target>"December"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameSun" resname="System_SysConst_SShortDayNameSun">
<source>"So"</source>
<target>"Sun"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameMon" resname="System_SysConst_SShortDayNameMon">
<source>"Mo"</source>
<target>"Mon"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameTue" resname="System_SysConst_SShortDayNameTue">
<source>"Di"</source>
<target>"Tue"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAssertError" resname="System_SysConst_SAssertError">
<source>"%s (%s, Zeile %d)"</source>
<target>"%s (%s, line %d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAbstractError" resname="System_SysConst_SAbstractError">
<source>"Abstrakter Fehler"</source>
<target>"Abstract Error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SModuleAccessViolation" resname="System_SysConst_SModuleAccessViolation">
<source>"Zugriffsverletzung bei Adresse %p in Modul '%s'. %s von Adresse %p"</source>
<target>"Access violation at address %p in module '%s'. %s of address %p"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SOSError" resname="System_SysConst_SOSError">
<source>"Systemfehler. Code: %d.\r\n%s%s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"System error. Code: %d.\r\n%s%s"</target>
</trans-unit>
<trans-unit id="System_SysConst_SUnkOSError" resname="System_SysConst_SUnkOSError">
<source>"Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen"</source>
<target>"A call to an OS function failed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameJan" resname="System_SysConst_SShortMonthNameJan">
<source>"Jan"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameFeb" resname="System_SysConst_SShortMonthNameFeb">
<source>"Feb"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameMar" resname="System_SysConst_SShortMonthNameMar">
<source>"Mär"</source>
<target>"Mar"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameApr" resname="System_SysConst_SShortMonthNameApr">
<source>"Apr"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameMay" resname="System_SysConst_SShortMonthNameMay">
<source>"Mai"</source>
<target>"May"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameJun" resname="System_SysConst_SShortMonthNameJun">
<source>"Jun"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334987037</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameJul" resname="System_SysConst_SShortMonthNameJul">
<source>"Jul"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameAug" resname="System_SysConst_SShortMonthNameAug">
<source>"Aug"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameSep" resname="System_SysConst_SShortMonthNameSep">
<source>"Sep"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameOct" resname="System_SysConst_SShortMonthNameOct">
<source>"Okt"</source>
<target>"Oct"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameNov" resname="System_SysConst_SShortMonthNameNov">
<source>"Nov"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeTooManyCustom" resname="System_SysConst_SVarTypeTooManyCustom">
<source>"Es wurden zu viele benutzerdefinierte Variant-Typen registriert"</source>
<target>"Too many custom variant types have been registered"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeCouldNotConvert" resname="System_SysConst_SVarTypeCouldNotConvert">
<source>"Variante des Typs (%s) konnte nicht in Typ (%s) konvertiert werden"</source>
<target>"Could not convert variant of type (%s) into type (%s)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeConvertOverflow" resname="System_SysConst_SVarTypeConvertOverflow">
<source>"Überlauf bei der Konvertierung einer Variante vom Typ (%s) in Typ (%s)"</source>
<target>"Overflow while converting variant of type (%s) into type (%s)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarOverflow" resname="System_SysConst_SVarOverflow">
<source>"Variant-Überlauf"</source>
<target>"Variant overflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarInvalid" resname="System_SysConst_SVarInvalid">
<source>"Ungültiges Argument"</source>
<target>"Invalid argument"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarBadType" resname="System_SysConst_SVarBadType">
<source>"Ungültiger Variant-Typ"</source>
<target>"Invalid variant type"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarNotImplemented" resname="System_SysConst_SVarNotImplemented">
<source>"Operation nicht unterstützt"</source>
<target>"Operation not supported"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarUnexpected" resname="System_SysConst_SVarUnexpected">
<source>"Unerwarteter Variant-Fehler"</source>
<target>"Unexpected variant error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SExternalException" resname="System_SysConst_SExternalException">
<source>"Externe Exception %x"</source>
<target>"External exception %x"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAssertionFailed" resname="System_SysConst_SAssertionFailed">
<source>"Auswertung von assert fehlgeschlagen"</source>
<target>"Assertion failed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SIntfCastError" resname="System_SysConst_SIntfCastError">
<source>"Interface nicht unterstützt"</source>
<target>"Interface not supported"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SSafecallException" resname="System_SysConst_SSafecallException">
<source>"Exception in safecall-Methode"</source>
<target>"Exception in safecall method"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SMonitorLockException" resname="System_SysConst_SMonitorLockException">
<source>"Kein Eigentümer der Objektsperre"</source>
<target>"Object lock not owned"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SNoMonitorSupportException" resname="System_SysConst_SNoMonitorSupportException">
<source>"Unterstützungsfunktion für Monitor nicht initialisiert"</source>
<target>"Monitor support function not initialized"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SNotImplemented" resname="System_SysConst_SNotImplemented">
<source>"Feature nicht implementiert"</source>
<target>"Feature not implemented"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SObjectDisposed" resname="System_SysConst_SObjectDisposed">
<source>"Methode für freigegebenes Objekt aufgerufen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Method called for freed object"</target>
</trans-unit>
<trans-unit id="System_SysConst_SArgumentMissing" resname="System_SysConst_SArgumentMissing">
<source>"Kein Argument für Format '%s'"</source>
<target>"No argument for format '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SDispatchError" resname="System_SysConst_SDispatchError">
<source>"Variant-Methodenaufruf nicht unterstützt"</source>
<target>"Variant method calls not supported"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SReadAccess" resname="System_SysConst_SReadAccess">
<source>"Lesen"</source>
<target>"Read"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SWriteAccess" resname="System_SysConst_SWriteAccess">
<source>"Schreiben"</source>
<target>"Write"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SExecuteAccess" resname="System_SysConst_SExecuteAccess">
<source>"Ausführung"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Execute"</target>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidAccess" resname="System_SysConst_SInvalidAccess">
<source>"Ungültiger Zugriff"</source>
<target>"Invalid access"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarArrayCreate" resname="System_SysConst_SVarArrayCreate">
<source>"Fehler beim Erzeugen von Variante oder sicherem Array"</source>
<target>"Error creating variant or safe array"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarArrayBounds" resname="System_SysConst_SVarArrayBounds">
<source>"Variante oder sicheres Array-Index außerhalb des gültigen Bereichs"</source>
<target>"Variant or safe array index out of bounds"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarArrayLocked" resname="System_SysConst_SVarArrayLocked">
<source>"Variante oder sicheres Array ist gesperrt"</source>
<target>"Variant or safe array is locked"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidVarCast" resname="System_SysConst_SInvalidVarCast">
<source>"Ungültige Varianten-Typumwandlung"</source>
<target>"Invalid variant type conversion"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidVarOp" resname="System_SysConst_SInvalidVarOp">
<source>"Ungültige Variantenoperation"</source>
<target>"Invalid variant operation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidVarNullOp" resname="System_SysConst_SInvalidVarNullOp">
<source>"Ungültige NULL-Variantenoperation"</source>
<target>"Invalid NULL variant operation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidVarOpWithHResultWithPrefix" resname="System_SysConst_SInvalidVarOpWithHResultWithPrefix">
<source>"Ungültige Variantenoperation (%s%.8x)\n%s"</source>
<target>"Invalid variant operation (%s%.8x)\r\n%s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeOutOfRangeWithPrefix" resname="System_SysConst_SVarTypeOutOfRangeWithPrefix">
<source>"Benutzerdefinierter Variant-Typ (%s%.4x) außerhalb des gültigen Bereichs"</source>
<target>"Custom variant type (%s%.4x) is out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeAlreadyUsedWithPrefix" resname="System_SysConst_SVarTypeAlreadyUsedWithPrefix">
<source>"Benutzerdefinierter Variant-Typ (%s%.4x) bereits benutzt von %s"</source>
<target>"Custom variant type (%s%.4x) already used by %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeNotUsableWithPrefix" resname="System_SysConst_SVarTypeNotUsableWithPrefix">
<source>"Benutzerdefinierter Variant-Typ (%s%.4x) nicht brauchbar"</source>
<target>"Custom variant type (%s%.4x) is not usable"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SRangeError" resname="System_SysConst_SRangeError">
<source>"Fehler bei Bereichsprüfung"</source>
<target>"Range check error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SIntOverflow" resname="System_SysConst_SIntOverflow">
<source>"Integerüberlauf"</source>
<target>"Integer overflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidOp" resname="System_SysConst_SInvalidOp">
<source>"Ungültige Gleitkommaoperation"</source>
<target>"Invalid floating point operation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SZeroDivide" resname="System_SysConst_SZeroDivide">
<source>"Gleitkommadivision durch Null"</source>
<target>"Floating point division by zero"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SOverflow" resname="System_SysConst_SOverflow">
<source>"Gleitkommaüberlauf"</source>
<target>"Floating point overflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SUnderflow" resname="System_SysConst_SUnderflow">
<source>"Gleitkommaunterlauf"</source>
<target>"Floating point underflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidPointer" resname="System_SysConst_SInvalidPointer">
<source>"Ungültige Zeigeroperation"</source>
<target>"Invalid pointer operation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidCast" resname="System_SysConst_SInvalidCast">
<source>"Ungültige Typumwandlung"</source>
<target>"Invalid class typecast"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAccessViolationArg3" resname="System_SysConst_SAccessViolationArg3">
<source>"Zugriffsverletzung bei Adresse %p. %s von Adresse %p"</source>
<target>"Access violation at address %p. %s of address %p"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAccessViolationNoArg" resname="System_SysConst_SAccessViolationNoArg">
<source>"Zugriffsverletzung"</source>
<target>"Access violation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SStackOverflow" resname="System_SysConst_SStackOverflow">
<source>"Stack-Überlauf"</source>
<target>"Stack overflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SControlC" resname="System_SysConst_SControlC">
<source>"Strg+C gedrückt"</source>
<target>"Control-C hit"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SPrivilege" resname="System_SysConst_SPrivilege">
<source>"Privilegierte Anweisung"</source>
<target>"Privileged instruction"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SException" resname="System_SysConst_SException">
<source>"Exception %s in Modul %s bei %p.\r\n%s%s\r\n"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Exception %s in module %s at %p.\r\n%s%s\r\n"</target>
</trans-unit>
<trans-unit id="System_SysConst_SExceptTitle" resname="System_SysConst_SExceptTitle">
<source>"Anwendungsfehler"</source>
<target>"Application Error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidFormat" resname="System_SysConst_SInvalidFormat">
<source>"Format '%s' ungültig oder nicht kompatibel mit Argument"</source>
<target>"Format '%s' invalid or incompatible with argument"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SUnknown" resname="System_SysConst_SUnknown">
<source>"&lt;unbekannt&gt;"</source>
<target>"&lt;unknown&gt;"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidInteger" resname="System_SysConst_SInvalidInteger">
<source>"'%s' ist kein gültiger Integerwert"</source>
<target>"'%s' is not a valid integer value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidTimeStamp" resname="System_SysConst_SInvalidTimeStamp">
<source>"'%d.%d' ist kein gültiger Zeitstempel"</source>
<target>"'%d.%d' is not a valid timestamp"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidGUID" resname="System_SysConst_SInvalidGUID">
<source>"'%s' kein gültiger Wert für GUID"</source>
<target>"'%s' is not a valid GUID value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_STimeEncodeError" resname="System_SysConst_STimeEncodeError">
<source>"Ungültiges Argument zum Codieren der Uhrzeit"</source>
<target>"Invalid argument to time encode"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SDateEncodeError" resname="System_SysConst_SDateEncodeError">
<source>"Ungültiges Argument zum Codieren des Datums"</source>
<target>"Invalid argument to date encode"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SOutOfMemory" resname="System_SysConst_SOutOfMemory">
<source>"Zu wenig Arbeitsspeicher"</source>
<target>"Out of memory"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInOutError" resname="System_SysConst_SInOutError">
<source>"E/A-Fehler %d"</source>
<target>"I/O error %d"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SFileNotFound" resname="System_SysConst_SFileNotFound">
<source>"Datei nicht gefunden"</source>
<target>"File not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidUnknownFilename" resname="System_SysConst_SInvalidUnknownFilename">
<source>"Ungültiger Dateiname"</source>
<target>"Invalid filename"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_STooManyOpenFiles" resname="System_SysConst_STooManyOpenFiles">
<source>"Zu viele geöffnete Dateien"</source>
<target>"Too many open files"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAccessDenied" resname="System_SysConst_SAccessDenied">
<source>"Dateizugriff verweigert"</source>
<target>"File access denied"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SEndOfFile" resname="System_SysConst_SEndOfFile">
<source>"Versuch hinter dem Dateiende zu lesen"</source>
<target>"Read beyond end of file"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SDiskFull" resname="System_SysConst_SDiskFull">
<source>"Zu wenig Speicherplatz"</source>
<target>"Disk full"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidInput" resname="System_SysConst_SInvalidInput">
<source>"Ungültige numerische Eingabe"</source>
<target>"Invalid numeric input"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SDivByZero" resname="System_SysConst_SDivByZero">
<source>"Division durch Null"</source>
<target>"Division by zero"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334988194</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/LevEdit_ENU.bdsproj
0,0 → 1,42
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">W32ResourceDLL.Personality</Option>
<Option Name="ProjectType">ResourceDLL</Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{B04A6309-AA15-4241-9786-4590C5C6B408}</Option>
</Option>
</PersonalityInfo>
<W32ResourceDLL.Personality>
<Source>
<Source Name="MainSource">LevEdit.dpr</Source>
</Source>
<Options>
<Options Name="BaseLang">1031</Options>
<Options Name="TargetName">..\LevEdit.ENU</Options>
<Options Name="BRCC_IncludePath"></Options>
<Options Name="Company"></Options>
<Options Name="Configuration"></Options>
<Options Name="Copyright"></Options>
<Options Name="Description"></Options>
<Options Name="Trademark"></Options>
<Options Name="Product"></Options>
<Options Name="ProductVersion"></Options>
<Options Name="Title"></Options>
<Options Name="FileVersion"></Options>
<Options Name="Evidence"></Options>
<Options Name="KeyFile"></Options>
<Options Name="KeyName"></Options>
</Options>
<FileList>
<File FileName="ComHilfe.dfm" ContainerId="W32Form" ModuleName="ComHilfe.dfm"/>
<File FileName="ComInfo.dfm" ContainerId="W32Form" ModuleName="ComInfo.dfm"/>
<File FileName="LevMain.dfm" ContainerId="W32Form" ModuleName="LevMain.dfm"/>
<File FileName="LevOptions.dfm" ContainerId="W32Form" ModuleName="LevOptions.dfm"/>
<File FileName="LevSpeicherung.dfm" ContainerId="W32Form" ModuleName="LevSpeicherung.dfm"/>
<File FileName="LevSplash.dfm" ContainerId="W32Form" ModuleName="LevSplash.dfm"/>
<File FileName="LevEdit_DRC.rc" ContainerId="W32RC" ModuleName="LevEdit_DRC.rc"/>
</FileList>
</W32ResourceDLL.Personality>
</BorlandProject>
/ENU/LevSplash.dfm
0,0 → 1,7636
object SplashForm: TSplashForm
Left = 241
Top = 158
BorderIcons = []
BorderStyle = bsNone
Caption = 'Please wait...'
ClientHeight = 373
ClientWidth = 515
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poScreenCenter
TextHeight = 13
object SplashImage: TImage
Left = 0
Top = 0
Width = 515
Height = 373
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000002030000
01750802000000FA2A7E410000000970485973000004BB000004BB016E1F0EAE
0000000467414D410000B18E7CFB51930000FFFF4944415478DAACBD09BC1C65
95367EAABAAAABF7BEB7EF9E3D842501059771FD3B8BCBA8333AA38E280E2202
82826C02814058022191254008B223A08220A39F333AE8B88C8EE8F867107101
04C2928424775F7BEFAEEEAAFA9EBE0F7D2CEE4DEE2738FDD3D0B7FAAD7739EF
79CF7ECE6B1886212FFF0441C02FA954AA542A45A351DFF7F170D5AA55CF3EFB
6C5757D7CCCC4C7F7FFFF8F8B8EBBA78DD34CD60F6C3EFDAA165599148043DD8
B6DDD3D333343474E8A1873EF5D453F829DC122FB27FB6AFD7EB788857D0A0D1
68A00D2650AD56F1B0B3B3339FCFA371269329140A68DF6C36D12C168BA1017A
E8E8E8C0DCF024994C562A15CFF3B8043EE7CC39167A8BCD7EF064DBB66D175D
741146C42BB55A0D0FD7AF5F7FC30D3760089DA12E902F62218F3DF618FAC758
E8906BC1ACA6A7A7B93AB6C777AC08FFA2653A9D2E168B0A55B459B264C99E3D
7BB00AFC8AE7E8842DF99DAFEB5EF0213E5832FB673FE81FF3C1CCBBBBBBB123
80D5DFFFFDDFFFEC673FC3D6E009FA674B4C126DD0091ADC7EFBEDC71D775C36
9BC5EB37DE78E329A79C82E70411B6696A6A0A73C017F496CBE5F0A7CE0D9D00
4AF8170DE2F138608EA1B1473A3D4C8CBF2AACF831421FB4C79CB94CAC3D9148
9C77DE79975F7E39F69DDB8A7ED000CD3004FAC18E707A6880113101FCA4F099
FFC1736CF4E4E4A42E8AAB466FE80A3D1355F01048522E97F545DD297D82B1D0
12000FFF0A24E42EE3C381FAFAFA46474715562B56ACD8B56B17BE1044C4528C
F5C10F7EF0473FFA1156818DE043C771F0A74283F3997F1E755D9C0311587744
CF1A61AB33C7776C315A02A461DCC3886CC6368B172F1E1C1CC4EBBA767EC7F4
082534DBBA75EBF9E79F8F11B93B6800ECD21EF0040BC14CD033C80200423C01
B40176B6E41A8190131313D87142000F095BFCA40F89DB3CD77A88B858FE0994
FBC8473EF2C0030F601442ACB7B7975D0163D1833FFB41334E8020E2409C0F77
EAB0C30E7BE6996788B1C43742896DF01DAFE3217673F7EEDD18176B242A7239
A44E5826668EB7D0092189D7F1135A1E7FFCF1BFF8C52F9E7FFE790C8177D127
09C5FEF0165DA10DFE45E71C88E0E5F2F12ECF3BBAC25E5C77DD75F8BECF7E88
541C85070A2FA2434563CE017FE23BB789AB30E6631E07C629C20A89C4A4F8F8
971B06D08F8D8D1164244FE13DD30EB10CB4C73C3EF4A10FDD79E79D3836EF7B
DFFB7EF0831F809AA331E9859209D2381C1EFC4B62C1DD65CFC0216C1E511047
115060E758037AC373B4212831731E338C8B6EB1046027DEC5AF8011CFEAC0C0
00DE226564637C416F981280B87CF9F2175F7C91209BC309385BFC4B228EF6A4
E36122AE6D785C312EFEC44F071E78201EEED8B10343006940A18E39E6986F7F
FBDBD8AA399C80679E678C98AA4C05BD01C50179C01F4F48AF89C1447D3C7CDD
EB5E0714C77256AE5C09D4C492D11E10036CD1214E4E983110E1F0840C069351
020738E05F34E3FC490230134C0CDB71D249278183BEF7BDEF7DF0C107959787
49FF1CC182BB4CE285B961A7B01C7C476F6F7BDBDB1E7EF8612588982D1B808C
E20BD685EF001A0F981E8FFD514CA2019016AFA3FFFBEFBF1F709E33BDA54B97
822451BCE034D01BBE285A921E11FE9C15F18158AD670C5FD6AC59F3777FF777
DFF9CE7740FD716400227085B56BD7DE76DB6DD814BC454A819F80754F3FFD34
90101D02DA980370003F81306114B22E4C9ED8B84F4E8077092525D39C64987B
6197714030DC73CF3D77EAA9A75E7FFDF56F7CE31B21B5E8C9D2A561624A4D30
07E221E1C0556BB7A441847C98872D5BB60CD3566E0AAC00B7BBF7DE7BD192B0
C58BC01F9E65EC9D028DF3241DC764889F60A8679E79E6C5175FCC51C28B0AE3
8F3EC7EBE8937B8781F01645133C21326392447215A17872219262742C1F6787
B48E8B22E7461B1E28C010B322C52486A319491F7AC6CC791C301FCC1FE36269
2035687FCE39E75C7AE9A5389B6849CAA93C35CCADE7EFAF724A4C03E8F18E77
BCE3273FF909C40E0CC16592ABF1BC2C203128CFD3A189C09824A64D91489FAB
50BE0F4E103E3394CD29A743C40001C513808020C34F1852E97578C348CE4838
7898B10C504330498A5A64DD121218B961688FE7E896B848FC03E8F913350000
5D052E0ECDC5903D60FB89A97C573758DAD23A9FA325C7529104F80424807C7A
E2892762CB81E573B416ED81A7050BC78B040E1EEAD1DA2727E0886436A429D0
B1705CD120AC07E8774A103CF9041499D9DFFCCDDF40E4E791A0CAC59F00310C
0138EB7A417A868787A9AC60E3C8EDB04CA21A27CC9EC94238163486B3CF3E1B
DDB2B112418A021212A5C95AB01C6E9F6A033A6DC58A39479A3A9C1E302E1CF3
4757243A6C09D2F0AE77BDEBBBDFFD2E87C35E8360E17491A02C701278CE495B
F554E064023EF815A0C013C53A6CA24AD961F88767AE5B8F1749E61433F55CA8
AEA08A88F236EE08F68EF8F6D6B7BEF557BFFA9512A039E2FC02EBA210805700
28526DE564AA1CF0432114C0C45B541CC99038130010DF5531A284A478C8F928
F5C17248C7EBB31F6211B666E7CE9D9FFBDCE7C0F0B81D175E7821F44BC001BF
A2438002EFE23471379510530B64574AA055100EEB5BBA41DC1DB228BC8E6638
9B18480F386514920BB2072E84FBA2947DD1A245E001E807CF6939A03640798E
1B817F2988E02DBE8B290138E8013FA125A04AB583B88D5F79D6C27C0ECB6763
1E4C9E0B15C0F7B7BF2A27B1074ABDCA7A95A6870D03FBC313EE9A3BFBC11780
94E414107BC31BDEF09BDFFC0688411CD6E3B65F4EA08A921E6F60215AE2FD2D
5BB69C7BEEB96CC99D53D084F198E492E84E0A422E4DA263B63FA405841A3640
993C255C5A36283850542789E702C8068E3AEAA8FBEEBB8F622CDF225A508622
EEAA984F4313CF03814B7A77DA69A7018FF93A9A4166874A88C69C3657C789C9
AC7588E26A5850C2874A19413ADF3A04FC23D1C41061394EA1A7D0507E13D609
F085E41EA3FFE55FFEE50F7FF84325D35826E643FA4B8188A225E826A921190F
8FB7AA11980CF6859091B6DCA7F640341B191909D33B7ED4CEA07C42F9105935
899D2E212C588419A40293980AE050A653C8108C981E280EFE3CE8A083204310
A9A8A0EC4FCB264791B666837F713EB904B2049C5852521E27C596F0AE29330E
7FC1EB7857ED1BF84E2306351BF257FCF99AD7BCE6D7BFFEB5B485564C18B21E
6810608BBD035939F2C8231F7AE821A80E383EE801F0C41C680AC3C416D00988
66619D403FA4929CC9FC7775D7544AA04E404B11D645EE15D67E14261B376EBC
E0820B489ED03F760A10A0DC060403B6A0254833640E7EA1E513679656232A22
1489301CE91A3711CBE77004294546BC48DC50794BF91CD9301AE87288CC611B
143EFCCE9345E11D0351E3E101A784C40E29AAAA4D090F69E409A32B96BC6EDD
BA8B2EBA886C181F2295B415C4E4EC07320A968F3F81CFB46A704A1435303419
C6FE28F8D1471FFDAD6F7D0B13C61E0137F890CC8CD0C04FA4C3181AFF12C9E7
7FC0F074FEF87EF8E187031B0125122E6C04E0433D8688246D81DEA0599020C3
D66260D20B6046D84AC5CD232C28C7E93901A0B1311800239133D3B8B1BF35EF
EFA3D450E54A9935F029E525E9A1F042018D74471185425F98EE68CF7A6054CF
529B38570138F0750C47B98FAC8B3C13DB03D0D35A475EC2C65835DAA001A9BC
D2B8F99C4027031512A4FCFBDFFF3E700ED48D5B129649C3566015045430C717
EC14A081F3008CE131D013CEA1B18FD83E72566EB69ABC6FB9E596534E390518
46E309CD6894D07954F02FDEBAECB2CB366CD8A02A140F30F101F30793A00444
5180679E82ED3E655B95EFB8A1E4F494B0A8117374AE022BA2C4407AA7EC1CF3
4433E027CFF3023211E6061029CC21B87CF39BDF042DC679BEE69A6B48AF4F3A
E9249C90C71E7B4C95DAF0AE2915D01DC42BE816EB8588C06E7926F99C4A003F
58055E5736A9544937827E1DE2F31C1B882CA813CC51F68957FA902F526200D0
3037F0A4279F7C52E51E502B1A9A89AB2452EADE503C24A6A9FC81E76803D219
6651EC533D55EA0653919C4A094F10BD3B2A7D135155B22402A31976075C47DA
A62A328CF99CE0F4D34F872282E79C36AD5ED44D95A92B0F80EE0222C8D7D5B9
0899EFFCF3CF0722A9F95E42FC5E669569AC051DF2F8AB5DE575AF7B1DC426BC
42EE428240FABE75EBD6F5EBD753F3C3736C2E66459EC473CDB52C4015B13A9C
4AB013C0109DEFDDBB57E9158F03B94298DAEC0F4F0025F02A2C01F3E469C5BB
F88EDE4E38E184AF7FFDEB801259F521871CB27DFB76FA6C5A671263ABE30B7F
8293ECD8B14366D573CC00C35364A078A89C196F6198175E78819BC78D516BF5
025CEB95720269B35685C2EAD5AB9F79E619695B2AB012CC0AE72A6C109CCF09
14E7E64C4CC9A83DFBA1E54465616A12442F40507D80BAEAB084CB79EED33A04
9287774932484039131A8E75EDCAA5D5424D3AA2BC010DB8BBD2B6FFA8B74DB5
C8B02F94BFAAA5E2F6DB6F877443370325711E06FADF788C57AE5C09491C2F62
81C4C8B0D0A474108DC94D756EAADCCC315EABF54F66C5283D5ABA3ABEAB9E5E
B6848485C68A991FF8C0077EF4A31FF170F20CEF0F8BD039E56BAC880C1E10A0
71E0EAD90FE68CCE0143AA7D73AC43737CB3EC16BFD2E8846E290F624369C3C5
1098219D19F889DB8AC61C1A2F6274104ABCA23637FE24B3D23AFEE5131A64F6
A7EB287556C2416CA1FE37C73AA4744D719B543B6C16E7F139EEB8E3FEE77FFE
E7E9A79FA6B41B96C4C9096856C2A248A778881830C2F34824E1795163322806
404109923D70686A092AB9530027BA52ADA4C2A726C7F9D6212C04A2034D58C4
1374A586787586D398C9C3CB3DD5F0133DFE615BB132544509BA48293071F26A
96A422AB24857026559C6F46262F54A962CE4E85A9107D726C89B700581C310C
44F8A8B18BD478613F9982426D954436EE3B250309D9F05F326630EA063F9330
AD5AB5EAA9A79EE2C909C34BF939BE63721C80363534C04F7805F3A6556701FD
FD957202DA882824860510F2037C07700129F5C5E936CFE104DC4E7509A0439E
6D501915F9C30229361E4FA8872A6439347829DE020480CAB4A248DBF7A206DC
F97E0269DB49814F071C7000E40B5052503A7D5DAD4312B2AEA84B879059B66C
D9AE5DBBA8D0C9AC3C422B99B4637BE8BDA04446C90BF3C4A2F090E8ABCAB532
332019A10ABE427E409B26DB2832A92514432F59B2E4E31FFFF895575E49A555
2DA7CAC6E658395427E02E9080A213AC852109A4111C941A864E00ABD8B66D1B
64465A1E6846D89F9C81AD446F73027E3873808E123DA566F48685031908F330
BE110FC39E83F047C51D4539527FD5A4156294B6A8B9629934F133B04D0DB8A4
65739067FE673E5994767C81A882DF6E401D97C61FAC9D7A2D6D14F897C48B54
4CA74ACC991395C4810E3AE820B00A5D2F8DF5738297A8A9D39F47030EC90D26
F0E637BFF957BFFA954A601A1B86A18F39E6989B6FBE995C16DD0220444EDA84
F7893F1865CD9A3550A6C933D4A31B769E93D5D1B32AED701A0C87E553520E63
32E40F5A63742DA06378F7BFFEEBBF783418938257F0E7F2E5CBD1C3A9A79EBA
79F36634A34F586DADD8596ABA1AFD41273FB67B4E34DDFE283895187488D38A
C34868A8C848F703158E053CCF24CBDC65CA0A34D1E35D9E7775DCAA4CD0022E
E453323D200404250025ACAA1310CAFA68A9E431C0171E89152B566063C2B3A1
70F7BF651DA2564B54C3BFDCBFB56BD76ED8B041B1194BC0D6AA2CB04F4E10F6
0B291E93C252E8660C2B1E62459FFCE427F1F0AEBBEEDAB3670F40445F05F95F
F80CA8F005D0D11827FB8922D55826251F1AF3A33A41D8E91A264F61AB85CA26
EAD550F99A561A2E21ACEDAA3D545572D21D7A4D20DB628BD5928E7952BD63D0
ADF6C33EE7780E48D4F85DBD1A0A99605E20AC848C783854EF7FFFFBEFBDF75E
B4574D6B8E990B2BC5771E5AAE97409B1F5B12DE6BF2091A15F1E49E7BEEF9D4
A73E4509400342A4CD11C3CE79E504EAA7E159A0C9853494FD84A3696901C727
AC742A33A342C3B1D42683F95F73CD351B376E5457ADE2E102275C2DF8AA83CE
4195397E26BA1F748DCAC0F8D16851EA7073BCD6BA6BFA9606F56A20294D1074
BDA89B477559B4017A00B54E38E1846F7CE31B009A46FD61AA0008B08B7C0802
01B48A700481C61104F3A248C16EC1306834A618A45C5F51825874C515578044
704768BBA615945E0DAE114BA09156A5076E2235091E10D595A9C16032D853F0
8070708784E424EEF81CDB8346972E6CD5D1F010B57F48C8B4A8BA7EF8DCCDF9
F00C127A00B22AA9340FD2A687876192485B880151EBAAABAED28EB05B679F7D
36381E04A8E79E7B8E411D8CC0C1D8CA120041AC4AF9366084B1B1431AB41E16
CFFF4C4E402323F5FDB0D90133BFE38E3B3022F91BC837E6093D668EEF5A42B1
1F61C204960EDAAD4181C0516A0C18823294AA631ADD817FDFF296B73CFAE8A3
D75F7FFDE9A79F4ECCD0E34DAB289A71866A97A4DAC42DC177004DC3B129A4A8
3D81984AFC53AA8D7ED03E6C28449F1ABD4393345D0214B5A46D7D92B63EC84E
48161966CE758503BDC2279F448443681433E91A46E4CE129F002B0001CC326C
22E32B4A88F99027814FAEBEFA6A3A21E948BFECB2CBCE3BEF3C028DE11F0C75
55873C0499A38E3A0A3C03AF533298233086A986E237F608E2022740E2AB944E
7D4E6132AAFED2818101DAC488F9848FBAD0341D045F48DC29A9B071D8A7C58C
0D7A5FB8950A1C1D51631F54329076D43FD9834A3FD42A28EEF050A87D4CC3DB
C902296A7CEC631FFBDEF7BE879680D5D2A54B3FFFF9CF6FDDBA95269DB0E2A5
B1E74AF4C3B100611F2CD921BFAB4750E6C5BCEDCF12400AA5364C5267D213BC
4219140FE9B6A1A1292CD390678028A119E9A3068C92E1A967957C050DCE3CF3
CCDB6EBB0DCB01BB05FE53D8553197890500C81C031A35D470CA05CF11A57E0D
BB22A81790F4B95E4CFBC8238FFCD77FFD57FC497FD8FEAC436A1442B774C5AB
456B9FEDB98FB4AC42D0F9977FF9174AFDDC44E55E61F11708096DE6861B6E60
581169949A075AC3D06BA76E00705D7A9FD5C6A7FC8D2D95D6A0EB9B6EBAE98C
33CEA014A9E44F9D54FF2B9C8084490DE898037815944A68FAC40F2C1B8D39AE
0656EECF634CE860B1AB57AF1E1919A1D84BF54D8D0678171A315AEEDCB913BF
2A55C2AFB4D091AE910A2BE5C2BFC40F1A8548CDF5D4E115025DD33DE8FF94B6
C9E8A31FFD28B693867BC8CB20AF5471D00310FAACB3CED2D41B66C1BCF6B5AF
C5F9F9E0073F78E28927B25B9A65F116F608871FAB231E87D3EBE861631A9DA2
2CD90F26C9FC0CEEF5AA55ABE8049AA35EA876C89DC204FEF33FFF136CF89967
9E9993F477E8A1870280B41662816F7AD39B7EFBDBDFE257BA37D44A80E30DFE
AD245E774163CFD046A3BF487198D1A6CA87BAD383D9A06C100260265EA462AA
BB8F49429423F9C3704466F5618445C270FE145569B461203639D9C5175FCCBC
10CC0A8DE991A3D0A73482832A3551168E06B7DE7AEB71C71DC79F56AE5C094C
A6394E234D756BD4898221D012741073662C23E9F29C6402601D70039BAB640E
9491BB83434DDA8439D081216DD5767EE85158A465D4104F227AC304683FFCDF
E204C0D5356BD660868003E7A3AADB9BDFFC663CA7AC4DCB06C6A58E4E158DA6
3FAC178D8148C05E50DE7FFBB77FC32B684FB30F71523D195FFBDAD78E3EFA68
42AFBFBF1F9301366262A07B20A9D85C9E6ECE44D92D75682200DEA29509AF90
1ECEFF5026C05BA024DBB76F57B56C7F564DE2F99CA00045C27D524B0D8252B3
A49AF82464CA030EA8F44917310E1A094B381AD5E0E92205C10600768C93C59F
38360C10643E024D60127286A83519C887A56EDAB40992320F181057B348FE4C
4E0092F7F8E38F63F618859E525A9F88AC7848675D1888B21F3F01A91E57A152
5E3870281C5DC713CEF83335F22829246D626E1E45549D001E9221D1A0C4734B
EA40E2AE065385AAFA4BE9B0A1124667B81ADF40F7711218BD4A34851E8AE951
E3A3E989EB65749DD24DEC0810059054DF8F92F2F9F93B61BEABC405FF6274C6
9BFEEDDFFEED4F7FFA5369273450D79EE3ACA318A2B113A40224A9340BF060D0
A38B5DC017B4E47A29BC90472A31A5D18F01F21476C2FC896786560E0656317C
000DB0763606707854745673082E519A4700B409FFD213ABF17254AE2FBDF4D2
4B2EB944CF85B2254DD7A4827FC41147FCFEF7BFD78077EE26B7064FE8BCA565
9979C5948B71E29873134E7824CFA6ED1818A2818944360608E9CE6AAE8CC6AE
E0988063EDD8B183C6194D619550580B236D643FF1A614CF4952DFF9CE773EF5
D4530BE4C1FC899C802A94F60CB0335789C79316766A21E1AC497E8006DC68B5
E85236E7290EC70BA1A59A7AC823F58CD09C3B67B6A4A4A4D7D47101490A49A0
3CD83BBC4EFBD81C3FCDFC0FB7296CB223FE2F0C1FE003E374D575B43F1D0288
8D4DFFC31FFE40440A879F802332E4878E7DAA95EA56E149D1D4EB3F72024D30
53D70149218DB614E8F49C2BF9E0D9537799AE90D487E8FBBFA5135C71C51510
C10820CCE49E7BEEF9C4273E41E4507CA5BA1A8EB3DEA74E206D01597383C91B
888E6A1D56C6A088CBF6C66C96166D358C9EC69418114156F49EF7BCE717BFF8
C505175CB061C306325E0DD8A00187A80F717BD7AE5DE1BC415A90989273EFBD
F71E73CC31F8F3E0830F7EF6D967C3145991189D28AD544192280B8E82D7C195
E90E254C34B88B6B51873FA9677817D09E59A9FC53CDE2F3EDD74C4C63CC89CC
4AD36472E1E042B0319054AAB1345FE095B02ECFEC714A5BEA60C7779086134E
38E1C61B6FE441C29F20826A75D1D7C30749457B35A3E1E8423F50BCE749C6AF
1415E9F4E2461BA15C62A237D158A33E5486C517BAD6D927890B78030B005074
00E5D5701A526A99573C80441C9BF5D0430FA97801290F9BFEF0C30F333F566D
65DC262A07CCCEC5582416AC7142295B662308D4814464E3FC3131DA09C3052A
78DC780428C052365746ABBB4F1908DD82FA60ED6AD47E759C200C4F752CB187
70DC47D83CCB66E0D0C016061A314286984C898A749CAFD368A1FA99DA51F11C
2FBEF5AD6FFDD9CF7E46EB1C8F033754655C4D7757231836FA5DEF7AD7D34F3F
CD8A3B980375B805647665A2CC96A034B3B03509D3C391A126BDB0F549AD7CCC
53416365729C39261CAEB962CC26FA013915AA4AE85E9A4098E290DCA88A3187
0A845566CA2F5A2846CD02612B1B3192C841A344B8A007252C1D856D888EB441
2B19529314D90FD64C659CCE2EA39D9B170EDE92B6B158753A8C8B4149B6346F
995C94A9255AFC20EC7333F6551F89DBF099CF7CE6E69B6F56FFA71E6609A5F2
127DD103C005CD1773608004FBA7399870C3BB201FC072124D8DF62324F113DE
A2AEA01BC1883A2AD11C5A836B0F38E00008058027D90350043A2FA82ACB1085
C97A9813686C06DE2281534C007020AB0E0E0EE2C9673FFBD9AF7FFDEB980FA5
481C4E5A63C2F1451A8BC5851038383F982DCDA0546E98484894603417B9DD1C
E71B2838FE5CB76EDDB66DDB8036147ED5972E2FF70349DBE2C165B22B86B260
2D60D2102C1844A4E98D0C3754F5E8F0C30F870E2A21791CA0C671021212ED31
10738BE85D0FC756A9BA76C30D377CF9CB5F663F9809964CAE4C3E47C6AF5202
16889FE84D25E70893300DBA07904920B85846AA7CEA539FFAF6B7BF8D33128E
AB0E47045177E18632A42408E53F868B44A1CD61871D063153B579C56ACC4759
BEB42D727F0E2750C76CD0CE75A7662F6D15904496CC98248FC49D6962AAE553
70C476D08DFCDEF7BEF7C73FFE31FE5473B722A4CC464FCAAC364FA11BA80B15
E781071E00E4D542AED2A45A2F31E7709935761EB4AB9C2D40D9C9068C7665B6
85AD431A17035E8B731A06DA3EDB9F74D2499018A09C91C6D2324C6D895E2B72
7D02211CF8A0A14DE154D6D658241FEA29251B2445A020CC180386900217D129
B0DF68A7BD3148430BC230E58AC71B9C8767FEAEBBEE827CC75788D980267ED5
58913909FAB7DC72CB69A79D8699003AE4752043D0CE5481A542BD3F4EA095AD
146B813D5AD74563F65595518AA0A13BD29631C37E48D25FDA82F127CFCC1C1B
0B28173012844683A96EBFFD76904E8C0B8CC41CE84E00404E3DF554E6A99276
68A6FB71C71D8757743EF44DA936007802BCCAFC9554A9A18C6B04CCD574A8D9
FFE8FCFEFBEFFFE8473FAAA53834BB5BD18EBC8781CC2CDAA1353FE6CB3E4C9B
640325FA5A990E5D61698CB20D677E526157FA8281343D82479D3883570E3DF4
D0279E7882150B0007025C42D9FCEAF1D60DC29F37DD741300CEA375ECB1C702
97D095D67BA0B4AE194012721D318E16FFFEC33FFCC3830F3E4834E629E261D6
2835F5BD4B5B27F8ABBFFAAB5FFEF2973C8DD4F1C947094CD5C61497C8A43101
06136BD674309BD14A3B09115569B15A54284330A28F522D453CEA2B6A4BD180
D170A4A026AF84B343B4F2230685520256C7BA787A4C9478612C2A9A0CBDFDF3
394138965FAB8771DAFA9306EFE30988384E160520B5D5007F202E68581DA398
C8FB49407860D18039C00C8FC416A01312130D9D521133BC5FD0E0DFF4A6377D
E31BDFD0787AEA0484D8FE6278A41D184A66C6E92DA0433024474231054A8216
6EAFA8ABFE39AC1AF4136B042501CD61A22517A5A9A01AB3FE47EB90B4CDCA12
CAE7562B18ED5C5473F0A1B010564595A131569A33D3105D1E5A0DB460F043B8
04A3F26AE6E9A83E1B96D1C2E0A0ED9E6C99E6E6F99C40428626EAC8CC55A136
A05224D992AE224CF4C3E3CEE7041421292CD0AAA0413B120AF9A2A087451186
543E34FA0DF88D7789E2000BABA24262DDB46913378229AC9ACCC2904A15D680
FDE804AF9C75D6595FFAD297D424A2C539280CF2C013C53996F29E305419100C
68609250932FBBECB28B2EBA88F9657A66884346BB842A8D03745A68314E0099
29876A13072DFEEA57BF8ACD2241A46380B51BD9217AC0138D32A07352CBAD48
283496A056149D7F36A82769603EB7150BE7705A76866792D23D73AD955C12EB
68E2A7F8ACF52464D698B37DFB76DAD90104BC1E2E81154EF60E8BD28C47D0F0
210A6EDC2930AD4F7FFAD3E80ACF7162B5768BDA2DB9AE39A61240126B79E185
1754F3A6558A61EF124AC6D443C428A630DCB473EAD94C5C97504E4C5871A477
9A4A9E024AA3F85E1D2708D7B3E32E0037B4E81069162B6062B114E13128F442
B076BAEE805D58324B526AFA15BBA5579CA7921636EC8846D3E1096928F500B2
4C5A20D5FDCB25935BE33BE65098FD68594C365B40C6D7CC0C2ABBEA1D5C208A
9460E1A6F09505AC431AFB4ED954130548D0E8AAA438A279607842DD3D2C04FC
91CC5222A3258BDE2DEA14322BF5A80D9ACF0174B4E4C6E8AE6BBF9C073D7BDC
75DA2EB8DF803BD09DF4541938260722A2D95E684F873879BB395B6F8EDA035E
819008A99076520A26FBB30E69E548A65931438FAC88966235B2AB5B264CF195
31ECD33A64B6EB38324883915B3CF05A1F915E448C4E8A43CECA23A705F27850
89C11A2CCF0E553CE74610D43C0C8CE6D2792AABD6480C094559F088028FB1C5
94B9C2F1308A526A2CA6F08E3F4937D580A3353259908BFBC258263F545A4ADA
128D8A66EC478D452A37E0DF638E3906320B8F160D1D9A7FA7D84885403512D5
1D29DB4A3BB199DD924930FE5251FCBAEBAEFBC217BE40AE46BF3AF19901E67A
DECC509910450F8D62E29CD7AE5DBB65CB16260C87C3C0A46D73E769D7BDD3FC
1D4C0C4F88AEB455AA84443A2E21678F84C47055C7D5AA4945219C304C983329
8F08C0D3C730303DA43C719AD640F1C80F7DF004DB4403AF320C129A7030BBDA
DFFF9C28D23027A040A6653054D8DABC7933A08DD9A267487EC03AB63CE59453
20FA70149E6E3D509A1EAB761B8DD839F9E493EFBBEF3E865768A014319F0667
8D8C20DDE32455750B4B78B431508839E9A493AEBFFEFA7DAE57ADD35A8A8E14
D958B09A08ADFF5A5E93C1C1FB8367D02EC0AC6673068B53475737BBD6EAD7F5
4A5BCA97700565991519687F544E1884CAB207A182911C4FDA128AC69E73F62C
7DCCC07F4E519377488235F1841E794AC1575C7105DEC21AA097B0064078C16A
4FD4A240E1749205FC04E10F74702D17A3529EC69E52A30F1B85D892A4619F7E
021636D1AA871AD21731FD9813142A92F52529C650362285A6649C48BE9E96F8
8CF8B1DE5CAD346954DD982155F414B196D95273ED92E754C417A72E49533CDF
F10CB7DE0C2C1393905822E28B5F2C5886340319B0CD21D397BA9DE8E936C621
8107271EF3D1FFBCED2BBB4CB1572EF6770E66A35DC55857A3F86CC2EB89644A
956235969232082988068EBF6B74381D664326FD49E829B144776D720214A689
C9C7A5E94A0CF301EE79CEE141E6F1E4744F3D6A38F658B5B8C44F3A99EE1D85
B1742A6A35CBE59A6B6662D55A33EDC4E9F809DBE5C88A5481500F10156462A4
1EC5F9F91F7FCA678EC6167E480B2F704CCB8E86836DC2BCDF08DDAE212F8F2C
304297409060D1F64AD68E061FFCE0071F7EF861F40C14D26C89B0B7FC258E12
4B5BF562C72107379F1935AC7CB2297B8D9C199D0EEA01A62856B45928753976
B10E9C485D70EB1DD79D748A1573CBB54AEB6862CB3CB182A82941241BABBAC5
583599127B02A8644A3C906A546235A925B391723EEB2F2BBA533D2B4B432399
64D5342215CBB3EAD2A8661A529554B4B354AE9839C3AFD6CC6AB62F97284C0D
D7121D09AB56C6934632E23419E4AA7AD2DD77DF0DB26BD6BCA634DC25B6541B
D624B88E31D3085276C62F152A209B5133DE104CB627021CAE57FA53D19152B7
DD3DD998AE473D0924E2C53C3F9074F380626E5CF245C976487D265B5859B227
BD642131D353E96CC652D3F5B2D80DC3722395BA8363215288193D8D8E697FBA
D92552320E6CBE66B2F962C92E980DB3DEE7CB684F87E535BC99B2E948AC7ACF
B93FF8CCA5EF77C04393F189C64CBA2B5D1CAE1956D4C4396CD63CE3E05861BB
8343E4F478F57120A86BA4D3B144A90AC1B4191812B552D8F9BA0B98FBD9406A
5913728B5173B2D22C61276D096A76421A95FEA4CC94A58EE9594B92A9F1D24C
2521DD157322D12D6E336B940A4DD731CCA82F55C35F12C48625525B55965179
F8A6FFF9EB933EE126765905A7E99B3D7DC9F1A9092306E049BD2091C0C67A41
9E5B701E681D796B14C290143C890631716B5DD2012A5312BF2AA69595467106
00803C72FEF9E75F78E1858C395497EDFE387130AF5AB55A65A1D3B7CEAF1AD4
82D94B2D2862D0C2A0745CDA85187906DEF9CE77BEE10D6FB8F3CE3BC9B195C3
D311077CFACE77BEF3810F7C80821B43A1C142316334C3D84C4D2465A72F345C
1887AE5D0D0B638E9286F1A2313D13941FF7C909C2466D5A48C06CA05732928F
D23A992D7969B86E9D92242534FBF313287094596A29E639744AE3A03010341E
C6B0B3AA256D38321B40A991A061270F87A60849FD80E2A1722FBD9183FDD39A
8CEF5FFEF2978F3BEE38B578A8CF1648C3902779B92F647F08F4BFFE51E22B6D
C104DBCAD4CD573187F99C400BF86804E79CDCB1B0F9D59C571F4943E9E8C865
50B584CCF4AC8B008C3DE288237EFDEB5FA3DBD7BEF6B5BFFBDDEFA42D1E6986
209941335F8F476A13B629AE23DD557342227657AA3E399D92AC99F20B959AE5
37B0B10959564B77958DDF0AF8703D1DB702F1CBD5663A3B5BF7D868F6D66383
D1D2A29EDED8B833E48EF5C456E76B6E4176A5C58C89ED431517AB0AB923263D
F19815ED18AE8F6425579EF19BD25CDC6F0F96A6C5950137E57724471BA3DB3E
BFE9DCBB6E92A961372DDD855CC96964B2715A54683C8420492776CE4C1B0765
DC17A63A9B9D652B594B4CF565AD922FF1C1F48C8CE7CDA2D8012414C7332392
A94A3938242ADBAB96644CCBF49A53D101A94E487F23392E55CFF0259D8B3467
BC6E5F06A5C35F51B0268C66C98E592D21CA08247021EB0804A058225DF18A20
7D20BA8DCEA4044D99313BCD62C14E24FA2A95DD09AFBF628CE0D7080427916E
3337B1B87CF9F11BEEBEE91B4393430D7722BEC4288D06AD71AD72A4D9E345C7
8DCEA5CDD1B8C45F306C2F519032DE0CFC5C671A1CCD6D0411CBC19E1B861BB8
E98811D4B1232EFE5F15A72A752B660D1C21CB9F6CFEB69936EB8DF285EBCEBC
E6B26D582FB852DAAF4E75744AB199F120ACE17C3A09B1AB781944C88FAFBF76
F3B7AEBB737AF7CC9414834C21559082C4318A13F1C1209B3E78A5196D390FAA
5D66A63C60FA7B0B3DD23329113F5E8A49B950F7E2E9A566AC562E8E432CB06A
1231D275FC271D93A9E2A1871EFAECB3CFAA8EB8F04D47F2F232C0ACBF843FE9
D03DEFBCF30C22AE56D025E924695EB366CD934F3EA9F6A270B16C5A09D858AB
BFA9104DC788AA8134E0AA9F9366E5D5AB57EFDDBB976AC46DB7DD76ECB1C786
27ADF6074825F8154B459FF8BE71E3469DB0BA7A649EC758EB88D11205360066
C0480F4DE3D63810B526A9A0BA4F12A99C201C80A4713E3AE29CC00C99D51834
5F49756AEAB37872EEB9E76EDBB68D8C2DDC27C3E3A872517F57EB0DFD3A7ACD
03357D4658D36EA6A000A305A8D1A716772303632897C68D98A14B725EA96CFE
2A68B75696F6DB3731295EBDA27EE6B7A701416B14D3B814F60CEB562AAE86DD
5146FB920C99556B40EB7FF9CB5F32905A0DA1CA5AC2BEDCF5EBD77FF18B5FE4
49C38B60B43820E8B9255A25ACA59DB1A1C14AA724269695641C804E67FC9A99
B4F3F95A20F6DBFFBFB7FDF3D11F3EE7CC2F9CFCA97FFEEADDF707870D14B60F
0F24FB1AC5BA6F59536E5E220D8949AFDB3F9619979219338C9AE54AD33C30F5
E672ED05D0ED4672B2D6D2F8414263ABEAFD7B2BBBCAF8B34364C6E9902EB1EA
33CDC90D175DB8E9B2CDE903EC99B1464F4A26861329C9C4FA4AD0456ACD2031
60559E7B4978A203F68FF185C988D4BD74538C885188055672D10176FCD9B117
242D465CA283D00B3AAC81E1F2B4F4640ECB8FFD01AC45AA4EB29989A7CC097F
7CEDA9673CF2FFFFD72F7EF37B5926B25BFAABBD19893CDB359598F43BE3CB46
1A2F78DDD8369149893725E544673CB761D9625846B5DA93EB2C4C61908EA2B9
C78B37023CEECB65B64FE5B232EA9B95A60F91270166919449F48089E49DB4D7
510F0A8DA46B3703CFF5932B22EE68F475FE5F3E557BA4D052B21CE99D909217
AB98B55E1F627636966C949A600562465A1BDB841C2E3DAE4CA42389B2E7A6A4
E148CF38F021339E9BC140D69EF8E2AEC376947E0D9D2C133DB0967FDE87A61E
11A7691AE2D772401147EA8144DD485E924BB2F5BDE5A4341BDDE2A5C4DF25AF
E9ECFB75AA24C3E5CE48D6ADD79A62D6B19149C30722CD9219C0399D4D0F8103
556CA7D100DC7351ABB2A8093E2E4559E20D344BD022662A69DF28BDA4FE2E5D
BA14F23743FFFDFD5730D4E724C8200820BF90DD2988934E1ABC1592F638D00B
72053C7CC73BDEF1C31FFE50DAB5EB689632DB17D728D9D24AB0D2362C6A3952
1A64692B00ED03C93BEBACB334C5236CF5D6501635866A346EF8F61246B3A96F
677FD6A13962B55A7EC3C6A57BEFBDF77BDFFB1E8E3AF51812719A118C500109
735FB76CD2DC1CCEC0D2EA9574A53235064FC06CAFBDF65AC2443D0A5BB76E7D
E491477EF4A31FEDD9B3472F075516A2DC9BB6667268D2263AF6B55998147244
8DC5661B2D0ACF15D18877E69967624A50DA1E7EF8619C793057B0494D23F2DB
F743309E988672AA11ACB103FE440BB8D5BE428EBE38CDF020A15CB812AD8618
D152CFB80E2DCBFE27720279B9358F30A4B604A8E20B83DF35754B297E980170
DFF527ED13C06730AEB4EDF57CC8486DBC0E38E03BAB36319D0D2B0219FDF8C7
3F0E3C276EB474F68823F9F1C4AC2FA3719115ED8C9427CD81B43D6C14560CF7
4EDF3216B852582ABDA7BE7E2CF2B4D46BD99D3DF95F8ECBB392F093A64417AF
5EB2FDB9274077E49296B1A863E680786474B8A39C76D2C77927DF7FFED609BB
299B9C6439E7948B53B7966E3FEDC79FFDDA916B26DC7C23180241956A2C2325
373EE0AE9A8A3E595F276F08DEB86BE363FED255F69E9171701867D2DEB428BA
7DAAF72703640000886E28165888BB7D13D6E89252EE14A82CA9E7B60C4B2D65
C74A8D462A766E29488A3162D8122FDEEE0D340E1BB67FF3BAF8B2DF15C631EE
6BDEB0F4774F8E25DDBEB2B15B36486A775FE907A391A14C446AEE79E9682A70
6B15C9D40E9E7C63636F7DF0E73BBCC18ACD1D114B8C683951C995531989EFEA
1DEFF878DFCCDDA38E97EAFA6434B624B7C31897CEDC929DE6DE3B5E10CF929A
6D899993BAB964E5C4DEE79CB494EB0EC695D450F9E4A6D99DEDFFEFFEC9FFD9
EE4C48212ECEF1E26533CD44A1FFA9E523FFF122C86BDCB3A3E964BE9C0702B5
D4925B25BE1BBCAC658EB1D356A3B6B8EBBEC9C95D2589755AA74D277AC51FB4
3B533D7BBE54E9292C1B8F3E6EBB56031C2A11E4BB9BDE07B28D4E438C19C9CE
5AB82662A95B539DD3B13D4BF75A1F88663B0F998C8E267735CA3F9B963DADFD
B5CD78DECF4BB489A125692C6F74BD189D904FCBE24876F08E821453B144D137
CCCE4F2C99EE9F854BBD5AB9633C3A9973ECA411CFE3ECE000FEF55FFFF5430F
3D047E0062B2406C1209AC962BA61C130E313024E40C7969EF0B0588EDCC77E5
F967D6DF2B951659F486EE97A09D77864308BAC38230CC2A7AF7BBDFFDC4134F
300E8C33A3B986BE04AAA8E41C1A1BCE1C1999AD1DC4E872A80BB7DC728B84BC
6DE4490C8F0B57C453283089038C91975DD04F452212CC56FCE05BFC69CED5A0
18EE9E7BEE21D0B5FA42F86A21752A86D37AF5215DA64A2BFDD03D0461CAAE8A
91D6F835DBD7D1842559EA108CDFD592DA7A3F0617C54C6C7C487049B6A86DC8
AC78CB7803BA0AC3691CE12AE5122A03CE00470D0CC3D0EC8181C8DC445D4E98
6AD3A7A2AE05CE96D178AF542750B22EA1C482700C06F39FFD79F5F8E839D054
B2FD71027979A299067186432F7870A07B811FA8BCA22A608BA7C6D3B5F2CC5F
BCE64D8F3CF9A85CDA1BAF46AA5F1E060112EF20A739BAB4BFF97CAC22EF8654
D92FF70FF694D64C5FF7BCF38455F97ED5DE1BEDEAEC1F2D8FFB8D7AAE33979E
2936FD5E5722E39DBB126BC52CF6946E1EEF5ADD3FF9DE99BE20327E7FD93F01
4B5ED47D51A19CC8576BE672BFCB3830D8353C6694CDD71EF8F6C707FF7BD1F1
2B677AF3956BA6E25E975B9DEC5E911CF5CB2B8E5AB12BB54BE23139AFA65759
85D341B2F1AEE960BCFB8CFE89DA887C53A46558B63B631DC1E76AA5CEA2F525
698C8977A5634C44E3DBFC4AA4BCA2D6BF2B3202E5A3B7B97C626F3D9F1C5AFE
E955F9BE42FC8A48B338DA94C8B453974B6549A967EFB6F1545D4A19F407F525
6E058E2FAEEF5662A08A004F7279B1FCA29716E72CA903A16E4A5AC391CCA5F5
A972FD24EF1D777CEDBF3B8EEEEF49F73F77EDEF5EDF58F1DB8E89659389D1E4
581D4C246FC6A5B7121FE93A7A917188E99D37BD78F91B9E1CFB458BD49D17B1
7391F8B9AED1B93C73B2B5E7AB2FC85E711A56B6B373AC308E06A948B2591F58
2CC61E998ABEBD226F4A960AA6FC684CCAB2EC0B8B775706E5869689A6B92962
E693C6964A7C99592ABA52347B9A96274625B6D8A93929294F3AF9DAD9E5C54E
EFE0D5439DAB96953F30DEA8F9C177FD96D7F04289FF215AFD46DD2ED98E952A
7945315A1C2869A74BD6CC92F3564C44A66B37E60582AE9D88D4BCCC66A339E3
176F74635559F6E1D80BCFD79C1D894AC38DF82F098BCC4322B908972A99CF09
683555679EDE2A7FDF7DF79D78E2892F79CFC241F71AA1C11829A63C40200DC7
78FD291F2D4DA32608B35DAF9817390D0E0EB25A0EDD127C8BF457830EC3B7A4
E22DCD2367E02305F333CE3803DC2531FBA1159E9788CACBD31495FB6955262A
C214F4980148C224ED68F139CE64D5060E3FFCF0DFFFFEF76186C71803A35D28
86FE648AE461731656E1CF56BAD6DA0C5EE896C770EC20ADCC582366B86EDDBA
071F7C70FBF6ED3477CCE104B41A318180EE4A26876BBAC6EAD5ABB1EB5080D0
FF91471E096588C9FD0032FAC1B6EA25B71ADCA238B072E54A401233BFFBEEBB
BFF4A52FFDE637BF61215F66EA3326123B059184656D289B283D0DFB4BF82746
0C5F1A4515849FFD89330B73823959056A1BD48C3609E5F7D2FE49249CEF1F0A
5B87007CAC912167E4D6733C37D859F048F4FCE28B2F6A215596DF8078C1EB56
5AD18AA6186939FDC8B3BEF5B5DB46CFE95AD5C8ECFCEA508FA487AABB5B0681
66CB3692EC4E342A95AC6315C69AF56B243D122F7EA51A9D8A0411CB8B067EB9
999044C52CC9ACCDA7EF73D97AC2FDDBA17FFCC99D3F338EA94E2F2F74DE6AE5
F7F419CB07E553D2E8EE34AF9E5E3ED4B113F435318EF6CED0619DB243B63546
A4E99C290372D0EEEE3D816D3823D5DA06C9B9C6F468101C184D6E6AA1FDFCF4
DDE566FFE8590DBB2752B9A6D431D1EBDBA389B4353405E1D81ACD8EC4F2B15A
AC2C5BC5A9C4BC736A86A4FD78CE335E94A81C16FB5069E4A1174F9F91D788F3
3950732BD28C74F5AD1A8B3C2567D8FD93FD23370E1BB5E4AA2302BB9C1A7ABE
98F702893620F78A2731683F8DC5236F1C8CFC83E9593ECE6E738344EA8EB7D1
9578562E9C31E3B61F6F648F4DE7C5956BEBFD1E38540FD69B3AACA7F1682FD6
5BDA5C2D61EDA78A1F9106F89CEF66EA7EE13C1C5719582FC331B137C483479A
C95F471B7B5D0CE9614857527626D1E597871A75AB9E3B3E6176C746BE3E95D8
ED245BBEFBEEF1C4708FD75FEC1AA99D299D999CB9AE962F984D33C08FDD117F
C2A80AB85A79D62EF7291988C971071E7FE771DF0FA47F5C9ECFD8E5CE46AB97
3DD7CBB2F2A2DDDB8622E0A0408E886F476211D74C88E15FD831E38DCB756EB7
BB32929C2A55F315BF2FB8705A3C43BE5C074805F37F4EE4EE6CBAD255941D1A
BA46DAB270B537A5305A04FE7DEF7B1F94090619B682DAC3A17238A2575D7515
F803B3FEB46CD3FFD317B1C0D8D216CFF5C4325B325C588607297CA9024F1DD8
1D7ED2D263E79C73CEB5D75E8BD96EDEBCF9FCF3CFF7DA775E92EE53A834DB97
5D906180BDA107B007DE35C898C870A2B6DE03AC9448B30418FA829E19F7C29C
00DA6AC27E729D3663DD94E5AA9B5EAF11C693134E38E12B5FF90A3B619006B5
0D350DA91CAD99076057581AD3468C7649D4B0CD8A1F901E66C0133358C94E9D
ED0CA394D92A6C2323231AA9C6F43DE5F16C4F3287E5A0138C7BF1C5176FD9B2
85FD00DA0C4F24AD643566E6FEE05D167258B366CDD34F3F1D5E4BB8C20FBE33
9991AA0065F370DCE7ABF884F901FBA4B4A1F63D691BF7683133DAF7F486E726
2FF718CF8FDEA3304106C35B7A68AC3BE8A08340FA3FF6B18F7DED6B5F937619
225D4BC619281823CBFB578DEC7EBE7E798B12C9508B58F46F5F52FAC5D4E2D1
25D3C55A41BC9AE43B1335A3D29CBAC258337DC8D35B9F591CEF1F2C8E5C70D5
FAFFF8E6F79E79F49954EA50B33E34161D4D6EE82B8F4DF45EEB34824AE54B52
2FCAF2F5998A0CD4E3DB9DF3653C2EC605B238911B4FD8F5C268DFA295ABE36F
7DACF640E9F37E8BC25E62D580686E23C8CA9A697976D30AEF865DFDE71F3E31
F5C499D5B3EFBAEB2E9C38C8891A6F8AE373E2D613B7ECBC510A55790033CF44
A5D18A224AC49B56D52FC497C821439D3B329FF52183A04174A2C375AA7667BD
3161F6C911A3B1DFCA8696DD21774566CA2E08C46EAF2BB02765BD58BE34FD96
2294F9B913D925138FD62362BB7127709AE2D6A4D6B2FB1FB261D9B37B4683AC
23CD8271A338A5546D4B293D6A2CBB66912DB11DF242F292E8F0B2A89C5C3AA0
33B5A3D814BB267E3C5E5E74F15DFFBC7E7A93A4C43933D2B062D112B48D664E
AAFEE5C93199597DF1C098744C5DF3F492B12553F78C4587A325A91CF817073F
F3BB67224DDB8A79752FD3B2F09C9F312C3FD854926657261A91DC8C143AA594
2CD8BBB267C54B8DB27797A40B7DD520EF899F887A65C0D790645DCAD06836A5
92CF3A95FF33138C452586936FF764A5385338E9D833BED47343F29944E57B15
A768D78C06E87BC430ED9A5DCBD5E58C44C2082A5BAB66A92BDE04FA155A70DE
508D4F4BF3CA162A055F840863F89717D30D6FBA6D50D5C2100B5F1369B46BB1
A88715C7107BAD95230C25012CF61496AD98326ACCD6EB7815BEC4F94AB78E85
D9B05E26044926C8D15C406396D1BE61584BAB6B72FF4B5EB8593264CED6C166
9F9A378B55312896CE74D02CADE04F6F2A0D291499157C545F3432D56C57F73E
E080032089ABA0142EBF31A7F83BE8359A311B9653D23B81A955AC5AB58A154B
C036C2C9EB1AC518A6EFD24E3E60343D88CED0D0906A73FBF35E680125BA7334
948896347A83FC97970BA5018A36258D3B26A0B466329F73E6AA21C5663F78B2
6DDBB68B2EBA88E61DA6B6AE5FBFFE861B6ED04BE7C37A215FC4421E7BEC3165
D85C0BEBE7BC22EAAF16A17D52701594F4F210AD23A2161E33740590CC8B4462
3138722C1A4883D0159264BDE1EAEBD49B39105378D0B82B0826400BDCCCB26C
62F7A79BF2CD89CC20C84526D836EC62331F14198BE4E28929A3983969596151
A56BCC9ABC63A4A7D2E356EB65ABD4B467330CAA563DDDCC1525D22DE32740E8
30E21B6DB36C95AFA948C38A5E107332CDA253CB9ED0ED343A0BD7156AF1D15C
556A9D0389E972C92ED4CECE4A229F9BB0A6BA16479BE3B91BEB238DCCCA7202
F24BB563B0F6058934A5E7CBFD4C3AC1E48F3FFEF83BEFBCF32505717D6D69A1
672C3D5E07F71ACB4C5C1B89FB76D11A332A0276629D9769BA85D53B7A9EFD77
28EB6214EC4E6954B27D8B0AF66ED91BDDB4B4620C0F4C39C376FA903163FBBF
0FCB5457266EA6FED919BA776F9F7FD074ADE4DE508C3F69B8DF2BC6064148AD
9A04B6659B4DAFBCB9D13FD63172EB4CCF494BC70F1F93CF9B07340FDEB1E9F7
60A29DA72D9906733F7050FE3188C425737976DA8E2C97C28B4DBB3BB0BD4CA1
7CCE806B8E748D5B93995ECB2B366F2C4810499512CEB9D5C9DE66F72D203E65
B95C168D2D1ABA66A8CBCD1683F251A71E7DFF3DDF9082D12DF5D1DC9268716F
FDE29677267749CBDA1FAD9580550144FE2F389274FF62D78A5FDFB5533AA2D1
092BEA5570BA7C4302D07437B33288ED34C6BCCB178B3F2E5F74FB5CA36248CA
EB194E8C39E765EB12C955EDA9AF8C3AA34E4C9C46C2AD04B5D9E871ABBE3958
3A9D1B8A8F7B8B24F3AC55BA29E93423D5D8946CE81677C2D92889864C9F2BD1
F822F7CA31B19A96FBD2790F676B2F108047C332D34D485568F4D6EA432F8951
540BE80AA3C873FFFDF77FE4231F51AFEF0295B5173EAB733C7554CCF5DE8670
197A09DD394E727FCB2DB7AC5BB78E055B284D736EB7DE7AEBC9279F4CD2C6EC
4D0D0FC5FC81C777DF7D373B01153BFBECB381D6BC8A400D205A44C56CDF4E25
ED240B9522F12F74028AD2242B8CE624D90D5F110712F0FAD7BFFE273FF989C6
AA635C66485217A3C24146C2982535259B2FBF914339010B45003E1FFAD08730
7F106268733FF8C10FB0E4A05D2E4642360D5A2768F4A0BD88530DDA55DED4C1
CBFA362ADD6B967FF81A230D6905D3A2FE88B5B36A021447BCA599EE5A321353
026269F9E8F95A8B4A034C32503D200C7C7EB437BD458722AA96B9659A6858D5
982376FC3F31533F4CC0868A79C1051768D5AC85B13D08959267F10C6336A7CC
6C575D550DAF550C555A265F71AC56A60658328E7D4CEAAEF49C981EEF8FCAF5
93CBA6D2BB53450894514B8CB312F55465D970DFEE6DA39D7ECA4AC6C6DD0910
C848D33133D9F8CC58E17A74974E6C2A42DE85105ADE64483A1E3DD3B7536E39
EEDA9F482CCA1C38BA79149C00345E3A66205C476AE26D028E46129FEF88C964
7963A61E29242ECC785288189611A4CA17CC38914E77F34B816A2A21BDE4D65A
2BD22DB1ABA43E6D053738326127374262AFB5A230937E2BF8F53D03BB0F1C8E
79C9DA4DE5F8945441AA979465A4E104523F4FA4479267774765627A8BF4967A
C7AE194B976D484F12A977F8627AD23C5F6A899C7BC55477B56F2239DA6230B6
C855D9D84CA1B63540773DE7CAB823727D579799324E7A71222BB90B964E4148
CFEE8A9E2C89B4155DD73196B4B3123DF1F27F2EEC18F9DE03FF3E74F224548A
C4055D71AC77AB447FDB57F8667E75AAEB99EAA05C6049A6B9F20F8B762E1B8A
3D9BA87DD7CD4CA52B52F462CD0008D88883134C983DB27EB215C773B174BAFD
D3B191642D598E5425DDD2AB0EFAF88AE70EDC2563225F91D8B4D4622D085BA9
6C502AF749624FAC209FCDC8D2829C9B71E2AE55AF457DC8FD8951BB228BC43C
CEF1EDFA01F9C5BBAE1F3CFE5DC7DEF3C3FB9D45C9E2F88C0145EB7CC8624DB9
4C1241BA7279552AD9D4868A2FD54A141A464C8CDA4025331E98CDC28CDC29FD
F925A3C6E02BA2C6EA31D6608D3915EE0CB590E81D43D20EF4A41D194FA808BF
529D205CE1C8685F434A071DE3964013D59BCA0F1E02FF78891DFE541D85F543
3055D61D94D9E01356A760AD957025063C616632893E391E4368345153939BB4
C8A884FC8D9A01A70E525E39A9F3D4E47EAA05186EC58A15CF3DF7DC9C28AE70
A895D693D1E46FE549732CE912BA5F349CAAAA226A10AA1BA3148D4C458B926A
BD20268AF3276A005A20411D395A77259CB1A985A4B4EA51382E8B69C0F45868
8A3876EDF2CB2F3FF1C413B1B36117FDFC0C700A040C7D631B7A9B75B132EB86
3DF6D863D7AC59837FD133B6181AA4EAC2C1BEEE7CFE135134CC096496E932B7
91C14B1AD1B4CF77A942A90B446FD8A6B4C475BD2C10391258D144506F44BC46
B46529B1800B715954DAFA87CAD46AB9F7A9FE1919290C64BC6AA7CC8C4A7F6D
CB48CFF4A2F1DB869293A050B500A2A02703B1BEA9A6A4CB85FCA668D3F7822D
A558D14A27A3E39755A42E875FB8745C3293C61FA2EBA4D4235D574A755CBA23
DD7BFC890E33E27B9677B1550A5CD9B4D832C69A6B2B9294D8C6542D28618919
A7ABBC69B2598E24AF8AB1501DB397B552BD75A1670511F3925A5CECC1F58D96
77F7F288449D6E3737618C24BD442D510E3E17EB4AA4C7B78EB4A65ACF8E18F9
78202DB3C865CE4C2C62AFEB6ACAEEE0E2FACAA9153BBFB22BEEA593B5E64C22
685A31A92565FDA093ECAA6F981CA8F48C75E5AD193F6E45F3474BA2BBE2A456
49355FEF98283B929E5CB1D2CA3C298F676BF64157AE9C96C28C35D2384B66BA
C4DE2CB122868B5B7DA637DD68B846724B6EA8342D97F59B32E29F956C85855E
5B4C4FC6EBA96CAA54AC3AE5EA6592A9A70AFF5E92DF89D38CFB46BDE1F89DD9
2E77CA2F47DD68B96C5FE294FB0239D3ED6F264712E56825DE69F78EFA8358AF
D1E5978EF196F70EBCB87947CBD353EB4907E3C52E7C919E725FC329A7CFEDDD
D3BB237A7E8F5B9B14D36FE501F8768FB3C8AFBB3529E7B715123BB295DBF37D
E6C0587922B05BDE83A867C53647FCBA17DDD8049C87AFC243C7DE647B11ABD9
98E9AFE646E25389B5BDD5E258F0EF22A346BA142D19AFC0A9266DD59919483C
2C94628D70DDA170DA1185598691F080E9E17CA59CC098975DA5A9E4747943DA
658130D61EC117AD8961B52FA9074D619541622726892F604B2CAC419B925AB7
A9FEA8B6AE7783B0EE394DD29AEF1ACE320FBB37FDD0FD27D2CE7EA2D0ADE21E
C941F8FE1969FB0934238F76210AEF5A7666CB962DE79E7B2EDB6B9D99394593
9413840B3918ED4C7469DBAF94D1AABF845E104E8F51F09A2448515DC558CD9B
3DEAA8A3EEBBEF3E6EBD86D872CE1A85A5623E0D4D0AB1A05D47F6B4D34EBBF1
C61B35E0153BBB7BF76E4610A98CACF8A3B77AA92EC87493F085742C60475BFC
F0F0B05AE4A1EA6DD8B0014066718239F7EEFEE9283A4727E05A4E39E5148082
49610B7BDE18A6A555DBDEF6B6B7FDFCE73FA79A4BE6AD26AFD6DA938154A4DF
E82D795E09D4029266BDE514954D628D8AF3F554FF78FF0E19918E202855241A
C836DB7A32D5FCCAB45174A0FBF5ADE819DD399C10AB11CF346253725A2457E8
CC3F58F5769617A593431798522ACAD562B98B83A5831DA7CB2464D5DBA5B760
4F99B166A4685A66AC11AD9C51937E915B5B9188F153326EB590DC9A2B16A682
56DAB921EB5BA2B773ADA3778169C8406B833634C4EC908DE54C2A5D583F6542
ABB9482CA33FEED78AC919299B92F165B3610C1A892D7ECC1B285A15D7C863DC
5490287CA6242B05D36B05FB9F29AB9FEB7BF6CBC5147430299563C5294FBA1B
89892D9568B3C3DD38D35D8D4FC4AA462D99137BB26FA6E55D1DB740A73BCEE8
ABDA56FDAAC1651DD9D2E7974C2577CB959E942BF125627D34598C78E92F07C9
C9FA183414BBDC22BB5032D7FB6EAFC895B3A19C6767A55CEABFD38BBC98F30F
5996DEBE774626C6B6752EF97D72EF77F7CA2464F05890F2EA4663CD8A43C777
4C8FD5A7C0CD929F8E96F726E4DE72BAE9953312293931DF29A6668C7224487B
729E7445BB8BE74DA465A01A8D79EECE3A04D766DCAAFACDFE7AD7897D93D3A3
729B64024906BD537EB36E365B49219E9F753AF2374CD97F4837BE3125237634
11F322ADE490841B9D5E5F969E457269114B93CB3D4C4CAE1123E889C978B72C
DD2323FD1774B95E636AEBB4D3E8A9778C1BF957968619A6C62AFD3386F0A506
5A70E3924B2E8140C772CA5A5C45A3775E8575688EC54AE9977A8CFF886D6DEE
C4104FB21F8CCB6BB334AC93A4137F628674D2B24C9516949659EDE1ECB3CFBE
F2CA2B59F59A7634CAC57A1D2B17CF2FE18B0CB5128BB4EF6960869D86D8F26C
D334AC8611ABFDD132035A0754DA11FA1A864876A2366B866CF13258ADE5C2CA
59AFC22B63EEEB7687F07D8AD28E5632DA19B3BA5EADE7A178337F1F0967A39D
7FCBD83509153A27CFE37D6D645D44388D4A649C222969305B044913FDC8C0D4
BAA58926BA53BC18807924BC2522CC09BCD0EDBEAF8813508A8712FCC637BEF1
C1071F945052C53EDFD5E44CDD564DA4E0437A14D403D1EDF7D9D29CB0C6EBDD
123BB62FD1199BBAFD459990CECFE4A697F7CAE61D9949B770AE74340DF3FA60
0AA2E567ADEC4867FE7BE332DABA47EAD8933EFDECEF9FFCC3AF1E2F4A2D7681
555BDC94756215BB9AD1C9AC2BF94CCABE14BACCE4E4D7EA7222766871C7A505
2F532F35ECC02C8B159592DFEDF54CF40E77BF67B1759F53901DE92B168F6E1F
34BF118356556FD42521F659A69D8955CEADE8753D3CA1ACE2693972F0314B9E
FA3F7BA529E6F9B2DCED1ADC38E9D9DDDE25134EB32B7175A451CBD76EB49BCF
970EFE41EFF8D3C9E9D44E89C66DCF595AECDBD1B77DF9070FCEDF518A25A647
D6554D39D8BF6AF6BE8D7392E235ADABEBD96662F2BA7A6247AE72F3789F1F1D
755CA9A7BAC49C8C14AC40E2FE8A627721F7D96ABE5AF5B74A879D9DFE5CCD1C
F0FD2F36C05A62FFD491757253F7EFE89F48ED591297CAA45849BB1EE9CAA747
7AF62CFAC0CAE0AB663E78A172BE64CB3DF9FF184F0E4A50CD55BACB7D27E646
D345E3C66A30EE453D478CA66BB4A27816F70E4C0CCEA4C59EB8A4D419CBB997
CD548268E054C04F21D8071BC5F1BA925B2CB73A53BAB22EE3D2779F531DEAAB
4727EB41396AF7642AF1626277FD14492D5B92BEB65998B66AC5B2674FCB0AE9
3EB2539A8D89074AE0628D2B3ABCDFD5BD1F57ED32D43BB113969BAF38623A9D
7EE63D99BD3F2A40EB8AAEB532A3A67F9B3955894AA42E9D75F9BC881B49DEE2
49BEAB9CB3ACA951EF555968F87DE9D2A5434343386894145F3A14E1747CB37D
7385925D4DEFD23B5DF747F1C3F95F8C54E1BB7A45140D148CAFA790AE2116CA
03CCF6A5CF3C6F6A6C0D5B2A80A3AF7FFDEB1F79E4115A093EF7B9CF4120255D
E69C9900415EC268D4B0BF170C6FE3C68D6042BC0099927B38C936ECDB0817E8
A76C4B13BCCC4640697E805ACF40AD34FA1EC4056B99C3F0B4942618557F7F3F
AF87D4C2C51AEAB3408DC357CA09A47D7D92D25CBDC6406D5F9A25AEE5C6E673
82F075EDE17195B3D2B3AA090DE1A84D1AA0796F947250AE7A0ED9D51445DAF1
40F1F51E128E82BDBBFDF6DBF7EEDD3B4727083B4E5E1127A06609EC55C7C3C2
752FC8ED342E0BDB0DD51653D26CF3399CC0CFF932252BFC6C49CA13D9A6F377
A960C0EB5B949D1E1D916D62363A0A4649524DE768BBFE9A20F9DB74AF11DBF9
C3612809B958AA546BF851A359AB9962DA86DFB9B163B43413B95272C1B2725F
3D353A9A97819A3D2C5B73D1413327FEC80D538BCBEF18CC3E32906F945AFA7E
0A9D2703A7BCB86E7C36961DEA2F770C39CFC74BCFE5E5713B6B274B8DB299B1
12FF68473AACE99BA679651B03ED0A85024FD396AF5EBDFED1DB3C237A4067CF
8EB127FD6F4E6527250F6AD5B01BE71A81E3661BD298C836EEF30EAC0E3C9D7A
6E85D1552A0713C1542CB06A034DE78C8CF76434F7DAC898331EB9D4CFE513CD
4CB66A0C0727A4EB472C5AFAABE29EF2983C62249E69003BA75B258792B14AD9
4898D5A89F99718AB17AB01EB865755DD2ECCF75FCE1423BFD8C5B3C3023B178
FAD129F98F8962D1890629BF52CB885B17AB6C54B34632BFA82C273A99C1BE60
D18C15294C5F214E75C5C1CB7A9E1879D4BC38ED438BBA0E32BA1DB39C46D3B5
1366B95E03B040EF4DDFCE49666CC354726F3271A7350ECE94AA44271DD7AC27
FC78ED3CDF8FD63BC0118B7D53374F1E122CDF9E7AC176630DA96593CBCC69AF
981A74D63BE517FDDC6DE9A9D854A266B53CF552A8AC10E31F23CEE28EDA78B5
6FD01E7D2C2F3B241E446AC0598C0A8CF502C948EF997F510530C7A66AE6847C
BF901D02A7773A0BF6F4DA8AD9E7FBD788943BA275AFB3519CEA8835F3AF983E
9040016F419F77EDDA45F2FE47E14FE33734C9369C3ACBE3BAF09D0C24F71A09
CAFAA3AC32ADA676994D08E005AA5A2041DDB61AFF47698B4574D571C789856F
8ED44BAB41DCDFFAD6B7FEF4A73FA56DC468DFB5A2644EDA5E4DC6C390B8E04F
2688EA8DCD0C1F22C5A41C0D3A8E21F4A640320CADC74B1A34A71637892FF498
A79E7A4A13CAD4B6AEEE018DD496F6556568C0B29D8018AD3AAFA2084FB0FF5B
A05917576B109181911FE03BF339C2F9C9FBE40466E8122B7608028D3F19C746
919F25F23916334534813C5CCDFF90430EC15B80006F2F083BEAB53E07F75D0B
07913D907FAB7B768E75E8D57102BDB38851D5E0E80B97BE607A0DBFD302C669
10A5E75B874C3BD511756AE5A972C4972E818C13EC0992D2514E8D8BD391CC5B
5E30511B10A948764A7AEC439E8F6E97BAE46CB352F51B80443221A6E7076EC6
4D4C9A2D1F5E24103B22B54A2E2A536E4E7ACB4BC69A7B21480EBC79E931EF39
E6CE4B6EE8E83276E44BF1A4D100D94D400CEEA848B5D6892F07B9B1E9526A42
4A92A8A422CD483DA8795011FB9AD29044F125AD51BD1DDCB5A5E2EC49D65BE6
1D30AC94041358756A7A71D9D86D80024BC98AFBB9AA39D69149554ABE9BAC08
54914612E30E54FAEA963BD539658DF7E6061C6378A62CF18E567D8591F154D0
324B5767AD374B445E484147708D6A039B6CD9526FC556AEAA75BD60031BF32D
4B1A46AF9AC089664C7A6B1092BDBC29B101A98D48DA6B25A65506B2B162A93E
1DF352F5CE52A6B5DE5435535D5990E1783C6DB9E3453F79F467CFFFD9DDD717
228D166F9C2C46BDACED98F95A3ED399A6485AADB6EEADAA7BB6F4955A61437B
336294224610B77B2AE698D1B0BC58532AADF5DA5DA5C2642595E828D93376B1
DFF64620D543BC9772C558D4CA175EDAB16ACFCE19E801D998E41B2D31BF950D
00C8D492665FD99D14A729512312441325B79AEA4C556BC545156B0F647F5FE2
5149C7E3E5DD55D38C15BB6A329E8AF63A6E69A655B1D200B3926CDCA81783FA
2BD7097846C289F12FE30446FB9A08BD23E2EAABAFBEE28A2BDEFEF6B75359E6
E90DEB11F3691093FBC3174EF120F1D8D0F7A07AB4D9BEA490A447FD8A0CBC0B
E737D052A4F79C842FCB9576740DABDBB3AC3193B9C02778433AC90A441BB404
9683EECBEC3D159C3628EFC73EF6B1BBEFBE9BE5E6799D24278F79FED33FFDD3
030F3C406244A339AD196A16A0D19C323EEF9CE115EA7AEF02D51796C3D44C05
9ABFA59D1987EF7A4DB17EC219D17F3E27D0BB90E8402654D7AE5DBB61C3064E
8CB7AF307744932AE673024DC7A3CF46DAB55A83769D74DACDF1102BFAE4273F
898777DD75D79E3D7B78FF381927A354A51DC5AFFA282F95E5256E9A5FC65B9A
09765E63A731428C9252758DB8F4A773D039D621C081F1BE7A3947F8C289F970
D6146BEA944C25A37AB14F8FB1B4C4BEAC2D71DFAB45A56943FC12633A82E548
47B3C3961E3732DC30ED5A23E1598371DB71ABF558C4A87B41C44ABA7E331057
8C201BEFF24B154B56E4B34F0725491B871462DBA529E996613D3B231381C4EB
46A1910E4C501E2756356B52CD49FF14D48BAE646CD2AA8194B7DCD5ADCEAC56
DCA867B6A21F2D23681A81E1DBD64BC931D495B5B079C30824E1B7E8D6A49748
76B88572441A951894918303191C97B867D52241299E90523193906A25ED4B39
27E971D0F098405A96FE6CF71BDE7EE8CFBEFB54C5F1A4E28A6B77E6FA538D7A
A53C38197141229DD28015A996933366CD497846D9AF0566A2C3B0668C427436
BE088F3B339958A930117163D6D26A6DA7D4725E6406D34EA7E255B71AA9D8F5
68C3F0FB821585C8CE5A326216E25EC28856AAAE935EEA4CECF1A4A76FD5A13B
773C94080083DCA27874AF572EBA4530A4A81D0BDCC0173F12355CCF954826E6
16C0829A99A454CAD1A6ED89E545AA7DDE81860C4F4AB21129DB66B9E949E0CF
AED7B00EE9486E2F4E485F2A3AD8888959CDC83F1CF577DFBEEBDB11AF050147
3A1CE99A964A4D0AF1E5B1EA8B934B077A4787C74CD38A4493E55AC5B0835685
BD8E5CD0989646900621AD5991867FF8C1073FBAF72930800EEBA064C3AFC8B8
B72651D833962EF945470CF795D1079AA6E75CFAA2D5E6FFC80948DAA42DE068
6E54F87EBE85750269DF57C37B9AF0842495C581E912048DFBF0873F0C02C124
292DF2A39C803778A8CC152EE1A085F829C7714A6A4E51D347F8CA6C264340D0
66E2EBA9A79EFAAD6F7D0B3C898E628C029A050620ED0AA674CF927A0E0C0CEC
D8B143AD25EAAB90B623DA9FBDBB8A0497448D26B5B3CF3E7BF3E6CDCB962D7B
EEB9E7C82369D7C2015396003860DACA59211A3337824219F95FF8DAB53F8713
D01017CC960A0FD7DB59B76EDD1D77DCC1634FF28D798283CE97ACC34F94CE82
8F32305742B7DFE8CD77F2F2EC6E75CCBEE52D6F79F4D147AFBFFEFAD34F3F1D
AB864266844A3CB17396C5657499721DCAD704A35E3EA1D45FD765ECFFB6BFFD
71025EEE489588B5D38D765EE1FEDE25D2AA9F89A9E3131313FB8C2235A266E0
A3AB00FF491A52F7C44DB664E158C989808876943D48FE652B80FCE004860B9A
9092565808FE1789DA49D7ADE3253B2A2FB147BF4F8CD15C43BCE4E179797C45
B9EB456332C865E38DBC57C8A541F11B43E2E492453F223351E999488DC7A001
482A9F7163A581B25F5CD19D9A9C982AC64BE04FAD429EAE24BD6457B26B7779
3750E59C73CEB9F2CA2B95D5B5B6C37503C925C4AA486DC669B43210EA2070A9
914CA965F76A9577882DF14B531097535D5D9572CDAF759B2B5E7476A5AA565A
B2C3F664BCB1B46771D7EEE1E7BA6235B7E9617F9C660C6CC283702F552B9094
BF72C61892441D343605A1D7F1F2F5CE162FA939FD46D66C8C0D0197BDE599A0
D88C4E79AE59EFF423D565E966A9DA9CB2BB064AE5E15CED1057B677CAB23DF1
DDB156AA6FC7983593310E283466A06AF5E493E3112824D259710AD881BEA80C
A79D781142472C15F32BA6CC06D3F72CE91A1CDB9D71538D6C67901F4E48730A
BA88918B55AA4612475DB20DC9078EF876AF5BC2412DD9A95CB33195AB9FFCFE
931EF8F60F8BB5B16450AB3A29D730BB5A44C999328A4157CBBE2F85744A92A6
3D5DF42BDDDDAB3EFC91BFFFDA57EF00072A16AAF158BC569BC1FEA65CA882E9
4E490651633098723A63C7BEEDDD3FFECECF77754F381312E42CB7DA4C572DDF
8895639027FC46ED15DB0C28EA6921CE3937E7189A31AB219E5A8945235516BE
774D2D063C454A2C9440600638FC20C494DC49AFA5EDE50B07D4EB8D4EB432A9
F157423735EAE57C7A5709D90CAD9CA0A7175E78E1962D5B8E38E288471E7904
0D582B1BEDFBFBFB49F7C1A818B0C8840370148DB161BA108926E7A3890E5ABF
89166A46E6CA6C793E5E104106AB1627757B2AD0F542665A60412B6FBAE9A633
CE38834E02095D02BC40ECCA2BE5042AC3722B3107F0AA9B6FBE1930E1DAF59E
06164BD09BF3E67002095DF48895AE5EBD7A646484323E130F5599C3BB071D74
105AD257A42923F895F2041D42C66CC6228D780B689CF4181186BA0BD039BEF9
CD6F4ADB12481CE34F32EB10D35BD57811C5ABC890FF333F3A9C1D4F64DDA0D0
28670F5B3EFAFC8BB159EB6ECD6991FA5E898D456A128F2D2A368B6216E31123
DE199487C02732996C613C1F8F3A5ECDC70640864F493D58BE667C70346D15A4
86F67149C4A431DD1524F3CD7AB3159E6AB5444BC8342D838655703BC49CB1DC
46CAE89E092A122D4843D0D837CBD37D8E8CD43B5B314DD2D1AA289AD91583A8
5E8D444D0F5C2B689DB572BE022D013A43D248E48382DD69BBD3F5B8677E71C3
951BAFBF72BA3AD5E5CA940C003362D6305493A6996D3AF8ABD0AAE21C894B90
B9E2F22F5E76D1A9B548CD8E8951C2727BD231B718292EF616156AE3C5FE4662
C40730BC54445C2FE3DB915656AD808C962DBF55B91F6A8A1BF35DCF8B36A219
DB9FB0E3925EBA68D9B3A3BB9A563E9B05BCDC62151A561C1AD08D1BAF387BED
29AD1B362239C36D6662B592990793EB4958E385CE94532F59A5CE724753CAC5
64BD4F64B20C68D98D66C39FBD5B24C05E194D538206CE4BABB27442A219A94F
A7833AB4E8295002AB335B9EAEC9F2BAD42C19ED48C84425292634B27A67C39A
AEDB582FF648FCB1A6DD4CA4C49B1637BAC4F1A66AB15AAA9C8C48339FACB682
825B72B3530777379D78220168572AF956286A4B54E888E58C5A61DA69CA8A03
96BFFBA347DF7CDDF569D389D833335579E7FB3FF08B9F3DE4554B60CE3D9D3D
E3D385BAD4B54C80161D7A15FE4556956E616C386844357728E6AC9EAF95D716
38484A29D47C7FCD35D7AC5DBB560BBD312C955C4123882494C915B40B38F315
0A7DE1E2F212E2043CD8E19874721769935ABD309DF229E9205FC74F14E4F19C
0E74DE4A8A2F0C72A5F91B8489F662BE4BF2C7495201A232A1F5FC980301A08D
8D8DA119968C66F8AEF7896BA6AB8462EA59884D66ED6F98EAA64D9B20296BF2
54387DE14FF9EC8F13BCF6B5AF7DFCF1C701348CC28B29687DD2AB8F7993B8F1
F21B7EF6E927A0FCAED7A2B17E6D3870C89CBDCD0DBD71EFB88AF0ED48AA1531
32158D8DD9ACC005104C539A1928CC20312CEA89279E90B62E28B3EA20B32019
7440F514FFBE64E278E5B1587FE647874BFAD28A3D8900B76D29B7881D786610
B10CA9663C6BB2155F28990A08437CBC518E35CD0C089B119F094AC96CC748FE
FF12F726609295D5DDF8B9FBADBAB5F7DE3DD3D3330C302C2218779468CC1792
2F065CE22731B8B04410019961DF666084611F706411028A1F286A48946C6A12
F9DC9098888A802CB34F774F2F555D7BDDBAFBFD9FB7CED4C9659841F1C9F34F
C1334F77F55DDEFBDEF73DE777B6DFA90A5A86AC05BA6A96E3B79DF0961FFFFC
27BEDD914D251584BE234B5070F5AA20B997152D0805918D047E2C5CEBA23E4B
16BC466A88E252110EF50E98AEEE1828F447C6636BAFB103C660AC333857AEAF
7B68C3E68F5EAD19C27AF35C5F3734CFF1A92031461498361CD7B5B229A7DE2D
E4ACA566475813CB2DA8B6741F0A6A6131F040B651D34C8523BBC385B4950D3A
1D13225CDCA2EF8C95D3027C7165342BDC14581D1C6FCA4E457A5795B3A3839D
4A25EA38522417B362EDD6DB662C972055D1BB86E8E7A478D9AEE37BB8F87455
3BF684D7D7BEBFF4627707644464E5E843DFFEE2CEDDBEBBA0C7417E6050D58D
EADC1CDE3752E456C1846E008E2299DD411DCA0A8CB4322D2FB44DE1CD0A2023
41D934CC9495F1DCA0DD69F718A08444B6E010D7DA1EB7616C7CC54C7737BEBC
11F590BAB3D51D94208AA181A05DEBE07CAA0E2AB709BFB417AA38FD03662674
5A68D1D9A514D8BEE86DA07651A6E3F3E63A0A3E6FCBF44CC7700403B5D883B1
7837C4C582E052B80B47C2C139B982D6160A861041816EA95A27EE347D156ED8
74D3E6DB3EBFB454312DDD736C1FF53EC8BAAE52AA216D25CEA9E18EC2BFBDDC
A07D2431DF4BB2108C135D9816F455A822C940E63EAEE42CA65C7B42CAF8EFE6
CD9B118AE2CE5CBB762D9A9F494D20F7F9FD79C31F7FFCF14F3CF104241C0B90
E806C749239CCC43329AE520D75541DF35CF6D5AB9431E8D8A612CC3762EC125
F849B832A9938875F984134E78EAA9A750FAD393E2B9DCA58B4421590C14FEE5
F006AB13D23AE40222638B4D222ED4FAEFB2096EB8E186ABAFBE1A8532A9F687
1E7AE894534EE1C4470AED9081956CD07A409B00FA1962C95EBB4C7121F5FB85
B162604F1D97EF51F627117413D3354FE0AB68025E061C1FC29B123B45921F94
D896C8D0A10A70D23DE419FB9FD204B88C82810CCAFE521B6574B4287541D5F3
B6D750828C0C6DCD106DC99CC05470D3496381F992872F2E3EFCD043B76D7D5E
82D09424D3D0DA8EEDA48B63A350DF5593E3711782505EC453622FE5E85D945F
464FE28B8F015D4D8DBCC042E13C28A3400A2A5E20C9760E2FAB671BA106C3D5
EC9EE26125784AAA099FF982D016CD8CAA878855972F5B3E3D2308048BA58280
8AA86A4AE946B50BB1AAA8B16185B61BA3C4D7A5AC11B49AA626BACA74DD6288
DF151D458EC32550AC58EDAC184A2DCE74D55CBAD19521D07388B4730E34DBE9
C9F1FA9EBD86A636144FB4E4D141EAAAC2E2495B1D5B2417A44CABED74D00ECA
9534BF1A99B2E966EC4ED71FCCE52BB546694DBAF36BDB2A95BC2E44DDB00B61
6CF820BB26FEAAE7BCA0B962D4E856DDB283E3B5CCEC8859B3EB309F161D1310
8A87BAAA3433BE2082CD8A50B422E3CA44A915F402815A2A850ACF8EBAB8CFF3
4AAEA6E8E0562606D3A92E6C0B1D4D89FC66DA0045828E538CD0D49B50F2D9C5
F917F2A5F16A7DAF1E8B66830DD1162D8FCF3BA1E5E6DC9DD948727329B4CE50
33A04A100E3E516E87F2080554EC385E6F6DE37E9151774B4EA865B35264B81D
474F655AC11268BE81BA533674C40DBE877A3E30648882A18965DD6AC36E77A2
5E3B6194964F3EF9245559C16F5D5CC99FC9C949DC2FC29D43BF93C424A94780
17E51139FDA53E99C1ABDC831CB50CDBC93C271F08EE4CDC96DCF396C2ADC924
1F0E6A330933AA8A6BAFBD9662CB44BBFFCA6623D03320284C4D691B54574C16
03425DFC950AD088D599FC18445641D2017A623D49E60709CBE3F0C30FDFBA75
2B299564F0908E640E356ADD8CF378F9E5976FD9B285AAD848A426498AA09F74
4F88980827B8E11C47AA99ED00FA4A91843B0548296F958AE9A85A82EF42C750
C51C0557E1E5E4D2D0EF5D8E33895A01C7496A553A48EF4FD6BB3463D4482ED9
A2875E0A75DF255D4B689DAB31E2837481869E3E3EE38C33EEBEFB6E861ACCD6
77404DB09FAA20E4C1BDF7E8934C34A094042A7063320CAEA0F9FF5913447AA4
C96ACA8E7450C46B40B124ABA576B7AA83EEA108C8C76800A75C35E5DB4B2E1A
10AED83ECB4E3FFDCCCF7DFEAEAEE776EC36983DB78F12A1E8B45C28C2641542
5B9D834C2435211D89C62E3EF8822B4181DE8E3240D224431A6D4508B866F5A0
303CA0CF08AA9ECE70C66C6BA1B3B73A00033618FECABD9EF34ED5FA65B0CD01
E1B20BA22093CEB4ED36CA34D590F594DE6DD972A8A5B46CDB6FC6726058A085
96E2A51B9ABDBC3BAE433C3B38E3044EB63EA24254CB9415BCBED92B455625BD
935D73E8B17B9E7B2A0B9D690D560D8EBFE58477FDF087DF9F5F2C47A15C34D3
CA88AE569DC5162A281928E48638C98F4A29E1D9977D548520DC553E4CEA5375
AFDA82666C09236AD42E4471B50CED60184F510ACD52CBAF8745FFA48FBDEFEF
1FFC96DC4A47913EAC4B8A576B0CC8A96EAAED879EEF0C0E8D54CA750D22CFC0
05ACBB1D0F22B4A2509B498A26FAD4F841387A74AEFA4C33924782C8589D894E
FECB3FBBEFB1BFB1172AA1919E749659A0CE8C4DB73AADB1D621134343BF8AFF
3D2C6B216A179C5C17242F25C529135A79F0E744A22D0A78358A03B400143014
08F0BEC43E8B58340AC496406BC0B25246CAACD84B606BA3D170045579309E57
1CD1DEAC9B534AA56E756E79318B67CE3B1DA350B4CB8BBA8CD8482197F8CA95
2B897AE037B2A41CF013F759F4A5240743B22D227B57504811D316B79AE2E27E
4E84677143A543740F4EA181BE3780E988095AE275C8B34FBD71C85B42E3E1CD
4F0325A1C6AC0F745FF272241137F450305909ECD3609B23D9C7F1957CC5E438
2256353235509311C7354E13DE940B74998F4FEEF7F266D8CB0616FFCC4DC929
95082F4BA6030B3892F86CDC9130A59672F4985FFCE2174F3FFD743A85E6131F
1CFFCA14224C864A0F78CF3DF79C7BEEB944328AD7472DB57AF56A149AA4EAF0
CAE4343F9826E04A3AD6F14C579EE478605386DD7D5C500D2FEF8BC9D749F6FE
3CEAA8A39E7BEE393692F6939EFB89548AD6B08A4D72D642DFCEC341E278B809
28B9BC92951CFF53364154908D6AA0823CB062D55CB5E2B7EB2275B204A9664E
758C612839D05990AA816543A80F0CAE5C6ABD28E8F9ABC25D21C94AECC5FBDC
084AB0C2186CD8953AE2D99134CC68D0755033981D4D158D631CD01019A52227
CA436E402EBC94FA35B8793C4B1F76DE72CC9AC6AEC6F6ED3B3ABDB7311CEBE7
5CF8E96B6EBD5DA41299F0E94F9CF1E0ED0FAC3EEE98E79F7BC190CDC00BF086
411CF891870718BE9A2EE66BADA5E2F0506DAEACC4A01BE9AEEBC180C83D15FF
939B5B835C9C725A688574DCD16CD06AA9E140CAF15DB0BD54001300D3A3BA57
2C58FAA2FB1C22EB35D1B2A657F3A05E498BD335B4239BBDD48CBCE6B93E7E53
B427F26AA91297DBCAD26071ACBB208C0B7FB093EE0C56A3BD222953105A0842
D3C8D6C6F313E097F72A5D14AB301FAD294DCEB5661A6A4B389196062C75C2F1
AAD6A4B46A62ACFAE46EDC9D36545A03865B7771E0B974CE757DD7EB8A68810C
59055A19D0BA66DA571BD9767E6040DB56F387B38DA8091D9106261E56426D2B
AD1E9A9ADEBA2443535E39DC5A5CC4D91E874C2558F0F2010C89E705372D6220
A98A2CC35827130AA3A0B954D4FC966010917AF2097A817BD3326FDB70E73957
9C8E7A5EF05A3BE2E926971F56DD55E9A0DD97F2B594D768C462AA233597CBB4
9A75E9E5D53FEC5478AD9A803236C545709F103446894F397C0F3CF0C025975C
42929D653D77B190A4FF2A46A3FC10CAA3205F1065E6724A8FD5FB901380B88C
70F3A3604240CDD290082148DC535A37799928A3833CBFF40DA1F524370EA537
8C8F8F132B353964D84912BFBC0F25F47B0990726255C72E6FFCF2CC33CFBCFF
FEFBC9D1FFA637BDE9473FFA110E008FA10C7AF68424773BAB1CBA38C530A04F
5341B292AAAE08AA53CC19FA0179E8E75C715D020A7A4A75253F1885FBA9DE9B
1512E7AA422F644DD51B1CD7491A4FC90000F9EEF1FAF846C8487AA5268084A3
898219449DC47001FA044D74777A8AA4D04FDEF7959A80E240644910A4E0B0FC
C184359986DC3169BF843152486468E2BF1B366CB8E28A2BC88947DD359886F6
7F44130C98BAEDF87629FFA63FF8FD6D8FFF50AE2C55504C7C70322357DA3FB4
61BA97697E1AC8934AB43D046D78B49A95BBB0F73F774239525B6A1A95088429
D06DC8E6A1DD5DDD5EFA5F42FEAA5F3686FCC18AE1FA1B2A22057DD1D3B541B3
1237FF6D4990A37970A80D0DC82ECA2D5806237F906B0D8DD9E9368C2CC27521
548DD5CEE0B6C1FAC499132DF785E670A1F4E576757B804033ABE7DA8D4EDA4C
B79DF68DB76C2A8D94AE3E7BC33CDA1FA370C8D16B661E9F4ED97A3DAEA164CF
FF314883D9747ED8DF512DFF5B0D7680146AB1AC5B51C755CC426AACE840A0D4
760ED6579C7AD4AC56D7AF9B0D15599F8ADA1F85B8D8EB78834F360987FCEC84
EDFFFC63753A1AEAC9455CF7C13269D91FBE79E6F09F0AC342C45861B435367F
C71CB455308355CEC48EE2AC768E35E8E4E6B6CC8DF98784602F4973660C9E9A
8A02E3F5C5C99DB55FD57290FAE050BC227DDCDFCAD6C0E4BFFDF207E6A5AA93
0B0015C1B00E03DEB1FFF7F52F3DB7D5AED89AA44A91E4C7BEACA9E96C5AAE4A
5D6828EB879C54377D797B756EC5D3DA6E84E7C3E74053D3ACC288558DF6FCDD
5E7C713AA4BD301E31BD05475220B342CAD5E23DB541587EDA11D3F6EEF45DB6
88870F895E05B01A602708B59485A3FEEEC8E91D33CDF9A614A19960B8A1DB8B
57C3AA6862C79A593849CFB752E72C3FEF3BB7FEBF6DD5E76CA99E95D3757CF9
2538E6DD4795FF63219A89EB763333945F2A57A89E9F5A0AE2BFE4747DAD88E7
820B2E78FCF1C79F7EFA69896531E17416FDA818700792BAD82F5A489A80C135
55FA40CFA3F2E28B2F92FE20BF33B1E443DF1F42A79C76DA69DFFCE637C9734D
EE94642748AE24DA2F8D921D38D4218BC6CC055C491E3D1640FC03572D71B61F
A913D26749473FDA2EA81528C5050F66D75B9CE8F7C63096B130894EA6596677
36394F985E02150CF5D2A1BA84B8DF1A971E901C4D943B4F3340357A34153818
04E6244FC92D8E2F08DF083520A3DC2D3C9EAC2EFC13F3CD91F580A71C79E491
08C351449258A4A2E2037A87384D9322ED38CFD4B085922C93BD25181624253E
CFFC01BD4334F9447C4BDCD7D4D1F360A111AE4F4E0684A81D1BC5187048BC0C
68916CD9B205A10CB710F89FB50910CB747B8B6C60D9D8D2EE5DB8A597FFC9A8
7FB8B578C39EA8A31623AD9B695A9F9CECF80DE7D10674ACE1C17871DA468340
570C2F883283C5B65387C01B82B1B232A79EA46ACB53DD9FB6941F401EF2221F
68635A5992DDC7165101189EA5074106F46C26FDD2C442F6C594AF83FBA942DA
08A57B16DBA1687592F233DDEB532BADE53BCF7A2E35E8766F01F9A4C3F4353B
D20FA7ABDB9B29D3ECD69D5276A0E3740C0BB14BCB884C77B5237F501E9146E7
B6EC55ED7490B34B67E6AA434DB80994364467CB7A667CF8DE186ADE74A98C52
4B72D206981E549D12E81FD0572C3F76EBDDFFA135C0772D503BD685595C1AF2
037EBB62A080D133E0E0B69625500CE1204243C4F325150AEEB21A94E13837FB
E6BCD932CB8F2DE88811C1D77438E293C76EF5E7BB0FCDAFC9BE6EE9455C8B0B
85155A63B1AD39793956E8BEA58F95B2D6E4EEFB7F291A47CB39909AC5CB073A
9D2EDED7A9A3CD55FFA3534F7CE63F9F9EDB3ADFABD612589F24720E6D9E4D13
4BCD5A747F5D1046B5F50A78DAED935D6911D63B8A0DC65A2B548AC53B3DB32D
EF2ACC1B2EC4DDD4B032520B77754A90FFCBFCD0C061DBEEFB4FBD86CF9103B5
A97FDA54553DB8A7137407A4A82C8F6A7E45C44824914620A46A28C5A2B37D36
CAFD69415E95AF7F6F069E90F330E043CBD63AF75CBFF153B7AED73F3E5C50F2
8B776ECDB6851DD7D26C43DEE7CC4876D0E340EF6FFFF9AFDC21BE0A093E62A5
27F24E025F4CF3C91E15829C247A28671F372462D20F7EF083DFFEF6B7290593
4689B7A1EE25885BE9789402681C301705A910DCC07805BC0BD5F792039A3038
5E9C3132B983D6AD5BB779F366AA42228F3995C893079C2848F939994883B0ED
F2E5CB5157D180E901F15C72587116CDA9A79EFAFDEF7F1FE50B993B78223E05
35D7247D401E12669EE0FC71FA2BFDCA340FF46E48EE939B1EFAB614DE9DBEA4
E02D4D268537C930A29A3EB9D730807E20104D7D3D515D5D7EF9E537DC7003F1
68E2BB43759B749DF32B63777CB28D33C041BB40EFB75656AD5AB567CF1EFA99
7C4A149EA5DCD3FDDABAFD9757A4DF32FE9571021C00BD5F8EEA3327F6013501
F111716107F709A07A695421EF7DEF7BFFE55FFE855215B81107D11C31F1D16B
CDA9F8EFD204514A023B1E887509BCCA7024FF9F55F901AFF6E519049ABE6CA4
62B99BEDC20579CDE906F778C34D6D418D539952D070AF5F7FED8D9B36B5FDAA
A44781700A807B7A0EC606E0BA5DCB978AD3521D8622BD0CE13550AA5AE5AF75
8C0518904B4B08C9D3685B888CFD947C482D6AA20611D183B20A56B4EA2F96CD
8FD7ECDB5BB056E498C26D30D25CE92895C6F5F6313F3DEC573F791EAA50CA17
1B9596611A364A680D327AC13C5DAA1C56831AC066C88543C3EFCFEF38669B7E
D1800C6E8C064CCA874657717B694BBA0A72A005C5C8F7CFBAEB630F54BFE46A
01DCE21FB534F2225402A90866052EEEE5E9DC8AA8C7B01437D055B71BA912EE
05B16D719B3A7E1BC5A4A1A6DDBC5DF88005CBA2FADF75E15768DB4CD4A2B9CE
6D91BCDB8ABEE24CB6265ADE4C4D8B202F21881741F3B6B56C687C26DC9ABAD0
725210DFD039AA3C3297F5AA2D6960D25F3AA5A5A421DC04929FB214D1D14C84
8E7D34A8742980208C230D0294C93787C5EDD9DA175B435E4E0B86F766B615CE
1F6AC765E586129ADFAE1A4049A5E7350DB513451F3AEB233FFFF633BBB66F0F
4B6DFD02D333F00ADEEB97269E85B9100AA055B50D8A0CB1BB31020FB19EE3A4
85DAD16405D0940D229144A4C9912CC537FAEAEE6CF0E576AE961D4AE97F75E3
B9975D730D7434D3F3073E35397B6807E63D78A475DF599FBB68C3354DA39506
9D5C23A3A3A3BB77EFA62491DF8DAF0CA85517FDCE748F8CEB7147C9BDA62E88
E5F17E547E493B90892550FA93DF9CF62A8AF8E9E96936DED97BCEF921F82F4A
B164439264761053C511BF0D770A237119F79BBC737D2FF4FBC8CBFDAE2CFB89
B324D11BC1F337BFF9CDCF3CF30CF79361B73EB7151391134922CD47D4F3F4E0
2494B91D04C7459336017DC9A5092CC7E9D1F016D450F3DDEF7EF71BDEF08607
1E7880EAAEA11FABA0BA071CD2638F3DF6A77FFAA754EB443D4F70C6500BE261
28E8F1076A7E89B7989898A07A3476075168975F13954DD0EBC015830793FEE3
84A8576A02AE13847E15052A9B4B2FBD94FC75D404825F04A709ED2701D93574
B038014F0E2B4B5AC7F83D294B2A73C50133F114CD0679A8186ABC52F2523C9C
743F4EE3238F3CC2C1AA641F693CE6E28B2FBEEDB6DBE8ADA155F1894F7C62D3
A64DD0AFF648C69F706DE3C1B7DC720B474AA869D295575E79DD75D7B18E61CE
77760F8AC1588DD2DEC1C55CE5DA0B2FFEEC865B32170F699E52BE6BDE0CC01C
9DA89717C1F2C73E7E1C04B5B97FDA75DCD1AFFBC58F9E1182DB0125560D5978
0F8C8C66E3F85390B9F8F76CB468EFDE3D150EFDEF8F7DF24BDFBEBFD55CD0AE
30326DEBE4F69F4F0C0E5F7FDD755FFADC43A75DF331AB3EEC1A7AA0CC2CF707
6AA9B0EDD6C05F690635E9D2F69811EDF8AC061B5D434EBB1BEC5290F1D581D6
6DBB07ABD9DAB55E414A2F656A690F4CB7E458BE2DB5603DA4168CAEE5420694
4B40970ADD8D7588D2F0909DDA96294AE9BDF945C493E9DA90067AA3B098A9AB
ED5CD768EB5EECE5AE9F6ACCB6E1DEBA159831E4EDD46C4E83E67A09A438D7CC
36AB2D182BC0CDF5A263D51C05F2C1B027D220FCD280D36814D351CD8B602348
8D427C573DEB2B057B62DA98D3AE344ACF0C2F3CB9039A60350B366871B652E8
4886595A502B6A132176285D36A00596BB79D60C51350DB68BD34A13C2DB0DF0
DC7C3B27ABCD5A47817B43BD9AF28A4EAA964148EEE6DA4AD308332E5C66C1EE
D2D0439D72AA0A75A1D8D0903AC2519EFF7A98DD5B40A3663E53118EA1EA900E
465D9F313D2D3C2A1B3D57CF15157FDD68B71A661EF6DD725B946A2C9BF3E720
FCAC60CBC854AD4EB7230F0F8637560E785F631D14CC29E78A5D2D79BC187596
CC2E84D982566C5F5E093C115B4AD70CFB6B2E5A7E3895A834DDE8652B9FFCE4
B4BBB9D108AE40926C4991C86293626F04A63FF399CF48EC6BC6331F7EF8E153
4E3985C8705EE957E53441DAE19CD2434603E12FC2B9F83D0A29DC6CE45C3AFE
F8E3FFE88FFE68C3860D64C5A3D6215E9A9999191C2B85F556AC58313B3BCBDC
3849A633CA4CE5C49BB1B13144E8246AF1F9F1D65BB66CB9E69A6B504A26F120
F4F362E30481DAD4D4142A3C2A11E0C827DD8886C12E20726731390429129292
C9C498FD22C6D4F59344F311471CF1ECB3CFB2BF883D6078305964246799FD8D
4134E9421A1E553EE387893929DCB266CD1A9C3D3223EEBDF7DE8F7DEC63C937
C559589FFAD4A7F0AFF86AF09AF8F3C68D1B934D950F163126D04D821EBF4135
80CA804B1369C1D1FC24BD498CFA93B199576A82640212B3B671A8990646DDD9
68BAA82D33FE9502DDAC74F7C33EFC2BE9127A6BFC4E29BACE3C5494C346FE40
22B9A2AC569C64D2195CF988776793940AE6B940816F4D9179B60269C5E231A4
4E021F86B5232BE6737241F23F98863708F631554D65CB47D6BEFED47033B3E8
B5A5EBB3B1D9826760C5C4A193CF0DFDC70FFE23EA40C91A6C541BC28F2C478A
298FAD2DCEA4450316E13A6F67E12BEDB1DDDA9CEEA1A406134AF2607747A5FB
0F90DBAD2983915CD554C319EFC28EA2DEAD7B22BB3D0BC199002B44EF4CFD3A
C3FBBCA9EC6D869F17C467F9BD6A63035A1D90BD7F289CF36DABAE77D4945168
E42B23A78F282D6DE9AE8E7B79006345E5FCA550ED8C5F39B6379E1BDB98A982
6A9472E77EF2A377DE787D4E2DD564BF03ADBC57F0535D67584EBDD7ECACA9A1
E42A99B96AD02C6D18A8E6AA6845AC3AEDE89DF73E1BC703F9B7FA8DDF6BAE0E
5695FF66B6515521E51B5D6FB0589A6D36F3192B68A43BD9B9910B0A43BB079E
FDFA761154D0D5D4F956D76A8849C0C5B21D86BF3A8032B761B8685E0CC5F9AE
D56A4377E28295B3F99D222CBF17770B942E19A8A6961413464E5E3DF7E56D78
5F282E0DAF1D58DA1E875FAD43188D4606AAA639C501532B9C39E68FEDE91441
DE05F80AE06145AD86C19D0A94A3A96B4B1590FFEAE273BFB0E526CDB525D046
561EF2D2EC0B45AF54876A9C07EBD462E7A89EE554051880D215E279D7AFBFE8
919DFF52FECA8BF5BAA5BEAE1EFC7EA8B44A07BC6F3DB70786C5CBCD40BA7DB9
5D8AF2D5950DF3F7F1D7E1EA3F2C46970F0ED4C2EE67635BB50C98758311C3A8
53AE7C32F39BCA30596EE0623EF4D043B76EDDCAAC3C49227D92DB9C8CF3B2ED
C4F4908443972F5F8EBF12AD02A52DD2FDB8228CCC023629701BE09D888487F3
2369B7C77DDA1976F7739510DE0BBF3CEEB8E37EF0831FB0EF82535C92092A9C
2D839294327CF03AF7DD771FCA38561EEC60895FDE9B9E85233D2949DB65CB96
A1487DE9A597D0BCA23A613C38D9F486FA6BD26CB0CEE0A809CB353253701210
D4531E148EF01DEF78C777BFFB5DD2B2CCF221F71BD7B028A47749A2871E93E9
4889068A5E0ADEFD739FFBDCDAB56BF16A846D93D4CD54614B856F045AD9F996
64EF20D38D9C697070EF1067A4D18BE6C040D2B984A0E19FFEE99F9E78E209B2
6398BE906474B287F07EDE21B60293A1A064E919139C104909190AF8D454BF8D
CBEC80F507FC2B1794E0BC71688A0FE32437BA083E1AB14571A401F5011E8FAB
6BDDBA75F7DC730F9306B2E8C71B31091DC21D5412FC144C97C27E4B9170FCBA
E35E7866CF842A5503B7BBB104F26EEB2AE864F2D286463C0F837783D385F695
C24D7BFFCA5B2E3EE3E2F3EFB8FAF69B6F6FCEB7A508F19B0C2291525410C379
B94C6EC0F9ECCEBC0C4BEB7BD9A89B109416DCDBEA63AD6CE31AC944510AFEC0
D8C8F23F9EFCF1433F334B4BDDA60C8A3E941DA9CD07C1CAD9E2C9A51A2C83AF
FC4AB44CBE16D18A0F9BA2E5F5D462DED42FAAB5F00D5C0FF9CEB85CF0EDBAEB
EACDA10B87CBB945B80786F640F966199CE8D0F5F2D66C24DF726461C70BF657
F34EB986964D4E3396A428547C4586A166B6AA85684BD4F2A05CB63255DDD9FE
3C9AC9329CA90D66BDCA3DB13C0BA695CAB423571B6BFA0BE3EBAC85C80EFEDA
2EC6A5164A41DB960CDD0F83B194E5F98A7D8ED655CAF0200C35A011281EDEE0
461F6CC85C3D2683D9BDAC66781DEFF3BEE16BAD91FCF5E75D7CEB5597E27D53
EB0FEF6E7B51FB066E7C90CF4B0F584EF9DE28B5A0CA9A5E6AA93539DF892A78
DFCE50A7BEC9053FA29232CA084A5FA974A530BE1E46DDD1C646B7BBA766DE0F
F96B972D983370B3091D278B4739D0D465D023F060CCCBDDFAF05F9F77EA87AB
AB0C38B5087BE787FE9F5C9E8F5297162DA55ED91C0F427EA9DE180A0D471D35
7251744A2D5C1E1EF0BE8AB2DCBDAAE96955695329D7C83B37EF1CBA429F19F4
A7EE8EE79F07E766803A14AFC7A7D724C377AC51A5516639CC0A007F40D1BF6D
DB36320E70319F74D2498F3EFA28398D930CFC64FBE2F2E610A3C4A219770EEE
73EA4F403D4FD81992E4ABD9EF93CD679ACD36EEBF6C26EBE33BF4FC308AADB4
8592018D800B2FBAF0D0D5876EDDB675D9B2F199995E7B325970F5E13B354D49
575143F4AAC36408244588B2482457E1A696D1021265F68A1BA0A0440DDA4301
FBD0A5DADBF678A2F8531CEF8B75C852CF8D1E1F3860F2CACC16B9DF4A93C827
F05F9411AF64FB6181C83285B2EC494C43A283234E3DD92808DBA9E70F5E9033
5E5EABFF8E3291288B9F53C4F0D608CF2FBAE822126A2831DFF39EF73CF3CC33
14C62075C2C58084852936CB6DDD92D9532CFE5095A2D4838485442F9D72A592
8C781C39C765840616DA25289A893D826C522668A2B3E84F5CA94E63C0DB3DF4
D043347BC93924F58F17A17A14323B78F9BEEB5DEF3AFCF0C3D1C4A1459C4C24
4D6A02B6D828F4C2D50FF48E4821714643B2DE10DF17FE4CC90294AC45AF9E19
96F007BC208E9F6AA7090651E22F17B193DA2055448B41641C8EA6AC3931E1AD
1B04E3D0AA2BD42575B07865BCAB5D956FCF4A5E10DE674B0B8179B51265B292
693B350F577BC6CC52002994FCAED7D53683370DD90733AD85106EEC16BC626A
03CCC58DE2B9137A0A16EE9A160DEB25B3E40CF88737CB5B5B4AA48E0EAEAA55
E66DDD1F8ABAEAC5D9A566CBFB1620485FE51FBBFB9C9D190B82FF1BD80B9E85
CAE6AC381A97DD3BA24CABD80EEA469CF286DDE5A78FCCC973BE350E9D69DC6E
CA4A283EFD86A53B5FC89E66378F80811B47CEFFD49937DD799BADC6D070870D
A3E5BADD5E846EC233664B2E7CDA5423BF748BBAE445E11D3254DCF4758531C8
6D87194845A75F7CCA176FFD1ADC04BA37E87DBE72CFD9B79F73D9C5A5523A30
4DD7F38C4A1D415CE56EB10F505D59331D0BC65AAAE45FBB370897E5D63715DD
AE5D164364C29D9D6C4B0D8DD245D7AFBD6FEDD5F3C500CE16A55AC3B79B653B
F06FF6D00A495F5D1884D41E585046A2D016957CA289CD62EFDF48E423412F09
36F06DF5CA20F4A6A23B768946099B24797130BAA3BCE2B2E26EBD06EBD5F1C1
C25CB312EB90B572FE4253D6245B2476C553416697DE868BCDA17CC6BEA86215
4717D7CEE315EF931E5C7FD985762E7432752F0045851055FEDC81EF8BAA6178
6369D1A8021E138C58F72F743E902A1A0335DB80E1563A5B75DB41AEB3A2F637
BB61374CC4B09848E9A6AEC3492F0EFB7588DD8B4413D12CA27442E08B6BF88D
6F7CE3534F3DC5FB482211C3A49B37DD74D3FAF5EB117CE1265FB972258A18BA
C1C14B40A53CC2B7DEE58403DA0F56AC58B17DC776B17414DC639A6D0B303532
5A5858A81F7EF894AA23A894CD949ED235498E02DF0D433C20AA3685D33C0E7D
E1D711725F9163DCD24AC7165011F50B8E2EE8D5CFEC13E9A83D22723EC8FDE1
FD86A0F97EEE6CFA70E89BF63069416EDEC4228C6413B312B12EE1803027DD73
B63B9D4EF8915CDEAF49137012147BA25875E1CB4235802F98989F292C416791
FC253382753CA90D3C0B251AB784238F3FFE70FEF9E7A37649F73E543F816F9F
421A491639E8773B6052D2D1D1515C1E548FCDD65BD20EDB2F98CCD6C031C71C
F3F4D34F27151E657C5E70C10577DC71071D4957A00170108B9E8E8B510EA809
924CB1F844E4674B727BC0CB990DF129289D8CE699064303C369C43DC38000FA
B590641BE12DF018EAB2475029D90C030F43858DFBF0AACB2EEEC4C1C85829D8
DD88CF0DABCB012E87655169E6C2AA7AE86474767318E4F90BAAAA0ECADD2537
0A206C16F38566AD895BA1878822DAA6139F81D922C016595A4AC5577452A111
DD04715A4F9F9F0E65A7755F431CD814E4A675BD9EF29400965BF9C5BA04521D
054DCA57BBC68275FB91EB6FFBCC5F97E3B9F6864EE441FEAB83EDDD6158A8A5
AE33C69E1DDB71DFAE62B1546B56337EA6ADB4212FEEBCA27AC85261FBD8A985
965A0FEEC03BACF2AE6B98C5A5ECA7333518014389C3970607D30B4B9A70E028
0D51F0DC82359323BBFFAC5BCFB5E04669304E55AEEB4CC1AA5D572DC2581B2F
A1A1A92390C9B2C6BA17FD50873BBAE9969A1F1B999B9F150D9F83E8B0546E7B
A71EDDA54ABF1CD2EE6D49A94E2C8DBBF16CEA3CE89A8ABE318C0C08AE12120F
36DB560DAD9BBC97AF0DB896E7B4E573B20D44E817574BB151BDC91FA81683FB
D38D60B79C12F3A3DA391F52E675F56ECA854BB47428683F4C19ED6FB3063E5C
D14937967977CF84085837802E8F7937CC59A7CA9D35F1E4DAC1BD90B34AB938
7CA1DDEE4AC66018FB92D98855C328BB268AA173F3B54945BFC6BDE6E3EBAE38
E4E6C2BC55BFD513CF1B0A7F9111E43D30E3CB1644A9C181EE0BE3B0FA82B139
98EB5C86A26A15DCB00BDE31003F293F7CCEF5D73F714BFBF702BCCCDEAFB7D5
06AC39EC8DCF6E7FCED462825F5CC64FB288A009855A698FE397B4F20987F14A
26761C2A9642F9B04F2092D785301DED6DA6FD82BE2FE520E255E91D20F6BFE7
762501E809C0A2A15D989BAF4F4D0D0D0E0EFCEC672F1C7BDC145E677834AD28
92AAA1548B82C041D18FFB5156A496DD0B9F86BD165AE43097441D1D043D5A21
DFEFD84EA7ED365A4EC7F63C17BA54D2224B8ABC8F173E08038843095E0D7A27
7D6AF4610181F382E206712E8A6CF20E91578A4506D752E184E237242293A5AD
636363A847CF3CF34C8A1610CF337B097EB7983EF4E139A7E570C7B7A4CE209F
0FAB7702B32886F04FD478127FBDF0C20B6FBBED361CEDF5D75F7FD9659771CF
4B92FB94C499CC85851EF4C62B50EB12BC05598ADCFD2DA941A53E9D355709E0
BFCB962DC32B73E49FF3C19271721E3677D0A43211A20C827EA2115521109CA1
2BBC8A26208D8E53446E256216A1BFE23AC75BE02B469483AA9DB315E89AF436
3FF1894FDC7DF7DD3403AB56ADA2AE3838BC5DBB76E123E3B3B0F3F08C33CE78
F0C10709FE533E2BC5F9F160A230117EDCB6D6C69569B6724EB639521FFCF421
959BF708B69F5BE6A00DFAB5908AC1BC6B34682BF6A5E51118D905D35C2E3E39
39897342B9B68604C3B7FCEFE96B7FBCAAEB343FED55A600AE85527B79F59669
C491EE2D20074A94023DC87A50B7BA9347178C9F065BF36DC89660E622D0A594
F1B958AB65AB5016956B63A07F1846E756EFF9D6B6CCB9137E63D6BD1B46E591
F9CE0218B0DC1C9FAEEE45BC3AE42F2BCB36E04997F510D77DA543F716B6FA3B
44706250D33EE707BB413D2F0F7251BAA9BC0C8A3BAC199055E804A311B48E05
FB0313F1ADB3CBBC62F96CCFCD44CBAFEB2EE0FEBC60CCCD4A831BF7A2765EB8
6428DF8E1BF7CE15A2523DAA4A3118999463BB855009AE5AD9565E1AB80F86E7
D22F801D6BE3A02D89065E9F057DAD293C4557D9B203F266C8799986960BE5BD
10CAA34134BF1A529F3CA47BF3F62CEAF7CB8A8D947FD4CDD15EA95DFFF8409C
8EC6EFA805A1BAB8AE68959BD6A3434D7BC98F516AC90AA410A5775EB7041F56
D3376A7657832B9A038A55BDB6A3AD84F07FE5C3231B02CB23D83B5D368A53EA
0DD51218D3438B8262A8E51D1A67B78EB7E0D402DC53CF3665FB5C2D5C3538BC
6E36CA43EBF431982C65D63E87EBAC79F5A4B567E120F74DA9574516B8AD4BB5
52FAADE186274FF9D447FFE14BDF9A59D584ED215C5FC027886F1170D710D904
BD46103D4705FB9339D99AA91CC87B4C8973E418C0C58FD2637E7E1ECFC22D40
9DB270AF5D7EF9E512B3DCE036A0BC1772DF1F77DC71BFF8C52F180D1D2C4DD5
D02DC71530BF98CF55962A564AED76512AA5342DACD5BCB7BDEDE8E38F7FDB13
3FF9F1D4D4248AD397B6BE90CBA7745DD57414FE28F53DD407A8157ABAA1B793
A37DA6BD2AED0B30668C8CF0FB07421354EB9DC5C56665A9D56EB99586D00491
7022A1752A6280618C9A00CF3F289930BCBCC2803ED4DA0CFAA18EE1E16162AD
E1B6E6C4D049EDD49321040E5D1048C4D9E3A02EC3614AB1E59AE4DF4D137036
0EFD8AF7A2623D8A61502625515050B440EA7718A6E41CFC06051385F4F1601A
3FAE06E2C1DEF712FBAD5A70CEF14F78351464781714A6F8203445548540E964
D48B86F3F4098F70662AC97D1C158AD1175F7C9139A992F41B780A5E874788C0
9C22D8E449A38329C60589182F8FF695B824393F64C5AE5EBD9A1A3F7083E564
D7FB3FFFF33F7FFCF1C751CE123920BE599C525A03DC3F952264ACB4103711A5
39F9CDA8AD0DFE40157F74775242A8025F78E105FADE84D2E64DF79E73DB8794
1A840580B3D49C64784ABC6CCF8A6DFFFABC3AAF0583019C9E012D8047BAB00B
8A5609AFDFEA34938174BC662CD9CE87201E07B56004B50C3CB8B472A1B853AA
99E70E38A5A591EC70796971C5D2E8F417E611CFAED197AF3CE5CDFFFC95BF15
043BEB2661760F1C2EC1928E4F6F488EBE1172D23195C15F1BEF939B8779A333
7AEBBEA26FD4AF3E6BFDD5B75C299B60DA9693EE4421AC768FDA653D97EA807B
93A646E3E1E588ACAD6E760CBADB8CB34134EFD5B2B93D9DD4AFA2CEAEC1F6AC
978770686C726779BB1AC46ECE4F7F46755A4129CA559637D112B282BC0ACB1A
DA73D606CD431923C1723B33FD95B6B947F5211DA2A0EEB43C07A46C21132BB5
75AEE5FA999BE208BC86E0D31871A179284CCD5DFC7C50E891B9EE06EB6BE9B8
ECD9662039D6B2D2483DA8E6A4D46C3CA79C8D5A4CB1BAE9A5E5AD4BEAE77EE3
CEEFEC6D467A6987F3690870E18CC28A4A6EF7ADCD01B7B894AA094089FF6BCA
447B745E9A0DAF5045AFE9BC88488F7E2DD79D8186D134645D5BEBB57388A5AD
D1AAF4C9D7FFC5C633FE5A95860CAFE983AAA4A5C876F179AD0B34395486A4C1
1DC6CC079EF9E31F3EFA4B272A140FD9397D922BB46F0E56B60A3B6FAE1FF0BE
A5F3B3E521D72C05515BF2AE0E47DC31A9A484CE4CB927FADD9B87F47279F416
CDD6143B74EC92B52A3742BD1111AEE13EE5FCCC64592BA5AD936B9449162051
8A4CDB9992FB256E2C8390F6C4134FFCD297BE4431CF534F3DF5EFFFFEEF69CF
BF4A9A2ADA04A6AEF5283B7C040D87AF59B67C6262EFDCCCF289611455131363
8A1A9BA65EAB57B76E7DB1D56AE02DAD4CCAB2F02444009E84A6608CF64BA0C8
81040AE15E14659A12A36E400D81B2162494F2B1ED7AB586532E77CA15BBD50A
5B3620D242596D7763C7055CB5147B39982648161EC3CBBD43D44A254914CA40
9BA4DEDAB56B376FDE4CC49994054B750FA48AD92C206F1D11F53CF2C823EF7F
FFFB39EAFB3B5481EF57A39B0C6C301060C2674EC3C57BB1BABAE79E7B2EBDF4
52148B78CAE9A79F8EE895C6F6852F7CE1ECB3CFA60544CD99393D14C77FDA69
A7E11AA08BA0B05BB76EDD030F3C408E720A1A51F881E57E9CE81FC9E3A43FA1
40DCB97327F43382983A90D2C0923C1F083BBEF7BDEF412FD515010BF39973A9
3007DB93096C07D404D4F01207B97EFDFA2D5BB6A051C2AF9E59B5A167D01011
05095C767FE13C105F21E92D2EE620354901733A85224074596A9AC4DDBFD99D
25ACB7B061B43391D11E11ACA187C4E676C3F1EA63C24FAD29E9942093E83653
22C53E8BE210265BDA92EBBB56C60A22DF0B5CA1D11B22E95985028A12D9A983
87FF9524D052508DD222053E90C3C1CEB29A5A09F3CE797FB5EEF37FBD39BD94
B7D5C65870C89C685B53CE2AC5613B2C9BCDA60CFFE7FDA77DFF7B3F6E2CEE76
0DAFE84F4641E7F72F7DC73FDFF458A0895E63F941CB6976654F6F0D0857A7B2
940A215D1A564B8BF2B432E70E01CC9754E8E620D34533030700BEAB1AB1E0DC
0914148A206FBCF6EA4BAFBD7678F8F5B5F9795017FC0C22E1928A76BE5E8D70
7BBA962675BC224C5407674B955427D38DDB452F27E74797BC97F0D8A80BB6AC
F5DCE85D6B2C033BC73AB91908BA251BAA45D06B439E561EF10F69C13CA43C1C
088A0148D74D5BF8C6D4AC6AB78AE3C591AAFDAC83F7D2962BAD8E9CAEE2C636
BDD2D0204C3BD595F5F19D85BD5ACBF455C77033AED54EF9A26F654781823B54
8716649CE1B6E541314CCDB8DD8CA79420B3C7681402DCE8D0D4406E892C2B1D
BA2D43D00B9AB1ECB545678E43E2B6E3C9B3614E3C6F564A75B5D92086743CE8
799560B93E346D96C79BCA9C1EEADE01EF3B02CEC2806E2CE5DD426475966C7C
9E508EA1308C4643DADD1B54844D16E62C69D4F66A9AEA5D7CE9B90F3DF4D09E
3D7B98D19DF3D793509252A22141D8C3E98EBC2370D10A772BF4CD0AC6AD94F8
41CC307451CEBB3F902A901459324C458A03CF8F4647D26F3FFE2D280A72E914
6E832074C6C7C7AAB5C5A5A572AD2EE2B129CB2CE4B2F942064F51E4100FF09C
4EB72BB8360433A0DC2BF78B3D49F61535C24DE7B71AB8CB43089D20EE74C246
3B42E4DD75200E5146A05C531B8DB85AB51B2DC7EF0DF060DE212623DACF4144
9A80BAB652560977D1A12656384794C28F8A8D8C29CE6D4FA691E05904A2A19F
E84961497673BF569B20490D4BD9389CA2436F14CD178AF7F287F9B1F15FE8F1
E2D1F794E648B28F9286F15FCA71249F46D2D621F72215E8E10C90CB9E5B0051
6E127D3867793F7B8B2BE0B84F32B145F138C9BBC56601DE6E6A6A6AEBD6AD34
EDA40CF66B9BCC3501EF7AD7BB9E7CF24992C5E4A027B7129AB777DC7147B2C9
01472628D98E729159C5D264128B09C11D7AB364E7D143B132E6683CB743805E
9BD2E9E9E964EDC57E3FEFF30E05919549B73B6D59EF1128B9812E9AC90B2A7C
D05570A3C181B1DAFC02DED8893D4829E0F4F2B506738D4A9356731C82A1998A
6F058037E88A7663A6042E9AC3AA6458B1D39054887BCE529153A04ABEDFE3A2
C1B951A408445605503B25DAC18AB880D1230B42450791A6C7888025A3982FD7
AA387643B63A911D82ABA6A520F2B2CEB00BDD50F642C98594C820D23345AFEB
83EBE2E2082237C29B88B941D594F1EBB6241DB8834A7232930B86B117A5FF72
5B40E8971CD27B67C24166B8E1C445A6B1E12466AA48253B92B2872917996113
2100B2773993F2D57BD51DEC4337E27A29FC97730720C192893F735F2C26FF67
3084C207BF7CDBDBDEF6E31FFF183729F72F6127304780C99B8AFFE2B0F10A08
B666676789CC86163FD7D572DF24DA8907635B6152997D09ECD00FB511E7A59C
686B0CFD9AAF035EA85428566B557CB363A35944FAC71FFFA65C2E2DC9B11A8B
60C0C04069B1BC17C7B6B0B8B75C5EC0976E65F44231572CE6ACB4AEE9B81ADD
6EB76D77DBB1DFDDD7B7200EA3B82B1483E2CB4AA0F9226F288C45B32707979F
23B98111FAAA14671529138456BD0E73F3CDF9856AADD97011A245AF4D139067
1C9FFD431FFA10353FE1928264AE2E4EE5B9E79E8B9601CE0321717E4F743CC9
23EAD3490C0D2483B8D0E3B56A82A44D40AF83797B700C131313279F7C32A27E
7A65C46D47D14BDA4254A680DA822C187A4C1C24B1D7E208A9933B75B720EA7F
928C9C3DC53424D4F58CE423BBB0C9F0E4A63A2C37D9EA4C5AA9245E79A3E21D
F1AC646A33F4E30494E5C9093F244CF141706FE031D56A950E20B18E3F53649B
F413A58DD206A02036AF7EFC13BD1ADC3FCC629D9C5B9A1FE6F3E250C42B3501
8A249C67D4EEC71E7B2CDA31D4E3418403DA6DBA0E7BA28E39E6985FFDEA5778
222A5A6278A68F99323CC72FA86A1BF59065763A4ECE4CA1088CF195B9EED0E0
40B922EC89E191A1C585B295DE17F657445F77912E818A41F41A8BF62548446A
6FE6C34451774FEE4BF1BE852DB0646F152BAA8C1A05016DE8DB61E4C99A1AAB
3AEE2CF010588BAC8D5C3EDDACA3AC19A8D71ABA61786EB7777971BA65C9DD4E
94B114B4451A1DE79AF5D75CB5F19A6236E7D85D3FF40786F145547434C834AD
72905E7BFB698264C50951ED72FF3B5C9CF81EF91550EF71FC86DBACE294AE5C
B912A103F452213EF2918F7CF5AB5FC597CB0B8CD600AD46CA42C64B7DF8C31F
7EF8E187D97AE3362FB81A3FFAD18F7EFBDBDF46FBF577F0E2D275684993B94C
1C651420C4A1FEE11FFEE13FFEE33FE20A44DC46B726F14D9A0C4F39F2C8237F
F9CB5F42C29FC999FEB81FF12238030452D9E02699333939F99EF7BCE791471E
A11071B2DBC761871DF6D24B2FB1A6B9EEBAEBAEBEFAEA836902128F12CB4402
7DF46E28BF90781D284504B418757F14A2EA2ED89DCEFBDFFFFE6FFEEDA3A9B4
11475DDCF2664A191B1D9A9A9A2CE6B33854C340D911F69C506233E3E0E6E7E7
70FF88E621393D9FB38AA56CCAC42977C2A00BB1831B537880047E09A4D88F21
90440E75281290D0EC8C7B8D61D1F45010CA88D6467E10EBCA68E89B1058CDA6
B777BEB2506D561B41A5D27103143A91485495445E130E58A6626359E2D82F43
1242F7C919E19F393794DB0C247D2F72BFBD7BDC6B468FC7AC5FBFFEB39FFD2C
E5E0B29780B3777E67B658FE30E527478C93449BBCD3D8C78DF745D08A460CA7
7512D0C05F718414A4A526424C284D0A0F5FFA8D37DE48E52314BC25A14CAE30
C6E6DCBB913394694ED888619CC5A11446284CA6047D3A742A8746D94A5B022F
8E13889B1F61FE55575DC5F510F4C12BAF5AB5EAD9679FFDF297BFFCF18F7F9C
8EC771E29CE0136DDAB4E9BBDFFDEEBFFEEBBF9239C28572F827BC232129F253
E1D48D8D8DE1FEA701705A30A9165E2DFB69020E0EE17E46D545B3412280AC28
228BC5AB9D78E2898F3DF698DDB50D5DDC0EA530D12B919C32C3206DA59A6E47
4EC99D4EA499BAEFC49A9E0E9CD6CB9601F49238422F36404E59E0C45127947B
2EC900A2180573DCF57C2F86E8BFEA4845D3FB58D1A5C013A335F55ECB907E76
750E522E442E88165D6A2FA71DAF1CA6454D9366288EDD2BB92FE53F75DAA7BE
F5F56FEDD9B1BB5B0AC4812D0F0235972EBA6820FA8E81562654A08B12411ECC
0FD41B35438E03B185C13F78D7CF036A025A2184D9C938A32C5E32CA93996304
59D8D4C6C3504CA148A5065904F393D7A74D447627FECB448A90606887845385
4C90DFADD34B920481B6245DF6E8A38F9E9B9BA356BEE469A4F83F85974E38E1
04541238542204E59C34B2D4E9B288501F7DF4515CF3F825D572921F82B61B27
8932291CB57DA46E5778299C3A5C8DDDDEE7D5E58CC4A97E0CF70852F199FB12
C34DC543581EEF6BB5B37C627C66760F0A7DB45A56AF9E5CB9623293B51488A3
58A8A6E1A10190FCDEDED8D7E5B85EAF5125A7ACF9E99499C9E2D3C6A2D944D8
8D4347788444832351392034414C9A005F6A1C38A807C40A9364D1E24152F428
56C478A37CE419106511AA541AF566276CB5E3A5BA5B6F8A24F16EB7874C45D8
408EFA8088240265A7E07A22466B16D0FB495EEED8434C79FC3D5B0C49BE3CE8
27FBD34264B1CBE55DAF6254D17D93F55F88779897892B186891918626904E6E
FDA40E2040CA9526B41FD808A5F78B8F73DC71C7FDF4A73FA5A49AB3CE3AEBCE
3BEFA4C7A13193FB9B7449322D92243B2ABC8D1B3772DF73AAAB90135D859356
17F348F31A23031C7A1950CCFDC0DE331A2D9511D0CEBFECB2CBAEB9E61A12E8
647D93BD4F99D1DC8388763B9747403F78E3F53E90E85094A4D4C6A778FDEB5F
4F74B390005CA4CF0EE61D62EE45BA1141FE33CE38E3BEFBEEA3EEADB4157163
AF59B3E6D7BFFEB5914111EFE38A96F7F5A8022B6521FAFBF9B3CFDEB6E5D68B
2F5F2B4A8C7069A8067485AFE6A8C304E9088E106D505475337333821D5A34F2
053D9655919487239143E129F2719F9872CA0D5D5AE162E67B03C77D18AA8168
61162B866AF8812FFA62F5DA0F18100429A14E65DFD33A8112425B814003C3D1
70C378AAA76754D1BCC5062592D392652B2D290043F4935406ACA1C5CE5C71A8
E4C4CE125A0C2253CF4CEB19BB563533BAE3347A9D677EB32660CC1EF78946D8
9D4DB629A71210AF14AD1FAACCA7142F32EC280392562CEFA6FD94010545C968
C38B536A001E73FBEDB7DF70C30D547BC88D6CC9B0784D9A8036295E99FD8A84
2F49BDA1F064B3958D1E32A6718590CB8B613EB1D313AAE08A5AD294719F346C
6A6AEABDEF7DEF030F3C4056141FC089794C7E43CCF68875F01BAA37FA0DEF85
03CA9CCF473B13C74A39E694478F400031A2C0178EE88E1747D4307674D5AA81
6513E3F87861E8A38D8ADB3397B5F09D497280AF1001043949BA5D9B72F32545
241AE93AA8B2E88E1D05DD30125E7F34FBC4B044A119AE2F5153805B070D02C7
9605478E7836507531A18AACC5323EBC1679A61467A250B1DDC08F14C7336A8D
70AEDC5D5AAA55CA555C1BBDD44B8504145E90FD397891F7BDEF7DB84B89221F
5E6110903820DA4E3C6BD7AE5D88AF714EA8EE1A2784A037F42B9592CEB464E9
2C49529AD883BD095A499C094AFCA3C432CDAE76E859C1F8036507B33B9BBD19
741D4A6B21FA046E5BC1149E2CBFB8C928BEDCB7BEF5AD8F3FFE3855514889F6
417C5F1A186119B2D3F1570AC972C7661294B42229E83A323282B7A06F487452
9361F61451CD79928B9B8A0068F9B2BB1FB1FF8E1D3B983F9C021E1475601D8C
4322BF19EE705C786429734A2B4D2F6179DA4B2CCA71D828AC5F7CF1454E2248
AAB48369027649E13C1372A2143D4A79A2D809299E7D6D30025126A64A9A28A1
5175DBB1BB819DCEA4E2CC60776151C717676A76E021A2D6636DD21AD966EF12
1E7F3CA3E74E0A21D41084793E6E077C3F6A0F57CA86BCD46908BFBF0A6A43C3
63C45F750883088D5F343E4CC5ACF955A91775947B88C8344C341F6CA7139944
73AF097B20F00D846FA6E929E94243192C968E7DCBEBBEFBA3EFB4ECB699D29C
AEAF6BBAA4FAE974A6B6D42A16B3B5460B65FDFADB2ED978E9CDAFCFAD7E7E76
37E8168E2DA39ADDA02D658C40F5A5C6AB61EAF8150CB5043A39FF823AB9E21A
38E79C7350DE91C4648E13FC1751369A838485E99AA8CE9F7EFA6922DE49A684
D05DC8DC44DBF1AB5FFD2AF42A5DC8FE230F27D187D076C685C45460BFFD879A
20D146E3F4682EEFC7072171CF6D4870CD9F76DA690F3DF410CA74047C44CAC0
C15B72879264A76D42710EDA86D4F28F8C7E0AB0E13CA0DD9F6CD04BCF4ECCF3
90488F0E0EE2B5E37C0A89D95D50C6EDDEBD9B70D9962D5BD6AD5B974C624323
170D0232825018BB9E3B353972F8E1871EBE66943829EDB6E870303458324DA1
1E7543EE956875E9C15C779FDDA7EA084F82183C45C25F510774E308A59B0751
A3F70E4361F24AA28DD0BEC0A3970E233F087B7C733A4206BD871A3490B4D0D7
54C8C9AA114452ACA4BD20DD6844D38BDEFCFCE2CCF4DE7ABDE5A3FD8C36462C
89E4D2681FA311C938D276BC22933A803E24657089E08627E394B934E88064C7
479238E45EB8F9E69B116BBCFDED6F47BB0FFAAC67AFD2B19D3603879538958B
C4312E62822ACCCB4FB602E9576E24871721033359DF40EB9BCD4646255CFCC5
999A78233C92562AEA0944D6846EA0E741C223F1A971C6F05762E0815E7D32DA
AD5FFAD297F02C3C059525775EC3717EE0031FF8FAD7BFCEE58A3824FC978381
5CF9453179A22721D6073A60BF8209E8DB5EF42FEA577C6A2A3E887BCC229C27
C7213B8A3432FBF77E8A8703D1DC139BA403DB6D1C093FA04D002F2FA180BE87
573483ED598438301C242206C1FA6757E550763B3E4976D3323A4E877CF7AF9F
3AB2B57DBE15B7464627B7CE6F4FF518FBED61D35E721450DE75FCBBBFFFC3EF
9B29B3E3B6F1543D1C15494308DF738850F466B30EF8BED256D46A6BA6EA8387
6AA0B770C5FF1923DB0E5A269A501EAA875095D510F56F2C5AD08006AA9335A3
5C2C7CBD2D198291D2F2D1D2D47F6E7FD25035D7B7538A91CEA65A5E4B4D29CD
764B72074483C5B46A648DFAE2AC887207C1C8F884B97B870DB29D56D138FC9B
2F7EF1CA7557CDD4CB2E68A1F46ABDE192659271BF6F20A56310113237EC230C
417D4D7085D026C285BD76EDDABBEEBA8B0C5F520F941140AB3A598CC9611BE2
7664E541989D83C308F2A87E3089AB7EFB0F479BA8F27C3F867642FA1C1E20DB
97D4CF79E79D77CF3DF7D089948E9C2CD6496E191CF9DCDC1CE76D272B87B8AF
1741104AC9835ED781071F7C10EF42F60A5942BFE1BDE075296088AB99189B71
D2497ED12D8F39E618C4CE6C9429928C40A154B08E3A7ACD6187AF42809849A5
29033D651A78A2D2637D30D2946CE793A5839A806C1649EA462218804F88CAC0
157DF7C08B71154755E68D4038A4A8BDCA67843A9041011B43202BA1A1ABA994
D14BDE37244DC74DA12959553145537025ED0656BD11ED5DF41716CABB77CDEE
9D5FAA376CA71B8591E8F72DC5FB686DA47E3705E8F3CA1D5013B06786D8C470
96715A6FBDF55694F2780A558D11D6267D4EEB92140387D99942E737DA04D0EF
5783174721428E45A23CA3341B627D4053E68B5FFC22673771209A340191DEB0
97295949CB3D734854D190F66BF9C2FE13DA66540CC166D0A73FFDE9471F7D94
12EAC93FC3B91014D6A385480604DAA488E5D9A5CEB10AE807A229559F3C45D0
6793C5515121DB15575C71E79D77D243E1EE25394E0FC20912C4560B0962383C
1D573C1168B3C500FD98300B71E8974CC7FDCA414E35613C48DBF2809A40EA11
085231361173B1D39638AF98368ACC2CC42128F4D386E53AAE8410DE52101F09
0EB51050FB2955D19DBC2647302888E4C406E86D580DA1783B50443FFB089428
96A120675A61BB57E20C392303D5D88811E7A766602E9D353B08D464C80EA535
C9A8CED6A4588EE5289D4E054E24DC4A96D6EEB651074825886B90EECA4528E0
7D174B155F1511827400B605CA80AE54157FD19F1A999C5E980E245FCE681947
7315D70D42390D9227BDF3A8774C3F351D4058D7A61BB97DEDD4FEEA931FFAF2
F57FA38A5458CB970EDA11888566D226A06CB137BFF9CD3FF9C94FB8A01DA70E
150042E92BAFBCF2FAEBAFA7F9C4978208E33BDFF90E2E27B2FFF07834D17071
222E618C92243F2718C44CC34440494B88FC51544F4A66E211471CF1C20B2F1C
AC84F6551E8AF206F12970319070E0F80705C36948445F06FD84CEA48B82303B
E5E931FEA62C068AFDE223E0F1F8A4B49289248DE00EE939CE19C5BB73B93B6D
37141A08CB7EA38693383C70E8A187A226C01F2EBAE82204B6E40BC6C77BEB5B
DFFA8D6F7C03ED6F4B58E56DC3903369FDB0C3574E4D8D4F4D2D5B5CD84D08CB
ED8A5887DE270D56B45E2210446435A388232D1DC7B68C3B43F214395464349C
9D38F2A2D8479BA037ADA245B670856A083EC48B44A3571247C608C252A64635
A2A666E01131BE3E358BF68187905F46319AAB37E3F29257ADD66767CB337B2B
73F34B95A58ED313FB2274DCEF248CFFE21EC6D5C6ABE795DE2184C0B862989E
09FAC96AEF7EF7BB9F79E61914A3C9DE29BCEC58E642BF9917C9885729D2E63E
33E465E691704E3DBEEF3BEEB8030531217792D7D0C7A749BE55F250533099A2
327C35B61C4942914143DB86D40C954AE14AC5BD77CB2DB7A0C5FDD39FFE147A
0DAF719DE1F1B81248EE134D13BB56712A38E6C66C1C4C7ECB850EE41D927A9D
21C889C424B8BCACA96481A0097E68AB90638A36098740180AD1FC53410065F1
124D3A9BFFF4579E5836235824D105B9E286ED98837987E8D7640A20C126F238
251F1C97108E07D17AECE1623650363B5157C0FE3CFCDE1F1C339F77661F7F09
76819E4B794AB7F09163DBA9C520AEFEDEAEC39EFADEAFA009868AFAD37403D7
0B5C2DADFAE70482754EEF51D578B9E0A5D0FECF8EE8C0D505338B40D2C52BBF
F3C4B717D3A59F3FF98B999DB3A2B58091E9B471BBC95A5A117D24B3F0963F7E
C34BF985DA776645AFB411809352B006E476909E8FCD5C2EDA0BD57FAEAA5D7D
D3DA1B6EB9E5B6B25D46AD635C1CB97E282AADD092F1E595F1AAED0F6D137CA8
2A0C9EF2BA8AD5C8A595D27CB4EB2BBB85C5125A92FF1A3401F41BBB921B90CB
F8938B965775327783E69FA100055A59139016A72D499CF99436BDDF5EE07EB4
94FF46A0FB605E94830AD07E120A851E497CE3AD3FFCE10FA3FC652846AB8222
16279F7CF2D7BEF635AE95610B3559AAC9255CC949632A01AEAA2181465E537C
4C4A79C76130B6233CC7A959071CFFBE1FE82E28E8C5560D7BA029066E388CC7
A152DABE7D7B141281170C0DA4C7278656AF5E6665B4E1910109A19E17361B0D
11543453BD89883559F121E86D7EAF9F9D0D84BC744D787E542592140F22378A
3A61D0C503A5B8236A13A45895635403862E0B94A9E1320E550521A76C1A8A6E
6829DD34345D55F458D1213674CDC20BBB4124A9D9281EE87475BBE3375BDD72
A5B9B088FA60697AB6B25445D340686ECAEE602C09BD38ED7E69B6BC0A695112
D00BFB1F9C65B4D42835906428F419DF2091268C3A83522199B6E8551432DF91
DDF76879A03266A2374A4B25ADC0194490A8E4626D44A790519CECA3905CFDEC
0FA1F581DF9376813E4F27A10976CD275D90D4EA19CFC5EF519552EC1AE7047F
20070B31A6E1AC22CEA2841C7AFB5CCF42061019131C7BA71A0852B43C1E2639
A75E4982B73E118621F84243256F03677D70AC0CFA6C51ECFFDC2FCB90C43A89
956407E6D7240892EF912D7A9E5EA1D14516664A81E5B5EC4BD9AE66077E781D
803D0A5F981FAF96F6228C2EA4337F59D3A6DCDA4D596838EA157AF0B90E08BC
1415027062C81F7A5865EBB62988B6A78F06FB4518F5E172096D02F82CE4A2A1
A656CEA58B61C3E95CDE850180EBA01067CD465ACE2E745A69DCCAE77FF1139B
CFD8E0C691F679DDD95B2CDDE05633F5743B656B5DB8128AC160FDBA2E8A0D39
1D3BB62B81944BE79A76D34C996ED8C5B737A9E5F76836C47ECE81E675596829
6FBF632A7C9BFFF3E3CABEB998DA04DD7815ACDF218D437C360A65D575424A7F
C4894DA26F4236EF7CE73B7FF6B39F91CAA482419A7C169774304B3AE2854C66
A691FDCDAC8EF43629579BDE02BB40B9CE9F16C37E3556072F958D19FCD1F2C3
8DF9918F7C04E1D1EFB630F6FB7065228D87C0070D9E47087D78419D0AE34483
2C0246AF92954E07B3C380500B550C90C1C14D0F4968701B6081D4A57DD49EFB
B8AE860645F206E70BC23E8F338A451416D6D4E4C4D1AF3B6C70301384DD6CCE
8C83489164427371D803C2A148AF6CBBC24B6BDBED7E48705FD2483665A27CD7
D4589170581DCF6FF97E47940B0B9881978A6425D235D930F17D2B9A2A4BBAA3
8908B386BA01AD044DD1155953408E75530E0D4D4D4792ECF9A1ACE56575D475
D0C056BBB65B6F762B351B35C1CE5D73D333E546ABDDEAEC139AF47699E58699
3EF793CB9C9D4DBD6B70F0E410A063A8E5B2DCEF4F002F2F04A349E74E61AFBE
F2A8F8801637A5C9930D419E74023E9B376F5EB76E1D2E82B56BD7DE78E38D49
4D20F7F9FD79E11E7FFCF14F3CF104BCBC0B1049435284F4C89CCC13F75B4212
FEA5E8021B3A9C9F03890C1C1A15C72418D4E052A66035A3366E8943334338E8
84134E78EAA9A770D173490EC9F43FF9933FF9D18F7EC417C477847B98DA0390
31814F77D55557DD70C30D888C88EFEFA4934EFADEF7BEC7AD0B489D400F7F1D
75D45168E67EF39BDFA4BBD0BB8813954DD02FAB8913157CD2CB4BBB7FFB0FBF
144E842770E7995E5ECF0615A96335C186A34E3BEAB9D73D071BA15803B738E1
74AA25AF2B5FA92DAABE7AADBC1CC6765E393B3E37B5F7A15DE958ED42A00602
44C90329A719497E346274DD7333686134B62C398A0188F4E36188164B971CD5
98FAB5FA4CCABD777499B730B34A824A5B76A1E48D7497799D99DA1BCF79E3CF
323F837B406B957CAB6AB68B8ED2800D91DE91E2BB25C58F1C1F6F2347418C78
CCD045024FC7691706F3F57A67504E3B7E27FA84658F36E15E3097E4912396ED
9EDB0B52305C9BD44199B966E758DD88BE30DC706AA5F11CBD2F5284ECA6A015
C829F3D0D7D3BC6EB9388BDD29C976DCD0033178594227A46B49AA32073B39B4
69E370B3BFF3CF3F7FD3A64DC71E7BEC2F7EF10B0AE41069FC7E5CB64909C06E
12CA4DC26F56AE5C4906F17FCB8753FB68992130A26C313623B86F15E5F1D31C
2639E149431C6C1DD2162673E49501702EE8212E098ED8E3064BF9BEDB2F08E2
36C228987A354A8A1A84E268DF0B0C551A192DAC3972E5A1AB57940672289245
665C1CF04662539DF63FDE861C2C048D05CF8465292A0A4A45D41BC8511CDA9E
D770DD7A10BA71D0C1BB2B6AAC09D7508C681BF501EA0C15D1BF2A1BBAF85517
192222315416659308330D49CE286A0AC44AD6E238AF4AC55A57350C136D9B7A
CD9E5FA8CECCD676ED9A9F9F2F7BBE52AFB763900BF952BD818B209255548C21
44FB22ABDC4091B63437C6213C7BEDB5D7A2004ABAB669B17225173922F0A909
F0E2C3324B07D3D8BD8A10A12E3704DB69871040C095DD53A83673EFD01ED84F
13108022CA1D5415385A8A2D277BFEECB7AF384C4D994854574C16036E00FC95
0AD0B8AC91C35F044F48AC53E530271AF1231C7EF8E15BB76EA589DDAFA98BA0
EC5FB3E685175EC0FB52EB66DCB4975F7EF9962D5B887A88AC6C2EDECEF53E68
2D9D7DF6D95FF8C217A05F654A3087F63F259E128CE2FA3B3C00D11C35F64BBE
0296F23493FBF5FAE0035EAB71C01CF19CFF4E5F7ABE95926B5A084D5930DEC0
A93A8C797069EFCF215821747047DC84AF20485FA206BED9BAB935EA1F3D7FE3
B3D916B40403849681A89E0A4183521374D0E6AFF615DC8B37A4DC516578BED9
36868C4DDDDA620D0F58E3BD7DE7CD4FAD3C696AFAC969BF5B82F60CCE2FDD57
3A6730D62AE9DBC06E8B165AE9A511C7B05337BA9D390F1EE8B593B44131E5B4
96B61BDD2814A49042DD5697D002CFBA7A550A60B33F06C38DB54B82E7274A6B
5EECA5A321DB282F6BE2E314AA796743C319D06149EC1A7C590F3FFC30B3F5B1
BD4B909670FD89279EF8F8E38F73650C2371CAC6211A349480636363F83D2D30
DE9EC95C4FDA62543180173FF9E4931F7BEC31629BC7D329B738C9D4C69963AF
F22AC94945EB933B30FE7768817D6920C469882A137FA5A6BF383C5CC338F87F
FFF77F9F9D9DA50003C50E69004947F4AB2438F162C6C15307432E9FA6E2470A
F2BDE10D6FF8F9CF7F4EC2E188238E78DFFBDE2731E10CCF69DF5853500DE886
8AB85E30C429CAC850696AE5D8F2C99181014B446D85170264E965343E241C49
1988D841EF4305231484149473AA6AF4720EE3D0F1BCBAE70B0791223B8A2A69
2A3EA7A46BB1A6C7C23BA448316E0505BF8F453E9BD22B9F8CE8695102EA2059
92AC879212046A0C3905F29132202C8E4876DCB0DD0ECA157BF79E85D99985E9
998AE7F97F71CA47BFFCD0C3027AA035107AA8374DC324794D9E07E8FB827991
D182A04546E901F80D3970B85915F7876117047B57508AE12266A8C87E0948C0
256E9F422E4BBA3517F4E2CF2B56AC4089C62E3BA66526CF3EE976728FB0033D
093A987284F22FE9BE6415257B34422FE2CDC5D890A817E3F17363E4FDF291C8
718413451D8428439CAC280256EC93653E3EF9151DDFD87147BB9DA8BCF1FB7B
EFBDF7ACB3CEA26921A14F494A6C4D33071F6D5794C5DC7D2CA99FD858664DC0
5CBE49B695DFED43B61D4E08355C63A7C7F278785A5A48C9D04DC3C047565656
EC29E8F9895F1EB97D45DBB9F3977A03BC153AFC590029091E0B0569FE15002F
6AF00D7F282E96ED861A2926C4ED5270E6891F7AE0B16FC58A9FBB2ADBDCD182
FB33604AE94E2B3A1FB4DCF2E8F3D39D9B852BFF8875EA79DFFAD2DA0F7F34E7
E682A21F3B4E3D8C074F5B595939034DFFC8DDC7E73B73CFEEDA61FC3257474B
FCDA0E8CA8B99F1D921B4E1DB777FC1FBEF6CF464A970209771B2D5DB1F85BAD
B23400AB6BF0B128BB5B931EC86A7977A9E91951685893AABAB7FA090F8A9073
869BB72F8201E940B0DB52360EB9DD49B293E6A67548E6020923E8E303260AE4
96A8747A32CE4F4524D4B6889DEF5C4F8EEB875602410A027371BF4F2F15D5D3
C6E41EDA07FC9031CD40908CFBD71A3F781549CD0B92F61417D0E006C79153AA
C87E056E880E899596E4C9AB143DEC3769F4A19DC221749A3462ABA6D7811B53
22E0964C7EEA7F0406C49917A9112862B3D6116B561E71E4EAD280254B017EA3
2B3DA8E5859C16C67B9B6C13BC2571FD533E1F85FB887954D754C1451A3A5188
6AA013C59EA1D9C26BA4E19F640D918F1EEBAA84BA4131225546E5816A40B42C
E8E1819E1AC01B055A188942332F42298C9039A72879D518C5E1C49222C9065A
871D3B9ADEB3B8677A7E37FEBB67E62F3FF2B13BEFBA177A95063184B97C96E8
BDB8108CEB38784D50E3143CE099679E21D38126911607FE4AD0980A46F0311F
78E0814B2EB984243BCB7A12F1241AD855C20C2A54224B1DD3385B947608D18E
52EC81C855D0BE46402DF589B28910822411395EC9CB448C6F84A1E81B5A7CB4
0AD93908BD7C5062A5A6885C92AA6F3F6F49B2CB0DAB3A7C467C0ADA57679E79
E6FDF7DF8F7385C378D39BDE44455B780CD5DF5375182FAFFD0262CC204DEA24
ECB735251F118D8DAD10DA42A841F1FA34C3D4BE98ABFC78CB9195C065D8AFD4
04E48ED80F0C413FA7F0B7FF10DAC5C11F7DF4D1CF3FFF3C4D94DCABF10D7443
AA37E234C07968D2467067EF84B5BA5A8E33FF38E0CCD84EB13974FE9B42352A
ED7C69DBEB5A47CD1CF1DCDDCF83AF1662FDA24B2F7FE0B14776BEF0EBA970C5
AE5C05CEEF643590EE82F4E2E83CB4E09ACEE8F8F0FCF98B3979A579A9BDB8B4
000F186FEC4E6D8FAADD5CD709C2926EBA66ADF3FFF1F626F09A55D59DE83AF3
F4CD77AE5B23F31C7D4693483486BCA7A6CDAF8DB322DA82D20E08C101111144
5110D0872809C6101134240E4934C4D6A76D6BDAB48808028550D4444D771EBE
E97C671EDEDA67DD6FD5A94B552524E9FE7EFC8A7BCF3DDF3E7BEFB3D7BCD67F
BDA70A1D141E45C0F9DA0A1C74E14BB6ADB6BCB71F3213086F0334393C139CA6
79FEEB2FF8D65F7FABBDB8E639C11797BBAE563DA3F7F6396BB23DF80CD8AEA5
065A4FEF4D38D35A3B3AB479497F254C36B61CB865BF624FDD75C90D6FBDFE42
181627318F8361091EBE2CD66FE825963162F19571C351427225AB0EBF825FA7
EA5CD64228EB816816AF201BBDE8A28BD02066305A2AA939E18413D03C2D3B21
8F8F12CFCA1323379475A37FFF07C524C1A5E0DE2245B3D9C1A624A9955CEC89
879F400128FD9450815FFDEA57A3C975ACF97396396957279F7CF2739FFBDC5F
FEF2974F3DF5141E7EE198519437BFF9CD5FFEF29789CAA84FA524FC2DD21AEE
74BE06E49915F3A0F8242469822F62F3A689B3CF3CED9453B7E96616851E7233
9DF4A95862490085264B4445294361F1C175B20AA9A0A62F2B421E884E34619E
FB908539C49ADA5735C530145324886668161016A961657842C4AF0AF2EFC2FD
9A89424A9C69142B718CC2400A93388865C86B8A54B72AD3A80D002A049A6DEA
F53851E6E63BB333CBFBF72F3CF2C863610C9DB69B664365B9E278AE78D9549C
C2BBB92E8A08858B9C8E0ED5BB13F7C1F7443A0EBE1ED2D3F94F78E87143C817
290FBB5D72C130173795B35A4F3DF5547C55243F48945291140C1561FACA8517
5EF8F77FFFF754F94C4A68B913E4D0B9A7AE6364ECC0C179D2FDF82B17E5B261
CEED71E019453AC479297C47E284586A99C6D076C1834BA7166FA693CD25D014
1F2E4756CAAE2D92B2B4ED575F7D35927439A2C574427A1F1527D3BE31E60759
39CC59884770FC705D32060CBD432C09CA59A7F08C9AF37FF143F206C79C9E9E
C65D95B843A79A40509B04BF2BC7FEE71B10A5E6FBFB8101CE27958197563F26
6F85E9EDEA41D4A6A101E60510983A7C398259192CD376BDF1A9ADFB560ED515
6DE04315FCF69D06EC91949B82711DE603A87F664367B65757DDEE491B616656
20C4290EDCDA850EF297C05437367A0B79235EB8BE0EAB5DEB63C22E119D06BA
00B742DD9EE85EBEA03B5674A30FB9A1A9A26B9421EBA11B99BA15A7D1E9A79F
BE77DF1ECF8A2796F2E006ADDB49E1D6B812830C9B7AF6416A262CBFBDDADCA0
AF7C7245F4EF759A63FDC8B5040A3AC13F5069056D4EB9771E717072EB13A809
BF353AEAA40CE1CFC8B0EEBBEF3E3485E9F4E231C6B38A37E4C31EAB3074E6E0
AFE40C219417AA8F61B141879011768F93D54DEF914D0AF88FF30B31A766872D
AE854096366FDE8C6B24D2C08B37DE78E37BDFFB5EDA2EE23CD4FF0E371667FE
BEF7BDEF9E7BEE610FE4BA0FA977749E39831CC99341302910422B65D42FD173
A538FA421808941E410C680A10A923FB2E1C64326CDC387EFAE9DBB66D991E9F
6826A91F85032422A56061B6D560AA6649403E5996017485A23A690E9A227659
913309521902499414A4AAD215B5C786649A4212189A881628A2578DC8A2C09F
350514811E24C9851229923462E4AD6A9266411A87910279156D8266734B81AB
A7E7124A1C5BB404EA04AB2BBD5F3FB1E7D0C1B9877EF9B466401C8169393431
F230A2A14A290DEC892B03E2F399A314054A11C1638A879BA361C4F8E8451278
27E7BD901ACB87920E3D315FCAF1C201D12221772105A219A110393E2A0E482D
743FBE17340E188B82CBA370047C0AD5F752D88D7470AA36A4202A314A8A4195
7BED52974D6AEA4B10A47CAA58C5A65802DA4654714247199F85DF2587159E5A
12FC175C70C14F7EF2133C6164EEE017711514422CA740E443E409CEE7610981
A7162786E6C5ADB7DE8A73266305F799AA4F3FFEF18F7FF8C31FA603C67C9C1D
41EC2F12CA6C9146220F7B671EAEA53C3262CCD2681D45FDDB2A8CE0C8320EFC
B7A6CA469C1BB6BDEA49E1DB8364430C9F5150D5893EE89B4DD03E0835989A6F
B963ABE9CA195E7C3E4CED9998BB776152DFB412AEC49907895C719ABED7BFE6
63975F77DBCD809C373DB97DCFC3C885ABABD057506018A2935F24D9578F04FD
20BF0D6A9A338803435AFA8BEB3F7FD5A73F3AEFC6C6A57AEF84015C95A9A996
5C1F3663A37D4DAC831D7DCC5590083F2D3A6A8559B75AADA0895CB1ABE4607C
C39B5FF7A52FFD0554C6C059925E0D4DF5B4EC2B07836E94369A7967511985F0
E2A206A26FC1E77D98AE588B512C4749C15B280B1E8EECD74D8793FC90E4A3E0
5416EE9B4D805794DA80DC9F22CCD42384B8DB39E79C83E79FDE38657F328829
BD022A0BA0AC628A6FE1CFC86A29528DFA164A293C6314B778E687B39CE957C6
4779B618A5C7FA507103C72D8899C0B08D2B79B13EF6B18FDD75D75DB881E598
139E6D9401D75E7B2DA7CC1DFF1C9200C01DA3D40CCE19A1681F0DC2994B8211
15879E4EBE52C00A2197540BBE8334288A1BEB75F3B4D34F3AF9A42DA3AD8665
AB61E46669A8EBAA900401EA591AE98C0CBC43060195D8901B9DCBAF840F2B97
8B3422819222C085F248C6532C678ADC115E2343D235D08C54D7B23549007D59
C1BFE6BA8A9220A7B2353997052C3BDA04A92AFA1BA4492800B5AAAA5C772AE3
42D196B530CE935495723B8A70C7E3A7F7CDEFDD7368FF81B983FB97D132105E
A038D34D83FC21E488E74AA8323BE06C48283C06A432B054A70FBF30D6EB0524
40216350E0E3CD8419CB99E994178C6F88FCE694C2842CFEE0C183EC1A62EF79
19F396BA23F073CBD9410C1547B28A3B8591A5990FE1B1B8BE17865E14BACE41
05FE81BD58449678CF0B5EF082EDDBB7A340E2CA1DE2DD5CB943795624F97069
A4A951089A20FECB7944EC286376CC6C144A5D1FB8C930816D30A235DE76C71D
77BCFBDDEFE65C2612031C23214710FDC0CED3676691F28B66F7E65105C3BF46
1270863845AD891084A713627712A0732AE44F9DF11178E22679DA6BCEBFDF4B
37FBF029D4D015334A41AE24EF71C05E4DEE884132EB3D3303B75F4FC095EAA9
E957ED4A3F5EBDD155B38A724DAF626E5A09D25A36EBC2A4A1CFE3BBDC146973
1F89131D2A9F025786F1B0D28568BC211D3443397C4EE63DB2ED7DF0F4E7E0B4
60EB8EEBF6B5D4D6E07AA499C8B8C9F7BAA2ADAE80C4D7A2244E1DC389C33881
2483CCAE9AB22667AB2DFFD603F559E533E7DEFAF6575D06F908345736F55003
33963F65C5F9A07953D0EEDB28D4908B045A2F570DCA4B218C04DC10F23F94C5
24D994A79D76DAAE5DBBA84E0ACFCCBAE0131D09D2DF39C6861F3464A97890EF
E73E4B44324C50D4199BE0E7E8C0139D5246C671382959994C867C5CFF432441
99768899D0ACCA763CC7E4E85FDA4FF256E15E115F3DCEFC29F19D0D1A3229CA
E03494D1CB78DD94962D5916BEB9B00809981BA7378B3E3852426E65D4EF4D4B
1B9F689D75D6E91BA6C6AA8E859C3A8ABD2C45335F5625B198204A58129012CA
213812D4445744EDA2125A12C21019BAA8FACD918D07280C728865D46F54D055
1400295A0E142A101E21CD15024A41A32117456745BE12ED02B2E534D5441669
9626A262A1262B759161A48BAEA2BE9F4609CA1E34149C3CD3BC207FE457BF5E
5EEA6DDFBECB1BA4DDBE78CD1BA7371E9C3904A5244B1866F2509319C6C12779
408A36EDE6873EF421DCB29B6EBA090ADD04FFFAB5AF7DED8D6F7C232389AF7B
439C224DBBC1B284C880D3E7A9EE697A7A1A5F123997CE3DF7DC97BEF4A5A826
903307CF0D2190A052C3CE74946433333314EF2DE70B4191E143BC894EC6D4D4
146AE879D1538C4CCECF7FFEF3D75D77DDFCFC3C516F5900B08388A88E4A3449
B433941B3D88DDBBE402221B9F760C86B5DC14C36065F999116318A22711A7C0
25DF7DF7DD94BD47328F223A380736FFD1BEB9E69A6B489251E483042AAD7D5D
EF0E7611501205F7AD2410112EE22FA37150A893EB18D8B2A10C08A2AE32561A
912EC93F7A1775B01CCD598E3B91998005A7BCF58C056D71A0BB0D7F6AF98B4F
BFA871F2C373BB06DBC0F84F279C94B4767CE997202B2C5F095E899E183AE109
6FFACD85D5FEE0BF3D65C7907A481A6A8C2676A62566001538FB7567E3FDFBFF
FB7E5805253646C1F6C0ABB7460EF567A10EDB5E7FF2A2BE1457222DAA0D3E3F
BF39A877D5B072C9C67967F59499E9E8AB8B4FC31AF8CABA5AEB742C1D7FD969
8A599DFBF683D222E839D8D5CAD5D77CECCAF615B2230914541DAA59B5B1DA7C
CD6FBCEE73977FD6491CC21161E0C5E373D272861BC9807BEEB9E76D6F7B1B29
5214FB61A7E23A7649FA2CFB36E95552B4996884CABF495B221D82CD593A30AC
7F1C4B03E02C922F7CE10B78D250D55857A4C9D52AC4B2293F951655F6071004
24DD8FD6FF4F7FFA53EA01CEA7F4589283A8034D61B4067815C7974C444DA4D7
520E1205C0499D82A17DC3095D6B0F4285350CC9D14C1218A78E0BD3500C2063
6F34AB1393CDB3CE3A737C6CA4223A0AC841D8F30783348B55A19E2BB2AAC1D0
27CB098EA48B91FB851E43578A84214D255792C8E08C0416691127903257E8FE
6AA6A989A22299096180E42F2B3D55B88462340884249004E8EEDA191599A346
2E2989849200FF5251D486A1A202AE2385F881005CB1AC11D36A28B2EE07F2DC
ECD2E3DB77EDD933B7BCD4EDF4FC5EAFE8C15BD02DB178CE5820E645294FA411
E38750E909F9726565851043CB2F800C2E0212219006FC956015C8E6A5F7C7F1
316EB5414A01B3A432F035699704B7801360773F4583E964E0C5E73EF7B9FFF4
4FFFC4E712B912C5C418D1908F051F563AF45FFAD29750AD665224BC0472A794
7BD3738A2AAD942C0F3C49A8D6A10D8BE614157FE1CDE5A637D45F9376836506
474DE421881E51116E02EA7AB46A69D86B9E9A93706E156788F2F8B86F8CEBC2
08A9D4C7832C159664CC3EE845D04E52C769C6A3A6715845A510773E6C6BC36D
1EB89307DD433E2E2ED0FBABBFFAAB37BFF9CD44B1429FA839116E489C8B544D
1508F9074582340EF96E307DD4AEF49ED215681378164230A4C34E64CA10A325
380D18E0FFB7349D1E5CFEAAFFF2F92FDC2139158119955B03A927C20C661110
EE8941FEE4EDEFBFEDAFFF4CC09566B251B5C2415F3C7A0CA05FA490423D6C9B
69BCA24C25690F5A53CDD55DB102BE54EA19C06EB44CCE44C19A29C342861247
96542F87CD279E38BF67975ED573531EB81E3ED1CCB47346CE995B999F55E651
1833163FA10AE201388E99C56A32A56010C20A2B31541D06435F10A7F3115971
E637E9192430884733323CA5AB411184C093CFA5A024F5C96745F62B1EC2B9B9
396EAD5156DDC86F43010FA4741C13C5D5F7BEF73D0A6833D835174690A82019
8053454A4175EDE73FFF399DF617BDE845DFFCE63719520C953CF2B21E6B7390
D6E886B4E84F8E6475FC3807F122766B1309BCE52D6FF9EE77BF8BBC8B85BD5C
EAFD2715D5C56BCC9A604470B9C89AB334171182E9C699679EBAED842DD5227C
8FE2C1F37B59863480DA3DD24FA0C826D7B0912420C71C17F2B0B77D4D48009A
02850D5E541D6468910A6CEA4415E8409EAC79921C0AB8511DB5E654D590F662
4D2E0A0B945C80D641224B22862C694A962A399E50D9C91543C0E2E9C209A3E5
6819C505685DAEC896A6376D73C4D06BFDC46CAFBABB77CD3CF4F08E9D4F3DBD
BAD289D752848E69643103856139060E4FFA3B656D52AE0B31DCF7BDEF7DB7DE
7A2B776EA1283F9F6FFA17591BC51238CA7AD96597E1B748972456CB02609D7F
9F380B71E772290337D7E542078EF7AE539DD88BBA67CF1EAE6263CB1D0F0A3E
0829965472C665E302BAE39031999F65DF20512F29D4DC4C953BDBE0B7F834D3
69A1DE7050AAD326764CB030E4ECE2BDFDEDDFFEEDFBEFBF1F86F81F43149335
4BEB9DEF7C271A675EF1816190836C113AFDB49FF8201481F7DE7B2F2E19E910
978CFA1105D289CB94B3AB294CC235C9381AF214A44CEE8946EF82B0D258BF5B
931066D159660072AAD7352B89FDF1D191F9E5995C64F0CB2393A7DFFC89EB2E
FDAFAFABDAEA4280A2C218A956A80487412C28C1A61A04838AE365A11E291A9A
C09AE5E629CECCF051FC6B83C4B3EA8EDFEFCB9236511F5B5D5D411B42ADD7EC
D474177AF8DC3C16FDCEA6C7275EF6A217DFFE777F0BA6F2F257BEEAFEBFF986
0959475242431401E6431C2D0EA5E0CF53B93C2B896A063952AAA065BADE476B
1E59765A436E91A23E96FAA06450007B69B693FB2E67B551F66099FC8F7A7E38
4FE1991E42C6AAA28A302895C5B01F158FF4934F3E490E40D233F0F0105221A1
427DB2F850752763D551362A0CD32EA100BE3DF3CC33FFE11FFE815324CAF32C
A72C53570F8669E164103235B8EB2DD102B391B2CF8AE04B29C44D2890C7DA1F
94649B376F7EE289274892517AF4F1FB9D502A2D3EE8CE3BEF4472A039107F26
2A63EA63BD4D629F29978615B55BA23D0C4A02CB866D5BA74F39E5A4A90D138E
78B582498511DA6B28BA5594044263CA648E01902545B4CD27A99C8B82FFA25D
2B9E95486BA9A649885C1B4FA09626B21A2A9AA70ACB403234D0CD58D5D1F248
F1579DB248259423286C7359121DD1842490502973403641AC14ED016448A8D5
8AD39CA139215B8656370C94049558A977DA83DD3B671E7A70C7638F3F353FB7
E4A3D590AE05498E25096068CDF0EAA89A1A5F0FBE572AF3A32EA0286FBFFEF5
AFC330A185BB6E91C793616699B3946D704A59FBE0073F8852819459D249C9C0
24FF38CE87CA0EB9AB17216EE2E3C805BFAED1423980C9E444EC8F3A37E17564
B2381AFE4C2A18F52BA5D42096049C577A1C494039D75CAE4C1E7906C0A0EE69
8400C179A8149829D7FBC0D048A72F12BD51B2047990089A09EFF9C33FFCC31F
FCE0071424C771F022AB3FF82F05C0E99531340D6F7519FD18F7938422D73FB3
3D44DB4E8C83D2586915640A2021BDE4252FF9E77FFE67D47CC93185D6090A12
1A87D172E8A1B621276186A6ACADD4BC34FEC4B5D75FF5898FE6906DD2A0A7DB
1D3F5173B59E7B12041D90934ACD4A4342D7610C3BDAC6A9D0F41BD6427FD548
3313D4D436DC60806A9589FA5192E98A99A4990A6A73B43EBF3C3B3931BEBC32
9F0A6846F15C90B41C1F007110FBA74C9CB87761E7ED7FFEB977BFF3BD1568EA
92DECF3BAA8D2BCDF97CB2EF4EF447046759CA022971325435124FB40B76D228
AE55C075BD2412F92676DDD46A4A7B69001590970497C03376C10517E02B4B05
22BD4FA521C73A3F9CC84E6715F55F7C8324FF887596853DD123A12E53351907
24983BD39D5CCAC32E23725D90EAC6C88F0C8A85DFA5C3C3A2AB0C529B1715EC
78E44837A263801444EE29024247550FF9C03DF7DC838BC55FC974204B1D8A28
23CF9C5026717A975C72C99FFFF99FAF6BEFBA6E7FC86258330D8B1CD0E3480E
6E5740791994A44E0200451D121DCBAD32ECB1C47920504A3F224980876C64D4
3AE5E413B66EDB58AFD74C55A47F16F91821CA00DC4F24F9C2FFB366169116C0
DB478B2FDB9BA4C9861020BDA0311047199E27A1834001EC9CA218880C3DD674
516D80AA36EA648A8622974C04056D001975932C06D1CA06751053B448C273AE
582806D06A504588D1409D48A22E65E2A55774AD66680D457324ADEEF6E2A7F7
CE3FFCD0CE5F3DBC63EFBE83855D96C3B1DD9779093D82D134E9183D1336991A
844129A78D933BCBC5BDF845FC97380B9E1B9C031E1A525EF04F975E7AE94D37
DD445E4EAE9CC4B7883C8B90A299A1131F6454F432A4D73A49409E1CAECB2705
0A8E44EBC4A38CB7511B556A9BF7AC248134EC180C47F6AB61740AD2F109681E
AF20A9FFC11FFC01EAF578BE298F8D76809541728CB0C2C23F90D70BB533D2F1
F122A957E43262271B8AE437BDE94DB40A7238307A010CFD5DECEDA5C20892EE
F44EB9A68F6245940540B9F09C3E4BBE41FA2E85226EB9E5961B6FBC91564184
BD8668529CA6C9B1A9D9A5851832D5D2E33800152A923AF0931CB4BA5D1978ED
71B4ED42BFEFFA90AFE9C56CAE118B5490DD8F8FB8BE2BF7FD9A61F6F31029BD
62A80112BE27BA162BC2EB04959ADD71DB535B46DB4F234793EB95461BCF3D64
B92AE1433FF0E10F7EF6BA3F9D18D1FB2BAB96ADF5F36A94CA10754CC0D10FA3
8CC8A5EE8F06C8A1A1421A2909D88ADACF12B4A2D10648713C1123D02A52D5CF
43DC59170668B33BB668D9883B89E7B9DCF8E5F81157D227881D518E5CB99B05
0548391E43185CF4456A1384470BF92FE9A02447CBAF983B26952501CF871DDA
FC2BD7AC917B87AA7CC92E24968A93C4D551A90423BEE1B19C9F9FA75F9190EF
BBEFBE7DFBF6B17BA0EC27283304E4F278D2086AE9A83B832B7AFDEB5FFFA31F
FD080727CF3E7B508F7A3F729557BCE215680D107A2B9926D2B0D319990B3855
9CE4F5D75F8FDC862510CEAF2272848A8FAE8B76459222E782C5C086E9D6E9A7
9DBC617A1C15624B5387E67F2CAA63044585C56372D2BFA83C8A5E060383B065
C0A1D75841E24CE3488A454D6881A6291A92656A1EA2816A986098AAA9199A8E
93413338D454813BA4E9321A21B2E89013004A803C4D62240D01DBAEA826727F
341344A4CEC0C359442C44E99AA9A88EA65464D5112EACDC09FC7C7EB6BF7DFB
FE871FDEB173F77EE1204A8F593D54AEA8224940E1F8AF7CE52B687091B382C1
3D58CCC2B0C28B3341F96071AA036D11D72B90F4A611F81E3AC465487D628E77
DD75172AF5A4D552A90E8E836440DAF45125013B34F834A02E83F3C71FF060E1
77A9D887DA02533BA767EB1D2AD339FF4A64CC89B3E47261C9C4DE153602F8C3
AE00BC8712DD883B739C03862617511D6D17D755E20F9FFAD4A7AEBEFA6A829D
A109703F1C4673A4F4734E462C7B54B90716C90F4A88A4FD67B589B1EDC8ED8B
D7CB8D418E281EF44301AB9567E419ADD70CB7179A260C5261209FBE79F3CEFD
075245F8652DC7AAA4F2525F9404E2E3A8250ECE84BC0156BDDAEBAD82A94F57
1A6FBDE0CD37FEBFB73AB696F7624F05CD90622F6F35474572A19235C76AABCB
3D71E22A4ED4EB6ED83435E8B67B5D6FD3746366A693E55AAE169D4AABC6A01D
579C7A26055EE8A369B2AE7E6AED57D4ABEA0E049EE4E7554777F3084970DC50
16A55432EDBC1FD5AC56BF375015BDDAAC777ADD2C6AD31B643F21C14F1DEB08
D15FCB316AD47B3802C7110228E92E7C9291A3E139C1BF1222340793A9F925F5
38C3F755F60EB14240B1FDBC04968ED484FFE2B1E4D03169B7E5B616641FE017
D182BFFDF6DB714C0A17B17788CE3C2EEAE52F7FF90F7FF8439C241E63A5E831
4EB0BB94582F975A4372E1FDB1E88B312569FEA836A1883D56E5E3E5975F7EC7
1D777002210CC3752453C9C785BB47B13112126B1C0F2DFBC287A517B10E2D8C
62A1260B0E059BB74C9D7ACA09A3634D9C80A9AE79A851B324EA0D428FAC5752
51713DB811E4F3A53239E9C8D6D2742C22D91592208030889078A5A22F8D24E7
9A842F06842410499702024BD702450B343DD415B9C02042BE8FCA4D9CA5C29B
84367D2EAA0B709374D194499C2159D3945CC593875FB774CD91554B911D5936
5167F57D343CB54E27DDB56BF9915FEDFAF5937BE717568A785472AC17C0E129
D27939D1853082081D93D4557262E0CF042E583ED68C9149A62579BA91415038
1D7FC03920DBA52665DC850E860900F888E73DEF79BFFAD5AF70EB28824A5FC7
919109A24271F6D967E36B7EFCF1C78F1527A077512EB0620F3E110325C95064
BB8CF4C9250BFF1A9B605DD1D65A76C0B05A9B7387C84EA2C9E44756ED91539E
2B0C18758BF0EF700E78C0A89B39396AA054484159D2A44BD220948DCEE2991B
7052CF32CA4FA72E40575D7515AAF3C8C7CB49BA94588C3A5D5E42A62C0FC5BF
52109BC0B4C9BCA31417FCCA5AFA962A5BF586DF59C5538A6A0B2A40D313A3BD
76A7074AB36AF5563A9AA546B22A585C10A0E63288D6EAE948712303B16082E0
4C8C0C563B754975233F55E1B433CE987DEC891E391B0195A3048A6D5724F9ED
6FBFF08EBFF80BA7D91AF43A10A39E218B721BCB46969D4B60B75A3D549C7D6F
6A7C74717E19B57B5471A36E4F2EB50D389C4823A1B121898E200321BC525D44
BEA79DEA7CBFAF6BA80EAEF5E4343459D14C17D597A1B98C261ACE8562FE706C
9B80539979575105FEC637BE210F7B13512A07A9E794C18C8446B909F81E5166
704B6DCA534A879D54F83A912A3C23624C8C0B0A33B1CC58CB5973EB0E36A54E
E038783668BBC8A9485A3F2529D081C1F38033219397C2E6A4B5B07F92BC26E4
C0A4491E757FC89BC4889954814FB037C7A24782A5A19A21285542E034DEF5AE
777DE94B5FC209708712DE7689A017C6C644BF4DDB411A2BF456159A0D7BD3A6
0D9B374DD51B15D18E589259C89360241798E82659383170A9E4B9A62C3A8650
6649B096A4012E3273B43CA230CDA88C4BA6064392AAE586A9189AA96B569145
2A2481A186A2F65845FD3415E5C55924E589084E8980AF244B2A9DA42C8F04A2
B526E572A4EAA665D64DA3AA6AB622C400FEA70C7C39490D6FA01D3CD07BF4D1
030F3FBA63DFFE59D7F58A264FC76470CAB01F3A2F040F011D6E2E0D23E64EE9
3DA44A97B32FC8E14BFA3E6528B16CA099D3FDA45D52491A859B58A7268C2362
A66548162E7623C7E8B12401C5BE18798A4E0972191CF61DEF78070CB3A4C8DF
45DE79F650932FF55F6913484743F1A49340B6455975A22550751BB3544EC0C0
1BA8020E7FA5F27A02CFA04188DA89F352092B49114A19A26DE47204CEB68242
C1246947E44792956E103596924459866491FCD11FFD1101A332C201497D46B0
218D92F83ED901A42D96AD3AFCA1296B3E5AC2B2E265A9A41B1972CE04B44A4D
EE7B464DEDB96D59552A6ADD1B0C2A8ED319ACF20B65B428DA90A81B44825C33
1BD458967C477DFD6B5EF39DAF7C15F7B8D51C996BCFD75AF51E8AB15C6E9875
3FF09A96D2F15DD1A712C50F8A114991CC4A1E446A25487B72531B35ABFA6C77
3F98A044AA195706D0E12AAAB2925E932BFD2C7434338B8B098CD4E34EC7107F
ACA0C298AA519CFB60009AE6E90017664170D8DD07253DFAF89550AC76505605
6E234965F27FD280E41BC4BF721A1B5A0F149EE10468B2B0E948509C80B8108E
4CEA309D6DC64A816167116EAE476F96DE663AEC5AC1F9E594DAC021E5729D33
B5A1E7B746670C353CFC3AB2D6129E5B4EABE3ACEBE37B7B3876CD78DDC8828E
D397982C21C63EA103CFF8B8E47E603B8698CF5AA880AC334E211746449A588E
B6616A6C7A7A7264A462DB968810C4515194BFE605C69D2D2401DA4112711992
042406D6D90450D232D24C04B5D348F8ACF1179044A35545865C1058AEE9AAA9
E2E34C0D557B23444960EA42A3110EA2224E5074BE4C50C1C9323C0AF210442C
4523218718470039D40CCBB6EAB6D542F3581551045D12350728BA91C39A0BF3
D1A38F1DF8F9834FECD8B177A5DDC9D3634A823256252F8480C5F15FF2A7A33C
20C58D3690B050F860D187524839819D1458D2D3F15BE493610D421D766F87C2
074A5E11CA69A18217669DEB387E39ED1A86862A295394824249EE6452B0B642
CD9E18FE059783178981BEFAD5AFFEBBBFFB3B1C901AE9E0F89C744FE204BF42
D6EEC5175FFC677FF667B40304A4415863B7DD76DB95575E490E771CFCD4534F
25DB853DB36CEC3F131EE33FFCC31BC54A1941C531BD715B1B18BAB0D67D913F
1424A02341F038B42D1FFFF8C76FBEF966DA31600C0F49D32D33F206AD5A75D0
EBD60CDD0B2359349829B24A7503F929441E723B45B3E34493F3EE51AF6B723F
064D606E895EAC31DA4A014A16BD91C5CB71AE82654314564C3918F89262DEF8
E9DBAEFEF0BB73D58A62E19892211E6FB696DAAEAAD5F26425958D34CBD1E8CE
02176923574CF15CE8298683F7D79A8DFECAC258A3B1DAF3934C53C115F3416B
3D0A475B95CE4A1BC7CF7253CA3ACF6AFE6BD7355DBCFCC8D390059BD524D5A7
27AD83F32B89704E28A9DF57846AA6E50237A39716F78BB625B15F180E4692E9
A6EA0589A4D5EA5914E6A12BE762FC3046A3C7CD1514B492AA6B388E81DC3F43
FDBD15058BB42E94A2069EF128C9251D24DBD27D374891852073C107ABB9A418
157C6EE8CD3FAB75E98A8BF3C1EB15C70E7ACB35CB69BB013D57D6ED58C8EED4
D1F11B22330CCF8BA10E7CA460DD9025986C5516E716EC4AB3E7C6387FCDAA36
26A7E60F1EB8EEEA2B3EFBE99BDD10254D3D4A573EF4918F7CE63337A3389204
DA1A7CE883577EFAC61B32E998DE24A22FB9D4B483E413711E32FA49E13B0207
8CE369308C14C5495C6F3ADBB66E9CDA30EA08DEAEE8861A7B841BB1D6C61D95
39B20990F996250189010E17F3E7B0B6286A08F2A2A9A52813C6396B2A0A0329
5244D5328A1C0D0D02C944FB4037D026F04D0D65B2C02815FD2C8524880BF4D3
0CB22EAAEC85EC453992C589874C524659A2C5A651B19D46C519D18DAAA63A45
1D9B9AEB8D3C35A3A4BAB4903CF6F8CCCF7EBE7DFBE34F2D2EAD0CFA476FB154
4E9F801282318A01646D44EA9C8C451089C867294782F505D20BD8E10385E398
4A04F12B9B366D421B13F57D64A39497463C14390BA150D05338CD060ACDA88C
37520E069061C10D9B4859C65776D555577DF2939F3CFBECB3B76FDF8EEFE895
AF7C25C1054BC32E8CA4298BB6A385379397FFFCE73FFF17BFF8055E4433FF79
CF7BDE77BFFB5D566148CC505A08144DC691A5924AC5ADC7B83219177BE18517
DE75D75D9C60BEAE33CC3A03FC7FD387840D474D60E8D3E7C412A5D4816E9DC2
C53A8D54EA5D4C1F5A2F0969D4675142D0CE93152FDC50922E0E7B86EC5ACE92
0839833636120FDC5A12F70682010ACE0E9926019ED230556A4E7AD4EB0A8476
B51A2479EC8BFC3A1019A4BA1F4B961EFA1198957AE47B48578E21F9613E3EB9
75717E9F60AE869D840112DDBB2FBEF0AB5FFB6677801C27540D2395D49A6377
5697905053D13DDC38EDE4891DBB0EE07371E955473DEFC52FFAE93F3F18C438
E755DDAA777B039CCF79BFFFC2DD3B9E9C5FE844997AAC791EEBBAAE84C2EF25
8C7824C8089F1BC552023ACEA7D871556C701E23F1CB8ADDF392565DEAF423D1
B7B318C7D290018BF53AA220DB08C284AEDB3A72066710E4A6EEE3BFFCDCB1A6
E35446F61D5C6C35A4958E8FD72DCB0C3C17C799DAB0F5C0CCB28C9243D665DD
4AA330890245A028897D78B6EB1A69C85665E4D0EC02727C94AD790CE313931F
FDD80DEF7DCF45C8CB122882AE49A40870B3E7BCEAB56FFEF40D576692F9C53B
EF7AE73BDE8EF339EDA4CD3B771F00D93650770A81C6DFBC697CEEE0BC6E987E
2429B26845D9ED778290B07FE46AA5DE13502EC79404643D50F06FEBD6ADC8A3
2871038F3A5ABA5FFFFAD7D9022BF76893D887C30C05C536F2C0E73EE79CADDB
36E1BB719C22B13A0908588668982C3E8A43120B232EC6B1E202B35A660590C9
2949A282110CDB754AF990C628B22F1560A5A01425A522E06E256834085C5225
5224B40F52594970507C0BA2E18DC86812AD0E24399101CD8248D2047257B5DA
74EC86A15775CD12A163458DD4BA6E34DDBED25E81EDBF3EF4B3FBB7EFD8B16F
FFBE43ED76371F369FA3A01FD7C7521497AC2DD4EF48C5E68825AEE2FDEF7F3F
773262606AC65C84C255CA75F6E5E08132EC69950E5B1741E11024E732AA99E4
0CBDEEBAEB2EBDF452E4D1340815D61E4B57658B351FF65526E403CAA861C73D
A57BA2343AFFFCF3BFFDED6F5378A05C6B86CFA534708EC7E2D2262626D00C27
C02CFC133961CAC522F421E712E9C214B523BB07C7C7C9CFCECE723ADD3A10BA
E358C7FF519FB24D4039DDB8ED3831AA2AE264ADB256540E7B309E0AA1C3528B
4D5A5D3E44CBA0700BBBFE90F0D04AB8E28A2B84BB4FE8815AC31E71BDB008C2
CA893A27789B69485216477146A783F6E068D7058B88C59F3453C9B3F4431FBA
F4864F7D4133D4A9E9FA81BD2B78BD395A6FAF147D800D6106A44986967D9AC8
911FE2D7C727ACC5455F2A52C4B3A8607BC5B0684BF8816081625292F801C78F
C3B4D952DBAB22811014A8D56DDF4BE2201A9F74161706C79FE7F1AEE3DC8407
42B4B4121F196D2F3DCD2311D6336B8341CF1F0C55D4BC988FD0F7910C713982
5FE5850688D747C71BCB4B5DC350433F3E7CBF56AC22035913BFAE3DB718C7B0
70C750D2889A8AC3392252F15F3126EE49B58A2CC58842C91BF8CF7A5D39D49B
0DE488FDEE006D13BBA2BA682F15F3A77D6EB450378F035F4C46E09EF96BD7ED
0A7803D8B0A9353BB38A57705DBDAE8FF34C93288ED6B6A8155B21C4C24DE258
A992F7E2200D5C706CA97BF4B842597FE50FA75A509750246D3AA5654CD6353B
82FD83C2BA3750E9D350126CD9BA11D570C7B19075C75140FA1D3B0128D597A3
3AE4A861D549530E4355C350F52B58554C9A17459E41625B86C28CA81100F9E5
04B6345AAE5220347D2517A88E72AAE0BF6885A0B56A08FFACA999421D57041C
0548B10C89666B86613B76D5B6EABA56295A210849906A754D6FB87DA9DB919F
7C72EE7FDDFFEB279F7C7AEFDEFDBDAE478C0917821B843C8EBCCC52099D98E2
99E48B1C1D1D25943D627648EDC82EC9838C8C00390B4A602894774A3166915B
86085DD794068ADC2F0A3F506200316B7A3537DC70C3CD37DFFC4C34DD759240
2E75F05883781A228D90F2CB0FE5A4CC72630318E2EB31880219169425C933BC
F2CA2B6FBAE9264A70A68431BC0DA508E7E150D626810D10C24C5E0085B2BFBE
8C82CE6877FF07240173794E20614750398F9EA7C1228A7FA54FD926E04812F9
4549A213422DDBDD53239BBABD552F19B426ADD5555F14C857501F06AB6FC8A9
F0911430EB89E85D9F20473213C53BEAF548722B6A5D8A351F50350DB76C4583
72BF01151FBA3A588E541741613D59F5961B76B3EF05D59A11F462C14B41312B
DAB2BBA8815EB34756BCB9AAD2683A63EEA0D74D5753884DD93A61CBA94F3CFD
C8447543A7EF5A92D1CF3B6827D49D469EA85EDA41D35D1545C6386B3F8168AC
3E8E0C2B538267357FBCAEA47A2ED62F74EA5C4B73116D3642E80B847B51248D
DC35527559052D89A44C0D00553EC1E0F115A4928E363F720B3D557C23B763E1
26CB701F74434DC2D454AB7ED605D1CBA1A280E442F7E4534E7CE9792FFBD6D7
BFB3DC9F1DAB4E2EB74573AA5AD5F11217C7A9DAAD85DE414BDC6CC480F605DA
25C83D70AFEC67BB2EA326E999D5750712E4E79DF77BBB0FECDCBD7B8F25D706
59BBA18FA491144180EB45898CA70FC7C7F53EE794E71DDA3B1F2761A284AA2D
FB7DE1A54AC1C7F712096775A6C8E0670353B1E21482264A2A1D7AAE029A9E08
479F8356661E748EDB69078FDFC9279FBC6BD7AE729F572EC547DE5506493C2C
093824B256DFA1A184AC9C73F6E99BB74C230B364DE1DA4BE2B00CDE4BC5685C
40548EB3D3BF45637A850D0E6988F0557C3D1BBAD08BEF02370E24FB202F6400
90F99365AE080FC899AAC4AA92A0FDA50B9852E46262C1C8AA6C136D1159152E
26FC626ADA86B86C548435A09A8A6C8A6E978A961B0D5DABF67A52DF5576EF5E
7DE0E7BFDEFEF89E9DBB9E5E5A1459F9E4E7E11C4146E5A41C67CEB02CA79170
890755BA72EEFCC68D1BF7EDDB471841E552407A3D2C71E521EC2D8A1F8A2951
6A17BE362E5620EDF5F4D34FDFBE7DFBBFC8E9385D95D916D907DBB66DC399E4
457F5D327D70707C10D90A343D7CC4EEDDBB39E0C9616D0AEDD21BA46801B7CC
2ECBB3F211BCEBAEBBDEF39EF770B1054A085A2C7E11F59103070E70DBA9B22B
A63CF9FF7D1F56F669D5A79D76DA534F3D558E00F10D2C568F2A09A8C2401EF6
B66398300622A45004921CFED0763B390A9A2056413E6DFAA483334FE30F1618
FBCD1EE0598EB404925C47A628724C45EF30C1FA8E7E5DCA0D2336C22CCCB508
2A48515A45B1FBBD76C56EC5ED38CAA3179CF75B0FFCEC7F8AFB05CE3CF255D9
92AA9AA9F5C2E5E60913EDFD0B426BD60102D9C81DBC1F07C98D440402322858
B43E628CF4BD7E240FA4A69E774359D5B334C27190C39A0ECEB89FA1426B28E0
A6C799E771AEEB115E8AC543A594AEEB93158192ED8A094446240C96C24D0322
6BDCC4FBD7D6ABE4858A2D810DD0935AF6B8177A8116ACDD8FE3E3F550178E03
81402625E140ADD9C98A27444CAC5999AD5B7A375A11F33155E827E0A04A8C62
5CCF90F3D6D5241BA0A0D30C2B8EFC67B7AE960E2B899219388E5C53D2C8C3F1
2DD9F2C1834E7EC4758089C9E985E519F0E4BA31D2F37B5A53375B46EFD0F257
EEF9DA4597BD235B8AF07A2EE7F8BE70F98D0DE39DFD8BB84F78CE2CDDF64517
49A9DA6AF4822E20AF1B1C3DAEC63957ACE8203953062D9534132DA33AC8A090
6B0C84981D67F8145222AFD59D534F3961D3A66953477DBA200F29E3C421F6FE
C33014CC9FC3BA1248642810A53121099F24AC717912066B693605E91563523B
65AA79CE442DBB080F44B2142BA22A3E2B124C25BB9259A66EDBA6EDA0A842CE
256902A4088A2456013D244B3A2A1492A42AA2658D2C5B0D45A9F4DDDCF7F47D
077A0FFE62C7A38FED7D72C72E29B7C9314261C0B3CF3E7BC78E1D04DC81C47C
CD35D7502748F2B75C7BEDB537DE7823152E52974A46A1222E80DF1229584547
6F0A0FAC2BFD852303A41C42A0502D79D8B97B01C918F248505A279962EB04C0
3A4E57BE5E666DFC4546D3FBF0873FFCB9CF7D6E6A6A8AD2B7B9271A95865087
4882C1A06C4EB67EF0065C2337032054BBF223D080C07D181F1FC77BC83B8FE2
ED79CF7BDE430F3D449EA5756B397EF5FC7FA018A0B5E3B37045E79E7BEE830F
3E48BD9C6008E9CEBB57164E65EF102E1CBFF8FDEF7F9F643F0799192495F696
B0AA84EDA5C0A68D1B7C3FFECF7FFCDA2F7FE92BAA5D4FBC48B32B717AC0CC9B
7224AA25F3AA122153F37C43B1C3C43DFAF5DC973CC3025302E4D37D682830F0
5047CE4D30025B89E58A59BDE8CAFF7AFB3D7FEACECC56ECA69B0E2A693DF750
714E43C9873AEA99812A99A89C6AA133618C2F79CB890DA91EE2F8A3ADA9E5F6
1C3F3732B35CF1204E84A2DC30A7F4C9EE4207AF8BFBD38E7092A84E940E9EDD
FCD5C40E1D0850FBCB422D064770D211B37EE26F9ED5DBB5B2B46BD1CF83D046
1683AA7DCEE3AB9112A39D89CFC571E2A466D67BE900BA52131A1EF84AD3F090
69A6999CEB9914CAA153879A0F41207930A29FB875DB9E871E0747A9E6CD7490
08BE5D8118E78F7A37AE4BCF707C2B32238807AA078A37BE75DB1FBCE0457FFD
8D7B9EDDBA9478D2DC804CBF1D75C4BE194586572FC4F1F5B46E2526AED377E2
24698B760E60BCE065BFF7F3FB7E6A8365EBCE72B2045AD09CDED8DE3707351D
3A28CE2CE4617DA90BF85E14154D839A93051ED896D917F9C5B25277529404C8
5EFDA3DB04D2B0853DC514C96BCDBA3FB31D28BCBE65E43B89D2BC8EA4C3AC56
AF6CD93CBD71E364D5115D1EF18A683236A48D7C88C92397C00BCB31C08293AF
A9BDF2919F2C4F868E97AC2C0C866EA28C1F4199FE220493A32D88AA7AA04891
AE27A6816B909D8A30562A558B62DAA6AE0A37918028D28BE7A890AB592A7264
654914072A664D556CD7CDC2D89E9D19FCF297BB1F7B74EFAF9FDC9DA6062BB6
5C764138975C2544A512DC7D09993ED23C7B09386ECC3D2ECE39E79C471F7D94
B9F0DA9E96E02A491220EF78EB5BDFFAC52F7E91BCF030F4F15123DF321A1ACE
046FE690C33A195066FAE5E03C3BFD7056C8AC0983010724B00A0A41538F1DBC
CE0A42B91E823C2784D3C26871A42E9008E4BA740A9BE3CF77DE79E7DBDEF636
AEAC26914666040A068AC4949308FE0F9802656E4E8FA35C2914575471C39220
3FB28DC1BAEF72C498EAC9E5129236891606AEC07D23518A5B3702A34BF1526A
2630019BDFB0F5A03A9B8FA0960D63F968FFA995E067C5F25F04B5CDB5D0ED1B
7E6E4C1FF37A6FC772F83F0484DCF41B37CCF467CF3EE3D4A71E780A46B59A6B
2EFFA20F0B507D5525304343965AB2DD5692F069377A4028B3CE79F620F0369F
32D93BB018D7CD7C26AC07F6DC42BFFE1B35A929F7563A1B2B8DC5CC6F78F6FC
DFB5719E95173A03CDDBB261CA9F6B77D4B4DA37967FD817C816FF8FA18CA8B1
3718552B38CEB39ABF3456F376F7E25F0ADDDF78B1EE4C57DCF6AAEA82B36574
E9E165F88550EAD5172BB5CDF5A0DF93BA8931DD1CEC6A87F7172EF573C1D98C
1C1039AAD237A01554E6FFB62DD8EA2B74B9A558A8ECF52218ADE2FDFE7FCF70
1CFD3CCDDEE0B8EDCEB85EE9E9A8EBA98BFF288CD4C6ABEAEAA836E8B471FE61
555F7D7C29F9B9309294DF958D0913C71F519C67BBAEA0A2694BF9E0A7098C41
E5371D4FF7E534DB5C1B5DCA83E480E73F845207A47361FACC8DB86FE142179F
5B1F58F3FFA30D3E4CBC6EBC9D771C5D4B5706781DDFE3D2B77BD004FBF7ACE6
B6D6E2CCCC8862E7DD93F36EBAF8E06E58CA8C7E8696CFB8827676B0470A8E7A
CEF3021503CFDEBBDEF5AE3BEEB803EDD7C71E7B8C744AEEA68554CFDD6D0FB3
113CB50C32CC9C7D64B43E353936353556AF56FC40B8AD85C65D7016A6136634
2448F83A7DB238629B401EC24F1EC6B890F323B9412AC9875772E427CDF248E0
95E60305D5192D364CD9D0240BA5A7A93915DDB2354347855DB50AF25334438C
9E091C15219B849D543444D06C59357D5F8A636B6EDEFFD5AF9E7E7CFB812776
3CDDED865BB66C41268BAC10B9D8473EF211E4F8C42871BF5EF8C217FEEC673F
6397CEE6CD9B91A391202509F1D18F7EF4EAABAFE62802F27AE40B975C72C927
3FF949549C19580D8615496589CB0E22EA7CC99E65F65C735F3328B28070402E
81293BE258003087E57E3B9CED53CE8FA462B12BAEB8E2B6DB6EA39807D77C91
FD414612672231C616D93DA46550ED28BD5C4AF9E73A499C034A4702DD655712
23C573BF0A8EC4A4FFEE1EC2FF9A0FC70688831355301A391D35CAA95897FFBE
4E5695FD7BF42DAA69E2AE15DC528DB2923239D36C2B1EF8B665F86E282C7D15
8DA72C30A09AD7CC480A210F2C88A41E24E0A8DA208D8F75DD492BF5C4F420E9
C000AAB1400095E440CE74DF6880858A490775E18A1033E2CB0E989E55118E15
E8498132A9A72BAE9A42A282119AA754B6EC77E77C3347D68AAC6AB2D99AEFAC
369596E5C92E44E2B9790F5535034752F24A52356309C711F71B0388337C4EFE
ECE7DF909B9A9FE1F5818EA2780029D40CB3170575A9610668B6A43D25021375
FFE2B9528ED78D008403C89103A58BF644CBA9AC86EEBBDFF89E6F7DF9AF701C
6DBCBAD29B1169A7C86F1518D14625572868383E8C48B85E71BFE7E27C0CB12B
D09343A16BE7A0A510ABD0909AAA2FF4DCB8A2F838BE9FE93944F2B35ED786CA
74B4D2CF405D955C68E610C6D200D056D302BD0E687380983FDA2299C0F48E50
E70FB44D30BE02FDBE1AAB135ABCD4AB68BA9B4463C6B82A4C9EB88752C2440D
18D4049246E1C2EF159EA81C4D19034C05421737E8A8E79CF451EAF749E79011
EFA99082B4D58B2FBEF8EEBBEF2E974C8AA8E0CB5FFEF2EF7DEF7B4400E4F79C
9E9E1A1D69345BD58A6DB86ECF303545022A9780611A0C49029601CC928679A3
191BD46507116504913028BE31B4C7E5C32C32CFCAD075B20026CAFC0C06B21C
1868D319224E601AA896AA8EA3A160D035A190E2E24DCD147FCB91D47391EE54
98FB8A524802D554753B0884A9B9B810FEEAD1034F3E31F3D493FB73652DD047
AA3D14BE118A88C0B05F36875C7886EC5F63C048CA32A2A1C851C00942CCB5B9
0406867D77A9E40A5F01FE4A1163C6827EB69C91ABF6C9F4FBD0873EF4D9CF7E
561E36EFA6D8EFADB7DEFAC0030FFCE0073F3878F020251795E5370CAD3DAA42
E0660C9CBACAB795E7464F6465622D5FA0C851631C2A6A41FC277FF22738A557
BCE215F7DF7F3FCA894F7CE21337DE786319488062D484FD4075616446904CE5
9248129FBCDB3455EA1203436089637D1850884AE7A84E07779E98384583E81E
F2C8B1D64F09C18C935CC6D3A7B7CF6392DC6D341A4875737373466EB7265BB3
9D83A8EB6D7CF519CBC66A60B860669078CDEE48FBBE954BAEBBF4DE07BE1A6F
085C2F30352BB643E740ADF7B782718CBCBE956E8C3A28B1724D6E82B4430D7F
28325B6A7F584DA643AF1F39D54A6078E6D3CEE07B82A18FBE66A4D76C231F8D
7A3938B9B2574B7F1A431F1AAFA987939E1FC49AA2A795D8DA5719A08E1F80F3
87B6BC2DEF0F7CC7AC0C54D7DE5FF17EE8A2AEEDBCC4CE37275E1C69B91ECBD1
54303DF7373378FFE60B371D520E66293297EA40EDDBFBABE2B93E4C5D30D96F
75DC7ED068347B52677C656AFEEE59D4FDC75E37EA8E74FD2846028DEDA8B530
BAFAED651460A89B071383544DE3D51C46C1D86B8975C550798583F3E9753D01
2C6F46E3EDC9C5AF0AA2187FD3983FEEF6FBBE695841E46F92B61CBC733FCE73
E35BA667B5195CAF9E59B8AEF471C87E2C621EC6FFADEB272B7D3C5AB104F55C
DDA527FF5F849CB4FAC715ED2479B5D3D364311F6DB711FFAF10DAE0FC671BEF
6FBB7D1D0CDA67FF3B0370C07A8989FBAF55B4C162288D00EE9BF78F627FEC97
5AC629AA1BBB99A7A495A4393FD2FEE60A98609F673967984BAB6D11F446EB62
B6D9451B2B83B1D78F761BABB99EC7DD1C8FC1B1E6533D54EF7F17051EB45EDB
CC36C59D8EABA97A53AAF576BAC1C3013C0D7A62C9281D14545E4229C9196497
BDCD54B049491FA4F0C1301DE30D6F78C37DF7DD4794C202A05CDB2C48FA8C33
CED8B973277E99B3534E38616BA35E4175DBD4955EAFE3542CE4EC94274ADC2D
1FC23995DB3B940B0854F9B06BB5240644C5C01A2B91B22167C98E900439E7B3
163F488A94C7B930853C544C0DE11D92345D56E5D43015CB960D5D42E66F6828
0904F640D1A3584A132109508146E3A0D0683545D50DC3F651126442126C7FEC
D0934FCEEDDC79A8DD179B42393C1420654F3D6E1997DDC2D077C45A36810211
9608C18F502A0EED0F972FADFB500881581EF54B211E7DFEF9E7134428377E59
8770F7AFD1795932415132463D8ACB177186655E59CE982C737679D88D80AA76
393DAC8C9F4AE78FCACB29B9964E21A593B1AB84BA5A12D010727F3A79646D40
6127919E42D2911C62C48E71045C82E89B547CB80716B788910A74527C348D80
9BC9AE2A5E4EB96481B839A57E92E544051FF844B49DF10A4E8F441777A69387
F8EACF8C6130B6200C01CE08751CC727890545CB6BE10F74C3348F7447336B6A
6F50509D530448F144792D3BB5CFDA78E63F1DFA51A089D227A1B89A30214DAA
BE2A701A0D7F190A5D52D223396A2523D5A41A41E8C9BDBE33181D6DFECE392F
FECE8FBE33956F9007483FA9DE92F70733C21D9148B9998F24A3566CA119106A
835528B2C57467900E9AB1782EDE8FD7DB462F0F41CD45BFE546D4AC66D504E2
48F7DA46370B40F40F9C529483E6583E3600F78B5FBB7DB7BBF3E31FFF446FCE
57C76132D854ED553BD096AAE96C207CA7A6822A7D309A8D199181E3FB4ABF83
36860635B5D68B7BA66FBDF3F7DFF98D1F7FBD0B2B9EB055E0B7FEAFDF7A60FB
031BE469DD455D3D48CC604969E326548C8A9BB83CCEDAFC91052B76607BFAB2
3502233964ABB078C2F3B73EF1C86E399533339BC8276DDF0EC0C7F9AF685D1C
87D63B0E137A8066029265B0ACB671BD74FDCCB1B32EFFE3CBBF7AEF3DFBB2DD
07DC59C582DC450B2BDBA86FBAE62DD7DCF8A737B846673913153662FF95A8E6
D7AB502DCF474DC5BEE1F8E301EAF8CB2E74BC9A5FA0742BA9964E291B1A8306
EE4F6A858B89D0232DD5F273FFA8F3F1CC81B122D685E35B63DAF9EF7FE3273F
7173CB6AADD656C569E98114A9261A15528E0B14E1FD0408381D8F1F12D78103
07CA90A5302C8182A1CF869B7CD0A7DC1B718DA2E9B81307246687043E32DADC
BA6563ABD548056BC22F64867E0443679D5D1E925CD935C47E55BAFFC8242291
30BA864F37F411519DC13A59B2E6654A555954172720FB92F00E09943A4D57EA
6681568D224113D2A508D451745B8488F354A06AC54158C4FB0BCC22A39EC479
94EA41A82D2E054F3E35F3F8AF9F3E3433DF6D2753535384FACD209470A4E385
C3E965BD927FA68871B9CDE9BA282EB1C5B55A8D52F5352B9530CCD1647CF37F
834D40EC9542D0A492B36E4BC9AFF8575C2603103168280CBD822C09D040C199
2067BCF2CA2BFFF11FFFF1A9A79E6200C8B22420AFD1D8D818F23E926AB41B8C
5C74DA69A7A192F1DDEF7E17C77FED6B5F8BA28E241C81F350F10B2D561EB657
E5C661DBB66D5B5C5CC499DF75D75D5FF8C2171E7EF861EAA080D609F979500C
A09546E85A3831CEC73D6C940E5747BF52649B42E2640FF19D380D7A28D31219
88E42CA222415CCEC68D1BF11D71B0442EF5B683A1FB8E0E06CE137F5D3316E3
68CBA68D6F79E3F99FB9F9E60AE8459679E280BDCF7421A83B5043B5A693CDA0
12095A1D7A0A98AB5A3EAE86DAC4F8E8BEFE4E518C1C6B72D2C8AA1DC9ABEAA9
914294683D5063C8CC117BF34AB4474F47A54016D76DE4111EF8DAC6F1330EB5
1F83B051C9AA010C8C0975102CC14081A48AE32BE9682516D743A30B7288E3DB
EAA4070721A86DAA6D9BEB1D4ACC0168C8D27588F1FE15BCFE377FFEAD0BDEF9
26711D75B258ABE81BDC6C3F5EAF412B95A281BA24E62339B267674D57F3AA72
287003926618ABBE78AE67E073C71BA7F6E7DD46BD3AE7ED11F70FD7AB0A8E6F
86E0ADAD2BD6689EB43F8A8A6C704EEC8F5C81810EA3112CCB63FA949FB8F958
F29AFFF2EA7BBE70F788B971C5DF79781CB4BA8A7549493D37D10A6958B913A3
A451BB621C1ADF6A835FAD42D30737AD46E6A8E11FECD6AD4DDD782F8EA345BA
0499677568FFC5FDF50174CD2A344049E366100C9671FE724FCFCCA5E9B1B37E
EF9C97FCCFFB7F7CC8DF4BF76F183D6DB6B31DC71953C757BCC5A8E243EAFE0B
F331571BF6B670355ABBDE50A083F2A499E5FDA2D2232B4E4E96A02D208BD0B3
1096856A4F471DCF361E4EFC811A961083E5BC6D6AEAC9CD54A82538A5471ED6
E3C99541EAD8B0072CB446EADBB66E1A1D6DC9F8EC04B9522EFA111CE91918D6
0C67254F0EC033B8398B84E1D7C9AD545C911991A208151CF915FA288A519431
A7280664050560AA1B394A828A168B58B02E21F317558B6BD50C683869F86F16
4B4110A571A229E21EFC432219519CA19DEA87DAF272F8D4AEB91D3BF6CDCEAF
743A11278F3EE739CF79E49147702B71430E275795D24838FF84190DC199ADAB
F63A6A2CF49956823404AA2D63E330DAC4B39504543806C3808434C4C3A22B17
5D74D157BEF21572F8E01B4786C530EEBCE7340E1B34289CF04810E89B545454
4847C287D0870250B4345C08D51BF262B9B3DBD6AD5BF1A492714ADD0DF166C6
ACA7FBE945201BC541F0B9D75C73CD2DB7DCC2E5F2788E693904DB476D760849
06AFA0DC22C0EDF25ACAB940F8334AA61D3B76902940E10A8EDE2397C7295D72
C9251FFDE84709AF94402E694BA912E7ECB3CF7EECB1C7284ECEB3257F51396F
EAACB3CE42F9F7FDEF7F1F09F2AAABAEBAE9861BF07826198C8D4E2EADAC2AB2
262B7A188560097FCED8687369A52DAC841C1A9613CDA74133C8FAC24E9E3E69
6C6666A96811039AA78516B2C8C27ED68B8C4F21B4A19E56BB465FC9510915CA
ACC88FC19733804DF5E983EE8C70C457ED5EE44191538A5AA41D9A9E11500596
B85874725325A8C6F5B626FC12279EB065CFD3FBC57549E46D1A03713FF262D4
73CDA61CE06354A82496DA33A211CF5D88446D5671338E66CAC8BC94C02C6821
02C92E6AC154319FADADCDFB7A0784A79B9EEB806481D207D5D5A5C9D4EFA4C2
185244301C0C3090D0BB7A3C1AC49DE27E4AE257D120D092D53C32129C0F127D
18A778FFD489CDB9EDED717374515E1629FE1EAC556CC8C2F0AA268E5B1DE483
62F9CA5A5B37B44674D78A46FC8A56692FB893DB5AF3F3AB500558864F7CF0BA
6BFFF43A080BA73CED0F4EB58FFB53E9A174098FD8375D91509245F5043C186D
3596573BE2BA2D7ACFE9892AAE0F4AF3D7C43E18B11635E2A3CE67600AFFD886
A9F1D9D5C522A3174ED8BCE90F9EFBD2EFFCD5F753B4D224DF13F0B5E43E014D
59435424164F0E09FC10AE303900A8851FC5F908D4801121CB9AEB619597E209
1CF1938678C2A363F5A9A989F189515C6F1805521E17D05B4A9E1E05746C9DB6
C81FF1AB52480228987E91CA834ABEA0557908172ED3681C3FC838A11B4A5E08
94048A2CDADC23E58A5C523D35855F48F4DC162D95B5224F4941A1A7A4B9824F
4B42B4AEA32C8D152957155DD674900466757FA044A1B4BCE2EFDEB3F8C41307
0F1C58EA0F62BC2EC96BBD3260584DC60D0B29344AB8E72472CA0DF0D67DF267
F467A7651D35624CB0B7F8E64E3AE9A4DDBB7773DE0E41843E2B49C0F3A117CA
6180134F3C71E7CE9D84964AF05E2427CA4932659B8044118E40CDFC66676719
9F473A1A9054192889368A538948414643932A18280F8A83B41412C011C80E20
871BE556319A235EA799B3238BE1186FBBED36E4DAE4DEA1D2878F7CE4239FFF
FCE7B9F906CB2AFA156FC0853CF4D0431C349687FDAD289582E2E184AA7BDE79
E7FDE8473FA25E9878270575F0EB2809D87C59270968CED9B0E128412DE19B6D
D64771DE9D3ECAB0DC1AA9FB9DB660B19037E24A9006966975823E5AD64A0602
87172C4917D639EA3FA79C73F22F1F79584D653B75645007A2F324A050C9F4D4
8F12BCBF0EB50AD49661314391271A7708688656A53A614DBEFC77FFD3F71FF8
6F870E1D0A21C4EBB596A3A68A1EE084E3548EC32C9490799B799C277A2E4213
B849890809C3EFBCE8771E7EE2A176BF23BCF9720335DE2EB4EBD57ABBDF1EDD
387270769E9E0B423C0542C241122B518424379CBF07EE5863ACE376709E8320
3A79CBD6D9A7E750A33647F4DFFFFDDFBFF75BF79E74C689BFDEB193EE6FC168
1B5612C1772155933813FB6081A983E9151EB41CF20804FE909A829E1B365422
3910B9F07EDF4DDC44344890ECCC71A0BA024B1A68B992875290881AEEC3F311
A75AD49626B46F741DE78FCFC57D438308E789D747B51154355741B850B202FD
08D7A58AB0B9B81F4D1B4BB3A22C522B4A079948060DA98EFBE68BA6A239DE6F
568DBE8FD2C5C47D967205AF9BBAD98FFA1BB74DEF3D70504951A6D80D682DC2
FC51E783F3747407EFA7E7D2F85A6EB4A12DF27735B109228D2A469B4414DF35
279B6834533DECCACA0A1EFE1B6EB801C9E1B2CB2EFBC94F7E822A111117F99F
A9135FB9E91B9E6102342D6391AED13FC7C488801B4D67CB962D9B364D1BBA8C
9220C7372ED28744D23F93655918301C3FAC738F143FCA80B7A532717612000A
398E2476139171206444C907250F1B1EC86A8437EB7872D554D7C4BFA2878140
2B49501729444551AF2015FA03EE6424E759224BA9AE162875929CA01D9BC4ED
768E6B5F598DF6ED5BDEB173E6D0A1E5819F0A08235D62B458CAFAE03DE224F1
32F2E8F17576B9D4FD8EDCF49CD4CF3161060864E181CFA59DFC37E4D2D008D4
19957404E2F8A43B205323140D8E73C825E8DDB22420141DE46BAF7CE52BFFF2
2FFF12CFD9CB5EF632D470A927F03ABC20B9D4359B56C460D464A852E7160AF0
22A3A4C149BB279F2445BDB8009B535A09719E42C714AB47FB17BF4529BFE56A
6D6A204CE84C1C9782232D33BA828AFFC18307CBE8A15078C3F0AFF8757C228A
4CCAA625604162FAB42E7CEFB48130AC7E78A6778886958A762B4444C2E9B7B8
72FD0D37DEF4E94F554CA3BBB298C699634A499CABB5A99EDF4F45782C15683F
99940BA8692D01D1090A8FF0D8968D4BFB0E1605B9A8B5CBD59AD3F38A0C9202
C15600F8C4729616F5AE78BF2E83A901B252F19F54B56A6ED0CBA5D46CD58241
4F5C1C8EB376BF92AF190A43101DBA3E79E296F9D98310A57C1DA93E4943700C
083DA73516FBD12DD7DF7CDB676FDB7B60976AE949EC83268B5651B99C79C908
8A3D255D6D2FE1F846AB1EF63D0813C76ADCFEB9DB2FBCF8ADBA638A3869E45B
8D117FA583F3196D8CAD7497C4A30D454CAD78AE0C468E0C06121C1FA790859E
623A7226C5FDB066D7717CA751999F3B08B681F7D7EBADEE425B381A50FD43D2
370A48A63029965C5A2FCE1F7FF4421ABFE0F4B1A42BB908AF4446AD1976FA13
A3D38B0B8BBAA186B85E4DD21C13178BEBC27D4E62017C6956EDC0EF8BD1648D
C6D78A725FA3624552DA1C6DAE1E9CC5F155D96A541ACB9D85B57DB674F00B93
07B9D1B1E7A3EA7214FBE6483D70BBA022D3D5A25E20CE83D22B00A3D7E037E4
54910B8687329E5AC211020D65EB212572AB0C2AE6273AA554200A7FE2AF7838
919A262626D044E6A8A1C44C84DCD9EC64A8D5EDCD9B37A124B04C3D4ED0A24C
0AE53D139521C3B45176E34029DD85AFAC7196A4A8172B8A06A4C20554D80492
AC2AC31042A16C2A30F423655CF3CC897D020A18F744011DDF9091696AAE6BA9
80A553D0B62DC0EE098F49C6B38B6AA92630781345340F5765532FE27E693EF0
033F889697A334913B9D64DF81D5DDBB6766E6DB7E988B4C536DADB08B9C3604
DD47EE7B4EE8A4E2D275A2EEA832A0DC8B75DBB66DBB76EDC2B59020618422F6
4A512B228EF1B284F8B7D904AC9B97EBA509128A1375D854CC9F01034789C294
3E443C9AEC154E1EE5227316066407D039A3A3C9CD3BE94FA42353491A458C39
6B938E69D9395906975F3BA3C3002FDDC930F4F42DA40794B5D75F7FFD3BDEF1
0EAA655B67B5F0089CCD45DD84E81E8A36E39F088FAFBCA514D8E79424BDD4D5
EB9911E3B59CD161B91C8147893696152B4FD22C8C500026518CCCCA41132A4D
91D38AFC457212C86A92D2710127474ACFBC1819882CC5A253085A0911E448FA
89405D100C4421C81CE4D30654407745184A5C773464CDB16C809FE61590BD24
C39FD1386E3A95102D5A3545EBB782C24416CF4586896C4A9315D5C2D703592F
73E33493490C890E50A0656E54D4C84AA03BB2EF6623D55AB7DF135D0A6418C1
9795C76E98A120C0A12C4D1FC4515E8832A4BF53CF3AF5B15F3D25FC34A6D50F
7CD506C913EB6D8D5756165D5485465B23F3AB2B2393B6B7E8F9D9E175E932AA
BC29AEBB020ACE87AF9BAAE62568D000CE677AF3E4C1F979D44B8BB6A0A09B32
CEB3A9693DB4784AE3E07A7D9C582A9C3A7C5D9390BF64A9808F9046A6C66616
17F17A1613E4124C6D6E2C1DE8E0A0977DE03DB7DFF6673999E5B298B951F885
C24C8CF39BE7FCC6AF1F7F3CC852D5C2791A5D3F4C86E3D33EE03C5BBADE0DA2
337FE3E4C71FDD55354CDBB23A837698E3738F3E1F2504AB6AB4DD10AF8FD51B
ED6EA7DE74DA83013E1D8FB0E8759416D240D4CA0A549E722203B20ED451186B
9A089C7AD1C010028B40AA49CBA42C6AE40C5408B576DA294A49B0C994364EA9
93B6A36FD830B561C3244A822C8FA50C3597B546358C25290DAB04A461BAE43A
D79020A1623652213EA49C1A12AC498261C1C1614950B086B45CB840AB12AC4D
4FA9D3BD8E46A0869ABE085DA0AD8C2A4B41EE057085A415DD2B4581310A0B45
40D7895EC668510471D2EDB9AEE72D2FC728097ABDE4C0A1CEDEBD0BF30BDD30
CA445764016AADB08B0CFF45FEF2C217BEF0C1071F24D87A5CE079E79D879617
25AB1CABB3843CEC07C0FDD3CF3CF3CC871E7A08BF4508C67C2785078651FAB5
AC987CD80FE7D9D6DCD284294AC92F885FEE2DB7DC72C51557D09DFCC432A3E4
4148E125459EFEC485D0870BC54BFE406EFF427C937C6878CEA8A723A9EAC4E2
39851FAFBFE10D6FB8F7DE7BB9FF0645DDB9891BB16956F3C9D15436C84806BC
F7BDEFBDFDF6DB39E115D5A203070E5006116D603E6C7B0B8577885A8290E38B
B4246E7B4BEF82B2BFE81E8A7EB3978F7026D6B2188E96450A431C2732146858
214DC34033E454F455D27201AAA5E602F24D164E4C4B8B421F72CBD1AA5ED8CF
55D4AF33C95751770E030F52C3D2AA413CC8E581F05024762CA5591AE3754371
F025F8D92A68B914A8A8DB0A8CE24835643B4A7DC54E932C50425D181CBA0ABE
74781C1DF07E1172140DE851F1B4912945201CDC6A64C8A61A6589067612086E
2FCA8CB5BCAA343CFC3D892A95F14157A03157278C7677498C23B4635435A67A
AB7D038DE6BCCDF379EBDB2FFCEBBBBF2945729878665DF6C3BE169B92A1E07A
719CA01B0AE345191C9E3F3281024A26C9C24C7671BD768E7B32502B761EA27D
9FDB863110EB4DADB4E2471E3E57D71B783FCEF31D97BDF5B63FFDAC169A7116
E17A95DCC2FBC5FC713FD58CC7875813E3E7A1D80713259398BF6C9B0D7BB4BD
D4714CD3C5F1E5C4CC1C94C4491C9A662B1E24384FA7A5B95E47120ABA6C561D
29D62E3CFFA2BBEFFEB21B2D024A38578C33B56DCBDCDE79DC4F5D57C4F52A48
5DD5AA39D77CE2BAAB3E708D2959B80FF85C73CA0867D2A3CE676DFE261A1092
ADD7AEBDF6EAAB3F75459A874680B7A258B633E1918B855C936391D49569E465
45B2FAC0073E70EDB5D7524C8E1B6CD099277396A800F903B575229B95B5ED23
6C021886D7F0AC22E1A422655843D2DAB8698365A04D10E5494CCC3A0A448E4D
92A524064091D798427E185FA8EC5066F5561AA6DF149C5F883545E534532A5A
2E585296ACB9830A57144902154D02816E8A3429899EC6AA283356E502B74EF6
38B147969461EF4C0DEDA454A83E8537465191E256DB6EAF1B049E1AF849BF1F
2F2CF5F6EE9D9D39B4889A8470A5F91EBBD2C84B430E62920DA45093E7BACC5F
9EF9A128024399968333AC9893D9C18DC3CAE036CCC2A412DA4199EF94ED30EA
CC455042380EA5F17017846CD8E5982C00726870230A9407283628BA4BAA2E75
50F837D822E5CA2C529329EC4C9C977BC9D249207F0BDB16F46B39DDE099560E
0927DA198277E58A168ED9E0E3C8BD290D7BE14291D945E9FF482D244BE866C2
02214D7FDD7AF9D7AD5BB7EEDDBB974D131CE1E28B2F7EFEF39F7FFEF9E79701
9748CFE2D80694708DC87C31469DC15C478793427BB78D2AAD3BD9D7E61359AB
8571CFC445E20FCD9EB3D81C98557D7C213A20D444E43ED5A61118ED78453263
2D00172AA925D7FDD06B86711B556ADD3606ADD09A43E969474DF7C434DB139B
6A1E18813680F10DEA4CA89A0312904411784EB81309A91DDCDDE5CE3BEFBCE8
A28B18775D1E62AAD3CDA300CB4D0B067E3386246F44B2192AF32331AC98764B
20ACE6FD8A85DC693A465DAAB72C898AADF1B8B1A826955A74F9A5EFFACC2D7F
51F564CFB29ABEBF5255FCA4278570823EB124D266F1A02E788606515CCFC793
EAE22042D578ABA6CFC5C86151D1CEAD8DF973E6ACFBB39EDC80AC0313777DEE
AA0F5E7EF9B2231C5BD501D4D4CDB3899B9BABCD4028DA4AA5D90F8389385AA8
A4E03AA039102FC386AC39DBAA54D40E4A77883B6A1C8D010CC6EBBDD5D0301B
69342F0BA8F089B0B9803FA8FE485D979746546530270D6AA8BB2759172A23B2
8B32A105DA0CC82DC0F1AB4ED84BAAA3D96A3F53D73A88D0EEF1BFC7A21764C7
A8C1E021BCE79E7B50252F1B9A5CB40847F64D8361732752D38F95D9CC54C3F8
57C443A83B267B2CB9F0856C7D9E808898D1D9F5FD011E69AAF5C509D8B63235
35B5617AD2B14CE112223857298BC3A02C0990FFAF51757E04E66839998F2501
2D4C9148541494AC1D4512306E73B123B08677AD8961510608E79C468204D042
CCF33EEF82A81B1842A266A2A70D4E529C6954F9E3085C3719B8B12F22C659A7
131C3CB4FAF4BE99B905642BB952D0066BA3AC9F52CFBCDFFDDDDF45EDF5C73F
FE3161421C3F9C4BFCBAACD4E3CFA79C72CA9E3D7B38BD442E7593978F6C95C7
7117BE876645DC102513D58CE0AF48C9A850531D7939FB1EAFE09B46D9C00D7B
496F259811FCD6E4E4244E064A8DA55804AE6B5EF1EF9104304C67629E4BA93B
502A0EA03E946558A4674A02D2B8F9D5F0A7DCD39864405E6AE54696048970EA
A3C0FE3A5AB57C8C46517CE5DC73CF7DF4D147C94C244E4A33A1AF233D53C807
07A73F915F88702638E948BC3E05524593D3A9A876A0959941D7F647569D9566
220F023582543DC739E13165A7D9465EE6D81BA5A867A90DD55FEC4222C1A801
ED55C15CF5692B98552B71E682695713D5EAF6904185E0394DC9EAA59D742431
572602A50366F41B8393779A3BD1F0C03532D63A0C5309B8B31ECE9CAA3DC85C
930AA44572D651411F6912B1EA8084DC6F4611716625B1533420CCD5D30369AF
9EA7A62AF5B258B18D3CCA8CAAEE7B22056E433E3A1B0F8F0E5EDB0000FFFF49
44415420F75B0D73B59BD452A9D700E8A495D12D6E77055281C524BCDE3A38C8
F4BC46BED18343B89855758B16EE6FA9FA2ACA0673AAE12B567AA80FA70DB443
6359BE280D2692FA020435C8512E2C18B27037086F575DAB2F9FD9D51F074F02
DB69F53BAB0A545323B68C5ADE5BD4A1DEABB8E0A58D0674CCE6697A7BD7BEBF
BDE26B97DDFDE119FF505D57078BDA88322643776134541782A80227C10907DC
BD912D8D8CD73A4BDD54D9ACF66613817C19422D87B8D158913B1B56ED593D92
018D180ABD92514EFB4959D7C7A2176426946E47D5452448F067D4CCC826A6D3
4E07BEACA61FF5A0AEFB8C8E8EBEF8C52F7EE4914790C651249453E07058A41A
5401D17460FC82C31163FC03D1214A029C9540422F52FEF1BFD1D1D6C4E458D5
11DD2B45C3884CE89512242409D6B898BC56BC20FA370CA778D40F172F115EF5
5A4302551EFA97D6DCB8521E73B818869D770A6D5AB49C41D1231ADA6845EF1A
1216993BCC37FDFF597B0F38BBCEEA5E74ED72F6D9A7CF999933555D96BB3125
8043800B978417E2102081406E28C6180CD8B8C84D962DDB928BE426DC2BB621
260408B9402EF5BD4730EFC20F880BCD5D92D56634FDF4BEDB5DDFFECF59DA1A
95843CF6EF67F9CC39BB7CFBFBD6B7FAFA2F093CA8CBBB6E93E59612550AE23C
C65CC2750C366C9A35B3DD71E7666B3B774DEEDE33552CD75C2F886AD0D46B36
00CD08914F3E01D8A278161C05475B69C16980BACD84F2CE77BEF35BDFFA1676
1AAAB178D557AC58313B3B0BF94C87453883B0A70A85A1C8459E12D2C775D75D
77C71D77207ECBBC1EF9A0FCD3DAB56B9F7FFE790936886F5DC203FC19481214
AAAB7822FFC497944A257875F46336AAFCBD24019411941708DFE1B7863CE0CF
3C3FE84929F5C94794047A0FFA1F2101C4EDF94FC4C7A0F2A377209EC59A0D2A
27E8B052F0134E3881AFE219606317E19FC37794FCB966CD1AD698F0596A329A
E121416FE1ADFCE868640B16180F69D9B265F3BB76551430E2801B5BB06A03B1
84D3C857571E18DC4B0D8AA9DCF351D2A7FA3A194DAF95D39935FDB5F93D6FAC
D02F4D1A4D8C06B5A9E902AD2AD37ED6C454EA48CCC858F1221384E72E272AFA
A64D630BCBF6E517A8D9226F90AC20D3AC6CBA66FBE5F75CB02AAB1012B1D63C
42588DD1B218780978BA784E50768470226A5F6403F27AAEF1866654068BB33C
DEF762B24C191AD9A74FC7F98CB8DE6D9ACAEE26CF4F0DAD3AA9512A37323B73
B3898AE38F0EE41766A6FD449A5A75EB2DFDCECF8AB158B6D97162C9AE954B34
1ACC523BA4B9E3CDBEC9B1B231651941A69B5C8805838E57CA75BD3A990532CA
CBDC87AFBDF723175C926B356A7AD2B79B699D86EB8373544925CC58CBDB37D0
A51C8DBCA24FDBFEA035D6B2756B76421FCA35662BED74D8512074B22B3C695E
C7C6B206B5C85A789D9FFDF38F5E75E3F736D15C37EB2DEB532958CF370B9499
A3DAA8919D5D5535772BC8EAAA13C2ED0D5BDE4CDB4FB87CA351273355C81AD6
646672A493EEB41C27ADB0D9790705917681B2A98FB85FE4339325851588BC16
679D75D6534F3DF5ECB3CF46351E20484B5A39E25B48AC8882C72DB93F0B7294
DD60EF60178086056C981FCD242195F98AB1A3C635849AE830A9684A073742B5
B7CBCFEBEBCB6633A9783C66EA1AA0E2744DD98C2C0916C9455F7C61B46E5852
5540BD5237490BED458C17254198FA2981C73060A002638B6250B9AD553B1A75
90E9ABDC25555BA099866A59CCFF8636444BEB553985AEADC5E77A7E534523AC
30F32716378D84AE27352DD6AAC79B8DCEEE3DD3CF3DBF6BEF9EA9B073880ACB
45A5EEA2B973100B6FF127D19D8F6116401240B7922FD1324CDCCDB0F55EFDEA
57F3DA073D38BF68272FF1E58900D8BC79F3962D5B9832D80EE0458512CAA731
5F43F92EB82D3465448945E04BEE133EE32D56AD5A259C0E07BCF67F28EF100F
121E7908544CDAA5975E7AEDB5D76260FC2EFC0AE80CACF57A811D2E09A0CB4B
EE29F5AAE731CF7822E401BFD1DFFFFDDFF3978F3EFAE8FEFDFB59C541AC02F2
EF101768CFDEC29E39A2248836758271C3B30A071AC40CF3D0F7BFFFFDBFF8C5
2F90622B1D49A9278699BD9E7AEAA9CF3CF144D5B6533A35BAEEEAC4A9BB8D5F
D3B994BA87628D1575DA670D649BAD2A5D48CB06D213FB1C2BE17733B472CF8A
BD5FDBA502B55A70F259A7EF19986A8E16E952F7C4FA692F267E67B712ED319F
3ED229BCB076EE75BBE8067E9FCC717E6327EB3DDD949E6C389B56F43B54BC66
1FB2E078B901FD443D030B4C01C60D9FB37CF9725612A5A865DBB66D1B366C40
AE842227B7F5FA13CF78F2AF9FA5C17A625FAE1573692E47DF3C40A5583248B7
33A5559FC81FE82BB5EB94C8245B5AF3C4A74F7AF95F5FF0F598ED9BCC83DB6C
47E49CB59F3DEDE5C1DFD13C65627DD9662CB1D7DAF92D55EE101B20778E826B
2CBAB79B9C1F6D262B5AB3C996F8B0DF8E5919D3EB2BB5F6D729A5671AEB3E1B
9FFA9A59DED30A627E86FA6A1BBA34D61A2BAD3C30B72F1B3BA9FAF073F90C0D
ED1BDD4DC538DB9F03E96EA37EDC55AF9D5F9828D7CCECF105AB569CFFC2FE53
66623B02D3FBFCA8D7DC6F959DEEB896AD047E2953FF5F35DA479A9DC8D78CA2
5EDF78E9795F8C7F6521E68D55D315B7E18D0E57F497DFF0F8E8B3BF2DEAF18E
DD39D5A567CB9BE2747B27E6E4D269FD8FFEE88F9E7CF249A6B1952B57F24E44
B3A9A3716A0A9338809E226EE4E825A3A3A3CCA6CBE141A122C81B138560D823
AF7BDDEBFEEAAFFE8A35C223DE5CDCD10297221502D087789BB0D46793974917
A60C5308FF7410186E91D11B8ADF859A9A1B765EB65912B02C8A2B374EA8B2FB
ED107774D1CF8BE800A1BB6A2FB76449A2A148027C804DD053E17B31E75EF2A8
A12D6A2EB03A94E43095CFC7A310C4D4F04D3D907E96EAFC40353553136AEABD
2235259E5DEA30A35010D676CC8EA7E276366E654D23DEAC59A562ED85975EF9
F56F9E679BA0D5F69049AB32B523C8191401C3E195E3C98D06938FC12EA535D8
929A03F15708CA29B3095601240CBB44124011860B28EAE2871E8A8E317273E6
7AEBD7AFBFF1C61BD9CE409E1206C03B190D234143A890121A65D5986FCBEA0C
BCDEF018FEBEFD848F2609D0F93D085B5E47736A79E40F3FFCB0A4EA335DF238
D141E18892400C267CC9160CF36ED03AF362A4F0471B944B77876841DC1BDFF8
46DEAB6C4B7DEE739F13EC58ACD4D16C02C48DE15C92843A1C52CF2C72178DEF
9738F4F85A5E8E99E9030D471B4E1033FC36F9C75D39F4FCD8FEC2F379E77EBF
45954E2C6EE7FDEE79F9ECBC5BFE5A517537B6695D7670477981EAC1D8C6130F
ECDD9FF952A37E9939E00C68B7D7E7FA1B0AB8E6758323A7E9130FCFD227CCD1
7662EACE5ABC499D982ACB3AEEEA753B1B3B1438FB0D2A170EB3C1A609CFB060
728018A22E4A50356ABF9169861956CA81BEF08E53FFE867FFD753DD3D947E80
82E3A97E462638AD465F20FB256AEB34B469CD6CF3003DD61E988F954DC71B26
3A40FA70419FAD0E59F979A3D3354ADA47E285AC33FBA84F732A0367CDABD6EE
7B66CA0A725D32C6D6FBFBC60F1C3F3D3A7F77B7DDAEDA89A068E78DCA9C9722
AAA5683C5836694F5DD54F899D5E69EC9E919BCEBFE5AC6C8BAA9712EDA7B5FF
92DCA53773FF63BC32324977D3D04C6A8E3A6F7CD389A7FFB7F73CF8E59BE87F
C428A11D777D67673FF5FDEDB2C6E08473371B5266DF8D41ABE1D14DF1C0EEEB
6A33F92BFB5AA56EFBCE26F9FD997E375159D348BCD2D850A57A9CEEEC582DBD
1BF7AD0B285D4D680F060BE3EDE327D7BE7C67C7684E903FEE5D57D4DCB6A862
147AF9513773341621604120126126F2A79434C9D208F64934B677342F2EDF41
8032B12FC0B8842FF19790319215CD527FEDDAB59A600741690F427B100E19E6
AB7C592E9BCE645261064E9898EFB761132CE297E9BDE070B088382F1DA9849F
F604C062741A36012441A8D62D4A081807265A45A95C55350FBA6AACCABF9A0E
75350ABB98996C2493EA786C8690D3E11D161B1A1BE87C103E5A735544C18EB1
30B313193B9EB1622CF7E295A2373D3DFFFCF33B9F7BF6E5BDFBA79A2D179280
DF236A16A00B157C2FD18C4614191DCE41964802904510F614E53F7977F10778
60C0A6794501EB1F657651EF102846381ACC08FE57EA9F61D14B18A050280041
8F1F0D9FA3F8D60572045943FC0AF7DE7BEF05175C20987AD2750011D73F8824
004D0BC62D8F8165D57DF7DDB76FDF3E0430A4D58F6AF61BD6B2D1D123C648CC
E5973DF1C4135957858E0F1217B83ABE76DDBA757C26DACD4364E2573E1FC16A
BDD775072AD8E156F6C1A4BA30F42703402A1ECC6A8801097BA0A19058D9206C
AC915A02D7213B93EA54326E723ADDA473880A29D21AD666E5EA74FDDCC0686E
FAFDDE582379E0F1E995B59836D0DF58A83769BA71D3007517BEF8970F3EF3C3
8967EEFCCA4F6FDA95DB6156EE76E97C9B4C3D714BD3F1C9E5C93E9F06560DD6
2EEC763341F2535ABB594DACD3E3B37E719B723E3001BCE52D6FF9D18F7E043A
E13DCF24270E4CA4F94AC35424B6C156D07A6880E374C2582EF3E496A7546F83
F56D8B6DF65432736EDE6CBBF53B66BC38B9570D50AA41D7B5C76B54EEA34687
F241A29431698E1979A2CDEA45B23270E9C842BC4877BBABF61DBF9FF67B2B1A
54A25C4D75C62C6EAB52276EB53BDDBBE8F8EEC81E673A3634D65898CE0C69B5
4ED22EFA414A0BCE6F74530169697D53771D9DD6A2D97DB7EC8FA7529D4B9B5A
3B30FAD3B18F25F441ABBDB1E8F5299008AD3B1238D3F65546470BB49B077D6B
811C2F7121151AA7ECFB7A85CE9AB047CCF67A772477C25CFC25EFFC708DAFA1
64B0A699DD9DAD9A836BDD572E0CD88219F96A6EE6652348F9D9EB0DB7DD696E
A9939FA06E8C6EAD66E7356672CDBBC96F2B47E29E3D7B783E51F202BCA96896
60F4C0AC629302920BCC169133D8D0D24B15B6B2EC234900E17504111E713FCA
F94BE43DFC01EF7AD7BB7EF8C31F62EF083E314B054D4E0DC3035AC8DDD14B52
75914CA7538303F96C369DB4177B156BD4852458743B6A8BBDC9F8FF7807A452
48028C580622097A36412C6213F4125299A7F724013AAB86EDEBD46787424546
F3C3B6C62A6E8C6C229BD57E43F14D4BC9AA830D90156BD7152E453CC1A3B64D
23E593E57BC6D46479EAC0ECCE5D7B77EF3D303B576EA075AAA99173B0A94B10
B61106DB956A52A85422278E96450A0E2EB31A8D3D48560F7234F543119CE8B0
88316A5985830F0F0FB30C97F41BE8AA7C5B66ACD8DE7C1AFF1945D566262BAD
8F25A75EDA55027EE4861B6E604D19D202B1AF3F8824003603B3187E0A6056E1
7D12E866C4D6B443BB951D314E00DAC05B48A2543471480F1BC8F0DDA03AE12D
303F14AA69A2082333954FD67AA82C47B30990632308AF2215B66EDD7AE59557
223D8305C935D75C73CF3DF7A045B3A04B512FBE1546D45CCD57900CF96EA2B4
AEA57D3C1FDC5EA2F57C235209817ECCEF739487878F05EAAF50513F39FDD07E
2BA8153F426F48F7FFFB2D45B247ED86D3BE627E2847FACD83F357145DC74F5E
3BD2CC4C276A63F15BA6CACD207B5DA2DA678F9C5598FEC6CBD6E599FC2BB5F9
BB15E141EF8B4A7A213FD16FC0FA912F47BDB8142F1C9FC02451D092ED2059BB
663ED539A571734337F6581EB537929530BA37784923A97F32D54DFBDD7B1A23
9581399AF588B579BD917073A98C37DFAD93C972C23A3FA54F5ACE374BF946DF
BCA65017546F4AE61985802E20DA4E746186BE59CBFF2A51325A9944B2E17613
6D636834E7B5F57DCD69BA918CEBC8BB52A3CF0785856433B01B571473E6E995
1B2BA9F414D53BFE8DA956D0C8DF3AE86683DAC282D61C1DCECE972E703A1E59
5BB38598E13BDDB90D8D81D8D8CC8DA5911BADE681A6FE60BADE4DFAFA54EAFC
5CCA4CBAF737CB2D7273A5FFFE86F7FFFBFFF38DFAB69436E9065FEAB01D6775
1343E7A6BBBADBFC4AAB5E31E3B97AE746B2CFA7E415547C90CCBA29D93EF2E1
18B985A82B4272E792485534DB42A8319A7BB2C40379C4FBAF5EBD1A396FBCAC
088661C741F5416488FF647A806121D8390725013356E57D0E167BBAB2EDAEAB
64E1F4F0D0605F5F36196796ABDC8EBEA7840924415823D06BD11E4A02146749
63588A401418BDBA33D804CA36385412C02C8024087D4D4ABAA0BA2E50FD1E9C
C5CEC67AA0C047D94009338892F1649885622A479075D0327055CC83794460C4
F841A6EB2990896E27D8B3FB004B82FD13B3730BD54AB511B68453516CC3D7C5
A3BD04E01BDC1C2E63307A7C3E864C86BCE5D9478487ED35D68511921157CCE1
46FA922C52EAE1CAF1ADD0600BA9F4808E92320EEA4118E15948848F26D2C878
90580581CD4B09CE4587363AFE43D904CC31376DDAC44C1986CBE38F3FFEA10F
7D4810A425A10D8339761629F57C62521B0CD9008B478BD4A2433008C88714FD
32F5F3CB22D95F12637A285B479504328130D16097F07DE072C1E24AFA009E2E
7B55246E2613F36A4E733065CF6BD6355695ACDC16C3BC6A8A8AC72F7CF5C5E1
4A21E1B7D2179DF0EC579ED69DC174C9AB7EBE44A5A4B5B5A95F6CB50752B12B
4A29BB601A73B50D0399D2C0FC5D93C98BBA7EC669DFAC4AA15674E2FB367556
EACB2736EFF70C1A08FA17E265BA9AC9A92F7143073B11C20FB3243D6CA91780
417E2D8C48BC2FEB13FC5EA05225BC630B349D8ADFDA28EC1999787481924E6A
811A5BB3B17AC3B9C3239772E753658CCC66D6AB9AC14871CDD675A5F98952AA
C5F22FD98A35C84AAD6CFB1F4CB647B2C1CC24E5C9E898DEBDB47C76643233E1
5F442C07F56D2B8AD7B9B146C9B8D56827EAC916658673CD9942CDDE697729B7
B17F66A83874C1E8EC0D5303A5FCC24325AAA5B2773592CF0D4E3F56D4F27E6A
86EA9BD94E6A17AE527D3049E5BDAED0685F70BBCEFB5D7BD02A24127E393E7F
D90CFF9CB953AF5DE4B39546BEEABD33D04AD60DEA7CA9993B60D41D2D63B865
8306BB7AFDFAE10ECDDB35A73546A9994463458BAE23AA51AA99B02F59B5B0E2
05EDC2D3ECAD3B5B453F76870F62833908CDE3D8397842D86886818D297B19CA
A89C0657B9786E04743ADA4FFB8837C78191C051810C25A87AD1A0E0A21A0AF9
8F2E5DFC33DAF0C201C23FE6F399B19191FE813EE6BCAA3764E8CD51AF4D4CEE
1D1E8DE33BE02FD83CD09EA24DD0E4832A3D50D71AC82225CD5D0C0C18075D43
E1E18585012C065858193EEAAC9508080D70CD57E81131439590A9A695B164DC
0AD56733A1DC39CA53E47ABC01BAA85C539E62259602C763B2F03A6D6F6ABA34
3931B567F7E442A9EE74017DBDC84D60E6A3BC560F8186FC43DBD8CA7B45FD1E
C2BBE9480AA6D6937F1B366CB8F9E69B01D60FA515E26489462CE7F316450E28
ECF7CB2FBFFC81071E882AECC71F7FFCCB2FBF4C3D6FB5DC0D0CFD7013847A9E
416888781D7C063405CE07B30673078C04C00B81E78C30943C25E8154EC31B83
E145C1A5216650C0258E35A9355952032C132BF6103AAF02F359EA96912B25D1
36F4D590CAE7E05024A5205269CC577DE2139FB8EFBEFB248A23687D520F2845
D17468FA83AC8EA4170B9E20DE5758BFCCFC625AB71637876DB7515B51B3E636
B55B691ABC22E55E3FEAD6E29DDB9F1B207DDA64AA3655F5AA9658E1E727AE9E
50F5B45BC6E86A961AA5F4D5541F232A927E7976A8BD6C7AFBDEF47AD72A68C5
ABD5D3C73B66F106B3ABB7531BFB562C1BDA31F10A51B67347994A8171832E89
EDC84D04ED19B98C530A9627FB5ACD7D9E4E5593F77E405E7390F4F95C92AA6D
55BB9CB5A9D9ED73F5B2D952686EE514DDD0585B5CB9EB9EFD94F0D7C4E2AF5C
64C6AB8DCE761AD2ADD94D26594D6B23F57BFDB574C3A544A751B603EADAE477
328520369F2C0697F23459F479C39E1B88FB1315D589662841B3CDBBD2C9B9FE
E4F50BF377B4B4497FEDADD99D892A3348AA1B0AD839D718AC9C347FD36ED2DB
742DD17964F7A5DA3736FA3BA3C5ABA74C67CCDD7E603046CDA6D9BC2547AD85
C2B54A12743364D59424E85CAF343CBA857541B2BB59E5FA77C9D842DEE544B9
3EDADC26DF3C2E3FBCF3BC5D14A3A1AB32B3FC73D0229B0A75AADE4AB1F9D1FA
CDF3038958BB95686F5B509D696E4A9D44C9176E99B3A747DAF74DD3161A5C48
356F377CD63A59F9A18E672B6F8ADFA424A57DDB0558217CE6CC5AA1C081F0A2
BA97E41A6199B055D1F61C5FF216433101B60C2C605CC277C316A65EA4817ACD
2971BED030487DCD9A355353539FFCE4271F7AE821B9E7229147C7812C69388B
1517D5D5861F1A1C1C1A1ECCA553CC79D54E40B23CB18E196ED15E374AA93B15
614011B46AC58F7A1E7F1D8E79CD9594A1450DB78786892EC89A121846A07A73
87918640DD9CFF0749C0E365B61FF62C56EC80ED15CB8A29F4694DF53E0E4D7B
9574C4B7613ED0757D9601ADA6DB68B5272766A7A7E62727A6AB7547C5BB8D83
189C9871E93BBF44448BAB4E2ACBC49514FD468CA1259C7D7474747272F2D5AF
7E35CFF6CE9D3BB106E82B7DC4F3519C053E8E9546F11494B575EBD6BDF8E28B
122945B017FA081461C866A49022E905CEDFA057C48B751768073053E496C15D
F0E8A38F9E7DF6D9428B7C1F50B3804E0B8234C8FAFEFBEF3FFFFCF30132CAF7
07AC1EDBA770C2F09DD1FAE2689260495416F13124BD083E07A81CA6CC1123ED
51F79ADC07294660DCA79C72CA73CF3D274652F47130022459483652F46E9852
5E359E1F24560085427C2F9076FCB2A55209B4B12A08F626C9EFA6736EA06DD6
CB89E69F57DEF383F6FF540EC947022AEAB1CC68A2DB705B6555BFCB2CF2120A
FA569A97EF75B7B2EE648F5FD26DF62586CBEB5EBCFEE9418D3AD7256A57B654
49F0A67EB7501C6B9F72E0FCE72845C377AF9E99DD6D04CCC7ECF696762CD0DB
D7FA522C161569C9545FBB51F2B2E1DFAD98D5355583E39C2A3AD6EAFA809FB0
C83BA0BCEFD4AFDBBE9BF7FC99843E3E7BC5FE74706A7D5B83B4DDCCE5CD6DD9
B643EEB66AAA418DCB75CAFAB16B49F7B29D7C834A7A2A13F76BF596DA43C911
2F359D988B6DC966666B955B83040D0FAFF4761D98CF69E329636AEAD37EC046
F8E344975AF67C10DF6A55E226F99557B9F664400B46DBF04CEF0A379E333A37
782B3714F676E6866FA47A821AB751DFECABCBB7FD3AA922E889C9DB5BE419FA
E5BA6F396492DE1C4B9B075878541DCDDA9261B196A278EB8686D1185AB8B9D6
7F2D39734EFE1E3F3970DC9FBEEEF58FBFED9F2BF56EF6A6B467E7C76C6B47C0
A64387EE70A8364E9B27FB7CBDE9F775AF2952DAA29B595296E946D25FE9F7FF
A1A86DD0128DA0B99D62A63D98E8AFD6CB0D95B9CE0B6B26F54CB55B02B9A25F
EC12555D3CFE2057105BD497ABDA2F861E24F11960FB3375457B3AE921DEFBD7
BFFE757000893D44571C3E1B2178FE77EDDAB5BB77EF068EB228349A34D89220
5B4FB752FCD430B56C3A3D363E32363CA492D03525E014E3EB9517B024105688
3D190D1A4BA840316B03F13A0310417E003E8BDDDBCBC6E9C1534312F02E0E25
0185BE25F50826DB58CC3015BEA9CA208AAB0C9510A24E6191AA73146C4A78FB
B89589C54D309176D76B36BAA572BD566BEEDB3B3137579C9FAB761C952FC4A6
0306CF9C1AE81CBC6C92002A0064516B0073AA47DAA11CD1B9713867A73078CB
27338393EE31D14BA2E7837F81EF8BCECE57499D8854124AD59818A7587829C5
802041BA0285F9CB781C9AED48311D337A44B001AD01BB840709900C297043AE
AA6223AD16BF0EB33C245C8AA623EF1265C74C667C7F9E5B047B0F9704147134
41BF8631046B402C658825798B256C5A9E7BB824401A352C09F047FC49873AE8
A2B2E188F7A79E658D97C554F39078FE016B8A1DCE3373E0C001556866266A6E
39DEE94B0F77CC8FB666EAC6EAFE57ED4EBE9820BD754F6374EA842C0D4CD02E
9766FA12D64CD7A72D2E3556C4EFDE677E901AC7AF886DDDE794C90A0ADD3BE7
0AF3C9B9CF37E91C5DCBA432B7353DF258031FBAF9B85265C2D9E25A19DE7581
D7216313F1BFCCB0C4F98017E4518D8F8FEFDEBBDF4AB971D7D2BACBAB5E9B8C
03961198DD54772870E79B0AFCB99FDC698A27A8D636ECC01CA0551AD527364F
328F8BDD1EB7DC4ECB4AC63F9E327DBBF6E559BBDCF13666FCA4E35DDBA64E8A
D28D2CE5B5B8D15C9877143A92997513D54C8D3EADA5BC60F4EBF93D131E7FC1
54E8B4137EA6459F207D34DBB76F501B76F4F2FEB93B28ED15EAC9390505D1EF
8E6587E69C367DCC74465BDAF3819DCAB6065D6B43D2D283FA35930AD3F3DB79
7DAA6B525CDFC492BE99BEC7AE6B21485FB34FB7CA2C533D9F0A5F3E69AEF802
D9B1BE0BB460F750E5FB3E6D98A38A93DB46159DF2A356E9535D65F7B0CDC16F
DFA6651477C999D8EAC7DD42E7FAB964979A964EF76668BEA25D9908622D6B93
9D8E2F6FED9D769627DD4A9DBEDC50E8A56DDD24C353584EBEF264B84CCFCAF3
F699CF7CE6DE7BEF4571226F015E08DEB3705722DF4C9A83495E22DA49C99751
8000C962D022982B279C70C2DEBD7BA1C24665C9E1EEDF25E8F7F0171DDCB0FC
0056EE78D0FBF6ED8BDA11E1E654F7B162DAF0F0D0EA95AA5D81DA549AA2ADAE
EBB04D004920EE20D84138A25065F00F88246021A018962F887587B4B10CF021
B411D4C9101E07F1D1345BF55D60511016169866DC58042B5556C36295836228
76228B0A6105F5D5F1CB95FAFC5CB954AAEEDFBFBF5454B9B97E9839CA3601C6
BF6CD932C0B7F22617A349EA06846145ABDE0E57188FC1D931EF92D72F251E4B
EA18A2E7DF78E38D9B376F964A10293BE45F590CB0BA2D1D7445A5A530C82168
68F89E956B3E93B930C2D41870B44882425B9269006152B892412BCCD180CA09
060A87128F070DC850EDC5E7A3090CFF247873B01EF892934F3E99D570A651E4
35A3A8F888DE21411E04481CAF056F1E8822FE57D243652196A4A8D1A136E812
EF106C6A1EAAEA2316625F4BD8461614D178F46B5BD27A480E012A87570AC56E
3CC3C0C0401ABEDE8374545697795CD2DFE95AF9C6C5311A98A5BB48B1307EDA
06EAAF2D2B3E38A140EA3F1B42D5FF0369AFE8B15B92DDD94EE23E27538BCFDE
A8998E6F7FBE5BBF8B56EE5AD3DC3233976ED0CA78EE0D235498ADFC438BCEB3
4E7A7EF48527F616A63334A0CFBB15A55F5D1E23C3A2AB1A128B42F91EBF38AF
C533673EDD2DF9DEC3DDF1727A7EBCDEB988B49215DCDCB5BDE1F6C08C7676D2
480FB837EFB79A85AE598DA53A8E4E469906EFB3E67FDB4DDD4FD534A53E3CDC
583543B7109575D541F8928C8255BBB555888D5A863F37B7D0D5299734469617
CEBEF8F2AB3F7D8563B5565F7BDCEE5889B62EE8D5ACAF55733E554CADEFDC53
CB27EFA0F3DBCA47C0DC6F335175B576F5013600CADEB255D49CA3A27F2159B6
59B9CF4DD763AD9CE35DA31C65E6CD54B88D9A0D0A36A6ABF9BAF109D206C97D
848676A48ABAF2D29011A7FE8EF9B9014AEA83EBE7A6C768E8836B66F55762DF
23E70593D6BB0383E46C5C5B35F8D141EA72B351DC677F3FD72E5614F65E6998
45637763975C9BEE9BD6543441CF9D6399C9D50BFF738E3E3EAFD6EE6ECA5492
B564932EA313F69DF0D2775E4AB433A96EB2EDB4EBAE022B35E30923F0D1AE83
F72C5601CA1F227F02C0CEEA39A00198A2F804DE6BA266B1C2819CD12516B314
63CA8E408C50808DF10D5F025D33DA890F5B00AE0B38600F26CBB11878EB5BDF
CA7F3FF1C413303D10C743585969E814E47299552B98552ECB645286AE0262ED
2EBF5E1BDE21A95D845F088EDD285E69541228A7BF1F1C0C8A6A08B2634BFBC2
7315CE62684B04C27C15B044C082286EB3AE6FAAA085AE85718BC5CAA9501D76
E4CE763C1BB3E328D3ED74DD72A93135335F2C5667A70E341A61C9854209B782
45B00C1FD6197FC08B53CF1D246E5F245748EF49796BE13E62221C8DB3A3CC07
169824141D9E2A800F0F3DF4D0D9679FCD2780316DDBB6EDB2CB2E43FE9624CE
F34262B4604CE242111716F83EDCF4D4CBB54742AAE06C036D0D3A05E2E102A3
0D162CCA08326B59A9BFF2CA2BB76EDDCA5731EB671D07AD80A3E2506AD90514
081873D1E00A1D294E103DD6AC5923DA09F82FB610724FA39D5365DEA8577776
C438012AAD1037A61E123B042D9615E4CAB304DF0E2E9715C1372221C4310855
0BEFB872E5CA0F7FF8C3DBB76F478A8152C1F4FE8174D173FACA9FB334ABBEF6
2EEBAD6FF9B39F7CF77FEF7A68BA6F221B6CA9AEA4E5BF2DEC1FF8DCF19D855D
2DDE43A3D6F8C695B5FE1D55E61ECDACF5D9B693EFAADE26F7D21F75FEF8A9EC
CFED6AA23DD0D2CFB3D6EC3E75E7EA67682B8DAEC9745FA20F9DF577F73EFE10
6568FC9CE34AED46FBBE19294E14C43D9ED2BD1FDDE35535F7D1CEF87C7A6EAC
DEBD80F45ADCBFCDB33B03DDB119EBEC7C3BB068FB8CD52A7463353BC393C59C
3870AF31A9D0C84D176A5A3BDE186D7DE165AB46F174FFF8AA74FDCC44DB6B2E
3CB8DF68C4937E27D062F6CAE5737B5E29E4ADB946574165C4DD551F5FB5475B
A0AFD4CC5AC2355A395FAF187EE293A7B4D22FAED93658A622ABF9D317B95438
217EE51ECDE8B483FE4C2C5FF377DB7758D6EEA133EBEFFED157BFBD502E791B
1BC36661768B137CAE4C6F26FB67C7B9835DB7BB8F6E57CC63B493AAB22C0FEA
258B99B766BE77C0301D2D36D4CCB839B755F9D2F4BA699A8B0D54B66502679A
BA6DADDF369EB5285B757F48FDCF8D3B6E2B46D9627E8FCA53F910D10A32D836
EA1F6E561D1A2BD27A2AF8B1DCE644B76A4F6E6FA68254D598316E4EAE7D7ED9
CBDF7899DA66A26BDB09BB1534DB9D26297D57D1181CAD68700BB506A0BC2021
FEFEB4D34E7BF6D967F91B3E13688C9FFAD4A7F827DEFE08DC3221C1078B28A6
A05B623731F949332869BE0BE2974C6EC42A60460B18306A3F11F35B643E1466
46F31067676797D4CD86C244ED24CB3247860A2B562C63553461AB7174147ABF
0A2176BDAE788744124443058B4102E5BF89859B4D0BBC431BA9F78441EFB13E
BC4F8B0CA257AF109019C6D099C5ABCA8698D16B5A498BCD52428D95202DD5A3
752B2C6EE20BF56ED72957DBB3330BC562B9522C75BBBE42CC53F690C211840D
313838C44FE4254166BA4C74341F349AAB23DC768953E26836013076F03DAF3A
FAAB1CDB8680FF075C15B811F08C5F7FFDF59B366D42674A490317F84FE1E3E0
C84C6DA81F79FBDBDFFEDAD7BEF691471EE15FA389ADC86BE29B7FFBDBDF3EF3
CC33A17100E3881922D3229FC68C1E1A0A38FBF8F838EAD144A421B48BD78755
2131555693F9644426401E479404523F41BDEE922C6CAEB8E20A385E00F48680
DB119B05C9BC2D31D496C409647264F96088A0FC0D5204854210FC5141824355
59C6E380A70DD1BA5ACCFDB14CD8B1E2F743B67E4B6B518E7253F146B2434D66
D403ADE30BED9D3B33BEDBB453463B96A04E4557814A669A89C4F2567D8282F8
B2A03E4D036EDF829DA054ECB50BB3CFA8FD11C48895DDA65DF51BEE904F0D4A
F751BD6890E3196E62209DAED64B0EB99EAD9A7F69654DCA4DA3B14485B79871
9341CA6F8D959D26E9937136213AA966A6A97AAED8E1FCF3D726B55DDDA69863
7496797D0D725C6AF05DA772BC6FE8C47AFF4B6E2D3029E93ACD94CA064955A9
9909C9B1DE64538E2A359BFC91D38EDBF3DCDE5C7FE28C0F9FF1C457FFEF8C97
69CDB51A298588AA359C4E2E6C52366BD2E0E0AA85E484F78A6BD06A6B74776C
4AB1258B72737D9578D9E8C48746935395D2699DD17D54744EEA18CF66339469
B3C56098654BB57E1B75CDA9AC9B6EF7D7A9DBDF555392F4A8B5825882EA35C5
933FBDE9A30FDCFA0F566338994E97BBBB5ED54DFCD66AC575B2DA094795F3F1
D30A9ED56E0409CD0906C96FC52BAD981BAB93911A6836EACBA8B37F1D657664
6ABAAB273CDFE9B242BBBC4D7E61743235C546DE506EB43833AFFADE245879F7
0357CF6413306A99BFF3BF9FFDEC676FBBED36701558EDD8D4480D87058FFD08
080A49E5FAEBBFFEEB1FFFF8C72803E2ED2328875044A23E1FA90712030298EA
824D2DD503516A3F84F940F76182466483CF08B7CD2214A86AC8C3F49D8A8F8F
8FF2AE1EE8CF841A3AAB695D9104A13EEE1DD13B247CD3A04566BD4412847EA0
40840136B3AF4614024D1F2A09541FCD304EA0BAD6841163CB8C61B7C34BCE62
08E69817A209A90454D5B84261CF2DCC978BA54AABD60EA535BF42C80BC80B4B
91CD934F7A15BFCED4D414F826E201C2FA71F0E3A4817B548D3D2419EBE89C1D
8B114D3B59825AB1E47C187DB02424DE8B2587FD08C41B542FF3E480359F74D2
49285D16DA92AC4A383170B2A0BF89120DEA144B08969604B40175C74AC3C4C4
04CC88071F7CF0A31FFD685475805F886FFB99CF7C867F65E1C4F7E4CF5BB66C
8936553E5AC4186616183D7FC362808501FA150B8C1DD29FA2DE2461D6D170F1
E192209A80B48851180157970C0DDE87AC64EDDDBB17A0B351B3EF70AB8507C3
2F2B85BB700D510818C00F8241F3C642E29745D6765A093DD9F4CC4C2E5B6B94
B3E9FA2983AFFBF9DEA7694495110C05DAAC1BD07066A063C4E6DCE9612A2CD4
CB41DE49375755DCE34F78EF8E3D2FD5B5C9DC384DED2A698655F7421A2BE8B4
C0268CE1975BA4399AAFDB46CC521D6514804A27B228123054CEE5545FA759F6
D2E16F1D153136B456AB5FF5DF654155A094498EB532B37772C176C9D647CB29
87FC1C75260CBFA3366F56F5571B745EDF747634CDD6B8956877DBFDA97CB3D4
9ED42BE4F8CAF363C5A84B851895129ADB8C1712297EA7C116CD9BFAB06B2557
8FEE9ED83DAE6516B4A6DEF1DA266FFB34F92A8EB86224B773FF4E3212635EEB
00654F3C75F58BCDDFD07ED3706C8DEA06C53BC9CE7F7BE75FFCE4D95FE49D8C
5BDE5BF350459A27A746CA2F1667ED2EDF6D95629476AC76CC8C3BCDC680965B
48754DB7C5824A1B6D349F2D0CE45293F624CDC4546E51CACE36DB4150ABB394
75286B67679216C51AA4B5B485786076B43E4A35629D56CC31F3317FD2253313
D8CCFE6A09DB6CCCDB0E7934DC3FF6E76F79E713FFDFBFED9BDD17A848A5B6BC
B06ADFEC6EB6C0E0F9E9EBEB63D2950A2495F1183A3FA385C4D21851A80B7C9C
25C18F7EF423563504AE2E6AA3C3B729ED46A225EE62DDC2BCE69180F8A3C525
517EA5A121098FF58C33CEF8FEF7BF2FB63CEF20705E5D856A5531D7D0506174
74B830A840334C5E6CF2A39200DC5F22C6D186E98B416342CB012D0C45ABA644
9AD6F3BCF75ADB532F7C1746A47D651F2C4A02D54D4E69F2E487B8437A585FA6
24412A915CB439147C8D32F37976C21A2387EFAECA23DC80C542ABE9144BF54A
B9D6AEA1CC4AE5A77ABE1728694776C28A9909405A22F42A65A251D1CA93C89B
9C27873779D4B92CA1DA2388D91E6787638E5708656202591AE52C4B2481487B
AD970C8E50019E82AE907C5B04302115F8CB37BFF9CD3FFCE10F212AB41E0E9D
DE6B5C23AC100B043F18540C8123C5CB4AC1D19D77DE79F1C517F3DDA0ED4A0D
334512A225BD073E74E946201388E6C0C82B3D9A77086313E545DCA051E7D297
BFFCE5EF7EF7BB3FFBD9CF60C780C781F6B40880C4E1DE21019F88566062E1C4
D440701578D49899C36500F630426BEF7BDFFBF8E44B2EB944EAB00044810143
E26EB97EEBC6EBFF2163FDAE5326276ED81DEFF4357FFC8BE99F53B3A0E9A5C0
723364E6DAF6AC99ED1AB39BFEEA3D0FFCAF7F99B3C3B6C00B669B92F95475D5
90FDAB729B3AB981A6BB60372C2DEBB6824CBA96ABA70EC45CD3E95814BFF2E6
2B6EBAFE965AA3AD42BE66BEE93474DF158026EA614F2907603ED72DFAFDAAD3
D882F23FC5D33C79E435975172221D50DB1F1E1C5AF38EB7FCFC5FBF97AAD51B
A63BE8D2BC4DC99C65CEF0E9F92699A9E1B9D80C6BF3FDFBED723C96E834BB26
A54DCF6D5BAD91C0683A9D6A5F96CAAD55697B4F9315F27486EC36955D4A04CB
CCD169B7EAD61A69ABBFAE15797DEC34651672B37D1D2AF7AF5AF657FFFD8C07
BEF40D7BE08FDBB34FF653AA491537468193C859A9AEBFD0E2658CE75FAFA79E
6A94BD0413B35368B1DC2A4C697B528192085A32D770BA434E67D6F6A99D2296
8C5AF5DCBB2EFDD7F3BE5CA2A94C2AEF37CAB5B8D3B2F8B9CBAD525D8F55DBED
416535301B88F5679C498FE26DABA3E2989A4986BBA2A5972851CB34D848EA7A
693353775B2B29D8CFB2D0EE260C6A3512B9B4A775BB9DB5CB57BDBCFF85783F
EF02AF55F2D9904B0D263EF6B18F7DFDEB5F4731301AE1310B061300CBE62D06
EB59FC45E22E167B0EEC8222D0F44C69D20596FFE5A77CF18B5F849B17D9A580
FCA23025843FB0D1FF918F7CE4C61B6F946A01EAC5D5A2B98E8B9C28E426253E
5523A3DEA887DDEC1CF18C436BE6C7302B4CA6AD6C2ECDE3B378285EB7DB6E05
E4090A9894DDCBFE719D83AE5BEAE11084AADC21A2428FC088069143766014CA
1F27C35D6359763C1E434F06D5C12E1CB08A9F049EABEC03D60A583674DA2D16
A78A2934EA9D688213456A02E848874C96F06E5403F82156FE073FF8C1871F7E
18A2FB6B5FFB9AD427C31D8F8C78247B61BDC5C524778BC2E3403345A0654987
7AEAF51A13734F381A02E37C7356DB592480E1F27D42C3E8F7EE7D864C628C41
120FF8D1AC9E5F7AE9A514A63FB18478C73BDEF1BBDFFD8EAD04BC02850E74E4
334043416C96050674104950A6103B0880A96C2EDC7FFFFD14715FF44A4C0CB4
B68F16BF601E98F098F9B25D02870C928260E2C0498AABF013329AA807A7C18F
7BFCF1C7317BD13914945649FEA148AC05EB88F28868CE867E6843639C26095D
48B1553FC55266BD38908DCFD43A5A4C37BABEAB8758D52D2D4D85364DC5FAA8
558E27529A156F0745AAF21CA4B23E6B9D4E5BD7FCAC67F81E6F46BBA67AB377
6AA97EF28A31957B339CA5996A5AE9F26343F1E27407DD9A023DF9C94F7EB2B4
30FFAFDFFA474757FE24D58CDE48078EBFE9868D57DF70753C8883F8A35D1698
49F1BFC23ED0BA1562DEF652F1845B6D355D668E85245528D5D18788E62857B7
F7B3C2B62E3E385BAD555456AC7FF248EAB9D9F95436D9E0F909D51ADFF113F1
648BD5EED0C12032520B41B061EF222A838DC0748B85E07986579DCF17AD4234
8F834D767BEA3654E66853528A246B4A873EFE15A9D247DB17927707E500B782
B98C617FEA539FE22DCF1A21AB0BAA8229EC29CF54C723E491F078801B11D5EE
A307DF1C2A0E583C9FCFAADBCF7FFE7394DF239F2DEA27B8EAAAAB986859EF11
64147C80BEC513C55ADACD37DFCCF4C99B4226966FCE037EF7BBDFFDAD6F7D0B
247AB44A3444171413E679E169E59131D30C2583B138627244A188C50CB07B1E
8469A9D91F2CF427F9162A461B322983248BD4EFF58A5AD4912926DC3FEA4C3F
5C12881E47472AEA8962DB454F0E733D2CB486C7F79EAFB898AE38A9DF6A75D8
0E28162BD54AB3DDEEB88EAF6203A1A57C7865EFD1568EDF1A4806D42B7685E1
221C4D405DA6A7A7A3A95A0F3EF8E0F9E79F8FAA60D61CB76FDF7EEAA9A7BEFC
F2CBB0DDA05C030E10942D2101B036FE063A26EB0EE8BA2E7325016149BA97EC
7E5415421DE00BA150FCE70F692D2949381280E20133C14D4E4E02F91961095C
05FE0B33223A037C3E5FC5CC517270E1F1E70F175C70014B97647880C9321B85
6B2E8A2247BDD0BD284100CF4141AFD6435196BC29EA75B611D21259FBAA57BD
EA37BFF94D54E0214100E216A178ACACE08A63C062DC483A87886789A25F7FFD
F537DC70038C2D6613BB77EF5EE45F5ABC3FAB552BED65C79DA0EACC83164F6B
CBB14DBD1578594FAFC6B3D429F72957A555A1567AE578B334E9EBB14C590FC8
74124EA7E5D2F81B8E2FFF62678B066C6DAEA927F89D6CBFD64AF55150CEB586
2B5E95AC8E4AE3B153546BF4F38EF6BCF97253755B0CC8B04C4B8BB75B9DD7BF
E1B5FFFED4BF2BE33A74FDA1109D1546265ABC91640062539C7EFAE9BFFAD5AF
28A3788161E5FACCA185D909323AC680E675BC810ABDE3036FFFFABFFE98E54F
DC48A403B3AA353E78E5D9DFD8F6E5AEDB61633BD797E5A79416CA4CDB2A5E12
822B00AD0FB532C22BF55E1F85F7BEF7BDCCB95098C2C3E02FF95F10306AA1A1
1E615DA004083B030FED6999076BA6B00A4C874CB41FFEF087B76CD94287BA70
0FA77FD01BAC70D460C2A90B956EF5EAD5BB76ED829040AEC1F8F8F85FFEE55F
FEE33FFE235FCB940005E81892068E59A908938E31D1D78166C32381C8A1D038
E04D21B5F110E4FCC4E38F3F1E68B81469CD84B738E9A4935E7AE9255C723449
206C56E3D7E0197FF1C517E371655F187A6C314BC96B8BE1C003EBA8FDC61B46
6792CDE532BC6973D9740843A47C388BCEFD9EE335E89517841B52837B0BFE5F
E1FE2A01F550E0CFA8457FB84DB084716BBDCA5E960489F088F58EC5458AA9A2
AAE242797676616E76A15A6DA8F50D8E320B47CA5D114980A44C8C01DC9FFF65
6687A2412811D85AC8B9648EBF61C306291184F017B50B6F0AEB0F7E15147F82
6B838347B38C252F984987BF018B14D8350ABDD2AC149C73CE394C1C7E0FE759
10C97F5F9B20EA61D723FDD1046561C99E1109443D158C298A7F42E349FE9345
E0EDB7DFCEA365FB94A7457A5E82EFC3D189CD26C1799E31BE03B3067E657E04
8ABDA589665443D47A70D6D1A651CB962DE33B63DF620205FF957A625B860D19
26941044AAA6E17D82EE2930AED8B13C064805967CBC703CFF175D7411D01F11
15E70103E6818766DB6E9BC54D90CCE5F28DCAA44E7AC22878C64CDD8991E1D8
8978BB96562D8D13DDF48A93EB3B9FC9FBBA1BA84827E9BEE9939FD07C3DE8F7
E24556AB8276C619EA92DB318AA9F4985B99EBF415A8D9E8EFEB6FCC1E88ABFE
B84685A58245763D964AA48BAD9299B41CD5D18062BA459EAFC70D0142E02578
DBDBDEF6E4934FEED9B3476276C84BE199FF8BBFF88B6F7FFBDB7ECDEDCB0CCC
D7262C5242818FB26935BD011A997A6B7AD52B3B2627F8B6A3392ACDE6E2764A
CF4E2D4CF7E5FADA2AAD4D2D564C29CD66B3D5E4AD373434F4AE77BDEBAB5FFD
AAF812B530B39EC99EA78BE793570DD11AD4E10BB1494B258AA0FF6B11546069
C82341A62826209826AF385452583C47DB1742004266C27325B51A67627F45AB
2CC18590A27334FC2EB1F591170E6051D849A2F1043D70213960E30AB03CE85C
500FC4BC330FEDB8251185FF9424402E20AF8161C045A5F79EAD47142EC30F2B
D454FC58E3A989F1D40F0EE45924C4C38081C48AC1DDA8E7520875310F0A353C
95E2D5E5FD1265C47AA4E7A5E8EC51E00A39010E169C03D38F9704C1C9D05314
5F24054F6913070E4CCF4CCF55ABAC86F8BA7223F33A75974C81C89A23CE91E4
AD47EB8FB078200566C4E8F4C2A4CCF40A468378A672A62593D2361AFC0E2A03
7CF79B376FBEEDB6DB98887143B600000A8FA62B7C7FBE037470212C3068F10B
F17DA255CA5087F90E5A88B8191C1340FBD89240AC3179651E0F5CE13C24BC08
202860C488E704C939D8DB3C6C5E1A3E19E347718D9829E2FA44DD0DDF0D5210
89B628EF40E6B51EB6F7C1B4441D6B92382BD9143CAA356BD6B02A245C3B0ABF
C197A04D1046C8E6058C2D545A40AF94BC61EC40E9754C618898B7BDF4A8A1D0
14E3F3512E84D239F82DB12378E1D25AEC639FFBE83D0F7CA153567DB85BCEDC
603E5F2FF2966EB463CA7D637B5A9BB97DE0B07235FE2767FCFC89E74941A8EA
05DD6DB6CAB1FEBED2BC9BA5FEA2B9CF5C47EE8B6405B14C225777FD8E561CED
1E3F957839C3C68242214A1DC891D76D582D6B15C576502B6925F9C55C4D25BA
E40672D5D9CA486E6CBE3917EDBDCC621B762D4015A39631C05659ABEAD757CD
E96DADDF88D5BC6E779A52BA5D2DB45333566398A73EB12ADDD8339DA4462A99
657EDB26753796768B7D96BC2E4B0AC332B2891CD3B68482E07E11671AAB563C
9F4C244C06804EC1F2F1B47FE10B5FF8D8C73E864C0104C3825E3B2050059409
3F82B849872673078716D0F09245159A2507AC169E8DCF7EF6B30F3CF08074FD
C316901A20B4848468C1E605FA0B94D1CF7CE633AC0E1E8DE762B380B450318A
9A1E307AA90CE713E00882F523505AA267A3331A760ACC11AD578C866453987A
D190EDE1874CD74134F66653C925CF0D3C1FAC3C80AD815988590AB68194D74C
25CBA6D389E1C2E0F048A12F9B512D0542CF3B80AB4061404A828C42D5037608
4AE0906E4A915A2D513F253B4A5CF912F1839A860F6001522E914A65D4E38C10
61224C0A2A576AACEB4D4FCF96CB151EB3A994052BE48FED288F8B78A88E3C53
D2A55D9C866CCDB1ED0F3EC5C635D82258031404F49167E24693484C02335026
653E0D1A28B6223276204159B8C2B46432C5B6BCF8E28B999E009CC9FF32038D
9AD56216F0255227F24FFFF44FEF7BDFFB24EABBA472ED3F736887D6E8CAD200
DC1C8A89003E8336F02E22AED8BABFE28A2BB04FCE3EFBEC2F7EF18B181BEFAB
4F7FFAD330723145921ECAE3FFF8C73FFED8638FE126BC57D7AF5FFFC8238FA0
1501F247A13409DF073BA09E47580251FC2FDB04C8B016FC45C9AD86F30DC3E6
097FCD6B5EF3A31FFD88576A6A6A0A7C1CEF026582427713BE91DC50EAA5EBF1
C8996BA02A5BE0BE21E7D83404DE06CF7FC2A366D2F359E3F7FA13D954B1B39F
D96426990C8ADD7ACAB0AB669C1A158BF23EF5BBD4B73AB16377AB3E9CF58B9D
11CF2EFB9576960C9F8EABD36ED2BB397F6565E581F8946374294C15A596457E
977518AD130F9C0E30BA121AEBE8C957BC265555DB74E62B9EDE4D0FA4EAB38D
34A51B5A031C0DEE4711C9528F12CD3753F2D2F28F0BD64E7476B52D3A75ECE4
67E79EA7389945B263C383B1D57BDABF881B34EE105B3573069DD4FFC72FECFD
398FC736129669B9BEDB725A9A1964FA32DD8603340EBEFF19679CF1DDEF7E17
79C39270F5E10F7FF83BDFF90E6F01F1D4215D4D8F405A458B7BA2753F92E907
1E1AA579AC3EE8E475AF7BDDD34F3F2DF473344DE8BCF3CEFBE637BF09C90409
C4120B355F880108E00A9CECE0545AA44E78D5AA55A13978E4FD05868EF12324
C6FFBEF39DEFDCB163071B67926488F3A3502BD8E950FFC578C26694BEE87084
42D6429996D4C1238EE760DD8C40CA2C2C280F064B8256BB95B013AD760D9318
9AED64C67455CC1EA06D0099160DE4FB474787D9324824E261984F83F90C5B1E
8001EA955C1FAC5F64DD6243F3C09379914316236A1044537420602463241477
CAF661AEA8870845FC46AAAEAFED2C944A3C41B56A43016CF5403D559981662E
59F860B176C13BE24C895A0D3F03AFFD9FFEE99FFEE0073F10BF81D6EB9F05C6
01010E29082340C043B0C09217CC775BB972251ACB80D108E7E2D7E413E07F60
110289224DC6F989921EC04F81124DBD444FE9370285EBF7B509240821732E29
3AB091796F408B9483BF04D28EA442E37B0010014A0F99AFE8F3071926C164D9
B128BB03D387F70CBB450027C4F12806324564B9D8C2D22759901771C0E12066
013F8E772CCFBFA442898D225D9F10F0E0717EE0031F6005F9C9279F04F64634
1B18A749DF8F6821055FF5F8DD0F95336EB66FA0BBBFAE25F5567F7DDDFB4FD9
F195E74666E3D36627EE273AD9165D3040CB72F4EB260DC4C99948254F69DCFF
DBC129BD93D36B67AFA2E3780C75DAD83AB572D2B3B497B42AAD24FB03E9B5B3
851DCB26CD1BBB1A9919A36FDE9B7797D1CA0FADDEEBCFD2503EF55CA9F1EF0D
DA41292DDBA6866778E4502CB03CDD45C5197CEB62B1414652CFF7CD94C9D294
5FA1DAAA356B0DFD0AC33FD9A3E75753373E1EAF4FDE3231EED2A491A40D295A
3947D5B52A8FB3386B3E4A6E4DF9606DC376DAA1AF23667A9AA3C7F56ECD61FA
446EAE8458246B19A63C103B102BC692F100F8335601E42D09C4D89858EE37BD
E94D4F3CF104985A1462011A4CB473B5B8FE8E260940273C4E9E1960F844593C
6E22EE170C03A20B8A1DD8F431361DCE475C977A513DBE90DF8E0709CA416405
23841A4DBD9A24096BC16C824685D80046150D644AF4F1187DD70F66910A7E8E
02FA0C2BBF286CDB42DAA2A32D95526D639BAD3A9BD146081581060609DBCAE5
3203FD7D219881CD2390D26AB14770201145120717D94DC41B239B39BADBA392
20E8952C2D36490849B657C8D6092FD4BC109C4349B2966AE2DC6876231DB8A4
89F2A22438021D68C742998E56159C74D2492FBCF00245BC72606102F3CB1312
ED23017E874602BC48901F50858040872594FE6270FCF169F0F59F7FFEF96C19
00D8802F17FF29880F6E6EBE33DF07098ED81ED0FBFCA3E3A41F8332A2BC1592
00E28DC7303E3EFE9EF7BC87B5FE684347DE36121046348CD9222C18C842B4DF
434E348222B08891D500D6132DA60753802601791FF5DD4BEF2051204474E93D
586C0116852B12F483A01F9ACE0BAF814F2F08BBBF36C243DC77A0C025160F36
2AB25AF94BBE613403079B50EA15F859E9963DA5CF59F95CBEA8CFF8A565171D
571A28FA33A5E0DE7CDB2A8E34AD92D6F5AE49A53C5B7B60416B51A093E1D002
4FC62ACABD6D55BE10DFF3E5974E78AD7DE0B4D4B6E6B5E73DB691D2F513FE7E
746F33D0BE36DDFAA84ED63AFACA4BE66ED28653F4AE11634C6F7F69C7C82495
3F1F4B3E9B2B7E793EDDC9B7A9EE9A0E196479F1AEDB01A341426154FD842701
7E9B8380B53905075CB858AB3403E726DD1AB43B7FDF1C1A4EC6EF6C4EB21172
31B915CA6FA7A64EB92D89D9796DF889C4CC8B0B2C75D28974CA4A571B559604
279E72E2AE175F913C0210BFE446335540B71067112F014F269F2339637C1AAC
4CB8BCA54A1C309FAC9C7DED6B5FC3B40B3239C248B029F933EF4A74F79562DD
23D27FB4C211A6125FC853213C9A575C767494C3224688978AA6501FCE4FC452
17ED1688BFC8ADA2D04D24660DA2B64B6004C1DC51FE097920452D204EF8A044
B3090EC55B8C1E129D55FFF5C21D291464E18C6472B126767C7C94DF7C7AE640
A9C4DB4373C2B83A42AFBCE9FA72A94261201F1ED15831C232A1E1A64B4AA230
7435383A986C1A092F2F1E60E251D40AE91B059519AF1A527393C7DC554E2CDE
B7AA9EB0D96C2917906EF524DC2108482A7B3ACAF8A8579B4A47169B52F12479
8A48AEC5F2401F9484FD2829A3EB3A345CBD87712D908102A48314608C10420E
6E131093EC842894345F1284CDE879D5AFB9E69AEBAFBF1E6DD6F9DFA86D41BD
B0C1EF250996C848BD7748C418D412C5EE17D7243C666BD7AE652346A60B9E93
68DB3C34E11340690AD5EAF5EBD76FDBB60D15F000F8C4544777A07C901019C6
165D62C18896508A904A34E267F60E9E6464225E7BEDB51B366C8886D9C150B0
85821EAE35D260E43E583EF89D9084CA4FFCF8C73FFEE0830F82E6F3942BC52B
5A2A9929B6DD413FFEC9A1923D6B25A97B798292ADB106CDE8E46DB3A862D1B6
7A9F47656DD5DD977EEEA2DB2F31CECB7BCB62DE5DB3B9BA516F0D79B74FF5B5
D67957EC696CF27CCDEFDF9C2826793A5AA98B2831D937FFD53235C8F295A2A6
F90993465B37BCB28256ECBB699FDDCCFAD4D173CA65EF3782BEDCC1083FF5FC
5A227D29D2FF16CBB4C23D6E371D08AEAA9A2B29F9A9788AB25327CEC5DF3E64
25E3679DFE7777FFF61663743079497F8A16A6572DE4FEC7D8EA97F22F3CFD62
67D653ADE329EEB1500E5C3B136FD73A327BD40BC342E3E159428E1C084CD237
F410120D452DD085B1FA921B069ECE07D2C924972C9AB6CECB2700E9FC6AC816
3B868604CA81A904135FB29524044DBD6C25EC7D7863A06740E1F80F333590ED
060AC11DC043C460922C7909EFF7522543F89CF04B69F7248E77AD872F247A95
7C3EB677489D10CD5E8A9E2D799F92DF1D154A3D74071F9A112F613A150FC7A3
A36BD822C8A8AE5A0DA04988C40F4076C2EE835E89326C313316D643863EA54E
C7E9B5013215D6603A0D9B803F68BD0E218EA7C469A7ED28B9E3F03CBAFCA863
F8C58248B1DBA1F54D3E18314602670E34506891920EAF85A09E121B179A9309
1C1D1D9D98989035964C27796BB17025808CCF20593E0D9DEBA34C59FCD7E228
170C0C1010D41F6C6C29EF3A8661889B4795170098E05AA9608092858C2928E9
D117870C809C13EB55DE5720AFE1207ECD6B5EF3CB5FFE12F1C073CF3DF79E7B
EEC1EB60CC2880C02E82391F8DF7B2C0DBB2650B1443497994ADBE24D34CF698
B00C6C150A5D07E2F117EF99D2DCD3699EF965CB96F1C2892B0FEF2B0E2290B1
B42D425738BEDB1BDFF8C65FFDEA57C0A986EB96225D9429931AAF3566D894D4
DEFCBBE19FD27929DADEA04F133D4AA9996C9CF462A64D9BDA343798CCE8CDC4
6C7AFF3AE7AEBA930FFCCF4D5BA94477738B55FA969FE89C6FF49F545FB8304D
17376834D0AE1C185C5B9E7BDE223E815696EEDC3B584CA729B6472F59B94CB2
E4D66E690DEF8D1D78C459935CFE4AB142B64FB6436E47AF274D5208FADD20D4
037DF54BA74B419CCC8E02C3609554014BE4694E81AF65295D1D2AAF2ADD3AE1
945CBA9362F194538CD1CD65F253E69585E0BAB98CE936AFEDC43432EDD595CF
EDA6B4419BBD65DDD109AAC55275BD411D8D2EBE6CE3DDDB6FA1D0A7AFF56ADD
05CC55FA6AC9DA89CE4BBD1A822519E4A8E6C1F2F11DCE3AEBAC471E7944D4DE
83937FA49A7F7C03A72528EDD65B6FDDB87123F8FE31BC46BFD701972F921DF8
CEA2A0401D94021474D516A68C2D03DA8E3299C30F6C37241D01BAEE701E1E3D
E04F166E2F9586076F080D57E617E6210414DA8583DD441B94473D397836BFD5
407F9F659961266C8C85016F52B4A001CB16A83C248A489998ACF141A8224D89
819E41008D1E9183455703F43E8813C511286031C0FC850580D3651D93F9B87B
8C8AAA25CE653A9845EA058765B5D2A11066F846E644DC0E5149C02C8F6994F9
267A5048504E027460494889410C8AEFB366CD1A26082C8CB05DFE9EF56B2677
6694509AA40F41D0AB279090495411007D43793FDA3C80DD4B2628B2BC81321D
0533E16FF883E0A2086C83CC24440E4ADBF92602E22D0807427CE0B314EA8367
9C71C6BFFDDBBF49C30DEA057EE5B9029285B41FA493229C281D9B615F428943
2C7D7878981F2159E7D227443C4541081817C5E28696C3B75AB162C59BDFFCE6
9FFDEC67A8590B294AF174BE270B09090CC0E20158214C253E01CE0D714C512F
9D51193DBA95EF508D5A6ECCA78D34185BA15F5DD66FF0A7A7BDC2FDFD15734A
057CB7F6D9EBCB4C61B63958B96B3E55341AD778039B620BB6635E99CDDBC61C
D5E98A1020E73ECA5F3A5CF267AC2D669A729E1934AEA8B8C620DD35932B53A5
CFB692ED6E83D21766EAF1DA987EF281EDCFEB73D6803D506BCF27C8612B6232
96D59C669E8C3E2ACCD1424D6FA9728160A0DFF0E7BC924A148D595433C83512
09D6DFAB5FFAC6839BFEE6CE7DD73E9FF253DAF698D6707C8A3536962945F655
7A77BDAEE5C6BC5B4AE4F12594DD58AE2753FAD6C6AACEEA9DDD69D25B09970A
AB56EEDBC3F3E3A0EA4AA07329029583205CD46933303000CF1B941580564919
C4126246DB898373DED37E96F875A3FB9D42BD1E9C1A012D0CE9689CF7BF7048
308F7A9A9C745B82D2038620496BD4D332C11E0FC7255B7204918E49C71D77DC
39E79C73F3CD37470DBE2527B3C060CEB077EF5E7E04DF962F8CF647394460D2
61509A4CE53C2C26746185E26D5802C1964CC4795D3399946DC7C36E0166E8C5
31048948E40D9E22EDDD97C895C8F958305DDCFD60BBB02AE04551BA67289C9A
CD76A7D375433502F2E368D37758CA90D6EB4FD28DC69AB018480A92DC004955
16A8EAA89E220C1A95011222C673317592038A3D804EC24C2E679E79E68F7FFC
635E159EF06AB50A251AF100F8C4C4191DEDF82828A43CF25B6EB965EBD6AD6F
7AD39BBEF39DEF500F07EDF08EED51CA906E18D40B66607240C1883D0807847E
802084985C415830096791D4374493D82892EF21C55F2C00D07E47CADFF92796
134C66C20B586DE433F9AD99EFF39F48D1A1504C7EE0031F78ECB1C7F82AF4D7
F37B9DD7789CA8F4962223299217351F2C1EC61FAA7B80AD84F994D236094A31
697DEC631FFBDEF7BE0787095FF2EE77BFFB273FF909FF249E6ED8C7181E341B
B95C499A785F77B66425FC62AC4E5BC89ACAF4DF5CAB6DB61A99AEB63E11182E
A59C7E32DAD54473A8BE76A17FD73545CAE883EB7D7D33CDC692831B93F37DF3
ACC42736EBF1E270F3D6A9D8C6814672E1F4BB964DCE69F3F6FE65D7A51726BB
AD2F76C7AB83935418A44695F675AF5B7B7C519FFCE9DEB78DBDF547DFF9499B
997D4261F9268C78C330A95B4976C9F38D802C3BE6B5131EEB4E5633EB51DD4F
F8414C2737AD3099BB8D1C352A39A2BA4E77F9B487F27766B5AE53D45BD60334
7E80F66D27EF4AA206ADBC81F234FA6BA346DBEA5AC536EE6FDB0B296DBCAF5D
9C0C98B8EC84EED2BDF7DFF52FFFF22F3FFDE94F796579EAE0F18FC202520F2C
16B81DA0435E91919191DFFCE637D874E0EC2CB37939586033FBE30FAC16202A
26E11969DCBDC4954F11B3208AD10675016AC71F4A0C043DBC00F0496C347E2E
6F2B1E1E7264014620E811E2E414BEC173750CCECE176EDFBEFDA28B2E3A44B5
3F8AE48011C063E029BDE4924B366CD8007CAD830A318AF760F002E74B1A11F3
A04F3DF5541EF1AF7FFD6BD6317B91C3450804E9918641FBAE8A01A6D28945FA
B763A1AFDCF62388A4701A207E00E7B8F8A02003422ED3ED051434E4832A5BC1
5B1C15509A85ED2A66D16E853109C775C0D9A19EEB00B03BE20C4A98112B84E6
538847611B6B91869492C00AD55B448564D0E3869219154D2D00EF8300909A58
F909161885DE24303B987B6242C2EEE199BFEDB6DB98CBF31D10A70A7A686260
6DD4C3F010740AA0B6FD676C02EAF5AB411A2B7F03968ABA68D88FAC9DBDF7BD
EF7DF4D147A3353B514910CDAFA79E2216CDF1E855962CD673892223B8727209
0F1EC51062069D77DE79DFF8C63798532050CC4F59B56A150B00D9EAF0D16327
A32053EA2DA21DC031997E881E0AE59D7A88437C21729982B01E82E9965F0A75
9BE83983D60E7847C119067608F44A8A80064B8EF262AB8362D94CFAAD267DF6
23E73E92FB567BB9EBDFBD4017C54F7BB9F3BB1FE8A97D23BCE112E4159331BF
334359CA7FFCB4D2D8EF566E5E5B39BB5B3E71FFF885B9B9AEDBAF77A6AF70B3
43D9E062CDBBC96B76EBA3D70DD4F35EAD55A6CBA86F3A5EFEE70E5563AA57CA
906FFD2D75D7115D4D5465153F9149655FFD27AFF9E1FFFE7FBDA64BBE4141C6
A272173DCBEA0379DFB1CCF68CDDA5985E7032E9BA56A37289E8B6876EDBF8E9
4D093F7E5CDF492F7476D76E9856E6C2A594AE9A75CDCD9C67D512197A744135
78E9927115253BE95AAC699FE3EBF10C7DBD16CC675A54B374EA4B65E79A5ED6
D5EBFEA2051CF4E03AB408A2A298CEC829807B16DF4023812F8EA717332F590C
922116EDC02A697BD18E524B2481A46020E10DA92EFF85B8DA310EE97F87DBE2
FEB06CC055C40326E70B33912E2647F3EEC240870709F43F3434B4B0B070B4F1
0BF0300BCE0B2EB8E0DE7BEFE51903AEE5E2CC44C5E6C16F7B798A3C4D3C1AA9
DF0B75BD98F8FA81CAB9B8ED99DF69BAEA64A3FAC8F38A2658A065B2A9507D8F
C1D50E3E82D491681EAE645B4A6D459894197AABDC45BD9B0581246620CA04F6
51ABB796188BFF61AC867A863C381A6C0249FF124387B7316AEE60BE09E39647
48C2A5D6C3DE11D3817A90FA12CFC0F7C27C014924025F2AC811A762E6CBB785
EF0FC9736F7FFBDB7FF7BBDFF1F9D2274BD22744E9C0AB09C2D4B1ABCCA5CF0C
2AE34535403725F882EEB8E30E66C4D0DC257D1BD24EEFA1F36332F93E0826A3
1393DC4D42BBE0FE306830F310337C2D5FC57CFFAAABAEBAF5D65B4F3FFDF45F
FEF2977C02B0B2F97C5609C1F7A3705D902802C42D681CD8F6626B8B77084637
6C4D417245E60F2243407E851B5378132A3CD0A4017A6BD49B816072349D7789
2302B2BCD6688C27FDC98EAAD03DEDDCD35FF0A632BE51F25B3462D1F5B3995A
2C4E7AD5EE0CB7ED8A7D6AB53D4F57EF51B502F7D3D0DFC6676D876EA754D76F
53BF776F91F6123DA4A5CF4DB7066ADEE589E5FDF9FDC601E6F879ED55A52B7F
9B6D24ABF966F62CD3CAB98D16B56EA395CB56B62B9D85F2BC9D31DB1E4F7EB6
5E6A1A4937D029A8997DC648C92B53A2CEC49DA95B15AB15A2B8919DA43E4B2B
CE06C974A2E15AA36DBB9A0CCA1F9DED4F0CFB771B3C9BD5ECECD0952B835A61
EEEEA7AC4FA4FB83427067C721AD78CA01EB03C1F2F9B5BB1EDA65C7FBDA9DF2
783E3D39532723667B4E475B04BBBCF4D24B79A1110A963A5B487491074CFF3C
C9122A135315AA34D6081422DB279A810667E092C282287FC00AC29CC597C8DB
9101FCFF3FA25E7ED1F191D813F4F01079B428DF8382EFF5DA8D2D01C03FE2FD
E1028D56C883928F16E7C0BC095B081601E5223DCB509F86BB80AD874E9E0CAB
42AC91099B40396BC8237443379006A0D246BBBDD076988713A26001195555D8
A6D3A9B86DF00D51030C3E224AA56407058B1E9E26B23242CEAC4E761D81B453
6E223E81A9815F8969083A45A7E3C87B2FF16E1D4D1C0003955974C8C4A94707
244576720758A63B77EE3CDC3BE41EDA10867A317DC48725584A117F9A642546
79280400D41CD4BBF284BFFEF5AF7FEAA9A72421075998E3E3E3BFFDED6FA1D5
4611DF2812BD80475B7A49D27FE464C40771DFB3E5C1BB5480DE90960AA92019
4414A9E4126924FDD7F45E3BF8833EC39E24C036161287CCC39686D20D5D5B3A
3383B1E272FE098A3C7FCF860282283C27FC014A03EAFB99C6E6E6E6600563C9
24440F0308C684C4DE510301414B3D990AAEC4AF8F2FB1D3F8A14801E06F56AE
5CC9E344F3292902122B500E90B11A33750A757DAED04767D7A9D4A06F299C51
6A91F1398B82EEF01752072A0DBA6C356953E6F5EDBE34B53E439D117237D1EB
97AD7AF293AD6429DB79748777B931FCD2F1ADAFEE56FD26FB28FBD70937659F
B1FB847F5BF30B4A527E2395A8A08DF68D4DED702E1B9D5D3B94B8E837ED2405
555E2DB32F93AB55175477039D743B6D9F57277F75F3EE89D77493BF4A5654A7
B0DDF1E107D86E49EFCECFD04707FA9385E2DD2F2E0B964F34F6F3B3C855E0FD
6BAE3B6E6E4FB1F64051F54CBE707CA6364977AA9F56DCB26AB2B6DFDBEAE936
F97F47B49A5874D9CD78BB1990D14D745557C72095E86F34CB1480CE99362425
543CA8121F6255E037BFF98D88559E79605249953802C56CFC9D79E699FFFCCF
FF8CD22A7043F10E1D9E3913651190047003F042F3BE4352F87FADFEE6680744
11A811881AF014A1DB2086C184FDCE77BEF3073FF88154DD3319034D32CA728F
787FA65E7808A0D442B3040F3FE2F95059500EC9F20F9507128D20891344A1BE
3020AC8D0452A2448EFFB13C507C30EC5EA0A0A3490FBB1007618362851DCDD6
8032CFC90D6B8053903F602B5833F02FE4D2429EC365A7FA9B41AABB41980D8C
EA3613D13995D23A3D8DE46E16BAB4D8E878B1F1D97F2809F87B9CB244760AD1
88E78767960925EA4A5B729891C6E8E2F991AC5E30233843056356AC5AB83E70
1A824848E343E210533FA2E23C18EC04F06E742C90326C3AB4100C5B453A8589
0D7EC4C1A3F840462BC529F0A403A07BFBF6EDEBD7AFE7B5BBF8E28BB76DDB16
9504925F403D7DFF4FFEE44F7EF6B39FD1A1991B52AA2A85BE92CC13F4DA4163
D544EC51CFA729793B52508A51494C42F82F2F1382D530022074974426F9C35B
DFFAD6A79F7E1A211C5C2B8036D11C4149796202608B306A0DC06F0B2B04A920
E8B41CAD4C167A008F3BFFBA6BEFDF705D438F8FDE90335B8DFD371673BEC218
6ADE1450333E7843AD46FE28D19EBB88A658BBA7646A55E2AA995DD40AD6E4B5
574AFDEB8716C666699652B78C25C86952D3A0746DE50CFD0DADABAED877FC7C
7C53D3ED50814626687AE4B2E533AB4AEE144B9FFE95DD3503D6C8330F7E875A
F1D599FE5A71CA20DD61FBE35A37A12FAB7D7E62A84CB359323627BD058BEE2E
E72B03A5DCC2E0679727ADFCBECFFFD6A8F61335FC81CEEAF6F257683F5D68D0
80D7D734CD8A6EB8E9992F36A8D261B955FE30D1F1441D23995ED39E2FF9B7CF
B378B05A89D06BD359A627A71D6ABBCDD3060B2FCDCD41E16506C41308DA831B
44504378BDFEECCFFEEC99679E618E8C0E5F506BB04D24590B0A2B5ADA89E22C
196251492086F2E192807AD6ED473EF291AF7CE52BFC38A4AB1DA308EBF73A82
5E17491E3C53CBE4E46434082150C1002C40D49A498BB522E07FF00C88DFE218
F7E717B9E4924B5887E369E1CF12EA3B12DF53EECA73CF3DF7F1C71F476B0451
E9164F88D6CB09005E14E148EB35F0025F0B7CA3EB2C3A1CF4B0A3248A0B54BE
28AC02C5913DFE326C3FA0129C6331856147615041B53AB04C546349E9070215
08B249A6A6A12B273B3F364C305F3461D20A61283D3DA384AA6984A2A5E7FA43
1D426FA58F9A0CC6D68034A10A139C8C5E94C297F2286164388E98452A14ECF5
3A0151E86D148C62D886D10476B82920E42EBFFCF2871E7A88B9BCD42E51CF8A
E45F5971609D94FFDCBC79F3D6AD5BA3AE6DBF07F52A1C135C0F0A2F531E440B
96EF18D9B4D4535B446D877012B05C747A9040964C545412200620FD3579B488
2D47D5E468D85C582418BADEEB780CB583A999FF44011A20C3786FE83DF06710
277611F4005124E5154E38E1841D3B7640A844571067C21247A889C25AE82BAF
BCF2AEBBEE02B48B38D32017BD5EE307C13C001008B30C7ED6BBDEF5AEEF7FFF
FB22EDA4B44760C2165177BADD01D2172C7FC81E9FED4E525C29CAA6D3EABA85
9439E7BBD4A4611A99B1A7D7B413AF906E51E3641AFCB5E5BD2655FA558C52B3
892CE9532B1A997D9AA719CD608C96EDB37C5A71C0DE994E12EB8AB1629F93F6
F375B34A1D2FDFA02E696DCAA663462556CC2BD0379639292DDF61BDD2D45CC3
A5649CEA6D2319780D8A79234690262A25D34EB155253DA6C79CA04381415A82
823AE5A9DFF4BA256265229B1F199B9D7925EB5B35BD1A142839936D6A7E7F90
2959B5205E3FA5662F507B3A4BD9EAA81B2B074EFC9607EFBDECD273E2B55685
620327AD715E78A9DAF3E748D2B05075346D0C6127AC35B810C80C2E5C419F86
F2843421E90FECF5FA0E2D01A15BC2106547C88222E4030BEF0F152790F2025D
F5431C442682A459A38C94227D5BAFBAEAAAC71E7B8C6500BCA0482E5A124858
F222A822460A06A25CC7C810A15078202F513CC3D063166FA8F7BA6F4B948687
F2377FF3370F3FFC30222A4B52D471996455C3C32EC556180A96192BA71D84B6
8E499486FF5CB76E1D6F5AA041457BEEF0ACA1EFB9549DF0377C0E343E3C1A45
55FF6121F5D1A603E569E026200B985AD1BE6E18AD8C8122B1264979122EC9C3
F8C0073EF0E4934FBEFCF2CBD1EC5210BA981A60BBF08A88298A97F27BEDD1FF
0F6BDF016E5755A6BD7639BDDC967B736F3A692410AA140584D15F0699E12723
088A44414A88940086DE49883409485740616823CCC83FA28C604544541008A8
A1842484F4DBEFE9E7ECF27FFBBC77BFAE9C5BC6CC781E8CE79EB3CFDE6BAFBD
D657DFEFFDD03B130B852DD7B158E59C08E000F4460E06AE60F80188AE906A9F
DA85E62A0D6156DC003580F9D1C9DFC1A6896EF52A2C3E00FE01B4A980FDB08D
0C26904F9C248EC8E9E1BA10AF8C9ED11985F9D68019E7F8D918B9018F84C091
4C144C753958962BBC28FD99822F8C905F4A19FAA93027D916C2AFD7BECA39B1
00A02144679C7BEEB96C2061689C1F54452CFAA33B0213018694281579E8F268
109EC6A8701898D71AEE4E85982E766AE31AD697B42E4F55182D047209F450C8
FF6391AC5CB9F2965B6E41EF04C8538C561CF872A52CD695E33A99742697AF83
792C3B30F0EA2F2C3639183B972E9A1EDE09469288AAA21FF7E23555A9C64BAA
4BA53E918A4D8F0CAA81784BAC6454BCAD2ADD946E1D68DBF8AF1FAA8A8AD562
B49F0827C5D3418E0D33897A0E38BB148E04A14055D0C8A5E1C2BA45794F5A30
59187230E8D3C5E5BDFDF6DB11548101013611152699E4898BC58687AB979DC3
9B619E0C4B94396A23ACF397635849809BFAD6B7BE75E9A597C2C7D563AAC6D8
F54FDC714AC33D370424B198711EB4445621F4886053D2B83234ED877CA0C119
28CEE408D6B5C224944B226BAF5BAC0DB05F999D934E3AE9D9679FC540E581ED
BFFFFE7FF8C31F10ED8188D7A151322F627B02FC87A276440C914BD49F3D0676
C10517DC73CF3D679E79A65C42A4123A30205D3E7EF463AC17AB4FE58D6C3FB9
1DD9637269403F756C65835C6BD004244144CE59F6AA88CB860A031D260B7340
9780469DBD52AE8E9B9501806D117707412CF7FBF6DB6FB3940993061D00D358
261039B7871E7A48FC0C4876CA7A02C3E8E1A9907E07FA064E18DC179D4807B4
A3C83D88452CC31337560C6AEE5596A4226085403CC02130D61004A3ED838785
2985F213F304ACD448A3314CD400EE52612F01D6A642D5C93DA2659B7C78C619
673CF8E0833257328C030F3CF0A5975E9201C83172FBC0628D84D951E520DA00
13B2014B2EC6D0D9679F4D620CD040A199877C020E252A48F80ACC5202042597
9663B033111000FC494E2553812A04B194019FD58B1EB095E43DD22440EEE923
F7B517EF8B385DF86AD8B9B366CD5ABC78F1C5175F8C4709C34E4E8E624F72CF
89F34E235494412A19F0E06EDDB6D50F6157D0FAF2F3B973E7BEF1C61BD031D8
ADF07DE11A7AA6279EB6E904E1E29A72FDA8A35A6545AAE49AA0F197B2D49CBD
66BDBFFA83F668AB2AAB844A6E549BC8BB0E510B64271E1CA0BD3260021FF434
5BC33AA170E4DDB19F04EC1E91FB37DC70834EE08C29924B602D8961BE62C50A
CC1E7007FBEEBB2F36A0D8439FFAD4A77EF9CB5FCA36673D3F942841417A630C
15468C919BA5670C3F1821711992BC418DC558724C5697AC19D929722F18A45E
5E0A898A4028F0177E48CC85F1A3565C26D0D0CAEFF9D0915D184655D0EE503B
973FF0CF06A2283A2CF8562E70DA69A78918A259F4C94F7E52B62289C3B0B209
10924F0E39E490DFFDEE77320BA2AF0E3FFCF0E79F7F5E6E12592059A91022D0
810014EA64B9F273D91872186BA0765513C06BD32BABA1128E3BEEB8279E7802
063BC42E79CC47D50488B3E30CBA49082BC9D2BA2A32D7EA84AD895142CC3B62
441BE16C76B8C484E306D1C000F25DBE85AD4D520A7E258F524E059313B60971
FDB8048D6BE25977DF7DF777DF7D17FA03F97CAA2298A2F8C957BFFAD5679E79
46264A34048BEC1B6A9E47E26718C0012D15C6CC0E3F7410F5C615FA3EC79A81
EF22EF31CFB4B519E81795299B0490593918841F4658028D08BE9E59D1435B0D
D21F5E1A14839C6ADBB66DB22CD1040D5548101F2AA4365221028DC5E4465896
0F64019C33A87C166D88712352099623C4840A5B96C2AB867DC79E27728370CB
1A7480AE0CF4541F6E102E1DB24DB05AA898C9124667CEAD3920218EC7E2E21C
44ECC870D54BA54CE3C90FA9B901A8D33581625940441E4DD42D7BCD89E621B1
23ED78C991B564B6354FDD31B023D39CC90DF528C3893767CB22735C4F793502
6000AD66298FDEE7551EBD5C572C4873441713A511F8C04EB2B5767E346EB8CB
B0FE11C703A73DAFA2079AE8D0EB192C9937391231123445C06010F8C20FA114
11AEA1AB043A55FA9A62576DDEBC99BEE3F8DCA84A6364C26EA52781F3B3EC14
4CF8C0A3CBB74B962C11C90C390C0B0CD9889B6FBE59749E1C802639C32B1FB7
47F6693C51241FE0A661859109998741CAC35E80FD05C8871D766ED3DBF01A5A
8F5934FDC149C26E1E4A5733B23290D6C3D9E4C9C17E9437575F7DB5DC062B47
46AD211CFF853D46383F5C24885799049926F0EFCBB77ABB18355A74083C8274
BE987534B4B662B47095D6B6176101B6A284EEE4AC2233A6A72B10BBC350653F
C83C33CF09C187B81CF63606D3A0DD55E893913D1BD90E99E7E38F3FFEBFFEEB
BF101663EB54F02DB35F87EC43B128C94501150218BE5C052E1D3C5698727077
74F88D08BE55AB5671A5C96F9118973FE1A3E8B86FBDB25D3E972722AB1F03C6
0DCA6F211949BDB268D1A25FFDEA57B2FDE0EE10FF437DE087E520CC2BFA5A2F
7B926430D476D34D375D74D1450CE241DEE191017A0BA6103864D00D308A61EE
60C1134B8674E897BFFCE5471E7984257B903B205051F52E46B810824E5E9D80
1E8A138D09291AF45C1157B519F6F0928725DA4BF60B584CE0F6A1890A5A9C02
454E6C95AE291B9A8C2E5DBA546C6479A67A300015588471332CE385E49786A5
7C4F45A2A653F132665614A568877E73473A13AF55829A92DEA15EC7AD434F9A
54AC37869BD26D50150279B17A91E0916D221624C22F0C1ED2B7237498C2048D
30E58DEC05BD81848C5F8E073218B15FE869DA855806549C88828ADC9793C07D
817205C7143252D004ACDD55A1EB3973E64C343883E1084B02060D4AE245FA31
0532AABCE20A4719DA75F5976E78C96A843DC40E57B40918A5471890110EB652
90CFF7DC734F5106C1572C76807D8DB821A41534219E10CB3D08E4C02260DD1A
6AF4654E658B62047A81156BED20D98DB0833994B33C15D9B7B05861BCA011B3
4C2ECF2CBF5AB972A5A832552FC592F3C3F2DD559F80B11A0C03134D6028E965
F8B47444668326406C17863F5B02E8B5827A1C938B9B790815A2179406C484BB
07A9EA87C5623073F838792F0D9602A4B3596FDF212B1B95D840DC536BC2D982
2A82972ACB914DD8A95FF51239F917DD1174B9432D45AA38EC1052FEE259FB5A
4BD806BE0D864739BDDCD59C3D1807071D749078E8885BAAB067131E16CAB069
BB60DD62C5EAACA23A8E8881323F2419D69BA0118084F40602A488B162C0B2B7
452322942A577742427F15B640F143BE232C09A82EB499459608DB9E8E0E84B2
1FD260C0AA45F25CECA43FFFF9CF7230DAA072F57ADE4E3039CC1556086C05C0
5E450163FD40D72E5CB8F0E5975F460F06CC8F0A5D2BE84E18F80C5FC857C82E
40E1212C8E0223B0B7325408B349F663D0C9A7BB54F40BAEE9056059334859C7
8D98E1AA8A55C9C6D22BAFBCE1EA2BAFF1828FCBB174BCAF3014E424723958CA
0DE45A2441C13D82528280E6064DE085AC7346D8E91626300A7AD91990E5324A
AB48A00C046C5A77351031C318E8BB6085C8AC229E2CE2E888238E78E5955744
F44136CA835BB76E9D5C6BC18205B274C9622B9FC8BF286E07F3920871F9641C
F42A03A4D0EB90C3DCAD20FD95AB8B29E987EC7544D3827D9DEB1F7E09A617EC
06ECD813F8C17A424369863C878E38323FD14D4BC2E181FF613A1408303A7A7A
3735849245EE234B83C7A33735158DB77CF9F2BDF7DE7BCD9A35F22BBD430818
076131192133DFF85DD9469D591DE341C58BC02E90F530A8C7F7099898D2A920
94467F36521340F9CBD431E462860D5820586953E82077F8580C205C72C925F2
13718C54BD3C4ABE7DECB1C7BEF8C52FCAE4639135DCAF11F2AA63D87A2C150D
C58032F6EB251D93274F965B868A3DF4D043FFF11FFFF1DA6BAF453047B40E62
1D3245A83F97C364C58BFF342AAC1E86368BE910FAA328914BDF79E79DF2ACD9
F95957007A72057500B255C21274476911E1060982C005BD522812C838236499
1F993196D9868741F4841912CD637E7EF0831F1C77DC71B82F36FE6572986254
664FE42C82605C96640DA1DC9419209B02E27B9840EC3B5DAF90AE5985F5EA6A
4474482785C57A03380AA5124830C820E55AD89E2C2BC56226F2ADEAD4FC3A31
7DC08956DF059F3FE184679F7D3662D9082E119BE06A8CD01C304DF8A497CC3B
052B61556A653B6B3945591566AD0288AEB2636927573394ED2BC38E46ED68A4
56EA21808D082EC406F41213AF4EC14BDDA946448768BF631AAFB9E61A518767
9E79266D173122BFF18D6F900C4E9EC257BFFAD5EF7FFFFB4842807E91061981
C8787CB4634470C91BEC4DE84BB862E0D9D6AB64E03DCB8264CF6D3D4DA84216
5819F0C9279FFCF0C30F8F857C41B90FB53E1B0592B7A65EB615A403E56CA8D3
1475856AD0AF7DED6B6243204B4CA18DEB72F5C2EF0C3C213BECCF494B164DB2
C46611CF058D23C092A6633375BF03D6CD70F7E39DABFC8DB02A8D85AFF09A51
DC0F298FCD8CF701935D5B9B0C179B479602E8C5313CB22EE366C6EF1C3DD64B
4F3191E58A71797972402EEAD5DEA36A827DF6D9E7CD37DFD4BD728A753D2EA4
42AF65AFBDF6423B75CE898C5FA6579C4759A0575C71051EB9EC5E996D98A832
C93251321E91C24064C933C692D5EF888D3860A4C806903F41AB0086615C94C8
0AE210E0525099E9C4D724D880ADC70D46E89E5C4B3EDC6FBFFD5E7CF1456287
B0AA8CB0E96903C912910C729EEF7CE73BB24CA93CD08009EE97DE9B9E1055DC
293C0F99A879F3E6897B8BF5094B45EF1F80F81E66A3A1A72BB3B2106AE0B313
2D250E321A012201836727C7E8D14B8428DDB0B939B429F00EF208649BA14689
56987C227375C209273CFEF8E3A8828618C54C42C41C79E4916FBCF186A8DBF3
CE3B0F5E20B058EECEFCFBF2DCE1F23728030A622E51155A912C18545A56402E
819C1C641359A70286926C5067270BF763071C209672F78E1D071C78E0EBAFBF
9E88C5A10690C186A403648B4DB2B0EB0F3CF0C0575F7DB57E41131D412CDBF4
55CD3045EFAAAEB6A66AA53438580DBE33544B73B6BB3F785E4EBDE1C73BEFBC
C391433D23CD2E2B4AB6A47833AB56AD62B9C6581963FA76B232FD7A6325AC5B
3488C7F280BB8675E587CD97704EEAEC61DAFC7A4295E10D55C78843E6C890E4
3C22FA4F39E594471E7984521187A9BA13AFA78EED7A3B29B91609B810CE829C
11D52B6B6C2C3986B0A45C51CE8600805E748915C5561F64DF83DB87841F295E
4E3DF554598A30AC451C89B322A75DBC78F18F7EF423116586528D7D90B1F264
75DE71C71D981ADC21F649038B35741D53A6447C2ACDBD6880963361C81E2F78
06645C805442CA450F72899494ADE8876D0BBDB077D52E6902FAB33CAD2CA045
8B163DF5D45308BED31E1F1F3B74D6596789BE45C81841244C051E3086C714A5
8C538EBFEFBEFBE8C61A1ADE19469CDEC30BA515AA6EE3CBE310D3469C00B928
34965C428497083B6A592803A43AB83E743A176249E5F8B973E78A2E9147B362
C58ACB2FBF1C76B41C7CF5D557035941D30637020B1714BBF23988AB00EC83DF
4D681A2423FC1B72C7637F12950FA790D38BC9612B12C4CDE018E9C607664637
D9B0F431E140FE91FE9EABB1214A698448732E60CC1E1B2892291E8F8F9CA64A
6B164813D8A817BEAAB0F796CCCCCC9933376CD80099025F5EAECB4E9648F6A8
B075B01FF6B983B30F61C43A29BDF3EBB265CBEEBFFF7E6A74B5337C884A4E67
1F81D8822AA2954ABE261DD8CA569156C4C60C603306A160D9AA32D44D9B7557
8F738B7940FB074CB218DDD75F7FBD1B712D23E2965426DA52A9969356B4EC0E
5981C44F2613F1FE52CFEDF7DE7AE1F91706B50EBE9D9DD059E8D92ACB5BB612
8C7A1D11DB809B209A685414290B42196E0526827176B44D85CF07B34385D9EF
E5CB9723F84EBE2C151AF5D8D75EC8684BB98727855024AC5E53238AC7018030
81044C85D14E33EC11C4A8C031C71CF3F2CB2FE39851E5158C3FB1176FBFFD76
DC025ED83BB0AA75D812E78DF2446FC607E987A8264F85E91A4E9A21A649C171
F1C517A3AC1473C73DA03BEF7C11CDAA347A3F63E7FA2CDC39D4039366B6D67C
910B8E68076A29A868887EEC55276C1F6184EC6F720BF07C891EE17251611212
37ABE3E86109227A0B2416451E6E0AF4380C5C288D129515C53803828050B93A
FA05721F4E7A83F8232F901E7482294D162AFDB9A24440BE15252D020237880D
19A9B7B6674E15F303F35F4F5953A521CC8DA6D890744C62A34900D48C39A221
9FEEEB5000A930948901E8313D1A59242B84DB27C688685FA807B9288985C1F3
C3943BC98E18DAA2BCC6EA62210288DAE10FE938576A4452F2B1A8751C4B0227
64032CE4BA1B0A627153E4F293338B258ED2717ACC7AECBBA19595CE57D13063
E6CE4CC5486881D389620ED60CD40662C40DD00FD428E1276ED8154369291908
743CC4E6D696DEEE1E64051070838809503795EAF9E79D77F79D7779F5EEAF55
D7E9ECEADABA6D6B045814314DEA2E7B801728058D6F915110C5230A4F477FA2
5E92EE230026E813202B4D4C2559D5A84096BBB8F3E6C7965DFEB572B55FD472
3CA0B95365BBFEAEA0521151D1BEE3F9CA8E541D2FA68C36235B6936FBFAFB22
513B914AF50EF44592899AEF2AA72ABF84690B418C7808A65A36D4BFFCCBBFC8
2224BE0EE2054F8A2645432EBAE175E28927FEF4A73F9555A7734A52BE515A72
CB8F65FBE3E74EBD0F20001414BC38805B1BC20A0A9E9179063FC9398A957FD5
5557898636C2DA171CC6421FE66044241A348E509EC3CA055846E066F1B51E72
90DABA26D043F6B80D3F2CB8C0EEE5ECEB6DDFC54FB9E28A2BC4BA641E95FD89
98FA00C61F420AE83A64E1611EE2B6115EC45E82850EA23A582BBE06E544D6A8
527FC949F6DB6F3F7191C4DA525A0299803906BB98DEC4551AA04A50B094DADC
5A8844D37831762E7A46E68740F5B1006488ADDF73CF3DE79C730E82E0E207E8
6D2E503404AF93296EC66A78E9918BCFD02A5FA8BCE5D9E91A547C76B9BA3C11
314900FC1F5513407620933667CE1C315E706959796C5B4FD74407712F58B0E0
4F7FFA930AD1113A91A71FB6F1A1A2153F52242CF6159E239B08B21E95306A31
BAD7AD5B879D00FB403E419602FA0FC012344733C6ADE881214F9A6B82885498
CF00993683B02A0CE86349109B88A019ABFFB06869C0E2A6C435917B64EF2ACA
6EEA2AB89E884D312CC082505AEB2A0C54C22301732A8DEB063797EDFF6A6E98
802997A74D9FBE71C3873299224383C68D22DFA3B1A64CB6BBB75B86228EBCE3
B94EAD3665EA5434650A826640AFCA6248A521AA66CD9A25730E1B16BC9318B3
1EB6D25F3A824E164FC24CF4E47A94ADEC9865BB11A3AC5CE577B44EE8F7870A
03410F9D20239D8CCAD655554F95ABE2E3B47774746FDFC1923779225081B0C0
E45EC4F810DB5F85207D59ED24FB827572C61967C87623421A930FC3D1189709
4E64971C090523EFE5DEFFF8C73FF20018130D1CAB0D2F5AD24494C924ECBEFB
EEBFFFFDEFCDB069AB0ABD583DB822FB54563B6C23206E182B237C03AE764329
1CE4E709279CF0E28B2F8A6031EEBEFB6E999D0B2EB840B40757338B5A555889
6AEFDC056DA426B0C2C6B68CB521804EF14AA0CBF3CF3FBF70E142F605436D14
5D4E142DCBCF3FFEF18FCB443CF6D863AAEEEAD2B263A1044C36E09D4467C8F2
BAE5965BAEBDF65A621F59F1CF4782370084A9907713163460C5985CF6A44471
265405A0234458C9B432CC8517A00EB88A1FF6DED16709C0245A7378BABA9268
C84813DC42D0025ABBC01DD1CBC7B0C3C11D0BE14E114301C4E8163E9F397326
A0C47AD2DB0871D923316DE3FB042C5F045A4E8FDA5336C175F3C326D523410A
E81600B31D8781A051DE7FE10B5F78FAE9A765CC6BD6ACE10F59798B34924E83
21CB46EC0C2043D85E18021DE06B15AAE7716C349A239867311DDE78E30DF079
20062807A061192AA1E0E14D9C38110D78E500D42260D93CFAE8A35FFEF2971B
101946C85C2BA71551F8EAABAF8AF4A4A1A7429E57B9D3F7DF7F9F8B1F421FA4
AAA89FBAF7DE7BB76EDD7ADE79E7C96F41D78AFDA527BA466E6133EC3911C0DE
5C4724A823EBAAADADAFB73762FF95C34A0E9D38A1BDA7A7BBAB6BD2574E3DF5
DB0F3DD0135A0CA9BA7D06804D20E9643DABE1F52C4256E60D8E2F11B7327271
FE56AF5E4D07143B4B8F8D4C9F3EFD631FFBD8CF7FFACC60C16FEA6C1DDC3194
6C9AE0E72A76D5355465285951D1A42A155557FB5E9F392CD539A15CADB4B5B4
FEEAAE87DDDE814853B6D637944E37950673E948A25C2D55D470FB0A993A3939
BC6A481ED9B04B962CB9E9A69B101B0731BB8C04C13DCC1556A00A1357235FAC
2B82DDADEA6860E463910987B3FE57A2B77149219990C0948A69850C0A57BB0A
F331B0B490E644A90D1BD9CB0A975574F9E597DF7EFBEDA86D3442F6DC8605A0
7F6280631DE509B06E20FAE54FB9B08C89F529AED6A2A4412250F4E0E972E5D1
E66221229C412C655DC0A1A11D6A4DA90021FD91EFC293606D14E3512C7CA31A
23530D30D4F09759DBA5C2649D1EADC21D61C5E0A28C20E187944DB82F54E7FE
D33FFDD30F7EF003F2FC8872FECB5FFEC2506683A5DF20EECD90B25F850E0727
135246AFC052A1D9CE02EC8660820ACDBD913B5F0F20B2C60DCBB42191235BF4
BDF7DE03D85FCE03F62179461F7CF081BE7C1B34018A6621A42EBDF4D2E5CB97
C35A477CC90FCB35B197F0F86002C383214150C362D5390C6478225245BCD2DD
41051FEBA4989AC685108D45B39D6F7CE31BE2516149C84F90AE40621F6B637C
F49E0C006073F6A48466E215E7CD9B27F3C37811560810E86083515A753D1E2B
3C579E8A570414986104A595884340809912312E18FB726660E4116F210E183F
87EA8210912BD235D71D2FB8208126AB96DB2776766FDB164F24AAE54AC4B2E5
818A6AB9E6EAABDA27C8257A975D78E17DDFBE3F572CF986B262B6E10CBB14CC
4B317380CC3F537D08A6333BADF76BC48BF90C848FD0843557ED37ABC6E7177E
F987CFFD57BEDC7FEE154BFFF3D9FFF8E89D0FF75FF42F833D7D895832D6D632
643B564BBAA92DE3D59CDDED66B75CDD63F6DCAB4F597CCD8D372FBFE0D21659
840343B5D0EF5161FB5F465995D6234CBC0151D532A5A2C04E3BEDB43BEFBC53
A674EEDCB96FBDF596D280CBA3BEE83B62E9CE9E3DFBB8E38E7BE0810774E0B5
D290BE639D04F15818F2A024C1E6451E113589D037EC828E5404B0FB7223279E
78E20B2FBC207308AA342C3FF42D80ED6586AD34D93B5DEE572E144830DDA9C4
8B4210D12E0C056B0BBE42C30D34DC06592F1AD63A36338E214F11B468C339D9
39C4083BD8302189CA6CC0849165C5A335EA7072F69C22EC0C1905E2791CAD53
23350D14061687085F99474837F9B91C2CA745E8B0010C209F88E5421F5085B6
A72E8B59C42467869E20FD062ECD1244F69F516171197D1179CC326FF042C8A0
22D6B1B884E0CB94334035227A48D93AB2029E1A48DEAF58B1E28E3BEE90478F
821455B765742808240E1E9CAC69E69046F509D8915C66462F9F46F48CDC4DA8
4ED2C783FB92BB100101F38760369C1CF7C50A0F92A7A24E0A4B02974358569E
02AAAC093005FA88C5F70830928463ACD09CEC10F99795BD871C72C8B1C71E7B
CD35D710906A694D78BC90C714EF81E1031D855C0BDFB2A486250B542A0DE5D9
BA4FA0EAFDA53FF7B9CF3DF4D04372BFB040010F65933823A49AD1DD2CA425F5
58AB5E513152139C73FED2DB6E095A0DDF74E34D975F76595B738B5B730A859C
A50211912F06935CB7268CAAEFB7777594868A30B09811D14962C08682A6D324
1A411D22884549CB886130A54F1DACE2B65D8E4C34DA86FCEE42A6E2C5D5EC45
F387DC4AA9BF734A4BA73354154DD432A5B3E4560CD3DD73F7DD95E365641957
9C8FEDB967617BEFEE9D53177EFC3386A5D276062806B9220033E83B02D5C872
62520F7057E2A6E43D56DA58EB84F1E4A04F571DB980FE2262268A1A164F8E1D
E709A71CF53C7AD00FB307BA56E600648BA13D09C4BDD888E2316CD8B0816021
78E4682028D30EBB56C48E582AE4EC82D8C1D6D0B36E8A1DEDC1FD828D0AE1BB
60C102B110B18688171A35E28C174BBDB91C193180B745A50A57803507B0D720
1464F4F215F6364B01551803A545831828902A8C6C3099819A389A7BFECED598
2A841C307C063D0196189D504C27B9C37A65E8D0D788A05588D992C9959B02DA
97280296C0201E876A0E164FB2F5152BEC5518AE110BE54B5FFA129009089BA0
B30726845B1D77443F06F30399A847DE9596C4C6E554DD44D2BB4ECAFAC013C4
FD32DA08FCEE7F9B319653C91AFDFEF7BF0FF00CD24BFAB40310C566553AA99C
1C2FA2F6E5975F461601EDD26068A3F92D348AE82459D63A7A0D3681BEEA8CB0
231091547ABDC2AC59B3648181255F8DDB13CA0F2B7A9033C7228122871CC71C
C29250F5280DEC5FA05A6100A26A4F85D65510FEAEB766D46F01F10779C4F2B9
CC838C9F6421E4AA43B1217C771883FA4DE97945F1E0456DDC77DF7D3009119E
028642A7385423A24362E9D72A552308BF1B93DA276EEFDE662A639FF97BBDB5
E62D91C99661CE9DB7FB1FDF7E3B99490EC96C7875D2E1F095490FBB23C38D03
43C980A522F6196C529087EBC4153A2C07CF0210B2E0998AA0B73B26DAC9F5F9
F72BB3D594CFB76DCAF7AAAED6A69E7D6B7DC5F6684B4B7A42C5F5A289E8A4CE
095991C29DADC9643C998855C4DFAA56174C9D1177BC933EF3856875181C4568
0C941350EC881C3458A2071F7CF0EF7FFF7B8C9CA53F6349703C3E6844B90B92
8362C3D2DAC0542B2D583DAA26005305721B0C1540F29097C50C7B3000F7012E
2CBBDE8415A762885E69B832AA3796A9924C085A2AB83DBD18987EEE92254BEE
BDF75EC871A41AC85E32520D60887218EAC291BF4634831301510B6307924B54
820C0EE61E5BDEEB4026DA533A4399F8BC6FBEF9265C100443C9962A4A72D3A6
4D085C223F83DD0B7FD9D5BA7DC9BF0814D02D80092696D7E2C58BDD3A6FF8DA
B56BE1E63300CD6D8327874E117AA1ECC8B2174E9158F16220E8402620C018D6
6F90D418BCBCF9D6B7BE75EEB9E792FC84BE2D9D6EDC1188A947EDA6D050E006
897CE699673EFEF8E3227DF4E22CE66945826CDCB8718F3DF69007FAFCF3CF33
0DA546CB18031B03FF0911D27DF6D947AC15392D5C5A266CF05BC853920831A4
AE070D00A5D053A6D800A890405474DF7DF75DBD7A358C329C13FA0F7D96F4AA
0B31F065247239F1FAAFBAEA2A792F2E886CF2F1392087C55CA87D1B52B2D860
C43B0019A1073CD15C65D5AA55E79D779ED2E2BCA404D02BB354E80C51ACC360
E71A8679C17019AAF6980DC283A3278A2833B60CC2320D41E1911963D1FF9964
4AFC00A756111D9089249D5AD50DE0FE7E6BA6A93737680667B60BAED3D1D5E1
99C6E6CDDB2376400206D3A758AAC376E309D3B6E0FD2056894A699189A21165
F078DCD8B6D85C800E822B50C7B2A7DA33E5EEB2A75CBFD96B5E14CB4D16F920
5A2A63EF98DF6265CC0195B0322DED136BBE17B18DD933A667121165F9ED9D6D
B3E74CAF1587AABDBDED622514F24B3E7D218C489112C81BB1FE1632014D99B0
CC50F202AF05F6317696AE6B475D27A407B6766E5D2E274416841F8EB5DEF014
306340B5C0CFA63CE13A24038A6C99E38F3FFEBBDFFD2E860A9B1235F37044A0
1E105D572167FE94295340F643558D4BEFC440C7AC9ADE0B17E63CC9E91A7A00
F105FCECF9E79F2F9B8D1E00A652270A87DC2164532F1D620F0A861A99C091E1
9164F8ACB3CEFACE77BE03650EE1A533C422310BA2447824F2278C7D02C5085F
515AA33BF0AF894621DD3C769D3C4B394F43C71EBDD09A9A19E54EF0722CADDB
25EC1D8E90B3CD1628845702F6800D2C7322F20BF94620A0A189B18E59FA0849
249FECB6DB6E73E7CE7DEDB5D700A585D742980A064C0D04EB1272FCC8238F44
9F6A68DC86642F5A0C81CC67544D4069D8004A63EB4186D45508B586CDCEF924
3933A492FE98287C457083EA5597BC4B972EBDF5D65BD9BD00EB53CE86920B68
4DD637209F244342AD29CAA4914C1B7567C29A8187C4820F62C0117591EB8AB2
84E983C3162E5CF8F4D34F237A8B9F433A002080C360F130AAC0A528A742F364
9808E40164B33F482B784B2C2843D4588575300C01C96957AE5C79F1C517EBE4
C3B6D6629A1A170F3166D94EB516312DB14AE266C4F79C54349988C692A9A026
4B6EA7B9AD75476F4F3C93EACB0F553D956D6EE91F188E8337659BE0C73BAEE3
87A7A5B30515C8C43BF14B8868E148AC6718D4D07CE54A6099999DD18E6326F5
EEDE531DCADB59D3D86858DEDE896A24EB37A713137C3B2A3AA7B5AD696A57E7
3C1943A56044FDF97BCD19ECDB9AB60DDBADA6A391451F3B07CB8F0C22846203
AF8848389F2C28199096C360C6C70EC1DFD23BE042A6C10EA66FCD3ABE712C0F
F6B69463C4AA3BF4D0439F7BEE394C1A6B68B03D613A43E84313D3E0265615B2
9AD539888389343BECB0C35E78E105147241F441BCFCB5C618EB121E1C48D054
BDAE929D0D502687CDAC075E1A78D61A608B725AD474181AE995AB35FEE66411
A2C74431C1D70DBE3F16191BDD292D020EF93B8C6EAE6B02D1816094C30166C8
B3A6573991E05ACCB7279E78421E3C69184626FD75E31D7727024516C4A73FFD
E91FFFF8C7084FB11787AA1BA4DBB66D93B50E294FAE2BBDEEC3A857C1E8B50E
14106489C1606489006B481A2878A62AE4BD61A3151A11E40EC36C3351CCE484
CEC8C6C2B791854B32D5687D073F80CE16860A2F0D6070AC69DCAF1E14969140
0371FD1861FD04412630291063D1CB4D1AEA1FF529E23E247C002486D7D65F5C
3C7852A79F7EFA534F3D85522F8C1604D7ACC9C27EBEEEBAEBAEBFFE7ACC3331
BB080AC99F5FFAD2971E7BEC3178F10D8C6C6AE7CA18BCD199DD54D8430DB246
670C34B44A3A4699080152E3BE1A34B4D8F5C3DC3803FD46BD496DA95C072385
6D0A83D6E38692FF7CB3DE78D65169CB4CBA7EC2F333E2134463A6E7969DDAB4
96F6F5FDDDCD32FDF1C4D9172CBDE2A695D17472A85C94E31329B5B5207BA733
57758B7EBF327DB716F78CC2F0158C00E7697962A9076F443B45AD642416CF95
FA12095BE6D8569661566A514BD55CD30DF8E8BC7AC9B18A458C58C4192A3A1D
56E2E039C61CBF92DEECAA7A462490737624B74F53A57F8FD44983C6A6BE989D
4D64FF61FEFC427FF7EE07ECDBDDFD6E6242A6251D8B140BD5217F523AFD4E77
E29ACF7D5155BC44245A2A15324DE9DC505DAAF87F05537147E051364060A03B
B14118A0A69D3A9664872843F41235F07BEFBDF76F7EF31BA519F57E9DFC0E09
9EB1D0A5CC24C1C647A404068AFA7BBC28CD0CB214E831196C2AEC0AB2740169
C3241535012321FA05B82899A45ABC78F1B7BFFD6D16BBEA452EBAC481CFCB60
22E5293139B47A1A8ACE1A84358A42450A8B0F25561B922D74C0E191405461E7
0342C0DCE629A79CF2F39FFF7CD3A64D3A3E4A7F21A5C9948BFC295A938456B8
29F80ABA26934F3006642C0F3AE8A03FFCE10FE4A830422E235970C82F31CC0D
F356BE5DBE7CF9CD37DF8C1A2EF90A2643432317BCE4C6B15221C59025C3DC62
416345EA959C08418CAA09E425478A7D27E794F100C88F08EC55575DF5FDEF7F
5FEE1D31EB2F7CE10BCF3EFB2C7C02D826B87D56C9EA3B8DAB052A908A4AD6A4
AA9B11348D8139619A8BE533B29780A0951BBCE8A28BAEB9E61A0A7D20CA4994
8B2785B4A1DA391BC491C875B10B98EA44A64EAF005721F30459CF6094C10386
C14B9E286F67DE50D46FC3BD43E018912BE040B01499842081951A177D38AA26
68696AEEED0BE25453264FD9B479135AD044239A46317C11D63E34812CD19A4A
DB66C633929E9735EDE658DCB6C497AAA8AAD7D136C1F1BD8DBDDB6D2BDAE756
65B2DA5B9BDF1B70AC4869DAA4AE6D1B7B4A6E59869B8AAB42599555CC1F5604
813692CF23C11B65A5CAB982885FC3B2DD4013E444478803E1CAA34D58663A9E
8845A262D1966AD57CB55CA856BAE6CCC8A753850EDBE9AA58ADDBCD54BF6BAA
7A43F38911A36CAEFDC49E93EDA1DC4473722411AB1C32731FBB2DDBE6E4ADE4
D4F9ADC9FEC1814D35B9CE8E8F1C6B9A691B43A5D9D9AE13FFCFF1E9543C3F54
6E6E6919E813DBE2AF048BB0932061E9A8E13D7533CB14882B45E1FD587D8669
19C85294F7A89EC362C023009E65C9922577DC714703E2BC41CE20C1030C243D
AABF8B1AC00B3AE6AF8639252CE2EF1004C4B762220819A49868D0017C4FF101
A74CCE205EC9CB2FBF4CE1D2A009860D99308CC05D3712DA848839FA8E02A4DC
308FE4E142D0003D641A269AFB5FCF53C12025FB3CFC26621C1B6E50856C9A4A
33BAA196108E80A92BE344E0184CB074DF60095E79E595B7DE7A2B520E2AB46D
E1CBB3601B3912A64348D08438839EDA41A81A2A4AEE4244A71C29020B730539
2897BBF7DE7BD7AF5F0FE1B86CD93294D2E0F6297446F509CC3A61323C5C0A14
C6D0A04E90DA39F6D8637FF9CB5FCAF9F59A3215A64346D504B8960C55062612
5FE4FB21871C221A054B9F493092A840BD19616B238008E457F22D9690A81678
60E49CA09E63321CEE2F5C0DF96AF6ECD97FFEF39FF120444DCAD359B9722580
BC8C08011E8E9FD35A04F0110F1A8005DC38905D887FE2BAD0F1C8AC401F4031
1039AD63BD74C2AEB1B02B6369026F8464113510D8011E3FAF6F4073B8E3B7ED
A826DB6EB1A26931FB7C33C8E9F9725F155B0511959E425F7B6B575F7EA86552
D7DB1BD6DA86D99E8DF70C168FFAECC1BF7B6DDD87BDB901A35C4BA42BA578CC
EBF1EBD6BDAA730FD53541F0AFE89B488007327DA358AE887F10185E35B728C3
F1EB25C466FD5711C3AEF9AEA7FC39C71DDB53ADEDF08A4E7CC068EE8BB6F639
C9821B5176BF994CFACDBD474D8915FDF2CC6AAA32A14DED3F756669822A5A53
3FDD95ED733A376ED96696B7F44CDA3D63F524F21BA3552BE3C4969D76B12756
932B0FA53537241E4045EF97A9B4C035042E9078AB56ADBAF4D24B9148603B55
50AD80E3612C096E6AAD2F18E5468F23EC685C68E9D2A5B201C9F936EA6365AB
35D0EBA292F4EFA50C98B43710A7A650A388442B1C247F100DA061A546E3C5A5
21AC8B75FA3584638F4C3350BCE2785C11A454CCC0C0EBC77CE9E065A5B594D3
9F810AC9E27951C4CAE5BD987822917124108734F4483D0679C778D4481DA0EA
AA82E962686C62818871E469C95247D1A9E3E57918DA9661A8C0565D7CF1C577
DE79A76E8A4230E9F42F8CADEB04E35042A0D885738A3494DE600BF8D4534F3D
559CD6B56BD7323D339626D01F1CDC29682384BF8C909253FE947FB16728F475
D361D4E810CC0E3983EC1691AAA2A256AC5881EB82BE42F6214AACF5FA7B4224
E90F417310B4CEBE6C50C07810880B4179CB27E249DC72CB2D6CB001B271DA1F
206484B6031523226F78AFC2ECDA25975CF2D8638F81D807EEB5133641C3AAC0
BF586334B9E45EC452915B468008315F6835A5B5FF344268EF38AF064D306756
D00B45E6537CF1279E7822F0E4EA48D0202A14AE68F10A443F5B661032CA1876
CCF3A39E93083A8CC5A676B44FEDEA9421BDF4D26F02F7C1329BDA260C16F3BD
F95C2C99CC3465DFDEEA94D4B683E7EDF1E63B6B9CC0B5507ED42CB9A96A342F
0FDB0BC6535FD5862800B3DE49D2F59CA8A8826CC62916ABCA0B10328E574B5B
111941D57713E94CB95A139FA190CFCBCF63C71D5135ECB2EB3BAAA2AC0123D3
EFB7E5DDACA352393594B6924EF6A323A64D6CEAC9D566CD98346F527A5EC7EC
CE786553FBC73F7AEBB74DAD6D056BC2C4EDBF77529354B21033637EDED9F8E6
BABB2F5FD594C8B8AE512856945F450099A4672A3479B12AF0EC98F9E78ED361
AFE36868D8F2B2C141E5A9EABD0AD6AD5B47D30D9276E2C489E20ABB6377DCDA
638F3D609D005571D45147FDFBBFFF3B19DAFF2E9A4085642406731A68EE1150
CBD671A94A8B575E7DF5D5B233292E4746848C9DA1D986065D47FB273909706F
C4A88C940846C89EBA60C102B97F62A1F4969994EC73E6CC79F7DD777516558A
303E3098B1B8174861F070A107217489E8862F7DE94B3FFDE94F5F7FFD7564AD
172E5CF8EB5FFF5A8C5C6450D4080A5CA5F5E560D9046B593118B637A24500B2
7B8812F2BA806B014543F2AB279F7CF2A4934EE234EA55DFF2438674788019F6
3C82B5ABB4B2F506B42530272044432A42D5D38CF25BA0E659E735AA265061EA
12F601E43ED1E8885FC99F2C26A053A876465231FAD4A009E08411998E88A5D2
E290A214BFF5AD6F91D1847C3E5815BE560FCF552A5FCD9A350B4809B2867861
17396C7B9C0DF90F125B819C00EDC599E794B942F44F699D216411423733D08C
FA09B533240F0E3ED209B86B71CE4403C9F9E518F69EE3E644825AEFAFB7ABD1
21FA0441D16FDDFC4F2682C054C03E5DC70CCA0396951D0DFE332386E97B4EB3
B2DA6329318EA28EEBD52A5515AC9E163B55704AB367CD7DED83772CC876DBCE
39652365D73C4794B2EC8FE68EA6C1DAE0967E39918A17838B31866D863E4139
DB1671E2AA56A8D506E4C3B41DB34CBB502D64820895E578BE689AFE5CAE2C8B
DCA9886E2AFDDF794624661929C3B14CC7F162C55A7349652B1367AF1311A54A
D5CE9E7D67344D147F7E52C7A43D66344D9BD13AD43A7F92DDFBE2867C675BF3
E4FCDACDC5F8DEC9A1E73E34E29954D4B0DBCDF8B55F59A20A5E2C623BA672CB
C3911FD813F0CB413730AA266888CBCBDE07F5F73819606CA8A38F3EFA873FFC
A18E2221A1327A27B09BEC58E7C1E6C5BFE8E5A957F8FE2F5F7EBDBFC2DCB973
8354920A7B9FCA401F7DF4D1254B96C825C5B2938BA19DA4B848B26AE983AB9D
A34314FD4ACF3F842F484932EB928242B70D293BF02D508C726960A11ADC083C
3939E690430E79F5D5574973C45335D4F7EAF84823E46436C256398CD9B15E01
A8D9134F3CF117BFF885480182EB75122115968663842456439D04DC1A39C959
679D75F7DD77EB1C647A4F37B5B3FA44C9B85F270D47212E297D9871E5543450
42AA30B249BF0A50514499004B87E54E9F4FBCAE356BD6B0D5351BF2A8B1A343
58CA90957A3130FC124870409B49B8AF731A420A5363354487D0B203D4EA726B
F3E6CD93E131D16A84E46ECC132086CE6BB1A077DAB469F2861CE3E263115064
681CE9F8A1DE2F5E857D8A40C0C5BEE764045261D12F1C6A20DF3EF7B9CFFDEC
673FC3AFD8615B85813E8474597E8C1013E25AB2A5C566C7CC634DEA1C993AF7
2A013FBBA409A64C9ABCF1A3406F1DF999236525070BD8F72C3374DC8D204710
F38D84AC3ADF1265D0220E99EF455C2FEEA98465C513B6C8BA482CBA6D6B7734
95F8E2A2937FF4C20BEB3FDA986D6E59BF75536773DBD040EFDC29F3FFB0696B
DBE4C30F3BF60BFF70DC5191D6E6A121D34A0E79CA777D00D4032D64D5D3D79D
B1A1EFDDFFE8734FFD6BBEEFDDF9B3A6F46E19CA97F2B2A0B276C4AFBA35DFEB
6A9FF461F7F63EE58A46CD76B5973F39A5EA394AEEDB49C4FC949CA512CDF9D1
82EAF8B39AA2D450E7ECD6B8B7767E36352595340FDA739FB60533A23B3EC847
66A5FAD6D95EB5D74E76191F14B31DB9C29C753D5B07867A67A45AEE3DE31C71
3066CF9CB676C34651680DCCA3084D8F151D92F5205AFFEDB7DF46AD80AC52B1
F481911BEB716093225DA73798C20AE73EC29BB1A243A8216755300066FF030E
E6B15E8411FF7579D19C69287AA48B7AFEF9E78BFF0B9B4BB7F53CAD3F972E2B
F12F2AEE6070E1927AADA3FE135A6A7AB69986AD5EE88F93C8FE14738C51293D
15E9870D0B19E5478192AAE779484044BE1A44B7911EC78D4F9E3C190D229891
1EA909F409254D31C48A2C91AF7DED6BE245C1EA94E522DFA24681016B6A7B4A
673DB1494E7915A28F802FD67D02D26B8F8A77B6B5E6BD78E40807C9BF3209A0
9994ABC8D8803745C21C7A7AA426F0C36E59702701EAE5A51B06A0372E05C132
EBE0C6CA1843ACA3A10A7C142C7A92D7C2B1434282429305F4380F2647CEB368
D1A2471E7904BF65A4556FA7839BE2EA421049CC3771BDB92DE10321E52E5794
81A1F10B7999E4AB030E382024E51F7EC1B4C2CDA2C6C2AFF70B445339C0FE70
069DF7102C2CF27EEFBDF75EBD7A35597239EDFF339F20168D55AAF5F2DDD033
8828D343B1B06802C3CA2833AD6C79938D060B3D2EBA5C8C5715C46DCA6EB5E6
569389A62DF981F6D6D6EDFDFD55DF6FCA366D191ACCCAA248A8DEAAE7659BEF
7FF2679F3AEA6335E5160737753575D611430AA902AF1E35AA4393D4663792B1
D4EF7FBEF6E48507560A0349654FEA98B879C7E6492DE9B86F67ADF85E7BEEFD
978F3E7A77A8779D939FB460DE50675359E51CBFA4DC48C26BB654A462146AD6
4034E665E675ABCA14E3A3D53DBFB5D53627387BCCBCE199878DF4C4EA87AB0B
6632DB944EDBA5B77A2AFD9BDF29E6B3D1894D03C57CAB633C7BF9373A33ED47
1C76E80F7FFEBC1B24685C4F23B2FEC4273EF1CA2BAF20B63C3263BC6CD932B1
EA642FCBD2BAE79E7B906A1E9FADA4A11E9EA073F807F46ED57F57E188F380D5
0A12E9BF0D15FEED2F9C30105F0DE03CB8C328FAC041E45E268BBAEEDD1345AA
EF6A7D76580EF3CD6F7E531C0BA5E12F47D504D84BACA2D4859A8E1D22CA1348
E106EC90D2322D7A5E01215704D659F20A1E21E4EE264E9C08A98D181F68FFBC
F0D5708380C0C382008C470F029A21A3243381175E78E16DB7DD86CF093D5221
0C89A5CE9011A8E7A013AA7322915849699D41553DD8C76EEC2C350277050238
9C4C028D91FE0155A4D2480A47F5099052422A1ECB91405258BB28AED129921A
EA18C6419182565685200D6C1E3A52729E9B6EBA69F9F2E532157A7448C76B32
69CF625A1572104170336B85B9220B02D3272A340E90129401104A00AC043E24
570AFB71022D0EAC3A6AF58D904F1F850B471E79E4B3CF3E4B963AFC8B5B907D
71E5955722CC28A7BAE4924B6EBDF556E86CE2E5FE161BB04113588659736AA9
64D0C9BD5A13819E44F1574C99F51C6D9021888B0230ACB46F270CCBF4CAA224
5266241D8FDB11253A20572B956B22EC55A6A9F9C3C18144C4760D3558752635
35073507B9A19CB2CBED7BFDD35937CF3FFCC8B629CAA95406760CA4D24D810E
103D2312B69E8A909514FC6BD7CC92FFE6AF9FBB73E5D993B391BEEEDE9425F2
A4D8D29234F29568CD5F306BCFD5EBD7BFE7E58B4973EAFFF9E48E52DC4BE6FD
5449F9A65D8E1B41A3B3B21F29FBB56C25E6AAF6DFA96755C7642BB73DD9D63E
B967C7FBE55CE4BABBBF31D092D998DF6AA592D552ACEFDD0D313F63C6B69753
91CDBD3DBB253A26F5798FAEB833198B171CD15CAE2E49E4895C76D965E201B0
06BB0145AA4213136201BEDD381ADA080B2A172F5E2C9A833866E08800A83BE6
9863C4F218BFE31683223AAC40FD0D58B2BFF1C5C21403501C08239A75B276E5
92B23A656A2EBEF862985D400D4212B14B14636D723C3B7EE06C7ED87923A038
AFFF1C1B8FD25985D62EDB54FDCF3ACF9861D33B4E934E114C2E1492DA13A30D
E10B682CA23A689283DA2BB042B2CD1670FAECF3CCB00C7B1082260132DAA877
01945BD3A5122C56BA1DC4B118218F0D22303366CC20A782F81622FBE473F131
C981C3E2384A4FF2CA354478B85C80B682C98FF160FD89E2479F32114037DC70
03E1138853136607613AAA868075C3FE42C84BEB4D87705FBBEFBEFBFEFBEFFF
E4934F623C0D781E3B6C8CCCEA5924E5643CE08E66B89F75E96467535A835926
7211B3927F45C85E71C5156443C375E9C1B03FC448494ABD28AF7BEFBDF7ECB3
CFC6C61E07C74DEB92FE341D59A83742C2A8BF896CD67B91B35AD8087B6DE2A5
DB349C289F0DF2AC40EFFAC8EDCB303C7F988A43B695659BF5B22F71114C71CE
EAF55F533ABA4ABD7DF3274E36067356B198F74BA9482A21CEB1EFCA532B3B65
F995DC726F292F33B5DFFC05AFAEF9D394A6F66A4DD49B59AD96DD8A1F6D8EAF
1DC89F74DEB752938FE9EDCB98C57247CA1F8CD69BC6F8B2B3C40250E542251D
4BCB32D9D2113772EB92836FFFE8A16BDD818DC9881AAA297100271A5E4B3259
1B2826FCE4A0E3BDA7060626ABCCFE9D6533512F45109D9A50665C1981020BDC
1A27938E0EE6FFDFEBD3F6EC8C7EC6FFE8EDEEB6816C6FFBB6CAB656F5DAC0D2
9F3CD436B4FD65A3BBFFDD5AAB39757BADD21CAF5AC54A7FABD9ECF8FDA581B7
6E78D0965395AA89B061220AAC8CB0FBF1381296D481D87DAC8D059E87AC3E2A
ECB33BEA4960B22044AC63C3B072880C84F9AF7646D2CB45653DDF75D75D08CC
508A8A7040DB5478AE72069DD551697573A376B6C1E23494D67A173B93F55672
3F889FC246139570EDB5D7EA4D91C05C06F30D581D4816987E689F023B11538C
A018DA7B6ED8B041448FE861C02B8950DA555D6784B566C8D9C21A85CD4B909F
0AAB5B21A6A166A90CF5A4909E1AA2B7848A274089410BA5335DA3720F816998
C6F2E7962D5BE4E722C745B0E26103A704080A4A16014636C3D648884BB2FE19
3DD1CCB02326560F74AA7CF5E0830F222C2E42500E1095431E0B3D550399CB6E
CC50DEEC884BEE11A5F56340CE1CF205ABB6A1D5418326408581B83B77DC7187
DCA9DCB29C1FADE5F0D0C918AAB74340A41E159EEC3C81D9E61E90539D7AEAA9
6232C30940B30AD86218F6A44993C0A047B541CA3CF91CCB5D7E8B6D43023B88
57BD287D544D408A0B39C9F4E9D3D7AF5FDF80251B6991186197247A3C5FFFFA
D7BFF39DEFA0F4812566721EEA6F62E1105382FFD4804DA08EA7AD40E70F8A6A
58FD9BC17D817D42FE8BDA61FF9C3A2F50213F4C4AD3924A17CA95F6891D5F3C
FE847FBDFFDB53D24DB5FEDEB432A29198E3E3D2750345B9E26105FA241A29CB
AE54664579692B118BCB692BE55AE5C87907AC5EFFD647CAED6B9BB9FF179615
9B26275AA37DFDEB93B5298E57AB54CA56B41E7350A2AB0CD12C33AA8542CFFA
5FFCC7FD1D914269B0777236512C89428A24DD4ADCF49B23A9C30F3EE2A72FFD
B67F82BDBDAB929B145C3940367931DF8A99967832B66FD47B93B989D21F57B7
364F9EB7604ACBBCECF7563C9651992987B5D96D76F10D79E8EE99DFB8ECA52D
6FA7DCA45DF36AF1B253CBC66B7E77C6B407CB6D9D5DBFBBFC9EA0E4DFB3AE5C
7EE58D37DE082E199D4E7C1CF90361429BAC81F449360236BEACE7C30F3FFCA9
A79E1AEB3CBED6D017FB0E8F1E5DC1D9AC17362E491865251F7DF4D1725A9841
101DB367CF964D71F0C107BFFCF2CBF243F970CA9429B2F209736AC82C5A23BA
5DA2BF936C2E033D3F49778CDD887E4F84E2E12C0823C8B740C592F312C629C4
87DE32948A94B46E7249A84A2440D0EA12B136E64F76D527602DB18839628DA8
2D216749B74238E9484D408A28C8149916D9D294F80DD133B91636215913100E
227C1E825E0413940494CA75D75D27E212447530CF79177453BCB0B19C11F662
C3C4EADD7D6102CB5758BB2A04AA36E4339466A542D18283F39C73CEF9EE77BF
2B0F054D9B2165640E91A5F7425E657970ECE20916C9B1A246F27EC9922562EF
CBFCEBCD1AC12AC3A8944CDD19679CF1C4134F6CDAB4894690DA996FC7D01A8A
C92C9D78E2890F3CF0007CA954FD85966430386402EFBCF3CEA54B97AAD0B904
308C17856E90F3C016C1D3013CD7082B4EC6D204D8E4AACE318709FCE77FFEE7
175E78414FFD8D2A2954D8EB9C6C1946487DCC7C7203CA0B2F649874CC95AED7
3106FD7896AA0E3F1743F99A15202E00C870E2D158BE906FC90E73231A41DF7A
39C49CDA39A97BEBA60E33D16C5AADF158D50B1673D5A9065D25C5873087DBAF
4612B1A66C4B5FDFE084B68E801337B0EECC4C36F50F877EEAC7FFEFDFDCAA53
51463A36B35071F26AE36423B223C881977CD38F6752857269A014DC70269EB4
267479B572F7F6CD9D99A893AFBABE9A6007F224617B96E81ED7C99AE9B219D9
9428E4E658FDEDB574609B2A392CA84E336DF17882E955AE953772AF95DBF7EE
DAE7B0793FBEED87D16ABAEA55AC786CCAA78C9EED316B7366FE69C7960A7D9D
139AF3B90FED785FC1EF9C986C7EAF564897E54A91DCD37FF8C4C70F7BF395D7
2A7E41D6A1DEDF14900DBD7B84FE3243627398EDF0DEF4325590CAC02ED96DB7
DDE0C28EAA060E38E080D75E7B4D695037550788CBE72FBEF822009664E8A19B
2B76F38A152BE442B24EC87E0199869836541A821690E786D6BDDC08ABB54476
C19F26290B9AC418A0B030B4CE9C0895C0CDD70D3A021B20F82EB8E08255AB56
4D9B36EDFDF7DF47413262E2B24065FB815554D79CB27B65C4EBD6AD23C711B5
13A7F56FA9A01939B39056627F8992473705191E4A10C0CE41DA58DD1783D631
EAD500C8D332CAC13180531E9A4CCEFC99CF7CE6A1871ED2C3503815C362BA80
A3790BE5216A152252740302629014609220212833A2D43132C9575C7105288E
09F005B61D2B4FBE625BE391691BA83A128FC84BECF7DB6FBF5DEDCC14CF7614
10317BECB1872CCD575E7905460A25DD484D4026741835C8E18320963E964864
B91DBD619E19126DCE9A35EBB4D34EBBE5965BE47688B161AE1B382E2C2A5420
CB8DCB22C6738487CE2A71380A34BAB133A1E42046411ACC380C3B918DA50920
A9E1DAAAB02FE93836231B59EB650462A3C9462065A99EB1A02F8E9FB33F018C
155F6B760487CFD2FA59CAB73C1E1683A77C5801C3EC61A532B256A944722837
9488D67D3ED749066970B31E947326669A5BCC48B45AF3CA05CFA807A37C5100
812B601A2A6205EEBBFC21BE41DE29C7555CBC8E784226B95C73AA1D9D9D95EE
6D535B9BAA85DAD662BE33DB3130B4A339AED695552612ABBAD57ECF9727DD35
B9BD3757D83E5444E1D8C489E95CBEECD65CA7EA3707B965372AEB2DDB1CF1D4
96FC40574BD7FB5E4F6D41725B532E5B0BC6217353D75BF55AE840D5A9DD5B3A
DFF8F76D6A7EF4139F3BF8B757FD52E52CD5EE78057BE16587FDE8B71BA2AF97
92A71F952DD513B946A935E36C2DE4BA92CD7FCA0FCC6D9E5CB3ADA573FEE1EB
175FE495ABE2B810324752A07192B17ED8455C854585C84BF9758618790F7F94
BB7E1CDF11D124EC5352EFC91866CE9C290F94EB81993CB1FC88A1471A03B62C
B1E3F6CEDD58F510B1AF352983B521B770C41147BCF4D24BBE46573E5C638C20
0F94A1086B78D6146A9023D8FF0C19EBCB9A616E9911FC96C903EC28A4671949
00F5B1FC70DF7DF77DF3CD3755D8EE87B99A5D7AE9986B7C420C38A7030A8651
2F1D1C05CE29F9FCFAEBAFBFEAAAAB549D0E5E74099054E4E751757B1C8E2170
2608B340D6408DF3FC3A4DBC18CBB7DD769B5E5E08662744668068024C580603
1D00BE7E1516C7A1A38BDC2398F8CC7A3F58747AC0D90E3DF450B9D07FFEE77F
32B34D3095D292C048DD934A0F2407A8E4A25402A788DEEC1BF12E901A8EE513
C0F416C1B778F162717A54D81148E78480A004F7B2AC1358F408EFB0DA4387D8
EA99F04B2EB94474BC3C56087D64DA116167BE0AB3EDD799FB54E803C1E517CF
065E149A72600FEB68D451350111B1584B72A48CE1A28B2E1A6B89C2B2C16C93
B805914FA49DC01660ECDCFF12D121DCE682050B4410200F375213E855230035
EDB9E79E6BD6AC210E6A5813F8BE593F612A1647719FF80481AA1E1A8C458358
5F5B4B73776FAF6DDAFBEFB5CF9AB756B7C61276AD6ABA557718E763D4CB8195
6802DBB4EA1B471EB1B7FBDC3DFFF4EE5F9A92A2988B86E93A4E90A8F02BA5CE
647AB0982F29DB899B76D21C182CCF77E3384F45793B5425164D6EAF16139178
53536C53CF60C5527E345E28976774B6177ABBDDAACA04CD898D54349E8EA537
E4BA7B6C65ED9F1CECA84502251DF8048148AFF32329C4BDB62BFF8396F20CF7
A67F5DF9F53DCF8A38916A62C852D9854BFFF9C7BFF9E34D272DBD76CBB39D66
D4AB66CBE5885FAA669B12FD1BB6362F985DD8B0DD8F9ADD8FFDA4ADB3B5777B
CFEC59B3D1B30F203DC887F171FD483A8ABCFEE8A38F1AA2A6480521DE024134
162A54D6FC51471DF5F4D34F1B759A67A093D5688431A04405009A3F47E0C808
594C409E8A86A0042813D7D3300C3B6CA60D0909924D1ABEC35CA48CF3802156
0E92CD8379011501BA637FF39BDFBCECB2CB4013AF34C09CF8359FFCE4276169
E232043B02233F6AB75E66C3A8FDC661621AEBA587771020863C5561974AA407
600692044227DD832638FDF4D31F7CF041422D797E766282845ABE7C39986D0C
AD14000A52E72B655703B1E8C559A16F216A06CB48D6D3860D1BE4F8BBEFBEFB
A69B6E426757A41664FC3ABE58960E624122703130594024A626881E7D7A1B60
4E9C67481C00DA80443AE38C33646CBC84D8F2F8973964C06600AEE58A1F155D
0AC751DE10264B51CB6240CC12CAE5316691CBF2091B591B1AF2987C3E702F64
B4E8D583740EA216FFF66FFFF6C52F7E114C73C898C9E5E48EAEBBEE3A648330
78A5396A447629ADD46EAC8C31F1A6322DF2E0E0228FE3B3C23087F642F0170F
116B1B73D5401C465B448515A4E05B1D353AC48C028914E578795E7CD60136D4
AF0B4ED4F65787D90112B1B8F80451CB46DCD9F0BD9A682CC3CAC4934EA91855
5E532C1E313C6C40C7F5A2864A0C930E89E9EF28C36A6D9DF04F471FF3DC733F
91AB6F1DDCD696CCB6B4346D1FEC8D146BCAABED9999E614CB8E5B6E56B1B48A
ADCDF4E772055105D17464FB502DD2627DD0EF669A54AB3F61B054ECA9156DD9
1A6E4D647C2AAA8C9ADA63C2C4426E508CF4849598B8DBEC17D6AE1E9CA4E27B
D8AA8EBC33EAEC45C11D2B518DF56E7D7EC7F697B625E676DEF5F86D6DF9D441
73F64DB526AEFAE63503A581A77EF8A3EABA5CE7D7DBB7EDE8B6EDB6A837C5F7
62C9F284163FD613338DAD439D53276F7DF88703437D3255E2DF106602F93B3E
A31C1C3E39E6CC33CF1431083BC30CDB462A0D12C9CD32EA79E08C32BE22EB10
7E21FA8EC1100761017D5C94D4A0950850D1A4F1D7534724725761A444AF8262
E31DB4A71429044F08922AB051B84FF464023F945D2A83139945779E5DC22943
45E81F7FFCF1F7DD77DF934F3EB968D122A847445A00B462D11384118245722A
6CC219336680BC8CD6EB2E69023DBF477CAE0C69FFFDF79749FCCD6F7E83500C
75006C2B9D491C91385427884895C1C87BF493E10CB217047EC5D25018A472EF
175C7001A4869C448FE9AB30AC4F2317A63DE1225463A0B8C04A42E131A2F3BA
2CA3BB83CA75511B32C30002410FF9A335CE6CE057C178105BC013A46447EEBA
6186C7C70E6109C245057C080E25D6122B42405F289FA0C050460EAD26C70700
95FAFCB0264B9F3DCC9B8E1905B00D3C0DA2FF60B8E05F991F44A5F06481F681
DD240E289A83D3D305926D2C4DD0001B03E7287BFE8D7C6133A3332B541DB872
4F39E514F1C4E561E1B1CAD818A244B4C7D899F58BF5316AE78CB10AF30A5CC3
4C230F3F716358ED8348289318A66535EB4DC744313AF59EF5F120F7D8924DA5
D77FB86EBF797BEED8B4C9706B8552B139590F48BA9E6DA8782C16B54CCF0920
0415C7330D7BF2E4A91B376DB20DBBEA97EB419A20B2B3E7A41903DB7A93C9F8
F67CF79454B35BA888ED9EB0BBA2513B5F14713B988AB57EF6F327BCF8C66BBF
FBCB9B25550C6040D964BE5C10E19E8C25F243A588652E9838399D0CBAD2EFD8
D473CA994B6E7DFCDBEF1943A9BD225E3CA84990B9B1029FC0F45CF14464B1A9
EA966A536BF3E0EA813D0F9B77D95D57BDFEAB3F5B656330BBF53FBEFD93D2BA
6DDE81C9D4AC42DF641531ADA4D73AE4D422DBBA66374D7F3F976FEAB75DC3EE
7FFC571F3BF880356FBF2973230B432C455061633EC7C1E973139D78E2890F3F
FCB0AA3BBE7A0B2F3C05C264C6A90F602523AD22432B70630C9090212684E829
32BA2847E2DB919DC375F1A8428C25C0D3B85F4432FF6A6DC09B40FC413E1213
F5FAEBAF975393E34C85E938F0FE533AB0C39719767E8047ACC36FA05774C7C7
08EB3CD977052CC766D86073642FF5FFF605B3541E920C12DDE6107080B854F5
CC8C588EBA854524064160727579239EC15D77DD05852F1B1BC5537AF49F3A00
7F820F47142C818FD467A8BD82EC5EB162C5D5575F2D2B4FBE15EB95D607C643
DA57B5738A1F6B14484A997014BECA3110E8801EB13C4D2FB9D0278715AA44AF
4293C900383F725119E1B265CB8094051306C85874C530AA26603DA00A934CAC
24D70BA1BD9DBBD843FB422553A819218527CD76AC4910D9E34F426F09A19129
92ADB574E9D25B6EB945C68CDD0563878051199238738093CAC0B0267568D948
4D70F2C9278B0B8F8728C7CB7E9337E354123156AB42DE21D691B007061967F1
A71EA564B2CA0F3B29A9112852C20AD87F7BA7FE1F81F90CFB39B8A90BCE3DEF
8E3BEE08347D3EBFFCFAE5CBAFBB0E656EB66988948A1A762695AE958A9E5B4D
8BC7E63B1537609E88980AAE8568E34424706EFAF2C578343E582DB7C49A7295
5CDC8C797E559EF004D72F794E5225FB5571D6B4B6EECDBD1322769BD59C2FF5
C858E23133928C6EEE2F374D6E7A7DF3603CA22AA98448F65241E4839289B9F8
A20B6FBBF56E794A56AD30A373825F76B60D0C4C9F30E7D59EF7FBC581D8A7D9
89957CE59A2A582D9EEB8B1751AD28A7A6DAA64C2AF56D715E56664CA5174EE8
7EBDA733357F5B748DFA73AAAD181F3A76AA5579B37C74466DCA4532AA1651B1
FE8E6C3931146B99546E3354B6E7911787867B7BD5E0C601A4078C3BD8D4C712
3258CF2C97515A1C18D4F140228D9FEC440C8735E4CC5419F59E04EBD7AFD7E9
E8E50D42AF0CB10033065380B855F822483960006A04DC80F410DCCB04E90C2F
7E9D4E8F644CE8BAC79DDF0047D955493DEA8BE935A2B671576C62A36B39CA14
8833C64FB1C7987683C447F00416BA0805CC0ED9661CAD613A9F0D72E3DCB1CC
64181AF39AA575E524F2523624F2F8441DB00A4FC750A1D10A742437FFE38F3F
FE95AF7C05E20C7724CF52C4F1CA952B81DF2565A90ADB5F203C7243FD056B02
4216528FBC1A2A54CFA4C266551403718C7A613D21BC034D00B3E5D39FFEF44F
7EF213B92911B2AB56AD429A818D5674DB04772DD38E6A8991557EFA4BAE7BE7
9D779E7BEEB9841A03D086FA03F9131D7AE54FD9A2DFFBDEF7F4E029560B8230
BA4C9437F2DC59B622D38B2E6C88FC8ECFEBA26F755D13C849162E5CF8B39FFD
4CDE8B1E42A01F0EB59C563E617508E303549CF215CA0C496BC1C5833246804F
F4381EF23108CFCA02B8F2CA2B7136C04B20A1D89D0DE2033EDC58DD10793B78
C3BED0A958B08A82C4B21510CFF9AE17374D99B28CA78A4E351E54A49979B776
CED95F7BE8D1474496B435653FDCBC3D6629DF5311CBF01CBF2D9B1A1C2A4C0A
982B545C5931359C6496E94E66D2FE8EDEB9BBCDF968FD07D12060E52A33DD1F
B5D69607FC64BCE6B99144BC7728277BB56342C7E6ED3B5AE309B75CDA233DA1
5CA90CA4235B2B855CB122032DCAA8FFAF526595F4927EC92CE5CB86EDC59B63
2AE27AB5BF460EB16161910C54FA6AA5683AB1C08A257B8B7F51C9BEA6C9663C
95E8E9F4931B8BB90E99888CBA3E97A9A672ED99D61DDBFA775D8E2197C9763A
A8F332C226837E9DD180F87DFC89ED00694EBD3E6BD6ACB56BD7FA61B7039D34
6CE46BA7004E88651867316383631D92ADC40FB90674731CF63DC4852CEFE08C
B2ED518C404F1F452BFAAA6AD030FFFB172BAA54E8074110207242C411B6BD1F
36B7D16B4028EFE0E383BC85D301E239E23591F727D8D40C1BFBB187A20AF58A
1F36785261A1202C35C470C02F0FE989E42A42EAB2F3757633762C01B59CCE6A
8007097E4DB959F4449341227807E27B244E6923CB9132783005D1F920EC52D4
F6673FFBD91FFCE00772E439E79C239620B4025046440003DFA6F76C414A5F6F
1F068CBF1C230323FE0CEDFD2001E5577247F7DC738F886998EA22F56424487C
C9CF11BC3676E62E6D78EEC8D3CA854E39E514192D16FAB469D340D9088F441E
1CC1A6EC74462715B7C0E4D3D1471FFDCC33CF408DF15E505C0615FB3F606B50
75F404D8E5E0429167822D4EE50019030B9EA12D60D91D73CC31CF3DF71C9D7D
19001ABBC2B1D6E17DBC34717EECA04004361E01C3116C34364E3415AA82CE16
6BD6B2C9D4603E17B123D3674CFD70DD7ADFF3AD3A2184389BA948908896ABE4
7DB7ABA37D7B4FB7680CF9767247AB53AB0DF4E726B7359787F2F99A9312A151
47F444827CAFAC51A3A644191846C44ED79C21E5CD4C3577A69BCBF97277A9B0
CD777B4D77875B811F9D48C66AAE93AFB81FDF6FDF57DF7873A2526D2A263F1F
88DBDD81A9EDC9602AA64AFF6332972B59BE1D8FCA462B5755351A37ECB8E186
76AD9E580A1E77C4C9175424DA6227DA4B8EE9C5AA7E6CD0AFF6AAD9B14E5133
D3537EB1A5B26253C24D953A32A92DDB8ABB28C7FC7A776EBF4E0B6684ECBF6A
E7EE6C2866E42AD5917278B2865649CA0FF1669CFD8237A460D013C2631D0FC9
0944A2DEB2945A078638FEBCF5D65BC5F230782784030239ABE31175ACFADF4B
13A8BA58C4CCE2FDB1C71EFBCA2BAF80EE51670BD059CC0CAD1FAFD2DA41C8FB
DB6FBFFDF2CB2F6F6B6B033252368FDCC5F6EDDB75E38BBE05BD2D98F3B088A9
DB79A7DCB194A16CDF06DD801A4536F011910186259DF60E9CD570DF647AC9D7
E6878CE7728F22EB45B83CF9E493224410D786850EDD8C56D4B7DC72CBA5975E
4A5B43EE4BEE426E50E7A783C182781742EA40BCA83A364CCE0C2E23643E90C0
649361E211E5BDD8ECBFFDED6FDF7AEB2D12F032E3242FD1550D4443C87F3440
B6467DE8506FF057381E066A808E456449D52366BA3B88A50CAB1F66B511764A
60520A758B575C7185DC353B548FD35144DF420D19636E6FDC3BA297B012C4C9
43C71EF90A406ACC007BFE206B8255C79A12198C1C2C1A0E94B44ACBBAEBE120
4A7C9623C027200786CEB634CE7EC43ED735819CB9ABBD63EB8EED996C76BFFD
F6F9FDEF7E1711715E750C5F2565BD59817F2952408652766BD16422F84279C5
5C3108F8D4E1255D56744232E595ABED56C4AF39A6EB476CCBB0CC925BC93925
591087CEDBBB54C8ED0838BB6ABBB54EDDDC3F5048443F28F6E66C2B95C9166A
95814231DB948DC4631BB775A74CB333935283F9849DE88EFA038667384AE468
C552A9F94D3BFA7B5542354FCA1831B7582BAA2017AE6C34D6D9890433F833A6
A2855A55FECF8A347BC64C2B36A1620CB8850F62134D634B777946A4AB637EEF
7D6F55FB6C953253E55A71D780297FE528A39C957585E6BE54E77CE127220DF0
2DF8EA11F0089A3DF4F4A0A52ED833C7B7B071126C4CA2A575485EC30BC109C6
4EAFB9E69A1B6EB841DFAA40F4899C947528AB11202231400DC452E4F7805A23
72846A4C1A1D1807A39CBB3685636F3CA25F65A38A8C1349C7EE34D806285786
83827A2B153672227B0CD1EB84A0408DC9578B162D12BB4CE61D617A84564907
2D73014C088D6B7A9ABA03045F1EA671A9FE92F388163DFBECB329C7E524C486
12062ABF42CB65A85F6C78D6C1A2B803578140C7D6153313E7019727CE03E67A
9A21009950592E5FBEFC81071E90C3E4CC2CAA028FA97CA2331F30FE2E3745F6
6606A979C0942953444D6266CE3CF3CCBBEEBA0B640F73E6CC11918733C80215
3F809D57751744BC4E5964E3B33290B4032F0670601CC824C80D225BC3C1EB1C
AEAA9E6ABEECB2CBE4B1E236F1F8D09F190790F307DFFE2D0BB24113C86DCACF
6566880026AA62C99225322D58784A4BE9EB952528D859B66C99A825F9E4FAEB
AFBFF6DA6BD9E8AD211B0C56193C0204CA509D833435B62198B2A01274CCF858
93CCD02E9DCBC02E49A6F285BC7C3D73E68C751FACB7EB0E415496B765BB4ECD
366DD10483E5623A91EC291533F198A7DC7CD91135B0F76ED39DDE814CD58B94
9DB48A4CCE647D272080089ACF5866D1AB0D560BF96AF9A2F3CEBFE1CEDBBA62
A9B411115FD730131BBD9C6327F2CD89CE495D1F6CDCD03B3854F383D6340F3F
FCD0A2534F9F18B555D5E94AB7AE2F0F8A2688995171B4E511DAE95451FEBF49
256746626D966757C5B1AA9454D2C6DD8DB8D982A1629E1351154FD5BCCE587C
6A349E96B7C6A6B5F9F7B689DFD13677BAF7DBEEA1FEAA1B1187C1ABEEBA4F80
3924799C58035FF9CA57641142B6EAC0B091FC37A43060A41AB13E9C761C1F9A
5626C21B882DEB159123C7C98C20EC5A76DF42651556050347B4A5864F47500A
9938C5EEA35BCDB1FE1D7D02C84712A0CAD207E71A46894FBC906813110C72BA
29CD4D31C25650489F92B70777840D86F3880015D582C8C93DF7DC73FAE9A7AB
B080562EC1724DB57337023C45915008B293BD0057944DBE72E54A586AF215D8
8A60CAEDB3CF3E2237212900E4A77D8D07207A028BE3EEBBEFBEF0C20B45B234
4017E41272985C856C362ACCA642C0C10E850328C75C577F0141CF06AA2A2C59
C25396C388DF9793C854C88D33718D64B5AA2B2748343116E46C32E7401CA1F4
44261F590A40DC102ED3AB07C6410313F52C3F9427F5E1871F22FE23E609D265
2A7450888E50616130CF2943454E1BFB0D412DF4B1812305870C69F6BFA509B0
1AA1093092FDF6DB4F7C23FA5B7277F2AC65124451E143A86A59BA282B5121DD
371150A8BC01BC829441B847FDBAD8BD56BD8B998EB320951340844049C1AB23
727CD4DB194B1398CA306DABE604136299867283E8505CAEEE7971658802901F
0C544A71659694974CC45BB2992DDBBB0FDB67AF43F7D9EF773F7E3E5DACCDCC
B4E576F42495612BB3CE7564B9B65FB554D1A8557CD773C4DCC9F6F776C70C71
312C3399DE562DAD2BF789591B4BA486F239CF365BDADB7395D2F6BEC1582A66
972BCDAE3DA56BF21B5B3F2CDA46DC1271EEE5DC6A4DC5AAAAE6473CD5A1EC4E
95ED88AAA8234B2002B2EB11FFC65C6546125565E66B05C7AFB75DB6A6A7EC69
DB7EF16BBB58716281D7101B549954366FB87EBEB0AB9A00F22A5E7F2191C92C
178F81FB28AB825CE2D8B6700A19A5815F48A02609D046BDAE48865FFDEA57EF
BCF30E0C47D4A68C537A358E26800027D4155CBF2AB42C0D2C6559AF681D0EB9
29BAEEE1871FA66BC964F4FF00E539CEC6E364C9BDC9649161CDAA370D07DC1B
B38F641DE49D9E1937343A1DA08080AB114D76F2C927DF7BEFBDC02F2A2DBCC3
4CA9EC28967A3329A26B02FD120DDDD664EEE442B26921768DB06B02741B2D6E
7A004AAB8065E996BC649048263FFAE8A3801B21E0206FC496147383CF899C80
AC5087A3804C232254B8849C8100272439682633660524190B2CD96D0D350498
312C5F54CF61C0E484A08BA6971FE3D600B3E1C48E7CC9A545A92006883B8509
82A70C0CDB6EBBED8628194BED748A2E14BBC82588136335AFCCD8B9E79E8B0D
099BFA90430E1151FEB7D4AE376802D8FB840563E5D3C9906FC515138F042C81
340EC42C58BA7429D9F130B7C80061FEE110D05A848DD5908783832F6F301BD0
1C18007B0842BE8FDFC570D4E890512F682A964B9572B9A5B9A95A2CD42A4E5C
7490E33645634E4031A45A5B5A7BFBFBA64C9BB665DBD64AB53A736287932F8A
8BDA69C5DB5C3FAECA73ADAE8A5B8D28CB364CC7F74464970DBF62CB1BAF39D3
BCBA6FD3B468BAB3AD7DE3D68F3ADAA7BDD7B363C8F23F740A89486C409445D0
4152891D71E59597DE7CC76DF1AA3739926DCA645EDDFE512C9D5255CF36ACA2
EFE46B66C5AF544553894ACDAAEC6E91447BA4E816F9181BDEC402F6D3A49810
9E9517E5EB57949F6B4E7AB377FC61755419AEF25CE55888B6DB11B94AC9D835
6267C2C7D99000969FFC092025FC572364DE641819140062F1205A28EB4744F0
9FFEF427C460102E1EE73962A9ABB06B2FA4F138FC6CE3478780560720FBA8A3
8E7AF1C51751BD14944C2A8DDA82920B75B66A67DF533793FFF72F645F514381
711F7AE8A1AFBEFA2AEC41F490429E5D4682080690EF7ABF46F20222D58CD947
6D14823C1D1D1D279C70C2030F3C002D2237882A2D390F0416341FB6BAD2D250
BEC6E1435F044948521D60426114B37C175A572650A618E05478737ABF04CAB5
638F3D76F6ECD980D5DE78E38DD8AED8E17221B911513314B80CA6C1DA856642
A05F569B4C172939C97BA3278A19BF420C10E5F5FC89119685C3DE91CFC55760
B34CAC48B91DC43AE56099D2D34E3B0DAB0D21357803871F7EF841071D74FFFD
F78FC5DFC260086241F0E4101D824895F3CBCFCF3FFF7C3D6085E1B1341F6C28
A0AEA214463B11AC284C027B0EABBF01E9303263AC6786F4D611A80682FDCEBE
750408912F0FF5953239F210019B86434935A02320B8B940EB825410E0553A39
237A19EA68905DCD1807AB3D16AD890F17B5C58297556E780166B42B99549E9F
2F97445C6663C942A59888277BCBC5C9916844FC6ACF9111CC8935CDB053135D
C32E575D65C76425881A70AA6525FF7915E595552D93686E9BDCF197B56B8ACA
C9AA44349529C4A36B7A370F283F194BCA0D6F2DE52D65B4CF98FAEE868D9909
996A4F6E8A9D741DE743559D367DFAF60F65BDF9F2DB5242FEA7C4B8F78372E5
5A7C7224353DEAA5AA9EE5A99DBD76C8A4603F59A2EA5432AAD266A2B0B55CDC
6664CD8E81EE41B7E64695198D596555AAD582FB6DCA740CE6BBD5AEBC680F89
48912D43F0B43C1AD91A8821334FA6F38820DA012C32BE95450BFA2C069174D6
93519F2322DE147A0C4B8EB5BF46668C99A0460059DECF9B374F7C025863818E
D1F124679D75D64D37DDA4573CD300E795FE8E3E01A718A210E130E460314132
B0EBAEBB6ED5AA55207D431681E4EF2A6CC76C840DB3482A075023CA37C04484
E943BC1EF10476AF26AC88B7AC9B697A852A9E2E00C590FE32240A23B1EE456E
32FA01F1CDCA00B00890941B55C772B6030F3CF0139FF884FC50068C0091BC81
71AD420D0FD103C708591C3AFBAA0E711159431221F698E4C8EFBEFBEE8B2FBE
18A29934217206D1B2A79E7AEA15575CD1C0E9AFB46821F0AC9059720C829500
3CE87D3C5498FF6763D87150A4F08D40E641201D66067F42AD22518415CCE581
B17DFDEB5FBFEAAAABA8C6506D8F183D828A9819A65EF5718EB3201BF2046CA8
A0B79ED641E56ED838131EB7FCBB78F1E2EF7DEF7BC89DC89BAF7EF5AB2A547B
2A8CEC31F5AD34D0373C7AD28C53FAC355C208E5FDE9A79F2E4F53EF223556E6
702C1469F01C5D473EED9CD2B56DD3D680AEDA554D8978AC124460B3A2252CBB
AF5C98DC32E1A3FE9E5993A6440AC5FEC1BE8C1D4D3ACE24233EC177F68876A4
3D35E0546386658AB9ED072CD88E65140DA7ECD6648744E2B19AE9178A85782C
B1BD9257A9E68F0A4345CBCFBBB5A41DF32DB3E03A05DF29197EDE519D11ABCB
4A17CB79F17D3EF6C9C3DE7AEDCDD25021EF55B7C8392A414427AE322555A9A6
CA9119410B4AC71E1DEF5FF3A211F12FFC204C640C36F7FF29A70A7EC2F044B3
9989A678D5A854F3AE8C3B60CAB6951137DCD12D95719607B6A118408F3CF288
3C38D436CAEE40E93E4C101693B3FD8911D6E103BF803DA2F7F0D02103235F28
2080FB0EA43BDCCD71F6D7A8285215663868D3B00C68D829C19A83C94CF6082C
7D0817D2DDA8B07C06EB155DD13926EC1C18C5CC5BC2C0019606A0259DC59B5D
A48DF005C83CE0ED2C1162408D776BD4393098BA10E7EBE8A38F7EF0C10755DD
65839B26F7C6CA29D688EA907F96FFD013A264811C6492504FD0215A22778A1E
E5B4FE282620E960FD352439C1F28103A64D9BB675EB5619E4673FFB5931F4E0
70C8133AE288234E3EF964DC0516CDFCF9F3DF59B326B0D4529182B8F266A46E
0519E9A66C7E7050F95E6B6B737F5F9F690799F0622127BB33158B544AB5AED6
586F5F2567A96CC6CA0D88CC329B524DF9826853D73454D51FB34B25874A6B5D
EDBA05406464C3F9B14FBEFBDDEFCA8E924F40E38CF23150443047AA777054A1
A68158677A8DC28E7FFA61D92D4B78E45F48CC4B2EB964C58A15D8BD6C4F8484
3313CBA45C1CEB7E0166E5B4C05E73C3FECFDC72D0B8A00400792AFB21738FC8
DDEDBBEFBE6BD6ACF1432EB0864C15AE48A410DA7002156684545D6207C80402
BC88B99263C4A35AB972257D0E0E0C9E442C11177FCAB48C8869B955474C12D1
549326B4071C50B92111012DE9745F3EDF99CE16F343562CD254516911A786DD
15894D73AD94EB56828CAF97B0935634922BE6A256349D4896F305197A8FEA8F
AA9418F5F1483A93697ABF6F9BD5DCF2C1C08E52C22A96CA93A29962B532A0DC
7CC44FB4B66CD8DEDB2AEE483C552DCBC6340B86199FD8B1BD67B0E894AB56A0
B1AACA97275D279C9035AB0CCF6F3E3453A8166D91BDE96859AC23A71C94D319
2ADA636553CD6EC9DAB27687929359462A912C0C16B2A9E17A58AFDE980FC277
9CE80A75300C4A884BF8A368BCC102405A27840822A607413A1667AD0899BDF6
DAEBA5975E127F11B00879890978CE39E7E054A86D02F258E71CD46B0CC7D98C
90CFA05363698E0AD198E2CA9F79E699DC533482D9C2CB207B1A335410C4E241
BCF7DE7B48588B0989C423FC23C649B0D9642FD178947959B66C99D8F24C7C03
1523774EDFC40BBB47310AEF692D33F59008E4290D2B6C75DA3814B5EC10ADEA
B102B984EC5599773906D5B940E3901AF3CAFA8B0813B93AE24BFBEDB7DFA73E
F5A95B6FBD7564792DE79A928E1D6891EE8374103171C10517C85684CF88E22F
4E970AA1B1D8CC721EB9DCD4A953C19F2A33FCCB5FFE52B48855E76E4C06D355
3222D1C0F0AA2B63E5545ADB824D5B2E954429C5A2C38102DF0B2630914CD73D
A761A49D3C0CDFB3E4A86A15017DAF1EA4F59A9BB3107CA36A02406CE52EE43D
1EDF382B7B573501CC059937F6E034EA5D7D4456AE5FBF1EED7190E1077C5B3E
D1B98275C3BC4113181AB91B5D01E803FC56BE45D44B960A0A2688310509C470
0CBD5E3832D6FDCAB580A192652F87119D8561135FC792636E4511FAAB57AFF6
77EE87013A2F3D95C50D8FC52F330FC643B9907842A2C9F45C3AAE827A1A3205
A8D00F664681A94BE4B1E3C984980E2DADCD03BD03314B59AE8A21FB1D89C522
56369D712B4191446B5A64E8502C1E6DAE9A59DF4EC5A2A209A67A9648A9B25F
F1445229D9B9918A53B18256F6A6A76A6DC9D6C1F260CDB2326D6D1BB66DF194
D5AD8A2A92A9A5131B07B737D971AF5AAB2ACF6E6ADE5C18E877BC4C2A96AAAA
B469D52A45B14CDC44CA4DA7BA07F2A55AA56C29C775AB41415BA009B0FD4C5F
D55A83A989B7C49A2634F9965BF36A0185B6EFED7873C8B054407F2A73E918CA
370D6865DB84D4D65B07ABD09F1EF5F9C20775C36E83301A103FD7FD661CC388
B4F8E564411F9FC98E1200E93A4806D2EDE0302EE0860A447DB58F7A7E842EF4
8A4582DA91CB9437E243CBD5659037DE78A3086A71A603CA038C49EE448ED029
4F95E65C4C9A34499C039869D01372CF720C1C67B058430802D68DA954750E55
067F21D9C904CB0DAFD3DD40EECBE560CB93A0036B9DDBDE0C7B094079888E39
F1C4136FBEF96615521440FFA360951E19A686491191777251B648541A0D085B
6362A8BA1AE014B3AF248BD7D8EC457E2E239719837AC7E68487818A7F39C9A3
8F3EFAE52F7F194FEEF39FFFBCCC3F28CFE4B75BB66C79E6996754AD148B2776
F40E24521911FB5F3BFFC29EFEA15CB1F89BE79E0E74831841D100AB932FD41B
20679ACAB9C1608C96E978662491B2E3A9E2C090326D55CB9BB62F1E94673A01
EA0F2BCD0836CC589A008B4146F5F0C30FCB138738FE7BF904F01D3181279D74
923807A07F612986086B99313D0CCAF4804E9AAB6F063F64AA20B5145848E59C
FF9FB5F700B7AC2CCF86DFD5F6DAF5F473A61798A117156C115B623421620121
91A051312222D2150121A022022223204D0D56D448B000FA0958F83F63C1A0A8
B40C300CD3CF9C7E765FF5BFDF759FF5F8CE993927F9AF3FFBE21AF6D97BEDB5
DEF2BC4F7FEE071A37E81E3FA7D79EE1FDCB2EBB0CD442271E2E23FC1F941E62
02731F17E214589033CF3CF3DBDFFE36912C994DC87ECB4CD612F54D19E5CAB8
E6D9679FA5E7739E30309B0551EB1489228799BA210D0B5C4F08000A6C13FC80
916A42BF50A934BD4F4EFE0207C7FA8E2C191EDB350685A3D7F7C14B47FAFAB7
EFDC814BCB5910189F0FD77A2A95D2CE5DA3C3B846F935AFB8DC2FAD4EDD320E
7E82D364B7C34EB150D46A596A851D0D3AB4FFF2359DB8FBD4E8F396EDCF26DD
FE9E25AB0F3BE4FF3CF2AB5D4103D6EB013D0371B33D1DB7ED5265CA8A475B9D
52C15A5EEC4B1A4D1D75568E3F3CBC3BE84E343ADD386A5B318611679A0BE148
29096CAB1824810BE158F13B612BEE86D9154A85BA537386BBE4149C621807F8
C5EA952B9FDDF60CC3A4F4EF490BDB8520862426CC501CE98AFB22D5F8923042
89ABF262ACE38E3BEE81071E602EC3427E7C4263D14541DF91C800763DA1C7E5
820B2EB8F5D65BE9C19E478D565E9EB6CFFB9BCA101BC050F316980A71AD8BDD
4FA66D890B8571572AE052E343BF10FE7CD7BBDE75D75D7791B69843C203392F
64A772578C084F1C1B703D327D5030F823BDB7F41749333F7AD6D8974A62C882
CE362FFD5CE5899871DE23570AF0B8C1C2BF88844AFC192E84898C44FA10AF11
E6429C7DFA7CA941587BE26D48F9D50D37DC70FAE9A7439CE2E6586EDC73EDDA
B5501545864BEEB060E08815C928059E2BBD6E5EF5AA57BDF295AFE464F17470
25AC9E363826C7B180CC50BCF787F7EBC56FCF054B28875CBFE8F995F1A9E9C1
1E0D818051EDD8B12B6342AE6E54EE15AA49D8EA34E6407D2D8D3190F0082CEC
1DA2BC6734D80422FDDF9204383FBB76ED62B48D317C592B7916A3E2490E974D
058D16BAD90652E52A92703AAAF6E092D421C4AF487D8DD42E351F58DB4F7FFA
D3AC8B56464DF8221D93C4E78B6B0836874F206C700A4C6839EA2BAC5CC1329E
71C6191B366C80E4FBDEF7BEC72882641F0822A96334A2A1545386BBDF5C1F7A
39F02B522CEE206D8504FA9B7E24C93FA60B8B7ECBE999E9B3CE3EFB6B5FFB0A
6C82F56B576DDDBCB5E6FB65DB9D6E37FB7CBFBFB7AFDB6E160B7E0B5A46B753
759DE1A4D063178AAE33E278AB63A71447CDA8957A7E10E91C591D4FB6ECA0D1
0AE3CE8ABEA5E3D39333AA13832E6B3DD3EDF68B5E75CC9D0FDC37AD424B5723
AB25E57E70F9C9349C4A83B4E8CFD4DBABAABD6163B6AA3CDB85A859F2C4E8CE
A96E1829ABA5421AB0444CB6326E0FF9544EFBBAD957B6E774C27646D4BA71B2
6FE9E4CE200E71BDE77890049552E5A57FF1D29FFF3F3F332BF5B8718BE4EAC0
9AFFF9CF7F4E78706EA2F84B08B5CB7C161C7962564A5F52D19EB9E60B491A72
6A28BBFFF00FFF70DB6DB7A579D132555B91E80426A00C90247EF31C2D828448
B2C78B893F843F605E250F9AA958883CB0F860FC8D03490295081B8BB0B00A38
2A38BAC4D910247D21653C836780FA14B33F31D055AB5661A54C8400BC5EF7BA
D73DF5D4539007F34C219AEA1015509D88BB72E49147FEF18F7F14362D8A3963
EE5C38FC8A12487C4ADCB679D0A4B2076256E3E998149541EA6266772D81E8E1
952209286F0450DE14FB389318097434DE847D85300C4A4A2E08BBF770E24CE0
91347C9005D393B168F8508BBD52DFED37DFB8E599277A8A6EB9B7DADCBDFBCE
3BEF847A391D1606FA7BBF74DBCDAD6643F709F78B8E57C2BF519C547CEFE73F
7DB0003A286065F411E946CAD666BBEDD99EB6E6955B2D0E743AFA20056AD742
9C5A5A6CF3CC488BB4FF2D4920CA2FFE3DF7DC736179D00263D8893F17E03C27
6FCA41C78EDC7F9EB3CEDC175A72AC52B6F34672FC8A499F989D69AE9154A45B
D1E27E5EAADBE002D0CA25C75FE506B4CA9D54D4002872B0EF38725C46217B2B
EF2D4AF1AFF6CCCB10CD46FCC2F8D511471C8183CDBC09D0C96B5FFB5A28679C
024F35437A926D223822745D5287BBEAAAAB2EB9F4637A0C693A3234D89C998E
837804C6CAF474D9F18607FBB516D9ED0E56CA50B1A1F762D596699BA05054CE
72B778B05FEDB3EC76DA9DC96C0EDBD5ECA2E4165C65D58399B22E02481DBFDC
F19C461CED6A8F0F0EAD7C6A7C47CB5543D5DAD4F4F4AA721F94D286A79E9D9E
AAF655204BEC465C54F188D76BFB5EDCDFF3FB6DCF4FA471AA9CAE8AA1BEA419
A7CFFEA75804E7AB9EAEEADA9AA2ED6E982580145C2B493166CF75A224C46175
3CA8FC9A2A0E3AF4C0679FDA2419CF2C845C5C12882B924E6F2AE902332CE9FC
2AD323E99D66CA86B4A7C59DCF3EFB6C817CDFFB5CB0BF211D35645CDC3E5144
589328D839740F328B44D2FA1792041213C21BE1C0142D3422211EB66CD96266
1F8159E970AFB85C458F868273DE79E75D74D145983F519A551EA4A52312B766
F98C32B2CEE548F025DD3EA5F520531B59CA44BAA497935BC2BDA1DB5DE0CC54
0E7C4DE216B6C2440B95D718639C1C8F1C334C010AE09BDFFC6658F1F8441A86
B0064D72FC65D524D19EDC4152924C17334FA61C4E5E09B3802E14A260E27A33
C8A98C8C31FE29D99392DD289B7DCC31C7604B58F2ADF3730ABD49D879D31B5E
1B771ACB8607962E5FF1FB3FFCA9D5EE3C335A8F3ACDDB6EDA30D053C1902667
EAAE066689B2EE20899786567666FCA255EF40AEABD8D3A7A8B7A73C35AE73B1
7DD70B2318C85A48EC9353A719BAF2C73FFE71D8A7623CCE03D6FFFF2309084A
C19A32AEAA996425653BB28F4CC7C23292F1B1FE40B232CC67518F26BF631B4B
5C7CD24927FDF8C73FC66A635F7062299E09FE432EFC8B5FFC0277C66F59D182
FBD03FB04844D16C6E418EC02998FE59211B5605731DE841222296FC56BA4C2B
034F65EF733E2FF4C7B83A551F9601D95973666540DB525DA529A0F2D26EADF3
4D4D6229DAED667DBADE53F6BBAD6ED9757BFDD26CB35EC8C47F5F4F6DF7C464
D92F544AFEFA75FB0F876EA11976EAB33DAD6075689583B0913612B782214649
3C9B34FADC9EC1FE8176BDA1D3526D6722C4B3ED2DC1C4506578B2554F7B4ACF
CE4C0D5A6A4975A0E214B64DEF4AFCD26EA8F3C5420C15AB1D0D2B7F49AD2FB1
AD19473D36393AA16303766025993F4877E081D20FAA765295B5D0290669ECF9
6EEAD841A73597434AFA8244483229EBCD79415DDF899A310372D22B7BF19A5E
B651E23592F662672D9204D80AF4433BE0B8E38EFBC637BE41E808A27571D325
EF60EF17B58D792C0264296AEBBA75EBC0B86EBCF1466679AACCDD42A78899A1
B3D0CB3C71E298C1F431C88BB317398F34970587A41A3A07582AF54750767029
DE5306523D04B37BDFFBDEC79635201430AC77BFFBDDD75D771D9E87BBDC7FFF
FD781E212BD800192360C71B86015899292C92D469265DA85C21928C080A18F1
AA4B10469CA72209F009BD757C84246F9988F6CA50D95416BEC7DDF85B928809
D36F5A1292BA6A860AE4646222F856007C4C8962E5FD4599DFC92825B363CDFA
43BA17711F70B737BEF18D947084B5996D75ED34E9B49BC71F7FFC969D636B0F
79E103BFF86D64796E307BF8C107B42676149DB4E85ADD08D370EEFEFE0F8276
CB75ACBEAA06890B53BB6B9742BBE89521DDB7779A2A6A7B5BFE6BB34A835225
6AB7A65C5F45CD0551A605C907CB78F4D14783997EF4A31FFD5FB4097801FD18
14FC5C4912A81891E0C8AF79CD6BBEFFFDEF538182B07FECB1C744B9937E796A
CF88B144E6494BD84DB67F611C82D62D9D75A40D6927272511B41E16D2B9F02D
E316A4403108045EDBCC6BA2614DC9C12A01163C338E2D991B669A90F9739ADD
A4349090CC9DCB45F80A5CF9E10F7FF8F6DB6FC72CF015CBAAC57F4572322581
7EEEE0C0D4E4E4EA35AB766DDF9184F16AA884304FA7663B2AEEF1FD430F3DF4
A8A35E78F7DD774F4FCD8499436699B2FB940B3B73852A1C69F50CD96E27ED36
2D1B722F5249236DF597072009340349929DB3D32D9538BDB56D33E3D54ACF68
7312DB3C1DB4A34E77FDD092BE4235B6D59FB63DD72D7BB34117EA08A4D67EB5
E19AE5B5A3E0F9767DA78A46B184B8B94A2CC74AED8CEA34D4296D022B4A2D6D
DB160A966BD16A2CD899F7DF2B631271D4216C8246DAD62E51FC283123C69404
8BECAFB917729009FF8505BFFEFAEB994CC1A441F6EB96FC519C771C643A1816
920474C213F2994E481663E2B674E5D3823175509C44BA3DC594591C79D0CA91
FF1925121737D57AE625823C44CBC731D49280B392F45233DF80BCC044D493E5
93D6862474492D17173CA8F3DA6BAF65B45A6556B9645BD2052F1133E1EC7447
C8111567A8000A095BB18C4A194A4BA9DB16912678443CBA2CF292E45C334989
1E58C90061DA3E9F45AE6DD6F493D750E0915D7EF0831FBCE5965BE8D6A7B812
939CFDA3059B9A252424CA3DFAC6E521A0638F3D1692981D13C1E58B956A3788
A6DBF1317FF3D6FFFBA7CDDB6613BBD23FD27CFAC883F66B8E6F7FE277BF59BD
6CE8B1279FF28B65B07E2FD2CEA559E8656EC9EE199E08FD838E7ED57833EA6D
AEB055A5C71F99199FE9EF8195B3F1BE1FDF9AB4B7E0082FC4A905678DD09B8B
EB38FF5F258198C0B4E7187092827B3BEF01C9C36056115A3902040339C22ED5
9E59A434DDC06419BE12533ACD3150F12F74AE871F7E18C780C91BA43A025AC8
762F52E963EE29B51948AC9FFEF4A726E424EB4E79CEA94EB17B9DCA33C455D6
3F0386ACDCCDC97BD4CCAB689107D1BD2B2D10B83552100A223CFFFCF3B14DAC
AB2056AEE027CAA1D60CA89021E9EB2636AA5C709D488B2F9D3CDAD3DF68CE42
ED7CD1A107FFFE89A7467A6BB01BDA61B2D2F6FA13D74BA355CA3B4C5587B5EB
A6DB566EA8749667470525AF5228FA53F549306CD7E99D4983C9A413D9D66CD2
EC29F78DB5EB5E4FA5CF2F8EEFDE7DE8B235C79FF4F7377EFD5F9F9B9E984954
4FC971DBF6414B57D8ED70B6DDDC184C371C6F67AC1B68C556A213479D39BF19
2480AB5343210B7CF07B6C6A9CE4ACC376520D8B5DB255E458CA7355100659AF
330F868457B545C9A39E416EBB4896301B6D515B35718559414210727134C579
1755AAB012975A3CA26B12B6A40949A625DD06FC507AB80A4482CA3D280B8D9F
E3E448CC0C1D13EA26CD7B695035C1A4E6E2044CD3A434A37B917A1399B594CB
4B492D6991EB25EAB604E258FB40C7024B30985E4D3A3EF5D453BFF6B5AF9127
5201E451112D9E968479DAB9D6C2384CC40516A9924770AAB806179C73CE39D7
5C730DC3861203E03299BA1BB99519AB4C73683C95E3E798E162F1DE62D1581B
C57DA2A23707F49A2645B6BC48D3C1919189B1DDD5BE3EDF724E38E1842F7CE1
0B92ECF1E31FFF18CBCB434B89F59DEF7C87BBA225A5DB5B499A8E15FFE7D3BB
FA0FFFCB7AE88CF8C1A7CF7F4FAF3D679F523781CD818742EE4A310B419219D5
D715864B0E5D32F042152E1D1C5836353DAAD2829BAEF29D35DFFFB7C374FD66
D255294E85AD12DB776B8E55ECA6DA43427F17B1A3E7D2EDEB730E0DC7D7874D
E77FC35AF774FD44B735830F4199BA0579763C755C3A985B4C0A4801D4CDD8B4
76CABFFDED6F87E299579944BEEEAC1EE89E8269862A51AD31721BC450F7BC88
E8437D7DB8E12C2C367D0C40DC73E9F35A5D0AA25A4FB53EDB2815E7CA4484BA
044AC44CA4111142671103BFB2CB26BE56BA67C5D98855FCC475B79CF6910F26
AAAEBD106D2C421163FEC4BF5C74DD75574F4F778A255DBD147494EBF8110EAC
C2D4342D6B5656A8A864D68AD36A6AC565ED2CE6C9975CB54590C52443547A70
C2B485457EF3CD37136AC9CAEB89181558A86F41560B46887FDD01C6B3D592C1
C1154B963DFFD493E5D4E9F78BF556BD88F318693133D3EC82FBE26855526B24
75D6A8C2FE56697FA732E8149E0D2652179ABBAA075DC7AFCC765BBDD57EAD1B
BBE1F3ADF19523AB76ECDEBEA6B24CB5A376D28E9433E1059167B7DCB4AE5179
022FB27A55A1E6F94BFA964C479DED416347B73D1107ED34EB2C695927BFFB9D
5FFEF2977546BF4E906BF8061693B8D4E6B63E3B3202D8C7AFA48F85A92B5022
2E8EE6EDE47DC1F8A7407D60D94F3FFDF40D1B36B00246E57EEFCB2FBFFC939F
FC24358C3447225844D2C86068ED31AA6FF6D3DEE7C562384A48695E76A9A089
087A18C31BD75D771D4C197C4234B9EDDBB753CCFCE55FFEE54F7EF21391403A
2E6866C80AB60FF35BC4CFC3BC343C839DB62C03AD13237BE10B5FF8BBDFFD8E
F4C70EE3CC5527ED9A0973BC7EDDBA7584B424E94BDB1DC9EF16D2A7438D920D
74CF888DF03B4177C1827EE8431FFACC673E23CD69B9463CE4B0454E3BEDB48B
2FBED844584B0D642EEE1FC16A2467863434AF138865BCA4E2833607FE6423CF
D9E919E8477361004BBDE39DEFBCFFC10777EFDC09D68617A6C041C2A8BAE38E
3BF068E2BBE10EBC0FB303F57EFBB5411FD4DD5A79E84B46D580552C0D7B712D
1863A62F453D56861D02A6A6A6F0067B479C67C9C2C47DC6D2AD456F457DCA9B
9A9EE81FD4F2727ADC7EF8979BFA8B6BC140BEF4956BD2689BB29BA58A0E3287
11D4349D147BF2C927834D1F79E491FFF11FFF314721B513CFB8E0DCD7BFE115
F546338CBB434303382BB3339AC24696F4A8588D8D4DFA5EA9522E3D70FF2F6F
BE6E83DFFD01F118A48A3857B709E093BEE845BAB9232859B3A444150B3E737F
99B3418834CFF51CDFC364BC4281D5CE98B39351DADAB5AB376E7C5AB30D2733
3BB213E115DCB03B27BDD6AF5FCFFA156A0398459CBFE6950A722B412A84A29A
D7A56E9E2488ED5895F63FE3A3371DF5B2578C0CF6E2B93BC676F6ADF0EC8921
50965F54D3D3F566B3BD62F948ABA91EFAF9235FBCF684A0B5C577A18E0C4ECE
3495D5191CE8698C37BA3AE34509CA379F482FE5E2EC43EA6CF4CA67953DA6C3
8D65538B2045CE9304E02BBDE5E2606FFFF4CE9D3DCA1D2896EA9DBAE5179B61
4727E77475C74B68A155C86F65C12658A3CAABEDE28053DCAD1ADD286CA46D57
152328EAE5D2646BA6A57078ADFDF63FF0A5AF7EF5430FFDDFB12D3B5B71BDA8
2AD5DEFED170AA9344ED386C653AA29F3A25C7837A5428F54E87ED5D41732289
1B76DA853590A8388D0F7FC10B1EFDC3A32000AC3E5404C7D0BEC18BB1BF74C7
E11310181601E4C17824E9DFC95BFB8ABB424A344C9D60A17566DC454A31F862
232CA659B38D0AEE8C0FD99095FE030C00ACE6AAABAE327355E6DD1F3FC71B41
FC34BDA37BBF04509D288778CFE4258C84D3B78C16230261249E798C070FE2D2
916B8976AE7273644E7C92E7B20989CAB14F257B896C11974A205B7822CD6D3C
F28D6F7CE37DF7DDC7C6E2D80C8685A9A1D0C945F39F0E1FFC841AA2A00BE06E
1FF9C84720B8F8437EA5B21E8D780FBBFB99679EA145A232AB9F92095FDD74D3
4D679C71C6DAB56B59AC4B99C131D32B4512916CF4BD5B7D928F8BF347CA89E9
3813A3615E4538D35488444D2B47BA6EA9CCAFAAB2144D2D57C2B9D090E3B971
1889D3C3CEFB7DE2CFD7BFFEF5071D74109682309314ECBAB54E5F4F4975776F
DBEC0FAC78E0918DCD4EF493BBBF164F3EEF0FAFC57D98ED8AE948380B7BB479
F36656BBD060A2544ED4EC8E6D8D4A69288A5B41BCFB9BDFFAB26D553C7B70DB
D4F3939313933B211EFAA676CFF6D696CED63B3DA5C156B4190390AC6AAE1E6E
7BFF0F7F75F89187D67A3257AD02338AEBDD7AC5AF242AD1ED0EE3B4E094609A
A789DBEDA8877FFDFBD7BCEE283B6F374455970A44B95C6CB5F027B42D9044A0
1B257A5A7DB355D6D125E3E82B96AF60BB1BFC697B732C8066C1D0F030ABCFDE
F18E7FBCFDF6DB313CECC273CF61E2DAE9049BC02FFCB947B930472E91EC3BB5
162B4780905270A9ED5AC42678C5EB5EFDD18FDD74CCAB0ED591F899B402698F
77712BAD9583B055F032431E3A7B987A6E09B3F9E1AF77BDE5B5073871435B31
56C1AB5A51378803776050279231B1826945922EB51007313B3C9BA96E56066F
B965CB16DE61F1CA234BC75F997FA2D224C59F054B558B25A7DDEE758B038562
A3D50C5DAB95049EE74601E6A13C6891A9EA55D6B0F2965985656EA9C7F1DB81
8E430C8F0C8E4F4ED45BB3AE57C06DFB0607C666A676B76707A07EEE1A1DEC19
484076114C2315C41AD930628286E516BCA2E568D37C1C041A76A6D3B09EF593
8C1C5881090C415A87057DDBCCDB93B18524EF09AAB2EC29EC143803F3DDB183
D0CD3FF1894FB03A4A3002541EF8110C63138F611FEB633405E34A828DE01158
5E69A8C5E826135B98BC4BCC479515BB388BF663373D9966D9E342D7BFFBDDEF
7EF8E1879F78E209BAFEE735D7A4EE6FFA69D8765E9C42F4498ACF93B1008E90
182D9416DA26300F00260C8AA4EF051FC2F6FCB77FFB37723D3BEB68CF90AC14
C2B07A859939FC93F57864E2581DC1A4A49A46A72A149937BDE94D5FFFFAD7D3
BC4D0D2FC0FBBDB7479A75D0BF4C5D9B09EF14771254A0BE4F50339620116680
3F915C265941D3ECA2B39515C826E7A2E7CE317A99C9EAE3A1A79C72CA77BFFB
5DF610B6F36E913D455DA6A15DB1DD8E9B793C5CC70DE3089F80979572A86D5C
5AC97ACC4268FCF55FFF35F38E985B49E98DCB26773EBF76D5F256A85A6961F7
D878296DF717E29D6D9D728A9DA2D38C2D16F05B50E4A38F3EAA327D075366AD
AC46D4687961D72997FA9AADC95235FAC31FFFB3E095671ADDF290FBAE77BFF3
2B77DCE15ACECC4CDD4A0A8E5DD41140BB6EA65588C9F8C14F3EF8F297BFB46F
B0363B3B6381E127984D50EDA969469942119EA9D57A93005A45A9E879F7DCF3
C02D97BD81F92DA2853116CD345F7173D3C8C55358AC8BC507791C7DF4D1A07E
E8165A725BCACD103E689E6A04CD011DF05CB77EFDB3596D9726C52C2D2D8E74
3A94EFFDB91BC4CB5FFEF25FFFFAD7B8E0D24B2FBDFAEAABE779DE45B4B3D25B
507F5981BC50A7FB245E7BE9E5B71FF8F297DBBDA103D28BDC46D0290D152A33
3570BC249D4B0B0E833489AD42A174FF8FBEFFA5CF7DB81C6C77BA69236C278E
3AFA652FDEF2ECC4E8E8732A4FBD1356B5481F5DF106883A423D0C07168BF3E2
17BFF891471E214682CA8B8616910419195B76E6D1D399668E5B4B55CD29D46C
4DD85D2BE9DA59B573D697D2556929B12B1A12D4EEB7BC3ECFAF388537BEE495
CF3FB769E5F2A53FFFCD4F068A7DD39D299DBBA692D2C8D28DBBB7459E5B0FA3
A13ECD1FEBA10EA73A4197250565586E7E19E4D656294C844D9D7690C4186BE0
D8D09522CBE9264980AD4C9372290387C882ED9D602E7048154A626CCAE8FC0E
B2F9DDEF7E278C95B253FAB9923BB3AD589AC106EF737D7837935F83B72E5FBE
9C19ED2033D6EEF1C0D24061FE3DB79278628BA0468B9B4174381C7908F26772
62DEFBFA79396984B4A3F356C49B597D22D0938C1841CF60F68D48C77928C2E4
7296D47672096EB9E51628DAE47DB8E8739FFBDCB9E79E4B6F8CCA95E8BD6356
F3FA47E2D9EC34C0C22EFC4B7A6576A6382EC8D3194C666A3FF1EE191FC664F0
433038C9E827D3C7C67CE8431F82F017BA07EFC0B7EC0484334CC984615F7FFD
F5471D7514DE0B3CC87EFBED8715A723484C3FEE199EC539BEE005DA6B616E83
197023B3E06BFDFAF560BE12B4E08A6339FCACE846BBE9DBADA2AF9954A952C6
2718E796AC22514711DAEDF5071CF0FCF3CF875D0DC776CC31C730687FEFBDF7
CE39792DEFB5AF7DF5433FFBC9E0D0D0B2556B87FAFBA6C7769C7DC66971A1C6
8C05ED31CFD2DD4082EF7DEF7B390C0999B26E301B6DA4693EC5278562090659
13EF33FA59D6DF57ED0433ADD6388E706FBF46A6989E9973F4AF58B1824D0EC4
C87DD3593F01AF8FA344D985BEBEC1208CBBDD90FB95199BADA1C1FEC9C9B1B0
DB5CBE62D9E38FFFE93FBE7E120D4D89C69B089AA2DD9818A29207496D650E00
AED5F432F3B9050336CB50803028654C4119ED9DC9C1755F56CB667C8C59130C
F19D7EFAE9B0201792042A331D3812C9F05BC826F897AFDFF8C4C692EDBEA439
E3EFBF74FDAECDE3ABD70E3EBFEB51E5F9D55A250CBB4CCE2B148ACD46ABD309
FA4BCFDC7EC5FB5C6BDC8953DBF1022B046F1DE85BD96C8E89F68A7F3154AA2C
FFAD2E291A18DF33AF81454FA6EF7871EF507681EE4FE0A8D4CD3A0DF4A556C5
72FD587FD582A5E466715AFADCB03ECA2A29BBA4AC22FEB3B515774CDF7EA363
3B0E59BBFE0F9B1F5EEB2FEF749B591267F44CD228D57A4AC3839B77EC6877BA
D8ECC8B69B49D2A36580532D148B8552EA58F5389A0CDB8DA8BB5D170F684089
D072B0A32DC852706D4B41EDAA556BF546DD76B4FFA4D96E09ABA1DA4AF0AEDD
BB77330B8B704C02D128C54071DE769B9A13BDF9F38A9CE6495CE9E1C8B515EC
746C2B38CF97BFFC65B6FF6581D8BBDEF52E7C42042162496137F1434914DEFB
FEE285168CA345F68B412CEE290B1158CA2E7391DC486652305F918A35FE64A3
111E378C9679D28C4C58590126FDD55A120879D146E66901C7C4EF99C643C923
4A37BD6FDC0C7C051B0D8776EDDAB538F3EC9D42F7BD80DE611090D5994738E1
0E415DA5C79CE846B8153F67E19532BC342AC7689446C48216473307CC17D360
2E145F9238C10A207AA8E9FEC2CDA14D7FFBDBDFE6229A28312A537E593778EC
B1C7FEE8473FD276EBF838ED44F10E9912584AAEB8BBD46AB5C3C7B2C1BC7AFB
74E3D942D1A70601C5B6502A05D05C2C6BBF75EB9E7BE69952B50A1AFAD297BE
34D8DB4788706A2BECD7A855548DF1952C5DBD7ACDAA15055B9DF8B6E3699092
CD61E46C9072F9E597937F49171476AF6466A4563A82D6EA35BDCD461B1A4CB3
AE2B0CC0A460A6C7091407D5A82BCFB5962D5DB365CBA8C668B18A51BA476B01
2B6FA212BFE8EDAF3CE6352B96EFBF6B74AAD588FBFA87F0310BC221E1A228E8
769A38CB4383B5B1F16D0F7DF98B6AF25794DC9814DDD9B96A632B230582FC57
4777E340541B5033F694FB227E1E0DD43E369675CF4D97AF58B163DBCE430F3B
ECB9E79E6BB75AD55AAD91B151186BB695D22D468840D2B0B4A990D328DE2182
D74AC9A1345F5B4812E838811A78FB2537CC287BD774BDD4B77C26EAA495706D
7744F7950B3B94E8DA90551AAFF89ECB4E53D68E5A3168B7C26ACFE04C67A2EC
175BF5D871D30D1B369C79E699B8F30D37DC70D6596789F9BB4F8E601965952C
5B63BC91879C674D7AE02C8246E0DA4E94CCB9437596A5956567A66A895BA828
D789828253A8C7DDB4A0291C62C3819CB0EC92651753DBD5EC28EB0D655B6B62
AFD72DAD5FBEA23D391DB7DB9EAB66BA501AD2319D569482D03B2AF5955E0A28
FBAD30EC2FFA05D8C885220EF66CD89DE83627C3B0994104793A47C88913BB11
452D0D6D6DC58E0599A16552BB0521A10DFDD61C589964FD1D72C821071C70C0
FDF7DF8FE95375907A1113A2D85C407AE4E97D5D284E4046C9AC4895F915F839
C983CDA8ADBC8784327214797EF993FF365CCC177DB92AB3E1168A2B702EBC39
7505B0BE75EBD6C1FAA15D48FE6CA668337AC1B03618269D0DF8E4B8E38EBBE7
9E7BF020CA48723C2CDD9C2420C7944C29A643F1917C3C2D326E80245F8B50A5
BF92D289AE7F225508CE333EA7B4A03773EBD6ADFCA1A03FCAF648E5BDCA545A
13F7952A0FBB806200F3CAD6787AE90B63AAAC1853A66A207B26EE17715E4BE1
ABCAD1BBE4E7BCD53CBAE1A2B34E8A2E7B5021588FF6CD25C99AB56BFFE66FFE
069A828685C37A66BE2CB29E8E110F3CE0E08331A9348C285138000966B89E7F
F80B8F2A577BE2A0FD0F27BC09C2A054EBED264ED0AA3381EA939FFC245BFE62
0C64B2E245E57291946D1BC6414359114C8BA9C946AC95BE6468B8DFB5C3D1D1
B175FBAF7B7EEB36C6915821099D8DA395C4212ED12B5F72C4134F3CD56842D8
5454EA687F97AB196FE657813AEFF85EA1D999B555E2D820717BAA35A7776046
AC7A67E628084719B116CE5A5FE9A82037D86DD6FE44919D593CF4A1835DEA62
B76673F59A35A0A234B148755A42479197D180DEFDD65C762C1E01C3F1C61B6F
A4D663E52DE0E7458C459F2259EEBFFFFE20B9279F7C52424AF324C150B23E2D
F6ED6E6F5FBEDA6B8C6D8BDA6ECD5E1AA4F174BA0DF61FE51683757A5C71A40A
CBD27067A9A03A5DF05B4F6760266AEDD08ACD63DBF1201C1306395970EE2CDC
EB4D62833266AC0C2D66522FE999D68C69FECF7B653E9C749F92A0D7F6DD40BB
EFC6DAB356C1E986BA7858B305CBA9584E41D9569C841A152E89ACB496A4E5CC
4A5851EC5FD2DBB762C992DDE363BB77EFF27B8BBBEA539341BBE8579CC4EE84
6D1CBB725F5FAA411093669A40704E479D7A9CB433DDBFE63878BA955A516C35
55DC50294E4868A5652FC3258B42D8043A15258E489334E8A50C18DC802DF978
5459BD4F87AD74941346C4409DCA82430BD90426E4A7CABD20D4FCE8F3100C4D
42AB819FD0597DF1C5177FE31BDFD8B87123B81358D622F50A4CCB662E354672
C4114740FBBCF6DA6B17971C3CA10C79EA1CB69111CCDD8C6F71DF194C66BA30
B36C449762753DF3F259B3859FC0D6995341545EBE287167C6316EBBED369842
242CB662E7809C3D7BBB2BA33397183BA6B388929C91E173CE3907E799698E8C
5943C63EF2C823662761DE415AD0E030638D20EAC509235916F4F93032C14C70
72433A46D8F78A524D1C26B41F05599EA28EC906F3F22EE805A2F19E18FDA464
7B287868AEE2B724B8B9D4D25673190CB11D3BDCAC3566B33EEB168B51BBE365
2E9DA8DBED1F1AD24CBCDD864C4F8210561B3340B062C4B23EEAA8A37C5B27DF
BDF33DFFECA49115347AABA5A96618DB7ED1F73EF0810FB0938F32A2FDE234C0
2790433FFCE10F89EF8F33D537509A9E1987DDDC696BFA48A1358669D5EF6BB6
9B955225843A1F767A7AAA9D4E4BFB6793B99D355BC9EB74632BADD79B904FFA
B68D19CB49FCA2EA30CA9368A4BB24C07A163502606BAE3BB4D4344185D9BC79
3389B55CAE0A8C28CFDBDC194E3568FE40D60FA7D36E6728AA49A95C86CA5FC8
EC74BDDA71FC837BEE79F39BDE846F4786978EEEDAA5726F98B650751ABAEDD8
73397662474A7C6B9F59A4526AC02279361E21AAEE3E2581B60A8AAAD0B3A231
B5DD8E941DAAFE5A79B2D92AF6D69A382389A2D592D5C7668039815B2D47B006
7516A95BB20A41D549E27A1867874E7CDC6440F35AE3ED932308E54B561E2358
D2C4429415B5C08D38136C1B56219304969DA8DE2419702B85485BFFBB5A9338
03B095AA5E010B54B4DDAAA59378B0B2DD386AEA14B3A40AC96BB9852072D2EE
CAE288EF6818E4DD13E36934EB94CA4DADA5BAC5D4A914CAB6EF35BA41ACE2E9
B03DDA698E2B1D1C8E6CE5941CB7E0F775D334D412066BD9CD7A99CD5A4957C5
4E365DCFF574F81D62200BC5911D91F8697B812A4E3BED34B060ACC935D75C73
E185179A15489209A2F288B1C0182F82356BB689355792B401E94B1E62C2568A
D39FC8698B48E2391A3292D49904BFD0F5CC7CC11B7260B229F0B7934F3EF9E1
871F7EF6D967E9E8679A8F447C4D5595F157B2CD7FFCC77FBCEBAEBBCCC63874
6A699BC05488AC3D51B005C75F10E578A8A459077375589E43CF068F0DB74ABA
4E4A2E87D9B9899CDD8C60B06DBACA1579DA1FB7DC720B181FA99C45CE26CEA8
321AB59B6E6813064E9618B21AA362BDB89DB7FAE4C6300F979EC74D9B3651A7
56466A79D62B4A37A7D5ED30C048B31C475FA33D6B9F065814481643D26ECD82
9584E1D09225F52CBC8905B5D2AC9CC4CAFC1B59A641316B95BE6BFBF6652B57
469D2ECC1A89E0E3F3030F3C101379FBDBDF4E8C33AA211C2D41CC058D43C097
B85F9CB593372F65F891FB2B9DD029B6E9DFE7C445CDE4D1A2E12CFC05FB4E73
4DCAC454AED19B68592AF7ABB2938664619ABFCA7FEB9AEA9280B555AB650E8C
A9413CA81AF2B6D36D77DA585E2A285ACBCE5EB1D1DF42192D99EC1C915FDC29
C9BEFABFCB1B5396AB3C7C453590BA08790A9106AC1CC3D2D9ABEBA4A91BB189
057D4DA437EE1A993EE593AA7AAA1D62AC7694662243EDB766FF57BEE6D55FFD
EA9DAEB263158DF40D6341742F5FCD10FD56148023970A7E27EEC645BB1B7554
37F66C8DC7C359F329CC14A0B3F1FCF3CF873E77C619675C75D555649A73B59F
19F5BA9E5370A18874C1735DDB2984511F747F5DD49B3A7EB165C5139D766F01
8A3D147FA710A47E92B50F89E3C9A0D951B157761BADEE48B11474DA5517BF0E
4AC572FF60DF92E2C0F6ED5B4B457BC592A1CDCF6E1AA8F53BA9B7737AE756E5
05563A9942B5CF16394C868A15D819975F70E1A5D75EDDF0DCB146F3E28F5D72
F9959F887DB79D066977AE3B61070499614AECB336D8DC4711AB0249201C8CFC
EAA28B2E6255364350AF7BDDEB1E7CF0416E1938386162551E4032F16CD4C228
D6B454E81217173A332328A7A5FA55CE9495C3A74BD7EE452401AD3D518EF120
BA3A85EF498B2A0AA18F7DEC635FFEF29761348B38143DDE6CC2CA3F5FFFFAD7
FFEC673FC3659FF9CC672CA96C94F3C3C32399A02A0BC9424B850906CDCEF41B
90A6416A37DF7C331DF4025B4D664A6604A6CF94470EFD924B2EF9F4A73FCDAC
58628149DE8EB478141DED9BDFFC26A41FFD3F0CE0E06EDBB66DA3334A041ACB
8669C42579E7031E72A940863CBCF3CE3B9904C6932C1E556AF7926F4A9F86F4
06C2230E3BECB0471EF9BD5604C239283A70FF817E5D6E8E73B5748906F89E2B
8CD275F249B956EBE2E760C7C512232B507ABEF8C52FFED33BDF59ADD5984B0A
6D376B0B1813240076256527235456067B823FEFBDF75EDC9C2820AC3BC7EBD2
4B2FC5F683083018EC0B7581E1E16150B37076EE111D68E2585346AE0519BA09
7229DF4AA2FA65975D063E42A81C88281000AD3DFC2959D5582BDC5C2CE23599
F7C6CCC33363B3B0B6A964503533D2E7137174505D605544C52F76BA7F4EA781
F4D5DC3FE85A7B964A4AC58DE8FB6273ECF9F4F992404EA9CACC6733C18C1A1F
D7C7CAB0284836A6BA9DE48D27D31C1A8C5635368E4172C951C6F93CF7DC73F1
09A1A4C3EE5C025E94CCE102411AAC3FE08067766CD1A93D71A2D852C252BD4B
97CCEC1EAD94FB8E7DDDEB7F74DF3D83C3C35BB6EBA4EAFEBEFEFAD454946F34
8184711640E7DFFAD6B7F05090074E8A09C30EDD0B9F8F2CD59E4C185E2A0BD6
82E1153D0D4775E8F2957E90EC18D77D0522C782C900330B6319B0BD3E18A3CA
F11DB71D068D24049B1C8D1A4B7AFB76CC4CF766A83F054B1FE75DD3538376D1
B3AD206AF76AB32EF51C7F26EEF8CADBA96B17BD46D0B13DA86C961B267D8552
1A84B56A6D57D0D91434BADAD55C6B773BAD288C2C8D3204834A2F3819719AC8
46EC531290E5D10349FB989C8DD182A1CC0A9776AD048A205CA6C0388B4E831F
529735EBB616C1A6357B4508E8246BB3440D22650AD2B5C818B2BB45EECFAA2C
C29131942B703814066C6446BE8D6BD83C43E5A08AA6DF9BEA027D532A4B789D
534A947AE94B5F6AC96A52AB4AF3FEBD2682ABCAB12924DB9A163D4B6DC5A38A
F7601C1FF9C847642D68CD71ADD93D0677A3678D48763AE13DF36E73E9C91399
95A50CFF97E99EC22E9E7DF6D990EDC49000B9E387DC5191BA6906A306062A45
7799D6596525B3083C8A0D712B1333529AF75A79711C6E9BADEFB3995B094672
F679A7ED3A2E55D4EC1C657A96E3A6AE3ED960B1B8149F13C3A358F0C1BC72DE
91CE64CEF71ED8466363B81DD3619972801112BB5B4A4EBEF0852F6071D882ED
37BFF90D77870616C606FE8B93FFDC73CFB1028522F3A4934E620A8100CF1255
9114409B8C9E44493950B9FE2EE1475EC96FF1A1A45451E4ABCCE7031B8E92C3
54AB0935384F654EFFDC4C71AE84858EB81FFDE847279E78626673A4ECE224A9
D0A0226DC70421138835AA7BE68DF2B3C52CE425EE6276A47B76929083BACF03
66EA925831989EEF7AD7BB5819C4846B2EAF207AD288C40859D344FE6E9A1D72
A840452CE93CE8A083DEF39EF75C7EF9E5D28D44DA206B902EA50B740BE54AA3
53B7A14EFB85C6D46C5F4F6D7AB63ED0579B99AA57CB3A89A3E0FB279C74E25D
77FFFBF8AE891B6FB8FEECB3CE05731A1E1A6E353BCD7673A06F686C7AB7883D
CEE898638EF9E52F7F29270863C681E218F0EFE9A79F7EEB6DB7EA2D28F9B6B2
960D0F8D6EDF01B375D0736B96E7B403CF767B960CFD69E7D66AC12B174BE582
E784493ADBF2D2A4CFAB3A961D401BB2ADDD51735645AE65C330C193C0BDFDD4
1AE8EF57A9DD9A99EEB1DCBE923FD69C29E8307EA9099152CCBA8CB43BDAB281
508955AF5B8CDBDD31158F3BE9B624687A59F0C9B2D3083A01D8DC9C06E0B859
B4320A4D0CD7BDF7514CFCD86855249789E743E06468CD93D713AA40B213556E
B799B01F8B44F2A9D14A46250720006BA62222F75F8420F796343494190E2468
34074C9DC9F483498B01362497A2744145A35F88DC9B66BDE429FC59A29ACE53
BCA005FFE94F7FE2B76632167579B67CE21057AD5AC54C551C12B34A9B1C997E
89238E380277E3D28389DF78E38D04D18DB3AE58663319CA491A07341768649D
79E6991B366CE021945C31563E3379865355B9B7847BCCCA52E9392ED3E11C05
9146D69D903BBC9B094597F13B6D762471CED4ACB9743D694C48283ACB5199E9
1042532274873E057ED1CBD6900122C9ACC523FA8606C197F1E7BFFFFBBF633D
F11574C665CB9631B712D63DC533AD1C2244615258402C0EA4202B2A98E546B3
89F5048F3DF698CAB5450C8CB5812C8310BA115802E11A4EDEC75465B900941F
2AB740DFFFFEF7633C96019062BE606F412659399627A5B2243552CFB072546A
EC080E1B1E87B99B05BD925D4A3163D1E78E9DF532CF6C2677FDAC1AD92F15A9
EA9A99CD7B3BA316C9E2909346BEC0D375D659677DED6B5F63550D5360E53E58
64903A842E03BCE6E34CAF6B6A74B3E00BBA05E64BAC3DEA80DAB6EBA8BE9181
ADA33B54C15661F4E98F5FF19D3BBEBAF5D967D7557A669BB335AFDC0A5BA14E
C07740E33BDAF582EF062A6D45B157AC4C4127C3F6957B9BDD261470DE905E0E
EABC245D0C180470E8A187FEE4273F21F488D4396A375746A28E9A330B063DC7
0AE321CB7FD94B5EBADF61077FE5AE6F75A2102A6E2308870A8501AF5449ED72
EAA820B2E2040ADBA493EE6ECC345434A952F0B6354B8777EE1AD388E8E5B2EA
8447ACDD7FE5D0926D9B9FAB77DBCD24DC529FE975340C101666C4B2AB96075B
B847156D9536970C3F3CFAFC6CB13099841A9A65FB68090A7214AD58B91AB4D1
6AB774A7FA2CDF699FBB694A0232779210FF24115A7903E7D5AB57838C7101F6
1AD6124F2E0F17FB64085B64D6BF84A0F6DE537941E53AF5D4536FB8E1065020
8CE63FFEF18F2296246ECAC8A5E0DC48F617EFC9012FA4B2305A09FA01CB2533
E4BCC85DA92491F5812D1C7BECB15FF9CA57A870D32A12740D933D0A683F2B96
A966595292202B4BA90002828D8F5152415646B23F2FC3497EDFFBDE07EECC6A
5B2A44983363D6CF3CF3CC6016FDA359200E25137A5BD8347DF4D21DD3378269
5C0569EEC191E4F0357380D8920C2A2C9E82D4CE9A0B9E77DE79581D8E646464
045AA778E528C029A541259AF2323A58BB762D0EFC3CDE0492D0161FAC8894AC
4D490B0B56B4E171592554A2717282B93CAD6EBBC3C14C4D4E14334707989AE6
CBD35395B2F6FE4FCECE61AC3EF1C413AC692290355D37100FF8EA820B2EE019
262950E390D6407CB1A0096B45BD80AE3086B668D8514DE0DEDF7DF7DDC71F7F
3CCD23490323B3660731EC1D4682AF60363EFAE8A394BB7434615474AA4A8121
56553BBBB23269B6AA67761323F364A6A26A48408F344A4B881A99C08D98AAD3
41071CF8FCF3CFC308B0ADB9C43E3DE024ABCBCBE1CA2909E6A54E9A92C05499
E7BD4C3C1F0A54CB68414E97A3DC90AE5833E066B61690D4149A141812568999
0BF22CC9CBB20AA534EAAA3429169C7ED72B073144C4C1BDC3CD99B161BF36D1
AD8F146A9997BCEB651E2430CF4DCD99724F6DB2D5768B95896E67DC8E43B0F0
E65C469FD9A74C1A34D959A768E26D1076FE539FFAD487CE3E2B3B2C1644EBFE
AB75A71ACC6159B9089BA0D3ACDBFA2CECFFFB2D9BFA7B6BB3B3F573CF3DEBC9
3FFCE9D15FFE266EB7D6F78E2CABF675A667740B2BCB994DBBB34ADB1A76B9B4
6B667649AD1724B8796AA25628C641868FADAC7626C9FB07FAECE6B4D555B049
D7F50CF63AFEECD4A4A7CF90FD846ACDDACE68C1AA4312B5BB8E65F98E0BA1BF
FFFE0762D8382669E6230AE339BCC8791175D97126E993A550EB676107B51951
D788807BC8218780AAD9269DC994924249910FE2375B558B6B649F9A84E44FD2
E0237484440BE8DB21F828FDFB8CC649899960252D2409F8686A634C58E22132
1B2C923F402CD1A122AE14E1D8A26F092AA894EF5041B14C1C1ED16B70D1E187
1F8EC54A73A0667A75549EB8294D83A1EF808132010E97B129B9CAC38F8C59B3
6E88321623C3D9D8BC793367888951C1C49F279E78E25D77DD4511CA800FAF91
A9529F5279334B668592DCCD947F11068CB8E20DF93BABD22978481F127ED993
E32B91460433C905B8CACE7C467FCA2AF8366B9BC155FFF66FFF967C4D43F56D
DBAA9D4599EFCFB51DB0B05221C3AF6E367A6A3DB3F52C43D471E97AAA37A0EB
CDF955BEFFFDEF536DC46831544EF98E3BEEC08AFDF4A73F15738D0427815F66
E9B08BC54B5EF292DFFEF6B72435B072C83C56E7E14489B1FCA217BD08FBC52E
2B34ADC882B97482BF64368D619A00F31370433C0E37840670E185170ABE2E37
FA7BDFFBDE9BDFFC669543B4F3866623C6BD5F9EE730AF140C8B229F3283B995
788301433F60A88381A2346F2941F385BB4F0E681EA7FFB644CBFC5332D33878
E2FF10D051F28C05D05856461CAA5453D8078AEE78169A50C7AC662F7C2B9012
7A3BD2C4CFD2B9FC381D51EA8081A1F6E4789A95717996D55BABED9E9DC59FAB
8787FF3836B65FB562379A81ED6C4EE2507358BBAE92AD4AD53DDDB5715EC611
DD77F2A1F804C46DD5D3D7DBCD0AD3C52628D8969FA4872D59EE85C9F8E478A9
BF6FEBF4784537BB9E05B7AE958AC5D42E4669AF722A61524954CD2F05BED768
7722CF9E8DC299B01BBACE78D88EB32EC220FB62B144D7710B9A878A5CC7AAA5
49214C7B53F7A0A5AB2AB6373A3ADA0ABA41126D52EDB4521B8D43F0C87AA3D1
57AD75A3D02AD8A582660BFA48528148E2745F4512A6978F1B2730F226FB366B
4E55667142C1A5A407F562C560804AD88C6C4A8003C8791721A797BDEC65BFF9
CD6FACBC539EF4471320E7796D4AA5448E063A9E8ED558E88C502C41D9C26A40
23BCE9A69B28D294815B4E8D99EC4B0AA4A5124B19F8A3E99E45C8229CC0BA2D
CBA89C32D53731284CD816C29B48D34786C518834DF2A6C4900DE46258143167
2EBAE8223035BC977D12FF97CA9D186CACCC9234C96C39E59453A0DBF2CC6339
74364510DC72CB2D1FFAD087C421208A9B4C8162405C46AC6980A6FC777FF777
3FFCE10FA5525C744F8AEE7BEEB9E7A4934EC257928F2FE57FD98BE9B3366C55
BD62764C6EAB0C686BDBE81FED6551040DFC5B2AC3C8B5FD029565BC2632A6E3
6721BE508B482DD58E38E2884B2EB98454487E072DE0B4D34EC3CDF11432DC2B
AFBC12D440B6429F3E970E5F610A7C2395AB2CA0C36574AF898754B2ADAD3C05
93AF78CF7E612CE9A0CB1E2B4F3714AEC79661606076827C69E6AE606D25B161
2EF573CF1C5CA8A2D8CC8C52A9C7C17822EDCD3D9ABFBAF1C61BCF3FFF7C81C7
32951A897E8B12A37213DEC497DDDB53344F12A4796F716676F35428C3889674
9479E529666E923900931D0BEA80E9FB12E94573B6A2D472BFE474DB07567B26
1AB32B0A5E1C859D440DF756A04F2559D7AD94D9A8B6550B52A7B7E7A999D99A
6315622B52CE64D979AAD509B3430432605D0B551FDAD094A604E816C8FBC30E
3BECF1271ECFC80F82C82B17BCE6CCACC67A8EE295E55A214A678206A631A97D
3238983DA393B3158D27A58122FA21A252AB57B9037EB51D74972C59BA73D7A8
57286D0AC63EF7D95B3FFEB9CF6EDCBA39F49D5DED399190E8E264B5B40CE526
18046D58854AAA96FA7D45D79BEEC0A08BC6938653284D45E134CC13E5F4F7F6
4FCFCECCA6A153F6227D8FEC4493D1ABF931FFBD2581CAC303EC53240908140F
38776F7FFBDB7FFEF39F3FFDF4D3FC4AD2DF5FF18A57FCEA57BF4A33DC5C7EC2
1A0596A14816C942DA0CDDC24C522224119324A9F893F308D36346137323193A
C268A1EC0B7F9FF7BAE28A2B3EFBD9CF625476DEEF1D463F243DD1C07842A557
2BE959143BB90995457E452287A2FFD8638FD1C6A5053C873B24A0C192FC97EE
8999278E486AE2D2554A1A1570F22677304305CC791758698111A5AACE30BDF8
79CC7C5E4A0B6C092E906456EAEF82C9271C4D0E3F0B4CE87A6288822BC2D1E2
57C4EA115E0FAB0AC378EAA9A73006E6C92C5BB68CE00D52BE0B11AB375265F9
85DA569DABC56339A2A8C6E4178C0DE8FC30D7657E7AEA67D202E2874950EDF6
CA356BB63DFF3C289C0AE90B5FF8C28F7EF4A3E2EBC4C5E0FB58F63FFCE10FE2
BE90380F816508D4A3D1833333968B23A94152E26BE54D50E99D60E45C2A7184
C75979970C4620409DE79D771EC430E3C32AC7E1C0E38861A28CEC8579BD79D5
9E0E196E10150E58294CD703A1552A251869940410B41C00CD44A8CF843717AD
4A421AA90100257E21D28CB8EF4D2416D38FBFB72420BBFCE0073F78DB6DB7D1
BE8CB33E910C6B3151427A7D98A066F342E252C328DD89B9DA74D9310224BDC6
B4BFC276F61B5A32BD7BC7D1BD4B3A33A3455B75A0A117D5D2C8E984712FB874
B65CBBF1DB825B0F22DF76EB05D5503198F55052EC26DD1D2AC5C6FC313F9B3C
232445A92D905D2031CC6522F664F096692A3681AE068893953DFD154B671F75
3CABE3AAF146ABE865253ED07ABA613155C39E3B903AB5D8AA396EB9580A1B9D
BE5275BA5D770AD5B124184D3A9389B6E940F41371D84892652B97762726BC66
D86FAB925518F02B4EABE36BF15048CB7E5072B7CF4CB4A36EADA77FE7ECB46B
610D2CBB58D8DA9E76FBCA9DE9D65CC20571098D04F77D4A02BA6AB1F85028A1
A47FF7BBDF15679DB41E03E5BFE73DEFB9F5D65BA9804A5D2A0102085BA23217
08E8E1861B6E108701211F16D1D9C994697B096E1B85CDAB5EF5AA071E78800C
D02C939698047D248B782F2511D9F49A9A3DEC4E3CF14468B11C21072CF12AF1
CDA83CDC8B7F314222BF51079D3B3566470B93C425819AE9AE1C0A0B2BE60061
3286CEC8E1BCC4C1C400F4971A0739784CC630D53765A41B2E247B252A689675
70C2181515378665E8C7A0B794C28904419F38383E4685AD8261C1F47C95D70C
63D161B89C7CF2C9A2C7411E60BE26E2AB084EBE37CB7C54DED998FE773C88EC
F2F5AF7F3D341189BECA26513BA0D22132E9AEBBEEE2B7F8EDDD77DF0D2EFCF8
E38FD396A4778211027AE1A16EE0E9A03033DF696F96A78CE837018524CF817E
55DC641E9C3DBD46748E49031FD1684C170D0B3ED9C98E631072174639CFFB4F
6F092B7458564D158916213B32B2191CE53DDD6E18092E83CCC653244BD89CA3
655426327A814708EA09FD99A2C1984B849F808021ADD9CA58DC59A64662FAA0
A094610CD27543528C04898B0E226AE86EAD58DF3DE5A70EEE52ECED0B1CC872
AB3D35F18A48F9E07BB6E3C52144166E54B59C8A8F1B45B16365B5B8DA74AA28
ABD72DE2E76D2B69479D482515D72AB9C5304AC6A14AABE4198CBFDABBB13103
0D62DD81876E7AEA295F7777A8CC046DD69FC37A864AC1800AC5BC19DB703DE2
2BA44B633B4E93754B574E4F4D411F9C0CDBAEE736C26868D5F26D5B775C7EC9
45575F79D588E3C26C396868E58EF16D6B545FD9F3C19B1D3A125C68469017C1
A46A45AEBB338ADA96B2CA5614A67694A584A66AE5506F6BBA51747CA8531694
C272F96D27FDFDE76EFB6290442D1576951DBB76D7B61A3A7CA2A594A4DB936F
CCAB9B93DEBFD4AC69EC62978F3DF6D8EF7CE73BCC6761112B49149B020B1B4B
A172843E261F523192F43072734960A379214C9F2424559C144E0BF1AB798AB9
CA429B74AA0B4891328A9618EA23131356CC534F77024FC7FBDFFF7EB0298A1F
8C44324ACF3CF34C0839C17C140B95A4CBC5C47C851550F92355C0FEB67862CD
0C3CB905411D56AF5E4DD8679CC617BDE845BFFCE52F390122C7419662298F3A
EAA8DFFDEE771A77255769892520485ECC0E12E451A6E898C9E6223F16C9D612
03903C9DD6C6BCD6E4CA805665522053AFC4DD6FE568246C3A4F7E47BF2AB79F
EC065F11BC4919FA32EF60661F838B7DF18B5FFCFBBFFF7B2270903AA5FE882F
E2669B59342A33BF043684F03BE29AFFC637BE816140C8C362A5735919A5DDD2
C8410C3DB38C4BFE95B525B1324C444D44CA4CE679F0C54F22A8EE5275A1320F
9ED00646256752E237EC5277E49147327D82D449AF05614FE8A3102500C715EB
663A0921D1F1134A0833E141E243A24F584627B27992402C45F310D2BC30D1D9
E851A41816B39D8B402D473214B8EFE235C614DEFBDEF7DE74D34DF40EABDCB5
C88C7552B2A98279E5C2AD9FBBF9C3E77D582382694CA46ED9B3933079A5B274
3D97AD7D8E6E9A40552959B60F561084CA7512CBEEC4E035CA73DC02F621B582
54B513ED31A93856C9F192D89E8E8386360BAC46B1B011ECA3ECBFF8A5AF78F2
4F8F61AD66EBD3CB972DD7BDE99B4D661389DF43D66A4E0ABABA261A0F5AED15
61764CB71A2565B554BA6C7864DBD8EE33CF3DEBAAEB6F58B664B83E3D8D61A4
9D4EAFEB75A3F0875FFDE6C51F38B7E87AD75F7DF519A7BFB76AF903FDBDDB26
B7F47ABDCDA855ECEFE93AF678AB11D8A95D2AFDDD716FFCC1F7EF9D9D98C2F3
D62C5BBA65E7AE91DEC146BB5D0F3A071E78F0EF366E746C37716DF03FC8800E
3B10BB4E4F798E51520383C5FCE8A38F827A311DC1A82751F1D051C157B9DF83
D61BF13C78A2091F8DCDD2750F39841C7F4B6D989625CE3515383B435326D090
60D34A892FD69300FB8B4492F908F1C2CBC5E2E190B68CA4AEF7BDEF7DFFFAAF
FF2A37A420A14EA68C923A1AACA283E28D6863FCAD7482E1D921019309088829
34426833727C0E39E4104BA0B884298B0A4C712428928CFD527FE4F6C8684472
EE338BCE2CF4852904E58B1D0BCC879A518A7DAEAC19BAA079253259D2B0AC1C
B38C250BF4D2323CC295227F11B64B8E40E12CFE7DB1DFCDC69694D5CCED51B9
4B5DDCE50C9FC8E9622906253CEE49E81E91FCE25590900EED44366DC66E7DF6
B39FC50510EFCF3CF38C242C127C54F45C0199C053703630069EF3BD6D020A4B
95A7545F7AE9A53086F820DE5CF829DFD0E0E3F819121725C5F48D9046A9EF53
78883FD4AC1B97B098249E72EFE87DC2BE60112ECD5E941034A83141DC8D8964
C2C731123AEE247BCD94796602347F75FDF5D76FD8B0814C90C8A66A4F67919D
BF30482E883425557938CE8C3D50846B8F6AF615010F24539BE955CAA8272071
AE58B274E7E828D46DFCF0E6CF7EE69C0F7CF0D0C1BEFAC4F47A0802ED1183BE
9CD849CC26BD6ED633C077ED822E55D7141D5B2AB09230F3DA76940E1D941DAB
AC1C954036A481638FC541B3E86C09E219470DAD5CFDDC961D7EADA2F1F8E284
9A9CF87525866CAE9BD80407F68F4C8E8D1DB4DFFA99A9E91DD36396B29B0A46
E78ADD63E3CD4EB75A29755ABA120D4B30DC536BB75A034EB1D96DC2105E5F1D
71DAC175575E79D5159F48A2B05274661BF5A9549B046EB132D6691CFE92A31F
FAED2307AFDFFFB96737CDA4EAC0652B1FDFB96D69DFE0AEE909CB761BD0AE40
48B61524693B0AA20CE26E5EAE8E44BF30546C289147597E2F453FE6957CCFF8
307689E5EC250000FFFF49444154E18A2BAEB8EAAAABF01369788E3DC5464BA5
BD34C79DEB8491C778F19E6BC80E71D4C9F889D4242D124966B2D6BCDA75868E
E9D510FC3406C32EBAE8A2CF7CE63352A4468552F806450B4D5E713D61B29C3B
59313E9752F679AD0B2830984A2ED58EAC57A5566D516E982E63DE82E8119015
4F3EF9A469A691A420E5B02E66337795376B26B6A87812E8A561C7024CF8D5AF
7EF5D34F3FFDECB3CFEE33C96F6F3FA0BC843878EA98CB215695C83D411DE0AF
049B850E32DE8171125A85B2825C77821A0A3BE314A8D262FAF4F3B02D06AE39
F4D0439F78E20995433BD10F4BC927880BA6277D1EC32273A14542683C53E725
9D095A322E20B612C5153D362AC35A989732314F128869297D4DCDA6438CFA50
8F90E51589CBF26C1E15FC09298E8DA3D383B29C2441E6C8827E699F24BD2224
A391A04C34AE5566A872F1A5E8814506323C7A8DA4BF317D3E6CDB39AFFB8D32
80C39826C8B512B6CE2431B1C6CC762E928E25D03118305806E490148E89E420
B1B1B24FEC1B91799292CB5340576430D568A9B86FC9E0CCC4582552EB5CAB27
4A97FA3099B37BEA163DA9F6C4E3AF34D6A8B58E2A5A76057497DA71AA9A69D4
48431C270CBD9BC5608BB6AAA47641A307D9184D3768B77C67DCB59E6B46D005
74CF30B015951CB86215F820E996B441DC02A3A57B86D1E2D95CC325850A74FC
89E9A9C172ADD1D2CDE9CBD5F244A355F1DC7618154B05AC026C1ADD81A3AF67
627C661016646A799D6075FFA0DFECAAA0E3ABB4ACDCB5BD03DB67B6FFF50B5F
F38217BCE0CEBBBFB3A9BE3BA99476B71A13A95AD5DB57EEE97D72EBF3955ACF
CEFA6CB1E8CF76BA56991A4992E149D8CACED4B524EEC98ACCA5FECBB4690482
9BC85AA4405152258785F911D4974567259991E9E1CEA79E7AEA9D77DE490729
96E5A0830EC289C642317829F622F3D6E8FF249DE071D0C916EF3167E5F065F4
4813304E42B07C22E19CA147620CFBEFBF3FEE29AD8CC9B5CC3C0E66B8C26421
9403295992FDB0D72CF3320B1E859F33EF0EFC0DF767DA2116FD924B2E811236
07686FFA7365045470E6759464AD00E31E736D6EF226E3E4C8C28B05FAC6B4D0
CDB4161192FF73492036814C4C2481098363BE046158CAACE959120DC236A05C
793D5E8C48531D662F4C61F1471D7514EC32E6C2B34A8B8C92811681D061D893
8C8FDBC6FCE27D962C72C360FCE2DC0A040A87C4B0B6B06C5A3394313C213CD2
04663095596504094C34568CF9F4D34F07E98328B1FD98297F254524E4A7D44A
ECBC7B1F5703F635F823A438C50323E45C49F6AAA3348591CE88519A37D13633
B51855335B8331A949F08E703DEE8687626CA2DA706D993C86AF04B7759F9240
28EDCC33CFBCEFBEFB9E7BEE3909A2A83DB16BA410611E3E15D6FF98638EB9FF
FEFBE7D124D747C00D7512CEE38FAB3C9C48DB941D5E4593D09ED24475310527
54913AB2B7B6265256BD3E9075B54B991964D99E5E3A6A63495AB0FCC42AA52E
2501C4C0B4D28D5CBC2C375F9725DBAA8A0B54EAE3ECFAEE40984CA978AA608F
86F1746A8F820356AAA3ADA6AE54C83C96D75C730D73D258692F5EAF7992E0AA
8BFFE5B2CB2FFFDBD7FCE5430FFDBC542ACFB49B56A9D08DA33484366377C324
B35FEC6215B6DDECD235ABC7B6EE483A51D952B5D41E700A438552218A2B6EA1
DFD27D8FD356A7E4149A71D7EAA93C3D3BDA3F32DC4E9D4D63BB34A444A93CDE
C6F8B0CE7DBB26A7BD8AD627740646AA74DAB535270952C3C1C00D65BA07F708
347FEDB5D79E76DA6938B0243CC96789F366EE175C70C1E73EF739C982A1424D
26804DA7E262E7A0938CC3895F45407B44833EE79C733EFFF9CFE327A79C72CA
BDF7DE0BDB426215FBE4577CCABC3801484597164D4DE1E920CB638F3DF65BDF
FA16CEE03BDEF18E1FFCE00766ED98E09A905748CB452638D02B40E6809113A4
4084A5D9C85A14149A352CFE95FA3B06B420FFB44B4378A24077C9B8712F8116
50B93FDA74CA8BBD6926E3CFABE2210FB532446F412195EA06F53FF60E99F794
2662DC42FECB642F2AFE8CA560E1D2AC9A17B3C0D1C57BCC9C5D3D059F521896
1090E903A15E6C760AE48BF797D45DF62AA04A824FC87A58912B7603A9CACA61
9D446ED36CC21DBEFAD5AFBEE73DEF317DDF5C25620DE1CE92BDC00003AB1056
AF5E8D8DFCD5AF7E25AAC4BC153307BF76ED5A6C396E888B5FFBDAD76ECD5E42
76A478AE065755573C64CA35975A92D548E55C73098C4B05BF044E71CD4B5FFA
D2871F7E587A8EAA2CDE4093564AF94C5187B1C1903FFBECB3550E30276DCEA0
6362D7FEF33FFF530A32E7614CAABCF3387E22B05C98FECB5EF6B24D9B3649DC
4FA8942FFA06193C14331C328FA11DA167F1E69136C8FDA5904265851A189B9D
77CE11B1B7ACDCEF2DEDDBB2F379A79D1CEE15D68671AF8A0B19E45CF6DF9FB3
AAE6E81F9C3E8ADDD876754B19ABA1C24656C46B65EEFBAE76A15BD55855555A
CCAA3196ABC264D899B6AC595B359DC2B865EFB2AD6DEDF63FFDD33B1E7CF041
EC97B80294119C547B7987064A95925F1C1F9FC0773558D251500FA272AD08E9
D469613D97EDDCBED3765CBF526A3471FC753144B7DD29BA4E1AC5CB6B3DC524
2DA6362479187746EC728FEBD73227ED78521F195C323633F54FA79F71CD4D1B
EC5279A2D39A4D55A5A73C39DB2A574ACDA00D1903119046691464158E4A9F94
6A4F8D7445751E2401460C0A04E590DF094484E423504766BA173EC79164C516
79BAF45737D585A38F3EFA91471EA182C502A379D59A698E5C2426382FA60B5A
328FF7C9AF6870339305EFA147FED55FFDD5D5575F2D0C9326056D5F56A57184
82734CDA60CC75EFCA5CBCA1485339C40B380F0EB848502AACF4007319397D58
2138983FFEF18FC934C8E4FF9C732D78AD64556C000961F595AF7C85D6346D61
E2C5B3D40DFFD2C34E66413B8576193550F19388678651FB34C79350FFE388F1
3C5B41D204B94FE2A99897DECE79821DFFFEF7BFC7F2D1A1CF84192657C93911
3F204984EB2EF87F5C1C7A93B97C521E421070E165E4BCD05988966A465304E1
32FD3308CFDCCA83BCF038E8E9589CCB2EBB0CE4422425B3F1B4CA9385B9C8B4
DBF0158CCAA79E7A4A2A03E6D9045478992797E695EE2C3DC327E211125B52E5
490BDC566650D04CE48ACDF3358BE0A413765E5C01E2F0E69B6F16F72063B9E2
8711CF1EC52A4C57AC182D680A3F9219DE6335B0232C5291D68CD27F4AE5517D
1A1C0CF9F2948ABB96A3322358F3288A0966B6016228A5D76216E01AE60BD262
66348F56C5C73EF6B1EBAFBF9E75366440CC0F713AD164D8548E5ADD3B30343E
BD5AA5BD1A9339EDD17EA11C527B0EC39A940D861882406CD7892DBB13859D54
7B4E62E5CCAAB8A9C763D552AB02951F1BE7A8C1B45C4F82868A669402831C57
6A9B520DBF1077031E6D8C017B2D6540F3D43589185B902E65DF4954ABA3FDEC
7ED96FC5A1532C741ABA00ADE879769016DCCCAD1776D7AED97FF3F3CFC0046A
761AB5DE5ABB51C7F88A96F22CB57C6018B7DC39BEBB0F9AC7C88A99898934D1
FBBBBDD3BC7EC30DFF74CE592BD7AC7CE2F96D6EC9ED74234EDA722DCF713349
A0FB1CDB5951719C2195C84136B56F1C13DD143363D9ACED17B214BF9C328297
2AEF14468141264063978D5499A629CE1CDA0D64F7F857B22B19FF33938617E1
57B462C57D4D258915A3543AA979280311525CA3BA4075EB56A1400E4C4AD5A8
1891A3DA79A3785C005375FDFAF50F3DF410FDFEF2733C8BD0C56CE7C03A06EA
58742551A5DB238B945A8F95433C62A0445FE10F88B36A16374BCC8D87567CC4
5C4D49BAA0334B0C257C28FD58FEE759A4F69E8DC3E4B70C6C0A321207C96D20
CE9D58365028DEFAD6B7DE7DF7DDB8926A057828989724B9D2ABC80089E40E9A
AA84F44C2641B0FC44E5A95064DC2411618882DD2DB9BD12EB56595E0AD3E7C5
C117E7EDE198CB44F43791521C06B780A14EBAAA923D3138CDF5E44E51F2D1A7
471471A9D6E6058CB349CDA0B00C4171E1411263D94CEFA17B8AF3E2DD447449
F921A7607A3F99CE210C940F12C290343E395771DE1543653106668B27790B04
26754803327A8A2529801E2D19B0A44A53345A19E6AE3C826E5399A9990421E5
A366362AAD5E9A0B221779BCB57C0AC39E55CBC727775F76FA871EB8EEA6B5CA
8955078AFF1295237D257343B1B35215F0B1200AD99139B534F25A104796D2CD
1DA7128DEC8F1F55955549B424702D35E0D7EA51B791846D5BB52C7757923E1D
471D4FF5963560D9BCDD14BF9CDA2B8BD4B5DD38887A8A252B558D6EDB2F9766
3B6DBFA7A2BB2DD5DBA542410736D2C4514ED1293562DDD8245129B6B319B621
018A50151CBBDDEC622DD2440D56CAC33D3D3B77EE3A686878F7F8D852BFDAB0
AD994EB3EDDA936104522B55714EDB10DAB695856D223D2FC803CC0F8230C984
9F14C4902333D183AE126E9FB04E12032981F32275E1E0D31FC21C53E6345E78
E185575E79A5E4777135A41FA489CDC04D14709434EF4A22DC729188B132D21D
C5409C2786E5B432AB07548701E398C08AFDC52F7E314F7253B7A03A2E75E31C
0F9DDE1FF8C0076EBFFD7666BB304A4709B16EDD3A5800DFFCE63779F4A4F022
CD1119E64E0415796A4F9C214C8C134E3801AB7CD34D3761A1253D4BF8915092
44B479F04464496C532A3598C1CA33264EDE390016CBD2C0FDE3E392E9B54F09
A18CE47DE159E29EA24227A61C452553B52485860113E8EF4C9B31755B6ACD26
909C689A8BA0C51E7FFCF1902BE402ACF3A480614A005B89420179FAE9A71931
A6A5262077A6BC945C058A07137969C58A15784F3811D3D6D9FBC51C38E27FE0
6E340238F1ABAEBAEAD65B6F85D81B1919C16E8268BEF39DEF10A3586C41E9D2
B3902416EECF35613C033B2BE57E54DE8589EFB3B801363ECB38B8477606D644
355F4A464CA0FFBCFF572AD4C25C11D0275686AE4BCA18CA51264751D4E126E7
9F7F3E8C5AB61B224F5159058038C1CCFC5409E353E13243DFF82133B8C518E7
237814C961994945B98B37B0ED30186CEF8A552395ADBB5642E9EB2959B36DBC
894AAEDF89F92CCBB175FB972809B28A623F55A58207BDB813E8441A5BD9896D
7593B869A9D8D65682C62082C98E63A5EC1EC70DE2A056EA6BA6C9F6CE2CAEF7
3DF719DBFB7DD0D688ADDDAEB895654995BDEFFDAD785E076684BE83D7C19A38
965BF2BBAD8E2AF92A8C5510AD1E5E3A3136FA994F5D7BEDD5578FCF8CBB8552
2368F995EAD17FF1B2877EF90BBD3BAD96572C25961DB73B2A8E7B4B25309BA0
D359D63F38A3D1B3EDD8D66D2967C3404B0E9C8846AB50F2834EE828ABB752ED
B4B40FA71376532D135CB16994E1598D33B87239A7F413F2EC53DE8B862BAD02
4C15D374804BE63E9628CD00690E38E080E38E3B6EC3860DFB5C1FD1CA4D5077
53EAD0CEE6D8246CCB236FD6C9A70BD71F304BD3CA0BB0E4260B9D477AB971FF
BFF88BBFF8D9CF7E663668D9FBC50A3895638352B84A85AF9625922B2958FF74
2AF1880AE8B9CA1D2F8C91D29E9A57A74AB2A3764C0B1DCC824690D482E175EA
A9A7DE71C71D18349B599A4B83A564F04DEDE535E24BBAF49141D0CEC224C1DD
44AF274D98DE765C20A8322A77409338280231F7B7BCE52D8F3FFEF8A64D9BE6
958F99780CE60BC3904423C15295465D66C72E321D6A8BF44BB2D726374632B5
F0210749F074D6B5E2579FFAD4A7CE3DF75C69FCBB08715054D0716FE5ED5895
9189CC91902E4F3EF9E4471F7D74E3C68DB27DDC59137C69DECDE53DCE0C268E
457EEF7BDFFBD5AF7E950BAE72D49079BAD2DE125D946E920AFD8DCA086ED363
6E76AD91AA0853E3C67D087A4AF3942781F7610E09C1F84E3FFDF47BEEB987F5
684284266AD8DE6792BE29301D6C0AF3FC4E3AE9A4FBEEBB8FCC948E53A62152
01126EC5E3C091D35D562A55DA9DE66B6A03238DCE8EA475786FA567B61B541C
AB35571A09D6DC8D936614763349E041126408FE31FB2F797E90C65D580659CB
DFD05251A2AB826119F5284B4790FC42B715769415969D6ED41D0F92E794DA59
AB36EB0D656455FE590F5D401238495A2E15D338C93AC364C50EC5027EF6A173
CEBDF5F3373726A7A1A4AC1C5ED6ED74A6EA533DE59EE9D6ACE5B8856AB9D169
A7518833D66D4009287DFCE39FFCC879E7C3B4AE42116C367BB0655D6D2874F5
645DBF56A977DBB6E746B07DDADD6AB5A2B17A3B5D0D469D2625BFD4EAB65365
2556CA088AD86D5492A859B3E6435A6689DD09AE85B3B37DFB766E9FD4EB9820
3A5279CEDE96E47292116052C8DEF42F394B64D352E24EAEB86AD52AE87C5074
AEBEFA6AE83A575C710559B98825F653312B9FE6DD9F18CFA47C9AE94C885AE8
7AE9CD8917B44F06C616F1AE1F7CF0C1FFF55FFF254E0551A3E70EAC79B5E0E4
F14FC9FF33D9AB38E6C42AA14F40464C0F009450A863660621C41771294C2F8A
200EE14F3017C987517B4592C51F459441A5E6036F497302959B14F488C9D24B
0E3BCBC7D49EE55A1215A478E3824AEAE1DE2FAAF312DF274639B707DBC9347F
C661E888A40087320E8D95BD19F01586349BBD546E7249832026C9B1580FB405
93D6CA7B71EC733C621D9BC8EC7C0F8E49A9C6B02D338BF162F857CA004D2369
9F94C4059478C0273FF9C9F3CE3B4FE5A826AC97217C1E3BD898DE2AB98954CF
3379899D375875417AC0AD98F84BE625C0FA324D113CA6F92C879CEE41122763
2AB83F6D4DD32D66EEFEBC170533B545E6DB5D79E595679D7516252587444552
1A0AF2567BD7D964DF168B6567ED74EB00E5C795246D06CBC1D15CE52A46239D
1492208D5B3A1EA0911FDC58151CABA06C27D56565BEEB0571D40E3AB6C69AD3
603E18B1675B454B9594E5A729CCC04E1D5F5B4D379EEC4224A8E1C38FDCEF4D
7FF7CD6FDCB965CB160CE00D6F78C3830F3EA8728C3601F0D95B12B88E0D49A0
D3A6C3204CD5E0D2A177BCF39DB7DE7A7B1C4605982350D253C821A893BA3F04
863134323C3E3E86F5EAE9EF9B1D1B1F1A59323E3AEA174A3DD50A8C8062C12F
7AEE4C7D76B0AF77767AC6AB55A7EB8D8CE366FF25500806FFFAAF5EF77F7EF8
639D916C3B0CF66AC5D1B63ADDACD99F11AB97F67C071D741053B6C4713D07B5
6D38F15812C41C076688880FC4CEF1A9A4253DCF829517D52E14016636B919B0
9DAB1CCC7B6AA93D3B9A90CCA81C08CB5AE47C61CCAC1012BD5E52A517E23F2A
0B1A7330F464301CB8CFEB1924C048988F0E2D96A8CC02E16331874F65263307
8ADF9009A679CF00963549C986F927A39DD81548CB1B6EB80107861C8D3D3D18
2A64C9AE64C55095A662859F930FBEF9CD6F86447DF2C92717CA2E55465D8660
9CD1994EFFB5D99747A2347C43E7959915C05C263BC35353B9A39F6E7D3C8B24
C29B2F942F4C1F25934F7813699929E8F0EC3120FC4292A3E7D971E4B014B1E7
9C730EF88EA8A54C1F7ADBDBDE76EFBDF732177321CAA01D2AC103957BC399B5
26711413705BED8922B588E9CAF94A7E2443E5C4BC5346FB4C08861B6FBC91C3
1655749FE364E89B415DD3AC649D335D4C9C85A0B649E805CFE54F58844193CE
CA31E8050186A7C24C7513FF3E37458C12B567AA2825016D0E3A33257D401C92
D0F8AEB9E61A46F579CE6D037C90273307D2889BADFA2B8AB555613A1E35D656
FC65B1DB2EAAD9266BFA7437E12EB4A538D6180BD08470135BF9DA38B04AB6EB
7B052B6B6A0633B69B262C2980C60D7DC14D63274A6732ECA0D82EC4252708BB
1341B251A9CDC682CB21E2BA75C37D733A4802473F3CCE76A11824B15BF497AD
58BE69E346B7E0479DEEB2254B75B8BE56D54A3C96D4736A7D7DF5F109AF540A
5BED41D86763BA861C72B25AAE42A56F34B32C09DB2995FC46B3155B598823A3
4FE895B33333D0FA615C6E7EE6D93889FD821F0641C12B74C2392613EFE94F97
5E92F804FC84FE6ABABC79D9A1871E0AC2667E8A589926FDA85CD325F1BCE52D
6FF9F5AF7F8DFB1085EC7FE2BD114400EAF892D52ADD7C6191E086140C14068C
3B32886DE5E5A5FBBC3F68ECC52F7EF16F7FFB5B501A942DE82E62BEEFF37A6A
3CD2EDD10C25EEF37ABAD12EB9E4929B6FBE99C39628CB5C0C8F4D5124B3425C
D532681E2D3AAFF178B083BD0BCDB004BCBB60CFD16EA0EA77CA29A7B0C30993
82A129732FE97AE34996A0E5429280BC40AA2519DB91703FE521BE220204519A
659CB8F89FFFF99F31064A0556F66205A905AF5BB7EEA8A38EFAD9CF7E46E70C
83A884CA587C65C53AE320A9E0E31333EC693A5BA4908A106C54C6613C417C8A
B3424C543E9D2913871F7E38CCBA79DAF1BC9794C088C52A9C8EF60A43DF6407
B45448A0426A023EBAD07C69BD12099505F73C87E2FA63087D6F5D7B5E62B164
E24B353231F49940655609881F73F9F2E5201B961490D2C489A4F2745B7A3F05
C409D3211E00941226DBC5797736DE4452FE6582E288A0D9CAEA1BBC612E87CA
C18D313CB0B08D1B3712444B76440245565E259B9DB1A95A6F71CD4C6B59A6D4
0F2A7580EB4FA6DDC4C1EE2451922696EEE4DE4EE36E565E0BCD1662002A7F21
D1409E3E840174750BEA7FAC333453CDAA750EB19D662C2D69E992340D52DDD0
172BBF58DA64798FC601B809D40B5C79DA69A7DD79E79DA0A2B98D5E304EE06B
4D5C6948A00832066B18472A4D56AE5E33363A0AB34063EB820F263AB6EBFABA
9F597B6ABAD6D70F21816F6D656DD8B0E1E28B2FEE349A4114F4F6F65D7AE9A5
1FBEF042C77303DD4E225676D23F38D469B5DACDEC08C3C8C8A48E673B612609
9868C0D67EF6C292008C0C8635298D5E911D3B76C88913FC2BAA44D2C79B6A10
6D02323AB6A691E9835A18555EC43B64EF89260D6DE0539FFA14390CEFCC6A18
E8DA52C6AC8C2C235A360BD91C244B0800C98716625B683C78D6C9279FFCA52F
7D09D7103413375FA8BE817E7E8E5CCE387574EABB9614C733D822DE6D6AB8B4
82E9120557C2652CDC973254395D98E421871C42CC199E9CF5EBD763ADE991E0
AC24D31CEB8EC3BF79F366BCFFF4A73FFD918F7C44C2EB0BA15028A36BB98003
8B0CA76CC0383FFFF9CF4333C55429E8B0B81800670E1A3AE38C33F6C9A130BB
134F3C113AC2534F3D95E6C5818BFB0D855BA90CB503C4870711439B2C46CC4F
A68EF13E3211C91FC79AB0B505179CD5C2C4B7901E32C23417D11104039D442F
1561E99E9D34D49E5E35A9B4121CE985284F20F04439C283B0C86037E4DDF411
E173F2D979F791234D4D04F470C209277CFBDBDF9610B488731ADAAF78C52BF0
94B7BEF5AD2056CC02EC8CE84C8C1CD063406C41EA687C34662A761EBF62348F
46832417C9520821992314080A2C1A6818DB819D5DBD7A354323E284146B8006
659CE36F8B1542B3A050281EFFB6E39EFCC6BFAF51D692FD96EE7A6EDB51D5DE
DD613D5216B6374C34CBEB5A9004DAF3136611E382960456014ABAEE59A68A9A
B41D3B49BB59143BD5B8E896E782A3C7D8B9B14855949B16FDBAEA363B118863
BB525BF744E2921DD4472CDE373D57BD72BBDBF66C0DBE325D9FC1A8AA7DBD85
A23F39AA63F24B972C1D1BDD0DB1656B0C244D30B5FEBE0493EE061095BA04A1
528BD3A4D96A0E0F0C4C4CE954059C8DDEFE81199D659E1635FC57E042E6C17C
57F6E0C040033C37AB7D03F5355A4DDB7582CC3B045101A1D2EDECE11DA26455
395832DD8F3C1A5218240088B4C8E906480D1815A920E17CE761760966E742F4
0FCA140D92078A5128017817BA223D482608CE08B45E33E37121CE8E1B8225E2
57E0E92C489630EF3EAF97B443135869116F92944C5946131B69986199AC41AA
C0A46BB1E83B2C30A6DB5D72D1A86052EDE5A2B3C5185EF426F3B78CB408DB15
B58E6E22322F7AACC868F6193116A7906C3985BCB8C6B0E8444B965A5C1E577E
C8F389B5061BE276AA3D014425C1890AA660E72DF4628106F82066B165CB163C
E8FAEBAF674994A4B8619F3041B3CA57089754951860B36CF1465EC3F271F6B5
B732EC2A65C463F7391EDE90B792F649349B04C75F7C6B0221C51F52528A6766
9FF7673681F05069ED229A359E72E59557425122108588C9D47829C37D47D264
D11947883B1F7DF4D1C44287B2831558BA74291EFAEE77BF5BE51959C267E7BA
01E73143BA894452522CF1A1624A4AB203B75E0A6DCC4435F933CDD0EA89EC84
E1510CF33E18F975D75D772114DE2CBE62961F0A108BCA534A2037E3247C8953
5C1685BB55BC9FA5D617AB3BDA8D520976701CC4DA50C07F4D8249E04CA51AB9
535B031ABD39F574EC56F7170B536DA967A5B8CA5596EF38AE9D60D59AB61574
759D8196229E1D27D6C6D87A5C25BDFD73C8E13C6562AC2FEC1DB20A6E019A6D
27D0018BFEA1A156D06D35EA3D037DB353D32A4E067A7A69D18E4D4EE8EE1C3A
C05B0CBB9D8AAB9B418E4EEEC67E97ABB576A7898370D6D9E772FF1DB71047F1
D2152B46B76F01E1FA96FB92A35F8C25FA8F877F3D599FC1830A452FC08E6488
4B6028894637D22D4BF108531288A64CB2C161C1B2831EE61AC446D105175CF0
852F7C01F6DFD34F3F4DD838959752FEBFBCBD07BC656579F6FDACDD4E9F3953
18CA5066E85545638D9F418D468C48101414E9BD0EBD0E88C288304A57C01701
411051291A8905A32926B1BDB1105440CAD019A69FBECBFAAEB5FE675D3CB34F
110CBE3BF9E19E7DF65EEB594FB9EB755F7712315A3B6FCC36C66C72C3E198C2
68E2797788952024DB8FF2294A9450032EC6649C92129A7FF802A6912A71FDCA
CB41A9C696A80FE334EC17725FB42E34D2A1C8C62D66A900CD6E63B7C0A121EF
1BB074AE152845EDECE308004619342046B98428E78C1F00AE8BAA5153D0005B
8A397EC36428526EAD853FE8A083AEBBEE3A342D83777B295DE4E69B6F3EFAE8
A3514EDA701A1558728DCA7982B6B447927366348BA6542ED49E1EB2C9ECBB5C
408327B8ECD23C5DF0D4534F958F92169DB6DAAADE10976832C7BB204FC5C68C
E9AF25310F3FFCF06BAEB966AAE8903D3307911CAC4748995B29EEF11022C8A6
D4E48E3BEEF89DEF7C672A4D431E828BB70A363D4E2999B4AC0D431EC6854FB4
4D13609AA1711DB8D36525556FBDF5565D81B6CC279F7C3277D1D50E3CF0C050
E45142146DC34171B6D0EAC19BC1A680619471344906FE6B5EF39A5FFCE217CF
3DF71CFE994156D658B8832E83E0A082E3D67828FC212E6C1243D2711C015639
5FAC52574F65E1E0D88E49D77075A4732CDDA9BB6F7963A0AB5A1E196D8C3672
4D90042DC048485AE5A43BAD26CD4625B4BA43A9B39C01EC335A88B4352C4B3C
0D1CB96ADEDFB8564D2AE5E4C9917A7F5269D6AAABEBC3DA56F2141E4DAABF69
D54BF9F3A2CCE2ECD1D4D8A1A4B3D6399A779DAC94AB23CD7A48C2DC8D377AF1
B9672AB58EDECEAED0680E0D48CAB4BABA7A864686F372DCB5737AFB0707D636
42AB56EE9026196D36C61AA31A46BEF7EAD55AA7A6BE6FC6CC756BD776246166
6FDFDA75ABCB21E9EEEC1D1819EA98D1DBDDDBF3CCF3CF68489D337A65646645
6E595D9BC6BE1E8A3444C87564FA25975C72C61967C4FCF3AE662531C64ED0D6
3AE9A493CC7FD32A3816011DC4453FC442A631FEF465193ABA295282CDD046AC
809D470F3222CCDA099B6CB20936B1CD8EA9CE17BE05F230E45A0AB77E2A4D00
E6C2355E61DAAEDDE415342A1DC0BDF7DE5B5AD3369C76E989279EF812DB04B2
95A345423506EC872832DB16A3005615E3FFE237A4D743818034749D130E33AA
7B316A792EBEF8E22BAEB84227DF7731070895560680EB1C6ADEF1E9B802E16F
CD0B49883DF6D8E3FEFBEF77952044690C431FC29663C4821E9F68B25551EC90
86C873E23A845F085660699A16CAA1C0850B174AD6389F11C71362BC3C3E5328
0A2641DF92C562122CBBAD9831F0C1AD87A25C70AA1D066B95D4A77424121FD2
D05040718CFDA5DADE4D7E4281C8CA82723202B3DD5F6935EB4933EDEB92A7DF
D2E93CF3DCD33EB5E4B3ADAC2AB5B3ABBBD7F5225C9F7ACE5058F4DE9498E7B4
3FD3C9E17C7EFCE31FDF669B6D007AEBA90F38E08052D10015A3014CDEA49C9A
A1A08DD237B58564B0F338A0E54C08E84D453937C009923D6CF8B8E79783996C
005DF6ECB3CFE6B4EBBFA5BC4B76A920FDB75D266F588BAE4F30C637ED9B5B6A
8E740E0D6C51ADCAB0DA4CD66FA5DCAC95AB8D6625C90042D9AE6BD535D763A5
CC051869864A2B74B5B2B85035E39848EA210BA82769E6348C24D9D7F45EAEC3
CC90746541A4D668B53490A4ADB18CA56E2874FC21347F1F1A871E7BEC97BFFC
656A682971A0B60EB58708B8E5965B34E7A1307A3C39317B8F6D1433AE87692B
405FAD973D33C48859B0D8D2925C575F7D35610D20DA98E4A6B171A873AA0CB0
936A96E6280CDD4517BFF2CA2B51A240E63EF2918FFCC93A034688174BB692C0
0EDB52D7945188736F5801EC64DA36E0A1A7BA7E5CE51E3B37C64C039D6815CD
BEA69A527089471E79A4D480CEA38480E926B30B865CDD690A741E00FCB8A881
9875AB68B6E7EA62EFAA36F4A1210A3CA78B4271DF9CE60EB9B54E956C0CE923
4C41E511F7724B96B8077AC873BC385CCCBEE36BDECA4418F4891EC71DDA9C5E
674FEBCBBA0BF89F58F11AB2E60F7DD93694ADEB69499C4003A20BEAE9E08527
72671A5B33339B2195D22494CA473FFAD1AF7EF5ABAEDE800DD1FB8CFF9A852A
E478767D47AB363DFA939B6A26DFFDEE77FFF8C73FD635F52B8DD65D32CCE0C4
836BA34882B06579104C95EE2EEDB691EAF8267E294275D6E2F33EB364C9ACB9
7357696E5BCD9D76DAE1C1FFF99F39FD7D9DBD33A5CE75E5DB6EBB6DFFFDF70F
39444197D235A51BDEFCE637C319A993F3E10F7F580BA1ED8178D2D2C8ABF8D8
C73E264BCA5258A7516B87D18793E790AEFD3664962E2B0BE0DBDFFEB6E6D63A
8FC79468D63E317FCBB1C71E7BE79D77EAB2F665B5FFCD5517AF3B4AE5831FFC
E01D77DC81AF4CE6906C364CB4FAFCF6DB6FDF77DF7DA9A964D2B25CFD0BAB6A
49634E395958ADF50D8FCCCDC732165A52B01DE54A47DE086FB4511F4A9BA349
689432E287CCE44F42972C7E3DBE1CCAB43996C3BDC7D23094B7362BA559EC68
46D6DF26E99359D3591A08ADB1E16C1E0642E74349E391B4D19D17D87B12EC45
E1D06B02172D5A24CB1A08169389D9E8397751914F28E6DD3486EAABF84A0AF2
35C7CA77DA6927ADEC65975DA6ED219FCC7443F0AF85F5F1D38E7B4C13F707A5
0202029423A760B3CD3673641B8EB674DA0E5AC4AC889663A219E66E2CA2F908
DC2061DEBC796C69EA87A6C95487C8307505003F0C454F49761D19C749AF43E0
4B3F845118B7C371E3714DE0440786AA8DAF50084DFD09161D4DFA8CAC88FC59
EF9E5074557445B19BE892DA653DDEF296B7FCD77FFD97E989B4BA44A98812E8
0B471D75D435D75C8367A7FF7EEA539F3AF9E493794273CF125870468848DC3B
DFF94E89099AB7917B44498272D1A39E72CA299FF8C427883094F236CBD222FA
FC2B5FF98A842FD3C47EC274C24F3428C5819A18A81AA22C6BA92034058D1397
5648ABC99DC4B4A7E0D9FAD20E1D8F633AA038DCEFEA6E2B03EEABA591007DDD
EB5EA72DFBAD6F7D0BA2FC69D871895AE8BF9A732951ED0352AFB17D61879413
88B2C1F5D63064D17CF2BCF332BC7BB53C564F935A6752ED6C8DD6939EBE7474
38EB3035369C235FD2D06ACCECED1A191E966DEB94750C797AD7BBDE4589C382
050BF6DA6B2F8E8DFE099E4ADF94C662783CB5F4C79BDEF426B94D92DAD2AC3C
08567C296A5E1D8A8A30206400AE1E78E001CA8E8C344B22020036898502C964
6DC2E38F3FDEDB9BD9734778E89210376D7549BC8CCC7BC97109A572686DD855
DDB0D9DAB89EF6A6ADDEA4349266EE941CC0AE6A2DEB0DD9CC6AC786D3563DA7
A5D389EF2E956BE5CCECA8B79A23CDFA682B4DCAD9AF86D24C13247926B927CF
25CCAD5646ABE5B5A97CB8463DA31EAAFEB19C3E29DD33336BE447618AF698C4
194EBF14A1060CA44AFBC1513E8C6B9E17EB3BEEE38DE318B32FFCA57D02D452
DB87718358449BEB58F5DEA93E2D2856C534011F564DB3617C791231CAC8E1B8
E0820B343F4EFF4CE573336FD494E86AC41B394AC86E7B3371CF194DBE9E0E63
4E1B06029B49AFEFB4415C2F15C3F35C56ED7F4E7A1DD730B715573A8A3BCE7A
A1DF9F7BEEB9175E7821263C417C7BF4669DD494EDB9E79E3FFAD18FF45E02C5
F2CB756B212F40D59FBC5D9CC1C7762668EE6773C88837E602C49E728BF6F891
0CE9B3928CE96AE92504AA17856FB94CFD08F9528A00D8EB71E022DE7332A624
80BEFFFDEFBB39B3EB95E29C4ADB0FE1DBD0E75A6C02230EFEB05365D10CE62F
66D5417C13077EE6339FD15A805E2750C38CA11862067F4724A6E144D4F7F5E0
E067F43AE18413A49F6CB3F811FCDEECB32CAEC41FFE62330B8F26F9164F657B
D75B19614E484A1DB54CB69E77EE999FFEF4A711AF2F2C5F81938E00E501E192
7BC31BDE205524012DF359730E949B4E32D4EBFEFDDFFFBDBE46233CBAFEDAC9
23341147AE4C4565BBA954B4A6D0ED8E39E698CB2FBF3C6E38C1812410044A58
6FB458788A73F2D7430F3DE4849663293E75FAD3E2C58BCF39E71CF25E1A219C
4B4825732C0216D42464DD717BFB8607D7CEE828F70C37B7D4FE0C61C3BCED57
25E38F2B75963356E8D04A1BAD663D6BED9C26AD2CC85349F487B22638D304AD
0C605AAA94A596875B2987A1232F33D621DEB85419AB260369181C6BE8E4AC08
E5C792D6F2A4155A2F51B030271A8FB610B381AEB5BB1C0B17F6799C56455810
093008ED2FAD0910CA98A41A1B84E4DAFF4E1A310C0E8564821E44CBA113A115
FFC0073E70D1451719A137E9F5F5A71D77DC719F7DF691C49751A2732487E3DE
7BEF25D2406F095C678EFC54D7E1CC62D46A7EDC61D084E73EF8E6AF35CE3B06
9B4D933F88EF9E149C190E4E98CF11723D44CDA4F349BA17DF0EF25D1BEB014D
402E51FB9B16EA047368CC8D44466DF23C0862C71043516DEBF65BB2C5F03EF0
7DB4E774C0E4EC5F7AE9A5969BF03D00EDC730612A29E7D17F31FA500CBA02C5
AB04CA7511FC29887DB4FC125EFAB2240BCD8CAC399C97D6E1D4C529B062996D
5A869C67493F27B5C00140D018A7444C997C0B0CA00E5BA1055D33A2FF9E7EFA
E97260F12A0C7763BA34604AF042E113E83AA4167423E876DDACD127938D08FC
199DA701EB9B1A86948AFEA44D3C4D454C1CB22344A6274510C0DA8625181353
3B080EBDF6F8892A775464F08F8D5473E2B3ECAAA5ACCA493247926BAB051B3E
FCF8F3AD1C063363EE466B56AE09ADE1AF7DED6BFBEEBB2FC3902BA0D9603B49
1BC150C4A6C42692A0D7B174D90A1E9EC15D5B6CB185F61EE5C761FDB88D4F48
5230BD90BA77FD3D8A8450618880005E4D12FE18F894A03BDF6B1B4AC3D6271A
955650D7D172901141B5686F9F79E6994CA3B79F3E946B5BEBEE59B96A79296D
656D6A429817C2A69D9D8D9191CE8E6A29EF51506ABDA4C6B247A88F5B4ECD90
79EC9201A3795B028D7B44A7209FE18C1D48966029D15E99D72A354AC9582919
68861569EBF9109E0CAD1521B5D92123C0E5DC4E4B6AFC1A2AFD440102B48AC6
DAAE1845915004AE4B61D2A217A70753BC5A9AA02D18EB178D4251C058A8D846
E01539C2AECF4FA6656769C322F2C8FA95AEA937A421AFBFFEFA430F3D741ADF
02618D40B7511BEB2142261846A1F06C5CE616F3DB4F7AFD72D4F9DCC436C442
911E31CE651AAC118578EE9DC5041A2531AE091C2E0C05A645269EF6F14E3BED
44B35654B13690E6E8B1C71E932A060142578010D5D0EA9B92566EE6E7273431
BDBEA953AA355BB468D195575E89AAC48C8A398D2D2B8DF98911E23EA266EEB4
3F0B96033F3186DFF8F033EF2029F54FC9A078194CC9C7F54F3EF9E46BAFBDD6
8D6BDCCD262E6A0B11C8559BE68B5FFC22895CF40DF0124D0B1CB9DFFCE637F7
DE7B6F9D2E8D8AD9C0F0892B06C820C99978F8E1872DF83890C6CF382545746E
AA9309BB1F8B8B01ABB1B9A5355ADCC62FCB148320893F666C106BA41D9BE5B4
D1DB59AA8FE4F54D1DE5E18C7420CC9BDBBFE2C5D55D321C2BB59BBE7247BDD4
F9E37FFB8FFA9AE7EEB9E71EA6FAE31FFF388530071D741051290D00674563D3
27471C718456418A87E76556DD6126AE1BC20E70F98C2B10AD099074C4D9F42C
7A04CF184F645B8F7FC22BAE37862D1894DC56B3ED2D846145C3745784C018C8
0E9769A2111654C0FD6B07564B787736C39695F2A6A1B49144EAC8703F87B0D1
E410BA8F8A74C37885C5381975DACACF9064F068AE0928B9AA95926A465F9ACE
6895B3AF25C9DA507A31A4CF84F4B9345D17D26A67B6D5A55C6FBEF9E6B81A16
E56A5712BB2766B0218B00E31E93AFDD48DCDC5C7BD3F8A0AFD6CB4792C1E016
738EB0A5F466BFFDF6FBDCE73EE7F86AA9A0F2C70B373DF8A4D777AD3BFB1F92
41C769E36FD25F6C9A7EC571BBD6B8A6BD149544C4AEBCDE6B9C575D7595EC63
CAD3A6A963488BA695E33D2627CB8193B5455070B4A7BA545C1C17A2AE5FD995
09C4875C01CAB1226D42CC64D9B265E6F94339C7B6AACF212A2BF686E263435E
5B57C32DE5C5ACC9BDD051D7D51CF0B9E4924BCE3AEBACB4207BE2E2B802F442
D0486474DF74D34D9A56A433B10BB635D01AF64D4CF380216337D9A281E89E7E
4548C4A9574424801C3BCBF020E2A3C8003CEFBCF38C620C91736D5632FF8900
0581783A4A872228A90FE156B474933C72195AC86D79DE687BA19BC1BF92CD73
A70E9CCDA996BF2D90654E3787D743D4EFC5BDD8982266267B96BA8452B39A68
481D6B874643A9ABD43FAFB57628943A425AAFCEE8F8E657BED451CA007077DD
7D6F576F5FD21C23364DF84E8FB9E79E7BCA9880F644CFAB7900C4B5D75E7BE1
83EB01172F5EAC0F3FF1894F9C7FFEF9EED74A10CC15BCA6A009513ECD07C9E9
1C47A57447CFF938157B417FAB33A9017833E08DF135C3B19CA5E76A889B98B9
C4871FEA0E5D44EEF5C5175FACCBEA310757AD1B6ED565F977D7AA7387EB5B55
AB735ACD4AB3B541B9DA0AE381AD717D965F2D7B64B923ADA61FCD6F4633FF20
D7041A43A24B8E935564C1A51034A01792E49924AC09C968A8648B52AD62F09A
5E9E7EA26C006C3B6F06973A22FBF4F8B0D36097E89B8E98856959195EAD170E
4A8CF62E155D803C3C4FBE3D5AE7991DF19F3E4F1026D051D04E527FD599C572
B2089EEA3A3140D9578B23F2543569135261F0777FF7777297436E9AE8FAF44D
41004E7AFD36C8A56EA115C159C70A4162ECB2CB2EBBEFBEFBD2A54BA7795EA6
8B2D1DF31F6777F1EA1271B3DF8DDAF7C9616689F263FB70FC3CFBA130C0D139
31D597139E669125FA1437B374D328373533AD4D283C7A74A3C164380D9ACD77
BDEB5DFFF22FFF02D96428029A9C4362616941F263C669235FFD5021EAFA1657
02A3C96200120CE06E7AC74E75B80C4572DA69A7496A6B32B1735175C692C206
65942DA02643CA707211C1FCC958233F38C13AD9145FFDEA57354BE79E7B2E85
EF135FF6F7431E0763036108188F1B171863E45E7AE9A5706080C2CCB460776D
60302F40EB9D3138DC0A1B2C7CDBEE7BD72B3DF56A5FB531D45F1A3AE1807F28
0FAFBCF882739A8DB137BDE1F5AD52860BA0F24E0F25D78ADA0EC60312FCBBDF
FDEEFFF93FFF473363291C1FCEB428FFD6DD3FF2918FDC75D75D9AB40BF25798
E009C5A5611A3F59166F27FBD4B11FCD127FE10B5FD093E2E7C52B1ED64FFFEE
BFFFFE1A00D2C795192E4C8D530B56DE7809ADC1D11199EE49A3B74B3338B443
28CD0A19A7F4DC0C3C9FA4E58C8A27E4018446B3D1CC3B1B53A09B0F2FD770AD
541FD52AE5D1666B34CD847E3ECE90458E425855CD02469A3819F0CF4919C868
906E2857FB3A3B9C09F3F1E10D9840D77618F260763F97461E79E49132CE6616
2D856307FD2F9D2770793FE69A3B41621A320C1706C5354CA433B15CA7C9F422
BE586BA08CB621FCD26565F069BF61374C7A1D6C444E505CCC6F0C3A42C96C95
44D111087CD30ED934D70F51AB8F2DB7DC72D75D77BDFBEEBB93A2F3AE551131
A8A9E6D3A1AA50F04E9AB5697C425E95956B539BAEE52368EB2A50F0242EB275
223444A63ACE0EE75CCFA69590A9E88A36DBF5CC3E7E990547ECB2180D65ABCD
391327F742C1924DC0274C40A9578A9EC9001208FDC73BC6F5B43601A8767638
3E14E5D0F2D3816F8782CC436FAEBEFAEAE38E3B4EB69B2EDBD6B578AAA9A6CB
0213C8C5C95B007694F0D2D5A4188E38E208948D2C083DAF91768E084DBE8E49
A556ADB44687FBBB3257EFF0238EF9ECD59FEF9B356F756DCB1DFEE63DB33659
B86AB811AA5DAD467DDD9AD56963F4B9F2C2CD861EBCE98C0FCE4E561F7DE269
69C79C9181C1399DA5D5F52C0AA959DD679F7D645EE9FDD1471F9D15C2944666
D4667594D29D5FF7DA2CC3906E10BABBC2F053DDF5FE666565C65D5CED6A8E0C
67504AA99B0DDFB0F6F965A3E5E5A111CAADD09976F5D6B67B7EEC8FA163AC2B
07C5EB7925CA0F38E000060F218A43493424807309C590463CF5C6326807EAAF
071E78E0ADB7DEAA9F6B71A5329F7DF6598284549049DD522D18934AB9085F6A
FB85175E208C7EC821877CE94B5FB241D31AAB3742DAD3D73B5AAF3786476A21
2C9CB3C9AA15CFBF393467572BDD95B4A39C0C8C34563664EC979AB2E54B639D
7931413937FF3545D58C74A854CBB87BC2583564EDC51A1969DD40288D84D260
48F5FFC3DD3DCFD647BA37DCE0B9A79F9DD9DB3BBC6E6D5A042B6035E72C2055
5D1C608612CD809ED7D4236954E44FCC10BBCDBB7D1A74A6A97562D41FB743FA
707DB7218A73F244B14CF7AFC372CB2DB710CB06EA6DF79AE4598C199DC627F6
63F27D3603EE2F89568E43E94F759E79452F2388E262CC72D14E9CD1DAECD61B
0981DB6FBF9D93821C70BFC95774DFD8F20B2F83ECC820F2BFB82680AFD859D6
187E108AD0ADE466C81123FA260B63E7459F03076C8B4AA16334A7C71F7FFC3D
F7DCF3D0430F1144F277744D8A21CA454B740971143BE6B6C5B4D368F1E0FD06
2B8FF8A31D345D8A189A395DF93EDE521BA62DEEE4EEA0271C73FACE29A79C42
AFCA100567A6D9D9EEF975E18517820222B9CA8D70A4AC023D062E6EF2B869F8
947A67CD5DB76AC59C39521E4DE9A6B95BEDF0E2132FECF6B10397AD1EEBEE9F
3BD848560F37AB5DBD9552688C0C5592D6BA7AE7AE73465EF8CF3B069E7B64F5
68E89CB55163DDC0EBB75F58EEEBD5CA120D9397A399BFEEBAEB3236C0D1726F
35D9ED6D7FF5D9CB3F79F4C99FE8EC94406FCDE9098F6765511B66F4FCCD5595
6ABD3CB46912D6A6616DA316CE3AE67BDFBCEFE2C796FDB8395A0A1DADC6686F
A80E74555E0AC8C64C7F846808E0189765A6D5985B22444158F33EC6AB29F9A8
CFA9233386041C373DAB29156427D8CB647B60E5645584B58E4B962E3DE1A413
35B20D66CD5EB57C7967487A4A9D3BB78667D52A61AC21D3B157DE818C95505E
3B5A2FA5A36802CD470E180C1DA194914F944B8D52184BD27AB3551F93F40F5A
575992CDB43C5C2ABD9836EB7DDD2BD7ADDB6CC182A71E7BBC9AF357B3218130
C59B416FA495BFF9CD6F3EF2C82364CEF6DD775F3997B126488AC6857E289815
9068D34BDEB89F5DC8AB7FFEFAAFFFFAEB5FFF7A8CC58AD9E3C9F0853C55CBA9
0475AD6994C563225898A01C7EC1BAE2E7E99FEA7FCEA1A3E05C0FD2D685D0CC
D2D35766FD1922D1CF68E4BEFB505903C153347FFEFCC71E7B2CC9997E34032E
A27AA5F2D9262C819952419E3FFDF72587FFE29A80D28110E5FD086FE990C804
00BEC9335B34A30328D482ACC200D010F9E646F27171D97437DC7003A167AA69
38FC7A4853F4513740FD3DF9098D0D5492834221CA40FA1898DE922DE8581B9D
677AF29791AC2117223020C10472D145172D59B2846789F725A9FCB4E8FA400C
D745CE93CE33B1B86DB7DD56CA8F4FCE3FFF7C5D1FAA51F7B8D0052923242B88
10B4B120DBCAB89AF675CCFEAF14926AE8EC0B8D8EB71F78CC7079E673AB0666
F675AF191C5937D248AA9DD55A67DA1A4B5AF55A29D9205D75D6617B1DBBEF7B
FBFB3AE76DBEED4FFFE317B367F5A6832F8E24354D17DB8048A86EAAB17DEA9A
5B3EF6E15D3699DDFB9B5FACECEA9D17BA5E1C5AD52835FA7AC2BAD124A49559
F5645532D655A90D572AA5E166AB3FA9EA26AB24ED7A9EBAF233B71DBF68FFDE
EE30341C162ED8CA3866C88B106A9A43702F3CEF8E3BEEF8E0830FC6B48E5E65
36128E4B884A20C1B6861C36A3FFFED55FFD9596D8AE619C12B467AD49D6FACA
73E527CEC1645D096B9DABD6ADDD74C1E6CBF2A4EB067337C8944152DD3CAD6F
DADB3363AC2E83AD3B2423215D9E730A759782344157C1C719F2E6C0B590943B
2BF5B4D568355B8D30D6CC5B1697C39A7268D493E134F46DB6E9EF9E7C5237EE
9B396370D51AFD24CD433DDADBD446117677CAC4D9784C316C7647DBBDFDE2E0
9B43A6D30B97B4E882D78AFA35EA2E3A680841B29ACE37948B8E8CA1C0B7B8A3
9FA959A02E06FA6283AF2D9F377D66B854B0C13372433FA1090253FEEAD64960
6C19F613F7708C012021A2B00DB94DC3C663BDFE8CB43C17A7401A31A84FDC17
6BD271EA0BEF7AD7BBFE5FF8041A16214B30A024006DE3C7B5C7321B8F3DF658
87D13D4D4095DCA939291A72E99A927DDACAFA449B9B76456C0E89608AB0DCBC
4253AFDD6FFB310E7A3A56137BACC6ED422FAC2F0352D2F841DCC7782C7E053E
2ACEADE94312E3B6356420C372C1624B0C193195AECFD136CD5487DC95866675
9B6DB679F8E1875D1B4996CF40054742A8A2401B4D0301ECA855E66DB8F1B265
CF967A67BD71B7DD57D62B3337DE3AAD74EE34F4B3E1D17AB5B3ABB327ABC36A
8E0ED54A69B5527EBEDE591A5DB3EEC5677A66CC7AF4D995DBEFB8D37BDFFE96
EE30BC6A246569B49A7A73DE79E75D7FFDF5D9F38EFDE294432F5EF9F49864DF
489851AE6E34D67C26949F9F550F2361EE48F262B5B479335D566ACD2975AE0E
E559A5FA8AEE99E9DAE5B58C07276C10663CD535B07083BE99CBD6FC4A0AC04D
8730149876A49BA337F102C500737B601C39798A5A381873F55BFAB6A2CE3115
39DB5C2D260CD0036A5689706A8F01C0052B95855CF28E026912369A3FFFB9E7
9F0BADB492946412F74A3E9692CDCAB5394DB908C99AC6B0166CCEACBED155EB
BAC2B826C81F2C73933A727EBA0C6394357CCFDEAF4D4ACF55931535299B99AB
0607578C8C567ABA2BB58EC1D5AB92BC6301BB2DA647764D865B7A784F225E63
EC80831B845289406AFFB8F2E6E5E0DF6318E8D65B6F4D630CCE9D6148A1688C
6AAF4E73482459479822388707806CB8309E1BB1ACD3A03059AC182F8BE5A7EB
EFB3CF3EDFFBDEF7F4500C78A79D7692DDF0AAC843948D198D6034A04D0BC957
3401787AFC9218B248E6ECCF70500C10D2AD4974E95ED363BDD29C06F52FAE09
E80D70E595579ABD0E9A013C71327BACBACECFB5D75E7BCC31C720979DFDE319
C0C0384F8039809B89C517EB0C002A71F90F1F0293004FA23902934B89B60B56
C3FA9AC005207108023E58DD82C664404A5CE5CBED603591BC5EB66C19349F7A
10FDF3A9A79E92EC5EB468D1F1C71F0F5511FB80DA9918F538E98B49D326C36E
E52434A306A27133FA50B45D6BDB52D3D534A6E98CBEEE50AE7C68EF7D87461B
63A132DA48FA67CD6D0C3CDB0A259660786430AB83EDA825A1554933CD97942B
2BD68CE8CB19FDEA63BFDF7EE1A6AB07EBCCED49279DA4E1FDF77FFFF77859F8
E8E3B75CF644A5F242EFF63F5A3DF6FA07FFF30B8343BB946B43CDCEB961DDF2
AC3B6F3AD2159E1D091FAA868792D09CB1E99B973FF5C0A61BCE7A6EED93A1B5
7DA3FE58D21AED0A332A330280716B74B3CE21ACF1C6CA45F763C785DA3401A6
09BC20209A10FD9A6190BE80BBF861DC15CEDC762EDBD677886A02D6FCE4273F
79DC71C7CDEA9BB16ACD9A9E997DAB57ADDA6ADB6DFF987B72E55AAD9CB63AC7
1A1B86A42FA4F342A5A3A3B66274A8B3AB9A8CD6BB0B9F20631E2D854A1A6A69
A6155AB9D390649F5724EF9FAB242B92D68B633A53A50B2FBEF4B4D3CFE8CC34
7D536E8254D9CCFED9403FE7CF9FAF05A298864EAE18D1FAA7B900E4B151811F
221419BB8B5FC57154433FA6DAA271B91FE84CFDEA6FFFF66FFFF33FFF537E33
FE3D395E2D90BD13F20ABBEFBEFB77BEF31D683C9018245739BCF07AC6E84C1F
D869E4929B4A119E25B9C81DF527C364A6479DFE7922D1C571DA63D07F029933
000748249AC907D9AD95C32BCFCC9327D0826A71DFF18E77FCFBBFFF3BC6DF54
7941AA2CC713DAAFD6634FE5131C7DF4D15FFFFAD7350B1C5100F560F9F106C8
EA60D611A82DE5FD55B0AF6DD3C508137F5F6B499C51D74728C4C07CCDFED2A5
4B8F3AEA285B01485E5D7F871D76904570E9A5978242F3DE0D13A24392D1546F
6116692F7A4890EAC41C7C00F562F870C8CF157E68889C41BE63056957DA126D
D27936A0DB2E2D76B10BB28C0F39F5D453172F5E1C0AB885FB54ECB2CB2EBBED
B6DB5468B3DECEEAD070D6D97C664FE7C0E0C8B1471E4A2AA2A3A70341D01893
88CFA443AB99A7EB6B1DCB9E797EED6063C156DBBEF8E28A9191E12D36DFE4A9
A79675768E17AB5F71C5159A583D3220A2879EFAC5F37F1CE9EC1C5D5B7A7855
79FEFDFF313BAD6DBBEC855F27B3FFEFD0EA376FBCC506032F0CCEEF9EF5AB5B
DF189A5B271DA574E489306F41D7400843BB0E27CB4275A077C6685FABF4ECCA
4CA083AD8A3B4FC0798716945970E491472E59B224669A6C8B0E3169EC1C2046
44FF5826EDAB4B2EB9E4E4934F36ED25C718650F4616E6060914631F62EAECA1
C1C11298A29EEEE1A1A1193367AE5DB326C30D65E5C461A35A673A3622FF607E
5FFF9A75ABA5DBE796136902A9E252481AA5ACEA583AA3D64A4A496D34698D24
ADBAB4429AAC4BD3E74373559E434E5B19A545AD4A5BD0023A92BE14020A9107
6CF319EC06416A36869387617DDC0476435AB42F250B357D5C3E8E7284A209B0
7E4B169D8D61E04688DAB9384D2AC74EB20CD56B42F2F7BCE73DDFFDEE775DA2
85CFF127519E311F0CF11F349F1E9CE0A1F1A9D330C1FD7922D16E16843DC0BE
6D9A8409D1B63628EA9F91B7708E4777A4D193D77D9AF50AFF0FB04316EE312D
8F29F8F5271D27E97CBC07ED92D7BFFEF5B21F01B739AD64C6B178A7C6A6076C
AB346D70EB09000332F408E6D85ED686B63FC8ABCD7B8A33C6981213C1368845
2491EBFD8CE7B1E77BE38D371E7AE8A18E59992C9EBC10EEADA58C154988AA67
DB5EF8D16D894D04505C5E170A3A1DE7EEFC20615A9FA0BBAB03777278787483
D9B356AE5CA57174D72AAB9B9DBA418000ABAF4FFF6D0D0E69D5BB4AEB86C7D2
5A476F68B464F0572BC990B675AD6BC905E75D7CF1C57A8ADB6FBF5D2209F34D
9AEFB213CF5BF9E27FCDE90B1B6DF8E6E5CD8E77EEF7A63169C9DA9B9A61F558
75DE8BC30B9F1F7CB652DBE0677FF8D663CB9FAECC19E95EB9D9F0B717AF1B4B
FA3BC3586983758DE59271957A662F13EE2011423CC74F811C379B7A589FC431
CE1887A2C08A5ECA21829C511828E9A0256B03E74132C3D29F7DF6D9341C0511
48DD1C05310C437B230B8EAF5EDDD79B37411BCD1A0074CFE81B92D552AB96EB
AD72ABB969DFCC6478A85A2A971A235DAD524F8E316D6655DC59E55835A37CEA
589B34D684AC5371BD15465BE5B5A1352497A2BFA7D94C870624A9935AB536D6
18EAEDEF1B19196A0C3775530D40228F2671FAA7BBB16A0636DA6823C235F00C
BA7134C939FB04EEB7F5B6B7BD4DBEEC4D37DD142248E2C4571B5F902B8A9A45
6F5E87014281F9D121D26EA47041B682F96B755368DA0E3CF0C03BEEB843DB92
D6750E0ABD9C8C715C35ADAFD14D64D75D77FDD5AF7EE57A607307FDC9AE242F
FF954C417461EE0A7FE1AD6F7DABBC25537A58CE00B07CA5647F48062210F675
9CA19CF4FB642BFFE29A00220A3D1EF24E537FD965979D7EFAE9FA4492E2FCF3
CF8FE3B01ABD7945F00701967150CD9065CF40EF6559530A0BB420441889D80E
62DE2194C6A271719DA77B5214E997BFFCE5C30F3F9C38B24EB5B623B4C3B66E
E21AD4A4685DE44BD1051B296FF6A850C0CBE26A6A282D75419D96F3CE3B4F33
33E93C1BB6AC67070561C915226D1767419C6433A46C9A9393C7DCB2BE5837DF
7AFBC11F3F5053DCDBD53D2029561BEEE9AA69808D964E7B323C9AEA4DEF8CEE
356B4766CC9AB7765596BCEC29A563AD46ABD23116CA192C265FFAEF7DEF7BAE
5A3AE9A4933A9B8F35D70CF557C2AC991B3FBDB2F9D3C79FCD7BAF94C2A8E664
C5F55FBB312D6F385C1F2A5566DEFEB57F1D1CDD72C582FEE537EFD7D337A3BC
2EA4B519EBD2A172B53FD5DF6BABDB103BBCAC4D5D4FE728D0A42852BDB9FEFA
EB8F39E618DAE6489D6841290F76DF12BB71E03D7C8C5D0862386912559E8F2F
5367C7D8C868AD52EDC9F7DEDAB56B36D92423633FFDDCB3BF70DD756BD6AD91
15D11C1AE9CF3ADA3437A874351BC3DD19A7907649D208CD56161FCA20B5C3A1
B23A480D86A1244F1824A11EAA2DFD4F6B4C3E47D2CC93BDAD66476765646C44
1FD7CAE306816B1DF04ACF3DF75CE92DD7C1B8A79B85D744F9A59D298D0BE5B2
4177D30764CCA5188A601A6516849558B566D477DAF1710B77F3F3B8FF84F736
76242D62B8E334387AE7097864B9C2123EB10B6E0C4F28921CAF963CB44CA06B
B739B4EDB5831039EBACB3241239AD2ED983B67D1ADF6BFAFB120630A1CB9FC4
566DB5D556E3013B9D04B9D8A63C455B4EFA4BAC5DE49D7166C83EEB5ED71BC7
29FB10D1C6BAB02D4E1CC1C34C60D1C97442B7E04334596D75C2AEB2E3FB311B
D2341525F13AC5AF36EFB8337F51BF1737585FB870A1C404B16364877E85C662
4ED079DE7CA624B24B08D4DD8068831DC97C90ED01F8A143A87B1911CCF1806C
84CA0077108A03A6B1F11B1FEC97B3ABDCB03EE67F0D791C86BD4B1B2F97E3C5
D549E8D471EEBFCEAE8191D1CEAEDEBBEEBD3BD4877AAB8D538F3DACD21C0EAD
E16D763B352DFD7CF9FDCF3C913CF2FF9DFDD0F09695A1C75FECEAD97AF5F0EF
FBFA37942FD41C2CFDE09FAEE96E75F78419734637FFAF7BDEDFECF8FF42E957
A5E1B995DA8BCDB19E5606A39F125BD57614BDB8714EDE0E25CD6343A444F544
18A710DF6AD761EFBB125E3FD7B6049063C47D5B74D12E1D3EBE4F876194EE99
A1979698E1614103F3C5C50430131FE638BA55CAB975097458F7BB2B0355F138
2586484D2341B802C7E78D6F7CA32E4B439EB478F9E992A894D745B0A168E6E1
445712714A23BB41B8D945B61163CBC900715A103B5F0D06046018D7411A58CD
60728108D2178E3BEE38B911F8CA0B162C80E885D31A530091ECA1FB10198836
45486D3662016E34A2EA98D2CC0389132C429456DCA6D0B3BAE5965B3EF4D043
AF54B2CB28BCF9E69BE5C780B74C2272FB57F44AF33630EE5B1ED34E8C1763F3
3D9CD9E90B9A267DC5B6274BE82C6B88A2F9F104B9401CAB01AD4514DEFC7164
26390621D2D59477B9DD311055398FB7DC728B9EC71C93D34368A79AA964FDDE
552EC1A7CBB16E21A9A16D014F211A8212D310DA1B9CA15FD99A46D4C59A8027
02CC40FA01AA3BFC7476B91EFFE8A38FBEFCF2CB6964666ABC5010B24A7F7FF1
8B5F8C7B1BB5098B693015D3CC03CB4494F9D8638F958920875DC62061476027
28A152D406D60E16C73863C329559A21F9EE0FBE5F09CD5A523F64BFBD1AA343
FD7D61CBB71D3663C69A994FCFFFC91FBF9EBEEEDA5F0FFC7CB3AE9ED0F1F4F0
EA6D3BFB57D5474BB530E3D16F7E28A4F37358FC4898D37FE80187DD76E52F1A
E9AF6774ECB07AF4771DDD6174F895ADEF549A80A0BF9EF780030E907380992F
4B59EB0B5FACC39213AF89440B79756B69FD7622719E89E596ACF9E31FFF2871
F0C4134F7046B8884CD42BAFBC123481D651C28B9F18DD60FEAE4935816CFC4B
2FBD1498A00EC52EBBECF2DBDFFE964A08AA6758C7242A259D6ADD6D5D69A234
18D93A787569F4726CCDF1E8364D40FACA8CE29A4C496DCDB0D42DA6031D25E3
429F1095B3F9D526F2DCE936E42E1A886D861AF350B9EA5BE6DA638F3DA66F6A
05DFF7BEF77DEB5BDFC282A10F0125A56465A1F5FFE8473FFAC31FFE50038307
CC87DA2C843C8B790D4076D8E38FE1B671F8913A32BE6076DB57B46FB7D9661B
F0E2E6A1712FE257741DB755D7CFB5251E7DF451891DC996A38E3A8A8E7B8943
F6EEB0414E63AA38B5152F35DFC66960868C27150BDF221490647200C0EFDC77
2CF6D1BCAEFA82B68E36319079D4B89C179D1F079A1C2C2228847D6AA01896D4
546AD327AACD788CCF70BC35E511D390DAE178BFF18BC7D750019310B5307C38
DEDCA10041593DE09C029D8AABCF89EDD2094F737EE28927CA854403B15E8E41
836F990A2FFC4A5FBA059012C3B7CC5F6666A7107117B3136C6BBCA4EDF4FDAE
EEC1E1B1FBBEF7FDE191A1230EF9785F67256D0C9F73CC25FFF49B27FB367A60
E6AA99DFF9E7EF3FBEFAF3A1F1D639E9666BD37A1A9E2A852DC6C26067A88D84
F7D466FF7A6C706D18DBB16BDEE3C3CF6FDDDBF79BE1B150ABCF2DF7AE1A583B
334956BD9CC7890F8C25757C5693885E82953580CFB28926DEDA871201E4E471
8BE34AC6A9B067DAA548E7B8100151A2C585DF549F4BD01C74D0415A624CDA98
1AAB8D7ABE4D13E8875AFA18B8EC326083D989BE42E83D152C2D893863EC19C7
CF159B177E33A94F001700C1DE382A6065690331CE37B43D176E935B55B71991
9A403D883EE771A820C1978A6D5910229A67A38FFC276C35A2F6FAA1FB97C432
1D87C6641B2640244A118ABEBF08B18D37DE586B8A228C67155343EFF5AB3F23
23ED54961E2D6E74F86744F559A9534E3945677CE9D2A56D4D64B3CBF9A8C7F8
01666AE2CBB23B9E3593D07184581854C2C4DA60D3A832D100AA0027783B7A24
BE668CAD9CC810C94FB430D4D04E83C79F280B62147FDB764C8A72360DF5C823
8FBCF6DA6B294FB78D1FD68F42F0092C25EED54318070912A2D21B9E8B1D1CF2
569764F04211826BEB8AA76BF27D1CCFA4E0284728C776EB3411B089E779E217
66E4EDAEE822A97F2E5AB4E8B6DB6E83C1D850719FEAB8FE05498A35373C3090
E3E8CBB77DF5CE175E5CFEF4534FF67656D356A3525FF7BBE72AC3CD27BA06FA
3AFB9FBFF1E6DF56E68E365F7831E96995C6B66A867ADA7AAAD6D71A5B3DA7AF
6BDD68732CED098D553B84D2EF3479D56CAF6EB8EC9950EE78BE35F6B24EC29F
D404EE4F27E1B2E79E7BDE73CF3D3A0B31FB6358BFAECA8CD6647490D471A6D1
CE255B88E416AE9204930581AF6906887860041C48A171F1A97C02CE23FD67D8
932C071D99F473B99577DC710729AE69D69DA3E7AE5378F0CEBD4DDC4E316423
D604140F69245B6CB105FDD35D10F0BAD7BDEE57BFFA5588ECFDD853E155295E
C42435C3F2A24E3EF9649D3ED2721C8A7815D8FF711D03B544BA9A070F5291D6
6088BB72D1A11383D23A8CAC0F1C366E46E21D1EB39423F1F506A882E3A8FC8A
E78AE12D7114F7E5BF40A813C2625BC659E597FFC2B6234363240E7633819624
44BD0E607422063D55AE398DFA18E358699601E7009E2572DDC67FA9E594D0DF
638F3DEEBBEF3E6D4AD82E61C2C228035FE5E49E215FB412B3FAD13F39218869
C9AC254B961C7BECB1EEAF129720BE4C1931BD2640BBB09B91BCCE94C4A567F2
5AE47095F3B6ECAF7FFDEBFFF99FFF1911109B21B15BCDFC4012C991A00590DE
C836B1DC7FED6B5FFBEB5FFFDAE62445CE9A81CD36DBEC98638EF9D4A73E4555
2D4C1E6DD189B4A01309936985692482D93260ECA1CA0FD59544743DBC08A9CB
CA90FED351BFFFFEFBC9D994F30667B5AEEE030F3E3C6D654EEE33CF3EAD71F6
95BB5F1C6CFCF1999FCFE9EA5FB3EE8FDFFCC6FF3DF198C3BE7AED2DCF8D2C4F
CA8DA60655EF96BF3736D2ECE808CDD1EE59B3179C72FA3E4B3EFBA9CED0FDE2
8ABE5618E89FD5B96A6045D2F8DF221D2C76F58CF41C85851FD304EF272DFA7A
B6F226A95A627D4D0FFBDEF7BE573A830E1C219202B168338F059482FAD5BEFB
EE7BF7DD776B8BEA9FDAFC5A4D5D41CEDF6F7EF39B90A36EBEFDED6FEBCA49DE
4B07BE7734415C6CD8B6452181883DE018758DA36C885A9C656D7BD90C77DDDC
44B6F336A367524DE044B10789835E5EBF3732C2A154B4F7887D0EFB049B6FBE
F9E38F3F6E53929DA6A730EB1F8D220089C1EBEEB49C5690A3A1A7D0CED47BB8
9031406390180247E757E7CE25E25A1D2AF24CDA8890D405F5277D5F9AE96B5F
FB1A1926D6F7F4D34FBFE28A2BDEF5AE777DEF7BDFC30E76537B84388FF34A77
A94D464645AFF5F0F2727E6DEBBBF7DE7BFFF8C73F3615028F26E7E0A28B2ECA
AA1C980E242C95B4346777CEB6ED650A33026A8058F046319100EC5BA6000C60
795EF39AD7B0E9D1254EA8C6C862AB19779B627323DF59F2B4A8A3732713DD4B
B2E6C0030F5CBC78F1F435BA713CB72DCB1A268B0E8110258F6FD8A28128A130
01B4037EF6B39FE1ECDBF621B4473AAB0DCFEE24049B5EEFB7DB6EBBDFFFFEF7
4E426A2DB404EC2114B33D2A8251963E0B162C905638E79C7326C6C1DBCC9089
EECBC417D121DC76CA7060ED264466D44D2874A7A41BED91F58C04F434DAACD8
7DE50B69121AF5D03F7BD6E1871D3967CE06799D7947A3B57ACDCAC1F99B2EF8
C52F1F6A350667F7D6FEF9875F5FBE7CB051DF36A9BDD01CEBA9CE783A1D9D3F
38F674ADB549A99C36926737EC7BC373AB1E0E61ED669BEE78C6B9071D7BE299
A1DE9F2493F3B04FCC18B7A53A637DC94E76515828CC491F36AEC69E7CF7BBDF
FDD39FFE94AF8143D7F683E1CE385D6F1E5FDF8D33436E99227AB027B431205A
A7CB376D6611A3A4078D099E4613B8F8D68D1B097F9349D627BBEDB69B16E84F
AEBBA310C4BECDB83E1150175BF1934687426E90D1CAD11A51E3A44729791730
29A67F68530649C189CBD5F42C4F3EF9A49CB6FDF6DBEFB2CB2ED39FCE3CF3CC
4B2EB904111CA2C0720CD3080584D418741415ED2838564EF5D9D87753745D47
DB7EAFBDF6FAE637BFA9BB7FFEF39F3FEBACB3C8DE6FBFFDF6DAE77AA3332BE3
C0F4797ADEB81C9D9160A5E958EDB2CB2E0F3CF0C09F57AFD006C7FAF3EA0C2C
1624C73442D418223A13E65801C80B6354A657382C1895BD06C83BEFEF52CC50
8079D08AAC07D008537751114A6D0BE29EE48CAE7CD04107DD7AEBADD2D53A72
0E9339EB6298309E2677018D931434CB930EDE964E1BA866AA8CB129316860EB
BEA3B83E46501858C2E4E254C68990B844DEFF4499E13D948AB6ABA65ED1F196
F4F9C10F7E8025E2760B0E17B87522F8165BEB26E4B073E633EC37D34804581C
1C94A48EDAA1DE367460CC9A12E359F59ABB41C6BD31B07658E6EFC7F73F50F3
BDDD0EDBAF185AB5E9CC9E271E7961D6C632B1970DAF7E78AC3E70C77DDF4B1A
A1D29AD9086B2AE9868DCAF36963E3903C1B9290B4BABABB1BA56A3AB866839E
BEA175236B6AADDE9034EBCDC9E3DD71BC3E162E610A4D000D0E3122B42F3890
B84903EB18F79920C9C61EF6B463D3B0C4DE4E6498A45C59562E486D0DF125D9
10328FDC1E032FDEC14F0785A78A0EA133CCBCADDF6EBDF5D692652C048F1037
2499BE733ABB0841C34F386EB17E8D53C71335C1C2850B39081FFDE847E5E3CA
8AD74824047FF7BBDFC9F69430C55C68A3078FD156962431DFBBE3A5D8A91A9E
6197A81997BFC56ACC5C0E21074AC22FBBF3CE3BCBE46AE5CDF2B81D150CC81F
6C2F7EA89153401E8A789D5B12317843639CFD769C163B980724EE24F90B2FCE
2B92E0EC3153338502D6380D0DC1A42FDDDD1DA8E080C2F838FEF8E351AE09FB
12A9040A8AB6F2D3E81CF43C009E0B2FBCF0BAEBAE7BECB1C75CA91F0A242261
561658328BC5731EC60FD3E6CC720875D234F5049D6356556D0252B20C185751
F7F5F273C7693A5420A69BEB372645464F8A22D5549C74D249575F7DB5F1E6F6
5A78041779315418EE2020B288E7503115EC1E84350709C161E9E3F09ACD0AA3
05C890E367906070228B58E7444D405228D601B16537D5E23251871D76D80D37
DCE07E15984E64C293A88F36B6155B420FAE9B66A66EAD9C6A8E9B69B5A4F1C8
746D2D5E7C9E3CD366C78285B3864AE9D870AD353C98AC5BFEF8687DF6F3CDBE
FB6E5BDAD1154687B392AA66DA15CAC3D5AA0ED2E8461BCE7DEEF917CBE9BC52
E70B756DC97A7F6F773A3834286530E9F84DFAE857FC68F112A309F07EF4A477
DE7927101497E6B2D024A5A8D18B91E03135055B0E81CB125B8012477688C3DE
AD3D4E5786A7795D282045675F626362524D70CD35D71C7BECB1C40D70D0F5FE
94534E59B26409C155500C31F9D2A4F3E6322B93DD8609CD41278288A6F20974
3BDD5A6A405B172C1CD7218AEB7602B6D8622FD64332E2DE8371E09A69213286
6876F81415689506D28F26B2603164D14B13840288D846711A4F888F7C6CFB7A
B96537A04B9CD5E774F01E779C37C41518F69F61CB87224664ECF89F811D22A5
67226E60E27E96AC83AF5B16948BFE59218F7CC9FCB14569A88F835F61FDDEB0
210A4A22A11076FCC9510B9F52667CC1820552922C615C340BE0D7E52720EA50
D42007583C0018A79F7EFAE5975F2E3D2FD701A71BB8370EA0C3F136D35C9D28
134FA613D619EC1F3D3D5D85A5AF59CB224292B4BA02C6A0CF27135A6AB446C7
465B212757E9EE19181AECEAC91C8534AFDE7C468EB96EA4F56B34B6DE6EBB47
FEF0876C026BE3A765BC19D348AEDED20085DCC61B6F9C09CAFCAF18AA3E6C56
57F80D68759DFF2BAFBCF2ED6F7FFBBFFFFBBF1B3425F313A27CFDCA12CD303B
A439664E529053526148E095240437628164468D336697B446DDEBD60D757549
138C2122F216EC61CEDCB92B5E7CB19A83BEB41FE40D69E337EAF59D76DEF97F
1E78A08213D66CF6F6F50DAC5B77C8C1874010AF61900FD720A98F931BCE69A4
109D5C9656FCC8238F94BC7BEB5BDFFAB39FFD0C4F4BDFD1939219E23B3C5DDC
8E4257D6AE90B94D51159FA01D99071F7BAD3E8919C2CA9AC90CB63B34929944
6B57B3BE8D56736474247B163D75BDBEF1A69B3E9B872E3B24BB8786E66FBEF9
D3CB9695CA890B79AC72D25C61190946FA0764378EA375462CE8B1A5B007D113
9C05833DAC0C90C2C81DD62E2D3AEB4ECCF186A2D300FB0A64DA79E79DF7E94F
7FBA55B43161F698222A31B133600470A502C7D3DC098CC186201932CB2FEB33
C06F8E10B485A4903FEE0F8ADD3D77EE5C0D438E8E569FAD08F9849B48F35FA6
C2DA85B470ECCD5820FAA65209DA429A014C617BF91671DAA8E42F4951389384
28C0149E9808F4698D793BFC219AC075D49EAB508017683162A413A920C0E5A8
01BA6D638B68BAB457750BFD332EE3685324A130296C682605D7E94BB5F75E09
6B4227096D3AB5BD8975EF05175CF0D9CF7E960DCD623BDB161BDAE9FA486400
2A7BECB1C757BEF2157DB2DD76DBFD219795D84414DD982357CF80A26257A199
51C8F00198F8856655FAED073FF8C1BBEEBACBF50D3C0B83D73692F7AAA9FCF8
C73F0E50C4111E26306B12D562D9E84F909A27CEA9F54C9736B25F6DB8F146CB
9E7EAA5C2A4B52D07EB04473E0D1D18C7BF2E9A767CE9E7DF8E1877FF9CB5F5E
BB7A25A665A60092902BAC2C44363C38627C144475D68813E1281C392C028ACE
C2FADD7DF7DB6FBF6F7CE31B34367AF4D147A9E3270F44F7349D900F7DE8439A
7637A00E459A9DA033E1291C6D0A1DD1BEADF1DE9C3D3927526BC30D37A03F73
230D9267B57C21D288425C6274F7DD77BFFFFEFBA514E76FBAA9C6A671683D5A
8DA696400B04F8952DAE07A739C9ADB7DE8A25EE4256B68A3E71968854F65E7B
EDF52FFFF22F3A9FF432E43A945C4853B2810F3DF4D06F7DEB5BF0136022C4D8
50DD54571E7F8AA8D1205F9BD199516A8F35EA3367CD7AFE85E7F3D07898357B
F6AA952BBBA47B0606FAE7CCD137572E5F3E63D62C69E5CB3FB7D4DDA9D86999
2C6E85EEAE9722661C01AAD25C81112263DF36531BE411BBD8C21A59AC097FED
6B5FFBDFFFFDDFAE7C8C53A06D3AC0250E9A2B0D80E1915A78DBDBDEF61FFFF1
1FA1E88A85CFA7EF6FBBEDB6B29D4DE1890AA17815A730CE45992C81BBC39318
CFAD7EEEBC08C340CE72609D5A43821BCD4837313DBE8EF3FBDEF73EA2B2FAB9
B6B724C6FBDFFFFEFBEEBB2F268F21518C1B44DC1209609334B6FA8917E15540
6C6ED4BF83BDCED2D94B4B724E2463B1DA246F7CAFA9CC730D5ECFFBCB5FFE92
24071E033A350E01A545658F0F2977E468F3CFB3CE3AEB339FF98CAEA021699F
9722AEC989A91DA319517B5CDF60F1F1F260A8E475C0741BE9ABDFFEF6B7C09C
AD000C8430A4578396EB20CD461DE39E7BEEA9B59195ED09F26DDAE2B3FC93E9
6609636C00263F064552F408B43FF89AD7BCC6690372772ED08DF14EB6826D6D
59B17945B1C47187F323245345B64F1959E048C8C0C04BF15648B0658F6793D6
CC909D6F7BFBDBB37CE9DA358417FB66CE2857AB2F3CFB6C4DCA6C7878F6061B
10C75F95D7F874F764915C870E25266A1DD5B1916CA577DB6DB77FFDD77FD587
B2CECE39E71C4CF2363B9181612F1349E0D887A25A1B4D63B081775EDC510B2B
CF612BDC2CA7B9305463FFCCA5553BEDB0F3FF3CF83F9572A5D16C6CB5E5561A
B00EE1B3CF3D9B26AD79397DBCE6B7A7B77750673B375E86060737DA78639D2E
29805A9E95C21E191B190D11ABA584B57C02ED3ACDAAD6514FF48FFFF88F0802
221B202CCDD841660534611BA881CC3C8034668FFA61F65528C2296EADCA8430
27681D10842C31FEECC69BCC7FCF7BDE73DF77FF49A3CDC2AC49902A06B2B99A
D45FA9D49FB72D1A1A581B474B0865341B2D34816EFA8E77BCE3073FF881DEC8
C5B9F9E69BDD413E0E8C50C668961E3D23AD8788C51913198AC88611DB7A4F6B
2688E9DB3A11C59A009333EE90C112C79C893AD1FA82D674EFBDF796B5C4AED3
CE5CB468D13EFBEC23DB5CA7BE14B53EE60B080A8DFC84134EB8F6DA6B2D253C
FF46D19065693340412E4DE44D61A874F80009CA0F012EC25F1D8AC80C3FC78E
C64972793FA2D647893D1F631FCCF3C3309C21D861871D7EF7BBDF7153493C8D
6AD75D77FDB77FFB37A2A371AA63A2D06F53F6B6EA74246912C7548488A98C16
725A746A98354E4979FABD1B3D05B7A6B6AB8E09816860DF8E7C84099E81E3CF
719C302D60FA291DEDD934F6A9B3E046DE1C71A2656135C5DC619E3B64EF9563
4CF144BFE42CE7FBC67EBA3390268C738B63972B7B243A24C71F7FFC75D75DA7
3F6946FA721E34C814B3A0445E5B1F72AA5BAC92B8342114D15B3C3B3C182B0C
5B040C236E87A90126055414E2DC7138D0F050B3D5DC222F6487C26C9CAA3709
9D5D5D235A983C4292AD711EDC9764ECC84D6C962AF3D10020CE98495105A180
C30E3B4C7631227E529FC034ABF8C8943EB2B381AB4334462D8C46ABB9E28463
223115D80EF8E3B4DFB2F2962E40E0BA9B47618D663FDC70DE869AF9ECC137DF
E289654F7475760D8F8C87803512E2E61CA45A47D7D8E868297726880B650FDB
DFDFD951957466D54CF1FF810F7C40BB5FE3D4271ACFF7BFFF7D363DF68B5647
F68E13B6AEB48020485B45B341E2C4BDA6350FB1A0A18B00C64D9CD6CBFF586A
7393714CE7CD9DF3DCF3CFA5456087E847A6841A753D57E639A6E9BC3C4CA72D
D591AB90500442CD2622D334A4810C279E99FE7BEAA9A75E73CD35F6FD6DA9B4
250F80A92405AF2466294E1B61135D961A5176BBE68DD434E54E6CE0890001E6
07B1A809D14FD8333022404AC189BBE5965B162F5E0C1E84CC01BA1907AB55F4
F36873F789CD82DC3795106FD29C7C9E101CFE81BE2C83ECB1C71EE349F93014
8C35640DCD3CAF275DBA74A94E3D95D8EC014C34DE1318604B3B695C2A5EAD82
D0DE9930261C1EFB56C18D8A5D4B7ED57941AC5BD31CF08971C36D42D26FACE0
D388B080EBBB5408E917A71E35090B172E945481CF2644E5DFA65AA0B6EEE9A7
9FB6FE7658652AB5E4C214624D2441F199C617113BC8506283B1780C8B15B3E1
A333F406BBD270782289783A5894D6786D993A0E00CF4C3A5B8343CEA2D90880
3824DAC6D86C088D0B7F628DAA379AC7471E792499822180B88A46A25BC3931C
3B31C48ED61F6D29E605224F95C5D3478774FE3798331740822EA2CD9AE5C99B
E394671A275D3957AD5C397FD34D316031528C9BCA7A8897324C141E1F1DC710
F76D3E81ED47A4B3E90D4251B40C265ADB02DDE62E5D98BA2C8DF6779AF754D9
7AEBADE5997A56B510920EFA3C07777501C2239268BFB8B7670621236067DA82
3003F6F6751AD60D1A21E4688D6DB6DDFEE1871E9ABBC1061AEDB379BAA23FE7
950AE9787C8F7A4B881249D9998589423CF2402122D2094585CA2EBBEC227FCE
69BA647D123A20403A72644A352169D1409B1D4B0B5FC484245B28920D0E6E64
5AA43EA299951C47C319DF59EBECB05F257747EE8FECC4471E7E78669E2A8FE3
FE8D1C815B4A4ACCADB696369BC6A9E7C2F76DCB69C7E52CB877A45B5947478D
DC3FD26D64102BCC2A9845B70D9F6896A6055F7F88020EC43F61093520D5F38F
660D79E5A02EEBFC6A8832BD56636EC8C56CB3994B05F521418C105166B27071
01B6076FEC32A631C68189CB8CA7884FB7F3341A338F46CEDFEE4B58BF515A1C
84E4FA7CA2F1B3C41ADED9679F0D9F075E6C4C791B7BCF13131231609D2DE1DA
9436BC8CAEC323F3B5CD36DB4C529E7C95C6AF69D77B040877D47F75D6A4A435
45FAB9213331F1866D778BDC58F270474FD7789E200E8121563872606FE15AA2
6E9058AD2EA1D9B9FDF6DBE10FD1970F38E00039F5CC1106720C90681B53EC5E
E8D6F67921D406CC4E501ED1693B1DE3D485AC495EF6A52F6B9BEA9869843436
78E73BDFF9C31FFE502BDA061DC10B7197E0B4E889A6EBE423CF6C4F7982BFFD
ED6F91D75876434323B9E53BDCD39D91FF8C8E8D66FEFEF050474F6D546B993F
3E11806C720732EEC9CF7DEE73279E78A2460B7D2919A18ECEAC4F8BCCC9240F
476416F1B8699949A24FE62FF0FB2C410C0F887D02377D456CB9BB833E7FC73B
DEF1A31FFD48C3D05F3515648C5D2BC4CE3671266E10D3A8F70B162C90699621
23ABDD0383034948240567F4CD58BB4E9FE445B0A379C5BF642B8CD61A1252A0
595FB0C582C79F785C932093EDB8E38FD3DDE5313CBEECE99979373A49C3FE1C
962AB9A937B56A2215E22374EDB5D702D3A6638C06103781B186764C83E0D8DF
FEEDDFDE7FFFFD780C36B8FC654011AE1A053EC05FE7CD9B2743415A04E72353
931DBD2C2EEE826EBD7ACDEA6AA55A4F4765AAC82D1D1C18E8A8758C33ACD43A
D6AC5B4BA84447A09A778824F65DAD758682553829E0D48D8C37AD1B91A7F585
7917030B49D496D7B598E6430D55FB5326828B579913375286A910E2779287A8
017080F171B3550123A99EF4B5AF7DAD4ECA0D37DC40D7DC187305B736CD5075
7D663E2D0880F1DEAC099CE50A05066FF3CD37D7C6439001858AB3050EBDB2C9
8904C264150AE683366E027D47CFAB23A6371A955302D8B6AE07A6A7ACBE70F1
C5176B75502A982FB120E2657C011E4C4C4D8AF642CD10A831D12C9ACC91A836
EED25819B455D71284777990C6A35B483EC88C78F0C107B1423C4E9F0E7CC17D
F6D947024DEBEBF229BE307FFE7C4D1D851ABA3854956D819C787795D6273F0E
EB03ED325B9ED02432252D00B9FC181C8B4613C3577D452D83064769F8873FFC
E19FFFFCE70F3DF490C5565AD4B8C6CB1026E017750BD9E6DAEE92597BEEB9E7
9D77DE89A5630669C3390C678C7B1187A8041C83C834BC7122CE91225787CB82
960B16050AB3C11013F4D8F22BE73F0C097650B3D524561E4A0D192A1DD59A1E
4F322E6461A1D03FB37F646C94C8FBBDF7DEFBFEF7BF3FB2AD4A84144A792224
4325E663EEEF1FEF3FEC9A007B8E936A021F95B8D112CF0EA096AAEF91FCC5FE
A3FC9292CBA468F3C99549CEEBA6D204C45E1AF5807091269004E44DA60B47D7
7575770E0F8D7476758C0C8F66BCC7B5BCDD7477A62DA406F21E36999CFAFA9D
5FFFE8473F2A537B46EEA74BE025B0DBCADDD1AE688D85C229D4E0B57DBDDF58
598C1AF4BDE4208483660E671393D093D0D44FE867D2066728E71DEDB5AFC0E9
D33F8E373A3FB88C84238606B3077C696F27A52C8193BD6B68BDAAD20152C91A
76B3552D67D2AAA32BCB76701C6EBBEDB6830F3EB860EB7B2EB05E189E059037
6D8D875E8957304888CFD896E9FA8502FCD325510E98A0F84178335738DF3C2C
E92897319A7B7CA226B0210CA74828A225188C268F33F339D45818F86EB36AF0
7E88788A4A45134AAE8F89CDD56AB9E724051C8AF23AD21BBAC599679E79FDF5
D76BB9E5A482D0D571D06F354E3D29142C0CE6E4934FBEF2CA2BC903B555AEA0
236FBDF55699A4DED5244E0884BAF42F76F7F17E0E3CF0C06F7CE31B0CC04D78
783436218937CA6635249D146DB90F7EF0835FFDEA57CDA01726F804067AB905
02F631FA1B20462862B6CC98DD05B4821BDAE83B700471049893F1DD9BAFD469
A79DA699D175D03D161AB1D3691DDC768826C91338DEE28C048C98F6E062AE3A
CA32ED8968ACFA39E97EC78E4254499B4EC0B98788975F3B46DAFEE8A38F9632
C7C443F497F2969031B93C2E703C18975F4A2EE8CBF616090E72BBB68CBCE192
CC42186FB154721571FC083DDD7D834383E3D25F4F97FB073293D35A5A971559
CDD47BAB5EDF74FEA64F3F350E22825EDB016BB648577756BF3E1AD783E4009B
C181B540F7A8AA8B4BB7DA5EEC63C27C566C863037C7B13DE3D1339F40D36384
C2CD8F6F614512F9959559FD39FEBA954BE75A87DCA0ECF15B23DD3D1D4383A3
956AD2A8A75DDD3993E058ABBF6FE69AB56BFA7AFBD60DACEBEDC9D398F94425
E50CC521BF6706EC78F8C8B9263095298621A7C2DBCCDC8D3E870E376B62B555
62CC4228DAA0C3D46DB47E29223B434FB856CB3473C524573A3B3A338468394F
B88554FE41169B2E6765604939CBF1C89D968B94C5F186874A851B8EE56E3685
52B9FA92751CD93A7D7D3D2833E36142D4196922A68EBD4DA434448584A48239
5FFC15C8905BF184A81D3706699B2CE085D0E75CB010C475632B849BDA22498B
8A8156D12A15B5E11631C616229BBEF8C52F1E71C4110EC7B1C7162F5E7CD555
57A1A19DD820A08A7D4A03033DD778FFE77259D2EDF8E38FDF79E79D1F78E001
B601A594F8673092126A0384465493BDED8816FD9A986D6482FD3052896E8D60
0FC6C1F45064B963BA21FC33E33526050E8522AC6D4D40A484C368D9E89DF0BE
F7BD4F3E2E19113345A3CBE31B79578422AC44B362199AADA27B04EA27D60448
4E07A088F66B036B6E2FBAE8A297600E06239BE52DE62728458CA4AC373BD285
18B286B41E6DD0A5F83531586F04882300867BA24BAD2D8C74264D6FBB387E4E
1244FA500F76F9E597B303A4B709B485A213850D0110602C06F113CE0C19AA38
5E69BBC33862D6D255052C337B9D3DE40EC671D8DAECB59EA572D118846DD1F6
5C4E31B5D989A1A0096360445135E0458B165D71C515182C388C567E311938FD
9E9804E43E302D8C20BE5989FA52C471674EBE25755A10A1E452723CD6B472D5
B85920E59185C85BCD18C29B4625DCD3BCDA82B94941E50654EC939FFCE42597
5C8216071005B880D16A18AC9D8C260CCC5060CFE34D1E9B93F8E9AC235AC429
7DE3DF71885DC4D4D697D4E1D734A22F65C0AC82057D9BE13F69122B14990000
21443BFD8C4024E0AE6084694EC9E083E32E3AC86B9C510FD841512AAB4D241C
A2349B4FB1D74E3F39E69863AEBDF6DAB85E37E60E88ED09E0822ECB37576E65
420798389A47E49A334EE9282E17462B179707AFF7B690401C2C59B2E4F4D34F
77D701842FE252CFF8EE77BFFBEFFFFEEF4F3DF55492D8F4714C8B3A1BE3BB08
B5E9BD2E45EF399B5969C10810A21E32F152A605ED8D06499794CB2EBBEC9C73
CE891DB289AFF8E7048B482B86A283824F9F21B9EE636854CB19679CB174E952
54AF31F4965D063E21EE40573309D44E7116B09380F38EEF51D7F11AB1134727
62B16E0A27D9381A3DCFAF89A0D81D3C93E5053A10591057BB58973A9D827988
B8844C4D13A46B920C490B9AAA302149C5EC68DB690C92FEFA891E8CB8B03B54
608EB9138E036DB823543081D54B8B4ED32E991947C2D46AF2610F39E410BE03
87ADBFCF4F5854DD0813D542907FC6505FEFAA52413AD46618C6600FFFD54684
A6DD9B23F634B7DF7EFB471E79C465356C8865CB96C1746DEE2330D70814FCFD
1809E7E735CBA34CBCA38E3AAA1435C3713420F3CBCA15D2D7BCE4198C6BBB22
F21BAF544C3035716B85084B132B45F7B6656CDAD01A36611F36378A0189DF2C
DA28B91E98A315C7DF90D4168BA843CDE4E73FFFF9C30F3FDC09246F096B1AAC
25D2D7566FE06E9DEE9A6629E3874D26031D7200350C4DB8CD4FDAD0D3293329
A84675478A9208937A9E3D06A20A7A0489090D98183A211DA682EF1B69131F4F
04822964744764AEB90330656475699BA18DC8458582883766EA4D22AA8C899A
C0EE29A009EAA462FABF56C1FD17727FEEE0830F9604E4E46AD107F217C294C8
15F306C1A5F6BC159EAB73436EDB41DBA7FD43C6487FD55D7EFFFBDFC73EA821
8EC9045A24EF589F147E05B5DAF4B5C449444E85D2D5CF4F39E5942F7CE10BA4
859D9501C8605A8E52C44F73F2C927CBFE83AD47DF2164241187872A597FD34D
371D76D861C8615D2AA63A0E45B137BC3E9A8DACED920B4A590013CCC5E7337E
0047AF6C084CFAB2751017CBD935333CDC51B671B152AD822771BB2E2BDB5812
1904C66CBA61005DDDF585B7BCE52D3FFCE10F39F6E0976293E48E3BEED86FBF
FD600906C109798B130FFC13290F43990640CD7AABE843690DE707B447157322
926347235AF424059DD154E2A06DDFC49A004BD0A902E41A400B9D96BDF6DAEB
EEBBEFD6D2EA43976B5A9CDD75D75D1FFEF087895A62597B0C31E48E63CC99D4
5DDC89A9B43EFDDCF8866E36B3F6B9F5B16AA54AF8785C7C34EADEF1AD88BD7C
7A425DEF461F3C669845C7EF2163F99EF7BCE7A73FFD29B93E07D6CB053BFA97
BEF4A5830E3A0895309EF6587FB1CC7D96165D28F0A5DC4C31761DDC03A32DF1
EE6809C598DE996D154C13C5C7F44B4F865CCB77F6D9675F73CD359A52085ABC
D6941D68436A48407126BE30A8B5D53FF6B18F61A8E901650E6B7A217674996B
5B0831440E191B00F742871D15A883A99BDADD84FEC4609E1D77DC51E6972EA8
EF13916057B44D881F1FBCAC5CB7B7BDED6DDFFDEE77755FCA7A1120E60DE576
E830DDE5E69B6F3EE28823F485DD77DFFDE73FFFB91E04DDC019BCE8A28B162F
5ECC83A0243403B20EA5622FBCF042668C0B3A5DCC0FC1C519B5614D10D62FD1
8A1F81600BD69ED3246F7CE31B7FF4A31F4D73A2DB9C42EF43F742604F1E7DF4
D1F2831DC106986B7619278DF012CCC767EA1DCCFF10396D9A675DBFAD10671C
57ED1D601B2444DD253D62CB23843831FA90BB69A170AE5D436020813B2EC5AD
741D6A888FBDF71FD0111EE0CA2BAF3CEBACB33028DA08DC3D83CE256AF6B527
306D205DE8CD5F66CCD6E79A085D0DB35D6B06864116B4BC45C77C1C2332E2CA
520371D3A6028DD397494EB6D9D5F36951F08519D5883AB55A8E7091893B6C62
163114D12156CAD69CB53D6B8F73AD75D146A1925EFFD484E89F74FB81419E8B
F0442EADB4207044C2E932373D371F4E52109DEBF03FF0C003DE395867561553
812BDA5E4C722C28B19550CF887240D30CD5EA5F1F82532030A80797C7F6F0C3
0FE32D69F2B53A0E033A046A9560896F881AEFF9103FB55C340931FAD6F95EBC
1CB6C4C488FF9F5CD0892FFFD0540D2EA4025FCF604CEA3E5565937EFB8637BC
E197BFFCE59E7BEE79EFBDF73AC11672F748D7A13C1B0563DFDA8FDC2A085A28
6ED0D7627E30542CA49EDCCBD25347CC4DE727729A4EDC09D89D1C9F071F7C10
CDCD23CBEC95F9AFC7A4623C297A476BF9A4066411BB3444B3F1894F7C02C650
2E2BD5E502BD361104AECC0B41EE8D0D568EBAF43021B8B07154D37E9EA370AE
8522BBA0F7DA9C14D34DBABE939E7AE7143179B587352D7273F96BDCA9C67417
1AF379E79D27DD269B40B77EFAE9A7E324B9C538EFDD6F3114FD89172C58F0C8
238F68A85A44DD2E715A159B97C87569FDF67EB126306AD598BFB0BEADE7B0BB
AC926DB7DDF6273FF909AE3D6A40BB107D535ABFDB5F7C7E208AD18B7DE64DEC
3DEA54953E01D81EF74B41C6C9E4D1C695B090F920D54AE4CABB199881C58196
01D4B9DB21386B64A7D2E9656D3256884700BDAEFDBACB2EBBC8BB04CB456C94
6570C546ABA02D7416DDB6C0CBD704A5824899F0BDCD706C2BF894F4F81A924E
D139E79C034ED71C76F7DC738F4483850BCDCEECC1F08CDC820008593502A9EE
3F1122549C46224DF0EB5FFF9A1C662C52BD615CFA388D4FC0AFE20094AB671D
3335D0904FB4F4501A5C7DF5D58B162D42258340D5AF6EBCF146C90B1B0AB4A8
24F0552EBA04DBAFC7D8345C9563E39026DA48DF916CD57E36F1AD0D110736DB
C2CA7E9C57A409E2661BBAAC9E8BB027415E3060E5A265B9CF4E9B7C490BB210
2046F20C64715348C138E3224A6A2D8DDCB7730C2AA93F7FC9D2279668D787DE
4D2E4A076468AF313698CA516FB2364D106B4DF60CCE9FF6705BB98056D00DC2
9CEDD3B4481C697E8C3DA505AC1B095090A5DFD2945422C5A40BD661ACBEFFEA
07744F3A33C22613B812084DC3A60CCE4A72EF831FFCE0E5975F3E8DA66FDB12
69440F1772B6050DDBF51658CC3E5CD67FDABDB68D506058D877DF7DF73FFCC3
3FE0C8121AD2C21D77DC7137DC70837E8890B7EB6F9E9284888A39D65DE445E8
60A28462AEB553CF3DF75CD9EC1AAEBC122423E72A2E8B9754922D463532A149
E4A30C072D5E5C6866E168CF2EE4A1435D194A45969919318912C74FE3D197A5
8477DD7557ED57A78F6C01918DA1A4882B487C132524A669796A43C608164B0A
3DECA1871ECA352529324282DC8371DE4C8627F340DED59571CEA0B46DA0B07E
1A6AAA575B7428AEACD116D4C835C364086CA4A779E5A45610E9BCCD36DBC892
D50F499F26050D43887250B68243918E7368F2FAEBAFD7361A6F7117110C8C6F
E224CB3FBFB87C79678EFDD02DAB79826770DD409CD161BD2C62267D4C075ED9
E50E825160A5277AF4D14735C9DA5D18134C2C54E100459C70D31B5D445FD314
E94F92AD74E50D79E82629EA66B823107BDD57F6C1BEFBEECB7808513A91532E
DAC74BF138B58EAE226E46F4D65990F2FA3D20C3CB8E0EB1A5B540BA9AC60FE6
F2D4534F95B62364CCAE8B0919E39CBCC58DBB68988C361449635D99FA9B33CE
38E3820B2E2095355E211F99653406E7C81058437FD06027149979D31213BC72
8C51C70DC1CA5FDBF243B14F003384C6C3A85CDFA05503EEEC1A371421EB889B
6E563556168B27564206C58108A0F2C0B00E4E04DF8C13B3A6BA69AECF815F8A
3AF25A3FE15B0358D27DB15DE21E9613354188B80F90D7D89DDAAE1448850224
C6A974ED3AFB8D2B98AF9B53C3F078705A41A445B9BB3E34F05A1FD20F391471
F53DF6D8E3DBDFFE761222E65B6D740DC2BD1D26DDC13E03471D75D417BEF085
B07E4B190AD6296C611C071F7CB08C11F4415BB7E8894693FE79CC31C7C89A33
FE0CDE151223DEF1F18BA40A604AFBBF10B6E85962CE19824E95F53B0C3B77E4
DC038A4ABFB5942788AC0B12A78E0FAD83E6488AB468DEC9EE47211BD7C5C9B4
DA0B7F56C698424D7B4BE85748D9C030D8C03738386E17A1F38CB505E6DAE49D
5415C4358AB48AD5D5F4DF1830D3B670E56AC5649099AD4DEE2107E0978B86EF
F687A6890E794EC0A85813F8B4639A983AD7B85B7EEED010162E916B94504CE6
EED3CE1C3A18A89F6B0F13E1D4F59D3432DEC60208B9E3E8991386EE7418234F
C214E6FF343E018D28ECF3F1A11C5C092CD7372505B687BF9A443A599FE59F84
304161891863726C602613BA48968BFE2D084DE2AB9220A416ADD1D3A2EA886C
B68E986B865B1123695C843455742896AADCDD15003EF5BA8E49C91C6E0AEB63
96AEB9E69A134F3C114F9729620030326912E283E06DD0860B60CFD8770F51AB
12BB806DFB19CDDD56393C8D85E77D1E26707183856D144DC09024B6C0084282
044582EB2910FD76E6F465178B407022917EDA69A7C96A97906C83BDA1C37491
134E38E1B2CB2E1B17405A69F9F83BEDB4D33FFDD33FC9AC7687F4892852BC4E
503D7AA36F6A8FEA5C115D89E92D5DCBAADB3BB314724B5F6EBB0667051B4F4D
A96004F3B4828489A199E67589BBC1385181D79FE4456444F089A81A6B4C6C01
3BA82D7BA389938038FAE8A36FBBED361319528A45CD3015868CD9A428EE6CDC
165D4112F198385BCDA2ADA635013EDA2B4291B28F991F3D05A1701F8C187FE6
C01AB4F504073C8D86023B7BF6B18F7DEC2B5FF98A134A1240706F00DA691514
7EA1704D3217BB94D4C7C6BAB547070793822D352BA50EE378B050B0825B084E
7A421CC6F1AE480AB0907782F37B6C2AFEE97D6582332699DF1A5DEA0727F273
D249275D71C515AE5DDF7AEBAD1F7AE8A150245AAD00C879B68A4E189CC338F3
6CA7CA278587F5FA8629A24353CD43BA7E7758AC4283119816EC7D6B26BF8FD1
D80E7CE1AC58EEE04F68EAA0E8C19E35F709AC3EBA979114508122EE594D9C7E
CD8C5C8ACF7EF6B32649E687082956C111AD897CFA6DD1210D921E679C29068F
FDEB56485E1494EEA73EF529B9E9341075CE8C363821420420CA1094CCA13DC8
581F1014417F9039435CD8A20A51FBC2B854CDE15FD65DBFA2CE792A4D5F8ABA
E4C6E10157ED59AAB8E60BC560D8AEFE79C00107DC74D34D717D1C726C9C18A6
782E0B3AFE84C5CCD3817E2485694AA2977C764C421286C488E25804B93567B7
318ECE3AEB2CED065CC2498FBA8965B8A6CE216E0B32C8D91BC60025AABE4C8C
486B06D91CB4E6B6B89B45BB38B092C0220914B8D8D82D8D4204D82A15CD5AE9
531A93AF79B1A9D1D06E7695475A947D1A260C0F22556F249CBDC6362BD2025D
67A9818585294AEB2558F0B424D61694DBA0B7C214F903B62CB52A9602AD8230
CAA9BFB6A03CE243A3D5B0ED3CC59928FD5CCE10FE7E5CEA6CA18621EC9A1749
CF471E79C40906B0982869026EC48E911A7A4C902A80E249BC4B22138827CCC2
B3C4E9B8B42853079B180AC8470C3943BEDB5A34773C45D7B83846C2585B932C
CD565FC3192E551AD58E50190D834925B41AA1BFBB6FA8BEAED63167CD504728
3D33B327748E740E8F964B616C755F3D24D530DA2A77F6A64375DD7E5EF7CC81
A1D563A1D1DBD3FFE2E0F0F6BBECF8FB877F13EA4DB9A5A5566560681D68664D
820606A0CBD8D6892FF7FF0911119B03BBC8B5B4A02423E0C9EC51EC62DA1807
3430B4F19FFCCD381F4E749B9889793E6C2633E1FC37293AE549891E7AE8A148
10EB2DCE23FE25F4994077F0AA652F2E5AB4E8F2CB2FD7BA7096193C42805593
44D6E9D09725A9DDC0DDE968A390D9E7F8C1EC497EC2AE606E5B05FBD09E7BEE
79E38D3786C299331EDF87C5E971C054AFD67E8651C69906C3A34D82522A5837
5C6B6641D15653094619773FC94B6869023A952581F4E3FC1E78E0815FFBDAD7
5C8F825474031F0D9835CD524A210FEF800B0659CF20489912A97425B4EF67C4
05BBDCC58D1335013003C2D0A83B6C8A52699C998BAFC598277D5943321EC6C2
FA4B5FFA921C1972771CE3B803AD2EAB19D47BA8DFC0594F0CCE96D627A90F51
E13E3BD2AE37F785458E25D1F479011CFC39FDF4D3972E5DEA16CD1C30AC0C7D
D99C9AB68BBFFEF5AF7FE4231FF182B9600D167E0BC46432063D7F18EB6F2D99
0E1E85249A374D29E10B1209F89BCDA85B4888BC602772992BE7C65962EE8524
62B9811568A8FADADE7BEF7DD75D77C988FEC31FFEE0AA542CF4B8158915F677
BEF39DBDF6DACB6DE9B055694EA25922BA15F3F0D86137E06776FE7AF4D147ED
18B11094A71AF916972B1B298F46E1C15D0896A5E33A2BBDB5DEFAD058524942
877E9C0CAD190AF57252A9A78DAE39B3375CBDF2F14B967CE2B4C59FDCF4753B
3EF5C707DF76F07E9DD5CE952FAEDA7CC3CDBF75DD1743A319D2FC0CAFC903D3
A9ACE6D6576EFFF289271EBF72C59AAE4E99414D87D74A052B78DC807EE20BCE
3B769D010B9A6742AC4C2980E63DF6D8E3BEFBEE8B03C7683B8C18AC5A5220EC
D536CA1653152545650CB4DE243CF06291C85A71C8AE817582E9D095AFBAEAAA
534F3D1515651E345D7FFFFDF7BFF7DE7B43CE7FE560E676DB6DA743CDB162F3
EBEE1FFAD08724AA0C167094C951D3982A06D5620FCFD5649CE8D87372B1A71C
7A5D90100A789052C43FC17EE0A18E3CF2C85B6EB9658B2DB67855F633FCA613
B36213318A805C31DEF5432998A4E8360CC6EF6FFEE66FEEBEFB6EEF7947B426
DD3C84FB9CFFB0C58038D23E3CFFFCF3B564F64D4D4297848847C84C8771D6DE
A87C82B3CEA61AD481C8F0F7DBE417A82F2873312B4855DB2C85C092E8B6399F
BDD88E7F618AD26FDDE2CCB84C3DB09650B3F6FBDFFF1EEC071E653C18F35598
9E3E2D10EB684193F5B3AE386B218A783A996CC7595FD611A5EC252EBC34AD3F
0BE3D1E29411E03B2F7F2126C8E95BE9BAD06F2A4C11100292313288162E5CF8
E0830F6AF381290652652D8B0341FD08A6A57150060EB2F46DCCAF3153555C27
8C172CE547779110D5F4BBA74A8CCD0F514B482D8D8E9C7C5BFE9946C51C71FA
C1EFE3E3ADD9D3F19034915A92CED35E8717C48215F63DC265715DB4CD14762C
9B79DCF10DD53463016C04A9BF0E19FDAD9056435AEB6ACD1BEED2591AD145DF
F8F6F70D97075795566CFE9A6D9E5F99052E767DEDEBFFE7D7BFD961C1C2BE5A
ADA75CBAFA9473F4C55277576B6864ABF99B3FFEC813A114D252F98AABAE3AEB
B4D371736156D0C849694C8314201547C8D160364C4888989C32D1A54C0DE96C
41889A6272534E9CFE0A8B975E406FD10A1C402C36C25F7641E2A5216082BDE2
881CCD0D015C002A058B0167A7D15F2E5B6B0B5CD0FA8930B26C4A6D0C9D087B
09B10EC03F6063300F1057E01C1841E0048FFB373021FAD321871C72DD75D739
1443FC20A6348E8DB9FFFD7E46FBC6668D1FC708469F7436645A5049863C3C03
D37E2818A741A96CB3CD36127106A74C7C115D94C57CE5955762621A2106F218
3A2F5DDCB0DA7161C5A7FA879CA3871F7ED8602CBC3C4CC2246A5A8BAD814CE7
4333994CAA091C4EE1524EADB057ECC39A1E968524F4C676C4888B217A7A1EC8
E8A94D6F16EDD2901A7A90BFFBBBBFBBEDB6DBE2702D217B5FA15C34AD462B30
C266D12982E0264A4BFF949C95C54DC024E64F36475E4CFF62221A142494B3AD
9CC5C86DB263DDAE2587613FE4694C3D1405A5B1DC8F67D2841034BD623753ED
295D2B23F1FEFBEF7FF2C9278DF49786B03E609BF2D4A4B958BBD89F43F46091
E9706A7F9B98DA478ECC157AD1413052B8FEA70B23F54F6D62E927FD0AB24273
C248B2EB797529BDE120C53A8F179BB854F081832ED775E4577DFBDBDF2664A4
9994D5A34B71593BF8C6591AA6ED5A07836A92B15AA5ABB4C1E6B31E7FEC898C
89AE2ED7A0D2D33BA339501BEE7F6ADB83E7AF2C6DB566E59CFE4A6B76756874
F59ABE5D5EAFA9D648DEFE96372F7FFAE98DE6CC9C37A367664F7757BDB7ABD1
3866BF8F77D5437D9D9CA7D9CB57ADAC74D71A4363EEED1C26C42D27BE580B1D
75EC27E670871D7638E8A0832EBEF8E2185BD9466A822747BD24B5236DAC443A
2CE87277F2B1631AF270B396491240A3A5851C7E8CED2DEB24CD1B3D9C11675E
4D930240194BE339EEB5E5965BCA00C23642078CE30B8A1EDDEEE086D149B025
6BF05714BBC4EC1706AAF27292996505A7EE183A817E8EA137B6532C243038EC
6EF7F6AAEC67933CC6A72FFE84DEB1081942F1DB6FBFFD11471C71C619679074
24EE129BA4DEB713EB33E26D00C2C59E8714894C5570103EBC8047D94BE39986
72D1ED4B8B21674772448338F1C413972C59C2E82558755DAEC2BE692BBF4273
7A534ED4043AA5679E79E6D9679F2D512555D6C66F054C82F4E6073EF081DB6F
BF3D1491B298658CB41253E0C4200B83754C211BDB1AD329B6294291F197B4C5
5B0C45C6863435EEB30B0B51A19A267D1F1A45D40347913320178C41EA221AB0
E46FEC6543086AE3CE63768E119D0AF827E4CC10547EC5D5AD6D98A21085CBE2
3A2FDBECEEF685BC33802FC99B26923A8B539D8EE41A430C0D1144A11452C173
A0CF0DD7C1F3D017425E0949602A44580E50BF9CE1B88C2B29D8C871FE90D404
799D156845D4434EBD8422476D0E099B02A61BF2619308B33D885963FCB85701
BF36B330466AFD1BF5BCF6CDDBFFDB0F7F5419286FD4B7F133EB9E6BE877BDE1
AF4E99FF8B81A74375A372E3CDB3462BA515CFBE66C136CB72F35CA2AD3E3ABC
E376DBB446D6CD9BD537323C90B666BC66ABCDCA6B567DF8EDFB2563A19A7494
3ACA23F5A1BEEE7113877EBC44A2CBEBF7148B5F60E15C19448C38C644D82695
190138845E6FA1C82119BA73F2C927DF70C30D9AF937BCE10DFACECF7EF6336E
213975CC31C75C70C105761C11FA318F6428228106B3C554953EBF3292E41330
ED30E4105932F810CBC3C34B8B0240B2D3F8F78E37D852C6D3D522EA87139D63
54A0CC146D423AED70AC082559FD84C2A92543A689D209752A940A2AB23564BC
F8A7197BFE97FB39AC0F94B0E0061B4612186B18772DE69B33FBBABB3AC26FAF
5BBB5BC6547902C221A42109E492CE5CBA74A9565C4FA10F891DB5D524273CA7
D9BA613036BF8AEB57BFFCE52F1F77DC716E4A83F8C66B7359F9549A20444D0B
8E3DF6585D4A0FA3670671EC6C891E128AB4984A2944C1194B227385B6E1A228
1A42ED372774F446C4ECB6DB6E4FE6AFB855B2C57747D16791083EB2898AE550
806DF0841CA772EAC9940CFACE9BDEF4261D3CB742433941CA24CD2A4B3606EF
E3255C76D9657233F513CDAD556F980CC56B6003CE10B78ECB9E4D1E675033AD
1734DB3C780CA525D014F7CDF08DB440ECBF72C163CEA1323B1B11003237C82F
3A07C47FE2E4EB01657A1019A3DEC7268F1EFCE8A38F36657FDC80C89AC06140
347A396257D5F7DD1D97026C6D714DBB642E6A00BC84DD4D8EF74B4DA3C28CB1
64F5BC85735E7C6C456FB3B316AA2B9275C9C6A176C0FC66CFD395AED0D99839
F2C74DFB93058DB1E6686B6893991BEA61B525240436DD64A3CE72DADB5959B8
60F36679E6DA157F9CDBD19CDFB5E147DE7BE8EA6734B7CD5A4733A45536B0A6
FDF39FFFBCA433057D6D3663FCC2463366C68C8D669C75D2BEAD7ACB4C41800B
AD1A6FBAE9A6430E39C4EBCB22721E6FBCF146AA64D0EB5CED273FF9C95FFFF5
5F87095CC2A1A0A9D7D4C50C2B8462E0F542D7724269DE109F5C8FC188C950E4
D560990D39C59E1E96B0093E41DBFC7897C674F4487CA301DDB88D426BF34DF1
65BEE600144F170355FFF7FB1978BA49947D8499F934E27075B6DF594C3F5729
EA304819D079E79D77FCF1C7C728FFB6976306E42ACCB18890210665C112978C
24B6404F3FFDF43BEEB8439F9A08DA681F4D10941AC6CF3AD480369BC6274045
DBD8844DC8A91E385B00B61311A28C8BB3CDC4190A0988D3D803EB6D37EF459C
D96B6EABDDE0134A821D118A6323AEFE4576A4056B0D1AD810EC10F5930B79A8
1466F338AF40B1052977FD9CA60844459907821EB817DE769FF9CC67CE3AEB2C
4FDDA47506FE532C2ED9E264380CA3326F705A90AD6B0733C298F1D16839E78A
58D3182310D39371607474F521C1199428D37EDA69A75D7DF5D5906779DDDD89
9EE0926B3B30D0F47379C4975E7A69581F8219229B0B85E7C826378DCD8578B4
2EF0892D893819C6C38EEB92191BAC185A1E4AA123E9AA8E760D86E174FEF0BC
0F6CB466FBD1D18757858D251D43EDC5FE1D37DEE3A9A7D66EB2D5ECCA5A1DEE
74467FBFD6BDA35ADE68EEECB191B55B6EB1C5D870326B76A33EF4DCE88AD1E3
DE7F729030A955870656360BE14E67E04F7EF2939214C0FE263DC984E98D396E
B3FEDC1B8EA66C5C137463C8CD381B5E206AC8226056F321F6204DBC2DBC88B9
EB22102899CC20D6C1EEFF1C2257953D66449FBC0D1AF032E7871D76D86DB7DD
E6A004C370B716538B7FFAD39F968E9454750575DB9CC47512AC9A44F345175D
24DB54D2495796B5EA9C84014E2E48D63C68B321E56C1E395784D9B769DE5550
1777CCE47FB99F21D89F14471327365CA6079F20AB468539351CBAF5CE3BEFFC
D0430F317B86D44FE5535E72C925175E78214C1BC652936320B28A7967143E4B
AC2F8C2FA7DE697F906939FCF0C3BFF8C52F8622A12111E62EA9DA76C67259CF
EB9FB69AC3143E414C5EC6D2B2E7084D683AF44FD0EE718A92C788C5C192254B
CE3DF75C5237C473DCE1D38C954E677903C579275355B3D7C79B10ACDFF5C5E2
C3A0668B42D7E587822ECA959C0ECC8588EBDC7422A8BD66C115BC78F1E2CB2F
BF9CBD188A20C611471C71EDB5D772665C94DB56671017BC90FD835CC1615CD7
31781A0D7B48737E4A7DC7F538E5A28B7D0C6D262C03BF550C81F511F5566684
6C26360FEBE58576192450137D59C71E6D47151891E5134F3CF1AAABAE72349F
97FFC9F89382C4DB82CFC184F1CE3F450F169B0870178628B9152F13D72F37D3
99F3672E7F61555775667DA8D2E81A4BDEDB99BCA1515EB72AEDE96F74374273
A0323ABBBC6CBBD9AD8DE7CD4E43D78C15ABD66CB3CD765B6DB3757D74644E7F
6FB5926C326F83DA50524F9FE9E81CE82ECD58FD68F9843D8FBD60F1394B979C
3BDC2A39FFA9611C7CF0C1D75D771DDA68D293CCC9922891CE08110D7D52506F
E96A8B162DBAE5965B74E2B410781B6941CEE1089BBDFC50043742C1298D856B
38D3FEFBEF7FEBADB76201B818CD3134369B8BD1E2120123D9B1DF3186CA11DD
AC49DAF982990B62FC37B034FC0982D7935258C7C69C7B4E90C00BEBF7B26D3B
C548092684302938281B9A36D45C31F7AAEC67E98FA4E05477CA9D909419A4CF
3FFFFCA54B971248E0BC3B76A4319C70C2093A14309869E44812276FA6AAD5C7
2728150D394CB41CA2C032FA8CD219FD55DF97384A0C2303F3AB21D2E9D8956C
2C273FE301E2E6823EBA53D9383ECFB8637A1EBD4773021F2E15AD8E8C599ECA
56D2C2436EE54C0E46906164BAA6CC901B6EB881B026765F356F36B26EED9A4A
B972E08107DEF38F599AD14B4EA83DCE78B7BD185E8CCD90E6D71BCAF3080E12
22B3C09D98E6D54B568F4C1827A900C81BC3C048682110A7D14C7686DEE5B704
A6622B586BF4A10F7DE8CE3BEF74659929CB3B2BD5B5EBD62E3A71D18D37DFBC
E6FF67ED3DC02D2BCBB3E17795DD4F9BDE1866863A54412C28F99078998089D1
A0A18894DF51902245AA74104601214A110820214014810405D1608C9718EBA7
3475F2C1506660FACC99397DF7B5D67FBFEB3EEBE63DFB9C33F9727D6EBDE6DA
ECB3F75AEF7ACB53EFE77E868702A7284F9B4378277DEE4DECEEE43B24EC4CD8
72B709F3A02795B5280D8423017FD6CB4887A83E85AF35A99D4B5A1B93852CD9
9E9E7CB9189E5B1786673FFAE8A31F78E0016E00CB593BD37A0070DCAAB56A2E
CCAD38EDD4EF7DEF7B24EA61004484ECAEABA192E06E138CE4213EBAA281A17A
C1371FD8DFCCEA9AD90C460EF9DFAD8186E931C54AA5DE9F98B170D7C2AE0BDA
1FDCDA6786776CDF73D785EF3F68BF2D6B5E3960B75DE77597F326194A92C15A
A1BF156C8F76F4F435E7B6CDEE23734E3DF2335E3E196DD5E17318CFF7DAF17B
DFF9AEE77FFF52336A55CAB6CE86C29AF1168A33D53D51070B259264C41861DA
6D581C189465740775D4093955B19E6484CB6429B9CCA960909A0453AACD4CB2
66BC932D3CAD084F813255EA63FC918F7CE4DBDFFE3609CEE45B18C7F3E6F845
83AA8189A56A27928EC05612AD936F463CDB6E2C6BB220324ED9709CB657C144
913149357A7F92FD0C6949978E915B1773411F82C12B7145504BD926806962DF
659E77675BF1525C81F1062F23BF125E71CA79E3D37148A43156B0717C7E5863
C5D439D90BA82D99CFF19CCA722EA1EA2088FFC16808AA715DF50E09CE243B17
9810346D50D21E40F1B033916A9B27BFA00608D66421357CC3F3CF3F9F51303E
249D0C3C1E9C869B6FBE99C8687BD8520361468F6DADE519EF984F1EFFE28B2F
C2DB72F5BC9735919F72FC7A0F9F7AFDFAF57852E81B18656A21243A5257A374
D494EACC70B4B4C7E5C40897C5C00EB58BB87CC9404208C41D77DC018F154F07
C30AB29EE929FC2754CB99679E09C79077E7CEB3157983437112978AA5D3CF3C
13AEFAF0E80896005FC6A528867CA79F9771C22C7EF622C88159BEBFFBBBBF7B
E28927A8ABF062F5B84E971BBFD2FAD2E8E3A24389E2BD82AA6ADD2577844785
6380ED8C23D74E9B10D0ABA5DD80AFDD72CB2D175D74118557ABD1C4FFBA4AE5
715A9E42FE431FFAD05B6FBD4584ABC2683C33C247AADE076AB6EE9B7CB91C8F
56BD85B3E2839746A52037D66EF58DCC58BEB656EFAAB707F2B34CD034B9B7FE
7C71654E6EAC366FFE9CC48BF7DE6FF9E25D17EE18DC3677DE9C52A9F0D6D631
BF15148382976B4766A83532140E272B2FBCCE5BDF34F9B0D855A98D8DB51BCD
7C1036A3B61706713BEAA8D461BF7866E6F1A70B2EB8001E30F5AE4A85950DE6
79C60F21F4D7AC59C34EB6C41AB92C7824F872A9504C56EECE88073E87ED89F9
240684502B698229E5293F175C47711E4D3565C57BDEF39EE79E7B4E8D97A9BD
A45A1407977F26E8A7C9CA77A67CF94EC73D3ED7A5975EEAF6DEEA005E7B13D9
1D4C166825C006EAEAC9279F544A86F5377FC2FDCC6A3582B679CA0E38E0803F
FCE10F7C6AAC1AFC094C3E3636A34F726844CDC013210D21E8973484F2F9CCF6
4DE76BBA4813165D426F2D59B28491A8F17A02555431EA2299F88E77BCE3A597
5E32599B8E1B6FBC116E291503DD2E8A92830F3E1806293C9D294740E425678A
7017D21E901B92B7C35FBFF4A52F417C63583BF109A8C70402234F3D932D26F3
5B71710C0F73A7647277A56B746CB410E65AEDD6AC99B34C18D033A5B4ED4800
4C795F62C2940FA0123259D522539DF470B1489C493309002A714FA828BD6976
4F75250277986AE52FB9E4921B6EB8015FA031CE2DA57A056932712EB17C1A1A
42C732B00D382B63D5B1D9736C7577BDD910E84D9B49BC75FC4F9D587EC8680C
6E81C190DC543B847CB4DC8B3A3CFC1319DBE3ACC31A46CE0824B71907C9803E
E31E2C1457DD934943196E0526E14F1C3923218C296396E1EDC5519B8FE939BC
ED5421CA12EB79958AB030BE46139A202C16DAB5FAEC43F6A92E9D5935EDB0DA
6A079562A55E58F852A350A99706F24977B955361BDFB5DFAEA506FC8C7269F9
FE0774CF9AB1EBEECBEAED68F5ABAFCEAEEC1E0E6FEF6D8E553C6FA8564FBA8A
C519F9FF7AF5A5073F75079B60D79A8DF156A029D484F952BC81FE86BF484F4E
8102D67F3022CC4210173824C494F6C995575E8913C4683E1685F48ED869871F
7EF84F7EF213952FB84C732E2F102D308E6A279A40E9689346B1045B50B501D1
35C4346BAA494DCFE0890C231DBA246BF1A4003D6F319D44F332E264FC040254
187F166FBAE25B1ACB6577D079E40C30F6CBC14037D4D2D79F643F4BFE709E61
B890DBA79D75C16CA42F05C488BC8AD2BE78AAF2F1B2DE7914114CA731D4490B
58915EB7E674CA7983F8229B2CBD6D3D9738593DFA1D4CB0104F42A24AF2CAB9
201339264A1E92494210B1E9564E0A9F816C6A72577C9B2C0FC99D3AE575AEBD
F65ACC028997F1F37BEFBDF794534E61C2872C8018335346F2A498191F1C1828
168ACDC6F865692FF1CCD0C8F2774A082A8C10F79C9C1893DA3EDC2B500CF019
556D38E56C2459EB2B82A9794894B86E679DE45460C1E00683572E25C6B7BEF5
AD934E3A49D56DAC5A52F188CA6AF02F0C1CDBC6CB7854C09044F00CAAF59A5B
684A77D0FDB9AA22E8EF2BE62B9B942916525A42FD4300B90FE8399418126AC4
0E6230F48AD82FD064947CCAA970C7B300CAA4C5D8C71C730C660CD7217837CE
9AF40A7362E773D0E2D02AA5D2D66D5BF3B9BC9732E2A926880E78EC341BE14B
E45F453F8C02AFE52571D29CF781F78CF6E61B4914C6A66CE6EF187C2D3FBF5D
D9FBE581EA32D3FD46C9AB245B172D195BBCFB92A5A1F1F7D973CF5DE72F2C15
72D4CDAFC5854ADCDFE70D5782AE755B5B8D7CD760B4CD1487FEF9B86F045152
AFDA092FF7F48ED6AB5E62DAAD569846CFB1462CA450A717B695A7B676C1FE44
BB33482DBADFE5CB97BFFCF2CB6410C10BB6141C62653BF180BBEFBEFB6BAFBD
261CB371D87BB8A5F11398A53C984ACB898866CAB3EC391DAB5C6A6B93B145E9
16847EE0899805757D024587A451DA59EB4DC57FA63C8F91D3AE47B5A8262B89
571598EB0774E02CE423EA3BEAE887D9FBCA57BEF2A7DACFF83ED697725515B8
10778A23511AA8B522440D79B44C0AE20AB2F69104B9C21EC5AF9813F29C2E93
26C3DCB38E55C9A18E1745376786F3A00E1FE393E3F641A4C52D1C924BB0C708
0F9509930C2A6F217673272CAC8494DD77DF7D10611A37A92E4961846975ABCC
A67CB97D8FF9244AB21F71C411BFF8C52F34664C19B4026699D33D6B866D5057
1D1BF53D0B3EC9974B14C13212D9E07E273C1EB498F8D4A436A4E69748723BA8
749C1C57FAD031E4CE935013E48934AE0CB926595B445E9338332E0DBEC09D81
9F7CF8C31F7EE69967589D60528C390B8CDDD24AD38EC651A729843936097BF5
25594DA98B94704343843CBBAC292C0771AB9998D83053D542B36E8B6740AD75
445E82CFB54032095D2654E64578473EE9AF7FFD6B1A5978407E3E9EB13466C1
FC055B36DBAFCD9E357BCBF6FEC58B17E316D4D65EC630415D2B6B54FC1FF879
29CC57FDD8CC2ECD78CF816326EDC08C096F15C2D2E0586393C91F9C3FF8D966
B3686A03B37ACBF3AB27618E766CDD74C2311F9F35BBA75A1DE99DD9F5FADAD7
E705B30B8591D81B6E9AF25A4C89D7B7EECDD5BDA5C6BF7EE1B64ABE12E1609B
10173729255D18270A7F90DB8E96292787101A763BE12E65040FA3A52660781D
1BF2831FFC20763EC308F4B0D9C60EFFAA42556BC14417A50F3E6101A3385C19
9562A2CED504DEA4161AFC5C81668A5A061219EE6789BEE849B86A2E71AFC95A
C4B0B85D6C310C647780C83B5E8C72E0EE3004EFB9E71E6A26EE1641C25C5B5E
D003A901A1BA59D749440CC51759F4FF24FB39CC5A1373C002404ABE437F7335
393F6E42D864FDB7B9AC2B56AC8063076D217C916E87EFE387071D74D08F7FFC
636DF829E78DCE077E8547C6A5F0ABE38E3BEEE1871FD62A8F3760E3C293794D
E00A2D6787B326FFDA957DD38D80478ED0208C1B3B9B9B987829FC89C06A8AD7
9DDB02C6716F29A76840B1B48FC9998EBE2B769D8686ED2CF76FCB85A969DC1A
8F309A4C4F8AF56CCAFB7283F2F8A9CB072EC83EC6F40D99B62222A2E33ADA52
5C634CE9F1C71FFFED6F7FBBA3C04FE28F9F53FAF3AF24A2F8C217BEA0DE17B4
8519EEC7C6553B0121FF884FC094626CDB366FEEEEEAB64D5A1AF5C00F20E678
472D2E7D2C2EA83FB17D101F5094EE5466AB56AD72FD3055D57778D37AA9E81A
1BFA91471EC1D3611E98A3A3027305071B3FA913BAC938CF2116F1BC04FF3088
4403054F5A1D1D6BB69AEFD8FF006CB00D1B37044E05B8498318ACF79115AC24
C1B88CF34CB7971FCB1BFFE06585DD16B4ABF556A3698AB9B85DCD57AAADB165
89BF098B975FF47CD808E2EA48FDDEBC81182FE74CB3F18D271F2ECCEE7A65F3
9BA3517D8FAEB9B56864CDD6B7B635DA03F55C5FF7C26447757EA178DFB5D799
AD43855692F372A3A6852BE762AF1CF949D9CA14D843D833B49D4F3FFDF4BBEF
BE5BB2C3ADC3320E57A5100A9887FDF6DBEFA5975E524DAC1A28F2F1D59D4DE4
B2AE90750BF1581F204D2044409235539ABCAC54544956A5CC5FA9D451DCC89F
FEF4A75F78E10568F124239253FE8CB81A2969A1B74D96419DF23CF2E4329642
497AEDB5D7C2AD1173A79BE99529A334861E842126EA0FEE3DC6F4FF84FB9907
8D7DCEB1BED8C9309B3EF5A94F3DF1C413D40A3AB9C4E3184771D2CF203406F2
0D7BC0C57CE32790E33FFDE94F594446065652F809C339F9E5E2BE4C5AB8CE1E
8BE3FB81A29056EDB1C71EFBE8A38F92AB44B41B8431715E048F314EB6C72578
99FC5280929B153BE3CE3BEF64E899A60D5D01EE21EAF6E93401E3981A123F21
9E0C033BEBACB3E0D9317C4C54C09A356BF0F943FFF4E0B1C71D3B7BC64C5B5F
3732DC9512D81A8706990C74D3F56426719004933C3BA1D43192952B57623B12
21E02288DDAD3919E0412DE267CD25A4565DD23D33510D0BB5255A957DF7DDF7
AFFFFAAFBFFAD5AF72DBB148909635C40AE60413572E95ABB5EA9CB9B615EDC8
D8A89C44C6D6285F64DC09F2E84E02B9577965B75CE38E3BEE209BD5E493C3C2
4BF6B3350E2701EE423C89CE956BBABA0FCEAA3186CEA914CF3EFBECEBAFBF3E
CC5EEC4B35363AFAD8A38F1D77EC3126CD8850D3B38EDF458E6357B341AEE790
F7D96769B77AFDC25018F51DF59EE19EB0588BA21A8E72E8F983C9C0C272DF60
9CCCA88FEC28CE6C7415FE4FFFF3A5726292D883D9E9E70BF566F3BC1B56BEBE
7573EF82F95D8DA859339B37F78F997ACD4F211CA37EA15E88B66FFCC53F3F91
1F6AC012AEE73DEB1334A24A62C69C9A4446D25987C8F7B45865B0334BA9D88B
0B70A04F4F2B84F64A94354C75E9C7291319B2A039CF7010298B45B2E656E474
444D3BB034425E421BFDF18F7F547337C22B556C2CC75D14E8D2042AFA3BF0C0
0321C8789A20F52013B973A63C8F0C2C4B86FA591BC40EFFDBD5047C2388A388
2E1873A3F86264E9861B6EB8FCF2CBFF24FB995A41A0127F2243304F2B578DEE
02058B404126D3A6500918B30B27A314C2E34BC177B0124C396F02CB2928C43B
AA7B8AA7A831CC13DC58A619B12BBA8D0A68DD9A4FB9843BC9F0A8D9375D303F
6D668411D05190C714653DF03883935F44CAB3E6851127FC561E25D3B6A2CFE5
4FC66D1C9C964A17A343D6F4F0C74F91A66FB7DD76833C7DFAE9A7A7BCAFEC23
39E0DA64DC52780A32B9AAF9498726E09652148E36027E78D965975D74D145BA
14815842ACBA411EE5DB1540A052D4DA2BA0E70AD37146A920E3E384F115B53D
073E81A78613FABBDFFD8E3B4F65B772A85DBA8E242B85D731E0F3326CEACE18
F7A2A26D0266F869A308FCF5BCF3CE83EE140BA100634986FDF5B2EE78828824
59D70721C775E402CF8F93381F8478BA30085B49AC0EA9C2ADEFBEFBEE586518
A7D4E2B2AFED249BB82F0A07FD66CFD17F369C54F351CE6FB41BDDF9A4D65B29
6F4BC6BA43AC58657470DBEBAD575BA616FFD9A717BFFA5FAFD6075A85766968
47A331D8BCE7D1EFAE59B7F13771BF3F5C18DB8493D234DD3B46E2C1309811D5
FB76CDFB8F5FF1E54213ABD04E7ACA51BDEA457E4F648653D1A4DE236A9F2936
66933934507E50B7949B6EB89FDC3EC6A996126882348E784658782FBFFCB25B
04236CA897150F1F71C411BFFAD5AF845D9E4E13B8E2D5CBAA76A0BDF0F3679E
79063F219BACDB2FC1ADC2491C7269AD2F594CC8E6CBF15F72C925B0E7768286
1439BC688EF8435E5CE2BB03B5E1CA749A35E487370E7B18BB71A828F7FF713F
271950D52DF87733F6AEAEC2368006BAE69A6BD42DC0E5F231194482507B5D81
CA95B916715BED447E12D242039AA17E575C786EE311F5C072954C471F1FE1D0
194FD0C2BC1D6F9A98A06794864D0429B34E3DF5D46F7FFBDB83030310CD9882
9151BB89C3F424337CA1782E5D10118988D41B6A0DC6296109260BDEA9BD9110
086E6A051721484E285A3E234B88992B53999514A15BD1A3D9608AF5C20BCF27
1880F3363808210E93BF554CF121B3665A92C866AB3977CEDCADDBB6CE9C3173
FB80B5D3E1A9E06A548DB4AAE85A3151C13A78EE6937702FF4B7F60721804C73
0919E96E2F6D7DFCBB64C9124C17D5B0C9BA20703E19B5834C6793106E77A5B0
A4E085F5C627679C71C6EDB7DF6E176E6444F685483E60D3AD5FBF9E4FC77E67
0C50AAC3A8C91245720A19DD167989C96A0029F544CCC944BD68DF5DF22B9325
42498449B795139B648545E4C42593819B18EB3233467B070AEF307EAF658EEB
090B71908CB49B7EEEF07CC5AB265B93E6F06EEDF91B9F5DDDBB6BB2F7D1F317
EC5870E33F3C33AF111DF1E707FEA667BD5917F76DEB7AF765678C353636EBED
7AAD1DB5ECAD7381F14C2B4EA09C663D7FC303734ADD5BEB23C5382996BB06A3
9AD788CC54003385B0244CD5C2850BE19AA202DE507970A2DC9A09CC39330198
6D8598F139B6192BCC295FB8C35D222F063A602590829FC3E071D05950BB63D9
2B9209534A2279C61D2117B7DFA412DDB409D84E874E39943A6B1D18CC119247
A4E5EAA4C213A14A059386135CAC1DEBAB795F3CD739E79C035780EA53901E99
1AA4DBC190945710691281464AF28B558CB62FAFE06564361D785657045310E9
D00938A7ED21103F1D97F14B25F12CAC6F7F7F2ECD19D8B4104E284E41ABB5DF
FEFBAF82979606DCE0EC7775778FC24BAB8CB362B0D3F21B6FBC01778D49110C
C0D2FB738EF6D9679F2F7EF18BA79C720A0B2544DE4DFB4B7C06AA4272230C5E
D623694A4D807F19FC828CC0BAF2645AD84430CE0A1941F4A7117C6BB4C4D1A2
342E8CC1616AF6DF7FFFA79E7A8A52927B45BCD966A24FD4613270C7487B33B0
2E3676EE48710D528642C03DF2C823D4DB8A2A08D12F1B59F461975E6AF19DA9
0886C5EDA7A1F9EDC562BED568DBE2A01DDBEFFFE6FD30E50606074AC552AD5E
DB67DF7D5F7FFD75C510D5CB421B45BC5D8C990A9BA10A3E824618B593FD8E67
5496D53561B40484C0AAB49876045D0A2ED097BEF425218085B76118CA4F99F1
B9E29ABA2BAEB80256AA443F7117EC0C831FE23B0F3EF820361259B4882C20C7
9698BDA9E72874B8403C81CCA44D0E0FCA1F5552874BE0C2C0F186305FC908E5
8A05223CEDB4D3BEFBDDEFC212247129AB700BA6AB51189DFBC19E516F386A98
7C0C931D06A7A90D984A5F172CFFE6487D91B77CFBF3C35E6F7B9FA3F7F8ED8D
CF6CCF75CD894C756CD5A2D3FE7CF80F23C97F45BB7DF63868EA3068E70BCD5C
3E365EAE15959BED4A3B82BDB9FDE55B1FE9098BC351BD109B5CB134EAB5CB91
5F6B35BD491588F2C64C56556E3296A1238F3CF2A73FFD29E7B0836EAB63F595
44650BCF8F7EF4A3BFFDED6F313F2E470B2787F3A9303DD34BC26163183093A9
84BC8CF6913A983FE79ACA2F9FBCFD3A3401AECC6809A3BB5C445C9CED166834
E03B279E78224E22634AF4EAE44F73C06A961538CDA275AC5CD7470217C79F94
9FB82066F2FBDFFF3E3EBFEEBAEBCE3FFF7CEE67EE4C55AB314A83F7B82F06F3
A94F7DCAA48138D5D8D2B1A02989CB8A079081567A00536A022F6B22CF6A384E
3E4F1966F26FFEE66F60251B8753D2B541F165D203DBA736090E6A3ED5438424
5114E3D61FFEF0877FFCE31F6FDCB001B214C2A1064111D8FA155E47DC186EBF
1A3B63AE82E28CE3513FFFF9CFC34DD3E4724CD4190A6B1A2728E606E93AB602
D3002A2CA4E76E8DFAFEED506B9EF1129310679DCFE561447FF4631FFBE52F7F
49861C78F4D05D2E56952F25840516A6D4661512DB4249E5321E85FDB4EFBEFB
BEF2CA2B4CC672C10287769F3B952639450FE6081BE5CA2BAFA4899A64140EE6
ED9E0D7032180484EB035BC39289CEEC9BB565EB967466EDA3F1A1EC4948E36F
2C2CA439C62DE2428919FBD6E093ACB5ACB8252825D5902FCEDA494E1954159E
9A8DC2E988A8391F7B1AD3A337595F5F3E2904EBA5E94B7C35D2BEE4B2679C9A
A754EDDB5C27C6C5AA13C2CC1BD180C0BF4C0BF3AF34D93A2A0AD5F9920242D5
B07A52156118A79539360CCE89CB9FA1D0B0B622F51C63323857E79F79C915B7
5D1C2FAC4140CF5B5082453F3C5A0F0A6646CEAEE9986F4686CD8C60F6C08B75
936BFEAFB3FEE2675FFCFE4060666032F2EB3F70D171BFFFC1AA91971BBBFD7F
9F186E0C15FCB8E0B7FDA4D18CA3A6976BE7CA7158EC29F9AFDFF15877BE3CE2
4715D8158157F3DA9524578BDE56782E3847B84C7A818953938809C7DE161397
22EF248F634D59EC90EF3262899F28A08417AB820E3DF4509C3293315011BCA4
DD887F7FF2939F1C7EF8E1325155094CC3DFCFE8E2DFFDEE7743CDD0AE22B078
279A00C790E96B5A24D42B7229F0271E40425AC990E1675DF9C4214AAE0885B2
19DBE1F1649D265759659E82B7C8CC67670BFC8965F9DCFC449A48F50659F30F
6D459727436DB5385DC2BCA9644F699BC99A60F26975EBFE781C38CF849F3292
418541BD0E296FFD42CFCC9D37CFDAD6D80069B62C4C0386D5B1B1F90B1658CE
70FC3CE3D3B4C663FDED0630B829AE0375883FC125BAE79E7B6C11B1D8B789B4
C12C271907963895942E27CF09275A79122585CC449FC038C8198595D4980D3A
2A31198B5C5A13542C585C87F13DCE3B5791B24C6D6C5945E992D0054EC75457
277594530B71C1091553B9C9B21D181884889752C532C1882B5021B93A40728A
B627C39AF839D69EAE8CDA0F305A259641423CF973F6ED8354B55655D3C650BA
525CA94D82351A855458877E205E789E3179636257571492E5851DF14D49494D
8E106C1CA708B32888B963D8A7090FEEA2B3680332304DBFE1DA6BAFBDFCF2CB
2BE90B9B9E5B9FB87526FFDD3C878C7738286C2AC743454F02F346674B9BC735
E455B749A784D139E5B469EB89A64D382817F42203D62D633669F2C0520234BD
286CECF317BB6D6D6FDC3E5CEF9A018959181A6CCC2C87D5C176D0ED55FDA4A7
5D1EF87DB57741E5C607AFFDDC0117D40353689A28D7FF89CB4EFDD1233FAA6F
ACEE7EDA07B6E7927CAB94AB77F963611CB5DAB9E1A43C9C94AAA5F61E6FDDF3
DD52506C1683EE9637D6A8B7BC76A1EDB58309DC885A3B5939F4A8281166CD9A
75DE79E7C1289135A09E5F8CAA992C07CBA9E3CF313938A158D0952B5732062D
4272D12450D7D2DAC05DB09F6120737E1854A46942A79C611C26DEB9FF692026
4EA3AA9D68028C878FC3251335349D7E76D7B8FDF6DB4518C75D8A2F60B9D9BD
CBA49DE994FCE7D6C5E2629C6CC5A1FA2785A1DCE24437B6C6BA7DA6E8F15CB0
7B70903106FC099326FFB223F5681C6E707C190383C024E888F34978249D839D
44873412A24589FDC5E958B162058E95C95C67997A148678EAE5CB97BFFAEAAB
445DEB522C9F64883B5F2841865827208B0BD93DDFD73734B8439010B7530B56
FC1FFEE11F6C1334712A2559B106B590FBFCD454B404199114AC48B6AADC5233
D1456058030FF9FAEBAF9F7DF6D977DF7D378D8EC0F3E107D070A62618379FB3
29730397AC8B93EDC0757599095CC89DCB844595460D7FFAE9A73FF8E0836497
15085A892C575BE098E12E0C6ABBCFA24D2031C7FDA7D437CFE77DF7DD87F9E5
4A2B0778F5D557DF72CB2DB8A3FCFAF17ED39532B437B4792BB3144AAC6FA8D5
C582D7CEDA992A48AAEDA5789D5074AE4A66A2FE8C33CEB8F3CE3BD952839B46
ABA62C9108339856A2D097F3C4CDC05DCBF7244C1790CC4B89BDA01E2EB8E002
DAF8DCB898107C08D7EA80030E80D855B08E8314EEC08D6EBB7C47EE8B0BA12A
7CAD9A1BD7FED8C73EF68D6F7C23C9E0ED221CE55E82322633078D231C3F9CF9
3933176C1BDA64CA668F0FCCDF54DF5C4F4C313405BF38D0ACE71BF9DE193D55
6F241E88ABAB5A0BE7CEB8E9DE2FF744B9F77FE01325D377F98D970F26F547EE
BBBFEE0F76FD65F7681F9EA7AFDC9ADFD59A9B6B553C180FF1682BA9E7E3CAC6
077E60EB38F25E975FACD6EB719814DB5E2BF03BD480043A5D162F23D9C69211
128A0717DBB3F0029861124F9A2CAFE876FB62192DA5392F485B5E49662FA3B1
22472F7384E49D3CF9E4939F7CF249D63A312583DD48234C7DB5F09DDB6EBB4D
3B0AA375CBD727BF846E12C5A94492A0102CA767C010B7A65ABAEBAEBBB0B5F0
A45FFDEA5789198539A5F40984F221871C02EF84AE673BEB412B1B4E614F5C9C
ECF7BC69478B0217D787F75FFBDAD7B075F9D4EAB488537CC51557B0598DC9FC
547A154CA5B84DAB266B02CA43C1C479EEA40F088F66C193DBB25BA11796CD2B
34AA7F29AB71C13DF75AFEEAEAD5B3E7CCC1F537A56980BE94DD2F178E77EDC5
65B91918A6934E1A2F12C1CF202FE039C26D7CE18517785D9C1C8C1B261B0F15
6D7F2FA5C9A637401B900928EEDDC946815BE5B4FFFEFB3FF7DC73E3B875FCEB
F99C6228003F4580047E10E6738A45B20253320BE381EE952B40952074142951
376CD8C03A350E18862A5785839754D501A08B6DB2BA01CA56668128732910E9
1DF3D46524D8E3A1D80EE1552C17EAD4A069CACEB60FADD7172E5AB46DCB56EE
3CAC0ACF15110BE90A98729A2BB6DA0B7F4AAB79E3A6C503B05DADBB95B9D558
5EC0D039FB57F018BB72D3CB2A62185893A7427809E324F80EF4162C9120E3B5
C691F8E31FFF6826B5D57EEAA9A760B241DCE3DF279E78422DD1651E32EA42F7
C53DE42249E553B02286DC1BCC46F0E8BA91469E16C1636046601DF186CD1BB0
0730B18C8DD2033369BF5C5761F84EA77233A92086C55C3433878646FCD08BBD
68E961F336265BF27D264C72F5ED2D7F9129548BCDAA198BEB5E2DC86FAA3436
D40E7CFFC1977DED93FFF9F397FD70269EE7A1FBBF35F6C65B957796ABFB8C25
73D30860648276A5D05818561707F5451E4E7AE18D6D8F3DDB1C1B6B844921B1
A44349684A6DBFE11BD727700169B031D914841167BABFEE2370C26927AA0537
63B69C4966EC71C2598DE139EC610CCBA87F3D4439842C89D878E2082FC10F71
3B1637D1F2A35455F882679F52520CE73BF1091415A091CE0B2A0648CD2DE343
94F8ACFF60045258172508F18657C67FEEB5D75E3096C5FECF9026074C7BC5B5
3612A7E0DF647E277D4756817126B1F1B049E42EB3B887A833623DC9F68C0FA9
51FEECCFFEECE73FFFB9719216534687449B4A6782C152F23275D4964B270992
C3B20FBC819059BA64E9DA37D7964B6568C7B33E7F163E5CB2EB92B56F6DE865
F7F2560B3AC0F644A956F1268E1A4216610064F7214A1B4F67C591B4A21A4F8B
7812973BFEF8E31F79E4119312C0617762C7E0CBCC9813B00F097BE491473EF3
CC3384EBB9CA40D34DCC86F6046FE4A7DE405F6FDABFA55EDB6DD96E6FAC79A3
5828D61A6F7741E06F19B35ABA74E9FBDEF7BEFFF88FFF801C21DD0DEB631930
1172603C283691CA42FC886AFE876784C85BBD7A3535301D1DB69C24F5074527
7E0869C8A428218CDC8269D668837AB17290C4681B2F9E917607133B34E4F7BC
F9F3B76CDA2C1B9FA9B9F18DE8997C4A1644679FC1CA06D4AAF1784D6E7D2F65
9550208E9D952864B9C324463BA273F813C5018F96EBEAB9EE94BBF9C86AC7F0
02C6094F0E3E3BD506030BF832CE0006E0725C8BB49CAC672C8BE5E38800190B
F7DEF7BEF797BFFC252681E44B3CC9975D76199C45669E45FBAA8479877B4E94
05BD10B6E7A6BAE26E5195A9EF109253D0B0845B59877123B4A7BB3E5A8B93F6
AEEF9D539D353C1037A21133BBD4BDC38C94ABB9D1ED2D33C378257F4E7BE1D6
97B79A7A73E9FF5ABCF68D75068711AAE02D2BFA677D608FED73B7CE9C536DE5
DACD82819F6BDA5E585B5C692E2947F35BABDF8C7FBA0A0A7EC46F15CCB82680
4F00DBA7C38713E51F0D26ED1619B6EE5360079E7AEAA92CA0A138935C939171
D34D375D7CF1C544E2F11029A2AD1C8378D71992669E53FE168E0C3FF19D3609
6ED74CA1E05502FDDF6A02933985494657C77DC85526C0011B861B1B4FEA7246
090E8B2D8AFBEA821D794A951F9A898DDE145652B852C80B52C0BA1D6139CFB4
74E9169F76DA695FFFFAD74D563B26E3039340FCC585175E78C71D7788AC7727
D121F6AC3DE288235E7CF1452A1B4DA6CB43ECA6284CC6504945D2DBDD333C32
0C356043CA6926F2B1471FFBE4273FD98A4C4F5A328563E0A59622F61EDE78A6
FD36D7560A02A6B3454D6F833A7E460A6D26167CF30C73193871DA01EC5D237C
21FE930685990645EA4A4C3DE1E245BB40A199143F0A21F2977FF9974F3FFDB4
C58626E33725068E479A447D2C7FE34D79CE955D11EDC901071C000945B397A2
4D5E27ABFEE83FE23FA1579E7DF6594254B911F944EC46CD6CAAA4A43A197015
E18ABEF8E2EF89642506941BDA66D2A2B4D6B7D1806E810EE0BF8562D1C40921
DB49CA368A9D0727F7EAABAF6E9B848462C303035E7A42C669C5A2987E1C9F82
92EE9C73CE81C4C45A1041814B710FE9B44C4691426E1E78E081DFFBDEF76474
0BF725882A29B2F15C34DED5A85232889D2F19D613E98D7C35CA143A4C471D75
14A498BCEFC95F231C45A1FF952B579E77DE79E4A492CD284097CAF10878E0C9
84DAB8F5D65B99F2650F5BCE8F7C3BDA9B1210AED32635A0D2719C220FB66960
5A30D40F307DCBC2EA8E76B1511ADCD69A5B58DC68D782A5AD1DCDED959609EA
C6CB994AEE1D737AF26FD5FF4FAED208D6997263D9A672BEBEAB176EF9833FDB
330B4AEDBEA41DD64D3309DAA69498D1072A958D76BAC67CD31516C79AF5A410
941A49DD9B00A6941AC0E00F3EF860F8E56E672E1A2B2E5E5351C1B3CE3AEBF1
C71F67218B402F38E4D75F7F3DE6560CF56A81A9C32B69287C042D368620580F
CFD48238EEE585BB057124F157C9DE74285233910C8E6149E2834F38E184471F
7D9448273C239CD433CE388352C2649062F17DBA012549798147BC8CE28D9792
3F4A7E17F620C197796AFCB437C38F7EF42372DCBA06BBCABC459DC4B484BAAD
F1E0605434B3B8AFA48C95EC99AC095C8C3B7E75E28927DE7FFFFD0C153064C4
6DC9266E6EC9B192D298041BC509C2A1E1A1EEAEEE91518B10B55097288D7604
367102F9D3C3321D1E041B8369D22160D644F5BC1C1B6330E3F63B6C64C850E6
21E9B3332645A5413E51B79C9DF84546B8B4D8EA022A0804E433ECBC7476ECA8
B064100890E4EDC48E8F38E538E3FEB6DB3D6AFB69640076B1FD0D341B14B50D
2585BAB568FD6D4BC8B151A543B148CC6F734EE9698AD5874838ED279638D098
C5D59889EAE880EAA5643B747768E412E6983EE69B5E2678A5F9D2C3DD522324
6EA0F17A28BB5FD92563A85CC611AAF7F5F50C0E0EDFF7CD6F42BE33F4C1A3D8
6102CB5AE4BDA6ABBD147E992BEDD249D1DDF1B36641120126C3054980F2EC71
EF2A40E9B21C1BA7ED8F7148A5DCBA24DE5A03204B1ADD358A0C9E135A7F82A8
4EC79C35DD4B66573CB1B72239BD891065CC9DF57ACA859889566D21DFD56856
3DABA093B9FBCF492AC94832561FAE752DF2DACDC44F4C2117FA3695D28E3D63
A727CCC52DA8EF24F4FC2831CD284872F9B058AA877BE5FC56BCF5CDA8345278
4F5F35DA6442E3174C7C999D2BAAEA206B27E065F544F890054DAEF4997A7DAD
0B6D82102ACD8BDBC98D37DE78F595D7D8486629EF62FC495F8C6D3C77F662CC
7FB53EEA199C1D2F3049105A1F6BB8D6320956B00D6734F0EC3F499C2E7AD0C8
001C9E497CE7CEA9F5907E8095F732E5154F9F1976FFD3CB387F44D902D9F7AD
6F7D8B747BC24148D5294FD951C42AF0251611FF897574E9FB25C17952848B65
629C6CCF64F46209B46A895C496DB29E3CB40BD98A871D67F1A7152B563CFCF0
C36EF7376E7897BF44C41B53022985441212043F878CA561472F8107077781C1
873B323FC46A6A59A20C9C26514C0CE88E811DD94EB6D2C9B26665D41A0246FA
BE6FA679B941334F3116F73C9BAC04439D28689D3182C183B470E142A853CC02
AC752800F5C1C0375961E4B64351A677DC45E8AAD433590FBF941057E8771881
B18DB1589166C367A3A3B0CF9BB5DABC85BBB057BB4D67B169223413AE90C454
98BC2C341374298727CCB2C988BC310C7E998FC96A7BE1F1DDB8A190AF345185
8056188AF69967DECE90130A552804E2E6A3A74916D938B24975CC1CD4401A80
82359422051B2D5E90D515B43BDCEE74DEC4D7746C1CEEAEE57960D08C351FF8
15240E513AFC3E4E144D6CEE7E5AF47CAFF42335C184BDE2F418E15F695CB00F
3B6FCD181437A2DBC78DB34A1B0ACB74F8E187FFEC673F8332568EEE7FA40954
A9243C315D280CC9C5DAABD1AEEA924C9674C93C1E7839B946AB96EBF177D963
9735AFBCB5E0DD0BEB71BD59DA61719E51DA63C64B85A067FCC0CAC5B86D5302
794C806F29E5622F847A28CF7CC7D01B6F95F65B38D6FF66F7E868ABBB161DD8
57886BEDAF26020D13CB20514520B9164815FB533E6F772FDCE2513C76CA2215
B59BAD28B6508B2048E0595E70E1057BEEB1E7ABAFBDBACB2E0BD7AFB7794243
C3CBC70C7879AB3F52182506EC055642A632DD3E9125CFC03783461B1362F079
A60F30B761BA28F8A1FD534AD1947EEEA59A2CD95905D9949A80D83FFCEB0676
F412B08D50516E2709E50E349A5E6E8E97871D22028BCE923AE60B31BDD75C73
CD97BFFC65527589D85C77548C54FAD8B5DC1592A525A14A859B6FBEF9A28B2E
625ADB64B5602E1DC074F3134C6CF4E27A3990EC787C8E10E626D1AEDCA82E57
6B5ABA186ACFD8A4D7E8786837C8E225FC957266D3C98DB757CA64AD8D191551
F300DCF8B0C30E83EB44DBCD389073E20492ACBF3915FB789D5B6A8C43AC3092
6319482A7D038303811FA81D0ABB77F60F6DC33AE78BC52639A720EE31F51874
324ECC446EA90B2FBC304EDB71ACDBB459801F55B1E39A7367CE58BB76AD4A39
EEB8E30EB8961D951D8C3833E670F6D967C3FD64001A8FC9351E4F5DA45B96A9
303CF5C68D1B396085B95DD01424488726E08496CA39F2C630356F320563392F
4B9801A8D2529AEDACF317498669637E4284ACAAF577C36E727EA73B810C3532
648F7FF120ECF44D0DC7E6C3CC67303A4CC12D2E1A57F4BBCC74AE26102E9307
F5CE3BEF3CEDB4D3786B46F314DA16E48C263F5D071D5DCEB98846A6E37D9AEE
C5268B02D53CFAE8A3C71E7BACFEC4061594200C72721E30483CB574BF3DB1D6
618D31775DBD4598D026ADD55F7AC8B2ADA535F64445310F298C623E3C04556C
DD03CC8FFD3F16238A2154FDAEAD85FE77ED6106EA73FDD933DADE2B4FFFC2CC
32E6D825E57BB731128D6130516FD2A8081512D6087A71D9B265988A9DB3BB63
D6532CA0F5696C72ABD55EB264C9EB6FC0FF8622C4A5B0EBEC35E7CDEFDBB265
70EFBD9786F93A6442B1942FE5731E86DC6A4456B3C53B8647ECD9895A7655AD
DC0F7CB81B493056B54B0FFD02DBBADD329895F11D0DED113390E567C38BCD4E
5F93910B5EC64BAFE2762A45F5BC6252D7E53BE00683A8254D349D3F6E48F560
30A903CAADE5C2C9E410507970A711364AB1C0BDAA069671465ACE9F2B638A2D
F4B9CF7DEE861B6E2025140511230414CD6A354C05E09243748083B5B28C4189
30152FD8D384E1D17D113DFB29A79C42209C8BAE36EA04DC6E136C990B738CAC
8CC70CDA2DDD482777324D72C7A80CD926147374AB1EF863D10910602B9C861B
50C303903C408407784F9245AB574D9E24DD8DE644DA67AF95CACD142713A5C5
F7B81A76B417546BD562A158CF3A0AFCDB0FFFEDAFFEEAAFE08977A7397D4C41
39AD2383CD99EA8F1A45ED38CD4ED6F68B8911F50050241103C3D74833C2764E
78040682B024DC5E7A51E88BAF83EA84412A2ED084A94CDFDC7EFBADE79E7B6E
6AFE373809FC49ABD9ECEB4D1DDBA141BC214E77786478564669C7DD49BB463B
C96475A7EE4E9A7245E9F952DE61721E78E001E83C2581D9ED800D0674659C40
365D223A45CC651D9A800310E1920C13A1E2B801B467E451D18592252E1205B7
385CA1BC9DB4A99A4EDC68CBA903142670E5CA95975D76197BFBB8D5D72C1782
CCC5EA6B95E91C847E00AB79AC5ACB17C35AAB5DEC2AD4AB8DDC3B4DB92B1716
C25684498BED64182F6E475E984FAC6360E9AC93D457E07AF424E18E5CA56BF9
BB77FCEF4DF99FBF31DF2FBE951B28BD7B51FB375B39272CC765AA8CFAD5CBCA
A0E42EAB7862AAE70DD22F584D853DEFA507269D4033776EDFA6CD834B97CE99
3D7BD6EF7EF7F241072FB516D2FC320CA13007B111B7DBF5C4BAA4891F782355
AB094C4AE36F18DBF7421B3D6AA75889566BAC5A1F1B6D0C8DD4C7AA4D1CD95A
8BD68A17F8B971D475D43649E4196FE7ABD3A109E80051CE62B72C5DBA14FA5B
7C537ED6018DC69680E9F020718298BC24B8830149189A7FFCE31F69BCEAFB14
A06CEDF7FDEF7FFFA31FFD28D34B34E4C5CD45C36E3A9FC0255F22AD1059254C
8A1381DA265A1D278BB4DE8C8E72842E2E6832AF4647AAC0A49619BECFFA59D1
EBF211442E30199425836CDF7DF725CCCF38E56FA2757245FFFF8DC3ED29FF43
431B2F0676DD2FB94FA8D3CEA25C1C36CDBE99487B9BBDECDE9D337BCEB6FE6D
A5A2F5DF87868720E813BFD5C81E3248F3906C3359C917C9B3469E062C64FFF6
7EBC692638008D7C5A48C26F16E1365AC6ED2EC6FD698DE2734A19BA6C340D5C
0644CECB9E7BEEB97AF5EAE38E3BEE3BDFF90EB1287C2EF5AC800ABCE28A2BE0
91F0DC12A926861FE2FD3AD6D81B2709F1D8C3402169C688BC2C90072B939059
E803CB0119B585EC14F7116FEA1EAA8E3CFC4ECE1EE42C06496D8DDBE129EEBE
FB6E1C2722A6E5C912683877EE5CEC69C5D3944C36595A9EFFE9659D3A4CA68A
148BA4ED4F838847420119022AD44D819A80E846FC96D1AAFF96A560BA179381
54F9D237414636EEF21B2E58B0802A967951FCCBC0A06A4A71E34AB154AFD742
3F2C964B43A3238562BE3EBB599E1356FA8A118E64924AE718F6A35DDF346A12
47B1B1068C4D7DD918673D32CD6DA65099DD78BD59D9EA154CB0C30C4277C064
9B4E13507E313F6C1CA6F4299FB790AFC036B2BC26BD3D3811955258ABB5FBFA
4AB8D8C040F37DEFDBFFB0C3DEF78B5FFE7CE9D25DB12CAB5F7DB9A717672DCC
E521FC71AF26F401B442AA1BD2798E33DFCEF3B9D05D05DBEAB5D1B69A60C7E0
D8D6ADC3FDDB4746471AFD435613C43688142626ED0D9EB42D1D6B326D672A33
153A96DCE026C39861E3114EADB6282C8CA2B4214E9DB60BC3983220B8EB6898
9ACC1D67D94494F538123D092351B802E696211776C9553DA6F204EEDEA6F460
2F9A24E36B611B19FC7BEBADB79E70C2092C87A6634DFE09258D19D69FCEB2F1
9C6EB53CF2F8B9AAD8F805E6EA31B08B2FBEF8C61B6F7431207C4F100D34C14B
2FBDA49E6B4ACDCA099319B7139FE0ED81E9FC330D80473DF2C823FFFDDFFF9D
9E148904E8D188288ABF2406D96484DD2CCE26C84744D8A94F90A3D3877D9C4B
5B4866731DA81AC0641CD1F62798CDEE1E26A8B113A133F879B5DE304EF09AE8
B7347FDB304E1E86F16E6D3BCA6EA90493253F3806ED27319FF03AD085F84FEC
57F9494CE330EEA16E731D9A403722A3863C4A8A2A9C413BF2385AB674193328
CC2B942B2593F12530C02D9CAB99CABB9C4E13309F26C756905997138657667B
673E05A76B9C002A9DD5E93481B469872620190BF304D20A4419E05E3818871E
7AE8AF7EF52B9E0D97FA58CC45E259FC1F6902FA04CC0CB33ED6EDCDA216781C
391FD00587F049AD1029970AB97CD468D66A56887CE3F66F5C71D595FD033B92
A2C9CDF6BBE614BDEEA45D6825569E268CA804396B9063FDF03EF461E9045EEC
E70B413D2E0CFCFBD0410B971D7CFC27FEF1EF6FDDABD8FBE6587F90E1143BA2
433CF018D889279EF8E4934F92E6849F4FF3BC41319F83AAC509C2CED87BF92E
8B172DDAB869FDE24573214A162D5A10841088F981C11DAFBEFACAC848DAC7AD
0B86147E046DD5B420C204DE5E3BF0DB36559CDE060B980B12E806ABDEB09FA1
DE9204CEFBC0507DDBB6B16DFDD5919168A46AE0034056576B098E601CA532C3
56844E3D4ED9C21D9A80A07BB627314E40954749149B423373815CC267F5A871
F3C9CC9CB9E1D920EDADEB65CDFEEEBCF3CE33CF3CD364BC00575D75D545175D
E41E5BE18C4DD673CD753789A4222DDD641658D127AB672DAFE6FEDCDDB17C23
E3529DDDD4D386405E5C841B588D9D4DD6D5CA8803CD2456CF6DDB56CCCA0B72
A4A61819153BA18CE09DE49F264487184097DEA0DA64EC98FA80D05A7ADC9C11
A2BC19F955AC569B40065AE410EEB38C0247F7D1471FFDD8C73EC6DB77003459
B14D241CC1E942B286619E25B2621BCD76DEDB381F2915B799B0DC25ADBD381B
38E3F8179ECD2DB7DCF2E52F7F992C75C2243CF5D4537FFBB77FAB8B70C93900
4115DDBBB81253F59614CA33FB663115FC9EF7BC079A9C9499561374955C6A4C
E324A6B481DC54C17436A3FEC4C921FD8302622C801409A8D24752693228A6CC
137859B9964E38A928F1FEFEFBEF872C334E3D01694A15FC658AD8385A1C3604
2684E8647C81B8E6FFA94FD0C18B491D238A11FC7BC71D777CFEF39F7773C574
5E5D923BFBF8B0ED53B4734FD98211760C0D7ABEE99B3963B4BFDA2EB4CDCCA8
302FC8CFF29302D400CEADF19BB6377494E6633105A19F8F6B71B3D6CC75ED52
FB8FF5F9A2196D9905E5199B5AA3FE8C72EFA6A15A56C3DF9131664D25DEECB7
DF7EAB56ADD278A6B5DD122FF0BD4231F09276B315CF9F577EFF61EFC5E6EF29
976C562FAA2F5CB860C7C0D6EDDBB70D0CDA7C6CA952ECEBE9EEEDEBC24F023F
C2179AF5B15A0DF2AB6EF95CACE0C383373DBF158410A9716B64086B1099A8DE
4EC6C6A2A1D118D2A956374984630E2B301C1A4A76ECA80E8DD45324A0992E3A
144CEC18A37D4B4D807D887F190E1571080BC72852B125C83F2A51CB1DC8181A
4BA0E92274E45D29C7983E95716D321655069D7071FC90A821FA918A7FBA3E01
E51504C24D37DD243DC4BCF1B265CB60FE32338A1584B8A0D52BF630BCC1E195
08E22D4CE6A74A36BA3E90F83054FAC7EA364E08DD776F52BFA0309F5329B5FD
792A3A2C5A348A65FE76F050EDFCE5C92B51908763C571C592400E3EF6D8631D
ED594C8697FAE77FFE674881246514912BA0CE47C938791656AE9A66010C2C97
0D1B36A50F6F91A22E570935245D1BD15DA991596ACA8D431B93AC096AB65DDE
0611BAA503784F8DA5B836AB04B078F4C719AC50DC5CD0DD5D3232547C812B8D
4BB14D28CF3097D90DE57B0ED0F39E7BEE39F9E4939560103E271F169AAD6621
5F808C5EB7DEF627EAEDE91D1A1E82E7AD9E442CDF3393323C6EF4693A4D80C1
68BAF80991E39C5B8CEDCA2BAFBCFCF2CBE98449B273AE64554D4E4CB9184D69
0206B83903F48ED942DDD5D02603F61024C3F0111FAD830449D0D5FF91263059
3F038A12C61928E8D50D5B64E3BC91188798C11E7783CAE5A8D52EE482461542
3B5F6B3469F376457D7533D6CEB5CC4253DAC5F85D1E35461EC21236763A25F9
5C908F0BA383D5E60E6336E64DAB596AFB79130C05ADA0528C86EB4BF7D963ED
FF79CD9B0A454A37C877FA76999DF6EA9AD967F182589F05F3BB61E91F76D8BB
7B7ACA9E9F84894D06CC9A3573EBB68D38FE5BB66EDCB66D0B16B3D295EF9BD1
3363464FA59CCFE5F1408D5A6DB45A1B4D5AE39C3F90F17152B38A2168F9011E
D4E286F0688DC8D45BA651F71AED42D40ABDA43BF0BADA516570D06CDA3CBC79
CB8E81E1A106ACA0F87FA60964551C73CC31102912B86E5F748A11D2E45D7DF5
D5D84BDFFCE6374F3AE92459ABDCAE02FEC91470C1A6824EE038BB94917EC6DC
2E6FDBC54C4BD47272A460DC3E5FCAA2F17642FAE1A0413E90B01AD6E4CA952B
E5867668025659AA2FBA9E42C28417A428563851B225769AE7582E8666B38C9D
3C36E665AD6D2DE8C678AADC5620C44C1F4B781B0F2275C7E2028C00C63BF51E
C68AA9B7347569193A79A04C86EDC5D7DE78E30D4C0D04196902E9585061BA2D
09DD82144A10BA7ECC9AD22B74C367BBEDB61BC6C3208397159AE2E20CE8B380
50CC42CA72971D375C07CC4DBB7323BAD45D0A9AD36D97DEA696361932AC83BA
40D10C4542B8C324C7192B647A568F4F3A7EAA71ED691A863A090233706D3A74
2A75958B6F9335C18063075CC185BD6A9608ABE00170637D7A2F7CB42BD671AE
60E99C77DE795FFFFAD79979C31714675397154E919B10165C441CEBAE93CBA5
E4D27029D5A28FBE202F486DA16263FC4B0241E3D0F46B434B4F63C752EE0BBA
CE7B2559FB0D1E6993611C4C9661126FB638E2052EB429C4036BF9A0E841E227
A54D6BB7263BD233147B3913BAAEC615575C019B8064329C01E217CF38E38CBB
EEBA4B84E70CB19E7FBEED758163682DD05C029D134798D53E1CF2A38F3EFA89
7F79BC54864B0279618AA560C1FC394B97EE3AA3B71B12A6000D164429F6ACC0
8ABFCD9B37119F5EE9C9F7F65466CCEC2E157100EA51BB66923A84898D0019DB
B5C84B5A89697BB6B0C0A2A702E3B593B4BB245C8FA09098C02288DA493E981F
B58AA65D191E6E6EDCDCBF65C7F08EA1767FFF58A36D0B832C50D51A79B8AA85
16D985F33D6E72D7B0989CF7EAD0E5C669DDCAF09D97D5A9119F23FCF1F5D75F
8FB9D5D622445B2A81B28551970E6D2489AC0F691904595F019631AAD58F7B28
28AF346C3706407C8A2B5B495F860DA36A5C2FAD50A329C07D4E51E0F69390D9
C452A4030F3CF0F7BFFFBD0E3B452EBD19B62C75B30226A3E9B46D0652952065
430F8C3B135E3BDBC5B34D8D4B4369C44A4D28A11B5DD11185058D038FA9B9FB
EEBBB18F99CC51D7A7EF7EF7BBF01BA41EDCA6A9EE4BD824F7466AA4C9F23446
EDB1DEE41722ADABCC5559763225949C74214F22D6503185A24371C6EDCC9E30
AC0191A53F79CC54ADBA94CBE84021FBE94F7FFAF1C71F6781381E1C730A4D40
4828D59B1BAED1F0A409DCA66354363222BCB4CE9EE78499586218848EE52A46
93BAC549F399ACAA401D71E9D851F931329664F42C026C7859E51A9157444099
2C01F88E77BC035BB0634D5DD5629C7625240B529D170F2D053D3EE1D7B885D8
85065292ABB920E5D4C56964536808746C5FFC8BEFA88651DAD173AA66743269
0A481E918084FE812D1FCB1A9919A7916C876929B61F757712DB7932BFD9EAB7
3088197D3D1FF98B8FFECB234FD44631455E62C683C82C886589250B355863C8
67A7E89725D8412A69493E8A411366B9ADEDB2CFB578D1C2F51BDEC22396CB66
8F3D765DB664D7AEEE4A609238B11C2473E7CC325E2BB54F0D0DA6C1C1018CDC
6E8C5CAB5C2A7675C30F86DB697B722651DD4684E2BA5D4F13594D90501340EC
26ED3AF4009484F17C63F921E1ED2481DD23716FDC2C98B8BB3616F70F0D0E8F
4523A3C9F6C1C6E0703BED2C9D06D96DDAC08F53011B84E3F1168607D5DA45BB
B4C33855609D8D9B2497496288A973D16E3CE904BC89B0C04C6CDBA7459427E1
0A019D4A45E7DDFD60B25A4B9283D2CE6314C8F5CBDDF76401221F0CF90D791D
B7ED076C26E8302C34841BBC6716C6BB093C5E870281DC88A79C72CA430F3D44
C18D0525D325E3F61FFFF8C7FFEDDFFE0D6631C4328BB40953C4E99601272E23
5CF081071E58B16205FD72056F6903B16B0B35A2A70C09A51B9D35689275EBD6
C9A5E2E46ACAB865F157B214E0DEB82B3FE1CEC627B83ABEEC8253F573F88627
9C7002D75B4D3BF5C245E84029D3C0E430FE842B431F427928A362B21E7238AB
7A63264657DC689DF681A88A4CE6932AB826E9C97A7AE60312A760CF644179E8
6D4846E921C63D79116E083715AF9E441A55987500E7B4BB21027661539A911C
738CF5D30FE06F190157B346E3D8C812943A81C2D2B855FBC44860B625A36991
D10011E117638622F6509A8B2CE5AE32D6647EF6B39FBDFFFEFBA1DD091CE26E
53490A6D029752ED5BDFFAD6F1C71F2F7E6CBA5C8C3E290DCE11D20A93C337D9
F4E3CBF232A65E8BFC3F42B60F39E490175E782149893AA83354450FA3895CAD
DC7526F3CFF0FEF4D34F7FFAE9A7ADCFE741D8995D7759B676CD9B0BE62CD8BA
AD7FD1EC459BFAB744C1B8EE9742E55A2828619CB2236635187564790D5E3871
3639D9AAD76A8D62BED4A8B7ACF16ECBD8CCE2C5F377DB6DD62E8B16627AE13E
79091622ECE9AEE0A4787E3B8DEF35188BAFD5AA4CCF7881051AE5F326F471F7
5ADCAE45B18DFAC7B1DD039E2D348B3C8B808D21FAE110D4ABBE75CC6C78C484
F954A5F9B9C452A3E7E266D14BBAE228A836DAAD38A8370B0343D1A66DB5EDDB
07FAB7EDC0B2A7E67140883C2EA8281C2E023311226CD5AA552ED790AB12583B
8635A2C430191E441C4A7846E84E980214FD984FED76011CD4C9CE38D5097EC6
A3E3260B1387F0DC642C0E102624382249B5DBB79C3A9BCD1C6538BA41D48E68
1EC6892FE09AB495B1C4975C72C965975D86A7C395B98D95205118561A5134E3
1417CAC95139F1A0E138107242AB4EE4B20CAC31EC21E64A9714122A01DE2745
3F6942A86918AAF16466EA6831F5C1BA67C62EBC147108639F7979CA687C41E2
98F110F69D48B2F600C4FF10D1C8C886DA282AA2CD6393648DCC7880DD9638C4
9C747010CAD653B980E4A08B28703F97E5885F71CF91F94FE9294545E4A6D11B
505C4801776E0221D9F91E5B8A2606252C5D1945B1F19F279F7CF233CF3CC35A
279AC364B86375955BC3459A555804C71E7BAC6B33320ECE0108C84430BEDBBA
B223B3246E03CBF5B478316419857539E5BEC65FDFF9CE77FEF6B7BFC560088E
26E6C7259960C130BB35D0C9551A4A61131962541B7884DD76DB6DF5EAD54AE6
2B0048052045A52995EFF2F5AF7F1DF614F6096507C987F143DC1A9B4D3C01CA
76B8D1308A5D3A979C7FC661DC4D8533F6C61B6FB8A15E0AEE76D623DA3DD898
2BFC8BE9623E1C8ECEE8F6D1B1FA9867FC62DE6ECEC84479BFD88C2DCD906271
E458559985443F550B639B1497B7DD761B0EA7CC5EFB74B52A1C022E2E8471A3
D958BAEBBCBDF7DE73EFE5F34998531D1DC6A8E6CC9E095FCB0ABB829F9668D5
18466B34EA7486C27C2BC53735030FFF091D504B62CC7CD3C443E99445264E51
A47EB6439AE5286EB5A334859387699C4F2B3072C6CB45AD5C687AFCB0D08EBD
242837DBE5A1A178DDD6E6E6CD5BD7AFDB383838D26A9B183E46E25970693C4E
2BCB63251CC194281AE32469052FE6CA62BAB05DB185F835C9135A456EFD0AF7
18179464B75871C52463A7F1B871BA8BFB59D31BF1F2264E2B1B12309BAC108C
9BD3B5297529C62A98CD6652906176EE73371E406C2885679291E17B4EB93EC3
9E1277AC012257123BA650D6F3873C086EAC58412D655008D2610801FFC9BDAD
9633B8A30AE5EC617463023AB149C6D7CFD6546427C639813270C9408C9343E6
4BE093F9F3E7E3316011C030243AD34BEB44E01C89F24196BB6255781836FDE1
14333A14670D46D8BB072719D6931AB0F1F0D30965EE9A902F6F22FB87F6C15E
7BED05B5F49BDFFC06EF972F5FFECA2BAFB05912B14F5448EC12ACB60DAA3DE1
9092AC1908EF4BAF48C14A85A714CEE22E8178127AB5E3E51E12262108D9E2A4
41325E7EF9E5441371E175BA0496752FE22678E9840AD1AF0655AA8DC05FE178
C264D3126805F9656A355DCA0D4609F422F8364F8E58A178C2A96FD85F487CAB
628B9333C42FF000B07858E80322CA459ED131757C85D98BC63E1E079BED631F
FBD875D75DA7D274DFE9F64CD5ABBC056E8159C5543CFBECB3ECD3C0732588E1
DBE59AC65F306FC1862D9B1263A72857C86FDFDE9F8AB4B76B474CC6A347C382
505D468D48ED47F5433C1E0D23DC142E26E653AA3DF0FC5CDE9BD957D96FFFE5
7BEDBD5BBB3DD855B272D0528B17AD5E0C52D6874239C5F847AD8C9DA69E8C77
8DB704AB5E82E5863268A4859CCD24C24EDE21DE8830F56FD20A2BAC5D17F444
62DA7E1015F261A9544841FA052F97376D3808DD61506CE3E98372A35D191C8A
376E6D6DD9B2EDCDB51B366EDE3E3854ADD76C81050C272F19E7205168D138F4
569335814AA85C100EFF446549E6679C59F288DC77DF7D7037692D6156E5E9EA
D8B28E9524EDC2F074E8214E11C749A03CBE79C20927FCF0873FC42D38007AA2
4A3B2997E0DA5B78C1C2FBFEF7BFEF6A265C106386A013553006B660C10212F3
50BE8BDB2DC87AA5A8A88BD2CFED2E25E7892A41FE37633398197C81470626D4
CA952BF19E44D334F985D1703907D5AA8B61038BBBD546C77FF0B48B6E9E241E
1D34006E633686B4C6D297BA71CA2D30292015BEA1480D4D86F65572D2A44574
147938BDCC40B864642E384441587CD34BDBE6D04C209C8096BEE0225AAA0E73
C0A4B15ACC20FE7DD7BBDEF5B39FFD4C91076258B933E80F7959BB2BF5545124
DAE586E42EDC73CF3D61718B8A2770BA7E72E14DC6D14D058E0F498E163B44CA
323AF8BCCC856024DC551434D80178CFE1A9E04B6171D9DACA7BE371F0B098A8
33CF3C1316A899D89052905F950473A2587426AEC728EBCECA44083E39ECB0C3
E04C40112A14CECA32FA0DECCD80F7343AC447ABC69C1D211DA69AA942542884
69845D0315A58080F6C064CD279F40D109AA7385FBF09F44C761FFF00DE363F2
BA5422A32A2132EFB3B402C60D2C2C1B35093D58DE854A3E82646D585366F62E
B377BC351ECFD441501285DA917B9E054ADC24E79E7BEE4D37DD44C9858B1F7A
E8A18F3EFA286E55B11D5146615D7495F37BEDBD6CE9D2854B97EEB275CB9BB4
031A351B22C8A75AC7FAAC396E98982BD54EC906D2FD5FF50D447E33F0A3C06F
9AA49EC4CD3869C1274827CD56426077843993E73EF1F29EFD6602CBB054CC11
1A5ECC15F08D04666ED88D276BC2E4F72BED76CFE070B26D7B73C78EC10D1BB6
ADDFD8BF69F3F6FEED6369C18FCD75FB59A930DD50CC868ED8E4E81014309B7C
F1C4719F530A618341316B7528227072B12EA451E126A7AB27C797A686DB53AB
C3D89299CB2B9F76DA694F3FFD34D69DECC5AC1FE64F089127FFE87824DD512A
4946AACA3DC691ABBA3EC9BA2AA9A5AB80335ED632C838083DA6A68E3AEA2868
A3242B7556EDBDFC15D7C0C577301594C6F8136C4DA81F86F1D9319ECE0D4F2B
CB3CA5455803405264288F33CE38C353BC5883C327D8971896143265044BE98C
D3878B53EFC628B80BE9C4B929752F6593C75D38351C10E717DA123202033DF5
D453A1F0E18043B8F0B4C7196BB97200AEB6C4B139E59453049377D971DDC8B2
8BBF74235726F59ED809873C740AD2E16BB6D3B2433AED063478591E6FAA0DCC
3E9EE2031FF8C0534F3D454014A536452D13C8CC3D924DBE83834185D0AE7054
C60CFF62B5C487BAF7DE7B33CD3E25215747BA98D3E836409794A4014EC801B7
859A7BF079D59F84CE07CF03E38FD48E4AFC081922702A3712CD6A467829BBE1
90C13B11F387484FB9E5D6AE5DCB489438E370911B6FBCF18B5FFC226E8D3585
03C7F1339467264241F4721104DA9FAC0D74BB5B5360F1B48B91C664303337F1
C8591A87B1B59A7E004FBF343A9A4AA8D0F4CDE81BEC1F2CE5C7B72517D456C2
6778470D0C4780FEBE2AEC44E5CBC979FDF5D7E38827DFCC99555EB868CE1E7B
EC52E9CACD9D37CB4B5AAD66343C3464C3A4C552AA3B939C1FB452DE79F803CC
4062FD69A5E57336F21306B117344DDC88E3B1A85DC317BD64CCD6267849E827
500385BC6F5DD09C6FFC280CF0807EB110E40BB952BE58C8E5C3209F0479DB68
3C57C1851BEDD80BBBE364D6582D5F1D6B0D8FD4B6F50F6FD90A7DB07DDD86FE
ED3BE01A5843DC4558F2C17936DD35D2AAB13447275D7B49303FCD21930184D6
C85467B728B23A2BEC2E13673AE8A4714AF7930CE3CFFD8FEB63BF4138CAA191
7DE04D85CA171A95BB0506102E822D7AD75D7741BC12A8432B4DF45FAE34D77F
527E620FB0D6552CAD9C04FEEB72A09ACC8B62FB498C1F178732601F6F930155
880BC5444189928B0CD3CBD6B93C95468472CACE49F2E212106A3FF8C10F4860
093B48CC741C1CEF814BE3FB8C5AC815A077C33925271D03B5C6A9DF7303F1EE
5C3049C2F168395DA744615C294372EB7FFEF39FBFF5D65B099EA339E976FC91
95AD127F615D8443A7DDC7023FBE79E73BDF09758A6797B44D9C526FAA7146A8
4CD6DD53C059B785B2DC58A97411E4262973087C2677870944E4A5AD69449DC8
05C29B9B6FBEF98A2BAE206F1296960691C0D493F304AA2B56B95C072C9A690C
17EA4EAB5F0DBB09B051C88E0C3049CACF2AFE77AD1A9109268326AB98803373
CD35D75C7BEDB51A1EBD16AA4C65A768D3B19A040A8CF1315239E198E1915DEE
1317CBC1A99358E172B7B32E89321ED9A148F82E8E841139F503104640D34859
66E33CA3D65668B55BE17819D4F64CE70D6BD37A19C657C0988E25A06EA62A75
71F129A40AE38740A92CDD75D1FE07EC357B76573BAA75F71493761C78FE78EC
344AE968226B8B8C366A69C7C0D10CA410509F75978A90EFB930093C68F7B166
6BA4D51AB3E5C2C622886C557410E7737EA118E4F3412EF4BD7C3D6733CC39E8
0648AF5C900FFC5C60FC245FF4A3422E2CC79EDF6C457EAED70FE737EAF0E6C3
5AB531385CEB1FA84213AC59BB69DDFA6D4323A323636FA7F118D3272ACC0D15
B89A4045B00C3E0BC24BD2782E1FD43F9D60B7CCD8644929063318C65018D3DB
6961ADC92239B31DD62F72C28B6C8DF906EE2297C8DD7D29D8103ADD92B98548
61C94DA58DA1BC85C21562BC90E683347BF0C1076949CB5357D5857C6255A850
6F31692AE386E28227453D38190156FF575E9009605C8D5439E321637620C01B
4ED0EEBBEF0E6FE57BDFFB1E7E4F950E610D13464E131783E60F55B4EF348F35
99EF43B989D7BBDEF5AEDFFDEE77C6A9B72683B1F2FEAE1A3459774CD576738B
07691F024A049AE49C14B6D7E0FC12D4A4181CE55D9C3538E5FAA9531D2300F8
886D1F023F305980A5D16C84A91BEEA271F8506E20853288760145AA0229B48C
F07D587FA4AFE0CF69CB402C5E77DD759C1C21AF88B0A4C662DCDCA4B82969E5
8B2FBEF8CB5FFE32E3EFC6418B2A104FE9CCA09C1C35D1487006947683CE7BFE
F9E73B8C38B71247BB50CF4BC16AB2AA1CFCEB267E265680BF1DFAD42CC95F36
591C86F4007873D555576142883765F81E4FB462C58A7BEFBD977BC6CBD82998
E4A741C0201E14E4D5575FADB54BB2363B5C6E1CB0279F7C1206170182EA5AC1
7A37EA1EE578A6131F9E0393EF90684455D0DF4AB22A21A50A784D32D88C8B15
CF822F717F682E93F66B6A47E9D16DB60BA1376F7EDFF27D97EDB9C79299B37A
20923D98EC29D83FCE5833A3EC852B334C6A491E53CC0C63B64188D314D87A03
3F4EA26AB339D4680CB6A346D21EC3AE09C224674343106106FA003A2384F51F
FA85BCFDCF7C4A6CEC61C5120B0B4D9282E7770561C978412BC671E80DBD1903
B5B0502846B1191CA86EDEB263FD8681B56BA1FAB7355BC1E0E06862FCBEDE99
8343909EB16D0E1A472636DAD8D4D6DCBD6EC341ED79D77757489618395A27DC
6F227BD046E5BABB34701D186BBD7133C9EE01A70CE5F67623EC348C78C693AC
C4951B8CC3108192E2C6F8D581071EF89BDFFCC6659FF6A6651399A29100138D
B0F48F3FFEF85B6EB985CA4660071D67DA4CFA893045AAB921D3A27894158655
C592FDA17C7C9710869763FB1492E788E993C958E255D9785A315C495E97175B
302F2CE441071DF4F39FFF9C6678D645D6FE969C775C7832F3C91BA2F5CA414A
332BBD49FDA63E4422B7EA782291D2A8B19F9B4831A9DB0E5FB83F4DFD912CCF
6EC47265AC3A264DA079F733BE75DFA9B9551482F632EBE3E92DD19DE28DF057
FC27CD1056BA26594F343E2961275A33E8F32F7CE10B26C3C651C39D7AEAA9EC
F124D924D52B1F0253F4D9CF7E16D6B4369F02291CFF59679DC58621EA7DC836
559C16359671437C533EAF1424ED38F690E039C7247383D265640A47C79BF871
8CF0BCF3CE334E484761196920EA2A933A85E40754E73B560E332ECC38325D5B
510D2BCB479DD121D3C51A824BD1F064388ED4F62EE25BD69F620EF211F96251
12F7AD5A4212D1C05407BB2E4B6C4152C3404F8711400DE40B30A7462D435C10
CC9B3373E9B2058B779D376B56C5BAB8290FAAEF4DA0F1E11EA332605F0A32EB
D1E8B16949CFFA7C052B1BDB49040373B0D9B201A2C0AFDB963521A6D7CBE792
5C3EB1EE50E025612B17E0737CE2D9720293B251A464D430C68C57F1FC7CE441
C68589E9094C6F1CCCB21E47ECD71BD1E8687B5B7FF5CDB7B66C58BF65DDFA7E
ECE54F1E7FD23F3DF4B0856CC11B889A119CF5429146895B55EEEAD10E9D4A5C
2FE535D70E56C297BEF4A5238E3802B295C84E2E34259532BA1DDB72B20EE09B
C8699AEDE61115AEE086A455CEF060E0349777DFFB59030002826912912E82F6
A2DAB89A69424C666261BF3B54F2DB43D0B11FB558EB455B89CB625F7DF5AB5F
BDE8A28B18E72418810F82616072D4E0CBEDDBC8532F8AB371861CFC86103D22
79B1A14D5A72A90480C0DDD245C71D77DC6BAFBDF6DC73CF19A7B0D39FD43CD6
0551414613534FE38B96B5728954A7D4AE0C87B18060D5AA55EEDD2941700538
2E70503A18CD3053B7DF7E3B26858521F815FB63503488D3E384134E78E8A187
6840E1B25643B65A10FD36AA13479F59F199679F7DF6B5D75FC3278DD678C4BF
23FF4C6137A56414741D9F430309EA336FDE3C0685252F701176FD950D0EE317
829EF8651229B3ED86D230B8BE5C2B8274299EA8DB896A657DA3DAA2BA5E9AF6
1946C5C1C82E200C59425F907F7AD91DA127457558D6C86CC4E1871FFEC4134F
B0DBF37857862C1AD601A723A9243BCBE35F4D0B193E18A627B2DB35B2C8DEC1
F023771AAC6CC1A2F0A79B6EBAE99A6BAE119A39709A37F19AF83EDC02EE199A
110434BB981F6550A875242F841470CD02BA479405D42254DB0A70533773186C
024873A1D5AE47E371473F2D2049FBCA41C47657F659BE6C9F7DF79839ABE27B
6D7C924F2B0EDBCDC873AA25E416103244AE7FEE646E03328FE673A1E5228DEA
710435301627CD42AE6AA34639FCC9CFE50D34413EF4A01B82421CFA501E5003
B665417A8C5335801BB573516C0BCD9A3166099BB6076E7958988FE1245EE0F9
580BD84CF1BAB7B6BEB56EF39BF8F7ADF59F3AE1E43BBEF10F26AD34484CD4D3
DB3D3234AA242AA7CB8D17A9328019239C149C8BA79F7E9AD51EDC60AE2C63F5
9C9B2DA055E75AF7DAF0AEF075F37CDAC96E3083562F6B1BB181F12FAB656551
B93A46D84D658979050E0C9B0D560E09EF28DFE8F198695EDEC4173F24F7B5FB
35DFA1FFA2714CE7982958DE9A9F7FE73BDF81943669EC8BE949BC81CF7DC619
67C0CF807050E03D603F459D7FDDC9DDE8140A2C62E26F703FDC298D4E56B9A8
8C98EBC0B8811405E2757DB7AB839A7560BDC9244E3663C1992EBDF4D21B6EB8
41544D620EB07D2BD3AD4F11C930821A525E7CF1C5B7DD761B56052ED505175C
40198AEDC22FF3F0F04F26238EC691EAEEEA66A206AEC0899F3AF185175E58F5
5FAB822C6ADCB1C33A5ED20469ED4FC498D549279D74F7DD77BB706093D129BB
A5CB1D31318A605A46B4A95D80B622A1B8239B9D6A0C3866B48E152ABDE79E7B
CE39E71C6A41FE50D96F227DF12F93ED84CA60F6C8F9A5781D535E14DC1DF14D
656219823CF1C41331E7C20EE10B38CF8CD7D14EE72CA90DB27602A500F6284B
11E9BA51DCE38507A4FA178DE5D2A54B3FFEF18FFFFDDFFFBD78BCD98E9CF3E3
EA66CE834B666032E60C7C78FDF5D7DF71C71D6A4765D29E88C6A141E46F1546
70D5BF8EAE2AC34F3EF9E4C71F7F7C975D766119B69F5505329FC91344885D86
644D013CF62E5C1AD3B6FCE4E1AE8BE71DB0DFF2BDF65E962FC6CD06CE579C4F
B756DCF23A925E74FFE9F513392D98868D26E72CB997D507B6134D037694891B
B6B56A3812E602D818450B108DE116908BB450C26326F63F03C8EF54F14313A4
E4D3CD168E3C9481D768B7EA2DDF243D81D75BEA5AE4FBA1F1E1FE948BF9DE56
3BD8B47970E386FE37DFDCF2E28BBF6FB4CCE0C068148F5BFAE5AE4A75D42E7A
4799BA0B9C733F645E014E2D7694C2415E5AC44BFF121B03E2EC873FFC213E14
8042F14F57524F96B67AA3D8BD0A7A64EFF3AFBC11F5903F89D7442F1E6DB7E3
219D63B9FBE4D7EB18C06401D2A10FB893B90329DFB8EE6E1B3EFE44C61CC532
4F1F43CD38E31803318D4C09D0F6158E888F6FD52DB72C9B945160B18B3ABFA1
0CAD1840BD143C8A6F320823338DEE125FAE3210810C5113B2F55C72574EA212
41AA339099CF54B0E88E4D1A376723F873CF3DF71BDFF88664283E84ECB8E492
4B2029D4D375EFBDF75EBD7A3503D62EF31FDB5A7142F32963B62D9B37C9CC19
69397BA30EDD309692154FA909A6F409704702A256AC58B172E54A9386111986
66D139A6028317589636A31C2F412C48F484DF4252933C441D894D5678412B1B
97FDC4273E01F79053CA99E41BC607697C315231B914D3CB189F2EBFFC724846
C6EBF014981FE13184A7565E440E3E137DB808F61C5681010A3EC2D9679F0D55
A464E9785B98B4AE4A4F4AA01BF9A571656C00265474116DDC0E2489A0AB2643
DCD23D579B11059D696932104447D34FA9F7684C5D76D9650F3FFC30B6077FC2
8327D0B0C4AE1B77EEB0DA7868D5433B498B5A7071053F8B191D299BE8AAF211
834FE701E29B4492988DB9FBECB36CD9924573E7CD6847B56603471A56B78533
964B7D1D43A24DE3A57FA50EE027B4A3A3C458BC2B76BB1F7B963BB5EED99282
280C866CED71C183910A4D50C8D96C41607BD558D429DEE7021358F620CF4F9F
188F034DD06C5AD2D67AD46A34039374C327983163492A3EF289078D5386D936
3058DFB17D78D57FBDBE7EDDA6E77EB7265730ADA62996DEB67B08C4803B2BDA
A80EF1DDF17209A825F21866E10E2447052B9045F5681C3F60CA1CB57B78A5CE
4D4627E356AB31E897F523E9C462F04366987184DD9A568E5C0E10FF4494EA74
0F9BCBA2D0AED9E1D62D7177117EA2F9612290EA87868B209D7C40E5E42067CE
3FFFFCAF7CE52B6C208AEF74746EF7A8B5182D7DBBAD8AE741E5DE79E79DF82A
9E070E35E16EC41BE1AEECEF4C6E165CC176A3ECEF57FC744A6D2C7892B04349
DA0582A829CE38B40B414E4986F9A5B472F115F06EAEBCF24A8E879B9E8EBCD8
29B039702F4A93279E78E2E8A38F3659181A72078B812970512E1446B61FA11F
D01A6D341BBD3DB620DBEA06A7A4D04CAADB9A9C3166B504B99F88EA1521CFF1
C71FCFD0BCD02F6E96853340C5C0CFF9C9E2C58BF109971F37C2A6771B2F339A
C74D43443673D114CD982291A7ABD887B28C941EF810DB027631661EBFC2025D
73CD35FFF22FFF42C38DFE810BE816FACB251025D600DB807B63BCCF44A3B1FB
EEBB33746326525C3092C30BE23FD5D98D7A51A5DACC2592F74DE5578CDEF859
AF57DE8E551A324A9458167B1D5161D4139FFEF4A7FFF55FFF95278DEE3F07D3
9376C413D6888FC6688FE2184AFAB9B2862F5ABB42857260B82375393E39E490
438E3AEA2818284412E3D7A55239BDBBED1A673CF822C5E5FBECB1E71E4B66CF
EC2B95C34673348E1A70C9AC26A84318E53C879F4AD121BA5C047A08956B173D
F143F2C7C027306D93347DD3F4FC38F0076DD4A8E0E573265788F2B9785C1398
113FC05F937C888390B06CCD4FFC7612B7E11344A1ED6F10B51B6DE88BEED0EF
AD74CDB53BCACF355A493B0ABDA4DC6CFAF57A6BCDDACD6FBCBEFECDB736AD7B
B31F9E818D02B5E27C719C5393E5DFFE24A62FD95226F309F04454037C2F5B98
8BE86715C2175D74D10F7EF08355AB5605D3B7F99BAC09A40326678C1387A642
B2456C0BC609E5F314D8565A59498D4818CDC4525E3728329D4FA0F223E58D45
DFC4DF7A4E21310F263E8148B9FFFEFB353CE6CC18DB540190F01DB80E1C624A
54F9138C61D8ABC1968431881F4370B0468C8A1A4B4586779381D095C5E5013B
EEB8E3A0DEF1B48C604C1944334ED386C0A1F064201B0F80B38185E47F4A5EF3
38495FC933A02D4FB227CA0B28120C0C4F4541A31ED662A6C3ADA1B119DAFAE0
073FF8E4934FF2F9BBD2172420750C7E3E7BA66D51642DD646BDABD2353A36BA
78975404D76B1D8BE72A0393450CA409BC8C53C1CBA0840C7490CD09B790B090
706424548E02560BB34A248FC8FD4570CD0526624443724B3A653B7B59A3280E
86AA570473E2AB805287E5EE160770BD3099188CDB8A6EB2E6E3BA30A0872FEC
BBEFBE182D574D54FBAE1C574857102391029D74D249509334291428E31D3587
94C8B4AAF04D5CEAC8238F7CECB1C764CD09CEAB803E5D19BA025C3822774D46
FF42DB9C5A4725A06A4B226B3171D8313B4418DFC8C45162434A112F9680CA16
961C61161DF67DB1949B3B6FE6FEFBEFB370C19CEE4A0992BAD9AAC611D6C80F
3D3B93F5665B9AA023FFC1C3AF5416CD23E3D9320808745BF59B408CD7A10C12
D3F2CD4810C203860288E0393055602342B95158FB7E00A721B14567295E894F
07651A45398B228DA3B6AD58E8F1835E8B30CA17F11C58CC661B7B188E422589
73D57AF2E20BABFAB70DFFE10FAF56C7A2A111BB4B7759B4CBBA0DEB4D16E015
E68D5292764CE474CC96C540BF56A850FAF402B22B3E6126E2C5A75C2F574F48
E2771053F31604B0B830771E316E3FF7D4939F8E54A96278A4E3C2342FC4D1B2
65CB206768A2ED244FA06895428E8A9B896B87CC486CB4801DC59A4471BD7084
7A5EB5DA6518E094534E79E081074CE6D762D8D4076F6B20FAD7B807053ADEE0
535AA00C41305BCD07F0B3C64F8C49B17A4B68453D95626A9C32290FB1329107
E6C20B2FBCEAAAABB8EACCA7E13B0C23F0CC70AE3523C944983CBE4F918A1967
D242FD0978ECE528712789025AC11668383CC27801A131CB962E5BB3764DCEF6
7EB57BB41DB5E12544C9047FD338CC591D2ADD6454CFCCF1E22EB4FE68C27007
134227DF4BC48122EDD1537CEE739FFBC77FFCC724A365772933B3D63D2147C5
740B8983A0B921D6B939B8B754CD1F66DD49E50F09ACB566CD1A9E042E659255
87519E12A13C39632C9F80C3660181C9627DD824F0DEE08D62CB4AB2BB75D7DC
B5149A6A5C25F80D03381D9150D904C641F8F176B802F6039419F316AA99A7B1
4C75AB22C40EC01B2FCBC128C2E04FEC43AB0DE04DEAD92014AF848597D10B32
40ACB4B932A54E903A073500C1DE37A37BDEFC19FBEFBFDFDC39B3BA6C4701BF
DE18AE8D8D45712BB4E679E0873993C154A8094C06C667F8450A695C1525B990
92D122389B968B34CD1378F1A8B5FDC33817B68310E2C32A030CD60F86431B12
6AC121B09AC03396988E42D922470B8917B43D1C0AFCA52B08FB0A612197CBB7
A2A456C7875069B38AA5BEC0CFD7EAFEA68DDBFEF887575F7F7D53FFB6A1C1E1
DAF070DAC53EC57C8B4C9E11081E644614794684CEC03A7209185161B8C34BD1
CF6E1D3897CC0DFC9A8C6A77725E7A7280887B89DF275B09DE9C78E289FFF44F
FF44D67D02D9D5B5909678C72679F8E187614ED127132104762CA3C494517EC6
963F5DAED173BAA7B16880720FCF452B102339F4D0437FFBDBDFD205A47C6625
6C47C5835229C467D309E0F7E92E30740C1FE0B2CB2E335958CCFBE637BF79DE
79E7899C88A5F0ACCF628135CD16C585540DCBB32181484113676D6114A33719
CD05BD39A543891B51AC8A373AEBACB36EBBED369218538A29621B64F45ED22B
04D830C6C22B98ACF4979A80CF9C381C9FF8EDE9A79FCEBC4247C9154CCB638E
39464457141FDC5E9A4A89248966756F57298049C3D626ED7FBD6EDD3A57E8DC
72CB2D575E79A597968C990C02EBA6165D8B9ECE29A3EA325868F9CAA8E9885A
BA324B3E262E4572501619523E32033CE58E64B28E2BFB918F7CE4BBDFFDAE4C
5DC1A244A9E40269544F47BF58311F417EB9857035B624E44CB280D3CB30D1F8
CEB9E79E8B0DAA78A06BE9B8DA88CAC36D6A4FCDC455BBFDF6DBA11445F9609C
AE0F1DAF6422DCB0237549E7D8557BD3CD9B9FF1D8F819E17092559F4EB95ED6
50097D88E6384A6C866051DF7EFBEDBD6CB725DD29101012A05A1BC6CD213F8D
0749540FFC71E6478A09AEAF6A35DC4CE6F84130700552BC535A7510B75B91E5
A66E87961DA8EAE7AA9EDFB074A379AC6914E620885BB6055BCEB7D821CFB255
FB9ECD217BB9208E82C460DB5492A06069F1F2B6FA3D979470D994B42E09FC52
2E3FA35C9C55C8F78CB48B033B465F7B75C373CFBFBCFA95353BB60FB6C645F1
B4E84981204C466E4F13CAED152C7AB42F7CE10B5FFBDAD79423954F202EFD8F
7FFCE3BFFEF5AFB1D5D54057D34E56673311A9DCCE3A24AB290D5E38B3495603
CBE131BB193824C73CA4DCF68C60AF5CB9F2F2CB2F576E835E026B56689DA860
C5CBA88E896F94B58AE3B061C306D937941E1A2D3BA0D0E45AB26409740C1F99
980E93650EDC4E24D75E7BED15575CC14753570C0925D666F3147BAAD8C6BF1F
FCE007FFF33FFF533904A820CCA9C9A243AC6C32599C4754FB82CA8AE3412CA1
5E4615C203CC10845A90CB991062578D855535E616942AA5ACC606D82BAC24E0
FA419490FB5EF3EB65141FB2D4583DABDA577751DD96670ACF69190E3AE8A03D
F6D8E3F1C71F97349403EB2A0933B1161A172137B222A44404A93132A9F94D16
5894DCE40B530A0BE5BEFBEEC37BF625967BB4132093716C588E1387E79C73CE
513C249CBE4B62E254CF3345E1C2EAB9AD197C8C332A15A561F1C925975C72E3
8D3762069860500E963FDF6BAFBD56AF5E6D0B1A53C8B3A82388DBE3ECC18CC2
0CF0B2DC27C6C17AEBD15CDCB78A4BB555B0435E7BED3585117622C177FE128C
44A1E7E9327E495A0747BB8CBFC283C014A02D3279BD6084F930AFBD363441A9
0C7F74D15E7BEDB160E1BC8A65E5B333D9688E4113C0188026B0E22CF69503E0
02511374A42BA4785A260DB6B4BD71A869BB01A99D24512E6AFB6123C85543EB
1978859CC9175B611E9E4784FFCC13456AFBB361D212DFB31DD1AC26F0F24150
317ED1588315FE00345E0957B38B82E7F04B855C6FA1004DD0D50A7A0707C65E
5BBDE1B9DFBEFCFB3FBEB279132472DD6E1F6F679AC064DE8C9E8E92411EB6C9
9A469C74D249DFF9CE774C46FC2ED603A646C950B976ED5ACA5C1AEFB423F1C9
DE7BEFBD6AD52AF5B13159573B1D199A416C15E065AD31FD8CD4886A9E15033C
EC38D4F4834D5655CAC00B2BA2E3B4712CC6CCF70A5549B899AC9E0EA71E6F24
FA30CE4F7EF29370A9E5079BCC03489CE6CF6A6B632676DA90FC611E91650DF8
02E43EE433550EB414034D14E376F2D9618780165AA9946EDCD67C60D1B4E2C9
A90CBC89D41934CCF15B97BA8F917DBA546E981BDFC105D97D8CAC5EF40A6956
E3CA5018D4C9E26F089C0E9F2A41224F11A31F34FF49B464B2A22DF79018A7C8
88A85386D8848AF1B236C8987178A058152E1805190D4F1AB038E1D89AACE965
F10B34041EA7ED3404961AB8F4D24BBFF295AF70BAD44D42B3C7FC30AB375848
413F83C360F5ACF2AE8460BAAD63A6B467277F88F7D0E2C49BB2189B9D37A63C
99B4E555008C49BEFBEEBB19FD70432554DE22501268E7AAABAEBAFEFAEBB994
6CEB4ABD8B4923A93AFCEE534E39C5647414F8573C8E84D6607EF827B80E8490
FA19BD87EB200AA1D161F7295580317CE8431FFAC94F7EE2D2D54DA932356F2E
9A3BC9D8B4986DA6149E4E0D70FCAA2DEFE84D642661CFD2CDE6590250AF0DDB
7DD6ECD25E7BEEB674D92EBDBD3DC5D0C23FD3A860033A003A05823C8DFF8CA7
B249E0EA65A50C61D6764DB7A0DE6A1818A106CE40AB19474D9B454F4CCA0713
410D340BF9562E6FAB0D20078AC556908365431721800FE07B91895BC6B6B289
8D57B45DCEFC322C46A801780DA1C579157C2FE7B14B995D8DAE7CAEA790EB0B
72152FD73B3ADC5AF3C6E6E79F5BFDC2F32FBFB1765DBAA68999DE97928E27F8
8D11517A00AE4BCD175B00992CA7E8D618F22CCBB4670C44071FDF241FB0F4BA
7C5C93456F1866600296F128993834A8A3AC0B211956D4245158153566C07828
F42464446BE6D6277774D92229B299E4AC5026B353266ECD4112FCC614A3CC3E
4611F09E5DCF4C66C78B24FCA1871E3AEAA8A3F821FE157F97FD3DAE4EFC09B3
B538FC37DC7003C7A7069678AA9B6FBEF9339FF98CEB296B2D094D21B293687A
E1BD34CB6AE2284B8D66B244273EBCEDB6DBCE3EFB6C4566D40D58A5AADC1F24
9514D294D5E104AA8B44C88D06784E25213D06FDC98DB5E13BA4AC7075830ADF
A866DC564414A9E229A4711A651D0E68EF5F70C105B091B9B1680BD36C84DA7F
E59557F085BBEEBA6BC58A15AA7AE39CA88C9E3A1F8BC2E02071B41DD69FAB8F
3B649CC9E2B00CBCBEFFFDEFFFD18F7EC491AB3CBDE395646D6055A940FF8936
DAA2458B307E6C0F2C93B49D1BE63259B54B38A9B52CE750E50E49C6B1AEF343
36826062C74DDAD712CD0A94D174D05ABB9906E250292E496ADD214D266B0217
4CA2D80B51DBD800A409F96FD902A81D4935C35ED9264BA84CD604F6396CEF31
0811B370D1CC7D96EFB970D15C18C4A55C9841835AD004C65AC78D34EC96D064
C633D238A51AD0FC98AC0D0B83B4AD600C9BB1D5F45A750BA7B2DBDB36248BC3
0467302A144DA1181673855C1EF3DC8426C88596772897F7E184F8B6434EDD40
032451BB15B4A10E4C3E088B90FE7013AC855408A11C6CBEC296AE1583B0920B
BAFCB062435849A55E4B366F1CF9C31FDE7CFEF99757BFF6A60D1045EDFF9BF9
A7266085C4030F3CF0B9CF7D8E89567A355C1AC94D52E3F80ED3789235796DA7
4D80E9F4BB405555F999894D9C28AC4485C2800FE7569A009E3DDC591E795794
617BE0528A72C3C6C5596080E8DE7BEF85C084F0C543D118172AC9646D012975
E98BD00551A4B48383DA384117BC6E4F5FECDF4004B6CC32CC808A6F4CC61E4D
18EBFFCFDA9740595695E7EE33DEB96ECDDDD573B72D2A82A228E6E5F98C2E43
125D0BD09088710271888022623B3109A8382193222046511CA288C664496284
0551630C41A501ED869EE7A1BAE65B773EE7BC6FEFEF9EBF77DD1AD0F7BCCBD5
1655F79E7BCEDEFFFEC7EFFF7E96B285E15FD9507839F3C26FC3CFDB433E1D8B
2D4FA5745D829792855EBF7EFD29A79CC2CE40F61FC8F8173E21EBEC36A31EB7
997E3AB9FEF18D583BB88478337EC388C9269294228C98B5EBAEBBEEA28B2E12
A205A1588AAD7993F6C68BDC4822983FF02031D184FB14FF826DB42C4530FA21
9B2B13DC58C0CB2EBB0C1A5FAE6FCF53931CBA4C0EC2C6982983937227F8165C
D3864B312726C55EB91463BA052D4157CDC04D199F984A66EB86C00996A81350
0A859B96E1A00C7CC6BF92C1B30719095A86F424975C72C9E73EF739C622F0C2
10B023F293F5B17B701CD3B603030311A716C033929C072690A37DE3B944B0B6
7B21E513C9AB26663E01ADDD073EF0812BAEB8224AE710FC419680B9573C0E49
AEE44C2E6109BA08610401B2B0E5861DD04918B8A56ACDDA91679DB06170A80F
F792F525ADD1A6F1AB37AA32788BD0007696D0428B69B4D1445ABFB8156D09EA
AA516F22AC75CC5C1AC74D0207B1B5D29640B3DD66C20C9479DD0BEA41D8083D
D7701041EFB71013C491CE26359B71A2BB0BF030A1664AD2CF05FFDA4BFC38D0
1FCF8541C1F5739E5B705DF8A7B08290B7607232DAB6EDD8A3BFD9F6DB2D3B0F
1F19334EE1A2751AB1F48ED597433F4C6A7EDC5FD2C6B0E268A7EC0597483DE6
1846193A8E8E356A58CA6F02FA10D205B68631F8938647C90EE13DD79897938E
C02285145510CD0381AD3200808A940C199235E2F56D1499B8B962C9A8666D57
4C707D1B376E2492906A93D1B62488548A66E4D22134BFE9A69BC81C41C42631
96BC3EBD619C2F76427462027C2BC7BC30D096212DD4E6F841A644B1CF5B308B
B46354B26CCE6682981CBF49CAC345148A100E4BA9840F7FF9E5977FE2139FE0
EA9F7CF2C94F3CF1846D75C83641200199859877834F0D7DC4690C76DD9C0916
5974C90B89D3C4F09311809376B17BE98809A24EB93ADC6C1B3AC9AE57F92E32
A112C3CE4845B02E225E446B5D70C1059FFDEC67555A46F6D369A0E4A2E94AD9
D3A43158C18DC1BE42995217B38D4B2D941DEA42B9882510BAC0134E38E12D6F
790B34A394E8173B99B6C9E782308103858E0FB20B810E171D617698DB3D1FAC
07D8306AFCF5E69B6FBEF0C20B996C11F414A2C08F7CE4232C1BC83DD8C8638A
F57CC09293125ED2D590013BAE213027912FDD0E99C2B6842550F3B243FC5242
F77035FA8CF44C17BC8E9B8E586038CFA056EE767E4C602ABA89EBABBEDEFCEA
D52BD6AC1E29F716F53862A7D3ECCAF3C9436BF497C7E62CB6EFD07DA6BB2309
340A365F4D5581326F36DBCD4614B38DCB6573B8E3074926EB65826C18E40C8A
545B828CDFD0BDC7BE8783AEDB8BE3A693B4F5D4195DF0755CA703CB8993A666
B40E9CC46DFA6136972D6733253FC87BDA0CE07FDE6CCD6D4799EA6CB06FEFF4
E6CD7B7FBD79EBEE3D072B95AAAE612F6E090440280F82D3C1143C8F95948813
333E8F4743565584413C271B6F22F8348178099A4E59500291256EA22421A58C
C189F01C10220C1052BC24AF0113DA7428F17B388837DC708314BDEC6AAD7854
78529C4AD28BE161F95762E5D9EAFB777FF777F7DF7FFFCE9D3BC5222AE31073
DC21C36B9BC75366953B293D5A3C6FCA8DB2468674903EFCAD38DD36BF8D5080
D9A576DA06BC478EBD3DF50CD7C569C7C3F381C5E2C90F5DEA1262FDCE77BE13
FEA3DC2207ADF199A174848AC749D99760C7F04E29ABD20C30834F20B0B258F8
E5E0B9D650D92EF799995CAE1DD6EBED6F7FFB1D77DC21385A5A3E29C7732E12
7D6136E23231C2A04FFAA1EC3A1835E38E1D3BB8CD5434D8B9ABAFBE9A9C2464
3AA42925E51C3C713C4E971B2B439D9EB6626C6B34F6A6C195A0669436C5252C
81846BF83A7E96E38E11B5D00D17862229B7081938318E220C7803CEB3905E71
EA03110A6CFE90B60952F8B22A83B3813FBDE0052F78F8E187052B652740541A
D54A0F8E321ED3F6EDDB6D2CC0EFD3D1B3D8CBF621E2B9A323167B3FA585070F
1ED9EDB7DF8EA513F850377648998A6521583132B472E5F28181623E9FD31582
56D31CE90E2E8029C17A1D07B303EEA025A019E88A09647DB45B1D6B6866D4D4
212FFE433991A6207555A2A1474910FA591F5F970DE0DA671AB004D9B0AD9D7D
DF659DC04CBE6C9BF41556D2F53AA3B6230409896AE10ACA6D04995C3E57CEE7
FAC3B0E8EB2A021C44B719C3E1CBD5EBD923879B9B1FDBFBCBFFF9DDD6AD3BC7
2626F53D2CB26EB6BD97076171919E2F9E972069D97DEA2F01A4F2C5543ED315
36C440728974496D6D283F130E23ADFE4C0A097E9AEFB42B0AF8F7F39FFF3C87
0952312E5BB68CB01FEA5CAA2099EB47E83CC55BDC057C35DC4D565E29FC3814
CCE9E35F0E18C79DB36C6667BCED09833460C2CBA40C5F9CA86E19AE40D165D8
CD476385594258C73E30923311466C01A5B2D84D4B2BF197904CB01EC2B2B34A
1B2CC555C71A41BB7DF8C31F962B53EDCA3630141223449F4E52318497304091
F2001B11850D5B0A3264E313F3A8E6521EDAA68BD68B4A99593FE9ED92AC85A4
0B5AD6786B5B32249815BA53EE0731B82A2DC08AE36373E08837212E86B4B97A
E98C30460CA270F99B642154A26B71648AC2EA82BB08229315F5054F26352FCF
808CDC226689412B670608885BCA6E425B221E804CA0642C6C4F5EC51B200F08
9C996965655820C84C3421B2BEF2CA2BE3749E5A9276D54AAE4F10E5AC519D73
CE390F3DF450C5F4ECE2CD924514E6802534FE7C1429130E322FF369F1E05C0D
65C564F443E39447BAFB83E60BCB7D85F5EB568DAC182C68DDEE8519BF55256F
44279268343A310116C0B6043403522EB60BDD9D2FD23D0489196AA9DB84F17C
810F15E0343DDDB50C9383731C3859C407610631412D1BE0913547A99E67A92D
41CBB09FC62A86EFE2996414EC48DC6A636D5B2E6C49D0CA668AF9426FB13010
664A815F307D6C7E12F62651B6D92E8D1E693FF6C4815FFCF2F1C79F78F2E8E8
D8ECCCC2F2E658EC7ECA8A0221218C98559A8AA1222347290B5D8CC3B8147833
9595DD4D263062E24D6C1A3B994D4228E36B5EF39A6F7FFBDB36309452278108
6580B022461B3CCE8135EC56A5118674FC080D17BF9D5A9B0F0B1DADE7C318B7
1D76E8BDEF7DEFA73FFD696681A43D88CA96A12D1B9E2343A8CEAD275042D2FD
7222E67789CA49918C37D7078BCCA3A4975D59BDF54C3ED272723F6C14844DC3
4D75469E132EA54A7C0D607625E6EA1CA1726F210CB2A3A3632618A9C0ED40B0
0A01807131D7E940E9376DBAF4D65B6F850F53EE19603543C021E2C64AF33455
B35869C26C212E38F978277E4F3E89389DAE257AC42E1F091F3A3D08BC07D747
4003F5A4D2EABF5AFC45B1A394D0E6D1DECE6F3B126787897E7C0462F7BDEF7D
4F6AB6881810FA09F244B6838B2F94E28C587959BBA590612C1C877DFBF6490D
462A51BC49D694782A9646558A64F041988510F7819655BAF0EDDA127E83D04D
BAE1443A6DF963A95399C67719E4494B43C2740A7157B3E8121A5C8E3AF10567
9F7D3616967964D96E2C02876832BB4A40883D05133683251F5274D921119D06
3E32AB88D1E2C34FD442457B669FB9F5CC2677BC813CC74F262F38E579EBD6AF
761248BBC94EB4EB6494A3D83041449785368FD180D48A0D67B52BBD66A25B79
0035E49F9E9093A40943B6883B86AC54699E09C73415E6DA5872CD4BEA353D07
6A2E72BD362EEAFA0D3DF046239AF4A803C76DBB0A6141D309542E9B2F95FA0A
F9DE4C580A839C2E1D7B7ED32F8799BECA8C3731A61EFFEDFE5FFCD7E35BB7EE
DEB37BFFC4C414FD2196039555C9641049FA13E68125E5C0137AE9A59732B9AA
D4F161D1F820D306CA10EB4A92A0AB2423967EBE20516CB0E9D0331000B6A4D0
E5B50B4ECA9A5B275CD0CC0A10AF48A122D42736633565CA8D4A5D2BBE07EF7F
FFFBDF8F78916E8A8CFC628599C64C467E89C3DE0548C3FBDFF6B6B77DE196CF
D71BF54C9869B6CD4CB0A9C9AC71D05B8D2641502C2832E12F279783C884D0D3
76073BEE2DBD2D1600844C4650AB3CD5D2D806F3456EB5B925B20E3F8F1E8F6D
8C3C65B750CC8C8F4D711772391DBE958ABAE2DA68D65263A53315279CB011DA
1007812BCB80E86B5FFBDA45175D44148DD8F94F7DEA531FFBD8C748652C94A8
F60633A12F562A9DE5749C37DB160EDA09FA1478CFDAB56B77ECD8C1748DA0CA
9638F3C2A4C6AC1F152841D0F83A6222550AFD96AD7DF6B39FFDD4534FD95E6D
94B2AB4B1F13ED1CBE05760E2BC38895781851F1C490D15B4F0C0114EE9CF338
F15736DC917A334A07F6E297F85E865C4B58023900A2D6E99109A589938E0352
2647C4EDE6A251701D83CE260E84286C223A78E577BFFBDD5FF8C217549A36A4
86E551216D6792CEFC5A4CF38A93CE4723BC64C3860D308742EC2A9DC937DE78
E3A64D9B64309134FD6323109BC330FFF0873FA4B7C59846A671DC7DF7DDAF7B
DDEBA4C12759888AB2CB0674D5692EB8E0829B6FBE993D25320EC1E0898F420B
C31F822558BB6E15DCF0422187C76D35EB768F0E110DB6C9F7521E6C5E3FF08E
5355DBDF1EE97A2F4992DBB40447A3F5580000B35E494441544E872D872060C7
F51459E435B7B493784E5D7BFA1E96BDEDBB91877F1185F84AF79DE92C5256BB
E39EA6A3504ECB55ED201F6432F942BE94CF95C3A0684621684B1005E520ECAD
CC385393EE962D87FEF3BF7EBB65CBAE9D3BF74C4F5519D0C7860D0DA24213EE
A42D90CC6B8BFF07B9A5609366074BC709C64C16416C988A815A645ADB9E2D68
6F876453E58BC4174CD2BE7A3F1D354A1BACCCCCD40F7DE843322BCD766BC43B
91B32FB968126A0922D6B60471CA4E61270348F78943C4AD813DA32F0FE9252C
5BAAAD7CF0134F3CF1C9279FE46C98499C1A4F9F9A20A31505FE6D91415D1DCF
EB8870DA757846BACCF3B31594553D47A59067F19D451931005156368D669376
4606FED137E42EDAF53101AEE88EF75811CC97CDE6EDC1584667555368303CFD
A8EB1984DAACAB8C89B791FA952A98F9258805D68B0680918DE808C92C519972
5FE58224C476E7B2CA48B66A314D44DBC90B46E918ACF98A5552E776AAD14907
7093591AC2A44CEF98EDBC70B4D079E79DF7E52F7F599AE9643C0B29EA181ED9
200A68BD6BAEB9861992AEECA10D48785A0C8CB2189FD261EE1DD81C0414FF9E
7CF2C9B8259C4FA153655CA24C74CC0880E68AED2D74695D43494B59E20C1F0A
D575D75D77D55557F168498D7A09CC8FC47CACE949ECCF9734AF91608ACDD578
7CDC1EDE4CDE43019E33DC26684A3851E807409C885FFA7DEA040B5A02829B71
B5AE9E41BD9501CE7CF179273F67CDDA9550C1D92CFC30D56E3518104B1B1D35
979C2C3537F56706D37B52347652FA1DF3F1384DA19BCF2AE9CB637C90181BA0
1C87409A8A2E0FB8B1EFB57CAF1D0671A8694AB1929D4C6C3E8B58040E0D0C36
3E1865F319FDEB4C5147037ED673B37ADAA5172499DE30284D4F3B33156FFBF6
F1FFFEE56F1F7F62C753DB768D1E9D161486F8671463699113F61EBB9A2873A8
84E6805959F624310F6ECB4997EF6F4FDC93CE4A71C2E4AF76CE44A5306BB914
FE93B380A4818B66833564965729FCF6EC04C929D112501FD253E4C0481E045C
9C89EEAE315CBC252E083D1BB82C0F3EF820A96703630612950C9B65E9E92DE3
064E3FFDF42FDD7E874AB1F592B296216572A69852233EE8CC33CFBCEFBEFB1C
D1EFA20278B40417C873C2F60D6651789E6D4A6ED31694E597D901BD5DEBE716
8E8C68BCA076995BBA7453999D366B5A4F3339F05F1473FDB8388486F84E2765
0A23F72F9E995CF6541C1B376E7CE94B5FFAAD6F7D8B6D59CC24C295965643BB
38A12C6A5F61A1606582CB27035E88F391E458D74B92FE5C34447C9FFFFCE7D9
E44C8A6067EE905295BAD804748AADB213D0223A2A9DEA871BC3C3123620A052
6E818CE14D7D3D6D99F0D4B87922671087DE7AEBAD1CF3C93A0AEF8A7EFA1215
5451AFF0BC7029CA3D6DBF8423F82BD707B7C75A3DD78AF00C09E1655C0F91B8
175F7CF12DB7DC2234FA1409F68E4A4D4830154B337625698F82F04E331262EB
0D61C494100AE1A5975E7AC30D3790208C474ED65C1893187A12F5815FE2227C
6A1E5DF6AC2D3169442D941D621D855A0F426B7153EB6FEF29179E75C286D5AB
576643F8D366F79D58804392FD576929585E727D4F755C0DC144F0952822ACA4
A4D429413BC62D36D7341771E81DC3D4D4942E0F345DA7E5798D0C2C8106983A
F9629CCB8638DD7904BA2116D9093449913220564D3DE43AA1A3E0DAFB9E1E59
E3BAB95ECF2BCE54925A35DCBD77FA7F1EDEBAF9B19D5BB66E73923C49CE99CB
851BB175EB5662C7B16B575E7925DC17A9FAC027F8E4273FC94964F678734826
BD04724C51C15147CDF718BAF242AE353C55CD850BB2CB1717A42842814274B1
FB140C314BA24364083681F96F7DEB5BBFF18D6F08390A39DC24445396672C46
1A17B9F0C20BBFF4A52F099191328DABB8080B6C745F9C94A381977AEE739F8B
98804D6DB006B9AC1E91F6E2979CF6AB5FFDEAE8A80E26D66FD8B06BC74E2F1D
7B25F76977710B5F99D45C4F3BEDB4871F7ED8A15AE70D319C6791846FB2692F
6DF67C65A1BB924E4F20A28F5887A1FAE1DDC4781B9DC44BBD636C8B85623B6A
76581C3CC32DDA6C9850A0552CE6ED718C7CBF208E38550D36C02EFDE307686D
7C56FC47D21E70595FF5AA57FDF297BFA48A1195EDA553A7EDF21A0325EA2FE6
E2591762E560B1A624276DEA6315A86B38220D92508389D36A6351680CF003E1
F62297BC19BE4DF04276A6AB8B45846A971D004215D74E87510B0E58A59959E1
6F584C97E124B886128AEB7CEAA9A7C26B60F9842B26983FDD5D9AE2DE84EF8F
0C2DF307E9603139794619470F220EE3C113CE54809C3D5B0C968EC984204F99
24156EF8852F7CE1CF7FFEF32EB817C26A585365EA13FC93ED7041B91027EAA4
1C7C8217600E5712C44F0B409A6F0970BC219FF6BC2661B58203D4532EAE5DB3
72D5AAE5A5829EF288D3AA878C59C056D1EC940761A2969581E1A0B7EBCE7DC5
493BCD8748C93AB2D244B17C0591FE71A29B8A634D3251F71CC4AFED6C06ABE7
168A3A58299672AC6967435F87C19AA22834DFE3ABC48F237DE45D47578FBC6C
8FEFE12CC78D56FEE081D9471ED9FED8E69DBFDDB23D8A8E13EBCBD05946D292
1D65AB849C23EC8B08A1B2EAC6E2A93CEF79CFDBBC79B3ED3FCD7F49564DCEBB
A477842A8D3E87E0AD711B575F7DF5A64D9B4493524E24A9259CC114665A08B6
74910B594454A0BDB624BBE96061A62588C7112F2A4E59C8D83948D9A3833E07
45AD9D06EC729C219A26A76D8363AAF65248A70CCB638A4CD2A7977C5A873BD9
6EEFA68C0A0E84EF13C00F9D11192D49F5442757B899083DC63AC766773CC78B
922835037A02E56C55A7DD9FFFBCE76F7ECC30E0170A95591880383D279D2F95
79BF90067C29ADA29B9268124181F71369830D60863A49B944F027381DBFFBDD
EFA46B4C14873DE156596D4A2C110B5D225E9CF9BE589E5A62026EF6F9E79FFF
831FFC80F4CB542BF69BA53EE9A6DC0C4C9E7018D349279DF4F8E38FF36CD8A5
21665D1800C101A7A7AC2CD6111A6C69B3949D9680D4EE91C1419A302F65018D
167C2EE975641B2707E6D04E53B8B1F8648DA58346D03D7E60FC6ED3D2C91966
FE144FC756352F7DDD71C71DEF79CF7B684BB82CD0DAF00179DB74CF17BC4F5A
7D95F21B46E97411CEC196C383EDC03D33DC46D08638497803791A71F38C6BE5
60734359FD639B31D94778CEFFD0EC90006A850A454C918EDF07CB23CB874646
86CAA562ADAEA352ED711BCD653B925E4A8E1DCF9DA2AACD43EBF8AC5D7EA954
8FCD7D2496CFA38D81E31EBFE1B92FF8714DCD579ACC7A2EBCA25626EB660227
9757B96C502886B97C9009E1B0FB3903CAF0828CBE7AEC688412CEBD191EA3EF
23C8BB3EB606417CEED0E1DA6F7EB3EB89C7F7FE6EEBAEA929CD29808D800C7C
F9CB5FBEECB2CB18D63344FED33FFDD35FFCE217A2E9D6AC5903C9E772D1425C
71C515975F7EB954112081108F8B2EBA08B1386711DAD8745BED4AE7A3637188
DA6E964ADD052942B0D8C65E6E368E71EE109978E8195317B12F87B132841F6E
3E4C084FAE10A54863BC08899D89622E88FE34CDC077BFFBDD73CE390717176A
74D11E8C803B8046A733A32256A6221B98A21AE2956CA76D4BD2E9946421D3A4
02A1F623EA8748AAE34D7D2A05CC24E97C2BA19A8132C283895B4A211690C947
3FFAD14F7CE2131081B6CE76E8D9A75A3EF40711BA762A42CDA85E2E95A76626
870707F1A673CF3DF7861B3FA38C6F58999DD15CE84E9C7A408A97B5C370CEB4
227BAD9D438426C226D19767F842EB67B3C0D36DF4CC846465F1E64BFFA7B29A
81B1DF64CB8042812D79F0C107BB467BCA8B09254A157C6D52FAE1365EF9CA57
22F885E2A059665E2B499B5F6877A9E024F0820CB17382DBC37282003D4576B9
ECB46ACF7FFEF31F7DF45156A5781106AAE49CB23164025E26EF05DE80DFC3EF
5EA262AC16E25913574052AB76EAEFB6DB6EC34115662EBA05AC0CD9B84C566B
E8202BE38C304DCC6A076D0F2B1C02BA5D2226502990890E8E38DD320B411A38
080AE2AD3230120788FA5DD81511E6BFE94D6F829EBAF9E69BB91A62024505FF
4196808380CE3BEFBCBBEEBA8BADE6AA939684C8B557AE1C191CE8EDEB2F15F3
994A653A930D3CA7836A537307A6DBBDCACA468E261D9F572C41FA436A2D5C7E
247509DDE33B9BC476A383AB8989E25AAC665DB79E0963C4047EA0B21988AB5F
2804300C61E0906F391B64F5DF123C42A2E14EA6A8817366CAD9593FCC631FDA
EDFCD1238DDF6CDEBBE577079EDCB227F1427A2174EDA98604ED2D50E0AE6A8A
A8331951479491A40AC883C020D8464FC9156C7FDCCED5C8A9274801270E4AE9
DE7BEF650A0B911C84C446BA43B993F1857EBACC0C20393F897E39325DA56CC4
54B8D2F048F74898110498207745BC29D687C5369B4645CEA0C0D061B81B4D53
C46529346A43CDC19B3972E8B0C494D060703155EA2DD189171010816D1C55A9
0586494C2EB77C136152724EDEF18E773011C6E347148A4A9BD93AFD1A01E289
4E4CA02D96A1AD34EA43995BC91C9B38DA633000A36347FBCA7DD333BA628E07
C830E608DC148CD514A789D1092D108CEDB5D75E2B34794ECAF9DEB546724858
2E1667C1A69A12974ABA55290A42AC6F773938BF474FE9F1EE0C73F2A5B140C6
B4726FB81F52AB50694D9F193D193D48F1954E6038D1A4B4248E8D469EDCDACE
DC49DF52B6116E223E17997BF12F7C96DB6FBF9D27CA0E23E66B34080D9D14DA
519AD82EFAD5673EF3994CB990D2044E9C14A6BAB05278CF2DB7DCF2C10F7E50
66A00A3904735FF474F0713924B265CED375C089DC53D1F374D1A51226223E0E
2EC8DEBA24E52C62715840C9B80D6AA2AE521B150D0305BBAEB8843DE81245BB
B1282D156A65BD61C3BADE7211EE7636F4A6A7270BC51C343B71A2F2A5B625E8
360388F4DDE383CC2C33A03B063ABACF9139CCF11C4B90885A343FE0CC26ADC4
813855E186657476C80942D777A34CD6CBE5DD0CBCC64065025882820EA7F48C
62276A6B4B00C985F3672293C0F3A19AF2355882585B82C71FDBBF65CBA1A79E
DA3F31A38F216B4BDC0EE9F32295BF3068F2800B508DE6939C66CC0110EFCFF5
E99A91DE65099CB96C6002EE1002121B5F7FDD75D7C103900CAD6466F8036E86
3C42FC0D76D00ED3554A0A445F8748D9209D174B4BA0E651A30BA091274EF8E9
F0FB33CE38E39E7BEE11678B4A86812F19497B7B0C08B032E3998B144A5A63E3
79C220643B14DE7FFEF9E77FF5AB5FC5AAC2633E74E810018DB675E1B377540D
EF49F06DCC48F0105E73CD35F0F785569E428CC763C10D0B77D75D5F8727C522
F5C478053E82966FFD80595F4FD4CEC22ACC56EAFD03E5B1F123F97C3636BD41
3A300FB38D66757878706C7CB4D96E14F2F0F7E1FFC2CEB54AA51CBEE5F0E1A3
6675F22C13C5915ABB4EB70B985D775970EE4C92899935634AD4B6F952B6A68E
5E785AC5D3BE9C941185A51BEE87F4317AD6A0151955CF7D75CD180095D2342D
882C52696C211E37ED1F1F4174AE6371922CD6E5C0988907093FBCFBDDEFBEE9
A69BE8D4B0930BF706F1FAA77FFA27AA636578847832550A53639595FCA33CA8
5449CAB8392C45BCFDED6F4700CBE145D2EA45BD4CCD15A563F3B820713A678D
8F493B217E992404E496A8CAA90E106B420809F116F4A4CDD5E5CE655990A5E0
E197BE0A5A174693F2A4AC030B55A26D6BF1FE4B2FBD14C24F5B1EA7432F0413
625723ED0CACE473841519DFCE33254631C55F68D53030D8B76EEDAAFEFEDE48
034775763413CE51E8E2B3BBA9F4267359316C03301744A401A31D7EBA344744
4FABCB9674CC55E4BBBABBB8ADDC9AA3B3439AA52E08BD72D6B055C32404DABA
98DC35ABDBBA449C444EBDDA68D5E163C51DCEA24CB9DD4A9A51586F044747EB
5B9E3CF0C46F77ED3F70786AA23D32320219E0328AFEB5B576D77ADA591406C4
D2BED7A5F1C533A00FC70118769B5817DFB0B8DBBC139C539A67FA01927510C6
37519DB42BD29463F7D3481955A0E46C0491628F3C5A578E48E21EB200B1C158
2A1952E364E25A10A26F7CD35B7EFCE31F1F1B1DCD983AA5261431036B0F1F3E
D0DBD7872F9A9E9A5A6E167CD63C0B5425EF4172DAF4515EF8C2176EDEBC599F
6265F5B8D200B080297821B6B6325FC1A00C0B847B0DC32C3D68D25E7B6E36D1
DC150811359F49262CF99EC612C451902F64C6C78F96FBF2A63615CFCED6B432
CABA533353898A7A7B4AB5DA6CA355CB66E0A8362163C562A761249BC9F3D035
753254192E5C72C8A43656B7B0478EEA48BFF838661DD3FCFEFF9F25604919CF
8E55660E074FCDFDC0975E70C105F7DD77DFD6AD5BC90DF7FAD7BFFEC1071F24
5184BE5B93C197A55FECFAD2049BA4A38538A943B836878787C965B8C475AEBC
F2CA4F7FFAD392D063065F52F614A9E73CE7394F3EF924EF4D40B4AC5FB1AB85
B307F003769CD835C10B50ABD25790A2AE4A8146122CDBA31DF812788F045B76
A6C54B874CF1CD8CA8E274F6008FB132232711E74A1B39C3733537DE97562CF9
6AD6BD701D1249AA34472F2CA7D83522469274921FFB2D9822206A4559C805FC
E6C081035DDF22C030820E98F8E682DBB90E1234B1FE615C5AF3BC03E5F5EB56
0F0EF6BB2AC69D4204F43C82B933783B121B0B247481C8C03609E9C7995632BF
718591C2940AE67EA49377F632A68D39821970BD162C41984960098A414BD782
430707138626B5C77080E0F07A710B5169336AB5034FBF077F683B99662B6EB6
825A233876ACF1E4B6435BB7EE3E78786C72B22971F929A79CF2E8A38FF2C888
66174B208F4C175ECABC0CA9ED35E95A1079619D61EFE1388AA3433964A25C92
EFD2786C4FAAF9F8C73F7EC51557400CF07E1C3AFA558C4E24D3CB43CA16078A
197E49CA68FCCB0886D00349008891233ECDB120857CB1BEC59FD7AC59F3CE77
BE13B7C18BE34E28451236696474A94CD073D46E3B06E6A77BD16BB5DEFEF2E4
C4440E8E0BC208D824984033A56A6CF4185596DC95201B29990EB787C953195D
4BE702A1D0B7BFFD6DFC8CFB90CE69C61766355DB60D6742C389DA8A74433BB4
4A58CC667A340F498267869F1F22209DA98CF5F517A76726203CCA2494B23956
266B33D58981BEFE8989B14D1FB8F4FBDFFFDEF61DDB104FE0F9023F80AEC00F
AED2AAF0F0D183B96C8E698D66838AC338594EDB3E005255FB235A02EE251BB5
EC205DC829A90DF106ACDE6B5EF39A471E7964D7AE5DCAF2E597C0C50B140722
423E3BFCF0D297BEF4473FFA91E0F159FFE128B7C52C016B5932DF03624D6257
BB515CDC226965A4CB8FEB0B65933296FEAD6F7D2BB69E5A0F6F664158596DEB
947EB6E4484F032359CE0650A683815C6C04A40917AE6B4D8295321567D8119D
CC53210D2E7827429C2F7EF18BD4B344B8B19C28BA40F62549B902C59DC4B93A
EBACB3FEEDDFFE6DDBB66DB425CF7AD6B3B66FDF0ED3FE8637BC81AC612A6539
9684215B5E893A65228BF4B41225D882345FA8649C11CB892B56AC208BA44A47
52531FF5F5976009101C877A3A4DA4C9DDBC0E4DA6ADF1554A9A62EBBE2E83D1
F5B3E7A8B492CC21022AD5FB919801311E1466CF77433DDDBEEDFAADC04FC28C
0E02727EC37C36C1C94DFB930353CD2B40A0DAADA8DDD417CC84705A7D981C04
B4B55AAB5673666BEED87873D7CED16DDBF71D3E32516D754867B1FEA79F7EFA
030F3CC08C102B3A52F511ECAC50BC6CDCB8110A171A50BCE3052D013B48283F
CA627921FA8B7B218011270505301A60142EFE2E5BD858C122D2FFB6DB6E83CF
277BCA84FBC5175FFC95AF7C05F7230822F68E28430F878BC8E3085AAF4B6C98
06E4D9612A12774B3C854DF1A2E68EA9E147FA074C5B35A4DD94DFB47E6FB54A
BAD747276CB2B91C278268BFEDD0A142B158ADCC0AA0D12E633035D7B1C47C6C
295FE0C8BDFFFDEF97F930BC690E1097D0C1207606EAB56605EE8F0721C8D4EA
0DCF093361219B29877E29897DCD8DDE44CC58822508424DC2BE77DF8E998A8E
C7755D3EA30E1D3AD0532E85A17FE0F01E84A6307ED395C9DE72AF7EFE66647C
6ADFB01BB513950C1A6E263C6E2E9BD795F45A338A75522C4E5A569620EAF038
EAE1C36914F9FF6709981610D60495F2F5934287C6805BCEB4202B84A232DAE9
30EE252C01B699A034C82E6CDE39E79CF38D6F7C838D63CC81AC5AB50A8A9877
BE34BE5EA5ACDDA44D6507A3CDFBCF9FC5C97ACB5BDE0269A6B2239A0D6F637B
AD440CCA6A3827B296E22EDEDC35D75CF3D9CF7E96368CE86C5E5C52315DB72A
07C34D478A33B7C6243EF3BF2AF59248D2C0D413EEFF431FFA10E493A50E490A
759D2E5922A1FD59BB762D6CB36C1C5B25E052B10F08928FE725AD3C597DB002
5879E9E6A3FD8072C1B940EC351FCAC9C7910800FBC55975FFF55FFF25EC5BFC
46FC89988BFDFBF7E2B3BD7D3D6BD7AC5CB66C281BEA661A980058021B2D2A3E
BBA8123597365554A1AD16B58DD7EAD5215662AE31383EB5C9EE47F37C2C178B
01317CB040FF4F3352E4BC96C67398A633C613048F7A4E99164B257A13335978
81FA80B45B6A6AAA323959AFD6BCE9A968DFFEF16DDBF61D3C34566977B2372C
C610D7C0F97442DF6D57D19891C35ABDF9CD6FFE977FF917A233EDD6C86ECB67
B43CDBFB2103380277DF7D373E7BC20927406B75813B59489359F012C58A0F81
AB913142A255FC274134E21620E0D8BB772F69F2D80C8CAB216A849301C30F25
204EA4EDA412E9C42AAC247FA4A75D9C744A35DE431FDD2E8B4A6B2D635069AB
82B8C261E2E0100ABC3261849332EA4BC3801DA9409EFFF11FFFF177BFFB9D23
27075F396B5E92F0921125D75D771D3E805D213A8AFC2DB95C015B1E069AC269
A6329BCB147593A19BF5BDBCE7E6559C8131C0E2077E318E5BC552F8EC13D7EF
D9BB7DFFFEDDAC0D1E3D7600FABDB7DCA39CA85C2EEDDDB773DDBAB5DB776E0F
0C8A0096BBD16A687A22DDC7A805A2AFBF8C1D456897D1A63767120E6C05EA04
6E1AD2A6352F629F66946832C53F8A25A04FC7540FB3CF8C2B2101D0CE8CD738
0E09126007014264681BD4F92FE16CA07DA5CF4BDB23137B2EB9E492DB6FBF5D
E6532F781D9911CF6608112FEEA01C3666BAD9492B58029B6451644E7A20393E
01C2D4D55BFF8C673C63F7EEDDD08F4276C82FC5373280B071994CC753DD2F68
09A274E4D3FAF5EB39CC80D15262689D18953A293B3CCB30D27C6BBBC9DC2637
ED40E6E9555686076A8821851C72E996E7321203463E54CAAA0CDE113A96F996
C04D792F9861E3AC3A76C9210441B00F2BC225E5505893BD71CABDA535AB578C
8C2CCB65020E30F7DC9867B59D8E62EF60E19DE38EB09DD8491679F9CA495173
54F89D5664C79D131374FEA6B3BA58072F13BA70DA3C3F817F6F2C8197D3F922
486F5B23C313F9ACEFAA42C7AE782E2784E3BEB47BDB888F8D4F8F8FC10DF7AB
35E7F0C129588203FB8F4EB53AD46C946D049D3FFCE10F5FFDEA57DF73CF3DF4
D6D9B5675B02FEFB177FF1173FFBD9CF88FDEB6A69B22D813DCC43F69DD3A248
E3C8D5A0A4C939955E62493CB2DE20CCF3B6C0F326ED51DB7CA76C93C4DF5FFA
D297B0E32290768E6BFEC9C5055FFCE217C36920E39EB41174F934D406420D29
C9253A6775F3A2BAFFEA57BF8A6017DFCB48543032AED55F263503793A4750B4
CC4691218F69221C06386537DF7CF3FBDEF73EE19359BE7C98E5DC42BE3CAB77
C5CF657471BFA7D4E738814AE0D2E0DFC0F77286972A13477E657672B63AB976
DDC8F40C8CF3184B7989D2CE72B1943F7AF47033AE9DF49C139FD8F298BE896C
303E39EE39BAA0A787FBB5DB555D4C767DC7E73984BA33E6B763DF7C4F4FD163
078D26538F9AAD56B31DB71D95FACE7F8CEC109318CCB2498587F3A049364250
0D8B93ACA672C2061D90A5313052A7C29A639D65102BBD06FC067ECDD6AD5B05
63BED87548CB2CCCAC443E283317B3AB8F41D29D321C941E1085091A1C7FE2D8
2FFA2F22E8526EC5CF679D75D6CF7FFE73BC4D06531317888B40B8F19E57BCE2
15DFFBDEF7E87FD9F44D0B6687D8AB8C379F77DE79DFFFFEF7890EE46C716570
4ADBB66D53C6E5BFEFBEFBFEFCCFFF9C87B60B62AF52E4E571F936FD92BC6D46
369235A2B72550575C90990126C4A0C7117F307E272D1D3E7BE18517DE74D34D
4B6787B850F6200A359764DF56673DE5FCAA95CB57AC585ECC67F1347062E0C1
8825E0A1EDE4739339D1805D52560BCD3176DA9A5D2EED3873ECC8A0CB12F03F
4D2EC8D79620703D33CDD8704BF8A1D73627A86D865F461D33E0BAA197519EE1
2F7295AF172913694BD09E9E6C4C4E56A626EAD0C3F59A73E4D0F4F6EDFB0F1D
3C5A5309799B991C235980B266BDA9B9D921DE189D1546518981C92F961DB239
B258E995BE3031150C8BE3747894B4AA60471088FFE0073FB0296768D4C90125
CB4E5F1BBB498F907BC4B17DE4199B1FB5D8516362DA92210374E705EF0E7DFB
DAD7BEF61BDFF806EE1CAE0364927106542EFE046D202008A1C03189788D8D9C
98E0BC3F1F8B0FAFB9566B04BEE93F68D40BF902A91EB5B9728E0F6512D34B28
0721249A478C2B72D24927E14860AB20A65D212DBF9EAD16CD66DD18D8A05E6B
E77245575789A0ADF0459950779FE754E2476D8D20CA668A70DE8DE26EED3DBC
33A77B1FDA6126D080355D7B728E4D1D2BE74B85225CCEC2966DBF2B647378C3
A5EF7F0F5664CFBE3DD018B90C23A93A2156B96C81792E5CD39847BDF7819FA5
6FA47493335643AF723B6EFDB12C81C010A5178C0CB40C14A4D9BDE358A5C94D
957278D0855C02172F7745EA121C0F3C29A9A6A42986BA521AE896B058B8C89B
DEF426C8B4060F98B48CDDFC2153F7921482E9A6CDCFAF7FFDEBE19D112E4D9F
9A23E7E8470B2893E002A93F6FD9B2C531D43A3C60F81482533844AC2449ED81
7A50F2E38B558C49988AC3004786B935F6FBE0FD36250B7BD36452BC8DC790A5
389EF448BBCAA55B5BA2759A67A9D8DB8BC95667926D488421F1DF82156329C2
0B60897FC551C22F196A33919892013435B14A3E58BE6C10DE556F4F5163E7A2
9658023BCBAC039D780EEF905D1BB35FC7A1386D1398061D6D2FDE7F8A23EAAE
186B2A094F4F3636F560DDEA0CCDA9C142BA0E87C3A52D01692A5827C8F89EF2
133385B30DBBE17B59E57A515B4D4E366B55FC2F6AD4DD89C9E6BE3DA3BB771D
3C363A5137B6D326C0A7A2A751B49F2549078AC1549F7CF2C9FFF11FFF41F160
F692867CC18A318BB48C80D99DA02CC0828D5813775BE607887B642772056083
3B61DE5FA5E4894ECA23429FC0460788F294428E7D939221E0E3BB8682947D06
89613FB5B94F704BB7DC72CBA5975E4ACA0052D37798349DC4A8C1CECE722571
E5FEBEC16363C7386CBA325B11746562D5E4F9110A9810FE3B42798A18961390
3962D72670762DF26B65547EA3D1D22357836CD4761AADE6739F7DF26FB73E55
CA957B7A7A3D37D36C449073CD68EB8787270EAF59B672F4D8A176D4A1323515
670DEA9A6D55727E065E3C0C5AB531B36AC50A0DC2CDB439276B627C6A667606
01072DE7C0C0208F6526D47E2E5431F3182A2178160F8AF3D3D426BC59FB235A
025B87DA04D1E49E13A27319B3275373F97B660F65B4DEFC176D8C9446991D92
11609486EBAFBF1E2E2A645106C7CF7F51FA654885B07B2ED69C22AF2E380D4B
67329715BFE7FC00C932A974BC8F747B4856574EB52085A46FBE2BEA97B32128
529B8F9A6FB639BA11287CF39BDF94EE42F6FDCB86DABEB08C0C72D3D66B463C
3069422D875FFEE55FFEE58F7FFC637AEE02E9E120401C6958D33BEFBC93C315
C48B978C939D8CB2AD823CA670D633C8A36A9079D7E97D9A6D0ADC81FEF2B265
43B004D01BCC0E3131D865095A6AE1CE32D7E2B7B13DD04CE233E44ACB03E934
CDA4E9CC7BF17EB408E9C968FA34E99135B00401226E8232624364D409E334D3
9CD2DCA5DA88C7AD043107627444090A763784A26B359DD9D9F8F0C1A99D3B0E
ECD9751851422BD12D32A79E7AEA534F3D450E70CF1A3A66DF3CD50E579B0473
584FF69A2C66F6549A1D626A851195C4EEB23BA2D06C0A1665315D0BEF058FAD
4DEE6F0FA015BE2C52315E695E94BA249D802BD34DE6C7F136A281FD8F8C9859
6BE4C915C426EBC6381D5807FC529A7C1D030F1B1CD4FD6E95CA6CA9544C34FE
6D165F0533D06A43019A56A4FDFBF2B97CB5564DE6B6288AE8F256996E791A9E
7AA60264540B04B2DE68968AE546BDFD96379F7FCF3DDFCBE77A4647C736AC7F
26BEEBC8E1314D4AE2F83395A90F7C60D3C73E7D4D4F98D72E869ED3AD0CD2C6
779D6CADDA28F514021F0BDA3C36335E0A0BCD56CD0FE0493512AFC94A9167C8
F66ACD1A4255BDCDAD4EA73E44C875824AAD9E718BE59E815A35D642EC434EEB
AD76B58998A0558B0C850BC4DF409562DD6699682A248A829CC6B3CF3EFBDE7B
EF256E8C71287E4F7E41BAE14B7760893965065CFC3E9B990E0BB861C30678C7
3FF9C94FE8830BC3B678C70B5E9F3E2FAE40703489C5E96B407494C9F960A70F
1D3AC4FB24ED38E3475C1F9EF59BDFFCE69B6EBAC949BBCFEC393F6A4954AB94
D462337BEBEAABAF16C8E9FC972139EEF8472498D29CE9F0C28CE97504731545
19439B054F2297CB1AA843840051C7D75192CD659CC465D4257C41AC63BB7359
92ECF2A9B248B5A4682FE185984C6CD30D37DC70E1851732034694277EBEECB2
CB3EF2918FF09D32131CAB8DB0E6AAABAE9271254219648FD5BBF8E28B3FFDE9
4FBFEE75AF43F8C52E48EE35B78C01B832B14E6281C7A5D8C0EB382EEED32F15
0AE5DE52B958D00DC65A5B274907F9605AF6D3226D2B9983B84F16E92A909DF5
55A725CD0F3A0822A7C39415104B0ACD6E422AAD93F1BF8C7E1F14BA196FA98D
873606F8177AA8D85B9CAA4E3BA103F73F9F0BABB3333DC57CCB699B5B8C12D8
9830C0E66672DA672FB447DA813F36331D35DDED8F6EDFB7E3C896A7F64C559B
580E6828F880AB57AF81F585CB0A0F32D6C0F3E3BC6CE22C4BB24818CE99ABC1
0272827192D222D85D02AA438599A762B5A9986D383FBF8E2C58F0BE6520AE34
5ED10B116A7496943FF8C10FC21BE3B748EBBED00C937CCC264711B740B8F328
0FAED5854AC75C3C24280AA87B4A085D13DEFFA64D9B6EBDF556E192A31F263D
95F67120BC423213E29CD10A4A1B0425B0AB73D3595A2338294F9E1837BF136E
F89920BF62C5AA5D7BF6E2E79E7C8FA37CDC61BD86404C0F1DC377C0E55F35BC
A25A999EAE4EF6F594210410CBDE72FFCC4C0D5164FF40F9E081C38383CB88D6
D22728C2B325ADA44E150953618043B4BDD3ADB8F17FFEF7FFFED97FFE6CF9F0
0A189256137E47DC5249291C0C35380AE16BA3CB12E8C64927D2FFBA665A6072
1C3AA613A0C67994AA0BFBF784435F7E5E22AB036D8B8DBFE8A28BA070D904CF
0C207341E253F866DC31DD6AB1A9DC0C0ADC821787E4E1B2CA2431A4C3456C18
6C0042044298E14A4B214E9838550A226203B0981061885AECB984839642F3FC
E73F7FF3E6CD9D61448B088AFD5F0648A6390787962FE3A355CDD980A6E03811
5DCF37218B79B4A69EA5654C177E0D7F87196196A0B19E44302FF8B5B1A1B9C7
329231540E95FD204C4693D902DF2ED0723AE9580DDC06F172493AAB952CD658
37BB00684FF14B4C2BC9FAF5EB1137E3E061D95FF9CA5722BC20BE500E0E3F2E
74E80444897360D65F17693575652E572CE56109F205AD495DA713614466DE98
146963D79333DF55B276E64142B5764F3A9D65DA85F7A5300C690C1D0E23337E
91E901728D31700CE39182F3E4E90F622BB5DB9E0954B5510FB3F055DD7C2E53
9D9E2984997C2EE7680BDE6188F13321B16A3A63EB9567A276AEB777DFDEC3BB
B6EE7D6AEB9EC7B7EEAC2B3F69357B8AA599CA0CDEABB367ED8E6331DF1992D8
0EA703426E4FA26598C5AE3DA1F2951093119B665C30E457F427C81B68FBE6B6
0A168E6BBE817BC451DB360D0F44113F4B19992C0E0C228986A2A5A7DD92D8D1
49BBC4F9296925635CC5C88FFA8189D3356BD6ECD9B3C7A6E4C3152069DBB76F
E715ECB03BB1E6719E74D2494F3CF1840D6E144B4075248DD3E2170A5AC91EB4
B7144FBDAC856022CB3DC5D94A2D8A937CB654AD3787FA97F7F50D9CFAC217FF
CB3FDF97CDE671AE6B357D9847A7469FB17AFDA1C307960F2D1F1D3D62A8758E
B55A517F3FF669D4F702C4357B8FEC1BE95F0959D4363370EBF52A1C8B8999A9
52B1305E399671BDA1E1FECAEC64AD560D42B6F2BA956A2597C9B59A0916B894
EDD7021F430A758A13960071432B4264504718474BA00C820896208995AD49ED
D4306701B230C5F5C5C64071D325594C531393801FDEF296B77CF7BBDFC523C8
B844958E255056CFD4BBDFFD6EF88F070E1CA03AE09D2CD1670047E0FAEBAFE7
DD0A8D5A7F7F3FEE8D24D57013DEF7BEF7F124E04E985E148F830FC87FA58AC5
2CBFB4312F6609A810A5C68B9FFFE44FFEE481071E58F0FDF96C0EB1E78A9115
070F1DC421676E070E3F5CC5DEBEBEC98989B24994E3AE60323F77FDF54AB753
E982076282528F6E91C70FF9424E03BED28A9FD09ADA195B11CB8E476205FB5D
67800D0782D27BD9CB5EF6D39FFE947FC55290559025626CCA8D37DEC8EC10A9
0C697824E74B13289DE4A25CE6AF984451714A7E492757601EFC810EAC799C44
A33C0337A707BE646109F47C927C467BF07E273D0D37C8BC596BDBC871256D4D
D775416370BC4092743ACB0C17909B566563CD18AA93CBC72D01C4D051E9F826
58020DE548CC844BFDD96C6F307E6C62CDCA55A11B1CDCB5EF39EB37B6679B5F
BEFD0765A7E303E82202FB9975455A556335BCAEEFCCD79F736CBA72E8E0B15F
FDE6C9DF6CDF85A04F3553BAFC761B82313BA331C7E552CFB1F1311B06E3A43C
715D88BBD34F3FFDBFFFFBBF2FB8E082CF7CE6332CF6D8231CF8A2CCE02040BA
D8C98CA32D0CC76A6E9585EF7FC94B5E82CB4A7FBB7C9DD484F02D64C7E3F161
BB95327003048E081FE984919F8E0E9F14D5E4F808C133533D5DCCA0EC926153
177CA0246D30E21C2AE61BDEFFFEF7DF76DB6D7A0E414F0F7ECF9675AA20BCE7
CFFEECCF70877876A64C05462891AE63A8B738365C783645193EBD25901CAE93
8E7DC7457BCBA5A9A9999E52AF4A703C14C203CF0B07FA87F61EDC5FCC946A8D
566FA91F1168B55A79FFA6F7DD7CF38D49EC9185BCAA5F7543454BB291ECD1A3
A3081120B46C7B8309C966C37CAE746C7C142AB45CCE5766C71D0F3F140F1F3D
383C34FCF6B7BFFD1FFEE14EDCCF283C85627FA30EAF29CE67FA3319C49D2E6C
40A359C5BFED486F83C9B746AA53EFA225700824C76E516F920C8BA35778DAE1
399E78E28930CEF7DF7F3FD43A1B3A165B1FC78C5CA60BB976ED5AFC8B4BB1E5
42EAB792F5930F0A2007C1E0F9E79F7FE595572E767DF6F1C9F8AA2ED2024295
24F3C352B0A45FED728290EEB2FE4F4766314B604781CC90B01A26B336E7DF27
560007F5E1871F26B39832D09D580F43D7A9E143070F668C57CE86098DDEA956
43D3E4A2C3055337ABE37499DB79F9CB5FFED0430F7188F1E5975FAE94F44375
A454B4BFD41EF1665E59605D32D00D8F497A57CD869222CA9976E3A3497FA93C
0E44823729A320A88FA89B1C6BA81645083FE3234F3DF5149E948562D96BA955
3829EB94141EECB26426744BA5627F6F4FB95CD203617221512E71D2360E5DA7
2B3B72946D097864162C1BF087C0E9F0928A31E8608D62652C81A297ACFB0134
4015BF090D6D7594C05AA8B6A91EEB27A8FBF5E503C3F5A97A4185F7DDF3EF38
6CB3E38D82AB8AAEEF2469663032F1B7D9422FF40E372327ABA6EBAA50CE37BD
EC81CAEC34FED66C78618893E09243B7D92CE60AC38383FB0F1F8A2D224895B6
4D382905A1D40C94F1CDD31442779796D44265D0D8F1D2A6F506F919428BEBC3
4B403C47854BD406E1F95D251FBC939CE774F95966808DC10965CF0145A28BB8
0C1FA18CD9E22A57A65215EF47A570265692E9C7105FC0EC25353B2B4FB60B02
89E27005BE99BE3F2F2BCD744C204B4319F58FE0AA8F8B905AE425D54E0A1F2B
D4A562F6D0A1D130C0BD46BDE581A88DF5D5F5DBD5ABD662D7F61E3C30D03354
AB36E0C5E7F359C40181669EC899D207D98363130ACDCCD666579AA93590DE72
CF40A3D1822C8561360C4AF97C66DFFE5DADB8D2D75B9C993DD66C55580F99AA
4CAC5DBD7AEFBEBDF95C51F30EB59342BE1CB7836C2E8497D0842568D49A6DC4
2B78F296EF25ED084BAC655AC38ADA4A3236DC306E098E31FC14B2F109447D85
A95D4B1D78C1C521BB3A93BFF8CFB7BDED6D77DC7107B750EAF2CA9A6E41C521
081361705A6CFDD9024602517C6AF5EAD53B76EC607959DAB5ECC886B53501C3
90F49F254A92D3D1E561126389EC904A87B8B1A5569926CFBFFAABBF4208B2E0
9B996727CA13DFC2429C8EB8C300EA4ABB8B093C4253E8E60FB5DA00076A1ADF
50C3211A0DFCBEDD6C89078D47F8F0873FFCC94F7ED2B5E802BB2C012BE4A4E5
10BC93937650F349F9FBBBEEBAEBBCF3CE63C50B9FE5AD32358783CD7583FAC0
D5102E9C7DF6D93FFCE10F850A54F438EDAB4A099A08EB96E38DA3C8E5E509B4
F1639244E64764FE8190C8C295EEEBEB191EEC370C07615647051D56EA56BB21
092272AA4812436877BBF6514C42C60B9914A131E8C40B9E134706B5E9256209
E0D2692DECE5F49082189AB78D105AB71468EC90EF0471C60D7B83FC4871E8CE
1BBF0A938EF7F5BAA5463CE3EB6A844E0A1B63A20CED975355492ECC8E36EB99
7C76AC5A47600501457419E60BD57A2DF1DC679FF89C2D4FFC161B8990A35C2A
4D56665C8B8C214991EF321ACB31187919632ED3C2BB723E760D5FECF77C2090
4AC34AD69671AC76EFDE2D250ADF9A412F8D6CF0D5BEF8C52F926011B741400D
B43CB6157FA5405289F33CCA2C71CA06058F1CFB921E6470D0D51BC45C0D034A
F1D51C33E2023E963816B80D9E32AA7E9A0731847459DC940D9B7E0F6D00A494
23B5058DCAE8594CEFD35802BE9BD92B3CCFAB5F75FA238FFCFAE081C370161D
E5978A7DB861E8717D141DBF1D25BE1B96CB7DF57AB5529B5EB17C244E746A72
FF81C365DD70A0B5525F5FF9E0E8C18C17BCF8C52FDEBC7933747A7FDF50B3A1
630BD70987FA578F8F1F85771F84D1D8C4C13869F40F200A99A8B767D6AD5973
E0C0BE16B4BCEB2F5B3672E0D061EC75211CC4F93196000E72A5D96EC4899EDD
EA3A51AC4723684BE0B809D39278FE55AB56614B68C9110140DD20D4204B0F1B
D609A2C5D230E9BFC4E270F5F959CE029584328FBA2DA3CAE2DBC19967067C09
2C10FD0808010C00259B09075CFC965B6E41584A11E4B7E3B9A03ABFF0852FB0
0866A7F5D4DC196D4E3A426FB1AC148E81C07238F7CD06442DB00EC6131C59B1
E250DA5F962136AE5ADDF08C67ECDCB1431FB020409845944EB3D1667B36A1FD
4C64D7F46F3AFE115D33AA4BC99ECDCF0ED923A0C5BBB15BC91895D3F2CD2F77
13B4875861D7AE5D323FCE5E370183F274D94014221A782CF144975C7209A448
E015FCBDA45F597EE7F593747A949C6A7D651F716A79D9D0607F7F2FE4C17558
E1EC0CD98EE2CE07957F5C9149B7818896A072252C08DD20557F9D11F669B860
1A0B8E0F6E710C29A91E31630C6DA49296A693238A347097177B268F1EFBD583
BF989C4A46941ACA151BB5D9507352C3E5340F92186E8C2821D351808F16338F
CD4C2D476411BB08D3AAD9F049C4DC3DFDE333539952E1B43FFD5F3FFFF9CF1B
B55AE07838A38D24B2DB1EF9385E3A81CE3E0B4A2919BA27CA5DD4A54A395D64
B3EC8C909C02A9280803BF4AC7F77261ED62A134BE708226676C08FC5AEACF4E
DAF7C03094C0E56BAFBD16CE1334AFD80665DC351C4FC9B588D6EE02C5DAB10E
33018EE9CDB4C7357BE96459BA14780422DF64655C6BBC2E5B7C38F89D288C38
9D926DF3252F9A1D92E4A3C8998E92CA9AC1B1A96924F29EEB673205CF0D19B3
E472F839D36AEA0EA623E347D6AD5CB3FFC0BE7C310783315DA916733DA6F3A0
CD6EB2673D0BCED933B76EDD5AA9541158382ADB6C2471E49672C3996C786CEC
A0725AB9BC3B531987B4C0B11E182AECDABBA3BFB717323D33338B8380A390F1
B3AE2AE4721AF8D0D05469555802D30C09E96E9AC1AD6D2C052C414BA7A1B573
C15A2BA911789C984F4C0C8754971FB1444C203965E175225451F6A90BAEA0A9
930E1F86022251499236762D767D9106B12E8259D6FAC2C8A88DF127C33EBE85
F326291CD878D88917BDE8458F3CF2885C990CD88BB53D27E9842695D6B8969E
DA98CDA7A818B25318278559971B6FBCF19DEF78C73253079E9C98F04C7814B5
E2A2F1B9B0342593E06AE82A1102083D5215FE178E90B074B076B7E0F7B2B4C3
260C98E15FFFFAD75C7CA16992CA3C7EC009C45F49A8C77665A9A22B434CB47F
FF7E9A55FC95C2401639C935D9C021A9DAB128F28C673C83D65A7AE5545ACF94
F7F35988FE4AE1B3018788F99E5328E48606FA878707F56C3E5F58258C76509D
DE02580295664E2420E8F2883B7EBFC96279B19FE2A73BC680F021DCA0FE4F4F
C696B98EA918C78E56B5AE3E3291AB230927637A0BFAA793FF7CF03FA27AB2AA
90EBF58299E9E9023E11273D69BAA91D47FA59CDED6A7C60AC7AE14CD4663241
08576A5A5FCE1B8BA35D4E7636A9B794BB66E3861D7B7643E9FABAC817C50B81
EEF99F2CBC41851985D394CA9C9376DB51958B22E66763333B0C8E4B9CCED2B0
2D01DFC0232F34533CC27617886034042C2EA2E518CA4FFCB56BA0A14D02219A
1AFFE24892119AD3BC6512B23241000B51625A6CDBC624211661E7CE9DD2FF48
554E73C84E524937D9B1889332ED3374C6579086880BC2711D8228395E3E594C
232C583176B4E705EF52057E269F2B4DCDCC0EF40E55AB35F3DDD9C999CA70DF
B2E9E98AEE4909F47CBE20A35BCFC2A0D0A84793954948B6A793F651E005E572
C940A39C463D5E3EBCB6DDD2FD29AD1A020B2C69AD500C95D3ACD5A711C9CE54
265A6AA25FB7DEB54E3EF9B9BFFAD5AF601D35E19D1F38DA3BCCEAEF6A37AAD5
4A2BA2018074B71813E000BA9E6AD435651EC34CD9663E1714D645175D240B0A
3D489D22C8E2C5D6878B6E03FFE9484A8B8A087717A05EA67175419EED173F2E
997DE958A6872BF32C71FF975F7E397C520E5722868C5BC688155778D7BBDE75
D34D371103F3B48318F1157FFDD77FFDE31FFF1882CEFA36793516951326F88D
A6D356CDA4804852A80C13162215DC00CBEFD3383989CB94914A4B1A71674EAA
4EE8DB597B49A9AB8550A4F419F97E7B2AA7AD7F95D543C45E4A665189EA2169
364E05CD1E3BC63FFEF18F633DB974CC26C166E0ECD1BCD9706C21D0A7D1654A
41F84524E2E6C7F1061C3C881602C734A147908FF6C911480CF4F59A37F4F794
0A10F234B961724191F60423A7A3F7EDD4904A99E9241A10EEEEA4C9DD89C412
386CBB51A46689C51270EA64A472FA6DBA770CEFC0D95781E930D8F3C3FF745A
ADBC728772D9C96AB51F6BAB61012A5F7334C7A90EBDE3962E14E02BF4573713
8DD9C8E4DC562D1E2E951AED68C6550766AB3BB3FDB371EB5873A60503053B04
E73A9385F3E6A615758966246015A7DE4D8715E2E4C2E9211BA33274D0D47D70
C284980BF7CC740A13EB32274A2C81E4E5D4DC5EF48E614B8173A46C52C6DFB2
6546262925294134C308822C5874A44F80F7E00E3FF4A10FE108509C10644300
D8A22B819D4CA1A087AE4CE8435712FF22FAFFDEF7BEB767CF1E5E13DA1F57E0
209D0B2EB800575EB76E9DF05DB275864A4020AD12FD7CE73BDF39FFFCF3C995
2D4D12CC47E934065784F6C149D9E8D4927873AE9AEF6B9BE328CD7A313D33ED
A8CC60DF10BCFB899929180368E189C9B1C181C14AD5F8EFBAD558A789FC306B
CE89E3BB71B3A19D9D0D1B36EED9BD1FFBD5D73BA889E782FE4CD63443B7A0BE
F186D976722C4AA6A2B6AB939B6E2B8A89FE7666A6AB084120518343FD58C689
C963AD560362D68A5A1E7C9CA466108E081211CA3A23CB57EEDDDB2183C43362
116FB8E106394E42524F213BF3CC337FF2939F40B63EFAD18F42C9127B4B51A0
D2B117841C84940FDB0799BF6EB0E7575C7105DC5ECF0C32644293748C2AC5AB
B0C873EEB9E77EF9CB5F5EEC3A6E3A0786396B19C3C29096EA895C3D4F3B5965
FE8B1ED619679CF1C0030F404AC8FA20418F8EF68E1C11D0AAE43DE980F0B3D4
BC500E922AD56A31D127BFDEA8E7D2163C1B8F4077CFCE62F16696C056911C89
17E175349B664A5F6337BBC94DDA3842A1F297493E72B0ED5911D215CC428B70
6EE323F82C753AFE8A6082FD3E023A92B05DAA32A2A718CD98D8ABFFD8B1F1FE
011CDD693CC7C8C8B2B56BD70EF6F4403D418C67676788456AB6E02D452D03D9
8C53723AFA95E25E086A88E96FBD2C0D8915B8802916DC9D9350928F67836C2B
74271002660B5EA359D2EAA351EC2B4D7EFF3F11E36434485C05B1D26D01AE06
9866B4A7E7458DA88E5BC3F32A4D5511252A9BC4D3AD063C82AC9F2D41AF45D1
4C43CFA7DD826DCD8607E3B8E67BF51ACC815AB17ECDC1BDBB4914494926CCD1
F6CD6DEBEEA44C8E527E77D2B92E9247C269C2F2BEF6B5AFBDFBEEBB8575D18E
0644000414C0A891C787840BB83861360C3A6598A0AC9897BE78B7641F122206
1A0F961938EB850220353F6E9F943A94956AB67784422860078126C29C40F567
CD8B8182346CB2942B4871AE893DA7814BF7894F7C02EE0E8BA3F8209BF6F5AD
AC5CB9F294534ED9BC79B300AE97C0CC30B230D59B592CF7DBCE7F47B3D55CB5
7255650A7219CDD61BAB47D64E4D4E4FD7A6FA7B7AABB54AA4BD2A6890C24C65
76BA329BCD9672597D86232C858AFB4A032F3AF5B403FB0F1F3E7CD43799CAE9
A94636A775AB8AFC484720CD28198FD484EE0B4B1AAED7AE37B05519DD90D486
3805F5C8EDC917474686B6ED78AAB75C1C9F3A96CBE46A8D6AE027AD364C2BF4
6FCFD8F8849302DFF9D83CB136FF3E91C8ECE71690A500F0A158B1A9704960E1
376DDA4431C245B07ADC2742C104C835FFE5A5738FB180F01AFEFEEFFFFE2B5F
F90A7308D8632CA9F4B2B292B118D39C54AA29CDE79C730E5C06BB83DFB54635
3C2DCBC582F7A94C6044CA39E98C2542EEB39FFD2CB908C9DF29830AD8E129F3
7934FA766686BD8E72655A828C554953294D90E45E1909D9F9E2C52C012B0D5C
0A3B5422F64E46B632404E526200665A6C6B2DC11C4769DA137554CA9D27C53D
A232589DA6ED6161809BCECF12642203B964DC9BB29A480D34303735052777E8
C8D1513D07C6D7D6F4E4934FEEC966355567E0D66A70A1B4FB566F54F592389D
4E021A039622C4644A5E483494D79658EA788FBDCE2AA46CED5D7A27683B3537
AE396A59FFB05F6D64AAB5437B77CF4CCF6EACE9E0C57335B504D6D1D3403C6D
0F8C49803F17381A89AAE3BC968ADB51EC27C9ACD2ED3C81EB171D8DE06BA916
CEF16CB678A4551F0FC3DDB3D56C98ABC771A5DD28F4F756C627A5BF5DE44188
F8A5009E3E8B626A143FD36DE7BE509DB1C346A52C092A7587BB2E222FC21368
98BB40AB241A71D229025D1446B268C49249A30019C3247094A75056CE594896
9274A286B22212C927CB0D6B0289FE7E48266142325A80FF2963CE58B8E20D33
D9056522D364E161F0A82AE366F10E717BB485B8882E91F2CF2C3C6265D9A197
3CDDBC56F360FCD458B9A73C353D552E0CE9DEB046BBB7A79F45BCFDFBF7B655
13820F492995CAEDC88525C865CBBD656899CA8AA10DA640AF06FA870E1C3834
5BAFF6147A023F030F488FCB0E324E1CC49197C4385263ED78A2DE9881839F2F
C25FD130F9E9A90ACE7BBDD15CBE6C9D192003EBEDE5F2E1F4F464A44B5EBA8C
DD0BA335A503FF95AB961DD87F04C111F4A67801425E685B60FCE7FBDEF7BE6F
7DEB5B448311B246BDDF952FB655898DEE5A22EB623728702625F79ECA88B442
D2B2B89825A08840DD60F5647A011604DF8E7B58B366CD79E79D77E38D376213
972E472FF6EAE27464F59BADB9F852C443279E78224C29590BF1386481E78308
77CA0A5340CE849946B3E1B91D25C8C00BCA419A06E4E4DB25E2646E0FED62D9
B95B6EB9E5BDEF7D2F1D7F6A7C52CDD8ADD4F813A375AC1595789C7297CA75D8
6388A5A3D5EF9A3C45D9E00D9F74D249679D7516DC3AD618F02FE2B6D7BFFEF5
541C7833FEFAF5AF7F1DEE82AE8BA4450801758825202E10BF81193874E848A9
54686BB0830E5E87870736AE5B8B2BC04E98A450ABA65FB37ACAB793D690D398
402C8138AA92D0D0DF1879A9C4742C01D7B31D47B64E1435946DA99AE724D9A0
9C2B4C6FDB5D9CAA3913152CE2723D645C370D682A31DDA3192BCB18E811F761
0897AC8A38A0DD6C99A9810DD3C5E3B94E2E569A8D122728174CCD369C3073CC
75B6E2D995DB33B462E7D851AF5C607D4E66CC5191D15DE51D7AE9604ED93BE9
DA65244A63ACCC3C0C958E15E36A0B35489292EDA8B44EA0E631AFAC5EBDFAE0
C1831072FCFEB4D34EFBC94F7E92A41DE37606BFEB24E266B0FB070E1C80327D
E31BDF48CA2F6824A6D3F1B6134E3861FBF6ED4C31DD77DF7DA79F7E3ABD01A9
F7382981EEFC93CE3B24A925AB7174F999C9E48C612603059ACC785DFAE6E8E5
08570A4D88E4C40863C529EE608D6DB4E9FCA972F32D014F4B6F6FBFBE0FCF8C
8E6935E19E9BD4A7F7F76FBBE8A1871E7A72C7965C98A937EB1B376E786AFB36
6C504F61B0D574F3C5BE81FE917AAD393B8DA7CA7B2ECC72429E06DC8CEECBC8
2B4D5701318BC2388220C1FB9F68C5138983F0A29ECBFBCD56051A7F621CEE5B
2F2C0A1C4A9C1CDC43A5325D6D56201408296AB58AE7278D663D089C7C3E3B35
3DA3AB5C71877E920B21D46CC254E398D9F49AFBDA0CDA3DF7DC73E1B6E3F750
6D36C5E0F2E5CBB11904DA73C588380A0C4246060FCD5F37D7F4B8338D68AB21
E6196C8CDAD27D0CD8E00B2EB8E0CE3BEF644A4AA59925916C861D6CABF94363
02658C16A7CBE2E2887884B591450B2CCBD7BEF635EA4D3725CF2078D986EE11
9ACD8555C613914665A9A2DB3FC7D64C8FDFC71270901C6EEC924B2E41A48277
420CE0F84841CB33939818604912D93EC36EDAB88FB01D4F8447130FCEF601E9
5E71BB79F221F6F7DC73CFDFFEEDDFAAB915450E5480E4DC7AEBAD6F7EF39BB9
024C85C9570BB1B04ADD2FB37DBD3395295C19ABDA5BCCC38EE2379ECEDC2666
8A7A0DC634B252437C49D95F5AB1A8133B5090B6348B51DDA7D6481D5F58DBFD
CC39FEAC93C4193F6827877FB96575ACD67B419F1B4CB6AABC7BDFB8F9BE094D
F0C962D6EC66A205009660BA596516B26D2C41CBD0D365E304561A7162369FF1
2AB5D2F0C06F8E8EAD3CE1590F3EF5A41714FFFECA8FBCF7AA2BD3E49512461D
59A838652697A9A5D4CB5C6769F9E6FB79B2F02F84FFC89123EC4616BDCFF591
3A33359E1DB1E1295EF8C2174265B3BF9D53D5284BACF488BBA32C6F983EB8D0
BFC3497AECB1C7982556A6EC4C0BC1F1DAA27368B0696644FE6D4BE0A4341276
772A891BA49D4599F4805C4D2C01C7F35121D8092E88252E287C6238171CC881
EB700E8F4365443B2CD5CB25D805041A0157D87C0A01A546BC1E3D3CBE61FDC6
F1F1A9A9C99956120DF50D8C4E1CD9B87EC38B5FF2E2FF79F8D7539355F89495
E9C8F54AF95C7972B2E23B83857C096E259B0F8AC57C65766ADFE15D7D85B0D3
121C655C27E363C5DC9956044B30DD6CD5E2A41A2550DF71AD595B36B8029141
B5D5EEEF196CB70CA1901B359AD57C415B82466B16A1BB1F684FE1E39FB8FAC6
1B6E1E1B9B602398044A36CB4D924EF8E422D22AB0B04C33408C29F909440590
AF42BA607E1F0BCA2F8516A053CFC40BBB99B8EB52FD5FF03AB8554ED42315B6
4A710ECC5C5347D8D46FD1E2A31116BB4F322F3DFFF9CFC76148D2267E3E2CC1
F8525512101EE44128185FF08217FCE637BF91584A7007366EAFCB12D80A5A6E
E369EF53B4B654EC85919BACBFF83D5B1A059DDD85EB5556A30D3E75D555575D
71C51532FA433AF2445AB0C8F0FBEEBAEB2E9E6DCEF814041A35FB37BFF94DBC
47A0E58283E2F792D41EB70A95F5EA57FF15A20AB637EA650C9D562B593D3200
9D084B902F64C33030BE7F0356A199E6B5A8F785AF54A525502E38D5815EE7B6
C88FC947BB9D28DFEED4B3F3E68E17CCC4CDC4750A913BB3F9A9F56D6F65EC04
493B4A07827BCAA1A531457E05DDAEB3E19172033F52CE8C99658C178250AC1D
1CC3D05185D8C9AB24D48C435E7F14555C752C528794E686AC660BBB5BCDA9C0
1D2AF51013C144076E8928B8F996808F0C15F6EC673FFB89279E60CA8E497CFC
70D14517DD7BEFBD70E36CE61FC15E0BAC4B2C816D9B29E4ECF8B16B4542952A
F269C34024238765A1CB254E37E37BDA9B33CE38E391471EE1F83FFEB50B272A
219D442AD290C44662EA1C395F2F7FF9CB7FFAD39FDA6530C90E2933360A2F27
9DE441E9A2EF4BCD86B791A79A12CEE0F2FAEBAF77EC232175F3A59B0C9441B9
BEE005A7DE7FFFFD4383CBB05EFBF6EF734C2E3156CEDA95CFA0FB0CFD3E3933
3E3CB46CB6D208BC1E04EB49541859B171B07FF5E4C44CA316562A55CF0DA7A6
6672B98CE7C7515C534E94CDE86E00BD5C6DC497595882484D34DBE3B5C6B80F
EF33A9F5F517A7A6C7A09510948C8E8E150A7DAB56ADF9ED934F96B2A599FA54
291FCE5627F2F94CA53A89150A336E2613FCCDDFFEF59D5FFA2A753A9680BC02
767F1D13BECC6060B164D165596C3673D1D4B29D3CF058629CFFC578721C33F3
84B34FB9C8D217C6D38B7D62E31FBC12421416BC0EC949540A8FC1FB7163305A
708D376DDA848BE09A6433457881772E96655AECC5FB240B0A64487AD0F02F61
7358ABF7BCE73D37DF7C3313E81278E21E58A37ED9CB5EF6B39FFD6C6A4667BA
70767DD353DA6A36B346B1363B1A630E0180B22CE8EF690C10CB13FA29112E71
A2425FEAA46C4252569D7F4DBE411C029A2B098E252C90E41B3FC5C63DC1A1F2
ACE20DD808010B0A01AADC0C5F9CFD875B42388BEF5DB66C68D7AE5DB86DCDD3
60262986A10EE94AA502FED7532E99DC5403BE2C0B0F6209E495583444AE3514
A5CB1228A7539F740CA7B4BCEDB825F6DC38D4CD01C55A7BFAF1A7461AAA0F82
AD544FE0699239EE8B49F4699C10962569E971E24AE30295E3D5A3D66C5B0FA3
699B3E32C40781A38A896E4363AEE09983A5A3D333879B2ACC87E32DB5ADD59C
CC668FC54DD58C65DAB0642DE83D48078660B2136B8C97480BDD561235F222CC
C1629119B6CECF0EC5E96C48FA0D1C4220697DD181C44F737305D160C7526CEC
62BA46E61A315217B8043D7779165ECD1609B93DA901C857E067C497EF7AD7BB
E46AF822DCDBC73EF63104B24291CB22993C1D3D39C19773A144837DF0831FE4
C4567C9CA52C5CE40D6F788343C9E6ADCBC796E0E0A4E363EC9B86ABCF4CCF32
EF59CCF7C0375A31B27AEFDEFDED24EE2FF78E4F1D2B177BE05484410196009B
D26E65FB7AD7950A439599E64CA5E6B99965CB5698327DD86CCD28B7DED353A8
5526D93AA362DF7542D76935DAA3B5C6685B557B8A85667B6AE333D7EEDDB7DD
B492E68E1C1B5DB77AE38B5EF427FFF3F06FF61F380001CF6413C76BB6A35AB5
5611DE21E5A8676C583F3E3E49EDCF0DC3BA3007221D64FCD9E6EAA1A72992C7
6DB8FAEAAB3FF9C94FE252440DD123C00DC3897EF5AB5FFDA94F7D6A310B6A33
0E09973AF112745AB197975F7EF9E73FFF794AD582D721C881010A0D0905974D
F6F6B86A6176FC832C818C5B90CE49A15D64C40A63C39C86CC0C71E70EF0618C
E2FAFAF4C2DFC8A4F4299D6123D5A7C13239739BC89688B1C49CD3F18188E3D8
C46672884AE93A78A8EC148D54D4F9AF602D58A121690C03207AA3BC14FD44B6
2213E48E67E4EED31DC3CF2CF370F13B6CA396BBE0A6D4EE3436706799D1CE18
4256449808AF9546D184C62FF1A0D0962D1F364E465B8F0D4E4301497C53B9D8
29231B4EAAA23915635A02FDFF9A8BF43837A7EDE1EA34FD74353339DBDC7774
44A9126EA610649A262BE228D803CD5F6A285CF0FE76DCD2A392753940D3CF23
98A8B59AB5186F71A655326BFA140A89195EA879099D2CFEE2A96AA4A6CC5CD9
493FB343C547DC486990A74E787EFDEB5F67194FA5E94DDB4B70AD9794CDC57F
57E9681059840573FA1DC39836FF77F55772BBE9D3604FED81330844E09F5148
C41EDB3524785D9087D80C0521E48CF19340486C1C5A970DE0ADDA7D0F6206E8
924A33818C414CAC6E247E8BB8EFAC9DC875F02FF409B40ABD16BC93392BB10D
5414279F7CB223894B69C991AF5CE2049A5101A63A516DC4491C06E1A7AEFBCC
15575C556B344BF972A3DECAE561A8E152C5B97C396ABB512B544939F0FAB3D9
E5D9B0CF73B3D57A6D7868F9AA95EB1F7FFCF17AA30A67DF0F5BA59E6C6562CA
48ADF29C4037AF79AD7AF348B57158436B0AC1E8F4FE67AE5FB36DD7968C1F94
CB7D13E333575EF5D17FF887AF1D1B9DC4577FE5CB77BEEB82F30A257F6CFC30
5CAAE999A9BE3EED2A0E0DF78D1E9DA092C2B1A7D1B64777319FC0A2257501B9
92484F2DB932AEB2A48F9C94A247364F5891E7BF64D68DCD07CB2B485E48A5C3
B996B8CEB5D75E7BC30D37D00E3158866B4CBB25D1221BB296CE322DF6120A55
5E8D74862AC5ADF34B49EF2C855F493230B4A26BDC8A0C01272C848148232608
4CE37BD46A4B6A422DE2AADB25CDA52BF012F0C686E388788FD89ACE2620C2F9
D1801C42E2BE70DBF61C1E35372CA01913D79B4C2476C3118E2B510334F636C8
95490395C23698A0E8EF1B8EE2569AB79D4C478A66716ACC0AA8DEDEDCEA35AB
8C318B386ECC2E77CBFDF337C249C71D34C75B422E165D44AB7AEEDCC9BABC60
267692663CB1EF405F3D19566A3D1CBB4625F1E3420B5BAC07DCB463D5C21DEB
BCADAB89E1FDC4775C4D4B1D45263208DB715469C33CF8334E3CEB6A2F2C13A9
7C12E73D3F97F1B36DA8255DEDA836A3E9249EF073FB7D674FABDE88621A723A
E9BC491BF326864A00B224FF611D8853C648F72F4136A1CCB4B8F2716515C945
D4B93592DB14CA362A07E68BB041175F7CF1673EF319E9859611980236914E31
C6FAF44524DB4CE40F511EC24FECCC652AE58BD461420E313232C2413AF8AC34
4F48B14D88D35927100BC19C123B1828724247DA756F76AAA3E3161195C552E1
59679D75FFFDF74BFB9C8DBB521D7E73FD0CD94CBEDEA8FB9E8F55711D776860
B05AAD1BFBE19A6100FA9DBAE4A222B8059ED31BFACBE276B1B777CDE444DD75
825CB6E7D8C4E8BA35ABEA8D9938A9D71BB388FCE2A4E5AAA209799C7C36ACCC
4EE472AADC9BDF7D6047A90065D474DC5690C1A3C6AD76B35EAF720B5F72DACB
1E7B74DBDEC38796F50ECDD6C67A7A9D434776260ECE6A58AF3573393AB645D8
A728D6445E886CF59025DF31B84397075B543967620883EBFF43C575C1176D0F
AE063D7ED14517C92C3DC74C8B847013AB4EA00E3D083130E24A880FB2E0F555
9A1BA53667F406ED868BC35FFEF8C73F4EFAF2381DBF459F9A1FB165628947E0
B001CA16A585DA84A2A62C6086B4E0D2F38D53864E9CAE7DFBF6493F244F9118
2D21CF122EF5C5D65FD2B2D465D4E644D94B0311FD328623765F056BB9820D95
F608FE55DE2C07C94D292284F4893BF5AA57BDEA473FFA11911B0203C301867B
48CD62B304CA17318F2114175DD0B5F4F1A056DC65CB0756AE5C5E2CE5A1F07D
270B99E7C3E292E61B1303C7EAB0C7708E13630E1B62240E66A7E32C71EC556D
A72F3F80D56CF4EF1C5D9DB8EDC029B5A2756E76C66FABC8F48B787056DC5AA3
558BB50A713D3F64E539D6FDC6BA510DC17BD4AEE9D491996843F89021292A2A
27E76B9E233F09676103E21AC20308F14EE53DE11C1F6426590E0125F38C08C0
46A5B4981272B9161148575A5BA680503245BDF265A3938F574AF859C7639E76
B65209D211F09AE2EDC811C7DCA15CA4DD398931C598A55A7285DD7CF3CDB68F
AF2CCCA8883AAD1A3DA73865D9E3314FD26E1BDA249E2F1A0FFAE80C2E697588
7AE713491BB65A28CB2AFC7DAC644015D0EFE7BD396A2EBF823215BF279E7842
344ED75124678359567764F9086CE6E0E010AEBB77F73EF3F01A4B00879EC649
7B3AF8659209DCFE6C6644453DBD7DAB8E1DC593BBE59EFEB1B163A59E9C1F24
B5FA54B184E337D38E1AE5D2725C5F9363A87698C1FEC14E34AAD599D8417C14
797E8C5F6A5FA45D9786FE4C581C9BAA8EF4AF191D3F9CCF61B52A95D9B1628F
16975A55F4A6BB7C996ECC430403BB0575BFE903975E7DF5D5BDBD3D9C520B0D
B57BF76E65EC22D5F182EEEAFFF38B591768017C1D0D18010950CAAC2FF13658
A214B818EF810D960B6E87BCD8124824928C5EA1302983AC6000844BB19241D5
0FCD8E0BCA504C7867F6787AFB452163C822852665A5A158E8930C98741810EA
4A9405EF013783C7E72C2AFC95D685251CF2C791E617B7441F7F094BC09FED19
B6CEDCEE5FE98460369F1A4154B35408180DB0470C228D1B667B91B2DAC2DD94
D1880FC5A5C31DD2E470AE8E7D4DE13C60F186A3DF94B1D6C3C3C3B83805D82E
DEDA690D3F503DE5DCB26543838303F942D6778CD14D341CA05AADD0F668E474
AE40CF8CC68C5A4F96DA46AC77FA0CBCC0768D25B904AF1F2A6560D7B12E4BA0
4DBE21F14D945B8FA25A121BA8A8E3AB444F8C527A705960BA8B71CE1116D4DB
2DFD83693DF73470C8CBBB2A749D3AD49CCAD454321DD7633D13D9580215BBBE
F62AA432473F973E843797D7DD5653783FB6ECCC33CFBCFDF6DBF17E44C6906A
6E6B174482FD07F4721CD31D62BB0B5D66400B55E2B0E97DD9F2E54710104038
E1139B0F2616EB387DB2489BDED06637C1DBAEBCF2CACB2EBB4CA9EEFE1E8178
D16717C4879A8B7A903B5FBD7AF525975CF2E10F7F9848507209D37FC2BF6442
C577C1C9C352E0E30B561625A5A64C1580953C9E3E9546459D67B7331BBC0F42
18BB5077D6A53B63110B793D77427FD0D7030E27C7A7286781AF557592983E64
2FACD66B815FCC068361B0AC59CBF594574C4FB6C220DFDF3F303A7AB45A9BCE
E6BC99D9B1356B56CECE4E359AD5E5CBD672A848DCAE0F0FE30C1F98983C5A2A
E5C726F6C200F88113C01BD1C9860E6847CBD044D551E1C4ECF49AE52B27A70F
F9617D7CF290998711EB068566DBB811C10B5FF0A2471F7D148770D7EE5D6615
D818D2B0BD0C4E01E32C2A480C37EC8F620924D1816DC377BDE215AF803B49AF
9CC9168A8232B82C5BEFA894218B30E4C5787898C5A2938B1DC47EC3EC413B63
EF056B1F9B210184BEE0D1F0B0DBB76FC707D7AF5F0F252EF88DC5AE0F63F937
7FF337FFFCCFFF8C2BD3D86CDCB871CB962D1CD2FDD6B7BEF5B6DB6E7BDEF39E
F7D8638F1D9F66616A80B673C7ABE13F6FBCF1C66BAEB986993A9E617606E037
36667789FB91348E20A17187781081CDB1FBFFE4934FC64D4A0D8CBA528684D8
791E2F9DCD49479297E5A538C080737B700249252468311E78687C4EBB651581
893B761B897B412D86B0FB3BDFF98E68FF381D5AC2F67BFC9739999AD6A5A79C
5FB162F9D0D060E86733998078E5D96AC5E43D229512EDC9DA0A3C54329FF3F2
0F99C4A27496CA733BC2479A83BBC7D7A88E2558EB642A8126BE68C37B4A74DD
B9A9926AA241A289EE2DD08DC759E5C108E3B67281AF497F636D0CDA5152370F
06A5075D10A8084F855034546143D7939B0819E2D412C4EAF8EDD11E90174B88
5BC4E1103369F76CABD48A4B358BCD3D52B1978BDB65FFAE3AA863BD32D97C65
66E659CF7EF6936604375E7D8668960122FD71E6A9185306BE4B27809E904A2B
A9AE45A3BB605586A139EE96A24ECF0C37C6111AB6232EA541B680B139866E04
9E1D0A8AA75E4E193F28C82B56B398E3E151651F1FBB656927E82439B61EA147
23E47C765E285D7A9787568F274BE20DEB379C73CEEB3FF5A94FE5B305FE89A9
215C1C5A584F9B9B9ACC657B73E132D7E9AB4CE1EBD7341B4E4F6900CB373939
D168CE42B323261818ECADD72BE313A37DBD83783C5D9F71D4D070DFD123FBA7
2AA37DE5DE7A7302860D0104EC415B6F410DEB6CD8592BC34323074647078A83
A7BCE0B99B1FFFE5B1C9DD9B36BDE7FACF7D26970B60AE8E1D1B37AB995BB572
CDF61D7AFA0F3C1A4D12529932EBA8FD389951ECA563459DB4C1EF8F951DC2BA
532E85A9185B0E4DA1E65296532F48528F6247E21AF17917BC3E090FB0AAF814
D410B91BA96199EFE63123C2077BFFB6B7BDED4B5FFA1291032AF57397400F53
1C99D21595CD0346818116DEB163873401510AD9AB219E974AF3FBB03DB85B02
C0114DDF7AEBAD907E3234B06643C7963F2CB6A44C82B966E60479F7E82ED9E1
08FE4A680AC742C9AC66BBB759BA31A844A0C739074D29256001FC400A62465D
2A35D8DC266C1097D7350C392C189C71C6190F3DF4105349AC4348160E4A8A5E
AA10085BDD76F8CF162D816620F5710A7A714BC57CC1D056670DF9BECE274039
33D12CD40549DA09453D257EAE5D61769DE3D3836D346AA4F99FDAC37B27D72A
AF1D3AC5661B9660368C5B89AAEB0163DAEC341D8D106D685239851020EB3979
E504510C51C3FF34C1987242DF6F44714DA78C35012AA201B7AD99328EC62AE3
7A6DC79D552DC7A8FF9DCAFFAD668B4F2854649AC3DDDE71C71DF02A7ACD8023
19F9226EB55444F186534E39052B2CDB240E846DDA79EEE8C8ABB9A865DB12D8
E05A88C1E73EF73988250466EDDAB5B8379D76CB153AF615973282CD30348E3A
A1C0B5D75E0B358877B26F402802F9150207B29D3C38529004A1A2B27398D277
CD69C66CE1A48CC924321C79BC1F9FE502DAC393E50C324466F07DFEF9E7E3C8
CB100566532555D5617315678D922AE3DCEC572A589262734B661CDD673F73FD
55575D854DD76F3066C00007D8C7E155AA33AE930BBD7EC40449BBA7BF7FDDCC
74D3F7B24180B351C9EBEE0188470BD100CCE481B1BDC3E561B82D3AB39F0911
204F4D8E29A7E9EBC9AA0D3D17C98F1C37D61DF8461A7C5FE3F0B6EE7C2AEF95
7A7BCB07C7761773AE1F36F285607CE2B0CEDBFA994A853211786EC06DA8CC56
023FE8EDEB3118189D5CA32D4D52226F51CD4BB031FFA12F1E78FA2F7449CE3D
F7DC7FFDD77F25A7340FA4EDE9C89875E60459E517B294F9AF24ED57900DEDA2
48925AA54AC9FD05844E9AE8A7ED28249904A58A4E0391F8EE3CB2208A13255B
B2F04C4A12712B05737C8A07D81E326E33CA2D969D4B0CA734DE830DE29A9C7A
EAA9679E79260EA44A9D18816FDB12EEA503D1E0AD3FF399CF7CE08107C87349
684717E7A89BF282F13D77DE79275BC6485DC7EE90C870B6DBF689AB8123C7E2
1049D3A0262EBBEC32411CF0CD5DB38C8C4AF26909B05DC68784B9D2EE6D7F5F
19C64C5312A94E45017EBC619CE87C90AB2A4026C1A8881AE252C0C397F589D3
D13A7AEF34DB5DBC7CFF342D41A1D95E672C01CE5BB5AE5BC8C412D4342E5503
C673C61284119C7D5D0F08F5BC33077E292C810ED875CAC88525F0A236BEE970
8418C23596A0ED261D4BF03B150FAF188116E30A3BE940EC38A5B412B6515B12
046C4AEF4D9C0FCA9B54E92978F6306195D26AD90C8CCEDC971878FCE9DE7BEF
3DFBECB39D4ED3E251D72CA91624663C984D493A03FE847496D1330B72B61B2D
F004362A32CFC36CADD0F7520B31334C213438823C7437761F824480AC8C1444
60FDD18F7E946949891E6C6092D8390A2AD171506B3254EAB8399405B52D81DD
4061EB32E67F3AA9E76299F00CD87E9D356EC4BEC7714B9A7C1426019E8AAE78
E49C7A1516A2D4D7B3AEA7B86A7878E3BE3D70066BFD7D4353539341E8B4233D
CB7E7A6662646468720A515E96529BD76D1D9566A35228666AF50A96DDD1E355
13A5B547CBC88DD64A6F7CE31BEEBEFB1B26CE0A834CFCDBAD0FC71AD0DCC2A7
66671B9038C266EB755DD828E475777BB5465661F25E4D8A9B40B2C037BEF18D
5FF8C217F04BC248FED0CEACC55EDC1EE2CD2937CC32D3E8AA942648DE4F3B0F
6507F93EEDB4D3FEFDDFFF6F6BEF016E5959DDFFBF7B9F72CFEDF7CE0CD38161
1810B02120266804630A26121088A189A022A0A052A409D2BB5190AAA0A2A118
51C2DF8098444C548812414CF2A3481B8632334CBFF5F4B3FFDF777FEE5EF3CE
B94586789E79E639F79C7DF67ECB7A575FDFF5AFD8B6D3716A9255B495FA0920
712262491A9414E0A95DD68295D372F3CD378B37E973740D1D3010D8A79B0247
08DF0852047F2E3F9775AC5B49877AFAE9A7A32097DF3CD76DE1EED06A0E6B64
34F18DE9CB4DD5E4D65EF8F42CEF1BE5312CD188D2020892CAA9E3338E89CC2B
A5083F7A90FD09B358B870216801986230232290381CD0B3A832216B90F08676
53D2452BF0F8E38F3330EB63A32DA07A1CA18ECBC86581DC246BCC908E909638
A41BA5AABF8FD0BA81BEDEBE149C8EC6F79CF454A44D1494F9CEE1696A0AD21A
B44E5E61F141BDDE0C0D0290297D515EC137FB5EB8727489CBD78BCE2481F7DD
D5BCB4A9A741E0F1B476AC19B9824454CE95A25CB1D1EC70917404EF6D4D92AA
749AD46EF04231979392558C5A9AD29A5AB3E8723AB4A351C34DD804B927A2A4
996C764D8BE1C2D4DA32618C0CD83E0AA370BE59571997593FA6C6A1FC9AA140
66AA79C22797344E9CD08EC288EFAC9947094BF986F724D71BBECD0604DF0A78
822F894DCF1DA9D2B063D42353A0DB724645036050DA4DF42C30445DD6FD8290
86E807DB02B66C8037147E69B9444596A4A06B2603DB596CC334455DF6F9CF7F
FE820B2ED01BCB7A4A4824404545125A3BD6E92481140BD6516F64F989955C79
A5EF2C5AABA40939FE9F0F15A471CBDA7875BCAB2B5FADB8A8D5DB2F49D0BD78
9BB94B57BDBA697CAC3A38307F7878A8DE28F7F48AD10F8D97472409EA8DCAC8
A854666F024B7190EEDFA8576437C862E8EEEE9412E4D174BD2410ED4A32A755
ACF54A8AFC5E2875169E5DF1FFBA4BAEDE1CCE177CEA73A5E273DEF01868A63B
2CD99108C19CD973D6AD5FE77BBAFA72BB1E00F526AB0F6F7EF39B0F3DF45074
CCFFFB2B0CEB9B77C502655150A54C1AC0C1071F2CCB5723110580800F3CC80C
368A0182B27162372FBDF412E5F2D8B92B56AC60761C128F0EB46A152482678C
EE3153DEDCD2960DD8C7B0EA0CE23B0AA07AF90985CA96CDC281C43DA2BB61B2
C0052053AD12908DBA409FAF5EBD7A8688B19BCAD8B73C71432368CB2E2771DE
A5AE338BE069005A643D4E6F64583CF1C4134F3DF514C5C0A045514367094260
59536B6D29C8DCDF7EE58206D4AC8955FA6847ACFDA4653A6543B563DC0CD38A
8A85286D7DE5DB1D7BE32C67954D3998BEEF0D9BEA83F0A0B0AFB2B92652E1B1
19BC28AC4570BE08D92D5A3DBE432009C63B64E3B7EAB566230D4A6853C7522E
DF02812EF2A567051F3020B9C8CF623C2D4B46A30923C6A3B5463E2A965D3292
D429F3599E4A029F929A46E9C4D7A4873DFAE8A368C156BD8F8D857B87F26F31
3E9D1A7DB26CD9B2E5CB97EB73E9E0FA64BFFDF67BE8A18724AA65EABDF0C20B
CDB409C1273EF1893BEEB883740078749857DA260C52E925865EEFEFEF4DBD70
5EA2C912DBB871C8C5F9CD4D11B4983077BFAA2D4E130A012F6254467571000A
69493EAD0C00035FB46E2B5D4AC313B520B4A02892C10093C7D368082E7A9095
CA8686782B68FDE6B2F430D1AA7E2E3E404F4D112D0D70585E874D6014CC6F70
16B751922D961E910120FBC7A40EA251C980CE625F7ABD1F43B1A0D1FB9B8C95
C79B6E34769D8568B058989B34FA2409CA637A564FAD12FBC5891ABBEEB66CCD
DA57640D485F913C88E27A9AF838562B57248A2509F205E7B3D462CDDCA7997A
0357564ED56399A6C4E16DE772656CDDF0AAC1BED2D0B0CCD0114F693E0F2F27
228657F4F50D9C7DD61724097DA8CD791946476FEF714A5D4361B5377D41615B
D3618BBE8117D60959373ACF24EDC0072DDFD16D991B674202FDD74DEFBDB1DA
45A2D0160647AB354FCB873FFCE11FFFF8C7467C849EF074871C76F20B1AB062
2EBBEC3DEF79CF7FFDD77FE941B874920C3198F99E70C20937DC708369C7B07B
EBBE69496CC830CAFDF4FFA73EF529D92BB42A9C396B9604683CAAA832CD0C08
DA9E025F30D08B66D66F0305939CF46DB7DD56DCE4BFFFFBBF758D8C1214F6B0
951520F83AA5F867758A30650C1ADAFC4B990D5A31539B45B3760BC71F7FFC4D
37DD24D2D23561015A32012FBC4595696A51A54DC9D3598BA40707077C0FDE7C
446023EDC0E1D35A8843E017B29473AB38B323ACE369E875A11C6DB4644C4493
25412972F5462A33A258FAD458D3E70EB5FCE97113DD2B7D15717E020FDC355B
BE263969B47C4A78EC924E59ABB21872B11E56701D63496B936F66E32581B709
E2C420C14D790775D9123DE30C89DAA42C130CBD9D2CA0F5014E0220614B2433
CF6AD8DC78F22B17D304A99E659434E9A62149E089C110C3B2FEA6496B0297C1
F2B02DD9CC3283C384CED00FD6268ADAF4156BA565EECDD0C999A9E31319DB46
3F61D0D89091ECB66DADF7B6C0D20858FC6623003E823B1535D38A893EFDE993
6FBCF14631B462512BDB48F5F7A68C805623DFDDD9EBE35D8D147CC33B31ABD2
5C72D21C92DCA2854B5F7C71DD60DFB6954AA9BF7771D2CA17F2DD3A1E857CD1
173B54CBCD66355FF08D5B9B2D6D52ABD1AC1472328A1B1D45C9CC8D29965C8E
0809A31FAD7827405F579FCF8F6C942BD591726553AD31D47263512CC6E7E369
CDC6C4E465A6B49ADAB654394AAA745224466F1463A09E5A208B0D6ACFCC8B1D
9E6A17B4EE31CE1B7A3FA086B089B94621AA9209A2AF0E3AE8A0EF7DEF7B6870
B974C935B4B45833D2A12B163CCD49DE8E8F8D75F7F48CA5EE8E62667EA6AD60
7C0D4EBDD698357B70C3FA8DF9421A75ACB7380C40A010AA7559E69C357B425B
7469C03397F93DA7CB136BE3BC5A9CCB2FBFFCD4534FC5E103DD8BA39D79E699
320D4521B036548AE9BC6AD64701F4A4934E3AE99A6BAEA1EC803C39DDE18003
0EB8F7DE7B61A62E8DE71B2001FC9D8280E38E3B4E0263A207643A249766CDE2
689632A845D66F61D09C5BE0E3D1A1AC88448FBEE28A2B6432EB0E071E78E00F
7EF08370133FF0810F3CFCF0C37A288FB6DE4158D65DE90B160691201288F549
60F02BDD990C6ED69C9B93BC61189C5A07D9438CCA9CCE882BD3EF10787A10F8
452978B03FD2625B6926E8C4E6FA6E5C0D875FB86D7F119CE4C0587EA1775988
12C7C6BB47AB0B6BC93C17179D077DAFE4927CD2EA8A72DD51BE98C4627BA349
7D386A49CE970A12504929713D8562219797D9E0B148138F2DE1A187A27CC5DB
EF49874B7A5C53FF2F6A0D568AAD8DC978A5598F73F98D8DE82597AC2F1556A5
23D18C340BCF10327BCB4DFF6271C25C47F2AD5B19EC8F0BA24190967593363D
C0748238E843090F0CCB125FCFB968AB5699B913D4D6BE426CE0B0FC78CAF315
CFD8596BE60785E9A1B1B5EF8004091D1BAE19C3DA6597DD9E7DF6D94A85BC91
2E89ABB1B14A6F4F7FAB9ECFC505EF856C799FB574EEB1B11171F65C21A9D61B
85A8279FEF9B3DB8A4D5EA6BD64BC57C6FA5DC4C53353CDFEF1FE8ADD5C7CAE5
91DEBEAE346A97AFD6CAE3A343DB6EBBE0FF3DFBDB9DB75FAA6B3EF6B18FE9B8
6E28AF5F30B8C0434F7BF5A740BB065D3C36BEA15A1F6EB6C69368DC45B21BBC
4D907A2029B9F492A0E54B60A2CEAEBCCEF6DD77DF9D040DCA5981850B17BEF6
DA6B606DEEBDF7DEBFFCE52F5971519EAC04F27C5C867A1865FDE1426FCC8A15
2B5843B236F91FD6E095AA89565D13CEFAD4A6914A1559A8A052F5AA5F92EE4A
C3A3BC781BD05A3281E1A3A5F088A7CF7B37170DCA3B4A9E6407FA3677EC0313
5197AD5CB99293C018E0FEC63A2D5F45FB85C89F218B14962461ACFBD0BEC6F4
6EEB01676EFA194ECE79E79D77E595575AF1272977A605737477DD75D7DFFDEE
7730081236A04FAC7B3AB5690BF4060CB8B0CF043C9A78B2B54FB0931002D549
C653B8A0557AFBDBDF0EA859947619034184E81CE51D471E79E4430F3D245B01
67118FD39571DA9C406AAC9E85241373BFEDB6DB8E39E698934F3EF9F6DB6F17
7793ECBCF5D65B9143FA96708B1D3A383B09AFE4296A48B808C842694B1D8EB2
F62C8455E6CF1FE8EEEEC4F5AC83E31D5F519262C345E4DE58D32E5EB89E99A9
8162EA353C341ED52BC5F1CAE0586D6E2BE94B4DFEA66F41E3C144BBF24511AA
7E556ED6A58CD4A3B4F55CD37B87BAF31E8AB1DAA8971BFACA5F5FF54EA49C77
094F48020F38B120DF5B2BB80D8DB16ABD25DA5E9B442FB86443A9305A99509E
3492EDB7DF5ED61BBB632E0A978594D84482046F7EF39B9F78E289B02D8C569E
C407B33E0DB3FD2FFEE22FB47778E1EDB6A6BA85BD68A0A865CB96FDFAD7BFE6
2B4CC6050B16186CE564E64B41AF19E5A6F5FF41244192E1D399FF0AA7A2E126
858EA019827C6E12FA2FEF0953FB0187E0AE5915E244418AA6445B1CB7855911
A7506B5D9981DF512C748E8D97F34EFAF98078AE74556F504B4795DDD0911F1A
5BBFCDEC793DDD83EBD679C574DE363B27CDCE449662AB873A52916BB143BBD2
92351079A1E315DBD5AB57CE9F3B7BC59A17962DDC6160B0EFD1277C1BDEC30E
3CEC77BF7BEAF1A71FED2BF688FABB7B7CBFBD9191B14A65AC5C196A24E262B5
382FDDB89A5623CB28706EC2BECE9924D0533863D2C8B40AF87939F628CE38BE
51D3D0B235D30F7EF083F7DF7FBFFE04FA58D78006AAFDC095A4CB0E3DF4D007
1E7880BE42BCF07E44192E601A5C1A4F3FCF61754AE6B6D256E0626EB1EFF152
59B060DEAA557A7AB15CAB9B994935E37C91E3AA558B162F9424FBFEF7BF2FE2
C34D51ADD4BA7BBAC646B668D6687133833E8E32BC23EB236FC98B219799818C
F6DA6BAF471E79C4A5EEEFB4BE69DC650A1A397F2074A22C4F8756A2935CCF5E
5A349D22B1720EBF195E66D51293C08E818BEDB2CB2E4F6789DEDA8B638F3DF6
AEBBEE02E85117EB864CD6DCA9342506CDD150DD8978BB2DD1BEDA96C80C2946
45DF445CD8C454704D7CE10B5F209264831721A101E002D67B8C035B01DD5914
282A02DE1CC70E094596158373C03060DAE459F89A3777B0ABBBA451A589289D
A9A7A899A6CF4ED8ACAD2D5FA26D632E76DE532F46C12781D6AAA5A1913995FA
C228EA8B7C8C20F61D9463D6BF45869BF708C56369C71B29269DB9A2CBC5B209
C69A3EB09C8F5DB54560D96B352551488A6437AB5068E563C9D5F196371A64DF
3DE7DC7097F8450CB7D514DEF39EF7FCE217BFC00642CD62497151C09790B5EF
7BDFFBC4AC692EC4A650AE61586CE6E2D6DDA45848F14248204BE05D61CBEBB0
FB2C3B4BA716CC2FD25BA7A4675D402D274E02CCC13F60F6F9DCB973292261CC
EC1A7E5D975AF65465F374DE4F777EA79404665B446DFE2C73139D75D659F7DC
73CF33CF3CC3E9D50F00B2D86E3B1F8714FB2EA5AAA84CCC5247B794D9D875CD
EA9F53F02D2DEBA9F3D4F362D167331ADB3434EC9149F37D7D3DF35A4977B35E
1CE8DF26EF16AC5BBB41FB9ACB47AFAE7A699B39FD73E7CD7E71C573A94227B5
AB67B0BFF7A9679F78EB2EBBFDE6E9C7767FD3DBEAB5E613CB9F18E8E8E928E5
653D2C5ABCA05C1EDDB869BD3E6FB6648988BA2A1203515CF3058CD25AE2A4D9
48D216EB698EB60FF3783F9A248121F3A0DD13F72B05BDB442B311AE24F60104
8539EB43AB90BD31D51835C1DA8A4D64EFA5B6056A0B960476DF4E3BED244D93
72798D649F7DF6F9D9CF7E263691A479B85ACAAEEE6EADBF574944C469C52322
21ED029FE6328B7389672513B28748E0EEBBEF2EB3404F39E594536EB9E516CA
BB7038D27DC108CB3C8946F4535292BEC27E7799454C89721A589B58048DFFE5
975F9E5927325EC6B2D3D45B3F913CC066C76FC37B98949E75F4D1477FF39BDF
B4A019453400C598C5E05275C97A559255C26971A98CC45FA40F3560324F88D8
4B15D5FF5A22DD599F68A9316EAC3CD518344597A4A847198EA154484DC49AE1
982DAF2752D5499AB26E4831076306BBC20A47309270F8B0C8920DDAB8430E39
84198551C77025A542A4E9BCDEB09048C08A92C99E6276E54CEB679B886A84C9
8551568936B4A992EF2A267123373236AFEE964987486300DD2ED79452157B10
BA287185242A2691FE1F918868F95698FE0EBE6978B39AB4D256EE4E2750ECBE
969AB64802190A1DB16F7B596F782131E4E217E3E8B9A8592915DC58DDB23FA9
9387178536413877CC5924A596945C5E7405A696648814F627E42D1B11B161A7
181AB3FB1BBE4B08FCA99FF8A84C4A6C53D2B379F3C342F7DCF4BDF6B6F615CA
7E728E09F3805461C93FF6F4196CFA5CD01B2AB7659FA8141822BBCEDC97AC23
597D0011B3FA24BC6B8229471B4D57AA7F6CAC5AAB357371A1AB38CB27985665
8A46A9884ECA9571C98362A7AB546A0B162C5CBF7EB4A77B9B4D43D5AED2EC52
476F315AEAB1E1E6CCD35356AD7E79C1C2B9F3E7CF59F1D28BBE70AFE65396D7
0CBDB2EB925D56BEFAD2278FFFC4D5D75F3DAB73D6ECD9BE0F5A4FAFAC818EF5
EBD7943AA5798D8DD72A3997F8C288B8DA4ACAADA492B89AC7DB8A52D4C434DA
8A24F09022627C71036009BD27C8899703055F14B970E1C2952B5786AA347680
3417D828D95DF825F45E6F24003054E189BA0FEAA7815787E11D0B30844D8138
C0DA542A15BDC08FA3AA140DA936D52A4C5FC75A2A994B19907E353E36366FFE
7C4932DDC4C73C5E5B63740C30326AD169A79D36A524B0DC06CA0228984C66C4
FEBCFEFAEB3FF399CF1098D59F0CD5F89D9EAE67DD78E38D447DA7CB4142CD87
BFC3A9ADD107F46D506B19285B17D95F784E4C424719CA9B45EAD0B569BAE982
ACF31D77DC51DB4D5359DDFFA4934EBAEDB6DB3C9C491AA26F2BF16784DFFAD6
B774CF934F3E994E20C45A88F0B769E5E22FA79F7EFAB9E79EBB68D122564394
231BC5A08D2C1D80F65221768264219813868066EE35919C668153488F008723
3CA796A59ECB5260240AD39E193974C342A148EB0543DD21879D2A87B63410BD
19DB30DACA175AC5285FAD2C68BA9DA3DC822429BA567747A7F4FD8A4CFCC815
73F9529C2F365D2C465FD8DC43ADE51DB14903C4A19CCE61AB9CF898701CA599
A6A9E4F08E088FA8EAD33936E68ACB5DB2C2D52B857C575CA42C03CD1A9C0FCD
B7CDE99164B0D269A2A067E592910F3EF8A0340F2DF889279E78E5955746199E
A3E195A2E61BB8827E28AAD091E7B84163A4D87354D189AD87A02E40619AB95F
8B81CAB9ACAAE60F987DAED991A780A1837464A896C6ED0233FA0DD804131101
BBCE2E429590D2F4C20B2FC0C52CAD254583F1D75B6D571CE73D904F942BE567
75144B69AE6D92253CC8404CC6EB9BF6D87DCF3DDEB1D77DF7FFCBC60DA3CDA4
B8CDECC59B368D76C4DBF5F50DB49A11F0BC1D1D059FA81625DA27591BE3E5E1
39B3FA376E7AADBF4F96E3BAED976C373CECB536098338A7ADCA972B632FAD7E
B1949AC0A2F95CBED94AAAB5FA58ADA183544FB3923C79E287D5307DAFD5D84B
51C90918C792254B70085A4DA009D524EB28897DB0C30E3B8895840909C632DA
D01DAC22919FA3264B614CF97EB7F17D3C0FD05F4F9AC06ACFB29A75994A281A
95727987A54B97BFF042871862A5B2FDF64B57BCF8E2DC94538C02A79E7EAEDD
83FEB082ADFFF50CDE21036E32DF20AEB0E924013C37845841E44816F22B7143
715BB8E7742741F7D1B23FF7DC73D655860C397D65713F0BD95996BD610990B9
C0B91573D757745DA5C6CD65269D0596F5FEC0030F7CE8A1877419B7357B08D0
59C6A955D2F651F563560EAFB6C1A08B7164CCC2B3A23F4BF3A0A4D9A56A178B
CC8E707FADC0D34F3F2D99F4B5AF7D4DE3C177C49DE9ABCE27A03C199453DB32
4E70A2B890A6F34CBC3CE443FA65988F6F19B7C9E6CEE9136DBD4139F579F475
D72C76340ABE89E0FC56B2435C98EF5AC566AD2BA513CB6F2EC4FE0169DDD844
0157BD5147FBF5ECC9D75CE56A4953EA58C31BB54E9A57D16B654959B497D344
9C54EB35C5FC2BADFAFA465387B26FA09F083C34A3A384B906D11653205BE44D
880AE3825A7DAB9F47C7E727F806A9F908A39E4B972E5DB16205C96044FB30D1
900AB8C43977FBEDB7DF4F7EF213767F8608B04133584EB0350AFE8348823FFF
F33FD76191C00B3B9586FD4B5E4FBA870BFA27B74902EBEEB739143365703954
B838FF975E7A790A1723DBB923CDB7F51D2BBB7DEBB168B07756A12036E47DC4
8D662D17473DBDDD23639BD272A16D376E1A2E16F4A7348C9C8F9E265DB3676F
53AFB5AA95A4A7A7977A1FFF94AAB676749BB9B3366E5859EA8CA5E2143BA2E5
AF3EBFE376DB25AEC9115DB37675DD55FB3BFB87CBC37D5DBD51DCF43CBC312E
49D0F0790D133D095C629230967DA0D3EABD0A798F6B86C288528643C0CEBC95
59A1516AF0FBEEBBEF4F7FFA53738573A4B9C07419AC3397BA89894D0144835F
3BCD1EC919BC0C31430A086BF51A2752474B3A4C247214D18B85D52A6060CD9E
33E7539FFAD425975CA2EBA52ABEFCD2AB6CB95679A2F74BB5DA3F3090CF798D
95FEDABAED29A79C82628BC23539626CAC075B04540649C79FFFFCE75352126A
08393C329B34776BA14720043FBE19F5337B87F4DCA38E3A8AA6AF06E06E7A99
75DD4B02A04AB2A10E3BECB0BBEFBE9B28AE294ABA068F0ACCDD7A7458FCF9A9
A79E620A561E6C6848700D723AADB3B90683E1887987E1A8C5D794F11AB9A0FA
49CC453B2E9AB9207DE94392DC4466E80D3074973668B4C0A31E24DA0073188A
B27A66789305C09194C601CD1A98B88F47A603F0CD2B3FDE09908FB22C8F5678
A649A08741D9E64CE06FCAC072F9511F59D32173735C243130E8928EC82D8C5D
218A4BCE37B149F3445BF5C835647F345D3E17CB50F019A31248D81652C9A362
2D69549CC74E4AF2A9406A26AEE5D6E75C47DC51AE37D7BAE6DA626EBD6BD66B
4957941F4F1A74A37459EA8BD659EB8983D10A86CD26A01B0A88205085F93991
B2C80303543768072DB26C771186D61674237650E4F1E4934F9A2BB895F627D0
8E8749A8FAD5741DA850112CAAC4D1FE03DA04BE074C8A326BE8C518C4A2314D
1C2209738AA69340D379873454CD4E94B91981CE72095C069766B84B1C5DF45F
74DBEE6ECD7C4C74D6DDDD3B365689A37C311EE8EEEAD1EF6AB5467ACF86FE49
5B8FF3E4AD77FAA4E4A6D4F2AE91E16AE471229AFAB3BF6F4E67A9AF5A91242F
C10BD6AE8C172E9ABF6AF54B73E7F48C95D7572BC3DD3DC5BEFEAEA1E135E6E8
B49646BE93B89701D57ABD2C31D06C79D7908B1A3EE339E7F00E510D97D6D045
2986F6661C7373D4480DC1A247FB08AB93F4AD3533A28A2FCC1D0E51A0C93785
3B64E56C895593FA0AE7B4FC3DCA108D2602121EFC3DD2DF310052DA5A6D41B3
59EA9C0827C8C81A9C25B9B8E1DAAF7E55FC5DA75EB261FDBA7585540DF18A4F
868E8BB6CED88CE9CC9045EA322C7B64039D58A6A378147FAD183939B8C825EA
F4A1619D9F73CE39575F7D358E97E94E024017F81E593AEC5373F173595BB771
97E98086C792A498A6D697559F03F669C69CB17E00098C9B603699DCC2D1C7FE
6AFA5FFCE217AFB8E20AF0623506A05A74812E63C590520C2FC4AFE6DB507302
C6E3EFFFFEEF3FF7B9CFF1087E4558926F0D05FDAEBBEE3AF2C8232D66A36F45
DB0099B9ACAE6AB2AE9632DF5CE211E126747DFD6F4145AB0F0DF3D9B9D800DD
D272217FFCE7CEE9DF50AED4AB320DE2DE241970CD3EF1B5BC5BD270BDB11B28
76E65BAE5CAB0CBB4494D4CCB942D3878BF3399F2114F9D6F662424E47BA2B2A
55937AD979C48C56DE5B1E9A9036F2E59C2B4679D18A0CD5F51DA9A256770371
E76852BFFCF2CBAFBCF24A6DA2717F48A22D986F84D1E6CD43E5A23F87657F5A
E40044077DDB4651E67BDC7FFFFD7FF8C31FD2F3CEF2F1C31DA724730675DBCC
65978654018699AE0E666B5F6D2ABF79F376DE79E7952B578A722072B67B665B
7C4A9B005AD5024661DA2CC5F72EABC30476C232D333C6C7C8B034FDD18EBC42
90932428163AF2F9928C458D2A499AB4D22E4A6D6D16F2717F2EEAF29FBBBA2C
C54A75A4BBC7C76CFD81C915CBE38DCE8E595D9D83FBFCF1BEBF79EC899757BD
FAE69DDFBA62C5F242476B7076C7CAD5CF365BE363D58D051F252AF8B276DF10
ABC325393F115F25264E3654AD6D12AD8AC22D6E6363C6A169FEE529173A445A
E605DE4314749706CF40D4D6CCFAA342041EC1226B506CD46977CEB62F679179
E38929A0F1E64E2F6164AC23AD2FF0436A343B8A69E64CB5D659EA18AD54CD99
6E0CA295F54299FC9A4E47B07C3B1A1870085199354796822877D886D7CA91F0
8AE252430482B5A29FEB3090F5A1FBB8D4E703C22B963B286F2039EB5652EE3E
F2918F5C73CD35567D6635CC6D2C604ACAB6FA47D94CD2C72DE5F4F5BF001095
86A551E1D3C78D009BA0460C46CF34C1FE94C038FBECB3C31EA86165102B79C8
2187DC77DF7D880AB3B9C3FF43DC7C919F16072BD3C2986C1FB46779B751862F
6D7E274B3442DE600FA1D871FFB0312D7078704CEBAA48E21C8A912E86A92126
FF34CE75B59A03690B3397D6180FF9FF759E5B8DA6EB2FC68D5AAB90F726C968
C3CDEDEF9837D45989EBA3716DDCD52B13F1615776B9A4BFFF95A10D23698EA9
267CE2A73FF58D5BBE59AFD506670D5066C1D2852964686C6101541846B66462
73F7B5613B8788B6C60A3835286A53D283A10A1A86C4B1C71EFB96B7BCE5A493
4E223F8D94EEB62A8436661244555F6F27ABAD7DE1E90561DB380F386906D2E7
B2EC150C6553645D9635670D211C4154565FBF21AA661D53B9971519649D7AD8
B329244147B194CB75341B138088491A406ABA726769A0981F8C922E0F03978B
EA8DB1F1F2D07065636FC997E9575BD5F7FEF17EBFFAE56335976CBBCD0EABD7
AE9D3B6BE1D0A69146AB3138D0BB6AD38B7DA58214F952673E4D396D4A72944A
5DB9581AB1AF83F72EFE64BC52DB58AE6E485C0549A0F14BBF23B78C60519B93
310AD007AD22898324A640E4E0F0C30FBFF3CE3B7599819CD8E10CFBBAF02B0C
1A9A0CB755EA65F541131B439B6CC3B7B06676763DAB5D8CA3F172A5BBCB67E8
160BF95A7D82809A59C3234B257699CE381DC54CF73975E7744D70A9C33D4CD5
A7FCFDA5975E0A55333403A42079DC7CCEC9115B97591D6A6D5A375194668AC5
6D6874FA53D7C046F18DE857D61998BBCD9C8D876036AE015EF40C91BDE95E18
DD9FFCE427AFBDF65ADEE36EFAD33FFD53E9E9F0506B506E95E13FF8C10F0E3D
F4500B1D013E6A74C5D921E71D45C46D29032CC19F8DD3B9FBC0073EF0DDEF7E
F7C20B2F3CFFFCF343900C6325CDA01769B8A7C6EF0CD618E406AA2309AA1B27
D28E9F7EFAE952C0A1584941E93A94F8251936B8CB2C456CA9B7E92845F19CD8
F53BDFBEB20CE084B4B15663FBAEBEA45EABD42B4517F576F6AC2C8F2CEEEDAB
949BB5A85E7535EF13926A96B88D497E248E56B57CF3B37A211E6AD4AB4DB778
DB6D5F79E9D5B45479B38946CB0744725875612116F04858044417A695A6A037
10309516DA35309CE17DA62C5BA1D60C7E7F0E94A5125155804B59142B9170DD
75D7511808558429F861E5F65675B7DDDA9781D348F0535EAE532C5E67D01761
48CCC60330A25DE0D2081C80779B6D2E105CC5040D878B468FE61D0294663A49
50887AC5A0F3B90EAD83C778481A38885A51ADBF6F6EEC7AEBD5BC4F192A7A10
A16AB5DCD1D9DAB8717D3519CFBBB8E16A83BD83CB76DCF9D1DF3EBA78FEE24D
1B470606E68C0C8FA79E4E1F00A827E50573178C8D966BB546DE3BB73B7D65CB
442E50AB5A1B1D2BAF69241E784EB4E1BC662185D1599AB02586869038480253
C3AD79AF2D1CDC5F6F76D96597175E78019C7A8207F81C7573EA2D2C55145668
9C3DB46DF153111244A7FBCE77BE73C4114710E945B3B014348F2AD5D7FBDA9A
B50BE6CFC300943C906550ADD593AC7192C1345A19EA56519225DBDD72CB2D1F
FDE8475D00438B3A4C36116C0ED874119005BDAD0D1991528C623CB3FA95A853
B444C6C10D37DC70CA29A7B0E0BA156E2B5B6A987ED83BDA6588F3E832D34932
F6D44019B9D51FFDD11F3DF8E0835B7BA84C0DC4DA336076BC6A9AA9B9DAACB6
40BB2F367AD555571D7FFCF1A66184AE4217000BDB8287CA23516E93A64C592B
40031336B4CD886CCBF2725B16CA4172E2563041538D77DB6DB7279F7C926C5D
D0B3F546548AE6A8B90071A30180DECC528057AC6B066AB55971343F9FEF4F92
42DD0399D63D2A75AEE462A9035DC58ED76AE3DBE73B652078CD2F8ACA1DB2FA
1B7A9B823344E349E1B5C46D70CD55CEF7E01C6DF94832AF42BE23D7728B962C
A65E2F34AAD28AA509ACEFA54B97EEB5D75E92CA560562C0CE2C9AED8EF5FBB5
9D32E79BD19B599C339C17931656EF12FE5C03239E4F9A49D8150E0D2904C0E0
86A42A31A9E9BCAF5BFBD2200F38E000ED2C3130B7655F19CA53183F69D3C603
0DC035C97A63F0F328B7651FDA3695CABC2266164C2B09E2EE524757215FF292
C0FB15EAFE5FAB592CC5A58EFE46ADA3D5E8E8EA1CD4F67BD74A3E1A1E79AD5A
1BCBE55DB1233AF8900FDEF5DDEF946B6383FDFD62EBDB2EDEE1D557D6542B8D
3DF6D85B7429762CC93A3A52F145B951219F93859810A5F181BEEAC6B1F2A691
D17592046250920428E062B69AFFB265CB805D835F840D84DB760BE477CE9E91
8BDE2C5AB4481C4D2ADB030F3CC05A9B82660AE93DF7DCF3B77FFBB7F8D3709B
D83136B3C0BC31B459A75616B3374CEB7659222FDE7F7A6D16F23A83F55983DE
7747A7F82443A26F9BC5E4D7CC35C336772DE6673EF3998B2FBE581FBEFBDDEF
7EF8E18743C2D0C4016893DA15F2A610CFCE65C976F408B3C3137670B4F3095D
857AA8CBC0B3A8D4259FC45C22338C9F7452DDC73707CEDC9BAFFF6560674802
52FEA1047C08CC4EC3C0AC11C99D7AEAA9D2DC119C612A301C04E30C2279D39B
DE44450EAF36378251055CFB84134EB8F5D65B1127932501E61A72DAD012D17F
F1E32124CE38E30C895EC06E2D330A996AC0E3D6E7043AB7684A92354D8CB216
BBBE45CFF070B70455CECDD27D9ABE32C0AB602ECEF717D60E55177517936A4D
DB59A927833DA5A1D14A5741E680C7A8CBA7FF0DB9E825D77CCDB5EA395F7186
61DBD9DB551E199FD53F581ED54CBC29604624C11EA426D6B35138DBA1F32886
60A9711AB9F9C4449F70B09D76DAE9F9E79FE7266C01478C58543C7D0B58A361
13DBE4AA9106425D115D94257EACED57D85CC4CC7AA23586A3672AFC1FAAE22C
2CB5D39FA44E697D706958811B179BF5CF8165CC18E83AD75A4FAFE287F1434B
4AA58F8A141F2A9E107D6EC229C64CDA25413E1237E92E16BA5ACD449A7B2A06
3C332D945CAB998F5ADD9DA559A5A2ACBF421C79A3A9D11AABD7ABE5CA489CAB
AF1B7E75DE9C818D9BD648CDC8E56B6363D5D9B3E6AEDF3012BB8EB7BFED1DCF
FCEE590F9950E8893CEE53673ED7993AA044C705DFE2351A1B195D3F34BCA6DE
1C4E1187E2B4EB930F54885CF6DE7BEF7FFBB77F03C225646D930F6794622B69
112DF00B8E26FC4EA4405A9B28407C017B53FF4BE1123B20EF1380493BBA4986
DF676C2BCC35E41A9285DBFC487CD56A36777FFBEEBFFD6F3F00E4414F77CFE8
D8682E3320FE2092208C64BA2D6B6E6D415C869A4B63EEB62C6678E8E73FFFF9
0B2FBC10BFBF560F441D931061EA2DE51A8C99FEDA5A70EC1EC0E910AE96C633
B3EE46DA2B142FA9BFFFFEFB8B0F6ED58932660AC09C2943C48DF0A15B62928C
80B3CF3E9BB1019967796871D086D765A950EF7AD7BB1E79E4912977C772F66C
B589A6584F059628CCF4C8051DD5DBC23F5653CDE14DD2B6E42E350874046EBB
ED36E06C35AA1D76D8418A246571204F18B033AC419FB3591381F414D2A4CBB9
7EB1456D65EC8B0362DFB9AC352BE74A0537BBA7EFB575C39D69D3020DB3A319
49A45453D0949ACBAF73F10A575FEFE9D7A5C0D7CEA727353C6EB158482197EB
19E8D7C9D2F034CEFBEEBB2FC4D5102D01938EE3C877A79A54A462AD93901997
5F7EB936C86531182DC81E7BECF19BDFFC064909980AC1AAE97AFF910A21CAA4
F6DBCE9711B3B90AD00CF02B581103044040C2A009A1EDB42C773BB2A4FE502F
F35011BED223C8D780DB1010B2D387998B2E8BD72BECB01DB9CCC66432C491F4
BF0E955650869BB926D11D3C1CB47F4D96041DD22C5349E0730A53319036EC2E
B4AAB5566771A0BB7356AB2931502AE47DDE95B6F695575F59B468FE9AB52B9B
2D19E13A6CD5CE8E42AE507DEF9FECF7E0833F7549BEBBBB6FD3A6E139B3E70E
0F8F7696FA9A8D2869160BF9AEA20F48E41ACD8A6449BE581B2F6F2A5737F920
411E2749EC92B856F74BAF6D5BBEDC43F4803D69819430426007320CAC85FC0B
6544FAA66EA8BD17D7BBEEBAEB885C59E6D977BFFBDDC30F3FDC6500962E9004
E6CACF0EADE73569D1FCC674C937A37D584647CA80FADFF7BEF7E96CB03B26E4
014F7593BC43D3D1CA749CD43259AD4120048D6681E50B7C34A2C24247A65585
F131FAD403D1E1DC845FEEAB5FFDEAC9279FCC2250D6A00FCF3AEBACEBAFBF5E
8B2C0DCE82F9C61CAD54D88ED37453B3220697A25752F0F1063A0B6997537493
D5F45720EE4A6529656BFBEEBBEF638F3DA6F5973C80E3500FA167196F42C980
1784D86740514DF95CCBE520DE4B31B3F5724802B46A784DA878BA20DE60C04D
1C6CAB8BA4D52DABC787A62402CA4DA3660BEF6BD6C71D779C6486C4E15FFFF5
5F6BCA5A135F643B36DE6AD472E2DA1206B9B83797EF6825AED99A9D34E7964A
A3958A18EA22E71B5B826E2CB361CC35475DB3E6E2AACB6B875647CD6ACEFFC4
A55CD827E7D57D3EDEE8C848C1F72074B03022D5946AEA3EE85BA40059770D4D
81844E1297E1CE48623C456F79CB5BC46AB547B67D12159865862F446670880A
33796BF0DD61B352696C029297085E77438D4B7100BBB008098385B943F48A08
23495B459FD3BD3032F0C7EAFE94B89F79E6995FFFFAD7391774DF93361FF688
B6E8A6F50EC1DCC9A57528136B44E60037D57B493CE05C2C0293A92A537B8790
049A75AB1967177B1C8828D7ACD4EABD5DB3A3A4345AAE6E33B060606070F5EA
3549B3249D5DCF5DBB6E75AB559BBD4DCFF0C85A9908B5E6A6EEAEEED1F1D1CE
8ECE72D5635F0FF4CAB4A9150B9D91D3CD0BAEA50775797E5A1F1F19198E0BE5
6A6D54B2245F68E6F2E4CCE56476F4F4960C371FEB38E4296184C038B5F97CB4
645A13FD9CEE2261192A258EE090803A60186164E6E243DC9CA2974902F1CFEC
29226E7F6EAFBDF6DAE38F3F3E5BCF0912341125614AC0164D10F190F6551E9E
3262FC06E204566526C641A70BA00E2EBBECB273CE39477F36B36E5CC4F45AD6
FD3C5B4333815D263899B8E130C3CEC21C7F2625EA2261092EC051DF6BAFBD1E
7DF4511B21252C3364C5595C01170DB18DAD8D18C352C104742997B4266EBAA1
066CDDE70D1F14CB89D5B37475DBA33016156D89091CEE91D58BDA27D25AE8C7
D02609DC960828A1FA625B8F5963C57A96E26C8E72A21DD26390FD58F9B680B8
A4C45245D8A64B4E80A3E4F2F5B48AD8FBB27271A70C7AF18456B25D67CFF8D8
68DDD5170DCE1B1D1B19AE8D978AA572AD224565344AC6A2A42643B615355D54
16AF8F5A2E3B7C6953CE64A07F6078D41776895BD13FCBD402B3503500CD1748
7D922CB41D279E78E2CD37DFBCCF3EFB3CFCF0C3DCD0B0701078705EFCB4B0B5
10051A3DC6AAF926BF74013845669619F804F62E0D368E39E698AF7DED6B56EC
4264D81A1DC3A67D6A6614117DD1B738F7FE5028F76C96CE14223FC5A3F5533B
F2C823EFBCF34EAC5840C0E844A291A36069ADA8BA2733F00B5FF8C2EDB7DFFE
D4534F4586A567184C56616FC0C516344EE91EDA6D9704B9285FEA90B6DED96A
BAB42F920F1A7B2746325E6F24FD3DB3CAE38D5ACBEDBC64D7254B963EFFFCF2
7C346BCD9A75B09859B3FA9E79E17FB75D3CFFE5579647B9B2B7AB929A04C0D8
F8488A6FAA43D8531EAFF5F40CE4E3DE6AD957098821BBA851AE8CE68BD57AA3
D24ACA71AE9EB87AEA1B4D240964315862B28574984B1827B0956DA5B07C5A07
CB2E47E3E0E796B0D5F64334053B6F2EB3FADB22C6E9272E6DEFEC7089B854F3
D5566DD8B009B1147AAEA88B261B9AB1595BBB4A657CCA2CD2AD95045186CECF
D687D00BFA102BC4657E523CD76DC8DBCC919158176FDC5FC69BCCCCD23110CD
C978D72A11CE32EEC618243C4E38E1846BAEB9868A4DCAA966A8EDD4B30E3EF8
E07FF9977FD17E89955802FED6AE034F4FD28E8362C4E66091E5A7D1A276B1F5
FA8A0A2F5233A32D3B4E9BD2678C23EC52192E3B6FCCA14C362D7FA2A685DEA1
D001683A41283FAC5E8491187A3CD46B90FD5AD8CF7EF6B396DA6439F86E5274
D06C626CB282076D112BCF25291E413E896413F83A81FEBEE1A1A1DEEE9E6F7C
E3960F1FF677A5DECECA78D975E4BBCB8DF138CDE710CF9719D0F43D75524E91
9E85A415BB388A93BAAF2DF29DD764578B783424AD153D7B41CF354C37ABDB00
EE45A362553105105729F681AF189534954EF3A52F7D49933589487A0CCD6D7E
6F3F703DEB88238EB8F7DE7B6970C6B9B02050C888796288E069AF5077B4FED8
49D65F7AABE873BA17CE55B066ED8D0B5AB301342295EEBAEBAED39AB0CB80E6
CAF8BBE5965BE02AD661AD7D398CD361E0180E3BDFFA3054C56BFAC5622C2B80
A66092C191CB759706378D0C2D9CB7B8516FADD9B0BAA7B32B8A5B1E9E28CA61
DBFAF84FA55ACCF56CBB78C9EA55EB0AF16CD14A47B1A7AFD747F94A3E9D3ADE
75B75D7EF9CB5F8AB7AC1B7D35F63DF2EA122B1D62F68DEA9CC159F95CE7F868
B2EB2E6F7BE4B78F75E58A3B2CDDEEA0833EF8D51BCF9F357B60D5AA57655F4A
72E878767615ABD55AABE90F0F91250B4586FB84A14A58129E9504782C0858EA
878D3B5855BAA17A455BF61AC30B49D9141F8A3D891C4F3DF554590056016FA8
CB903EC827D89556EB084B0DE11243003B2ABC7492F91C3C00CCC024EB041B16
FAB6D9432E533361E561026BB425C22D3A3BF7C47F8AE2EFB21669B4496965AF
304326CC2C02398EFBC02809AEA6B270C30C3845D3BDA2B415E801071CF0E083
0F6AFA006523A8F4388D0A2B875585A9192A99A882A5B3DA5DCEA7B5B6875C69
ED8433DD0C0217C47BC3FA2CB4AD3016159671C2E5256C4839D3328AE6716761
B94FCEED236A42B09D0A76503450DB99E90CEBC652E3A683F2353BDDCDEC36A4
17DB61592121A9C4D383DDBB2D23F671D0A911DF9A059C58A209DC943462C978
664EE59CE1455EAC0BE0A7B0952DFBC0BA3F121F3EFCF0C3EFB9E71E5D2CFE48
967088ED3AE5BAE105E13210EE702BE97156824AD4C1051962040EA927479CBB
AC358D198EADA0E50E8E2F3AA35831CDEB7F596641A88A8517A0D15AB08DC40A
7D62021287873357F9E40DB6EF42E45E4487DF75DFC25AE415E50B929612ED5E
12A45D8BE39D96EE3C3434B26EFDBADE9EDE4A65ACDA28177CE1A108C26F49A9
D4353252965ADC59E8ABD46B5DF9795ABDFEBE6DBABBFA366E1C4AE9A6B1C79E
EF78E4918775E76287EF6F2CAD5F0FAF376A6958B26BC9F63BAD7871D59AD736
7677F57676C9DC8A97BFF2ACF87F8AC231AA1BD41BBEB24C3FAFD59A71949300
7CC73BDE418B2E5B3E92BD58F756D6DA224488C38EB35C3D4335B0450FD7CA6A
5675CC442E56C9C236583AB358FFF3CF3FDF069942EABAE80CA663F816E4A1C3
1A40A9B41F220688597113ABD47759160D30AB764360998D5387839FB2828935
31445F7341B8344446679568A26F6287C518DACAE838901ECE3E0364FDBBBFFB
BBEF7FFFFB760843EF1C4AEED632855CD63B13C83926AB9B2020AFBEFAEAF3CE
3B4F6B45D2A4955BCB2E16AF7FD7BBDEF59FFFF99F1A39329BA56E136396E664
C5D8E64E41C2594830CEDA856BD3F5D00B2EB8C01087083BE3FDD74EFDEFFFFE
2FAAD5873EF4A1471E7964C58A152CBE0875FBEDB77FE69967D6AC5943FA87D6
79D1A24534E7D143F513DD1332B0A6A43347D419B9A5545ACD9DB929AC3C1B72
A580C365186A21AB9DF2FE515036E532C7A615E8B2EF2C0BBDDAB15AA03A082F
14AEAFFF658A1A8C9EB837C0AE3A837AA2F69A0711167EDBDBDEF63FFFF33FA1
926E891B53DE1F03ABAD6E834ED4DB6DB7DDFBDFFFFEBBEEBA0B8B997225B8AA
4902432B71291E49887AE2B2F644803F1E78E081F7DD771FE53B6F00A728C9B0
D15CC6B40D10C8A5813A4AA3E112E42F98E6619E6D174407A795046649F1BFB9
DA25095A89883B2A147312EDCD86078E485AD165975C75F5557F3F3E5E2E164B
23A343E2B8B5E6784F57D7A878B4F39EF162A1E4AD895AD24CE29ECEBEF172B2
DDA225AFBEBA66A06F7621AF81D650D02A9571B1F279F37418D6556B633DBD9D
1B37ADD5CF67CFE99365393E5EEB2CF5AE58B9FC4B575C71FA599F5D387FEEAA
D52FEAFE9DA552B9322631A02BBDF3B5A9716E16956DFD765CE68204585FAC21
6CDB0235B36A52E240C3076F07519F4AB592B51E0CBD4FE63C81CA710485B63C
0131733A9922008215FEFA8F7DEC63DFFDEE77A5B74A78D8A99E376F1E190BA6
45927BA7A7DC7FFFFD071D7490DE876073E87A20F14E197735CFA965BFD949D6
8792A08F3FFE38DE4F0C0E8D7CEFBDF77EECB1C7ACF1611494B986B70D6FA8D1
EAA858FA9A1644D76BCC3A54C71C73CC57BEF2152BCADBAA63E0B6ECE5841217
A508F53E057E60402C75B7DD76D38A69A9B517D621009F27228DA818E16E2D3B
DC16DEDDCA5A8E4033E63F313DCB0053ED2C85E520FC044D9940285B239E4E72
B739E82D2B01A68CF580FA0F27456DB4CE97C82A2B4E9E81832401BA00425717
8B8C759F952B57D27CE990430EB9E1861BC8918B325C1AF2DF5E4F9D8A85B518
150CC5A82E5C730B9FD0AD01171016F61BAB8389B6EC5B69B177F0578873D889
2318865D85EB69060984B5A46F0938EB7F825EEC38A94AF40532F729112FA2AF
BA9EBAAB24002B2496A0976E88BE02B20B3D4E6696B833AC035484B0C1930679
6B7822EC77BEF39D4F3EF9A4E64BB127F808F8308F3CF2C83BEEB843176316FC
1E9BA0954142B637A24AF289133774C50E2F572509B4C8B20CF271B1A7A76F6C
54F49AABD62BBAA6B7BB73646CD845CD74513CF88F844447B16B6CB43A67CEDC
35EB36F6750F0C8F8D75C4BDF3E72DD26D9BCD543375858E8ECEAE4EDF72A452
2D77754BD28EC7B9D6F0D82BBAFF86A10D85B83067CEACD7D6BC2AD9B071A357
D06AF55A7F7F6F8A2FAFE347A77217FA529096508941EBE80D986B0F3DF41016
B719B31C693108AD947437DD1049400814975F2EEB2C0A5B812CC28C5B97E511
592CA10D2ECA8EBD59FA544BEA889A0C301E6469EF6D9F138045B13DF3CC3341
5C30FF0F2498642F17E8ECE6DC844693AC09AA213FC35BD17CF93981A656065F
6A2E9724788594AAD538F1C4136FB9E51656CC6DE97E71994F93F579038E0294
713C033AAB66F67274E93D67AD0D193066BE316ECE0F8013E6E4316DD73009E2
AC65104114FC452E9340047EF13C706A7822CC42D24E86022EFBB6C6F76C2BC0
4DC41BF55B0D5B5AA7FED41448FAD665CC6BF7DD7727AD39CA10B96766D32E13
4BE684E438E84F0A0009AE72BA411980575A3DF3EFE550A1F380424BFD848633
F068AC46EBBF76F1C5179F7BEEB92077F1DCADDD77F32E5AEED6C2850B2FBCF0
C2E38E3B8E35D7829F74D249F88848F3C57EC5E183277686DE7C040BADC4E7D0
430F952D6B6AF144AD4F1AFA32BF319A81791A5CD01DD3D40263D3BA9260062E
2C34D419FA75CFB0BF3081364C0E0BBCC3B22C50872B1B7168D591E1264E2B09
2C9F2FC4FDF00E815A229B40C75F92C0AB0F4D9D9362B391F474F58C8E8FCF1A
98333C34DA486A83FDFD1B87D6A548709E500A45AD82CF29EEEF1F1C1A1A957D
A07FBABEC78398D6251E5ACD7CA559DF71DB9D46865A7DBD83E5B49CD0AB33B9
664F6F616C7CA3CBAFA5A6A6B3AB63EDFAD55D9DC5F1F288543A6F828C0CA129
A795E2AD6A750233B93B7D91C61766C1BB80B122EDACDEDD657932540CA0BF8B
D7BFF7BDEFFDD5AF7E25E98A91AB55D66DC3DC535A7159E64033E8A86EF0B994
F60173AD9F13B0353FB5D561F12B33AECD3785BF1E17B61E217AD5C0C6D217BF
62A76C8F3578129CA794042ECB50B43824AA8A16E1AD6F7DEBD1471F7DEAA9A7
1ACFC2EC0DD1B6ED3D1E4F5C2BA183458307C680A25997A65E686058639C13A3
E3371049238152EC1295D6F68229E0AE254A1405F516D0094926566C699690E9
8F56A865A2D7FAEB86765E2809AC509CDA7D332EC16A254C42C84D7700413334
16ADA049BBA6CB60FDA87BF8F7C8B3B2840ECE663C63DF5A7A0E1A396935FEEA
AFFEEA9E7BEEE1D1181C5A90C30E3BECA69B6E32D0B7FFA32410E76579C3802D
C637BE14764A3FA1DC693AFC9F19F6DD64AA9E489A007612D11797A9472E8BDE
9305676DABF5619CB68B98F2FE26695C605BC759E70FD904D2D2AC0E5FF3322D
012D4A84F7C20B2F109017B57FE8431FFAA77FFA276BF14D5504F737BB70E60A
CAE95E0C0CD50A1FB2C5C3DA1C5FB011AEA7FA876C5D6681793453C43874A599
17CCE2049A7E2A091A690F8062DA07C6CDDB66DEA64DC3D57A5D7A7533A9C751
0AF9D06CA44C2D5FF5ED185D6F4F7FA5DCA8A6779E337BCEBAF5EBE8B1D172D1
D2EDDEB472E5EAA459EAEF9B3332D4E8EE9AE5DD7F95E1BE81DCA6A1B55161C3
C8D848970F3B8FCA309935BB7FFDFAB5713CC1D353787A9D6A1700AF6FF6E9C7
194283A57918C3B2362956D8096B336A0801060C83C105DDC138AE16D4856EAC
D3BD6D068B2952A0DAE5B1C71EA38C9607C18330D6C09B25658D7D225101C44D
5475941A4E3BCA08DE121EAAA3A84941166CFF0CDE21537FA20CE98C0B202F14
67124C25084579F409007A17743397412984D40C0493310222E7125D9FFBDCE7
4E3FFD74DD87589926A559EBCAADE508515A1BA59BE84132D8CDCF60414B0DFB
E4934FBEF6DA6BA98D00C5364C27437B32005AF3257272906A614D83754343AB
08CB2DAD7B8F2D2CE958707048E88C33CED06042703DB23C5DD039804C15988E
E6256166D627F0449A17C7D052B3A693A006C9E9B2980D62CF9A628A6E49DF74
9979FA07F10E69AFA962231B5B9F5B7340607DF589762DF4646ED5BE5B7829F4
0E8510B0BAF32BAFBCA29173B4A971A1E08B4A02EB6534DD0BD31F9726BA8E15
A9988A0DFD6885A9C06560BAF9BEFBEEFB1FFFF11F781DC064C47D04B9F239DD
056CE92CDD6EABD601F703C6849D598B075026C2F8B5E320E210E822B3488F93
7176C105175861CAB49280DDC5C4B0F3ECD722576A3435EE56A1187B6C518FEB
E025C1C5175D74D18517D79BCDAE52D7B8EF77EF6BC04A9DF9A1E171DFC82817
953A8B95724DA7A6B7B77F7464BC56AF6DBBEDA2975FF62DE0F549E4F27FF581
83EEF9C1FF17C5AD38EA8C5ABDA5E2A0D7CDEBC34934DA4ACA1DA5B87FA0F785
E5CF69D8F3E66D634722CE79E5D41B161D05AC016660AE0094B8D0CFCB1C0D1B
C042C1E48A99C3D7C04F5CE0EB64E14C5B1447DB73CF3D7562A50471E6930CB0
D332FFA2ACCDA11D5A32BBD11F69AA4E6B4C5415D3FBE0411CE9308CCCD87492
713DEB3E21108A41A66843BEF0852F589A699B3C98928368A8A266C81735D662
BC96D7E8B2A88625F9B94938771834A863B85C5D2653697819363F09B1D5B6EA
2498B20623B06E360C555B03AF310D9A011868041EDBB00260321436FA9A190D
E0DC5106654B0D7B2567E9BCF3CEBBF0C20B91D3A88D7887496F65FDE9BD8EA3
1F160FD958665A3806462B6129DE7AC925979C75D6593BEFBCF333CF3C63888A
33F8BB2959B090064D345D8A0E1B7601A250CEE204FFC788B125B420A7CD4AFB
C4273E71DB6DB79181469A0382706B43444900B884DD2FD5C79C212EE8CF9C4B
3B869A90F0585EB36611F983754C797F2BAAC0CBF7E52F7FF9CC33CFC472A51B
92C132BACC0FE9B244320D83A210BDD1361162C482970274D555570104FB9EF7
BC47D2423FD183305EDF9877C8740E9036CC2FD2A65499CC08731A0977E3EB66
13678A13E8EAFDF6DBEF81071E40EAE218495AB97AA3EAD1F08BA2F5B4883C95
0411485EFE31B1F798E6E34A7534F2B8E91D694FA5566F6FF7C848EAC61DD846
AC40AAD5F0C8A6C1C1DE4A755C7C5CBFEA2CF5942BF542B15CAFE53B8BDBB856
77CAE86BA395358383A556B370C8211FFAF6B76FF36D0D62525F52401EDF6F40
F678A5BFAF777878441B44D20BEE144B56831DA01A901E60E998A147CFCE80A5
C1415596CA69DFDACE71560D1197930057D2A2B532CC4E2B3D255F280A0A475D
86510A500C014C97A5F1B17912E0975E7A29EF930C92C504C3443FCBD4560544
884E8D679F7DF665975DE6A6CA22B5BCF5380082B7C2C5D01FC872692577DB6D
B7A79E7ACA56D20E809BCA26901CD229D23961CCE43B611173FF7CD64D1A79B3
B592C080DEB81BC5962E8B7F98CB8EE47A97F9B810BD5623C28253B6CADC116F
28E996686B2898D2A1B411A10A1F6505775106286264C3CAD8B1846B9817880B
4C17614F71FA9172861F89380A7FBAACD78D21C4CC6013C0822DCEECB246BE38
BEF0D493D400FE6ED80BC168F20D6491E22CB281F12DE190B06DB8CB9480ADDD
7776306CBAE232931ABB938582A8AC4D88097B764167B62DE732E4B096FDEC02
AF9D0BB2A269883401E199F2166B344D169C05693465F23BAC8BB20B305DC2F6
186F6C1DA007291F1233871F7EF83FFCC33F18BD19A4A0CB7CE3D68924AC3D34
1614D959B29204AC665EBE41EEDAB596098390775BC61B8D7ACC520B436A9C2E
2D9F4106327F6A3891A8265A3506DCCA2CBA3E174FD4B66101B82D7BB0598EA3
95F0585E8D3ED14DF42B1E6A13365F10BA8984DCFEFBEFCF42589101AE0F8393
0D750D721220BBBC4BE1A846475ADE4ECA77F7F69089689CD10589E72EA82442
D90F0B4F5813940ECB5C9E7CF0A200B502EA413787A44E3EF964207760E230C1
638F3DF6EB5FFF3A77E027D69C8B28023249CAA6AC07B355591C2B393CEDB4D3
BEF6B5AF1105B1F401CB0222F2195623BA19FBBE5A16A0C176C286689370C619
676830A23A6D682B8345823CF84958313FDD2B492139B51D96268FCE05E73543
07659CE311E28BB4559684D950E66CD1C43548AD701B80BE2569A0EF9B880506
A30D493B843339E8A083448DC71F7FFC35D75C8327D6BA0860E093B618660D18
F198B5D736CE9078EC3D4F27CAA245B673CAB78635695508B404B03401CB360E
232B2E886FB102610B23CE0ECFB5C474CBD06BA3F038C08AC793667445DE874D
B04DF9888292BD68522ABCE904960339832DE502DFA92504C2C4CCBEB45831B7
323C1FABD773997F55FA900C02C3200A0B0B004C4409C08565B464092C33F415
60B57570C42439230CD24C4C93D0A8B36DA1500B9C4CAC15294700AD58F2931E
BCFDF6DBBFF8E28B5482E834C243916C0683154A02180755309671840188A20A
7E2CDD628DC8708CEA59B2166FBDF5569990F02CA2704956858195876736242F
8B71593191C18161195816ACC4891E94E61795AC5D252FC3C7C7BF6C1C902C43
1A6783D0A23D66F3FC5AD73D351C71C411F7FDE847AFAD792D9F3E854CF01924
01A66B280938215A191C448813DB0B37C9F1E23203565A008E0838A935470B73
D7647BEAB4B3F2D43459B882C815A5F3200D5038264204B7D2C2210B172EC41C
06F18D7C644B54C7E1830E612279064900929D75FD846A5D5A68C6D6C320F420
73AA6A6020D7B3382EC51D030972F20B0B06A3BBADFB905606AF2E9DCDF5742B
FD0FABC92098B62C5B634028D122A7A38E3A4A0F92164691368BA34FE86F2A8A
D565E015EA435D4F3F4B97E51D9AE1C200503800D1E49CB7B989D0E98C718729
D1211F445F4196584C224C7BD557C830481D740DD6C1F891DE9F7FFEF9975F7E
B9655599956CF81FE6F631F54B9BA2036264136549EBB4FF8CB242BCD696BD4F
5C00C3D7F6B2BA7100F335664C7936A2B5259AA4BD6F93041442E14BB4E4FAC9
61557B997F386C4E875B18233E09403E780FCF318792CE23CE4FC43C2146838C
CE656DAE2D88A8EB111E22FE2BAFBCF2D4534F35ED244CD068AB3D84C142B1F4
9541C8111B3017B1F9668DC8D100347E99F83AD786CD1CB9008DC8E4BC66FEC7
7FFCC73FFEF18FEDC3F7BEF7BDBFFDED6F3FFDE94F8B019994B6EA35B30DCD44
02EC141B9C788B157C5E7FFDF5679F7DB648FFC9279FB48999DF404F3CE9A493
2EBDF452288C25A3D01CC1D8DCB2858EED99CB3C9B6F79CB5B9E7EFA696A6EC1
2B37F840CBC15FB66C19B2E7631FFB1873FCEA57BF7AE699671ABC01075E8FD0
9BA38F3E5A638615324DAF604A37ECF466FB41071FFCE8A38F3EFBFC73D05958
B2DB46D69B0DB174A1808CE7A8BCFBDDEFFEE94F7F8A3A6025215352BC59E5A1
EB8355B29435729F427F5798900E9BC66C1295E80E7AFF99CF7CE6BAEBAEB32A
18032E360421242E875F671E1F055E1DCB08449141DECCECBF36A5583B2E36B1
DD76DB893A4D11D64D4469B7DD761B490EDABEE79E7B4E3FDC61871D44BBA07F
CF707FF1DF430F3DF4873FFCA1EE8CB0D1763FF1C4135AD87DF7DDF79FFFF99F
398421266518C46BB3F1DB24014C9FDA08ACAB1017DE65262FF93376B24E39E5
941B6FBC916C6EDB8B36740ACB48210B45C3A36D16B9EA56D40A3F7559D981C9
09D3FE747F9C87080397155486F9CD2E30C451548DCCC867BDE9A69B2EBAE8A2
C30E3B4C5431A52470411E840E9A1690F8B3189F7E6E84644612F954930D62AB
C5758113230A7A8B1A84325D2167C85A9E521258E41F268887038B6D4AFAC16A
2703D55283D8325374E0189C11B194BDF6DAEB17BFF80501E1B00593E810896B
8C5B6716F10CFD2F5DBA54E3A1A4C6B0CD93ACC8D93CDB53F61570414359B879
92D59AC19F0D228100320A9FD5C06B6DB19B37274A512765597DE652A75010ED
9EEC668B20A1D059D08F61A13EB8AC0CEA7DEF7B9F581B8030BA0C6C58FD10EB
0922B6647F24AD91A935F0D3FFBA5ED74004E1961B1D50AB4D391FFC88C3898B
831478EBEB8BFA0F0523C9C3968438FAAD74D60C3D3297AD9260224DA8D851AD
55172E58B86EC3864AB5D29D8968F6AF8D4C8D285D96FC40741AAFB4E4E239E7
9C831F80B34186C374146F5E8528054CD7CA9029A415606B93ACA9007531FA13
7B4E1B74EEB9E75E72C925E692B69A356B53634864A818187068D0C8065DFFE1
0F7F589C025BCD0412BA8F652E4EC7A9D18074730D4FD79B73C965990F6800F4
09D05A7DFCE31FFFFAD7BF4EBCCB05AEC5E9743AB43F032B7699BB0CD730DE4E
2D05AD22496AD2E30CA21956D566D2859220C9C03C0C4200A5812DD39D350B92
A6A467D0F210D165B51A14A01A33324D5CBFC5DE820BA0CC5A2F1A710D517268
ACC0B2DBBC192E6868635C3BCA50F3D04989E502A181CFBD91F506B7323AFC72
F4B1B1D62EB8A1EC6E18AF885206F0CD6F7E53AA95CBF238CD21FCD6B7BE5592
D8866AE07A2161230388C6E32A60FA7BEEB9E7C1071F2CA2D57B04CC94E76206
EF90814C9873D8C0C3A7D424426C660B22A2882C5FBE9C59E3A5E0ACE9136ADD
3141F4C6F775181F7FD39BDEA459839FAA3F9185704E312291F7F1C71F2F7507
838C479800B0383CF43CB9AF002A978582409270594CD40C2F6DB134E377BEF3
9D77DC71C77EFBEDF7E0830F1A048576EAED6F7FFB19679C614EBFCD692161DC
328C0DC0E01009644C62BF4C96AB5608031158FB9710D24EABA0D15085087FD1
575A4ADD0D77709265CDC323B47FFA1550B471D0D4257472194D68D8DA06E88F
A3222EA60329531735ED231FF9C8FDF7DFAF67BDFFFDEFBFF7DE7B5D1A79D3AF
C4DA4E38E1040E037E402B17824FE98D317ABF61E5F240BFB758CBB56A2ECE35
5A4D50620C7DA1CD83C9688BE94BEFCDF9833587F9621A9C0483ACA2C9DE21B6
99EA4DF3985B6E125E6F2B3089B35E7AE862541851726CDBC1692145CAFAF050
7C672E4BF46582462018C3294E3FFDF46BAFBDD6A55D322CE0CCC123CB62BA93
163A43753D2177BB20AC20C5D76171239C03A63D4D777FBC8E68EE28D7A650BB
CCFCC7214E2E078623E787450B61C5DA2401DE271718796DF04A2ECB43B7C40C
CD823E0A4B962C11655A94C205E159EE6FB17473555903351D5A59B1B874C262
E6D0F7D816910AE910CA414F84C38AE48E3AEAA89B6FBE197037EB7CE9B24008
B6A9155DBB2DE304B6C5211281D9EE4C1C0FADCEBBC4D8C30F3F1C46985D16DE
982E2A431E8E7414236F54A5D0E67E9D92202CD1704122DC74F4631B4AD60D0B
AE9B68FB649B126CB0CCBA30834ED7CBF8FBF6B7BF8D2716572A7242DA4F5BC7
78046DDA86AB03629B5212209926F715B07E6A40214939FBD18F7EA4C5874260
352E45BC30FD49CA8AFEC460D51375E800799DD856689AB68B61BF1AD2EA397B
30C728AB88838FB4E923F4BB609FCC11069B138BD1F8F489466FEAA74B7D35FB
ECB3CF9FFCC99F88F1D9294539C2BCD0DD24879F7FFEF92F7EF18B5FFAD29710
7493B3E3A32CB51C23481CEA861B6E902AF1B39FFD8CD991BA60A2C2E27BCB96
2D9389100A76364CC2F3D1471FC5128CB3FE4436EC8928B4F369FE9B8636CD9B
BFC0DB13D58A45CC424A0D092EC932ED5CE667842B51AE42DA3E2A1890E86EAA
EC4CE6CE2C684CC8525B410301315C344853DC9D6C2EC71B6E4B4227A5401E1E
7CED5ACBB5D0575EC6A5F000B051BD39E49043EEB9E71EBC2228B99081862D6E
AE0FFFE66FFEE67BDFFB9E4577A73C69B892445444BAF4A76EFBC0030FE83E9A
B221D10313CD5A895B8942F4393A1D690533E0B490564197F666D65A87A80F60
CBA18FD1CE092639FA4DC86EDA24013905864C950B3AAF81A9A9A7845DB7F4D5
11471C71F7DD775B88CB5A58877DCF2D038A0C3D03E0E404E131D7C2DA1393AC
F5A00DCC6AC58DABDAC48DD84C2272C061131076D82C9E97E57AB67987C29537
E1A743A1AD31578334CDABAEBACA2E236CC30A873E7A44859B2A5460A3A27E4A
DFEAFEE8DA53C6CFA6F30E35B3B6B52EB5C3C2C4E82989074916E62671283454
824C24768721040BE9932B68969C4BDD09E4DDE9DCC948B2F211931C9889166B
99EC1D6A6DD935DDFC8D96C88E61277940620B01156E8B3A82FF96D458440877
63EF6C1D3C0FD52E4ADC3DF5D453CC9385D3EA8BDF599D3A8408878A32B80297
6970C69DDB909ED869B43917641A1050C2F380EB19EE6F88D056BCC371B28C28
6B9360D7186A20D7301E8B4692FFE332645A98BB9600E02743DF6DA64D7FC8FB
248D0F130FEDC6B6D380097D35D34B2F75143D3B7B65950F5D26590A13076632
A58688602C4E57FAD29A6BD6FAAD183474201D4A52D9F4A6362B98A0B4196DFA
4436E637BEF10D2B60094B07B88638BFB99571911D7DF4D1B7DF7E3B7BAD15B0
8C207B03CE2DCE1F6430D9F40CC362C550154FDC75D75D3DD0799A4A3103B668
E8D97401A41A4F4756857D3125A834605466582146F19437373FAFB520E55487
5834B05A3BF6BBECB2CBD34F3F6DE5931CB6E9E204D6C72D0CC3E88640DE4BA8
FFD99FFDD9F7BFFF7D5224EEBCF3CEE38E3B0E6763B265BA8EDDD6188A959284
04930B7A1487B46466CD94EA2D1CD0028116C3832FE8E794CDDF76DB6D21F622
93B2E89AA1A82659FD799216CA311273DC53A9608D2E346BED9776102FAB9E28
7A139342968415795180E36B2E533B3850B895C54A15B8EBAEBB4C3998AC694D
270976DE7967D1A4A1B39952F87B2581A802DF4E5B8A79486950FE8E3BEEB87C
F972CBCD25484BF4851C65ADC95FFEE55FFEEBBFFE6B92E5B382862B45FE1FFF
F11F0D7E71CA88B145AD9A5BF61520CD44FCFDF0C30FBFF5D65B0DBC56B3C37B
894263A25D5CE2BEFBEEC349852F57DB07596E8E18EBC1DA3CED163100CE4FD8
032F0C0587896BD0479421911198E200A3E09826AE496A5656B264FA0B0F323D
14D3860958F1083A97994BB68BFCAFCF3FF9C94F7EEB5BDFA2AA08E33D09E0DD
31110C77080322AC17334C50E2D58C415ACCFEFBEF7FE38D376A41885B1247D1
442EBAE8A2B3CF3E3B977815A395B4162C5CF4EACA57932C8560BA88B11DD15C
D680D4D8229CD1D2D2F512419C77DE7916316EF35CBB2CC06ED978C6DDD80517
5460DA61836B5B16636ECB36E8D6F5C932E1A0049721B6221D4DD136BF996985
612AB0A90B935FE6C4B428B7419F1A30B286A44302882C54075BB1423F37A377
C86D59F2C3E7323D7FFDEB5F8BCD49A858F61E8A8E4EE9CF7FFE73EC0C53E4A7
9304499634850719C2B063A2DF6A90325FF6D8630F494DC3873031E3B6C4B470
81F26408B5A89956F5C287D01E20D56184C065DA58E8CE6A533BC2F1BB402133
C52B6C3667DB84872ACAB2395DE06B62F0A6FA308BB3CE3AEB8A2BAEE02CBB54
65C1BCB3160E86D2413E61086B1107C0B4EC82399DD0678D8DA0A94CB6954302
0825C1B9E79EABD344F759AB018CB356E4935FA6DD1F78E081F7DE7B2F0CC1FC
AEE47184D11A97B94F5D60EFA2E8D80EB6B22E6696BC870F56C78D0825E771CA
2C52C25193FB0AE87FE21637DD7493D891A1526AB466315876A5FE3740401758
481603DF2C0C4C93B2E5A0CC9AB8539C755FB2A0B1E91766E9A00F92BAA063FC
ED6F7F1B1FBDC1CE40D304A8094D73961868188F9A7287C23A17B38E295A21EB
C37E0EC00BAA07A7EB3BDFF98E44221E0397C61EC82B95EA2DB92AFE08767933
EB10124D95943D99E384046D53D0E7CB962DDB7DF7DD7FF8C31F5A5CDA650973
9C2B3E34BF21EA550A9AE44CF365D1E002D234A5358B539348673942E49813CD
16499D76DA69A27B6E9ECFFA50B65E0756A50BC0F4BFF4A52F49D481A1661265
26CC4B97C4A9F15715BF4B5501EF82488FEBC0A0CF2E154D964A13690FDEE55A
6B94BABB2B6956866779D5CDED01421916266E3300F2B2AC343F3CCC61401E7E
71FDF5D77FF4A31FB5DA639CF89FFDEC673535A4BE79BD30CE344EC224A6CD84
3AAF9D1F58800136989F21348527AF731B4559AC4B1ACCCD37DF6CE5DC3CC8C4
A1019DB6FDD03EB78059087FE432C42DC97283BBC1F960092424D102516918AE
2EC8DF430E61107367626CD2A82EBEF862837DB69476F35458E6C557BEF21591
22868E853A43991AD627DBA9674F2542C4856501A053E3D3237FC1CC41835520
4F019662AD112CCE84E7A4CD7408D5A33061814498E9504F184078D2A3ACAE82
93AB6FB1CB2DA9019AC7E5687E3C5D23A5E497BFFCA5A9C5E61A32F07033CD0D
3AD36209966833B3266485AE98957CC59A7FE0031FF8D18F7EA4C98A06C2CE4E
9105BEF89958183611933104349304F6488BFC98DE6A1510886E780D1E67C667
AA93732E995E6B9E6186AC7EF8AAA42FB3245C801CC9DAE1D1D2D8B4435658B8
78F1E277BFFBDD0F3DF410A96F22741D0CAB1D7D3D9200A5187B9948A395046B
9A7A283A26EA33B536064FE432E96D6871BAD509279C20814FF194AEC15760D5
1F24C3B8ACBDA295CB5AFF3C3D82F418D3435DA0ADBC7E4960F91E06238CAB6D
BA7D71715A612773A1AFCFFBB8D29A863E6F7F8C80EA1E7610F427A7D6E8ECE9
91402BA44A43AB311191E359ACA7CB605CCD2B6DAA89F9FAC9AD9A4C21162FC1
A205F482BB99FA12A73D114911D6055A34DAFB916CFEF9CF7F5EE6B618DF76DB
6D474404394DB703B2AAD0B819F9CC35D2D34902DD5CB6C89D77DEA9F7867B11
1E8130F0DBC637DB2441DB7BAC4CAAD2CCBF6C6825F82E0E3DF4D09FFCE4277A
EEB6DB6E2BBD72C99225BA52EB60C0FAFA5F3A81F83E49105A2B8A7EC4C5B432
CF3EFB2CB995B063CE026409799B41603D50A349999D2E000733C30293C20A42
51EC50080CC03997356DC620E39461DACA923EFDF4D34D677253C587210010E0
2D03C73CCF33788DCC82B1ADC44DC71ADA95585A6D9D2D3850F8F476D965172D
A025D7A22293127AFEF9E75F7DF5D5F8792EBBECB2934E3AA9EDB9B656D36966
E4861E74D041FFFEEFFF7EC00107DC7EFBEDD2D19F7CF2499C1F483E4A5EF6DE
7BEFC71F7F9CE882BFBFA9F9C8C9FDF7DF5F9632064B9BA7350CBE859681C903
DE9371C4218C82BA06975985FA5C17D0B2B58DE74E595E1BBE4C77081D8B50AA
B5887341A20E0100B4722BCD40C124971C0C51ACF5B620E1CCC200876023EB5C
1A05B02DB82664B27DF9CB5FD6D32500C23C2833757959E5A41810C810C479B4
5640194B5AE80E9AC21D77DC71D4514711B124F615F69C226B9613A8A7608A4D
7EDC949220F4595174261ABAFBEEBB433A9E41128803EDF5CE778AB887366D9A
3D67CEB1C71E7BCD35D768FDC84615057574F82E72DA312F9E9389DE49B95495
6E785CC2188E6F7E644816598EFB02B39A434B2E3F7CC138A0D988B8B3659649
E7B2FA41F38798670C7A461E4B824A0C58F5BF9DBDD0203010371E2DD679F0C1
07EBFD75D75D4782F574A4329D24D0DD76DA69A7E79E7B0EEF28E29F686A2815
A6930461DE811D1974A328CB033CE6986324D276DC71479D766B88C49586D669
2E29944D485A5C4993020391DD31E35E5F69D6C0459893CA160AD2856B5B0C1C
B3156086D0C916EAE976071B24FC34CEF0B5B4831AF333CF3CC3D4306BD85F70
1BB9DE5896CB5245AC4B55123409D79FE295E283747932AE126DD977BA6D1F27
5FA3478878407805B443040F03D4E7AFBCF28AA189E0784715666510D8065B8B
7DAF37565E10A790763AFB38E1B1F2C9D89E814F86364158C3648D57AD409A5A
D4CD3681CB72F5B0C524AFB4DC966C60AE67D8442809428EECD222495B5612DB
91E758BEDCDC5CCFA8CCA17FC95CE4D3CD30F420B94042A217E01E41B762C0A8
0C2C3DC93F2ECBE7C364B606069624176D9986E1A6816933498084B7C13342DC
7F2E08EB9983488472C515577CFCE31FA784D820D25CE096653044C9F4A755AE
87ED32E20C23D7B20C4965B3601A5E38D4E19939949D43FC3F21160241177CBB
333493E9EEED19D5614BDB3497328C33AF48D66A7DA97AE2B2428189A86316A7
49703636A6586193041A1B455B61A14D92A672E27360D8A6A1DB657BEEB9E763
8F3D86AE475E998422A4680DCE5852CC32DDF0D39FFEB46C321C6B345ED6B760
FE80C681A981DD00403A1B1176F4DC2A49E0B2E44E3325CD533AD97FE2B6F4A5
98E40E9982F985C3FC3ADD590625FDD1E02C96B68B3BC8E2FC486E2C7B9C0100
ECA0BD61129116C5A9B183893D4AEA2455265A9370893889611981AD89CB127F
0D08811500B8DB8A284506C71D77DCCD37DF6CF33DF7DC7365B5582C138D5B3B
2845049002B386C3B0B965B820FEAD4785E508FC5E9F44B895BCC75E9F2CCC78
AF45D39A1BFBB6E41FF3E6137C25D8AEB9882D1027472921E72DEC7C80BBCFE0
5127BFD81D03F542EB3587B946ABC5B4B5DD4212184E4538BD5CD081CB60DAC2
B06DB8C449D047093A231601C76734C8220EAA2589C7197045DB3DA7DC09F399
429A2EF329B73288472B3CA1ECDB7A0FE0C2C30C3739A915D1F5D6F54267203C
69C6C7A75B6E08C848D9C66F19811C06B012A13CFD2FE2336C06BB15B6308CE9
A28B2EFAE217BFA8F75A798B3E19FC8E464B1534E104C3A581C1A1E859FF0A5D
637EB9192481CB74492BFE94427DCA29A78833BAA08E74DA7D7149B1A3E3D24B
2FA50389EEBBCDDCB96B5346D393B57082174FC8308DBCBB7B3CB514BDD65F6F
589BCC36491F0575186DC53EE889D61C8684167350B4D59C4BF7111F3498687D
250E72FAE9A71B0B08F3A4C56E241B2EBEF86297A551324D7D280A09FB595A5A
9DCB42085B2509809720C61812038A7928DE5C80EB6507818987DE8CB60DC279
7DE79D777EE8431F7219F0910B3AEBB6E1AE47299A77D851E3CD6F7EF3934F3E
892B06DB5A275AEB6029CB1C25D48E0B2EB8E0C61B6F94BED586AAD6D6259133
65069C9D2033B9C25C1D7DC81CF52CD95EA79D761AA769E79D77D6AD34363B1D
A273A494C10AB954FFB06413B342F0139AF267FA789C01B44D6BFB06C2C0E8D0
A2110C7EE1C2855A64F1D9C58B179F73CE39DFF9CE777EF5AB5F210F7478F544
094BD3F970FC5A313F1C4CCC417A3A6BAEF7D64C4616CCFDF7DF4FAE4A9B2E3F
E520F10A80D5614718C16F3583869BC90FFF7F1A8323CA70A77C930000000049
454E44AE426082}
Transparent = True
end
object v: TLabel
Left = 16
Top = 8
Width = 236
Height = 48
Caption = 'SpaceMission'
Font.Charset = ANSI_CHARSET
Font.Color = clLime
Font.Height = 48
Font.Name = 'Arial Unicode MS'
Font.Style = [fsBold]
ParentFont = False
end
object Label1: TLabel
Left = 88
Top = 54
Width = 130
Height = 26
Caption = 'Level Editor'
Font.Charset = ANSI_CHARSET
Font.Color = clAqua
Font.Height = -22
Font.Name = 'Arial Rounded MT Bold'
Font.Style = []
ParentFont = False
end
end
/ENU/LevSplash.dfn
0,0 → 1,256
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\LevSplash.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\LevSplash.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4428703704</prop>
<prop prop-type="OrigDateTime">45408.4427083333</prop>
<prop prop-type="XlatDateTime">45407.694375</prop>
<prop prop-type="Translated">43</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:SplashForm.Left" resname="O:SplashForm.Left">
<source>241</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">0</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Top" resname="O:SplashForm.Top">
<source>158</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">1</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.BorderIcons" resname="O:SplashForm.BorderIcons">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.BorderStyle" resname="O:SplashForm.BorderStyle">
<source>bsNone</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">3</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Caption" resname="O:SplashForm.Caption">
<source>'Bitte warten...'</source>
<target>'Please wait...'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">1</prop><prop prop-type="Order">4</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.ClientHeight" resname="O:SplashForm.ClientHeight">
<source>373</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>388</source>
<target>388</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45408.3469783565</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:SplashForm.ClientWidth" resname="O:SplashForm.ClientWidth">
<source>515</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>533</source>
<target>533</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45408.3469833102</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:SplashForm.Color" resname="O:SplashForm.Color">
<source>clBlack</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Charset" resname="O:SplashForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Color" resname="O:SplashForm.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Height" resname="O:SplashForm.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Name" resname="O:SplashForm.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Font.Style" resname="O:SplashForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.Position" resname="O:SplashForm.Position">
<source>poScreenCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.TextHeight" resname="O:SplashForm.TextHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TSplashForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Left" resname="O:SplashForm.O:SplashImage.Left">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>8</source>
<target>8</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45408.3469833102</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Top" resname="O:SplashForm.O:SplashImage.Top">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>8</source>
<target>8</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45408.3469833102</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Width" resname="O:SplashForm.O:SplashImage.Width">
<source>515</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Height" resname="O:SplashForm.O:SplashImage.Height">
<source>373</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.AutoSize" resname="O:SplashForm.O:SplashImage.AutoSize">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">1</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Picture.Data" resname="O:SplashForm.O:SplashImage.Picture.Data">
<source>0954506E67496D61676589504E470D0A1A0A0000000D4948445200000203000001750802000000FA2A7E410000000970485973000004BB000004BB016E1F0EAE0000000467414D410000B18E7CFB51930000FFFF4944415478DAACBD09BC1C6595367EAABAAAABF7BEB7EF9E3D842501059771FD3B8BCBA8333AA38E280E220282826C02814058022191254008B223A08220A39F333AE8B88C8EE8F86710710104C2928424775F7BEFAEEEAAFA9EBE0F7D2CEE4DEE2738FDD3D0B7FAAD7739EF79CF7ECE6B1886212FFF0441C02FA954AA542A45A351DFF7F170D5AA55CF3EFB6C5757D7CCCC4C7F7FFFF8F8B8EBBA78DD34CD60F6C3EFDAA165599148043DD8B6DDD3D333343474E8A1873EF5D453F829DC122FB27FB6AFD7EB788857D0A0D168A00D2650AD56F1B0B3B3339FCFA371269329140A68DF6C36D12C168BA1017AE8E8E8C0DCF024994C562A15CFF3B8043EE7CC39167A8BCD7EF064DBB66D175D741146C42BB55A0D0FD7AF5F7FC30D3760089DA12E902F62218F3DF618FAC758E8906BC1ACA6A7A7B93AB6C777AC08FFA2653A9D2E168B0A55B459B264C99E3D7BB00AFC8AE7E8842DF99DAFEB5EF0213E5832FB673FE81FF3C1CCBBBBBBB12380D5DFFFFDDFFFEC673FC3D6E009FA674B4C126DD0091ADC7EFBEDC71D775C369BC5EB37DE78E329A79C82E70411B6696A6A0A73C017F496CBE5F0A7CE0D9D004AF8170DE2F138608EA1B1473A3D4C8CBF2AACF831421FB4C79CB94CAC3D91489C77DE79975F7E39F69DDB8A7ED000CD3004FAC18E707A6880113101FCA4F099FFC1736CF4E4E4A42E8AAB466FE80A3D1355F01048522E97F545DD297D82B1D012000FFF0A24E42EE3C381FAFAFA46474715562B56ACD8B56B17BE1044C4528CF5C10F7EF0473FFA1156818DE043C771F0A74283F3997F1E755D9C0311587744CF1A61AB33C7776C315A02A461DCC3886CC6368B172F1E1C1CC4EBBA767EC7F4082534DBBA75EBF9E79F8F11B93B6800ECD21EF0040BC14CD033C80200423C01B40176B6E41A8190131313D87142000F095BFCA40F89DB3CD77A88B858FE0994FBC8473EF2C0030F601442ACB7B7975D0163D1833FFB41334E8020E2409C0F77EAB0C30E7BE6996788B1C43742896DF01DAFE3217673F7EEDD18176B242A7239A44E5826668EB7D0092189D7F1135A1E7FFCF1BFF8C52F9E7FFE790C8177D12709C5FEF0165DA10DFE45E71C88E0E5F2F12ECF3BBAC25E5C77DD75F8BECF7E88541C85070A2FA2434563CE017FE23BB789AB30E6631E07C629C20A89C4A4F8F8971B06D08F8D8D1164244FE13DD30EB10CB4C73C3EF4A10FDD79E79D3836EF7BDFFB7EF0831F809AA331E9859209D2381C1EFC4B62C1DD65CFC0216C1E511047115060E758037AC373B4212831731E338C8B6EB1046027DEC5AF8011CFEAC0C000DE226564637C416F981280B87CF9F2175F7C91209BC309385BFC4B228EF6A4E36122AE6D785C312EFEC44F071E78201EEED8B10343006940A18E39E6986F7FFBDBD8AA399C80679E678C98AA4C05BD01C50179C01F4F48AF89C1447D3C7CDDEB5E0714C77256AE5C09D4C492D11E10036CD1214E4E983110E1F0840C069351020738E05F34E3FC490230134C0CDB71D249278183BEF7BDEF7DF0C10795978749FF1CC182BB4CE285B961A7B01C7C476F6F7BDBDB1E7EF8612588982D1B808CE20BD685EF001A0F981E8FFD514CA2019016AFA3FFFBEFBF1F709E33BDA54B97822451BCE034D01BBE285A921E11FE9C15F18158AD670C5FD6AC59F3777FF777DFF9CE7740FD716400227085B56BD7DE76DB6DD814BC454A819F80754F3FFD3490101D02DA980370003F81306114B22E4C9ED8B84F4E8077092525D39C64987B6197714030DC73CF3D77EAA9A75E7FFDF56F7CE31B21B5E8C9D2A561624A4D3007E221E1C0556BB7A441847C98872D5BB60CD3566E0AAC00B7BBF7DE7BD192B0C58BC01F9E65EC9D028DF3241DC764889F60A8679E79E6C5175FCC51C28B0AE38F3EC7EBE8937B8781F01645133C21326392447215A17872219262742C1F6787B48E8B22E7461B1E28C010B322C52486A319491F7AC6CC791C301FCC1FE362692035687FCE39E75C7AE9A5389B6849CAA93C35CCADE7EFAF724A4C03E8F18E77BCE3273FF909C40E0CC16592ABF1BC2C203128CFD3A189C09824A64D91489FAB50BE0F4E103E3394CD29A743C40001C513808020C34F1852E97578C348CE48387898B10C504330498A5A64DD121218B961688FE7E896B848FC03E8F9133500005D052E0ECDC5903D60FB89A97C573758DAD23A9FA325C7529104F80424807C7AE2892762CB81E573B416ED81A7050BC78B040E1EEAD1DA2727E0886436A429D0B1705CD120AC07E8774A103CF9041499D9DFFCCDDF40E4E791A0CAC59F00310C0138EB7A417A868787A9AC60E3C8EDB04CA21A27CC9EC94238163486B3CF3E1BDDB2B112418A021212A5C95AB01C6E9F6A033A6DC58A39479A3A9C1E302E1CF34757243A6C09D2F0AE77BDEBBBDFFD2E87C35E8360E17491A02C701278CE495BF554E064023EF815A0C013C53A6CA24AD961F88767AE5B8F1749E61433F55CA8AEA08A88F236EE08F68EF8F6D6B7BEF557BFFA9512A039E2FC02EBA21080570028526DE564AA1CF0432114C0C45B541CC99038130010DF5531A284A478C8F928F5C17248C7EBB31F6211B666E7CE9D9FFBDCE7C0F0B81D175E7821F44BC001BFA2438002EFE23471379510530B64574AA055100EEB5BBA41DC1DB228BC8E66389B18480F386514920BB2072E84FBA2947DD1A245E001E807CF6939A03640798E1B817F2988E02DBE8B290138E8013FA125A04AB583B88D5F79D6C27C0ECB67631E4C9E0B15C0F7B7BF2A27B1074ABDCA7A95A6870D03FBC313EE9A3BFBC1178094E414107BC31BDEF09BDFFC0688411CD6E3B65F4EA08A921E6F60215AE2FD2D5BB69C7BEEB96CC99D53D084F198E492E84E0A422E4DA263B63FA405841A3640993C255C5A36283850542789E702C8068E3AEAA8FBEEBB8F622CDF225A508622EEAA984F4313CF03814B7A77DA69A7018FF93A9A4166874A88C69C3657C789C9AC7588E26A5850C2874A19413ADF3A04FC23D1C41061394EA1A7D0507E13D609F085E41EA3FFE55FFEE50F7FF84325D35826E643FA4B8188A225E826A921190F8FB7AA11980CF6859091B6DCA7F640341B191909D33B7ED4CEA07C42F9105935899D2E212C588419A40293980AE050A653C8108C981E280EFE3CE8A083204310A9A8A0EC4FCB264791B666837F713EB904B2049C5852521E27C596F0AE29330E7FC1EB7857ED1BF84E2306351BF257FCF99AD7BCE6D7BFFEB5B485564C18B21E6810608BBD035939F2C8231F7AE821A80E383EE801F0C41C680AC3C416D0098866619D403FA4929CC9FC7775D7544AA04E404B11D645EE15D67E14261B376EBCE0820B489ED03F760A10A0DC060403B6A0254833640E7EA1E513679656232A221489301CE91A3711CBE77004294546BC48DC50794BF91CD9301AE87288CC611B143EFCCE9345E11D0351E3E101A784C40E29AAAA4D090F69E409A32B96BC6EDDBA8B2EBA886C181F2295B415C4E4EC07320A968F3F81CFB46A704A1435303419C6FE28F8D1471FFDAD6F7D0B13C61E0137F890CC8CD0C04FA4C3181AFF12C9E77FC0F074FEF87EF8E187031B0125122E6C04E0433D8688246D81DEA0599020C3D66260D20B6046D84AC5CD232C28C7E93901A0B1311800239133D3B8B1BF35EFEFA3D450E54A9935F029E525E9A1F042018D74471185425F98EE68CF7A6054CF529B38570138F0750C47B98FAC8B3C13DB03D0D35A475EC2C65835DAA001A9BCD2B8F99C4027031512A4FCFBDFFF3E700ED48D5B129649C3566015045430C717EC14A081F3008CE131D013CEA1B18FD83E72566EB69ABC6FB9E596534E39051846E309CD6894D07954F02FDEBAECB2CB366CD8A02A140F30F101F30793A004445180679E82ED3E655B95EFB8A1E4F494B0A8117374AE022BA2C4407AA7EC1CF34433E027CFF3023211E6061029CC21B87CF39BDF042DC679BEE69A6B48AF4F3AE9249C90C71E7B4C95DAF0AE2915D01DC42BE816EB8588C06E7926F99C4A003F58055E5736A9544937827E1DE2F31C1B882CA813CC51F68957FA902F526200D03037F0A4279F7C52E51E502B1A9A89AB2452EADE503C24A6A9FC81E76803D2196651EC533D55EA0653919C4A094F10BD3B2A7D135155B22402A31976075C47DAA62A328CF99CE0F4D34F872282E79C36AD5ED44D95A92B0F80EE0222C8D7D5B90899EFFCF3CF0722A9F95E42FC5E669569AC051DF2F8AB5DE575AF7B1DC426BC42EE428240FABE75EBD6F5EBD753F3C3736C2E66459EC473CDB52C4015B13A9C4AB013C0109DEFDDBB57E9158F03B94298DAEC0F4F0025F02A2C01F3E469C5BBF88EDE4E38E184AF7FFDEB801259F521871CB27DFB76FA6C5A671263ABE30B7F8293ECD8B14366D573CC00C35364A078A89C196F6198175E78819BC78D516BF5025CEB95720269B35685C2EAD5AB9F79E619695B2AB012CC0AE72A6C109CCF0914E7E64C4CC9A83DFBA1E54465616A12442F40507D80BAEAB084CB79EED33A049287774932484039131A8E75EDCAA5D5424D3AA2BC010DB8BBD2B6FFA8B74DB5C8B02F94BFAAA5E2F6DB6F877443370325711E06FADF788C57AE5C09491C2F6281C4C8B0D0A474108DC94D756EAADCCC315EABF54F66C5283D5ABA3ABEAB9E5EB6848485C68A991FF8C0077EF4A31FF170F20CEF0F8BD039E56BAC880C1E10A071E0EAD90FE68CCE0143AA7D73AC43737CB3EC16BFD2E8846E290F624369C3C51098219D19F889DB8AC61C1A2F6274104ABCA23637FE24B3D23AFEE5131A64F6A7EB287556C2416CA1FE37C73AA4744D719B543B6C16E7F139EEB8E3FEE77FFEE7E9A79FA6B41B96C4C9096856C2A248A778881830C2F34824E1795163322806404109923D70686A092AB9530027BA52ADA4C2A726C7F9D6212C04A2034D58C41374A586787586D398C9C3CB3DD5F0133DFE615BB132544509BA48293071F26A96A422AB24857026559C6F46262F54A962CE4E85A9107D726C89B700581C310C44F8A8B18BD478613F9982426D954436EE3B250309D9F05F326630EA063F9330AD5AB5EAA9A79EE2C909C34BF939BE63721C80363534C04F7805F3A6556701FDFD957202DA882824860510F2037C07700129F5C5E936CFE104DC4E7509A0439E6D501915F9C30229361E4FA8872A6439347829DE020480CAB4A248DBF7A206DCF97E0269DB49814F071C7000E40B5052503A7D5DAD4312B2AEA84B879059B66CD9AE5DBBA8D0C9AC3C422B99B4637BE8BDA04446C90BF3C4A2F090E8ABCAB532332019A10ABE427E409B26DB2832A92514432F59B2E4E31FFFF895575E49A5552DA7CAC6E658395427E02E9080A213AC852109A4111C941A864E00ABD8B66D1B64465A1E6846D89F9C81AD446F73027E3873808E123DA566F48685031908F330BE110FC39E83F047C51D4539527FD5A4156294B6A8B9629934F133B04D0DB8A465739067FE673E5994767C81A882DF6E401D97C61FAC9D7A2D6D14F897C48B544CA74ACC991395C4810E3AE820B00A5D2F8DF5738297A8A9D39F47030EC90D26F0E637BFF957BFFA954A601A1B86A18F39E6989B6FBE995C16DD0220444EDA84F7893F1865CD9A3550A6C933D4A31B769E93D5D1B32AED701A0C87E553520E6332E40F5A63742DA06378F7BFFEEBBF783418938257F0E7F2E5CBD1C3A9A79EBA79F36634A34F586DADD8596ABA1AFD41273FB67B4E34DDFE283895187488D38AC34868A8C848F703158E053CCF24CBDC65CA0A34D1E35D9E7775DCAA4CD0022EE453323D200404250025ACAA1310CAFA68A9E431C0171E89152B566063C2B3A170F7BF651DA2564B54C3BFDCBFB56BD76ED8B041B1194BC0D6AA2CB04F4E10F60B291E93C252E8660C2B1E62459FFCE427F1F0AEBBEEDAB3670F40445F05F95FF80CA8F005D0D11827FB8922D55826251F1AF3A33A41D8E91A264F61AB85CA26EAD550F99A561A2E21ACEDAA3D545572D21D7A4D20DB628BD5928E7952BD63D0ADF6C33EE7780E48D4F85DBD1A0A99605E20AC848C783854EF7FFFFBEFBDF75EB4574D6B8E990B2BC5771E5AAE97409B1F5B12DE6BF2091A15F1E49E7BEEF9D4A73E4509400342A4CD11C3CE79E504EAA7E159A0C9853494FD84A3696901C727AC742A33A342C3B1D42683F95F73CD351B376E5457ADE2E102275C2DF8AA83CE4195397E26BA1F748DCAC0F8D16851EA7073BCD6BA6BFA9606F56A20294D1074BDA89B477559B4017A00B54E38E1846F7CE31B009A46FD61AA0008B08B7C080201B48A700481C61104F3A248C16EC1306834A618A45C5F51825874C515578044704768BBA615945E0DAE114BA09156A5076E2235091E10D595A9C16032D853F08070708784E424EEF81CDB8346972E6CD5D1F010B57F48C8B4A8BA7EF8DCCDF9F00C127A00B22AA9340FD2A687876192485B880151EBAAABAED28EB05B679F7D36381E04A8E79E7B8E411D8CC0C1D8CA120041AC4AF9366084B1B1431AB41E16CFFF4C4E402323F5FDB0D90133BFE38E3B3022F91BC837E6093D668EEF5A42B11F61C204960EDAAD4181C0516A0C18823294AA631ADD817FDFF296B73CFAE8A3D75F7FFDE9A79F4ECCD0E34DAB289A71866A97A4DAC42DC177004DC3B129A4A83D81984AFC53AA8D7ED03E6C28449F1ABD4393345D0214B5A46D7D92B63EC84E48161966CE758503BDC2279F448443681433E91A46E4CE129F002B0001CC326C22E32B4A88F99027814FAEBEFA6A3A21E948BFECB2CBCE3BEF3C028DE11F0C7555873C0499A38E3A0A3C03AF533298233086A986E237F608E2022740E2AB944E7D4E6132AAFED2818101DAC488F9848FBAD0341D045F48DC29A9B071D8A7C58C0D7A5FB8950A1C1D51631F54329076D43FD9834A3FD42A28EEF050A87D4CC3DBC902296A7CEC631FFBDEF7BE879680D5D2A54B3FFFF9CF6FDDBA95269DB0E2A5B1E74AF4C3B100611F2CD921BFAB4750E6C5BCEDCF12400AA5364C5267D213BC4219140FE9B6A1A1292CD390678028A119E9A3068C92E1A967957C050DCE3CF3CCDB6EBB0DCB01BB05FE53D8553197890500C81C031A35D470CA05CF11A57E0DBB22A81790F4B95E4CFBC8238FFCD77FFD57FC497FD8FEAC436A1442B774C5AB456B9FEDB98FB4AC42D0F9977FF9174AFDDC44E55E61F11708096DE6861B6E60581169949A075AC3D06BA76E00705D7A9FD5C6A7FC8D2D95D6A0EB9B6EBAE98C33CEA014A9E44F9D54FF2B9C8084490DE898037815944A68FAC40F2C1B8D39AE0656EECF634CE860B1AB57AF1E1919A1D84BF54D8D0678171A315AEEDCB913BF2A55C2AFB4D091AE910A2BE5C2BFC40F1A8548CDF5D4E115025DD33DE8FF94B6C9E8A31FFD28B693867BC8CB20AF5471D00310FAACB3CED2D41B66C1BCF6B5AFC5F9F9E0073F78E28927B25B9A65F116F608871FAB231E87D3EBE861631A9DA22CD90F26C9FC0CEEF5AA55ABE8049AA35EA876C89DC204FEF33FFF136CF899679E9993F477E8A1870280B41662816F7AD39B7EFBDBDFE257BA37D44A80E30DFEAD245E774163CFD046A3BF487198D1A6CA87BAD383D9A06C100260265EA462AABB8F49429423F9C3704466F5618445C270FE145569B461203639D9C5175FCCBC10CC0A8DE991A3D0A73482832A3551168E06B7DE7AEB71C71DC79F56AE5C094CA6394E234D756BD4898221D012741073662C23E9F29C6402601D70039BAB640E9491BB83434DDA8439D081216DD5767EE85158A465D4104F227AC304683FFCDFE204C0D5356BD660868003E7A3AADB9BDFFC663CA7AC4DCB06C6A58E4E158DA63FAC178D8148C05E50DE7FFBB77FC32B684FB30F71523D195FFBDAD78E3EFA6842AFBFBF1F9301366262A07B20A9D85C9E6ECE44D92D75682200DEA29509AF901ECEFF5026C05BA024DBB76F57B56C7F564DE2F99CA00045C27D524B0D8252B3A49AF82464CA030EA8F44917310E1A094B381AD5E0E92205C10600768C93C59F38360C10643E024D60127286A83519C887A56EDAB40992320F181057B348FE4C4E0092F7F8E38F63F618859E525A9F88AC7848675D1888B21F3F01A91E57A1525E3870281C5DC713CEF83335F22829246D626E1E45549D001E9221D1A0C4734BEA40E2AE065385AAFA4BE9B0A1124667B81ADF40F7711218BD4A34851E8AE951E3A3E989EB65749DD24DEC0810059054DF8F92F2F9F93B61BEABC405FF6274C69BFEEDDFFEED4F7FFA5369273450D79EE3ACA318A2B113A40224A9340BF060D0A38B5DC017B4E47A29BC90472A31A5D18F01F21476C2FC896786560E0656317C000DB0763606707854745673082E519A4700B409FFD213ABF17254AE2FBDF4D24B2EB944CF85B2254DD7A4827FC41147FCFEF7BFD78077EE26B7064FE8BCA5659979C5948B71E29873134E7824CFA6ED1818A2818944360608E9CE6AAE8CC6AEE0988063EDD8B183C6194D619550580B236D643FF1A614CF4952DFF9CE773EF5D4530BE4C1FC899C802A94F60CB0335789C79316766A21E1AC497E8006DC68B5E85236E7290EC70BA1A59A7AC823F58CD09C3B67B6A4A4A4D7D47101490A49A03CD83BBC4EFBD81C3FCDFC0FB7296CB223FE2F0C1FE003E374D575B43F1D02888D4DFFC31FFE40440A879F802332E4878E7DAA95EA56E149D1D4EB3F72024D3053D70149218DB614E8F49C2BF9E0D9537799AE90D487E8FBBFA5135C71C51510C10820CCE49E7BEEF9C4273E41E4507CA5BA1A8EB3DEA74E206D01597383C91B888E6A1D56C6A088CBF6C66C96166D358C9EC69418114156F49EF7BCE717BFF8C505175CB061C306325E0DD8A00187A80F717BD7AE5DE1BC415A90989273EFBDF71E73CC31F8F3E0830F7EF6D967C3145991189D28AD544192280B8E82D7C195E90E254C34B88B6B51873FA9677817D09E59A9FC53CDE2F3EDD74C4C63CC89CC4AD36472E1E042B0319054AAB1345FE095B02ECFEC714A5BEA60C7779086134E38E1C61B6FE441C29F20826A75D1D7C30749457B35A3E1E8423F50BCE749C6AF1415E9F4E2461BA15C62A237D158A33E5486C517BAD6D927890B78030B00507400E5D5701A526A99573C80441C9BF5D0430FA97801290F9BFEF0C30F333F566D65DC262A07CCCEC5582416AC7142295B662308D4814464E3FC3131DA09C3052A78DC780428C052365746ABBB4F1908DD82FA60ED6AD47E759C200C4F752CB18770DC47D83CCB66E0D0C016061A314286984C898A749CAFD368A1FA99DA51F11C2FBEF5AD6FFDD9CF7E46EB1C8F033754655C4D7757231836FA5DEF7AD7D34F3FCD8A3B980375B805647665A2CC96A034B3B03509D3C391A126BDB0F549AD7CCC53416365729C39261CAEB962CC26FA013915AA4AE85E9A4098E290DCA88A31870A845566CA2F5A2846CD02612B1B3192C841A344B8A007252C1D856D888EB4412B19529314D90FD64C659CCE2EA39D9B170EDE92B6B158753A8C8B4149B6346F995C94A9255AFC20EC7333F6551F89DBF099CF7CE6E69B6F56FFA71E6609A5F2127DD103C005CD1773608004FBA7399870C3BB201FC072124D8DF62324F113DEA2AEA01BC1883A2AD11C5A836B0F38E00008058027D90350043A2FA82ACB1085C97A9813686C06DE2281534C007020AB0E0E0EE2C9673FFBD9AF7FFDEB980FA5481C4E5A63C2F1451A8BC5851038383F982DCDA0546E98484894603417B9DD1CE71B2838FE5CB76EDDB66DDB8036147ED5972E2FF70349DBE2C165B22B86B2602D60D2102C1844A4E98D0C3754F5E8F0C30F870E2A21791CA0C671021212ED3110738BE85D0FC756A9BA76C30D377CF9CB5F663F9809964CAE4C3E47C6AF520216889FE84D25E70893300DBA07904920B85846AA7CEA539FFAF6B7BF8D33128EAB0E47045177E18632A42408E53F868B44A1CD61871D063153B579C56ACC4759BEB42D727F0E2750C76CD0CE75A7662F6D15904496CC98248FC49D6962AAE55370C476D08DFCDEF7BEF7C73FFE31FE5473B722A4CC464FCAAC364FA11BA80B15E781071E00E4D542AED2A45A2F31E7709935761EB4AB9C2D40D9C9068C7665B685AD431A17035E8B731A06DA3EDB9F74D2499018A09C91C6D2324C6D895E2B727D02211CF8A0A14DE154D6D658241FEA29251B2445A020CC180386900217D129B0DF68A7BD3148430BC230E58AC71B9C8767FEAEBBEE827CC75788D980267ED558913909FAB7DC72CB69A79D8699003AE4752043D0CE5481A542BD3F4EA095AD146B813D5AD74563F65595518AA0A13BD29631C37E48D25FDA82F127CFCC1C1B0B28173012844683A96EBFFD76904E8C0B8CC41CE84E00404E3DF554E6A9927668A6FB71C71D8757743EF44DA936007802BCCAFC9554A9A18C6B04CCD574A8D9FFE8FCFEFBEFFFE8473FAAA53834BB5BD18EBC8781CC2CDAA1353FE6CB3E4C9B640325FA5A990E5D61698CB20D677E526157FA8281343D82479D3883570E3DF4D0279E7882150B0007025C42D9FCEAF1D60DC29F37DD741300CEA375ECB1C70297D095D67BA0B4AE194012721D318E16FFFEC33FFCC3830F3E4834E629E261D62835F5BD4B5B27F8ABBFFAAB5FFEF2973C8DD4F1C947094CD5C61497C8A4310106136BD674309BD14A3B09115569B15A54284330A28F522D453CEA2B6A4BD180D170A4A026AF84B343B4F2230685520256C7BA787A4C9478612C2A9A0CBDFDF3394138965FAB8771DAFA9306EFE30988384E160520B5D5007F202E68581DA398C8FB49407860D18039C00C8FC416A01312130D9D521133BC5FD0E0DFF4A6377DE31BDFD0787AEA0484D8FE6278A41D184A66C6E92DA0433024474231054A82166EAFA8ABFE39AC1AF4136B042501CD61A22517A5A9A01AB3FE47EB90B4CDCA12CAE7562B18ED5C5473F0A1B010564595A131569A33D3105D1E5A0DB460F043B804A3F26AE6E9A83E1B96D1C2E0A0ED9E6C99E6E6F99C40428626EAC8CC55A136A05224D992AE224CF4C3E3CEE7041421292CD0AAA0413B120AF9A2A087451186543E34FA0DF88D7789E2000BABA24262DDB46913378229AC9ACCC2904A15D680FDE804AF9C75D6595FFAD297D424A2C539280CF2C013C53996F29E305419100C68609250932FBBECB28B2EBA88F9657A66884346BB842A8D03745A68314E009929876A13072DFEEA57BF8ACD2241A46380B51BD9217AC0138D32A07352CBAD48283496A056149D7F36A82769603EB7150BE7705A76866792D23D73AD955C12EB68E2A7F8ACF52464D698B37DFB76DAD90104BC1E2E81154EF60E8BD28C47D0F0210A6EDC2930AD4F7FFAD3E80ACF7162B5768BDA2DB9AE39A61240126B79E1851754F3A6558A61EF124AC6D443C428A630DCB473EAD94C5C97504E4C5871A4779A4A9E024AA3F85E1D2708D7B3E32E0037B4E81069162B6062B114E13128F442B076BAEE805D58324B526AFA15BBA5579CA7921636EC8846D3E1096928F500B24C5A20D5FDCB25935BE33BE65098FD68594C365B40C6D7CC0C2ABBEA1D5C208A9460E1A6F09505AC431AFB4ED954130548D0E8AAA438A279607842DD3D2C04FC91CC5222A3258BDE2DEA14322BF5A80D9ACF0174B4E4C6E8AE6BBF9C073D7BDC75DA2EB8DF803BD09DF4541938260722A2D95E684F873879BB395B6F8EDA035E819008A99076520A26FBB30E69E548A65931438FAC88966235B2AB5B264CF19531ECD33A64B6EB38324883915B3CF05A1F915E448C4E8A43CECA23A705F2785089C11A2CCF0E553CE74610D43C0C8CE6D2792AABD6480C094559F088028FB1C594B9C2F1308A526A2CA6F08E3F4937D580A3353259908BFBC258263F545A4ADA128D8A66EC478D452A37E0DF638E3906320B8F160D1D9A7FA7D84885403512D51D29DB4A3BB199DD924930FE5251FCBAEBAEFBC217BE40AE46BF3AF19901E67ADECC509910450F8D62E29CD7AE5DBB65CB16260C87C3C0A46D73E769D7BDD3FC1D4C0C4F88AEB455AA84443A2E21678F84C47055C7D5AA4945219C304C9833298F08C0D3C730303DA43C719AD640F1C80F7DF004DB4403AF320C129A7030BBDADFFF9C28D23027A040A6653054D8DABC7933A08DD9A267487EC03AB63CE5945320FA70149E6E3D509A1EAB761B8DD839F9E493EFBBEF3E865768A014319F06678D8C20DDE32455750B4B78B431508839E9A493AEBFFEFA7DAE57ADD35A8A8E14D958B09A08ADFF5A5E93C1C1FB8367D02EC0AC6673068B53475737BBD6EAD7F54A5BCA97700565991519687F544E1884CAB207A182911C4FDA128AC69E73F62C7DCCC07F4E519377488235F1841E794AC1575C7105DEC21AA097B0064078C16A4FD4A240E1749205FC04E10F74702D17A3529EC69E52A30F1B85D892A4619F7E021636D1AA871AD21731FD9813142A92F52529C650362285A6649C48BE9E96F88CF8B1DE5CAD346954DD982155F414B196D95273ED92E754C417A72E49533CDFF10CB7DE0C2C1393905822E28B5F2C5886340319B0CD21D397BA9DE8E936C6218107271EF3D1FFBCED2BBB4CB1572EF6770E66A35DC55857A3F86CC2EB89644A956235969232082988068EBF6B74381D664326FD49E829B144776D720214A689C9C7A5E94A0CF301EE79CEE141E6F1E4744F3D6A38F658B5B8C44F3A99EE1D85B1742A6A35CBE59A6B6662D55A33EDC4E9F809DBE5C88A5481500F10156462A41EC5F9F91F7FCA678EC6167E480B2F704CCB8E86836DC2BCDF08DDAE212F8F2C304297409060D1F64AD68E061FFCE0071F7EF861F40C14D26C89B0B7FC258E124B5BF562C72107379F1935AC7CB2297B8D9C199D0EEA01A62856B45928753976B10E9C485D70EB1DD79D748A1573CBB54AEB6862CB3CB182A82941241BABBAC5583599127B02A8644A3C906A546235A925B391723EEB2F2BBA533D2B4B43239964D5342215CBB3EAD2A8661A529554B4B354AE9839C3AFD6CC6AB62F97284C0DD7121D09AB56C6934632E23419E4AA7AD2DD77DF0DB26BD6BCA634DC25B6541BD624B88E31D3085276C62F152A209B5133DE104CB627021CAE57FA53D19152B7DD3DD998AE473D0924E2C53C3F9074F380626E5CF245C976487D265B5859B227BD642131D353E96CC652D3F5B2D80DC3722395BA8363215288193D8D8E697FBAD92552320E6CBE66B2F962C92E980DB3DEE7CB684F87E535BC99B2E948AC7ACFB93FF8CCA5EF77C04393F189C64CBA2B5D1CAE1956D4C4396CD63CE3E05861BB8343E4F478F57120A86BA4D3B144A90AC1B4191812B552D8F9BA0B98FBD9406A5913728B5173B2D22C61276D096A76421A95FEA4CC94A58EE9594B92A9F1D24C2521DD157322D12D6E336B940A4DD731CCA82F55C35F12C48625525B55965179F8A6FFF9EB933EE126765905A7E99B3D7DC9F1A9092306E049BD2091C0C67A419E5B701E681D796B14C290143C890631716B5DD2012A5312BF2AA6959546710600803C72FEF9E75F78E1858C395497EDFE387130AF5AB55A65A1D3B7CEAF1AD482D94B2D2862D0C2A0745CDA85187906DEF9CE77BEE10D6FB8F3CE3BC9B195C3D311077CFACE77BEF3810F7C80821B43A1C142316334C3D84C4D2465A72F345C1887AE5D0D0B638E9286F1A2313D13941FF7C909C2466D5A48C06CA05732928FD23A992D7969B86E9D92242534FBF313287094596A29E639744AE3A03010341EC6B0B3AA256D38321B40A991A061270F87A60849FD80E2A1722FBD9183FDD39A8CEF5FFEF2978F3BEE38B578A8CF1648C3902779B92F647F08F4BFFE51E22B6DC104DBCAD4CD573187F99C400BF86804E79CDCB1B0F9D59C571F4943E9E8C86550B584CCF4AC8B008C3DE288237EFDEB5FA3DBD7BEF6B5BFFBDDEFA42D1E6986209941335F8F476A13B629AE23DD557342227657AA3E399D92AC99F20B959AE537B0B10959564B77958DDF0AF8703D1DB702F1CBD5663A3B5BF7D868F6D66383D1D2A29EDED8B833E48EF5C456E76B6E4176A5C58C89ED431517AB0AB923263DF19815ED18AE8F6425579EF19BD25CDC6F0F96A6C5950137E57724471BA3DB3EBFE9DCBB6E92A961372DDD855CC96964B2715A54683C8420492776CE4C1B0765DC17A63A9B9D652B594B4CF565AD922FF1C1F48C8CE7CDA2D8012414C7332392A94A3938242ADBAB96644CCBF49A53D101A94E487F23392E55CFF0259D8B3467BC6E5F06A5C35F51B0268C66C98E592D21CA08247021EB0804A058225DF18A207D20BA8DCEA4044D99313BCD62C14E24FA2A95DD09AFBF628CE0D7080427916E3337B1B87CF9F11BEEBEE91B4393430D7722BEC4288D06AD71AD72A4D9E345C78DCEA5CDD1B8C45F306C2F519032DE0CFC5C671A1CCD6D0411CBC19E1B861BB8E98811D4B1232EFE5F15A72A752B660D1C21CB9F6CFEB69936EB8DF285EBCEBCE6B26D582FB852DAAF4E75744AB199F120ACE17C3A09B1AB781944C88FAFBF76F3B7AEBB737AF7CC9414834C21559082C4318A13F1C1209B3E78A5196D390FAA5D66A63C60FA7B0B3DD23329113F5E8A49B950F7E2E9A566AC562E8E432CB06A1231D275FC271D93A9E2A1871EFAECB3CFAA8EB8F04D47F2F232C0ACBF843FE9D03DEFBCF30C22AE56D025E924695EB366CD934F3EA9F6A270B16C5A09D858ABBFA9104DC788AA8134E0AA9F9366E5D5AB57EFDDBB976AC46DB7DD76ECB1C78627ADF6074825F8154B459FF8BE71E3469DB0BA7A649EC758EB88D11205360066C0480F4DE3D63810B526A9A0BA4F12A99C201C80A4713E3AE29CC00C99D518345F49756AEAB37872EEB9E76EDBB68D8C2DDC27C3E3A872517F57EB0DFD3A7ACD03357D4658D36EA6A000A305A8D1A716772303632897C68D98A14B725EA96CFE2A68B75696F6DB3731295EBDA27EE6B7A701416B14D3B814F60CEB562AAE86DD5146FB920C99556B40EB7FF9CB5F32905A0DA1CA5AC2BEDCF5EBD77FF18B5FE449C38B60B43820E8B9255A25ACA59DB1A1C14AA724269695641C804E67FC9A99B4F3F95A20F6DBFFBFB7FDF3D11F3EE7CC2F9CFCA97FFEEADDF707870D14B60F0F24FB1AC5BA6F59536E5E220D8949AFDB3F9619979219338C9AE54AD33C30F5E672ED05D0ED4672B2D6D2F8414263ABEAFD7B2BBBCAF8B34364C6E9902EB1EA33CDC90D175DB8E9B2CDE903EC99B1464F4A26861329C9C4FA4AD0456ACD203160559E7B4978A203F68FF185C988D4BD74538C885188055672D10176FCD9B117242D465CA283D00B3AAC81E1F2B4F4640ECB8FFD01AC45AA4EB29989A7CC097F7CEDA9673CF2FFFFD72F7EF37B5926B25BFAABBD19893CDB359598F43BE3CB461A2F78DDD8369149893725E544673CB761D9625846B5DA93EB2C4C61908EA2B9C78B37023CEECB65B64FE5B232EA9B95A60F91270166919449F48089E49DB4D7510F0A8DA46B3703CFF5932B22EE68F475FE5F3E557BA4D052B21CE99D909217AB98B55E1F627636966C949A600562465A1BDB841C2E3DAE4CA42389B2E7A6A4E148CF38F021339E9BC140D69EF8E2AEC376947E0D9D2C133DB0967FDE87A61E11A7691AE2D772401147EA8144DD485E924BB2F5BDE5A4341BDDE2A5C4DF25AFE9ECFB75AA24C3E5CE48D6ADD79A62D6B19149C30722CD9219C0399D4D0F8103556CA7D100DC7351ABB2A8093E2E4559E20D344BD022662A69DF28BDA4FE2E5DBA14F23743FFFDFD5730D4E724C8200820BF90DD2988934E1ABC1592F638D00B72053C7CC73BDEF1C31FFE50DAB5EB689632DB17D728D9D24AB0D2362C6A39521A64692B00ED03C93BEBACB334C5236CF5D6501635866A346EF8F61246B3A96F677FD6A13962B55A7EC3C6A57BEFBDF77BDFFB1E8E3AF51812719A118C500109735FB76CD2DC1CCEC0D2EA9574A53235064FC06CAFBDF65AC2443D0A5BB76E7DE491477EF4A31FEDD9B3472F075516A2DC9BB6667268D2263AF6B559981472448DC5661B2D0ACF15D18877E69967624A50DA1E7EF8619C793057B0494D23F2DBF743309E988672AA11ACB103FE440BB8D5BE428EBE38CDF020A15CB812AD8618D152CFB80E2DCBFE27720279B9358F30A4B604A8E20B83DF35754B297E980170DFF527ED13C06730AEB4EDF57CC8486DBC0E38E03BAB36319D0D2B0219FDF8C73F0E3C276EB474F68823F9F1C4AC2FA3719115ED8C9427CD81B43D6C14560CF74EDF3216B852582ABDA7BE7E2CF2B4D46BD99D3DF95F8ECBB392F093A64417AF5EB2FDB9274077E49296B1A863E680786474B8A39C76D2C77927DF7FFED609BB299B9C6439E7948B53B7966E3FEDC79FFDDA916B26DC7C23180241956A2C2325373EE0AE9A8A3E595F276F08DEB86BE363FED255F69E9171701867D2DEB428BA7DAAF72703640000886E28165888BB7D13D6E89252EE14A82CA9E7B60C4B2D65C74A8D462A766E29488A3162D8122FDEEE0D340E1BB67FF3BAF8B2DF15C631EE6BDEB0F4774F8E25DDBEB2B15B36486A775FE907A391A14C446AEE79E9682A706B15C9D40E9E7C63636F7DF0E73BBCC18ACD1D114B8C683951C995531989EFEA1DEFF878DFCCDDA38E97EAFA6434B624B7C31897CEDC929DE6DE3B5E10CF929A6D899993BAB964E5C4DEE79CB494EB0EC695D450F9E4A6D99DEDFFEFFEC9FFD9EE4C48212ECEF1E26533CD44A1FFA9E523FFF122C86BDCB3A3E964BE9C0702B5D4925B25BE1BBCAC658EB1D356A3B6B8EBBEC9C95D2589755AA74D277AC51FB43B533D7BBE54E9292C1B8F3E6EBB56031C2A11E4BB9BDE07B28D4E438C19C9CE5AB82662A95B539DD3B13D4BF75A1F88663B0F998C8E267735CA3F9B963DADFDB5CD78DECF4BB489A125692C6F74BD189D904FCBE24876F08E821453B144D137CCCE4F2C99EE9F854BBD5AB9633C3A9973ECA411CFE3ECE000FEF55FFFF5430F3D047E0062B2406C1209AC962BA61C130E313024E40C7969EF0B0588EDCC77E5F967D6DF2B951659F486EE97A09D77864308BAC38230CC2A7AF7BBDFFDC4134F300E8C33A3B986BE04AAA8E41C1A1BCE1C1999AD1DC4E872A80BB7DC728B84BC6DE4490C8F0B57C453283089038C91975DD04F452212CC56FCE05BFC69CED5A018EE9E7BEE21D0B5FA42F86A21752A86D37AF5215DA64A2BFDD03D0461CAAE8A91D6F835DBD7D1842559EA108CDFD592DA7A3F0617C54C6C7C487049B6A86DC8AC78CB7803BA0AC3691CE12AE5122A03CE00470D0CC3D0EC8181C8DC445D4E986AD3A7A2AE05CE96D178AF542750B22EA1C482700C06F39FFD79F5F8E839D054B2FD71027979A299067186432F7870A07B811FA8BCA22A608BA7C6D3B5F2CC5FBCE64D8F3CF9A85CDA1BAF46AA5F1E060112EF20A739BAB4BFF97CAC22EF8654D92FF70FF694D64C5FF7BCF38455F97ED5DE1BEDEAEC1F2D8FFB8D7AAE33979E2936FD5E5722E39DBB126BC52CF6946E1EEF5ADD3FF9DE99BE20327E7FD93F014B5ED47D51A19CC8576BE672BFCB3830D8353C6694CDD71EF8F6C707FF7BD1F12B677AF3956BA6E25E975B9DEC5E911CF5CB2B8E5AB12BB54BE23139AFA6575985D341B2F1AEE960BCFB8CFE89DA887C53A46558B63B631DC1E76AA5CEA2F525698C8977A5634C44E3DBFC4AA4BCA2D6BF2B3202E5A3B7B97C626F3D9F1C5AFEE955F9BE42FC8A48B338DA94C8B453974B6549A967EFB6F1545D4A19F407F5256E058E2FAEEF5662A08A004F7279B1FCA29716E72CA903A16E4A5AC391CCA5F5A972FD24EF1D777CEDBF3B8EEEEF49F73F77EDEF5EDF58F1DB8E89659389D1E4581D4C246FC6A5B7121FE93A7A917188E99D37BD78F91B9E1CFB458BD49D17B17391F8B9AED1B93C73B2B5E7AB2FC85E711A56B6B373AC308E06A948B2591F582CC61E998ABEBD226F4A960AA6FC684CCAB2EC0B8B775706E5869689A6B92962E693C6964A7C99592ABA52347B9A96274625B6D8A93929294F3AF9DAD9E5C54EEFE0D5439DAB96953F30DEA8F9C177FD96D7F04289FF215AFD46DD2ED98E952A7945315A1C2869A74BD6CC92F3564C44A66B37E60582AE9D88D4BCCC66A339E3176F74635559F6E1D80BCFD79C1D894AC38DF82F098BCC4322B908972A99CF09683555679EDE2A7FDF7DF79D78E2892F79CFC241F71AA1C11829A63C40200DC778FD291F2D4DA32608B35DAF9817390D0E0EB25A0EDD127C8BF457830EC3B7A4E22DCD2367E02305F333CE3803DC2531FBA1159E9788CACBD31495FB6955262AC214F4980148C224ED68F139CE64D5060E3FFCF0DFFFFEF76186C71803A35D2886FE648AE461731656E1CF56BAD6DA0C5EE896C770EC20ADCC582366B86EDDBA071F7C70FBF6ED3477CCE104B41A318180EE4A26876BBAC6EAD5ABB1EB5080D0FF91471E096588C9FD0032FAC1B6EA25B71ADCA238B072E54A401233BFFBEEBBBFF4A52FFDE637BF61215F66EA3326123B059184656D289B283D0DFB4BF827460C5F1A4515849FFD89330B73823959056A1BD48C3609E5F7D2FE49249CEF1F0A5B87007CAC912167E4D6733C37D859F048F4FCE28B2F6A215596DF8078C1EB565AD18AA6186939FDC8B3BEF5B5DB46CFE95AD5C8ECFCEA508FA487AABB5B068166CB3692EC4E342A95AC6315C69AF56B243D122F7EA51A9D8A0411CB8B067EB9999044C52CC9ACCDA7EF73D97AC2FDDBA17FFCC99D3F338EA94E2F2F74DE6AE5F7F419CB07E553D2E8EE34AF9E5E3ED4B113F435318EF6CED0619DB243B63546A4E99C290372D0EEEE3D816D3823D5DA06C9B9C6F468101C184D6E6AA1FDFCF4DDE566FFE8590DBB2752B9A6D431D1EBDBA389B4353405E1D81ACD8EC4F2B15AAC2C5BC5A9C4BC736A86A4FD78CE335E94A81C16FB5069E4A1174F9F91D788F33950732BD28C74F5AD1A8B3C2567D8FD93FD23370E1BB5E4AA2302BB9C1A7ABE98F702893620F78A2731683F8DC5236F1C8CFC83E9593ECE6E738344EA8EB7D19578562E9C31E3B61F6F648F4DE7C5956BEBFD1E38540FD69B3AACA7F1682FD65BDA5C2D61EDA78A1F9106F89CEF66EA7EE13C1C5719582FC331B137C483479AC95F471B7B5D0CE9614857527626D1E597871A75AB9E3B3E6176C746BE3E95D8ED245BBEFBEEF1C4708FD75FEC1AA99D299D999CB9AE962F984D33C08FDD117FC2A80AB85A79D62EF7291988C971071E7FE771DF0FA47F5C9ECFD8E5CE46AB973DD7CBB2F2A2DDDB8622E0A0408E886F476211D74C88E15FD831E38DCB756EB7BB32929C2A55F315BF2FB8705A3C43BE5C074805F37F4EE4EE6CBAD255941D1ABA46DAB270B537A5305A04FE7DEF7B1F94090619B682DAC3A17238A2575D7515F803B3FEB46CD3FFD317B1C0D8D216CFF5C4325B325C588607297CA9024F1DD81D7ED2D263E79C73CEB5D75E8BD96EDEBCF9FCF3CFF7DA775E92EE53A834DB975D906180BDA107B007DE35C898C870A2B6DE03AC9448B30418FA829E19F7C29C00DA6AC27E729D3663DD94E5AA9B5EAF11C693134E38E12B5FF90A3B619006B50D350DA91CAD99076057581AD3468C7649D4B0CD8A1F901E66C0133358C94E9DED0CA394D92A6C2323231AA9C6F43DE5F16C4F3287E5A0138C7BF1C5176FD9B285FD00DA0C4F24AD643566E6FEE05D167258B366CDD34F3F1D5E4BB8C20FBE339991AA0065F370DCE7ABF884F901FBA4B4A1F63D691BF7683133DAF7F486E7262FF718CF8FDEA3304106C35B7A68AC3BE8A08340FA3FF6B18F7DED6B5F937619225D4BC619281823CBFB578DEC7EBE7E798B12C9508B58F46F5F52FAC5D4E2D125D3C55A41BC9AE43B1335A3D29CBAC258337DC8D35B9F591CEF1F2C8E5C70D5FAFFF8E6F79E79F49954EA50B33E34161D4D6EE82B8F4DF45EEB34824AE54B522FCAF2F5998A0CD4E3DB9DF3653C2EC605B238911B4FD8F5C268DFA295ABE36F7DACF640E9F37E8BC25E62D580686E23C8CA9A697976D30AEF865DFDE71F3E31F5C499D5B3EFBAEB2E9C38C8891A6F8AE373E2D613B7ECBC510A55790033CF44A5D18A224AC49B56D52FC497C821439D3B329FF52183A04174A2C375AA7667BD3161F6C911A3B1DFCA8696DD21774566CA2E08C46EAF2BB02765BD58BE34FD962294F9B913D925138FD62362BB7127709AE2D6A4D6B2FB1FB261D9B37B4683AC23CD8271A338A5546D4B293D6A2CBB66912DB11DF242F292E8F0B2A89C5C3AA033B5A3D814BB267E3C5E5E74F15DFFBC7E7A93A4C43933D2B062D112B48D664EAAFEE5C93199597DF1C098744C5DF3F492B12553F78C4587A325A91CF817073FF3BB67224DDB8A79752FD3B2F09C9F312C3FD854926657261A91DC8C143AA5942CD8BBB267C54B8DB27797A40B7DD520EF899F887A65C0D790645DCAD06836A592CF3A95FF33138C452586936FF764A5385338E9D833BED47343F29944E57B15A768D78C06E87BC430ED9A5DCBD5E58C44C2082A5BAB66A92BDE04FA155A70DE508D4F4BF3CA162A055F840863F89717D30D6FBA6D50D5C2100B5F1369B46BB1A88715C7107BAD95230C25012CF61496AD98326ACCD6EB7815BEC4F94AB78E85D9B05E26044926C8D15C406396D1BE61584BAB6B72FF4B5EB8593264CED6C1669F9A378B55312896CE74D02CADE04F6F2A0D291499157C545F3432D56C57F73EE080032089ABA0142EBF31A7F83BE8359A311B9653D23B81A955AC5AB58A154BC036C2C9EB1AC518A6EFD24E3E60343D88CED0D0906A73FBF35E680125BA7334948896347A83FC97970BA5018A36258D3B26A0B466329F73E6AA21C5663F78B26DDBB68B2EBA88E61DA6B6AE5FBFFE861B6ED04BE7C37A215FC4421E7BEC3165D85C0BEBE7BC22EAAF16A17D52701594F4F210AD23A2161E33740590CC8B44623138722C1A4883D0159264BDE1EAEBD49B39105378D0B82B0826400BDCCCB26C62F7A79BF2CD89CC20C84526D836EC62331F14198BE4E28929A3983969596151A56BCC9ABC63A4A7D2E356EB65ABD4B467330CAA563DDDCC1525D22DE32740E830E21B6DB36C95AFA948C38A5E107332CDA253CB9ED0ED343A0BD7156AF1D15C556A9D0389E972C92ED4CECE4A229F9BB0A6BA16479BE3B91BEB238DCCCA7202F24BB563B0F6058934A5E7CBFD4C3AC1E48F3FFEF83BEFBCF32505717D6D69A1672C3D5E07F71ACB4C5C1B89FB76D11A332A0276629D9769BA85D53B7A9EFD7728EB6214EC4E6954B27D8B0AF66ED91BDDB4B4620C0F4C39C376FA903163FBBF0FCB5457266EA6FED919BA776F9F7FD074ADE4DE508C3F69B8DF2BC6064148AD9A04B6659B4DAFBCB9D13FD63172EB4CCF494BC70F1F93CF9B07340FDEB1E9F760A29DA72D9906733F7050FE3188C425737976DA8E2C97C28B4DBB3BB0BD4CA17CCE806B8E748D5B93995ECB2B366F2C4810499512CEB9D5C9DE66F72D203E65B95C168D2D1ABA66A8CBCD1683F251A71E7DFF3DDF9082D12DF5D1DC9268716FFDE29677267749CBDA1FAD9580550144FE2F389274FF62D78A5FDFB5533AA2D1092BEA5570BA7C4302D07437B33288ED34C6BCCB178B3F2E5F74FB5CA36248CAEB194E8C39E765EB12C955EDA9AF8C3AA34E4C9C46C2AD04B5D9E871ABBE39583A9D1B8A8F7B8B24F3AC55BA29E93423D5D8946CE81677C2D92889864C9F2BD1F822F7CA31B19A96FBD2790F676B2F108047C332D34D485568F4D6EA432F8951540BE80AA3C873FFFDF77FE4231F51AFEF0295B5173EAB733C7554CCF5DE8670197A09DD394E727FCB2DB7AC5BB78E055B284D736EB7DE7AEBC9279F4CD2C6EC4D0D0FC5FC81C777DF7D373B01153BFBECB381D6BC8A400D205A44C56CDF4E25ED240B9522F12F74028AD2242B8CE624D90D5F110712F0FAD7BFFE273FF989C6AA635C66485217A3C24146C2982535259B2FBF914339010B45003E1FFAD087307F106268733FF8C10FB0E4A05D2E4642360D5A2768F4A0BD88530DDA55DED4C1CBFA362ADD6B967FF81A230D6905D3A2FE88B5B36A021447BCA599EE5A321353026269F9E8F95A8B4A034C32503D200C7C7EB437BD458722AA96B9659A6858D5982376FC3F31533F4CC0868A79C1051768D5AC85B13D08959267F10C6336A7CC6C575D550DAF550C555A265F71AC56A60658328E7D4CEAAEF49C981EEF8FCAF593CBA6D2BB53450894514B8CB312F55465D970DFEE6DA39D7ECA4AC6C6DD0910C848D33133D9F8CC58E17A74974E6C2A42DE85105ADE64483A1E3DD3B7536E39EEDA9F482CCA1C38BA79149C00345E3A66205C476AE26D028E46129FEF88C9647963A61E29242ECC785288189611A4CA17CC38914E77F34B816A2A21BDE4D65A2BD22DB1ABA43E6D053738326127374262AFB5A230937E2BF8F53D03BB0F1C8E79C9DA4DE5F8945441AA979465A4E104523F4FA4479267774765627A8BF4967AC7AE194B976D484F12A977F8627AD23C5F6A899C7BC55477B56F2239DA6230B6C855D9D84CA1B63540773DE7CAB823727D579799324E7A71222BB90B964E4148CFEE8A9E2C89B4155DD73196B4B3123DF1F27F2EEC18F9DE03FF3E74F224548AC4055D71AC77AB447FDB57F8667E75AAEB99EAA05C6049A6B9F20F8B762E1B8A3D9BA87DD7CD4CA52B52F462CD0008D88883134C983DB27EB215C773B174BAFDD3B191642D598E5425DDD2AB0EFAF88AE70EDC2563225F91D8B4D4622D085BA96C502AF749624FAC209FCDC8D2829C9B71E2AE55AF457DC8FD8951BB228BC43CCEF1EDFA01F9C5BBAE1F3CFE5DC7DEF3C3FB9D45C9E2F88C0145EB7CC8624DB94C1241BA7279552AD9D4868A2FD54A141A464C8CDA4025331E98CDC28CDC29FDF925A3C6E02BA2C6EA31D6608D3915EE0CB590E81D43D20EF4A41D194FA808BF529D205CE1C8685F434A071DE3964013D59BCA0F1E02FF78891DFE541D85F5433055D61D94D9E01356A760AD957025063C616632893E391E4368345153939BB4C8A884FC8D9A01A70E525E39A9F3D4E47EAA05186EC58A15CF3DF7DC9C28AE70A895D693D1E46FE549732CE912BA5F349CAAAA226A10AA1BA3148D4C458B926ABD20268AF3276A005A20411D395A77259CB1A985A4B4EA51382E8B69C0F458688A3876EDF2CB2F3FF1C413B1B36117FDFC0C700A040C7D631B7A9B75B132EB863DF6D863D7AC59837FD133B6181AA4EAC2C1BEEE7CFE135134CC096496E932B791C14B1AD1B4CF77A942A90B446FD8A6B4C475BD2C10391258D144506F44BC46B46529B1800B715954DAFA87CAD46AB9F7A9FE1919290C64BC6AA7CC8C4A7F6DCB48CFF4A2F1DB869293A050B500A2A02703B1BEA9A6A4CB85FCA668D3F7822DA558D14A27A3E39755A42E875FB8745C3293C61FA2EBA4D4235D574A755CBA23DD7BFC890E33E27B9677B1550A5CD9B4D832C69A6B2B9294D8C6542D28618919A7ABBC69B2598E24AF8AB1501DB397B552BD75A1670511F3925A5CECC1F58D9677F7F288449D6E3737618C24BD442D510E3E17EB4AA4C7B78EB4A65ACF8E18F978202DB3C865CE4C2C62AFEB6ACAEEE0E2FACAA9153BBFB22BEEA593B5E64C22685A31A92565FDA093ECAA6F981CA8F48C75E5AD193F6E45F3474BA2BBE2A45649355FEF98283B929E5CB1D2CA3C298F676BF64157AE9C96C28C35D2384B66BAC4DE2CB122868B5B7DA637DD68B846724B6EA8342D97F59B32E29F956C85855E5B4C4FC6EBA96CAA54AC3AE5EA6592A9A70AFF5E92DF89D38CFB46BDE1F89DD92E77CA2F47DD68B96C5FE294FB0239D3ED6F264712E56825DE69F78EFA8358AFD1E5978EF196F70EBCB87947CBD353EB4907E3C52E7C919E725FC329A7CFEDDDD3BB237A7E8F5B9B14D36FE501F8768FB3C8AFBB3529E7B715123BB295DBF37DE6C0587922B05BDE83A867C53647FCBA17DDD8049C87AFC243C7DE647B11ABD998E9AFE646E25389B5BDD5E258F0EF22A346BA142D19AFC0A9266DD59919483C2C94628D70DDA170DA1185598691F080E9E17CA59CC098975DA5A9E4747943DA658130D61EC117AD8961B52FA9074D619541622726892F604B2CAC419B925AB7A9FEA8B6AE7783B0EE394DD29AEF1ACE320FBB37FDD0FD27D2CE7EA2D0ADE21EC941F8FE1969FB0934238F76210AEF5A7666CB962DE79E7B2EDB6B9D993945939413840B3918ED4C7469DBAF94D1AABF845E104E8F51F09A2448515DC558CD9B3DEAA8A3EEBBEF3E6EBD86D872CE1A85A5623E0D4D0AB1A05D47F6B4D34EBBF1C61B35E0153BBB7BF76E4610A98CACF8A3B77AA92EC87493F085742C60475BFCF0F0B05AE4A1EA6DD8B0014066718239F7EEFEE9283A4727E05A4E39E514808249610B7BDE18A6A555DBDEF6B6B7FDFCE73FA79A4BE6AD26AFD6DA938154A4DFE82D795E09D4029266BDE514954D628D8AF3F554FF78FF0E19918E202855241AC836DB7A32D5FCCAB45174A0FBF5ADE819DD399C10AB11CF346253725A2457E8CC3F58F5769617A593431798522ACAD562B98B83A5831DA7CB2464D5DBA5B7604F99B166A4685A66AC11AD9C51937E915B5B9188F153326EB590DC9A2B16A68256DAB921EB5BA2B773ADA3778169C8406B833634C4EC908DE54C2A5D583F6542ABB9482CA33FEED78AC919299B92F165B3610C1A892D7ECC1B285A15D7C863DC5490287CA6242B05D36B05FB9F29AB9FEB7BF6CBC5147430299563C5294FBA1B89892D9568B3C3DD38D35D8D4FC4AA462D99137BB26FA6E55D1DB740A73BCEE8ABDA56FDAAC1651DD9D2E7974C2577CB959E942BF125627D34598C78E92F07C9C9FA183414BBDC22BB5032D7FB6EAFC895B3A19C6767A55CEABFD38BBC98F30F5996DEBE774626C6B6752EF97D72EF77F7CA2464F05890F2EA4663CD8A43C7774C8FD5A7C0CD929F8E96F726E4DE72BAE9953312293931DF29A6668C7224487B729E7445BB8BE74DA465A01A8D79EECE3A04D766DCAAFACDFE7AD7897D93D3A3729B64024906BD537EB36E365B49219E9F753AF2374CD97F4837BE312523763411F322ADE490841B9D5E5F969E457269114B93CB3D4C4CAE1123E889C978B72CDD2323FD1774B95E636AEBB4D3E8A9778C1BF957968619A6C62AFD3386F0A5065A70E3924B2E8140C772CA5A5C45A3775E8575688EC54AE9977A8CFF886D6DEEC4104FB21F8CCB6BB334AC93A4137F628674D2B24C9516949659EDE1ECB3CFBEF2CA2B59F59A7634CAC57A1D2B17CF2FE18B0CB5128BB4EF6960869D86D8F26CD334AC8611ABFDD132035A0754DA11FA1A864876A2366B866CF13258ADE5C2CA59AFC22B63EEEB7687F07D8AD28E5632DA19B3BA5EADE7A178337F1F0967A39D7FCBD83509153A27CFE37D6D645D44388D4A649C222969305B044913FDC8C0D4BAA58926BA53BC18807924BC2522CC09BCD0EDBEAF8813508A8712FCC637BEF1C1071F945052C53EDFD5E44CDD564DA4E0437A14D403D1EDF7D9D29CB0C6EBDD123BB62FD1199BBAFD459990CECFE4A697F7CAE61D9949B770AE74340DF3FA600AA2E567ADEC4867FE7BE332DABA47EAD8933EFDECEF9FFCC3AF1E2F4A2D7681555BDC94756215BB9AD1C9AC2BF94CCABE14BACCE4E4D7EA7222766871C7A5052F532F35ECC02C8B159592DFEDF54CF40E77BF67B1759F53901DE92B168F6E1F34BF118356556FD42521F659A69D8955CEADE8753D3CA1ACE2693972F0314B9EFA3F7BA529E6F9B2DCED1ADC38E9D9DDDE25134EB32B7175A451CBD76EB49BCF970EFE41EFF8D3C9E9D44E89C66DCF595AECDBD1B77DF9070FCEDF518A25A647D6554D39D8BF6AF6BE8D7392E235ADABEBD96662F2BA7A6247AE72F3789F1F1D755CA9A7BAC49C8C14AC40E2FE8A627721F7D96ABE5AF5B74A879D9DFE5CCD1CF0FD2F36C05A62FFD491757253F7EFE89F48ED591297CAA45849BB1EE9CAA7477AF62CFAC0CAE0AB663E78A172BE64CB3DF9FF184F0E4A50CD55BACB7D27E646D345E3C66A30EE453D478CA66BB4A27816F70E4C0CCEA4C59EB8A4D419CBB997CD548268E054C04F21D8071BC5F1BA925B2CB73A53BAB22EE3D2779F531DEAAB4727EB41396AF7642AF1626277FD14492D5B92BEB65998B66AC5B2674FCB0AE93EB2539A8D89074AE0628D2B3ABCDFD5BD1F57ED32D43BB113969BAF38623A9D7EE63D99BD3F2A40EB8AAEB532A3A67F9B3955894AA42E9D75F9BC881B49DEE249BEAB9CB3ACA951EF555968F87DE9D2A5434343386894145F3A14E1747CB37D7385925D4DEFD23B5DF747F1C3F95F8C54E1BB7A45140D148CAFA790AE2116CA03CCF6A5CF3C6F6A6C0D5B2A80A3AF7FFDEB1F79E4115A093EF7B9CF4120255DE69C9900415EC268D4B0BF170C6FE3C68D6042BC0099927B38C936ECDB0817E8A76C4B13BCCC4640697E805ACF40AD34FA1EC4056B99C3F0B4942618557F7F3FAF87D4C2C51AEAB3408DC357CA09A47D7D92D25CBDC6406D5F9A25AEE5C6E67382F075EDE17195B3D2B3AA090DE1A84D1AA0796F947250AE7A0ED9D51445DAF140F1F51E128E82BDBBFDF6DBF7EEDD3B4727083B4E5E1127A06609EC55C7C3C2752FC8ED342E0BDB0DD51653D26CF3399CC0CFF932252BFC6C49CA13D9A6F377A960C0EB5B949D1E1D916D62363A0A4649524DE768BBFE9A20F9DB74AF11DBF9C3612809B958AA546BF851A359AB9962DA86DFB9B163B43413B95272C1B2725F3D353A9A97819A3D2C5B73D1413327FEC80D538BCBEF18CC3E32906F945AFA7E0A9D2703A7BCB86E7C36961DEA2F770C39CFC74BCFE5E5713B6B274B8DB299B112FF68473AACE99BA679651B03ED0A85024FD396AF5EBDFED1DB3C237A4067CF8EB127FD6F4E6527250F6AD5B01BE71A81E3661BD298C836EEF30EAC0E3C9D7A6E85D1552A0713C1542CB06A034DE78C8CF76434F7DAC898331EB9D4CFE513CD4CB66A0C0727A4EB472C5AFAABE29EF2983C62249E69003BA75B258792B14AD94898D5A89F99718AB17AB01EB865755DD2ECCF75FCE1423BFD8C5B3C3023B178FAD129F98F8962D1890629BF52CB885B17AB6C54B34632BFA82C273A99C1BE60D18C15294C5F214E75C5C1CB7A9E1879D4BC38ED438BBA0E32BA1DB39C46D3B51366B95E03B040EF4DDFCE49666CC354726F3271A7350ECE94AA44271DD7AC27FC78ED3CDF8FD63BC0118B7D53374F1E122CDF9E7AC176630DA96593CBCC69AF981A74D63BE517FDDC6DE9A9D854A266B53CF552A8AC10E31F23CEE28EDA78B56FD01E7D2C2F3B241E446AC0598C0A8CF502C948EF997F510530C7A66AE6847CBF901D02A7773A0BF6F4DA8AD9E7FBD788943BA275AFB3519CEA8835F3AF983E9040016F419F77EDDA45F2FE47E14FE33734C9369C3ACBE3BAF09D0C24F71A09CAFAA3AC32ADA676994D08E005AA5A2041DDB61AFF47698B4574D571C789856F8ED44BAB41DCDFFAD6B7FEF4A73FA56DC468DFB5A2644EDA5E4DC6C390B8E04F2688EA8DCD0C1F22C5A41C0D3A8E21F4A640320CADC74B1A34A71637892FF498A79E7A4A13CAD4B6AEEE018DD496F6556568C0B29D8018AD3AAFA2084FB0FF5BA05917576B109181911FE03BF339C2F9C9FBE40466E8122B7608028D3F19C746919F25F23916334534813C5CCDFF90430EC15B80006F2F083BEAB53E07F75D0B07913D907FAB7B768E75E8D57102BDB38851D5E0E80B97BE607A0DBFD302C66910A5E75B874C3BD511756AE5A972C4972E818C13EC0992D2514E8D8BD391CC5B5E30511B10A948764A7AEC439E8F6E97BAE46CB352F51B80443221A6E7076EC64D4C9A2D1F5E24103B22B54A2E2A536E4E7ACB4BC69A7B21480EBC79E931EF39E6CE4B6EE8E83276E44BF1A4D100D94D400CEEA848B5D6892F07B9B1E9526A424A92A8A422CD483DA8795011FB9AD29044F125AD51BD1DDCB5A5E2EC49D65BE61D30AC94041358756A7A71D9D86D80024BC98AFBB9AA39D69149554ABE9BAC0854914612E30E54FAEA963BD539658DF7E6061C6378A62CF18E567D8591F154D0324B5767AD374B445E484147708D6A039B6CD9526FC556AEAA75BD60031BF32D4B1A46AF9AC089664C7A6B1092BDBC29B101A98D48DA6B25A65506B2B162A93E1DF352F5CE52A6B5DE5435535D5990E1783C6DB9E3453F79F467CFFFD9DDD717228D166F9C2C46BDACED98F95A3ED399A6485AADB6EEADAA7BB6F4955A61437B336294224610B77B2AE698D1B0BC58532AADF5DA5DA5C2642595E828D93376B1DFF64620D543BC9772C558D4CA175EDAB16ACFCE19E801D998E41B2D31BF950D00C8D492665FD99D14A729512312441325B79AEA4C556BC545156B0F647F5FE25149C7E3E5DD55D38C15BB6A329E8AF63A6E69A655B1D200B3926CDCA81783FA2BD7097846C289F12FE30446FB9A08BD23E2EAABAFBEE28A2BDEFEF6B75359E6E90DEB11F3691093FBC3174EF120F1D8D0F7A07AB4D9BEA490A447FD8A0CBC0BE737D052A4F79C842FCB9576740DABDBB3AC3193B9C02778433AC90A441BB4049683EECBEC3D159C3628EFC73EF6B1BBEFBE9BE5E6799D24278F79FED33FFDD3030F3C406244A339AD196A16A0D19C323EEF9CE115EA7AEF02D51796C3D44C059ABFA59D1987EF7A4DB17EC219D17F3E27D0BB90E8402654D7AE5DBB61C3064E8CB7AF307744932AE673024DC7A3CF46DAB55A83769D74DACDF1102BFAE4273F898777DD75D79E3D7B78FF381927A354A51DC5AFFA282F95E5256E9A5FC65B9A09765E63A731428C9252758DB8F4A773D039D621C081F1BE7A3947F8C289F970D6146BEA944C25A37AB14F8FB1B4C4BEAC2D71DFAB45A56943FC12633A82E54847B3C3961E3732DC30ED5A23E1598371DB71ABF558C4A87B41C44ABA7E3310578C201BEFF24B154B56E4B34F0725491B871462DBA529E996613D3B231381C4EB46A1910E4C501E2756356B52CD49FF14D48BAE646CD2AA8194B7DCD5ADCEAC56DCA867B6A21F2D23681A81E1DBD64BC931D495B5B079C30824E1B7E8D6A4974876B88572441A951894918303191C97B867D52241299E90523193906A25ED4B3927E971D0F098405A96FE6CF71BDE7EE8CFBEFB54C5F1A4E28A6B77E6FA538D7AA53C38197141229DD28015A996933366CD497846D9AF0566A2C3B0668C427436BE088F3B339958A930117163D6D26A6DA7D4725E6406D34EA7E255B71AA9D8F568C3F0FB821585C8CE5A326216E25EC28856AAAE935EEA4CECF1A4A76FD5A13B773C94080083DCA27874AF572EBA4530A4A81D0BDCC0173F12355CCF954826E616C0829A99A454CAD1A6ED89E545AA7DDE81860C4F4AB21129DB66B9E949E0CFAED7B00EE9486E2F4E485F2A3AD8888959CDC83F1CF577DFBEEBDB11AF0501473A1CE99A964A4D0AF1E5B1EA8B934B077A4787C74CD38A4493E55AC5B0835685BD8E5CD0989646900621AD5991867FF8C1073FBAF72930800EEBA064C3AFC8B8B72651D833962EF945470CF795D1079AA6E75CFAA2D5E6FFC80948DAA42DE0686E54F87EBE85750269DF57C37B9AF0842495C581E912048DFBF0873F0C02C124292DF2A39C803778A8CC152EE1A085F829C7714A6A4E51D347F8CA6C264340D066E2EBA9A79EFAAD6F7D0B3C898E628C029A050620ED0AA674CF927A0E0C0CECD8B143AD25EAAB90B623DA9FBDBB8A0497448D26B5B3CF3E7BF3E6CDCB962D7BEEB9E7C82369D7C2015396003860DACA59211A3337824219F95FF8DAB53F8713D01017CC960A0FD7DB59B76EDD1D77DCC1634FF28D798283CE97ACC34F94CE828F32305742B7DFE8CD77F2F2EC6E75CCBEE52D6F79F4D147AFBFFEFAD34F3F1DAB864266844A3CB17396C5657499721DCAD704A35E3EA1D45FD765ECFFB6BFFD71025EEE489588B5D38D765EE1FEDE25D2AA9F89A9E3131313FB8C2235A266E0A3AB00FF491A52F7C44DB664E158C989808876943D48FE652B80FCE004860B9A9092565808FE1789DA49D7ADE3253B2A2FB147BF4F8CD15C43BCE4E179797C45B9EB456332C865E38DBC57C8A541F11B43E2E492453F223351E999488DC7A001482A9F7163A581B25F5CD19D9A9C982AC64BE04FAD429EAE24BD6457B26B77793750E59C73CEB9F2CA2B95D5B5B6C37503C925C4AA486DC669B43210EA2070A9914CA965F76A9577882DF14B531097535D5D9572CDAF759B2B5E7476A5AA565AB2C3F664BCB1B46771D7EEE1E7BA6235B7E9617F9C660C6CC283702F552B9094BF72C61892441D343605A1D7F1F2F5CE162FA939FD46D66C8C0D0197BDE599A0D88C4E79AE59EFF423D565E966A9DA9CB2BB064AE5E15CED1057B677CAB23DF1DDB156AA6FC7983593310E283466A06AF5E493E3112824D259710AD881BEA80CA79D781142472C15F32BA6CC06D3F72CE91A1CDB9D71538D6C67901F4E48730ABA88918B55AA4612475DB20DC9078EF876AF5BC2412DD9A95CB33195AB9FFCFE931EF8F60F8BB5B16450AB3A29D730BB5A44C999328A4157CBBE2F85744A92A63D5DF42BDDDDAB3EFC91BFFFDA57EF00072A16AAF158BC569BC1FEA65CA882E94E490651633098723A63C7BEEDDD3FFECECF77754F381312E42CB7DA4C572DDF8895639027FC46ED15DB0C28EA6921CE3937E7189A31AB219E5A8945235516BE774D2D063C454A2C9440600638FC20C494DC49AFA5EDE50B07D4EB8D4EB432A9F157423735EAE57C7A5709D90CAD9CA0A7175E78E1962D5B8E38E288471E79040D582B1BEDFBFBFB49F7C1A818B0C8840370148DB161BA108926E7A3890E5ABF89166A46E6CA6C793E5E104106AB1627757B2AD0F542665A60412B6FBAE9A633CE38834E02095D02BC40ECCA2BE5042AC3722B3107F0AA9B6FBE1930E1DAF59E06164BD09BF3E67002095DF48895AE5EBD7A646484323E130F5599C3BB071D74105AD257A42923F895F2041D42C66CC6228D780B689CF4181186BA0BD039BEF9CD6F4ADB12481CE34F32EB10D35BD57811C5ABC890FF333F3A9C1D4F64DDA0D028670F5B3EFAFC8BB159EB6ECD6991FA5E898D456A128F2D2A368B6216E31123DE199487C02732996C613C1F8F3A5ECDC70640864F493D58BE667C70346D15A486F67149C4A431DD1524F3CD7AB3159E6AB5444BC8342D838655703BC49CB1DC46CAE89E092A122D4843D0D837CBD37D8E8CD43B5B314DD2D1AA289AD91583A85E8D444D0F5C2B689DB572BE022D013A43D248E48382DD69BBD3F5B8677E71C3951BAFBF72BA3AD5E5CA940C003362D6305493A6996D3AF8ABD0AAE21C894B90B9E2F22F5E76D1A9B548CD8E8951C2727BD231B718292EF616156AE3C5FE4662C40730BC54445C2FE3DB915656AD808C962DBF55B91F6A8A1BF35DCF8B36A219DB9FB0E3925EBA68D9B3A3BB9A563E9B05BCDC62151A561C1AD08D1BAF387BED29AD1B362239C36D6662B592990793EB4958E385CE94532F59A5CE724753CAC564BD4F64B20C68D98D66C39FBD5B24C05E194D538206CE4BABB27442A219A94FA7833AB4E8295002AB335B9EAEC9F2BAD42C19ED48C84425292634B27A67C39AAEDB582FF648FCB1A6DD4CA4C49B1637BAC4F1A66AB15AAA9C8C48339FACB682825B72B3530777379D78220168572AF956286A4B54E888E58C5A61DA69CA8A0396BFFBA347DF7CDDF569D389D833335579E7FB3FF08B9F3DE4554B60CE3D9D3DE3D385BAD4B54C80161D7A15FE4556956E616C386844357728E6AC9EAF95D71638484A29D47C7FCD35D7AC5DBB560BBD312C955C4123882494C915B40B38F3150A7DE1E2F212E2043CD8E19874721769935ABD309DF229E9205FC74F14E4F19C0E74DE4A8A2F0C72A5F91B8489F662BE4BF2C7495201A232A1F5FC980301A08D8D8DA119968C66F8AEF7896BA6AB8462EA59884D66ED6F98EAA64D9B20296BF254387DE14FF9EC8F13BCF6B5AF7DFCF1C701348CC28B29687DD2AB8F7993B8F1F21B7EF6E927A0FCAED7A2B17E6D3870C89CBDCD0DBD71EFB88AF0ED48AA153132158D8DD9ACC005104C539A1928CC20312CEA89279E90B62E28B3EA20B320197440F514FFBE64E278E5B1587FE647874BFAD28A3D8900B76D29B7881D786610B10CA9663C6BB2155F28990A08437CBC518E35CD0C089B119F094AC96CC748FEFF12F726609295D5DDF8B9FBADBAB5F7DE3DD3D3330C302C2218779468CC17922F065CE22731B8B04410019961DF666084611F706411028A1F286A48946C6A12F9DC9098888A802CB34F774F2F555D7BDDBAFBFD9FB7CED4C9659841F1C9F34FC1334F77F55DDEFBDEF73DE777B6DFA90A5A86AC05BA6A96E3B79DF0961FFFFC27BEDD914D251584BE234B5070F5AA20B997152D0805918D047E2C5CEBA23E4B16BC466A88E252110EF50E98AEEE1828F447C6636BAFB103C660AC333857AEAF7B68C3E68F5EAD19C27AF35C5F3734CFF1A92031461498361CD7B5B229A7DE2DE4ACA566475813CB2DA8B6741F0A6A6131F040B651D34C8523BBC385B4950D3A1D13225CDCA2EF8C95D3027C7165342BDC14581D1C6FCA4E457A5795B3A3839D4A25EA38522417B362EDD6DB662C972055D1BB86E8E7A478D9AEE37BB8F874553BF684D7D7BEBFF4627707644464E5E843DFFEE2CEDDBEBBA0C7417E6050D58DEADC1CDE3752E456C1846E008E2299DD411DCA0A8CB4322D2FB44DE1CD0A202341D934CC9495F1DCA0DD69F718A08444B6E010D7DA1EB7616C7CC54C7737BEBC11F590BAB3D51D94208AA181A05DEBE07CAA0E2AB709BFB417AA38FD036626745A68D1D9A514D8BEE86DA07651A6E3F3E63A0A3E6FCBF44CC7700403B5D883B17837C4C582E052B80B47C2C139B982D6160A861041816EA95A27EE347D156ED874D3E6DB3EBFB454312DDD736C1FF53EC8BAAE52AA216D25CEA9E18EC2BFBDDCA07D2431DF4BB2108C135D9816F455A822C940E63EAEE42CA65C7B42CAF8EFE6CD9B118AE2CE5CBB762D9A9F494D20F7F9FD79C31F7FFCF14F3CF104241C0B90E806C749239CCC43329AE520D75541DF35CF6D5AB9431E8D8A612CC3762EC125F849B832A9938875F984134E78EAA9A750FAD393E2B9DCA58B4421590C14FEE5F006AB13D23AE40222638B4D222ED4FAEFB2096EB8E186ABAFBE1A8532A9F6871E7AE894534EE1C4470AED9081956CD07A409B00FA1962C95EBB4C7121F5FB85B162604F1D97EF51F627117413D3354FE0AB68025E061C1FC29B123B45921F94D896C8D0A10A70D23DE419FB9FD204B88C82810CCAFE521B6574B4287541D5F3B6D750828C0C6DCD106DC99CC05470D3496381F992872F2E3EFCD043B76D7D5E82D09424D3D0DA8EEDA48B63A350DF5593E3711782505EC453622FE5E85D945F464FE28B8F015D4D8DBCC042E13C28A3400A2A5E20C9760E2FAB671BA106C3D5EC9EE26125784AAA099FF982D016CD8CAA878855972F5B3E3D2308048BA582808AA86A4AE946B50BB1AAA8B16185B61BA3C4D7A5AC11B49AA626BACA74DD6288DF151D458EC32550AC58EDAC184A2DCE74D55CBAD19521D07388B4730E34DBE9C9F1FA9EBD86A636144FB4E4D141EAAAC2E2495B1D5B2417A44CABED74D00ECA9534BF1A99B2E966EC4ED71FCCE52BB546694DBAF36BDB2A95BC2E44DDB00B616CF820BB26FEAAE7BCA0B962D4E856DDB283E3B5CCEC8859B3EB309F161D13108A87BAAA3433BE2082CD8A50B422E3CA44A915F402815A2A850ACF8EBAB8CFF34AAEA6E8E0562606D3A92E6C0B1D4D89FC66DA0045828E538CD0D49B50F2D9C5F917F2A5F16A7DAF1E8B66830DD1162D8FCF3BA1E5E6DC9DD948727329B4CE5033A04A100E3E516E87F2080554EC385E6F6DE37E9151774B4EA865B35264B81D474F655AC11268BE81BA533674C40DBE877A3E30648882A18965DD6AC36E77A25E3B6194964F3EF9245559C16F5D5CC99FC9C949DC2FC29D43BF93C424A9478017E51139FDA53E99C1ABDC831CB50CDBC93C271F08EE4CDC96DCF396C2ADC9241F0E6A330933AA8A6BAFBD9662CB44BBFFCA6623D03320284C4D691B54574C1603425DFC950AD088D599FC18445641D2017A623D49E60709CBE3F0C30FDFBA752B299564F0908E640E356ADD8CF378F9E5976FD9B285AAD848A426498AA09F744F88980827B8E11C47AA99ED00FA4A91843B0548296F958AE9A85A82EF42C750C51C0557E1E5E4D2D0EF5D8E33895A01C7496A553A48EF4FD6BB3463D4482ED9A2875E0A75DF255D4B689DAB31E2837481869E3E3EE38C33EEBEFB6E861ACCD677404DB09FAA20E4C1BDF7E8934C34A094042A7063320CAEA0F9FF5913447AA4C96ACA8E7450C46B40B124ABA576B7AA83EEA108C8C76800A75C35E5DB4B2E1A10AED83ECB4E3FFDCCCF7DFEAEAEE776EC36983DB78F12A1E8B45C28C26415425B9D834C2435211D89C62E3EF8822B4181DE8E3240D224431A6D4508B866F5A0303CA0CF08AA9ECE70C66C6BA1B3B73A00033618FECABD9EF34ED5FA65B0CD01E1B20BA22093CEB4ED36CA34D590F594DE6DD972A8A5B46CDB6FC6726058A08596E2A51B9ABDBC3BAE433C3B38E3044EB63EA24254CB9415BCBED92B455625BD935D73E8B17B9E7B2A0B9D690D560D8EBFE58477FDF087DF9F5F2C47A15C34D3CA88AE569DC5162A281928E48638C98F4A29E1D9977D548520DC553E4CEA5375AFDA82666C09236AD42E4471B50CED60184F510ACD52CBAF8745FFA48FBDEFEF1FFC96DC4A47913EAC4B8A576B0CC8A96EAAED879EEF0C0E8D54CA750D22CFC005ACBB1D0F22B4A2509B498A26FAD4F841387A74AEFA4C33924782C8589D894EFECB3FBBEFB1BFB1172AA1919E749659A0CE8C4DB73AADB1D621134343BF8AFF3D2C6B216A179C5C17242F25C529135A79F0E744A22D0A78358A03B40014301408F0BEC43E8B58340AC496406BC0B25246CAACD84B606BA3D170045579309E571CD1DEAC9B534AA56E756E79318B67CE3B1DA350B4CB8BBA8CD8482197F8CA952B897AE037B2A41CF013F759F4A5240743B22D227B57504811D316B79AE2E27E4E84677143A543740F4EA181BE3780E988095AE275C8B34FBD71C85B42E3E1CD4F0325A1C6AC0F745FF272241137F450305909ECD3609B23D9C7F1957CC5E4382256353235509311C7354E13DE940B74998F4FEEF7F266D8CB0616FFCC4DC92995082F4BA6030B3892F86CDC9130A59672F4985FFCE2174F3FFD743A85E6131F1CFFCA14224C864A0F78CF3DF79C7BEEB944328AD7472DB57AF56A149AA4EAF0CAE4343F9826E04A3AD6F14C579EE478605386DD7D5C500D2FEF8BC9D749F6FE3CEAA8A39E7BEE393692F6939EFB89548AD6B08A4D72D642DFCEC341E278B80928B9BC92951CFF53364154908D6AA0823CB062D55CB5E2B7EB2275B204A9664E758C612839D05990AA816543A80F0CAE5C6ABD28E8F9ABC25D21C94AECC5FBDC084AB0C2186CD8953AE2D99134CC68D0755033981D4D158D631CD01019A52227CA436E402EBC94FA35B8793C4B1F76DE72CC9AC6AEC6F6ED3B3ABDB7311CEBE75CF8E96B6EBD5DA41299F0E94F9CF1E0ED0FAC3EEE98E79F7BC190CDC00BF086411CF891870718BE9A2EE66BADA5E2F0506DAEACC4A01BE9AEEBC180C83D15FF939B5B835C9C725A688574DCD16CD06AA9E140CAF15DB0BD54001300D3A3BA572C58FAA2FB1C22EB35D1B2A657F3A05E498BD335B4239BBDD48CBCE6B93E7E53B427F26AA91297DBCAD26071ACBB208C0B7FB093EE0C56A3BD222953105A0842D3C8D6C6F313E097F72A5D14AB301FAD294DCEB5661A6A4B389196062C75C2F1AAD6A4B46A62ACFAE46EDC9D36545A03865B7771E0B974CE757DD7EB8A68810C59055A19D0BA66DA571BD9767E6040DB56F387B38DA8091D9106261E56426D2BAD1E9A9ADEBA2443535E39DC5A5CC4D91E874C2558F0F2010C89E705372D6220A98A2CC35827130AA3A0B954D4FC966010917AF2097A817BD3326FDB70E739579C8E7A5EF05A3BE2E926971F56DD55E9A0DD97F2B594D768C462AA233597CBB49A75E9E5D53FEC5478AD9A803236C545709F103446894F397C0F3CF0C025975C42929D653D77B190A4FF2A46A3FC10CAA3205F1065E6724A8FD5FB901380B88C70F3A3604240CDD290082148DC535A37799928A3833CBFF40DA1F524370EA5378C8F8F132B353964D84912BFBC0F25F47B0990726255C72E6FFCF2CC33CFBCFFFEFBC9D1FFA637BDE9473FFA110E008FA10C7AF68424773BAB1CBA38C530A04F5341B292AAAE08AA53CC19FA0179E8E75C715D020A7A4A75253F1885FBA9DE9B1512E7AA422F644DD51B1CD7491A4FC90000F9EEF1FAF846C8487AA5268084A3898219449DC47001FA044D74777A8AA4D04FDEF7959A80E240644910A4E0B0FCC184359986DC3169BF843152486468E2BF1B366CB8E28A2BC88947DD359886F67F44130C98BAEDF87629FFA63FF8FD6D8FFF50AE2C55504C7C70322357DA3FB461BA97697E1AC8934AB43D046D78B49A95BBB0F73F774239525B6A1A95088429D06DC8E6A1DD5DDD5EFA5F42FEAA5F3686FCC18AE1FA1B2A22057DD1D3B541B31237FF6D4990A37970A80D0DC82ECA2D5806237F906B0D8DD9E9368C2CC27521548DD5CEE0B6C1FAC499132DF785E670A1F4E576757B804033ABE7DA8D4EDA4CB79DF68DB76C2A8D94AE3E7BC33CDA1FA370C8D16B661E9F4ED97A3DAEA164CFFF314883D9747ED8DF512DFF5B0D7680146AB1AC5B51C755CC426AACE840A0D4760ED6579C7AD4AC56D7AF9B0D15599F8ADA1F85B8D8EB78834F360987FCEC84EDFFFC63753A1AEAC9455CF7C13269D91FBE79E6F09F0AC342C45861B435367FC71CB455308355CEC48EE2AC768E35E8E4E6B6CC8DF98784602F4973660C9E9A8A02E3F5C5C99DB55FD57290FAE050BC227DDCDFCAD6C0E4BFFDF207E6A5AA930B0015C1B00E03DEB1FFF7F52F3DB7D5AED89AA44A91E4C7BEACA9E96C5AAE4A5D6828EB879C54377D797B756EC5D3DA6E84E7C3E74053D3ACC288558DF6FCDD5E7C713AA4BD301E31BD05475220B342CAD5E23DB541587EDA11D3F6EEF45DB688870F895E05B01A602708B59485A3FEEEC8E91D33CDF9A614A19960B8A1DB8B57C3AA6862C79A593849CFB752E72C3FEF3BB7FEBF6DD5E76CA99E95D3757CF92538E6DD4795FF63219A89EB763333945F2A57A89E9F5A0AE2BFE4747DAD88E7820B2E78FCF1C79F7EFA69896531E17416FDA818700792BAD82F5A489A80C13555FA40CFA3F2E28B2F92FE20BF33B1E443DF1F42A79C76DA69DFFCE637C9734DEE94642748AE24DA2F8D921D38D4218BC6CC055C491E3D1640FC03572D71B61FA913D26749473FDA2EA81528C5050F66D75B9CE8F7C63096B130894EA659667736394F985E02150CF5D2A1BA84B8DF1A971E901C4D943B4F3340357A3415381804E6244FC92D8E2F08DF083520A3DC2D3C9EAC2EFC13F3CD91F580A71C79E49108C351449258A4A2E2037A87384D9322ED38CFD4B085922C93BD25181624253ECFFC01BD4334F9447C4BDCD7D4D1F360A111AE4F4E0684A81D1BC5187048BC0C68916CD9B205A10CB710F89FB50910CB747B8B6C60D9D8D2EE5DB8A597FFC9A87FB8B578C39EA8A31623AD9B695A9F9CECF80DE7D10674ACE1C17871DA468340570C2F883283C5B65387C01B82B1B232A79EA46ACB53DD9FB6941F401EF2221F68635A5992DDC7165101189EA5074106F46C26FDD2C442F6C594AF83FBA942DA08A57B16DBA1687592F233DDEB532BADE53BCF7A2E35E8766F01F9A4C3F4353BD20FA7ABDB9B29D3ECD69D5276A0E3740C0BB14BCB884C77B5237F501E9146E7B6EC55ED7490B34B67E6AA434DB80994364467CB7A667CF8DE186ADE74A98C524B72D206981E549D12E81FD0572C3F76EBDDFFA135C0772D503BD685595C1AF2037EBB62A080D133E0E0B69625500CE1204243C4F325150AEEB21A94E13837FBE6BCD932CB8F2DE88811C1D77438E293C76EF5E7BB0FCDAFC9BE6EE9455C8B0B85155A63B1AD39793956E8BEA58F95B2D6E4EEFB7F291A47CB39909AC5CB073A9D2EDED7A9A3CD55FFA3534F7CE63F9F9EDB3ADFABD612589F24720E6D9E4D134BCD5A747F5D1046B5F50A78DAED935D6911D63B8A0DC65A2B548AC53B3DB32DEF2ACC1B2EC4DDD4B032520B77754A90FFCBFCD0C061DBEEFB4FBD86CF9103B5A97FDA54553DB8A7137407A4A82C8F6A7E45C44824914620A46A28C5A2B37D36CAFD69415E95AF7F6F069E90F330E043CBD63AF75CBFF153B7AED73F3E5C50F28B776ECDB6851DD7D26C43DEE7CC4876D0E340EF6FFFF9AFDC21BE0A093E62A527F24E025F4CF3C91E15829C247A28671F372462D20F7EF083DFFEF6B72905934689B7A1EE25885BE9789402681C301705A910DCC07805BC0BD5F792039A30385E9C3132B983D6AD5BB779F366AA42228F3995C893079C2848F939994883B0EDF2E5CB5157D180E901F15C72587116CDA9A79EFAFDEF7F1FE50B993B78223E0535D7247D401E12669EE0FC71FA2BFDCA340FF46E48EE939B1EFAB614DE9DBEA4E02D4D268537C930A29A3EB9D730807E20104D7D3D515D5D7EF9E537DC7003F168E2BB43759B749DF32B63777CB28D33C041BB40EFB75656AD5AB567CF1EFA997C4A149EA5DCD3FDDABAFD9757A4DF32FE9571021C00BD5F8EEA3327F6013501F111716107F709A07A695421EF7DEF7BFFE55FFE855215B81107D11C31F1D16BCDA9F8EFD204514A023B1E887509BCCA7024FF9F55F901AFF6E519049ABE6CA462B99BEDC20579CDE906F778C34D6D418D539952D070AF5F7FED8D9B36B5FDAAA44781700A807B7A0EC606E0BA5DCB978AD3521D8622BD0CE13550AA5AE5AF758C0518904B4B08C9D3685B888CFD947C482D6AA20611D183B20A56B4EA2F96CD8FD7ECDB5BB056E498C26D30D25CE92895C6F5F6313F3DEC573F791EAA50CA171B9596611A364A680D327AC13C5DAA1C56831AC066C88543C3EFCFEF38669B7ED1800C6E8C064CCA874657717B694BBA0A72A005C5C8F7CFBAEB630F54BFE46A01DCE21FB534F2225402A90866052EEEE5E9DC8AA8C7B01437D055B71BA912EE05B16D719B3A7E1BC5A4A1A6DDBC5DF88005CBA2FADF75E15768DB4CD4A2B9CE6D91BCDB8ABEE24CB6265ADE4C4D8B202F21881741F3B6B56C687C26DC9ABAD0725210DFD039AA3C3297F5AA2D6960D25F3AA5A5A421DC04929FB214D1D14C848E7D34A8742980208C230D0294C93787C5EDD9DA175B435E4E0B86F766B615CE1F6AC765E586129ADFAE1A4049A5E7350DB513451F3AEB233FFFF633BBB66F0F4B6DFD02D333F00ADEEB97269E85B9100AA055B50D8A0CB1BB31020FB19EE3A485DAD16405D0940D229144A4C9912CC537FAEAEE6CF0E576AE961D4AE97F75E3B9975D730D7434D3F3073E35397B6807E63D78A475DF599FBB68C3354DA395069D5C23A3A3A3BB77EFA62491DF8DAF0CA85517FDCE748F8CEB7147C9BDA62E88E5F17E547E493B90892550FA93DF9CF62A8AF8E9E96936DED97BCEF921F82F4AB164439264761053C511BF0D770A237119F79BBC737D2FF4FBC8CBFDAE2CFB89B324D11BC1F337BFF9CDCF3CF30CF79361B73EB7151391134922CD47D4F3F4E02494B91D04C7459336017DC9A5092CC7E9D1F016D450F3DDEF7EF71BDEF086071E7880EAAEA11FABA0BA071CD2638F3DF6A77FFAA754EB443D4F70C6500BE26128E8F1076A7E89B7989898A07A3476075168975F13954DD0EBC015830793FEE384A8576A02AE13847E15052A9B4B2FBD94FC75D404825F04A709ED2701D93574B038014F0E2B4B5AC7F83D294B2A73C50133F114CD0679A8186ABC52F2523C9C743F4EE3238F3CC2C1AA641F693CE6E28B2FBEEDB6DBE8ADA155F1894F7C62D3A64DD0AFF648C69F706DE3C1B7DC720B474AA869D295575E79DD75D7B18E61CE77760F8AC1588DD2DEC1C55CE5DA0B2FFEEC865B32170F699E52BE6BDE0CC01C9DA89717C1F2C73E7E1C04B5B97FDA75DCD1AFFBC58F9E1182DB0125560D59780F8C8C66E3F85390B9F8F76CB468EFDE3D150EFDEF8F7DF24BDFBEBFD55CD0AE30326DEBE4F69F4F0C0E5F7FDD755FFADC43A75DF331AB3EEC1A7AA0CC2CF7076AA9B0EDD6C05F690635E9D2F69811EDF8AC061B5D434EBB1BEC5290F1D581D66DBB07ABD9DAB55E414A2F656A690F4CB7E458BE2DB5603DA4168CAEE54206944B40970ADD8D7588D2F0909DDA96294AE9BDF945C493E9DA90067AA3B098A9ABED5CD768EB5EECE5AE9F6ACCB6E1DEBA159831E4EDD46C4E83E67A09A438D7CC36AB2D182BC0CDF5A263D51C05F2C1B027D220FCD280D36814D351CD8B6023488D427C573DEB2B057B62DA98D3AE344ACF0C2F3CB9039A60350B366871B652E84886595A502B6A132176285D36A00596BB79D60C51350DB68BD34A13C2DB0DF0DC7C3B27ABCD5A47817B43BD9AF28A4EAA964148EEE6DA4AD308332E5C66C1EED2D0439D72AA0A75A1D8D0903AC2519EFF7A98DD5B40A3663E53118EA1EA900E465D9F313D2D3C2A1B3D57CF15157FDD68B71A661EF6DD725B946A2C9BF3E720FCAC60CBC854AD4EB7230F0F8637560E785F631D14CC29E78A5D2D79BC187596CC2E84D982566C5F5E093C115B4AD70CFB6B2E5A7E3895A834DDE8652B9FFCE4B4BBB9D108AE40926C4991C86293626F04A63FF399CF48EC6BC6331F7EF8E1534E3985C8705EE957E53441DAE19CD2434603E12FC2B9F83D0A29DC6CE45C3AFEF8E3FFE88FFE68C3860D64C5A3D6215E9A9999191C2B85F556AC58313B3BCBDC3849A633CA4CE5C49BB1B13144E8246AF1F9F1D65BB66CB9E69A6B504A26F120F4F362E30481DAD4D4142A3C2A11E0C827DD8886C12E20726731390429129292C9C498FD22C6D4F59344F311471CF1ECB3CFB2BF883D6078305964246799FD8D4134E9421A1E553EE387893929DCB266CD1A9C3D3223EEBDF7DE8F7DEC63C937C559589FFAD4A7F0AFF86AF09AF8F3C68D1B934D950F163126D04D821EBF413580CA804B1369C1D1FC24BD498CFA93B199576A82640212B3B671A8990646DDD968BAA82D33FE9502DDAC74F7C33EFC2BE9127A6BFC4E29BACE3C5494C346FE4022B9A2AC569C64D2195CF988776793940AE6B940816F4D9179B60269C5E231A44E021F86B5232BE6737241F23F98863708F631554D65CB47D6BEFED47033B3E8B5A5EBB3B1D9826760C5C4A193CF0DFDC70FFE23EA40C91A6C541BC28F2C478A298FAD2DCEA4450316E13A6F67E12BEDB1DDDA9CEEA1A406134AF2607747A5FB0F90DBAD2983915CD554C319EFC28EA2DEAD7B22BB3D0BC199002B44EF4CFD3AC3FBBCA9EC6D869F17C467F9BD6A63035A1D90BD7F289CF36DABAE77D4945168E42B23A78F282D6DE9AE8E7B79006345E5FCA550ED8C5F39B6379E1BDB98A9826A9472E77EF2A377DE787D4E2DD564BF03ADBC57F0535D67584EBDD7ECACA9A1E42A99B96AD02C6D18A8E6AA6845AC3AEDE89DF73E1BC703F9B7FA8DDF6BAE0E5695FF66B6515521E51B5D6FB0589A6D36F3192B68A43BD9B9910B0A43BB079EFDFA761154D0D5D4F956D76A8849C0C5B21D86BF3A8032B761B8685E0CC5F9AED56A4377E28295B3F99D222CBF17770B942E19A8A6961413464E5E3DF7E56D785F282E0DAF1D58DA1E875FAD43188D4606AAA639C501532B9C39E68FEDE91441DE05F80AE06145AD86C19D0A94A3A96B4B1590FFEAE273BFB0E526CDB525D046561EF2D2EC0B45AF54876A9C07EBD462E7A89EE554051880D215E279D7AFBFE8919DFF52FECA8BF5BAA5BEAE1EFC7EA8B44A07BC6F3DB70786C5CBCD40BA7DB95D8AF2D5950DF3F7F1D7E1EA3F2C46970F0ED4C2EE67635BB50C98758311C3A853AE7C32F39BCA30596EE0623EF4D043B76EDDCAAC3C49227D92DB9C8CF3B2EDC4F4908443972F5F8EBF12AD02A52DD2FDB8228CCC023629701BE09D888487F32369B7C77DDA1976F7739510DE0BBF3CEEB8E37EF0831FB0EF82535C92092A9C2D839294327CF03AF7DD771FCA38561EEC60895FDE9B9E85233D2949DB65CB96A1487DE9A597D0BCA23A613C38D9F486FA6BD26CB0CEE0A809CB353253701210D4531E148EF01DEF78C777BFFB5DD2B2CCF221F71BD7B028A47749A2871E93E94889068A5E0ADEFD739FFBDCDAB56BF16A846D93D4CD54614B856F045AD9F99664EF20D38D9C697070EF1067A4D18BE6C040D2B984A0E19FFEE99F9E78E209B26398BE906474B287F07EDE21B60293A1A064E919139C104909190AF8D454BF8DCBEC80F507FC2B1794E0BC71688A0FE32437BA083E1AB14571A401F5011E8FAB6BDDBA75F7DC730F9306B2E8C71B31091DC21D5412FC144C97C27E4B9170FCBAE35E7866CF842A5503B7BBB104F26EEB2AE864F2D286463C0F837783D385F695C24D7BFFCA5B2E3EE3E2F3EFB8FAF69B6F6FCEB7A508F19B0C2291525410C379B94C6EC0F9ECCEBC0C4BEB7BD9A89B109416DCDBEA63AD6CE31AC944510AFEC0D8C8F23F9EFCF1433F334B4BDDA60C8A3E941DA9CD07C1CAD9E2C9A51A2C83AFFC4AB44CBE16D18A0F9BA2E5F5D462DED42FAAB5F00D5C0FF9CEB85CF0EDBAEBEACDA10B87CBB945B80786F640F966199CE8D0F5F2D66C24DF726461C70BF657F34EB986964D4E3396A428547C4586A166B6AA85684BD4F2A05CB63255DDD9FE3C9AC9329CA90D66BDCA3DB13C0BA695CAB423571B6BFA0BE3EBAC85C80EFEDA2EC6A5164A41DB960CDD0F83B194E5F98A7D8ED655CAF0200C35A011281EDEE0461F6CC85C3D2683D9BDAC66781DEFF3BEE16BAD91FCF5E75D7CEB5597E27D53EB0FEF6E7B51FB066E7C90CF4B0F584EF9DE28B5A0CA9A5E6AA93539DF892A78DFCE50A7BEC9053FA29232CA084A5FA974A530BE1E46DDD1C646B7BBA766DE0FF96B972D983370B3091D278B4739D0D465D023F060CCCBDDFAF05F9F77EA87ABAB0C38B5087BE787FE9F5C9E8F5297162DA55ED91C0F427EA9DE180A0D471D357251744A2D5C1E1EF0BE8AB2DCBDAAE96955695329D7C83B37EF1CBA429F19F4A7EE8EE79F07E766803A14AFC7A7D724C377AC51A5516639CC0A007F40D1BF6DDB36320E70319F74D2498F3EFA28398D930CFC64FBE2F2E610A3C4A219770EEE73EA4F403D4FD81992E4ABD9EF93CD679ACD36EEBF6C26EBE33BF4FC308AADB48592018D800B2FBAF0D0D5876EDDB675D9B2F199995E7B325970F5E13B354D49575143F4AAC36408244588B2482457E1A696D1021265F68A1BA0A0440DDA4301FBD0A5DADBF678A2F8531CEF8B75C852CF8D1E1F3860F2CACC16B9DF4A93C827F05F9411AF64FB6181C83285B2EC494C43A283234E3DD92808DBA9E70F5E90335E5EABFF8E3291288B9F53C4F0D608CF2FBAE822126A2831DFF39EF73CF3CC3314C62075C2C58084852936CB6DDD92D9532CFE5095A2D4838485442F9D72A5928C781C39C765840616DA25289A893D826C522668A2B3E84F5CA94E63C0DB3DF4D043347BC93924F58F17A17A14323B78F9BEEB5DEF3AFCF0C3D1C4A1459C4C244D6A02B6D828F4C2D50FF48E4821714643B2DE10DF17FE4CC90294AC45AF9E1996F007BC208E9F6AA7090651E22F17B193DA2055448B41641C8EA6AC3931E1AD1B04E3D0AA2BD42575B07865BCAB5D956FCF4A5E10DE674B0B8179B51265B292693B350F577BC6CC52002994FCAED7D53683370DD90733AD85106EEC16BC626A03CCC58DE2B9137A0A16EE9A160DEB25B3E40CF88737CB5B5B4AA48E0EAEAA55E66DDD1F8ABAEAC5D9A566CBFB1620485FE51FBBFB9C9D190B82FF1BD80B9E85CAE6AC381A97DD3BA24CABD80EEA469CF286DDE5A78FCCC973BE350E9D69DC6ECA4A283EFD86A53B5FC89E66378F80811B47CEFFD49937DD799BADC6D070870DA3E5BADD5E846EC233664B2E7CDA5423BF748BBAE445E11D3254DCF4758531C86D87194845A75F7CCA176FFD1ADC04BA37E87DBE72CFD9B79F73D9C5A5523A304DD7F38C4A1D415CE56EB10F505D59331D0BC65AAAE45FBB370897E5D63715DDAE5D164364C29D9D6C4B0D8DD245D7AFBD6FEDD5F3C500CE16A55AC3B79B653BF06FF6D00A495F5D1884D41E585046A2D016957CA289CD62EFDF48E423412F0936F06DF5CA20F4A6A23B768946099B24797130BAA3BCE2B2E26EBD06EBD5F1C1C25CB312EB90B572FE4253D6245B2476C553416697DE868BCDA17CC6BEA862154717D7CEE315EF931E5C7FD985762E7432752F0045851055FEDC81EF8BAA61786369D1A8021E138C58F72F743E902A1A0335DB80E1563A5B75DB41AEB3A2F637BB61374CC4B09848E9A6AEC3492F0EFB7588DD8B4413D12CA27442E08B6BF88D6F7CE3534F3DC5FB482211C3A49B37DD74D3FAF5EB117CE1265FB972258A18BAC1C14B40A53CC2B7DEE58403DA0F56AC58B17DC776B17414DC639A6D0B3035325A5858A81F7EF894AA23A894CD949ED235498E02DF0D433C20AA3685D33C0E7DE1D711725F9163DCD24AC7165011F50B8E2EE8D5CFEC13E9A83D22723EC8FDE1FD86A0F97EEE6CFA70E89BF63069416EDEC4228C6413B312B12EE1803027DD73B63B9D4EF8915CDEAF49137012147BA25875E1CB4235802F98989F292C416791FC253382753CA90D3C0B251AB784238F3FFE70FEF9E7A37649F73E543F816F9F421A491639E8773B6052D2D1D1515C1E548FCDD65BD20EDB2F98CCD6C031C71CF3F4D34F27151E657C5E70C10577DC71071D4957A00170108B9E8E8B510EA809924CB1F844E4674B727BC0CB990DF129289D8CE699064303C369C43DC38000FAB590641BE12DF018EAB2475029D90C030F43858DFBF0AACB2EEEC4C1C85829D8DD88CF0DABCB012E87655169E6C2AA7AE86474767318E4F90BAAAA0ECADD25370A206C16F38566AD895BA1878822DAA6139F81D922C016595A4AC5577452A111DD04715A4F9F9F0E65A7755F431CD814E4A675BD9EF29400965BF9C5BA04521D054DCA57BBC68275FB91EB6FFBCC5F97E3B9F6864EE441FEAB83EDDD6158A8A5AE33C69E1DDB71DFAE62B1546B56337EA6ADB4212FEEBCA27AC85261FBD8A985965A0FEEC03BACF2AE6B98C5A5ECA7333518014389C3970607D30B4B9A70E0280D51F0DC82359323BBFFAC5BCFB5E04669304E55AEEB4CC1AA5D572DC2581B2FA1A1A92390C9B2C6BA17FD50873BBAE9969A1F1B999B9F150D9F83E8B0546E7BA71EDDA54ABF1CD2EE6D49A94E2C8DBBF16CEA3CE89A8ABE318C0C08AE12120F36DB560DAD9BBC97AF0DB896E7B4E573B20D44E817574BB151BDC91FA81683FBD38D60B79C12F3A3DA391F52E675F56ECA854BB47428683F4C19ED6FB3063E5CD14937967977CF84085837802E8F7937CC59A7CA9D35F1E4DAC1BD90B34AB9387CA1DDEE4AC66018FB92D98855C328BB268AA173F3B54945BFC6BDE6E3EBAE38E4E6C2BC55BFD513CF1B0A7F9111E43D30E3CB1644A9C181EE0BE3B0FA82B13998EB5C86A26A15DCB00BDE31003F293F7CCEF5D73F714BFBF702BCCCDEAFB7D506AC39EC8DCF6E7FCED462825F5CC64FB288A009855A698FE397B4F20987F14A26761C2A9642F9B04F2092D785301DED6DA6FD82BE2FE520E255E91D20F6BFE7762501E809C0A2A15D989BAF4F4D0D0D0E0EFCEC672F1C7BDC145E677834AD2892AAA1548B82C041D18FFB5156A496DD0B9F86BD165AE43097441D1D043D5A21DFEFD84EA7ED365A4EC7F63C17BA54D2224B8ABC8F173E08038843095E0D7A277D6AF4610181F382E206712E8A6CF20E91578A4506D752E184E237242293A5AD636363A847CF3CF34C8A1610CF337B097EB7983EF4E139A7E570C7B7A4CE209F0FAB7702B32886F04FD478127FBDF0C20B6FBBED361CEDF5D75F7FD9659771CF4B92FB94C499CC85851EF4C62B50EB12BC05598ADCFD2DA941A53E9D355709E0BFCB962DC32B73E49FF3C19271721E3677D0A43211A20C827EA2115521109CA12BBC8A26208D8E53446E256216A1BFE23AC75BE02B469483AA9DB315E89AF4363FF1894FDC7DF7DD3403AB56ADA2AE3838BC5DBB76E123E3B3B0F3F08C33CE78F0C10709FE533E2BC5F9F160A230117EDCB6D6C69569B6724EB639521FFCF421959BF708B69F5BE6A00DFAB5908AC1BC6B34682BF6A5E51118D905D35C2E3E3939897342B9B68604C3B7FCEFE96B7FBCAAEB343FED55A600AE85527B79F59669C491EE2D20074A94023DC87A50B7BA9347178C9F065BF36DC89660E622D0A594F1B958AB65AB5016956B63A07F1846E756EFF9D6B6CCB9137E63D6BD1B46E591F9CE0218B0DC1C9FAEEE45BC3AE42F2BCB36E04997F510D77DA543F716B6FA3B44706250D33EE707BB413D2F0F7251BAA9BC0C8A3BAC199055E804A311B48E05FB0313F1ADB3CBBC62F96CCFCD44CBAFEB2EE0FEBC60CCCD4A831BF7A2765EB86428DF8E1BF7CE15A2523DAA4A3118999463BB855009AE5AD9565E1AB80F86E7D22F801D6BE3A02D89065E9F057DAD293C4557D9B203F266C8799986960BE5BD10CAA34134BF1A529F3CA47BF3F62CEAF7CB8A8D947FD4CDD15EA95DFFF8409C8EC6EFA805A1BAB8AE68959BD6A3434D7BC98F516AC90AA410A5775EB7041F56D3376A7657832B9A038A55BDB6A3AD84F07FE5C3231B02CB23D83B5D368A53EA0DD51218D3438B8262A8E51D1A67B78EB7E0D402DC53CF3665FB5C2D5C3538BC6E36CA43EBF431982C65D63E87EBAC79F5A4B567E120F74DA9574516B8AD4BB552FAADE186274FF9D447FFE14BDF9A59D584ED215C5FC027886F1170D710D904BD46103D4705FB9339D99AA91CC87B4C8973E418C0C58FD2637E7E1ECFC22D409DB270AF5D7EF9E512B3DCE036A0BC1772DF1F77DC71BFF8C52F180D1D2C4DD5D02DC71530BF98CF55962A564AED76512AA5342DACD5BCB7BDEDE8E38F7FDB133FF9F1D4D4248AD397B6BE90CBA7745DD57414FE28F53DD407A8157ABAA1B793A37DA6BD2AED0B30668C8CF0FB07421354EB9DC5C56665A9D56EB99586D004917022A1752A6280618C9A00CF3F289930BCBCC2803ED4DA0CFAA18EE1E16162ADE1B6E6C4D049EDD49321040E5D1048C4D9E3A02EC3614AB1E59AE4DF4D1370360EFD8AF7A2623D8A61502625515050B440EA7718A6E41CFC06051385F4F1601A3FAE06E2C1DEF712FBAD5A70CEF14F78351464781714A6F8203445548540E964D48B86F3F4098F70662AC97D1C158AD1175F7C9139A992F41B780A5E874788C09C22D8E449A38329C60589182F8FF695B824393F64C5AE5EBD9A1A3F7083E564D7FB3FFFF33F7FFCF1C751CE123920BE599C525A03DC3F952264ACB4103711A539F9CDA8AD0DFE40157F74775242A8025F78E105FADE84D2E64DF79E73DB87941A840580B3D49C64784ABC6CCF8A6DFFFABC3AAF0583019C9E012D8047BAB00B8A5609AFDFEA34938174BC662CD9CE87201E07B56004B50C3CB8B472A1B853AA99E70E38A5A591EC70796971C5D2E8F417E611CFAED197AF3CE5CDFFFC95BF15043BEB2661760F1C2EC1928E4F6F488EBE1172D23195C15F1BEF939B8779A3337AEBBEA26FD4AF3E6BFDD5B75C299B60DA9693EE4421AC768FDA653D97EA807B93A646E3E1E588ACAD6E760CBADB8CB34134EFD5B2B93D9DD4AFA2CEAEC1F6AC978770686C726779BB1AC46ECE4F7F46755A4129CA559637D112B282BC0ACB1ADA73D606CD431923C1723B33FD95B6B947F5211DA2A0EEB43C07A46C21132BB575AEE5FA999BE208BC86E0D31871A179284CCD5DFC7C50E891B9EE06EB6BE9B8ECD9662039D6B2D2483DA8E6A4D46C3CA79C8D5A4CB1BAE9A5E5AD4BEAE77EE3CEEFEC6D467A6987F3690870E18CC28A4A6EF7ADCD01B7B894AA094089FF6BCA447B745E9A0DAF5045AFE9BC88488F7E2DD79D8186D134645D5BEBB57388A5ADD1AAF4C9D7FFC5C633FE5A95860CAFE983AAA4A5C876F179AD0B34395486A4C11DC6CC079EF9E31F3EFA4B272A140FD9397D922BB46F0E56B60A3B6FAE1FF0BEA5F3B3E521D72C05515BF2AE0E47DC31A9A484CE4CB927FADD9B87F47279F416CDD6143B74EC92B52A3742BD1111AEE13EE5FCCC64592BA5AD936B94491620518A4CDB9992FB256E2C8390F6C4134FFCD297BE4431CF534F3DF5EFFFFEEF69CFBF4A9A2ADA04A6AEF5283B7C040D87AF59B67C6262EFDCCCF2896114551313638A1A9BA65EAB57B76E7DB1D56AE02DAD4CCAB2F02444009E84A6608CF64BA0C881040AE15E14659A12A36E400D81B2162494F2B1ED7AB586532E77CA15BBD50A5B3620D242596D7763C7055CB5147B39982648161EC3CBBD43D44A254914CA409BA4DEDAB56B376FDE4CC49994054B750FA48AD92C206F1D11F53CF2C823EF7FFFFB39EAFB3B5481EF57A39B0C6C301060C2674EC3C57BB1BABAE79E7B2EBDF452148B78CAE9A79F8EE895C6F6852F7CE1ECB3CFA60544CD99393D14C77FDA69A7E11AA08BA0B05BB76EDD030F3C408E720A1A51F881E57E9CE81FC9E3A43FA140DCB97327F43382983A90D2C0923C1F083BBEF7BDEF412FD515010BF39973A93007DB93096C07D404D4F01207B97EFDFA2D5BB6A051C2AF9E59B5A167D0101105095C767FE13C105F21E92D2EE620354901733A85224074596A9AC4DDBFD99D25ACB7B061B43391D11E11ACA187C4E676C3F1EA63C24FAD29E9942093E8365322C53E8BE210265BDA92EBBB56C60A22DF0B5CA1D11B22E95985028A12D9A98387FF9524D052508DD222053E90C3C1CEB29A5A09F3CE797FB5EEF37FBD39BD94B7D5C65870C89C685B53CE2AC5613B2C9BCDA60CFFE7FDA77DFF7B3F6E2CEE760DAFE84F4641E7F72F7DC73FDFF458A0895E63F941CB6976654F6F0D0857A7B2940A215D1A564B8BF2B432E70E01CC9754E8E620D34533030700BEAB1AB1E0DC0914148A206FBCF6EA4BAFBD7678F8F5B5F9795017FC0C22E1928A76BE5E8D707BBA962675BC224C5407674B955427D38DDB452F27E74797BC97F0D8A80BB6ACF5DCE85D6B2C033BC73AB91908BA251BAA45D06B439E561EF10F69C13CA43C1C088A0148D74D5BF8C6D4AC6AB78AE3C591AAFDAC83F7D2962BAD8E9CAEE2C636BDD2D0204C3BD595F5F19D85BD5ACBF455C77033AED54EF9A26F654781823B548716649CE1B6E541314CCDB8DD8CA79420B3C7681402DCE8D0D4406E892C2B1DBA2D43D00B9AB1ECB545678E43E2B6E3C9B3614E3C6F564A75B5D92086743CE8799560B93E346D96C79BCA9C1EEADE01EF3B02CEC2806E2CE5DD426475966C7C9E508EA1308C4643DADD1B54844D16E62C69D4F66A9AEA5D7CE9B90F3DF4D09E3D7B98D19DF3D793509252A22141D8C3E98EBC2370D10A772BF4CD0AC6AD94F841CC307451CEBB3F902A901459324C458A03CF8F4647D26F3FFE2D280A72E9146E832074C6C7C7AAB5C5A5A572AD2EE2B129CB2CE4B2F942064F51E4100FF09C4EB72BB8360433A0DC2BF78B3D49F61535C24DE7B71AB8CB43089D20EE74C2463B42E4DD75200E5146A05C531B8DB85AB51B2DC7EF0DF060DE212623DACF41449A80BAB652560977D1A12656384794C28F8A8D8C29CE6D4FA691E05904A2A19FE84961497673BF569B20490D4BD9389CA2436F14CD178AF7F287F9B1F15FE8F1E2D1F794E648B28F9286F15FCA71249F46D2D621F72215E8E10C90CB9E5B00516E127D3867793F7B8B2BE0B84F32B145F138C9BBC56601DE6E6A6A6AEBD6AD34EDA40CF66B9BCC3501EF7AD7BB9E7CF24992C5E4A027B7129AB777DC7147B2C901472628D98E729159C5D264128B09C11D7AB364E7D143B132E6683CB743805E9BD2E9E9E964EDC57E3FEFF30E05919549B73B6D59EF1128B9812E9AC90B2A7CD05570A3C181B1DAFC02DED8893D4829E0F4F2B506738D4A9356731C82A1998A6F058037E88A7663A6042E9AC3AA6458B1D39054887BCE529153A04ABEDFE3A2C1B951A408445605503B25DAC18AB880D1230B42450791A6C7888025A3982FD7AA387643B63A911D82ABA6A520F2B2CEB00BDD50F642C98594C820D23345AFEB83EBE2E2082237C29B88B941D594F1EBB6241DB8834A7232930B86B117A5FF725B40E8971CD27B67C24166B8E1C445A6B1E12466AA48253B92B28729179961132100B2773993F2D57BD51DEC4337E27A29FC97730720C192893F735F2C26FF673084C207BF7CDBDBDEF6E31FFF183729F72F6127304780C99B8AFFE2B0F10A08B666676789CC86163FD7D572DF24DA8907635B6152997D09ECD00FB511E7A59C686B0CFD9AAF035EA85428566B557CB363A35944FAC71FFFA65C2E2DC9B11A8B60C0C04069B1BC17C7B6B0B8B75C5EC0976E65F44231572CE6ACB4AEE9B81ADD6EB76D77DBB1DFDDD7B7200EA3B82B1483E2CB4AA0F9226F288C45B32707979F23B98111FAAA14671529138456BD0E73F3CDF9856AADD97011A245AF4D1390671C9FFD431FFA10353FE1928264AE2E4EE5B9E79E8B9601CE0321717E4F743CC923EAD3490C0D2483B8D0E3B56A82A44D40AF83797B700C131313279F7C32A27E7A65C46D47D14BDA4254A680DA822C187A4C1C24B1D7E208A9933B75B720EA7F928C9C3DC53424D4F58CE423BBB0C9F0E4A63A2C37D9EA4C5AA9245E79A3E21DF1AC646A33F4E30494E5C9093F244CF141706FE031D56A950E20B18E3F53649BF413A58DD206A02036AF7EFC13BD1ADC3FCC629D9C5B9A1FE6F3E250C42B35018A249C67D4EEC71E7B2CDA31D4E3418403DA6DBA0E7BA28E39E6985FFDEA5778222A5A6278A68F99323CC72FA86A1BF59065763A4ECE4CA1088CF195B9EED0E040B922EC89E191A1C585B295DE17F657445F77912E818A41F41A8BF62548446A6FE6C34451774FEE4BF1BE852DB0646F152BAA8C1A05016DE8DB61E4C99A1AAB3AEE2CF010588BAC8D5C3EDDACA3AC19A8D71ABA61786EB7777971BA65C9DD4E94B114B4451A1DE79AF5D75CB5F19A6236E7D85D3FF40786F145547434C834AD72905E7BFB698264C50951ED72FF3B5C9CF81EF91550EF71FC86DBACE294AE5CB912A103F452213EF2918F7CF5AB5FC597CB0B8CD600AD46CA42C64B7DF8C31F7EF8E187D97AE3362FB81A3FFAD18F7EFBDBDF46FBF577F0E2D275684993B94C1C651420C4A1FEE11FFEE13FFEE33FE20A44DC46B726F14D9A0C4F39F2C8237FF9CB5F42C29FC999FEB81FF12238030452D9E02699333939F99EF7BCE791471EA11071B2DBC761871DF6D24B2FB1A6B9EEBAEBAEBEFAEA836902128F12CB44027DF46E28BF90781D284504B418757F14A2EA2ED89DCEFBDFFFFE6FFEEDA3A9B411475DDCF2664A191B1D9A9A9A2CE6B33854C340D911F69C506233E3E0E6E7E770FF88E621393D9FB38AA56CCAC42977C2A00BB1831B537880047E09A4D88F2190440E75281290D0EC8C7B8D61D1F45010CA88D6467E10EBCA68E89B1058CDA6B777BEB2506D561B41A5D27103143A91485495445E130E58A6626359E2D82F431242F7C919E19F393794DB0C247D2F72BFBD7BDC6B468FC7AC5FBFFEB39FFD2CE5E0B29780B3777E67B658FE30E527478C93449BBCD3D8C78DF745D08A460CA77512D0C05F718414A4A526424C284D0A0F5FFA8D37DE48E52314BC25A14CAE30C6E6DCBB913394694ED888619CC5A11446284CA6047D3A742A8746D94A5B022F8E13889B1F61FE55575DC5F510F4C12BAF5AB5EAD9679FFDF297BFFCF18F7F9C8EC771E29CE0136DDAB4E9BBDFFDEEBFFEEBBF9239C28572F827BC232129F253E1D48D8D8DE1FEA701705A30A9165E2DFB69020E0EE17E46D545B3412280AC28228BC5AB9D78E2898F3DF698DDB50D5DDC0EA530D12B919C32C3206DA59A6E474EC99D4EA499BAEFC49A9E0E9CD6CB9601F49238422F36404E59E0C45127947B2EC900A2180573DCF57C2F86E8BFEA4845D3FB58D1A5C013A335F55ECB907E76750E522E442E88165D6A2FA71DAF1CA6454D9366288EDD2BB92FE53F75DAA7BEF5F56FEDD9B1BB5B0AC4812D0F0235972EBA6820FA8E81562654A08B12411ECC0FD41B35438E03B185C13F78D7CF036A025A2184D9C938A32C5E32CA9399630459D8D4C6C3504CA148A5065904F393D7A74D447627FECB448A906068878453854C90DFADD34B920481B6245DF6E8A38F9E9B9BA356BEE469A4F83F85974E38E104541238542204E59C34B2D4E9B288501F7DF4515CF3F825D572921F82B61B278932291CB57DA46E5778299C3A5C8DDDDEE7D5E58CC4A97E0CF70852F199FB12C34DC543581EEF6BB5B37C627C66760F0A7DB45A56AF9E5CB9623293B51488A358A8A6E1A10190FCDEDED8D7E5B85EAF5125A7ACF9E99499C9E2D3C6A2D944D88D4347788444832351392034414C9A005F6A1C38A807C40A9364D1E24152F42856C478A37CE419106511AA541AF566276CB5E3A5BA5B6F8A24F16EB7874C45D8408EFA8088240265A7E07A22466B16D0FB495EEED8434C79FC3D5B0C49BE3CE827FBD34264B1CBE55DAF6254D17D93F55F88779897892B186891918626904E6EFDA40E2040CA9526B41FD808A5F78B8F73DC71C7FDF4A73FA5A49AB3CE3AEBCE3BEFA4C7A13193FB9B7449322D92243B2ABC8D1B3772DF73AAAB90135D85935617F348F31A23031C7A1950CCFDC0DE331A2D9511D0CEBFECB2CBAEB9E61A12E8647D93BD4F99D1DC8388763B9747403F78E3F53E90E85094A4D4C6A778FDEB5F4F74B390005CA4CF0EE61D62EE45BA1141FE33CE38E3BEFBEEA3EEADB4157163AF59B3E6D7BFFEB5914111EFE38A96F7F5A8022B6521FAFBF9B3CFDEB6E5D68B2F5F2B4A8C7069A8067485AFE6A8C304E9088E106D505475337333821D5A34F2053D9655919487239143E129F2719F9872CA0D5D5AE162E67B03C77D18AA816861162B866AF8812FFA62F5DA0F18100429A14E65DFD33A8112425B814003C3D170C378AAA76754D1BCC5062592D392652B2D290043F4935406ACA1C5CE5C71A8E4C4CE125A0C2253CF4CEB19BB563533BAE3347A9D677EB32660CC1EF78946D89D4DB629A71210AF14AD1FAACCA7142F32EC280392562CEFA6FD94010545C968C38B536A001E73FBEDB7DF70C30D547BC88D6CC9B0784D9A8036295E99FD8A842F49BDA1F064B3958D1E32A6718590CB8B613EB1D313AAE08A5AD294719F346C6A6AEABDEF7DEF030F3C4056141FC089794C7E43CCF68875F01BAA37FA0DEF8503CA9CCF473B13C74A39E694478F400031A2C0178EE88E1747D4307674D5AA816513E3F87861E8A38D8ADB3397B5F09D497280AF1001043949BA5D9B72F32545241AE93AA8B2E88E1D05DD30125E7F34FBC4B044A119AE2F5153805B070D02C79605478E7836507531A18AACC5323EBC1679A61467A250B1DDC08F14C7336A8D70AEDC5D5AAA55CA555C1BBDD44B8504145E90FD397891F7BDEF7DB84B89221F5E6110903820DA4E3C6BD7AE5D88AF714EA8EE1A2784A037F42B9592CEB464E92C49529AD883BD095A499C094AFCA3C432CDAE76E859C1F8036507B33B9BBD19741D4A6B21FA046E5BC1149E2CBFB8C928BEDCB7BEF5AD8F3FFE3855514889F6417C5F1A186119B2D3F1570AC972C7661294B42229E83A323282B7A06F4874529361F61451CD79928B9B8A0068F9B2BB1FB1FF8E1D3B983F9C021E1475601D8C4322BF19EE705C786429734A2B4D2F6179DA4B2CCA71D828AC5F7CF1454E2248AAB48369027649E13C1372A2143D4A79A2D809299E7D6D30025126A64A9A28A15175DBB1BB819DCEA4E2CC60776151C717676A76E021A2D6636DD21AD966EF121E7F3CA3E74E0A21D41084793E6E077C3F6A0F57CA86BCD46908BFBF0A6A43C363C45F750883088D5F343E4CC5ACF955A91775947B88C8344C341F6CA713994473AF097B20F00D846FA6E929E94243192C968E7DCBEBBEFBA3EFB4ECB699D29CAEAF6BBAA4FAE974A6B6D42A16B3B5460B65FDFADB2ED978E9CDAFCFAD7E7E7637E8168E2DA39ADDA02D658C40F5A5C6AB61EAF8150CB5043A39FF823AB9E21A38E79C7350DE91C4648E13FC1751369A838485E99AA8CE9F7EFA6922DE49A684D05DC8DC44DBF1AB5FFD2AF42A5DC8FE230F27D187D076C685C45460BFFD879A20D146E3F4682EEFC7072171CF6D4870CD9F76DA690F3DF410CA74047C44CAC0C15B72879264A76D42710EDA86D4F28F8C7E0AB0E13CA0DD9F6CD04BCF4ECCF390488F0E0EE2B5E37C0A89D95D50C6EDDEBD9B70D9962D5BD6AD5B974C624323170D0232825018BB9E3B353972F8E1871EBE66943829EDB6E870303458324DA11E7543EE956875E9C15C779FDDA7EA084F82183C45C25F510774E308A59B0751A3F70E4361F24AA28DD0BEC0A3970E233F087B7C733A4206BD871A3490B4D0D754C8C9AA114452ACA4BD20DD6844D38BDEFCFCE2CCF4DE7ABDE5A3FD8C36462C89E4D2681FA311C938D276BC22933A803E24657089E08627E394B934E88064C7479238E45EB8F9E69B116BBCFDED6F47BB0FFAAC67AFD2B19D3603879538958BC4312E62822ACCCB4FB602E9576E24871721033359DF40EB9BCD4646255CFCC5999A78233C92562AEA0944D6846EA0E741C223F1A971C6F05762E0815E7D32DAAD5FFAD297F02C3C059525775EC3717EE0031FF8FAD7BFCEE58A3824FC9783815CF9453179A22721D6073A60BF8209E8DB5EF42FEA577C6A2A3E887BCC229C27C7213B8A3432FBF77E8A8703D1DC139BA403DB6D1C093FA04D002F2FA180BE87573483ED598438301C242206C1FA6757E550763B3E4976D3323A4E877CF7AF9F3AB2B57DBE15B7464627B7CE6F4FF518FBED61D35E721450DE75FCBBBFFFC3EF9B29B3E3B6F1543D1C15494308DF738850F466B30EF8BED256D46A6BA6EA83876AA0B770C5FF1923DB0E5A269A501EAA875095D510F56F2C5AD08006AA9335A35C2C7CBD2D198291D2F2D1D2D47F6E7FD25035D7B7538A91CEA65A5E4B4D29CD764B72074483C5B46A648DFAE2AC887207C1C8F884B97B870DB29D56D138FC9B2F7EF1CA7557CDD4CB2E68A1F46ABDE192659271BF6F20A56310113237EC230C417D4D7085D026C285BD76EDDABBEEBA8B0C5F520F941140AB3A598CC9611BE27664E541989D83C308F2A87E3089AB7EFB0F479BA8F27C3F867642FA1C1E20DB97D4CF79E79D77CF3DF7D089948E9C2CD6496E191CF9DCDC1CE76D272B87B8AF1741104AC9835ED781071F7C10EF42F60A5942BFE1BDE075296088AB99189B71D2497ED12D8F39E618C4CE6C9429928C40A154B08E3A7ACD6187AF42809849A529033D651A78A2D2637D30D2946CE793A5839A806C1649EA462218804F88CAC0157DF7C08B71154755E68D4038A4A8BDCA67843A9041011B43202BA1A1ABA994D14BDE37244DC74DA12959553145537025ED0656BD11ED5DF41716CABB77CDEE9D5FAA376CA71B8591E8F72DC5FB686DA47E3705E8F3CA1D5013B06786D8C47096715A6FBDF55694F2780A558D11D6267D4EEB92140387D99942E737DA04D0EF5783174721428E45A23CA3341B627D4053E68B5FFC22673771209A340191DEB097295949CB3D734854D190F66BF9C2FE13DA66540CC166D0A73FFDE9471F7D9412EAC93FC3B91014D6A385480604DAA488E5D9A5CEB10AE807A229559F3C45D06793C5515121DB15575C71E79D77D243E1EE25394E0FC20912C4560B0962383C1D573C1168B3C500FD98300B71E8974CC7FDCA414E35613C48DBF2809A40EA11085231361173B1D39638AF98368ACC2CC42128F4D386E53AAE8410DE52101F090EB51050FB2955D19DBC2647302888E4C406E86D580DA1783B50443FFB08942896A120675A61BB57E20C392303D5D88811E7A766602E9D353B08D464C80EA535C9A8CED6A4588EE5289D4E054E24DC4A96D6EEB651074825886B90EECA4528E07D174B155F1511827400B605CA80AE54157FD19F1A999C5E980E245FCE6819477315D70D42390D9227BDF3A8774C3F351D4058D7A61BB97DEDD4FEEA931FFAF2F57FA38A5458CB970EDA11888566D226A06CB137BFF9CD3FF9C94FB8A01DA70E150042E92BAFBCF2FAEBAFA7F9C4978208E33BDFF90E2E27B2FFF07834D17071222E618C92243F2718C44CC34440494B88FC51544F4A66E211471CF1C20B2F1CAC84F6551E8AF206F12970319070E0F80705C36948445F06FD84CEA48B82303BE5E931FEA62C068AFDE223E0F1F8A4B49289248DE00EE939CE19C5BB73B93B6D37141A08CB7EA38693383C70E8A187A226C01F2EBAE82204B6E40BC6C77BEB5BDFFA8D6F7C03ED6F4B58E56DC3903369FDB0C3574E4D8D4F4D2D5B5CD84D08CBED8A5887DE270D56B45E2210446435A388232D1DC7B68C3B43F214395464349C9D38F2A2D8479BA037ADA245B670856A083EC48B44A3571247C608C252A64635A2A666E01131BE3E358BF68187905F46319AAB37E3F29257ADD66767CB337B2B73F34B95A58ED313FB2274DCEF248CFFE21EC6D5C6ABE795DE2184C0B862989E09FAC96AEF7EF7BB9F79E61914A3C9DE29BCEC58E642BF9917C9885729D2E63E33E465E691704E3DBEEF3BEEB8030531217792D7D0C7A749BE55F250533099A2327C35B61C4942914143DB86D40C954AE14AC5BD77CB2DB7A0C5FDD39FFE147A0DAF719DE1F1B81248EE134D13BB56712A38E6C66C1C4C7ECB850EE41D927A9D21C889C424B8BCACA96481A0097E68AB90638A36098740180AD1FC53410065F1124D3A9BFFF4579E5836235824D105B9E286ED98837987E8D7640A20C126F238251F1C97108E07D17AECE1623650363B5157C0FE3CFCDE1F1C339F77661F7F0976819E4B794AB7F09163DBA9C520AEFEDEAEC39EFADEAFA009868AFAD37403D70B5C2DADFAE70482754EEF51D578B9E0A5D0FECF8EE8C0D505338B40D2C52BBFF3C4B717D3A59F3FF98B999DB3A2B58091E9B471BBC95A5A117D24B3F0963F7EC34BF985DA776645AFB411809352B006E476909E8FCD5C2EDA0BD57FAEAA5D7DD3DA1B6EB9E5B6B25D46AD635C1CB97E282AADD092F1E595F1AAED0F6D137CA82A0C9EF2BA8AD5C8A595D27CB4EB2BBB85C5125A92FF1A3401F41BBB921B90CBF8938B965775327783E69FA100055A59139016A72D499CF99436BDDF5EE07EB494FF46A0FB605E94830AD07E120A851E497CE3AD3FFCE10FA3FC652846AB822216279F7CF2D7BEF635AE95610B3559AAC9255CC949632A01AEAA2181465E537C4C4A79C76130B6233CC7A959071CFFBE1FE82E28E8C5560D7BA029066E388CC7A152DABE7D7B141281170C0DA4C7278656AF5E6665B4E1910109A19E17361B0D11543453BD89883559F121E86D7EAF9F9D0D84BC744D787E542592140F22378A3A61D0C503A5B8236A13A45895635403862E0B94A9E1320E550521A76C1A8A6E6829DD34345D55F458D1213674CDC20BBB4124A9D9281EE87475BBE3375BDD72A5B9B088FA60697AB6B25445D340686ECAEE602C09BD38ED7E69B6BC0A695112D00BFB1F9C65B4D42835906428F419DF2091268C3A83522199B6E8551432DF91DDF76879A03266A2374A4B25ADC0194490A8E4626D44A790519CECA3905CFDEC0FA1F581DF9376813E4F27A10976CD275D90D4EA19CFC5EF519552EC1AE7047F20070B31A6E1AC22CEA2841C7AFB5CCF42061019131C7BA71A0852B43C1E2639A75E4982B73E118621F84243256F03677D70AC0CFA6C51ECFFDC2FCB90C43A89956407E6D7240892EF912D7A9E5EA1D14516664A81E5B5EC4BD9AE66077E781D803D0A5F981FAF96F6228C2EA4337F59D3A6DCDA4D596838EA157AF0B90E08BC1415027062C81F7A5865EBB62988B6A78F06FB4518F5E172096D02F82CE4A2A1A656CEA58B61C3E95CDE850180EBA01067CD465ACE2E745A69DCCAE77FF1139BCFD8E0C691F679DDD95B2CDDE05633F5743B656B5DB8128AC160FDBA2E8A0D391D3BB62B81944BE79A76D34C996ED8C5B737A9E5F76836C47ECE81E6755968296FBF632A7C9BFFF3E3CABEB998DA04DD7815ACDF218D437C360A65D575424A7FC4894DA26F4236EF7CE73B7FF6B39F91CAA482419A7C169774304B3AE2854C66A691FDCDAC8EF43629579BDE02BB40B9CE9F16C37E3556072F958D19FCD1F2C38DF9918F7C04E1D1EFB630F6FB7065228D87C0070D9E47087D78419D0AE344832C0246AF92954E07B3C380500B550C90C1C14D0F4968701B6081D4A57DD49EFBB8AE860645F206E70BC23E8F338A451416D6D4E4C4D1AF3B6C70301384DD6CCE8C83489164427371D803C2A148AF6CBBC24B6BDBED7E48705FD2483665A27CD7D4589170581DCF6FF97E47940B0B9881978A6425D235D930F17D2B9A2A4BBAA38908B386BA01AD044DD1155953408E75530E0D4D4D4792ECF9A1ACE56575D475D0C056BBB65B6F762B351B35C1CE5D73D333E546ABDDEAEC139AF47699E586993EF793CB9C9D4DBD6B70F0E410A063A8E5B2DCEF4F002F2F04A349E74E61AFBEF2A8F8801637A5C9930D419E74023E9B376F5EB76E1D2E82B56BD7DE78E38D494D20F7F9FD79E11E7FFCF14F3CF104BCBC0B1049435284F4C89CCC13F75B4212FEA5E8021B3A9C9F03890C1C1A15C72418D4E052A66035A3366E8943334338E884134E78EAA9A770D173490EC9F43FF9933FF9D18F7EC417C477847B98DA039031814F77D55557DD70C30D888C88EFEFA4934EFADEF7BEC7AD0B489D400F7F1D75D45168E67EF39BDFA4BBD0BB8813954DD02FAB8913157CD2CB4BBB7FFB0FBF144E842770E7995E5ECF0615A96335C186A34E3BEAB9D73D071BA15803B738E174AA25AF2B5FA92DAABE7AADBC1CC6765E393B3E37B5F7A15DE958ED42A0060244C90329A719497E346274DD7333686134B62C398A0188F4E36188164B971CD598FAB5FA4CCABD777499B730B34A824A5B76A1E48D7497799D99DA1BCF79E3CF323F837B406B957CAB6AB68B8ED2800D91DE91E2BB25C58F1C1F6F2347418C78CCD045024FC7691706F3F57A67504E3B7E27FA84658F36E15E3097E4912396ED9EDB0B52305C9BD44199B966E758DD88BE30DC706AA5F11CBD2F5284ECA6A015C829F3D0D7D3BC6EB9388BDD29C976DCD0033178594227A46B49AA32073B39B469E370B3BFF3CF3F7FD3A64DC71E7BEC2F7EF10B0AE41069FC7E5CB64909C06E12CA4DC26F56AE5C4906F17FCB8753FB68992130A26C313623B86F15E5F1D31C2639E149431C6C1DD2162673E49501702EE8212E098ED8E3064BF9BEDB2F08E236C228987A354A8A1A84E268DF0B0C551A192DAC3972E5A1AB57940672289245665C1CF04662539DF63FDE861C2C048D05CF8465292A0A4A45D41BC8511CDA9ED770DD7A10BA71D0C1BB2B6AAC09D7508C681BF501EA0C15D1BF2A1BBAF85517192222315416659308330D49CE286A0AC44AD6E238AF4AC55A57350C136D9B7ACD9E5FA8CECCD676ED9A9F9F2F7BBE52AFB763900BF952BD818B209255548C2144FB22ABDC4091B63437C6213C7BEDB5D7A2004ABAB669B17225173922F0A909F0E2C3324B07D3D8BD8A10A12E3704DB69871040C095DD53A83673EFD01ED84F13108022CA1D5415385A8A2D277BFEECB7AF384C4D994854574C16036E00FC950AD0B8AC91C35F044F48AC53E530271AF1231C7EF8E15BB76EA589DDAFA98BA0EC5FB3E685175EC0FB52EB66DCB4975F7EF9962D5B887A88AC6C2EDECEF53E682D9D7DF6D95FF8C217A05F654A3087F63F259E128CE2FA3B3C00D11C35F64BBE0296F23493FBF5FAE0035EAB71C01CF19CFF4E5F7ABE95926B5A084D5930DEC0A93A8C797069EFCF215821747047DC84AF20485FA206BED9BAB935EA1F3D7FE3B3D916B40403849681A89E0A4183521374D0E6AFF615DC8B37A4DC516578BED936868C4DDDDA620D0F58E3BD7DE7CD4FAD3C696AFAC969BF5B82F60CCE2FDD573A6730D62AE9DBC06E8B165AE9A511C7B05337BA9D390F1EE8B593B44131E5B496B61BDD2814A49042DD5697D002CFBA7A550A60B33F06C38DB54B82E7274A6B5EECA5A321DB282F6BE2E314AA796743C319D06149EC1A7C590F3FFC30B3F5B1BD4B909670FD89279EF8F8E38F73650C2371CAC6211A349480636363F83D2D30DE9EC95C4FDA62543180173FF9E4931F7BEC31629BC7D329B738C9D4C69963AFF22AC94945EB933B30FE7768817D6920C469882A137FA5A6BF383C5CC338F87FFFF77F9F9D9DA50003C50E69004947F4AB2438F162C6C15307432E9FA6E2470AF2BDE10D6FF8F9CF7F4EC2E188238E78DFFBDE2731E10CCF69DF5853500DE8868AB85E30C429CAC850696AE5D8F2C99181014B446D85170264E965343E241C491988D841EF4305231484149473AA6AF4720EE3D0F1BCBAE70B0791223B8A2A692A3EA7A46BB1A6C7C23BA448316E0505BF8F453E9BD22B9F8CE8695102EA205992AC879212046A0C3905F29132202C8E4876DCB0DD0ECA157BF79E85D99985E9998AE7F97F71CA47BFFCD0C3027AA035107AA8374DC324794D9E07E8FB827991D182A04546E901F80D3970B85915F7876117047B57508AE12266A8C87E0948C0256E9F422E4BBA3517F4E2CF2B56AC4089C62E3BA66526CF3EE976728FB0033D093A987284F22FE9BE6415257B34422FE2CDC5D890A817E3F17363E4FDF291C8718413451D8428439CAC280256EC93653E3EF9151DDFD87147BB9DA8BCF1FB7BEFBDF7ACB3CEA26921A14F494A6C4D33071F6D5794C5DC7D2CA99FD858664DC05CBE49B695DFED43B61D4E08355C63A7C7F278785A5A48C9D04DC3C047565656EC29E8F9895F1EB97D45DBB9F3977A03BC153AFC590029091E0B0569FE15002F6AF00D7F282E96ED861A2926C4ED5270E6891F7AE0B16FC58A9FBB2ADBDCD182FB33604AE94E2B3A1FB4DCF2E8F3D39D9B852BFF8875EA79DFFAD2DA0F7F34E7E682A21F3B4E3D8C074F5B595939034DFFC8DDC7E73B73CFEEDA61FC3257474BFCDA0E8CA8B99F1D921B4E1DB777FC1FBEF6CF464A970209771B2D5DB1F85BADB23400AB6BF0B128BB5B931EC86A7977A9E91951685893AABAB7FA090F8A9073869BB72F8201E940B0DB52360EB9DD49B293E6A67548E6020923E8E303260AE496A8747A32CE4F4524D4B6889DEF5C4F8EEB875602410A027371BF4F2F15D5D3C6E41EDA07FC9031CD40908CFBD71A3F781549CD0B92F61417D0E006C79153AAC87E056E880E899596E4C9AB143DEC3769F4A19DC221749A3462ABA6D7811B5322E0964C7EEA7F0406C49917A9112862B3D6116B561E71E4EAD280254B017EA32B3DA8E5859C16C67B9B6C13BC2571FD533E1F85FB887954D754C1451A3A51886AA013C59EA1D9C26BA4E19F640D918F1EEBAA84BA4131225546E5816A40B42CE8E1819E1AC01B055A188942332F42298C9039A72879D518C5E1C49222C9065A871D3B9ADEB3B8677A7E37FEBB67E62F3FF2B13BEFBA177A95063184B97C96E8BDB8108CEB38784D50E3143CE099679E21D38126911607FE4AD0980A46F0311F78E0814B2EB984243BCB7A12F1241AD855C20C2A54224B1DD3385B947608D18E52EC81C855D0BE46402DF589B28910822411395EC9CB448C6F84A1E81B5A7CB40AD93908BD7C5062A5A6885C92AA6F3F6F49B2CB0DAB3A7C467C0ADA57679E79E6FDF7DF8F7385C378D39BDE44455B780CD5DF5375182FAFFD0262CC204DEA24ECB735251F118D8DAD10DA42A841F1FA34C3D4BE98ABFC78CB9195C065D8AFD404E48ED80F0C413FA7F0B7FF10DAC5C11F7DF4D1CF3FFF3C4D94DCABF10D7443AA37E234C07968D2467067EF84B5BA5A8E33FF38E0CCD84EB13974FE9B42352AED7C69DBEB5A47CD1CF1DCDDCF83AF1662FDA24B2F7FE0B14776BEF0EBA970C5AE5C05CEEF643590EE82F4E2E83CB4E09ACEE8F8F0FCF98B3979A579A9BDB8B4000F186FEC4E6D8FAADD5CD709C2926EBA66ADF3FFF1F626F09A55D59DE83AF3F4CD77AE5B23F31C7D4693483486BCA7A6CDAF8DB322DA82D20E08C1011111445110D0872809C6101134240E4934C4D6A76D6BDAB48808028550D4444D771EBEE97C671EDEDA67DD6FD5A94B552524E9FE7EFC8A7BCF3DDF3E7BEFB3D7BCD67FBDA70A1D141E45C0F9DA0A1C74E14BB6ADB6BCB71F3213086F0334393C139CA679FEEB2FF8D65F7FABBDB8E639C11797BBAE563DA3F7F6396BB23DF80CD8AEA5065A4FEF4D38D35A3B3AB479497F254C36B61CB865BF624FDD75C90D6FBDFE42181627318F8361091EBE2CD66FE825963162F19571C351427225AB0EBF825FA7EA5CD64228EB816816AF201BBDE8A28BD02066305A2AA939E18413D03C2D3B218F8F12CFCA1323379475A37FFF07C524C1A5E0DE2245B3D9C1A624A9955CEC89879F400128FD9450815FFDEA57A3C975ACF97396396957279F7CF2739FFBDC5FFEF2974F3DF5141E7EE198519437BFF9CD5FFEF29789CAA84FA524FC2DD21AEE74BE06E49915F3A0F8242469822F62F3A689B3CF3CED9453B7E96616851E72339DF4A95862490085264B4445294361F1C175B20AA9A0A62F2B421E884E34619EFB908539C49ADA5735C530145324886668161016A961657842C4AF0AF2EFC2FD9A89424A9C69142B718CC2400A93388865C86B8A54B72AD3A80D002A049A6DEAF53851E6E63BB333CBFBF72F3CF2C863610C9DB69B664365B9E278AE78D9549CC2BBB92E8A08858B9C8E0ED5BB13F7C1F7443A0EBE1ED2D3F94F78E87143C817290FBB5D72C130173795B35A4F3DF5547C55243F48945291140C1561FACA85175EF8F77FFFF754F94C4A68B913E4D0B9A7AE6364ECC0C179D2FDF82B17E5B261CEED71E019453AC479297C47E284586A99C6D076C1834BA7166FA693CD25D0141F2E4756CAAE2D92B2B4ED575F7D35927439A2C574427A1F1527D3BE31E6075939CC59884770FC705D32060CBD432C09CA59A7F08C9AF37FF143F206C79C9E9EC65D95B843A79A40509B04BF2BC7FEE71B10A5E6FBFB8101CE27958197563F266F85E9EDEA41D4A6A101E60510983A7C398259192CD376BDF1A9ADFB560ED5156DE04315FCF69D06EC91949B82711DE603A87F664367B65757DDEE491B61665620C4290EDCDA850EF297C05437367A0B79235EB8BE0EAB5DEB63C22E119D06BA00B742DD9EE85EBEA03B5674A30FB9A1A9A26B9421EBA11B99BA15A7D1E9A79FBE77DF1ECF8A2796F2E006ADDB49E1D6B812830C9B7AF6416A262CBFBDDADCA0AF7C7245F4EF759A63FDC8B5040A3AC13F5069056D4EB9771E717072EB13A809BF353AEAA40CE1CFC8B0EEBBEF3E3485E9F4E231C6B38A37E4C31EAB3074E6E0AFE40C219417AA8F61B141879011768F93D54DEF914D0AF88FF30B31A766872DAE854096366FDE8C6B24D2C08B37DE78E37BDFFB5EDA2EE23CD4FF0E371667FEBEF7BDEF9E7BEE610FE4BA0FA977749E39831CC99341302910422B65D42FD173A538FA421808941E410C680A10A923FB2E1C64326CDC387EFAE9DBB66D991E9F6826A91F85032422A56061B6D560AA6649403E5996017485A23A690E9A227659913309521902499414A4AAD215B5C786649A4212189A881628A2578DC8A2C09F350514811E24C9851229923462E4AD6A9266411A87910279156D8266734B81ABA7E7124A1C5BB404EA04AB2BBD5F3FB1E7D0C1B9877EF9B466401C8169393431F230A2A14A290DEC892B03E2F399A314054A11C1638A879BA361C4F8E845127827E7BD901ACB87920E3D315FCAF1C201D12221772105A219A110393E2A0E482D743FBE17340E188B82CBA370047C0AD5F752D88D7470AA36A4202A314A8A41957BED52974D6AEA4B10A47CAA58C5A65802DA4654714247199F85DF2587159E5A12FC175C70C14F7EF2133C6164EEE017711514422CA740E443E409CEE7610981A7162786E6C5ADB7DE8A73266305F799AA4F3FFEF18F7FF8C31FA603C67C9C1D41EC2F12CA6C9146220F7B671EAEA53C3262CCD2681D45FDDB2A8CE0C8320EFCB7A6CA469C1BB6BDEA49E1DB8364430C9F5150D5893EE89B4DD03E0835989A6FB963ABE9CA195E7C3E4CED9998BB776152DFB412AEC49907895C719ABED7BFE663975F77DBCD809C373DB97DCFC3C885ABABD057506018A2935F24D9578F04FD20BF0D6A9A338803435AFA8BEB3F7FD5A73F3AEFC6C6A57AEF84015C95A9A9965C1F3663A37D4DAC831D7DCC5590083F2D3A6A8559B75AADA0895CB1ABE4607CC39B5FF7A52FFD0554C6C059925E0D4DF5B4EC2B07836E94369A7967511985F0E2A206A26FC1E77D98AE588B512C4749C15B280B1E8EECD74D8793FC90E4A3E05416EE9B4D805794DA80DC9F22CCD42384B8DB39E79C83E79FDE38657F328829BD022A0BA0AC628A6FE1CFC86A29528DFA164A293C6314B778E687B39CE957C64779B618A5C7FA507103C72D8899C0B08D2B79B13EF6B18FDD75D75DB881E598139E6D9401D75E7B2DA7CC1DFF1C9200C01DA3D40CCE19A1681F0DC2994B821115879E4EBE52C00A2197540BBE8334288A1BEB75F3B4D34F3AF9A42DA3AD8665AB61E46669A8EBAA900401EA591AE98C0CBC43060195D8901B9DCBAF840F2B978B3422819222C085F248C6532C678ADC115E2343D235D08C54D7B23549007D59C1BFE6BA8A9220A7B2353997052C3BDA04A92AFA1BA4492800B5AAAA5C772AE342D196B530CE935495723B8A70C7E3A7F7CDEFDD7368FF81B983FB97D132105EA038D34D83FC21E488E74AA8323BE06C48283C06A432B054A70FBF30D6EB052440216350E0E3CD8419CB99E994178C6F88FCE694C2842CFEE0C183EC1A62EF7919F396BA23F073CBD9410C1547B28A3B8591A5990FE1B1B8BE17865E14BACE4105FE81BD58449678CF0B5EF082EDDBB7A340E2CA1DE2DD5CB943795624F97069A4A951089A20FECB7944EC286376CC6C144A5D1FB8C930816D30A235DE76C71D77BCFBDDEFE65C2612031C23214710FDC0CED3676691F28B66F7E65105C3BF461270863845AD891084A713627712A0732AE44F9DF11178E22679DA6BCEBFDF4B37FBF029D4D015334A41AE24EF71C05E4DEE884132EB3D3303B75F4FC095EAA9E957ED4A3F5EBDD155B38A724DAF626E5A09D25A36EBC2A4A1CFE3BBDC1469731F89131D2A9F025786F1B0D28568BC211D3443397C4EE63DB2ED7DF0F4E7E0B460EB8EEBF6B5D4D6E07AA499C8B8C9F7BAA2ADAE80C4D7A2244E1DC389C338812483CCAE9AB22667AB2DFFD603F559E533E7DEFAF6575D06F908345736F5500333963F65C5F9A07953D0EEDB28D4908B045A2F570DCA4B218C04DC10F23F94C524D994A79D76DAAE5DBBA84E0ACFCCBAE0131D09D2DF39C6861F3464A97890EFE73E4B44324C50D4199BE0E7E8C0139D5246C671382959994C867C5CFF43244199768899D0ACCA763CC7E4E85FDA4FF256E15E115F3DCEFC29F19D0D1A3229CAE03494D1CB78DD94962D5916BEB9B00809981BA7378B3E3852426E65D4EF4D4B1B9F689D75D6E91BA6C6AA8E859C3A8ABD2C45335F5625B198204A58129012CA213812D4445744EDA2125A12C21019BAA8FACD918D07280C728865D46F54D0551400295A0E142A101E21CD15024A41A32117456745BE12ED02B2E534D54416699626A262A1262B759161A48BAEA2BE9F4609CA1E34149C3CD3BC207FE457BF5E5EEA6DDFBECB1BA4DDBE78CD1BA7371E9C3904A5244B1866F2509319C6C12779408A36EDE6873EF421DCB29B6EBA090ADD04FFFAB5AF7DED8D6F7C232389AF7B439C224DBBC1B284C880D3E7A9EE697A7A1A5F123997CE3DF7DC97BEF4A5A826903307CF0D2190A052C3CE74946433333314EF2DE70B4191E143BC894EC6D4D4146AE879D1538C4CCECF7FFEF3D75D77DDFCFC3C516F5900B08388A88E4A3449B433941B3D88DDBBE402221B9F760C86B5DC14C36065F999116318A22711A7C025DF7DF7DD94BD47328F223A380736FFD1BEB9E69A6B489251E483042AAD7D5DEF0E7611501205F7AD2410112EE22FA37150A893EB18D8B2A10C08A2AE32561A912EC93F7A1775B01CCD598E3B91998005A7BCF58C056D71A0BB0D7F6AF98B4FBFA871F2C373BB06DBC0F84F279C94B4767CE997202B2C5F095E899E183AE1096FFACD85D5FEE0BF3D65C7907A481A6A8C2676A62566001538FB7567E3FDFBFFFB7E5805253646C1F6C0ABB7460EF567A10EDB5E7FF2A2BE1457222DAA0D3E3FBF39A877D5B072C9C67967F59499E9E8AB8B4FC31AF8CABA5AEB742C1D7FD9698A599DFBF683D222E839D8D5CAD5D77CECCAF615B2230914541DAA59B5B1DA7CCD6FBCEE73977FD6491CC21161E0C5E373D272861BC9807BEEB9E76D6F7B1B295214FB61A7E23A7649FA2CFB36E95552B4996884CABF495B221D82CD593A30AC7F1C4B03E02C922F7CE10B78D250D55857A4C9D52AC4B2293F951655F607100424DD8FD6FF4F7FFA53EA01CEA7F4589283A8034D61B4067815C7974C444DA4D7520E1205C0499D82A17DC3095D6B0F4285350CC9D14C1218A78E0BD3500C20636F34AB1393CDB3CE3A737C6CA4223A0AC841D8F30783348B55A19E2BB2AAC1D027CB098EA48B91FB851E43578A84214D255792C8E08C0416691127903257E8FE6AA6A989A22299096180E42F2B3D55B88462340884249004E8EEDA191599A3462E2989849200FF5251D486A1A202AE2385F881005CB1AC11D36A28B2EE07F2DCECD2E3DB77EDD933B7BCD4EDF4FC5EAFE8C15BD02DB178CE5820E645294FA411E38750E909F9726565851043CB2F800C2E0212219006FC956015C8E6A5F7C7F1316EB5414A01B3A432F035699704B7801360773F4583E964E0C5E73EF7B9FFF44FFFC4E712B912C5C418D1908F051F563AF45FFAD29750AD665224BC0472A7947BD3738A2AAD942C0F3C49A8D6A10D8BE614157FE1CDE5A637D45F9376836506474DE421881E51116E02EA7AB46A69D86B9E9A93706E156788F2F8B86F8CEBC208A9D4C7832C159664CC3EE845D04E52C769C6A3A6715845A510773E6C6BC36D1EB89307DD433E2E2ED0FBABBFFAAB37BFF9CD44B1429FA839116E489C8B544D1508F9074582340EF96E307DD4AEF49ED215681378164230A4C34E64CA10A325380D18E0FFB7349D1E5CFEAAFFF2F92FDC2139158119955B03A927C20C661110EE8941FEE4EDEFBFEDAFFF4CC09566B251B5C2415F3C7A0CA05FA490423D6C9B69BCA24C25690F5A53CDD55DB102BE54EA19C06EB44CCE44C19A29C34286124796542F87CD279E38BF67975ED573531EB81E3ED1CCB47346CE995B999F55E6511833163FA10AE201388E99C56A32A56010C20A2B31541D06435F10A7F3115971E637E9192430884733323CA5AB411184C093CFA5A024F5C96745F62B1EC2B9B9396EAD5156DDC86F43010FA4741C13C5D5F7BEF73D0A6833D835174690A820198053454A4175EDE73FFF399DF617BDE845DFFCE63719520C953CF2B21E6B7390D6E886B4E84F8E6475FC3807F122766B1309BCE52D6FF9EE77BF8BBC8B85BD5CEAFD2715D5C56BCC9A604470B9C89AB334171182E9C699679EBAED842DD5227C8FE2C1F37B59863480DA3DD24FA0C826D7B0912420C71C17F2B0B77D4D48009A02850D5E541D6468910A6CEA4415E8409EAC79921C0AB8511DB5E654D590F6624D2E0A0B945C80D641224B22862C694A962A399E50D9C91543C0E2E9C209A3E56819C505685DAEC896A6376D73C4D06BFDC46CAFBABB77CD3CF4F08E9D4F3DBDBAD289D752848E69643103856139060E4FFA3B656D52AE0B31DCF7BDEF7DB7DE7A2B776EA1283F9F6FFA17591BC51238CA7AD96597E1B748972456CB02609D7F9F380B71E772290337D7E542078EF7AE539DD88BBA67CF1EAE6263CB1D0F0A3E0829965472C665E302BAE39031999F65DF20512F29D4DC4C953BDBE0B7F834D369A1DE7050AAD326764CB030E4ECE2BDFDEDDFFEEDFBEFBF1F86F81F431493354BEB9DEF7C271A675EF1816190836C113AFDB49FF8201481F7DE7B2F2E19E910978CFA1105D289CB94B3AB294CC235C9381AF214A44CEE8946EF82B0D258BF5B931066D159660072AAD7352B89FDF1D191F9E5995C64F0CB2393A7DFFC89EB2EFDAFAFABDAEA4280A2C218A956A80487412C28C1A61A04838AE365A11E291A9AC09AE5E629CECCF051FC6B83C4B3EA8EDFEFCB9236511F5B5D5D411B42ADD7ECD474177AF8DC3C16FDCEA6C7275EF6A217DFFE777F0BA6F2F257BEEAFEBFF9860959475242431401E6431C2D0EA5E0CF53B93C2B896A063952AAA065BADE476B1E59765A436E91A23E96FAA06450007B69B693FB2E67B551F66099FC8F7A7E384FE1991E42C6AAA28A302895C5B01F158FF4934F3E490E40D233F0F0105221A1427DB2F850752763D551362A0CD32EA100BE3DF3CC33FFE11FFE815324CAF32CA72C53570F8669E164103235B8EB2DD102B391B2CF8AE04B29C44D2890C7DA1F94649B376F7EE289274892517AF4F1FB9D502A2D3EE8CE3BEF4472A039107F262A63EA63BD4D629F29978615B55BA23D0C4A02CB866D5BA74F39E5A4A90D138E78B582498511DA6B28BA5594044263CA648E01902545B4CD27A99C8B82FFA25D2B9E95486BA9A649885C1B4FA09626B21A2A9AA70ACB403234D0CD58D5D1F248F1579DB248259423286C7359121DD1842490502973403641AC14ED016448A8D58AD39CA139215B8656370C94049558A977DA83DD3B671E7A70C7638F3F353FB7E4A3D590AE05498E25096068CDF0EAA89A1A5F0FBE572AF3A32EA0286FBFFEF5AFC330A185BB6E91C793616699B3946D704A59FBE0073F8852819459D249C9C024FF38CE87CA0EB9AB17216EE2E3C805BFAED1423980C9E444EC8F3A37E17564B2381AFE4C2A18F52BA5D42096049C577A1C494039D75CAE4C1E7906C0A0EE698400C179A8149829D7FBC0D048A72F12BD51B2047990089A09EFF9C33FFCC31FFCE0071424C771F022AB3FF82F05C0E99531340D6F7519FD18F7938422D73FB33D44DB4E8C83D2586915640A2021BDE4252FF9E77FFE67D47CC93185D6090A121A87D172E8A1B621276186A6ACADD4BC34FEC4B5D75FF5898FE6906DD2A0A7DB1D3F5173B59E7B12041D90934ACD4A4342D7610C3BDAC6A9D0F41BD6427FD5483313D4D436DC60806A9589FA5192E98A99A4990A6A73B43EBF3C3B3931BEBC329F0A6846F15C90B41C1F007110FBA74C9CB87761E7ED7FFEB977BFF3BD1568EA92DECF3BAA8D2BCDF97CB2EF4EF447046759CA022971325435124FB40B76D228AE55C075BD2412F92676DDD46A4A7B69001590970497C03376C10517E02B4B0522BD4FA521C73A3F9CC84E6715F55F7C8324FF887596853DD123A12E5335190724983BD39D5CCAC32E23725D90EAC6C88F0C8A85DFA5C3C3A2AB0C529B1715EC78E44837A263801444EE29024247550FF9C03DF7DC838BC55FC974204B1D8A2823CF9C5026717A975C72C99FFFF99FAF6BEFBA6E7FC86258330D8B1CD0E3480E6E5740791994A44E0200451D121DCBAD32ECB1C47920504A3F224980876C64D43AE5E413B66EDB58AFD74C55A47F16F91821CA00DC4F24F9C2FFB366169116C0DB478B2FDB9BA4C9861020BDA0311047199E27A1834001EC9CA218880C3DD674516D80AA36EA648A8622974C04056D001975932C06D1CA06751053B448C273AE582806D06A504588D1409D48A22E65E2A55774AD66680D457324ADEEF6E2A7F7CE3FFCD0CE5F3DBC63EFBE83855D96C3B1DD9779093D82D134E9183D1336991A844129A78D933BCBC5BDF845FC97380B9E1B9C031E1A525EF04F975E7AE94D37DD445E4EAE9CC4B7883C8B90A299A1131F6454F432A4D73A49409E1CAECB27050A8E44EBC4A38CB7511B556A9BF7AC248134EC180C47F6AB61740AD2F109681EAF20A9FFC11FFC01EAF578BE298F8D76809541728CB0C2C23F90D70BB533D2F1F122A957E43262271B8AE437BDE94DB40A7238307A010CFD5DECEDA5C20892EEF44EB9A68F6245940540B9F09C3E4BBE41FA2E85226EB9E5961B6FBC91564184BD8668529CA6C9B1A9D9A5851832D5D2E33800152A923AF0931CB4BA5D1978ED71B4ED42BFEFFA90AFE9C56CAE118B5490DD8F8FB8BE2BF7FD9A61F6F31029BD62A80112BE27BA162BC2EB04959ADD71DB535B46DB4F234793EB95461BCF3D64B92AE1433FF0E10F7EF6BA3F9D18D1FB2BAB96ADF5F36A94CA10754CC0D10FA38CC8A5EE8F06C8A1A1421A2909D88ADACF12B4A2D10648713C1123D02A52D5CF43DC59170668B33BB668D9883B89E7B9DCF8E5F81157D227881D518E5CB99B050548391E43185CF4456A1384470BF92FE9A02447CBAF983B26952501CF871DDAFC2BD7AC917B87AA7CC92E24968A93C4D551A90423BEE1B19C9F9FA75F9190EFBBEFBE7DFBF6B17BA0EC27283304E4F278D2086AE9A83B832B7AFDEB5FFFA31FFD080727CF3E7B508F7A3F729557BCE215680D107A2B9926D2B0D319990B38559CE4F5D75F8FDC862510CEAF2272848A8FAE8B76459222E782C5C086E9D6E9A79DBC617A1C15624B5387E67F2CAA63044585C56372D2BFA83C8A5E060383B065C0A1D75841E24CE3488A454D6881A6291A92656A1EA2816A986098AAA9199A8E93413338D454813BA4E9321A21B2E89013004A803C4D62240D01DBAEA826727F341344A4CEC0C359442C44E99AA9A88EA65464D5112EACDC09FC7C7EB6BF7DFBFE871FDEB173F77EE1204A8F593D54AEA8224940E1F8AF7CE52B687091B382C13D58CCC2B0C28B3341F96071AA036D11D72B90F4A611F81E3AC465487D628E77DD75172AF5A4D552A90E8E836440DAF45125013B34F834A02E83F3C71FF060E177A9D887DA02533BA767EB1D2AD339FF4A64CC89B3E47261C9C4DE153602F8C3AE00BC8712DD883B739C03862617511D6D17D755E20F9FFAD4A7AEBEFA6A829DA109703F1C4673A4F4734E462C7B54B90716C90F4A88A4FD67B589B1EDC8ED8BD7CB8D418E281EF44301AB9567E419ADD70CB7179A260C5261209FBE79F3CEFD075245F8652DC7AAA4F2525F9404E2E3A8250ECE84BC0156BDDAEBAD82A94F571A6FBDE0CD37FEBFB73AB696F7624F05CD90622F6F35474572A19235C76AABCB3D71E22A4ED4EB6ED83435E8B67B5D6FD3746366A693E55AAE169D4AABC6A01D579C7A26055EE8A369B2AE7E6AED57D4ABEA0E049EE4E7554777F3084970DC5016A55432EDBC1FD5AC56BF375015BDDAAC777ADD2C6AD31B643F21C14F1DEB08D15FCB316AD47B3802C7110228E92E7C9291A3E139C1BF1222340793A9F925F538C3F755F60EB14240B1FDBC04968ED484FFE2B1E4D03169B7E5B616641FE017D182BFFDF6DB714C0A17B17788CE3C2EEAE52F7FF90F7FF8439C241E63A5E8314EB0BB94582F975A4372E1FDB1E88B312569FEA836A1883D56E5E3E5975F7EC71D777002210CC3752453C9C785BB47B13112126B1C0F2DFBC287A517B10E2D8C62A1260B0E059BB74C9D7ACA09A3634D9C80A9AE79A851B324EA0D428FAC575251713DB811E4F3A53239E9C8D6D2742C22D91592208030889078A5A22F8D24E79A842F06842410499702024BD702450B343DD415B9C02042BE8FCA4D9CA5C29B84367D2EAA0B709374D194499C2159D3945CC593875FB774CD91554B911D59365167F57D343CB54E27DDB56BF9915FEDFAF5937BE717568A785472AC17C0E129D27939D1853082081D93D4557262E0CF042E583ED68C9149A62579BA914150381D7FC03920DBA52665DC850E860900F888E73DEF79BFFAD5AF70EB28824A5FC7919109A24271F6D967E36B7EFCF1C78F1527A077512EB0620F3E110325C95064BB8CF4C9250BFF1A9B605DD1D65A76C0B05A9B7387C84EA2C9E44756ED91539E2B0C18758BF0EF700E78C0A89B39396AA054484159D2A44BD220948DCEE2991B7052CF32CA4FA72E40575D7515AAF3C8C7CB49BA94588C3A5D5E42A62C0FC5BF52109BC0B4C9BCA31417FCCA5AFA962A5BF586DF59C5538A6A0B2A40D313A3BD76A7074AB36AF5563A9AA546B22A585C10A0E63288D6EAE948712303B16082E04C8C0C563B754975233F55E1B433CE987DEC891E391B0195A3048A6D5724F9ED6FBFF08EBFF80BA7D91AF43A10A39E218B721BCB46969D4B60B75A3D549C7D6F6A7C74717E19B57B5471A36E4F2EB50D389C4823A1B121898E200321BC525D44BEA79DEA7CBFAF6BA80EAEF5E4343459D14C17D597A1B98C261ACE8562FE706C9B80539979575105FEC637BE210F7B13512A07A9E794C18C8446B909F81E5166704B6DCA534A879D54F83A912A3C23624C8C0B0A33B1CC58CB5973EB0E36A54EE038783668BBC8A9485A3F2529D081C1F38033219397C2E6A4B5B07F92BC26E4C0A4491E757FC89BC4889954814FB037C7A24782A5A19A21285542E034DEF5AE777DE94B5FC209708712DE7689A017C6C644BF4DDB411A2BF456159A0D7BD3A60D9B374DD51B15D18E589259C89360241798E82659383170A9E4B9A62C3A86506649B096A4012E3273B43CA230CDA88C4BA6064392AAE586A9189AA96B5691452A2481A186A2F65845FD3415E5C55924E589084E8980AF244B2A9DA42C8F04A2B526E572A4EAA665D64DA3AA6AB622C400FEA70C7C39490D6FA01D3CD07BF4D1030F3FBA63DFFE59D7F58A264FC76470CAB01F3A2F040F011D6E2E0D23E64EE93DA44A97B32FC8E14BFA3E6528B16CA099D3FDA45D52491A859B58A7268C2362A66548162E7623C7E8B12401C5BE18798A4E0972191CF61DEF78070CB3A4C8DF45DE79F650932FF55F6913484743F1A49340B6455975A22550751BB3544EC0C01BA8020E7FA5F27A02CFA04188DA89F352092B49114A19A26DE47204CEB68242C1246947E44792956E103596924459866491FCD11FFD1101A332C201497D46B0218D92F83ED901A42D96AD3AFCA1296B3E5AC2B2E265A9A41B1972CE04B44A4DEE7B464DEDB96D59552A6ADD1B0C2A8ED319ACF20B65B428DA90A81B44825C331BD458967C477DFD6B5EF39DAF7C15F7B8D51C996BCFD75AF51E8AB15C6E98753FF09A96D2F15DD1A712C50F8A114991CC4A1E446A25487B72531B35ABFA6C773F98A044AA195706D0E12AAAB2925E932BFD2C7434338B8B098CD4E34EC7107FACA0C298AA519CFB60009AE6E90017664170D8DD07253DFAF89550AC765056056E234965F27FD280E41BC4BF721A1B5A0F149EE10468B2B0E948509C80B8108E4CEA309D6DC64A816167116EAE476F96DE663AEC5AC1F9E594DAC021E5729D33B5A1E7B746670C353CFC3AB2D6129E5B4EABE3ACEBE37B7B3876CD78DDC8828ED397982C21C63EA103CFF8B8E47E603B8698CF5AA880AC334E211746449A588EB6616A6C7A7A7264A462DB968810C4515194BFE605C69D2D2401DA4112711992042406D6D90450D232D24C04B5D348F8ACF1179044A35545865C1058AEE9AAA9E2E34C0D557B23444960EA42A3110EA2224E5074BE4C50C1C9323C0AF210442C4523218718470039D40CCBB6EAB6D542F3581551045D12350728BA91C39A0BF3D1A38F1DF8F9834FECD8B177A5DDC9D3634A823256252F8480C5F15FF2A7A33C20C58D3690B050F860D187524839819D1458D2D3F15BE493610D421D766F87C2074A5E11CA69A18217669DEB387E39ED1A86862A295394824249EE6452B0B642CD9E18FE059783178981BEFAD5AFFEBBBFFB3B1C901AE9E0F89C744FE204BF42D6EEC5175FFC677FF667B40304A4415863B7DD76DB95575E490E771CFCD4534F25DB853DB36CEC3F131EE33FFCC31BC54A1941C531BD715B1B18BAB0D67D913F1424A02341F038B42D1FFFF8C76FBEF966DA31600C0F49D32D33F206AD5A75D0EBD60CDD0B2359349829B24A7503F929441E723B45B3E34493F3EE51AF6B723F064D606E895EAC31DA4A014A16BD91C5CB71AE82654314564C3918F89262DEF8E9DBAEFEF0BB73D58A62E19892211E6FB696DAAEAAD5F26425958D34CBD1E8CE02176923574CF15CE8298683F7D79A8DFECAC258A3B1DAF3934C53C115F3416B3D0A475B95CE4A1BC7CF7253CA3ACF6AFE6BD7355DBCFCC8D390059BD524D5A727AD83F32B89704E28A9DF57846AA6E50237A39716F78BB625B15F180E4692E9A6EA0589A4D5EA5914E6A12BE762FC3046A3C7CD1514B492AA6B388E81DC3F43FDBD15058BB42E94A2069EF128C9251D24DBD27D374891852073C107ABB9A418157C6EE8CD3FAB75E98A8BF3C1EB15C70E7ACB35CB69BB013D57D6ED58C8EED4D1F11B22330CCF8BA10E7CA460DD9025986C5516E716EC4AB3E7C6387FCDAA3626A7E60F1EB8EEEA2B3EFBE99BDD10254D3D4A573EF4918F7CE63337A3389204DA1A7CE883577EFAC61B32E998DE24A22FB9D4B483E413711E32FA49E13B02078CE369308C14C5495C6F3ADBB66E9CDA30EA08DEAEE8861A7B841BB1D6C61D9539B20990F996250189010E17F3E7B0B6286A08F2A2A9A52813C6396B2A0A03295244D5328A1C0D0D02C944FB4037D026F04D0D65B2C02815FD2C8524880BF4D30CB22EAAEC85EC453992C589874C524659A2C5A651B19D46C519D18DAAA63A451D9B9AEB8D3C35A3A4BAB4903CF6F8CCCF7EBE7DFBE34F2D2EAD0CFA476FB1544E9F801282318A01646D44EA9C8C451089C867294782F505D20BD8E10385E3984A04F12B9B366D421B13F57D64A39497463C14390BA150D05338CD060ACDA88C37520E069061C10D9B4859C65776D555577DF2939F3CFBECB3B76FDF8EEFE895AF7C25C1054BC32E8CA4298BB6A385379397FFFCE73FFF17BFF8055E4433FF79CF7BDE77BFFB5D566148CC505A08144DC691A5924AC5ADC7B83219177BE18517DE75D75D9C60BEAE33CC3A03FC7FD387840D474D60E8D3E7C412A5D4816E9DC2C53A8D54EA5D4C1F5A2F0969D4675142D0CE93152FDC50922E0E7B86EC5ACE920839833636120FDC5A12F70682010ACE0E9926019ED230556A4E7AD4EB0A8476B51A2479EC8BFC3A1019A4BA1F4B961EFA1198957AE47B48578E21F9613E3EB975717E9F60AE869D840112DDBB2FBEF0AB5FFB6677801C27540D2395D49A63775697905053D13DDC38EDE4891DBB0EE07371E955473DEFC52FFAE93F3F18C438E755DDAA777B039CCF79BFFFC2DD3B9E9C5FE844997AAC791EEBBAAE84C2EF258C7824C8089F1BC552023ACEA7D871556C701E23F1CB8ADDF392565DEAF423D1B7B318C7D290018BF53AA220DB08C284AEDB3A72066710E4A6EEE3BFFCDCB1A6E35446F61D5C6C35A4958E8FD72DCB0C3C17C799DAB0F5C0CCB28C9243D665DD4AA330890245A028897D78B6EB1A69C85665E4D0EC02727C94AD790CE313931FFDD80DEF7DCF45C8CB122882AE49A40870B3E7BCEAB56FFEF40D576692F9C53BEF7AE73BDE8EF339EDA4CD3B771F00D93650770A81C6DFBC697CEEE0BC6E987E2429B26845D9ED778290B07FE46AA5DE13502EC79404643D50F06FEBD6ADC8A32871038F3A5ABA5FFFFAD7D9022BF76893D887C30C05C536F2C0E73EE79CADDB36E1BB719C22B13A0908588668982C3E8A43120B232EC6B1E202B35A660590C92949A282110CDB754AF990C628B22F1560A5A01425A522E06E256834085C52255224B40F52594970507C0BA2E18DC86812AD0E24399101CD8248D2047257B5DA74EC86A15775CD12A163458DD4BA6E34DDBED25E81EDBF3EF4B3FBB7EFD8B16FFFBE43ED76371F369FA3A01FD7C7521497AC2DD4EF48C5E68825AEE2FDEF7F3F773262606AC65C84C255CA75F6E5E08132EC69950E5B1741E11024E732AA99E40CBDEEBAEB2EBDF452E4D1340815D61E4B57658B351FF65526E403CAA861C73DA57BA2343AFFFCF3BFFDED6F5378A05C6B86CFA534708EC7E2D2262626D00C27C02CFC133961CAC522F421E712E9C214B523BB07C7C7C9CFCECE723ADD3A10BAE358C7FF519FB24D4039DDB8ED3831AA2AE264ADB256540E7B309E0AA1C3528B4D5A5D3E44CBA0700BBBFE90F0D04AB8E28A2B84BB4FE8815AC31E71BDB008C2CA893A27789B69485216477146A783F6E068D7058B88C59F3453C9B3F4431FBAF4864F7D4133D4A9E9FA81BD2B78BD395A6FAF147D800D6106A44986967D9AC8911FE2D7C727ACC5455F2A52C4B3A8607BC5B0684BF8816081625292F801C78FC3B4D952DBAB22811014A8D56DDF4BE2201A9F74161706C79FE7F1AEE3DC840742B4B4121F196D2F3DCD2311D6336B8341CF1F0C55D4BC988FD0F7910C7139825FE5850688D747C71BCB4B5DC350433F3E7CBF56AC22035913BFAE3DB718C7B070C750D2889A8AC3392252F15F3126EE49B58A2CC58842C91BF8CF7A5D39D49B0DE488FDEE006D13BBA2BA682F15F3A77D6EB450378F035F4C46E09EF96BD7ED0A7803D8B0A9353BB38A57705DBDAE8FF34C93288ED6B6A8155B21C4C24DE258A992F7E2200D5C706CA97BF4B842597FE50FA75A509750246D3AA5654CD6353B82FD83C2BA3750E9D350126CD9BA11D570C7B19075C75140FA1D3B0128D597A33AE4A861D549530E4355C350F52B58554C9A17459E41625B86C28CA81100F9E504B6345AAE5220347D2517A88E72AAE0BF6885A0B56A08FFACA999421D57041C0548B10C89666B86613B76D5B6EABA56295A210849906A754D6FB87DA9DB919F7C72EE7FDDFFEB279F7C7AEFDEFDBDAE478C0917821B843C8EBCCC52099D98E299E48B1C1D1D25943D627648EDC82EC9838C8C00390B4A602894774A3166915B86085DD794068ADC2F0A3F506200316B7A3537DC70C3CD37DFFC4C34DD7592402E75F05883781A228D90F2CB0FE5A4CC72630318E2EB31880219169425C933BCF2CA2B6FBAE9264A70A68431BC0DA508E7E150D626810D10C24C5E0085B2BFBE8C82CE6877FF07240173794E20614750398F9EA7C1228A7FA54FD926E04812F94549A213422DDBDD53239BBABD552F19B426ADD5555F14C857501F06AB6FC8A9F0911430EB89E85D9F20473213C53BEAF548722B6A5D8A351F50350DB76C458372BF01151FBA3A588E541741613D59F5961B76B3EF05D59A11F462C14B41312BDAB2BBA8815EB34756BCB9AAD2683A63EEA0D74D5753884DD93A61CBA94F3CFDC8447543A7EF5A92D1CF3B6827D49D469EA85EDA41D35D1545C6386B3F8168AC3E8E0C2B538267357FBCAEA47A2ED62F74EA5C4B73116D3642E80B847B51248DDC35527559052D89A44C0D00553EC1E0F115A4928E363F720B3D557C23B763E126CB701F74434DC2D454AB7ED605D1CBA1A280E442F7E4534E7CE9792FFBD6D7BFB3DC9F1DAB4E2EB74573AA5AD5F11217C7A9DAAD85DE414BDC6CC480F605DA25C83D70AFEC67BB2EA326E999D5750712E4E79DF77BBB0FECDCBD7B8F25D70659BBA18FA491144180EB45898CA70FC7C7F53EE794E71DDA3B1F2761A284AA2DFB7DE1A54AC1C7F712096775A6C8E0670353B1E21482264A2A1D7AAE029A9E08479F8356661E748EDB69078FDFC9279FBC6BD7AE729F572EC547DE5506493C2C093824B256DFA1A184AC9C73F6E99BB74C230B364DE1DA4BE2B00CDE4BC5685C40548EB3D3BF45637A850D0E6988F0557C3D1BBAD08BEF02370E24FB202F640090F99365AE080FC899AAC4AA92A0FDA50B9852E46262C1C8AA6C136D1159152E26FC626ADA86B86C548435A09A8A6C8A6E978A961B0D5DABF67A52DF5576EF5E7DE0E7BFDEFEF89E9DBB9E5E5A1459F9E4E7E11C4146E5A41C67CEB02CA79170890755BA72EEFCC68D1BF7EDDB471841E552407A3D2C71E521EC2D8A1F8A29516A17BE362E5620EDF5F4D34FDFBE7DFBBFC8E9385D95D916D907DBB66DC399E4457F5D327D70707C10D90A343D7CC4EEDDBB39E0C9616D0AEDD21BA46801B7CC2ECBB3F211BCEBAEBBDEF39EF770B1054A085A2C7E11F59103070E70DBA9B22BA63CF9FF7D1F56F669D5A79D76DA534F3D558E00F10D2C568F2A09A8C2401EF6B66398300622A45004921CFED0763B390A9A2056413E6DFAA483334FE30F1618FBCD1EE0598EB404925C47A628724C45EF30C1FA8E7E5DCA0D2336C22CCCB5082A48515A45B1FBBD76C56EC5ED38CAA3179CF75B0FFCEC7F8AFB05CE3CF255D992AA9AA9F5C2E5E60913EDFD0B426BD60102D9C81DBC1F07C98D440402322858B43E628CF4BD7E240FA4A69E774359D5B334C27190C39A0ECEB89FA1426B28E0A6C799E771AEEB115E8AC543A594AEEB93158192ED8A094446240C96C24D03226BDCC4FBD7D6ABE4858A2D810DD0935AF6B8177A8116ACDD8FE3E3F550178E0381402625E140ADD9C98A27444CAC5999AD5B7A375A11F33155E827E0A04A8C625CCF90F3D6D5241BA0A0D30C2B8EFC67B7AE960E2B899219388E5C53D2C8C3F12DD9F2C1834E7EC4758089C9E985E519F0E4BA31D2F37B5A53375B46EFD0F257EEF9DA4597BD235B8AF07A2EE7F8BE70F98D0DE39DFD8BB84F78CE2CDDF6451749A9DA6AF4822E20AF1B1C3DAEC63957ACE8203953062D9534132DA33AC8A0906B0C84981D67F8145222AFD59D534F3961D3A66953477DBA200F29E3C421F6FEC33014CC9FC3BA1248642810A53121099F24AC717912066B693605E91563523B65AA79CE442DBB080F44B2142BA22A3E2B124C25BB9259A66EDBA6EDA0A842CE256902A4088A2456013D244B3A2A1492A42AA2658D2C5B0D45A9F4DDDCF7F47D077A0FFE62C7A38FED7D72C72E29B7C9314261C0B3CF3E7BC78E1D04DC81C47CCD35D7502748F2B75C7BEDB537DE7823152E52974A46A1222E80DF12295845476F0A0FAC2BFD852303A41C42A0502D79D8B97B01C918F248505A279962EB04C03A4E57BE5E666DFC4546D3FBF0873FFCB9CF7D6E6A6A8AD2B7B9271A958650874882C1A06C4EB67EF0065C2337032054BBF223D080C07D181F1FC77BC83B8FE2ED79CF7BDE430F3D449EA5756B397EF5FC7FA018A0B5E3B37045E79E7BEE830F3E48BD9C6008E9CEBB57164E65EF102E1CBFF8FDEF7F9F643F0799192495F696B0AA84EDA5C0A68D1B7C3FFECF7FFCDA2F7FE92BAA5D4FBC48B32B717AC0CC9B7224AA25F3AA122153F37C43B1C3C43DFAF5DC973CC3025302E4D37D682830F05047CE4D30025B89E58A59BDE8CAFF7AFB3D7FEACECC56ECA69B0E2A693DF750714E43C9873AEA99812A99A89C6AA133618C2F79CB890DA91EE2F8A3ADA9E5F61C3F3732B35CF1204E84A2DC30A7F4C9EE4207AF8BFBD38E7092A84E940E9EDDFCD5C40E1D0850FBCB422D064770D211B37EE26F9ED5DBB5B2B46BD1CF83D0461683AA7DCEE3AB9112A39D89CFC571E2A466D67BE900BA52131A1EF84AD3F09069A6999CEB9914CAA153879A0F41207930A29FB875DB9E871E0747A9E6CD749008BE5D8118E78F7A37AE4BCF707C2B32238807AA078A37BE75DB1FBCE0457FFD8D7B9EDDBA9478D2DC804CBF1D75C4BE194586572FC4F1F5B46E2526AED377E224698B760E60BCE065BFF7F3FB7E6A8365EBCE72B2045AD09CDED8DE3707351D3A28CE2CE4617DA90BF85E14154D839A93051ED896D917F9C5B25277529404C85EFDA3DB04D2B0853DC514C96BCDBA3FB31D28BCBE65E43B89D2BC8EA4C3AC56AF6CD93CBD71E364D5115D1EF18A683236A48D7C88C92397C00BCB31C08293AFA9BDF2919F2C4F868E97AC2C0C866EA28C1F4199FE220493A32D88AA7AA04891AE27A6816B909D8A30562A558B62DAA6AE0A37918028D28BE7A890AB592A7264654914072A664D556CD7CDC2D89E9D19FCF297BB1F7B74EFAF9FDC9DA6062BB65C764138975C2544A512DC7D09993ED23C7B09386ECC3D2ECE39E79C471F7D94B9F0DA9E96E02A491220EF78EB5BDFFAC52F7E91BCF030F4F15123DF321A1ACE046FE690C33A195066FAE5E03C3BFD7056C8AC0983010724B00A0A41538F1DBCCE0A42B91E823C2784D3C26871A42E9008E4BA740A9BE3CF77DE79E7DBDEF636AEAC26914666040A068AC4949308FE0F9802656E4E8FA35C2914575471C392203FB28DC1BAEF72C498EAC9E5129236891606AEC07D23518A5B3702A34BF1526A2630019BDFB0F5A03A9B8FA0960D63F968FFA995E067C5F25F04B5CDB5D0ED1B7E6E4C1FF37A6FC772F83F0484DCF41B37CCF467CF3EE3D4A71E780A46B59A6B2EFFA20F0B507D5525304343965AB2DD5692F069377A4028B3CE79F620F0369F32D93BB018D7CD7C26AC07F6DC42BFFE1B35A929F7563A1B2B8DC5CC6F78F6FCDFB5719E95173A03CDDBB261CA9F6B77D4B4DA37967FD817C816FF8FA18CA8B13718552B38CEB39ABF3456F376F7E25F0ADDDF78B1EE4C57DCF6AAEA82B36574E9E165F88550EAD5172BB5CDF5A0DF93BA8931DD1CEC6A87F7172EF573C1D98C1C1039AAD237A01554E6FFB62DD8EA2B74B9A558A8ECF52218ADE2FDFE7FCF701CFD3CCDDEE0B8EDCEB85EE9E9A8EBA98BFF288CD4C6ABEAEAA836E8B471FE61555F7D7C29F9B9309294DF958D0913C71F519C67BBAEA0A2694BF9E0A7098C41E5371D4FF7E534DB5C1B5DCA83E480E73F845207A47361FACC8DB86FE142179F5B1F58F3FFA30D3E4CBC6EBC9D771C5D4B5706781DDFE3D2B77BD004FBF7ACE6B6D6E2CCCC8862E7DD93F36EBAF8E06E58CA8C7E8696CFB8827676B0470A8E7ACEF3021503CFDEBBDEF5AE3BEEB803EDD7C71E7B8C744AEEA68554CFDD6D0FB3113CB50C32CC9C7D64B43E353936353556AF56FC40B8AD85C65D7016A61366342448F83A7DB238629B401EC24F1EC6B890F323B9412AC9875772E427CDF248E095E60305D5192D364CD9D0240BA5A7A93915DDB2354347855DB50AF25334438C9E091C15219B849D543444D06C59357D5F8A636B6EDEFFD5AF9E7E7CFB8127763CDDED865BB66C41268BAC10B9D8473EF211E4F8C42871BF5EF8C217FEEC673F6397CEE6CD9B91A391202509F1D18F7EF4EAABAFE62802F27AE40B975C72C9273FF949549C19580D8615496589CB0E22EA7CC99E65F65C735F3328B28070402E81293BE258003087E57E3B9CED53CE8FA462B12BAEB8E2B6DB6EA39807D77C91FD414612672231C616D93DA46550ED28BD5C4AF9E73A499C034A4702DD65571223C573BF0A8EC4A4FFEE1EC2FF9A0FC70688831355301A391D35CAA95897FFBE4E5695FD7BF42DAA69E2AE15DC528DB2923239D36C2B1EF8B665F86E282C7D158DA72C30A09AD7CC480A210F2C88A41E24E0A8DA208D8F75DD492BF5C4F420E9C000AAB1400095E440CE74DF6880858A490775E18A1033E2CB0E989E55118E15E8498132A9A72BAE9A42A282119AA754B6EC77E77C3347D68AAC6AB2D99AEFAC369596E5C92E44E2B9790F5535034752F24A52356309C711F71B0388337C4EFEECE7DF909B9A9FE1F5818EA2780029D40CB3170575A9610668B6A43D25021375FFE2B9528ED78D008403C89103A58BF644CBA9AC86EEBBDFF89E6F7DF9AF701C6DBCBAD29B1169A7C86F1518D14625572868383E8C48B85E71BFE7E27C0CB12BD09343A16BE7A0A510ABD0909AAA2FF4DCB8A2F838BE9FE93944F2B35ED786CA74B4D2CF405D955C68E610C6D200D056D302BD0E687380983FDA2299C0F48E50E70FB44D30BE02FDBE1AAB135ABCD4AB68BA9B4463C6B82A4C9EB88752C2440D18D4049246E1C2EF159EA81C4D19034C05421737E8A8E79CF451EAF749E79011EFA99082B4D58B2FBEF8EEBBEF2E974C8AA8E0CB5FFEF2EF7DEF7B4400E4F79C9E9E1A1D69345BD58A6DB86ECF303545022A9780611A0C49029601CC928679A3191BD46507116504913028BE31B4C7E5C32C32CFCAD075B20026CAFC0C06B21C1868D319224E601AA896AA8EA3A160D035A190E2E24DCD147FCB91D47391EE5498FB8A524802D554753B0884A9B9B810FEEAD1034F3E31F3D493FB73652DD047AA3D14BE118A88C0B05F36875C7886EC5F63C048CA32A2A1C851C00942CCB5B90406867D77A9E40A5F01FE4A1163C6827EB69C91ABF6C9F4FBD0873EF4D9CF7E561E36EFA6D8EFADB7DEFAC0030FFCE0073F3878F020251795E5370CAD3DAA42E0660C9CBACAB795E7464F6465622D5FA0C851631C2A6A41FC277FF22738A557BCE215F7DF7F3FCA894F7CE21337DE786319488062D484FD4075616446904CE59248129FBCDB3455EA1203436089637D1850884AE7A84E07779E98384583E81EF2C8B1D64F09C18C935CC6D3A7B7CF6392DC6D341A4875737373466EB7265BB39D83A8EB6D7CF519CBC66A60B860669078CDEE48FBBE954BAEBBF4DE07BE1A6F085C2F30352BB643E740ADF7B782718CBCBE956E8C3A28B1724D6E82B4430D7F28325B6A7F584DA643AF1F39D54A6078E6D3CEE07B82A18FBE66A4D76C231F8D7A3938B9B2574B7F1A431F1AAFA987939E1FC49AA2A795D8DA5719A08E1F80F387B6BC2DEF0F7CC7AC0C54D7DE5FF17EE8A2AEEDBCC4CE37275E1C69B91ECBD154303DF7373378FFE60B371D520E66293297EA40EDDBFBABE2B93E4C5D30D96F75DC7ED068347B52677C656AFEEE59D4FDC75E37EA8E74FD2846028DEDA8B530BAFAED651460A89B071383544DE3D51C46C1D86B8975C550798583F3E9753D012C6F46E3EDC9C5AF0AA2187FD3983FEEF6FBBE695841E46F92B61CBC733FCE73E35BA667B5195CAF9E59B8AEF471C87E2C621EC6FFADEB272B7D3C5AB104F55CDDA527FF5F849CB4FAC715ED2479B5D3D364311F6DB711FFAF10DAE0FC671BEF6FBB7D1D0CDA67FF3B0370C07A8989FBAF55B4C162288D00EE9BF78F627FEC975AC629AA1BBB99A7A495A4393FD2FEE60A98609F673967984BAB6D11F446EB62B6D9451B2B83B1D78F761BABB99EC7DD1C8FC1B1E6533D54EF7F17051EB45EDBCC36C59D8EABA97A53AAF576BAC1C3013C0D7A62C9281D14545E4229C9196497BDCD54B049491FA4F0C1301DE30D6F78C37DF7DD4794C202A05CDB2C48FA8C33CED8B973277E99B3534E38616BA35E4175DBD4955EAFE3542CE4EC94274ADC2D1FC23995DB3B940B0854F9B06BB5240644C5C01A2B91B22167C98E900439E7B3163F488A94C7B930853C544C0DE11D92345D56E5D43015CB960D5D42E66F68280904F640D1A3584A132109508146E3A0D0683545D50DC3F651126442126C7FECD0934FCEEDDC79A8DD179B42393C1420654F3D6E1997DDC2D077C45A368102119608C18F502A0EED0F972FADFB500881581EF54B211E7DFEF9E7134428377E598770F7AFD1795932415132463D8ACB177186655E59CE982C737679D88D80AA76393DAC8C9F4AE78FCACB29B9964E21A593B1AB84BA5A12D010727F3A79646D406127919E42D2911C62C48E71045C82E89B547CB80716B788910A74527C348D809BC9AE2A5E4EB96481B839A57E92E544051FF844B49DF10A4E8F441777A69387F8EACF8C6130B6200C01CE08751CC727890545CB6BE10F74C3348F7447336B6A6F50509D530448F144792D3BB5CFDA78E63F1DFA51A089D227A1B89A30214DAABE2A701A0D7F190A5D52D223396A2523D5A41A41E8C9BDBE33181D6DFECE392FFECE8FBE33956F9007483FA9DE92F70733C21D9148B9998F24A3566CA119106A835528B2C57467900E9AB1782EDE8FD7DB462F0F41CD45BFE546D4AC66D504E248F7DA46370B40F40F9C529483E6583E3600F78B5FBB7DB7BBF3E31FFF446FCE57C76132D854ED553BD096AAE96C207CA7A6822A7D309A8D199181E3FB4ABF8336860635B5D68B7BA66FBDF3F7DFF98D1F7FBD0B2B9EB055E0B7FEAFDF7A60FB031BE469DD455D3D48CC604969E326548C8A9BB83CCEDAFC91052B76607BFAB23502233964ABB078C2F3B73EF1C86E399533339BC8276DDF0EC0C7F9AF685D1C87D63B0E137A8066029265B0ACB671BD74FDCCB1B32EFFE3CBBF7AEF3DFBB2DD07DC59C582DC450B2BDBA86FBAE62DD7DCF8A737B846673913153662FF95A8E6D7AB502DCF474DC5BEE1F8E301EAF8CB2E74BC9A5FA0742BA9964E291B1A8306EE4F6A858B89D0232DD5F273FFA8F3F1CC81B122D685E35B63DAF9EF7FE3273F7173CB6AADD656C569E98114A9261A15528E0B14E1FD0408381D8F1F12D7810307CA90A5302C8182A1CF869B7CD0A7DC1B718DA2E9B81307246687043E32DADCBA6563ABD548056BC22F64867E0443679D5D1E925CD935C47E55BAFFC824229130BA864F37F411519DC13A59B2E6654A555954172720FB92F00E09943A4D57EA6681568D224113D2A508D451745B8488F354A06AC54158C4FB0BCC22A39EC47994EA41A82D2E054F3E35F3F8AF9F3E3433DF6D2753535384FACD209470A4E385C3E965BD927FA68871B9CDE9BA282EB1C5B55A8D52F5352B9530CCD1647CF37F834D40EC9542D0A492B36E4BC9AFF8575C2603103168280CBD822C09D040C1992067BCF2CA2BFFF11FFFF1A9A79E6200C8B22420AFD1D8D818F23E926AB41B8C5C74DA69A7A192F1DDEF7E17C77FED6B5F8BA28E241C81F350F10B2D561EB657E5C661DBB66D5B5C5CC499DF75D75D5FF8C2171E7EF861EAA080D609F979500CA09546E85A3831CEC73D6C940E5747BF52649B42E2640FF19D380D7A28D3121988E42CA222415CCEC68D1BF11D71B0442EF5B683A1FB8E0E06CE137F5D3316E368CBA68D6F79E3F99FB9F9E60AE8459679E280BDCF7421A83B5043B5A693CDA012095A1D7A0A98AB5A3EAE86DAC4F8E8BEFE4E518C1C6B72D2C8AA1DC9ABEAA9914294683D5063C8CC117BF34AB4474F47A54016D76DE4111EF8DAC6F1330EB51F83B051C9AA010C8C0975102CC14081A48AE32BE9682516D743A30B7288E3DBEAA4070721A86DAA6D9BEB1D4ACC0168C8D27588F1FE15BCFE377FFEAD0BDEF926711D75B258ABE81BDC6C3F5EAF412B95A281BA24E62339B267674D57F3AA72287003926618ABBE78AE67E073C71BA7F6E7DD46BD3AE7ED11F70FD7AB0A8E6F86E0ADAD2BD6689EB43F8A8A6C704EEC8F5C81810EA3112CCB63FA949FB8F958F29AFFF2EA7BBE70F788B971C5DF79781CB4BA8A7549493D37D10A6958B913A3A451BB621C1ADF6A835FAD42D30737AD46E6A8E11FECD6AD4DDD782F8EA345BA0499677568FFC5FDF50174CD2A344049E366100C9671FE724FCFCCA5E9B1B37EEF9C97FCCFFB7F7CC8DF4BF76F183D6DB6B31DC71953C757BCC5A8E243EAFE0BF331571BF6B670355ABBDE50A083F2A499E5FDA2D2232B4E4E96A02D208BD0B31096856A4F471DCF361E4EFC811A961083E5BC6D6AEAC9CD54A82538A5471ED6E3C99541EAD8B0072CB446EADBB66E1A1D6DC9F8EC04B9522EFA111CE91918D60C67254F0EC033B8398B84E1D7C9AD545C911991A208151CF915FA288A519431A7280664050560AA1B394A828A168B58B02E21F317558B6BD50C683869F86F164B4110A571A229E21EFC432219519CA19DEA87DAF272F8D4AEB91D3BF6CDCEAF743A11278F3EE739CF79E49147702B71430E275795D24838FF84190DC199ADABF63A6A2CF49956823404AA2D63E330DAC4B39504543806C3808434C4C3A22B175D74D157BEF21572F8E01B4786C530EEBCE7340E1B34289CF04810E89B5454544847C287D0870250B4345C08D51BF262B9B3DBD6AD5BF1A492714ADD0DF166C6ACA7FBE945201BC541F0B9D75C73CD2DB7DCC2E5F2788E693904DB476D76084906AFA0DC22C0EDF25ACAB940F8334AA61D3B76902940E10A8EDE2397C7295D72C9251FFDE84709AF94402E694BA912E7ECB3CF7EECB1C7284ECEB3257F51396FEAACB3CE42F9F7FDEF7F1F09F2AAABAEBAE9861BF07826198C8D4E2EADAC2AB2262B7A188560097FCED8687369A52DAC841C1A9613CDA74133C8FAC24E9E3E696C6666A96811039AA78516B2C8C27ED68B8C4F21B4A19E56BB465FC9510915CAACC88FC19733804DF5E983EE8C70C457ED5EE44191538A5AA41D9A9E11500596B85874725325A8C6F5B626FC12279EB065CFD3FBC57549E46D1A03713FF262D473CDA61CE06354A82496DA33A211CF5D88446D5671338E66CAC8BC94C02C682102C92E6AC154319FADADCDFB7A0784A79B9EEB806481D207D5D5A5C9D4EFA4C2185244301C0C3090D0BB7A3C1AC49DE27E4AE257D120D092D53C32129C0F127D18A778FFD489CDB9EDED717374515E1629FE1EAC556CC8C2F0AA268E5B1DE48362F9CA5A5B37B44674D78A46FC8A56692FB893DB5AF3F3AB500558864F7CF0BA6BFFF43A080BA73CED0F4EB58FFB53E9A174098FD8375D91509245F5043C186D3596573BE2BA2D7ACFE9892AAE0F4AF3D7C43E18B11635E2A3CE67600AFFD886A9F1D9D5C522A3174ED8BCE90F9EFBD2EFFCD5F753B4D224DF13F0B5E43E014D59435424164F0E09FC10AE303900A8851FC5F908D4801121CB9AEB619597E2091CF1938678C2A363F5A9A989F189515C6F1805521E17D05B4A9E1E05746C9DB6C81FF1AB52480228987E91CA834ABEA0557908172ED3681C3FC838A11B4A5E0894048A2CDADC23E58A5C523D35855F48F4DC162D95B5224F4941A1A7A4B9824F4B42B4AEA32C8D152957155DD674900466757FA044A1B4BCE2EFDEB3F8C413070F1C58EA0F62BC2EC96BBD3260584DC60D0B29344AB8E72472CA0DF0D67DF267F467A7651D35624CB0B7F8E64E3AE9A4DDBB7773DE0E41843E2B49C0F3A117CA6180134F3C71E7CE9D84964AF05E2427CA4932659B8044118E40CDFC666767199F473A1A9054192889368A538948414643932A18280F8A83B41412C011C80E20871BE556319A235EA799B3238BE1186FBBED36E4DAE4DEA1D2878F7CE4239FFFFCE7B9F906CB2AFA156FC0853CF4D0431C349687FDAD289582E2E184AA7BDE79E7FDE8473FA25E9878270575F0EB2809D87C59270968CED9B0E128412DE19B6DD64771DE9D3ECAB0DC1AA9FB9DB660B19037E24A9006966975823E5AD64A060287172C4917D639EA3FA79C73F22F1F79584D653B75645007A2F324A050C9F4D48F12BCBF0EB50AD49661314391271A7708688656A53A614DBEFC77FFD3F71FF86F870E1D0A21C4EBB596A3A68A1EE084E3548EC32C9490799B799C277A2E4213B849890809C3EFBCE8771E7EE2A176BF23BCF9720335DE2EB4EBD57ABBDF1EDD387270769E9E0B423C0542C241122B518424379CBF07EE5863ACE376709E83203A79CBD6D9A7E750A33647F4DFFFFDDFBFF75BF79E74C689BFDEB193EE6FC1681B5612C1772155933813FB6081A983E9151EB41CF20804FE909A829E1B3654223910B9F07EDF4DDC44344890ECCC71A0BA024B1A68B992875290881AEEC3F311A75AD49626B46F741DE78FCFC57D438308E789D747B51154355741B850B202FD08D7A58AB0B9B81F4D1B4BB3A22C522B4A079948060DA98EFBE68BA6A239DE6F568DBE8FD2C5C47D967205AF9BBAD98FFA1BB74DEF3D70504951A6D80D682DC2FC51E783F3747407EFA7E7D2F85A6EB4A12DF27735B109228D2A469B4414DF35279B6834533DECCACA0A1EFE1B6EB801C9E1B2CB2EFBC94F7E822A111117F99FA9135FB9E91B9E6102342D6391AED13FC7C488801B4D67CB962D9B364D1BBA8C9220C7372ED28744D23F93655918301C3FAC738F143FCA80B7A532717612000A398E2476139171206444C907250F1B1EC86A8437EB7872D554D7C4BFA28781402B49501729444551AF2015FA03EE6424E759224BA9AE162875929CA01D9BC4ED768E6B5F598DF6ED5BDEB173E6D0A1E5819F0A08235D62B458CAFAE03DE224F132F2E8F17576B9D4FD8EDCF49CD4CF3161060864E181CFA59DFC37E4D2D008D419957404E2F8A43B205323140D8E73C825E8DDB22420141DE46BAF7CE52BFFF22FFF12CFD9CB5EF632D470A927F03ABC20B9D4359B56C460D464A852E7160AF022A3A4C149BB279F2445BDB8009B535A09719E42C714AB47FB17BF4529BFE56A6D6A204CE84C1C9782232D33BA828AFFC18307CBE8A15078C3F0AFF8757C228A4CCAA625604162FAB42E7CEFB48130AC7E78A6778886958A762B4444C2E9B7B872FD0D37DEF4E94F554CA3BBB298C699634A499CABB5A99EDF4F45782C15683F99940BA8692D01D1090A8FF0D8968D4BFB0E1605B9A8B5CBD59AD3F38A0C9202C15600F8C4729616F5AE78BF2E83A901B252F19F54B56A6ED0CBA5D46CD582414F5C1C8EB376BF92AF190A43101DBA3E79E296F9D98310A57C1DA93E4943700C083DA73516FBD12DD7DF7CDB676FDB7B60976AE949EC83268B5651B99C79C9088A3D255D6D2FE1F846AB1EF63D0813C76ADCFEB9DB2FBCF8ADBA638A3869E45B8D117FA583F3196D8CAD7497C4A30D454CAD78AE0C468E0C06121C1FA790859E623A7226C5FDB066D7717CA751999F3B08B681F7D7EBADEE425B381A50FD43D2370A48A63029965C5A2FCE1F7FF4421ABFE0F4B1A42BB908AF4446AD1976FA13A3D38B0B8BBAA186B85E4DD21C13178BEBC27D4E62017C6956EDC0EF8BD1648DC6D78A725FA3624552DA1C6DAE1E9CC5F155D96A541ACB9D85B57DB674F00B9307B9D1B1E7A3EA7214FBE6483D70BBA022D3D5A25E20CE83D22B00A3D7E037E454910B8687329E5AC211020D65EB212572AB0C2AE6273AA554200A7FE2AF7838919A262626D044E6A8A1C44C84DCD9EC64A8D5EDCD9B37A124B04C3D4ED0A24C0AE53D139521C3B45176E34029DD85AFAC7196A4A8172B8A06A4C20554D80492AC2AC31042A16C2A30F423655CF3CC897D020A18F744011DDF9091696AAE6BA980A553D0B62DC0EE098F49C6B38B6AA92630781345340F5765532FE27E693EF0033F889697A334913B9D64DF81D5DDBB6766E6DB7E988B4C536DADB08B9C3604DD47EE7B4EE8A4E2D275A2EEA832A0DC8B75DBB66DBB76EDC2B59020618422F64A512B228EF1B284F8B7D904AC9B97EBA509128A1375D854CC9F01034789C2943E443C9AEC154E1EE5227316066407D039A3A3C9CD3BE94FA42353491A458C396B938E69D9395906975F3BA3C3002FDDC930F4F42DA40794B5D75F7FFD3BDEF10EAA655B67B5F0089CCD45DD84E81E8A36E39F088FAFBCA514D8E79424BDD4D5EB9911E3B59CD161B91C8147893696152B4FD22C8C500026518CCCCA41132A4D91D38AFC457212C86A92D2710127474ACFBC1819882CC5A253085A0911E448FA89405D100C4421C81CE4D30654407745184A5C773464CDB16C809FE61590BD24C39FD1386E3A95102D5A3545EBB782C24416CF4586896C4A9315D5C2D703592F73E33493490C890E50A0656E54D4C84AA03BB2EF6623D55AB7DF135D0A6418C19795C76E98A120C0A12C4D1FC4515E8832A4BF53CF3AF5B15F3D25FC34A6D50F7CD506C913EB6D8D5756165D5485465B23F3AB2B2393B6B7E8F9D9E175E932AABC29AEBB020ACE87AF9BAAE62568D000CE677AF3E4C1F979D44B8BB6A0A09B32CEB3A9693DB4784AE3E07A7D9C582A9C3A7C5D9390BF64A9808F9046A6C6661617F17A1613E4124C6D6E2C1DE8E0A0977DE03DB7DFF6673999E5B298B951F885C24C8CF39BE7FCC6AF1F7F3CC852D5C2791A5D3F4C86E3D33EE03C5BBADE0DA2337FE3E4C71FDD55354CDBB23A837698E3738F3E1F2504AB6AB4DD10AF8FD51BED6EA7DE74DA83013E1D8FB0E8759416D240D4CA0A549E722203B20ED451186B9A089C7AD1C010028B40AA49CBA42C6AE40C5408B576DA294A49B0C994364EA993B6A36FD830B561C3244A822C8FA50C3597B546358C25290DAB04A461BAE43AD79020A1623652213EA49C1A12AC498261C1C1614950B086B45CB840AB12AC4D4FA9D3BD8E46A0869ABE085DA0AD8C2A4B41EE057085A415DD2B4581310A0B4540D7895EC668510471D2EDB9AEE72D2FC728097ABDE4C0A1CEDEBD0BF30BDD30CA445764016AADB08B0CFF45FEF2C217BEF0C1071F24D87A5CE079E79D87961725AB1CABB3843CEC07C0FDD3CF3CF3CC871E7A08BF4508C67C2785078651FAB5AC987CD80FE7D9D6DCD284294AC92F885FEE2DB7DC72C51557D09DFCC432A3E44148E125459EFEC485D0870BC54BFE406EFF427C937C6878CEA8A723A9EAC4E239851FAFBFE10D6FB8F7DE7BB9FF0645DDB9891BB16956F3C9D15436C84806BCF7BDEFBDFDF6DB39E115D5A203070E5006116D603E6C7B0B8577885A8290E38BB4246E7B4BEF82B2BFE81E8A7EB3978F7026D6B2188E96450A431C2732146858214DC34033E454F455D27201AAA5E602F24D164E4C4B8B421F72CBD1AA5ED8CF55D4AF33C95751770E030F52C3D2AA413CC8E581F05024762CA5591AE3754371F025F8D92A68B914A8A8DB0A8CE24835643B4A7DC54E932C50425D181CBA0ABE74781C1DF07E1172140DE851F1B4912945201CDC6A64C8A61A6589067612086E2FCA8CB5BCAA343CFC3D892A95F14157A03157278C7677498C23B4635435A67AAB7D038DE6BCCDF379EBDB2FFCEBBBBF2945729878665DF6C3BE169B92A1E07A719CA01B0AE345191C9E3F3281024A26C9C24C7671BD768E7B32502B761EA27D9FDB863110EB4DADB4E2471E3E57D71B783FCEF31D97BDF5B63FFDAC169A7116E17A95DCC2FBC5FC713FD58CC7875813E3E7A1D80713259398BF6C9B0D7BB4BDD4714CD3C5F1E5C4CC1C94C4491C9A662B1E24384FA7A5B95E47120ABA6C561D29D62E3CFFA2BBEFFEB21B2D024A38578C33B56DCBDCDE79DC4F5D57C4F52A485DD5AA39D77CE2BAAB3E708D2959B80FF85C73CA0867D2A3CE676DFE261A1092ADD7AEBDF6EAAB3F75459A874680B7A258B633E1918B855C936391D49569E46545B2FAC0073E70EDB5D7524C8E1B6CD099277396A800F903B575229B95B5ED236C021886D7F0AC22E1A422655843D2DAB8698365A04D10E5494CCC3A0A448E4D92A524064091D798427E185FA8EC5066F5561AA6DF149C5F883545E534532A5A2E585296ACB9830A57144902154D02816E8A3429899EC6AA283356E502B74EF638B147969461EF4C0DEDA454A83E8537465191E256DB6EAF1B049E1AF849BF1F2F2CF5F6EE9D9D39B4889A8470A5F91EBBD2C84B430E62920DA45093E7BACC5F9EF9A128024399968333AC9893D9C18DC3CAE036CCC2A412DA4199EF94ED30EACC455042380EA5F17017846CD8E5982C00726870230A9407283628BA4BAA2E7550F837D822E5CA2C529329EC4C9C977BC9D249207F0BDB16F46B39DDE099560E0927DA198277E58A168ED9E0E3C8BD290D7BE14291D945E9FF482D244BE866C202214D7FDD7AF9D7AD5BB7EEDDBB974D131CE1E28B2F7EFEF39F7FFEF9E797019748CFE2D80694708DC87C31469DC15C478793427BB78D2AAD3BD9D7E61359AB8571CFC445E20FCD9EB3D81C98557D7C213A20D444E43ED5A61118ED784532632D00172AA925D7FDD06B86711B556ADD3606ADD09A43E969474DF7C434DB139B6A1E18813680F10DEA4CA89A0312904411784EB81309A91DDCDDE5CE3BEFBCE8A28B18775D1E62AAD3CDA300CB4D0B067E3386246F44B2192AF32331AC98764B20ACE6FD8A85DC693A465DAAB72C898AADF1B8B1A826955A74F9A5EFFACC2D7F51F564CFB29ABEBF5255FCA4278570823EB124D266F1A02E788606515CCFC793EAE22042D578ABA6CFC5C86151D1CEAD8DF973E6ACFBB39EDC80AC0313777DEEAA0F5E7EF9B2231C5BD501D4D4CDB3899B9BABCD4028DA4AA5D90F8389385AA8A4E03AA039102FC386AC39DBAA54D40E4A77883B6A1C8D010CC6EBBDD5D0301B69342F0BA8F089B0B9803FA8FE485D979746546530270D6AA8BB2759172A23B28B32A105DA0CC82DC0F1AB4ED84BAAA3D96A3F53D73A88D0EEF1BFC7A21764C7A8C1E021BCE79E7B50252F1B9A5CB40847F64D8361732752D38F95D9CC54C3F857C443A83B267B2CB9F0856C7D9E808898D1D9F5FD011E69AAF5C509D8B6323535B5617AD2B14CE112223857298BC3A02C0990FFAF51757E04E66839998F25012D4C9148541494AC1D4512306E73B123B08677AD8961510608E79C468204D042CCF33EEF82A81B1842A266A2A70D4E529C6954F9E3085C3719B8B12F22C659A7131C3CB4FAF4BE99B905642BB952D0066BA3AC9F52CFBCDFFDDDDF45EDF5C73FFE3161421C3F9C4BFCBAACD4E3CFA79C72CA9E3D7B38BD442E7593978F6C95C77117BE876645DC102513D58CE0AF48C9A850531D7939FB1EAFE09B46D9C00D7B496F259811FCD6E4E4244E064A8DA55804AE6B5EF1EF9104304C67629E4BA93B502A0EA03E946558A4674A02D2B8F9D5F0A7DCD39864405E6AE54696048970EAA3C0FE3A5AB57C8C46517CE5DC73CF7DF4D147C94C244E4A33A1AF233D53C80707A73F915F88702638E948BC3E05524593D3A9A876A0959941D7F647569D9566220F023582543DC739E13165A7D9465EE6D81BA5A867A90DD55FEC4222C1A801ED55C15CF5692B98552B71E682695713D5EAF6904185E0394DC9EAA59D742431572602A50366F41B8393779A3BD1F0C03532D63A0C5309B8B31ECE9CAA3DC85C930AA44572D651411F6912B1EA8084DC6F4611716625B1533420CCD5D30369AF9EA7A62AF5B258B18D3CCA8CAAEE7B22056E433E3A1B0F8F0E5EDB0000FFFF4944415420F75B0D73B59BD452A9D700E8A495D12D6E77055281C524BCDE3A38C8F4BC46BED18343B89855758B16EE6FA9FA2ACA0673AAE12B567AA80FA70DB4436359BE280D2692FA020435C8512E2C18B27037086F575DAB2F9FD9D51F074F02DB69F53BAB0A545323B68C5ADE5BD4A1DEABB8E0A58D0674CCE6697A7BD7BEBFBDE26B97DDFDE119FF505D57078BDA88322643776134541782A80227C10907DCBD912D8D8CD73A4BDD54D9ACF66613817C19422D87B8D158913B1B56ED593D92018D180ABD92514EFB4959D7C7A2176426946E47D5452448F067D4CCC826A6D34E07BEACA61FF5A0AEFB8C8E8EBEF8C52F7EE4914790C651249453E07058A41A5401D17460FC82C31163FC03D1214A029C9540422F52FEF1BFD1D1D6C4E458D511DD2B45C3884CE89512242409D6B898BC56BC20FA370CA778D40F172F115EF55A4302551EFA97D6DCB8521E73B818869D770A6D5AB49C41D1231ADA6845EF1A1216993BCC37FDFF597B0F38BBCEEA5E74ED72F6D9A7CF999933555D96BB31258043800B978417E2102081406E28C6180CD8B8C84D962DDB928BE426DC2BB621260408B9402EF5BD4730EFC20F880BCD5D92D56634FDF4BEDB5DDFFECF59DA1A95843CF6EF67F9CC39BB7CFBFBD6B7FAFA2F093CA8CBBB6E93E59612550AE23CC65CC2750C366C9A35B3DD71E7666B3B774DEEDE33552CD75C2F886AD0D46B3600CD08914F3E01D8A278161C05475B69C16980BACD84F2CE77BEF35BDFFA16761AAAB178D557AC58313B3B0BF94C87453883B0A70A85A1C8459E12D2C775D75D77C71D77207ECBBC1EF9A0FCD3DAB56B9F7FFE790936886F5DC203FC19481214AAAB7822FFC497944A257875F46336AAFCBD24019411941708DFE1B7863CE0CF3C3FE84929F5C94794047A0FFA1F2101C4EDF94FC4C7A0F2A377209EC59A0D2A27E8B052F0134E3881AFE219606317E19FC37794FCB966CD1AD698F0596A329AE121416FE1ADFCE868640B16180F69D9B265F3BB76551430E2801B5BB06A03B184D3C857571E18DC4B0D8AA9DCF351D2A7FA3A194DAF95D39935FDB5F93D6FACD02F4D1A4D8C06B5A9E902AD2AD37ED6C454EA48CCC858F1221384E72E272AFAA64D630BCBF6E517A8D9226F90AC20D3AC6CBA66FBE5F75CB02AAB1012B1D63C42588DD1B218780978BA784E50768470226A5F6403F27AAEF1866654068BB33CDEF762B24C191AD9A74FC7F98CB8DE6D9ACAEE26CF4F0DAD3AA9512A37323B73B3898AE38F0EE41766A6FD449A5A75EB2DFDCECF8AB158B6D97162C9AE954B341ACC523BA4B9E3CDBEC9B1B231651941A69B5C8805838E57CA75BD3A990532CACBDC87AFBDF723175C926B356A7AD2B79B699D86EB8373544925CC58CBDB37D0A51C8DBCA24FDBFEA035D6B2756B76421FCA35662BED74D8512074B22B3C695EC7C6B206B5C85A789D9FFDF38F5E75E3F736D15C37EB2DEB532958CF370B9499A3DAA8919D5D5535772BC8EAAA13C2ED0D5BDE4CDB4FB87CA351273355C81AD6646672A493EEB41C27ADB0D9790705917681B2A98FB85FE4339325851588BC16679D75D6534F3DF5ECB3CF46351E20484B5A39E25B48AC8882C72DB93F0B7294DD60EF60178086056C981FCD242195F98AB1A3C635849AE830A9684A073742B5B7CBCFEBEBCB6633A9783C66EA1AA0E2744DD98C2C0916C9455F7C61B46E58525540BD5237490BED458C17254198FA2981C73060A002638B6250B9AD553B1A7590E9ABDC25555BA099866A59CCFF8636444BEB553985AEADC5E77A7E534523AC30F32716378D84AE27352DD6AAC79B8DCEEE3DD3CF3DBF6BEF9EA9B073880ACB45A5EEA2B973100B6FF127D19D8F6116401240B7922FD1324CDCCDB0F55EFDEA57F3DA073D38BF68272FF1E58900D8BC79F3962D5B9832D80EE0458512CAA7315F43F92EB82D3465448945E04BEE133EE32D56AD5A259C0E07BCF67F28EF100F121E7908544CDAA5975E7AEDB5D76260FC2EFC0AE80CACF57A811D2E09A0CB4BEE29F5AAE731CF7822E401BFD1DFFFFDDFF3978F3EFAE8FEFDFB59C541AC02F2EF101768CFDEC29E39A2248836758271C3B30A071AC40CF3D0F7BFFFFDBFF8C52F90622B1D49A9278699BD9E7AEAA9CF3CF144D5B6533A35BAEEEAC4A9BB8D5FD3B994BA87628D1575DA670D649BAD2A5D48CB06D213FB1C2BE17733B472CF8ABD5FDBA502B55A70F259A7EF19986A8E16E952F7C4FA692F267E67B712ED319F3ED229BCB076EE75BBE8067E9FCC717E6327EB3DDD949E6C389B56F43B54BC661FB2E078B901FD443D030B4C01C60D9FB37CF9725612A5A865DBB66D1B366C40AE842227B7F5FA13CF78F2AF9FA5C17A625FAE1573692E47DF3C40A5583248B733A5559FC81FE82BB5EB94C8245B5AF3C4A74F7AF95F5FF0F598ED9BCC83DB6C47E49CB59F3DEDE5C1DFD13C65627DD9662CB1D7DAF92D55EE101B20778E826B2CBAB79B9C1F6D262B5AB3C996F8B0DF8E5919D3EB2BB5F6D729A5671AEB3E1B9FFA9A59DED30A627E86FA6A1BBA34D61A2BAD3C30B72F1B3BA9FAF073F90C0DED1BDD4DC538DB9F03E96EA37EDC55AF9D5F9828D7CCECF105AB569CFFC2FE5366623B02D3FBFCA8D7DC6F959DEEB896AD047E2953FF5F35DA479A9DC8D78CA25EDF78E9795F8C7F6521E68D55D315B7E18D0E57F497DFF0F8E8B3BF2DEAF18EDD39D5A567CB9BE2747B27E6E4D269FD8FFEE88F9E7CF249A6B1952B57F24E44B3A9A3716A0A9338809E226EE4E825A3A3A3CCA6CBE141A122C81B138560D823AF7BDDEBFEEAAFFE8A35C223DE5CDCD10297221502D087789BB0D46793974917A60C5308FF7410186E91D11B8ADF859A9A1B765EB65912B02C8A2B374EA8B2FBED107774D1CF8BE800A1BB6A2FB76449A2A148027C804DD053E17B31E75EF2A8A12D6A2EB03A94E43095CFC7A310C4D4F04D3D907E96EAFC40353553136AEABD2235259E5DEA30A35010D676CC8EA7E276366E654D23DEAC59A562ED85975EF9F56F9E679BA0D5F69049AB32B523C8191401C3E195E3C98D06938FC12EA535D8929A03F15708CA29B3095601240CBB44124011860B28EAE2871E8A8E317273E67AEBD7AFBFF1C61BD9CE409E1206C03B190D234143A890121A65D5986FCBEA0CBCDEF018FEBEFD848F2609D0F93D085B5E47736A79E40F3FFCB0A4EA335DF238D141E18892400C267CC9160CF36ED03AF362A4F0471B944B77876841DC1BDFF846DEAB6C4B7DEE739F13EC58ACD4D16C02C48DE15C92843A1C52CF2C72178DEF9738F4F85A5E8E99E9030D471B4E1033FC36F9C75D39F4FCD8FEC2F379E77EBF45954E2C6EE7FDEE79F9ECBC5BFE5A517537B6695D7670477981EAC1D8C6130FECDD9FF952A37E9939E00C68B7D7E7FA1B0AB8E6758323A7E9130FCFD227CCD17662EACE5ABC499D982ACB3AEEEA753B1B3B1438FB0D2A170EB3C1A609CFB060728018A22E4A50356ABF9169861956CA81BEF08E53FFE867FFD753DD3D947E8082E3A97E462638AD465F20FB256AEB34B469CD6CF3003DD61E988F954DC71B263A40FA70419FAD0E59F979A3D3354ADA47E285AC33FBA84F732A0367CDABD6EE7B66CA0A725D32C6D6FBFBC60F1C3F3D3A7F77B7DDAEDA89A068E78DCA9C9722AAA5683C5836694F5DD54F899D5E69EC9E919BCEBFE5AC6C8BAA9712EDA7B5FF92DCA53773FF63BC32324977D3D04C6A8E3A6F7CD389A7FFB7F73CF8E59BE87FC428A11D777D67673FF5FDEDB2C6E08473371B5266DF8D41ABE1D14DF1C0EEEB6A33F92BFB5AA56EFBCE26F9FD997E375159D348BCD2D850A57A9CEEEC582DBD1BF7AD0B285D4D680F060BE3EDE327D7BE7C67C7684E903FEE5D57D4DCB6A862147AF9513773341621604120126126F2A79434C9D208F64934B677342F2EDF418032B12FC0B8842FF19790319215CD527FEDDAB59A600741690F427B100E19E6AB7C592E9BCE645261064E9898EFB761132CE297E9BDE070B088382F1DA9849FF604C062741A36012441A8D62D4A081807265A45A95C55350FBA6AACCABF9A0E75350ABB98996C2493EA786C8690D3E11D161B1A1BE87C103E5A735544C18EB130B313193B9EB1622CF7E295A2373D3DFFFCF33B9F7BF6E5BDFBA79A2D179280DF236A16A00B157C2FD18C4614191DCE41964802904510F614E53F7977F1077860C0A6794501EB1F657651EF102846381ACC08FE57EA9F61D14B18A0502800418F1F0D9FA3F8D60572045943FC0AF7DE7BEF05175C20987AD2750011D73F8824004D0BC62D8F8165D57DF7DDB76FDF3E0430A4D58F6AF61BD6B2D1D123C648CCE5973DF1C4135957858E0F1217B83ABE76DDBA757C26DACD4364E2573E1FC16ABDD775072AD8E156F6C1A4BA30F42703402A1ECC6A8801097BA0A19058D9206CAC915A02D7213B93EA54326E723ADDA473880A29D21AD666E5EA74FDDCC0686EFAFDDE582379E0F1E995B59836D0DF58A83769BA71D3007517BEF8970F3EF3C38967EEFCCA4F6FDA95DB6156EE76E97C9B4C3D714BD3F1C9E5C93E9F06560DD62EEC763341F2535ABB594DACD3E3B37E719B723E3001BCE52D6FF9D18F7E043AE13DCF24270E4CA4F94AC35424B6C156D07A6880E374C2582EF3E496A7546F83F56D8B6DF65432736EDE6CBBF53B66BC38B9570D50AA41D7B5C76B54EEA34687F241A29431698E1979A2CDEA45B23270E9C842BC4877BBABF61DBF9FF67B2B1A54A25C4D75C62C6EAB52276EB53BDDBBE8F8EEC81E673A3634D65898CE0C69B54ED22EFA414A0BCE6F74530169697D53771D9DD6A2D97DB7EC8FA7529D4B9B5A3B30FAD3B18F25F441ABBDB1E8F5299008AD3B1238D3F65546470BB49B077D6B811C2F7121151AA7ECFB7A85CE9AB047CCF67A772477C25CFC25EFFC708DAFA164B0A699DD9DAD9A836BDD572E0CD88219F96A6EE6652348F9D9EB0DB7DD696EA9939FA06E8C6EAD66E7356672CDBBC96F2B47E29E3D7B783E51F202BCA9689660F4C0AC629302920BCC169133D8D0D24B15B6B2EC234900E17504111E713FCAF94BE43DFC01EF7AD7BB7EF8C31F62EF083E314B054D4E0DC3035AC8DDD14B5275914CA7538303F96C369DB4177B156BD4852458743B6A8BBDC9F8FF7807A45248028C580622097A36412C6213F4125299A7F724013AAB86EDEBD46787424546F3C3B6C62A6E8C6C229BD57E43F14D4BC9AA830D90156BD7152E453CC1A3B64D23E593E57BC6D46479EAC0ECCE5D7B77EF3D303B576EA075AAA99173B0A94B10B61106DB956A52A85422278E96450A0E2EB31A8D3D48560F7234F543119CE8B088316A5985830F0F0FB30C97F41BE8AA7C5B66ACD8DE7C1AFF1945D566262BAD8F25A75EDA55027EE4861B6E604D19D202B1AF3F8824003603B3187E0A6056E17D12E866C4D6B443BB951D314E00DAC05B48A2543471480F1BC8F0DDA03AE12D303F14AA69A2082333954FD67AA82C47B30990632308AF2215B66EDD7AE59557223D8305C935D75C73CF3DF7A045B3A04B512FBE1546D45CCD57900CF96EA2B4AEA57D3C1FDC5EA2F57C235209817ECCEF739487878F05EAAF50513F39FDD07E2BA8153F426F48F7FFFB2D45B247ED86D3BE627E2847FACD83F357145DC74F5E3BD2CC4C276A63F15BA6CACD207B5DA2DA678F9C5598FEC6CBD6E599FC2BB5F9BB15E141EF8B4A7A213FD16FC0FA912F47BDB8142F1C9FC02451D092ED2059BB663ED539A571734337F6581EB537929530BA37784923A97F32D54DFBDD7B1A239581399AF588B579BD917073A98C37DFAD93C972C23A3FA54F5ACE374BF946DFBCA65017546F4AE61985802E20DA4E746186BE59CBFF2A51325A9944B2E176136D636834E7B5F57DCD69BA918CEBC8BB52A3CF0785856433B01B571473E6E9951B2BA9F414D53BFE8DA956D0C8DF3AE86683DAC282D61C1DCECE972E703A1E595BB38598E13BDDB90D8D81D8D8CC8DA5911BADE681A6FE60BADE4DFAFA54EAFC5CCA4CBAF737CB2D7273A5FFFE86F7FFFBFFF38DFAB69436E9065FEAB01D67751343E7A6BBBADBFC4AAB5E31E3B97AE746B2CFA7E415547C90CCBA29D93EF2E118B985A82B4272E792485534DB42A8319A7BB2C40379C4FBAF5EBD1A396FBCAC088661C741F5416488FF647A806121D8390725013356E57D0E167BBAB2EDAEAB64E1F4F0D0605F5F36196796ABDC8EBEA7840924415823D06BD11E4A0214674963588A401418BDBA33D804CA36385412C02C8024087D4D4ABAA0BA2E50FD1E9CC5CEC67AA0C047D94009338892F1649885622A479075D0327055CC83794460C4F841A6EB2990896E27D8B3FB004B82FD13B3730BD54AB511B68453516CC3D7C5A3BD04E01BDC1C2E63307A7C3E864C86BCE5D9478487ED35D68511921157CCE146FA922C52EAE1CAF1ADD0600BA9F4808E92320EEA4118E15948848F26D2C87890580581CD4B09CE4587363AFE43D904CC31376DDAC44C1986CBE38F3FFEA10F7D4810A425A10D8339761629F57C62521B0CD9008B478BD4A2433008C88714FD32F5F3CB22D95F12637A285B479504328130D16097F07DE072C1E24AFA009E2E7B55246E2613F36A4E733065CF6BD6355695ACDC16C3BC6A8A8AC72F7CF5C5E14A21E1B7D2179DF0EC579ED69DC174C9AB7EBE44A5A4B5B5A95F6CB50752B12B4A29BB601A73B50D0399D2C0FC5D93C98BBA7EC669DFAC4AA15674E2FB367556EACB2736EFF70C1A08FA17E265BA9AC9A92F7143073B11C20FB3243D6CA91780417E2D8C48BC2FEB13FC5EA05225BC630B349D8ADFDA28EC1999787481924E6A811A5BB3B17AC3B9C3239772E753658CCC66D6AB9AC14871CDD675A5F98952AAC5F22FD98A35C84AAD6CFB1F4CB647B2C1CC24E5C9E898DEBDB47C76643233E15F442C07F56D2B8AD7B9B146C9B8D56827EAC916658673CD9942CDDE697729B7B17F66A83874C1E8EC0D5303A5FCC24325AAA5B2773592CF0D4E3F56D4F27E6A86EA9BD94E6A17AE527D3049E5BDAED0685F70BBCEFB5D7BD02A24127E393E7FD90CFF9CB953AF5DE4B39546BEEABD33D04AD60DEA7CA9993B60D41D2D63B8658306BB7AFDFAE10ECDDB35A73546A9994463458BAE23AA51AA99B02F59B5B0E205EDC2D3ECAD3B5B453F76870F62833908CDE3D8397842D86886818D297B19CAA89C0657B9786E04743ADA4FFB8837C78191C051810C25A87AD1A0E0A21A0AF98F2E5DFC33DAF0C201C23FE6F399B19191FE813EE6BCAA3764E8CD51AF4D4CEE1D1E8DE33BE02FD83CD09EA24DD0E4832A3D50D71AC82225CD5D0C0C18075D43E1E18585012C065858193EEAAC9508080D70CD57E81131439590A9A695B164DC0AD56733A1DC39CA53E47ABC01BAA85C539E62259602C763B2F03A6D6F6ABA343931B567F7E442A9EE74017DBDC84D60E6A3BC560F8186FC43DBD8CA7B45FD1EC2BBE9480AA6D6937F1B366CB8F9E69B01D60FA515E26489462CE7F316450E28ECF7CB2FBFFC81071E882AECC71F7FFCCB2FBF4C3D6FB5DC0D0CFD7013847A9E416888781D7C063405CE07B30673078C04C00B81E78C30943C25E8154EC31B83E145C1A5216650C0258E35A9355952032C132BF6103AAF02F359EA96912B25D136F4D590CAE7E05024A5205269CC577DE2139FB8EFBEFB248A23687D520F2845D17468FA83AC8EA4170B9E20DE5758BFCCFC625AB71637876DB7515B51B3E636B55B691ABC22E55E3FEAD6E29DDB9F1B207DDA64AA3655F5AA9658E1E727AE9E50F5B45BC6E86A961AA5F4D5541F232A927E7976A8BD6C7AFBDEF47AD72A68C5ABD5D3C73B66F106B3ABB7531BFB562C1BDA31F10A51B67347994A8171832E89EDC84D04ED19B98C530A9627FB5ACD7D9E4E5593F77E405E7390F4F95C92AA6D55BB9CB5A9D9ED73F5B2D952686EE514DDD0585B5CB9EB9EFD94F0D7C4E2AF5C64C6AB8DCE761AD2ADD94D26594D6B23F57BFDB574C3A544A751B603EADAE477328520369F2C0697F23459F479C39E1B88FB1315D589662841B3CDBBD2C9B9FEE4F50BF377B4B4497FEDADD99D892A3348AA1B0AD839D718AC9C347FD36ED2DB742DD17964F7A5DA3736FA3BA3C5ABA74C67CCDD7E603046CDA6D9BC2547AD85C2B54A12743364D59424E85CAF343CBA857541B2BB59E5FA77C9D842DEE544B93EDADC26DF3C2E3FBCF3BC5D14A3A1AB32B3FC73D0229B0A75AADE4AB1F9D1FACDF3038958BB95686F5B509D696E4A9D44C9176E99B3A747DAF74DD3161A5C48356F377CD63A59F9A18E672B6F8ADFA424A57DDB0558217CE6CC5AA1C081F0A2BA97E41A6199B055D1F61C5FF216433101B60C2C605CC277C316A65EA4817ACD2971BED030487DCD9A355353539FFCE4271F7AE821B9E7229147C7812C69388B1517D5D5861F1A1C1C1A1ECCA553CC79D54E40B23CB18E196ED15E374AA93B15614011B46AC58F7A1E7F1D8E79CD9594A1450DB78786892EC89A121846A07A7387918640DD9CFF0749C0E365B61FF62C56EC80ED15CB8A29F4694DF53E0E4D7B9574C4B7613ED0757D9601ADA6DB68B5272766A7A7E62727A6AB7547C5BB8D83189C9871E93BBF44448BAB4E2ACBC49514FD468CA1259C7D7474747272F2D5AF7E35CFF6CE9D3BB106E82B7DC4F3519C053E8E9546F11494B575EBD6BDF8E28B122945B017FA081461C866A49022E905CEDFA057C48B751768073053E496C15DF0E8A38F9E7DF6D9428B7C1F50B3804E0B8234C8FAFEFBEF3FFFFCF30132CAF707AC1EDBA770C2F09DD1FAE2689260495416F13124BD083E07A81CA6CC1123ED51F79ADC07294660DCA79C72CA73CF3D274652F47130022459483652F46E98525E359E1F24560085427C2F9076FCB2A55209B4B12A08F626C9EFA6736EA06DD6CB89E69F57DEF383F6FF540EC947022AEAB1CC68A2DB705B6555BFCB2CF2120AFA569A97EF75B7B2EE648F5FD26DF62586CBEB5EBCFEE9418D3AD7256A57B65449F0A67EB7501C6B9F72E0FCE72845C377AF9E99DD6D04CCC7ECF696762CD0DBD7FA522C161569C9545FBB51F2B2E1DFAD98D5355583E39C2A3AD6EAFA809FB0C83BA0BCEFD4AFDBBE9BF7FC99843E3E7BC5FE74706A7D5B83B4DDCCE5CD6DD9B643EEB66AAA418DCB75CAFAB16B49F7B29D7C834A7A2A13F76BF596DA43C9112F359D988B6DC966666B955B83040D0FAFF4761D98CF69E329636AEAD37EC046F8E344975AF67C10DF6A55E226F99557B9F664400B46DBF04CEF0A379E333A37782B3714F676E6866FA47A821AB751DFECABCBB7FD3AA922E889C9DB5BE419FAE5BA6F396492DE1C4B9B075878541DCDDA9261B196A278EB8686D1185AB8B9D67F2D39734EFE1E3F3970DC9FBEEEF58FBFED9F2BF56EF6A6B467E7C76C6B47C0A64387EE70A8364E9B27FB7CBDE9F775AF2952DAA29B595296E946D25FE9F7FFA1A86DD0128DA0B99D62A63D98E8AFD6CB0D95B9CE0B6B26F54CB55B02B9A25FEC12555D3CFE2057105BD497ABDA2F861E24F11960FB3375457B3AE921DEFBD7BFFE757000893D44571C3E1B2178FE77EDDAB5BB77EF068EB228349A34D892205B4FB752FCD430B56C3A3D363E32363CA492D03525E014E3EB9517B0241056883D190D1A4BA840316B03F13A0310417E003E8BDDDBCBC6E9C1534312F02E0E250185BE25F50826DB58CC3015BEA9CA208AAB0C9510A24E6191AA73146C4A78FBB89589C54D309176D76B36BAA572BD566BEEDB3B3137579C9FAB761C952FC4A60306CF9C1AE81CBC6C92002A0064516B0073AA47DAA11CD1B9713867A73078CB27338393EE31D14BA2E7837F81EF8BCECE57499D8854124AD59818A7587829C5802041BA0285F9CB781C9AED48311D337A44B001AD01BB840709900C297043AEAA6223AD16BF0EB33C245C8AA623EF1265C74C667C7F9E5B047B0F970414713441BF8631046B402C658825798B256C5A9E7BB824401A352C09F047FC49873AE8A2B2E188F7A79E658D97C554F39078FE016B8A1DCE3373E0C001556866266A6E39DEE94B0F77CC8FB666EAC6EAFE57ED4EBE9820BD754F6374EA842C0D4CD02E9766FA12D64CD7A72D2E3556C4EFDE677E901AC7AF886DDDE794C90A0ADD3BE70AF3C9B9CF37E91C5DCBA432B7353DF258031FBAF9B85265C2D9E25A19DE7581D7216313F1BFCCB0C4F98017E4518D8F8FEFDEBBDF4AB971D7D2BACBAB5E9B8C03961198DD54772870E79B0AFCB99FDC698A27A8D636ECC01CA0551AD527364F328F8BDD1EB7DC4ECB4AC63F9E327DBBF6E559BBDCF13666FCA4E35DDBA64E8AD28D2CE5B5B8D15C9877143A92997513D54C8D3EADA5BC60F4EBF93D131E7FC154E8B4137EA6459F207D34DBB76F501B76F4F2FEB93B28ED15EAC9390505D1EF8E6587E69C367DCC74465BDAF3819DCAB6065D6B43D2D283FA35930AD3F3DB797DAA6B525CDFC492BE99BEC7AE6B21485FB34FB7CA2C533D9F0A5F3E69AEF802D9B1BE0BB460F750E5FB3E6D98A38A93DB46159DF2A356E9535D65F7B0CDC16FDFA6651477C999D8EAC7DD42E7FAB964979A964EF76668BEA25D9908622D6B939D8E2F6FED9D769627DD4A9DBEDC50E8A56DDD24C353584EBEF264B84CCFCAF3F699CF7CE6DE7BEF4571226F015E08DEB3705722DF4C9A83495E22DA49C997518000C962D022982B279C70C2DEBD7BA1C24665C9E1EEDF25E8F7F0171DDCB0FC0056EE78D0FBF6ED8BDA11E1E654F7B162DAF0F0D0EA95AA5D81DA549AA2ADAEEBB04D004920EE20D84138A25065F00F88246021A018962F887587B4B10CF021B411D4C9101E07F1D1345BF55D60511016169866DC58042B5556C3629583622876228B0A6105F5D5F1CB95FAFC5CB954AAEEDFBFBF5454B9B97E9839CA3601C6BF6CD932C0B7F22617A349EA06846145ABDE0E57188FC1D931EF92D72F251E4BEA18A2E7DF78E38D9B376F964A10293BE45F590CB0BA2D1D7445A5A530C8216868F89E956B3E93B930C2D41870B44882425B9269006152B892412BCCD180CA09060A87128F070DC850EDC5E7A3090CFF247873B01EF892934F3E99D570A651E435A3A8F888DE21411E04481CAF056F1E8822FE57D243652196A4A8D1A136E812EF106C6A1EAAEA2316625F4BD8461614D178F46B5BD27A480E012A87570AC56E3CC3C0C0401ABEDE8374545697795CD2DFE95AF9C6C5311A98A5BB48B1307EDA06EAAF2D2B3E38A140EA3F1B42D5FF0369AFE8B15B92DDD94EE23E27538BCFDEA8998E6F7FBE5BBF8B56EE5AD3DC3233976ED0CA78EE0D235498ADFC438BCEB34E7A7EF48527F616A63334A0CFBB15A55F5D1E23C3A2AB1A128B42F91EBF38AFC533673EDD2DF9DEC3DDF1727A7EBCDEB988B49215DCDCB5BDE1F6C08C7676D2480FB837EFB79A85AE598DA53A8E4E469906EFB3E67FDB4DDD4FD534A53E3CDC583543B7109575D541F8928C8255BBB555888D5A863F37B7D0D5299734469617CEBEF8F2AB3F7D8563B5565F7BDCEE5889B62EE8D5ACAF55733E554CADEFDC53CB27EFA0F3DBCA47C0DC6F335175B576F5013600CADEB255D49CA3A27F2159B659B9CF4DD763AD9CE35DA31C65E6CD54B88D9A0D0A36A6ABF9BAF109D206C97D848676A48ABAF2D29011A7FE8EF9B9014AEA83EBE7A6C768E8836B66F55762DF23E70593D6BB0383E46C5C5B35F8D141EA72B351DC677F3FD72E5614F65E699845637763975C9BEE9BD6543441CF9D6399C9D50BFF738E3E3EAFD6EE6ECA5492B564932EA313F69DF0D2775E4AB433A96EB2EDB4EBAE022B35E30923F0D1AE83F72C5601CA1F227F02C0CEEA39A00198A2F804DE6BA266B1C2819CD12516B31463CA8E408C50808DF10D5F025D33DA890F5B00AE0B38600F26CBB11878EB5BDFCA7F3FF1C413303D10C743585969E814E47299552B98552ECB645286AE0262ED2EBF5E1BDE21A95D845F088EDD285E69541228A7BF1F1C0C8A6A08B2634BFBC27315CE62684B04C27C15B044C082286EB3AE6FAAA085AE85718BC5CAA9501D76E4CE763C1BB3E328D3ED74DD72A93135335F2C5667A70E341A61C9854209B78245B00C1FD6197FC08B53CF1D246E5F245748EF49796BE13E62221C8DB3A3CC07169824141D9E2A800F0F3DF4D0D9679FCD2780316DDBB6EDB2CB2E43FE9624CEF34262B4604CE242111716F83EDCF4D4CBB54742AAE06C036D0D3A05E2E102A30D162CCA08326B59A9BFF2CA2BB76EDDCA5731EB671D07AD80A3E2506AD90514081873D1E00A1D294E103DD6AC5923DA09F82FB610724FA39D5365DEA8577776C438012AAD1037A61E123B042D9615E4CAB304DF0E2E9715C1372221C43108550BEFB872E5CA0F7FF8C3DBB76F478A8152C1F4FE8174D173FACA9FB334ABBEF62EEBAD6FF9B39F7CF77FEF7A68BA6F221B6CA9AEA4E5BF2DEC1FF8DCF19D855D2DDE43A3D6F8C695B5FE1D55E61ECDACF5D9B693EFAADE26F7D21F75FEF8A9ECCFED6AA23DD0D2CFB3D6EC3E75E7EA67682B8DAEC9745FA20F9DF577F73EFE106568FC9CE34AED46FBBE19294E14C43D9ED2BD1FDDE35535F7D1CEF87C7A6EACDEBD80F45ADCBFCDB33B03DDB119EBEC7C3BB068FB8CD52A7463353BC393C59C3870AF31A9D0C84D176A5A3BDE186D7DE165AB46F174FFF8AA74FDCC44DB6B2E3CB8DF68C4937E27D062F6CAE5737B5E29E4ADB946574165C4DD551F5FB5475BA0AFD4CC5AC2355A395FAF187EE293A7B4D22FAED93658A622ABF9D317B95438217EE51ECDE8B483FE4C2C5FF377DB7758D6EEA133EBEFFED157BFBD502E791B1BC36661768B137CAE4C6F26FB67C7B9835DB7BB8F6E57CC63B493AAB22C0FEA258B99B766BE77C0301D2D36D4CCB839B755F9D2F4BA699A8B0D54B66502679ABA6DADDF369EB5285B757F48FDCF8D3B6E2B46D9627E8FCA53F910D10A32D836EA1F6E561D1A2BD27A2AF8B1DCE644B76A4F6E6FA68254D598316E4EAE7D7ED9CBDF7899DA66A26BDB09BB1534DB9D26297D57D1181CAD68700BB506A0BC2021FEFEB4D34E7BF6D967F91B3E13688C9FFAD4A7F827DEFE08DC3221C1078B28A6A05B623731F949332869BE0BE2974C6EC42A60460B18306A3F11F35B643E146646F31067676797D4CD86C244ED24CB3247860A2B562C63553461AB7174147ABF0A2176BDAE788744124443058B4102E5BF89859B4D0BBC431BA9F78441EFB13EBC4F8B0CA257AF109019C6D099C5ABCA8698D16B5A498BCD52428D95202DD5A3752B2C6EE20BF56ED72957DBB3330BC562B9522C75BBBE42CC53F690C211840D313838C44FE4254166BA4C74341F349AAB23DC768953E26836013076F03DAF3AFAAB1CDB8680FF075C15B811F08C5F7FFDF59B366D42674A490317F84FE1E3E0C84C6DA81F79FBDBDFFEDAD7BEF691471EE15FA389ADC86BE29B7FFBDBDF3EF3CC33A17100E3881922D3229FC68C1E1A0A38FBF8F838EAD144A421B48BD787552131555693F9644426401E479404523F41BDEE922C6CAEB8E20A385E00F48680DB119B05C9BC2D31D496C409647264F96088A0FC0D5204854210FC514182435559C6E380A70DD1BA5ACCFDB14CD8B1E2F743B67E4B6B518E7253F146B2434D66D403ADE30BED9D3B33BEDBB453463B96A04E4557814A669A89C4F2567D8282F8B2A03E4D036EDF829DA054ECB50BB3CFA8FD11C48895DDA65DF51BEE904F0D4AF751BD6890E3196E62209DAED64B0EB99EAD9A7F69654DCA4DA3B14485B798719341CA6F8D959D26E9937136213AA966A6A97AAED8E1FCF3D726B55DDDA698637496797D0D725C6AF05DA772BC6FE8C47AFF4B6E2D3029E93ACD94CA064955A99909C9B1DE64538E2A359BFC91D38EDBF3DCDE5C7FE28C0F9FF1C457FFEF8C9769CDB51A298588AA359C4E2E6C52366BD2E0E0AA85E484F78A6BD06A6B74776C4AB1258B72737D9578D9E8C48746935395D2699DD17D54744EEA18CF66339469B3C56098654BB57E1B75CDA9AC9B6EF7D7A9DBDF555392F4A8B5825882EA35C5933FBDE9A30FDCFA0F566338994E97BBBB5ED54DFCD66AC575B2DA094795F3F1D30A9ED56E0409CD0906C96FC52BAD981BAB93911A6836EACBA8B37F1D6576646ABAAB273CDFE9B242BBBC4D7E61743235C546DE506EB43833AFFADE245879F70357CF6413306A99BFF3BF9FFDEC676FBBED36701558EDD8D4480D87058FFD08080A49E5FAEBBFFEEB1FFFF8C72803E2ED2328875044A23E1FA90712030298EA824D2DD503516A3F84F940F76182466483CF08B7CD2214A86AC8C3F49D8A8F8F8FF2AE1EE8CF841A3AAB695D9104A13EEE1DD13B247CD3A04566BD4412847EA040840136B3AF4614024D1F2A09541FCD304EA0BAD6841163CB8C61B7C34BCE6208E69817A209A90454D5B84261CF2DCC978BA54AABD60EA535BF42C80BC80B4B91CD934F7A15BFCED4D414F826E201C2FA71F0E3A4817B548D3D2419EBE89C1D8B114D3B59825AB1E47C187DB02424DE8B2587FD08C41B542FF3E480359F74D249285D16DA92AC4A383170B2A0BF89120DEA144B08969604B40175C74AC3C4C404CC88071F7CF0A31FFD685475805F886FFB99CF7C867F65E1C4F7E4CF5BB66C8936553E5AC4186616183D7FC362808501FA150B8C1DD29FA2DE2461D6D170F1E192209A80B48851180157970C0DDE87AC64EDDDBB17A0B351B3EF70AB8507C32F2B85BB700D510818C00F8241F3C642E29745D6765A093DD9F4CC4C2E5B6B94B3E9FA2983AFFBF9DEA7694495110C05DAAC1BD07066A063C4E6DCE9612A2CD4CB41DE49375755DCE34F78EF8E3D2FD5B5C9DC384DED2A698655F7421A2BE8B4C0268CE1975BA4399AAFDB46CC521D6514804A27B228123054CEE5545FA759F6D2E16F1D153136B456AB5FF5DF654155A094498EB532B37772C176C9D647CB2987FC1C75260CBFA3366F56F5571B745EDF747634CDD6B8956877DBFDA97CB3D49ED42BE4F8CAF363C5A84B851895129ADB8C1712297EA7C116CD9BFAB06B25578FEE9ED83DAE6516B4A6DEF1DA266FFB34F92A8EB86224B773FF4E3212635EEB00654F3C75F58BCDDFD07ED3706C8DEA06C53BC9CE7F7BE75FFCE4D95FE49D8C5BDE5BF350459A27A746CA2F1667ED2EDF6D95629476AC76CC8C3BCDC680965B48754DB7C5824A1B6D349F2D0CE45293F624CDC4546E51CACE36DB4150ABB39475286B67679216C51AA4B5B485786076B43E4A35629D56CC31F3317FD2253313D8CCFE6A09DB6CCCDB0E7934DC3FF6E76F79E713FFDFBFED9BDD17A848A5B6BCB06ADFEC6EB6C0E0F9E9EBEB63D2950A2495F1183A3FA385C4D21851A80B7C9C25C18F7EF423563504AE2E6AA3C3B729ED46A225EE62DDC2BCE69180F8A3C525517EA5A121098FF58C33CEF8FEF7BF2FB63CEF20705E5D856A5531D7D050617474B830A840334C5E6CF2A39200DC5F22C6D186E98B416342CB012D0C45ABA6449AD6F3BCF75ADB532F7C1746A47D651F2C4A02D54D4E69F2E487B8437A585FA624412A915CB439147C8D32F37976C21A2387EFAECA23DC80C542ABE9144BF54AB9D6AEA1CC4AE5A77ABE1728694776C28A9909405A22F42A65A251D1CA93C89B9C27873779D4B92CA1DA2388D91E6787638E5708656202591AE52C4B2481487BAD970C8E50019E82AE907C5B04302115F8CB37BFF9CD3FFCE10F212AB41E0E9DDE6B5C23AC100B043F18540C8123C5CB4AC1D19D77DE79F1C517F3DDA0ED4A0D334512A225BD073E74E946201388E6C0C82B3D9A77086313E545DCA051E7D297BFFCE5EF7EF7BB3FFBD9CF60C780C781F6B40880C4E1DE21019F88566062E1C4D440701578D49899C36500F630426BEF7BDFFBF8E44B2EB944EAB00044810143E26EB97EEBC6EBFF2163FDAE5326276ED81DEFF4357FFC8BE99F53B3A0E9A5C0723364E6DAF6AC99ED1AB39BFEEA3D0FFCAF7F99B3C3B6C00B669B92F95475D590FDAB729B3AB981A6BB60372C2DEBB6824CBA96ABA70EC45CD3E95814BFF2E62B6EBAFE965AA3AD42BE66BEE93474DF158026EA614F2907603ED72DFAFDAAD3D882F23FC5D33C79E435975172221D50DB1F1E1C5AF38EB7FCFC5FBF97AAD51BA63BE8D2BC4DC99C65CEF0E9F92699A9E1B9D80C6BF3FDFBED723C96E834BB26A54DCF6D5BAD91C0683A9D6A5F96CAAD55697B4F9315F27486EC36955D4A04CBCCD169B7EAD61A69ABBFAE15797DEC34651672B37D1D2AF7AF5AF657FFFD8C07BEF40D7BE08FDBB34FF653AA491537468193C859A9AEBFD0E2658CE75FAFA79E6A94BD0413B35368B1DC2A4C697B528192085A32D770BA434E67D6F6A99D22968C5AF5DCBB2EFDD7F3BE5CA2A94C2AEF37CAB5B8D3B2F8B9CBAD525D8F55DBED416535301B88F5679C498FE26DABA3E2989A4986BBA2A5972851CB34D848EA7A693353775B2B29D8CFB2D0EE260C6A3512B9B4A775BB9DB5CB57BDBCFF85783FEF02AF55F2D9904B0D263EF6B18F7DFDEB5F4731301AE1310B061300CBE62D06EB59FC45E22E167B0EEC8222D0F44C69D20596FFE5A77CF18B5F849B17D9A580FCA23025843FB0D1FF918F7CE4C61B6F946A01EAC5D5A2B98E8B9C28E426253E5523A3DEA887DDEC1CF18C436BE6C7302B4CA6AD6C2ECDE3B378285EB7DB6E05E4090A9894DDCBFE719D83AE5BEAE11084AADC21A2428FC088069143766014CA1F27C35D6359763C1E434F06D5C12E1CB08A9F049EABEC03D60A583674DA2D16A78A2934EA9D688213456A02E848874C96F06E5403F82156FE073FF8C1871F7E18A2FB6B5FFB9AD427C31D8F8C78247B61BDC5C524778BC2E3403345A06549877AEAF51A13734F381A02E37C7356DB592480E1F27D42C3E8F7EE7D864C628C41120FF8D1AC9E5F7AE9A514A63FB18478C73BDEF1BBDFFD8EAD04BC02850E74E4334043416C96050674104950A6103B0880A96C2EDC7FFFFD14715FF44A4C0CB4B68F16BF601E98F098F9B25D02870C928260E2C0498AABF013329AA807A7C18F7BFCF1C7317BD13914945649FEA148AC05EB88F28868CE867E6843639C26095D48B1553FC55266BD38908DCFD43A5A4C37BABEAB8758D52D2D4D85364DC5FAA8558E27529A156F0745AAF21CA4B23E6B9D4E5BD7FCAC67F81E6F46BBA67AB3776AA97EF28A31957B339CA5996A5AE9F26343F1E27407DD9A023DF9C94F7EB2B430FFAFDFFA474757FE24D58CDE48078EBFE9868D57DF70753C8883F8A35D169849F1BFC23ED0BA1562DEF652F1845B6D355D668E85245528D5D18788E62857B7F7B3C2B62E3E385BAD555456AC7FF248EAB9D9F95436D9E0F909D51ADFF113F1648BD5EED0C12032520B41B061EF222A838DC0748B85E07986579DCF17AD42348F834D767BEA3654E66853528A246B4A873EFE15A9D247DB17927707E500B782B98C617FEA539FE22DCF1A21AB0BAA8229EC29CF54C723E491F078801B11D5EEA307DF1C2A0E583C9FCFAADBCF7FFE7394DF239F2DEA27B8EAAAAB986859EF1164147C80BEC513C55ADACD37DFCCF4C99B4226966FCE037EF7BBDFFDAD6F7D0B247AB44A3444171413E679E169E59131D30C2583B138627244A188C50CB07B1E8469A9D91F2CF427F9162A461B322983248BD4EFF58A5AD4912926DC3FEA4C3F5C12881E47472AEA8962DB454F0E733D2CB486C7F79EAFB898AE38A9DF6A75D80E28162BD54AB3DDEEB88EAF6203A1A57C7865EFD1568EDF1A4806D42B7685E1221C4D405DA6A7A7A3A95A0F3EF8E0F9E79F8FAA60D61CB76FDF7EEAA9A7BEFCF2CBB0DDA05C030E10942D2101B036FE063A26EB0EE8BA2E7325016149BA97EC7E5415421DE00BA150FCE70F692D2949381280E20133C14D4E4E02F91961095C05FE0B33223A037C3E5FC5CC517270E1F1E70F175C70014B97647880C9321B856B2E8A2247BDD0BD284100CF4141AFD6435196BC29EA75B611D21259FBAA57BDEA37BFF94D54E0214100E216A178ACACE08A63C062DC483A87886789A25F7FFDF537DC70038C2D6613BB77EF5EE45F5ABC3FAB552BED65C79DA0EACC83164F6BCBB14DBD1578594FAFC6B3D429F72957A555A1567AE578B334E9EBB14C590FC874124EA7E5D2F81B8E2FFF62678B066C6DAEA927F89D6CBFD64AF55150CEB5862B5E95AC8E4AE3B153546BF4F38EF6BCF97253755B0CC8B04C4B8BB75B9DD7BFE1B5FFFED4BF2BE33A74FDA1109D1546265ABC91640062539C7EFAE9BFFAD5AF28A3788161E5FACCA185D909323AC680E675BC810ABDE3036FFFFABFFE98E54FDC48A403B3AA353E78E5D9DFD8F6E5AEDB61633BD797E5A79416CA4CDB2A5E12822B00AD0FB532C22BF55E1F85F7BEF7BDCCB95098C2C3E02FF95F10306AA1A11E615DA004083B030FED6999076BA6B00A4C874CB41FFEF087B76CD94287BA700FA77FD01BAC70D460C2A90B956EF5EAD5BB76ED829040AEC1F8F8F85FFEE55FFEE33FFE235FCB940005E81892068E59A908938E31D1D78166C32381C8A1D038E04D21B5F110E4FCC4E38F3F1E68B81469CD84B738E9A4935E7AE9255C723449206C56E3D7E0197FF1C517E371655F187A6C314BC96B8BE1C003EBA8FDC61B466792CDE532BC6973D9740843A47C388BCEFD9EE335E89517841B52837B0BFE5FE1FE2A01F550E0CFA8457FB84DB084716BBDCA5E960489F088F58EC5458AA9A2AAE242797676616E76A15A6DA8F50D8E320B47CA5D114980A44C8C01DC9FFF656687A2412811D85AC8B9648EBF61C306291184F017B50B6F0AEB0F7E15147F826B838347B38C252F984987BF018B14D8350ABDD2AC149C73CE394C1C7E0FE75910C97F5F9B20EA61D723FDD1046561C99E1109443D158C298A7F42E349FE9345E0EDB7DFCEA365FB94A7457A5E82EFC3D189CD26C1799E31BE03B3067E657E048ABDA589665443D47A70D6D1A651CB962DE33B63DF620205FF957A625B860D1926941044AAA6E17D82EE2930AED8B13C064805967CBC703CFF175D7411D01F1115E70103E6818766DB6E9BC54D90CCE5F28DCAA44E7AC22878C64CDD8991E1D88978BB96562D8D13DDF48A93EB3B9FC9FBBA1BA84827E9BEE9939FD07C3DE8F7E24556AB8276C619EA92DB318AA9F4985B99EBF415A8D9E8EFEB6FCC1E88ABFEB84685A58245763D964AA48BAD9299B41CD5D18062BA459EAFC70D0142E02578DBDBDEF6E4934FEED9B3476276C84BE199FF8BBFF88B6F7FFBDB7ECDEDCB0CCCD7262C5242818FB26935BD011A997A6B7AD52B3B2627F8B6A3392ACDE6E2764ACF4E2D4CF7E5FADA2AAD4D2D564C29CD66B3D5E4AD373434F4AE77BDEBAB5FFDAAF812B530B39EC99EA78BE793570DD11AD4E10BB1494B258AA0FF6B11546069C82341A62826209826AF385452583C47DB1742004266C27325B51A67627F45AB2CC18590A27334FC2EB1F591170E6051D849A2F1043D70213960E30AB03CE85C500FC4BC330FEDB8251185FF9424402E20AF8161C045A5F79EAD47142EC30F2BD454FC58E3A989F1D40F0EE45924C4C38081C48AC1DDA8E7520875310F0A353C95E2D5E5FD1265C47AA4E7A5E8EC51E00A39010E169C03D38F9704C1C9D053145F24054F6913070E4CCF4CCF55ABAC86F8BA7223F33A75974C81C89A23CE91E4AD47EB8FB078200566C4E8F4C2A4CCF40A468378A672A62593D2361AFC0E2A037CF79B376FBEEDB6DB98887143B600000A8FA62B7C7FBE037470212C3068F10BF17DA255CA5087F90E5A88B8191C1340FBD89240AC3179651E0F5CE13C24BC08202860C488E704C939D8DB3C6C5E1A3E19E347718D9829E2FA44DD0DDF0D521089B628EF40E6B51EB6F7C1B4441D6B92382BD9143CAA356BD6B02A245C3B0ABFC197A04D1046C8E6058C2D545A40AF94BC61EC40E9754C618898B7BDF4A8A1D014E3F3512E84D239F82DB12378E1D25AEC639FFBE83D0F7CA153567DB85BCEDC603E5F2FF2966EB463CA7D637B5A9BB97DE0B07235FE2767FCFC89E74941A8EA05DD6DB6CAB1FEBED2BC9BA5FEA2B9CF5C47EE8B6405B14C225777FD8E561CED1E3F957839C3C68242214A1DC891D76D582D6B15C576502B6925F9C55C4D25BAE40672D5D9CA486E6CBE3917EDBDCC621B762D4015A39631C05659ABEAD757CDE96DADDF88D5BC6E779A52BA5D2DB45333566398A73EB12ADDD8339DA4462A99657EDB26753796768B7D96BC2E4B0AC332B2891CD3B68482E07E11671AAB563C9F4C244C06804EC1F2F1B47FE10B5FF8D8C73E864C0104C3825E3B20500594093F82B849872673078716D0F09245159A2507AC169E8DCF7EF6B30F3CF08074FDC316901A20B4848468C1E605FA0B94D1CF7CE633AC0E1E8DE762B380B450318A9A1E307AA90CE713E00882F523505AA267A3331A760ACC11AD578C866453987AD190EDE1874CD74134F66653C925CF0D3C1FAC3C80AD815988590AB68194D74C25CBA6D389E1C2E0F048A12F9B512D0542CF3B80AB4061404A828C42D50376084AE0906E4A915A2D513F253B4A5CF912F1839A860F6001522E914A65D4E38C1061224C0A2A576AACEB4D4FCF96CB151EB3A994052BE48FED288F8B78A88E3C53D2A55D9C866CCDB1ED0F3EC5C635D82258031404F49167E24693484C02335026653E0D1A28B6223276204159B8C2B46432C5B6BCF8E28B999E009CC9FF32038D9AD56216F0255227F24FFFF44FEF7BDFFB24EABBA472ED3F736887D6E8CAD200DC1C8A89003E8336F02E22AED8BABFE28A2BB04FCE3EFBEC2F7EF18B181BEFAB4F7FFAD330723145921ECAE3FFF8C73FFED8638FE126BC57D7AF5FFFC8238FA01501F247A13409DF073BA09E47580251FC2FDB04C8B016FC45C9AD86F30DC3E6097FCD6B5EF3A31FFD88576A6A6A0A7C1CEF026582427713BE91DC50EAA5EBF1C8996BA02A5BE0BE21E7D83404DE06CF7FC2A366D2F359E3F7FA13D954B1B39FD96426990C8ADD7ACAB0AB669C1A158BF23EF5BBD4B73AB16377AB3E9CF58B9D11CF2EFB9576960C9F8EABD36ED2BB397F6565E581F8946374294C15A596457E977518AD130F9C0E30BA121AEBE8C957BC265555DB74E62B9EDE4D0FA4EAB38D34A51B5A031C0DEE4711C9528F12CD3753F2D2F28F0BD64E7476B52D3A75ECE467E79EA7389945B263C383B1D57BDABF881B34EE105B3573069DD4FFC72FECFD398FC736129669B9BEDB725A9A1964FA32DD8603340EBEFF19679CF1DDEF7E1779C39270F5E10F7FF83BDFF90E6F01F1D4215D4D8F405A458B7BA2753F92E9071E1AA579AC3EE8E475AF7BDDD34F3F2DF473344DE8BCF3CEFBE637BF09C90409C4120B355F880108E00A9CECE0545AA44E78D5AA55A13978E4FD05868EF12324C6FFBEF39DEFDCB163071B67926488F3A3502BD8E950FFC578C26694BEE8708442D6429996D4C1238EE760DD8C40CA2C2C280F064B8256BB95B013AD760D93189AED64C67455CC1EA06D0099160DE4FB474787D9324824E261984F83F90C5B1E8001EA955C1FAC5F64DD6243F3C09379914316236A1044537420602463241477CAF661AEA8870845FC46AAAEAFED2C944A3C41B56A43016CF5403D559981662E59F860B176C13BE24C895A0D3F03AFFD9FFEE99FFEE0073F10BF81D6EB9F05C601010E29082340C043B0C09217CC775BB972251ACB80D108E7E2D7E413E07F60110289224DC6F989921EC04F81124DBD444FE9370285EBF7B509240821732E293AB091796F408B9483BF04D28EA442E37B0010014A0F99AFE8F3071926C164D9B128BB03D387F70CBB450027C4F12806324564B9D8C2D22759901771C0E12066013F8E772CCFBFA442898D225D9F10F0E0717EE0031F6005F9C9279F04F646341B18A749DF8F6821055FF5F8DD0F95336EB66FA0BBBFAE25F5567F7DDDFB4FD9F195E74666E3D36627EE273AD9165D3040CB72F4EB260DC4C99948254F69DCFFDBC129BD93D36B67AFA2E3780C75DAD83AB572D2B3B497B42AAD24FB03E9B5B3851DCB26CD1BBB1A9919A36FDE9B7797D1CA0FADDEEBCFD2503EF55CA9F1EF0DDA41292DDBA6866778E4502CB03CDD45C5197CEB62B1414652CFF7CD94C9D2945FA1DAAA356B0DFD0AC33FD9A3E75753373E1EAF4FDE3231EED2A491A40D295A3947D5B52A8FB3386B3E4A6E4DF9606DC376DAA1AF23667A9AA3C7F56ECD61FA446EAE8458246B19A63C103B102BC692F100F8335601E42D09C4D89858EE37BDE94D4F3CF104985A1462011A4CB473B5B8FE8E260940273C4E9E1960F844593C6E22EE170C03A20B8A1DD8F431361DCE475C977A513DBE90DF8E0709CA41640523841A4DBD9A24096BC16C824685D80046150D644AF4F1187DD70F66910A7E8E02FA0C2BBF286CDB42DAA2A32D95526D639BAD3A9BD146081581060609DBCAE53203FD7D219881CD2390D26AB14770201145120717D94DC41B239B39BADBA39220E8952C2D36490849B657C8D6092FD4BC109C4349B2966AE2DC6876231DB8A489F2A22438021D68C742998E56159C74D2492FBCF00245BC72606102F3CB1312ED23017E874602BC48901F50858040872594FE6270FCF169F0F59F7FFEF96C1900D8802F17FF29880F6E6EBE33DF07098ED81ED0FBFCA3E3A41F8332A2BC159200E28DC7303E3EFE9EF7BC87B5FE684347DE36121046348CD9222C18C842B4DF434E348222B08891D500D6132DA60753802601791FF5DD4BEF2051204474E93D586C0116852B12F483A01F9ACE0BAF814F2F08BBBF36C243DC77A0C025160F362AB25AF94BBE613403079B50EA15F859E9963DA5CF59F95CBEA8CFF8A565171D571A28FA33A5E0DE7CDB2A8E34AD92D6F5AE49A53C5B7B60416B51A093E1D0024FC62ACABD6D55BE10DFF3E5974E78AD7DE0B4D4B6E6B5E73DB691D2F513FE7E746F33D0BE36DDFAA84ED63AFACA4BE66ED28653F4AE11634C6F7F69C7C824953F1F4B3E9B2B7E793EDDC9B7A9EE9A0E196479F1AEDB01A341426154FD8427017E9B8380B53905075CB858AB3403E726DD1AB43B7FDF1C1A4EC6EF6C4EB2117231B915CA6FA7A64EB92D89D9796DF889C4CC8B0B2C75D28974CA4A571B559604279E72E2AE175F913C0210BFE446335540B71067112F014F269F2339637C1AAC4CB8BCA54A1C309FAC9C7DED6B5FC3B40B3239C248B029F933EF4A74F79562DD23D27FB4C211A6125FC853213C9A575C767494C3224688978AA6501FCE4FC45217ED1688BFC8ADA2D04D24660DA2B64B6004C1DC51FE097920452D204EF8A044B3090EC55B8C1E129D55FFF5C21D291464E18C6472B126767C7C94DF7C7AE640A9C4DB4373C2B83A42AFBCE9FA72A94261201F1ED15831C232A1E1A64B4AA2307435383A986C1A092F2F1E60E251D40AE91B059519AF1A527393C7DC554E2CDEB7AA9EB0D96C2917906EF524DC2108482A7B3ACAF8A8579B4A47169B52F124798A48AEC5F2401F9484FD2829A3EB3A345CBD87712D908102A48314608C10420E6E131093EC842894345F1284CDE879D5AFB9E69AEBAFBF1E6DD6F9DFA86D41BDB0C1EF250996C848BD7748C418D412C5EE17D7243C666BD7AE652346A60B9E9368DB3C34E11340690AD5EAF5EBD76FDBB60D15F000F8C4544777A07C901019C6165D62C18896508A904A34E267F60E9E6464225E7BEDB51B366C8886D9C150B085821EAE35D260E43E583EF89D9084CA4FFCF8C73FFEE0830F82E6F3942BC52B5A2A9929B6DD413FFEC9A1923D6B25A97B798292ADB106CDE8E46DB3A862D1B67A9F47656DD5DD977EEEA2DB2F31CECB7BCB62DE5DB3B9BA516F0D79B74FF5B5D67957EC696CF27CCDEFDF9C2826793A5AA98B2831D937FFD53235C8F295A2A6F90993465B37BCB28256ECBB699FDDCCFAD4D173CA65EF3782BEDCC1083FF5FC5A227D29D2FF16CBB4C23D6E371D08AEAA9A2B29F9A9788AB25327CEC5DF3E6425E3679DFE7777FFF61663743079497F8A16A6572DE4FEC7D8EA97F22F3CFD6267D653ADE329EEB1500E5C3B136FD73A327BD40BC342E3E159428E1C084CD237F410120D452DD085B1FA921B069ECE07D2C924972C9AB6CECB2700E9FC6AC8163B868604CA81A904135FB29524044DBD6C25EC7D7863A06740E1F80F333590ED060AC11DC043C460922C7909EFF7522543F89CF04B69F7248E77AD872F247A957C3EB677489D10CD5E8A9E2D799F92DF1D154A3D74071F9A112F613A150FC7A3A36BD822C8A8AE5A0DA04988C40F4076C2EE835E89326C313316D643863EA54EC7E9B5013215D6603A0D9B803F68BD0E218EA7C469A7ED28B9E3F03CBAFCA863F8C58248B1DBA1F54D3E18314602670E34506891920EAF85A09E121B179A93091C1D1D9D98989035964C27796BB17025808CCF20593E0D9DEBA34C59FCD7E228170C0C1010D41F6C6C29EF3A8661889B4795170098E05AA9608092858C2928E9D117870C809C13EB55DE5720AFE1207ECD6B5EF3CB5FFE12F1C073CF3DF79E7BEEC1EB60CC2880C02E82391F8DF7B2C0DBB2650B1443497994ADBE24D34CF698B00C6C150A5D07E2F117EF99D2DCD3699EF965CB96F1C2892B0FEF2B0E2290B1B42D425738BEDB1BDFF8C65FFDEA57C0A986EB96225D9429931AAF3566D894D4DEFCBBE19FD27929DADEA04F133D4AA9996C9CF462A64D9BDA343798CCE8CDC46C7AFF3AE7AEBA930FFCCF4D5BA94477738B55FA969FE89C6FF49F545FB8304D17376834D0AE1C185C5B9E7BDE223E815696EEDC3B584CA729B6472F59B94CB2E4D66E690DEF8D1D78C459935CFE4AB142B64FB6436E47AF274D5208FADD20D4037DF54BA74B419CCC8E02C3609554014BE4694E81AF65295D1D2AAF2ADD3AE1945CBA9362F194538CD1CD65F253E69585E0BAB98CE936AFEDC43432EDD595CFEDA6B4419BBD65DDD109AAC55275BD411D8D2EBE6CE3DDDB6FA1D0A7AFF56ADD05CC55FA6AC9DA89CE4BBD1A822519E4A8E6C1F2F11DCE3AEBAC471E7944D4DE83937FA49A7F7C03A72528EDD65B6FDDB87123F8FE31BC46BFD701972F921DF8CEA2A0401D94021474D516A68C2D03DA8E3299C30F6C37241D01BAEE701E1E3DE04F166E2F9586076F080D57E617E6210414DA8583DD441B94473D397836BFD5407F9F659961266C8C85016F52B4A001CB16A83C248A489998ACF141A8224D89819E41008D1E9183455703F43E8813C511286031C0FC850580D3651D93F9B87B8C8AAA25CE653A9845EA058765B5D2A11066F846E644DC0E5149C02C8F6994F9267A5048504E027460494889410C8AEFB366CD1A26082C8CB05DFE9EF56B26776694509AA40F41D0AB279090495411007D43793FDA3C80DD4B2628B2BC81321D0533E16FF883E0A2086C83CC24440E4ADBF92602E22D0807427CE0B314EA83679C71C6BFFDDBBF49C30DEA057EE5B9029285B41FA493229C281D9B615F4289432C7D7878981F2159E7D227443C4541081817C5E28696C3B75AB162C59BDFFCE69FFDEC67A8590B294AF174BE270B09090CC0E20158214C253E01CE0D714C512F9D51193DBA95EF508D5A6ECCA78D34185BA15F5DD66FF0A7A7BDC2FDFD15734A057CB7F6D9EBCB4C61B63958B96B3E55341AD778039B620BB6635E99CDDBC61CD5E98A1020E73ECA5F3A5CF267AC2D669A729E1934AEA8B8C620DD35932B53A5CFB692ED6E83D21766EAF1DA987EF281EDCFEB73D6803D506BCF27C8612B623296D59C669E8C3E2ACCD1424D6FA9728160A0DFF0E7BC924A148D595433C8351209D6DFAB5FFAC6839BFEE6CE7DD73E9FF253DAF698D6707C8A3536962945F6557A77BDAEE5C6BC5B4AE4F12594DD58AE2753FAD6C6AACEEA9DDD69D25B09970AAB56EEDBC3F3E3A0EA4AA07329029583205CD46933303000CF1B941580564919C4126246DB898373DED37E96F875A3FB9D42BD1E9C1A012D0CE9689CF7BF7048308F7A9A9C745B82D2038620496BD4D332C11E0FC7255B7204918E49C71D77DC39E79C73F3CD37470DBE2527B3C060CEB077EF5E7E04DF962F8CF647394460D261509A4CE53C2C26746185E26D5802C1964CC4795D3399946DC7C36E0166E8C531048948E40D9E22EDDD97C895C8F958305DDCFD60BBB02AE04551BA67289C9ACD76A7D375433502F2E368D37758CA90D6EB4FD28DC69AB018480A92DC00495516A8EAA89E220C1A95011222C673317592038A3D804EC24C2E679E79E68F7FFC635E159EF06AB50A251AF100F8C4C4191DEDF82828A43CF25B6EB965EBD6AD6F7AD39BBEF39DEF500F07EDF08EED51CA906E18D40B66607240C1883D0807847E802084985C415830096791D4374493D82892EF21C55F2C00D07E47CADFF92796134C66C20B586DE433F9AD99EFF39F48D1A1504C7EE0031F78ECB1C7F82AF4D7F37B9DD7789CA8F4962223299217351F2C1EC61FAA7B80AD84F994D236094A31697DEC631FFBDEF7BE0787095FF2EE77BFFB273FF909FF249E6ED8C7181E341BB95C499A785F77B66425FC62AC4E5BC89ACAF4DF5CAB6DB61A99AEB63E11182EA59C7E32DAD54473A8BE76A17FD73545CAE883EB7D7D33CDC692831B93F37DF3ACC42736EBF1E270F3D6A9D8C6814672E1F4BB964DCE69F3F6FE65D7A51726BBAD2F76C7AB83935418A44695F675AF5B7B7C519FFCE9DEB78DBDF547DFF9499B997D4261F9268C78C330A95B4976C9F38D802C3BE6B5131EEB4E5633EB51DD4FF8414C2737AD3099BB8D1C352A39A2BA4E77F9B487F27766B5AE53D45BD603347E80F66D27EF4AA206ADBC81F234FA6BA346DBEA5AC536EE6FDB0B296DBCAF5D9C0C98B8EC84EED2BDF7DFF52FFFF22F3FFDE94F796579EAE0F18FC202520F2C16B81DA0435E91919191DFFCE637D874E0EC2CB37939586033FBE30FAC16202A26E11969DCBDC4954F11B3208AD10675016AC71F4A0C043DBC00F0496C347E2E6F2B1E1E7264014620E811E2E414BEC173750CCECE176EDFBEFDA28B2E3A44B53F8AE48011C063E029BDE4924B366CD8007CAD830A318AF760F002E74B1A11F3A04F3DF5541EF1AF7FFD6BD6317B91C3450804E9918641FBAE8A01A6D28945FAB763A1AFDCF62388A4701A207E00E7B8F8A02003422ED3ED051434E4832A5BC15B1C15509A85ED2A66D16E853109C775C0D9A19EEB00B03BE20C4A98112B84E6538847611B6B91869492C00AD55B448564D0E3869219154D2D00EF8300909A58F909161885DE24303B987B6242C2EEE199BFEDB6DB98CBF31D10A70A7A6862606DD4C3F010740AA0B6FD676C02EAF5AB411A2B7F03968ABA68D88FAC9DBDF7BDEF7DF4D147A3353B514910CDAFA79E2216CDF1E855962CD673892223B87272090F1EC51062069D77DE79DFF8C63798532050CC4F59B56A150B00D9EAF0D16327A32053EA2DA21DC031997E881E0AE59D7A88437C21729982B01E82E9965F0A759BE83983D60E7847C119067608F44A8A80064B8EF262AB8362D94CFAAD267DF623E73E92FB567BB9EBDFBD4017C54F7BB9F3BB1FE8A97D23BCE112E4159331BF334359CA7FFCB4D2D8EF566E5E5B39BB5B3E71FFF885B9B9AEDBAF77A6AF70B343D9E062CDBBC96B76EBA3D70DD4F35EAD55A6CBA86F3A5EFEE70E5563AA57CA906FFD2D75D7115D4D5465153F9149655FFD27AFF9E1FFFE7FBDA64BBE4141C6A272173DCBEA0379DFB1CCF68CDDA5985E7032E9BA56A37289E8B6876EDBF8E94D093F7E5CDF492F7476D76E9856E6C2A594AE9A75CDCD9C67D512197A74413578E9927115253BE95AAC699FE3EBF10C7DBD16CC675A54B374EA4B65E79A5ED6D5EBFEA2051CF4E03AB408A2A298CEC829807B16DF4023812F8EA717332F590C922116EDC02A697BD18E524B2481A46020E10DA92EFF85B8DA310EE97F87DBE2FEB06CC055C40326E70B33912E2647F3EEC240870709F43F3434B4B0B070B4F10BF0300BCE0B2EB8E0DE7BEFE51903AEE5E2CC44C5E6C16F7B798A3C4D3C1AA9DF0B75BD98F8FA81CAB9B8ED99DF69BAEA64A3FAC8F38A2658A065B2A9507D8FC1D50E3E82D491681EAE645B4A6D459894197AABDC45BD9B0581246620CA04F651ABB796188BFF61AC867A863C381A6C0249FF124387B7316AEE60BE09E3964748C2A5D6C3DE11D3817A90FA12CFC0F7C27C014924025F2AC811A762E6CBB785EF0FC9736F7FFBDB7FF7BBDFF1F9D2274BD22744E9C0AB09C2D4B1ABCCA5CF0C2AE34535403725F882EEB8E30E66C4D0DC257D1BD24EEFA1F36332F93E0826A31393DC4D42BBE0FE306830F310337C2D5FC57CFFAAABAEBAF5D65B4F3FFDF45FFEF2977C02B0B2F97C5609C1F7A3705D902802C42D681CD8F6626B8B770846376C4D417245E60F2243407E851B5378132A3CD0A4017A6BD49B816072349D77892302B2BCD6688C27FDC98EAAD03DEDDCD35FF0A632BE51F25B3462D1F5B3995A2C4E7AD5EE0CB7ED8A7D6AB53D4F57EF51B502F7D3D0DFC6676D876EA754D76F53BF776F91F6123DA4A5CF4DB7066ADEE589E5FDF9FDC601E6F879ED55A52B7F9B6D24ABF966F62CD3CAB98D16B56EA395CB56B62B9D85F2BC9D31DB1E4F7EB65E6A1A4937D029A8997DC648C92B53A2CEC49DA95B15AB15A2B8919DA43E4B2BCE06C974A2E15AA36DBB9A0CCA1F9DED4F0CFB771B3C9BD5ECECD0952B835A61EEEEA7AC4FA4FB83427067C721AD78CA01EB03C1F2F9B5BB1EDA65C7FBDA9DF2783E3D39532723667B4E475B04BBBCF4D24B79A1110A963A5B487491074CFF3CC9122A135315AA34D6081422DB279A810667E092C282287FC00AC29CC597C8DB9101FCFF3FA25E7ED1F191D813F4F01079B428DF8382EFF5DA8D2D01C03FE2FDE1028D56C883928F16E7C0BC095B081601E5223DCB509F86BB80AD874E9E0CAB42AC91099B40396BC8237443379006A0D246BBBDD076988713A26001195555D8A6D3A9B86DF00D51030C3E224AA56407058B1E9E26B23242CEAC4E761D81B4536E223E81A9815F8969083A45A7E3C87B2FF16E1D4D1C0003955974C8C4A94707244576720758A63B77EE3CDC3BE41EDA10867A317DC48725584A117F9A64254679280400D41CD4BBF284BFFEF5AF7FEAA9A72421075998E3E3E3BFFDED6FA1D54611DF2812BD80475B7A49D27FE464C40771DFB3E5C1BB5480DE90960AA920194414A9E4126924FDD7F45E3BF8833EC39E24C036161287CCC39686D20D5D5B3A3383B1E272FE098A3C7FCF860282283C27FC014A03EAFB99C6E6E6E6600563C924440F0308C684C4DE510301414B3D990AAEC4AF8F2FB1D3F8A14801E06F56AE5CC9E344F3292902122B500E90B11A33750A757DAED04767D7A9D4A06F299C516A91F1398B82EEF01752072A0DBA6C356953E6F5EDBE34B53E439D117237D1EB97AD7AF293AD6429DB79748777B931FCD2F1ADAFEE56FD26FB28FBD70937659FB1FB847F5BF30B4A527E2395A8A08DF68D4DED702E1B9D5D3B94B8E837ED2405555E2DB32F93AB55175477039D743B6D9F57277F75F3EE89D77493BF4A5654A7B0DDF1E107D86E49EFCECFD04707FA9385E2DD2F2E0B964F34F6F3B3C855E0FD6BAE3B6E6E4FB1F64051F54CBE707CA6364977AA9F56DCB26AB2B6DFDBEAE936F97F47B49A5874D9CD78BB1990D14D745557C72095E86F34CB1480CE99362425543CA8121F6255E037BFF98D88559E79605249953802C56CFC9D79E699FFFCCFFF8CD22A7043F10E1D9E3913651190047003F042F3BE4352F87FADFEE668074411A811881AF014A1DB2086C184FDCE77BEF3073FF88154DD3319034D32CA728F787FA65E7808A0D442B3040F3FE2F95059500EC9F20F9507128D20891344A1BE3020AC8D0452A2448EFFB13C507C30EC5EA0A0A3490FBB1007618362851DCDD68032CFC90D6B8053903F602B5833F02FE4D2429EC365A7FA9B41AABB41980D8CEA3613D13995D23A3D8DE46E16BAB4D8E878B1F1D97F2809F87B9CB244760AD188E78767960925EA4A5B729891C6E8E2F991AC5E30233843056356AC5AB83E701A824848E343E210533FA2E23C18EC04F06E742C90326C3AB4100C5B453A85890D7EC4C1A3F840462BC529F0A403A07BFBF6EDEBD7AFE7B5BBF8E28BB76DDB169504925F403D7DFF4FFEE44F7EF6B39FD1A1991B52AA2A85BE92CC13F4DA4163D544EC51CFA729793B52508A51494C42F82F2F1382D530022074974426F9C35BDFFAD6A79F7E1A211C5C2B8036D11C4149796202608B306A0DC06F0B2B04A920E8B41CAD4C167A008F3BFFBA6BEFDF705D438F8FDE90335B8DFD371673BEC2186ADE1450333E7843AD46FE28D19EBB88A658BBA7646A55E2AA995DD40AD6E4B5574AFDEB8716C666699652B78C25C86952D3A0746DE50CFD0DADABAED877FC7C7C53D3ED50814626687AE4B2E533AB4AEE144B9FFE95DD3503D6C8330F7E875AF1D599FE5A71CA20DD61FBE35A37A12FAB7D7E62A84CB359323627BD058BEE2EE72B03A5DCC2E0679727ADFCBECFFFD6A8F61335FC81CEEAF6F257683F5D68D080D7D734CD8A6EB8E9992F36A8D261B955FE30D1F1441D23995ED39E2FF9B7CFB378B05A89D06BD359A627A71D6ABBCDD3060B2FCDCD41E16506C41308DA831B44504378BDFEECCFFEEC99679E618E8C0E5F506BB04D24590B0A2B5ADA89E22C196251492086F2E192807AD6ED473EF291AF7CE52BFC38A4AB1DA308EBF73A825E17491E3C53CBE4E46434082150C1002C40D49A498BB522E07FF00C88DFE218F7E717B9E4924B5887E369E1CF12EA3B12DF53EECA73CF3DF7F1C71F476B0451E9164F88D6CB09005E14E148EB35F0025F0B7CA3EB2C3A1CF4B0A3248A0B54BE28AC02C5913DFE326C3FA0129C6331856147615041B53AB04C546349E907021508B249A6A6A12B273B3F364C305F3461D20A61283D3DA384AA6984A2A5E7FA431D426FA58F9A0CC6D68034A10A139C8C5E94C297F2286164388E98452A14ECF53A0151E86D148C62D886D10476B82920E42EBFFCF2871E7A88B9BCD42E51CF8AE45F5971609D94FFDCBC79F3D6AD5BA3AE6DBF07F52A1C135C0F0A2F531E440B96EF18D9B4D4535B446D877012B05C747A9040964C545412200620FD3579B4882D47D5E468D85C582418BADEEB780CB583A999FF44011A20C3786FE83DF06710277611F4005124E5154E38E1841D3B7640A844571067C21247A889C25AE82BAFBCF2AEBBEE02B48B38D32017BD5EE307C13C001008B30C7ED6BBDEF5AEEF7FFFFB22EDA4B44760C2165177BADD01D2172C7FC81E9FED4E525C29CAA6D3EABA859439E7BBD4A4611A99B1A7D7B413AF906E51E3641AFCB5E5BD2655FA558C52B3892CE9532B1A997D9AA719CD608C96EDB37C5A71C0DE994E12EB8AB1629F93F6F375B34A1D2FDFA02E696DCAA663462556CC2BD0379639292DDF61BDD2D45CC3A5649CEA6D2319780D8A79234690262A25D34EB155253DA6C79CA04381415A82823AE5A9DFF4BA256265229B1F199B9D7925EB5B35BD1A142839936D6A7E7F902959B5205E3FA5662F507B3A4BD9EAA81B2B074EFC9607EFBDECD273E2B55685620327AD715E78A9DAF3E748D2B05075346D0C6127AC35B810C80C2E5C419F86F2843421E90FECF5FA0E2D01A15BC2106547C88222E4030BEF0F152790F2025DF5431C442682A459A38C94227D5BAFBAEAAAC71E7B8C6500BCA0482E5A124858F222A822460A06A25CC7C810A15078202F513CC3D063166FA8F7BA6F4B948687F2377FF3370F3FFC30222A4B52D471996455C3C32EC556180A96192BA71D84B68E499486FF5CB76E1D6F5AA041457BEEF0ACA1EFB9549DF0377C0E343E3C1A4555FF6121F5D1A603E569E026200B985AD1BE6E18AD8C8122B1264979122EC9C3F8C0073EF0E4934FBEFCF2CBD1EC5210BA981A60BBF08A88298A97F27BEDD1FF0F6BDF016E5755A6BD7639BDDC967B736F3A692410AA140584D15F0699E12723088A44414A88940086DE49883409485740616823CCC83FA28C604544541008A8A1842484F4DBEFE9E7ECF27FFBBC77BFAE9C5BC6CC781E8CE79EB3CFDE6BAFBDD657DFEFFDD03B130B852DD7B158E59C08E000F4460E06AE60F80188AE906A9FDA85E62A0D6156DC003580F9D1C9DFC1A6896EF52A2C3E00FE01B4A980FDB08D0C26904F9C248EC8E9E1BA10AF8C9ED11985F9D68019E7F8D918B9018F84C0914C144C753958962BBC28FD99822F8C905F4A19FAA93027D916C2AFD7BECA39B100A02144679C7BEEB96C2061689C1F54452CFAA33B0213018694281579E8F268109EC6A8701898D71AEE4E85982E766AE31AD697B42E4F55182D047209F450C8FF6391AC5CB9F2965B6E41EF04C8538C561CF872A52CD695E33A99742697AF83792C3B30F0EA2F2C3639183B972E9A1EDE09469288AAA21FF7E23555A9C64BAA4BA53E918A4D8F0CAA81784BAC6454BCAD2ADD946E1D68DBF8AF1FAA8A8AD562B49F0827C5D3418E0D33897A0E38BB148E04A14055D0C8A5E1C2BA45794F5A3059187230E8D3C5E5BDFDF6DB11548101013611152699E4898BC58687AB979DC39B619E0C4B94396A23ACF397635849809BFAD6B7BE75E9A597C2C7D563AAC6D8F54FDC714AC33D370424B198711EB4445621F4886053D2B83234ED877CA0C11928CEE408D6B5C224944B226BAF5BAC0DB05F999D934E3AE9D9679FC540E581EDBFFFFE7FF8C31F10ED8188D7A151322F627B02FC87A276440C914BD49F3D0676C10517DC73CF3D679E79A65C42A4123A30205D3E7EF463AC17AB4FE58D6C3FB91DD9637269403F756C65835C6BD004244144CE59F6AA88CB860A031D260B73409780469DBD52AE8E9B9501806D117707412CF7FBF6DB6FB3940993061D00D358261039B7871E7A48FC0C4876CA7A02C3E8E1A9907E07FA064E18DC179D4807B4A3C83D88452CC31337560C6AEE5596A4226085403CC02130D61004A3ED8387852985F213F304ACD448A3314CD400EE52612F01D6A642D5C93DA2659B7C78C619673CF8E0833257328C030F3CF0A5975E9201C83172FBC0628D84D951E520DA0013B2014B2EC6D0D9679F4D620CD040A199877C020E252A48F80ACC52020425979663B033111000FC494E2553812A04B194019FD58B1EB095E43DD22440EEE923F7B517EF8B385DF86AD8B9B366CD5ABC78F1C5175F8C4709C34E4E8E624F72CF89F34E235494412A19F0E06EDDB6D50F6157D0FAF2F3B973E7BEF1C61BD031D8ADF07DE11A7AA6279EB6E904E1E29A72FDA8A35A6545AAE49AA0F197B2D49CBD66BDBFFA83F668AB2AAB844A6E549BC8BB0E510B64271E1CA0BD3260021FF4345BC33AA170E4DDB19F04EC1E91FB37DC70834EE08C29924B602D8961BE62C50ACC1E7007FBEEBB2F36A0D8439FFAD4A77EF9CB5FCA36673D3F942841417A630C15468C919BA5670C3F1821711992BC418DC558724C5697AC19D929722F18A45E5E0A898A4028F0177E48CC85F1A3565C26D0D0CAEFF9D0915D184655D0EE503B973FF0CF06A2283A2CF8562E70DA69A78918A259F4C94F7E52B62289C3B0B20910924F0E39E490DFFDEE77320BA2AF0E3FFCF0E79F7F5E6E12592059A91022D0810014EA64B9F273D91872186BA0765513C06BD32BABA1128E3BEEB8279E7802063BC42E79CC47D50488B3E30CBA49082BC9D2BA2A32D7EA84AD895142CC3B62441BE16C76B8C484E306D1C000F25DBE85AD4D520A7E258F524E059313B60971FDB8048D6BE25977DF7DF777DF7D17FA03F97CAA2298A2F8C957BFFAD5679E7946264A34048BEC1B6A9E47E26718C0012D15C6CC0E3F7410F5C615FA3EC79A81EF22EF31CFB4B519E81795299B0490593918841F4658028D08BE9E59D1435B0DD21F5E1A14839C6ADBB66DB22CD1040D5548101F2AA4365221028DC5E44658960F64019C33A87C166D88712352099623C4840A5B96C2AB867DC79E27728370CB1A7480AE0CF4541F6E102E1DB24DB05AA898C9124667CEAD3920218EC7E2E21C44ECC870D54BA54CE3C90FA9B901A8D33581625940441E4DD42D7BCD89E621B123ED78C991B564B6354FDD31B023D39CC90DF528C3893767CB22735C4F7935026000AD66298FDEE7551EBD5C572C4873441713A511F8C04EB2B5767E346EB8CBB0FE11C703A73DAFA2079AE8D0EB192C9937391231123445C06010F8C20FA11411AEA1AB043A55FA9A62576DDEBC99BEE3F8DCA84A6364C26EA52781F3B3EC144CF8C0A3CBB74B962C11C90C390C0B0CD9889B6FBE59749E1C802639C32B1FB747F6693C51241FE0A661859109998741CAC35E80FD05C8871D766ED3DBF01A5A8F5934FDC149C26E1E4A5733B23290D6C3D9E4C9C17E9437575F7DB5DC062B4746AD211CFF853D46383F5C24885799049926F0EFCBB77ABB18355A74083C8274BE987534B4B662B47095D6B6176101B6A284EEE4AC2233A6A72B10BBC350653FC83C33CF09C187B81CF63606D3A0DD55E893913D1BD90E99E7E38F3FFEBFFEEBBF101663EB54F02DB35F87EC43B128C94501150218BE5C052E1D3C569872707774F88D08BE55AB5671A5C96F9118973FE1A3E8B86FBDB25D3E972722AB1F03C60DCA6F211949BDB268D1A25FFDEA57B2FDE0EE10FF437DE087E520CC2BFA5A2F7B926430D476D34D375D74D1450CE241DEE191017A0BA6103864D00D308A61EE60C1134B8674E897BFFCE5471E7984257B903B205051F52E46B810824E5E9D801E8A138D09291AF45C1157B519F6F0928725DA4BF60B584CE0F6A1890A5A9C02454E6C95AE291B9A8C2E5DBA546C6479A67A300015588471332CE385E49786A57C4F45A2A653F132665614A568877E73473A13AF55829A92DEA15EC7AD434F9A54AC37869BD26D50150279B17A91E0916D221624C22F0C1ED2B7237498C2048D30E58DEC05BD81848C5F8E073218B15FE869DA855806549C88828ADC9793C07D817205C7143252D004ACDD55A1EB3973E64C343883E1084B02060D4AE245FA310532AABCE20A4719DA75F5976E78C96A843DC40E57B40918A5471890110EB65290CFF7DC734F5106C1572C76807D8DB821A41534219E10CB3D08E4C02260DD1A6AF4654E658B62047A81156BED20D98DB0833994B33C15D9B7B05861BCA011B34C2ECF2CBF5AB972A5A832552FC592F3C3F2DD559F80B11A0C03134D6028E965F8B47444668326406C17863F5B02E8B5827A1C938B9B790815A2179406C484BB07A9EA87C5623073F838792F0D9602A4B3596FDF212B1B95D840DC536BC2D9822A82972ACB914DD8A95FF51239F917DD1174B9432D45AA38EC1052FEE259FB5A4BD806BE0D864739BDDCD59C3D1807071D749078E8885BAAB067131E16CAB069BB60DD62C5EAACA23A8E8881323F2419D69BA0118084F40602A488B162C0B2B7452322942A577742427F15B640F143BE232C09A82EB499459608DB9E8E0E84B21FD260C0AA45F25CECA43FFFF9CF7230DAA072F57ADE4E3039CC1556086C05C05E450163FD40D72E5CB8F0E5975F460F06CC8F0A5D2BE84E18F80C5FC857C82E40E1212C8E0223B0B7325408B349F663D0C9A7BB54F40BAEE9056059334859C78D98E1AA8A55C9C6D22BAFBCE1EA2BAFF1828FCBB174BCAF3014E424723958CA0DE45A2441C13D82528280E6064DE085AC7346D8E91626300A7AD91990E5324AAB48A00C046C5A77351031C318E8BB6085C8AC229E2CE2E888238E78E5955744F44136CA835BB76E9D5C6BC18205B274C9622B9FC8BF286E07F3920871F9641CF42A03A4D0EB90C3DCAD20FD95AB8B29E987EC7544D3827D9DEB1F7E09A617EC06ECD813F8C17A424369863C878E38323FD14D4BC2E181FF613A1408303A7A7A3735849245EE234B83C7A33735158DB77CF9F2BDF7DE7BCD9A35F22BBD430818076131192133DFF85DD9469D591DE341C58BC02E90F530A8C7F7099898D2A92094467F36521340F9CBD431E462860D5820586953E82077F8580C205C72C925F213718C54BD3C4ABE7DECB1C7BEF8C52FCAE4639135DCAF11F2AA63D87A2C150DC58032F6EB251D93274F965B868A3DF4D043FFF11FFFF1DA6BAF453047B40E621D3245A83F97C364C58BFF342AAC1E86368BE910FAA328914BDF79E79DF2ACD9F95957007A72057500B255C21274476911E1060982C005BD522812C8382364991F993196D9868741F4841912CD637E7EF0831F1C77DC71B82F36FE6572986254664FE42C82605C96640DA1DC9419209B02E27B9840EC3B5DAF90AE5985F5EA6A4474482785C57A03380AA5124830C820E55AD89E2C2BC56226F2ADEAD4FC3A317DC08956DF059F3FE184679F7D3662D9082E119BE06A8CD01C304DF8A497CC3B052B61556A653B6B3945591566AD0288AEB2636927573394ED2BC38E46ED68A456EA21808D082EC406F41213AF4EC14BDDA946448768BF631AAFB9E61A5187679E79266D173122BFF18D6F900C4E9EC257BFFAD5EF7FFFFB4842807E91061981C8787CB4634470C91BEC4DE84BB862E0D9D6AB64E03DCB8264CF6D3D4DA842165819F0C9279FFCF0C30F8F857C41B90FB53E1B0592B7A65EB615A403E56CA8D31475856AD0AF7DED6B6243204B4CA18DEB72F5C2EF0C3C213BECCF494B164DB2C46611CF058D23C092A6633375BF03D6CD70F7E39DABFC8DB02A8D85AFF09A51DC0F298FCD8CF701935D5B9B0C179B479602E8C5313CB22EE366C6EF1C3DD64B4F3191E58A71797972402EEAD5DEA36A827DF6D9E7CD37DFD4BD728A753D2EA442AF65AFBDF6423B75CE898C5FA6579C4759A0575C71051EB9EC5E996D98A832C93251321E91C24064C933C692D5EF888D3860A4C806903F41AB0086615C94C80AE210E0525099E9C4D724D880ADC70D46E89E5C4B3EDC6FBFFD5E7CF1456287B0AA8CB0E96903C912910C729EEF7CE73BB24CA93CD08009EE97DE9B9E1055DC293C0F99A879F3E6897B8BF5094B45EF1F80F81E66A3A1A72BB3B2106AE0B3132D250E321A012201836727C7E8D14B8428DDB0B939B429F00EF208649BA1468956987C227375C209273CFEF8E3A8828618C54C42C41C79E4916FBCF186A8DBF3CE3B0F5E20B058EECEFCFBF2DCE1F23728030A622E51155A912C18545A56402E819C1C641359A70286926C5067270BF763071C209672F78E1D071C78E0EBAFBF9E88C5A10690C186A403648B4DB2B0EB0F3CF0C0575F7DB57E41131D412CDBF455CD3045EFAAAEB6A66AA53438580DBE33544B73B6BB3F785E4EBDE1C73BEFBCC391433D23CD2E2B4AB6A47833AB56AD62B9C6581963FA76B232FD7A6325AC5B3488C7F280BB8675E587CD97704EEAEC61DAFC7A4295E10D55C78843E6C890E43C22FA4F39E594471E7984521187A9BA13AFA78EED7A3B29B91609B810CE829C11D52B6B6C2C3986B0A45C51CE8600805E748915C5561F64DF83DB87841F295E4E3DF554598A30AC451C89B322A75DBC78F18F7EF423116586528D7D90B1F26475DE71C71D981ADC21F649038B35741D53A6447C2ACDBD6880963361C81E2F7806645C805442CA450F72899494ADE8876D0BBDB077D52E6902FAB33CAD2CA0458B163DF5D45308BED31E1F1F3B74D6596789BE45C81841244C051E3086C714A58C538EBFEFBEFBE8C61A1ADE19469CDEC30BA515AA6EE3CBE310D3469C00B92834965C428497083B6A592803A43AB83E743A176249E5F8B973E78A2E9147B362C58ACB2FBF1C76B41C7CF5D557035941D30637020B1714BBF23988AB00EC83DF4D681A2423FC1B72C7637F12950FA790D38BC9612B12C4CDE018E9C607664637D9B0F431E140FE91FE9EABB1214A698448732E60CC1E1B2892291E8F8F9CA64A6B164813D8A817BEAAB0F796CCCCCC9933376CD80099025F5EAECB4E9648F6A8B075B01FF6B983B30F61C43A29BDF3EBB265CBEEBFFF7E6A74B5337C884A4E671F81D8822AA2954ABE261DD8CA569156C4C60C603306A160D9AA32D44D9B75578F738B7940FB074CB218DDD75F7FBD1B712D23E2965426DA52A9969356B4EC0E5981C44F2613F1FE52CFEDF7DE7AE1F91706B50EBE9D9DD059E8D92ACB5BB6128C7A1D11DB809B209A685414290B42196E0526827176B44D85CF07B34385D9EFE5CB9723F84EBE2C151AF5D8D75EC8684BB98727855024AC5E53238AC701803081044C85D14E33EC11C4A8C031C71CF3F2CB2FE39851E5158C3FB1176FBFFD76DC025ED83BB0AA75D812E78DF2446FC607E987A8264F85E91A4E9A21A649C171F1C517A3AC1473C73DA03BEF7C11CDAA347A3F63E7FA2CDC39D4039366B6D67C910B8E68076A29A868887EEC55276C1F6184EC6F720BF07C891EE1725161121237ABE3E86109227A0B2416451E6E0AF4380C5C288D129515C53803828050B93AFA05721F4E7A83F8232F901E7482294D162AFDB9A24440BE15252D020237880D19A9B7B6674E15F303F35F4F5953A521CC8DA6D890744C62A34900D48C39A2219FEEEB5000A930948901E8313D1A59242B84DB27C688685FA807B9288985C1F3C3943BC98E18DAA2BCC6EA62210288DAE10FE938576A4452F2B1A8751C4B022764032CE4BA1B0A627153E4F293338B258ED2717ACC7AECBBA19595CE57D13063E6CE4CC5486881D389620ED60CD40662C40DD00FD428E1276ED8154369291908743CC4E6D696DEEE1E64051070838809503795EAF9E79D77F79D7779F5EEAF55D7E9ECEADABA6D6B045814314DEA2E7B801728058D6F915110C5230A4F477FA25E92EE230026E813202B4D4C2559D5A84096BBB8F3E6C7965DFEB572B55FD4723CA0B95365BBFEAEA0521151D1BEE3F9CA8E541D2FA68C36235B6936FBFAFB22513B914AF50EF44592899AEF2AA72ABF84690B418C7808A65A36D4BFFCCBBFC82224BE0EE2054F8A2645432EBAE175E28927FEF4A73F9555A7734A52BE515A72CB8F65FBE3E74EBD0F20001414BC38805B1BC20A0A9E9179063FC9398A957FD55557898636C2DA171CC6421FE66044241A348E509EC3CA055846E066F1B51E7290DABA26D043F6B80D3F2CB8C0EEE5ECEB6DDFC54FB9E28A2BC4BA641E95FD8998FA00C61F420AE83A64E1611EE2B6115EC45E82850EA23A582BBE06E544D6A8527FC949F6DB6F3F7191C4DA525A0299803906BB98DEC4551AA04A50B094DADC5A8844D37831762E7A46E68740F5B1006488ADDF73CF3DE79C730E82E0E207E86D2E503404AF93296EC66A78E9918BCFD02A5FA8BCE5D9E91A547C76B9BA3C11314900FC1F5513407620933667CE1C315E706959796C5B4FD74407712F58B0E04F7FFA930AD1113A91A71FB6F1A1A2153F52242CF6159E239B08B21E95306A31BAD7AD5B879D00FB403E419602FA0FC012344733C6ADE881214F9A6B82885498CF00993683B02A0CE86349109B88A019ABFFB06869C0E2A6C435917B64EF2ACA6EEA2AB89E884D312CC082505AEB2A0C54C22301732A8DEB063797EDFF6A6E98802997A74D9FBE71C3873299224383C68D22DFA3B1A64CB6BBB75B86228EBCE3B94EAD3665EA5434650A826640AFCA6248A521AA66CD9A25730E1B16BC9318B31EB6D25F3A824E164FC24CF4E47A94ADEC9865BB11A3AC5CE577B44EE8F7870A03410F9D20239D8CCAD655554F95ABE2E3B47774746FDFC1923779225081B0C0E45EC4F810DB5F85207D59ED24FB827572C61967C87623421A930FC3D11897094E64971C090523EFE5DEFFF8C73FF20018130D1CAB0D2F5AD24494C924ECBEFBEEBFFFFDEFCDB069AB0ABD583DB822FB54563B6C23206E182B237C03AE7643291CE4E709279CF0E28B2F8A6031EEBEFB6E999D0B2EB840B40757338B5A5558896AEFDC056DA426B0C2C6B68CB521804EF14AA0CBF3CF3FBF70E142F605436D145D4E142DCBCF3FFEF18FCB443CF6D863AAEEEAD2B263A1044C36E09D4467C8F2BAE5965BAEBDF65A621F59F1CF4782370084A9907713163460C5985CF6A44471265405A0234458C9B432CC8517A00EB88A1FF6DED16709C0245A7378BABA9268C84813DC42D0025ABBC01DD1CBC7B0C3C11D0BE14E114301C4E8163E9F397326A0C47AD2DB0871D923316DE3FB042C5F045A4E8FDA5336C175F3C326D523410AE81600B31D8781A051DE7FE10B5F78FAE9A765CC6BD6ACE10F59798B34924E8321CB46EC0C2043D85E18021DE06B15AAE7716C349A239867311DDE78E30DF07920062807A061192AA1E0E14D9C38110D78E500D42260D93CFAE8A35FFEF2971B101946C85C2BA71551F8EAABAF8AF4A4A1A7429E57B9D3F7DF7F9F8B1F421FA4AAA89FBAF7DE7BB76EDD7ADE79E7C96F41D78AFDA527BA466E6133EC3911C0DE5C4724A823EBAAADADAFB73762FF95C34A0E9D38A1BDA7A7BBAB6BD2574E3DF5DB0F3DD0135A0CA9BA7D06804D20E9643DABE1F52C4256E60D8E2F11B7327271FE56AF5E4D07143B4B8F8D4C9F3EFD631FFBD8CF7FFACC60C16FEA6C1DDC31946C9AE0E72A76D5355465285951D1A42A155557FB5E9F392CD539A15CADB4B5B4FEEAAE87DDDE814853B6D637944E37950673E948A25C2D55D470FB0A993A3939BC6A481ED9B04B962CB9E9A69B101B0731BB8C04C13DCC1556A00A1357235FAC2B82DDADEA6860E463910987B3FE57A2B77149219990C0948A69850C0A57BB0AF331B0B490E644A90D1BD9CB0A975574F9E597DF7EFBEDA86D3442F6DC8605A07F6280631DE509B06E20FAE54FB9B08C89F529AED6A2A4412250F4E0E972E5D1E66221229C412C655DC0A1A11D6A4DA90021FD91EFC293606D14E3512C7CA31A23530D30D4F09759DBA5C2649D1EADC21D61C5E0A28C20E187944DB82F54E7FED33FFDD30F7EF003F2FC8872FECB5FFEC2506683A5DF20EECD90B25F850E0727135246AFC052A1D9CE02EC8660820ACDBD913B5F0F20B2C60DCBB42191235BF4BDF7DE03D85FCE03F62179461F7CF081BE7C1B34018A6621A42EBDF4D2E5CB97C35A477CC90FCB35B197F0F86002C383214150C362D5390C6478225245BCD2DD41051FEBA4989AC685108D45B39D6F7CE31BE2516149C84F90AE40621F6B637CF49E0C006073F6A48466E215E7CD9B27F3C37811560810E86083515A753D1E2B3C579E8A570414986104A595884340809912312E18FB726660E4116F210E183F87EA8210912BD235D71D2FB8208126AB96DB2776766FDB164F24AAE54AC4B2E5818A6AB9E6EAABDA27C8257A975D78E17DDFBE3F572CF986B262B6E10CBB14CC4B317380CC3F537D08A6333BADF76BC48BF90C848FD0843557ED37ABC6E7177EF987CFFD57BEDC7FEE154BFFF3D9FFF8E89D0FF75FF42F833D7D895832D6D632643B564BBAA92DE3D59CDDED66B75CDD63F6DCAB4F597CCD8D372FBFE0D21659840343B5D0EF5161FB5F465995D6234CBC0151D532A5A2C04E3BEDB43BEFBC53A674EEDCB96FBDF596D280CBA3BEE83B62E9CE9E3DFBB8E38E7BE0810774E0B5D290BE639D04F15818F2A024C1E6451E113589D037EC828E5404B0FB7223279E78E20B2FBC207308AA342C3FF42D80ED6586AD34D93B5DEE572E144830DDA9C48B4210D12E0C056B0BBE42C30D34DC06592F1AD63A36338E214F11B468C339D939C4083BD8302189CA6CC0849165C5A335EA7072F69C22EC0C1905E2791CAD5323350D14061687085F99474837F9B91C2CA745E8B0010C209F88E5421F5085B6A72E8B59C42467869E20FD062ECD1244F69F516171197D1179CC326FF042C8A022D6B1B884E0CB94334035227A48D93AB2029E1A48DEAF58B1E28E3BEE90478F821455B765742808240E1E9CAC69E69046F509D8915C66462F9F46F48CDC4DA84ED2C783FB92BB100101F38760369C1CF7C50A0F92A7A24E0A4B02974358569E02AAAC093005FA88C5F70830928463ACD09CEC10F99795BD871C72C8B1C71E7BCD35D710906A694D78BC90C714EF81E1031D855C0BDFB2A486250B542A0DE5D9BA4FA0EAFDA53FF7B9CF3DF4D04372BFB040010F65933823A49AD1DD2CA425F558AB5E513152139C73FED2DB6E095A0DDF74E34D975F76595B738B5B730A859CA50211912F06935CB7268CAAEFB7777594868A30B09811D14962C08682A6D3241A411D22884549CB886130A54F1DACE2B65D8E4C34DA86FCEE42A6E2C5D5EC45F387DC4AA9BF734A4BA73354154DD432A5B3E4560CD3DD73F7DD95E3656419579C8FEDB967617BEFEE9D53177EFC3386A5D276062806B9220033E83B02D5C87262520F7057E2A6E43D56DA58EB84F1E4A04F571DB980FE2262268A1A164F8E1DE709A71CF53C7AD00FB307BA56E600648BA13D09C4BDD888E2316CD8B081602178E4682028D30EBB56C48E582AE4EC82D8C1D6D0B36E8A1DEDC1FD828D0AE1BB60C102B110B18688171A35E28C174BBDB91C193180B745A50A57803507B0D7201464F4F215F6364B01551803A545831828902A8C6C3099819A389A7BFECED5982A841C307C063D0196189D504C27B9C37A65E8D0D788A05588D992C9959B02DA97280296C0201E876A0E164FB2F5152BEC5518AE110BE54B5FFA129009089BA0B30726845B1D77443F06F30399A847DE9596C4C6E554DD44D2BB4ECAFAC013C4FD32DA08FCEE7F9B319653C91AFDFEF7BF0FF00CD24BFAB40310C566553AA99C1C2FA2F6E5975F461601EDD26068A3F92D348AE82459D63A7A0D3681BEEA8CB0231091547ABDC2AC59B3648181255F8DDB13CA0F2B7A9033C7228122871CC71CC29250F5280DEC5FA05A6100A26A4F85D65510FEAEB766D46F01F10779C4F2B9CC838C9F6421E4AA43B1217C771883FA4DE97945F1E0456DDC77DF7D3009119E028642A7385423A24362E9D72A552308BF1B93DA276EEFDE662A639FF97BBDB5E62D91C99661CE9DB7FB1FDF7E3B99490EC96C7875D2E1F095490FBB23C38D0343C980A522F6196C529087EBC4153A2C07CF0210B2E0998AA0B73B26DAC9F5F9F72BB3D594CFB76DCAF7AAAED6A69E7D6B7DC5F6684B4B7A42C5F5A289E8A4CE095991C29DADC9643C998855C4DFAA56174C9D1177BC933EF3856875181C45680C941350EC881C3458A2071F7CF0EF7FFF7B8C9CA53F6349703C3E6844B90B928362C3D2DAC0542B2D583DAA26005305721B0C1540F29097C50C7B3000F7012E2CBBDE8415A762885E69B832AA3796A9924C085A2AB83DBD18987EEE92254BEEBDF75EC871A41AC85E32520D60887218EAC291BF4634831301510B6307924B54820C0EE61E5BDEEB4026DA533A4399F8BC6FBEF9265C100443C9962A4A72D3A64D085C223F83DD0B7FD9D5BA7DC9BF0814D02D80092696D7E2C58BDD3A6FF8DAB56BE1E63300CD6D8327874E117AA1ECC8B2174E9158F16220E8402620C018D66F90D418BCBCF9D6B7BE75EEB9E792FC84BE2D9D6EDC1188A947EDA6D050E006897CE699673EFEF8E3227DF4E22CE66945826CDCB8718F3DF69007FAFCF3CF330DA546CB18031B03FF0911D27DF6D947AC15392D5C5A266CF05BC853920831A4AE070D00A5D053A6D800A890405474DF7DF75DBD7A358C329C13FA0F7D96F4AA0B31F065247239F1FAAFBAEA2A792F2E886CF2F1392087C55CA87D1B52B2D860C43B0019A1073CD15C65D5AA55E79D779ED2E2BCA404D02BB354E80C51ACC360E71A8679C17019AAF6980DC283A3278A2833B60CC2320D41E1911963D1FF99644AFC00A756111D9089249D5AD50DE0FE7E6BA6A93737680667B60BAED3D1D5E199C6E6CDDB2376400206D3A758AAC376E309D3B6E0FD2056894A699189A21165F078DCD8B6D85C800E822B50C7B2A7DA33E5EEB2A75CBFD96B5E14CB4D16F9205A2A63EF98DF6265CC0195B0322DED136BBE17B18DD933A667121165F9ED9D6DB3E74CAF1587AABDBDED622514F24B3E7D218C489112C81BB1FE1632014D99B0CC50F202AF05F6317696AE6B475D27A407B6766E5D2E274416841F8EB5DEF014306340B5C0CFA63CE13A24038A6C99E38F3FFEBBDFFD2E860A9B1235F37044A01E105D572167FE94295340F643558D4BEFC440C7AC9ADE0B17E63CC9E91A7A00F105FCECF9E79F2F9B8D1E00A652270A87DC2164532F1D620F0A861A99C091E19164F8ACB3CEFACE77BE03650EE1A533C422310BA2447824F2278C7D02C5085F515AA33BF0AF894621DD3C769D3C4B394F43C71EBDD09A9A19E54EF0722CADDB25EC1D8E90B3CD1628845702F6800D2C7322F20BF94620A0A189B18E59FA0849249FECB6DB6E73E7CE7DEDB5D700A585D742980A064C0D04EB1272FCC8238F449F6A68DC86642F5A0C81CC67544D4069D8004A63EB4186D45508B586CDCEF9243933A492FE98287C457083EA5597BC4B972EBDF5D65BD9BD00EB53CE86920B684DD637209F244342AD29CAA4914C1B7567C29A8187C4820F62C0117591EB8AB284E983C3162E5CF8F4D34F237A8B9F433A002080C360F130AAC0A528A742F3649808E40164B33F482B784B2C2843D4588575300C01C96957AE5C79F1C517EBE4C3B6D6629A1A170F3166D94EB516312DB14AE266C4F79C54349988C692A9A0264B6EA7B9AD75476F4F3C93EACB0F553D956D6EE91F188E8337659BE0C73BAEE387A7A5B30515C8C43BF14B8868E148AC6718D4D07CE54A6099999DD18E6326F5EEDE531DCADB59D3D86858DEDE896A24EB37A713137C3B2A3AA7B5AD696A57E73C1943A56044FDF97BCD19ECDB9AB60DDBADA6A391451F3B07CB8F0C22846203AF8848389F2C28199096C360C6C70EC1DFD23BE042A6C10EA66FCD3ABE712C0FF6B69463C4AA3BF4D0439F7BEE394C1A6B68B03D613A43E84313D3E0265615B29AD539888389343BECB0C35E78E105147241F441BCFCB5C618EB121E1C48D054BDAE929D0D502687CDAC075E1A78D61A608B725AD474181AE995AB35FEE66411A2C74431C1D70DBE3F16191BDD292D020EF93B8C6EAE6B02D1816094C30166C8B3A6573991E05ACCB7279E78421E3C69184626FD75E31D7727024516C4A73FFDE91FFFF8C7084FB11787AA1BA4DBB66D93B50E294FAE2BBDEEC3A857C1E8B50E14106489C1606489006B481A2878A62AE4BD61A3151A11E40EC36C3351CCE484CEC8C6C2B791854B32D5687D073F80CE16860A2F0D6070AC69DCAF1E149691400371FD1861FD04412630291063D1CB4D1AEA1FF529E23E247C002486D7D65F5C3C7852A79F7EFA534F3D85522F8C1604D7ACC9C27EBEEEBAEBAEBFFE7ACC3331BB080AC99F5FFAD2971E7BEC3178F10D8C6C6AE7CA18BCD199DD54D8430DB246670C34B44A3A4699080152E3BE1A34B4D8F5C3DC3803FD46BD496DA95C0723856D0A83D6E38692FF7CB3DE78D65169CB4CBA7EC2F333E2134463A6E7969DDAB496F6F5FDDDCD32FDF1C4D9172CBDE2A695D17472A85C94E31329B5B5207BA73357758B7EBF327DB716F78CC2F0158C00E7697962A9076F443B45AD642416CF95FA12095BE6D8569661566A514BD55CD30DF8E8BC7AC9B18A458C58C4192A3A1D56E2E039C61CBF92DEECAA7A462490737624B74F53A57F8FD44983C6A6BE989D4D64FF61FEFC427FF7EE07ECDBDDFD6E6242A6251D8B140BD5217F523AFD4E77E29ACF7D5155BC44245A2A15324DE9DC505DAAF87F05537147E051364060A03BB14118A0A69D3A9664872843F41235F07BEFBDF76F7EF31BA519F57E9DFC0E099EB1D0A5CC24C1C647A404068AFA7BBC28CD0CB214E831196C2AEC0AB2740169C3241535012321FA05B82899A45ABC78F1B7BFFD6D16BBEA452EBAC481CFCB6022E5293139B47A1A8ACE1A84358A42450A8B0F25561B922D74C0E191405461E70342C0DCE629A79CF2F39FFF7CD3A64D3A3E4A7F21A5C9948BFC295A938456B829F80ABA26934F3006642C0F3AE8A03FFCE10FE4A830422E235970C82F31CC0DF356BE5DBE7CF9CD37DF8C1A2EF90A2643432317BCE4C6B15221C59025C3DC62416345EA959C08418CAA09E425478A7D27E794F100C88F08EC55575DF5FDEF7F5FEE1D31EB2F7CE10BCF3EFB2C7C02D826B87D56C9EA3B8DAB052A908A4AD6A4AA9B11348D8139619A8BE533B29780A0951BBCE8A28BAEB9E61A0A7D20CA49948B2785B4A1DA391BC491C875B10B98EA44A64EAF005721F30459CF6094C10386C14B9E286F67DE50D46FC3BD43E018912BE040B01499842081951A177D38AA2668696AEEED0BE25453264FD9B479135AD044239A46317C11D63E34812CD19A4ADB66C633929E9735EDE658DCB6C497AAA8AAD7D136C1F1BD8DBDDB6D2BDAE75665B2DA5B9BDF1B70AC4869DAA4AE6D1B7B4A6E59869B8AAB42599555CC1F5604813692CF23C11B65A5CAB982885FC3B2DD4013E444478803E1CAA34D58663A9E8845A262D1966AD57CB55CA856BAE6CCC8A753850EDBE9AA58ADDBCD54BF6BAA7A43F38911A36CAEFDC49E93EDA1DC4473722411AB1C32731FBB2DDBE6E4ADE4D4F9ADC9FEC1814D35B9CE8E8F1C6B9A691B43A5D9D9AE13FFCFF1E9543C3F546E6E6919E813DBE2AF048BB0932061E9A8E13D7533CB14882B45E1FD587D866919C85294F7A89EC362C023009E65C9922577DC714703E2BC41CE20C1030C243DAABF8B1AC00B3AE6AF8639252CE2EF1004C4B762220819A49868D0017C4FF101A74CCE205EC9CB2FBF4CE1D2A009860D99308CC05D3712DA848839FA8E02A4DC308FE4E142D0003D641A269AFB5FCF53C12025FB3CFC26621C1B6E50856C9A4A33BAA196108E80A92BE344E0184CB074DF60095E79E595B7DE7A2B520E2AB46DE1CBB3601B3912A64348D08438839EDA41A81A2A4AEE4244A71C29020B7305392897BBF7DE7BD7AF5F0FE1B86CD93294D2E0F6297446F509CC3A61323C5C0A14C6D0A04E90DA39F6D8637FF9CB5FCAF9F59A3215A64346D504B8960C550626125FE4FB21871C221A054B9F493092A840BD19616B238008E457F22D9690A8167860E49CA09E63321CEE2F5C0DF96AF6ECD97FFEF39FF120444DCAD359B9722580BC8C08011E8E9FD35A04F0110F1A8005DC38905D887FE2BAD0F1C8AC401F40311039AD63BD74C2AEB1B02B6369026F8464113510D8011E3FAF6F4073B8E3B7EDA826DB6EB1A26931FB7C33C8E9F9725F155B0511959E425F7B6B575F7EA86552D7DB1BD6DA86D99E8DF70C168FFAECC1BF7B6DDD87BDB901A35C4BA42BA578CCEBF1EBD6BDAA730FD53541F0AFE89B488007327DA358AE887F10185E35B728C3F1EB25C466FD5711C3AEF9AEA7FC39C71DDB53ADEDF08A4E7CC068EE8BB6F639C9821B5176BF994CFACDBD474D8915FDF2CC6AAA32A14DED3F756669822A5A533FDD95ED733A376ED96696B7F44CDA3D63F524F21BA3552BE3C4969D76B12756932B0FA53537241E4045EF97A9B4C035042E9078AB56ADBAF4D24B9148603B5550AD80E3612C096E6AAD2F18E5468F23EC685C68E9D2A5B201C9F936EA6365AB35D0EBA292F4EFA50C98B43710A7A650A388442B1C247F100DA061A546E3C5A521AC8B75FA3584638F4C3350BCE2785C11A454CCC0C0EBC77CE9E065A5B594D39F810AC9E27951C4CAE5BD987822917124108734F4483D0679C778D4481DA0EAAA82E962686C62818871E469C95247D1A9E3E57918DA9661A8C0565D7CF1C577DE79A76E8A4230E9F42F8CADEB04E35042A0D885738A3494DE600BF8D4534F3D559CD6B56BD7323D339626D01F1CDC29682384BF8C909253FE947FB16728F475D361D4E810CC0E3983EC1691AAA2A256AC5881EB82BE42F6214AACF5FA7B4224E90F417310B4CEBE6C50C07810880B4179CB27E249DC72CB2D6CB001B271DA1F206484B6031523226F78AFC2ECDA25975CF2D8638F81D807EEB5133641C3AAC0BF586334B9E45EC452915B468008315F6835A5B5FF344268EF38AF064D306756D00B45E6537CF1279E7822F0E4EA48D0202A14AE68F10A443F5B661032CA1876CCF3A39E93083A8CC5A676B44FEDEA9421BDF4D26F02F7C1329BDA260C16F3BDF95C2C99CC3465DFDEEA94D4B683E7EDF1E63B6B9CC0B5507ED42CB9A96A342F0FDB0BC6535FD5862800B3DE49D2F59CA8A8826CC62916ABCA0B10328E574B5B111941D57713E94CB95A139FA190CFCBCF63C71D5135ECB2EB3BAAA2AC0123D3EFB7E5DDACA352393594B6924EF6A323A64D6CEAC9D566CD98346F527A5EC7ECCE786553FBC73F7AEBB74DAD6D056BC2C4EDBF77529354B21033637EDED9F8E6BABB2F5FD594C8B8AE512856945F450099A4672A3479B12AF0EC98F9E78ED361AFE36868D8F2B2C141E5A9EABD0AD6AD5B47D30D9276E2C489E20ABB6377DCDA638F3D609D005571D45147FDFBBFFF3B19DAFF2E9A4085642406731A68EE1150CBD671A94A8B575E7DF5D5B233292E4746848C9DA1D986065D47FB273909706FC4A88C940846C89EBA60C102B97F62A1F4969994EC73E6CC79F7DD777516558A303E3098B1B8174861F070A107217489E8862F7DE94B3FFDE94F5F7FFD7564AD172E5CF8EB5FFF5A8C5C6450D4080A5CA5F5E560D9046B593118B637A24500B27B8812F2BA806B014543F2AB279F7CF2A4934EE234EA55DFF2438674788019F63C82B5ABB4B2F506B42530272044432A42D5D38CF25BA0E659E735AA265061EA12F601E43ED1E8885FC99F2C26A053A876465231FAD4A009E08411998E88A5D2E290A214BFF5AD6F91D1847C3E5815BE560FCF552A5FCD9A350B4809B286786117396C7B9C0DF90F125B819C00EDC599E794B942F44F699D216411423733D08CFA09B533240F0E3ED209B86B71CE4403C9F9E518F69EE3E644825AEFAFB7ABD121FA0441D16FDDFC4F2682C054C03E5DC70CCA0396951D0DFE332386E97B4EB3B2DA6329318EA28EEBD52A5515AC9E163B55704AB367CD7DED83772CC876DBCE39652365D73C4794B2EC8FE68EA6C1DAE0967E39918A17838B31866D863E4139DB1671E2AA56A8D506E4C3B41DB34CBB502D64820895E578BE689AFE5CAE2C8BDCA9886E2AFDDF794624661929C3B14CC7F162C55A7349652B1367AF1311A54AD5CE9E7D67344D147F7E52C7A43D66344D9BD13AD43A7F92DDFBE2867C675BF3E4FCDACDC5F8DEC9A1E73E34E29954D4B0DBCDF8B55F59A20A5E2C623BA672CBC3911FD813F0CB413730AA266888CBCBDE07F5F73819606CA8A38F3EFA873FFCA18E2221A1327A27B09BEC58E7C1E6C5BFE8E5A957F8FE2F5F7EBDBFC2DCB9738354920A7B9FCA401F7DF4D1254B96C825C5B2938BA19DA4B848B26AE983AB9DA34314FD4ACF3F842F484932EB928242B70D293BF02D508C726960A11ADC083C3939E690430E79F5D5574973C45335D4F7EAF84823E46436C256398CD9B15E01A8D9134F3CF117BFF885480182EB75122115968663842456439D04DC1A39C959679D75F7DD77EB1C647A4F37B5B3FA44C9B85F270D47212E297D9871E554345042AA30B249BF0A50514499004B87E54E9F4FBCAE356BD6B0D5351BF2A8B1A34358CA90957A3130FC124870409B49B8AF731A420A5363354487D0B203D4EA726BF3E6CD93E131D16A84E46ECC132086CE6BB1A077DAB469F2861CE3E263115064681CE9F8A1DE2F5E857D8A40C0C5BEE764045261D12F1C6A20DF3EF7B9CFFDEC673FC3AFD8615B85813E8474597E8C1013E25AB2A5C566C7CC634DEA1C993AF72A013FBBA409A64C9ABCF1A3406F1DF999236525070BD8F72C3374DC8D204710F38D84AC3ADF1265D0220E99EF455C2FEEA98465C513B6C8BA482CBA6D6B773495F8E2A2937FF4C20BEB3FDA986D6E59BF75536773DBD040EFDC29F3FFB0696BDBE4C30F3BF60BFF70DC5191D6E6A121D34A0E79CA777D00D4032D64D5D3D79DB1A1EFDDFFE8734FFD6BBEEFDDF9B3A6F46E19CA97F2B2A0B276C4AFBA35DFEB6A9FF461F7F63EE58A46CD76B5973F39A5EA394AEEDB49C4FC949CA512CDF9D182EAF8B39AA2D450E7ECD6B8B7767E36352595340FDA739FB60533A23B3EC84766A5FAD6D95EB5D74E76191F14B31DB9C29C753D5B07867A67A45AEE3DE31C713066CF9CB676C34651680DCCA3084D8F151D92F5205AFFEDB7DF46AD80AC52B1F481911BEB716093225DA73798C20AE73EC29BB1A243A8216755300066FF030EE6B15E8411FF7579D19C69287AA48B7AFEF9E78BFF0B9B4BB7F53CAD3F972E2BF12F2AEE6070E1927AADA3FE135A6A7AB69986AD5EE88F93C8FE14738C51293D15E9870D0B19E5478192AAE779484044BE1A44B7911EC78D4F9E3C190D2298911EA909F409254D31C48A2C91AF7DED6BE245C1EA94E522DFA24681016B6A7B4A673DB1494E7915A28F802FD67D02D26B8F8A77B6B5E6BD78E40807C9BF3209A09994ABC8D8803745C21C7A7AA426F0C36E59702701EAE5A51B06A0372E05C132EBE0C6CA1843ACA3A10A7C142C7A92D7C2B1434282429305F4380F2647CEB368D1A2471E7904BF65A4556FA7839BE2EA421049CC3771BDB92DE10321E52E579481A1F10B7999E4AB030E382024E51F7EC1B4C2CDA2C6C2AFF70B445339C0FE70069DF7102C2CF27EEFBDF75EBD7A35597239EDFF339F20168D55AAF5F2DDD0338828D343B1B06802C3CA2833AD6C79938D060B3D2EBA5C8C5715C46DCA6EB5E6569389A62DF981F6D6D6EDFDFD55DF6FCA366D191ACCCAA248A8DEAAE7659BEF7FF2679F3AEA6335E5160737753575D611430AA902AF1E35AA4393D4663792B1D4EF7FBEF6E48507560A0349654FEA98B879C7E6492DE9B86F67ADF85E7BEEFD978F3E7A77A8779D939FB460DE50675359E51CBFA4DC48C26BB654A462146AD64034E665E675ABCA14E3A3D53DBFB5D53627387BCCBCE199878DF4C4EA87AB0B6632DB944EDBA5B77A2AFD9BDF29E6B3D1894D03C57CAB633C7BF9373A33ED471C76E80F7FFEBC1B24685C4F23B2FEC4273EF1CA2BAF20B63C3263BC6CD932B1EA642FCBD2BAE79E7B906A1E9FADA4A11E9EA073F807F46ED57F57E188F380D50A12E9BF0D15FEED2F9C30105F0DE03CB8C328FAC041E45E268BBAEEDD1345AAEF6A7D76580EF3CD6F7E531C0BA5E12F47D504D84BACA2D4859A8E1D22CA1348E106EC90D2322D7A5E01215704D659F20A1E21E4EE264E9C08A98D181F68FFBCF0D5708380C0C382008C470F029A21A3243381175E78E16DB7DD86CF093D52210C89A5CE9011A8E7A013AA7322915849699D41553DD8C76EEC2C3502770502389C4C028D91FE0155A4D2480A47F5099052422A1ECB91405258BB28AED129921AEA18C6419182565685200D6C1E3A52729E9B6EBA69F9F2E532157A7448C76B3269CF625A1572104170336B85B9220B02D3272A340E90129401104A00AC043E24570AFB71022D0EAC3A6AF58D904F1F850B471E79E4B3CF3E4B963AFC8B5B907D71E5955722CC28A7BAE4924B6EBDF556E86CE2E5FE161BB04113588659736AA964D0C9BD5A13819E44F1574C99F51C6D9021888B0230ACB46F270CCBF4CAA2245266241D8FDB11253A20572B956B22EC55A6A9F9C3C18144C4760D355875263535073507B9A19CB2CBED7BFDD35937CF3FFCC8B629CAA95406760CA4D24D810E103D2312B69E8A909514FC6BD7CC92FFE6AF9FBB73E5D993B391BEEEDE9425F2A4D8D29234F29568CD5F306BCFD5EBD7BFE7E58B4973EAFFF9E48E52DC4BE6FD5449F9A65D8E1B41A3B3B21F29FBB56C25E6AAF6DFA96755C7642BB73DD9D63EB967C7FBE55CE4BABBBF31D092D998DF6AA592D552ACEFDD0D313F63C6B6975391CDBD3DBB253A26F5798FAEB833198B171CD15CAE2E49E4895C76D965E201B006BB0145AA4213136201BEDD381ADA080B2A172F5E2C9A833866E08800A83BE69863C4F218BFE31683223AAC40FD0D58B2BFF1C5C21403501C08239A75B276E592B23A656A2EBEF862985D400D4212B14B14636D723C3B7EE06C7ED87923A038AFFF1C1B8FD25985D62EDB54FDCF3ACF9861D33B4E934E114C2E1492DA13A30DE10B682CA23A689283DA2BB042B2CD1670FAECF3CCB00C7B1082260132DAA87701945BD3A5122C56BA1DC4B118218F0D22303366CC20A782F81622FBE473F131C981C3E2384A4FF2CA354478B85C80B682C98FF160FD89E2479F32114037DC7003E1138853136607613AAA868075C3FE42C84BEB4D87705FBBEFBEFBFEFBEFFFE4934F623C0D781E3B6C8CCCEA5924E5643CE08E66B89F75E96467535A8359267211B3927F45C85E71C5156443C375E9C1B03FC448494ABD28AF7BEFBDF7ECB3CFC6C61E07C74DEB92FE341D59A83742C2A8BF896CD67B91B35AD8087B6DE2A5DB349C289F0DF2AC40EFFAC8EDCB303C7F988A43B695659BF5B22F71114C71CEEAF55F533ABA4ABD7DF3274E36067356B198F74BA9482A21CEB1EFCA532B3B65F995DC726F292F33B5DFFC05AFAEF9D394A6F66A4DD49B59AD96DD8A1F6D8EAF1DC89F74DEB752938FE9EDCB98C57247CA1F8CD69BC6F8B2B3C40250E542251D4BCB32D9D2113772EB92836FFFE8A16BDD818DC9881AAA297100271A5E4B32591B2826FCE4A0E3BDA7060626ABCCFE9D6533512F45109D9A50665C1981020BDC1A27938E0EE6FFDFEBD3F6EC8C7EC6FFE8EDEEB6816C6FFBB6CAB656F5DAC0D29F3CD436B4FD65A3BBFFDD5AAB39757BADD21CAF5AC54A7FABD9ECF8FDA581B76E78D0965395AA89B061220AAC8CB0FBF1381296D481D87DAC8D059E87AC3E2AECB33BEA4960B22044AC63C3B072880C84F9AF7646D2CB45653DDF75D75D08CC508A8A7040DB5478AE72069DD551697573A376B6C1E23494D67A173B93F556723F889FC246139570EDB5D7EA4D91C05C06F30D581D4816987E689F023B11538CA018DA7B6ED8B041448FE861C02B8950DA555D6784B566C8D9C21A85CD4B909F0AAB5B21A6A166A90CF5A4909E1AA2B7848A274089410BA5335DA3720F816998C6F2E7962D5BE4E722C745B0E26103A704080A4A16014636C3D648884BB2FE193DD1CCB02326560F74AA7CF5E0830F222C2E42500E1095431E0B3D550399CB6ECC50DEEC884BEE11A5F56340CE1CF205ABB6A1D5418326408581B83B77DC7187DCA9DCB29C1FADE5F0D0C918AAB74340A41E159EEC3C81D9E61E90539D7AEAA96232C30940B30AD86218F6A44993C0A047B541CA3CF91CCB5D7E8B6D43023B8857BD287D544D408A0B39C9F4E9D3D7AF5FDF80251B6991186197247A3C5FFFFAD7BFF39DEFA0F4812566721EEA6F62E1105382FFD4804DA08EA7AD40E70F8A6A58FD9BC17D817D42FE8BDA61FF9C3A2F50213F4C4AD3924A17CA95F6891D5F3CFE847FBDFFDB53D24DB5FEDEB432A29198E3E3D2750345B9E26105FA241A29CBAE54664579692B118BCB692BE55AE5C87907AC5EFFD647CAED6B9BB9FF1796159B26275AA37DFDEB93B5298E57AB54CA56B41E7350A2AB0CD12C33AA8542CFFA5FFCC7FD1D914269B0777236512C89428A24DD4ADCF49B23A9C30F3EE2A72FFDB67F82BDBDAB929B145C3940367931DF8A99967832B66FD47B93B989D21F57B7364F9EB7604ACBBCECF7563C9651992987B5D96D76F10D79E8EE99DFB8ECA52D6FA7DCA45DF36AF1B253CBC66B7E77C6B407CB6D9D5DBFBBFC9EA0E4DFB3AE5C7EE58D37DE082E199D4E7C1CF90361429BAC81F449360236BEACE7C30F3FFCA9A79E1AEB3CBED6D017FB0E8F1E5DC1D9AC17362E491865251F7DF4D1725A9841101DB367CF964D71F0C107BFFCF2CBF243F970CA9429B2F209736AC82C5A23BA5DA2BF936C2E033D3F49778CDD887E4F84E2E12C0823C8B740C592F312C629C487DE32948A94B46E7249A84A2440D0EA12B136E64F76D527602DB18839628DA82D216749B74238E9484D408A28C8149916D9D294F80DD133B91636215913100E227C1E825E0413940494CA75D75D27E212447530CF79177453BCB0B19C11F662C3C4EADD7D6102CB5758BB2A04AA36E4339466A542D18283F39C73CEF9EE77BF2B0F054D9B2165640E91A5F7425E657970ECE20916C9B1A246F27EC9922562EFCBFCEBCD1AC12AC3A8944CDD19679CF1C4134F6CDAB4894690DA996FC7D01A8AC92C9D78E2890F3CF0007CA954FD85966430386402EFBCF3CEA54B97AAD0B904308C17856E90F3C016C1D3013CD7082B4EC6D204D8E4AACE318709FCE77FFEE7175E78414FFD8D2A2954D8EB9C6C1946487DCC7C7203CA0B2F649874CC95AED73106FD7896AA0E3F1743F99A15202E00C870E2D158BE906FC90E73231A41DF7A39C49CDA39A97BEBA60E33D16C5AADF158D50B1673D5A9065D25C5873087DBAF4612B1A66C4B5FDFE084B68E801337B0EECC4C36F50F877EEAC7FFEFDFDCAA5351463A36B35071F26AE36423B223C881977CD38F6752857269A014DC70269EB4267479B572F7F6CD9D99A893AFBABE9A6007F224617B96E81ED7C99AE9B219D99428E4E658FDEDB574609B2A392CA84E336DF17882E955AE953772AF95DBF7EEDAE7B0793FBEED87D16ABAEA55AC786CCAA78C9EED316B7366FE69C7960A7D9D139AF3B90FED785FC1EF9C986C7EAF564897E54A91DCD37FF8C4C70F7BF395D72A7E41D6A1DEDF14900DBD7B84FE3243627398EDF0DEF4325590CAC02ED96DB7DDE0C28EAA060E38E080D75E7B4D695037550788CBE72FBEF822009664E8A19B2B76F38A152BE442B24EC87E0199869836541A821690E786D6BDDC08ABB54476C19F26290B9AC418A0B030B4CE9C0895C0CDD70D3A021B20F82EB8E08255AB564D9B36EDFDF7DF47413262E2B24065FB815554D79CB27B65C4EBD6AD23C711B513A7F56FA9A01939B39056627F8992473705191E4A10C0CE41DA58DD1783D631EAD500C8D332CAC13180531E9A4CCEFC99CF7CE6A1871ED2C3503815C362BA80A3790BE5216A152252740302629014609220212833A2D43132C9575C7105288E09F005B61D2B4FBE625BE391691BA83A128FC84BECF7DB6FBF5DEDCC14CF761410317BECB1872CCD575E7905460A25DD484D4026741835C8E18320963E964864B91DBD619E19126DCE9A35EBB4D34EBBE5965BE47688B161AE1B382E2C2A5420CB8DCB22C6738487CE2A71380A34BAB133A1E42046411ACC380C3B918DA50920A9E1DAAAB02FE93836231B59EB650462A3C9462065A99EB1A02F8E9FB33F018C155F6B760487CFD2FA59CAB73C1E1683A77C5801C3EC61A532B256A9447228379488D67D3ED749066970B31E947326669A5BCC48B45AF3CA05CFA807A37C5100812B601A2A6205EEBBFC21BE41DE29C7555CBC8E784226B95C73AA1D9D9D95EE6D535B9BAA85DAD662BE33DB3130B4A339AED695552612ABBAD57ECF9727DD35B9BD3757D83E5444E1D8C489E95CBEECD65CA7EA3707B965372AEB2DDB1CF1D496FC40574BD7FB5E4F6D41725B532E5B0BC6217353D75BF55AE840D5A9DD5B3ADFF8F76D6A7EF4139F3BF8B757FD52E52CD5EE78057BE16587FDE8B71BA2AF9792A71F952DD513B946A935E36C2DE4BA92CD7FCA0FCC6D9E5CB3ADA573FEE1EB175FE495ABE2B810324752A07192B17ED8455C854585C84BF9758618790F7F94BB7E1CDF11D124EC5352EFC91866CE9C290F94EB81993CB1FC88A1471A03B62CB1E3F6CEDD58F510B1AF352983B521B770C41147BCF4D24BBE46573E5C638C200F94A1086B78D6146A9023D8FF0C19EBCB9A616E9911FC96C903EC28A467194900F5B1FC70DF7DF77DF3CD3755D8EE87B99A5D7AE9986B7C420C38A7030A86512F1D1C05CE29F9FCFAEBAFBFEAAAAB549D0E5E74099054E4E751757B1C8E21702608B340D6408DF3FC3A4DBC18CBB7DD769B5E5E08662744668068024C5806031D00BE7E1516C7A1A38BDC2398F8CC7A3F58747AC0D90E3DF450B9D07FFEE77F32B34D3095D292C048DD934A0F2407A8E4A25402A788DEEC1BF12E901A8EE513C0F416C1B778F162717A54D81148E78480A004F7B2AC1358F408EFB0DA4387D8EA99F04B2EB94474BC3C56087D64DA116167BE0AB3EDD799FB54E803C1E517CF065E149A72600FEB68D451350111B1584B72A48CE1A28B2E1A6B89C2B2C16C93B805914FA49DC01660ECDCFF12D121DCE682050B4410200F375213E855230035EDB9E79E6BD6AC210E6A5813F8BE593F612A1647719FF80481AA1E1A8C4583585F5B4B73776FAF6DDAFBEFB5CF9AB756B7C61276AD6ABA557718E763D4CB81956802DBB4EA1B471EB1B7FBDC3DFFF4EE5F9A92A2988B86E93A4E90A8F02BA5CE647AB0982F29DB899B76D21C182CCF77E3384F45793B5425164D6EAF1613917853536C53CF60C5527E345E28976774B6177ABBDDAACA04CD898D54349E8EA537E4BA7B6C65ED9F1CECA84502251DF8048148AFF32329C4BDB62BFF8396F20CF7A67F5DF9F53DCF8A38916A62C852D9854BFFF9C7BFF9E34D272DBD76CBB39D66D4AB66CBE5885FAA669B12FD1BB6362F985DD8B0DD8F9ADD8FFDA4ADB3B5777BCFEC59B3D1B30F203DC887F171FD483A8ABCFEE8A38F1AA2A6480521DE024134162A54D6FC51471DF5F4D34F1B759A67A093D5688431A04405009A3F47E0C808594C409E8A86A0042813D7D3300C3B6CA60D0909924D1ABEC35CA48CF38021560E92CD8379011501BA637FF39BDFBCECB2CB4013AF34C09CF8359FFCE4276169E232043B02233F6AB75E66C3A8FDC661621AEBA587771020863C5561974AA407600692044227DD832638FDF4D31F7CF041422D797E766282845ABE7C39986D0CAD14000A52E72B655703B1E8C559A16F216A06CB48D6D3860D1BE4F8BBEFBEFBA69B6E426757A41664FC3ABE58960E624122703130594024A626881E7D7A1B604E9C67481C00DA80443AE38C33646CBC84D8F2F8973964C06600AEE58A1F155D0AC751DE10264B51CB6240CC12CAE5316691CBF2091B591B1AF2987C3E702F64B4E8D583740EA216FFF66FFFF6C52F7E114C73C898C9E5E48EAEBBEE3A64833078A5396A447629ADD46EAC8C31F1A6322DF2E0E0228FE3B3C23087F642F0170F116B1B73D5401C465B448515A4E05B1D353AC48C028914E578795E7CD60136D4AF0B4ED4F65787D90112B1B8F80451CB46DCD9F0BD9A682CC3CAC4934EA918555E532C1E313C6C40C7F5A2864A0C930E89E9EF28C36A6D9DF04F471FF3DC733F91AB6F1DDCD696CCB6B4346D1FEC8D146BCAABED9999E614CB8E5B6E56B1B48AADCDF4E772055105D17464FB502DD2627DD0EF669A54AB3F61B054ECA9156DD91A6E4D647C2AAA8C9ADA63C2C4426E508CF4849598B8DBEC17D6AE1E9CA4E27BD8AA8EBC33EAEC45C11D2B518DF56E7D7EC7F697B625E676DEF5F86D6DF9D44173F64DB526AEFAE63503A581A77EF8A3EABA5CE7D7DBB7EDE8B6EDB6A837C5F762C9F284163FD613338DAD439D53276F7DF88703437D3255E2DF106602F93B3EA31C1C3E39E6CC33CF1431083BC30CDB462A0D12C9CD32EA79E08C32BE22EB107E21FA8EC1100761017D5C94D4A0950850D1A4F1D7534724725761A444AF8262E31DB4A71429044F08922AB051B84FF464023F945D2A83139945779E5DC2294345E81F7FFCF1F7DD77DF934F3EB968D122A847445A00B462D11384118245722A6CC219336680BC8CD6EB2E69023DBF477CAE0C69FFFDF79749FCCD6F7E83500C75006C2B9D491C91385427884895C1C87BF493E10CB217047EC5D25018A472EF175C7001A4869C448FE9AB30AC4F2317A63DE1225463A0B8C04A42E131A2F3BA2CA3BB83CA75511B32C30002410FF9A335CE6CE057C178105BC013A46447EEBA6186C7C70E6109C245057C080E25D6122B42405F289FA0C050460EAD26C7070095FAFCB0264B9F3DCC9B8E1905B00D3C0DA2FF60B8E05F991F44A5F06481F681DD240E289A83D3D305926D2C4DD0001B03E7287BFE8D7C6133A3332B541DB8724F39E514F1C4E561E1B1CAD818A244B4C7D899F58BF5316AE78CB10AF30A5CC34C230F3F716358ED8348289318A66535EB4DC744313AF59EF5F120F7D8924DA5D77FB86EBF797BEED8B4C9706B8552B139590F48BA9E6DA8782C16B54CCF09200415C7330D7BF2E4A91B376DB20DBBEA97EB419A20B2B3E7A41903DB7A93C9F8F67CF79454B35BA888ED9EB0BBA2513B5F14713B988AB57EF6F327BCF8C66BBFFBCB9B25550C6040D964BE5C10E19E8C25F243A588652E9838399D0CBAD2EFD8D473CA994B6E7DFCDBEF1943A9BD225E3CA84990B9B1029FC0F45CF14464B1A9EA966A536BF3E0EA813D0F9B77D95D57BDFEAB3F5B656330BBF53FBEFD93D2BA6DDE81C9D4AC42DF641531ADA4D73AE4D422DBBA66374D7F3F976FEAB75DC3EE7FFC571F3BF880356FBF2973230B432C455061633EC7C1E973139D78E2890F3FFCB0AA3BBE7A0B2F3C05C264C6A90F602523AD22432B70630C9090212684E82932BA2847E2DB919DC375F1A8428C25C0D3B85F4432FF6A6DC09B40FC413E1213F5FAEBAF975393E34C85E938F0FE533AB0C39719767E8047ACC36FA05774C7C708EB3CD977052CC766D86073642FF5FFF605B3541E920C12DDE6107080B854F5CC8C588EBA854524064160727579239EC15D77DD05852F1B1BC5537AF49F3A007F820F47142C818FD467A8BD82EC5EB162C5D5575F2D2B4FBE15EB95D607C643DA57B5738A1F6B14484A997014BECA3110E8801EB13C4D2FB9D0278715AA44AF4293C900383F725119E1B265CB8094051306C85874C530AA26603DA00A934CAC24D70BA1BD9DBBD843FB422553A819218527CD76AC4910D9E34F426F09A1912992ADB574E9D25B6EB945C68CDD0563878051199238738093CAC0B0267568D9484D70F2C9278B0B8F8728C7CB7E9337E354123156AB42DE21D691B007061967F1A71EA564B2CA0F3B29A9112852C20AD87F7BA7FE1F81F90CFB39B8A90BCE3DEF8E3BEE08347D3EBFFCFAE5CBAFBB0E656EB66988948A1A762695AE958A9E5B4D8BC7E63B1537609E88980AAE8568E34424706EFAF2C578343E582DB7C49A72955CDC8C797E559EF004D72F794E5225FB5571D6B4B6EECDBD1322769BD59C2FF5C858E23133928C6EEE2F374D6E7A7DF3603CA22AA98448F65241E4839289B9F8A20B6FBBF56E794A56AD30A373825F76B60D0C4C9F30E7D59EF7FBC581D8A7D989957CE59A2A582D9EEB8B1751AD28A7A6DAA64C2AF56D715E56664CA5174EE87EBDA733357F5B748DFA73AAAD181F3A76AA5579B37C74466DCA4532AA1651B1FE8E6C3931146B99546E3354B6E7911787867B7BD5E0C601A4078C3BD8D4C7123258CF2C97515A1C18D4F140228D9FEC440C8735E4CC5419F59E04EBD7AFD7E9E8E50D42AF0CB10033065380B855F822483960006A04DC80F410DCCB04E90C2F7E9D4E8F644CE8BAC79DDF0047D955493DEA8BE935A2B671576C62A36B39CA148833C64FB1C7987683C447F00416BA0805CC0ED9661CAD613A9F0D72E3DCB1CC64181AF39AA575E524F2523624F2F8441DB00A4FC750A1D10A742437FFE38F3FFE95AF7C05E20C7724CF52C4F1CA952B81DF2565A90ADB5F203C7243FD056B024216528FBC1A2A54CFA4C266551403718C7A613D21BC034D00B3E5D39FFEF44F7EF213B92911B2AB56AD429A818D5674DB04772DD38E6A8991557EFA4BAE7BE79D779E7BEEB9841A03D086FA03F9131D7AE54FD9A2DFFBDEF7F4E029560B8230BA4C9437F2DC59B622D38B2E6C88FC8ECFEBA26F755D13C849162E5CF8B39FFD4CDE8B1E42A01F0EB59C563E617508E303549CF215CA0C496BC1C5833246804FF4381EF23108CFCA02B8F2CA2B7136C04B20A1D89D0DE2033EDC58DD10793B78C3BED0A958B08A82C4B21510CFF9AE17374D99B28CA78A4E351E54A49979B776CED95F7BE8D1474496B435653FDCBC3D6629DF5311CBF01CBF2D9B1A1C2A4C0A982B545C5931359C6496E94E66D2FE8EDEB9BBCDF968FD07D12060E52A33DD1FB5D69607FC64BCE6B99144BC7728277BB56342C7E6ED3B5AE309B75CDA233DA15CA90CA4235B2B855CB122032DCAA8FFAF526595F4927EC92CE5CB86EDC59B632AE27AB5BF460EB16161910C54FA6AA5683AB1C08A257B8B7F51C9BEA6C9663C95E8E9F4931B8BB90E99888CBA3E97A9A672ED99D61DDBFA775D8E2197C9763AA8F332C226837E9DD180F87DFC89ED00694EBD3E6BD6ACB56BD7FA61B7039D346CE46BA7004E88651867316383631D92ADC40FB90674731CF63DC4852CEFE08CB2ED518C404F1F452BFAAA6AD030FFFB172BAA54E8074110207242C411B6BD1F36B7D16B4028EFE0E383BC85D301E239E23591F727D8D40C1BFBB187A20AF58A1F36785261A1202C35C470C02F0FE989E42A42EAB2F3757633762C01B59CCE6A8007097E4DB959F4449341227807E27B244E6923CB9132783005D1F920EC52D4F6673FFBD91FFCE00772E439E79C239620B4025046440003DFA6F76C414A5F6F1F068CBF1C230323FE0CEDFD2001E5577247F7DC738F886998EA22F56424487CC9CF11BC3676E62E6D78EEC8D3CA854E39E514192D16FAB469D340D9088F441E1CC1A6EC74462715B7C0E4D3D1471FFDCC33CF408DF15E505C0615FB3F606B5075F404D8E5E0429167822D4EE50019030B9EA12D60D91D73CC31CF3DF71C9D7D19001ABBC2B1D6E17DBC34717EECA04004361E01C3116C34364E3415AA82CE166BD6B2C9D4603E17B123D3674CFD70DD7ADFF3AD3A2184389BA948908896ABE47DB7ABA37D7B4FB7680CF9767247AB53AB0DF4E726B7359787F2F99A9312A15147F444827CAFAC51A3A644191846C44ED79C21E5CD4C3577A69BCBF97277A9B0CD777B4D77875B811F9D48C66AAE93AFB81FDF6FDF57DF7873A2526D2A263F1F88DBDD81A9EDC9602AA64AFF6332972B59BE1D8FCA462B5755351A37ECB8E18676AD9E580A1E77C4C9175424DA6227DA4B8EE9C5AA7E6CD0AFF6AAD9B14E5133D3537EB1A5B26253C24D953A32A92DDB8ABB28C7FC7A776EBF4E0B6684ECBF6AE7EE6C2866E42AD5917278B2865649CA0FF1669CFD8237A460D013C2631D0FC90944A2DEB2945A078638FEBCF5D65BC5F230782784030239ABE31175ACFADF4B13A8BA58C4CCE2FDB1C71EFBCA2BAF80EE51670BD059CC0CAD1FAFD2DA41C8FBDB6FBFFDF2CB2F6F6B6B033252368FDCC5F6EDDB75E38BBE05BD2D98F3B088A9DB79A7DCB194A16CDF06DD801A4536F011910186259DF60E9CD570DF647AC9D7E6878CE7728F22EB45B83CF9E493224410D786850EDD8C56D4B7DC72CBA5975E4A5B43EE4BEE426E50E7A783C182781742EA40BCA83A364CCE0C2E23643E90C0649361E211E5BDD8ECBFFDED6FDF7AEB2D12F032E3242FD1550D4443C87F3440B6467DE8506FF057381E066A808E456449D52366BA3B88A50CAB1F66B511764A60520A758B575C7185DC353B548FD35144DF420D19636E6FDC3BA297B012C4C943C71EF90A406ACC007BFE206B8255C79A12198C1C2C1A0E94B44ACBBAEBE1204A7C9623C027200786CEB634CE7EC43ED735819CB9ABBD63EB8EED996C76BFFDF6F9FDEF7E1711715E750C5F2565BD59817F2952408652766BD16422F84279C55C3108F8D4E1255D56744232E595ABED56C4AF39A6EB476CCBB0CC925BC93925591087CEDBBB54C8ED0838BB6ABBB54EDDDC3F5048443F28F6E66C2B95C9166A95814231DB948DC4631BB775A74CB333935283F9849DE88EFA038667384AE468C552A9F94D3BFA7B5542354FCA1831B7582BAA2017AE6C34D6D9890433F833A6A2855A55FECF8A347BC64C2B36A1620CB8850F62134D634B777946A4AB637EEF7D6F55FB6C953253E55A71D780297FE528A39C957585E6BE54E77CE127220DF02DF8EA11F0089A3DF4F4A0A52ED833C7B7B071126C4CA2A575485EC30BC109C64EAFB9E69A1B6EB841DFAA40F4899C947528AB11202231400DC452E4F7805A2372846A4C1A1D1807A39CBB3685636F3CA25F65A38A8C1349C7EE34D80628578683827A2B153672227B0CD1EB84A0408DC9578B162D12BB4CE61D617A845649072D73014C088D6B7A9ABA03045F1EA671A9FE92F388163DFBECB329C7E524C48612062ABF42CB65A85F6C78D6C1A2B803578140C7D6153313E7019727CE03E67A9A21009950592E5FBEFC81071E90C3E4CC2CAA028FA97CA2331F30FE2E3745F66606A979C0942953444D6266CE3CF3CCBBEEBA0B640F73E6CC11918733C802153F809D57751744BC4E5964E3B33290B4032F0670601CC824C80D225BC3C1EB1CAEAA9E6ABEECB2CBE4B1E236F1F8D09F190790F307DFFE2D0BB24113C86DCACF6566880026AA62C99225322D58784A4BE9EB952528D859B66C99A825F9E4FAEBAFBFF6DA6BD9E8AD211B0C56193C0204CA509D833435B62198B2A01274CCF85893CCD02E9DCBC02E49A6F285BC7C3D73E68C751FACB7EB0E415496B765BB4ECD366DD10483E5623A91EC291533F198A7DC7CD91135B0F76ED39DDE814CD58B949DB48A4CCE647D272080089ACF5866D1AB0D560BF96AF9A2F3CEBFE1CEDBBA62A9B411115FD730131BBD9C6327F2CD89CE495D1F6CDCD03B3854F383D6340F3FFCD0A2534F9F18B555D5E94AB7AE2F0F8A2688995171B4E511DAE95451FEBF49256746626D966757C5B1AA9454D2C6DD8DB8D982A1629E1351154FD5BCCE587C6A349E96B7C6A6B5F9F7B689DFD13677BAF7DBEEA1FEAA1B1187C1ABEEBA4F803924799C58035FF9CA57641142B6EAC0B091FC37A43060A41AB13E9C761C1F9A5626C21B882DEB159123C7C98C20EC5A76DF42651556050347B4A5864F47500A9938C5EEA35BCDB1FE1D7D02C84712A0CAD207E71A46894FBC906813110C72BA29CD4D31C25650489F92B70777840D86F3880015D582C8C93DF7DC73FAE9A7ABB080562EC1724DB57337023C45915008B293BD0057944DBE72E54A586AF215D88A60CAEDB3CF3E2237212900E4A77D8D07207A028BE3EEBBEFBEF0C20B45B2344017E41272985C856C362ACCA642C0C10E850328C75C577F0141CF06AA2A2C59C25396C388DF9793C854C88D33718D64B5AA2B2748343116E46C32E7401CA1F444261F590A40DC102ED3AB07C6410313F52C3F9427F5E1871F22FE23E609D2652A7450888E50616130CF2943454E1BFB0D412DF4B1812305870C69F6BFA509B01AA1093092FDF6DB4F7C23FA5B7277F2AC65124451E143A86A59BA282B5121DD371150A8BC01BC829441B847FDBAD8BD56BD8B998EB320951340844049C1AB23727CD4DB194B1398CA306DABE604136299867283E8505CAEEE7971658802901F0C544A71659694974CC45BB2992DDBBB0FDB67AF43F7D9EF773F7E3E5DACCDCCB4E576F42495612BB3CE7564B9B65FB554D1A8557CD773C4DCC9F6F776C70C71312C3399DE562DAD2BF789591B4BA486F239CF365BDADB7395D2F6BEC1582A66972BCDAE3DA56BF21B5B3F2CDA46DC1271EEE5DC6A4DC5AAAAE6473CD5A1EC4E95ED88AAA8234B2002B2EB11FFC65C6546125565E66B05C7AFB75DB6A6A7EC69DB7EF16BBB58716281D7101B549954366FB87EBEB0AB9A00F22A5E7F2191C92C178F81FB28AB825CE2D8B6700A19A5815F48A02609D046BDAE48865FFDEA57EFBCF30E0C47D4A68C537A358E26800027D4155CBF2AB42C0D2C6559AF681D0EB929BAEEE1871FA66BC964F4FF00E539CEC6E364C9BDC9649161CDAA370D07DC1BB38F641DE49D9E1937343A1DA08080AB114D76F2C927DF7BEFBDC02F2A2DBCC34CA9EC28967A3329A26B02FD120DDDD664EEE442B26921768DB06B02741B2D6E7A004AAB8065E996BC649048263FFAE8A3801B21E0206FC496147383CF899C80AC5087A3804C232254B8849C8100272439682633660524190B2CD96D0D350498312C5F54CF61C0E484A08BA6971FE3D600B3E1C48E7CC9A545A92006883B850982A70C0CDB6EBBED8628194BED748A2E14BBC82588136335AFCCD8B9E79E8B0D099BFA90430E1151FEB7D4AE376802D8FB840563E5D3C9906FC515138F042C81340EC42C58BA7429D9F130B7C80061FEE110D05A848DD5908783832F6F301BD01C18007B0842BE8FDFC570D4E890512F682A964B9572B9A5B9A95A2CD42A4E5C7490E33645634E4031A45A5B5A7BFBFBA64C9BB665DBD64AB53A736287932F8A8BDA69C5DB5C3FAECA73ADAE8A5B8D28CB364CC7F74464970DBF62CB1BAF39D3BCBA6FD3B468BAB3AD7DE3D68F3ADAA7BDD7B363C8F23F740A89486C409445D04152891D71E59597DE7CC76DF1AA3739926DCA645EDDFE512C9D5255CF36ACA2EFE46B66C5AF544553894ACDAAEC6E91447BA4E816F9181BDEC402F6D3A498109E9517E5EB57949F6B4E7AB377FC61755419AEF25CE55888B6DB11B94AC9D8356267C2C7D99000969FFC092025FC572364DE641819140062F1205A28EB4744F09FFEF427C460102E1EE73962A9ABB06B2FA4F138FC6CE3478780560720FBA8A38E7AF1C51751BD14944C2A8DDA82920B75B66A67DF533793FFF72F645F514381711F7AE8A1AFBEFA2AEC41F490429E5D4682080690EF7ABF46F20222D58CD9476D14823C1D1D1D279C70C2030F3C002D2237882A2D390F0416341FB6BAD2D250BEC6E1435F044948521D60426114B37C175A572650A618E05478737ABF04CAB5638F3D76F6ECD980D5DE78E38DD8AED8E17221B911513314B80CA6C1DA856642A05F569B4C172939C97BA3278A19BF420C10E5F5FC89119685C3DE91CFC55760B34CAC48B91DC43AE56099D2D34E3B0DAB0D21357803871F7EF841071D74FFFDF78FC5DFC260086241F0E4101D824895F3CBCFCF3FFF7C3D6085E1B1341F6C28A0AEA214463B11AC284C027B0EABBF01E9303263AC6786F4D611A80682FDCEBE750408912F0FF5953239F210019B86434935A02320B8B940EB825410E0553A39237A19EA68905DCD1807AB3D16AD890F17B5C58297556E780166B42B99549E9F2F97445C6663C942A59888277BCBC5C9916844FC6ACF9111CC8935CDB053135DC32E575D65C76425881A70AA6525FF7915E595552D93686E9BDCF197B56B8ACAC9AA44349529C4A36B7A370F283F194BCA0D6F2DE52D65B4CF98FAEE868D9909996A4F6E8A9D741DE743559D367DFAF60F65BDF9F2DB5242FEA7C4B8F78372E55A7C7224353DEAA5AA9EE5A99DBD76C8A4603F59A2EA5432AAD266A2B0B55CDC6664CD8E81EE41B7E64695198D596555AAD582FB6DCA740CE6BBD5AEBC680F8948912D43F0B43C1AD91A8821334FA6F38820DA012C32BE95450BFA2C069174D693519F2322DE147A0C4B8EB5BF46668C99A0460059DECF9B374F7C025863818ED1F124679D75D64D37DDA4573CD300E795FE8E3E01A718A210E130E460314132B0EBAEBB6ED5AA55207D431681E4EF2A6CC76C840DB3482A075023CA37C04484E943BC1EF10476AF26AC88B7AC9B697A852A9E2E00C590FE32240A23B1EE456E32FA01F1CDCA00B00890941B55C772B6030F3CF0139FF884FC50068C0091BC8171AD420D0FD103C708591C3AFBAA0E711159431221F698E4C8EFBEFBEE8B2FBE18A29934217206D1B2A79E7AEA15575CD1C0E9AFB46821F0AC9059720C8295003CE87D3C5498FF6763D87150A4F08D40E641201D66067F42AD22518415CCE581B17DFDEB5FBFEAAAABA8C6506D8F183D828A9819A65EF5718EB3201BF2046CA8A0B79ED641E56ED838131EB7FCBB78F1E2EF7DEF7BC89DC89BAF7EF5AB2A547B2A8CEC31F5AD34D0373C7AD28C53FAC355C208E5FDE9A79F2E4F53EF223556E6702C1469F01C5D473EED9CD2B56DD3D680AEDA554D8978AC124460B3A2252CBBAF5C98DC32E1A3FE9E5993A6440AC5FEC1BE8C1D4D3ACE24233EC177F68876A43D35E0546386658AB9ED072CD88E65140DA7ECD6648744E2B19AE9178A85782CB1BD9257A9E68F0A4345CBCFBBB5A41DF32DB3E03A05DF29197EDE519D11ABCB4A17CB79F17D3EF6C9C3DE7AEDCDD25021EF55B7C8392A414427AE322555A9A6CA9119410B4AC71E1DEF5FF3A211F12FFC204C640C36F7FF29A70A7EC2F044B39989A678D5A854F3AE8C3B60CAB6951137DCD12D95719607B6A118408F3CF2883C38D436CAEE40E93E4C101693B3FD8911D6E103BF803DA2F7F0D02103235F282080FB0EA43BDCCD71F6D7A8285215663868D3B00C68D829C19A83C94CF6082C7D0817D2DDA8B07C06EB155DD13926EC1C18C5CC5BC2C0019606A0259DC59B5DA48DF005C83CE0ED2C1162408D776BD4393098BA10E7EBE8A38F7EF0C10755DD65839B26F7C6CA29D688EA907F96FFD013A264811C6492504FD0215A22778A1EE5B4FE282620E960FD352439C1F28103A64D9BB675EB5619E4673FFB5931F4E070C8133AE288234E3EF964DC0516CDFCF9F3DF59B326B0D4529182B8F266A46E0519E9A66C7E7050F95E6B6B737F5F9F690799F0622127BB33158B544AB5AED6586F5F2567A96CC6CA0D88CC329B524DF9826853D73454D51FB34B25874A6B5DEDBA05406464C3F9B14FBEFBDDEFCA8E924F40E38CF23150443047AA777054A1A68158677A8DC28E7FFA61D92D4B78E45F48CC4B2EB964C58A15D8BD6C4F84843313CBA45C1CEB7E0166E5B4C05E73C3FECFDC72D0B8A00400792AFB21738FC8DDEDBBEFBE6BD6ACF1432EB0864C15AE48A410DA7002156684545D6207C80402BC88B99263C4A35AB972257D0E0E0C9E442C11177FCAB48C8869B955474C12D1549326B4071C50B92111012DE9745F3EDF99CE16F343562CD254516911A786DD15894D73AD94EB56828CAF97B0935634922BE6A256349D4896F305197A8FEA8FAA9418F5F1483A93697ABF6F9BD5DCF2C1C08E52C22A96CA93A29962B532A0DC7CC44FB4B66CD8DEDB2AEE483C552DCBC6340B86199FD8B1BD67B0E894AB56A0B1AACA97275D279C9035AB0CCF6F3E3453A8166D91BDE96859AC23A71C94D3192ADA636553CD6EC9DAB27687929359462A912C0C16B2A9E17A58AFDE980FC2779CE80A75300C4A884BF8A368BCC102405A27840822A607413A1667AD0899BDF6DAEBA5975E127F11B00879890978CE39E7E054A86D02F258E71CD46B0CC7D98C90CFA05363698E0AD198E2CA9F79E699DC533482D9C2CB207B1A335410C4E241BCF7DE7B48588B0989C423FC23C649B0D9642FD178947959B66C99D8F24C7C031523774EDFC40BBB47310AEF692D33F59008E4290D2B6C75DA3814B5EC10ADEAB102B984EC5599773906D5B940E3901AF3CAFA8B0813B93AE24BFBEDB7DFA73EF5A95B6FBD7564792DE79A928E1D6891EE8374103171C10517C85684CF88E22F4E970AA1B1D8CC721EB9DCD4A953C19F2A33FCCB5FFE52B48855E76E4C06D3553222D1C0F0AA2B63E5545ADB824D5B2E954429C5A2C38102DF0B2630914CD73DA761A49D3C0CDFB3E4A86A15017DAF1EA4F59A9BB3107CA36A02406CE52EE43D1EDF382B7B573501CC059937F6E034EA5D7D4456AE5FBF1EED7190E1077C5B3ED1B98275C3BC4113181AB91B5D01E803FC56BE45D44B960A0A2688310509C4700CBD5E3832D6FDCAB580A192652F87119D8561135FC792636E4511FAAB57AFF677EE87013A2F3D95C50D8FC52F330FC643B9907842A2C9F45C3AAE827A1A3205A8D00F664681A94BE4B1E3C984980E2DADCD03BD03314B59AE8A21FB1D89C52256369D712B4191446B5A64E8502C1E6DAE9A59DF4EC5A2A209A67A9648A9B25FF1445229D9B9918A53B18256F6A6A76A6DC9D6C1F260CDB2326D6D1BB66DF194D5AD8A2A92A9A5131B07B737D971AF5AAB2ACF6E6ADE5C18E877BC4C2A96AAAAB469D52A45B14CDC44CA4DA7BA07F2A55AA56C29C775AB41415BA009B0FD4C5FD55A83A989B7C49A2634F9965BF36A0185B6EFED7873C8B054407F2A73E918CA370D6865DB84D4D65B07ABD09F1EF5F9C20775C36E83301A103FD7FD661CC388B4F8E564411F9FC98E1200E93A4806D2EDE0302EE0860A447DB58F7A7E842EF48A4582DA91CB9437E243CBD5659037DE78A3086A71A603CA038C49EE448ED0294F95E65C4C9A34499C039869D01372CF720C1C67B058430802D68DA954750E55067F21D9C904CB0DAFD3DD40EECBE560CB93A0036B9DDBDE0C7B094079888E39F1C4136FBEF96615521440FFA360951E19A686491191777251B648541A0D085B6362A8BA1AE014B3AF248BD7D8EC457E2E239719837AC7E68487818A7F39C9A38F3EFAE52F7F194FEEF39FFFBCCC3F28CFE4B75BB66C79E6996754AD148B2776F40E24521911FB5F3BFFC29EFEA15CB1F89BE79E0E74831841D100AB932FD41B20679ACAB9C1608C96E978662491B2E3A9E2C090326D55CB9BB62F1E94673A01EA0F2BCD0836CC589A008B4146F5F0C30FCB138738FE7BF904F01D3181279D74923807A07F612986086B99313D0CCAF4804E9AAB6F063F64AA20B5145848E59CFF9FB5F700B7AC2CCF86DFD5F6DAF5F473A61798A117156C115B62342162012191A051312222D2150121A022022223204D0D56D448B000FA0958F83F63C1A0A8B40C300CD3CF9C7E765FF5BFDF759FF5F8CE993927F9AF3FFBE21AF6D97BEDB5DEF2BC4F7FEE071A37E81E3FA7D79EE1FDCB2EBB0CD442271E2E23FC1F941E6202731F17E214589033CF3CF3DBDFFE36912C994DC87ECB4CD612F54D19E5CAB8E6D9679FA5E7739E30309B0551EB1489228799BA210D0B5C4F08000A6C13FC80916A42BF50A934BD4F4EFE0207C7FA8E2C191EDB350685A3D7F7C14B47FAFAB7EFDC814BCB5910189F0FD77A2A95D2CE5DA3C3B846F935AFB8DC2FAD4EDD320E7E82D364B7C34EB150D46A596A851D0D3AB4FFF2359DB8FBD4E8F396EDCF26DDFE9E25AB0F3BE4FF3CF2AB5D4103D6EB013D0371B33D1DB7ED5265CA8A475B9D52C15A5EEC4B1A4D1D75568E3F3CBC3BE84E343ADD386A5B318611679A0BE14829096CAB1824810BE158F13B612BEE86D9154A85BA537386BBE4149C621807F8C5EA952B9FDDF60CC3A4F4EF490BDB8520862426CC501CE98AFB22D5F892304289ABF262ACE38E3BEE81071E602EC3427E7C4263D14541DF91C800763DA1C7E5820B2EB8F5D65BE9C19E478D565E9EB6CFFB9BCA101BC050F316980A71AD8BDD4FA66D890B8571572AE052E343BF10FE7CD7BBDE75D75D7791B69843C203392F64A772578C084F1C1B703D327D5030F823BDB7F41749333F7AD6D8974A62C882CE362FFD5CE5899871DE23570AF0B8C1C2BF88844AFC192E84898C44FA10AF11E6429C7DFA7CA941587BE26D48F9D50D37DC70FAE9A7439CE2E6586EDC73EDDAB5501545864BEEB060E08815C928059E2BBD6E5EF5AA57BDF295AFE464F1747025AC9E363826C7B180CC50BCF787F7EBC56FCF054B28875CBFE8F995F1A9E9C11E0D818051EDD8B12B6342AE6E54EE15AA49D8EA34E6407D2D8D3190F0082CEC1DA2BC6734D80422FDDF9204383FBB76ED62B48D317C592B7916A3E2490E974D058D16BAD90652E52A92703AAAF6E092D421C4AF487D8DD42E351F58DB4F7FFAD3AC8B56464DF8221D93C4E78B6B0836874F206C700A4C6839EA2BAC5CC1329E71C6191B366C80E4FBDEF7BEC72882641F0822A96334A2A1545386BBDF5C1F7A39F02B522CEE206D8504FA9B7E24C93FA60B8B7ECBE999E9B3CE3EFB6B5FFB0A6C82F56B576DDDBCB5E6FB65DB9D6E37FB7CBFBFB7AFDB6E160B7E0B5A46B753759DE1A4D063178AAE33E278AB63A71447CDA8957A7E10E91C591D4FB6ECA0D10AE3CE8ABEA5E3D39333AA13832E6B3DD3EDF68B5E75CC9D0FDC37AD424B5723AB25E57E70F9C9349C4A83B4E8CFD4DBABAABD6163B6AA3CDB85A859F2C4E8CEA96E1829ABA5421AB0444CB6326E0FF9544EFBBAD957B6E774C27646D4BA71B26FE9E4CE200E71BDE77890049552E5A57FF1D29FFF3F3F332BF5B8718BE4EAC09AFFF9CF7F4E78706EA2F84B08B5CB7C161C7962564A5F52D19EB9E60B491A726A28BBFFF00FFF70DB6DB7A579D132555B91E80426A00C90247EF31C2D828448B2C78B893F843F605E250F9AA958883CB0F860FC8D03490295081B8BB0B00A382A38BAC4D910247D21653C836780FA14B33F31D055AB5661A54C8400BC5EF7BAD73DF5D4539007F34C219AEA1015509D88BB72E49147FEF18F7F14362D8A3963EE5C38FC8A12487C4ADCB679D0A4B2076256E3E998149541EA6266772D81E8E1952209286F0450DE14FB389318097434DE847D85300C4A4A2E08BBF770E24CE091347C9005D393B168F8508BBD52DFED37DFB8E599277A8A6EB9B7DADCBDFBCE3BEF847A391D1606FA7BBF74DBCDAD6643F709F78B8E57C2BF519C547CEFE73F7DB0003A286065F411E946CAD666BBEDD99EB6E6955B2D0E743AFA20056AD7429C5A5A6CF3CC488BB4FF2D4920CA2FFE3DF7DC736179D00263D8893F17E03C276FCA41C78EDC7F9EB3CEDC175A72AC52B6F34672FC8A499F989D69AE9154A45BD1E27E5EAADBE002D0CA25C75FE506B4CA9D54D4002872B0EF38725C46217B2BEF2D4AF1AFF6CCCB10CD46FCC2F8D511471C8183CDBC09D0C96B5FFB5A28679C024F35437A926D223822745D5287BBEAAAAB2EB9F4637A0C693A3234D89C998E837804C6CAF474D9F18607FBB516D9ED0E56CA50B1A1F762D596699BA05054CE72B778B05FEDB3EC76DA9DC96C0EDBD5ECA2E4165C65D58399B22E02481DBFDCF19C461CED6A8F0F0EAD7C6A7C47CB5543D5DAD4F4F4AA721F94D286A79E9D9EAAF655204BEC465C54F188D76BFB5EDCDFF3FB6DCF4FA471AA9CAE8AA1BEA419A7CFFEA75804E7AB9EAEEADA9AA2ED6E982580145C2B493166CF75A224C461753CA8FC9A2A0E3AF4C0679FDA2419CF2C845C5C12882B924E6F2AE902332CE9FC2AD323E99D66CA86B4A7C59DCF3EFB6C817CDFFB5CB0BF211D35645CDC3E5144589328D839740F328B44D2FA1792041213C21BE1C0142D3422211EB66CD962661F8159E970AFB85C458F868273DE79E75D74D145983F519A551EA4A52312B766F98C32B2CEE548F025DD3EA5F520531B59CA44BAA497935BC2BDA1DB5DE0CC540E7C4DE216B6C2440B95D718639C1C8F1C334C010AE09BDFFC6658F1F8441A86B0064D72FC65D524D19EDC4152924C17334FA61C4E5E09B3802E14A260E27A33C8A98C8C31FE29D99392DD289B7DCC31C7604B58F2ADF3730ABD49D879D31B5E1B771ACB8607962E5FF1FB3FFCA9D5EE3C335A8F3ACDDB6EDA30D053C1902667EAAE066689B2EE20899786567666FCA255EF40AEABD8D3A7A8B7A73C35AE73B17DD70B2318C85A48EC9353A719BAF2C73FFE71D8A7623CCE03D6FFFF2309084AC19A32AEAA996425653BB28F4CC7C23292F1B1FE40B232CC67518F26BF631B4B5C7CD24927FDF8C73FC66A635F7062299E09FE432EFC8B5FFC0277C66F59D182FBD03FB04844D16C6E418EC02998FE59211B5605731DE841222296FC56BA4C2B034F65EF733E2FF4C7B83A551F9601D95973666540DB525DA529A0F2D26EADF34D4D6229DAED667DBADE53F6BBAD6ED9757BFDD26CB35EC8C47F5F4F6DF7C464D92F544AFEFA75FB0F876EA11976EAB33DAD6075689583B0913612B7822146493C9B34FADC9EC1FE8176BDA1D3526D6722C4B3ED2DC1C4506578B2554F7B4ACFCE4C0D5A6A4975A0E214B64DEF4AFCD26EA8F3C5420C15AB1D0D2B7F49AD2FB1AD19473D36393AA16303766025993F4877E081D20FAA765295B5D0290669ECF96EEAD841A73597434AFA8244483229EBCD79415DDF899A310372D22B7BF19A5EB651E23592F662672D9204D80AF4433BE0B8E38EFBC637BE41E808A27571D325EF60EF17B58D792C0264296AEBBA75EBC0B86EBCF1466679AACCDD42A78899A1B3D0CB3C71E298C1F431C88BB317398F34970587A41A3A07582AF54750767029DE5306523D04B37BDFFBDEC79635201430AC77BFFBDDD75D771D9E87BBDC7FFFFD781E212BD800192360C71B86015899292C92D469265DA85C21928C080A18F1AA4B10469CA72209F009BD757C84246F9988F6CA50D95416BEC7DDF85B928809D36F5A1292BA6A860AE4646222F856007C4C8962E5FD4599DFC92825B363CDFA43BA17711F70B737BEF18D947084B5996D75ED34E9B49BC71F7FFC969D636B0F79E103BFF86D64796E307BF8C107B42676149DB4E85ADD08D370EEFEFE0F8276CB75ACBEAA06890B53BB6B9742BBE89521DDB7779A2A6A7B5BFE6BB34A8352256AB7A65C5F45CD0551A605C907CB78F4D14783997EF4A31FFD5FB4097801FD1814FC5C4912A81891E0C8AF79CD6BBEFFFDEF538182B07FECB1C744B9937E796ACF88B144E6494BD84DB67F611C82D62D9D75A40D6927272511B41E16D2B9F02DE316A4403108045EDBCC6BA2614DC9C12A01163C338E2D991B669A90F9739ADDA4349090CC9DCB45F80A5CF9E10F7FF8F6DB6FC72CF015CBAAC57F45723225817EEEE0C0D4E4E4EA35AB766DDF9184F16AA884304FA7663B2AEEF1FD430F3DF4A8A35E78F7DD774F4FCD8499436699B2FB940B3B73852A1C69F50CD96E27ED362D1B722F5249236DF597072009340349929DB3D32D9538BDB56D33E3D54ACF687312DB3C1DB4A34E77FDD092BE4235B6D59FB63DD72D7BB34117EA08A4D67EB5E19AE5B5A3E0F9767DA78A46B184B8B94A2CC74AED8CEA34D4296D022B4A2D6DDB160A966BD16A2CD899F7DF2B631271D4216C8246DAD62E51FC283123C694048BECAFB917729009FF8505BFFEFAEB994CC1A441F6EB96FC519C771C643A1816920474C213F2994E481663E2B674E5D3823175509C44BA3DC594591C79D0CA91FF1925121737D57AE625823C44CBC731D49280B392F45233DF80BCC044D493E593D6862474492D17173CA8F3DA6BAF65B45A6556B9645BD2052F1133E1EC7447C8111567A8000A095BB18C4A194A4BA9DB16912678443CBA2CF292E45C3349891E58C90061DA3E9F45AE6DD6F493D750E0915D7EF0831FBCE5965BE8D6A7B812939CFDA3059B9A252424CA3DFAC6E521A0638F3D1692981D13C1E58B956A3788A6DBF1317FF3D6FFFBA7CDDB6613BBD23FD27CFAC883F66B8E6F7FE277BF59BD6CE8B1279FF28B65B07E2FD2CEA559E8656EC9EE199E08FD838E7ED57833EA6DAEB055A5C71F99199FE9EF8195B3F1BE1FDF9AB4B7E0082FC4A905678DD09B8BEB38FF5F258198C0B4E7187092827B3BEF01C9C36056115A3902040339C22ED59E59A434DDC06419BE12533ACD3150F12F74AE871F7E18C780C91BA43A025AC8762F52E963EE29B51948AC9FFEF4A726E424EB4E79CEA94EB17B9DCA33C455D63F0386ACDCCDC97BD4CCAB689107D1BD2B2D10B83552100A223CFFFCF3B14DACAB2056AEE027CAA1D60CA89021E9EB2636AA5C709D488B2F9D3CDAD3DF68CE42ED7CD1A107FFFE89A7467A6BB01BDA61B2D2F6FA13D74BA355CA3B4C5587B5EBA6DB566EA8749667470525AF5228FA53F549306CD7E99D4983C9A413D9D66CD2EC29F78DB5EB5E4FA5CF2F8EEFDE7DE8B235C79FF4F7377EFD5F9F9B9E9849544FC971DBF6414B57D8ED70B6DDDC184C371C6F67AC1B68C556A213479D39BF192480AB5343210B7CF07B6C6A9CE4ACC376520D8B5DB255E458CA7355100659AF330F868457B545C9A39E416EBB4896301B6D515B35718559414210727134C5791755AAB012975A3CA26B12B6A40949A625DD06FC507AB80A4482CA3D280B8D9FE3E448CC0C1D13EA26CD7B695035C1A4E6E2044CD3A434A37B917A1399B594CB4B492D6991EB25EAB604E258FB40C7024B30985E4D3A3EF5D453BFF6B5AF91275201E451112D9E968479DAB9D6C2384CC40516A9924770AAB806179C73CE39D75C730DC3861203E03299BA1BB99519AB4C73683C95E3E798E162F1DE62D1581BC57DA2A23707F49A2645B6BC48D3C1919189B1DDD5BE3EDF724E38E1842F7CE10B92ECF1E31FFF18CBCB434B89F59DEF7C87BBA225A5DB5B499A8E15FFE7D3BBFA0FFFCB7AE88CF8C1A7CF7F4FAF3D679F523781CD818742EE4A310B419219D5D715864B0E5D32F042152E1D1C5836353DAAD2829BAEF29D35DFFFB7C374FD66D255294E85AD12DB776B8E55ECA6DA43427F17B1A3E7D2EDEB730E0DC7D7874DE77FC35AF774FD44B735830F4199BA0579763C755C3A985B4C0A4801D4CDD8B476CABFFDED6F87E299579944BEEEAC1EE89E8269862A51AD31721BC450F7BC88E8437D7DB8E12C2C367D0C40DC73E9F35A5D0AA25A4FB53EDB2815E7CA4484BA044AC44CA4111142671103BFB2CB26BE56BA67C5D98855FCC475B79CF6910F26AAAEBD106D2C421163FEC4BF5C74DD75574F4F778A255DBD147494EBF8110EACC2D4342D6B5656A8A864D68AD36A6AC565ED2CE6C9975CB54590C52443547A70C2B485457EF3CD37136AC9CAEB89181558A86F41560B46887FDD01C6B3D592C1C1154B963DFFD493E5D4E9F78BF556BD88F318693133D3EC82FBE26855526B2475D6A8C2FE56697FA732E8149E0D2652179ABBAA075DC7AFCC765BBDD57EAD1BBBE1F3ADF19523AB76ECDEBEA6B24CB5A376D28E9433E1059167B7DCB4AE5179022FB27A55A1E6F94BFA964C479DED416347B73D1107ED34EB2C695927BFFB9D5FFEF2977546BF4E906BF8061693B8D4E6B63E3B3202D8C7AFA48F85A92B50222E8EE6EDE47DC1F8A7407D60D94F3FFDF40D1B36B00246E57EEFCB2FBFFC939FFC24358C3447225844D2C86068ED31AA6FF6D3DEE7C562384A48695E76A9A089087A18C31BD75D771D4C197C4234B9EDDBB753CCFCE55FFEE54F7EF21391403A2E6866C80AB60FF35BC4CFC3BC343C839DB62C03AD13237BE10B5FF8BBDFFD8EF4C70EE3CC5527ED9A0973BC7EDDBA7584B424E94BDB1DC9EF16D2A7438D920D74CF888DF03B4177C1827EE8431FFACC673E23CD69B9463CE4B0454E3BEDB48B2FBED844584B0D642EEE1FC16A2467863434AF138865BCA4E2833607FE6423CFD9E919E8477361004BBDE39DEFBCFFC10777EFDC09D68617A6C041C2A8BAE38E3BF068E2BBE10EBC0FB303F57EFBB5411FD4DD5A79E84B46D580552C0D7B712D1863A62F453D56861D02A6A6A6F0067B479C67C9C2C47DC6D2AD456F457DCA9B9A9EE81FD4F2727ADC7EF8979BFA8B6BC140BEF4956BD2689BB29BA58A0E328711D4349D147BF2C927834D1F79E491FFF11FFF314721B513CFB8E0DCD7BFE115F546338CBB434303382BB3339AC24696F4A8588D8D4DFA5EA9522E3D70FF2F6FBE6E83DFFD01F118A48A3857B709E093BEE845BAB9232859B3A444150B3E737F99B3418834CFF51CDFC364BC4281D5CE98B39351DADAB5AB376E7C5AB30D27333BB213E115DCB03B27BDD6AF5FCFFA156A0398459CBFE6950A722B412A84A29AD7A56E9E2488ED5895F63FE3A3371DF5B2578C0CF6E2B93BC676F6ADF0EC892150965F54D3D3F566B3BD62F948ABA91EFAF9235FBCF684A0B5C577A18E0C4ECE3495D5191CE8698C37BA3AE34509CA379F482FE5E2EC43EA6CF4CA67953DA6C38D65538B2045CE9304E02BBDE5E2606FFFF4CE9D3DCA1D2896EA9DBAE5179B614727E77475C74B68A155C86F65C12658A3CAABEDE28053DCAD1ADD286CA46D57152328EAE5D2646BA6A57078ADFDF63FF0A5AF7EF5430FFDDFB12D3B5B71BDA82AD5DEFED170AA9344ED386C653AA29F3A25C7837A5428F54E87ED5D417322891B76DA853590A8388D0F7FC10B1EFDC3A32000AC3E5404C7D0BEC18BB1BF74C7E11310181601E4C17824E9DFC95BFB8ABB424A344C9D60A17566DC454A31F862232CA659B38D0AEE8C0FD99095FE030C00ACE6AAABAE327355E6DD1F3FC71B41FC34BDA37BBF04509D288778CFE4258C84D3B78C16230261249E798C070FE2D2916B8976AE7273644E7C92E7B20989CAB14F257B896C11974A205B7822CD6D3CF28D6F7CE37DF7DDC7C6E2D80C8685A9A1D0C945F39F0E1FFC841AA2A00BE06E1FF9C84720B8F8437EA5B21E8D780FBBFB99679EA145A232AB9F92095FDD74D34D679C71C6DAB56B59AC4B99C131D32B4512916CF4BD5B7D928F8BF347CA89E93813A3615E4538D35488444D2B47BA6EA9CCAFAAB2144D2D57C2B9D090E3B9711889D3C3CEFB7DE2CFD7BFFEF5071D74109682309314ECBAB54E5F4F4975776FDBEC0FAC78E0918DCD4EF493BBBF164F3EEF0FAFC57D98ED8AE948380B7BB479F36656BBD060A2544ED4EC8E6D8D4A69288A5B41BCFB9BDFFAB26D553C7B70DBD4F3939313933B211EFAA676CFF6D696CED63B3DA5C156B4190390AC6AAE1E6E7BFF0F7F75F89187D67A3257AD02338AEBDD7AC5AF242AD1ED0EE3B4E094609AA789DBEDA8877FFDFBD7BCEE283B6F374455970A44B95C6CB5F027B42D9044A01B257A5A7DB355D6D125E3E82B96AF60BB1BFC697B732C8066C1D0F030ABCFDEF18E7FBCFDF6DB313CECC273CF61E2DAE9049BC02FFCB947B930472E91EC3BB5162B4780905270A9ED5AC42678C5EB5EFDD18FDD74CCAB0ED591F899B402698F77712BAD9583B055F032431E3A7B987A6E09B3F9E1AF77BDE5B5073871435B3156C1AB5A51378803776050279231B1826945922EB51007313B3C9BA96E56066FB965CB16DE61F1CA234BC75F997FA2D224C59F054B558B25A7DDEE758B038562A3D50C5DAB95049EE74601E6A13C6891A9EA55D6B0F2965985656EA9C7F1DB818E430C8F0C8E4F4ED45BB3AE57C06DFB0607C666A676B76707A07EEE1A1DEC19484076114C2315C41AD930628286E516BCA2E568D37C1C041A76A6D3B09EF5938C1C5881090C415A87057DDBCCDB93B18524EF09AAB2EC29EC143803F3DDB183D0CD3FF1894FB03A4A3002541EF8110C63138F611FEB633405E34A828DE011585E69A8C5E826135B98BC4BCC479515BB388BF663373D9966D9E342D7BFFBDDEF7EF8E1879F78E209BAFEE735D7A4EE6FFA69D8765E9C42F4498ACF93B1008E90182D9416DA26300F00260C8AA4EF051FC2F6FCB77FFB37723D3BEB68CF90AC14C2B07A859939FC93F57864E2581DC1A4A49A46A72A149937BDE94D5FFFFAD7D3BC4D0D2FC0FBBDB7479A75D0BF4C5D9B09EF14771254A0BE4F503396201166803F915C265941D3ECA2B39515C826E7A2E7CE317A99C9EAE3A1A79C72CA77BFFB5DF610B6F36E913D455DA6A15DB1DD8E9B793C5CC70DE3089F80979572A86D5C5AC97ACC4268FCF55FFF35F38E985B49E98DCB26773EBF76D5F256A85A6961F7D878296DF717E29D6D9D728A9DA2D38C2D16F05B50E4A38F3EAA327D075366ADAC46D4687961D72997FA9AADC95235FAC31FFFB3E095671ADDF290FBAE77BFF32B77DCE15ACECC4CDD4A0A8E5DD41140BB6EA65588C9F8C14F3EF8F297BFB46FB0363B3B6381E127984D50EDA969469942119EA9D57A93005A45A9E879F7DCF3C02D97BD81F92DA2853116CD345F7173D3C8C55358AC8BC507791C7DF4D1A07EE8165A725BCACD103E689E6A04CD011DF05CB77EFDB3596D9726C52C2D2D8E743A94EFFDB91BC4CB5FFEF25FFFFAD7B8E0D24B2FBDFAEAABE779DE45B4B3D25B507F5981BC50A7FB245E7BE9E5B71FF8F297DBBDA103D28BDC46D0290D152A333570BC249D4B0B0E833489AD42A174FF8FBEFFA5CF7DB81C6C77BA69236C278E3AFA652FDEF2ECC4E8E8732A4FBD1356B5481F5DF106883A423D0C07168BF3E217BFF891471E214682CA8B8616910419195B76E6D1D399668E5B4B55CD29D46C4DD85D2BE9DA59B573D697D2556929B12B1A12D4EEB7BC3ECFAF388537BEE495CF3FB769E5F2A53FFFCD4F068A7DD39D299DBBA692D2C8D28DBBB7459E5B0FA3A13ECD1FEBA10EA73A4197250565586E7E19E4D656294C844D9D7690C4186BE0D8D09522CBE9264980AD4C9372290387C882ED9D602E7048154A626CCAE8FC0EB2F9DDEF7E278C95B253FAB9923BB3AD589AC106EF737D7837935F83B72E5FBE9C19ED2033D6EEF1C0D24061FE3DB79278628BA0468B9B4174381C7908F2677262DEFBFA79396984B4A3F356C49B597D22D0938C1841CF60F68D48C77928C2E47296D47672096EB9E51628DAE47DB8E8739FFBDCB9E79E4B6F8CCA95E8BD6356F3FA47E2D9EC34C0C22EFC4B7A6576A6382EC8D3194C666A3FF1EE191FC664F0433038C9E827D3C7C67CE8431F82F017BA07EFC0B7EC0484334CC984615F7FFDF5471D7514DE0B3CC87EFBED8715A723484C3FEE199EC539BEE005DA6B616E83197023B3E06BFDFAF560BE12B4E08A6339FCACE846BBE9DBADA2AF9954A952C62718E796AC22514711DAEDF5071CF0FCF3CF875D0DC776CC31C730687FEFBDF7CE39792DEFB5AF7DF5433FFBC9E0D0D0B2556B87FAFBA6C7769C7DC66971A1C68C05ED31CFD2DD4082EF7DEF7B390C0999B26E301B6DA4693EC527856209065913EF33FA59D6DF57ED0433ADD6388E706FBF46A6989E9973F4AF58B1824D0EC4C87DD3593F01AF8FA344D985BEBEC1208CBBDD90FB95199BADA1C1FEC9C9B1B0DB5CBE62D9E38FFFE93FBE7E120D4D89C69B089AA2DD9818A29207496D650E00AED5F432F3B9050336CB50803028654C4119ED9DC9C1755F56CB667C8C59130CF19D7EFAE9B0201792042A331D3812C9F05BC826F897AFDFF8C4C692EDBEA439E3EFBF74FDAECDE3ABD70E3EBFEB51E5F9D55A250CBB4CCE2B148ACD46ABD309FA4BCFDC7EC5FB5C6BDC8953DBF1022B046F1DE85BD96C8E89F68A7F3154AA2CFFAD2E291A18DF33AF81454FA6EF7871EF507681EE4FE0A8D4CD3A0DF4A556C572FD587FD582A5E466715AFADCB03ECA2A29BBA4AC22FEB3B515774CDF7EA3633B0E59BBFE0F9B1F5EEB2FEF749B591267F44CD228D57A4AC3839B77EC6877BAD8ECC8B69B49D2A36580532D148B8552EA58F5389A0CDB8DA8BB5D170F684089D072B0A32DC852706D4B41EDAA556BF546DD76B4FFA4D96E09ABA1DA4AF0AEDDBB77330B8B704C02D128C54071DE769B9A13BDF9F38A9CE6495CE9E1C8B515EC746C2B38CF97BFFC65B6FF6581D8BBDEF52E7C42042162496137F1434914DEFBFEE285168CA345F68B412CEE290B1158CA2E7391DC486652305F918A35FE64A3111E378C9679D28C4C58590126FDD55A120879D146E66901C7C4EF99C643C9234A37BD6FDC0C7C051B0D8776EDDAB538F3EC9D42F7BD80DE611090D5994738E10E415DA5C79CE846B8153F67E19532BC342AC7689446C48216473307CC17D3602E145F9238C10A207AA8E9FEC2CDA14D7FFBDBDFE6229A28312A537E593778ECB1C7FEE8473FD276EBF838ED44F10E9912584AAEB8BBD46AB5C3C7B2C1BC7AFB74E3D942D1A70601C5B6502A05D05C2C6BBF75EB9E7BE69952B50A1AFAD297BE34D8DB4788706A2BECD7A855548DF1952C5DBD7ACDAA15055B9DF8B6E3699092CD61E46C9072F9E597937F49171476AF6466A4563A82D6EA35BDCD461B1A4CB3AE2B0CC0A460A6C7091407D5A82BCFB5962D5DB365CBA8C668B18A51BA476B012B6FA212BFE8EDAF3CE6352B96EFBF6B74AAD588FBFA87F0310BC221E1A228E8769A38CB4383B5B1F16D0F7DF98B6AF25794DC9814DDD9B96A632B230582FC574777E340541B5033F694FB227E1E0DD43E369675CF4D97AF58B163DBCE430F3BECB9E79E6BB75AD55AAD91B151186BB695D22D468840D2B0B4A990D328DE2182D74AC9A1345F5B4812E838811A78FB2537CC287BD774BDD4B77C26EAA495706D7744F7950B3B94E8DA90551AAFF89ECB4E53D68E5A3168B7C26ACFE04C67A2EC175BF5D871D30D1B369C79E699B8F30D37DC70D6596789F9BB4F8E601965952C5B63BC91879C674D7AE02C8246E0DA4E94CCB9437596A5956567A66A895BA828D789828253A8C7DDB4A0291C62C3819CB0EC92651753DBD5EC28EB0D655B6B62AFD72DAD5FBEA23D391DB7DB9EAB66BA501AD2319D569482D03B2AF5955E0A28FBAD30EC2FFA05D8C885220EF66CD89DE83627C3B0994104793A47C88913BB11452D0D6D6DC58E0599A16552BB0521A10DFDD61C589964FD1D72C821071C70C0FDF7DF8FE95375907A1113A2D85C407AE4E97D5D284E4046C9AC4895F915F839C983CDA8ADBC8784327214797EF993FF365CCC177DB92AB3E1168A2B702EBC397505B0BE75EBD6C1FAA15D48FE6CA668337AC1B03618269D0DF8E4B8E38EBBE79E7BF020CA48723C2CDD9C2420C7944C29A643F1917C3C2D326E80245F8B50A5BF92D289AE7F225508CE333EA7B4A03773EBD6ADFCA1A03FCAF648E5BDCA545A13F7952A0FBB806200F3CAD6787AE90B63AAAC1853A66A207B26EE17715E4BE1ABCAD1BBE4E7BCD53CBAE1A2B34E8A2E7B5021588FF6CD25C99AB56BFFE66FFE069A828685C37A66BE2CB29E8E110F3CE0E08331A9348C285138000966B89E7FF80B8F2A577BE2A0FD0F27BC09C2A054EBED264ED0AA3381EA939FFC245BFE620C64B2E245E57291946D1BC6414359114C8BA9C946AC95BE6468B8DFB5C3D1D1B175FBAF7B7EEB36C6915821099D8DA395C4212ED12B5F72C4134F3CD56842D85454EA687F97AB196FE657813AEFF85EA1D999B555E2D820717BAA35A7776046AC7A67E628084719B116CE5A5FE9A82037D86DD6FE44919D593CF4A1835DEA62B76673F59A35A0A234B148755A42479197D180DEFDD65C762C1E01C3F1C61B6FA4D663E52DE0E7458C459F2259EEBFFFFE20B9279F7C52424AF324C150B23E2DF6ED6E6F5FBEDA6B8C6D8BDA6ECD5E1AA4F174BA0DF61FE51683757A5C71A40ACBD27067A9A03A5DF05B4F6760266AEDD08ACD63DBF1201C1306395970EE2CDCEB4D62833266AC0C2D66522FE999D68C69FECF7B653E9C749F92A0D7F6DD40BBEFC6DAB356C1E986BA7858B305CBA9584E41D9569C841A152E89ACB496A4E5CC4A5851EC5FD2DBB762C992DDE363BB77EFF27B8BBBEA539341BBE8579CC4EE846D1CBB725F5FAA411093669A40704E479D7A9CB433DDBFE63878BA955A516C3555DC50294E4868A5652FC3258B42D8043A15258E489334E8A50C18DC802DF9785459BD4F87AD74941346C4409DCA82430BD90426E4A7CABD20D4FCE8F3100C4D42AB819FD0597DF1C5177FE31BDFD8B87123B81358D622F50A4CCB662E354672C4114740FBBCF6DA6B17971C3CA10C79EA1CB69111CCDD8C6F71DF194C66BA30B36C449762753DF3F259B3859FC0D6995341545EBE287167C6316EBBED369842242CB662E7809C3D7BBB2BA33397183BA6B388929C91E173CE3907E799698E8C5943C63EF2C823662761DE415AD0E030638D20EAC509235916F4F93032C14C7072433A46D8F78A524D1C26B41F05599EA28EC906F3F22EE805A2F19E18FDA4647B287868AEE2B724B8B9D4D25673190CB11D3BDCAC3566B33EEB168B51BBE3652E9DA8DBED1F1AD24CBCDD864C4F8210561B3340B062C4B23EEAA8A37C5B27DFBDF33DFFECA49115347AABA5A96618DB7ED1F73EF0810FB0938F32A2FDE234C02790433FFCE10F89EF8F33D537509A9E1987DDDC696BFA48A1358669D5EF6BB69B955225843A1F767A7AAA9D4E4BFB6793B99D355BC9EB74632BADD79B904FFAB68D19CB49FCA2EA30CA9368A4BB24C07A163502606BAE3BB4D4344185D9BC793389B55CAE0A8C28CFDBDC194E3568FE40D60FA7D36E6728AA49A95C86CA5FC8EC74BDDA71FC837BEE79F39BDE846F4786978EEEDAA5726F98B650751ABAEDD873397662474A7C6B9F59A4526AC02279361E21AAEE3E2581B60A8AAAD0B3A231B5DD8E941DAAFE5A79B2D92AF6D69A382389A2D592D5C7668039815B2D47B0067516A95BB20A41D549E27A1867874E7CDC6440F35AE3ED932308E54B561E2358D2C4429415B5C08D38136C1B56219304969DA8DE2419702B85485BFFBB5A933803B095AA5E010B54B4DDAAA59378B0B2DD386AEA14B3A40AC96BB9852072D2EECAE288EF6818E4DD13E36934EB94CA4DADA5BAC5D4A914CAB6EF35BA41ACE2E9B03DDA698E2B1D1C8E6CE5941CB7E0F775D334D412066BD9CD7A99CD5A4957C54E365DCFF574F81D62200BC5911D91F8697B812A4E3BED34B060ACC935D75C73E185179A15489209A2F288B1C0182F82356BB689355792B401E94B1E62C2568AD39FC8698B48E2391A3292D49904BFD0F5CC7CC11B7260B229F0B7934F3EF9E1871F7EF6D967E9E8679A8F447C4D5595F157B2CD7FFCC77FBCEBAEBBCCC638746A699BC05488AC3D51B005C75F10E578A8A459077375589E43CF068F0DB74ABA4E4A2E87D9B9899CDD8C60B06DBACA1579DA1FB7DC720B181FA99C45CE26CEA8321AB59B6E6813064E9618B21AA362BDB89DB7FAE4C6300F979EC74D9B3651A756466A79D62B4A37A7D5ED30C048B31C475FA33D6B9F065814481643D26ECD829584E1D09225F52CBC8905B5D2AC9CC4CAFC1B59A641316B95BE6BFBF6652B57469D2ECC1A89E0E3F3030F3C101379FBDBDF4E8C33AA211C2D41CC058D43C097B85F9CB593372F65F891FB2B9DD029B6E9DFE7C445CDE4D1A2E12CFC05FB4E734DCAC454AED19B68592AF7ABB2938664619ABFCA7FEB9AEA9280B555AB650E8CA9413CA81AF2B6D36D77DA585E2A285ACBCE5EB1D1DF42192D99EC1C915FDC29C9BEFABFCB1B5396AB3C7C453590BA08790A9106AC1CC3D2D9ABEBA4A91BB189057D4DA437EE1A993EE593AA7AAA1D62AC7694662243EDB766FF57BEE6D55FFDEA9DAEB263158DF40D6341742F5FCD10FD56148023970A7E27EEC645BB1B755437F66C8DC7C359F329CC14A0B3F1FCF3CF873E77C619675C75D555649A73B59F19F5BA9E5370A18874C1735DDB2984511F747F5DD49B3A7EB165C5139D766F018A3D147FA710A47E92B50F89E3C9A0D951B157761BADEE48B11474DA5517BF0E4AC572FF60DF92E2C0F6ED5B4B457BC592A1CDCF6E1AA8F53BA9B7737AE756E505563A9942B5CF16394C868A15D819975F70E1A5D75EDDF0DCB146F3E28F5D72F9959F887DB79D066977AE3B61070499614AECB336D8DC4711AB0249201C8CFCEAA28B2E6255364350AF7BDDEB1E7CF0416E1938386162551E4032F16CD4C228D6B454E81217173A332328A7A5FA55CE9495C3A74BD7EE452401AD3D518EF120BA3A85EF498B2A0AA18F7DEC635FFEF29761348B38143DDE6CC2CA3F5FFFFAD7FFEC673FC3659FF9CC672CA96C94F3C3C32399A02A0BC9424B850906CDCEF41B90A6416A37DF7C331DF4025B4D664A6604A6CF94470EFD924B2EF9F4A73FCDAC58628149DE8EB478141DED9BDFFC26A41FFD3F0CE0E06EDBB66DA3334A041ACB8669C42579E7031E72A940863CBCF3CE3B9904C6932C1E556AF7926F4A9F86F406C2230E3BECB0471EF9BD5604C239283A70FF817E5D6E8E73B5748906F89E2B8CD275F249B956EBE2E760C7C512232B507ABEF8C52FFED33BDF59ADD5984B0A6D376B0B1813240076256527235456067B823FEFBDF75EDC9C2820AC3BC7EBD24B2FC5F683083018EC0B7581E1E16150B37076EE111D68E2585346AE0519BA097229DF4AA2FA65975D063E42A81C88281000AD3DFC2959D5582BDC5C2CE23599F7C6CCC33363B3B0B6A964503533D2E7137174505D605544C52F76BA7F4EA781F4D5DC3FE85A7B964A4AC58DE8FB6273ECF9F4F992404EA9CACC6733C18C1A1FD7C7CAB0284836A6BA9DE48D27D31C1A8C5635368E4172C951C6F93CF7DC73F109A1A4C3EE5C025E94CCE102411AAC3FE08067766CD1A93D71A2D852C252BD4B97CCEC1EAD94FB8E7DDDEB7F74DF3D83C3C35BB6EBA4EAFEBEFEFAD454946F348184711640E7DFFAD6B7F05090074E8A09C30EDD0B9F8F2CD59E4C185E2A0BD682E1153D0D4775E8F2957E90EC18D77D0522C782C900330B6319B0BD3E18A3CAF11DB71D068D24049B1C8D1A4B7AFB76CC4CF766A83F054B1FE75DD3538376D1B3AD206AF76AB32EF51C7F26EEF8CADBA96B17BD46D0B13DA86C961B267D85521A84B56A6D57D0D91434BADAD55C6B773BAD288C2C8D3204834A2F3819719AC846EC531290E5D10349FB989C8DD182A1CC0A9776AD048A205CA6C0388B4E831F529735EBB616C1A6357B4508E8246BB3440D22650AD2B5C818B2BB45EECFAA2CC29131942B703814066C6446BE8D6BD83C43E5A08AA6DF9BEA027D532A4B789D534A947AE94B5F6AC96A52AB4AF3FEBD2682ABCAB12924DB9A163D4B6DC5A38AF7601C1FF9C847642D68CD71ADD93D0677A3678D48763AE13DF36E73E9C9139995A50CFF97E99EC22E9E7DF6D990EDC49000B9E387DC5191BA6906A306062A457799D6596525B3083C8A0D712B1333529AF75A79711C6E9BADEFB3995B094672F679A7ED3A2E55D4EC1C657A96E3A6AE3ED960B1B8149F13C3A358F0C1BC72DE91CE64CEF71ED8466363B81DD3619972801112BB5B4A4EBEF0852F6071D882ED37BFF90D77870616C606FE8B93FFDC73CFB1028522F3A4934E620A8100CF12559114409B8C9E44493950B9FE2EE1475EC96FF1A1A45451E4ABCCE7031B8E92C354AB0935384F654EFFDC4C71AE84858EB81FFDE847279E78626673A4ECE224A9D0A0226DC70421138835AA7BE68DF2B3C52CE425EE6276A47B76929083BACF0366EA925831989EEF7AD7BB5819C4846B2EAF207AD288C40859D344FE6E9A1D72A840452CE93CE8A083DEF39EF75C7EF9E5D28D44DA206B902EA50B740BE54AA353B7A14EFB85C6D46C5F4F6D7AB63ED0579B99AA57CB3A89A3E0FB279C74E25D77FFFBF8AE891B6FB8FEECB3CE05731A1E1A6E353BCD7673A06F686C7AB7883DCEE898638EF9E52F7F29270863C681E218F0EFE9A79F7EEB6DB7EA2D28F9B6B2960D0F8D6EDF01B375D0736B96E7B403CF767B960CFD69E7D66AC12B174BE582E784493ADBF2D2A4CFAB3A961D401BB2ADDD51735645AE65C330C193C0BDFDD41AE8EF57A9DD9A99EEB1DCBE923FD69C29E8307EA9099152CCBA8CB43BDAB281508955AF5B8CDBDD31158F3BE9B624687A59F0C9B2D3083A01D8DC9C06E0B859B4320A4D0CD7BDF7514CFCD86855249789E743E06468CD93D713AA40B213556EB799B01F8B44F2A9D14A46250720006BA62222F75F8420F796343494190E246834074C9DC9F483498B01362497A2744145A35F88DC9B66BDE429FC59A29ACE53BCA005FFE94F7FE2B76632167579B67CE21057AD5AC54C551C12B34A9B1C997E89238E380277E3D28389DF78E38D04D18DB3AE58663319CA491A07341768649D79E6991B366CE021945C31563E3379865355B9B7847BCCCA52E9392ED3E11C059146D69D903BBC9B094597F13B6D762471CED4ACB9743D694C48283ACB5199E91042532274873E057ED1CBD6900122C9ACC523FA8606C197F1E7BFFFFBBF633DF11574C665CB9631B712D63DC533AD1C2244615258402C0EA4202B2A98E546B389F5048F3DF698CAB5450C8CB5812C8310BA115802E11A4EDEC75465B900941F2AB740DFFFFEF7633C96019062BE606F412659399627A5B2243552CFB072546AEC080E1B1E87B99B05BD925D4A3163D1E78E9DF532CF6C2677FDAC1AD92F15A9EA9A99CD7B3BA316C9E2909346BEC0D375D659677DED6B5F63550D5360E53E5864903A842E03BCE6E34CAF6B6A74B3E00BBA05E64BAC3DEA80DAB6EBA8BE9181ADA33B54C15661F4E98F5FF19D3BBEBAF5D967D7557A669BB335AFDC0A5BA14EC07740E33BDAF582EF062A6D45B157AC4C4127C3F6957B9BDD261470DE905E0EEABC245D0C180470E8A187FEE4273F21F488D4396A375746A28E9A330B063DC70AE321CB7FD94B5EBADF61077FE5AE6F75A2102A6E2308870A8501AF5449ED72EAA820B2E2040ADBA493EE6ECC345434A952F0B6354B8777EE1AD388E8E5B2EA8447ACDD7FE5D0926D9B9FAB77DBCD24DC529FE975340C101666C4B2AB96075BB847156D9536970C3F3CFAFC6CB13099841A9A65FB68090A7214AD58B91AB4D16AB774A7FA2CDF699FBB694A0232779210FF24115A7903E7D5AB57838C7101F61AD6124F2E0F17FB64085B64D6BF84A0F6DE537941E53AF5D4536FB8E10650208CE63FFEF18F2296246ECAC8A5E0DC48F617EFC9012FA4B2305A09FA01CB2533E4BCC85DA92491F5812D1C7BECB15FF9CA57A870D32A12740D933D0A683F2B96A966595292202B4BA90002828D8F5152415646B23F2FC3497EDFFBDE07EECC6A5B2A44983363D6CF3CF3CC6016FDA359200E25137A5BD8347DF4D21DD33782695C0569EEC191E4F0357380D8920C2A2C9E82D4CE9A0B9E77DE79581D8E646464045AA778E528C029A541259AF2323A58BB762D0EFC3CDE0492D0161FAC8894AC4D490B0B56B4E171592554A2717282B93CAD6EBBC3C14C4D4E14334707989AE6CBD35395B2F6FE4FCECE61AC3EF1C413AC692290355D37100FF8EA820B2EE019262950E390D6407CB1A0096B45BD80AE3086B668D8514DE0DEDF7DF7DDC71F7F3CCD23490323B3660731EC1D4682AF60363EFAE8A394BB7434615474AA4A812156553BBBB23269B6AA67761323F364A6A26A48408F344A4B881A99C08D98AAD341071CF8FCF3CFC308B0ADB9C43E3DE024ABCBCBE1CA2909E6A54E9A92C05499E7BD4C3C1F0A54CB68414E97A3DC90AE5833E066B61690D4149A1418125689990BF22CC9CBB20AA534EAAA3429169C7ED72B073144C4C1BDC3CD99B161BF36D1AD8F146A9997BCEB651E2430CF4DCD99724F6DB2D5768B95896E67DC8E43B0F0E65C469FD9A74C1A34D959A768E26D1076FE539FFAD487CE3E2B3B2C1644EBFEAB75A71ACC6159B9089BA0D3ACDBFA2CECFFFB2D9BFA7B6BB3B3F573CF3DEBC93FFCE9D15FFE266EB7D6F78E2CABF675A667740B2BCB994DBBB34ADB1A76B9B46B667649AD1724B8796AA25628C641868FADAC7626C9FB07FAECE6B4D555B049D7F50CF63AFEECD4A4A7CF90FD846ACDDACE68C1AA4312B5BB8E65F98E0BA1BFFFFE0762D8382669E6230AE339BCC8791175D97126E993A550EB676107B51951D788807BC8218780AAD9269DC994924249910FE2375B558B6B649F9A84E44FD2E0237484440BE8DB21F828FDFB8CC649899960252D2409F8686A634C58E221321B2C923F402CD1A122AE14E1D8A26F092AA894EF5041B14C1C1ED16B70D1E1871F8EC54A73A0667A75549EB8294D83A1EF808132010E97B129B9CAC38F8C59B36E88321623C3D9D8BC793367888951C1C49F279E78E25D77DD4511CA800FAF91A9529F5279334B668592DCCD947F11068CB8E20DF93BABD22978481F127ED993E32B91460433C905B8CACE7C467FCA2AF8366B9BC155FFF66FFF967C4D43F56DDBAA9D4599EFCFB51DB0B05221C3AF6E367A6A3DB3F52C43D471E97AAA37A0EBCDF955BEFFFDEF536DC46831544EF98E3BEEC08AFDF4A73F15738D0427815F66E9B08BC54B5EF292DFFEF6B72435B072C83C56E7E14489B1FCA217BD08FBC52E2B34ADC882B97482BF64368D619A00F31370433C0E37840670E185170ABE2E37FA7BDFFBDE9BDFFC669543B4F3866623C6BD5F9EE730AF140C8B229F3283B995788301433F60A88381A2346F2941F385BB4F0E681EA7FFB644CBFC5332D33878E2FF10D051F28C05D05856461CAA5453D8078AEE78169A50C7AC662F7C2B90127A3BD2C4CFD2B9FC381D51EA8081A1F6E4789A95717996D55BABED9E9DC59FAB8787FF3836B65FB562379A81ED6C4EE2507358BBAE92AD4AD53DDDB5715EC611DD77F2A1F804C46DD5D3D7DBCD0AD3C52628D8969FA4872D59EE85C9F8E478A9BF6FEBF4784537BB9E05B7AE958AC5D42E4669AF722A61524954CD2F05BED7687722CF9E8DC299B01BBACE78D88EB32EC220FB62B144D7710B9A878A5CC7AAA549214C7B53F7A0A5AB2AB6373A3ADA0ABA41126D52EDB4521B8D43F0C87AA3D157AD75A3D02AD8A582660BFA48528148E2745F4512A6978F1B2730F226FB366B4E55667142C1A5A407F562C560804AD88C6C4A8003C8791721A797BDEC65BFF9CD6FACBC539EF4471320E7796D4AA5448E063A9E8ED558E88C502C41D9C26A4023BCE9A69B28D294815B4E8D99EC4B0AA4A5124B19F8A3E99E45C8229CC0BA2DCBA89C32D53731284CD816C29B48D34786C518834DF2A6C4900DE462581431672EBAE8223035BC977D12FF97CA9D186CACCC9234C96C39E59453A0DBF2CC633974364510DC72CB2D1FFAD087C421208A9B4C8162405C46AC6980A6FC777FF7773FFCE10FA5525C744F8AEE7BEEB9E7A4934EC257928F2FE57FD98BE9B3366C55BD62764C6EAB0C686BDBE81FED6551040DFC5B2AC3C8B5FD029565BC2632A6E36721BE508B482DD58E38E2884B2EB98454487E072DE0B4D34EC3CDF11432DC2BAFBC12D440B6429F3E970E5F610A7C2395AB2CA0C36574AF898754B2ADAD3C0593AF78CF7E612CE9A0CB1E2B4F3714AEC79661606076827C69E6AE606D25B1612EF573CF1C5CA8A2D8CC8C52A9C7C17822EDCD3D9ABFBAF1C61BCF3FFF7C81C732951A897E8B12A37213DEC497DDDB53344F12A4796F716676F35428C38896749479E529666E923900931D0BEA80E9FB12E94573B6A2D472BFE474DB07567B261AB32B0A5E1C859D440DF756A04F2559D7AD94D9A8B6550B52A7B7E7A999D99A6315622B52CE64D979AAD509B3430432605D0B551FDAD094A604E816C8FBC30E3BECF1271ECFC80F82C82B17BCE6CCACC67A8EE295E55A214A678206A631A97D3238983DA393B3158D27A58122FA21A252AB57B9037EB51D74972C59BA73D7A857286D0AC63EF7D95B3FFEB9CF6EDCBA39F49D5DED399190E8E264B5B40CE52618046D58854AAA96FA7D45D79BEEC0A08BC6938653284D45E134CC13E5F4F7F64FCFCECCA6A153F6227D8FEC4493D1ABF931FFBD2581CAC303EC53240908140F38776F7FFBDB7FFEF39F3FFDF4D3FC4AD2DF5FF18A57FCEA57BF4A33DC5C7EC21A0596A14816C942DA0CDDC24C522224119324A9F893F308D36346137323193AC268A1EC0B7F9FF7BAE28A2B3EFBD9CF625476DEEF1D463F243DD1C07842A5572BE959143BB90995457E452287A2FFD8638FD1C6A5053C873B24A0C192FC97EE8999278E486AE2D2554A1A1570F22677304305CC791758698111A5AACE30BDF879CC7C5E4A0B6C092E906456EAEF82C9271C4D0E3F0B4CE87A6288822BC2D1E257C4EA115E0FAB0AC378EAA9A73006E6C92C5BB68CE00D52BE0B11AB375265F985DA569DABC56339A2A8C6E4178C0DE8FC30D7657E7AEA67D202E2874950EDF6CA356BB63DFF3C289C0AE90B5FF8C28F7EF4A3E2EBC4C5E0FB58F63FFCE10FE2BE90380F816508D4A3D1833333968B23A94152E26BE54D50E99D60E45C2A7184C75979970C4620409DE79D771EC430E3C32AC7E1C0E38861A28CEC8579BD79D59E0E196E10150E58294CD703A1552A251869940410B41C00CD44A8CF843717AD4A421AA90100257E21D28CB8EF4D2416D38FBFB72420BBFCE0073F78DB6DB7D1BE8CB33E910C6B3151427A7D98A066F342E252C328DD89B9DA74D9310224BDC6B4BFC276F61B5A32BD7BC7D1BD4B3A33A3455B75A0A117D5D2C8E984712FB874B65CBBF1DB825B0F22DF76EB05D5503198F55052EC26DD1D2AC5C6FC313F9B3C232445A92D905D2031CC6522F664F096692A3681AE068893953DFD154B671F753CABE3AAF146ABE865253ED07ABA613155C39E3B903AB5D8AA396EB9580A1B9DBE5275BA5D770AD5B124184D3A9389B6E940F41371D84892652B97762726BC66D86FAB925518F02B4EABE36BF15048CB7E5072B7CF4CB4A36EADA77FE7ECB46B610D2CBB58D8DA9E76FBCA9DE9D65CC20571098D04F77D4A02BA6AB1F85028A1A47FF7BBDF15679DB41E03E5BFE73DEFB9F5D65BA9804A5D2A0102085BA2321708E8E1861B6E108701211F16D1D9C994697B096E1B85CDAB5EF5AA071E78800CD02C939698047D248B782F2511D9F49A9A3DEC4E3CF14468B11C21072CF12AF1CDA83CDC8B7F314222BF51079D3B3566470B93C425819AE9AE1C0A0B2BE600613286CEC8E1BCC4C1C400F4971A0739784CC630D53765A41B2E247B252A68967570C2181515378665E8C7A0B794C28904419F38383E4685AD8261C1F47C95D70C63D161B89C7CF2C9A2C7411E60BE26E2AB084EBE37CB7C54DED998FE773C88ECF2F5AF7F3D341189BECA26513BA0D22132E9AEBBEEE2B7F8EDDD77DF0D2EFCF8E38FD396A4778211027AE1A16EE0E9A03033DF696F96A78CE837018524CF817E55DC641E9C3DBD46748E49031FD1684C170D0B3ED9C98E631072174639CFFB4F6F092B7458564D158916213B32B2191CE53DDD6E18092E83CCC653244BD89CA3655426327A814708EA09FD99A2C1984B849F808021ADD9CA58DC59A64662FAA0A094610CD27543528C04898B0E226AE86EAD58DF3DE5A70EEE52ECED0B1CC872AB3D35F18A48F9E07BB6E3C52144166E54B59C8A8F1B45B16365B5B8DA74AA28ABD72DE2E76D2B69479D482515D72AB9C5304AC6A14AABE4198CBFDABBB131030D62DD81876E7AEA295F7777A8CC046DD69FC37A864AC1800AC5BC19DB703DE22BA44B633B4E93754B574E4F4D411F9C0CDBAEE736C26868D5F26D5B775C7EC945575F79D588E3C26C396868E58EF16D6B545FD9F3C19B1D3A125C68469017C1A46A45AEBB338ADA96B2CA5614A67694A584A66AE5506F6BBA51747CA8531694C272F96D27FDFDE76EFB6290442D1576951DBB76D7B61A3A7CA2A594A4DB936FCCAB9B93DEBFD4AC69EC62978F3DF6D8EF7CE73BCC6761112B49149B020B1B4BA172843E261F523192F43072734960A379214C9F2424559C144E0BF1AB798AB9CA429B74AA0B4891328A9618EA23131356CC534F77024FC7FBDFFF7EB0298A1F8C44324ACF3CF34C0839C17C140B95A4CBC5C47C851550F92355C0FEB67862CD0C3CB905411D56AF5E4DD8679CC617BDE845BFFCE52F390122C7419662298F3AEAA8DFFDEE771A77255769892520485ECC0E12E451A6E898C9E6223F16C9D61203903C9DD6C6BCD6E4CA805665522053AFC4DD6FE568246C3A4F7E47BF2AB79FEC065F11BC4919FA32EF60661F838B7DF18B5FFCFBBFFF7B2270903AA5FE882FE2669B59342A33BF043684F03BE29AFFC637BE816140C8C362A5735919A5DDD2C8410C3DB38C4BFE95B525B1324C444D44CA4CE679F0C54F22A8EE5275A1320F9ED00646256752E237EC5277E49147327D82D449AF05614FE8A3102500C715EB663A0921D1F1134A0833E141E243A24F584627B27992402C45F310D2BC30D1D9E851A41816B39D8B402D473214B8EFE235C614DEFBDEF7DE74D34DF40EABDCB5C88C7552B2A98279E5C2AD9FBBF9C3E77D582382694CA46ED9B3933079A5B2743D97AD7D8E6E9A40552959B60F561084CA7512CBEEC4E035CA73DC02F621B58254B513ED31A93856C9F192D89E8E8386360BAC46B1B011ECA3ECBFF8A5AF78F24F8F61AD66EBD3CB972DD7BDE99B4D661389DF43D66A4E0ABABA261A0F5AED1561764CB71A2565B554BA6C7864DBD8EE33CF3DEBAAEB6F58B664B83E3D8D61A49D4EAFEB75A3F0875FFDE6C51F38B7E87AD75F7DF519A7BFB76AF903FDBDDB26B7F47ABDCDA855ECEFE93AF678AB11D8A95D2AFDDD716FFCC1F7EF9D9D98C2F3D62C5BBA65E7AE91DEC146BB5D0F3A071E78F0EF366E746C37716DF03FC8800E3B10BB4E4F798E51520383C5FCE8A38F827A311DC1A82751F1D051C157B9DF83D61BF13C78A2091F8DCDD2750F39841C7F4B6D989625CE3515383B435326D09060D34A892FD69300FB8B4492F908F1C2CBC5E2E190B68CA4AEF7BDEF7DFFFAAFFF2A37A420A14EA68C923A1AACA283E28D6863FCAD7482E1D92101930908882934426833727C0E39E4104BA0B884298B0A4C712428928CFD527FE4F6C8684472EE338BCE2CF4852904E58B1D0BCC879A518A7DAEAC19BAA079253259D2B0AC1CB38C250BF4D2323CC295227F11B64B8E40E12CFE7DB1DFCDC69694D5CCED51B94B5DDCE50C9FC8E9622906253CEE49E81E91FCE25590900EED44366DC66E7DF6B39FC50510EFCF3CF38C242C127C54F45C0199C053703630069EF3BD6D020A4B95A7545F7AE9A53086F820DE5CF829DFD0E0E3F819121725C5F48D9046A9EF5378883FD4AC1B97B098249E72EFE87DC2BE60112ECD5E941034A83141DC8D8964C2C731123AEE247BCD94796602347F75FDF5D76FD8B0814C90C8A66A4F67919DBF30482E883425557938CE8C3D50846B8F6AF615010F24539BE955CAA8272071AE58B274E7E828D46DFCF0E6CF7EE69C0F7CF0D0C1BEFAC4F47A0802ED1183BE9CD849CC26BD6ED633C077ED822E55D7141D5B2AB09230F3DA76940E1D941DABAC1C954036A481638FC541B3E86C09E219470DAD5CFDDC961D7EADA2F1F8E2849A9CF87525866CAE9BD80407F68F4C8E8D1DB4DFFA99A9E91DD36396B29B0A46E78ADD63E3CD4EB75A29755ABA120D4B30DC536BB75A034EB1D96DC2105E5F1D71DAC175575E79D5159F48A2B05274661BF5A9549B046EB132D6691CFE92A31FFAED2307AFDFFFB96737CDA4EAC0652B1FDFB96D69DFE0AEE909CB761BD0AE4048B61524693B0AA20CE26E5EAE8E44BF30546C289147597E2F453FE6957CCFF8307689E5EC250000FFFF49444154E18A2BAEB8EAAAABF01369788E3DC5464BA5BD34C79DEB8491C778F19E6BC80E71D4C9F889D4242D124966B2D6BCDA75868EE9D510FC3406C32EBAE8A2CF7CE63352A4468552F806450B4D5E713D61B29C3B59313E9752F679AD0B2830984A2ED58EAC57A5566D516E982E63DE82E81190154F3EF9A469A691A420E5B02E66337795376B26B6A87812E8A561C7024CF8D5AF7EF5D34F3FFDECB3CFEE33C96F6F3FA0BC843878EA98CB215695C83D411DE0AF049B850E32DE8171125A85B2825C77821A0A3BE314A8D262FAF4F3B02D06AE39F4D0439F78E20995433BD10F4BC927880BA6277D1EC32273A14542683C53E7259D095A322E20B612C5153D362AC35A989732314F128869297D4DCDA6438CFA508F90E51589CBF26C1E15FC09298E8DA3D383B29C2441E6C8827E699F24BD2224A391A04C34AE5566A872F1A5E8814506323C7A8DA4BF317D3E6CDB39AFFB8D3280C39826C8B512B6CE2431B1C6CC762E928E25D03118305806E490148E89E420B1B1B24FEC1B91799292CB5340576430D568A9B86FC9E0CCC4582552EB5CAB274A97FA3099B37BEA163DA9F6C4E3AF34D6A8B58E2A5A76057497DA71AA9A69D448431C270CBD9BC5608BB6AAA47641A307D9184D3768B77C67DCB59E6B46D00574CF30B015951CB86215F820E996B441DC02A3A57B86D1E2D95CC325850A74FC89E9A9C172ADD1D2CDE9CBD5F244A355F1DC7618154B05AC026C1ADD81A3AF67627C661016646A799D6075FFA0DFECAAA0E3ABB4ACDCB5BD03DB67B6FFF50B5FF38217BCE0CEBBBFB3A9BE3BA99476B71A13A95AD5DB57EEE97D72EBF3955ACFCEFA6CB1E8CF76BA56991A4992E149D8CACED4B524EEC98ACCA5FECBB46904829BC85AA4405152258785F911D4974567259991E9E1CEA79E7AEA9D77DE49072996E5A0830EC289C642317829F622F3D6E8FF249DE071D0C916EF3167E5F065F44813304E42B07C22E19CA147620CFBEFBF3FEE29AD8CC9B5CC3C0E66B8C264219403295992FDB0D72CF3320B1E859F33EF0EFC0DF767DA2116FD924B2E81123607686FFA7365045470E6759464AD00E31E736D6EF226E3E4C8C28B05FAC6B4D0CDB4161192FF73492036814C4C2481098363BE046158CAACE959120DC236A05C793D5E8C48531D662F4C61F1471D7514EC32E6C2B34A8B8C92811681D061D8938C8FDBC6FCE27D962C72C360FCE2DC0A040A87C4B0B6B06C5A3394313C213CD204663095596504094C34568CF9F4D34F07E98328B1FD98297F254524E4A7D44AECBC7B1F5703F635F823A438C50323E45C49F6AAA3348591CE88519A37D13633B51855335B8331A949F08E703DEE8687626CA2DA706D993C86AF04B7759F924028EDCC33CFBCEFBEFB9E7BEE3909A2A83DB16BA410611E3E15D6FF98638EB9FFFEFBE7D124D747C00D7512CEE38FAB3C9C48DB941D5E4593D09ED2447531052754913AB2B7B6265256BD3E9075B54B991964D99E5E3A6A63495AB0FCC42AA52E2501C4C0B4D28D5CBC2C375F9725DBAA8A0B54EAE3ECFAEE40984CA978AA608F86F1746A8F820356AAA3ADA6AE54C83C96D75C730D73D258692F5EAF7992E0AA8BFFE5B2CB2FFFDBD7FCE5430FFDBC542ACFB49B56A9D08DA33484366377C324B35FEC6215B6DDECD235ABC7B6EE483A51D952B5D41E700A438552218A2B6EA1DFD27D8FD356A7E4149A71D7EAA93C3D3BDA3F32DC4E9D4D63BB34A444A93CDEC6F8B0CE7DBB26A7BD8AD627740646AA74DAB535270952C3C1C00D65BA07F708347FEDB5D79E76DA6938B0243CC96789F366EE175C70C1E73EF739C982A1424D26804DA7E262E7A0938CC3895F45407B44833EE79C733EFFF9CFE327A79C72CABDF7DE0BDB426215FBE4577CCABC3801484597164D4DE1E920CB638F3DF65BDFFA16CEE03BDEF18E1FFCE00766ED98E09A905748CB452638D02B40E6809113A44084A5D9C85A14149A352CFE95FA3B06B420FFB44B4378A24077C9B8712F811650B93FDA74CA8BBD6926E3CFABE2210FB532446F412195EA06F53FF60E99F7942662DC42FECB642F2AFE8CA560E1D2AC9A17B3C0D1C57BCC9C5D3D059F5218961090E903A15E6C760AE48BF797D45DF62AA04A824FC87A58912B7603A9CACA619D446ED36CC21DBEFAD5AFBEE73DEF317DDF5C25620DE1CE92BDC00003AB1056AF5E8D8DFCD5AF7E25AAC4BC153307BF76ED5A6C396E888B5FFBDAD76ECD5E4276A478AE065755573C64CA35975A92D548E55C73098C4B05BF044E71CD4B5FFAD2871F7E587A8EAA2CDE4093564AF94C5187B1C1903FFBECB3550E30276DCEA06362D7FEF33FFF530A32E7614CAABCF3387E22B05C98FECB5EF6B24D9B3649DC4FA8942FFA06193C14331C328FA11DA167F1E69136C8FDA5904265851A189B9D77CE11B1B7ACDCEF2DEDDBB2F379A79D1CEE15D68671AF8A0B19E45CF6DF9FB3AAE6E81F9C3E8ADDD876754B19ABA1C24656C46B65EEFBAE76A15BD55855555ACCAA3196ABC264D899B6AC595B359DC2B865EFB2AD6DEDF63FFDD33B1E7CF041EC97B80294119C547B7987064A95925F1C1F9FC0773558D251500FA272AD08E9D469613D97EDDCBED3765CBF526A3471FC753144B7DD29BA4E1AC5CB6B3DC5242DA6362479187746EC728FEBD73227ED78521F195C323633F54FA79F71CD4D1BEC5279A2D39A4D55A5A73C39DB2A574ACDA00D1903119046691464158E4A9F946A4F8D7445751E2401460C0A04E590DF094484E423504766BA173EC79164C51679BAF45737D585A38F3EFA91471EA182C502A379D59A698E5C2426382FA60B5A328FF7C9AF6870339305EFA147FED55FFDD5D5575F2D0C9326056D5F56A5718482734CDA60CC75EFCA5CBCA1485339C40B380F0EB848502AACF4007319397D582138983FFEF18FC934C8E4FF9C732D78AD64556C000961F595AF7C85D6346D61E2C5B3D40DFFD2C34E66413B8576193550F19388678651FB34C79350FFE388F13C5B41D204B94FE2A99897DECE79821DFFFEF7BFC7F2D1A1CF84192657C939113F204984EB2EF87F5C1C7A93B97C521E421070E165E4BCD05988966A465304E132FD3308CFDCCA83BCF038E8E9589CCB2EBB0CE4422425B3F1B4CA9385B9C8B4DBF0158CCAA79E7A4A2A03E6D9045478992797E695EE2C3DC327E211125B52E5490BDC566650D04CE48ACDF3358BE0A413765E5C01E2F0E69B6F16F72063B9E28711CF1EC52A4C57AC182D680A3F9219DE6335B0232C5291D68CD27F4AE5517D1A1C0CF9F2948ABB96A3322358F3288A0966B6016228A5D76216E01AE60BD26266348F56C5C73EF6B1EBAFBF9E75366440CC0F713AD164D8548E5ADD3B30343EBD5AA5BD1A9339EDD17EA11C527B0EC39A940D861882406CD7892DBB13859D547B4E62E5CCAAB8A9C763D552AB02951F1BE7A8C1B45C4F82868A669402831C576A9B520DBF1077031E6D8C017B2D6540F3D43589185B902E65DF4954ABA3FDEC7ED96FC5A1532C741ABA00ADE879769016DCCCAD1776D7AED97FF3F3CFC0046A761AB5DE5ABB51C7F88A96F22CB57C6018B7DC39BEBB0F9AC7C88A99898934D1FBBBBDD3BC7EC30DFF74CE592BD7AC7CE2F96D6EC9ED74234EDA722DCF713349A0FB1CDB5951719C2195C84136B56F1C13DD143363D9ACED17B214BF9C3282972AEF14468141264063978D5499A629CE1CDA0D64F7F857B22B19FF33938617E157B462C57D4D258915A3543AA979280311525CA3BA4075EB56A1400E4C4AD5A81891A3DA79A3785C005375FDFAF50F3DF410FDFEF2733C8BD0C56CE7C03A06EA58742551A5DB238B945A8F95433C62A0445FE10F88B36A16374BCC8D87567CC45C4D49BAA0334B0C257C28FD58FEE759A4F69E8DC3E4B70C6C0A321207C96D20CE9D58365028DEFAD6B7DE7DF7DDB8926A057828989724B9D2ABC80089E40E9AAA84F44C2641B0FC44E5A95064DC2411618882DD2DB9BD12EB56595E0AD3E7C5C117E7EDE198CB44F43791521C06B780A14EBAAA923D3138CDF5E44E51F2D1A7471471A9D6E6058CB349CDA0B00C4171E1411263D94CEFA17B8AF3E2DD447449F921A7607A3F99CE210C940F12C290343E395771DE1543653106668B27790B0426754803327A8A2529801E2D19B0A44A53345A19E6AE3C826E5399A9990421E5A366362AAD5E9A0B221779BCB57C0AC39E55CBC727775F76FA871EB8EEA6B5CA8955078AFF1295237D257343B1B35215F0B1200AD99139B534F25A104796D2CD1DA7128DEC8F1F55955549B424702D35E0D7EA51B791846D5BB52C7757923E1D471D4FF5963560D9BCDD14BF9CDA2B8BD4B5DD38887A8A252B558D6EDB2F97663B6DBFA7A2BB2DD5DBA542410736D2C4514ED1293562DDD8245129B6B319B621018A50151CBBDDEC622DD2440D56CAC33D3D3B77EE3A686878F7F8D852BFDAB0AD994EB3EDDA936104522B55714EDB10DAB695856D223D2FC803CC0F8230C9849F14C4902333D183AE126E9FB04E12032981F32275E1E0D31FC21C53E6345E78E185575E79A5E4777135A41FA489CDC04D14709434EF4A22DC729188B132D21DC5409C2786E5B432AB07548701E398C08AFDC52F7E314F7253B7A03A2E75E31C0F9DDE1FF8C0076EBFFD7666BB304A4709B16EDD3A5800DFFCE63779F4A4F022CD1119E64E0415796A4F9C214C8C134E3801AB7CD34D3761A1253D4BF891509244B479F04464496C532A3598C1CA33264EDE390016CBD2C0FDE3E392E9B54F09A18CE47DE159E29EA24227A61C452553B52485860113E8EF4C9B31755B6ACD26909C689A8BA0C51E7FFCF1902BE402ACF3A480614A005B89420179FAE9A71931A6A5262077A6BC945C058A07137969C58A15784F3811D3D6D9FBC51C38E27FE06E340238F1ABAEBAEAD65B6F85D81B1919C16E8268BEF39DEF10A3586C41E9D2B3902416EECF35613C033B2BE57E54DE8589EFB3B801363ECB38B8477606D644355F4A464CA0FFBCFF572AD4C25C11D0275686AE4BCA18CA51264751D4E126E79F7F3E8C5AB61B224F5159058038C1CCFC5409E353E13243DFF82133B8C518E7237814C961994945B98B37B0ED30186CEF8A552395ADBB5642E9EB2959B36DBC894AAEDF89F92CCBB175FB972809B28A623F55A58207BDB813E8441A5BD9896D7593B869A9D8D65682C62082C98E63A5EC1EC70DE2A056EA6BA6C9F6CE2CAEF73DF719DBFB7DD0D688ADDDAEB895654995BDEFFDAD785E076684BE83D7C19A38965BF2BBAD8E2AF92A8C5510AD1E5E3A3136FA994F5D7BEDD5578FCF8CBB85522368F995EAD17FF1B2877EF90BBD3BAD96572C25961DB73B2A8E7B4B25309BA0D359D63F38A3D1B3EDD8D66D2967C3404B0E9C8846AB50F2834EE828ABB752EDB4B40FA71376532D135CB16994E1598D33B87239A7F413F2EC53DE8B862BAD024C15D374804BE63E9628CD00690E38E080E38E3B6EC3860DFB5C1FD1CA4D507753EAD0CEE6D8246CCB236FD6C9A70BD71F304BD3CA0BB0E4260B9D477AB971FFBFF88BBFF8D9CF7E663668D9FBC50A3895638352B84A85AF9625922B2958FF742AF1880AE8B9CA1D2F8C91D29E9A57A74AB2A3764C0B1DCC824690D482E175EAA9A7DE71C71D18349B599A4B83A564F04DEDE535E24BBAF49141D0CEC224C1DD44AF274D98DE765C20A8322A77409338280231F7B7BCE52D8F3FFEF8A64D9BE6958F99780CE60BC3904423C15295465D66C72E321D6A8BF44BB2D726374632B5F0210749F074D6B5E2579FFAD4A7CE3DF75C69FCBB08715054D0716FE5ED58959189CC91902E4F3EF9E4471F7D74E3C68DB27DDC59137C69DECDE53DCE0C268E457EEF7BDFFBD5AF7E950BAE72D49079BAD2DE125D946E920AFD8DCA086ED3636E76AD91AA0853E3C67D087A4AF3942781F7610E09C1F84E3FFDF47BEEB987F5684284266AD8DE6792BE29301D6C0AF3FC4E3AE9A4FBEEBB8FCC948E53A6215201126EC5E3C091D35D562A55DA9DE66B6A03238DCE8EA475786FA567B61B541CAB35571A09D6DC8D936614763349E041126408FE31FB2F797E90C65D580659CBDFD05251A2AB826119F5284B4790FC42B715769415969D6ED41D0F92E794DA59AB36EB0D656455FE590F5D401238495A2E15D338C93AC364C50EC5027EF6A173CEBDF5F3373726A7A1A4AC1C5ED6ED74A6EA533DE59EE9D6ACE5B8856AB9D169A7518833D66D4009287DFCE39FFCC879E7C3B4AE42116C367BB0655D6D2874F5645DBF56A977DBB6E746B07DDADD6AB5A2B17A3B5D0D469D2625BFD4EAB653652556CA088AD86D5492A859B3E6435A6689DD09AE85B3B37DFB766E9FD4EB98203A5279CEDE96E47292116052C8DEF42F394B64D352E24EAEB86AD52AE87C5074AEBEFA6AE83A575C710559B98825F653312B9FE6DD9F18CFA47C9AE94C885AE87AE9CD8917B44F06C616F1AE1F7CF0C1FFF55FFF254E0551A3E70EAC79B5E0E4F14FC9FF33D9AB38E6C42AA14F40464C0F009450A863660621C41771294C2F8A200EE14F3017C987517B4592C51F459441A5E6036F497302959B14F488C9D24B0E3BCBC7D49EE55A1215A478E3824AEAE1DE2FAAF312DF274639B707DBC9347FC661E888A40087320E8D95BD19F01586349BBD546E7249832026C9B1580FB40593D6CA7B71EC733C621D9BC8EC7C0F8E49A9C6B02D338BF162F857CA004D23699F94C4059478C0273FF9C9F3CE3B4FE5A826AC97217C1E3BD898DE2AB98954CF3379899D375875417AC0AD98F84BE625C0FA324D113CA6F92C879CEE411227632AB83F6D4DD32D66EEFEBC170533B545E6DB5D79E595679D75162525874445521A0AF2567BD7D964DF168B6567ED74EB00E5C795246D06CBC1D15CE52A46239D1492208D5B3A1EA0911FDC58151CABA06C27D56565BEEB0571D40E3AB6C69AD3603E18B1675B454B9594E5A729CCC04E1D5F5B4D379EEC4224A8E1C38FDCEF4D7FF7CD6FDCB965CB160CE00D6F78C3830F3EA8728C3601F0D95B12B88E0D49A0D3A6C3204CD5E0D2A177BCF39DB7DE7A7B1C4605982350D253C821A893BA3F04863134323C3E3E86F5EAE9EF9B1D1B1F1A59323E3AEA174A3DD50A8C8062C12F7AEE4C7D76B0AF77767AC6AB55A7EB8D8CE366FF25500806FFFAAF5EF77F7EF8639D916C3B0CF66AC5D1B63ADDACD99F11AB97F67C071D741053B6C4713D07B56D38F15812C41C076688880FC4CEF1A9A4253DCF829517D52E14016636B919B09DAB1CCC7B6AA93D3B9A90CCA81C08CB5AE47C61CCAC1012BD5E52A517E23F2A0B1A7330F464301CB8CFEB1924C048988F0E2D96A8CC02E16331874F652633078ADF9009A679CF00963549C986F927A39DD81548CB1B6EB80107861C8D3D3D182A64C9AE64C55095A662859F930FBEF9CD6F86447DF2C92717CA2E55465D86609CD1994EFFB5D99747A2347C43E7959915C05C263BC35353B9A39F6E7D3C8B24C29B2F942F4C1F25934F7813699929E8F0EC3120FC4292A3E7D971E4B014B1E79C730EF88EA8A54C1F7ADBDBDE76EFBDF732177321CAA01D2AC103957BC399B526711413705BED8922B588E9CAF94A7E2443E5C4BC5346FB4C08861B6FBC91C31655749FE364E89B415DD3AC649D335D4C9C85A0B649E805CFE54F58844193CECA31E8050186A7C24C7513FF3E37458C12B567AA2825016D0E3A33257D401C92D0F8AEB9E61A46F579CE6D037C90273307D2889BADFA2B8AB555613A1E35D656FC65B1DB2EAAD9266BFA7437E12EB4A538D6180BD08470135BF9DA38B04AB6EB7B052B6B6A0633B69B262C2980C60D7DC14D63274A6732ECA0D82EC4252708BB1341B251A9CDC682CB21E2BA75C37D733A4802473F3CCE76A11824B15BF497AD58BE69E346B7E0479DEEB2254B75B8BE56D54A3C96D4736A7D7DF5F109AF540A5BED41D86763BA861C72B25AAE42A56F34B32C09DB2995FC46B3155B598823A34FE895B33333D0FA615C6E7EE6D93889FD821F0641C12B74C2392613EFE94F975E92F804FC84FE6ABABC79D9A1871E0AC2667E8A589926FDA85CD325F1BCE52D6FF9F5AF7F8DFB1085EC7FE2BD114400EAF892D52ADD7C6191E086140C14068C3B32886DE5E5A5FBBC3F68ECC52F7EF16F7FFB5B501A942DE82E62BEEFF37A6A3CD2EDD10C25EEF37ABAD12EB9E4929B6FBE99C39628CB5C0C8F4D5124B3425CD532681E2D3AAFF178B083BD0BCDB004BCBB60CFD16EA0EA77CA29A7B0C3099382A129732FE97AE34996A0E5429280BC40AA2519DB91703FE521BE220204519A659CB8F89FFFF99F31064A0556F66205A905AF5BB7EEA8A38EFAD9CF7E46E70C83A884CA587C65C53AE320A9E0E31333EC693A5BA4908A106C54C6613C417C8AB3424C543E9D2913871F7E38CCBA79DAF1BC9794C088C52A9C8EF60A43DF6407B45448A0426A023EBAD07C69BD12099505F73C87E2FA63087D6F5D7B5E62B164E24B353231F49940655609881F73F9F2E5201B961490D2C489A4F2745B7A3F05C409D3211E00941226DBC5797736DE4452FE6582E288A0D9CAEA1BBC612E87CAC18D313CB0B08D1B3712444B76440245565E259B9DB1A95A6F71CD4C6B59A6D40F2A7580EB4FA6DDC4C1EE2451922696EEE4DE4EE36E565E0BCD1662002A7F21D1409E3E840174750BEA7FAC333453CDAA750EB19D662C2D69E992340D52DDD0172BBF58DA64798FC601B809D40B5C79DA69A7DD79E79DA0A2B98D5E304EE06B4D5C6948A00832066B18472A4D56AE5E33363A0AB34063EB820F263AB6EBFABA9F597B6ABAD6D70F21816F6D656DD8B0E1E28B2FEE349A4114F4F6F65D7AE9A51FBEF042C77303DD4E225676D23F38D469B5DACDEC08C3C8C8A48E673B6126099868C0D67EF6C292008C0C8635298D5E911D3B76C88913FC2BAA44D2C79B6A106D02323AB6A691E9835A18555EC43B64EF89260D6DE0539FFA14390CEFCC6A18E8DA52C6AC8C2C235A360BD91C244B0800C98716625B683C78D6C9279FFCA52F7D09D7103413375FA8BE817E7E8E5CCE387574EABB9614C733D822DE6D6AB8B482E9120557C2652CDC973254395D98E421871C42CC199E9CF5EBD763ADE991E0AC24D31CEB8EC3BF79F366BCFFF4A73FFD918F7C44C2EB0BA15028A36BB980038B0CA76CC0383FFFF9CF4333C55429E8B0B81800670E1A3AE38C33F6C9A130BB134F3C113AC2534F3D95E6C5818BFB0D855BA90CB503C4870711439B2C46CC4FA68EF13E3211C91FC79AB0B505179CD5C2C4B7901E32C23417D11104039D442F1561E99E9D34D49E5E35A9B4121CE985284F20F04439C283B0C86037E4DDF411E173F2D979F791234D4D04F470C209277CFBDBDF9610B488731ADAAF78C52BF094B7BEF5AD2056CC02EC8CE84C8C1CD063406C41EA687C34662A761EBF62348F46832417C9520821992314080A2C1A6818DB819D5DBD7A354323E284146B8006659CE36F8B1542B3A050281EFFB6E39EFCC6BFAF51D692FD96EE7A6EDB51D5DEDD613D5216B6374C34CBEB5A9004DAF3136611E382960456014ABAEE59A68A9AB41D3B49BB59143BD5B8E896E782A3C7D8B9B14855949B16FDBAEA363B118863BB525BF744E2921DD4472CDE373D57BD72BBDBF66C0DBE325D9FC1A8AA7DBD85A23F39AA63F24B972C1D1BDD0DB1656B0C244D30B5FEBE0493EE061095BA04A1528BD3A4D96A0E0F0C4C4CE954059C8DDEFE81199D659E1635FC57E042E6C17C57F6E0C040033C37AB7D03F5355A4DDB7582CC3B045101A1D2EDECE11DA26455395832DD8F3C1A5218240088B4C8E906480D1815A920E17CE761760966E742F40FCA140D92078A5128017817BA223D482608CE08B45E33E37121CE8E1B8225E257E0E92C489630EF3EAF97B443135869116F92944C5946131B69986199AC41AAC0A46BB1E83B2C30A6DB5D72D1A86052EDE5A2B3C5185EF426F3B78CB408DB15B58E6E22322F7AACC868F6193116A7906C3985BCB8C6B0E8444B965A5C1E577EC8F389B5061BE276AA3D014425C1890AA660E72DF4628106F82066B165CB163CE8FAEBAF674994A4B8619F3041B3CA57089754951860B36CF1465EC3F271F6B5B732EC2A65C463F7391EDE90B792F649349B04C75F7C6B0221C51F52528A67669FF7673681F05069ED229A359E72E59557425122108588C9D47829C37D47D264D11947883B1F7DF4D1C44287B2831558BA74291EFAEE77BF5BE51959C267E7BA01E73143BA894452522CF1A1624A4AB203B75E0A6DCC4435F933CDD0EA89EC84E1510CF33E18F975D75D772114DE2CBE62961F0A108BCA534A2037E3247C89535C1685BB55BC9FA5D617AB3BDA8D520976701CC4DA50C07F4D8249E04CA51AB9535B031ABD39F574EC56F7170B536DA967A5B8CA5596EF38AE9D60D59AB61574759D8196229E1D27D6C6D87A5C25BDFD73C8E13C6562AC2FEC1DB20A6E019A6D27D0018BFEA1A156D06D35EA3D037DB353D32A4E067A7A69D18E4D4EE8EE1C3AC05B0CBB9D8AAB9B418E4EEEC67E97ABB576A7898370D6D9E772FF1DB71047F1D2152B46B76F01E1FA96FB92A35F8C25FA8F877F3D599FC1830A452FC08E64884B6028894637D22D4BF108531288A64CB2C161C1B2831EE61AC446D105175CF0852F7C01F6DFD34F3F4DD838959752FEBFBCBD07BC656579F6FDACDD4E9F395318CA5066E85545638D9F418D468C48101414E9BD0EBD0E88C288304A57C01701411051291A8905A32926B1BDB1105440CAD019A69FBECBFAAEB5FE675D3CB34F110CBE3BF9E19E7DF65EEB594FB9EB755F7712315A3B6FCC36C66C72C3E198C268E2797788952024DB8FF2294A9450032EC6649C92129A7FF802A6912A71FDCACB41A9C696A80FE334EC17725FB42E34D2A1C8C62D66A900CD6E63B7C0A121EF1BB074AE152845EDECE308004619342046B98428E78C1F00AE8BAA5153D0005B8A397EC36428526EAD853FE8A083AEBBEE3A342D83777B295DE4E69B6F3EFAE8A3514EDA701A1558728DCA7982B6B447927366348BA6542ED49E1EB2C9ECBB5C408327B8ECD23C5DF0D4534F958F92169DB6DAAADE10976832C7BB204FC5C68CE9AF25310F3FFCF06BAEB966AAE8903D3307911CAC4748995B29EEF11022C8A6D4E48E3BEEF89DEF7C672A4D431E828BB70A363D4E2999B4AC0D431EC6854FB44D13609AA1711DB8D36525556FBDF5565D81B6CC279F7C3277D1D50E3CF0C050E45142146DC34171B6D0EAC19BC1A680619471344906FE6B5EF39A5FFCE217CF3DF71CFE994156D658B8832E83E0A082E3D67828FC212E6C1243D2711C0156395FAC52574F65E1E0D88E49D77075A4732CDDA9BB6F7963A0AB5A1E196D8C36724D90042DC048485AE5A43BAD26CD4625B4BA43A9B39C01EC335A88B4352C4B3C0D1CB96ADEDFB8564D2AE5E4C9917A7F5269D6AAABEBC3DA56F2141E4DAABF69D54BF9F3A2CCE2ECD1D4D8A1A4B3D6399A779DAC94AB23CD7A48C2DC8D377AF1B9672AB58EDECEAED0680E0D48CAB4BABA7A864686F372DCB5737AFB0707D63642AB56EE9026196D36C61AA31A46BEF7EAD55AA7A6BE6FC6CC756BD7762461666FDFDA75ABCB21E9EEEC1D1819EA98D1DBDDDBF3CCF3CF68489D337A656466456E595D9BC6BE1E8A3444C87564FA25975C72C61967C4FCF3AE662531C64ED0D63AE9A493CC7FD32A3816011DC4453FC442A631FEF465193ABA295282CDD046AC809D470F3222CCDA099B6CB20936B1CD8EA9CE17BE05F230E45A0AB77E2A4D00E6C2355E61DAAEDDE415342A1DC0BDF7DE5B5AD3369C76E989279EF812DB04B295A345423506EC872832DB16A3005615E3FFE237A4D743818034749D130E33AA7B316A792EBEF8E22BAEB84227DF7731070895560680EB1C6ADEF1E9B802E16FCD0B49883DF6D8E3FEFBEF77952044690C431FC29663C4821E9F68B25551EC9086C873E23A845F085660699A16CAA1C0850B174AD6389F11C71362BC3C3E53280A2641DF92C562122CBBAD9831F0C1AD87A25C70AA1D066B95D4A77424121FD2D05040718CFDA5DADE4D7E4281C8CA82723202B3DD5F6935EB4933EDEB92A7DFD2E93CF3DCD33EB5E4B3ADAC2AB5B3ABBBD7F5225C9F7ACE5058F4DE9498E7B43FD3C9E17C7EFCE31FDF669B6D007AEBA90F38E08052D10015A3014CDEA49C9AA1A08DD237B58564B0F338A0E54C08E84D453937C009923D6CF8B8E79783996C005DF6ECB3CFE6B4EBBFA5BC4B76A920FDB75D266F588BAE4F30C637ED9B5B6A8E740E0D6C51ADCAB0DA4CD66FA5DCAC95AB8D6625C90042D9AE6BD535D763A5CC051869864A2B74B5B2B85035E39848EA210BA82769E6348C24D9D7F45EAEC3CC90746541A4D668B53490A4ADB18CA56E2874FC21347F1F1A871E7BEC97BFFC656A682971A0B60EB58708B8E5965B34E7A1307A3C39317B8F6D1433AE87692B405FAD973D33C48859B0D8D2925C575F7D35610D20DA98E4A6B171A873AA0CB0936A96E6280CDD4517BFF2CA2B51A240E63EF2918FFCC93A034688174BB692C00EDB52D7945188736F5801EC64DA36E0A1A7BA7E5CE51E3B37C64C039D6815CDBEA69A527089471E79A4D480CEA38480E926B30B865CDD690A741E00FCB8A8819875AB68B6E7EA62EFAA36F4A1210A3CA78B4271DF9CE60EB9B54E956C0CE9234C41E511F7724B96B8077AC873BC385CCCBEE36BDECA4418F4891EC71DDA9C5E674FEBCBBA0BF89F58F11AB2E60F7DD93694ADEB69499C4003A20BEAE9E0852772671A5B33339B2195D22494CA473FFAD1AF7EF5ABAEDE800DD1FB8CFF9A852AE478767D47AB363DFA939B6A26DFFDEE77FFF8C73FD635F52B8DD65D32CCE0C4836BA34882B06579104C95EE2EEDB691EAF8267E294275D6E2F33EB364C9ACB97357696E5BCD9D76DAE1C1FFF99F39FD7D9DBD33A5CE75E5DB6EBB6DFFFDF70F39444197D235A51BDEFCE637C319A993F3E10F7F580BA1ED8178D2D2C8ABF8D8C73E264BCA5258A7516B87D18793E790AEFD3664962E2B0BE0DBDFFEB6E6D63A8FC79468D63E317FCBB1C71E7BE79D77EAB2F665B5FFCD5517AF3B4AE5831FFCE01D77DC81AF4CE6906C364CB4FAFCF6DB6FDF77DF7DA9A964D2B25CFD0BAB6A49634E395958ADF50D8FCCCDC732165A52B01DE54A47DE086FB4511F4A9BA349689432E287CCE44F42972C7E3DBE1CCAB43996C3BDC7D23094B7362BA559EC6846D6DF26E99359D3591A08ADB1E16C1E0642E74349E391B4D19D17D87B12EC45E1D06B02172D5A24CB1A08169389D9E8397751914F28E6DD3486EAABF84A0AF235C7CA77DA6927ADEC65975DA6ED219FCC7443F0AF85F5F1D38E7B4C13F707A50202029423A760B3CD3673641B8EB674DA0E5AC4AC889663A219E66E2CA2F908DC2061DEBC796C69EA87A6C95487C8307505003F0C454F49761D19C749AF43E04B3F845118B7C371E3714DE0440786AA8DAF50084DFD09161D4DFA8CAC88FC59EF9E5074557445B19BE892DA653DDEF296B7FCD77FFD97E989B4BA44A98812E80B471D75D435D75C8367A7FF7EEA539F3AF9E493794273CF125870468848DC3BDFF94E89099AB7917B44498272D1A39E72CA299FF8C427883094F236CBD222FAFC2B5FF98A842FD3C47EC274C24F3428C5819A18A81AA22C6BA92034058D13975648ABC99DC4B4A7E0D9FAD20E1D8F633AA038DCEFEA6E2B03EEABA591007DDDEB5EA72DFBAD6F7D0BA2FC69D871895AE8BF9A732951ED0352AFB17D6187941388B2C1F5D63064D17CF2BCF332BC7BB53C564F935A6752ED6C8DD6939EBE747438EB3035369C235FD2D06ACCECED1A191E966DEB94750C797AD7BBDE4589C382050BF6DA6B2F8E8DFE099E4ADF94C662783CB5F4C79BDEF426B94D92DAD2AC3C08567C296A5E1D8A8A30206400AE1E78E001CA8E8C344B22020036898502C9646DC2E38F3FDEDB9BD9734778E89210376D7549BC8CCC7BC97109A572686DD855DDB0D9DAB89EF6A6ADDEA4349266EE941CC0AE6A2DEB0DD9CC6AC786D3563DA7A5D389EF2E956BE5CCECA8B79A23CDFA682B4DCAD9AF86D24C13247926B927CF25CCAD5646ABE5B5A97CB8463DA31EAAFEB19C3E29DD33336BE447618AF698C4194EBF14A1060CA44AFBC1513E8C6B9E17EB3BEEE38DE318B32FFCA57D02D452DB87718358449BEB58F5DEA93E2D2856C534011F564DB3617C791231CAC8E1B8E0820B343F4EFF4CE573336FD494E86AC41B394AC86E7B3371CF194DBE9E0E634E1B06029B49AFEFB4415C2F15C3F35C56ED7F4E7A1DD730B715573A8A3BCE7AA1DF9F7BEEB9175E7821263C417C7BF4669DD494EDB9E79E3FFAD18FF45E02C5F2CB756B212F40D59FBC5D9CC1C7762668EE6773C88837E602C49E728BF6F8910CE9B3928CE96AE92504AA17856FB94CFD08F9528A00D8EB71E022DE7332A62480BEFFFDEFBB39B3EB95E29C4ADB0FE1DBD0E75A6C02230EFEB05365D10CE62F66D5417C13077EE6339FD15A805E2750C38CA11862067F4724A6E144D4F7F5E0E067F43AE18413A49F6CB3F811FCDEECB32CAEC41FFE62330B8F26F9164F657BD75B19614E484A1DB54CB69E77EE999FFEF4A711AF2F2C5F81938E00E501E1927BC31BDE205524012DF359730E949B4E32D4EBFEFDDFFFBDBE46233CBAFEDAC923341147AE4C4565BBA954B4A6D0ED8E39E698CB2FBF3C6E38C1812410044A586FB458788A73F2D7430F3DE4849663293E75FAD3E2C58BCF39E71CF25E1A219C4B4825732C0216D42464DD717BFB8607D7CEE828F70C37B7D4FE0C61C3BCED5725E38F2B75963356E8D04A1BAD663D6BED9C26AD2CC85349F487B22638D304AD0C605AAA94A596875B2987A1232F33D621DEB85419AB260369181C6BE8E4AC08E5C792D6F2A4155A2F51B030271A8FB610B381AEB5BB1C0B17F6799C56455810093008ED2FAD0910CA98A41A1B84E4DAFF4E1A310C0E8564821E44CBA113A115FFC0073E70D1451719A137E9F5F5A71D77DC719F7DF691C49751A2732487E3DE7BEF25D2406F095C678EFC54D7E1CC62D46A7EDC61D084E73EF8E6AF35CE3B069B4D933F88EF9E149C190E4E98CF11723D44CDA4F349BA17DF0EF25D1BEB014D402E51FB9B16EA047368CC8D44466DF23C0862C71043516DEBF65BB2C5F03EF07DB4E774C0E4EC5F7AE9A5969BF03D00EDC730612A29E7D17F31FA500CBA02C5AB04CA7511FC29887DB4FC125EFAB2240BCD8CAC399C97D6E1D4C529B062996D5A869C67493F27B5C00140D018A7444C997C0B0CA00E5BA1055D33A2FF9E7EFAE97260F12A0C7763BA34604AF042E113E83AA4167423E876DDACD127938D08FC199DA701EB9B1A86948AFEA44D3C4D454C1CB22344A6274510C0DA86251813533B080EBDF6F8892A775464F08F8D5473E2B3ECAAA5ACCA493247926BAB051B3EFCF8F3AD1C063363EE466B56AE09ADE1AF7DED6BFBEEBB2FC3902BA0D9603B491BC150C4A6C42692A0D7B174D90A1E9EC15D5B6CB185F61EE5C761FDB88D4F485230BD90BA77FD3D8A8450618880005E4D12FE18F894A03BDF6B1B4AC3D6271A955650D7D172901141B5686F9F79E6994CA3B79F3E946B5BEBEE59B96A79296D656D6A429817C2A69D9D8D9191CE8E6A29EF51506ABDA4C6B247A88F5B4ECD9079EC9201A3795B028D7B44A7209FE18C1D48966029D15E99D72A354AC958291968861569EBF9109E0CAD1521B5D92123C0E5DC4E4B6AFC1A2AFD440102B48AC6DAAE1845915004AE4B61D2A217A70753BC5A9AA02D18EB178D4251C058A8D846E01539C2AECF4FA6656769C322F2C8FA95AEA937A421AFBFFEFA430F3D741ADF02618D40B7511BEB2142261846A1F06C5CE616F3DB4F7AFD72D4F9DCC436C442911E31CE651AAC118578EE9DC5041A2531AE091C2E0C05A645269EF6F14E3BED44B35654B13690E6E8B1C71E932A060142578010D5D0EA9B92566EE6E7273431BDBEA953AA355BB468D195575E89AAC48C8A398D2D2B8DF98911E23EA266EEB43F0B96033F3186DFF8F033EF2029F54FC9A078194CC9C7F54F3EF9E46BAFBDD68D6BDCCD262E6A0B11C8559BE68B5FFC22895CF40DF0124D0B1CB9DFFCE637F7DE7B6F9D2E8D8AD9C0F0892B06C820C99978F8E1872DF83890C6CF382545746EAA9309BB1F8B8B01ABB1B9A5355ADCC62FCB148320893F666C106BA41D9BE5B4D1DB59AA8FE4F54D1DE5E18C7420CC9BDBBFE2C5D55D321C2BB59BBE7247BDD4F9E37FFB8FFA9AE7EEB9E71EA6FAE31FFF388530071D741051290D00674563D327471C718456418A87E76556DD6126AE1BC20E70F98C2B10AD099074C4D9F42C7A04CF184F645B8F7FC22BAE37862D1894DC56B3ED2D846145C3745784C018C80E9769A2111654C0FD6B07564B787736C39695F2A6A1B49144EAC8703F87B0D1E410BA8F8A74C37885C5381975DACACF9064F068AE0928B9AA95926A465F9ACE6895B3AF25C9DA507A31A4CF84F4B9345D17D26A67B6D5A55C6FBEF9E6B81A16E56A5712BB2766B0218B00E31E93AFDD48DCDC5C7BD3F8A0AFD6CB4792C1E016738EB0A5F466BFFDF6FBDCE73EE7F86AA9A0F2C70B373DF8A4D777AD3BFB1F9241C769E36FD25F6C9A7EC571BBD6B8A6BD149544C4AEBCDE6B9C575D7595EC63CAD3A6A963488BA695E33D2627CB8193B5455070B4A7BA545C1C17A2AE5FD99509C4875C01CAB1226D42CC64D9B265E6F94339C7B6AACF212A2BF686E263435E5B57C32DE5C5ACC9BDD051D7D51CF0B9E4924BCE3AEBACB4207BE2E2B802F442D0486474DF74D34D9A56A433B10BB635D01AF64D4CF380216337D9A281E89E7E4548C4A9574424801C3BCBF020E2A3C8003CEFBCF38C620C91736D5632FF89000581783A4A872228A90FE156B474933C72195AC86D79DE687BA19BC1BF92CD73A70E9CCDA996BF2D90654E3787D743D4EFC5BDD8982266267B96BA8452B39A68481D6B874643A9ABD43FAFB57628943A425AAFCEE8F8E657BED451CA007077DD7D6F576F5FD21C23364DF84E8FB9E79E7BCA9880F644CFAB7900C4B5D75E7BE183EB01172F5EAC0F3FF1894F9C7FFEF9EED74A10CC15BCA6A009513ECD07C9E91C47A57447CFF938157B417FAB33A9017833E08DF135C3B19CA5E76A889B98B9C4871FEA0E5D44EEF5C5175FACCBEA310757AD1B6ED565F977D7AA7387EB5B55AB735ACD4AB3B541B9DA0AE381AD717D965F2D7B64B923ADA61FCD6F4633FF20D7041A43A24B8E935564C1A51034A01792E49924AC09C968A8648B52AD62F09A5E9E7EA26C006C3B6F06973A22FBF4F8B0D36097E89B8E98856959195EAD170E4A8CF62E155D803C3C4FBE3D5AE7991DF19F3E4F1026D051D04E527FD599C572B2089EEA3A3140D9578B23F2543569135261F0777FF7777297436E9AE8FAF44D41004E7AFD36C8A56EA115C159C70A4162ECB2CB2EBBEFBEFBD2A54BA7795EA68B2D1DF31F6777F1EA1271B3DF8DDAF7C9616689F263FB70FC3CFBA130C0D13931D597139E669125FA1437B374D328373533AD4D283C7A74A3C164380D9ACD77BDEB5DFFF22FFF02D96428029A9C4362616941F263C669235FFD5021EAFA165702A3C96200120CE06E7AC74E75B80C4572DA69A7496A6B32B1735175C692C20665942DA02643CA707211C1FCC958233F38C13AD9145FFDEA57354BE79E7B2E85EF135FF6F7431E0763036108188F1B171863E45E7AE9A5706080C2CCB460776D60302F40EB9D3138DC0A1B2C7CDBEE7BD72B3DF56A5FB531D45F1A3AE1807F280FAFBCF882739A8DB137BDE1F5AD52860BA0F24E0F25D78ADA0EC60312FCBBDFFDEEFFF93FFF473363291C1FCEB428FFD6DD3FF2918FDC75D75D9AB40BF25798E009C5A5611A3F59166F27FBD4B11FCD127FE10B5FD093E2E7C52B1ED64FFFEEBFFFFE1A00D2C795192E4C8D530B56DE7809ADC1D11199EE49A3B74B3338B44328CD0A19A7F4DC0C3C9FA4E58C8A27E4018446B3D1CC3B1B53A09B0F2FD770AD541FD52AE5D1666B34CD847E3ECE90458E425855CD02469A3819F0CF4919C868906E2857FB3A3B9C09F3F1E10D9840D77618F260763F97461E79E49132CE66162D856307FD2F9D2770793FE69A3B41621A320C1706C5354CA433B15CA7C9F422BE586BA08CB621FCD26565F069BF61374C7A1D6C444E505CCC6F0C3A42C96C9544D111087CD30ED934D70F51AB8F2DB7DC72D75D77BDFBEEBB93A2F3AE551131A8A9E6D3A1AA50F04E9AB5697C425E95956B539BAEE52368EB2A50F0242EB275223444A63ACE0EE75CCFA69590A9E88A36DBF5CC3E7E990547ECB2180D65ABCD391327F742C1924DC0274C40A9578A9EC9001208FDC73BC6F5B43601A87676383E14E5D0F2D3816F8782CC436FAEBEFAEAE38E3B4EB69B2EDBD6B578AAA9A6CB0213C8C5C95B007694F0D2D5A4188E38E208948D2C083DAF91768E084DBE8E49A556ADB44687FBBB3257EFF0238EF9ECD59FEF9B356F756DCB1DFEE63DB33659B86AB811AA5DAD467DDD9AD56963F4B9F2C2CD861EBCE98C0FCE4E561F7DE26969C79C9181C1399DA5D5F52C0AA959DD679F7D645EE9FDD1471F9D15C2944666D4667594D29D5FF7DA2CC3906E10BABBC2F053DDF5FE666565C65D5CED6A8E0C67504AA99B0DDFB0F6F965A3E5E5A111CAADD09976F5D6B67B7EEC8FA163AC2B07C5EB7925CA0F38E000060F218A43493424807309C590463CF5C6326807EAAF071E78E0ADB7DEAA9F6B71A5329F7DF6598284549049DD522D18934AB9085F6AFB85175E208C7EC821877CE94B5FB241D31AAB3742DAD3D73B5AAF3786476A212C9CB3C9AA15CFBF393467572BDD95B4A39C0C8C34563664EC979AB2E54B639D7931413937FF3545D58C74A854CBB87BC2583564EDC51A1969DD40288D84D26048F5FFC3DD3DCFD647BA37DCE0B9A79F9DD9DB3BBC6E6D5A042B6035E72C20555D1C608612CD809ED7D4236954E44FCC10BBCDBB7D1A74A6A97562D41FB743FA707DB7218A73F244B14CF7AFC372CB2DB710CB06EA6DF79AE4598C199DC627F663F27D3603EE2F89568E43E94F759E79452F2388E262CC72D14E9CD1DAECD61B0981DB6FBF9D93821C70BFC95774DFD8F20B2F83ECC820F2BFB82680AFD859D6187E108AD0ADE466C81123FA260B63E7459F03076C8B4AA16334A7C71F7FFC3DF7DCF3D0430F1144F277744D8A21CA454B740971143BE6B6C5B4D368F1E0FD062B8FF8A31D345D8A189A395DF93EDE521BA62DEEE4EEA0271C73FACE29A79C42AFCA100567A6D9D9EEF975E18517820222B9CA8D70A4AC023D062E6EF2B869F8947A67CD5DB76AC59C39521E4DE9A6B95BEDF0E2132FECF6B10397AD1EEBEE9F3BD848560F37AB5DBD9552688C0C5592D6BA7AE7AE73465EF8CF3B069E7B64F568E89CB55163DDC0EBB75F58EEEBD5CA120D9397A399BFEEBAEB3236C0D1726F35D9ED6D7FF5D9CB3F79F4C99FE8EC94406FCDE9098F6765511B66F4FCCD55956ABD3CB46912D6A6616DA316CE3AE67BDFBCEFE2C796FDB8395A0A1DADC6686FA80E74555E0AC8C64C7F846808E0189765A6D5985B22444158F33EC6AB29F9A8CFA9233386041C373DAB29156427D8CB647B60E5645584B58E4B962E3DE1A41335B20D66CD5EB57C7967487A4A9D3BB78667D52A61AC21D3B157DE818C95505E3B5A2FA5A36802CD470E180C1DA194914F944B8D52184BD27AB3551F93F40F5A575992CDB43C5C2ABD9836EB7DDD2BD7ADDB6CC182A71E7BBC9AF357B3218130C59B416FA495BFF9CD6F3EF2C82364CEF6DD775F3997B126488AC6857E2898159068D34BDEB89F5DC8AB7FFEFAAFFFFAEB5FFF7A8CC58AD9E3C9F0853C55CBA90475AD6994C563225898A01C7EC1BAE2E7E99FEA7FCEA1A3E05C0FD2D685D0CCD2D35766FD1922D1CF68E4BEFB505903C153347FFEFCC71E7B2CC9997E34032EA27AA5F2D9262C819952419E3FFDF72587FFE29A80D28110E5FD086FE990C80400BEC9335B34A30328D482ACC200D010F9E646F27171D97437DC7003A167AA6938FC7A4853F4513740FD3DF9098D0D5492834221CA40FA1898DE922DE8581B9D677AF29791AC2117223020C10472D145172D59B2846789F725A9FCB4E8FA400CD745CE93CE33B1B86DB7DD56CA8F4FCE3FFF7C5D1FAA51F7B8D0052923242B8810B4B120DBCAB89AF675CCFEAF14926AE8EC0B8D8EB71F78CC7079E673AB0666F675AF191C5937D248AA9DD55A67DA1A4B5AF55A29D9205D75D6617B1DBBEF7BFBFB3AE76DBEED4FFFE317B367F5A6832F8E24354D17DB8048A86EAAB17DEA9A5B3EF6E15D3699DDFB9B5FACECEA9D17BA5E1C5AD52835FA7AC2BAD124A49559F5645532D655A90D572AA5E166AB3FA9EA26AB24ED7A9EBAF233B71DBF68FFDEEE30341C162ED8CA3866C88B106A9A43702F3CEF8E3BEEF8E0830FC6B48E5E6536128E4B884A20C1B6861C36A3FFFED55FFD9596D8AE619C12B467AD49D6FACA73E527CEC1645D096B9DABD6ADDD74C1E6CBF2A4EB067337C8944152DD3CAD6FDADB3363AC2E83AD3B2423215D9E730A759782344157C1C719F2E6C0B590943B2BF5B4D568355B8D30D6CC5B1697C39A7268D493E134F46DB6E9EF9E7C5237EE9B396370D51AFD24CD433DDADBD446117677CAC4D9784C316C7647DBBDFDE2E09B43A6D30B97B4E882D78AFA35EA2E3A680841B29ACE37948B8E8CA1C0B7B8A39FA959A02E06FA6283AF2D9F377D66B854B0C13372433FA1090253FEEAD649606C19F613F7708C012021A2B00DB94DC3C663BDFE8CB43C17A7401A31A84FDC176BD271EA0BEF7AD7BBFE5FF8041A16214B30A024006DE3C7B5C7321B8F3DF65887D13D4D4095DCA939291A72E99A927DDACAFA449B9B76456C0E89608AB0DCBC4253AFDD6FFB310E7A3A56137BACC6ED422FAC2F0352D2F841DCC7782C7E053E2ACEADE94312E3B6356420C372C1624B0C193195AECFD136CD5487DC958666759B6DB679F8E1875D1B4996CF40054742A8A2401B4D0301ECA855E66DB8F1B265CF967A67BD71B7DD57D62B3337DE3AAD74EE34F4B3E1D17AB5B3ABB327ABC36A8E0ED54A69B5527EBEDE591A5DB3EEC5677A66CC7AF4D995DBEFB8D37BDFFE96EE30BC6A246569B49A7A73DE79E75D7FFDF5D9F38EFDE294432F5EF9F49864DF489851AE6E34D67C26949F9F550F2361EE48F262B5B479335D566ACD2975AE0EE559A5FA8AEE99E9DAE5B58C07276C10663CD535B07083BE99CBD6FC4A0AC04D8730149876A49BA337F102C500737B601C39798A5A381873F55BFAB6A2CE311539DB5C2D260CD0036A5689706A8F01C0052B95855CF28E026912369A3FFFB9E79F0BADB492946412F74A3E9692CDCAB5394DB908C99AC6B0166CCEACBED155EBBAC2B826C81F2C73933A727EBA0C6394357CCFDEAF4D4ACF55931535299B99AB0607578C8C567ABA2BB58EC1D5AB92BC6301BB2DA647764D865B7A784F225E63EC80831B845289406AFFB8F2E6E5E0DF6318E8D65B6F4D630CCE9D6148A1688C6AAF4E73482459479822388707806CB8309E1BB1ACD3A03059AC182F8BE5A7EBEFB3CF3EDFFBDEF7F4500C78A79D7692DDF0AAC843948D198D6034A04D0BC9573401787AFC9218B248E6ECCF70500C10D2AD4974E95ED363BDD29C06F52FAE09E80D70E595579ABD0E9A013C71327BACBACECFB5D75E7BCC31C720979DFDE319C0C0384F8039809B89C517EB0C002A71F90F1F0293004FA23902934B89B60B56C3FA9AC005207108023E58DD82C664404A5CE5CBED603591BC5EB66C19349F7A10FDF3A9A79E92EC5EB468D1F1C71F0F5511FB80DA9918F538E98B49D326C36EE52434A306A27133FA50B45D6BDB52D3D534A6E98CBEEE50AE7C68EF7D87461B63A132DA48FA67CD6D0C3CDB0A259660786430AB83EDA825A1554933CD97942B2BD68CE8CB19FDEA63BFDF7EE1A6AB07EBCCED49279DA4E1FDF77FFFF77859F8E8E3B75CF644A5F242EFF63F5A3DF6FA07FFF30B8343BB946B43CDCEB961DDF2AC3B6F3AD2159E1D091FAA868792D09CB1E99B973FF5C0A61BCE7A6EED93A1B57DA3FE58D21AED0A332A330280716B74B3CE21ACF1C6CA45F763C785DA3401A609BC20209A10FD9A6190BE80BBF861DC15CEDC762EDBD677886A02D6FCE4273F79DC71C7CDEA9BB16ACD9A9E997DAB57ADDA6ADB6DFF987B72E55AAD9CB63AC71A1B86A42FA4F342A5A3A3B66274A8B3AB9A8CD6BB0B9F20631E2D854A1A6A69A6155AB9D390649F5724EF9FAB242B92D68B633A53A50B2FBEF4B4D3CFE8CC347D536E8254D9CCFED9403FE7CF9FAF05A298864EAE18D1FAA7B900E4B151811F221419BB8B5FC57154433FA6DAA271B91FE84CFDEA6FFFF66FFFF33FFF537E33FE3D395E2D90BD13F20ABBEFBEFB77BEF31D683C9018245739BCF07AC6E84C1FD869E4929B4A119E25B9C81DF527C364A6479DFE7922D1C571DA63D07F029933000748249AC907D9AD95C32BCFCC9327D0826A71DFF18E77FCFBBFFF3BC6DF547941AA2CC713DAAFD6634FE5131C7DF4D15FFFFAD7350B1C5100F560F9F106C8EA60D611A82DE5FD55B0AF6DD3C508137F5F6B499C51D74728C4C07CCDFED2A54B8F3AEA285B01485E5D7F871D76904570E9A5978242F3DE0D13A24392D1546F6116692F7A4890EAC41C7C00F562F870C8CF157E68889C41BE63056957DA126DD27936A0DB2E2D76B10BB28C0F39F5D453172F5E1C0AB885FB54ECB2CB2EBBEDB6DB5468B3DECEEAD070D6D97C664FE7C0E0C8B1471E4A2AA2A3A70341D0189388CFA443AB99A7EB6B1DCB9E797EED6063C156DBBEF8E28A9191E12D36DFE4A9A79675768E17AB5F71C5159A583D3220A2879EFAC5F37F1CE9EC1C5D5B7A785579FEFDFF313BAD6DBBEC855F27B3FFEFD0EA376FBCC506032F0CCEEF9EF5AB5BDF189A5B271DA574E489306F41D7400843BB0E27CB4275A077C6685FABF4ECCA4CA083AD8A3B4FC0798716945970E491472E59B224669A6C8B0E3169EC1C204644FF5826EDAB4B2EB9E4E4934F36ED25C718650F4616E6060914631F62EAECA1C1C11298A29EEEE1A1A1193367AE5DB326C30D65E5C461A35A673A3622FF607E5FFF9A75ABA5DBE796136902A9E252481AA5ACEA583AA3D64A4A496D34698D24ADBAB4429AAC4BD3E74373559E434E5B19A545AD4A5BD0023A92BE14020A91076CF319EC06416A36869387617DDC0476435AB42F250B357D5C3E8E7284A209B07E4B169D8D61E04688DAB9384D2AC74EB20CD56B42F2F7BCE73DDFFDEE775DA285CFF127519E311F0CF11F349F1E9CE0A1F1A9D330C1FD7922D16E16843DC0BE6D9A8409D1B63628EA9F91B7708E4777A4D193D77D9AF50AFF0FB04316EE312D8F29F8F5271D27E97CBC07ED92D7BFFEF5B21F01B739AD64C6B178A7C6A6076CAB346D70EB09000332F408E6D85ED686B63FC8ABCD7B8A33C6981213C13688452491EBFD8CE7B1E77BE38D371E7AE8A18E59992C9EBC10EEADA58C154988AA67DB5EF8D16D894D04505C5E170A3A1DE7EEFC20615A9FA0BBAB03777278787483D9B356AE5CA57174D72AAB9B9DBA418000ABAF4FFF6D0D0E69D5BB4AEB86C7D25A476F68B464F0572BC990B675AD6BC905E75D7CF1C57A8ADB6FBF5D2209F34D9AEFB213CF5BF9E27FCDE90B1B6DF8E6E5CD8E77EEF7A63169C9DA9B9A61F55875DE8BC30B9F1F7CB652DBE0677FF8D663CB9FAECC19E95EB9D9F0B717AF1B4BFA3BC3586983758DE59271957A662F13EE2011423CC74F811C379B7A589FC431CE1887A2C08A5ECA21829C511828E9A0256B03E74132C3D29F7DF6D9341C051148DD1C05310C437B230B8EAF5EDDD79B37411BCD1A0074CFE81B92D552AB96EBAD72ABB969DFCC6478A85A2A971A235DAD524F8E316D6655DC59E55835A37CEA589B34D684AC5371BD15465BE5B5A1352497A2BFA7D94C870624A9935AB536D618EAEDEF1B19196A0C3775530D40228F2671FAA7BBB16A0636DA6823C235F00CBA7134C939FB04EEB7F5B6B7BD4DBEEC4D37DD142248E2C4571B5F902B8A9A456F5E87014281F9D121D26EA47041B682F96B755368DA0E3CF0C03BEEB843DB92D6750E0ABD9C8C715C35ADAFD14D64D75D77FDD5AF7EE57A607307FDC9AE242FFF954C417461EE0A7FE1AD6F7DABBC25537A58CE00B07CA5647F48062210F6759CA19CF4FB642BFFE29A00220A3D1EF24E537FD965979D7EFAE9FA4492E2FCF3CF8FE3B01ABD7945F00701967150CD9065CF40EF6559530A0BB420441889D80E62DE2194C6A271719DA77B5214E997BFFCE5C30F3F9C38B24EB5B623B4C3B66EE21AD4A4685DE44BD1051B296FF6A850C0CBE26A6A282D75419D96F3CE3B4F3333E93C1BB6AC67070561C915226D1767419C6433A46C9A9393C7DCB2BE5837DF7AFBC11F3F5053DCDBD53D2029561BEEE9AA69808D964E7B323C9AEA4DEF8CEE356B4766CC9AB7765596BCEC29A563AD46ABD23116CA192C265FFAEF7DEF7BAE5A3AE9A4933A9B8F35D70CF557C2AC991B3FBDB2F9D3C79FCD7BAF94C2A8E664C5F55FBB312D6F385C1F2A5566DEFEB57F1D1CDD72C582FEE537EFD7D337A3BC2EA4B519EBD2A172B53FD5DF6BABDB103BBCAC4D5D4FE728D0A42852BDB9FEFAEB8F39E618DAE6489D6841290F76DF12BB71E03D7C8C5D0862386912559E8F2F5367C7D8C868AD52EDC9F7DEDAB56B36D92423633FFDDCB3BF70DD756BD6AD9115D11C1AE9CF3ADA3437A874351BC3DD19A7907649D208CD56161FCA20B5C3A1B23A480D86A1244F1824A11EAA2DFD4F6B4C3E47D2CC93BDAD66476765646C441FD7CAE306816B1DF04ACF3DF75CE92DD7C1B8A79B85D744F9A59D298D0BE5B24177D30764CCA5188A601A6516849558B566D477DAF1710B77F3F3B8FF84F73676242D62B8E334387AE7097864B9C2123EB10B6E0C4F28921CAF963CB44CA06BB739B4EDB5831039EBACB3241239AD2ED983B67D1ADF6BFAFB120630A1CB9FC4566DB5D556E3013B9D04B9D8A63C455B4EFA4BAC5DE49D7166C83EEB5ED71BC729FB10D1C6BAB02D4E1CC1C34C60D1C97442B7E04334596D75C2AEB2E3FB311BD2341525F13AC5AF36EFB8337F51BF1737585FB870A1C404B16364877E85C6624ED079DE7CA624B24B08D4DD8068831DC97C90ED01F8A143A87B1911CCF1806C84CA0077108A03A6B1F11B1FEC97B3ABDCB03EE67F0D791C86BD4B1B2F97E3C5D549E8D471EEBFCEAE8191D1CEAEDEBBEEBD3BD4877AAB8D538F3DACD21C0EADE16D763B352DFD7CF9FDCF3C913CF2FF9DFDD0F09695A1C75FECEAD97AF5F0EFFBFA37942FD41C2CFDE09FAEE96E75F78419734637FFAF7BDEDFECF8FF42E957A5E1B995DA8BCDB19E5606A39F125BD57614BDB8714EDE0E25CD6343A444F54418A710DF6AD761EFBB125E3FD7B6049063C47D5B74D12E1D3EBE4F876194EE99A1979698E1614103F3C5C50430131FE638BA55CAB975097458F7BB2B0355F1382586484D2341B802C7E78D6F7CA32E4B439EB478F9E992A894D745B0A168E6E1445712714A23BB41B8D945B61163CBC900715A103B5F0D06046018D7411A58CD60728108D2178E3BEE38B911F8CA0B162C80E885D31A530091ECA1FB1019883645486D3662016E34A2EA98D2CC0389132C429456DCA6D0B3BAE5965B3EF4D043AF54B2CB28BCF9E69BE5C780B74C2272FB57F44AF33630EE5B1ED34E8C1763F33D9CD9E90B9A267DC5B6274BE82C6B88A2F9F104B9401CAB01AD4514DEFC716426390621D2D59477B9DD311055398FB7DC728B9EC71C93D34368A79AA964FDDE552EC1A7CBB16E21A9A16D014F211A8212D310DA1B9CA15FD99A46D4C59A802702CC40FA01AA3BFC7476B91EFFE8A38FBEFCF2CB6964666ABC5010B24A7F7FF18B5F8C7B1BB5098B693015D3CC03CB4494F9D8638F958920875DC6206147602728A152D406D60E16C73863C329559A21F9EE0FBE5F09CD5A523F64BFBD1AA343FD7D61CBB71D3663C69A994FCFFFC91FBF9EBEEEDA5F0FFC7CB3AE9ED0F1F4F0EA6D3BFB57D5474BB530E3D16F7E28A4F37358FC4898D37FE80187DD76E52F1AE9AF6774ECB07AF4771DDD6174F895ADEF549A80A0BF9EF780030E907380992F4B59EB0B5FACC39213AF89440B79756B69FD7622719E89E596ACF9E31FFF2871F0C4134F7046B8884CD42BAFBC123481D651C28B9F18DD60FEAE4935816CFC4B2FBD1498A00EC52EBBECF2DBDFFE964A08AA6758C7242A259D6ADD6D5D69A23418D93A787569F4726CCDF1E8364D40FACA8CE29A4C496DCDB0D42DA6031D25E3429F1095B3F9D526F2DCE936E42E1A886D861AF350B9EA5BE6DA638F3DA66F6A05DFF7BEF77DEB5BDFC282A10F0125A56465A1F5FFE8473FFAC31FFE50038307CC87DA2C843C8B790D4076D8E38FE1B671F8913A32BE6076DB57B46FB7D9661BF0E2E6A1712FE257741DB755D7CFB5251E7DF451891DC996A38E3A8A8E7B8943F6EEB0414E63AA38B5152F35DFC66960868C27150BDF221490647200C0EFDC772CF6D1BCAEFA82B68E36319079D4B89C179D1F079A1C2C2228847D6AA01896D4546AD327AACD788CCF70BC35E511D390DAE178BFF18BC7D750019310B5307C38DEDCA10041593DE09C029D8AABCF89EDD2094F737EE28927CA854403B15E8E41836F990A2FFC4A5FBA059012C3B7CC5F6666A7107117B3136C6BBCA4EDF4FDAEEEC1E1B1FBBEF7FDE191A1230EF9785F67256D0C9F73CC25FFF49B27FB367A60E6AA99DFF9E7EF3FBEFAF3A1F1D639E9666BD37A1A9E2A852DC6C26067A88D84F7D466FF7A6C706D18DBB16BDEE3C3CF6FDDDBF79BE1B150ABCF2DF7AE1A583B334956BD9CC7890F8C25757C5693885E82953580CFB28926DEDA871201E4E4718BE34AC6A9B067DAA548E7B8100151A2C585DF549F4BD01C74D0415A624CDA981AAB8D7ABE4D13E8875AFA18B8EC326083D989BE42E83D152C2D893863EC19C7CF159B177E33A94F001700C1DE382A6065690331CE37B43D176E935B55B719919A403D883EE771A820C1978A6D5910229A67A38FFC276C35A2F6FAA1FB97C4321D87C6641B2640244A118ABEBF08B18D37DE586B8A228C67155343EFF5AB3F2323ED54961E2D6E74F86744F559A9534E3945677CE9D2A56D4D64B3CBF9A8C7F801666AE2CBB23B9E3593D07184581854C2C4DA60D3A832D100AA0027783B7A24BE668CAD9CC810C94FB430D4D04E83C79F280B62147FDB764C8A72360DF5C8238FBCF6DA6B294FB78D1FD68F42F0092C25EED54318070912A2D21B9E8B1D1CF2569764F04211826BEB8AA76BF27D1CCFA4E0284728C776EB3411B089E779E21766E4EDAEE822A97F2E5AB4E8B6DB6E83C1D850719FEAB8FE05498A35373C3090E3E8CBB77DF5CE175E5CFEF4534FF67656D356A3525FF7BBE72AC3CD27BA06FA3AFB9FBFF1E6DF56E68E365F7831E96995C6B66A867ADA7AAAD6D71A5B3DA7AF6BDD68732CED098D553B84D2EF3479D56CAF6EB8EC9950EE78BE35F6B24EC29FD404EE4F27E1B2E79E7BDE73CF3D3A0B31FB6358BFAECA8CD6647490D471A6D1CE255B88E416AE9204930581AF6906887860041C48A171F1A97C02CE23FD67D8932C071D99F473B99577DC710729AE69D69DA3E7AE5378F0CEBD4DDC4E316423D604140F69245B6CB105FDD35D10F0BAD7BDEE57BFFA5588ECFDD853E155295EC42435C3F2A24E3EF9649D3ED2721C8A7815D8FF711D03B544BA9A070F5291D66088BB72D1A11383D23A8CAC0F1C366E46E21D1EB39423F1F506A882E3A8FC8AE78AE12D7114F7E5BF40A813C2625BC659E597FFC2B6234363240E763381962444BD0E607422063D55AE398DFA18E358699601E7009E2572DDC67FA9E594D0DF638F3DEEBBEF3E6D4AD82E61C2C228035FE5E49E215FB412B3FAD13F39218869C9AC254B961C7BECB1EEAF129720BE4C1931BD2640BBB09B91BCCE94C4A567F25AE47095F3B6ECAF7FFDEBFFF99FFF1911109B21B15BCDFC4012C991A00590DEC836B1DC7FED6B5FFBEB5FFFDAE62445CE9A81CD36DBEC98638EF9D4A73E45552D4C1E6DD189B4A01309936985692482D93260ECA1CA0FD59544743DBC08A9CBCA90FED351BFFFFEFBC9D994F30667B5AEEE030F3E3C6D654EEE33CF3EAD71F695BB5F1C6CFCF1999FCFE9EA5FB3EE8FDFFCC6FF3DF198C3BE7AED2DCF8D2C4FCA8DA60655EF96BF3736D2ECE808CDD1EE59B3179C72FA3E4B3EFBA9CED0FDE28ABE5618E89FD5B96A6045D2F8DF221D2C76F58CF41C85851FD304EF272DFA7AB6F226A95A627D4D0FFBDEF7BE573A830E1C219202B168338F059482FAD5BEFBEE7BF7DD776B8BEA9FDAFC5A4D5D41CEDF6F7EF39B90A36EBEFDED6FEBCA49DE4B07BE7734415C6CD8B6452181883DE018758DA36C885A9C656D7BD90C77DDDC44B6F336A367524DE044B10789835E5EBF3732C2A154B4F7887D0EFB049B6FBEF9E38F3F6E53929DA6A730EB1F8D220089C1EBEEB49C5690A3A1A7D0CED47BB89031406390180247E757E7CE25E25A1D2AF24CDA8890D405F5277D5F9AE96B5FFB1A1926D6F7F4D34FBFE28A2BDEF5AE777DEF7BDFC30E76537B84388FF34A77A94D464645AFF5F0F2727E6DEBBBF7DE7BFFF8C73F3615028F26E7E0A28B2ECAAA1C980E242C95B4346777CEB6ED650A33026A8058F046319100EC5BA6000C60795EF39AD7B0E9D1254EA8C6C862AB19779B627323DF59F2B4A8A3732713DD4BB2E6C0030F5CBC78F1F435BA713CB72DCB1A268B0E8110258F6FD8A28128A13001B4037EF6B39FE1ECDBF621B4473AAB0DCFEE24049B5EEFB7DB6EBBDFFFFEF74E426A2DB404EC2114B33D2A8251963E0B162C905638E79C7326C6C1DBCC9089EECBC417D121DC76CA7060ED264466D44D2874A7A41BED91F58C04F434DAACD87DE50B69121AF5D03F7BD6E1871D3967CE06799D7947A3B57ACDCAC1F99B2EF8C52F1F6A350667F7D6FEF9875F5FBE7CB051DF36A9BDD01CEBA9CE783A1D9D3F38F674ADB549A99C36926737EC7BC373AB1E0E61ED669BEE78C6B9071D7BE299A1DE9F2493F3B04FCC18B7A53A637DC94E76515828CC491F36AEC69E7CF7BBDFFDD39FFE94AF8143D7F683E1CE385D6F1E5FDF8D33436E99227AB027B431205AA7CB376D6611A3A4078D099E4613B8F8D68D1B097F9349D627BBEDB69B16E84FAEBBA310C4BECDB83E1150175BF1934687426E90D1CAD11A51E3A4472979173029A67F68530649C189CBD5F42C4F3EF9A49CB6FDF6DBEFB2CB2ED39FCE3CF3CC4B2EB904111CA2C0720CD3080584D418741415ED2838564EF5D9D87753745D47DB7EAFBDF6FAE637BFA9BB7FFEF39F3FEBACB3C8DE6FBFFDF6DAE77AA3332BE3C0F4797ADEB81C9D9160A5E958EDB2CB2E0F3CF0C09F57AFD006C7FAF3EA0C2C1624C73442D418223A13E65801C80B6354A657382C1895BD06C83BEFEF52CC508079D08AAC07D008537751114A6D0BE29EE48CAE7CD04107DD7AEBADD2D53A720E9339EB6298309E2677018D931434CB930EDE964E1BA866AA8CB129316860EBBEA3B83E46501858C2E4E254C68990B844DEFF4499E13D948AB6ABA65ED1F196F4F9C10F7E8025E2760B0E17B87522F8165BEB26E4B073E633EC37D34804581C1C94A48EDAA1DE367460CC9A12E359F59ABB41C6BD31B07658E6EFC7F73F50F3BDDD0EDBAF185AB5E9CC9E271E7961D6C632B1970DAF7E78AC3E70C77DDF4B1AA1D29AD9086B2AE9868DCAF36963E3903C1B9290B4BABABB1BA56A3AB866839EBEA175236B6AADDE9034EBCDC9E3DD71BC3E162E610A4D000D0E3122B42F3890B84903EB18F79920C9C61EF6B463D3B0C4DE4E6498A45C59562E486D0DF125D910328FDC1E032FDEC14F0785A78A0EA133CCBCADDF6EBDF5D692652C048F10372499BE733ABB0841C34F386EB17E8D53C71335C1C2850B39081FFDE847E5E3CA8AD74824047FF7BBDFC9F69430C55C68A3078FD156962431DFBBE3A5D8A91A9E6197A81997BFC56ACC5C0E21074AC22FBBF3CE3BCBE46AE5CDF2B81D150CC81F6C2F7EA89153401E8A789D5B12317843639CFD769C163B980724EE24F90B2FCE2B92E0EC3153338502D6380D0DC1A42FDDDD1DA8E080C2F838FEF8E351AE09FB12A9040A8AB6F2D3E81CF43C009E0B2FBCF0BAEBAE7BECB1C75CA91F0A242261561658328BC5731EC60FD3E6CC720875D234F5049D6356556D0252B20C185751F7F5F273C7693A5420A69BEB372645464F8A22D5549C74D249575F7DB5F1E6F65A78041779315418EE2020B288E7503115EC1E84350709C161E9E3F09ACD0AA305C890E367906070228B58E7444D405228D601B16537D5E23251871D76D80D37DCE07E15984E64C293A88F36B6155B420FAE9B66A66EAD9C6A8E9B69B5A4F1C8746D2D5E7C9E3CD366C78285B3864AE9D870AD353C98AC5BFEF8687DF6F3CDBEFB6E5BDAD1154687B392AA66DA15CAC3D5AA0ED2E8461BCE7DEEF917CBE9BC52E70B756DC97A7F6F773A3834286530E9F84DFAE857FC68F112A309F07EF4A477DE7927101497E6B2D024A5A8D18B91E03135055B0E81CB125B8012477688C3DEAD3D4E5786A7795D282045675F626362524D70CD35D71C7BECB1C40D70D0F5FE94534E59B26409C155500C31F9D2A4F3E6322B93DD8609CD41278288A6F209743BDD5A6A405B172C1CD7218AEB7602B6D8622FD64332E2DE8371E09A692132866876F81415689506D28F26B2603164D14B13840288D846711A4F888F7C6CFB7AB96537A04B9CD5E774F01E779C37C41518F69F61CB87224664ECF89F811D22A567226E60E27E96AC83AF5B16948BFE59218F7CC9FCB14569A88F835F61FDDEB0210A4A22A11076FCC9510B9F52667CC1820552922C615C340BE0D7E52720EA50D42007583C0018A79F7EFAE5975F2E3D2FD701A71BB8370EA0C3F136D35C9D28134FA613D619EC1F3D3D5D85A5AF59CB224292B4BA02C6A0CF27135A6AB446C7465B212757E9EE19181AECEAC91C8534AFDE7C468EB96EA4F56B34B6DE6EBB47FEF0876C026BE3A765BC19D348AEDED20085DCC61B6F9C09CAFCAF18AA3E6C5657F80D68759DFF2BAFBCF2ED6F7FFBBFFFFBBF1B3425F313A27CFDCA12CD303BA439664E529053526148E095240437628164468D336697B446DDEBD60D757549138C2122F216EC61CEDCB92B5E7CB19A83BEB41FE40D69E337EAF59D76DEF97F1E78A08213D66CF6F6F50DAC5B77C8C1874010AF61900FD720A98F931BCE69A4109D5C9656FCC8238F94BC7BEB5BDFFAB39FFD0C4F4BDFD1939219E23B3C5DDC8E4257D6AE90B94D51159FA01D99071F7BAD3E8919C2CA9AC90CB63B349299446B57B3BE8D56736474247B163D75BDBEF1A69B3E9B872E3B24BB8786E66FBEF9D3CB9695CA890B79AC72D25C61190946FA0764378EA375462CE8B1A5B007D1139C05833DAC0C90C2C81DD62E2D3AEB4ECCF186A2D300FB0A64DA79E79DF7E94F7FBA55B43161F698222A31B133600470A502C7D3DC098CC186201932CB2FEB33C06F8E10B485A4903FEE0F8ADD3D77EE5C0D438E8E569FAD08F9849B48F35FA6C2DA85B470ECCD5820FAA65209DA429A014C617BF91671DAA8E42F495138938428C0149E9808F4698D793BFC219AC075D49EAB508017683162A413A920C0E5A801BA6D638B68BAB457750BFD332EE3685324A130296C682605D7E94BB5F75E096B4227096D3AB5BD8975EF05175CF0D9CF7E960DCD623BDB161BDAE9FA4864002A7BECB1C757BEF2157DB2DD76DBFD219795D84414DD982357CF80A26257A19951C8F00198F8856655FAED073FF8C1BBEEBACBF50D3C0B83D73692F7AAA9FCF8C73F0E50C4111E26306B12D562D9E84F909A27CEA9F54C9736B25F6DB8F146CB9E7EAA5C2A4B52D07EB04473E0D1D18C7BF2E9A767CE9E7DF8E1877FF9CB5F5EBB7A25A665A60092902BAC2C44363C38627C144475D68813E1281C392C028ACEC2FADD7DF7DB6FBF6F7CE31B34367AF4D147A9E3270F44F7349D900F7DE8439A7637A00E459A9DA033E1291C6D0A1DD1BEADF1DE9C3D3927526BC30D37A03F73230D9267B57C21D288425C6274F7DD77BFFFFEFBA514E76FBAA9C6A671683D5A8DA696400B04F8952DAE07A739C9ADB7DE8A25EE4256B68A3E71968854F65E7BEDF52FFFF22F3A9FF432E43A945C4853B2810F3DF4D06F7DEB5BF0136022C4D850DD54571E7F8AA8D1205F9BD199516A8F35EA3367CD7AFE85E7F3D07898357BF6AA952BBBA47B0606FAE7CCD137572E5F3E63D62C69E5CB3FB7D4DDA9D869992C6E85EEAE9722661C01AAD25C81112263DF36531BE411BBD8C21A59AC097FED6B5FFBDFFFFDDFAE7C8C53A06D3AC0250E9A2B0D80E1915A78DBDBDEF61FFFF11FA1E88A85CFA7EF6FBBEDB6B29D4DE1890AA17815A730CE45992C81BBC39318CFAD7EEEBC08C340CE72609D5A43821BCD4837313DBE8EF3FBDEF73EA2B2FAB9B6B724C6FBDFFFFEFBEEBB2F268F21518C1B44DC1209609334B6FA8917E155406C6ED4BF83BDCED2D94B4B724E2463B1DA246F7CAFA9CC730D5ECFFBCB5FFE9224071E033A350E01A545658F0F2977E468F3CFB3CE3AEB339FF98CAEA021699F9722AEC989A91DA319517B5CDF60F1F1F260A8E475C0741BE9ABDFFEF6B7C09CAD000C8430A4578396EB20CD461DE39E7BEEA9B59195ED09F26DDAE2B3FC93E96609636C00263F064552F408B43FF89AD7BCC6690372772ED08DF14EB6826D6D59B17945B1C47187F323245345B64F1959E048C8C0C04BF15648B0658F6793D6CC909D6F7BFBDBB37CE9DA358417FB66CE2857AB2F3CFB6C4DCA6C7878F6061B10C75F95D7F874F764915C870E25266A1DD5B1916CA577DB6DB77FFDD77FD587B2CECE39E71C4CF2363B9181612F1349E0D887A25A1B4D63B081775EDC510B2BCF612BDC2CA7B9305463FFCCA5553BEDB0F3FF3CF83F9572A5D16C6CB5E5561AB00EE1B3CF3D9B26AD79397DBCE6B7A7B77750673B375E86060737DA78639D2E29805A9E95C21E191B190D11ABA584B57C02ED3ACDAAD6514FF48FFFF88F0802221B202CCDD841660534611BA881CC3C8034668FFA61F65528C2296EADCA843027681D10842C31FEECC69BCC7FCF7BDE73DF77FF49A3CDC2AC49902A06B2B99AD45FA9D49FB72D1A1A581B474B0865341B2D34816EFA8E77BCE3073FF881DEC8C5B9F9E69BDD413E0E8C50C668961E3D23AD8788C51913198AC88611DB7A4F6B2688E9DB3A11C59A009333EE90C112C79C893AD1FA82D674EFBDF796B5C4AED3CE5CB468D13EFBEC23DB5CA7BE14B53EE60B080A8DFC84134EB8F6DA6B2D253CFF46D19065693340412E4DE44D61A874F80009CA0F012EC25F1D8AC80C3FC78EC64972793FA2D647893D1F631FCCF3C3309C21D861871D7EF7BBDF7153493C8D6AD75D77FDB77FFB37A2A371AA63A2D06F53F6B6EA74246912C7548488A98C16725A746A98354E4979FABD1B3D05B7A6B6AB8E09816860DF8E7C84099E81E3CF719C302D60FA291DEDD934F6A9B3E046DE1C71A2656135C5DC619E3B64EF95634CF144BFE42CE7FBC67EBA3390268C738B63972B7B243A24C71F7FFC75D75DA73F6946FA721E34C814B3A0445E5B1F72AA5BAC92B8342114D15B3C3B3C182B0C5B040C236E87A90126055414E2DC7138D0F050B3D5DC222F6487C26C9CAA37099D5D5D235A983C4292AD711EDC9764ECC84D6C962AF3D10020CE98495105A180C30E3B4C7631227E529FC034ABF8C8943EB2B381AB4334462D8C46ABB9E28463223115D80EF8E3B4DFB2F2962E40E0BA9B47618D663FDC70DE869AF9ECC137DFE289654F7475760D8F8C87803512E2E61CA45A47D7D8E868297726880B650FDBDFDFD951957466D54CF1FF810F7C40BB5FE3D4271ACFF7BFFF7D363DF68B5647F68E13B6AEB48020485B45B341E2C4BDA6350FB1A0A18B00C64D9CD6CBFF586A7393714CE7CD9DF3DCF3CFA5456087E847A6841A753D57E639A6E9BC3C4CA72DD591AB90500442CD2622D334A4810C279E99FE7BEAA9A75E73CD35F6FD6DA9B4250F80A92405AF2466294E1B61135D961A5176BBE68DD434E54E6CE0890001E607B1A809D14FD8333022404AC189BBE5965B162F5E0C1E84CC01BA1907AB55F4F36873F789CD82DC3795106FD29C7C9E101CFE81BE2C83ECB1C71EE349F930148C35640DCD3CAF275DBA74A94E3D95D8EC014C34DE1318604B3B695C2A5EAD82D0DE9930261C1EFB56C18D8A5D4B7ED57941AC5BD31CF08971C36D42D26FACE0D388B080EBBB5408E917A71E35090B172E945481CF2644E5DFA65AA0B6EEE9A79FB6FE7658652AB5E4C214624D2441F199C617113BC8506283B1780C8B15B3E1A333F406BBD270782289783A5894D6786D993A0E00CF4C3A5B8343CEA2D908803824DAC6D86C088D0B7F628DAA379AC7471E792499822180B88A46A25BC3931C3B31C48ED61F6D29E605224F95C5D3478774FE3798331740822EA2CD9AE5C99BE394671A275D3957AD5C397FD34D316031528C9BCA7A8897324C141E1F1DC710F76D3E81ED47A4B3E90D4251B40C265ADB02DDE62E5D98BA2C8DF6779AF754D97AEBADE5997A56B510920EFA3C07777501C2239268BFB8B7670621236067DA823003F6F6751AD60D1A21E4688D6DB6DDFEE1871E9ABBC1061AEDB379BAA23FE7950AE9787C8F7A4B881249D9998589423CF2402122D2094585CA2EBBEC227FCE69BA647D123A20403A72644A352169D1409B1D4B0B5FC484245B28920D0E6E645AA43EA299951C47C319DF59EBECB05F257747EE8FECC4471E7E78669E2A8FE3FE8D1C815B4A4ACCADB696369BC6A9E7C2F76DCB69C7E52CB877A45B5947478DDC3FD26D64102BCC2A9845B70D9F6896A6055F7F88020EC43F61093520D5F38F660D79E5A02EEBFC6A8832BD56636EC8C56CB3994B05F521418C105166B2707101B6076FEC32A631C68189CB8CA7884FB7F3341A338F46CEDFEE4B58BF515A1C84E4FA7CA2F1B3C41ADED9679F0D9F075E6C4C791B7BCF13131231609D2DE1DA9436BC8CAEC323F3B5CD36DB4C529E7C95C6AF69D77B040877D47F75D6A4A43545FAB9213331F1866D778BDC58F270474FD7789E200E8121563872606FE15AA26E9058AD2EA1D9B9FDF6DBE10FD1970F38E00039F5CC1106720C90681B53EC5EE8D6F67921D406CC4E501ED1693B1DE3D485AC495EF6A52F6B9BEA986984343678E73BDFF9C31FFE502BDA061DC10B7197E0B4E889A6EBE423CF6C4F7982BFFDED6F91D75876434323B9E53BDCD39D91FF8C8E8D66FEFEF050474F6D546B993F3E11806C720732EEC9CF7DEE73279E78A2460B7D2919A18ECEAC4F8BCCC9240F476416F1B8699949A24FE62FF0FB2C410C0F887D02377D456CB9BB833E7FC73BDEF1A31FFD48C3D05F3515648C5D2BC4CE3671266E10D3A8F70B162C9069962123ABDD0383034948240567F4CD58BB4E9FE445B0A379C5BF642B8CD61A1252A0595FB0C582C79F785C932093EDB8E38FD3DDE5313CBEECE99979373A49C3FE1C962AB9A937B56A2215E22374EDB5D702D3A6638C06103781B186764C83E0D8DFFEEDDFDE7FFFFD780C36B8FC654011AE1A053EC05FE7CD9B2743415A04E72353931DBD2C2EEE826EBD7ACDEA6AA55A4F4765AAC82D1D1C18E8A8758C33ACD43AD6AC5B4BA84447A09A778824F65DAD758682553829E0D48D8C37AD1B91A7F5857917030B49D496D7B598E6430D55FB5326828B579913375286A910E2779287A8017080F171B3550123A99EF4B5AF7DAD4ECA0D37DC40D7DC187305B736CD50757D663E2D0880F1DEAC099CE50A05066FF3CD37D7C6439001858AB3050EBDB2C98904C264150AE683366E027D47CFAB23A6371A955302D8B6AE07A6A7ACBE70F1C5176B75502A982FB120E2657C011E4C4C4D8AF642CD10A831D12C9ACC91A836EED25819B455D71284777990C6A35B483EC88C78F0C107B1423C4E9F0E7CC17DF6D947024DEBEBF229BE307FFE7C4D1D851ABA3854956D819C787795D6273F0EEB03ED325B9ED02432252D00B9FC181C8B4613C3577D452D83064769F8873FFCE19FFFFCE70F3DF490C5565AD4B8C6CB1026E017750BD9E6DAEE92597BEEB9E79D77DE89A5630669C3390C678C7B1187A8041C83C834BC7122CE91225787CB82960B16050AB3C11013F4D8F22BE73F0C097650B3D524561E4A0D192A1DD59A1E4F322E6461A1D03FB37F646C94C8FBBDF7DEFBFEF7BF3FB2AD4A84144A7922244325E663EEEF1FEF3FEC9A007B8E936A021F95B8D112CF0EA096AAEF91FCC5FEA3FC9292CBA468F3C99549CEEBA6D204C45E1AF5807091269004E44DA60B47D77575770E0F8D7476758C0C8F66BCC7B5BCDD7477A62DA406F21E36999CFAFA9D5FFFE8473F2A537B46EEA74BE025B0DBCADDD1AE688D85C229D4E0B57DBDDF58598C1AF4BDE4208483660E671393D093D0D44FE867D2066728E71DEDB5AFC0E9D33F8E373A3FB88C84238606B3077C696F27A52C8193BD6B68BDAAD20152C91A76B3552D67D2AAA32BCB76701C6EBBEDB6830F3EB860EB7B2EB05E189E0590376D8D875E8957304888CFD896E9FA8502FCD325510E98A0F84178335738DF3C2CE92897319A7B7CA226B0210CA74828A225188C268F33F339D45818F86EB36AF07E88788A4A45134AAE8F89CDD56AB9E724051C8AF23AD21BBAC599679E79FDF5D76BB9E5A482D0D571D06F354E3D29142C0CE6E4934FBEF2CA2BC903B555AEA0236FBDF55699A4DED5244E0884BAF42F76F7F17E0E3CF0C06F7CE31B0CC04D78783436218937CA6635249D146DB90F7EF0835FFDEA57CDA01726F804067AB90502F631FA1B20462862B6CC98DD05B4821BDAE83B700471049893F1DD9BAFD469A79DA699D175D03D161AB1D3691DDC768826C91338DEE28C048C98F6E062AE3ACA32ED8968ACFA39E97EC78E4254499B4EC0B98788975F3B46DAFEE8A38F9632C7C443F497F2969031B93C2E703C18975F4A2EE8CBF616090E72BBB68CBCE192CC42186FB154721571FC083DDD7D834383E3D25F4F97FB073293D35A5A971559CDD47BAB5EDF74FEA64F3F350E22825EDB016BB648577756BF3E1AD783E4009BC181B540F7A8AA8B4BB7DA5EEC63C27C566C863037C7B13DE3D1339F40D36384C2CD8F6F614512F9959559FD39FEBA954BE75A87DCA0ECF15B23DD3D1D4383A3956AD2A8A75DDD3993E058ABBF6FE69AB56BFA7AFBD60DACEBEDC9D398F94425E50CC521BF6706EC78F8C8B9263095298621A7C2DBCCDC8D3E870E376B62B55562CC4228DAA0C3D46DB47E29223B434FB856CB3473C524573A3B3A338468394FB88554FE41169B2E6765604939CBF1C89D968B94C5F186874A851B8EE56E368552B9FA92751CD93A7D7D3D2833E36142D4196922A68EBD4DA434448584A482395FFC15C8905BF184A81D3706699B2CE085D0E75CB010C475632B849BDA22498B8A8156D12A15B5E11631C616229BBEF8C52F1E71C4110EC7B1C7162F5E7CD55557A1A19DD820A08A7D4A03033DD778FFE77259D2EDF8E38FDF79E79D1F78E001B601A594F8673092126A0384465493BDED8816FD9A986D6482FD3052896E8D600FC6C1F45064B963BA21FC33E33526050E8522AC6D4D40A484C368D9E89DF0BEF7BD4F3E2E19113345A3CBE31B79578422AC44B362199AADA27B04EA27D604484E07A088F66B036B6E2FBAE8A297600E06239BE52DE62728458CA4AC373BD28518B286B41E6DD0A5F83531586F04882300867BA24BAD2D8C74264D6FBB387E4E1244FA500F76F9E597B303A4B709B485A213850D0110602C06F113CE0C19AA385E69BBC33862D6D255052C337B9D3DE40EC671D8DAECB59EA572D118846DD1F65C4E31B5D989A1A0096360445135E0458B165D71C515182C388C567E311938FD9E9804E43E302D8C20BE5989FA52C471674EBE25755A10A1E452723CD6B472D5B85920E59185C85BCD18C29B4625DCD3BCDA82B94941E50654EC939FFCE425975C8216071005B880D16A18AC9D8C260CCC5060CFE34D1E9B93F8E9AC235AC4297DE3DF71885DC4D4D697D4E1D734A22F65C0AC82057D9BE13F69122B1499000021443BFD8C4024E0AE6084694EC9E083E32E3AC86B9C510FD841512AAB4D241CA2349B4FB1D74E3F39E69863AEBDF6DAB85E37E60E88ED09E0822ECB37576E65420798389A47E49A334EE9282E17462B179707AFF7B690401C2C59B2E4F4D34F77D701842FE252CFF8EE77BFFBEFFFFEEF4F3DF55492D8F4714C8B3A1BE3BB08B5E9BD2E45EF399B5969C10810A21E32F152A605ED8D06499794CB2EBBEC9C73CE891DB289AFF8E7048B482B86A283824F9F21B9EE636854CB19679CB174E95254AF31F4965D063E21EE40573309D44E7116B09380F38EEF51D7F11AB113472762B16E0A27D9381A3DCFAF89A0D81D3C93E5053A10591057BB58973A9D827988B8844C4D13A46B920C490B9AAA302149C5EC68DB690C92FEFA891E8CB8B03B54608EB9138E036DB823543081D54B8B4ED32E991947C2D46AF2610F39E410BE0387ADBFCF4F5854DD0813D542907FC6505FEFAA52413AD46618C6600FFFD54684A6DD9B23F634B7DF7EFB471E79C465356C8865CB96C1746DEE2330D70814FCFD1809E7E735CBA34CBCA38E3AAA1435C3713420F3CBCA15D2D7BCE4198C6BBB22F21BAF544C3035716B85084B132B45F7B6656CDAD01A36611F36378A0189DF2CDA28B91E98A315C7DF90D4168BA843CDE4E73FFFF9C30F3FDC09246F096B1AAC25D2D7566FE06E9DEE9A6629E3874D26031D7200350C4DB8CD4FDAD0D3293329A84675478A9208937A9E3D06A20A7A0489090D98183A211DA682EF1B69131F4F04822964744764AEB90330656475699BA18DC8458582883766EA4D22AA8C899AC0EE29A009EAA462FABF56C1FD17727FEEE0830F9604E4E46AD107F217C294C815F306C1A5F6BC159EAB73436EDB41DBA7FD43C6487FD55D7EFFFBDFC73EA8218EC9045A24EF589F147E05B5DAF4B5C449444E85D2D5CF4F39E5942F7CE10BA4859D9501C8605A8E52C44F73F2C927CBFE83AD47DF2164241187872A597FD34D371D76D861C8615D2AA63A0E45B137BC3E9A8DACED920B4A590013CCC5E7337E0047AF6C084CFAB2751017CBD935333CDC51B671B152AD822771BB2E2BDB58121904C66CBA61005DDDF585B7BCE52D3FFCE10F39F6E0976293E48E3BEED86FBFFD600906C109798B130FFC13290F43990640CD7AABE843690DE707B447157322926347235AF424059DD154E2A06DDFC49A004BD0A902E41A400B9D96BDF6DAEBEEBBEFD6D2EA43976B5A9CDD75D75D1FFEF087895A62597B0C31E48E63CC99D45DDC89A9B43EFDDCF8866E36B3F6B9F5B16AA54AF8785C7C34EADEF1AD88BD7C7A425DEF461F3C669845C7EF2163F99EF7BCE7A73FFD29B93E07D6CB053BFA97BEF4A5830E3A0895309EF6587FB1CC7D96165D28F0A5DC4C31761DDC03A32DF1EE6809C598DE996D154C13C5C7F44B4F865CCB77F6D9675F73CD359A52085ABCD6941D68436A48407126BE30A8B5D53FF6B18F61A8E901650E6B7A217674996B5B0831440E191B00F742871D15A883A99BDADD84FEC4609E1D77DC51E6972EA8EF13916057B44D881F1FBCAC5CB7B7BDED6DDFFDEE77755FCA7A1120E60DE576E830DDE5E69B6F3EE28823F485DD77DFFDE73FFFB91E04DDC019BCE8A28B162F5ECC83A0243403B20EA5622FBCF042668C0B3A5DCC0FC1C519B5614D10D62FD18A1F81600BD69ED3246F7CE31B7FF4A31F4D73A2DB9C42EF43F742604F1E7DF4D1F2831DC106986B7619278DF012CCC767EA1DCCFF10396D9A675DBFAD10671C57ED1D601B2444DD253D62CB23843831FA90BB69A170AE5D436020813B2EC5AD741D6A888FBDF71FD0111EE0CA2BAF3CEBACB33028DA08DC3D83CE256AF6B527306D205DE8CD5F66CCD6E79A085D0DB35D6B06864116B4BC45C77C1C2332E2CA520371D3A6028DD397494EB6D9D5F36951F08519D5883AB55A8E7091893B6C62163114D12156CAD69CB53D6B8F73AD75D146A1925EFFD484E89F74FB81419E8BF0442EADB4207044C2E932373D371F4E52109DEBF03FF0C003DE395867561553812BDA5E4C722C28B19550CF887240D30CD5EA5F1F82532030A80797C7F6F0C30FE32D69F2B53A0E033A046A9560896F881AEFF9103FB55C340931FAD6F95EBC1CB6C4C488FF9F5CD0892FFFD0540D2EA4025FCF604CEA3E5565937EFB8637BCE197BFFCE59E7BEE79EFBDF73AC11672F748D7A13C1B0563DFDA8FDC2A085A286ED0D7627E30542CA49EDCCBD25347CC4DE727729A4EDC09D89D1C9F071F7C10CDCD23CBEC95F9AFC7A4623C297A476BF9A4066411BB3444B3F1894F7C02C6502E2BD5E502BD361104AECC0B41EE8D0D568EBAF43021B8B07154D37E9EA370AE8522BBA0F7DA9C14D34DBABE939E7AE7143179B587352D7273F96BDCA9C674171AF379E79D27DD269B40B77EFAE9A7E324B9C538EFDD6F3114FD89172C58F0C8238F68A85A44DD2E715A159B97C87569FDF67EB126306AD598BFB0BEADE7B0BBAC926DB7DDF6273FF909AE3D6A40BB107D535ABFDB5F7C7E208AD18B7DE64DEC3DEA54953E01D81EF74B41C6C9E4D1C695B090F920D54AE4CABB199881C5819601D4B9DB21386B64A7D2E9656D3256884700BDAEFDBACB2EBBC8BB04CB456C946570C546ABA02D7416DDB6C0CBD704A5824899F0BDCD706C2BF894F4F81A924ED139E79C034ED71C76F7DC738F4483850BCDCEECC1F08CDC820008593502A9EE3F1122549C46224DF0EB5FFF9A1C662C52BD615CFA388D4FC0AFE20094AB671D3335D0904FB4F4501A5C7DF5D58B162D42258340D5AF6EBCF146C90B1B0AB4A824F0552EBA04DBAFC7D8345C9563E39026DA48DF916CD57E36F1AD0D110736DBC2CA7E9C57A409E2661BBAAC9E8BB027415E3060E5A265B9CF4E9B7C490BB2102046F20C64715348C138E3224A6A2D8DDCB7730C2AA93F7FC9D2279668D787DE4D2E4A076468AF313698CA516FB2364D106B4DF60CCE9FF6705BB98056D00DC29CEDD3B4481C697E8C3DA505AC1B095090A5DFD2945422C5A40BD661ACBEFFEA07744F3A33C22613B812084DC3A60CCE4A72EF831FFCE0E5975F3E8DA66FDB1269440F1772B6050DDBF51658CC3E5CD67FDABDB68D506058D877DF7DF73FFCC33FE0C8121AD2C21D77DC7137DC70837E8890B7EB6F9E9284888A39D65DE445E860A28462AEB553CF3DF75CD9EC1AAEBC122423E72A2E8B9754922D463532A149E4A30C072D5E5C6866E168CF2EE4A1435D194A45969919318912C74FE3D197A58477DD7557ED57A78F6C01918DA1A4882B487C132524A669796A43C608164B0A3DECA1871ECA352529324282DC8371DE4C8627F340DED59571CEA0B46DA0B07E1A6AAA575B7428AEACD116D4C835C364086CA4A779E5A45610E9BCCD36DBC892D50F499F26050D43887250B68243918E7368F2FAEBAFD7361A6F7117110C8C6FE224CB3FBFB87C79678EFDD02DAB79826770DD409CD161BD2C62267D4C075ED9E50E825160A5277AF4D14735C9DA5D18134C2C54E100459C70D31B5D445FD314E94F92AD74E50D79E82629EA66B823107BDD57F6C1BEFBEECB7808513A91532EDAC74BF138B58EAE226E46F4D65990F2FA3D20C3CB8E0EB1A5B540BA9AC60FE6F2D4534F95B62364CCAE8B0919E39CBCC58DBB68988C361449635D99FA9B33CE38E3820B2E2095355E211F99653406E7C81058437FD06027149979D31213BC728C51C70DC1CA5FDBF243B14F003384C6C3A85CDFA05503EEEC1A371421EB889B6E563556168B27564206C58108A0F2C0B00E4E04DF8C13B3A6BA69AECF815F8A3AF25A3FE15B0358D27DB15DE21E9613354188B80F90D7D89DDAAE1448850224C6A974ED3AFB8D2B98AF9B53C3F078705A41A445B9BB3E34F05A1FD20F391471F53DF6D8E3DBDFFE761222E65B6D740DC2BD1D26DDC13E03471D75D417BEF085B07E4B190AD6296C611C071F7CB08C11F4415BB7E8894693FE79CC31C7C89A33FE0CDE151223DEF1F18BA40A604AFBBF10B6E85962CE19824E95F53B0C3B77E4DC038A4ABFB5942788AC0B12A78E0FAD83E6488AB468DEC9EE47211BD7C5C9B4DA0B7F56C698424D7B4BE85748D9C030D8C03738386E17A1F38CB505E6DAE49D5415C4358AB48AD5D5F4DF1830D3B670E56AC5649099AD4DEE2107E0978B86EFF687A6890E794EC0A85813F8B4639A983AD7B85B7EEED010162E916B94504CE6EED3CE1C3A18A89F6B0F13E1D4F59D3432DEC60208B9E3E8991386EE7418234FC214E6FF343E018D28ECF3F1A11C5C092CD7372505B687BF9A443A599FE59F84304161891863726C602613BA48968BFE2D084DE2AB9220A416ADD1D3A2EA886CB68E986B865B1123695C843455742896AADCDD15003EF5BA8E49C91C6E0AEB6396AEB9E69A134F3C114F9729620030326912E283E06DD0860B60CFD8770F51AB12BB806DFB19CDDD56393C8D85E77D1E26707183856D144DC09024B6C0084282044582EB2910FD76E6F465178B407022917EDA69A7C96A97906C83BDA1C37491134E38E1B2CB2E1B17405A69F9F83BEDB4D33FFDD33FC9AC7687F4892852BC4E503D7AA36F6A8FEA5C115D89E92D5DCBAADB3BB314724B5F6EBB0667051B4F4DA96004F3B4828489A199E67589BBC1385181D79FE4456444F089A81A6B4C6C013BA82D7BA389938038FAE8A36FBBED361319528A45CD3015868CD9A428EE6CDC165D4112F198385BCDA2ADA635013EDA2B4291B28F991F3D05A1701F8C187FE6C01AB4F504073C8D86023B7BF6B18F7DEC2B5FF98A134A1240706F00DA6915147EA1704D3217BB94D4C7C6BAB547070793822D352BA50EE378B050B0825B084E7A421CC6F1AE480AB0907782F37B6C2AFEE97D6582332699DF1A5DEA0727F273D249275D71C515AE5DDF7AEBAD1F7AE8A150245AAD00C879B68A4E189CC338F36CA7CA278587F5FA8629A24353CD43BA7E7758AC4283119816EC7D6B26BF8FD1D80E7CE1AC58EEE04F68EAA0E8C19E35F709AC3EBA979114508122EE594D9C7ECD8C5C8ACF7EF6B32649E687082956C111AD897CFA6DD1210D921E679C29068FFDEB56485E1494EEA73EF529B9E9341075CE8C363821420420CA1094CCA13DC8581F1014417F9039435CD8A20A51FBC2B854CDE15FD65DBFA2CE792A4D5F8ABAE4C6E10157ED59AAB8E60BC560D8AEFE79C00107DC74D34D717D1C726C9C18A6782E0B3AFE84C5CCD3817E2485694AA2977C764C421286C488E25804B93567B7318ECE3AEB2CED065CC2498FBA8965B8A6CE216E0B32C8D91BC60025AABE4C8C486B06D91CB4E6B6B89B45BB38B092C0220914B8D8D82D8D4204D82A15CD5AE9531A93AF79B1A9D1D06E7695475A947D1A260C0F22556F249CBDC6362BD2025D67A9818585294AEB2558F0B424D61694DBA0B7C214F903B62CB52A9602AD8230CAA9BFB6A03CE243A3D5B0ED3CC59928FD5CCE10FE7E5CEA6CA18621EC9A1749CF471E79C40906B0982869026EC48E911A7A4C902A80E249BC4B22138827CCC2B3C4E9B8B42853079B180AC8470C3943BEDB5A34773C45D7B83846C2585B932CCD565FC3192E551AD58E50190D834925B41AA1BFBB6FA8BEAED63167CD5047283D33B327748E740E8F964B616C755F3D24D530DA2A77F6A64375DD7E5EF7CC81A1D563A1D1DBD3FFE2E0F0F6BBECF8FB877F13EA4DB9A5A5566560681D68664D820606A0CBD8D6892FF7FF0911119B03BBC8B5B4A02423E0C9EC51EC62DA18073430B4F19FFCCD381F4E749B9889793E6C2633E1FC37293AE549891E7AE8A14810EB2DCE23FE25F4994077F0AA652F2E5AB4E8F2CB2FD7BA7096193C4280559344D6E9D09725A9DDC0DDE968A390D9E7F8C1EC497EC2AE606E5B05FBD09E7BEE79E38D3786C299331EDF87C5E971C054AFD67E8651C69906C3A34D82522A58375C6B6641D15653094619773FC94B6869023A952581F4E3FC1E78E0815FFBDAD75C8F825474031F0D9835CD524A210FEF800B0659CF20489912A97425B4EF67C405BBDCC58D1335013003C2D0A83B6C8A52699C998BAFC598277D5943321EC6C2FA4B5FFA921C1972771CE3B803AD2EAB19D47BA8DFC0594F0CCE96D627A90F51E13E3BD2AE37F785458E25D1F479011CFC39FDF4D3972E5DEA16CD1C30AC0C7DD99C9AB68BBFFEF5AF7FE4231FF182B9600D167E0BC46432063D7F18EB6F2D990E1E85249A374D29E10B1209F89BCDA85B4888BC602772992BE7C65962EE852462B9811568A8FADADE7BEF7DD75D77C988FEC31FFEE0AA542CF4B8158915F677BEF39DBDF6DACB6DE9B055694EA25922BA15F3F0D86137E06776FE7AF4D147ED18B11094A71AF916972B1B298F46E1C15D0896A5E33A2BBDB5DEFAD058524942877E9C0CAD190AF57252A9A78DAE39B3375CBDF2F14B967CE2B4C59FDCF4753B3EF5C707DF76F07E9DD5CE952FAEDA7CC3CDBF75DD1743A319D2FC0CAFC903D3A9ACE6D6576EFFF289271EBF72C59AAE4E99414D87D74A052B78DC807EE20BCE3B769D010B9A6742AC4C2980E63DF6D8E3BEFBEE8B03C7683B8C18AC5A5220ECD536CA1653152545650CB4DE243CF06291C85A71C8AE817582E9D095AFBAEAAA534F3D1515651E345D7FFFFDF7BFF7DE7B43CE7FE560E676DB6DA743CDB162F3EBEE1FFAD08724AA0C167094C951D3982A06D5620FCFD5649CE8D87372B1A71C7A5D90100A789052C43FC17EE0A18E3CF2C85B6EB9658B2DB67855F633FCA613B36213318A805C31DEF5432998A4E8360CC6EF6FFEE66FEEBEFB6EEF7947B426DD3C84FB9CFFB0C58038D23E3CFFFCF3B564F64D4D4297848847C84C8771D6DEA87C82B3CEA61AD481C8F0F7DBE417A82F2873312B4855DB2C85C092E8B6399FBDD88E7F618AD26FDDE2CCB84C3DB09650B3F6FBDFFF1EEC071E653C18F355989E3E2D10EB684193F5B3AE386B218A783A996CC7595FD611A5EC252EBC34AD3F0BE3D1E29411E03B2F7F2126C8E95BE9BAD06F2A4C11100292313288162E5CF8E0830F6AF381290652652D8B0341FD08A6A57150060EB2F46DCCAF3153555C278C172CE547779110D5F4BBA74A8CCD0F514B482D8D8E9C7C5BFE9946C51C71FAC1EFE3E3ADD9D3F19034915A92CED35E8717C48215F63DC265715DB4CD14762C9B79DCF10DD53463016C04A9BF0E19FDAD9056435AEB6ACD1BEED2591AD145DFF8F6F70D97075795566CFE9A6D9E5F99052E767DEDEBFFE7D7BFD961C1C2BE5AADA75CBAFA9473F4C55277576B6864ABF99B3FFEC813A114D252F98AABAE3AEBB4D371736156D0C849694C8314201547C8D160364C4888989C32D1A54C0DE96C41889A6272534E9CFE0A8B975E406FD10A1C402C36C25F7641E2A5216082BDE2881CCD0D015C002A058B0167A7D15F2E5B6B0B5CD0FA8930B26C4A6D0C9D087B09B10EC03F6063300F1057E01C1841E0048FFB373021FAD321871C72DD75D7391443FC20A6348E8DB9FFFD7E46FBC6668D1FC708469F7436645A5049863C3C03D37E2818A741A96CB3CD36127106A74C7C115D94C57CE5955762621A2106F2183A2F5DDCB0DA7161C5A7FA879CA3871F7ED8602CBC3C4CC2246A5A8BAD814CE74333994CAA091C4EE1524EADB057ECC39A1E968524F4C676C4888B217A7A1EC8E8A94D6F16EDD2901A7A90BFFBBBBFBBEDB6DBE2702D217B5FA15C34AD462B30C266D12982E0264A4BFF949C95C54DC024E64F36475E4CFF62221A142494B3AD9CC5C86DB263DDAE2587613FE4694C3D1405A5B1DC8F67D2841034BD623753ED295D2B23F1FEFBEF7FF2C9278DF49786B03E609BF2D4A4B958BBD89F43F46091E9706A7F9B98DA478ECC157AD1413052B8FEA70B23F54F6D62E927FD0AB24273C248B2EB797529BDE120C53A8F179BB854F081832ED775E4577DFBDBDF2664A49994D5A34B71593BF8C6591AA6ED5A07836A92B15AA5ABB4C1E6B31E7FEC898C89AE2ED7A0D2D33BA339501BEE7F6ADB83E7AF2C6DB566E59CFE4A6B76756874F59ABE5D5EAFA9D648DEFE96372F7FFAE98DE6CC9C37A367664F7757BDB7ABD13866BF8F77D5437D9D9CA7D9CB57ADAC74D71A4363EEED1C26C42D27BE580B1D75EC27E670871D7638E8A0832EBEF8E2185BD9466A822747BD24B5236DAC443A2CE87277F2B1631AF270B396491240A3A5851C7E8CED2DEB24CD1B3D9C11675E4D930240194BE339EEB5E5965BCA00C23642078CE30B8A1EDDEEE086D149B0256BF05714BBC4EC1706AAF27292996505A7EE183A817E8EA137B6532C243038EC6EF7F6AAEC67933CC6A72FFE84DEB1081942F1DB6FBFFD11471C71C61967907424EE129BA4DEB713EB33E26D00C2C59E8714894C5570103EBC8047D94BE3998672D1ED4B8B21674772448338F1C413972C59C2E82558755DAEC2BE692BBF42737A534ED4043AA5679E79E6D9679F2D512555D6C66F054C82F4E6073EF081DB6FBF3D1491B298658CB41253E0C4200B83754C211BDB1AD329B6294291F197B4C55B0C45C6863435EEB30B0B51A19A267D1F1A45D40347913320178C41EA221AB0E46FEC6543086AE3CE63768E119D0AF827E4CC10547EC5D5AD6D98A21085CBE23A2FDBECEEF685BC33802FC99B26923A8B539D8EE41A430C0D1144A11452C173A0CF0DD7C1F3D017425E0949602A44580E50BF9CE1B88C2B29D8C871FE90D404799D156845D4434EBD8422476D0E099B02A61BF2619308B33D885963FCB85701BF36B330466AFD1BF5BCF6CDDBFFDB0F7F5419286FD4B7F133EB9E6BE877BDE1AF4E99FF8B81A74375A372E3CDB3462BA515CFBE66C136CB72F35CA2AD3E3ABCE376DBB446D6CD9BD537323C90B666BC66ABCDCA6B567DF8EDFB2563A19A74943ACA23F5A1BEEE7113877EBC44A2CBEBF7148B5F60E15C19448C38C644D82695190138845E6FA1C82119BA73F2C927DF70C30D9AF937BCE10DFACECF7EF6336E213975CC31C75C70C105761C11FA318F6428228106B3C554953EBF3292E41330ED30E4105932F810CBC3C34B8B0240B2D3F8F78E37D852C6D3D522EA87139D6354A0CC146D423AED70AC082559FD84C2A92543A689D209752A940A2AB23564BCF8A7197BFE97FB39AC0F94B0E0061B4612186B18772DE69B33FBBABB3AC26FAF5BBB5BC6547902C221A42109E492CE5CBA74A9565C4FA10F891DB5D524273CA7D9BA613036BF8AEB57BFFCE52F1F77DC716E4A83F8C66B7359F9549A20444D0B8E3DF6585D4A0FA3670671EC6C891E128AB4984A2944C1194B227385B6E1A2281A42ED372774F446C4ECB6DB6E4FE6AFB855B2C57747D16791083EB2898AE550806DF0841CA772EAC9940CFACE9BDEF4261D3CB742433941CA24CD2A4B3606EFE3255C76D9657233F513CDAD556F980CC56B6003CE10B78ECB9E4D1E675033AD1734DB3C780CA525D014F7CDF08DB440ECBF72C163CEA1323B1B11003237C82F3A07C47FE2E4EB01657A1019A3DEC7268F1EFCE8A38F36657FDC80C89AC06140347A396257D5F7DD1D97026C6D714DBB642E6A00BC84DD4D8EF74B4DA3C28CB164F5BC85735E7C6C456FB3B316AA2B9275C9C6A176C0FC66CFD395AED0D99839F2C74DFB93058DB1E6686B6893991BEA61B525240436DD64A3CE72DADB5959B860F36679E6DA157F9CDBD19CDFB5E147DE7BE8EA6734B7CD5A4733A45536B0A6FDF39FFFBCA433057D6D3663FCC2463366C68C8D669C75D2BEAD7ACB4C41800BAD1A6FBAE9A6430E39C4EBCB22721E6FBCF146AA64D0EB5CED273FF9C95FFFF55F87095CC2A1A0A9D7D4C50C2B8462E0F542D7724269DE109F5C8FC188C950E4D560990D39C59E1E96B0093E41DBFC7897C674F4487CA301DDB88D426BF34DF165BEE600144F170355FFF7FB1978BA49947D8499F934E27075B6DF594C3F5729EA304819D079E79D77FCF1C7C728FFB6976306E42ACCB18890210665C112978C24B6404F3FFDF43BEEB8439F9A08DA681F4D10941AC6CF3AD480369BC6274045DBD8844DC8A91E385B00B61311A28C8BB3CDC4190A0988D3D803EB6D37EF459CD96B6EABDDE0134A821D118A6323AEFE4576A4056B0D1AD810EC10F5930B79A81466F338AF40B1052977FD9CA60844459907821EB817DE769FF9CC67CE3AEB2C4FDDA47506FE532C2ED9E264380CA3326F705A90AD6B0733C298F1D16839E78A58D3182310D39371607474F521C1199428D37EDA69A75D7DF5D5906779DDDD899EE0926B3B30D0F47379C4975E7A69581F8219229B0B85E7C826378DCD8578B42EF0892D893819C6C38EEB92191BAC185A1E4AA123E9AA8E760D86E174FEF0BC0F6CB466FBD1D18757858D251D43EDC5FE1D37DEE3A9A7D66EB2D5ECCA5A1DEE74467FBFD6BDA35ADE68EEECB191B55B6EB1C5D870326B76A33EF4DCE88AD1E3DE7F729030A955870656360BE14E67E04F7EF2939214C0FE263DC984E98D396EB3FEDC1B8EA66C5C137463C8CD381B5E206AC8226056F321F6204DBC2DBC88B9EB22102899CC20D6C1EEFF1C2257953D66449FBC0D1AF032E7871D76D86DB7DDE6A004C370B716538B7FFAD39F968E9454750575DB9CC47512AC9A44F345175D24DB54D2495796B5EA9C84014E2E48D63C68B321E56C1E395784D9B769DE55501777CCE47FB99F21D89F14471327365CA6079F20AB468539351CBAF5CE3BEFFCD0430F317B86D44FE5535E72C925175E78214C1BC652936320B28A7967143E4BAC2F8C2FA7DE697F906939FCF0C3BFF8C52F8622A12111E62EA9DA76C67259CFEB9FB69AC3143E414C5EC6D2B2E7084D683AF44FD0EE718A92C788C5C192254BCE3DF75C5237C473DCE1D38C954E677903C579275355B3D7C79B10ACDFF5C5E2C3A0668B42D7E587822ECA959C0ECC8588EBDC7422A8BD66C115BC78F1E2CB2FBF9CBD188A20C611471C71EDB5D772665C94DB56671017BC90FD835CC1615CD731781A0D7B48737E4A7DC7F538E5A28B7D0C6D262C03BF550C81F511F55666846C26360FEBE58576192450137D59C71E6D47151891E5134F3CF1AAABAE72349F97FFC9F89382C4DB82CFC184F1CE3F450F169B0870178628B9152F13D72F37D399F3672E7F61555775667DA8D2E81A4BDEDB99BCA1515EB72AEDE96F74374273A0323ABBBC6CBBD9AD8DE7CD4E43D78C15ABD66CB3CD765B6DB3757D74644E7F6FB5926C326F83DA50524F9FE9E81CE82ECD58FD68F9843D8FBD60F1394B979C3BDC2A39FFA9611C7CF0C1D75D771DDA68D293CCC9922891CE08110D7D52506FE96A8B162DBAE5965B74E2B410781B6941CEE1089BBDFC50043742C1298D856B38D3FEFBEF7FEBADB76201B818CD3134369B8BD1E2120123D9B1DF3186CA11DDAC49DAF982990B62FC37B034FC0982D7935258C7C69C7B4E90C00BEBF7B26D3BC548092684302938281B9A36D45C31F7AAEC67E98FA4E05477CA9D909419A4CF3FFFFCA54B971248E0BC3B76A4319C70C2093A14309869E44812276FA6AAD5C72728150D394CB41CA2C032FA8CD219FD55DF97384A0C2303F3AB21D2E9D8956C2C273FE301E2E6823EBA53D9383ECFB8637A1EBD4773021F2E15AD8E8C599ECA56D2C2436EE54C0E46906164BAA6CC901B6EB881B026765F356F36B26EED9A4AB972E08107DEF38F599AD14B4EA83DCE78B7BD185E8CCD90E6D71BCAF3080E1222B3C09D98E6D54B568F4C1827A900C81BC3C048682110A7D14C7686DEE5B704A6622B586BF4A10F7DE8CE3BEF74659929CB3B2BD5B5EBD62E3A71D18D37DFBCE6FF67ED3DC02D2BCBB3E17795DD4F9BDE1866863A54412C28F99078998089D1A0A18894DF51902245AA74104601214A110820214014810405D1608C9718EBA73475F2C1506660FACC99397DF7B5D67FBFEB3EEBE63DFB9C33F9727D6EBDE6DAECB3F75AEF7ACB53EFE77E868702A7284F9B4378277DEE4DECEEE43B24EC4CD872B709F3A02795B5280D8423017FD6CB4887A83E85AF35A99D4B5A1B93852CD99E9E7CB9189E5B1786673FFAE8A31F78E0016E00CB593BD37A0070DCAAB56A2ECCAD38EDD4EF7DEF7B24EA61004484ECAEABA192E06E138CE4213EBAA281A17AC1371FD8DFCCEA9AD90C460EF9DFAD8186E931C54AA5DE9F98B170D7C2AE0BDA1FDCDA6786776CDF73D785EF3F68BF2D6B5E3960B75DE77597F326194A92C15AA1BF156C8F76F4F435E7B6CDEE23734E3DF2335E3E196DD5E17318CFF7DAF17BDFF9AEE77FFF52336A55CAB6CE86C29AF1168A33D53D51070B259264C41861DA6D581C189465740775D4093955B19E6484CB6429B9CCA960909A0453AACD4CB266BC932D3CAD084F813255EA63FC918F7CE4DBDFFE3609CEE45B18C7F3E6F84583AA8189A56A27928EC05612AD936F463CDB6E2C6BB220324ED9709CB657C144913149357A7F92FD0C6949978E915B1773411F82C12B7145504BD926806962DF659E77675BF1525C81F1062F23BF125E71CA79E3D37148A43156B0717C7E5863C5D439D90BA82D99CFF19CCA722EA1EA2088FFC16808AA715DF50E09CE243B179810346D50D21E40F1B033916A9B27BFA00608D66421357CC3F3CF3F9F51303E249D0C3C1E9C869B6FBE99C8687BD8520361468F6DADE519EF984F1EFFE28B2FC2DB72F5BC9735919F72FC7A0F9F7AFDFAF57852E81B18656A21243A5257A374D494EACC70B4B4C7E5C40897C5C00EB58BB87CC9404208C41D77DC018F154F07C30AB29EE929FC2754CB99679E09C79077E7CEB3157983437112978AA5D3CF3C13AEFAF0E80896005FC6A528867CA79F9771C22C7EF622C88159BEBFFBBBBF7BE28927A8ABF062F5B84E971BBFD2FAD2E8E3A24389E2BD82AA6ADD25778447856380ED8C23D74E9B10D0ABA5DD80AFDD72CB2D175D74118557ABD1C4FFBA4AE5715A9E42FE431FFAD05B6FBD4584ABC2683C33C247AADE076AB6EE9B7CB91C8F56BD85B3E2839746A52037D66EF58DCC58BEB656EFAAB707F2B34CD034B9B7FE7C71654E6EAC366FFE9CC48BF7DE6FF9E25D17EE18DC3677DE9C52A9F0D6D631BF15148382976B4766A83532140E272B2FBCCE5BDF34F9B0D855A98D8DB51BCD7C1036A3B61706713BEAA8D461BF7866E6F1A70B2EB8001E30F5AE4A85950DE679C60F21F4D7AC59C34EB6C41AB92C7824F872A9504C56EECE88073E87ED89F9240684502B698229E5293F175C47711E4D3565C57BDEF39EE79E7B4E8D97A9BDA45A1407977F26E8A7C9CA77A67CF94EC73D3ED7A5975EEAF6DEEA005E7B13D91D4C166825C006EAEAC9279F544A86F5377FC2FDCC6A3582B679CA0E38E0803FFCE10F7C6AAC1AFC094C3E3636A34F726844CDC013210D21E8973484F2F9CCF64DE76BBA4813165D426F2D59B28491A8F17A02555431EA2299F88E77BCE3A5975E32599B8E1B6FBC116E291503DD2E8A92830F3E1806293C9D294740E425678A7017D21E901B92B7C35FBFF4A52F417C63583BF109A8C70402234F3D932D26F35B71710C0F73A7647277A56B746CB410E65AEDD6AC99B34C18D033A5B4ED48004C795F62C2940FA0123259D522539DF470B1489C493309002A714FA828BD69764F75250277986AE52FB9E4921B6EB8015FA031CE2DA57A056932712EB17C1A1A42C732B00D382B63D5B1D9736C7577BDD910E84D9B49BC75FC4F9D587EC8680C6E81C190DC543B847CB4DC8B3A3CFC1319DBE3ACC31A46CE0824B71907C9803EE31E2C1457DD934943196E0526E14F1C3923218C296396E1EDC5519B8FE939BCED5421CA12EB79958AB030BE46139A202C16DAB5FAEC43F6A92E9D5935EDB0DA6A079562A55E58F852A350A99706F24977B955361BDFB5DFAEA506FC8C7269F9FE0774CF9AB1EBEECBEAED68F5ABAFCEAEEC1E0E6FEF6D8E553C6FA8564FBA8AC519F9FF7AF5A5073F75079B60D79A8DF156A029D484F952BC81FE86BF484F4E8102D67F3022CC4210173824C494F6C995575E8913C4683E1685F48ED869871F7EF84F7EF213952FB84C732E2F102D308E6A279A40E9689346B1045B50B501D135C4346BAA494DCFE0890C231DBA246BF1A4003D6F319D44F332E264FC040254187F166FBAE25B1ACB6577D079E40C30F6CBC14037D4D2D79F643F4BFE709E61B890DBA79D75C16CA42F05C488BC8AD2BE78AAF2F1B2DE7914114CA731D4490B58915EB7E674CA7983F8229B2CBD6D3D9738593DFA1D4CB0104F42A24AF2CAB9201339264A1E92494210B1E9564E0A9F816C6A72577C9B2C0FC99D3AE575AEBDF65ACC028997F1F37BEFBDF794534E61C2872C8018335346F2A498191F1C1828168ACDC6F865692FF1CCD0C8F2774A082A8C10F79C9C1893DA3EDC2B500CF019556D38E56C2459EB2B82A9794894B86E679DE45460C1E00683572E25C6B7BEF5AD934E3A49D56DAC5A52F188CA6AF02F0C1CDBC6CB7854C09044F00CAAF59A5B684A77D0FDB9AA22E8EF2BE62B9B942916525A42FD4300B90FE8399418126AC40E6230F48AD82FD064947CCAA970C7B300CAA4C5D8C71C730C660CD7217837CE9AF40A7362E773D0E2D02AA5D2D66D5BF3B9BC9732E2A926880E78EC341BE14BE45F453F8C02AFE52571D29CF781F78CF6E61B4914C6A66CE6EF187C2D3FBF5DD9FBE581EA32D3FD46C9AB245B172D195BBCFB92A5A1F1F7D973CF5DE72F2C1572D4CDAFC5854ADCDFE70D5782AE755B5B8D7CD760B4CD1487FEF9B86F045152AFDA092FF7F48ED6AB5E62DAAD569846CFB1462CA450A717B695A7B676C1FE44BB33482DBADFE5CB97BFFCF2CB6410C10BB6141C62653BF180BBEFBEFB6BAFBD261CB371D87BB8A5F11398A53C984ACB898866CAB3EC391DAB5C6A6B93B145E916847EE0899805757D024587A451DA59EB4DC57FA63C8F91D3AE47B5A8262B89571598EB0774E02CE423EA3BEAE887D9FBCA57BEF2A7DACFF83ED697725515B810778A23511AA8B522440D79B44C0AE20AB2F69104B9C21EC5AF9813F29C2E9326C3DCB38E55C9A18E1745376786F3A00E1FE393E3F641A4C52D1C924BB0C7080F9509930C2A6F217673272CAC8494DD77DF7D10611A37A92E4961846975ABCCA67CB97D8FF9244AB21F71C411BFF8C52F34664C19B4026699D33D6B866D50571D1BF53D0B3EC9974B14C13212D9E07E273C1EB498F8D4A436A4E69748723BA8749C1C57FAD031E4CE935013E48934AE0CB926595B445E9338332E0DBEC09D819F7CF8C31F7EE69967589D60528C390B8CDDD24AD38EC651A729843936097BF525594DA98B94704343843CBBAC292C0771AB9998D83053D542B36E8B6740AD75445E82CFB54032095D2654E64578473EE9AF7FFD6B1A5978407E3E9EB13466C1FC055B36DBAFCD9E357BCBF6FEC58B17E316D4D65EC630415D2B6B54FC1FF87929CC57FDD8CC2ECD78CF816326EDC08C096F15C2D2E0586393C91F9C3FF8D966B3686A03B37ACBF3AB27618E766CDD74C2311F9F35BBA75A1DE99DD9F5FADAD7E705B30B8591D81B6E9AF25A4C89D7B7EECDD5BDA5C6BF7EE1B64ABE12E1609B10173729255D18270A7F90DB8E96292787101A763BE12E65040FA3A52660781D1BF2831FFC20763EC308F4B0D9C60EFFAA42556BC14417A50F3E6101A3385C199562A2CED504DEA4161AFC5C81668A5A061219EE6789BEE849B86A2E71AFC95AC4B0B85D6C310C647780C83B5E8C72E0EE3004EFB9E71E6A26EE1641C25C5B5ED003A901A1BA59D749440CC51759F4FF24FB39CC5A1373C002404ABE437F7335393F6E42D864FDB7B9AC2B56AC8063076D217C916E87EFE387071D74D08F7FFC636DF829E78DCE077E8547C6A5F0ABE38E3BEEE1871FD62A8F3760E3C293794DE00A2D6787B326FFDA957DD38D80478ED0208C1B3B9B9B987829FC89C06A8AD79DDB02C6716F29A76840B1B48FC9998EBE2B769D8686ED2CF76FCB85A969DC1A8F309A4C4F8AF56CCAFB7283F2F8A9CB072EC83EC6F40D99B62222A2E33ADA525C634CE9F1C71FFFED6F7FBBA3C04FE28F9F53FAF3AF24A2F8C217BEA0DE17B48519EEC7C6553B0121FF884FC094626CDB366FEEEEEAB64D5A1AF5C00F20E678472D2E7D2C2EA83FB17D101F5094EE5466AB56AD72FD3055D57778D37AA9E81A1BFA91471EC1D3611E98A3A3027305071B3FA913BAC938CF2116F1BC04FF30884403054F5A1D1D6BB69AEFD8FF006CB00D1B37044E05B8498318ACF79115AC24C1B88CF34CB7971FCB1BFFE06585DD16B4ABF556A3698AB9B85DCD57AAADB16589BF098B975FF47CD808E2EA48FDDEBC81182FE74CB3F18D271F2ECCEE7A65F39BA3517D8FAEB9B56864CDD6B7B635DA03F55C5FF7C26447757EA178DFB5D799AD43855692F372A3A6852BE762AF1CF949D9CA14D843D833B49D4F3FFDF4BBEFBE5BB2C3ADC3320E57A5100A9887FDF6DBEFA5975E524DAC1A28F2F1D59D4DE4B2AE90750BF1581F204D2044409235539ABCAC54544956A5CC5FA9D451DCC89FFEF4A75F78E10568F124239253FE8CB81A2969A1B74D96419DF23CF2E4329642497AEDB5D7C2AD1173A79BE99529A334861E842126EA0FEE3DC6F4FF84FB99078D7DCEB1BED8C9309B3EF5A94F3DF1C413D40A3AB9C4E3184771D2CF203406F20D7BC0C57CE32790E33FFDE94F594446065652F809C339F9E5E2BE4C5AB8CE1E8BE3FB81A29056EDB1C71EFBE8A38F92AB44B41B8431715E048F314EB6C7257899FC5280929B153BE3CE3BEF64E899A60D5D01EE21EAF6E93401E3981A123F219E0C033BEBACB3E0D9317C4C54C09A356BF0F943FFF4E0B1C71D3B7BC64C5B5F3732DC9512D81A8706990C74D3F56426719004933C3BA1D43192952B57623B1221E02288DDAD3919E0412DE267CD25A4565DD23D33510D0BB5255A957DF7DDF7AFFFFAAFBFFAD5AF72DBB148909635C40AE60413572E95ABB5EA9CB9B615EDC8D8A89C44C6D6285F64DC09F2E84E02B9577965B75CE38E3BEE209BD5E493C3C24BF6B3350E2701EE423C89CE956BBABA0FCEAA3186CEA914CF3EFBECEBAFBF3ECC5EEC4B35363AFAD8A38F1D77EC3126CD8850D3B38EDF458E6357B341AEE790F7D96769B77AFDC25018F51DF59EE19EB0588BA21A8E72E8F983C9C0C272DF609CCCA88FEC28CE6C7415FE4FFFF3A5726292D883D9E9E70BF566F3BC1B56BEBE7573EF82F95D8DA859339B37F78F997ACD4F211CA37EA15E88B66FFCC53F3F911F6AC012AEE73DEB1334A24A62C69C9A4446D25987C8F7B45865B0334BA9D88B0B70A04F4F2B84F64A94354C75E9C7291319B2A039CF7010298B45B2E656E474444D3BB034425E421BFDF18F7F547337C22B556C2CC75D14E8D2042AFA3BF0C00321C8789A20F52013B973A63C8F0C2C4B86FA591BC40EFFDBD5047C2388A3882E1873A3F86264E9861B6EB8FCF2CBFF24FB995A41A0127F2243304F2B578DEE02058B404126D3A6500918B30B27A314C2E34BC177B0124C396F02CB2928C43BAA7B8AA7A831CC13DC58A619B12BBA8D0A68DD9A4FB9843BC9F0A8D9375D303F6D668411D05190C714653DF03883935F44CAB3E6851127FC561E25D3B6A2CFE54FC66D1C9C964A17A343D6F4F0C74F91A66FB7DD76833C7DFAE9A7A7BCAFEC2339E0DA64DC52780A32B9AAF9498726E09652148E36027E78D965975D74D145BA14815842ACBA411EE5DB1540A052D4DA2BA0E70AD37146A920E3E384F115B53D073E81A78613FABBDFFD8E3B4F65B772A85DBA8E242B85D731E0F3326CEACE18F7A2A26D0266F869A308FCF5BCF3CE83EE140BA100634986FDF5B2EE7882882459D70721C775E402CF8F93381F8478BA30085B49AC0EA9C2ADEFBEFBEE586518A7D4E2B2AFED249BB82F0A07FD66CFD17F369C54F351CE6FB41BDDF9A4D65B296F4BC6BA43AC58657470DBEBAD575BA616FFD9A717BFFA5FAFD6075A8576696847A331D8BCE7D1EFAE59B7F13771BF3F5C18DB8493D234DD3B46E2C1309811D5FB76CDFB8F5FF1E54213ABD04E7ACA51BDEA457E4F648653D1A4DE236A9F293666933934507E50B7949B6EB89FDC3EC6A996126882348E784658782FBFFCB25B04236CA897150F1F71C411BFFAD5AF845D9E4E13B8E2D5CBAA76A0BDF0F3679E79063F219BACDB2FC1ADC2491C7269AD2F594CC8E6CBF15F72C925B0E77682861439BC688EF8435E5CE2BB03B5E1CA749A35E487370E7B18BB71A828F7FF713F271950D52DF87733F6AEAEC2368006BAE69A6BD42DC0E5F231194482507B5D81CA95B916715BED447E12D242039AA17E575C786EE311F5C072954C471F1FE1D0194FD0C2BC1D6F9A98A06794864D0429B34E3DF5D46F7FFBDB83030310CD98829151BB89C3F424337CA1782E5D10118988D41B6A0DC6296109260BDEA9BD9110086E6A051721484E285A3E234B88992B53999514A15BD1A3D9608AF5C20BCF271880F3363808210E93BF554CF121B3665A92C866AB3977CEDCADDBB6CE9C3173FB80B5D3E1A9E06A548DB4AAE85A3151C13A78EE6937702FF4B7F60721804C730919E96E2F6D7DFCBB64C9124C17D5B0C9BA20703E19B5834C6793106E77A5B0A4E085F5C627679C71C6EDB7DF6E176E6444F685483E60D3AD5FBF9E4FC77E670C50AAC3A8C91245720A19DD167989C96A0029F544CCC944BD68DF5DF22B932542498449B795139B648545E4C42593819B18EB3233467B070AEF307EAF658EEB090B71908CB49B7EEEF07CC5AB265B93E6F06EEDF91B9F5DDDBB6BB2F7D1F317EC5870E33F3C33AF111DF1E707FEA667BD5917F76DEB7AF765678C353636EBED7AAD1DB5ECAD7381F14C2B4EA09C663D7FC303734ADD5BEB23C5382996BB06A39AD788CC54003385B0244CD5C2850BE19AA202DE507970A2DC9A09CC393301986D8598F139B6192BCC295FB8C35D222F063A602590829FC3E071D05950BB63D92B9209534A2279C61D2117B7DFA412DDB409D84E874E39943A6B1D18CC119247A4E5EAA4C213A14A059386135CAC1DEBAB795F3CD739E79C035780EA53901E991AA4DBC190945710691281464AF28B558CB62FAFE06564361D785657045310E9D00938A7ED21103F1D97F14B25F12CAC6F7F7F2ECD19D8B4104E284E41ABB5DFFEFBAF82979606DCE0EC7775778FC24BAB8CB362B0D3F21B6FBC01778D49110CC0D2FB738EF6D9679F2F7EF18BA79C720A0B2544DE4DFB4B7C06AA4272230C5ED623694A4D807F19FC828CC0BAF2645AD84430CE0A1941F4A7117C6BB4C4D1A2342E8CC1616AF6DF7FFFA79E7A8A52927B45BCD966A24FD4613270C7487B33B02E3676EE48710D528642C03DF2C823D4DB8A2A08D12F1B59F461975E6AF19DA90886C5EDA7A1F9EDC562BED568DBE2A01DDBEFFFE6FD30E50606074AC552AD5EDB67DF7D5F7FFD75C510D5CB421B45BC5D8C990A9BA10A3E824618B593FD8E675496D53561B40484C0AAB49876045D0A2ED097BEF425218085B76118CA4F99F1B9E29ABA2BAEB80256AA443F7117EC0C831FE23B0F3EF820361259B4882C20C79698BDA9E72874B8403C81CCA44D0E0FCA1F5552874BE0C2C0F186305FC908E58A05223CEDB4D3BEFBDDEFC212247129AB700BA6AB51189DFBC19E516F386A987C0C931D06A7A90D984A5F172CFFE6487D91B77CFBF3C35E6F7B9FA3F7F8ED8DCF6CCF75CD894C756CD5A2D3FE7CF80F23C97F45BB7DF63868EA3068E70BCD5C3E365EAE15959BED4A3B82BDB9FDE55B1FE9098BC351BD109B5CB134EAB5CB915F6B35BD491588F2C64C56556E3296A1238F3CF2A73FFD29E7B0836EAB63F59544650BCF8F7EF4A3BFFDED6F313F2E470B2787F3A9303DD34BC26163183093A984BC8CF6913A983FE79ACA2F9FBCFD3A3401AECC6809A3BB5C445C9CED166834E03B279E78224E22634AF4EAE44F73C06A961538CDA275AC5CD7470217C79F949FB82066F2FBDFFF3E3EBFEEBAEBCE3FFF7CEE67EE4C55AB314A83F7B82F06F3A94F7DCAA48138D5D8D2B1A02989CB8A079081567A00536A022F6B22CF6A384E3E4F1966F26FFEE66F60251B8753D2B541F165D203DBA736090E6A3ED54384245114E3D61FFEF0877FFCE31F6FDCB001B214C2A1064111D8FA155E47DC186EBF1A3B63AE82E28CE3513FFFF9CFC34DD3E4724CD4190A6B1A2728E606E93AB602D3002A2CA4E76E8DFAFEED506B9EF1129310679DCFE561447FF4631FFBE52F7F49861C78F4D05D2E56952F25840516A6D4661512DB4249E5321E85FDB4EFBEFBBEF2CA2B4CC672C10287769F3B952639450FE6081BE5CA2BAFA4899A64140EE6ED9E0D7032180484EB035BC39289CEEC9BB565EB967466EDA3F1A1EC4948E36F2C2CA439C62DE2428919FBD6E093ACB5ACB8252825D5902FCEDA494E1954159E9A8DC2E988A8391F7B1AD3A337595F5F3E2904EBA5E94B7C35D2BEE4B2679C9AA754EDDB5C27C6C5AA13C2CC1BD180C0BF4C0BF3AF34D93A2A0AD5F9920242D5B07A52156118A79539360CCE89CB9FA1D0B0B622F51C63323857E79F79C915B75D1C2FAC4140CF5B5082453F3C5A0F0A6646CEAEE9986F4686CD8C60F6C08B75936BFEAFB3FEE2675FFCFE4060666032F2EB3F70D171BFFFC1AA91971BBBFD7F9F186E0C15FCB8E0B7FDA4D18CA3A6976BE7CA7158EC29F9AFDFF15877BE3CE24715D8158157F3DA9524578BDE56782E3847B84C7A818953938809C7DE16139722EF248F634D59EC90EF3262899F28A08417AB820E3DF4509C3293315011BCA4DD887F7FF2939F1C7EF8E1325155094CC3DFCFE8E2DFFDEE7743CDD0AE22B078279A00C790E96B5A24D42B7229F0271E40425AC990E1675DF9C4214AAE0885B219DBE1F1649D265759659E82B7C8CC67670BFC8965F9DCFC449A48F50659F30F6D459727436DB5385DC2BCA9644F699BC99A60F26975EBFE781C38CF849F3292418541BD0E296FFD42CFCC9D37CFDAD6D80069B62C4C0386D5B1B1F90B1658CE70FC3CE3D3B4C663FDED0630B829AE0375883FC125BAE79E7B6C11B1D8B789B4C12C271907963895942E27CF09275A79122585CC449FC038C8198595D4980D3A2A31198B5C5A13542C585C87F13DCE3B5791B24C6D6C5945E992D0054EC75457277594530B71C1091553B9C9B21D181884889752C532C1882B5021B93A40728AB627C39AF839D69EAE8CDA0F305A259641423CF973F6ED8354B55655D3C650BA525CA94D82351A855458877E205E789E3179636257571492E5851DF14D49494D8E106C1CA708B32888B963D8A7090FEEA2B3680332304DBFE1DA6BAFBDFCF2CB2BE90B9B9E5B9FB87526FFDD3C878C7738286C2AC743454F02F346674B9BC735E455B749A784D139E5B469EB89A64D382817F42203D62D633669F2C0520234BD286CECF317BB6D6D6FDC3E5CEF9A018959181A6CCC2C87D5C176D0ED55FDA4A75D1EF87DB57741E5C607AFFDDC0117D40353689A28D7FF89CB4EFDD1233FAA6FACEE7EDA07B6E7927CAB94AB77F963611CB5DAB9E1A43C9C94AAA5F61E6FDDF3DD52506C1683EE9637D6A8B7BC76A1EDB58309DC885A3B5939F4A8281166CD9A75DE79E7C1289135A09E5F8CAA992C07CBA9E3CF313938A158D0952B5732062D4272D12450D7D2DAC05DB09F6120737E1854A46942A79C611C26DEB9FF6920264EA3AA9D68028C878FC3251335349D7E76D7B8FDF6DB4518C75D8A2F60B9D9BDCBA49DE994FCE7D6C5E2629C6CC5A1FA2785A1DCE24437B6C6BA7DA6E8F15CB07B70903106FC099326FFB223F5681C6E707C190383C024E888F34978249D839D44873412A24589FDC5E958B162058E95C95C67997A148678EAE5CB97BFFAEAAB445DEB522C9F64883B5F2841865827208B0BD93DDFD73734B8439010B7530B56FC1FFEE11F6C1334712A2559B106B590FBFCD454B404199114AC48B6AADC5233D1456058030FF9FAEBAF9F7DF6D977DF7D378D8EC0F3E107D070A62618379FB329730397AC8B93EDC0757599095CC89DCB844595460D7FFAE9A73FF8E083649715085A892C575BE098E12E0C6ABBCFA24D2031C7FDA7D437CFE77DF7DD87F9E54A2B0778F5D557DF72CB2DB8A3FCFAF17ED39532B437B4792BB3144AAC6FA8D5C582D7CEDA992A48AAEDA5789D5074AE4A66A2FE8C33CEB8F3CE3BD952839B46ABA62C9108339856A2D097F3C4CDC05DCBF7244C1790CC4B89BDA01E2EB8E002DAF8DCB898107C08D7EA80030E80D855B08E8314EEC08D6EBB7C47EE8B0BA12A7CAD9A1BD7FED8C73EF68D6F7C23C9E0ED221CE55E82322633078D231C3F9CF93933176C1BDA64CA668F0FCCDF54DF5C4F4C313405BF38D0ACE71BF9DE193D556F241E88ABAB5A0BE7CEB8E9DE2FF744B9F77FE01325D377F98D970F26F547EEBBBFEE0F76FD65F7681F9EA7AFDC9ADFD59A9B6B553C180FF1682BA9E7E3CAC6077E60EB38F25E975FACD6EB719814DB5E2BF03BD480043A5D162F23D9C69211128A0717DBB3F0029861124F9A2CAFE876FB62192DA5392F485B5E49662FA3B122472F7384E49D3CF9E4939F7CF249D63A312583DD48234C7DB5F09DDB6EBB4D3B0AA375CBD727BF846E12C5A94492A0102CA767C010B7A65ABAEBAEBBB0B5F0A45FFDEA5789198539A5F40984F221871C02EF84AE673BEB412B1B4E614F5C9CECF7BC69478B0217D787F75FFBDAD7B075F9D4EAB488537CC51557B0598DC9FC547A154CA5B84DAB266B02CA43C1C479EEA40F088F66C193DBB25BA11796CD2B34AA7F29AB71C13DF75AFEEAEAD5B3E7CCC1F537A56980BE94DD2F178E77EDC565B91918A6934E1A2F12C1CF202FE039C26D7CE18517785D9C1C8C1B261B0F156D7F2FA5C9A637401B900928EEDDC946815BE5B4FFFEFB3FF7DC73E3B875FCEBF99C6228003F4580047E10E6738A45B20253320BE381EE952B40952074142951376CD8C03A350E18862A5785839754D501A08B6DB2BA01CA56668128732910E91DF3D46524D8E3A1D80EE1552C17EAD4A069CACEB60FADD7172E5AB46DCB56EE3CAC0ACF15110BE90A98729A2BB6DA0B7F4AAB79E3A6C503B05DADBB95B9D5585EC0D039FB57F018BB72D3CB2A62185893A7427809E324F80EF4162C9120E3B5C691F8E31FFF6826B5D57EEAA9A760B241DCE3DF279E78422DD1651E32EA42F7C53DE42249E553B02286DC1BCC46F0E8BA91469E16C1636046601DF186CD1BB00730B18C8DD2033369BF5C5761F84EA77233A92086C55C3433878646FCD08BBD68E961F336265BF27D264C72F5ED2D7F9129548BCDAA198BEB5E2DC86FAA3436D40E7CFFC1977DED93FFF9F397FD70269EE7A1FBBF35F6C65B957796ABFB8C2573D30860648276A5D05818561707F5451E4E7AE18D6D8F3DDB1C1B6B844921B1A44349684A6DBFE11BD727700169B031D914841167BABFEE2370C26927AA053763B69C4966EC71C2598DE139EC610CCBA87F3D4439842C89D878E2082FC10F713B1637D1F2A35455F882679F52520CE73BF1091415A091CE0B2A0648CD2DE34394F8ACFF60045258172508F18657C67FEEB5D75E3096C5FECF9026074C7BC5B53612A7E0DF647E277D4756817126B1F1B049E42EB3B887A833623DC9F68C0FA951FEECCFFEECE73FFFB9719216534687449B4A6782C152F23275D4964B270992C3B20FBC819059BA64E9DA37D7964B6568C7B33E7F163E5CB2EB92B56F6DE865F7F2560B3AC0F644A956F1268E1A4216610064F7214A1B4F67C591B4A21A4F8B7812973BFEF8E31F79E4119312C0617762C7E0CBCC9813B00F097BE491473EF3CC3384EBB9CA40D34DCC86F6046FE4A7DE405F6FDABFA55EDB6DD96E6FAC79A35828D61A6F7741E06F19B35ABA74E9FBDEF7BEFFF88FFF801C21DD0DEB6319301172603C283691CA42FC886AFE876784C85BBD7A3535301D1DB69C24F50745277E0869C8A428218CDC8269D668837AB17290C4681B2F9E917607133B34E4F7BCF9F3B76CDA2C1B9FA9B9F18DE8997C4A1644679FC1CA06D4AAF1784D6E7D2F659550208E9D952864B9C324463BA273F813C5018F96EBEAB9EE94BBF9C86AC7F002C6094F0E3E3BD506030BF832CE0006E0725C8BB49CAC672C8BE5E38800190BF7DEF7BEF797BFFC252681E44B3CC9975D76199C45669E45FBAA8479877B4E9405BD10B6E7A6BAE26E5195A9EF109253D0B0845B59877123B4A7BB3E5A8B93F6AEEF9D539D353C1037A21133BBD4BDC38C94ABB9D1ED2D33C378257F4E7BE1D697B79A7A73E9FF5ABCF68D75068711AAE02D2BFA677D608FED73B7CE9C536DE5DACD82819F6BDA5E585B5C692E2947F35BABDF8C7FBA0A0A7EC46F15CCB826804F00DBA7C38713E51F0D26ED1619B6EE5360079E7AEAA92CA0A138935C939171D34D375D7CF1C544E2F11029A2AD1C8378D71992669E53FE168E0C3FF19D36096ED74CA1E05502FDDF6A02933985494657C77DC85526C0011B861B1B4FEA7246090E8B2D8AFBEA821D794A951F9A898DDE145652B852C80B52C0BA1D6139CFB474E9169F76DA695FFFFAD74D563B26E3039340FCC585175E78C71D7788AC7727D121F6AC3DE288235E7CF1452A1B4DA6CB43ECA6284CC6504945D2DBDD333C320C356043CA6926F2B1471FFBE4273FD98A4C4F5A328563E0A59622F61EDE78A6FD36D7560A02A6B3454D6F833A7E460A6D26167CF30C73193871DA01EC5D237C21FE930685990645EA4A4C3DE1E245BB40A199143F0A21F2977FF9974F3FFDB4C58626E33725068E479A447D2C7FE34D79CE955D11EDC901071C000945B397A24D5E27ABFEE83FE23FA1579E7DF6594254B911F944EC46CD6CAAA4A43A197015E18ABEF8E2EF89642506941BDA66D2A2B4D6B7D1806E810EE0BF8562D1C40921DB49CA368A9D0727F7EAABAF6E9B848462C303035E7A42C669C5A2987E1C9F8292EE9C73CE81C4C45A1041814B710FE9B44C4691426E1E78E081DFFBDEF764740BF725882A29B2F15C34DED5A85232889D2F19D613E98D7C35CA143A4C471D7514A498BCEFC95F231C45A1FF952B579E77DE79E4A492CD284097CAF10878E0C984DAB8F5D65B99F2650F5BCE8F7C3BDA9B1210AED32635A0D2719C220FB669605A30D40F307DCBC2EA8E76B1511ADCD69A5B58DC68D782A5AD1DCDED959609EAC6CB994AEE1D737AF26FD5FF4FAED208D6997263D9A672BEBEAB176EF9833FDB330B4AEDBEA41DD64D3309DAA69498D1072A958D76BAC67CD31516C79AF5A410941A49DD9B00A6941AC0E00F3EF860F8E56E672E1A2B2E5E5351C1B3CE3AEBF1C71F67218B402F38E4D75F7F3DE6560CF56A81A9C32B69287C042D368620580FCFD48238EEE585BB057124F157C9DE74285233910C8E6149E2834F38E184471F7D9448273C239CD433CE388352C2649062F17DBA012549798147BC8CE28D97923F4A7E17F620C197796AFCB437C38F7EF42372DCBA06BBCABC459DC4B484BAADF1E0605434B3B8AFA48C95EC99AC095C8C3B7E75E28927DE7FFFFD0C153064C46DC9266E6EC9B192D298041BC509C2A1E1A1EEAEEE91518B10B55097288D7604367102F9D3C3321D1E041B8369D22160D644F5BC1C1B6330E3F63B6C64C850E621E9B3332645A5413E51B79C9DF84546B8B4D8EA022A0804E433ECBC7476ECA8B064100890E4EDC48E8F38E538E3FEB6DB3D6AFB69640076B1FD0D341B14B50D2585BAB568FD6D4BC8B151A543B148CC6F734EE9698AD5874838ED279638D098C5D59889EAE880EAA5643B747768E412E6983EE69B5E2678A5F9D2C3DD5223246EA0F17A28BB5FD92563A85CC611AAF7F5F50C0E0EDFF7CD6F42BE33F4C1A3D86102CB5AE4BDA6ABBD147E992BEDD249D1DDF1B36641120126C3054980F2EC71EF2A40E9B21C1BA7ED8F7148A5DCBA24DE5A03204B1ADD358A0C9E135A7F82A84EC79C35DD4B66573CB1B72239BD891065CC9DF57ACA859889566D21DFD568563DABA093B9FBCF492AC94832561FAE752DF2DACDC44F4C2117FA3695D28E3D63A727CCC52DA8EF24F4FC2831CD284872F9B058AA877BE5FC56BCF5CDA83452784F5F35DA6442E3174C7C999D2BAAEA206B27E065F544F890054DAEF4997A7DAD0B6D82102ACD8BDBC98D37DE78F595D7D8486629EF62FC495F8C6D3C77F662CC7FB53EEA199C1D2F3049105A1F6BB8D6320956B00D6734F0EC3F499C2E7AD0C8001C9E497CE7CEA9F5907E8095F732E5154F9F1976FFD3CB387F44D902D9F7AD6F7D8B747BC24148D5294FD951C42AF0251611FF897574E9FB25C17952848B65629C6CCF64F46209B46A895C496DB29E3CB40BD98A871D67F1A7152B563CFCF0C36EF7376E7897BF44C41B53022985441212043F878CA561472F8107077781C1873B323FC46A6A59A20C9C26514C0CE88E811DD94EB6D2C9B26665D41A0246FABE6FA679B941334F3116F73C9BAC04439D28689D3182C183B470E142A853CC02AC752800F5C1C0375961E4B64351A677DC45E8AAD433590FBF941057E8771881B18DB1589166C367A3A3B0CF9BB5DABC85BBB057BB4D67B169223413AE90C45498BC2C341374298727CCB2C988BC310C7E998FC96A7BE1F1DDB8A190AF3451858056188AF69967DECE90130A552804E2E6A3A74916D938B24975CC1CD4401A8082359422051B2D5E90D515B43BDCEE74DEC4D7746C1CEEAEE57960D08C351FF815240E513AFC3E4E144D6CEE7E5AF47CAFF42335C184BDE2F418E15F695CB00F3B6FCD181437A2DBC78DB34A1B0ACB74F8E187FFEC673F8332568EEE7FA40954A9243C315D280CC9C5DAABD1AEEA924C9674C93C1E7839B946AB96EBF177D9639735AFBCB5E0DD0BEB71BD59DA61719E51DA63C64B85A067FCC0CAC5B86D5302794C806F29E5622F847A28CF7CC7D01B6F95F65B38D6FF66F7E868ABBB161DD857886BEDAF26020D13CB20514520B9164815FB533E6F772FDCE2513C76CA2215B59BAD28B6508B2048E0595E70E1057BEEB1E7ABAFBDBACB2E0BD7AFB7794243C3CBC70C7879AB3F52182506EC055642A632DD3E9125CFC03783461B1362F079A60F30B761BA28F8A1FD534AD1947EEEA59A2CD95905D9949A80D83FFCEB0676F412B08D50516E2709E50E349A5E6E8E97871D22028BCE923AE60B31BDD75C73CD97BFFC65527589D85C77548C54FAD8B5DC1592A525A14A859B6FBEF9A28B2E625ADB64B5602E1DC074F3134C6CF4E27A3990EC787C8E10E626D1AEDCA82E576B5ABA186ACFD8A4D7E8786837C8E225FC957266D3C98DB757CA64AD8D191551F300DCF8B0C30E83EB44DBCD389073E20492ACBF3915FB789D5B6A8C43AC30926319482A7D038303811FA81D0ABB77F60F6DC33AE78BC52639A720EE31F51874324ECC446EA90B2FBC304EDB71ACDBB459801F55B1E39A7367CE58BB76AD4A39EEB8E30EB8961D951D8C3833E670F6D967C3FD64001A8FC9351E4F5DA45B96A9303CF5C68D1B396085B95DD01424488726E08496CA39F2C630356F320563392F4B9801A8D2529AEDACF317498669637E4284ACAAF577C36E727EA73B810C3532648F7FF120ECF44D0DC7E6C3CC67303A4CC12D2E1A57F4BBCC74AE26102E9307F5CE3BEF3CEDB4D3786B46F314DA16E48C263F5D071D5DCEB98846A6E37D9AEEC5268B02D53CFAE8A3C71E7BACFEC4061594200C72721E30483CB574BF3DB1D6618D31775DBD4598D026ADD55F7AC8B2ADA535F64445310F298C623E3C04556CDD03CC8FFD3F16238A2154FDAEAD85FE77ED6106EA73FDD933DADE2B4FFFC2CC32E6D825E57BB731128D6130516FD2A8081512D6087A71D9B265988A9DB3BB63D6532CA0F5696C72ABD55EB264C9EB6FC0FF8622C4A5B0EBEC35E7CDEFDBB26570EFBD9786F93A6442B1942FE5731E86DC6A4456B3C53B8647ECD9895A7655ADDC0F7CB81B493056B54B0FFD02DBBADD329895F11D0DED113390E567C38BCD4E5F93910B5EC64BAFE2762A45F5BC6252D7E53BE00683A8254D349D3F6E48F56030A903CAADE5C2C9E410507970A711364AB1C0BDAA069671465ACE9F2B638A2DF4B9CF7DEE861B6E2025140511230414CD6A354C05E09243748083B5B28C418930152FD8D384E1D17D113DFB29A79C42209C8BAE36EA04DC6E136C990B738CAC8CC70CDA2DDD482777324D72C7A80CD926147374AB1EF863D10910602B9C861B50C303903C408407784F9245AB574D9E24DD8DE644DA67AF95CACD142713A5C5F7B81A76B417546BD562A158CF3A0AFCDB0FFFEDAFFEEAAFE08977A7397D4C4139AD2383CD99EA8F1A45ED38CD4ED6F68B8911F50050241103C3D74833C2764E78040682B024DC5E7A51E88BAF83EA84412A2ED084A94CDFDC7EFBADE79E7B6E6AFE373809FC49ABD9ECEB4D1DDBA141BC214E77786478564669C7DD49BB463BC96475A7EE4E9A7245E9F952DE61721E78E001E83C2581D9ED800D0674659C40365D223A45CC651D9A800310E1920C13A1E2B801B467E451D18592252E1205B7385CA1BC9DB4A99A4EDC68CBA903142670E5CA95975D76197BFBB8D5D72C1782CCC5EA6B95E91C847E00AB79AC5ACB17C35AAB5DEC2AD4AB8DDC3B4DB92B1716C25684498BED64182F6E475E984FAC6360E9AC93D457E07AF424E18E5CA56BF9BB77FCEF4DF99FBF31DF2FBE951B28BD7B51FB375B39272CC765AA8CFAD5CBCAA0E42EAB7862AAE70DD22F584D853DEFA507269D4033776EDFA6CD834B97CE993D7BD6EF7EF7F241072FB516D2FC320CA13007B111B7DBF5C4BAA4891F782355AB094C4AE36F18DBF7421B3D6AA75889566BAC5A1F1B6D0C8DD4C7AA4D1CD95A8BD68A17F8B971D475D43649E4196FE7ABD3A109E80051CE62B72C5DBA14FA5B7C537ED6018DC69680E9F020718298BC24B8830149189A7FFCE31F69BCEAFB14A06CEDF7FDEF7FFFA31FFD28D34B34E4C5CD45C36E3A9FC0255F22AD1059254C8A1381DA265A1D278BB4DE8C8E72842E2E6832AF4647AAC0A49619BECFFA59D1EBF211442E30199425836CDF7DF725CCCF38E56FA2757245FFFF8DC3ED29FF43431B2F0676DD2FB94FA8D3CEA25C1C36CDBE99487B9BBDECDE9D337BCEB6FE6DA5A2F5DF87868720E813BFD5C81E3248F3906C3359C917C9B3469E062C64FFF67EBC692638008D7C5A48C26F16E1365AC6ED2EC6FD698DE2734A19BA6C340D5C0644CECB9E7BEEB97AF5EAE38E3BEE3BDFF90EB1287C2EF5AC800ABCE28A2BE091F0DC12A926861FE2FD3AD6D81B2709F1D8C3402169C688BC2C90072B939059E803CB0119B585EC14F7116FEA1EAA8E3CFC4ECE1EE42C06496D8DDBE129EEBEFB6E1C2722A6E5C912683877EE5CEC69C5D3944C36595A9EFFE9659D3A4CA68A148BA4ED4F838847420119022AD44D819A80E846FC96D1AAFF96A560BA17938154F9D237414636EEF21B2E58B0802A967951FCCBC0A06A4A71E34AB154AFD7423F2C964B43A3238562BE3EBB599E1356FA8A118E64924AE718F6A35DDF346A1247B1B1068C4D7DD918673D32CD6DA65099DD78BD59D9EA154CB0C30C4277C0649B4E13507E313F6C1CA6F4299FB790AFC036B2BC26BD3D3811955258ABB5FBFA4AB8D8C040F37DEFDBFFB0C3DEF78B5FFE7CE9D25DB12CAB5F7DB9A717672DCCE521FC71AF26F401B442AA1BD2798E33DFCEF3B9D05D05DBEAB5D1B69A60C7E0D8D6ADC3FDDB4746471AFD435613C43688142626ED0D9EB42D1D6B326D672A33153A96DCE026C39861E3114EADB6282C8CA2B4214E9DB60BC3983220B8EB68989ACC1D67D94494F538123D092351B802E696211776C9553DA6F204EEDEA6F4602F9A24E36B611B19FC7BEBADB79E70C2092C87A6634DFE09258D19D69FCEB2F19C6EB53CF2F8B9AAD8F805E6EA31B08B2FBEF8C61B6F7431207C4F100D34C14B2FBDA49E6B4ACDCA099319B7139FE0ED81E9FC330D80473DF2C823FFFDDFFF9D9E148904E8D188288ABF2406D96484DD2CCE26C84744D8A94F90A3D3877D9C4B5B4866731DA81AC0641CD1F62798CDEE1E26A8B113A133F879B5DE304EF09AE8B7347FDB304E1E86F16E6D3BCA6EA90493253F3806ED27319FF03AD085F84FEC57F9494CE330EEA16E731D9A403722A3863C4A8A2A9C413BF2385AB674193328CC2B942B2593F12530C02D9CAB99CABB9C4E13309F26C756905997138657667B673E05A76B9C002A9DD5E93481B469872620190BF304D20A4419E05E3818871E7AE8AF7EF52B9E0D97FA58CC45E259FC1F6902FA04CC0CB33ED6EDCDA216781C391FD00587F049AD1029970AB97CD468D66A56887CE3F66F5C71D595FD033B92A2C9CDF6BBE614BDEEA45D6825569E268CA804396B9063FDF03EF461E9045EECE70B413D2E0CFCFBD0410B971D7CFC27FEF1EF6FDDABD8FBE6587F90E1143BA2433CF018D889279EF8E4934F92E6849F4FF3BC41319F83AAC509C2CED87BF92E8B172DDAB869FDE24573214A162D5A10841088F981C11DAFBEFACAC848DAC7AD0B86147E046DD5B420C204DE5E3BF0DB36559CDE060B980B12E806ABDEB09FA1DE9204CEFBC0507DDBB6B16DFDD5919168A46AE0034056576B098E601CA532C356844E3D4ED9C21D9A80A07BB627314E40954749149B423373815CC267F5A871F3C9CC9CB9E1D920EDADEB65CDFEEEBCF3CE33CF3CD364BC00575D75D545175DE41E5BE18C4DD673CD753789A4222DDD641658D127AB672DAFE6FEDCDDB17C23E3529DDDD4D386405E5C841B588D9D4DD6D5CA8803CD2456CF6DDB56CCCA0B72A4A61819153BA18CE09DE49F264487184097DEA0DA64EC98FA80D05A7ADC9C11A2BC19F955AC569B40065AE410EEB38C0247F7D1471FFDD8C73EC6DB77003459B14D241CC1E942B286619E25B2621BCD76DEDB381F2915B799B0DC25ADBD381B38E3F8179ECD2DB7DCF2E52F7F992C75C2243CF5D4537FFBB77FAB8B70C939004115DDBBB81253F59614CA33FB663115FC9EF7BC079A9C9499561374955C6A4CE324A6B481DC54C17436A3FEC4C921FD8302622C801409A8D24752693228A6CC137859B9964E38A928F1FEFEFBEF872C334E3D01694A15FC658AD8385A1C36042684E8647C81B8E6FFA94FD0C18B491D238A11FC7BC71D777CFEF39F7773C5745E5D923BFBF8B0ED53B4734FD98211760C0D7ABEE99B3963B4BFDA2EB4CDCCA8302FC8CFF29302D400CEADF19BB6377494E6633105A19F8F6B71B3D6CC75ED52FB8FF5F9A2196D9905E5199B5AA3FE8C72EFA6A15A56C3DF9131664D25DEECB7DF7EAB56ADD278A6B5DD122FF0BD4231F09276B315CF9F577EFF61EFC5E6EF29976C562FAA2F5CB860C7C0D6EDDBB70D0CDA7C6CA952ECEBE9EEEDEBC24F023FC2179AF5B15A0DF2AB6EF95CACE0C383373DBF158410A9716B64086B1099A8DE4EC6C6A2A1D118D2A956374984630E2B301C1A4A76ECA80E8DD45324A0992E3A144CEC18A37D4B4D807D887F190E1571080BC72852B125C83F2A51CB1DC8181A4BA0E92274E45D29C7983E95716D321655069D7071FC90A821FA918A7FBA3E01E51504C24D37DD243DC4BCF1B265CB60FE32338A1584B8A0D52BF630BCC1E19508E22D4CE6A74A36BA3E90F83054FAC7EA364E08DD776F52BFA0309F5329B5FD792A3A2C5A348A65FE76F050EDFCE5C92B51908763C571C592400E3EF6D8631DED594C8697FAE77FFE674881246514912BA0CE47C938791656AE9A66010C2C970D1B36A50F6F91A22E570935245D1BD15DA991596ACA8D431B93AC096AB65DDE0611BAA503784F8DA5B836AB04B078F4C719AC50DC5CD0DD5D3232547C812B8D4BB14D28CF3097D90DE57B0ED0F39E7BEE39F9E4939560103E271F169AAD66215F808C5EB7DEF627EAEDE91D1A1E82E7AD9E442CDF3393323C6EF4693A4D80C168BAF80991E39C5B8CEDCA2BAFBCFCF2CBE98449B273AE64554D4E4CB9184D690206B83903F48ED942DDD5D02603F61024C3F0111FAD830449D0D5FF912630593F038A12C61928E8D50D5B64E3BC91188798C11E7783CAE5A8D52EE4824615423B5F6B3469F376457D7533D6CEB5CC4253DAC5F85D1E35461EC21236763A25F95C908F0BA383D5E60E6336E64DAB596AFB79130C05ADA0528C86EB4BF7D963EDFF79CD9B0A454A37C877FA76999DF6EA9AD967F182589F05F3BB61E91F76D8BB7B7ACA9E9F84894D06CC9A3573EBB68D38FE5BB66EDCB66D0B16B3D295EF9BD13363464FA59CCFE5F1408D5A6DB45A1B4D5AE39C3F90F17152B38A2168F9011ED4E286F0688DC8D45BA651F71AED42D40ABDA43BF0BADA516570D06CDA3CBC79CB8E81E1A106ACA0F87FA60964551C73CC31102912B86E5F748A11D2E45D7DF5D5D84BDFFCE6374F3AE92459ABDCAE02FEC91470C1A6824EE038BB94917EC6DC2E6FDBC54C4BD47272A460DC3E5FCAA2F17642FAE1A0413E90B01AD6E4CA952BE5867668025659AA2FBA9E42C28417A428563851B225769AE7582E8666B38C9D3C36E665AD6D2DE8C678AADC5620C44C1F4B781B0F2275C7E2028C00C63BF51EC68AA9B7347569193A79A04C86EDC5D7DE78E30D4C0D04196902E9585061BA2D09DD82144A10BA7ECC9AD22B74C367BBEDB61BC6C3208397159AE2E20CE8B38050CC42CA72971D375C07CC4DBB7323BAD45D0A9AD36D97DEA696361932AC83BA40D10C4542B8C324C7192B647A568F4F3A7EAA71ED691A863A090233706D3A742A75958B6F9335C18063075CC185BD6A9608ABE00170637D7A2F7CB42BD671AE60E99C77DE795FFFFAD79979C31714675397154E919B10165C441CEBAE93CBA5E4D27029D5A28FBE202F486DA16263FC4B0241E3D0F46B434B4F63C752EE0BBACE7B2559FB0D1E6993611C4C9661126FB638E2052EB429C4036BF9A0E841E227A54D6BB7263BD233147B3913BAAEC615575C019B8064329C01E217CF38E38CBBEEBA4B84E70CB19E7FBEED758163682DD05C029D134798D53E1CF2A38F3EFA897F79BC54864B0279618AA560C1FC394B97EE3AA3B71B12A6000D164429F6ACC08ABFCD9B37119F5EE9C9F7F65466CCEC2E157100EA51BB66923A84898D0019DBB5C84B5A89697BB6B0C0A2A702E3B593B4BB245C8FA09098C02288DA493E981FB58AA65D191E6E6EDCDCBF65C7F08EA1767FFF58A36D0B832C50D51A79B8AA8516D985F33D6E72D7B0989CF7EAD0E5C669DDCAF09D97D5A9119F23FCF1F5D75F8FB9D5D622445B2A81B28551970E6D2489AC0F691904595F019631AAD58F7B2828AF346C3706407C8A2B5B495F860DA36A5C2FAD50A329C07D4E51E0F69390D9C452A4030F3CF0F7BFFFBD0E3B452EBD19B62C75B30226A3E9B46D0652952065430F8C3B135E3BDBC5B34D8D4B4369C44A4D28A11B5DD11185058D038FA9B9FBEEBBB18F99CC51D7A7EF7EF7BBF01BA41EDCA6A9EE4BD824F7466AA4C9F23446EDB1DEE41722ADABCC5559763225949C74214F22D6503185A24371C6EDCC9E30AC0191A53F79CC54ADBA94CBE84021FBE94F7FFAF1C71F6781381E1C730A4D404828D59B1BAED1F0A409DCA66354363222BCB4CE9EE78499586218848EE52A4693BAC549F399ACAA401D71E9D851F931329664F42C026C7859E51A91574440992C01F88E77BC035BB0634D5DD5629C7625240B529D170F2D053D3EE1D7B885D885065292ABB920E5D4C56964536808746C5FFC8BEFA88651DAD173AA667432690A481E918084FE812D1FCB1A9919A7916C876929B61F757712DB7932BFD9EAB73088197D3D1FF98B8FFECB234FD44631455E62C683C82C886589250B355863C867A7E89725D8412A69493E8A411366B9ADEDB2CFB578D1C2F51BDEC22396CB668F3D765DB664D7AEEE4A609238B11C2473E7CC325E2BB54F0D0DA6C1C1018CDC6E8C5CAB5C2A7675C30F86DB697B722651DD4684E2BA5D4F13594D90501340EC26ED3AF4009484F17C63F921E1ED2481DD23716FDC2C98B8BB3616F70F0D0E8F4523A3C9F6C1C6E0703BED2C9D06D96DDAC08F53011B84E3F1168607D5DA45BBB4C33855609D8D9B2497496288A973D16E3CE904BC89B0C04C6CDBA7459427E10A019D4A45E7DDFD60B25A4B9283D2CE6314C8F5CBDDF76401221F0CF90D791DB7ED076C26E8302C34841BBC6716C6BB093C5E870281DC88A79C72CA430F3D44C18D0525D325E3F61FFFF8C7FFEDDFFE0D6631C4328BB40953C4E99601272E235CF081071E58B16205FD72056F6903B16B0B35A2A70C09A51B9D35689275EBD6C9A5E2E46ACAB865F157B214E0DEB82B3FE1CEC627B83ABEEC8253F573F886279C7002D75B4D3BF5C245E84029D3C0E430FE842B431F427928A362B21E7238AB7A63264657DC689DF681A88A4CE6932AB826E9C97A7AE60312A760CF644179E86D4846E921C63D79116E083715AF9E441A55987500E7B4BB21027661539A911C738CF5D30FE06F190157B346E3D8C812943A81C2D2B855FBC44860B625A36991D10011E117638622F6509A8B2CE5AE32D6647EF6B39FBDFFFEFBA1DD091CE26E53490A6D029752ED5BDFFAD6F1C71F2F7E6CBA5C8C3E290DCE11D20A93C337D9F4E3CBF232A65E8BFC3F42B60F39E490175E782149893AA83354450FA3895CADDC7526F3CFF0FEF4D34F7FFAE9A7ADCFE741D8995D7759B676CD9B0BE62CD8BAAD7FD1EC459BFAB744C1B8EE9742E55A2828619CB2236635187564790D5E38713639D9AAD76A8D62BED4A8B7ACF16ECBD8CCE2C5F377DB6DD62E8B16627AE13E79091622ECE9AEE0A4787E3B8DEF35188BAFD5AA4CCF7881051AE5F326F471F75ADCAE45B18DFAC7B1DD039E2D348B3C8B808D21FAE110D4ABBE75CC6C78C484F954A5F9B9C452A3E7E266D14BBAE228A836DAAD38A8370B0343D1A66DB5EDDB07FAB7EDC0B2A7E67140883C2EA8281C2E023311226CD5AA552ED790AB12583B8635A2C430191E441C4A7846E84E980214FD984FED76011CD4C9CE38D5097EC6A3E3260B1387F0DC642C0E102624382249B5DBB79C3A9BCD1C6538BA41D48E681EC6892FE09AB495B1C4975C72C965975D86A7C395B98D95205118561A5134E31417CAC95139F1A0E138107242AB4EE4B20CAC31EC21E64A9714122A01DE27453F6942A86918AAF16466EA6831F5C1BA67C62EBC147108639F7979CA687C41E298F110F69D48B2F600C4FF10D1C8C886DA282AA2CD6393648DCC7880DD9638C49C747010CAD653B980E4A08B28703F97E5885F71CF91F94FE9294545E4A6D11B505C4801776E0221D9F91E5B8A2606252C5D1945B1F19F279F7CF233CF3CC35A279AC364B86375955BC3459A555804C71E7BAC6B33320ECE0108C84430BEDBBAB223B3246E03CBF5B478316419857539E5BEC65FDFF9CE77FEF6B7BFC560088E26E6C7259960C130BB35D0C9551A4A61131962541B7884DD76DB6DF5EAD54AE62B0048052045A52995EFF2F5AF7F1DF614F6096507C987F143DC1A9B4D3C01CA76B8D1308A5D3A979C7FC661DC4D8533F6C61B6FB8A15E0AEE76D623DA3DD8982BFC8BE9623E1C8ECEE8F6D1B1FA9867FC62DE6ECEC84479BFD88C2DCD906271E458559985443F550B639B1497B7DD761B0EA7CC5EFB74B52A1C022E2E8471A3D958BAEBBCBDF7DE73EFE5F34998531D1DC6A8E6CC9E095FCB0ABB829F9668D518466B34EA7486C27C2BC53735030FFF091D504B62CC7CD3C443E99445264E51A47EB6439AE5286EB5A334859387699C4F2B3072C6CB45AD5C687AFCB0D08EBD242837DBE5A1A178DDD6E6E6CD5BD7AFDB383838D26A9B183E46E25970693C4E2BCB63251CC194281AE32469052FE6CA62BAB05DB185F835C9135A456EFD0AF718179464B75871C52463A7F1B871BA8BFB59D31BF1F2264E2B1B12309BAC108C9BD3B5297529C62A98CD6652906176EE73371E406C2885679291E17B4EB93EC39E1277AC012257123BA650D6F3873C086EAC58412D655008D2610801FFC9BDAD9633B8A30AE5EC617463023AB149C6D7CFD6546427C639813270C9408C9343E64BE093F9F3E7E3316011C030243AD34BEB44E01C89F24196BB6255781836FDE114333A14670D46D8BB072719D6931AB0F1F0D30965EE9A902F6F22FB87F6C15E7BED05B5F49BDFFC06EF972F5FFECA2BAFB05912B14F5448EC12ACB60DAA3DE19092AC1908EF4BAF48C14A85A714CEE22E8178127AB5E3E51E12262108D9E2A441325E7EF9E5441371E175BA0496752FE22678E9840AD1AF0655AA8DC05FE178C264D3126805F9656A355DCA0D4609F422F8364F8E58A178C2A96FD85F487CAB628B9333C42FF000B07858E80322CA459ED131757C85D98BC63E1E079BED631FFBD875D75DA7D274DFE9F64CD5ABBC056E8159C5543CFBECB3ECD3C0732588E1DBE59AC65F306FC1862D9B1263A72857C86FDFDE9F8AB4B76B474CC6A347C382505D468D48ED47F5433C1E0D23DC142E26E653AA3DF0FC5CDE9BD957D96FFFE57BEDBD5BBB3DD855B272D0528B17AD5E0C52D6874239C5F847AD8C9DA69E8C778DB704AB5E82E5863268A4859CCD24C24EDE21DE8830F56FD20A2BAC5D17F44462DA7E1015F261A9544841FA052F97376D3808DD61506CE3E98372A35D191C8A376E6D6DD9B2EDCDB51B366EDE3E3854ADD76C81050C272F19E7205168D138F4569335814AA85C100EFF446549E6679C59F288DC77DF7D7037692D6156E5E9EAD8B28E9524EDC2F074E8214E11C749A03CBE79C20927FCF0873FC42D38007AA24A3B2997E0DA5B78C1C2FBFEF7BFEF6A265C106386A013553006B660C10212F350BE8BDB2DC87AA5A8A88BD2CFED2E25E7892A41FE37633398197C81470626D4CA952BF19E44D334F985D1703907D5AA8B61038BBBD546C77FF0B48B6E9E241E1D34006E633686B4C6D297BA71CA2D30292015BEA1480D4D86F65572D2A44574147938BDCC40B864642E384441587CD34BDBE6D04C209C8096BEE0225AAA0E73C0A4B15ACC20FE7DD7BBDEF5B39FFD4C91076258B933E80F7959BB2BF5545124DAE586E42EDC73CF3D61718B8A2770BA7E72E14DC6D14D058E0F498E163B44CA323AF8BCCC856024DC551434D80178CFE1A9E04B6171D9DACA7BE371F0B098A833CF3C1316A899D89052905F950473A2587426AEC728EBCECA44083E39ECB0C3E04C40112A14CECA32FA0DECCD80F7343AC447ABC69C1D211DA69AA94254288469845D0315A58080F6C064CD279F40D109AA7385FBF09F44C761FFF00DE363F2BA5422A32A2132EFB3B402C60D2C2C1B35093D58DE854A3E82646D585366F62EB377BC351ECFD441501285DA917B9E054ADC24E79E7BEE4D37DD44C9858B1F7AE8A18F3EFA286E55B11D5146615D7495F37BEDBD6CE9D2854B97EEB275CB9BB4031A351B22C8A75AC7FAAC396E98982BD54EC906D2FD5FF50D447E33F0A3C06F9AA49EC4CD3869C1274827CD56426077843993E73EF1F29EFD6602CBB054CC111A5ECC15F08D04666ED88D276BC2E4F72BED76CFE070B26D7B73C78EC10D1BB6ADDFD8BF69F3F6FEED6369C18FCD75FB59A930DD50CC868ED8E4E81014309B7CF1C4719F530A618341316B7528227072B12EA451E126A7AB27C797A686DB53ABC3D89299CB2B9F76DA694F3FFD34D69DECC5AC1FE64F089127FFE87824DD512A4946AACA3DC691ABBA3EC9BA2AA9A5AB80335ED632C838083DA6A68E3AEA2868A3242B7556EDBDFC15D7C0C577301594C6F8136C4DA81F86F1D9319ECE0D4F2BCB3CA5455803405264288F33CE38C353BC5883C327D8971896143265044BE98CD3878B53EFC628B80BE9C4B929752F6593C75D38351C10E717DA123202033DF5D453A1F0E18043B8F0B4C7196BB97200AEB6C4B139E59453049377D971DDC8B28BBF74235726F59ED809873C740AD2E16BB6D3B2433AED063478591E6FAA0DCC3E9EE2031FF8C0534F3D454014A536452D13C8CC3D924DBE83834185D0AE7054C60CFF62B5C487BAF7DE7B33CD3E25215747BA98D3E836409794A4014EC801B7859A7BF079D59F84CE07CF03E38FD48E4AFC081922702A3712CD6A467829BBE190C13B11F387484FB9E5D6AE5DCB489438E370911B6FBCF18B5FFC226E8D358503C7F1339467264241F4721104DA9FAC0D74BB5B5360F1B48B91C664303337F1C8591A87B1B59A7E004FBF343A9A4AA8D0F4CDE81BEC1F2CE5C7B72517D456C26778470D0C4780FEBE2AEC44E5CBC979FDF5D7E38827DFCC99555EB868CE1E7BEC52E9CACD9D37CB4B5AAD66343C3464C3A4C552AA3B939C1FB452DE79F803CC4062FD69A5E57336F21306B117344DDC88E3B1A85DC317BD64CCD6267849E827500385BC6F5DD09C6FFC280CF0807EB110E40BB952BE58C8E5C3209F0479DB683C57C1851BEDD80BBBE364D6582D5F1D6B0D8FD4B6F50F6FD90A7DB07DDD86FEED3BE01A5843DC4558F2C17936DD35D2AAB13447275D7B49303FCD21930184D6C85467B728B23A2BEC2E13673AE8A4714AF7930CE3CFFD8FEB63BF4138CAA1917DE04D85CA171A95BB0506102E822D7AD75D7741BC12A8432B4DF45FAE34D77F527E620FB0D6552CAD9C04FEEB72A09ACC8B62FB498C1F178732601F6F930155880BC5444189928B0CD3CBD6B93C95468472CACE49F2E212106A3FF8C10F4860093B48CC741C1CEF814BE3FB8C5AC815A077C33925271D03B5C6A9DF7303F1EE5C3049C2F168395DA744615C294372EB7FFEF39FBFF5D65B099EA339E976FC9195AD127F615D8443A7DDC7023FBE79E73BDF09758A6797B44D9C526FAA7146A84CD6DD53C059B785B2DC58A97411E4262973087C2677870944E4A5AD69449DC805C29B9B6FBEF98A2BAE206F1296960691C0D493F304AA2B56B95C072C9A690C17EA4EAB5F0DBB09B051C88E0C3049CACF2AFE77AD1A9109268326AB98803373CD35D75C7BEDB51A1EBD16AA4C65A768D3B19A040A8CF1315239E198E1915DEE1317CBC1A99358E172B7B32E89321ED9A148F82E8E841139F503104640D3485966E33CA3D65668B55BE17819D4F64CE70D6BD37A19C657C0988E25A06EA62A7571F129A40AE38740A92CDD75D1FE07EC357B76573BAA75F71493761C78FE78EC344AE968226B8B8C366A69C7C0D10CA410509F75978A90EFB930093C68F7B1666BA4D51AB3E5C2C622886C557410E7737EA118E4F3412EF4BD7C3D6733CC39E80648AF5C900FFC5C60FC245FF4A3422E2CC79EDF6C457EAED70FE737EAF0E6C35AB531385CEB1FA84213AC59BB69DDFA6D4323A323636FA7F118D3272ACC0D15B89A4045B00C3E0BC24BD2782E1FD43F9D60B7CCD8644929063318C65018D3DB6961ADC92239B31DD62F72C28B6C8DF906EE2297C8DD7D29D8103ADD92B9854861C94DA58DA1BC85C21562BC90E683347BF0C1076949CB5357D5857C6255A8506F31692AE386E28227453D38190156FF575E9009605C8D5439E321637620C01B4ED0EEBBEF0E6FE57BDFFB1E7E4F950E610D13464E131783E60F55B4EF348F3599EF43B989D7BBDEF5AEDFFDEE77C6A9B72683B1F2FEAE1A3459774CD576738B07691F024A049AE49C14B6D7E0FC12D4A4181CE55D9C3538E5FAA9531D2300F8886D1F023F305980A5D16C84A91BEEA271F8506E20853288760145AA0229B48CF07D587FA4AFE0CF69CB402C5E77DD759C1C21AF88B0A4C662DCDCA4B82969E58B2FBEF8CB5FFE32E3EFC6418B2A104FE9CCA09C1C35D1487006947683CE7BFEF9E73B8C38B71247BB50CF4BC16AB2AA1CFCEB267E265680BF1DFAD42CC95F36591C86F4007873D555576142883765F81E4FB462C58A7BEFBD977BC6CBD82998E4A741C0201E14E4D5575FADB54BB2363B5C6E1CB0279F7C1206170182EA5AC17A37EA1EE578A6131F9E0393EF90684455D0DF4AB22A21A50A784D32D88C8B15CF822F717F682E93F66B6A47E9D16DB60BA1376F7EDFF27D97EDB9C79299B37A20923D98EC29D83FCE5833A3EC852B334C6A491E53CC0C63B64188D314D87A033F4EA26AB339D4680CB6A346D21EC3AE09C224674343106106FA003A2384F51FFA85BCFDCF7C4A6CEC61C5120B0B4D9282E7770561C978412BC671E80DBD1903B5B0502846B1191CA86EDEB263FD8681B56BA1FAB7355BC1E0E06862FCBEDE998343909EB16D0E1A472636DAD8D4D6DCBD6EC341ED79D77757489618395A27DC6F227BD046E5BABB34701D186BBD7133C9EE01A70CE5F67623EC348C78C693ACC4951B8CC3108192E2C6F8D581071EF89BDFFCC6659FF6A6651399A29100138DB0F48F3FFEF85B6EB985CA4660071D67DA4CFA893045AAB921D3A27894158655C592FDA17C7C9710869763FB1492E788E993C958E255D9785A315C495E97175B302F2CE441071DF4F39FFF9C6678D645D6FE969C775C7832F3C91BA2F5CA414A332BBD49FDA63E4422B7EA782291D2A8B19F9B4831A9DB0E5FB83F4DFD912CCF6EC47265AC3A264DA079F733BE75DFA9B9551482F632EBE3E92DD19DE28DF057FC27CD1056BA26594F343E2961275A33E8F32F7CE10B26C3C651C39D7AEAA9ECF124D924D52B1F0253F4D9CF7E16D6B4369F02291CFF59679DC58621EA7DC836559C16359671437C533EAF1424ED38F690E039C7247383D265640A47C79BF8718CF0BCF3CE334E484761196920EA2A933A85E40754E73B560E332ECC38325D5B510D2BCB479DD121D3C51A824BD1F064388ED4F62EE25BD69F620EF211F9625112F7AD5A4212D1C05407BB2E4B6C4152C3404F8711400DE40B30A7462D435C10CC9B3373E9B2058B779D376B56C5BAB8290FAAEF4DA0F1E11EA332605F0A32EBD1E8B16949CFFA7C052B1BDB49040373B0D9B201A2C0AFDB963521A6D7CBE7925C3EB1EE50E025612B17E0737CE2D9720293B251A464D430C68C57F1FC7CE441C68589E9094C6F1CCCB21E47ECD71BD1E8687B5B7FF5CDB7B66C58BF65DDFA7EECE54F1E7FD23F3DF4B0856CC11B889A119CF5429146895B55EEEAD10E9D4A5C2FE535D70E56C297BEF4A5238E3802B295C84E2E34259532BA1DDB72B20EE09BC8699AEDE61115AEE086A455CEF060E0349777DFFB59030002826912912E82F6A2DAB89A69424C666261BF3B54F2DB43D0B11FB558EB455B89CB625F7DF5AB5FBDE8A28B18E72418810F82616072D4E0CBEDDBC8532F8AB371861CFC86103D2279B1A14D5A72A90480C0DDD245C71D77DC6BAFBDF6DC73CF19A7B0D39FD43CD60551414613534FE38B96B5728954A7D4AE0C87B18060D5AA55EEDD29417005382E70503A18CD3053B7DF7E3B26858521F815FB63503488D3E384134E78E8A1876840E1B25643B65A10FD36AA13479F59F199679F7DF6B5D75FC3278DD678C4BF23FF4C6137A56414741D9F430309EA336FDE3C0685252F701176FD950D0EE317829EF8651229B3ED86D230B8BE5C2B8274299EA8DB896A657DA3DAA2BA5E9AF61946C5C1C82E200C59425F907F7AD91DA127457558D6C86CC4E1871FFEC4134FB0DBF37857862C1AD601A723A9243BCBE35F4D0B193E18A627B2DB35B2C8DEC1F023771AAC6CC1A2F0A79B6EBAE99A6BAE119A39709A37F19AF83EDC02EE199A110434BB981F6550A875242F841470CD02BA479405D42254DB0A70533773186C024873A1D5AE47E371473F2D2049FBCA41C47657F659BE6C9F7DF79839ABE27B6D7C924F2B0EDBCDC873AA25E416103244AE7FEE646E03328FE673A1E5228DEA710435301627CD42AE6AA34639FCC9CFE50D34413EF4A01B82421CFA501E5003B665417A8C5335801BB573516C0BCD9A3166099BB6076E7958988FE1245EE0F9580BD84CF1BAB7B6BEB56EF39BF8F7ADF59F3AE1E43BBEF10F26AD34484CD4D3DB3D3234AA242AA7CB8D17A9328019239C149C8BA79F7E9AD51EDC60AE2C63F59C9B2DA055E75AF7DAF0AEF075F37CDAC96E3083562F6B1BB181F12FAB656551B93A46D84D658979050E0C9B0D560E09EF28DFE8F198695EDEC4173F24F7B5FB35DFA1FFA2714CE7982958DE9A9F7FE73BDF81943669EC8BE949BC81CF7DC61967C0CF807050E03D603F459D7FDDC9DDE8140A2C62E26F703FDC298D4E56B9A88C98EBC0B8811405E2757DB7AB839A7560BDC9244E3663C1992EBDF4D21B6EB841544D620EB07D2BD3AD4F11C930821A525E7CF1C5B7DD761B56052ED505175C40198AEDC22FF3F0F04F26238EC691EAEEEA66A206AEC0899F3AF185175E58F55FAB822C6ADCB1C33A5ED20469ED4FC498D549279D74F7DD77BB706093D129BBA5CB1D31318A605A46B4A95D80B622A1B8239B9D6A0C3866B48E152ABDE79E7BCE39E71C6A41FE50D96F227DF12F93ED84CA60F6C8F9A5781D535E14DC1DF14D656219823CF1C41331E7C20EE10B38CF8CD7D14EE72CA90DB27602A500F6284B11E9BA51DCE38507A4FA178DE5D2A54B3FFEF18FFFFDDFFFBD78BCD98E9CF3E3EA66CE834B666032E60C7C78FDF5D7DF71C71D6A4765D29E88C6A141E46F154670D5BF8EAE2AC34F3EF9E4C71F7F7C975D766119B69F5505329FC91344885D86644D013CF62E5C1AD3B6FCE4E1AE8BE71DB0DFF2BDF65E962FC6CD06CE579C4FB756DCF23A925E74FFE9F513392D98868D26E72CB997D507B6134D037694891BB6B56A3812E602D818450B108DE116908BB450C26326F63F03C8EF54F14313A4E4D3CD168E3C9481D768B7EA2DDF243D81D75BEA5AE4FBA1F1E1FE948BF9DE563BD8B47970E386FE37DFDCF2E28BBF6FB4CCE0C068148F5BFAE5AE4A75D42E7A4799BA0B9C733F645E014E2D7694C2415E5AC44BFF121B03E2EC873FFC213E148042F14F57524F96B67AA3D8BD0A7A64EFF3AFBC11F5903F89D7442F1E6DB7E3219D63B9FBE4D7EB18C06401D2A10FB893B90329DFB8EE6E1B3EFE44C61CC5324F1F43CD38E31803318D4C09D0F6158E888F6FD52DB72C9B945160B18B3ABFA10CAD1840BD143C8A6F320823338DEE125FAE3210810C5113B2F55C72574EA21241AA339099CF54B0E88E4D1A376723F873CF3DF71BDFF88664283E84ECB8E4924B2029D4D375EFBDF75EBD7A3503D62EF31FDB5A7142F32963B62D9B37C9CC1969397BA30EDD309692154FA909A6F409704702A256AC58B172E54A938611198666D139A6028317589636A31C2F412C48F484DF4252933C441D894D5678412B1B97FDC4273E01F79053CA99E41BC607697C315231B914D3CB189F2EBFFC724846C6EBF014981FE13184A7565E440E3E137DB808F61C5681010A3EC2D9679F0D55A464E9785B98B4AE4A4F4AA01BF9A571656C00265474116DDC0E2489A0AB2643DCD23D579B11059D696932104447D34FA9F7684C5D76D9650F3FFC30B6077FC28327D0B0C4AE1B77EEB0DA7868D5433B498B5A7071053F8B191D299BE8AAF211834FE701E29B4492988DB9FBECB36CD9924573E7CD6847B56603471A56B78533964B7D1D43A24DE3A57FA50EE027B4A3A3C458BC2B76BB1F7B963BB5EED99282280C866CED71C183910A4D50C8D96C41607BD558D429DEE7021358F620CF4F9F188F034DD06C5AD2D67AD46A34039374C327983163492A3EF289078D5386D9363058DFB17D78D57FBDBE7EDDA6E77EB7265730ADA62996DEB67B08C4803B2BDAA80EF1DDF17209A825F21866E10E2447052B9045F5681C3F60CA1CB57B78A5CE4D4627E356AB31E897F523E9C462F04366987184DD9A568E5C0E10FF4494EA740F9BCBA2D0AED9E1D62D7177117EA2F9612290EA87868B209D7C40E5E42067CE3FFFFCAF7CE52B6C208AEF74746EF7A8B5182D7DBBAD8AE741E5DE79E79DF82A9E070E35E16EC41BE1AEECEF4C6E165CC176A3ECEF57FC744A6D2C7892B04349DA0582A829CE38B40B414E4986F9A5B472F115F06EAEBCF24A8E879B9E8EBCD829B039702F4A93279E78E2E8A38F3659181A72078B812970512E1446B61FA11FD01A6D341BBD3DB620DBEA06A7A4D04CAADB9A9C3166B504B99F88EA1521CFF1C71FCFD0BCD02F6E96853340C5C0CFF9C9E2C58BF109971F37C2A6771B2F339AC74D43443673D114CD982291A7ABD887B28C941EF810DB027631661EBFC2025D73CD35FFF22FFF42C38DFE810BE816FACB251025D600DB807B63BCCF44A3B1FBEEBB33746326525C3092C30BE23FD5D98D7A51A5DACC2592F74DE5578CDEF859AF57DE8E551A324A9458167B1D5161D4139FFEF4A7FFF55FFF95278DEE3F07D39376C413D6888FC6688FE2184AFAB9B2862F5ABB42857260B82375393E39E490438E3AEA2818284412E3D7A55239BDBBED1A673CF822C5E5FBECB1E71E4B66CFEC2B95C34673348E1A70C9AC26A84318E53C879F4AD121BA5C047A08956B173DF143F2C7C027306D93347DD3F4FC38F0076DD4A8E0E573265788F2B9785C1398113FC05F937C888390B06CCD4FFC7612B7E11344A1ED6F10B51B6DE88BEED0EFAD74CDB53BCACF355A493B0ABDA4DC6CFAF57A6BCDDACD6FBCBEFECDB736AD7BB31F9E818D02B5E27C719C5393E5DFFE24A62FD95226F309F04454037C2F5B988BE86715C2175D74D10F7EF08355AB5605D3B7F99BAC09A40326678C1387A642B2456C0BC609E5F314D8565A59498D4818CDC4525E3728329D4FA0F223E58D45DFC4DF7A4E21310F263E8148B9FFFEFB353CE6CC18DB540190F01DB80E1C624A54F9138C61D8ABC1968431881F4370B0468C8A1A4B4586779381D095C5E5013BEEB8E3A0DEF1B48C604C1944334ED386C0A1F064201B0F80B38185E47F4A5EF338495FC933A02D4FB227CA0B28120C0C4F4541A31ED662A6C3ADA1B119DAFAE0073FF8E4934FF2F9BBD2172420750C7E3E7BA66D51642DD646BDABD2353A36BA78975404D76B1D8BE72A0393450CA409BC8C53C1CBA0840C7490CD09B790B090706424548E02560BB34A248FC8FD4570CD0526624443724B3A653B7B59A3280E86AA570473E2AB805287E5EE160770BD3099188CDB8A6EB2E6E3BA30A0872FECBBEFBE182D574D54FBAE1C574857102391029D74D249509334291428E31D358794C8B4AAF04D5CEAC8238F7CECB1C764CD09CEAB803E5D19BA025C3822774D46FF42DB9C5A4725A06A4B226B3171D8313B4418DFC8C45162434A112F9680CA16961C61161DF67DB1949B3B6FE6FEFBEFB370C19CEE4A0992BAD9AAC611D6C80F3D3B93F5665B9AA023FFC1C3AF5416CD23E3D9320808745BF59B408CD7A10C12D3F2CD4810C203860288E0393055602342B95158FB7E00A721B14567295E894F07651A45398B228DA3B6AD58E8F1835E8B30CA17F11C58CC661B7B188E42258973D57AF2E20BABFAB70DFFE10FAF56C7A2A111BB4B7759B4CBBA0DEB4D16E015E68D5292764CE474CC96C540BF56A850FAF402B22B3E6126E2C5A75C2F574F48E2771053F31604B0B830771E316E3FF7D4939F8E54A96278A4E3C2342FC4D1B265CB206768A2ED244FA06895428E8A9B896B87CC486CB4801DC59A4471BD70847A5EB5DA6518E094534E79E081074CE6D762D8D4076F6B20FAD7B807053ADEE0535AA00C41305BCD07F0B3C64F8C49B17A4B68453D95626A9C32290FB1329107E6C20B2FBCEAAAABB8EACCA7E13B0C23F0CC70AE3523C944983CBE4F918A1967D242FD0978ECE528712789025AC11668383CC27801A131CB962E5BB3764DCEF67EB57BB41DB5E12544C9047FD338CC591D2ADD6454CFCCF1E22EB4FE68C27007134227DF4BC48122EDD1537CEE739FFBC77FFCC724A365772933B3D63D2147C5740B8983A0B921D6B939B8B754CD1F66DD49E50F09ACB566CD1A9E042E65925587519E12A13C39632C9F80C3660181C9627DD824F0DEE08D62CB4AB2BB75D7DCB5149A6A5C25F80D03381D9150D904C641F8F176B802F6039419F316AA99A7B14C75AB22C40EC01B2FCBC128C2E04FEC43AB0DE04DEAD92014AF848597D10B3240ACB4B932A54E903A073500C1DE37A37BDEFC19FBEFBFDFDC39B3BA6C4701BFDE18AE8D8D45712BB4E679E0873993C154A8094C06C667F8450A695C1525B99092D122389B968B34CD1378F1A8B5FDC33817B68310E2C32A030CD60F86431B126AC121B09AC03396988E42D922470B8917B43D1C0AFCA52B08FB0A612197CBB7A2A456C7875069B38AA5BEC0CFD7EAFEA68DDBFEF887575F7F7D53FFB6A1C1E1DAF070DAC53EC57C8B4C9E11081E644614794684CEC03A7209185161B8C34BD1CF6E1D3897CC0DFC9A8C6A77725E7A7280887B89DF275B09DE9C78E289FFF44FFF44D67D02D9D5B5909678C72679F8E187614ED127132104762CA3C494517EC6963F5DAED173BAA7B16880720FCF452B102339F4D0437FFBDBDFD205A47C66256C47C5835229C467D309E0F7E92E30740C1FE0B2CB2E335958CCFBE637BF79DE79E7899C88A5F0ACCF628135CD16C585540DCBB32181484113676D6114A33719CD05BD39A543891B51AC8A373AEBACB36EBBED369218538A29621B64F45ED22B04D830C6C22B98ACF4979A80CF9C381C9FF8EDE9A79FCEBC4247C9154CCB638E39464457141FDC5E9A4A89248966756F57298049C3D626ED7FBD6EDD3A57E8DC72CB2D575E79A597968C990C02EBA6165D8B9ECE29A3EA325868F9CAA8E9885ABA324B3E262E4572501619523E32033CE58E64B28E2BFB918F7CE4BBDFFDAE4C5DC1A244A9E40269544F47BF58311F417EB9857035B624E44CB280D3CB30D1F8CEB9E79E8B0DAA78A06BE9B8DA88CAC36D6A4FCDC455BBFDF6DBA11445F9609CAE0F1DAF6422DCB0237549E7D8557BD3CD9B9FF1D8F819E17092559F4EB95ED650097D88E6384A6C866051DF7EFBEDBD6CB725DD29101012A05A1BC6CD213F8D0749540FFC71E6478A09AEAF6A35DC4CE6F84130700552BC535A7510B75B91E5A66E87961DA8EAE7AA9EDFB074A379AC6914E620885BB6055BCEB7D821CFB255FB9ECD217BB9208E82C460DB5492A06069F1F2B6FA3D979470D994B42E09FC522E3FA35C9C55C8F78CB48B033B465F7B75C373CFBFBCFA95353BB60FB6C645F1B4E84981204C466E4F13CAED152C7AB42F7CE10B5FFBDAD79423954F202EFD8F7FFCE3BFFEF5AFB1D5D54057D34E56673311A9DCCE3A24AB290D5E38B3495603CBE131BB193824C73CA4DCF68C60AF5CB9F2F2CB2F576E835E026B56689DA860C5CBA88E896F94B58AE3B061C306D937941E1A2D3BA0D0E45AB26409740C1F99980E93650EDC4E24D75E7BED15575CC14753570C0925D666F3147BAAD8C6BF1FFCE007FFF33FFF533904A820CCA9C9A243AC6C32599C4754FB82CA8AE3412CA15E4615C203CC10845A90CB991062578D855535E616942AA5ACC606D82BAC24E0FA419490FB5EF3EB65141FB2D4583DABDA577751DD96670ACF69190E3AE8A03DF6D8E3F1C71F97349403EB2A0933B1161A172137B222A44404A93132A9F94D165894DCE40B530A0BE5BEFBEEC37BF625967BB4132093716C588E1387E79C73CE513C249CBE4B62E254CF3345E1C2EAB9AD197C8C332A15A561F1C925975C72E38D3762069860500E963FDF6BAFBD56AF5E6D0B1A53C8B3A82388DBE3ECC18CC20CF0B2DC27C6C17AEBD15CDCB78A4BB555B0435E7BED3585117622C177FE128C44A1E7E9327E495A0747BB8CBFC283C014A02D3279BD6084F930AFBD363441A90C7F74D15E7BEDB160E1BC8A65E5B333D9688E4113C0188026B0E22CF69503E002511374A42BA4785A260DB6B4BD71A869BB01A99D24512E6AFB6123C85543EB1978859CC9175B611E9E4784FFCC13456AFBB361D212DFB31DD1AC26F0F24150317ED1588315FE00345E0957B38B82E7F04B855C6FA1004DD0D50A7A0707C65E5BBDE1B9DFBEFCFB3FBEB279132472DD6E1F6F679AC064DE8C9E8E92411EB6C99A469C74D249DFF9CE774C46FC2ED603A646C950B976ED5ACA5C1AEFB423F1C9DE7BEFBD6AD52AF5B13159573B1D199A416C15E065AD31FD8CD4886A9E15033CEC38D4F4834D5655CAC00B2BA2E3B4712CC6CCF70A5549B899AC9E0EA71E6F24FA30CE4F7EF29370A9E5079BCC03489CE6CF6A6B632676DA90FC611E91650DF802E43EE433550EB414034D14E376F2D9618780165AA9946EDCD67C60D1B4E2C9A90CBC89D41934CCF15B97BA8F917DBA546E981BDFC105D97D8CAC5EF40A6956E3CA5018D4C9E26F089C0E9F2A41224F11A31F34FF49B464B2A22DF79018A7C888A85386D8848AF1B236C8987178A058152E1805190D4F1AB038E1D89AACE965F10B34041EA7ED3404961AB8F4D24BBFF295AF70BAD44D42B3C7FC30AB375848413F83C360F5ACF2AE8460BAAD63A6B467277F88F7D0E2C49BB2189B9D37A63C99B4E555008C49BEFBEEBB19FD70432554DE22501268E7AAABAEBAFEFAEBB9946CEB4ABD8B4923A93AFCEE534E39C5647414F8573C8E84D6607EF827B80E8490FA19BD87EB200AA1D161F7295580317CE8431FFAC94F7EE2D2D54DA932356F2E9A3BC9D8B4986DA6149E4E0D70FCAA2DEFE84D642661CFD2CDE6590250AF0DDB7DD6ECD25E7BEEB674D92EBDBD3DC5D0C23FD3A860033A003A05823C8DFF8CA7B249E0EA65A50C61D6764DB7A0DE6A1818A106CE40AB19474D9B454F4CCA0713410D340BF9562E6FAB0D20078AC556908365431721800FE07B91895BC6B6B2898D57B45DCEFC322C46A801780DA1C579157C2FE7B14B995D8DAE7CAEA790EB0B72152FD73B3ADC5AF3C6E6E79F5BFDC2F32FBFB1765DBAA68999DE97928E27F88D11517A00AE4BCD175B00992CA7E8D618F22CCBB4670C44071FDF241FB0F4BA7C5C93456F1866600296F128993834A8A3AC0B211956D4245158153566C07828F42464446BE6D6277774D92229B299E4AC5026B353266ECD4112FCC614A3CC3E4611F09E5DCF4C66C78B24FCA1871E3AEAA8A3F821FE157F97FD3DAE4EFC09B3B538FC37DC7003C7A7069678AA9B6FBEF9339FF98CEB296B2D094D21B293687AE1BD34CB6AE2284B8D66B244273EBCEDB6DBCE3EFB6C4566D40D58A5AADC1F249514D294D5E104AA8B44C88D06784E25213D06FDC98DB5E13BA4AC7075830ADFA866DC564414A9E229A4711A651D0E68EF5F70C105B091B9B1680BD36C84DA7FE59557F085BBEEBA6BC58A15AA7AE39CA88C9E3A1F8BC2E02071B41DD69FAB8F3B649CC9E2B00CBCBEFFFDEFFFD18F7EC491AB3CBDE395646D6055A940FF8936DAA2458B307E6C0F2C93B49D1BE63259B54B38A9B52CE750E50E49C6B1AEF34336826062C74DDAD712CD0A94D174D05ABB9906E250292E496ADD214D266B02174CA2D80B51DBD800A409F96FD902A81D4935C35ED9264BA84CD604F6396CEF310811B370D1CC7D96EFB970D15C18C4A55C9841835AD004C65AC78D34EC96D064C633D238A51AD0FC98AC0D0B83B4AD600C9BB1D5F45A750BA7B2DBDB36248BC30467302A144DA1181673855C1EF3DC8426C88596772897F7E184F8B6434EDD40032451BB15B4A10E4C3E088B90FE7013AC855408A11C6CBEC296AE1583B0920BBAFCB062435849A55E4B366F1CF9C31FDE7CFEF99757BFF6A60D1045EDFF9BF9A7266085C4030F3CF0B9CF7D8E89567A355C1AC94D52E3F80ED3789235796DA74D80E9F4BB405555F999894D9C28AC4485C2800FE7569A009E3DDC591E795794617BE0528A72C3C6C5596080E8DE7BEF85C084F0C543D118172AC9646D012975E98BD00551A4B48383DA384117BC6E4F5FECDF4004B6CC32CC808A6F4CC61E4D18EBFFCFDA9740595695E7EE33DEB96ECDDDD573B72D2A82A228E6E5F98C2E43125D0BD09088710271888022623B3109A8382193222046511CA288C6644962840551630C41A501ED869EE7A1BAE65B773EE7BC6FEFEF9EBF77DD1AD0F7BCCBD51655F79E7BCEDEFFFEC7EFFF7E96B285E15FD9507839F3C26FC3CFDB433E1D8B2D4FA5745D829792855EBF7EFD29A79CC2CE40F61FC8F8173E21EBEC36A31EB7997E3AB9FEF18D583BB88478337EC388C9269294228C98B5EBAEBBEEA28B2E12A205A1588AAD7993F6C68BDC4822983FF02031D184FB14FF826DB42C4530FA219B2B13DC58C0CB2EBB0C1A5FAE6FCF53931CBA4C0EC2C6982983937227F8165CD3864B312726C55EB91463BA052D4157CDC04D199F984A66EB86C00996A813500A859B96E1A00C7CC6BF92C1B30719095A86F424975C72C9E73EF739C622F0C210B023F293F5B17B701CD3B603030311A716C033929C072690A37DE3B944B0B67B21E513C9AB26663E01ADDD073EF0812BAEB8224AE710FC419680B9573C0E49AEE44C2E6109BA08610401B2B0E5861DD04918B8A56ACDDA91679DB06170A80FF792F525ADD1A6F1AB37AA32788BD0007696D0428B69B4D1445ABFB8156D09EAAA516F22AC75CC5C1AC74D0207B1B5D29640B3DD66C20C9479DD0BEA41D8083DD7701041EFB71013C491CE26359B71A2BB0BF030A1664AD2CF05FFDA4BFC38D01FCF8541C1F5739E5B705DF8A7B08290B7607232DAB6EDD8A3BFD9F6DB2D3B0F1F19334EE1A2751AB1F48ED597433F4C6A7EDC5FD2C6B0E268A7EC0597483DE61846193A8E8E356A58CA6F02FA10D205B68631F8938647C90EE13DD79897938EC02285145510CD0381AD3200808A940C199235E2F56D1499B8B962C9A8666D574C707D1B376E2492906A93D1B62488548A66E4D22134BFE9A69BC81C41C4263196BC3EBD619C2F76427462027C2BC7BC30D096212DD4E6F841A644B1CF5B308BB46354B26CCE6682981CBF49CAC345148A100E4BA9840F7FF9E5977FE2139FE0EA9F7CF2C94F3CF1846D75C83641200199859877834F0D7DC4690C76DD9C09165974C90B89D3C4F09311809376B17BE98809A24EB93ADC6C1B3AC9AE57F92E32A112C3CE4845B02E225E446B5D70C1059FFDEC67555A46F6D369A0E4A2E94AD9D3A43158C18DC1BE42995217B38D4B2D941DEA42B9882510BAC0134E38E12D6F790B34A394E8173B99B6C9E782308103858E0FB20B810E171D617698DB3D1FAC07D8306AFCF5E69B6FBEF0C20B996C11F414A2C08F7CE4232C1BC83DD8C8638AF57CC09293125ED2D590013BAE213027912FDD0E99C2B6842550F3B243FC5242F77035FA8CF44C17BC8E9B8E586038CFA056EE767E4C602ABA89EBABBEDEFCEAD52BD6AC1E29F716F53862A7D3ECCAF3C9436BF497C7E62CB6EFD07DA6BB2309340A365F4D5581326F36DBCD4614B38DCB6573B8E3074926EB65826C18E40C8A545B828CDFD0BDC7BE8783AEDB8BE3A693B4F5D4195DF0755CA703CB8993A666B40E9CC46DFA6136972D6733253FC87BDA0CE07FDE6CCD6D4799EA6CB06FEFF4E6CD7B7FBD79EBEE3D072B95AAAE612F6E090440280F82D3C1143C8F95948813333E8F4743565584413C271B6F22F8348178099A4E59500291256EA22421A58CC189F01C10220C1052BC24AF0113DA7428F17B388837DC708314BDEC6AAD785478529C4AD28BE161F95762E5D9EAFB777FF777F7DF7FFFCE9D3BC5222AE31073DC21C36B9BC75366953B293D5A3C6FCA8DB2468674903EFCAD38DD36BF8D5080D9A576DA06BC478EBD3DF50CD7C569C7C3F381C5E2C90F5DEA1262FDCE77BE13FEA3DC2207ADF199A174848AC749D99760C7F04E29ABD20C30834F20B0B258F8E5E0B9D650D92EF799995CAE1DD6EBED6F7FFB1D77DC21385A5A3E29C7732E127D6136E23231C2A04FFAA1EC3A1835E38E1D3BB8CD5434D8B9ABAFBE9A9C24643AA42925E51C3C713C4E971B2B439D9EB6626C6B34F6A6C195A0669436C5252C81846BF83A7E96E38E11B5D00D17862229B7081938318E220C7803CEB3905E71EA03110A6CFE90B60952F8B22A83B3813FBDE0052F78F8E187052B652740541AD54A0F8E321ED3F6EDDB6D2CC0EFD3D1B3D8CBF621E2B9A323167B3FA585070F1ED9EDB7DF8EA513F850377648998A6521583132B472E5F28181623E9FD3158256D31CE90E2E8029C17A1D07B303EEA025A019E88A09647DB45B1D6B6866D4D4212FFE433991A6207555A2A1474910FA591F5F970DE0DA671AB004D9B0AD9D7DDF659DC04CBE6C9BF41556D2F53AA3B6230409896AE10ACA6D04995C3E57CEE7FAC3B0E8EB2A021C44B719C3E1CBD5EBD923879B9B1FDBFBCBFFF9DDD6AD3BC72626F53D2CB26EB6BD97076171919E2F9E972069D97DEA2F01A4F2C5543ED31536C440728974496D6D283F130E23ADFE4C0A097E9AEFB42B0AF8F7F39FFF3C870952312E5BB68CB01FEA5CAA2099EB47E83CC55BDC057C35DC4D565E29FC3814CCE9E35F0E18C79DB36C6667BCED09833460C2CBA40C5F9CA86E19AE40D165D8CD476385594258C73E30923311466C01A5B2D84D4B2BF197904CB01EC2B2B34A1B2CC555C71A41BB7DF8C31F962B53EDCA3630141223449F4E52318497304091F2001B11850D5B0A3264E313F3A8E6521EDAA68BD68B4A99593FE9ED92AC85A40B5AD6786B5B32249815BA53EE0731B82A2DC08AE36373E08837212E86B4B97AE98C30460CA270F99B642154A26B71648AC2EA82BB08229315F5054F26352FCF808CDC226689412B670608885BCA6E425B221E804CA0642C6C4F5EC51B200F089C996965655820C84C3421B2BEF2CA2BE3749E5A9276D54AAE4F10E5AC519D73CE390F3DF450C5F4ECE2CD924514E6802534FE7C1429130E322FF369F1E05C0D65C564F443E39447BAFB83E60BCB7D85F5EB568DAC182C68DDEE8519BF55256F44279268343A310116C0B6043403522EB60BDD9D2FD23D0489196AA9DB84F17C810F15E0343DDDB50C9383731C3859C407610631412D1BE0913547A99E67A92D41CBB09FC62A86EFE2996414EC48DC6A636D5B2E6C49D0CA668AF9426FB13010664A815F307D6C7E12F62651B6D92E8D1E693FF6C4815FFCF2F1C79F78F2E8E8D8ECCCC2F2E658EC7ECA8A0221218C98559A8AA1222347290B5D8CC3B81478339595DD4D263062E24D6C1A3B994D4228E36B5EF39A6F7FFBDB363094522781086580B022461B3CCE8135EC56A5118674FC080D17BF9D5A9B0F0B1DADE7C318B71D76E8BDEF7DEFA73FFD696681A43D88CA96A12D1B9E2343A8CEAD275042D2FD7222E67789CA49918C37D7078BCCA3A4975D59BDF54C3ED272723F6C14844DC34D75469E132EA54A7C0D607625E6EA1CA1726F210CB2A3A3632618A9C0ED40B00A01807131D7E940E9376DBAF4D65B6F850F53EE19603543C021E2C64AF33455B35869C26C212E38F978277E4F3E89389DAE257AC42E1F091F3A3D08BC07D7474003F5A4D2EABF5AFC45B1A394D0E6D1DECE6F3B126787897E7C0462F7BDEF7D4F6AB6881810FA09F244B6838B2F94E28C587959BBA590612C1C877DFBF6490D462A51BC49D694782A9646558A64F041988510F7819655BAF0EDDA127E83D04DBAE1443A6DF963A95399C67719E4494B43C2740A7157B3E8121A5C8E3AF105679F7D3616967964D96E2C02876832BB4A40883D05133683251F5274D921119D063E32AB88D1E2C34FD442457B669FB9F5CC2677BC813CC74F262F38E579EBD6AF761248BBC94EB4EB6494A3D83041449785368FD180D48A0D67B52BBD66A25B790035E49F9E9093A40943B6883B86AC54699E09C73415E6DA5872CD4BEA353D076A2E72BD362EEAFA0D3DF046239AF4A803C76DBB0A6141D309542E9B2F95FA0AF9DE4C580A839C2E1D7B7ED32F8799BECA8C3731A61EFFEDFE5FFCD7E35BB7EEDEB37BFFC4C414FD2196039555C9641049FA13E68125E5C0137AE9A59732B9AAD4F161D1F820D306CA10EB4A92A0AB2423967EBE20516CB0E9D0331000B6A4D0E5B50B4ECA9A5B275CD0CC0A10AF48A122D42736633565CA8D4A5D2BBE07EF7FFFFBDF8F78916E8A8CFC628599C64C467E89C3DE0548C3FBDFF6B6B77DE196CFD71BF54C9869B6CD4CB0A9C9AC71D05B8D2641502C2832E12F279783C884D0D376073BEE2DBD2D1600844C4650AB3CD5D2D806F3456EB5B925B20E3F8F1E8F6D8C3C65B750CC8C8F4D711772391DBE958ABAE2DA68D65263A53315279CB011DA1007812BCB80E86B5FFBDA45175D44148DD8F94F7DEA531FFBD8C748652C94A8F60633A12F562A9DE5749C37DB160EDA09FA1478CFDAB56B77ECD8C1748DA0CA9638F3C2A4C6AC1F152841D0F83A6222550AFD96AD7DF6B39FFDD4534FD95E6D94B2AB4B1F13ED1CBE05760E2BC38895781851F1C490D15B4F0C0114EE9CF338F15736DC917A334A07F6E297F85E865C4B58023900A2D6E99109A589938E03522647C4EDE6A251701D83CE260E84286C223A78E577BFFBDD5FF8C217549A36A486E551216D6792CEFC5A4CF38A93CE4723BC64C3860D308742EC2A9DC937DE78E3A64D9B64309134FD6323109BC330FFF0873FA4B7C59846A671DC7DF7DDAF7BDDEBA4C12759888AB2CB0674D5692EB8E0829B6FBE993D25320EC1E0898F420BC31F822558BB6E15DCF0422187C76D35EB768F0E110DB6C9F7521E6C5E3FF08E5355DBDF1EE97A2F4992DBB40447A3F5580000B35E494441544E872D872060C7F51459E435B7B493784E5D7BFA1E96BDEDBB91877F1185F84AF79DE92C5256BBE39EA6A3504ECB55ED201F6432F942BE94CF95C3A0684621684B1005E520ECADCC385393EE962D87FEF3BF7EBB65CBAE9D3BF74C4F5519D0C7860D0DA24213EEA42D90CC6B8BFF07B9A5609366074BC709C64C16416C988A815A645ADB9E2D686F876453E58BC4174CD2BE7A3F1D354A1BACCCCCD40F7DE843322BCD766BC43B91B32FB968126A0922D6B60471CA4E61270348F78943C4AD813DA32F0FE9252C5BAAAD7CF0134F3CF1C9279FE46C98499C1A4F9F9A20A31505FE6D91415D1DCFEB8870DA757846BACCF3B31594553D47A59067F19D451931005156368D6693764606FED137E42EDAF53101AEE88EF75811CC97CDE6EDC1584667555368303CFDA8EB1984DAACAB8C89B791FA952A98F9258805D68B0680918DE808C92C5199725FE58224C476E7B2CA48B66A314D44DBC90B46E918ACF98A5552E776AAD149077093591AC2A44CEF98EDBC70B4D079E79DF7E52F7F599AE9643C0B29EA181ED9200A68BD6BAEB9861992AEECA10D48785A0C8CB2189FD261EE1DD81C0414FF9E7CF2C9B8259C4FA153655CA24C74CC0880E68AED2D74695D43494B59E20C1F0AD575D75D77D55557F168498D7A09CC8FC47CACE949ECCF9734AF91608ACDD5787CDC1EDE4CDE43019E33DC26684A3851E807409C885FFA7DEA040B5A02829B71B5AE9E41BD9501CE7CF179273F67CDDA9550C1D92CFC30D56E3518104B1B1D35979C2C3537F56706D37B52347652FA1DF3F1384DA19BCF2AE9CB637C90181BA01C87409A8A2E0FB8B1EFB57CAF1D0671A8694AB1929D4C6C3E8B58040E0D0C363E1865F319FDEB4C5147037ED673B37ADAA5172499DE30284D4F3B33156FFBF6F1FFFEE56F1F7F62C753DB768D1E9D161486F8671463699113F61EBB9A2873A884E6805959F624310F6ECB4997EF6F4FDC93CE4A71C2E4AF76CE44A5306BB914FE93B380A4818B66833564965729FCF6EC04C929D112501FD253E4C0481E045C9C89EEAE315CBC252E083D1BB82C0F3EF820A96703630612950C9B65E9E92DE3064E3FFDF42FDD7E874AB1F592B296216572A69852233EE8CC33CFBCEFBEFB1CD1EFA20278B40417C873C2F60D6651789E6D4A6ED31694E597D901BD5DEBE7168E8C68BCA076995BBA7453999D366B5A4F3339F05F1473FDB8388486F84E27650A23F72F9E995CF6541C1B376E7CE94B5FFAAD6F7D8B6D59CC24C295965643BB38A12C6A5F61A1606582CB27035E88F391E458D74B92FE5C34447C9FFFFCE7D9E44C8A6067EE905295BAD804748AADB213D0223A2A9DEA871BC3C3123620A0526E818CE14D7D3D6D99F0D4B87922671087DE7AEBAD1CF3C93A0AEF8A7EFA12155451AFF0BC7029CA3D6DBF8423F82BD707B7C75A3DD78AF00C09E1655C0F91B8175F7CF12DB7DC2234FA1409F68E4A4D4830154B337625698F82F04E331262EB0D61C494100AE1A5975E7AC30D3790208C474ED65C1893187A12F5815FE2227C6A1E5DF6AC2D3169442D941D621D855A0F426B7153EB6FEF29179E75C286D5AB576643F8D366F79D58804392FD576929585E727D4F755C0DC144F0952822ACA4A4D429413BC62D36D7341771E81DC3D4D4942E0F345DA7E5798D0C2C8106983AF9629CCB8638DD7904BA2116D9093449913220564D3DE43AA1A3E0DAFB9E1E59E3BAB95ECF2BCE54925A35DCBD77FA7F1EDEBAF9B19D5BB66E73923C49CE99CB851BB175EB5662C7B16B575E7925DC17A9FAC027F8E4273FC94964F678734826BD04724C51C15147CDF718BAF242AE353C55CD850BB2CB1717A42842814274B1FB140C314BA24364083681F96F7DEB5BBFF18D6F08390A39DC24445396672C461A17B9F0C20BBFF4A52F099191328DABB8080B6C745F9C94A381977AEE739F8B98804D6DB006B9AC1E91F6E2979CF6AB5FFDEAE8A80E26D66FD8B06BC74E2F1D7B25F76977710B5F99D45C4F3BEDB4871F7ED8A15AE70D319C6791846FB2692F6DF67C65A1BB924E4F20A28F5887A1FAE1DDC4781B9DC44BBD636C8B85623B6A76581C3CC32DDA6C9850A0552CE6ED718C7CBF208E38550D36C02EFDE307686D7C56FC47D21E70595FF5AA57FDF297BFA48A1195EDA553A7EDF21A0325EA2FE6E2591762E560B1A624276DEA6315A86B38220D92508389D36A6351680CF003E1F62297BC19BE4DF04276A6AB8B45846A971D004215D74E87510B0E58A59959E16F584C97E124B886128AEB7CEAA9A7C26B60F9842B26983FDD5D9AE2DE84EF8F0C2DF307E9603139794619470F220EE3C113CE54809C3D5B0C968EC984204F9924156EF8852F7CE1CF7FFEF32EB817C26A585365EA13FC93ED7041B91027EAA41C7C8217600E5712C44F0B409A6F0970BC219FF6BC2661B58203D4532EAE5DB372D5AAE5A5829EF288D3AA878C59C056D1EC940761A2969581E1A0B7EBCE7DC5493BCD8748C93AB2D244B17C0591FE71A29B8A634D3251F71CC4AFED6C06ABE7168A3A58299672AC6967435F87C19AA22834DFE3ABC48F237DE45D47578FBC6C8FEFE12CC78D56FEE081D9471ED9FED8E69DBFDDB23D8A8E13EBCBD05946D2921D65AB849C23EC8B08A1B2EAC6E2A93CEF79CFDBBC79B3ED3FCD7F49564DCEBBA477842A8D3E87E0AD711B575F7DF5A64D9B4493524E24A9259CC114665A08B674910B594454A0BDB624BBE96061A62588C7112F2A4E59C8D83948D9A3833E0745AD9D06EC729C219A26A76D8363AAF65248A70CCB638A4CD2A7977C5A873BD96EEFA68C0A0E84EF13C00F9D11192D49F5442757B899083DC63AC766773CC78B922835037A02E56C55A7DD9FFFBCE76F7ECC30E0170A95591880383D279D2F9579BF90067C29ADA29B9268124181F71369830D60863A49B944F027381DBFFBDDEFA46B4C14873DE156596D4A2C110B5D225E9CF9BE589E5A62026EF6F9E79FFF831FFC80F4CB542BF69BA53EE9A6DC0C4C9E7018D349279DF4F8E38FF36CD8A521665D1800C101A7A7AC2CD6111A6C69B3949D9680D4EE91C1419A302F65018D167C2EE975641B2707E6D04E53B8B1F8648DA58346D03D7E60FC6ED3D2C91966FE144FC756352F7DDD71C71DEF79CF7B684BB82CD0DAF00179DB74CF17BC4F5A7D95F21B46E97411CEC196C383EDC03D33DC46D08638497803791A71F38C6BE560734359FD639B31D94778CEFFD0EC90006A850A454C918EDF07CB23CB87464686CAA562ADAEA352ED711BCD653B925E4A8E1DCF9DA2AACD43EBF8AC5D7EA9548FCD7D2496CFA38D81E31EBFE1B92FF8714DCD579ACC7A2EBCA25626EB6602279757B96C502886B97C9009E1B0FB3903CAF0828CBE7AEC688412CEBD191EA3EF23C8BB3EB606417CEED0E1DA6F7EB3EB89C7F7FE6EEBAEA929CD29808D800C7CF9CB5FBEECB2CB18D63344FED33FFDD35FFCE217A2E9D6AC5903C9E772D1425C71C515975F7EB954112081108F8B2EBA08B1386711DAD8745BED4AE7A3637188DA6E964ADD052942B0D8C65E6E368E71EE109978E8195317B12F87B132841F6E3E4C084FAE10A54863BC08899D89622E88FE34CDC077BFFBDD73CE390717176A74D11E8C803B8046A733A32256A6221B98A21AE2956CA76D4BD2E9946421D3A402A1F623EA8748AAE34D7D2A05CC24E97C2BA19A8132C283895B4A211690C9473FFAD14F7CE2131081B6CE76E8D9A75A3EF40711BA762A42CDA85E2E95A76626870707F1A673CF3DF7861B3FA38C6F58999DD15CE84E9C7A408A97B5C370CEB4227BAD9D438426C226D19767F842EB67B3C0D36DF4CC846465F1E64BFFA7B29A81B1DF64CB8042812D79F0C107BB467BCA8B09254A157C6D52FAE1365EF9CA5722F885E2A059665E2B499B5F6877A9E024F0820CB17382DBC37282003D4576B9ECB46ACF7FFEF31F7DF45156A5781106AAE49CB23164025E26EF05DE80DFC3EF5EA262AC16E25913574052AB76EAEFB6DB6EC34115662EBA05AC0CD9B84C566BE8202BE38C304DCC6A076D0F2B1C02BA5D2226502990890E8E38DD320B411A38080AE2AD3230120788FA5DD81511E6BFE94D6F829EBAF9E69BB91A62024505FF4196808380CE3BEFBCBBEEBA8BADE6AA939684C8B557AE1C191CE8EDEB2F15F3994A653A930D3CA7836A537307A6DBBDCACA468E261D9F572C41FA436A2D5C7E247509DDE33B9BC476A383AB8989E25AAC665DB79E0963C4047EA0B21988AB5F2804300C61E0906F391B64F5DF123C42A2E14EA6A8817366CAD9593FCC631FDAEDFCD1238DDF6CDEBBE577079EDCB227F1427A2174EDA98604ED2D50E0AE6A8AA8331951479491A40AC883C020D8464FC9156C7FDCCED5C8A9274801270E4AE9DE7BEF650A0B911C84C446BA43B993F1857EBACC0C20393F897E39325DA56CC454B8D2F048F74898110498207745BC29D687C5369B4645CEA0C0D061B81B4D53C46529346A43CDC19B3972E8B0C494D060703155EA2DD189171010816D1C55A90586494C2EB77C136152724EDEF18E773011C6E347148A4A9BD93AFD1A01E2894E4CA02D96A1AD34EA43995BC91C9B38DA633000A36347FBCA7DD333BA628E07C830E608DC148CD514A789D1092D108CEDB5D75E2B34794ECAF9DEB5467248582E1667C1A69A12974ABA55290A42AC6F773938BF474FE9F1EE0C73F2A5B140C6B4726FB81F52AB50694D9F193D193D48F1954E6038D1A4B4248E8D469EDCDACEDC49DF52B6116E223E17997BF12F7C96DB6FBF9D27CA0E23E66B34080D9D14DA519AD82EFAD5673EF3994CB990D2044E9C14A6BAB05278CF2DB7DCF2C10F7E5066A00A3904735FF474F0713924B265CED375C089DC53D1F374D1A51226223E0E2EC8DEBA24E52C62715840C9B80D6AA2AE521B150D0305BBAEB8843DE81245BBB1282D156A65BD61C3BADE7211EE7636F4A6A7270BC51C343B71A2F2A5B625E8360388F4DDE383CC2C33A03B063ABACF9139CCF11C4B90885A343FE0CC26ADC4813855E186657476C80942D777A34CD6CBE5DD0CBCC64065025882820EA7F48C62276A6B4B00C985F3672293C0F3A19AF2355882585B82C71FDBBF65CBA1A79EDA3F31A38F216B4BDC0EE9F32295BF3068F2800B508DE6939C66CC0110EFCFF5E99A91DE65099CB96C6002EE1002121B5F7FDD75D7C103900CAD6466F8036E863C42FC0D76D00ED3554A0A445F8748D9209D174B4BA0E651A30BA091274EF8E9F0FB33CE38E39E7BEE11678B4A86812F19497B7B0C08B032E3998B144A5A63E379C220643B14DE7FFEF9E77FF5AB5FC5AAC2633E74E810018DB675E1B377540DEF49F06DCC48F0105E73CD35F0F785569E428CC763C10D0B77D75D5F8727C522F5C478053E82966FFD80595F4FD4CEC22ACC56EAFD03E5B1F123F97C3636BD413A300FB38D66757878706C7CB4D96E14F2F0F7E1FFC2CEB54AA51CBEE5F0E1A36675F22C13C5915ABB4EB70B985D775970EE4C92899935634AD4B6F952B6A68E5E785AC5D3BE9C941185A51BEE87F4317AD6A0151955CF7D75CD180095D2342D882C52696C211E37ED1F1F4174AE6371922CD6E5C0988907093FBCFBDDEFBEE9A69BE8D4B0930BF706F1FAA77FFA27AA636578847832550A53639595FCA33CA85449CAB8392C45BCFDED6F4700CBE145D2EA45BD4CCD15A563F3B820713A678D8F493B217E992404E496A8CAA90E106B420809F116F4A4CDD5E5CE655990A5E0E197BE0A5A174693F2A4AC030B55A26D6BF1FE4B2FBD14C24F5B1EA7432F0413625723ED0CACE473841519DFCE33254631C55F68D53030D8B76EEDAAFEFEDE48034775763413CE51E8E2B3BBA9F4267359316C03301744A401A31D7EBA3447444FABCB9674CC55E4BBBABBB8ADDC9AA3B3439AA52E08BD72D6B055C32404DABA98DC35ABDBBA449C444EBDDA68D5E163C51DCEA24CB9DD4A9A51586F044747EB5B9E3CF0C46F77ED3F70786AA23D32320219E0328AFEB5B576D77ADA591406C4D2BED7A5F1C533A00FC70118769B5817DFB0B8DBBC139C539A67FA01927510C637519DB42BD29463F7D3481955A0E46C0491628F3C5A578E48E21EB200B1C1582A1952E364E25A10A26F7CD35B7EFCE31F1F1B1DCD983AA5261431036B0F1F3ED0DBD7872F9A9E9A5A6E167CD63C0B5425EF4172DAF4515EF8C2176EDEBC599F6265F5B8D200B080297821B6B6325FC1A00C0B847B0DC32C3D68D25E7B6E36D1DC150811359F49262CF99EC612C451902F64C6C78F96FBF2A63615CFCED6B432CABA533353898A7A7B4AB5DA6CA355CB66E0A8362163C562A761249BC9F3D035753254192E5C72C8A43656B7B0478EEA48BFF838661DD3FCFEFF9F25604919CF8E55660E074FCDFDC0975E70C105F7DD77DFD6AD5BC90DF7FAD7BFFEC1071F245184BE5B93C197A55FECFAD2049BA4A38538A943B836878787C965B8C475AEBCF2CA4F7FFAD392D063065F52F614A9E73CE7394F3EF924EF4D40B4AC5FB1AB85B307F003769CD835C10B50ABD25790A2AE4A8146122CDBA31DF812788F045B76A6C54B874CF1CD8CA8E274F6008FB132232711E74A1B39C3733537DE97562CF96AD6BD701D1249AA34472F2CA7D83522469274921FFB2D9822206A4559C805FCE6C081035DDF22C030820E98F8E682DBB90E1234B1FE615C5AF3BC03E5F5EB560F0EF6BB2AC69D4204F43C82B933783B121B0B247481C8C03609E9C7995632BF718591C2940AE67EA49377F632A68D39821970BD162C41984960098A414BD782430707138626B5C77080E0F07A710B5169336AB5034FBF077F683B99662B6EB6825A233876ACF1E4B6435BB7EE3E78786C72B22971F929A79CF2E8A38FF2C88866174B208F4C175ECABC0CA9ED35E95A1079619D61EFE1388AA3433964A25C92EFD2786C4FAAF9F8C73F7EC51557400CF07E1C3AFA558C4E24D3CB43CA16078A197E49CA68FCCB0886D00349008891233ECDB120857CB1BEC59FD7AC59F3CE77BE13B7C18BE34E28451236696474A94CD073D46E3B06E6A77BD16BB5DEFEF2E4C4440E8E0BC208D824984033A56A6CF4185596DC95201B29990EB787C953195D4BE702A1D0B7BFFD6DFC8CFB90CE69C61766355DB60D6742C389DA8A74433BB44A58CC667A340F498267869F1F22209DA98CF5F517A76726203CCA2494B23956266B33D58981BEFE8989B14D1FB8F4FBDFFFDEF61DDB104FE0F9023F80AEC00FAED2AAF0F0D183B96C8E698D66838AC338594EDB3E005255FB235A02EE251BB5EC205DC829A90DF106ACDE6B5EF39A471E7964D7AE5DCAF2E597C0C50B140722423E3BFCF0D297BEF4473FFA91E0F159FFE128B7C52C016B5932DF03624D6257BB515CDC226965A4CB8FEB0B65933296FEAD6F7D2BB69E5A0F6F664158596DEB947EB6E4484F032359CE0650A683815C6C04A40917AE6B4D8295321567D8119DCC53210D2E7827429C2F7EF18BD4B344B8B19C28BA40F62549B902C59DC4B93AEBACB3FEEDDFFE6DDBB66DB425CF7AD6B3B66FDF0ED3FE8637BC81AC612A65399684215B5E893A65228BF4B41225D882345FA8649C11CB892B56AC208BA44A4752531FF5F5976009101C877A3A4DA4C9DDBC0E4DA6ADF1554A9A62EBBE2E83D1F5B3E7A8B492CC21022AD5FB919801311E1466CF77433DDDBEEDFAADC04FC28C0E02727EC37C36C1C94DFB930353CD2B40A0DAADA8DDD417CC84705A7D981C04B4B55AAB5673666BEED87873D7CED16DDBF71D3E32516D754867B1FEA79F7EFA030F3CC08C102B3A52F511ECAC50BC6CDCB8110A171A50BCE3052D013B48283FCA627921FA8B7B218011270505301A60142EFE2E5BD858C122D2FFB6DB6E83CF277BCA84FBC5175FFC95AF7C05F7230822F68E28430F878BC8E3085AAF4B6C9806E4D9612A12774B3C854DF1A2E68EA9E147FA074C5B35A4DD94DFB47E6FB54ABAD747276CB2B91C278268BFEDD0A142B158ADCC0AA0D12E633035D7B1C47C6C295FE0C8BDFFFDEF97F930BC690E1097D0C1207606EAB56605EE8F0721C8D4EA0DCF093361219B29877E29897DCD8DDE44CC58822508424DC2BE77DF8E998A8EC7755D3EA30E1D3AD0532E85A17FE0F01E84A6307ED395C9DE72AF7EFE66647C6ADFB01BB513950C1A6E263C6E2E9BD795F45A338A75522C4E5A569620EAF038EAE1C36914F9FF6709981610D60495F2F5934287C6805BCEB4202B84A232DAE930EE252C01B699A034C82E6CDE39E79CF38D6F7C838D63CC81AC5AB50A8A9877BE34BE5EA5ACDDA44D6507A3CDFBCF9FC5C97ACB5BDE0269A6B2239A0D6F637BAD440CCA6A3827B296E22EDEDC35D75CF3D9CF7E96368CE86C5E5C52315DB72A07C34D478A33B7C6243EF3BF2AF59248D2C0D413EEFF431FFA10E493A50E490A759D2E5922A1FD59BB762D6CB36C1C5B25E052B10F08928FE725AD3C597DB0025879E9E6A3FD8072C1B940EC351FCAC9C7910800FBC55975FFF55FFF25EC5BFC46FC89988BFDFBF7E2B3BD7D3D6BD7AC5CB66C281BEA661A980058021B2D2A3EBBA8123597365554A1AD16B58DD7EAD5215662AE31383EB5C9EE47F37C2C178B01317CB040FF4F3352E4BC96C67398A633C613048F7A4E99164B257A1333597881FA80B45B6A6AAA323959AFD6BCE9A968DFFEF16DDBF61D3C34566977B2372CC610D7C0F97442DF6D57D19891C35ABDF9CD6FFE977FF917A233EDD6C86ECB67B43CDBFB2103380277DF7D373E7BC20927406B75813B59489359F012C58A0F81AB913142A255FC274134E21620E0D8BB772F69F2D80C8CAB216A849301C30F25204EA4EDA412E9C42AAC247FA4A75D9C744A35DE431FDD2E8B4A6B2D635069AB82B8C261E2E0100ABC3261849332EA4BC3801DA9409EFFF11FFFF177BFFB9D2327075F396B5E92F0921125D75D771D3E805D213A8AFC2DB95C015B1E069AC269A6329BCB147593A19BF5BDBCE7E6559C8131C0E2077E318E5BC552F8EC13D7EFD9BB7DFFFEDDAC0D1E3D7600FABDB7DCA39CA85C2EEDDDB773DDBAB5DB776E0F0C8A0096BBD16A687A22DDC7A805A2AFBF8C1D456897D1A63767120E6C05EA046E1AD2A6352F629F66946832C53F8A25A04FC7540FB3CF8C2B2101D0CE8CD7380E09126007014264681BD4F92FE16CA07DA5CF4BDB23137B2EB9E492DB6FBF5DE6532F781D9911CF6608112FEEA01C3666BAD9492B58029B6451644E7A20393E01C2D4D55BFF8C673C63F7EEDDD08F4276C82FC5373280B071994CC753DD2F6809A274E4D3FAF5EB39CC80D15262689D18953A293B3CCB30D27C6BBBC9DC2637ED40E6E9555686076A8821851C72E996E7321203463E54CAAA0CDE113A96F996C04D792F9861E3AC3A76C9210441B00F2BC225E5505893BD71CABDA535AB578C8C2CCB65020E30F7DC9867B59D8E62EF60E19DE38EB09DD8491679F9CA49517354F89D5664C79D131374FEA6B3BA58072F13BA70DA3C3F817F6F2C8197D3F922486F5B23C313F9ACEFAA42C7AE782E2784E3BEB47BDB888F8D4F8F8FC10DF7AB35E7F0C129588203FB8F4EB53AD46C946D049D3FFCE10F5FFDEA57DF73CF3DF4D6D9B5675B02FEFB177FF1173FFBD9CF88FDEB6A69B22D813DCC43F69DD3A248E3C8D5A0A4C939955E62493CB2DE20CCF3B6C0F326ED51DB7CA76C93C4DF5FFAD297B0E32290768E6BFEC9C5055FFCE217C36920E39EB41174F934D406420D29C9253A6775F3A2BAFFEA57BF8A6017DFCB48543032AED55F263503793A4750B4CC4691218F69221C06386537DF7CF3FBDEF73EE19359BE7C98E5DC42BE3CAB77C5CF657471BFA7D4E738814AE0D2E0DFC0F77286972A13477E657672B63AB976DDC8F40C8CF3184B7989D2CE72B1943F7AF47033AE9DF49C139FD8F298BE896C303E39EE39BAA0A787FBB5DB555D4C767DC7E73984BA33E6B763DF7C4F4FD163078D26538F9AAD56B31DB71D95FACE7F8CEC109318CCB2498587F3A0493642500D8B93ACA672C2061D90A5313052A7C29A639D65102BBD06FC067ECDD6AD5B0563BED87548CB2CCCAC443E283317B3AB8F41D29D321C941E1085091A1C7FE2D82FFA2F22E8526EC5CF679D75D6CF7FFE73BC4D06531317888B40B8F19E57BCE215DFFBDEF7E87FD9F44D0B6687D8AB8C379F77DE79DFFFFEF7890EE46C7165704ADBB66D53C6E5BFEFBEFBFEFCCFFF9C87B60B62AF52E4E571F936FD92BC6D46369235A2B72550575C90990126C4A0C7117F307E272D1D3E7BE18517DE74D34D4B6787B850F6200A359764DF56673DE5FCAA95CB57AC585ECC67F1347062E0C18825E0A1EDE4739339D1805D52560BCD3176DA9A5D2EED3873ECC8A0CB12F03F4D2EC8D79620703D33CDD8704BF8A1D73627A86D865F461D33E0BAA197519EE12F7295AF172913694BD09E9E6C4C4E56A626EAD0C3F59A73E4D0F4F6EDFB0F1D3C5A5309799B991C235980B266BDA9B9D921DE189D1546518981C92F961DB239B258E995BE3031150C8BE3747894B4AA60471088FFE0073FB0296768D4C90125CB4E5F1BBB498F907BC4B17DE4199B1FB5D8516362DA92210374E705EF0E7DFBDAD7BEF61BDFF806EE1CAE0364927106542EFE046D202008A1C03189788D8D9C98E0BC3F1F8B0FAFB9566B04BEE93F68D40BF902A91EB5B9728E0F6512D34B280721249A478C2B72D24927E14860AB20A65D212DBF9EAD16CD66DD18D8A05E6BE77245575789A0ADF0459950779FE754E2476D8D20CA668A70DE8DE26EED3DBC33A77B1FDA6126D080355D7B728E4D1D2BE74B85225CCEC2966DBF2B647378C3A5EF7F0F5664CFBE3DD018B90C23A93A2156B96C81792E5CD39847BDF7819FA56FA47493335643AF723B6EFDB12C81C010A5178C0CB40C14A4D9BDE358A5C94D957278D0855C02172F7745EA121C0F3C29A9A6A42986BA521AE896B058B8C89BDEF426C8B4060F98B48CDDFC2153F7921482E9A6CDCFAF7FFDEBE19D112E4D9F9A23E7E8470B2893E002A93F6FD9B2C531D43A3C60F81482533844AC2449ED817A50F2E38B558C49988AC3004786B935F6FBE0FD36250B7BD36452BC8DC790A5389EF448BBCAA55B5BA2759A67A9D8DB8BC95667926D488421F1DF82156329C20B60897FC551C22F196A33919892013435B14A3E58BE6C10DE556F4F5163E7A29658023BCBAC039D780EEF905D1BB35FC7A1386D1398061D6D2FDE7F8A23EAAE186B2A094F4F3636F560DDEA0CCDA9C142BA0E87C3A52D01692A5827C8F89EF2133385B30DBBE17B59E57A515B4D4E366B55FC2F6AD4DD89C9E6BE3DA3BB771D3C363A5137B6D326C0A7A2A751B49F2549078AC1549F7CF2C9FFF11FFF41F160F692867CC18A318BB48C80D99DA02CC0828D5813775BE607887B6427720560833B61DE5FA5E4894ECA23429FC0460788F294428E7D939221E0E3BB8682947D0689613FB5B94F704BB7DC72CBA5975E4ACA0052D37798349DC4A8C1CECE722571E5FEBEC16363C7386CBA325B11746562D5E4F9110A9810FE3B42798A189613903962D72670762DF26B65547EA3D1D22357836CD4761AADE6739F7DF26FB73E55CA957B7A7A3D37D36C449073CD68EB8787270EAF59B672F4D8A176D4A1323515670DEA9A6D55727E065E3C0C5AB531B36AC50A0DC2CDB439276B627C6A66760601072DE7C0C0208F6526D47E2E5431F3182A2178160F8AF3D3D426BC59FB235A025B87DA04D1E49E13A27319B3275373F97B660F65B4DEFC176D8C9446991D9211609486EBAFBF1E2E2A645106C7CF7F51FA654885B07B2ED69C22AF2E380D4B67329715BFE7FC00C932A974BC8F747B4856574EB52085A46FBE2BEA97B32128529B8F9A6FB639BA11287CF39BDF94EE42F6FDCB86DABEB08C0C72D3D66B463C3069422D875FFEE55FFEE58F7FFC637AEE02E9E120401C6958D33BEFBC93C315C48B978C939D8CB2AD823CA670D633C8A36A9079D7E97D9A6D0ADC81FEF2B26543B004D01BCC0E3131D865095A6AE1CE32D7E2B7B13DD04CE233E44ACB03E934CDA4E9CC7BF17EB408E9C968FA34E99135B00401226E8232624364D409E334D39CD2DCA5DA88C7AD043107627444090A763784A26B359DD9D9F8F0C1A99D3B0EECD9751851422BD12D32A79E7AEA534F3D450E70CF1A3A66DF3CD50E579B0473584FF69A2C66F6549A1D626A851195C4EEB23BA2D06C0A1665315D0BEF058FAD4DEE6F0FA015BE2C52315E695E94BA249D802BD34DE6C7F136A281FD8F8C98596BE4C915C426EBC6381D5807FC529A7C1D030F1B1CD4FD6E95CA6CA9544C34FE6D165F0533D06A43019A56A4FDFBF2B97CB5564DE6B6288AE8F256996E791A9E7AA60264540B04B2DE68968AE546BDFD96379F7FCF3DDFCBE77A4647C736AC7F26BEEBC8E1314D4AE2F83395A90F7C60D3C73E7D4D4F98D72E869ED3AD0CD2C6779D6CADDA28F514021F0BDA3C36335E0A0BCD56CD0FE0493512AFC94A9167C8F66ACD1A4255BDCDAD4EA73E44C875824AAD9E718BE59E815A35D642EC434EEBAD76B58998A0558B0C850BC4DF409562DD6699682A248A829CC6B3CF3EFBDE7BEF256E8C71287E4F7E41BAE14B7760893965065CFC3E9B990E0BB861C30678C73FF9C94FE8830BC3B678C70B5E9F3E2FAE40703489C5E96B407494C9F960A70F1D3AC4FB24ED38E3475C1F9EF59BDFFCE69B6EBAC949BBCFEC393F6A4954AB94D462337BEBEAABAF16C8E9FC972139EEF8472498D29CE9F0C28CE9750473154519439B054F2297CB1AA843840051C7D75192CD659CC465D4257C41AC63BB735992ECF2A9B248B5A4682FE185984C6CD30D37DC70E1851732034694277EBEECB2CB3EF2918FF09D32131CAB8DB0E6AAABAE9271254219648FD5BBF8E28B3FFDE94FBFEE75AF43F8C52E48EE35B78C01B832B14E6281C7A5D8C0EB382EEED32F150AE5DE52B958D00DC65A5B274907F9605AF6D3226D2B9983B84F16E92A909DF555A725CD0F3A0822A7C39415104B0ACD6E422AAD93F1BF8C7E1F14BA196FA98D873606F8177AA8D85B9CAA4E3BA103F73F9F0BABB3333DC57CCB699B5B8C12D89830C0E66672DA672FB447DA813F36331D35DDED8F6EDFB7E3C896A7F64C559B580E6828F880AB57AF81F585CB0A0F32D6C0F3E3BC6CE22C4BB24818CE99ABC10272827192D222D85D02AA438599A762B5A9986D383FBF8E2C58F0BE6520AE345ED10B116A7496943FF8C10FC21BE3B748EBBED00C937CCC264711B740B8F3280FAED5854AC75C3C24280AA87B4A085D13DEFFA64D9B6EBDF556E192A31F263D95F67120BC423213E29CD10A4A1B0425B0AB73D3595A2338294F9E1837BF136EF89920BF62C5AA5D7BF6E2E79E7C8FA37CDC61BD86404C0F1DC377C0E55F35BCA25A999EAE4EF6F594210410CBDE72FFCC4C0D5164FF40F9E081C38383CB88D6D22728C2B325ADA44E150953618043B4BDD3ADB8F17FFEF7FFFED97FFE6CF9F00A189256137E47DC5249291C0C35380AE16BA3CB12E8C64927D2FFBA665A60721C3AA613A0C67994AA0BFBF784435F7E5E22AB036D8B8DBFE8A28BA070D904CF0C207341E253F866DC31DD6AB1A9DC0C0ADC821787E4E1B2CA2431A4C3456C186C0042044298E14A4B214E9838550A226203B0981061885AECB984839642F3FCE73F7FF3E6CD9D61448B088AFD5F0648A6390787962FE3A355CDD980A6E038115DCF37218B79B4A69EA5654C177E0D7F87196196A0B19E44302FF8B5B1A1B9C7329231540E95FD204C4693D902DF2ED0723AE9580DDC06F172493AAB952CD65837BB00684FF14B4C2BC9FAF5EB1137E3E061D95FF9CA5722BC20BE500E0E3F2E74E80444897360D65F17693575652E572CE56109F205AD495DA713614466DE98146963D79333DF55B276E64142B5764F3A9D65DA85F7A5300C690C1D0E23337E91E901728D31700CE39182F3E4E90F622BB5DB9E0954B5510FB3F055DD7C2E539D9E2984997C2EE7680BDE6188F13321B16A3A63EB9567A276AEB777DFDEC3BBB6EE7D6AEB9EC7B7EEAC2B3F69357B8AA599CA0CDEABB367ED8E6331DF1992D80EA703426E4FA26598C5AE3DA1F2951093119B665C30E457F427C81B68FBE6B60A168E6BBE817BC451DB360D0F44113F4B19992C0E0C228986A2A5A7DD92D8D149BBC4F9296925635CC5C88FFA8189D3356BD6ECD9B3C7A6E4C3152069DBB76FE715ECB03BB1E6719E74D2494F3CF1840D6E144B4075248DD3E2170A5AC91EB4B7144FBDAC856022CB3DC5D94A2D8A937CB654AD3787FA97F7F50D9CFAC217FFCB3FDF97CDE671AE6B357D9847A7469FB17AFDA1C307960F2D1F1D3D62A8758EB55A517F3FF669D4F702C4357B8FEC1BE95F0959D4363370EBF52A1C8B8999A952B1305E399671BDA1E1FECAEC64AD560D42B6F2BA956A2597C9B59A0916B894EDD7021F430A758A13960071432B4264504718474BA00C820896208995AD49EDD4306701B230C5F5C5C64071D325594C531393801FDEF296B77CF7BBDFC523C8B844958E255056CFD4BBDFFD6EF88F070E1CA03AE09D2CD1670047E0FAEBAFE7DD0A8D5A7F7F3FEE8D24D57013DEF7BEF7F124E04E985E148F830FC87FA58AC52CBFB4312F6609A810A5C68B9FFFE44FFEE481071E58F0FDF96C0EB1E78A9115070F1DC421676E070E3F5CC5DEBEBEC98989B24994E3AE60323F77FDF54AB753E982076282528F6E91C70FF9424E03BED28A9FD09ADA195B11CB8E476205FB5D67800D0782D27BD9CB5EF6D39FFE947FC55290559025626CCA8D37DEC8EC10A90C697824E74B13289DE4A25CE6AF984451714A7E492757601EFC810EAC799C44A33C0337A707BE646109F47C927C467BF07E273D0D37C8BC596BDBC871256D4DD775416370BC4092743ACB0C17909B566563CD18AA93CBC72D01C4D051E9F82658020DE548CC844BFDD96C6F307E6C62CDCA55A11B1CDCB5EF39EB37B6679B5FBEFD0765A7E303E82202FB9975455A556335BCAEEFCCD79F736CBA72E8E0B15FFDE6C9DF6CDF85A04F3553BAFC761B82313BA331C7E552CFB1F1311B06E3A43C715D88BBD34F3FFDBFFFFBBF2FB8E082CF7CE6332CF6D8231CF8A2CCE02040BAD8C98CA32D0CC76A6E9585EF7FC94B5E82CB4A7FBB7C9DD484F02D64C7E3F161BB95327003048E081FE984919F8E0E9F14D5E4F808C133533D5DCCA0EC926153177CA0246D30E21C2AE61BDEFFFEF7DF76DB6D7A0E414F0F7ECF9675AA20BCE7CFFEECCF70877876A64C05462891AE63A8B738365C783645193EBD25901CAE938E7DC7457BCBA5A9A9999E52AF4A703C14C203CF0B07FA87F61EDC5FCC946A8D566FA91F1168B55A79FFA6F7DD7CF38D49EC9185BCAA5F7543454BB291ECD1A3A3081120B46C7B8309C966C37CAE746C7C142AB45CCE5766C71D0F3F140F1F3D383C34FCF6B7BFFD1FFEE14EDCCF283C85627FA30EAF29CE67FA3319C49D2E6C40A359C5BFED486F83C9B746AA53EFA225700824C76E516F920C8BA35778DAE1399E78E28930CEF7DF7F3FD43A1B3A165B1FC78C5CA60BB976ED5AFC8B4BB1E542EAB792F5930F0A2007C1E0F9E79F7FE595572E767DF6F1C9F8AA2ED202429524F3C352B0A45FED728290EEB2FE4F4766314B604781CC90B01A26B336E7DF27560007F5E1871F26B39832D09D580F43D7A9E143070F668C57CE86098DDEA95643D3E4A2C3055337ABE37499DB79F9CB5FFED0430F7188F1E5975FAE94F44375A454B4BFD41EF1665E59605D32D00D8F497A57CD869222CA9976E3A3497FA93C0E44823729A320A88FA89B1C6BA81645083FE3234F3DF5149E948562D96BA9553829EB94141EECB26426744BA5627F6F4FB95CD203617221512E71D2360E5DA72B3B72946D097864162C1BF087C0E9F0928A31E8608D62652C81A297ACFB01344015BF090D6D7594C05AA8B6A91EEB27A8FBF5E503C3F5A97A4185F7DDF3EF386CB3E38D82AB8AAEEF2469663032F1B7D9422FF40E372327ABA6EBAA50CE37BDEC81CAEC34FED66C78618893E09243B7D92CE60AC38383FB0F1F8A2D224895B64D382905A1D40C94F1CDD31442779796D44265D0D8F1D2A6F506F919428BEBC34B403C47854BD406E1F95D251FBC939CE774F95966808DC10965CF0145A28BB80C1FA18CD9E22A57A65215EF47A570265692E9C7105FC0EC25353B2B4FB60B0289E27005BE99BE3F2F2BCD744C204B4319F58FE0AA8F8B905AE425D54E0A1F2BD4A562F6D0A1D130C0BD46BDE581A88DF5D5F5DBD5ABD662D7F61E3C30D03354AB36E0C5E7F359C40181669EC899D207D98363130ACDCCD666579AA93590DE72CF40A3D1822C8561360C4AF97C66DFFE5DADB8D2D75B9C993DD66C55580F99AA4CAC5DBD7AEFBEBDF95C51F30EB59342BE1CB7836C2E8497D0842568D49A6DC42B78F296EF25ED084BAC655AC38ADA4A3236DC306E098E31FC14B2F109447D85A95D4B1D78C1C521BB3A93BFF8CFB7BDED6D77DC7107B750EAF2CA9A6E41C521081361705A6CFDD9024602517C6AF5EAD53B76EC607959DAB5ECC886B53501C390F49F254A92D3D1E561126389EC904A87B8B1A5569926CFBFFAABBF4208B2E09B996727CA13DFC2429C8EB8C300EA4ABB8B093C4253E8E60FB5DA00076A1ADF50C3211A0DFCBEDD6C89078D47F8F0873FFCC94F7ED2B5E802BB2C012BE4A4E510BC93937650F349F9FBBBEEBAEBBCF3CE63C50B9FE5AD32358783CD7583FAC0D5102E9C7DF6D93FFCE10F850A54F438EDAB4A099A08EB96E38DA3C8E5E509B4F1639244E64764FE8190C8C295EEEBEB191EEC370C07615647051D56EA56BB21092272AA4812436877BBF6514C42C60B9914A131E8C40B9E134706B5E9256209E0D2692DECE5F49082189AB78D105AB71468EC90EF0471C60D7B83FC4871E8CE1BBF0A938EF7F5BAA5463CE3EB6A844E0A1B63A20CED975355492ECC8E36EB997C76AC5A47600501457419E60BD57A2DF1DC679FF89C2D4FFC161B8990A35C2A4D56665C8B8C214991EF321ACB31187919632ED3C2BB723E760D5FECF77C20904AC34AD69671AC76EFDE2D250ADF9A412F8D6CF0D5BEF8C52F926011B741400DB43CB6157FA5405289F33CCA2C71CA06058F1CFB921E6470D0D51BC45C0D034AF1D51C33E2023E963816B80D9E32AA7E9A0731847459DC940D9B7E0F6D00A49423B5058DCAE8594CEFD35802BE9BD92B3CCFAB5F75FA238FFCFAE081C370161DE5978A7DB861E8717D141DBF1D25BE1B96CB7DF57AB5529B5EB17C244E746A72FF81C365DD70A0B5525F5FF9E0E8C18C17BCF8C52FDEBC7933747A7FDF50B3A1630BD70987FA578F8F1F85771F84D1D8C4C13869F40F200A99A8B767D6AD5973E0C0BE16B4BCEB2F5B3672E0D061EC75211CC4F93196000E72A5D96EC4899EDDEA3A51AC4723684BE0B809D39278FE55AB56614B68C9110140DD20D4204B0F1BD609A2C5D230E9BFC4E270F5F959CE029584328FBA2DA3CAE2DBC19967067C092C10FD0808010C00259B09075CFC965B6E41584A11E4B7E3B9A03ABFF0852FB00866A7F5D4DC196D4E3A426FB1AC148E81C07238F7CD06442DB00EC6131C59B1E250DA5F962136AE5ADDF08C67ECDCB1431FB020409845944EB3D1667B36A1FD4C64D7F46F3AFE115D33AA4BC99ECDCF0ED923A0C5BBB15BC91895D3F2CD2F7713B4875861D7AE5D323FCE5E370183F274D94014221A782CF144975C7209A448E015FCBDA45F597EE7F593747A949C6A7D651F716A79D9D0607F7F2FE4C17558E1EC0CD98EE2CE07957F5C9149B7818896A072252C08DD20557F9D11F669B8601A0B8E0F6E710C29A91E31630C6DA49296A693238A347097177B268F1EFBD583BF989C4A46941ACA151BB5D9507352C3E5340F92186E8C2821D351808F16338FCD4C2D476411BB08D3AAD9F049C4DC3DFDE333539952E1B43FFD5F3FFFF9CF1BB55AE07838A38D24B2DB1EF9385E3A81CE3E0B4A2919BA27CA5DD4A54A395D64B3EC8C909C02A9280803BF4AC7F77261ED62A134BE708226676C08FC5AEACF4EDAF7C03094C0E56BAFBD16CE1334AFD80665DC351C4FC9B588D6EE02C5DAB10E33018EE9CDB4C7357BE96459BA14780422DF64655C6BBC2E5B7C38F89D288C389D926DF3252F9A1D92E4A3C8998E92CA9AC1B1A96924F29EEB673205CF0D19B3E472F839D36AEA0EA623E347D6AD5CB3FFC0BE7C310783315DA916733DA6F3A0CD6EB2673D0BCED933B76EDD5AA9541158382ADB6C2471E49672C3996C786CECA0725AB9BC3B531987B4C0B11E182AECDABBA3BFB717323D33338B8380A390F1B3AE2AE4721AF8D0D05469555802D30C09E96E9AC1AD6D2C052C414BA7A1B573C15A2BA911789C984F4C0C8754971FB1444C203965E175225451F6A90BAEA0A9930E1F86022251499236762D767D9106B12E8259D6FAC2C8A88DF127C33EBE85F326291CD878D88917BDE8458F3CF2885C990CD88BB53D27E9842695D6B8969EDA98CDA7A818B25318278559971B6FBCF19DEF78C73253079E9C98F04C7814B5E2A2F1B9B0342593E06AE82A1102083D5215FE178E90B074B076B7E0F7B2B4C3260C98E15FFFFAD75C7CA16992CA3C7EC009C45F49A8C77665A9A22B434CB47FFF7E9A55FC95C2401639C935D9C021A9DAB128F28C673C83D65A7AE5545ACF94F7F35988FE4AE1B3018788F99E5328E48606FA878707F56C3E5F58258C76509DDE02580295664E2420E8F2883B7EBFC96279B19FE2A73BC680F021DCA0FE4F4FC696B98EA918C78E56B5AE3E3291AB230927637A0BFAA793FF7CF03FA27AB2AA90EBF58299E9E9023E11273D69BAA91D47FA59CDED6A7C60AC7AE14CD466324108576A5A5FCE1B8BA35D4E7636A9B794BB66E3861D7B7643E9FABAC817C50B81EEF99F2CBC41851985D394CA9C9376DB51958B22E66763333B0C8E4B9CCED2B02D01DFC0232F34533CC27617886034042C2EA2E518CA4FFCB56BA0A14D02219A1AFFE24892119AD3BC6512B23241000B51625A6CDBC624211661E7CE9DD2FF48554E73C84E524937D9B1889332ED3374C6579086880BC2711D8228395E3E594C232C583176B4E705EF52057E269F2B4DCDCC0EF40E55AB35F3DDD9C999CA70DFB2E9E98AEE4909F47CBE20A35BCFC2A0D0A84793954948B6A793F651E005E572C940A39C463D5E3EBCB6DDD2FD29AD1A020B2C69AD500C95D3ACD5A711C9CE54265A6AA25FB7DEB54E3EF9B9BFFAD5AF601D35E19D1F38DA3BCCEAEF6A37AAD54A2BA2018074B71813E000BA9E6AD435651EC34CD9663E1714D645175D240B0A3D489D22C8E2C5D6878B6E03FFE9484A8B8A087717A05EA67175419EED173F2E997DE958A6872BF32C71FF975F7E397C520E5722868C5BC688155778D7BBDE75D34D371103F3B48318F1157FFDD77FFDE31FFF1882CEFA36793516951326F88DA6D356CDA4804852A80C13162215DC00CBEFD3383989CB94914A4B1A71674EAA4EE8DB597B49A9AB8550A4F419F97E7B2AA7AD7F95D543C45E4A665189EA2169364E05CD1E3BC63FFEF18F633DB974CC26C166E0ECD1BCD9706C21D0A7D1654A41F84524E2E6C7F1061C3C881602C734A147908FF6C911480CF4F59A37F4F7940A10F234B961724191F60423A7A3F7EDD4904A99E9241A10EEEEA4C9DD89C412386CBB51A46689C51270EA64A472FA6DBA770CEFC0D95781E930D8F3C3FF745AADBC728772D9C96AB51F6BAB61012A5F7334C7A90EBDE3962E14E02BF45737138DD9C8E4DC562D1E2E951AED68C6550766AB3BB3FDB371EB5873A60503053B04E73A9385F3E6A615758966246015A7DE4D8715E2E4C2E9211BA33274D0D47D70C284980BF7CC740A13EB32274A2C81E4E5D4DC5EF48E614B8173A46C52C6DFB26546262925294134C308822C5874A44F80F7E00E3FF4A10FE108509C10644300D8A22B819D4CA1A087AE4CE8435712FF22FAFFDEF7BEB767CF1E5E13DA1F57E0209D0B2EB800575EB76E9DF05DB275864A4020AD12FD7CE73BDF39FFFCF3C9952D4D12CC47E934065784F6C149D9E8D4927873AE9AEF6B9BE328CD7A313D33EDA8CC60DF10BCFB899929180368E189C9B1C181C14AD5F8EFBAD558A789FC306BCE89E3BB71B3A19D9D0D1B36EED9BD1FFBD5D73BA889E782FE4CD63443B7A0BEF186D976722C4AA6A2B6AB939B6E2B8A89FE7666A6AB084120518343FD58C689C963AD560362D68A5A1E7C9CA466108E081211CA3A23CB57EEDDDB2183C43362116FB8E106394E42524F213BF3CC337FF2939F40B63EFAD18F42C9127B4B51A0D2B117841C84940FDB0799BF6EB0E7575C7105DC5ECF0C32644293748C2AC5ABB0C873EEB9E77EF9CB5F5EEC3A6E3A0786396B19C3C29096EA895C3D4F3B5965FE8B1ED619679CF1C0030F404AC8FA20418F8EF68E1C11D0AAE43DE980F0B3D4BC500E922AD56A31D127BFDEA8E7D2163C1B8F4077CFCE62F16696C056911C8917E175349B664A5F6337BBC94DDA3842A1F297493E72B0ED5911D215CC428B706EE323F82C753AFE8A6082FD3E023A92B05DAA32A2A718CD98D8ABFFD8B1F1FE011CDD693CC7C8C8B2B56BD70EF6F4403D418C67676788456AB6E02D452D03D98C53723AFA95E25E086A88E96FBD2C0D8915B8802916DC9D9350928F67836C2B74271002660B5EA359D2EAA351EC2B4D7EFF3F11E36434485C05B1D26D01AE069866B4A7E7458DA88E5BC3F32A4D5511252A9BC4D3AD063C82AC9F2D41AF45D14C43CFA7DD826DCD8607E3B8E67BF51ACC815AB17ECDC1BDBB4914494926CCD1F6CD6DEBEEA44C8E527E77D2B92E9247C269C2F2BEF6B5AFBDFBEEBB8575D18E0644000414C0A891C787840BB83861360C3A6598A0AC9897BE78B7641F1222061A0F961938EB850220353F6E9F943A94956AB67784422860078126C29C40F567CD8B8182346CB2942B4871AE893DA7814BF7894F7C02EE0E8BA3F8209BF6F5ADAC5CB9F294534ED9BC79B300AE97C0CC30B230D59B592CF7DBCE7F47B3D55CB57255650A7219CDD61BAB47D64E4D4E4FD7A6FA7B7AABB54AA4BD2A6890C24C6576BA329BCD9672597D86232C858AFB4A032F3AF5B403FB0F1F3E7CD43799CAE9A94636A775AB8AFC484720CD28198FD484EE0B4B1AAED7AE37B05519DD90D4863805F5C8EDC917474686B6ED78AAB75C1C9F3A96CBE46A8D6AE027AD364C2BF46FCFD8F8849302DFF9D83CB136FF3E91C8ECE71690A500F0A158B1A9704960E1376DDA4431C245B07ADC2742C104C835FFE5A5738FB180F01AFEFEEFFFFE2B5FF90A7308D8632CA9F4B2B292B118D39C54AA29CDE79C730E5C06BB83DFB546353C2DCBC582F7A94C6044CA39E98C2542EEB39FFD2CB908C9DF29830AD8E129F37934FA766686BD8E72655A828C554953294D90E45E1909D9F9E2C52C012B0D5C0A3B5422F64E46B632404E526200665A6C6B2DC11C4769DA137554CA9D27C53DA232589DA6ED6161809BCECF12642203B964DC9BB29A480D34303735052777E8C8D1513D07C6D7D6F4E4934FEEC966355567E0D66A70A1B4FB566F54F592389D4E021A039622C4644A5E483494D79658EA788FBDCE2AA46CED5D7A27683B3537AE396A59FFB05F6D64AAB5437B77CF4CCF6EACE9E0C57335B504D6D1D3403C6D0F8C49803F17381A89AAE3BC968ADB51EC27C9ACD2ED3C81EB171D8DE06BA916CEF16CB678A4551F0FC3DDB3D56C98ABC771A5DD28F4F756C627A5BF5DE44188F8A5009E3E8B626A143FD36DE7BE509DB1C346A52C092A7587BB2E222FC2136898BB40AB241A71D229025D1446B268C49249A30019C3247094A75056CE5948969274A286B22212C927CB0D6B0289FE7E48266142325A80FF2963CE58B8E20D33D9056522D364E161F0A82AE366F10E717BB485B8882E91F2CF2C3C6265D9A1973CDDBC56F360FCD458B9A73C353D552E0CE9DEB046BBB7A79F45BCFDFBF7B65513820F492995CAEDC88525C865CBBD656899CA8AA10DA640AF06FA870E1C38345BAFF6147A023F030F488FCB0E324E1CC49197C4385263ED78A2DE9881839F2FC25FD130F9E9A90ACE7BBDD15CBE6C9D192003EBEDE5F2E1F4F464A44B5EBA8CDD0BA335A503FF95AB961DD87F04C111F4A67801425E685B60FCE7FBDEF7BE6F7DEB5B448311B246BDDF952FB655898DEE5A22EB623728702625F79ECA88B442D2B2B89825A08840DD60F5647A011604DF8E7B58B366CD79E79D77E38D376213972E472FF6EAE27464F59BADB9F852C443279E78224C29590BF1386481E7830877CA0A5340CE849946B3E1B91D25C8C00BCA419A06E4E4DB25E2646E0FED62D9B95B6EB9E5BDEF7D2F1D7F6A7C52CDD8ADD4F813A375AC1595789C7297CA75D86388A5A3D5EF9A3C45D9E00D9F74D249679D7516DC3AD618F02FE2B6D7BFFEF5541C7833FEFAF5AF7F1DEE82AE8BA4450801758825202E10BF81193874E848A954686BB0830E5E87870736AE5B8B2BC04E98A450ABA65FB37ACAB793D690D398402C8138AA92D0D0DF1879A9C4742C01D7B31D47B64E1435946DA99AE724D9A09C2B4C6FDB5D9CAA3913152CE2723D645C370D682A31DDA3192BCB18E811F7610897AC8A38A0DD6C99A9810DD3C5E3B94E2E569A8D122728174CCD369C3073CC75B6E2D995DB33B462E7D851AF5C607D4E66CC5191D15DE51D7AE9604ED93BE9DA65244A63ACCC3C0C958E15E36A0B35489292EDA8B44EA0E631AFAC5EBDFAE0C1831072FCFEB4D34EFBC94F7E92A41DE37606BFEB24E266B0FB070E1C80327DE31BDF48CA2F6824A6D3F1B6134E3861FBF6ED4C31DD77DF7DA79F7E3ABD01A9F7382981EEFC93CE3B24A925AB7174F999C9E48C612603059ACC785DFAE6E8E508570A4D88E4C40863C529EE608D6DB4E9FCA972F32D014F4B6F6FBFBE0FCF8C8E6935E19E9BD4A7F7F76FBBE8A1871E7A72C7965C98A937EB1B376E786AFB366C504F61B0D574F3C5BE81FE917AAD393B8DA7CA7B2ECC72429E06DC8CEECBC82B4D5701318BC2388220C1FB9F68C5138983F0A29ECBFBCD56051A7F621CEE5B2F2C0A1C4A9C1CDC43A5325D6D56201408296AB58AE7278D663D089C7C3E3B353DA3AB5C71877E920B21D46CC254E398D9F49AFBDA0CDA3DF7DC73E1B6E3F7506D36C5E0F2E5CBB11904DA73C588380A0C4246060FCD5F37D7F4B8338D68AB21E6196C8CDAD27D0CD8E00B2EB8E0CE3BEF644A4AA59925916C861D6CABF9436302658C16A7CBE2E2887884B591450B2CCBD7BEF635EA4D3725CF2078D986EE119ACD8555C613914665A9A2DB3FC7D64C8FDFC71270901C6EEC924B2E41A48277420CE0F84841CB33939818604912D93EC36EDAB88FB01D4F8447130FCEF601E95E71BB79F221F6F7DC73CFDFFEEDDFAAB915450E5480E4DC7AEBAD6F7EF39BB9024C85C9570BB1B04ADD2FB37DBD3395295C19ABDA5BCCC38EE2379ECEDC26668A7A0DC634B252437C49D95F5AB1A8133B5090B6348B51DDA7D6481D5F58DBFDCC39FEAC93C4193F6827877FB96575ACD67B419F1B4CB6AABC7BDFB8F9BE094DF0C962D6EC66A205009660BA596516B26D2C41CBD0D365E304561A7162369FF12AB5D2F0C06F8E8EAD3CE1590F3EF5A41714FFFECA8FBCF7AA2BD3E49512461D59A838652697A9A5D4CB5C6769F9E6FB79B2F02F84FFC89123EC4616BDCFF5913A33359E1DB1E1295EF8C2174265B3BF9D53D5284BACF488BBA32C6F983EB8D0BFC3497AECB1C7982556A6EC4C0BC1F1DAA27368B0696644FE6D4BE0A4341276772A891BA49D4599F4805C4D2C01C7F35121D8092E88252E287C6238171CC881EB700E8F4365443B2CD5CB25D805041A0157D87C0A01A546BC1E3D3CBE61FDC6F1F1A9A9C99956120DF50D8C4E1CD9B87EC38B5FF2E2FF79F8D7539355F89495E9C8F54AF95C7972B2E23B83857C096E259B0F8AC57C65766ADFE15D7D85B0D3121C655C27E363C5DC9956044B30DD6CD5E2A41A2550DF71AD595B36B8029141B5D5EEEF196CB70CA1901B359AD57C415B82466B16A1BB1F684FE1E39FB8FAC61B6E1E1B9B602398044A36CB4D924EF8E422D22AB0B04C33408C29F909440590AF42BA607E1F0BCA2F8516A053CFC40BBB99B8EB52FD5FF03AB8554ED42315B64A710ECC5C5347D8D46FD1E2A31116BB4F322F3DFFF9CFC76148D2267E3E2CC1F8525512101EE44128185FF08217FCE637BF91584A7007366EAFCB12D80A5A6EE369EF53B4B654EC85919BACBFF83D5B1A059DDD85EB5556A30D3E75D555575D71C51532FA433AF2445AB0C8F0FBEEBAEB2E9E6DCEF814041A35FB37BFF94DBC47A0E58283E2F792D41EB70A95F5EA57FF15A20AB637EA650C9D562B593D32009D084B902F64C33030BE7F0356A199E6B5A8F785AF54A525502E38D5815EE7B6C88FC947BB9D28DFEED4B3F3E68E17CCC4CDC4750A913BB3F9A9F56D6F65EC04493B4A07827BCAA1A531457E05DDAEB3E19172033F52CE8C99658C178250AC1D1CC3D05185D8C9AB24D48C435E7F14555C752C528794E686AC660BBB5BCDA9C01D2AF51013C144076E8928B8F996808F0C15F6EC673FFB89279E60CA8E497CFC70D14517DD7BEFBD70E36CE61FC15E0BAC4B2C816D9B29E4ECF8B16B4542952AF269C34024238765A1CB254E37E37BDA9B33CE38E391471EE1F83FFEB50B272A219D442AD290C44662EA1C395F2F7FF9CB7FFAD39FDA6530C90E2933360A2F279DE441E9A2EF4BCD86B791A79A12CEE0F2FAEBAF77EC232175F3A59B0C9441B9BEE005A7DE7FFFFD4383CBB05EFBF6EF734C2E3156CEDA95CFA0FB0CFD3E39333E3CB46CB6D208BC1E04EB49541859B171B07FF5E4C44CA316562A55CF0DA7A66672B98CE7C7515C534E94CDE86E00BD5C6DC497595882484D34DBE3B5C6B80FEF33A9F5F517A7A6C7A09510948C8E8E150A7DAB56ADF9ED934F96B2A599FA54291FCE5627F2F94CA53A89150A336E2613FCCDDFFEF59D5FFA2A753A9680BC02767F1D13BECC6060B164D165596C3673D1D4B29D3CF058629CFFC578721C33F384B34FB9C8D217C6D38B7D62E31FBC12421416BC0EC949540A8FC1FB7163305A708D376DDA848BE09A6433457881772E96655AECC5FB240B0A64487AD0F02F617358ABF7BCE73D37DF7C3313E81278E21E58A37ED9CB5EF6B39FFD6C6A4667BA70767DD353DA6A36B346B1363B1A630E0180B22CE8EF690C10CB13FA29112E71A2425FEAA46C4252569D7F4DBE411C029A2B098E252C90E41B3FC5C63DC1A1F2ACE20DD808010B0A01AADC0C5F9CFD875B42388BEF5DB66C68D7AE5DB86DCDD360262986A10EE94AA502FED7532E99DC5403BE2C0B0F6209E495583444AE3514A5CB1228A7539F740CA7B4BCEDB825F6DC38D4CD01C55A7BFAF1A7461AAA0F82AD544FE0699239EE8B49F4699C10962569E971E24AE30295E3D5A3D66C5B0FA3699B3E32C40781A38A896E4363AEE09983A5A3D333879B2ACC87E32DB5ADD59CCC668FC54DD58C65DAB0642DE83D48078660B2136B8C97480BDD561235F222CCC1629119B6CECF0EC5E96C48FA0D1C4220697DD181C44F737305D160C7526CEC62BA46E61A315217B8043D7779165ECD1609B93DA901C857E067C497EF7AD7BBE46AF822DCDBC73EF63104B24291CB22993C1D3D39C19773A144837DF0831FE4C4567C9CA52C5CE40D6F788343C9E6ADCBC796E0E0A4E363EC9B86ABCF4CCF32EF59CCF7C0375A31B27AEFDEFDED24EE2FF78E4F1D2B177BE05484410196009BD26E65FB7AD7950A439599E64CA5E6B99965CB5698327DD86CCD28B7DED353A85526D93AA362DF7542D76935DAA3B5C6685B557B8A85667B6AE333D7EEDDB7DDB492E68E1C1B5DB77AE38B5EF427FFF3F06FF61F380001CF6413C76BB6A35AB55611DE21E5A8676C583F3E3E49EDCF0DC3BA3007221D64FCD9E6EAA1A72992C76DB8FAEAAB3FF9C94FE252440DD123C00DC3897EF5AB5FFDA94F7D6A310B6A330E09973AF112745AB197975F7EF9E73FFF794AD582D721C881010A0D0905974DF6F6B86A6176FC832C818C5B90CE49A15D64C40A63C39C86CC0C71E70EF0618CE2FAFAF4C2DFC8A4F4299D6123D5A7C13239739BC89688B1C49CD3F18188E3D8C46672884AE93A78A8EC148D54D4F9AF602D58A121690C03207AA3BC14FD44B62213E48E67E4EED31DC3CF2CF370F13B6CA396BBE0A6D4EE3436706799D1CE184256449808AF9546D184C62FF1A0D0962D1F364E465B8F0D4E4301497C53B9D829231B4EAAA23915635A02FDFF9A8BF43837A7EDE1EA34FD74353339DBDC777444A9126EA610649A262BE228D803CD5F6A285CF0FE76DCD2A392753940D3CF2398A8B59AB5186F71A655326BFA140A89195EA879099D2CFEE2A96AA4A6CC5CD9493FB343C547DC486990A74E787EFDEB5F67194FA5E94DDB4B70AD9794CDC57F57E9681059840573FA1DC39836FF77F55772BBE9D3604FED81330844E09F5148C41EDB3524785D9087D80C0521E48CF19340486C1C5A970DE0ADDA7D0F6206E8924A33818C414CAC6E247E8BB8EFAC9DC875F02FF409B40ABD16BC93392BB10D5414279F7CB223894B69C991AF5CE2049A5101A63A516DC4491C06E1A7AEFBCC15575C556B344BF972A3DECAE561A8E152C5B97C396ABB512B544939F0FAB3D9E5D9B0CF73B3D57A6D7868F9AA95EB1F7FFCF17AA30A67DF0F5BA59E6C6562CA48ADF29C4037AF79AD7AF348B57158436B0AC1E8F4FE67AE5FB36DD7968C1F94CB7D13E333575EF5D17FF887AF1D1B9DC4577FE5CB77BEEB82F30A257F6CFC305CAAE999A9BE3EED2A0E0DF78D1E9DA092C2B1A7D1B64777319FC0A2257501B992484F2DB932AEB2A48F9C94A247364F5891E7BF64D68DCD07CB2B485E48A5C3B996B8CEB5D75E7BC30D37D00E3158866B4CBB25D1221BB296CE322DF6120A555E8D74862AC5ADF34B49EF2C855F493230B4A26BDC8A0C01272C8481482326084CE37BD46A4B6A422DE2AADB25CDA52BF012F0C686E388788FD89ACE2620C2F9D1801C42E2BE70DBF61C1E35372CA01913D79B4C2476C3118E2B510334F636C895490395C23698A0E8EF1B8EE2569AB79D4C478A66716ACC0AA8DEDEDCEA35AB8C318B386ECC2E77CBFDF337C249C71D34C75B422E165D44AB7AEEDCC9BABC60267692663CB1EF405F3D19566A3D1CBB4625F1E3420B5BAC07DCB463D5C21DEBBCADAB89E1FDC4775C4D4B1D45263208DB715469C33CF8334E3CEB6A2F2C13A97C12E73D3F97F1B36DA8255DEDA836A3E9249EF073FB7D674FABDE88621A723AE9BC491BF326864A00B224FF611D8853C648F72F4136A1CCB4B8F2716515C945D4B93592DB14CA362A07E68BB041175F7CF1673EF319E9859611980236914E31C6FAF44524DB4CE40F511EC24FECCC652AE58BD461420E313232C2413AF8AC344F48B14D88D35927100BC19C123B1828724247DA756F76AAA3E3161195C552E159679D75FFFDF74BFB9C8DBB521D7E73FD0CD94CBEDEA8FB9E8F55711D776860B05AAD1BFBE19A6100FA9DBAE4A222B8059ED31BFACBE276B1B777CDE444DD75825CB6E7D8C4E8BA35ABEA8D9938A9D71BB388FCE2A4E5AAA209799C7C36ACCC4EE472AADC9BDF7D6047A90065D474DC5690C1A3C6AD76B35EAF720B5F72DACB1E7B74DBDEC38796F50ECDD6C67A7A9D434776260ECE6A58AF3573393AB645D8A728D6445E886CF59025DF31B84397075B543967620883EBFF43C575C1176D0FAE063D7ED14517C92C3DC74C8B847013AB4EA00E3D083130E24A880FB2E0F5559A1BA53667F406ED868BC35FFEF8C73F4EFAF2381DBF459F9A1FB165628947E0B001CA16A585DA84A2A62C6086B4E0D2F38D53864E9CAE7DFBF6493F244F91182D21CF122EF5C5D65FD2B2D465D4E644D94B0311FD328623765F056BB9820D95F608FE55DE2C07C94D292284F4893BF5AA57BDEA473FFA11911B0203C301867B48CD62B304CA17318F2114175DD0B5F4F1A056DC65CB0756AE5C5E2CE5A1F07D270B99E7C3E292E61B1303C7EAB0C7708E13630E1B62240E66A7E32C71EC556DA72F3F80D56CF4EF1C5D9DB8EDC029B5A2756E76C66FABC8F48B787056DC5AA3558BB50A713D3F64E539D6FDC6BA510DC17BD4AEE9D491996843F89021292A2A27E76B9E233F09676103E21AC20308F14EE53DE11C1F6426590E0125F38C08C046A5B4981272B9161148575A5BA680503245BDF265A3938F574AF859C7639E76B65209D211F09AE2EDC811C7DCA15CA4DD398931C598A55A7285DD7CF3CDB68FAF2CCCA8883AAD1A3DA73865D9E3314FD26E1BDA249E2F1A0FFAE80C2E6975887AE713491BB65A28CB2AFC7DAC644015D0EFE7BD396A2EBF823215BF279E7842344ED75124678359567764F9086CE6E0E010AEBB77F73EF3F01A4B00879EC6497B3AF8659209DCFE6C6644453DBD7DAB8E1DC593BBE59EFEB1B163A59E9C1F24B5FA54B184E337D38E1AE5D2725C5F9363A87698C1FEC14E34AAD599D8417C14797E8C5F6A5FA45D9786FE4C581C9BAA8EF4AF191D3F9CCF61B52A95D9B1628F16975A55F4A6BB7C996ECC430403BB0575BFE903975E7DF5D5BDBD3D9C520B0DB57BF76E65EC22D5F182EEEAFFF38B591768017C1D0D18010950CAAC2FF13658A214B818EF810D960B6E87BCD8124824928C5EA1302983AC6000844BB19241D50FCD8E0BCA504C7867F6787AFB452163C822852665A5A158E8930C98741810EA4A9405EF013783C7E72C2AFC95D685251CF2C791E617B7441F7F094BC09FED19B6CEDCEE5FE98460369F1A4154B35408180DB0470C228D1B667B91B2DAC2DD94D1880FC5A5C31DD2E470AE8E7D4DE13C60F186A3DF94B1D6C3C3C3B83805D82EDEDA690D3F503DE5DCB26543838303F942D6778CD14D341CA05AADD0F668E474AE40CF8CC68C5A4F96DA46AC77FA0CBCC0768D25B904AF1F2A6560D7B12E4BA04DBE21F14D945B8FA25A121BA8A8E3AB444F8C527A705960BA8B71CE1116D4DB2DFD83693DF73470C8CBBB2A749D3AD49CCAD454321DD7633D13D9580215BBBEF62AA432473F973E843797D7DD5653783FB6ECCC33CFBCFDF6DBF17E44C6906A6E6B174482FD07F4721CD31D62BB0B5D66400B55E2B0E97DD9F2E54710104038E1139B0F2616EB387DB2489BDED06637C1DBAEBCF2CACB2EBB4CA9EEFE1E8178D16717C4879A8B7A903B5FBD7AF525975CF2E10F7F9848507209D37FC2BF6442C577C1C9C352E0E30B561625A5A64C1580953C9E3E9546459D67B7331BBC0F4218BB5077D6A53B63110B793D77427FD0D7030E27C7A7286781AF557592983E642FACD66B815FCC068361B0AC59CBF594574C4FB6C220DFDF3F303A7AB45A9BCEE6BC99D9B1356B56CECE4E359AD5E5CBD672A848DCAE0F0FE30C1F98983C5A2AE5C726F6C200F88113C01BD1C9860E6847CBD044D551E1C4ECF49AE52B27A70FF9617D7CF290998711EB068566DBB811C10B5FF0A2471F7D148770D7EE5D6615D818D2B0BD0C4E01E32C2A480C37EC8F620924D1816DC377BDE215AF803B49AF9CC9168A8232B82C5BEFA894218B30E4C5787898C5A2938B1DC47EC3EC413B63EF056B1F9B210184BEE0D1F0B0DBB76FC707D7AF5F0F252EF88DC5AE0F63F9377FF337FFFCCFFF8C2BD3D86CDCB871CB962D1CD2FDD6B7BEF5B6DB6E7BDEF39EF7D8638F1D9F66616A80B673C7ABE13F6FBCF1C66BAEB986993A9E617606E03736667789FB91348E20A17187781081CDB1FBFFE4934FC64D4A0D8CBA528684D8791E2F9DCD49479297E5A538C080737B700249252468311E78687C4EBB651581893B761B897B412D86B0FB3BDFF98E68FF381D5AC2F67BFC9739999AD6A5A79C5FB162F9D0D060E86733998078E5D96AC5E43D229512EDC9DA0A3C54329FF3F20F99C4A27496CA733BC2479A83BBC7D7A88E2558EB642A8126BE68C37B4A74DDB9A9926AA241A289EE2DD08DC759E5C108E3B67281AF497F636D0CDA5152370F06A5075D10A8084F855034546143D7939B0819E2D412C4EAF8EDD11E90174B885BC4E1103369F76CABD48A4B358BCD3D52B1978BDB65FFAE3AA863BD32D97C6566E659CF7EF6936604375E7D8668960122FD71E6A9185306BE4B27809E904A2BA9AE45A3BB605586A139EE96A24ECF0C37C6111AB6232EA541B680B139866E049E1D0A8AA75E4E193F28C82B56B398E3E151651F1FBB656927E82439B61EA14723E47C765E285D7A9787568F274BE20DEB379C73CEEB3FF5A94FE5B305FE89A9215C1C5A584F9B9B9ACC657B73E132D7E9AB4CE1EBD7341B4E4F6900CB373939D168CE42B323261818ECADD72BE313A37DBD83783C5D9F71D4D070DFD123FBA72AA37DE5DE7A7302860D0104EC415B6F410DEB6CD8592BC34323074647078A83A7BCE0B99B1FFFE5B1C9DD9B36BDE7FACF7D26970B60AE8E1D1B37AB995BB572CDF61D7AFA0F3C1A4D12529932EBA8FD389951ECA563459DB4C1EF8F951DC2BA532E85A9185B0E4DA1E65296532F48528F6247E21AF17917BC3E090FB0AAF814D410B91BA96199EFE63123C2077BFFB6B7BDED4B5FFA1291032AF57397400F531C99D21595CD0346818116DEB163873401510AD9AB219E974AF3FBB03DB85B02C0114DDF7AEBAD907E3234B06643C7963F2CB6A44C82B966E60479F7E82ED9E108FE4A680AC742C9AC66BBB759BA31A844A0C739074D29256001FC400A62465D2A35D8DC266C1097D7350C392C189C71C6190F3DF4105349AC4348160E4A8A5EAA10085BDD76F8CF162D816620F5710A7A714BC57CC1D056670DF9BECE27403933D12CD40549DA09453D257EAE5D61769DE3D3836D346AA4F99FDAC37B27D72AAF1D3AC5661B9660368C5B89AAEB0163DAEC341D8D106D685239851020EB3979E504510C51C3FF34C1987242DF6F44714DA78C35012AA201B7AD99328EC62AE37A6DC79D552DC7A8FF9DCAFFAD668B4F2854649AC3DDDE71C71DF02A7ACD802319F9226EB55444F186534E39052B2CDB240E846DDA79EEE8C8ABB9A865DB12D8E05A88C1E73EF73988250466EDDAB5B8379D76CB153AF615973282CD30348E3AA1C0B5D75E0B358877B26F402802F9150207B29D3C38529004A1A2B27398D277CD69C66CE1A48CC924321C79BC1F9FE502DAC393E50C324466F07DFEF9E7E3C8CB100566532555D5617315678D922AE3DCEC572A589262734B661CDD673F73FD55575D854DD76F3066C00007D8C7E155AA33AE930BBD7EC40449BBA7BF7FDDCC74D3F7B24180B351C9EBEE0188470BD100CCE481B1BDC3E561B82D3AB39F0911204F4D8E29A7E9EBC9AA0D3D17C98F1C37D61DF8461A7C5FE3F0B6EE7C2AEF957A7BCB07C7761773AE1F36F285607CE2B0CEDBFA994A853211786EC06DA8CC56023FE8EDEB3118189D5CA32D4D52226F51CD4BB031FFA12F1E78FA2F7449CE3DF7DC7FFDD77F25A7340FA4EDE9C89875E60459E517B294F9AF24ED57900DEDA248925AA54AC9FD05844E9AE8A7ED28249904A58A4E0391F8EE3CB2208A13255BB2F04C4A12712B05737C8A07D81E326E33CA2D969D4B0CA734DE830DE29A9C7AEAA9679E79260EA44A9D18816FDB12EEA503D1E0AD3FF399CF7CE08107C87349684717E7A89BF282F13D77DE79275BC6485DC7EE90C870B6DBF689AB8123C7E21049D3A0262EBBEC32411CF0CD5DB38C8C4AF26909B05DC68784B9D2EE6D7F5F19C64C5312A94E45017EBC619CE87C90AB2A4026C1A8881AE252C0C397F589D3D13A7AEF34DB5DBC7CFF342D41A1D95E672C01CE5BB5AE5BC8C412D4342E5503C673C61284119C7D5D0F08F5BC33077E292C810ED875CAC88525F0A236BEE9708418C23596A0ED261D4BF03B150FAF188116E30A3BE940EC38A5B412B6515B12046C4AEF4D9C0FCA9B54E92978F6306195D26AD90C8CCEDC971878FCE9DE7BEF3DFBECB39D4ED3E251D72CA91624663C984D493A03FE847496D1330B72B61B2DF004362A32CFC36CADD0F7520B31334C213438823C7437761F824480AC8C144460FDD18F7E946949891E6C6092D8390A2AD171506B3254EAB8399405B52D81DD4061EB32E67F3AA9E76299F00CD87E9D356EC4BEC7714B9A7C1426019E8AAE78E49C7A1516A2D4D7B3AEA7B86A7878E3BE3D70066BFD7D4353539341E8B4233DCB7E7A6662646468720A515E96529BD76D1D9566A35228666AF50A96DDD1E35513A5B547CBC88DD64A6F7CE31BEEBEFB1B26CE0A834CFCDBAD0FC71AD0DCC2A766671B9038C266EB755DD828E475777BB5465661F25E4D8A9B40B2C037BEF18D5FF8C217F04BC248FED0CEACC55EDC1EE2CD2937CC32D3E8AA942648DE4F3B0F6507F93EEDB4D3FEFDDFFF6F6BEF016E5959DDFFBF7B9F72CFEDF7CE0CD381611810B02120266804630A26121088A189A022A0A052A409D2BB5190AAA0A2A11851C2DF8098444C548812414CF2A3481B8632334CBFF5F4B3FFDF777FEE5EF3CEB94586789E79E639F79C7DF67ECB7A575FDFF5AFD8B6D3716A9255B495FA0920712262491A9414E0A95DD68295D372F3CD378B37E973740D1D3010D8A79B024708DF0852047F2E3F9775AC5B49877AFAE9A7A32097DF3CD76DE1EED06A0E6B6434F18DE9CB4DD5E4D65EF8F42CEF1BE5312CD188D2020892CAA9E3338E89CC2BA5083F7A90FD09B358B870216801986230232290381CD0B3A832216B90F0867653D2452BF0F8E38F3330EB63A32DA07A1CA18ECBC86581DC246BCC908E909638A41BA5AABF8FD0BA81BEDEBE149C8EC6F79CF454A44D1494F9CEE1696A0AD21AB44E5E61F141BDDE0C0D0290297D515EC137FB5EB8727489CBD78BCE2481F7DDD5BCB4A9A741E0F1B476AC19B9824454CE95A25CB1D1EC70917404EF6D4D92AA749AD46EF04231979392558C5A9AD29A5AB3E8723AB4A351C34DD804B927A2A4996C764D8BE1C2D4DA32618C0CD83E0AA370BE59571997593FA6C6A1FC9AA14066AA79C22797344E9CD08EC288EFAC9947094BF986F724D71BBECD0604DF0A78822F894DCF1DA9D2B063D42353A0DB724645036050DA4DF42C30445DD6FD829086E807DB02B66C8037147E69B9444596A4A06B2603DB596CC334455DF6F9CF7FFE820B2ED01BCB7A4A4824404545125A3BD6E92481140BD6516F64F989955C79A5EF2C5AABA40939FE9F0F15A471CBDA7875BCAB2B5FADB8A8D5DB2F49D0BD789BB94B57BDBA697CAC3A38307F7878A8DE28F7F48AD10F8D97472409EA8DCAC8A854666F024B7190EEDFA8576437C862E8EEEE9412E4D174BD2410ED4A32A755ACF54A8AFC5E2875169E5DF1FFBA4BAEDE1CCE177CEA73A5E273DEF01868A63B2CD99108C19CD973D6AD5FE77BBAFA72BB1E00F526AB0F6F7EF39B0F3DF45074CCFFFB2B0CEB9B77C502655150A54C1AC0C1071F2CCB5723110580800F3CC80C368A0182B27162372FBDF412E5F2D8B92B56AC60761C128F0EB46A152482678CEE3153DEDCD2960DD8C7B0EA0CE23B0AA07AF90985CA96CDC281C43DA2BB61B2C0052053AD12908DBA409FAF5EBD7A8688B19BCAD8B73C71432368CB2E2771DEA5AE338BE069005A643D4E6F64583CF1C4134F3DF514C5C0A04551436709426059536B6D29C8DCDF7EE58206D4AC8955FA6847ACFDA4653A6543B563DC0CD38A8A85286D7DE5DB1D7BE32C67954D3998BEEF0D9BEA83F0A0B0AFB2B92652E1B119BC28AC4570BE08D92D5A3DBE432009C63B64E3B7EAB566230D4A6853C7522EDF02812EF2A567051F3020B9C8CF623C2D4B46A30923C6A3B5463E2A965D3292D429F3599E4A029F929A46E9C4D7A4873DFAE8A368C156BD8F8D857B87F26F313E9D1A7DB26CD9B2E5CB97EB73E9E0FA64BFFDF67BE8A18724AA65EABDF0C20BCDB409C1273EF1893BEEB883740078749857DA260C52E925865EEFEFEF4DBD705EA2C912DBB871C8C5F9CD4D11B4983077BFAA2D4E130A012F6254467571000A69493EAD0C00035FB46E2B5D4AC313B520B4A02892C10093C7D368082E7A9095CA8686782B68FDE6B2F430D1AA7E2E3E404F4D112D0D70585E874D6014CC6F7016B751922D961E910120FBC7A40EA251C980CE625F7ABD1F43B1A0D1FB9B8C95C79B6E34769D8568B058989B34FA2409CA637A564FAD12FBC5891ABBEEB66CCDDA57640D485F913C88E27A9AF838562B57248A2509F205E7B3D462CDDCA7997A0357564ED56399A6C4E16DE772656CDDF0AAC1BED2D0B0CCD0114F693E0F2F27228657F4F50D9C7DD61724097DA8CD791946476FEF714A5D4361B5377D41615BD3618BBE8117D60959373ACF24EDC0072DDFD16D991B674202FDD74DEFBDB1DA45A2D0160647AB354FCB873FFCE11FFFF8C7467C849EF074871C76F20B1AB0622EBBEC3DEF79CF7FFDD77FE941B874920C3198F99E70C20937DC708369C7B07BEBBE69496CC830CAFDF4FFA73EF529D92BB42A9C396B9604683CAAA832CD0C08DA9E025F30D08B66D66F0305939CF46DB7DD56DCE4BFFFFBBF758D8C1214F6B0951520F83AA5F867758A30650C1ADAFC4B990D5A31539B45B3760BC71F7FFC4D37DD24D2D23561015A32012FBC4595696A51A54DC9D3598BA40707077C0FDE7C446023EDC0E1D35A8843E017B29473AB38B323ACE369E875A11C6DB4644C449325412972F5462A33A258FAD458D3E70EB5FCE97113DD2B7D15717E020FDC355BBE263969B47C4A78EC924E59ABB21872B11E56701D63496B936F66E32581B709E2C420C14D790775D9123DE30C89DAA42C130CBD9D2CA0F5014E0220614B2433CF6AD8DC78F22B17D304A99E659434E9A62149E089C110C3B2FEA6496B0297C1F2B02DD9CC3283C384CED00FD6268ADAF4156BA565EECDD0C999A9E31319DB463F61D0D89091ECB66DADF7B6C0D20858FC6623003E823B1535D38A893EFDE9936FBCF14631B462512BDB48F5F7A68C805623DFDDD9EBE35D8D147CC33B31ABD25C72D21C92DCA2854B5F7C71DD60DFB6954AA9BF7771D2CA17F2DD3A1E857CD1173B54CBCD66355FF08D5B9B2D6D52ABD1AC1472328A1B1D45C9CC8D29965C8E0809A31FAD7827405F579FCF8F6C942BD591726553AD31D47263512CC6E7E369CDC6C4E465A6B49ADAB654394AAA745224466F1463A09E5A208B0D6ACFCC8B1D9E6A17B4EE31CE1B7A3FA086B089B94621AA9209A2AF0E3AE8A0EF7DEF7B6870B974C935B4B45833D2A12B163CCD49DE8E8F8D75F7F48CA5EE8E62667EA6AD607C0D4EBDD698357B70C3FA8DF9421A75ACB7380C40A010AA7559E69C357B425B7469C03397F93DA7CB136BE3BC5A9CCB2FBFFCD4534FC5E103DD8BA39D79E699320D4521B036548AE9BC6AD64701F4A4934E3AE99A6BAEA1EC803C39DDE180030EB8F7DE7B61A62E8DE71B2001FC9D8280E38E3B4E0263A207643A249766CDE2689632A845D66F61D09C5BE0E3D1A1AC88448FBEE28A2B6432EB0E071E78E00F7EF08370133FF0810F3CFCF0C37A288FB6DE4158D65DE90B160691201288F54960F02BDD990C6ED69C9B93BC61189C5A07D9438CCA9CCE882BD3EF10787A10F8452978B03FD2625B6926E8C4E6FA6E5C0D875FB86D7F119CE4C0587EA177598812C7C6BB47AB0B6BC93C17179D077DAFE4927CD2EA8A72DD51BE98C4627BA3497D386A49CE970A12504929713D8562219797D9E0B148138F2DE1A187A27CC5DBEF49874B7A5C53FF2F6A0D568AAD8DC978A5598F73F98D8DE82597AC2F1556A523D18C340BCF10327BCB4DFF6271C25C47F2AD5B19EC8F0BA24190967593363DC0748238E843090F0CCB125FCFB968AB5699B913D4D6BE426CE0B0FC78CAF315CFD8596BE60785E9A1B1B5EF8004091D1BAE19C3DA6597DD9E7DF6D94A85BC912E89ABB1B14A6F4F7FAB9ECFC505EF856C799FB574EEB1B11171F65C21A9D61B85A8279FEF9B3DB8A4D5EA6BD64BC57C6FA5DC4C53353CDFEF1FE8ADD5C7CAE591DEBEAE346A97AFD6CAE3A343DB6EBBE0FF3DFBDB9DB75FAA6B3EF6B18FE9B86E28AF5F30B8C0434F7BF5A740BB065D3C36BEA15A1F6EB6C69368DC45B21BBC4D907A2029B9F492A0E54B60A2CEAEBCCEF6DD77DF9D040DCA5981850B17BEF6DA6B606DEEBDF7DEBFFCE52F5971519EAC04F27C5C867A1865FDE1426FCC8A152B5843B236F91FD6E095AA89565D13CEFAD4A6914A1559A8A052F5AA5F92EE4AC3A3BC781BD05A3281E1A3A5F088A7CF7B37170DCA3B4A9E6407FA3677EC03135197AD5CB99293C018E0FEC63A2D5F45FB85C89F218B14962461ACFBD0BEC6F46EEB01676EFA194ECE79E79D77E595575AF1272977A605737477DD75D7DFFDEE7730081236A04FAC7B3AB5690BF4060CB8B0CF043C9A78B2B54FB0931002D549C653B8A0557AFBDBDF0EA859947619034184E81CE51D471E79E4430F3D245B0167118FD39571DA9C406AAC9E85241373BFEDB6DB8E39E698934F3EF9F6DB6F177793ECBCF5D65B9143FA96708B1D3A383B09AFE4296A48B808C842694B1D8EB2F62C8455E6CF1FE8EEEEC4F5AC83E31D5F519262C345E4DE58D32E5EB89E99A98162EA353C341ED52BC5F1CAE0586D6E2BE94B4DFEA66F41E3C144BBF24511AA7E556ED6A58CD4A3B4F55CD37B87BAF31E8AB1DAA8971BFACA5F5FF54EA49C77094F48020F38B120DF5B2BB80D8DB16ABD25DA5E9B442FB86443A9305A99509E3492EDB7DF5ED61BBB632E0A978594D84482046F7EF39B9F78E289B02D8C569EC407B33E0DB3FD2FFEE22FB47778E1EDB6A6BA85BD68A0A865CB96FDFAD7BFE62B4CC6050B16186CE564E64B41AF19E5A6F5FF41244192E1D399FF0AA7A2E126858EA019827C6E12FA2FEF0953FB0187E0AE5915E244418AA6445B1CB7855911A7506B5D9981DF512C748E8D97F34EFAF98078AE74556F504B4795DDD0911F1A5BBFCDEC793DDD83EBD679C574DE363B27CDCE449662AB873A52916BB143BBD292351079A1E315DBD5AB57CE9F3B7BC59A17962DDC6160B0EFD1277C1BDEC30E3CEC77BF7BEAF1A71FED2BF688FABB7B7CBFBD9191B14A65AC5C196A24E262B5382FDDB89A5623CB28706EC2BECE9924D0533863D2C8B40AF87939F628CE38BE51D3D0B235D30F7EF083F7DF7FBFFE04FA58D78006AAFDC095A4CB0E3DF4D0071E7880BE42BCF07E44192E601A5C1A4F3FCF61754AE6B6D256E0626EB1EFF15259B060DEAA557A7AB15CAB9B994935E37C91E3AA558B162F9424FBFEF7BF2FE2C34D51ADD4BA7BBAC646B668D6687133833E8E32BC23EB236FC98B219799818CF6DA6BAF471E79C4A5EEEFB4BE69DC650A1A397F2074A22C4F8756A2935CCF5E5A349D22B1720EBF195E66D51293C08E818BEDB2CB2E4F6789DEDA8B638F3DF6AEBBEE02E85117EB864CD6DCA9342506CDD150DD8978BB2DD1BEDA96C80C294645DF445CD8C454704D7CE10B5F209264831721A101E002D67B8C035B01DD5914282A02DE1CC70E094596158373C03060DAE459F89A3777B0ABBBA451A589289DA9A7A899A6CF4ED8ACAD2D5FA26D632E76DE532F46C12781D6AAA5A1913995FAC228EA8B7C8C20F61D9463D6BF45869BF708C56369C71B29269DB9A2CBC5B209C69A3EB09C8F5DB54560D96B352551488A6437AB5068E563C9D5F196371A64DF3DE7DC7097F8450CB7D514DEF39EF7FCE217BFC00642CD62497151C09790B5EF7BDFFBC4AC692EC4A650AE61586CE6E2D6DDA45848F14248204BE05D61CBEBB0FB2C3B4BA716CC2FD25BA7A4675D402D274E02CCC13F60F6F9DCB973292261CCEC1A7E5D975AF65465F374DE4F777EA79404665B446DFE2C73139D75D659F7DC73CF33CF3CC3E9D50F00B2D86E3B1F8714FB2EA5AAA84CCC5247B794D9D875CDEA9F53F02D2DEBA9F3D4F362D167331ADB3434EC9149F37D7D3DF35A4977B35E1CE8DF26EF16AC5BBB41FB9ACB47AFAE7A699B39FD73E7CD7E71C573A94227B5AB67B0BFF7A9679F78EB2EBBFDE6E9C7767FD3DBEAB5E613CB9F18E8E8E928E5653D2C5ABCA05C1EDDB869BD3E6FB6648988BA2A1203515CF3058CD25AE2A4D948D216EB698EB60FF3783F9A248121F3A0DD13F72B05BDB442B311AE24F601048539EB43AB90BD31D51835C1DA8A4D64EFA5B6056A0B960476DF4E3BED244D9372798D649F7DF6F9D9CF7E263691A479B85ACAAEEE6EADBF574944C469C5232221ED029FE6328B7389672513B28748E0EEBBEF2EB3404F39E594536EB9E516CABB7038D27DC108CB3C8946F4535292BEC27E7799454C89721A589B58048DFFE5975F9E5927325EC6B2D3D45B3F913CC066C76FC37B98949E75F4D1477FF39BDFB4A019453400C598C5E05275C97A559255C26971A98CC45FA40F3560324F88D84B15D5FF5A22DD599F68A9316EAC3CD518344597A4A847198EA154484DC49AE1982DAF2752D5499AB26E4831076306BBC20A47309270F8B0C8920DDAB8430E3984198551C77025A542A4E9BCDEB09048C08A92C99E6276E54CEB679B886A84C98551568936B4A992EF2A267123373236AFEE964987486300DD2ED79452157B10BA287185242A2691FE1F918868F95698FE0EBE6978B39AB4D256EE4E2750ECBE969AB64802190A1DB16F7B596F782131E4E217E3E8B9A8592915DC58DDB23FA99387178536413877CC5924A596945C5E7405A696648814F627E42D1B11B161A7181AB3FB1BBE4B08FCA99FF8A84C4A6C53D2B379F3C342F7DCF4BDF6B6F615CA7E728E09F3805461C93FF6F4196CFA5CD01B2AB7659FA8141822BBCEDC97AC23597D0011B3FA24BC6B8229471B4D57AA7F6CAC5AAB357371A1AB38CB279856658A46A9884ECA9571C98362A7AB546A0B162C5CBF7EB4A77B9B4D43D5AED2EC52476F315AEAB1E1E6CCD35356AD7E79C1C2B9F3E7CF59F1D28BBE70AFE65396D70CBDB2EB925D56BEFAD2278FFFC4D5D75F3DAB73D6ECD9BE0F5A4FAFAC818EF5EBD7943AA5798D8DD72A3997F8C288B8DA4ACAADA492B89AC7DB8A52D4C434DA8A24F09022627C71036009BD27C8899703055F14B970E1C2952B5786AA3476803417D828D95DF825F45E6F24003054E189BA0FEAA7815787E11D0B30844D8138C0DA542A15BDC08FA3AA140DA936D52A4C5FC75A2A994B19907E353E36366FFE7C4932DDC4C73C5E5B63740C30326AD169A79D36A524B0DC06CA0228984C66C4FEBCFEFAEB3FF399CF1098D59F0CD5F89D9EAE67DD78E38D447DA7CB4142CD87BFC3A9ADD107F46D506B19285B17D95F784E4C424719CA9B45EAD0B569BAE982ACF31D77DC51DB4D5359DDFFA4934EBAEDB6DB3C9C491AA26F2BF16784DFFAD6B774CF934F3E994E20C45A88F0B769E5E22FA79F7EFAB9E79EBB68D122564394231BC5A08D2C1D80F65221768264219813868066EE35919C668153488F0087233CA796A59ECB5260240AD39E193974C342A148EB0543DD21879D2A87B63410BD19DB30DACA175AC5285FAD2C68BA9DA3DC822429BA567747A7F4FD8A4CFCC81573F9529C2F365D2C465FD8DC43ADE51DB14903C4A19CCE61AB9CF898701CA599A6A9E4F08E088FA8EAD33936E68ACB5DB2C2D52B857C575CA42C03CD1A9C0FCDB7CDE99164B0D269A2A067E592910F3EF8A0340F2DF889279E78E5955746199EA3E195A2E61BB8827E28AAD091E7B84163A4D87354D189AD87A02E40619AB95F8B81CAB9ACAAE60F987DAED991A780A1837464A896C6ED0233FA0DD804131101BBCE2E429590D2F4C20B2FC0C52CAD254583F1D75B6D571CE73D904F942BE56775144B69AE6D92253CC8404CC6EB9BF6D87DCF3DDEB1D77DF7FFCBC60DA3CDA4B8CDECC59B368D76C4DBF5F50DB49A11F0BC1D1D059FA81625DA27591BE3E5E139B3FA376E7AADBF4F96E3BAED976C373CECB536098338A7ADCA972B632FAD7EB1949AC0A2F95CBED94AAAB5FA58ADA183544FB3923C79E287D5307DAFD5D84B51C90918C792254B70085A4DA009D524EB28897DB0C30E3B8895840909C632DAD01DAC22919FA3264B614CF97EB7F17D3C0FD05F4F9AC06ACFB29A75994A281A95727987A54B97BFF042871862A5B2FDF64B57BCF8E2DC94538C02A79E7EAEDD83FEB082ADFFF50CDE21036E32DF20AEB0E924013C37845841E44816F22B7143715BB8E7742741F7D1B23FF7DC73D655860C397D65713F0BD95996BD610990B9C0B91573D757745DA5C6CD65269D0596F5FEC0030F7CE8A1877419B7357B08D059C6A955D2F651F563560EAFB6C1A08B7164CCC2B3A23F4BF3A0A4D9A56A178BCC8E707FADC0D34F3F2D99F4B5AF7D4DE3C177C49DE9ABCE27A03C199453DB324E70A2B890A6F34CBC3CE443FA65988F6F19B7C9E6CEE9136DBD4139F579F475D72C76340ABE89E0FC56B2435C98EF5AC566AD2BA513CB6F2EC4FE0169DDD8440157BD5147FBF5ECC9D75CE56A4953EA58C31BB54E9A57D16B654959B497D3449C54EB35C5FC2BADFAFA465387B26FA09F083C34A3A384B906D11653205BE44D880AE3825A7DAB9F47C7E727F806A9F908A39E4B972E5DB16205C96044FB30D1900AB8C43977FBEDB7DF4F7EF213767F8608B04133584EB0350AFE8348823FFFF33FD76191C00B3B9586FD4B5E4FBA870BFA27B74902EBEEB739143365703954B838FF975E7A790A1723DBB923CDB7F51D2BBB7DEBB168B07756A12036E47DC48D662D17473DBDDD23639BD272A16D376E1A2E16F4A7348C9C8F9E265DB3676F53AFB5AA95A4A7A7977A1FFF94AAB676749BB9B3366E5859EA8CA5E2143BA2E5AF3EBFE376DB25AEC9115DB37675DD55FB3BFB87CBC37D5DBD51DCF43CBC312E49D0F0790D133D095C629230967DA0D3EABD0A798F6B86C288528643C0CEBC9559A1516AF0FBEEBBEF4F7FFA53738573A4B9C07419AC3397BA89894D0144835F3BCD1EC919BC0C31430A086BF51A2752474B3A4C247214D18B85D52A6060CD9E33E7539FFAD425975CA2EBA52ABEFCD2AB6CB95679A2F74BB5DA3F3090CF798D95FEDABAED29A79C82628BC23539626CAC075B04540649C79FFFFCE75352126A08393C329B34776BA14720043FBE19F5337B87F4DCA38E3A8AA6AF06E06E7A9975DD4B02A04AB2A10E3BECB0BBEFBE9B28AE294ABA068F0ACCDD7A7458FCF9A9A79E620A561E6C6848700D723AADB3B90683E1887987E1A8C5D794F11AB9A0FA49CC453B2E9AB9207DE94392DC4466E80D3074973668B4C0A31E24DA0073188AB27A66789305C09194C601CD1A98B88F47A603F0CD2B3FDE09908FB22C8F5678A649A08741D9E64CE06FCAC072F9511F59D32173735C243130E8928EC82D8C5D218A4BCE37B149F3445BF5C835647F345D3E17CB50F019A31248D81652C9A3622D69549CC74E4AF2A9406A26AEE5D6E75C47DC51AE37D7BAE6DA626EBD6BD66B4957941F4F1A74A37459EA8BD659EB8983D10A86CD26A01B0A88205085F93991B2C80303543768072DB26C771186D61674237650E4F1E4934F9A2BB895F627D08E8749A8FAD5741DA850112CAAC4D1FE03DA04BE074C8A326BE8C518C4A2314D1C2209738AA69340D379873454CD4E94B91981CE72095C069766B84B1C5DF45F74DBEE6ECD7C4C74D6DDDD3B365689A37C311EE8EEEAD1EF6AB5467ACF86FE495B8FF3E4AD77FAA4E4A6D4F2AE91E16AE471229AFAB3BF6F4E67A9AF5A91242FC10BD6AE8C172E9ABF6AF54B73E7F48C95D7572BC3DD3DC5BEFEAEA1E135E6E8B49646BE93B89701D57ABD2C31D06C79D7908B1A3EE339E7F00E510D97D6D0452986F6661C7373D4480DC1A247FB08AB93F4AD3533A28A2FCC1D0E51A0C937853B64E56C895593FA0AE7B4FC3DCA108D2602121EFC3DD2DF310052DA5A6D41B359EA9C0827C8C81A9C25B9B8E1DAAF7E55FC5DA75EB261FDBA7585540DF18A4F868E8BB6CED88CE9CC9045EA322C7B64039D58A6A378147FAD183939B8C825EAF4A1619D9F73CE39575F7D358E97E94E024017F81E593AEC5373F173595BB77197E98086C792A498A6D697559F03F669C69CB17E00098C9B603699DCC2D1C7FE6AFA5FFCE217AFB8E20AF0623506A05A74812E63C590520C2FC4AFE6DB507302C6E3EFFFFEEF3FF7B9CFF1087E4558926F0D05FDAEBBEE3AF2C8232D66A36F45DB0099B9ACAE6AB2AE9632DF5CE211E126747DFD6F4145AB0F0DF3D9B9D800DDD272217FFCE7CEE9DF50AED4AB320DE2DE241970CD3EF1B5BC5BD270BDB11B2876E65BAE5CAB0CBB4494D4CCB942D3878BF3399F2114F9D6F662424E47BA2B2A55937AD979C48C56DE5B1E9A9036F2E59C2B4679D18A0CD5F51DA9A256770371E76852BFFCF2CBAFBCF24A6DA2717F48A22D986F84D1E6CD43E5A23F87657F5AE40044077DDB4651E67BDC7FFFFD7FF8C31FD2F3CEF2F1C31DA724730675DBCC65978654018699AE0E666B5F6D2ABF79F376DE79E7952B578A722072B67B665B7C4A9B005AD5024661DA2CC5F72EABC30476C232D333C6C7C8B034FDD18EBC4290932428163AF2F9928C458D2A499AB4D22E4A6D6D16F2717F2EEAF29FBBBA2CC54A75A4BBC7C76CFD81C915CBE38DCE8E595D9D83FBFCF1BEBF79EC899757BDFAE69DDFBA62C5F242476B7076C7CAD5CF365BE363D58D051F252AF8B276DF10ABC325393F115F25264E3654AD6D12AD8AC22D6E6363C6A169FEE529173A445AE605DE4314749706CF40D4D6CCFAA342041EC1226B506CD46977CEB62F679179E38929A0F1E64E2F6164AC23AD2FF0436A343B8A69E64CB5D659EA18AD54CD996E0CA295F54299FC9A4E47B07C3B1A1870085199354796822877D886D7CA91F08AE252430482B5A29FEB3090F5A1FBB8D4E703C22B963B286F2039EB5652EE3EF2918F5C73CD35567D6635CC6D2C604ACAB6FA47D94CD2C72DE5F4F5BF00109586A551E1D3C78D009BA0460C46CF34C1FE94C038FBECB3C31EA86165102B79C82187DC77DF7D880AB3B9C3FF43DC7C919F16072BD3C2986C1FB46779B751862F6D7E274B3442DE600FA1D871FFB0312D7078704CEBAA48E21C8A912E86A92126FF34CE75B59A03690B3397D6180FF9FF759E5B8DA6EB2FC68D5AAB90F726C968C3CDEDEF9837D45989EBA3716DDCD52B13F1615776B9A4BFFF95A10D23698EA9267CE2A73FF58D5BBE59AFD506670D5066C1D2852964686C6101541846B6646273F7B5613B8788B6C60A3835286A53D283A10A1A86C4B1C71EFB96B7BCE5A4934E223F8D94EEB62A8436661244555F6F27ABAD7DE1E90561DB380F386906D2E7B2EC150C6553645D9635670D211C4154565FBF21AA661D53B9971519649D7AD8B329244147B194CB75341B138088491A406ABA726769A0981F8C922E0F03978BEA8DB1F1F2D07065636FC997E9575BD5F7FEF17EBFFAE56335976CBBCD0EABD7AE9D3B6BE1D0A69146AB3138D0BB6AD38B7DA58214F952673E4D396D4A72944A5DB9581AB1AF83F72EFE64BC52DB58AE6E485C0549A0F14BBF23B78C60519B93310AD007AD22898324A640E4E0F0C30FBFF3CE3B7599819CD8E10CFBBAF02B0C1A9A0CB755EA65F541131B439B6CC3B7B06676763DAB5D8CA3F172A5BBCB67E8160BF95A7D82809A59C3234B257699CE381DC54CF73975E7744D70A9C33D4CD5A7FCFDA5975E0A55333403A42079DC7CCEC9115B97591D6A6D5A375194668AC56D6874FA53D7C046F18DE857D61998BBCD9C8D876036AE015EF40C91BDE95E18DD9FFCE427AFBDF65ADEE36EFAD33FFD53E9E9F0506B506E95E13FF8C10F0E3DF4500B1D013E6A74C5D921E71D45C46D29032CC19F8DD3B9FBC0073EF0DDEF7EF7C20B2F3CFFFCF343900C6325CDA01769B8A7C6EF0CD618E406AA2309AA1B27D28E9F7EFAE952C0A1584941E93A94F8251936B8CB2C456CA9B7E92845F19CD8F53BDFBEB20CE084B4B15663FBAEBEA45EABD42B4517F576F6AC2C8F2CEEEDAB949BB5A85E7535EF13926A96B88D497E248E56B57CF3B37A211E6AD4AB4DB778DB6D5F79E9D5B45479B38946CB0744725875612116F04858044417A695A6A03710309516DA35309CE17DA62C5BA1D60C7E7F0E94A5125155804B59142B9170DD75D7511808558429F861E5F65675B7DDDA9781D348F0535EAE532C5E67D0176148CCC60330A25DE0D2081C80779B6D2E105CC5040D878B468FE61D0294663A4950887AC5A0F3B90EAD83C778481A38885A51ADBF6F6EEC7AEBD5BC4F192A7A10A16AB5DCD1D9DAB8717D3519CFBBB8E16A83BD83CB76DCF9D1DF3EBA78FEE24D1B470606E68C0C8FA79E4E1F00A827E50573178C8D966BB546DE3BB73B7D65CB442E50AB5A1B1D2BAF69241E784EB4E1BC662185D1599AB02586869038480253C3AD79AF2D1CDC5F6F76D96597175E78019C7A8207F81C7573EA2D2C551456689C3DB46DF153111244A7FBCE77BE73C4114710E945B3B014348F2AD5D7FBDA9AB50BE6CFC300943C906550ADD593AC7192C1345A19EA56519225DBDD72CB2D1FFDE8475D00438B3A4C36116C0ED874119005BDAD0D1991528C623CB3FA95A853B444C6C10D37DC70CA29A7B0E0BA156E2B5B6A987ED83BDA6588F3E832D34932F6D44019B9D51FFDD11F3DF8E0835B7BA84C0DC4DA336076BC6A9AA9B9DAACB640BB2F367AD555571D7FFCF1A66184AE4217000BDB8287CA23516E93A64C592B40031336B4CD886CCBF2725B16CA4172E2563041538D77DB6DB7279F7C926C5DD0B3F546548AE6A8B90071A30180DECC528057AC6B066AB55971343F9FEF4F9242DD0399D63D2A75AEE462A9035DC58ED76AE3DBE73B652078CD2F8ACA1DB2FA1B7A9B823344E349E1B5C46D70CD55CEF7E01C6DF94832AF42BE23D7728B962CA65E2F34AAD28AA509ACEFA54B97EEB5D75E92CA560562C0CE2C9AED8EF5FBB59D32E79BD19B599C339C17931656EF12FE5C03239E4F9A49D8150E0D2904C0E086A42A31A9E9BCAF5BFBD2200F38E000ED2C3130B7655F19CA53183F69D3C6030DC035C97A63F0F328B7651FDA3695CABC2266164C2B09E2EE524757215FF292C0FB15EAFE5FAB592CC5A58EFE46ADA3D5E8E8EA1CD4F67BD74A3E1A1E79AD5A1BCBE55DB1233AF8900FDEF5DDEF946B6383FDFD62EBDB2EDEE1D557D6542B8D3DF6D85B7429762CC93A3A52F145B951219F93859810A5F181BEEAC6B1F2A691D17592046250920428E062B69AFFB265CB805D835F840D84DB760BE477CE9E918BDE2C5AB4481C4D2ADB030F3CC05A9B82660AE93DF7DCF3B77FFBB7F8D3709BD83136B3C0BC31B459A75616B3374CEB7659222FDE7F7A6D16F23A83F55983DE7747A7F82443A26F9BC5E4D7CC35C336772DE6673EF3998B2FBE581FBEFBDDEF7EF8E18743C2D0C4016893DA15F2A610CFCE65C976F408B3C3137670B4F3095D857AA8CBC0B3A8D4259FC45C22338C9F7452DDC73707CEDC9BAFFF656067480252FEA1047C08CC4EC3C0AC11C99D7AEAA9D2DC119C612A301C04E30C2279D39BDE44450EAF36378251055CFB84134EB8F5D65B1127932501E61A72DAD012D17FF1E32124CE38E30C895EC06E2D330A996AC0E3D6E7043AB7684A92354D8CB216BBBE45CFF070B70455CECDD27D9ABE32C0AB602ECEF717D60E55177517936A4DDB59A927833DA5A1D14A5741E680C7A8CBA7FF0DB9E825D77CCDB5EA395F718661DBD9DB551E199FD53F581ED54CBC29604624C11EA426D6B35138DBA1F3288660A9711AB9F9C4449F70B09D76DAE9F9E79FE7266C01478C58543C7D0B58A36113DBE4AA9106425D115D94257EACED57D85CC4CC7AA23586A3672AFC1FAAE22C2CB5D39FA44E697D706958811B179BF5CF8165CC18E83AD75A4FAFE287F1434B4AA58F8A141F2A9E107D6EC229C64CDA25413E1237E92E16BA5ACD449A7B2A063C332D945CAB998F5ADD9DA559A5A2ACBF421C79A3A9D11AABD7ABE5CA489CABAF1B7E75DE9C818D9BD648CDC8E56B6363D5D9B3E6AEDF3012BB8EB7BFED1DCFFCEE590F9950E8893CEE53673ED7993AA044C705DFE2351A1B195D3F34BCA6DE1C4E1187E2B4EB930F54885CF6DE7BEF7FFBB77F03C225646D930F6794622B69112DF00B8E26FC4EA4405A9B28407C017B53FF4BE1123B20EF1380493BBA4986DF676C2BCC35E41A9285DBFC487CD56A36777FFBEEBFFD6F3F00E4414F77CFE8D8682E3320FE2092208C64BA2D6B6E6D415C869A4B63EEB62C6678E8E73FFFF90B2FBC10BFBF560F441D931061EA2DE51A8C99FEDA5A70EC1EC0E910AE96C633B3EE46DA2B142FA9BFFFFEFB8B0F6ED58932660AC09C2943C48DF0A15B62928C80B3CF3E9BB1019967796871D086D765A950EF7AD7BB1E79E4912977C772F66CB589A6584F059628CCF4C8051DD5DBC23F5653CDE14DD2B6E42E350874046EBBED36E06C35AA1D76D8418A246571204F18B033AC419FB3591381F414D2A4CBB97EB1456D65EC8B0362DFB9AC352BE74A0537BBA7EFB575C39D69D3020DB3A31949A45453D0949ACBAF73F10A575FEFE9D7A5C0D7CEA727353C6EB158482197EB19E8D7C9D2F034CEFBEEBB2FC4D5102D01938EE3C877A79A54A462AD939019975F7EB936C86531182DC81E7BECF19BDFFC064909980AC1AAE97AFF910A21CAA4F6DBCE9711B3B90AD00CF02B581103044040C2A009A1EDB42C773BB2A4FE502FF35011BED223C8D780DB1010B2D387998B2E8BD72BECB01DB9CCC66432C491F4BF0E955650869BB926D11D3C1CB47F4D96041DD22C5349E0730A53319036EC2EB4AAB5566771A0BB7356AB2931502AE47DDE95B6F695575F59B468FE9AB52B9B2D19E13A6CD5CE8E42AE507DEF9FECF7E0833F7549BEBBBB6FD3A6E139B3E70E0F8F7696FA9A8D2869160BF9AEA20F48E41ACD8A6449BE581B2F6F2A5737F920411E2749EC92B856F74BAF6D5BBEDC43F4803D69819430426007320CAC85FC0B6544FAA66EA8BD17D7BBEEBAEB885C59E6D977BFFBDDC30F3FDC6500962E9004E6CACF0EADE73569D1FCC674C937A37D584647CA80FADFF7BEF7E96CB03B26E4014F7593BC43D3D1CA749CD43259AD4120048D6681E50B7C34A2C24247A65585F131FAD403D1E1DC845FEEAB5FFDEAC9279FCC2250D6A00FCF3AEBACEBAFBF5E8B2C0DCE82F9C61CAD54D88ED37453B3220697A25752F0F1063A0B6997537493D5F45720EE4A6529656BFBEEBBEF638F3DA6F5973C80E3500FA167196F42C9801784D86740514DF95CCBE520DE4B31B3F5724802B46A784DA878BA20DE60C04D1C6CAB8BA4D52DABC787A62402CA4DA3660BEF6BD6C71D779C6486C4E15FFFF55F6BCA5A135F643B36DE6AD472E2DA1206B9B83797EF6825AED99A9D34E7964AA3958A18EA22E71B5B826E2CB361CC35475DB3E6E2AACB6B875647CD6ACEFFC4A55CD827E7D57D3EDEE8C848C1F72074B03022D5946AEA3EE85BA40059770D4D81844E1297E1CE48623C456F79CB5BC46AB547B67D12159865862F446670880A33796BF0DD61B352696C029297085E77438D4B7100BBB008098385B943F48A0823495B459FD3BD3032F0C7EAFE94B89F79E6995FFFFAD7391774DF93361FF688B6E8A6F50EC1DCC9A57528136B44E60037D57B493CE05C2C0293A92A537B8790049A75AB1967177B1C8828D7ACD4EABD5DB3A3A4345AAE6E33B060606070F5EA3549B3249D5DCF5DBB6E75AB559BBD4DCFF0C85A9908B5E6A6EEAEEED1F1D1CE8ECE72D5635F0FF4CAB4A9150B9D91D3CD0BAEA50775797E5A1F1F19198E0BE56A6D54B2245F68E6F2E4CCE56476F4F4960C371FEB38E4296184C038B5F97CB4645A13FD9CEE2261192A258EE090803A60186164E6E243DC9CA2974902F1CFEC29226E7F6EAFBDF6DAE38F3F3E5BCF0912341125614AC0164D10F190F6551E9E3262FC06E204566526C641A70BA00E2EBBECB273CE39477F36B36E5CC4F45AD6FD3C5B4333815D263899B8E130C3CEC21C7F2625EA2261092EC051DF6BAFBD1E7DF4511B21252C3364C5595C01170DB18DAD8D18C352C104742997B4266EBAA1066CDDE70D1F14CB89D5B37475DBA33016156D89091CEE91D58BDA27D25AE8C7D02609DC960828A1FA625B8F5963C57A96E26C8E72A21DD26390FD58F9B680B8A4C45245D8A64B4E80A3E4F2F5B48AD8FBB27271A70C7AF18456B25D67CFF8D868DDD5170DCE1B1D1B19AE8D978AA572AD224565344AC6A2A42643B615355D5416AF8F5A2E3B7C6953CE64A07F6078D41776895BD13FCBD402B3503500CD17487D922CB41D279E78E2CD37DFBCCF3EFB3CFCF0C3DCD0B0701078705EFCB4B0B510051A3DC6AAF926BF74013845669619F804F62E0D368E39E698AF7DED6B56EC4264D81A1DC3A67D6A6614117DD1B738F7FE5028F76C96CE14223FC5A3F5533BF2C823EFBCF34EAC5840C0E844A291A36069ADA8BA2733F00B5FF8C2EDB7DFFED4534F4586A567184C56616FC0C516344EE91EDA6D9704B9285FEA90B6DED96ABAB42F920F1A7B2746325E6F24FD3DB3CAE38D5ACBEDBC64D7254B963EFFFCF27C346BCD9A75B09859B3FA9E79E17FB75D3CFFE5579647B9B2B7AB929A04C0D8F8488A6FAA43D8531EAFF5F40CE4E3DE6AD957098821BBA851AE8CE68BD57AA3D24ACA71AE9EB87AEA1B4D240964315862B28574984B1827B0956DA5B07C5A07CB2E47E3E0E796B0D5F64334053B6F2EB3FADB22C6E9272E6DEFEC7089B854F3D5566DD8B009B1147AAEA88B261B9AB1595BBB4A657CCA2CD2AD95045186CECFD687D00BFA102BC4657E523CD76DC8DBCC919158176FDC5FC69BCCCCD23110CDC978D72A11CE32EEC618243C4E38E1846BAEB9868A4DCAA966A8EDD4B30E3EF8E07FF9977FD17E89955802FED6AE034F4FD28E8362C4E66091E5A7D1A276B1F5FA8A0A2F5233A32D3B4E9BD2678C23EC52192E3B6FCCA14C362D7FA2A685DEA1D001683A41283FAC5E8491187A3CD46B90FD5AD8CF7EF6B396DA6439F86E5274D06C626CB282076D112BCF25291E413E896413F83A81FEBEE1A1A1DEEE9E6F7CE3960F1FF677A5DECECA78D975E4BBCB8DF138CDE710CF9719D0F43D75524E919E85A415BB388A93BAAF2DF29DD764578B783424AD153D7B41CF354C37ABDB00EE45A362553105105729F681AF189534954EF3A52F7D49933589487A0CCD6D7E6F3F703DEB88238EB8F7DE7B6970C6B9B02050C888796288E069AF5077B4FED849D65F7AABE873BA17CE55B066ED8D0B5AB301342295EEBAEBAED39AB0CB80E6CAF8BBE5965BE02AD661AD7D398CD361E0180E3BDFFA3054C56BFAC5622C2B80A66092C191CB759706378D0C2D9CB7B8516FADD9B0BAA7B32B8A5B1E9E28CA61DBFAF84FA55ACCF56CBB78C9EA55EB0AF16CD14A47B1A7AFD747F94A3E9D3ADE75B75D7EF9CB5F8AB7AC1B7D35F63DF2EA122B1D62F68DEA9CC159F95CE7F868B2EB2E6F7BE4B78F75E58A3B2CDDEEA0833EF8D51BCF9F357B60D5AA57655F4A72E878767615ABD55AABE90F0F91250B4586FB84A14A58129E9504782C0858EA878D3B5855BAA17A455BF61AC30B49D9141F8A3D891C4F3DF554590056016FA8CB903EC827D89556EB084B0DE11243003B2ABC7492F91C3C00CCC024EB041B16FAB6D9432E533361E561026BB425C22D3A3BF7C47F8AE2EFB21669B4496965AF304326CC2C02398EFBC02809AEA6B270C30C3845D3BDA2B415E801071CF0E0830F6AFA006523A8F4388D0A2B875585A9192A99A882A5B3DA5DCEA7B5B6875C69ED8433DD0C0217C47BC3FA2CB4AD3016159671C2E5256C4839D3328AE6716761B94FCEED236A42B09D0A76503450DB99E90CEBC652E3A683F2353BDDCDEC36A417DB61592121A9C4D383DDBB2D23F671D0A911DF9A059C58A209DC943462C978664EE59CE1455EAC0BE0A7B0952DFBC0BA3F121F3EFCF0C3EFB9E71E5D2CFE48967088ED3AE5BAE105E13210EE702BE97156824AD4C1051962040EA927479CBBAC358D198EADA0E50E8E2F3AA35831CDEB7F596641A88A8517A0D15AB08DC40A7D62021287873357F9E40DB6EF42E45E4487DF75DFC25AE415E50B929612ED5E12A45D8BE39D96EE3C3434B26EFDBADE9EDE4A65ACDA28177CE1A108C26F49A9D4353252965ADC59E8ABD46B5DF9795ABDFEBE6DBABBFA366E1C4AE9A6B1C79EEF78E4918775E76287EF6F2CAD5F0FAF376A6958B26BC9F63BAD7871D59AD7367677F57676C9DC8A97BFF2ACF87F8AC231AA1BD41BBEB24C3FAFD59A719493007CC73BDE418B2E5B3E92BD58F756D6DA224488C38EB35C3D4335B0450FD7CA6A5675CC442E56C9C236583AB358FFF3CF3FDF069942EABAE80CA663F816E4A1C31A40A9B41F220688597113ABD47759160D30AB764360998D5387839FB282893531445F7341B8344446679568A26F6287C518DACAE838901ECE3E0364FDBBBFFBBBEF7FFFFB760843EF1C4AEED632855CD63B13C83926AB9B2020AFBEFAEAF3CE3B4F6B45D2A4955BCB2E16AF7FD7BBDEF59FFFF99F1A39329BA56E136396E664C5D8E64E41C2594830CEDA856BD3F5D00B2EB8C01087083BE3FDD74EFDEFFFFE2FAAD5873EF4A1471E7964C58A152CBE0875FBEDB77FE69967D6AC5943FA87D679D1A24534E7D143F513DD1332B0A6A43347D419B9A5545ACD9DB929AC3C1B72A580C365186A21AB9DF2FE515036E532C7A615E8B2EF2C0BBDDAB15AA03A082F14AEAFFF658A1A8C9EB837C0AE3A837AA2F69A0711167EDBDBDEF63FFFF33FA1926E891B53DE1F03ABAD6E834ED4DB6DB7DDFBDFFFFEBBEEBA0B8B997225B8AA4902432B71291E49887AE2B2F644803F1E78E081F7DD771FE53B6F00A728C9B0D15CC6B40D10C8A5813A4AA3E112E42F98E6619E6D174407A795046649F1BFB9DA25095A89883B2A147312EDCD86078E485AD165975C75F5557F3F3E5E2E164B23A343E2B8B5E6784F57D7A878B4F39EF162A1E4AD895AD24CE29ECEBEF172B2DDA225AFBEBA66A06F7621AF81D650D02A9571B1F279F37418D6556B633DBD9D1B37ADD5CF67CFE99365393E5EEB2CF5AE58B9FC4B575C71FA599F5D387FEEAAD52FEAFE9DA552B9322631A02BBDF3B5A9716E16956DFD765CE68204585FAC216CDB0235B36A52E240C3076F07519F4AB592B51E0CBD4FE63C81CA710485B63C0131733A9922008215FEFA8F7DEC63DFFDEE77A5B74A78D8A99E376F1E190BA645927BA7A7DC7FFFFD071D7490DE876073E87A20F14E197735CFA965BFD949D68792A08F3FFE38DE4F0C0E8D7CEFBDF77EECB1C7ACF1611494B986B70D6FA8D1EAA858FA9A1644D76BCC3A54C71C73CC57BEF2152BCADBAA63E0B6ECE5841217A508F53E057E60402C75B7DD76D38A69A9B517D621009F27228DA818E16E2D3BDC16DEDDCA5A8E4033E63F313DCB0053ED2C85E520FC044D9940285B239E4E72B739E82D2B01A68CF580FA0F27456DB4CE97C82A2B4E9E81832401BA004257178B8C759F952B57D27CE990430EB9E1861BC8918B325C1AF2DF5E4F9D8A85B518150CC5A82E5C730B9FD0AD01171016F61BAB8389B6EC5B69B177F0578873D8892318865D85EB69060984B5A46F0938EB7F825EEC38A94AF40532F729112FA2AFBA9EBAAB24002B2496A0976E88BE02B20B3D4E6696B833AC035484B0C19306796B7822EC77BEF39D4F3EF9A4E64BB127F808F8308F3CF2C83BEEB843176316FC1E9BA0954142B637A24AF289133774C50E2F572509B4C8B20CF271B1A7A76F6C54F49AABD62BBAA6B7BB73646CD845CD74513CF88F844447B16B6CB43A67CEDC35EB36F6750F0C8F8D75C4BDF3E72DD26D9BCD543375858E8ECEAE4EDF72A4522D77754BD28EC7B9D6F0D82BBAFF86A10D85B83067CEACD7D6BC2AD9B071A357D06AF55A7F7F6F8A2FAFE347A77217FA529096508941EBE80D986B0F3DF41016B719B31C693108AD947437DD1049400814975F2EEB2C0A5B812CC28C5B97E511592CA10D2ECA8EBD59FA544BEA889A0C301E6469EF6D9F138045B13DF3CC33415C30FF0F2498642F17E8ECE6DC844693AC09AA213FC35BD17CF93981A656065F6A2E9724788594AAD538F1C4136FB9E51656CC6DE97E71994F93F579038E0294713C033AAB66F67274E93D67AD0D193066BE316ECE0F8013E6E4316DD73009E2AC65104114FC452E9340047EF13C706A7822CC42D24E86022EFBB6C6F76C2BC04DC41BF55B0D5B5AA7FED41448FAD665CC6BF7DD7727AD39CA10B96766D32E134BE684E438E84F0A0009AE72BA411980575A3DF3EFE550A1F380424BFD848633F068AC46EBBF76F1C5179F7BEEB92077F1DCADDD77F32E5AEED6C2850B2FBCF0C2E38E3B8E35D7829F74D249F88848F3C57EC5E183277686DE7C040BADC4E7D0430F952D6B6AF144AD4F1AFA32BF319A81791A5CD01DD3D40263D3BA9260062E2C34D419FA75CFB0BF3081364C0E0BBCC3B22C50872B1B7168D591E1264E2B092C9F2FC4FDF00E815A229B40C75F92C0AB0F4D9D9362B391F474F58C8E8FCF1A98333C34DA486A83FDFD1B87D6A548709E500A45AD82CF29EEEF1F1C1A1A957DA07FBABEC78398D6251E5ACD7CA559DF71DB9D46865A7DBD83E5B49CD0AB33B9664F6F616C7CA3CBAFA5A6A6B3AB63EDFAD55D9DC5F1F288543A6F828C0CA129A795E2AD6A750233B93B7D91C61766C1BB80B122EDACDEDD657932540CA0BF8BD7BFF7BDEFFDD5AF7E25E98A91AB55D66DC3DC535A7159E64033E8A86EF0B994F60173AD9F13B0353FB5D561F12B33AECD3785BF1E17B61E217AD5C0C6D217BF62A76C8F3578129CA794042ECB50B43824AA8A16E1AD6F7DEBD1471F7DEAA9A71ACFC2EC0DD1B6ED3D1E4F5C2BA183458307C680A25997A65E686058639C13A3E3371049238152EC1295D6F68229E0AE254A1405F516D0094926566C699690E98F56A865A2D7FAEB86765E2809AC509CDA7D332EC16A254C42C84D770041333416ADA049BBA6CB60FDA87BF8F7C8B3B2840ECE663C63DF5A7A0E1A396935FEEAAFFEEA9E7BEEE1D1181C5A90C30E3BECA69B6E32D0B7FFA32410E76579C3802DC637BE14764A3FA1DC693AFC9F19F6DD64AA9E489A007612D11797A9472E8BDE9305676DABF5619CB68B98F2FE26695C605BC759E70FD904D2D2AC0E5FF3322D012D4A84F7C20B2F109017B57FE8431FFAA77FFA276BF14D5504F737BB70E60ACAE95E0C0CD50A1FB2C5C3DA1C5FB011AEA7FA876C5D6681793453C43874A59917CCE2049A7E2A091A690F8062DA07C6CDDB66DEA64DC3D57A5D7A7533A9C7510AF9D06CA44C2D5FF5ED185D6F4F7FA5DCA8A6779E337BCEBAF5EBE8B1D172D1D2EDDEB472E5EAA459EAEF9B3332D4E8EE9AE5DD7F95E1BE81DCA6A1B55161C3C8D848970F3B8FCA309935BB7FFDFAB5713CC1D353787A9D6A1700AF6FF6E9C7194283A57918C3B2362956D8096B336A0801060C83C105DDC138AE16D4856EACD3BD6D068B2952A0DAE5B1C71EA38C9607C18330D6C09B25658D7D225101C44D5475941A4E3BCA08DE121EAAA3A84941166CFF0CDE21537FA20CE98C0B202F1467124C25084579F409007A17743397412984D40C0493310222E7125D9FFBDCE74E3FFD74DD87589926A559EBCAADE508515A1BA59BE84132D8CDCF60414B0DFBE4934FBEF6DA6BA98D00C5364C27437B32005AF3257272906A614D83754343AB08CB2DAD7B8F2D2CE958707048E88C33CED06042703DB23C5DD039804C15988EE6256166D627F0449A17C7D052B3A693A006C9E9B2980D62CF9A628A6E49DF749979FA07F10E69AFA962231B5B9F5B7340607DF589762DF4646ED5BE5B7829F40E8510B0BAF32BAFBCA29173B4A971A1E08B4A02EB6534DD0BD31F9726BA8E15A9988A0DFD6885A9C06560BAF9BEFBEEFB1FFFF11F781DC064C47D04B9F239DD056CE92CDD6EABD601F703C6849D598B075026C2F8B5E320E210E822B3488F937176C105175861CAB49280DDC5C4B0F3ECD722576A3435EE56A1187B6C518FEBE025C1C5175D74D18517D79BCDAE52D7B8EF77EF6BC04A9DF9A1E171DFC82817953A8B95724DA7A6B7B77F7464BC56AF6DBBEDA2975FF62DE0F549E4F27FF58183EEF9C1FF17C5AD38EA8C5ABDA5E2A0D7CDEBC34934DA4ACA1DA5B87FA0F785E5CF69D8F3E66D634722CE79E5D41B161D05AC016660AE0094B8D0CFCB1C0D1BC042C1E48A99C3D7C04F5CE0EB64E14C5B1447DB73CF3D7562A50471E6930CB0D332FFA2ACCDA11D5A32BBD11F69AA4E6B4C5415D3FBE0411CE9308CCCD87492713DEB3E21108A41A66843BEF0852F589A699B3C98928368A8A266C81735D662BC96D7E8B2A88625F9B94938771834A863B85C5D2653697819363F09B1D5B6EA2498B20623B06E360C555B03AF310D9A011868041EDBB00260321436FA9A190DE0DC5106654B0D7B2567E9BCF3CEBBF0C20B91D3A88D7887496F65FDE9BD8EA31F160FD958665A3806462B6129DE7AC925979C75D6593BEFBCF333CF3C63888A33F8BB2959B090064D345D8A0E1B7601A250CEE204FFC788B125B420A7CD4AFBC4273E71DB6DB79181469A0382706B43444900B884DD2FD5C79C212EE8CF9C4B3B869A90F0585EB36611F983754C797F2BAAC0CBF7E52F7FF9CC33CFC472A51B92C132BACC0FE9B244320D83A210BDD1361162C482970274D555570104FB9EF7BC47D2423FD183305EDF9877C8740E9036CC2FD2A65499CC08731A0977E3EB6613678A13E8EAFDF6DBEF81071E40EAE218495AB97AA3EAD1F08BA2F5B4883C950411485EFE31B1F798E6E34A7534F2B8E91D694FA5566F6FF7C848EAC61DD846AC40AAD5F0C8A6C1C1DE4A755C7C5CBFEA2CF5942BF542B15CAFE53B8BDBB85677CAE86BA395358383A556B370C8211FFAF6B76FF36D0D62525F52401EDF6F40F678A5BFAF777878441B44D20BEE144B56831DA01A901E60E998A147CFCE80A5C1415596CA69DFDACE71560D1197930057D2A2B532CC4E2B3D255F280A0A475D86510A500C014C97A5F1B17912E0975E7A29EF930C92C504C3443FCBD4560544884E8D679F7DF665975DE6A6CA22B5BCF5380082B7C2C5D01FC872692577DB6DB7A79E7ACA56D20E809BCA26901CD229D23961CCE43B611173FF7CD64D1A79B3B592C080DEB81BC5962E8B7F98CB8EE47A97F9B810BD5623C28253B6CADC116F28E996686B2898D2A1B411A10A1F6505775106286264C3CAD8B1846B9817880B4C17614F71FA9172861F89380A7FBAACD78D21C4CC6013C0822DCEECB246BE38BEF0D493D400FE6ED80BC168F20D6491E22CB281F12DE190B06DB8CB9480ADDD7776306CBAE232931ABB938582A8AC4D88097B764167B62DE732E4B096FDEC02AF9D0BB2A269883401E199F2166B344D169C05693465F23BAC8BB20B305DC2F6186F6C1DA007291F1233871F7EF83FFCC33F18BD19A4A0CB7CE3D68924AC3D341614D959B29204AC665EBE41EEDAB596098390775BC61B8D7ACC520B436A9C2E2D9F4106327F6A3891A8265A3506DCCA2CBA3E174FD4B66101B82D7BB0598EA395F0585E8D3ED14DF42B1E6A13365F10BA8984DCFEFBEFCF42589101AE0F83930D750D721220BBBC4BE1A846475ADE4ECA77F7F69089689CD10589E72EA82442D90F0B4F5813940ECB5C9E7CF0A200B502EA413787A44E3EF964207760E230C1638F3DF6EB5FFF3A77E027D69C8B28023249CAA6AC07B355591C2B393CEDB4D3BEF6B5AF1105B1F401CB0222F2195623BA19FBBE5A16A0C176C286689370C619676830A23A6D682B8345823CF84958313FDD2B492139B51D96268FCE05E7354307659CE311E28BB4559684D950E66CD1C43548AD701B80BE2569A0EF9B880506A30D493B843339E8A083448DC71F7FFC35D75C8327D6BA0860E093B618660D18F198B5D736CE9078EC3D4F27CAA245B673CAB78635695508B404B03401CB360E232B2E886FB102610B23CE0ECFB5C474CBD06BA3F038C08AC793667445DE874DB04DF9888292BD68522ABCE904960339832DE502DFA92504C2C4CCBEB45831B7323C1FABD773997F55FA900C02C3200A0B0B004C4409C08565B464092C33F41560B57570C42439230CD24C4C93D0A8B36DA1500B9C4CAC15294700AD58F2931EBCFDF6DBBFF8E28B5482E834C243916C0683154A02180755309671840188A20A7E2CDD628DC8708CEA59B2166FBDF5569990F02CA2704956858195876736242F8B71593191C18161195816ACC4891E94E61795AC5D252FC3C7C7BF6C1C902C431A6783D0A23D66F3FC5AD73D351C71C411F7FDE847AFAD792D9F3E854CF0192401A66B280938215A191C448813DB0B37C9F1E23203565A008E0838A935470B73D7647BEAB4B3F2D43459B882C815A5F3200D5038264204B7D2C2210B172EC41C06F18D7C644B54C7E1830E612279064900929D75FD846A5D5A68C6D6C320F42073AA6A6020D7B3382EC51D030972F20B0B06A3BBADFB905606AF2E9DCDF5742BFD0FABC92098B62C5B634028D122A7A38E3A4A0F92164691368BA34FE86F2A8AD565E015EA435D4F3F4B97E51D9AE1C200503800D1E49CB7B989D0E98C718729D1211F445F4196584C224C7BD557C830481D740DD6C1F891DE9F7FFEF9975F7EB9655599956CF81FE6F631F54B9BA2036264136549EBB4FF8CB242BCD696BD4F5C00C3D7F6B2BA7100F335664C7936A2B5259AA4BD6F93041442E14BB4E4FAC961557B997F386C4E875B18233E09403E780FCF318792CE23CE4FC43C2146838CCE656DAE2D88A8EB111E22FE2BAFBCF2D4534F35ED244CD068AB3D84C142B1F49541C8111B3017B1F9668DC8D100347E99F83AD786CD1CB9008DC8E4BC66FEC77FFCC73FFEF18FEDC3F7BEF7BDBFFDED6F3FFDE94F8B019994B6EA35B30DCD4402EC141B9C788B157C5E7FFDF5679F7DB648FFC9279FB48999DF404F3CE9A4932EBDF452288C25A3D01CC1D8DCB2858EED99CB3C9B6F79CB5B9E7EFA696A6EC12B37F840CBC15FB66C19B2E7631FFB1873FCEA57BF7AE699671ABC01075E8FD09BA38F3E5A638615324DAF604A37ECF466FB41071FFCE8A38F3EFBFC73D05958B2DB46D69B0DB174A1808CE7A8BCFBDDEFFEE94F7F8A3A6025215352BC59E5A1EB8355B29435729F427F5798900E9BC66C1295E80E7AFF99CF7CE6BAEBAEB32A18032E360421242E875F671E1F055E1DCB08449141DECCECBF36A5583B2E36B1DD76DB893A4D11D64D4469B7DD761B490EDABEE79E7B4E3FDC61871D44BBA07FCF707FF1DF430F3DF4873FFCA1EE8CB0D1763FF1C4135AD87DF7DDF79FFFF99F398421266518C46BB3F1DB24014C9FDA08ACAB1017DE65262FF93376B24E39E5941B6FBC916C6EDB8B36740ACB48210B45C3A36D16B9EA56D40A3F7559D981C909D3FE747F9C87080397155486F9CD2E30C451548DCCC867BDE9A69B2EBAE8A2C30E3B4C5431A52470411E840E9A1690F8B3189F7E6E84644612F954930D62ABC5758113230A7A8B1A84325D2167C85A9E521258E41F268887038B6D4AFAC16A2703D55283D8325374E0189C11B194BDF6DAEB17BFF80501E1B00593E810896B8C5B6716F10CFD2F5DBA54E3A1A4C6B0CD93ACC8D93CDB53F61570414359B87992D59AC19F0D228100320A9FD5C06B6DB19B37274A512765597DE652A75010ED9EEC668B20A1D059D08F61A13EB8AC0CEA7DEF7B9F581B8030BA0C6C58FD10EB0922B6647F24AD91A935F0D3FFBA5ED74004E1961B1D50AB4D391FFC88C3898B831478EBEB8BFA0F0523C9C3968438FAAD74D60C3D3297AD9260224DA8D851AD55172E58B86EC3864AB5D29D8968F6AF8D4C8D285D96FC40741AAFB4E4E239E79C831F80B34186C374146F5E8528054CD7CA9029A415606B93ACA9007531FA137B4E1B74EEB9E75E72C925E692B69A356B53634864A818187068D0C8065DFFE10F7F589C025BCD0412BA8F652E4EC7A9D18074730D4FD79B73C965990F6800F409D05A7DFCE31FFFFAD7BF4EBCCB05AEC5E9743AB43F032B7699BB0CD730DE4E2D05AD22496AD2E30CA21956D566D2859220C9C03C0C4200A5812DD39D350B92A6A467D0F210D165B51A14A01A33324D5CBFC5DE820BA0CC5A2F1A710D517268ACC0B2DBBC192E6868635C3BCA50F3D04989E502A181CFBD91F506B7323AFC72F4B1B1D62EB8A1EC6E18AF885206F0CD6F7E53AA95CBF238CD21FCD6B7BE5592D8866AE07A2161230388C6E32A60FA7BEEB9E7C1071F2CA2D57B04CC94E76206EF90814C9873D8C0C3A7D424426C660B22A2882C5FBE9C59E3A5E0ACE9136ADD3141F4C6F775181F7FD39BDEA459839FAA3F9185704E312291F7F1C71F2F7507838C479800B0383CF43CB9AF002A978582409270594CD40C2F6DB134E377BEF39D77DC71C77EFBEDF7E0830F1A048576EAED6F7FFB19679C614EBFCD692161DC328C0DC0E01009644C62BF4C96AB5608031158FB9710D24EABA0D15085087FD1575A4ADD0D77709265CDC323B47FFA1550B471D0D4257472194D68D8DA06E88FA3222EA60329531735ED231FF9C8FDF7DFAF67BDFFFDEFBFF7DE7B5D1A79D3AFC4DA4E38E1040E037E402B17824FE98D317ABF61E5F240BFB758CBB56A2ECE355A4D50620C7DA1CD83C9688BE94BEFCDF9833587F9621A9C0483ACA2C9DE21B699EA4DF3985B6E125E6F2B3089B35E7AE862541851726CDBC1692145CAFAF0507C672E4BF46582462018C3294E3FFDF46BAFBDD6A55D322CE0CCC123CB62BA93163A43753D2177BB20AC20C5D76171239C03A63D4D777FBC8E68EE28D7A650BBCCFCC7214E2E078623E787450B61C5DA2401DE271718796DF04A2ECB43B7C40CCD823E0A4B962C11655A94C205E159EE6FB17473555903351D5A59B1B874C262E6D0F7D816910AE910CA414F84C38AE48E3AEAA89B6FBE197037EB7CE9B24008B6A9155DBB2DE304B6C5211281D9EE4C1C0FADCEBBC4D8C30F3F1C46985D16DE982E2A431E8E7414236F54A5D0E67E9D92202CD1704122DC74F4631B4AD60D0BAE9B68FB649B126CB0CCBA30834ED7CBF8FBF6B7BF8D2716572A7242DA4F5BC778046DDA86AB03629B5212209926F715B07E6A40214939FBD18F7EA4C5874260352E45BC30FD49CA8AFEC460D51375E800799DD856689AB68B61BF1AD2EA397B30C728AB88838FB4E923F4BB609FCC11069B138BD1F8F489466FEAA74B7D35FBECB3CF9FFCC99F88F1D9294539C2BCD0DD24879F7FFEF92F7EF18B5FFAD297107493B3E3A32CB51C23481CEA861B6E902AF1B39FFD8CD991BA60A2C2E27BCB962D9389100A76364CC2F3D1471FC5128CB3FE4436EC8928B4F369FE9B8636CD9BBFC0DB13D58A45CC424A0D092EC932ED5CE667842B51AE42DA3E2A1890E86EAAEC4CE6CE2C684CC8525B410301315C344853DC9D6C2EC71B6E4B4227A5401E1E7CED5ACBB5D0575EC6A5F000B051BD39E49043EEB9E71EBC2228B99081862D6EAE0FFFE66FFEE67BDFFB9E4577A73C69B892445444BAF4A76EFBC0030FE83E9AB221D10313CD5A895B8942F4393A1D690533E0B490564197F666D65A87A80F60CBA18FD1CE092639FA4DC86EDA24013905864C950B3AAF81A9A9A7845DB7F4D511471C71F7DD775B88CB5A58877DCF2D038A0C3D03E0E404E131D7C2DA1393ACF5A00DCC6AC58DABDAC48DD84C2272C061131076D82C9E97E57AB67987C29537E1A743A1AD31578334CDABAEBACA2E236CC30A873E7A44859B2A5460A3A27E4ADFEAFEE8DA53C6CFA6F30E35B3B6B52EB5C3C2C4E82989074916E62671283454824C24768721040BE9932B68969C4BDD09E4DDE9DCC948B2F211931C9889166B99EC1D6A6DD935DDFC8D96C88E61277940620B01156E8B3A82FF96D45844087763EF6C1D3C0FD52E4ADC3DF5D453CC9385D3EA8BDF599D3A8408878A32B802976970C69DDB909ED869B43917641A1050C2F380EB19EE6F88D056BCC371B28C286B9360D7186A20D7301E8B4692FFE332645A98BB9600E02743DF6DA64D7FC8FB248D0F130FEDC6B6D380097D35D34B2F75143D3B7B65950F5D26590A13076632A58688602C4E57FAD29A6BD6FAAD183474201D4A52D9F4A6362B98A0B4196DFA4436E637BEF10D2B60094B07B88638BFB99571911D7DF4D1B7DF7E3B7BAD15B08C207B03CE2DCE1F6430D9F40CC362C550154FDC75D75D3DD0799A4A3103B668E8D97401A41A4F4756857D3125A834605466582146F19437373FAFB520E554875834B05A3BF6BBECB2CBD34F3F6DE5931CB6E9E204D6C72D0CC3E88640DE4BA8FFD99FFDD9F7BFFF7D5224EEBCF3CEE38E3B0E6763B265BA8EDDD6188A95928404930B7A1487B46466CD94EA2D1CD0028116C3832FE8E794CDDF76DB6D21F62293B2E89AA1A82659FD799216CA311273DC53A9608D2E346BED9776102FAB9E287A139342968415795180E36B2E533B3850B895C54A15B8EBAEBB4C3998AC694D270976DE7967D1A4A1B39952F87B2581A802DF4E5B8A79486950FE8E3BEEB87CF972CBCD25484BF4851C65ADC95FFEE55FFEEBBFFE6B92E5B382862B45FE1FFFF11F0D7E71CA88B145AD9A5BF61520CD44FCFDF0C30FBFF5D65B0DBC56B3C37B894263A25D5CE2BEFBEEC349852F57DB07596E8E18EBC1DA3CED163100CE4FD8032F0C0587896BD0479421911198E200A3E09826AE496A5656B264FA0B0F323D14D3860958F1083A97994BB68BFCAFCF3FF9C94F7EEB5BDFA2AA08E33D09E0DD31110C77080322AC17334C50E2D58C415ACCFEFBEF7FE38D376A41885B1247D1442EBAE8A2B3CF3E3B977815A395B4162C5CF4EACA57932C8560BA88B11DD15CD680D4D8229CD1D2D2F512419C77DE7916316EF35CBB2CC06ED978C6DDD805175460DA61836B5B16636ECB36E8D6F5C932E1A0049721B6221D4DD136BF996985612AB0A90B935FE6C4B428B7419F1A30B286A44302882C54075BB1423F37A377C86D59F2C3E7323D7FFDEB5F8BCD49A858F61E8A8E4EE9CF7FFE73EC0C53E4A79304499634850719C2B063A2DF6A90325FF6D8630F494DC3873031E3B6C4B47081F26408B5A89956F5C287D01E20D56184C065DA58E8CE6A533BC2F1BB402133C52B6C3667DB84872ACAB2395DE06B62F0A6FA308BB3CE3AEB8A2BAEE02CBB5465C1BCB3160E86D2413E61086B1107C0B4EC82399DD0678D8DA0A94CB69543020825C1B9E79EABD344F759AB018CB356E4935FA6DD1F78E081F7DE7B2F0CC1FCAEE47184D11A97B94F5D60EFA2E8D80EB6B22E6696BC870F56C78D0825E771CA2C52C25193FB0AE87FE21637DD7493D891A1526AB466315876A5FE3740401758481603DF2C0C4C93B2E5A0CC9AB8539C755FB2A0B1E91766E9A00F92BAA063FCED6F7F1B1FBDC1CE40D304A8094D73961868188F9A7287C23A17B38E295A21EBC37E0EC00BAA07A7EB3BDFF98E44221E0397C61EC82B95EA2DB92AFE08767933EB10124D95943D99E384046D53D0E7CB962DDB7DF7DD7FF8C31F5A5CDA6509739C2B3E34BF21EA550A9AE44CF365D1E002D234A5358B539348673942E49813CD16499D76DA69A27B6E9ECFFA50B65E0756A50BC0F4BFF4A52F49D481A166126526CC4B97C4A9F15715BF4B5501EF82488FEBC0A0CF2E154D964A13690FDEE55A6B94BABB2B6956866779D5CDED01421916266E3300F2B2AC343F3CCC61401E7E71FDF5D77FF4A31FB5DA639CF89FFDEC673535A4BE79BD30CE344EC224A6CD843AAF9D1F58800136989F21348527AF731B4559AC4B1ACCCD37DF6CE5DC3CC8C4A1019DB6FDD03EB78059087FE432C42DC97283BBC1F960092424D102516918AE2EC8DF430E61107367626CD2A82EBEF862837DB69476F35458E6C557BEF2159122868E853A43991AD627DBA9674F2542C4856501A053E3D3237FC1CC418355204F019662AD112CCE84E7A4CD7408D5A33061814498E9504F184078D2A3ACAE8293AB6FB1CB2DA9019AC7E5687E3C5D23A5E497BFFCA5A9C5E61A32F07033CD0D3AD36209966833B3266485AE98957CC59A7FE0031FF8D18F7EA4C98A06C2CE4E9105BEF89958183611933104349304F6488BFC98DE6A1510886E780D1E67C667AA93732E995E6B9E6186AC7EF8AAA42FB3245C801CC9DAE1D1D2D8B4435658B878F1E277BFFBDD0F3DF410A96F22741D0CAB1D7D3D9200A5187B9948A395046B9A7A283A26EA33B536064FE432E96D6871BAD509279C20814FF194AEC15760D51F24C3B8ACBDA295CB5AFF3C3D82F418D3435DA0ADBC7E4960F91E06238CAB6DBA7D71715A612773A1AFCFFBB8D29A863E6F7F8C80EA1E7610F427A7D6E8ECE991402BA44A43AB311191E359ACA7CB605CCD2B6DAA89F9FAC9AD9A4C21162FC1A205F482BB99FA12A73D114911D6055A34DAFB916CFEF9CF7F5EE6B618DF76DB6D474404394DB703B2AAD0B819F9CC35D2D34902DD5CB6C89D77DEA9F7867B111E8130F0DBC637DB2441DB7BAC4CAAD2CCBF6C6825F82E0E3DF4D09FFCE4277AEEB6DB6E2BBD72C99225BA52EB60C0FAFA5F3A81F83E49105A2B8A7EC4C5B432CF3EFB2CB995B063CE026409799B41603D50A349999D2E000733C30293C20A4251EC50080CC03997356DC620E39461DACA923EFDF4D34D677253C587210010E02D03C73CCF33788DCC82B1ADC44DC71ADA95585A6D9D2D3850F8F476D965172DA025D7A22293127AFEF9E75F7DF5D5F8792EBBECB2934E3AA9EDB9B656D36966E4861E74D041FFFEEFFF7EC00107DC7EFBEDD2D19F7CF2499C1F483E4A5EF6DE7BEFC71F7F9CE882BFBFA9F9C8C9FDF7DF5F9632064B9BA7350CBE859681C903DE9371C4218C82BA06975985FA5C17D0B2B58DE74E595E1BBE4C77081D8B50AAB5887341A20E0100B4722BCD40C124971C0C51ACF5B620E1CCC200876023EB5C1A05B02DB82664B27DF9CB5FD6D32500C23C2833757959E5A41810C810C479B45640194B5AE80E9AC21D77DC71D4514711B124F615F69C226B9613A8A7608A4D7EDC949220F4595174261ABAFBEEBB433A9E41128803EDF5CE778AB887366D9A3D67CEB1C71E7BCD35D768FDC84615057574F82E72DA312F9E9389DE49B954956E785CC2188E6F7E644816598EFB02B39A434B2E3F7CC138A0D988B8B3659649E7B2FA41F38798670C7A461E4B824A0C58F5BF9DBDD0203010371E2DD679F0C107EBFD75D75D4782F574A4329D24D0DD76DA69A7E79E7B0EEF28E29F686A2815A6930461DE811D1974A328CB033CE6986324D276DC71479D766B88C49586D6692E29944D485A5C4993020391DD31E35E5F69D6C0459893CA160AD2856B5B0C1CB3156086D0C916EAE976071B24FC34CEF0B5B4831AF333CF3CC3D4306BD85F701BB9DE5896CB5245AC4B55123409D79FE295E283747932AE126DD977BA6D1F275FA3478878407805B443040F03D4E7AFBCF28AA189E0784715666510D8065B8B7DAF37565E10A790763AFB38E1B1F2C9D89E814F86364158C3648D57AD409A5AD4CD3681CB72F5B0C524AFB4DC966C60AE67D8442809428EECD222495B5612DB91E758BEDCDC5CCFA8CCA17FC95CE4D3CD30F420B94042A217E01E41B762C0A80C2C3DC93F2ECBE7C364B606069624176D9986E1A6816933498084B7C13342DC7F2E08EB9983488472C515577CFCE31FA784D820D25CE096653044C9F4A755AE87ED32E20C23D7B20C4965B3601A5E38D4E19939949D43FC3F21160241177CBB333493E9EEED19D5614BDB3497328C33AF48D66A7DA97AE2B2428189A86316A749703636A6586193041A1B455B61A14D92A672E27360D8A6A1DB657BEEB9E7638F3D86AE475E998422A4680DCE5852CC32DDF0D39FFEB46C321C6B345ED6B760FE80C681A981DD00403A1B1176F4DC2A49E0B2E44E3325CD533AD97FE2B6F4A598E40E9982F985C3FC3ADD590625FDD1E02C96B68B3BC8E2FC486E2C7B9C0100ECA0BD61129116C5A9B183893D4AEA2455265A9370893889611981AD89CB127F0D08811500B8DB8A284506C71D77DCCD37DF6CF33DF7DC7365B5582C138D5B3B2845049002B386C3B0B965B820FEAD4785E508FC5E9F44B895BCC75E9F2CCC78AF45D39A1BFBB6E41FF3E6137C25D8AEB9882D1027472921E72DEC7C80BBCFE05127BFD81D03F542EB3587B946ABC5B4B5DD4212184E4538BD5CD081CB60DAC2B06DB8C449D047093A231601C76734C8220EAA2589C7197045DB3DA7DC09F399429A2EF329B73288472B3CA1ECDB7A0FE0C2C30C3739A915D1F5D6F54267203C69C6C7A75B6E08C848D9C66F19811C06B012A13CFD2FE2336C06BB15B6308CE9A28B2EFAE217BFA8F75A798B3E19FC8E464B1534E104C3A581C1A1E859FF0A5D637EB9192481CB74492BFE94427DCA29A78833BAA08E74DA7D7149B1A3E3D24B2FA50389EEBBCDDCB96B5346D393B57082174FC8308DBCBB7B3CB514BDD65F6F589BCC36491F0575186DC53EE889D61C8684167350B4D59C4BF7111F3498687D250E72FAE9A71B0B08F3A4C56E241B2EBEF86297A551324D7D280A09FB595A5A9DCB42085B2509809720C61812038A7928DE5C80EB6507818987DE8CB60DC2797DE79D777EE8431F7219F0910B3AEBB6E1AE47299A77D851E3CD6F7EF3934F3E892B06DB5A275AEB6029CB1C25D48E0B2EB8E0C61B6F94BED586AAD6D625913365069C9D2033B9C25C1D7DC81CF52CD95EA79D761AA769E79D77D6AD34363B1DA273A494C10AB954FFB06413B342F0139AF267FA789C01B44D6BFB06C2C0E8D0A2110C7EE1C2855A64F1D9C58B179F73CE39DFF9CE777EF5AB5F210F7478F544094BD3F970FC5A313F1C4CCC417A3A6BAEF7D64C4616CCFDF7DF4FAE4A9B2E3FE520F10A80D5614718C16F3583869BC90FFF7F1A8323CA70A77C930000000049454E44AE426082</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">0</prop><prop prop-type="Order">20</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">0</prop><prop prop-type="Open">{</prop><prop prop-type="Close">}</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:SplashImage.Transparent" resname="O:SplashForm.O:SplashImage.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033497963</prop><prop prop-type="Status">6</prop><prop prop-type="Order">21</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Left" resname="O:SplashForm.O:v.Left">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167245</prop><prop prop-type="Status">6</prop><prop prop-type="Order">22</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Top" resname="O:SplashForm.O:v.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">23</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Width" resname="O:SplashForm.O:v.Width">
<source>236</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">24</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Height" resname="O:SplashForm.O:v.Height">
<source>48</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">25</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Caption" resname="O:SplashForm.O:v.Caption">
<source>'SpaceMission'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">1</prop><prop prop-type="Order">26</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Font.Charset" resname="O:SplashForm.O:v.Font.Charset">
<source>ANSI_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">27</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Font.Color" resname="O:SplashForm.O:v.Font.Color">
<source>clLime</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">28</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Font.Height" resname="O:SplashForm.O:v.Font.Height">
<source>48</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">29</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Font.Name" resname="O:SplashForm.O:v.Font.Name">
<source>'Arial Unicode MS'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">30</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.Font.Style" resname="O:SplashForm.O:v.Font.Style">
<source>[fsBold]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">31</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:v.ParentFont" resname="O:SplashForm.O:v.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">32</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Left" resname="O:SplashForm.O:Label1.Left">
<source>88</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">33</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Top" resname="O:SplashForm.O:Label1.Top">
<source>54</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">34</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Width" resname="O:SplashForm.O:Label1.Width">
<source>130</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">35</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Height" resname="O:SplashForm.O:Label1.Height">
<source>26</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167361</prop><prop prop-type="Status">6</prop><prop prop-type="Order">36</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Caption" resname="O:SplashForm.O:Label1.Caption">
<source>'Level-Editor'</source>
<target>'Level Editor'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167477</prop><prop prop-type="Status">1</prop><prop prop-type="Order">37</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Charset" resname="O:SplashForm.O:Label1.Font.Charset">
<source>ANSI_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167477</prop><prop prop-type="Status">6</prop><prop prop-type="Order">38</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Color" resname="O:SplashForm.O:Label1.Font.Color">
<source>clAqua</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167477</prop><prop prop-type="Status">6</prop><prop prop-type="Order">39</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Height" resname="O:SplashForm.O:Label1.Font.Height">
<source>-22</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167477</prop><prop prop-type="Status">6</prop><prop prop-type="Order">40</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Name" resname="O:SplashForm.O:Label1.Font.Name">
<source>'Arial Rounded MT Bold'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167477</prop><prop prop-type="Status">6</prop><prop prop-type="Order">41</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.Font.Style" resname="O:SplashForm.O:Label1.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167477</prop><prop prop-type="Status">1</prop><prop prop-type="Order">42</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SplashForm.O:Label1.ParentFont" resname="O:SplashForm.O:Label1.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45408.4303167477</prop><prop prop-type="Status">6</prop><prop prop-type="Order">43</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/SpaceMission_DRC.rcn
0,0 → 1,4067
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="C:\SVN\SpaceMission\SpaceMission.drc" source-language="de-DE" target-language="en-US" datatype="cpp" tool="ETM v10.0" ts="C:\SVN\SpaceMission\SpaceMission.drc">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4429398148</prop>
<prop prop-type="OrigDateTime">45408.4429398148</prop>
<prop prop-type="XlatDateTime">45408.409537037</prop>
<prop prop-type="Translated">515</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="GamMain_SLevelInvalid" resname="GamMain_SLevelInvalid">
<source>"Die Datei für Level %d ist ungültig. Level wird übersprungen!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The file for level %d is invalid. The level will be skipped!"</target>
<alt-trans>
<source>"Das Level Nr. %d ist ungültig!\r\nDas Programm wird beendet."</source>
<target>"Level %d is invalid"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45406.8812909954</prop>
</prop-group>
</alt-trans>
</trans-unit>
<trans-unit id="GamMain_SMissionSuccessful" resname="GamMain_SMissionSuccessful">
<source>"Mission erfolgreich!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Mission complete!"</target>
</trans-unit>
<trans-unit id="GamMain_SMissionFailed" resname="GamMain_SMissionFailed">
<source>"Mission gescheitert!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Mission failed!"</target>
</trans-unit>
<trans-unit id="GamMain_SPunkte" resname="GamMain_SPunkte">
<source>"Punkte: %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Points: %s"</target>
</trans-unit>
<trans-unit id="GamMain_SLevel" resname="GamMain_SLevel">
<source>"Level: %d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.9821524421</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamMain_SLifes" resname="GamMain_SLifes">
<source>"Leben: %d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Lives: %d"</target>
</trans-unit>
<trans-unit id="GamMain_SInfLifes" resname="GamMain_SInfLifes">
<source>""</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamMain_SBossLifes" resname="GamMain_SBossLifes">
<source>"Boss: %d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamMain_SEinheiten" resname="GamMain_SEinheiten">
<source>"Einheiten: %d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Enemies: %d"</target>
</trans-unit>
<trans-unit id="GamMain_SGameOver" resname="GamMain_SGameOver">
<source>"Game Over!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamMain_SGewonnen" resname="GamMain_SGewonnen">
<source>"Gewonnen!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Complete!"</target>
</trans-unit>
<trans-unit id="GamMain_SFileError" resname="GamMain_SFileError">
<source>"Die Datei kann von SpaceMission nicht geöffnet werden!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The file cannot be opened by SpaceMission."</target>
</trans-unit>
<trans-unit id="SpaceMission_SAlreadyStarted" resname="SpaceMission_SAlreadyStarted">
<source>"Das Spiel wurde bereits gestartet."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Game is already started."</target>
</trans-unit>
<trans-unit id="SpaceMission_STitel" resname="SpaceMission_STitel">
<source>"SpaceMission"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="SpaceMission_SFileMissing" resname="SpaceMission_SFileMissing">
<source>"%s fehlt. Bitte installieren Sie SpaceMission erneut."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"%s is missing. Please reinstall SpaceMission."</target>
</trans-unit>
<trans-unit id="Vcl_OleConst_SNoWindowHandle" resname="Vcl_OleConst_SNoWindowHandle">
<source>"Das Fenster-Handle des OLE-Elements nicht verfügbar"</source>
<target>"Could not obtain OLE control window handle"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_OleConst_SInvalidLicense" resname="Vcl_OleConst_SInvalidLicense">
<source>"Lizenz-Information für %s ist ungültig"</source>
<target>"License information for %s is invalid"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_OleConst_SNotLicensed" resname="Vcl_OleConst_SNotLicensed">
<source>"Lizenz-Information für %s nicht gefunden. Sie können dieses Steuerelement im Entwurfsmodus nicht verwenden"</source>
<target>"License information for %s not found. You cannot use this control in design mode"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_OleConst_sNoRunningObject" resname="Vcl_OleConst_sNoRunningObject">
<source>"Es kann kein Zeiger auf ein ausgeführtes Objekt geholt werden, dass mit OLE für %s/%s registriert ist"</source>
<target>"Unable to retrieve a pointer to a running object registered with OLE for %s/%s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_EdgeConst_SWebViewFailure" resname="Vcl_EdgeConst_SWebViewFailure">
<source>"Edge-Browser-Steuerelement konnte nicht erstellt werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Edge-Browser control cannot be created"</target>
</trans-unit>
<trans-unit id="Vcl_EdgeConst_SNoWebView" resname="Vcl_EdgeConst_SNoWebView">
<source>"Das zugrunde liegende WebView2-Steuerelement ist nicht initialisiert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"WebView2 control is not initialized"</target>
</trans-unit>
<trans-unit id="IEConst_sNotSupportedByEdge" resname="IEConst_sNotSupportedByEdge">
<source>"Vorgang wird vom Edge WebView2-Steuerelement nicht unterstützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Action not supported by Edge WebView2 control"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExMissingExpression" resname="System_RegularExpressionsConsts_SRegExMissingExpression">
<source>"Ein in RegEx angegebener regulärer Ausdruck ist erforderlich"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"A regular expression is required in RegEx"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExExpressionError" resname="System_RegularExpressionsConsts_SRegExExpressionError">
<source>"Fehler in regulärem Ausdruck bei Offset %d: %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Error with regular expression at offset %d: %s"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExStudyError" resname="System_RegularExpressionsConsts_SRegExStudyError">
<source>"Fehler beim Untersuchen von regex: %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Error while evaluating: %s"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExMatchRequired" resname="System_RegularExpressionsConsts_SRegExMatchRequired">
<source>"Übereinstimmung erforderlich"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Match required"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExStringsRequired" resname="System_RegularExpressionsConsts_SRegExStringsRequired">
<source>"Strings-Parameter darf nicht Nil sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376042</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Strings parameter must not be nil"</target>
</trans-unit>
<trans-unit id="System_RegularExpressionsConsts_SRegExIndexOutOfBounds" resname="System_RegularExpressionsConsts_SRegExIndexOutOfBounds">
<source>"Index überschreitet das Maximum (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Index exceeds maximum (%d)"</target>
</trans-unit>
<trans-unit id="GamMain_SWeiterMitLeertaste" resname="GamMain_SWeiterMitLeertaste">
<source>"Weiter mit Leertaste"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Continue with spacebar"</target>
</trans-unit>
<trans-unit id="GamMain_SAppTitle" resname="GamMain_SAppTitle">
<source>"SpaceMission %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamMain_SPauseTitle" resname="GamMain_SPauseTitle">
<source>"%s [Pause]"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamSpeicherung_SNoValidSaveGameName" resname="GamSpeicherung_SNoValidSaveGameName">
<source>"Dies ist kein gültiger Spielstandname!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This is not a valid savegame"</target>
</trans-unit>
<trans-unit id="GamSpeicherung_SEmptySaveGameName" resname="GamSpeicherung_SEmptySaveGameName">
<source>"Bitte geben Sie einen Namen für den Spielstand ein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Please enter a name for the savegame"</target>
</trans-unit>
<trans-unit id="GamSpeicherung_SReplaceSaveGame" resname="GamSpeicherung_SReplaceSaveGame">
<source>"Spielstand ist bereits vorhanden. Ersetzen?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Savegame already exists. Replace?"</target>
</trans-unit>
<trans-unit id="GamSpeicherung_SNoNA" resname="GamSpeicherung_SNoNA">
<source>"n/a"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamSpeicherung_SIsNormalLevel" resname="GamSpeicherung_SIsNormalLevel">
<source>"Das Level ist ein norm. Level"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This is a normal level"</target>
</trans-unit>
<trans-unit id="GamSpeicherung_SIsRandomLevel" resname="GamSpeicherung_SIsRandomLevel">
<source>"Das Level ist ein Zufallslevel"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This is a random level"</target>
</trans-unit>
<trans-unit id="GamSpeicherung_SHasAttachedLevel" resname="GamSpeicherung_SHasAttachedLevel">
<source>"%s mit Karte"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"%s with level"</target>
</trans-unit>
<trans-unit id="ComInfo_SVersion" resname="ComInfo_SVersion">
<source>"Version %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamCheat_Cheat1Text" resname="GamCheat_Cheat1Text">
<source>"Unendlich Leben!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">3</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamCheat_SCheatUnlocked" resname="GamCheat_SCheatUnlocked">
<source>"Dieser Cheat wurde freigeschaltet!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Check was unlocked!"</target>
</trans-unit>
<trans-unit id="GamCheat_SCheckAlreadyUnlocked" resname="GamCheat_SCheckAlreadyUnlocked">
<source>"Dieser Cheat wurde bereits freigeschaltet!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This cheat is already unlocked!"</target>
</trans-unit>
<trans-unit id="GamCheat_SNoCheat" resname="GamCheat_SNoCheat">
<source>"Dies ist kein offizieller Cheat!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This is not a valid cheat code"</target>
</trans-unit>
<trans-unit id="GamCheat_SDisableCheat" resname="GamCheat_SDisableCheat">
<source>"Diesen Cheat wirklich deaktivieren?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Disable this cheat?"</target>
</trans-unit>
<trans-unit id="GamCheat_SCheatDisabled" resname="GamCheat_SCheatDisabled">
<source>"Dieser Cheat wurde deaktiviert!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Cheat was disabled!"</target>
<alt-trans>
<source>"Dieser Cheat wurde deakiviert!"</source>
<target>"Cheat was disabled!"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45406.8812909954</prop>
</prop-group>
</alt-trans>
</trans-unit>
<trans-unit id="Vcl_OleConst_SBadPropValue" resname="Vcl_OleConst_SBadPropValue">
<source>"'%s' ist kein gültiger Wert für die Eigenschaft"</source>
<target>"'%s' is not a valid property value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_OleConst_SCannotActivate" resname="Vcl_OleConst_SCannotActivate">
<source>"Aktivierung des OLE-Steuerelements misslungen"</source>
<target>"OLE control activation failed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Global_SNewProgramVersionAvailable" resname="Global_SNewProgramVersionAvailable">
<source>"Eine neue Programmversion ist vorhanden. Möchten Sie diese jetzt herunterladen?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"A new program version is available! Download now?"</target>
</trans-unit>
<trans-unit id="Global_SNoUpdateAvailable" resname="Global_SNoUpdateAvailable">
<source>"Es ist keine neue Programmversion vorhanden."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"You are already using the latest version"</target>
</trans-unit>
<trans-unit id="ComLevelReader_SLevelFileFolder" resname="ComLevelReader_SLevelFileFolder">
<source>"Levels"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="ComLevelReader_SLevelFileSubFolder" resname="ComLevelReader_SLevelFileSubFolder">
<source>"SpaceMission"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="ComLevelReader_SExtraContentAfterLine" resname="ComLevelReader_SExtraContentAfterLine">
<source>"Zeile %d ist ungültig (Zusatzinfo am Ende)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Line %d is invalid (additional data at line end)"</target>
</trans-unit>
<trans-unit id="ComLevelReader_SInvalidXCoord" resname="ComLevelReader_SInvalidXCoord">
<source>"X-Koordinate muss ohne Rest durch %d teilbar sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"X-Coordinate must be a multiple of %d."</target>
</trans-unit>
<trans-unit id="ComLevelReader_SInvalidYCoord" resname="ComLevelReader_SInvalidYCoord">
<source>"Y-Koordinate muss ohne Rest durch %d teilbar sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Y-Coordinate must be a multiple of %d."</target>
</trans-unit>
<trans-unit id="ComLevelReader_SInvalidLevelFile" resname="ComLevelReader_SInvalidLevelFile">
<source>"Level-Format nicht unterstützt oder Datei ist beschädigt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Level format not supported or file corrupt."</target>
</trans-unit>
<trans-unit id="ComLevelReader_SEnemyTypeNotImplemented" resname="ComLevelReader_SEnemyTypeNotImplemented">
<source>"Gegner-Typ %d wird nicht unterstützt (Alte Spielversion?)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Enemy type %d not supported. (Old game version?)"</target>
</trans-unit>
<trans-unit id="ComLevelReader_SLevelEnemyLineComment" resname="ComLevelReader_SLevelEnemyLineComment">
<source>"; Type XCoord YCoord Lives"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="ComLevelReader_SInvalidFile" resname="ComLevelReader_SInvalidFile">
<source>"Spielstand-Format nicht unterstützt oder Datei beschädigt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Savegame format not supported or file corrupt."</target>
</trans-unit>
<trans-unit id="GamSpeicherung_SSaveGameFileNotFound" resname="GamSpeicherung_SSaveGameFileNotFound">
<source>"Spielstandsdatei nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Savegame file not found"</target>
</trans-unit>
<trans-unit id="GamSpeicherung_SNa" resname="GamSpeicherung_SNa">
<source>"n/a"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamSpeicherung_SSaveGameFolder" resname="GamSpeicherung_SSaveGameFolder">
<source>"Spielstände"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Save states"</target>
</trans-unit>
<trans-unit id="GamSpeicherung_SSaveGameSubFolder" resname="GamSpeicherung_SSaveGameSubFolder">
<source>"SpaceMission"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="GamSpeicherung_SDeleteSaveGame" resname="GamSpeicherung_SDeleteSaveGame">
<source>"Diesen Spielstand wirklich löschen?"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Do you want to delete this savestate?"</target>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCannotAssignChunkText" resname="Vcl_Imaging_pnglang_EPNGCannotAssignChunkText">
<source>"Die Abschnitte müssen kompatibel sein, damit sie zugewiesen werden können."</source>
<target>"The chunks must be compatible to be assigned."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnexpectedEndText" resname="Vcl_Imaging_pnglang_EPNGUnexpectedEndText">
<source>"Dieses \"Portable Network Graphics\" Bild ist ungültig: Der Dekoder ist unerwartete auf das Ende der Datei gestoßen."</source>
<target>"This \"Portable Network Graphics\" image is invalid because the decoder found an unexpected end of the file."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGNoImageDataText" resname="Vcl_Imaging_pnglang_EPNGNoImageDataText">
<source>"Dieses \"Portable Network Graphics\" Bild enthält keine Daten."</source>
<target>"This \"Portable Network Graphics\" image contains no data."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCannotAddChunkText" resname="Vcl_Imaging_pnglang_EPNGCannotAddChunkText">
<source>"Das Programm versucht einen existierenden und notwendigen Abschnitt zum aktuellen Bild hinzuzufügen. Dies ist nicht zulässig."</source>
<target>"The program tried to add a existent critical chunk to the current image which is not allowed."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCannotAddInvalidImageText" resname="Vcl_Imaging_pnglang_EPNGCannotAddInvalidImageText">
<source>"Es ist nicht zulässig, einem ungültigen Bild einen neuen Abschnitt hinzuzufügen."</source>
<target>"It's not allowed to add a new chunk because the current image is invalid."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCouldNotLoadResourceText" resname="Vcl_Imaging_pnglang_EPNGCouldNotLoadResourceText">
<source>"Das PNG Bild konnte nicht aus den Resourcendaten geladen werden."</source>
<target>"The png image could not be loaded from the resource ID."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGOutMemoryText" resname="Vcl_Imaging_pnglang_EPNGOutMemoryText">
<source>"Es stehen nicht genügend Resourcen im System zur Verfügung, um die Operation auszuführen. Schließen Sie einige Fenster und versuchen Sie es erneut."</source>
<target>"Some operation could not be performed because the system is out of resources. Close some windows and try again."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGCannotChangeTransparentText" resname="Vcl_Imaging_pnglang_EPNGCannotChangeTransparentText">
<source>"Das Setzen der Bit-Transparent-Farbe ist für PNG-Images die Alpha-Werte für jedes Pixel enthalten (COLOR_RGBALPHA und COLOR_GRAYSCALEALPHA) nicht zulässig"</source>
<target>"Setting bit transparency color is not allowed for png images containing alpha value for each pixel (COLOR_RGBALPHA and COLOR_GRAYSCALEALPHA)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGHeaderNotPresentText" resname="Vcl_Imaging_pnglang_EPNGHeaderNotPresentText">
<source>"Die Datei, die gelesen wird, ist kein gültiges \"Portable Network Graphics\" Bild, da es keinen gültigen Header enthält."</source>
<target>"This operation is not valid because the current image contains no valid header."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EInvalidNewSize" resname="Vcl_Imaging_pnglang_EInvalidNewSize">
<source>"Die neue Größe für die Größenanpassung des Bildes ist ungültig."</source>
<target>"The new size provided for image resizing is invalid."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EInvalidSpec" resname="Vcl_Imaging_pnglang_EInvalidSpec">
<source>"\"Portable Network Graphics\" konnte nicht erstellt werden, weil ungültige Bildtypparameter angegeben wurden."</source>
<target>"The \"Portable Network Graphics\" could not be created because invalid image type parameters have being provided."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGInvalidBitDepthText" resname="Vcl_Imaging_pnglang_EPNGInvalidBitDepthText">
<source>"Das PNG-Bild (Portable Network Graphics) konnte nicht geladen werden, weil das Bild eine ungültige Bit-Tiefe verwendet."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The PNG image (Portable Network Graphics) could not be loaded because the picture contains an invalid bit depth."</target>
</trans-unit>
<trans-unit id="Vcl_Imaging_JConsts_sChangeJPGSize" resname="Vcl_Imaging_JConsts_sChangeJPGSize">
<source>"Die Größe einer JPEG-Grafik kann nicht verändert werden"</source>
<target>"Cannot change the size of a JPEG image"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_JConsts_sJPEGError" resname="Vcl_Imaging_JConsts_sJPEGError">
<source>"JPEG-Fehler #%d"</source>
<target>"JPEG error #%d"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_JConsts_sJPEGImageFile" resname="Vcl_Imaging_JConsts_sJPEGImageFile">
<source>"JPEG-Grafikdatei"</source>
<target>"JPEG Image File"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Global_SDownloadError" resname="Global_SDownloadError">
<source>"Ein Fehler ist aufgetreten. Wahrscheinlich ist keine Internetverbindung aufgebaut, oder der der ViaThinkSoft-Server vorübergehend offline."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Could not download version information from the ViaThinkSoft server. Please try again later."</target>
</trans-unit>
<trans-unit id="DXConsts_SNotSupportGraphicFile" resname="DXConsts_SNotSupportGraphicFile">
<source>"Graphic format not suported"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDXTFile" resname="DXConsts_SInvalidDXTFile">
<source>"DXT file is invalid"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SCannotLoadGraphic" resname="DXConsts_SCannotLoadGraphic">
<source>"Can not load graphic"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPngInvalidCRCText" resname="Vcl_Imaging_pnglang_EPngInvalidCRCText">
<source>"Dieses \"Portable Network Graphics\" Bild ist ungültig, weil Teile der Daten fehlerhaft sind (CRC-Fehler)"</source>
<target>"This \"Portable Network Graphics\" image is not valid because it contains invalid pieces of data (crc error)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGInvalidIHDRText" resname="Vcl_Imaging_pnglang_EPNGInvalidIHDRText">
<source>"Dieses \"Portable Network Graphics\" Bild konnte nicht geladen werden, weil wahrscheinlich einer der Hauptdatenbreiche (IHDR) beschädigt ist"</source>
<target>"The \"Portable Network Graphics\" image could not be loaded because one of its main piece of data (ihdr) might be corrupted"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGMissingMultipleIDATText" resname="Vcl_Imaging_pnglang_EPNGMissingMultipleIDATText">
<source>"Dieses \"Portable Network Graphics\" Bild ist ungültig, weil Grafikdaten fehlen."</source>
<target>"This \"Portable Network Graphics\" image is invalid because it has missing image parts."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGZLIBErrorText" resname="Vcl_Imaging_pnglang_EPNGZLIBErrorText">
<source>"Die Grafik konnte nicht entpackt werden, weil Teile der komprimierten Daten fehlerhaft sind. \r\nBeschreibung: "</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The graphic could not be decompressed because part of the compressed data is invalid. \r\nDescription: "</target>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGInvalidPaletteText" resname="Vcl_Imaging_pnglang_EPNGInvalidPaletteText">
<source>"Das \"Portable Network Graphics\" Bild enthält eine ungültige Palette."</source>
<target>"The \"Portable Network Graphics\" image contains an invalid palette."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGInvalidFileHeaderText" resname="Vcl_Imaging_pnglang_EPNGInvalidFileHeaderText">
<source>"Die gerade gelesene Datei ist kein gültiges PNG-Bild (\"Portable Network Graphics\"), weil sie keinen gültigen Header enthält. Diese Datei ist möglicherweise beschädigt. Versuchen Sie, eine neue Version davon zu bekommen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The read file is not a valid PNG picture (\"Portable Network Graphics\"), because it does not contain a valid header. The file is probably corrupt. Please try to receive a newer version of the file."</target>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGIHDRNotFirstText" resname="Vcl_Imaging_pnglang_EPNGIHDRNotFirstText">
<source>"Dieses \"Portable Network Graphics\" Bild wird nicht unterstützt oder ist ungültig.\r\n(Der IHDR-Abschnitt ist nicht der erste Abschnitt in der Datei)."</source>
<target>"This \"Portable Network Graphics\" image is not supported or it might be invalid.\r\n(IHDR chunk is not the first)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGSizeExceedsText" resname="Vcl_Imaging_pnglang_EPNGSizeExceedsText">
<source>"Dieses PNG-Bild (Portable Network Graphics) wird nicht unterstützt, weil die Breite oder Höhe die maximale Größe von 65535 Pixel überschreitet."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This PNG image (Portable Network Graphics) is not supported because width or height exceeds 65535 pixels."</target>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownPalEntryText" resname="Vcl_Imaging_pnglang_EPNGUnknownPalEntryText">
<source>"Es gibt keinen solchen Palettenwert."</source>
<target>"There is no such palette entry."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownCriticalChunkText" resname="Vcl_Imaging_pnglang_EPNGUnknownCriticalChunkText">
<source>"Dieses \"Portable Network Graphics\" Bild enhält einen unbekannten aber notwendigen Teil, welcher nicht entschlüsselt werden kann."</source>
<target>"This \"Portable Network Graphics\" image contains an unknown critical part which could not be decoded."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownCompressionText" resname="Vcl_Imaging_pnglang_EPNGUnknownCompressionText">
<source>"Dieses \"Portable Network Graphics\" Bild wurde mit einem unbekannten Komprimierungsalgorithmus kodiert, welcher nicht entschlüsselt werden kann."</source>
<target>"This \"Portable Network Graphics\" image is encoded with an unknown compression scheme which could not be decoded."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownInterlaceText" resname="Vcl_Imaging_pnglang_EPNGUnknownInterlaceText">
<source>"Dieses \"Portable Network Graphics\" Bild benutzt ein unbekanntes Interlace-Schema, welches nicht entschlüsselt werden kann."</source>
<target>"This \"Portable Network Graphics\" image uses an unknown interlace scheme which could not be decoded."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Imaging_pnglang_EPNGUnknownColorTypeText" resname="Vcl_Imaging_pnglang_EPNGUnknownColorTypeText">
<source>"Dieses PNG-Bild (Portable Network Graphics) verwendet einen unbekannten Farbtyp, der nicht decodiert werden konnte."</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"This PNG image (Portable Network Graphics) contains an unknown color type which cannot be decoded."</target>
</trans-unit>
<trans-unit id="DXConsts_SListIndexError" resname="DXConsts_SListIndexError">
<source>"Index of the list exceeds the range. (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SScanline" resname="DXConsts_SScanline">
<source>"Index of the scanning line exceeded the range. (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SNoForm" resname="DXConsts_SNoForm">
<source>"Form not found"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SSinceDirectX6" resname="DXConsts_SSinceDirectX6">
<source>"Requires DirectX 6.0 or later"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SSinceDirectX7" resname="DXConsts_SSinceDirectX7">
<source>"Requires DirectX 7.0 or later"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_S3DDeviceNotFound" resname="DXConsts_S3DDeviceNotFound">
<source>"3D device not found"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDisplayModeChange" resname="DXConsts_SDisplayModeChange">
<source>"Display mode cannot be changed (%dx%d %dbit)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDisplayModeCannotAcquired" resname="DXConsts_SDisplayModeCannotAcquired">
<source>"Display mode cannot be acquired"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDIB" resname="DXConsts_SInvalidDIB">
<source>"DIB is invalid"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDIBBitCount" resname="DXConsts_SInvalidDIBBitCount">
<source>"Bitcount in invalid (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDIBPixelFormat" resname="DXConsts_SInvalidDIBPixelFormat">
<source>"PixelFormat in invalid"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidWave" resname="DXConsts_SInvalidWave">
<source>"Wave is invalid"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidDisplayBitCount" resname="DXConsts_SInvalidDisplayBitCount">
<source>"Display requires 8, 16, 24 or 32 bits"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SInvalidWaveFormat" resname="DXConsts_SInvalidWaveFormat">
<source>"Format is invalid"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SStreamOpend" resname="DXConsts_SStreamOpend">
<source>"Stream is already open"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SNecessaryDirectInputUseMouse" resname="DXConsts_SNecessaryDirectInputUseMouse">
<source>"DirectInput is required for mouse support"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectDrawClipper" resname="DXConsts_SDirectDrawClipper">
<source>"Clipper"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectDrawSurface" resname="DXConsts_SDirectDrawSurface">
<source>"Surface"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectDrawPrimarySurface" resname="DXConsts_SDirectDrawPrimarySurface">
<source>"Primary Surface"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectSoundBuffer" resname="DXConsts_SDirectSoundBuffer">
<source>"Sound Buffer"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectSoundPrimaryBuffer" resname="DXConsts_SDirectSoundPrimaryBuffer">
<source>"Primary Buffer"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_STexture" resname="DXConsts_STexture">
<source>"Texture"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SNotMade" resname="DXConsts_SNotMade">
<source>"%s not made"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SStreamNotOpend" resname="DXConsts_SStreamNotOpend">
<source>"Stream not opened"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SCannotMade" resname="DXConsts_SCannotMade">
<source>"%s cannot be made"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SCannotInitialized" resname="DXConsts_SCannotInitialized">
<source>"%s cannot be initialized"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SCannotChanged" resname="DXConsts_SCannotChanged">
<source>"%s cannot be changed"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SCannotLock" resname="DXConsts_SCannotLock">
<source>"%s cannot be locked"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDLLNotLoaded" resname="DXConsts_SDLLNotLoaded">
<source>"%s is not loaded"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SImageNotFound" resname="DXConsts_SImageNotFound">
<source>"Image '%s' not found"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SWaveNotFound" resname="DXConsts_SWaveNotFound">
<source>"Wave '%s' not found"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SEffectNotFound" resname="DXConsts_SEffectNotFound">
<source>"Effect '%s' not found"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleFormatError" resname="Vcl_Consts_SStyleFormatError">
<source>"Ungültiges Stilformat"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid style format"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleHookClassRegistered" resname="Vcl_Consts_SStyleHookClassRegistered">
<source>"Klasse '%s' ist für '%s' bereits registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Class '%s' is already registered for '%s'"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleHookClassNotRegistered" resname="Vcl_Consts_SStyleHookClassNotRegistered">
<source>"Klasse '%s' ist für '%s' nicht registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Class '%s' is not registered for '%s'"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleInvalidParameter" resname="Vcl_Consts_SStyleInvalidParameter">
<source>"Parameter %s darf nicht nil sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Paramter %s must not be nil"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleFeatureNotSupported" resname="Vcl_Consts_SStyleFeatureNotSupported">
<source>"Funktion wird von diesem Stil nicht unterstützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Function is not supported by this style"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleNotRegistered" resname="Vcl_Consts_SStyleNotRegistered">
<source>"Der Stil '%s' ist nicht registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style '%s' is not registered"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleUnregisterError" resname="Vcl_Consts_SStyleUnregisterError">
<source>"Die Registrierung des Systemstils kann nicht aufgehoben werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The registry of the system style cannot be removed"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleNotRegisteredNoName" resname="Vcl_Consts_SStyleNotRegisteredNoName">
<source>"Stil nicht registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335376389</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style not registered"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_sBeginInvokeNoHandle" resname="Vcl_Consts_sBeginInvokeNoHandle">
<source>"BeginInvoke kann nicht ohne übergeordnetes Element oder Fenster-Handle aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"BeginInvoke cannot be called without superior window or window handle"</target>
</trans-unit>
<trans-unit id="System_Win_ComConst_SOleError" resname="System_Win_ComConst_SOleError">
<source>"OLE-Fehler %.8x"</source>
<target>"OLE error %.8x"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_Win_ComConst_SNoMethod" resname="System_Win_ComConst_SNoMethod">
<source>"Die Methode '%s' wird vom Automatisierungsobjekt nicht unterstützt"</source>
<target>"Method '%s' not supported by automation object"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_Win_ComConst_SVarNotObject" resname="System_Win_ComConst_SVarNotObject">
<source>"Variante referenziert kein Automatisierungsobjekt"</source>
<target>"Variant does not reference an automation object"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_Win_ComConst_STooManyParams" resname="System_Win_ComConst_STooManyParams">
<source>"Dispatch-Methoden unterstützen maximal 64 Parameter."</source>
<target>"Dispatch methods do not support more than 64 parameters"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_Win_ComConst_SDCOMNotInstalled" resname="System_Win_ComConst_SDCOMNotInstalled">
<source>"DCOM ist nicht installiert"</source>
<target>"DCOM not installed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectDraw" resname="DXConsts_SDirectDraw">
<source>"DirectDraw"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="DXConsts_SDirectSound" resname="DXConsts_SDirectSound">
<source>"DirectSound"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDomain" resname="Vcl_Consts_SDomain">
<source>"&amp;Domäne"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"&amp;Domain"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SLogin" resname="Vcl_Consts_SLogin">
<source>"Anmelden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Login"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SErrorSettingCount" resname="Vcl_Consts_SErrorSettingCount">
<source>"Fehler beim Setzen von %s.Count"</source>
<target>"Error setting %s.Count"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SListBoxMustBeVirtual" resname="Vcl_Consts_SListBoxMustBeVirtual">
<source>"Stil des Listenfeldes (%s) muss virtuell sein, damit Count gesetzt werden kann"</source>
<target>"Listbox (%s) style must be virtual in order to set Count"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_STrayIconRemoveError" resname="Vcl_Consts_STrayIconRemoveError">
<source>"Shell-Benachrichtigungssymbol kann nicht entfernt werden"</source>
<target>"Cannot remove shell notification icon"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SWindowsVistaRequired" resname="Vcl_Consts_SWindowsVistaRequired">
<source>"Für %s ist Windows Vista oder höher erforderlich"</source>
<target>"%s requires Windows Vista or later"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_STaskDlgButtonCaption" resname="Vcl_Consts_STaskDlgButtonCaption">
<source>"Button%d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_STaskDlgRadioButtonCaption" resname="Vcl_Consts_STaskDlgRadioButtonCaption">
<source>"RadioButton%d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidTaskDlgButtonCaption" resname="Vcl_Consts_SInvalidTaskDlgButtonCaption">
<source>"Caption darf nicht leer sein"</source>
<target>"Caption cannot be empty"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleLoadError" resname="Vcl_Consts_SStyleLoadError">
<source>"Stil '%s' kann nicht geladen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style '%s' could not be loaded"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleLoadErrors" resname="Vcl_Consts_SStyleLoadErrors">
<source>"Stile %s können nicht geladen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Styles %s could not be loaded"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleRegisterError" resname="Vcl_Consts_SStyleRegisterError">
<source>"Stil '%s' bereits registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style '%s' already registered"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleClassRegisterError" resname="Vcl_Consts_SStyleClassRegisterError">
<source>"Stilklasse '%s' bereits registriert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style class '%s' already registered"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleNotFound" resname="Vcl_Consts_SStyleNotFound">
<source>"Stil '%s' nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style '%s' not found"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleClassNotFound" resname="Vcl_Consts_SStyleClassNotFound">
<source>"Stilklasse '%s' nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Style class '%s' not found"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SStyleInvalidHandle" resname="Vcl_Consts_SStyleInvalidHandle">
<source>"Ungültiges Stil-Handle"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid style handle"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInsertLineError" resname="Vcl_Consts_SInsertLineError">
<source>"Zeile kann nicht eingefügt werden"</source>
<target>"Unable to insert a line"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SIconToClipboard" resname="Vcl_Consts_SIconToClipboard">
<source>"Zwischenablage unterstützt keine Symbole"</source>
<target>"Clipboard does not support Icons"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCannotOpenClipboard" resname="Vcl_Consts_SCannotOpenClipboard">
<source>"Zwischenablage %s kann nicht geöffnet werden"</source>
<target>"Cannot open clipboard: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidMemoSize" resname="Vcl_Consts_SInvalidMemoSize">
<source>"Text überschreitet Memo-Kapazität"</source>
<target>"Text exceeds memo capacity"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidPrinterOp" resname="Vcl_Consts_SInvalidPrinterOp">
<source>"Operation auf ausgewähltem Drucker nicht verfügbar"</source>
<target>"Operation not supported on selected printer"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoDefaultPrinter" resname="Vcl_Consts_SNoDefaultPrinter">
<source>"Aktuell ist kein Standarddrucker ausgewählt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No default printer selected"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SDuplicateMenus" resname="Vcl_Consts_SDuplicateMenus">
<source>"Menü '%s' wird bereits von einem anderen Formular verwendet"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Menu '%s' is already used by another form"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockedCtlNeedsName" resname="Vcl_Consts_SDockedCtlNeedsName">
<source>"Angedocktes Steuerelement muss einen Namen haben."</source>
<target>"Docked control must have a name"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockTreeRemoveError" resname="Vcl_Consts_SDockTreeRemoveError">
<source>"Fehler beim Entfernen des Steuerelements aus der Andock-Hierarchie"</source>
<target>"Error removing control from dock tree"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockZoneNotFound" resname="Vcl_Consts_SDockZoneNotFound">
<source>" - Andockzone nicht gefunden"</source>
<target>" - Dock zone not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockZoneHasNoCtl" resname="Vcl_Consts_SDockZoneHasNoCtl">
<source>" - Andockzone enthält kein Steuerelement"</source>
<target>" - Dock zone has no control"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SDockZoneVersionConflict" resname="Vcl_Consts_SDockZoneVersionConflict">
<source>"Fehler beim Laden der Andockzone aus dem Stream. Version %d erwartet, aber %d gefunden."</source>
<target>"Error loading dock zone from the stream. Expecting version %d, but found %d."</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SPromptArrayTooShort" resname="Vcl_Consts_SPromptArrayTooShort">
<source>"Länge des Werte-Arrays muss &gt;= der Länge des Prompt-Arrays sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Length of the value array must &gt;= length of prompt array"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SPromptArrayEmpty" resname="Vcl_Consts_SPromptArrayEmpty">
<source>"Prompt-Array darf nicht leer sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Prompt array must not be empty"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SUsername" resname="Vcl_Consts_SUsername">
<source>"&amp;Benutzername"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"&amp;User name"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SPassword" resname="Vcl_Consts_SPassword">
<source>"&amp;Passwort"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"&amp;Password"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcSpace" resname="Vcl_Consts_SmkcSpace">
<source>"Leer"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Empty"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcPgUp" resname="Vcl_Consts_SmkcPgUp">
<source>"BildAuf"</source>
<target>"PgUp"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcPgDn" resname="Vcl_Consts_SmkcPgDn">
<source>"BildAb"</source>
<target>"PgDn"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcEnd" resname="Vcl_Consts_SmkcEnd">
<source>"Ende"</source>
<target>"End"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcHome" resname="Vcl_Consts_SmkcHome">
<source>"Pos1"</source>
<target>"Home"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcLeft" resname="Vcl_Consts_SmkcLeft">
<source>"Links"</source>
<target>"Left"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcUp" resname="Vcl_Consts_SmkcUp">
<source>"Auf"</source>
<target>"Up"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcRight" resname="Vcl_Consts_SmkcRight">
<source>"Rechts"</source>
<target>"Right"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcDown" resname="Vcl_Consts_SmkcDown">
<source>"Ab"</source>
<target>"Down"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcIns" resname="Vcl_Consts_SmkcIns">
<source>"Einfg"</source>
<target>"Ins"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcDel" resname="Vcl_Consts_SmkcDel">
<source>"Entf"</source>
<target>"Del"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcShift" resname="Vcl_Consts_SmkcShift">
<source>"Umsch+"</source>
<target>"Shift+"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcCtrl" resname="Vcl_Consts_SmkcCtrl">
<source>"Strg+"</source>
<target>"Ctrl+"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcAlt" resname="Vcl_Consts_SmkcAlt">
<source>"Alt+"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SOutOfRange" resname="Vcl_Consts_SOutOfRange">
<source>"Wert muss zwischen %d und %d liegen"</source>
<target>"Value must be between %d and %d"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_sAllFilter" resname="Vcl_Consts_sAllFilter">
<source>"Alle"</source>
<target>"All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgYes" resname="Vcl_Consts_SMsgDlgYes">
<source>"&amp;Ja"</source>
<target>"&amp;Yes"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgNo" resname="Vcl_Consts_SMsgDlgNo">
<source>"&amp;Nein"</source>
<target>"&amp;No"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgOK" resname="Vcl_Consts_SMsgDlgOK">
<source>"OK"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgCancel" resname="Vcl_Consts_SMsgDlgCancel">
<source>"Abbrechen"</source>
<target>"Cancel"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgHelp" resname="Vcl_Consts_SMsgDlgHelp">
<source>"&amp;Hilfe"</source>
<target>"&amp;Help"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgAbort" resname="Vcl_Consts_SMsgDlgAbort">
<source>"&amp;Abbrechen"</source>
<target>"&amp;Abort"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgRetry" resname="Vcl_Consts_SMsgDlgRetry">
<source>"&amp;Wiederholen"</source>
<target>"&amp;Retry"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgIgnore" resname="Vcl_Consts_SMsgDlgIgnore">
<source>"&amp;Ignorieren"</source>
<target>"&amp;Ignore"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgAll" resname="Vcl_Consts_SMsgDlgAll">
<source>"&amp;Alle"</source>
<target>"&amp;All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgNoToAll" resname="Vcl_Consts_SMsgDlgNoToAll">
<source>"&amp;Alle Nein"</source>
<target>"N&amp;o to All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgYesToAll" resname="Vcl_Consts_SMsgDlgYesToAll">
<source>"A&amp;lle Ja"</source>
<target>"Yes to &amp;All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgClose" resname="Vcl_Consts_SMsgDlgClose">
<source>"S&amp;chließen"</source>
<target>"&amp;Close"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcBkSp" resname="Vcl_Consts_SmkcBkSp">
<source>"Rück"</source>
<target>"BkSp"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcTab" resname="Vcl_Consts_SmkcTab">
<source>"Tab"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcEsc" resname="Vcl_Consts_SmkcEsc">
<source>"Esc"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SmkcEnter" resname="Vcl_Consts_SmkcEnter">
<source>"Eingabe"</source>
<target>"Enter"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SHelpButton" resname="Vcl_Consts_SHelpButton">
<source>"&amp;Hilfe"</source>
<target>"&amp;Help"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCloseButton" resname="Vcl_Consts_SCloseButton">
<source>"&amp;Schließen"</source>
<target>"&amp;Close"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SIgnoreButton" resname="Vcl_Consts_SIgnoreButton">
<source>"&amp;Ignorieren"</source>
<target>"&amp;Ignore"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SRetryButton" resname="Vcl_Consts_SRetryButton">
<source>"&amp;Wiederholen"</source>
<target>"&amp;Retry"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SAbortButton" resname="Vcl_Consts_SAbortButton">
<source>"Abbrechen"</source>
<target>"Cancel"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SAllButton" resname="Vcl_Consts_SAllButton">
<source>"&amp;Alle"</source>
<target>"&amp;All"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCannotDragForm" resname="Vcl_Consts_SCannotDragForm">
<source>"Formulare können nicht gezogen werden"</source>
<target>"Cannot drag a form"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVMetafiles" resname="Vcl_Consts_SVMetafiles">
<source>"Metadateien"</source>
<target>"Metafiles"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVEnhMetafiles" resname="Vcl_Consts_SVEnhMetafiles">
<source>"Erweiterte Metadateien"</source>
<target>"Enhanced Metafiles"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVIcons" resname="Vcl_Consts_SVIcons">
<source>"Symbole"</source>
<target>"Icons"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVBitmaps" resname="Vcl_Consts_SVBitmaps">
<source>"Bitmaps"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVTIFFImages" resname="Vcl_Consts_SVTIFFImages">
<source>"TIFF-Grafiken"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"TIFF graphics"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgWarning" resname="Vcl_Consts_SMsgDlgWarning">
<source>"Warnung"</source>
<target>"Warning"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgError" resname="Vcl_Consts_SMsgDlgError">
<source>"Fehler"</source>
<target>"Error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgInformation" resname="Vcl_Consts_SMsgDlgInformation">
<source>"Informationen"</source>
<target>"Information"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMsgDlgConfirm" resname="Vcl_Consts_SMsgDlgConfirm">
<source>"Bestätigen"</source>
<target>"Confirm"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMenuNotFound" resname="Vcl_Consts_SMenuNotFound">
<source>"Untermenü ist nicht im Menü"</source>
<target>"Sub-menu is not in menu"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoTimers" resname="Vcl_Consts_SNoTimers">
<source>"Nicht genügend Timer verfügbar"</source>
<target>"Not enough timers available"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SNotPrinting" resname="Vcl_Consts_SNotPrinting">
<source>"Der Drucker druckt aktuell nicht"</source>
<target>"Printer is not currently printing"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SPrinting" resname="Vcl_Consts_SPrinting">
<source>"Druckvorgang läuft"</source>
<target>"Printing in progress"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SPrinterIndexError" resname="Vcl_Consts_SPrinterIndexError">
<source>"Druckerindex außerhalb des zulässigen Bereichs"</source>
<target>"Printer index out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidPrinter" resname="Vcl_Consts_SInvalidPrinter">
<source>"Ausgewählter Drucker ist ungültig"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Selected printer is invalid"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SDeviceOnPort" resname="Vcl_Consts_SDeviceOnPort">
<source>"%s an %s"</source>
<target>"%s on %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SGroupIndexTooLow" resname="Vcl_Consts_SGroupIndexTooLow">
<source>"GroupIndex darf nicht kleiner sein als der GroupIndex eines vorherigen Menüelements"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"GroupIndex must not be smaller than the GroupIndex of a previous menu item"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoMDIForm" resname="Vcl_Consts_SNoMDIForm">
<source>"Formular kann nicht erstellt werden. Aktuell sind keine MDI-Formulare aktiv"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Form cannot be created. Currently no MDI forms are active"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SImageCanvasNeedsBitmap" resname="Vcl_Consts_SImageCanvasNeedsBitmap">
<source>"Ein Bild kann nur geändert werden, wenn es ein Bitmap enthält"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"A picture can only be changed if it contains a bitmap"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SControlParentSetToSelf" resname="Vcl_Consts_SControlParentSetToSelf">
<source>"Steuerelement kann nicht sich selbst als Vorfahr haben"</source>
<target>"A control cannot have itself as its parent"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SControlNonMainThreadUsage" resname="Vcl_Consts_SControlNonMainThreadUsage">
<source>"Steuerelement '%s' wird nicht für einen Haupt-Thread verwendet"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Control '%s' cannot be used for a main thread"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SOKButton" resname="Vcl_Consts_SOKButton">
<source>"OK"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCancelButton" resname="Vcl_Consts_SCancelButton">
<source>"Abbrechen"</source>
<target>"Cancel"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335377431</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SYesButton" resname="Vcl_Consts_SYesButton">
<source>"&amp;Ja"</source>
<target>"&amp;Yes"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoButton" resname="Vcl_Consts_SNoButton">
<source>"&amp;Nein"</source>
<target>"&amp;No"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SImageIndexError" resname="Vcl_Consts_SImageIndexError">
<source>"Ungültiger ImageList-Index"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid ImageList-Index"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SImageReadFail" resname="Vcl_Consts_SImageReadFail">
<source>"ImageList-Daten konnten nicht aus dem Stream gelesen werden"</source>
<target>"Failed to read ImageList data from stream"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SImageWriteFail" resname="Vcl_Consts_SImageWriteFail">
<source>"ImageList-Daten konnten nicht in den Stream geschrieben werden"</source>
<target>"Failed to write ImageList data to stream"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SWindowDCError" resname="Vcl_Consts_SWindowDCError">
<source>"Fehler beim Erstellen des Fenster-Gerätekontexts"</source>
<target>"Error creating window device context"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SWindowClass" resname="Vcl_Consts_SWindowClass">
<source>"Fehler beim Erzeugen einer Fensterklasse"</source>
<target>"Error creating window class"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCannotFocus" resname="Vcl_Consts_SCannotFocus">
<source>"Deaktiviertes oder unsichtbares Fenster kann den Fokus nicht erhalten"</source>
<target>"Cannot focus a disabled or invisible window"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SParentRequired" resname="Vcl_Consts_SParentRequired">
<source>"Element '%s' hat kein übergeordnetes Fenster"</source>
<target>"Control '%s' has no parent window"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SControlPath" resname="Vcl_Consts_SControlPath">
<source>". Pfad:\r\n%s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>". Path:\r\n%s"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SParentGivenNotAParent" resname="Vcl_Consts_SParentGivenNotAParent">
<source>"Das angegebene übergeordnete Element ist kein übergeordnetes Element von '%s'"</source>
<target>"Parent given is not a parent of '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMDIChildNotVisible" resname="Vcl_Consts_SMDIChildNotVisible">
<source>"Untergeordnetes MDI-Formular kann nicht verborgen werden"</source>
<target>"Cannot hide an MDI Child Form"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SVisibleChanged" resname="Vcl_Consts_SVisibleChanged">
<source>"Eigenschaft Visible kann in OnShow oder OnHide nicht verändert werden"</source>
<target>"Cannot change Visible in OnShow or OnHide"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SCannotShowModal" resname="Vcl_Consts_SCannotShowModal">
<source>"Sichtbares Fenster kann nicht in modales geändert werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Visible form cannot be changed to a modal form"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SScrollBarRange" resname="Vcl_Consts_SScrollBarRange">
<source>"Eigenschaft Scrollbar außerhalb des zulässigen Bereichs"</source>
<target>"Scrollbar property out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SPropertyOutOfRange" resname="Vcl_Consts_SPropertyOutOfRange">
<source>"Eigenschaft %s außerhalb des zulässigen Bereichs"</source>
<target>"%s property out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMenuIndexError" resname="Vcl_Consts_SMenuIndexError">
<source>"Menüindex außerhalb des zulässigen Bereichs"</source>
<target>"Menu index out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SMenuReinserted" resname="Vcl_Consts_SMenuReinserted">
<source>"Menü zweimal eingefügt"</source>
<target>"Menu inserted twice"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidImage" resname="Vcl_Consts_SInvalidImage">
<source>"Ungültiges Bild"</source>
<target>"Invalid image"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SScanLine" resname="Vcl_Consts_SScanLine">
<source>"Bereichsüberschreitung bei Zeilenindex"</source>
<target>"Scan line index out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SChangeIconSize" resname="Vcl_Consts_SChangeIconSize">
<source>"Die Größe eines Symbols kann nicht geändert werden"</source>
<target>"Cannot change the size of an icon"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SChangeWicSize" resname="Vcl_Consts_SChangeWicSize">
<source>"Die Größe einer WIC-Grafik kann nicht verändert werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The size of a WIC graphic cannot be changed"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SOleGraphic" resname="Vcl_Consts_SOleGraphic">
<source>"Ungültige Operation für TOleGraphic"</source>
<target>"Invalid operation on TOleGraphic"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SUnknownExtension" resname="Vcl_Consts_SUnknownExtension">
<source>"Unbekannte Bilddateierweiterung (.%s)"</source>
<target>"Unknown picture file extension (.%s)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SUnknownClipboardFormat" resname="Vcl_Consts_SUnknownClipboardFormat">
<source>"Nicht unterstütztes Zwischenablagenformat"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Clipboard format not supported"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SUnknownStreamFormat" resname="Vcl_Consts_SUnknownStreamFormat">
<source>"Nicht unterstütztes Stream-Format"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Stream format not supported"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SOutOfResources" resname="Vcl_Consts_SOutOfResources">
<source>"Systemressourcen erschöpft"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"System resources exhausted"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SNoCanvasHandle" resname="Vcl_Consts_SNoCanvasHandle">
<source>"Canvas erlaubt kein Zeichnen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Canvas does not allow characters"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidTextFormatFlag" resname="Vcl_Consts_SInvalidTextFormatFlag">
<source>"Das Textformat-Flag '%s' wird nicht unterstützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The text format flag '%s' is not supported"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidFrameIndex" resname="Vcl_Consts_SInvalidFrameIndex">
<source>"Ungültiger Bild-Frame-Index %d: es sind %d Frames vorhanden (0-%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid picture frame index %d: there are %d frames available (0-%d)"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidImageSize" resname="Vcl_Consts_SInvalidImageSize">
<source>"Ungültige Bildgröße"</source>
<target>"Invalid image size"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidImageList" resname="Vcl_Consts_SInvalidImageList">
<source>"Ungültige Bilderliste"</source>
<target>"Invalid ImageList"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SReplaceImage" resname="Vcl_Consts_SReplaceImage">
<source>"Bild kann nicht ersetzt werden"</source>
<target>"Unable to Replace Image"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInsertImage" resname="Vcl_Consts_SInsertImage">
<source>"Bild kann nicht eingefügt werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Image cannot be inserted"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SWinRTInstanceError" resname="System_RTLConsts_SWinRTInstanceError">
<source>"Instanz der Klasse %s kann nicht erstellt werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Instance of class %s cannot be created"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverUnsupported" resname="System_RTLConsts_sObserverUnsupported">
<source>"Observer wird nicht unterstützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Observer is not supported"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverMultipleSingleCast" resname="System_RTLConsts_sObserverMultipleSingleCast">
<source>"Der Observer-Kollektion können nicht mehrere Einfach-Typumwandlungs-Observer hinzugefügt werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Multiple single cast observers cannot be added to observer collection"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverNoInterface" resname="System_RTLConsts_sObserverNoInterface">
<source>"Das Objekt implementiert das Observer-Interface nicht"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Object does not implement the Observer interface"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverNoSinglecastFound" resname="System_RTLConsts_sObserverNoSinglecastFound">
<source>"Der Observer-Kollektion wurde kein Einfach-Typumwandlungs-Observer mit der ID %d hinzugefügt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No single cast observer with ID %d found in Observer collection"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverNoMulticastFound" resname="System_RTLConsts_sObserverNoMulticastFound">
<source>"Der Observer-Kollektion wurde kein Mehrfach-Typumwandlungs-Observer mit der ID %d hinzugefügt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378472</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No multi cast observer with ID %d found in Observer collection"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sObserverNotAvailable" resname="System_RTLConsts_sObserverNotAvailable">
<source>"Observer ist nicht verfügbar"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Observer not available"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidDateString" resname="System_RTLConsts_SInvalidDateString">
<source>"Ungültiger Datums-String: %s"</source>
<target>"Invalid date string: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidTimeString" resname="System_RTLConsts_SInvalidTimeString">
<source>"Ungültiger Zeit-String: %s"</source>
<target>"Invalid time string: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidOffsetString" resname="System_RTLConsts_SInvalidOffsetString">
<source>"Ungültiger Zeit-Offset-String: %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid time offset string: %s"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sMustWaitOnOneEvent" resname="System_RTLConsts_sMustWaitOnOneEvent">
<source>"Es muss auf mindestens ein Ereignis gewartet werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Waiting for at least one event"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sBeginInvokeDestroying" resname="System_RTLConsts_sBeginInvokeDestroying">
<source>"BeginInvoke kann bei der Freigabe für TComponent nicht aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"BeginInvoke cannot be called for freeing TComponent"</target>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidBitmap" resname="Vcl_Consts_SInvalidBitmap">
<source>"Bitmap ist ungültig"</source>
<target>"Bitmap image is not valid"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidIcon" resname="Vcl_Consts_SInvalidIcon">
<source>"Ungültiges Symbol"</source>
<target>"Icon image is not valid"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidMetafile" resname="Vcl_Consts_SInvalidMetafile">
<source>"Metadatei ist ungültig"</source>
<target>"Metafile is not valid"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Vcl_Consts_SInvalidPixelFormat" resname="Vcl_Consts_SInvalidPixelFormat">
<source>"Ungültiges Pixel-Format"</source>
<target>"Invalid pixel format"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2008" resname="System_RTLConsts_SWindowsServer2008">
<source>"Windows Server 2008"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows7" resname="System_RTLConsts_SWindows7">
<source>"Windows 7"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2008R2" resname="System_RTLConsts_SWindowsServer2008R2">
<source>"Windows Server 2008 R2"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows2000" resname="System_RTLConsts_SWindows2000">
<source>"Windows 2000"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsXP" resname="System_RTLConsts_SWindowsXP">
<source>"Windows XP"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2003" resname="System_RTLConsts_SWindowsServer2003">
<source>"Windows Server 2003"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2003R2" resname="System_RTLConsts_SWindowsServer2003R2">
<source>"Windows Server 2003 R2"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2012" resname="System_RTLConsts_SWindowsServer2012">
<source>"Windows Server 2012"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2012R2" resname="System_RTLConsts_SWindowsServer2012R2">
<source>"Windows Server 2012 R2"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2016" resname="System_RTLConsts_SWindowsServer2016">
<source>"Windows Server 2016"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2019" resname="System_RTLConsts_SWindowsServer2019">
<source>"Windows Server 2019"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsServer2022" resname="System_RTLConsts_SWindowsServer2022">
<source>"Windows Server 2022"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows8" resname="System_RTLConsts_SWindows8">
<source>"Windows 8"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows8Point1" resname="System_RTLConsts_SWindows8Point1">
<source>"Windows 8.1"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows10" resname="System_RTLConsts_SWindows10">
<source>"Windows 10"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows11" resname="System_RTLConsts_SWindows11">
<source>"Windows 11"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SGenericItemNotFound" resname="System_RTLConsts_SGenericItemNotFound">
<source>"Eintrag nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Entry not found"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SGenericDuplicateItem" resname="System_RTLConsts_SGenericDuplicateItem">
<source>"Duplikate nicht zulässig"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Duplicates are not allowed"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInsufficientRtti" resname="System_RTLConsts_SInsufficientRtti">
<source>"Unzureichende RTTI zur Unterstützung dieser Operation verfügbar"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Not enough RTTI for this operation"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SParameterCountMismatch" resname="System_RTLConsts_SParameterCountMismatch">
<source>"Parameteranzahl stimmt nicht überein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Paramter count must match"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SNonPublicType" resname="System_RTLConsts_SNonPublicType">
<source>"Typ '%s' ist im interface-Abschnitt einer Unit nicht deklariert"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Type '%s' is not delcared in the interface setion of a unit"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SByRefArgMismatch" resname="System_RTLConsts_SByRefArgMismatch">
<source>"VAR- und OUT-Argumente müssen exakt mit dem Parametertyp übereinstimmen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"VAR- und OUT- arguments must match the paramter type"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SPropIsReadOnly" resname="System_RTLConsts_SPropIsReadOnly">
<source>"Eigenschaft '%s' ist schreibgeschützt"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Property '%s' is write-proteted"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SPropIsWriteOnly" resname="System_RTLConsts_SPropIsWriteOnly">
<source>"Eigenschaft '%s' kann nur geschrieben werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Property '%s' can only be written"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidRttiDestroy" resname="System_RTLConsts_SInvalidRttiDestroy">
<source>"RTTI-Objekte können nicht manuell vom Anwendungscode freigegeben werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"RTTI objects cannot be manually freed using application code"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SServiceNotFound" resname="System_RTLConsts_SServiceNotFound">
<source>"Angegebener Dienst für die Anmeldeinformationen nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Service for login information not found"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SVersionStr" resname="System_RTLConsts_SVersionStr">
<source>"%s (Version %d.%d, Build %d, %5:s)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SSPVersionStr" resname="System_RTLConsts_SSPVersionStr">
<source>"%s Service Pack %4:d (Version %1:d.%2:d, Build %3:d, %5:s)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SVersion32" resname="System_RTLConsts_SVersion32">
<source>"32-Bit-Edition"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"32 bit edition"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SVersion64" resname="System_RTLConsts_SVersion64">
<source>"64-Bit-Edition"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"64 bit edition"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindows" resname="System_RTLConsts_SWindows">
<source>"Windows"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWindowsVista" resname="System_RTLConsts_SWindowsVista">
<source>"Windows Vista"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_sSpinCountOutOfRange" resname="System_RTLConsts_sSpinCountOutOfRange">
<source>"SpinCount außerhalb des Bereichs. Muss zwischen 0 und %d liegen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"SpinCount outside range. It must be between 0 and %d"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sTimespanTooLong" resname="System_RTLConsts_sTimespanTooLong">
<source>"TimeSpan zu lang"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"TimeSpan too long"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sInvalidTimespanDuration" resname="System_RTLConsts_sInvalidTimespanDuration">
<source>"Die Dauer kann nicht zurückgegeben werden, weil der absolute Wert den Wert von TTimeSpan.MaxValue überschreitet"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The duration cannot be returned, because the absolute value is exceeding TTimeSpan.MaxValue"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sTimespanValueCannotBeNan" resname="System_RTLConsts_sTimespanValueCannotBeNan">
<source>"Wert darf nicht NaN"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Value must not be NaN"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sCannotNegateTimespan" resname="System_RTLConsts_sCannotNegateTimespan">
<source>"Negation des Minimalwertes einer Zeitspanne ist ungültig"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Negation of minimum value of a time range is invalid"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sInvalidTimespanFormat" resname="System_RTLConsts_sInvalidTimespanFormat">
<source>"Ungültiges TimeSpan-Format"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid TimeSpam format"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sTimespanElementTooLong" resname="System_RTLConsts_sTimespanElementTooLong">
<source>"TimeSpan-Element zu lang"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"TimeSpan element too long"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoContext" resname="System_RTLConsts_SNoContext">
<source>"Keine kontextsensitive Hilfe installiert"</source>
<target>"No context-sensitive help installed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoContextFound" resname="System_RTLConsts_SNoContextFound">
<source>"Keine Hilfe für Kontext %d gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No help available for context %d"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoIndex" resname="System_RTLConsts_SNoIndex">
<source>"Index kann nicht geöffnet werden"</source>
<target>"Unable to open Index"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoSearch" resname="System_RTLConsts_SNoSearch">
<source>"Suche kann nicht geöffnet werden"</source>
<target>"Unable to open Search"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoTableOfContents" resname="System_RTLConsts_SNoTableOfContents">
<source>"Inhaltsverzeichnis nicht gefunden"</source>
<target>"Unable to find a Table of Contents"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoTopics" resname="System_RTLConsts_SNoTopics">
<source>"Kein themenbezogenes Hilfesystem installiert"</source>
<target>"No topic-based help system installed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNothingFound" resname="System_RTLConsts_SNothingFound">
<source>"Keine Hilfe für %s gefunden"</source>
<target>"No help found for %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SArgumentOutOfRange" resname="System_RTLConsts_SArgumentOutOfRange">
<source>"Argument außerhalb des Bereichs"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Argument outside range"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SArgumentNil" resname="System_RTLConsts_SArgumentNil">
<source>"Argument darf nicht nil sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Argument may not be Nil"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadExternalCheckTerminated" resname="System_RTLConsts_SThreadExternalCheckTerminated">
<source>"CheckTerminated kann nicht für einen extern erstellten Thread aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"CheckTerminated cannot be called for an external created thread"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadExternalSetReturnValue" resname="System_RTLConsts_SThreadExternalSetReturnValue">
<source>"SetReturnValue kann nicht für einen extern erstellten Thread aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"SetReturnValue cannot be called for an external created thread"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SParamIsNil" resname="System_RTLConsts_SParamIsNil">
<source>"Parameter %s darf nicht Nil sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Parameter %s must not be Nil"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SParamIsNegative" resname="System_RTLConsts_SParamIsNegative">
<source>"Parameter %s darf kein negativer Wert sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Parameter %s must not be a negative value"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInputBufferExceed" resname="System_RTLConsts_SInputBufferExceed">
<source>"Eingabepuffer für %s = %d, %s = %d überschritten"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Input buffer for %s = %d, %s = %d exceeded"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidCharsInPath" resname="System_RTLConsts_SInvalidCharsInPath">
<source>"Ungültige Zeichen im Pfad"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid characters in the path name"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidCharsInFileName" resname="System_RTLConsts_SInvalidCharsInFileName">
<source>"Ungültige Zeichen im Dateinamen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid characters in the file name"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SEmptyFileName" resname="System_RTLConsts_SEmptyFileName">
<source>"Dateiname ist leer"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Filename is empty"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SPathTooLong" resname="System_RTLConsts_SPathTooLong">
<source>"Der angegebene Pfad ist zu lang"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Path is too long"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SDriveNotFound" resname="System_RTLConsts_SDriveNotFound">
<source>"Das Laufwerk wurde nicht gefunden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The drive was not found"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_hNoFilterViewer" resname="System_RTLConsts_hNoFilterViewer">
<source>"Kein Hilfe-Viewer, der Filter unterstützt"</source>
<target>"No help viewer that supports filters"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_sArgumentInvalid" resname="System_RTLConsts_sArgumentInvalid">
<source>"Ungültiges Argument"</source>
<target>"Invalid argument"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_sInvalidStringAndObjectArrays" resname="System_RTLConsts_sInvalidStringAndObjectArrays">
<source>"Die Länge von String- und Objekt-Arrays muss gleich sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"The length of string and object arrays must be equal"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sSameArrays" resname="System_RTLConsts_sSameArrays">
<source>"Quell- und Ziel-Arrays dürfen nicht gleich sein"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Source and target arrays must not be equal"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_sNoConstruct" resname="System_RTLConsts_sNoConstruct">
<source>"Klasse %s soll nicht erzeugt werden"</source>
<target>"Class %s is not intended to be constructed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_sInvalidTimeoutValue" resname="System_RTLConsts_sInvalidTimeoutValue">
<source>"Ungültiger Wert für Zeitüberschreitung: %s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid value for timeout: %s"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SReadError" resname="System_RTLConsts_SReadError">
<source>"Stream-Lesefehler"</source>
<target>"Stream read error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SReadOnlyProperty" resname="System_RTLConsts_SReadOnlyProperty">
<source>"Eigenschaft kann nur gelesen werden"</source>
<target>"Property is read-only"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SRegCreateFailed" resname="System_RTLConsts_SRegCreateFailed">
<source>"Erzeugung von Schlüssel %s misslungen"</source>
<target>"Failed to create key %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SRegGetDataFailed" resname="System_RTLConsts_SRegGetDataFailed">
<source>"Fehler beim Holen der Daten für '%s'"</source>
<target>"Failed to get data for '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SRegSetDataFailed" resname="System_RTLConsts_SRegSetDataFailed">
<source>"Fehler beim Setzen der Daten für '%s'"</source>
<target>"Failed to set data for '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SResNotFound" resname="System_RTLConsts_SResNotFound">
<source>"Ressource %s nicht gefunden"</source>
<target>"Resource %s not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SSeekNotImplemented" resname="System_RTLConsts_SSeekNotImplemented">
<source>"%s.Seek nicht implementiert"</source>
<target>"%s.Seek not implemented"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SSortedListError" resname="System_RTLConsts_SSortedListError">
<source>"Operation für sortierte Listen nicht zulässig"</source>
<target>"Operation not allowed on sorted list"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SUnknownGroup" resname="System_RTLConsts_SUnknownGroup">
<source>"%s befindet sich nicht in einer Gruppe für Klassenregistrierungen"</source>
<target>"%s not in a class registration group"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SUnknownProperty" resname="System_RTLConsts_SUnknownProperty">
<source>"Eigenschaft %s existiert nicht"</source>
<target>"Property %s does not exist"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SWriteError" resname="System_RTLConsts_SWriteError">
<source>"Stream-Schreibfehler"</source>
<target>"Stream write error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadCreateError" resname="System_RTLConsts_SThreadCreateError">
<source>"Fehler beim Erzeugen des Thread: %s"</source>
<target>"Thread creation error: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadError" resname="System_RTLConsts_SThreadError">
<source>"Thread-Fehler: %s (%d)"</source>
<target>"Thread Error: %s (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadExternalTerminate" resname="System_RTLConsts_SThreadExternalTerminate">
<source>"Ein extern erstellter Thread kann nicht beendet werden"</source>
<target>"Cannot terminate an externally created thread"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadExternalWait" resname="System_RTLConsts_SThreadExternalWait">
<source>"Auf einen extern erstellten Thread kann nicht gewartet werden"</source>
<target>"Cannot wait for an externally created thread"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SThreadStartError" resname="System_RTLConsts_SThreadStartError">
<source>"Start kann für einen laufenden oder unterbrochenen Thread nicht aufgerufen werden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Start cannot be called for a running or paused thread"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SFCreateErrorEx" resname="System_RTLConsts_SFCreateErrorEx">
<source>"Datei \"%s\" kann nicht erstellt werden. %s"</source>
<target>"Cannot create file \"%s\". %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SFOpenErrorEx" resname="System_RTLConsts_SFOpenErrorEx">
<source>"Datei %s kann nicht geöffnet werden. %s"</source>
<target>"Cannot open file \"%s\". %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidImage" resname="System_RTLConsts_SInvalidImage">
<source>"Ungültiges Stream-Format"</source>
<target>"Invalid stream format"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidName" resname="System_RTLConsts_SInvalidName">
<source>"''%s'' ist kein gültiger Komponentenname"</source>
<target>"''%s'' is not a valid component name"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335378935</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidProperty" resname="System_RTLConsts_SInvalidProperty">
<source>"Ungültiger Eigenschaftswert"</source>
<target>"Invalid property value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidPropertyPath" resname="System_RTLConsts_SInvalidPropertyPath">
<source>"Ungültiger Pfad für Eigenschaft"</source>
<target>"Invalid property path"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidPropertyValue" resname="System_RTLConsts_SInvalidPropertyValue">
<source>"Ungültiger Eigenschaftswert"</source>
<target>"Invalid property value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SInvalidRegType" resname="System_RTLConsts_SInvalidRegType">
<source>"Ungültiger Datentyp für '%s'"</source>
<target>"Invalid data type for '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SListCapacityError" resname="System_RTLConsts_SListCapacityError">
<source>"Kapazität der Liste ist erschöpft (%d)"</source>
<target>"List capacity out of bounds (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SListCountError" resname="System_RTLConsts_SListCountError">
<source>"Zu viele Einträge in der Liste (%d)"</source>
<target>"List count out of bounds (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SListIndexError" resname="System_RTLConsts_SListIndexError">
<source>"Listenindex außerhalb des gültigen Bereichs (%d)"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"List index outside valid range (%d)"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SListIndexErrorRangeReason" resname="System_RTLConsts_SListIndexErrorRangeReason">
<source>". %s-Bereich ist 0..%d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>". %s-Range is 0..%d"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SListIndexErrorEmptyReason" resname="System_RTLConsts_SListIndexErrorEmptyReason">
<source>". %s ist leer"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>". %s is empty"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SMemoryStreamError" resname="System_RTLConsts_SMemoryStreamError">
<source>"Expandieren des Speicher-Stream wegen Speichermangel nicht möglich"</source>
<target>"Out of memory while expanding memory stream"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SNoComSupport" resname="System_RTLConsts_SNoComSupport">
<source>"%s wurde nicht als COM-Klasse registriert"</source>
<target>"%s has not been registered as a COM class"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SPropertyException" resname="System_RTLConsts_SPropertyException">
<source>"Fehler beim Lesen von %s%s%s: %s"</source>
<target>"Error reading %s%s%s: %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidCharCount" resname="System_SysConst_SInvalidCharCount">
<source>"Ungültige Anzahl (%d)"</source>
<target>"Invalid count (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidDestinationIndex" resname="System_SysConst_SInvalidDestinationIndex">
<source>"Ungültiger Zielindex (%d)"</source>
<target>"Invalid destination index (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidCodePage" resname="System_SysConst_SInvalidCodePage">
<source>"Ungültige Codeseite"</source>
<target>"Invalid code page"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidEncodingName" resname="System_SysConst_SInvalidEncodingName">
<source>"Ungültiger Codierungsname"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid coding name"</target>
</trans-unit>
<trans-unit id="System_SysConst_SNoMappingForUnicodeCharacter" resname="System_SysConst_SNoMappingForUnicodeCharacter">
<source>"Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"No mapping for Unicode character in the target Multibyte code page found"</target>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidStringBaseIndex" resname="System_SysConst_SInvalidStringBaseIndex">
<source>"Ungültiger StringBaseIndex"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Invalid StringBaseIndex"</target>
</trans-unit>
<trans-unit id="System_RTLConsts_SAncestorNotFound" resname="System_RTLConsts_SAncestorNotFound">
<source>"Vorfahr für '%s' nicht gefunden"</source>
<target>"Ancestor for '%s' not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SAssignError" resname="System_RTLConsts_SAssignError">
<source>"%s kann nicht zu %s zugewiesen werden"</source>
<target>"Cannot assign a %s to a %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SBitsIndexError" resname="System_RTLConsts_SBitsIndexError">
<source>"Bits-Index außerhalb des zulässigen Bereichs"</source>
<target>"Bits index out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SCantWriteResourceStreamError" resname="System_RTLConsts_SCantWriteResourceStreamError">
<source>"In einen zum Lesen geöffneten Ressourcen-Stream kann nicht geschrieben werden"</source>
<target>"Can't write to a read-only resource stream"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SCheckSynchronizeError" resname="System_RTLConsts_SCheckSynchronizeError">
<source>"CheckSynchronize wurde vom Thread $%x aufgerufen, der NICHT der Haupt-Thread ist."</source>
<target>"CheckSynchronize called from thread $%x, which is NOT the main thread"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SClassNotFound" resname="System_RTLConsts_SClassNotFound">
<source>"Klasse %s nicht gefunden"</source>
<target>"Class %s not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SDuplicateClass" resname="System_RTLConsts_SDuplicateClass">
<source>"Klasse mit der Bezeichnung %s existiert bereits"</source>
<target>"A class named %s already exists"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SDuplicateItem" resname="System_RTLConsts_SDuplicateItem">
<source>"Liste gestattet keine doppelten Einträge ($0%x)"</source>
<target>"List does not allow duplicates ($0%x)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SDuplicateName" resname="System_RTLConsts_SDuplicateName">
<source>"Komponente mit der Bezeichnung %s existiert bereits"</source>
<target>"A component named %s already exists"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_RTLConsts_SDuplicateString" resname="System_RTLConsts_SDuplicateString">
<source>"In der String-Liste sind Duplikate nicht zulässig"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Duplicates are not allowed in string list"</target>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameWed" resname="System_SysConst_SShortDayNameWed">
<source>"Mi"</source>
<target>"Wed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameThu" resname="System_SysConst_SShortDayNameThu">
<source>"Do"</source>
<target>"Thu"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameFri" resname="System_SysConst_SShortDayNameFri">
<source>"Fr"</source>
<target>"Fri"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameSat" resname="System_SysConst_SShortDayNameSat">
<source>"Sa"</source>
<target>"Sat"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameSun" resname="System_SysConst_SLongDayNameSun">
<source>"Sonntag"</source>
<target>"Sunday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameMon" resname="System_SysConst_SLongDayNameMon">
<source>"Montag"</source>
<target>"Monday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameTue" resname="System_SysConst_SLongDayNameTue">
<source>"Dienstag"</source>
<target>"Tuesday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameWed" resname="System_SysConst_SLongDayNameWed">
<source>"Mittwoch"</source>
<target>"Wednesday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameThu" resname="System_SysConst_SLongDayNameThu">
<source>"Donnerstag"</source>
<target>"Thursday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameFri" resname="System_SysConst_SLongDayNameFri">
<source>"Freitag"</source>
<target>"Friday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongDayNameSat" resname="System_SysConst_SLongDayNameSat">
<source>"Samstag"</source>
<target>"Saturday"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SCannotCreateDir" resname="System_SysConst_SCannotCreateDir">
<source>"Verzeichnis kann nicht erstellt werden"</source>
<target>"Unable to create directory"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidSourceArray" resname="System_SysConst_SInvalidSourceArray">
<source>"Ungültiges Quell-Array"</source>
<target>"Invalid source array"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidDestinationArray" resname="System_SysConst_SInvalidDestinationArray">
<source>"Ungültiges Ziel-Array"</source>
<target>"Invalid destination array"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SCharIndexOutOfBounds" resname="System_SysConst_SCharIndexOutOfBounds">
<source>"Zeichenindex außerhalb des gültigen Bereichs (%d)"</source>
<target>"Character index out of bounds (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SByteIndexOutOfBounds" resname="System_SysConst_SByteIndexOutOfBounds">
<source>"Startindex außerhalb des gültigen Bereichs (%d)"</source>
<target>"Start index out of bounds (%d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameDec" resname="System_SysConst_SShortMonthNameDec">
<source>"Dez"</source>
<target>"Dec"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameJan" resname="System_SysConst_SLongMonthNameJan">
<source>"Januar"</source>
<target>"January"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameFeb" resname="System_SysConst_SLongMonthNameFeb">
<source>"Februar"</source>
<target>"February"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameMar" resname="System_SysConst_SLongMonthNameMar">
<source>"März"</source>
<target>"March"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameApr" resname="System_SysConst_SLongMonthNameApr">
<source>"April"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameMay" resname="System_SysConst_SLongMonthNameMay">
<source>"Mai"</source>
<target>"May"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameJun" resname="System_SysConst_SLongMonthNameJun">
<source>"Juni"</source>
<target>"June"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameJul" resname="System_SysConst_SLongMonthNameJul">
<source>"Juli"</source>
<target>"July"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameAug" resname="System_SysConst_SLongMonthNameAug">
<source>"August"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameSep" resname="System_SysConst_SLongMonthNameSep">
<source>"September"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameOct" resname="System_SysConst_SLongMonthNameOct">
<source>"Oktober"</source>
<target>"October"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameNov" resname="System_SysConst_SLongMonthNameNov">
<source>"November"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SLongMonthNameDec" resname="System_SysConst_SLongMonthNameDec">
<source>"Dezember"</source>
<target>"December"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameSun" resname="System_SysConst_SShortDayNameSun">
<source>"So"</source>
<target>"Sun"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameMon" resname="System_SysConst_SShortDayNameMon">
<source>"Mo"</source>
<target>"Mon"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortDayNameTue" resname="System_SysConst_SShortDayNameTue">
<source>"Di"</source>
<target>"Tue"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAssertError" resname="System_SysConst_SAssertError">
<source>"%s (%s, Zeile %d)"</source>
<target>"%s (%s, line %d)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAbstractError" resname="System_SysConst_SAbstractError">
<source>"Abstrakter Fehler"</source>
<target>"Abstract Error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SModuleAccessViolation" resname="System_SysConst_SModuleAccessViolation">
<source>"Zugriffsverletzung bei Adresse %p in Modul '%s'. %s von Adresse %p"</source>
<target>"Access violation at address %p in module '%s'. %s of address %p"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SOSError" resname="System_SysConst_SOSError">
<source>"Systemfehler. Code: %d.\r\n%s%s"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"System error. Code: %d.\r\n%s%s"</target>
</trans-unit>
<trans-unit id="System_SysConst_SUnkOSError" resname="System_SysConst_SUnkOSError">
<source>"Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen"</source>
<target>"A call to an OS function failed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameJan" resname="System_SysConst_SShortMonthNameJan">
<source>"Jan"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameFeb" resname="System_SysConst_SShortMonthNameFeb">
<source>"Feb"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameMar" resname="System_SysConst_SShortMonthNameMar">
<source>"Mär"</source>
<target>"Mar"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameApr" resname="System_SysConst_SShortMonthNameApr">
<source>"Apr"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameMay" resname="System_SysConst_SShortMonthNameMay">
<source>"Mai"</source>
<target>"May"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameJun" resname="System_SysConst_SShortMonthNameJun">
<source>"Jun"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameJul" resname="System_SysConst_SShortMonthNameJul">
<source>"Jul"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameAug" resname="System_SysConst_SShortMonthNameAug">
<source>"Aug"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335379861</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameSep" resname="System_SysConst_SShortMonthNameSep">
<source>"Sep"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameOct" resname="System_SysConst_SShortMonthNameOct">
<source>"Okt"</source>
<target>"Oct"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SShortMonthNameNov" resname="System_SysConst_SShortMonthNameNov">
<source>"Nov"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeTooManyCustom" resname="System_SysConst_SVarTypeTooManyCustom">
<source>"Es wurden zu viele benutzerdefinierte Variant-Typen registriert"</source>
<target>"Too many custom variant types have been registered"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeCouldNotConvert" resname="System_SysConst_SVarTypeCouldNotConvert">
<source>"Variante des Typs (%s) konnte nicht in Typ (%s) konvertiert werden"</source>
<target>"Could not convert variant of type (%s) into type (%s)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeConvertOverflow" resname="System_SysConst_SVarTypeConvertOverflow">
<source>"Überlauf bei der Konvertierung einer Variante vom Typ (%s) in Typ (%s)"</source>
<target>"Overflow while converting variant of type (%s) into type (%s)"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarOverflow" resname="System_SysConst_SVarOverflow">
<source>"Variant-Überlauf"</source>
<target>"Variant overflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarInvalid" resname="System_SysConst_SVarInvalid">
<source>"Ungültiges Argument"</source>
<target>"Invalid argument"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarBadType" resname="System_SysConst_SVarBadType">
<source>"Ungültiger Variant-Typ"</source>
<target>"Invalid variant type"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarNotImplemented" resname="System_SysConst_SVarNotImplemented">
<source>"Operation nicht unterstützt"</source>
<target>"Operation not supported"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarUnexpected" resname="System_SysConst_SVarUnexpected">
<source>"Unerwarteter Variant-Fehler"</source>
<target>"Unexpected variant error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SExternalException" resname="System_SysConst_SExternalException">
<source>"Externe Exception %x"</source>
<target>"External exception %x"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAssertionFailed" resname="System_SysConst_SAssertionFailed">
<source>"Auswertung von assert fehlgeschlagen"</source>
<target>"Assertion failed"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SIntfCastError" resname="System_SysConst_SIntfCastError">
<source>"Interface nicht unterstützt"</source>
<target>"Interface not supported"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SSafecallException" resname="System_SysConst_SSafecallException">
<source>"Exception in safecall-Methode"</source>
<target>"Exception in safecall method"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SMonitorLockException" resname="System_SysConst_SMonitorLockException">
<source>"Kein Eigentümer der Objektsperre"</source>
<target>"Object lock not owned"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SNoMonitorSupportException" resname="System_SysConst_SNoMonitorSupportException">
<source>"Unterstützungsfunktion für Monitor nicht initialisiert"</source>
<target>"Monitor support function not initialized"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SNotImplemented" resname="System_SysConst_SNotImplemented">
<source>"Feature nicht implementiert"</source>
<target>"Feature not implemented"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SObjectDisposed" resname="System_SysConst_SObjectDisposed">
<source>"Methode für freigegebenes Objekt aufgerufen"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Method called at freed object"</target>
</trans-unit>
<trans-unit id="System_SysConst_SArgumentMissing" resname="System_SysConst_SArgumentMissing">
<source>"Kein Argument für Format '%s'"</source>
<target>"No argument for format '%s'"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SDispatchError" resname="System_SysConst_SDispatchError">
<source>"Variant-Methodenaufruf nicht unterstützt"</source>
<target>"Variant method calls not supported"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SReadAccess" resname="System_SysConst_SReadAccess">
<source>"Lesen"</source>
<target>"Read"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SWriteAccess" resname="System_SysConst_SWriteAccess">
<source>"Schreiben"</source>
<target>"Write"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SExecuteAccess" resname="System_SysConst_SExecuteAccess">
<source>"Ausführung"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Execution"</target>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidAccess" resname="System_SysConst_SInvalidAccess">
<source>"Ungültiger Zugriff"</source>
<target>"Invalid access"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarArrayCreate" resname="System_SysConst_SVarArrayCreate">
<source>"Fehler beim Erzeugen von Variante oder sicherem Array"</source>
<target>"Error creating variant or safe array"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarArrayBounds" resname="System_SysConst_SVarArrayBounds">
<source>"Variante oder sicheres Array-Index außerhalb des gültigen Bereichs"</source>
<target>"Variant or safe array index out of bounds"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarArrayLocked" resname="System_SysConst_SVarArrayLocked">
<source>"Variante oder sicheres Array ist gesperrt"</source>
<target>"Variant or safe array is locked"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidVarCast" resname="System_SysConst_SInvalidVarCast">
<source>"Ungültige Varianten-Typumwandlung"</source>
<target>"Invalid variant type conversion"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidVarOp" resname="System_SysConst_SInvalidVarOp">
<source>"Ungültige Variantenoperation"</source>
<target>"Invalid variant operation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidVarNullOp" resname="System_SysConst_SInvalidVarNullOp">
<source>"Ungültige NULL-Variantenoperation"</source>
<target>"Invalid NULL variant operation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidVarOpWithHResultWithPrefix" resname="System_SysConst_SInvalidVarOpWithHResultWithPrefix">
<source>"Ungültige Variantenoperation (%s%.8x)\n%s"</source>
<target>"Invalid variant operation (%s%.8x)\r\n%s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeOutOfRangeWithPrefix" resname="System_SysConst_SVarTypeOutOfRangeWithPrefix">
<source>"Benutzerdefinierter Variant-Typ (%s%.4x) außerhalb des gültigen Bereichs"</source>
<target>"Custom variant type (%s%.4x) is out of range"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeAlreadyUsedWithPrefix" resname="System_SysConst_SVarTypeAlreadyUsedWithPrefix">
<source>"Benutzerdefinierter Variant-Typ (%s%.4x) bereits benutzt von %s"</source>
<target>"Custom variant type (%s%.4x) already used by %s"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SVarTypeNotUsableWithPrefix" resname="System_SysConst_SVarTypeNotUsableWithPrefix">
<source>"Benutzerdefinierter Variant-Typ (%s%.4x) nicht brauchbar"</source>
<target>"Custom variant type (%s%.4x) is not usable"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SRangeError" resname="System_SysConst_SRangeError">
<source>"Fehler bei Bereichsprüfung"</source>
<target>"Range check error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SIntOverflow" resname="System_SysConst_SIntOverflow">
<source>"Integerüberlauf"</source>
<target>"Integer overflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidOp" resname="System_SysConst_SInvalidOp">
<source>"Ungültige Gleitkommaoperation"</source>
<target>"Invalid floating point operation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SZeroDivide" resname="System_SysConst_SZeroDivide">
<source>"Gleitkommadivision durch Null"</source>
<target>"Floating point division by zero"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SOverflow" resname="System_SysConst_SOverflow">
<source>"Gleitkommaüberlauf"</source>
<target>"Floating point overflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SUnderflow" resname="System_SysConst_SUnderflow">
<source>"Gleitkommaunterlauf"</source>
<target>"Floating point underflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidPointer" resname="System_SysConst_SInvalidPointer">
<source>"Ungültige Zeigeroperation"</source>
<target>"Invalid pointer operation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidCast" resname="System_SysConst_SInvalidCast">
<source>"Ungültige Typumwandlung"</source>
<target>"Invalid class typecast"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAccessViolationArg3" resname="System_SysConst_SAccessViolationArg3">
<source>"Zugriffsverletzung bei Adresse %p. %s von Adresse %p"</source>
<target>"Access violation at address %p. %s of address %p"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAccessViolationNoArg" resname="System_SysConst_SAccessViolationNoArg">
<source>"Zugriffsverletzung"</source>
<target>"Access violation"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SStackOverflow" resname="System_SysConst_SStackOverflow">
<source>"Stack-Überlauf"</source>
<target>"Stack overflow"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335380671</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SControlC" resname="System_SysConst_SControlC">
<source>"Strg+C gedrückt"</source>
<target>"Control-C hit"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SPrivilege" resname="System_SysConst_SPrivilege">
<source>"Privilegierte Anweisung"</source>
<target>"Privileged instruction"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SException" resname="System_SysConst_SException">
<source>"Exception %s in Modul %s bei %p.\r\n%s%s\r\n"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Exception %s in module %s at %p.\r\n%s%s\r\n"</target>
</trans-unit>
<trans-unit id="System_SysConst_SExceptTitle" resname="System_SysConst_SExceptTitle">
<source>"Anwendungsfehler"</source>
<target>"Application Error"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidFormat" resname="System_SysConst_SInvalidFormat">
<source>"Format '%s' ungültig oder nicht kompatibel mit Argument"</source>
<target>"Format '%s' invalid or incompatible with argument"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SUnknown" resname="System_SysConst_SUnknown">
<source>"&lt;unbekannt&gt;"</source>
<target>"&lt;unknown&gt;"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidInteger" resname="System_SysConst_SInvalidInteger">
<source>"'%s' ist kein gültiger Integerwert"</source>
<target>"'%s' is not a valid integer value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidTimeStamp" resname="System_SysConst_SInvalidTimeStamp">
<source>"'%d.%d' ist kein gültiger Zeitstempel"</source>
<target>"'%d.%d' is not a valid timestamp"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidGUID" resname="System_SysConst_SInvalidGUID">
<source>"'%s' kein gültiger Wert für GUID"</source>
<target>"'%s' is not a valid GUID value"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_STimeEncodeError" resname="System_SysConst_STimeEncodeError">
<source>"Ungültiges Argument zum Codieren der Uhrzeit"</source>
<target>"Invalid argument to time encode"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SDateEncodeError" resname="System_SysConst_SDateEncodeError">
<source>"Ungültiges Argument zum Codieren des Datums"</source>
<target>"Invalid argument to date encode"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SOutOfMemory" resname="System_SysConst_SOutOfMemory">
<source>"Zu wenig Arbeitsspeicher"</source>
<target>"Out of memory"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInOutError" resname="System_SysConst_SInOutError">
<source>"E/A-Fehler %d"</source>
<target>"I/O error %d"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SFileNotFound" resname="System_SysConst_SFileNotFound">
<source>"Datei nicht gefunden"</source>
<target>"File not found"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidUnknownFilename" resname="System_SysConst_SInvalidUnknownFilename">
<source>"Ungültiger Dateiname"</source>
<target>"Invalid filename"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_STooManyOpenFiles" resname="System_SysConst_STooManyOpenFiles">
<source>"Zu viele geöffnete Dateien"</source>
<target>"Too many open files"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SAccessDenied" resname="System_SysConst_SAccessDenied">
<source>"Dateizugriff verweigert"</source>
<target>"File access denied"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SEndOfFile" resname="System_SysConst_SEndOfFile">
<source>"Versuch hinter dem Dateiende zu lesen"</source>
<target>"Read beyond end of file"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SDiskFull" resname="System_SysConst_SDiskFull">
<source>"Zu wenig Speicherplatz"</source>
<target>"Disk full"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SInvalidInput" resname="System_SysConst_SInvalidInput">
<source>"Ungültige numerische Eingabe"</source>
<target>"Invalid numeric input"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="System_SysConst_SDivByZero" resname="System_SysConst_SDivByZero">
<source>"Division durch Null"</source>
<target>"Division by zero"</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033538125</prop>
<prop prop-type="Status">2</prop>
</prop-group>
</trans-unit>
<trans-unit id="Global_Cheat1Text" resname="Global_Cheat1Text">
<source>"Unendlich Leben!"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.9646243287</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Infinite lives!"</target>
</trans-unit>
<trans-unit id="GamMain_SNormalGame" resname="GamMain_SNormalGame">
<source>"Normales Spiel"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.9787366551</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Normal game"</target>
</trans-unit>
<trans-unit id="GamMain_SRandomGame" resname="GamMain_SRandomGame">
<source>"Zufalls-Level"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.9787366551</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Random level"</target>
</trans-unit>
<trans-unit id="GamMain_SLevelEditor" resname="GamMain_SLevelEditor">
<source>"Level-Editor"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.9787366551</prop>
<prop prop-type="Status">1</prop>
</prop-group>
<target>"Level Editor"</target>
</trans-unit>
<trans-unit id="GamMain_SLevelScene" resname="GamMain_SLevelScene">
<source>"Level %d"</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.9869775231</prop>
<prop prop-type="Status">1</prop>
</prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/SpaceMission_ENU.bdsproj
0,0 → 1,42
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<PersonalityInfo>
<Option>
<Option Name="Personality">W32ResourceDLL.Personality</Option>
<Option Name="ProjectType">ResourceDLL</Option>
<Option Name="Version">1.0</Option>
<Option Name="GUID">{84B84096-C0AD-4BBB-912F-1D679AFBF3A9}</Option>
</Option>
</PersonalityInfo>
<W32ResourceDLL.Personality>
<Source>
<Source Name="MainSource">SpaceMission.dpr</Source>
</Source>
<Options>
<Options Name="BaseLang">1031</Options>
<Options Name="TargetName">..\SpaceMission.ENU</Options>
<Options Name="BRCC_IncludePath"></Options>
<Options Name="Company"></Options>
<Options Name="Configuration"></Options>
<Options Name="Copyright"></Options>
<Options Name="Description"></Options>
<Options Name="Trademark"></Options>
<Options Name="Product"></Options>
<Options Name="ProductVersion"></Options>
<Options Name="Title"></Options>
<Options Name="FileVersion"></Options>
<Options Name="Evidence"></Options>
<Options Name="KeyFile"></Options>
<Options Name="KeyName"></Options>
</Options>
<FileList>
<File FileName="ComHilfe.dfm" ContainerId="W32Form" ModuleName="ComHilfe.dfm"/>
<File FileName="ComInfo.dfm" ContainerId="W32Form" ModuleName="ComInfo.dfm"/>
<File FileName="GamCheat.dfm" ContainerId="W32Form" ModuleName="GamCheat.dfm"/>
<File FileName="GamMain.dfm" ContainerId="W32Form" ModuleName="GamMain.dfm"/>
<File FileName="GamSpeicherung.dfm" ContainerId="W32Form" ModuleName="GamSpeicherung.dfm"/>
<File FileName="GamSplash.dfm" ContainerId="W32Form" ModuleName="GamSplash.dfm"/>
<File FileName="SpaceMission_DRC.rc" ContainerId="W32RC" ModuleName="SpaceMission_DRC.rc"/>
</FileList>
</W32ResourceDLL.Personality>
</BorlandProject>
/ENU/ComHilfe.dfn
0,0 → 1,118
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\ComHilfe.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\ComHilfe.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4205555556</prop>
<prop prop-type="OrigDateTime">45405.5832407407</prop>
<prop prop-type="XlatDateTime">45407.6943518519</prop>
<prop prop-type="Translated">20</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:HilfeForm.Left" resname="O:HilfeForm.Left">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">0</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.Top" resname="O:HilfeForm.Top">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">1</prop><prop prop-type="Order">1</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.ClientHeight" resname="O:HilfeForm.ClientHeight">
<source>484</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.ClientWidth" resname="O:HilfeForm.ClientWidth">
<source>730</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">3</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.Color" resname="O:HilfeForm.Color">
<source>clBtnFace</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">4</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.Font.Charset" resname="O:HilfeForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.Font.Color" resname="O:HilfeForm.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.Font.Height" resname="O:HilfeForm.Font.Height">
<source>-12</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.Font.Name" resname="O:HilfeForm.Font.Name">
<source>'Segoe UI'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.Font.Style" resname="O:HilfeForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.Position" resname="O:HilfeForm.Position">
<source>poMainFormCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.TextHeight" resname="O:HilfeForm.TextHeight">
<source>15</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">THilfeForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.O:WebBrowser1.Left" resname="O:HilfeForm.O:WebBrowser1.Left">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TWebBrowser</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.O:WebBrowser1.Top" resname="O:HilfeForm.O:WebBrowser1.Top">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TWebBrowser</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.O:WebBrowser1.Width" resname="O:HilfeForm.O:WebBrowser1.Width">
<source>730</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TWebBrowser</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.O:WebBrowser1.Height" resname="O:HilfeForm.O:WebBrowser1.Height">
<source>484</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TWebBrowser</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.O:WebBrowser1.Align" resname="O:HilfeForm.O:WebBrowser1.Align">
<source>alClient</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TWebBrowser</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.O:WebBrowser1.TabOrder" resname="O:HilfeForm.O:WebBrowser1.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TWebBrowser</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.O:WebBrowser1.OnBeforeNavigate2" resname="O:HilfeForm.O:WebBrowser1.OnBeforeNavigate2">
<source>WebBrowser1BeforeNavigate2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TWebBrowser</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:HilfeForm.O:WebBrowser1.ControlData" resname="O:HilfeForm.O:WebBrowser1.ControlData">
<source>4C000000734B0000063200000000000000000000000000000000000000000000000000004C000000000000000000000001000000E0D057007335CF11AE6908002B2E126208000000000000004C0000000114020000000000C000000000000046800000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334932176</prop><prop prop-type="Status">6</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TWebBrowser</prop><prop prop-type="Localize">1</prop><prop prop-type="Open">{</prop><prop prop-type="Close">}</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/ComInfo.dfn
0,0 → 1,737
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\ComInfo.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\ComInfo.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4205555556</prop>
<prop prop-type="OrigDateTime">45407.694375</prop>
<prop prop-type="XlatDateTime">45407.6943518519</prop>
<prop prop-type="Translated">139</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:InfoForm.Left" resname="O:InfoForm.Left">
<source>289</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">0</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.Top" resname="O:InfoForm.Top">
<source>184</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">1</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.BorderStyle" resname="O:InfoForm.BorderStyle">
<source>bsDialog</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.Caption" resname="O:InfoForm.Caption">
<source>'Informationen'</source>
<target>'About this game'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">1</prop><prop prop-type="Order">3</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.ClientHeight" resname="O:InfoForm.ClientHeight">
<source>343</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">4</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.ClientWidth" resname="O:InfoForm.ClientWidth">
<source>384</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.Color" resname="O:InfoForm.Color">
<source>clBtnFace</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.Font.Charset" resname="O:InfoForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.Font.Color" resname="O:InfoForm.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.Font.Height" resname="O:InfoForm.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.Font.Name" resname="O:InfoForm.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.Font.Style" resname="O:InfoForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.Position" resname="O:InfoForm.Position">
<source>poMainFormCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.OnCreate" resname="O:InfoForm.OnCreate">
<source>FormCreate</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.DesignSize[0]" resname="O:InfoForm.DesignSize[0]">
<source>384</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop><prop prop-type="Open">(</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.DesignSize[1]" resname="O:InfoForm.DesignSize[1]">
<source>343</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop><prop prop-type="Close">)</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.TextHeight" resname="O:InfoForm.TextHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934028</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TInfoForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:HomeLbl.Left" resname="O:InfoForm.O:HomeLbl.Left">
<source>32</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:HomeLbl.Top" resname="O:InfoForm.O:HomeLbl.Top">
<source>136</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:HomeLbl.Width" resname="O:InfoForm.O:HomeLbl.Width">
<source>48</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:HomeLbl.Height" resname="O:InfoForm.O:HomeLbl.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">20</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:HomeLbl.Caption" resname="O:InfoForm.O:HomeLbl.Caption">
<source>'Webseite:'</source>
<target>'Website:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">21</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:HomeLbl.Transparent" resname="O:InfoForm.O:HomeLbl.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">22</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Image.Left" resname="O:InfoForm.O:Image.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">23</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Image.Top" resname="O:InfoForm.O:Image.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">24</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Image.Width" resname="O:InfoForm.O:Image.Width">
<source>65</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">25</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Image.Height" resname="O:InfoForm.O:Image.Height">
<source>57</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">26</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Image.Center" resname="O:InfoForm.O:Image.Center">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">27</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Image.Picture.Data" resname="O:InfoForm.O:Image.Picture.Data">
<source>07544269746D617076020000424D7602000000000000760000002800000020000000200000000100040000000000000200000000000000000000100000000000000000000000000080000080000000808000800000008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000000000000000000EE8787878EEEEEEE03F30878EEEEEE00EE8787878EEEEEEE03F30878EEEEEE00EE8787878EEEEEEE03F30878EEEEEE00EE8787878EEEEEEE03F30878EEEEEE00887787877788888803F3088787EEEE00788787878878887803F3088887EEEE00788887888878887803F3088887EEEE00877888887788888703F308887EEEEE008887777788888880378830888888EE007777777777777703787883087777EE00888888888888803787378830888888008888888888880378737878830888880077777777788037873737378830888E00888888888803787373737378830EEE00887777778800001111111111100EEE00888888888888899B999B99999EEEEE00888888888888899B9B99BB9B9EEEEE0088888888888899BB9BB99BB99EEEEE0078888888888899B999B999999EEEEE0087788888778899B9B9BB9BB99EEEEE00888778778888E9B9B9BB9999EEEEEE0088888788888EE9B99B9BB9BEEEEEEE00EE8888888EEEEE999B9999EEEEEEEE00EEEE888EEEEEEEE99BB999EEEEEEEE00EEEEE8EEEEEEEEEE999B9EEEEEEEEE00EEEEE8EEEEEEEEEEEE999EEEEEEEEE00EEEEE8EEEEEEEEEEEEE99EEEEEEEEE00EEEEE8EEEEEEEEEEEEE9EEEEEEEEEE00EEEEE8EEEEEEEEEEEEEEEEEEEEEEEE00EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE000000000000000000000000000000000</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">28</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop><prop prop-type="Open">{</prop><prop prop-type="Close">}</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Image.Stretch" resname="O:InfoForm.O:Image.Stretch">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">29</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Left" resname="O:InfoForm.O:FirmaLbl.Left">
<source>88</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">30</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Top" resname="O:InfoForm.O:FirmaLbl.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">31</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Width" resname="O:InfoForm.O:FirmaLbl.Width">
<source>74</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">32</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Height" resname="O:InfoForm.O:FirmaLbl.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">33</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Caption" resname="O:InfoForm.O:FirmaLbl.Caption">
<source>'ViaThinkSoft'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">34</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Font.Charset" resname="O:InfoForm.O:FirmaLbl.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">35</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Font.Color" resname="O:InfoForm.O:FirmaLbl.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">36</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Font.Height" resname="O:InfoForm.O:FirmaLbl.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">37</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Font.Name" resname="O:InfoForm.O:FirmaLbl.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">38</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Font.Style" resname="O:InfoForm.O:FirmaLbl.Font.Style">
<source>[fsBold]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">39</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.ParentFont" resname="O:InfoForm.O:FirmaLbl.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">40</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:FirmaLbl.Transparent" resname="O:InfoForm.O:FirmaLbl.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">41</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:NameLbl.Left" resname="O:InfoForm.O:NameLbl.Left">
<source>104</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">42</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:NameLbl.Top" resname="O:InfoForm.O:NameLbl.Top">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">43</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:NameLbl.Width" resname="O:InfoForm.O:NameLbl.Width">
<source>66</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">44</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:NameLbl.Height" resname="O:InfoForm.O:NameLbl.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">45</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:NameLbl.Caption" resname="O:InfoForm.O:NameLbl.Caption">
<source>'SpaceMission'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">46</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:NameLbl.Transparent" resname="O:InfoForm.O:NameLbl.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">47</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:VersionLbl.Left" resname="O:InfoForm.O:VersionLbl.Left">
<source>232</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">48</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:VersionLbl.Top" resname="O:InfoForm.O:VersionLbl.Top">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">49</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:VersionLbl.Width" resname="O:InfoForm.O:VersionLbl.Width">
<source>35</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">50</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:VersionLbl.Height" resname="O:InfoForm.O:VersionLbl.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">51</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:VersionLbl.Caption" resname="O:InfoForm.O:VersionLbl.Caption">
<source>'Version'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">52</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:VersionLbl.Transparent" resname="O:InfoForm.O:VersionLbl.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">53</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:EMailLbl.Left" resname="O:InfoForm.O:EMailLbl.Left">
<source>32</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">54</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:EMailLbl.Top" resname="O:InfoForm.O:EMailLbl.Top">
<source>120</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">55</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:EMailLbl.Width" resname="O:InfoForm.O:EMailLbl.Width">
<source>32</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">56</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:EMailLbl.Height" resname="O:InfoForm.O:EMailLbl.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">57</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:EMailLbl.Caption" resname="O:InfoForm.O:EMailLbl.Caption">
<source>'E-Mail:'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">58</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:EMailLbl.Transparent" resname="O:InfoForm.O:EMailLbl.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">59</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:CopyrightLbl.Left" resname="O:InfoForm.O:CopyrightLbl.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">60</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:CopyrightLbl.Top" resname="O:InfoForm.O:CopyrightLbl.Top">
<source>80</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">61</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:CopyrightLbl.Width" resname="O:InfoForm.O:CopyrightLbl.Width">
<source>264</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">62</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:CopyrightLbl.Height" resname="O:InfoForm.O:CopyrightLbl.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">63</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:CopyrightLbl.Caption" resname="O:InfoForm.O:CopyrightLbl.Caption">
<source>'© Copyright 2001 - 2024 Daniel Marschall, ViaThinkSoft'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">64</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:CopyrightLbl.Transparent" resname="O:InfoForm.O:CopyrightLbl.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">65</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Copyright2Lbl.Left" resname="O:InfoForm.O:Copyright2Lbl.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">66</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Copyright2Lbl.Top" resname="O:InfoForm.O:Copyright2Lbl.Top">
<source>96</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">67</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Copyright2Lbl.Width" resname="O:InfoForm.O:Copyright2Lbl.Width">
<source>117</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">68</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Copyright2Lbl.Height" resname="O:InfoForm.O:Copyright2Lbl.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">69</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Copyright2Lbl.Caption" resname="O:InfoForm.O:Copyright2Lbl.Caption">
<source>'Alle Rechte vorbehalten!'</source>
<target>'All rights reserved'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">70</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:Copyright2Lbl.Transparent" resname="O:InfoForm.O:Copyright2Lbl.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">71</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Left" resname="O:InfoForm.O:URL2.Left">
<source>152</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">72</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Top" resname="O:InfoForm.O:URL2.Top">
<source>136</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">73</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Width" resname="O:InfoForm.O:URL2.Width">
<source>117</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">74</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Height" resname="O:InfoForm.O:URL2.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">75</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Cursor" resname="O:InfoForm.O:URL2.Cursor">
<source>crHandPoint</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">76</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Caption" resname="O:InfoForm.O:URL2.Caption">
<source>'www.daniel-marschall.de'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">77</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Font.Charset" resname="O:InfoForm.O:URL2.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">78</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Font.Color" resname="O:InfoForm.O:URL2.Font.Color">
<source>clBlue</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">79</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Font.Height" resname="O:InfoForm.O:URL2.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">80</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Font.Name" resname="O:InfoForm.O:URL2.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">81</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Font.Style" resname="O:InfoForm.O:URL2.Font.Style">
<source>[fsUnderline]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">82</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.ParentFont" resname="O:InfoForm.O:URL2.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">83</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.Transparent" resname="O:InfoForm.O:URL2.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">84</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL2.OnClick" resname="O:InfoForm.O:URL2.OnClick">
<source>WebsiteClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">85</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Left" resname="O:InfoForm.O:URL1.Left">
<source>152</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">86</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Top" resname="O:InfoForm.O:URL1.Top">
<source>120</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">87</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Width" resname="O:InfoForm.O:URL1.Width">
<source>118</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">88</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Height" resname="O:InfoForm.O:URL1.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">89</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Cursor" resname="O:InfoForm.O:URL1.Cursor">
<source>crHandPoint</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">90</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Caption" resname="O:InfoForm.O:URL1.Caption">
<source>'info@daniel-marschall.de'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">91</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Font.Charset" resname="O:InfoForm.O:URL1.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">92</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Font.Color" resname="O:InfoForm.O:URL1.Font.Color">
<source>clBlue</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">93</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Font.Height" resname="O:InfoForm.O:URL1.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">94</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Font.Name" resname="O:InfoForm.O:URL1.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">95</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Font.Style" resname="O:InfoForm.O:URL1.Font.Style">
<source>[fsUnderline]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">96</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.ParentFont" resname="O:InfoForm.O:URL1.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">97</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.Transparent" resname="O:InfoForm.O:URL1.Transparent">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">98</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:URL1.OnClick" resname="O:InfoForm.O:URL1.OnClick">
<source>EMailClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">99</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.Left" resname="O:InfoForm.O:OkBtn.Left">
<source>273</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">100</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.Top" resname="O:InfoForm.O:OkBtn.Top">
<source>310</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">101</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.Width" resname="O:InfoForm.O:OkBtn.Width">
<source>107</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">102</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.Height" resname="O:InfoForm.O:OkBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">103</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.Anchors" resname="O:InfoForm.O:OkBtn.Anchors">
<source>[akRight, akBottom]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">104</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.Cancel" resname="O:InfoForm.O:OkBtn.Cancel">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">105</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.Caption" resname="O:InfoForm.O:OkBtn.Caption">
<source>'OK'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">106</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.Default" resname="O:InfoForm.O:OkBtn.Default">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">107</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.TabOrder" resname="O:InfoForm.O:OkBtn.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">108</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:OkBtn.OnClick" resname="O:InfoForm.O:OkBtn.OnClick">
<source>OkBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">109</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Left" resname="O:InfoForm.O:MemoMitwirkende.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">110</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Top" resname="O:InfoForm.O:MemoMitwirkende.Top">
<source>168</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">111</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Width" resname="O:InfoForm.O:MemoMitwirkende.Width">
<source>372</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">112</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Height" resname="O:InfoForm.O:MemoMitwirkende.Height">
<source>128</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">113</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Anchors" resname="O:InfoForm.O:MemoMitwirkende.Anchors">
<source>[akLeft, akTop, akRight, akBottom]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">6</prop><prop prop-type="Order">114</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[0]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[0]">
<source>'SpaceMission wurde von Daniel Marschall auf Basis eines Codebeispiels '</source>
<target>'SpaceMission was created by Daniel Marschall based on a code example '</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">115</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop><prop prop-type="Open">(</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[1]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[1]">
<source>'von Hiroyuki Hori für DelphiX 2000 entwickelt.'</source>
<target>'by Hiroyuki Hori for DelphiX 2000.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">116</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[2]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[2]">
<source>''</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">117</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[3]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[3]">
<source>'Entwickelt mit Embarcadero Delphi.'</source>
<target>'Developed with Embarcadero Delphi.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">118</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[4]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[4]">
<source>'Setup erstellt mit InnoSetup.'</source>
<target>'Setup created with InnoSetup.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">119</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[5]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[5]">
<source>'Sicherheitszertifikat von HickelSOFT Huth GmbH.'</source>
<target>'Security certificate by HickelSOFT Huth GmbH.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">120</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[6]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[6]">
<source>''</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">121</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[7]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[7]">
<source>'Verwendete Komponenten: (un)DelphiX'</source>
<target>'Used components: (un)DelphiX'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">122</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[8]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[8]">
<source>'Quellcode: http://www.micrel.cz/Dx/'</source>
<target>'Source code: http://www.micrel.cz/Dx/'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334934607</prop><prop prop-type="Status">1</prop><prop prop-type="Order">123</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>'Source: http://www.micrel.cz/Dx/'</source>
<target>'Source: http://www.micrel.cz/Dx/'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45406.8382539815</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[9]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[9]">
<source>'(C) Copyright 1996-2000 by Hiroyuki Hori'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">124</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[10]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[10]">
<source>'(C) Copyright 2004-2023 by Jaro Benes.'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">125</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[11]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[11]">
<source>''</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">126</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[12]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[12]">
<source>'sowie Delphi MarkDown'</source>
<target>'as well as Delphi MarkDown'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">127</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[13]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[13]">
<source>'Quellcode: https://github.com/grahamegrieve/delphi-markdown'</source>
<target>'Source code: https://github.com/grahamegrieve/delphi-markdown'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">128</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>'Source: https://github.com/grahamegrieve/delphi-markdown'</source>
<target>'Source: https://github.com/grahamegrieve/delphi-markdown'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45406.838259456</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[14]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[14]">
<source>'(c) 2011+, Health Intersections Pty Ltd'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">129</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[15]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[15]">
<source>'Apache 2.0 Lizenz'</source>
<target>'Apache 2.0 License'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">130</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[16]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[16]">
<source>''</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">131</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[17]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[17]">
<source>'Musik von Savage Peachers Software.'</source>
<target>'Music by Savage Peachers Software.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">132</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[18]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[18]">
<source>'Sound- und Grafikquellen unbekannt.'</source>
<target>'Sources of sounds and graphics are unknown.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">133</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[19]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[19]">
<source>'Levels von Daniel Marschall, Patrick Büssecker und Andreas '</source>
<target>'Levels by Daniel Marschall, Patrick Büssecker and Andreas '</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">134</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.Lines.Strings[20]" resname="O:InfoForm.O:MemoMitwirkende.Lines.Strings[20]">
<source>'Kübelsbeck.'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">135</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop><prop prop-type="Close">)</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.ReadOnly" resname="O:InfoForm.O:MemoMitwirkende.ReadOnly">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">6</prop><prop prop-type="Order">136</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.ScrollBars" resname="O:InfoForm.O:MemoMitwirkende.ScrollBars">
<source>ssVertical</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">6</prop><prop prop-type="Order">137</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:InfoForm.O:MemoMitwirkende.TabOrder" resname="O:InfoForm.O:MemoMitwirkende.TabOrder">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334935764</prop><prop prop-type="Status">6</prop><prop prop-type="Order">138</prop><prop prop-type="Type">TMemo</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/GamCheat.dfn
0,0 → 1,454
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\GamCheat.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\GamCheat.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4205555556</prop>
<prop prop-type="OrigDateTime">45407.6943518519</prop>
<prop prop-type="XlatDateTime">45407.6943518519</prop>
<prop prop-type="Translated">86</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:CheatForm.Left" resname="O:CheatForm.Left">
<source>275</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">0</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.Top" resname="O:CheatForm.Top">
<source>165</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">1</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.BorderStyle" resname="O:CheatForm.BorderStyle">
<source>bsDialog</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.Caption" resname="O:CheatForm.Caption">
<source>'Cheatverwaltung'</source>
<target>'Cheats'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">1</prop><prop prop-type="Order">3</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.ClientHeight" resname="O:CheatForm.ClientHeight">
<source>233</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">4</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.ClientWidth" resname="O:CheatForm.ClientWidth">
<source>313</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.Color" resname="O:CheatForm.Color">
<source>clBtnFace</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.Font.Charset" resname="O:CheatForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.Font.Color" resname="O:CheatForm.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.Font.Height" resname="O:CheatForm.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.Font.Name" resname="O:CheatForm.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.Font.Style" resname="O:CheatForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.Position" resname="O:CheatForm.Position">
<source>poMainFormCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.OnHide" resname="O:CheatForm.OnHide">
<source>FormHide</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.OnShow" resname="O:CheatForm.OnShow">
<source>FormShow</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.TextHeight" resname="O:CheatForm.TextHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TCheatForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label1.Left" resname="O:CheatForm.O:Label1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label1.Top" resname="O:CheatForm.O:Label1.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label1.Width" resname="O:CheatForm.O:Label1.Width">
<source>152</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label1.Height" resname="O:CheatForm.O:Label1.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label1.Caption" resname="O:CheatForm.O:Label1.Caption">
<source>'Bitte geben Sie einen Cheat ein!'</source>
<target>'Please enter a cheat code'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">1</prop><prop prop-type="Order">20</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Left" resname="O:CheatForm.O:Label3.Left">
<source>200</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">21</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Top" resname="O:CheatForm.O:Label3.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">22</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Width" resname="O:CheatForm.O:Label3.Width">
<source>106</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">23</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Height" resname="O:CheatForm.O:Label3.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">24</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Cursor" resname="O:CheatForm.O:Label3.Cursor">
<source>crHandPoint</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">25</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Caption" resname="O:CheatForm.O:Label3.Caption">
<source>'Herausgeber anfragen'</source>
<target>'Ask author'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">1</prop><prop prop-type="Order">26</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Font.Charset" resname="O:CheatForm.O:Label3.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">27</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Font.Color" resname="O:CheatForm.O:Label3.Font.Color">
<source>clBlue</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">28</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Font.Height" resname="O:CheatForm.O:Label3.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">29</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Font.Name" resname="O:CheatForm.O:Label3.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">30</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Font.Style" resname="O:CheatForm.O:Label3.Font.Style">
<source>[fsUnderline]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">31</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.ParentFont" resname="O:CheatForm.O:Label3.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">32</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.Visible" resname="O:CheatForm.O:Label3.Visible">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">33</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:Label3.OnClick" resname="O:CheatForm.O:Label3.OnClick">
<source>Label3Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">34</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.Left" resname="O:CheatForm.O:CheatEdit.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">35</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.Top" resname="O:CheatForm.O:CheatEdit.Top">
<source>32</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">36</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.Width" resname="O:CheatForm.O:CheatEdit.Width">
<source>297</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">37</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.Height" resname="O:CheatForm.O:CheatEdit.Height">
<source>21</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">38</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.Cursor" resname="O:CheatForm.O:CheatEdit.Cursor">
<source>crIBeam</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">39</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.Ctl3D" resname="O:CheatForm.O:CheatEdit.Ctl3D">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">40</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.ParentCtl3D" resname="O:CheatForm.O:CheatEdit.ParentCtl3D">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">41</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.PasswordChar" resname="O:CheatForm.O:CheatEdit.PasswordChar">
<source>'*'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">42</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.TabOrder" resname="O:CheatForm.O:CheatEdit.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">43</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:CheatEdit.OnKeyPress" resname="O:CheatForm.O:CheatEdit.OnKeyPress">
<source>CheatEditKeyPress</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">44</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:OKBtn.Left" resname="O:CheatForm.O:OKBtn.Left">
<source>192</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">45</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:OKBtn.Top" resname="O:CheatForm.O:OKBtn.Top">
<source>200</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">46</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:OKBtn.Width" resname="O:CheatForm.O:OKBtn.Width">
<source>115</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">1</prop><prop prop-type="Order">47</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:OKBtn.Height" resname="O:CheatForm.O:OKBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">48</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:OKBtn.Caption" resname="O:CheatForm.O:OKBtn.Caption">
<source>'OK'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">1</prop><prop prop-type="Order">49</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:OKBtn.Default" resname="O:CheatForm.O:OKBtn.Default">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">50</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:OKBtn.TabOrder" resname="O:CheatForm.O:OKBtn.TabOrder">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">51</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:OKBtn.OnClick" resname="O:CheatForm.O:OKBtn.OnClick">
<source>OKBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">52</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:AbbBtn.Left" resname="O:CheatForm.O:AbbBtn.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">53</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:AbbBtn.Top" resname="O:CheatForm.O:AbbBtn.Top">
<source>200</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">54</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:AbbBtn.Width" resname="O:CheatForm.O:AbbBtn.Width">
<source>113</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">55</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:AbbBtn.Height" resname="O:CheatForm.O:AbbBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">56</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:AbbBtn.Cancel" resname="O:CheatForm.O:AbbBtn.Cancel">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">57</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:AbbBtn.Caption" resname="O:CheatForm.O:AbbBtn.Caption">
<source>'Abbrechen'</source>
<target>'Cancel'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">1</prop><prop prop-type="Order">58</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:AbbBtn.TabOrder" resname="O:CheatForm.O:AbbBtn.TabOrder">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">59</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:AbbBtn.OnClick" resname="O:CheatForm.O:AbbBtn.OnClick">
<source>AbbBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">60</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.Left" resname="O:CheatForm.O:GroupBox1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">61</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.Top" resname="O:CheatForm.O:GroupBox1.Top">
<source>64</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">62</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.Width" resname="O:CheatForm.O:GroupBox1.Width">
<source>297</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">63</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.Height" resname="O:CheatForm.O:GroupBox1.Height">
<source>129</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">64</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.Caption" resname="O:CheatForm.O:GroupBox1.Caption">
<source>'Aktivierte Cheats'</source>
<target>'Activated cheats'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">1</prop><prop prop-type="Order">65</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.TabOrder" resname="O:CheatForm.O:GroupBox1.TabOrder">
<source>3</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">66</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Left" resname="O:CheatForm.O:GroupBox1.O:Label2.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">67</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Top" resname="O:CheatForm.O:GroupBox1.O:Label2.Top">
<source>104</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">68</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Width" resname="O:CheatForm.O:GroupBox1.O:Label2.Width">
<source>89</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">69</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Height" resname="O:CheatForm.O:GroupBox1.O:Label2.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">70</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Cursor" resname="O:CheatForm.O:GroupBox1.O:Label2.Cursor">
<source>crHandPoint</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">71</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Caption" resname="O:CheatForm.O:GroupBox1.O:Label2.Caption">
<source>'Cheat deaktivieren'</source>
<target>'Disable cheat'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">1</prop><prop prop-type="Order">72</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Font.Charset" resname="O:CheatForm.O:GroupBox1.O:Label2.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">73</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Font.Color" resname="O:CheatForm.O:GroupBox1.O:Label2.Font.Color">
<source>clBlue</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">74</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Font.Height" resname="O:CheatForm.O:GroupBox1.O:Label2.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">75</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Font.Name" resname="O:CheatForm.O:GroupBox1.O:Label2.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">76</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.Font.Style" resname="O:CheatForm.O:GroupBox1.O:Label2.Font.Style">
<source>[fsUnderline]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">77</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.ParentFont" resname="O:CheatForm.O:GroupBox1.O:Label2.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">78</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:Label2.OnClick" resname="O:CheatForm.O:GroupBox1.O:Label2.OnClick">
<source>Label2Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">79</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:CheatBox.Left" resname="O:CheatForm.O:GroupBox1.O:CheatBox.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">80</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:CheatBox.Top" resname="O:CheatForm.O:GroupBox1.O:CheatBox.Top">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">81</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:CheatBox.Width" resname="O:CheatForm.O:GroupBox1.O:CheatBox.Width">
<source>281</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">82</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:CheatBox.Height" resname="O:CheatForm.O:GroupBox1.O:CheatBox.Height">
<source>73</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">83</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:CheatBox.ItemHeight" resname="O:CheatForm.O:GroupBox1.O:CheatBox.ItemHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">84</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:CheatForm.O:GroupBox1.O:CheatBox.TabOrder" resname="O:CheatForm.O:GroupBox1.O:CheatBox.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033535706</prop><prop prop-type="Status">6</prop><prop prop-type="Order">85</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/GamMain.dfn
0,0 → 1,547
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\GamMain.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\GamMain.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4205555556</prop>
<prop prop-type="OrigDateTime">45407.6943518519</prop>
<prop prop-type="XlatDateTime">45407.6943518519</prop>
<prop prop-type="Translated">100</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:MainForm.Left" resname="O:MainForm.Left">
<source>320</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">0</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Top" resname="O:MainForm.Top">
<source>196</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">1</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.BorderIcons" resname="O:MainForm.BorderIcons">
<source>[biSystemMenu, biMinimize]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.BorderStyle" resname="O:MainForm.BorderStyle">
<source>bsSingle</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">3</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Caption" resname="O:MainForm.Caption">
<source>'SpaceMission'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">4</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.ClientHeight" resname="O:MainForm.ClientHeight">
<source>561</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.ClientWidth" resname="O:MainForm.ClientWidth">
<source>636</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Color" resname="O:MainForm.Color">
<source>clBlack</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Charset" resname="O:MainForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Color" resname="O:MainForm.Font.Color">
<source>clYellow</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Height" resname="O:MainForm.Font.Height">
<source>-12</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Name" resname="O:MainForm.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Style" resname="O:MainForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.KeyPreview" resname="O:MainForm.KeyPreview">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Menu" resname="O:MainForm.Menu">
<source>MainMenu</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Position" resname="O:MainForm.Position">
<source>poScreenCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Scaled" resname="O:MainForm.Scaled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnClose" resname="O:MainForm.OnClose">
<source>FormClose</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnCreate" resname="O:MainForm.OnCreate">
<source>FormCreate</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnDestroy" resname="O:MainForm.OnDestroy">
<source>FormDestroy</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnKeyDown" resname="O:MainForm.OnKeyDown">
<source>FormKeyDown</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">20</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnShow" resname="O:MainForm.OnShow">
<source>FormShow</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">21</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.TextHeight" resname="O:MainForm.TextHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">22</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.Left" resname="O:MainForm.O:MainMenu.Left">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">23</prop><prop prop-type="Type">TMainMenu</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.Top" resname="O:MainForm.O:MainMenu.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">24</prop><prop prop-type="Type">TMainMenu</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.Caption">
<source>'&amp;Spiel'</source>
<target>'&amp;Game'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">25</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:GameStart.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:GameStart.Caption">
<source>'&amp;Zurück zum Hauptmenü'</source>
<target>'Back to &amp;main menu'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">26</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:GameStart.Enabled" resname="O:MainForm.O:MainMenu.O:Spiel.O:GameStart.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">27</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:GameStart.ShortCut" resname="O:MainForm.O:MainMenu.O:Spiel.O:GameStart.ShortCut">
<source>112</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">28</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:GameStart.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:GameStart.OnClick">
<source>GameStartClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">29</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Neustart.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Neustart.Caption">
<source>'&amp;Neustart'</source>
<target>'&amp;Restart'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">30</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Neustart.Enabled" resname="O:MainForm.O:MainMenu.O:Spiel.O:Neustart.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">31</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Neustart.ShortCut" resname="O:MainForm.O:MainMenu.O:Spiel.O:Neustart.ShortCut">
<source>113</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">32</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Neustart.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:Neustart.OnClick">
<source>NeustartClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">33</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:GamePause.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:GamePause.Caption">
<source>'&amp;Pause'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">34</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:GamePause.Enabled" resname="O:MainForm.O:MainMenu.O:Spiel.O:GamePause.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">35</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:GamePause.ShortCut" resname="O:MainForm.O:MainMenu.O:Spiel.O:GamePause.ShortCut">
<source>114</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">36</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:GamePause.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:GamePause.OnClick">
<source>GamePauseClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">37</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Leer1.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Leer1.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">38</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Spielstand.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Spielstand.Caption">
<source>'&amp;Spielstände...'</source>
<target>'&amp;Savegames...'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">39</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Spielstand.ShortCut" resname="O:MainForm.O:MainMenu.O:Spiel.O:Spielstand.ShortCut">
<source>115</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">40</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Spielstand.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:Spielstand.OnClick">
<source>SpielstandClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">41</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Cheat.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Cheat.Caption">
<source>'&amp;Cheatverwaltung...'</source>
<target>'&amp;Cheats...'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">42</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Cheat.Enabled" resname="O:MainForm.O:MainMenu.O:Spiel.O:Cheat.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">43</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Cheat.ShortCut" resname="O:MainForm.O:MainMenu.O:Spiel.O:Cheat.ShortCut">
<source>116</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">44</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Cheat.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:Cheat.OnClick">
<source>CheatClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">45</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Leer3.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Leer3.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">46</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.Caption">
<source>'&amp;Beenden'</source>
<target>'&amp;Exit'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">47</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.ShortCut" resname="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.ShortCut">
<source>32883</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">48</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.OnClick">
<source>BeendenClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">49</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.Caption" resname="O:MainForm.O:MainMenu.O:Einstellungen.Caption">
<source>'&amp;Einstellungen'</source>
<target>'&amp;Settings'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">50</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionSound.Caption" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionSound.Caption">
<source>'&amp;Soundeffekte'</source>
<target>'&amp;Sound effects'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">51</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionSound.Checked" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionSound.Checked">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">52</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionSound.GroupIndex" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionSound.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">53</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionSound.OnClick" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionSound.OnClick">
<source>OptionSoundClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">54</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionMusic.Caption" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionMusic.Caption">
<source>'&amp;Hintergrundmusik'</source>
<target>'&amp;Music'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">1</prop><prop prop-type="Order">55</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionMusic.Checked" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionMusic.Checked">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360185</prop><prop prop-type="Status">6</prop><prop prop-type="Order">56</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionMusic.GroupIndex" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionMusic.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360764</prop><prop prop-type="Status">6</prop><prop prop-type="Order">57</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionMusic.OnClick" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:OptionMusic.OnClick">
<source>OptionMusicClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360764</prop><prop prop-type="Status">6</prop><prop prop-type="Order">58</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Leer5.Caption" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Leer5.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360764</prop><prop prop-type="Status">6</prop><prop prop-type="Order">59</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Leer5.GroupIndex" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Leer5.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360764</prop><prop prop-type="Status">6</prop><prop prop-type="Order">60</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.Caption" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.Caption">
<source>'&amp;Spielgeschwindigkeit'</source>
<target>'&amp;Speed'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360764</prop><prop prop-type="Status">1</prop><prop prop-type="Order">61</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.Enabled" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">62</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.GroupIndex" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">63</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Leicht.Caption" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Leicht.Caption">
<source>'&amp;Leicht'</source>
<target>'&amp;Easy'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">64</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Leicht.RadioItem" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Leicht.RadioItem">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">65</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Leicht.ShortCut" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Leicht.ShortCut">
<source>49</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">66</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Leicht.OnClick" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Leicht.OnClick">
<source>LeichtClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">67</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.Caption" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.Caption">
<source>'&amp;Mittel'</source>
<target>'&amp;Medium'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">68</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.Checked" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.Checked">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">69</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.RadioItem" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.RadioItem">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">70</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.ShortCut" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.ShortCut">
<source>50</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">71</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.OnClick" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Mittel.OnClick">
<source>MittelClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">72</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Schwer.Caption" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Schwer.Caption">
<source>'&amp;Schwer'</source>
<target>'&amp;Hard'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">73</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Schwer.RadioItem" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Schwer.RadioItem">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">74</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Schwer.ShortCut" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Schwer.ShortCut">
<source>51</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">75</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Schwer.OnClick" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Schwer.OnClick">
<source>SchwerClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">76</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Master.Caption" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Master.Caption">
<source>'Meist&amp;er'</source>
<target>'&amp;Master'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">77</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Master.RadioItem" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Master.RadioItem">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">78</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Master.ShortCut" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Master.ShortCut">
<source>52</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">79</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Master.OnClick" resname="O:MainForm.O:MainMenu.O:Einstellungen.O:Spielgeschwindigkeit.O:Master.OnClick">
<source>MasterClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">80</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.Caption">
<source>'&amp;Hilfe'</source>
<target>'&amp;Help'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">81</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.Caption">
<source>'Allgemeines'</source>
<target>'General topics'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">82</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">83</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.Hint" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.Hint">
<source>'Help\DE_General.md'</source>
<target>'Help\EN_General.md'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">84</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>'Help\Allgemeines.md'</source>
<target>'Help\General.md'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45406.9284118056</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.OnClick" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.OnClick">
<source>HilfeTopicClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">85</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Wasgibtesneues1.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Wasgibtesneues1.Caption">
<source>'Was gibt es Neues?'</source>
<target>'What'#39's new?'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">86</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Wasgibtesneues1.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Wasgibtesneues1.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">87</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Wasgibtesneues1.Hint" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Wasgibtesneues1.Hint">
<source>'Help\DE_Changelog.md'</source>
<target>'Help\EN_Changelog.md'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">88</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>'Help\Neuerungen.md'</source>
<target>'Help\Changelog.md'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45406.9284118056</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Wasgibtesneues1.OnClick" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Wasgibtesneues1.OnClick">
<source>HilfeTopicClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">89</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:N1.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:N1.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">90</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:N1.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:N1.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">91</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:CheckUpdates.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:CheckUpdates.Caption">
<source>'Auf Updates prüfen'</source>
<target>'Check for updates'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">92</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:CheckUpdates.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:CheckUpdates.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">93</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:CheckUpdates.OnClick" resname="O:MainForm.O:MainMenu.O:Hilfe.O:CheckUpdates.OnClick">
<source>CheckUpdatesClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">94</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Leer6.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Leer6.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">95</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Leer6.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Leer6.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">96</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.Caption">
<source>'&amp;Informationen...'</source>
<target>'&amp;About this game...'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">1</prop><prop prop-type="Order">97</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">98</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.OnClick" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.OnClick">
<source>InformationenClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335360995</prop><prop prop-type="Status">6</prop><prop prop-type="Order">99</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/GamSpeicherung.dfn
0,0 → 1,821
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\GamSpeicherung.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\GamSpeicherung.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4205555556</prop>
<prop prop-type="OrigDateTime">45407.6943518519</prop>
<prop prop-type="XlatDateTime">45407.6943518519</prop>
<prop prop-type="Translated">158</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:SpeicherungForm.Left" resname="O:SpeicherungForm.Left">
<source>280</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">0</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Top" resname="O:SpeicherungForm.Top">
<source>152</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">1</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.BorderStyle" resname="O:SpeicherungForm.BorderStyle">
<source>bsDialog</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Caption" resname="O:SpeicherungForm.Caption">
<source>'Spielstände'</source>
<target>'Savegames'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">1</prop><prop prop-type="Order">3</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.ClientHeight" resname="O:SpeicherungForm.ClientHeight">
<source>424</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">4</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.ClientWidth" resname="O:SpeicherungForm.ClientWidth">
<source>447</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Color" resname="O:SpeicherungForm.Color">
<source>clBtnFace</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Charset" resname="O:SpeicherungForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Color" resname="O:SpeicherungForm.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Height" resname="O:SpeicherungForm.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Name" resname="O:SpeicherungForm.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Style" resname="O:SpeicherungForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Position" resname="O:SpeicherungForm.Position">
<source>poMainFormCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.OnHide" resname="O:SpeicherungForm.OnHide">
<source>FormHide</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.OnShow" resname="O:SpeicherungForm.OnShow">
<source>FormShow</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.TextHeight" resname="O:SpeicherungForm.TextHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Left" resname="O:SpeicherungForm.O:Bevel1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Top" resname="O:SpeicherungForm.O:Bevel1.Top">
<source>56</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Width" resname="O:SpeicherungForm.O:Bevel1.Width">
<source>433</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Height" resname="O:SpeicherungForm.O:Bevel1.Height">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Shape" resname="O:SpeicherungForm.O:Bevel1.Shape">
<source>bsBottomLine</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">20</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Left" resname="O:SpeicherungForm.O:Label2.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">21</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Top" resname="O:SpeicherungForm.O:Label2.Top">
<source>72</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">22</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Width" resname="O:SpeicherungForm.O:Label2.Width">
<source>58</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">23</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Height" resname="O:SpeicherungForm.O:Label2.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">24</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Caption" resname="O:SpeicherungForm.O:Label2.Caption">
<source>'Spielstände:'</source>
<target>'Savegames:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">1</prop><prop prop-type="Order">25</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Left" resname="O:SpeicherungForm.O:Label3.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">26</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Top" resname="O:SpeicherungForm.O:Label3.Top">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">27</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Width" resname="O:SpeicherungForm.O:Label3.Width">
<source>67</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">28</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Height" resname="O:SpeicherungForm.O:Label3.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">29</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Caption" resname="O:SpeicherungForm.O:Label3.Caption">
<source>'Informationen:'</source>
<target>'Information:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">1</prop><prop prop-type="Order">30</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Left" resname="O:SpeicherungForm.O:Label1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">31</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Top" resname="O:SpeicherungForm.O:Label1.Top">
<source>20</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">32</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Width" resname="O:SpeicherungForm.O:Label1.Width">
<source>78</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">33</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Height" resname="O:SpeicherungForm.O:Label1.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">34</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Caption" resname="O:SpeicherungForm.O:Label1.Caption">
<source>'Spielstandname:'</source>
<target>'Savegame name:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">1</prop><prop prop-type="Order">35</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Enabled" resname="O:SpeicherungForm.O:Label1.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">36</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Left" resname="O:SpeicherungForm.O:LadenBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">37</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Top" resname="O:SpeicherungForm.O:LadenBtn.Top">
<source>72</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335362847</prop><prop prop-type="Status">6</prop><prop prop-type="Order">38</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Width" resname="O:SpeicherungForm.O:LadenBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">39</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Height" resname="O:SpeicherungForm.O:LadenBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">40</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Caption" resname="O:SpeicherungForm.O:LadenBtn.Caption">
<source>'&amp;Laden'</source>
<target>'&amp;Load'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">1</prop><prop prop-type="Order">41</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Enabled" resname="O:SpeicherungForm.O:LadenBtn.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">42</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.TabOrder" resname="O:SpeicherungForm.O:LadenBtn.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">43</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.OnClick" resname="O:SpeicherungForm.O:LadenBtn.OnClick">
<source>LadenBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">44</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Left" resname="O:SpeicherungForm.O:LoeschenBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">45</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Top" resname="O:SpeicherungForm.O:LoeschenBtn.Top">
<source>104</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">46</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Width" resname="O:SpeicherungForm.O:LoeschenBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">47</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Height" resname="O:SpeicherungForm.O:LoeschenBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">48</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Caption" resname="O:SpeicherungForm.O:LoeschenBtn.Caption">
<source>'Lö&amp;schen'</source>
<target>'&amp;Delete'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">1</prop><prop prop-type="Order">49</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Enabled" resname="O:SpeicherungForm.O:LoeschenBtn.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">50</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.TabOrder" resname="O:SpeicherungForm.O:LoeschenBtn.TabOrder">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">51</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.OnClick" resname="O:SpeicherungForm.O:LoeschenBtn.OnClick">
<source>LoeschenBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">52</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Left" resname="O:SpeicherungForm.O:AktualisierenBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">53</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Top" resname="O:SpeicherungForm.O:AktualisierenBtn.Top">
<source>144</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">54</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Width" resname="O:SpeicherungForm.O:AktualisierenBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">55</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Height" resname="O:SpeicherungForm.O:AktualisierenBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">56</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Caption" resname="O:SpeicherungForm.O:AktualisierenBtn.Caption">
<source>'&amp;Aktualisieren'</source>
<target>'&amp;Refresh'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">1</prop><prop prop-type="Order">57</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.TabOrder" resname="O:SpeicherungForm.O:AktualisierenBtn.TabOrder">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">58</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.OnClick" resname="O:SpeicherungForm.O:AktualisierenBtn.OnClick">
<source>DsFancyButton2Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">59</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Left" resname="O:SpeicherungForm.O:SpeichernBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">60</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Top" resname="O:SpeicherungForm.O:SpeichernBtn.Top">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">61</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Width" resname="O:SpeicherungForm.O:SpeichernBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">62</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Height" resname="O:SpeicherungForm.O:SpeichernBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">63</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Caption" resname="O:SpeicherungForm.O:SpeichernBtn.Caption">
<source>'&amp;Speichern'</source>
<target>'&amp;Save'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">1</prop><prop prop-type="Order">64</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Enabled" resname="O:SpeicherungForm.O:SpeichernBtn.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">65</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.TabOrder" resname="O:SpeicherungForm.O:SpeichernBtn.TabOrder">
<source>3</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">66</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.OnClick" resname="O:SpeicherungForm.O:SpeichernBtn.OnClick">
<source>SpeichernBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.033536412</prop><prop prop-type="Status">6</prop><prop prop-type="Order">67</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Left" resname="O:SpeicherungForm.O:AbbrechenBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">68</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Top" resname="O:SpeicherungForm.O:AbbrechenBtn.Top">
<source>392</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">69</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Width" resname="O:SpeicherungForm.O:AbbrechenBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">70</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Height" resname="O:SpeicherungForm.O:AbbrechenBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">71</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Cancel" resname="O:SpeicherungForm.O:AbbrechenBtn.Cancel">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">72</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Caption" resname="O:SpeicherungForm.O:AbbrechenBtn.Caption">
<source>'Schli&amp;eßen'</source>
<target>'&amp;Close'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">1</prop><prop prop-type="Order">73</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Default" resname="O:SpeicherungForm.O:AbbrechenBtn.Default">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">74</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.ModalResult" resname="O:SpeicherungForm.O:AbbrechenBtn.ModalResult">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">75</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.TabOrder" resname="O:SpeicherungForm.O:AbbrechenBtn.TabOrder">
<source>4</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">76</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.OnClick" resname="O:SpeicherungForm.O:AbbrechenBtn.OnClick">
<source>AbbrechenBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">77</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.Left" resname="O:SpeicherungForm.O:LevelListBox.Left">
<source>112</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">78</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.Top" resname="O:SpeicherungForm.O:LevelListBox.Top">
<source>72</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">79</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.Width" resname="O:SpeicherungForm.O:LevelListBox.Width">
<source>201</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">80</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.Height" resname="O:SpeicherungForm.O:LevelListBox.Height">
<source>249</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">81</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.ItemHeight" resname="O:SpeicherungForm.O:LevelListBox.ItemHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">82</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.TabOrder" resname="O:SpeicherungForm.O:LevelListBox.TabOrder">
<source>5</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">83</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.OnClick" resname="O:SpeicherungForm.O:LevelListBox.OnClick">
<source>LevelListBoxClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">84</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.OnDblClick" resname="O:SpeicherungForm.O:LevelListBox.OnDblClick">
<source>LevelListBoxDblClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">85</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelName.Left" resname="O:SpeicherungForm.O:LevelName.Left">
<source>112</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">86</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelName.Top" resname="O:SpeicherungForm.O:LevelName.Top">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">87</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelName.Width" resname="O:SpeicherungForm.O:LevelName.Width">
<source>201</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">88</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelName.Height" resname="O:SpeicherungForm.O:LevelName.Height">
<source>21</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">89</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelName.Enabled" resname="O:SpeicherungForm.O:LevelName.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">90</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelName.TabOrder" resname="O:SpeicherungForm.O:LevelName.TabOrder">
<source>6</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">91</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Left" resname="O:SpeicherungForm.O:ElPanel1.Left">
<source>112</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">92</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Top" resname="O:SpeicherungForm.O:ElPanel1.Top">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">93</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Width" resname="O:SpeicherungForm.O:ElPanel1.Width">
<source>201</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">94</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Height" resname="O:SpeicherungForm.O:ElPanel1.Height">
<source>81</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">95</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.BevelOuter" resname="O:SpeicherungForm.O:ElPanel1.BevelOuter">
<source>bvLowered</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">96</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Color" resname="O:SpeicherungForm.O:ElPanel1.Color">
<source>clWindow</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">97</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.TabOrder" resname="O:SpeicherungForm.O:ElPanel1.TabOrder">
<source>7</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">98</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4a.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li4a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">99</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4a.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li4a.Top">
<source>56</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">100</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4a.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li4a.Width">
<source>33</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">101</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4a.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li4a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">102</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4a.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li4a.Caption">
<source>'Leben:'</source>
<target>'Lives:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">1</prop><prop prop-type="Order">103</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">104</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li1.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">105</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li1.Width">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">106</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li1.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">107</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li1.Caption">
<source>'n/a'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">1</prop><prop prop-type="Order">108</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Left">
<source>96</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">109</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Top">
<source>40</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">110</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Width">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">111</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">112</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Caption">
<source>'n/a'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">1</prop><prop prop-type="Order">113</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">114</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Top">
<source>40</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">115</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Width">
<source>29</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">116</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">117</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Caption">
<source>'Level:'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">1</prop><prop prop-type="Order">118</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4b.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li4b.Left">
<source>96</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">119</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4b.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li4b.Top">
<source>56</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">120</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4b.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li4b.Width">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">121</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4b.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li4b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">122</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4b.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li4b.Caption">
<source>'n/a'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">1</prop><prop prop-type="Order">123</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Left" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">124</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Top" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">125</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Width" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Width">
<source>156</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">126</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Height" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">127</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Caption">
<source>'Der Spielstand ist nicht einlesbar!'</source>
<target>'Savegame file cannot be read!'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">1</prop><prop prop-type="Order">128</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Charset" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">129</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Color" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Color">
<source>clMaroon</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">130</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Height" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">131</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Name" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">132</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Style" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">133</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.ParentFont" resname="O:SpeicherungForm.O:ElPanel1.O:liu.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">134</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Visible" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Visible">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">135</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Left" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">136</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Top" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">137</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Width" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Width">
<source>160</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">138</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Height" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">139</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Caption">
<source>'Bitte wählen Sie einen Spielstand.'</source>
<target>'Please select a savegame.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">1</prop><prop prop-type="Order">140</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Charset" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">141</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Color" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Color">
<source>clNavy</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">142</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Height" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">143</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Name" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">144</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Style" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">145</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.ParentFont" resname="O:SpeicherungForm.O:ElPanel1.O:liw.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">146</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Visible" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Visible">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">147</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">148</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Top">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">149</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Width">
<source>37</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">150</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">151</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Caption">
<source>'Punkte:'</source>
<target>'Score:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">1</prop><prop prop-type="Order">152</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Left">
<source>96</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">153</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Top">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">154</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Width">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">155</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">6</prop><prop prop-type="Order">156</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Caption">
<source>'n/a'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0335364699</prop><prop prop-type="Status">1</prop><prop prop-type="Order">157</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/LevEdit_DRC.rc
0,0 → 1,997
/* VER360
Generiert vom Embarcadero Delphi Pascal Compiler,
weil -GD oder --drc an den Compiler übergeben wurde.
 
Diese Datei enthält vom Compiler erzeugte Ressourcen, die an die ausführbare Datei gebunden wurden. Wenn diese Datei leer ist, dann wurden keine vom Compiler generierten Ressourcen an die erzeugte ausführbare Datei gebunden.
*/
 
#define LevMain_status_lives 65040
#define LevMain_status_nolives 65041
#define LevMain_SUnknownEnemyType 65042
#define LevMain_SExitWithoutSave 65043
#define LevEdit_SAlreadyStarted 65044
#define LevEdit_STitel 65045
#define LevEdit_SFileMissing 65046
#define Vcl_OleConst_sNoRunningObject 65056
#define Vcl_EdgeConst_SWebViewFailure 65057
#define Vcl_EdgeConst_SNoWebView 65058
#define IEConst_sNotSupportedByEdge 65059
#define System_RegularExpressionsConsts_SRegExMissingExpression 65060
#define System_RegularExpressionsConsts_SRegExExpressionError 65061
#define System_RegularExpressionsConsts_SRegExStudyError 65062
#define System_RegularExpressionsConsts_SRegExMatchRequired 65063
#define System_RegularExpressionsConsts_SRegExStringsRequired 65064
#define System_RegularExpressionsConsts_SRegExIndexOutOfBounds 65065
#define LevMain_status_info 65066
#define LevMain_SFileError 65067
#define LevMain_SCaption 65068
#define LevMain_SYes 65069
#define LevMain_SNo 65070
#define LevMain_SReallyDeleteLevel 65071
#define LevSpeicherung_SSelbsterstellt 65072
#define LevSpeicherung_SLevelFileNotFound 65073
#define LevSpeicherung_SReallyDeleteLevel 65074
#define LevSpeicherung_SLoadNewLevelAndDiscardChanges 65075
#define LevSpeicherung_SLevelIsEmpty 65076
#define LevSpeicherung_SLevelAlreadyExists 65077
#define LevSpeicherung_SYes 65078
#define LevSpeicherung_SNo 65079
#define LevSpeicherung_SFields 65080
#define LevSpeicherung_SXbyY 65081
#define ComInfo_SVersion 65082
#define Vcl_OleConst_SBadPropValue 65083
#define Vcl_OleConst_SCannotActivate 65084
#define Vcl_OleConst_SNoWindowHandle 65085
#define Vcl_OleConst_SInvalidLicense 65086
#define Vcl_OleConst_SNotLicensed 65087
#define Vcl_Imaging_JConsts_sChangeJPGSize 65088
#define Vcl_Imaging_JConsts_sJPEGError 65089
#define Vcl_Imaging_JConsts_sJPEGImageFile 65090
#define Global_SDownloadError 65091
#define Global_SNewProgramVersionAvailable 65092
#define Global_SNoUpdateAvailable 65093
#define ComLevelReader_SLevelFileFolder 65094
#define ComLevelReader_SLevelFileSubFolder 65095
#define ComLevelReader_SExtraContentAfterLine 65096
#define ComLevelReader_SInvalidXCoord 65097
#define ComLevelReader_SInvalidYCoord 65098
#define ComLevelReader_SInvalidLevelFile 65099
#define ComLevelReader_SEnemyTypeNotImplemented 65100
#define ComLevelReader_SLevelEnemyLineComment 65101
#define ComLevelReader_SInvalidFile 65102
#define LevSpeicherung_SLevelListBox 65103
#define Vcl_Imaging_pnglang_EPNGUnknownCriticalChunkText 65104
#define Vcl_Imaging_pnglang_EPNGUnknownCompressionText 65105
#define Vcl_Imaging_pnglang_EPNGUnknownInterlaceText 65106
#define Vcl_Imaging_pnglang_EPNGUnknownColorTypeText 65107
#define Vcl_Imaging_pnglang_EPNGCannotAssignChunkText 65108
#define Vcl_Imaging_pnglang_EPNGUnexpectedEndText 65109
#define Vcl_Imaging_pnglang_EPNGNoImageDataText 65110
#define Vcl_Imaging_pnglang_EPNGCannotAddChunkText 65111
#define Vcl_Imaging_pnglang_EPNGCannotAddInvalidImageText 65112
#define Vcl_Imaging_pnglang_EPNGCouldNotLoadResourceText 65113
#define Vcl_Imaging_pnglang_EPNGOutMemoryText 65114
#define Vcl_Imaging_pnglang_EPNGCannotChangeTransparentText 65115
#define Vcl_Imaging_pnglang_EPNGHeaderNotPresentText 65116
#define Vcl_Imaging_pnglang_EInvalidNewSize 65117
#define Vcl_Imaging_pnglang_EInvalidSpec 65118
#define Vcl_Imaging_pnglang_EPNGInvalidBitDepthText 65119
#define DXConsts_SInvalidDIB 65120
#define DXConsts_SInvalidDIBBitCount 65121
#define DXConsts_SInvalidDIBPixelFormat 65122
#define DXConsts_SInvalidDisplayBitCount 65123
#define DXConsts_SNotSupportGraphicFile 65124
#define DXConsts_SInvalidDXTFile 65125
#define DXConsts_SCannotLoadGraphic 65126
#define Vcl_Imaging_pnglang_EPngInvalidCRCText 65127
#define Vcl_Imaging_pnglang_EPNGInvalidIHDRText 65128
#define Vcl_Imaging_pnglang_EPNGMissingMultipleIDATText 65129
#define Vcl_Imaging_pnglang_EPNGZLIBErrorText 65130
#define Vcl_Imaging_pnglang_EPNGInvalidPaletteText 65131
#define Vcl_Imaging_pnglang_EPNGInvalidFileHeaderText 65132
#define Vcl_Imaging_pnglang_EPNGIHDRNotFirstText 65133
#define Vcl_Imaging_pnglang_EPNGSizeExceedsText 65134
#define Vcl_Imaging_pnglang_EPNGUnknownPalEntryText 65135
#define DXConsts_SDirectDrawSurface 65136
#define DXConsts_SDirectDrawPrimarySurface 65137
#define DXConsts_STexture 65138
#define DXConsts_SNotMade 65139
#define DXConsts_SCannotMade 65140
#define DXConsts_SCannotInitialized 65141
#define DXConsts_SDLLNotLoaded 65142
#define DXConsts_SImageNotFound 65143
#define DXConsts_SListIndexError 65144
#define DXConsts_SScanline 65145
#define DXConsts_SNoForm 65146
#define DXConsts_SSinceDirectX6 65147
#define DXConsts_SSinceDirectX7 65148
#define DXConsts_S3DDeviceNotFound 65149
#define DXConsts_SDisplayModeChange 65150
#define DXConsts_SDisplayModeCannotAcquired 65151
#define Vcl_Consts_SStyleFormatError 65152
#define Vcl_Consts_SStyleHookClassRegistered 65153
#define Vcl_Consts_SStyleHookClassNotRegistered 65154
#define Vcl_Consts_SStyleInvalidParameter 65155
#define Vcl_Consts_SStyleFeatureNotSupported 65156
#define Vcl_Consts_SStyleNotRegistered 65157
#define Vcl_Consts_SStyleUnregisterError 65158
#define Vcl_Consts_SStyleNotRegisteredNoName 65159
#define Vcl_Consts_sBeginInvokeNoHandle 65160
#define System_Win_ComConst_SOleError 65161
#define System_Win_ComConst_SNoMethod 65162
#define System_Win_ComConst_SVarNotObject 65163
#define System_Win_ComConst_STooManyParams 65164
#define System_Win_ComConst_SDCOMNotInstalled 65165
#define DXConsts_SDirectDraw 65166
#define DXConsts_SDirectDrawClipper 65167
#define Vcl_Consts_SDomain 65168
#define Vcl_Consts_SLogin 65169
#define Vcl_Consts_SErrorSettingCount 65170
#define Vcl_Consts_SListBoxMustBeVirtual 65171
#define Vcl_Consts_STrayIconRemoveError 65172
#define Vcl_Consts_SWindowsVistaRequired 65173
#define Vcl_Consts_STaskDlgButtonCaption 65174
#define Vcl_Consts_STaskDlgRadioButtonCaption 65175
#define Vcl_Consts_SInvalidTaskDlgButtonCaption 65176
#define Vcl_Consts_SStyleLoadError 65177
#define Vcl_Consts_SStyleLoadErrors 65178
#define Vcl_Consts_SStyleRegisterError 65179
#define Vcl_Consts_SStyleClassRegisterError 65180
#define Vcl_Consts_SStyleNotFound 65181
#define Vcl_Consts_SStyleClassNotFound 65182
#define Vcl_Consts_SStyleInvalidHandle 65183
#define Vcl_Consts_SInsertLineError 65184
#define Vcl_Consts_SIconToClipboard 65185
#define Vcl_Consts_SCannotOpenClipboard 65186
#define Vcl_Consts_SInvalidMemoSize 65187
#define Vcl_Consts_SInvalidPrinterOp 65188
#define Vcl_Consts_SNoDefaultPrinter 65189
#define Vcl_Consts_SDuplicateMenus 65190
#define Vcl_Consts_SDockedCtlNeedsName 65191
#define Vcl_Consts_SDockTreeRemoveError 65192
#define Vcl_Consts_SDockZoneNotFound 65193
#define Vcl_Consts_SDockZoneHasNoCtl 65194
#define Vcl_Consts_SDockZoneVersionConflict 65195
#define Vcl_Consts_SPromptArrayTooShort 65196
#define Vcl_Consts_SPromptArrayEmpty 65197
#define Vcl_Consts_SUsername 65198
#define Vcl_Consts_SPassword 65199
#define Vcl_Consts_SmkcSpace 65200
#define Vcl_Consts_SmkcPgUp 65201
#define Vcl_Consts_SmkcPgDn 65202
#define Vcl_Consts_SmkcEnd 65203
#define Vcl_Consts_SmkcHome 65204
#define Vcl_Consts_SmkcLeft 65205
#define Vcl_Consts_SmkcUp 65206
#define Vcl_Consts_SmkcRight 65207
#define Vcl_Consts_SmkcDown 65208
#define Vcl_Consts_SmkcIns 65209
#define Vcl_Consts_SmkcDel 65210
#define Vcl_Consts_SmkcShift 65211
#define Vcl_Consts_SmkcCtrl 65212
#define Vcl_Consts_SmkcAlt 65213
#define Vcl_Consts_SOutOfRange 65214
#define Vcl_Consts_sAllFilter 65215
#define Vcl_Consts_SMsgDlgYes 65216
#define Vcl_Consts_SMsgDlgNo 65217
#define Vcl_Consts_SMsgDlgOK 65218
#define Vcl_Consts_SMsgDlgCancel 65219
#define Vcl_Consts_SMsgDlgHelp 65220
#define Vcl_Consts_SMsgDlgAbort 65221
#define Vcl_Consts_SMsgDlgRetry 65222
#define Vcl_Consts_SMsgDlgIgnore 65223
#define Vcl_Consts_SMsgDlgAll 65224
#define Vcl_Consts_SMsgDlgNoToAll 65225
#define Vcl_Consts_SMsgDlgYesToAll 65226
#define Vcl_Consts_SMsgDlgClose 65227
#define Vcl_Consts_SmkcBkSp 65228
#define Vcl_Consts_SmkcTab 65229
#define Vcl_Consts_SmkcEsc 65230
#define Vcl_Consts_SmkcEnter 65231
#define Vcl_Consts_SHelpButton 65232
#define Vcl_Consts_SCloseButton 65233
#define Vcl_Consts_SIgnoreButton 65234
#define Vcl_Consts_SRetryButton 65235
#define Vcl_Consts_SAbortButton 65236
#define Vcl_Consts_SAllButton 65237
#define Vcl_Consts_SCannotDragForm 65238
#define Vcl_Consts_SVMetafiles 65239
#define Vcl_Consts_SVEnhMetafiles 65240
#define Vcl_Consts_SVIcons 65241
#define Vcl_Consts_SVBitmaps 65242
#define Vcl_Consts_SVTIFFImages 65243
#define Vcl_Consts_SMsgDlgWarning 65244
#define Vcl_Consts_SMsgDlgError 65245
#define Vcl_Consts_SMsgDlgInformation 65246
#define Vcl_Consts_SMsgDlgConfirm 65247
#define Vcl_Consts_SMenuNotFound 65248
#define Vcl_Consts_SNoTimers 65249
#define Vcl_Consts_SNotPrinting 65250
#define Vcl_Consts_SPrinting 65251
#define Vcl_Consts_SPrinterIndexError 65252
#define Vcl_Consts_SInvalidPrinter 65253
#define Vcl_Consts_SDeviceOnPort 65254
#define Vcl_Consts_SGroupIndexTooLow 65255
#define Vcl_Consts_SNoMDIForm 65256
#define Vcl_Consts_SImageCanvasNeedsBitmap 65257
#define Vcl_Consts_SControlParentSetToSelf 65258
#define Vcl_Consts_SControlNonMainThreadUsage 65259
#define Vcl_Consts_SOKButton 65260
#define Vcl_Consts_SCancelButton 65261
#define Vcl_Consts_SYesButton 65262
#define Vcl_Consts_SNoButton 65263
#define Vcl_Consts_SImageIndexError 65264
#define Vcl_Consts_SImageReadFail 65265
#define Vcl_Consts_SImageWriteFail 65266
#define Vcl_Consts_SWindowDCError 65267
#define Vcl_Consts_SWindowClass 65268
#define Vcl_Consts_SCannotFocus 65269
#define Vcl_Consts_SParentRequired 65270
#define Vcl_Consts_SControlPath 65271
#define Vcl_Consts_SParentGivenNotAParent 65272
#define Vcl_Consts_SMDIChildNotVisible 65273
#define Vcl_Consts_SVisibleChanged 65274
#define Vcl_Consts_SCannotShowModal 65275
#define Vcl_Consts_SScrollBarRange 65276
#define Vcl_Consts_SPropertyOutOfRange 65277
#define Vcl_Consts_SMenuIndexError 65278
#define Vcl_Consts_SMenuReinserted 65279
#define Vcl_Consts_SInvalidImage 65280
#define Vcl_Consts_SScanLine 65281
#define Vcl_Consts_SChangeIconSize 65282
#define Vcl_Consts_SChangeWicSize 65283
#define Vcl_Consts_SOleGraphic 65284
#define Vcl_Consts_SUnknownExtension 65285
#define Vcl_Consts_SUnknownClipboardFormat 65286
#define Vcl_Consts_SUnknownStreamFormat 65287
#define Vcl_Consts_SOutOfResources 65288
#define Vcl_Consts_SNoCanvasHandle 65289
#define Vcl_Consts_SInvalidTextFormatFlag 65290
#define Vcl_Consts_SInvalidFrameIndex 65291
#define Vcl_Consts_SInvalidImageSize 65292
#define Vcl_Consts_SInvalidImageList 65293
#define Vcl_Consts_SReplaceImage 65294
#define Vcl_Consts_SInsertImage 65295
#define System_RTLConsts_SWinRTInstanceError 65296
#define System_RTLConsts_sObserverUnsupported 65297
#define System_RTLConsts_sObserverMultipleSingleCast 65298
#define System_RTLConsts_sObserverNoInterface 65299
#define System_RTLConsts_sObserverNoSinglecastFound 65300
#define System_RTLConsts_sObserverNoMulticastFound 65301
#define System_RTLConsts_sObserverNotAvailable 65302
#define System_RTLConsts_SInvalidDateString 65303
#define System_RTLConsts_SInvalidTimeString 65304
#define System_RTLConsts_SInvalidOffsetString 65305
#define System_RTLConsts_sMustWaitOnOneEvent 65306
#define System_RTLConsts_sBeginInvokeDestroying 65307
#define Vcl_Consts_SInvalidBitmap 65308
#define Vcl_Consts_SInvalidIcon 65309
#define Vcl_Consts_SInvalidMetafile 65310
#define Vcl_Consts_SInvalidPixelFormat 65311
#define System_RTLConsts_SWindowsServer2008 65312
#define System_RTLConsts_SWindows7 65313
#define System_RTLConsts_SWindowsServer2008R2 65314
#define System_RTLConsts_SWindows2000 65315
#define System_RTLConsts_SWindowsXP 65316
#define System_RTLConsts_SWindowsServer2003 65317
#define System_RTLConsts_SWindowsServer2003R2 65318
#define System_RTLConsts_SWindowsServer2012 65319
#define System_RTLConsts_SWindowsServer2012R2 65320
#define System_RTLConsts_SWindowsServer2016 65321
#define System_RTLConsts_SWindowsServer2019 65322
#define System_RTLConsts_SWindowsServer2022 65323
#define System_RTLConsts_SWindows8 65324
#define System_RTLConsts_SWindows8Point1 65325
#define System_RTLConsts_SWindows10 65326
#define System_RTLConsts_SWindows11 65327
#define System_RTLConsts_SGenericItemNotFound 65328
#define System_RTLConsts_SGenericDuplicateItem 65329
#define System_RTLConsts_SInsufficientRtti 65330
#define System_RTLConsts_SParameterCountMismatch 65331
#define System_RTLConsts_SNonPublicType 65332
#define System_RTLConsts_SByRefArgMismatch 65333
#define System_RTLConsts_SPropIsReadOnly 65334
#define System_RTLConsts_SPropIsWriteOnly 65335
#define System_RTLConsts_SInvalidRttiDestroy 65336
#define System_RTLConsts_SServiceNotFound 65337
#define System_RTLConsts_SVersionStr 65338
#define System_RTLConsts_SSPVersionStr 65339
#define System_RTLConsts_SVersion32 65340
#define System_RTLConsts_SVersion64 65341
#define System_RTLConsts_SWindows 65342
#define System_RTLConsts_SWindowsVista 65343
#define System_RTLConsts_sSpinCountOutOfRange 65344
#define System_RTLConsts_sTimespanTooLong 65345
#define System_RTLConsts_sInvalidTimespanDuration 65346
#define System_RTLConsts_sTimespanValueCannotBeNan 65347
#define System_RTLConsts_sCannotNegateTimespan 65348
#define System_RTLConsts_sInvalidTimespanFormat 65349
#define System_RTLConsts_sTimespanElementTooLong 65350
#define System_RTLConsts_SNoContext 65351
#define System_RTLConsts_SNoContextFound 65352
#define System_RTLConsts_SNoIndex 65353
#define System_RTLConsts_SNoSearch 65354
#define System_RTLConsts_SNoTableOfContents 65355
#define System_RTLConsts_SNoTopics 65356
#define System_RTLConsts_SNothingFound 65357
#define System_RTLConsts_SArgumentOutOfRange 65358
#define System_RTLConsts_SArgumentNil 65359
#define System_RTLConsts_SThreadExternalCheckTerminated 65360
#define System_RTLConsts_SThreadExternalSetReturnValue 65361
#define System_RTLConsts_SParamIsNil 65362
#define System_RTLConsts_SParamIsNegative 65363
#define System_RTLConsts_SInputBufferExceed 65364
#define System_RTLConsts_SInvalidCharsInPath 65365
#define System_RTLConsts_SInvalidCharsInFileName 65366
#define System_RTLConsts_SEmptyFileName 65367
#define System_RTLConsts_SPathTooLong 65368
#define System_RTLConsts_SDriveNotFound 65369
#define System_RTLConsts_hNoFilterViewer 65370
#define System_RTLConsts_sArgumentInvalid 65371
#define System_RTLConsts_sInvalidStringAndObjectArrays 65372
#define System_RTLConsts_sSameArrays 65373
#define System_RTLConsts_sNoConstruct 65374
#define System_RTLConsts_sInvalidTimeoutValue 65375
#define System_RTLConsts_SReadError 65376
#define System_RTLConsts_SReadOnlyProperty 65377
#define System_RTLConsts_SRegCreateFailed 65378
#define System_RTLConsts_SRegGetDataFailed 65379
#define System_RTLConsts_SRegSetDataFailed 65380
#define System_RTLConsts_SResNotFound 65381
#define System_RTLConsts_SSeekNotImplemented 65382
#define System_RTLConsts_SSortedListError 65383
#define System_RTLConsts_SUnknownGroup 65384
#define System_RTLConsts_SUnknownProperty 65385
#define System_RTLConsts_SWriteError 65386
#define System_RTLConsts_SThreadCreateError 65387
#define System_RTLConsts_SThreadError 65388
#define System_RTLConsts_SThreadExternalTerminate 65389
#define System_RTLConsts_SThreadExternalWait 65390
#define System_RTLConsts_SThreadStartError 65391
#define System_RTLConsts_SFCreateErrorEx 65392
#define System_RTLConsts_SFOpenErrorEx 65393
#define System_RTLConsts_SInvalidImage 65394
#define System_RTLConsts_SInvalidName 65395
#define System_RTLConsts_SInvalidProperty 65396
#define System_RTLConsts_SInvalidPropertyPath 65397
#define System_RTLConsts_SInvalidPropertyValue 65398
#define System_RTLConsts_SInvalidRegType 65399
#define System_RTLConsts_SListCapacityError 65400
#define System_RTLConsts_SListCountError 65401
#define System_RTLConsts_SListIndexError 65402
#define System_RTLConsts_SListIndexErrorRangeReason 65403
#define System_RTLConsts_SListIndexErrorEmptyReason 65404
#define System_RTLConsts_SMemoryStreamError 65405
#define System_RTLConsts_SNoComSupport 65406
#define System_RTLConsts_SPropertyException 65407
#define System_SysConst_SInvalidCharCount 65408
#define System_SysConst_SInvalidDestinationIndex 65409
#define System_SysConst_SInvalidCodePage 65410
#define System_SysConst_SInvalidEncodingName 65411
#define System_SysConst_SNoMappingForUnicodeCharacter 65412
#define System_SysConst_SInvalidStringBaseIndex 65413
#define System_RTLConsts_SAncestorNotFound 65414
#define System_RTLConsts_SAssignError 65415
#define System_RTLConsts_SBitsIndexError 65416
#define System_RTLConsts_SCantWriteResourceStreamError 65417
#define System_RTLConsts_SCheckSynchronizeError 65418
#define System_RTLConsts_SClassNotFound 65419
#define System_RTLConsts_SDuplicateClass 65420
#define System_RTLConsts_SDuplicateItem 65421
#define System_RTLConsts_SDuplicateName 65422
#define System_RTLConsts_SDuplicateString 65423
#define System_SysConst_SShortDayNameWed 65424
#define System_SysConst_SShortDayNameThu 65425
#define System_SysConst_SShortDayNameFri 65426
#define System_SysConst_SShortDayNameSat 65427
#define System_SysConst_SLongDayNameSun 65428
#define System_SysConst_SLongDayNameMon 65429
#define System_SysConst_SLongDayNameTue 65430
#define System_SysConst_SLongDayNameWed 65431
#define System_SysConst_SLongDayNameThu 65432
#define System_SysConst_SLongDayNameFri 65433
#define System_SysConst_SLongDayNameSat 65434
#define System_SysConst_SCannotCreateDir 65435
#define System_SysConst_SInvalidSourceArray 65436
#define System_SysConst_SInvalidDestinationArray 65437
#define System_SysConst_SCharIndexOutOfBounds 65438
#define System_SysConst_SByteIndexOutOfBounds 65439
#define System_SysConst_SShortMonthNameDec 65440
#define System_SysConst_SLongMonthNameJan 65441
#define System_SysConst_SLongMonthNameFeb 65442
#define System_SysConst_SLongMonthNameMar 65443
#define System_SysConst_SLongMonthNameApr 65444
#define System_SysConst_SLongMonthNameMay 65445
#define System_SysConst_SLongMonthNameJun 65446
#define System_SysConst_SLongMonthNameJul 65447
#define System_SysConst_SLongMonthNameAug 65448
#define System_SysConst_SLongMonthNameSep 65449
#define System_SysConst_SLongMonthNameOct 65450
#define System_SysConst_SLongMonthNameNov 65451
#define System_SysConst_SLongMonthNameDec 65452
#define System_SysConst_SShortDayNameSun 65453
#define System_SysConst_SShortDayNameMon 65454
#define System_SysConst_SShortDayNameTue 65455
#define System_SysConst_SAssertError 65456
#define System_SysConst_SAbstractError 65457
#define System_SysConst_SModuleAccessViolation 65458
#define System_SysConst_SOSError 65459
#define System_SysConst_SUnkOSError 65460
#define System_SysConst_SShortMonthNameJan 65461
#define System_SysConst_SShortMonthNameFeb 65462
#define System_SysConst_SShortMonthNameMar 65463
#define System_SysConst_SShortMonthNameApr 65464
#define System_SysConst_SShortMonthNameMay 65465
#define System_SysConst_SShortMonthNameJun 65466
#define System_SysConst_SShortMonthNameJul 65467
#define System_SysConst_SShortMonthNameAug 65468
#define System_SysConst_SShortMonthNameSep 65469
#define System_SysConst_SShortMonthNameOct 65470
#define System_SysConst_SShortMonthNameNov 65471
#define System_SysConst_SVarTypeTooManyCustom 65472
#define System_SysConst_SVarTypeCouldNotConvert 65473
#define System_SysConst_SVarTypeConvertOverflow 65474
#define System_SysConst_SVarOverflow 65475
#define System_SysConst_SVarInvalid 65476
#define System_SysConst_SVarBadType 65477
#define System_SysConst_SVarNotImplemented 65478
#define System_SysConst_SVarUnexpected 65479
#define System_SysConst_SExternalException 65480
#define System_SysConst_SAssertionFailed 65481
#define System_SysConst_SIntfCastError 65482
#define System_SysConst_SSafecallException 65483
#define System_SysConst_SMonitorLockException 65484
#define System_SysConst_SNoMonitorSupportException 65485
#define System_SysConst_SNotImplemented 65486
#define System_SysConst_SObjectDisposed 65487
#define System_SysConst_SArgumentMissing 65488
#define System_SysConst_SDispatchError 65489
#define System_SysConst_SReadAccess 65490
#define System_SysConst_SWriteAccess 65491
#define System_SysConst_SExecuteAccess 65492
#define System_SysConst_SInvalidAccess 65493
#define System_SysConst_SVarArrayCreate 65494
#define System_SysConst_SVarArrayBounds 65495
#define System_SysConst_SVarArrayLocked 65496
#define System_SysConst_SInvalidVarCast 65497
#define System_SysConst_SInvalidVarOp 65498
#define System_SysConst_SInvalidVarNullOp 65499
#define System_SysConst_SInvalidVarOpWithHResultWithPrefix 65500
#define System_SysConst_SVarTypeOutOfRangeWithPrefix 65501
#define System_SysConst_SVarTypeAlreadyUsedWithPrefix 65502
#define System_SysConst_SVarTypeNotUsableWithPrefix 65503
#define System_SysConst_SRangeError 65504
#define System_SysConst_SIntOverflow 65505
#define System_SysConst_SInvalidOp 65506
#define System_SysConst_SZeroDivide 65507
#define System_SysConst_SOverflow 65508
#define System_SysConst_SUnderflow 65509
#define System_SysConst_SInvalidPointer 65510
#define System_SysConst_SInvalidCast 65511
#define System_SysConst_SAccessViolationArg3 65512
#define System_SysConst_SAccessViolationNoArg 65513
#define System_SysConst_SStackOverflow 65514
#define System_SysConst_SControlC 65515
#define System_SysConst_SPrivilege 65516
#define System_SysConst_SException 65517
#define System_SysConst_SExceptTitle 65518
#define System_SysConst_SInvalidFormat 65519
#define System_SysConst_SUnknown 65520
#define System_SysConst_SInvalidInteger 65521
#define System_SysConst_SInvalidTimeStamp 65522
#define System_SysConst_SInvalidGUID 65523
#define System_SysConst_STimeEncodeError 65524
#define System_SysConst_SDateEncodeError 65525
#define System_SysConst_SOutOfMemory 65526
#define System_SysConst_SInOutError 65527
#define System_SysConst_SFileNotFound 65528
#define System_SysConst_SInvalidUnknownFilename 65529
#define System_SysConst_STooManyOpenFiles 65530
#define System_SysConst_SAccessDenied 65531
#define System_SysConst_SEndOfFile 65532
#define System_SysConst_SDiskFull 65533
#define System_SysConst_SInvalidInput 65534
#define System_SysConst_SDivByZero 65535
STRINGTABLE
BEGIN
LevMain_status_lives, L"Lifes: "
LevMain_status_nolives, L"Unit has no lives"
LevMain_SUnknownEnemyType, L"???"
LevMain_SExitWithoutSave, L"Close without saving?"
LevEdit_SAlreadyStarted, L"The editor is already open"
LevEdit_STitel, L"SpaceMission Level Editor"
LevEdit_SFileMissing, L"%s is missing. Please reinstall SpaceMission."
Vcl_OleConst_sNoRunningObject, L"Unable to retrieve a pointer to a running object registered with OLE for %s/%s"
Vcl_EdgeConst_SWebViewFailure, L"Edge-Browser control could not be created"
Vcl_EdgeConst_SNoWebView, L"WebView2 control was not initialized"
IEConst_sNotSupportedByEdge, L"Action not supported by Edge WebView2 control"
System_RegularExpressionsConsts_SRegExMissingExpression, L"A regular expression is required in RegEx"
System_RegularExpressionsConsts_SRegExExpressionError, L"Error in regular expression at offset %d: %s"
System_RegularExpressionsConsts_SRegExStudyError, L"Error while evaluating regex: %s"
System_RegularExpressionsConsts_SRegExMatchRequired, L"Match required"
System_RegularExpressionsConsts_SRegExStringsRequired, L"Strings parameter must not be nil"
System_RegularExpressionsConsts_SRegExIndexOutOfBounds, L"Index is greater than maximum (%d)"
LevMain_status_info, L"Hover your mouse cursor over an entity to show its properties"
LevMain_SFileError, L"File cannot be opened by SpaceMission"
LevMain_SCaption, L"SpaceMission %s - Level Editor"
LevMain_SYes, L"Yes"
LevMain_SNo, L"No"
LevMain_SReallyDeleteLevel, L"Do you want to delete this level?"
LevSpeicherung_SSelbsterstellt, L"Own creation"
LevSpeicherung_SLevelFileNotFound, L"Level file not found"
LevSpeicherung_SReallyDeleteLevel, L"Do you really want to delete this level?"
LevSpeicherung_SLoadNewLevelAndDiscardChanges, L"Load new level and discard changes?"
LevSpeicherung_SLevelIsEmpty, L"The level is empty!"
LevSpeicherung_SLevelAlreadyExists, L"Level with the same number already exists. Replace?"
LevSpeicherung_SYes, L"Yes"
LevSpeicherung_SNo, L"No"
LevSpeicherung_SFields, L"%d Fields"
LevSpeicherung_SXbyY, L"%s by %s"
ComInfo_SVersion, L"Version %s"
Vcl_OleConst_SBadPropValue, L"'%s' is not a valid property value"
Vcl_OleConst_SCannotActivate, L"OLE control activation failed"
Vcl_OleConst_SNoWindowHandle, L"Could not obtain OLE control window handle"
Vcl_OleConst_SInvalidLicense, L"License information for %s is invalid"
Vcl_OleConst_SNotLicensed, L"License information for %s not found. You cannot use this control in design mode"
Vcl_Imaging_JConsts_sChangeJPGSize, L"Cannot change the size of a JPEG image"
Vcl_Imaging_JConsts_sJPEGError, L"JPEG error #%d"
Vcl_Imaging_JConsts_sJPEGImageFile, L"JPEG Image File"
Global_SDownloadError, L"Could not download version information from the ViaThinkSoft server. Please try again later."
Global_SNewProgramVersionAvailable, L"A new program version is available! Download now?"
Global_SNoUpdateAvailable, L"You are already using the latest version"
ComLevelReader_SLevelFileFolder, L"Levels"
ComLevelReader_SLevelFileSubFolder, L"SpaceMission"
ComLevelReader_SExtraContentAfterLine, L"Line %d is invalid (additional information at line end)"
ComLevelReader_SInvalidXCoord, L"X-Coordinate must be a multiple of %d."
ComLevelReader_SInvalidYCoord, L"Y-Coordinate must be a multiple of %d."
ComLevelReader_SInvalidLevelFile, L"Level file format is not supported or the file is corrupt."
ComLevelReader_SEnemyTypeNotImplemented, L"Enemy type %d not supported (Old game version?)"
ComLevelReader_SLevelEnemyLineComment, L"; Type XCoord YCoord Lives"
ComLevelReader_SInvalidFile, L"Savegame format is not supported or the file is corrupt."
LevSpeicherung_SLevelListBox, L"Level %d"
Vcl_Imaging_pnglang_EPNGUnknownCriticalChunkText, L"This ""Portable Network Graphics"" image contains an unknown critical part which could not be decoded."
Vcl_Imaging_pnglang_EPNGUnknownCompressionText, L"This ""Portable Network Graphics"" image is encoded with an unknown compression scheme which could not be decoded."
Vcl_Imaging_pnglang_EPNGUnknownInterlaceText, L"This ""Portable Network Graphics"" image uses an unknown interlace scheme which could not be decoded."
Vcl_Imaging_pnglang_EPNGUnknownColorTypeText, L"This PNG image (Portable Network Graphics) contains an unknown color type, which could not be decoded."
Vcl_Imaging_pnglang_EPNGCannotAssignChunkText, L"The chunks must be compatible to be assigned."
Vcl_Imaging_pnglang_EPNGUnexpectedEndText, L"This ""Portable Network Graphics"" image is invalid because the decoder found an unexpected end of the file."
Vcl_Imaging_pnglang_EPNGNoImageDataText, L"This ""Portable Network Graphics"" image contains no data."
Vcl_Imaging_pnglang_EPNGCannotAddChunkText, L"The program tried to add a existent critical chunk to the current image which is not allowed."
Vcl_Imaging_pnglang_EPNGCannotAddInvalidImageText, L"It's not allowed to add a new chunk because the current image is invalid."
Vcl_Imaging_pnglang_EPNGCouldNotLoadResourceText, L"The png image could not be loaded from the resource ID."
Vcl_Imaging_pnglang_EPNGOutMemoryText, L"Some operation could not be performed because the system is out of resources. Close some windows and try again."
Vcl_Imaging_pnglang_EPNGCannotChangeTransparentText, L"Setting bit transparency color is not allowed for png images containing alpha value for each pixel (COLOR_RGBALPHA and COLOR_GRAYSCALEALPHA)"
Vcl_Imaging_pnglang_EPNGHeaderNotPresentText, L"This operation is not valid because the current image contains no valid header."
Vcl_Imaging_pnglang_EInvalidNewSize, L"The new size provided for image resizing is invalid."
Vcl_Imaging_pnglang_EInvalidSpec, L"The ""Portable Network Graphics"" could not be created because invalid image type parameters have being provided."
Vcl_Imaging_pnglang_EPNGInvalidBitDepthText, L"The PNG image (Portable Network Graphics) could not be loaded, because the image contains an unsupported bit-depth."
DXConsts_SInvalidDIB, L"DIB is invalid"
DXConsts_SInvalidDIBBitCount, L"Bitcount in invalid (%d)"
DXConsts_SInvalidDIBPixelFormat, L"PixelFormat in invalid"
DXConsts_SInvalidDisplayBitCount, L"Display requires 8, 16, 24 or 32 bits"
DXConsts_SNotSupportGraphicFile, L"Graphic format not suported"
DXConsts_SInvalidDXTFile, L"DXT file is invalid"
DXConsts_SCannotLoadGraphic, L"Can not load graphic"
Vcl_Imaging_pnglang_EPngInvalidCRCText, L"This ""Portable Network Graphics"" image is not valid because it contains invalid pieces of data (crc error)"
Vcl_Imaging_pnglang_EPNGInvalidIHDRText, L"The ""Portable Network Graphics"" image could not be loaded because one of its main piece of data (ihdr) might be corrupted"
Vcl_Imaging_pnglang_EPNGMissingMultipleIDATText, L"This ""Portable Network Graphics"" image is invalid because it has missing image parts."
Vcl_Imaging_pnglang_EPNGZLIBErrorText, L"This graphics could not be decompressed because parts of the compressed data is invalid. \r\nDescription: "
Vcl_Imaging_pnglang_EPNGInvalidPaletteText, L"The ""Portable Network Graphics"" image contains an invalid palette."
Vcl_Imaging_pnglang_EPNGInvalidFileHeaderText, L"The read file is not a valid PNG picture (""Portable Network Graphics""), because it does not contain a valid header. The file is probably corrupt. Please try to receive a newer version of the file."
Vcl_Imaging_pnglang_EPNGIHDRNotFirstText, L"This ""Portable Network Graphics"" image is not supported or it might be invalid.\r\n(IHDR chunk is not the first)"
Vcl_Imaging_pnglang_EPNGSizeExceedsText, L"This PNG image (Portable Network Graphics) cannot be loaded because width or height exceeds 65535 piels."
Vcl_Imaging_pnglang_EPNGUnknownPalEntryText, L"There is no such palette entry."
DXConsts_SDirectDrawSurface, L"Surface"
DXConsts_SDirectDrawPrimarySurface, L"Primary Surface"
DXConsts_STexture, L"Texture"
DXConsts_SNotMade, L"%s not made"
DXConsts_SCannotMade, L"%s cannot be made"
DXConsts_SCannotInitialized, L"%s cannot be initialized"
DXConsts_SDLLNotLoaded, L"%s is not loaded"
DXConsts_SImageNotFound, L"Image '%s' not found"
DXConsts_SListIndexError, L"Index of the list exceeds the range. (%d)"
DXConsts_SScanline, L"Index of the scanning line exceeded the range. (%d)"
DXConsts_SNoForm, L"Form not found"
DXConsts_SSinceDirectX6, L"Requires DirectX 6.0 or later"
DXConsts_SSinceDirectX7, L"Requires DirectX 7.0 or later"
DXConsts_S3DDeviceNotFound, L"3D device not found"
DXConsts_SDisplayModeChange, L"Display mode cannot be changed (%dx%d %dbit)"
DXConsts_SDisplayModeCannotAcquired, L"Display mode cannot be acquired"
Vcl_Consts_SStyleFormatError, L"Invalid style format"
Vcl_Consts_SStyleHookClassRegistered, L"Class '%s' is already registered for '%s'"
Vcl_Consts_SStyleHookClassNotRegistered, L"Class '%s' is not registered for '%s'"
Vcl_Consts_SStyleInvalidParameter, L"Parameter %s must not me nil"
Vcl_Consts_SStyleFeatureNotSupported, L"Function is not supported by this style"
Vcl_Consts_SStyleNotRegistered, L"The style '%s' is not registered"
Vcl_Consts_SStyleUnregisterError, L"The registry of the system style cannot be removed"
Vcl_Consts_SStyleNotRegisteredNoName, L"Style not registered"
Vcl_Consts_sBeginInvokeNoHandle, L"BeginInvoke cannot be called without superior window or window handle"
System_Win_ComConst_SOleError, L"OLE error %.8x"
System_Win_ComConst_SNoMethod, L"Method '%s' not supported by automation object"
System_Win_ComConst_SVarNotObject, L"Variant does not reference an automation object"
System_Win_ComConst_STooManyParams, L"Dispatch methods do not support more than 64 parameters"
System_Win_ComConst_SDCOMNotInstalled, L"DCOM not installed"
DXConsts_SDirectDraw, L"DirectDraw"
DXConsts_SDirectDrawClipper, L"Clipper"
Vcl_Consts_SDomain, L"&Domain"
Vcl_Consts_SLogin, L"Login"
Vcl_Consts_SErrorSettingCount, L"Error setting %s.Count"
Vcl_Consts_SListBoxMustBeVirtual, L"Listbox (%s) style must be virtual in order to set Count"
Vcl_Consts_STrayIconRemoveError, L"Cannot remove shell notification icon"
Vcl_Consts_SWindowsVistaRequired, L"%s requires Windows Vista or later"
Vcl_Consts_STaskDlgButtonCaption, L"Button%d"
Vcl_Consts_STaskDlgRadioButtonCaption, L"RadioButton%d"
Vcl_Consts_SInvalidTaskDlgButtonCaption, L"Caption cannot be empty"
Vcl_Consts_SStyleLoadError, L"Style '%s' cannot be loaded"
Vcl_Consts_SStyleLoadErrors, L"Styles %s cannot be loaded"
Vcl_Consts_SStyleRegisterError, L"Style '%s' is already registered"
Vcl_Consts_SStyleClassRegisterError, L"Style class '%s' is already registered"
Vcl_Consts_SStyleNotFound, L"Style '%s' not found"
Vcl_Consts_SStyleClassNotFound, L"Style class '%s' not found"
Vcl_Consts_SStyleInvalidHandle, L"Invalid style handle"
Vcl_Consts_SInsertLineError, L"Unable to insert a line"
Vcl_Consts_SIconToClipboard, L"Clipboard does not support Icons"
Vcl_Consts_SCannotOpenClipboard, L"Cannot open clipboard: %s"
Vcl_Consts_SInvalidMemoSize, L"Text exceeds memo capacity"
Vcl_Consts_SInvalidPrinterOp, L"Operation not supported on selected printer"
Vcl_Consts_SNoDefaultPrinter, L"Currently no default printer is selected"
Vcl_Consts_SDuplicateMenus, L"Men\x00FC '%s' is already used for a different form"
Vcl_Consts_SDockedCtlNeedsName, L"Docked control must have a name"
Vcl_Consts_SDockTreeRemoveError, L"Error removing control from dock tree"
Vcl_Consts_SDockZoneNotFound, L" - Dock zone not found"
Vcl_Consts_SDockZoneHasNoCtl, L" - Dock zone has no control"
Vcl_Consts_SDockZoneVersionConflict, L"Error loading dock zone from the stream. Expecting version %d, but found %d."
Vcl_Consts_SPromptArrayTooShort, L"Length of the value array must be >= length of the prompt array"
Vcl_Consts_SPromptArrayEmpty, L"Prompt array must not be empty"
Vcl_Consts_SUsername, L"&Username"
Vcl_Consts_SPassword, L"&Password"
Vcl_Consts_SmkcSpace, L"Space"
Vcl_Consts_SmkcPgUp, L"PgUp"
Vcl_Consts_SmkcPgDn, L"PgDn"
Vcl_Consts_SmkcEnd, L"End"
Vcl_Consts_SmkcHome, L"Home"
Vcl_Consts_SmkcLeft, L"Left"
Vcl_Consts_SmkcUp, L"Up"
Vcl_Consts_SmkcRight, L"Right"
Vcl_Consts_SmkcDown, L"Down"
Vcl_Consts_SmkcIns, L"Ins"
Vcl_Consts_SmkcDel, L"Del"
Vcl_Consts_SmkcShift, L"Shift+"
Vcl_Consts_SmkcCtrl, L"Ctrl+"
Vcl_Consts_SmkcAlt, L"Alt+"
Vcl_Consts_SOutOfRange, L"Value must be between %d and %d"
Vcl_Consts_sAllFilter, L"All"
Vcl_Consts_SMsgDlgYes, L"&Yes"
Vcl_Consts_SMsgDlgNo, L"&No"
Vcl_Consts_SMsgDlgOK, L"OK"
Vcl_Consts_SMsgDlgCancel, L"Cancel"
Vcl_Consts_SMsgDlgHelp, L"&Help"
Vcl_Consts_SMsgDlgAbort, L"&Abort"
Vcl_Consts_SMsgDlgRetry, L"&Retry"
Vcl_Consts_SMsgDlgIgnore, L"&Ignore"
Vcl_Consts_SMsgDlgAll, L"&All"
Vcl_Consts_SMsgDlgNoToAll, L"N&o to All"
Vcl_Consts_SMsgDlgYesToAll, L"Yes to &All"
Vcl_Consts_SMsgDlgClose, L"&Close"
Vcl_Consts_SmkcBkSp, L"BkSp"
Vcl_Consts_SmkcTab, L"Tab"
Vcl_Consts_SmkcEsc, L"Esc"
Vcl_Consts_SmkcEnter, L"Enter"
Vcl_Consts_SHelpButton, L"&Help"
Vcl_Consts_SCloseButton, L"&Close"
Vcl_Consts_SIgnoreButton, L"&Ignore"
Vcl_Consts_SRetryButton, L"&Retry"
Vcl_Consts_SAbortButton, L"Cancel"
Vcl_Consts_SAllButton, L"&All"
Vcl_Consts_SCannotDragForm, L"Cannot drag a form"
Vcl_Consts_SVMetafiles, L"Metafiles"
Vcl_Consts_SVEnhMetafiles, L"Enhanced Metafiles"
Vcl_Consts_SVIcons, L"Icons"
Vcl_Consts_SVBitmaps, L"Bitmaps"
Vcl_Consts_SVTIFFImages, L"TIFF graphics"
Vcl_Consts_SMsgDlgWarning, L"Warning"
Vcl_Consts_SMsgDlgError, L"Error"
Vcl_Consts_SMsgDlgInformation, L"Information"
Vcl_Consts_SMsgDlgConfirm, L"Confirm"
Vcl_Consts_SMenuNotFound, L"Sub-menu is not in menu"
Vcl_Consts_SNoTimers, L"Not enough timers available"
Vcl_Consts_SNotPrinting, L"Printer is not currently printing"
Vcl_Consts_SPrinting, L"Printing in progress"
Vcl_Consts_SPrinterIndexError, L"Printer index out of range"
Vcl_Consts_SInvalidPrinter, L"Selected printer is invalid"
Vcl_Consts_SDeviceOnPort, L"%s on %s"
Vcl_Consts_SGroupIndexTooLow, L"GroupIndex must not be smaller than the GroupIndex of a previous menu item"
Vcl_Consts_SNoMDIForm, L"Form cannot be created. Currently no MDI forms are active"
Vcl_Consts_SImageCanvasNeedsBitmap, L"A picture can only be changed if it contains a bitmap"
Vcl_Consts_SControlParentSetToSelf, L"A control cannot have itself as its parent"
Vcl_Consts_SControlNonMainThreadUsage, L"Control '%s' is not used for a main thread"
Vcl_Consts_SOKButton, L"OK"
Vcl_Consts_SCancelButton, L"Cancel"
Vcl_Consts_SYesButton, L"&Yes"
Vcl_Consts_SNoButton, L"&No"
Vcl_Consts_SImageIndexError, L"Invalid ImageList index"
Vcl_Consts_SImageReadFail, L"Failed to read ImageList data from stream"
Vcl_Consts_SImageWriteFail, L"Failed to write ImageList data to stream"
Vcl_Consts_SWindowDCError, L"Error creating window device context"
Vcl_Consts_SWindowClass, L"Error creating window class"
Vcl_Consts_SCannotFocus, L"Cannot focus a disabled or invisible window"
Vcl_Consts_SParentRequired, L"Control '%s' has no parent window"
Vcl_Consts_SControlPath, L". Path:\r\n%s"
Vcl_Consts_SParentGivenNotAParent, L"Parent given is not a parent of '%s'"
Vcl_Consts_SMDIChildNotVisible, L"Cannot hide an MDI Child Form"
Vcl_Consts_SVisibleChanged, L"Cannot change Visible in OnShow or OnHide"
Vcl_Consts_SCannotShowModal, L"A visible window cannot be converted to a modal window."
Vcl_Consts_SScrollBarRange, L"Scrollbar property out of range"
Vcl_Consts_SPropertyOutOfRange, L"%s property out of range"
Vcl_Consts_SMenuIndexError, L"Menu index out of range"
Vcl_Consts_SMenuReinserted, L"Menu inserted twice"
Vcl_Consts_SInvalidImage, L"Invalid image"
Vcl_Consts_SScanLine, L"Scan line index out of range"
Vcl_Consts_SChangeIconSize, L"Cannot change the size of an icon"
Vcl_Consts_SChangeWicSize, L"The size of a WIC picture cannot be changed"
Vcl_Consts_SOleGraphic, L"Invalid operation on TOleGraphic"
Vcl_Consts_SUnknownExtension, L"Unknown picture file extension (.%s)"
Vcl_Consts_SUnknownClipboardFormat, L"Clipboard format not supported"
Vcl_Consts_SUnknownStreamFormat, L"Stream format not supported"
Vcl_Consts_SOutOfResources, L"System resources are exhausted"
Vcl_Consts_SNoCanvasHandle, L"Canvas does not allow characters"
Vcl_Consts_SInvalidTextFormatFlag, L"Text format flag '%s' is not supported"
Vcl_Consts_SInvalidFrameIndex, L"Invalid picture frame index %d: there are %d frames available (0-%d)"
Vcl_Consts_SInvalidImageSize, L"Invalid image size"
Vcl_Consts_SInvalidImageList, L"Invalid ImageList"
Vcl_Consts_SReplaceImage, L"Unable to Replace Image"
Vcl_Consts_SInsertImage, L"Picture cannot be inserted"
System_RTLConsts_SWinRTInstanceError, L"Instance of class %s cannot be created"
System_RTLConsts_sObserverUnsupported, L"Observer is not supported"
System_RTLConsts_sObserverMultipleSingleCast, L"Multiple single cast observers cannot be added to observer collection"
System_RTLConsts_sObserverNoInterface, L"The object does not implement the observer interface"
System_RTLConsts_sObserverNoSinglecastFound, L"No single cast observer with ID %d found in collection"
System_RTLConsts_sObserverNoMulticastFound, L"No multi cast observer with ID %d found in collection"
System_RTLConsts_sObserverNotAvailable, L"Observer is not available"
System_RTLConsts_SInvalidDateString, L"Invalid date string: %s"
System_RTLConsts_SInvalidTimeString, L"Invalid time string: %s"
System_RTLConsts_SInvalidOffsetString, L"Invalid time offset string: %s"
System_RTLConsts_sMustWaitOnOneEvent, L"Waiting for at least one event"
System_RTLConsts_sBeginInvokeDestroying, L"BeginInvoke cannot be called to free TComponent"
Vcl_Consts_SInvalidBitmap, L"Bitmap image is not valid"
Vcl_Consts_SInvalidIcon, L"Icon image is not valid"
Vcl_Consts_SInvalidMetafile, L"Metafile is not valid"
Vcl_Consts_SInvalidPixelFormat, L"Invalid pixel format"
System_RTLConsts_SWindowsServer2008, L"Windows Server 2008"
System_RTLConsts_SWindows7, L"Windows 7"
System_RTLConsts_SWindowsServer2008R2, L"Windows Server 2008 R2"
System_RTLConsts_SWindows2000, L"Windows 2000"
System_RTLConsts_SWindowsXP, L"Windows XP"
System_RTLConsts_SWindowsServer2003, L"Windows Server 2003"
System_RTLConsts_SWindowsServer2003R2, L"Windows Server 2003 R2"
System_RTLConsts_SWindowsServer2012, L"Windows Server 2012"
System_RTLConsts_SWindowsServer2012R2, L"Windows Server 2012 R2"
System_RTLConsts_SWindowsServer2016, L"Windows Server 2016"
System_RTLConsts_SWindowsServer2019, L"Windows Server 2019"
System_RTLConsts_SWindowsServer2022, L"Windows Server 2022"
System_RTLConsts_SWindows8, L"Windows 8"
System_RTLConsts_SWindows8Point1, L"Windows 8.1"
System_RTLConsts_SWindows10, L"Windows 10"
System_RTLConsts_SWindows11, L"Windows 11"
System_RTLConsts_SGenericItemNotFound, L"Entry not found"
System_RTLConsts_SGenericDuplicateItem, L"Duplicates are not allowed"
System_RTLConsts_SInsufficientRtti, L"Not enough RTTI for this operation"
System_RTLConsts_SParameterCountMismatch, L"Parameter count not matched"
System_RTLConsts_SNonPublicType, L"Type '%s' is not declared in the interface-Abschnitt of a unit"
System_RTLConsts_SByRefArgMismatch, L"VAR- and OUT-arguments must match the parameter type"
System_RTLConsts_SPropIsReadOnly, L"Property '%s' is write-protected"
System_RTLConsts_SPropIsWriteOnly, L"Property '%s' can only be written"
System_RTLConsts_SInvalidRttiDestroy, L"RTTI objects cannot be freed through source code"
System_RTLConsts_SServiceNotFound, L"Service for login information not found"
System_RTLConsts_SVersionStr, L"%s (Version %d.%d, Build %d, %5:s)"
System_RTLConsts_SSPVersionStr, L"%s Service Pack %4:d (Version %1:d.%2:d, Build %3:d, %5:s)"
System_RTLConsts_SVersion32, L"32 bit edition"
System_RTLConsts_SVersion64, L"64 bit edition"
System_RTLConsts_SWindows, L"Windows"
System_RTLConsts_SWindowsVista, L"Windows Vista"
System_RTLConsts_sSpinCountOutOfRange, L"SpinCount outside range. It must be between 0 and %d"
System_RTLConsts_sTimespanTooLong, L"TimeSpan too long"
System_RTLConsts_sInvalidTimespanDuration, L"Duration cannot be returned because the absolute value exceeds TTimeSpan.MaxValue"
System_RTLConsts_sTimespanValueCannotBeNan, L"Wert must not be NaN"
System_RTLConsts_sCannotNegateTimespan, L"Negation of mimimum value of a time range is invalid"
System_RTLConsts_sInvalidTimespanFormat, L"Invalid TimeSpan format"
System_RTLConsts_sTimespanElementTooLong, L"TimeSpan element too long"
System_RTLConsts_SNoContext, L"No context-sensitive help installed"
System_RTLConsts_SNoContextFound, L"No help available for context %d"
System_RTLConsts_SNoIndex, L"Unable to open Index"
System_RTLConsts_SNoSearch, L"Unable to open Search"
System_RTLConsts_SNoTableOfContents, L"Unable to find a Table of Contents"
System_RTLConsts_SNoTopics, L"No topic-based help system installed"
System_RTLConsts_SNothingFound, L"No help found for %s"
System_RTLConsts_SArgumentOutOfRange, L"Argument outside of valid range"
System_RTLConsts_SArgumentNil, L"Argument must not be Nil"
System_RTLConsts_SThreadExternalCheckTerminated, L"CheckTerminated cannot be called for an external created thread"
System_RTLConsts_SThreadExternalSetReturnValue, L"SetReturnValue cannot be called for an external created thread"
System_RTLConsts_SParamIsNil, L"Parameter %s must not be Nil"
System_RTLConsts_SParamIsNegative, L"Parameter %s must not be negative"
System_RTLConsts_SInputBufferExceed, L"Input buffer of %s = %d, %s = %d exceeded"
System_RTLConsts_SInvalidCharsInPath, L"Invalid character in file path"
System_RTLConsts_SInvalidCharsInFileName, L"Invalid character in file name"
System_RTLConsts_SEmptyFileName, L"Filename is empty"
System_RTLConsts_SPathTooLong, L"The path is too long"
System_RTLConsts_SDriveNotFound, L"Drive not found"
System_RTLConsts_hNoFilterViewer, L"No help viewer that supports filters"
System_RTLConsts_sArgumentInvalid, L"Invalid argument"
System_RTLConsts_sInvalidStringAndObjectArrays, L"Length of string and object array must be equal"
System_RTLConsts_sSameArrays, L"Source and target arrays must be different"
System_RTLConsts_sNoConstruct, L"Class %s is not intended to be constructed"
System_RTLConsts_sInvalidTimeoutValue, L"Invalid value for timeout: %s"
System_RTLConsts_SReadError, L"Stream read error"
System_RTLConsts_SReadOnlyProperty, L"Property is read-only"
System_RTLConsts_SRegCreateFailed, L"Failed to create key %s"
System_RTLConsts_SRegGetDataFailed, L"Failed to get data for '%s'"
System_RTLConsts_SRegSetDataFailed, L"Failed to set data for '%s'"
System_RTLConsts_SResNotFound, L"Resource %s not found"
System_RTLConsts_SSeekNotImplemented, L"%s.Seek not implemented"
System_RTLConsts_SSortedListError, L"Operation not allowed on sorted list"
System_RTLConsts_SUnknownGroup, L"%s not in a class registration group"
System_RTLConsts_SUnknownProperty, L"Property %s does not exist"
System_RTLConsts_SWriteError, L"Stream write error"
System_RTLConsts_SThreadCreateError, L"Thread creation error: %s"
System_RTLConsts_SThreadError, L"Thread Error: %s (%d)"
System_RTLConsts_SThreadExternalTerminate, L"Cannot terminate an externally created thread"
System_RTLConsts_SThreadExternalWait, L"Cannot wait for an externally created thread"
System_RTLConsts_SThreadStartError, L"Start cannot be called for a started or paused thread"
System_RTLConsts_SFCreateErrorEx, L"Cannot create file ""%s"". %s"
System_RTLConsts_SFOpenErrorEx, L"Cannot open file ""%s"". %s"
System_RTLConsts_SInvalidImage, L"Invalid stream format"
System_RTLConsts_SInvalidName, L"''%s'' is not a valid component name"
System_RTLConsts_SInvalidProperty, L"Invalid property value"
System_RTLConsts_SInvalidPropertyPath, L"Invalid property path"
System_RTLConsts_SInvalidPropertyValue, L"Invalid property value"
System_RTLConsts_SInvalidRegType, L"Invalid data type for '%s'"
System_RTLConsts_SListCapacityError, L"List capacity out of bounds (%d)"
System_RTLConsts_SListCountError, L"List count out of bounds (%d)"
System_RTLConsts_SListIndexError, L"Index outside valid range (%d)"
System_RTLConsts_SListIndexErrorRangeReason, L". %s range is 0..%d"
System_RTLConsts_SListIndexErrorEmptyReason, L". %s is empty"
System_RTLConsts_SMemoryStreamError, L"Out of memory while expanding memory stream"
System_RTLConsts_SNoComSupport, L"%s has not been registered as a COM class"
System_RTLConsts_SPropertyException, L"Error reading %s%s%s: %s"
System_SysConst_SInvalidCharCount, L"Invalid count (%d)"
System_SysConst_SInvalidDestinationIndex, L"Invalid destination index (%d)"
System_SysConst_SInvalidCodePage, L"Invalid code page"
System_SysConst_SInvalidEncodingName, L"Invalid coding name"
System_SysConst_SNoMappingForUnicodeCharacter, L"No mapping for Unicode character in the target Multibyte code page found"
System_SysConst_SInvalidStringBaseIndex, L"Invalid StringBaseIndex"
System_RTLConsts_SAncestorNotFound, L"Ancestor for '%s' not found"
System_RTLConsts_SAssignError, L"Cannot assign a %s to a %s"
System_RTLConsts_SBitsIndexError, L"Bits index out of range"
System_RTLConsts_SCantWriteResourceStreamError, L"Can't write to a read-only resource stream"
System_RTLConsts_SCheckSynchronizeError, L"CheckSynchronize called from thread $%x, which is NOT the main thread"
System_RTLConsts_SClassNotFound, L"Class %s not found"
System_RTLConsts_SDuplicateClass, L"A class named %s already exists"
System_RTLConsts_SDuplicateItem, L"List does not allow duplicates ($0%x)"
System_RTLConsts_SDuplicateName, L"A component named %s already exists"
System_RTLConsts_SDuplicateString, L"Duplicates are not allowed in a StringList"
System_SysConst_SShortDayNameWed, L"Wed"
System_SysConst_SShortDayNameThu, L"Thu"
System_SysConst_SShortDayNameFri, L"Fri"
System_SysConst_SShortDayNameSat, L"Sat"
System_SysConst_SLongDayNameSun, L"Sunday"
System_SysConst_SLongDayNameMon, L"Monday"
System_SysConst_SLongDayNameTue, L"Tuesday"
System_SysConst_SLongDayNameWed, L"Wednesday"
System_SysConst_SLongDayNameThu, L"Thursday"
System_SysConst_SLongDayNameFri, L"Friday"
System_SysConst_SLongDayNameSat, L"Saturday"
System_SysConst_SCannotCreateDir, L"Unable to create directory"
System_SysConst_SInvalidSourceArray, L"Invalid source array"
System_SysConst_SInvalidDestinationArray, L"Invalid destination array"
System_SysConst_SCharIndexOutOfBounds, L"Character index out of bounds (%d)"
System_SysConst_SByteIndexOutOfBounds, L"Start index out of bounds (%d)"
System_SysConst_SShortMonthNameDec, L"Dec"
System_SysConst_SLongMonthNameJan, L"January"
System_SysConst_SLongMonthNameFeb, L"February"
System_SysConst_SLongMonthNameMar, L"March"
System_SysConst_SLongMonthNameApr, L"April"
System_SysConst_SLongMonthNameMay, L"May"
System_SysConst_SLongMonthNameJun, L"June"
System_SysConst_SLongMonthNameJul, L"July"
System_SysConst_SLongMonthNameAug, L"August"
System_SysConst_SLongMonthNameSep, L"September"
System_SysConst_SLongMonthNameOct, L"October"
System_SysConst_SLongMonthNameNov, L"November"
System_SysConst_SLongMonthNameDec, L"December"
System_SysConst_SShortDayNameSun, L"Sun"
System_SysConst_SShortDayNameMon, L"Mon"
System_SysConst_SShortDayNameTue, L"Tue"
System_SysConst_SAssertError, L"%s (%s, line %d)"
System_SysConst_SAbstractError, L"Abstract Error"
System_SysConst_SModuleAccessViolation, L"Access violation at address %p in module '%s'. %s of address %p"
System_SysConst_SOSError, L"System error. Code: %d.\r\n%s%s"
System_SysConst_SUnkOSError, L"A call to an OS function failed"
System_SysConst_SShortMonthNameJan, L"Jan"
System_SysConst_SShortMonthNameFeb, L"Feb"
System_SysConst_SShortMonthNameMar, L"Mar"
System_SysConst_SShortMonthNameApr, L"Apr"
System_SysConst_SShortMonthNameMay, L"May"
System_SysConst_SShortMonthNameJun, L"Jun"
System_SysConst_SShortMonthNameJul, L"Jul"
System_SysConst_SShortMonthNameAug, L"Aug"
System_SysConst_SShortMonthNameSep, L"Sep"
System_SysConst_SShortMonthNameOct, L"Oct"
System_SysConst_SShortMonthNameNov, L"Nov"
System_SysConst_SVarTypeTooManyCustom, L"Too many custom variant types have been registered"
System_SysConst_SVarTypeCouldNotConvert, L"Could not convert variant of type (%s) into type (%s)"
System_SysConst_SVarTypeConvertOverflow, L"Overflow while converting variant of type (%s) into type (%s)"
System_SysConst_SVarOverflow, L"Variant overflow"
System_SysConst_SVarInvalid, L"Invalid argument"
System_SysConst_SVarBadType, L"Invalid variant type"
System_SysConst_SVarNotImplemented, L"Operation not supported"
System_SysConst_SVarUnexpected, L"Unexpected variant error"
System_SysConst_SExternalException, L"External exception %x"
System_SysConst_SAssertionFailed, L"Assertion failed"
System_SysConst_SIntfCastError, L"Interface not supported"
System_SysConst_SSafecallException, L"Exception in safecall method"
System_SysConst_SMonitorLockException, L"Object lock not owned"
System_SysConst_SNoMonitorSupportException, L"Monitor support function not initialized"
System_SysConst_SNotImplemented, L"Feature not implemented"
System_SysConst_SObjectDisposed, L"Method called for freed object"
System_SysConst_SArgumentMissing, L"No argument for format '%s'"
System_SysConst_SDispatchError, L"Variant method calls not supported"
System_SysConst_SReadAccess, L"Read"
System_SysConst_SWriteAccess, L"Write"
System_SysConst_SExecuteAccess, L"Execute"
System_SysConst_SInvalidAccess, L"Invalid access"
System_SysConst_SVarArrayCreate, L"Error creating variant or safe array"
System_SysConst_SVarArrayBounds, L"Variant or safe array index out of bounds"
System_SysConst_SVarArrayLocked, L"Variant or safe array is locked"
System_SysConst_SInvalidVarCast, L"Invalid variant type conversion"
System_SysConst_SInvalidVarOp, L"Invalid variant operation"
System_SysConst_SInvalidVarNullOp, L"Invalid NULL variant operation"
System_SysConst_SInvalidVarOpWithHResultWithPrefix, L"Invalid variant operation (%s%.8x)\r\n%s"
System_SysConst_SVarTypeOutOfRangeWithPrefix, L"Custom variant type (%s%.4x) is out of range"
System_SysConst_SVarTypeAlreadyUsedWithPrefix, L"Custom variant type (%s%.4x) already used by %s"
System_SysConst_SVarTypeNotUsableWithPrefix, L"Custom variant type (%s%.4x) is not usable"
System_SysConst_SRangeError, L"Range check error"
System_SysConst_SIntOverflow, L"Integer overflow"
System_SysConst_SInvalidOp, L"Invalid floating point operation"
System_SysConst_SZeroDivide, L"Floating point division by zero"
System_SysConst_SOverflow, L"Floating point overflow"
System_SysConst_SUnderflow, L"Floating point underflow"
System_SysConst_SInvalidPointer, L"Invalid pointer operation"
System_SysConst_SInvalidCast, L"Invalid class typecast"
System_SysConst_SAccessViolationArg3, L"Access violation at address %p. %s of address %p"
System_SysConst_SAccessViolationNoArg, L"Access violation"
System_SysConst_SStackOverflow, L"Stack overflow"
System_SysConst_SControlC, L"Control-C hit"
System_SysConst_SPrivilege, L"Privileged instruction"
System_SysConst_SException, L"Exception %s in module %s at %p.\r\n%s%s\r\n"
System_SysConst_SExceptTitle, L"Application Error"
System_SysConst_SInvalidFormat, L"Format '%s' invalid or incompatible with argument"
System_SysConst_SUnknown, L"<unknown>"
System_SysConst_SInvalidInteger, L"'%s' is not a valid integer value"
System_SysConst_SInvalidTimeStamp, L"'%d.%d' is not a valid timestamp"
System_SysConst_SInvalidGUID, L"'%s' is not a valid GUID value"
System_SysConst_STimeEncodeError, L"Invalid argument to time encode"
System_SysConst_SDateEncodeError, L"Invalid argument to date encode"
System_SysConst_SOutOfMemory, L"Out of memory"
System_SysConst_SInOutError, L"I/O error %d"
System_SysConst_SFileNotFound, L"File not found"
System_SysConst_SInvalidUnknownFilename, L"Invalid filename"
System_SysConst_STooManyOpenFiles, L"Too many open files"
System_SysConst_SAccessDenied, L"File access denied"
System_SysConst_SEndOfFile, L"Read beyond end of file"
System_SysConst_SDiskFull, L"Disk full"
System_SysConst_SInvalidInput, L"Invalid numeric input"
System_SysConst_SDivByZero, L"Division by zero"
END
 
/* c:\program files (x86)\embarcadero\studio\23.0\lib\Win32\release\Controls.res */
/* c:\program files (x86)\embarcadero\studio\23.0\lib\Win32\release\Dialogs.res */
/* c:\program files (x86)\embarcadero\studio\23.0\lib\Win32\release\Buttons.res */
/* c:\program files (x86)\embarcadero\studio\23.0\lib\Win32\release\SPIN.RES */
/* D:\SVN\SpaceMission\LevSplash.DFM */
/* D:\SVN\SpaceMission\LevSpeicherung.DFM */
/* D:\SVN\SpaceMission\ComInfo.DFM */
/* D:\SVN\SpaceMission\LevOptions.DFM */
/* D:\SVN\SpaceMission\ComHilfe.dfm */
/* D:\SVN\SpaceMission\LevMain.DFM */
/* D:\SVN\SpaceMission\LevEdit.RES */
/* D:\SVN\SpaceMission\LevEdit.drf */
/ENU/LevMain.dfn
0,0 → 1,1482
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\LevMain.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\LevMain.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4303009259</prop>
<prop prop-type="OrigDateTime">45407.694375</prop>
<prop prop-type="XlatDateTime">45407.6943518519</prop>
<prop prop-type="Translated">285</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:MainForm.Left" resname="O:MainForm.Left">
<source>217</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">0</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Top" resname="O:MainForm.Top">
<source>117</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">1</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.BorderIcons" resname="O:MainForm.BorderIcons">
<source>[biSystemMenu, biMinimize]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.BorderStyle" resname="O:MainForm.BorderStyle">
<source>bsSingle</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">3</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Caption" resname="O:MainForm.Caption">
<source>'Leveleditor'</source>
<target>'Level Editor'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">1</prop><prop prop-type="Order">4</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.ClientHeight" resname="O:MainForm.ClientHeight">
<source>517</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.ClientWidth" resname="O:MainForm.ClientWidth">
<source>741</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Color" resname="O:MainForm.Color">
<source>clBtnFace</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Charset" resname="O:MainForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Color" resname="O:MainForm.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Height" resname="O:MainForm.Font.Height">
<source>-12</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Name" resname="O:MainForm.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Font.Style" resname="O:MainForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.KeyPreview" resname="O:MainForm.KeyPreview">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Menu" resname="O:MainForm.Menu">
<source>MainMenu</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Position" resname="O:MainForm.Position">
<source>poScreenCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.Scaled" resname="O:MainForm.Scaled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnClose" resname="O:MainForm.OnClose">
<source>FormClose</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnCloseQuery" resname="O:MainForm.OnCloseQuery">
<source>FormCloseQuery</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnCreate" resname="O:MainForm.OnCreate">
<source>FormCreate</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnDestroy" resname="O:MainForm.OnDestroy">
<source>FormDestroy</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">20</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnMouseMove" resname="O:MainForm.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">21</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.OnShow" resname="O:MainForm.OnShow">
<source>FormShow</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">22</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.TextHeight" resname="O:MainForm.TextHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">23</prop><prop prop-type="Type">TMainForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:ScrollBar.Left" resname="O:MainForm.O:ScrollBar.Left">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">24</prop><prop prop-type="Type">TScrollBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:ScrollBar.Top" resname="O:MainForm.O:ScrollBar.Top">
<source>480</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">25</prop><prop prop-type="Type">TScrollBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:ScrollBar.Width" resname="O:MainForm.O:ScrollBar.Width">
<source>632</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">26</prop><prop prop-type="Type">TScrollBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:ScrollBar.Height" resname="O:MainForm.O:ScrollBar.Height">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">27</prop><prop prop-type="Type">TScrollBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:ScrollBar.Max" resname="O:MainForm.O:ScrollBar.Max">
<source>1200</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">28</prop><prop prop-type="Type">TScrollBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:ScrollBar.PageSize" resname="O:MainForm.O:ScrollBar.PageSize">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939352</prop><prop prop-type="Status">6</prop><prop prop-type="Order">29</prop><prop prop-type="Type">TScrollBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:ScrollBar.TabOrder" resname="O:MainForm.O:ScrollBar.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">30</prop><prop prop-type="Type">TScrollBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:ScrollBar.OnScroll" resname="O:MainForm.O:ScrollBar.OnScroll">
<source>ScrollBarScroll</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">31</prop><prop prop-type="Type">TScrollBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:StatusBar.Left" resname="O:MainForm.O:StatusBar.Left">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">32</prop><prop prop-type="Type">TStatusBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:StatusBar.Top" resname="O:MainForm.O:StatusBar.Top">
<source>498</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">33</prop><prop prop-type="Type">TStatusBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:StatusBar.Width" resname="O:MainForm.O:StatusBar.Width">
<source>741</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">34</prop><prop prop-type="Type">TStatusBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:StatusBar.Height" resname="O:MainForm.O:StatusBar.Height">
<source>19</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">35</prop><prop prop-type="Type">TStatusBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:StatusBar.Panels" resname="O:MainForm.O:StatusBar.Panels">
<source>&lt;&gt;</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">36</prop><prop prop-type="Type">TStatusBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:StatusBar.SimplePanel" resname="O:MainForm.O:StatusBar.SimplePanel">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">37</prop><prop prop-type="Type">TStatusBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:StatusBar.OnMouseMove" resname="O:MainForm.O:StatusBar.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">38</prop><prop prop-type="Type">TStatusBar</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.Left" resname="O:MainForm.O:SidePanel.Left">
<source>632</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">39</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.Top" resname="O:MainForm.O:SidePanel.Top">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">40</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.Width" resname="O:MainForm.O:SidePanel.Width">
<source>109</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">41</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.Height" resname="O:MainForm.O:SidePanel.Height">
<source>498</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">42</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.Align" resname="O:MainForm.O:SidePanel.Align">
<source>alRight</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">43</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.BevelOuter" resname="O:MainForm.O:SidePanel.BevelOuter">
<source>bvNone</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">44</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.TabOrder" resname="O:MainForm.O:SidePanel.TabOrder">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">45</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel1.Left" resname="O:MainForm.O:SidePanel.O:Bevel1.Left">
<source>4</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">46</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel1.Top" resname="O:MainForm.O:SidePanel.O:Bevel1.Top">
<source>200</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">47</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel1.Width" resname="O:MainForm.O:SidePanel.O:Bevel1.Width">
<source>97</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">48</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel1.Height" resname="O:MainForm.O:SidePanel.O:Bevel1.Height">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">49</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel1.Shape" resname="O:MainForm.O:SidePanel.O:Bevel1.Shape">
<source>bsBottomLine</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">50</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel2.Left" resname="O:MainForm.O:SidePanel.O:Bevel2.Left">
<source>4</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">51</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel2.Top" resname="O:MainForm.O:SidePanel.O:Bevel2.Top">
<source>392</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">52</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel2.Width" resname="O:MainForm.O:SidePanel.O:Bevel2.Width">
<source>97</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">53</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel2.Height" resname="O:MainForm.O:SidePanel.O:Bevel2.Height">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">54</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel2.Shape" resname="O:MainForm.O:SidePanel.O:Bevel2.Shape">
<source>bsBottomLine</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">55</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel3.Left" resname="O:MainForm.O:SidePanel.O:Bevel3.Left">
<source>4</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">56</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel3.Top" resname="O:MainForm.O:SidePanel.O:Bevel3.Top">
<source>320</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">57</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel3.Width" resname="O:MainForm.O:SidePanel.O:Bevel3.Width">
<source>97</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">58</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel3.Height" resname="O:MainForm.O:SidePanel.O:Bevel3.Height">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">59</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Bevel3.Shape" resname="O:MainForm.O:SidePanel.O:Bevel3.Shape">
<source>bsBottomLine</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">60</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Left" resname="O:MainForm.O:SidePanel.O:LivesLabel.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">61</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Top" resname="O:MainForm.O:SidePanel.O:LivesLabel.Top">
<source>332</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">62</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Width" resname="O:MainForm.O:SidePanel.O:LivesLabel.Width">
<source>33</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">63</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Height" resname="O:MainForm.O:SidePanel.O:LivesLabel.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">64</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Caption" resname="O:MainForm.O:SidePanel.O:LivesLabel.Caption">
<source>'Leben:'</source>
<target>'Lifes:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">65</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Font.Charset" resname="O:MainForm.O:SidePanel.O:LivesLabel.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">66</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Font.Color" resname="O:MainForm.O:SidePanel.O:LivesLabel.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">67</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Font.Height" resname="O:MainForm.O:SidePanel.O:LivesLabel.Font.Height">
<source>-12</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">68</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Font.Name" resname="O:MainForm.O:SidePanel.O:LivesLabel.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">69</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.Font.Style" resname="O:MainForm.O:SidePanel.O:LivesLabel.Font.Style">
<source>[fsUnderline]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">70</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.ParentFont" resname="O:MainForm.O:SidePanel.O:LivesLabel.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">71</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesLabel.OnMouseMove" resname="O:MainForm.O:SidePanel.O:LivesLabel.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">72</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Left" resname="O:MainForm.O:SidePanel.O:SelLabel.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">73</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Top" resname="O:MainForm.O:SidePanel.O:SelLabel.Top">
<source>4</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">74</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Width" resname="O:MainForm.O:SidePanel.O:SelLabel.Width">
<source>43</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">75</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Height" resname="O:MainForm.O:SidePanel.O:SelLabel.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">76</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Caption" resname="O:MainForm.O:SidePanel.O:SelLabel.Caption">
<source>'Auswahl:'</source>
<target>'Selection:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">77</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Font.Charset" resname="O:MainForm.O:SidePanel.O:SelLabel.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">78</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Font.Color" resname="O:MainForm.O:SidePanel.O:SelLabel.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">79</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Font.Height" resname="O:MainForm.O:SidePanel.O:SelLabel.Font.Height">
<source>-12</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">80</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Font.Name" resname="O:MainForm.O:SidePanel.O:SelLabel.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">81</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.Font.Style" resname="O:MainForm.O:SidePanel.O:SelLabel.Font.Style">
<source>[fsUnderline]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">82</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.ParentFont" resname="O:MainForm.O:SidePanel.O:SelLabel.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">83</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelLabel.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SelLabel.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">84</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Left" resname="O:MainForm.O:SidePanel.O:SLabel0.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">85</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Top" resname="O:MainForm.O:SidePanel.O:SLabel0.Top">
<source>400</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">86</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Width" resname="O:MainForm.O:SidePanel.O:SLabel0.Width">
<source>84</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">87</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Height" resname="O:MainForm.O:SidePanel.O:SLabel0.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">88</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Caption" resname="O:MainForm.O:SidePanel.O:SLabel0.Caption">
<source>'Level-Information:'</source>
<target>'Level information:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">89</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Font.Charset" resname="O:MainForm.O:SidePanel.O:SLabel0.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">90</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Font.Color" resname="O:MainForm.O:SidePanel.O:SLabel0.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">91</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Font.Height" resname="O:MainForm.O:SidePanel.O:SLabel0.Font.Height">
<source>-12</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">92</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Font.Name" resname="O:MainForm.O:SidePanel.O:SLabel0.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">93</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.Font.Style" resname="O:MainForm.O:SidePanel.O:SLabel0.Font.Style">
<source>[fsUnderline]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">94</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.ParentFont" resname="O:MainForm.O:SidePanel.O:SLabel0.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">95</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel0.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SLabel0.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">96</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1a.Left" resname="O:MainForm.O:SidePanel.O:SLabel1a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">97</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1a.Top" resname="O:MainForm.O:SidePanel.O:SLabel1a.Top">
<source>424</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">98</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1a.Width" resname="O:MainForm.O:SidePanel.O:SLabel1a.Width">
<source>47</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">99</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1a.Height" resname="O:MainForm.O:SidePanel.O:SLabel1a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">100</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1a.Caption" resname="O:MainForm.O:SidePanel.O:SLabel1a.Caption">
<source>'Einheiten:'</source>
<target>'Units:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">101</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1a.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SLabel1a.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">102</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1b.Left" resname="O:MainForm.O:SidePanel.O:SLabel1b.Left">
<source>76</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">103</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1b.Top" resname="O:MainForm.O:SidePanel.O:SLabel1b.Top">
<source>424</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">104</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1b.Width" resname="O:MainForm.O:SidePanel.O:SLabel1b.Width">
<source>6</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">105</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1b.Height" resname="O:MainForm.O:SidePanel.O:SLabel1b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">106</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1b.Caption" resname="O:MainForm.O:SidePanel.O:SLabel1b.Caption">
<source>'0'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">107</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel1b.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SLabel1b.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">108</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2a.Left" resname="O:MainForm.O:SidePanel.O:SLabel2a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">109</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2a.Top" resname="O:MainForm.O:SidePanel.O:SLabel2a.Top">
<source>440</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">110</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2a.Width" resname="O:MainForm.O:SidePanel.O:SLabel2a.Width">
<source>26</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">111</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2a.Height" resname="O:MainForm.O:SidePanel.O:SLabel2a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">112</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2a.Caption" resname="O:MainForm.O:SidePanel.O:SLabel2a.Caption">
<source>'Boss:'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">113</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2a.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SLabel2a.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">114</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2b.Left" resname="O:MainForm.O:SidePanel.O:SLabel2b.Left">
<source>76</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">115</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2b.Top" resname="O:MainForm.O:SidePanel.O:SLabel2b.Top">
<source>440</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">116</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2b.Width" resname="O:MainForm.O:SidePanel.O:SLabel2b.Width">
<source>22</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">117</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2b.Height" resname="O:MainForm.O:SidePanel.O:SLabel2b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">118</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2b.Caption" resname="O:MainForm.O:SidePanel.O:SLabel2b.Caption">
<source>'Nein'</source>
<target>'No'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">119</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel2b.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SLabel2b.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">120</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3a.Left" resname="O:MainForm.O:SidePanel.O:SLabel3a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">121</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3a.Top" resname="O:MainForm.O:SidePanel.O:SLabel3a.Top">
<source>456</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">122</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3a.Width" resname="O:MainForm.O:SidePanel.O:SLabel3a.Width">
<source>32</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">123</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3a.Height" resname="O:MainForm.O:SidePanel.O:SLabel3a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">124</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3a.Caption" resname="O:MainForm.O:SidePanel.O:SLabel3a.Caption">
<source>'Größe:'</source>
<target>'Size:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">125</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3a.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SLabel3a.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">126</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3b.Left" resname="O:MainForm.O:SidePanel.O:SLabel3b.Left">
<source>76</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">127</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3b.Top" resname="O:MainForm.O:SidePanel.O:SLabel3b.Top">
<source>456</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">128</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3b.Width" resname="O:MainForm.O:SidePanel.O:SLabel3b.Width">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">129</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3b.Height" resname="O:MainForm.O:SidePanel.O:SLabel3b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">130</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3b.Caption" resname="O:MainForm.O:SidePanel.O:SLabel3b.Caption">
<source>'1200'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">131</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel3b.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SLabel3b.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">132</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Left" resname="O:MainForm.O:SidePanel.O:SLabel4a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">133</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Top" resname="O:MainForm.O:SidePanel.O:SLabel4a.Top">
<source>480</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">134</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Width" resname="O:MainForm.O:SidePanel.O:SLabel4a.Width">
<source>60</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">135</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Height" resname="O:MainForm.O:SidePanel.O:SLabel4a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">136</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Caption" resname="O:MainForm.O:SidePanel.O:SLabel4a.Caption">
<source>'Gespeichert:'</source>
<target>'Saved:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">137</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Font.Charset" resname="O:MainForm.O:SidePanel.O:SLabel4a.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">138</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Font.Color" resname="O:MainForm.O:SidePanel.O:SLabel4a.Font.Color">
<source>150</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">139</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Font.Height" resname="O:MainForm.O:SidePanel.O:SLabel4a.Font.Height">
<source>-12</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">140</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Font.Name" resname="O:MainForm.O:SidePanel.O:SLabel4a.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">141</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.Font.Style" resname="O:MainForm.O:SidePanel.O:SLabel4a.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">142</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.ParentFont" resname="O:MainForm.O:SidePanel.O:SLabel4a.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">143</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4a.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SLabel4a.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">144</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Left" resname="O:MainForm.O:SidePanel.O:SLabel4b.Left">
<source>76</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">145</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Top" resname="O:MainForm.O:SidePanel.O:SLabel4b.Top">
<source>480</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">146</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Width" resname="O:MainForm.O:SidePanel.O:SLabel4b.Width">
<source>22</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">147</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Height" resname="O:MainForm.O:SidePanel.O:SLabel4b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">148</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Caption" resname="O:MainForm.O:SidePanel.O:SLabel4b.Caption">
<source>'Nein'</source>
<target>'No'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">149</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Font.Charset" resname="O:MainForm.O:SidePanel.O:SLabel4b.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">150</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Font.Color" resname="O:MainForm.O:SidePanel.O:SLabel4b.Font.Color">
<source>150</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">151</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Font.Height" resname="O:MainForm.O:SidePanel.O:SLabel4b.Font.Height">
<source>-12</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">152</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Font.Name" resname="O:MainForm.O:SidePanel.O:SLabel4b.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">153</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.Font.Style" resname="O:MainForm.O:SidePanel.O:SLabel4b.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">154</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.ParentFont" resname="O:MainForm.O:SidePanel.O:SLabel4b.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">155</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SLabel4b.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SLabel4b.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">156</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.Left" resname="O:MainForm.O:SidePanel.O:Enemy1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">157</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.Top" resname="O:MainForm.O:SidePanel.O:Enemy1.Top">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">158</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.Width" resname="O:MainForm.O:SidePanel.O:Enemy1.Width">
<source>93</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">159</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.Height" resname="O:MainForm.O:SidePanel.O:Enemy1.Height">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">160</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.Caption" resname="O:MainForm.O:SidePanel.O:Enemy1.Caption">
<source>'Angreifer Typ 1'</source>
<target>'Attacker type 1'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">161</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.Checked" resname="O:MainForm.O:SidePanel.O:Enemy1.Checked">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">162</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.TabOrder" resname="O:MainForm.O:SidePanel.O:Enemy1.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">163</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.TabStop" resname="O:MainForm.O:SidePanel.O:Enemy1.TabStop">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">164</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.OnClick" resname="O:MainForm.O:SidePanel.O:Enemy1.OnClick">
<source>EnemyClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">165</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy1.OnMouseMove" resname="O:MainForm.O:SidePanel.O:Enemy1.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">166</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy2.Left" resname="O:MainForm.O:SidePanel.O:Enemy2.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">167</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy2.Top" resname="O:MainForm.O:SidePanel.O:Enemy2.Top">
<source>44</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">168</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy2.Width" resname="O:MainForm.O:SidePanel.O:Enemy2.Width">
<source>93</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">169</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy2.Height" resname="O:MainForm.O:SidePanel.O:Enemy2.Height">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">170</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy2.Caption" resname="O:MainForm.O:SidePanel.O:Enemy2.Caption">
<source>'Angreifer Typ 2'</source>
<target>'Attacker type 2'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">171</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy2.TabOrder" resname="O:MainForm.O:SidePanel.O:Enemy2.TabOrder">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">172</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy2.OnClick" resname="O:MainForm.O:SidePanel.O:Enemy2.OnClick">
<source>EnemyClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">173</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy2.OnMouseMove" resname="O:MainForm.O:SidePanel.O:Enemy2.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">174</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy3.Left" resname="O:MainForm.O:SidePanel.O:Enemy3.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">175</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy3.Top" resname="O:MainForm.O:SidePanel.O:Enemy3.Top">
<source>64</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">176</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy3.Width" resname="O:MainForm.O:SidePanel.O:Enemy3.Width">
<source>93</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">177</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy3.Height" resname="O:MainForm.O:SidePanel.O:Enemy3.Height">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">178</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy3.Caption" resname="O:MainForm.O:SidePanel.O:Enemy3.Caption">
<source>'Angreifer Typ 3'</source>
<target>'Attacker type 3'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">179</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy3.TabOrder" resname="O:MainForm.O:SidePanel.O:Enemy3.TabOrder">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">180</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy3.OnClick" resname="O:MainForm.O:SidePanel.O:Enemy3.OnClick">
<source>EnemyClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">181</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy3.OnMouseMove" resname="O:MainForm.O:SidePanel.O:Enemy3.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">182</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy4.Left" resname="O:MainForm.O:SidePanel.O:Enemy4.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">183</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy4.Top" resname="O:MainForm.O:SidePanel.O:Enemy4.Top">
<source>84</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">184</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy4.Width" resname="O:MainForm.O:SidePanel.O:Enemy4.Width">
<source>55</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">185</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy4.Height" resname="O:MainForm.O:SidePanel.O:Enemy4.Height">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">186</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy4.Caption" resname="O:MainForm.O:SidePanel.O:Enemy4.Caption">
<source>'Meteor'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">187</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy4.TabOrder" resname="O:MainForm.O:SidePanel.O:Enemy4.TabOrder">
<source>3</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">188</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy4.OnClick" resname="O:MainForm.O:SidePanel.O:Enemy4.OnClick">
<source>EnemyClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">189</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy4.OnMouseMove" resname="O:MainForm.O:SidePanel.O:Enemy4.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">190</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy5.Left" resname="O:MainForm.O:SidePanel.O:Enemy5.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">191</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy5.Top" resname="O:MainForm.O:SidePanel.O:Enemy5.Top">
<source>104</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">192</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy5.Width" resname="O:MainForm.O:SidePanel.O:Enemy5.Width">
<source>44</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">193</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy5.Height" resname="O:MainForm.O:SidePanel.O:Enemy5.Height">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">194</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy5.Caption" resname="O:MainForm.O:SidePanel.O:Enemy5.Caption">
<source>'UFO'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">1</prop><prop prop-type="Order">195</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy5.TabOrder" resname="O:MainForm.O:SidePanel.O:Enemy5.TabOrder">
<source>4</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">196</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy5.OnClick" resname="O:MainForm.O:SidePanel.O:Enemy5.OnClick">
<source>EnemyClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">197</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy5.OnMouseMove" resname="O:MainForm.O:SidePanel.O:Enemy5.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">198</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy6.Left" resname="O:MainForm.O:SidePanel.O:Enemy6.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">199</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy6.Top" resname="O:MainForm.O:SidePanel.O:Enemy6.Top">
<source>124</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">200</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy6.Width" resname="O:MainForm.O:SidePanel.O:Enemy6.Width">
<source>53</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334939815</prop><prop prop-type="Status">6</prop><prop prop-type="Order">201</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy6.Height" resname="O:MainForm.O:SidePanel.O:Enemy6.Height">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">202</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy6.Caption" resname="O:MainForm.O:SidePanel.O:Enemy6.Caption">
<source>'UFO 2'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">1</prop><prop prop-type="Order">203</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy6.TabOrder" resname="O:MainForm.O:SidePanel.O:Enemy6.TabOrder">
<source>5</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">204</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy6.OnClick" resname="O:MainForm.O:SidePanel.O:Enemy6.OnClick">
<source>EnemyClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">205</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy6.OnMouseMove" resname="O:MainForm.O:SidePanel.O:Enemy6.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">206</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy7.Left" resname="O:MainForm.O:SidePanel.O:Enemy7.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">207</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy7.Top" resname="O:MainForm.O:SidePanel.O:Enemy7.Top">
<source>144</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">208</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy7.Width" resname="O:MainForm.O:SidePanel.O:Enemy7.Width">
<source>45</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">209</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy7.Height" resname="O:MainForm.O:SidePanel.O:Enemy7.Height">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">210</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy7.Caption" resname="O:MainForm.O:SidePanel.O:Enemy7.Caption">
<source>'Boss'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">1</prop><prop prop-type="Order">211</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy7.TabOrder" resname="O:MainForm.O:SidePanel.O:Enemy7.TabOrder">
<source>6</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">212</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy7.OnClick" resname="O:MainForm.O:SidePanel.O:Enemy7.OnClick">
<source>EnemyClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">213</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy7.OnMouseMove" resname="O:MainForm.O:SidePanel.O:Enemy7.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">214</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.Left" resname="O:MainForm.O:SidePanel.O:SelPanel.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">215</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.Top" resname="O:MainForm.O:SidePanel.O:SelPanel.Top">
<source>216</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">216</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.Width" resname="O:MainForm.O:SidePanel.O:SelPanel.Width">
<source>89</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">217</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.Height" resname="O:MainForm.O:SidePanel.O:SelPanel.Height">
<source>89</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">218</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.Color" resname="O:MainForm.O:SidePanel.O:SelPanel.Color">
<source>clWhite</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">219</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.TabOrder" resname="O:MainForm.O:SidePanel.O:SelPanel.TabOrder">
<source>7</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">220</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SelPanel.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">221</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Left" resname="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Left">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">222</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Top" resname="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Top">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">223</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Width" resname="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Width">
<source>697</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">224</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Height" resname="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Height">
<source>88</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">225</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.AutoSize" resname="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.AutoSize">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">226</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Picture.Data" resname="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.Picture.Data">
<source>07544269746D617056CF0200424D56CF0200000000003600000028000000B902000058000000010018000000000020CF0200120B0000120B00000000000000000000FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFFD0D9FF93A9FF5B7AFF3258FF1844FF113DFF113EFF113EFF113EFF113EFF113EFF113DFF113DFF234CFF4266FF728CFFA9BAFFF3F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F7FFA2B5FF4D71FF0E3EFF0135FF0032FF0032FF0135FF0236FF0236FF0236FF0236FF0236FF0236FF0236FF0236FF0034FF0033FF002FFF0538FF2A56FF7491FFC5D2FFFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9495A50000330000330000330000330000330000330000330000330000330000330000330000330000330000339495A5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF1FF8AA5FF3360FF0038FF0036FF003AFF013BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF013AFF0038FF0033FF0C42FF557BFFB8C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB58587A58587A58587A31315A00003300003300003300004800004800004800004800004800004800004800004800004800004800004831316358587A58587A58587A58587A757489FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6B98730042080042080042080042080042084A7B52FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE689AFF0052FA0052FA0052FA0052FA0052FA4384FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFC9D6FF557FFF013FFF003BFF0140FF0241FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0241FF0241FF003EFF003AFF0743FF88A5FFECF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE868996000033000033000033000033000033000033000048000048000048000048000048000048000048000048000048000048000048000048000048000033000033000033000033292952FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDA5B58CA5B58CA5B58CA5B58C4574460042080042080042080042080042082963318CAD948CAD948CAD948CAD94DADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFA8CB5FF8CB5FF8CB5FF8CB5FF3377FE0052FA0052FA0052FA0052FA0052FA266AFE8CB5FF8CB5FF8CB5FF8CB5FFD9E7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FBFF7EA2FF0D4EFF0043FF0146FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0045FF0041FF346AFFD7E2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE868996000033000033000033000033000033000033000048000048000048000048000048000048000048000048000048000048000048000048000048000048000048000033000033292952FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECAD6C8315200315200315200315200174A00004208004208004208004208004208004208004208004208004208004208A5BAA7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAA5BDFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9F0FF6492FF0045FF004CFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF0048FF1056FFA0BDFFFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB000033000033000048000048000048000033000033000048000048000048000048000048000058000058000058000058000058000058000058000058000058000058000048000048000048000048000048000033DADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE526B22496310496310496310425A16315200315200315200315200174A00004208004208004208004208004208004208004208004208004208004208085218185321185321185321185321F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE266AFE1663FE1663FE1663FE1663FE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA105AFE1663FE1663FE1663FE1663FEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3EDFF2D72FF0050FF0254FF0255FF0255FF0255FF0255FF0255FF0255FF0255FF0255FF0254FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0053FF0255FF0255FF0255FF0255FF0255FF0255FF0255FF0255FF0255FF0051FF0152FF8FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB58587A00004800004800004800004800004800004800004800004800004800004800005800005800005800005800005800005800005800005800005800005800005800005800005800005800005800005800004800003358587AADADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBC6A6BBC6A6BBC6A6315200315200315200315200315200315200315200315200315200174A000042080042080042080042080042080042080042080042080042080042080042080042080042082963315A8463F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9C6FFA9C6FFA9C6FF105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFE538CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF4FF4084FF0057FF005BFF015CFF015CFF015CFF015CFF015CFF015CFF015CFF015CFF015BFF025CFF1065FF1065FF1065FF1065FF1065FF1065FF1065FF1065FF1065FF1065FF1065FF0961FF015BFF015CFF015CFF015CFF015CFF015CFF015CFF015CFF015CFF015CFF0059FF065CFF95BBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEC6C8D658587A00003300005800005800005800005800005800004800004800004800004800004800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00005800005800005800004800003300003358587ACACACACACACAEAEEFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EF315200315200315200315200315200315200315200315200315200315200315200315200174A000042080042080042080042080042080042080042080042080042080042080042080042080042087BA984FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FC0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA77A5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF4FF5798FF005EFF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0060FF0F6CFFE2EDFFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FF78ADFF0059FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0061FF0260FFA5C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE18184200004800004800005800005800005800005800005800004800004800004800004800005800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D000058000058000058000048000033000033000033000033000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9CA584547331315200315200315200315200315200315200315200315200315200315200315200315200174A000042080042080042080042080042080042080042080042080042080042080042080042080C2B05114816326639F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF3377FE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9125AED3377FEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFF72ADFF0063FF016AFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF0068FF1074FFF4F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82B6FF0060FF016BFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF0067FF056BFFE1EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE948C8C5A635A5A635A4E4E4E4E4E4E948C8CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE948C8C5A635A5A635A4E4E4E4E4E4E948C8CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE948C8C5A635A5A635A4E4E4E4E4E4E948C8CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE18184200004800004800005800005800005800005800005800004800004800004800004800005800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D000058000058000058000048000048000033000033000033000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB7DBB96B8B38255A00315200315200315200315200315200315200315200315200315200315200315200315200174A000042080042080042080042080042080042080042080042080042080042080042080042080C2B05004208004208B5C6B5D8EAD9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE538CFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9004AE90052FAB5CEFFD9E7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5D7FF0573FF0072FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0071FF107CFFF0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80B9FF0069FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF006EFF3D95FFF5FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8686865A635A6E6E6E6E6E6E5A635A4E4E4E969696F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8686865A635A6E6E6E6E6E6E5A635A4E4E4E969696F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8686865A635A6E6E6E6E6E6E5A635A4E4E4E969696F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB73739473739400104A00004800005800006D00006D00006D00005800005800005800005800004800004800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00005800005800005800005800004800004800003300003300003358587AADADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECEDED6008400008400008400315200315200315200315200315200315200315200315200315200315200315200315200174A000042080042080042080042080042080042080042080042080042080042080042080042080C2B05004208004208004208638C65FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9E7FE266AFE266AFE266AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9004AE90052FA0052FA689AFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF5FF1C89FF0077FF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF0079FF1083FFF0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80BDFF0072FF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF0076FF92C7FFFCFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E8686868686866E6E6E6E6E6E6E6E6E5A635A5A635AA8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E8686868686866E6E6E6E6E6E6E6E6E5A635A5A635AA8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E8686868686866E6E6E6E6E6E6E6E6E5A635A5A635AA8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB58587A00003300003300004800005800006D00006D00006D00006D00006D00005800005800005800004800004800005800005800006D00005800005800005800006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800004800004800004800003300003300003358587ADADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE75AF7442A542008400008400008400087401255A00315200315200315200315200315200315200315200315200315200315200244A00244A000042080042080042080042080042080042080042080042080042080042080C2B050042080042080042080042081853214A7B52D8EAD9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8CB5FF5A94FF266AFE266AFE266AFE1663FE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AE9004AE9004AE9004AF70052FA0052FA1663FE4384FED9E7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83C2FF007BFF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0081FF108AFFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C1FF0079FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0081FF0483FFCEE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B948C8C6E6E6E7B847B7B847B7B847B5A635A5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B948C8C6E6E6E7B847B7B847B7B847B5A635A5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B948C8C6E6E6E7B847B7B847B7B847B5A635A5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00006D00005800005800005800005800005800005800006D00006D00005800005800006D00006D00005800006D00006D00006D000058000058000058000058000058000058000058000058000048000048000048000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED8EAD92E962E008400008400008400008400008400087401255A003152003152003152003152003152003152003152003152003152003152003152000042080042080042080042080042080042080042080042080042080C2B050C2B05004208004208004208004208004208004208ADC6B5EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FCD9E7FE538CFE266AFE266AFE266AFE266AFE266AFE1663FE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AE9004AE90052FA0052FA0052FA0052FA0052FA0052FAA9C6FFEAEEFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFCACACA7B847B7B847B0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E1018212118212118212118212118210E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E6E6E6EB5ADADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4F2FF1D96FF0088FF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF0088FF1091FFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C5FF0082FF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF0085FF59B2FFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED969696948C8C6E6E6E7B847B7B847B7B847B8686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED969696948C8C6E6E6E7B847B7B847B7B847B8686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED969696948C8C6E6E6E7B847B7B847B7B847B8686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD29295200004800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800006D00006D00005800005800006D00006D000058000058000048000048000048000058000058000058000058000058000058000058000058000058000048292952292952757489FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA7D6AA0084000084000084000084000084000084000084000084000084003152003152003152003152003152003152003152003152003152003152003152000042080042080042080042080042080042080042080042080042080C2B050C2B05004208004208004208004208004208004208004208397342FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBDD6FF266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AE9004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA3377FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDDADADB6E6E6E6E6E6E4E4E4E0E0F0E0E0F0E0E0F0E1018212118212118213030304239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030302118212118212118212118212118212118210E0F0E303030B5ADADF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFF60BBFF008DFF0192FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF008FFF1098FFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C9FF008AFF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0090FF0792FFD4EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696966E6E6E7B847B7B847B8686868686868686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696966E6E6E7B847B7B847B8686868686868686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696966E6E6E7B847B7B847B8686868686868686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800006D00006D00006D00005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800006D00006D00005800005800005800005800005800005800004800004800004800005800005800005800005800005800005800005800005800005800004800003300003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE75AF7442A542008400008400008400008400008400008400008400008400008400087401255A003152003152003152003152003152003152003152003152003152000042080042080042080042080042080042080042080042080C2B05004208004208004208004208004208004208004208004208004208185321638C65CEDED6FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8CB5FF689AFF266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE1663FE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9004AE9004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA1663FE689AFFCADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFEDEDED9696966E6E6E5A635A0E0F0E0E0F0E1018212118213030303030304239424239424239424239424239424239424239424239424239424239424239423030304239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030302118210E0F0E423942B5ADADFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1F3FF0599FF0097FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0096FF109EFFF0F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80CCFF0091FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0093FF79C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B7B847B8686868686868686868686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B7B847B8686868686868686868686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B7B847B8686868686868686868686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800005800004800004800004800005800005800005800005800005800006D00006D00005800005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE2E962E0084000084000084000084000084000084000084000084000084000084000084000874013152003152003152003152003152003152003152003152003152000042080042080042080042080042080042080042080042080C2B05004208004208004208004208004208004208004208004208004208004208004208A5BAA7F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE427BFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE1663FE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAA9C6FFEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDDADADBA8A8A85A635A4239420E0F0E2118213030303030304239424E4E4E4239424239424239424E4E4E4239424239424239424239424239424239424239424239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030301018210E0F0E5A635AA8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5DDFF009DFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF009DFF10A5FFF0F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80D0FF0098FF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF009DFF27ADFFF5FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B8686868686868686868686868686866E6E6E5A635A5A635AA8A8A8EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B8686868686868686868686868686866E6E6E5A635A5A635AA8A8A8EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B8686868686868686868686868686866E6E6E5A635A5A635AA8A8A8EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800005800006D00006D00006D00006D00006D00005800005800006D00006D00006D00006D00006D00006D00005800006D00006D00006D00005800005800005800005800005800005800005800004800004800004800004800004800005800005800006D00006D00006D00006D00005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE637A2D2D6B09008400008400008400008400008400008400008400008400008400008400008400008400255A003152003152003152003152003152003152003152000042080042080042080042080042080042080042080042080C2B050042080042080042080042080042080042080042080042080042080042080042080042082A542AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE266AFE105AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB4239422118213030304239424239424E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239424E4E4E4239424239424239424239424239424239424239424239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030301018210E0F0E4239426E6E6EDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FCFF3BBAFF00A3FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF00A3FF10ABFFF0FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80D3FF009FFF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF00A5FF04A5FFB2E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA868686868686868686868686868686857B7A6E6E6E5A635A5A635A5A635AEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA868686868686868686868686868686857B7A6E6E6E5A635A5A635A5A635AEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA868686868686868686868686868686857B7A6E6E6E5A635A5A635A5A635AEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800005800004800004800003300003300004800004800004800005800006D00006D00006D00006D00005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADECEA5AD84526B222D6B092D6B092D6B09087401008400008400008400008400008400008400008400008400008400087401255A00315200315200315200315200315200315200004208004208004208004208004208004208004208004208004208004208004208004208004208004208004208004208004208004208004208004208004208085218779C7BCAD6C8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE77A5FF105AFE105AFE1663FE1663FE1663FE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE1663FE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AE9004AE9004AE9004AF70052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA105AFE77A5FFCADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADB5B54E4E4E1018212118213030304239424239424E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239424239424239424239424239424239424239424239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030302118210E0F0E0E0F0E1018216E6E6EDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBF3FF05ACFF00A9FF00AAFF00AAFF00AAFF00AAFF00AAFF00A7FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A3FF00AAFFEFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77D2FF009EFF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A5FF00AAFF00AAFF00AAFF00AAFF00AAFF00AAFF00A7FF75D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBA8A8A88686864E4E4E4E4E4E5A635A857B7A5A635A5A635A5A635A33444ADE8484FF9494FF9494FF9494FF9494FF9494FF9494FF9494FFABABFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBA8A8A88686864E4E4E4E4E4E5A635A857B7A5A635A5A635A5A635A33444A8484B99292D19292D19292D19292D19292D19292D19292D1B3B3CDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBA8A8A88686864E4E4E4E4E4E5A635A857B7A5A635A5A635A5A635A33444A84DEDE94F6F994F6F994F6F994F6F994F6F994F6F994F6F9ABFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9495A59495A563638400003300005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800006D00006D00006D00006D00006D00006D00005800005800005800005800005800004800004800003300003300004800004800005800005800006D00006D00006D00006D0000580000580000480000483131639495A5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEAABD9C4963104963104963104963104963102D6B090084000084000084000084000084000084000084000084000084000084000874013152003152003152003152003152003152000042080042080042080042080042080042080C2B050C2B050042080042080042080042080042080042080042080042080042080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98B9FF0052FA0052FA0052FA0052FA0052FA105AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE1663FE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AE9004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA5A635A5A635A1018213030304239423030302118213030302118212118214239424239424239424239424239424239424239424239424239424239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030302118210E0F0E0E0F0E1018215A635ADADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEBFF00B0FF00AFFF00AFFF00AFFF00AFFF00AFFF00ADFF40C3FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D6FF87D9FFF8FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0EBFF80D4FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF78D4FF08B2FF00AFFF00AFFF00AFFF00AFFF00AFFF00AEFF47C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBB9696964239420E0F0E101821525A635A635A5A635A5A635A052136B51808D81605D81605D81605D81605D81605D81605D81605E74A39FFABABFFABABFFABABFFABABFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBB9696964239420E0F0E101821525A635A635A5A635A5A635A05213600006D21218421218421218421218421218421218421218455499994ADCE94ADCE94ADCEB3B3CDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBB9696964239420E0F0E101821525A635A635A5A635A5A635A05213600B1B100D8D800D8D800D8D800D8D800D8D800D8D800D8D831E7E7ABFFFFABFFFFABFFFFABFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300003300003300004800005800005800005800005800005800006D00006D00006D00006D00006D00006D00005800005800005800005800005800005800005800005800006D00006D00006D00006D00005800005800005800005800005800005800004800004800004800004800004800005800005800006D00006D00006D00006D00006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA5BAA72A542A425A16496310496310496310496310496310496310496310008400008400008400008400008400008400008400008400008400255A003152003152000C2B050E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0C2B050C2B050042080042080042080042080042080042080042080042080042080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA5BDFF266AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE105AFE0052FA0052FA05296F0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0035AF004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED9696964E4E4E4239425A635A5A635A4239424E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239423030302118212118211018211018213030303030303030304239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030301018210E0F0E0E0F0E1018215A635AF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9DE2FF00B4FF00B4FF00B4FF00B4FF00B4FF00B4FF00AFFF89DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10B9FF00B3FF00B4FF00B4FF00B4FF00B4FF00B3FF1ABDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB8689960017330017330017335A635A5A635A4E4E4E0C2849895A26A56B29A56B29A56B29A56B29A56B29A56B29A56B29B55221D81605D81605D81605DE2110FFABABFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB8689960017330017330017335A635A5A635A4E4E4E0C28494A358C5549995549995549995549995549995549995549994A358C040485040485040485212184B3B3CDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB8689960017330017330017335A635A5A635A4E4E4E0C28490C737306878706878706878706878706878706878706878706878700D8D800D8D800D8D800D8D8ABFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800005800005800005800005800006D00006D00006D00006D00006D00006D00005800005800005800005800005800005800005800005800006D00006D00006D00006D00005800005800005800005800005800005800004800004800004800004800004800005800005800006D00006D00006D00006D00006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEAABD9C2A542A425A16496310496310496310496310496310496310496310087401087401087401008400008400008400008400008400008400087401255A002431090E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0C2B050042080042080042080042080042080042080042080042080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98B9FF1663FE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA1663FE1663FE1663FE266AFE266AFE266AFE266AFE266AFE266AFE1663FE105AFE002D9400185200173300173300173300173300173300173300173305296F002D94002D940243CC0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA5A635A4E4E4E4E4E4E5A635A6E6E6E6E6E6E5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239423030302118212118212118211018212118213030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030301018210E0F0E0E0F0E303030423942CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84DDFF00B4FF00B8FF00B8FF00B8FF00B8FF00B8FF00B3FF80DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FBCFF00B7FF00B8FF00B8FF00B8FF00B8FF00B8FF0FBCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB9495A52139520017330521364E4E4E4E4E4E0C2849001733B79670DAB587DAB587DAB587DAB587D6AD7BC69C6BC69C6BB18650895A267B52188B51128B5112FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB9495A52139520017330521364E4E4E4E4E4E0C28490017335256B56F68D76F68D76F68D76F68D7847BEF9292D19292D18484B952427B432A7A432A7A432A7A040485FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB9495A52139520017330521364E4E4E4E4E4E0C28490017334E8E8952A59C52A59C52A59C52A59C52A59C4E8E894E8E894E8E890687870C737306878706878702FFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800005800005800005800006D00006D00006D00006D00005800005800005800005800005800005800004800004800004800005800005800005800006D00006D00006D00006D00006D00006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEAABD9C4963104963104963104963104963104963104963104963104963104963104963104963100084000084000084000084000084000084000084000874010E0F0E0E0F0E0C2B050C2B050C2B050C2B050C2B050C2B050C2B050E0F0E0E0F0E0E0F0E0C2B050042080042080042080042080042080042080042080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98B9FF0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFE266AFE266AFE266AFE266AFE266AFE266AFE2965D60E0F0E0521360D468D0D468D0D468D0D468D0D468D0D468D0D468D0013280E0F0E0E0F0E002D940052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA9696964239424239425A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424E4E4E4239424239424239424239423030303030303030301018212118211018210E0F0E1018212118213030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030302118211018210E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E101821303030969696FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3ECCFF00B9FF00BBFF00BBFF00BBFF00BBFF00BBFF00B6FF80DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FBFFF00BAFF00BBFF00BBFF00BBFF00BBFF00BBFF0FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDCACACACACACACACACA99A8AF2139520521360013280017330C28490C2849C6C8D6EDEDEDEDEDEDEDEDEDEDEDEDC6BDBD9C948C9C948C9C948C857B7A5242298B51128B5112FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDCACACACACACACACACA99A8AF2139520521360013280017330C28490C284905296F0404850404850404850404855549999495A59495A59495A575748939314A432A7A432A7A040485FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDCACACACACACACACACA99A8AF2139520521360013280017330C28490C28497BC6D694F6F994F6F994F6F994F6F994ADCE8494948494948494947B847B21395206878706878702FFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800004800004800005800005800005800005800005800006D00006D00006D00006D00005800005800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBC6A65973284963104469253266394469254963105973285973285973285973284473363266394963104963104963100874010084000084000C2B050E0F0E0C2B052147183266393266393266393266397BA98486BC8A86BC8A2A542A0C2B050E0F0E0C2B050042080042080042080042080042080042080042080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98B9FF105AFE0052FA105AFE266AFE105AFE0052FA105AFE105AFE105AFE105AFE1663FE266AFE266AFE266AFE266AFE266AFE266AFE266AFE05296F00132805296F0035AF0243CC0243CC0243CC0243CC1863EF216BEF216BEF0243CC002D940E0F0E002D940052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696965A635A4239425A635A5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239424239424239424239424239424239424239424239424239423030303030302118212118212118211018210E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E1018212118212118212118212118212118212118212118212118212118212118212118212118212118212118211018210E0F0E0E0F0E0E0F0E211821FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23C6FF00BCFF00BDFF00BDFF00BDFF00BDFF00BDFF00B8FF80DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC1FF00BCFF00BDFF00BDFF00BDFF00BDFF00BDFF0FC1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDADADBCACACACACACACACACACACACAADADBB2139520C28490C2849213952213952857B7A948C8C948C8C948C8C948C8CB79670CE9C5ACE9C5AB186508B51128B51128B51128B5112FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDADADBCACACACACACACACACACACACAADADBB2139520C28490C28492139522139527574898689968689968689968689968484B9847BEF847BEF6F68D7432A7A432A7A432A7A432A7A212184FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDADADBCACACACACACACACACACACACAADADBB2139520C28490C28492139522139527792858494948494948494948494944E8E89318C84318C84318C8406878706878706878706878702FFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00006D00005800005800005800005800004800004800004800004800004800004800005800005800005800005800006D00006D00006D00006D00005800005800005800005800005800005800005800005800006D00006D00006D00006D000058000058000058000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B69CA584597328526B18446925447336446925526B18597328597328597328597328547331447336526B184469254469252D6B090874010058000C2B050E0F0E1148162A542A397342779C7B779C7B779C7BB7DBB9ADDEB59CCEA55487563266390E0F0E0C2B05044610004208004208004208004208004208004208004208004208004208004208004208004208638C65ADC6B5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB5CEFF689AFF105AFE105AFE105AFE1663FE105AFE105AFE105AFE105AFE105AFE105AFE1663FE1663FE1663FE266AFE266AFE266AFE1863EF0944B70018520017330D468D0944B70243CC5284E75284E75284E7689AFF538CFE266AFE125AED0243CC00104A0035AF004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA689AFFA9C6FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696963030304E4E4E5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239424239424239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030301018210E0F0E0E0F0EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14C4FF00BEFF00BEFF00BEFF00BEFF00BEFF00BEFF00B9FF80DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC2FF00BDFF00BEFF00BEFF00BEFF00BEFF00BEFF0FC2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACACACACACACACACACACACACACA969696969696969696969696969696895A268B51128B51128B51128B51128B51128B51128B5112B53910FF0202FF0202FF0202FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACACACACACACACACACACACACACA9696969696969696969696969696964A358C432A7A432A7A432A7A432A7A432A7A432A7A432A7A31217B040485040485040485040485FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACACACACACACACACACACACACACA96969696969696969696969696969606878706878706878706878706878706878706878706878700B1B102FFFF02FFFF02FFFF02FFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00005800005800005800005800004800004800003300003300004800004800004800004800004800005800005800005800005800006D00006D00006D00006D00005800005800005800005800005800006D00006D00006D00006D00006D000058000058000058000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE597328597328597328597328597328597328597328597328597328597328597328597328597328597328597328547331397342597328425A160E0F0E0C2B05044610397342397342397342FEFEFEFEFEFEFEFEFEFEFEFEDEE9ED9CCEA59CCEA586BC8A114816114816114816004208004208004208004208004208004208004208004208004208004208004208004208004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE1663FE266AFE105AFE0944B70E0F0E0018520D468D0243CC0243CC0243CCFEFEFEFEFEFEFEFEFEFEFEFEBDD6FF266AFE266AFE266AFE004AE9004AE9004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E423942423942423942423942423942423942423942303030423942303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030101821FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11C3FF00BEFF00BEFF00BEFF00BEFF00BEFF00BEFF00B9FF80DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC2FF00BDFF00BEFF00BEFF00BEFF00BEFF00BEFF0FC2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACAADB5B5969696969696969696948C8C2118212118210C28490C2849D81605FF0202FF0202FF0202FF0202FF0202FF0202FF0202FF5252FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACAADB5B5969696969696969696948C8C2118212118210C28490C28490404850404850404850404850404850404850404850404855256B5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACAADB5B5969696969696969696948C8C2118212118210C28490C284900DEE702FFFF02FFFF02FFFF02FFFF02FFFF02FFFF02FFFF52FFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00005800005800005800005800004800004800003300003300004800004800004800004800004800005800005800005800005800006D00006D00006D00006D00005800005800005800005800005800006D00006D00006D00006D00006D000058000058000058000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE597328597328597328597328597328597328597328597328597328597328597328597328597328597328597328597328597328597328425A160E0F0E0C2B050C2B05044610779C7BDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECF7EC8CB5945487560C2B05114816114816004208004208004208004208004208004208004208004208004208004208004208004208004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE1663FE105AFE0944B70E0F0E05296F002D940243CC6B94E7CADBFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FCCADBFE689AFF3773EF0035AF0243CC004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3030304239425A635A5A635A5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239423030304239423030304239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030305A635AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1CC4FF00BCFF00BDFF00BDFF00BDFF00BDFF00BDFF00B8FF80DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC1FF00BCFF00BDFF00BDFF00BDFF00BDFF00BDFF0FC1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9663238B51128B5112655A565A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E8686869696969696969696969696969696969696966E6E6E4E4E4EBBBBBBBBBBBBB5ADAD0E0F0E0E0F0EEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE2556930D468D0D468D4A5A6B5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E8686869696969696969696969696969696969696966E6E6E4E4E4EBBBBBBBBBBBBB5ADAD0E0F0E0E0F0EEDEDEDFEFEFEEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0404850404850404854242635A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E8686869696969696969696969696969696969696966E6E6E4E4E4EBBBBBBBBBBBBB5ADAD0E0F0E0E0F0EEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00005800005800005800005800004800004800003300003300004800004800004800004800005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D000058000058000058000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE597328597328637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D597328425A160E0F0E0E0F0E0C2B050042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8CAD8C5487560C2B05114816114816004208004208004208004208004208004208004208004208004208004208004208004208004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE0944B70E0F0E05296F002D940243CC8CADE7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF3773EF002D940243CC004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE948C8C4E4E4E2118213030304239424E4E4E4E4E4E5A635A5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030302118210E0F0E868686FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FC7FF00B9FF00BBFF00BBFF00BBFF00BBFF00BBFF00B6FF80DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FBFFF00BAFF00BBFF00BBFF00BBFF00BBFF00BBFF0FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7EFEDA57B42A56B29895A267B52187B52187B52187B52187B52187B52187B52187B52187B5218895A26B5ADAD0E0F0E0E0F0E2118211018211018211018211018211018211018211018211018212118213030304239424E4E4EADB5B5001328001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFA4A73AF2963A5255693255693255693255693255693255693255693255693255693255693255693B5ADAD0E0F0E0E0F0E2118211018211018211018211018211018211018211018211018212118213030304239424E4E4EADB5B5001328001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFA0303EC0303EC0000AD040485040485040485040485040485040485040485040485040485212184B5ADAD0E0F0E0E0F0E2118211018211018211018211018211018211018211018211018212118213030304239424E4E4EADB5B5001328001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00005800005800005800005800004800004800004800004800003300003300004800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D000058000058000058000058000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE597328637A2D6B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B38637A2D425A160E0F0E0E0F0E0C2B050042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8CAD8C5487560C2B05114816114816004208004208004208004208004208004208004208004208004208004208004208004208004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE105AFE1663FE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE105AFE0944B70E0F0E05296F002D940243CC8CADE7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF3773EF002D940243CC004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EF9696964E4E4E3030303030304239424E4E4E4E4E4E4E4E4E4E4E4E5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030301018214E4E4E969696FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61D3FF00B4FF00B7FF00B7FF00B7FF00B7FF00B7FF00B2FF80DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FBBFF00B6FF00B7FF00B7FF00B7FF00B7FF00B7FF0FBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7EFEDEDE9DEB186509663238B51128B51128B51128B51128B51128B51128B51128B51128B5112895A263030302118210E0F0E0E0F0E0E0F0E2118213030303030303030303030303030303030304E4E4EADB5B5ADB5B5CACACAA8A8A8001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFADEE9ED5A84B52556932556930D468D0D468D0D468D0D468D0D468D0D468D0D468D2556932556933030302118210E0F0E0E0F0E0E0F0E2118213030303030303030303030303030303030304E4E4EADB5B5ADB5B5CACACAA8A8A8001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED8D8FFD8D8FF3535EF0303EC0000AD0404850404850404850404850404850404850404850404852121843030302118210E0F0E0E0F0E0E0F0E2118213030303030303030303030303030303030304E4E4EADB5B5ADB5B5CACACAA8A8A8001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00006D00005800005800005800005800004800004800004800004800004800004800005800005800005800005800006D00006D00006D00006D00006D00006D00005800005800005800005800005800006D00006D00006D00006D00006D000058000058000058000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6B8B386B8B386B8B38769147769147769147769147769147769147849C4E8CAA578CAA5777A55A739C63739C63739C63739C63849C4E5A73420E0F0E0E0F0E0C2B05004208296331548756FEFEFEFEFEFEFEFEFEFEFEFED8EAD994B59C6B98735487560C2B05114816114816004208004208004208004208004208004208004208004208004208004208004208004208004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE1663FE1663FE266AFE2973FE2973FE2973FE2973FE2973FE2973FE3377FE3377FE3377FE3377FE2973FE2973FE2973FE2973FE266AFE295AB50E0F0E05296F002D940243CC2965D6527BDEFEFEFEFEFEFEFEFEFEFEFEFED9E7FE84ADFF538CFE3773EF002D940243CC004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED8686863030303030304239424239424E4E4E4E4E4E4E4E4E4E4E4E423942303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030423942423942423942423942423942423942423942423942423942423942423942423942423942423942303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030211821211821303030868686C6BDBDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9BE2FF00B1FF00B3FF00B3FF00B3FF00B3FF00B3FF00AEFF81DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FBFF0FB8FF00B2FF00B3FF00B3FF00B3FF00B3FF00B3FF14B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDE9DEE8D7C7B796709663239663239663239663239663238B51128B51128B51128B5112A8A8A89696963030303030303030303030303030303030303030304E4E4E5A635A5A635A7B847BCACACACACACACACACACACACA99A8AFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEE9EDD6DEEF6B8CBD2556932556932556932556932556930D468D0D468D0D468D255693A8A8A89696963030303030303030303030303030303030303030304E4E4E5A635A5A635A7B847BCACACACACACACACACACACACA99A8AFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED8D8FFC6C6FF4A4AEF0303EC0303EC0303EC0303EC0000D9040485040485040485040485A8A8A89696963030303030303030303030303030303030303030304E4E4E5A635A5A635A7B847BCACACACACACACACACACACACA99A8AFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800004800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE849C4E7691476B8B38849C4E849C4E849C4E849C4E849C4E849C4E8CAA5792B26D92B26D92B26D75AF7475AF7475AF7475AF7492B26D7691470E0F0E0C2B050C2B05004208004208004208D8EAD9EDEDEDEDEDEDEDEDEDB7DBB963946B5487564574460C2B051148161148160042080042080042080042080042080042080042080042080042080042080042080042081052182A542AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3377FE3377FE266AFE3377FE3377FE3377FE3377FE3377FE3377FE427BFE4384FE4384FE3377FE3377FE3377FE3377FE3377FE3377FE2965D600082505296F002D940944B70243CC0243CCD9E7FED9E7FED9E7FED9E7FEB5CEFF4384FE3377FE2965D6002D940035AF004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA105AFE266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB7B847B4239423030304239424239424E4E4E4239423030303030303030303030303030303030303030303030303030303030304239424239424239424239424239424239424239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030301018211018211018211018210E0F0E0E0F0E0E0F0E0E0F0E4E4E4EBBBBBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0E6FF00AEFF00AEFF00AEFF00AEFF00AEFF00AEFF00A8FF81D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FBFF0FB3FF00ADFF00AEFF00AEFF00AEFF00AEFF00ADFF31BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDE9DEE8D7C7E8D7C7E8D7C7E8D7C7DAB587966323966323966323966323B18650BBBBBB9696964239423030304E4E4E5A635A5A635A5A635A5A635A6E6E6E948C8CCACACACACACACACACACACACACACACACACACADADADBB5ADADF7EFEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEE9EDC6D6E7C6D6E7C6D6E7C6D6E794ADCE2556932556932556932556935A84B5BBBBBB9696964239423030304E4E4E5A635A5A635A5A635A5A635A6E6E6E948C8CCACACACACACACACACACACACACACACACACACADADADBB5ADADF7EFEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED8D8FFB5B5FFB5B5FFB5B5FFB5B5FF7B7BF70000D90000D90000D90000D93535EFBBBBBB9696964239423030304E4E4E5A635A5A635A5A635A5A635A6E6E6E948C8CCACACACACACACACACACACACACACACACACACADADADBB5ADADF7EFEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6849C4E849C4E849C4E92B26D92B26D8CAA5775AF7492B26D92B26D92B26D92B26D86BC8AA5C674ADD08C9CCEA5A5C674A5C6749CCEA53030300E0F0E0C2B0500420800420800420818532139734239734245744663946B2147180C2B050E0F0E0C2B050042080042080042080042080042080042080042080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9C6FF3377FE3377FE2973FE266AFE266AFE266AFE3377FE427BFE4384FE4384FE4384FE4384FE4384FE538CFE689AFF689AFF5A94FF2973FE0C28490E0F0E0D468D0035AF0243CC0243CC0243CC0243CC0243CC125AED4384FE0944B705296F0E0F0E002D940052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB7B847B4239423030303030303030303030304239424239424239424239424239424239424239424239424E4E4E4239424239424239424239424239424239424239424239424239424239424239423030304239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030302118211018211018211018210E0F0E0E0F0E0E0F0E0E0F0E1018211018211018213030301018210E0F0E868686BBBBBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0EFFF02A9FF00A8FF00A9FF00A9FF00A9FF00A9FF00A7FF24B4FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48BFFF52C4FFF4FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4E0FF48BCFF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF43BFFF04AAFF00A8FF00A9FF00A9FF00A9FF00A9FF00A6FF63CBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7EFEDD1D4B6D1D4B6D1D4B6D1D4B6D1D4B6BBBBBBBBBBBB9696965A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E948C8CBBBBBBDADADBCACACACACACACACACACACACACACACAADB5B5DADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFAB6C8DAB6C8DAB6C8DAB6C8DAB6C8DABBBBBBBBBBBB9696965A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E948C8CBBBBBBDADADBCACACACACACACACACACACACACACACAADB5B5DADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFAA5A5FFA5A5FFA5A5FFA5A5FFA5A5FFBBBBBBBBBBBB9696965A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E948C8CBBBBBBDADADBCACACACACACACACACACACACACACACAADB5B5DADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800006D00006D00006D00005800005800006D00006D00005800005800005800005800004800004800004800004800004800005800005800005800006D00006D00006D00006D00006D00006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6849C4E77A55A8CAA5792B26D92B26D92B26D92B26D92B26D95BD8492B26DA5BD77A5BD7798CA94ADD08CADD08CADD08C98CA94ADD08C739C635667350E0F0E0C2B050C2B050C2B050C2B052147182147182147182A542A0C2B050E0F0E0E0F0E0C2B050042080042080042080042080042080042080042080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9C6FF3377FE3377FE2973FE266AFE266AFE266AFE266AFE3377FE4384FE4384FE4384FE4384FE5A94FF538CFE4384FE689AFF689AFF538CFE4A73AF25569300173305296F0035AF0035AF0035AF0035AF0035AF0944B7295AB50018520017330E0F0E002D940052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB7B847B3030300E0F0E4239424239424239424239424239424239424239424239424239424239424239424239424239424239424239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030302118211018211018211018210E0F0E0E0F0E0E0F0E0E0F0E1018211018211018212118213030303030303030303030303030303030302118213030304E4E4ECACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF9FF1AABFF00A0FF00A2FF00A2FF00A2FF00A2FF00A2FF00A0FF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009CFF04A4FFEFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7ACFFF0097FF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF00A1FF00A2FF00A2FF00A2FF00A2FF00A2FF02A0FF94D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDBBBBBBA8A8A87B847B6E6E6EA8A8A8CACACACACACA9696966E6E6E948C8CB5ADADCACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDBBBBBBA8A8A87B847B6E6E6EA8A8A8CACACACACACA9696966E6E6E948C8CB5ADADCACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDBBBBBBA8A8A87B847B6E6E6EA8A8A8CACACACACACA9696966E6E6E948C8CB5ADADCACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300003300003300004800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800006D00006D00006D00005800005800006D00006D00005800005800005800005800004800004800004800004800004800005800005800005800006D00006D00006D00006D00006D00006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6849C4E75AF7475AF7492B26D92B26D92B26D92B26D95BD8486BC8AA5C674A5C674A5C6749CCEA5ADD08CADD08C9CCEA598CA94A5C674A5C67492B26D0E0F0E0E0F0E0C2B050C2B050C2B050C2B050C2B050C2B050C2B050E0F0E0E0F0E0E0F0E0C2B050042080042080042080042080042080042080042080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9C6FF3377FE3377FE2973FE266AFE266AFE266AFE266AFE3377FE3377FE4384FE4384FE4384FE689AFF538CFE3377FE5A94FF689AFF689AFF689AFF5A84DE0E0F0E001852002D94002D94002D94002D94002D94002D94002D940008250E0F0E0E0F0E002D940052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB2118210E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E1018211018211018211018211018211018211018211018211018211018211018211018211018211018211018211018210E0F0E0E0F0E0E0F0E0E0F0E0E0F0E1018211018211018212118213030303030303030303030303030303030303030303030303030303030303030303030301018214E4E4E948C8CEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFF74C9FF0099FF009BFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009AFF0FA1FFF0F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80CEFF0095FF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009BFF0FA1FFD8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDDADADBCACACABBBBBBEDEDEDFEFEFEFEFEFEDADADB9696965A635A6E6E6E969696A8A8A8CACACACACACACACACACACACACACACACACACADADADBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDDADADBCACACABBBBBBEDEDEDFEFEFEFEFEFEDADADB9696965A635A6E6E6E969696A8A8A8CACACACACACACACACACACACACACACACACACADADADBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDDADADBCACACABBBBBBEDEDEDFEFEFEFEFEFEDADADB9696965A635A6E6E6E969696A8A8A8CACACACACACACACACACACACACACACACACACADADADBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9495A59495A563638400003300005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800004800004800004800004800004800005800005800005800006D00006D00006D00006D00006D0000580000580000480000483131639495A5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B692B26D92B26D92B26D86BC8AA5BD77A5C674A5C674A5C674A5C6749CCEA5ADD08CADD08CADD08CADD08C9CCEA5A5C674A5BD7786BC8A92B26D92B26D86BC8A3266390E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0C2B050042083152003152003152000042080042080042080042080042080042080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98B9FF266AFE266AFE266AFE427BFE3377FE2973FE2973FE2973FE2973FE2973FE2973FE2973FE2973FE4384FE689AFF4384FE4384FE4384FE4384FE4384FE427BFE21397B0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0035AF004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0E0F0E1018213030304239423030302118212118212118212118212118212118212118212118211018211018211018211018211018211018211018210E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E1018211018211018212118212118213030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030302118210E0F0E4E4E4ECACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7E8FF0093FF0093FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0092FF0F9BFFF0F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80CAFF008DFF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0090FF4AB3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696969696964E4E4E5A635A969696CACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696969696964E4E4E5A635A969696CACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696969696964E4E4E5A635A969696CACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800006D00006D00006D00006D00005800005800005800005800004800003300003300004800004800004800004800005800005800006D00006D00006D00006D00005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDE9DEBDD6A595BD8495BD8495BD8495BD84ADD08CADD08CADD08CA5C6749CCEA59CCEA5ADD08CADD08CADD08C98CA9495BD8495BD8495BD8492B26D92B26D95BD845A73423142182431092431092431092431090C2B05004208005800005800174A00244A00315200174A00004208004208004208004208004208004208004208004208004208085218779C7BCAD6C8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE8CB5FF3377FE2973FE427BFE3377FE2973FE2973FE3377FE4384FE2973FE2973FE2973FE4384FE538CFE689AFF4384FE4384FE4384FE4384FE4384FE4384FE295AB521397B21397B05296F05296F05296F05296F21397B2965D6125AED004AF70052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA105AFE77A5FFCADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBCAD6C85A635A5A635A1018213030304239424239424E4E4E4E4E4E4E4E4E423942423942423942423942423942423942423942423942423942303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030211821303030948C8CDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FAFF2EA0FF0087FF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF0089FF0F92FFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C5FF0083FF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF0288FFB4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B4E4E4E423942969696A8A8A8CACACACACACACACACACACACACACACABBBBBBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B4E4E4E423942969696A8A8A8CACACACACACACACACACACACACACACABBBBBBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B4E4E4E423942969696A8A8A8CACACACACACACACACACACACACACACABBBBBBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800006D00006D00006D00005800005800005800004800004800004800003300003300004800004800004800004800005800005800006D00006D00006D00006D00005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98CA9495BD84A5C67498CA949CCEA59CCEA5ADD08CADD08C9CCEA59CCEA59CCEA5A5C674A5C674A5C67486BC8A86BC8A92B26D92B26D92B26D92B26D849C4E6B8B38597328526B224963104963102D6B09008400008400087401004208244A00315200315200174A000042080042080042080042080042080042080042080042082A542AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE4384FE3377FE427BFE3377FE2973FE2973FE538CFE689AFF2973FE2973FE2973FE689AFF689AFF689AFF4384FE4384FE4384FE4384FE4384FE4384FE3377FE3377FE4384FE266AFE0052FA0052FA1663FE4384FE4384FE3377FE004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBCACACA5A635A3030302118213030304239424239424239424239424239424239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030300E0F0E4E4E4E948C8CEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0E0FF0383FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0081FF0F8BFFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C2FF007AFF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0084FF0080FF2998FFF9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED8686866E6E6E4239424E4E4E969696969696B5ADADBBBBBBCACACABBBBBBBBBBBBCACACAEDEDEDEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED8686866E6E6E4239424E4E4E969696969696B5ADADBBBBBBCACACABBBBBBBBBBBBCACACAEDEDEDEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED8686866E6E6E4239424E4E4E969696969696B5ADADBBBBBBCACACABBBBBBBBBBBBCACACAEDEDEDEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800004800004800004800004800004800004800004800005800005800005800006D00006D00006D00006D00006D00005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADD08CA5C674A5C67498CA949CCEA5ADD08CADD08CADD08C9CCEA598CA94A5C674A5C674A5C674A5C674A5C674A5BD7786BC8A92B26D8CAA57849C4E7691476B8B384963104963104963104963102D6B090084000084000084000084000058000042083152003152003152000042080042080042080042080042080042080042082A542AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE538CFE3377FE427BFE3377FE3377FE689AFF689AFF689AFF2973FE4384FE689AFF689AFF689AFF689AFF689AFF538CFE2973FE3377FE4384FE3377FE3377FE3377FE105AFE0052FA0052FA0052FA1663FE4384FE4384FE3377FE3377FE125AED004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDED948C8C4E4E4E2118214239424239424239424239424239424239424239424239424239424239424239423030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030302118211018212118216E6E6ECACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFF4CA4FF0078FF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007BFF0F85FFF0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80BEFF0073FF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007CFF0079FF9BCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E6E6E6E6E6E6E4E4E4E6E6E6E969696969696B5ADADBBBBBBBBBBBBBBBBBBCACACAF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E6E6E6E6E6E6E4E4E4E6E6E6E969696969696B5ADADBBBBBBBBBBBBBBBBBBCACACAF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E6E6E6E6E6E6E4E4E4E6E6E6E969696969696B5ADADBBBBBBBBBBBBBBBBBBCACACAF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800004800004800004800004800004800004800004800005800005800005800006D00006D00006D00006D00006D00005800004800003300003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADD08CADD08CA5C67498CA949CCEA5ADD08CADD08CADD08C98CA94ADD08CA5C674A5C674A5BD77A5BD77A5C674A5BD7786BC8A92B26D8CAA577691476B8B386B8B384469254469254963104963102D6B09008400008400008400008400005800004208315200315200315200174A00004208004208004208004208004208457446779C7BFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE538CFE4384FE538CFE3377FE3377FE538CFE538CFE538CFE4384FE538CFE689AFF689AFF689AFF5A94FF689AFF5A94FF2973FE3377FE4384FE3377FE2973FE266AFE105AFE105AFE0052FA0052FA1663FE4384FE4384FE4384FE4384FE125AED004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA427BFE77A5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA6E6E6E2118212118214239424239424239424239424239424239424239424239424239423030304239423030303030303030303030303030303030303030301018211018211018211018214239427B847B7B847B7B847B948C8CEDEDEDF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7E9FF0173FF0074FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0073FF0F7DFFF0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80BAFF006BFF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0070FF5EA8FFF8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A4239423030306E6E6E969696B5ADADADB5B5BBBBBBCACACAEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A4239423030306E6E6E969696B5ADADADB5B5BBBBBBCACACAEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A4239423030306E6E6E969696B5ADADADB5B5BBBBBBCACACAEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD29295200004800005800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800004800004800004800004800004800004800004800005800005800006D00006D00006D00006D00006D000058000058000048292952292952757489FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA7D6AA9CCEA5ADD08C9CCEA59CCEA59CCEA59CCEA59CCEA5A5C674A5C674A5C674A5C674A5BD7786BC8AA5BD77A5BD7786BC8A92B26D8CAA576B8B38637A2D5973283973424469254963104963102D6B09008400008400008400008400005800004208315200315200315200315200244A00004208004208004208004208ADC6B5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE538CFE4384FE689AFF3377FE2973FE2973FE2973FE3377FE689AFF689AFF689AFF689AFF5A94FF4384FE689AFF5A94FF2973FE3377FE4384FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA1663FE4384FE4384FE4384FE4384FE125AED004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAB5CEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFCACACA4E4E4E1018211018211018211018211018211018211018211018211018211018211018211018210E0F0E5A635A7B847B7B847B7B847BEDEDEDF7F7EFF7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62A6FF0069FF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006BFF0F77FFF0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80B7FF0064FF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006CFF0772FFD9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8686864E4E4E5A635A4E4E4E6E6E6EA8A8A8B5ADADB5ADADA8A8A8F7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8686864E4E4E5A635A4E4E4E6E6E6EA8A8A8B5ADADB5ADADA8A8A8F7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8686864E4E4E5A635A4E4E4E6E6E6EA8A8A8B5ADADB5ADADA8A8A8F7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800005800005800005800005800005800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00005800005800005800005800004800004800004800005800005800005800006D00006D00006D00006D000058000058000058000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFD8EAD99CCEA59CCEA59CCEA59CCEA59CCEA59CCEA5A5C674A5C674A5C67486BC8A86BC8A86BC8A86BC8A86BC8A92B26D849C4E7691476B8B38637A2D5973283973424469254963104963104963102D6B09087401008400008400008400087401004208244A00315200315200315200244A00004208326639D8EAD9F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFAA9C6FF3377FE3377FE2973FE2973FE2973FE3377FE689AFF689AFF689AFF538CFE4384FE4384FE4384FE4384FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA105AFE3377FE4384FE4384FE3377FE3377FE004AE90052FA0052FA0052FA0052FA0052FA0052FA3377FED9E7FEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF3FF277EFF0060FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0064FF0F70FFF0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80B3FF005CFF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0066FF005EFF9BC3FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696964E4E4E4E4E4E655A56969696969696A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696964E4E4E4E4E4E655A56969696969696A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696964E4E4E4E4E4E655A56969696969696A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB58587A00003300003300004800005800005800005800005800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800005800005800005800005800006D00006D00006D00006D00005800004800004800003358587ADADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECF7ECB7DBB9A7D6AA9CCEA59CCEA59CCEA59CCEA5A5C674A5C674A5C67486BC8A86BC8A86BC8A86BC8A86BC8A8CAA577691476B8B386B8B38637A2D597328397342446925496310496310496310496310087401008400008400008400008400004208174A00315200315200315200315200457446779C7BFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9E7FE689AFF3377FE2973FE2973FE2973FE3377FE689AFF689AFF689AFF4384FE4384FE4384FE4384FE3377FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA0052FA3377FE4384FE4384FE4384FE3377FE004AE9004AF70052FA0052FA0052FA0052FA3377FE77A5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDE0FF1F71FF005CFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005CFF106AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89B5FF0053FF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF0059FF5F9BFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB3030304E4E4EA8A8A8A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB3030304E4E4EA8A8A8A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB3030304E4E4EA8A8A8A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB73739473739400104A00004800005800005800005800005800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800005800006D00006D00006D00006D00006D00005800004800004800004858587AADADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB7DBB99CCEA59CCEA59CCEA59CCEA5A5C674A5C674A5C67486BC8A86BC8A86BC8A86BC8A86BC8A849C4E7691476B8B386B8B38637A2D597328397342446925496310496310496310496310087401008400008400008400008400004208174A00315200315200315200315200DADECEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE689AFF2973FE2973FE2973FE3377FE689AFF689AFF689AFF4384FE4384FE4384FE4384FE3377FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA0052FA3377FE4384FE4384FE4384FE3377FE004AE9004AF70052FA0052FA0052FA0052FACADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBDEFF0358FF0055FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0056FF085DFF78A6FF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF4082FF0052FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0053FF2E75FFF0F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE18184200004800004800004800004800004800004800005800005800006D00006D00006D00006D00006D00006D00005800005800005800005800006D00006D00006D00006D00005800005800006D00006D00006D00006D00006D000058000048000048000033000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECF7ECECF7ECECF7ECBDD6A5A5C674A5C674A5BD7786BC8A86BC8A86BC8A92B26D92B26D8CAA57849C4E7691476B8B386B8B38637A2D5973283973424469254963104963104963104963102D6B092D6B09008400008400008400087401005800044610315200769147D1D4B6F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9E7FECADBFECADBFE84ADFF5A94FF689AFF5A94FF538CFE4384FE3377FE3377FE3377FE3377FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA0052FA105AFE1663FE4384FE4384FE3377FE2973FE105AFE004AE90052FA4384FEBDD6FFEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFA0BFFF0453FF004EFF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0051FF0047FF0046FF0046FF0046FF0046FF0046FF0046FF0046FF0046FF0046FF0046FF004CFF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0051FF004CFF407DFFE5EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE18184200004800004800004800004800004800004800005800005800006D00006D00006D00006D00006D00006D00005800005800005800005800006D00006D00006D00006D00005800005800006D00006D00006D00006D00006D000058000048000048000033000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6ADD08CA5C67495BD8486BC8A86BC8A95BD8492B26D92B26D8CAA57849C4E7691476B8B386B8B38637A2D5973283973424469254963104963104963104963104963102D6B090084000084000084000084000058000042085667359CA584FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB5CEFF84ADFF689AFF538CFE4384FE4384FE3377FE2973FE2973FE2973FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA0052FA0052FA105AFE4384FE4384FE4384FE4384FE266AFE004AE93377FE84ADFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3D5FF1E5EFF0045FF004AFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF0049FF0046FF5284FFE8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEC6C8D658587A00003300003300004800004800004800005800005800005800006D00006D00006D00006D00006D00006D00006D00006D00005800006D00006D00006D00006D00006D00006D00005800006D00006D00006D00005800005800003358587ACACACACACACAEAEEFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA5C67495BD8486BC8A86BC8A95BD8492B26D92B26D8CAA57849C4E7691476B8B386B8B38637A2D5973283973424469254963104963104963104963104963102D6B09008400008400008400008400005800004208EFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE689AFF538CFE4384FE4384FE3377FE2973FE2973FE2973FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA0052FA0052FA105AFE4384FE4384FE4384FE4384FE266AFE004AE9EFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3D4FF1C57FF0042FF0044FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0041FF0547FF6992FFE8EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB58587A00003300003300004800004800004800004800005800005800005800006D00006D00006D00006D00006D00006D00005800005800005800005800005800006D00005800004800005800005800005800005800004858587AADADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE95BD8486BC8A86BC8A86BC8A95BD8492B26D8CAA57849C4E7691476B8B386B8B386B8B38637A2D5973285473314469254963104963104963104963104963104963102D6B09087401008400008400087401087401ECF7ECFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FC538CFE4384FE4384FE4384FE3377FE2973FE2973FE2973FE3377FE3377FE3377FE3377FE266AFE105AFE1663FE105AFE0052FA0052FA0052FA0052FA0052FA105AFE1663FE3377FE4384FE4384FE3377FE266AFEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6E1FF6188FF0641FF003BFF003DFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003CFF0037FF1C51FFA7BDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB000033000033000048000048000048000048000048000048000048000058000058000058000058000058000058000058000058000058000058000058000058000048000033000048000048000048000048000033DADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98CA9498CA9498CA9486BC8A95BD8492B26D849C4E7691476B8B386B8B386B8B386B8B38637A2D597328597328526B22496310496310496310496310496310496310496310087401008400008400008400008400D8EAD9ECF7ECFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE538CFE538CFE538CFE4384FE3377FE2973FE2973FE2973FE3377FE3377FE3377FE3377FE266AFE105AFE105AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA2973FE4384FE4384FE4384FE4384FEEAEEFAEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFBECDFF4771FF083EFF0034FF0039FF0039FF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF0039FF0037FF0035FF1347FF7291FFE1E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE868996000033000033000033000033000048000048000048000048000048000048000048000048000048000048000048000048000048000048000033000033000033000033000033292952FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE92B26D92B26D75AF74849C4E849C4E849C4E7691476B8B386B8B38637A2D597328597328526B2249631049631049631049631049631049631049631008740100840000840000840000840000840075AF74FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3377FE3377FE427BFE2973FE2973FE2973FE3377FE3377FE3377FE266AFE105AFE105AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA2973FE4384FE4384FE4384FE4384FE4384FE8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F9FFB9C8FF2C57FF0334FF0031FF0032FF0034FF0034FF0035FF0035FF0035FF0035FF0035FF0035FF0035FF0035FF0035FF0034FF0034FF0034FF0030FF0033FF0738FF6382FFDCE3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE868996000033000033000033000033000033000033000048000048000048000048000048000048000048000048000048000048000048000048000033000033000033000033000033292952FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6D1D4B6CAD6C8D1D4B6BDD6A5BDD6A58CAA576B8B386B8B38637A2D597328597328526B2249631049631049631049631049631049631049631077A55A86BC8A86BC8A86BC8A86BC8A86BC8AB7DBB9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9C6FFA9C6FFA9C6FFA5BDFF98B9FF98B9FF538CFE3377FE3377FE266AFE105AFE105AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA689AFFA9C6FFA9C6FFA9C6FFA9C6FFA9C6FFCADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF0FFBDCAFF6D89FF214BFF0332FF0031FF0030FF0028FF002DFF002FFF0031FF0030FF002EFF002AFF002CFF0132FF0031FF0735FF385DFFA3B4FFD9E1FFFAFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB58587A58587A58587A31315A00003300003300003300004800004800004800004800004800004800004800004800004800004800004831316358587A58587A58587A58587A757489FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9CA5846B8B386B8B38637A2D597328597328526B22496310496310496310496310496310496310496310BBC6A6FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF3377FE3377FE266AFE105AFE105AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FAA9C6FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEEFFC6D1FFAFBDFF899FFF5B78FF375AFF254BFF113BFF1B44FF2A50FF4F6EFF6984FF99ABFFB7C4FFD5DDFFF4F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9495A50000330000330000330000330000330000330000330000330000330000330000330000330000330000339495A5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">0</prop><prop prop-type="Order">227</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">0</prop><prop prop-type="Open">{</prop><prop prop-type="Close">}</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.OnMouseMove" resname="O:MainForm.O:SidePanel.O:SelPanel.O:Image1.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">228</prop><prop prop-type="Type">TImage</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesEdit.Left" resname="O:MainForm.O:SidePanel.O:LivesEdit.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">229</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesEdit.Top" resname="O:MainForm.O:SidePanel.O:LivesEdit.Top">
<source>355</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">230</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesEdit.Width" resname="O:MainForm.O:SidePanel.O:LivesEdit.Width">
<source>81</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">231</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesEdit.Height" resname="O:MainForm.O:SidePanel.O:LivesEdit.Height">
<source>22</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">232</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesEdit.MaxValue" resname="O:MainForm.O:SidePanel.O:LivesEdit.MaxValue">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">233</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesEdit.MinValue" resname="O:MainForm.O:SidePanel.O:LivesEdit.MinValue">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">234</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesEdit.TabOrder" resname="O:MainForm.O:SidePanel.O:LivesEdit.TabOrder">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">235</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:LivesEdit.Value" resname="O:MainForm.O:SidePanel.O:LivesEdit.Value">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">236</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy8.Left" resname="O:MainForm.O:SidePanel.O:Enemy8.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">237</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy8.Top" resname="O:MainForm.O:SidePanel.O:Enemy8.Top">
<source>164</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">238</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy8.Width" resname="O:MainForm.O:SidePanel.O:Enemy8.Width">
<source>65</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">239</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy8.Height" resname="O:MainForm.O:SidePanel.O:Enemy8.Height">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">240</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy8.Caption" resname="O:MainForm.O:SidePanel.O:Enemy8.Caption">
<source>'Medikit'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">1</prop><prop prop-type="Order">241</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy8.TabOrder" resname="O:MainForm.O:SidePanel.O:Enemy8.TabOrder">
<source>9</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">242</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy8.OnClick" resname="O:MainForm.O:SidePanel.O:Enemy8.OnClick">
<source>EnemyClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">243</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:SidePanel.O:Enemy8.OnMouseMove" resname="O:MainForm.O:SidePanel.O:Enemy8.OnMouseMove">
<source>DXDrawMouseMove</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">244</prop><prop prop-type="Type">TRadioButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.Left" resname="O:MainForm.O:MainMenu.Left">
<source>32</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">245</prop><prop prop-type="Type">TMainMenu</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.Top" resname="O:MainForm.O:MainMenu.Top">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">246</prop><prop prop-type="Type">TMainMenu</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.Caption">
<source>'&amp;Datei'</source>
<target>'&amp;File'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">1</prop><prop prop-type="Order">247</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Neu.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Neu.Caption">
<source>'&amp;Neu'</source>
<target>'&amp;New'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">1</prop><prop prop-type="Order">248</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Neu.ShortCut" resname="O:MainForm.O:MainMenu.O:Spiel.O:Neu.ShortCut">
<source>16462</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">249</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Neu.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:Neu.OnClick">
<source>NeuClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">250</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:N2.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:N2.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">251</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Level.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Level.Caption">
<source>'&amp;Laden/Speichern...'</source>
<target>'&amp;Load/Save...'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">1</prop><prop prop-type="Order">252</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Level.ShortCut" resname="O:MainForm.O:MainMenu.O:Spiel.O:Level.ShortCut">
<source>16463</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334941319</prop><prop prop-type="Status">6</prop><prop prop-type="Order">253</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Level.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:Level.OnClick">
<source>LevelClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">254</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:AlleLeveldateienaktualisieren1.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:AlleLeveldateienaktualisieren1.Caption">
<source>'Alle Leveldateien aktualisieren'</source>
<target>'Rewrite all level files'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">255</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:AlleLeveldateienaktualisieren1.Visible" resname="O:MainForm.O:MainMenu.O:Spiel.O:AlleLeveldateienaktualisieren1.Visible">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">256</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:AlleLeveldateienaktualisieren1.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:AlleLeveldateienaktualisieren1.OnClick">
<source>AlleLeveldateienaktualisieren1Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">257</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Leveltesten1.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Leveltesten1.Caption">
<source>'Level testen'</source>
<target>'Test level'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">258</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Leveltesten1.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:Leveltesten1.OnClick">
<source>Leveltesten1Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">259</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:N1.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:N1.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">260</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Spielfelderweitern1.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Spielfelderweitern1.Caption">
<source>'Leveleigenschaften...'</source>
<target>'Level properties...'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">261</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Spielfelderweitern1.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:Spielfelderweitern1.OnClick">
<source>Spielfelderweitern1Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">262</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Leer1.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Leer1.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">263</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.Caption" resname="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.Caption">
<source>'&amp;Beenden'</source>
<target>'&amp;Exit'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">264</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.ShortCut" resname="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.ShortCut">
<source>32883</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">265</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.OnClick" resname="O:MainForm.O:MainMenu.O:Spiel.O:Beenden.OnClick">
<source>BeendenClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">266</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.Caption">
<source>'&amp;Hilfe'</source>
<target>'&amp;Help'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">267</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.Caption">
<source>'Allgemeines'</source>
<target>'General topics'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">268</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">269</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.Hint" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.Hint">
<source>'Help\DE_General.md'</source>
<target>'Help\EN_General.md'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">270</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>'Help\Allgemeines.md'</source>
<target>'Help\General.md'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45406.9331481366</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.OnClick" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Hilfe1.OnClick">
<source>HilfeTopicClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">271</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:WasgibtesNeues1.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:WasgibtesNeues1.Caption">
<source>'Was gibt es Neues?'</source>
<target>'What'#39's new?'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">272</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:WasgibtesNeues1.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:WasgibtesNeues1.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">273</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:WasgibtesNeues1.Hint" resname="O:MainForm.O:MainMenu.O:Hilfe.O:WasgibtesNeues1.Hint">
<source>'Help\DE_Changelog.md'</source>
<target>'Help\EN_Changelog.md'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">274</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
<alt-trans> <source>'Help\Neuerungen.md'</source>
<target>'Help\Changelog.md'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Modified">45406.9331481366</prop></prop-group>
</alt-trans></trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:WasgibtesNeues1.OnClick" resname="O:MainForm.O:MainMenu.O:Hilfe.O:WasgibtesNeues1.OnClick">
<source>HilfeTopicClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">275</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:N4.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:N4.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">276</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:N4.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:N4.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">277</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:AufUpdatesprfen1.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:AufUpdatesprfen1.Caption">
<source>'Auf Updates prüfen'</source>
<target>'Check for updates'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">278</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:AufUpdatesprfen1.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:AufUpdatesprfen1.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">279</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:AufUpdatesprfen1.OnClick" resname="O:MainForm.O:MainMenu.O:Hilfe.O:AufUpdatesprfen1.OnClick">
<source>AufUpdatesprfen1Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">280</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:N3.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:N3.Caption">
<source>'-'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">281</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:N3.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:N3.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">282</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.Caption" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.Caption">
<source>'&amp;Informationen...'</source>
<target>'&amp;About...'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">1</prop><prop prop-type="Order">283</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.GroupIndex" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.GroupIndex">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">284</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.OnClick" resname="O:MainForm.O:MainMenu.O:Hilfe.O:Informationen.OnClick">
<source>InformationenClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334942014</prop><prop prop-type="Status">6</prop><prop prop-type="Order">285</prop><prop prop-type="Type">TMenuItem</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/LevOptions.dfn
0,0 → 1,535
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\LevOptions.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\LevOptions.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4303009259</prop>
<prop prop-type="OrigDateTime">45405.5831712963</prop>
<prop prop-type="XlatDateTime">45407.694375</prop>
<prop prop-type="Translated">102</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:LevelForm.Left" resname="O:LevelForm.Left">
<source>195</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334970833</prop><prop prop-type="Status">6</prop><prop prop-type="Order">0</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.Top" resname="O:LevelForm.Top">
<source>103</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334970833</prop><prop prop-type="Status">6</prop><prop prop-type="Order">1</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.BorderStyle" resname="O:LevelForm.BorderStyle">
<source>bsDialog</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334970833</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.Caption" resname="O:LevelForm.Caption">
<source>'Leveleigenschaften'</source>
<target>'Level properties'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334970833</prop><prop prop-type="Status">1</prop><prop prop-type="Order">3</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.ClientHeight" resname="O:LevelForm.ClientHeight">
<source>251</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334970833</prop><prop prop-type="Status">6</prop><prop prop-type="Order">4</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.ClientWidth" resname="O:LevelForm.ClientWidth">
<source>384</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.Color" resname="O:LevelForm.Color">
<source>clBtnFace</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.Font.Charset" resname="O:LevelForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.Font.Color" resname="O:LevelForm.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.Font.Height" resname="O:LevelForm.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.Font.Name" resname="O:LevelForm.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.Font.Style" resname="O:LevelForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.Position" resname="O:LevelForm.Position">
<source>poMainFormCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.OnHide" resname="O:LevelForm.OnHide">
<source>FormHide</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.OnShow" resname="O:LevelForm.OnShow">
<source>FormShow</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.TextHeight" resname="O:LevelForm.TextHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TLevelForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton1.Left" resname="O:LevelForm.O:ElPopupButton1.Left">
<source>280</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton1.Top" resname="O:LevelForm.O:ElPopupButton1.Top">
<source>216</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton1.Width" resname="O:LevelForm.O:ElPopupButton1.Width">
<source>99</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton1.Height" resname="O:LevelForm.O:ElPopupButton1.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton1.Caption" resname="O:LevelForm.O:ElPopupButton1.Caption">
<source>'OK'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">1</prop><prop prop-type="Order">20</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton1.Default" resname="O:LevelForm.O:ElPopupButton1.Default">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">21</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton1.TabOrder" resname="O:LevelForm.O:ElPopupButton1.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">22</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton1.OnClick" resname="O:LevelForm.O:ElPopupButton1.OnClick">
<source>ElPopupButton1Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">23</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton2.Left" resname="O:LevelForm.O:ElPopupButton2.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">24</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton2.Top" resname="O:LevelForm.O:ElPopupButton2.Top">
<source>216</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">25</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton2.Width" resname="O:LevelForm.O:ElPopupButton2.Width">
<source>99</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">26</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton2.Height" resname="O:LevelForm.O:ElPopupButton2.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">27</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton2.Cancel" resname="O:LevelForm.O:ElPopupButton2.Cancel">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972222</prop><prop prop-type="Status">6</prop><prop prop-type="Order">28</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton2.Caption" resname="O:LevelForm.O:ElPopupButton2.Caption">
<source>'Abbrechen'</source>
<target>'Cancel'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">1</prop><prop prop-type="Order">29</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton2.TabOrder" resname="O:LevelForm.O:ElPopupButton2.TabOrder">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">30</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:ElPopupButton2.OnClick" resname="O:LevelForm.O:ElPopupButton2.OnClick">
<source>ElPopupButton2Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">31</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.Left" resname="O:LevelForm.O:GroupBox1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">32</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.Top" resname="O:LevelForm.O:GroupBox1.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">33</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.Width" resname="O:LevelForm.O:GroupBox1.Width">
<source>369</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">1</prop><prop prop-type="Order">34</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.Height" resname="O:LevelForm.O:GroupBox1.Height">
<source>193</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">35</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.Caption" resname="O:LevelForm.O:GroupBox1.Caption">
<source>'Editoreigenschaften'</source>
<target>'Editor settings'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">1</prop><prop prop-type="Order">36</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.TabOrder" resname="O:LevelForm.O:GroupBox1.TabOrder">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">37</prop><prop prop-type="Type">TGroupBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label1.Left" resname="O:LevelForm.O:GroupBox1.O:Label1.Left">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">38</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label1.Top" resname="O:LevelForm.O:GroupBox1.O:Label1.Top">
<source>32</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">39</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label1.Width" resname="O:LevelForm.O:GroupBox1.O:Label1.Width">
<source>106</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">40</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label1.Height" resname="O:LevelForm.O:GroupBox1.O:Label1.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">41</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label1.Caption" resname="O:LevelForm.O:GroupBox1.O:Label1.Caption">
<source>'Größe des Spielfeldes:'</source>
<target>'Size of the map:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">1</prop><prop prop-type="Order">42</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label2.Left" resname="O:LevelForm.O:GroupBox1.O:Label2.Left">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">43</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label2.Top" resname="O:LevelForm.O:GroupBox1.O:Label2.Top">
<source>136</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">44</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label2.Width" resname="O:LevelForm.O:GroupBox1.O:Label2.Width">
<source>124</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">45</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label2.Height" resname="O:LevelForm.O:GroupBox1.O:Label2.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">46</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label2.Caption" resname="O:LevelForm.O:GroupBox1.O:Label2.Caption">
<source>'Interner Name des Levels:'</source>
<target>'Internal level name:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">1</prop><prop prop-type="Order">47</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label3.Left" resname="O:LevelForm.O:GroupBox1.O:Label3.Left">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">48</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label3.Top" resname="O:LevelForm.O:GroupBox1.O:Label3.Top">
<source>168</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">49</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label3.Width" resname="O:LevelForm.O:GroupBox1.O:Label3.Width">
<source>57</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">50</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label3.Height" resname="O:LevelForm.O:GroupBox1.O:Label3.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">51</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Label3.Caption" resname="O:LevelForm.O:GroupBox1.O:Label3.Caption">
<source>'Level-Autor:'</source>
<target>'Level author:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">1</prop><prop prop-type="Order">52</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.Left" resname="O:LevelForm.O:GroupBox1.O:Panel1.Left">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">53</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.Top" resname="O:LevelForm.O:GroupBox1.O:Panel1.Top">
<source>56</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">54</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.Width" resname="O:LevelForm.O:GroupBox1.O:Panel1.Width">
<source>329</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">55</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.Height" resname="O:LevelForm.O:GroupBox1.O:Panel1.Height">
<source>57</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">56</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.Color" resname="O:LevelForm.O:GroupBox1.O:Panel1.Color">
<source>clInfoBk</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">57</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.ParentBackground" resname="O:LevelForm.O:GroupBox1.O:Panel1.ParentBackground">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">58</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.TabOrder" resname="O:LevelForm.O:GroupBox1.O:Panel1.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">59</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Left" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">60</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Top" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">61</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Width" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Width">
<source>55</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">62</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Height" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">63</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Caption" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Caption">
<source>'Information:'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">1</prop><prop prop-type="Order">64</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Charset" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">65</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Color" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">66</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Height" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">67</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Name" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">68</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Style" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.Font.Style">
<source>[fsUnderline]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">69</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.ParentFont" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel1.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">70</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Left" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Left">
<source>80</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">71</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Top" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Top">
<source>10</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">72</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Width" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Width">
<source>228</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">73</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Height" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Height">
<source>39</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">74</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Caption" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Caption">
<source>'Die Spielfeldgröße wird nur von dem Leveleditor '#13#10'benötigt. Das Ändern dieser Größe wirkt sich '#13#10'nicht auf die Größe der Levels aus.'</source>
<target>'The size if only relevant for the editor, not the game.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">1</prop><prop prop-type="Order">75</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Color" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Color">
<source>clInfoBk</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">76</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Charset" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">77</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Color" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">78</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Height" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">79</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Name" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">80</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Style" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">81</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.ParentColor" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.ParentColor">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">82</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.ParentFont" resname="O:LevelForm.O:GroupBox1.O:Panel1.O:ElLabel2.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">83</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Groesse.Left" resname="O:LevelForm.O:GroupBox1.O:Groesse.Left">
<source>144</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">84</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Groesse.Top" resname="O:LevelForm.O:GroupBox1.O:Groesse.Top">
<source>28</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">85</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Groesse.Width" resname="O:LevelForm.O:GroupBox1.O:Groesse.Width">
<source>121</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">86</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Groesse.Height" resname="O:LevelForm.O:GroupBox1.O:Groesse.Height">
<source>22</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">87</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Groesse.MaxValue" resname="O:LevelForm.O:GroupBox1.O:Groesse.MaxValue">
<source>65000</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">88</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Groesse.MinValue" resname="O:LevelForm.O:GroupBox1.O:Groesse.MinValue">
<source>100</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">89</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Groesse.TabOrder" resname="O:LevelForm.O:GroupBox1.O:Groesse.TabOrder">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">90</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:Groesse.Value" resname="O:LevelForm.O:GroupBox1.O:Groesse.Value">
<source>1200</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">91</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevName.Left" resname="O:LevelForm.O:GroupBox1.O:LevName.Left">
<source>167</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">92</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevName.Top" resname="O:LevelForm.O:GroupBox1.O:LevName.Top">
<source>133</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">93</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevName.Width" resname="O:LevelForm.O:GroupBox1.O:LevName.Width">
<source>178</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">94</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevName.Height" resname="O:LevelForm.O:GroupBox1.O:LevName.Height">
<source>21</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">95</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevName.TabOrder" resname="O:LevelForm.O:GroupBox1.O:LevName.TabOrder">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">96</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevAuthor.Left" resname="O:LevelForm.O:GroupBox1.O:LevAuthor.Left">
<source>167</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">97</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevAuthor.Top" resname="O:LevelForm.O:GroupBox1.O:LevAuthor.Top">
<source>160</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">98</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevAuthor.Width" resname="O:LevelForm.O:GroupBox1.O:LevAuthor.Width">
<source>178</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">99</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevAuthor.Height" resname="O:LevelForm.O:GroupBox1.O:LevAuthor.Height">
<source>21</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">100</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:LevelForm.O:GroupBox1.O:LevAuthor.TabOrder" resname="O:LevelForm.O:GroupBox1.O:LevAuthor.TabOrder">
<source>3</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334972338</prop><prop prop-type="Status">6</prop><prop prop-type="Order">101</prop><prop prop-type="Type">TEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/LevSpeicherung.dfn
0,0 → 1,820
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
<xliff version="1.0">
<file original="D:\SVN\SpaceMission\LevSpeicherung.dfm" source-language="de-DE" target-language="en-US" datatype="delphiform" tool="ETM v10.0" ts="D:\SVN\SpaceMission\LevSpeicherung.dfm">
<header>
<prop-group name="ITEHeaderProp">
<prop prop-type="Version">9.0</prop>
<prop prop-type="SelfDateTime">45408.4303009259</prop>
<prop prop-type="OrigDateTime">45407.6943518519</prop>
<prop prop-type="XlatDateTime">45407.6943518519</prop>
<prop prop-type="Translated">158</prop>
<prop prop-type="UnTranslated">0</prop>
</prop-group>
</header>
<body>
<trans-unit id="O:SpeicherungForm.Left" resname="O:SpeicherungForm.Left">
<source>281</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">0</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Top" resname="O:SpeicherungForm.Top">
<source>153</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">1</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.BorderStyle" resname="O:SpeicherungForm.BorderStyle">
<source>bsDialog</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">2</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Caption" resname="O:SpeicherungForm.Caption">
<source>'Levels'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">1</prop><prop prop-type="Order">3</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.ClientHeight" resname="O:SpeicherungForm.ClientHeight">
<source>424</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">4</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.ClientWidth" resname="O:SpeicherungForm.ClientWidth">
<source>447</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">5</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Color" resname="O:SpeicherungForm.Color">
<source>clBtnFace</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">6</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Charset" resname="O:SpeicherungForm.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">7</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Color" resname="O:SpeicherungForm.Font.Color">
<source>clWindowText</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">8</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Height" resname="O:SpeicherungForm.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">9</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Name" resname="O:SpeicherungForm.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">10</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Font.Style" resname="O:SpeicherungForm.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">11</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.Position" resname="O:SpeicherungForm.Position">
<source>poMainFormCenter</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">12</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.OnCreate" resname="O:SpeicherungForm.OnCreate">
<source>FormCreate</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">13</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.OnHide" resname="O:SpeicherungForm.OnHide">
<source>FormHide</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">14</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.OnShow" resname="O:SpeicherungForm.OnShow">
<source>FormShow</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">15</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.TextHeight" resname="O:SpeicherungForm.TextHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">16</prop><prop prop-type="Type">TSpeicherungForm</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Left" resname="O:SpeicherungForm.O:Bevel1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">17</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Top" resname="O:SpeicherungForm.O:Bevel1.Top">
<source>56</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">18</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Width" resname="O:SpeicherungForm.O:Bevel1.Width">
<source>433</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">19</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Height" resname="O:SpeicherungForm.O:Bevel1.Height">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">20</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Bevel1.Shape" resname="O:SpeicherungForm.O:Bevel1.Shape">
<source>bsBottomLine</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">21</prop><prop prop-type="Type">TBevel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Left" resname="O:SpeicherungForm.O:Label2.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">22</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Top" resname="O:SpeicherungForm.O:Label2.Top">
<source>72</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">23</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Width" resname="O:SpeicherungForm.O:Label2.Width">
<source>34</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">24</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Height" resname="O:SpeicherungForm.O:Label2.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">25</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label2.Caption" resname="O:SpeicherungForm.O:Label2.Caption">
<source>'Levels:'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">1</prop><prop prop-type="Order">26</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Left" resname="O:SpeicherungForm.O:Label3.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">27</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Top" resname="O:SpeicherungForm.O:Label3.Top">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">28</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Width" resname="O:SpeicherungForm.O:Label3.Width">
<source>67</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">29</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Height" resname="O:SpeicherungForm.O:Label3.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">30</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label3.Caption" resname="O:SpeicherungForm.O:Label3.Caption">
<source>'Informationen:'</source>
<target>'Information:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">1</prop><prop prop-type="Order">31</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Left" resname="O:SpeicherungForm.O:Label1.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">32</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Top" resname="O:SpeicherungForm.O:Label1.Top">
<source>20</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">33</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Width" resname="O:SpeicherungForm.O:Label1.Width">
<source>55</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">34</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Height" resname="O:SpeicherungForm.O:Label1.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">35</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:Label1.Caption" resname="O:SpeicherungForm.O:Label1.Caption">
<source>'Levelname:'</source>
<target>'Level name:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">1</prop><prop prop-type="Order">36</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Left" resname="O:SpeicherungForm.O:LadenBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">37</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Top" resname="O:SpeicherungForm.O:LadenBtn.Top">
<source>72</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">38</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Width" resname="O:SpeicherungForm.O:LadenBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">39</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Height" resname="O:SpeicherungForm.O:LadenBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">40</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Caption" resname="O:SpeicherungForm.O:LadenBtn.Caption">
<source>'&amp;Laden'</source>
<target>'&amp;Load'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">1</prop><prop prop-type="Order">41</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.Enabled" resname="O:SpeicherungForm.O:LadenBtn.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">42</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.TabOrder" resname="O:SpeicherungForm.O:LadenBtn.TabOrder">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">43</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LadenBtn.OnClick" resname="O:SpeicherungForm.O:LadenBtn.OnClick">
<source>LadenBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">44</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Left" resname="O:SpeicherungForm.O:LoeschenBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">45</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Top" resname="O:SpeicherungForm.O:LoeschenBtn.Top">
<source>104</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">46</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Width" resname="O:SpeicherungForm.O:LoeschenBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">47</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Height" resname="O:SpeicherungForm.O:LoeschenBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">48</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Caption" resname="O:SpeicherungForm.O:LoeschenBtn.Caption">
<source>'Lö&amp;schen'</source>
<target>'&amp;Delete'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">1</prop><prop prop-type="Order">49</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.Enabled" resname="O:SpeicherungForm.O:LoeschenBtn.Enabled">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">50</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.TabOrder" resname="O:SpeicherungForm.O:LoeschenBtn.TabOrder">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">51</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LoeschenBtn.OnClick" resname="O:SpeicherungForm.O:LoeschenBtn.OnClick">
<source>LoeschenBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">52</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Left" resname="O:SpeicherungForm.O:AktualisierenBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">53</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Top" resname="O:SpeicherungForm.O:AktualisierenBtn.Top">
<source>144</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">54</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Width" resname="O:SpeicherungForm.O:AktualisierenBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">55</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Height" resname="O:SpeicherungForm.O:AktualisierenBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">56</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.Caption" resname="O:SpeicherungForm.O:AktualisierenBtn.Caption">
<source>'&amp;Aktualisieren'</source>
<target>'&amp;Refresh'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">1</prop><prop prop-type="Order">57</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.TabOrder" resname="O:SpeicherungForm.O:AktualisierenBtn.TabOrder">
<source>2</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">58</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AktualisierenBtn.OnClick" resname="O:SpeicherungForm.O:AktualisierenBtn.OnClick">
<source>DsFancyButton2Click</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">59</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Left" resname="O:SpeicherungForm.O:SpeichernBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">60</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Top" resname="O:SpeicherungForm.O:SpeichernBtn.Top">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">61</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Width" resname="O:SpeicherungForm.O:SpeichernBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">62</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Height" resname="O:SpeicherungForm.O:SpeichernBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">63</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.Caption" resname="O:SpeicherungForm.O:SpeichernBtn.Caption">
<source>'&amp;Speichern'</source>
<target>'&amp;Save'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">1</prop><prop prop-type="Order">64</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.TabOrder" resname="O:SpeicherungForm.O:SpeichernBtn.TabOrder">
<source>3</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">65</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:SpeichernBtn.OnClick" resname="O:SpeicherungForm.O:SpeichernBtn.OnClick">
<source>SpeichernBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">66</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Left" resname="O:SpeicherungForm.O:AbbrechenBtn.Left">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">67</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Top" resname="O:SpeicherungForm.O:AbbrechenBtn.Top">
<source>391</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">68</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Width" resname="O:SpeicherungForm.O:AbbrechenBtn.Width">
<source>105</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">69</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Height" resname="O:SpeicherungForm.O:AbbrechenBtn.Height">
<source>25</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">70</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Cancel" resname="O:SpeicherungForm.O:AbbrechenBtn.Cancel">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">71</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Caption" resname="O:SpeicherungForm.O:AbbrechenBtn.Caption">
<source>'Schli&amp;eßen'</source>
<target>'&amp;Close'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">1</prop><prop prop-type="Order">72</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.Default" resname="O:SpeicherungForm.O:AbbrechenBtn.Default">
<source>True</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">73</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.ModalResult" resname="O:SpeicherungForm.O:AbbrechenBtn.ModalResult">
<source>1</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">74</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.TabOrder" resname="O:SpeicherungForm.O:AbbrechenBtn.TabOrder">
<source>4</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">75</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:AbbrechenBtn.OnClick" resname="O:SpeicherungForm.O:AbbrechenBtn.OnClick">
<source>AbbrechenBtnClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">76</prop><prop prop-type="Type">TButton</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.Left" resname="O:SpeicherungForm.O:LevelListBox.Left">
<source>112</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">77</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.Top" resname="O:SpeicherungForm.O:LevelListBox.Top">
<source>72</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">78</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.Width" resname="O:SpeicherungForm.O:LevelListBox.Width">
<source>201</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">79</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.Height" resname="O:SpeicherungForm.O:LevelListBox.Height">
<source>249</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334974884</prop><prop prop-type="Status">6</prop><prop prop-type="Order">80</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.ItemHeight" resname="O:SpeicherungForm.O:LevelListBox.ItemHeight">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">81</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.TabOrder" resname="O:SpeicherungForm.O:LevelListBox.TabOrder">
<source>5</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">82</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelListBox.OnClick" resname="O:SpeicherungForm.O:LevelListBox.OnClick">
<source>LevelListBoxClick</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">83</prop><prop prop-type="Type">TListBox</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Left" resname="O:SpeicherungForm.O:ElPanel1.Left">
<source>112</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">84</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Top" resname="O:SpeicherungForm.O:ElPanel1.Top">
<source>336</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">85</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Width" resname="O:SpeicherungForm.O:ElPanel1.Width">
<source>201</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">86</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Height" resname="O:SpeicherungForm.O:ElPanel1.Height">
<source>80</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">87</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.BevelOuter" resname="O:SpeicherungForm.O:ElPanel1.BevelOuter">
<source>bvLowered</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">88</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.Color" resname="O:SpeicherungForm.O:ElPanel1.Color">
<source>clWindow</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">89</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.TabOrder" resname="O:SpeicherungForm.O:ElPanel1.TabOrder">
<source>6</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">90</prop><prop prop-type="Type">TPanel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">91</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Top">
<source>40</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">92</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Width">
<source>32</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">93</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">94</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3a.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li3a.Caption">
<source>'Größe:'</source>
<target>'Size:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">1</prop><prop prop-type="Order">95</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1b.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li1b.Left">
<source>96</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">96</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1b.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li1b.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">97</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1b.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li1b.Width">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">98</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1b.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li1b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">99</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1b.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li1b.Caption">
<source>'n/a'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">1</prop><prop prop-type="Order">100</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1a.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li1a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">101</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1a.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li1a.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">102</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1a.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li1a.Width">
<source>47</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">103</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1a.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li1a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">104</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li1a.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li1a.Caption">
<source>'Einheiten:'</source>
<target>'Enemies:'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">1</prop><prop prop-type="Order">105</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Left">
<source>96</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">106</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Top">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">107</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Width">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">108</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">109</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2b.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li2b.Caption">
<source>'n/a'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">1</prop><prop prop-type="Order">110</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">111</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Top">
<source>24</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">112</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Width">
<source>26</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">113</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">6</prop><prop prop-type="Order">114</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li2a.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li2a.Caption">
<source>'Boss:'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976042</prop><prop prop-type="Status">1</prop><prop prop-type="Order">115</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Left">
<source>96</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">116</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Top">
<source>40</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">117</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Width">
<source>17</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">118</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">119</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li3b.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li3b.Caption">
<source>'n/a'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">1</prop><prop prop-type="Order">120</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Left" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">121</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Top" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">122</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Width" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Width">
<source>135</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">123</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Height" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">124</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Caption">
<source>'Das Level ist nicht einlesbar!'</source>
<target>'Level cannot be read!'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">1</prop><prop prop-type="Order">125</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Charset" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">126</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Color" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Color">
<source>clMaroon</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">127</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Height" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">128</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Name" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">129</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Style" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">130</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.ParentFont" resname="O:SpeicherungForm.O:ElPanel1.O:liu.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">131</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liu.Visible" resname="O:SpeicherungForm.O:ElPanel1.O:liu.Visible">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">132</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Left" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">133</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Top" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Top">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">134</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Width" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Width">
<source>125</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">135</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Height" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">136</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Caption">
<source>'Bitte wählen Sie ein Level.'</source>
<target>'Please choose a level file.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">1</prop><prop prop-type="Order">137</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Charset" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Charset">
<source>DEFAULT_CHARSET</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">138</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Color" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Color">
<source>clNavy</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">139</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Height" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Height">
<source>-11</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">140</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Name" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Name">
<source>'MS Sans Serif'</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">141</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Style" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Font.Style">
<source>[]</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">142</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.ParentFont" resname="O:SpeicherungForm.O:ElPanel1.O:liw.ParentFont">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">143</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:liw.Visible" resname="O:SpeicherungForm.O:ElPanel1.O:liw.Visible">
<source>False</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">144</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4.Left" resname="O:SpeicherungForm.O:ElPanel1.O:li4.Left">
<source>8</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">145</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4.Top" resname="O:SpeicherungForm.O:ElPanel1.O:li4.Top">
<source>56</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">146</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4.Width" resname="O:SpeicherungForm.O:ElPanel1.O:li4.Width">
<source>118</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">147</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4.Height" resname="O:SpeicherungForm.O:ElPanel1.O:li4.Height">
<source>13</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">148</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:ElPanel1.O:li4.Caption" resname="O:SpeicherungForm.O:ElPanel1.O:li4.Caption">
<source>'Name / Autor unbekannt'</source>
<target>'Name / Author unknown.'</target>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">1</prop><prop prop-type="Order">149</prop><prop prop-type="Type">TLabel</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelNumber.Left" resname="O:SpeicherungForm.O:LevelNumber.Left">
<source>112</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">150</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelNumber.Top" resname="O:SpeicherungForm.O:LevelNumber.Top">
<source>16</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">151</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelNumber.Width" resname="O:SpeicherungForm.O:LevelNumber.Width">
<source>201</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">152</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelNumber.Height" resname="O:SpeicherungForm.O:LevelNumber.Height">
<source>22</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">153</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelNumber.MaxValue" resname="O:SpeicherungForm.O:LevelNumber.MaxValue">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">154</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelNumber.MinValue" resname="O:SpeicherungForm.O:LevelNumber.MinValue">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">155</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelNumber.TabOrder" resname="O:SpeicherungForm.O:LevelNumber.TabOrder">
<source>7</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">156</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
<trans-unit id="O:SpeicherungForm.O:LevelNumber.Value" resname="O:SpeicherungForm.O:LevelNumber.Value">
<source>0</source>
<prop-group name="ITEFieldProp">
<prop prop-type="Created">45406.0334976273</prop><prop prop-type="Status">6</prop><prop prop-type="Order">157</prop><prop prop-type="Type">TSpinEdit</prop><prop prop-type="Localize">1</prop></prop-group>
</trans-unit>
</body>
</file>
</xliff>
/ENU/SpaceMission_DRC.RES
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/ENU/SpaceMission_DRC.rc
0,0 → 1,1053
/* VER360
Generiert vom Embarcadero Delphi Pascal Compiler,
weil -GD oder --drc an den Compiler übergeben wurde.
 
Diese Datei enthält vom Compiler erzeugte Ressourcen, die an die ausführbare Datei gebunden wurden. Wenn diese Datei leer ist, dann wurden keine vom Compiler generierten Ressourcen an die erzeugte ausführbare Datei gebunden.
*/
 
#define SpaceMission_SAlreadyStarted 65008
#define SpaceMission_STitel 65009
#define SpaceMission_SFileMissing 65010
#define GamMain_SLevelInvalid 65024
#define GamMain_SNormalGame 65025
#define GamMain_SRandomGame 65026
#define GamMain_SLevelEditor 65027
#define GamMain_SMissionSuccessful 65028
#define GamMain_SMissionFailed 65029
#define GamMain_SPunkte 65030
#define GamMain_SLevel 65031
#define GamMain_SLifes 65032
#define GamMain_SInfLifes 65033
#define GamMain_SBossLifes 65034
#define GamMain_SEinheiten 65035
#define GamMain_SGameOver 65036
#define GamMain_SGewonnen 65037
#define GamMain_SLevelScene 65038
#define GamMain_SFileError 65039
#define Vcl_OleConst_SNoWindowHandle 65040
#define Vcl_OleConst_SInvalidLicense 65041
#define Vcl_OleConst_SNotLicensed 65042
#define Vcl_OleConst_sNoRunningObject 65043
#define Vcl_EdgeConst_SWebViewFailure 65044
#define Vcl_EdgeConst_SNoWebView 65045
#define IEConst_sNotSupportedByEdge 65046
#define System_RegularExpressionsConsts_SRegExMissingExpression 65047
#define System_RegularExpressionsConsts_SRegExExpressionError 65048
#define System_RegularExpressionsConsts_SRegExStudyError 65049
#define System_RegularExpressionsConsts_SRegExMatchRequired 65050
#define System_RegularExpressionsConsts_SRegExStringsRequired 65051
#define System_RegularExpressionsConsts_SRegExIndexOutOfBounds 65052
#define GamMain_SWeiterMitLeertaste 65053
#define GamMain_SAppTitle 65054
#define GamMain_SPauseTitle 65055
#define GamSpeicherung_SDeleteSaveGame 65056
#define GamSpeicherung_SNoValidSaveGameName 65057
#define GamSpeicherung_SEmptySaveGameName 65058
#define GamSpeicherung_SReplaceSaveGame 65059
#define GamSpeicherung_SNoNA 65060
#define GamSpeicherung_SIsNormalLevel 65061
#define GamSpeicherung_SIsRandomLevel 65062
#define GamSpeicherung_SHasAttachedLevel 65063
#define ComInfo_SVersion 65064
#define GamCheat_SCheatUnlocked 65065
#define GamCheat_SCheckAlreadyUnlocked 65066
#define GamCheat_SNoCheat 65067
#define GamCheat_SDisableCheat 65068
#define GamCheat_SCheatDisabled 65069
#define Vcl_OleConst_SBadPropValue 65070
#define Vcl_OleConst_SCannotActivate 65071
#define Global_SDownloadError 65072
#define Global_SNewProgramVersionAvailable 65073
#define Global_SNoUpdateAvailable 65074
#define ComLevelReader_SLevelFileFolder 65075
#define ComLevelReader_SLevelFileSubFolder 65076
#define ComLevelReader_SExtraContentAfterLine 65077
#define ComLevelReader_SInvalidXCoord 65078
#define ComLevelReader_SInvalidYCoord 65079
#define ComLevelReader_SInvalidLevelFile 65080
#define ComLevelReader_SEnemyTypeNotImplemented 65081
#define ComLevelReader_SLevelEnemyLineComment 65082
#define ComLevelReader_SInvalidFile 65083
#define GamSpeicherung_SSaveGameFileNotFound 65084
#define GamSpeicherung_SNa 65085
#define GamSpeicherung_SSaveGameFolder 65086
#define GamSpeicherung_SSaveGameSubFolder 65087
#define Vcl_Imaging_pnglang_EPNGCannotAssignChunkText 65088
#define Vcl_Imaging_pnglang_EPNGUnexpectedEndText 65089
#define Vcl_Imaging_pnglang_EPNGNoImageDataText 65090
#define Vcl_Imaging_pnglang_EPNGCannotAddChunkText 65091
#define Vcl_Imaging_pnglang_EPNGCannotAddInvalidImageText 65092
#define Vcl_Imaging_pnglang_EPNGCouldNotLoadResourceText 65093
#define Vcl_Imaging_pnglang_EPNGOutMemoryText 65094
#define Vcl_Imaging_pnglang_EPNGCannotChangeTransparentText 65095
#define Vcl_Imaging_pnglang_EPNGHeaderNotPresentText 65096
#define Vcl_Imaging_pnglang_EInvalidNewSize 65097
#define Vcl_Imaging_pnglang_EInvalidSpec 65098
#define Vcl_Imaging_pnglang_EPNGInvalidBitDepthText 65099
#define Vcl_Imaging_JConsts_sChangeJPGSize 65100
#define Vcl_Imaging_JConsts_sJPEGError 65101
#define Vcl_Imaging_JConsts_sJPEGImageFile 65102
#define Global_Cheat1Text 65103
#define DXConsts_SNotSupportGraphicFile 65104
#define DXConsts_SInvalidDXTFile 65105
#define DXConsts_SCannotLoadGraphic 65106
#define Vcl_Imaging_pnglang_EPngInvalidCRCText 65107
#define Vcl_Imaging_pnglang_EPNGInvalidIHDRText 65108
#define Vcl_Imaging_pnglang_EPNGMissingMultipleIDATText 65109
#define Vcl_Imaging_pnglang_EPNGZLIBErrorText 65110
#define Vcl_Imaging_pnglang_EPNGInvalidPaletteText 65111
#define Vcl_Imaging_pnglang_EPNGInvalidFileHeaderText 65112
#define Vcl_Imaging_pnglang_EPNGIHDRNotFirstText 65113
#define Vcl_Imaging_pnglang_EPNGSizeExceedsText 65114
#define Vcl_Imaging_pnglang_EPNGUnknownPalEntryText 65115
#define Vcl_Imaging_pnglang_EPNGUnknownCriticalChunkText 65116
#define Vcl_Imaging_pnglang_EPNGUnknownCompressionText 65117
#define Vcl_Imaging_pnglang_EPNGUnknownInterlaceText 65118
#define Vcl_Imaging_pnglang_EPNGUnknownColorTypeText 65119
#define DXConsts_SListIndexError 65120
#define DXConsts_SScanline 65121
#define DXConsts_SNoForm 65122
#define DXConsts_SSinceDirectX6 65123
#define DXConsts_SSinceDirectX7 65124
#define DXConsts_S3DDeviceNotFound 65125
#define DXConsts_SDisplayModeChange 65126
#define DXConsts_SDisplayModeCannotAcquired 65127
#define DXConsts_SInvalidDIB 65128
#define DXConsts_SInvalidDIBBitCount 65129
#define DXConsts_SInvalidDIBPixelFormat 65130
#define DXConsts_SInvalidWave 65131
#define DXConsts_SInvalidDisplayBitCount 65132
#define DXConsts_SInvalidWaveFormat 65133
#define DXConsts_SStreamOpend 65134
#define DXConsts_SNecessaryDirectInputUseMouse 65135
#define DXConsts_SDirectDrawClipper 65136
#define DXConsts_SDirectDrawSurface 65137
#define DXConsts_SDirectDrawPrimarySurface 65138
#define DXConsts_SDirectSoundBuffer 65139
#define DXConsts_SDirectSoundPrimaryBuffer 65140
#define DXConsts_STexture 65141
#define DXConsts_SNotMade 65142
#define DXConsts_SStreamNotOpend 65143
#define DXConsts_SCannotMade 65144
#define DXConsts_SCannotInitialized 65145
#define DXConsts_SCannotChanged 65146
#define DXConsts_SCannotLock 65147
#define DXConsts_SDLLNotLoaded 65148
#define DXConsts_SImageNotFound 65149
#define DXConsts_SWaveNotFound 65150
#define DXConsts_SEffectNotFound 65151
#define Vcl_Consts_SStyleFormatError 65152
#define Vcl_Consts_SStyleHookClassRegistered 65153
#define Vcl_Consts_SStyleHookClassNotRegistered 65154
#define Vcl_Consts_SStyleInvalidParameter 65155
#define Vcl_Consts_SStyleFeatureNotSupported 65156
#define Vcl_Consts_SStyleNotRegistered 65157
#define Vcl_Consts_SStyleUnregisterError 65158
#define Vcl_Consts_SStyleNotRegisteredNoName 65159
#define Vcl_Consts_sBeginInvokeNoHandle 65160
#define System_Win_ComConst_SOleError 65161
#define System_Win_ComConst_SNoMethod 65162
#define System_Win_ComConst_SVarNotObject 65163
#define System_Win_ComConst_STooManyParams 65164
#define System_Win_ComConst_SDCOMNotInstalled 65165
#define DXConsts_SDirectDraw 65166
#define DXConsts_SDirectSound 65167
#define Vcl_Consts_SDomain 65168
#define Vcl_Consts_SLogin 65169
#define Vcl_Consts_SErrorSettingCount 65170
#define Vcl_Consts_SListBoxMustBeVirtual 65171
#define Vcl_Consts_STrayIconRemoveError 65172
#define Vcl_Consts_SWindowsVistaRequired 65173
#define Vcl_Consts_STaskDlgButtonCaption 65174
#define Vcl_Consts_STaskDlgRadioButtonCaption 65175
#define Vcl_Consts_SInvalidTaskDlgButtonCaption 65176
#define Vcl_Consts_SStyleLoadError 65177
#define Vcl_Consts_SStyleLoadErrors 65178
#define Vcl_Consts_SStyleRegisterError 65179
#define Vcl_Consts_SStyleClassRegisterError 65180
#define Vcl_Consts_SStyleNotFound 65181
#define Vcl_Consts_SStyleClassNotFound 65182
#define Vcl_Consts_SStyleInvalidHandle 65183
#define Vcl_Consts_SInsertLineError 65184
#define Vcl_Consts_SIconToClipboard 65185
#define Vcl_Consts_SCannotOpenClipboard 65186
#define Vcl_Consts_SInvalidMemoSize 65187
#define Vcl_Consts_SInvalidPrinterOp 65188
#define Vcl_Consts_SNoDefaultPrinter 65189
#define Vcl_Consts_SDuplicateMenus 65190
#define Vcl_Consts_SDockedCtlNeedsName 65191
#define Vcl_Consts_SDockTreeRemoveError 65192
#define Vcl_Consts_SDockZoneNotFound 65193
#define Vcl_Consts_SDockZoneHasNoCtl 65194
#define Vcl_Consts_SDockZoneVersionConflict 65195
#define Vcl_Consts_SPromptArrayTooShort 65196
#define Vcl_Consts_SPromptArrayEmpty 65197
#define Vcl_Consts_SUsername 65198
#define Vcl_Consts_SPassword 65199
#define Vcl_Consts_SmkcSpace 65200
#define Vcl_Consts_SmkcPgUp 65201
#define Vcl_Consts_SmkcPgDn 65202
#define Vcl_Consts_SmkcEnd 65203
#define Vcl_Consts_SmkcHome 65204
#define Vcl_Consts_SmkcLeft 65205
#define Vcl_Consts_SmkcUp 65206
#define Vcl_Consts_SmkcRight 65207
#define Vcl_Consts_SmkcDown 65208
#define Vcl_Consts_SmkcIns 65209
#define Vcl_Consts_SmkcDel 65210
#define Vcl_Consts_SmkcShift 65211
#define Vcl_Consts_SmkcCtrl 65212
#define Vcl_Consts_SmkcAlt 65213
#define Vcl_Consts_SOutOfRange 65214
#define Vcl_Consts_sAllFilter 65215
#define Vcl_Consts_SMsgDlgYes 65216
#define Vcl_Consts_SMsgDlgNo 65217
#define Vcl_Consts_SMsgDlgOK 65218
#define Vcl_Consts_SMsgDlgCancel 65219
#define Vcl_Consts_SMsgDlgHelp 65220
#define Vcl_Consts_SMsgDlgAbort 65221
#define Vcl_Consts_SMsgDlgRetry 65222
#define Vcl_Consts_SMsgDlgIgnore 65223
#define Vcl_Consts_SMsgDlgAll 65224
#define Vcl_Consts_SMsgDlgNoToAll 65225
#define Vcl_Consts_SMsgDlgYesToAll 65226
#define Vcl_Consts_SMsgDlgClose 65227
#define Vcl_Consts_SmkcBkSp 65228
#define Vcl_Consts_SmkcTab 65229
#define Vcl_Consts_SmkcEsc 65230
#define Vcl_Consts_SmkcEnter 65231
#define Vcl_Consts_SHelpButton 65232
#define Vcl_Consts_SCloseButton 65233
#define Vcl_Consts_SIgnoreButton 65234
#define Vcl_Consts_SRetryButton 65235
#define Vcl_Consts_SAbortButton 65236
#define Vcl_Consts_SAllButton 65237
#define Vcl_Consts_SCannotDragForm 65238
#define Vcl_Consts_SVMetafiles 65239
#define Vcl_Consts_SVEnhMetafiles 65240
#define Vcl_Consts_SVIcons 65241
#define Vcl_Consts_SVBitmaps 65242
#define Vcl_Consts_SVTIFFImages 65243
#define Vcl_Consts_SMsgDlgWarning 65244
#define Vcl_Consts_SMsgDlgError 65245
#define Vcl_Consts_SMsgDlgInformation 65246
#define Vcl_Consts_SMsgDlgConfirm 65247
#define Vcl_Consts_SMenuNotFound 65248
#define Vcl_Consts_SNoTimers 65249
#define Vcl_Consts_SNotPrinting 65250
#define Vcl_Consts_SPrinting 65251
#define Vcl_Consts_SPrinterIndexError 65252
#define Vcl_Consts_SInvalidPrinter 65253
#define Vcl_Consts_SDeviceOnPort 65254
#define Vcl_Consts_SGroupIndexTooLow 65255
#define Vcl_Consts_SNoMDIForm 65256
#define Vcl_Consts_SImageCanvasNeedsBitmap 65257
#define Vcl_Consts_SControlParentSetToSelf 65258
#define Vcl_Consts_SControlNonMainThreadUsage 65259
#define Vcl_Consts_SOKButton 65260
#define Vcl_Consts_SCancelButton 65261
#define Vcl_Consts_SYesButton 65262
#define Vcl_Consts_SNoButton 65263
#define Vcl_Consts_SImageIndexError 65264
#define Vcl_Consts_SImageReadFail 65265
#define Vcl_Consts_SImageWriteFail 65266
#define Vcl_Consts_SWindowDCError 65267
#define Vcl_Consts_SWindowClass 65268
#define Vcl_Consts_SCannotFocus 65269
#define Vcl_Consts_SParentRequired 65270
#define Vcl_Consts_SControlPath 65271
#define Vcl_Consts_SParentGivenNotAParent 65272
#define Vcl_Consts_SMDIChildNotVisible 65273
#define Vcl_Consts_SVisibleChanged 65274
#define Vcl_Consts_SCannotShowModal 65275
#define Vcl_Consts_SScrollBarRange 65276
#define Vcl_Consts_SPropertyOutOfRange 65277
#define Vcl_Consts_SMenuIndexError 65278
#define Vcl_Consts_SMenuReinserted 65279
#define Vcl_Consts_SInvalidImage 65280
#define Vcl_Consts_SScanLine 65281
#define Vcl_Consts_SChangeIconSize 65282
#define Vcl_Consts_SChangeWicSize 65283
#define Vcl_Consts_SOleGraphic 65284
#define Vcl_Consts_SUnknownExtension 65285
#define Vcl_Consts_SUnknownClipboardFormat 65286
#define Vcl_Consts_SUnknownStreamFormat 65287
#define Vcl_Consts_SOutOfResources 65288
#define Vcl_Consts_SNoCanvasHandle 65289
#define Vcl_Consts_SInvalidTextFormatFlag 65290
#define Vcl_Consts_SInvalidFrameIndex 65291
#define Vcl_Consts_SInvalidImageSize 65292
#define Vcl_Consts_SInvalidImageList 65293
#define Vcl_Consts_SReplaceImage 65294
#define Vcl_Consts_SInsertImage 65295
#define System_RTLConsts_SWinRTInstanceError 65296
#define System_RTLConsts_sObserverUnsupported 65297
#define System_RTLConsts_sObserverMultipleSingleCast 65298
#define System_RTLConsts_sObserverNoInterface 65299
#define System_RTLConsts_sObserverNoSinglecastFound 65300
#define System_RTLConsts_sObserverNoMulticastFound 65301
#define System_RTLConsts_sObserverNotAvailable 65302
#define System_RTLConsts_SInvalidDateString 65303
#define System_RTLConsts_SInvalidTimeString 65304
#define System_RTLConsts_SInvalidOffsetString 65305
#define System_RTLConsts_sMustWaitOnOneEvent 65306
#define System_RTLConsts_sBeginInvokeDestroying 65307
#define Vcl_Consts_SInvalidBitmap 65308
#define Vcl_Consts_SInvalidIcon 65309
#define Vcl_Consts_SInvalidMetafile 65310
#define Vcl_Consts_SInvalidPixelFormat 65311
#define System_RTLConsts_SWindowsServer2008 65312
#define System_RTLConsts_SWindows7 65313
#define System_RTLConsts_SWindowsServer2008R2 65314
#define System_RTLConsts_SWindows2000 65315
#define System_RTLConsts_SWindowsXP 65316
#define System_RTLConsts_SWindowsServer2003 65317
#define System_RTLConsts_SWindowsServer2003R2 65318
#define System_RTLConsts_SWindowsServer2012 65319
#define System_RTLConsts_SWindowsServer2012R2 65320
#define System_RTLConsts_SWindowsServer2016 65321
#define System_RTLConsts_SWindowsServer2019 65322
#define System_RTLConsts_SWindowsServer2022 65323
#define System_RTLConsts_SWindows8 65324
#define System_RTLConsts_SWindows8Point1 65325
#define System_RTLConsts_SWindows10 65326
#define System_RTLConsts_SWindows11 65327
#define System_RTLConsts_SGenericItemNotFound 65328
#define System_RTLConsts_SGenericDuplicateItem 65329
#define System_RTLConsts_SInsufficientRtti 65330
#define System_RTLConsts_SParameterCountMismatch 65331
#define System_RTLConsts_SNonPublicType 65332
#define System_RTLConsts_SByRefArgMismatch 65333
#define System_RTLConsts_SPropIsReadOnly 65334
#define System_RTLConsts_SPropIsWriteOnly 65335
#define System_RTLConsts_SInvalidRttiDestroy 65336
#define System_RTLConsts_SServiceNotFound 65337
#define System_RTLConsts_SVersionStr 65338
#define System_RTLConsts_SSPVersionStr 65339
#define System_RTLConsts_SVersion32 65340
#define System_RTLConsts_SVersion64 65341
#define System_RTLConsts_SWindows 65342
#define System_RTLConsts_SWindowsVista 65343
#define System_RTLConsts_sSpinCountOutOfRange 65344
#define System_RTLConsts_sTimespanTooLong 65345
#define System_RTLConsts_sInvalidTimespanDuration 65346
#define System_RTLConsts_sTimespanValueCannotBeNan 65347
#define System_RTLConsts_sCannotNegateTimespan 65348
#define System_RTLConsts_sInvalidTimespanFormat 65349
#define System_RTLConsts_sTimespanElementTooLong 65350
#define System_RTLConsts_SNoContext 65351
#define System_RTLConsts_SNoContextFound 65352
#define System_RTLConsts_SNoIndex 65353
#define System_RTLConsts_SNoSearch 65354
#define System_RTLConsts_SNoTableOfContents 65355
#define System_RTLConsts_SNoTopics 65356
#define System_RTLConsts_SNothingFound 65357
#define System_RTLConsts_SArgumentOutOfRange 65358
#define System_RTLConsts_SArgumentNil 65359
#define System_RTLConsts_SThreadExternalCheckTerminated 65360
#define System_RTLConsts_SThreadExternalSetReturnValue 65361
#define System_RTLConsts_SParamIsNil 65362
#define System_RTLConsts_SParamIsNegative 65363
#define System_RTLConsts_SInputBufferExceed 65364
#define System_RTLConsts_SInvalidCharsInPath 65365
#define System_RTLConsts_SInvalidCharsInFileName 65366
#define System_RTLConsts_SEmptyFileName 65367
#define System_RTLConsts_SPathTooLong 65368
#define System_RTLConsts_SDriveNotFound 65369
#define System_RTLConsts_hNoFilterViewer 65370
#define System_RTLConsts_sArgumentInvalid 65371
#define System_RTLConsts_sInvalidStringAndObjectArrays 65372
#define System_RTLConsts_sSameArrays 65373
#define System_RTLConsts_sNoConstruct 65374
#define System_RTLConsts_sInvalidTimeoutValue 65375
#define System_RTLConsts_SReadError 65376
#define System_RTLConsts_SReadOnlyProperty 65377
#define System_RTLConsts_SRegCreateFailed 65378
#define System_RTLConsts_SRegGetDataFailed 65379
#define System_RTLConsts_SRegSetDataFailed 65380
#define System_RTLConsts_SResNotFound 65381
#define System_RTLConsts_SSeekNotImplemented 65382
#define System_RTLConsts_SSortedListError 65383
#define System_RTLConsts_SUnknownGroup 65384
#define System_RTLConsts_SUnknownProperty 65385
#define System_RTLConsts_SWriteError 65386
#define System_RTLConsts_SThreadCreateError 65387
#define System_RTLConsts_SThreadError 65388
#define System_RTLConsts_SThreadExternalTerminate 65389
#define System_RTLConsts_SThreadExternalWait 65390
#define System_RTLConsts_SThreadStartError 65391
#define System_RTLConsts_SFCreateErrorEx 65392
#define System_RTLConsts_SFOpenErrorEx 65393
#define System_RTLConsts_SInvalidImage 65394
#define System_RTLConsts_SInvalidName 65395
#define System_RTLConsts_SInvalidProperty 65396
#define System_RTLConsts_SInvalidPropertyPath 65397
#define System_RTLConsts_SInvalidPropertyValue 65398
#define System_RTLConsts_SInvalidRegType 65399
#define System_RTLConsts_SListCapacityError 65400
#define System_RTLConsts_SListCountError 65401
#define System_RTLConsts_SListIndexError 65402
#define System_RTLConsts_SListIndexErrorRangeReason 65403
#define System_RTLConsts_SListIndexErrorEmptyReason 65404
#define System_RTLConsts_SMemoryStreamError 65405
#define System_RTLConsts_SNoComSupport 65406
#define System_RTLConsts_SPropertyException 65407
#define System_SysConst_SInvalidCharCount 65408
#define System_SysConst_SInvalidDestinationIndex 65409
#define System_SysConst_SInvalidCodePage 65410
#define System_SysConst_SInvalidEncodingName 65411
#define System_SysConst_SNoMappingForUnicodeCharacter 65412
#define System_SysConst_SInvalidStringBaseIndex 65413
#define System_RTLConsts_SAncestorNotFound 65414
#define System_RTLConsts_SAssignError 65415
#define System_RTLConsts_SBitsIndexError 65416
#define System_RTLConsts_SCantWriteResourceStreamError 65417
#define System_RTLConsts_SCheckSynchronizeError 65418
#define System_RTLConsts_SClassNotFound 65419
#define System_RTLConsts_SDuplicateClass 65420
#define System_RTLConsts_SDuplicateItem 65421
#define System_RTLConsts_SDuplicateName 65422
#define System_RTLConsts_SDuplicateString 65423
#define System_SysConst_SShortDayNameWed 65424
#define System_SysConst_SShortDayNameThu 65425
#define System_SysConst_SShortDayNameFri 65426
#define System_SysConst_SShortDayNameSat 65427
#define System_SysConst_SLongDayNameSun 65428
#define System_SysConst_SLongDayNameMon 65429
#define System_SysConst_SLongDayNameTue 65430
#define System_SysConst_SLongDayNameWed 65431
#define System_SysConst_SLongDayNameThu 65432
#define System_SysConst_SLongDayNameFri 65433
#define System_SysConst_SLongDayNameSat 65434
#define System_SysConst_SCannotCreateDir 65435
#define System_SysConst_SInvalidSourceArray 65436
#define System_SysConst_SInvalidDestinationArray 65437
#define System_SysConst_SCharIndexOutOfBounds 65438
#define System_SysConst_SByteIndexOutOfBounds 65439
#define System_SysConst_SShortMonthNameDec 65440
#define System_SysConst_SLongMonthNameJan 65441
#define System_SysConst_SLongMonthNameFeb 65442
#define System_SysConst_SLongMonthNameMar 65443
#define System_SysConst_SLongMonthNameApr 65444
#define System_SysConst_SLongMonthNameMay 65445
#define System_SysConst_SLongMonthNameJun 65446
#define System_SysConst_SLongMonthNameJul 65447
#define System_SysConst_SLongMonthNameAug 65448
#define System_SysConst_SLongMonthNameSep 65449
#define System_SysConst_SLongMonthNameOct 65450
#define System_SysConst_SLongMonthNameNov 65451
#define System_SysConst_SLongMonthNameDec 65452
#define System_SysConst_SShortDayNameSun 65453
#define System_SysConst_SShortDayNameMon 65454
#define System_SysConst_SShortDayNameTue 65455
#define System_SysConst_SAssertError 65456
#define System_SysConst_SAbstractError 65457
#define System_SysConst_SModuleAccessViolation 65458
#define System_SysConst_SOSError 65459
#define System_SysConst_SUnkOSError 65460
#define System_SysConst_SShortMonthNameJan 65461
#define System_SysConst_SShortMonthNameFeb 65462
#define System_SysConst_SShortMonthNameMar 65463
#define System_SysConst_SShortMonthNameApr 65464
#define System_SysConst_SShortMonthNameMay 65465
#define System_SysConst_SShortMonthNameJun 65466
#define System_SysConst_SShortMonthNameJul 65467
#define System_SysConst_SShortMonthNameAug 65468
#define System_SysConst_SShortMonthNameSep 65469
#define System_SysConst_SShortMonthNameOct 65470
#define System_SysConst_SShortMonthNameNov 65471
#define System_SysConst_SVarTypeTooManyCustom 65472
#define System_SysConst_SVarTypeCouldNotConvert 65473
#define System_SysConst_SVarTypeConvertOverflow 65474
#define System_SysConst_SVarOverflow 65475
#define System_SysConst_SVarInvalid 65476
#define System_SysConst_SVarBadType 65477
#define System_SysConst_SVarNotImplemented 65478
#define System_SysConst_SVarUnexpected 65479
#define System_SysConst_SExternalException 65480
#define System_SysConst_SAssertionFailed 65481
#define System_SysConst_SIntfCastError 65482
#define System_SysConst_SSafecallException 65483
#define System_SysConst_SMonitorLockException 65484
#define System_SysConst_SNoMonitorSupportException 65485
#define System_SysConst_SNotImplemented 65486
#define System_SysConst_SObjectDisposed 65487
#define System_SysConst_SArgumentMissing 65488
#define System_SysConst_SDispatchError 65489
#define System_SysConst_SReadAccess 65490
#define System_SysConst_SWriteAccess 65491
#define System_SysConst_SExecuteAccess 65492
#define System_SysConst_SInvalidAccess 65493
#define System_SysConst_SVarArrayCreate 65494
#define System_SysConst_SVarArrayBounds 65495
#define System_SysConst_SVarArrayLocked 65496
#define System_SysConst_SInvalidVarCast 65497
#define System_SysConst_SInvalidVarOp 65498
#define System_SysConst_SInvalidVarNullOp 65499
#define System_SysConst_SInvalidVarOpWithHResultWithPrefix 65500
#define System_SysConst_SVarTypeOutOfRangeWithPrefix 65501
#define System_SysConst_SVarTypeAlreadyUsedWithPrefix 65502
#define System_SysConst_SVarTypeNotUsableWithPrefix 65503
#define System_SysConst_SRangeError 65504
#define System_SysConst_SIntOverflow 65505
#define System_SysConst_SInvalidOp 65506
#define System_SysConst_SZeroDivide 65507
#define System_SysConst_SOverflow 65508
#define System_SysConst_SUnderflow 65509
#define System_SysConst_SInvalidPointer 65510
#define System_SysConst_SInvalidCast 65511
#define System_SysConst_SAccessViolationArg3 65512
#define System_SysConst_SAccessViolationNoArg 65513
#define System_SysConst_SStackOverflow 65514
#define System_SysConst_SControlC 65515
#define System_SysConst_SPrivilege 65516
#define System_SysConst_SException 65517
#define System_SysConst_SExceptTitle 65518
#define System_SysConst_SInvalidFormat 65519
#define System_SysConst_SUnknown 65520
#define System_SysConst_SInvalidInteger 65521
#define System_SysConst_SInvalidTimeStamp 65522
#define System_SysConst_SInvalidGUID 65523
#define System_SysConst_STimeEncodeError 65524
#define System_SysConst_SDateEncodeError 65525
#define System_SysConst_SOutOfMemory 65526
#define System_SysConst_SInOutError 65527
#define System_SysConst_SFileNotFound 65528
#define System_SysConst_SInvalidUnknownFilename 65529
#define System_SysConst_STooManyOpenFiles 65530
#define System_SysConst_SAccessDenied 65531
#define System_SysConst_SEndOfFile 65532
#define System_SysConst_SDiskFull 65533
#define System_SysConst_SInvalidInput 65534
#define System_SysConst_SDivByZero 65535
STRINGTABLE
BEGIN
SpaceMission_SAlreadyStarted, L"Game is already started."
SpaceMission_STitel, L"SpaceMission"
SpaceMission_SFileMissing, L"%s is missing. Please reinstall SpaceMission."
GamMain_SLevelInvalid, L"The file for level %d is invalid. The level will be skipped!"
GamMain_SNormalGame, L"Normal game"
GamMain_SRandomGame, L"Random level"
GamMain_SLevelEditor, L"Level Editor"
GamMain_SMissionSuccessful, L"Mission complete!"
GamMain_SMissionFailed, L"Mission failed!"
GamMain_SPunkte, L"Points: %s"
GamMain_SLevel, L"Level: %d"
GamMain_SLifes, L"Lives: %d"
GamMain_SInfLifes, L""
GamMain_SBossLifes, L"Boss: %d"
GamMain_SEinheiten, L"Enemies: %d"
GamMain_SGameOver, L"Game Over!"
GamMain_SGewonnen, L"Complete!"
GamMain_SLevelScene, L"Level %d"
GamMain_SFileError, L"The file cannot be opened by SpaceMission."
Vcl_OleConst_SNoWindowHandle, L"Could not obtain OLE control window handle"
Vcl_OleConst_SInvalidLicense, L"License information for %s is invalid"
Vcl_OleConst_SNotLicensed, L"License information for %s not found. You cannot use this control in design mode"
Vcl_OleConst_sNoRunningObject, L"Unable to retrieve a pointer to a running object registered with OLE for %s/%s"
Vcl_EdgeConst_SWebViewFailure, L"Edge-Browser control cannot be created"
Vcl_EdgeConst_SNoWebView, L"WebView2 control is not initialized"
IEConst_sNotSupportedByEdge, L"Action not supported by Edge WebView2 control"
System_RegularExpressionsConsts_SRegExMissingExpression, L"A regular expression is required in RegEx"
System_RegularExpressionsConsts_SRegExExpressionError, L"Error with regular expression at offset %d: %s"
System_RegularExpressionsConsts_SRegExStudyError, L"Error while evaluating: %s"
System_RegularExpressionsConsts_SRegExMatchRequired, L"Match required"
System_RegularExpressionsConsts_SRegExStringsRequired, L"Strings parameter must not be nil"
System_RegularExpressionsConsts_SRegExIndexOutOfBounds, L"Index exceeds maximum (%d)"
GamMain_SWeiterMitLeertaste, L"Continue with spacebar"
GamMain_SAppTitle, L"SpaceMission %s"
GamMain_SPauseTitle, L"%s [Pause]"
GamSpeicherung_SDeleteSaveGame, L"Do you want to delete this savestate?"
GamSpeicherung_SNoValidSaveGameName, L"This is not a valid savegame"
GamSpeicherung_SEmptySaveGameName, L"Please enter a name for the savegame"
GamSpeicherung_SReplaceSaveGame, L"Savegame already exists. Replace?"
GamSpeicherung_SNoNA, L"n/a"
GamSpeicherung_SIsNormalLevel, L"This is a normal level"
GamSpeicherung_SIsRandomLevel, L"This is a random level"
GamSpeicherung_SHasAttachedLevel, L"%s with level"
ComInfo_SVersion, L"Version %s"
GamCheat_SCheatUnlocked, L"Check was unlocked!"
GamCheat_SCheckAlreadyUnlocked, L"This cheat is already unlocked!"
GamCheat_SNoCheat, L"This is not a valid cheat code"
GamCheat_SDisableCheat, L"Disable this cheat?"
GamCheat_SCheatDisabled, L"Cheat was disabled!"
Vcl_OleConst_SBadPropValue, L"'%s' is not a valid property value"
Vcl_OleConst_SCannotActivate, L"OLE control activation failed"
Global_SDownloadError, L"Could not download version information from the ViaThinkSoft server. Please try again later."
Global_SNewProgramVersionAvailable, L"A new program version is available! Download now?"
Global_SNoUpdateAvailable, L"You are already using the latest version"
ComLevelReader_SLevelFileFolder, L"Levels"
ComLevelReader_SLevelFileSubFolder, L"SpaceMission"
ComLevelReader_SExtraContentAfterLine, L"Line %d is invalid (additional data at line end)"
ComLevelReader_SInvalidXCoord, L"X-Coordinate must be a multiple of %d."
ComLevelReader_SInvalidYCoord, L"Y-Coordinate must be a multiple of %d."
ComLevelReader_SInvalidLevelFile, L"Level format not supported or file corrupt."
ComLevelReader_SEnemyTypeNotImplemented, L"Enemy type %d not supported. (Old game version?)"
ComLevelReader_SLevelEnemyLineComment, L"; Type XCoord YCoord Lives"
ComLevelReader_SInvalidFile, L"Savegame format not supported or file corrupt."
GamSpeicherung_SSaveGameFileNotFound, L"Savegame file not found"
GamSpeicherung_SNa, L"n/a"
GamSpeicherung_SSaveGameFolder, L"Save states"
GamSpeicherung_SSaveGameSubFolder, L"SpaceMission"
Vcl_Imaging_pnglang_EPNGCannotAssignChunkText, L"The chunks must be compatible to be assigned."
Vcl_Imaging_pnglang_EPNGUnexpectedEndText, L"This ""Portable Network Graphics"" image is invalid because the decoder found an unexpected end of the file."
Vcl_Imaging_pnglang_EPNGNoImageDataText, L"This ""Portable Network Graphics"" image contains no data."
Vcl_Imaging_pnglang_EPNGCannotAddChunkText, L"The program tried to add a existent critical chunk to the current image which is not allowed."
Vcl_Imaging_pnglang_EPNGCannotAddInvalidImageText, L"It's not allowed to add a new chunk because the current image is invalid."
Vcl_Imaging_pnglang_EPNGCouldNotLoadResourceText, L"The png image could not be loaded from the resource ID."
Vcl_Imaging_pnglang_EPNGOutMemoryText, L"Some operation could not be performed because the system is out of resources. Close some windows and try again."
Vcl_Imaging_pnglang_EPNGCannotChangeTransparentText, L"Setting bit transparency color is not allowed for png images containing alpha value for each pixel (COLOR_RGBALPHA and COLOR_GRAYSCALEALPHA)"
Vcl_Imaging_pnglang_EPNGHeaderNotPresentText, L"This operation is not valid because the current image contains no valid header."
Vcl_Imaging_pnglang_EInvalidNewSize, L"The new size provided for image resizing is invalid."
Vcl_Imaging_pnglang_EInvalidSpec, L"The ""Portable Network Graphics"" could not be created because invalid image type parameters have being provided."
Vcl_Imaging_pnglang_EPNGInvalidBitDepthText, L"The PNG image (Portable Network Graphics) could not be loaded because the picture contains an invalid bit depth."
Vcl_Imaging_JConsts_sChangeJPGSize, L"Cannot change the size of a JPEG image"
Vcl_Imaging_JConsts_sJPEGError, L"JPEG error #%d"
Vcl_Imaging_JConsts_sJPEGImageFile, L"JPEG Image File"
Global_Cheat1Text, L"Infinite lives!"
DXConsts_SNotSupportGraphicFile, L"Graphic format not suported"
DXConsts_SInvalidDXTFile, L"DXT file is invalid"
DXConsts_SCannotLoadGraphic, L"Can not load graphic"
Vcl_Imaging_pnglang_EPngInvalidCRCText, L"This ""Portable Network Graphics"" image is not valid because it contains invalid pieces of data (crc error)"
Vcl_Imaging_pnglang_EPNGInvalidIHDRText, L"The ""Portable Network Graphics"" image could not be loaded because one of its main piece of data (ihdr) might be corrupted"
Vcl_Imaging_pnglang_EPNGMissingMultipleIDATText, L"This ""Portable Network Graphics"" image is invalid because it has missing image parts."
Vcl_Imaging_pnglang_EPNGZLIBErrorText, L"The graphic could not be decompressed because part of the compressed data is invalid. \r\nDescription: "
Vcl_Imaging_pnglang_EPNGInvalidPaletteText, L"The ""Portable Network Graphics"" image contains an invalid palette."
Vcl_Imaging_pnglang_EPNGInvalidFileHeaderText, L"The read file is not a valid PNG picture (""Portable Network Graphics""), because it does not contain a valid header. The file is probably corrupt. Please try to receive a newer version of the file."
Vcl_Imaging_pnglang_EPNGIHDRNotFirstText, L"This ""Portable Network Graphics"" image is not supported or it might be invalid.\r\n(IHDR chunk is not the first)"
Vcl_Imaging_pnglang_EPNGSizeExceedsText, L"This PNG image (Portable Network Graphics) is not supported because width or height exceeds 65535 pixels."
Vcl_Imaging_pnglang_EPNGUnknownPalEntryText, L"There is no such palette entry."
Vcl_Imaging_pnglang_EPNGUnknownCriticalChunkText, L"This ""Portable Network Graphics"" image contains an unknown critical part which could not be decoded."
Vcl_Imaging_pnglang_EPNGUnknownCompressionText, L"This ""Portable Network Graphics"" image is encoded with an unknown compression scheme which could not be decoded."
Vcl_Imaging_pnglang_EPNGUnknownInterlaceText, L"This ""Portable Network Graphics"" image uses an unknown interlace scheme which could not be decoded."
Vcl_Imaging_pnglang_EPNGUnknownColorTypeText, L"This PNG image (Portable Network Graphics) contains an unknown color type which cannot be decoded."
DXConsts_SListIndexError, L"Index of the list exceeds the range. (%d)"
DXConsts_SScanline, L"Index of the scanning line exceeded the range. (%d)"
DXConsts_SNoForm, L"Form not found"
DXConsts_SSinceDirectX6, L"Requires DirectX 6.0 or later"
DXConsts_SSinceDirectX7, L"Requires DirectX 7.0 or later"
DXConsts_S3DDeviceNotFound, L"3D device not found"
DXConsts_SDisplayModeChange, L"Display mode cannot be changed (%dx%d %dbit)"
DXConsts_SDisplayModeCannotAcquired, L"Display mode cannot be acquired"
DXConsts_SInvalidDIB, L"DIB is invalid"
DXConsts_SInvalidDIBBitCount, L"Bitcount in invalid (%d)"
DXConsts_SInvalidDIBPixelFormat, L"PixelFormat in invalid"
DXConsts_SInvalidWave, L"Wave is invalid"
DXConsts_SInvalidDisplayBitCount, L"Display requires 8, 16, 24 or 32 bits"
DXConsts_SInvalidWaveFormat, L"Format is invalid"
DXConsts_SStreamOpend, L"Stream is already open"
DXConsts_SNecessaryDirectInputUseMouse, L"DirectInput is required for mouse support"
DXConsts_SDirectDrawClipper, L"Clipper"
DXConsts_SDirectDrawSurface, L"Surface"
DXConsts_SDirectDrawPrimarySurface, L"Primary Surface"
DXConsts_SDirectSoundBuffer, L"Sound Buffer"
DXConsts_SDirectSoundPrimaryBuffer, L"Primary Buffer"
DXConsts_STexture, L"Texture"
DXConsts_SNotMade, L"%s not made"
DXConsts_SStreamNotOpend, L"Stream not opened"
DXConsts_SCannotMade, L"%s cannot be made"
DXConsts_SCannotInitialized, L"%s cannot be initialized"
DXConsts_SCannotChanged, L"%s cannot be changed"
DXConsts_SCannotLock, L"%s cannot be locked"
DXConsts_SDLLNotLoaded, L"%s is not loaded"
DXConsts_SImageNotFound, L"Image '%s' not found"
DXConsts_SWaveNotFound, L"Wave '%s' not found"
DXConsts_SEffectNotFound, L"Effect '%s' not found"
Vcl_Consts_SStyleFormatError, L"Invalid style format"
Vcl_Consts_SStyleHookClassRegistered, L"Class '%s' is already registered for '%s'"
Vcl_Consts_SStyleHookClassNotRegistered, L"Class '%s' is not registered for '%s'"
Vcl_Consts_SStyleInvalidParameter, L"Paramter %s must not be nil"
Vcl_Consts_SStyleFeatureNotSupported, L"Function is not supported by this style"
Vcl_Consts_SStyleNotRegistered, L"Style '%s' is not registered"
Vcl_Consts_SStyleUnregisterError, L"The registry of the system style cannot be removed"
Vcl_Consts_SStyleNotRegisteredNoName, L"Style not registered"
Vcl_Consts_sBeginInvokeNoHandle, L"BeginInvoke cannot be called without superior window or window handle"
System_Win_ComConst_SOleError, L"OLE error %.8x"
System_Win_ComConst_SNoMethod, L"Method '%s' not supported by automation object"
System_Win_ComConst_SVarNotObject, L"Variant does not reference an automation object"
System_Win_ComConst_STooManyParams, L"Dispatch methods do not support more than 64 parameters"
System_Win_ComConst_SDCOMNotInstalled, L"DCOM not installed"
DXConsts_SDirectDraw, L"DirectDraw"
DXConsts_SDirectSound, L"DirectSound"
Vcl_Consts_SDomain, L"&Domain"
Vcl_Consts_SLogin, L"Login"
Vcl_Consts_SErrorSettingCount, L"Error setting %s.Count"
Vcl_Consts_SListBoxMustBeVirtual, L"Listbox (%s) style must be virtual in order to set Count"
Vcl_Consts_STrayIconRemoveError, L"Cannot remove shell notification icon"
Vcl_Consts_SWindowsVistaRequired, L"%s requires Windows Vista or later"
Vcl_Consts_STaskDlgButtonCaption, L"Button%d"
Vcl_Consts_STaskDlgRadioButtonCaption, L"RadioButton%d"
Vcl_Consts_SInvalidTaskDlgButtonCaption, L"Caption cannot be empty"
Vcl_Consts_SStyleLoadError, L"Style '%s' could not be loaded"
Vcl_Consts_SStyleLoadErrors, L"Styles %s could not be loaded"
Vcl_Consts_SStyleRegisterError, L"Style '%s' already registered"
Vcl_Consts_SStyleClassRegisterError, L"Style class '%s' already registered"
Vcl_Consts_SStyleNotFound, L"Style '%s' not found"
Vcl_Consts_SStyleClassNotFound, L"Style class '%s' not found"
Vcl_Consts_SStyleInvalidHandle, L"Invalid style handle"
Vcl_Consts_SInsertLineError, L"Unable to insert a line"
Vcl_Consts_SIconToClipboard, L"Clipboard does not support Icons"
Vcl_Consts_SCannotOpenClipboard, L"Cannot open clipboard: %s"
Vcl_Consts_SInvalidMemoSize, L"Text exceeds memo capacity"
Vcl_Consts_SInvalidPrinterOp, L"Operation not supported on selected printer"
Vcl_Consts_SNoDefaultPrinter, L"No default printer selected"
Vcl_Consts_SDuplicateMenus, L"Menu '%s' is already used by another form"
Vcl_Consts_SDockedCtlNeedsName, L"Docked control must have a name"
Vcl_Consts_SDockTreeRemoveError, L"Error removing control from dock tree"
Vcl_Consts_SDockZoneNotFound, L" - Dock zone not found"
Vcl_Consts_SDockZoneHasNoCtl, L" - Dock zone has no control"
Vcl_Consts_SDockZoneVersionConflict, L"Error loading dock zone from the stream. Expecting version %d, but found %d."
Vcl_Consts_SPromptArrayTooShort, L"Length of the value array must >= length of prompt array"
Vcl_Consts_SPromptArrayEmpty, L"Prompt array must not be empty"
Vcl_Consts_SUsername, L"&User name"
Vcl_Consts_SPassword, L"&Password"
Vcl_Consts_SmkcSpace, L"Empty"
Vcl_Consts_SmkcPgUp, L"PgUp"
Vcl_Consts_SmkcPgDn, L"PgDn"
Vcl_Consts_SmkcEnd, L"End"
Vcl_Consts_SmkcHome, L"Home"
Vcl_Consts_SmkcLeft, L"Left"
Vcl_Consts_SmkcUp, L"Up"
Vcl_Consts_SmkcRight, L"Right"
Vcl_Consts_SmkcDown, L"Down"
Vcl_Consts_SmkcIns, L"Ins"
Vcl_Consts_SmkcDel, L"Del"
Vcl_Consts_SmkcShift, L"Shift+"
Vcl_Consts_SmkcCtrl, L"Ctrl+"
Vcl_Consts_SmkcAlt, L"Alt+"
Vcl_Consts_SOutOfRange, L"Value must be between %d and %d"
Vcl_Consts_sAllFilter, L"All"
Vcl_Consts_SMsgDlgYes, L"&Yes"
Vcl_Consts_SMsgDlgNo, L"&No"
Vcl_Consts_SMsgDlgOK, L"OK"
Vcl_Consts_SMsgDlgCancel, L"Cancel"
Vcl_Consts_SMsgDlgHelp, L"&Help"
Vcl_Consts_SMsgDlgAbort, L"&Abort"
Vcl_Consts_SMsgDlgRetry, L"&Retry"
Vcl_Consts_SMsgDlgIgnore, L"&Ignore"
Vcl_Consts_SMsgDlgAll, L"&All"
Vcl_Consts_SMsgDlgNoToAll, L"N&o to All"
Vcl_Consts_SMsgDlgYesToAll, L"Yes to &All"
Vcl_Consts_SMsgDlgClose, L"&Close"
Vcl_Consts_SmkcBkSp, L"BkSp"
Vcl_Consts_SmkcTab, L"Tab"
Vcl_Consts_SmkcEsc, L"Esc"
Vcl_Consts_SmkcEnter, L"Enter"
Vcl_Consts_SHelpButton, L"&Help"
Vcl_Consts_SCloseButton, L"&Close"
Vcl_Consts_SIgnoreButton, L"&Ignore"
Vcl_Consts_SRetryButton, L"&Retry"
Vcl_Consts_SAbortButton, L"Cancel"
Vcl_Consts_SAllButton, L"&All"
Vcl_Consts_SCannotDragForm, L"Cannot drag a form"
Vcl_Consts_SVMetafiles, L"Metafiles"
Vcl_Consts_SVEnhMetafiles, L"Enhanced Metafiles"
Vcl_Consts_SVIcons, L"Icons"
Vcl_Consts_SVBitmaps, L"Bitmaps"
Vcl_Consts_SVTIFFImages, L"TIFF graphics"
Vcl_Consts_SMsgDlgWarning, L"Warning"
Vcl_Consts_SMsgDlgError, L"Error"
Vcl_Consts_SMsgDlgInformation, L"Information"
Vcl_Consts_SMsgDlgConfirm, L"Confirm"
Vcl_Consts_SMenuNotFound, L"Sub-menu is not in menu"
Vcl_Consts_SNoTimers, L"Not enough timers available"
Vcl_Consts_SNotPrinting, L"Printer is not currently printing"
Vcl_Consts_SPrinting, L"Printing in progress"
Vcl_Consts_SPrinterIndexError, L"Printer index out of range"
Vcl_Consts_SInvalidPrinter, L"Selected printer is invalid"
Vcl_Consts_SDeviceOnPort, L"%s on %s"
Vcl_Consts_SGroupIndexTooLow, L"GroupIndex must not be smaller than the GroupIndex of a previous menu item"
Vcl_Consts_SNoMDIForm, L"Form cannot be created. Currently no MDI forms are active"
Vcl_Consts_SImageCanvasNeedsBitmap, L"A picture can only be changed if it contains a bitmap"
Vcl_Consts_SControlParentSetToSelf, L"A control cannot have itself as its parent"
Vcl_Consts_SControlNonMainThreadUsage, L"Control '%s' cannot be used for a main thread"
Vcl_Consts_SOKButton, L"OK"
Vcl_Consts_SCancelButton, L"Cancel"
Vcl_Consts_SYesButton, L"&Yes"
Vcl_Consts_SNoButton, L"&No"
Vcl_Consts_SImageIndexError, L"Invalid ImageList-Index"
Vcl_Consts_SImageReadFail, L"Failed to read ImageList data from stream"
Vcl_Consts_SImageWriteFail, L"Failed to write ImageList data to stream"
Vcl_Consts_SWindowDCError, L"Error creating window device context"
Vcl_Consts_SWindowClass, L"Error creating window class"
Vcl_Consts_SCannotFocus, L"Cannot focus a disabled or invisible window"
Vcl_Consts_SParentRequired, L"Control '%s' has no parent window"
Vcl_Consts_SControlPath, L". Path:\r\n%s"
Vcl_Consts_SParentGivenNotAParent, L"Parent given is not a parent of '%s'"
Vcl_Consts_SMDIChildNotVisible, L"Cannot hide an MDI Child Form"
Vcl_Consts_SVisibleChanged, L"Cannot change Visible in OnShow or OnHide"
Vcl_Consts_SCannotShowModal, L"Visible form cannot be changed to a modal form"
Vcl_Consts_SScrollBarRange, L"Scrollbar property out of range"
Vcl_Consts_SPropertyOutOfRange, L"%s property out of range"
Vcl_Consts_SMenuIndexError, L"Menu index out of range"
Vcl_Consts_SMenuReinserted, L"Menu inserted twice"
Vcl_Consts_SInvalidImage, L"Invalid image"
Vcl_Consts_SScanLine, L"Scan line index out of range"
Vcl_Consts_SChangeIconSize, L"Cannot change the size of an icon"
Vcl_Consts_SChangeWicSize, L"The size of a WIC graphic cannot be changed"
Vcl_Consts_SOleGraphic, L"Invalid operation on TOleGraphic"
Vcl_Consts_SUnknownExtension, L"Unknown picture file extension (.%s)"
Vcl_Consts_SUnknownClipboardFormat, L"Clipboard format not supported"
Vcl_Consts_SUnknownStreamFormat, L"Stream format not supported"
Vcl_Consts_SOutOfResources, L"System resources exhausted"
Vcl_Consts_SNoCanvasHandle, L"Canvas does not allow characters"
Vcl_Consts_SInvalidTextFormatFlag, L"The text format flag '%s' is not supported"
Vcl_Consts_SInvalidFrameIndex, L"Invalid picture frame index %d: there are %d frames available (0-%d)"
Vcl_Consts_SInvalidImageSize, L"Invalid image size"
Vcl_Consts_SInvalidImageList, L"Invalid ImageList"
Vcl_Consts_SReplaceImage, L"Unable to Replace Image"
Vcl_Consts_SInsertImage, L"Image cannot be inserted"
System_RTLConsts_SWinRTInstanceError, L"Instance of class %s cannot be created"
System_RTLConsts_sObserverUnsupported, L"Observer is not supported"
System_RTLConsts_sObserverMultipleSingleCast, L"Multiple single cast observers cannot be added to observer collection"
System_RTLConsts_sObserverNoInterface, L"Object does not implement the Observer interface"
System_RTLConsts_sObserverNoSinglecastFound, L"No single cast observer with ID %d found in Observer collection"
System_RTLConsts_sObserverNoMulticastFound, L"No multi cast observer with ID %d found in Observer collection"
System_RTLConsts_sObserverNotAvailable, L"Observer not available"
System_RTLConsts_SInvalidDateString, L"Invalid date string: %s"
System_RTLConsts_SInvalidTimeString, L"Invalid time string: %s"
System_RTLConsts_SInvalidOffsetString, L"Invalid time offset string: %s"
System_RTLConsts_sMustWaitOnOneEvent, L"Waiting for at least one event"
System_RTLConsts_sBeginInvokeDestroying, L"BeginInvoke cannot be called for freeing TComponent"
Vcl_Consts_SInvalidBitmap, L"Bitmap image is not valid"
Vcl_Consts_SInvalidIcon, L"Icon image is not valid"
Vcl_Consts_SInvalidMetafile, L"Metafile is not valid"
Vcl_Consts_SInvalidPixelFormat, L"Invalid pixel format"
System_RTLConsts_SWindowsServer2008, L"Windows Server 2008"
System_RTLConsts_SWindows7, L"Windows 7"
System_RTLConsts_SWindowsServer2008R2, L"Windows Server 2008 R2"
System_RTLConsts_SWindows2000, L"Windows 2000"
System_RTLConsts_SWindowsXP, L"Windows XP"
System_RTLConsts_SWindowsServer2003, L"Windows Server 2003"
System_RTLConsts_SWindowsServer2003R2, L"Windows Server 2003 R2"
System_RTLConsts_SWindowsServer2012, L"Windows Server 2012"
System_RTLConsts_SWindowsServer2012R2, L"Windows Server 2012 R2"
System_RTLConsts_SWindowsServer2016, L"Windows Server 2016"
System_RTLConsts_SWindowsServer2019, L"Windows Server 2019"
System_RTLConsts_SWindowsServer2022, L"Windows Server 2022"
System_RTLConsts_SWindows8, L"Windows 8"
System_RTLConsts_SWindows8Point1, L"Windows 8.1"
System_RTLConsts_SWindows10, L"Windows 10"
System_RTLConsts_SWindows11, L"Windows 11"
System_RTLConsts_SGenericItemNotFound, L"Entry not found"
System_RTLConsts_SGenericDuplicateItem, L"Duplicates are not allowed"
System_RTLConsts_SInsufficientRtti, L"Not enough RTTI for this operation"
System_RTLConsts_SParameterCountMismatch, L"Paramter count must match"
System_RTLConsts_SNonPublicType, L"Type '%s' is not delcared in the interface setion of a unit"
System_RTLConsts_SByRefArgMismatch, L"VAR- und OUT- arguments must match the paramter type"
System_RTLConsts_SPropIsReadOnly, L"Property '%s' is write-proteted"
System_RTLConsts_SPropIsWriteOnly, L"Property '%s' can only be written"
System_RTLConsts_SInvalidRttiDestroy, L"RTTI objects cannot be manually freed using application code"
System_RTLConsts_SServiceNotFound, L"Service for login information not found"
System_RTLConsts_SVersionStr, L"%s (Version %d.%d, Build %d, %5:s)"
System_RTLConsts_SSPVersionStr, L"%s Service Pack %4:d (Version %1:d.%2:d, Build %3:d, %5:s)"
System_RTLConsts_SVersion32, L"32 bit edition"
System_RTLConsts_SVersion64, L"64 bit edition"
System_RTLConsts_SWindows, L"Windows"
System_RTLConsts_SWindowsVista, L"Windows Vista"
System_RTLConsts_sSpinCountOutOfRange, L"SpinCount outside range. It must be between 0 and %d"
System_RTLConsts_sTimespanTooLong, L"TimeSpan too long"
System_RTLConsts_sInvalidTimespanDuration, L"The duration cannot be returned, because the absolute value is exceeding TTimeSpan.MaxValue"
System_RTLConsts_sTimespanValueCannotBeNan, L"Value must not be NaN"
System_RTLConsts_sCannotNegateTimespan, L"Negation of minimum value of a time range is invalid"
System_RTLConsts_sInvalidTimespanFormat, L"Invalid TimeSpam format"
System_RTLConsts_sTimespanElementTooLong, L"TimeSpan element too long"
System_RTLConsts_SNoContext, L"No context-sensitive help installed"
System_RTLConsts_SNoContextFound, L"No help available for context %d"
System_RTLConsts_SNoIndex, L"Unable to open Index"
System_RTLConsts_SNoSearch, L"Unable to open Search"
System_RTLConsts_SNoTableOfContents, L"Unable to find a Table of Contents"
System_RTLConsts_SNoTopics, L"No topic-based help system installed"
System_RTLConsts_SNothingFound, L"No help found for %s"
System_RTLConsts_SArgumentOutOfRange, L"Argument outside range"
System_RTLConsts_SArgumentNil, L"Argument may not be Nil"
System_RTLConsts_SThreadExternalCheckTerminated, L"CheckTerminated cannot be called for an external created thread"
System_RTLConsts_SThreadExternalSetReturnValue, L"SetReturnValue cannot be called for an external created thread"
System_RTLConsts_SParamIsNil, L"Parameter %s must not be Nil"
System_RTLConsts_SParamIsNegative, L"Parameter %s must not be a negative value"
System_RTLConsts_SInputBufferExceed, L"Input buffer for %s = %d, %s = %d exceeded"
System_RTLConsts_SInvalidCharsInPath, L"Invalid characters in the path name"
System_RTLConsts_SInvalidCharsInFileName, L"Invalid characters in the file name"
System_RTLConsts_SEmptyFileName, L"Filename is empty"
System_RTLConsts_SPathTooLong, L"Path is too long"
System_RTLConsts_SDriveNotFound, L"The drive was not found"
System_RTLConsts_hNoFilterViewer, L"No help viewer that supports filters"
System_RTLConsts_sArgumentInvalid, L"Invalid argument"
System_RTLConsts_sInvalidStringAndObjectArrays, L"The length of string and object arrays must be equal"
System_RTLConsts_sSameArrays, L"Source and target arrays must not be equal"
System_RTLConsts_sNoConstruct, L"Class %s is not intended to be constructed"
System_RTLConsts_sInvalidTimeoutValue, L"Invalid value for timeout: %s"
System_RTLConsts_SReadError, L"Stream read error"
System_RTLConsts_SReadOnlyProperty, L"Property is read-only"
System_RTLConsts_SRegCreateFailed, L"Failed to create key %s"
System_RTLConsts_SRegGetDataFailed, L"Failed to get data for '%s'"
System_RTLConsts_SRegSetDataFailed, L"Failed to set data for '%s'"
System_RTLConsts_SResNotFound, L"Resource %s not found"
System_RTLConsts_SSeekNotImplemented, L"%s.Seek not implemented"
System_RTLConsts_SSortedListError, L"Operation not allowed on sorted list"
System_RTLConsts_SUnknownGroup, L"%s not in a class registration group"
System_RTLConsts_SUnknownProperty, L"Property %s does not exist"
System_RTLConsts_SWriteError, L"Stream write error"
System_RTLConsts_SThreadCreateError, L"Thread creation error: %s"
System_RTLConsts_SThreadError, L"Thread Error: %s (%d)"
System_RTLConsts_SThreadExternalTerminate, L"Cannot terminate an externally created thread"
System_RTLConsts_SThreadExternalWait, L"Cannot wait for an externally created thread"
System_RTLConsts_SThreadStartError, L"Start cannot be called for a running or paused thread"
System_RTLConsts_SFCreateErrorEx, L"Cannot create file ""%s"". %s"
System_RTLConsts_SFOpenErrorEx, L"Cannot open file ""%s"". %s"
System_RTLConsts_SInvalidImage, L"Invalid stream format"
System_RTLConsts_SInvalidName, L"''%s'' is not a valid component name"
System_RTLConsts_SInvalidProperty, L"Invalid property value"
System_RTLConsts_SInvalidPropertyPath, L"Invalid property path"
System_RTLConsts_SInvalidPropertyValue, L"Invalid property value"
System_RTLConsts_SInvalidRegType, L"Invalid data type for '%s'"
System_RTLConsts_SListCapacityError, L"List capacity out of bounds (%d)"
System_RTLConsts_SListCountError, L"List count out of bounds (%d)"
System_RTLConsts_SListIndexError, L"List index outside valid range (%d)"
System_RTLConsts_SListIndexErrorRangeReason, L". %s-Range is 0..%d"
System_RTLConsts_SListIndexErrorEmptyReason, L". %s is empty"
System_RTLConsts_SMemoryStreamError, L"Out of memory while expanding memory stream"
System_RTLConsts_SNoComSupport, L"%s has not been registered as a COM class"
System_RTLConsts_SPropertyException, L"Error reading %s%s%s: %s"
System_SysConst_SInvalidCharCount, L"Invalid count (%d)"
System_SysConst_SInvalidDestinationIndex, L"Invalid destination index (%d)"
System_SysConst_SInvalidCodePage, L"Invalid code page"
System_SysConst_SInvalidEncodingName, L"Invalid coding name"
System_SysConst_SNoMappingForUnicodeCharacter, L"No mapping for Unicode character in the target Multibyte code page found"
System_SysConst_SInvalidStringBaseIndex, L"Invalid StringBaseIndex"
System_RTLConsts_SAncestorNotFound, L"Ancestor for '%s' not found"
System_RTLConsts_SAssignError, L"Cannot assign a %s to a %s"
System_RTLConsts_SBitsIndexError, L"Bits index out of range"
System_RTLConsts_SCantWriteResourceStreamError, L"Can't write to a read-only resource stream"
System_RTLConsts_SCheckSynchronizeError, L"CheckSynchronize called from thread $%x, which is NOT the main thread"
System_RTLConsts_SClassNotFound, L"Class %s not found"
System_RTLConsts_SDuplicateClass, L"A class named %s already exists"
System_RTLConsts_SDuplicateItem, L"List does not allow duplicates ($0%x)"
System_RTLConsts_SDuplicateName, L"A component named %s already exists"
System_RTLConsts_SDuplicateString, L"Duplicates are not allowed in string list"
System_SysConst_SShortDayNameWed, L"Wed"
System_SysConst_SShortDayNameThu, L"Thu"
System_SysConst_SShortDayNameFri, L"Fri"
System_SysConst_SShortDayNameSat, L"Sat"
System_SysConst_SLongDayNameSun, L"Sunday"
System_SysConst_SLongDayNameMon, L"Monday"
System_SysConst_SLongDayNameTue, L"Tuesday"
System_SysConst_SLongDayNameWed, L"Wednesday"
System_SysConst_SLongDayNameThu, L"Thursday"
System_SysConst_SLongDayNameFri, L"Friday"
System_SysConst_SLongDayNameSat, L"Saturday"
System_SysConst_SCannotCreateDir, L"Unable to create directory"
System_SysConst_SInvalidSourceArray, L"Invalid source array"
System_SysConst_SInvalidDestinationArray, L"Invalid destination array"
System_SysConst_SCharIndexOutOfBounds, L"Character index out of bounds (%d)"
System_SysConst_SByteIndexOutOfBounds, L"Start index out of bounds (%d)"
System_SysConst_SShortMonthNameDec, L"Dec"
System_SysConst_SLongMonthNameJan, L"January"
System_SysConst_SLongMonthNameFeb, L"February"
System_SysConst_SLongMonthNameMar, L"March"
System_SysConst_SLongMonthNameApr, L"April"
System_SysConst_SLongMonthNameMay, L"May"
System_SysConst_SLongMonthNameJun, L"June"
System_SysConst_SLongMonthNameJul, L"July"
System_SysConst_SLongMonthNameAug, L"August"
System_SysConst_SLongMonthNameSep, L"September"
System_SysConst_SLongMonthNameOct, L"October"
System_SysConst_SLongMonthNameNov, L"November"
System_SysConst_SLongMonthNameDec, L"December"
System_SysConst_SShortDayNameSun, L"Sun"
System_SysConst_SShortDayNameMon, L"Mon"
System_SysConst_SShortDayNameTue, L"Tue"
System_SysConst_SAssertError, L"%s (%s, line %d)"
System_SysConst_SAbstractError, L"Abstract Error"
System_SysConst_SModuleAccessViolation, L"Access violation at address %p in module '%s'. %s of address %p"
System_SysConst_SOSError, L"System error. Code: %d.\r\n%s%s"
System_SysConst_SUnkOSError, L"A call to an OS function failed"
System_SysConst_SShortMonthNameJan, L"Jan"
System_SysConst_SShortMonthNameFeb, L"Feb"
System_SysConst_SShortMonthNameMar, L"Mar"
System_SysConst_SShortMonthNameApr, L"Apr"
System_SysConst_SShortMonthNameMay, L"May"
System_SysConst_SShortMonthNameJun, L"Jun"
System_SysConst_SShortMonthNameJul, L"Jul"
System_SysConst_SShortMonthNameAug, L"Aug"
System_SysConst_SShortMonthNameSep, L"Sep"
System_SysConst_SShortMonthNameOct, L"Oct"
System_SysConst_SShortMonthNameNov, L"Nov"
System_SysConst_SVarTypeTooManyCustom, L"Too many custom variant types have been registered"
System_SysConst_SVarTypeCouldNotConvert, L"Could not convert variant of type (%s) into type (%s)"
System_SysConst_SVarTypeConvertOverflow, L"Overflow while converting variant of type (%s) into type (%s)"
System_SysConst_SVarOverflow, L"Variant overflow"
System_SysConst_SVarInvalid, L"Invalid argument"
System_SysConst_SVarBadType, L"Invalid variant type"
System_SysConst_SVarNotImplemented, L"Operation not supported"
System_SysConst_SVarUnexpected, L"Unexpected variant error"
System_SysConst_SExternalException, L"External exception %x"
System_SysConst_SAssertionFailed, L"Assertion failed"
System_SysConst_SIntfCastError, L"Interface not supported"
System_SysConst_SSafecallException, L"Exception in safecall method"
System_SysConst_SMonitorLockException, L"Object lock not owned"
System_SysConst_SNoMonitorSupportException, L"Monitor support function not initialized"
System_SysConst_SNotImplemented, L"Feature not implemented"
System_SysConst_SObjectDisposed, L"Method called at freed object"
System_SysConst_SArgumentMissing, L"No argument for format '%s'"
System_SysConst_SDispatchError, L"Variant method calls not supported"
System_SysConst_SReadAccess, L"Read"
System_SysConst_SWriteAccess, L"Write"
System_SysConst_SExecuteAccess, L"Execution"
System_SysConst_SInvalidAccess, L"Invalid access"
System_SysConst_SVarArrayCreate, L"Error creating variant or safe array"
System_SysConst_SVarArrayBounds, L"Variant or safe array index out of bounds"
System_SysConst_SVarArrayLocked, L"Variant or safe array is locked"
System_SysConst_SInvalidVarCast, L"Invalid variant type conversion"
System_SysConst_SInvalidVarOp, L"Invalid variant operation"
System_SysConst_SInvalidVarNullOp, L"Invalid NULL variant operation"
System_SysConst_SInvalidVarOpWithHResultWithPrefix, L"Invalid variant operation (%s%.8x)\r\n%s"
System_SysConst_SVarTypeOutOfRangeWithPrefix, L"Custom variant type (%s%.4x) is out of range"
System_SysConst_SVarTypeAlreadyUsedWithPrefix, L"Custom variant type (%s%.4x) already used by %s"
System_SysConst_SVarTypeNotUsableWithPrefix, L"Custom variant type (%s%.4x) is not usable"
System_SysConst_SRangeError, L"Range check error"
System_SysConst_SIntOverflow, L"Integer overflow"
System_SysConst_SInvalidOp, L"Invalid floating point operation"
System_SysConst_SZeroDivide, L"Floating point division by zero"
System_SysConst_SOverflow, L"Floating point overflow"
System_SysConst_SUnderflow, L"Floating point underflow"
System_SysConst_SInvalidPointer, L"Invalid pointer operation"
System_SysConst_SInvalidCast, L"Invalid class typecast"
System_SysConst_SAccessViolationArg3, L"Access violation at address %p. %s of address %p"
System_SysConst_SAccessViolationNoArg, L"Access violation"
System_SysConst_SStackOverflow, L"Stack overflow"
System_SysConst_SControlC, L"Control-C hit"
System_SysConst_SPrivilege, L"Privileged instruction"
System_SysConst_SException, L"Exception %s in module %s at %p.\r\n%s%s\r\n"
System_SysConst_SExceptTitle, L"Application Error"
System_SysConst_SInvalidFormat, L"Format '%s' invalid or incompatible with argument"
System_SysConst_SUnknown, L"<unknown>"
System_SysConst_SInvalidInteger, L"'%s' is not a valid integer value"
System_SysConst_SInvalidTimeStamp, L"'%d.%d' is not a valid timestamp"
System_SysConst_SInvalidGUID, L"'%s' is not a valid GUID value"
System_SysConst_STimeEncodeError, L"Invalid argument to time encode"
System_SysConst_SDateEncodeError, L"Invalid argument to date encode"
System_SysConst_SOutOfMemory, L"Out of memory"
System_SysConst_SInOutError, L"I/O error %d"
System_SysConst_SFileNotFound, L"File not found"
System_SysConst_SInvalidUnknownFilename, L"Invalid filename"
System_SysConst_STooManyOpenFiles, L"Too many open files"
System_SysConst_SAccessDenied, L"File access denied"
System_SysConst_SEndOfFile, L"Read beyond end of file"
System_SysConst_SDiskFull, L"Disk full"
System_SysConst_SInvalidInput, L"Invalid numeric input"
System_SysConst_SDivByZero, L"Division by zero"
END
 
/* c:\program files (x86)\embarcadero\studio\23.0\lib\Win32\release\Controls.res */
/* c:\program files (x86)\embarcadero\studio\23.0\lib\Win32\release\Dialogs.res */
/* D:\SVN\SpaceMission\GamSplash.DFM */
/* c:\program files (x86)\embarcadero\studio\23.0\lib\Win32\release\Buttons.res */
/* c:\program files (x86)\embarcadero\studio\23.0\lib\Win32\release\SPIN.RES */
/* D:\SVN\SpaceMission\GamSpeicherung.DFM */
/* D:\SVN\SpaceMission\ComInfo.DFM */
/* D:\SVN\SpaceMission\GamCheat.DFM */
/* D:\SVN\SpaceMission\ComHilfe.dfm */
/* D:\SVN\SpaceMission\GamMain.DFM */
/* D:\SVN\SpaceMission\SpaceMission.RES */
/* D:\SVN\SpaceMission\SpaceMission.drf */
/ENU/ComHilfe.dfm
0,0 → 1,29
object HilfeForm: THilfeForm
Left = 0
Top = 0
ClientHeight = 484
ClientWidth = 730
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = []
Position = poMainFormCenter
TextHeight = 15
object WebBrowser1: TWebBrowser
Left = 0
Top = 0
Width = 730
Height = 484
Align = alClient
TabOrder = 0
OnBeforeNavigate2 = WebBrowser1BeforeNavigate2
ControlData = {
4C000000734B0000063200000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
end
/ENU/ComInfo.dfm
0,0 → 1,190
object InfoForm: TInfoForm
Left = 289
Top = 184
BorderStyle = bsDialog
Caption = 'About this game'
ClientHeight = 343
ClientWidth = 384
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poMainFormCenter
OnCreate = FormCreate
DesignSize = (
384
343)
TextHeight = 13
object HomeLbl: TLabel
Left = 32
Top = 136
Width = 48
Height = 13
Caption = 'Website:'
Transparent = True
end
object Image: TImage
Left = 8
Top = 8
Width = 65
Height = 57
Center = True
Picture.Data = {
07544269746D617076020000424D760200000000000076000000280000002000
0000200000000100040000000000000200000000000000000000100000000000
000000000000000080000080000000808000800000008000800080800000C0C0
C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
FF00000000000000000000000000000000000EE8787878EEEEEEE03F30878EEE
EEE00EE8787878EEEEEEE03F30878EEEEEE00EE8787878EEEEEEE03F30878EEE
EEE00EE8787878EEEEEEE03F30878EEEEEE00887787877788888803F3088787E
EEE00788787878878887803F3088887EEEE00788887888878887803F3088887E
EEE00877888887788888703F308887EEEEE00888777778888888037883088888
8EE007777777777777703787883087777EE00888888888888803787378830888
8880088888888888803787378788308888800777777777880378737373788308
88E00888888888803787373737378830EEE00887777778800001111111111100
EEE00888888888888899B999B99999EEEEE00888888888888899B9B99BB9B9EE
EEE0088888888888899BB9BB99BB99EEEEE0078888888888899B999B999999EE
EEE0087788888778899B9B9BB9BB99EEEEE00888778778888E9B9B9BB9999EEE
EEE0088888788888EE9B99B9BB9BEEEEEEE00EE8888888EEEEE999B9999EEEEE
EEE00EEEE888EEEEEEEE99BB999EEEEEEEE00EEEEE8EEEEEEEEEE999B9EEEEEE
EEE00EEEEE8EEEEEEEEEEEE999EEEEEEEEE00EEEEE8EEEEEEEEEEEEE99EEEEEE
EEE00EEEEE8EEEEEEEEEEEEE9EEEEEEEEEE00EEEEE8EEEEEEEEEEEEEEEEEEEEE
EEE00EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00000000000000000000000000000
0000}
Stretch = True
end
object FirmaLbl: TLabel
Left = 88
Top = 8
Width = 74
Height = 13
Caption = 'ViaThinkSoft'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
Transparent = True
end
object NameLbl: TLabel
Left = 104
Top = 24
Width = 66
Height = 13
Caption = 'SpaceMission'
Transparent = True
end
object VersionLbl: TLabel
Left = 232
Top = 24
Width = 35
Height = 13
Caption = 'Version'
Transparent = True
end
object EMailLbl: TLabel
Left = 32
Top = 120
Width = 32
Height = 13
Caption = 'E-Mail:'
Transparent = True
end
object CopyrightLbl: TLabel
Left = 8
Top = 80
Width = 264
Height = 13
Caption = #169' Copyright 2001 - 2024 Daniel Marschall, ViaThinkSoft'
Transparent = True
end
object Copyright2Lbl: TLabel
Left = 8
Top = 96
Width = 117
Height = 13
Caption = 'All rights reserved'
Transparent = True
end
object URL2: TLabel
Left = 152
Top = 136
Width = 117
Height = 13
Cursor = crHandPoint
Caption = 'www.daniel-marschall.de'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
Transparent = True
OnClick = WebsiteClick
end
object URL1: TLabel
Left = 152
Top = 120
Width = 118
Height = 13
Cursor = crHandPoint
Caption = 'info@daniel-marschall.de'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
Transparent = True
OnClick = EMailClick
end
object OkBtn: TButton
Left = 273
Top = 310
Width = 107
Height = 25
Anchors = [akRight, akBottom]
Cancel = True
Caption = 'OK'
Default = True
TabOrder = 0
OnClick = OkBtnClick
end
object MemoMitwirkende: TMemo
Left = 8
Top = 168
Width = 372
Height = 128
Anchors = [akLeft, akTop, akRight, akBottom]
Lines.Strings = (
'SpaceMission was created by Daniel Marschall based on a code exa' +
'mple '
'by Hiroyuki Hori for DelphiX 2000.'
''
'Developed with Embarcadero Delphi.'
'Setup created with InnoSetup.'
'Security certificate by HickelSOFT Huth GmbH.'
''
'Used components: (un)DelphiX'
'Source code: http://www.micrel.cz/Dx/'
'(C) Copyright 1996-2000 by Hiroyuki Hori'
'(C) Copyright 2004-2023 by Jaro Benes.'
''
'as well as Delphi MarkDown'
'Source code: https://github.com/grahamegrieve/delphi-markdown'
'(c) 2011+, Health Intersections Pty Ltd'
'Apache 2.0 License'
''
'Music by Savage Peachers Software.'
'Sources of sounds and graphics are unknown.'
'Levels by Daniel Marschall, Patrick B'#252'ssecker and Andreas '
'K'#252'belsbeck.')
ReadOnly = True
ScrollBars = ssVertical
TabOrder = 1
end
end
/ENU/GamCheat.dfm
0,0 → 1,104
object CheatForm: TCheatForm
Left = 275
Top = 165
BorderStyle = bsDialog
Caption = 'Cheats'
ClientHeight = 233
ClientWidth = 313
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poMainFormCenter
OnHide = FormHide
OnShow = FormShow
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 8
Width = 152
Height = 13
Caption = 'Please enter a cheat code'
end
object Label3: TLabel
Left = 200
Top = 8
Width = 106
Height = 13
Cursor = crHandPoint
Caption = 'Ask author'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
Visible = False
OnClick = Label3Click
end
object CheatEdit: TEdit
Left = 8
Top = 32
Width = 297
Height = 21
Cursor = crIBeam
Ctl3D = True
ParentCtl3D = False
PasswordChar = '*'
TabOrder = 0
OnKeyPress = CheatEditKeyPress
end
object OKBtn: TButton
Left = 192
Top = 200
Width = 115
Height = 25
Caption = 'OK'
Default = True
TabOrder = 1
OnClick = OKBtnClick
end
object AbbBtn: TButton
Left = 8
Top = 200
Width = 113
Height = 25
Cancel = True
Caption = 'Cancel'
TabOrder = 2
OnClick = AbbBtnClick
end
object GroupBox1: TGroupBox
Left = 8
Top = 64
Width = 297
Height = 129
Caption = 'Activated cheats'
TabOrder = 3
object Label2: TLabel
Left = 8
Top = 104
Width = 89
Height = 13
Cursor = crHandPoint
Caption = 'Disable cheat'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnClick = Label2Click
end
object CheatBox: TListBox
Left = 8
Top = 24
Width = 281
Height = 73
ItemHeight = 13
TabOrder = 0
end
end
end
/ENU/GamMain.dfm
0,0 → 1,154
object MainForm: TMainForm
Left = 320
Top = 196
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'SpaceMission'
ClientHeight = 561
ClientWidth = 636
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clYellow
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
KeyPreview = True
Menu = MainMenu
Position = poScreenCenter
Scaled = False
OnClose = FormClose
OnCreate = FormCreate
OnDestroy = FormDestroy
OnKeyDown = FormKeyDown
OnShow = FormShow
TextHeight = 13
object MainMenu: TMainMenu
Left = 24
Top = 8
object Spiel: TMenuItem
Caption = '&Game'
object GameStart: TMenuItem
Caption = 'Back to &main menu'
Enabled = False
ShortCut = 112
OnClick = GameStartClick
end
object Neustart: TMenuItem
Caption = '&Restart'
Enabled = False
ShortCut = 113
OnClick = NeustartClick
end
object GamePause: TMenuItem
Caption = '&Pause'
Enabled = False
ShortCut = 114
OnClick = GamePauseClick
end
object Leer1: TMenuItem
Caption = '-'
end
object Spielstand: TMenuItem
Caption = '&Savegames...'
ShortCut = 115
OnClick = SpielstandClick
end
object Cheat: TMenuItem
Caption = '&Cheats...'
Enabled = False
ShortCut = 116
OnClick = CheatClick
end
object Leer3: TMenuItem
Caption = '-'
end
object Beenden: TMenuItem
Caption = '&Exit'
ShortCut = 32883
OnClick = BeendenClick
end
end
object Einstellungen: TMenuItem
Caption = '&Settings'
object OptionSound: TMenuItem
Caption = '&Sound effects'
Checked = True
GroupIndex = 1
OnClick = OptionSoundClick
end
object OptionMusic: TMenuItem
Caption = '&Music'
Checked = True
GroupIndex = 1
OnClick = OptionMusicClick
end
object Leer5: TMenuItem
Caption = '-'
GroupIndex = 1
end
object Spielgeschwindigkeit: TMenuItem
Caption = '&Speed'
Enabled = False
GroupIndex = 1
object Leicht: TMenuItem
Caption = '&Easy'
RadioItem = True
ShortCut = 49
OnClick = LeichtClick
end
object Mittel: TMenuItem
Caption = '&Medium'
Checked = True
RadioItem = True
ShortCut = 50
OnClick = MittelClick
end
object Schwer: TMenuItem
Caption = '&Hard'
RadioItem = True
ShortCut = 51
OnClick = SchwerClick
end
object Master: TMenuItem
Caption = '&Master'
RadioItem = True
ShortCut = 52
OnClick = MasterClick
end
end
end
object Hilfe: TMenuItem
Caption = '&Help'
object Hilfe1: TMenuItem
Caption = 'General topics'
GroupIndex = 1
Hint = 'Help\EN_General.md'
OnClick = HilfeTopicClick
end
object Wasgibtesneues1: TMenuItem
Caption = 'What'#39's new?'
GroupIndex = 1
Hint = 'Help\EN_Changelog.md'
OnClick = HilfeTopicClick
end
object N1: TMenuItem
Caption = '-'
GroupIndex = 1
end
object CheckUpdates: TMenuItem
Caption = 'Check for updates'
GroupIndex = 1
OnClick = CheckUpdatesClick
end
object Leer6: TMenuItem
Caption = '-'
GroupIndex = 1
end
object Informationen: TMenuItem
Caption = '&About this game...'
GroupIndex = 1
OnClick = InformationenClick
end
end
end
end
/ENU/GamSpeicherung.dfm
0,0 → 1,202
object SpeicherungForm: TSpeicherungForm
Left = 280
Top = 152
BorderStyle = bsDialog
Caption = 'Savegames'
ClientHeight = 424
ClientWidth = 447
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poMainFormCenter
OnHide = FormHide
OnShow = FormShow
TextHeight = 13
object Bevel1: TBevel
Left = 8
Top = 56
Width = 433
Height = 2
Shape = bsBottomLine
end
object Label2: TLabel
Left = 8
Top = 72
Width = 58
Height = 13
Caption = 'Savegames:'
end
object Label3: TLabel
Left = 8
Top = 336
Width = 67
Height = 13
Caption = 'Information:'
end
object Label1: TLabel
Left = 8
Top = 20
Width = 78
Height = 13
Caption = 'Savegame name:'
Enabled = False
end
object LadenBtn: TButton
Left = 336
Top = 72
Width = 105
Height = 25
Caption = '&Load'
Enabled = False
TabOrder = 0
OnClick = LadenBtnClick
end
object LoeschenBtn: TButton
Left = 336
Top = 104
Width = 105
Height = 25
Caption = '&Delete'
Enabled = False
TabOrder = 1
OnClick = LoeschenBtnClick
end
object AktualisierenBtn: TButton
Left = 336
Top = 144
Width = 105
Height = 25
Caption = '&Refresh'
TabOrder = 2
OnClick = DsFancyButton2Click
end
object SpeichernBtn: TButton
Left = 336
Top = 16
Width = 105
Height = 25
Caption = '&Save'
Enabled = False
TabOrder = 3
OnClick = SpeichernBtnClick
end
object AbbrechenBtn: TButton
Left = 336
Top = 392
Width = 105
Height = 25
Cancel = True
Caption = '&Close'
Default = True
ModalResult = 1
TabOrder = 4
OnClick = AbbrechenBtnClick
end
object LevelListBox: TListBox
Left = 112
Top = 72
Width = 201
Height = 249
ItemHeight = 13
TabOrder = 5
OnClick = LevelListBoxClick
OnDblClick = LevelListBoxDblClick
end
object LevelName: TEdit
Left = 112
Top = 16
Width = 201
Height = 21
Enabled = False
TabOrder = 6
end
object ElPanel1: TPanel
Left = 112
Top = 336
Width = 201
Height = 81
BevelOuter = bvLowered
Color = clWindow
TabOrder = 7
object li4a: TLabel
Left = 8
Top = 56
Width = 33
Height = 13
Caption = 'Lives:'
end
object li1: TLabel
Left = 8
Top = 8
Width = 17
Height = 13
Caption = 'n/a'
end
object li3b: TLabel
Left = 96
Top = 40
Width = 17
Height = 13
Caption = 'n/a'
end
object li3a: TLabel
Left = 8
Top = 40
Width = 29
Height = 13
Caption = 'Level:'
end
object li4b: TLabel
Left = 96
Top = 56
Width = 17
Height = 13
Caption = 'n/a'
end
object liu: TLabel
Left = 8
Top = 8
Width = 156
Height = 13
Caption = 'Savegame file cannot be read!'
Font.Charset = DEFAULT_CHARSET
Font.Color = clMaroon
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
Visible = False
end
object liw: TLabel
Left = 8
Top = 8
Width = 160
Height = 13
Caption = 'Please select a savegame.'
Font.Charset = DEFAULT_CHARSET
Font.Color = clNavy
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
Visible = False
end
object li2a: TLabel
Left = 8
Top = 24
Width = 37
Height = 13
Caption = 'Score:'
end
object li2b: TLabel
Left = 96
Top = 24
Width = 17
Height = 13
Caption = 'n/a'
end
end
end
/ENU/LevEdit.dof
0,0 → 1,2
[Directories]
OutputDir=..\..\SpaceMission
/ENU/LevEdit.dpr
0,0 → 1,24
// Do not edit. This file is machine generated by the Resource DLL Wizard.
 
library LevEdit;
 
{ITE} {DFMFileType} {ComHilfe.dfm}
{ITE} {DFMFileType} {ComInfo.dfm}
{ITE} {DFMFileType} {LevMain.dfm}
{ITE} {DFMFileType} {LevOptions.dfm}
{ITE} {DFMFileType} {LevSpeicherung.dfm}
{ITE} {DFMFileType} {LevSplash.dfm}
{ITE} {RCFileType} {LevEdit_DRC.rc}
 
{$R 'ComHilfe.dfm' 'HilfeForm:TForm'}
{$R 'ComInfo.dfm' 'InfoForm:TForm'}
{$R 'LevMain.dfm' 'MainForm:TForm(DXForm)'}
{$R 'LevOptions.dfm' 'LevelForm:TForm'}
{$R 'LevSpeicherung.dfm' 'SpeicherungForm:TForm'}
{$R 'LevSplash.dfm' 'SplashForm:TForm'}
{$R 'LevEdit_DRC.res' 'LevEdit_DRC.rc'}
 
{$E ENU}
 
begin
end.
/ENU/LevMain.dfm
0,0 → 1,6136
object MainForm: TMainForm
Left = 217
Top = 117
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'Level Editor'
ClientHeight = 517
ClientWidth = 741
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
KeyPreview = True
Menu = MainMenu
Position = poScreenCenter
Scaled = False
OnClose = FormClose
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDestroy = FormDestroy
OnMouseMove = DXDrawMouseMove
OnShow = FormShow
TextHeight = 13
object ScrollBar: TScrollBar
Left = 0
Top = 480
Width = 632
Height = 17
Max = 1200
PageSize = 0
TabOrder = 0
OnScroll = ScrollBarScroll
end
object StatusBar: TStatusBar
Left = 0
Top = 498
Width = 741
Height = 19
Panels = <>
SimplePanel = True
OnMouseMove = DXDrawMouseMove
end
object SidePanel: TPanel
Left = 632
Top = 0
Width = 109
Height = 498
Align = alRight
BevelOuter = bvNone
TabOrder = 2
object Bevel1: TBevel
Left = 4
Top = 200
Width = 97
Height = 2
Shape = bsBottomLine
end
object Bevel2: TBevel
Left = 4
Top = 392
Width = 97
Height = 2
Shape = bsBottomLine
end
object Bevel3: TBevel
Left = 4
Top = 320
Width = 97
Height = 2
Shape = bsBottomLine
end
object LivesLabel: TLabel
Left = 8
Top = 332
Width = 33
Height = 13
Caption = 'Lifes:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object SelLabel: TLabel
Left = 8
Top = 4
Width = 43
Height = 13
Caption = 'Selection:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object SLabel0: TLabel
Left = 8
Top = 400
Width = 84
Height = 13
Caption = 'Level information:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object SLabel1a: TLabel
Left = 8
Top = 424
Width = 47
Height = 13
Caption = 'Units:'
OnMouseMove = DXDrawMouseMove
end
object SLabel1b: TLabel
Left = 76
Top = 424
Width = 6
Height = 13
Caption = '0'
OnMouseMove = DXDrawMouseMove
end
object SLabel2a: TLabel
Left = 8
Top = 440
Width = 26
Height = 13
Caption = 'Boss:'
OnMouseMove = DXDrawMouseMove
end
object SLabel2b: TLabel
Left = 76
Top = 440
Width = 22
Height = 13
Caption = 'No'
OnMouseMove = DXDrawMouseMove
end
object SLabel3a: TLabel
Left = 8
Top = 456
Width = 32
Height = 13
Caption = 'Size:'
OnMouseMove = DXDrawMouseMove
end
object SLabel3b: TLabel
Left = 76
Top = 456
Width = 24
Height = 13
Caption = '1200'
OnMouseMove = DXDrawMouseMove
end
object SLabel4a: TLabel
Left = 8
Top = 480
Width = 60
Height = 13
Caption = 'Saved:'
Font.Charset = DEFAULT_CHARSET
Font.Color = 150
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object SLabel4b: TLabel
Left = 76
Top = 480
Width = 22
Height = 13
Caption = 'No'
Font.Charset = DEFAULT_CHARSET
Font.Color = 150
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object Enemy1: TRadioButton
Left = 8
Top = 24
Width = 93
Height = 17
Caption = 'Attacker type 1'
Checked = True
TabOrder = 0
TabStop = True
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object Enemy2: TRadioButton
Left = 8
Top = 44
Width = 93
Height = 17
Caption = 'Attacker type 2'
TabOrder = 1
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object Enemy3: TRadioButton
Left = 8
Top = 64
Width = 93
Height = 17
Caption = 'Attacker type 3'
TabOrder = 2
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object Enemy4: TRadioButton
Left = 8
Top = 84
Width = 55
Height = 17
Caption = 'Meteor'
TabOrder = 3
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object Enemy5: TRadioButton
Left = 8
Top = 104
Width = 44
Height = 17
Caption = 'UFO'
TabOrder = 4
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object Enemy6: TRadioButton
Left = 8
Top = 124
Width = 53
Height = 17
Caption = 'UFO 2'
TabOrder = 5
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object Enemy7: TRadioButton
Left = 8
Top = 144
Width = 45
Height = 17
Caption = 'Boss'
TabOrder = 6
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object SelPanel: TPanel
Left = 8
Top = 216
Width = 89
Height = 89
Color = clWhite
TabOrder = 7
OnMouseMove = DXDrawMouseMove
object Image1: TImage
Left = 1
Top = 1
Width = 697
Height = 88
AutoSize = True
Picture.Data = {
07544269746D617056CF0200424D56CF0200000000003600000028000000B902
000058000000010018000000000020CF0200120B0000120B0000000000000000
0000FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFFD0D9FF93A9FF5B7A
FF3258FF1844FF113DFF113EFF113EFF113EFF113EFF113EFF113DFF113DFF23
4CFF4266FF728CFFA9BAFFF3F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F7FFA2B5
FF4D71FF0E3EFF0135FF0032FF0032FF0135FF0236FF0236FF0236FF0236FF02
36FF0236FF0236FF0236FF0034FF0033FF002FFF0538FF2A56FF7491FFC5D2FF
FCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFE9495A500003300003300003300003300003300003300
00330000330000330000330000330000330000330000339495A5FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFECF1FF8AA5FF3360FF0038FF0036FF003AFF013BFF023BFF023BFF023BFF02
3BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF
013AFF0038FF0033FF0C42FF557BFFB8C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEADADBB58587A58587A58587A31315A00003300003300
0033000048000048000048000048000048000048000048000048000048000048
00004831316358587A58587A58587A58587A757489FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE6B98730042080042080042080042080042084A
7B52FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE689AFF0052FA0052FA0052FA0052
FA0052FA4384FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFEFFFFC9D6FF557FFF013FFF003BFF0140FF0241FF0240FF02
40FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF
0240FF0240FF0240FF0240FF0240FF0241FF0241FF003EFF003AFF0743FF88A5
FFECF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE86899600003300003300
0033000033000033000033000048000048000048000048000048000048000048
0000480000480000480000480000480000480000330000330000330000332929
52FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEEDEDEDA5B58CA5B58CA5B58CA5B58C45744600420800
42080042080042080042082963318CAD948CAD948CAD948CAD94DADADBFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFA8CB5FF8CB5FF8CB5FF8CB5FF3377
FE0052FA0052FA0052FA0052FA0052FA266AFE8CB5FF8CB5FF8CB5FF8CB5FFD9
E7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FBFF7EA2FF0D4EFF0043FF0146FF02
47FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF
0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247
FF0247FF0247FF0045FF0041FF346AFFD7E2FFFEFEFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE868996000033000033000033000033000033000033000048000048000048
0000480000480000480000480000480000480000480000480000480000480000
48000048000033000033292952FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECAD6C831520031520031
5200315200174A00004208004208004208004208004208004208004208004208
004208004208A5BAA7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FAA5BDFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9F0FF6492FF00
45FF004CFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF
024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024E
FF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF0048FF1056FFA0
BDFFFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEDADADB000033000033000048000048000048000033000033000048
0000480000480000480000480000580000580000580000580000580000580000
58000058000058000058000048000048000048000048000048000033DADADBFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE526B2249631049631049
6310425A16315200315200315200315200174A00004208004208004208004208
0042080042080042080042080042080042080852181853211853211853211853
21F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE266AFE1663
FE1663FE1663FE1663FE0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA105AFE1663FE1663FE
1663FE1663FEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFE3EDFF2D72FF0050FF0254FF0255FF0255FF0255FF0255FF0255FF0255FF
0255FF0255FF0254FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052
FF0052FF0052FF0052FF0053FF0255FF0255FF0255FF0255FF0255FF0255FF02
55FF0255FF0255FF0051FF0152FF8FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB58587A000048000048000048000048
0000480000480000480000480000480000480000580000580000580000580000
5800005800005800005800005800005800005800005800005800005800005800
005800004800003358587AADADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBC6A6BBC6A6BB
C6A6315200315200315200315200315200315200315200315200315200174A00
0042080042080042080042080042080042080042080042080042080042080042
080042080042082963315A8463F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9C6
FFA9C6FFA9C6FF105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA266AFE538CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFEEF4FF4084FF0057FF005BFF015CFF015CFF015CFF
015CFF015CFF015CFF015CFF015CFF015BFF025CFF1065FF1065FF1065FF1065
FF1065FF1065FF1065FF1065FF1065FF1065FF1065FF0961FF015BFF015CFF01
5CFF015CFF015CFF015CFF015CFF015CFF015CFF015CFF0059FF065CFF95BBFF
FEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEC6C8D658587A000033
0000580000580000580000580000580000480000480000480000480000480000
5800005800005800005800005800005800005800006D00006D00006D00006D00
006D00006D00005800005800005800004800003300003358587ACACACACACACA
EAEEFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEF7F7EF315200315200315200315200315200315200315200315200315200
315200315200315200174A000042080042080042080042080042080042080042
080042080042080042080042080042080042087BA984FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEEFF7FC0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA77A5FFFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF4FF5798FF005EFF0163FF
0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0060FF0F6C
FFE2EDFFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0
F5FF78ADFF0059FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF
0163FF0163FF0061FF0260FFA5C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE1818420000480000480000580000580000580000580000580000480000
4800004800004800005800005800005800005800005800005800005800005800
006D00006D00006D00006D00006D00006D000058000058000058000048000033
000033000033000033000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE9CA584547331315200315200315200315200315200
315200315200315200315200315200315200315200174A000042080042080042
080042080042080042080042080042080042080042080042080042080C2B0511
4816326639F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF3377FE0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004A
F7004AE9125AED3377FEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFF
72ADFF0063FF016AFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF016B
FF016BFF016BFF0068FF1074FFF4F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF82B6FF0060FF016BFF016BFF016BFF016BFF
016BFF016BFF016BFF016BFF016BFF016BFF016BFF0067FF056BFFE1EDFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE948C8C5A635A
5A635A4E4E4E4E4E4E948C8CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE94
8C8C5A635A5A635A4E4E4E4E4E4E948C8CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFE948C8C5A635A5A635A4E4E4E4E4E4E948C8CFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE1818420000480000480000580000580000
5800005800005800004800004800004800004800005800005800005800005800
005800005800005800005800006D00006D00006D00006D00006D00006D000058
000058000058000048000048000033000033000033000033CACACAFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB7DBB96B8B38255A00315200
3152003152003152003152003152003152003152003152003152003152003152
00174A0000420800420800420800420800420800420800420800420800420800
42080042080042080C2B05004208004208B5C6B5D8EAD9FEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE538CFE10
5AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA004AF7004AE9004AE90052FAB5CEFFD9E7FEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFB5D7FF0573FF0072FF0173FF0173FF0173FF0173FF0173
FF0173FF0173FF0173FF0173FF0173FF0173FF0071FF107CFFF0F7FFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80B9FF0069FF
0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173
FF0173FF006EFF3D95FFF5FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
8686865A635A6E6E6E6E6E6E5A635A4E4E4E969696F7F7EFFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFE8686865A635A6E6E6E6E6E6E5A635A4E4E4E969696F7F7EFFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFE8686865A635A6E6E6E6E6E6E5A635A4E4E4E969696F7
F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB73739473739400104A0000
4800005800006D00006D00006D00005800005800005800005800004800004800
005800005800005800005800005800005800005800006D00006D00006D00006D
00006D00006D00006D0000580000580000580000580000480000480000330000
3300003358587AADADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECEDED6
0084000084000084003152003152003152003152003152003152003152003152
00315200315200315200315200174A0000420800420800420800420800420800
42080042080042080042080042080042080042080C2B05004208004208004208
638C65FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFED9E7FE266AFE266AFE266AFE0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9004AE900
52FA0052FA689AFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF5FF1C89FF0077FF017BFF017B
FF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF00
79FF1083FFF0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFF80BDFF0072FF017BFF017BFF017BFF017BFF017BFF017BFF017B
FF017BFF017BFF017BFF017BFF017BFF017BFF0076FF92C7FFFCFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE6E6E6E8686868686866E6E6E6E6E6E6E6E6E5A635A5A635AA8A8A8F7F7
EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFE6E6E6E8686868686866E6E6E6E6E6E6E6E6E5A635A5A635A
A8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E8686868686866E6E6E6E6E6E6E6E6E5A
635A5A635AA8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB5858
7A00003300003300004800005800006D00006D00006D00006D00006D00005800
005800005800004800004800005800005800006D00005800005800005800006D
00006D00006D00006D00006D00006D00006D0000580000580000580000580000
5800004800004800004800003300003300003358587ADADADBFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE75AF7442A542008400008400008400087401255A003152003152
00315200315200315200315200315200315200315200315200244A00244A0000
42080042080042080042080042080042080042080042080042080042080C2B05
0042080042080042080042081853214A7B52D8EAD9FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE8CB5FF5A94FF266AFE266AFE266AFE1663FE105AFE
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
4AE9004AE9004AE9004AF70052FA0052FA1663FE4384FED9E7FEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83C2
FF007BFF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF01
83FF0183FF0183FF0183FF0081FF108AFFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C1FF0079FF0183FF0183FF0183
FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF00
81FF0483FFCEE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEEDEDED7B847B948C8C6E6E6E7B847B7B847B7B847B5A635A5A63
5A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B948C8C6E6E6E7B847B7B847B7B847B
5A635A5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B948C8C6E6E6E7B847B7B
847B7B847B5A635A5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00
006D00006D00006D00005800005800005800005800005800005800006D00006D
00005800005800006D00006D00005800006D00006D00006D0000580000580000
5800005800005800005800005800005800004800004800004800004800004800
0048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFED8EAD92E962E0084000084000084000084
00008400087401255A0031520031520031520031520031520031520031520031
5200315200315200315200004208004208004208004208004208004208004208
0042080042080C2B050C2B05004208004208004208004208004208004208ADC6
B5EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FCD9E7FE538CFE266AFE266AFE
266AFE266AFE266AFE1663FE105AFE0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA004AE9004AE90052FA0052FA0052FA0052FA0052FA
0052FAA9C6FFEAEEFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEF7F7EFCACACA7B847B7B847B0E0F0E0E0F0E0E0F0E
0E0F0E0E0F0E1018212118212118212118212118210E0F0E0E0F0E0E0F0E0E0F
0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E
0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E6E6E6EB5ADADFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFE4F2FF1D96FF0088FF018AFF018AFF018AFF018AFF018AFF01
8AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF0088FF1091FFF0F8FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C5
FF0082FF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF01
8AFF018AFF018AFF018AFF018AFF0085FF59B2FFFDFEFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEEDEDED969696948C8C6E6E6E7B847B7B847B7B84
7B8686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED969696948C8C6E6E6E7B847B
7B847B7B847B8686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED969696948C8C6E
6E6E7B847B7B847B7B847B8686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD29295200004800005800005800005800
006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D
00006D00006D00006D00006D00005800005800006D00006D0000580000580000
6D00006D00005800005800004800004800004800005800005800005800005800
0058000058000058000058000058000048292952292952757489FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA7D6AA0084000084
0000840000840000840000840000840000840000840031520031520031520031
5200315200315200315200315200315200315200315200004208004208004208
0042080042080042080042080042080042080C2B050C2B050042080042080042
08004208004208004208004208397342FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBDD6FF
266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AE9004AE90052FA
0052FA0052FA0052FA0052FA0052FA0052FA3377FEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEEDEDEDDADADB6E6E6E6E6E6E4E4E4E0E0F0E0E0F0E0E0F0E
1018212118212118213030304239424239424239424239424239424239423030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030211821211821211821211821211821
2118210E0F0E303030B5ADADF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFF60BBFF008DFF0192FF0191FF01
91FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF
0191FF008FFF1098FFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFF80C9FF008AFF0191FF0191FF0191FF0191FF0191FF01
91FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0090FF0792FF
D4EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696966E6E6E7B84
7B7B847B8686868686868686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB969696
6E6E6E7B847B7B847B8686868686868686866E6E6E5A635A5A635AB5ADADEDED
EDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDA
DADB9696966E6E6E7B847B7B847B8686868686868686866E6E6E5A635A5A635A
B5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300
004800005800005800005800006D00006D00006D00005800005800006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D0000580000580000
6D00006D00005800005800005800005800005800005800004800004800004800
0058000058000058000058000058000058000058000058000058000048000033
00003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FE75AF7442A54200840000840000840000840000840000840000840000840000
8400087401255A00315200315200315200315200315200315200315200315200
3152000042080042080042080042080042080042080042080042080C2B050042
08004208004208004208004208004208004208004208004208185321638C65CE
DED6FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE8CB5FF689AFF266AFE266AFE266AFE266AFE266AFE266AFE266A
FE266AFE266AFE1663FE105AFE0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7
004AE9004AE9004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA1663
FE689AFFCADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEF7F7EFEDEDED9696966E6E6E5A635A0E0F0E0E0F0E101821211821
3030303030304239424239424239424239424239424239424239424239424239
4242394242394230303042394230303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030302118210E0F0E423942B5ADADFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1F3FF05
99FF0097FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF
0198FF0198FF0198FF0198FF0198FF0096FF109EFFF0F9FFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80CCFF0091FF0198FF01
98FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF
0198FF0198FF0198FF0093FF79C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADA
DB9696967B847B7B847B8686868686868686868686866E6E6E5A635A5A635AB5
ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEDADADB9696967B847B7B847B8686868686868686868686866E6E6E5A63
5A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEDADADB9696967B847B7B847B868686868686868686868686
6E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEB3B3CD00003300004800005800005800005800006D00006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D0000
6D00006D00006D00006D00006D00006D00005800005800005800005800005800
005800004800004800004800005800005800005800005800005800006D00006D
00005800005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE2E962E00840000840000840000840000840000
8400008400008400008400008400008400087401315200315200315200315200
3152003152003152003152003152000042080042080042080042080042080042
080042080042080C2B0500420800420800420800420800420800420800420800
4208004208004208004208A5BAA7F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE427BFE266AFE266AFE266AFE266A
FE266AFE266AFE266AFE266AFE266AFE266AFE266AFE1663FE0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA004AF7004AE9004AE90052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FAA9C6FFEFF7FCFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEEDEDEDDADADBA8A8A85A635A4239420E0F0E211821303030303030
4239424E4E4E4239424239424239424E4E4E4239424239424239424239424239
4242394242394242394242394242394242394242394242394242394230303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
303030301018210E0F0E5A635AA8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFA5DDFF009DFF019FFF019FFF019FFF019FFF019FFF019FFF
019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF009DFF10A5
FFF0F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFF80D0FF0098FF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF
019FFF019FFF019FFF019FFF019FFF019FFF019FFF009DFF27ADFFF5FBFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEDADADB9696967B847B8686868686868686868686868686866E
6E6E5A635A5A635AA8A8A8EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B8686868686868686868686
868686866E6E6E5A635A5A635AA8A8A8EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B868686868686
8686868686868686866E6E6E5A635A5A635AA8A8A8EDEDEDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD000033000048000058000058
00005800005800006D00006D00006D00006D00006D00005800005800006D0000
6D00006D00006D00006D00006D00005800006D00006D00006D00005800005800
0058000058000058000058000058000048000048000048000048000048000058
00005800006D00006D00006D00006D00005800004800004800003358587AFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE637A2D2D6B0900
8400008400008400008400008400008400008400008400008400008400008400
008400255A003152003152003152003152003152003152003152000042080042
080042080042080042080042080042080042080C2B0500420800420800420800
42080042080042080042080042080042080042080042080042082A542AFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE266A
FE105AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE26
6AFE266AFE266AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9004AE90052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA26
6AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB423942211821303030423942423942
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239424E4E4E4239424239
4242394242394242394242394242394242394242394242394242394242394242
3942423942303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
303030303030303030303030303030303030303030301018210E0F0E4239426E
6E6EDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FCFF3BBAFF00A3FF01A5FF01A5FF
01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5
FF01A5FF01A5FF00A3FF10ABFFF0FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF80D3FF009FFF01A5FF01A5FF01A5FF01A5FF
01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5
FF00A5FF04A5FFB2E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA86868686868686868686
8686868686857B7A6E6E6E5A635A5A635A5A635AEDEDEDFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA8686868686
86868686868686868686857B7A6E6E6E5A635A5A635A5A635AEDEDEDFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA
868686868686868686868686868686857B7A6E6E6E5A635A5A635A5A635AEDED
EDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD
00003300004800005800005800005800005800006D00006D00006D00006D0000
6D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00
006D00006D000058000058000058000058000058000058000048000048000033
00003300004800004800004800005800006D00006D00006D00006D0000580000
4800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDA
DECEA5AD84526B222D6B092D6B092D6B09087401008400008400008400008400
008400008400008400008400008400087401255A003152003152003152003152
0031520031520000420800420800420800420800420800420800420800420800
4208004208004208004208004208004208004208004208004208004208004208
004208004208085218779C7BCAD6C8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFECADBFE77A5FF105AFE105AFE1663FE1663FE1663FE266AFE266AFE26
6AFE266AFE266AFE266AFE266AFE266AFE266AFE1663FE105AFE0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004A
E9004AE9004AE9004AF70052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA105AFE77A5FFCADBFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADB5B54E4E4E
1018212118213030304239424239424E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239
4242394242394242394242394242394242394242394242394242394242394242
3942423942423942423942423942303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30303030302118210E0F0E0E0F0E1018216E6E6EDADADBFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBF3FF
05ACFF00A9FF00AAFF00AAFF00AAFF00AAFF00AAFF00A7FF00A4FF00A4FF00A4
FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A3FF00AAFFEFFAFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77D2FF009EFF
00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A5FF00AA
FF00AAFF00AAFF00AAFF00AAFF00AAFF00A7FF75D1FFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDA
DADBA8A8A88686864E4E4E4E4E4E5A635A857B7A5A635A5A635A5A635A33444A
DE8484FF9494FF9494FF9494FF9494FF9494FF9494FF9494FFABABFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEDADADBA8A8A88686864E4E4E4E4E4E5A635A857B7A5A635A5A635A5A
635A33444A8484B99292D19292D19292D19292D19292D19292D19292D1B3B3CD
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEDADADBA8A8A88686864E4E4E4E4E4E5A635A857B7A5A63
5A5A635A5A635A33444A84DEDE94F6F994F6F994F6F994F6F994F6F994F6F994
F6F9ABFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE9495A59495A56363840000330000580000580000580000580000580000
6D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800
005800006D00006D00006D00006D00006D00006D000058000058000058000058
00005800004800004800003300003300004800004800005800005800006D0000
6D00006D00006D0000580000580000480000483131639495A5FEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEAABD9C4963104963104963104963104963102D6B09
0084000084000084000084000084000084000084000084000084000084000874
0131520031520031520031520031520031520000420800420800420800420800
42080042080C2B050C2B05004208004208004208004208004208004208004208
0042080042080042080042080042080042080042080042088CAD94FEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98B9FF0052FA0052FA0052FA0052FA00
52FA105AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE
266AFE1663FE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA004AE9004AE90052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FF
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFECACACA5A635A5A635A1018213030304239423030302118213030302118
2121182142394242394242394242394242394242394242394242394242394242
3942423942423942423942423942423942423942303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30303030303030303030303030303030303030303030302118210E0F0E0E0F0E
1018215A635ADADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFBFEBFF00B0FF00AFFF00AFFF00AFFF00AFFF00AFFF00AD
FF40C3FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80
D6FF87D9FFF8FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFC0EBFF80D4FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7
FF80D7FF80D7FF78D4FF08B2FF00AFFF00AFFF00AFFF00AFFF00AFFF00AEFF47
C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBB9696964239420E0F0E101821525A63
5A635A5A635A5A635A052136B51808D81605D81605D81605D81605D81605D816
05D81605E74A39FFABABFFABABFFABABFFABABFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBB9696964239420E0F0E10
1821525A635A635A5A635A5A635A05213600006D212184212184212184212184
21218421218421218455499994ADCE94ADCE94ADCEB3B3CDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBB9696964239
420E0F0E101821525A635A635A5A635A5A635A05213600B1B100D8D800D8D800
D8D800D8D800D8D800D8D800D8D831E7E7ABFFFFABFFFFABFFFFABFFFFFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0000330000330000330000480000580000
5800005800005800005800006D00006D00006D00006D00006D00006D00005800
005800005800005800005800005800005800005800006D00006D00006D00006D
0000580000580000580000580000580000580000480000480000480000480000
4800005800005800006D00006D00006D00006D00006D00005800004800004800
0048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA5BAA72A542A425A16
4963104963104963104963104963104963104963100084000084000084000084
00008400008400008400008400008400255A003152003152000C2B050E0F0E0E
0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0C2B050C2B05004208004208004208
0042080042080042080042080042080042080042080042080042080042080042
080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA5BDFF26
6AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFE266AFE
266AFE266AFE266AFE266AFE266AFE266AFE266AFE105AFE0052FA0052FA0529
6F0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0035AF004AE90052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEEDEDED9696964E4E4E4239425A635A5A635A4239424E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E42394242394242394230303021182121182110182110
1821303030303030303030423942423942423942423942423942423942423942
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030301018210E0F0E0E0F0E1018215A635AF7F7EFFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9DE2FF00B4FF00B4FF00B4
FF00B4FF00B4FF00B4FF00AFFF89DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10B9FF00B3FF00B4FF00
B4FF00B4FF00B4FF00B3FF1ABDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB
8689960017330017330017335A635A5A635A4E4E4E0C2849895A26A56B29A56B
29A56B29A56B29A56B29A56B29A56B29B55221D81605D81605D81605DE2110FF
ABABFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBB
BBBBBBBBBB8689960017330017330017335A635A5A635A4E4E4E0C28494A358C
5549995549995549995549995549995549995549994A358C0404850404850404
85212184B3B3CDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEDADADBBBBBBBBBBBBB8689960017330017330017335A635A5A635A4E4E4E0C
28490C737306878706878706878706878706878706878706878706878700D8D8
00D8D800D8D800D8D8ABFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0000330000
4800004800004800005800005800005800005800005800006D00006D00006D00
006D00006D00006D000058000058000058000058000058000058000058000058
00006D00006D00006D00006D0000580000580000580000580000580000580000
4800004800004800004800004800005800005800006D00006D00006D00006D00
006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEAABD9C2A542A425A164963104963104963104963104963104963104963
1008740108740108740100840000840000840000840000840000840008740125
5A002431090E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E
0E0F0E0C2B050042080042080042080042080042080042080042080042080042
080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFE98B9FF1663FE0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA1663FE1663FE1663FE266AFE266AFE266AFE266AFE266AFE266A
FE1663FE105AFE002D9400185200173300173300173300173300173300173300
173305296F002D94002D940243CC0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFECACACA5A635A4E4E4E4E4E4E5A635A6E6E6E6E6E
6E5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E423942423942423942303030211821211821211821101821211821
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030301018210E0F
0E0E0F0E303030423942CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF84DDFF00B4FF00B8FF00B8FF00B8FF00B8FF00B8FF00B3FF80DBFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
FBFF0FBCFF00B7FF00B8FF00B8FF00B8FF00B8FF00B8FF0FBCFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEDADADBBBBBBBBBBBBB9495A52139520017330521364E4E4E4E4E4E0C28
49001733B79670DAB587DAB587DAB587DAB587D6AD7BC69C6BC69C6BB1865089
5A267B52188B51128B5112FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB9495A52139520017330521364E4E4E
4E4E4E0C28490017335256B56F68D76F68D76F68D76F68D7847BEF9292D19292
D18484B952427B432A7A432A7A432A7A040485FEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB9495A521395200173305
21364E4E4E4E4E4E0C28490017334E8E8952A59C52A59C52A59C52A59C52A59C
4E8E894E8E894E8E890687870C737306878706878702FFFFFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00
006D00006D00006D00006D00006D00006D00006D000058000058000058000058
00005800005800005800005800006D00006D00006D00006D0000580000580000
5800005800005800005800004800004800004800005800005800005800006D00
006D00006D00006D00006D00006D000058000048000048000048000033FEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEAABD9C4963104963104963104963104963
1049631049631049631049631049631049631049631000840000840000840000
84000084000084000084000874010E0F0E0E0F0E0C2B050C2B050C2B050C2B05
0C2B050C2B050C2B050E0F0E0E0F0E0E0F0E0C2B050042080042080042080042
080042080042080042080042080042080042080042080042080042088CAD94FE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98B9FF0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFE266A
FE266AFE266AFE266AFE266AFE266AFE2965D60E0F0E0521360D468D0D468D0D
468D0D468D0D468D0D468D0D468D0013280E0F0E0E0F0E002D940052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA9696964239424239425A635A6E6E
6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424E4E4E423942423942
4239424239423030303030303030301018212118211018210E0F0E1018212118
2130303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030302118211018210E0F0E0E0F
0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E101821303030969696FE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF3ECCFF00B9FF00BBFF00BBFF00BBFF00BBFF00
BBFF00B6FF80DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF0FBFF0FBFFF00BAFF00BBFF00BBFF00BBFF00BBFF
00BBFF0FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDCACACACACACACACACA99A8AF2139
520521360013280017330C28490C2849C6C8D6EDEDEDEDEDEDEDEDEDEDEDEDC6
BDBD9C948C9C948C9C948C857B7A5242298B51128B5112FF0202FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDCACACACACACACACACA
99A8AF2139520521360013280017330C28490C284905296F0404850404850404
850404855549999495A59495A59495A575748939314A432A7A432A7A040485FE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDCACACACA
CACACACACA99A8AF2139520521360013280017330C28490C28497BC6D694F6F9
94F6F994F6F994F6F994ADCE8494948494948494947B847B2139520687870687
8702FFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800
005800006D00006D00006D00006D00006D00006D00006D00006D00006D000058
0000580000580000580000480000480000580000580000580000580000580000
6D00006D00006D00006D00005800005800005800005800005800005800005800
005800005800006D00006D00006D00006D00006D00006D000058000058000048
000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBC6A65973
2849631044692532663944692549631059732859732859732859732844733632
66394963104963104963100874010084000084000C2B050E0F0E0C2B05214718
3266393266393266393266397BA98486BC8A86BC8A2A542A0C2B050E0F0E0C2B
0500420800420800420800420800420800420800420800420800420800420800
42080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
98B9FF105AFE0052FA105AFE266AFE105AFE0052FA105AFE105AFE105AFE105A
FE1663FE266AFE266AFE266AFE266AFE266AFE266AFE266AFE05296F00132805
296F0035AF0243CC0243CC0243CC0243CC1863EF216BEF216BEF0243CC002D94
0E0F0E002D940052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696965A635A4239425A63
5A5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4239424239424239424239424239424239424239424239424239424239
424239423030303030302118212118212118211018210E0F0E0E0F0E0E0F0E0E
0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E
0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E1018212118212118212118212118
2121182121182121182121182121182121182121182121182121182121182110
18210E0F0E0E0F0E0E0F0E211821FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23C6FF00BCFF00
BDFF00BDFF00BDFF00BDFF00BDFF00B8FF80DEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC1FF00BCFF
00BDFF00BDFF00BDFF00BDFF00BDFF0FC1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDADADBCACA
CACACACACACACACACACAADADBB2139520C28490C2849213952213952857B7A94
8C8C948C8C948C8C948C8CB79670CE9C5ACE9C5AB186508B51128B51128B5112
8B5112FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
DADADBCACACACACACACACACACACACAADADBB2139520C28490C28492139522139
527574898689968689968689968689968484B9847BEF847BEF6F68D7432A7A43
2A7A432A7A432A7A212184FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
F7F7EFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDDADADBCACACACACACACACACACACACAADADBB2139520C28490C2849
2139522139527792858494948494948494948494944E8E89318C84318C84318C
8406878706878706878706878702FFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00
003300004800004800004800005800006D00006D00006D00006D00006D00006D
0000580000580000580000580000480000480000480000480000480000480000
5800005800005800005800006D00006D00006D00006D00005800005800005800
005800005800005800005800005800006D00006D00006D00006D000058000058
000058000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFED1D4B69CA584597328526B18446925447336446925526B1859732859
7328597328597328547331447336526B184469254469252D6B09087401005800
0C2B050E0F0E1148162A542A397342779C7B779C7B779C7BB7DBB9ADDEB59CCE
A55487563266390E0F0E0C2B0504461000420800420800420800420800420800
4208004208004208004208004208004208004208638C65ADC6B5FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEB5CEFF689AFF105AFE105AFE105AFE1663FE105AFE105A
FE105AFE105AFE105AFE105AFE1663FE1663FE1663FE266AFE266AFE266AFE18
63EF0944B70018520017330D468D0944B70243CC5284E75284E75284E7689AFF
538CFE266AFE125AED0243CC00104A0035AF004AE90052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA689AFFA9C6FFFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696963030
304E4E4E5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E
6E6E6E6E6E6E6E6E5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239424239424239
4242394242394242394242394242394242394230303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30303030303030303030303030303030301018210E0F0E0E0F0EFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF14C4FF00BEFF00BEFF00BEFF00BEFF00BEFF00BEFF00B9FF80DFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFF0FBFF0FC2FF00BDFF00BEFF00BEFF00BEFF00BEFF00BEFF0FC2FFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE6E6E6E5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A
5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E868686CACACACACACACACACACACACACACACA96969696969696
9696969696969696895A268B51128B51128B51128B51128B51128B51128B5112
B53910FF0202FF0202FF0202FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE6E6E6E5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A
635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E868686CACACACACACACACACACACACACACACA9696
969696969696969696969696964A358C432A7A432A7A432A7A432A7A432A7A43
2A7A432A7A31217B040485040485040485040485FEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A5A635A5A635A5A635A5A635A5A63
5A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACACACACACACACACACACA
CACACA9696969696969696969696969696960687870687870687870687870687
8706878706878706878700B1B102FFFF02FFFF02FFFF02FFFFFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D
00006D00006D00006D0000580000580000580000580000480000480000330000
3300004800004800004800004800004800005800005800005800005800006D00
006D00006D00006D00005800005800005800005800005800006D00006D00006D
00006D00006D0000580000580000580000580000580000480000480000480000
33FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE59732859732859732859732859732859
7328597328597328597328597328597328597328597328597328597328547331
397342597328425A160E0F0E0C2B05044610397342397342397342FEFEFEFEFE
FEFEFEFEFEFEFEDEE9ED9CCEA59CCEA586BC8A11481611481611481600420800
4208004208004208004208004208004208004208004208004208004208004208
004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE105AFE105AFE105AFE105A
FE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE10
5AFE1663FE266AFE105AFE0944B70E0F0E0018520D468D0243CC0243CC0243CC
FEFEFEFEFEFEFEFEFEFEFEFEBDD6FF266AFE266AFE266AFE004AE9004AE9004A
E90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E
6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5A635A4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E42394242394242394242394242394242394242394230303042
3942303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
303030101821FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11C3FF00BEFF00BEFF00BEFF00BEFF
00BEFF00BEFF00B9FF80DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC2FF00BDFF00BEFF00BEFF00BE
FF00BEFF00BEFF0FC2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFE5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A
5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACAADB5B596969696
9696969696948C8C2118212118210C28490C2849D81605FF0202FF0202FF0202
FF0202FF0202FF0202FF0202FF5252FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE5A635A5A635A5A635A5A635A5A635A5A635A5A
635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACAADB5
B5969696969696969696948C8C2118212118210C28490C284904048504048504
04850404850404850404850404850404855256B5FEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE5A635A5A635A5A635A5A635A5A63
5A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686
CACACAADB5B5969696969696969696948C8C2118212118210C28490C284900DE
E702FFFF02FFFF02FFFF02FFFF02FFFF02FFFF02FFFF52FFFFFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE000033000048000048
00004800005800006D00006D00006D00006D00006D0000580000580000580000
5800004800004800003300003300004800004800004800004800004800005800
005800005800005800006D00006D00006D00006D000058000058000058000058
00005800006D00006D00006D00006D00006D0000580000580000580000580000
58000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE59732859
7328597328597328597328597328597328597328597328597328597328597328
597328597328597328597328597328597328425A160E0F0E0C2B050C2B050446
10779C7BDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECF7EC8CB5945487560C
2B05114816114816004208004208004208004208004208004208004208004208
004208004208004208004208004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE10
5AFE105AFE105AFE105AFE105AFE105AFE1663FE105AFE0944B70E0F0E05296F
002D940243CC6B94E7CADBFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FCCADBFE689A
FF3773EF0035AF0243CC004AE90052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3030304239425A635A5A635A5A
635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E
6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E42
3942423942303030423942303030423942303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030305A635AFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1CC4FF
00BCFF00BDFF00BDFF00BDFF00BDFF00BDFF00B8FF80DEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC1
FF00BCFF00BDFF00BDFF00BDFF00BDFF00BDFF0FC1FFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9663238B51128B5112
655A565A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A63
5A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E86868696969696969696969696969696
96969696966E6E6E4E4E4EBBBBBBBBBBBBB5ADAD0E0F0E0E0F0EEDEDEDFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE2556930D
468D0D468D4A5A6B5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A
5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E8686869696969696969696
969696969696969696966E6E6E4E4E4EBBBBBBBBBBBBB5ADAD0E0F0E0E0F0EED
EDEDFEFEFEEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FE0404850404850404854242635A635A5A635A5A635A5A635A5A635A5A635A5A
635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686969696
9696969696969696969696969696966E6E6E4E4E4EBBBBBBBBBBBBB5ADAD0E0F
0E0E0F0EEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE00003300004800004800004800005800006D00006D00006D00006D0000
6D00005800005800005800005800004800004800003300003300004800004800
004800004800005800005800005800005800005800006D00006D00006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D0000
58000058000058000058000058000048000048000048000033FEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFE597328597328637A2D637A2D637A2D637A2D637A2D637A2D
637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D597328425A
160E0F0E0E0F0E0C2B050042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFE8CAD8C5487560C2B05114816114816004208004208004208004208
004208004208004208004208004208004208004208004208004208004208FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE105AFE105AFE105AFE105AFE105AFE105AFE10
5AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE
105AFE0944B70E0F0E05296F002D940243CC8CADE7FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFE77A5FF3773EF002D940243CC004AE90052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE948C8C4E4E4E2118213030304239424E4E4E4E4E4E5A635A5A635A6E6E6E
6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E423942423942423942303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030302118210E0F0E868686FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF2FC7FF00B9FF00BBFF00BBFF00BBFF00BBFF00BBFF00B6
FF80DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFF0FBFF0FBFFF00BAFF00BBFF00BBFF00BBFF00BBFF00BBFF0F
BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEF7EFEDA57B42A56B29895A267B52187B52187B52187B52187B52187B52
187B52187B52187B5218895A26B5ADAD0E0F0E0E0F0E21182110182110182110
18211018211018211018211018211018212118213030304239424E4E4EADB5B5
001328001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEEAEEFA4A73AF2963A5255693255693255693255693255693
255693255693255693255693255693255693B5ADAD0E0F0E0E0F0E2118211018
211018211018211018211018211018211018211018212118213030304239424E
4E4EADB5B5001328001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFA0303EC0303EC0000AD04048504048504
0485040485040485040485040485040485040485212184B5ADAD0E0F0E0E0F0E
2118211018211018211018211018211018211018211018211018212118213030
304239424E4E4EADB5B5001328001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0000330000480000480000480000580000
6D00006D00006D00006D00006D00005800005800005800005800004800004800
0048000048000033000033000048000058000058000058000058000058000058
00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D0000
6D00006D00006D00005800005800005800005800005800005800004800004800
0048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE597328637A2D6B8B386B8B38
6B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B
386B8B386B8B38637A2D425A160E0F0E0E0F0E0C2B050042088CAD94FEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8CAD8C5487560C2B05114816114816
0042080042080042080042080042080042080042080042080042080042080042
08004208004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE105AFE1663FE26
6AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE
266AFE266AFE266AFE266AFE105AFE0944B70E0F0E05296F002D940243CC8CAD
E7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF3773EF002D9402
43CC004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EF9696964E4E4E303030
3030304239424E4E4E4E4E4E4E4E4E4E4E4E5A635A5A635A5A635A4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4239424239424239424239423030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030301018214E4E
4E969696FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61D3FF00B4FF00B7FF00B7
FF00B7FF00B7FF00B7FF00B2FF80DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FBBFF00B6FF00B7FF00
B7FF00B7FF00B7FF00B7FF0FBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7EFEDEDE9DEB186509663238B51
128B51128B51128B51128B51128B51128B51128B51128B5112895A2630303021
18210E0F0E0E0F0E0E0F0E211821303030303030303030303030303030303030
4E4E4EADB5B5ADB5B5CACACAA8A8A8001328F7F7EFFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFADEE9ED5A84B5
2556932556930D468D0D468D0D468D0D468D0D468D0D468D0D468D2556932556
933030302118210E0F0E0E0F0E0E0F0E21182130303030303030303030303030
30303030304E4E4EADB5B5ADB5B5CACACAA8A8A8001328F7F7EFFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED8D8FFD8
D8FF3535EF0303EC0000AD040485040485040485040485040485040485040485
0404852121843030302118210E0F0E0E0F0E0E0F0E2118213030303030303030
303030303030303030304E4E4EADB5B5ADB5B5CACACAA8A8A8001328F7F7EFFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0000330000
4800004800004800005800006D00006D00006D00006D00006D00006D00005800
0058000058000058000048000048000048000048000048000048000058000058
00005800005800006D00006D00006D00006D00006D00006D0000580000580000
5800005800005800006D00006D00006D00006D00006D00005800005800005800
0058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
6B8B386B8B386B8B38769147769147769147769147769147769147849C4E8CAA
578CAA5777A55A739C63739C63739C63739C63849C4E5A73420E0F0E0E0F0E0C
2B05004208296331548756FEFEFEFEFEFEFEFEFEFEFEFED8EAD994B59C6B9873
5487560C2B051148161148160042080042080042080042080042080042080042
08004208004208004208004208004208004208004208FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFE1663FE1663FE266AFE2973FE2973FE2973FE2973FE2973FE2973FE
3377FE3377FE3377FE3377FE2973FE2973FE2973FE2973FE266AFE295AB50E0F
0E05296F002D940243CC2965D6527BDEFEFEFEFEFEFEFEFEFEFEFEFED9E7FE84
ADFF538CFE3773EF002D940243CC004AE90052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEEDEDED8686863030303030304239424239424E4E4E4E4E
4E4E4E4E4E4E4E42394230303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030423942423942423942
4239424239424239424239424239424239424239424239424239424239424239
4230303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030302118212118
21303030868686C6BDBDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF9BE2FF00B1FF00B3FF00B3FF00B3FF00B3FF00B3FF00AEFF81DAFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2
FBFF0FB8FF00B2FF00B3FF00B3FF00B3FF00B3FF00B3FF14B9FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEEDE9DEE8D7C7B796709663239663239663239663239663238B51128B
51128B51128B5112A8A8A8969696303030303030303030303030303030303030
3030304E4E4E5A635A5A635A7B847BCACACACACACACACACACACACA99A8AFFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEDEE9EDD6DEEF6B8CBD2556932556932556932556932556
930D468D0D468D0D468D255693A8A8A896969630303030303030303030303030
30303030303030304E4E4E5A635A5A635A7B847BCACACACACACACACACACACACA
99A8AFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFED8D8FFC6C6FF4A4AEF0303EC0303EC0303EC
0303EC0000D9040485040485040485040485A8A8A89696963030303030303030
303030303030303030303030304E4E4E5A635A5A635A7B847BCACACACACACACA
CACACACACA99A8AFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00
006D00006D00006D00006D00006D00006D000058000058000048000058000058
00005800005800005800005800006D00006D00006D00006D00006D00006D0000
6D00006D00005800005800005800005800005800006D00006D00006D00006D00
006D00006D00006D00006D000058000058000048000048000048000033FEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFE849C4E7691476B8B38849C4E849C4E849C4E849C
4E849C4E849C4E8CAA5792B26D92B26D92B26D75AF7475AF7475AF7475AF7492
B26D7691470E0F0E0C2B050C2B05004208004208004208D8EAD9EDEDEDEDEDED
EDEDEDB7DBB963946B5487564574460C2B051148161148160042080042080042
080042080042080042080042080042080042080042080042080042081052182A
542AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3377FE3377FE266AFE3377FE3377FE
3377FE3377FE3377FE3377FE427BFE4384FE4384FE3377FE3377FE3377FE3377
FE3377FE3377FE2965D600082505296F002D940944B70243CC0243CCD9E7FED9
E7FED9E7FED9E7FEB5CEFF4384FE3377FE2965D6002D940035AF004AE90052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA105AFE266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBB
BB7B847B4239423030304239424239424E4E4E42394230303030303030303030
3030303030303030303030303030303030303030423942423942423942423942
4239424239424239424239424239424239424239424239424239423030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030301018211018211018211018210E0F0E0E0F
0E0E0F0E0E0F0E4E4E4EBBBBBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFB0E6FF00AEFF00AEFF00AEFF00AEFF00AEFF00
AEFF00A8FF81D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF1FBFF0FB3FF00ADFF00AEFF00AEFF00AEFF00AEFF
00ADFF31BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDE9DEE8D7C7E8D7C7E8
D7C7E8D7C7DAB587966323966323966323966323B18650BBBBBB969696423942
3030304E4E4E5A635A5A635A5A635A5A635A6E6E6E948C8CCACACACACACACACA
CACACACACACACACACACADADADBB5ADADF7EFEDFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEE9EDC6D6
E7C6D6E7C6D6E7C6D6E794ADCE2556932556932556932556935A84B5BBBBBB96
96964239423030304E4E4E5A635A5A635A5A635A5A635A6E6E6E948C8CCACACA
CACACACACACACACACACACACACACACADADADBB5ADADF7EFEDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
D8D8FFB5B5FFB5B5FFB5B5FFB5B5FF7B7BF70000D90000D90000D90000D93535
EFBBBBBB9696964239423030304E4E4E5A635A5A635A5A635A5A635A6E6E6E94
8C8CCACACACACACACACACACACACACACACACACACADADADBB5ADADF7EFEDFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800
005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D
00005800005800005800005800005800006D00006D00006D00006D00006D0000
6D00006D00006D00006D00005800005800005800005800005800005800005800
005800006D00006D00006D00006D00006D00006D00006D00006D000058000048
000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6849C
4E849C4E849C4E92B26D92B26D8CAA5775AF7492B26D92B26D92B26D92B26D86
BC8AA5C674ADD08C9CCEA5A5C674A5C6749CCEA53030300E0F0E0C2B05004208
00420800420818532139734239734245744663946B2147180C2B050E0F0E0C2B
0500420800420800420800420800420800420800420800420800420800420800
42080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
A9C6FF3377FE3377FE2973FE266AFE266AFE266AFE3377FE427BFE4384FE4384
FE4384FE4384FE4384FE538CFE689AFF689AFF5A94FF2973FE0C28490E0F0E0D
468D0035AF0243CC0243CC0243CC0243CC0243CC125AED4384FE0944B705296F
0E0F0E002D940052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB7B847B42394230303030
3030303030303030423942423942423942423942423942423942423942423942
4E4E4E4239424239424239424239424239424239424239424239424239424239
4242394230303042394230303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030302118211018211018211018210E0F0E0E0F0E0E0F0E0E0F0E1018211018
211018213030301018210E0F0E868686BBBBBBFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0EFFF02A9FF00
A8FF00A9FF00A9FF00A9FF00A9FF00A7FF24B4FF48C0FF48C0FF48C0FF48C0FF
48C0FF48C0FF48C0FF48C0FF48C0FF48BFFF52C4FFF4FCFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4E0FF48BCFF48C0FF48
C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF43BFFF04AAFF00A8FF
00A9FF00A9FF00A9FF00A9FF00A6FF63CBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7EFEDD1D4B6D1D4B6D1D4B6D1D4B6
D1D4B6BBBBBBBBBBBB9696965A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E
6E948C8CBBBBBBDADADBCACACACACACACACACACACACACACACAADB5B5DADADBF7
F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFAB6C8DAB6C8DAB6
C8DAB6C8DAB6C8DABBBBBBBBBBBB9696965A635A6E6E6E6E6E6E6E6E6E6E6E6E
6E6E6E6E6E6E948C8CBBBBBBDADADBCACACACACACACACACACACACACACACAADB5
B5DADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFAA5A5
FFA5A5FFA5A5FFA5A5FFA5A5FFBBBBBBBBBBBB9696965A635A6E6E6E6E6E6E6E
6E6E6E6E6E6E6E6E6E6E6E948C8CBBBBBBDADADBCACACACACACACACACACACACA
CACACAADB5B5DADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00
003300004800004800004800005800006D00006D00006D00006D00006D00006D
00006D00006D00006D00006D00005800005800005800005800005800006D0000
6D00006D00005800005800006D00006D00005800005800005800005800004800
004800004800004800004800005800005800005800006D00006D00006D00006D
00006D00006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFED1D4B6849C4E77A55A8CAA5792B26D92B26D92B26D92B26D92
B26D95BD8492B26DA5BD77A5BD7798CA94ADD08CADD08CADD08C98CA94ADD08C
739C635667350E0F0E0C2B050C2B050C2B050C2B052147182147182147182A54
2A0C2B050E0F0E0E0F0E0C2B0500420800420800420800420800420800420800
42080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEA9C6FF3377FE3377FE2973FE266AFE266AFE266A
FE266AFE3377FE4384FE4384FE4384FE4384FE5A94FF538CFE4384FE689AFF68
9AFF538CFE4A73AF25569300173305296F0035AF0035AF0035AF0035AF0035AF
0944B7295AB50018520017330E0F0E002D940052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEBBBBBB7B847B3030300E0F0E423942423942423942423942
4239424239424239424239424239424239424239424239424239424239424239
4242394242394242394242394242394242394230303030303030303030303030
3030303030303030303030303030303030303030303030211821101821101821
1018210E0F0E0E0F0E0E0F0E0E0F0E1018211018211018212118213030303030
303030303030303030303030302118213030304E4E4ECACACAFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFEEF9FF1AABFF00A0FF00A2FF00A2FF00A2FF00A2FF00A2FF00A0FF
009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009CFF04A4
FFEFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFF7ACFFF0097FF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF
009EFF009EFF00A1FF00A2FF00A2FF00A2FF00A2FF00A2FF02A0FF94D9FFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDBBBBBBA8A8A87B847B6E6E
6EA8A8A8CACACACACACA9696966E6E6E948C8CB5ADADCACACACACACACACACACA
CACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDBBBBBBA8A8A8
7B847B6E6E6EA8A8A8CACACACACACA9696966E6E6E948C8CB5ADADCACACACACA
CACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDBB
BBBBA8A8A87B847B6E6E6EA8A8A8CACACACACACA9696966E6E6E948C8CB5ADAD
CACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE00003300003300003300004800005800006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D0000580000580000
5800005800005800006D00006D00006D00005800005800006D00006D00005800
0058000058000058000048000048000048000048000048000058000058000058
00006D00006D00006D00006D00006D00006D0000580000480000480000480000
33FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6849C4E75AF7475AF7492
B26D92B26D92B26D92B26D95BD8486BC8AA5C674A5C674A5C6749CCEA5ADD08C
ADD08C9CCEA598CA94A5C674A5C67492B26D0E0F0E0E0F0E0C2B050C2B050C2B
050C2B050C2B050C2B050C2B050E0F0E0E0F0E0E0F0E0C2B0500420800420800
4208004208004208004208004208004208004208004208004208004208004208
8CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9C6FF3377FE3377
FE2973FE266AFE266AFE266AFE266AFE3377FE3377FE4384FE4384FE4384FE68
9AFF538CFE3377FE5A94FF689AFF689AFF689AFF5A84DE0E0F0E001852002D94
002D94002D94002D94002D94002D94002D940008250E0F0E0E0F0E002D940052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB2118210E0F0E
0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F
0E0E0F0E10182110182110182110182110182110182110182110182110182110
18211018211018211018211018211018211018210E0F0E0E0F0E0E0F0E0E0F0E
0E0F0E1018211018211018212118213030303030303030303030303030303030
303030303030303030303030303030303030301018214E4E4E948C8CEDEDEDFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFF74C9FF0099FF009BFF009CFF
009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009C
FF009CFF009CFF009AFF0FA1FFF0F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF80CEFF0095FF009CFF009CFF009CFF009CFF
009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009C
FF009BFF0FA1FFD8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEEDEDEDDADADBCACACABBBBBBEDEDEDFEFEFEFEFEFEDADADB9696965A635A6E
6E6E969696A8A8A8CACACACACACACACACACACACACACACACACACADADADBDADADB
F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEEDEDEDDADADBCACACABBBBBBEDEDEDFEFEFEFEFEFEDADADB9696
965A635A6E6E6E969696A8A8A8CACACACACACACACACACACACACACACACACACADA
DADBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEEDEDEDDADADBCACACABBBBBBEDEDEDFEFEFEFEFEFE
DADADB9696965A635A6E6E6E969696A8A8A8CACACACACACACACACACACACACACA
CACACACADADADBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9495A59495A5636384
00003300005800005800006D00006D00006D00006D00006D00006D00006D0000
6D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00
006D00006D00006D000058000058000058000058000048000048000048000048
00004800005800005800005800006D00006D00006D00006D00006D0000580000
580000480000483131639495A5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1
D4B692B26D92B26D92B26D86BC8AA5BD77A5C674A5C674A5C674A5C6749CCEA5
ADD08CADD08CADD08CADD08C9CCEA5A5C674A5BD7786BC8A92B26D92B26D86BC
8A3266390E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0C2B0500420831
5200315200315200004208004208004208004208004208004208004208004208
0042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFE98B9FF266AFE266AFE266AFE427BFE3377FE2973FE2973FE2973FE29
73FE2973FE2973FE2973FE2973FE4384FE689AFF4384FE4384FE4384FE4384FE
4384FE427BFE21397B0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0035
AF004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE0E0F0E1018213030304239423030302118212118212118212118212118
212118212118212118211018211018211018211018211018211018211018210E
0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E101821101821101821211821211821
3030303030303030303030303030303030303030303030303030303030303030
303030303030303030303030303030303030303030302118210E0F0E4E4E4ECA
CACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
C7E8FF0093FF0093FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094
FF0094FF0094FF0094FF0094FF0094FF0094FF0092FF0F9BFFF0F9FFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80CAFF008DFF
0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094
FF0094FF0094FF0094FF0094FF0090FF4AB3FFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEDADADB9696969696964E4E4E5A635A969696CACACACACACACACACA
CACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEDADADB9696969696964E4E4E5A635A969696CACACACA
CACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696969696964E4E4E5A635A9696
96CACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800006D0000
6D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00
006D00006D00005800006D00006D00006D00006D000058000058000058000058
00004800003300003300004800004800004800004800005800005800006D0000
6D00006D00006D00005800004800004800003358587AFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEEDE9DEBDD6A595BD8495BD8495BD8495BD84ADD08C
ADD08CADD08CA5C6749CCEA59CCEA5ADD08CADD08CADD08C98CA9495BD8495BD
8495BD8492B26D92B26D95BD845A73423142182431092431092431092431090C
2B05004208005800005800174A00244A00315200174A00004208004208004208
004208004208004208004208004208004208085218779C7BCAD6C8FEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE8CB5FF3377FE2973FE427BFE33
77FE2973FE2973FE3377FE4384FE2973FE2973FE2973FE4384FE538CFE689AFF
4384FE4384FE4384FE4384FE4384FE4384FE295AB521397B21397B05296F0529
6F05296F05296F21397B2965D6125AED004AF70052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA105AFE77A5FFCADBFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBCAD6C85A635A5A635A1018213030
304239424239424E4E4E4E4E4E4E4E4E42394242394242394242394242394242
3942423942423942423942303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303021182130
3030948C8CDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFF4FAFF2EA0FF0087FF008BFF008BFF008BFF008B
FF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF00
89FF0F92FFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFF80C5FF0083FF008BFF008BFF008BFF008BFF008BFF008BFF008B
FF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF0288FFB4DDFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B4E4E4E
423942969696A8A8A8CACACACACACACACACACACACACACACABBBBBBDADADBF7F7
EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B
847B4E4E4E423942969696A8A8A8CACACACACACACACACACACACACACACABBBBBB
DADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEEDEDED7B847B4E4E4E423942969696A8A8A8CACACACACACACACACACACACACA
CACABBBBBBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD0000330000480000
5800005800005800006D00006D00006D00006D00006D00006D00006D00006D00
006D00006D00006D00006D00006D00005800005800006D00006D00006D000058
0000580000580000480000480000480000330000330000480000480000480000
4800005800005800006D00006D00006D00006D00005800004800004800003358
587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98CA94
95BD84A5C67498CA949CCEA59CCEA5ADD08CADD08C9CCEA59CCEA59CCEA5A5C6
74A5C674A5C67486BC8A86BC8A92B26D92B26D92B26D92B26D849C4E6B8B3859
7328526B224963104963102D6B09008400008400087401004208244A00315200
315200174A000042080042080042080042080042080042080042080042082A54
2AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE4384FE3377FE427BFE3377FE2973FE2973FE538CFE689AFF2973FE2973FE
2973FE689AFF689AFF689AFF4384FE4384FE4384FE4384FE4384FE4384FE3377
FE3377FE4384FE266AFE0052FA0052FA1663FE4384FE4384FE3377FE004AE900
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEDADADBCACACA5A635A30303021182130303042394242394242
3942423942423942423942423942423942423942423942423942423942303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30300E0F0E4E4E4E948C8CEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0E0FF0383
FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF00
83FF0083FF0083FF0083FF0081FF0F8BFFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C2FF007AFF0083FF0083FF0083
FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF00
84FF0080FF2998FFF9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEEDEDED8686866E6E6E4239424E4E4E969696969696B5ADADBBBB
BBCACACABBBBBBBBBBBBCACACAEDEDEDEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEEDEDED8686866E6E6E4239424E4E4E969696969696
B5ADADBBBBBBCACACABBBBBBBBBBBBCACACAEDEDEDEDEDEDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED8686866E6E6E4239424E4E4E96
9696969696B5ADADBBBBBBCACACABBBBBBBBBBBBCACACAEDEDEDEDEDEDFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEB3B3CD00003300004800005800005800005800006D00006D00006D00006D00
006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D
00006D00006D00006D0000580000580000580000480000480000480000480000
4800004800004800005800005800005800006D00006D00006D00006D00006D00
005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEADD08CA5C674A5C67498CA949CCEA5ADD08CADD08CADD0
8C9CCEA598CA94A5C674A5C674A5C674A5C674A5C674A5BD7786BC8A92B26D8C
AA57849C4E7691476B8B384963104963104963104963102D6B09008400008400
0084000084000058000042083152003152003152000042080042080042080042
080042080042080042082A542AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFE538CFE3377FE427BFE3377FE3377FE689AFF
689AFF689AFF2973FE4384FE689AFF689AFF689AFF689AFF689AFF538CFE2973
FE3377FE4384FE3377FE3377FE3377FE105AFE0052FA0052FA0052FA1663FE43
84FE4384FE3377FE3377FE125AED004AE90052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDED
EDED948C8C4E4E4E211821423942423942423942423942423942423942423942
4239424239424239424239423030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30302118211018212118216E6E6ECACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFBFDFF4CA4FF0078FF007DFF007DFF007DFF007DFF007DFF00
7DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007BFF0F85FFF0F7FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80BE
FF0073FF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF00
7DFF007DFF007DFF007DFF007CFF0079FF9BCCFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E6E6E
6E6E6E6E4E4E4E6E6E6E969696969696B5ADADBBBBBBBBBBBBBBBBBBCACACAF7
F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
6E6E6E6E6E6E6E6E6E4E4E4E6E6E6E969696969696B5ADADBBBBBBBBBBBBBBBB
BBCACACAF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFE6E6E6E6E6E6E6E6E6E4E4E4E6E6E6E969696969696B5ADADBBBBBB
BBBBBBBBBBBBCACACAF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800
005800005800005800005800005800006D00006D00006D00006D00006D00006D
00006D00006D00006D00006D00006D00006D00006D0000580000580000580000
4800004800004800004800004800004800004800005800005800005800006D00
006D00006D00006D00006D00005800004800003300003358587AFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADD08CADD08CA5C67498CA
949CCEA5ADD08CADD08CADD08C98CA94ADD08CA5C674A5C674A5BD77A5BD77A5
C674A5BD7786BC8A92B26D8CAA577691476B8B386B8B38446925446925496310
4963102D6B090084000084000084000084000058000042083152003152003152
00174A00004208004208004208004208004208457446779C7BFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE538CFE4384FE
538CFE3377FE3377FE538CFE538CFE538CFE4384FE538CFE689AFF689AFF689A
FF5A94FF689AFF5A94FF2973FE3377FE4384FE3377FE2973FE266AFE105AFE10
5AFE0052FA0052FA1663FE4384FE4384FE4384FE4384FE125AED004AE90052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA427BFE77A5FFFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA6E6E6E211821211821
4239424239424239424239424239424239424239424239424239423030304239
4230303030303030303030303030303030303030303010182110182110182110
18214239427B847B7B847B7B847B948C8CEDEDEDF7F7EFFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7E9FF0173FF0074FF00
75FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF
0075FF0073FF0F7DFFF0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFF80BAFF006BFF0075FF0075FF0075FF0075FF0075FF00
75FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0070FF5EA8FFF8FBFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A4239423030306E6E6E96
9696B5ADADADB5B5BBBBBBCACACAEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A4239423030
306E6E6E969696B5ADADADB5B5BBBBBBCACACAEDEDEDFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A
4239423030306E6E6E969696B5ADADADB5B5BBBBBBCACACAEDEDEDFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD29295200
004800005800005800005800005800005800005800005800005800006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D0000
6D00006D00005800005800004800004800004800004800004800004800004800
005800005800006D00006D00006D00006D00006D000058000058000048292952
292952757489FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEA7D6AA9CCEA5ADD08C9CCEA59CCEA59CCEA59CCEA59CCEA5A5C674A5C674A5
C674A5C674A5BD7786BC8AA5BD77A5BD7786BC8A92B26D8CAA576B8B38637A2D
5973283973424469254963104963102D6B090084000084000084000084000058
00004208315200315200315200315200244A00004208004208004208004208AD
C6B5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE538CFE4384FE689AFF3377FE2973FE2973FE2973FE3377FE689A
FF689AFF689AFF689AFF5A94FF4384FE689AFF5A94FF2973FE3377FE4384FE33
77FE266AFE105AFE266AFE1663FE0052FA0052FA1663FE4384FE4384FE4384FE
4384FE125AED004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FAB5CEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEF7F7EFCACACA4E4E4E1018211018211018211018211018211018
211018211018211018211018211018211018210E0F0E5A635A7B847B7B847B7B
847BEDEDEDF7F7EFF7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF62A6FF0069FF006EFF006EFF006EFF006EFF006EFF006EFF006EFF
006EFF006EFF006EFF006EFF006EFF006BFF0F77FFF0F6FFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80B7FF0064FF006EFF00
6EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF
006CFF0772FFD9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE8686864E4E4E5A635A4E4E4E6E6E6EA8A8A8B5ADADB5ADADA8A8A8F7F7EF
F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE8686864E4E4E5A635A4E4E4E6E6E6EA8A8A8B5ADADB5ADADA8
A8A8F7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFE8686864E4E4E5A635A4E4E4E6E6E6EA8A8A8B5AD
ADB5ADADA8A8A8F7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE000033000048000048000048000058000058000058
0000580000580000580000580000580000580000580000580000580000580000
6D00006D00006D00006D00006D00006D00005800005800005800005800004800
004800004800005800005800005800006D00006D00006D00006D000058000058
000058000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFD8EAD99CCEA59CCEA59CCEA59CCEA59C
CEA59CCEA5A5C674A5C674A5C67486BC8A86BC8A86BC8A86BC8A86BC8A92B26D
849C4E7691476B8B38637A2D5973283973424469254963104963104963102D6B
09087401008400008400008400087401004208244A0031520031520031520024
4A00004208326639D8EAD9F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFAA9C6FF3377FE3377FE2973
FE2973FE2973FE3377FE689AFF689AFF689AFF538CFE4384FE4384FE4384FE43
84FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA
0052FA105AFE3377FE4384FE4384FE3377FE3377FE004AE90052FA0052FA0052
FA0052FA0052FA0052FA3377FED9E7FEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF3FF277EFF0060FF0067FF0067FF
0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0064FF0F70
FFF0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFF80B3FF005CFF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF
0067FF0067FF0067FF0066FF005EFF9BC3FFFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696964E4E4E4E4E4E
655A56969696969696A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696964E
4E4E4E4E4E655A56969696969696A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FE9696964E4E4E4E4E4E655A56969696969696A8A8A8A8A8A8FEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB58587A000033
0000330000480000580000580000580000580000580000580000580000580000
5800005800005800006D00006D00006D00006D00006D00006D00006D00006D00
006D00005800005800005800005800005800005800005800006D00006D00006D
00006D00005800004800004800003358587ADADADBFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECF7ECB7
DBB9A7D6AA9CCEA59CCEA59CCEA59CCEA5A5C674A5C674A5C67486BC8A86BC8A
86BC8A86BC8A86BC8A8CAA577691476B8B386B8B38637A2D5973283973424469
2549631049631049631049631008740100840000840000840000840000420817
4A00315200315200315200315200457446779C7BFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FED9E7FE689AFF3377FE2973FE2973FE2973FE3377FE689AFF689AFF689AFF43
84FE4384FE4384FE4384FE3377FE2973FE3377FE3377FE3377FE266AFE105AFE
266AFE1663FE0052FA0052FA0052FA0052FA3377FE4384FE4384FE4384FE3377
FE004AE9004AF70052FA0052FA0052FA0052FA3377FE77A5FFFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
CDE0FF1F71FF005CFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005F
FF005FFF005FFF005CFF106AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF89B5FF0053FF005FFF005FFF005FFF005FFF
005FFF005FFF005FFF005FFF005FFF005FFF005FFF0059FF5F9BFFFDFEFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEBBBBBB3030304E4E4EA8A8A8A8A8A8A8A8A8FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB3030304E4E4EA8A8A8A8A8A8
A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB3030304E4E4EA8
A8A8A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEADADBB73739473739400104A0000480000580000580000580000
5800005800005800005800006D00006D00006D00006D00006D00006D00006D00
006D00006D00006D00006D00006D00006D00006D00005800005800005800006D
00006D00006D00006D00006D00005800004800004800004858587AADADBBFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEB7DBB99CCEA59CCEA59CCEA59CCEA5A5C674
A5C674A5C67486BC8A86BC8A86BC8A86BC8A86BC8A849C4E7691476B8B386B8B
38637A2D59732839734244692549631049631049631049631008740100840000
8400008400008400004208174A00315200315200315200315200DADECEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE689AFF2973FE2973FE2973FE33
77FE689AFF689AFF689AFF4384FE4384FE4384FE4384FE3377FE2973FE3377FE
3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA0052FA3377
FE4384FE4384FE4384FE3377FE004AE9004AF70052FA0052FA0052FA0052FACA
DBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBDEFF0358FF0055FF0058FF0058FF0058
FF0058FF0058FF0058FF0058FF0058FF0058FF0056FF085DFF78A6FF80ABFF80
ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF4082FF0052FF
0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0053
FF2E75FFF0F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE1818420000
4800004800004800004800004800004800005800005800006D00006D00006D00
006D00006D00006D00005800005800005800005800006D00006D00006D00006D
00005800005800006D00006D00006D00006D00006D0000580000480000480000
33000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECF7ECECF7EC
ECF7ECBDD6A5A5C674A5C674A5BD7786BC8A86BC8A86BC8A92B26D92B26D8CAA
57849C4E7691476B8B386B8B38637A2D59732839734244692549631049631049
63104963102D6B092D6B09008400008400008400087401005800044610315200
769147D1D4B6F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9
E7FECADBFECADBFE84ADFF5A94FF689AFF5A94FF538CFE4384FE3377FE3377FE
3377FE3377FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052
FA0052FA0052FA0052FA105AFE1663FE4384FE4384FE3377FE2973FE105AFE00
4AE90052FA4384FEBDD6FFEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFA0BF
FF0453FF004EFF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF00
52FF0051FF0047FF0046FF0046FF0046FF0046FF0046FF0046FF0046FF0046FF
0046FF0046FF004CFF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052
FF0052FF0051FF004CFF407DFFE5EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE18184200004800004800004800004800004800004800005800
005800006D00006D00006D00006D00006D00006D000058000058000058000058
00006D00006D00006D00006D00005800005800006D00006D00006D00006D0000
6D000058000048000048000033000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6ADD08CA5C67495BD8486BC8A86BC
8A95BD8492B26D92B26D8CAA57849C4E7691476B8B386B8B38637A2D59732839
73424469254963104963104963104963104963102D6B09008400008400008400
0084000058000042085667359CA584FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB5CEFF84ADFF689AFF538CFE
4384FE4384FE3377FE2973FE2973FE2973FE2973FE3377FE3377FE3377FE266A
FE105AFE266AFE1663FE0052FA0052FA0052FA0052FA0052FA105AFE4384FE43
84FE4384FE4384FE266AFE004AE93377FE84ADFFFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFC3D5FF1E5EFF0045FF004AFF004BFF004BFF00
4BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF
004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004B
FF004BFF004BFF004BFF004BFF0049FF0046FF5284FFE8F0FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEC6C8D658587A00003300003300
004800004800004800005800005800005800006D00006D00006D00006D00006D
00006D00006D00006D00005800006D00006D00006D00006D00006D00006D0000
5800006D00006D00006D00005800005800003358587ACACACACACACAEAEEFAFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEA5C67495BD8486BC8A86BC8A95BD8492B26D92B26D8CAA57849C4E7691476B
8B386B8B38637A2D597328397342446925496310496310496310496310496310
2D6B09008400008400008400008400005800004208EFF7FCFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE689AFF538CFE4384FE4384FE3377FE2973FE2973FE2973FE2973
FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA00
52FA0052FA105AFE4384FE4384FE4384FE4384FE266AFE004AE9EFF7FCFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3D4FF1C
57FF0042FF0044FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF
0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045
FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0041FF0547FF6992FFE8
EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEADADBB58587A000033000033000048000048000048000048000058000058
00005800006D00006D00006D00006D00006D00006D0000580000580000580000
5800005800006D00005800004800005800005800005800005800004858587AAD
ADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE95BD8486BC8A86BC8A86BC8A95BD8492B26D8C
AA57849C4E7691476B8B386B8B386B8B38637A2D597328547331446925496310
4963104963104963104963104963102D6B090874010084000084000874010874
01ECF7ECFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FC538CFE4384FE4384FE4384FE3377
FE2973FE2973FE2973FE3377FE3377FE3377FE3377FE266AFE105AFE1663FE10
5AFE0052FA0052FA0052FA0052FA0052FA105AFE1663FE3377FE4384FE4384FE
3377FE266AFEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFD6E1FF6188FF0641FF003BFF003DFF003FFF003FFF
003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003F
FF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003CFF00
37FF1C51FFA7BDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB000033000033000048000048
0000480000480000480000480000480000580000580000580000580000580000
5800005800005800005800005800005800005800004800003300004800004800
0048000048000033DADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98CA9498CA9498
CA9486BC8A95BD8492B26D849C4E7691476B8B386B8B386B8B386B8B38637A2D
597328597328526B224963104963104963104963104963104963104963100874
01008400008400008400008400D8EAD9ECF7ECFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE538C
FE538CFE538CFE4384FE3377FE2973FE2973FE2973FE3377FE3377FE3377FE33
77FE266AFE105AFE105AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA
0052FA2973FE4384FE4384FE4384FE4384FEEAEEFAEFF7FCFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFBECDFF
4771FF083EFF0034FF0039FF0039FF003AFF003AFF003AFF003AFF003AFF003A
FF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF00
39FF0037FF0035FF1347FF7291FFE1E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE8689960000330000330000330000330000480000480000480000
4800004800004800004800004800004800004800004800004800004800004800
0033000033000033000033000033292952FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFE92B26D92B26D75AF74849C4E849C4E849C4E
7691476B8B386B8B38637A2D597328597328526B224963104963104963104963
1049631049631049631008740100840000840000840000840000840075AF74FE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3377FE3377FE427BFE2973FE29
73FE2973FE3377FE3377FE3377FE266AFE105AFE105AFE105AFE0052FA0052FA
0052FA0052FA0052FA0052FA0052FA2973FE4384FE4384FE4384FE4384FE4384
FE8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFF7F9FFB9C8FF2C57FF0334FF0031FF0032FF0034
FF0034FF0035FF0035FF0035FF0035FF0035FF0035FF0035FF0035FF0035FF00
34FF0034FF0034FF0030FF0033FF0738FF6382FFDCE3FFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8689960000330000330000330000
3300003300003300004800004800004800004800004800004800004800004800
0048000048000048000048000033000033000033000033000033292952FEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6D1D4B6
CAD6C8D1D4B6BDD6A5BDD6A58CAA576B8B386B8B38637A2D597328597328526B
2249631049631049631049631049631049631049631077A55A86BC8A86BC8A86
BC8A86BC8A86BC8AB7DBB9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9
C6FFA9C6FFA9C6FFA5BDFF98B9FF98B9FF538CFE3377FE3377FE266AFE105AFE
105AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA689AFFA9C6
FFA9C6FFA9C6FFA9C6FFA9C6FFCADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF0
FFBDCAFF6D89FF214BFF0332FF0031FF0030FF0028FF002DFF002FFF0031FF00
30FF002EFF002AFF002CFF0132FF0031FF0735FF385DFFA3B4FFD9E1FFFAFBFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADAD
BB58587A58587A58587A31315A00003300003300003300004800004800004800
004800004800004800004800004800004800004800004831316358587A58587A
58587A58587A757489FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9CA5846B8B386B8B
38637A2D597328597328526B2249631049631049631049631049631049631049
6310BBC6A6FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF
3377FE3377FE266AFE105AFE105AFE105AFE0052FA0052FA0052FA0052FA0052
FA0052FA0052FAA9C6FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEEFFC6D1FFAFBDFF899FFF5B
78FF375AFF254BFF113BFF1B44FF2A50FF4F6EFF6984FF99ABFFB7C4FFD5DDFF
F4F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9495A500003300003300
0033000033000033000033000033000033000033000033000033000033000033
0000339495A5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00}
OnMouseMove = DXDrawMouseMove
end
end
object LivesEdit: TSpinEdit
Left = 8
Top = 355
Width = 81
Height = 22
MaxValue = 0
MinValue = 0
TabOrder = 8
Value = 1
end
object Enemy8: TRadioButton
Left = 8
Top = 164
Width = 65
Height = 17
Caption = 'Medikit'
TabOrder = 9
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
end
object MainMenu: TMainMenu
Left = 32
Top = 16
object Spiel: TMenuItem
Caption = '&File'
object Neu: TMenuItem
Caption = '&New'
ShortCut = 16462
OnClick = NeuClick
end
object N2: TMenuItem
Caption = '-'
end
object Level: TMenuItem
Caption = '&Load/Save...'
ShortCut = 16463
OnClick = LevelClick
end
object AlleLeveldateienaktualisieren1: TMenuItem
Caption = 'Rewrite all level files'
Visible = False
OnClick = AlleLeveldateienaktualisieren1Click
end
object Leveltesten1: TMenuItem
Caption = 'Test level'
OnClick = Leveltesten1Click
end
object N1: TMenuItem
Caption = '-'
end
object Spielfelderweitern1: TMenuItem
Caption = 'Level properties...'
OnClick = Spielfelderweitern1Click
end
object Leer1: TMenuItem
Caption = '-'
end
object Beenden: TMenuItem
Caption = '&Exit'
ShortCut = 32883
OnClick = BeendenClick
end
end
object Hilfe: TMenuItem
Caption = '&Help'
object Hilfe1: TMenuItem
Caption = 'General topics'
GroupIndex = 1
Hint = 'Help\EN_General.md'
OnClick = HilfeTopicClick
end
object WasgibtesNeues1: TMenuItem
Caption = 'What'#39's new?'
GroupIndex = 1
Hint = 'Help\EN_Changelog.md'
OnClick = HilfeTopicClick
end
object N4: TMenuItem
Caption = '-'
GroupIndex = 1
end
object AufUpdatesprfen1: TMenuItem
Caption = 'Check for updates'
GroupIndex = 1
OnClick = AufUpdatesprfen1Click
end
object N3: TMenuItem
Caption = '-'
GroupIndex = 1
end
object Informationen: TMenuItem
Caption = '&About...'
GroupIndex = 1
OnClick = InformationenClick
end
end
end
end
/ENU/LevOptions.dfm
0,0 → 1,128
object LevelForm: TLevelForm
Left = 195
Top = 103
BorderStyle = bsDialog
Caption = 'Level properties'
ClientHeight = 251
ClientWidth = 384
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poMainFormCenter
OnHide = FormHide
OnShow = FormShow
TextHeight = 13
object ElPopupButton1: TButton
Left = 280
Top = 216
Width = 99
Height = 25
Caption = 'OK'
Default = True
TabOrder = 0
OnClick = ElPopupButton1Click
end
object ElPopupButton2: TButton
Left = 8
Top = 216
Width = 99
Height = 25
Cancel = True
Caption = 'Cancel'
TabOrder = 1
OnClick = ElPopupButton2Click
end
object GroupBox1: TGroupBox
Left = 8
Top = 8
Width = 369
Height = 193
Caption = 'Editor settings'
TabOrder = 2
object Label1: TLabel
Left = 16
Top = 32
Width = 106
Height = 13
Caption = 'Size of the map:'
end
object Label2: TLabel
Left = 16
Top = 136
Width = 124
Height = 13
Caption = 'Internal level name:'
end
object Label3: TLabel
Left = 16
Top = 168
Width = 57
Height = 13
Caption = 'Level author:'
end
object Panel1: TPanel
Left = 16
Top = 56
Width = 329
Height = 57
Color = clInfoBk
ParentBackground = False
TabOrder = 0
object ElLabel1: TLabel
Left = 8
Top = 8
Width = 55
Height = 13
Caption = 'Information:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
end
object ElLabel2: TLabel
Left = 80
Top = 10
Width = 228
Height = 39
Caption = 'The size if only relevant for the editor, not the game.'
Color = clInfoBk
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentColor = False
ParentFont = False
end
end
object Groesse: TSpinEdit
Left = 144
Top = 28
Width = 121
Height = 22
MaxValue = 65000
MinValue = 100
TabOrder = 1
Value = 1200
end
object LevName: TEdit
Left = 167
Top = 133
Width = 178
Height = 21
TabOrder = 2
end
object LevAuthor: TEdit
Left = 167
Top = 160
Width = 178
Height = 21
TabOrder = 3
end
end
end
/ENU/LevSpeicherung.dfm
0,0 → 1,202
object SpeicherungForm: TSpeicherungForm
Left = 281
Top = 153
BorderStyle = bsDialog
Caption = 'Levels'
ClientHeight = 424
ClientWidth = 447
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poMainFormCenter
OnCreate = FormCreate
OnHide = FormHide
OnShow = FormShow
TextHeight = 13
object Bevel1: TBevel
Left = 8
Top = 56
Width = 433
Height = 2
Shape = bsBottomLine
end
object Label2: TLabel
Left = 8
Top = 72
Width = 34
Height = 13
Caption = 'Levels:'
end
object Label3: TLabel
Left = 8
Top = 336
Width = 67
Height = 13
Caption = 'Information:'
end
object Label1: TLabel
Left = 8
Top = 20
Width = 55
Height = 13
Caption = 'Level name:'
end
object LadenBtn: TButton
Left = 336
Top = 72
Width = 105
Height = 25
Caption = '&Load'
Enabled = False
TabOrder = 0
OnClick = LadenBtnClick
end
object LoeschenBtn: TButton
Left = 336
Top = 104
Width = 105
Height = 25
Caption = '&Delete'
Enabled = False
TabOrder = 1
OnClick = LoeschenBtnClick
end
object AktualisierenBtn: TButton
Left = 336
Top = 144
Width = 105
Height = 25
Caption = '&Refresh'
TabOrder = 2
OnClick = DsFancyButton2Click
end
object SpeichernBtn: TButton
Left = 336
Top = 16
Width = 105
Height = 25
Caption = '&Save'
TabOrder = 3
OnClick = SpeichernBtnClick
end
object AbbrechenBtn: TButton
Left = 336
Top = 391
Width = 105
Height = 25
Cancel = True
Caption = '&Close'
Default = True
ModalResult = 1
TabOrder = 4
OnClick = AbbrechenBtnClick
end
object LevelListBox: TListBox
Left = 112
Top = 72
Width = 201
Height = 249
ItemHeight = 13
TabOrder = 5
OnClick = LevelListBoxClick
end
object ElPanel1: TPanel
Left = 112
Top = 336
Width = 201
Height = 80
BevelOuter = bvLowered
Color = clWindow
TabOrder = 6
object li3a: TLabel
Left = 8
Top = 40
Width = 32
Height = 13
Caption = 'Size:'
end
object li1b: TLabel
Left = 96
Top = 8
Width = 17
Height = 13
Caption = 'n/a'
end
object li1a: TLabel
Left = 8
Top = 8
Width = 47
Height = 13
Caption = 'Enemies:'
end
object li2b: TLabel
Left = 96
Top = 24
Width = 17
Height = 13
Caption = 'n/a'
end
object li2a: TLabel
Left = 8
Top = 24
Width = 26
Height = 13
Caption = 'Boss:'
end
object li3b: TLabel
Left = 96
Top = 40
Width = 17
Height = 13
Caption = 'n/a'
end
object liu: TLabel
Left = 8
Top = 8
Width = 135
Height = 13
Caption = 'Level cannot be read!'
Font.Charset = DEFAULT_CHARSET
Font.Color = clMaroon
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
Visible = False
end
object liw: TLabel
Left = 8
Top = 8
Width = 125
Height = 13
Caption = 'Please choose a level file.'
Font.Charset = DEFAULT_CHARSET
Font.Color = clNavy
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
Visible = False
end
object li4: TLabel
Left = 8
Top = 56
Width = 118
Height = 13
Caption = 'Name / Author unknown.'
end
end
object LevelNumber: TSpinEdit
Left = 112
Top = 16
Width = 201
Height = 22
MaxValue = 0
MinValue = 0
TabOrder = 7
Value = 0
end
end
/ENU/SpaceMission.dof
0,0 → 1,2
[Directories]
OutputDir=..\..\SpaceMission
/ENU/SpaceMission.dpr
0,0 → 1,24
// Do not edit. This file is machine generated by the Resource DLL Wizard.
 
library SpaceMission;
 
{ITE} {DFMFileType} {ComHilfe.dfm}
{ITE} {DFMFileType} {ComInfo.dfm}
{ITE} {DFMFileType} {GamCheat.dfm}
{ITE} {DFMFileType} {GamMain.dfm}
{ITE} {DFMFileType} {GamSpeicherung.dfm}
{ITE} {DFMFileType} {GamSplash.dfm}
{ITE} {RCFileType} {SpaceMission_DRC.rc}
 
{$R 'ComHilfe.dfm' 'HilfeForm:TForm'}
{$R 'ComInfo.dfm' 'InfoForm:TForm'}
{$R 'GamCheat.dfm' 'CheatForm:TForm'}
{$R 'GamMain.dfm' 'MainForm:TForm(DXForm)'}
{$R 'GamSpeicherung.dfm' 'SpeicherungForm:TForm'}
{$R 'GamSplash.dfm' 'SplashForm:TForm'}
{$R 'SpaceMission_DRC.res' 'SpaceMission_DRC.rc'}
 
{$E ENU}
 
begin
end.
/ENU
Property changes:
Added: svn:global-ignores
+*.local
/GamSplash.dfm
0,0 → 1,10055
object SplashForm: TSplashForm
Left = 241
Top = 158
BorderIcons = []
BorderStyle = bsNone
Caption = 'Bitte warten...'
ClientHeight = 480
ClientWidth = 640
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poScreenCenter
TextHeight = 13
object SplashImage: TImage
Left = 0
Top = 0
Width = 640
Height = 480
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000002800000
01E00802000000BAB34BB30000000970485973000004BB000004BB016E1F0EAE
0000000467414D410000B18E7CFB51930000FFFF4944415478DAD4BD79B86D55
75A73DF739A4AD4AA51ACB5E5AE945AEA022229644B14220420C8140E8A2A0F4
207D4FE8EEA51301810B4A495D90D8017628A2C1520491468242A174A2D15499
EA53E94BEEDDDF8FFD3ADF8CB3F6D927A1EAFBBE27B5FE38CF3E7BAF35D79C63
8E39FA66D45A9B9B9BFBC7FFF81F8FC7E3FFF5BFFED7DFFCCDDFFCECCFFEECEA
D5ABE7E7E7F3EFCFFFFCCF3F33B9FEE93FFDA77FFAA77FBAD65A6BFDE4273FC9
4FDB6FBFFD5D77DD95EF73431EFFEBBFFEEB356BD6FCE22FFEE25FFEE55FE69E
7CFF0BBFF00B7FF5577FF5333FF333F9DC665C7963DE95017FEEE77E2E23ACBF
FEFADFFBDEF7F27D9EE2D78C9C5FF9F08217BCE0BFFDB7FFC6ACF83573FEF33F
FFF34C35BFE6EDBC313F650299C9FFFC9FFF33C332990C92EF734FEE644A1967
341AE559BECF6DACE29FFC937FF2677FF6670CCEC27367FE7267AEFCCB07BEC9
6D7FF1177F91FBF399E5F36BBECF64F27D66952FF337AFCB9D0157DE956F32B7
803AAFCEF78B0287F7E6C17CF01540DBB7E4D78C9071D659679D3FFEE33F66B6
9958D698FBF36FC09BDB02B17C6037014856CA372F7CE10BFFCB7FF92FA79E7A
EAFBDFFFFEFFFEDFFF7B06CF46FFD7FFFA5F33AB8C909BFFD13FFA47D9F70C9B
7F01547ECABFC02A40661A9B6CB2C91FFEE11F6651CF7BDEF33213A69157E45D
792AF301DAB9FED93FFB67997F5ECDF8B9F26B469B8527793023BCF6B5AFBDEF
BEFB32FFDC1C6800B78CEF6C337260CE7CB20A379711801EA0CEE73CF53FFEC7
FF6021DE36B89EFFFCE7FFC99FFC493E5C71C515871F7E78DDDFCC21180522E5
A5997CFE7DC94B5E92856786F9F7577EE557EEBDF75E0E54BE0996FED22FFD12
D3E6D94035FFFEF22FFF72EEC9AFF91EBC0D00F37D66951BB2967C030A019F7C
00679C646ECB2B382F995BDE921BF26FFEB2EA7CC34AF35456CD39CDF79943DE
9EEFF32B90C9BBCE3BEFBC33CE3823CFE60616029204BB7EF0831F0420391AC1
6A0E5A769F85CF4D2EC09E99671A192D9F39B69088DC09F4F8FBB297BD2C6739
DF07E5DEF9CE77DE79E79D193FF764F9E0E47FFC8FFF915767A8DC96BF995576
2A930450B9195CCD6879C58B5FFCE23FFAA33F5A7BEDB5F377B3CD367BF4D147
395F7930D0C88483C3793063B2F680250F6640A80A8785755D7EF9E5C71D775C
1EE4D433CEB265CB3266A09DA7A0002C93C9F06086058CC004F807DA792A7F73
C3BFF817FF22B89A9B734FFECD3D5960A09AC1BFF9CD6FE65DF932DF00463036
9FF376095ABEF9E7FFFC9F6762B92D10086432BDFC9B07F38AFC9BDB58512E88
9E47C05390BFCC9CBFA053DE18E0641CE8C3BFFC97FF327B0D26640E50A1BF99
5C994006CF232C8761734FF0014ACB91E75D2C81D30A8DE5ED192D5FFED66FFD
D60D37DC208DCAE433C88F7FFCE3FC9B0FF93EA4298BCA66FDE7FFFC9FC1F680
9D1371E491475E70C1051913220353C80D2F7AD18BDEF086377CFCE31FCF5A5C
B2EFF5B0E7CE830E3AE8031FF840C891F48ABD96B4C2BFF85E26521715F40B26
3FFDF4D339C2DC9FF94024615B5248E700A8D95F0035CA54B297CC8C79409E18
D133CF2BD99E4C8B33900F793CA70882E2A1CD3D99741E07D08B12383726F704
F4F9BCF9E69B6731FFE93FFD2788544683A166913FFCE10F7D2A5726C962984F
80987F33E76C55C66139A12F59FCA1871EFAE10F7F38BFE63372462696EDCCDF
BC9A25C09503C4CC242FCD42B2EA0C9EB7672D3066F6B2E2311FF89C7771C219
012C01E1C02D773D8357529B09E7BDB3A4930C9547004EE60F7264B43C9E2583
949946702EA81CC2C1538BF2B07C9F71329FBC31EB42C8801ED543557707AA0D
C9431282E7E591002484233B05F5C96855326017200AF93253CD411D4C29CB07
E6B90154992588E47539EA3BECB0C31D77DC114C6339797B0E6776396FCF5FD0
1DB4E603878D09B0907CFFD297BE344F65F21924742AA3650E4A33D3EF0DB664
5D7984456599AB56AD7AD7BBDE059BC9B31916390319828307C2F3DE7C13F042
B28124E211EBCDE0F91736C34BF353FE150F416F4EA580CABF6151795DA08A10
00AAE4C140C3A79843BE418E042C9588705B26EF2439CB6166FFE13FFC87DC10
592A6BCF97871D76D835D75C130CCFCDD9CDC82521114148E0ECA140C002CF91
18722EF2C6C02AD3CB07609579E6FB6C3D141FE865DAD911241E61C52A7243C6
47628368B0D87C50C2434F8056725A3326948EF3C580E06AA697C920B8303247
2377667519077C067F32ABC099A3C7E4A5939C62A84DC6C9B09E650842E82FA7
2027F4473FFAD180F4412D33C8BAEBAEFBE4934F42F406C41A5AE74F7CE01403
7F6602A0C0B76C4DA601E51CBC51A65BCF5AA69A0D62811CEA4083CDF211C46E
F617C80414D9B2DC9957231E05141C074990FC06F8700AFC12C10EB0E4599084
85C0ECDB448D01A45954EECF3D6C41E6C38B44F5480CA160994FF62ED08E0007
936226428343C7E943CEF39864F0D34F3FFDFCF3CFCFF8192DD4D5B74F5345D5
3F9455D01EE87116F27D5E04F71DC09C412005CF72C0AC16411B792DDF56CD26
73CD390CA2E46588DB6866B92049014DEEA9080AD7E1B44F33605101FAC5FE31
69B4C9FC4541CC676ECE7CF8373FB1C2681BD088CCBC1E24363B13CB4F9912DF
C03C90625497595D6EB8ECB2CB4E3EF9E42C04A2C06D1CB31C8CEF7FFFFBADAB
3E88E76DC68518A1BC93CFC8ECB3F8CADF79212EC01E10849906E065E1D963F4
6364266D0F596F3E87768480224FB0416C4AF611BA005A4038180A8E8594005A
0711AB9A78CC31C784D3C34278295B894016FA2523CF97882FFBEEBBEF55575D
F5F297BF3C54263084A6A094ECB8E38ED17E98DB2C4081F18808AC9D9943BF32
B7B0673433BE84974C33E00033B7B5222D6532E79C73CE89279EB8E87BE18581
3962281B91F11159D4A137DC70C3C71F7F1C1CC608D426EA9132566012AE96B7
9F7AEAA979F6ACB3CECAE3D21AFEE64EC828F225F26BFE06F3590EC8CC9DBE1D
0A853C94C751C1B901F603A064F09C380E3B6265669B19AAD043E54133842D86
82DA7A707891BBC35F7ECD1579779F7DF6F175600EBC1C0CACEA1197B6AB8C1C
9AC824198D4738C2DE8F4E0C0FE6BD0E08116C13158AC308A1D47A71E185179E
70C209DCCC4222514513CABFD9A9EDB7DFFE339FF90CBBC946B42E37B335F91E
B2060BC9CC813FF8997F43349E78E2893CE84CBC946C20771936E0CD9DD572C6
7AABEA86A89D9B77DA69A72F7DE94B594B1EC9EB82CC2CBC025319C5DDA9DA42
EBAAB0670D9A5FE9156290E687AA6648BD4515E5AAE933DB1632609EF5F0E633
148CDD6140D100806407B3EAE0430E78969C330B1671F0F30AA4109931DB8415
8461397A4C29BFE62D39354C83455566C48AB454714C32F2061B6C1024C1E2A2
0D55711075AB4D04FA9D77DE390A3D26B13C8E18075584F208F3FA61C4B2E1A3
1C57860E14B20D5921CB0B2DCE0DD842031A2C3FAC1939948304B9E7F0284329
D0D5ED44AA523647A2848ED73D830A00DF238F3CF2E28B2F8EDC1452CEE39CC3
56C4795007E15AB46310CFB3F7E72D6CB6C24E8E0D26A94079D75D77FDD4A73E
9507232BFDF8C73F96302D4AAF513195D1D85105B4016A2ED88082AC4B70EB6C
D036DB6C73FFFDF77368350FBA46588567066B2DBA429804F661443644486437
268910E701C853C8C5C19B8C16BC8FEEF8D0430FE5D8836DF2DA2BAEB8229339
EDB4D3809E0603CD4A7969F62B2CAA52010EB9FF8630AD58B1E280030E980558
3FB3E9F99069E3BCC81A333774146C983260D5020779C52B5E11187EEE739FCB
6E069E59726EAE947DF05E44CC2A652B17A3DB05A3F6DE7BEFA8C5194A1EB3DE
7AEB3DFDF4D3CAFBB94796CF1966F92AAF08E081157B8165120E1AD29319227E
E55F9C1A5B6FBDF5830F3E08C5E7ECE4D0B14C841B6C986AE7198D8554410AD2
C099E580A350B689BAA00548E327A68E6C7AA85B4097D13281BCB7720EF4CEBC
2E3B820A92B7E4CE8D37DEF8D1471FAD8754BC8532A0B4E1D7901A5626548D87
FC5B656E1D559961B0E8631FFB58E69C79E6455938665276FFE1871FCE36651A
2040E60FD9C9E3F91762EDBE64B1B901212CFF627B40C2639B9086D9D0DD77DF
FDBAEBAED302C42145778463712EB078617709AEB6899EC0AF18CC733F980373
CD37471D7554E483E00F071C83369670250F84039528A1E4BF758FD4C0B83FFA
6204058E5280F38E77BC63E5CA95412DCF9A5214D303386D22C8663E58206611
3A69FB8001E7D73C1E760807D16305628087C8E59870323D10DE7B20562AC10A
315000A85F702F9BFEC8238F0C3C71F8745A97E47850F346C8510E329A64F66B
B3CD367BECB1C790C0248F921A9C74192133DC76DB6DEFB9E79E2A46E41E2500
6C87EEACF6D4D149279D74D14517E5B160464E4E5013092BABCDDF5FFDD55FFD
FDDFFF7DC11A75E1924B2EC9F74108ECB78BDA3C5B77913EA70BDD1A8756B03F
AFC80AB34FD056C85F161C0A88F8CFE681E2596A40909FF254A6A485193492C8
625DC962435340D0B090F0F57CC60CC23620AB86EFE68DB8C3F317982CC18099
39EF5281A81618442AA6AD234DA5B92DB4714156EAFCB186715B451AFDB58C2F
AF424F6D5DB168DDFDC3F6A3A24129320EE6C7FABA90A4FCCA082E0D6EADAF0B
B52F53E538E91503CBF32CFBE237483CDC094D076E4B00168CAFDE1027093509
97223840FF8D1AB0589EA72EBDF4D2638F3D16FE94A5A1A9B39C591B0AEE3179
F85FFE664559428E287C3447264882BB1714CD693AE59453C2E9EFBAEB2EC53B
CF39D41CDBBB1B11F8E39DC59600E7630BB04670D698466655CD0C7819C167CC
B9D833105BB92D6826B3C90891628F38E208F9933C2F73CB2BA0A41599C552B5
8DBC6BABADB6FAD18F7E94C721E8F00F8DCFD5A901F9030DB04561B104B60120
762629571876485EB59A563557826E780AAB66AAF0B95674EE3A936CC4DBDEF6
B610B4EC94765AC5A320529E459AC1F987A1181D979940A3F246F0010D35F8BC
FEFAEB47F10550820B36D026A20C50CDBBB081E381D6AF87D4A5B157568AB693
2F03E7FCCDB4F7D8638F7FFB6FFF6D8662CE838B01C17F4D08831BE4CDAD0B88
E28932016E2FF5287EF528A96EF2BDD10FC8F1D5D6ED516AC57E2BA97758BD8D
BEA275CF63C0BBD75E7B5D7FFDF579DD8D37DE1879B775A91152C9923109E058
45DC54C44467D5046868823664F52583900C20C8CD7A4654D2C040F170101AD2
BAF13204E790430EC9FCC352A346E7B000ED6A9F78F66FEE0E343363E078DE79
E78527855EE7CBD6ADE7AADB482BEC81AEA959F4AB3D970B3E0A91955F029D68
A501E57EFBED1749107711180C498A04970386D4836982F82975442D69B84F94
D79879F03BE727BC366220B40CC508CB7C066103E49A6CEAF4853708D30A811E
22873B34B008E9F3AFD6AA6A41929DA09E1A089007817F0D0D1077F5F86A36C7
D8E5D9D03EC9C89AEE7D0423369E6C28113497C74331F1DC20AA2BDE4E1FBC7A
B159EE35D265205F892902841A0FE49E91F520E899E6B3DE148DB7E87FD32668
A6171296F7E6988540FFE5E49A3561CCB36E1933441D3418C4A511D3149A1896
896440E0558E55E5376EBDF673C3AFD84775773922568D1A63880E843A95C9E4
4E6C1B1E19B00546187E73FBEDB79F70C209E79E7B2ED6F2564272D85F5E8452
45F084267A8F150E1A90844899D0C79C0B1405095C6ECEAB31B967F0003037E7
7061A54741E7F431ECC0A77BC61967448F24E0433AE32E037011A92A8E794BE6
ACCEED42086B5AB1624548471E0FA7E7BD8161FE8D2E71F0C10783F04490E08A
82172A3029EC6651599AD10608977A3D31C9E85C6026803123471A70151228C8
05EABBBBDFBAA00CD2F20D2181B921043D43711CC46D999966D2568CBDFC6B58
C0C004AD9BAC8A475831F52EB76EC5AC1AED85175E78F5D5570756A106795679
A80ABEADEBD9AECEB81FA4762C616E2EF44AEF64EBB671C7514963AA04D3B141
C83D441A824E21DDC18A8C8FA8A4819673A4B68390042E656BF239A81EB6929B
33A0B7F9415AA4DD1E991EF3307E68BEDC65975DEEBDF75EF8B7024A5B689F18
E999685D56C572C8B221676D22C0E643040DD4D0488B59064B5D947E3D57DF67
CEDE59679D252BC2061E51FD81071EF8CC673EC397C4DD3937C3379C3637645F
F3A5875CA32B086DF0973E80FC25A80715A475EB476491B3CF3EFB577EE557EE
BFFFFE9CCF430F3DF4F2CB2F5F625D986D0108B14E0426640E79D7DA6BAF1DF9
06D4D40F67805F2B1A803B04B6551F4CE09FD1AADD0F320469E366281D0E48DD
BD355C859F3C906ADB21A93FF8C10F5A09AE36C61B7104A04520BDF5D65B032E
CFA483545A308D0F99C33AEBACF3F4D34F23A8E611CC7D9A07F42741CBE4B58E
59654F0901CC385325869F43CBFC091221EC1CB183A3888A03BD18D0772F3460
0411F08A77716C2285844F649E608E4663B7C6385B9CDFAD5B35D0FBB7DB6EBB
CF7EF6B346705451A62203BB867E9C499E7EFAE9D75E7B2DF676C84D94A1830E
3A28930C5DD68AAB5F4D914B7D054F13D611C4054C64357301F14ECF0EA605C4
5079F3ACF3CE5FC082111898C3DBEAA173FBD4CE33ED2C04EA9F2FB12B54CF25
4C05B4D13E09056410681F2AAF8A0BFE23219C47020DB0379B98494ABBF378D6
ABAE9FC9C30F32324C3A68F0D4534F81EDC01CFA8E2809AB76BBA1600846A79D
76DA0D37DC90C3654823E41E175B5E010E4894C1937CC85BF068B4EEB8818E57
572E87CE830F4A8BCC6C811B3AA0CC487B8440238B6FB1C5160F3FFC70EB1AD1
A221B4B93F4BCEFD481804C9CB60A63D6B0306CCE788C2F9D76082561CC3E046
B60941B646D1C3E73076E65F1DD206402137C3DDF3D4C9279F1CCEA27A908D26
E9007C80EE0D522108756283FC573D87B30391C9D961282CAFAC0B0355BE21AC
3DF713A28F56C3EE40B4A1D8238805A61BE917E2307BCF4E67944019D4C99C0E
3CF0C0CB2EBB6C8914A3E7CA80736C588F0619564B1A0C2C1654D349C332905E
2522A038465AF646F8826458812055FEE4980C027A698EE30A9EE50068E71C5C
7976D9B2650F3DF4100948D00208964630E917D1010AD735F87CD4C3AD8D4AAB
BC073D3B1819B212420CC7AA5E4CA513D892EA828922D5F2836914FBD8BAEBAE
9BBD0E82E645CC2D6FC1E9A2D787BF3BEEB8E397BEF4255FC154F314E47B09D7
4396BFCD36DB4424444CC9DC80439DBF669C2A026AF862738DE6E5B842C2182A
A0CEF79936A0FED0873E946379D2492745FAF9D3C9152DF089279EF02C49E6A4
1198733D54FBEFBFFFAA55AB08BA811A467BCEDC5062500AC5BDBC347FA1D7C4
526836AF263BB90E9A1FB659D60299C88A30D46BFC4086F371D24220DC647605
F2679E7966C8CDEB5FFFFAAF7FFDEBDA7E8873C1BF801720335CBE7CF929A79C
020C390ED0EE7A58AAE7156E04AE42E9C8418244E6713C883A65E122A4486415
E27FE519153182F9F99B3BD935439A5B918AAA56479C0B123631718248F784FA
4AEB11EC0488C0118DC421FC0DB714F06C5DEB424CD744919B23A14687161A51
92C2DA1116B92DF3DF76DB6DEFB8E30E169B0161ED279C7042F445A66128893A
9FC65E5F078DD690C6C952863034B215FDB22AB548C6F006C31ECDDEACF41906
2C21628608709A36A7C520A2F14331C21188F81DF530F556E2BC7C7051133466
57A0079263EA374647A3B1E967FC84E7A24D747A633E383E39E67BEFBDF79557
5E99B798BAA91428BED5A837235B515E3DA4352ECC43A167530242881CD3A8CE
0E18CA565B6D158E0091E4B0F339F7434F9EB5B510B48D94B1D1461B3DFEF8E3
7AB031B5B90D30B06C7FD00E7AF7BCE73D6F3AC3E47FEF22E685F0961C45D47C
A80CF20B272A6FCC22F3AF4A499B68C6597C08EB7BDFFBDE0B2EB8200422B711
40A18165DCF370327E663EEA59B96033308D44FC8637BC21E727DF44DFBDE69A
6B324E2683A8AB9762D1F9873DE3CAFAC0073E90F396A7342D6417C9580DBEE6
6FE6902598ADC87C704BB7857A30549B88034D94A838885706DC67F97923A64E
3C341953615CFD839C480E36278477D5C4B38C10EEBEEBAEBB46D9E218C0A25C
A9AE771411D921B466167CE0D69B6CB249561DB0B71EEE07D1CCFCF32CE60A30
A1A64571DEF47013701E5419F76480E973B5E805220955081330CFE4F5F4ECBE
FBEED12C0393DC137EF6B9CF7D0EF8E0E04401427B764CC82814C11C2D636579
7B24F1ABAEBA2ABA17DC3AE811048683624C0E1AE72D358846BA4CEC02FC0372
808F533AFE9297BC84509A4C32E3A353564B60EB218D596CDE4BB85C860D9C4D
D6AF3C5E522BB961A5AF7EF5ABDFFDEE771F79E491049607E0A0109680B666AC
79CD48936759FBEA67D65F7FFD40180247D21A111EF93E584ACEA5DE6B537A98
A4DB0AE411BBC116ED13F9297320D681C9871CE7C441B5B3BF279E78E245175D
44B27BEB016BA6A86ACB852B33BD7C9343142D8D352A2823A2D52053D5F76C2B
7330AA116A9BD9BEEB5DEF8AE41A1D9A097B3C5B8989231981C80C6DD706AF61
C4424CC100AE28A3D963B095E833A001AF809022A8A996311A22570E69B80024
97D35DE3193165999929A3527CA97E5C554FED58A392CF2919CF80001F88710F
DE9CFC8491A696795043837182158664EFB7DF7E1FFDE84711445851CDEF1A48
065570315E27C0846703612D82BAAB89ED6ADDD2C9CC518D90E6F5D2229D2800
791E177CD0CB0552AA7968B0658A3F33B9CCA6AFFAD9FFF9A5E980971E72C821
37DF7C7318218EE7B0C9202274CA47C2273255182D1E6B4A5E104B456008F238
68849190250020D52CE188E77F34C9340DBDF0F0075132C2120C663CC93039E7
9C730077EECF84431643E010E76B18172EAB9A81FD73930B73310181F910A6FE
477FF4476021A2622D09B2F1C61B07D5F252CC77E8D626A8048611C6EFBEFBEE
D64DF7AD04D1543A1BA96BEBADB7BEE5965BF2C861871D76F9E5970313C358C0
10021F480325C71A3D0F1A1DA862EB9B15548C8709266D2D028B4B200ED7F973
D568886A73C62292ADC1EA004D818B2F6A95A9FA90592558AA897EC23E4CB599
8C938543F208D7C2B2A2C30C81409148330082CE200F84445B24F42C79830D36
88A0A6C50F5DD63C99BA46CC150E85C302524ECD0DF225F2D3ADB7DEBACB2EBB
002EB45880A08A3F30DB181C04CC75EAD70B3CE7C405209979361DB008465407
9C6124EFCDB505FE45875A3DFE5B9517C736CC7B348986C5F485410BE990584B
0A0C903D02FDA91A95F4AB2AEE96A0D1029F71326C568AD7A075414D132B1E10
F8817938DE96F375E699671276CAB926F8FC861B6EF8DDDFFD5D041A3C7166E6
C0E7B8B3C2C17A06F829DFF8C6378619E71B1465F6A2BA7220DF6C9FBE24B097
703922125458A13C66C30F4CC178139472F6DC73CF681AEE3BAB965058860224
94B38E17A639A1BDD4F09A56981CCB0127B1811BD907FEE3CFAEC2071AB08671
B042B11BDFBC9162E3529841475806C7245EC3CDAA303A8B018F7A602943B55E
890133B2D27F4E44EEDC69A79D6EBBED364A85882AE6828A4BA256A5BA95F53E
FBD702259AF50CEBAF91EE801210074CA1234F3FFDF49AD9859C9EEB6564CAE6
9B6F1EB4809DB0DACA74A1C8B243B60D413EEBCF2079103DBE927EA30A07FE27
D520BD98DAF4C8EA23EEDF74BD5672BAA7091684BB6649B622B5E4185F7AE9A5
418E6F7FFBDBF083952B571E7BECB1F98947E407AD3B0536DC70C3EF7CE73B03
750D7B234E11A85EF662CB2DB78C66F9DDEF7E979D0A041E7BECB1886979170A
B45958507C0092C79151387E06E000D2903F13BB15E7B9A1860E2246645FD65D
77DD880BB36432D00ED9991DB1864074A057BEF295997016EBFCF96C7D1983E6
98C09A5E096B871D76B8F3CE3B21E588178B7AAD463D3B1EB106AAC72A327314
29E383F2EFBEFBEEFBE52F7F39C425D48A7355BD98D5C7A6155464C3106DC91E
AC8ECB972F3FFAE8A34DD372211C5D8CAEE8CD0621434D38C619872478236C73
C33EFBEC73DD75D7F95EC98469C435742E2FCA1232026E782B455053A9AEA832
60BE343223D320EC3CEB854BE5279CB5D47AFB9BBFFAEB096D1B8F261BCE16E7
9F3CF5A217BD28FF86BE0720CB2757604B629B416A91F9088918583531004C27
10B71E438B7C039270A791169C7A03B333CF134E38E18A2BAE80EB3348CD0D6D
13D9026EC7A66B5AE4DF36D1A7C9C3AC414F242961388447B2B3016F5E4AD92F
28AD66124C20992A36B64A945C6C5528735BA0946157AC5871F2C927B72E72A9
16633CAFDC77CD8C3A481639F0039BC55E6BE59217D4676B98B19F473DECB115
6355BDF01C67B48C8CE98E19C22FCDDBC47156C32988C9D25A86918C1C2409E3
A8479E12135069CEC01B6DE44A9BD2806B903FD6B52815018EB93978486BC02F
989FC960EFC488AB857C5C426EEBB11AFC1D8D7A5A9579D6040848D106A113EA
130A2F8B92BCF65CAE8C19792AAC77D4936A72CE830ABC9A2599B80D7DC15D27
EA9C7EFAE9514083A311EEAEBDF65A9EB23426533560159911EF3D528C099A10
5CB55582712C65374BC343F3769F349322656763A8DBD7BA66698E292151D238
3DD9F91B1D3792C4B8D7393276208B8D381FFEFAB5AF7D0DF61CD0F138322953
AA9F1523EA9C0D556D9DD5A19784389E7FFEF986FB425F347E20A5D680498412
230616850FDB81FFA61A6FD93B45EF4AEB9575AADBACEE4846C04760B82C310E
D36FE7006059DA64934DC2DDC19C9AC765358C0A2B8568E23CD1DAA16B9E05AC
555697C4F96498186E1AFC0239A54F3CF1843183C1B490BF68F0A141D929A316
20AC5AFF781DEE834C3B83FCD9E4625342CB22F7A89951EB8DDA3835773680CD
9D8F3CF248C65CB56AD5FEFBEFEFBBC8529B562E813C36C05A1D2992C455575D
45708A5AFB7892381B913193F9F18F7F4C0911E512B7D5F81AB02E83FFDEEFFD
DE29A79CA2A9890DBDF8E28BC3604871D60C3E1D2B37EAD9CF2095E1F18ADA37
DF7CF36FFEE66FB685C5433817D364B19A6D2DC924B9E33366C2E38F3F3E9A31
4555A5CB9642C32599B5B3EA9AD085122CD9443DB2325A75781BF7E036A99562
8B22455BEF619B24B0E65F537507DA9E62013645B626142F6424B22FAA304321
60C180A71909474F1051C62420458485011BEE9B47A21E64C9063AA06360D2CB
A6E4BDD5ED3AEE3541833F04CA49675A778DB3C57E537DF09690534E1D95BC67
B054F5639A01F3597348568AD50497259CDB00402EA2BA2C56011B5697AB8921
D378FBD3CFAA8383CA5B35EABA0667053AF90686349D7FED65F88F874D3783C9
30121727471459BE219D579A0B531CF7DAD1CA3E06D91BC890B760CFE4049A90
3A2B5DAA72B55632E104880743F7738D2630DE413F652564E35E16D1CC044407
D2528F39E698FC5AEBF550DB761058CE01D683327021E8CDC55308060328035F
B1E0B97D2C4107393B05576825069E40212083E58799CFF742A6A6722A314026
8C181A006A51F8533245E36D801C9AB544D131AC32083773BDE0700D8A5E9401
B3465062F3CD370F175483372DB8C6AF99EBC923BA00D94A6EA87155B58E2087
107311BB40650675DF8F7EF4A3BFFDDBBFCDBE844653EB06134BB56456AD8E82
D23509182D01B7139174D9AFDCC9C111563AA13378086BA8096810F932039A38
60F107E9AC34F7AD6F7DEBDD77DF6DB55BC93DC5F6281E10A69B5547788D1096
B563214758A990912C8A39F91C021D061060E691503ADD1F482D54B5CB5B105B
17D580EB9752835AAD101997B767BDF00F935B2ACE70706ADA09BB89FCE15923
53390CF8D8638F3DF3CC3357F7029C9C9A6C10D558ABAAB7DD76DB3DF0C003EF
79CF7B2EB8E002CE20AE53069CAE47EB9460EA9900260142BE2D7B670566008E
0C6D65F5B9527F789A5073641047A89A9971DEF296B7DC71C71D1487E071CBC5
48DFF040E5913C4EBA9DC972322ACC8AD9FDDD76DBED8B5FFCA2F13A3C15C844
CAA7365CC08866059942A6C73A8D1BD11D91E657EF3B265F134DABB5AC9A9DDB
DFC58065931C732803152E11024CCACA54A18D180B390E6F7EF39BBFFDED6F67
7F234D56D3FD400C9ADEE59F462BE40845ACBBFAEAAB5FFFFAD7DF7EFBED84D8
E086613D180F11CC71CBA9F82F4A28818B4467E084AF9E33EE979C714ECE3BEF
BC6C8F5656EE31D2D5A0CA0103D66065CD746DA74B306045549609128C4ADA43
46D86BAFBD3EF8C10F4E57079572CDF7FAE9D30C3873D874D34DA3751D72C821
2B57AEE44E92D22CAB44C2A2F64C32AC30B310905211A55A3034E4560E84D220
E25ACCC408D58173A1E6F256A1CAE2F595C7D4F9FB0AB6469DDB14A39A47380B
FE188E4059A6A44B6CFA8228E33B47A4531468C5235B917EBEF7CF98BE564F2A
38BEFCE52F7FF8E187F11F53E6C97417B1CB8CCF1AAE92F55A0D0A0F4240FD9A
D7BCE62B5FF90AF281A13A9816C84D02D31013C12E90CA439E61F365A8FC5D77
DD950749FC0392E1DC9FFEF4A75D660624493D3F65266F7FFBDB3FF7B9CF5D79
E595071E7820561305444510DE48341927BA758953AF3F6C63342982C6DBB3AE
D050B891557AF6D8638F1C8AFCFAA637BD2944A3C2DFD7D52020E43FBC21621D
38A3A9D6C22FE843D5A730888B6EC58837D080C7BDE23F2242ADE95DD5A95908
E634AC870F0181F311E0C90DBBEEBA6BB6836252D98B830F3EF8FCF3CF3FEAA8
A3DEFFFEF7E368274F69DCD32BA2716699B0BAAAEF5AAA0C09AFDA8D2B913464
2994E4A69B6ECA9DE4D1629ED961871D2259662659728DE3199C3E721131B35B
514B2B0B679CBA167AA3A1633C4BFC8A249D7DCC21426072A72C0496C3853BC9
E45DA853D0E3E8A38F0E3DD4C925C051543886AD274439F8C0992AC9D24E6638
91A4B275D1610913B4A369ABAB448F807F425F85A429FE41302AA53019932A35
C8B7D9D768BADE2F9238B80B3BB41EAC7ECA5A1861161E3B45E3631542311B66
55997A70C8242D761DE70D7BE02021F1E80AB55E4F7D7B15FC6BD400EAD412F3
D4D232EAD1FF3A0809B2A8B94373BD5709E7BCE6A7D79DF673B5B699C80FDF8D
F643B52FFEF5D843FA03644BE37A08A75D08E31E408729128995FB4F3BEDB465
CB961D70C001D077806FF914D9AD622648039C9940B59C0B55968F05B29A9431
AF611FD320C1E1B7D2CDA2F047FA26DE87641EC8D6A2F7E7B6D0B8C30E3B6C20
6448E6A6C9749BCDFEB12985E9C266EC53C4699C2B45FBB407C2B7287F911D0C
26B3A7084F997F284ED423C420C4A94A8207755B6187D00B8C01AD9B43A21A12
8287F6837D9BEAB898BCD8D075D75DF7473FFA919A6E2DCDA8DEE61E011FEB7E
507482842290A422214FD16F4A88850787FBE2108174BCF7BDEF8DAC6C1E3641
DD8446CE2DAC2AC3BF9663B4930FE36025CE047203E782ED3EFDF4D383C91699
5F8201B3B49AEE6F693F5C03369BD29038502146A50474EBD932A8F2EC3E9168
B987B4BDF1C2387CF2C7484EF3278A9E12EBB7BAB7D6316D8F9D026212A25A4C
431D0B5F29FB422C55EB8931E848E19A592CBCD33A71836017A210A88B805D1D
AA6BFC69E69F2FF34DED60D6A60A82B69E604D59989D76DAE90B5FF8825CCD84
7E89860D30783683E77591DB6EB8E1068CF644B0134D8DBE5E5F270FAE7E7189
6D4D93B19EB167A12DAC49522B2B8C178B826E3D370C742240C43433425210A6
DB248C51DF04E448C5AFD662AA2F1A32608F1CDE780B08A00BC205CDCD37B670
BEB4F35BF4323E7075EFEE906316F119293B8F6FBEF9E6D1D9611E60AA89B95A
4D89C518F5420D38C94C915E7C3D3DF4C31DD24B3FEB11F5C26A3F6913D93CD3
D6E00994D52AAAC153138D7BE9070F9532BE1800C19DEB858420FD1610370018
DCAD4B9E163BA8591A4933FF22B55403E9A8545E25A8523182E9A16A7B364C80
AB0120D0B8512F61C14F64696FB4D146193CA277AD7ECEBAC6BDEBD62CE00FD4
6E640E18CCA2F75761DCEA54793CD36056445AA987E1865862F75DB85B03391B
588D06E2369810B04353289A81BA60F48D9C80AC3008969E6F4A9F562295EBEA
ABAF3EFEF8E339719212CEA01390678C7B4D7576A12D0C77AF660CACBB148E37
6FAA4D145FEB4528E0DAD9CC38642DB7F3BDDE671E3FF1C4132FBCF042346964
88BA9B9A7FA52484D50C8A1ED80702F99EB28E6830F90BDC702A05BB34A80E84
D19AAC61241A63C2A830D552AAB01682ADC4D75D1EF752396091EAAF5535F213
F0D462818500F9838000B96CEB0CC91ABA524ED80CE157BA302544350F986315
C5FA965B6E41C6A57A3FE24BEBB6812DB6D8E291471EA9195C56F2119F6BD781
5AAF517516DE03176CBD634FC5FF56AC08E09BE6EBD6BD1E603EC67FCC1E4C29
50A2AC66486BFE329AEE278258E5F4FABCE1D0E35E48B9955871365A41413430
7AB4FA56ACCE3B8B01D7F2EC3AB6AC38B6BAD70AAC62A59D6FC01C4EEB9ADE07
61D423012B031AE806330953D08581A872102C210FBD75097D601998A66BB921
72CDAFFDDAAF5D7BEDB5C0B1C62084013FFAE8A3440F8D7AE564D906E21E2668
58383A22C5C64C739C26916A78C268E950ED2A4CF159E915B647928615EC0651
BE730B0BAB2E0A8750DE8C19199FE22C56C0A1681F223FA1A44009B29EDB36DC
70C3806BD1F73A797DED1432B5961B7A2D5A54A0A7126319C5F95E8DD2A43A0A
1851AEABD6516A45781CF5FA5C039BB3AD6F30774BFD07594FD357261C8DF6B8
E38E8BFCF7D4534FF125B1B58BDE4F3F54E550BF77DF65849CFF7CB974723022
9D0544E1078ADB55E21E95340FBBA000D236E1C1DC503B038642054AC71E7BEC
25975CF2FEF7BFFFD0430F7DCD6B5EF3C0030FC8865B31F7E5D52F7AD18B2846
A6D36789B83F643EC5B8ECF5134F3C813D1FD305819A41BF1C99C8BE943FA35E
1BBA3E15752EBAE822E327F01A2848298EF3464E65C6CC410E5EE193C67B820A
4E8EAC1666A5CF5A0CC7363B2861266F58BA9CFCD74CA056A759F494554729E8
2A1EF20D9DB22C6984D304EDB096CF1CE82B6B2DEC13230DD18348B470B8C5C9
279F7CE9A5979A4C08EE81F66452E0B040A797CE60A59478027CFCCAB5633172
D86892BF2BFFABFDEF5AE78573BD8694D0D02F33EAF1FFC8C1024126CA981699
9203E137C160C068386294AA5B29CA38DFABE513D33EEE318FF05D3C3539E667
9C710686E50CB2E79E7BDE74D34D4AF9CC3F380C11A8C5E78DBAA81D44287654
0BCFA178CCF5DEF070AEFCBBCF3EFBE4C4D10E04AD008B7175837266D5A7E74B
316D8E618DE1CD38AF7DED6B33E640111FF56A364E8657687AE457D246D8FD67
830058EAF465E89DA951AF7AD5ABEEBFFFFEF1A43312E95F4B54C2FABDDFFBBD
33CF3C3353E1F8055861B4ECB10E6AEB4B308E65C618A1665EE318A3272EC092
BD0D4EA35412E0CEF5F2B3B39475CD8C1E724E322F3DFBECB38334C822D46AE0
48ACEE3D682BF35E74FCD18CFA70ECC421871CF28217BC206FC9D2F0C48B5573
A5BAF2A231145C62B9965B1979ED98FD0B936BAFBDF65AB56A1561BA8E2FAC9E
F7BCE74597FDD6B7BE8594079950B36945FC1498F44D222365907F55214C5CEE
2CFE676C0BE273E0F0E4934F2EADB3D64A4FEF7BDFFB38D8AD07FA711ED6EA1D
9F96B0977074B1EEACE9DD4C2B820D2E746E5230716821A40328EC9C442F8F7A
59C1CC21B2111962ADC41FD530997129C166DE4B6DFFE2C91F846DB7AEB499D2
3A2AAD47C06D1322F58BD7AB4DB8C5565B6DF5E0830F4AC8607B541538F2C823
0361D192DE000461C0BA880523091B2A8CB4570B0369C46A0B2B602C0A640B11
6B3984782D8142B52D582B2ADA6FFEE66FDE7CF3CDC8F750586D249879E67AF3
CDEA891BD82DABA9CF000B4C14642B91B687E1176AABB9AB4D24337BFEA00BAA
C009847C38E2882322A2D5FA42BAE4B5084230DD626D2AB5180E42A4814874E1
AC1E905A166A50BB86A0B07CA3B9DB4A61D3677FADD2B31905A90A016A11D41B
31A26850EAEEC20B2FA44127B5E70E3BECB0E5CB97C3E3CDAF81B2D5683EF7C2
FAB21C8DB57A333D1D2EA605B7DEA6BA461E108A38EA1523B415CF955ACDA4B7
28D380336F7CE31B3FFDE94F5706DC3A07F15CCF95BEF56A3B3282BF0D8A5A22
3CB58645E04E0F289FE97D2494B0167DDC9D638F835E37DC7043D08893902FAF
B9E69A7DF7DD17FD92DC03A68BE1DA44B4DC19E8531B1268523E66D67B0731B1
AC730959C1485A4376572FACA01B2137B29B9A22C50E518E4188F16291997E26
D49E32F1044672443164A12E5476C88477D96597CF7FFEF3E79C73CEE9A79FFE
E217BF98ECAC59F36F258BBA953A7FC674D8E5039E84C2C46951A8878E44B379
FAE9A79FE93DE3B425563EC1BEDBC48635662139E711B956AC58A15316DBE3D2
26E88C69896FE4EB0C4E95BB45EF87A0908C8121A49E4CF3F3E0E5DAA6969880
C4BAE67AD59A3E6DAA1A9F56D6B95E57DC1045F4955AC12EDBBD6CD9B28835A3
4946BBB41294A38C3010C66E61331F227DC016888B4179B8336BB8594D1B1D84
F0D4AB95681415CABC2B47FB9BDFFC2695E650BC6A9A56087D66550BA48C26D5
82107A6CDB3757FACC1B0B034CB06A56DAB28423C9FCDDEABA93B4CDC222D24C
336D9DB87904CCD78C09626BDAE5A2D87BD60251E606DE3EDF7BA507D4EBADB7
5E8E216787903ABB05C0F36893156245A1BAC0815651279E78E2C73EF6B14C43
7E3CBFB05B97344443974965EC7E95AD5B9774335AE867944842106AB1082433
FDC4AD87F5E00277E15614201627CC9E69E7E6A38E3A2A52973B9EF990516988
FEB8E7BEFBB9EAE8B51F2B1E90830F3EF8E28B2F86A4DB49105AC43199E6AF27
9C70C2CA952B8DE8C62A0900B1D6D49290B23A8412BE5713E5028C6A2CF89BC1
2B42C745B94AC3612883E9597A7A9A014B4B2126B03F03D0E04D685F3F6D183F
0BA76B901B51911AAF5AB1A78F6607378559660B2DF9A47C8160023874B15455
72DAB24DE6861456CBE7B43754DDC879FEA4341B9FBEAAD7A7061D04E7A29E7E
E4231F79EAA9A7C8BB6F3D9E7654CA9B55D7C860583EBCFEF5AFCFB9253C4A43
90624DD87968DF030F3C902F11786BCD2691C972306D8ADF8F4BA6530D7A8493
21D2B649D1282441B7951B065E10F1C638D881DF11BB654640B9C99C738C9F78
E289516F4577E38D37DE7DF7DDB7DF7EFB638F3DD6BAB766094374849B88384C
06696CB7DD76FBD4A73E350BAFAC0A0EFACDF7EE2898C5708BA073B7898F1366
B9C4EEBBBA17BCE00514BDD2A3AFD4DF7A2ED6A283E4ED79367B47A11218704D
27AB09D9ADB0FCD6959B51E9C8B6E1861B46060A050CF541DBAE282ADF628603
9EDABAC565519FC868B188452EDE6E7793D683B0F2AEC8CD21F4C4586131CE46
6739F844CD9765238018A546A18FD6FA681382D87AF9AD254CEBA3A9B48D6A82
9EBECC7C354C12DE8955DCC9A8C4C048B8D934273515E55143B839EC50614BC6
92748B90C153900E4E01D6A32BAEB8E21DEF78878AAC6B01A36A626175492212
656E1442D860830D36DF7CF3071F7C304C17B3B64B8E1E76E79D779A9026A180
40D5865AADD4A020645ACE54016B95476B190D2A3D2025A346A34D562B63EBF5
99718D2339A19502848AF91E042D70D41870B41046ECC6D6BD1757DDCD1AB194
A3075A66048D82E01EC262CDC421961BE301150E705E54D65399EB749BA6E97B
E4C74A214C9E6A16BA1E5A4F3AF8E908B334E04B2FBD343288BAFC124131D55B
5E438A903A3375CC59885A7AD14071CCE2E690B07EA42AEBE08804244D9E71C6
19CB972F27227CAE549669A52E0C72C7741FC01A5C636D749000B9D2DC65F35B
8C5A42E55A42E0009F80037C020508BF887762909FE598340A467AD17A5A54A5
B0AD87E66295AAD9CC58662C5243D11CC49D00F0D0430F8DD4FCDDEF7E97C103
5BCC3BAB4B77BF2A09B6EED9E2CA7200485E17A9F6FAEBAFE724233B1BA13048
09B0A081F28D356BF019DBDE0A419ED4C67149CAAC092AB5BC22617AD8E5982D
7895F1F5FEAEB5B02FC55AA59DF0ACAD1C9CABB6A497C1133BDDDDB9BAEB243A
60E0EADE6E96CD457FB23F63A80F21D0D05CC84410239448D3F460D5528481D6
3E2016D317BCD330A58C9F6F8894CC1525F23BDFF90EB59CD0740F38E080ECFB
9A5E9B095D9073CDF9B5DDDE6852E167871D76887A1D5152392912C9565B6DF5
C52F7EB1CDB8A6A7BA442401F62D280FA41984C44160472F17CBF79060532A08
92C271EEB046066434837EE1A07916CB8D0DECF2216CE6FBDFFF3E929C8C0A2D
255FE67192DCE67A7F406D6F88D135A3AF75FB3067B3C666D72E7036D493F622
B1E92D86ABA14C3367DA9FBCF5AD6F0DFC23F2C21E5464ED6341F202C27A96B0
DE7AEB2191E7152039554241570E2C317AF3939E898140DE85A7D2D228188AA0
E441F581D3DA0D5573354381EF230B867CD9E4A6F6F1833C7200CF39E79CCB2E
BB8C98533295352DD4E69B0A46D85C41CECA83B589EA4644B2074472968A9CEC
2CC6C59A5907CDD74BCD45ECC84C064CF5000AA3E04A5CF43623DD252E982E5F
F5AA57FDE11FFE21F2949A5CD577D7F42AAC6CCFA0F89C6700CF41AD8564551D
6DB986BF66C2D57D0553A1CF125221BFE62F457CE62675F5D8E00B2FBC300287
CDC0CF3DF7DC2BAFBC322C99F42104CF25F2536D1A5FBD175E586EDB8495EA24
58741CE89AF9FB79756DE53B4D610761A56E0AB84ED873F035F0AFC69901DE57
7B267350A9D2A152B700DCC2BEA70BAAA69F0F3229D18F3588298151DD130B5E
EBF150FCF44CE989ABB032D76BFEB5D28778DCB3FE67D16B880EF7C8D4E77B2F
DEB6985161E0056C4B86F251369CA6435923E9DD28AF88CC3FE96D621964F5A4
7637F3E19E41682531A24609418FF047F8D241E08261204BDB6316FD32DA76A4
ED002458478BDFC19DDA4E5B2FE89173914986085A9463DC6BB3183BFA4C6F4D
460E311F721BE49B620E6DC6252ABA234B30606D3388BF5015359E6A0314EDC1
190BBF8F7BFFEC3A01D8A71E506CE9D985E38F3F5EC4965992B84C8A26CD57D8
59FDC1AD5B3B54B2070C78756F8CBDE79E7BAE5AB58A6A5079302350AA828201
D820A9E9866E076C9138954A6115941C818CFCEB7FFDAFBFF0852F102D5F59D7
C04E9BF7666723FC59F632CF66C068DB77DF7D37A432D3C0D35FFD140C658146
DDE1CC2D9321A29E8076DE152933AAD41E7BECD1BAED81DC5782C55882C60343
9910045B57CC08287309D5DA94F964F996D4F574B0D7A1F65FFEF2979F7CF2C9
6C8AF1D2AD9494804F61B65CC25AD3A64CD0A3D26782DBF2C6B7BCE52D6188E1
236CB4215D4B158C5462DD74D34D8D2299BE873A26488558D8F3F93DEF794F4E
359417D76F544C1A5BB685ED9D5B2779DA07905C087BC3C2E0F9E1030631D40B
11281843421BB88E8541E6544B1B0E0E39FB8DCFA6754E83E90C4E50D33696B0
43C22DC6BDF5A6112EADDB845B09EB9F4550B4322139EEBDF7DE9FF8C42754A0
A7AD883212D7D27A00D720447954AA38E52D992DC522F43DD7F1E5C110D32053
FED2A8801C6E856E45A856BC77DA246A9E2EFCC9E2D8E4BD8C7AB4E134D92576
345C81107160680DD86AC76BB3D5BB0A6A3A451AB03AF0294E07F40D34E059E3
D7CC7DABA7D5808BB6307AA5F5689A41494E1438940370DB336C09747A6004BD
090BA80CD8C90C04B281A76A1A568130A5C8E140614BF98B62446A295A148A97
B92B95EC6A6CC08681C80857C69C58BD9EF29B5971918B1A1B96B0401839B5BA
F763B00C9CCD5CB55BEADCCDCDD75E7BEDBBDEF52ED3858DD66492A804B249AC
7AA34987DA1D77DC31DC883A1BEBACB30E722D0870D34D37EDB5D75EA6595370
1BCE016446BD9987238F7A0462EB6DD7A980587D55AD842B62501D28CA8A1188
3E6B7A730BB2C8F24D143E24721A535E7CF1C5617E048E653E5170C96847E5C5
30096CF1D4A299E8514229CC5361CC79D71D77DCF1831FFC2083238BA3316709
4A63005C1C5B7BEDB573A815E950B2390E78B82C8005DD209D097BC668D201B3
1E280E5DF84B786AA4495BA96AE143785225C32725E3401546126A25E97F20CE
82CFDA2AC653C53E2B43E15C30AB1CD53C9BC38B4ED5BAA6F153F7539B7DE5A6
5FFDD55FFDFEF7BFFFE8A38FCEC27EBC86DA4F548207C5DBF06AB0AF0A7D6AF7
6EEA33BDD718A9EBBC82D2CD925D444B54193B38666F3EF0810FE43881A0D93F
820E089EB4DA0E678F8DFFCC673EF3B6B7BD0D251B59CFBAE4203727D9AAFAAD
A79ACCA21AC6D0B71217A0DF57DA477EE7AC90CE1A0D9B6783F764F70ED28EBD
DF1631557955CD82E1D9DD8FC685042DB72299926636A0CE0C15BC79C31BDE70
DB6DB7D5EE0B1C8CFCB5C6566DC8DA7AA7EBF1C2DE29E23A30575A6A33989CB9
07683636205BD34B998E7B3AC4DCC20644D3049ABE31AEFAA7E10FFFEFF51131
8A985AC150196738571A8B99DA5F2B1DEA7BE338406E2A690E3043B382334AF7
16B7A9E690814351802C2D43E081469792B6BEF6B5AFBDE79E7B5A316F9A03AA
956BDC336E113DB1E54277C6BD0C85A53F086F6C3DAA796917C0AC79CE3A3260
23361E8415533691EC6B9D1C126C10C52C99E96806D6C92661C6B93823A3D20E
AB361F83BC980458738760FF7AA3074158A3926A8FBB4771872836CCD72ACD9A
00492944D8AD31E708E5D8E414EF6C98C6349C0981D9D6A91D4DA2A06D786AE5
324828B1DF2452E35B6C5D13AD0DBC733F0134440918F734289194EF33ED68DB
ADC7046819E5BAEEBAEB0E3CF040400A8483F3E3529C5F014B7110991545882D
58D38B078BABCC102BA32D7C5A370E0F421A8D20B10AF2A2419AF5DFD5BD7E78
FEEEB2CB2E914EA4AEC43386F4ADEE9D6F46D07A5B57AE29CD5F2D1B4BF9B459
A7C5CDCB872C1E3988AE73419DC0578A89643A9014DC18022238361648ABC9C1
5CF6A5113406F786BE67BF110C0732576DAE30288FEC62D93080BBF9E69BE71E
8AFE8C7ADDCD1A7A377D618A6C5D116C45FD9D2B457C96489E1635418E41595A
E36BD62CAC2E34F0F98D1726E1B5CEF6140536D96413EC19765E9B2FF551F531
4320705470C06A38BEC5A2D1DBF0B4311975E2AA8ECB634CC6F714B585694EAD
D85769DDD34A78B39B5E0DD135726D51E5898D1EC4670E34E069EBC2B41EBCE8
1574DA669B6DEEBFFF7EFC0B6A87A312B9A623BC75634C8E62D6BBEDB6DBDE7E
FBEDF0EC514FD924D81ED72F52A9295E41CB7C78E73BDFF9BEF7BDAF5A3E2A09
182D99983EFD7D755021100444518F8E3FFE782ADFE9C33304AC025C5F1A2887
9B063998926ACA49BA4B5B77DC2E7104FE3E5FBA9C40387FDFF296B74468C8CE
D2A260DCABBAA26D0FA2E589FB7590DC96B547FEAEC6B6FC3DE8A0833EFCE10F
67FBB223483FD09F9C9D2C64C58A15C71D771C4E65BA08403FC137BEB78DF433
A549A276912A379B644C91004813C1BA26D75ADAD31652267AC85A2AC1B4E90B
45CD6CFB5D0B71547786C479547232DD8251A914A6546152161A171A141882A3
5AEAB46661352B11B8468FCEF502D4C2C767B1B35AA2D25C73204FF40C8A93F3
B7F6DC34A1680BED730ABE4A21834C907ABF0C8B9401664BD841CD12541637EB
29871A88417B7F0A6B3652928D67CE9A82B6955814FB71B9839A175D74D169A7
9D563B37B4DE5F81F61AAD1B9F05BA7B30EEC51FC693C26C005A93695571402F
FEC2A858926C75BE5F4699D71455840C0DE3A856BAFAF3EF4B5FFA52887E4809
E60ED59725A8302A1D5E10C6C47E6E5EBF8EBA2552625A8F6A817058D4DAEA80
02AD324BC5AEF1C2BCE42A7D2B13E041D968A38DA2ACE7116D416BF5A68D8A0B
9552B023348922EDA17561132CD43500FBD115A4B11A76CBE3F40FC0358BC176
2043C068B353AF7BDDEBBEF295AFA807DBA7683CD5C87369065C3BD28C7AB880
E19712BE5A26693AA26A50EBD160AE361165B0151B9D5179704D11692583A0F5
CA5FAD44C08E4BAE17E403B2525F1774CDAFCAC455B0D01E3BEA09F11A8D6631
3CACDFD8B190F1ED2C220AE15FD4F28F45216F09BA6EB6D966D1CF88840FD0C2
B1AEB8E28AD1A43F042DCE4CD83044912451929D30505B600BDD1124ACF4C1E4
DD5674E8D64537B802A6B2D5BDF6E1AC384713A848286297B3E9CB962D43E987
E7B16BF6416AC53A5ABD9B689903733A06E736B14B8B395021DCE455FDD57AE1
3716C43564CF53AFC910564708CB5C2FD42500DBC47028AF52D8C550610F66A4
935958E14BA7C53B89582D11EF11B6F19115B594081DAD76CC6C5D92AE32EB78
D27350D357D5B02DFD3D70F140DBC7BDA512B48893DE7A80EA5CEF3F4B909DE0
AA1D655A8FC2B175348F0B13A1A4E1619A4F71E270CA987D5A2D6460DA08421F
DA8A42A396262A98A4BCE83E01C1E0C17BDEF39E33CF3C1317779674DE79E75D
70C105999CD5A489E037E0D67233D52ECFDBDDD49F9F5C54A79B46F49C6D1AA4
E8A0C5746C8F520C47F9F5777EE7773EF2918FE44BC08AA9190943FBB0357D40
5303715B69FFB9B4A371BA0F3192E9A86437B562E39A358EF80487335305D2AF
25AA75D7320356D26955202AD91A18591D27E83A515FF6DC73CFEBAEBB0E87F7
B8347F5CDD7B3C1C71C411975E7A69EBBA8E3D0A1118C904D0F54B0416710070
1D8350C2A53219B030BF6EB7DD765FFBDAD7F869DAC38742B0F1C61B5BC24631
A84645CD95C66DB3B606BBC55C2977E580D371F24AAF9C76CD7D6DA1A15B22C5
7A0DD38062E2F752DF52181A95781F8465D301B51299B34F299F6AC8A10E4086
05E00AAC2A13E471B5A938B5AA2B4F5FD2B8B6B01D78BD415B3AACCE40598C93
74A460A38118E5FEA90F2A0320AEB3D6EE96317018E72675B6ABD7069C07E1CD
F03124C2F9B46ECE992FCD2D66AD57BF953BF8CA57BE326866C416EB0A6DA56D
1F49FC86F9E4E060E80EB5C17D6065D63553D52A5A8F0ECBC83BEEB8E3E73FFF
79FDDF035C9A2B6514C70B3BA00C02B578450E23E6ABAAEF46FAB9F6DA6BC7A5
E464A8475E9D7922555823E1924B2E39E594538CFE6D0BB92323AC59AC1E1C1A
85DFD8FD89E86E730EA71D1F8313EA2E0F6C1B41278CB47CCE5686686CB0C106
915DA0159501CFF5FEB9C60FA103D8D24DD31762A8825420B6CB2EBBFCBB7FF7
EFB6DF7EFB2F7CE10B73938C7CD362F165E880AF5B8303ABDA83B56F410357AC
5871F5D55793F009286A55C18C70F0C1075F75D555EBACB34E54A06755114687
CA63526FDD1868382BFAC7A2D84CBC31E28361E88066F5A4196A2677DC71C785
C48734502E07600114CB7643B660572CEFB5AF7DEDCE3BEF1CA62E8699C30AAC
AFBFFEFABDF7DEDB6C221CEF39FFC4D9939109178130CDF7C61DD94B4BB38225
A4F0B3220B72E9E094C12F51512BF3BFF1C61BC3E9E53773A578C5A844A0AC59
B23677EBF1E7C84D73A5D46565C0B21F2826C2667D177DAB34F7518D12710CEB
1CF51F007815F3AB6C642807AF03AD758454935ACDB6C49E6942917ABC7EA9B5
7AB76302CE07362E0F7CEBBA1D635276634076E50D4B3B74091F3568486F0B7E
EBB5D75E9B029CA35EBB9503A9C3B5C6C26866AF55DDDB4416CE6855EB02741C
04857D04174C3894149012D104867280AD5480A2862B9549307262AF425C46D9
026E7BEDB5D7ADB7DE4A4489F60C0D274B987C3307ACFD0073BE37B3D23CE039
ADBEBAAA31803FF56FEB9110F669805A11DE416F761B9B0A617B5A38C2A8D4F6
1AF5207CA228707FB489881C05E0ECB3CF36EDCDD2CD8B1E55CA4D9C7BEEB927
9F7C32D56133C94C29D279D86A7E3AFCF0C3E9786FED7A832AEA4CE80284D080
F4600282A6087498ACF455AF7AD537BEF10DBB3C0DD4CAD60DD1957057C7792B
26224F0DD51F596C804C1C3BEE5525066FCEAA8960875A2273D788D1CA6EAB46
3B5E582D0075A8CE0455A196F06C537EA569AC1B387A84552BB1149C7D7BB6E2
DCD41A6F757AD37E5096C6BD3BB8D62C2C5BA01C31715456DE70C30D9F7CF249
4F31DCC18E039816C84AD5C5DE2676CAFC94254BED0DE952A6C77D0E24B10E6A
ED032661F3CFF6A5F661A227B8637569436D8055EB76003DCC08C584D8E150B1
11262109ABA7EAC9514B126CCE9232DDAC19FB557B2E1761F784FCF9A5A88613
3EA00F9433D588E479DD85175E9853AA1317150496F0CE77BEF3E69B6F260D2E
07EF9C73CEA919E835A0BC95E0A0712F0793A1028D638F3DF6ACB3CE0AFF366F
AA36C7AD3E7CCED820A1DB841FC20DDAC41D5EBD9EAD34E5D6CF14C13F38F4C8
238F50CBDE80615BF5B5EEDE369202616BAE573FCF2B726EFF7C72E59E10E29C
61F3FAD93509040057C4DE74D34DA3F4E39E090AE56FE6B0DE7AEB3DF0C00324
5CA231DB103AE0B26C562B3196AD5779AC0256EB2130F8D22AEE514F87414693
4CB3E05285F680E02E5BB6ECA1871E22F406F9409338E74A550C234A75A0AC2E
15893515C2FF2AEF41CFCE2AAC1B60B5967A76DA545E7235A28A0C447BE259A4
F14E88485EC4DC90353980D5DD1B1DEB4B5FFA92AF18F5182ED06696ECC8F2B7
D9669B7BEFBD17312573030E75FE8322826D61DF78AC265A86710AB0597611CD
F79936A0FED0873E945379D2492745FAF9D3C915340E1DF08861C354179F9F34
268274124FB4FFFEFBAF5AB54A02B5F9E69BFFFB7FFFEF0319E24EC64BE66D5B
FFD95C23E05F8F644E7D36945D1E4D129A031CEAC5668BA94A6BF05135A4DB61
0259A4F5D8E60AA86ADA158C83934E4FDCEA09AA279113072F7CDDEB5E77CF3D
F7988129E1CA5923BA5BEFBB321306B059C9901556D3DF80578458E7A599EA76
DB6D177568AE374870AA15E516F50D99FF03A2663BE80B123C09218AD6C40870
A8AC22F7AB29CD9762CEDEC39758E98CD5CD45D1157604C7ADEDB04CF420D01A
0736E1ABB987363610F0EC7B36289B628F42983D56DE37BDE94DDFFAD6B76890
9C1719E062DE07422DA483B8D767050878E745175D74EAA9A7524C24CF6CBDF5
D6C1661C5DE6E69AC5AB360D2924F4D196E373BDDECA786138195B62C41A2A5A
C6DC7EFBEDEFBCF34EBBE8FC3D2FE317F449ACE90DE34E3BEDB4152B5660BB86
7C73B4608DA8ECF6A269A5A8A99D49AC1AAADD068A1640A313D70022F36B0D67
D7F397673FFEF18FE76C442F81B8E4414C8822A89E7C7C6C9C1F80A658833403
3162929C5EAC5BC1D4EF7DEF7BE35EA4508CCC53B84040B510B837BFF9CDEBAF
BFFE09279C106AC85642C42DA49CF31C9A78E289271AD18D9CA123AACAC861DB
5B6DB5D597BFFC65180F376063A0523F0A0AC004E032E34B2EB9E498638E0113
C8771C68E1198DD2A7621A1B8760AB8935C36EB6D96699ED273FF9C9D5338A7E
073E04B77FE0031FC8DA8315E64172D88218D12FF33700C9C9CF808F3EFA6846
C65566F1A3AA070B6AEB999B9749F828CE0EC2CEF3467420F62863BA34230AF1
D1A06BB27CDE5503673242906DD75D77BDF6DA6BB1C4D6904967858F195B9425
8209995EF42801B44D36D924AB46F2B3307D7EC26A8592379EC4675455406FF1
EADE7E0E6D6CBCB04F9F024D96B37CF9F220582696313D71034729C833EE4D55
B1F41004CB1A2D82B1BAB768E51BEB1EB4D9BA178C937BDEFAD6B7DE76DB6D8C
99E3966960C7C62B67D83FFE7873F0DEFEF6B7DF7FFFFD38E6E9D7A9BCD816BA
2AD4A59442544CE5555E1AF631CE074B8396D0AE6AFBF1301A0685229BF9676B
AAEF9C6C4398C4B8570A134F10262A77AC7F67410FB7F1C0DF19AAF2C31FFEB0
6AF6F3A5B3537D7C54922CEA8A06D682BC2580BAF4D24BA33211FD8A423C3000
B42217D6DEA908D673BD31C39A5E3B48EF75F697886026000A71EE6AD89A0ED3
EAE48A1AF3EA57BF3AE73734046F82796E03A5DF809EBA765FC134461E0F5434
6C29E4DB8C7B3CAD3C18B86B8D618528F8AB7B1952A406AAEAB4A9DE6198DAA9
82DD26B221F2CE73D58011C470A4B7DE7F319301C9028ED34F3FFDDC73CF359A
26BCE78E3BEEA899A0EC1975F500B4C535C11B1876EB8D8672736485CF7FFEF3
6D61E02827198238E8C707E178FEF39F9FBD89BC4F1639AC5D539513AEDD36F2
EA7CD879E79DFFE00FFEA0D23B2E43C461E18684586F3DFB152C09B1D093C469
E72DD3352FAB268A4DDB2E9876F7ABB2B0AA5536DAD8727FC50D233D62044815
0B84ECAAF3BDE31DEFC84FB7DC728BDC1ACBCF6EBBEDF6B18F7DCCBA57EE1A58
44505875995B756F1A55CE3AEBAC73CE390770855267F921F4149EE40819244F
C1A05AB79D16E2988BB10C6127A05215F235C60667B8F1C61BEFB7DF7E792927
0559ADA6AC6CBBEDB677DF7D775BD840701AC81B6DB45144E140268F1C76D861
975F7E398759C96CD43B6DAC9EB4DF09F3A0C005D61D384D608E8C38AB98008A
175894A1B0EE62BE23F00D3C77FE5CB5D94EB53913F51AE4C1EA605037BEA751
2FBA691B8F4C9B240B05596DF2863868774146E4880508790A637EA61A80C051
8CCB9DD55183FDE208E7B61CFF28CDFBECB3CFC5175F9C2F71FD62FC1C970255
6C1CE98879B0BA2708EF7FA677B1D4855F7DFF06618C4BEEEF20A2C74EA0EC5A
9683DFA1AACB15AB81F601071CF0D5AF7E35F2BD5A0DC4DCF241785B6A060A44
B8152BEE2C06391D9921C500BBA80F68E0B1C12E351A7416016FDD325A0DA591
4D23B91A93FFB297BD2C5811385884A47AA0B43F1B784BE89F4DDC65D59B6EBA
6940A4664848208C8F4A03107F917CD5AA55471C71847D2C024C84038DE12656
B995E349B66DF03083043864D2B7853101D562DF26212623249A57BCE2150F3F
FCB0DE8B2C60CB2DB7BCF7DE7B5FF7BAD7DD75D75D2E83869DE35E7ED2901382
2F30106143E0908CA6523BA41A762EABDCFAEF7FE906D0A463C58C6C12C220F1
CF04B385BEA08864B156A8605DB939E0908E1028885066CE686E3EF5D45357AE
5C498935A27FF17C67F2EABEE81CF980F2C42B5EFAD297062666E21A198F7B0F
32C783B6D2E3286EB7DD76F7DD771FFA3A04489D0C6DCF8A079676726BA41728
49DAD6C4B06BAEB9E6E8A38F46B3093B013BAB34A0E37C3AC4293B68C1104812
5992E8F7E4293D33691A38F05DB5928D66F7CDE8AF9912EA8BF686FCF4A637BD
E92B5FF94A2B6622A26A2378B259C6646168CA16E7AC4E1F786CD430DDDAAF49
D3D099679E19593B40F8F6B7BF0D30B3D1C71E7B6C7EE211B27174F6E48D1B6E
B8E177BEF31D289AB18156B727888FF66A3947D12CC9FBCA9CC3531F7BECB11C
B7BC0B051A4516489A0F46B46DFE25B6C8AC419C9716F7E1D5EC3837D488686D
0FEBAEBB6E38D3A21D2D5B774372F6E53A6839113D5FF9CA5766C259ACF3E733
2F35F8B37533FE9ADE9D62871D76B8F3CE3B75A34064293E15C21AF2940743FB
B2EF3AF0DAC4E2829D4CF79E4EF4CD37DFFC91471EC9C8E14C9955345760A586
013510FEB3040E54105C3910310C5181AA9E758E492D568C24BDFBEEBB470C62
1CB428283EF58234F00E92DC585D359BE12EAD0642BE77A35B11B3E64BFB5BB7
0CE356ADAECCE135141C474634C83CFEDEF7BE37C4D6D417EC13C8B54B44D7FA
AEFAE540DACE0EA2E41912659BB84110569B32682360596E0C3C39E8A083AEBC
F24ACC5D082B1049762D7FA96AD716061ECFF762B77402C548666A4CDEB2C71E
7B1001A701CC7C395B8BB24D1E7614897149280521DB44A6C9B3210E11B20F3C
F040184A208F5FC008798735F0502D48FBF1DF86005478E126A9D5045B8FCE47
D6A67A03289BFD6606EC0D72681DB3427F3CA97A7FDE79E745A257B15E22B8E9
B95ED924D4F16C4C6662C79E56FCE4B55C1960CAD97EF2C92789C538E69863CE
3EFBECCC9C8E8A48CAA349B7BEE8C1466F0190FCABC10D9D98FA73FA05F1791B
2A923BD9F5B952C13C07DB8463E34A5A7172E0B2AA99E666BFA9F379E621BE61
39E4E1C19CF2544620A03770B8EEBAEB424A4C716104E357514D0875998E6411
4FF2A250764CEB9580825E1017C884711CC6A011885EB93B7046A4C0DB372804
0FD1C9418A5C88B8E04F946247639EAE158AF78E93C359C54C8AFE512D57903C
6D5084441908BD56694D1A1DF7F1C71F1F97F6155AC523B884BF7EED6B5F833D
938733C0BAFA590B679D73D02983C332D9653AF02C5FBEFCFCF3CFC7128B2383
1D271207E919898D561CA0C77AEBADF7F4D34FCFD245E67A25AFB54A9344895A
95D65948C5BA5A86A9063667045A9C197288F70B438206EA8B2EBA28FC2C2C19
C66C715963097593A37FE4A90B2EB820AAC9806872129989F2EB12BA57E57FC6
7EC2B3897F26091B3282E10AAB00D62C7C8D167852735522E145065BA0B1E55F
CC2AE38597E85D3FCFF5AEB484611B1C372E2940161AB2D90E5A5D4D1F523903
FF076F6CBDF222CC0FA655330EB85359B9D2995A53DDFC576D003EAB6DD6002B
C3919C49F63D6312481F998F3E2E4C3B400BC21F7CF0C1358AB3A6081AC08CF4
1F9A1F6137C7E4B4D34E6347F097E7575A48B1CB7AEEE5F19AFA5A496455513E
FDF4D38F3FFE78FB5ED4943F834C57F72AF71C4600321D45A1ABFEA4934E0A0D
99C980C1808CA2733BD33DFCF0C33FFAD18F8676A06E463FFEC637BEC1E18149
90500B755874D8C0F7A9A79E02FAC69211FFF59C18EDDC54490A9158FD1B7D3D
53C2A3CEAF354E15EB62B6078F20078FDE5B34E7C9E3365E6CA55D441E79E10B
5F881BAF627F9B781CB3D378F5E9B28761645CCA4299A2476661A879E823B671
0095FD0BAEC0686B6C39D6120F982E070F790DE6C25EA71382B7E7D56DD29126
9FB31708280840047DE4A908A19FFCE427B38A1AD13D2AA9BABC3A808D92FA99
CF7C86AA67D8BE3866DC4C313F46303802DDB7E2255E588BB3F352F602226E78
4B2B1E77B2D56B1211BE5B53E6C410FD94D527322E5DA478295A7BEE8F361C21
8C784BE94566581B1C79A2DAC2B636F583DEDCD1A429C5B8E78F592871501006
7305F6CCD5BDA906A14CBCCEE40A9C3EADA7363AF3F95E64B896689062D62035
037FDAECB2E4A8776698642FC2809730ED0279849BB9DEE5B306458F7AA511A8
D8AC30111D871C874D36D9846879645369289CDE8EF4355167D4ABC158CEC202
5EADD49F19F59A56561A31D1133D1269BE16C371B1A8683853F278087494A1DA
328422F61E2EF5994174712BEEB9FA0D4B18F5424EAA50ADF7C3AEA273609EB7
E07A68A59A713DB373A516903F993101235FABF4BDB780C67C6FB5D44AA4E480
012367B30BAD971B6BBDDA86FCD25C09768D332E35E014F8764DE8445C52F18A
F3485228670A290DAF197E621A5511B587D5DA20CD087C6161BC9D5029F82BDC
47818085788A5B89D5F09E818CFBE10F7FF880030E5026B3B50966AD01778BEA
2C0F5DC07DB9780736C69ADB6EA727AB25EB6D4260CFDA22ADB4525E60FA5A33
A9BCFAA31FFD68A38D360A03BBECB2CB22CFB6C562E4FE9ED7B475743CA9D696
F5433E4881A899DA302A9977E61C89293707D6071E78E0B5D75E0BCD7DDFFBDE
F79EF7BC275C2A8C50DB11E73060F9B55FFBB58F7CE4239CD82834B9F3C61B6F
7CE49147B82D48136619B964AE14798151D5767250CCF0EC4800D8B2CC8094A3
DB5E29DF6CBBEDB65FFCE21769DA1AF28D850ACA3B703521CD211EC2DAF3F60C
953D2548072A8635C62049B6DBAE32BCA2B296011B632B6B4000357150CEC093
D5BD0B4275166683287C58E3E7AD8EAB26C769647CABF68C7B22BF6DA0B4BDD7
28682371E67B2BF869069C096CBAE9A6DFF9CE770E39E490952B5772276E2D5E
6A7678ADAC64496AAA5B8BBA035956436EE54078CEA4E6A6BAA9DC0CAC023597
B76A57D3D9A2A213F3F715C8A3EADCA61839D4DCECBE20D824CCC46D4BF623C1
48889267107E155E4D5064E6D67EA95C67B4B0EF6FD063C71D77FC833FF80326
6FC3313AEF521C7B3A53B68AA1CE795C8A1919AB2566AA7220472AC1A820C2F8
A11EF67A313192BECEE42FE8B4D243AFD2F6852F7C61E79D77AE785809575B98
68243A4D5762D2778B301191F1A8A38EE22CD7A00D471820FFE08D5B6CB1C5C3
0F3FCCB0E15511B334BA400D3889D8C3C449E55725C5B65052E7ED58F83938B5
DC539B38F5DEFBDEF712F91198139C01C51EF76844966C98DEF5D75FBFFFFEFB
BB2FE35211881519B43C2AD99B3BECB0C3B7BEF5ADA050C4F71C0D2B3FB6CE59
075577AAE30C6F37FC8E5851ECE1FA7AF886B24EF91E1F592BBDD1309AE26F6D
13352F4FEDBEFBEE575E79656E9EC98007D22B1849EE66EB45305031B55700BB
28C4E1AC73BD29E900C9903A3993E89A0480C8E19E13DF5554D17A60CABF64C2
18B10149E25F7432FD2E810E45BBB807EADC7A6B04180C93AFC557A70D1AE299
512A52160331146CBD1900827F9543B7AE66916B31574A2BA8630D18F089279E
78CB2DB77CF7BBDF1DF5861E2ACD84D5042C190114B1F2C06EBBED163102991D
AF15605C9458D4D4754E5ADE1BD0292D02D5710FCFD65569811EF3E8479324E3
D6956674680B26006A103A9C1BF72AD6758BD392C412DC8BE4B7BA14FD1FF732
F76DA1FDCD59F152F4154DA3794B662EBDF0B81ADA8D8859CB084CC7918E7B2C
7A443112636CCF70DA69A72D5BB62C2233FB6EBD7E8415D92DA090D7D2BEC25E
935ACE2B4D645D089D326C6C54D6B6D34208C358A2CA6C2686144B08959DE117
BD3FB745963DECB0C30642C6A89403337C66DC2B2F4E33608AB549D6293F429D
1F9524F8DFC04253152F33F1C8806F93DE3B98AC5A2F46A607142CAA3D0024CD
9A97BD39542B37E4A7D0C0A81C36AE7756ADD415194D72C9824551333EF8C10F
5208BD2D165735573AA556DEB9A65400A45910F44792152979CDA45E21CDA630
9F2830555FECF429E6C28A1E2064F030C5F3CE3B4F897CCB2DB70CEBC2C46256
D520D168D453251D70F06ACC30601A421814C6D254DAC36AC987F124A629E245
8E3FB1051E28345D2858561DDCA6D979EB328A0419A72CA65C2D2ED4D6B6218D
A76F6093907A8C7BFF37BE4123CFA1CEBED7BE7C969CC23C130DED8FFFF88FEF
BDF75EF39DAC3691CF1B6CB0419E7D36376151AAC12B656C12F7674A673AB381
8980CFF7A832D9BFECE2A07896FC92E99A55A998F05C3560255C93882A7F25B9
1E652587E4E28B2F1E58DECC569CE57BCE310B2A0463F221D41FA2066527482D
D3263E9C8C8581515DC64C4620E86B5364A2939E29BDD2C6A5AF80A6A7811109
78E262670E88FC040E685AAF01D5382D6862639515232DE5FD049313FE0AB2AE
BBEEBADFFBDEF796D897710FF9B31576EB99F2392D44C09E7CF2C9175C70017C
DA8809E3D490F030046197960DB792DF32ADB6D66FAA25CD4E5C8338CCAAE155
062CE6E847B4B606D6D7B9D2DC5A99AC95006032F417B4D79E1264B3C0CD36DB
8C8E1A4833B57491323B8D2351375923D3B3E2412B51B2483CA352C45F45C4AA
4C14A2DA68A38D201383F87C516E560C4E9B52BB9139D06366A18456076C9598
467F9AEFD8CBCD56CDA6CDD0C91449C14CE436D369204435FE689A010B9C5098
DC496F9CF02A966008A4C8C6329FE90D7956976630F6060DC7A59DDC68128448
ED0B786DDE0273C51B2585A1B3A45E5292D63CCE836CE03625E9B622C1E71590
9D6A0BE58D3576C102096B962CF823770C7246FD0D55099ED8E897A42C6B65D7
521EE8A375B38CED90FB56068C5F3263861B0DF2A0CC0A01CDA8018C772F1F90
C37884A545C5CF2491BFCF3DF7DC48B14CCFF04363B0AB7D88E6B31C0DFD5F50
098B01805A3C3E901EC067BBE3CCF7564873933AA670190661B696D05242D22C
B4A697DE3373ECD96AC7B308873E80AAECB785EA02AC22EA024A77B02DA3D754
D4D154DBB8402D1C7A5CB23C09EE78AE0C78AE74C592892A9C129461D3AE2A8C
575BDFC019592FCB3E644556F8B3A86F00170C38F2C82381350568486F603284
61031FC494F95ED2B93A933434D5DCD6693C1E4F82110834C0AB9DBF2B57AE3C
E490439C30D86CFC36C40ED9B3BA586A00BDB524F7DD77DF6BAEB9061FED78E2
26C7E21DBC99553E2987245409289D72CA29975F7E79DE0E3FC604DD26590499
27063D12F2486DD2B8A2FF15211AFE043E58EEEEEFC98075ADB9A173A588D834
5DE3CBAC2233218211A10D6752A64AB439F5B0E41C7A34A27047EE469C5A34BA
B8DAE5486383042367648488C011A4D4CF5AC9EB9FEFD528B591644A010BE5BA
6A65BB56EA8269771DD89C4D42C3DCED860EB29E163D02D1688F3BEEB84863B6
F9A2CEEBA2F7870611FA2E028899A8836609129F3F2B2A3BF76FBBEDB68F3DF6
18558EA96F6C4FDFFC74CF3DF7D8AFCC66C3557F68C50A3D9E3455C44278FCF1
C75F76D96566C6CFF5EAA4DC064140DECA19C9DA6FBAE9A62C1C06407A1EB9BF
9E656C33D535A04986629CCCCD6CE05612EB070C789A00564E805008BB42B7C3
D60D6FA0E9D04E3BED74DB6DB7118425036E0B959F8A9F5C8874B43622199D70
04547CECEA845BE757BDFB03B169A0C269D2470C0A770F3DFCE637BF89DC9FB3
F3F8E38F6337AE8991ADCB1346CF803641390AFEEFBCF3CE1FFFF8C77D2F1C0E
B9D962FE350378E063E68821111E75D4511FFCE0078D0F78F7BBDF0D011C1447
028B383E78730929ADE105CE4434708B71CEE60A41D3EE98D1882B22C6732603
76C32A1BC08B699579E502FA33AF2965500C0C69DD64D1260C2C8FE4598DB71A
729F2B035603435160620404222D66CDF94BBEFFC0D4E339276961D6F83BECB0
C35D77DDC5F97CC73BDE71E38D37E275C7F723F471BAB05B3A0B0F3DF4D0F7BD
EF7DE0811D1B89B221B883D869C1A28A2083199C167255294E2B3BB746A6A237
87A47529BE75D1C720CC0CB5CD36DB84F493D99C018D929077069F28888848B1
287C4653D984AD4748D5E8E59A2A204B60D85A2A28F039FAE8A33FFAD18FE6C0
635F15BC03BBF1B4A200E6309A731E2FEC4B316B09B2AE2A5F92C013E1E6052F
78C1D9679F1DC86075D0CC505D00D5D738B89475B4DCCAC82131FA0873EDB5D7
5EAB56ADC2AEEEF886C107D5A3CB7EEB5BDFC2B90E0FB0BB49EB86CA9A716834
7BEBD52DA66738D7AB8C2D3A7FB555D03257E010A17989A3AA6F8CBF3902679C
7186655EC63D45826D5AA2B1981D446CF402F0E1BB064B1BFE366B1C328548CE
C91618C80DA2627735CB9C7F0355A37B6099428F3752890C9EB7A6B71EB2708D
45635C9DC546483DE7408DCBD5A6EA320A4CB7C9FD1D97B8C26AF6237A83E0DB
EA6568859E0F64562D2539984F3CF144C6BCEEBAEB228BFBD2DC4F26883EAC6A
D7ACB2CE78B1BC2344435028472968801F2A82C2E73FFF79DBD5589375BBEDB6
BBFBEEBB7334B6DE7AEBAF7FFDEBE79C734E247B62AC0C645BDD7BBC12238988
70C411475C72C925D848AA6C0A7DC3DDC0C434DCBEEC652F2378052F0318B566
61699451A9688485AC9E14BDAEA0B769F451C6B01D92206EF1108F67E6892417
096FC58A153319F0E07B6C41993D0E8F20DCD34F3F8D210B428CB245446B14E2
9AC835EEC1110A23F06CC2596184B3422B675DB88D6B63732165DF093A8E2141
8397AA4A6692D9994EB395F7E494D2F63C6F79EB5BDFFAA94F7DCAB052F1006D
C6FD460185DBC17888B2A30E730DA7042768D73CEAD1EAF6301F976CFDD603B8
88E8230890931F2671FDF5D76747881804927661628DB5F7351840524A9B6833
39B466B3A844C2EF75D5CC22B5FA47735B38046372D5F00DCB67A2F81AE33AEE
B5972B9953A19C65379EC5804121264349D136C3A0E767804FA9FD3593FAA952
76BC357ACDABA577975D7609F9087538FDF4D3A3E2B37D8B82C8A94A8E250DC6
04A01CB7D25213FE0A22497033424846202CCD5DABB48ED7358541E2A52F7DA9
D97716FE0C19CD69D70E847D6B6913F478D20D1A5D04812983471BC6D9367D49
CED06E574F7500CC80A46FC15C17ADE03DEE81A3585F14293278E61C243F6F72
714306A711646506EE3B269CDA3C2D5F46EF39E8A0836AB7E06A70E2F4F15232
E5C897AD45618D925320969DB3D89A4C4FB7F9134F3C3182C8686169C6014E0E
9650315F7F81D95986BB4309D13DE626CDA9A8D350317F9AB58FCA9567A35D7C
E94B5FFAE10F7F9861833C9065D652D163BE37C6A8F6B9369540E507AB849A62
CEEB086469251FC9A202403E7388CA5B8369681148C41942B035A279C4DA76EC
29E63D2CEAD3DDA830746910D6E034B04668C3AF3E11D018028E73842233402C
83EFB7DF7E51D30973D14B2216B5125D9B39FF34C4B5CA2C425047DAA88774DA
6F3280D8628B2DEEBBEF3EF21131709304E25655495C9A389AF44DCAECB31892
3D28F4313FBBDBD212D461804F6127B6E346C0C1D2450554AD22B6C4A994EE17
2717775A50D42A3CD8A63082E96630A9B74D586F9649FE157E2643DBC39942B2
6FBEF96612B703F14C2FF7D08CF32D6F794B501F597B6E529CD934F351C99A35
722A98CAD6B0E58A5D4450E3887AD7BBDE75FBEDB7071D236AE5DF5D77DD35E2
646688CA0B4A91E76AEF3C8E4AC4C9206818361D6133E6DBDEF6B6CF7EF6B38B
C21FFF3A1E5FBF24AB0A87B70D7C38B1744D31B8A3D64E022943CB42F2680997
63B668105F3DED03715E6FA574B03A02A7E95DAED7BFFEF54112C2A394F19573
B3172F7FF9CB1F78E0014AB50C6A87990D054A4CE3645B98E95483E1E164D094
36C9A42284C4905A6E182FAC80AFFB0D97649517C7BD831BF0879665CEC116AA
AC73486FBCF1C66818C10DE228A1A74B18A223A19F7CF2C94C062FCC6EBBED16
317496C0015327AA8E6002B643E6917785F8E6ED48BDD5555F0188E91EDE0F53
D15A40F51E646262D4C939D6373C60666C6BE85550BA16D8699364246A151972
C1066DB5D5560F3EF8206E112B900F6A5461280A540F38E080952B574225DCBE
5A2E430CB4F91D9ADC5E7BED75F5D5571BD327D64D33E36A8FAC8282070473C8
B897EDAC8C6480421E52344ED39D432D73F0E77AA39720181A7F8D4D514C69DD
1A21D611BCD6BA843A28CC87230C5BCBB8C7A8621144A31D4D32154793A04B92
1DC0F3D0731CDBA409307953C888D1C15A16AC88F4D03AAFF59C220351CD069A
66F3D00C525D725FFCE2177FFDD77F9D9A0DC47059A07EAE770FC407C191515F
D2146A423CC9ABA8DA6032931F9846D0D69E5D3E50AE268B019DAA0C987904C4
793E948BD960ACC7E985C417716FF9F2E5E1255ACCA4B6B59B66EBD6B9259A95
CEBA2846C81AB03D72C0609CBFF11BBFF1B18F7D8C5DA772FDA817101F4DC22C
C36CD012FE9E59BCEACDD930CCDAECC77C6FA19A9FD8D768A5FFE6DFFC1B33BB
F361934D36A110D25C6997CD41A502BE498A5A963C57D6E4239681A062512A93
C99799F0D65B6F1D56C153A1BCF20673E06A0A3FF48B6A2FE4BFCA44FFD5BFFA
575FFDEA57DBC47E12E272DD75D72D1171C387F94941CA802B5C81D0A41ADA6D
C80321158A8D35D93F5F62C931EF68F7DD778FC8B2C4EE4F6BC0175C704114A3
D6E3BA073757320A9FC0915F2BB5B65E0C64561F59F398A12CDAFFABFDB0E641
629EA9353A46BDD00AEB8D4A1A0EA775F4D0430FBDE9A69B822A0C1E5070340C
0B683DC5B3F23CED8DB897C8B83BF8E083AFBFFE7AA44328BE5DF6A414360E22
4140C9D27228F88C810FB406720CC24BE66AF2AB75435B0F685FA22006525A9B
882016F969BDC9AE0C15B390241E91AEA660B6A227545D42B9AA4D4455B26808
7A0864224C446188546AF91AA8D0DE7BEF7DDB6DB7D105A14D427872B3B1CDBC
919AF0E492224D2AF955CDBED62A805C18A350DB5CDA48715128AD59581252CE
2A039EEBFD0C6A2EF83403B61899A67BAD0210647D19D6399FEF1D45DBC29867
0DB3FA41B0BD993689ABC5BE00B52807C88376C8F151642161327333D88D138A
A80479CF0D74D843E56034A57CABC229F7F0EF1E7BEC913DCD3E22BC0EF29EC1
3D98A5D542DA4235D2475A8FB6C96C21B355F032B0C67D1934F20A55441C916D
8F6AB8D72C1A2771212AC43DB0C1671696D9547F188EC69A0D0C3BC4AF0E39B6
A7D834FBFF3BAF718F1423E2001C8A5019D283F17DCB2DB78C2E659E652B0EAA
FFC32C5EC015BDF6D65B6FDD628B2DF2944AD26852F98842271C36981CC15984
C34144B070323E2C41640203B0A64295101B33A5305D0B27ADB7DE7A519B0C6C
D11E4ECE0950E518B05F44F3075044C10CEC545E1413AE956B16BDEC4FB26856
286C0391566C3155C05040CD538CB6FEFAEB13674437928A7B4B2027BF9AB334
7D33F90F048D4FFB1DD90E688181E88B2E194C30269618C8EA73AA6C605C929E
EB35D76B8013F61C68E7E0A84FD759594D65C080D5813C6EB51C15120C966D49
80B61C2954EBB409FD58682BA8C11A7F32B95A0F23E227994D1556AA1743923D
EE45F61785A7715866E5AE2E85CDAB7F072F12568160FB7852230CD62E1799D6
1D71D1E15CA880C518531B205AC77BBCB0922B88219B37D17CD4F3B9DBC23AA9
AA5F68D5BA722A64C443CA2AE49B57BFFAD5F7DD77DF9A85BDE346A55097DCB4
AE4E6D78D40B9898A3B128033658152149F8D75CF3B690DF8B7295199BCA81C2
C0C962F2B5020C6EF2B6903F5180A2F54E74CFF466F0E3DE74005023E912F995
6FF6DB6FBF4F7DEA5384837DF8C31F8E8404929047646D7F5E5403660925C3D9
27BA565720ED3DD44A6BB2689ECD217AFCF1C7D586D5B5584B44E76BAFBD96FA
8F08D68318AE4A636DDD8D17C3B4F567376E40C846A59CD880D8197E49E530DA
0D056AAF7CE52BBFF18D6F2047230392FB186E410D1D50DC4C6DCDB33518F27F
2308EB8A2BAE38FCF0C333994C4C6D15132889CFAA9EFF1F65F16A8850D17193
34696EB4D146D9C5B5D75E9B7E0CAD84F2834621BEE1DC0862941730940E06CC
86B5AE3104EDC2A58C1BB4B915F17EE1CA791DEE2B108B4242B8CC5D08219422
134AD8061B6C9041C29EADD0B4846B0050D34D08057AD9B265391B279C708292
A93743BE77DD75D74F7EF293F9097E2390A99380AA31A8AF3940CEBAFB839F34
C74DF33CB9C5B8D7421A97FAAE881AAD97436A8B798EB9F454814E59EC273EF1
8941AB933A3DA127216BDD0A3208516653A020A62756DF731D5F1E3CDFDBA8E5
2F891024E5DBC57DBE94B9370952CE515303E0C116C726E1B81A6607623A611F
D4651BF74EAEAAAD83C48759477B3C2903FED4534FAD559AFEBEFFFDEF8F342C
5F69BDCC7BEBF5E32EBAE8A2DC89B5837C872A260E7C9F7A796BFB673EB3F6F9
491B92419C26CEDD4A4FC5494B40F01936A345041B26C484072B035ED3DB110E
AC7D386E2523AD1361F90ADB5D4FE2C0BD52F9F1DF6982C6DEF64C6FAB034BB0
C01969662C73C0E0C73D79A4BA540873835C44550DF220910FDAA2A3BD6CBCF1
C64F3EF924D64AC891557A8880238D0A7F1CFA62460E057BE28927B0F9D55A2E
6B7A575DFA1FE429950173A3E74B81D8BC11F332AA6AF51057BB05C42A27227C
EDA1871ECA7CFEE44FFE845FB103419323363DF8E083AD873E487FF41C57FF4E
3556E7EC53A982EE87C30CE069C2C795731EFE61D0578D7E023BB1D942CA812C
4168B2DBF985ED1BAD2F6A44E8AC538AE42257600E48A355E55FABB4E4FCFF3F
8B57B857973EA29F02A0B6B5E73FFFF9BC54011FB2A88C42B7A8EDB7DFFEEB5F
FF3A965BE2B9EC20665552ADBB78ADC45D756BB41C5601AD1F8477692EE3ED47
1C71C4CA952B4D8321D5C1B8B636A92467DA9F871C4AD77AEC462B061C2BA649
47AA2C5F95FEB6B030B2546F41C6671B8D5BD7035AA73BEDD9E14C6E9E45E8F9
B7C6D0D52824A26C10EA1745C5B57AE74D22FF434DC8EE1DA41D7B3F88D1A662
3A4C59C6F62E53CFA6E3DF82AE65D5545CD74130E0C1C1ED37BCE10DB7DD765B
EDBE80810A330FB61FF536B80282E3B804977121D251431149A8BE74401CAC59
88615FBCD5DF392E79ED4B1BB70C2DCE51C2F6B86661F38F51AFAAC1310FC10D
40B09CA1CB4E870BF82FA2FFA0EE69669B0318FCA40F04920A4215472C1B113E
61A4029963CA01D8422B13AD151CEDAD32EEE5716A8D14290320426921679479
9A1035D7BB0ACE95FE8303B23CED345C82017B2AABB951DC501AF6430DF5AFB1
41223CF413640307D03E75FD2A590AF6418351990831220160F03F1FF09BCA6B
463D012750C2F8C44F6190DFFEF6B7DFFCE637DF7DF7DD16DBE774C8715EFCE2
179F7AEAA9071F7CB010A8957646BD6429AE7D80AFC112DD49DE3C5F4AFC6A8E
1E24B262CDAED15B83ADB1D4FFA8B705FB5B13B4F20EB0ABBEF75CD16CAEB9E6
9A7C19626A7F72823B9E99F40CC7A51AADF4D8638FD5D14B6AA336AE9AA18CC1
61D48B99CD3A9FE39EB9D1BAE162DC43616BFCCBE0FA0795C54B5A9456627474
6088B9D87CAA9A4D98F90703E83A40566E6ED865975D427091F5CC7536500598
13A8428003B30A10DEFEF6B77FF5AB5F45D0A90C58C8D3A4A8E6B30F7A21D46A
BAD54C5703439C79858CA685B65801A0D1247A2ECB37C3BDF5CA4D18C3C7A564
D5B362E39FFF45456B91644D1BD36C75D16082BC02DE667AB1EA6F0DAB5E33D5
F7699AC061821EC4B44FDB8D5A116E2A41AC34AE75B6A728A0CDC660934170A6
B610C0D27A655DDAE7A98751FD8DD38E8D84C9A81357751CF7243C3B9F15A35D
452BD1B0DAC9D659671DE2DE2D116AC67935440F4A280F36250A74F6F49C73CE
39E698639050338E1663646593D191D40F38E0805B6FBD35DFE4F8604A51ED68
25F25CFEC7A653250A8195A234BE450383DAAABD29AD692F9D111A1293D6654D
BBF3CA80353829AD5ACEC2B023A7417EA3D558E71616C66A53266831BFE2675B
ACA296331F974A64B842A85AD82682AFE98B9A240720857F60738688F9769478
743E037AF4CE9A05AEDD11ACA8A2CC2F4F2E7CE16829588972409E99342C377E
08B3B3FA18155158A9E8076DB47BE6B3F52E46A3A034951C212FAD387A7465B6
DEF0787569510A57E6AC412AF189CC4D0A331B2BA0D5B0624BB54C303E473BF7
E7A73085BFCD0993FB82F416D0E26F4409266D78BDEE1F83B969076465CEC0EE
A8A38E3AE38C33DC3FF30E2555BA126765E557064C3C170C9BCFFFD765F1222D
E25E95FCE1CD023E7A2330A45B0F0808481907917E28EB765FC14E72D1451745
18F2110DADF5B83A5B832F82F7410B70259B4EADD06AA31BE462896AD54E45E1
FE3695C2D8168B2DE006A2DB486F07E04C75C58A15A79C724ACE0CAAFFFC686E
20E230C85A3FFBB7A2E500FEA87438E011D5CDD4C2F8A900B1B4AE667BED005F
9CD73FA4CA5299E5A8D4F2AD0603566DB6EBB847B504FE91BAA2ACE711F3C76A
0CBF0CD817D91A9910FA71A98E5B8B29D25B0D73ABDB64D93C2CD824CF60EECA
67FCF7031902461B7C7BDDEB5EF795AF7C453D58D34525FADCBC4486A1C83970
0087B366AA114D38A7DB6EBBEDAFFFFAAF070DBC9FB413236CABFDA9AE4E91CE
F3921BE807C3718086288DE99EF7CB566AAA54B734378F27D16103060C9BE7A5
06FD4A66255C9A25AB21AD566262BB07B9CEF51079102AAF9DC58047BD48AD51
38F91C95F4D1471FE538032BA326CDBF50FE803560D7851DDA040F564A9C8AD1
0CF26C339A74900316A89C9493F203D4A8C15EB5E5965B4603C1716B04B26A40
C85DFE42F15CDAA69B6E4AEB8E8C5CCD69F2DAE863BFFBBBBFFBA10F7D88AEA6
4601D7DA88286348B15870C725A4C34D69250ACAF1179598357EA013AE5AB56A
FFFDF76F93123DA3B9A98EADCA629552F36E2474F01E0116528BD21C886447EF
BBEF3EA69BEDC966C015ACEEA6C1F6FAEBAF0F9F33916B9A6E6AFF91D18E7BAD
3B05CF59B1D379EA252F79094A7920F80F338BF7E0830FBEE1861BC8239271EA
F35FD3BB29F0D9361218AB89A234D38E2544D6B9EAAAAB54A643A46878803B20
2F0A61C54DD84AA007F2074E1AA29F80BC6165AC228BCD1BB17352EB67F554C1
F7B95E460A88B1709CD30AC595F5B69EACE9E399CCAB5FFDEA77BFFBDD471E79
E49A491F313C256DA2303DEBF65E339E5BA87683E53F59FD6C4EAD6982F5CA3D
5893FC462BD9A8B41077024B7843444B389CA6A0F95ED65FB560AE37935FD33B
A4D6C63BF9095F06DAB3E48317C15D02FF3DF7DCF3BAEBAED3A8058630084697
238E38E2D24B2F6D5D93B647A135CE4817017F8800627FC725A0A64DA4F24C06
C3497EDD6EBBEDBEF6B5AF79E8A61DF0B927CA04698735A05D741D95D646B38C
0A06D150659A54341B474A64FF7A7269BE53CACC879A3C2ABF57128292E2D4E4
842E5BB6EC8D6F7C63DE72F3CD37A3AF703F2154A86BA8BC0B8C2BDD0EACB008
30253E9501570B10C03411A5751502E5CFB098C0C1EA81D599854FCD90DAB630
0DA915C77C9544AB6C3A8B016BF3885C1BB4D143A14EBF56694C591930621CE5
C103B1DD77DFFDA69B6E0ADA10C09C9FF6D9679FA83AF2DA6A86AD7ED68A12C6
A3F88D12E14E3BEDF4918F7C8482A6D92FE533BA47FCC66FFCC6673FFB59D229
717265F07DF7DD371330DFAC36A8E05D942B01F8957EEA75D6913CD7BBCB545D
D4E81FCBB3B8E3EC6C35530DD8193BCB21A5D5CD4F63B8F4E2B452177EB07FD3
22527D8151F5A8ED1E6C834D90262CB36ECF0A246EC3D9C5155E4D88D6208BB7
4D1C8DF2E045CFF6EADE201DA19E0C849A6BF10F3F8B972285AF78C52B9E7CF2
496D53F686AB26414469362843457E8CE4C16271B4CC4FFA610DFA564A7A1C6A
6ED23A09D732E49B3A59F9E9D65B6F0D1C5AF78BCF9742DC35F3A41E2AC82810
D60B50AF51EFE810200474F8268847E306D909C649CECC5C5B401C1D6AF57881
8D74C03072267FE7777E67101832EE7D619599D62C593EB7758117F9A3CA5895
01CB7E64061C1CDF45B4A0B60D369A4DC400432D058B630F188C564D193CB7B1
351ABB0C3CD47A46ED02AC794CB51622C023B556EF768C1AB168980FDF18BD82
1DB59AF44DEC19F7FE138B0213D92BA24CA6044FB2C79A818A6ED97AEBAD177A
97D7FDF66FFF76D417300AAA322EF975302DB82F8380AE864C06D3727EBFF7BD
EFA12B33134552B33C060E85D1C29267A31E053DB7B006351D415AF7D1045B76
DE79E74F7CE213A385219CE6170067BC4588B690410897C1F9F01B7FD50C3048
99D3C8AC605A5757A58A7A4C24A46B7A056F0C729C3B77994AD4D12F33139A85
5B4C9E841CD48F6A04528CE04BB88C9DCD50273226C8F9C217BE905C6DC829D8
482F1CEBBFA23269D5A86E752C94014BF0E4873FFCA1BE98DC6FF208D9CFB5E1
4D5B683068DDD638D7EB3CE72F51B1269E09ABDA4068D4735C45186DDA5ADD39
9E4083115078461664500DC70055F70938627926C9215CA1263C706EC58CEA0C
5F679D757254E67B6BE175D75D97D657E810465155E4C809C904082FCA651ABE
5A85E2E72CE19ACDA60C37015C681BC1ECBF9A5CFF1765F1020A6D5338B410D5
C793AC094207972F5F7EF4D147A3777236D80E737E305A444E923EB27CCC0F19
879AA58A99B921F26C3430400AAF0556E0B7F646E321B3BF1901EF206F37A4A2
CAC215B5F8B2367BCFFC831BC1759CA0185A58E9B3168BBF9AF424696322B046
73131DABF729CAFE52856DDC334733CFC0E4D8638F3DEBACB3C02B9BEF6A5737
6C1BDBDAEAA992B0125F6C776DE256AF5E4F696ECDCFC92E87223FF2C82384A9
1B306CAB3E8046317A4455D5BBEC3BE687908F3F9F5CB927800D4C7444C15774
2EEA96630E215E51FAB122E0E5C91C429E82691C3A3466683AD4CAB259AD8707
D7441D031D46BDC58D1E25432E3805E02477DA8A95652A6E42E6D0391043F360
2016C232A8AA6FF740399C5412AAAD1591D85AB6833243F2F58037F7835138BC
38AD708BEA7AA81EE581F9BDF5CA1E468788D50804EF7CE73B7FFFF77F3F4B46
56184F8A8DA3270D82D17252328D37BDE94DD1F0502B45B93C92798E4B0FB11C
C30F7EF0836C7AF642110A06896C074719046A4D5B37A779B0555FEA0C757E99
56C00D00BC4DF5AB08D5AA15B907C75CF171BE57FF8588E51199CE79E79D77F6
D9676371945E8D4BB806F447E9D3EF6BD388B630E6C08C41B92065433CE04638
016DFC35C01398581BBF2D0C05ADF19BB5FA349134DABD01636DCD37EA65BD49
FD78564468DD3840EE41D61FB488C653E7D74A45BD2A6FF2326606EDA84D575A
E9CCA3F91EDB66762248869204C7AD40443DA7B8749BAA76AB915DDBEFF4A5E6
1D08E671FA87288E65B1E79F7FFE49279DF49AD7BCE6FEFBEF771747FF80B378
AD8AA0D46FCD3CB01F7409DD0985624A882091781E7AE8A1D0EE00A48A59E861
4621F23A7C3C19E4CF2617E7936E7AC493433121BBF63D658FC2297367F84DC6
C4C9E1BB68A433705FF1A0D57AB181B3CB871F7EF865975D665E4DF537D713BE
682D49A22DA4654833ECAFFA0A5BF3F18F7FFC9E7BEE09AAA3B504C299003A37
548393A3282DFED763CFABD97D2296414E363A608F782A311D9522069C1DB025
7CE5CD6F7E7364D9134E38016300C67CC24FD8ACC027187BE28927EA21B3E6FB
B8C496337E3662ABADB6FAF297BF0C0273038998B4D202B570762201CB8C2FB9
E492638E390642660FD4AA858F4B2715EBFBA036D568C40CBBD9669B65B69FFC
E427ABD9B3150B271B542914E19CF066F2BEA44E84AD5AAC43B3D09A5E5D0440
FDD2E47AD5AB5E75CB2DB7383DE8A97D295AA98D3CD70B5968B566643DCA7C9F
3151A6ABADCE6EB294D7B76521F2B7F82CF9AEC6EAD69510345D2C4F35382E38
969FF6DA6BAF8B2FBE581164D75D77FDF4A73F8DE2483C94F9B2226A35500FEC
16D33C12A582851B9EA6AC6FFD4B8906C9EB10795C5799C36FFDD66F5D71C515
6D4ACFE6D5A142C1EA903B5C8AE31E21DFBA2D014C43F4648B15E302614819F1
EAAD383850ACADB837EAC9CAD0253116D021E2E33B9836D1F357357775E953DE
7AC20E084C1E0A3A3A2768C71D777CECB1C7FE1FF6DE044CB2B23CFB7FCFA9AD
BB676355715805C40CF0810A28EA77B99004138D06302A268AA8082220209BEC
6E8323BBCAAA28E03F1143142410C5200105090A61191411148890A808220333
D3DD5575BEFB9C5F9F9BA7ABBA3B12FD9B7069053B3555A7CEF22ECF7A3FF723
19E21209068A000C529D2976BE7F9A8192EA1C861970B6DB6EBB9B6FBE794001
F3B41C89CE8F2002F804D0402CD3A2028EEB6EE4796864CF39E71C16AE3E9474
D684A1B09D961FC0BF1455A7420CE158EA90423A2426C3075E980BEC162686EE
6C595DA4E894BEC3E9C40CFF9757F1226E486CB01974ABB4E0250CCEC6BEE8A2
8BDEFCE63733C25A79BACF4816C65EF21DE2CA901D010AE1C218848269F9741B
3A121DC338C7248A4E2E8122EB8145462595390523364177BEEDB6DB4A8BC826
000C4F4182EDE5DF844BD260C0546728B06707FAF131DD1A1C66B65177466325
00C689A4BE362634AA7AF39AD7BCE6AAABAE7229B95FAC64EE3CA28A9065AC76
8C3C135C385EEAB630D18A8F9E282280781553DFAF5BAFC7C131A4C5184E7F8B
B395EA380D67C029E101D173DE59EF78C73BF4953499B53579FDBFFCCBBFFCE2
17BFE8EC43C42B19141653E614E0917B2205E3E920C307E3075E11F30B705D5F
39599E82419F6AEA5D521844D77445C3CB99597DE596DE0862144CF4F61861C7
D51C528ED22F85FA3ADB70DDE93D16F9D62128EB121C74B4237F0D534D43752C
A42468F48461C70669561D058E3FFEF8638E3906D51B69255C3421B951CC54E9
9766F27DAD805D04CCCA61BD791FD95CB31CB06E739A63EBADB706103090A2E6
133915B208FFEDDFFE2D464DF8B9CBF0FC22CC895260A9CF08524B814B358A08
20AE45857877FF5DC4B8CF63C112CBDCDD1DC49E8664BBDE20C1EC40CBAE958F
C13F9187FA2B11149B84B24F391B26265804D2A0F815AC90D26EC0E22B022A12
3341637ACB2DB778555125FDC217BE50BA5976FAC73FFE717761C442C942B129
781962B3208C8AE9B03D562D858F123A04F4E04CD7615B6DB5D5F2E5CB357CA0
D2ED0EA24D99D41D76D8E13BDFF9CE6CE92543A5F43702EBF35948791C84C45B
75BFC648E3E2F3FC0F56F192A67DF18B5F7CFDF5D7C3D5E0C212F04AE06ED0FA
0455C88E20980C1E910ED0875B6CB1C575D75DA71F4A11DA2991E696896D641C
B3C0BCE83E77DD75D72BAEB8E28C33CE78D7BBDE852D92D78447561BE69B7437
12000B7C4B0F5D82D8FDBA032EC9FE39D04FBF3E9724CE0A16AB1EDFBE6FA326
33B7FDAEF7EBAFBFBE46C606073AB25B378B754DA7531226817AE94B5FAAE5C7
66C10FE3B486D9A396A27D594C675902541F5B89B89241D6EA81071E0850563E
34A568D11A20E0E9D30E5827260CC14FA2BA0CFFDEB9039CEC343D3E49008D15
CB43C97FD52D495B982A9275F28A57BCE29A6BAE49D379A0B4A840961A139ED7
7C909A29EA85627170AB6E59ADBFD2E8FFF88FFFE85CE9739EF39CD7BEF6B517
5E78218C579A44DD004DD4C115A60A3866C248BF242B75663D9DEEF06B5FFBDA
D2A54B8F3CF2483DB2EE6D00851081BE186AB184BD31BD650BB61A67E057D622
244D08B31144B4099B6A6CBF97AE0B935003C03EACD449B29032C3CC1DE63863
23301D98262869FDF3E52F7FB98433D98A58EC3BB03C06DE3B214DCB45AD31F7
3FD015CB3A991A2484BDC5F198F25476388BD10F645E598DE286DA05E169D71F
CD1D8B410830B806047DE4D0B1D56ABFA6DC8A93C8AE87D13AAB898670855DCE
E7AAD76C3AAF88EF16D43436071D7DDEFDEE779F7CF2C96C0A9C131DACAD271F
838D1C738E56B12904F0754BA0C9E4FD1F74D0415FF8C2174C0DE9DCD39365A0
58A064EC748A9D77DEF91BDFF8069CCFA966EC63ACA5D535314C838372CE596A
096AD1CBF1C5ADC1BE2622E798BEFBD6E9739DAA5FB7CE8652C472CAE93A2C3E
E60CCCDB21871C72FAE9A7CF5186E45B725D0D05B27328EC08476AD4349E34F4
76C3F9C89005B722E1EEDF65152F8925A237ACB368959BFFD65473BCC1796260
79105AD292B3C400D202D08CB8EF3A87B1B2713B10255E76A4A8B3BAED36BD8A
C9BB93CA65DC64AEC96833B4E7231FF98854B8CE496F699B9333B25AA6A7CE25
99EA1400F503BA04FB4A776ED4BD798B5CC20F28CFF0137697C42E567056D338
474D4F5C1AB05BAA238A269835A187D786F7888E27D0A711D0AF7406E22BDA6E
9FFBDCE7DEF08637E873B606672080E60E83C615CE285EB16E37DE786342EB7E
46DE60497069B664117AAAEB3D0198A8DD71863029745791BDCFD7D5D9DEF8C6
37DE78E38DACF9B8B374CF78CC3476D48338BAE0940D5D92982C5D4543E7CEC1
A83A074219792DB3DD77DFFDF39FFF3C0EA5CEAC25670317D4926E12107EC45B
11EAC42C33B493035CDC85D19F6A7665A4FF4E3BED241F4EBF32394C5EB3E6C9
BE84CFCB33E240AB438EAEFDCD43FF72AF256E4FA7CAAACE04C4F3F557F30E4A
9C5A0C1D492E899D62FC1AE26B9B6DB6B9EDB6DB2257579A093D970D61DAF989
BB89C3B9E491CFA7B3D246CAEB54D726593FC5826C1C41F2774EDB63C1389241
58056FA711F8EA7D15DD8C163CDE4511988E06C650C7BFF295AFFCF18F7F2C13
9088348E9FBE92A839E9A493880D68DE1D3CCF03BB08D2833E1CBE0D53E77224
5635FB9A9410A78266DC2617E69A3B8B9B3D826BE9063456AE0B2DFDAE54FBF2
8EF223D00D54F6704499124BAF588BE6524FB581E396C54C2AF8755208EF7FFF
FB659C5AE701C48F524CBAEACA2BAFC47A4A432C5AEE30381B084BC793571E68
4590CD596112C90A9C5B72B5007C1A4462F52C203F5D3DC912B7136CB6A3F4FF
43156F5EF7C060C5E3ECEA36306B3C35260F8A90F5B3CF3EFBD0430F85CBC9AE
24A600B3666A5C27419920735C609E4739324C1E193317BA379074A9B6A84066
F5EBB6E1B1ABC18CB3F394B8247598C6810CE5AFD969232250E03BE4B6C103DF
7BEFBDF0CD16752B18EAACCCBC86448097D132C8B2C6C0E06C3A990E43E1A252
F645AA70E37A2F1790223AF2DF1A7F424A7BEDB5D725975CA2A78888EE8815E2
D29A23B980975D76199975AA5910A31C8C44B0C3E100CF404494EEA25A9671B9
B2A7244AF4B9B9E752C8B8BBC542AA4D55B74A33034324A3272D02F2438FC9B7
F6991C190239A1E988C8525FDD5C407A435F905479C94C0A67A317A1665F2B01
1EC1BC7E393C468835AE28264EBA102204833171B5E1E5C7D0D498E455AB5742
26B1C420923B1274443AEB66C85BE53547A976FD11471C31503890D50C0D303F
D87C2426CC318E1245FD345C3230A0830D5070002636CBB14DCF4E71C32BD789
D875190E2E6675FD2A9E25FD159C1965D7ECB2CB2E175F7CB1C57EAAF14D4EF6
BB3C240A99816254DE5075C90A27F8AC6B5162600BC07598455D5363B8BBBEA5
850903ABCB51CF69BF9F554AD7610CAF543576F32DA1439D9BC06DD0A6D009DF
FCE6375F70C1053C38FBCB5B60AA16D3FC38C3FD3D22509BB9E17367A1091E6A
A4B4DC65815E7AE9A53278F1F92878E2BE899660777B436EB5D556B440C011D4
577419A3217CAA8D6B549DEC323C6CB63D9A6036856A0C21469CB6258D57E778
459C73B45575123DB843197250CE3FFF7CA84C5EF292975C71C515AE7526B2DF
A829A9532826FBED56F166758D1690756DDA534E39E5939FFCE4BEFBEEBBFDF6
DBDF74D34D455DA14B00DC56306FECBED0C7DBA625717B6484697A3480E79E7B
EEBBDFFD6E1D033A9FB4535EF1B1110020686F620A89FED7BDEE75140EEA782D
03CB473C1B22190672739539CCA35F9F4B52B7FD9B74DA48A1AF00410ED9D488
1E5FCB72DF21717DB2E38E3B7EFDEB5F970886D79AD0A24B0E9C76B2FD4E3601
D5AEABEB54008E08FFEAB464FABDCF9929BC70EB2A1B3AD9F4EACF54E372B102
BD08D9922E4CEFD54CBC45E019D0E264E119A940481F9945DEC4DBDF552511E8
8E41E987658A099521075848C41B18C9882CA3DA42924B1B96A1B6370C2C43CF
A59B876EF62FFEE22F24C1914B2C369D64D75D77FDC637BE81C4742C0D9B80EC
581ED82B23AAD419F448E8C162D302A603BA9347765A3C5096AAA8252B36FA29
D9CC92D48A049C9E022F27864597F8E0073FA8AD27A14AA0058CA44EAB0191AD
43790C9B88C884163695900399D11955637CAF830F3BEC300DDA0F7FF8436A2C
91605EEACE61A3CC986E4BCB819E5D455D4FEC959982196DCB4C370FF20BD807
42D29E9EFE42392EE176EAA9A76AFC253351D2B13A390B8D3178B15A9C9EB7AC
D0C8EB0C7123BB501059ADCBB10DB10634ADBABA5C410D8B911C28FE8849E272
B108C2B6027B903B643CB91F23C8A63C60E78DBD158DFE75FAD0861523CE1EF3
0FD99F2E7BA263148105BC4696940317AC426E14D96DD1C03DE8D635047A365A
9F5AF0D9EBC5399BDBA325F5E88AE91959FE7945D88B611A5A2BFD8AC0BD5F13
23A3F22911C130840DC0848BAC42172BA7E9BEFB6FB78A97B02A6BAB5F37618D
AEA74D3354380208FB00950081D130AA330B0536CDBA513C9C70445D8CAC612F
45CE36DBD1035C69EC586E7ECB2DB7D4310EED323E03BB68E0F594B8247F2B9D
366253C554F3B4442654737BF15BDA8CE7814137ABCBD90714F0E1871FFEE52F
7FF9073FF801B38F382842BD38557CECF9BCE6F093512B3302E3430385A79E66
62164B75B3040343F0F501EB31BF6CC0013BD5DE7F0A69DAACEE2F69C590050E
45861AFDA739225C44741D7DAFF7D40E6DB0C1065A0F0850A7EE0648BF63DB73
1BF7DE41E0AAB0B9B96EA4FA8AB2CF5D25C86B127B937BA09323BBEC374BC268
C7E99E351D6CB739B25A067378A7F01583E97286D813498769A9534011F19EAE
0AF1C2C8026F0F65F4C813DD309A40CAF8C8238F74C28BE78A080F472FA84D8A
81E268107877C7E3535DC7A1B351E58199A59F50A4A0BF1A7F5984AC0A143CA3
3D801C8C0EB4C61C7BDD483D4C4C3D23336BDD91A6974DDA86E36C9190196F3B
D611A51AC0E14BE07868D84109685D69C1BCFAD5AF96E364AC0F625C17D29106
B17B9D7BA717354509E60EE6ACA36E7A0A80B4CE06A690C3F6BC93062573EF63
50E453A5EBA611E8864E172940FE064412C30D9684256B5C9C065DDECFA73FFD
69943C862A00106226146B3A61E3058127413D89771D2F221E8062CC4364F0DE
F0EB139FF8C4FEFBEFEFC88936BFCE3FD0F16D406C5993C9E9917BE45D442129
EE8203326F7DEB5BAFBEFA6AED04DD152AC7A2AD984EC31D6B52D36FB58AD721
539D1C6998D77C3DB6B0FC68B60401A9124FE671E274B345F94B151DA230329D
DA71476FD9BE493510433F07DFEE6A6C77FE915D058130F54288FB7C4EFEA9F4
14B924ED0CFD163B6D3898E1BA9422504BDA8562492313919E03A4AD11508D2F
A5BFD47EB092DDF53D8586CA485B42A33ACCB19C39AC4FCB442D0FC317F473AD
A86DB7DDF6D65B6FFDC0073EB06CD932F4B49781716AA8077D8B02886A38D57E
C080C35D4C6F9CE7DBCB42F389E10E2EBC81FD86D6D4C4F7908694E0B33C588D
BAF4F6DB6F7FC30D37F87162E226D284C5BC23D09648714CC0C30D0D753C630E
F7CB1C0A9813127C223026C18A6EDB6BAFBD3EFBD9CF52C7E2044144BF0F30A8
DB81B3F031218C05B21EFCB4D34E7BCF7BDE93EAE6F0441DB4C22531CE3CF34C
39588C959E51525E9B8B9333594ED5B13E6DED919ECCABAEB4367A4093314A3C
29910FEE59527DF7DD77D7CD0CF039731E07FC4843985E2605A68BE160381595
98831C3CD09745E741B4BA194FAC2F822E03F42B56A6D73051A2484793025B1C
99D081EE3E5806FD9A53081B081BCB028AA4AA6D2FA6CC311E9327C62A6A2255
4C3D883054BEE36D539BC492A55FD365392BC0D1D6C438C1B1CF2B0657AA1BEE
EA16A5C39044845C98D44898C95361EF138863E8317324D3696BE524B6135D26
7F70D06C4631C4F18EA273FC1C0ABBA859F2754E6DFB3BEFBC3336ABF2CFD9DB
916234969612F477596DA36E758E11C090321AC56FA38A97DBC3032036E54090
2BD6FD4FF707F4192039D1FC522232800DD16606A5E2042D06BE69314821EBDB
BFFEEBBFFEC217BEA00F1191849ACD666A2BC19524A4D57D3FC4D0BAFF55438E
5F9F4B5293F8BBECB481D30FCC180C9AFE9E75D659084D5E60DD4D8F8728C700
8A0921EF5BE7EFB53564EA9D73CE396CBAA2E20460D82375C3C04B4290AEE39A
35F94C32467575F4B159D0B5D2749FB81AB83218342C03FBA658CC4004528D05
7310E2D754C0A6D5C38CE031355CFADC818A33CE38E3B0C30EC39F4855C8DD4D
82518A2EAB8D319B48091063214EB512C96372317CD155B6C386E5C66CB0122C
3FE7593514B63BEDF14870A151089803AE6CD65D0B9956E3CFE3A27558657860
F5B936A34E4B8D5C9454C309B82C54AB73DA46DD1A928C460AA0BC546382086D
62DE7DE8431F3AF1C41363BF0A1D036E94F50300C2D068F39977EB5EBCBA377D
059A5A6776C0390FACC8A96E1C3440244053F9254B962C5FBE3CAFA9F2B50B62
01A1CB0D623893556AB7981F22228C6907A9CE3296B404812879F5A217BDE8F2
CB2FD78398E7806D68320993FF732ABBC58C8F4923082993ED4EA1FDB94C968F
7DEC63FBECB30FB9734746318CA62503FCEAD62DEECD6E3310F8E615B734A5C7
18D40E2AE2D712678E29747836624D18DAC8E86896C8C1071F4C5304EFB1D984
CEF08BD0B7CE89C770F6D967CBEA8F2421C3BB8B29DF72CB2DA505DDE22DAF59
676D9D4560023FF12364A1B16B941411DBF2DBAAE2E59CEF7FFFFB2FB8E002AD
7BB2E38E3899E5CAC21175C5ADEEB0C30EAF79CD6B8E3BEE38DFA40BAE580917
5E78E15BDEF2166C3D5D97D5A99B0160A23D8038F0AE6BD40DB7E100A291A7C3
A10E49E9A10887B8599E157C73A656BEBC8AA7C22569E85FFA9D77DA800D0A75
EEE732108C4857AA5984521DBB069F4F885EB24096AB96AB7940BD0DD9688647
6052CC385C805090CE03941751F8C6F887650DA7C5926331687C0E3CF040AD49
8A1771473C2F31931A5588EF24D5904C33C445FD67A405013DB68FB7B94B3B6C
EB6B3476DB6DB78B2FBE982564167A6BACAC26ECE5FC6C43F4AE05BA8163E8EC
285BE6C669C6C890F6CEB265CB90F5DAD1A67EE360B886B83D4E2B0BE3BDEF7D
AFBD5B929D7194A24937A0576C736352DB7503314E1B2BE863891122E80974A5
DA41D202F8C94F7EE29FB013590C317AC7752D16BC6080585B9A99FECFED198A
0098A73CD5C03D53A6A4E9762DC7D0BBD79B853D8299AE93EB13F2EB3CB50676
E79D77D69DFCE8473FD22E83BBCD2158CEE3B079A49A48B579ED7EDB1E649247
BCD7752999931BB6D34E3B9D77DE79AECE7732882431F873F8D7088AE8A1604D
318179AA2A91241E7976D80601A32190CB840E2B381614BAF8CC5A33A6646238
C51236ABE887308D750732664924EBE0D34F3F5D2B0FF64A3D1B626E009D48D1
855E445474972480757F5C4547CE5DF86BE81360139B026CB64F7FFAD3324022
2E20FA318D5908A59954CDF1669B6D268B0CF506A40207976446AA528F68BBA2
A622412E63BA1AF0493C60FBEDB7BFE69A6B7E2B55BCD75E7BAD5323443F58EE
4CB3AEA89B973131877339E3CB3443D1DC71A41A3432817DAD0449195DEEE31F
FFF841071D64E14EB081F5F3CE77BEF34B5FFA1284F8B2813EFCE10F47351049
095268AD5AFC77B9245D6393FD8F76DA90072C2346FB9FB98084CF917396A2FB
1DA5DA0005E59B2A235D934ECEDE4BB4A8DB09F76B76B0D9548543BE909B724E
5E8E6CC78CA9090DAC0CB2BAEE22D5580A0BE58877FD751430F8065DEB924B2E
79F5AB5FCD09A9184E35BC9F2D63E329C23C354AD21C4C6E541BAC0DF21DD114
C8EA0A13AF5E575E35EB967670F70F945138F63EE3A872331CE082497FAB413E
F9E493F7D8630FFB4F8E6A60D9DB3122D28B168C49A214A205C6F7EA257D7FDF
7DF769CBEB0CF2A8A4EC630ED8F9118BEB46DD578AF82DB1137DAB1D74CE39E7
5025E1E1C2A9D03935DA3A2D7A859520114D2CD7D8787DAB6B0182E15988ED53
F16FE23CF76BC1C2369E2B8EB323F0261848759F3E9DE1539FFAD4DE7BEFCD18
EA00CAD0C94B6A3C35D4D2BE3647EC39E81EC8931262345C0E3C29661C87616B
5ADA90D9D5233B2BAAF5A981EAD56D8FA98BB303069F3129F654D90DA9CE1802
8945CEE3BA98495B278C7C20DE1AD9808512EDA0E8D49B7B3ACA38C7EE8CDFA3
3ADB959D26DB332C2205A885338E8EE85E79E59532705C730C9B1581D65FA7F0
37BE1CA38016437FC901477B33AE89D94EABDB268B89296A2043162AC98A9A7D
0659469E4F8F0065074DE2502A7A4CA9F3BBEEBA2BFB6D54F1C2EEE63BF11400
BAD10FFFEFFFFDBFDFFCE63767F3FB677BB930310BE5EA3CDDD1471F7DC20927
10BB2680C1EE423502DC73F953AAF385A6124439E13D476E0744063B367A12FF
3D2EC9FFFD9D36683BF1FAD7BFFEDBDFFEB6EE109717B5473A8A548EA5B0E4AF
54A004043DF874CED7BDEE75FFF88FFF38E3F4917D1F0851E20822B38C73E9D6
BDD0B5611DFB8D403F64B496DFC61B6FBCEDB6DB6AB42522678BD35A740C84A0
1D0F24FE2673FCB4D34E8B5076F7724F352CD1728D8C8696BA6690C23FDD9E04
F4BFFCCBBF7CFDEB5FD7D9069AB80CA84CA91657BA6FB4D14612F1D75D771DD2
DFB5AD8641A51ACB33E3A8FA18D86D9199F22B64DC64554117F4A260ACF49775
88983EF2C8236577E6A1172FEEA3336836E6F2D0040285119B03BA92DBC91D82
04C003B350A4804F6658288F060214D30A6D8A27FD8637BCE18B5FFCA22D0F6F
3ABF343B80AEE5C9ECBFFFFEB40090F039F1C4132596413339D2604565DC6834
8FE2C332051855FAABB5E728A9CE06F894C563DC560A2024322628A681DA3958
9BE2B3986D5ECBA0A8CA40B4A21A3505298349413911206D679DC79560D626BA
B1E38F3FFED0430F8DBA031C835312A9F62B22FB9E79AB9C9E670D64F97456B6
BCA68232B92B7B430B48A3AFD58C700725EFB0ADBD7BBD077E49365BE69B2E73
48F5E2318E3BEEB8238E3822051CE3134F3C3E3636B268D102A92A89A046DE5A
F1B8F48D2C03ADE609F9B0E3135D69642DC8390A7FA9D682BD051B39866E28A0
76F01D1784340650EDB913909E0383BDF3E93D34E236B60F073D1EC38D1406EF
6E5CD56F52C50BC494356A7947E0118323555E05A4484FD5032EEACED046B590
E13019D331C71CF3918F7C8492682DD99D76DAE91BDFF8065C33BE55DD8C9E4B
ABDCAC370E66E82F0A3B559C47A81FD90AFFF44FFF94EA28D66FC225F934EAB4
118BD4535D5D06F61E509295E8CB5FFEF26BAFBD9675F8F6B7BFFD739FFBDC40
07AAE1150B21A5640175B1C6E64427D85C6CE62FCB437B41A0A49A0BFBA312D6
3259E65E3C7153E8EFB265CB3EFAD18FA69A224DC2FA4FFEE44FBEF6B5AF6148
C54A62061945EEC87F3CB9593CD92CE045ACB923CC871FC635A36FA1318A2744
0D14751BAB343BB40D79E28C8086855E021A4C32BE60A3526D7B692D49E87DF0
831F4CB51A60593AB6EF887716F85607C2D17CB5E5965B4AF092088023C5FA9E
2B122C0423E2F80A5BD8D866B67051B36B39FCD09FCE660F77E6273FF949D949
1FFBD8C70E3BEC30605F6623C0DCE41212EF1A040744FFF66FFFF6AD6F7D6BC4
3751D21625A4C348DC067F2FBCF0C2B7BDED6DA9D2F43A1EDA25576003F2A093
92B14BE0ABB94A5E51DA018893C041CE171505E6AB5EF5AA4B2EB9C4B95442F4
90B1A4A056410A139370488633C343E911D013C99C3AF8E0839D4DD026354075
EBADB7BEEDB6DB8ABAE005358A4AA5C7866EDBB5F2940C3C592CE18274630DA2
F4B724627009A41475A78814CAC02D4D743198B78816225980FCAC5EAD7D9ECD
9B37D6EB4E1C77DCE15FB9F473CF7CE6482A267FF6D04AC98A9FFEEC8935168D
ACBD56EF99CF1899189FF8D563BD5F3C923FF4D0F8BCF953BED1B016C6859544
83078EA6EE7CA8E7A4C30158531430995A82BAB3E11E79617C115D0739E9B453
04E3F0627761ABFAB48459503F2E459FBB8AD76A9887C274A5A383C959C0980C
F0111A1644BB082221B3592D73CB50C34A236306BC80545ED16281AC89960400
756713F39A501E88992B978C4532B9920E3EEAA8A3CE3AEB2C57E0FD265C923A
F9D3AED386A698CE5188F201DBCE2F3DB8EE2D9FCE4C34FC62F3C7CEA603EB99
C18FB95503466C1D024F23E9ABF3C84E923181C31AF367C3EA6A5801BB66C903
C8F3C62278B9AAB4EBB0E2FFFBBFFFFB5D76D9C5245C925F8407B91FFDD5617B
EFBDB7364EBC565460AC5EED05BD414FA4BA22CE9E651A0243CDB1293098BC86
5D07AC597607C95437E622852F790D59233B9D99CD43A7E43C749AB12471A294
B3BDF6B5AFBDE69A6BA048C40C8AB95E3691F36EA9EE5E65FC47AAF1442E1082
7F9B8E583A00E2304640E3294DEFDCBC81EBE87B1288A96E7F64646B51D317BA
F765A4DEB4B41C8E3E028126A9876A30F1994E2523E0FCF3CFD785786ACC5F88
7D004CB9529480A2DB3AB13D53803EF46A4272FD7CE79D77FED6B7BE25ABDD81
3D6302F821C812BDB42C77DC71472D45F27A38184E4044CE3BCBE1489A9BEA0C
0B092F99025AD2914BA384A933104C64115A8BB81506434CA1B78E946770D75D
77E9F9A55F35401FFAD0875C43C9942343D948E47AE94F67527E2DB9850B3A9B
6CFCACD1D16CFE68BEF8D90BD65A2B6FB424E2277B93AB1F7EF8B1C756649D91
89B51616CD562F659256D94F1EE8DEF7EFBD9FFE6CD56457F681CCD5AC5FDEAA
364FC1D2659A35D0E48F991B982206CA4C237E8790D11CB28C0D8FE5E1927CC4
D38C07B3F42980617CC9B15185098286CDEFE8AEEE41D20D3F2C85BAD518ADF2
64237D1004FC6D86EE69FAAB0197B7A17971B4608E64E1537D810C42EB6CB8E1
86106B44A19F0274D0D25CF6FB3DF7DC033A5F96A3168C9EFDF8E38F3FEEB8E3
10AFFAA7F6334D2D416FA5DF804B123F237F1A76DAC86A1A5B7622774EE46AD3
4D37D5498C2B49752067C669C23BD73DC3029DAA46F46F79CB5BE4CD3859EE83
B12F5FFFFAD74B3AD8B37492085943587E805F33CAD0014535F095D7217175CB
6E87E31C78C0178FC966DC4A8449ECDF80F553548401A493A30DCA4B1B444BD1
6560EE87A3E1D53D68FCF58CB168D5250F0E050F642E91D494E0D3346CAFBDF6
D276F3C14568C7BBF9E69BCBD8D255F6DC734F7A7A6A12698DE52228073F5AA1
77B22595373852141B0E68314A9153915FB4616A81C0823775620C0B13852EA6
7725B24BC7924605E0CC81C5618F0386F0CBA3AD4B683C1DD230EA902A7023E0
B8568C18E73517B7B35DF4DA0247C62ECB6A9A2099B01435BCE215AFB8EAAAAB
B09EBD30403FF56B624B0C08A28F280806A41F38ABE35AE5D989150147B0F745
E5925D7068E0986B9E0526197E9855B4BE46A7423404E8E7B4D34E3BE08003BC
D834B31939398408396A2036D877785A585B46F4192B613F8C091E205F343394
3CA8B5D75AD46E35D758347FF1E275DBADFE3A6BB51BAD6C6CA45189B2BEBCEE
22AD2AFAABA4BC9A9ABE897E56E8A9C66508365A237ACCEE64F7F115E3793F7B
6275B16255FEC8A3BADBFCF1277A3F7F68F2170FF7FABD4CCE314D190DABCEEA
FA57C63452C1319D26809D9B35C66BD7D2B9115AB365A118344D0F449BF124AB
5B6D509687011BE112928FB7DD769BBE72FD7BAAA3AC14F217752FE4ACA60F84
EA84580D9FE8182972164111CA5E81F53E25459B4FEF46EE055AD42D01526DF5
93B9E1C6623824D53D2AB424287E307A50C76B3CB53AF5F358FF6E13523FF94D
B8248721754F974E1B59A0894FA1F4CE25F8FBEFBFFF59679D655A1876A53BD8
A7CAF38845D5C5F4FA9CD86C80056C38120BB83FD44567A02ED3580D6BE27840
9EB222D55A30D538C72A5C450CCCA1574058A9C6582010638DA26BF6DC791E03
881C93EB029AA11FF3C05AD5EB0D6F78C337BFF94DCA521943C0E414FBC50245
7CA322B0D00F9C8A61B1B5E7C3D65B6F3D2A67526086B12CCD43733D2F72D7D0
6B21119E352AC217C58AB59B6BE32CAF19CDF439EA501BF0D8638F952DABF7BA
195918AC28F37FF1D4547F1555B7284B69645A1CC02CBCE80FAD6F75CE73CF3D
576BCFB4DB31F8E75F010ACB2B161182282CC88F7DEC63E79C730E30C0184F45
CFC5CAB1BC66024E1502609F7DF639FBECB3BD062229AF1E41A3418CC1CBC696
9664237C17EC7AB069DE748D9AB3DAF2CDA29B243DA84F3AF39E74D249FBEEBB
6F8ABD13AA9D05A2A5573705D1C11189164B4B6C6D10CD769D2ABC3765833EAC
30DC02BD809B9B7F2405DA7D87FEF3C06C4720AB1AB85615AB9CC8ABCD9797E9
BD0DB7DDF6FFFCF09EDBD658B860FD0D166FB0C1E2B5D698BF72E58A871FFEA9
6C9146B3228249F271BB459ACCD378CA57EB7DBB5B86238ADE4A6DE8466B3435
F2D2CF4DDD2CE523EDAA5A346B35AA8D34D1ED3FBEA2BBAAD378EC810D2EBBE2
072B1E9FE23A2F2A2202DA23C6641BE05EAC0A5789308573547498A446034DE8
752070148B44673C09E424D0B85330800563373A7A8D03420D8F2722D265516A
35BFEF7DEF932CA6A0D6D7ED57CD3A6476C9B793023BFDF4D3B56DD2EC69ADFF
F2351091631CA4A2B41258702C74BBA404AB634E4BDB6FE9D2A58006DFF5AE77
7DE6339F61FF9F7AEAA9071D74902C06C920A739B10A35447FE0924CBFC75C92
119A84D0E4A9B93D27B007B289A92AF9D0AA30271DA2D076A1150F3563A0F47B
75230DD21376336295BF234C915E037D133590739659DD423822FC350E24E375
2A77484CA10556AA7B11EA87B877E8331E507B6438AD6860113455460CA1775D
5B6F68B771F8A9468647F80B9E288F9687AEA3787BAE1A62780714700A51F458
19EC854DA04BAFD82F0873A45F3341C6D031889614F8E0305988C3FB3171D325
5D5DFDA8137ACCCD69430B514DBACB70E3231435899E051D061F7BC7740ED974
32C754C5B7E58E7315670CE99443AD5AECE694EA96CFDE4A989E990791ED4DF8
149E17787076DB6DB74B2EB984B85631BDF9A5CDA55436677DD9DD77DFF5F02F
7EDEE9B4FA5D89C2FE261B3F73BBED5ED01EE9569ED0D89A8BE67546DA8FFD4A
02F797D50E29776FA3D4D6D2C1D222AB8A3491B289E6E44AA9DB5EBFAC0669B6
475379E4782ABA8D567B7424EFF7345BDA9FFDD1B1CEA2459DCEA8ACEEE2915F
B67E70D75A0FFC6CE137AFBB413ABDE8A7E7FDD112CD1C7D57BCB84D6D8AFC72
F677A0CAD9664B367B45E00056227E38871A8BF1AE5413A90CC487ED8EE09713
906476E075E2F8CD36DB0C78672456CC42E908BE26B091D918B3E7D6BBC60418
D681C91649F8E0B2E9855E8491906FC08FD17284B48B632C86CC561373847FE0
92FCBDE59274AA08B39546A870B29A5CCCA79599F258F5D2A27AF39BDFFCF9CF
7F9EB43D5C0D447AC970EBFC7A04D904BBEFBEBBCC3BDFAD47430F7BD861877D
F2939F4401C7CC4E747F5D23808F6BFE5716896113585AE857DD9BDEBFFEF5AF
BFE8A28B9C8E45DBE9BD8682502A27D109B7DB6EBB9B6EBAC94C96DE0E2654A7
360651863490CDFAA94F7D8A9A37ACC0ACEA6C08FCD08608702757990FF4DE40
FB12C2F17551391B6EB8A18614304A9AA9EA843A17EA1D4CEF432E9CC4DC40A6
CFE2A5173A1842F411378E868B494756B3EC8DB8B632A351D89FFDD99F6966F5
F9F39FFFFC5B6EB98565E9C839EE99157C0AAC20082E02C8601D528DBA456BDA
3537DA9732571E5C5781238138BC7B201AAA4D05505153D479ED953151E35006
06349F4E48192DF42829AC83C7463B953F245F36ADB1666B8BCD37DFE4391B2D
5AB4A0D19A6866B2ADB2563B9737BB62C5A34F3C51DE4A7FF2B1466973E58D66
D1C8268A6C75D15F55BAC2BDF17E3151A4FE48BBD568B6525FFF9CCC92767BB3
D11E9B1C9F90DDA67FEAA7F317CE5F7BED7CB4DD5D35DE5AB172D1A38F368AC6
E27BEEF9C55DF7FCFCE147269F5839B972E5D4863172CAA1A11876061F616722
F6701DD0A0FE67F480FD7E36050C8FB1461C0631E87E9074ADBAED366B949390
F0E77E3806A7C7F7A3450902D37514BE25F0507C627DFF543D600B568740A27E
D57284714237B0DF7EFB9D74D24931646A86813972CFB83EB482D10E071C8737
43CAE40F5C92BFCF5C92767631941D6AD620A38748AE733C6A06781A318348AA
E3594B553814C5AF7BD37E2463CA24F66BD6FA482FEFF1C15173F824A2FD3DF2
8EFAC4CA96489AA85993EEA446C8FB1DAA263DA334EEB7BEF52DD20A8E84132F
058AA8E3DFF4A6375D70C1057A461DE0B26C4AB4ADAA53E5BD617650FFEA3EF0
2067C137E18A603D3466E92AED676761B8C4716ED85DAA5375ECC158C1818ED4
C19AF408D71D96AE5E5DB63C18E1254B96ECB2CB2E679C71065822224FA4D2D9
59B4DC80A9C6D96E4A0638B9FB34386EE4A51E6F437289B64091839A75D8AFC8
955FF18A575C7CF1C59606CF7EF6B3755AA055E8602D12E09CB112A755F7DB26
A03D0584F455710A7978ACD4B8163D31563CD6CA53CB4E4E6A33B5F23432DA7A
D633D7DE70A3C5EBACB356A7D5A8C84CA44AA57D35D6BD5FFEF291152BCA905A
2B4D349A996C6C29E03CEBF68A95FDDECA52F5F62652DE2DFA13CD72ED35F449
5674B33C35F36691B526BB93FC53AE73ABDD5CB87074ADB5CB7B6977C6524F36
CED8C478EB57E30BAEFA97FB6FBFE3978F3FA1C97872331BCD84CB65D3CF4F17
B796EB71675C67337AC0B3E933840BCAD24637331A0730AAAB28E98C88C6A626
4989EB8C02F3A58F3EFAE88F7EF4A3FA27288654034F9EAA02467C67D37B97EA
5A5AE2B193717476535DB6C8A6E26E670BECB31C81E4B800D49143C9C13F7049
FEDE72493A594EAE1D9E0453584009801CEC865E3D118FAA1BD30810B7972FA2
E3015B41F83C9083D031279F7CF241071D847D80691BD121A9B6DB0C924A2144
E4CC7D1A32C7FD743A894EAE47C61A8E10334021EE648CA180010A662DE2D835
E3A6824797C808D3983B9F4AC0A05FF50040803B0445C07F55F5CAEB1EBD9633
038AD0F30E5E09EB846FE9713EA01A8A1A64E7242E13811DC60D90628FD85513
40455542188CCB99FEA5A8C812907EC81CC3CE9D4071A546E489D28849744054
879D44D0C80AD8577715A2AE8E891FA3323111839C79C94B5EF2DDEF7E973DAE
AFE8E947BFF3AC66F6366AA45F719452408F69C2EA9A2AC477EB0C0F8DF38E73
48E781A5566EE99EB64A63D34D37DE6CD38D46C7DAAB56AF6864FDF9F3C75ACD
D22E6EB7E406F7A435573CBEE2A1877ED12FD282917259779A65EE384B93BDFE
CA6E7745AF5F2A60A9E46E5752A69F671AA65E9EF5A5893329F012F6DCCF0A2D
FA42BE71BB998F8CB4D65DB7393A9AF7BA1AD666231FC99AF35AAD790F3DB2EA
7B77AF79D1C5B748544A071B703180BDB2F203D6C8031AD9FFDF4E9D0EBC7415
5A3DA79A51DD743F455D55ECBA1783459942F2886E86C15A61E207125490A6EA
13CB44DB8F4FF541EC81E19160661ACE2D59264100C980B9A8BC362C5863926C
F8FCAF7CE52BAFBBEE3A1EFF1DEF78C7DFFEEDDF125002B1F2072EC9DF5B2E49
BB1A741FD120ECB9E79EE79D771E4C8A262AD0DF0D36D8E0FEFBEF7712443F7F
F18B5F7CE38D373AF6E38A1D8A4F60867AE73BDF79E18517E2A66873E930EC24
BB1CCC7B5123727D6FB13C9447CBEB2604337AC0D8A03AB9A606F641E4AA9BAC
605D7DF8C31F76920575E5C1673BA0504D00C7C8802770F99CAEBEF5D65BDF7C
F3CDFC500FABFB746E9BABA74088EBC7E4B79ECAF88AA57792061A43E8808A1A
F91C9790D78C8B0F09B4DADB668BC13A472D038B2D9B0E62E57D2C6D60EFC067
E2FE4E9C1070998ED7BCEFB8E38E9209E41A68E8E4CCBA6EE6A8A38EFAD0873E
A431743FBA3CB4AB4158B1BB6321460469C619319306F017AA07353BFBECB3CF
29A79CA227FAF297BF2C4F9DA7701525E95D473E38B9C6E4C95E4E4E38C16C12
633851D65B2244028192AC67EDF6A69B6EB2C97336181D69757BAB3BAD7CCD35
172C58386FA4BD669EC9F6197FE28915FDDEB85CD8471E7EF8F195AB168E8DCA
2B6E95E2AE68E4E3DDFE13FDDEAA5EB1BAD998487288272764B032C9599EE930
4D50AB29059CAD5E55FAC4EDB63CE0C6D848E719CFCC25A527C6FB4599501E49
F9E848471F1777DFDFFFE17DCFF8F6B71FB8FFBE07F3BA1665187B55D4C8DEA7
69875AAFDDD85CCCB45FACADD98AA6667B91368E5E78AAA3AF166D5AA6E4E7B2
BADD4A3644A4379B87A75B954948364B8FF9A77FFAA7975E7AA9CBDE3C92D91F
B8247FFFB8248D56B51DE62541EC87CF75AA430E3964D9B2655899DA3E5A8DB1
C59EE954F1BCB931ED74D0AD4E3CA7908DD38EFEFEF7BF1FA3918D9AB739B2D8
E681E7D296FD30080B436100CD804AC65E243BA05BD2831C7DF4D1D45C519046
D184DD039C42EACBE977C434F150310C906AE6322EA19F1C77DC713A3963A87F
929E8C1643369DBFCC2F838F4C38432518BE598C24F18A2E23EBCD0E0F210D79
8DDAF26C49EEDCFC0A6EB1639CBCDE9C70C209F2EF2D8A63DB5D133DB9320570
6B0449456409ED9381C560AF1BDAC236615EA29F639C0102CD1246139AAA2C09
DC9CB220314A488B183292426566E49E649F72B629E4A3479C7EEF3A918CA91F
FEF0870F3D84918B2EA9E7262BFF6B64534E74517D397F744CBF7AC10E8B37DF
7C735DEC8107FE9DD64BF3E697BDF6367A761923268E0145F5F8F8C4F8EA89D2
A94DA5179B37A53B57E7D9AA225B55A2A07B2B2427FBDD55294F79B3AD5BD68F
53A6916AB65B79B7973DFED82A0D7EA72519DD925DBBDEFA8D76A3DFEDB75291
F7FA8DF2B076A3D34E13939D9F3CFCCC5FFEC7FC4BBE7AFB83FFF14B5D7446EC
1523F2F4ED50CB6423058812EBDBD34E3BEDE0830F9661282F738E82D1D95E03
2218F88C5630770EBD785E11B06133B203D94EDC8C75F08CE7E75BF36A81A58F
90B43F7049FEDE7249D2A7520F0EEC5F57D1BCE8B7C71E7BAC9C188FCFEEBBEF
FEC52F7EF1B9CF7DEEEDB7DF4E78495B58520BE031129C4E0CA9A61A865F1089
E9C63B9CD059734C40A9734DA204025617EB27929FF873FB82CEDA689911EED6
9860040FD489394D980211BA43E845C59228E1C9537852207DE34356324A91B0
3C3D97B405E4FF714BAE616391132B7ACD6B5EF3D5AF7ED5CB526BD2AC4C56E4
038558FA90AEBA1A6A1D2C5B61E9D2A5864DC4C0351E3F29803DF7DCF3339FF9
8C9E91074444B0CB6C9D209422559911B248E0F3CF3FFFED6F7FBB671C8D0570
0C3709D3843D4BEA2A527C9BE499F0AF3E2475859CD432B03D6AE5AAB5FAAA57
BD4AD765B8A817887431D4018345B007EF1C0AE69A16EA49279D74F8E1871F71
C4110ED86804A811B58E286A1AB8CCE8245BD680446693DAD3A47339EE69C3C5
8B37DA78C3ADB77956AD685757972C710165FDC3F80AAF6FAA562A21A22BCA28
C89BB9D64A2FCBB59457FED728E851A9CFF4CB876568ACEA8C68D5E66B2EEAAC
B7B83DD2AAB0EC65803ACF1BA9D9D0136645365A641B67CD85377EF7579FFDDC
8DE3E37AF2CC61E75463AF0C5E78FA76A87516C044F39C9060D71CF4B6B3BDE8
190C30AA171A311169DC75D75DF1E66968486FB2A2AE54B6204BB3E7C5DD2758
7FE9F449B34258CE11BBF91FB8247F2FB924ED4871CED89687CF29CE89EA3026
95317D1068FA09361C18728C54CDA9965C2C1C48B59154D44DE51C0889DD3F59
D5DCB6FDC208B3727619141E0B40F7B6DD76DB5D75D55530F435EA36EC68A69D
76DA49069CAE4BB602C7AB57F741C96B660C32230E0879F62991889D86E9226A
0F3585E82ECF4575ACA7C3B02CB686AB78FD73EE0A7884C554114AC66304857B
436F019163F1E3EE33BC5A8DC4D58C30453F61C9B9B380BE3DE8A0834E3FFD74
6E006C9A6F9B58143D12ECF246885956D1DE41E0CFAE8175C72D1C9808F6AF03
E6D48001928A900E9625687C6E608F3DF6F8BBBFFBBB0113844103066B995654
8C983FF9C94FB40CB4CE11FE31B29879350F94E76784A90AF46CF58F22E7E1FB
859EB068E45A70C5C2F9239B3F77D32DB678EEFACF1E7BF8915FE0C84B1B56C6
5459FAB6E2B147D9A5454DE53865943D4514B48E6D8F2EC89B638F3EBC52078F
8D65F3E635D75CABB568612E375AF32F053CD92DB2BC284B858BD41A59A333BA
5EAB33FACB47FA175DFAEF77DEFEB3477FA5C195FAEF0D089AA77B875A941F32
822D044694E0642C39FF355F45DD62086803EBE1DC73CF95FF4750544FA44798
1175126135B3E5389DB084D71EBB98581057FC0397E4EF3397A471B03A550473
0D206681BC6615A70166AE8E211B877CA76F0113170DD3E816C7FD9B6AFBCC16
8C632DD8B21A643991679E79263F89597C275C6C38FAB431651EB7B6F38203EC
AD8E7FA2B7FC204C9C0F76EB59F6A921171EC638B9F8674F52A6E4B9A68305CF
50D88CCBA63393B09CB804B51BA6FD1958E418B24E39A3BD88D235EBD6B9A972
7929C226A1C07E9F91FF0497310518840E5B7FFDF5418119BA64B56505CCDCF1
136E431795C97BD65967B9A8815CACC7C4F1F668E03A747CEAA9A71E78E0815A
A83243497BD15601AD11D14251D2FAC6307C237AC3074CD5017B5F65A12DCFA0
022E1AA8E122E9A44596A46CD21A8B46D67BF63A1B6DB8F819CF58679D353AD4
66C903AEB64A6F2A67DC6ED92246FB325B73A0A0A58625330750D0C09EF3C6FC
5513925FFDB5D76ECE9BDF18E9149D7621772969E9F672A9D754F4A47DA5D5C7
C6D66C9597D6FC759E9818FDDEF255D77FFBE1DB96FF62C5E3BABDA9E40AE21B
9B485B9420F9D3AB436D5ED377A73A9D89C8203CC5BAFF6F80B0685F4A5333DA
81317D5EA3588B047863A3684766F2D99B3783B3A0B015D120415092C2D44920
874CFEC025F9FBC625390057E18A447D30E922E91E1E8CA9C79A7577395D515F
115E2AAA56B85A1EC71F7FBCECE06DB6D946561D266F44E2F84991E0E40E717A
C8F001C8A078DDBC2266473086DF41CB4838C53987DD7AB397536FA6135291F5
A637BD897AD654339CE8CE8F3EFA68230C9CD2D2E869ADF2ECC54CEC75F185BE
312824E6CB719CA43E6545A168490C6904C0CA45DC780AC8F988C6B2A69439AB
3BD4ADBEFFFDEF97174B4F3C94BA331A59DD91D0812B362FDBDC50DFAC66CD64
2BBDE0052FB8FEFAEB6D49E075B0901CEA47F04A7F6BB73AC1C79419B2E73C20
E91B8B53F62C017F407FFA27F0E654C393A58C4F3BED340278C0899C53C74CF1
E5F2AA59936B2BD21070AA54DEA94E2F399B38B5327A934F2AE0A259FBC1FA6F
B2FAB4BB707E6BB3CD37D86AABCDD67DC69A52AF238DBC4A98F72B007AE94F4F
76CB0063B335423DA53E37FAA984ECCE8282EE8EAF2E523765AB1B65AA790A05
AD4907F62CC5DD6C75162C6CCE5FD868B67540D1960E2A73D225A5D62A79CBE5
70A476ABDD698D1669A5AED1199DBF70D1DAF317ACBDFC8E55679EB3FCEE7B1E
5DB162A547138A168C6836E4D3AB432D1BD85C07C6C5F039CF3207948C3BF7FA
C03BE1418055B3CFA5E4F6DC73CF134F3C51071F72C821B225718249FC205CD0
A69C76EEE6CD7E2893755867CF76FC1FB824D3EF0797A447D85456F8828497C0
22217653EDB0A61A2D45E682CE075AF6EF79CF7B34DA7E5293E0131C02C64C22
A398DE2021AB095830C1CDB0E15B1DEE601F755EA4F4D11D62CF99D18CB0846E
86672438415DB86EF8E28B2F36FDD195575E49FF06EC489763B9303D9A53DE53
D1EA8DB1687601CCC970AD6048C9A4D07E6136F53AE79C73741B7BECB1C70517
5C802BBFCF3EFB5C73CD35247A08CE0F03057C03F9F486CA2E67A7E33BA01934
B4343D53600B1EA585C06CD6BDA7000438E90E278CF1A18DC00AECBD8024977C
BEF0C20BA544B90A6B49CFAB47901DB3D34E3B9D7DF6D9261645E53B98AF9F48
D34B82B15AE89608264083BFC1061BC808B3F3E6A18E8B81F358AED21D87A4B5
A30853421B2B152F0A2F274D0194BA95D2AD3666197C9E7ADF6AEA4DB7D5ECAF
B3EEC2ADB6DC6CC9969B2F5C343AB1FAF156DEAA0550511925530498AB4B37A3
ECD20A7F21A35652F1CD1F330A3ACFC6BBBD27BADD95DDDECAF1D512A3DD3C9B
CC1BDD86146CBFFCBF5623017BEEB45B63F38AD1D1C6485B065DCA4B9F239505
488D4E2A1572A73CB859AE83662ED13129ADDC6C8E2E58B8EE1AEBAE377F74ED
2F5E7CEF399FF9CE23BF5C89B53180BD3296AAF9F4E9506BA4AB8B2075AB1434
E390CD1D488F592E0C02360042DF0921AC04149B6E922098CD0E28A9496E41A3
FAEB346FE6D232BAF5149C3FD2840D2BEC88C977944F03AB3B375545C4B21195
752AC85B05954345238611944F1AF9AF7EF5ABFA2AD63AEB5A920BDAB76C6F6E
92FC13DA4823B0EBAEBB5E7BEDB5183A51017BE41916C25618EC03F12827AAA3
54F5A9AC53234A854931942FD5709B01FF55E68856113E195F114527185ED444
5A2CCB958F3F11135A9EAC7E2A60014475E193B9FC345E91C503E18CB3031AD5
3FFBB33FF331C8594692DB704C880358483C14B4FE5945811EAD524C2EEA8B38
83D93411B53AF3830F3E1861ED06074CA5D86A832F668B5228E7EDD70D778BBA
4A73E38D37A6F6DA8D958034BBBEBC3FBDA9F080364A55E825468CDCDF97F089
A61E74154004BD37CDBE4D310DBEA6AF5FB5CCA176C349A898D4180E417327DA
0EB0393A0FE2A6EC681A4A9EB06030553198CCF89807F6E6343D7180C147FC9C
909273F00816DA25B914CA984D96AEF4E27DF7DD1707CDC6B1E3796E6288B68A
CF8BE8430113ADD16469FDC31F9C2AD2665B008620B0DD8AA1B654C448008E4D
913607230C0FBE1F3A3F66815D202E300E70C98C3FF4D932BC2B97FA3D09B84F
AD19A5619E261B795A7B9D459B6CB2DE861BADB7D6DAF3474B4E95347F6C518D
70A9606CFD49E678D5CA7174066DB9BC981694543859A755C9B14CE27565A983
7BE3BDD52BF2464FFFB55B927165885C8F295DDA6EF547465B9DB17CDE68D669
E7CD466A643A4F31315E8402A4D1327E9C3D5124FDB09F32A9E346B79737DBF3
9FF1AC8D17ADB9DEA34F74962DFDB7EBBF7DC73AEBAC0BF463187B458CF1E9D2
A1D6045279DD88C2210EA71207D25D51115AA8816B60BFE1587B6D39064B6373
3600D23F762CCE029330F6DC6C202CCA51A41806404C7378EA56485CABA8DB76
0137E59C9A4A5A146BCC1101D8283C91351C1B60A071480A6CEF1E13A60F705C
246CD2B7279E78A24CEC48101F45798CDCA61064B3B591AAA4295CA1B1967AA0
162B2EADAC662A906820DE9E87FE13C54C952456094450CD406EBFE184134E38
F2C823A59271FDA96EC8A673DE6555F981CD05DDB6268E1C9E59F7DC1DDC2017
46C6B4E1038C1938CD11A862C1671967FB0CE246D2C02E848B8F69CF1E9CB0C6
67BFFDF63BE698636CFE222E413E4752D5C6F476847EDE22948C13B8024EE186
E279DDFE280F0DEC08CF6435C78EF30830BE39ACC56CEA2BE48CCD0BAE0E7715
182E6B20DDA11406AD75B85BFA096A1CDEFBDEF79E71C6195EB15615712B5935
CAE8DC71C71DAFBEFAEA7BEEB927AB791FB5008E3DF65882A5E82AC49A96F7B9
E79E8BD073A98271E3C32807EE217EA85F69CCE55B6735B36F51D7D7B190341D
8E1BE9E0ADB7DE1A6E5A0AE5BDBCA94462C0ED6F4499C0CD8099C0DF459D611E
215A01B2811B2027A2E5A7E745663A061E59AC5308E498F21DDF29AF3B380D0C
B2F7BBB71E4CDA2F7FF9CBFFF55FFF154B0257DB619E2C46CC1CC72F75646AFB
E4D5C29CDA21ADAC377FC1D873B7D878DB6D96ACB5F68289D58F359AB26A17AD
7CA2EAAF99152CBE76BBC963772726B927C42222A0124925D4B6045A3553D698
48FD55DDBE84E644DE7D226F948D08A580DB9DD42AF74E2A53B9F3E4AEE51ADE
9156D62A9DE67E9EF5F262860224CDD4849669158B2E924C723D6763D11ACF5E
7B9D678C8E2CFAC6F5FD8F7CE44BAB574B1ECD80BDB2E07B5A74A835529A20BF
D9DD2EBCF0C27DF7DDD79DFB66536CFA96AA737605104A788BFAA1771897D3E2
C372D2B766814F751A46AA4E9FE82F17C5719F8D83BA98CE60ACE7323BE31CAF
689144EB5227D1DC61DBEA41DEF086379C7FFEF9BABA8E79C94B5E72C51557A0
3BDD9B0BC918E1366E2341988EA71BA84090903AF3CC332127D191121F343C60
A6F4D454F1D97F724E084C0D36966B84BC00586C8B172FD615A970C011611D46
494AF4520F8B2827DF8F61348C398F51C7387ADB6DB7DDDE7BEF7DC0010718EB
8BB78DA39CFA453EDDED669C277BDDE73CE7391A610392F14BB4ECF5B9A439FA
09EB0DA7CA408448E4C9C8E3CDE0F9C1D004F994EE81F6E1DCFC861B6E78FFFD
F723E634BF871F7EB88C1EB7D4D56FA5FBE50BFA914D6300B24F075075665840
9A6E5A1575BD1FC850AB5EDC53C79F6305609A1E28EAD5CDBFD99B361DBC3263
9CC3C9C5E8B7196D8B03275D0546890C8BF6A31E79CF3DF7F4CC5226C0B3E800
4995A38F3EBA51B7FF33D66900051D13C3EE153BB0547C18C388D5CEFA917D46
B76FE06091C7342E39743CCBCC8E75DCBCD8F1FC4473F7B297BDEC861B6ED023
7B52206337BD8C53E6260CA7002926DA106EBDE91D968C587652891C9617B6E6
4537C3624BC17FF0DC6910745136B8D78F91F0311065BFB91F788B59155928C4
276E11B9B152CC01A7E0073070E54165E429976E6C64E05AF590722BCB9CD092
E76DB4EDF3B75C7FC37547CA76C245E589665EC44E7D31A9D80E401800CD9330
EB947D06CB55DB9202CEFB795ADD2FC68BD46D16E359DE6B9665BEFD76A73FD2
295AEDB2D86974ACA5CFF3ACDB6AF41BB9FE2B8545A31273830548A92FB778B2
DBABF657A348AD5E91B79A23CD86CCC94E6AACFBF5AB7EF52FD7DEFB9F3F7D74
72B23B80BD222BA9333F2D3AD4C24909B2C02046D70C90B904EB349B568BD1E0
5477E021B08929804F43EC88EDA791F9F33FFFF3CB2EBB4C17D210D9D633F828
8524D91C17A55A9FBF697A426BE015A1E05E9FEEC5ED942A2A1F1A19F03B18B9
0ED53AF293EA7C6AF4DDCD921379546084C0CB21FA2AAF85102819239DC180C9
58808B9713C3E61477412B6F9E2C7D75F9E597BFF6B5AF4D751D5A23107103DE
19C04B6B9C71B8F14E5C801B5F59DDD1013812B90986C5C3081302763D81843C
3DA9EFA3073C55EF5FEB0C0434A210D31310405EB74765D7E873F34FA59AF72D
0D15194720AB4BECCCA2A0F38093D763A26E89724B91E8937BEFBD175D857F83
FF404441CF4EBDA6BE35AA43C7D04010EB01C34B43E4208A4BC331F58AAA316B
11589179520E73E688D5CB3EE5D26E7500F76F0AB10D3F9D63AABE44B424188D
65CB9649CB7266C454AA128AC71F7FBC3CD48140450C9E4705365ABD74805BB9
C4C25F97EAA6BA96971A27B2578EBBC41D3110FC8B6ACC924452C202DF763688
54F68ECC0B08E1ADB17C157C0CD470AA4BFBB6D9669BBBEEBA0B0B380612525D
A28638855B9B7BF3EEE6E97054F0B222440EF1625856AA7B69D8A1CF439B26FD
50EFC907C78897B5BB19B319A814CCF119C73323528AE987CB322583F2AC54B8
E5FFAB146AB909BB595E6CB0E1B336DD6483CD9FBBF19A6B8D256DB7EEEAAC5F
86829BCDB6654DCC13A071D924BC9F62D36D8E34AA0793722D2B9AB2C924055C
4CB6B2D59507DC6FEBBF91A2DD293AADD468EA4D5692594A37EBBFA61CDEC465
8AA102247DDAEDC968AD982CCB3B97135D0D8166241F9DBF60ED5667EDEFDCBC
EAC2FFEFA69FFFFC57BA9D01EC95C57DE37F7D875A680571D4F45E7EE4F2E5CB
536DE7366A46E2D91421280C4825F573A9FC9D76DAE9C61B6F84A698F5AD6727
09E48DD4AC3AAACAB474D70A187C3444C83BC292E8E319AFFB894F7C62FFFDF7
7749864C6CDD0099F5195F594DAFAA51D280634B7ADBE048D9BDD03FDFFAD6B7
5E7DF5D50F3DF490F618EE6F44CDC4B465C4D6A5BA68442731219A7EA5FDBC74
E9D2030F3C10BF13216842419734E0379B8587E808FB5FE7D110C1DF49F85407
FCCDDFFC8D39E2D1B5980898D8E6066209E9424C901E5F5A87ABDB761C4603C5
18B8C31514F640344FC0405F699478D27281AD5A0DEA2AAB2543B955AB8D26BD
D5A81ABD694096562F40C87A7CDC2F080B4D871973100400FA43B4FBDCA711E9
2C398E34F6D52525642BD073F82534E0E349B168490DB226F3BA19003362F785
EB129DC6C73500135F0AB7D8553D844C387F64BFB24E75B14A5155A3E913A05E
2E19F06C5AEC3A2A6051435EC9E047A37EA23E66B3133E2171335C6168858176
7749349FD3C596DC4D242C33AE05B09BE3A0B1BAC6F1981929666D7FB808DE82
8EAEC6481820E5AE48F6224F35111B16A7210BFECA0F8296B5E4B1DB635896C5
26AB1D639D47E0A11804D3BCD8334E014895D58C6671DEAD711BF54B62506790
3832B3D330020E8D8EC530304D5336A83FB5C5AD91921376FB1DCB7B937D4A8F
4A9871EA962E6633DF7E87FFB378BD673C7BF1BAA3635ADC2B4BC073554C3C51
5F3AAF7BCE18995997274DB80CA9BC5CD6E2319A152F98CE5FA4B200A993AF2E
156DB354C0AD4EBFD396075C349AA9ECAA2447B951EAE0CA094E5306BB6454AF
E102A46A80CA01EC97A1E9AC74AECBBF0DE97BD946CDD6E848675EAB337FBCDB
3EFBDC5BBFF9AD1FCB4B713A5D8F4FCBBCA74B875A56157E0CE25B07EB5B8957
9CA454D9CBFC70F8E564956BE00CC8F4CE77B770B358B3D958A39E50B70727E0
015DED6CA0AABC26F38B4DD109EECD787C51D7F8EB8ACF7BDEF3EEBCF34ECE6C
63939F73DD88F58D1039B65CB76E57ECA7C60870B2073E3997EABBE44607D0C8
1DF31C2211593CB7DE7AAB26548A876A1923DA181C5F4E5F41B2AF93ACA85ECC
B5968D4C1937D5A0890AF502111C2465A323B5DE74CE0B2EB8608F3DF6F0B516
2F5E4C016E1A02A6925004A58F35A03B912571E69967D2BEC95E7B51D1C26CBE
F9E6BA19C962E087B64BACC2074C439D5CAED891471E197BA14B6D9C74D2491F
F8C00708BD380C3E9017F727885D368251C7ECA32F7DE94BBBEDB65BAA8325FC
CA3BC54E8CF308D190C2DD89DD67DD430230B63B260D38DF3198E11D1A090E3F
F5A94F1D70C00114E7E008C67EDECDAAD333615E129034A820D0CD6949D968A0
6486FEDDDFFD9D7ECB2AF5C00EE09C4136E942BAE8473FFAD1FDF6DB2F55B623
A71A004F30E084E2296274357984E622A2F1D1714F71969CF98E1E9BF311595D
09C6C6D7C9D96B08015323D005C16B324EBA368BCCA65EDD95CEF07EE708B059
6D36F12DBBC92608712988BE39F2BCF3CE93456BA0A8B9D0ADF93C8931D26626
5736A93C07CD85E94162E04DA7A25E2E763772B239D2FB38121C9F3106C053A8
8F288F94CC954D0D74CD135F62141F5FD1EF5284D42852590BA4ED3C7FC1D88B
5EBCEDBA6B2F5A7B9D35E4A44E4E48A2492F4A4337578DF79C34E2C2A9AEA340
01C7F63E180759654C9455BCA5AF3D59160117FD56AE3DD36B36BA8D66B7CC04
B7FBAD76CA1B1261A56296EA9591D0CC4B8074B53A2AAACAA2B16ABC54F56581
7251E9B9CAF14D79BBD968F7FAFABF6C6CDE5AEDCEC2D2D996575C46BFC7AEBF
E1A7679D7BE38A1553B111D91C1A01E4E0D3A543ED5E7BEDA56D76EEB9E77ADF
4A3AFFD55FFD150B71B8AFE2C00B5DD2ABFB1EBAF376248271EE70975D7639EA
A8A38CA18551E4FEFBEFC756D02667F9620513999F03800DAC469726FB7BF6D9
674B640F04B5FC8A0DE63426D282DE24114C11613E68567E62AE662387A3A59C
824F83ECD036233889F444CAD8F7BDE8A28BDEFCE63733C2D24CAEA8C1FDE23C
035E1DE83668AD0C0E201C4D9A00EC581EBAA0A7DAD036E0564A5A23CFD4004F
7570B551370048018FCAFB3FFDD33FBDFEFAEB4D67E1FC881E8DBB925891D245
626EB2C9267A7622E4182B7164ECBEC760DDA69B6E7AD75D77693041CF3205B6
5AE8A9AEAB90F39ED1038E1F46598959E016055C9D963ED17B4BA18F16F746BD
1327811F543335A34991D7B5FB886CE2E79C967E62D16F86D730226BA811D0DF
77BFFBDDFFF00FFF20BD62DA0AC4A005BDE3CF3AA106FCF9CF7FBE56914EA2E7
FACBBFFCCBCB2FBF9CE6014821DD3C1BC1F5E8C6FA211FCCCB1861B303E83963
2CE06E731B0376C421871C2277C26CDE03A68CB33C337AC0DC0F77480089A267
243C2D9BACA508E7D8B6D018BEE0052F904C0381EC7B76923E5AE40C17BA0384
291A247690649D906A31FDB85E040F8C0FC745219DE73E8C8CA41B23EABD26FD
473FFA91ADC6180AD585649EDE77DF7D844C1CB3E4315D5268E22303AC9CBF88
A010EBC78407CC04D89F9822BEC92BFBB4549392D193FABBCEBA0B9EF5AC75B6
D976C99A8B162C5838D22FC6C757AF9C98589DB3839A1D2BE066DD9A2AD5696D
C6CEDE61B5F42B56E9AC51D61EEA878514F0A4F651D67BAC647E4E937973B2D5
986CB67BCD120E9DB53BAB1A79D16A96CE7115884EF67753D6ECF55B7D29E3A2
FCB02C1E4E79AFD003744647174E4EAE2A74739D75B2D42A4A6A6B793F6D49C5
9F3C38F9B193FE65E5AA293423EB00D9F1B4E8504B5A916292811DA84B48464B
A4EA71888F5169A037911C801E50DCA771A1BDBA1BA383DE36CF67CBD1623CCA
5FBFE5965BA49211D06E8998EAE2C8A9DC7FA7A32BD2C516FCC8A73FFDE97DF6
D967C6844A9A9D501AD341BE912EB47CF9723D08B54C00DAC96659A0E3FFE128
B3C361ED01158886EB5794EEDB6FBFFD35D75C83E5C16818AF84018ED6A73E81
7961482DAC755A7DB8C5165B5C77DD75FA612C8292E6FECA57BEE2D4944E48B3
F454213F77DD75D72BAEB8E28C33CE78D7BBDEE5A6AACE3BF24FAE089A2C92C6
44794D916556178C998C09DB0253527FDFF8C6376AE4F5ED2B5EF18A2BAFBC32
859C992FE78D0CF88E70623F5030E2FCC5BE43A9EECDCE72B5F1C7F1C31E3061
BAE8011735B32E260249101ECDCF1B812666C358B264891E1050218A9F136A4E
BFF39DEF68B79E70C209871E7AA88E74D7C8A883B39A2F4803F8C217BEF06B5F
FB1AF1218CEC54C708C1EF10D220A6FA246EA69A29DC2C7AE741C200D503B10D
C7F609CFD27231D5DE185F99F7862BA20C34087FF4477F247347E7D4998991CC
A88063F9296FFEE99FFE69B7DD76E3EA5AEA3ABFC613AB4E27D70C025AA4AC31
D6B666439078B4830C719D61EFBDF73EEDB4D3DCF3D479375645F4209DEBE12B
077807D643B36E796499E62CAFA130B4DF767609CB0C346B3FB4CDB03A0703EF
3AF2684AFADE900F203C9CC92689C6A603F6AFC77437087015D06DC67582AC20
5DA5BB925946CC1F68823D604660CAA2D1BA3CF6D86331C983755A0E4069E7F6
C17F4B193CE3399B6EB4D1461B2C9C3F3636AFD3EBAF9A58BDBADB9BC8AA5845
37F006B06E383F4B9CADE8855E8632FADD32449CF2D4AB50643D0D8114B0B4F0
A329EBE76932CB65E04CB43AFD66AB68350A8D92FCE066A35F9627E5FD526F47
7F37B5B3BCD56087972A3DEB158DBC31D66EAF51F427522683A55D9E3E95AD0C
3B236332B056AC4C575FBFF2AAAFFDEB132B57B1569E5E1D6A0932A3E38D7EA2
6281BE75FA1C804CAA19918CDEF4CEA4E25E076B0D1C74D041C4FA6234CF05A3
A9A6EB1B7EE5359B23B150B7321CCE51F965618D33E7F64DC381CA34BD7B4F7C
616AE8595033A08841A20D83013918BD054E92E43AC05A175F499DD3D413CBDD
A5AE76AC2D2EDD7306E16B265BCC596D66594EA0C731803492BA3DF8074C8EB8
F1C61B535E625B9BC104E343DCD232117562B4AD4E480ED8A8638F2A363B1649
6495910E264F6F2979F2C9271F75D4511897C8743044033DED53ED1EC1CBC600
82CEE33CAC1CE0A3745C4F558CE798638E39FAE8A31D099C4301F3687620F457
3B51AB8274067E89B91263DE844FFCEC364FD99545A8FAF375790A2B60E7A7AD
8FF5389ABE2C54D6D121C3FC53D2F41E43ED38F40DB43CCCC8F1C71F2F65CF5D
E900DD92A6DB5C13CE8CEAD1E8BFFEBEF7BD4FCA0C28197391EADC30A166EF4A
9E7DB610B4794329B9C1561B605FD1E2FCF18F7F5CD4F423697A2D56B3EA0E44
1C7B38043D004D20C3A8D7B9E79E2B0949CF1203D0904B26D6B0F2039EE23C4B
36BD126720BDADC1D400CA37255C5454FD2A682D85C2721E8D5DEC3ECAE61547
E43ACBF6DCE73E578FAF29237C95EAE8916140AE3771A7732F30DBA003B2C845
A1A4BA209CD185EEBDF75E6E0649926AFF0A1D5CAA0CFDEFC4134F3CF2C823B1
6151D46552EAD15F6AE42A9C75D6EBF7C646D3669B6FB2C5169BAEB1C65AF3C7
463A9D66BF98E84E968E3C141C8FAD5A61DD800246210DD74BF166A2585DFABD
DDACB47DA58DBB13BDFEA4D65AD65F5595F04EE48DC976ABDB1E91C62D73CFA3
235A4992A1FD76B3A4A12E81D3C1DFEDA746AB312295A46356AE2E7B03371BA3
59BE502BA1D74823A9333EA1792A39A5DB23C5A245238DD6BC477FD1BCEF81F1
7FB874F9F7EFFC91B6FFD3AB43ADA3494C164463F870EF7FFFFB972E5DEAA88E
C957BDC2CE3EFB6C799C94219AFAD13CFE29E44B526544932C9C9B98330578BD
F779B36EDE996A7839506D9026319B028622D5C037FB61C479E608657BF48C1F
713C6340D667A1AB0F73440A2055CDCE4C7C6D5C953501760C660DCF68745B0A
D00CBD34B092B9DA6FD484E0BB109FF70D58D6D8A68186330DF5C6F17A23BA4B
C0D3F9CE543B82607169B4E7042DFD22C12113B925BC61B17EF8E1877FFCE31F
473A9BB234AF3B523BFC8B92E33123CC9B97051CB17A1C3E27B318371A0E3ADE
9B8650D0FDD01BC7262FE704910BBB64F435534834384EA04796A69796FDE427
3F59D41C70BE4FA391234439BA045E308C333F74C49EF89386547F5DBB05E281
782C95E23AB3DE6CBEF9E6D216941D7FE0031F9024912E7704DBF1E4013F8CE6
C4468DC41226C647E77FDBDBDEF6A52F7D89840B4F3123088B93EB00C93199D7
F8151402E132422E4B2655EF3FFBD9CF1E7CF0C1FA0ABE086E6C2004ED7DC423
501490AA109D7EC89AE78665EBE82B1E8DA9895CBCFA56374660C328C5A2EE13
1A9F37D51E8B1E5CF6D01D77DCC1D4100C0029A9F7AF79CD6BBEF295AF78D658
12AE1465B7B292F17423E75DAABB3D62CA20948653391CC653702ABD0C60D469
A930F44A8693A0EC04B8D146B8D4A9AE0FCAEBB6A15E96599A5E406201DA94F6
A3ACAD6A41B87041FBB95B6CF2BC3FDA6C7464D168093149DDDEEAC989AA5A3C
2F1D8BC7279F880A186F03316ACF2F0577A49B5616FD92C7AA37D12B27626252
CEB4646FABA2BA941BD068763BED6E6724B53B59AB994B664AEFB69A851CE266
DECDB3222FA6F9BB296B359A1DFD4FDA3BCBDB13237A8C11E95D190A3A49A3D9
EA755190AB16CCD7C16BAD1E5F4BF2F65F6FFDC5A7CFBE787CBCFBF4EA504B0B
55560C19595003BA81254B967CFFFBDFD779B6DA6A2B6062EC3D7D65108A4D4B
1C0B2D172D267D65B645EE903A7ABA5A49B4CDA680539DE4709EDB380854024A
4E32912428B5E0287B8D1B7965C2FE286027CC7A75EFC8D95EAC2E0437FEA205
6B0C2AF072E16614B2BE3D0E4037A393E8972583E694534E91589799B5FDF6DB
DF74D34DDE66A9F2E0295E2206404784BC661C8C7CFD032F1EDF1018C9BEBBEF
BE9BBE059480E38248F16B7569166027D000B230E655AF77BDEB5DB29E11C4B8
A42652480137CB15A106D33961DE20270D15062E38EC548E30BB3F414C4C600F
E1B6F2137AF4D28A2ED50DECA8C1352866C0ECB034E78DB15791D5527FCB562E
2B5644FE64403A780F66897242DD5E0539AF54599F14EE4B17EAAEE466484933
E603109B1811952ED46D102A685444E56C1C365D0A2D8475F58F7CE423279C70
C240B38A2C101EBDFBDDEF3EE79C735215AED7451F7CF041DDB07696DEB0CDED
A91B00E5EA4402A1D132B6626ED45D4FA26AB469A26FF7DB6FBFF3CE3BCFA5E7
36B50D4866D6480EB2F0185B620F34F4CD86CA6608E4BAA80C4BD1D0045C4CAD
64424DEC446EC036E28089E9CA9FA2E6A6400465753B26864B238CF5A00B1D7B
ECB15AF6687DD070A93685637D94878218000A5867E60E07F6A373E4BEA8A5B4
5B081B8897D72DAAF05B8ABA981301A8BDACA190ECA56ADF752206CC7A104A1A
160AB6B833D4C9949D9E8AD1B1720574278B76272D7EF63A1B6D2C09F38C858B
4AF535A550FBD5DC5463F7F8AAC78BBAFA985219E2E046823906C5584FF65655
A2B65F5E6182247125474A82C97E89BA6A6BB5A5D131F9BE79AB9535F3879A8D
ACD5CE3BADA2553AC1DD546880FA2B5616E4928BB25F4327971A96CB98B71A9D
7E2ADA52E8BDAE9EA5373A3A2E4B256F8CE5697C64745EABB968BC98A7B9BE63
F92FCF3FFFFAEF7DFF1EDDD4D3AB43AD660AB00C6681D7B4719E060BE0C1DB2F
240EA9B3C5A698C64646AAA0341D9A9FCD4EE8C1CA7104D57B9ED019C92ADC32
E0391A31A010BDE9AD97F3D0D382F19FA36B107361100702140D3AE3C118CE24
F20173828104AF4B9CB351F7AD63A1EA1EB45DE1264B017FE414BEEF96E9D0AC
39C94AA71AE3C5D2106CDBC36B7446165A48B9D2DFF66B31F46279D01037052C
3A10219DEA80030E38F5D4530DAED4A4EB5689A39A5053230F830A71171CC788
3A248E65EB7038EC195F047E6CE65B02CC062030F1857589D5D86EBBEDA6AD94
552595AE4B7182466F3465EC50893C6C4D07DE2C67EC6319EF4DF412CD64BD1B
F9AD52E8A6EE15DE9FDE788E203CCC3C3680CCB74C93533611021609A06FDD2F
287AC079E08806B4C12642E813F624974C6A5CA3A15D2C738A3E13B1DCD1F616
75CCD86AFAB9C33C8CD281071E78C61967B836CFA60CCBEF2D6F79CB45175DC4
7906427464DC190152065E182CB9BCEA61E55B9A6D9D6066613778EFF015D3ED
401AE68E33417C1ED76A4447B396FC20D1F7639A30A7F8D0E1E2588ACD859015
FC24E2C64934409D4D930603B2B8BA8B9DD85031B5CFF3C2490727A8DCF7A976
6396747A98329EAC95216D362207ABDBEFA5050B9B1BACBFDE061B3EF399CF5C
6764B40DEAAABCD15E9500A8C09F13BDA92416F004421C8DBA5DCF2C0A385558
836EA5E6FBD546283ACDA26CBDD028F937A4803B2379A7D36837F34E7B4509C5
6A69708B56495129BD3A21CDBA6A5C039D9755CA79A38255B7F2EA4DDE99285D
F15647CE73968FF6261FD1F2181D5DD06ECDCFB391A2DFE8771616FDE64F1EE8
9E7AF2D7977FEFFE55AB563F5D3AD46EB3CD36B7DF7E3B7136A25EA8B7ACA28D
D4918EB118D700565927F7CDA49AD6C74923842CF5FBAEAC705B85811E15F1E5
449A0126B1C02926F6D0795EE5B625BD930DC0B1708C409EE19785B5611A8DC0
CF1E932E697A20DAC63E9B0A772AAB4801E39E9140DC76DB6D6FBBED363685CB
0C58CFC8D9A2EE859CD59C82005CC136EB57D15276D421A6FF2DC5ECC75816C4
570A0C44762875ADCD36DBECE69B6F26F2865B10CBB424A37557EEE7CA69DDEB
D0190A2750F0BC59158C89019F968FF974E6E1F872FD6E445CDA7B98F1C52207
51E884655635A4FBF18F7FECB6C7265721EAAB2762A6A2D3EFCB799460BA60FD
3308C64C5963C51014C0280C5C820AA4E1FB816A3B1A46006B639131B74138C1
8101AC5E24B2F52E404830EAEE2191EAEE49595DC0E6C16740EC04BFF0852FD4
BCC78B3A1002BF0A387CD7313BAFE93310F4423E98815CABE86FFEE66F4E3BED
B41915B03F61937A4CFCF89826B4EE880F3BF0CA028395A69E8831B158DF8CD1
246E9F1513C99A47C8E062E83832AFC51D14778D394AAD3BD9CB92B7515CFB24
86CD1ACBADAB4BCECB1F95E1AB3398F29A911F600173562B5569A322C0D47586
2C92AB7950CA47EA69561A7AEA54A4673C73C1861B3CFB59658FA945CD569E7A
75EEA15F5A58E355D9A21430E21EF80FB4992681CA6AD62E8B1B692B56ADD477
75DF53818E4E855D2D7B1FB54AD5DB6937DB65C45BD6CAEA4A01E7ED568982CE
D264EA4FF48BB27AD82679236FF92ACDD6CABC59D6E18D74E6B7DA63DD89271A
CDEEFC798B3AED8559DE91EA6D8CCCCB9BA3FFF1607ECA2957DD7AFB7D3FFFF9
D3A9432D3786D396AA0C6B8CEAD887C645E62AD8ADF2CB698C4156CC8E4E39B5
8B16D1ECCCF6A3853E00AB34FB0B13DE491D1BA145A85E30228F906051B782E0
1EB002B1A09DE38CF08D19F7B0B3AAB25120BD2AA6F3AA47B0DB8C27D13DE8B7
9A4DF279286013EEA7D0BD985744A839C48A29AD4F36DF7C738DE1FBDEF7BEB3
CE3A0B6FDBB815F642AC0B1FD0A9718886055FBCFF81AFB83A4953DB52D0E07D
FEF39F7FEB5BDF0AC68A88B116861E07B9EF4A391B7F9C2D55E01D249D0998A8
2942D6CC115A1F489EA500A69DF17873DFBA831B56145171DF8CF10408E8888E
199894E18172C51AF613F920245EAA3447BF26E2E0C3386BE892484C31FC80B6
A42129634D1212D38063D0386D4CC47EA0100E2A50563B09266CE8134E38E1F8
E38F87E44477F5BAD7BDEEB2CB2EEB55ED9234087BEFBDB7BC583B85314136A0
36008850CA5F54F45E8CA17D470E460421649CA81A98B898A98DDC61200C4C1B
39DBF2882F1380A43AE4107D03A0218C5B2CDEF55C3398EC59368E9E05405C9A
DE9A37BEC8D391F6D23E3DFDF4D3D998EC8EA38E3AEAD0430F6582C852C37FA9
B3494CEDBBEFBE279D74926B469C2C67FD10FBC1D64420E3EF9A27BC08DDB281
8E96EEAE01B190FD1ABB3BD9D329F4B37EAB99D6DFE05952C06BAC3926B7B6D5
6EF4266AF6D4A2146DDAA0657EB10A72E2FEEAD641DC906688567C30E0A71470
AC50D2B49629DEAC6A3EDA6976AA7A8666A31CDCF6BC154D29D8765612639539
E0C9544C961C1C79B7281570AF52DBA5F32BB7BC0A4794466EB32D6B60C1E8C8
C2A25C31DDB1790B473A0B9BB9B46CAB68E8DEE67DFF07BDCF9CF7AD6BAEBD65
F5EA09CB2F3D02722AFB5FD9A1165D8543409CD9ABB351F5398007C0EE26376C
7434F214725DDD9873C6B60F74FC1E7BEC71F9E5973FF0C003FA27C8C629BAE0
59646E446946FC48162AE1EC986EB9E5961A0A8D8F0F0356E6F2761ED0FC3208
08378DC86A6EF7196FA608D55C2928B96C4E5ECC34048A890908BFDCF80F9B0F
831D316D66501D2697140834FCB78485E886E6D0747C8498631BF0DAE320CF78
FFE84EC394747E7D420724BDE433DD79E79D6032F174DFFEF6B75F78E18506E8
699031DB23EF1B1DD3B28AC3EB95AF7CA5DC2CAD1C0B7459242F78C10BBEFEF5
AFCF2658876F7536EDEBA94774986A98E56452E2888561B13998914FEF6834E3
8BA56B34104B28D5C699936E595DA909AC264611F2E904A5D9F4B2054765230F
94EE5F52FEE0830F96D46679E84350693267DFF9CE772E5DBA548BE7924B2E79
D39BDE84D9A715E2C25F4A0F48DBFB41004EA6DA6A890ACCFBD7D364BA0C0742
B4428091EB5AF271CF3FFFFC81BEC57920B074E9C1F03A741C3BC25674AA1D77
DCF1C52F7EB16C0202C83AF38CC5DF7EB9533D7BEDC3D58B9DA5A1D05FEAA3E8
C5646BEC94534ED97FFFFDB5CEF5AD04A3CE404899C9457CD9F44F4301B068FA
E824DA381A52D4968154C423B5FC1CCEA463EF165B6CB17CF972870C531DB934
DF994BE7699B980239092F902E44A149ED67A92664304D3996543FC91CD35817
F3E78D3E67D30DA58047C74A160BE9C58955AB497550C2DBABC02FBFAAA028BA
BC3D60C68293474CDDD45E2ABB164EA2801DB02A8F21042DC7B1D9AA98A2A77C
E8F6FC47A480B53DCBBE848D92143A2FDB0697DABA6A7D58B52C6C35F2923544
1265A2D1A243F8D8E8BC850BE6AF2933B16C8DD46E75DA6514BA91B735CEE313
F36EBEF5F1CBAEF8B75B6EBEF33F7FFA08CE2E82A05FB7E99871E9FC4F75A825
330ADA486F64BEBDF7BDEF85105F2B09D0B509318C5B01B0236DAAEB9285A527
287D12B567B4AAE46D132A71A6D9CDBA69C307F667B6BD64E2D32808B29AB88E
354DF8851883E5949D9298598C9B162494A119C3EC22C3167A3EBDAF5CAAFB93
CC269D7FF6B39F61326AF4E02DC286C59B617E2DA67B1591ACD94B3090A38096
7ED2080F50C94BB21C73CC31518A0D8872870A862DF719EFDC1F52BEA201A13A
6E38FF4D331997E8683C65D2E92665FC9994C322DBE90370702803E2A27AA3C3
504B73D09CA521B8C0B03131305FA9EE68C49AD10D00118AA5F35E7BC085EC22
6735F42F9FDE26CF77620D6D2F8A6D85742AEAC65FFE395177CDB8EE6180BF62
E0013D894E2DBB1D0266161BD03D7119370A96D004660B00F40429AC7B1EB37E
9C1F344E8AC2B654D58E3BDF4FFED8B94CC7CF39DE5159EB6CDEE8AFE6D141B2
A2C681DB154933D5043AD9E49D4594588F4C1823223DE7068E009B02B3525408
F318DED07BE4950ED690EA60C275A895BC629AF4D3E1B0C2F24D5C3D1A552984
97D0A6A673E14EF4575B69D9B265C0D709E931261135ED8408FA1E655CD4A553
A96E54F5EA57BFFAD24B2FD54976D965177932C4272263C9938E44AA6D190241
AE9A2AD55555F6B9C6A2855B3C6FD38D375A7F64546BB4D7686693ABC789D115
BD3EEE80AEBD72F5143D21E91696635693613A19EEF968350AC01A9275A5E99D
A6D6773F2FF23A0BD86E5499D78A73B23DFFD132B5DB4CADA69CF2B220B891C9
102E1A653552BF99CB33CE3B6DA9EBF2868A7EB7689409989179F317CC5F63DE
FC35A577758EB2B97026A53EDA6C6811CF7FF4B1CEEDDF7BE49BDF5ABEFC8EBB
FEE30199102B5C054FA1F7FFC20EB58C211369F64AD440BCA2DB7C9A97F1CA2B
AFDC79E79D4D2D646A492B6C76020B48BB9A0D7CC41147C8548FAC4CC32FEC09
4C6F148F0D912CB0CA8177401940D668125DC75D6713D03C1AE00BC67F20A758
0CC16B073CE0D914808D8314E01EF66906DC775E269EB53CC2C7A593127E3020
5E549759EF6918AE7505187EC0974A3375908D3EF18C124D7AD778DA54B5FBD5
DF9FFFFCE778C31225900010A03614C8624EF681830DE4AA91F286E81BD6E45C
695157A6CE365F337AC0730862F45FAFA68474C990DD0537028985378E181B37
976672D736D9649397BEF4A5575F7DB54649A62A65216053AC80FB81761140C0
409498C4F640B220ABA13DA9EE580AC642F32B5749C690AE65C8A4EBBCF9213E
9004C25D77DD05BEDAA925AA8640F198038405067604A19FD55DB666DB952848
20B8F4D7CA6A881F46212CB3FD9A0AD771722FC5E19D95424C2B9AB636374DCA
91A64BC5E117F66EB44BD82652811FF8C007C86002D8D40C921A43E81138E4FC
44A4FA752BB37EDD880917C5698548F2E3C7A11F497C3A4055BA258968F37939
FBB6E5965BDE79E79DDA53F8DC038F83A603EA916A232F5525D72CB91817847A
9DF8E554D884E7C11F9D122B453F6F94CD8FD65C63C1922D9FFB9C4D3694072C
05AC0F7B13933870FD6E455B532DCA896E3F22688C7F8B21DCACA647282F9F43
FF241DDEADDE8043E9772B75DB280F2BCA88B27ED228699F1B6DADB9B20B61D5
8CA1277F57DB47DAB739B25A5E72474AB5D39407DC6E6679D59DA9D77C4CEEEE
A85CF1D1851DFDD75ED86ACECBCBCE4EA9727FC75675E7FFEA57CDBBEEF9C5BF
DEF8BDDB6EBFF3DE7B1E26530B8D8EE6788EC4A19760F6BBED50CB82C399D6CA
D0FB43AA17937ADC71C7495FA6DA00679B61450255309501115D33CD0E4048CC
20E3B2224C07A632BA6B04877B81BF37D5CCECF2CEB59168674DCD8647C69134
7765994D8858B4D912B21F90CD5E1CFC945E7A16A3886D94A49042738EA75F37
FAB69D0EB794078AE54D8970CC296A30B52135D4CE25BB65778C92C55C6954B7
73DB10B86B380A0C8B2EBDC30E3BDC70C30D29A43F2D678B1A0058D415B7B085
E078B9669DD568EA8F7ECD3164A9FA5F86F487EF73C6CF31D38991CA5C400A9B
4C23AF7B2AF8E4B84A6862F6DD1CD6550ABD2FED53026562D6D2F41CB0D170CC
AC157F749107AE682092C92C535DD2ADC1C42763BB39C7A1D32E5EBCD884F018
A908FA934F3E59DB198031E97684356BD2B84EEC129EC8E45951CD30E94E6F19
1B48FA83392D2A460BF7B74835D55736BD99F78C20AC683B6635261CF852AA8B
EB18D5390CEB98E541C2681074CF10E2EA546F7CE31BE58140660E39AE4EC818
EAB635C83026C5F804F4BD9E9A886CE7454481C856AAE255FA049257EC7B7604
311E5D826C8E493F525D3E4470911977EBD5BC6EE951D4DC3EEE9098EA18731A
48D231313A08E960A84556161BA57E4FC262F48F966CBED9A61B8FCDD3922DDD
CDD4C373EDA280F36ACA578D4F4639E2C51A29B1F240C1D5CE39A662C84ABD4A
01571D05CA29ACC2BF951E6D48E94ED13E8F979F17DD2CEF361BA5026E360AE9
E6D1854FB43B4DD94BF33AED4A01E7CDCA69EE8FAC86ECADD599D76A8E351AF3
DAAD79CDC6880ED178F68BF9AB27DA8F3E9EFFE8DE5FDC70C31DB7DCFABDBBBE
FF338209C44835DF33F69989AF8873CE7E271D6A7D09B9ADD86570A76045B186
226CE1139FF8C401071C10179FDB90591C9036061B52D434373C35500592CD26
0B239C52D4358BE68561EF99D528124AA7CA3436CFF6EB5FFFFA4B2FBD543F44
E6BA9FCC6C1BD514BB2EE919683C926682DE0CFBC133BEF4EC2F7AD18BBEFBDD
EF122AB077E8671C00469ADB484FBDE38E3B5E79E595AC16FB4FFA2D06900300
EE2520E9A037EF7CE73B4F3DF5D427732EE12667D4C1C30312FF898182B0466D
6888962E5D7AE8A187E293D93C32042C96C0467881668A5C32211640BC965FE6
774C75E276C6DB9B71CBCCB18FD871FAFBC77FFCC7321A34B35AD8165E96D111
18E8BA612B66E36687E73A1A5878991193952A055CD42868FCB9CD36DB6CABAD
B6D2124D958767944C9A2949EFA5A87B204CAA4B98F4DFD446596847CF5A7AD9
CB5E76CB2DB7E061F3F900EBB80D3B9613195004054D3B6865064ACE91E1A22E
B8726721F098A8103F3B3E2B554F8E3F1775C92F56F58CEB2D7AC0466071368C
EC54A7E48737E9C08B21320ED4528E2C9B7E8B1F098C26AB7A5F72A4A41F311E
A295343EA26EE53DEF79CF673EF31932B8D813CE32A45037982A2D68783FEB59
EA5F434AE84B47FED55FFDD517BEF005DD83BC05173AC38252D4F55D6C0783F0
0917915274189CAD946AD61DB215D2B6D0C6951EF04B5FFA529DE2DA6BAFD5A7
0068CBDA8911F925E3A9903B356FD3CD36DA68C30DA4CB26BBE32323ADDC9660
15822E95B2044DD1B765DA9FDE7A2CBAC576851B50394F459EA78EAFA822BD7F
A67CE27A1D54E52B65D32439C9E36573A4564F3A785EA73F3A3A327F417BDEFC
76E904779AAD1201DA4E9D15ADE648BB3DD66C8C3653696636AB1B58DD2B1B22
E5CDF9DDC9CE638FE7F7DFF7E88DDFB9F3D65B7F70D70F7F5129DD292CB7B64C
5D983F039AEE7FAA436D649D25744C7F3A93F2F35BA8EF74693ED7F2A2289935
447513794D0A130989BBF33157610303E5A090DC1932DC822C14AD120DA3EA80
9BA7694C560194065C46908A2E146659CFA180B11F2D7FD1FA7E5827934C40EF
FA9FE1F972A572BC7F8DA43B51463E9DAC2E3D8C51AC483A4127A254FB04B638
0D3B27014F68D197D31AA02E33DE9B734B385B594D1B42E47F0E8587794E5E1C
5C42B36E998E46A1DE174B1C95434421AFE859962C59221BE8EEBBEFD6B71AB4
BDF6DA4B134734D2B138B48EEB44A1A001DB6F42EF54873151062C511B192ED2
4BD32393B895F86A444A1867C283B3096EEB18EAFA5060FAD01E5854D879A0C0
8CA9777DFEA10F7DE8F8E38F4F359F2B5744AC1395B15D35909E1F8EC9175575
32358144115CDA8E0AD4DFD8A456B2FEED6F7FFBB265CB88276B21691662359A
23C0DDBAD5A92D5AFC04072D186DFF3046E9A17F3FFAE8A38F38E288E73FFFF9
D2F7EC350858C0E561BD0D136F35A6F7BBF583C7ECB20339FE2AA66006E8E5B3
1A526E1887533F28B0F5D75F1F779312A654B98CC840D0DACCAC1E4AE721DF7C
E081077EF0831F04A28511A391D457EE3BE238B321697E40BC0BCD5ABFEA09ED
1400E10472BAAF7CE52B2FBFFCF25413A815358E8F55E11C1359E7E8B039066C
8518AB3934E6BA1F5DAE0C6F6008907567C808A3AD9E182FFB0B6569AD35E76D
BCC9861BACBFDED858698D96BD106CA75729607839F256B31F5E56C0B6BEA3F6
2DBDF246564FED933AB880D96A9A029E52D2BDEE78E97CF77B459AC8B3F1BCEC
D3D06DB68AB196346A6BFE8291B179ADB19166BB845995A9ACC6BC89A6EEA931
9A67EDACAF059A55B1ED62B218EB8C8E65B914467BC5E3AD071F78FCA69B7F70
DB6D3FBCE7478F56CD4D276B999ED5EB6F066490DD9DFEEFB043AD696530BECC
F26A14348B0CFDE473A247CD3D1B85BE768B4EF2B6B7BDEDDC73CF6501B05E11
E892115ACAFA956B438D8FB5376CA1EC08ADD964B439F598260AA03D1C8A1364
1685D4D69AC34D4679B169F34077E52DE4C4A71F360BAC0229F4D14BD3E35496
26BD407C9FEA082DA2C46365E1CBC963D89C147BE49663DF7266B72CF54F481E
231170328AC0AC6B12F2C8A890875E58338E4FAC138D050FF100C7D2593011D9
EB8E14CC3223068ED2107DC402FE59ACFF718A84F827AE5B6CB2691222DC5CEC
B608D6739894C5D008CD2DE636C874695D62871D76906B0BCF25852206E94417
B098FEF2A962668726F3DA4780893C746665F179861307066C923F461398D0DF
015EE438C58AA94EC4DAB8249EE9B9B63D670B2C1AE80E7E0E8F8F7E08AED0F4
D7D6139C241AEB1AA277BCE31D975C7209E14F4A28FBA12FA48DB668FF51B48D
B1DEA8599D31F5F05C49BD6150F2508DD0DE313E1DAF819EBE9A085927DA0E87
1F7E38403CA346226B90C79046A55A8AFE7CB8E8193903B591349FBFE266A059
E5066294682A585B8DB65FC80746C092900D15532703F5E8D8139EB8A54B977E
FCE31F2FC1B92E71D3A8C915FED6B7BE553392E4A9E45E6EACB168FE7ACF5EF7
59CF5C6764A45D762BCAFBCDAC8E24735CE501B746A678C323A3420A1D1A4CCA
C1E7EDA60DD22735EE93DBAC7AAFF3D5BBAE0C795767EDF67BE3291F6F352B0F
B895465BE39D4E4BEEEFBC79AD9191E66885FF2AA11CF3FB8DBCA34D5174B312
AF4DBA3A2BB2E6BC567B34E5F2FFE499B5FEF3A7AB6EBDF5C7DFBBE3EEEFFFE0
E12A88E11E82596D2E3DB9F3A31448BFF30EB5598D574A73A28A065EC71E7BAC
8C44AB2256C949279D74D34D375D76D9657CC89EB4DE7245A9E1F11CC0CDA0F2
AD860708F47D937CE20247040DE7FFE8473F2AE7E355AF7AD577BFFB5D2DC17D
F7DDF7139FF8C41C5162F8170D1A6237126C282A8CE2830F3E58D4B5B65C5D87
39E11A8B089DB6EF4E2DA7A961045B11BD2EB0E8C4FCBB75E7706C532C15B25C
D6371A13BE8A7DAE5087B2B529262153A041B01F8339C2A0EDBEFBEE32B76124
E0DE7C12F211330E0E0282404851F391E1313B3CE0AE212E7FEA07BA6F8BF5F8
37D50560EED3902A8FAA57F5E34291E879AD801961F7B4F019629824AB3986C0
AA38AF26C973D041076949E00E12541FC6B9785E9C387487F901645924791DC0
4F79C6797CCFBB4FC51A7BEF7BDFAB35A985A7E930BAC78F1053068ECF3BB6CC
F96163CE425B524C31E2EA9C907C24618346A085CF0201A425864C25C7CFCD80
9DA6D3E00C14CD5B07834B020AB4F3CE3B7FF9CB5FD6277A76286091338470F9
A157758C30F195011C3E43AA2DBF2C1422BB6E1BDF144197EAF4A781230E2FC5
565A6C37648EBB27F56A82522C30C34E53C0CA0CF0FAE9F60E3EF8600940041A
10B965CB969D78E28965D9CEAF7EE5041909786A3D1C2A738C015F8265407B78
876AD8F53A3978B114124903028D6C82AB8F607128D379B84D8CD792254BEEBE
FB6EA2F91393BD56BB21A5BB70C1D85A6B2F5C63E182664B9A6C527F5B7983D0
534EF0A1BA686AE471953BDA63EC5554C059D50DB8729CB1289FD4C1BEEF627A
747A0A6FD1EBF6CB64F0AA8A29BA2F777CAC3D51E680E73547461B7285351A63
9D91564B3A39CBB3562AA41EB26E6983F6B27EA5806529B4E5018F4C743BABC7
3B0FFD7CF5F2E5F7DEF1BD1FDD7EC7CFB432B44AEB35ED54C72000B5A84998F3
DF61875AAFCBEC29828F807DB1D60DAA720F0054ACEBAF8C84A7AE1C73D29CD8
A90ED2C67869AA4B66B59E28A5479A18D4CA394DD6886B18D5899487C4C46CCC
4AFAEDB6DB6E7BEBADB7B28D8998B1E5ECF178071247B267DC08AD9F62B001FD
17750F7EB6B6935C76ED25A45594657136635D720CA27A91E8FC4471F5A10496
54A3F6304148E09D60611899549B537FF2277FF2CFFFFCCFBE841D2F73EFCD36
C57A7C82B1880FDD1BE310EFDF2BCA0F1261474CAE23C3C4F4D0679C4A43ADCF
895E6AA83FFBD9CFCA743BE28823E85FAB970B1F538DE521E6EC881C89AD46CD
8B4B1B2EC7D8C1CE6864A433FEFDDFFFBD98B36E3B46057CFE3FFEE33FBEF2CA
2B1D8B666D0C83802C97CC3D020662BFFDF6BBE8A28BDC066D75C56DA0F77253
8E3AEA28436AB380AAB581E5BA413DE33AEBACC3FD0FF42834B43BD50103EEC4
D1FB48229D6AC222BD39FDF4D3DFF7BEF7E1EA799D1B36613A2A43F189CCB9FF
4ACCC5443E808151B5ED324C00EE890081882FF1F77FFFF75AD5F250F9EDA69B
6E2A278447A3DE216655E8F9DD0F54D52980D8532849EA871E44B14039AB89F3
D835DE8988A3AC2E024E957DA0CF69846A6656B2095A1232FD0F3BEC303C4C86
8B8E81D88598837AC30FCDEF11B526B602851E8B172FD6200C87D6667BFD3FDA
CE034E92B25AFB6F55774FDCDD6123CBC292D6250A8222C835DCEB45D48B4812
4510143120E02292040444C292BC822012445110F11301C58011451104D31511
490B927761E36C98D4DDF59DAA7FBFCF9EA99E19E50BFDD3A177A6BBEAAD379C
F89CE7B0259063DC2837D182331CF4CAD3186BF12C3BA74CEE9D3A75CAA4DECE
9064C3C3831D9DE97A055C60B888488F8CEEF7A9FD2A7FBC329A14BADA52BD39
C8998D3D3AD25B3C92CF1367B51CA595D34F0F26A9ED8FA15A47D3AC81DE8E21
53C0DD5D959CB4B2C31C941A2649DA51CD39A2B36A7D2433059C0BBB6023343D
D45133059C748ED46DA53B5F5C3AFCE05F9FFCFB438BFEF6E8729B713B9271BD
93B8F6997FA87474A79D528FA0C6FF9F0EB577DE79E77854BAFFF4452E596CF2
E46F907A3E500342D2FEE92927EDBDED5A13ACFFFDDFFF6D96A3C95C481689AA
69BD2076862030295AEFD9DEC274654F6FB2C9266F78C31B7EF18B5FD86FCCDF
BDFAEAAB69698EDB2172CA31C74F47117B73CD35D7D8E1B16F619170DA49AB9B
7F693F6D0CF608F08AC0D24E9645B049CDA17073BE0B13C1C346D1701B8B98B6
CA76474C52A4AA5D53AD8E9547A0901F5F1361E1998F843637D9B7EFBEFB5E7B
EDB544629516F5A322C74CACDE13EF25E3A3886DCCDB6CB38D3D35381D20ACA8
55489EF10ED9098AAF4ADA7A8D82EB9945B8101F9341638FB370E14213BBC451
E5354A6802379326209E49FAC0C6067DA0381735DB21C66044021AC66732CA22
4FB8CAD870D44CA39B5960CF0B0E512500CC617B0E9898390025D5C7ABD80F6C
9A5272F65CE6EAB5E7B6096084D8F5CFF6FC0E3BECF0FBDFFFDE27B3392CB269
143AF61B52110BC949292441282AB1C3A9A7FD626E9BAE81188AC46E6183C1FD
C5D3C2C266CBA935B8FD09BA0CF61BC432C807F951AA7D6059F1E0B15DC8C8DA
EF65E0322AB63DC84DFBFC8E3BEEF8C73FFE5111416D272963AC25B1644BF7DB
AE36ED68E3A4840F754E9C5FF7F2701CB3A2AEBBEE3ADB607642EDA100BAFABE
2FB6AC7476B71B11805177138A9DE04B61785B6FBDF5A1871EFAD9CF7E56D92E
C4B5C215F4743193D1360C881CCA9FBC552D8793DC8A78994C94996D376BD6AC
161107E537A4F4A2C56492A0D2D3DB356DEAE49933A7F54DE931753838B8AE5A
0B84A073155B049F51C0C3CE9C97EA0D0EF2E073C0F99EABF0BEA0C04CD599D2
3172E00D47C51C4CEFE7CD07EDAF7573E42AB5E19C93B21A26759A8199747699
5ECD4C1FE740E822071CD2CE82233A698CE429D5C648BD70A99BDDDDBDD54A67
33AB0E0EDB91E858BA74F8A1879E7EF891271E796245B1F946296086A1C5AEB8
06A221FA3DF257C2FF9F0EB5D88FFF67DA37C4FEA08A091F75D451B7DC720B4D
D4EDF7B6E96DA742C3ABAF989EB0A940D1D22C8866EC0802024DAA5EC703E070
2A512D1941C4582D8F94A0D221B4A365579840C1D8D5EC0C9C73CE39084D0A03
805A10EAF4302ED35510BA42141322ED09E16222FCA4ED61AA42469079922165
07EFFDEF7FBFDD94002C3E874F2FEDBEFBEEBFFDED6FC3E806828DB6EEE25B6D
B5D56B5EF39A5B6FBDD5BE4248933911F03889E4C3D011D8B450FC40E04ED5D5
B82CE3D553B2CD449F4274570CFE28183F7E5E2C50E240B321BA142C37510781
BAB1269348BA693F6DA836601B36AD30E557493A038EE58CE0EB43080516C926
C1BE45309FFEF082BCC2CB3D71796B89781940A9FD924A42E2137AA83113C0DE
C2B0A7A02655A9227395CCF10DCEFA69CFFE86D19803C0343C85FC3F051EC41F
A24C399A18D3C47351A93E0A4D0FB2E9E0830FFED297BEE4AB131144AA66F6DB
43A87B98CEB2A2F04C430D85DBCD987D7311DF134FB00F64A907D01183556F1F
F9CD679D75D6F9E79F8FB4C1DDFCD8C73E6676AAF9CA18AC8A366BE6A53B4990
9988B02D846DCA6197A9AD64BC6A3EC54D54899CED7653CEB550233BEFBCF37D
F7DD474812962BBF6DC0128A0060975D76B9EBAEBBBCB5217275F0012A522573
BFCF3EFBFCF0873F443EF8C92FD54F4BAC2951623F6DBB528C9A8B53F18872B4
D693272479D2AED691CC98DEB7C9261BCF9A39D5945FF181AC1A15090E2A1E6C
A3D896CDD194E5FA99B611717414D549C58E2C3CCB8AA0070D17452F367D819E
CA15705AA8ED4A3DAD346C45AAB58629E09E9A39B595AECE50ADE57D82D3BC1D
9279E7D546DA9DE47D95F204F0C8909DC6BC19B05D6152F7942CA90E0D878181
6CDD6065F98AC6A38F3EFBD863CF3CF6D4B2A2BA4EAA3489B3B91E55A818B284
35028B9855186DB6FFBFEA503B0102F65F7929BAB2FDF6DB9B39893A59DF7263
B444963AE4100248B1ED6B17B12F9668D524DA9AAE1166C335776AC4CE71696C
C20535235B4EA971ACCEF15C7CBB14307289155ECA037DE6339FB9F4D24BEDEC
3DF0C0031CE92BAFBCF284134EB03FF115A1D379701BCCFCF9F3FFFEF7BF978A
C7C0E0D8C754CC3D6FDEBC57BDEA55E6594247670F6233F0C8238FBCF295AFB4
7B61D5AA0A0BE424134294AC5274D1A08D23328B291506845B331B7CC023A231
236C5DCC0233B1528A51953692E823A4506D0C5B6EB9A5391F3660C2838C5FA1
42EA34049A6300CDD89DE2CD6F7EF3AF7FFD6B5C4C4172B0A24C2C9AB854D986
27F707D5824193C456A40CC6B6DF830F3E6857361565A3BAE38E3B982B9F35E4
1C31FF13D0AE2591F400F30279DD748D4FF42C0A7266AEA75E69EAF063F0FFE0
A123844BDF59F51F0BCE9750205A01709971213A761E566D5FA1AFA8BE428678
CC721DC50851C0AAD3F554C1484E451792C8AB651F302D78EAA9A7DA9B0B2EB8
C06C3E9AB80038802BAD1949A1C154A3E7CCC497EA0D91095C216E245E1A890E
CD2F344753BD4D7D84964750999032C159E43C082E1B5289ECA70AB0133960EA
EC790F3CF040DB844F3DF514761E2211924EE994347295F801882396C9B1F726
43389558A5E0A8B5636DFC64127D241C958FCB81A98188E38C880FA45210BE92
7FF9A7E168CC444C58620F89D07A426AB4E0E3D5EE467D24A48DE95337D87C8B
B973369A69AA7960709DB99B15C58A9BC5FE2B766633091ABD4741A76D2494FC
A9560931349D78055C1C98669CDC42948397CEEB77EDAF453386AAA925D3BEF5
4AB5D95DB5594EF24E83D5666A6640D22A016A64BDB6392BA1D26C6445A3A566
EE6D5793CEA4BBDE4CD7AE1BB6B55E37545DB1A2BE68D1E227163DFBC4F32B8A
DC648383C63416E6C8A89396B8FE658A96F8948C62417CF2FFA6436D88443325
CDFDB21430C524502F71244CCB723C38BDA1085AAAC529B24325C236C233CE38
C31C503B03071D74D0B5D75ECBB7E0D415204BD5EB76118E84B8A3A998B2932F
6404DE6AE660B41390FBE37983E1E2001026659BD1F182EFE259AAD7299028A1
CF94C986D3D52C892CF62E5445A93DEC269B6C62FAF537BFF90DEA993A9C30BA
25837FEF11767A2913295587FC5DB870A1894522B1A0259147881BCC79112C48
EE131C1B6FDDD3C8E4E59B24CA18928FAE79F0914FED5B65C7E55D912368C696
F5D49E12485080FAE28B2F36116F2A19C58CB328320792FDC1310CDBB72EBCF0
C2050B1668B7B37970DC1989D874C77B5E9D3B8AEB6C21D842CA0BF0010E9DAF
0FF6C727194DF909B88CD1A29F92480BC506230EAC902C0B47809D47E0A6CC9E
089CEDA1285FF1E91E684F084AB1FA78A2A5369452C0C20AA08C4B9D8C43E42F
C358274B42BC4A8D297D1F8B107BA0A126CDE3B40D6F83B4E380A627825A19DD
D9502751D84396C0DEDB5980B0C5FE4A7B531314A4D2ED317152ED9A488024D6
100AB929235E5C5A426CD8D68504B094214D5C7B4A459E58056A2E407831033C
BB4FABB1BB1401D201F7F3A30639648ED0B53244A889B2EF7EF8C31FBEEAAAAB
ECD1FEF33FFFF3F6DB6F57E706BF751515AE385A40B6DCC73EF6B19B6FBE39F1
597129F0DC630BF67EA428439ABCD966B902EEECB2DD3354C942DC1F75CCAE9C
A02ADF3495D056ABA34164EB9B20B554514735877089358B40B44B1B0739C738
C1CD50B173DD69EABF1AAA95461E6DEE4CCD21B6AD9B7F3D6D24A673B346D192
308F8DD4C3142CC97C7459C15B56EB2CBCC97E737FD7F48FACE96F9A0C5CB5A2
FEC4932F3CF3F4F30FBFB0DCC797F0D8B2582E6222C67615B36FEB6A2B4D7E65
82571201933A5D25551AC6E950CB09A724BFDD9E12FC47FB52596415C30859ED
83E7546E50CE2B99CB76CF62F7EF2C627D4B6638B9281C0E46E5117D633EBED7
6A0C3244C8896FF01922414FD3B1110587ED549ED267564A1B1A2C22914FF386
8F3FFE78FB2B3604F7F2F8463F93210633159BD11B6573B176F16B8570092EA8
8B1A03E18CA52C238CB41FB723AA0CFB015768C45EC84203659193590A55C753
940EC1E1A7820B79955EE81E9592DB249BA09938B44BAE0B132A8BDDD17D5483
C7AF445AF26C7423C5D4715984D8E66F9B6DB631173C8DBD1654F485AE52FB0D
653D4374BC90A1E869EF4279762A13AC056EA3CE74793B8CD551E625897DDE04
59F266878A47351B0AF680810A0E4AE99772975D76F9CB5FFE825CE62CCB0622
F6AED280F9F3E7DB056D37DA4391001202DC1750705935C7558CC1F7050A8575
AE8E3D3078F079CCAC3436B4079A3058BC585FF6A43E4FE914ADC13D92DC87A3
6551A9EDA9BA4D10A755846FCC7D253F3875BDEE394AEA39A143649F34496B5E
3B511331DACACD2D51EDFA794B0B2E0E95F3DA17E588B3CA34C3B6BF927153D9
BAEEAE11322DF8BE9FFCE4273FFFF9CF5337CFF1219345E2830251A8BC0199B2
9F357B9C05CC0E852210C51CCCC423CE7D446568B88E02DEA0AF77934DE69802
EEEAEECC03B90D1DB011AF80CD24F551562FD17C0E4627B6A0B8CA075052C008
56E43FFE712B5A9B98A56F4A34CD93D09566ADC30468A556358738E7CE4AF30E
C1235968A06B0BC28DDC30B4FFE360D7D25A47D1DD61A8BE66605D63E58A8155
FD2343EBAAFDFDCD679F79E9B9675F7CE899257EB49EEDD616D5BCA2C71E7B0C
AA3C5BAD37BDE94D66F28497F3C27EA44BB3C45312D19862A44B62B397F13634
8721757439255461E9EBDAA91C75925B9E323344F0B040C589EBDFECE3196C53
A9D57FAA8055E3C8864601CBBA07DF7BF0C1077FF9CB5FF60939E9037DACA47A
83A362D876DB6DFFFEF7BF1F75D451575E79259FA4B52A175471856756824603
5F013BA07DC786E84895E0A09E4920B8027C8F445DBFC3E3175357242DEDA8BC
9D8FC869FCBA054B239F5B254675D77A72BCF927EFA84A5CF680EF335F129478
7B60C291B6F206148A44D492BC1C33A8E38301A60BF7DC73CF9FFFFCE70C5E5D
DF712984AC195301EB3A6AF41422DE5E916D512BF0A29D8E582D43D4D615D768
D517D5941A4D9AB6A35F90D4863850A9C567F7B25864C1F7DA6BAFAF7DED6B59
0466DBF070B630A91BB1B385FDF3F2CB2F3FEEB8E3245204B754BAC107BD43C4
60DAE0CF3AEBACABAFBEFA85175EA0BF1C9E9CEFAF20BC37D55C175C70411A9B
9DC828513F4A42EE84FA891261A6109350FC430BAD347388603DB10E80C36509
2AAE394AE9451C989A78E4860E026FF0A1ED9A78C97BEFBDF79D77DE29E249FB
8CB0F7E9E89A786D925294CB3E6C6F6CA292889D16EA4D69020D06730D9B5816
701639C659685B11FB18AE8B087F6CD83648A4960D1543D083C9ABB1B7A3171D
21222D5409B2DE59AEB8CEA9B98159B05AD9234C99DC3367CE6C53C0BD93723F
6064605D4C818C30FB2D055CEBF0FAD5E3ADBCDCD4894D9BD018A53CAA9CDD5A
47259EE74C9E58AE8043352F8BEA303FD8645696FFEC4873D2AB5ADE8921ADE4
0C5959A39E87A00B71319485CE229D938305427EA46BC5ADD68D0CAD5D33B87C
D9DA952B1B23C3D5B56B92E79F5BF6DCB38B1F7DE6C5E014B0B08EBC80475144
61877662A69EF1049CD78BAAD65704923323969909404992654288F0C60E3F61
431B9E5D9F7C8F44581AB92CECBBEA202D7C41C375F00EA303DDDE8DF6CE10F6
E004E3544903C6384E8C4AD7ED3CF8DA21C1494A044315C703AC9164B1CC03A1
6C0F0B728D59B5C5B22B6372D2ED5C755FF861305879A3D3ABDEC4A1F1EDF899
5CA6B044ED194E3FFDF49D76DAE9F0C30FE7F831F995486225754BF249BA9679
66003E72AE59E5F1C16DFA9032015EB05A0A4870C47C27CAF6F9870F017B1FC1
64D332DE7AD9C74C761F73CC31252343990B168521658E98A2A4805BC5153100
00FD882986CF7CE633EA4CAE9A544492B2AA4DD7B50623C01E0195A30833D34B
A6537B00558A0457E58F00F028E0CCC1A63CC7131B8F07049A40945571751B36
EA5C156BCA5B83DEA24E941527875D120E0C8FF9413473E44F3BED34FB8D3D8B
5D44E6AF7AF4FA26757A79E0BA0C08E6A1FDBEB05EF39832373D730BB7439A31
57E4CEC4F5C6FA7AF88E40C88A982A143CE6BE9202164B0C03509EC2DBA600D9
50D29A64A8DCD830CA46A945870DFE231FF9C855575DC5B0C9A31147643B6591
6794CBDAF3DA2980CA571C3560450567F3CE8F8231EA2786A7AE55106D278777
D34D377DEAA9A70013342237BBE078E8239EC2364F4E33A7DBD8F360D1B4225D
FC2509937A3B67CD9AB1D1EC5953A6E4BC1343EB561368F20AB8F0614785A4A4
809351C5456E611AF598E417403A2491B7DAF4A8D7C1F6A619CC7731056C9E6C
5AAD64795BA4C203B665CDAF908EE41C1D593DE48D81F395AE76AEE70303D855
29C0DB03F560C6CAAA15836BD63447866AABFAEB4F3FB5F899A7173FF7E27A8C
A8876C80C4A35061C71D77342577CF3DF7D86F5E6E2E169B7D9B6DB679F4D147
495E52FF805A5265BAB7D6C77CA1BAF05410FD760E6D3C9872F6F5EDB7DFFE81
071E60E3A28194A352D414873B8955F66C883472058F7790E45E6B5B37266C8A
E0C37DDEC5B101032924E0C9D112B780AF3ECC22F188D6456FAAAE0BBA629BAD
EC46117D55EA512438E06F95FE819DC03F72BBD961CBB4DD76DB99936DFFC46A
F119A9A4E0A7A5DA016A0599110C4FEDE142F47485794C5C5F55D928E209A24A
7BABADB6B28BDB29D5E0434CA966B18DCF04FBCD8B366C0EDF35B2F492AD435E
13709C7D1D3E2CEF4C280917C64A3965AE8489A60240CCC8A12AA35CAAA52929
604D0EBDC5A8AAB7DD6B8FC0FADA31B4F74C0506AB621E708DB12B5427D65E80
0040EFFAEBAFFFD4A73E857F69CB6A877D75F1E23469ADE7CD9BF7E4934FA200
C84784C25701286B9F2C55C69BD146CAC37EE3093A541C150ACD4A969494966A
730592B745572C04A91D46FBBEFE8809C381B887EC70B7DD76FBDBDFFE665723
F4CAB2320FA6EF6DCC36B1845E595C8664EBC5189236C837DB5B9659296134C1
BE4251A9B7077CBD707A7022ECAF1C3492D9F6275B141C477C5F7BC066D16E55
1CCEF218DFFCE637DF75D75D5FF8C217162C58005D894E1C5AD376914D230D22
1BB1F79798F8AEB9E69AF7BDEF7D0ABE7ABA85D243216F7DD136A46C50856035
BEF18D6FFCFDEF7F8F28260482491A9CF2B66D00258059A5890E2A6BC6F6CDA7
B89045491A3A3B2A1B6C3065E68C6976A71C8736D24A32D7EBC331765D48C9B4
22DF31388B581E4C29C497D4F32847A59A440FB875482AA2A88C3AB835178939
B495CEA27B638EADAADAC357AA2DE5DD4C2BCD34349A5941625204503BBAB176
09A116CABEA3B07383F99AC9D0405837900CAC0B2FBDB4F6B147FFF1E413CFAC
E81FF292D7C7D2B3D8EAC4F6258D757D80FA5F7C4151B9D75E7BFDFCE73F875E
079603DB5E666B53EAAA1634CDD164DAA50D6D1F3027CF2E75EDB5D772F2B1D6
85767EE8A187C4E28BCC9528012142081A158E8F48D35F9099DED7D4C2C9C393
D06F8EDF64D72F77E65A27219D517B302F7AA2B892FE90D732E654D82F4D6CD9
356DF7DBCE8439815837287F4A53ECAFD21C2A3C983F7FBE4DD798F7D5E0E528
E046B05EF807760593C8E616CB3F0BAEBB5925B251AA48C38664EB055D972C2D
3D266EA5E2AEA598336022003E1EED55AA7A1A73BF99477BE289279A2C5BB468
11BFB461F8A0AB7F011325B95812F15A77C52A88938F791DFBFCEEBBEFFEC823
8F402C4FA64DB156FBD3BDF7DEABA6086A365C927789632BA314DBE6F0A4934E
3221AB46DA2A83B1CD6C5B57362856918DD9F3A827B12A52274B3ECDB1C71E7B
EBADB7DA61915FC831246387E9100A7D59C24061C0D1E60805639BD9F4A8D2BA
BE2DAE37A14221CAED2B9AC3B4E08CA3C3FC01071CF0F0C30FFFF297BF0CA36B
BA2AAEB59FCE0EAA88C8BC047D88D69E6F284E0C4636A84A64FA3F0000FFFF49
444154FA1D99AD60632694A2DCF0FA76F131619439506DD3355FF12080F1E495
57C0C46929223FE49043BEF9CD6F626DF8B4B43F1D26E2CE38E30C3B3B242C78
103EA06844257208E2BCC20140C8012828A746454DB8D4BE36524D5493C8DEAC
0717800B7CF825975C72D4514775172F3AE609851A0ABFDCE69C927191AA565C
E36446AE62CE7CDE7CD85AADB9F3D457AD80415572C7B1ABAB63AA29E1299372
0F3AA947DB673D082BFF673A8A7355B38F2B90B84684BC6ACD08738F3A3849FC
C73274703C96F6E9EE4A35EDA8A479D1706296458A07DC0CB6C07967A424CD09
27B966350F4ED7B3A4A57D1BC196BFDA91F3647556AB7DD54A57C83AD70D64FD
2B479E7DE6A5071F7CFCF1C7FFB166A03E9EAC2FD5EA49468497F3E2CA945786
9890C0C3DB79E79DCD68CA0AB639DB3713D71D9D75D6596637016707126CB203
DD89282760C259E53AA289E70A123DCAC1D8CEA6905132A8DDB34922665B7115
91C38D394E9D5E963B8B08796E7AF6D9679F79E69958B5748E425293D8CB46F3
988E797DC650775D7B4344539B64B4436216AEDDC51E0D3124D7C10B659F6B2C
BDE4C629722B45CE994C62152F99ECAF7FFDEB202CBC8462AE4CAA9A2FFB97BF
FC056F83E419B2525A21B85874882946807EA5FA2B3FC344DBC61C7F89C7D85E
360FB6D127D8B759ECE6C44F9335B646CA5664B133B964E878D7114ECA842CFA
9EC94701082CDD9EEC28BDEC5B7623357857AA0F481D3008C5393C876B52B04C
D0D60C5E91D2542711508656A09686F8103B8A83F0C94F7EF2AAABAE2238699F
4425432DC7ACDAC5172E5C684792EAD8D7BCE6356679989437A3C7D60E960602
18849795EEE101ED14DB1818A1A781C4BDB38BD8A8EC6A3045E000D842C0DC44
81F8873FFC61DBE461346259469BDD0E88A58C429ECE5491ED287B5EFBB09944
66AFE354885D92FA3ABF345E07FB88F4BFA280B5A942A1A2A4FEED7170F6EC97
A41888FF131086674A7D21E9662D8B59712F5835506976359B1334AE875CD805
BFFAD5AFBEFBDDEFDE61871DEC61A9E5250267B7BEE9A69B0E3CF04071AA7844
148FA6400EAA1A3926035DBBBD527425D108859A545502CB849340BCC4162849
C782DAE6065747C68D433367849E3C69929D9C1C6E5A6D443E8A46840A17A89F
4A5533AE4C954F21085BCB3F3BB20AFE2E3A38FE697D7517FC945968E5BDD24A
6F0E8D2E169D8ADE5A47C5FCE166C819A1ABB5A492DAAC35AB8580ABE688B0DC
BEC87570EEA0875A67B5BBB7CBBCD0AEEAF4CECE9E3431855A7F69C99A454F3E
FFE05F1F59F4F8536B87C7703A4BA9235B30D20C617CA69EF15E9548678A58F4
5806369F308D8A918E791D08658832D9865BB060C10D37DC205A70FBE5D5575F
7DD861876123534C82B7C48610DD124018B821ED6AE61993631BEFBE254C2CFB
7B025B41485A8163E5F93186534F3DD55C34798A901DE21C7BF6A2D272E8BD9D
4F7B40DC8E66C1F22AC94ED6B3197BA5F948EFDE7BEFFDA31FFDE89C73CE31B3
DACE36D559E38D3FB82A6ABFE20A5529C786F18AD340C64B595222BA666B9B34
114C43E5134A75AB87922D1CE1109ED11EC48485995CE79F7FBE427FC8B28943
D05964D325AC859632994E854CFB4B0C0378B70DD75028449267CAB7D4AFBE7D
EAD866C0A43D7ECD2E4E0CF0BCE2A5EA141A417AC91E1CCA41DB5542EDCB5FFE
F2C73EF6B15098A1B6828434EC65BA04DF8E0433AB63E6C2E1871F6E0A52C864
2D22E3378D8E0759226BB4A36157360D6A1F805B2629B05762096E38CE76AE4C
9F12BE2510BB6D690F0EE2C02AF7646F70FED4BC92403A42D5DF2B44AB519BD9
36C90B2FBCC09EB18109E2E06144A1886613D1A467AD9858D8841876EA0F4113
BD37BCE10D77DE79273417AA0451B459A9DF301A9331C12B8B6520EC7991E128
D8130A4B8BA0345F51BB08AABF8815E31CCA362224498219D5C8A83023CC1822
436197B25FDA2AD82DEC76F6BCEC25332E4F38E1048E2A37458372AC7CA2CDE6
C77ECAFB2A998FB41784008BBD0723AFF09569AC83E7EB2039D8B1F6D7DC4DE7
0FE2AC592F5E9BF522CF5A353D58ADA6A680EDD279A7DBDE6A34169A52C0F958
2B559F65515D1ABA241DFDCA37415651B951B5A6DFB7CA4B8065E597CAEAADE4
687552E149E515BD216BE43AB556310B36A4F56A0E8DCE6AD5505C2DEDCCB1CF
D5467DA4889C862C6DA4D5B4B3AB5628E05A573ABDA3B327099DFDAB869E7F7E
F9138B9EFBEB838F3FF1C43FD68D94F75312294430FFBDAB3101EA6F828DC8D9
83E6B012BB92D97BD1A105D7ED6E028BD294A59D25513EE960A0DD4BD5F1DE95
6C8F6C7FEB5BDF7AEF7BDF1BA21DA7C8677B365466ACC6E9897EDA5F492CF310
DA82AD6547C2DC53B33A172D5A047F4D88511A79C0617486A97D51ECF56FFFF6
6FA63E8147295227E7DEA48999357FF8C31FEC9744267DF5A4526E13F43DCD5C
A5932FCF4393D1263D14A45144F55532C107BCEF9EB98263565C4F270BAFB778
D91570956CCC262FE812C82ADF78E38DBFFDED6F7FF2939F988F152227CC0481
68336ECCC461305863FBEDB7DF77BFFBDDF1F69558C1D97E784B4A36233DB7DF
7E7BBBBB84E998FB04CF00199A161D0F152D30A1036690E89C6774CA46F34C69
481493980F0442908FC1FA090C228B7DDD55E68480C30E20E5A650538891407C
440D1BF8B129836DB6D9E6E1871F1635823D85896C8A5CC92F90D7B0CD2399B6
F3CE3BDF7FFFFDEC0D48EB70FDEDA9D97BD0F4A34510DF988C7C056B86ED2192
29C874A928C5DE6A149DC454DDAEFC2235FDEC3DCF791E46F37B2840AA39374D
BFEFBEFB7EEF7BDF033FA8D4A1F9887FFBDBDF507E0C29C468531671FE8903B2
F9D8FE78F20A335D742EC4726D4F9AC56F33668B8B42A247A7EAF843A10B097B
D87CD294501B4615A11C498E89FDD32CEC5D77DDF594534E092EE64C2216223F
051B44DD9FB4E1B433D71F5AE113F6CCB9E79E6B261D8110E225328C34E11ECE
9CB9820819DF26666D0BD99F6C121205E2244C5BE54A49DEC02FD7AD39016498
DA3769FA8CBE9E9EAEA99327E78CDB5D2D5A5113982D8D9BCA8B6DD5E003A96D
C67684E968468ECE4A4768358D490AEBA355E1DECC5ABDB26567355A8DB15A22
CFC6945FD3CC8202D69C54D676546B1D9DB90B52ABE4C5465DB9DF5E74E7B095
CAEB839B795BA76AD125A9338FA6DBB6191E0A2F2DED7FFAA9258F3FFEEC534F
3DB77CD9AA556BD77939ABB36A73642B4708B7E25AD394EA0B838BB58EB711B5
D11522F660BFF6CF0B9EE07B689379E284D80E500E559C1E9A70218C541B831F
A3F48F7C3BDBE5760ECF3CF34CDB5B8D829E975D2EE8BCBA6962C5B7F7014C1D
D5170743DC7B18DA3E6D060647A8255CAE090C0E95AF00236473A3BCFDEC1190
1F0F9DAEFA01F112845816E53126215A90AC918F1D21B805ED0188ABE8E8D147
1FFD9DEF7CC7C43717B7B9B5DF0B09A9789D9753B802BCEC719810BB9D3979D7
5F7F3DB15F813F53D78131294A932588D5B53E44CA43E58CD5DEAA1A3B93A38D
648EF82E34800FF415DCBEF1D6054F31449A52513F82E2914245E4893D1F90BF
A71909A3E102FC86ED84020E85DB61DF359D2D662EA4339103B6375171669B4A
1B9A27FA1B994F6CD68F88936C05ED9F975E7AA98FD086C246B48B9801F7C73F
FED1E4AC294E2EA2B9F527A274F6B5975054A83D26565C132AAB05BBC7F07C1B
C7D0D6482AB822400269FAAB5C6A34B4F2E23609261F28FA22EE8DF5AC434D9D
4FDEFA3DDEDAF41C5401728B6539E13D7B9BD26F8609F2089889F08BB17C0CA0
EA1A379999F2BEF7BDEFCA2BAFC4C1850805614B125D6932D5044BA756467791
8A78DE14E4A9EC8666A42F648A9A919612E59D8DE670F4D6B3578E7CB254826C
671F97972007590F5FC4CF56492333A0AF6ECDC9F335538C8C73953759ECEB1A
19B6A3520FCDDCD79C3675CAAC0D67F4F5F5F61415CAF963B782C3F5567BAC8E
9A8F37E29547DDB93E67A007AB25D5C4716EB4F8B072ADD9D4F6F55363FAC22B
E0A4E8289C8FB93254CDC159B9902988A0AB1DA667AB79BAB7111A59B0356E64
393D56CD1CEDFCA4353AEB23CDD56B87972C5EF1CCD32F3EFDF4E21797AC58BB
7660DDF088CFDE29808971EAB94AC6846B867F9615C63300F827DE479C830936
2EEF0596B6E7A5B136C74C9E9CF7779BB1899838D5D8D6FECC90D052E320E659
39361F6649228C8B43A81A92A46088A4FB82F0D56A3C42F00767FAA28B2E3AF9
E493B7DE7A6B0819CC84BCE28A2B4C25533E84C337417D2AB17A393DA5BF22D3
51A53ED2D8FE62997040913EBE956F490D648E21B9B428087A44A729399BFFF6
F632B285C917941266BA3E9FF14B804944645BB81B1F9DF2840C8449282F91B0
6073A21A398321C6B7F893A489375698B4CAE83EC4D8BEE3CDA77058EAA02058
7E180D3321BB4F54C0844E56708421CE24CB92361016950224174A138B3F2742
3A1DDB12639DCC1D7B52E4BEDDCE4E1C4FCD5065DDDA529A0975DE79E70930C1
9FD4DA564D6C881233E73AC25E5805873340A812AC16C2C61B403CB892C47E9F
73F4B00C98BDB4E825AAE5165E5A34CBBAB5EFBFC4A652BC172A0FBB0E23870F
8B09B121615F9E75D659279C70825D1FA20931E5614984B6F8734988E99F492C
C251F90D2788C7F1B6DA76DB6D679E37EA50D7E780D830B6D8620BFBAB00DB8A
B5B076FEBE4A71966AC45908E9579FBAF6C653BB02666E4361F0C9226C463A4F
FBABF217826B71B230BE85534962CF5948F1C46693737101E5B0175B131CE9AC
8DA6AD5AD9BF6AD5EAFA7071547ABA66CE9A367DFAD4E97D53EC195BE7B60038
17AB36680A580F83B9D168A3A5F40F5CCD6A11E79C88F72AD71CD5F56D94FCA2
D6730AEA9CD32A6F6AD424B699D6F2F0B51DC2DC35E934D5DBC1CF6AB1FFAACD
7C4F0E65393E2CA7B2CC3B0C3693A1C1E6D048D6DFBF76F10BCB9F7EFAC5179E
5FBAB2DFCE5B23CD13CA150C79A97F95127A39C53AF9DCB9370C27F0E44261AE
9E74D249A6841085DB6EBB2D3CC3ED2F14B67A4DABE1E8273FF949B3D9115EA4
7E412B688492EF2196F1C87AC051A674875A43853D7843C13E6B275C22F11FE1
B988024939790FA3A4C9A8482EB10770CE1545F09EE878F380B650EC288B4520
218686F8A744C398D7918CE3601C72C82137DF7CB31CE8F650AAB20C7A1649B7
124439713D25ED2E365AC8A42482FDF5A58351C07668ED27AD15A9E196589109
2529C074219DBD044707ABA61CA48FD7405A115E84F2CC160122CE1C4A145646
773B98603FCF9B376FD1A245DE1BBBFCF2CB6D7FFA4CA15C0D7263B462353D67
BFB17F02F629CDBCDECBA0F7ED9FF17AD35881EA054E68239B63F062C56A44AA
5DE85330AF21CAB0CF2405FD243F7D636FFF5E7B924A6EC1FABCDAE03D068AAC
1CD535D1794257D33AAA6D09BFE4D836636B13516DAB02076B0C57878D3167CE
1C9303421A0BCDEEF34422A3B0636887FDA0830EBAE4924B04C5D7040AD429EA
BA3DF6D8E3FEFBEF27F15CD255A57D52F2B55A089EB1C2D49EFF5CBF8179238B
A5E78AE735231FB5864AE0C75FB3E4E34946895583CB8AC63244C23B21A8DB15
B06C716423240A765AED3D75D56A00A39A31B3696C29A92BA1011DD36886F511
471C619B1F190BCD5992C402C42C5676F20C5336C84F75CE6C117255D7D3DDB9
D19C5973E6CCEEAA121C8E51BB4A206F570FEBDD05B9FC3A18BE1800A3B5D2AC
C669A34E3496BB54474DA55E28E0C2562962F4C5A8F258B379B649913AED303F
B8DA5164800BFCB69DFCE146D6B03F575BC9F03034D230056CEAB67FD5BA1716
2F7BE6E9C58B97AC5CB366201F5D44F612DC20E9A2B8813F6052759EB8271B5D
C0DAFEE250D9C29032DC6BAFBDCC157EE8A187C6FB3C9EB7AAEEE40483DC533C
C40E3695219E5148A5B7692CD5259149864C7E24D4CD12BB94D92071887086A2
92F59A6BAEF9E8473F9A146D6E09EB89F80D55845C1026E5F6DB6FDF679F7D70
B2EDF32605D4C45BF527C4A308B373977F2AE8F9A7E04BA5905D12290EC64305
576343620A31CD23A7BAB75476ACCF33155E8E30512A39450A4BA913ABE4BB54
F4D99352665692505CCA54EF1BDEF0863BEEB8C3775F40D0930B4449084B89BC
60A14BF69FE43B732E6B69CCE7D2544037E81B1B372395A99C8FF49F91CB7B78
11EDE4DA0D6E50142883D9B367D380D2EE62926BCC96BDFA27DAD18761851096
3CD5CB979B7BB89CAC4C0C14BBB5AD14D834256866CD9A656B71CB2DB7E88B26
1C412FB23ACAF0019C561F05E562138751D2C06079C449B56F4184D78C1C7038
B2C427C51DC1727866784D7225F6540EAE68478AD6BEF2BAD7BDEE9E7BEE41A9
788C18C15E1C7736B08C9E1D76D8E1AF7FFD2B4CAEB4156124DA3F34C222EE4A
092C53540AD86AAD4B723B14CA9BCFB094D2A684F4F105013092B8B183F9F8E3
8FAB696612A12D9A0A6643B1995231A48694BA6E51C121163D9566284C7FEC30
9CF276058CF583E09226E6F873E818DB0D37DC70D86187292B0F45BC42329B6E
BAE9E2C58B6D65297C62D55A623C38623C117CD8F95FBEA2350595C2CFADA466
F8CFD868CE8633A74E21C552B85285D194E6F7583BD46AFD81D2E58105C5E252
F8ECADB04CB3C6462DA6B955F25B7CA6BCA2BC1A9522C41D8A3685C50475542B
2D9ED2C281EEC813C0E6C6A660AAEDE27673BB728E7FEEEE4EAB1D8DBAD9E9F5
D5FD038383C3CB96AF7AE1F9979E79EEC5E5CB560F8FD8EDD2A25570951A32F6
377D6CBC3FE7C58A428882C37887693C5DA2FC281DBB68E536DE8745324CBC88
D69BB467A16FB92426E1A6F6A1B263ECA6A1C8D5B11DD9B21E31CF4BAC05DAF1
02F7128C22845571FD2742C4709672453EBC09C43189C9F2EDB7DFDE3E635F41
D934221FF204652D74300C2E1C24F757318930BA52A2FDC5080941CBE8967353
12DCA1CDADD15D3C6BA6E05DEC76203C21D6F88718132EE5983996B4DC10D1BF
67CC87188F7C33808CB455225F51542938AA8D3436898381CF979F963C0FC947
B302899AA8F19C16DD07A24BBCFFA54531DBCBF6CC39E79C73FCF1C7B32592A2
1BB4F61ED68312AB36B6C30F3FFC073FF881FDC6F600A17B5FF5EE234C89232A
B12722300B6D453ABA69EE048B1E622483DCB38DD6C6A01DCBB9106F179C0F02
0A48E8FBAA590DD2D685F0A3C88A4561C8EC410B6C5FA430F4D39FFEB4B93E5C
C48E09FCCC7605AC1049607FB87A8A976D30B69C52122274931AE60376233A70
63AE259116D4C7ABF8A70DA05EB46E0C6D310366AC28D75C1F5C1583778878AE
7F5D01CB76292574BC018D63C03F217DE4EB6A8A90142546495B313719312F33
C3683789E48BC2D1BE0ABFEADA290262185301EBB2B65214E852B2419B38C41D
CCE1B2C2BFFEF5AF9BC742DA8EFC45D3F5CCB6CD6C3FE9E79883B0FC79B37BD8
98B868B5A084B4B5367D37343490E4230E7D1B4CDA798757DAC77A7BF1A50670
C54C07AF195CCBD410C02453E811D849EC5F0D6E226DA0ECA3C84B549F5746D5
B6E460AD337AC005F9591E378B0AB8C04E174CD1452E396985F8F279AC2439F2
B9679229A966231D693457AEC82B3B16BFB0F4E9675F78E9A5156BD7350A17BF
838037C712808F9D55ADAEDFA372349934F216F24BC6130728540C2E32883A00
E3090E95515E7CF1C5A79F7E3ADB51BAAD52F457A0716F88C1E724F2C3F97A47
B61DEA1F11A690A977717CC9078A0AE9AC7D56892F94967DDD97A8621D2B308E
2D4F6B6466C9761B42DFA6D7BE4E295E1AD9EAC713A0B87444FCBC7FD08C748F
DE079A4010D31B95825199DEAADFD0A4796599B8A60252C68A79AAFE4FB2C0E6
CD8EA239EBF615A421BC16CA594801EB46AC084DA2A82E0D5157215E951A801E
52B81805AB51B77C1DF48A7DDDDE131F2BD910285A5B29F3967EF5AB5FC90F56
4F272F7A92880E1D6F4AA5E94B0960D3AC3654D31C6CD4DD77DFFD9DEF7CE769
A79DA6CF034F25F0E683C942D8AACEB214A715E2867D28FBBE64777A450EE70C
E5B6C2ACF14FE91ED153C3E0E12BFE851FC6614291D8F877DB6D379BB15FFEF2
9778F3496450F26C4ABA08D35B8D4D4BA189B6DFC035C6A499F5469536003A02
45A85B5B5CD1A7D8C889828A4E4B9034D24399C3937B118A7366EA012DCE0E47
B39263D6F3A2EDC2E8F801533A73E64C40DDFF7A089AC2364143B054442A22FB
4F8D37F4023FE139CF157C0E31F36256A0193725BDEB7F7ADB884E4DB6F19A8E
0D030740FC9A6386A08909813F5700929A789521B19708DA4B1FE3D3D68BFE72
90F1919F1A458AE78FCD9BDEF4261BCACF7EF6B3DC7E8F28B0B4184AB592E5B9
D58E74AB2DB7B085B43D610AAFA01F1AE4F106EA2D0F9859C3626AC64ECE9AC1
96F66D79C0CC5A716C1219E9A3F2407ADFAC56A34C340F98EE4628E07CC757F3
34303C5949DE25B1D1CC9AD566C8AB957265D0D55DAD7434333BB1D9B2652B4C
DE3DF7C24B4B162F5DD53F501FC98D0CFBEB487D404A8BD494A21C7E55F4425E
2711E7293293F1882944A2145C35CB04E54CDCCEA61A1E5D903536E166475F78
E185667F094542A25A80DBAAEB0F2ACF468246FB1E90243888928D6CC7CCA467
E6DA771381C1E921B6862078DFFBDE77D34D37D92F51D8E296933D8B98A62302
A24740DC5068623B75635694FA7968EF430C122771D54D217A8413E7E02BAE49
9FCA36E44E496EA6B1993C1B581160D5E0C3188021D2748D90A55DCC903FE8A0
83AEBBEE3A12DE996BFED8883D1E162C5870E9A5970697204448E113C309ACD4
2F393FB4481669F111E8CA39C126FBFAD7BFFE37BFF90D7FCADA40092889ADB7
DEFAA1871E0AA30B4C7D4CAF5486D1FE429A10AEB425463C89AA97E596AB27A7
4DE9587B4398B1E208C695DCC58E679BA92E7CA79D76320175C515576832B53A
15D70323B405DE995216CEA41CF5EE0850225E2FBEF8225BD7A766758818A166
9B63C8D8C8B5833243DCC91C07D2486D0CE927DA1CD93521D8225CC1686D036C
B7DD767FF8C31F42E1915343BCDF7EFBCD9D3BF78C33CEE0A4D395124FDDB305
50F55E4A8864A35B83C8A1D75CD1892871EC3A82B20B69C82D944FF19BC47B99
A1CD8BF0CA98608098CF4B0EB70C7A1C621B27E9673915220FF1753E8838B34A
6D116D1BFB4C44189DEB51CC2F14C6AECDEA534F3D958C7EF1E1F172C09ED2EE
CB5FFEF2D1471F6D9FFCEC673F6B323914C48226F79003B80A3CA0727364913C
8F34CA58DB637DC4C046690E8D3D1B458D210F2CA78D7ABE92B99A29D0DA369B
5B6CBA911D78DBC73D3D5D2414F18347C2B01E1B21CBF6F5659DE8E0A8803BB3
4CAC87EB03D11E7AE5A7B51E01E65E01E752B2C2694C5BF02BBB700E93AEAF5B
CBA9CED21A61EA8EAC691B282C59FC92EDBC1797DA8E5ABD6EA05168FFB4F85F
9D58AE4D0A662949F5129ACE6F320401C251B565E3115364050B238123881269
CB3C5E1912D1153625266A25B6A369144D3C6C78279E78A289F8679F7D96548D
B00918988D48118EF84B628BD35D77DDF51DEF78876D2085A09564E2B9AEBFFE
FA430E3944D1721B891D6CDB31366C5C2EEA3DEC2B14987280F186ED52F69828
3636BD0259C2972AC129053F81E162E3BFF1C61B4DD37BEE7E76852A8C9513CD
C607C13118EEA5A0AE3793B3C8AECC4695321064837BD1854D5CC7B05192D4A1
CA0BEE21265C78192918C43A925A16036975E912CC0B5F3489AB4D79820A8AE4
C7F331B5A813E07CBC2299107D4AAEA98CA6773294091E6F3EC91A9829634302
9A00C20E3B00B3434B66CA83BDF1DEF7BEF7AB5FFD2ADB86487BE66A0A5453D4
88F4E0AAFD438CB0CF9BB1113DABA30D2CD8A682D84951AF65CF82FEB00DFFB6
B7BDEDC73FFE31BF11F446991A09509D08956F72658198686E06E52F90089288
724CD5FD42DCA2F6D37E79EEB9E77EEE739FB34D22F438599EEDB7DF1E183083
6F38E6760EE6FEFBEF7FE79D77DA49B49901CEEDAB01E12467A8DA3C024C904B
A2C5908D410C27427A7348F9BCEFC661573651BFFBEEBB9B57668F60AA614CA8
E3C406B40FB9639D60E072B23C8A5310EE12565CAD12650DB3DC267328A8F505
7EE9E8EA50F182D9D7C9415422376488C112D5708E1782C63E00BDA86B725FFB
25991772078418D5E92B4498AAEF434CCD216D635A5C13DA7C76951D77DCF181
071EC8BBD9B70E0365739833D994DE8E4D3699634768D2A49E22DB6A139A0BD3
E146DD5B2208E822D2B2BE3C067143DC381B599F45907A4601670E26AED5CDAA
EBA743267091FA6DB11F74A83EAA788D0CE61AA85E684FBB52D624B41596AE19
58B9A2DFFCE0356BD6D93F0BFFBED54A8CA8FDBC79F3EC2E8B162D02C0365E08
4E3113A0469E95C287B6B2080F5139938FA1E9E22C8CC82ED85EF65395062AC9
50C3106DA04AEC1F0C768CDA1EDB0AB63B6172082FE7457C8C18867E29690E1A
D9F693D9E6365433E2EC76175D7491B9E94AE23269A8840F7DE843B7DC720BF3
73EAA9A79E73CE3912CAC101F779091C94C5CA5108B44F38E1043339613B525E
5CCD71BD184582F891FB6C3D688B50A4C34BE00E7F48B8855999F3E7CF7FF0C1
07891D0930AC567DC131F860F0CABD333D01D275A38D365A53BCEC33662C2F59
B28467876928755CBB4C7816D92EB7DD765B9A766056DB4F1B83A931739290F8
BE55009B47B45921761445AEA94FAD0CAC50442CD3C864E9F71EA4135C24292A
CD6C2F31DB4DD7101E198A4D0928C1BE683366CEA52F4AE69A92B0369FB62115
D234C9FEFCF3CFA3A514046639E6CC99630F28BD6ED36B9FF73800BBE6DBDFFE
F69FFEF4A776404C2B784894E4B52F9065960061D97DCD1A48234F351B490693
3621DA3138306DE2CA407928CFBD901480D877BEF39D37DC700387D71EDF96CC
8C21FB69EE7556546129C1E9B303590431507744E037C4769CE4AD8E3CF248B3
B649C448B233786609DD9F1625B012F4D482936EA728DFFC7EEC7E6C2FCD8FEC
DAF65EC56C6FA5A21105B20FD4C7C94B3CC189EC2E471C71C497BEF4250A6F9A
B16F849F044EAE10DDB62554A82675EB956B18DD2F4744954A8A4F6C10E8115E
F9CA57DA010F31D18050F58524C42993B19A7950305692C38ADE87D1342049EC
C5043E8EF3DED2B950A752D48F6D65DBE5EF7FFF7B7FBF825DA314706735CC9E
BDE1461B6D3879726F778FC9C7DC16C893C4D544B123657F9BEEA5E01E0F3332
B0BE0CCECF9789A6305647846625F3093F450E3BD22005CC198BA9BB1113FB03
037966AB5964F1ECBF79C9C7DA3C04B46AD5EA75E6FFD6338FFF60DF28495E9F
B0D1F4EB5FFF7A3BF9CF3CF30CFFA4AB0167800320D759C1228C061C44A1E183
ABE255724282401D9EA99AC81C3ABF94AD6469F1A5C0BFBCF18D6FFCF5AF7FED
29E0FF95970804948DE35E36B1A79F7EFAF9E79F4FEC1AF985644735E2B20BEF
1A62050EC539369F6488F19E15EF42652229EC4F1E40A4FA5AAC10F9AC4CDDB7
BFFDED7BEFBDF7073FF881C9F45004BA61DD93FDEBE52F069074B6CC1AAC19F4
3783647791B43395F9C4134F48E6CAAEB26F61AE21B94CAFECB1C71E5B6EB9E5
C9279F6CC288A5C48A1291B289A1534E39E5539FFA9410DDD819BC9AAE3E3814
10DC57BFFAD5E6EED880F918C70AE9A9702E93C9844B197FFEF39F3FFEF8E3D9
0936ABB42EA88CEE23A9D67EEABE2EFA46A91CBBEC76DB6D67A3BDEDB6DB5826
05E224105920493D7B11C865A352F7A5EA2C148FC83A900F59AC5A66CF40D068
AF9D77DEF9D65B6F2D3587C7EDD006E35EE2B4625A88EE6A0B09356D1739E9A4
93CE3AEB2C948ADD82D39AC40265EDD51033359AD23476B82A118F53CE80FA91
54B51933AB14778DAF6FBAE9A6A681162E5C087D3FB2BE24F7C861A9D45E06A8
AC43822E9E423289642C21B6FB3DEAA8A32EBFFC724E0728934A41399E451E2E
4662932013503C3C1000F0C8FEE0D06FD166E3E69B6F7EF7BBDFCD39B5619C71
C619B6DB43C47F21737030A498054584018DEDEDF93815CD5646DF97448A7220
8C4EEA4BE871D265E1714D2595C7936FC4E4F041CD3DB8FAEAAB91D8C1557905
57C85E0A56EB9CA6E3D4C7370A0A6EA4AE4D2CA02D51737813BF156308D1604C
634F6962A4B977D8CA09D5A5804D50D452137693A74DDBC014F094BE49058A24
0F103592A14CF4D02D8ACA4253868AF2C1D216F9861B182E59162DAFB1A3E277
E7FA49777D616574E47E4CDA0A5EA180D90A69411B5D54360FE44B989941DA5C
B76EB048950D16145123C3C323E61FDB308BA1E6A9E5D455792B2C3FDE5A527C
493769337676DA692773F56C2B9862FED39FFE8449C8CE264B448B1E8FA1E5D8
64B1CA9BD8B2373389D18979C77603C594DE3AD15C111E81D03514290D24E0CB
F580316E5A34E0A15563D68C9D706CABD8D93BF7DC736D269165A67B7EF18B5F
4053D0702CF3363F3496C09CA7D088F914732F8C13F661B3157EF4A31F85C866
25372E44B2B0523F3E4C199B5EDBB736C3485854BB32581AB0771AECD6F6E61D
EF78C7CF7FFE7399EDDEF86846DE188F2A52098AAD97ADB8C917490AC54BED2E
ED9C97DE1345871109F4BE4E2997863CCACB1022B65C7F2585213DC11580F6A8
DD0D55DA7CC0A4ADFDC93499B4755A3039ECB7DF7EFFEB7FFD2FF15E790F4FA0
B0CCA5CC010A24B1CB90CD8967F1554105AD8DD86F00D7ED4F4A964BCE785813
D2D0FE5A62DC6565ED4FDB6EBBAD3903211AA932E0DA4B5785D90158D474443A
90BB49916B3E3592301A2EAE308FDE8418ED00830334FDD0430F25BA83B803CF
1C1C98119B46310F82643ED5E285BBFDC9BCE73BEEB803EBC1F612615B2DF715
575CF1E94F7FBA517479B26D4C5C04B3866D76C209279C73CE394A0A08FE6357
B60D6F1A9479C67157C01C3C9A3DBEA9673368ECCAF65C575D751545C6D89D8A
07900B5048438DC2E0B5368D6BE381D116E22A490312E104E7ECA7EDC06F7EF3
9B25CC816A567DD73FE5D715E49087806F60B297B6CD1EB3ADCFB7BFA8E682EF
93C7B159C29414E614435CA6FC78118B3056972D8D815497FDDEB370239FB190
5A89B01093C3F05653FD86A08BB764042D07B4803BE540CA9EDE2E34714F6F0E
13AF37D62AF8ECFDB3463D554853D22D5775F5310AE7C3E86CB11ECCC6611E36
8179F964AD4F666988054E14B411880E9D64629AA67D6D8B0E0C0C9A7458B9A2
7FC5329B0B53B4A170D2B322408DC01DF10752EF275060E45D749885F8C53436
214595910DE9B2CB2E3BF2C823CDB3B1FD77CC31C7D83F5FF7BAD7DD7DF7DDF2
7AD5B784CD4DD52F262A3C9198C0127CA5148517DFD89B4472A4AD5F96020EB1
DE2EC4E8289E87CD86C9057B04F0CF2FBCF082ED1CBA912386C450C173890857
721C8383F712FD2656AEBCF24ABBACD0BF64BED59655051869C158C40CD8FB4D
36D9C4E644C01351D5484C9038F7611FE4A01949F7DF7F3F3A003F8CCB021F43
3C29F927248BE40EF0510C7605C774CCCCA63EEEB8E3F0816C2798838E3B286B
4089F3768893ADA0274542CB82CE158567BD681AD88E8551359A5268E68DD990
6C4A7DBCC1FEF41FFFF11FBFFAD5AF828BCFDB17E92A9D396EA934F241DA1253
2FE48B83A551ECA7C9D3EF7FFFFB49AC7B31B9BCF7DE7B5F7FFDF504126D116D
0076051892597413D6B6B22529691B800A511BE18F7FFC63F31A4F3BED347B64
1B9BCD989F2566B2BD7A0D410CB80F472244FCA3A49ED9CA071C70C099679EE9
BDDE303AC2CC6F94430563983A3650FBEB6B5FFBDADFFFFEF79EDF74EEDCB9FB
EFBFFF97BFFC65EA06B93E4B89D694B8F0E21B396613A55669A96B3E08158FCE
7E524044E18984530943C4A6024EABAC00E50AE649C0EC55AF7AD59FFFFC67A6
4B649632FE880760C4D8EF15F8B1AF730BD5253303A645C0039BF1FDDDEF7E17
0E1966C026D9E6EAFDEF7FBF7DF7D24B2F35A56E0FAE3E19985FB63AF61B5153
790C87C78D7296858AF00914FFE2D9172C58F0B9CF7D4EA6D804C43E59A45E67
27D88473AE11DAE03DC528E957AA5DDE86B142E279C96B9A125156B4C6961ECB
49FBAA19BBA127AA4030414F635A10F0E623C67BF0DF98E24E8A946A4EC56C1A
A877C60C9BFF69DD3D5D211905C2928E1C1A6C30D1501363B3E708942CF85C66
E28823145E807932E2B1734CB3DDBCD1D29CEB15701649FF6D8DC1ECE5D9FEAE
4AD6647FDB56AE2F5BBAE2B9E75EC82B43D6C6CAA222375CC0AFEC0E9582B472
8C091D6F21D1BEB6C36CBA007F6254E2C272D8CE3AEBAC2F7CE10BEC3F7150D8
207DD3CD10ABD014BBE027D741A5B1B1C06DB607EDE510DB093CEFBCF34CC1CB
B19E00DCF4725F764A71C7652CFB3FF14452C0215A75DB6FBFFDE38F3FCE493E
FEF8E3CF3EFB6C1B391D1571769302020A853DC1F910ED478482FD129FD8A60E
43A411FB80FA64957D52ADD7912FA170A454704CD896B15562A340DC23FC33D4
3F72C40343A478503690E010D9A333BC5D81089ECDC375D75D77E0810702E593
CB4E20441D0629A32F75B70C2EE46337DA7CF3CD09ADEB198543E16489CF2F73
B567F69EC0ACD7EECC332605740A3E0D1F22E5E17BDEF39EFBEEBB0F73417FB2
DFDB98F19869EC487C952DAAF4215D92582CDC4D750E26CD2CF40D336FA7E3E0
830FBEE1861B2064B52BDB5651F35AB143D8B06913A4DD8E97E911005227186D
E60F816D96F21065269BD3831F2B8E7C3F38678032399B40206FC418D07C843A
D9878A6D602233A58ADF725FDC65559EC8E0D3CC4BD69169F20B9A14C05A946E
163B4495309BE8574C2E0F192154E03B04F3524181AC01E5CBD5B75116864FBE
DA95ED03D2DFFC12698632A6DB1561E71271AC599C2046EDF304AE45DD9339E4
23BA435E8D6D21FBBCED37A60E9A5BF8DAF4EC04EAA4D8144701E33DA61C235A
2611CD2FD972A10D9AE31DEB314F6BFBCB06A06F116FA39681E9B215B435F54D
A31345E76C066DFA6836596CD091B8C5991ADBA631101DCD6E53F6D3674CDD70
C39939915B18D186A6ED792CA0AC01F88468142FA4406A8C08A895C52AC96249
1C202B649534A472FFABA150E48DA1415330EB9999F578705620BEBBBA7B8B8B
A405EFD51A33604D012F5FDE6FD6706140648DBA14709A77224E47316928333C
9E07D9FE7BEA4600D401D7B4C744736013007D14BF15671500C2C73FFEF16F7D
EB5B2620D88EE61FFFEE77BF83360525817B4DA54A2944CF4F733B162D5AC459
B5BD6B23C79B6C17F413BFD2364A0AC926F9DFF8EB3624240B7FF5657CE4026C
AB0143204F66A2D63E4F731EFBBA4A298223DFB6AFA850C4E30643115778EEB9
E7A06F84C988425E8FAAC0E927D90C1EF8C9279F24362EE1624B80A2F5D87278
19155C51F445A14E0FE622A7AB5610DC1DE80077B7B5C040C100B2E932B168DF
FAC8473E72DB6DB7D9537844777B6EC926D65CC0DB6FBF9D8067A5E8EA233C48
88092AAE8040F4A056AD827D0C29E323C0AC057D2A7D01A832EE6AB1A075DF6E
BBEDA85952CB4BFE8AFD04569902127B4C5F6B415D32AAC5A68E421A6176BC3A
11579ABDB1A3CAEF4D1CB1285CCD3C4B9BC0E078B0B30894F5194D6D63958779
64195A592B1B1CAC4673DBEA945E482E7B04F3C2CF3FFF7C22C3EA0B821EB5AB
D9956D905C0AC906BE173FE4139FF8C4C5175FEC938B5E70FBD8A6083B89D84B
F1F308341846DFDBF1B13B0ACC0F1097F467335259B1B254481230F755EFF2CC
A462D107045D406FD99CDB46B5EFAAA74B7054EAB6A58F3DF6D86F7EF39B9889
A65CCD0155B911F3633B814889D8BB84CC80798649F391D12C968AE0C4B34C9C
774F0022E3D27E9A89BFEBAEBB7EFBDBDF0E45055788141FE3C96DAD2F163FA5
74DC88A9B3676FC4AEE4E3B57A0B0EB3565A4DFC5A41F9EC594C70D9E6D9638F
3D4CA4D386D9FE4446DF76789238CA6FEDE022E1311C194352ED8FA25F6FB163
0A9A1AFBEF94BE2E3BBAD3A74FEDEAEC40A8519BC436A21481B92640810B5548
930121B63257625BAD76685B56121A00B71E0F1C5611FA6B983D5098C6EB1953
316D7815E5C19D454CACB966CDBAA52F2D37D1D0DFBFDA5CFDCEEE5AA17DF37B
E6B1ED8C4318EC4A3EBEAFF18C57A74BCC870C963DAC9D0ABABEDB64FA40134D
94C9531256223D060DA43029443C7C2D075862DB22361E53CF175C7041281AC4
7200DA5F364E629B66E49A0233CF7BC18205614240E0C4AFF6E86856346CB0F3
831F809925971489E367CCC6BC70E142B8603EFCE10F5F7BEDB57803975C72C9
273FF949D35276AE4A78199B96BDF6DAEBA69B6E422F9AD7629FBCF1C61B012B
726C4C0A985D92BAD655282AA9C310191B6CEB9B0500705775C992FB6AAF64BF
D97DF7DD81D4122AC48D5025A576828A64281C40B553E802E008D16397050309
0F1F2639C60AC518DC42C237713542FC64293D20001B8E9023FB8461F045F925
B64084793D7E5E44B30874102EC430EDFAC2ADC8CD521B28C5DEF138510F892B
7964263DB28C44A9C904B283CADFF314B639EDB9487899B87CE73BDF79F3CD37
B3E1A926B08B1C70C001BFF8C52FD0EBCABF6213085491C50E8FA20AF1B064C1
9B797C362A8F961614AA3466F767470637A96EAA7DCE38E38CB3CF3E1B2FCD06
6C7BD516CE0620F7C5FBC1EA44E2FF0A1E1EA1DFEEBFFA176B617365EAC4E483
0D4F04D4BEE0DB3E435E962A8C8AEBE384A202BB247B42E101A4073A554574CA
7F338DBE97868AF5D96C5E5ED9DEDE79E79D7FF8C31F86982FE776360F76F1AB
AEBAEAB0C30EA3DC80FBDA81B5FB8AC68BCCB440E6A252514510032662E15D52
54956AF994E8C5ED9695A38A9EF1C41A9601D16FB07B1C649BC0CF7EF6B3266C
43B46BBD03E63137A533EB15B0A49F2DD07BDEF39E9FFDEC673821ECCF6F7CE3
1B871E7A688831F0DC42AD14FD196C6FB1CC36B991D2368D11F95689240AD8EE
98B34D55024646A56A677E839933A7CF9EB521D61FC80EFC831C80D351F56548
42639A3FCC03341DAB597148BA3557D59CD66A0C1C56336B16A640254D6C6D06
1B8DF5C90380D0B9D3B0D636506E9EAF58B16AD9D2156BD742789B7BBC76B166
83F9CADB05C77B8F88C526B80623E32DA4DDE588238EB0DD26878C8C0B014C90
470A03A8E64F85BC92987C91DACD1049307031C59080103187D834EB984E79B4
5D5ACD0DF135A9F093867B597A5791312D19E0520F7915464CB023442DFF6487
09926A9208D22E3E23708D6A16259E7C55836615FDA1805E7078252D194A9791
331E7D589DDBE5DD8A5389EF528529A52E7B5CC03129E04F7DEA53B7DE7AEBC3
0F3F8C38F0781F58176C5AEC0A0832E5CCF6DB6F3F33237088017B338DED564E
88CD12E4E7E1EB0B9E8A860027E24B62E4FD0797A64D6203738FEA147A96A946
EC0AB149741D7D6FEFA91DB2BD07375C88E10AC50314AED76CAB45A61A26DA4D
C1556933D87D3DD597E706525709FB005EA0FD52BAA79D1D53E10A1BC06B5FFB
DA7BEFBD175249EAAFD80CF68CE2E64B2371BAE6DC6356B4229A55BB94A79F43
436491123589E5187947B83445D9A8B342A99255B68E6CAFE0821F4CA0A94925
E3D5D19DEE9649AC02506B3F6C3E7B4FA843AEB90E2CCA15A495D688585D1AFB
FA218E783A0FC6F6EC8CC125986C36ECBD3DA6E20AF8548A48D9153802285D29
1B751C97BC4A62597C1A499BB1E36D058F39E618B389CDD4861F9458A96077D8
CD6203D5A3297A3A01AF80A790E397F42F11690949681F0C2B29DAF633AB0FE0
73B2D9D836C48138117859F0A0B592FAB2837C70DF73797B1BA408103D67B669
1101B63FA59A8B8D379E69BB7CEAD4BE028E38D2E2C0CC1A69522B309205FE30
C96251921D8CAA4F78ACDF884D3D6156C943C3EB5157692D6D1D12539B694E52
6D9BBFB87E43AD0FA5CE878603764071125AD5C0F9D7B3DAD80B1346FC5C9722
B1A5E01E6BEF43E8449289166AF77B85E4494842589FFF662FD65D673A5503DB
4FF363ECF7B832E79D77DEA73FFDE9127996468B465447EEF5398697E9014BB0
0AA2E2F56BC17D3684A565A6E2E73EF739EF3AA8906082DC33AE8F2D8ABD3129
4C0702CD21AC5EE0C36D36F4380AAA6BFE15E9120819B39A588B3A8265AEAF40
651CD27CE6931C2463C0F6C2995368DD03AA1137541FF208A180ECE12C4A1C90
A3A2450487889EED61C21C92D0D4B68B10796A8A056CE4D4534FBDF0C20BD1D3
2225104E0D914DC48FB8B4D4B096B5E4706791BA35B4A1EB85CC170745180D5F
30690B6B29814D650D60C6C614207469B74641EA7154392DD09FCE946F148859
2005994482555574806AB19FFBEFBFBF7966F5A2E5705670AF82FD963B185C8F
3CFBA72A70148154685ADB2689556DBEBE2338DE120F2317D39F1A24A7A31B98
A69175CE5B7B3225D3D86C83DA56B4B8DFB73E6C1EA2C92BED28BCB16FB0A16C
8B6FDBEC5947A4B6050C66545A4AAE40969D304C12A9A96040CB754757230C85
1E93F759B31A2AC3B5CA407338E99B942D4FFB66D6562D5F3663EAA4D34E3AF7
539F3ABDBBD36ED1FF9DAFDFF6EEC3DE631EDC7062DE50DEF3A7AB6FCA60FFCA
6DE66DBBE8C927F2204D77EFE0F0406834AB1D791674686804BB4D2BAE6C2619
10494E848FE659263E07368B14C2020C1E7CF0C1175D7451E65E25CD2A6B490A
AB14B262964AAD4291C010B00037E1F864115FDD22C6508905000185BF4384C2
722492A22ADFFCE3871F7EA8B0595AE02CDED8C766CC98628B6A523527E8C895
44CB33181EA61A38BF71A3C537D042D546E68D544F9E7F6E845CAC8D32A9A6EB
E1E6C560D737F9893C0669AD6ABB275094C9C599EEC1A14069A93D4D5228F262
B2EC72632BE0245DDFB52938262015A50181D1D125BFE281AC3C0E1B82924476
B92AADE556EA08F9AF03D38710982367D281F085ADA26D2F5F8A9AB4B58D3BFD
F4D3617B5795A7E2752F4B01A7B18152EAF8296D596D67D33F0ED483B72D349E
2C12E095EC15FF12ED833D1181D6E0E20DB66BCF3DF7DC638F3D964D6C827BC9
92254C29830186CDFC60A6C852F4BE91C0A5BEB6B5747292081A07664C56DB7E
5E79E595471D7594B748E40D207C1158E2F14022C8FF538ECD56FFB0C30EBBFA
EAABC9D19226E7A0A94541FB6BF6ECD9A6AB98A5D34E3BEDB2CB2EB3BBA38FAB
B1C19C1D431BA7BD27F24F34D20757B838A6B7502AEC07796FFFA202AEB83E6E
C41889A8DBEF15A8B8E28A2B4E3EF964DB9F0AB92BE4036A01E340D95C4DAC37
C14759E14572179791C5B53BA2564BA0E510A379CC18918CE052DA89AB7594ED
953ABEF4E07C7784A62F49C24B43D964AEC423712F5D2A718DCC4384777975EE
77A97ABC6352436082A42D7DC533BEE94104E5B307B7614BFB1290DB70C30D6D
ADC7CC837A081E05668C248B746FEAD0C79E978BAC58172073269C22EFBC7DF8
E4AEFACAB5265B67CCDEE8D9975E08B5EAB49E298379295D6856928146164C2D
6F34B3B172D9EB8F38B4D15159D66C6C336B931F7CE9ABD9532F7666CD49DD3D
CB06D685AE70DEE9679FF599B34D09B0C6B9095B4BF37C653DA38C028A31EC0C
1D43827F9EBF2C8CEE9BA2ECB5EC1E0278A8120C6B1F8EF5389B64342CD7BF84
FE6BB8A66A20426C8AEC9C3EF5D453D274F5D8D042B5B8B94E538CC86B0206D1
700DAE15D32F7C59CECFFA6D9A2F582DAFCDB01B4F9ADC03272DACCE0AD19866
CF838023431C45AC6099BDBAD7F0D048B10B4367AD9AA449BDD16CC472C9E1E1
C1E22B26DFABDAFD69566D64AD4A27D0F9E4F04D09FAE3AAA29AAC59195BF154
9AD9E8466649ECE2D78CEC2D8A08D5638FE5F6E5F1D8109FB2F21FE6E5D50059
4C657D64C9D23A4D7160D15F346307723D1D8C6892890AE4BE5C052C0F8C1963
609C529B13DBB5E4C0986A7FC215D36359C7EB6E645F79F39BDF7CF7DD7763DF
1C71C41137DE7823F623C13D799C401398670819EC2B471F7D341D4C914120DA
280A22B62630A78E873C8C3143F77653CA2A300B50E7E2C81410CCDE7098E9A9
2CF908F30071C5DD76DBCD7C682A9B290144A04B7742F183BD3B9E8192C492EE
D04679E145A7EFA5A1D8A08C3F05156D7E8E3BEEB86F7DEB5BA6B001BB6A7ABD
B13F41A88DAB292842B1AF3EC07110B98418DC184CA9E781CDC6BBDEF5AE9B6F
BE99002000570FA8E18EDA48240BD1BB72E644532C926D2F5B0F39E4906F7CE3
1B1852AC9442BEFE79B99A690E35000E4508E4C4134F34E36F4C05AC4196A608
F559CA5CF8B503012376B0AA6B35E6593FF9A72C271C213C7BC922A185E58293
BBC57C014A02B60E7032EBA256692236B1E7B529B29D80BF086AAC11FBAEAAE2
967A219B5EFB241B924270F0165A5F463EADBBA7122A238D64B53D6B73A86F93
D9FFBEF5768FDCF5BB473AFBCD337EC3BEEF1EEE489F5AF38FE9F3371AEE9CB2
626DBAF9B49E8EAE4E9B9BE9DD3D3BCDDDF2AC033E1806C2F4109667E641D69A
F958AA23F566489A23F522719EB5CACF6CF03058C9754405AAADA7AFB092F12D
66053B8FA2BA33E39E0201CF8ADA1C4DC298B67160F14FF238AA7760CEC173A9
320D6FCD5755F940484B012BAB47A84ADE262B27D156F2C44B098CA4480EDB1D
BBBAF25633BDBDB90EAED65A840985FCAA14CB5620B30A0AE88E5AA7E876F16F
6204C6FEDAACA62D4AAC46C1EC4C70D964BEC9F642FBBABE34F5B4D16C39C4F6
8436B3F63805D8643D03781A29B927C8E9DA89ABB4B522978EA48B803047A246
2ACD830496ED549B3DD364CF3DF71C89522FECBC5E244A29E8D6BC79F3A05C47
0D43C8C507ECCC98432C90453ABA2393A0ECA64EB0FD51841374B319F345DAD8
C71B43B49AC5F46BE608B05E542372C1F3F6C9096B7FD95037DE786320AF36AB
6F7DEB5BBFFBDDEF7A4312F345009F1033B8286C30846941BD49B565A9B72042
C76E61BE75121BC56353CA23D1CA0AD04476193FD216D73CE0EBAFBFDE5604EA
0066525D987846F53B0A317D03CA3714BEA61D19D26C9202596C27DC8C24BD63
CE8F7281041B6C0B714D5EBEA64519D33476C3F4C7538000A0379ED7C9DFEB9F
2A60B690DDEBB6DB6E7BFBDBDFCE05495286D1E5F22267F541239AF161004106
EE294BE99D558AFBC95DE037AABCE289D42348181950BEE4BCB7DD76DB871E7A
8819566CC61F523D970A6D094EA8EEB3E288C1834B30B71BD09A6A1F53F1DAB1
1929BA3C7B9D32D0D2C4D0E7A9005D5B3414C14C447968234AF431649FCE9C3B
77EEC2850B0F3BECB0E02AEB3CDC9DB161646311A2809955AFAE7C1CCB16EBAA
ABAEFAE0073FE8EB00E56BBEEE75AFFBEBEF7E3718D2465A0DB5CE69937A562C
5BD231250C6561DA47A75586B7187A69C6D4297D49BAB4D659EFE99D1B1AB37B
36CE66D8CAA5D52D66CD7EE68945DBEFB05D3D6B4C99D677ECCEEF0A45738024
87C7A69326F7AE59B7DA26AF6F72EB1989BD7134B0E150C37616480041C94201
3A781A24C6A9A79E7ACA29A768D39AE96F92870ED682919614B09F31BFB2EC4F
2681CC97AC43DF2B2944D23D84B6871AAC3FAA36ACBBEEBAEBCF7FFEB30A1F05
82F04AC8D6D2A69B07CE46935FB74E0E034DD2AEEE3C943A6952AB1CA8D11C06
265AAF0F179AA3A502C5F38EE787A157086253A749E16E55BC4962FEADFDAB98
88AC2888229C9BD64742A3DE323CE12800FFD5D5350DDC4DEEF3A6AD244A81DE
1AAFACA841DE05FBCE477A33C78D2ED21255799656CBFFD39791A56D6C6A5E10
B0E3CD28DB61871DEEBFFF7EFB96487F54041246E7E9894141B39C147D93E03C
BBF4D24B8F3FFE78883E2AE3775B1AEF5512C144C24DA3B3DBEC789B62838902
E397274A63AB1FCF5933E6F5F9AB882908A379026115F58642F5DA67A8BF22D7
08CA9F9DBDF7DE7BDF72CB2DF6495309B6CBA1F2A61EE32D6F79CBCF7EF633C0
0E6941CE6CB7F329C01272CAC6C3D8582F556580A0A6ADFA473FFAD19FFCE427
D017DB3FF7DD77DF7BEEB9C74688CB8B2CA67294007B88F809102B7626E9C167
D7DC679F7DBEFFFDEF8F393FE4D74991EA973882A457D881044292827F1876A1
50C47EB543580E52749B6FBEF94E3BED74EFBDF79AC93F5E659D4E7A2904DD8C
5D6888851C73CC31B6C1BCA964BB4EA904DCAC50040F422C2E329BD2561033D4
86F7C52F7EF197BFFCE54F7FFA53BB9AAF522DE9365B448A7A49F46EB6D96676
3AE0AEC1E7C3F2B035B2C7B719B6C32278A017D36316D485E8E07A72153B41F6
5E9C8032D74A31C9923AF7D7F7AEB337F27C5936DA8EEC9E0C47FB89FEE08DAE
96C6E67DA51CB0DE3763C70B3B08B63F159CB00D6397B519983D7BB62D7A1671
A069410D864CB3893DE38C33CE3AEB2CA90DE526D9B740F6BA8BD715575CF1A3
1FFDC8AC52322CB6DF4C1768843970FDD6EFADAA64C9B469D94BABA685916A2D
BCB87998FA5F5BAF98F94858B6D194F4B58D978666F6D67B6ACD55CB9AF3B778
5D6DFA70A837B6DBEA15AB57AD9CBBF9C6B59E8EA5FDCB67CD9DFDBA35BDFFF9
FABDCD699E3D6BCE92C5797ABEABD78637541F6E6883113EE14951B7C445BC02
B6C12B0A281B9D20813DBB6D3CE14081AF0B4234A6026E3F2CB65B80E608BEBE
C71E7B7CE73BDFF1568BF02249EC505912FEF97B99C6648C88C9E0E5D05F2C14
F1CCD7BCE63536CADFFEF6B745F5D17A240BF2C23E33B86E289256A6E6F1DA5C
7476D50AF7B73A69720FC016536485C39716FB6C089589F195451C53A14EB24A
D5ECD04449971C5F3E3498A42DCF9D3D5DADD6466C55B2DAE0E030E020320470
7BD43ABA25D395AA29C63C51BF5ED03DA4E8F896180F4AFD5EC4645B9A53DFBC
1A9213B2F4CC64BB87214BBC5A74E736516E42079F869D94148910FA6C9C79E6
9966DE42FD81CE93B42590227D2F8EFBF13CD1F15E9011B223893D927A21D268
278D1A21CABDA01E64457C7C3EB4D9257AA94F30351BF4ACB6F7C403A92411A4
880D40B0C8BCD2AF7CE52BA2B5B237C07C42F4363CEC76B7DD76BBEFBEFB2014
F33D53992B1C74254D453E67BFB77B513E64BF34AD69DB9E267158DC8416C4C8
8173ECB30F448C485E82C5E5A9FFFDDFFFDDCC5CB6C7E1871F7EDD75D78D5791
A2798390D2CE3975B102527927D8071BC9D1A6AEBD202DEA4C2DC91F3DF0C003
4D524FB0FAEDFBF3C20B2F3CEFBCF3420CD598D0D973CF3D7FFCE31FE3927AD7
8A4996299CB491DC89C59388BA7D80404568536C7CD1F38FDA5F4DCD433A8889
ACAEF5204BD128C4B4D91E0451C5EF1D5C8818D301792D495D89A4F9AA870931
15E583CCC129D7D28C79235B364A492B4BC389BAC713F0F98DEAB154DE64D478
70DA2809E3A42847E09BE9B68889924449348C637BF6934F3EF9820B2E50BB0E
0D4F096F6F19DBFCDB2C017750AC48A8FEB4D95831B02E24956E930443EB4EFA
EF636E5A7ED743230F876A7D5AD72603CF4E9F5E9B9B349A0383FDAF7CD52E4F
3DBB748B9EDECDB79F5F9F540B1D61A319D366556AE9D2551B764D1A1A5EDD5B
EB7BCF1E0787E1D0D3D5D7D3DDB57479DE1BB7566DF55D0DCEB1B1FD639AB811
3B384901DBB3C0E775F1C5179F70C20912DD343F55CFA210E3432233680F4157
5DD3F1C668E2585E37DF7CF341071DC4A133E961A7159F9B332BBEA0F51AB704
A2263A078196C4901406084FA0E4F62AEC8E54FB18EE0B2CB855CB5717DC56B0
74340A5D996F9D0DA6F6DAF24C9ED28B67607A19B354802F7C269D10138C2375
B3706D18A966A4385179F429E4DC96B6ABF21E83495A5DB674952D8D3DA4899E
8266CB3FD9284375CC872F891E52803E21DD8C8DCFA8D4022BE1AB59DAD72373
BC1002E04D705F215094000EB1711EBC6EB431911E25D1E8AB81D3D81211F396
9815C1C9F640C53F7D65B1C5106BC45EBFE69A6BCCBE26A4615361EA50E52E12
2E58CD7217C6CB712A6169DBC9BE4E188D8DCE1D4D229C72CA29F0FC8518C3B1
0F20BEC904632409EE0FD8956487DAD5B1582176FA5499134FA1A497FDD526D9
94AE28E1B6D8620BDAAE0968C64182178559A5A297F532F16D7B8384597B79BE
5EB0F3C422F871EB41519948D5F6BFB2A35A247671B7C0A217221C8CD4383E01
57DB72CB2D4DCAB0C3C723D81BEFB0A866C9D789D9F37AC22073556D436AE7DB
20BFFDED6FEFBFFFFE22E1328D4B448EF1D0DAEBC8238FFCFCE73FEFEFE543B8
A8223383AA45DF5C7930BC11CB412882AEF444C13441BB0B80938EDF96515958
15CE016BF0C91DD5C68C67507A65ACF0BE42D3DC516E80B833C5B311224CDAAC
49B15E53AE0D61538851710FC2C21F50FC001985B424344552D3B3BF955E083A
CC74A59CB57B99347145D919B4AD8B3340E911B107404C2D43A127CDD636CC07
AE4DE91A48D6CD3E78B3C5B5A77AB7E94907D70DBC18FA1AF3B355B38656756E
BAF996D529E1C515CF6FB0D1E65B6D323759D1BFC32673D391E18DE6CCECEAEB
AE757765FD4BEB6BB223FEEB0369B33B5BDBB4A9EFEEAA0E0C0FD035DE1EF323
1FF9C895575EF98A57BCC2C6463B4885C4993AB2AD0236098EA7EC214AD19E17
59449F6696BE1D8445A22D8B0D51B4979A9177019966D3487E1D53E6A4934E32
DDAFE4BD6844FD0E6FED1FB54C61216D49C0F27098CD40B0ABDBE151266C6868
7DAA000791D51A1EAA2721F751A935321D9C141B3E24F569D3FA6C2DBBBA490F
770BB7568FAFE6A817DDE26C8775DB50F940BE272A66062543C359A3DE2C9252
3DBD3D93162F5EB27CF90A7F3A24529AD9186D502756C0FE9F5E929A17327FFE
FC3FFDE94F086215F9B51F695EBE1512ABEE3B15B6DF517ADAD602C942F671C7
1D77FCDDEF7E871DCA8CD99FD0169C01D65B6BA7F0AC8EC7C48F3CDE3C5C71C5
15C71C738C0DC6060693303EBD4C72C86288F3E0D17A018449319EE79D152516
14B612E1871B5D596415D2F8541F7B268B8D399B05A5C3A38F3EBAE9A69BD28F
2114211C7219180D76F0EC7C52964DAB3B215C50C02A0645A5D921312D25FE0A
22403033DB339A56B6DB115345F49BC47CE49147F0B174D2C4F8EF05DCBC79F3
EC2276027D87D7F10C238C2DEC5A1CE89D76DAE990430E3167C5D32368E7D823
ECBBEFBEB7DD769B3C4B8FE915717F895FD3EB8FF14E41491D125717BFB73683
020F187F3ED94CB342219ED4BF41856726C24827FB13CACBD4BC094795818167
54F9994DB21D0480081FF8C0074CDFDB8755C7816C8153C987A93CFA54E0530E
940DCFCC083AF2CA89F70A6F3C835BE1E5ACAD4045674115FF6847619889B4A1
3BDFFFFEF7DF72CB2DB63D00CAA16231B37CBDAC5F14AC19F6987779ED50983D
0478B0191B1ACA0605B346F8C1DEA0B39B058585C0E18A2D07574FCC0935E1B0
60C102DC68BB3B7D17729FA4239BDB3975A47FF5E25A3D7DEF2BB29DD36CE9A3
3D4958D71572FCF38AA91B365F952D9B3973DAC6C3D9928EDE351B5736DF7AA7
ED473AC2485A9F31B36FEECC19EB96BC64C6F2E4BE505FD9ACACAA1DB9CFE195
D06D267912EAB58E64A4DE527B8009F0F2E1982B79C088087C48854918AD2FC4
5227158C3C61114ACAC26B4D1FEF645955AC4FA0541DBA94B017DDA6BF943FFB
491251CADA737C8D7D4C29AAFDE42015018AB10577ADDA393C526882A4C0E615
EF3B6A1D8D6C9DE96824941D4E130A787B401C29F6B7C306248F246E4747FE00
D54A6ADABAF07DEB45ABA26A7FFFC0AA556BE7CCC9F78D6DBE79F35EF1D0430F
8DE928FC1FBC34EFA5394564B089853BE524F83CB1A2FC7483808F934F565C87
9F51F35EBC4CBB9B641114AEBDDA122405C7A0123B87C3BF2A03D9E3D855D5C7
17C753C00AAA4B2B30063631B06A3228769E3FF8C10F9A41671F3EF1C413CDFC
C409268C86C78336E5B2BBEEBAEBFDF7DF3FDE7D059512598736F4789F17E88C
502AC2C2971CE83A26A6291D16F3112753360ADD48DEF8C637DE73CF3DB808E0
B9049A10A9A1348AE753947300E883EC80246309DE95444C2F7737B16553C77E
E0A6B215283150F6D163A9549FA38882B2BC624C436A344713DA78A73FC46C48
A98AD77F20379C43143D212A92A2704F3E59285C4F405821721A20C53C6F7089
83A5A77881ECB327C597F2755CA517E7E2C0030FFCF5AF7F6DF684886C052667
F3C8CEA0274FE958AD974B9118526BADDA56CC629926E6915F7DF5D50C5B255B
253B52A1FEE88DAC8F6478562C668C5BAB29B25D19222DDA178AA0232BDA1E6C
BDF5D6344B16978ED96D8F3FFE38996C09F110553E1B2F8D9D18EC5BA79F7EFA
45175DA49647FEF3B9164FEB23C355DBD4492D87351CB7E08C85E79F1D92C1E0
B080FEC4D6C386695835654AEFAAFEA15E734C2BABD7AE1D9A317DF3A54BFF21
90B9197C30A0E5D6D5DAA1DE9175760827BDE5D56BFA7AABC9B28E8D9E5A3777
6DD7CA4D87EA4F4F9E1DFA5F0AE99A2D77AD7D28D4FF3ADC59CB7AA6FCFB6B77
EC6FACDB6C5A7767DA19A65437087D8B963CD7D1B1F90BD5955B0F0D0D86D5BD
2B87CE3FE0C465496D5A63D2CA7495300AA97BD9E49C7FFEF9679F7DB65960D7
5D77DDD1471F2D2A72927A741FB229BAE4924BECAF1834EDFACED49CED6AFB3C
0C16FF545F94D4B37F93B9977E3F1EE83291FE508C3B89B4B79241E44BEC3785
9C1D1B5C53B42C0A93274D5EBD2657241BF46DB072D5CA6AA55A6F0E02C731CD
6D9A18563920B5403DA947426EB22F617B1F1919EEE9EE1A1ACE037D8D7AA3E8
E51CFAFB57637A40988E39F94F27EB5F7965059CD2AE46997916C1A8218680C8
9120717CB8268C469612FAE33D17A40DF59852C65EE6D9D8B1B78B9B60626763
A9601D8B23F78B5FFCE209279CA0442FE59550AB84D1AC3D7406C42098D8E397
5F4E51077E9BEC5F40BF5C4703B36D2A361C98EEE9DA86976FCF6E633325FD85
2F7C618232A410D3A854A973FDF148CFD9129AC0D4358AB1A9B0918BAAC23364
119525C4E4C528A2CABC67BA0E884F67EFBDF7BEE38E3BEC4FBED6D9EE45031F
E69C4112AF431BD90C1C70C00177DD7517868E57C08943B9E3CB2A9D56EA85A0
4475188D09F2275923F7F5CD22080B31465AF25F4D8B10A353730EA2B504C333
D7F927F7BAD6AC6D0F14E57A3DE43176C06536365827D570C6DF91CDC39E5476
C066F5BFFEEBBFF419242333C93054691646E3BF48FAF0E098BF883066AFA4ED
D8F0A14D0E86D8DB987E79219615A189436CB56BF7B27DD22858BBC90A370BFE
321B00F12754A927EBF5156E25B6165513612A69C0606BA8DC053869F360CAB8
E4555F76D965679C7106AD2FC82C94123D214A7381E388454179ADEC8CFDC404
E7B2937B9235EBAA7923B8247FF0D9B3E62E59F242DF0661E59AF131228554DB
A037D97FBF03AFBBFEE68E8E504B27177DD687A02539E8A083BEF39DEFD8FCE4
735BA9551B23595FD2B1FB2E03BD5392FABA8E0D960CCD5C12BAD656926A63B0
1ED2EADC74EF19E9E3C32BF6686CB4E495DD1B76CC9DF3DABEDAD2B46FFE567D
9567BA1E6C2EDE38DB70D9DAC56B3A86BB4706935A36A7A3EFA83D3F62666165
A496A50D9FCB17A782DA5DDB22DAF3DA8CC12AA846C5583F440AD5DF2C1DDD88
C95EA69B6FBAE9265B0E3FB77C7D4C09E673BA3E81C2D74B6B3A510A32C4A09F
D21E1273B61DF7DF7F7F530FD88366EFD8B61818183B7DD5DD95B7801E1C1AAC
A4C5D9181C30ED9B4717FB97D9DE5394D88C0FE2CC66CE926C9D3367F6F3CF2F
9E3CD9CEED5AF31E8949873CD5B4C18A15AB0ACAC9504CB81DC261748C48E183
030DFE5FBE32C7F106EAC7438E358F447508D784D17581ACAB398BF7DE7BAF99
AE726415476D5F3FFB493FCBE078747598792F075AC7C9B4E0273EF18933CF3C
33440A8534F2F80810A45462A91D8A7F5E99E104B7919B1886CA5A29062BD621
2AB254B05BF2BF559B345ECE8C08929DD8128869024F3D4485C4BDB2D8C55DE1
77E036B0CFD81C02B805F9ACBEF7728245ED145CF996DCB5127720B2D21336D9
5F4176E82B80683C1D923F814287C9DA0845D214AE505F4B5DAAC5D249F48153
4A2FC2E82A177906A5BDCA07609CA74648D2CA7E6F7EC369A79D662A19D73F67
7D1D2B825AED589F47B461DBC251E06EE3E798508E8293C1CE9113096DB8FC6C
B117915FC4D5D0BC95C69F4554261F109A41D0741E10554AEBC93056449D1C19
A664899955AD73EDFDC2850BAFB8E28AE79E7B4E9BC15339DA674E39E5143382
D93684FA6D83C13AC0C084480A11B88045A2FE4B0496381DF6F3DA6BAFFDD087
3E84CAA40F182903A5307DD042FB5FD9193F481E47667470E970332CC0730C0F
0D4DEA996E327EDDD0CA4993AAABFBC3A4DE49AB0756D62A7D7EFEFDBECDC2DA
5A47B53932A9911FCFB5D5B4526F7475760D6BD5881B4113DDD1D93B34D23F7D
874DD76EBEE9BA7472B2B66146EC48F7CAF0AAC7A775F7AD5AB2A6A33AB577A4
A3F252DF06B366BD944C7AC586D3779A3965F20EAF9FD978361B9CB76AC6F29E
7F6CF08FE6D25DBAD68E0C0EAF99DA1386C2F0EA91A15543177CE0E49EBE4983
CBD7B5C7F69358874D6C0C4B5DD54130C308B12867A63D142CF9C93FEDF3543A
B4A3E87D84298CC62EB487978373B4C6F58043183B57CA7B65B035D0F1046B6F
EFE43DF7DCD3BC01AA924D3EBEF6B5AFFDCD6F7EE3C3B66134C7B21D519B23F6
B45AE52862A3A3CBC17EDFFB0EFEDEF7BE77F0C107FFE8473FB2556760138CE7
E5BE688B66B7C6DEC7C72DA15D24EF044192640C110A41CD891791102B365D2D
BF263944C10DA097B0924D8B1D1B55B921AD5EF18A57DC7FFFFD4825BB853D7B
896D40E561D75F7FBD5973EADC379E62C3F027D94CDF43DB7038D6C020354254
2FA11111E2EBCCA3EAEC373480C25901573CE67DB3D10CC6364B62679CE0E571
CE3EAF661731B1057BB93DC881071EF8B5AF7D2DEFCD9524FFF66FFFF6C31FFE
50B3448097D08E849AA0A458BB745F56E70C19BF66EB7CE94B5FE240DA274D0F
D1F08074803DB56D1EB8BBB52B94A7A07A07F4132B2258193B01242738473232
0DD79E448F4F148ABA67762686513BE69C6FF95EB93CE92EBBEC72E491471E7B
ECB1406761690D45DC3EF7609A59C9ED669E471AF52DB7DCD26658B512E83C93
50F67B333481FB61BD21F884F352BF2F554FB11C442678AF4A36BF43B2D8158A
CA3ACD95E7360A0EA881EE19339F4D420EEB8710C2669B6DF6F18F7FFC339FF9
8C5D8AC3AE203F010F7B6FCB6D8748203EDB63E6FAFFE94F7FC299A63FA3924A
BEF2441A3189D56E8AD80159E2F39EB016F06088CD7C42ECD62793318B9C12E4
47D487407846C98450E87E9BD512F156FE7364D814F0E0C09A46666B94DA66DC
6CB3AD9E7AFA6FF42C66FA5B2987E24DA563CBC91B642B5F5C1CB2CEC9537B56
F73F6FBE77DA0C23F5F51D0C45049D27E91A9DAB929573FE73C7A5BD1DC3D9A4
746DD2D56C64617060F68ACAF4A7B3C9EB427747F385E159FDFBBE6AE7CAF32B
BA5FD73D7DDA9CF9BB6C3B3954B75D3DF23FCB9E98BCA26BF1C67DF357AEF8DD
D446F75F3A9AC32F0E6FD0B761A8755EB6CF473373C3C218DD87422436818D07
9797FC2BE585DA339C5CC9AE9295CC060378017F22BFB7B3C9ACB6DBB8ED2329
FD3371AFE05248A5D7A8EA727F51252788C8118419CF9D2A0E7CF75BDFFA5653
C0EC3FFBBA1DF8BBEFBEBBF4B45260362F6F7BDBDBBEFBDDEFCE9F3FDF74CFBB
DEF52E7B0F94D43613C2056B1AC13763C6341581604552C8F5724146E3BD5800
7B73D861877DE52B5F21352B5AD1C4310368C194636FB651DCD1CCD20E33A857
C84BFD426AD8D8D70A0897DC6EED18FC45452F75F638D8640A9282A65F6D3E31
0F2758321F0D0EB1030F029110A2DABFCB7EB7E3BDD75E7BDD7EFBED7623D39A
72B3043E0A8E6676829B82FEE76770A1D7F6972798440173E015DBC72D40E5D3
7C86C27CE27B0AD53662BB0E1D06EFBB33E6126296A4230B44F4D52C6825F889
5EAA87952FC02561E1ED6B8ABB6CC05054421C617FFAC10F7EB0F7DE7B8708DC
F344DC58DF25BC34A5EAA1E87BA8252B1FE9D8D1C12C039B1072134C8BA69132
36F42281843424ED7220B7DCB3F5163DCC85248F1A458F3C5C0AD18BB252C496
B13B091A811222BC24AC1671E392451B5CCB394DA9B033D443D30E4BCC881323
1C836B70AB372CB4FE49C350EAD1F1D1C53291C4FEF0AAE9041B4161BA1D702A
059A055B91443C069C782B8353CC6A1181C706D92AB36763C058E4CC8A844B2C
78F2FB919F80DAE80ACAE2EEB8E38E0F3CF000A9227B3A22D8F6FED0430FBDF2
AACB8706AB49684C9D561DC8E772E6478E3A7EBFF7BC736565B6849257339357
376ADDF54AA5FAAB5FFCF1DC334E9CDC37B47AD5735D61D26078494F4195790B
8B10260DF53527BF6587D561206F725BEFE80C6967BDB96CB816A63E1BE63D11
6687B072E38DD6AC9AB9F48066BA24E998BED39BE6CF9FF6EAE1C98FF574BD2A
0B7F7F7255675F4FDD9CF4EA9291873BD2CEB5B5FED5836B06877EF0B1336B21
194A46C2582038BD146821526873655ECD638F3D4602C8E77D4AFBBC64B06291
9320305977C30D37840961F0A5A3A76B7AED5B521FA5AF8CA17D7550A9F5644F
30D1E3E9BBAEAE6E3CA4E09C3F14582957A421D23A2DA7319B36CD7EA99A3F5F
CF2A3F8903497557289C92B3CF3E3B4C185E7F592F481FCDB1B633402E933E30
C1D5E1494C9086F4E9736DDF520882BA1DF123B643EC004316FD1F077129D82B
404B30DC747AE9B4C369B7A930E15B89AD854D1AD2539AFDA75AB2F1E607382B
5595F675931A7BECB1C77DF7DD47EE191562230735A3984435F63C5736855C9D
CD9B4925FB8D5A838D576973D965972D58B040A48F73E7CEB501F828CB987B9A
309A3DB2495EE57224D30502B27F9AFD74E79D779A75A29EDB9E33C86F459998
5A290887C1A0526E61EBB270E1C2E38E3B0EBF9323EA3BE4208910BB6216647B
A86C03D602ED6AFB8009C4EBAEBB4EF79589805013FE96BD64376281ECF19F7C
F249EE6E57032D91B495DB7A7B57061C7586B637EC7909181068E1497394D9C0
20A8AB244A8F5C0B66CDEE8204E3E0830FBEFCF2CB45782945EBE3F61C76CA63
3C751AA34281B139F949D6C0575E2A7890B9068BD255681D12FC764C801D40F0
A970CB983A58ED0E09219025215F43208DCCB47D0CE2333028A4BD7DFB483B32
F608A4CF052CF03587E408D8FF685F347A28B2EF766A385338F13E620CB76288
B16BDF5A31753D1B44A9663F2FBEF8E2E38F3F5E9D09F00730A7C48CED8B9DCC
D59A3563E3E5CB96D6B3A1491BCCB8FE5BBFF98FB76EB36638CCAD3057EB7FF2
A6BF636D164656379AB574DA437F796CCF5DB7CA217AF5E0ABED450D9D632342
EFE00EB36B3BCC19195C53CBEA59254D9A594FBD526DCE684C1A59D9F578D8F4
85C9D37A877ED73FFC0B7BF8ADC3DA47D2A1C9DF7AF0DB4FDEBDB863DA92FF59
D67CE5D46C78C38D1F5BB274E0D915C39D5D49B3FAE813FF78D556DBDFF8B153
270FA76BC29AF6950DB15C1E0A7D88E2498ACB6DF06B34417F74E12B7D3F6C13
AA2663B3D19CFF13BF04BD2CE101C7F580DBA3B85E42299F6F3B12176770706C
4FC5BE84DBC181E7E417E318A57A9B2D926D93085DEBD6D9C53B06074D6ACFE4
60E075AD5EBD76A38D36C47C5EBA74F9D4A97D0504661AE93D9BC4534E39E5D3
9FFEB499FFF84FFF4F5EB8AA60D9E14AA5B658D39A8C2EF8F393562AC0F7FA58
16AB2F63F06B93C57E9F99E373F00D44D1229E9420B8CE3C2A1024B669DBD1CE
3F4E5228AC63B027ED2FE1EC74903C9A9449101B1781475057AC8BE8F5437479
9931B4083ED078F38C3D28327A8510C7D957ADD8A3DD915A49B52C55E5B46A30
DAD366AC0834ADF5D8AE584F8D1120D42E7CB0A29E57C98D7DC0CC0EACE95010
2CDBC3DAE1FC9FFFF91F5306A69680E60AD1C6E4E87694CBDBB0ED22AB8B5728
E4B5793F2694E90A05E88F449400473C851D25FBA40968BBE6D7BFFEF50F7CE0
03BA179524DEB6D381A735B5ED1962E07CDEAC9F638F3DD69481691D82DEAC6F
3EEC5A51DF55F8BBB56A8DAC55A3D9489C54B281BDFAD5AFA63EDB161D420C05
F6B92FCF0B622B449A27F8BF5A70DC087E5678D6870AA48009ED841863245960
57A3BB898FEB485597449E4EAECAD9439B138CD6A4662F8B15F00216F8F3AB3E
0DCD826A5FF9D7993367DAF5399BA6CEF7DC73CFBBEFBEDBEC2441D2D8EAF3E6
CDB3C345DA5B757D66ADDA67306BECF4FDE31FFFC88AEE2064F19048180AC03F
436C5FEF3D1C76ECA69B6E6AAA629F7DF6F9DEF7BEA72C0FC4B444F28647862B
053F77A8D687D3BE634FBA7ABB5DDE316D4E7565583EA66A99DC9FD49381C993
A777A45D77DC7EC7173EF3A110565593CE7A6305FE3DA802163AA764A9665D6F
D96D555F677560A4A73EFCBF597B0F384BCA326BFCADAA9B6F87E9E9C9892433
644110D0352CE8222614152448CE022A0C2279244806092AB02C208288E9D3DD
357C2A98C18023202230E380334C9ECE7DF3AD5BF53F55A7EBF0F6EDB0F2FFF6
AECBAFA7BB6ED55B6F78E279CE53C906BEDF48059EDF48E7B2A91A36C31C2765
FE1C3CD75148974A9B169AC28029D4CCAAF0865FDD576BF46E5BF36777CFBD5E
FDF3CAADFD7E219F73B70D6C0D2BBDDB2FAABDDA37DB297C6FC5ED78F5497D09
2769186A92943F568479841B6EB8016A42D1479BC1D7FEBA8E0FBBE64843AB5F
7898F041D9DF9A4A8F70074A014B884DA980459E602CDB394CF84585CFC2E0B0
FFE29CD3E4374AA5C6843E371C1F6975CBE1382485C900C56A8A8E919152CC23
9D2B9518118A0EEAE5D167C53EFBBCF1E9A79F651F62599D4C0E712F4E95DC7E
BD1FBE236516C1A24E5C23A4848A633168F3A08A23C61BDF6450D24478DD368F
D096142A55623295250A843841586015202BA96318A224EA1262E8CA2BAFC4D8
EEB9E71E0A23FC12D2F988238EA0C296873A154A5C0CB4ACF150EAC8EEEDA3DC
E1E1871F8EAD2C0C2DFB14AD5DBB9671330C06A2047284B20CAB1F474AA6DCA3
747D18C38454BAFBEEBB2FBEF862DBBCB03FCC7D7024BBEFBE3BB4A0A28E8C3C
63C6DA603ED4ACFC8AB89A851CA69E9604B7137850901B376E640C8A14F66444
91EFFBE8A38F1E75D4519C61E84555D4B0B6556BCDA8B5228DCCFEB2CDBBB12A
9DC43DC7DA3CD2E0702476121A37C73EC4CC73695849853F29D4D1961B4BCE63
A4B7F6DF7FFF238F3CF2820B2E2073354748C38B14195CFAC8EBCAC6B8E5202A
DFA7BB1F2909BFE95AF945BC3296ECA5975EE22473C9948EE13666849963504F
24564C1238C9F8B362124ADA1142A1A02B0F1DAEC4D7A93B6D8F50DA510693D0
D46D3AF8B4D34E3BE8A083702E18C2C5B443AC5C7DF5D54E425E8D47C0A0BFF1
C61B1982A6A2252CC0CE2213CBC6EDC4FA1613FB490C4270C6F057F2818BDA42
D8F59D77DE995EBB7891D4838842067FC2895EB1628549A01576C717E2439992
E09925F843804D2E28A504E30182EFE0F7E79E7BEEEDB7DF10F8D986DF328E6F
DC591F3BFDD6DEED0E28B7829E72872D97F4B31FCC0C52A520EA635B19E87FFA
07DF5B614AAB228A667F9C1F42432D923641A3FBC3070EB7C25433DF1D9AD142
D8089B4E900DDD7AC64F17C2663EE36EFAE15FD373863E76CC09DFFAE38373FD
CE743DBD2D68545E285D71FF1DD0C61B5E7EA592CE54AA8D52505E5A6DF5CF31
03A946664BD9EBE87EE2AA7B4DA961639D24B469FC31DFC1405D1BB051758066
7CD4C18C8F45AB78D724D52B582966FD6C928A8916DEA4EEAB63D5554E8A917C
6DCE25CB24A915F0510F764A1FFC7E9ADC9E6D5948B5D8C9CEB60FCF1EE68B41
426641C8E1C2BC1AFF442DCEA34888602B694F6DC643A2E451D17D5449252363
8A1E0716A1B91C1A93E4EA299570BDB62F8F90DDED80772357114682A3C5D8AF
00936A32C187F2590A16EDB9E79E4F3FFDB4B42015D8BEFBEEBB72E5CA0B2FBC
108240486F8ECDB18A4D899761E10AE7C776A9F9205C0C190D3F18829521688A
3CDBB8C330301E16D590494E45C6C66ADE2E19C78CDDA4EB18C414D66F79CB5B
F052ECBD852FAA2522EFA0F1E3AF5C3BB118DE7BEFBD679E79A60D21B6F18053
114A9BD87480FF870761F2D9949B8C1341C2F3279348546B2AFF2080454CABCC
286312DEFCE637FFF297BFA4E5A11C1EF14AA447E049E15614EEC39698B82D7E
B96CD932B8412C6E91D508CD0DEF449945DC106B845B99187DF3918F7CE4873F
FCE197BFFCE5534F3D9507508509322FB439D5FF671AB01BDB1ADA36EB180708
563F9D218A228C9B9A443890A869DC1888C12E6FD532C964E1A3F5BE12C184E0
D1D72433227611DE91D938EA33326370A5646D381638D9C6F789EF90671FCFC5
8E624C55303A637930C60A890B6ECDADCB42703D0EE361899D3C0405787807DA
617C2E5787A7BEED717C77F66C5EBE7CF92DB7DC62AC4614947BAC689274B569
95DAEE238A0C63D52F71F78649C102D376C4968749CB0D27E91586D714E088A2
8F181AA28A320E9E9EAAD4FC4CA1E3E44F7DF6CB5FF9DA47CFB930C8766DF50B
4CD2AB94C090A8BF3E3AABBB581DD834AFC3FDFA0D5798B0DC996E356B7E2A09
A10B2DCB6C74E15F534DA786397203930AE0D81582C23C539C512E578B616E56
2DBFF6D7BFCFED9ADFEFD03DDD2DB95FDDF38B51C71CFCEE1D57D65E095B5DEE
DFC2F79E77F2EA59E5F4C0B0576AA60A5DE9566664DB7061DECC4A3832376CFD
F2F66F99CA586736DF6A3868C3D3F08EB07ED6AF5F2FBBC76E992346616962A6
F9A9C2B513D4FD8C47601A07464627FFCB28A022FF349EB6DB6E3B529D9046C9
241D1014F58C964F6A89475471730E05EF70DD75D77DEA539FE22952EDDD540A
381CDF34699AF212CA65613768864B4CF004526AF3BF760997686FC533A2BA78
3B7EAB53C7EC08DF5F54299A5911A862337DE2139F804A20C409E79009215EC6
FC999D426009C1D1471FFDCD6F7E1373CD84B193147ADB7C1D82E7E02BEF79CF
7B1E7FFC71723EF397C432506812ABC994B00D92A280BBE4924B6026F3B9CCEE
886E9A3A497DEBD8242B483A5F522672E36A924F38E10438CDB8184B7CDE79E7
1112659333A860D424D48093AE3BD91C190B552B43D91F133F825CD19953FBA6
3668A2EE3FD501C0CCE05DA8E4B85775DEDC094DC4A89219B7C73B92B283A923
155F419DC3BD236E88E96105B1D5F8CC243D6AA880C5C6C737A204DC69A79DD4
458006106612C3C3147173F2329A29B63B8E9FD99B441EB04C013281C37B634C
4C31DEA9CE17E7844D26682EE0B951D666FDFA4C3A26D36E45A7063A38E0E6F4
5254FC94AAD8CF709BCE3EFB6C6371A7A8268A860BF7334BE7C3A489B5A82482
A44F00B5B510D1A40B35E3A15B7619372D66458F76DC7147187624D3A65AA2EE
6F0BDAD92FCE682DFD457A36663CCD326F8E0160EF51E7E1329C9DC30E3BECAB
5FFDAACD22622C188A1D2094E274ADE6107618C658B1716C039AE694B9768ACA
24462766608F3DF680FEC07828A619E8621532878437C20FF7DC730FF43DE650
F60A678C004CA687886090B68E30957E904EB91DB9F4E0D028C6DA4C158D9737
35DFF8FD99D82C88CC8558D675E1D4E3DD7B7636E592C9A74D69C860E61A6513
36BB3A8B23A3651A52D408128FB9779AC0336E542B6CB2A1D7F453A530DBC2BC
F6B4DC8A3BBB366BFDEF5699F9DE01EF7FD30F6EFF697E4B77716EAD62D6CC39
64CFF21663D698779E7AF4B3A57FECD13DBB9A69FAC6C97AE9DA68C3ED983154
091604339FBCEB1BA639646F6F01D4099E5231B4498ADD95B3135A7B221F803C
0DF94EBC9E1513A45025606252F983CD4341CA70911EA4138D953AE38C334C82
42506F6C0A93B1D830BF6627E4C8FF4C3C086E7DF2C927E346B4B3A621F79F08
009B3E714D4F02AF2AF93BB69031AA855BCAEE25A7E1F144F1BFF212088D566C
87C1617AD8980B3BFECE59A0A100F18D59B673422AD6B471B9FC8A3817B1B4F4
E16878D2A1A1E3ABC1B8E3B95B6928F15C09A86C12E56A3F4B11368E9FC75B0E
225F4D7DDF18BFC25B13CC823BE3645E7BEDB562AEC050F1FA1C36239677DF7D
373C4EE25745FD288386436D0BF5D3716F4DDD3ECF583007BD8B2AD94DECC713
D0C76E74CA028AC155B0E4206919C9E4DCC4DA92898F3649030C2A51D79DA45C
C1B1BAFA50CDB0C5A189EBC8E5A20957A5B43DED18D5BC7169C4946E43D631B1
9FFDEC677994086B2222891938AE23975B7293687FE5E0DBD0D4F6F83563F656
6158722A83983112E61A71E5DBDFFEF6175F7C11C2DD23515DD45B2C6E03E08E
3560C7EF397B7859FA7F0CD24267AF5AB58A0DC6497FC18EAA2AC2E6D6523338
1E2E1BD29F4A9ADA7EFEF39FBFF4D24BF9155A812CF360E65B9A491D7FB95598
C5847303C38EE46536BA581FA2BE4502457E155A33DAE426C9A16AC76A4BE0B6
583B988FF83A9E423B122361330C5266DA269DBDAF48BEFF2FFFF22F2B57AEA4
39E8245C1F5C6BB1B2DBA8B489B2D1662A15CDA1D69A529BA7891624D58C8078
5C3E93B4A2B28BFD70C32BAFBFF5F24B3EE7366B50A97E13F69681BBBA70E1BC
CD1B367714BC52A595F6A2345FA1901E2D35C3886D3F9AB152B5918E36A7EF65
73A974A68E1BE6527443695DBDF5AD6F7DF2C927A192D36FAD349CD037213CE0
E8CC876ECD31F0214C107AAE99D5ECECFF5BA5735ECF7EFFB6EF376EF9566F33
0AE0FBE9910F5E7CC2FFFDFA63666B66EFA30FDBDCDCBA38CC0F748C0C5607BB
0A59B85675373B5475B77716FEF56B3F35C166CA7302ACDAEAACF0C305175CF0
ED6F7F5BD425122637DE782344226603DE05372AB7AE6C2CB1E091BD47079009
C1691C4839BE6AA7A1ADCE8CAD63D1809B18D2A5D6A2364ACBB1D107E451E2D7
C4FCC070106FF73FA28EEDDB4E9A9DD296A24C79F8E187E18AE1CE2C2B124A82
8E08379C02386A2E411FD1C6128709D90295B113F703100B2B190D69AF11DC0B
8B9BFF3CF0C0030F39E4102C920D6B6C03223A63BD8A235145448F42DC8A4538
497DAA3759FB3093707D087F64AB0A9E4CBB91AAFC398C7CEEDCB9D822DFFFFE
F73FFCE10F53B25029B21E9FC80EBA56EA5D285C25E99CE8BBDB763DEF8FBBE1
D1901A0C5571485C179C70089DCEF80333709A5C3BDF57B916DB0662108F849A
4C82920E82D382A9A0B94A9B8F6786E617DD26A5B826FDD0D0E1D21367A406EF
36AC811FAE0BFD5DDD56C3E305D4CD34DAD8711206CDADB7DE7AE79D777EF293
9F547F087E30423AB8D84EF82F190938061BBEA72A1106B119A7617447314393
808318A2C4CC4358D822585C3F2CB76515266B99A6398FB4B5F952CB962DC3E1
67B991971E8335A53231AE877AA81691ACE162280CFCF7BCF3CEBBEEBAEB18A2
508B30DE568229B448A0EC508149D2582C5B3209D10163FB6ED2239CC1157E51
74223A2C785932F45234610F135DC895D581D2EB73FF733C58B5DD77DF1D9E03
8316931A64F2B08D0511E03F31EDF8EE5D77DDC56BD45F5DC3B36BD574671A25
342664CCBDEB5DEF7AFCF1C76DA3AA2DA263270815D2A433CD8DCDF015EEF393
9FFC4412C6062E980455B060C1022C31BE22ADCF23C90C0B74AE5F2DCF99DDE3
5746E092C4AFE995AA2D3FD70309DB316BD63EFBECF39B9FFD2C9AF959B3A2D7
195D3B5235BD338B5B06CAA16B5A815B9C3113BFAF0CF7DBB597EA5D9D7D73D5
4F9BA667021F1E70A4E0E137E337D0F761CB3803F96D7FA8CED86ECEE76FBBFC
C4F71D9FAB16FC3035ECF49FF9B973FEF8DB17B7BCF0F7ED3FFE8ED16239D50C
F2E1BCBE91A1EEAE22BE371A547CAFB5244C3FF7C84F72C138FE388EC14D08AB
2996638C708D7E0B4D4FD9B8663C6529D794F616BE45B39BC9384692B96FA749
F1286FC29B501951E9D8C078AE202409B4EFD2A54BFFF8C73FD297E3EC453136
13B3BD43F35D7DF5D5FFF11FFF71D8618741E2483EEABC99D89D223CC14CFBF9
2715307E0F8D72F4D14793CB10FFC40F343CD99058D0CDFDF7DFFFA0830EBAE1
861B086552CC81729366ACFD38DAE942C3DA895ECE884A2DD5625DD145F693E2
08A9AE6896B2EA838A999D030435E416E4658A163A56C746657D842AA7D72B32
265A6AD28854F32A27E580B90A981F8A5DA2FF3903CA3A68CC22DFE1E4B0E893
93C3B83ABE8B23AA50893D78339E4CC05663534979650168A368125A494745AA
014C1441C5ECCA493BCFB15AC46890F4ED14539AEAC32EBC5C17C61B28F727BD
588D2B9849E219A3E4A25F45D3952FD2468FA50F91381CBC33A1FE87462131C3
0CCBAB5E0BC70F3F53A4DE7FFFFD279E78A2493858C856662732DFF296B7FCF6
B7BF15D5949BB04FD35E816EB67BF84C8FB1608D99B604730A7C593F88FBAE47
39E0C8D38502C6B021239E7BEE394C3BF6091E44BB904B899F71011C568C8AEB
286B06F7D977DF7D619D281B47E79BA1236A23BC0EDF5490692686C8278C5BE1
B6D893F8016E311B6E9AD8383EF4D043AFBCF24A82A26D76D536C44998D41411
070B9B92915BC5A5EC1DEB2444AD0A6B7187B3A0857B158248E605FEA9AD68D7
4D39096BAF7A783024C6FC17531EC40761FCB89280E736189174B0CC3293F4EC
525A11CE09F60F4FABCAAF21159F78E209DC1C338625E60C131CC77B527F5C1F
7F6AD572EC9044BF2F4264D59AB962576DB4E405634EF6BCB9B34885D4F443D7
319942114627F62A7D30CC2D9E82BD412383E1FDF3CF3F1FCA82FADE596A7233
9D544F2E0279E18C0451411B96B998CA6C1B6A14837C6DAD57CCE51FF9BF0F8E
0EF57DF8C00FE1A9D7FCFBC5994AF5C12F3EB02930C50FE6BCA5B991A1A145C3
EF1CA9841DE90541C52DB79A85CEB067A4FFC56FFE62C1AC05782F4E665BAB6C
D2CC11432A2F53E104A82D0C18DFA5D1891384EB8957E0DC9E74D2493FFAD18F
680E2A4129337D9AF365926A141E2E9BB155BF577F2D62489F7FFE79D60A9998
8F39F2926D7219DA11E419D0EFE5A1139B308D4BFEBA42D061CC7E8041A83A90
C3E52F196611D8CA7E04C3A1A2C8A043C9A814F5AB49B27414A95284071C70C0
DBDEF6B6DB6EBB4D547F2AF0D741D2539442BEF9E69B3FFFF9CF53C5E24A1E09
6CCD3BEEB8830350204B45CF5ED258341CDFBFD3AED6D0BBC871E48453AABA71
3B231E45F5EE8084827974EFBDF7F26E983446D7B95D9C9836120BA4F552E892
502F2690A465F9826A6A463D4AD35B2C1F6AAB6093CAB67D840C7712AA48BBC0
49C9609BEC4DA90486E9788D00044C7F7202DBD0FF6D1FA5AB051B6CAB48B105
9CBC072526C57E45DBC8A645D48BD07AC5CE8722B433460494F11A6C0CF64D82
58C421649F79AACC30A1E7B4A1031A2DAD4C45B1647462DAA1CCC2B822C5368C
547B464DCFFD390D28927130FE136B8A318C65073263A469B808A693F1DC4247
476528BA92205EAE0829BA68D407560778FB15C664F7BC791FFCE007BFF39DEF
10444293DA0EA773C09887188E7B3BD79DBD924E39E594FFFEEFFF562E530744
C2C18EC48AF6D95E5CC762461384C52EA077C77374CB81E68740332265EC09C4
002EBDF4521C739C29166E4D54C0AA51A614E26FA4AAA19557AC5871DE79E74D
4349DB26D0EDE5E361A48CE21CF244930684F56382B0B5913F7FEE739F7BF8E1
87E9077378A9C895EA0E5D6F5BDF9071B0E49D41ADE17676A787366044C56214
D3FEFB9A881377F6ACC8B21F0C3BCE3AEBACF973E75C7ED18591576B823DF7D8
EDC5175F0C4287DEC285175E08A7886388E67F76A530B7E8CE4A379DB25F6FA6
B0B93C2774DCD12DDEDC9D666F5AB3A1509959593FB0E33BB75B7EC1A736AFDE
F4725F7F7151F1DECF7D29D56F726FCF36F70B6AA9A6D93E935B03893CA360B6
0F876604614F4FE78CECDA6D6B7FF0D8CC9E0EB27B52244AE46AC330768B69FC
EE77BF7BF8E1871BCB7574120A6125209821C6A1602C934D4DB05B3E1B7F847F
324941F0A4FA8B896746108F39E698471E798406EB75D75D77F1C5173B569529
16118FB33BEE285FE308BEC4E1DA296B0A38956DA8A9E13482F89F076149F4AB
9C8E2D158DD5CE0FA3A48BC36DA44DCF2C91209AA2612276461637A71E0B6362
28A33237E273E648703782B02834791386CB14D6C0EE64369E69791B0042D9ED
241D70A93FB84BA8786C1C16679282D5CEBB537993C6CF4E0AC83A26E3C476DB
6D07E54A79C1BA55133BF7F646144C97F9302DA2133720C34D88EC60132A6E50
FC80BBD1726CE315C2A305CE9CEAC31511F584639558683338491117DBDA2B4D
C831702BD3B964DE81F0D1A91AE618ABFE0FB762BFDBB6F60093C2734C5293AA
4DC80326DD46B01B9FCEA913AB36CD2327A99391A3AC238365C5E328F1B903F9
A79D76DA09734BC5490A686649F8834D3D6DDB73F6F42A270257862A41839FEA
7C911E99D81C227EC7865A1AC54A44F5F8B07522CB358E18170A7EA5A6720ECA
04F290E0AF471E79247424253B06036F0C86BC8979B82013B9EE2235A325078D
A56C1C4F01A9551526A1E6206A1D9741D5DD74D34D7834BDD8FBEEBBEFD4534F
351694CC6ECCCC38B6B1482B79CCD9E6814BC06A6CC13B643AD8E509DA9CB22A
180EA17C502C8715CF3AAAB6FEB6E3F08A2761E6F1FAAB56ADA2317DE69967AE
5CB91216958EC9441016370FA52B5315D2D9ACA9237A9CB211375FBF7E3DAE84
ED026583B389FDCFE0B3B1D83A95ED8253B87AF5EA258B1746945B8DD8C77023
C6DCAD5BB6F44695EEC3D9CECE7ABC819D3878DB820181170CC7CE5D577777A3
5E55BA84DE0E5D3515914797CD29A6E667C2D9CDAA5BF29B266A42E816823057
EEAFB7B2E5DE855DB5B5B5D33E71FA6D377F69EE5E3DA5CD95A091F3E7179B4F
6D346537F7C15DEBF3FA8A41B991CD35BAFB4CDA649DCE74B9C30BE7E55B7383
674AF5DFAD3FE39C2361E1F1989B8447886284101C6C27CC3CA53477A3F220B8
8CE93C56ED4B8F30DEC02D277813FD07BB51DB540A98FB0A17EB80D3602239AE
4840F14F1C134C38D68E743D8A861A515132E8276788084CDAAD70BCA02D1473
73FE97CA90546F8E63CCB3AA743A243EDE84BA81017D6A5CE545C8BEC47A7F86
13C55E44CDCA2027CB1C4D624CD0AFE2E124DD3967508E2C03D7CAFB727215E8
13EC8BBE0BF5AB486EDBF026260EE04B03F1978EC509609307D92D756513A8DB
815DBAA3982DFD5AC63AA44EBCA453A6ED6E7260424773D5612043DE6154CA19
6B0670FD09279CF0831FFC00875CBB678C2E780A456897CAB451BE85499D801C
D3DD77DF1DAF8F8DA8CBB8F5553149652C8EC069407F84EEE389BBECB20B641C
E33F76E9972D64892665D899C7956A893B8A6718B30459B666CD1A9C1F26D79D
A41C8B0BC1C3135AEDDC19782011348D09E1F8B45518A2645081B41B141F2681
BC311FC1238DE340760EFC9E594F5972DC907489F8150AF4A9048470B35C8231
E0B4EBA81E3F9DCBF9410BB6612697833FC499518A94C7011F51C2A934888503
DC3CE294C6FC90490A6F871579EEB9E758CBAEBC1503B9F299881267A2819005
05035427CDB7E3C9D2C620C4A64D018BB8860F72E2A23B110587E3F9DB5B498F
ED3061667012FCB60C507C6BEFBDF77EE69967986CA2656C2650DDD93613A954
B8B22A16C78BB0699BC82C83846BD34C8817DA05C4147A5C7D46A170066D1C80
B6049F4EDB9113AE3A1CC233A347FBD0A92184505767B15E1E6D35C354DCEEA8
E2F22861B74441F2FEFE41D836D8205DF87DCA148A510E1847B7A777F6C0C060
77EFACE1BECD8C9009F8F2C0030FC42995547AA19BD9DE093AEAD85E5ED3D42B
39BFEC143B9C6076A5DA30B39B5E6BD42BCEE9AE412D9BEE9941DFDFB19E1BC2
B9F9EDD7CEAD1B7FCDE220DDB7A551FDD74E93C32EF55375E3364DA3AFC3FCBA
EAAD728B5D11950DD98225F1340FF881447E102C0A3E336DA108A228B8DB242D
0F3E04ACFA182AD0D2966BB73FDC5A826ED06C85E3FB852F7C81F5A2380834F5
D41F565F1484CDD854946D1FD6B9E2A6A79D76DADD77DFCD27D9247CC6620056
B12CED113C807244BE94ADE029A7047A74AC3E6EDC97DAE2F66E3313A8D81920
15C93B3B93E0F79017B00D2FB9E412EE8F36F5460C0853B9FC0DB629C64F7D2F
AF5AE324C7024745C490B1BA70DB0B19249CFEEA26B4D75E7B4172612D6D2F4A
302E6D20D1D688F1D149E87C693170AE6EBEF9E60B2FBC90B20917DF7EFBED67
9F7D36D92BC5462B420CDDB3187FA04D291F211DB0C9886DC6B70E3CF040084A
78549C461A078225F330636EE5424DFA51E36463110C3909CBA64A4B29C87801
9373CC17522E33CE815F2E5FBEFC9A6BAE21CB31436A02199A2408494B4B1DE5
308D6A9B6A63796C2C8289E34E369F391EF1A10F7DE8DE7BEFF59386BEA2EFD0
26F4929EC7748068D6703599A0C5088F3FFE78AC05A530E68A65668C58928A88
405F9CCC0B2EB8803E258FAB264D7EA119EFB8DBF18396D503582EB26AF35417
A0823D99290206F21176C10C9683EB1ECD49C135351834DD2383C36E9870CE44
43090AF94CD4E63BE51D73EC713FFEF18FD7AE83B9EC15B3A6516FF961DCAC8C
FEA51BCF5503BBDF9F3B67EEE6AD5BC6F01333BAB1465B376D9ED53BEB80030E
F8D5AF7E15E5BCE3DEC39974C64DA59906121F2426F017BFF8C5F0F0A032F134
BEA977C929C683033BF2FEFBEFC78667212F2390CC3473073228625ECF871345
0F5B7C203447D4276DCC7C191F2BB2174E192E8652F027880E72B532B9C6F927
D081EB62330DD89E137EC3FE7AC62A88629E9243E214E1D46083E97DB9736C3E
A620A18FE68AE34FFBEDB71FE4A7B18C660132243DB8576D4215892FFC97C464
9C1F3FF04DA7D9EDADDBAF1B5A571A094C8799D193AD458906981441A3860D89
3D1C7A69932BE6CBE5AAEFA57229E3B6FC0666C2CBA58A4BFCD4BC9A9F33F59F
CEF153C3FBF6D4DD6D663B63460BCE172AF386E6F767227FF7B8E38EC38A6BAB
2B3EEF4CF8A8199D5CE43BEFBCF3DC73CFE50187FB71D9659751F56EDAB44904
678AFE0A134A43961962097027A189956DC7AD4E370F0E319921A4B028C7689F
91CF5192734A05CC3D04F181EFB495DE5334130EAE689BEC0E6EAFEBAFBFFEA2
8B2E52165A4529ADA417B7E23036C0274C287095BCA49B480F92DB94F48AF8EF
C1071FFCD8638F1160C28D8E338CBDC50A6BCE9D6A0F6C5A54C57E172C5880D3
CB2554E293D34AAF5A644364AB5EBA74E9AA55AB68DAE85812CC2689C991D376
3EEBACB3EEBAEB2E4A163B8D2A01EA582C041AB328128D4587C6364DB412F015
BA2666BC65A7F5E6F9B179197FF2939F40AEA9E658CC0352D8ACAD62C1227712
BE8815BCF6DA6BDB5A03B57DB8A5987DA78BA92277F9195C53AD26D3DE84CED1
0715028ED686E069A79E7A2ACE9BDE94A61E4B6FF9B30D8C2410C6B5283F8DD5
1FDB2EF553B92DC3F876F4BE2D4768D73328AE40ACB2139358F132FAD361D2C4
82F5694CD48918597BC906C462005C08BE755BAB60BD02052891266C8F8889DA
61871D5E7EF96511AED1ACE4D956C12E45BC8AA64C921822C8204898C222705F
A3E24088D6708EC28C13B99B2BAEBA12167D77B1D0373870E2F1273CFAE8B75A
26AC366A5E2ADBF49B1D1D71D221A0FF44C026EBF25BAAB74965D27E33E2D28A
EC182F8AE808272572B18ECE48BFE2B20CDC086C9B540ADE4314124CB99FF8C4
27B0FA782FD89DBFFFFDEF7FFEF39FEB78720EDB5A95D03DA09CE57E9E1E253E
8DDC4B253DDB156924B535CF1DC9CED4F6D84C8652E466D31130166B8400986D
383E26CBEC3F61A72D59B2E44D6F7A13AC16B6D31007386967180B24B5087B6F
28EB695B6F9481728B4970CB540213ED32AF9D1891C7B004734F544E7890DA8E
31AFC10E25A4DF8AE051336794EA43DDF3D3C303CD3DDEB5EBDACDEBAA61B9B3
C71BEC6FA5B3261F2D388E4F2EEA7E376A66CD2B5446E17B4705C638AF4D936B
3A9D7E66A69BE96CA407E697529B52434E6B6B763B536BB9E9EF07DEE6190D37
8AA310C9EC594D91EDD7B4DF9AEE10142DBCC7356BD6309A4B55D5D68D4D15EA
26B6F29513A4152EE9C4B0B6F41DBF684394DA0A08191823D4490E866775637B
CD429A74237294A256A78E610C8AE809EE7B92B1C959A411CAE327C654261D09
B0620C90A06D3B95A20D6ADBEF4CC752FA4F4CC008BA457A3C9A210C910966A5
E9133F2DE53E862A1EF95B6EB905EE326D1FEC398C9C695A92F5D8D32A23A38D
CA43F254CE9C5088B8AD0A3D8D95306690004EDED5575F0D276CDDBA756A3C2E
0606292DAC257EA6A941CF0FE3C4232E883F26368D57AC58017D2961C45D85AF
332A28D5AB90801A3ECACCE7872ADF4687B13C6E7A43CD588CFCDCCA1824D512
437334D79C846B89D5562CE46FD349F8E5CE3BEF8C27F26E22C4A7F1470745BE
23F7005E997DEBC4D8158E2F3B31E3D137B6C7D9766CEC64A18C2AFD86DE3007
202249BB628D89065A66625BD4CD6DFC97BA6C71243671BC9982B82E4CFAEAB0
199189AD460A1A3140851388E31901731298A19080D42224048563FAE057BF5A
C8E6AEBCEC8A6BAFF942063BA4D92CD5CB69376D82E692F98BD66E5AEF39E97A
D8849F9BCDE4D2B9ECD068C47210AD8783198B394D4D14E56EB4AAE91854C11E
1E1464D1E973C7D0E602F933D0DAF4A3E39A85848119173B0450C3B86DD08AA8
92E9B109CECA3887CA11A90219A0E6BADBA59CD3CCE4F41F79C0F64C0656F724
63D562D96545F6B31473E68E2208DFC44603390E136AFD31E395679F8FD609E2
D1262AD65855E072BC6CE6A6368A6C7BF39BC494B4CD68611704E1D60F2689B5
D885CBC6F2E9F95C9509448FAE96BB7A3B470647A3AC66CA6CFFD61DFB5B1BDC
CE7AA1009511F960A3C3AD7CDE7415E185C74E42DA6D3583B4EBA473B9462B18
AEB7C26CAED0D9359A7DC3DC0137E737D6FEFA4933D32C3A68E1869F6D080793
36F2F187363177B22D97DA64142144B46E459481912B16AB082B639C1FFEF087
9F7EFA6998747C475C0F03148EB2028A70A81E7EF861C289C461C00DA9161A26
7624F04FA20770673B3AA8689C36D8741EB05208EC45CAB9A630A50DCB3DA4FD
A103CF30A9EDAA1BAB5A14EFF95FFFF55FD452531D0F3BF3CA6320E49B49F828
8284066C62D70B1135DB2507A22011A98D89D3096D8E232E839DB57AF56AA84F
3C08675EB46736513B953191538CC908F1A12493B81758A5F7EAABAFDA246742
231368C61BB26B0DF70D47A8F0BEF4876AA51860A056A6F5C31DC0AD40E67D4D
A9D215548D3C57F4F58904667E85F573F8199EC499679EC909275E66AA7DC2E4
13352505939C660C1BF3436E6A6E21829FEDE00417177348C663DD99EB428F81
0BC15834DF574133C2EE18C06823369707C36DA08C2F5F8A511C6E243B21A76F
E905ED9A93D34F3FDDC4D8C8071F7C30B458EF199AC39F98E0C78C31198F81D1
A4D36A126028FDCD7DB2D34E3B9145CFB1D8E16DAC1F97497B95EFAB0D89DF13
CC892922E099C616431AF8D92EE8B269CC753673997CAD5A72C855895FA4DCD9
73E644288D6AB3669AB37BE7F40F0D76CD9AB571CBA6742E72268C139B32B0B7
9C149C5E58BC29279AE76A90A4D9E293DD3B2BDA0F610BE34F8B5B6674B44C76
F759B366F6F5471E5B212E588ADACA7ADEE8C84847672714B6F86AA0B4F05DCC
27014A2A845529361E01070517D0CB21264307DFBC9E8F93341D6A2B2897DB44
501BB3ADC4B7CB3168936676B76646FBC97EAAC233EE460256962F5F7ED55557
293B6857305373B008058B8B9FC5D9C4ADA8C27D11794EFCB411D4B4D14D4820
8CF5168CA504AD5BAA138561F12DC5E105CB8D003DC38358F19E8E8E663DA8C3
6ACBD43A76CBA47AFDD14AD0AA9BAE599124EFDF06830C3A385B29D58B39D3F2
236E6927E5B5C2A0E60761DAA4F0CBC2C11DFFA80CFEE1F94C504D7785E5A065
304CF823A161EA44C57E7412A6C14098C4E495D781B7C06F0E3BECB0830F3EF8
9C73CEC106234D021D39FCC01600CA9AC136DDBC793345CDB265CB582F8769F7
E326ADFBECB3CF9FFEF427C609E6CD9B879B289EA7FA6327615E12F7BEDA0708
A43CF906A580200B2E85AF42A3246A664015BF21658134229799C56A5C48C13A
3859EF7BDFFB7EF4A31FD969D436C02AFEC49A6339BEAE45B3AC3827452A760C
11C50C10516F89C480E29BA9175B1591FCF2ECB3CF86E348CF864FE10CB24DDE
7EFBEDF7BDEF7D8F83E77920C11B6FF2C10F7EF085175EB0198F35361E2A9E1F
9B595474D0E29A204514B73EBC10F8F15836EC6F0C8CA7D13E2A3C0F3432183A
667F3A3BB68961602BE02950754AA062EB6CD8B0016B44EE3462A4557B2D7392
2CDC64645CB56A9597F451E7769F066D2B5B017738F9E493EFBEFB6E25B9153D
E6D263CE313039DC0C4B30524787FEDFFFFDDFF915FA887C059A268CF9B0DB9A
5D24AD40F497BFFC65CC9B8C306D71E6CC48784B49CAB40837E4C47DA8036C43
138C95D83BE8A083F6DD775FCCE16DB7DDA6A88F3D27AC0493BD68BB11B69BC2
0B66C5BC0750C098735E36A902E69BB2E6C18614302D622C97857D8BC5C3E7C6
6D1E8C95E1A3E9430B9DF58E9152774C4FD78CD1E1A19E62C768B9544879997C
6E68B43C3F57F4211F9BCD7210BD0C14B5974943BFA762A186AB20929B8D5694
028CF05DA6734E14F6A8976BB97CB6ABA3F30D3140544D23EA751C0788D16667
2736218C5DC76F854C883012C3E00117880A9B9B87F6BAA22C4C7FF28C8BB2C3
8E6C7309A6693F37D5470E4A90F487A0C5865D7DC5155750F1D899021AD036AE
AAED5CA8C24D30113BE72A4B942D226C052C10AB88F99CA46FBCED36F0D8AA1C
BFED9C8613AA9B84B554B5985C37E8128A0E885FDC76EDDAB5825C10FAC04A7A
9E3E6A0736798C9277AE37A3A3A33232EA608F643B47BCD130D3ECDAD52BCE2C
962AA3A39570E6FC48C60E6EF36774E3FB9928E5E1985660A28E3C9EC967634B
BA69BAAA3BF6AD7C39EB171ACD56E88569CFC5DACF4D776F690E32076433030A
7439F14D79CC3975A422E18910B5A7B1DC5019282C1962B84E2A434108B904C4
BA0AC707B98A079188ED339FF90CB60A2684554C74A64D1275E31A05096BD358
0676D28DA8509596470134DE17FF24D64B5B5C20492D18C404113DCC55A8F448
F2B14DC428E4CB6F61A660D8C22A113A7122A88AE171BB8A9717E87A1E006D4D
52D6C9A09370742D5A79A6041833572B5F7B13D3E823A9135D3AE551949F104A
D024A541F47884852176493039CE9BDC6811F2893AD85804DD8CDC72626913B0
8329B42FF156AAC1807CDF61871D9E7DF6591BFD212C8F9370E699C4D556B101
3CBC33CE388337C72AB0F4655281456F0C8FC67FF1E2679D75D63DF7DC13C4BD
51211661E240B2BCE31DEF78ECB1C704A792E8A10860FA00EAF39A6BAEC1EFC5
A089F9C7353839C4A17CFAD39FBEFDF6DBA195991D6050847A0563FECA57BE82
DDAFD48014B017B7E8C195EA88CEC88D338149831F456E180F1452417AFA231F
F908E43B6606BBE8D65B6FA5278DA1C2512071D8FBDFFFFE7BEFBD976948723B
B02D1DAD0A1BE86792B09EA21A53054E9DA4EC8A057B0C71E30062305FFFFAD7
79D0684E61B1A07BDAFA571205ADB8771BC34914A8C8A61AF8653398D3511C2E
958B11E1C3E27FFCE3D5DE5C715BAD0CCD86A51AA955B2DDDD5B0606BB7B3A2B
83A363597C3FE2F49037ED27E2C4C30F81993F77D6C0B63E2C48E0E229A95ADD
4F79C66F9919DDD8B7A5562C3C8B8531DE984A35524BB367F56EEBEB6F59FD7C
A43668D18A6F52213ACC1EF63314E465975D26335A02E19F54BDDACFF611A688
97C9C875A40250172CDB51B65730483A06F2E2458B1611D64EA9C2BF2A19A7B3
C987D292702C9A1AF559C23FE11E1C75D451DFF8C637B067ECF48D8DDA9D28B5
B88D5BE31BB40B6935B1D69F3B0AB2228CCB32850AA2C76C628EF1D744BA939E
D33BA3512967BD62DFE848A1ABE867ABD55AB57B6976DE9279EBFBD6969B66F6
421CBD666DB495CF7AF5B0E5A5BD267CE56698754D47BA681A4175A85A5E69D2
B31C674BD848B951634CDFEDE8EE4A0D0F0CB8AD20A17EB469BD276516B37FD0
C4D219C5CF381A9837AA09957A723938990C2CB3092FED5D76A2C4D10BE32237
DC44E17AC93D05B7148CD1EAE30E0CE071734A01BF96B29E74239AA4F909E79D
B5169FFAD4A71E78E00119E02661E2151488B02013C746A4BC555249042C13C3
6D01719354374B494328EFBEFBEE7FFBDBDF284AC4CE48CF495DF3E008626CB4
4D44CFCD3B50E8F0B6B49A99FDC50E8646E12CE367DC5F4606F3AF6D124AF93F
9E9689B531F480A9B64DD21E87482E7EE54B5FFAD239E79C23CD672CA231E689
8D55F18967D9ACB0729B589284EB715A04193349721A3767651BE79321650C80
F4499899050B16B09281B5FC4433D9FC21AAABE6E3D40A7A9AFA6F599A1CFF4F
7FFAD377BFFBDD90835FF8C21728CBA8F074015D5E06CF499A4A60212E6095B3
A8600495E283983C8B6A1993E3C4ADC293A074946BB54A15FF095F56E4E161D2
E542EB65AFA34C3109624E0EAD5712A8C1033EF4D043D7AC59839B3CF2C823C2
62503CB1190363EFB009EEB8E30EDB37527F78BE9A2AE5981F991852E3CCDB71
4B7CE5E4934F7EF4D1471901C269C790C8E14C330BBFDF6FBFFD5E7EF9657217
88F3C4661A51A91BDF1493DE057FB615608296F4F442920ED46B7B2E59B266DD
BAEDE72D59B379DD95575F73DEE5976170B9627EB05C75A3A97602E3D482C8F9
8DDA2939C687A28D61359D853CFCD97AAD998AB4B099D9D1D1572A157263A0DF
6ABD997293F44160F2996CB551EFC84741A35AB3D155EC1829971AB1D8D26194
596F1F49B19B190B8D68CB9C89408DFFF1E35AE4A61220BA096F2EF7947E2D7F
B0DD09A10E791F2F6E46B9F3CE3BFFF9CF7FB68D032653687F13E4C55A060D46
E5E9D84B24E0A3B015C891882AC7624074A6AD5B3589FF60120BD58929F44585
7BF8E187FFEE77BF3BFEF8E3AFBBEE3A420E790A70D6B08D4F3AE924BB731AB5
03BE1BB98C153F93751ACDDAF2E5E7DD74E39D0B172CD9B8711D8E75D069BC5E
B3F33EDBF755360F566B850E77742088CAC44CDA7841E846F3966A386E25D31A
30AD51E36EAE8FA64C67C3943A32A19F2AD4C28AE7CF31A941D7D7D4716255E7
39D5FBAA1D16CBCDDBF295C6EA4EC8BD84CDC3E6252C3A67773E93A48DB4BE36
0E4ECD187067D8DC3001219619C638FAE8A39F78E20946A7F8211E9B516865BB
A654C037DD74D3E5975FCED2A8302E64C620EEBCF34E11BB088020CF404474C6
CAF0531571A71265D0A63C8C856493ABA153C446D636184AA63D370DE4CE0107
1CF0F8E38F63B24441A70A5D2C181D5CE81EAC044415A113346A28C469444B37
408612D38F91ABB16E6891D6525BE0B9CC04F0EB764C9F00139BF6993721B08B
3C647885DB6EBB0D0FD28CD1C2B5FB595275898C82CE226F081FEBB7BFFDAD89
3193781706E1D5C2F6CA2BAF3CFFFCF34DE231F3CC086FC51FE0DD62D256AF5E
ADE60752752CD7511E9AB6D754D97A0506DB18D3B83A586BDC9F65242C647493
EE5D840D0B522804AF4C4B253855D4C4F160A2307BCC97330EC6302073BD5C8E
3605CC008C8DBDB2F3A06D404A3ABE9268AA23D4E131711A65C71D77A4838241
C2F9E6A11045B34865955357FF2EFED3C4F8036194E895CA8309A7284362B371
DED68C2FCDB235ABC8F044B363129E3BAA347E5118EFA81CDF847EA3D9699CD9
F9CE91EAC8CE33664127546AE5AE6C777146D7FAAD9BFBC246269569A5539BAA
959E422E4867203BE18756EAB5060480E7C29B69F8269F4B576B4D27AE3185F6
CD7A5EA3D54A1B276607364D5830F14969E0C4C569627661624C153F44F22B0C
D2AEB778D95232C33351223F46D5B482F5325AC6B00A54020D6B61F7A6E1309F
6A3FCBF02242828083871E7AE8B8E38EE36CEFB1C71E4F3DF514A3682CB65678
A30D2864177013C12BC3D18C2F4392C014748BB1130D86004FDADFF82FAD6A66
BB8D450ED52657DB1492D845ECF345C142942F4D55F54FA38783ED8DE306AB9A
6139D19BF362689DEBAFBF3EF4D35EA619A41ADD3D33B6AD1F72C2ECCC6C57B5
3EF2A56FDE71F22967CCDCAD5098975DBF7970EE7685A1814A2EED39D574D3D4
9CB4C9A48C3F6846D79970AB49B5526953A8E61B33ABB5D16CA6590FE1688F74
BBCE0814C76BB83395D54EF3CA61D2F2CF24A6B649388B84E909C677B0B6CF91
DAD5701B504A13364B82553593C67F6910A820905DCE689D480B485D6A938C09
1F790CCE64ACBCD273766DCC85175EF88D6F7C83D121ACA848705445AE10073B
0790AB13476B975D7681D360AB0411FB29C92103CD195F573795256BE760EC40
102D50E97E22E2882FA0101455422A6EAFCDE4225D400EECD39FFEF47DF7DD37
1158A8E70A1483FFE28B320CED8514140B7B147A91EE2F1E073B80A869FC46E5
C59A0A0E5E714551F37033A9B704DD17A546BCA49901771525970DEAB1C7CFF3
4C974E0001D95232269407B5CB2D6CF8BAFA2E380907A71C023DCB2EE661B36B
D2E3E1E4C341C4F1A67927971716007E60F708CE189792A625CD0E0D8C197ABC
E999679E092949BDCE0931562645FBDC8C873AF31D99A7B021CA26C11BEBA00A
E7CCD378F0C107E3A431D98F8BEFB8FDF67C3EDB552C0C0CC07C4E076EBA526D
CC9CB77070D3DA4224A7AA0B162E1C181EA995C899D545C64ABB2A9FE7C83379
C74464BCCDD00F4D3C60FCC383B3D984420B636DD2D1DDD1ACF83D1DB3FAB6F5
2FDC6E0E4E1605B1CC440E9899AA8E42B15C29BBB1AA8BFEEA780DBF1E95E1C2
1CF14C50874A3529C79DE18705E3741BB7C7710BB1A5D2324E23805B9C1EAD96
3BBBBB07CAE54C3E370267D435CD56AB64C27F7DD7C1BF79F28951C8CA66AB19
EDA8DC50A9E6C79960D704A95801A72061A27F62A378F816FB40A4BD14364AB5
D1E84A654B99965F8988120BD97C5FBD8A352B668B477EE4A30F7FF751EE2BD2
29504B65E35225C7382C2376CC185E263AB6CD0691AE8C971A0B22F47A15B044
900D0EA0FF802D7AEEB9E7E22CC34CBCF8E28B455B684B275ECC5FDA484C8C93
3173262C48324A654CAD4F2825837C36CE96594F397F426011D32BA253BBA5A3
8DA7D159168841370C128651559953FB1E79E491F7DC730F03EC2CD5A397CCBA
1866E838212CC561D1A98C24156B44F3601A6E0BFB2CDA794E36CCCC4817E6E6
F0DF2810D25F1BDD586E0C35DD16B689091D662A5CF933B62467B858FFB5DF4E
49223B95A9F725F780B03B9496CC06CA6FE48712865E326CACE79E7B8E8900BA
40CC7CE132B8A6587763759DC241C3C9A58E537C8B6B81438D3B10BB632C60C7
6BBB45E946C965B121F267DE91728A156C73E6CC21A197E2D2C6AA42617980B1
A03736E72DFE09AD76CA29A79884A08A5B81BB7062F95A1B2065E2C72E29B6AF
91E3288F996F4A0FA04D28DBA5ABE28F253A6E9A10C744A4BEBC64EA3379FF82
3232D14293534917CA5FCCEAB1C71EFBF0C30F2B3CD09600268703DD1AE95AA9
4937691CAB0433F59C9D23B14BE5A426B989E50B52C3F1E6F21EA69162EE046E
5BDEDF6E5CA3ECB8CD7245C4008944ECFDD356AE0DABE54B5FFA12031BB4DFE9
4953533A71893DBF2BBE0219349A468E8486B38DBCD029B5F98CEEBAEBAEB3CF
3E9B9245200061DC289D71D9C73FFE712C1946850B208E478607BFF295BB6EB8
E1FACF5E78119F9BCBA6D9BD0AC37EFCE7BFDCB2655B3E5EC12A5CF6A8EAA642
E4205169DC4577DE79E7F2CF9E8B11456DDC62911E9A98B72A340E543A147B3E
571E1D8982BC7E90CBA49B8D7AC6EAFFA897126AEFF2CB2FBFE4A28BA3E8482A
353018E18D431A79C542B55C21E619FFCB416784E19C54B61884D9A0B178E69C
254B9694AAB535FF782515AF60A1BB73B85CA9B69AF556D0D9D3DD373080CD0D
5F67D5A6CD9DB96C2A9FADFBADBED172DA357527A644C680231D1C46CD979C58
017BAE1FBB2F0D3F52C06E10561BF5CE54B69131E9C0CCEE9CD93F3CDCC8A683
4CBABFBFAFE0E5475A51F69194D7C6F2EC5DF39A88B0B734143016EEACB3CEC2
B72837C9A5357D3F8F7F5E01EB08B303A0FAA189108D6E960D11E205943FD8F9
A79F7EFA6DB7DD66A79F24124F3AE9A4071E7840495C3BEC612B09064509ADB0
EB7AA560EC66DEF63EB735B1DE54E47D8CFCD9142E8C42E1CEACC3E169259495
202686C1ED1614FC937899C4F7E01B3FDA0361DA099C46588F779B891A166274
38E5D8B92D033718BF6F393059C2943B66E68613283F25D87181AC2B6732F6D9
30A136E33F15CDB2ADF089A919FCCC84B72A542597C4344EFF4A08472C0746C2
DA6B280EDC90491F02483106CE0F3D138DCDD6538EB11871F933F71669E81957
C483BFF8C52FC2F4534C55C458E43150076C6E4166C258B34C3B480D6BA93F44
28CA7DA3B00C3DFA4915F05407662A0FCF265DD20B3265A2036057647236ED50
83493AD24FFA5C6E5C4104B9E77866542767C39E75209934DD7EFBEDA124C8D8
407D836771421812C1A4B1029286A78D14B0959FC041046E28462AC865DB5CB5
8534ED6F8968C256D2F61755AE63135648FD2B5AABBC32EF29262993981A42D1
ABD19B7A3E1A4BD9F311C44198F1D0532502EC79E69F60721E73CC31B7DC720B
362106803D4CA9A48CA00241B660155498179F71C6198F3CF208834B2AE8FAC0
073EF0831FFC80928839A1F7BEF7BDD82A0B162C58BB76ED760BE7A573F99E39
0B33D99C0983534F3C7664DBA6622EFDF5FFF3431DD7FE81A1A8743EEA5558EF
9931D6900A7F828CA3570115F2C9B8CC696C7D234D9B8AD5B0136501CBA38149
173BBAB259AFBF7F533A13EEB5E72E2B57BE60128C02279C9179F6668F0B5A1D
BFE5D34AEAECE81CA94411F262BE50AB560A5EAA804BFC00527156BED0AC46D8
AB05C5CE421CEDAF34A3B6B125BFB66C871DD7BEBA61D0AF2F9C3DEFE56D9B21
A167173BCBAD869B8ADA096F18199DD73BB36F78B0EC873D9DC5FE4A4C4A0309
1806582497FB215ADC48EEA4B23185137CF120AC556B5DD97CA55987DCDD7EC6
DC5787B678B98E6DB5C8D69CD9D9B3B53CCCAC046C08D2FB617E22AB28CEBAD1
F7E5A90F62C2AEDE5819DC78E38D175E78A17D48FF7F84A0A752C03A11B63C91
7416A686011BCCBF88A9695DD94DE3F122F82E29D218022107755B8D228F867D
4C741060AB9D7FFEF9420CF0AFEC5BCCE34F8944875B85D10237A811A7225B61
DCFC03BFDFB2658BED6AEBF850432B784E94861D2054C45149C0E8B25603DB37
ED64DC101BCD6F193FD2C1DC8E41A47D5326ED3A6EE004BE6946EAA83576F629
97585A421387479E7345BCC83490EF3675B0CB2EBBE07A92FD31836B8B7162CB
55F666E2524FF239D3C6224938742A6BC0EC5A7C63519599D86DD86DB7DD9E7D
F6592761B2140ED74CAA8029DF19A1A5BB2D1BCA26C6E4AAD3CAFE7CFC61D251
154A5C0F26FC8488613F511A470AFCF2E6DC94EF78C73B7EFDEB5FAF58B10227
0717C391B7E5AF31FF731DFD544056FD9E5602DE029B9EF9212EAD931417A999
2E2E7EE31BDF0887ECA8A38EFAF6B7BF4DE4DB5403E04DC440E624DCFA2C39E0
BAF267FAA676BEC724D93B7E7DF6ECD9F827EFC3340FAD36319CF19C9BF19D58
A4876CBD280D4D9348D8EFA942085C1766B06C60B619DF55224CB8CCF42037A1
6C9453A82C00FF2AB39AF3EC24ED9939572CB460876031297283313E8F7F42B1
C10CD264B681426DB9230A21EE55BBB10713D27055E93404497B0C29603B00C0
FE3F0F3DF4D089279E78CA29A77CED6B5FE3F6B6BFC20F6E88C3FCBEF7BD0FF7
DC79E79DA3D358AF74F7CE19A936EFBAF3CB1BB76E36CDEAFC9E826954EE78F0
FF44A0B35C664677E735D75C3377DE0228E06CA168FC3A9F8EFB908E9B31B160
460ECB16C9A668E19CA879BA1FCBE258D266331D954633164A6EA53682BF67D3
590606249EB0CFF1674C1D660376F359679E994EA5B3E974A51AE98C80ADA81C
E385A6D34D158CD7E9A63DE3B4FCDAAC6257A7E70595121E9A2DE4BD54A60E13
CE35471C71C4EFFFF0873FFDF52F8B162E2E576BA3A552AD519B3977EEEA2D9B
97CCEACD158AFFD8F06A2B3050BC9994371CEF35D3A2DE329E33C69D628228FC
E065D241D387079C76DC66B5D6D3D93D383A34BF63E6760B173DF9D25F22D9DC
5128576AADA0598B85E0C9279F7CDD75D72977CE10B48915B0ACC968E325F4D6
5841A861FE5EFDC25FD7672A05CC7203D28D7157304D2803548949F885D88110
65B8123B04969C5832B84C8AF1E002FC869CD58A039B18E5C0D20F25B3580943
6580EFAAD0808D19D8D511A7E690430EF9DEF7BE471F94702D1271F3D4B81619
9C6B35B6A2ABCAA203929F10FA8B3B5C7DF5D5679F7D3659D85482451750AC5B
3C6266BC7D6F12A3B052AB4001BBA1E746B9895816A5023715AF4BE0B82D2F68
45A5BE810942278062F68CD7663329F8D416E0945733A9889348CFC59FFDF7DF
FFE9A79F666D859C783593E023F6D8638F55AB564128E1F59D0925128C7C5C7B
EDB5B008190C604812221A33A3321F95C3A8360466D64452015B55398CA66240
9005902C0C58D3DD56DE9B4E18D1E7182E9593CA28E916E085D57AC5B1481695
AE6018106B8C9B93FB89325A349076DAA6CD039EE62C8D3328924DC01A593C08
9372EAA9A742C1DB8D9EA463B88AAC1122E289B061926690E06DAA87B201162D
329B50891207D6280660E72D1499618371BC320F1E69ED5847248E085560D335
E77B71239AF158033399152232018582DB8C2F3521E0519429BD64C912AC1A71
837620A8ADE112E5456871B619CB33A6358D5F8A25809B95550D2CCE616F1013
7332435A857147581E724556F0EEB85E08038A548A42A155299A69DFB0705CDD
5B79CC087AD261B3D3D86ED258908110B1B71386C675C135D84B8C93E3A5885A
5023AFFDF6DB0F8384CCCDA59CE172CDA4B2956AEDED6F7F7B269DDA63979D4B
43FDCFBCBCB577E68CBFBFF0DC50DF96FFB8F7DE62315F2AD767CF99E337EBD8
EAAA32202F5804C51C89C2CE104529C775424C78D535CD0CD4492E8631852656
A36E3106452F5AB2B06FEB3631A1126843E012036BD1B66CFA1071A9C8178D4E
E2C0C870219FF5ABF5D9C50E1F7E9509E798426706C2BA51CC66B2F0979BF574
CACD43941853AE5406EA91E1BF796B849E2B053E660D7A7A6379A433B2AB72AD
30D8DAA817A1BF4D982F760C954BAD4CECFD84C1D85EF3C6EC33CF84D41FF57A
132E4FC6F1C2A63FAB6B86D70A3B33B9A56F58B67160E0E9B57FDFE6D7162F5A
7CCA49A75E75CB0D6CFFC54E35D45251CCC37B2DD26ED789657263A95015764B
70FFAF28E030E97AA46A63990526E919430703A3A5EF8EA7EFB4D34E0C7499A4
8E5FF149FCFC96B7BCE577BFFB9D0A14891BC507DAE2F7BFFFBD9A4930CF6292
BAF99B6FBE194AD1C400D5356BD6182BB024583B73C344891A0B6F2582580A13
D810904284592861477402E70163C36F704E55462FACA5490815DA3A77B9497B
1B228F6AADAA03A3AFE599444445C6539CC5E77F99CE8FE0F35EE0A49CA03E76
1D73D518003BD1D1BE543B4E92FBB6E2FEB0767C2EB4FADF705DF0C1356F78C3
1B56AF5EAD523DC1A6E421E035D571528E10A1A90C0088C4972813BB5536D52D
2E8621820BE04F5E7FFDF5AA8CA0189F32078CFF27C00FDF842DF3F2CB2FDB7F
56AB268A30BB00979B12B370EEB9E7C2215665115F9E017112A9F0C5942B85B4
C2B95AB972A57C6B13FB6A620B7B5D0A78A2A9C205A05EFCEE77BFFBD18F7E94
F116AE1073BDCAFCD1F363C24F8809137BA8621199F4B95424380C175D7491C2
A4EC0F418F0DF6D433CF3C437B992A991550AC49DD7BEFBD9F7AEA2901BE7001
96E09BDFFC26B4113BCF30BF72D34D375D7AE9A534CAF0CB7DF7DD17F3E64EA0
2C36E3F108F63827D695CA3EB5493A75B7A54B97E2BCE1D1B698A3A091309276
6F0325DA9EB149E2DB2AB3711282307C859690B226AC4F637D9493147AB5F5DE
20D8554D08A8741975A0BA65B4A08D5B805940A63626056129F5259625810A25
58ED523A93D8C2CC3B1C74D0418CA88F5972851CBCCDBEA1D1771DFA8157B70E
1DF82F6FFFDE7FFFC8AF95BD4669FFBD770B9BB546BDEA7AE942B17370A0EFA7
3FFD29CBF9702B52E2E159733ABCBA1FE27FD57A0BB3D1BF7563AD5CC37497D3
71C82EC42352F013464BF5D9B3E61F75F427EEBAEB8B0AD0D1665294658CF5AC
2336E012F907B1E7865114B0DB4B777B996C33EC70D26ED0E82A74D56B954226
D5DD99AFD7AB9B4606E1A375B8A9D1B085D585B931BF1035E8AD07CDAE7C44C0
D4571DDD75F192575E5D974A656A7EA315D56C4602B7EC448E5A3388EA8B5AC6
6883160B99563CBC5AB59E0A4DC6441B18BADCADD58BA93CDCA9B57D5BFBC266
39ED0C57A3F7AD5B36DF01071C00110C773332B39A3E63CED19E8F69A6B9E79B
2D9FAD4253560B4BAEFBFF960296052FC25AFCC0B213EE495A81AC62E096E048
54D06C836624EB9440A56EC0D3F7DC734FB86BB62E6170911621EFA6F02FBBD5
5152A968CAFED9584689609EDCD8301F7FFEF39F5306721A79B4E92A70E72BF5
C390180F3B0D0572CFF1006AFB8949778CDEC0B49C300ECE87AEF205E335502C
E71DE20DC34C2A2B5FC876256DC61B9BE39333E6244D42258814B252E28F617C
1AD976A69CE21AFB045AECBAEBAEE39F18C4A5972FB2429338369000905A1C06
E60723C48A085CCC214180D39D1012DE4C9503B639CCA050B1B73074968D7322
880D96C341BF10FF9559243E6B7A0F641C542F552761B3A2D0C78EA169C6A61C
181F143F79BC54C7E68C07D04F736026D5D3320208A70A1276787A93AA7CD509
27B4CF24A11E56DDD18C9D0684A5A240A672EDC650B8F3B265CB5E7CF14585F4
790169C9648BD0ACA1ADCA32651BFE268B9BCA469AA00DEF672BE0B65F3A5370
4DD81F6659A495D90189BE26CF2DCF9230EADC8226414ADB5BCA1E180D323A61
B6FEC667C71D77C446FFF8C73FCEA58105033B03CF85E68390F59376CE6250C1
31205A8D6EB444AA622AFCA710E96C092777968AD96666B03D601D4215CE0B09
6F927E3822DF171C5DC89A306ED171E081070E8C947B3AB2D5E1FE94EB98FC8C
4DD5D4FE877CE4E77FFC6BA655C938AD547D68DF5D7728F56D7AE985E7B094EB
376CC29EC14160E52EBC0AE21CA3616CF73EDFE4BCDCEC6C71AE6B3A9BE596F1
5BF0177FF3D55366CCEF1EDAFA9209625AABC87170E7CEDD6EDBB6B5F42C4DD2
74C4495A53F36036EB5192321D8BC5D8F08FCED9AE3BECB0FE955776E89DD715
A6FC9151B8162DD398DF31B790CF0C0DF7551A955426E3A532D546BDCF6FEEBD
C7EE70D337F50FE48C3BA77736D762564FF7FAC17E2CF65D5FBCE3ACF33ED591
CE979AD542263FD28AD44F3334418CE18E3AB9C707C84B43EF9B2C0E4B0D0AD8
494739E2566FA1AB103ACD6A65CE9C05ABB6AE87CDB5A1325C0D4C57B1D072A2
AD08B9245C274F8D6B41A019D18DD44C18E4ACD20356D29387FC7FCB03568987
0AF6E880DA75833CA4F2C3B8972858943696078CBF1E7FFCF177DC71079B6861
3B6963DB405FFD938D2C2940548BC55A73FC0053008E29FC3C35069654E48657
A0C846A5EDB0C30E14F26AC82DD82CF51959D67958546D75CB2DB7C02B50F5B0
5248548A6A2544934282C8F1AC36B5AD585E39C16B02BCD50E70C19CE059786B
72BDE15698226A102FEE38F4C20B2F18AB7B158727CC1AF96D083E67E2805602
5F815E2FE78472DB2E5DD975D75D71736953CCD285175E78FAE9A7E367D24F9A
84948252E5B2CB2E83CB4B3B86E5490AEE3266C6B0D9E40A98628B3762296A1B
0440AD0D45BA84EF7FE52B5FF9E4273FC982271B1F0FB70F5E20FC4EBB7D26BF
CB8E492C38113E8DB3A9E02D77F3FF3B084BA82EDAA4F2F004F669258D75B91E
02B0C88652E8782AAE519E43AC076C55CA65DC072F88D721F26D526A565B3FD9
586B7C6BB7DD767BEEB9E7D47C8D23271A9E3075EE2A06408C55871D8EE7A1D5
23DC8403994B2E65C9CB3CAB47EF4485CD090C2D4A6A292AB9BF7C0AAD5DDB23
E7693FE28823FEF8C73F3244260E7749314EAFAC22EC2B82E68898A3E36B8399
C56960127C190F5E2AEE1B8FDD25DA3976FB503E9E3721DC71521096768ED2C9
ECB3EB5B9D9B09C1A02287C7C010BD9B7C1E7BEC31E8D199F3B773EAC35E63B4
BB98DF3854FBFB687AF65E07BF32E477B586EFB9EDF270B4DCEDD6C3CA603A76
D8204A72F9224C90A80D51BC4B19348EAA3C5341332CA4F28BBB7B76CBE71687
F5A2D348A54D2A931BAD555FFDC9F7BF64C2F5B97CC38D0AA08394570CC2AAC2
AD5C7495608DE1D4BC94DFF2538ECB3856A93494CFE5CE3EF58C87EEFD8F19E9
BC53AE7A7E6346AAA3335F181CEDAF9A5A3A0A1B3B90647E54B9E48D84AD08FA
65CC7673E6366A0DBF1E45E476DB65F7975E7C3603199B8F16D44B67B68D0C16
52B9B25F8B40CFD15EF170C002D7336EFC5F63FA4B25FCA5504807B0275C0F0A
38A8357ABB66D44786B69BB568AFBDF6FEC6CF7FE0E78A5B1AE53097AE559AA1
7564E4264636597DAC285FB5005114B4E52F5EB2047E12565FAE216BB2FF4703
F49F54C09A64B564BDF6DA6B3FF399CF98A4CACE24C00E6315809804212C528B
564C7BAE1E0C02129A241186BF422060635070730C92511405F27A1516B24FAE
63F1A7DAA06B938421F3F107525D68539A9B7C0B921892124436B77C8CAF7FFD
EBC71C730CE7966F17C6E58EA9F12D32190F8872734EAA1515D485868650F2DF
543ADEB1AD31CE702782CA7BF092E1317B49E33B4E0BEBA729252840F0CBA38E
3AEAD1471FB5AB1FDB1430C5BE9BB03F86315D8130AAF687B009CCE7B9E79E7B
DF7DF731142A8E49F6D4B2E31F34BE9589602122B98D29F9A9F2A94DA8F57524
270941ABED818C23C62419ADB54B89A051882C0827FB047117E28F7DEC630F3E
F8E055575DB57CF9720E681A0F12C28ED01BB5F8509F1C41C3C527A028BF3DE3
D3E478707F58850CA56EBFFDF6D00476AF0F928D7142F7DB6FBF430E3904669D
189B69B7DAAD7927BDBFD89245FA3A0DEEC3CE71E22B6F7EF39B57AF5E0DC1ED
8C2FBF365685CCEB3244A6FAD0B60D933A7171535010287D88CFBBDFFD6EE812
3E9705CA6269C0C030996BD7AEE54E80568365F0873FFC01AF43FB4CA872A593
99E552029B6A95FA9B6E250F399D7E45C0DADC77937020D3B8E6EF65B4A90284
7B9DEBC5F3206C059590285C3006ED67D5CB518FCA869007A3C3CC45A1F5F3B3
9FFD0C77C3C26142701CF01642BFE3D13423F059B06001B97369FCAA9C093761
793E2316B05FE1F7B324949936F106E31A5CC9A809F66D61E19E3FFBAF97DDFA
FC6271F8EB8F9C6D52D58E9C5B2DF5B44CBF38ADECC2E5EEB9E69C4FDEF28515
0F5C78FDAD7BBC656933D34AE57AABD55C676B3882C3504C078E0ED41F7FF8B7
47EF7AEB9C413327B5B0DEB961CB607EA6970F5B038B76D9FBE9179FD97EFE92
2D7DDBF299EC687968D71D96BEEB9DFFFAC8830F653369F8B98D66CD3750F069
E386F5C0AF64C352CD74655C5818AF0E8F42EA64F3E926846BB9E97A4E23CA52
7BB834E5876ECBCF3B9956D8E84D43F1B8237ECB9D3B737D69A46F74A4B3A393
2278B8349A8BADB754261D75498AFA0D8F410AC4C82F3675860AA99608088878
08EA5E88035A4F9BE2ECD3CEFFC53EEF5CD433B3305CD9D8E5E4263D2FE986B3
F2972F5DBFE2DD4E58EEEE34A3556C95AE5A3062EA460CBB8C4EC1C484ACA3C8
1AF3CE935ECBB2536D6A8EB6A21A869DB85836F455291E1E5B1A67E4DF208297
6796A18E30C10FEA9F0CEFA940514283A758CD214C92A15060D25835A8D205B2
41A93F08D1A2794A01C2321E865E5476811F70FC71047040585363771F927093
C343BF4B4BC04037E750D556ACCA11631795114F715B09565BCF6C0A58452608
1C6641369D752A54E8089C323ACDC60A4238495F48F67054A8B29534E70DE3C6
074CDD422640E851CD9F74D249F09DE82EAB6F848C242D74F4D38F7FFCE3C30E
3B0C7FA641C4B14221DD74D34D9B376FF6E2D608545D7435DAF40A7F50AC8F65
368C3F4C5306C065668E5062D4CE6B0A53DD4641D77693A9140FD17DB2434959
4E83D16E576E271554DF6C2CD2FC6914AACD146DEFAD49AF77ADBEAD26319665
DFD8E952528548F7FF3F2AE0C4EF29D9D508DC8894148422E39AE38F3F1E4625
6D089BCA9B93AF540AE354501BD82AB8C9BEFBEE8B4DC2405698343FA0B52EBB
9B368A2C153675666718FB9766B294BF824BF6A233BD74C10517DC78E38D4494
E0E9175F7C3136AD94A80DCFA6F3CD1761A99F1A898B164E4F94DF0309421C29
1137DCFCCC16BFED6D6F5BBA74296603EE352F6385037D235C0C830F0A15EFF8
C31FFE10A3852AC5C524C0C29F54798FB566673AB2C5F2E09838CC4E3A784A13
18464FAD7A7E76E75E85D492A7FEF8989B5E67C24A04C9F27B5ACE6B2465F676
F2D35105E6E3BF5AFBD60316A59CB898A919F11C5463BDE324AE4898FCDC6FCC
C65F998FFF6B7A76DADFDA3433F38B9D606B97E78FD472AD886CD2CFC78669B9
34D295C79B14CA8383D974C60B0D344260FCB4930EBCC8D5A89956AE981B29D7
30D78B162EEC2B8F6E1A1A49A5DD8CE341B615BA3BFA874AA9F8890B7245D70F
6677759687465A81DFB360C9531B5F86B7DF8C42E87009A2F352F7A33EC15104
CB319891345C936A8DC2917D90F00A82403279AFFC0E0389E908251E38D919BF
FBCDEA7DDFD49DF29AA6BACDA46637E2FD36F18379A8D7CC86E747DEB6DF769E
89F845D2B97AAD39944D8DC977ED37B63E3449024E0A408ACD0E0BB9133A699A
38484679ADC6F2C6F2A729C7250F5951A2F41F234F52C0F249646487E35BADEB
3E32BB85DE10968AC54B047EB2ADAA508AB256196D964FE958BCE24ACAD21865
E37666F46856AA1BB75D73253A04F5F316B44D4F179F815D4C659759ABFB2A95
1CA3231226EA6AA34ECC74DC29A318D2200696E91BC76A2820378F6610050B5F
5F5465A145806312D26956A22B26AF9E1C6D29B0D7B4851D09116474A79D76A2
5DC098893690AD1BF85F512ADA2AB08D23A64D2149D829DD2844B400FA52A57E
D252507B8E4B359196590A124711321AEE38EE0909A8E2285BEFF2302BAB77FF
FDF79F7EFAE9D285D8F436A37DDBFD4D9CA850FF25E6BFED62B289D7CB3A0B62
0679E82DAEA2ED075327BDDE5CF8541F6594B5A1599C3D5624100F9ED6E2EEBB
EFFEFCF3CF5F74D145B7DF7E3B7515BE48E4A1EDBBF32B6AFA2622377DB47D65
8AE11AD62DE0DDAFB9E69A4B2EB9844768D9B265EBD6ADC3B368594F9C2E1E1E
C5AB291A6C5CBA339E49A36D18F604AA00831F76B293433CD16C92D96B2C3490
7C4DFCFC9EF7BC077F65EF2991D23100804132F703F58CF7C2357859D8B89801
16C4639F60EA56AF5E8D998186662763CA32E68D703D5E934637E670E5CA95B3
16A5FBA018FD744416645A7CDD8C57305174B0C1334F824013077832AED34AEF
70D2A76E7ACB7BDE5B4FF9A3950D737BBACB43954C9C59303157061D7F461D36
8C54467E35E7BE6B3A6698FAACC22E6B2A2FEE34AFA73C38DCAAA7765DB6DB1F
5E7A6646A6586D543DE36433998146759E03CF369376DC20A2A60AE34A5FA7D9
822636F5B0D54C791BFD46219B1EAE3773855C6450FAADA12A8CE9C832EBE99E
E1D49AE9D0E92F8D2CF672854C36688543ADD6BA56B9E1A6E62C5AB46EDD3F7C
33E608E29ED12AC791CA42B158C8E515E8A3FFA4F60638EC77DE792736097B85
5119A4C2967167D7C3CA19E7FFF73B3EB463E8CEF18AC3E5C1DEAEECE40C7741
A6E85736BCF4C496AB577CC8A9435C2C0ECDEA7C7EB6EF0FC99A170930175DC1
30FE1E8A845DC838B12DAB37B91C12CA3D784EB018E8DED9544D76009C21714A
090274746CDDF1CD7CCC78275B3F48F1E3EBD84BF22B145BB21B81E00E0F3CF0
00BCB7360E83B62A0F9B9FD5E6A56A5974EBD2F40ADEBA56BB58391BD411BBEC
B2CB473EF211D8D37445080FA29450985D0DE0E959A97322EFD046B23191E740
BFB7535454900CAAF197A227A2F34D5D20EF45B3CAB4BDFD6A7421E8D5A87ADB
2404FE6C1FA232C8D7C29C544BBC9A4D00398994B9B650B3131B1A87569A2F40
140FE12A1CCD34E8651B952AF4AC948480FE0409CBA73149249DDF9A2A474B77
848DEB598915C4FD7948A2E4C4A5A812CD8C9F13A9480B00BA0733006765AAF1
937556FF1469ED54D75322133AFB6FFFF66F7FF9CB5F683E73BFAA0A50AEF0FF
96023649350E11CB9C643B6E66122394FA86E6F039E79C73DF7DF7919DD14E5C
B909A10CC120F690B8E22491D62FD9AA92D87D7B48D4CDB8C9873FFCE19FFDEC
67505434E1F5BEA155FEA43E4EA2DD603A4DCAC6C4892B63694A3B6CC0DB8ADE
160B8D1FB0DBD55CCC58296D5DCF2E66049F6BA2D4100C1B09DEF677BEF31DDC
01DBEC90430EB9F2CA2B596EF8E28B2FC2F7C572E3DD172F5E8CB93AF6D863E9
A541EEF0D0D2C05AB162054FAF9C001D5D4614699213CED6F41B701B71C6236F
D44FE7325DB5C660C48FE58C51CC538CD23C8F0A48D2E9A14ACF899FBEAB91DB
21DB31B388091C189DD5D1B3A91ABD8813BD691015E9461D15A0247C6F7E7AE8
B9FFFCED439F99592F2CE8ED6EE536BEB0A19531CE6E73B7DFFFC0037EFEEB5F
D4033F1614F99EAEEE72A91496AA11E01B47D20FDCA0957671B348D934C33A5E
A9ABA3737379D4ED28BE3A5AEE888C96545FA59676A35E49D8E69E1341B4B06C
8B66CE4E8D94719F46D3CFCC9EB5A1565A3B3CB860E1E2F5EB5F35F9AC68AB29
9778EA19B9A1B38B39BFFBEEBB094826FD0813584C164600B4667374A8DA72EB
1DF33A8F3FF65BB5E6826C7AAF7C4FA36FDB70AE589BF4B0542372E2B58DC135
5FBFFF988E0E53DAE66292536ED16FBD4617AC2C95E00B843590989DABA646E6
D2A6145FB6BCB21BF54C75BAA57E6CF12B463F33BE9B9E6EE25A5DBCC47525FD
C12225DA8BD22BD8B1CB972FBFFCF2CBB1DFE81AB27E8F9A1B5B5A250FF28019
F3172099C7DCA6FB203AEC95575E31E3D94BE401E31A984D77DD75174188744C
591CAFEC35352E868731C06487D9CA0268080D2A29DD8ACEC01E7BEC813348DC
A8A62BB4BA6B689F98B858DCBE400A980299315AC256EC4A6E1C7F280BE1784C
ECBE6378B7DE7AEBC5175F2CF4B19482B18C0F2FE94B68E401DBC1469A93ACB0
E6B6D861871D2086884C615461527D1026A4FCB67D61A68D1287E3093CF5C413
4E38E137BFF90D949FEAB1E858D8DBCBB19898A6B93F7F80A8A5BE696B02E159
BD60ED23A14D394D190353F40CDEE2FE6420A3F89BF47A95C7912895A911963F
719753AB61230ACE3E6908FAF5A23AF90A8C22F0BD08911053153BACB1EB8678
A34C92318D7CA998D6472C3C340EA8FFDC84E84AC6BECDD4214C13BBBA2AACC2
9BF0372C1D51EB721B42C28FD4BF89ED39668CB8B568CCAA445255E96D3751CC
87B76295302E26E4505CE2AA9EE20CE3F0BCF18D6FC4FAAE5AB58A268BD0C512
7F41D24759A4F93419DFF4A637915BF4D0430F65D13CCE271119F82E26FCC413
4FE4F663DD3CE304B886751D7C4DC521594477D717FFFDA4D38F8DD02B199376
6796AA8DB973F35BFAB7197F0CA38B616026152EEAC4D2CFEFDD5CED3AF8F44B
82DEF91B47861A61B398CFCDAEE7A37D1AAD960F77369D72A302DDA63FA7DEF5
F0FDEF5D3052EC0EBCA2375285DF98EA4D43E80C6F78C30E3BAFDFB4BEBF5662
8B85AC8900AD9D8E9B755359C7CB60724227E524B53A5D1DA395F240A3829D77
E8473FF487E7FEF2D4B3CF556218573E9FAB06CD4ABDB5E76E4B57FD6D1536F4
AE0B17BF71C19297FFFEF7FEC1A1234E3BF5B6871E28BB4E3A972F0D0E87858C
603E4B972EC52EC211B3831F7243F973A4E3E34E5F34AA14249B9B5EB8D97F35
84304FE78FB8E2C76B4A2FD7B299F48CB0674B61D2F33273B07B7EEFDC2F5F73
887123A7B0A3683266FEC0D02678E08CB8D2C4145A5E8295CD2428076C452B48
0D77B8D800B1F1386086BE14F46A935D61C237C05A17C81CDC4A34678E556C63
8740A5F54D02ECBFEAAAABE05F42AAE06E9C37A681705B3812D467767686F14B
7A75071F7CF0534F3DC59EDCF4F0A8A5043EA5DEB2C165BC8CB5B3B2573CAB35
88ED5B1330CB383CEFC62A7C132B60426525FADA729AB6BBC9AAFA238F3CF23F
FFF33F49D8A9E09C10243CCB61C25542B2E13041412B27451785D16F4A0FD199
E14A76FC643B5A6D457C05AB43E39B9D0E14D1248A7372054C5C1901239A7DD6
8171A99CF1346C1CBDB1005DD29D2C6861328C101E9B657AD28F931041A876ED
8E3BEE38EBACB33000CC29C41F04342B94B8C6FF3C08CB8B7BE090678A7A97F1
04313D71B40A3890413315779FA59025BC76AA660CF8CA15575C71D34D373121
2FEE0E3BCED9A608E94192D504538491336588FBE06E77DE7927C9496C5A8C89
67F2F52A60297EE10065540A34681BE0DCCAE484C230E0A17EFFFBDF9756E6B1
E429B263326D4FA4C54DCC88321F6CC340CB9AA0505634924947D54DF6CBDA46
BD4ADD68E5C82EA17EB2FB4C4F14617C47685CCC30E776D1A2455093CF3CF30C
94968DBDB2078035C50251E84BE0CA5BC50D317E1C7876CDE386C17BEDB5D75E
B445CE39E71C76CBC12624612CBEF2B9CF7D0E03C09E640A9CA79774457C2ECB
FF8985A10CE2212A7AF35A6EC538F572056678ECEDB52AE99C694628A134D757
CDD2F1F45DF6DAF1F9BFAC3641FAFA1BEEB8F4C2CF2DEA9A996996ABD56DEB0D
F44F065AB7D5C4466D659D488AB78266902A1453E579DED294593552369D6641
901FDD541DED82228EFECF196ED4E7747635EBB510DE6A2ADDD16CA55C0F6651
1ADA778CF3D9857E2EFB15CFB8053898BE9FE9ED59B965235EB26746D16DB9A5
5A35CC78A572FD84138EFDD5CF1EDFB47133A4FBD2CE99CD7A6373A3F48665BB
FFF2A5E7292CB0847E6A6C1D71DB486955AAD47CE96C94D1A087A046E8CCBBB3
088D6E288903A1E142374C174CA7BBFDC8F03F3266F68CDC36E808CF64B6B953
7044E77C535D929D3358DFEAF7CC983118A9DEF9F9CE4DF5F2984FA9D0227FC0
B360695D7FFDF5471C718449EA38B84B85F370C7778155FCD6068228F26CACC4
9C0C476E03FA5222F4505A344C18CE79D2B581C38469C74D98625D8BB294BB45
56B2EA7D29CAE8BDD16F7EF39BDF0C056CBF5D2B69A1463B9ECA86F005DAC7AC
9FC49F6EB8E186152B56906698981E9398B03C385CD6B6760B14F8F44AA98055
7A84A384476303B03C49CD0F580781BFE254C6B9FFB42A1D74B4EDDE44B2A1E5
24C89C72129244E68C9563A56CC72FB104E40EE2B7202D8F3BEEB87BEEB98725
A6A294B0894A6C2ADC712168BB14849A9C9E10C7BA64C9123C49948D4C1FDA7A
D796598AB013C3C65D355568C5491A8CDBB61BEFB0E79E7B3EF7DC735A27C68D
B9BAB6446E03CDB67DA856B90C147911943486C806492F4F7DB78DD391961466
436C4D133F9C7ADAC2302D2FB9E41236479A4A61E34A313CF0BDB0512EBBECB2
F3CF3F1F2BCAE434DE14BF6762C3CEB5B72912F37A3E36FA9A475D89061D399C
0D3AE51025F813FB3662C6F0570652789C680C32A9C31811D5B08D75B27316D4
1F263663D9478FC245B6243590DA2A4CBA9A0A5FF37AEA2746F9546C67924E1B
3A42123D8A94D8C2C2367128DD2606188404E11991C1418A7FCE9B4D4F8DCF3E
FBEC4350DBC73FFE711E691A67982EFC15AA973242DCB37C04B3C294B64CDFB4
110CF140E5F29DF51AB66EAB6766F7E0C0D68ECE5C69B4D6D90977AA629264B9
C200988A4B2FBAE9CAAB2EF35B65F85F4D3F4220074ED34B19BF6E72F96CDA75
62551AC55BA18D3185BDD19F7A46C2E1B409AEBAF4BC2FDEF2B54DB5FE030E3C
E0A5954F979B0D27866BCD801C6834E00167BC5457AB15E5838DEB19B897914F
8C8D603C77D91B767AF96F2FA5A33E485EC9401B671ABDC575C3037ECB04AED3
4A394395C6B21D97AC7B659D1B9A19B97CBA565D347B3E1EF1C250BF29E66322
722FAC374BCD5A269F87BDD66AC6DE4FEC7C777576418BB701186D48BC922CCC
35F0F0BA7847AFA35E6FF6F6CCEE1F5A0F253EB373E940F9F949CF8B5B308EEF
B4A27E5191D7EC999C97CE349C2D26B1AB1952A24146B8A2EC578A72FA52A48F
A5C0A5E78045E1050CFF9088EA95575E512ACD86E74848CA915ABE7CF9934F3E
F9D7BFFE95682365EBA480DB4058C6AA543449BF42F2023164C2583ADE058629
C41D732B447153D4B3478EE04E9C73956BBE46B5111708A853BB58C0D8EA9B4F
9FD89D563C890AA4433CD210E741F6927E33E264B4C979D4CE9C7A514817BBD4
C52478141A4376829C6164D6C8F0FE9C49B9790C5AA809378F6A5BA6C04672E1
AD0F3DF450F82A44A77EE73BDFF9D8C73EA6F24BFAB7848EDBC189680B9D79E6
99F7DF7FBF491A834358635E687AE0F130EB1E78E001AA19767467BADE4C0841
2BAF6E170E4D5308EF597DE21C8B9B97E1089E2EBC00269A13AAB24B1B133B8D
82BFF6DA6B2FBEF8621E4E6A205C7CFBEDB79F7BEEB9DA97DAF19C7A762DC4EB
DF7AEBADB0DA48AB349542659A9098EAFF11324DFDC13D0AEB89B10B913F10B3
27A400AED1DEFD7F57C078DCDE7BEFFDC4134FF00E782243AF5C26EEA13677D6
6E69A54A414D7890F48E549F6A7B3348E7913C96720A7BFDFDEF7FFF430F3D24
F01773309C79EEE0894C5EF271F7DB6FBF3FFDE94FF7DD771F8C954F7FFAD357
5D7595CD7F69E79E151CD38BD842CA1604824DDA90786385EFE4C488694B4133
BC0E368932643CE4D0BE78C4F1C71F4F1E2E139B1DEC127FDA69A7C97CA1BC68
6BC58A3B93FFC4AE7930966F140DAC10B46A269DEA6E058D5CB6E9B9C16824BE
BA3C6F54284D35FE8A4C93663DED9A7CC64041F7CEE9DCD85782AEEC5838B7BC
764B3E97CDA5BC7AA5DC0A5A98BB8CE760967B23F6CBDE72BEBFD958385C1F58
BC5D75E366335A378B3BA232B6A0D52CE60B8D72B5E6B7663A50BA4E4FAC1433
06EE2F1CD648417B6E1460AC362A3B167B7BDD8253F547FDE646535D6DCA9488
9942BEBF529D33BB67EBB6C1C5F3E70C6DEB87E65E9C8FD8055AE9549FDFDC66
02AAFAAC9BAA077E54740429548C0227F0B9474786D3A9B46FC2B1363B569702
9314A7D1D81230275A88FA825AB0D6647DCF2F9A54D9AFF7E666F5D7464C66F2
40153E1DC694B2DE2227BFBE54336E6B5690ED0BEA70F27DBB1C4351473A2790
30AC5927D2D0C6274B2FE244C0E686D326FCC1E1871FFEA31FFD889DC2196BB4
DD3563C180B11F644633F345BD2261A850A22AC2253329EEAFBBEE3A988026E1
7852C3798CE4031FF8C0E38F3FCE30E179E79DF7D5AF7E951790F9875486D097
D8A244C9D8205646D11451A3FA541F718C93749BB65EB0A14CF82704F29D77DE
49042BAE676052CDA68CD5D81B13C817A74F856388DDAE52603C9DB8748643F0
575CCCF0950DF25583F6F7BEF7BDB06648142A63CE26733649BF2301CAC444CB
280BC306E262E2F5045BB949631BE519858276ADAE33919059BC783169B44C9C
F6C3774471826171F6B99F6C68B8B1723036CF9993905E71465AE35B70F0F78C
C46A6704E36984F1C3B265CBA021687110768F6761242FBDF412FE6AD3825376
6BBFAAA59D4816B5476DD21611A272D67818B4BF191755EBB1A950CD72F15542
8041B2B580B829DA40E78C98D1B9B1791E6CF638C7AA2877C7F700B0E142133F
7620A10D6DA87A09C676F8BE61C24BC7AFE31ABC3E9686484B5C86D19E7EFAE9
37DD74138BD0C4E0833FA987B1CE861BB7CFC25CC929A4B452A723C2389945E3
A32FBDF4D22BAFBC92C7D5667C14A1152D003AAC0C19A904DE2E36A0F00D121A
3C4E38C6C03824CF2D06C64996374F3033C98CB04F48786BC637E5DE79E79DB1
0FB997B858175D74D1CD37DF4C61C70ADD975F7E792C449C0062D903FB9E7BEE
C15410CFC2B7C67D60D55161E3292FBEF8A2B8E444038EA7B09C97D1020E8627
45FC246D5579749769B95216885747875C68E1E8267137A4E38E3BEE6B5F7DB0
23978D1B58FA1DE96C572B6C042D78C4E942AE65A25E814E100506CB2325D802
BD1D79B7545BE41552AD3ABCDBEE7477BE39DA91E9AC36B0D8B051329566152E
EE92454BFCBE7E3CB35C2DED306BBB8D7D5B61A63D5DEFAFE5331131D9F048BD
D10C7369B790DDDC370ADD3F2F9D9BDD4A43BF0D9AE6DC9D767C116BE1A4DC5C
6EB05A0A634D3C16D8A8D5A07A5B7E339BC936FCE8ADFC88C1213E1761904967
6005CB0CC74230EF3E668834A6D4B4D37CC2F1EDEB234C68B512F596883CA1A8
D1442A939E356FEEE60DEB8D978F061AF8C60DA8A54AD55A696008068909C234
FCF694D7747DE3846E26DD9D2B9686FBF17B2C4E3107332333522AE73ABB6BE5
8A13362852DA7A0AA9BA4460088284DB2237B61F62CB1CA65D79B8747068B888
C30B06FA33CF3C432C08A5CD92254BB0B19DA45EB98DE0825F877C80018173FA
D8638F3DFFFCF37877EA45DBA2A5493431EF6B2C1A3B2A051C81534E39055602
D5A74948E8F8757EF18A2BAEC009E2B4E09F279D74125CC7DD77DFFD2F7FF98B
195FB2CC6BCC148DE4692EC8BA250A9D8DA1D47308B77DF6D9674F3EF9E4471F
7DB48DEFDA9E6121BDF15C4C080D14B233493FEEB8E38E34CE8456E3B6A497E5
705EF06595C06EBFFDF6471D75D4F5D75FAFE709644FD1A6A88BD0A14E523C6E
0F94B3CF8804AB2914AFB37DF9B6A40525AF58D698A287785ABE7C391C7C322B
F1976EDC428E1628C51F06A98CAFE815E5A5B17B89CE15076CF748B8E5965BF0
14936441B8CF9CA9EB80A9D2C8F0AC3486490A79C53C472003137B61D22C9380
3D556A4DCC6DDB3B381CDF1A73AAF1E8C0F018532D292928B2595A45541B6C7B
8039C7217CF2C927696629CDC919A3A3DF6696C29D3DFBECB3D57ADA998CAD9E
DB5A268510A49C19FC950158E96C6E591D78352A507A468246B88489A782A136
C57938FFA246C2D8F06AEC6534916F4B482B2EBDEC62BC23440CA412E927A1AA
615FE34AECB4050B16C03A61191584082EDEB061035EE481071EC066C0CD7119
742D1E87AF3FF5D453307430AA75EBD67DE8431FC200585ACD6D7CD6596789B7
55BCD62C07B0C36E26A198C7BC61244296C1D558B972254C408658281728DD04
7D8FCCD9D1B84676B7DD5E78FE6F9908420D4561F28ED71191F4BA4DE8813088
8A833D68C2E880C0C2AAB68285BD33B2E5C68EB99ECE46E03583742E35DB8D14
03DCDEEE593386CBA567FBD72DC8751E73ECB1FFF5AD471BB5A6F9FF587B0F70
CBCAF26CF85D65F77DCA9C339D3230D2040CFEB6200A8928516330B1204AB160
45404054B022360615A4D81021894010F9E3C767024413490C2A1A839F28D261
1818A6CF9CBAEB6ADFFDAEFBACDBF7EC3367D45CDFBAE69AEB9C7DD65EE52D4F
BD9FFB89B25A50E927E90E136D0ED2D64879DF7DF77BFC91472DE2CC377125F8
F2555FBDE07DE796FA69238A4757AEFE3F5B9E844D510B4AF84AD724E56ABD6F
52B1D3049E6F0B02F33519A796D23283D76E13C5B114B029A20B2EDC34F91F35
631056882D7EE7BA850E0D4FCDD8F653ABF6DE1BC30E99F58ED3DEFEF5AF7DAD
EE572CF96816E1AEA57250B2E5C2FD761CD981B763EBF54D366B9B6BE49E7D29
CCB75842918727C79B767B51CFEA0CC3F6A6928A949CC6092EBA815C9752C355
C06E70C814D8052FAF70E37A203E03AF86358345ABACB9EAA0B84F19C0A73825
171529E1D480D5E4C69F254B29BA0EB81B930B8FB00939F13CC7A5EE11AD3AAD
643A5D74D514B872219F69C1EA2CFA2A194984AAA91CDC9FDFA75CCB40B02437
0147D3D92D32A4CA27924BEA96CF4CEE17C2ACE81653D14ACEE30AD0DFD8F5AC
A1FAC0073EF0E94F7F5A6026426184FFF05C482789F229919914A4F025004F8F
AE40B91BF222ECCD959203A9082A95673DEB59F7DF7F3F5789C02FAEC5C4C02C
1E202B5AF291A3405C33E2C9E210D3D3E71570CE6B5FFBDADB6FBF5DBDE7B4FE
F033AC8A7FFEE77FC6DCC36E8269A34E82D4BEAA4D72493E85CE5D78B09F3CBE
FBD9CF7E16CE1C9B841033CC1589EF32F12C9350AC175A43AE4A932D22F4AFAB
7755C8BF078B3E73086EF45EDC481C3D469F5C266A55AD89502D2D38B43D877E
CFB5B79AF9816B4A40B8A00602AF30328C5D0B122F1093A0CB32B65803A0EA46
0E1443B27C179E067D8CA173E3D5AE6DEB2E3C1112B984B4DA96F8E4E4934FBE
F6DA6B21D3F1D8471C7104CC7FD64A31BBCC8813818BA6B0AC8F3DF658D6E672
EE98E1C3837DF7BBDF65BF2646D49971BFECB2CB48C54E5B84AB1DB7F8C10F7E
C00A51C6034C9E20307923454C13FECA7ED5F8962C1BBE1D197FC8ABC5C665EF
78C73B2EBFFC72E5087132EEA20884CB71A6D8D29C204B73AABF7EBF5C0A4D9C
C0CDADD87CAD37E68561AD028536DBEB28459DF4A356B7FBE7473EEFB9871CFA
EB7FBB6B72E3FA7D4C75AFDA523B479D7868A439313BBD33996A56862A438D7E
16619FEF9ADAD5ED77970E8F47B3D1F0F0E883939BA6CA95ADA63B323EB67DF3
B69EC92A4375AF51EB45FD5D3B67EA3080FC465C0D6702D3F56CEB86A89F64E5
60FBEC54AF90E6247F1E1B199D9CCA3B01FB15BC826D6D177A54C096CD3F7F55
D757231104A4D66229AAC50EE5265D8BC7625FDADDA52B566CDDBE159EAE094B
E3F54632DD3671543359DD84555BCD15D998BC1F42CCF5D3C42F079E7595BDAE
C926927826E71EA91A6FCA78CD469385E3AF7EF5AB6FFA871B43DFEE8D566457
E92DB7DC72C209276055101960F28831960A991C842E36BB43C32C54C02E132D
ABD4F0578AD31B6FBC11BB403A8969115ADE2E47ECCB5EF6B2FFF5BFFE17B721
911F0CEC8BA990874800FDF93D7F2878797DF836575D7515AB89B4C1E98CE2FA
EF7CE73BBFF4A52FA9917CE0B47BA1FE537F52CA1995EDBA72437A648000CACD
2E317394E63C8F0C27A865AFAE4CEE39D6730BBD250A3FE3F08EC993E6107DF5
AB5F3DE79C73C839484F80CE2ECD38551BE12B78F7ABAFBEFADDEF7EB7E7C663
F140ACA8D198AAF889216F868E212C30850C76338EC10427EF472F84D10CBC27
C6FD8A2BAE20391CA7CD25A31858405C5B6E1ACF35ACDCD174516D302EF09C98
1BFA9D6E1B635338E2B81764E89D77DE49EA73BCA35B67C66970895A7E2F17B4
D6166E871FE876D35E6110292B1A6840C4435C9E75D659F8F994534EB9E1861B
5C3A0BB5F818783529666525FD829475B7CF43231167C214D8B0610345394D30
DCEB231FF9C8E73EF739DA0D34458952D9B469930C404EB178E094B01C20B472
E348AAC155F5B64A9EB0A3BEF39DEF60AED7AF5F3F5041CE1166EC94A93219C8
2AACE42391B9825B459D2A4411BA7091F010DF8D080BB5F499B4C33958819C5F
329C0F406094A9120F3E4302AE39C23F9148047B950A9B76D5ADB7DE8A3F4141
624DE2649187E03A7830165B73D3BAED9E38B00C9F240E4D37CE87B980BDAAAC
2749A0B29CA99BEF88CF396EC71C73CC1D77DCB1706D98025BDB1C1EC2644D4F
4D0D351BB16D6E1457213733681153F24378B456BD51E2C03D8EE2154B1AFD56
A79E999571704038BC14FAAEDFEB9856C3349AE5E1D84BDA713F2D7BF87F269A
CD2CAE1A0E56343E32DE9BED8E8D2D7F78DBD3DBC3EC89B89D7B80B67B71CBC4
5BA3E4CACB2EF9E8FBCF5F39325AE9C4A5B1D187B76C84A21BADD4E10CCE1808
B5EA8E288FBBE6185E93B3D6ECDAB1B31FF76B8DD199D6AC6DCD084FD8AE43DB
F6C1D6EA9A797953EC4A2C6FCCCE9EAB30161E0CE470D8B9561935094D189B74
C9EA1513DB36C371F5DBFDE526AC59DB25AE1BBF1178419206963D1BFE7000CD
9BF8516875AEDFCECC2E13B76C80C18397FB7062D572B539D4CD55FBF2E5CB26
77EEA8944A7ED9FA4FD0FD5A6CDA140C3D92AE87DB59EE9D5980F6D720B846AA
37BF9B35332FECFE0BA30DC290A02157D212E7453A49C6815D6A462A08065758
A6ACECCF805BC59E28B4FFF00C6BD6ACC15EA0F52966241C471F7DF45D77DD45
794B2D23D3817A1D4F7BFCF1C7E339050BA51C7033E27842B6BFA3FB3190DCE4
75F02DBC32BDF9D7BCE635FFF44FFFA40E572CA3672A5ACFA69E2EA6F0715D51
469416398FA9C299C32666199F63839343D42512B8F0C20B593E0341318737A1
67C641E11B320427D784D3C93427EF4D96280AF4A2D14AE6A28B0579A7EBA3A7
A76E9010971922D06996B37C510A602DAA392E3EE1603134441B9F607453444E
3E991F449D31C32171E626CFC8F1A4EC3577A95A5DBAA9E23D80C8688551F6E1
F531CA9C06A955FAF1344DB85EC579229C8837BF0C7A602F713A69AFB94A7AE1
C118039E8175E82C16C4879C32FCCF96D10C8393A380349F14DFF8C1D66C14C5
CD540622DFF08B7E41320B8E3AEAA89FFEF4A7B475682AD2EC50F52AD9C7DCA8
388697FD91948C77ABAE7129FE89CA12E6028C062C036232F1277E5DF87CB380
FD47BE2623662499635A08377271D7F8E1B5AF7DED2F7FF9CB071E78209BDF40
D438C936E242D9CD90A1721A55FBECB30F7319B8F2F5D75FCF8D4A1781611518
C2B8C2CF7EF633D90ADC3E620DE33B1276C0724C326131C46D722A4ABCCB4927
9DF4AD6F7D4B4AC5CD9B487E2902A606E92CC0E344674E4F0E9AC5E5EA1CED7E
D4EBFAB6097A56B6582ABF09E720B3BA815D054D929683B056AE64EDA9343378
A66706CDBD9360D4244D531EAA37A34E8AF3BD925FAA56A67AB35BFA3B7C13AE
5AB67A3BD475AF6B1B1445A65CA94F9B6C53D6DBD89FA995AAB87D278BC366B3
13645D93B4A6BA4BFC60556508BF6E9C9D5ABD6AAF5D3B26FA513C6BFA7EB936
63D25E3F67760C4B78B5FDF65D83BD69DBD20D2F99989A0CAB9538E9639D85E5
52D2EB873E14A0EF5684AB28F37F1082E6A453118A1827809BDBA8B5DA336BD7
EEFBF4634F8E19F327ABF69ADEBC156E38E4572D4B4B990D337B790328DB9C31
FF87039205EBA36BEBA4FD20F51FAC85D3DD6E14949A4BC7DBF01A33DBD2D6FA
CFB1DDF22CBE17DE021EFC95575E79F6D96753F6322E95168DBA17EA5DFDAA19
67C617EB012B4D512EE3C08B8CD3AF1DE32638982E2BC8A488EEB96554963320
8524A6A8F90439A4F3FD8637BCE1DBDFFE36638774EE21B2D4E8D66504931251
C1159E8D85F2AEA6304EB7471EDC41F25625914CE1E0D1EEC7BD18E5955783C7
C393E0E2871E7AE8FDF7DF7FD14517414DBA602E53F8BE7C2FEE383EC669A79D
76DD75D7A9820B87C0D80CCE316C40794B267C4A603BA0071C7000A4366416B3
D9260FD313B885FF2126F094129AB8D30F7FF8432C4DFA16C46A335E2FFC9E9B
D4A44F8CC93EF7DC73BFF18D6FB09003CFC759E7A4AA2489EE173B019802B38E
4F582AAA09F60B166F9936981BD10A1A8775C5143536B81D7623633BA2201695
891BC371BD9C3D705913E88B0541D6305C47A5F4AA1C10572AAF26E83C71714C
CE2F16E276DD2055FA63D10885BEF07CC643A0A8785941FE682AE905D9E2C32D
46A49AA725EB3B2D72DDBD44E5C1102E96111521277A0000EFD64EB846AEBB93
B9676800B152D6388453A6E08BC6F072E8545DE0B29DB8B92253187CF8D30B5E
F082871E7A087B43711DA9524E991BA1C5DD7105C63C9883E0EA12584C91768D
8642FDB4E83FFDE94F3392C62A405CF9AAABAEC25FEFB9E71E2CB6E73FFFF9EC
97255E2DE5DBA8745D2758997B06F0A9A1614713868A9114C30EB3CE42086AB5
D01897432F11F0BB005AFED9D8F8381CCA9267A036E071D74B956178F0ED3674
6AB954B6A8E624AD972BA343C3FD899D2BC6C6D25D536371B2CA9883AB2BCABE
D9DADE32EA2F85CE6B47ED69331B9AF2E8C8582F8EB6B5B6F89566EA07B39D76
25A846704D479A8FB6763DDD6F57AD2AAD6C897BE530881BD51DD3AD5A6082D8
3CA3BE647D7BA25AA91EF3D297FEE4AE9FF6D3AC6DD2CDADE9AC54EE477D3F4F
9456CB15965C77DBEDAC54ED45FDDA50B3D3B24B25288552C0EA824C09BBE7E6
287B3E709137BFF9CD9087B06569C8C2BA6BD66BFDE92988F0B5C3CD787AB669
AC5D1258F3C5B27AD5ACBF6E43E47D9345B0FB31B0B93EC63668E52AD9F64F34
D96F7CDBEA78470A2BC3AF2C59D26BCD5CF8C98F7F69DDBAE1E612951B30BDC5
9052965329291F21BAA4C5E48664A9F63BF60E59EE716081EDB7DF7EF058A880
59F04390A66C65AF6097649DAE4C7FD5CB0A64AA6DA89F07961CB120A6E82084
FFB18C712FD511F064BE9470B20338705E5F1BD9CC27BBC5436277509EE3FA37
DC70C3AB5EF52A533016F08D4CEEF8F15B64C8812E902324D25CB91C5C007848
765BA10320DF92D711B284D86CD620402DBEE73DEFF9DBBFFD5B16079F7EFAE9
F006714D5C0A263BDF08E7E382840D6155CFF5C495EC8374A6EAA26C65DD1807
82A145A5A999E3249938097B39F17C61852EF12D5C13EAD3CDF3634C0F3BEC30
081752B6EA43B57038E69863EEBCF34EB8EA9FFDEC67393A74C4DD9319EBE000
519E2A2AA2E6B549D1AD889A80E0856BAEB9066684DB6684D75433064642084A
5C6C03437D624CE974A679EB2E46ABF015865C244C99BDC087A41AA7F6FDF8C7
3F0EC1AD8B0F04543D6F2E37EF26C8315BB80EFCB6DD3E8FB2ECEE8157F8C007
3EB06EDD3A3A85787D2C0BFCC0D123AB8E8C38FCCA56D51C19A5758DE36552EB
D04B8092C04EE6E6D97FFFFDB1C8DEF8C6379E77DE798CAFD2FFC06E8735C0D5
89D717444E8D29F5E20A2B310CCBADCE44C611471C71EFBDF77EFDEB5FBFECB2
CB18ED906BEE3945754A41E1A6B8B5AA7A589BC8EEB0DAED748E8520130A9D29
22F20FB8F00AC5E759FF80EF721740D9E395C94240E18569C5C57FF4A31FF135
F14582BC7435D62A704C08B052ED0AEECB07738B91041363944C6005229F496F
C91C957840D92DD4356D597C6CF76FB91447117CA2D6CC6C35B46AB9562A37CA
55ACE0CC7665B5B8212FCF0A574D580E4B61DCA958CD12BDA0B97ABC9354928E
AD3BC25F4C10C570E44AE54AA907311DDB478DD3A465A252B9D683051394EC88
371B8FB5279E8ABBA390C2F591C94E2BAA95B7F4DA49E0A5FD6CB4541A8BBCB0
D9787476626973A45CAE6E9B9ADA9E74CBF5DA647BAE23B597992889421FD65E
0C153E1BC336F257AFD967EBF62D51A7E38741DA8F1882A6352681EB96C9FDE1
07EB732013E457CD6109CB7EDAEA8D7966EF4A2DEA76FE74EF7D9EDCF8D4B26A
D8EEC6155BBA64A3D0560F990C4E4D025F374EAB78A234EB5BAE1483E72C6536
36FD5439DBD84FB75BADEC75C352E67B4116A791DDBAC46F13C44E343B45AE02
4BCC41B081C742B9A44CE7801CC022C7BE83B0D250B0D7023E67B7793511C241
2300B7639887E7B31864E148064587A5AC206E33F381C7DC80B8147CBC7FFFF7
7F979948AC0FC1CF10082CC42276840B551141D991984A7889F7DD779F2960CC
4C16B046068FA7BEBA7C06C5CC4920415143E7818122BCEC05175C80DDCAB0A8
A03FB21B781115D4D0191BA85A14653421D04A8C9202CC14E12846AA0443C680
60CFCE159A7250B0B7F10EAC1F5717238CCE59679DF5F9CF7F9E74FC50A25CE2
3C59B537B896C84507EC3297BE4A9D8A094CC5D8B10F0C1D2642D88D037C200C
8411C8C021D756F9AC8BED92E582A54691CAD4375706C1B74C55322DCAA02E3F
24A014DF2586C5E404A182202D56F6C3E951D19B29AC3C771B7395244E5F2028
2D169BBB3D3716469E3DA7D2CE2F1A606064F0762C28DAEDF3900E972153DA7A
18C94B2FBDF4E28B2F86F2536E090B82094B3C15B3417811CCAF48425491AC74
382D09176A81AB3DEF79CFFB977FF9177C2E51450388D97405ABB9A2984F7AE1
0B5F08779016006E01B54D675DFDE35CA9814F04B9FCD6B7BE058FC41489B181
B8BDEFF445760B0DB95171293CEAAF7EF52B6C0301EB8805A3E5CEA6BCC42864
4E6B6EF174AA73254609BFE26A3FFEF18F8578C77AFBEE77BF4B8B136762C031
6277DF7D372D2D2FA70063888F5639C6106610EE082BF37BDFFB9E1B3A66D8F9
E69B6FC6B7700203517C5416C463103014B045CE39E71C5555724CF016B838DD
1A3E3F5F3071DAD5D91A92219B33EA6027964B5E92667152836D1D94FCA857AB
59750EDFD7C6A5FDC040A9469D86C9563497859DEEB357EC559F9CA942C7FB59
3F894C92750C947150F12BB65B12E13F590CE59C95C34E924C745A1D93F4BCEA
F672BA35EDD4A36CBCB164476BD21B1A9A30FDAD33DD914A58F7C2655DAFE3A5
3BB25EB55C6F3487B74C4D4E65FDA9342D57F22885C942ABB69266A54EC4E9CE
D9767368E819871CB4E1A927B66DDA54AE56FAED4E2908A324AECDEFDC2556A3
3F4A01AB3C0F73040F81A1601B7D29994A6296A5E6D091B1646A177CDFD192D7
89B2A60931804D3F2C9B141649DB24ED3C0A1D546AD50C464A1AC1ECF132883C
6CCE304AB79A682B866964EC81A9C909EB3087397A2BEBE5BD7A1885E29C62B1
BDF5AD6FFDCC673E030314BBC6E4B5820CDE2E54C09EC3A2658A748CEC0F8E0C
269744981008F0CC145262460F8B0A6E097E86997BF6D9670FB42A125E929EA8
29786179D301C0CA40B502E93669100BE1A59A284A15A572C53AA9830E315FC7
CC8F6EF210710D9F96704BE14E54044845C3740F814D6494749B88F367D9CA54
D814957A5321CFB5EFF03FE5038617D751D1E68B5FFC62080ACA0D4232198A27
669BA8146FB1058A1161C527E3AB546F70AEE156D3F960000D8636CC6D9CF68A
57BC62FDFAF57050F0641C083A281407D4B87461053CE340733A93A287E50025
A10E7E912549A608D6F1EB8CE305F90AA6DC812274B3111A325314A767452F07
051C08CDC7FF2ABE5403BBDD1E5C19DAF32A5CE12DB8E0B8B6A8F0948413270B
979752D182F651F1739404B7A3227753B3D2317A0002978C130AE6AFEF7FFFFB
B1A98C03EB38E594536EBCF146FC153BED965B6E814DE092E852078B828A6FEA
B6DED48AC7E2C3B7941B6634C2E4160C16314BEB9483A127CA98BF1B3A1E2833
70298D8484A2534E624B6D788D83F62D5BB6B93010F1B72892264EB8852C2BAE
C5CD2C118C2A9CACF407D7EDDAB56B69B5C858C139FFF88FFF8887F9D4A73E05
F3F6DFFEEDDFF045B6F29611C3D0911BD663BF3C1101B2BE93402D3E3C09CCC9
C52DAB42F5577C546A08D991CCBB5F75D555679E79A60BF1E33A61FB1D966A6C
7AFA29B88D63F53AD4F08AF1A59B366DAC42C6A5493FCDB08BC66B43A5D4EBF6
66567AD52CF06B5EB63A2BEFE755970441D78B27B35E3931BDA8572D55866BCD
89E91D23E5E1FDF7DE0FFBEE91D6B6A81F25265E39B64F36DCB8FB8907CCC8F0
86A99D4B8DED48581F1ADAD69EDE81F12F59777BACD698E9B7EB263051BCCFDE
CF583FB1637D6BAA9F076CB5F182FC45FD6272FA491696CA5E18C03CB0E5B426
F5F2E46B5AAC224D2586F7FEFBEFFFA315702530FD38482D242D815982D14BD8
4E3E1ECBCCEACC5B05399BB36459C4998F9F6DABA69A0D04D8C5D0EAB6E33C2E
5DAF84496AE9B3922C2732F46CA41AFF6F8D92E92CDDE9998992D9EEF9BB3052
36D65031DD099B07F2E0F1670916B06F22939A3431D1EFA60F4B05EB873D72C8
82C0054999EE15740B02D5AA8589BB9DA50F887054F53925153F3185F1CAEDE6
52BFC545A76152BC512078F35B7F7A05FF149FCAED21418C950293D2DC94C07C
1196BC534AAB8C45958A8C35B2DF06AE40363197C15E0DE629A9DEF18E775C79
E5951CC00F7EF083B08F25737865EE2921763D87127140C64A40B92FA5B80B4D
843DF40260B60E8F84EDCCA1833FB6A8027639CC3876E4C4E053AA2882B14D3F
6FD84E174A076D8A534F3DF5AEBBEE6234831E123EA77DC1E496B68D8B2C5878
D09F3085832FD0B28AC3A8AE88C275096224B6CC828A759C497F5AE072759DE3
15F6E001FB4E1378F9F74256B3CC0E0FECAA1FCEABEBB7D124C499E444952EA1
0A570458D84256827160D3F9A48FAE93ADA6CE0CBC93FA4ABC685EDE6087F7C5
6AC66313C8F6F18F7F1CE6365F4497E5EB08DE4C25C1BF62FA5EF292977CFBDB
DFA6B1E2E632156330F3A1DD6E0FF0CC69652A1C045E8D0D94588426B6135194
C88AA2294DDF5A58B9CC212DD721F4A3571007BA3D15DC15E22D20C362F84499
72AE1606B5DCE5075715A60C24DAADB7DEFAFDEF7F9F196B1AF58A96F3CA5FF9
CA57DEF39EF71027C201C1CB72CAD4E191C3A255A1F28FDD3E274F26A8822DAD
58BCEE0E0293204F3DF5142FF2EE77BFFB861B6EE8F73A2BC7976DDFBA75DFE5
2BB66EDB1AE41A65BFBDF782FB3B3B31E5C7E9587378E7C4B6657845138ED5AA
FB9787F6CF2AF57E34D19B99C83AB5D072A78C0E0D57FCD2AE1D3B5B597B456D
59AB33BBD1CC2C1F5ADE8962A882E7FCF931FF70C7F736A6DD5AA53E6641C2DE
E6B803DF7A479A04CD72DED7A1840D5049824ED25D36BA7253AFB53D8DFBBE81
3668158FEF73064D118A4CE16397FC52D887A9902BE0001A2EB3D06D39BE9CA9
830F3EF8A1871EDA830DBDDB230BAD3550CEEF6CE3E4B6D5845F35FE5E266D1A
6F8981CB9BD60C6942706F534F4C1EB1B70A7B6E76724AB07ED485EAC43F6E4B
A8A3B23D2D4BC3720B8E8D4961876E4FCDB62C9B819F1C5412AF63515A360D90
17DE047E8C8BA5F1487384C820975A475E8ABBF25DBF5F5AC10D1FAA5894BB55
0241EFAEA01D91C02E57B30A0A241918FC13A3962BD35C49ABEA5693DBE53405
7030B32E94A512CF824032B4CBC58C27C187DC1D8CD5C91F80AD79DE79E7519A
B1FC928E0461281C0A61189552E4876EB11337B571DA8173FB53D39BDC1AE668
BBC93E9527294E2EFEDD81438871EA9D97BEF4A5F7DC730FD4DFA20A58834EB7
92BE822BDC5D55C4E116F7105353D4F3ECB443D837F1C69C3C0CD65FFDD55FDD
7EFBED642726029636FB620ACFE43E3E2ECBCA6E4659C5F0C0F5648A526B97F1
CBCC8FEE425B6779DB09B7F649D5C6C42A331439D0A264E180F2455CD5828B93
448CD911D97A032A410774DE05175CC0CF99181601C84273848A568BC0A58C5E
B97225843E17254BAD7011B7CE585029E5FBA99EDD2837AB78B94B55D8CEEC3B
F4223E57798F3A8B9D7FFEF9EBD6ADC3AFE469E30650E725E36871E300DC5CE0
1B17BA205A0C68AB965A88471527689F28B9C28087B8DF5C334BDF723B74F1D0
9499F9505237AFCCD1633DB7A20B8C81A705BF20460386C8CD37DF7CC925979C
71C619EA91A5F839C699E74331C35A35B90B42F403CB18146B21D49F752F038C
578B190A0A380BEFC6783E33BEDC959C534C2EA966B8D12AE57066721A52A759
AE34ABB524EED1C5EFF5FAC3B5FA4CC7160E0D79A5FDFD4A3F892002D6969A07
98DA5092467ED2AD78BD08FA0F9E56258DE24AA9BAB5BB65993F0EE768264CB3
209C4E7A3BE3CED27DD73CB4F1C9569A34478693A989FDC656ED9C9A5AB276EF
7B373E3169C5BAA9603326D95EB5B1D00BB3E1FA6FB76F793AB19E0E061A46A8
97CDBD2F75307EB5112328B8B064A09FB218969767523FB5DD15A1AEE408D2BF
81B0DAB061C36206F4624790B1602ACD3C5C382B67D938EC0F533AC42481756D
63DF6A5FAB803D7AE6293FCFD5B017E44EAC9FA4E974DF2A60EC372EB89299F3
80874B96D9AD9F669DCCECCCCC2693EE347EDB0F770691F5B3ADC39D2F3C1AEE
69520AE716ADF013A6E885EC3A9DA6083B73DEE9D530E5C19F6172BDF39DEFC4
62A3CE23BE048BE7D8638FBDFFFEFB9F7CF24905A85D460EA6392863098C70A5
19A3F4A6D0DC8CDEB9DAC1C5C1098E40FF9802C72D51215C83D574ECA5815D40
0084902838E135AF79CD9D77DE29761A355BD44DB5CD251E193A655D8C1E46E5
4982569905A55C94E1A6283772215D9A0853F0C6ABE860B7EB2A2DC8B4F975C1
8A1755C0445D2ABE4188B6DB7ECB38559B8CBE623E203AEDF2CA1D0B45ED3519
7C4A2566082A7103477B38C43F4C179E23C5FA19C83B11F57DEC631F834A2332
CD155B3ADC20955770840A469B16ECA32C2F86A85ACC20088AF6737C29B1102B
96AB5BBB9D2977FB5E4C31BA3539041BFB45C7123A3A6C9C878B53831E78E081
9842D82EE2BBC05BFFCDDFFCCD37BFF94D0E290410B6872AD69532142728A358
0C90B2560783C66D893FC151FBE217BF484A2077D7B1B4090FC60167BE44AC55
228210F3B8147056B4B976C3BCA6003A2A5F457C2FA1032CC2535C4BAEB3E0F7
03243EC1FC5648AEDAC6F5857EE2AF1CD5C51873082553428ECF4FB30C6F44CC
94F6959C69BCB8501E7C3CE945ED7C5E47744B1C40CEA90B23B8E9A69B4E3AE9
24F6287451AF0B3D602C54CC8EBA364928935A849F63A7E081699CE17CCBE5E4
6561E6C5FDFE58BD31DB6E35AC291FCCF6FA4B4786833CAC0ACDFA8CB56B8F68
8EED9A9C4CA6269775B2D5ADB41A771393C5E5200AFD567B26B21EA93978EF83
9FDEB8B1D9B0D6DBF6A8159782C9B89F342B8FCCEC5ABD6CC5B61DDBBB59BA7F
D0A884A5ADBDC9BEF1B799B4346CA541DC49F631DEBE4BF681A2DA1EF5EE9DDD
8A678DE056D69AD3390AC6BE6CF63B1D9CBF7E804D9BF95E6212AC03388C5E9A
EBCC22EBA9A9E490FEB121E83C0AE763E19A1043903612B3C694F70EEB6BE2A9
2467FD8873A71C7F2C9BA0641B4EF4E15B94AC269E9BD37E1CB5A27ECF967559
054C5C4329270E817A1CF5E10AFB1563DB28438A6D31E9D6C09F098347A36EDE
CEC22451CC27F672C03ADE902FA2FEF3A24D35858E498BE6015484A6700FE40D
9B3C656BE6B70382B8802B29435F5134D60B3181825F193F736BF3B89CF02BA4
CD6DB7DDA69C20736494F31417ACDC633491CB9265AEDABC94935CB41492106B
8F3CF208DF6E808B868A466D7D49FBF3A1FC90327293743435D45ADB14BCB62E
CA5AC6BAA8BB5C40098D6CB7FF8A3062AA86324E887EC035750FBDCB00E9D89E
3C600A62E25328264441EE153C20BA250CFFD7BFFEF5B7DC720B240861A8C41E
D349C7AF6AC54311A3ACBB8ACF2079CF3CF34C7881BB7D9E97BFFCE53FFFF9CF
59A3A6A025B7DC273EF189CB2EBB0CB6D2030F3C600A466BB7A7BD2BEE21D148
F8677206222E56E20F4987C4FA7D4CED89279E78EBADB7BABD35DC83EB861911
6926FECC77644D1BCB275CF96B1644C24D6149E12B64936659B60B6D50352DE7
EFE0830F7EF4D14761BDFEC77FFC072B6E091561905F8E3B2D4DE62764FDA970
88D837BCFBBBDEF5AE2F7DE94BFC2B5E1FDB529509248CE415B8DBDD7C244E60
D30BCE26C33804E8BB0FEFEADA8583E08652A5CCDCA6DFA2A815B30F7FA5AFEC
06C6077C5C5E590A5866AC5C2589A701C5669CCC0B0D3EB77DF79CA42E1231B4
939807A141C0A69634BA391A98508C246C798A332C424222655FF34C358A60AC
4875046E39CD8002F69C16D4E4E7622B1B21FFB920494E891FF03F79CAA03261
AD1CBA76ED138F3F3E3E34323933550F8217BFF8C5471DF9C2CB2FBF7CBAD74D
734DB37F9E911D36E62033F44CD3586253B769BFE4753C9B23C88B57CDE1871D
FEE8E3EB3102ED5E7BD6F32AC3CD0D535BB35A757B6766D5AABDD66F7EBAE605
6B4697857EB06CD5AABBEFFB3F3B4C12D62B9D760F0F7048B8A4D91CDED59EDD
94749F4A3AB3151801F90C96429316D08DFC07CE53E057A005F10F0AD85001E7
39E0A470A794A8536CE08F3DE0FB5ADCB74D2CC7B5C81C68FC35616D346ECDB5
64F24D989A6A66EA59A99285BB4A51096AD778509C14E2BDA8DF4AE2BEEF41E3
F5331F6A38B317CB2A5EEA7BA6969846609A5EC986FA53B3CD4BB785DE4CE0FF
BA1B11284046042F57C05032E57A8DD4BC6F7BDBDBE0AA42065208A84E495D93
195CA4FBABD21D799C5FFBDAD7205DB9E9C4FF4A35C6458ECB5232D7F2834624
4E7BDEF39EF7F0C30F63211138ADDA1E46C5E91333AB18E4BDB12931F07517CA
1A14CD6654F9C9A21D8178F8D6C27C915A00520E52880F29241404026414EB02
2869A1386891301EC941D0A5284F20DFCE3DF75CB88862D35B4C5372C4249D54
9A2CF8957C592199702F0ED71E889B9889D756E50CCEC1CD1653C00AA341B35E
7FFDF5C659E2D2FF2E848CA0127DE8F2F2133B278629A56CFFF22FFFF2273FF9
09F4874B64B1DB434E1B5D22593A340E38ACA4BF27BE80C431D2BEEE7B51F8B2
27ABDB4DC5EDBB874F588EBDD8F830FAE74A641777670A6233BF68A820BF7F20
2DCDC9A0FA67EE990FC3822522E528FA5909A3BB93D89265CDA27D21AA99E790
C9598A5093A29839D3A8A45FA6FB4EABEB95AF7CE5FFFEDFFF5BA4666AFA9639
5D23315669CE688AF33192471D75D40F7EF0032A15265C99801908EDBA043766
7E5E40B84DFA8558D3981ACA089712561166F6FEC42B10D6C86CCDC2ECAF1680
97F7A162E057295EAF202B308E85C483C2858101ED408A3CDC14E3FCD0430F99
221A8F7370F14D9B36A9059E0A973114F82B06193FB0185D605733BF9D38BBBB
88AC83E258CC097B0841631C706B2E577C0E517BFAE9A74B164B0FF12E948F76
DD6619545F8F567958DE7FAFD58F6D78020371F0BEFB3DF8E413FBAE5C05B778
627A7A4D602331A341F00CAF7E485A1B8BB35ED29B31BD96C94A61054E683F89
97AF58F5E4D6A742CFBA3B33D5605777A267E2D05422639FB5DAC869DB6767F6
5EB1EAE52F7FC5F7FEEDFB8F6DDD3C1DF5A03257941A2BEA4B8252B879766A53
BFFB74DA69875E2FCE461B43D3FD8E542FFDE0B94D175423CC0C3EF3AD6B0C1D
39A08083A2296A5234CEFBE3B42F94A4CD38FB967212539398B5C6C04D1FF533
3FC8F3E19E2967A69AF8E52C2C9B70A26C5160264ED278CE4634BE078371324B
E801F7AC176B9FD03AC1D87799698656014390CF2609341E243796D76F6C8387
0AF64094C46420F1F216CB2426330ED10A0FBEA66C2C3746C5382773B4F28C59
E1C26546C8959B64D11709AF1162115F24528746B00BF924B101A3E28A3C919D
86F50B0325093C58BDE9C2579596C2328606F9C52F7E811F18D956B28C2E9F2A
F509FFC4BD589527AA1C6E4FFC4FB14C1E24314F888487BD70DC5A292F0748BB
C17C8530454B3C30C85E418787FFE1AEC0205898E4720F8E86FA5268E41755C0
5FFEF297CF3FFF7C42CEF010D75C73CDBBDFFD6EF53CD069CCFB7A05288EDA11
23A85222C265692C08A286B7A5A6749B3A991CF5EE2E32F7707BF8F07DE04C9C
72CA29575C7105D5123E616F73DE545C0403AE275EEAF6DB6FFFD5AF7EC5CBE2
2BB82029EC797D2275BDA265E662E3E37253F0EE6EDA6F283F1890173E599772
7FA046917147C1C19A131177F0FA2AD0725932F4339F0737FAD0873E74DD75D7
E11970325606AEE37E8B7B8C53C0C21B3CF03EFBEC0323D7255AA26FE7153D77
613FE2B27C18BAA45A678A03D3F3A6D017F879C0CD950A59F8A116157D4DD8AA
78363CBCBB5E79F0571634BBAFAFCDB370904D5EC20111867DC288AE9246EE69
EE411B9C0814F564C42261FAE3C8238FFCED6F7F8BF7858CA0A1ED8A48F599D0
1E810A670E8FBD9258F84816174E07458CAEC690BE48825C6CC4C210B4925518
3AF9E26C77434D2F924B7678A5EC181D199A9D9A19AD565FFED297FDD36DFF3C
64CCEA652BA727ACAF3FD36E410F4DC6FDAACD40DA3AD711D873263CDC0C3DA3
32EC97FCE9B4B7AD3D5B2A575AFD7664D2D0ABCC66DD7AD080EED910CD362AB5
AA17948C0FDD3C154D8F8C2DDDBC6BDB6C182471B466C5DE0F6CDD88B91FAE36
E0C92E6B2EE9D7CAAD4EF7A9899D1BB3EE2EDB8EB732DA1C7DD5CBFEE26FBFF3
0FC6717F9900B67B24ACF5E2080A188F614F482228CA12965C96322AE6FAC1FE
E2ED4A173D7CEB5F5B17383061D61F49CCBE980E4C3DDE08DEB79795E6B8A733
BAE5BDC087EAB59C62CC585BFFD90F4BA55DFD6E9C59160E2AE020076A05BEA9
A7A609FBB56C033C6D4BFB65F00F42FD97A694057EE4C3BE892DADA667A9B3B0
ED433F9053ABE266692F387F649BA76E50DC8B0C7DA2BAA3E867EC8738676242
D9F0662E109A1BB8B46219C11EC8219AF9505CE3848B59E44AC5E64A487620C6
8391A0975D3B7FFDEB5FAB461F5A40C11E8146B97A0F39E490E38E3BEEC61B6F
64868BD44FA6D0CA32B63020F8842DFB583224D393DA0E363103A284A7D02219
300B162E12DF69254EA0B171D2A0124A04FC1E74D04118072260F4A781439037
1AD622D3DE93074C314721488C99B41A95BF29520B26376DF09410E5184197F7
92CF44E4DBE1871F7EEFBDF72A02CE0F494F28DCD61E149EA26D18533AAF428A
6286F06E4C79623E94485BE8040B9CACB42861539E036F839CC5F3405863853D
FAE8A3BB7D1E563D31EB60729F95FC355ED190E7831FFCE0C5175F8C65F4E083
0F1A07E33D30D92C0833B9C38AC7265B08561EAC0452B5E9FAEA8D485B019FAB
6D1F879A9B908159BC0B2EE8AE1B33BF817C50F45993C1A87602DC75B83B3E81
92A097FCA637BDE9EEBBEF269A5D54E34C6FD3D2640AD9055EBAC167FDEC39E0
3257A1524030604E1E0F3C15C7D373D095FAFF7DEF7BDF17BEF00586316849D0
1A5DCCE349733E6138A0922F030FE3268CBDBC9CDAE4BA133FBFF5AD6FBDE186
1B5CD6025DCA14968D589AC5B3C62DC7EE9990506F7EF39B6FBAE926B211E178
C31BDE70CB2DB7D0600DF296C9380D03FEF9CF7F1EAF468E0272C10FD4B30E28
60EC05A86A059F4D119793D92E2758C9A7B9661B5066BE8F3D3C363CD29D6D95
E368A8DA80BCE9F53BE55235F2B24E12C5707393B4590E473C6FAF9E39D434D6
96A1A9D3EDFD999E1F942AE5594B8551F2C2204AB3384BA16E83E5ABDEF49AD7
DE75DB0F1EDDF8C08869408A4FC69DCAF010F46B7FB65DCAFCC83238FBE5A0D4
48FCA5B5910D417F72767687E9B77DAF550E5B70F8FAE9F30F3BE2BF1EBACFCB
7EE7FEE64227A740B2A0B0D8128694F3745D1A430143A4B5FB3DA5A5C80BC492
C23F960B1A77096D9363EBDD56C378348D567BD972DF5B1A55CA26AB7A5EE8A7
91493A26E9C2C1F5E69A22563CBF52B2E1AB6E6C1B2396C3523B8DE001777327
38CED53A3437FE8746AF07956AA504D716CFDCCB4C2FF37A26BD3BA8F5B2A49D
C2F9B5354F5ED9D2009B28B60DAB8A8C29A1914A02126886CD2E3789E63B573B
73B1142F594EDBA7D8CCDBDFFEF66F7CE31B342529091947C55AC222C4725239
25235258BDEC1EA6A548B5870BB29084D00AA526B9955C335D81404549DD9224
5300BEF0DDD5AB579F74D2495FFFFAD7E956B91595783CF23E49F2883853D751
D3175921DA17C1FC76AE52646E51A832C1A6A88C85203AFAE8A37FFCE31FB387
8402A5FC99FF43C8C381A10FB6D87ACB1CDE46814FEDB0B8693933BF2F022E27
B82CAD06DC58FD6D940CA73D45AC8A60B70C9C6605CD320F06E8BC1CB2CB6A36
BC0C2B3D4CC12AC23757945BF1409363B021BFA8CED5158743CF51234C8E0110
55A652E83CF7B9CFBDE79E7B34F404DDD1C1554343853BE8FC89DC517D1C4DC1
EFCFD500F57CDF7DF761DD93CF85B2928310E4ED2BF0752E2355B55249F08272
5FA89B197626C6876FC795C74237DCEED8638FBDEBAEBB366DDAE4DA130B3D48
2912B7D079E141909DC05378862F7FF9CBA79F7EBA291C7146A2189961DA89A1
4BF537D44D655F2BB033B0D48C13C17681155CCAF2EC35F86E418EC01A597150
7FB0DC9E0EC17BDEF39EEBAFBF7EA09F9AF2318C64B8806A02A715E052BE598A
79B7E567AE0DB1F07337FBC83B6A4D2A876D1C079D22D2E4C9053AC76E331F17
E1C5CC0B973AC40D612C1470F81F862FC641EDE1980EE7D272DB8AFC0E44D3EB
FA9917E004ECAAC083E86D66C1501A8C04F818DA244BB234B6CC1A699E93B0F9
CB666696996085A9C21819CAFC15A5DAF2DA70BBDB494BDED6D66473A8D169CF
4609345F69787CE4A9AD9B563DE319BF78ECB191FAF8780D36C4968A0922136D
0BDB416C1DC1A6659E0E4DB992944ADB67263698D82B85A656DD3C3D53A9555A
BD3E86208432EB474C827472C287A034B7C06803613BE075208E0F38E0007808
18968B2EBA68DDBA759C776E5BAEDE3FB61F30F67023312D3F81B27C5E521A87
B7EB47AB1333522D597CB2ED309867344D16C5692F8DD8E6C812878541C96387
441BA69EF07C8B56CBB2BE2A91F2695D01BFDCCE6529F1FC6E9AC0E0E8A431D6
E513613558BBFAB8135EF7A5755FF26084786958A904BD7E12787C6BD19C61E5
D31DA470937F660A5B909B82A160AE79C566B4C6580ACC70341706E52A4D7C45
5C841A3105BD81CA2E3EFCE10F5F72C925D411F8136EC19C8BE770DB3122C8CA
3D01357811B6CA9628B8F2CA2BAFB8E20A52AC8BF040D5190C6D52200B7E4B05
C1B40ED436FB03C949658A9A5B00F2E1073FF8C1F1C71F8F5B0CE0345D3496DB
4F96F7A5C681570937CCF5275DC1BB50D14A9431B7ADAC998294C681622D0A11
A498C320422E9F76DA69FC502E94D8915CB949CC2A550873F2D49D84288B2F09
3FE082975D7699CB268165F4E4934FD2A164D482A6961209B089308EF813A415
5B265080BAE803CEBDC648082F7C78CA29A77CF7BBDF254D01956E56343C71CB
7FE9FAB0A286B07BDE5D884A393D78B0356BD660E96705C9B3B48E57703389C6
8CBE325906BDA25E5EC6975F50F59A02BEC89FD523D3146C888468ED5601BBC1
1F3794BA18C25C405CF583C2A4FCFDDFFF3DD3908C64AA3180968B1BFD3605B2
C0B519E5595221CD0159E7B78B66A29A8993D4E915CA61579007FF9B3CC442FD
A464B03EA75DE8361B51636D4A1CB70E016792A683CF4F5BD03563CDFC26E18B
852EBD05A4A16E105B9CAC1A76975ACF38E6115D76BFE8CFCA12F68155610AFE
19956D78F3CB10F1822C91E256E234B90FA00C19B7BD7D0CCF3A7981F1523F83
02868AA3025E5ECB891DE0B5E4D0A6C8AA61DB52A11AFAF5D85B62C251BF54F3
CD78A9BA7678D97E4B963EBC75E38B9E75C44FFFF34EDF0433A6D71C1D8DA767
2BA979D04CC3A02BD74AE5A1915E2782AAE926D16477763C320DBF540E422F0B
EDDAAA56F06FA235B3C54BB775DB514E4FBD756257B9DE6875DAFD240DBDB9E2
EF88F8067F4E1330E83550078F713BF4D04321BEA936240AF62028173B1653C0
C39530892D2EDA9EE48718A25E0257386D93341EB211D3041F37B53D914ABED7
4E4D3E8CA63F47046D8D0F18DDE3383F0FF726068E6FD649D3765ECEFC903110
6AF5154B26B64E54FC7237CB210299E5185329398D66D7A8C585FEFCCFFF1C72
151E18F5342D3F4A511682D271622D1CE184F8E195AF7CE5EDB7DF2E1A224942
8E983C579264B1B0C514A12F0A01165998BCA84654CF1083447E5186F3EB9218
69D19F9BB29D5B40AC8B780BB7F4CE2FA8DDDDDC330165A2F1A1B4B9F9E69B4F
3CF144333FC22761A5DDAD86B603AB823FD39DE3B748080ABDFBF297BFFC9BDF
FCE6C22BEF413E50F70BC2499125D62017F3C15CDEBC14A97BF03B9C54975C90
496CC5E830AF0CF19BDCCEC21BF26D290BC4DF2DE00F4503F53715122692814D
B10F0AC0422786521E26D219679CC16723668F8537B80227523E19F72D5D04CF
690942424A957379456DA822F26EE52B05B1EC0C0268D50084AADDC50828EA65
9CCA5789573EB6DBB5432952895AB78B14CD31D69BD2E31498D9B54CDD053428
479C3CEBEE054D5E212A229BACE02F9387AA1F82A2370B762F299DD91F8DDD2F
14B3D54DA5745532242F9FDA1A23C3D811B420394DB1128872C412C269D8CC70
CDB1BDA9B9B11E5833C743517D4E8A4AB14D61292B5E82EBA8B93551272AC035
0ECDA75B8C48FE9085D97AD9CB0375C63274F409A1798C219326CCCCCF34D35E
61C24C4B5D6100F9282210D06062F619245435A0BE25D9F7C217BEF0EEBBEF16
67881EEC7760C9C4C66CE501DB3AE05C012FF56DABE0284DF225E825BE89734C
4AC5D876490DE3E7BD7DD2A6316B2BE3FB8F2ECF764C8EECB3FC374FDC7F507D
55AB6D01D58DDACA473AF65DF63AF0198F6DDDF6C4F44E5B495CAD3DD4ED8C55
CC9A7EB593F54B5E6578E9D25EE0D9A46FAFD5CED149E56A6DA6DB9B34D06779
05AECD955A0D3707F8C8DF945824E6FCF8CAFBEDB71F860E23ACC20A0153BD02
DF9EFE0FA8281751C043156BA0A4B15D28B868DFC0B54DB1B161346569E267A6
EA5968B4855959A45858F1B324F36293F653ABB8ED46F672C8714EFC1027708E
4DEC7B36499C25F0929F0C2A8F24BDAE6F4A5E5809CAB331B4733654AECCF4E6
82799036A40D2761FB1CE23A4F0E32874AE401951916C945175D74D555579116
91CEA2B00259DE5B89D95F52C09E7AEAA937DD7413D6CC473FFAD10B2FBC5055
9D94396290E0755CAE63F78088802EC032A3AC502A90B28EBA5345AA22C0A246
2792912CDCAC71A2C6A1DC763B3148389BA2FD2B0390046A54F283EA4D4DEF99
A6A4A9ADD498EBA598A24CD90DEBE287830E3A889031B244B829DE3D7BC00352
C2755C1595A43AF006A81F5D8F4AA02FEE5ECAA937BCE10D3FFAD18F68FB9029
572DD3CF3DF7DC2F7DE94B928FAC35862425520EDF854D41E7954B0A934D08D5
BEFBEE3B951FD4D00A35C8D0C053C1037EE73BDF0901845FF1DC905CF881ED0D
6816D03CA47E22E3B4C2986E4F1E970B822971C6C009BF72B520214BCA897A39
F73D11D7BC8B827B949262C572F3FCC4E83316C4CF151E7799BF24C4256D89A1
C0E8AD5FBFDE14E69BCB78B5F0185084BF77A1885779002CCA620306FA703BBC
2FD70ACC9D97BCE4253FF9C94F4479B6FFFEFB6342F5D80B732A26B7E43CA719
0083691FFEF0872FBBEC323181D33612C290DC8A6ED36FCA0BE6DD618731F6A5
C4B6E07259D18399A92F5D530E3ACEFCDCE73E878547E5E4024139BF4C4C0C94
2499F9F582BB55C0A68842D35BC5F4110FA122345D50FC091855A6544C6EC8E2
07D56A9BF9AC785E0EE1C64D31E0F7DF7F3F6513A13704CE305A8B6F5D70C105
18585AFA69D11587E330672F864138C75C61EB67830C0AD81BCA826579998F8D
9AE6854699ADC6B149CB91C40BF39E80F0E07A18DB2C5E6AFCE57EB39BF60F6F
AC58D9F3E034B7472BEBDBBB562E5FB17EE3833BBD7A6C43AF71C5787513EC34
9D678CAE988C5A958E4D9386CDC654DCDD3C3BBD39EA41088DAD5CD2D9321556
AB53DDCEF8DE7B3FBCF1298C10BEDEA836DA512F4E625B8AC360553447AC4F0B
FEB0C30E5BBB76ED1D77DCC1C006C699D6BC58A2B8C717A270FFC70A78A46ADD
03982F70BD23CF06963BB9C5301BF86992C2468102AEE42067BC38DCBAF13CA4
1F65967323C9727601BF94DB1376897663BBF262E345816F15706AD69B604B39
9BC8D2AA5789FB73B5C050C07D93D246146645080C82A464DF33EA43518CB966
F72D82F049D74F47C58D60D17DA2CBC1021E8862964E640561838430C10454CC
F8228B7D2187D95ED76D1C2ED978E38D379E7CF2C9AC79912FA73C822B96710E
6BF3702FE6AA5D59A796B5DCB0DA207847FC896941AA247DEB939FFC24EE0E49
E5B630A7AC1E50C0D2772EDD340644CFA636B50A4AED812151C29F5B8F563885
2DF1D87C18A2C10931196400E16351A8654EC35D33BF0791DBA90A6387AB0BFA
84EF5E7CF1C5D0C7AA9C917E9246A4E0606F19F2F63154422028969197574FEF
21B68CBB7CEA539FFAD0873E441F91DA9D75D3F4EE714DA6D6E82B93E44524E0
7C5459854233317493E52CE1947481D3CF98912ECD8D3BE5CA3212696C8A3A63
7EC2F2797A60748B5DE9403DE4E5A57B2E1E987E9232B56EBFCC01E5EA820BA4
33CCEFB3D438A1DA66B452310BC24AB8ED8FF039134E780C9C49CC3335AB990F
6A10C0CF0D9771E7A85087E69AC9A3C158399FCA8F238F3CF2DFFFFDDF65F2D3
54C498B0AB12DFE5BDEF7DEFB5D75E4B5A3BB78321C32138E79C73CE59B76E1D
45004B6C19CEE199ACD2A1F7EF153D07B92DD9B9723105ACE15D4C01CBD7E7B2
C1AC41206AB179F3ABB0F0F399679EF995AF7C05EBF691471E7113E1037BCD38
AD1404AC13CDAF0B79A3C226F08446214B3CD5E0395FF196E1C9B35AD6BA9F70
DD868C379C85ABC3B2ED2C84D18EA34EDC8F4D62F557295C129B20CD4A7EE855
4A3D13F5BB3DE8C36153DAD784E5A1D1C97EA79A7AAF7AF14BFEEBBE7B7FB4FD
D115471DB1A19FBDEFBDEF1D4ABD3561E313EF7CEFAAC6E8E4F44465A861BDBB
5AA5ED250FEFDA8E490DEAC18EB67D841163562D5BB161FBD6D95CF0CD74BAF9
C8FAB1972569B2500133A848E18B6543BE490D9AB2366ECFA83F50F5CE4DF462
0AB8D248A07A7305DC35D6F7ED5A63C54CE5A494B62361E055331F0642296F20
B1D467083A8D7232693BA19E5D1B6139A0024E727016DCD2BEF592CD13267CDC
C451D54FBBA9AD64AA5523086B686E470FC162836CC4DBD132C69BF23521B244
9D464A70DAA3949672BF5CAA0A42284C61DA7239C9BE712349E2A620F489C69C
361D6F2AD42A21C70C232909C273DC7206968972A750F0726BB0E50F45345E96
A04E6A0AD576CB2495C34A62197AE7B83223ED784138C4CC7051F8D0A07795AE
998FA1210A957E173691BEC2B651DCB96E4BC4C5E4AA5F34266794D75516744A
2994709DEBAEBB6E8EA8C82DD9E423928C1B27B13C911F12014F8B8CF15B6297
385578670C0425354FE086C1C42BF2003D247AA9CF7CE633975E7A29AE8651C3
603102CCAFBBFC883C28B8718BE38E3BEE7BDFFB1ED9AF48E74D0DCA137847FE
AF9E019A784EADAB1EF03AB4FED8D702A6007B20FED99FFDD90F7FF8432942BE
322E0571095F50B02CDD5DA02D49520C2C7EE61432E5AC642AE526AD048A0C97
4885CA98B40CB4EBD96596AB44E9998115F07B5DDE818391DB81A40B15D54517
5D74FEF9E71F75D4513FFDE94F09296201922051344845B5EA3928E5C4690BBD
5B101647E6861B6E38F5D45331D41FFFF8C7B3A2693CE387C476322BC1B24292
358A049BF81197565AE62D65040799A07D09203AF12E044CE5611A7686A0DD0D
E61A31D270667E48591B9827D0A1374EDC68E104C9DB56636058155FF8C217F4
788AD064F39B9FEB04AE70C23ABCBC75928CE685BA9C07096ABABDAE0A674D5E
D53AEC85436930961339E1667D3864B684D55829522E0D2599D78B42DBA630EC
FA592BED5994AFADD20956F8F5346A0D0D2F0B0FDCBBB7AC393135FD8E37BFB5
373E16F4BAE1CED96B3FF1996784CD65E546278AA7FB9D6DE5DE869D9B597233
D2AC9AC09F9C6A1FB0DFDE531B7734C74737EFD819956DA7FADE1CC9836D61B0
DB1034631B845BE238FEF8E37FF6B39F616661CC9D7DF6D91450DC2674FDFF68
2EE8451470332CD3728AD2AC6B12D617E199663DFBA05601E79072C85DC8D3B2
1F34BC9421684B079DCF7C982BE05A0EAA8A129BDC8507DC839ACCAC27BDAD31
F29BD694375CED4E77876B436D934001D783B01DF74D91A1B0ED633D0F2F8B99
C1AB41B2BBFE09A50DEDF5534E3905CB89A47232015D949F5754B2900C00BFE2
6A34675D9D214A3ED5E2BFE52D6FF9C637BE31961FAC1021B78CA40AD515B7F9
77BFFBDD57BFFAD55481A247E54663D89C094D3DA1E4F6EF02364E3344B7E7A6
80202E2898A58302E570E36B3BB8A5190BE524DF5106343FC41D49732487F00F
046149A01D78E081E443656C1C238379F9E0073FA839F5C416E6CA4DAFE01BC2
55B0C46FBDF556B1000A2DACA6CAD049279F7CF265975DE6E5F8520C81741EFE
0459A916431A17360B528B1B2FA7DBC6271CC1356BD650FE0ACEAAD6878415D0
A9370EE85CF25DD2CAC5F7E2672878410324E04C4166493702BE29839C4A828A
8C50868FAA0CBD0220268253FE7AD24927DD73CF3DEC5BE9A290F0BF5832D4FA
0ACF79C82187C02652F0802FC5A64F24B79223C82CF86221B58148861B8E5EEC
FCD46982CB720276E962CB11F77DB5463923F2B6B5A6D5FC64000B660AD8B072
C00C180A24823725428DC0783C098BAF38D792056A858B1BB12D9AA261ECC74C
D49ECBD4FAAC673DEBFEFBEFC71D2186C8D392E66CCC9C505A662EF0CD14114E
651CDCA113AA5C594651D6F150D2911A91E68230011C28190AB432F152443070
04B49C1E33250000FFFF49444154DAE9B22B076C9C3603FCBA38E0340B41D1C4
549DD460447EEC631F8381FBFEF7BF1F5B061787796A1552D40F536B71C33983
02867530EC05F08097D8825B68B9D4A2788D97F9B61F00666EBC51AFB4E366EC
95BD60D68B7726D86C26A8967B9D78E5410794960C8D8E2EE94ECFBEE1A49347
D6ECED8F0FC577FEFCAA2F7CE1992B56B71EDFB02CA86D696F8B4D7DB381E8AA
6DEBB52B015CDB14BEA017A5FB2C5D7EFADBDF79CD2D37FFEAF147312E575C75
D53BCE3A0B8F1696C25E04DF370B833910969D08FF77705C53D4651065A24626
26F780B160E8C4780515D4FF13053C1CFA24E3C2DCE43A38637D51370853C8C9
3C535ECE915665CF9482DCABC93DE03C046D6B7A831C7EB7246F76843D01ADDC
33F63ABD3C1AB1A154DB60BAED7218B7E2D0047D2F5F90794913DE42BC4EF48B
58BD297384F61CFEC77222C59297E301951D57C28EEF485F8539573ABEF44189
D1651F58626518FAE6D544F347EBD638F4D4CCBC908B06FB114FC55A26CD0B59
51B9E352A7530E4D464A03E25E2969F14830D01F7EF8E19FFFFCE70C16AAA0C0
5DF3A62870A2A0A6E5CDBE9C3C93BE389F5C70A5852168AF207634791886AA9D
DF5206C72B58BD041ADFEDFA51B9171E0C328D980C4158184124AFF39CBF2E06
1057B27B0555103E674ED72BC802B1C3C95391166D2E685F0CB4F4614F1B3E25
170D3D5A85824D1E5B27A318AD0FFA287838184D309D303172D849C6A656913C
DF2D59E1D0F37F4AEDD7BFFEF5F7E787DBE85194E2528D0C1733939DE51DE868
8251490882ABA9C522A69BC5F33D87619C0A98ADB264AFF1C52994DFF8C63792
A899582A3E3F6C145C9F6B8EF59A1CE7AF7EF5AB50B7B461398C5C1903654503
F2656124633105ACC524820E0974EE4F3C36F72D7E769B154A25BB6FCD50D840
B3C53D80B0B4CDDC4D252B878DD2FC9C7F8E519677BDEB5D37DD74D3D34F3FCD
D7A1B986CF3186EA6FC8C247BE1A560E6C38AC043CB6885479C25BDFFAD6EF7C
E73B2ECC9EF1A2ACA0A85CC810641CAA58E6AD99A0558E362BCAE2895655E113
27DA763EC833DF146AA4C422FACCAD4CA0712D20370359A6E8D6620A78170D50
F9E282752868C4454E53585D6B58C76F6B051B753F864E487A7074733AA96666
FBC91FB26CA5256FE976AC8CCC1B0EF4621BF61D2A9925516985A9364A955993
6C4D3BED8AE737AAF5430EEAB53BC3C3A3AF7DD39B0E7AE6A1D634E94495D4BB
E46FFE127B2948D21A26346799D8550B37C77118993276C7E8F08E9D1363F5DA
92526D6A6AD701432B7F32B3656C6464DBCC7427CDEAA3C3DB27A7ABF56AABDD
B59AAC94331FC1E381122C52182EB797D219B4CCD43B9C27780559ECFF13053C
1A16336EAC4D6013B7B907DCF3CB58C19E6D8C64115861DEF8A80A6FBE1F5BE2
E80565482B53DB2E091785FBDB4D93B68D66DB50F6637EB9B37CF8B16D3B7C4B
03E2E18A8DE1E1DED4A4576C4CB279D3E763E332C542A41D6946730B280A22E7
84F1007518739356A24262F30353E09BDCD4860B16C14DF13CF4742DAD69DE9E
E8CC33CFBCEEBAEB5CC413CE67E1B2BB955C44924B9C121444B3B49CF424A470
F70AFE76D6DA51814929D232807066BCD6F574D9166900C6ACA09D30A4429991
3293AB883B14B6EC873EF421953619C764DFAD5CE57852F7ABE1BA294818791A
25AA6DE90B4DC9DEA59450CCEC72F4B975D5884A66B8BAB311A0A422574E30C1
506219253D05EB85701A24E9CD37DF8C919233AA8A589C40D380BE821B2DC139
279C70C26DB7DDA6BA235A346AFEAAD26C1705C3808C97171DD16F5088584006
419D4D91C33385A1EDEE5E57CFFDDEDC2AD330342DC58FC8A24F051BD2F9348D
031A8B33C4F809069345D534EB5C97D48DB4B86F649CFA6CDA19AA5257C09C7B
292DDAB709AF4F53E3C20B2F84F3A4D27BA96798239835820C05BE53CD3B23D5
4A88CA4B13189EFEA5D0AAC629BFA38DAF22770E1157946CF001A4185BAAD19D
BDFCF2CBB149D282F69DCA92EB8AAFC91A33AE5B6D7B45E015DA151DA92C4B53
70FB510629DF0FFF12A3449B4CC5E2C6019D71E8B88C35477C9273CE39E78B5F
FCA20BDAA226E612E5173920BC8EFACCF08DF0DD8F7EF4A30CFC2C2A08FC1103
3D1078691279706D3BADD1A54B5FF5AA57DD72CBDF7B9D2848CDD048B35B09A6
27A796FB8D52B737E265DC26955AF5E99D3BEA8DDA54A7B374E5B2BD7625DBBA
936163386E541BAB56F84B8692921FD6AB67FCF5A9CD6563A5A17AB95EEB765A
B5C874B6EDB8F8639FDCBCE18186F19B893FE4DBD0DAAEAC93942B51C99FAD1B
F8D9E589D6F2B41C623D9A282CD55B516F6BA5F694D7D91A261004D5D9141659
1FFEF750B33F33030F384EE246BDD16AB7021F3A3D814A6632D8382C2E5C2A9A
41B5CEA599F247695F3B6EF592E926E3A65E49BA637012AA95D16E7BCCA4B339
45561E5E8625E17B9967916626DD8CC5607FCDBC34C32A6984D5B26F9DE5ADFD
56099B2CF33B2699F1B29E673B46944DD84863088211BF540FCA90AA3BD3DECE
2C6DFB665375E9AAB56B7EF3D8C33B3B33999F9B0EFD68B8DE986EB7B8FE2FBA
E8A24F7FFAD34C37F01DFFE44FFEE4D7BFFEB5719AE210C1A0B0161358D4408A
23BA0CAC41DE941E034591C8DDA19A72D1A072F5724132623A7098829A70FDFA
F55E4EF3C07815775F56B4A839E8A083603031EEC534A5A490E7948D0927E136
02A78A51677BBE94D88855ED23BE393FA79B2617A16423970A237974BAA8E679
47D28AE1AFEBD6AD3BEFBCF37065764A96EFE1157C20F44FDC40A06C71815D24
84A9B9B3A28F8BBCF3B980BC9F3765640D833C12697B1550C2D8913F416D47FB
48E01D6F3EAD2E87580171160EE18509E962631F1A6EA27190F79C152DA2A499
BC9CA58FB13515CF70158AFD8073C993697FC975F0E7378B76E93BA808A50E19
7E217683E865797B030A780FE84A2E0ECF21A310C9B3AA59F48371600E72BF8C
83DDE7F3F38D04AC186871A8D5E03608D29A6605BDC9FDB3CCE9CB6B0AAE5001
C5A9B798B627DB83AB7DD5CC80B0463E0C11832C93374EE9339F875FE7E6773B
842F54C0EE5BF00426ECBDF945D50B23C35C78036007D70E50B6821609DF112F
826D76C10517609B116AEEDA31A4E724325FA0011D021F78454139C18D5EC120
6D0AD814432C1CF6673FFBD910977C4168D00F7CE003DCDEAC9AC016A3A3B0DF
7EFB6DD8B00146F7473EF211B6C4E083D189E710C1CF8021CBD759CCC31B0AEC
5B9F72CA89D7FEDDCD70CEEBCDE11DBBA61BF5CA743F855F365CADCE7467B3C0
D4ABE5A0D55F5B5FD26E4F2CA93620838E7DE94BBF7CDD357BAD5EFDD0A64DF5
929F44E9F225CBF63FF4E0A95E7764C5F2E1A56327BDF92DB65B4E6E6A4F4CEC
9C9C98D86B6CFC952F79D9885FCED23E4CC567EEBBFF3ECB576D7E6AE3D35B37
25A1DFF6E02C42AA648DCC42AEF60D862C58A95AE907A693F47ED3E96C0EFA53
150B65F2DA16481C566BA5F125ADAD36B619C551B562C943A88C3DE3599A4667
8A5D1D600AF602357AC91667465B5401FB968EA469194A7A75635695822551B2
DC829C7DDBCCD786844DAD5CF20DACA2A417C59DC006C76D135FEBE37A8D5215
8F9546F12E2F2E659E6FC1D2D9B49776F3BCBBE51DAB954DA7DFF07C081A2860
5816D379F3A807D35AB5D9786A725B58AD5A1879AFB7F7AABD366F7A5A4F4FDD
63E6771CA128E68EC6F238FFFCF32FBBEC328A0BAE7C394B2E7C417931ACF6B7
BDED6D575F7DB52B52D89490F281314886705EFEF2977FE73BDF91333720C4D2
82A78846A492C16A3F8C2B7CFEF39F3FFBECB3B5D35D53C0F57C5CC145492238
91C9C36378B6A38F3EFAAEBBEEA2C1A1FD481AC4934E3AE9AAABAE52F85DB297
0296928D36017EFDABBFFAAB1FFEF0870C2CE18B5FFBDAD7E8FEE1C50952738B
A4597A20ADE4FA87A670AE38417C6CF9DC8CB1AB2313937D2CEC9EC38330B127
5FD614548B1838558C317C91161DDD292F6478D28487ED830913D85ADEEAC242
66AFE0BF16E605621D0FE0664375E86D695589374328658510B9E5E8E50CF894
9A78D1CAF84E9B49AE92012893CE59A880170BEDAAC077006B37C0AAEAFED5AD
76DF6DAD8B0BB5A06F2D15C5B83D9D21668E65D3B9FD8CF522F8CA21871CF282
17BCE01FFFF11FD98D84498E57BCE215DFFFFEF7E9F311FE80E9C00FE42B16AE
CD1504B4AF39EC9C112C7AFCE0E2B4A5D1B16DF0C05A826AC49B16AD99F0F361
871DF6E0830FCA1A53E595ABD83432AE0BAE2BB06AD01D3A77C9A9BAD1144965
B76B905F7468611114C398025C28CFEA92C1BAA689FA1B2A96252005EFC87BB1
60977E865848192B92FAC7E74CF2A9B50BAF00A180B9D6DB893766B7EB7008D6
55D5F878E47275DB44BB52AF8E2F5D7EDA69A77DF6F22F47AD4E3D0CE0B2D586
2AD1CC74D88E70F278A531D36B0D85D6F278F489F59D2C1A5FBAEC557F7D3C36
F3E34FAC6F8E8E4CB7DAEB2EB92484EB56AE4C4F4C6E4C67864AD5E1B0548EB2
E38E3966AFA52B2C342489FDC4EBDB0E7DD524B3C4578D211B812C85FE703F5D
D518AAF5D265E58667FF963ED6DB39E4D71ECAE25DE574B262739E412BA9A441
75C9707DE9F8CE0D4FD920581297C2D25C89489CE71776B783B8C2B5328588DC
43779AC58EB21F64A957A9D73ABDAE67FA2BABE1D27EBC2AF4463B50C08925DC
28994ADEF4B70705DC8F1B7E4918B1921F94C3BCE6308966021F0AD88302CED2
699BE8B55C1CE53C460D1B65F550A31284DB26A776E5517AD81A4F551AD3BD56
0962B66B1DD0B1F1F1891D3B6D9BE15C9AABD997585CE8A87DF0831FD4521763
397430CC3BB9A42C6894C2A3A814A6471DECF1D8F086CF38E30C587EBCA05B16
9F158CE86ED9AABBCBB4B994AE36852746975D8067BC05692C653D9B229E2159
ED56A928BACEFC0E778AC0B60C474BCDFB0517E1273EF1896BAEB9863020E328
2059D8743C5C54260F89352538989F5660D98DAF780B4A4E5C5DE3E744754F3C
F10473DB746E53877CC98E00D535F34374E7D5CD983E22113A22A16484E199CF
7CE6A38F3EFAE4934FB254063307531D8FFEAC673DEB37BFF98D7C11958DF357
86A3C54DC10455963352A58B30FFE90D159477893DE9F27270B3A2D6CA55FC2E
F856A3AF6C191B4A8B6F52DA8E4A85A6D36E01A566F11074B0A0BDB1BFBB2691
2E182F289AFCB8D3C313B8E81984E4B3B15321A71C3F1F7EF8E11870069A0850
E233D096A28F45AA64F7EEEC709215F5F8F8E439CF790EAE63F2403733496EE7
25EA7286773EF399CF5C78E1856E9A96A69C761D232D780061F78D533946C63B
2A1B4E0D03067897238E38E2BFFEEBBFBCA2168BA878CDB5A049DEFC6AE3CC69
FE6A8A5A3D19491A67A53C5C2E0E751B84D6C1D35235D224D70FC60C22A21903
B8F4D24BDFF39EF71015CF54BA7160EA9C5355A9E28D44C3425B5666BBAC58AE
643AC48C85609AC86CC085ADA27CD2EFB98D45171E8DD1A52D0C48E685CDA1B8
D5827596B466EBC3CDDED4CE91E1C6C4748B12AE94FF1BAB940FDC6BFF5D98C2
A99D25CFB6D76B47BDBE495E70E491D5D5ABB3C03FE09907BFF6F5AFF332BF64
FCD6D474D97259F64BFD24DE397DF209AFC37B97FDEAB6B40BE3BE545A32D19A
6965DDD1A5A33166B9D7AD2766DFE52B9BB3EDD9D9E923563F63CDD2D53FFBF5
DD95A019974BBB3AB34F87D94C90CE947D4B171565D0DFA57AB5343434916FCC
344B037F4EE273F659536B7687375477323798F1C746A1599BEFD7EA51844BA5
C39E59159935BEB7343573482BCFF644826913DB92656FA408AD99BC727A2EEB
9165D3BEC915B0D735E94C0E99C697E0DF0F5947DA8C06B6D3D1449CC04BC0F4
6FEFB4EE8AD3E6D0D06CB713964B679FF5BE2F5E72C948737876663A712412A5
8408110F38E0000861628C199AC66AC42E20C52CD6B34B03679C4020838E5CAB
A49FC35FE95F41EB10644E1B94F7A2DD698A166ABB1565DCC8F8E1A31FFDE867
3FFB59AA1C468FD8D35A9C33704FCF3AEB2C6F3E3B9EFC48E3B8924A3FF37345
E9589701DD46674F8CB66487C68BE3E7356BD6B03998D416F3D670F088F55147
07DD5DBF326A257D01C7E081071E50F657B1683D73EAB0E5D00BE2457097238F
3CF217BFF8059B39E2578A68B9D4F65B9229342E0406D3A310C1C4ECA3FA5DA8
8C6CC0B2600B3C193E1C3837F0C85FE3BCDD3D868F7908B245520DCB21966C95
C9EF3B9DF598F9E3F55D9214BA4AA29870F7AAC0AB6420C2D79FFDEC67DF73CF
3D5C5BBC329BB9AA19B559600798C57D5FFD95121617BFF7DE7BA14109255828
08F452EE5276A36AB8CE71C71DF7AFFFFAAF4AC6C8BAA42993E67498307D38F8
6490A17DF7BEF7BD0F9AF2A28B2E82B264D488998F2CAF86D2A257BB621EC28E
B24B09D62811001C340DAFE73067C10CBFF8E28B49A282A7921A965254639F6B
AFBDF684134ED07A9009A51A448C150C76D503703A70654608140A96E1CC48E3
6E5B4DB8C6A9C4B7162D76D46F7FFB5B38A3F819DAF7939FFC2446098B1077C1
ED581B462352D99001639FBA5031186667282C9483570ED8E4AEF9A9A79EFA2F
FFF22F580C6EC5217164A4E07031686CAEAC1E0F38071FB2D8115F87E2C760EE
D9B70B8796C6BD08E36B42DFC4BDA13A545C6F9F95E33B376DDED5B5FC882BF7
5AB9F9E96DF552254DA23BEEB8AD3335F5B39FFE14CF0CFFC9922E753BA7BCED
2DE54A65D58A7D5FF7A6139FD8B4D1947350613F5A3E3AD69E9E197F62F3D9EF
3ABD998526EAAFFBE2174E39EB9D1361B2ADDF9F866AAA943B51B739D2E84EB6
1A9647DAD4F37ADFBA298F551BC395E6F6A95DB1F177994E62820963CB6A7BA5
2009A05CBD34B230ECCCF33B163E6CB5EF5C8433D7BBBE6715B0BB4D8C53CACF
05BC7AF56AB6B21E209DF8030F22AE2B8D66AFDB33497F9917AC865833D561B8
F5C6AB7AF06B6D2B88D406AB03AF542EC711BC61BB20F3A512DBE223BBFC2692
8CA068C85AC8C128EFC7804F56D41BB3B087AC320E3A266D05A51D491F3BF061
DB6CD8B7549741609BD7BEEF7DF09EEB956AAB37B7A45D7BCB0D173355246A2A
D10161796739A99C9A40F3BBF464082754A2877126CFA1B2E1E87129CA3F1603
8FD95D04829E22FE3FF6D863EFBCF34E6C2216B3A83A888F872B0B244475E386
FD3CA750DEBD3EC1ADFAF58A2BAE38F7DC73E963A828596014A27F18AF65BE4C
92C16D1A4B418787219122C50B5F19C28D042618BD17BDE845FFF11FFFC1F8A8
3A7C88CDC9CC57C0F2374C0EA53EF4D04319D563B08AA834DB082B9F0E1B8266
A653F688AC39E5AE29020409612C5B7E0046197A54A816E95A42B1DC368A02AA
707C5FFFFAD7DF77DF7D8F3FFEB80823CDEE1A1A2FD4766E89B05BA16B1CEFC7
755F8CE3C108534EBD023F1E8298029DA8519ECF05CD915114D77583F6A08331
6134C1C483EFB613705F4A0960CD9F789ED382F0E54FFFF44F7FFEF39F33652E
9C144D162C3B1613335049B648DA988476E3A66C184C88E3C0C0E20AEC43650A
34A99B65C4158E39E618D86E5E5E20689CB40D631E04EB92738795CAE251C9F2
F256D70223F89E95703879B11C30339A6ED257600DA1133511822EBB31F68150
BF3B65BA2915BCC295A6689CCC9FF93A7249DD5018179E2A85B2A21B28AB38F4
D8DA4DAE05493F00B3E31515775AAE03B038ED02BC3BA973F4F062EE14D1DB1E
BAAFE0C9FCD084A572A793479B8A22995658CB4B5C42DB372FACDE71EBFFDFA8
97B6ECD8F2D31FDB8C1A5C8F6AA9DC8BA3D1254BE0048F8D8FBFE5D527FDFAC1
FBC7572D0B1A556B4EB43A63F5C68E4D5B6E38F9CC1DDB36974DB67264F9E353
4FB58C3F5B32DBA376A75A4FC26CC76C67E9D26634333B1656CAADA86EBC4A60
86ABCD99D654C9044B869675B374364DB6B7A77A39F756EC0571E06365F793B4
973714EADB66BF59B954F4CC29DAE266F3E1575951444EC9082571F0C107DF76
DB6D72711603A92D7640C7065ED8A88FB4DA5D2F4A5604C1B25E7F7550ADC7B3
0D5BDDEBD9B05816A5964CBBE497C238EA79F90358811B5B23D1B79D7D4B33FD
C8E6B38DDF8396C562B66548A69AB33B87C60619B2209C8CE32D69D43141756C
ECEEC91DFBEFBF3F341C0B79776CB314699552D9B69C726A404CC1C643D35999
41B7CE8DC85B2D3F57FC9ADCFC656C8F5A8A6AF5EAABAF3EE38C330844C0F9A4
761880220ED08A79BBABA3350E7695158614AA8AE4713AB0E370534EA25B37E1
CA55D7FDD5AD599243579B8E32C1CF18136E22C6ED082BA6F96E0AEA6286A615
4533F3F9F38D83CAC69890FA8A8F44F1E5A2C15D8FCE15E93A81A182B4E851CB
365692B74227CC2580556825AE10E5D82835DCDA32DE4FDD09F9AB6E234837A3
D97E413DAACB0EA087B820A45DDC4E82034A4E6CCF6E4859316759C1C4F4BADA
77406572943D870289F371E28927C2617DF8E1875501B267F3790F2868A83DFC
F08A57BC026620E692BD87DDD0E8C0C27567D12B0E3A4F52875C2E12FA0C92D0
25A515A99A22326B2A81610A738CA97153E0935DC14D73815E350B8AF0839A7D
727EA19E896C54EB27E87B7CEB2D6F79CB2DB7DCC2EEC55CDF38191FDE70C30D
A4AE8539824B91138E4FE572F6660E2326DF8B39023D9EA4AD717C9D0134BB2A
4F04571E0099E3E24AB8D2E655D288AB85D57B447E52D37324DD408B961C318D
0B17B3427C9A6E3D06BD5B970CCE4D4CC8B7A8E5870C3853A0EA5C9235052154
4FB2DB7558832AAD076F3AEDF42F5FFD775611D891B1B77BFE6BCEAE2F1F838E
ECEFDCD69C9DBAF0BDA775DA9B2FBBEA92D66C7CF8A1870D372DC39D6D04D9ED
ACDC7BAFD3CF78EFD6C7378E2E1BEFC6516B66CA747B2B1B4377DE7ADB37AFFC
CA415D4B6359F1FCD964AA6C2A7EBD36157777F6274B43A313AD99B8E42781B7
B5DD5F3954DE39D31F0BCDFE2B563EFCF496D5E5EACA657B6DC1508F8DFDD92B
5FF1B7FF707D27B5AC8B496A3A5ED6F2AD6B9E25791F032F8339502957D82C64
B6355B0AE7B2AD7C77379D497307A3814DF79BDFFC0653C934A11B06FB030F5B
98959A46B5D9EAC0C4CF6A81D748A271E3EF6BD2BA67867D7FD80B4A9997E475
C05807B6419252AA091C78AB806137E0C772EA05C6B37CD1C6D62C95A0BC8D3F
95DA97EAF4BBADDC3386BD3CBADF9AE71D7DCCB537DF9CC6C9A9A79EFA777FFF
77764914095D37512A18018524D6060B55541592163DEBCC7CBD4BC011F374EC
FECB9F557DC46B3EE739CF79E08107C4EA2A24260D7AF1342C3A7445DD30AC5B
3C3C43719882BFFEEBBFBEF5D65BF157180DF890A5C3AA53606AC98586B9A141
2960D59EB9A51F544F448AF9059D0E4B699821F6169013F80E452BBB072968AC
56EE2CCAE72D5C9E225E6D803C640084C5B4B49C58B54EA098520A5531B0DF65
225537CDF495CCA52CAF35E2ABD2361760DD14149A6EEB9501722553006D0423
A246D1FE518568BA3BE674CF299A768B820451163B1D950A6B52D5B180633160
05DBEAABFC0A5873AA898608C6DAD2331083866B72AD7B7F701912339AF83A89
304DD18262A167C643E81EA5E899A1615A14AA024A0B234FC5868D849FA55AB8
C724DC4F3BEDB46BAFBD160372C20927E0877DF6D907273372CB95CD0972A1D1
328F32A72C9846093D2D6E3C7E912E3235965A20509399A240994FAEE68F2EF1
A7D415CD43F9880C6368FBA9AD85BA5D51AC70668951E7BDC8D1EA7674C07051
D608EBAF6590E424F59C6BBE206F6472AA4BE3B8CB8A49B0558BD22EA6B05DB8
ECB951C5C8B35001BBDA97E6302B83B5CBF0031E1EEAF6FDEF7FFFA5975E8A27
64B85E30104A90A38E3A0A361C6501E7DA6DA4B898878721CB2A43266BBCF4B4
B37AA5D15DED280BECA6DB198D6E9DD81ED6B3D5E578DDDB4FDAC79FFAF0B9A7
B6BA3B82D2F27AB5363B353D940FE08B8F3E7AA6DD8227F7C6379F627B2378A6
3B3DBDDFE8F8CB8E78FE75975C7EF9A72FF6A3F6259FFEEC673E7E61889559A9
F693DEC6D6E69543ABBA516B7B77BA3632BA616AB236D63CE12DA7DCF09D6F3F
B56572B967F6C2CB6EDFD58AE2E5C34B9F9EDE71D811CFFDEF7B7F1D552D5438
89B3A9246AB3671041EB99A5A284AEA297C37892C5F1B5663DA7258E4247DCF2
5021BFFCE52F4D9EACA1F2580CA4B60705ECA7A65969CE76FBA997D9946FBF3F
149883631B481F3566ACE4374B76D25BBD7E0BC662E04739041A16810FB7384B
AD071C84E53C071CA450D250B4311CFA20F32AC67F1A0ADB33138C7E2D19F9ED
C414647F73F978679B057658A0561E7B9B9A9DC10FBD7ECF337388D7A0E874CE
1826ED54426A58AE433007D7869C36C83A9764C33804B7260F8341E57FFDEB5F
A78427EE8F85B6595E49EC366395D3E28A41572A4AF2F35BC403D17727F73095
F78D37DEF8F6B7BF9D713BCF294EA16A5092557AC138614271625077E2CA975F
7EF939E79C43AE40B735855A7C9ADCC9663C898BC12D1571418E7C6CB12CB3F8
9314C26BD6AC218792EBF2EDB60CC90D650972A4E8054127ECF9C6F1B742E779
CF7BDE7FFFF77F730818D9C3BD311F90057C20FCE9F8E38FBFEDB6DB2C955D91
96A7C414FA948FA5D6541C1186EC64F80B17CA4FD8DF83EA99C13465FB5D8345
ED8076BB61188A61829D8C65A60866EE7E8315197817782512A2812CA95C64CA
4DDF690CC743700F992CA6B0D1C8A0C650FC1EFA92327EAEBAAF030E38004A85
CC187EC13FCE65477D494B901901F1B8F234AA4995EBB9A5505CEB8A87BBB5F0
D2400B434C94EFBCA9CA5561586CD9B2E5F4D34FC7BEC575F0B28CAC4ACDB830
349CCF8EF45845388116890EA667B01BAFBEFA6AA603F4392E8239623DBAD0FF
842D7CE31BDF78EF7BDF4B19A4C6852CB976B1D69C2C02CB859624AD18D16778
18F181B01B20B10EB8C241071D04139E806A15101367CE95A3D9E41069F607A0
EF66F16C45E6709B1B07DDADBC328D54760BC68672ED0937036A6C454F29EAB4
861A9599560FBF0D2D5BBD6BCB0ED35C7BF41BDE08A5FBD8D35B1A23CB3B89D7
E9277E589AACAEACA5B3A5D9A7C6D3ED23BDED3B1EFDF5E4C62796346BBB7AFE
81071E9864798D409E1AB45AADDFFBDEB55FB9AF1585CD252B3BBBDEFA9263A6
66834953AE8FA6A3FDD1D9F6D3CF5F5A31D3C147CEB9E20B5FF8F892A18EDFA9
4E443BBD5ABAB3932E1F5DBD35DB545A75389CFB1595FEB6E97447BFB3EFF8B2
4D3BB70F8D8E6E9D9C4C030F62A9451BDDB34E709CA509659A370777567519B1
429C417C02E9C492480E3B56176BD3253DDC7E507F940256F13A5D8EDF25E066
760DA7DE8199B736811AB6ECCE98B9B864269210C60EC47C2D2C599EAFB86F9B
38FAA69A9AA120AC87E534CEBA498C933B26EB98B86D82AE97CD04FE54904DC3
E94FB218836E730273ED63DDC02F6C688C9E949312856E71ADA41039C0294C4E
3AE9A4EBAFBF9E182BB6ACA763C05F19975295C140B9A652B002A30C2CBCDD8E
1BEF4EEC154E932BE982A295E452CE9E1397169D91160A798579DDD0311F8FE6
2C8D604A03375A207756941DD4B5CA5569CFBA1689B86F598FCAE1554855EA5C
BE3BAE8F17578F3B7715995C79B31F8626D40DC7CEF996B8DF473EF29175EBD6
E14157AC58016D9F1574D2A2A5C6A81D7CF0C10F3FFC70563443660A41A284FE
10453055A9182B55E321D5A5D211333FCF472DEB862044696D16F738A1097EF4
A31F5176D3D0236469E07CFDEAA2AB0E3DF4D0871E7A489D18984AC9E6379697
432C1E416522599AEC86075DD605167731C8B3877208E54A19873CEFBCF3E00C
9982E1C82F9ADED0BE3345390D75834AB44D5157C36FD1EB15EF74565050B93B
8ACC65DCCC2AEB625081F0457E9116B1FA4A697608FE320EA78C123FF895242F
6AD5E20699DDF1E4E79805E2158D138C5DB81BB990F06C0C03E0936BAEB9E6CC
33CFA4EF8B8950198682486E3F705C4D38640578F50985110504FE7FD18B5EF4
AFFFFAAFF4DDD558DB8D121122C080D26E45D2EF95FB62DD7279F84C0130A4C4
C4C569A7BABDA8CDFCE81C4EBB64DDE73E74DE79516A96ADDE67473B4D5BF1AB
DEF1DE47828360F7B055146BC9A0512C5561BCBD3FB3FDD907EDFDEE93FFFA6F
5EFCDC030E588B77DBBA7973BD39CC6B421D58D04ACED06EF1654BC71AA5FDBF
79D547DE74C20BC221F3F066D39B364B6DAF78B3EFC8F2DEC4B6A60957D4C64C
6F7B23ED2E2FADF4A2DACA6796FEBFE7FEE9B76FB867AA7CFFFA3E448C09FA66
C2983F39F899BF7AE801AB6B6AB5995E67060FBC74C9933B262C9BB26F53BE69
66FFE7A6E39A17DB91C068AB57AF86852A6F4CD13861D7B11820F1E906FC0FCA
9038C8FC3AD3315427A61A36E3749FD4DB2F0896662648E304A3E5995E126626
B6E549F645BDFC25ACFD9006A66AFD60B86EA61F2550BAD8B17D936ECD0C2C5F
588870575BF87A66288FB22254463B8FF6345EF6DE7BEFF51CD83F253B5F567B
8D883385D920CFAFBCF24AD2D468FD981C8AF1177FF117B09BA5C9949372B9ED
4C1107CA165014FFDE7163EF73BAE0F080EFBCF34ED6CB50465149AB4B2E668A
693225CE5831B55B9C8D5B83601C6A5899C27EC110C59161809711633544E22A
523B5E9C40C88E2908C5E46871B469AFD326A3DED568107A894572E28927FEE7
7FFE27F3F13828585CD94599A6F2D4016492C7582BBE46D3D2AD4482447BDDEB
5E87BF7EEB5BDF62DA8F46A51C05E320939536A0FFAE80096F86CB2A89CB059D
383DD7248BA57818F716E6991D5D16536024B996A054C8D7734A7DF403FC098A
572E4A35215E88DBCA1CCE0A6E75EA579A05CCF02B13C997A50E1603A5BEB267
EA32690EFDC00A1C952C7B7921D0002C8845B7AC32A27272A32E14EE035C25AE
63AAE7098B83BD375846CC2828953D351C465849043730659C7C86EFF4D066AE
9A8BE4F9CF7FFE2F7EF10B5398A5C6A12BE24A50DC854D05A002319858B8C4C9
FB054B14334CB4DED8DD4802976B89A6212D71E160855C5385F1B7BFFDED37BE
F18D0A8CB34A92490DEE907DF7DD97F4AD9247DC785941E8ED0EA09B6ED7F17B
1530D7069C4E5C8DEF0E5F019EFD85175E68722B5BC5DFC2B56AF7CE13945936
B664A8D5EE6461AD1D6393D70E3EF655D5A125CDD6D32B968D675137EDB5968D
364DD4DEB165D38A654BB724CD91E17A6B6A62666647A35A9B989AE974E3952B
F77AC111876304B08466DB2D367C7D6AE3C6DB6FBFFDE24B3F5D4D9606DEA3C7
1DF7BA2438B8B6AABEE3E9FF63BCBD837863DD9865A5712FF6C787D2DE8EEE41
F57D47FC99787667AD71509A3D5DEAED28579EF558F248544F6726D64C79EBDB
19FC3F6CF0D2AE7EB47CD5B227376FF77CD3F3ACBEF2F2459D25BF1B3DAD733C
099E0A26974B6B70C71D771C77DC7126C7AC52C8C890A5A58861FCDCE73EE70A
813FF0F0F34EA06F7FFBDBBFF295AF48B8DB29DE391124D128E4E9FFE5EC4CC0
E42AABF4FFDDAADE3B7B48C22661DF6415450671DC1D1C196610044431AC9100
41F65D2024806CB26FC230880828A088A08038A3A322ABC08008486411086BC8
DAE9ADAAFE6FD52FF7E5F4ADEE16FFF5E4C9D35D5D75EF77BFE5ACEF794FA93C
453A5207AA81B71A2C97529D0BBA5EDDDBDEA835CA1AFF0FB4D61FA75C6D7000
D4956EAD374BD5529A9F5AFA6A95A5D5DAD2BC9D439611C01C8C36ABC5A689EE
A3C08C39205C4CFC75896B2D59AD51AA14E963014BB363D9DB16B9187C858ABB
940385D0CD71E38D346F0E413B6AA821E95C6881E87A57381AB59C3F0011E72A
41E4462D9023F9FAF10AD115262C1C759EB50993A30F9F74D249F3E6CD4B3906
48E25A5F24680F0BBDE3DB6E1728D39C5FD1CAD59CB3367213996FD8E594DEBD
A8065DF3939FFCE46F7FFB5B9E2E2AE0950F62B91CCD258F2F0B0D0CCCAFE428
8D892F5866C94DB80BC0E9B124ECE961AB69B5CBFFF33FFF33E52859D75093D5
487937A8D1259A949674C60B2FBC80EDA3E976DE31A297FD752EE8321BA62942
827D0E992CCFB56BB7CDE3013314DA22CEA9F7963DAD51362EEB17F9F334B6A3
8F3E5ADB25F68A77D3C6B3CF3EFBB0C30E339574CA41BCD2C7471C71C429A79C
E2980F515FBAB379B1206E4D8DD8831E8446551837A6F2D0BDF6DA6BAF3BEEB8
43979563AD53C412537EE7661810C2617F50A4A45F09FFC6AA79FDBFC30E3BDC
7FFFFDC0E323EFB12EA59FA1D4D753038C2CE5B45F6EE6E5780C27440FA80113
69C03223640D888C435580473971AB8FC1C3AC99D453D8DA356F0C2B851C89E1
BE98D3A5061AF61CF67934B09ACB33865D770BD042F9168682ABA531296C8F16
701F7A8DE9685DB6BCB74AC8366BFFFA2187B78D9DFCC49FFFB2FEB85A394B63
3ADB06562C5BBAF0CD555799581B90B2AB0EB68CEB1D90335679E16F2F4F99B6
C63B8B96748D9D3C5049E3CAF50AC0AC51883565DAD459B366690EFFE737BF1E
DBBAB0ADEDD3EF56DFBAFA9AF34A6FBFBBF6F405AFF46CF5CA823B5A07577BF7
DDE5F2DFCA6D63ABED4FB72EDD785C7A636979F5CD3B524F6FDB6A9D6BAC5D9B
347FF9A3935AA72C2FA56F1CBCC789175EB9BC56A7D2A8B49517F757F4437B77
4B6FDF601D9F5D3F330DED3B5823F25C4FA936CE1D69FE1933667CEF7BDF93E9
23D3D01695A317262481F19F988D96188FFF1FF58053A049A75FD6CAE857D692
6AD5B654D5969D9465E36AA531A9DA99CAEFB60F962AF5AE099D39CF46E38152
7B65E5D3B43402EC3DB506BEAC9C1E2BB5F5572BBDD5CA0A4071F2FDB30604A4
D267B1A30D0608401B83CAD7B80F0D5D24009B72BE2A82616C1BFE776A26E5C5
9F84C72431A472002DF2A4054F97604FF4806B4399859A5FD8FD044D89E25ADB
A5DCB94759C413870CC117426B20A60AD16FCBD588B9B371800D4120935B63E5
3357DCE8E31FFFF8AF7FFDEBC83AAC8B40BCC35D7039489923F38DE2B61026CC
800AD0277529FB60F16179B91066A38D367AF2C9275D05531008F53975C3617B
81F15AA6C4423444923396994261AABB521E61367875EEDCB973E6CC411C93E7
D3ED20F923CAC49E30C319B534265624D0878F32ECC26B8AA554183FF146FB34
69A8EFCB0FFA8C565AFBF580030EB8E9A69B7034638D5DB30035790A81779E5A
9BFEDC73CFFDEA57BF7AE9A5971E7AE8A129EFC6185BE099E6228DAC83AFBAEA
AA9933679AFE0DCDE1A2755D07BDB8F1C61BEB52D3A74FBFF3CE3B3D5A3D88B6
0269069C248C0F7D40C3A3A1AFF531711EF90DF7DD771FD11E93B967792741C7
A2F5D75AA39A8872DB3A2C368F423BB41B39A118AA5E5A5632AC1C2A5405B56A
38C7CED3F804FABEB1EFC5165B6C21694B1F4C2738B027DC9E8C872572A3F1C8
6439EAA8A3249775350083FA8C9646FEAEFB626DB6D9664F3CF1844F8BAD5452
ECA4936DF794021F99A1E9661431D503DE79F34EE3E7519A01D84C4EB94512AB
35CC4AEDFCB7456144CE571ACD66CBA56A7B4BB9AFBF2E26AAF5BCCC3716F6B5
620D8F1D3FB1F1FF04244BEDDD57A74E5DE5DDC5F2427B071B6265D1A225E3C6
8C6F2FB700BA696B80C3E79D79066D57AAE5BF4C6EF9EC5DBFFED140AD6F9DDA
D6D5B7EFEF9BD27EDE2D93178E934735AE6DB5A796A68E850B376B9BFC9B29E5
C92FDD38B77DD96B5DADABB70CF4ADBB5AC7EA4BB67AA3EFF17275ED15B517CF
BAE6BFF6DE7FDFA9D3D77CFAA557064B69F2AA937BFA7A572C5E9E5AEB65B3A5
8602AE0D5609C89202364C06218010D47E26D3C93B2608C456F332B1971068FF
1F0A98D823D7077EB864294DC0AA2D59EAAA56EA6A38B58C2FB7BD53E969CF52
67963A1A5D81DB72B6CC31593D515C656DB2D28A4AB5AF561BCC6A0F341E6D70
658EBB6145D559A2533DA8DF1086DA09D3A64D735D1C2A24E545103127CACFD8
A6905E4100C906367632923DE97DFAA6571B9DC1B0A46B81A0DE5BDD9B3F5A96
A3E4806B39E12BC06C833F62C315009B04A8C054B28EA4CF5CE8D8ACA8FCC829
4F4D3A2C6F6F272EB444841ECD4D2CA0C1816927E53112C9FF6BAEB9C66DD6BE
FFFDEFEFBEFBEE1223975D76D9D5575FFD873FFCC1690E63D0DC83C70130B628
082F5B1229A4F30AA0EE6172C0466A49CE6ABEEC0641454D3B49C332D16D9602
38DD286352A772B71F7AE8A1E38E3BEE8C33CE807684A25544248CE1F68631D9
340EED09A2223A5DF296E40DCF9F3FBF50AD344AD98F341F9DCF292CF1562B6C
0E5E38D9B159A1D606A7301B5A0CEDC3ECC215F656D43AFAAEFE645564CC4884
0D4770ECB0E347991D7BECB1575C710591347052D82591FCD96152D3B6B92964
CA1B44E295F2C8667D72F1F4B6DB6E0BDB94DCE5DFFFFEF78F3CF2882B1CF415
B4B8C1D20E231702F2592866E54D742AA372F95996B7CC8A9960FBB8AE07230D
C329F2FF071E78E02DB7DC82A74B88897DC8033AEE82F1A7B9822E4026D19147
1E49DB700C1AC362ED30792A3845B109B92EA5E9723B8742C2A694374EB15521
13818B10411976BB8EE481D572261323F84C4812F3CA5C5FE61439A08259597F
475E55B9D45E4E837D7DE3BA5A56F40C76B7A6DE81BA32686FAD239BC64E1AF3
EA5BCBCAADA5D6CEAE254B96B5754FED5BBE3495500183DAEFDD1D1DCB97F6B6
135E4BF5B3DCD3D7FFF39FDF59AFADD4665BB3D4FFABEECBCE3E60D96A8FBFB0
206DD49DB5B44EDB79BFABDAC7545F7FEBB9D6F1D5BE6CCDE5958F2C5ADAD296
551FFCEF3FBED136F5EDB65FADD9B1DE5FBFF7E5B5B2CF8C1BF3ECE281C51DFD
D35FACBE34D088B8F69652E7C4EE154B7BA4A0C68CAF933DE9694A0D19552F40
4A25CF36DC0B8E393583311D83F14AB14388EBE84F9151E77DBE704089097130
C9074BEC57EB09EA527D7095C1F6549D90B2F12DED6D83BD9DA945FFDA53ADA5
F12FD5693A2AFDF5D0724902B8B7529588ACA4AC37D5FDFEE709B9670D47B6DA
3856B55ABECE55A4E5061B6CF0FCF3CF536DAF3D86BE8934790C353E9ACD35A2
508536509A164E31B2574B7CE185174A02B8562705068814DCCDF70FC2420BC4
05B2968AE8CE42DC8E37258DA57AF4D4CF3EFBECB0E59A05F9E95E64A82404D1
D4A953B55292EAD007E9E92EB9E412CB28DF5D7B43AB89B8DB6DB7DD7EFAD39F
6A6C85E6C118D93A9E68713B0C2860B696BEAE61CB77927B696735124723E2B4
85B409A5A15037C384A0D96492DD8458B578D63159A83876FF7613699A2630D6
A871DD484EA44782C1431739E490436468E857D73BEABE525146C4452986F4E7
C9E90F38ECC2A3176DDA3873167746B43B2084824102F7D7141C31B5500B0C0F
B22EB5571C7376D7207C441ED6AD31A3898A1A4821DED8FC02E646FE18BC5B0A
2821363134179C4F08E73475981A11D69872CF5BB3AA3BCAA6F1767798AE80A5
228A6BBA50D72DAC6CDE9E3B79575E79E561871D868903A6CC6D3D5826D495B9
AC63A494222536954B95525EF48C94C1DB00B817ABF13C4BFA8CBEE546DFFAD6
A9A79E2A75EB4A4794D93EFBEC73E38D371AB6E6D6CEBC8CF0D2A4E92BCC30FB
96E5DB6FBFFDAEBBEEBAE9D3A7937B662381464629BA409905BAE1861B4E3CF1
44F9135815CD10E834AA024EA1AF03803E4DA34642EA87280528922DB6D8E2FE
FBEF8FA7377A27689D7ABC54B2A394EA0ABD21E277DD6DF7FBEEBBEFB537DE6C
3402A86727DBBBBAFAEB33D636902A13274F58F8E6EBA5D6ACDA5FE7C32BD752
B9E14EF5CAEC2B971E78F821DD5A52A336BEEBEA99FB947A5E7B74711A3F75CD
1D3658EFC1A77EF3DB979F6A59B16947C760B57759A973EC05DFBD7E45A53B2B
F74E9AB8E4B8EF5FDF31F50B8B1694BA7E755AA9B26AE7E0C6D5D26F5AAAAB97
27AE78E3DD77B331EDCB07FAA487B38EB65A4FFF84091397BF6B105656ADD9C7
7B8F22B896D76F6033C1AE0A6ADD936982FB949BF5B19F47FA475E3E1760F750
FF2B538C0DDC526A48FFD2607F4B56D5A19A5029B797DB3AA45007074AF51873
E3E8D7C937AA1D6DED323017F7D5778C0C3A3D59EFE0605FE3130D35FE1E2A47
764F7B6B1B95395AD3B5D65A0BE5446AC33BB0A080D9901CC6830F3EF8AAABAE
82B854BBE599679E01901C396539473A14D2768623D926B61F1CC5A0832EE9EF
C11A6AA12C9EB2B1C83305AA8E224680B79FFEF4A7EFBAEB2E1BE87A7F975D76
914B80148DF78DEB125F0C9B1261560AE12971BDF3CE3B5F74D14544F25110FA
C1081B7F9D2CB5F9EAB1B4F4B386AD9981C1D0063A37420E584F43C6E0FD69A0
5CAC92209A3D12B82CF301768DBF33916EF9423495E21CBDAF71EB6764993E5C
6DB443479A541B5C92D2107A30A21F48375D478739CBDB3732447E96E542F766
39CD279C700273917205ECF3338A07ECC6AB7E137DEFFD5D78728296EC5D9A52
B17ED5A1CD74539EE4DF6CB3CD9E7EFA69720CA43CBD351DEEF6568BC45EE433
52C3221989539A44A9F919341BDA2BD204D2790681174AD676DD75D7DB6EBB4D
A74B13FBB5AF7DEDACB3CEB2DCD1B63BEEB8E34CC2C219A0541F880D1DB3750B
798414B7E047D6F206C62B036E0D2A1C6B9A8B2FBEF8F0C30F67D56C9C11FE82
078A5DA4A770BC14CB89E53375409677352058ED131BB306963B98BD461E48DD
1E7DF4D10622A2A75D4FC554CB8896E8F19FB057A8764BB9C7C0574C06628F47
DFD2E46B7E224B17C23DE5B0C68841939494B0C0439A3B77AEE6E7BD4315F6EA
48216826C7D287B6A986B3B9373026FCA69B6E2A9728EEE15A5EBD3DAE3DEB1D
A87717EAED1B9482ADF5D7490F75F534D03F658D35DE7AF56FD3565BF59DB75E
AF0CF48D1FD3BD74D9F2310DEC4FDD1995DFD956D6814F55898952476A5DD1D7
D7A1ADA8BBB7B5FEE8B65B3956C7CE386C6AE7330B16A78FEF72D6C05BAF3CF3
EBCB964F99FC91E31E59346679FB60A97B70E28ADE4595F6775BBAA6F4F60EDC
F3CBCBA7BDB255FF268FF62CDAE1951B3FDB92A6ADD29D7A96D795BF16A9B5A3
7569DF40E7E4712B962DD5EDD7FAC0F497FFFA4257439BE4654879AF852C7576
BC878AA01ACDD5DB168B18D36EDD23CBC9C6903EEFEE78E91F79B995596C8656
0F8C657532AEACD4DADADED5D25AAE47640665BE0FD62AA5526B5BB9561DECEB
2FE72255FBAC5BB2B1AB6BB094BDB56C799D9CB2ABABA5AD75A06F20ADE8A9F7
7D8A122CFCECF496F6A1EBFE0B0AD891393B3F00E9A9E72900FB536EA3C77710
7706C99A13A3927763CBF212C498034EA3EA60D3C294F266ED2BF767C3BC3615
B1A587D421EC1998CEFA134820B73B8C69E9987689B96AC35D7DB471C139D480
BFAAA1C9105361E3DEA16F7D98A4153D6DEDB863F0456F3316F2E87FF0BFB550
3DA8EF9A988148BB49EC4754C011D3454205598FBFEB8027974B392D67A1CDA4
D549356FC964E82970003C77474735FA5AA3D6DBDCF41C2DD2F82D792773FDEC
7B8D7460223F67CAFD6F8E9FC6E30C7184E36BA5F9FA77BEF39DD34F3F1D7D13
032CB18B031EB0A433E485A5406EEED5657F3012DD7DBBEDB67BECB1C766CE9C
79F9E5974B2E703B23239C6BC4C888BCC1C46FB1ECAC600043A6DCDA289C04C6
5CA869D6F5B5BD6C47F32CA59C6DD5148631A7EBBE8460EE318FB2BCC09C0C82
46222547DB0663A34826C9EABCFBEEBB657BB924AC10FDEB6ABC403D7CF5AB5F
FDC10F7EE0145D296F3EEF5C4E6C55C6D7B57C80DB3515D3A64D03DCC853A341
23C5742177CB86D450E504D32A0A8B5547119ED82CB097BB2E30CB6BEA8D3B73
8B536CB8941BFB6C75CE2191404D2388747BD2661D42CBE2C3D9B367A137D964
937DF7DDF7D8638FF579AE05BA224B1C4798F4F98D36DA486EEECAFC6E1E318A
666B0CDF658101DFB6CB4AF32EAD8CBA0F34DAEEDE7DEF3D48A2E30EDE6B49FF
925267FAFCC777EF5FB241CBE4D7EF7CF0DE35D738EAED71D992BE3726ACDAFD
C682C109E32674B4BCD9B6E863CFDCF1B954CB3A52B9D4FACB9E8113DABA9FAA
2CEF1A2371D1F78AB497FCEFBE9E9E8EEEEE5EB9B00DBA985B6FBDB56D456FA9
CEF451EF2F3490AA7D957A07A404323AF77DA9E1D67ED6D3C9B2B78395F27088
77B8CFB89E941E004384DD708CEE05A562FD8124F4ACF2BEB3AA4C8ED334DEF0
7CD2BD2F3989D4E3AEB7DE7ACF3DF79C3E49057381C31C6DAAB5A020CD1556A3
381E3ECEE670A57D38C50205062817525E71C515471E79A4E1CA3C0B848E1AF6
861B6E28670311E4E8AEF96E5D8AC9C1E71045CDEA7930AA9400981E99CDE636
3031E504CC883D499A52F7353312A2353A66CED120FC750A3466B3F4B8B1586D
685307648253AE38A6D07AF02086CB60D0E88206E2B013C0E850021A359DC52F
4BE9F87301E399F28A093716AA072323880B8FD35C5F9812318D6C76081F75EE
94055A2BD33915C20880EC41D29A76038B062E7BD6D23EB7AF40E860948D6837
02CB8EBD72E28927DE7CF3CDEC78A6869C90C1697A47DB5D4794EF3A85C9921B
FA6F70C151471D75F5D557EBBB11F8A38F45DF9491B86B34F954EA79E2325045
0A630B52DED953AB0D7E00F14B810D8D4E91FBCDA2849C28E1F433CF3C73DEBC
794E25E0497B89110D9C076F236C43470562C5BAAD511C91AF7CE52B3FFCE10F
65554054E998367869F71E30FCDB958B29A7DF9A33678E7C591357817807EDEC
3353CA79955D5565C50C4681C974F5335549B6365201E9D0D0E56BAFBDB6CEEA
830F3E089D10F841E690E83414B2D8E648735C07625C548AC72523984650848D
2DFF03F606F062B16BA1F11A6EAD91426F474B5E0B0EE6900F4024C4C927BA6E
3A78466B4A38CF8093D6B59C668E3B5A3720C8DE633819AC37FEABEFFCD6D665
CB97DD73EFBDBA91D6BAB658CAAFFBE8130F79F62FF767E5D7B3716FDE7E4779
E96B170D0E7EACA3BDDC238F767C6B7FCF40A53E937F4A533E937A577495D6E9
59F6B731137B972F4D2D95AE81C1CE3AB3F292DE7A7F7A3D57032504E78CDCFA
CEC1AC560F41D7A14B8D2467BD17425D9E0C56A83FD47EB6CB0272C78C4E6C09
BD235D2BB1EE744F2DA7F88F28C8349C0317B3E92920895C60EA8260A7903486
8B2EBAE8D0430F050941EBAA94834E225088D498E941B4FD24C76A8197D75524
D043C6A03A6647418916E49EA504EAD608C172E8096F191B632AD40268BA0E3E
F8E08B2FBE181F89ADBBD75E7BDD74D34D4C02A516FCD56923C4B24705E1924B
9023EAC550099D29CE8EA9512C2B104D2824742143BDF0C20B67CD9A65EB902D
8DD677DD8A260DFCD4ECD9B3E5475143CCE3BB66A159017B025DB66A0B03CA68
1F6ADFDD855598E08E2FF22D1BC7B138C8555ED8460810F6B0C3811ED87BDF64
E200DF97F2AECE60A4E350528EC9245F18259DE5A6CBA7B06EE01424B3654961
EC2E396D0DD7A8547D405AE4BCF3CED39E30A267D88D88F1B2F1C61B3FFBECB3
DA4FD291D676AE7861C750136553EED4534F3DE5945362C1FEB00A38364BE644
45925537AE6175C17339408A94E77F0A661C353AA3F122465A10070E9B177880
4D6E35AC02B6856BF70BD3981D89794178C7DDAB5829E2197EBAD818240B0D95
5935A41EBEBE0B065054EE225C7822D0D7664FA57093C0BBABC9A58FB5D69C1C
1367A6D01184C3401E451BF2A5975E72F5B335960DB5E6AD52CB29F4409BA3C9
38428CD6640EB89B968C9A968F7EF4A3BFFBDDEFE2D54C90AE47C0642607A9EF
F2EB0D37DCF0B5AF7D4DBFAEBEFAEAEEEF94023423068D0013447A325B606C5D
FB558510BA5B4016E2A5C8CA8865E50AD6C1C62B4449940657B27F2C5BD13379
D2E48B2FBDE4FFFEEFFFEA5AA4B6A2D4AD25E97FF14F69C5DB5353E78BE569CB
7FF0A33FA4DE57DADA53BF4E58A55D4AF3DAEF9D73EA49472F7A5D9258639870
C9B9577DF3F8AFA4D6D2B2DE7163A7742F59FAB7D52734EAD9AA15FAFB3AD85C
6E8C360DE5788FEE26EF509E7EEDB5D7EEBFFFFEDA42A951BD566070D384E87F
EC30192E10B44506B1B8880E0916B42F2F9C1E6DCB73CE3907BA508AB6F7DC73
4F1D5B0434FF47A08CAFA91F0082D1881E418472D23ED765A581B476BA854D04
FD40AC8B80A70FF54820B252E8FCC1A9F491B4F64D4323790CD5DBAFDE73E988
23F4742001795307444FCAA1003C1B93BBBA29559710BFFB2E5C5346F9165B6C
F1873FFC0158A851AB8E00A3442211A191CFA67A36AD15CE181C521AC3698D17
F668A1F227B2D6FB748CA2804D228BD2C5BCC0C2367316513DE7AAB8381A3AE5
2C0BDCCB451951395A01A3596C824352AD3964E1EA043B2984A0535EB582A436
52D407955381FC25504050CE822C05A7CAF077AEEF1423E827A216E060B3BC0C
06EB1E35F69FFFF99F3A6C3C0C95F8C36EC41861DB72CB2D639149CAC389EC03
7F858EEBE848C8CD011CC5CC5F2C71A6DDFACC99332FB9E4122AF34C9C843DC1
72CA283EFFFCF391146E12E03801D3A28F012907179042E957296FD18C243DF9
E493D1499A433D977C91B973E78E5455EC4C33C13AB62F019928A19A59A9BD4C
F85286F5C6E9B502AB063ED8EA50D653D84C8D5C8D5A1C7F22E53DA8F5085B6D
B5150D2ACC89A65B53086E051C475860FBE24D7ED69FC8703B8247C2B880A7B3
371F6B15DC82C2CACF941AAC38661F907ECC50AD1DDE27219C5A5E164C93D1AC
4121A22FEA82DA09FA22E790398FA12AFF1C4B44341EFD4F7F654C6C561F260A
F02311EA68EFD9146C44EA3C816CA758B0C1A3B1F1B4ED19EACA46670D52BCBE
FE3EAD7D477BC701330FD44DEB519CDA92E5834B2AB59681A563AB4B6BD5F2AB
CFBEF6F45DF73C3469C5A49E5A5A75CA84850B174F98307E69DF7C29E3556A1F
AF4DF85DCFD271B5D4B574F02DCD757BE7B49EDE775BC6F7B42E6FEB1FE82F65
254C5E265C4EE15F5EFA2B31CD3A2E49276EA02E7C2943CAF2AE9708388E8F7E
95B38B414C504D3386499105F2D414729F8523138F796A8A4513B8E2E0D07B27
E5857914C545218E11E9B3C075288867AB2382534EF9A7D95E6FBDF5B46A6C39
22701277FAA4BB0A462CCBE8096C441F86B5F798C39E3192646D8156803E5D33
C96922E2AA4F125DC395D4F8E7CD9B77D2492711B6D4F82582EEB8E30E083D30
7669EA0A5F1BB3C441269F65D25CC46CA9D189CF2CBF05329FF8ABBB1239A568
C888A422CD4F7D82ACDB34879A5BED0D074B4652C05CDF4811027EF178DAAD92
6F7DD96597A1A19DE00014421136B43C9041D9AF2D28E018D6D203CA28E72CAF
240989D6047B17E311F27A22AE0EA7783939BD24E41CBF45C099AECF8D1521C7
001FFFD9CF7EF6BEFBEEB348D5826913A0D578F3C4134F94EFCB93E82EF25365
308EE201E37C801AD3451CD884C48305C09C417E696C16790E60326097BE6543
A9C039CCC43D7460F08911AC7C9183AAF775775D70DD75D7D577A5CC4C1740CD
B4BE15034A3A065AB34278304221E80E66167552E3265B29685FE818192A4B6E
14B1B7722C0C40DBB976AD5075DA2C028CFD436720DD4C64163525366C61EBB3
C108CCEAE7F5D75F5F0735BACE2D431BE8A65CFE6639AD8C0E0C54245FF8C217
EEBAEB2E8D811096D1064624149C60AFA96E044927A962BB26DE09C47E38F304
C458B528CA4BA12F217B5B42EA3BDFF90E9005AAA5F5C5030F3CF08A2BAEE029
7095F09B8D87E47965D49F70C209718D484BB3B58E3CF2C86BAEB906A3844037
5B9470742CC6709D652162590AECBE7E275A2126616D2B95A57DDB5ADBB4F557
F4AED864D34D3FF5A94FD5DB63D726B7748E2DB74D5CF2CE8BE3C7BDFAFC5F9E
E8EEFEE8BB8B56FFF12D470FD6A4F5534BA96DB0DA3FA675AD6C704C5FF6F429
E77DF384E32E2AB5A4EAA01479EA5DDE56AA75C9BA2EA5A51D6D1D3A293AF20F
3CF0C0DB0B57DAD383AD592A9575D3D654EF865B1DACE89FFCE3F6A0309C02F0
C1A19694FE5A3A929AC36F7FFBDB5B6FBDF5A38F3ECA7672FFAE61A1E969680D
8FFF6A6BDEA6DE8F7EF4A3BDF6DA2BA6CC35639A43E73BA2F6C5ADE96EBCB4D6
CE98663977152B1BD9065DB808CD80ED635B66A3A4DEB2C0F41E49704DAFE1CD
602F369229A6DC464115E13950F48FBC45B6BBBD8FBF2E03FA739FFBDCD5575F
8DCAC1188D0CF04C82E13E51B960E392EBA14E04416D3C0D9B19E3128E1A421D
F066D80DD3C0740B43AEB8F5EEBBEF7EF3CD37DBFA1F56015B1C6924FA2E2146
1C59C2005A59EECE9A12C725FB46529C263D48D7C289B3542496462186792135
78D481AE3F67CE9C830E3A28CB72BA3E5C5E965F42412A104F99F83E53639A2E
7D5FD3B7F3CE3BDF72CB2D9B6DB6D9934F3EE99CAEE3D2BA202B8AF940852E9B
C07B2BB68B421E1930261DF6FCF3CF3B926036AE613762CA1B40A2AB6C52902F
D4836824B2539C18031FAB3DB7EBAEBBFEE217BF406D63813687A02927D7F47D
FDEB5FBFF4D24B5975E8365DB4C34870926436CA4C4B21D6EF34120B0C75A22B
04CAA11F3093E06E1BA03030A89961DCBB611530C125C6B0F7DE7BDF7AEBAD7A
2EC223A82817B9C7DA5CBD36DF7CF3175E7841373DF8E083B5A06E8459986706
1693D936BC20AA8C0D0F5C7E174D0A361B712DE20D469C5E78E185C71F7F7C6A
380AD6257CD1B07C8FC41805DD88D8606A843A1C1D1A2904CD7CA6DC17C701A5
0AD9F11B27C98C998C8A0AD179F6D9674B3542BF059ECE004000ABDA5A1B6EB8
A16695398F368DDD599398923CD699D2A5B07711CAB6E73CFFD59C9915F8B4B6
3A60344E3B079E6362D1DC9CFA8A421F71B092BEA6ADBDB7AFB7ABB3ABCEBF3C
38901A36A89CF8D4DF521BB3A4A36BB59E85F54C554BADEDA9BF3EDA39EDA581
855BFCFC9E1B5BDAFA16BEDBD33D2EF52C4BF546C27D529FD3C74DED5EF2F65F
4B5DA5D66CB06FD98A715DABAC585E696B5F410EA26E752DAECFEABAEBACAB29
5DB06C519D85A32E442BF552A47A3554DD34EC1F1C122A60E4B278F48CA79C72
CAB1C71E6BDF053983AAB6E2D4AF7295F449AF6C6157344F0B0297720FC221B0
20E89ABA8BD47C21746F1455161AB3F3BE16D71E790ACD4ED83388051F933543
E741593C941238793452081A71E1C22187B8B0574849B82CD0522246BC092F93
FA8D44F74689466609073E198F859B2701563BA2142EEBE763D652D2EE5FFDEA
576FBFFD762A7C28F821A464089107002CC3E6142029E63F326BC61704F5E4BC
78F66141586E5DCA0C6B59750A1CDB93317DF8E187EB4D4493BD531E01816C1F
BA4EAE3E76ACFD8D084343F550E8A5BB48D7DC79E79D9E195F7365E2D681293D
B06E2F11A3AB6BA960C2732346EE04FB81A39D05DE7C834DF072F43FF14650AC
5C9C76F1CE014B8EE82BAE86E60AFA1F1C1A2AB3D02529DE0E2BC6BBCD1D6F9C
12DF72CB2D351284B851A91877ECD75864620F38E5E485663E22E465DE700D58
8747EAD955DBAE00B351C6A18560E580030ED061D6AED2E4B0B438D6DE25A6EC
A8E6F4E8DA5274D68C0D06A20EB6F665EFBA2D173A866575A1116616A11E8667
A27F66D869E618BF8D02DDAACEF8055EE40B7C200DDBCE867684B4F969D652C0
F006A0996D1BDBCB079E2BA3753803DA335FFCE217AFBAEA2AFC5A5D0DE3A310
608C1365E0BD4F9D66957A4430DEABAFBE3A2C6CF6C5E3D18844602E2976544A
7FD5D83875B19516FB04AB99B5B6C095EC933770FAE9A75F7FFDF5460BC68272
5C6DB9CE14B64A62AEB7DE7A2FBEF862A435C01CD430A89527811D4B35BCA5D9
5D3CA9FE97A091C9C5D2D79D9B4617DBFE81FECEAE7AB0E1AD77DEE6BB33F7FD
FA9A1B8F79FCA9BF7D6CDBED572C79BEB5B6466F7FE79F5FBDB3B3A5EB9D57A7
DCF1F31BBBC7A7FEC55306AA69C294B7162DAE337C541B5C13DD63C72E5FBCBC
CE0B554D59ADB3A53C60783348345D5CB72BB7B532C27A41546DE57A119F40F6
1111D5234BA1122D2021455C8432424D9164BDBEF2D4534F4573CD4AB7D90F46
B7156A6CEC01BBCF81FD5DC82B4E3AE924DB64CE7738E06F53CFA51FFCE03D6C
740F058DFC1A6968D350DA0A9FA3E6171A1197DA9CF3A490EDCC18ED550BEC22
F88EC6721A4EEC2D8AA033915F3567FB0152A4A7E63A24AD5D166F401F32846D
ECE60A4E32725E242D1D78232D8A7DAFEF52858129A92F9A139069C1C07256BE
94F7F83186D1CA68941074EC1A9742CB6DD60EF56CCC170A9B1571961D24B266
40EE16348886673A43471C9E07240C46D8461F93D7AA8DBA12B3625BA634B4AD
82CD9CEF7EF7BB3367CEFCFCE73F7FEFBDF7E2EE10FD5B679D758822E2259B99
C83BC9B9F1885A32E312DB488E82448FB6F5F9E79F8F0F4DB484F836AA9132B5
51080D62FECF2CC42E5AD507E44F93CBB1C03222CC7693B50E16A573C0DE04BA
9406864127A12937D7D5BD5A099FF98B2FBE586242239178759BE858D8CAD6A4
3B4504E2A6A1202C4D171D217505384B23774CB3078C51864FB3C9269B68E68D
D77594180DE44237A2D0707FEA49B7DF7EFBFBEFBFDFFB350DF5128CA488CD91
C8EBEBC3F25F655791B3741F5FE2BD517F1B1EA94BC9893CEFBCF35C4AAF6B5A
4E1172E41C6A6E310151CFD449A3985D6E4E7F4C62C550B615147096D3C8212C
4A39DDB4361E99753C0FB8D8405D0210336735B958C48DB3986C753A371354AC
35AAF55862AA419C409A3D7B36E400921D9C028EB72E42DC1E4668CF4F44693A
897ED4514769836160693F3CFFFCF34E4662D47A32E33E41A5B158CCEA99679E
79DA69A791A85B595EA8D52CD773818B9735A8831BA2BCBEB1176603A577BE36
E3E0B1E33ADA5B174C68DDBC32B8666DDCFC579E7EB5BD7B45CFC2F137FFF857
DD6DEF2CED7FBBBB6BE240256BED7B77ECB8AE854B077A6AE3EBB0E7F446A923
D506EAFF1C23B194AC67731A432D97CA752C74C061999D1BF915BB8A31458523
EFB021CFA82BEB0A1897C346A1CDA71673404465100B6635F077F16652E8069D
421012D8A963CB9182B114DAF142AEC265F1326509CD9A35EBC4134F941DF6C2
0B2F7029932E8D14828ED96EBBC2E49BD3D0AA01CFAAABED8D24B005E307646C
28A758AB934258DEE08FC83BED61139E8D7D50F05FD149B27165B9024D651B9B
3A8A0000A82B60A1101351284559145C0B687A6B5012B1802281E3202E8655C0
DE7BB23E1F78E081FFFBBFFF233D6FB58DA235352CB29A1CB6FB0DBB72077F0C
873BCBAB04CB7963F56810486850EC6A238C4DB27275D1589C52A4A475A4C559
015F37FACBFB2622E0298CC15642D702C0C69F8830E9534E39E5D4534FD5BD34
051276E69F3294C9F96D2B12478178452ACAC2C6051F61154B3617CB4E6FCA6E
8045D987D93452C49C538E94615DB5A5A4BFF5EB873EF4A1471E79C4DD791DDB
27664060C45E5D4BDEFA10F18709A967778D7204437112DCEA2BA25B3DDBB540
DD9542EC2EE2D1AA79CF2242D3C3CECF4821AF02CCCF2061C48DCFB9B763618D
DC2DD8E85C1D802BAFBC92BF4AD06B5FCA5ED19F70647535B0C4167C84EE5D38
48021BA3D270247CCA684BF9F81951E92782C19525B0D5283978C9259720D631
38CCF6EC35359AD47E06C9E39867F5A4551B546BD688C6FF03F22225664186CF
046885102BE2DEBD5948B51C7DF4D137DE7823D3154D1C0B472CF4886920C588
6C85F0CEA20151CEAA596E5AF7678D621BFA76CF98314313A579636B699CB871
B2D1A307E01C902B447D4D77A98A8C7D0589E1A9334144CA837BDEC3843DF0AE
0A2DB65228AF4879DF657D580EF419679C418B434C67B7A08F0601B3842623FB
43504123D191715F778BA3421C3B0A4042293102A46FC938931A6B6974F1DA6D
B7DDAEBAEAAAD4C078534BE6C88A897D38B0DECC2D79137BD61DA31C2217FC51
8D596FEEBEFBEE975D7619679CC78FF5050613701DFB6DB5463B3B248CC6891B
6A0FC1F5B858DE40D5B2D00911BFC51C7994997973E2F417206FCDFA221271D4
02151713AEF3C2E9D868A38DDC3E3CE5FEB1371E3F9842188C951FC483B40BE1
0D066D91B68A8E98934498655C79EBADB796A322C155C99BFA001A2F38DCA929
FA42A6091B88C0808579662165C995054A8A82021E69C38DA480F1F3227E474B
2B55C703E027595FC6D89D69E44C7AE01EB4DE04B8B3163A56C0B5BCEC645805
038C0D2F843DC17D514B520CDABB34A9E5BCD9A44580325A26946B3AA9F6939F
FC64975D76493930D5F06FEFCE9493AABB588D58A8CD4CF937C71D775C2D2F16
22B4A80F94F326390573BE80AFF1AF2DA16F2882CC890AF9C75B6CB1C52DB7DC
3292A21D6941DD8A231A07EE6AC01C4671A6F9D464CACD25B415C3B39E7F320E
06844B57117172D7305259E655773B4FAB767C115869A8268FC8A31889653EB9
1A8B4844979F0192400FE4058D6443AE0DD5C8B51565A5B1BE78062ECA2AC40F
AAA17919C3305711895B5D9608331BC33BC1406B4DE3BFFEEBBFFEE217BF58D1
78A586EDAF4156F36ED0D1F02AE5844195D04C020FB29AF7F0B67629E79D70B8
2C4F0D0D93FEF4B39FFD6CA79D762292848963DE92BDF6DA8B3A280DE0E73FFF
B9FEBFE79E7B082DE017924005708478621A2D223DC3D9507AE1B8BD1D378A58
106D15EA67A22D4ECF73A07C313962B83EBB91D8A9695528518DBBC833998512
5BAE76CC31C7FCD77FFD9737271CBF696490146A128D1515705406CE9B3A2845
0C166BD2D731C22BE5902E2C784DB28CFEDFFDEE776ED5EA59F52E2AECBD7841
9E9431802B8607431B4067F680030E200CE96144A336DA0491D0C3EA5C63FBCC
673E73D34D37C580198611453811D511A7B19473415BDDF0838674F2C9276BEF
5D74D145D28E1ADE0F7FF8433D784C1231BDFAF5F39FFFBC4431810186641451
1492848B887539D96AFF5EA70C7A4B1B76F8DCA438E527605E78AFA69C0ECC6A
98C5728A0DF46E16CA76647865A5A67AB878C566D59B8D8A8C6F9E505429D124
90A584F2F0E7B4DEC077B39CDFBFD4A097232AA8411B54A58F7DF18B5FBCFDF6
DBAD624D2558883259E80C3B3047008841C5BC053FB8DF3B45353ADEE604AEE5
74C72E18A056C4F034D42406A0EFE876D329541F3AD2580B1D0FA9E902B08628
21EAC207D8B89C559F6D439C62C149CAA302B5BCEA3F560067D97BD0F7F7FFC2
08ADE46DCF6B39134BA4FB61B9012271B02585356C0B08E02136C5F41969E873
CF3D577B5A7F922F8888C73A895CD044EC093C98D44292C251475A23B8E2D992
D47B3D86CB7477E90CE06691F94B321AFA2A2AF6B4AC2472AA39ED286ACC7CDD
F079610D14425EDE87A5BCAD21DA5D1FFED4A73EF5FBDFFF9E39D15FA5BFE9DB
931AC619F5EBA506079ECBFC7174B82CB850ABB4725327C4080B30BECF6E0A5A
1F99EBF3AEC7AC8526B21FFCE007255C747714BCD3D2EE67E5BA14FD558ECE93
4F3EA90D70E79D77EA2E50FEE290F91490B024C68E1E35E30128D6E6AC419448
60DF08EBC55E7B6C7E9C6C302B7E9072682147DC9B0B1A4B911A4D2753DE708C
E3E081B1EE4E04EA7FF686C5744C2D8D72640AC1AA189CB41D694E34AA8AA55A
7EF9CB5F82662085EC839C02DD07D283EC584BDE95162F303542740618C7A472
6968AB832C27BEB065669EFF6818C5106E96D3093BB1C524E026C5BA2C7F9DDE
44A91135B1A41DC9032ECC6741B09B832C3E85A32F66E97199F2F5D75F7FE289
276EBBEDB63FFEF18F53F0F76CAD22D3625837E671539E309694C05533FDC01E
7BECF1F0C30FCB92B67CF035E3C12F85AE39B2961E7AE821948B239DC380149A
0F736AAA96FBBBAF68D1204D705374020D07882F12871C755280CCA05BE8E819
76D8610749AE98F224BA954600DD0C3B30BEA21B6DB7DD76FACC030F3CE026F6
EE821E7B6214CE703CBAA5C0FC99F27CB66F0410B1B0A5E201C872EA92B85458
8BB415E3C06B24723266CC98A15F09E3173C2DF4B1A96A228786A39136C0EDC6
FDDD856B96262DA15BA57D3B0428FE903BEC52E11353742920301DA5D705D75C
734DA916BB380475BFFFFDEFEFBDF7DEEC0AF06EFAE215575C316BD62C295DDD
11EA0066B8904477A639053679CFB94BF448E70358D591F0202FB9E492934E3A
C97486B5BCD3976350DC1786D42CA7CBC8F26E0DD1F82B38DFDE30A07659596C
6A9D086A46EDDAC6738187A7F974889807A12822D691DBA4F3066006B2A6B23A
4BAE52830857A6AD2C09EB2D4907A84ED658630D9938061060FFC5D98EE8C858
1B9D1A502900BD08E8425F3CABEAD877B62004FD3F4F6DAF85C2845AA8C78D60
A26A5E11EBC8165FC70401B86EF16A1AFC2CEF166029E1A4A04BF953201828E5
34907F372258D80C4E06C79E4BB012B22536D964135260F61DB997A38329F76A
0C96B6411C07EFFB1A8DE130A12BC549BB424207D0C4FC4D05D72B7A8DDCDD59
39D35EA2A59864A38591574C1446461AAE54212AE042F036E54C761620884762
3FC8225A12500284F0C902B92CCE40D620BE4821F6E3D88026507BFED9679F2D
7483F55E25DD6EA00658AD880F20AA4A12DAD9C91442CB9AABCD37DF1C125F1D
F38F7FFCE38F3EFA689D2BA6F9519B256FFAC75FBE8E6D25234239241E9629CA
780624B8257BAC4F350EC892B470E60B0778D881394AA359D66748E31BECCE30
7064DD7F29925A9000E3A6003DD88566EBC60423CC481644278D9A45CF6794C8
6C56BBA4067C313334B3242F8E80E01445D56BADE37362739BE1C5FC04A7429F
2F84809A17AEF08A8993C8F690F206537A5858C0806FE0B0C2C8CDC49A399634
672C8572FB645D16C777DAB469C4A98038512A0689A3EDA494670DB49BFFF77F
FF3719D91FCA42620C164F37364D338103B8744DBEAC01FD15001DE07CF0833C
7E2493B3D7A5F53DEAA8A34E3DF5D458619982F786D768E6DB827F800BAEBB5C
7AE9A5C71C730CF10C824371FE0D47AAE54012E8739B45731A9A85AA36113218
DEE814F236DB6C237160B996423ED559610F09BA1BF7DF25B46BAA57607DF8F4
1A98AD527A75E8D6281822C058DBB5A164993EBFA6503506D3712607B491EF64
01B40365D940A8C741461023A65D265E4861F86A91B8DBFC770E1AEB312169E1
F86010D801687E453BAC703C4D470ABCD63DBB2C9A52A835A8E5D9599B5929CF
A319F1EA75E4A10C7465D5087EBAF16535EF639F05AA735656FB7FCF3DF7BCE9
A69BD0C4293761A37964AB944364052C4773EEDCB929F728682E42F24BCF224B
0EAB22E5F677413E171450B3F44623005AA40609081B206AEE3B7DFA74506C2C
31294BC9765D9322556438C7D9191986F4E52F7FF9861B6E70FC35E59835E2B2
84C74C20432A9A68AEE6DF36A88933239331A283034B068D85E3A01583B7FE79
A41CEAFBD4C7D1A271690ACF40508510AE1E92127B030BD9DF9244679F7DB6DE
0107AF8F515A078968ACAD6C5EB0D13DE0949BEA51B41153C2F574CA2AC67809
56000071143D855C8BA489D6094BD0354BC4F468618BE42D58CD6C5FF30C6330
9AEC14730FB303E9131183165B31D9E039AF068237ECB56A4E1BF23E17AEF9E5
7AFF18D44A79584C4B23A5B5B2A6250700A740166DCD11F181A67176E92D8138
77FE907A3BF6D8634F38E1042A3E659DB845ABBE8BFD7ED86187C96906AFE832
AA9800CE4267620766FD14C71F7FFCB7BFFD6D9EC5782E0BE868B702C3C1C825
2E8A9D64628118DB88C6908508961CFD839144F6E0294EB098E01691A68009E1
EC98A5C1C41A36B3B2BCA3733CB3C31E0ACF4C3CF54831139AA6C0888BC238F0
C0032FBFFC722DB71E99E40B6155B70BA4EB1CA2476FFEEC673FFB8FFFF80F1F
2266150B75EDB5D7C6688BB18A91C64610BBD4206C9216D720C194E94F288CED
B6DBEEC1071F7425BA4B30990ACF09A11A6EAA15993163C6430F3D2469F8CA2B
AF909602700BC6D51D3E1C6E6512A21F3C929C8C695733BFEA0773A91A1D6D97
8353A64D08140BE778580F38DECB0D5AEC9FF8EEACDD461B6DE4F633519B7AF3
78A8605F5A4237B95843E8CF131444013B8A4B29A69F82C572B09319705D4021
1833ACD8895EB85790638B1183A0C0C1D534EEB1C71E0F3CF0C0FCF9F3C9E545
5B8DBA67774F6795233E4E96A2BE8810A68CD684A088F79D76DAE9AEBBEE82C8
D60C5C1E3C13AED9FBD39FFE64056C691985A17F5E29AC46CA01BFCF50F348AF
68D1D472E0C9CC9933AFBBEEBA9443995268930E94DC5C80D43E450401273CC2
7062A4E5FDBF6A7999135A81AD8F1225590B63976599D98F7162304B51C00484
49AA11B2B0DFB0F1C61BEB087DEE739FFBE52F7F49E8C37890180C8CBE292841
E91B170030608E90D5702D102CA4E04FB38EDE556C3E820DC41252EE70E3408F
545F38CABC455F81A31E63037E19ADA6BB473E7A9C7B2EF2F5AF7FFDFAEBAF77
C30F56C45D9F4DD64A7A8C0F648DCA69B23B0EE47247F471813CC89BD9049FC4
6048EA1B46A73FC9789F376F9E034D7866523F7C5D43D2A6FDC637BEC1F6D3DD
F1595D7095723C4141E5F32BD11D725759600D2BF083DA53FFC4273E217D4051
63EC8994421F9828925CEE8950C369C3FF88C7306E8096BC77276294F84D2CCC
E3C5D3190DC799C550A67685DEE698658586547E52A9732D13D98A8B2FBE5886
35B97FAD2FF3ECD4899F6B58EF876382BA8A547FEC16875BA8BE73DD6396E3AE
CB8DF603911422E5D6333207EFD387D4A1F588FC8766D5253DE0A54749D94405
CC636AF9A45C3512F81A4D4041DB37D691883ABBC20674B3026690FC1C6BEEB9
4896179E62EA7DF2939FFC9FFFF99F587315239400977488CC8FE178759637F3
B0C7CC80091346051C0B2ED65C734DBDF9E28B2F72A9CF7CE6333BEEB8E3B7BE
F52D04C54A0AC61142D023193408C668175A48AEBBEEBA7A5819AFE007534E57
A7AF407418C34EFED5787200348422984C5395455FC8958AE07EF4C233C68520
40BBE5965BFEE10F7F28A46B9D1C6156513DBAB23E0FF86988EFEFFF0B9C76FF
A89E2B24D5799259B3665D7BEDB52C9B067DC51557ECB3CF3E7A80F5D75F5F66
17FB8633663A319D7C0D9A8E6F6674A2DC132B350E7BF4258C328B78606AC05E
8848648D6E24918AC55429E01AD0CA2869A2A02EE6C3F647CD94432B126D0849
A5D8B411D412FA0995A64B69EBCBBC920F8722815D0FED45920F6C088D42252C
22082BE526AD4B45390F56C02E8FB13CFAFF5B50D0223104CD7E22B887FC655D
3033B5D6175E78A159DA356C4D0EC24E76E273CF3DD75CB562F1C77550F0B26A
6FBFFD762DB41FD0C2977DEFEE6395D0FE25DA2540544E3BEDB4B973E75229CB
4E8BE168E7C922834F04FB145A086311BAF69DF31C73F3598061479C4B0A4627
014CFC305F87746FE47C8ED9BE58F7852F8E435FCA5BE0B17B25A430640B5220
C2D76D8BF8B99047FA559AECE5975F76C1AEED0C7614359D8602301E52336E7F
02E1B0FEA75B067120CE2F5D02792860748593CBA459FA93B0C7E2B19776D041
07CD9E3DDBB1D318FE89A3E22CC8B8DF7AEBAD81FD4792DA5268F9C7E970DED7
350E86893133C80D9FA3422C2DBE0A0A181B820A284291CE6AA36BAD1A0B5DAD
526E5B174058D12066F56B392E3505B58A49BADA6AAB49D6BBF74941503B578A
1502CD452DAFD4A8E5D5D2B5A1E0F08202D6FF5A0E9C07C69F35C85F21BA623F
3B57DD4C305250C0CD29D1286DD2D04603A506C1B20E2C46A7992DDC62C795C1
293786701220782905067BFC691C9EE86B7992E155B4A58285E46991A0D3D12E
606EACEF51A9110B5D97453136827E76CCF01F12D0B5A1C0631F7B0462CC48F3
839B15A746EE01C4291959103D60C65C8886C8C303E03AB1DE340597C24F6499
455818D03201F0E6BA616610F2108B3F1B4D54F47EED6B5FDB65975D64E3C861
F27DF18AF4C94D36D94456D8B0CE10679B360CD255B546F99375BCAE20352337
8B7DC0424013B1C61A6B1C71C4111AB6E4548C3B7DE4231F79F8E18723314D6A
B82C6E8EA6D7565B6DF5D9CF7E962A2047633C4BA3AF6F3C0F3C88D688093709
33567944C9392651CB99777C66B246258023AE3CB821A0DCCB4CB62D792BB494
93917184B07F0F3FFCF0934F3E19FF0078B94D25D6945387A2A584461F8652CD
366FCA3D06B478ADD16E057215F05906ED637A3BC86CA2BEC1BC79B399FA39D5
081D27F3FCB29D115B3E683229FD2476A2499E3163868CD4C8F36739187D5F2F
4D96A352BDB21AAA9CCBF9F3E70F0BEFF4AF56AB4E3D72BEE4BE48C36977690C
2E4C2078808B8C1D46A4DA58300F35CB8BA06A79ABDA98E2C5F8E0D670AAD88A
753DA126D663733418C79DB437D698EB7674058D596F4AFE6AADCDF6A7E9B520
6687D8FA2C05D2A10855AD0E2576B6FE230FE5F8560AA5C60EF85773B2FE18BE
72C2D88FE65570AEC1D286436D6033F5055C6765CFE69089473DDB6469F6A30A
3F680C9A2502FED199CBF23688647F1C75F709359F46ECD69572109933659233
DFFEF6B7E940E59A521BB82D79CF2BBDE9AF007031181E1817093B3CC0022D3C
F3A0D122DBC1664669CFBD88CF710547CE52E8F8A903A28BC4500D09EF02FAAC
32943F9FC7D78468E74B2010876393F0954268A1F02AA474AD17567EDA359A66
C67F9F841B511CC40BA660C9163644CA1530FC851216071E78E099679E090414
45ABC7D359929CF2BC13C924F08B596D5735CB3B2A461FC51BD442C70B9F0D57
37EC1E88C71E7B2CC1B1D85A2706645C504BC4836094DEFFD297BE74CF3DF7C4
EA8E38DDCE5BD32C01830368282DBA10827407C373F5EEB12A42646B9BCA0EB8
EDB6DB52C32F775826623B21962A87E69D595E26CF8C554726DC88EBE5177AD1
243E31CC18A9DDB4B9F5264CA2CC9ECD20D42AB94344B9F79861C0B613759E4F
39E59448E367802BB6B6B68A973B35E25AA858630E7C66B05863FD5FE1C55E5A
7BEDB5F1C6C8F01186BAECB2CB66CE9C69FA2AC6A34D2259536E90FADA2FE749
231539E11CEA538D568D8D5451F02827A961ED252DA5E42FF9BF96D0131EF3A2
30786731EDEDB199498D6BF2A302B6414CF20C89EC89A248C1BB022E14AEC942
93B7B3FB42FCC0887A6D4B643A2135072162328C489266CC6CDB9A5B39B2DAAB
1AD282050BE80E49FE980E667C3EEA2ABF7043497FF8F35863514D124AC1BB35
2F5B14E8D1166721A2D319B318EE9767AA999443826B0D142ED163EEEE52632F
4A0A21285C343B3CEE6E223148A931D12F2A08304D28E0C1E783AF2A2623A202
F6CF05913BD8D457D84EA4710F29EF2BE3804A2D6FF11E67DECA095B41CFA50D
A303824CC34087ABD8059F18B559603463A8D123F74EF609B279576EB046BB72
CFE83C0FCC9929801429579C12A73A59924BF556988D49D3531F7AE8A1BAE095
575EA9F7F5ABAEA65D873968A00C3B04EB1CCBC991093D35C8245BC046C5A691
89AA0ADEE97BAB63422F1E63C71D7794167168F7FDBFAC809B01A8A929BE9D72
03131C8AF7A2B3A10CC09918434935056E980899087677E4F1F1900846B1605A
C86DB6D906B4451A2E645D80F2BB3D561A811C0A0A057B6FB1474A41E4F12B15
8A967A20CB220607FBC08781CA5D0EB9EE12890BA81940DF947256E73494E535
4A07DD5126059585B51C583E4AEE6A985DD2D0B5A5A1D5F7FC1C8923220F11C1
862CC77F926EA4BC1BC982851B192B6D21ADBBEEBA524238D6A96194E8076C1D
AD8BF6866B12B419089795720274A440AD510CAAA7D69BDA2DB41521329FE598
35A7B111D311986D1007FC1EBA820B8440F9EA67288D1C08C181D86EBBED7EFB
DBDF82CF241A118908B0234B3957700A74ADF6A86A796749AC8D6ADE1179A4F5
72C4AF3CB433552C1968DE8D295464A5BC2DB4768E1E0A5427DE8943B5B8FE6C
605FD9DC849AB73973E69C70C2092606412411876026ED1FE82258AEFAD6B71A
AF5855E2A52CE5343524FCC08E02572C907880B4D7AF12B5FA303060D41EA3CD
F2AE1EC38A457BED862E3ADB8AE16BA60E77FAC352441C399E61578C4002900E
8B8EA8B69DAA3453183115F6B68FA78D72B6E5DCB9732FBFFC729D1D53468FA4
809B85BED5093722064E08C7090EBD6F2C0BB6266B07E722EE38401CEB452E1E
33AFC81CB62BFE5229341CACE69DADF10438177AA879F3E6E92CEBD1A4DB74D6
343C69746877CD40B7CF3EFBFCE637BFA1434FADD12A37E5FD2D08D2904D9049
77C30D371012275410390F6C077B846E73901A0914F24A59CE5C8B23C482BAF4
A365B89E63D6C1CD86CEB0BBEE3DD15ACE49FCA1C5FAF0873FFCF8E38F17CAF2
DECFCB35E9DECD2947D93507F4FD8AE8762C6B04288707439218A66D52F62B4A
DAE8507236D3A74F87C5B09C3784F20E884D55477A49AB55735620A0B92E42C0
D6CE1A38CC5AA37D3A5FA19B070B89C47160CA22CFE7E4631FFB982C0076A1D9
371D16E65454F2169831FAA44B6DBEF9E6FABC36BAA910195B215A8E7AD37EC2
370226E0070480503069FFEE4649B9028EE9ED8240470C21B553CED8C09F5C3A
9C1A411E13D0EBD9DD41D38A470F25B1AE65D2AFA858D3405E7FFDF55FFFFAD7
B91172798B2DB6A0693CF6A9BEF8D24B2FF9BC398C19494C475F7D429D881ECE
5E29B4E6D50F1282679F7D3602176B8088197D6334F9DFFCE637F5015C87D430
CBECE65ABBF35CC8A04F7EF2937FFCE31F495069D87A04CD099A2F8A6C530D64
43D1DD29CFF6A55CC45BD545DF2B4A674495264792CEC48A964D9A6D4DA0FE64
25E7E89C09B723AB91C746662B8564732DB4F5D4074E3FFD74DA8C627970B4F7
DF7F7FF97C6C12CE351E98FE5A6E503F3280E38F3F5E0ADE82CF0EB1964C17FF
977FF997279F7C524BEF56312ED34A39F19CE3C9715A78C5A23E47CED2D06C6B
5CC108D727A8631A6A524851ECA06C62421A416772B7E6972D75C7C3D98A6E4E
4C75CDFB51C051EA46B0052FB8B4B0846EBAE9A65D77DD95290535D25CAD9486
BA1997345E3A0B1CD2D8E9B5C0C3E5D88676DD4E3BED74EBADB746438489B21F
88EDFBE52F7FF9EEBBEFB67C30D359944B0CACC07A16BDE7C2A98F0464B4B3D3
3B981A4EA2B92583D1DA7C6C30EF615C3025E32E1A1D7B54308CDE13ADFCAE95
886888D1195E867DD995B18C88D8FAD4A47DF16E5DB2E69972C2D541A70F7CE0
0332B4B1D635CEBFFDED6F5980F5733BC90B5D812C2C210BDD1AF1576BB05BD8
1169CEA5311770F7E8D6B2E2752F5D64FBEDB77FF0C1075370EE23B30F254395
46D7646D94534F3D55322292C51714B05EDB6EBBED238F3C12C3D7B8DDBE324F
8D2C633C6602C1F68FF170E7BFD9B2B85C3EFC595E1A78F3CD377FE52B5FA1E2
1E37A5DC68153C7AAEA220E5B39CD836CBA91EBCCACE023891E38B987DC90242
EF5F75D555E79F7F3E4581C62747D2B894D36959A310BF4A015EE1F844A11CDE
4089185E932271BD56D64416B6C71E7BDC75D75D34FEB2F4B4B2B4F47192120C
20EA013D84D5680FC6A8E6949BC391921EF1ED7341B2A096635C79F9EE2086AA
39296E6928D9590A91529F081F3D7EB0B0889ADB65813A4D32586531C805D1B3
DB1D679EB9A6C4BD1E2A0A070B32AE13E9708D9E8D29B43866E7117846BA86B0
99F5B0BA4E0436C251A54F927DD70646683078EB12FBA0C4665343C74720742D
14C1B316AE0B28A8A8B80429F77D5D66C619D490584AD01B00796C54016BD017
7990C8E1036E4E2381090E5613EF0790E4101D7B53159C2D23D21171A32BE061
E52D4163DD481797B3A829BDE0820B7828C2BCE0E328522029ABC794B09A3F7F
BED1C2327F6964CEF1A45B5754A2B12D37297C36338D403499C036813EA406AF
91E32BA448565D7555FD5557D6CF30C08306C81A601A2243DE60845191C95443
40118F7C60F50B85BF29474A1BC743FEC851F172CE59C6FCDBA8259781DC2E14
CE0D3BED7E153EF95E0E982E0D3C0CA61C9BE91F0D419BF9CC3294A9190525E8
4AD02C2F6C8F792642949A880D37DC502E91048406A6132B27D2B5685C0AB354
DF95AA964071DACC322232D01297683E7E946063F570B474E4647A6B839AA78D
782FCE25114E92F93626A2621B25E887336DBE34DB1C6C23273E6D64D8DBD049
D009B18315ED3B248E153005B22EAD46C9D99A6B8EA2C44116F616FB243ABEF1
D1F0687DF796469363329A2D795FBC48A480E142FC8753EAD8209245FA40DE92
AEE94E7F1A36CEAEE3F3869B110D234959E8CF8114D3600E3FFCF00B2FBC90C2
09C36DD86C1C33C733222625E5DD1ACC6E7DC00107C851480D9E3FDEE1A98937
38CEEC45893161C382F4A6D645F20599E5C612E82422A59B6EBAE90B2FBC00DC
C9D5E7CD652129389A05C3C2E1B25A1337358F162BB9631771360CC7049A0B36
B92151D59CDADA9A038BD38EB57921BC10882D3A67BB1F86A72EE26F892590A0
915AD507F0C275D9CB2FBF9CCE1C8ED841A6016C05AADAD80D896C3A85E99E07
14306AA0B9CAC3410B4EA503AAC6312004AC177D88D06AEE3299F2A4B83447CC
8895730E29EAD970824B39EFBDF5B44782214EEC1DBD45F8974203699A6115F0
482FCC295DCAE84884BF1BFFF9529C02CC74BEEB94019902C0A45008470270E3
EAD9C9D59C2F3335D47F6A1846667604C7C3309C3D4489204853A3338AC42FA9
AB428A9057A1090AB8013D239F6F8E3120046265A6811D40449B6B5B0CC6745C
04CBA336B4C4DF47ECFD28E0A207EC17A722F26DBEFF9759732320BE90948D2F
048A315305B9C051615B4840682B932F5C7FFDF5E53C71F2ED39359F25CB591B
471859A3305150FE412284926DCDC34B2FBD44E806F161D19CF244B5399E9CDF
F5D2163C48838189D5C0ED8C28D70730421D8ED606655B1895A0DBD90B89043A
E6CEF446D4FB92EFEBAEBBEEEF7EF73B4E2C1BD788898146CBF798AE8EAF4290
C0F9BC02E3A325BB81C10E5AFEEC673FFBB77FFB375B0F4435A9D0A7B417A16C
7C8D2D2D87DF5D8D879A8C713344369B07580A0B7146E3951AC152A27C38A3FA
D58E5D3C2A4E5266792914E4567CDDA45DD5BCC55B349F1161B2F6BEF18D6F9C
72CA29F6EDF40150BE5A62AAC98D128F07018F0D478A28370B84E5AE37B7DA6A
AB279E7862658D60E365126626DC169835446A0A5AF8D8FB22B55010052BCE82
050B2C5B89ADB944AA604F1B4BE118ACF910BEF39DEF1C7AE8A13C69256F9152
C9BBC1138B022D21FB89C69738CD086E3769C67694B5245D9BF21C10DE126180
94E366F15D6C3639AA8C7D267D2CC1AD7531CD7B6D2827112C545913550BBFCA
76D4E202AD770B29025DC04756B6716D682FADD1C5175FACC7677DD918975C72
C9ECD9B337DB6C3359514621914D406D6BE7689C4E70A4DC1B23291BC3BC0624
43BD62265AEB80F7AF80BD75254BBFF295AFFCF4A73FADE6CD1639B9D75E7BED
D1471FCD333A80A4FDA039D7B33CF6D86332FD199E3E13EB71D11706A9A540B3
CF0932E1CC8F7EF4A3FDF7DFDFE15F7A3F6007EB1DE7FBFDF5A38E3AEAFCF3CF
2FE492082480E2B6E876A7F042040B27D070B0582993050CA9850CE288B80B30
3AA241267C8DA55F317FDAEC6E8DFECAE20B8AF95ADE99A0145A88BCFF17898D
94439F4C116C9BA530383BC7EE87EC066AC8EB34B45B192FE3B3A826E44DAD07
EA1F7D0600C70C975E5787AAD27020AC345C61406A8AF59B23C6CBC0EED11E95
65E0E5299C6DDED1983500A7823056CC30470C533FC33AC415E8F3CA3B043F29
1528343F662B185EAF9F3FF8C10FFEE94F7F72F7AB52833F28E56573A31098C4
8A972C104A8FC4E485A569FF897A6574180245E707DC2040E294578B726C1855
CC0021B8E3AE70E48D526CB03FBCC9C71C74D20F00494A392513C1036AAFAB39
DD744BDE838C2DEA99B19763AC9CAE76D249270114723CDCA185943749B58C48
79AAAF1618CB531E7AC5EFBFE8A28BF6DB6FBF942732DC19D0710E2C862CF401
24525DCE79D9CCE417F159B5A1E43E592842755AC171EC4A686697F2C8CA9C39
73A4BA48C7F0743444C91A507C63FA4A43BB1CA248340F581E845531C1AD8019
0335660E7B20EC982BF8E050F046329B333CE5958AEC1C2A8C0945A61C8656CE
39A2A1CFD3FB32C82EBDF452DA3FC44C21837778A6395B04A6044C35007E9DBB
238E38E2DC73CFD58D74D9534F3D152420CA18035D33462307220A5E4D6F691E
50EF7CF18B5FBCEFBEFBE853A24FBABA3292E4C7680A52D46BCAD860C31D5D01
47C115750F65D968320D4FE70589C7FEA1239954AF46883071E4C91E1AC7CDC2
C4B9A1022493F123C66DDB99B3E5B0C30ED394FAFDD4209CD284B8334D2CCBA6
17A7FE8FFC7AB1BC3ECB499378B390D4F01130096BCCCD5703E7A8E39D9C5C13
A6A646A8D55032EF9FDA7010F4F7A97D131E309143D7F9A45C076319E1B1A546
42CBA02746E02CBD5EDFFCE637EFBDF7DEA79F7E9A55874DA2102975CF0387DD
EC9F794219892E285354A28DF34FB4D639705FCD90229FD8387D0E70C1AF669E
C291140F300AF8967529D98977DF7D3738CFE617EBA7AD49FD0FF3A3BD45798C
57DAD8251C56126FAFBEFA2A87C14CD78452699181EB03B90F1BD104EE3ABA77
DC7147C41AF8A1502A2C9FF73459F0345CC87D24636DFAF4E912CABA2930317B
6FA384563CF90E03E8E7DD76DBED9A6BAE01DC8FB365FE328CAAC821C0CE8EBA
2DA2DC6D87B9679F3E13ABC8C0D9B21B4F38E1840B2EB8802C60AD012F808B1B
930E4DAFAF938AB3ECF3CE89F0370D18CBDACD6831FF5DEA83D1E0CC05DB12D5
42DC9847F6695F6FBDF5B4BE384F7C970F18B60D1B36BAD66D2D2CC84A818AC4
DF2D18F529AFBF8C118BD2D086B22E4B2B44D24C16C1CE41C493B9F083F8449B
9B37CAC188458F4562B5BC1D2C071C64A59BBD47D488EBCB6DC0914FC152A93B
372DADA994F50FF4A7C6F3965ACA95DE3ECD6F2D0DFEC78CFDEEFFF54F079EEF
1B9BBA5E6E7B33D53A53A9B194AB4ED87CA7CFB74DAE875BC70C0C3EF05F37A4
9E34AE521A18AC65A9AD925AAAA934900DA496BEC9D3577BE7F9D790B9B66E25
06A1C78189895888CD7AF78D2E18DC2395A3503D4188116B00A96BFB269ED372
CE9AC70C83A2B726CE72083733196BF6D250D33F5ACC36A9F92BCCC67A9659B3
665D7EF9E558B46C12D37D1B8F4D97307789D512531A004AD14C5BB5F0B2C5A3
2D0432D9D87212CFD5409FE9C1D3F20F17D9B15213E3A446A0CB62877DC25F5D
AF9F02FE397601F1CF4EDB030EDF68A38D9E7AEAA9C2C6D6F36EB3CD367FFCE3
1FB14E0892C738A863E908492BB28802F6875DACEF74DECA15B23A8CE9ABE60C
B35D37CF2C4A1AA82DD3010B41CC75632599F6C5FBA016DA747837F3D2636B9A
E4073CFCF0C31895961A48F9580446EC9E2F9A13C0D17CAD8164EE0E3BECF093
9FFC440F354A79D569A79D76FAE9A79BCA8042BD3472837ADD4BEE82DC23AFA8
6BD1A2F39185FE272CF98C1933BEF7BDEF41491F755BA9C1E7229DE73B6A5A10
3A7E7C3B5E365C22D281DDA3DBC9FDD575008497863620FBBB0AF8ECB3CF96C3
A71F8E3EFA68DD454A549722DA36ECE79DF24FB99F8757943508ADBCAC482E16
C53A63ADB5D6925033337E243672758DBD43FA9060BF17CABDB250A80D2C48F7
DA77DF7DE56B624610A2E7B039B34553010784C91190D22EE554CF6C2D9A2162
4DEB93B7DC72CBCE3BEFCCD850905A383A55933BB0DFB0E79E7B6A0249CDC4BA
1D36182A2AD629F9A1BCCF4B79C76BC4349566ACA9AE8007030708A1692B7BF0
3E05819882351C4B5D4B0DF67C8463AC572E94E1998017B30C09E58D91E5C455
3EEC9CC4238F3CF29C73CE49B92F08C2DC50559F978202DE6BAFBD7EFDEB5FCB
BF34BA9813412BF1BAC478BBBEB55A6493497065A5D45DDE74F2062FBCB87845
F7AB55D9F92D1FD876C74D6BBD0B6BDDABF5B6A4711F587D517F7D176DB4C61A
CB5F5DB0F6E429B5D6B68B4F392D2DEA2BB77557962C1FD3DA31D0DFDB9695D3
982EEF103C3F06A93B9A96C0250C18D9C3967B8D74BE9822CC9A18DE8BC64D4C
0321754B3945923F4675107E9E4BEA238371B302763A2C22399C74A79A2BCBE9
AB885DA177890A989123856862E4ED1A1694949AB8BD6CAA124D344F649617A1
11E8065362C5C9FEB7FE2B0DADF8470DE946B367CF3EEFBCF30C4649B98ECC86
3647628951903C9484B9C40564B7E506CD24F75D7BEDB5F5A451804350C17759
CD68017829D10B8CC405020E5C95F2AE1899EB9A5DA362C48796815BD209555B
DFA106174AF201448923156EE7542073362F4425F4D2719E63DEBC799A050E39
7D9BB972CA9D66A6CC9D3B4D92EE6002268F9FDCE9580E4CECB9DDFC42E21758
8AD2C8A8B672835D164BDF95793626A4F5F5455343A440F3641DC0A35542CB42
4D2F1C752CDB76DB6DF7E8A38F6AC24137682751248778658B386C45BB24CD5B
B494B109FE21058C55C451B1953ABA07CCE1311F10EFEBC10F3DF4D09B6EBA09
C46696338A207F817818FB9D1A96B89129C059014158B4195FE3F9AF0DC503B3
AD299B4EA174874894FD5AC892F4453A0FBAD4C11DA81CE9212ECA3EB7404451
B926C79BC70D12A292033BE6B9328F4F846C0004D5FB1FFEF0871F79E41192AF
6EBCE1CA45A6CE6E280051585FA4D7F5BEE699743B006637892B886317B76401
D5CF53736C7DC689F96B06B4992917B1FC35146B24FE6D03E8F05C8D97E4E0F3
75BEE5C45335E786C4B2B4F487138AB0613D8CB47CD9F87175913AA6AB7B79CF
F231DD0D5CDB92C5B5CE495356641D69C2DFD69F3F7EAF693DCF6FB15A1A9C30
AEF6E6B272A9A36DECC449CB1B9C68AB4D9AD0DD529E30A6BB7395556ABD2BBA
0607369E3A6DC6A7BF92FAD3B4B163572CEE6B99348682CC180875E68BEC9829
A5880E16D46D212CD97C5E526E62EA79097A45239B858E99FE483087D76BEC1E
6C5F70FB6872D03484850AD1F5C200E279B797C62D4CAEE02084AEE685D66064
6E7EF4A31FBDF3CE3B4D06093F97AF1C3DECD408AA49243236936481156846F0
C497B9D09D34A1EC931DC21761D93471B786A79D233514735848665BBD298F47
3A1EC384475F4BD3B2E38E3BDE7EFBED29E7D44C0DD623F74A72D629C23BEC10
BBB2573FC3D990F218552D40C9EAEFC436679626ACBD29840C284DB9A5835D66
E22EDC6A14B00599D6494E582C548DDE127941568E5A1147A4EDFA5898C6583F
548E969B294F12A0C5C9DB81EBA148401A91782C5260A4F23B6C193EE030C028
0408B5BCC30433A651E9D91D47F5C76807C6CF2E1C2A545216EAB55243FD6BFC
F2921F7BECB1943B4C513F1D72C821175C70013167DD1128BBFED70523251659
B4F48F28E0E6F7311E63E025BE4AA1312AC25DC3D0FB5272583CFE2E0933BB7A
3EF931EA9B42B2CA46B13101585D18162CD34805EB4EFD128F2576444CDB0E37
FF9F7FFEF973E6CCD1F5491FC4788C140F4DF4409E5BFEFA2EE6C3730229E5BD
5A23EF2EEE2C9A8634B9C7C07E40F3FDEBBFFEAB7C3E09534D1D52863B3A8950
CB61BA64E06EBBEDB6DD77DF3DE534B94441903BF614E332319FC61C18FCE52C
807ED86CB3CD6431E0FD6BAE00BB6EBAE9A67FFEF39FF55C1A09602B26D6A056
8C66D7267084BFF9CD6F5E75D555FA0AEB2E693063C68CB3CE3A4BB3AA370954
443E8DE6CD690C6A0AD88553E79E7EFA69A78DE9E8EA41132F695C21652DED63
06FA3A2A53DE5A65E6B8B73B7ACB7DD3D658FA89775F7B6AECAAD3C78F19DBD9
DE35D05B67D96CEF284F993AA99A55BB7A4BAB4D1DBFDAE4CEE50BDF98D2357E
8F2F7E3D49A2B48D49794D0E07161968766B301C887EE70B0A1AB7507BDDBC33
DDFA459B419AEC81071EA035359112AF8B8319594EED675E88182EE275F2C927
CB81E15839146C911BCFF5B007DF8819EFE4AC014EE6D464399CD63B0AD11753
BCA5A646F4844F34661A952E58B02092C368F6D8BAC6FA6579AD23A72C924F0D
2B73A83E30B78F149E363F9420084C0D927C1394995C33E52957B8022D85B8D7
3AEBACA3BDEA7261539BA5DC5F4A8DB89D76F2E9A79F7ECC31C7DC70C30DDA1E
D8D0E4269813B42F17F7757C465224C028E53C1540EC98915A8EFEB2390CA847
E3C632E54291D9959F4D9B42397F0A5DEB4B396F14B80CF3D4E0D6E0DABA3735
063E4A519BDE04D9EC12C2D72EBA77330082428E1EB00F08E2636AD1946AD883
41850CD60D76136579239551B1BA6410B188535E93B3E5965B3EF7DC7374CD23
40570B9855DC74763615844C38EA4193E948972324BA0E2AC1F50F0E0A91DE4E
79936ADAB6939271E948FA4714B07B45C032E384C2289100DBB011CC19B9E8BC
8B389C12C17A2E66C6883F3C4B7D9D640C7565585130A2386E59E0138852869D
CD6E89D92C6BEE94A7978C592D8428526EFD1053420246D64C6F0F86C15A6050
6B4D9DE341B1A5DC9CB57555CA995923350777977CC79EF39B345AC1B7B0931D
212DD89A72E58F3EFA681BA0E8090E88A3821161E49C3183673C06BCE057E998
F0ECFAC0C61B6FFCFCF3CF97F3BE7EAD8D57A1AB7CF32E22E98B01819BE8A238
B2E304456A23B44AD4B9E08BC600AE147FEBAEB3E0D55707FBFAC776E9CACBF5
1DED8CAC5CAAF6F4F5AF5A6D3F34F569D79753A93365AF6D35BD65CB85CB5E99
3471627B6AADF657D6FEC05A2D9DE5D5A7AF3E581DD868EA5A9D9DB5658BFEB6
C15AAB5696F5D596B5EFF5D9AFA54A6B777B1BCBAA3BE251706C890790FE00A8
AC45D749BFEFBEFB52F06B0BF1DEE6572D47E731E7DAEDCF3EFB6C96F7ABE62C
54F26EC74401198FDE04C3EC5A6A265FCBADC5A21C8B2BE07EC412F034B25960
EB395240CBAD84728B664A241A5C2DA9170548EC556D45B8190A9966E7C2A5B1
348D859E34D02ED5F29E7DFE19470E19E80C45CA2B8E10089A105BC9988F9230
2E12411FD9EE7752D6E9120F95B3A94BD12984722F49275D5057239EC4014408
E82BC71E7B2CF9145FDFC22DB65EE04D88BD520E1FD15D787C7D97D4523DB208
2C05CD9772523A47DB59750D4BB73FF3CC33BFF5AD6F6119315C079A5878986F
6D97EDB1C71EF7DE7BEF71C71D77E79D77FEFEF7BF478868BBE807EC94F5D65B
0F0EB96A206A07280B7C463F909940132050348FB50617953385FAE2E73EF7B9
871F7E585B9999DD7CF3CDFFF297BF44907D16B83B463A18D1322AA8AB613FCF
299578FAC637BE71C41147301B9161C3E88998A7F12B92F2689090C345D43BBA
30E2B9F0A5D8F718433A817629A2408FF8C9F48F28E02CD044477CF54839E05A
20F2347353D491BE88CBD8536EEE18AD602A696DB6ADB7DEFAB7BFFDAD0BE789
42A3DA516C856729E52CE731D3C9CBB1107E8D7956E723500C106B00C2B41D56
00C0FB711C86D2EB820B2ED0D2A7862A02A259884EFBA04A96699549151B744A
E21910162967C33730CBFCAB993BF57972C900F75069E41D8C969745A8A3540B
441C9E9FA880BDC138831B6CB0C1ECD9B367CD9AE5E9E2BCC4689B25BBFEBAEE
BAEB6AB73FF1C41318FB6865325EBE8B6783D41AA68F4B660DB6B06B6E4F281E
13EBFEFA89AB5552B5B6DB2EBBFEE4C7B7954BE5B6AECE652B96A7AC966AADAB
CE697D3DF5B44E686F7FBDAFDCD5B6F8A5FE555BF6ED5BF4C2D429533ACAEDE5
545E6DDAAAE3278E99386542A536D832B66DB34DD67FE7B5BFAE396162EBB281
F46EB6D7E7BED6923AAAB595B594DEAB76071174AC3E93AFFFC90234C7784791
1BA5D04CDA0800320259DEF24F3FE844481569A161A200810FD2CAB17D748F84
8064BD7406AE586528F767B302F6D870B26D1D1A6A67001A7F8D2A8D5A503A46
A378644300DA2F9007782A4C311BBD49A7266B3967B8C3D16BAFBD36F59FA5D0
62956A08C200FBEDB7DF77BEF39D993367DE7CF3CD386C5C4D23D1EE3DFCF0C3
390B30B7484F9F75D659175E78A1E64757B8FEFAEBF7DC734FCADB001845FBC3
A156B446A10C87708823374E30C5DA27337810634B016E66D8A949B6EB6668CA
7B761E75D451175D74D1A73FFDE9BBEFBEBB3494C18B9373E595571E72C821CC
324BA28F698BE8A8EB4EDFFDEE77E598A73C3FAFD5D2BC9B698C780BE44111A2
49A51D5686E118244A2957D5F455F3A602FAF0DCB9734F38E1047D66DEBC79A7
9C720A158DFA5F479A68B9F11A3EBD6C3EFC9E5150D02EBD48A1F51E20D8613F
AFA7B3578759901A99BCEBAEBB6EEFBDF7A66E84DE32142A98BD81DA127C650D
469B46EE05FB40128D8E28F3E7CF2FF09573544C034209A69302086292A9C400
1C1DAAE65D84A3D24AA386A0C92C98409F628C91E6CD292B534749157DE10B5F
B8E1861B9C9E31513ECC3BC71F7F3CB9467A9EC7E888E9992256087A07FD2A29
4335360A292ADD984021FE66842DF3638208E7F3D8337A403CD473CF3DF79863
8EE17481D125456415EEBC692534DA224E1B6B15F0FC38CC59DED4451FD3B468
7DE5DCEBFA4641239BF4754D089B843C426AD003A51CBC46A62666C1E379C626
30750650BE022826C609AC410BA04B1E93CA37B3BC39D48FA38F2FCBD8F4A41A
3936B45F3EDD2E9923A3CFB6749821FA3168BB025B191956DF8B3C48FD115ACA
CB2419B372AD8A1D91A5722D7577ADF5F91D5E1E7B6FE766ABAE58FC7A5A2AC1
923ABA3BDE7D71930D5BD619337EDC807CDE81CA8471E337DA609D09E3C78C1F
DBDD5B59B6DAAA535BCB69E19B6F4F681FBB4AC7A4F94FCCFFD69127762E1BC0
80D03E94F2833205317ACD35D71C70C00129AF3D437CB92EA3F6BE4B5022BA2A
A6390DF5672A7458489F19529EF2CA31FF2AD1ADB5664BDB1436F8CEEA76D8C3
1ED5B033ACDA9C569328DA82CD4A940E7713DCC9965B6E29FFCAF56F31189072
7C9FCB4A9DCC8E7962076320ABD96CB3CD9E7EFA69E4A73D8A88C37717356E6A
A7C5C4006C1E5C64975D11FE941693BFE4121E14101940F21D2E32263861A65B
3C01F037FA353AD31698388A29EFE186E7200F4D8F83391B73AC9C91CC05B812
10E48A2DB5F527E95748FC658EFDF33FFFF38F7FFCE34215E6AEBBEEFAA31FFD
08217BFEF9E79F71C619E4066CDA1BC1E11062249B8CB0BD0F7DE8438F3FFEB8
5C5EA91F9E6DDF7DF7FDDEF7BEB7D65A6B71C863F73D5785E207A3AAC16B602F
5318EE70BCDBBDB9F344E1E52A4F72121625A358B2DAA0D29D7A109883AC1828
A4D317357B84A963E0310D8D8118D3CFE3507C5580036043915D8EEDACF58CCC
3F6BCF7E2D20E0FFD110B443CAD14E6AEEDF19E7C1E91FE7A5B6DF7EFBFBEFBF
3F85F80F3C098E9A1A7F9105A659537090F0F3E0DD8526AE4B6968BF9A2C74B8
42355229171B56A63C3CE5F03812C7C3762F01A8CDCA79CF06B6593449237AB9
9413D216F89023A89B5995F494CAF784F0A60D6A8E7A2C29D69F0055917661D2
888BEAE2FA24890FFB4F5C5666F491471E49409262D961FD78A63D4A6D1E0159
E92E8D0499E21C72CA4C769FF26AB76A687BECDC3665B8CC15F5CD5019EBD1CC
41163DE0665DC560C834D52F9EA58D36DC68E79DFEED86EBAF5FF0F69B49626D
C2D8D5D75FE7B535FABA5B3A6BE39FE899D691C6D5D2DBBD13BB3EF06E65C9B4
173E3C71CA2A72394BAD756DB1F5A61B972A0313C78EF9C8B4292FBFF146D72A
935F5F52879F94DABBDADABBDE78E3ADEDDF6C9D3D7B368FE3C487575026948E
2795AF1A980B93223799CFC5B0E7A594F7B48F3B271E3176175F8F8534D4FC7C
F6B39FFDD5AF7E45EC14B8808B734CF563E8BBAD99E6331B7F8DBCFAA91189D4
06D3037EEA539FD2BD061BFD1FB3501DEEA760956940445671582074DC3C7E40
17E25773C66C3B1B9B6CB2C933CF3C13215D28C8982D95B49775A2C9A13E987A
BCEDB6DB4E1A042A0262CB3A8FD4BC1986AD1B9D73CE3973E6CC814AAC34942A
D5424FD7DC79E79D255A256F89D61835C6CB7D5F9A635DDE065CEDE0830FBEE2
8A2BE43D4BFA39C9951AB0D3BA00F4F25773C63B8B2A4DF755575D25A30F8C0F
75323A3C98F67CDEED68F80AA947902CB4554979EC916D51CE9BB66256786134
807DF6D9E7EAABAF46A15E72C925071D7410457810AFB8788E15C5F0A404D352
C3DCDF9E144A4D288929E0B6CA4399EE5360A0D53581BA54F23EA6CD2FF23148
43AE4FA0BBD2E86177D4514771002819A4D0A53294CF3D8A4E447F4BE8028955
55CB7913E3B676D6C1986D503C3E42CDA896611567C4FDBA29CA48A0444B6A77
8030B3A31DC442E4100E4862097A2E335239A38FE48A1BD7C672D4DCB6A9B17C
1DAD35117429E761774D30AAD77D998C1F2935D1299B5EC7F800D357998B8D11
2291530E614D39A308C05DC3E86CA4BB44A416DA12300C6E5ACD390809ADE316
3BF8C90C9C78E2899A4377F036F108F0130373B47F08F070C44E3AE9A479F3E6
A13B1DF384018AA7767F59C48AE71FF38EF749F5E9BE5A38691D422CB5D08826
6ACD52E0094FC1F888D40ACC9ED9FE1C871F562B308744DD8DC3D23E5FB0E00D
E9E0B6CECE96157D59ADB23CD5D2B8D2F8CF6D2F67A667B0B7326671EB6AAF67
93DFAC0F51F7AC4CEE7E63F3ED279496F77EA0B76B70CCC4B4E9EA533FB6EE1A
CFBEF581F23A95EE6CFCD23757544AD5BE6C494BB6EC039D1D7DAFBCB57CD22A
A7FCC7AC8E45A92DB5D6EDA0AE968B2E3CEFA899870CE6AB46449A888EFDD794
87D9405047F4BE8F617C402C18BEC5EAB3D5DD8407F3B15E37D152B74A2BD54A
5B6B5BFF40FFE4499365C1FCF1B13F6A9F9ABBD4EC63BACBA1871E7AEBADB7A2
337C9A223973CC527B9C4E37E03B71BE742372B736494B81B19FB36F0AE1C1D0
F354DF4546991B00890D836F6CCDE9BC2902392246E3FFA3CCA4E75C9792F3F6
DC73CFB97119E68BA58D3E2993E217BFF8456AB0C9460C2C9B5C5ADFE1077704
30601672374D29B84B467272E3556AB4A7A3479F6B7CC8A8EA331AD55FFFFA57
66B8F995C52265209A80F110F4E00EC06DFA50F93C43C944E2871A09562806C7
C956A6865F12A3138E9BB33684E96CFB333BA64875F1B55B796B6C9AEB682712
D6F79C9222DD69A79D64C510C8329A1C6091D1104433E2BABA8C2A8D0A3ED2CC
B881E0B9E79E7BFAE9A7B347D97040B87910177D23CDA1DB25D489D2C56567B1
AB394570611732126D914F7FFAD3F22FE1CE3586D66ACC7BBA94F7F44823BC5C
FAE903304AB9113173A7730A2F4406A7CE4219EB270A1D7C531356A49C56B3DA
68882B6382D0086823D3C280ADAB345A1163026B56DD929206C37A167DDD9696
FED7674CA29235D142A580B2C6067736884D0B5A55BF460235E0BE5663B13E9B
182079416D512CAA82E95DCBF9A152E8756A165CFE6A920DEEEE5254365BA431
8128FF90430EB9EEBAEB88B6692780CBDD6DB7DD7EF0831FB03D22931F9D59F5
26D08D638F3D76EEDCB94C85AEA6FF3575D6B2B2DC7FFEF39FBFF8E28B36F890
15ECB7986E8C1182B89198AE485BC16BDB6DB77DE8A1875240E9378B5A4D29C3
8ED673FD34F5AE68EB6A6D6F695DB1B84762A5B72D8DFDD00669AD5596F7F4D7
CAA55A7B35752E4913DE2E8D5D526DADA46A2A2D4AD5F6CF7CB0674AB9639571
93CA1FFBD0F4D7DBBB3F3A41575B7F79D6FADA3B8BCAD5C18969B0BA7C61B9AD
B565EC9825955AEFD30B6E3CEDB2856FBE5BEA1EDBD3B7544AB2B59ABA1B7024
2774107486ADD8CCAAE585A1D192484D95C18ED6F84F6473F5D266730AA311CC
1B7006943B6EB8E18652156FBCB100A79C3B6207633639F3E2E87DA1CA3C4A36
7B2FEC40622D29B8AD16FB6C542D252E56648204C3614AA296D010C5CA3B560A
9832280D65A0CB8652DE16662CCB5FCC98E102848538EC4425D350B75BDE27A9
4C000A387E0858348B66ECFCF3CF97D7444E01998C2C2228A5B3EC8222C40E02
DC882D0FD2157A2984C4A267555C85D4A80FA1971CBB3CCB1B6671C0806C99AC
B840C54E58BF9AB7C2D0AFB366CD92FF1A1555396F4956480FB8B3AF3388BC00
5EC1C5A36F69FAF6DD775F4D90F6A5C4B4A660C68C19DFFDEE77914D281E8482
D3CFD0AEA65098856FE74D437523C1BDD430A368FB6AA78A1EBAAFBDF6DA28A0
2D0D8CC679FC80C830E68BB89C938EBAB29C12893C6F0EC71EF980ABA8293E69
06FA6639CF91843B1DA1FD2C5A114DFB7FFFF77FD3B02CDAB62329547F86632C
C379EBADB7DE7FFFFD47F1983DB14600E00B46AF88FD608A159C1847A7E1A988
784857CB1D70C001D75E7BAD8C6ECE0F93E30003CFE847D6EADC78E38D7BEEB9
277D009DCEC0D28A0DC65127D8E9050F2085C035252EF8E83161AF616CB3CD36
8F3DF698BE42BF6ECC1AF8DAC04FDA0B49A1FDD141071D74D75D77393F1A2B5C
53EE3EA2A8B40F89A4A5A1D5E7F6BC53D0F47A1CD979DA453C32C59A08351BAF
A5465BB0975E7A4997327511A5F0BE3E2D16F0393463FCD5629AC5F2578863C7
C6E12664B531810513D9FB628D0ADFD21510DCDA6C5A6B1D55CE60B3B44D792A
8484D7BFFFFBBF3FFCF0C31A70DDF8CB52D798B65AA5DADB33D8D2960DB4D5D6
FC971D5EABF65607FBA47C4AB5D6FEC14AEAAAB54F5B5A9DF0E240CB8A49E326
4DBE678DC9DB6CBA384980766E3A71957DD6DDED4FABCC4F6F541664836FA7BE
7195CA46ED5D834B963EF9D65B8BC68DEB6E2BAD59E93E6197992D83A5C1541A
33695CEFB2C5A5FE4A7FEE151029D16809FEA5C0AA6B8D620C7C3346A1F918BA
3C0C9615E00E43B184124A726334C3F5FD3F69D284850B17B9CF0FF628385923
AA7C009D0DCC86A326D56BC71D77D4F6361964CAEB29F4755005C41D3135A25C
723E25D61372530293284587153FF1894FCC9F3F5F12954A2A700F8EBA5543B3
AF3839FE3956CFC709749530C6259C655AA0683D189FE8C0983E697CB29D317B
179CD6D34E3B4D6E9523F059DE24D8B776C134BC0BB10095A3E41A012664F80D
E0EC23A391E0B8F0C20B6DB6A00B3D4AACF852A327B9D6C395B248B7BDF7DEFB
273FF909AE00A717CD6FCE04321F595E8C6C2C0367955E3192236641D203600C
023FC3A0405C1207F0CC9A7680758DF1D298B1D39BE79C73CECD37DFFCC73FFE
11294FE3307DFEB4C64B6F4A34ECB7DF7E71BF0E3B710496750BE90C92D61104
6EA7010DC4083578CD1B6D0938BDA45BD8408851D6B8507F6CEDCBE161721C15
E167232362436FDD7A24109955911BEE366FFA820276E7ED98A764ED76DA69A7
3BEFBCF3B8E38E3BFBECB3E11630E9A3DB92C7D8ACE5B2D983F5ADE79E7BCE56
333BCA007BAF855318E6D3D776954E22809F1A5EA076A6BEA85B3B30502071F3
21C1B7202B49140B89633CA43E2041A3C771B123F9170C91422D2633832E4409
E9146830D59C4239E5E16B328BBA82CCA62BAEB8C22B68767BA6971162B6BB90
51BF6ADBC8E08387CB9DEF902058091E4F24DAC5A6916ED63C3BFC70F1C5174B
9DDB8831B5B5C6090D2D317C8853F450286303EE782EDA65B21B3D1857792197
6DDFBBE5940FAF375861BF61556B48DAD8BBEFBEFBEDB7DFDE98994503FD83A5
AC54CB52ADBBBD36AE63DC87375D92FA53A9ABB565A05C1DA8F4B5A752676972
6F9A32BFBFFBB5DA92B163D61CB7F65B5BF62D4F6DADB5CF7CEC9F6B93AAD3BB
BFD0B2FC4F6FF5F7B48C97EA5D38B6AFAFB3ADFB2F4B7A17B58F5BFEEECB032F
BC73E745D7AD3771CDF9CF3F5F3F0EB5CAF7AFF9EE81B3BFE9CD89B82FF03040
D1AC657518B3F9C4A51162AA05E03746D5CA79CE2413E4174AF6C25B52AB8FA8
965ACA2DA41BB45894EAC1A14B623805D56E7CB59305A5C00DBEF9E69BCBE4C5
1A4B8120D6DC581E242611A02A7DFECB5FFEF23DF7DC037110BB8B9E5AFAF9E0
830F968384AED211200791E5A56E007237DD74D3679F7D5622B494779D2A9087
14FE078217A344B66C50F9B18A87EC8C5B98C465A2B67BABADB67AF4D1479166
FA80769AF6ADE650528B0A2BFD8C1D4FE0211B4ACCE2983F7368CD4D836A1808
307A46A29D786FF5536E7703EBD02D8DE08AC933376E44F7486669FA1C9AC022
4640DB44B2BC2E18CB292FD6D409A76E182F39F60DE4BB7100E82A5D64ADB5D6
DA638F3D649BA0E3530E4A04F1A4C1BBC10B6B494098C883E9DCD84C116DE4CC
041EBFA3FFA3A08553DE030A3717B0062298F5D0BAEA221A363573F855005623
190AF60AB57431CE9F8646AE5C4EC067DC8BD4CA9EA5D4C722D1DA280AB59C37
E491ACD4834BFAC7029BC28B4F3A71A231F0032A81ADE691B831594C0C534A9E
02513B8F1323166C778C0C3FA649FB8025134DE103D8B3E6BEB78F42BD6C342C
A2B043D7F2C2B5D50CACB9E69AF2B4E6CE9D5B287E4843A3058809DD42A74042
E437BFF90D828F4364E4B6EF5BCE5B6B3B0954CE1B04CD9933E7C8238F243C00
57173B598321DA69F7A2194AA3CFE84D6D786AEE110AF49921318C91E4E0D031
C71C73D1451791D021C8AFB9926EF6BCA13EED25700B139B13333CEBACB34E3E
F9E44ADE9BDDAC76A59C4D8FA81DAD392365201BA6A5D102CBD97DD7958DA480
9D414C8D28A21EB631F8092B7A967794CA597B6B4F6960DC8736E919DF5AE96C
2D0DAE52197CBD9C16B796DAB5A7065A2AB571EFB64D5C3CB0CADB1D0B06AB37
B7B6BC33A6B3AD65717AEBA207CE7F6BC9AA0B57BCBDF4ED451BAFB7DE40A5E7
A9179FEE4DE5C1EAD8526DFC3B4B5EDC60FCAA4FDFFDBB076FBF37ADA8945375
FA5AD35F7EF9A5C9D3A6FDD33FFDD35D77DDE5E82E47DE342F6C452D1CA7A000
122C88C1E653898DCE8970F5737DD75565AD96659337249554A934713D20B4A2
67C075ED8491310E0CAC89C7AAC0DB6F25570BAC4CD4C2A1516293BAE8F53AF4
85E67EF2C927E3076CB342B2A4593AFAE8A3C971B484CEA48064DD73D367A414
784FA31AB6DC8B58FDE6174E9A265FEB02E10F352CB1B70A8AD3E171D38F7085
0235907FB5956C456BFC8AF41768444E5679380A684D1A8524C32B606B5FA4F6
4F7FFA53892117075BA81969CDD2EA39757AB104713D1DBFFAD0873EA48501A7
6A0EB90869B3E3054B8891234C6EEC24C56248B36A4313C9A4C482310307271C
A4F1ECBAEBAE3A1EBBECB2CBE5975F5E4855464C6CCABD101F7E7EA6BCDDA5E8
24F3F47F6C455E1010D228F478B0248AD14B7CA072E0E6766A5CC38637CE9411
1FFBD8C7FEF77FFFD7D831CD3F0CDBCDF1AB66A428A95C90D896FB9A01DDC5C1
80E617050C645BAD60881F0CFB79D93D5FFAD2972EBBEC327D65BDF5D67BFCF1
C753605961956D15C64D850FA419D0333EFCF0C3BABE09199837BC641D5A8245
245C4D25C39235C78D498E2062883D904AD738E5013816E4223A8BBC660F38E6
02287FC4BD368725880C2AB931E6B8824D4C36B3C68C0BC83997C9F8F2CB2FF3
4990C3D8EFD5BC4FEAD4A953E179C56D757F98D4C40E66723A8D449F646F4392
C03C4494839E0B1FA894B3B5BB51B41D7144526A98D41C768024D8589A46633E
34728D93380DA8B1E38E3BEE924B2E21EBE912CC78C6F9A2164272505F913374
D04107D90A015619E5F5B01BBB9673D718B0B6F203E5715D5949C76979EAAB76
0C4EFFB74FBDDEBFA8DA526AAB4D5ED1F74E4A4BDA3BDA74C2FAFAF5A8D58ECE
52EBE6CF2C99D793D6C8D29871F5CE0B0B97955E1C73ECAFCE68ED18FFEA9F5F
9ED43D71B02B7BFCD5BFBCD5B3B463A0ABBDA7A3AFBD776CA5347E79F5A7E75E
DA9EB56B4BE9AEAB3784BBAC643D17901FF49C5B29BB856DCAA191264269266B
2BA840EF6DC47A1628421B2AB9FEDD818162222CA6751D70B6A26D09DD732342
CA3775F2C5C058B6871E0473505BE2ECB3CF96E279F1C517A92724D5E8E81432
5CFB4DD2E099679EA16709559778F06425280D8234C2DC9098EC080D07F0B3D0
77390DD5C1F104112034B017FB951364525BAB406D36A24D487B274F097479D3
BA6627D6FE69F05A4AA99E7DF7DDF7B6DB6E83883EE5503506691B08239E5651
1FFDE847DD0AB699FEA1A8806124E11CEAC614F8BBE45F17C5E4E1D04618242F
4723F1FC78D4D470C653832F3E0D85C0385566808903CBE68C74340C0A40E605
2909AC94249C91CF8C96C2123D02FD8371ADA8E6344101E13B785CBD5A29F7CB
D9A68698A690456F7E1994EFA022CC261B6EB8E1B3CF3E6BC0829CF51FFFF8C7
C0E1CCC14690136D0DD00C78B93EE04C1B436A56C0A0AF3DEDAE8E477340C11F
C3CE2379C0B367CFBEF8E28B6951A289D565B564F3E7CF1FE9F358FA3EE1EE3A
629E551D5124B52B586048AFE6C4A54633991EC4314C77E0817CC715DB9A4C38
984A3977B98D68ADA34483FB0839BB29A971FCF1C7EBD6DA5D5A08B60D122AE5
1D090B8F16094C2CB9CCF8C8FB482B726CBA2966AF817248043BF188B32CB494
E0BB294F65419E8A52E70CE3B503E68ACD4568A4CA086D28C8F2831B12280391
215C4FBEE81A5CC2BF484CC721CD34A4FDA90FC84A60FFC486EA9C1A96EC8003
0EB8F5D65BF526CBE761940249AF779A6BC96C87A5BC7380A988FCBEBB75352B
608AAA4D30821DA06F2D59B6626C5BE740EF925EDD6D6A5AE59F365DFAFF487B
0F38DBCAFADEFB596BB7A9A7D2BB940328A0A0128D9AAB9F9744CD4DA2D18005
2C8014B9A834514001E94D94A254351154A258A2895EA2AFCA255CCD35421451
10E500877E386DCED45DD67A7F6B7D67FD7866CFCCD1DC77878C73F6ECBDD6B3
9EF2AFBFFFEF1FA6DBBDF670ADD1E90DF492A15080193B49AF9B4C8564A6D1FB
D1CFC23E7B1F7AC83E5FFDD93F0DAC0C83EBC2731BF75DF9EBDF1DF3F50B27F3
E6EF9FDBF4F4D8A6766FA29EE44B06978476AD379086C999A5D3D98B966E77E3
F9977727A7374D4D34978EB4378D7B15344531550B4154BA9C1997CE3C108B5E
30BF139B2C31A4C8E217098EEA256EE70C54F9C52C9DD757A316B5E5F1B135E2
C91AD72537F88838827CCBE8D1FABC0630A13211B891E9F7F5D2C630E82906DC
71F025ACF40B628D3E66264C8EF98663E3209EAEA462D48A9DC03037CEA4E922
12A62373C105177CF8C31F7EE52B5F293FD0395DC9372914CD03226EBE528C0D
1A3D91FC69F0345A6E1E0A6C0A5C289E6DD8CADEFEF6B75F75D5556C7EDDD118
5E375B2358B2A05C9DAD832639A74BEFBDF7DEBFFDED6FF130E2741D50119F52
B2B0943F9B182FA9AA929D0261289E50F88F9288CD00DE00AD475A76E7A69815
1309DDE96C1C83D1739E7CF2C93C18C924A4D84D37DD248D624C7F985B301377
BD30318893A9C865A35A08DF935C8963C57D2F3DE9D1471F7DEBADB76A0CEF7C
E73BE57C4B0E22B070EBF38A539EA43865D624C618D5CB5EF6B25FFCE217840A
78D1F5D6F9BF10797E49C4A260BB955A67FFD3DA252ED35ACC80C0CAC390D7B4
2352B70016D095E5C2DE7DF7DD5483601B85B9A43649C5E66A4BD93119EC36D3
59DB6230710A5BC834874CD1B9E79EFB894F7CC2720AB03D51326AF635B76C48
483DE943F0E94F7FFA431FFA5052358DF631888F34B20C18141365FC7988D064
FACC9E7BEEA913C1CC7824988086383A76E7E942B5A050BD85B823647E1A9896
49E75C12219F5BBA03CCA71E355AB6DD63EDAE7774ECBFF9CD6F029606BDC991
7133223B46287B5D5FF373C20927D0F1DE25EF9A40D42D729F1C9BE366BA23ED
EA5C64C5E4300686373F2A18B7CB24D743EEDCD466664DFF831E3060167D528E
45515C5E0F238D7A36D54D47436B9F15EB4666D2E17AD6996E2533497DC776D8
3D4BEAA1313194CE249BBB33CF65DDDA9AB7FCC901039B77BFF6FAABEAADDE0B
FF6C55AFB9E9A94DDB87DF3DF986938E5BBF629BC79F7C66EB902C957794664F
CD4CD45A43F9F8F46EA3CB7F78D5F5613A34F2D0D4B3CC4C9C74E249B2A4E5DE
D167DAD82243FCDEF8C637FEFBBFFF3BC103687D0D7CB13A89BDDE5813872A25
E400A649089A8D21126433ED8ACD342943B579BB56B56B337D6C7C4D54781675
80C690B57086EF08D2099F0BFC31A8BEF6DD77DF871F7E987C6A2C6AD28A7AC8
C4A2EC3AD7B318554A86D84D6E8818E9A4432EEB944DA8707C7E843E4BC5BA43
9F27F4C2E7AD23984FB4635C34AC73414237C69DF4F18D98A716DDC493021EEA
559D72482B38A417DB31A12A82A8552F927A60C5BDAC8B82611DAD25FFE41001
6C127C48FAFFC0030FBCF7DE7B316D0016850A311422BF01D24B7DD172D9C86C
8C17FC4EF21C58462F7DE94B7FF6B39FE1144AD8C9508A0B76A9BAD34F42BB44
BCE34E5EE00EDC030E9A564AD08827DBD9424B391B112B39BDF3EE77BF5BD250
123FA6B63EF4D043BFF6B5AFB950077D0F32089968C74E6BC03EC032C8A22697
16A0683B165E973AE594533EF9C94F862A166AE30E1907D006A79694A7C73FBF
AA1D91A72BC4B624E2CFC98C580F615E304BFAE221871CF2DDEF7E577B282685
0855482044440DF35F6C5C4AB9307EE3EEB03615EDFF31211822B5B9DD6443E5
29324ED455280BD8D2B98CCD8809FD72F6D9679F7FFEF944B148CDEA841C75D4
5132C8587A2693FD43C48C6A25DDE5631FFBD839E79CE30977C88ED93BF1C413
BFFDED6F3FFAE8A31039395262CFCCB8B92DE02C1C2DB7723572125395A7482A
B2FB2BAFBCF2CC33CF24051857B4F7B5BE2676D7ABBA821BE61AE7FFFA2AEB6C
B8580D30BDB5AA212B7B5B53A4EF72F0B71C22864CD194877150CEB6A007C083
ECBAEBAEDAD2DCC80A3E36D7E28396450C6E9865EC9FE9CEF46836DACBB3C9E6
C4C86BC2781A960C85C673CD89A176BD27EB64281998199F991AAE85A513236B
7E323EBAFFF0017BEDF3FFFEE34F5A5D9D94900D76F67AE58ECF6EDE38F37867
DFF7BCE9F1D0DD79A0BB7DE7D94456476DB73CDD636CE8C9CDBDB064A679CF4D
DFDA66BA3ED99B1A4F66422DECB1CB1E3295742A5FFDEA573FF2C823FFF11FFF
11A20274A64B5B1AFA24AFBE9F8519EEAB959FFB4A177C97680431B9B955FE5B
0279A515C9549F5D686913AA5EDAF162CD8F8A870AB28062237D9B57555860A3
5C8265BD4E8F2673CD86D238C00BCC4BF4B8042CDE115776081A90A385983B8F
5141A773FDA94F7D0ADEF550055F2D001DC5A1B81C210386D7FB107E46E93B3E
E312646E6A8C673C93EE8766C3250EFC78D2426432860A19E3BCBB5166489E3C
E24E4888D7C79099B7BCE52DDFF9CE77782A34795ED1FC1AF8E338AA642EC44C
D07D797FC0CC82151C2FB3D71E116C27E6E31FFFB8A40F312E139C126D77F6A8
6F336104B1BAF66BF38A4EC5BE426D6EFB1D2BE02482E3F38EBD07A7BD49069B
ABABEF159BF9EC21B3B7F795B72755239D98C73F54C1CF0515B0F48A9C3F2A61
B0900C6AAF45DD2CFAEC65541D3A0CE989C11E2A6722EE8B10AA8ABDBDF6DA6B
F5EAD54EE43B974922071BDF12B6EF651DC952BA182056C0DE76BDA86FB92EAE
5D44FD1B66B5D965D137C0BE98ABB4EA8B2EEFF6A4934E0A51DCB81EF571E3FA
071D74102877AC225397D7AB36E37A138D057F058EAF4F17070C551D4BB77887
E85240E8A9F1A79C26EE7612C7D3B00FDCA3D48BCE91D118F42DFDC251C2B7C0
0DA5A69354715C37C920D1CDB21A8F3FFE781913DE2771FFB1582ECC97C5B12D
AFFD76D55557D1942C464E3974D677048C43E98BD0E0A6F327D7C2F5F1635B20
C2BB6994599C028CC78F5986D4EB86EED26449AFD39B5E3A39FAB2C6D49276B3
136A1B9BDD25EDD0AEE5BD8130D099EAB447E4288F2F7DE2DF3785DDC351EF3B
F2920F5EB855BEBD7CE3E9DAF8FFF3BEBFF8DFFFF1B3C15F8CBEF088D7FFAEB9
7E30C9967793B4918FD7A736F72697861D37E7BD6579EB77B77CBBD50EB5249D
4CCACAECC1596CADBBCB1135D11A11B282F5EF15AF78C55D77DD65E29D0531CF
FF770AD88D2C2BCE8D7E86008395C2DCF8F6965FB13CF417810E20991105F6D3
8C0A8C8944507571AADE95F1A16A90C501D427413EDB00E5D4387E96545D8A49
D9C63D5DE29221BB433C8513A66E14C4802D004DCBCCE761F45C600DAAE31F22
EE740497CF8E15703CED7E3911E0DC4ACCF9DF77128BA7F0322364E3D6EEDC83
8021D6B7A3FC6F78C31B6EB9E5963DF6D8436E225040D71A7EF18B5F94F7E0C2
061E29762F6C2BC5455A4626DB1F427221BC801DDAB843B9C64D3FE8BFE66CA2
1D0E2C06C25FF831B111CA6062509855A9A18C8EA533485D0A020D9C2A52B6FA
9DE6489A74F79E637BD99F0B11F917DB5A0E813601722A89FA44F6B94D8E4638
5462FA65AB3DF6996DC93E41C9EEF9EA57BF7AD8618749815D7CF1C5A400CD32
EFAA6E72F3EC18DD5DDBF4D7BFFE355F5F4C013B24A529D217354E5B7F4954F6
E36DA7CBE2F66986FFECCFFEEC9BDFFC269BD58C36582AB15B6C7F8E5EF4FA49
F51A64EB186A6682F546621149A9A200425914412E87D4C065975D76EEB9E7A2
EDF2A8460EB1A26BEAF37282D9156C09D2ABB696F419C0D854121BE597563D6E
391A71FB369F32F6E709279C70F9E597A3B488DF50528541ECAA120810246278
765D41638359CC39273B01A4966358A97F6760F1E6E703AB56AD9211E67C33C9
6357718485D07F717E24FEA7199A6C76FB9A4462D8215E5FB744EB45BD114364
BF8698C22CCD86F2E1D00BD34313E95E61E9EEF5F1B16E433EEA92901799DF7A
6D20B443A79527CDB1656B7FBE211CB4D515E79D75FC21870F87B23C21AC3BEC
C3477FFFEEFF48FEFDB9556F7FE3E323C379A7BDA437596B651AEED4647749B2
6232E96CD56C3DF8C5AF25D361C9E892B1F1CD4B0646364D6D0E91B517E602E5
EC1D529D184A731950BA13347F48152E6AE0A2C08C814A67C92C9F4F8DC549D3
F90A18616E92A9BEE8778CD6EE8B905B10B13965A6FFE637BF09118634447C17
C810C8612CAB638EA0F7BFFFFD37DE78239B1F8207BBDA0E4C7AFB8512CB46C0
15C317AA096386D830BBECB28BEE0E7126B92D34482843A1FA7ADCB28CF0158B
C202E99A6078FBF268F1665ED0843212AD6F65F38A11CF1B9ECC7AAC74FA4A24
12909FE79C73CEADB7DEFAE0830FBA9A2DCC05A0BB90E6231FF9883E29452B51
7EF2C9275B01600CEA968E95239808BA122174349F13685AF939164115E6757F
A810E5AB88B3617DF34E1AD12C9BF4835E5DB491EA3306D3881B3936DBD38A37
4A4FF4D18F7E542E4528294AF4D35CA09C3D09BE430F3DF4E69B6FD61D09F01E
77DC71F21EF44548BAF1C5814152DD811061EB8054D29C1C75D451D75D775D1E
1144C4107C42CA3EC01A9E7C1D70CB58E2046F89FDC6595203EB6B559B643759
A2C9A346E88C00F20E7199547D0BA80BD7FBBAA384B22641A2BFAFE0D52F18B2
74121E7BEC31CDC30D37DC80D9E45E43F95C2246F69B56E788238EB8FAEAAB8D
82D60780BB03AACAAA064AA610B726E6ACEA5924E9302FD016DC174A4EBA4B71
926546BCE52D6FB9F2CA2BC9CBE2C4C85A627BC73EBAADBA58BC5253A1372FB8
E0826BAFBD169C20DD4CF109E819ECB60D7198D7D9A3502132BCD9786A7D5E3B
EDC20B2FAC57BD17A9E8CF2AFE515D473B4D3E6E52559751666D426CCA94A110
718CC4E85C2BB018E3E35854529147DA557DC73BDEF195AF7C25DEED5BCED186
79D14E4E681C0C0855A522FC65D822175D74D179E79D67061E979C0197651109
3BDB436224BDB457EF34D290B69399B03C6CFBCAE10DE31303B5D0AB17F9DAAC
97D607A58EDB793BAD8F8D8C3DB029ECB0F5376EBBA9DE6DBFEEA0BF908FFCC9
CF5EB26E62EA86EBBF1466C686DEB6727287B1FAE665236B0F6A8CEF32D2680F
D69E583B319237F395B5DA83B77E23CC84E650AB3DD1599E0C6D4A263158D999
36FD79C56E435EE27229D3D2D3696F9807664181BEE517273144F9A03FE8DDCE
D62F55F14F3007E8A73E304488C254F315B083B43ADD6BD6ACF9DBBFFDDB7FFE
E77FDE77DF7DB5D34CC28A4947718A219971E304DFC575A74C88AD348261AE82
7152CF54719A491D90534E3905E901292C4D6B4E3DF5D44F7EF2937D8C7BCEA3
852A4CADCF9C7EFAE96F7EF39BBFFEF5AFB3B721B79A3F7516C58BADD48200B1
BE90B51E90F3183FA363AE7120AAD0776E114F0A5A8FC703700010D32499B05C
30C925D1BEF18D6FE8F3DB6FBFFD934F3EA9C945F5C616B4412B40649D8E8E03
4D7D8DC9702F101C043A2835416ABBA5ABA78027F43A994618B9F3D297BEF4BE
FBEE93E5F599CF7C069C11D8DD0537311E243D5BC839A525FF57A8309C80AB31
058C8605E60ABC851312B7EE3210C049BB1071AA491249D0F0271F369F045C7F
806052847A288AE2F1B9B9BEE5AC3E2F7F5ABE910BC6B820F3ACAFE8221A67EC
2AC5B28FE8165FE1C19D9BD4EBE0830FD65E5F2C77E565C54EC73632EA92278A
31C04061797C8D0A5B984B7DE0031FA07EDFD1EC5EC588EBB02A1B06D8398931
A3E5B9885306C87487348C19096524CAB4E1FC9515674E9023449B4D81ABCB6A
D8FAE799679E2903F4B7BFFD2D5F41105B57CD2A89882199689E94B79E8E29A2
F535F329C9256BAC17F50646F16BC9E0538B8114CE6F61F450C8245115972782
6C32B538E66CBE509BBF3892861F4F230AEC66A605660F2FF416C47DA810E624
F6DC483BAD58E9113224F00C90CC4B70A264B7DE07C2A3BF624E85A87FA59B76
1447A3163229572960A9C7A1B0D32BB71ACBD72783B5CE7467B0DEE8CC744323
99CAB3EE4C18EE8D4C3D3BB35D6F87B064EAE2EB2EBBFB9EFB8A58CEC4C6AFDE
F8952561DB275FF858786133AC68873C8C6603D31B465BD3BB8DB6B79BCCA686
0706974C741EF8C6F7C3E65E3AD0CCA6BBCB426B6378BE6A252626C34A36D225
54862FF63180264723FF083F7881F3D5A7B99345E8A2626DE7CC0226350AD840
99B8AC60B11CB05166495923A34591F094A8774B445D817E94728B7155633260
9F381BA0C6BEF8E0CCCF5F20F021D9C588CFCB620ABDA383AFBB33C3A1046150
8C00D19B248644259A488742E60212002D0BECDF813122B50E79926CEA8BF0C5
3AB84FCBFA682FA880B39255F7252F79C977BFFBDDACEA33D10753ED5BBEE4E2
8B2FBEECB2CB28BA375C052A76D409234E2B82823EE0CC0B5EF00209116D3239
C7D75F7F3D7830906FD4DD4BD44A3710CA3683397B027D4C356AFCFC043D38C9
21F2804314524F4B4A6A834D9C4F2270A73F51A3D9F7F5302F62D61715EF956C
BAAC346A439795E9F4D6B7BE95A305913725C8A172CB7828B4A39C12EDC877BF
FBDD92D4071D74D09D77DEE9317374617A03E01D6317FBC41CD4224E2740C389
6A8CD53CDA9AEC887E01016151EBF6DD14AA4BDE615810F1F379EE2B2921C189
ECD6FAD2EF73410101853530317864283CB5FEEE53C0A1B4E52937D4B6F139D7
CF3DF6D883F8B067D539691334F6A27EDDA1B22D42855B06720976C3FCDB543E
5005617A6442CA9E87A4E2CB253603A302EAF9C8238F94ADC9D18AED3C90AE46
4DBBA63C545576BCAF8B6800DAFFA630644E1C52E2496FB8E186E38E3B4E1612
E7D3DCCB7959E0EBAA0F7D18D6EB10E559083F605CF2A6E130286047564214A5
34AC096B430FB56AD52A6DF24B2FBDD4AE4C58DC03F651EAF380B522C810CA17
2D3408E6C318AC3D430D853E2927E6D39FFE34DA1A392371A15B83D10B95AFF9
FC21D5ADF274B03E90A779BB39BDCDDECBDBCBA7A69B53E9CCD060AD3E313ED6
498B2E0CA11B4687865ADDF4B9BBC6C392B0D32BB67F7C5399607AEAA9155963
FDEF3A3BFFE56B9F5A7A6F77E5A6301896AE0C9BDA5A8E5EE84D0F6D3C604563
79EFFE751BFFED77C964984A9334C9477B6163773A4EE6395F13AA16D171EF3C
FBC198D1045A1C72584CD5FE41651C1FC19854C30B1447D1BC0381E32070624B
11FDB7A0071C2A2323CE62C40151626FFE2766313B396E3EE8F20A7AE55D75D5
553EE0F84E1EB9014A1AA74E0A89182222F8C714B8727E930A6F683D859AEF6B
2CC638990A1802A0990A55D98B99044304C8DDF212F4698D302F046D62251D49
ABFC1869182A0388D45EF165576E19D163102FA59CE07E51962E15FFDCE73EF7
BEF7BD8F8C1DB7276A8F9D4EEA1B23976427182EF35410A7652E70B28985FABC
79A7EEBFFFFEBAD1873EF4214BB4BC220D370325712DDD54DF62BBF349883AB5
395812AF5F3297959009BAF0C20BCF3AEB2C6D26ADA223AE167304D8096C12EB
365B376152ED3099206EDDDAD7A329540D8E48D1519A46A3C6050F8044D5D147
1F2DD9A4EF524EE3A06852816689B5C25078F9E597DF7EFBED3FF9C94FD87FFA
8A7E215E6ABBC121CA1039E2DE22EC7EE0A94EC2E19C194FB7E08E34BA4D1B00
A3C789097BC00E4BC034ABABE92E2F7CE10BB5346E15608A25AB4F16D10C182E
9ED6EFEF7AD7BBBEFCE52F03D98DE9C308D9119146446655A33D5DEAF5AF7FFD
D7BEF635DBFE7A13503D2A872039869DF3581AE4AF7FFDEB103964EC55CC4740
22CE14B832C41127A03AEE518FE0C68575F029293B5742EB16AAD21D7D521BF2
B4D34EA352CBA492575E79E5873FFC615945B4C284FD34CE4D6AEA7400F1F209
21C6E86E260720455E757D26A5674A38E6105B365EE83ED51B670A2D46355A02
6638EB5E5696BE56B585D6988DF5D380F5C50F7EF083F204B4ED292AC5EBB5C2
8B1255257830D5B3D5B25A2F5BDE19DD77604363B239B962A8914F8D6FC81B21
6BD524AD465BF5C15ADE98DE6AB2B776DB1D7758F378E157AD585E1F5BBFA137
39D05ABECDB3599E8C347AE1E1D1DD66368D6A8B486DB7C2C6FA92999563DF7E
ACB53A34C3E0E690A5C3493A31DDADA0643E2F7D6176D691F575610296257BA9
2FFCF8472A608827F965AE2B3C7B7ED3B9A4D3BD795D9810560E3EE7113A3D2C
1282B64060FE319B641F4B8C1304E664813BD3017473027B2300603977846191
93AED6056315231550C0310E0679EB27C285706A4F2FDED1D9D11888AE6947E9
747CEA539FFAD33FFDD31FFDE84776E16C16E8E0C81094A378ECB1C742E70726
DF5AACCFEB5D2C1CBD600E38949BC43180B8D1915F20BD396B454820544173D4
2767CF0D380158E942871E7AE8F7BEF73D0899DD1D4CE32697A6CF43FC0B28D4
A81346B0FBEEBBAF5EBD3A8F3A20C134848110571BF719E9A4F4A96A0F1511A6
E7453F01CA4A659E74D249175C7001B40FB013C8E72040A78F49795F7DF5D5FA
80F46B3EAF07248B4D84D93C187A7C69FD9B6FBE996386BFEE7A0F46A867D49B
586AA16CA9411346BCD2EDB7DFDE494ABECB19A8CFED7EB8D801085534D56C91
BA11740DE87862B0F2B0E59E02040367A849F323A066E27634CCB683967DDC69
5C44F7D25D7025F50157CD2F28204CB84D74D1F8F63E2B27CE47B285AC51F0E6
35B0F3CF3F5F22D814DFA14A32E5558799ACEAA1CB4DD1CD2ECEB3C513A26A1F
E43E9762FF703B0332C96E6011A34AD1491C5DE62DCE2A21CE7A556F4D6B8874
5E7FE22442A59A1DC9B07CF7FBCA2BDC3EEF6061B00F4D5C4ACD18FCE1B45576
9E8CC9278F20E1F2C0030F38A11BD7DC7B77F9AF310E80A98B63514955176485
B1A0029E1FBA0C73390D2CC4EDF1C7012700F0CEA0F3151D1C006B2132659E2F
DE486A85AB9AA7B5504B43D269B657BE7A645D733C3CB57C7828E9B6D7B79634
D3E181F1998946E8B542D8988465A3B56C436FA457DCAB3B3CF5DC78686D3732
335E0F8D6D562E79C1C4E38F26C34F4F2DDD58DF3E196D0D6E5832BD64C3F2B1
1BD78D6E0CC361ABA7C3C4F07603936B37B41A038656B8C601D4671CAD89B7BD
9ECE6536B1BDF25F52C0E5C45A0117BF7B1DE64376AD5CFBB6A297AF8FCB627E
2C30D640B1B07224B9AF309D8FB17577DB6DB7534F3D55A29855B3C1EAEA0334
AEA6059A451BBE315DAB6940906304A575B57DF6D9E7BEFBEECBABA64FF6A60C
B3F249B4F430A589BC11F8B920A7C3F775589834621C48B01A4AE65176F469A8
BE0844A838F3F52D4D17AE9A6B9C4285D2A2F25E832F40A38E8C5D72C925679E
79A6AE2B7DF9D6B7BE553602F4EBE430E0272349CC33FB31DC8B86243FE9E4B4
EA8EA22BC7E4124804FB3144478D28E1A934D7128EB253F009DC8E29990B2ED5
7A6BA877DC7187AE231DFCFBDFFF5E37D2904C629545BC1C69F55AACB1BC6B28
6968C5905057ACA84BC448E0B36B65156A45FD08BE9ABFE2624DC77C20A0E179
718201ADF0502C39F542BA35545988244DDA5FFEE55FDE76DB6DD8B92CA11B5A
C4A2C1791A8E871913A96FD14F94B1630921CCA163D5CF134E38E1339FF98CC6
73CC31C77CF6B39FC5C5374C298BAAFB597DF85B78AE430E39E45FFFF55FD38A
7A8CA73617ABCF894BDA50D80E2CDB4DA7A62B2D29D280ADE90A3C4B52B5A8D3
67645D69DFC6347271D0D5F225EECC112AA2250C14BD73CD35D79C78E2897601
43847999270DFBE17BF116CAA25692AEC0317B3B41206361582F07EE382FC600
93B0773A5C173FF7DC73E510E765B933D175362D65815AA04F7CE213FA0C3B76
BEE9DD37607D17F6560D80F61531ECD145964989934F225A9550B519C5D87510
0F6C7F289107719694DE12FAE588238EF8C77FFC4774B0D68B2CB54EAEFC2A56
4D26BE0C7D5A59C46400B146191A189D9C9ACC43566F26DDBC275DBCFF4B5F78
DFBDBFDEEACFEADD5A77A6161AC3413BBAB739ECB47264E353E3B591C16E32D3
A967B43EAFE7A1D14DEB796BA03635D66B4DD5770FC32F9052CFA79FAE4F3F3C
90AD1B3B386C9BAF7CE65FD68587C3B2EEF281FAC00EAB767872C3E3531BA709
32C7B58249C4B6DFEF8C26F9AC4A4D664B76D931B564A897F7D290356A12086D
7DA8D54C071ACDF593D3E56E29B46CB757FC227F5B73DC6895F0E019C9C9D048
B56A698954D085D2244F7B1A4E29DECA1F45743EE459318A5C7252EABAB8B7FE
A79E866EA61D580CB29B95AE705A06B4F5B7EEF330BA6C6ED7133F291630A6BC
8EA7A487D7D7BDE5F3E8156BF73E83200EBCC5B807B758D05D64689E71C61927
9F7CB26B17AFBCF24AED7C9B1D2E6566B3398564E1192A9E2FA41648CFB464E0
22A09D57A4B0212A1088D97C5D4AE067B103E9F4AB4F07C73CAF78CBFD22C388
07152A0B5B23217A8A9D91B8B411D146145723BEF0C20B2FBAE822D9208EC887
C89E35FAE0F6DB6F7FCF7BDE639E291712782EB8BD0EB91E4FE73CAF08EA0C70
25A641B4C12546BD8AB71311839D9E5765C44E066B6C7A933688D258E815849D
E357B19B9B44A563F305D3A5975E2A51EE6259EB608D4D0A49CE594C31CF02E3
89F2E09A40BAE1EA7D97FCDA72C4D48A33C10E7BA2CF80E67A3C706540A762D2
637B8DA61E4BE6960A3039DC82EDFBC217BEF0DE7BEF655919D591471EF9CFFF
FCCFF4020B15DFA1930E087783E310E5B6F1993D074B7846BAA668CBD6CA9E39
1A121822943D919610956AC4CDBD69A044EA1D04598C2F5DB56A95F4BAAEAC6B
9A27445FC76AE4B23241B439B9ACEB95FBF2616C062F28DB09F705B9B0EFBEFB
CAEA32B14ED892A7B2A59789176C4713FCA7A5B156D3EDA1180CBC54BE69DCEB
82AD45C61A9B5217D7836B5921CC71CB04A7156280DE62E32704ED1B1D7BECB1
37DE7823FE745C1A1EABFF5035EE45F669486C3FBBEFFE585C381E2A7C80B193
B256B54F8CE824998D154E48D31219F1B7F039CDD2E1A1616991E999C966ABD6
C97ACDC1FACC44370C855DFE649B4DDDF51379577A67C948A160870B486A5B3E
73D24C022597B206DB45094F61650D8C4CD546DABD56BDB97459BD39FDE4D3E3
BF7B5CD739E80D2F1DDE387CDF1DBF9ADA38D1AC35B6DB7DFB87563F94F49E2F
ECDE82D7686192D667BDBA7A5A2BF7620FC534D01AD1ED9B456FC102985CBCD3
285DDB96567F60C58A658383AD24CD4B8BAB3ED39E92930FAA716A7C42275B57
E35C4F4E4ADFD632D920ED6EBB97497D4D757AC5F5507F28BBA45E6860E9D8C2
04A89746409E487327794FB3346B16F47B7EFE6788B2C54644F3BEF624FACCA6
2DA3CAE6317FE50BE198D8E1FABAFB7721F64384BD45356847C117D477A24395
F2881B95FA2E9044BA2CDE5515187656C07E46449941A9FA4911B351B4046E63
C9E0CF1BA34E24C9DC23644243054F411B7A720C34493827E88C50B91DA14AB9
BBF699844DDC4188C119A519CB9DBE3D1A77568FDB4DB8E52A60FD1075F3B605
61A23BFBC77DA0FC73CE39E7BCF3CE7334FB631FFB98FC805ED50331CCF55192
C511FC3864A82E135C20FB7A11672954C366A472DD8EFB87F39251F20FFFF00F
8E764AC0D11AD3FD79EC71DAE678D7BBDE25598CFFEDE80A467712911CA1FB89
F7EA91FB2ACAB9236B17D3892022B10680BA20B877DE79E7A38F3E5A6E131F23
CE41126BFFFDF7FFCD6F7E63AF5DEFE06D7B0EB59B4F3DF554A226D0CB91FED1
8A9C75D65971B91B8FD3870C67279C7DF6D9175C7001D87D0DB25E76B3D7ED74
2F59001A89A65193699B433F31B33CF31A217FA29384E37231381937B76F4B33
36A7813506F9EE3FFCE10FB7D0422ACC4D0B25D10B539DA501BDC9121F7FFCF1
5FF8C2178CB7D49C77AB3E867406244A19AA281FAE30D4F0D80A8CE7BDEF7DEF
CD37DFEC83403E12AE370C418FD0AC2C0B8E3FAD18AD4305E9D20693A8628710
18A44DA174B3668CF4B07B9D6A92F5D7030E38E0C73FFE3184D858452CB12EF2
C94F7E525B42768021F77CC03E53CC1EAFAFBFE94D6FD2A5981F3A9C0392EF56
2DE76269AED7F0E092B171780427A43B864764DF4C27F550A89366D8E1C5DB8F
251B075736D615A7A0EC9D9AC917D5E5D250E25D82846DBD782BCF9A53BDE96E
3D0C0E0FB4F291DE33F58987A7B367BADBEFB9D5538F3E9174C2486338EBB6A7
F3E9AC96159E647776187D55FB2EEBEA1F6ADAEC75DB956C94FE250B10924AFC
24C54A85AD570E49E31619999DB76B0D34A480878606F2D02D9C885A989999EA
E6C56C64DD0219DA9E9A25186FD4EADDF650893EAF499376DADDF1E999E7366D
D8B8696AA69B4C4FE533D3850EAED79BB5B444C9F4DAD2D6A1F088A1602D14B4
1473B14B9334560C7D9994746E872294310BEAAC565C6B1B27B9AD2617CC559F
7EFAE992A58E9321D20DE5716375CF703CCFF108E3125E06CF2F98DAA649F1B1
B2AFECEA801095728408D54FC8CAE4B88EDEC700640E51A86200683A8B08D3AF
D24902F168871819F53C67A1EEA73F5053E554685F3C3D940E87AB3EF898D171
0BDA86D63436079086DDB2B1BCDE9148C2EFD965975D74653747C2C43082260E
FE301759455677C61967C83DE52E18562EE28E5F5BCEC17845D95871C8DE691E
FDAE41D2FD974F82B020E646D29778A0440F010DFA995B77F6214A1C99D452ED
BAEBAE12C716F1FEB0CF3C41059CA7830E3AE8E73FFFB94F8EEEC29FEC481925
81A0972A45F2C6FE25CE2EB17AF69013C97AE78D6F7CE3DD77DFAD357AF8E187
BDD6FBEDB7DFFDF7DF2F8B475A138B847022AB43C2FB4FFEE44F7EFAD39F86AA
A5AB2EF8F18F7FFCC31FFEB063387D24270EA8C621AF503558050AC4E3B00A3E
99E6BAB3BF45D225D68879547E87EF6583DD5964B634611B775CDFB202F65EF2
790675423984AE661AE71D76D8012880339D440560CC201ECBB9B5FF1783DBF1
E9096B13CB25900095A66CC1BCAA13053B0699C99673F6082C2D0D011BDEAF95
7D8AA8C3264DA515A7BB00B970702ECC18807C60FCB6C2E35E75212AF707CF95
54142B612E9E366E061A438BE72BB62AEB61033ADB71C7ED2FBBECB2C38F78D7
D0706B3059B66EFC99301AF67CD96E6B363DB2D50B963DB17E6363B8503B69A7
FCAF5736FB93CFDC08FA2F69078DBAD90C438D66FBB96CECA16E78AEBE24DDEA
D57FFAAA1FFDDB0F3A613AAD877617399B96E1A56E1C4E0B115AB84FF1CCB211
847AA758CDF2BC27D27659AD78D87470586653B7D5D4FCAF78C1AE3BEFBAEB4E
B57AA2C99C6A8FCB8F95D72BB75E3BB75EB8C5B9FC5E9D2D88C7F35ED6CBBABA
1006E5606DB459AF4B7D1673D2CD364D4CAF5DB7FED9F5EB9FDB948E8F4F8F6D
CCA6A60B1D5F4BA5036441E449361B119C4570D56B65A54F636A72D2E1DFE479
960F9D9AE7D9256342157C47AF32B804F7FC8897AC4F01F7656D5EFEF2973FF0
C003986ED0CBB8E9BBCB9C9093C603F69DBB3EA3C71039B690AB10DD64C2919B
1829195F363611E00BD27E067EE45651A6A90F912B088C31ABBAE0501F85B626
946B8F2854482618EC0B94C63EFBECB37AF56A4C69E92D791BB7DE7AEB638F3D
1697D55A8419A3E1BFC6C0E605C14D8C1B56332C775036E04DB40058CA6E95D3
C799E7098AA98CBDBA586404CF6D9119EA1CE60685FEA00286C7D50E531C5843
3A60C540F2002D0B1AC595D3400CF45756BA0F6FC58D08D5629739D8C246A15C
12DCAC414331AB3652183C0ED901FD29C627BFE4252FF9CFFFFCCFFFF13FFEC7
673EF3192717DFF6B6B77DEE739F437003E8D7FCCBEB95FFAAAF100406766757
86DE566618EF6B6FA9116AFC1A9E7ECF2B92BC58AAC615A8F8F421EAED9344AC
6714CF9C74D249F29CF4BEEC9B871E7A486EBD76A0F7807D262C4A0D460A805E
D9BAAFF68FF4042CD0348D8E535921A282CA2A22214A9BB0B2F3B21F702863B9
B212E8776B54C81FAF806144D1E3E89ADA8724EF1DCB0166C9BE62CFC0A721AB
EBD1471F35264E63DB76DB6D258C1C2BBAEAAAAB3EF4A10FB93128397BB49AB7
8AFB9CE3F45BAF2F38FEB4EAE4C85AD08A5CDF951835E33C9578EC22BE15B352
FB115CF9CDA1701C8BB633CEBC68D5D0E55A35DD8534181123D0E3DC37EEA22A
69407813B3329E6D7935500E2C5D3A8A9DB4C376DB3FF5F4534361B01DDA432B
06364D4CECF0B265BD91990DD954DE2CB4AC26A25584820BF12A2D3A53066807
F3303298D4DAC39B9E9C997ABC938C87C14E5ACB93953BEFF1C4338F8DAE1C5A
BF61BDBCDEC1462B74EABD6EE82493F942B0A65AD43425AFF87C0AAEBAB440C3
76BA3345E4BBD07EA1D92A48DC0E3C70AFB1B18DCD5663971D77D865D71DE4F2
763BED75EBD63EFAF8C3535393DA4AC323ADC121F9490D8D465E7EA3D6E5B2CD
9278B75CD41296584B6AA91E2A14CE7C081393BDE7366C5ABF71FCC975D9D464
6F7C7357A26B7A26F4BA69B717F22CC97BB3DEA1BCE0C2EA4A8A206D9160DABC
89305BDE5F8B9819C308BA980DAC0D86C4D679817488396133CCEAF845C2CE21
8A6420181D70E565D10DA158EC84C41749E7315D032D666F3B9DE194565ED652
6ACC471C71C475D75DD7C7B0162B6020DF6EC54BE6850E25A47B7D41F7F06648
346227B316678209F561611B68ECCEA4859AE773925CF0CDFA90301D9C8AD8E3
2648853B455AAB6F66FB0C136C9997BDEC65D26D926E679E79666C40B95D12FC
611CAD785262BE7B9B51F12D2C2F006FA32DD010F3556C5F9E237EB1B7D2B9A4
FF3CAC2D175C28EF12ED9E638E39E68A2BAE001C24B10BE48A3A489BFCF09038
0EEF68B67ECAE87BE491471C3786278B2C6F98D7B7D8EA1CA5A825877D5303A6
B0D5F7D56ED345108BFA493F1FBA8284CAE34476F3681A92AD1F8C803CA26763
2FC6ED71DC97D0EE14F626060133A9FBEAE9F44F8D049F0F9A0BD2339896DEBE
E47A6311ACBF4AF79C70C20938F18EFF5C7DF5D5679C71062961AF9D876A2046
2C1CE3726737083243A72690C2275402058E71D5F8820A38CC0B4173532936AA
86484F68C0B2EAA462591D935D50C8C45378F031D61A7146708238903E63BB04
6B15F001519FF9B43E5B30346D0E5240FCE77FFEE73FF8C10FD8EA7EEAFDF6DB
EF57BFFA157472F64A43693E523240F987A5271B80DE6D3C8561CF21B29C7C53
8F4717C198C397CAA35EB316E873B90B52AFF8AB5EF9A7FFFB27FF5BFF5EB664
D9D8D88656B331D56E3747C3541AB67FD1F0C630B16CDBE6C44C57DE5F2FCA3B
D58A38703A9C67336361EAB946777D33DB14B2F64C2374F5A7A98132DACCE465
6164606866BC9B84463B4C20F45838D6C53CB2A1F2A838416586AE3E35312905
5C68CD5CC23D2C5B5A182207BFE280767B7A747850AAB735504F348CF6D4F8F8
D8FAF5EBA66726A577B7DE66C5D265C343C30D4DC3E4E478E84E94ACFB531A5B
112F9B0D616769D88C32CD7B9D5E9EB43BD9D84477F3F8F4FACD49D69592D021
6D4E4D249BC6BA9BC626A7263B25C6AB18465A4385246979127B9DCC5EE3EC83
901C0E5D7C219D0E8878890BE611341AC1A587E23032035944E2166BB83C0261
91770300CF61D7BD70D290F64EAFF2614ED37C278A70A079644D8E417E4ABB0E
EE0E97B4C17BE3F05812A17A5DF5C495EB514FDEF8A9E5E1FCF297BFCC4AD658
C323902A78C988C498F22894B42106D084884DA870095CC5816484E8D86C967C
216E374B7D67A81C0B333987455E2647351F16A68A0E9E748F7ED96BAFBDA49B
B1B6A4CC4E3BED34B88E5D3E61B8BF25AC4F635E55703BB0CE8CC475AB71D277
0B0A98AD061428EE521947F3E07C9683A2B1E1BB5888C0299157F013F703B0AF
90463487BCB4487283B49CDCC22CBEA403C0A9115F8D833F86EF87D269C365E9
B336624D16E6BA2F4C97D64217A19E8F9D44350E90195C28ED128036715F1D89
7EFD091605600EDEA338792ED992252719ED27753A90226317B0C6597FD055BA
A9E188507C93F0A6E1016576D0E238A20EE5CB81071EF87FFECFFF71EE7FBE8D
9CCF05F119EE8E0FD7376FFF5510562C5FE62A8C80198464215AC53A6AF6F450
7A041E16B79BAC84564113A8C388DB9194848214B35D73CD35471E7924B9FFD8
9966E7EB59A817586C9C1604D43861A56975F20A5CA3BD6468FDA73EF5A9534F
3DD5149E3E147D9BAD567575E4178D472377691C377DD18B5E74FFFDF7EB1739
F49FFFFCE729B2B2568EEBE248FF6379E7735FE5C268136EBF71C3865EA7C861
4D8C6DCEBAB9FE6F78F9D0A60D63A303238D666DB237319D757778F18AC96CF3
403AD46974DBADE95EBD1426DD5A7366A0D1A9CB237CE6910D616318A80F17FD
0BA7C6A4A7E505CC74C3C0606BB0D9DAB06EAC2A46A99591ADC1A4EA96C352C6
34B1F1A2B3A3A428A550B5F59A753D54181AACEFB8D3F63BEFBCE3F63BAC6815
859D43B2C1B25E3B49F3F6F4D4C64D1B9E7EEA996E4F2ED1E0D6DB2C1B191D18
182C92B3EDF6CC50A3A8059D962E4D42AD9E17C1EC1CCD31564B73190E8515D9
0B7AABDDA94DB7F3B65CEE7C2024A3211F9D690FC8997AFAE94DCFADDFB076FD
6C3FC39A869625DD5E4927D26CF6DAF384E42C8EEBF9340DFD8BF4224F81B587
00FCF8C73F2EA17DF8E187DF72CB2DB1079CCF2D939DEF13B3551CA57BDDEB5E
F7C31FFE90582054B59A55B7E3739CBFEF68E7731B7838776BB02732CD9DE643
54FE60E59247540144BF25AF68A78D8D0BF65B4FADEFBEE215AF9090B1948089
01CF078D3358BEFEE22FFEE2A73FFD29E81C77E48CFB0F85AAACB97892BE8633
B098526E0402B90FBBE436BDE81BC79FE3F47B5FA40E6C451FBFBCF4D6073EF0
011AB9208BF3AA73783E97AB369689F3130C243BC16687D200277490CF03616D
41B0E206C5EACA3945E30E6C79B80C432615B931868DFBAB8F9D74D249175E78
A163A726A6703112D3AE9DC122C5C5D0611E4B465F4A8FF8B62B9D40F1306CB9
920F3DF4108D710027A366A4B17429AA4D8CA147D0833E8338C5731537CB7443
C3B422CA4FAADE35A424380396A1718AD77CE0F123C41B8689E52B0EB4E25B70
38F9B03EF0D18F7EF4BCF3CE8BB9825DBC4F34FBECB3CF9638706521466E2F6A
B4E2034978EA6D6F7BDB8F7FFC63EAB6F5616B1D166BCB5881645E19521F6A21
ADFA2E609AE8E9682B891FAF9F37DF7CF399679EA907E1F3EC589FA0B89B087D
EE42D50ED970B630B7DDBA0F3653BA85F1330FDC826F99FAC3D0481AA9C6282A
82ABA0268922C08574DB6DB7BDFDED6F3FEAA8A3BEF9CD6F52F2CE78DC291653
C3D816F87BBB55AF6EB68D3B5A3A0C1897218528E8D568358BDC6A5ED4DCDC7C
FD8DC71E7FFCE8E0C8F8D478B7D6DD65D7BD9E5DF34CB7E860DF4B86E45BE46D
89E6C9505B1106764A9A2B8A8C5D7B7D77FAF1BC574C672B743B3ACCB572CAD3
7ADA4B1B5948867AB56EAF4B8D4B2DA94DE693794DC7206C37B21DE14D1C83B8
138C3798857271B892BC3C296178B03630D858B67474CF3D77D3611CDBB4B64C
F7340AA4559A48D74E4D4E3CF6D8639BC7C67B5977C992A1152B9748FB365BC9
C060BDD0869D274B83BBDBA8273539CCDD4E896A9697BAB95E2BC0643D6E5B93
661EE8E5F5BC9366BD46C8476AE98A6E36BC7153EF8927D6AD5DBBE1990D9DB2
70409E6F018FEEF6666D85F6F4BC6603E5036579DB3E983B09CE2776E5033A9E
EE7FDCA780F3454058BA2624187BECB107A81A0EF2C9279F2CB3CF3B9C5AF6BE
DAD10543A173E8A5CA90AA6CBE638E39E6F8E38F0F6569ABDC3CD812B38A74DA
AADD74CD34737BC31BDEF0BDEF7D4FDB529A1833EBCD6F7EB3F6B976BEFEBA76
ED5A9313E4652910CADB3154CD95D97B5C85EC91DF74D34D7A4019A37C2B217A
E9CD141BAD0EAAB8F88FE0A471557EBF8F5E20E6D1E55B4C6E1EB523A4CDAA99
D6C195108808F3C8CDB760D1EB5BEE01EC3370EEB9E75E70C1057D7D4B9CD200
D8E280839B0EF5AA066A2E5A8D79F9CD65CA0C9C73CE3937DC7003DD115C3A89
E76AEC89938E313F2A0AC9A82EB20B164F71C0CD368DA12E7C4BDE0FCE370C59
0EEA86A8159DEB47633469BC5FB115B00789F9F4AA06C646C5539B4BF0DC1CCB
E619A69B1E33E6AC64ADEAC2C66AB213F47523A8A9DFC51174723AABBAD76515
09A2792A5C9CC046E59073593D9AEB6762DE862D28CE18F2A38BBCF5AD6FBDFD
F6DB5190AED8D68ED532E9B244E9593EABBAA4E23FD72F183ACE56F031C2D158
453142C71F03F342E00E0B2F54A8FE785BEAA04A7CC498E1AC6A03104A3AEB6C
6E53F450259C1C8E73E2C6E13B1F6787E8D38A3498B8579C82C1E1265001BF15
D639C464A1E2FEE58E9850310E8ECBC65238FC575EF9DC86A1B67B3001635466
884274495488E2028A5099B071D6C302D16C2A284E57B2C54C9C59D9548393E2
4E53B39E53498D5904C60BCE4AF9A4BDA48418D7EB5AA96CE58AE69E7BBE60FB
EDB61A1A2EA2AC59A7B7CD361256C573D51B3AD70D9D92A9E989CD9B37AD5DBB
AE3C2F8DA1C186B46FBD216757DE58BB9E4FE867C867F26C3A290B8A9222FE9C
248D769199EED43A3DFD4BD233A4CDACD84A49B3D7D50E6C767B3AFB031393E9
E64D9D89C9F686B1A98D1BB3B56B67C6278B69498A92688DB4D9C967A471537D
3927F85C761A4E6605A9B6B3DCEBF26877AC7D39DAC71E7BEC1D77DC210108DC
01FBC99236AE4AE5C09A10CDD5B160A731FB74A6D6AD5BA7AFC03564CF27548E
693EB700CCFB219DD7DE801892916531F7806575FC0B6E640CF0843A900DCFF1
9CFFC26173EC5A3F0F3EF86039C79C47DED765254277DD755778A8E86887347B
D5AB5E25AB8B78F82CF20D8786966A881EFDC2B942921A9C96540C0C48018EBD
D381B16AC48F41A080E9707D21BA7C7E6E80F3E6EA66FE84E65BECA04209C253
68FDA4930C10302E9A9D611266E7DBCC5F9357C0F1B899BC9D72135040FDA8AF
A051ACFC62E253595B0F3CF000C34337A090081B20E6080213F14EE611EA3A51
D7577315AA7429D2562E947CBE988295ED029F9F73300B2A606FD65856E2136B
6C306E92E6D7C50126C02229EDDBC704EB52540C615D41AB9094DD7B0E3BECB0
2F7FF9CB18B9D4491340D6D56C8524554B00B3B392ECA06C805B9C78E289D75E
7B6DA8DC6B5B4BB615F28AB669B1DCAD5D524400D279F7DD775FB3660D6808C8
9F111F32514F3BED348D84EABBAC6A5CA195D5B19139FC4FFFF44F640DD848B8
71BAEC2DB7DCA24776E10DC635755FA1A4C1D3EDC049E555D3272F7112159BC5
74220EE0C76A238FD0EF905AF0B1F3CF3FFF924B2E21BBAC8B00B6322B4B5635
0C88E3BA76E0F2AA9746AD6A68CAB6776C233611E29006A74056EF29A79C12E6
A249D3A827F47F55012FF62737998983D83182DAB3E4787E88FA72326FA65930
EE77CB0A18572CAE8AE4FDA2DEB79B9745B7A0B17A4582B6843D6FB7FDD2BDF6
D86D871DB71A1A2CF24783CD565968D71B19199678EF7467A6A62664FACAA3D5
75A483CB0853DAA84B37E7B5B49D8776A17ADB63592E4F5D2B3889022EF4BC54
6643EA2D91F53ED30905323CCDD3A6446E68A4F55E5ECB3319D6437936D4EE34
66DA49A79DB7B3D6C64DD9D3CFCC3CBB76D3C68DEBA7A77B494FC643AD885E17
46844C8752D314BA3D97026E1696643235D559323A3236361E7B44C6F1217628
D53598DF3E80A52B3F9967CADE5031AE6E304BB1D78E64705E023C43E5FBFD91
0AD825CB7D8C6FA855BA42E17818F4C3B9901CD35D5C9287B459AC20029B8CE6
130E1ABDE31DEFB8F5D65B43D478D818EF3017E421F172C5155714BD2E4C18E6
B8A2B7AC6E70F8E187CBF5D6F176C5083DD4E2E07B4C23A7FB513B6B42D45AD9
FD4D4AD1D81F7DC0D88DF9F0F4BC62EAF0F59D655CECA0F2C95AD4098B3FD9E0
D59F5EF18A57486FC5856B3C6028D155E62B616FD1621D50554C5784DB878FCB
2D80C9607F60CA6969DFFFFEF77FF6B39F0D112510CB4CD6445ED7F7BEF73D30
A821CA8BF40555D0288E31840A71A0BBE315B19F0C0D4311020A835E0A601168
52CFD58201F9BC62FBC3C98313DBA5687153CF1035A1824315B2D23E98B473D2
A85E5B33A8190E6A4C0CCBCCF3206E5C6F4A3516CBEA9FC373D145179D7DF6D9
0CC900F82DA0975D716826E478CCE6FA18295FBA1AB123E9CBB46A241047E3F5
C8B8F28452D1703C3848EC18B584A5AF973600116F6C0897D4E7152524196E47
5928746603C466A215892FE290B509D4340CDDC5BA073E3FB7F8B52EB12B6CF6
4AAB22F2BE66EDD08E222D05FC9E3D4015A2EEA555A6E5094B66ED9B56A43A8B
11E02CF6CAE7925C7A119D977101B7819CA1E23FC2AEF5A2136CC39072C3A87A
D488DE7B062DBEA0020E7359043CB05AA3DEEB140CD5B594BD076EB1BE7CD9C0
0107ECB7DB0B766C35D35ED6999E18977A2D7A66D70AF52F4F77A63DB569D306
09F0620CA996A6A479977E4D937AAD1B9299ACF07ADB696F2A0FDDBC2773411E
705B43D014940A585AB7D6EBA6ED995EBB5738E28D5668B6C2E8C088FE9E8781
24190CE990F64E129A21694C67A39BC792A79E997EF4B1A71F7FF2898D1B3675
A70B7476B74475E559AD20C7D2554A05AC0B643DED8D8278AB3D93C95C989E6E
C331EE7E622ED3805302003061242B3C0C1753C0EA1D63E3F392AAD3B2DA7B1E
47C509261D6DEDED77BEF39D175C70C1820A38D61DB12CB556761B18CE178A09
2166C33A2DE9F6C0D3E8AF882F10398B198278C09C7DA232AED3F12122A984D6
A76F10F601876B962999F101B8C5BD40A3201FFFFAAFFF5AC63E1CBFDEA06C59
EF7840403C958625FF861A414A12796C04A553D92649080BA5D3C83D53FE65CA
F8C50EAA2378EE50042C4DBF4B8C723839937012D96772E00E7CAF0510B12C3F
601A757FEA2B168AEBE71CE1D4E0A5056FBCF146781649DAD522CA656347699A
C4EEECB3DC39F331F156AC5710F40C29468987AA73406C6AA5F3BAD92CB6A51C
0B49CA72A0471E79445EBE14A446284FF1F1C71F67D548331378D03B5AEE7DF7
DDF79E7BEE8145415BCA61E4382282F886795FD7DC6FBFFD640F712A08AD1351
D4C875770AD5F4CB073FF8C1ABAFBE5ADF7244448F0C39575EF529331A0E1C40
1F1B5C2CD043C4A1E8DCB98E8106E05660469CC999BBF2CA2B6D258408CF693E
32FC45F695151E7BC08CF3279C7082FC69BD49BCDACA83089055943352A13271
CC7E6547D3A11423AE35721907AB57AFD602C935770984FEA4FBFEFDDFFFBD36
BFF69BCE3521190D127E5D36582F6A9B88AE754E843821C721F6804394E6E0C5
A2709AC095F41DCF9889FABFF4EA53C04945B070CD35D77CEC631FD3D2B31026
9BD35F97942F7D0672B410959F91C7C1F240F4C738D83EBAEC304F012F98772C
BE524BF3727D8A752999375A0DD9ACCBF67DD16EABF6DE63A0551B1FDF544B68
EC5D4049968E8ECC5EA420E5EA9536C47499539F2CBDE750972F5BEB25A9CECE
B4245F2374E4014B01E7F98C3CE0827A232DB5644363AB152E6CAFD034B57ADE
1A6A0E0E35960E0EA74933AD35D330189256485B696DA09636364C0E4F4C359E
79B6FDD89AA7D73CF98424CFF8C6E999C95E47E3E88542BAC8832F42E839B5CB
690D96853054043CA6E27D18C7A26984609569AB3DC6F0EA4D7D5EAA44BE1CAA
FAE0830F064B8C22B72B6C3FDB3DC2912134245E50016F0193311F66C5EF0870
3BCA5E62BB7C063F6DA19E3E54D85B675D438976B6208AF3D6B18220DE06EB46
B103F9048AEADCF215AA108DFECC842631197AB900E8768D6F45F9D2772D5C6C
90E6552D818672C411477CF7BBDFA59D006E449F6BDF3783269A26D26B5F70FE
CBA745573EF0C003EFBEFB6EC7EE687C4119A2F4C725975C229FE9D4534FBDF8
E28B43C52C6126CE983F99161F587C8E5B1223052B4F78D6F9241A40E515541D
C06788EA8888394B39518E06D84F5F411FC460311B712E79D29985C77FCF3DF7
947265F720F8F48265579F34E1B3E65FBFEB93481CEF8305F56E32B76C8C4385
E9C3B1410DA45577745F4D77D177F13B1D158FBB7FB085687181C985D6C1890F
11DAC08C0D109878247473E31DCDB0B619BD50342ADD1DBA73EBC2F94771FE3E
C11E320F946EA7C93FE8A083FEEDDFFECDF28251C98E01576C7E0C8E197B5BC6
3285464959C68DC6224853E07227269C1266545A41A01CC81A37CA75CEC51E6D
52D5087A77C515E4C643F0A46EDE403495F7DD622876DD42E5E223D46242096F
80383BEE45F1B4C0F241C694CA13E40357035609369E6265E79B6B55ABCA2D84
94177CCDFF7C5CA5EA280BD6009C71BDAAB7291D5C42C585A9A13A451D4AEFCD
79F1B46A94D9474611E629600CFD24E2C08A765D313029C35ED6D3A7B7DD6E78
A79DB7DBFD053BECB8D3F6EDF6D4C6F5CFB6061A7996B465B50F0C8F8C0E31D4
F24CD508C09646615973517499486AF55E9A1421E83C746A597B560167336952
6479EBA9EE25B726B8264A836D34939182B5AC39586BD4D266AD3E90D4060A05
9C34F38290B2B6B9BD6C7AAAF1DCFADE53CF6E7AE6D9E774729F7AF2B975CF8E
4D7502E8E8503C41ADAA41CA927476E78C94C6CAF0F0286ACC3886D889821A81
909549D9E663D310B3E8363698D691463E4C29FC10569C59D5999B74CF7F4901
DB69891322ACBBCEAFEE48AE8160188927095849182830E3FCD7622FD4B34410
B4B83285DD82D3FDB0AD5F1CAC9A053F57D8E1C4F6AC5C0182AB3A4E140E71FC
62CE0D30D93102426F52C660C9E2436BB8698CD20A155424995731CC4BDA4BC6
115F975DFFEA57BF5A9A9B64F56207D542EAA52F7DA9BE8B38A336836303E49D
70A88EA8CCE79B6EBA492A191386FA28B34EA6152DB383D29C40A3409D41B44B
E46C5F6C76118D6184F8D031CC355416405F902D44D12D6D080D38AF3A186615
8974DC2F3244404137CFC1C6679217335CBC7193A8A8CEC7A94C4ACD76B3B73D
A1BBD31BD880ACD835775E565A4AE298444B5EB5C5761E08CB8348A9461B130E
FBA5AD4CD04563A066AE56BD6EB8E1860F7CE003586F6820294B39EB2E045FAC
6D22E17ABE05E2CCADBAB44FE00E8B7B91EA93F2B464AE19E7CFBAEBD911FD4E
CDB2939D8CD065B5B2B2FC10FAFAD67BDFFBDEEF7CE73BEE87A19F08A9F94E55
52756443F440D608C69B681E36190F4B459CE108EE2CE49D8F978F7160387D3E
97E5C63930DE71F980219DEC79371BA64CD1ACB924CEDFF296B71027EBCBE4C5
72F0FF2E071C4B58CC975A49D64F9D925E5A5610E6D6A071A1415CA362EFFCAB
5FFDEA61871DC694DAB274878CB088071C8BA9D85A92322DE9A80A8F569EEEB2
E503BBBF60C79D77D96168B8BECD365B27796FD3D8BA62757B993ED96C0C24E9
F3392617BC164B95165F2F0D02FDB317929990CDF432FD9C420187BC5D940237
82146CA18007D366BD564003EBB99CF0662B1D6C355B034D39C67AAB561F4A6B
83696DA8E0E70CF55E9EF4C2F2F6CCE0C6F1DAFA8D331BC6363DBB76DDEA871F
7FE2B167368CCDE85864BDE279E43ACB8608C526D41CCE6898AD566D665A6ED8
7239355452488ADE71C71D4C8EB32D8476D999E04CCDE6EB92048399311AAEB8
E20A79446E2443A931A194B855895B065841FC910A38569369C51085A1B9EBAE
BB3EF1C41370ADB3E7E18EA5DACA1B2666599FFF420813927155A7FF4AF40B1F
1ABBD646FCF5D75F7FF2C92703379E3DFF7298E44664556F13C7C14806F7F540
76B4CA2A9D6F992287E7C41AC5E3C12A476C39B2D7172AB4E7670B173207840B
6D89173BA831A902A0301E4F2394B1C31A939A02DB02AA486F72CD989B5E934E
2B53D28A56754E336BF11E7BEC313F780C91C77781C810D480B3E96C0B5DFCD2
4B2FFDD0873E84EF1B73A3CC7F289E45B7D0EA489AEFB2CB2EB2457EFAD39F6A
A5D88EFA0C28655F1F7BC216D5628C488E40C632C51771A823E6F8D530DEF7BE
F77DE31BDF70F953527178B95993C5740C2CE217103D2E2BD23B9A878F7CE423
DA030466B98B1B73F9E470B039CC1C1570D7EC40C640EC21A9D8B5B6E0012355
9D737524CDBD87C1751BDECC0492AA711D366AD56C12B7DE7AEB11471C71E699
675E75D5554C26C6848D338D10826B6FCB3E4736CCF54443D5BFD9D2D97DA2CC
64C94F89426914C9087B7BFA3C52A32F6711AA5EB676CAFB96DEFBC1E2CF4071
ADCB9D77DEF9DFFEDB7FE3F3687D82070807D2F6B8D7943319051D2A056C17FF
8F7FCD8F3F23CA39A798659224C0BE38D749C54A96571568216A76699560F23E
A36493AA73CC1F54C061AE6B553C785E126C75DB79AF3DBAA4B5FBEE3BADDA7B
D76DB75B29FF70747848F64FBB33DD9E9E29A272DDBC88F1A66D72CFD2C7DA0C
C6370C3630986ACD460D0874B737297FA7D71DD3670B087468D7D34201177AB7
564F06B54F92562369D4F3E2CD46AADF0B244AAD5EF65D68D61ADA78A3493AD8
CBEA5996E4C9B02663AA3D3C3E1926DAD3EB376C7CF4E1A71E7BF4E9A79EDDBC
69E3F8C4B806272D55EB65B3E70E41BE61C3E6654B976CDC38A67D45B6056FCF
492EED4370F2E82DD75BC6D6BC839D46509A7E80E4A0F3FA64B5AC1A9861C420
3267B11CF0827AC1174107E755B76F086D407EE11FA268B4C9EFBEFB6E78E830
9149B96EF9FA680A94374910F7048A41F859D5A291370958EA5B898DC4CB2EBB
ECF4D34F27EEEAEE780C1D47101FC2474B368B9E815242E48E55789CF28C9301
2C46ECF1F4D935A12213702B189D34CCFC2DCFB5EEA8F148FD1835EEF8B97EDF
6BAFBDE4B785CA22A6403654D95F4DBDD6C3E568A06F8E3EFA68992A00C7355A
67AF5FFFFAD7FFEBBFFEAB0BAB42E5F9E511838F6BAB38D8AC3DAC587818BA3E
8A332640EE5B5A7D0B2098DFB7CBE5EC859FC89EA57307A6D7E8F3487CA33ED7
277E690E256701EE1ADF8B2DA5017FF6B39F3DE6986334C8BFFAABBFFAFEF7BF
EF4E2371E52BE61A4E89E1F106AFEA33BA3EBCD9AE8A71791857BBFAEAABB51B
CD3B66E648CAC3882282A6F1098F294817DC2431AF4DA80C141ED0591F23ADB0
EB01BBE5158F34790AD47FACF02873EF557DAB92AA96BDA8F32B35937B66B860
A66FFEE39233CCD9CF7DEE73EF7AD7BBCCC5C65172778D506208B8A64382E6C6
22191F7B037D48D138949A56A4BB71D20BBF90380A0479DA0F71198F318F54C4
02F5B0F1E1A74BFE7F9421F5ED5B143047062163A84B88DAC3B8AC31AF1A2DFB
65A85A98EB1CF719250B2A6057152615EB1980F0C1D650C9C4372E05BCED76CB
F7DF7FAFBDF7D96DC5CA25BD76A79769F34B65A6727F35A29025D353ED7A2B27
3E59A2D3DB941B48310FB58A70C5809CD8C146A329AD3ED3E94E767B3353935A
C74EC867E401376AA1D194D22D7474DED26191DECD5BCDD06A268D66DAA8957D
16927A2FCBB35E2349A5FE97C809EEF6B452A17099EB2BF3B06226ABCBB39E98
987A7CCD338F3FB6F69135EBD73DB77EC3FA894E5782BD4806D74A50950E2BE0
C1C9093912050537A93733DFE9050130362B0189B3CE3AEBB4D34EB3BE319C56
4BB6F3CE3B4BCCC240CEACF2BE6B6DE255307932712982947FA402EE0B7D8728
79C1B79CB772B5027BB52F9FE5E6758BED4F7D1142E26BAFBDF6C4134FE42ED7
5C738D6CF1071F7C30442D11B9204E20705DDADC155FC14799FF02D31BFF3394
CEA2410DEEC7C42C10D2C144656B922440FEE29223AC4D8C194A2729E6D637C9
83EF1B17692C384E9C157DCCB14147A4911A5C9004305D11A5D5481A81CA267C
2F358F9840CD2425321C551AD75992A5E018E37EB9F81225411491B6F612CD9C
7983A87541DD4B66013D09CE38E38CF3CF3FDF053031B57D32171DED5F1C5A88
0B039C338E016E49052C64A2E23A48EB2ABBDACEA5214CA5FFA4653DAB80778E
3CF2C87FF8877F40B51069E08B449C386C260AFEFBBFFFFBF7BEF7BD7195B93C
3942D364D3DD7CDE016D4E3832D4C5D971A83F44EC92463DA04139C3175E78E1
273EF10988695C11885EE179D388AE3C8EBBB2D036C0634BD19D71815699898C
E3840FADCFCB153BE79C73987FA6054B085FD64AC8629D8310AFA33712FBD6B5
950E85F92C987CCA3CEF0649207A9C13E96BF96CA81713129F6E664372E4965B
6ED1C73892641F30C4ED9A58AC848AF5C9991A669B27425F6207CB1A88695542
14DFA322912814F072C7FCBDE763216898181B86A498A5139112AED3E7768385
76D82954E6AF0BB8F93CF36932137B2D05896379104BDC8C7ED5892BA6314D1A
9974447762F98AA155AB76DB69E7AD972D191A1E1918196E5455E9A53D925462
36C9084E92AA9F2A5F05DEAD88271709ECA181963CDA9074BA9D0929E0F6E458
1E3463D36922D3B35D107414FBA2D64BB50365F4248D5A56AFE5CDC2F5D5DA97
4C594941FE2C4D9A87669E0FE64933E48D6E7D246423596F494886EACD4696D7
366D985EBB6E7CCD9A671F7FFCA9C7D63C333121959FE3B3C98B6E35865CC913
238AF592AFB2DF7EFBC90F01FBA6617FFEF39FD761A71196055D1F58CF6A3576
CFBC55B8D181071E78DF7DF7911B36CED4106B963E8BBAB8CE87F8C5A1E9BEEC
5E52D57C2FA6EF1032D9DC1620DE90AC9AFD01288CF48CDADBF6396DE1D956F0
AD4355CCA60F13D665AF2646C9F6BDF4215D0B89607F2EDEAF3E061C21C41378
138057085F44468CE347FE7265363A397C2C147C11466546D0BE4297F875D451
47FDF0873FC4A3451486920CCB143FFAA2DC68FDC49D757D946E016D6FEC1825
1525080F8BF4871B12EFADAFAF91EB35DD0F84BC85972ACE7FC7F539264FB67F
E9C000FDAD6CFDC43A385435C1B6F20C96B12CA3D702B10ACA8AF84CDC362344
5111DFD7F1F0BC629D24F4AAF10082754D5156B14D61C48588ACDB17E403CEAB
49E012A0E64F98B72E058E4FC5FC66EF712D694C5BC16529F86643E2B185120D
AE936C3B1AD32444F9F5BCEA9514DF9AE2635D67AFBDF60256C6181CD72174A1
E9D5177910F2E59088D925352E57EF48955A16D83F4361203BB422F274FFE7FF
FC9F6636D5E07FF39BDFE85B2EAF4A2202F77847D97689B538BFE8FCEAD6B621
208E4773B3DC9602049CB8358DB33C217139409F20C3A7A133310221A6A770F9
BB0537A139243884A38E39114FA688DCD1A37CA1CEBB49C52DCFC98D6369CE11
84CAC521E28255173394814D61F3C711113238A6EC20CA4534A2F870D64B92D9
46F77941BAA1EB2485564EEBDDF6746B20DD67DFDD0F3AF0852B568E66DDE9B4
960F0E50E6C4E9AD5550A082610A78A91530166A413459AFB79ACD965CE1824F
A3DDED4DF5BAED3C9B4C422724D25233ADA68CB67CB0D990571D1A458D903675
2DE9160AB88C60EBEA3C574F37CA24B274C607BA592DCFEA93D940A3B6AC51DF
2AA90DD51B2D4D831E7D6A227FF2D90D6B1E7BF2F7ABD73CB776D3D8660D4612
2014B645DA8A1BD079DDF3A81B92B65F5A520FC57166930730D549D9C3C01437
1861C618D2E08B9C8BE6FC90430EB9EDB6DBD2A8AB8D4519D1B23E3627EFCFF9
39E00515705A35E59BFFAA452D92E67FC6014EE7F5F80C3C8366988FEB95C35C
6C07BE100D490F3FFCF0BBEEBAEBC9279F841165E1576C843AE0192A3BDA91CF
B85A8690825C10797512553A9C56547C86D86FDCC1580BF0D18F7E5476936596
6BB771E9EC95F64593FCA21E8BBC85ABB64D95873B62CFAF2FD0E7B070CC01E4
4C922D68F607784554145736598439C91C8566DB992B005D6E9FC9E07004071A
0E14180B162768FB7EC6341DB1D9EEB2164F94298279B9D56098CBECE1940CE6
02BC0DB6033C33B6346B55EBE5BEE65412E8925F869B01D27EC73BDE71DD75D7
21100DDB4632B25E5CDCDD30499452C7895916D70910C04177D215402F5D9027
ED554DA0F54979729FFDEC67F1D540D4E3B1397E557927B3E9760A7079965D76
D9E54D6F7A9334E2430F3DC479DB7BEFBD75CCF414EF7CE73BAFBEFA6A93CFB9
7B4152D26B4351422310500B71F884C1030BF0BC618799391C8DEBB3C045586E
874656AD5AA5878D417F6945D21E2A1C2991A72499E5B9E3D9899F0330C4D787
3A0635C6314151B1875DADE7E98A259DE656B6EF35D75C4303AE5061E2624A13
67EB311ABEF5AD6FC94F72D829943920B8A5FCC8AEEEF59EB7ED65A5DE8D7AB2
EEBFFFFEB2B498376A5774A997BFFCE5FFEB7FFD2F82FF56FF04395DD9E217F8
708DF00D6F78C3CF7EF633CDAD0D74F044E03C661BFA9627A06C0891CD36ECCB
BBCDBA36FFD62F7BF98BF7DB6F555A6B4F4D8C953D0F0A37B4B263EAE583107A
996D5147931B4AEC0A9BA36C3358E8E0A2DBAF547C41BE5104B193E924EDD66A
B203BACD5636D84A5BCD9A14706D206F35925A5DC398A9CB1B6E686FD12A292B
A89E354B254D47BB5BEBB66BFA7DAAD31A1CDA667860DB7A6338917AAD954C1D
BDE6B3EBC71E5FF3F443BF7D64F5234F3FF3CCBAF189226C5E68D6A459368198
F537ACC03C7B46867A13F6F1D422030D760915CD1FB82A87915C144010983A46
36061C004626396A15D786F56D4BBFAC98FB0CB8C5F49D75EA82DAD720150435
7E941F4DFB44B703A5E8C012A3F5AD5DBD122AC2223CD83F9098897D1A0BDF30
8F70C3E95BDDE3C8238FFCC217BE80803669A55D2B7B6C78F1565A06DA583331
E3CCF51642D07EC2984588334398CBCCB7A1449FE2B382E70C513D833DC23017
14A38B80376143682AF4261E83EB23DD709EF5C06976A9B15914DC45D2113048
8528E4201389B0CEE6323AC5CF6EAFCE2ACA9F81508DC5D2B05FF5AA57490CC9
EFD7C84987CBBF79E08107DC9635CC651EB5E70148812344D12D054526CD88F7
2B71334C87242AFB768C51A698665863433463A5B9E107CA1819ED786FDF12BB
90C0452338F4D8CE4670A086C1609389D74D3FF2918F4813B3EEF9DC7669BC62
8C025B2E9444F3B214E3F82A1A021E344D859E51FFC442C77ED2E3D87D648DE4
519D7AEAA9A79F7E3A17C7B8B153257B452EAFCFB063C2209F69281257DA1814
FD96B7BCE5EB5FFFBA6C594C6FBC61900A21229FB176BFFEFAEB35065D6A7ED4
D720091C3EF8C0FB96389DDBA1DD2FAAFBF49850F7852A390279087ACE66B19E
85DA0AAE79EDB5D75E7AE9A56BD6AC612431708C6D9C569DD52D139D03E64041
E6635441886A2E42E597906662F02EC7DF669B6DF0FBF956DC990D0FD8E10D04
25E9A482CB3A09CC41D96157FE65C90AA961867C971DB7DE6BD5EE7BECB9F3CA
15A39DEE64AF33353C32D869F72A6142836A37F3C9D8F0D6BEB39D884293672C
83C9BA4B56326175EB69A180EB6947724BFFC9D51E68A6C576196CD71BA19EEA
29A66B49AFD928DDCD5C0E719E053D51E8F642BB13A667349F450EB8930F0D0F
6E3D34B46DA33994A749D15638C8F2181E1B9F79E6E975BFFBFDE3BF7BE8D147
1E7D4A27B5D12CC97D93963162B1FCE1C41903111F70D2F0C84C19DC58A81CCF
B422F66711D38A9DD7357E168F6080F44F6A4088E1718598A33054D9965848A6
73894B4314F10A73EB3C177BC5FB9C4F127FD5D8CCE14860950ED93C11F4C0DA
3CB2FB65A087AAF225AB18D692A81A258E16F0E00B0FC85C0146F490D93529FF
1E7BEC21318D6F41D830540573DCD88DD689BE62F1E9AFDAE2AEEB77AE45B783
4643EFA0D45DD4E42E7B0B8E139918076643D52F81F8920F731261ED9C7E0074
664C87CDEDBE2531DB8B69AD3000C96733CB5873268E2622AA278A1B09EB9F50
869AADDB8212556794C7820F8BF34DB4DFB691CC461AEEF691575377C19BFAFD
89279E90ECFE977FF917DC716F5F074E5FF39AD7DC75D75D5E7DE7720C700B0B
B54F479D6B185FF9CA57FEFAAFFF9AAF9B7C515F3CFCF0C3E527F5A55E5CAF12
A3F6E2C21E54025A764105DCAB3A644815D1A42FAFA843294B75229F15372C88
C8B34FA38BF1B3AA1391F9E5F1C9244DD8E40E1B801270369D134847267632DB
DE75B47C46EF531F9F94E5C272B2BFFCE52FC7968DAB2F38264EBBD89B04D525
3D213BC34929E73B488F190A8747CB50695D75CA29A75C77DD75788AA43FB04B
60893226DCAE0CB5D7A028C25C9E6D97531B9CC8A4B920C262B75635A722F683
F7437B092DB7760E37D58679F2C9276DDF23431654C046996AFC9AF3B7BEF5AD
342DC689B74199545447B17D79C00107E8A6DAE47D05E876C5E047A425281C73
24D18B4D38AB80A5FC68A73323ED2B65D46CE52F3960FF7DF6DD73C992E152D4
B593BCD36CD5678A9E10B392274DCA5EBE019B3EC389C7FD60D5CA7DD820525D
1416D5D3A2D351D2D687D37C4ADEB03645A3DED603351B050E4BDA361D9C6AD4
E5CA76F230932685175EAF950A433FF3340B891470A79BB63B69B75DEF664911
721A583A34B0B2D11A92B66F7743AF3B18F2813C6D8E6D9A7AE2F1E71E7AE8F1
877FFFC4DA751B93D028C457B7881FD8148B0FAF2BE5C2DC641C9613AE1E1630
3296CA4942923A56886BB744F3C299D386BBB8394A2C24C33C9F211E582DEACD
BCA04FBC05053CDFC48C95B7AD436D786CD6589449FA211E258A91600EB38508
336B88891ECD10D464CB0322542BF10D11528C6F9497405D9DB51DEE0B7A1A11
6F562922633C03CC595A30DA745F71C51532D2DDB3DDAC8484918DF6DAF2389D
928CAB63B1ADDC6680D72B5FF9CA9FFCE427DA07F0091C7FFCF1E79D77DE6C9A
676E08823B7EF4A31F95C301AA0D494AB9A7734EAF7BDDEB7441DD4546FD6597
5D86BF8814839A202959786233C2C93F13E95D7EF9E5679D751600B1501634FF
FCE73F0F8BBC6089D21DBFF4A52F490021BF686F6E251427956D82BDE4252FB9
FFFEFBD19DE833EEA87F1238C5699062F8BBBFFB3BE22431E7B3F147A84F8B5D
B76720BAC09BE8E0983081C0A6E18E3C3EEA5F7FD5453493B7DF7E3B63735632
C4BCBB51085A7B9D669FEF7DEF7BBFF18D6F98421DEBD2B8770DE9BBDFFDEE21
871C8224B507EC23CA5AD82C251AC9B091CE7628498ABB568A7E413A8D3CCBC5
175F2C6F1B7B910E0DFAEE09279CA09545AFB01CCEC4435A8E8E74AC8F01A08D
98678AAC628E1E2F476C2431697E34DD1DDACEBC22DB72AD9D993E43D52194F3
68E08C9BA9ECB0C30E3213EFBCF34E67647A519B0DBE2EB1B06AD52A792A7D10
87B8A1675C37EF50398F865C9649013738297CE7D2C24221E8AC6A3F8A0DE192
0DAF917ED7D568AF091692701F690B9C3357AC39A0CAE4B0B82F7AD18B34FFFA
C5EC78858D98A4254945A1808B0D984929EA5BADD1252D29E0DDF7D8A5D9940B
AED9CE3B3313EDCE74AD31381BB79F154EF5CA8EE9B199C94C3FEF39A40D083D
EA451D6FC14A553050864E9215741C6922413ADDA8771BF5AC210F582A7D60A6
D1D461EFA541E65AA76C7A98EA4B85FE4DF48B7CDC5A3793486C74B346D64B3B
DDBC5E1BD6BE6BB406421AA6DB79AF33208B6E607074A61D366E987A74F5B30F
3CF8C89A479FDD3C3925152E051C978F7B73B2D94CE7C91CE280B9B803BA219C
2856DF53ED923FD27646E438C1AF05C206256CA9A5A485917E4736C6FDDC8C43
0A51EA90331E97BCC719D92D78C0F93CE07DA85284925A8CFCCD6F7EF30F7EF0
03CA1FB4919009A14A1E99DC3E0E7D237EDD673D7ED8D9DFB7301A0926FDA233
2605492596AB0B7C09574C1B32C73850A2F87F480D92A3F0CAD299DCD9537D45
6AF8DDEF7E373425D8A4D9428C957D2F12B18E4EB8E8252F61DF263B3432C80E
7DDC02CFB748E662B0FD8CFA98A682AA737BB440F031E54861C6756C3062226E
D8B830281D7AE8A1724365044917C61869A68B3CF1969B4F38E24D4D0E85C2AE
1B66B6F5136C4B5CB16D8916E7D4F7D9671F7D4C173CEEB8E3A4C9F4019C5792
AC14C2BADC3E8602DAF845D899B5DF17D7F3BAE5B0D614010D779D498B5EFBDA
D7DE7DF7DDA44BDDC4C20B04AC7A3110169B4717D4F8EDEED0938A100BDB8C79
C060F2998C57D96122AE6F3413D39B567D329C2E99CF1C624E4478336C7402F1
23E410A791F896AFC37D9162320AF7DB6FBF7BEFBD97EA2677EAB567067609F6
3133A991BC70E17F1F47B489CA6920CDAED698B5B8869AE3086288F85CBBA973
DFA1E83BFB714DE78B5FFCE27BEEB9C76920C34F5C0F6DAC1F8014FDF3EAABAF
96A5A2A142E90348A28FF9C8F77509781ED592F9312D7CC9BE633410BE0258B0
200687F9715199AC37C08666CE29EE9BA4BD2CC797ED95048EF2F3972C19DD69
E76D56EDB9C70E3B6ED368A48D7AE865333353DAF3EDFA40CB407B5D1EABA5A4
9AEA24159AD2BE414AD258FF9B97FC68658D58D983A15DE674DB59984893A952
D1E68D52D7D65B72D06B32606AE94C2DEDD41B1A59283AFDA26C0A222B99AA8D
900F66C5CF46567471186C34878BC0552E8119B27CA4515B562F5A320DCFB4EB
4FAC59F79BFB1F910E7EEAC9B5131353ED5EDA8DDAC27A133A4414E686FD7971
F6658C9E71C6196E6D6233D7EA73EFBDF776AEBD56B51ED267004FE8C04A3622
555CE1E9A01A41475FCA0157632C8872F1BEBF1E5B720BCAD5BE1CF07C54172F
3A917BF36B0C1A27B9153A08D0F3AD2F71E3B8261598BAC2F375F98B99037117
81DD77DF9D864A44C690233AC9306C48EEE8AE4E1DC5713C377B7AE31BDFF8BD
EF7DEFF39FFFFCD1471F0D5C054016A52CA627D432BCF39DEFBCEBAEBB740092
AA96D438CCC514928B103C8996B6315508F3A2BBC30ECD3B1264F26EE7D7E3C6
A965C4312D9A87CA57CC9848EA48573EF0C00363B795DD192A963B47D50835F7
AA2E0BEC12C9DCFBEEBB8F3818293D23F8FB7680FB16DB69D3AAEB17421C205A
FB3AC3D0C640D70416AB87C545430BFA467171BD564A86828D4D6D3B081F92AA
174AA8923164730D7DB4363208BC57B521F3910851EADDEDB648EF21CAE3BEC8
C6D63AD4C1D5E24684B1B241F8CA2DFED297BEC459ED96BDFFEC9CF952DE2ACC
B90126C439E1577295F3EB5FFFFA3BEEB883A83EDE1BC45BBAA3A4F611471C71
D34D37B967A503397C17B80394A2BC49D8C3D4D6A1E2C6E2E5A4002F8CEB38DF
498C979035EE20B17AF7000D15A795E6B35632E0C75104A495ECDD638E39464F
A48D8DBB1F17011313A29E27EED950AB1A2D6715D99CFD5A1EEDE31FFFF86597
5D86E99C57CD2BDDB6C85E78288B851C8BBBA87C1947D6C71416E72FD0B24821
A6D17AD7C60DD553248942C43192579C740472C2DC7A3C67823466286C357B10
98177E7FDA28CF6F495C5C74B1CF244297AF58BAFFFEFBEEBAF34E5B6FBDB256
CF3BEDA9F1898D79AF8062142D124A96E6D26828147CA35EC85C696E47A466E1
57989565F2B6D4C1E516CD3ABA4BD10DA95B68E23C9F48C2649AB49B0D89BBA4
5150724CB59A69B391A5F599BA1473232D9DE65E3D2DC3B021CD937A51861486
CA660CCD5653DEA174ED909CEBE94E7BA6AD9DB06C6860EBB4313034B8340DC3
4F3DBDF9D7BF5AFDCBFB1E7CF8F76B366CD834399359CDE4734BC663E2813037
928FFF43EB4C4D66CCC881586303E8BCDC7CF3CDCEEE19F4C341DE65975D64AF
BB7ADE3D58A1BE315ED26D516C75F529600CDF78232D8866F0F016FC2B8E07A4
EB126BE61BF99BBFF99B2F7FF9CB7D6491BE571A7547CDA386637C3E8E5D2DEA
011B738811117BF7FE8C6B312D07DDBAD99131821506BBE2019BAEDA86000B80
290454C4E52808F12D3092B8842B54A656127162B039F2AA40C8E6522F6A3A1B
73AFC455CEFA136164884BF4F3AFFEEAAF6EB9E5161E0131E439610740DA4282
FC924B2E39F5D4535D06133FAF0BDDC0AA58F43B79B6D846612DDEF18E7768F9
89F9104EEF552D9B42048B9095138BF2D8C2701D2AEA84B90A953B182AFE6740
10AE018BD580139CFCFCC217BEA051B170406F646C4991531A6E4A39898756B3
35D39E191E19DD3CBEB95EAB777AE5CA26A15516C9146E8A16BDCC62148BD5CB
D8DF79551A8F4A80B01AA1891B04CA09451EEF01661E2BC1A6A19B8632CFCE9E
E0055E7AE9A5C71F7F3C115A4EB26E21D572D6596785A8A29A828A0F7CE003D7
5E7BADF13EDE0F962FBDAACFB4557BDFC977FAC30CD28677F2B0AE9B0C55D14E
9C24D62F279D74D215575C61E38CF385ED5B8B5AE1DA9B67CB9D73CE39B4CD9E
6FB3A7D5CB3420360AC9441866E5E89743768845FF3566D8D7F02EBFFCF2D34F
3F3DAF5A086B4274D9238F3C52160C27880DC68664990C66D668CF3CF34C9B35
1855B2AE08B69F76DA693A9B042AD9BD08166C350E6C9CA5EA1377C9DCC24DDC
62D24CE5E216048FC56316A9DF5CEAB1D90A7BEEB5D3FEFBEDBD7CC9D2254B8B
160B9D1929D44E591054EB961CCF2CBA29440AA992CD2AE0746E837AA9CB62DF
74F3AC27358A7FACFFEF84A25F513709F22EA66AA926B6333850B8DAF57A22D5
DB6C4D173E71AD5936696897D9E2026E5DB629AE170D91928290324D9A997CE1
C12215D60B0509977441ABB964A0359AD6970D0C2EA9A74B376CE8FDFEA1277F
7ECFFDF7DE73DFA38FAEE98506830FA50B115BA861214725AF18055CEC2B3D4A
CD8B959F112AE4476A15DB33E29D3971236DBDF3FEF7BFFF5BDFFA16A56E8BC9
7F5B9C943C1C76D861DFFEF6B7A5BFB914023F8E34C43195D821EE434B255567
1A0774D9C00466CC17D9ABDAA27046D8A8A6E537ECB18FAB91FD807C5B5401C7
21F550B93BC45169D24E64DC42C40A18FE011498A506071207C2D613BE233539
5A36B30D78494CF11A0751FB5EB5B9FDCC5DEE196BD658B1F5454DEDF6412841
6ECFF5B89E77090E1D78576BE02E38EB1697183AF98AB48D3942190FE66152B6
CB350489D0313499A14ABD2FF8BC86B341E3C5802595CE3EFB6C8B3FE61FFFCC
C4A27D3AD80CA54E0AFA824945E414E6DA613E69C6473072D0737A6A1B4FACE3
BEFBEEFBEB5FFF3A96FE85180AB3DD7FDBA5DE4D4BBBB870DF8706018516925D
3F4B85AD7B4D4D4C02F6369C1EB1A88B4815693BEDBDF7DE0F3EF8203BCDB238
4647FBA0862A9DEC5E9021C2CFC7EDADA84A74EB341934E46B319E5045B4E60C
25C93011CBBEE3C38B2CB2B6BA4645BA2854B436EC6A17BD70F839BDEEF8E49C
19F99A98D72C4E0478454C146AC18114B8F0C20BB54338F6A41234D5EF79CF7B
BEF8C52F9AE2C0CAC002A8EFD46821744DDDC84E2A273A2E7F4477E6552D835E
9FFEF4A74F3EF964049C73C0C60D30E15413C5D290217140A04FEA554CF29A4F
4921400F6C12A2EEA4D5C35C64BB97431FB361AA5F3826E486E7E32E59B8B97D
1A8ADA9D822A39C8CF2BFCD2E52B9AABF6DEE305BBEDB874647464B4A8D993BE
940A05F4DC0B1D9202B3DBBED4BE45E8A2963A9F1D2BE0AC5668DF424C974D92
3AED5E67A674E0922C95D39CC8E96CD78B52E07CA0A5C9A9359AA1DE986EB43A
052C2BD5D8925A3213D2190DB0381D52C0792D49079274A856FC6C165F69D55B
03DA7879A7F8B30CD325ADE668ADB9B4D51C09F9F0E64DE1E1D56B7FF9CBDFDE
7BCF2F57AF7E74FDA66954057AD7BEEF620A384666DD70C30DC71D775C885023
218AF1A6F39A815A62C4925CDF9200A167DA169AF1C403D0F0F6DB6FBF5FFDEA
570EF358F76711E5DC620AD858071CC850516730543639D252EFC37E63BFCE1D
2338747CD86115D7D68232E38BCF9F9AC51ECC11A750B134EB25974E87163229
E0246862FBB86EF7861AC08BB29B627B1F92FA2F7DE94B7A9F5E0B316A31AE26
5C8CD3D8E3A466836221BF6F3C5EA888708951B34B1C58B389101F54BE8BACE7
883AC8801AB6780D113A94F526EE874386B0463F8579ECDECC2D4EB05585BEA5
6D77F0C107DF78E38D0B3EAFF7BA7724292E2A5588AB1B816230CB7C1D4C920C
AD66AE09838131D91CE40C95852819A72BFFF7FFFEDF7FF4A31FB909AB54A07C
324D8B94072D725D3360C242C090FAA59114C9F29D641D3FB27AB834D78AA5E9
761A65BA8146DC1AB626EAE28B2F968B36335534BD27149C57748956AE0421F1
B9016EC4681D36BDF6A73E60524FF42871450C41C73099843FFFF33FFFFEF7BF
CF824AB1E98BCC83AE2347F3B2CB2E0B51838D98C42A9E5E2795E5377FE6339F
81E28E3DA021E99A471C71C40F7EF003DEB76DC705ED50DAD5832FDE5D9F356C
4CEC34E29F8A7346FA79DD75D749089AE48B3876ECA3E88B482B543BCF98CD23
F0638ADC00EA6FFEE66F3439B3818AAA2497F0B2F1D8F807842229F39561A43F
E914E8D6BAA029EF938AA28FAF1891CEF462A01B19809F71EEB9E77EEA539FA2
C0DD7965F78A064E88E6662609549070B5C4D41830EE6113CB16624742E584E7
7B55A5B5B4D1CBB09632E9BFED77D86AAF557B6CBBCDF2E181C152B185AC5B28
CFA49C463C601E870385986AB49AB102B600E99585A38550EA163FBBEDAA8972
D11E49DBB857AB678D7A6F70200CB4A47DD38166566BC8036E4B01D7EBCD5AD0
399D09C98CBE4408A6E0760ECD5A3A9814ED089BB5A6F484BE584BEB45D30529
E66663B45E1BAC4907A783722B368FE54F3E35FEC0038FFDE7BDF7FFF6778F3C
F5D486580187B9AC2C0BCA61DB4CEE04C3E18A63A8B1B98319A465C20D407158
025BDF6FC1FD0D1108376E241CF7100B91E36B70D67C051CE6823DED70BEE635
AFF9C52F7E81C18DC4B3611A47D4F88A3DCF50FA7826143AFFFCF33FF2918FC4
E49236F7B7A48093A841AC1FE0C52F7EB106C4F401018D23E09665065F305637
C1A508C1083714ED8E3BEE28D1F6E10F7F78F9F2E52C4936971A8913BEE0380D
3EC25441EB80E9F5E009836415F1135A30A9F0D8183B0E0EC4103BBF895B8CE4
8A39997DD938CF8F24C295212EAA3F49709F72CA29946C33C8924276D29948CC
05B6DA7C0EE7BE0D670E1ADA3BC6FC5C69D55C5ACB6F90DE822F4427211AB920
F7DF7FBFAB54F117E316310E2AEAA7EC837BEEB9C7FD0C928A8B7441AB96FD60
C8DBF4D4D4562BB77AFDEB5FFFA33B7F0C3196ACF1A5CB96613FCA1F4CCBB3C4
778BD8516736AC9254DD41108BA03F6806AC0F489F7DE52B5FA1E80BD54B4603
AC69A8A2404945A212B33118E489E0A06419256DD26F8C15735FD08822540161
70BC217268AC89E9ACACC727B368AB8E7E506CF5D8E974B04183E7D4E8C3871E
7AE86DB7DD8667E9722328352CA1D8515851BA1459613379698AF445DC561F58
13537BEBC62377C527C15E3DA92CE68B2EBA88241CD207801E413927BA6CDAA7
5163A250A2253460C24EC4C908A7517F4C08D1090219FA175C7081CF1AA4FFB1
FD0AC40F2A53EC33EEEBDCBC3EF3894F7C42FE37910C8A831D15C00336DB6232
AFF2B04F7053CE5BCAA522BE3B3ADADC65D7ED77DD6DC7ADB75ADE2C82D3A57B
5769D20200DC9946FEBAF24AB72E721665B16CAC8099F64ED629132EBD52FB76
668F5E372FB3CEF2BEE5EF1635480383B5A181BAF4A82C9C7A530E71A1801B35
29D4823E3A84E95E57A3E875678D06E9CF963C60D900A13E5506CF535900CDC6
60B335D2A88D14AA376D4A4FB73B8DC989FAFA8DBDD5ABD7DE73EF830FFCE6A1
279ED8E0867DF1617176ACCF7D0C55E021E65441385489F0596BC6BEA905085F
89AB4343D4679A93B8989E62F36711FD6A12D1247B33C7699DC514B0DFF14ED6
3F6DFFC50D462DDC9208486FDF5AE6A61E0744373B969A6607779DD59ABDDD62
823EF6D66365C3ECC4052A140DF74166B035885292AD314617BD0BBE3C946107
780A99357374C8427FF0C1076912D7D73FD82F0938F7634707C7B68F9FD96939
27DB30400C8421229D478482AF7DED6BEFBCF34EC99D279E7802F10D3914671E
88811140B69E6246EBB83097C79458B9E28A2B9C26BCFEFAEB4F38E104DB7AB4
2FC5698BDB30C4AFB8A6451305C4C62BCDA262784ACCC5256B7D0B1D5B6A1A9E
6E97542D2AFB5265CECC994DC5EB89848F0000FFFF4944415487041F51F343EF
5E7A42BB2134183AA28E542895443F058DF08E3B17D1E30292315C54CD4AB3D5
CA885FA15D483097EE4211F9C883FD54B70371A50A19443DC8E9A79F7EF5D557
BB76DCC7DE3BCAE61489865AD57E20CC2B28FCDCE73EA7457119CCBEFBEEBB7A
F56A021BDA848443E172D11E9047F89DEF7C07372E8F0A816221DEE760E9A1F5
2C68883800E3B30D5619DDA6E93DFAE8A3A58AF8625EB22752F5EF8B842A9A8D
8168143AE9155DC7ECE5E62707E986216873A44FFB5AF8BA1A1B91AA7900EBA4
CF9C7CF2C9DACF460698DDDADE86FE79E08107DE7BEFBD717FE83EAB911C04D2
96A34A44C752DBF97E0EACDE212C8FB1054A83EA09F764A37A8438C117BEF085
638F3D362D3BD5507605EF470C908951B2FE2544152CE58E628D7A491A566E35
BCEB6E3B6CBBEDD65BAD5C2697B2E86A5FF4B52F7836B2D2DB1E9F1AC7786524
7AE1FD03A0ABCDED915708875E8F8BA07D8B5E0E95E75D04E4EA4919764E0606
1B0312A2CD5AA33E536BC8B49A6E15E8EBB20638E92461BA142DDD2CAFD87FA5
9D8BA87733AF4B026B4592C6406B6870C9C0E092667D695200B5EA59AE496B4C
779A93138D354F8CDD73CF43F7FFEAB70F3FFC2C4910832EDD35C0E22B9E3737
190B152E354459BCF82038E9A32DA155931C984FCCC7EF768BC3E25530D656A1
B2006208BD071CA26CDA820A3889EA82FAC2D47E52F62D3AAB0F14154F453C30
AA6DE9164AB885393149C69672C0B6C7ED44E6257BB3DE77C360971839E4EB50
BED90A21AD3EE38C33E402B2ED2CD36365293F586AC01EAA697A62376BFEEBC8
238F949A84549697A48C6E27BFC42334651AE5CBC625E9401E7EF8E15FFCE217
FD08CE5121BC982CB41D38784665827EECB82C6AC0871081805E1B11FE5B824B
A6D963F65D40E9280D4E4CDC8C61C1AD26F9FBC637BEF1F6DB6FB7C962342964
BF44ECE7B795EEBB66565149EBF79B6EBA493ACC72D9E4357D9B1545AB8772E0
B1CF24345BB87D5FC7095974397DFF1F67EF01655955668F9F1B5EAAD4D589A6
9BD004414006C3B89419E35F19C338328A230C82840583E42059403292115092
C8888220BA049DE510465D66C79FC240C390A1BBE986066CECAEEE4A2FDDFBDF
E7EC77777FF5AA5E09F356AF5E55AFDEBBF7DC13BEB8BFFDE5AA67F552C3131C
60EB4009C003C2B413148D315C76D965A79E7A6ADECED4D79257D63977A62850
BC959613987DE325026423BB3000AA072854AC0569C55844C459A2BBA9D98B0D
C1850B8E2FC603C52CEE7E4A2B370DB5EE020808B720FA918E970B645B105242
48081F2E60A3D84E702FEC58061828BC601F5C7FFDF5ECACC7A849629A6D2BCC
C594819A31730333B8A718959A5649D3485489B188E16BCC1E762CD96334B6AD
B6DAEAF9E79FA7794A6354C5277847B0648BEBC65E65FB704C0B6B9CA282DF40
42934163E674A3A23BA40BD6361E8788EBBC2808B436870B06E5673FFBD9DB6F
BF5DDE98E644E60E81879A25B9B97981409C511EB63B94F8795A8A162F59B8CD
B65B0C0C54E70ECFF1EA370B0E6B3BF334CC210EB1A1600762B89B48755A0656
013B9136B850C3E98DA13AB46FAB1DAA3F3C22DABBB1E1ECC4255F6A0C7FBA1C
62DA2D1F822E7B3A0EEF82C72E8A5B91AB43F562FB7B4475141C03CFF69F462E
69BBF55E01A71EEAD8DF3F54EB9B5F2E0D2671D947AAE34A3B2B375A7D8D66DF
9A971B0FFDCFB38F3CF2D4938FAF52EB141AAC2CB624FDAA452A71EAC48A2FC5
638B48ADFFC6009BCE0BA5220B612C7B12535794CC76BDA6CBC3AEB0AB829776
780AE8F652C0F2ECF599B8286A256135A34A346419FEE9350F587D1C19E68989
299307A88A062662A8417A5A1622167185C217F94E5E3064E107D195D1AEB1BC
74E24BE24574203DD55960F16563512A787ABD3CDE1FFAD087EEBBEFBEABAEBA
EAE4934FA601DE6B909CA324D0E2B376DEC23E997A61A457454DCE943A308468
2FF8B6B7BD8D989A830E3AE89E7BEEC1D79F7EFA693E146E0193FF2B5FF90ACD
73153B7213281C4120185BD9C818D46662C212231457A5C4BA30A5D3B1B27A29
DDCB698104C4F55500C0CC2E91E718959A90778912ED5D7C92B200B39115BCF9
D4347A3A15DD2A25ACDA68C20B77DB6DB765CB9689DC43C85B3533894391B4C2
213C1E38F8DE58094A0E1AB516CE210F3C1D623A67F5894935A2E7B9551886C7
5552553B10BB1C9752B8F23DEF79CF5E7BEDF5A52F7D292FDAC4DA0323EC02B1
BB7841CAC3EBBDFBEEBB6D55B72C56F97F7C934805C202669C675C41215FEC3A
6A3B8966BC78351508B8C281C0B7F05D1ACBF816E32E14437FF3377FF3C4134F
C8AE77455C447E3C8F1EE3F396658C0103296CEB7F5B2638E960053C68986278
4C5530814AA1A9224005902353D5433A6BFAC4071C70C077BFFB5DF53996E0B3
6969C60F692ED3C23BE9A493E06473F5594F812B63CE993E27F710C1A1587A0A
8A1D76D801A60655859A4EB2B935B722119736F8EF7A77C8CE0B4C56C19F1557
AAE976DB6FB9ED765B97CB715FAD0A05DC6AFB6C029C572A608C672CB0E651EC
548B977F8A690A98B7C8F01BD4AD179C4DB632843F4D03B813B04E830E0EAF10
2DC2144D24A5895292E3F7528C6BC2356F64793D8EF04396C6594212107F9BA4
99ADC3D5E2523008FAE7F4F7CDAB56E6C46935A899BE28AE35B2FE567BF09557
DB0F3EF8FCC30F3FF9F8632FC06F539D3ACD5FAE882DEF894DCB0D4939F5F553
E2C615405D5724D7F1311ECC134F3C91DFB5DD00199F13D546574EB74B016B32
2D8A65C6D5ECAA69ECF28073038496A120F4923445AA58DDD4FD63B7B4D41FCE
1D01A48423B00411D78438BAF2CA2B3B70A25E0F6613154A4A47454F0CCBEDC0
7113A549F5A3500025D7D5575F7DE9A597E25470B26811904A82D160F523B34C
C5B6275DAF71B2225913474E259E43C5BD55948C55141EC4157C49ACD5A1BEE1
C0E424A9E79A2C410C89993645C38436A2374CE798F28E2040D57E1D77DC7137
DD741303989017F83CAB235434C94D8311EEB2CB2EBFF9CD6F7AAD0BC600D3FE
85175EA081CF740006C07C3655207EC03C74C5B1ED1C76111A40CCDD78E38D6A
18D72E78A125D06545D1D797C487B6D87DF7DDEFBFFF7EAC1D1D419AA284E6B2
0F1D16911938095C170652AE5420B720DBF0E471D0BBFEFA41FE4AE936263B65
3074EE1574B5A15D4A25D5ECCAACE14EE06C58A799510A5724861917C2078857
CC035C16FA5B6109DA588AE860EDD88289A837EC1345B6BBC256CE10A7C827A0
7B07FF0F3E1F8D1561CA7476F83373311815B728658D5A3513BAA59BD24217DB
8C4232471C71C477BEF31DE6C299E3202E89A5C93C08ACF9C94D8F0A49AEB8E8
E748839B24C69C4FECC373CE3907A2848E11574D454454ED4C1C7054AEA81224
3B15A3CAC4E038E3BBDBF6155D104586D069D0D442550D9B8971F2F919622F6C
F093E757CD43590069C9FDA7BFE269ACC2954AA95E272628E91FA8BE79A76DB7
7FD3D6A1236F4A05EC796A030ADA050132112C579AE68CC311A7520E2774BA02
8ED8A4D9B57338BFCD7A1EE0D67E93E71D91DB016E79E55B0EF8EC56948C2729
147056F28E719CA42D1CFDDC4D625430868362F6574DA35008148F4531B4425A
AE55FB6A831093B5EA7029AD796EEB725F9CF6B7F3C16636E7D53FE70F3EF8DC
430F79058C17513ED4880C7A51564F57C00AFE8BD0948EA38D3CD356CB0AD658
AA58EE55463264D34B074BC6F692FF829ED801D86694F294E89FF40261D94CAB
42EEE412C6518520853F76EFBDF7F2E0CB8254B658DB46B887F3CF3F1F12153A
1BE7340FD47E5055382FA79C720AD331F2DA677E300294980363DC89428A7106
91C6F1C3424467450F60C91442695C119F3CF4D0436FBBED369E6A8A331E3365
191938627F3711ECD9A24357340090AC71A64B0FB3D19C119ABD78E08B2FBE98
E48EE4ACB071480C5BA553CAFA08C2CA5FE9C6E5A1AA52554C94447C7C3147B2
AF302EBBEFBEFBDE79E79D4CD06248B82F3C51C61FC89FF2F9CF7F1ECB6355A3
0D49B9229DACFC9CE0ACB3184C8C9AB210799B6DB68116FFDDEF7E8745948767
7324B6468B815F6EE53DF7DCF3B1C71E83E7A4ACB9B50DBBB02A5C1D883C7653
56C32595D0F10334C22C588FFD7F7035923DB9A2F992C23E5897786AAF2D76BD
C64240E5431B25531B705A8A738A69CBD8ACFC3123A51C9838405CC11342154B
9A4357D8ECB6F4222ADA02E6D3FA86BA2218631745CE9C64317F509999AA18E5
6BCE526EA7A2F32BAEB8E2CC33CF4C8AC68262AC94F81374455A8DF07555E83A
C3DB6CED3067582453D35458D3481019ABC31558864D40B352D8081511E06344
02AA03043E73C619675C78E1853CA7AAF79030D159EE2A7DD1F02828E0169F7C
F2C9F95FEB96D6EB9517043E2A6CFB2BA91F97B3DB101EA49D35FEF69D6FDD7A
E962E83D887A3601F46A29A46F5DD818CDA2D9A5829F69A17AB9919465EF1CFC
8E10E7A16B17B1884D004FA855FDEF1F39F5A1DA145F8D9B49DC86F64DCB6D28
5D0FB3F271E6D81347A7AE845FC37DA21256D995CA79B556F10AB836A7521A4E
E25A5CEB4B925252AAE2A88D4F9647D6458F3FBEE6C1079F78E2F1E54F3DF9DC
FA751BEBAD1001EDB06DC46452EFDA45849ACEA8D87ABDACE274453F531E7949
5789771E5295F8CBE462D18458E5E3A23FB73D35BC0285CF4E3BEDF4F4D34F77
251DA2A2265B45BDC2CCDB0A58B1DB3295C6DA1F8546E4F9C8E0E01491CBC5C6
78E82C29033B9B07CC4F9F7AEAA938F0A4BB724613B8A20C9436CB35D75C033D
FDB39FFD8CA394EBCCEBCB816658CC19A78AE787E3566D32AE0C310A91AA96BA
AAAFCA4D233F2EB9181F25E2216E48F98D6FC1006164C39A458A69C07EC74956
E8CC19C89CC422335B626184D0DF72CB2D1F7EF8615C8A8E1D9C0C324E88DF84
7C8132149C019B1C7BECB1975D7619F5041988BA6EAAAD4362C22EEEEF5EEBC5
C008BD46523BB1107E7A4D24D79E32AEAB1CD3064275C66CF3DA681A58940696
44BFB20CAAFDC514B1B72EE39604F51C70C00137DD741333E5F895AE8C7547A8
5939783A4C18C0D9679F7DEEB9E7B2D721A173160A679D1EC6DEA9B474D4B9C7
302DA4D4B18C168AAA75B5639266926D64AD78AB7D0503A16BC83682FC93FAC6
EB9AD2BB24DFA61B4DA3B8570E322E38D8D957839B3F2EEA92896FC24E639BAF
AC20C27445DA09BF1E77DC71175C7081EC92AEAE9D6CBDC72593436C7BCF11A6
8EBFC2B4276F396E8415C45F89F9E4A6C53BF80C9BE1B8D0D69A2E02BD79DA82
38A7102674084581A70C972BEC5159DB9A7F1BE2867DF9D4534F29D3FC5725FE
F4F99440B759B39E843F2E8F3A53D117C5D9DBDEBEEBD65B6F51AE40DBE57151
96D60AC829D7F653D1EA30B26CE24292093BA3028E9D363FBF52A0C7238180D4
772F346F70BE1B84F7925DDBB74B82022EB592D4F9BE4995B8564DFAFAD25A25
A956D24AEA0DA6BC04DD10A525EFCA57AB7D95D2509AF44301C31B88BD02EECB
F3DA44BDB27143FAC4136BFEE77F9E7AF491E7A08047D68F36825D14777A0E3A
3655B478F5E9442EAF47013B634BE501FB499D9A9946E00C910A01A0168791E9
7DC7571741108764E3409801EC1378B1575E79E58CB961D5AA5188E11D084686
F4D42282B12E0C832282F526A441647A98993B5E99F160D6B32867473C328D30
D9BE3D053A9F19DAE5BAEBAEC398C8484285442A5A4D04E16A32575924A346EB
3CE19169F2D305F0B160041B6423A65794E5B4F42FBAE8A2D34F3F5DD4A0D329
17484AC089A018D2A8F0754A3A3E8832E4928C5D3FE0F5F77FFFF750B11061AA
6C911B27CC27E78A15D63C7552F074B37841CA650C9866110377F65E56F1B3DB
233EA0DC03A3DF9679D5BEF8BCAAE875460552EA3162494DC36797C148354C4F
85683DAA015B45CD9FADCAE150590C83B98D42FB5581B30434B0E74D55B349D1
F4D7BAC57C64C651B1C437DE78236B7C19DC86B83FE18413AEBAEA2A4A497C18
EFF0A1B82EB8177EC5DDE118C141944FC9C7A4D58CFBEEB3CF3EBFFFFDEFE1BA
110C4C8C1E9BC23208A638BC458ED83CFD8C60AB7C2AEC59B9288B43E10A72E9
5983C1988A9AF8C238989EB3E70B3A8F65396C2D60099F31D5B06B61F8520C31
A74307423DBBF0A4745889CEA371439882B53994F8A7C14E09A8201BA7E5B4D3
4EBBF8E28B252548E9EC02A93864023E79E9A59732CE869B424261902C88E2B9
23FB2963CBB4DE043890387605D6C119774775C69662FA231FF9C86F7EF31B15
9BBDFE97258EB0B6C82C840F012F880F972BD5D25B76DD71CB2D1757AA89CB1B
7469BDD86D8522D72C68CAB443D42335CCEB649DDE47B1906E3CF569AC33A57A
0D3392885F57196E16E5AD70B55694377DD8396DC21448D276C9D363C5FD7DA5
FEFED2405FDA57F3B9E7323473B9E919A403922BF595C155DF00D1553CAD659A
96CA83B9C33CF7E1303DF3CC9F973DF2CC430F3EF7CCD3CB376E18B70AD84A1B
817369EE3B13B17F3D0A189F5107F4CCB46C577F3C0825212805C4236685FCF9
8CDF709FAB23AA2B626984E9082144C48CA4B1CDFADB3032D40A3ED005F8C245
6056B2EEE0DA6BAF8542B4581099117230F42DBEC9334ECDCDCDAF06A3DCF63D
15307116ACA975C1BFA4918E9FF7DA6BAFBBEFBE3B299A8A90B41D7284B12915
C061D6C84CE48A1E7354811CA8D5BBBA2F035CCCCCB1570CEE2E5E3A5C1CE215
1EA45C7B86BBA9F2093FDB7DF7DD7FF18B5FC006A7514FA8886D2343594F34CA
D7BFFE750814F5FD982E58BB90F41C09713782A7297825B75E2D22D4270A9B86
CC4D144CE4CA50155357E20D2FF81970F88E3CF2C8AF7EF5AB7022B12DC8AF96
4F03D96AD88A9970A26415321F8335C215F03E330B5C3B28AA3BEEB8E3F9E79F
E7386121DE79E79D828CD2466306349ED61756FBB8647A4DBB6027B1C912EB88
5C40FCC2E9CC4D87577B9219F6107B8E6DCFC7C864A9C80AB3992BD6547E36C3
A41A4C6ABA04D2D5B6D53E74FE64C05A46560B1EC6E05D30A7B815B9572DA6C3
CD648830C6887910848A794AE2380883C2786052E0FDAE8E2E2E5857B294677C
61A5A0F6B85BA04A59428D9B5234E0FA37DF7CF3F1C71FCFAD85FF69B769F732
94424814B3DAC4FCD36A61B760F6B771C1F0C2721C7DF4D10A81587A1C39F45A
05314CB98228062B45FBD815AC73626368873E921EA6140C5622DD1854B34B49
8CBA8D4F2A07CF420C5622911EC1F58E0CF57A7124B4D119399FB1F59E3D5F85
D68FE60C0F6EB7DDD2C54B16546BE5766B2C2DBC586AC9243C41522E09D42635
EC4CA3787AC09B147014AE1077146D71DB6C93508A78FA3AEA3976C134C4CCB5
27A2BC1E258DC4F74A8AD2CA68B51CF7F597A083FB6AA5FE5AB9160E72A9E2D2
524CE110B924CF4A79967A773609FAB7D2DF7635E88BC989CAF2E75F7BF4B1E7
1FFCD3F2E79E5D390E17A005EBA15B014BE3AAC46316828B5EF3C97D65D98893
691D06F7DE7B6F18582C2723C5B733208FAC607CE287C9A7A61D6BEBFD6C97EB
AE531C15E4AC743378F1254B964073E1B95883E042C00C020A62993EE7273FF9
C97BEFBD97FA554025CA011E28712A2887A8CA468228A95E670B414B69C12525
DD3F6D46D26530892B4D664F0EA52A2D5C7ACC4A7173F47A720BA2E3AF975C72
C949279DE40AB78C40535E87271C1301478D9C8E0A0564861E96F5FE621493D5
EC8CB1C360028D6EFDC9CD5443A20A60B152501BB1A6908415A42DECA2D8E6DD
F574743B3093048512E44C1A67ABD8A480C9F32C0C2D864144C02C1BDA8A758B
99E2EAD86836FD542D04660CE3C160A0350F39E4903FFCE10FDC1FBA38659F9B
49F168895DD1860C7BE65FFEE55FEEBAEB2E8836DA5B14FA4C4E73C559DA2B37
8B66ACE09110DFF82B51E2D4A3F492C588C2D205C180F175F557E61EBBE9A69B
A08D0809A4B2A1138C17F70C968F8397EB8FFD864FAA208DF6229120B23BA717
F56A1E1855866EE01E608CB70BAFA16038C30C9C37DC8295A9987FF8B8471D75
54AF25162B055F4C6148B22B3C43C78209F256D17247CCA9B466E8FDB3C588E8
A67959EC93C58B173FF6D863E27577A6AA84470C573BE79C73CE3AEB2C1C4F7C
1DDB86A7158F4F3E326E42C12DF3A24E9A616D7568E020F17925C22DC3AB3309
2F65F1D94CC585E22E6C27580930C75939EDDEC88BF3C0834C1F8310EB5E06AE
F59936DB6C01B4EF8285C3D51AD458BD14274CECC53C1141956646AC76210666
0C41072A2B267BF943577C251429394E4B08C9B83498A7AD766B3CCBEB49EC15
7092E695EA78090AB81AC303AE5593FE5A0527CFA3B4FA535A9F30147DD38656
D46EF978B2AF4D2A95A180E1DBB7DBD5C97ADFAA17363CF9C4F23FFE69E5F3CF
BD3039D16CB4B3762B8FD344989EAEA23551F4BC21052C9808251B6429118824
7DC3BEC2BAC06AA73A548286A7801907E209700552EB33B8F5C31FFE105B0B02
0DFFCBA456EBC32E372C2A42177C0A3A75707BB0A3F0311E673A5A5C2CDC9AED
B1F915D8C12B57AEA4E025BC1937651586D0AF4A3D1059429AB0B7BFFDED8F3C
F208A5714F054CAE1F86ADF6DD775FF84934783923906EF0CC6456BCF9CD6FC6
C85475AAA26176C8A151CC2998DE38C2194B0463BDE5965B0E3BEC30351256D3
1BE17148AA40DF88759F8C24F38EEDA227810041E24C60B68FA2840684AA1559
14A4D362E7A1AB305C4CD14AEE32399F16BDEBAD05C7F5E6FFF8E275D75D77CC
31C7D07181C8C0FB7088B59CD61C8B8A56B55069584B71537771844D3DA2B94D
8468245D74DCCE6802D662624D2D70117FA59A57F0B62B4DD02592F00ED301CC
AD62CB9E76DA69A79F7EBA33754A90E96421E58D0480A40D284DCF318BB18833
4CFD4A8389FCDEB6E33DC3A12A54253B92748033016149070645D9E85031D5AF
7DED6B9C64268FB5D5690188324270AAE9A299A82EFCF0894F7CE281071E80A5
B56CD932574079390FD8BAB43CB4D9E4794364E0465D8970FB6268EEC20B2F3C
E38C33D8031C8FCC325F068AA5B12C0928BF4BDB8B55D1DC420CC9F000CA5EC4
35B91CCC258B539AE430B224E895E26A2FBFFCB2B5EAF068575C71050C08E1C6
F945380DD0D6942716FDC727B21805B151DA683FBD1C91C2524A60BA20160866
C903F3CCFFC103A6B8C00008B3A7A1F6D714B0FF6FCB2D97CC9D37343C175B14
276E0C0A98C19224246EA080FD87A24D5FEC3AE00A414B07D3F58D84B44A7447
BB1932FAC19D5F3CE5653B8714CCEA2E6FB8A89E96DB699C95AB93A534106675
FEC14BF7CDC84B55F251C3F24E5A4D8862AF56FDF5E2403D5BAEB55DB5D5ACC0
DC7DE9A5D1279F5CF1E043AB963FBF4A0A384AE230F918D51490113B5BDB2EF4
EE75E78055AEC333A54EDB165A9B17CCF33631DCE5E7484ABFED6D6F7BF8E187
9DA1FA5749AAFA31C850906AE4AF18C6CE3BEF8CAF2F5DBA941DA369F72B01CA
17B18414CE8A21B9A98DBABB8A3F597AA0C724333C03C3F9EC4C587C543C3FB3
56B23109A412A6372DFA49D95DC5733EBD47A1966D3A5BBA5D421ADA510146EF
AAF88C0DD7B6AA5489818244C0C1C6F0247D14706F170D319833A70BC2FE7D6E
D6D013135D2C9CE08269BA313904E58A1B48EE32C3E39807E85A667345EEA19E
073035BEF18D6F741D54DE9444489FFCE427EFBBEF3E7AE1EA5CD46B9CCE885D
C566293A095E93CBA548299322F830D4DE934F3EC9081573A5CAFBA6D37A35DA
9BDAE02DDD5C9677E3F1B935F120FBEDB71FCC353B6FD6A4650A87641DCE20CC
D91C82BB85C632E793A6860BF103526E71CCAC55E55C6154D809045B91A19A86
2A5D436E9EEDB7DF9E4568CB972FC79F6053DE7EFBEDAB57AFD613D9A202456B
34D5D62E71C11F251393727E0C4FF13A33F606507C5505C1B3882D4E3531562E
448985448356860D1105EADD3C5449E16062C2F126BD467195E0BB6454E0396A
9BB6924C48F35739A9A2E114A1988DDECB98D63167761F1F238136D533AB9F59
C59B17F4B40CBE61F21954944ECA8BF66B6E5AEB7567FACCE811384EA2EDFEAA
C4EF9A4F5B21D3B59AD35FF45A6910BCE94DDBF4F55786E64001A71313EBCB64
714B532294635E70266E4B5704576650C02E2FDE0F9F89A5C32CFD72186DC816
E759EC5532DEF139E0461C3592520B0F54ABB5E0FE54AB71AD12552B69B552EA
0BC41D5119735E4E13C881A8516F43AD84798E2A4916A5495AAA6579DA6855E1
22AD7969ECE9675E78F891D52B96AFEE28E0761E75687D9D1E85E7144B8FFD86
45A14C7B432168EE2E3653D12E2234819A825723AE05CB7DD555579D75D6598C
F110E14F038E8B628BE079AC2064F0496287B9FF45FEDAB5E5B8EBDEF9CE77C2
31C590E0265D7BEDB5F8C0A9A79E7AEBADB7424E72A50811B02DB65C30E83124
5C967C93F875BBEDB6832C65E44C9604358E9503344FA3D9CFBC1A21E067F622
A68083E28192B755A771D167869285E609D3C672BC9857B68EEF74EF8A5B997A
82D12706CA9CE92EEC0AD7810F403F9B3FE745E104F3D0620A7545384B2008D9
47B65ADC9E37FE40CB9D76136683D1665912B6156B6C9AC6D85831DD29BA14DC
64F800BCE1030E3840C5B8BA9DF246AE2064E8EA69D5CB42E7DCDA3A3657A810
05E139B1125E342D717D167DB19F3C7933700571BEA8D1AFC2E3769CEC384980
BAE536890B82088C8A05C1A472B434295DB5984C2ED08967F08781474D26558B
E47217E44DDA1D627A63784D5F0BA21E080B38E8A083EEBEFB6E0E492B4EDC04
B7596E180652D3ECBD2B17CE97C2CBBBEDB61B940A86AA060CDCAE74E8717D9C
F34F7FFAD3175D7411F715A7222B7A45F7E29CC98BCE48127FB89A38B6989765
CB61D5DF738665EDE116C40190FF4FD34571661D5CEE1FABD284D8A45B10179C
7162C7141652E61AEE75C411475C7CF1C5F81873CF32D7B88EF8FCE5975F7ECA
29A7C40539972D82E046A5BDA58A8E8F7DEC633FFBD9CFF02B659F5C8D59C053
B30837C5B7C53234638AA178C52A56D965971D2BD57460B03A5D01FBCF854FB7
0B5564B34B6EAA073C15841559056C9C60271DCCB83415701C95FCFB1E81DD74
51530A78A01F2E515E2EB94A09BB3DAFB0FE384D5D292FA5F052CA591B8675B3
3ED96903552DE554C098867A0B1332F0F29AB1679F59F5D8132F4B0187D60E1C
8FFFCF1544FA8C482D58B08065816F54015314FCEBBFFEEB3DF7DC63175A721E
173FFDF4D3AFB9E61A02FB79966DE4CCDAF154E4D812F822C4A6B6B7F66A97D3
EC0A00AF12043A5F62A526591BEE0521491096ED0183CFB33A239F4AF1C13ED9
7A522A5A215EF1144CFFF1913B2D3C9965518E9377D20347450D00B1456E6AB4
212FEA5661F062405C155C1033B2CF3EFB5C70C10551C08EF3A96C644C9512CE
B01AB1225B6E4D6ED8492C639F642B737E046D61008466D028EBB5F0100D984D
85A621231832EDF579B159611878A2EF7DEF7BA4DB9EF1F34A5FB12302F6C1AE
BBEE0A4F8B0B0655CA2715210023B77834E156D418D1996A2E09448909EA1226
567D6D62619A4988F078779D7FBDB86FF2A2657A570F796D1DCEADA4B3941FD3
FCCED479B3F73B9798C8582EBA620C64BA21628E78696604F302B346D57BF2C9
275F7DF5D552CC0C02F3A99537E245E87ED18987ACBFFEFAEB5DD1C7824FCD3B
0A982D260182E9683B8A45CBCA4757F44055B48D63FB3F087AF5E8B53CA36E6A
7736F1185806B1B4E8702EC7743A7E44275FD00A3CF2B1C71E7BC5155740D162
47B1904F804CBAAD279D74127B2A581B451D44883CC80A2AF9C83041E275DC71
C7C139D080BB6AB5E52BD3F7E596C0C571D03036F2FED8CE898C72CD72F4F843
5C10ADE3FFCF7DEE733FFEF18F31990C7B8AA445861A7B45D059176E0BD382F1
E067B54025A93583ED240311E8BDF7603A34BAF3E7CFD97AE9160B160E954AE9
C60DEB13E74DBA7225857EF4664ADEA616D502597C9945414745056A70AEBD7A
A3B04E52464773E1FB3A6220CA8AC0A927E9F01A2BF69D91D2247351232DB7CB
A5B8529AF0EE6EC5954BBE6F715A307E94CAD524AE440EFE62D26C649B302291
23B10774EDE868D66A545F7DB5BE62F99A65CFBCBA6AD58BF5C95651071C2B12
4BD9257218866118E3EDC215AB10C012945AD3DC1525A30CCB890E963752D374
45ECA8F94440243CBC332D7175585AA6A1ADA00CD3D1F23A50D22FB4FE996D54
31BAE88F98EBA51DAF725E254A683892A3829B3336E480AE08F871D3FAA8BE2D
42E8A286E7F7651E5234F02A5DDA97E68C62D15DA12AFBB4C2B8D2677586D55A
B5D84434582CAEBAB8F0696977335E21D56EF96E5CEF6812EF65590818849C25
047DD555579D70C2090C7FC545FB815EF59AF23694788641B472E54A1A1694AA
4C04F2F3679E79E65D77DDC54A59E60BE3D081BCAB90DA46A7455EC14565CDB1
2B622F44BA4B0FE984776D38EE4E36FED3D664B9735634E4A2E67345335D4155
6D15A0E2AB027671E7E0EEEA8B72F3CD377FE94B5F621B6992B0532CAA4F1163
096ACECA3BA6A14BB1B5586343A0CF37051EE6C9E4F5B9FDA40370118EC4426A
A58CB36994759A1F9BB6E84241BFFE17CF6432536373E18008AD77A16A5666A5
20DC78C67DF7DD1773D87577458C2453687A33A401ED6B5D703A9D94835D602E
57A09F585971E8A187E25E54934B972E25EC9CFE84769AF53C343FB82F93EB5C
7D5EC7B7800FF106575025A8475B3C6B979B5E2F225F74BEF85C18CF57BFFAD5
C30F3F9CBCB35C748AFE1D77DC113FBFEB5DEFFAE52F7F49B23366D0D43BEFCE
3BEFDC6BAFBD701DCCC92CAE5BF853A7BBCCBC79435B6DBD64B345C3954AB93E
391EE7815D01AA2C0B68C42C745434F487996998261474D7D14E1DB572D4A580
8DB6CE09D1EA58A28116040AB80CB716BF25CDB404C737AA9426D39283562EA7
799C7836CA8ECE8ECB81141A1E7054245502B628FC8F4B8D8ED5378EB4204D5F
FBF3E4CA152F3FB972FD0B2FAC6ED4DB54C0BE2762C801076E6A7F2EB0C1283A
18ADECAAB6B2F6A533B4F38A48A992C7226439BD5859B8C5B7DC728BD830C462
A6EEB47C47C1125754092BC124F7803151FA3969EFBEF27A71840A5B32978CC1
1C7CF0C1AED05FF85FB483D45C79C1574A65DFD5799684946A37C2E34F3A1A1F
49D873CF3DA10318F0A11466774F81BCA959F9B476966D20EEB0C30E7BFCF1C7
1F7CF041E23FE9DCA8DF19D1BCA49F66758A84B808896CE0546245D58AB2DFE3
40222D24116D1C0BF061DDF42C07C915114561E867F16C684453E9C2573EEDB4
D3E2BFD617938FA627923942542A43760CCE3381413144602AAFACECDA74D013
93E2582352B1E0F350E1575E79A50B4EAD3078AAF7E0769FAE80D97E8A311935
ABC7BC4DC7964360EDB4D34EF7DF7FBF33840C506FF88160286D7A9B53604005
77C138E9D9E3C49234945E3B5BC211FFCCAD4C7704B760C1D557BEF21578C3DA
D33CC9B6ACB6ABDC56965C1C989868715F70C105B80E9FC83663B04E9533E141
FD6FF783F53EFF0FA14ED6FF11CDA15A40CD338F344B9C992822BF0FDEE4F2E1
F4DA82C8AE9D8C77D497102F954AD390A29612199EE054AA9FE639E591A71081
1667B9B04C10D5DC7705AB290D54B06B7B789373868286561DFEC7421C79E491
2A0E993DA5A215D7A6B258B0C4F4D256C48ED0598643612E43E08A6143B32D29
CF8B0B62C24AC55E000B67147098F04128E0CD17CFABD5AA59BBC9C2DF38F1FD
8003135698B768D317AD02B64A3733BDB352E68FA980039CABE32227AE08572B
6D192CD110A42E27B18758A58E0AB802BD5B6AB27761923A284DCF4149DE577F
B9146E5B9EE19C92992B342A4ED2760E15D25EBF6E74FD48A3D5A8AC5BD77C61
C52BCFAE1E59BDFAA5E90A58202C9B357306DCE48C2DEB0A8E399D1A719263A2
601B3DF9E493F42F99E0538499E04A760A507085DE33A5318328B45C052571A6
DD21298AE5987EFAD39FFEF18F7FCCA48F1DB6B61FBD9A34F456C7E684C483FD
0A3B00462407C6CDEF0A6EC4B8A055E9C2B72BCF4269CF31F38B0412F1797966
B7DA6AABE80B5FF8C277BEF31D7A42CAB53075445F937A5B540676F4F6251312
1FE6C1E86205D319A02B49B983C16DBEF9E60C172B092FAE133A28DAB296921B
8F41566B429A498D49C38711B35914A47C53F93AB3F4DF55F8D18534C3AA55AB
3048F179CDF8EAB2E9647641B4C1D5E662E3D1A81A5534E28A06E364EC9B31D1
C869E19ED35F757DA6FD38690CACD9FE24D3C5F7A2458BB064D8E8D073AE30D3
84A852E515EE881D4F6E237C809183B868CDAB9892E2DEBC38CC821B6EB8814D
E0A9B67990689361E7E1828C58E04D065AC42125F75DA52C0AD6294DC875617A
9BF11255A5BB829893117EAC148D1B015F9D8992754DAF9D1F37D57EE7F5DF28
D847D4D9B47C4544C52B330E8FC727B38D02D114343C32BDFC6F1BC1C652627A
B1AB950EE70EC49638FAE8A3616853172A4C6591893A89CE58182AD952BE6397
5D7679F8E18715D696C853DC8B5FBFFCF2CB4F3CF144D52010222B5C9B206F04
6ACD1E7F56D2417556D497383E2C67178E9A6604B4FB75D75DC7D69FBC9D25D1
744552869C421800BEC84800EB2066076386B3DCF1EAA080B7DC6AF1E225F307
06FADBAD866B07110CE1DF6C4901E7C99476BFCE647FF5BEA5CA8A3381B036E9
E04DD9E28E1A7605748BE95F28E0D48718E03127ED52190A3829973C5F55EAE3
CF9009ED282779ADF7C8B1F8504691633FC42834154EAB250FBEDB38567F6DED
86919166DEAEAD1F69AE7EE1D5675F78EDC517D7B49A3915B067EA0A202C2A60
6BF8CADFB0EEAF3535185CC10184A86707306E0FE54AE971292205E97AD45147
9D77DE799484B679A544EBCE3BEF8C0DF9F39FFFDC3A18562ABA42679301E66D
6F7B1BDBD8330C363D821B4F65D3E3438963D8F6FD7345ABE319314C9C198D93
347FF88052967C406262FC11E021A7A275C101E74745F3C4AC38F974A607D0F5
C0422AA6A6092E736F8C860BE3AA2E40D0C4580F320CECB1C71E3FF9C94F9C41
99AB78835B1632944D9B215221AAA0EF61D4FCC77FFC074BAF5C11647385A333
4B2EA72B30CE21CDA2B0B16FF0F8EC76E7A61626CDF89A9E28D5D487D33B17CF
0BBB47B2184BC0849CB8A69D09B75A11104D25FE66092343853062945F544768
D5EFCE28BE999E3CFCF0C36FBCF1C6BCA826E25F29A933D3B81E4702861A1651
CCC3B81A1BAA5B05AC84C5F1C71F0F57CC15046CA4C526A4CB059A8BEF7EF7BB
471C7104E90C610C2AD1CEE560CD95ED0AC51093EED295DA14ED174D4BE129B8
D33EFEF18FDF77DF7D3AA56E5A7FEBE9D256AC264C0B450520FF8D864C59F0E3
0C13AA90D5F134C67F490D9A89981C6A2CDBB3AB2B25C177CE3EFBEC73CE3947
7764FA53651B2E1003697D6DEBA13C1012B1B4970A95CC1E9423B46565D40BC4
4743473960AA467C80813EF523C1FBCCFAF31031246E0B115D6F85D74B01E3F3
3BECB0C3A38F3E4A4F222E88DEF0743802C42B70006AC7C43612B8BB6D4BA506
C90C3BB1C45966E2F45770F73B341A73E6F42F5EB21914F0D0D060AB59CF0301
56E6BB28F8AA6BE680F3644AB7416760B75D8FD979B53B7C9354B1495AB8BDA1
2543385639D1D1C24EBBA080CBE5D43784485AA5720C0F186BE819A17D44BB19
7928982F578A42FC1A87AF54AA24313E1C85A68A3E4F9D26B053DB1B4727D6BE
BA71C3C6B6CB21A81B2FAE7EF5D9157F5EB3E615B8CB8D56E0C13621685798D1
360338FD0409EBAA9DA669DF75D75D1F7BEC315BBA23DC133E03ABC85673F00A
12DA38DAB814D9B2F2A9D5445DD1290E4FAC769CE61915B0C402041A4628C4BE
2B12DE344689CEA1436C83C15698584F9D87D7153CC4785876C4A2D140B917E9
C45E71C515E79F7F3EFE86A3C2CEEAE44397EB69E5D7F417B91168698A84D299
64C06EBBEDB662C50AB667F9DEF7BEB721BC9CC15229F4272E27677281CEF019
512B881D9B60C8B3CE3AEBB2CB2EFBC0073E70FFFDF7CF682B68A59548880A0E
94BFDA6D491BA28BFD60C6974ABEACCC853CDA7FFFFD61A1D38B82A8C26CC4A1
F4169F51A742CC069E8E4DE6DD4C2168CA65DB88C9B688811A83D58699B9F3CE
3B2146E9F94D8F3FEBF013CA887B6178C4A130B767BBAB52D2D9082A97789B6D
B639E8A08320F7A7DB0A7CA94B317F654D7917F314D794694B5E9CD87DDB1B47
B895ACE8302A1AA32E8B3536BDED70CD2854E6581059978098653F8BC285F3CC
9EEA3492DC1B79C120603648AD4A5CE1A0AB7102A149C4E2E15E38809837BECF
78834566D8E5E35488E1929164E6C50922C5B2DAF012BFA8C82DB114B4ADB9E8
5C5C1283B8C28364EA1723A4CF4A8B449EB132C4AEC8F2D25E61A2049782850D
FB80382F3286BEFFFDEFFFD5AF7EC51B59656C5FBD42D0242782394220184742
830C9FB9E4924BBEFEF5AFB3FC8C3E5932AD9D03468B2F327B2284A9C010BDE4
40B8575EF0CA55172C9CBB68F3B973E60CB9BC4D054C0F580AB859504BE65389
86A2A9AF4D1BB2E58ACF143898B45324A3F833D3C074883B54C171C93784C027
E10197E2728918AEBC94C043C6B96BBBBC93EF850F1CCCDF2A953AFC589F474E
5C9E95E0E68E4F6623EBEAA3A3ED3CABAC7B6D62C5CAD52B57BFF6EAAB7FC1D7
DA79D2CEDA046179CF3B1C17AB802DC1809D315A090CC650E412CA8417A434EC
6FCA496D2492B8E14DC85B2C31C497DC36EA086E33B1A5328E026DADECAFAD1E
A6E2645894207CDC57911E372D04EDA6F6D2A60EB2A8493EB2EDDFD3051F9129
253E86EBAFBF1ECAEE4D6F7A13B62BBE2B8F5F254C185287C491B85C85B05CC1
28C407E0F9642CBA57D791C8703B330947839AD85AAA8DA8A0A1A7748B8BFE04
BCB52435C37D7222E9FB33E0CC51D182E05CD08EE0B055E222F4D0F417F1A20C
72E27F3C3E216DBD9E4B2114ED00A6317A1D540A20016805BBC803CC5D9155AE
3413B15941D52DFD171B4280E9202CB18FF1D9F108DC6AB2126C3B29DB35D22E
162719D7C1873121F0839948E68BC2CB6643BB6005EAEAD8AB72836706BE3E0C
2366EEC505414DA0AD2CFC362796B4D5D8A03BEDB4D3934F3E490A0E3EB85A26
6873AAB44099029E220B7784FE38E49043CE38E38C2E1341C7A6D77EA6E5AB59
22FBF42C646433BE58F6CD31B78A6E9E4A19D0D2E283CB4714C0986C6BD6E4EF
DA0F79A8FAC5C452CDA8910B4CD2F3CE3BEFE0830F66AE97782ECE273749170B
0A2750C8478A06659DE9F542B1611AD53D42A789C511F830F534FD336209E95C
AA35E7741AF3371A4E7005C682B810EE31DA1344F6D9C83343621232E44CC01D
6FBFFDF67DF6D9E7E4934FFEE637BF892D2D922F02117AC981803FCD695B6053
0CCF1D9CBF60101E30741EBB2F786AC856BB4B013BE3E3464529B9BC43AB8693
BCC48B50DDF2782649A781AEFF4CD46997C45FD38420ACD01ED8F744CA4AE51C
AE301DDC246DA750C051CBF718E6AD53E7BB1E79999CF9A687790B4EB3078E45
7D918742432C47E3A379BD11AD7969ED334F3FB7EAA5756BD76EC4E532177AB7
94E2B0273B0A58D820B92EF6592CD25B95DCD47FDCA8546044CC59CA7A5E1007
618F3DF6B8EDB6DBAC24E1C7B09F4F3CF1C4ABAFBE9A679C8791661F854364D8
152516B887F9B159FA0A73C388449641665214C4A163BA33859D336E5D0A0D35
7F531DB00E0BBD2F88C1BDF6DAEB5BDFFA96BF8EDC4DAEAB5ADAA97495496C72
04769DA22E7B5CB592EA41E10AC51C056E45F62CA3FDCB6215EA09C12BC87FA4
3224DBB08C363BEF053F0F3F4346C3B8A057AD26AF1CC02CA1421A479C5CCC11
1D9459405B34B8E482280AD76B21295E2D894F01DCF0AC110AC228EE4DB09228
2CF0A70F7EF083FFF44FFF443E4E9B4AB1AA82A2931D66E86A908484C4A4ECE6
C1B9ED25F224B209DD52A32E25DDA763E2B81308A06746C042850582B0D29C7C
81DC330A00E268EDBFFFFE32F508C7BFF4D24B4F3DF554C69C99B99991BCC219
ED2BDA13F97649C1BACE37B14F70441935911CD43670459CDFBEA317D7451E30
1F195BE58DE6802911B8BDB9D599947253C9AA483D4FD405ED12CED52DB7DC72
D45147B123829BC903D6FEA170A158A4FD4AFBCC368469176D9E6D1A456C56CC
14F004510FF1B2EC9DC0C81B072F1F3A2F68FCF0C371C71D07DD061B42047044
63314A49126992B02ADC3D4B9F57BB225D883966E0B8819535CF8A5EDAB4E1E8
BB087627BB47B4742EE489557DC71DE57ADB04E19A9D20273CAEFE81EAF0DCBE
C1C181FEBE6AA7FB429C0B84E56574B2491B490147A60CC9EA607FCDA812B60B
03CE51814C349F893A3C9485A2CBF22C2A51384781D0AAE4CA50984925F13F47
D0AFB16B9392CB1FC94A1291A22B6B67394E561B1F48E1345786CBA5FE7279A8
DD2AE3188D8FB657AC58F5BF4F3CB36AD59FD7AD1BC7F5F22860F553B6BBC7A5
369506083120B9D1E586F1A51849176880F05B6D7528086C30AE29C17D02CF53
980824C4380A29876939713328BB24F8B0F2D354F61253D3179A790A6203D5A0
D3121548B6D87A426B0DF3F119C422AD0D03B1B0F360B9121A4C6374EFBDF7FE
E10F7FD8A986C7176071AC5AB54A7EB16A9CF1855D77DDF589279EF8E217BF78
CD35D7702AE9DE696329FCC853D1259EF4B4339DAE48468A338DC6C8B8D6C561
4D81AE8248C91D5961B474B80C0AEE253E6FC1F2AF94DB1D22CE8E815CF9EC3E
3B8B14B0C91B5B54D0EBF39A13A96105486502CBAA880A2E40522959A0990CCC
C8944E2947CE68983490FD6257B74E57F069A8590783BD0C3F4ACE72027B755B
62469F3829B6E976052FABCA002410C9AADA653DC8F0C790B0D9F003F622815D
C440922B1B129C4748AD38DEFAD6B73EF6D863DC00F4CC242E679C7FC5156CD4
C882D2E99959CA527B6E69E1F2F8F1912D00F08D3A6D175E78E15D77DD45863C
1F718A22D602A8EA574875C5D6C495C6396759812DF28E8A0ECD78E7A28B2E3A
FBECB315FE617108F3263C92A2B592852AC5669370F80A9CE6638F3D560115FC
95487B790F8C5AA9E842EA4459C95E56295F71519DC91832793048E345291C87
8A2C1E7FAE9125CE53AA687AEE80FB8A7B49EB2EACACD64EAD69B87521D6C820
C62F2AD866833A4C78FB7C07B9287217EA38D25A5F6568A87F60B00F3AAFE2A1
82217DEB43C4BE3F42A3516FC5A9336167C66F6CF5845C467EA0146DCA9B26C5
CBCFAD776F05DBCE986CF6AB9F633EA11F3B19CD2886248C93D485E683B98B3C
3D565AF6F2A754A996D2725C294D6E18ED2F55FAD2D2E4D878544AFBE6F4670E
9BBC3CAF7FCEC2E1CD5E7CF52F73976EFBE0FF3EFEECB32B9E79FCE9E79F79B5
59F7445B298690965B2E6F654D582078279ECAF61315C5CA9121B5D0D2601791
2E70D9B2659C5BFA7BE26ED25E6A17CD28E5A5D0FB64690691AADC6C1402D2E2
2C1D266A4465F41A00B61629A854A3C8949F58D5883EB1EDC3A382A84EB137A1
A995369213ACB8B782BB7C407814575C7105712DEA504EC59A844EDE9D102977
1B9F99BE332402F382DAC17806FCC9C240AC29E73A30D1B20499968726D18CA7
919614D7232F1A3684276F1F7EF8E137DC7003B5143E70C20927DC74D34D189E
2C77AD139E19460467900288D1D7D0417694EA16BA1B9A9A379D3F1FFEEE7ACE
11D1A7D22EB308741D122DC62C0A983E9362E0723169C7E91C3AD30C8BA74B76
A212635C51813C450CC49E5C6409C717AFBDF65A38495C5DAEB41685455F367E
A214A95D263949B368176A6805A255E3EB0ABE0B7D8C810DCD989BAA80152467
612E1E048E2FCC3B5A03D44069D1D99E49CAD34F3F1D3A068F0FEDC2F4DEECE3
DC73CF3D7FF6B39FC119C28EC57574D2ACF7294F8837555256268BED82C78245
06C37BED935E2F0A234BC8D56510FCFBBFFFFBC9279F0C5B44A794C8200E8FBB
94391DB589545920F35BF8966593E0BE12CE99A13F57109FE159F0A4C71F7FFC
99679EA981C90BC1BA90259B50BBEDB7DF1E46B94AF6E96D70BAA8F2BB08BFA6
2F8D35C2948EB535A094B0182D5B45E545159F672F0E7E3347C80D633D2D37D5
38DE76DB6D9F7AEA29CD03EFCEBE4C786A5C24096DEC98C016E318694A5D7000
E8A330906E3BBD771E240EF8A39C01A1184A6DCE9C81C1A1FEFE5AD557D3572B
5ED0E5DEBE6937431543A92C6128EDD2360D8F5DE123763CA7A256C82AE080BA
DA847FA67BE9E50F5CDBB68B2388C7D4B72A842F0C259DFA4E4D589EF1FAC6BE
81EA668BB09DD6CE1B9A1737F3725A9918A9FFE617BF5CBDA2319838AC65BDED
CA1597D6A04BDC863F7B86E9E145E54FECBB5F6960F0F9E75E78E4C1871E7BF9
95FA64A3DD74695C6280A1D96E744152C45AD815B7579517C55D1C7A76A93F81
426502D9E50577822BBA76CE98DBE22E557B782E3DD5960B657B6E2A7A9F85AF
8ADADAC38E5F8F3EFA684889E79F7F5E704E86825893296A58CA3DEE49FE2FD0
1247457A25352594718CC1DF7CF3CD871E7AA82B4C0AF27BE06394008CDA761A
DA30096A29FD7880972E5D8A6780077DF9E5976B34D6EFD66CFA52726EFA001E
F0E9B88C3A7866C030448ACC679E6D2960678C560EC652F6539309596359E385
3A8B3C675EA7B12B97936D06DEF296B7FCF297BFB6C3C0B3EFB8E38E78FF073F
F8C12C62B45728B897C025FE858CB814734C603B1339E0BC31581106DCCFBA08
58E55FFFFAD7D50B880F2BC88910E9CC64B30106C413AEC92DB8D5565BBDF39D
EFC4DEC21520D92FB9E4922814161345C5B556490C1D7A255067516C14E5D8B5
B0EC3054E583452BC8EDCBC73FF8E083A1572CDE410A98E3E7C2615AA023A16F
98E9A09DC1CC2B5377B80B37802A5089A7887B530662DFE2713EF6B18FC1EF24
A9A48ACED5EF882871E121F1279E6D5697599407EBCBD3D058131F5028F80DBD
3827A469C3241369A9B2754EBB1A8CE3490950200790F229DA7534C8C43AC417
BB30B1668C194DC5812CEBA7338EA35A2FB05720268796E2DE7BEFCDBA445C70
BBEDB68369CB4C900D2DAA108597C2523228AD1E9D36EB29538FEE3ECE05341C
A61ADB8651414A34ECD56F7DEB5BEC3041E389010F354CD413CDA880CF38E38C
ABAEBA8A59467C5EC40BFBEEBBEF8D37DE28EE527650E79E27BF200180B28673
D30C808A8730A2167451BE8909B95C89878731F0C1C181BEC17ECF479BA6898F
41B79B59CB1FB476925AC39D274EBAAA2B13EC95BADBA492AD071CD052B17058
7482836283024E426B239F7CF6B9E1C42BE06AE2FA86FA5F79EDD5B9F3E6F4A5
E568BCF51FDFFDE570C5CDAB0C8CAE1F85A89DE3FD64AFCBDB7936EA75B91BF6
CE5F7963B3B53189D7D727DB2EEF77B567FBFDB9C04347F0B37DAB0888F32645
A1721FDC425844D115BB022BC79D464C868A4B79E2E82C8AC8C2EE64094F39AC
F8244E3129F46992F2EBC40CB1E894EEA23D71820461FF7CF2939FFCC52F7E01
D164899B280D5884460D22B75B26B8EADAD5510617613B235A6F7CBA7DF6D9E7
DE7BEF553B4B17AC3A961433C34D55A50A40398AF8D987096571F0A06A97AB49
75607E99C748942D19B4759FE1E730B92E4A0C27B38FDB4433831A92A8A25DE8
4C0957A5DA11798C91AAFB02DCE2FFFEEFFF5EB66C99029E8AD0D283C7C0CE3B
EFBCEBAFBF1EEE4E571422AC3A76461C947789313406D3A893E425CCA87ADD4C
68E45E6A18CE1C0C1FD69C519433766AEB9162C301CB716275D91F03538D0FD3
1D514385B669236109E1AC138F172C8955AB561170C88EAD30FF71292C33E40E
AE8FEBDC71C71DFBEFBFBFF8AD142A675C6146AA369D0D1E982DB7DC1266E331
C71C03B9C6F12F5AB40872534169BCC99B5A0F58539707262F11471C70C001DF
FEF6B7A3A21B0F1F5CD4C19B764B2113A54E7A81ECF2A25318BB78CA73C2A980
4CC7E31F79E49174F2EC3076D861073CC27BDFFBDE9FFEF4A70200D27867B8FB
FBDFFF3E44B93249AFFF85F130F173CA29A75C7BEDB57834BA8CDAA2B43F0E3A
E8A06F7CE31B501B224A54375C6E51560C0B7B49E7831F609CD94D4D93670577
2E6F81A7C07DA1F6301BACF7A0B8F9F297BF0CBD254658C551B8096DAA98F722
D10DB1E574BE6D2CC442609CC97F333ACD8485ED318C7738187A1EF8197BE913
9FF8C46DB7DD46638252BB0B6A3B63089AE50314D942564313E368BFF8E28B58
7D8C4131BCC58B17B37C91540FC481320279E185177EF18B5FCC8BCAAB4DF7F5
ACCB2EB89BA1855F12CD9B3F67EEDC3950C003B5BE5A9FE7A38AA3D0AFB7EDC1
5893D994D49514B025DF70C6452E45B13379D34D0A38F22540851DB3A95B70AB
990466ABA2B4DD278F33F83EF5B10D4BB6DC62BC31514ACA9B0FCDAD8C673FB9
F5FB4349796DBD31D745F3A381386F345D1D3AB8E4CA4D97A57ECF641B5C3371
25CC5A54F5698B3E57FA433A3ED9820BE543DD41E465F0EFD3F0E43C7A581DCC
2D83F64C9D2A71C3EDC73A05CBB4C887E2CA2A28A8886664005C79C140CC1D48
2335321027172C480C80315A76C815DBA528485D11F8D11EA6C5E08AF6F64CFD
72C3E8CAE2A4E4DD85D7813BFBC0030F9001023B0A2AE9DC73CF953EC60FA413
56084D3A48B8680CEFB39FFDEC8F7FFC638A477C25E23E7BCF7BDEF3DBDFFE96
405C418BE5DACB8552E04B33458FCABB51ED4E8B66A9D590AEC05EE9A180E3CA
744DE60F553425E5A663A0003D8D2071E5F3EBEC3F457431C3DAB00A79A479B5
F1F1C981813EE8053B862EF8DC8CE3945053A6DDBE39C37315580FEAA128F032
326BAB53A71FF0D72DB6D80292F1C0030FBCE5965B3EFDE94FFFFCE73FB7041A
727F3B89A29084B09626E6814DB8C40E78D65967DD74D34D0C445B3E10DB355D
055D3CBD62B111ABD1F417CF8CB286B631005950E849505A694F772DB17E859C
C575E4E593F40363830682F83BFEF8E3899B60524705ACAA1576BDA3D07968D8
4E4A1D177201625E14CA9155A1B024707DBCA3C8129165EA202984B612DBB3D4
8BF77A09052DD71F6E259C33C61EB834D46162D713F997CE1A8D45262995C755
4C48D96BC15B702F366D64208EB3C178208310EDA26717C3CBF813A61D3B9081
0D38A3B00688D016044F1256D5200ACA31BCA4F87C2F05AC6D40996833D0962B
986DE9982F20904A211FD75B01E705FF1FED124264AD9B8E2B70DB33AA84FF49
D26E79D7398D3C56A259B53E56F038F390208CE062C2095EB8605ED50BA7D457
E8FA946DE4BC63D61A6F37A550395AC999BCE8F864D35B54C091E9D35038C7C5
9B1D8B5D75AB815A32EAF48F0AA02A5FD73B3CE09775E1FCCD563FB3FCD1DFFE
BFB979A93AD91ECDDA3B0C2F98D8301265CD39515F3989C75BE32D9755CBB57A
63A296423DE4F140FF331BD747A199C4C272EDFFB59A1BB3D69817DF314D5DE8
E0928B5BB193D5CE1A51B6FDD15A14E2B71358EE223B63DD2303AE5DDD279D49
6EEA48E24DBABF34D44E3FFDF40B2EB880679C871A46EDD9679FCD5019A359C4
1BCA5666F08C784CC2E099E6F8D0873EF4DC73CFE1F8B300921A571206EFBCE5
2D6F217443DA87A3E26955249C66315B21EDB7DF7EF086995BC1DD77DF7DF707
1F7C104F4A7C956AF670350C86A9B10E2BA1AEE84C4DB472BAD6EBE2397105DA
48A94D1FBA08865E50BAD0AF1D4286BCB702966DE88C271D107A1DB14E1DC63F
31EFCDA4117339FC98CC7C9251E051F190CA37842B13F1DBF668C1508DCEE517
A71D65D3ECF59DD33DE0D93F6C1B373177AB263391A919B72E0B6BB4D9BF4102
CEC2A928820394AC238F2CD902613BEA0F832F9E7AEAA9975F7EB95A86C16DE5
9595B2B51D7E5CC1FEDDAB2E5379595738435141E340DF9D7FDA65975D9E7DF6
59869866F48099F78588C7419218E5E191EEA7CAE4BE22AA50088BBFCAF54D1B
82BCC40CE98B2C93972505AB78363AE992A9FEB46D2C4FD0046BF9454BFEFA5F
7A7661B67171A89FB860CCA1818F1F8E3BEEB86F7FFBDB307CBB9CA4686A074C
5718D78A6E31522D189422FF38D73C088CC4F04559496DCAC22A425A287D48D0
C3672464894F6DB3A18CA5735A20716EB8E106C50C4487343D048D4BC1F220CC
F388238EB8F5D65B097EE41EC66BFBEDB7C7B4F03A77DD75D7BEFBEECB00234E
8425B9743D42D0F2AE04AD676A86F963853AB40FF101086E6C06F6CEA2358919
8083F2B5AF7D4D12DC26BFC2390D4EA783CD1A0DCDF128E8ADB7DA2234DC0D61
5A58540CD6B69B13D994F23FCAF776D13947D85A8DBF14A5FA7C6400D2410117
349645143A7C0C7E082C9BA43077DA8141DAB340C74D974EB6572F7BFAC517FF
3CDFB91DE6CE9FDC303AD1AEF78534617F94CC1D1A6C66EDF5631B1B99ABC511
656EB5BFF2EA78BD7F287563ADB8E556A7E50DADF65AD786FB35EEA200667550
C04DD7DD50481825C5EDA3A24BAC8099941E78936E80FC4B7ED222A8791EC516
E002549E3A88CE34AB7E25BDE980CAC58C0B12755B36A9B129AC4D2F8E1FB0B4
13AE68A9293148AB1D46212CD42F7FF9CBDC5AD8276AC8AB5BD09BA27FAC2A15
3AC7B82F36A1D89C48CB0A3703978D78B0CF3BEFBCF3CF3F9F66059EE11DEF78
C7B265CBD45F8851389164590F98F234289B0E6B07C3059B10A4D9CC82924746
C62071402196D2B4BD0AECAC9133992612EE4BE18537D5EA846E19DE3FE8A083
EEB8E37691034C4CD4B7DD76E9F2E52B535F4E9E4913B829B9E79E9CB4D365FD
2C202CF87024A592EBC05003C949745FDB1983BFE203F818610558483C884D7E
DB5E52949E4C8AE091990E11389E0DA599D1E7A6E7B4D0CC923BC89170F733AD
58840A7AF61BE618B8ABD4F2DA150E0DEE32195E320BBA9C15AD9D38FD391836
AB6048137B1457C6C110705780FCD8F0DDC4BD1BA7CB037EF7BBDFFDA73FFD29
35CDAA33D3B3212A4ACB141EC083B31C40412A3602619C7FC672EAD7F3E256C1
3962699FFA660AB7C9983C1691191F3EB200C36E6ADC1ED3821F606EC3B2C62A
3059639D0C61C7A8B4F008DB6EBBED134F3C816F7DE6339FF9FEF7BF8F27C2C4
2ABA8EB5236C421EAD0B8824A5C36505D2B3C405B7D9661B6C244C14EEFB777F
F777BFFFFDEF49A12AB2E52E55A724A84E193BC7C996C205B128966C873069A5
FF5557360B084BA4D0023D598E4C9E0E85D6F0F8DC6024DF16C39D2BEA8C65E4
118E40C5EFEFE692CEDE8B5AD55A5AAB55B7DC62F1FCE1B9C3C3435E67346123
B6A2C07D319937AD2145F5C08CBE05722ADD9BBA64FABC111343A54B055CCC70
E6A2B24058506705082B6EE4CDC57D7397FDD76F4AEBEB8B926ADC9ECC42CBA3
52EE962E580831BD76C308BE53AB9661224CB6B3B969350F53DA2AB9D7C6EA43
03E9409EB4C6EAEB92D2DA76EB6597BF9CB8F5793C19F28D9E702BABEB206BA8
9C344B92C3BFAA1780548352ADB47D25FFA553B8816D7843C81E8856283CD623
91DF0DDB4685E9022D33B443660B22FB98C16170D4C25D459245C18B6160A7C1
26BBE9A69BA05C1F7FFC718E1F03804827829AC014DBF507A3122D0C85240991
70FDFDF7DFFF5BDFFA1647CBF40763C99FFAD4A7FEEBBFFE8B24719DD3A2448E
2D8A90955154BF95241A66E4F0D324321AE658BC9BA5330A261AADAEE84E2305
9CBB8652F1AE284F522E6A7A619F64045E34DE69BF50D7E2F9607EE1881D74D0
01B7DD761BB96008A836F031370BC1888D3CF77AA7EBF3AC4B8B8A8E8A7A046A
0EAE93F2D0C45ECA0A13CD322426710A0C399086495078597CAE3050A865092F
E2D888F8EDA28BB3997EC96EC5A26761D924FA1A2A0A9EB40DC5C844604E9A44
6B168CEDA62626206D710551B289B5EA924B2EF9C217BEC02683342DA166E04C
BB02C46F8F7DD2BB013BCB5198996630403C6E2CF4C20E87ED79D145175960B9
E44857102C2AE0516A31A418F8EB7C5130893A4A33C369EFEA47A2CA78678AD0
78003FF7B9CFDD73CF3DB429C9E4870F70F6D48842C5BE2234B0CC1E24E27085
DF80CF10BDA9FE510C94610BE19A2AB760EC9D1042CE39779A62DA0AF52BF0D8
6BFFB0870C0F88F60C2D60FC0FD71306934094AE080BD10D550CDC199FD2AA2B
FA3494AA84F2EDB1C71E3FFDE94F1913528D293977F1573834DFFEF6B7C510C2
FF15E86685BDF47781E98D5C1EA49F0FF2795AA8722559306FFE565B2C86C55C
AD961BF58946A31EFB3C6932D69A6C172FFABB34762D87306D74FA30491EBB99
B1268ACD8412A62204DDF6A680E776761D43A49D963CC37352290D35D33FFDE4
77BB560792496FD324916B446E6EE6E694FAB184D8E5A56A69647C749DF3DC1F
0BCA037913CF128DB6EB1B5C36AF9C2E2CF7D74747D643BD3987F3B3063FC46E
3C83F79D949252B3352EBA59656AEDBA2B9CCB2431F733D35B145334AC79B8A6
13266AE713B682853BF4D043991C11211D568D5720CC58613F825A58C54EFA7A
EE3A58FC18068C7E31BEB910C8E1F8E590502928A74BDE246193758E92A2DF8F
A8186DAD411C5868C4036301CE34FA698248027492342A4411D2813530B41CE9
7531A66A51DDFC3CEF34772EFCE311D8685B6E0937E2654F4F1AC36F0E9E9007
DD252E4F435FE7B08B63C70AB6460BE73CDB71871D9E7DEEE99060870022C7FA
BA4AA554AF379D074F790855A55C1B1BC378FC353B7F0AD0AA4AA5DC15F52A56
B4549C9F8CC8D8109DAAF716103D99ADE2821F47795C8A39955548363171A5ED
A8583DFFCA1328D8F03BDFF9CE3FFEF18F94F849D1B65387F090430EB9FBEEBB
F149BAB0B8B5A2A9338E939A9BE59B8C4F52613387CAFEC7E4D184AA3BE9A493
F282E994217DFC8CF17CE4231FF9CA57BED24B803A4368CCDB512B8B3715973A
F7DC736FB8E106FA91B269B46764A2890E302AAA30256D1917110B9B6DB7278B
3536EC83AEE82D48F3653A963B2A5A6E70F68881ECB2E1A46654B374DD75D741
461F75D451575C710593D0564668A52CAF722F054C6B89CDBBFEE11FFEE117BF
F8054FB83586D431B79A9624B046C7421EDD850297B8C3C31B87AD22AF77B0BF
C31EC02663F6D6BCBE787998C0B6BE35068FF1FCE10F7F80A8E220610341D8C5
817C83E654A35E4FE250BE3539514A217F9BB5AAC785B6F276ADAF6F627C7CCE
F0F0C8FAF5E510C8C187CBA532C58D2039B47E28496CA247F69FC86D18AE64FE
4B78A5B8686B2D8679ED2569323C1D39D7C837EE8A0E2B679F7DF6C9279FCC35
B2A8852BAFBC128BABF6887951F4397B255E9776A41E5A38CF436FB6DA6A0B1C
AE3871013DE7E325F5D60461BAC251D2160F1D0B5B59D1DE83D709659125A5E4
A4DBC2833767145951192E70A939D1AA0E0CBE34F2DAC09CA139E54A6B74D4FD
F64908D63E4C38F46BE8DFC402E6268E48CB8BE05A9256E1CAE69D279ACCBD24
8583DB6665918BE1F778319764CDB61BCF1D44C3ABCEAD8EA235D88930151A4D
4F489D67A13D728C81A6E552A3D9888B2E49828EC2AC8416C469F28CC7E1ECE0
D7CF7CE63338593CE95820AE238B62D511272A48E8D8362D2E3AF20A764A88BB
CA35699F6DB9E596F813753356FCA31FFDE8030F3C80FDA0C49C802962AAB11E
08578A395D22B3F6DC734FF8AF6A544FDD71EBADB71E78E0818A232A5D882BC0
685BB3668D3C63FA84BC2C6FA79887801D1D9C9D80E334D59D89D731374C5969
298E7133A6551819A3A01F1A1A683427B1E3CF3FFF2B5B2C81CC7A65EE30FC06
38D6B878EA41F351406CF942F24074323EFAB6DD767BF4B1478E3DF6E8AF7EF5
2ACFFC3EF217DCBC5AA9E2338D067449ADD9C2E975B059B98D588B8913484149
B3C04D83F97803AD4543950DD59322DCD17CA30AD802342C48D832AD88CE3E2B
5A1C5A88A3B23EA490E49B58A777BDEB5DCB962DC39AD954992B2C09B691B123
D979E79DE1259C7FFEF9B38C13B7C0FF6C998019D6156243E060A38B9A34E9D7
5E1E30B71A632CDC06D61490A1C7E822B5AF0C527A66946E50F0575D75150C02
8D5094C56C96C28030FB32D15A24350403EC4A06BB10FA26A6D71556336990BB
54AFE687B1191235C82951D11D6356C41C302FC0F4AA684FF2821987E2C30AF4
59E64D614FCB932A300E533CFBEDB7DFF7BFFFFD4EB902AE96862C57B3313830
C847C6A8EAB94F2D3A037BEC805C9A2DA59AF08320632A02D1346AC56D2132A5
926CFCBFFDDBBF7DE8A187B47BFD7297FD9F20C5A15969C460602ED8D13E9316
F2D01B466079FBD0CEA2458B5E5AFD22494ED449457E397E8617FEECB3CFE2F0
B2E32159ACB9B2964281DB95692692E0AA588B5A8D65A07C8ABC68DB408217A6
99F9033E03E10B614D91ED42848F3A9E98894D70D12C93A077BD5F56CEF0A6E5
C4FB6AB8CB669B2DA8F5B16CCC87B84727360867477F11C3F38FE91DB0A672F6
14BFDE09CE52ED528564C21234EDAD35805629732D17E7C9E09CB9CD766BA854
5EBF62D5F84BAF2E1AF77E6D258E2A599E78EBCDE77D93142EAC2F5381C35576
712949E1D4F821B55B0D28DACCD50354270A595EEF2A612F95A2B627CD8A37BA
7CAD8B5F8CDC2B2E5A17C42436561A6C06BF93B34E104E9DEB14A4A422146D00
B628710624A7EBA2C1B254154C69E103D88D3FFDE94FB997F0C5AE5622B7DD76
DB01071CA0A42FD53F64086E848BE0F338590C0132C241DB9D4C8B71E857A856
E871D13110AF638F3DF6FAEBAF6F9B6E9E749918CAC2D6C53074A82D4D269F82
81134BE0A828DA74D5D309415327DB703C5EB81676B042D3EA5103D183215E73
CD35AE28F657E6D51F1E1CCB6A3A39D1AAD5FACBA5DAC8868D58AA3CC39A26EC
C541D9D16A35E0CB6E1C1DC93C12AFB260C1BCB5AFBD3A591F87EAF5F661BB55
8394F775DF9DBAF5C54B168EACEF700833FA7FF0C107DF79E79D7878CA627B30
8A0855F8D589C2CDB19D8809E9BC2E054C9B4854B7222E605ED03A19EA0031DD
4F92981632399ECAAE174FA3ADE0FEC67A1F76D861505ACCCFD98D325D34D826
ACAE70C729EE097CED14D417646156EF523A73BBCC787D6A507CF29BDFFCE6A1
871E8A0FE3A959EC44DE2BAA37852E39E0AEFE7D6C55D98563928D296036179D
42939408A79E7AEA97BFFC65B97154907C047A96C25CCCE8FE6AAA79B61569B7
800E57848B6D6604973DEDB4D3CE3CF34CD6A462E45D517A0E691605CC2AA328
D46B29919F17CD8EF899F7BDEF7DBFFEF5AF93D034AC3931494D008FB3AFD637
3EE1F73C0E5133EA0478AC02F6FBB99DEDB8E38EFFFBBFFF2B1B88BA47B17D4C
0BA9ED59538B71B2668307A70B15AFFE424C56F9FAC8FE012A48DCE5F1271EF7
8E4E9ECD9F377FEDBAD7FAE1B204E9B9CDB6DB52A162AE2EBFF4B2A8289AE076
A21DA3408B5E4A61B0AC53DB5B6870ABE7A8999473A1AB206FE3BDEF7DEF9FFE
F427854C383F74C48F39E6989B6FBE19C7D312AD10DDC368B0C5875BA45BAF53
A67DD531AF3D38A8B664C9E68B172F9A333C1862305E868D4D6EB4991729609A
7D364E43050C0FD4B2EC49747858B5B9BBD470336AF97873A596E55163627241
545AF7C853C32D3708151B4725EFC1FA58A3DFE4210D37DE68552010E2246A75
4C0D68DF8976733272ADDC4124B119441CE2D2A98B16C49EE7D22F5F1EAF6BB7
5ECEA186DD681CAD883DCA3BC586C7F456AB73063D06D3D34BC79BC45736B559
AA10677141124EA40B2D30D6BB538CF098085D2F1208F99182CE4030C2A98D42
4336611A544F2B14151D36DA820A3DE6A615CAE5975F7ECA29A7D0DA63648EA9
1937159B2C97F7820B2E8034B0CDBC597F1F05B261C1B06DC8D315A91CEB5F6D
12506E2A779570F3F832A415EEAA8AC90B2FBCF08C33CEE0B00410977580C7F8
E10F7FB07CF9F289897A904A937DD539E393939552350A60A3D493947AB9E961
82BEDCA819CE249459DF5F46D6C2286BB6EB7DD53EA8E100641D0D6CA7AD6DB7
DD7664641D6604DF651C0C6EC1C6D18DEF7BEFFB7EFBDBDF4216847848D8946E
2AD5BE53C364D2C8757600CE5A8FC3D5D303A627F7E10F7FF857BFFA155682B2
860A89A69FA89225E8BBF2C414B8C49AE207EE0C510849D6D8E551EB0C7C5E9D
88A872661C2711AD0C29136823674B124D824C1884682ACDF52C393CA6246C87
5A5E96D40A78168A7BE6AD85D5B2A2362A3AFAF1A108A053EACE999824FD51C5
1E2931797AF12D061BE80CD11A63281B5F27B5C2A6153573C5F1D38A52F18094
28AE4FF8315C19682FA64559ADC4D2436683586C8A2FEEB0C30E4F3FFD34093E
674765335C4C3D2DE52D8A5AEBF675B4380110A5D06F60627C9BA5DBAC58B962
687068E3C41835EE26B862904473E70C7FEC631FFBC94F7E8263883DB37AF56A
9AE782717640B645FF0FB80838D49C679BF894FE13F92BBB17F0A6F8D6BBDFFD
6E9C387CBED35DB152A6F8C37D1BF5FA702016F02D4E5FF10E286D4179C091A1
07C275FEF0873F60071E72C8217062E485B01F0E0BB82DDDAE2B7C146273A2A9
5CD65826FC401747EDAB7953826FA300FC161F0ECE080392A2A58C8B8E87DC60
B3339DD973DD112F7E1396E7CD9BBB70B3F9F3E60DF7F5559314176C857F9970
58B48C3915B61A588899BC950BD5616D8EB434A56783C680EBE7D091FDFDEB47
C75A13F5254975DDC3CFED54ED8F27C74A71024F378594756DEFD426317C1F88
E55AA9E21D5FE6D14B693BCFC69B8DB1A07A7126EBBEE4174E73540A69E3B979
E683D569021777A4D558EBF2F5CE4DC4EE8FB983C584757F69D52AFCB0D38E3B
BEB872D5C8FA7571A9439825002677BE2B7C184C2C898358C72F743DF71BDE21
685F9C39F8136BC72D5D062F85FF197F2526F199679E91F1F49DEF7C076E318F
12FE4A9432FEFAB5AF7DEDA8A38EC241BEEEBAEB0E3AE8203163E0EB8C417239
944CD48674A18FDFB265CB7876F008D83C947EE22A38E79C73E02371C3634372
A1E5D03AC3B71317CC5FF2B83A0AD8997EAEB2D0A9DB8F38E2885B6EB9855286
893A32E608EEC110993CFA0057D9807D05895A2B0FE04BA5B45A2EF7C5AE123A
5A33E80D3B6C63E052E95B3FB2AE5E9F0869BF74DDC8BA8AE76DCE27EA101659
B994369AF5905DF671EC5AB54347CC2018542F15A1B672D05D051CB45C2BD0FE
ADF0A64CD737A68055FFCAD34BC0943869B17BF0BC58C22E70D07458353D5A1B
F8B5AC265D275C8E2936251BEE92B765961C30BF45C42089A824E8BB4A29A6F7
A5494C6FCB59C06554A58C161E7EF8E1575F7D35E106D897A3E1151942546738
BF1819A60D484361FAF5691A739CF83CAE80C3C3868604A051879D7EFAE9D75F
7F3D2B195462AF98156E3D636B528E1F92F7431FFAD0EF7EF73B1C217A5AD0A3
8F3CF2081CC44F7CE21377DC71072D0641DE387B5CA69D77DEF989279ED00571
357C0BEFF388AAD877FA8BEBAE25A02DCB5FF133EEA5FEF61431DB068DCBEFC2
D6FCFCE73F7FEFBDF72E5FB1DC85C6383A9EE210AD4FF81A47223375478601C9
A84CE22DDE17337CFCF1C74358E4A6A7902B40C204982818C691935C9AA018CA
C7CE898B5C1D531D8E007EA0370C01534E4B04FD896896113F32F0F1CA941EB0
E6CF3BEF3C350183A895E3AEA347BF84313D1A70F22D44CA8FAF5C7CF1C5F074
09BF504B44521AB86060115A4FAD8CB5FED18F7E245386179713F2FA51EE9DF0
21545D2986DE1D1A1A1C9E3B00B3ADAFBF12BCEAB64A8FB2A92F1501CB15F6B1
B13CB619C04D2A21D9C4CE61753084EF78A399D46A939157E18BE2D2F25F3DBA
C4B92DB19A2E2EFB20731E6579DBE571EA8564B3DEAAA49EEFD2C33FF12758DB
918313BC31CF5A9E2C2999F4AE89779A6158798035ACC6D80DC035CFF2B1660B
F21767A31EB9DFE66ED1E69B2FDD7EBBC79F7C62E3BAF5BE77ED5A78C0D964CB
C7D5A2A2CE8D9299134B5389F2939B932003B9A11FF8C0077EF9CB5F5E76D965
975E7A29F618C183B4B093A2B78DADEA113C1E7B8FA1C71B6FBC71BFFDF6C334
E24F14AA49686117855A23D2D889C99914AA2C9CA117A1BA47B1ED8A09007F3D
F2C823A501F9B211235C9C37E575C896416081C5EA5B4DEC0C654D2704ED0C1E
382A984B7142F060EC00837372F4D147C38EA09267CB1ACA4D6698F96B98E58D
A1542EAD9606279BAD81EA20B46FA5348095F5454945FBEE466B3D8EFCC88691
6A151A6E62C992CDC7273CFD5EBDB571F3CD367FF5D557CE38E3F45BFEFD66B8
C81B366E983B3C3C39D10E5AD9BF966CBE046775C992254CF36CD2BEC6BB573C
166E74240A37ECB0A8578E67E683C776491682CBA438912FB80B6C76767913D1
6897AD2A914D24AD0BDE2D74002C9BAF7EF5AB56015B9D2DFB91346410C4F7DD
771F9F77C67132CA8111DAE48AFA191099450DC70791ADC7E5A050B0C8A6AE17
93AFFA80AD0DB37407DCD02A58A27E22A44285CBCCEDE1574A7CC68189EFC7A5
58B5A9F0B528F2A1097065FA91F81614C977BFFB5DA21F9DE9C13CA394D4DCB2
BEC586918996646A072A90306FD241580302DFC2DE666B6ACCEDB9E79E8BE3A0
BBCC82CA262DE2A38F3EAA6C8EEAC1584DC80BAA513CD91C312AAC9A820A5E76
34EA52C059D157D8EBC87A43B476B8207EC01E1375892641DBE984134EB8EAAA
ABE8491089AA02E23C547533CCBEC962234771A897531D20A4432534283CF490
431212C9AD5BF737BBEDF6E8B26570D69987E6491734ECE31FFFF8FDF7DF4F48
3FB941BAE210AE48E4B38E4E36AE20145DBB910291511C62EBE89A5B0E1C26C5
B5E5683D0B67AA9E48B9E99BF2FA1570714ED3D03D302E5792FE81CAF0F0D0DC
79438383FD596B53C9AF6098CEC7FC5B0A92B1776454F4069586EECA46C50599
496C1A24C7FEB0BBB452CE62DFF47A4E96AF7FFCC5CD23B76DEE93BE659CAA38
48759767F81704BDAF220E5230C370E25062ECB927EB7994D4E3A89E4575884A
7CD745E534C64AC067EA875F9B3BD8CEEB031AAB0E0F18EABE529EBF78D16B23
EB376ED8E0D9B95AED6A529A687788626CB74ABD54328B853BF4D043AFB9E61A
DA7F743421D6042D164CDD19702B360C7EC063E2EB2CE7DB71C71DD9BD8DF616
FE448A0F55F4AAE59D0A04C8CD40080B13BDF404A4D771C071175549E50531D1
17BFF8C5CB2FBF9CBA73FBEDB7C7E6E441204C87EB826BE233279D74120BDB04
CE557C858A831C2F2A26F2E697335CFCFC900B5612CD55AA1992217495A9BCE3
1DEF804F20D0075C84679F7D36E45D6A914B9B0DD852A5850B369F9C6CA54935
4D6A7996FA1AB9BC83F91A1ACE3DCD6C63120BB160E1BCD0DDC2572A0F0CFAEA
94D0B1326B6730D6DA5B2CD962EDDA5793B8A85868B7FAFBFA47C747ABE56ABD
51AF942BCE388EDABB34A09ACD4063EB9427CE5CD48B70A3A7E7C7E42E839398
16463FA863B0422CBE8E8AB639F9547ECDE294C64C1BD381A3534BED3223E883
3A125A017FC5C615FC8FAD26661C27B1C4181E3D0C3A40D273CA3E520733FC42
D160AB48675124DC8B0CF9F28460B7DD74D34D3EDD55049039ED44322BA14814
37DBD9D2F895CC553C80C6A047E105EB9563C0A1A5D32F435549A3C434F2231C
4F3838199876325D11E621D4D6626DF4033D5D4E14D3A8D48B1DC29A4076A84A
03C6A5F3823C6496DCF929A79C0271830B6293600B1D76D861679D7516E7198A
196F726F601E68CA501058E04567F0F126B4BCD8FB4AC1411195982D99509730
ADBEDC6EB9E0CE14FBF1A188F6E430B8A53D745264701D60858F734C4E4C4007
C3F7653A302EA855A178EC16B212438D8D9DE9788309F9CFFFFCCF8F7EF4A384
A16187C3D6111D95B6A5A223386ED86F04DE0BCE6A69A2BB5C0D95A7F3529C52
583FB4F62804BB2A9A5CEF57973D173C9852E25DCC2877D8EDF9E0506DB3453E
169D16CC55AE60E128707FCA85E5A40DA19250858598CEF4750B9D959BD17059
258B4AEDB89C472FAF5C3ED876F3EA6ECB5A6DB03E89A1A485CEF6DE2DD47CDB
AF63BBD54E5D043FD8078A33E8DAA854AD8C4D4E36F199249E6CBB3A43D6216A
DDDFCE6A49524BE09ABBF1566324CFB06C93B17B3CEADBD81EAF87BEC42E4DF0
3C91477B45D0E8968438330464DC90D8F6E79F7F3EAD220813929D1157C427A5
258A79C029C3D9C7B6E10EE1FED159D051E591270D1F1614DA44FD0AA9B0E04F
C3506692250A5DC818FC93C14AEC0BE98F946366B11C81965C14726909CC68F7
03636FC28EB05C48CB2D0B92D298C96972DAAB34237205B111850815B0FA92C6
A69185DA99C1F23DE69863DA455707678C88607242290E8C8ED5ABA5219727FD
7D73F07FE42A9DEC7EDE215D7ADF07FF06AEC633CF3C35340796CBD8C4E458BD
5D5F347F61A339064D8C2787567E7EC5739B2D58B07EE42F0DAFCF7DC32ED6CC
61784270E4536B03ECABD8F1B0395BA12F66F003B2F1D98F56D7CB260654F960
C5B176866A27E2A99DB96422B9A2B49F601086C5661C09B729AFCFFD44E5374B
DF6281B620F1A11A051A74C127905126520535AFD61DB96F6699073ACA4A3653
23AA1EA95D747AE12DE86BC281C33B0CF0CA3855C053134501440D042DB562C5
0A3CECE1871FFECD6F7E93E8153C02C91AD9D68258E5071E78007E150B4E98BC
ECA28AB43F8BAC477D4BF8EC843E915A84C4939C1C352639EFBCF34E3EF9649C
349C02461471DA3FFFF9CFC38FD45DE2DECD21E853BAC21AB36ADE12ACDA3FE1
70E188D177E40C7BB86F29B50A185E860B7F82A0573F73677C05A566DCD4C88A
95892AC7545B0E6B32528A95AB6157C3F80E810A2F4130605627B75A55F81961
FC6991C04E934D8A5F9B412D5D79713AE834F1E9045B3D6DF17436DE4E036EFF
FDF7BFEFBEFB20F52C804EA460B699152D89AC600FC694E25CECB2CB2E0F3EF8
A09B4A2DA0079F850FA097028EA34A5884ACD19CC030AB35B768F3B90B16CC9B
333864AB4B3A10687FBE3AA5472ED83D6CE12A2A3A57B0460B264DADA6F8B396
69BC1A27A3CDE42F639B570637BEF8D270EE16BBB4DFB5FA2AA9B793DA218E0D
3BCF4593D82C9E6AD2353378B76EB052C5B8C74240A556AD4EC04382F08F92F1
3C6B0600420051BBB95902AD558D53A8F3F1AC3DE2BC029E88A2E7D2FE46E25E
9B1C9DF4BC5F7E12AA956AD4CED26A457DA824816536C942A2002FA6A243D32B
2E0B1CF9DB6EBB6D8F3DF6F8D18F7E2428BE20C44CF410E642F62BDE0E328185
0C7168822E9CAC68D154E2085D861FB0F7441DA880333528AB54549DA84649CA
D2E238F32E96DED9156D758882943CEC32EC88F062DBEFD89059756C46181DE4
4124452ACF405C34EB880B6AB4D34E3BEDB2CB2E834C61B699C1589A00838373
EA93CDD1311CB374AB25DBC0017BE9A597E70E6C0D9F7864FD86A1A17971546E
B7A0DD9B3002B67ED3DCC03C370937D777B24CBCB93D30D80F0F75CD2BAB976C
BEE4A59757D5AAE54A1506D16B73E60C8F8DB4DAAE5D492A4C5FC1E41A9B189B
3F77FEC8FAB100B528B262A50EBF47E2DB23D61BCDC966B3113CE016D3C0A4C6
8CA6D6742A40E7A6B21C33E74A7F4E53C6DD43CDAACA6E5B513EE3D1A5ABE1A6
42195D61DF59F3569FA7E45565AA943D858B1531449468A31097FFE637BFF9C0
030FFCD297BEA4BE1A5DE53494B0EAD2A5A6B37C47D615E7539DD8395A463EF8
26838D165E841FF6FED77DA020F1F3F8D8D8D26DB621858DFFEB64A7DF2DF31A
96EF5EAC437C4CF148888F66F9F2E55D58569A1DB65174BB779306E13894CE11
BF922BAA9389BAD4E121C7533B3410D5B6A1F1470B83C313778FDD570AEC3B43
B22F191A17645ED375A4B8D248CDC1727E7CE5B8E38EBBE79E7B3060F621B7D5
4D6A0CD70E6D5BD876A9D73CE82B1C9ECC2F2D22A785C14006E2A827B8D968F5
CFB2CF25B634D58A2B0A42C5220B69FABCE06D15413F0315AEE85B47F81E3EF6
918F7CE4A1871E5ABB762DB71FEB956739774CE3B54DF33B9E6B5C8D71511B27
B4CDA1DDD408562F7062E448F3E911A3B0F6E3C4CD9D3B84A7DB728B85342B03
262B83538161F8D289A68FA8556B9510606870E7405C97CB7DB40B3BED878B87
A297DFE55C7AE33E6EC523F5F66075726C7CF39523C3F02FE2F61659DADF1796
B5458EB0B41D3BDCB2DE6A4D26B16F139C675EBFE25F12979318C27203DC13E7
53C5ADB6AFDA0C654B51E2E2E1B24769350240BA8E1FB2BC1102204FB978A5CB
9A708DB312E46B3AE089A8CAADF644DBDBDCD0A06C73C9A2DEBC376320D515CD
A6AECD2FDCB83D3E5C3236CE617C68C71D77FCD4A73E75E59557DA94B98E2115
AA52CE94D2B373FECFF8BE741FF33ECA08507CA949971ADBB86057D108880A2E
F4AE8666CE809D37398B144FF834A901F524FA10BF89BB52FF4745279F229293
071EEF688BC54BC7C626DB2D4C41B6D9C245750F73ABBCFACA9F77D8E1CDD0BB
D54ADF9A35AF7819DAD7DAB0717D9AD0AEF7171FAB8F95A21216769B6DB68667
BCF9E285AB5E5A7EF65967DEFCCD1B5E7CE9C5C1DA42EA399F2A188734CC0607
06474647FACA438557DA312DBD97802D946452C099473E771470146F6AA7984D
A54814AB995D729972F65B94E66AAACCF082624A332E2423B46E9A02B636B5D5
E21C125514D5005B525BD14609D285B1223885E568D80779E0577345DD37FD2A
D55932ECA17684F6FD2E9E04674C138C8A64F7A20D670C938FC048C0E09CA1F5
45931C48CA2659D530095907E0435CAB9B1A2DC4F5098860648978A87A484E30
3DFCBEF7BDEFE73FFFB9D0529141EFCF9EC3136A9DB60B66860A0067185A8D31
676A56E269C9640273F3E28B2F76C191255DA8568D9A8C0C38ECAC1217AD43F3
D02ED7CAEE19B750AF038F5BE3A9393CBE20DA186D535F175754FA33E3C0D9E3
44B95953095D804F359EB28D5F9C09D568F5F927C5BA66899470D3B2EA9DD3A8
8C1AB3B0D836909E789F05058A1BD94321E7C9CE0C8D7EA1B4A2025CCDC575BD
5FBAAC947A5E74DF52B85BE03BF746147008EC7946A090356B4383F5F7FBE0D6
D2AD97D46ABE17AA8786E57EE78C8F8F7A83268BA915A298A1E9662110620BDA
9210B09B272F6AB1FCFE89F378C3447BB06F726C74F10B1BA8809764C96025A1
E6F25A1D73986793D88D01E71C0542062AE05AE42A5E627A760628602C40333C
6F1C7A2F4131575CD6CADAF5CC7FB719B900D4F270D697FA861E1BDF900F941B
A38DE1FE39EBC637C2388A1BF5E1706CB121D52641D0DF59E4A1E4274D4CE1D2
5D61A76A1E2CEB915E74286DA457CB6437920D1EBCF11C7FAC2B4F01C1990ED9
EDA2EB22FFDAD557D085A00E71A35D7E5A0784658B225C114FE60DECC3F0C54B
C8A4951B542EF5CF9FBF70DD5F4630F30BE66FBEFAC5358B162E86B7ED5A7D6C
90B0F2E5954BE62F59F3DA9A3935AF151AF575EDBCDD57EDCBB3CEFC6E1C1FF5
DD0C63D7C826FBAB1598C2EDAC9E96A2B1F1918181FEB1F16862628CF35EADFA
B2C27A23A06D735F5FD16EC12DAEA6D8362E8661879F5B6E030C4C7CC62B60BF
739A54C0499A5B7349EBA40A1967E27822CF9B1EE8565E9D9C4D96D4A2D742BA
A9EE0EFFA70FDD5502C8F140BF7EFCE31FBFE38E3B98C0207D04578A12D326C9
B82284A258C49365661192109F672F39FC4A20AE94BDCA4919B7A171675B5DC2
1DFFB77FFBB7BBEEBA8BC93C3C6D7F1F56670C16363B4057CA957AA38E9D1517
905A2F4CE1B0929CA1D9223336E5A9A771D8B0C1461DA6973BDB6A1FA630A923
B5A119D762EC6E16C58047BEFCF2CB8F39E6185E5C25BC30A2F1A62B08E05C00
E6E0FF4B2FBDF494534E2196925E940E1B6B5BF1DDFDF6DBEFE69B6FFEC77FFC
C7BBEFBEDB15CD7AA9BF0595EA420674490ABBAFF857C539980CCE8AFA5717A2
6DF89948342E13FB0DE04F7BEFBDF70F7EF0039AD1D6989B3E0FDC75F4B7C42B
49B14ECB1DFFE3E2785F46B925A3C51D493F3EE3F585341415B33ACCF0B9A8F8
71652C2514B042267A2237B530121B9843C575B6DF7EFB5FFFDAF7F3C6D1A0FD
47BB84E1C45ECF4B674B55BF7C52F145C405FF86320256A05B293CB384CED300
EDF4FF3A89AA04DB209D3B3C3877EE1C883E4C260C456FD97BA6E876B3D1418A
64B9A82A19704EDD54D8A62B2C0C2B19E4C9794ECCF5E3D99C5A7D7C62F10BEB
E7B9248FDA5BE4D17039507A65AE09F5E9DCA4CB2723D7CCDD4860E4E8B8BFC5
3FFC3A542D07F7B7DDF0D02CDCC56B5F38DD31BEDE6C4E06C705FFDA514C05FC
AC4B5F885A90D4E5B8D457AE8D34BD953CBFD6F7CABAD7708E4E3CF1C43C9008
D1CC657DE08CD32611CA3A1A6E03FA185D717E45286D68AAAB3B96264A1717A8
AD4B6ECFB24F667CDFC24D225347E40AC032AB95F8388459911B8BDE3693D392
0C76713BCBDAF530B285A72B0CBE706CF061717AD1A6C010E70C6DF6917FF8D8
CF7FFECBC8257F59B7E14DDBBD19175FF3D22B69D41746D338EC0B87DE78E38D
F3E6CD5DB1FAF9BE725F3530EE552AB5C989063E59ABF537EA011DD36A8C4F8E
86E69BCD286ED5B3F1729C0E0F0F4DB6DCBA0DEB3C482F2DC36D86ABD96C37FB
AAD55A1526FCC66696D7D2814AA53F6B43019771B5A65BEBDDD1A080DBBEAFB4
A7DF0AC723B30691330AF5C0030FBCF5D65BD5FA4ACE84959836C7CC5F056679
FBDBDFFE8E77BCE3861B6EE8B5E1EC4CDA4065D7D6E10F140DBBEFBEFBEF7EF7
3BAE88DD0A3678AB26924B972E5DBD7AF509279C8093F0C10F7E109EA22045C4
D6F289449DAA0B8A3A982432B4ABC88F4848B3881138CEF7BFFFFD7FFCE31F19
528EDA1E4A363E315E2E95B9057D18A0516F476E60707074E3C65AC06D51C04D
8C8FF7F5F743EFBEBC660DC13BFE9121DD20FA87BCE8677690ACC5AC58650715
4626287A441B42CDC4F8A41470AF83C40C3A691FF003750023603463312A961E
12310E718F6F613054519681CB9954FA5BDFFAD6071F7C10530ADFF4E0830FFE
C637BE1105BEEBE5CB978B39B62BD632A3F6B5E70B16060BB1D467F7BAEBAEC3
D8AEBFFE7A968653F78B669C31708C131A8E7C4F6E564390EA47FCB2DC6C5069
2FBFFCB2253190219F879AABE79E7B8E53C4B2E65E841579D1754A9E25DD5606
72E813731FDA923C6A4189577D975620671EEF10B22E6B4C5B77B6107188E2F2
1929AC740BC593784CA8C8ED83CC1EDCEE8C3C2AB7331A0D4E0704DE6D12C15A
1ADC6CD1025824213DD9B92623AE747CDBA14561D8D50D1F122E5E5304748810
280B4E05EC5F799B0AB83951DF72CDE87C17070F389AEB059C8326ADE7ED0997
8F47793D72EDC4BDD674B014CA91ABE61DED5B76BE01D38272022F19C2B1E1E3
D6810C2B2860CF20DD685001FB5E4B2EAE471E13FB7C547A3E6FA6F30646FF32
3A6F70EE6BA3015257AE64694CDDC9B23189A959EAAA35BDCC2531231ECD5442
C2CB0AB322A94564FB8C061355606B6A17765975AFFF65E11DAACFCE8B026EAC
2C2B9B391E322270870BCA804D8B09E9B82B064F37830256470BD7DB22C88BAA
A6C4F45C0C6729D976E9F6CB57AE18A80DF7F7E1A04ED4AA83F57AB39C78F13D
91E1B8E6D5249D6C8F2F98B3001728456C3B551E1B9D08594C389DFE3AEBD78D
CC9B3FF7E5B52FCD1B1A5EBF61EDC2050BE001C3C12AF779B7A3DE9AD871FB1D
9E7BFE9976DEFCFF3EF081DFFCE6378303F3A1805B795689BD02CE215B926A50
C0AFCEA880BD5E9F6661D9108728B661BA623C5D8DCCBACE2791C6128522C39A
5110CC3EB13647981BDA17C2F078056A0E861CE08C6281A17431DAACE8F3E30C
BE94D914F82B30C13EF7B9CF7DEF7BDFC305F97490F2F80A795EA09E21B5718B
7DF6D9E79E7BEE21E06EC696882A92710639CFA782FAF46D412727162E58F8E7
B57FEEABF58D4D8E8B2E87995D4267375BB4E8539FFAD49D77DEB9616464EBA5
4B3D127E727278EEDCF57F59A7A9E0D1A2C65526982F457D2D32CEDA43B38422
DFF296B740AFD3EDC3B7180060B1D669A79D76C10517B070D6154486AEE8D744
CD21E148CB574DD07453757DA0D74559694DE6E921AC19BD615172528E30A0CD
B5E0269106C2C0481F8F67513C9FA646AF6D468F995B8B73ABA8B2AD86C21662
4717FCFACFFFFCCFB7DF7E3B761ACC11CE361FB3D7F5713558242B57AE644B83
73CF3D1757BBE4924BD4788E162161A56CC8C12712D13757767A5A5D2F4A2A99
68B384165577949836795DAD57E92233AB42CF58CACFFDB5579290046D130D40
E780783FD897A50E0E0EE07F5FAE9972976605AAC67F1D3A98FB1CC289911ECB
E4A5DD45CBD27AC0F5563B1A19CF866AED467DEB3F4F2C84C64FDB4B5AF16038
0D54C0E3B9479C36220F6EDEE0B9AA226CA6B29302F6439813F93AA5A6EF8153
B051C67E787D304D1A3E7818E03351C345132EC30E5B19147069FEE0C6D7360E
5607E66FB564F9B3CF0E55AA1B26C7A54770BE28126D43AA5E52D4156A4909AF
190F85B20CB6F055A7DE1983895B9426E6F4B0F32C865AAF114645CD6E6EBA6F
D99C9DCEBEBA2832DCC216E3448AF025609D9345E84C0DA57C7C5DD73E615480
F488EA265D0E2D171F7698B368DD5F46E6CF5F1847A50F7FF8A3FF3F69EF0166
6B599E8DBE5F5B7DADE9BB6F606FAA084462073DFC62ACC9D16308A868C06305
454090A6C22FC5129A28CD02BF35B902C18209B12497F8A368148510942E65F7
993D75F5AF9FFBFDEEF91EDE5933B335E75F726D67D67CF52D4FBD9FFBF987DB
6EDBB2F9C0E6427BB639B775D3D69999BD9A2733E8C176DFBB7752AF330B1B63
910608EF45295F2C94A1339DC546B0FA659ADD79276BD46579F084464BE5C213
4F3D8661D9BC71FDF69DCF960A9AE2A3D7F5A324F5ECB2E7962C05E7A080EB84
6A76C510F4F2FEC41C532292A8EDC8C03250493930CD62BF73CF7057EC63A9ED
6382655E854B8B3E19A592492925461F45245B1F426E0AF68FF13A95E1D8CD13
A95106C0BAD42BA25FA19F7EFFFBDFF34FBCBE4472542E0D312CA4FE967C213B
F3706D6DD9B2E515AF78C50F7EF003DCCB2D785CA0DC30AD66136691EE80343F
FFBC238E78243B052F13F97EA95AED773AAEE34AFB263C3C2E059F12237CF6D9
6793F7945D4AB8F459599FE6843262900ADFD3F20F031B100D787EBAB3647E96
EC03B1E2342BC997042DC819A1AA602F7795BB8662F1109454CA3E9808FC8A7F
B91EA4D66B79085A5A400EA4844D6895046FA5D602F32529068E3FB6D55FFCC5
5F7CE73BDF614095D301E3CCCC169B1FE92C24F90821F2254E905CA118E1E38F
3FFEC73FFE31161BCC358C332CB31B6EB8E1231FF908FBAF0C10959BEB998BCD
842648159995779A4AF2CE07F498C936CFA08E9DD3B55A06552A3116EC24287E
8C487CDCD16C016E7EF027189AE4065119FDA45AA680550EB7540628FA4F54C0
6A69CB67994A27EB1D683BFA16D56A199395B5AF77F00D8141D9C111512361EE
011372C5A914E0E4229F415E4FBC18B7568B216828E0FDA7BB6BE0CD3AD186C8
6A140BD9235951A2A3CA3DA5FFC534683F519708A78C42EB0685783A2B2DA650
CFA94EF1EAB60F9454BA57EC90A3FDE834D6CE74004F5AE15209C67A9BE56DB7
43A8F346A51E74FDD7BCF9AFB048468A255570199C301B7CED5BEE0D24DA39DD
02C837BF4C97B55D126882BDACE59AD870035A7C1F6127F5A72960333CC3B54D
5B9932840B69EBD6AD501C98D39B6FBEF98C33CE60C66A20DA6A1978BA45D3C3
A4705A6E4E9ABF72BB520D28A37DA16D150B05CD3A393C3C562AD6A62667F0E4
DDA0BFDFDAFDB74F6EAFB8958F7FE2A2CF7CE6333921940B1BABDBEBD0F6B432
38BB3645CBF80BFBE43461D746A1A6069C9D9D9BEBCCB9AA5329975ABDE611CF
3BFC89271FA9372AA79EFAB7DFFAD6379ACD6EA26954313CF0ED35DDB4E7EA80
46A4DA2B82B0E00A0FA852910B4239F695AF7CE57DEF7B9F6E6F9237AB52CB62
C8E278717029B86944FF299B563E52DC25081189ACF2B27C4E618449F3D272B3
EC47E80E48AEC69238225759EA8EBF923F4470809C4122A8F1CC82D45746473F
F2BC50ED89A5C518E973B13B3F935FCC6487E1A6FDF7DFF1ECB35EA984F505B1
51CF5DCC2E1F2FF3894B993A8129D71819A15CD65432D333A60893ACF0C5175F
7CD555573129409B174F057528D5FA92EC315DC31537D28D37DE08FD21218A03
0F3C900509C447489C9F89407653217488916A2E75B30987C9B72CB97C12E0B1
34C26CF43D10E1302DFD014921BDF394017C1365CCE1227A88D7847097AC1031
5CFB285753794C85D38ACB526E92235A07AB723E19D8404F3DF5946058A89F36
6DDA74CA29A7C09DDD47D9151E9EE3C3725B3C1E0D410C354BC5F86AA405B5F3
6EAC248CE4DA66E592197D950FC71F4E39ECBC8F7EF4A39FFEF4A7D95C64B5F7
85916AB661A66BA28CA63D12DDC5AF7824F82B82BF356DA67D0C267F20AE30DB
CB8B7FC8FE4F73E542AC55B34FA95450564C98241E27DBC2414E3853126BCC24
CF92364D1C8AE7A2296E319D6D4301477EF780BDFD0968083B5C1FA972D1D350
58DD704E236AE234E9C73A06D8D508D954B74ACC52BFAE4EE26ABDD20BE30432
D1D6F231CCDF066F3D9AA45A493B05AD8093A40D7F5A257D4B4D971B8F749BDD
8286750D551A56555B3061AB69656920A14DC615B8B4F6AD80C5961225676AD9
81D8324B30C4A5361BAB2B235E22A0BC8124C29F9250586D7EC516140DCA82CC
430F3DF4D1471FE54E37838562DAB2B12C04266940CC975AF4CE45EE881B91A6
4B1AD4AF6844B06928372DF69896DD1DDDD00D5306BB2D0A61D5AE2B781AA51D
0531B1241025BAE9A9BDC8799DDAA566733E731F6D6D89A571BFAFD94C023FCD
02E8E3AD66AF5E1B4E348F8B564BB633AD49FBA28E6ECF12741215D6AA30ABDB
AE53CAF496065DE3EE054FDB01BA5632EDAF5886E4B8A94C9819DCA765008BE6
FCF3CF3FF7DC7359864B64935AA6AD65CB898C9039DEC782337F95C358AF2600
772BAFC7E5F1746844E34A923EC9BA77B1588D8D10840948E5194A096C905F97
ABC1E4A1148718B38919D9B66D1BF965ACBCA509F3AF3441E8B5F0439DA45843
557029F1B5CCED7627D6AFDF9B056F4B5EA1DFEB8D8C8ECECDCE8E64CCAE599C
2D39E8D0439F7CEC31E8697C33C74E9CAEAE5CD444B4D92BB36B2FB51A03B9F4
C9F8B492A41C3081939CAA70B53A4E91ECDC1B5439DC36787D2C4E2803668531
9E6C1E4062933427585739970D3B1988034A4A07DCFACC33CF84AD80BBE082A4
1091A08818E66A5919925A8AB410D58557C67C41D55D70C105783CE29ED80043
10184C7F8AF74F31CD4CED6A0A122B9CD401B80B5EE184134EB8FDF6DB856480
4DB5A923A16BD9B8825B002F8507C0A6302B8C575BE75C36524187C7C635391A
141D18E1D7BFFEF550A212A4319D03F166046B2AD737913878171667EFA31906
840F2B2F55AE2325642D03CE7585BFBEE10D6FF8CE77BE23B9C33F45012F4A15
D8FE8552260D168B5574977BC5D7C918068B2EDB7F5976C446F1C5A297ADC934
CF7FA7522E6C72BA89B7C4EF2904F4C8789574AE1DD50B50C0FB4FF6261C3BB1
8275914A169B1AA9A2ED96BC8CD421D222B9AFFB2CE0A2B19D5131788EE5660A
78DA8F5262ACAC144227CA5F741406132EE2C20C72B0DC5B49D4B192C0524F25
D67CAD38D9ED8F0F8FCDCFCE459682191D355B817A2EA4B1221FCEF27522E24E
19550C03872DF7924D1CBB5A29B547C3343108C8CC75F527CA67F94831885ADA
B5C8CA3ADAC1DFA5CF4600016E271CFED75D771D762EE3C469DE60465EEAB9E7
5106690E8FA3AE5E4D901160E2E48D665FF18A57DC7DF7DDBA96B934D46CB7AB
E57AA95809C3A4D969D7CB43AD5ECB56DEA6F59BA07A5BFDD6BAB175DCDEDA63
28D548A1899D3F353755B48BC71C73CCDD3FBF7B62689D7E429DADB01DBBDCA8
8F4001C30956B60E29C7495F5981E3E990491CFB7112F4FA81E77863636BF74C
EDAD141AD0A449ACF992FA613708FA382555519206195022A6D53934545F5868
F1358B458D60CADCD60412E7ACB3CEBAF4D24B258526F140C91E99AC6103061A
AB0B541EE662D88DE25EDC1DEA4E9ECECB4288AC5FBFFEBEFBEE236D9EF83D74
50B8924C394EBB72CD9A35D0527FFDD77FFDC31FFE50D03A8CA7894A603530BE
3FF1C413FFE99FFE897E06BB6BE15C7A6FA2C8A5E0C4ECA5839F8F3AEAA8071E
78404BC9D4CB83A584992CEE9F28C9B82DB9DF3C3BCD887E0A652FE88663E3C3
33D3F3D55AE5D39FBDF2AC33CEF02AE5356BD6ED7CFA59F8987194681E253F28
96CB4114BA6EA15176986E67360E6BF7E69B6F6609AC9377C015D129580C41F3
92DFF5652F7BD9F7BEF73D930E53E5F96C0E26C303F499844D93782E8C392E45
2544279865B8185BD1FD027C33A352524440DF97B72B65996FC265AC9C024CD4
00AB6005A06EC2EBA0BA30DA5295400F58189825F324E63F9341F82B16129B16
13212C716C955772F35199A9E27832A34184943066E0D9AC0C02CDB02D516959
9B5B5F72D2745857AC17A7E0C3335C74D145E79C738E746D910529D6245B5C08
505F4C43CEE96A829B7B41800E03DCD1E4E2E096B10D627D1399C11B89A761E5
BDE5F1BD964559A64624B5F8A022A657343E1885E2804BA729337728DA027A17
3B6E6474A8562BEB805F015350F00A8E1DB98234946224097D498F1DB1093C55
88FDC88E1D3C62D86939CDB97569B2B1E0C1742A2BABAEDC72AA3B48472A8CDC
34F6ACD0B7D93A1027971CFDB4307971AF661C6A2BC072BA56DC828F9BAA82FE
CF2A3B69D576AB96EDA556ACAC769ACEC7713B4D1E2F37A67BF38E5B6C45BEB2
2DAF5C0AFB7DDB7193209456831C13E9A12B194C13036582E03889A6AA53391F
8B49763B90705DAE1DB9B4E8C01C7CF0C18F3DF698C9256719ACAB2AAF7C9124
B14878D3E932FBB9C98311E3CDBB30F069658430DCE9679C71C66DB7DD46BB93
A6304F842C85DCA6817BFAE9A77FFDEB5FC76ED57BCD74FCD5525F7B1FC68B98
B4CF752F09AC6C65FB63A36BDBED8EE71535205983E9DCD9D66CBD54D7FD8AA7
76179C02E551A22C7A6FF5BA8EA761F25EFAD2973EF2C8EF9F7D66D2730B199E
1962DD2D97E020A653B3D323752BD634773D5D996685A9EA43AD2669383C34B2
676AAAE895FD302AD8956AB58E5374F4DB6FFA3EF4999F6A0C4194A581B12731
BEC54E67719FE3F19EFFFC23E1626653ABC16CD0C1183BE10294CEA9B274064C
723354207A22C9A98F856FC5CA5B422AA3D645EAB83EF5A94F7DF2939F644893
0D61E08D5979C76FB30A456EC744353437069F05B21849562DF3EE69465DC9C3
245FC816374C154BF657B25F0C1E724B48B89524C95AE1A59EA42CA98065D56A
551AF46C18194AFB2241CFB73D2BF15358FC1A8B575D6C54F0A5AFDC7ADA69A7
D9C96293F662A9E2F7FB4EA1184338E2FA892FF8263CB91892764E06641A22B2
2189742031A1CABC2BFC4C4B9C582467B153F5226B1DBE6150DD7C59527CB0EB
30B5264E810570C30D37501FD330153E5B692E2B4547D848BDECC34585539889
900364EFE0002C7528CBFBEFBF5FD889E5BDA465162F421166B69894D7971005
D78CF02A9B224304D64060401C415A84CAE0E3A4E168656557A95110C1E7211D
1BF58132A0E003F5E2E4D4A531074347E511B9814E8E03DD7F9935B47346CC7D
8019712F312ECD6A4B3BA777B5F2E68F5C09A4EAE461495EE6CECC856491F8FC
CCC29899201299C9402D57C0690EFCA102488D160BA22CCD986AAA017A857A03
6F50812C2A57F4962C958A2A5CC25829254A0CC0D089E763D040F4C33409E1CE
7AD08249BFEB2DCCAF0DE37596AABA0EBE77B3960CA562C1762D3F09FA415CB0
32384286FA716C47FCC85692B80A0A587555DAB4520CBA97E05C55B655C9B6EA
167672EAC75A376B2A4AA51E2A549B4127B1EC42A5DC0DB49117F9BE96D7E50A
6526BEA1FFC045452C8BD48989C5AC72D01F0D2621C21306409A7D71DEA140D6
03B36366875D195B0136E282575D75D515575CC1800D6F447D2F2234353A9A8B
7AC6913A4C6BE4F2B94A499F8995C0FA49AE22D94156CE434C80214C7C2F0FC8
9B8608BEC406875541C802AFB3881623C095B639AB4257DB00F2585C6702CEB4
5277E3864DF3F3CD56A7D3A80E373B9DB1A189998599CDEB0ED8B16747B558E5
BD717D064E774D4DEA66BD2AF15CAF1FF58A6E11B6BF6EB7E2D63192C542054E
30847EB9D4C024B69A1D4C5C924201F7A3B813C5ED4469358CC13CF2C8E73FF0
C0838542090ABBE78745A7323434D2D33A20E9F53A7ED8D3F1154BD7C8A78B88
7AB5658B667BC731D9EE0DE804303428124A10348CEF9976898420CC30910C8E
59B6247C2878DF534F3DF5D7BFFEF5A38F3ECA819544BB48525E416283AC9894
88872C1482C5F833F48D6E5F61187426E58AD9D0104B87746B04FA8A61416F46
BA6932ADA072FE2089D4E9D516F21D9923924851922A58C35EB49898490AF068
FB3DCBB51B5EA9DDC9DC3B572368165ADA0E8590EDB4741572CF0F38F8198561
A8295CD2404AE5A45253220D03112A919BB2434822C8D3C53DC22DA8111912E0
352568C1A4032F220D13190067C68E4068897F50045B79E119E1C712B4504BDB
0030532B247103B1351A40C27DC17EA5B2E72961B17808FF86C27EE52B5F79C7
1D778821621AECA4E3A080635CF7CE3BEFE4680870544EA4D490F881E8690EC5
F28499C9404473417A10EDA35E5CFAA088FD273228DF6B4AD66A92B780E45C60
EEAC0C61AE56F950F2481D9A38EEFCABF455A4A32F53234A9752D8CCB2098C43
19AC29A295050F2F255BCB3DE08165A90CE48E99ED5386015D84130A3FA3E032
3D0C95DC6FF9F44C28BBE5A9D8928E800C8A17A23E3B01CCA0082E480A6B2A0A
6A9DDE86486D84A7A5F93DF42E751DDD0658CF7556ED54750A79042B4DF2D670
D0BBAD58535FA54A136E34551ADA9907ACEC729A942DE8605CCEEAA631E6A3AD
5B165ABF5069A1046F278CB236AFF078BAED8E6B3BF855B8BEC5D2BDECB2CBCE
3AEB2C93C0400ACAF9009CA00F7CE003DFF8C637A433A6891E151A7CD1C132E3
120D1AC80F8A434CC222E2A5212AC9D610E50DBF251364E7ED77B985D38CE01D
F34E3A209AE01298B4724A007E691A9466644E7852F12F7C713854424B22A790
BED032990E376EDC78C821873CF2C823FB489E9BED44240E86CFC8D0E8FC0246
CDAA551A69E274FADDB1E109BCCCEC427362449358CDB7E747EA238C97462A82
8A6558CFCE692069446CDE74F0CCF42C3657C12B63AE5DA7582AD6607FF7DA2D
EDC8A67E10B6F05F9C7631E9AEAB3B90E891AA0C61F5B65A580AC5B1B1B55A0E
F6E6B5028EB402B6B5C248323020B719552C0D6D3D495825975F7E29F5199785
5964C54992AD255A59A09226B8462C3B76A7A0FAC4A520E20780A9D40D6CEEA1
F28621D4FAECF038A07806265848F665FAE9D561E95050BEED6D6FBBFDF6DB31
C70C3B8BCD65BA230C0C62E9735D9254442D8548E4F8808C384DFF2F5954BD14
436E51A53176B056E18D6ABFDB0B026DC91633DB4E43973BEDBEEE66DF08FCA8
8F3F5989ED41A647A562096A586FB940EBB63409F8D66946FA4AE743A0AD03A9
382B6F172F5C60345D657FE280F5EBD793B59FD259DA4011CD64366FE0AEE344
D00AE63230E9DE042A2C2827899BD16EC01832B6CF835908C8C26295B722A728
9157108C121E92951B586F2C0DA224623530FDFB3407DF492A4BD6DBE1871FFE
F0C30FB36FE075D75D47A0B26035F96A560E3F16A64311F10C2CCBF898C55DB2
F6B8D3F92B4D4086EF96D78B733BE3678C3054173980B805E4480A567A3F6C89
68625BCC615F51FE70ADDA461B318E6D9C138C4B208AAF0CB1B663C70EB31928
0D5919C0742910DDCA09B6326FB544F3880A78B9F63527C254C3664A7B29AC97
FF59C43C38BA5A49EFBB6EBBCFA7226A52681864C1988F97A9EA42A7DB6D6B4A
675C396DC4EAC0D8D9A0DC71E56B9073D989B5EB9CE08F25CB2E7A2547B353EA
D3630E54E60ADBAEDD8EB4076C6555461D8DC3D29CFB45ECEA3472B35A6158D0
BD345948D4824A7CDBFD65121202C235562EEAAA7A27F399485DC7E48B54C772
75D14913E8AE24F27130D63F5126C40DD0F4B7F3661252FA2F5E0AC9B6B07878
3B993E73FC65B848BF2CB12E953B3CE2587347C820D3653AF4D0431F7BEC314A
F238E387C793937832C929E599B9130BDEB4B7049B828BE382471E79E47DF7DD
878DF0F4D34F538B4B9465D14E676F452253366DDAB46DDBB67D70668AF128D9
506E4E3CCB6DFFF84F279FFC4E98551B36ECD76E61109D99F9B975E31BF088AC
DF874C7C7AFBD3C3B561D8BC8F3EF17410F9AEA59B04C3CE7674FFAB686464EC
CF8E7CC9E38F3F3E3B3B0FBD8B850DCBAF58A86A2FA1ABFDDDD4EA8751DB0F9A
50C08E1B790567BE3539541F89A314431146292E582E57CBA56AC79FEBF7BB61
EC5B30E1EC9821682CD64AA5945731DA595C712DA5BC9D31C371D789D792E658
793194C4533137B0BDB4AD0A9B0DBCEE75AFFBE10F7FC89A3089C630BEC774BD
985D4C49AA3C2F62D6802DF7B3053D2435A614D310FD7224C537F401FDE317BD
E845BFFBDDEF887DA39FC70EB24CF291715ABC490910A9C176C2A4D2A4E3FE9C
C4B11D2F893558BAE815366E5AFFE4638FEB0E54B12E6FB02DE56747619772A5
962B9566B7A37954A2B458F07A41A869B3C24C01A78B092171DA0664A232624D
947A5FFBDAD7DEF5AE77E19B9B6FBE195A87D40D0C3CB0A121DE05DFE3AFCC59
0A0888A044AA224DCC5B2AC158F9D297BE2448633C89F41A634CCCCAB9B2B9AF
2EB8E0824F7DEA53B457F03D2CFD8F7DEC63C2E874C20927DC76DB6DD246491E
5B90F374D1240CC86D2FEA010AE394534EB9E5965B606150CA505D99DB50A223
24D0C0B978F8EDDBB7D3E849B2AE6AB43CB856998D369D5DE1C8E5225F913324
C909B1A5EC98F167F96679BDB8D0748BFC25CE806E9C988C5CA23865BFFDF683
7F008180172417BDA40357933F2A070A700789A9215848FA91FC06D377FCF1C7
DF75D75D149D029E9732303147E4FA828931A3EE52946FFA5BA2ADFF74054CE0
55765F0693F2097DEEF4E7563B4E823F2C0E80B9FE1B856AA7DF6B07FD58C5CA
5123CADD9CB86B63774DDA2EDBD0822ECCE2B01F59DA9D758A56B16BF74552E9
0AA5481BD4B83814B0975A8E0635A76DA543D00E1C5F3CA695A449A6B23DB76F
3BD3513C9B25FF1EB513ED625B163675A35617DC86E5E89D42554AA23A2A51D2
DA083381CABD5EA926C00E85D548D1E4E44D5920D37098205ACCB2311C70F4D1
473FF4D0436C88C45CC9C0BCD040A719CD76586CB480CD42720C1ECC81950095
C9128F07E323A92C1BCDD2797C033F8AB95BF2102779031B73193018CEA80FDE
E2A0830E8227E6E4EDC2246BB3280D3816EC7C2E61679EBCDA0610F49A591B83
C5B2FF7EFB6FDBB623635371C647D74CCFCE0ED74718D1C1BBED9ADCE56AA7C8
C5286CDFB57D68783FBF0F1FAEEAB979A7C204CE4763746402DA888CFCF4E259
0518E9C28A24557E94B4836821497BB613382E0C3A3DAC7B76EFC5CB62EB15F4
D5F4864C6C8DC082DEB56C9C156AEA993C045DAF6B2AC45B6EF95FA79D761A06
1FAF93F92E7B85EE40CC25317BC5FB142884A9802DA3AE89213B3CF081071EC8
025913782C1FBE1457158F67BC02234FC6DD81BE5722206427D3F9938B33FE49
2E492987C71AE5F4BFE52D6FF9EE77BFCB8621C2E84B424A8D54CF0A8A52A341
AC098CCFFD7B799625D1D462C18D82A858D074DE9BD6AF7FF6D91D1A63E95956
565458AA78AD6E385CAFCCB5BA25CFED691309EB0D4F18158A6EDF8F60790571
466E9AAF7E6E36B3A47DF920705421A9CF3BEFBC3BEEB8037A8E2292B81E4692
210B285BC97CC9A411C7848A56F61B8E871A80F6BAE69A6BAEBCF24A8CA1D9F3
510AED78533B231D8372C5F5315C5093EF7DEF7BD9A551973B6745BAB0E577EF
DE8DA1BBFDF6DBFFF66FFF76792D8DCA82DEEC89466DC14984F98B7B315F405F
4130167C4E16440D8C06362F83587854F603E7AC510949851B1E8C202333D562
820C4CC4E94064EF2FFFF22F7FF0831F5C78E185181F8C1E6EC7C396D78B4B10
4519D0507AA86610D232E0B2D75F7F3DA940497465AD540969CA1FB141995FE7
AF5CB474E5252AAE32FBE6D8638FBDF7DE7B95E1D68BF832F33B7247F92B4D3A
BA6BA6845DAE6E07F6A69577C01405BCDC6F564B9D5A93B065E03370302D8334
A38E847C8BED04FAB3945AC3915D53E9817077D3B0ACA2BA6355B0D352270ED2
50452D4BB765756C5580168C9320D29D07617DF7E2B094DA8E72A2141E70D2D7
A54A70829DC4B5D9402DB29DB6ADA6A2785E597063672DF83370A7A3AC7454C7
B275FA667E6E6478B1F05742AA42A12323C9871718942C72D8C424EEE0F7D8D1
279D745292F5EB843728800F19CC238E38E2E1871F66304F2078CB6D476A6BE9
3B6E4EB4097D302B30F1A7A38E3AEA8D6F7CE3D5575F8D2BC01426DA439AEE98
904349F0CB1DB96C881BE5F5A595AA32226A14DAB4862DA1EDA0ECE3A348C3C2
E51F0A320981525169D84EA3D66AB537ACDFB873D764BDDAC05B43FA958A950F
7EF0C3B7DE7AEBECC22C0C3BD776A95AB48F02A74239D5CAF0F0D0DA24F2C2C0
2A15EB90099D7637087DDD2B5ADB608157801CD16ADEF24B7064538595D30AE3
66A23A590E18AE6FB35828CF35E787AA63FD1EDEB65129D7A025E75ABB333672
05051C27BA1E49C7A26DCD0F3737B750AB55FAFD20AB016DE77B35A1F720D296
533E0025954C8CB9EB4C3F7839B28653C2E8BF6871B91AB9B49823110C0B51A3
ABF97FD02258F458DF0F3EF8209193EC92CB1719CF59D15FF08217DC77DF7D74
C7A9122871483FC4076683614654B807F8CA92E110134D27961605D092605AC9
B15CCB0E82D8D66DC0B3761CA9AA963D4F2FADEAB63D738DB23DB176ED93CFEC
3EF4E003A0F6DAA18E696B430103D5F5B156C32823553014304798CE872C4E19
0A9183D8B7B80E0EC33EC15667CD3BBEB9E9A69BCE3CF34C46776872329E4FE7
8F941AC439B325BB90D6D242C75CC0C1FDCC673E8341938E08A6ABC76FA0FBA1
7D19DDA2EDCF841307108741FB9E78E289B206C48FE182E1E6FFF33FFFF3279E
78E23DEF790F9C0049FCD39F236719E7944D70B98424A0628E09CEFAE217BFF8
BEF7BD8F17617F37499472AEB1AEF046B8A6198533299165192BA3AAD2D4A902
9B12A4FDF27A71959766D2DBE0333091C1E7970EC45C8DC4E04899354DC37DF4
BD4E33AE6C46AD2973656AA449499AB7525FC4B92CE5D2123F9E650B74946569
C9C13C97ACA83250CB43D0E9328E08F35222A35753AB6C21A39676F192781B65
85998AE22AD571FBBEEE07E8690D986619C18C6952A98D5EA91C06E32A596BA9
F182E758B61F249D246C3BB8858E62553CDD6130862CC25EB3BDC88ACA709195
0D83B9ABE29E6E8CA40F9B87951C47816E41A86653856DE0DBAE536F745AB385
523909C24D1B363EBBED59AF50F0CAA54EBB093F9CCA5560DB981726F518DDE1
8E56B9774710005E04561734023B9A0C844944CFD1A566DCDB1C43B3ADEA0046
C44400D0BDE11E645A97B7E6CA97049698DAD263464C766584A3F1C0D8AD279F
7CB2E4927309F91CF31DEFCB9E0252B42958512C6F1AA67AE5A89C094BC8C0EC
7D308FE76A401A89C8A2B4B2800646094AB754ACCE379B1BD76F9E9B85E7BE08
269C5B98DBB87EE309279CF08D6F7C436FBCD27EB0CED3B858298F745A71E8BB
13E39BC2401B63D56A19633533BBBBD99A29955DD85B73CD9975B5ADCA8AE1F8
C6693B4A5A71D2CE22229172DA610661D96FF3D6A7B63D6B296F7C684DAFE7F7
A3796A719C1E463D3FE84919D225977CE2AAABAE82DCC882B1DAE816BDC2789D
ACFB24EFEDA372526841BE89916E2A60CEBA949C62A0F13344B3D9303C27FF5A
2C73C405A5B11DA140A2FF06825DFC55EADCA5B2C5AC2213EC92D96A90420D53
46D209A816280F7A5DAC7CA5421A70FD071A79E2A118B1CB1F29FBCF565EA436
6D1CEFB4DA43D54A737E7EC3BAF553937BA092CB156FC7DEEEA15BD73EF3CCE4
E878ADDF0B665AC1BAF1DA820F93DA23AAA299C9CD6E0F7BC3F6E384AC2C1224
E4330CB862CAC0079572924B890289B32BE5311801CCF545175D2421DC3407C7
A99C5C93812C9264B11E89A0536E3076C83181182C1097D21DB2E170EE482B4F
5780D791853420857105D8DABFFAD5AF0859C2AE86AD4DC5265868AA13B1A8B8
0225ED24321A0F004381BA8D8A50F2D6521C2C251618799A1D826FA0BEB79792
DF0992459C3F38BEA47691D1B056AA175746DD171715A7D5A42E5719B9187F65
46809696D9037B3510A8CA5B2C9BF6287E15F0202D152A695C070ED9934F3EB9
75EB563C1EBE918E581C1FAA6D662EF811B816ADA877BCE31D7FFFF77F6F62F7
D4520FD808112D49432E5FB1A25C8D8B2CCE205C915419C7642C5A499A072A1C
979D3A4D305737E9E18C429468F96A6757B2B50C83441C556A8B6D6D52E970AA
EC54535162093675C356AD59AB50DF291C97D0D69458F0891228E00A3C605D6B
A47B1A279913BC2BCB07630EE0EE4D6A7C968A4AD5FADAB50BBBB661BE3DDBBD
E0BCF3BE7BE79D4F6D7BA6D7EF2ACF2D248BADC018CB617F30ACE4534F3D1503
4819C87528B0792931A2A2D2BD1AF322580E148F3731FCF8123B65E7CE9D588D
981D214B5F710AECBC6F20B90229578F3EFAE83FFCE10F2C3623713D751FC796
1BE4852F7CE16F7FFBDB3487E0C94A56B9E92920479597024A7D298D27263B4C
64A82C69EE295D119EE1B92C3633A79820CB0143013CC1ACB3DC776DF59BFEEA
CDDFFFE7EFAF9958373A32F6E8E38F978BD5C0CF7AD80D4DF4FA1DCD36EE306B
05C15A8492EEF9A369E2AC5FBB65B8B151A5E585B96072CF7C46D301B5A46C37
84E9E6B889EB59E4C94AFA50186DAFA052AB37DFDC6539ED5225E9FBBA914EB3
B5C094E7AEC9DD439589FD366FF9FD638F14BDC40FBB9572A1D76F3A19BD6BA8
81BC56ADE1FECD09277DE31BFF8035B06662EDD4DE4988294C1F37A19833F2B2
2C0BC3AF975D76D925975CF2F297BFFC97BFFCA5D087F1B0238F3CF2A1871EA2
80C30733248873957332AF96D3DABC79337C9D5FFFFAD7CC474A85AE32E8D6CC
558505FDC31FFE10129F29493357A1F21A27C9C941BA3DFBECB35C55E2F1D0A1
A12E7FEB5BDFFAE52F7FD9CEBA0F41AE410E4E4EEEA17E354CAEECCA76D1F6EC
C8EF158A5EE087D8C96547950AAE6F29CD728BD1F4354EBA5C525E51AFCB7E2B
2E95B4868BA27872B2FB9AD71CF3D39FFEC275556168786A6A7EFF2D9B1FFB83
6E085169949BCD1E4EE9FBA4517C5819A4C419467A71DC2A95ACE1571A9B5685
64DF059160E70D925967C5099572DE030E38003FBCE10D6F200504E191B8178D
0F9A4D62600948D2AC35E43032888DC3603C3DF3CC33D41FDC1A1C6D5370701E
05C6A5724C96983826E05C12B7E6A4ABCC65E4AF2609178997F94814168251E2
2B8B4EA279272E292FC55C1A1D476E73E2A7A47AC70CDC71254BD20BDB6DC57A
71C9AA4A7244202DA47931E7D7CE5B2242834AF5D14D37DDA4CBD572E7551ABD
51DEF17B92104010E3A55EFBDAD7DE73CF3D3429E86C6110DEFBDEF742EEB318
C684F098C89581DC213F7818F178F090FBEFBF3F8651588D643CF9545232BEBC
1A4A2D0DE30FD837CB3FCBC3DA228B5466CC61A1E28E7865B1206D83BC569208
899354427548B15AF7BB1BEC42CD81A19FCC05DA97B5331C4721FBD7C90095A9
FED571955580A8D5ACD1319CE0B6154367B7E3CA64DC8570F1CBA5A7A6672636
AD9D9A9C3EEEB85761A869A648359A89A463512CA912F154842262DC288E0449
20010CB5945941B60C7F60824336A619AC3569E984792331CAB56D83BD79C081
21804BE5583CAE7CEC052C60953BE80CF45A793523E3344C03D356A04A66510F
DB48A8A5E92AD1C4F4C7844CDE8C5DEB153E408568E734D37856E9E7C04D4B7B
61C5704AF6D2D69A8935537BA7B35E205ACE8F8F69CA75DF8F182B4A1731F465
D729C1B6EB0713D06BE3239B2BE5B12870BB9D248ED4BAB59B34583CEC5A76E4
15D258BF69374EB454F5D27218FAA5B263397EAB33A9EC56B19CFA416B628DAE
1BC12D7430B9581E1E1E7FF9CB5EF9B37B7EBE6B7A279C9120ECD4EA5EA5EAEE
DABDB35CD65B2849A389F1B1E9E979589DE572A5D36D572A90808BEE91D9138D
461C313256565EC25C291E468A68618E41109F72CA295FFBDAD7384AE79E7BEE
6DB7DD068F96B1657ACCFB08E9E3AFD8E46C8CCA48B2590047D34C7ACCA93C29
A80CDF94CFC9B913DF5A0C70D9D8B24C1909A440A14CA4AB4435B0A28C106B7D
6C627406FE77AA466B85D80F60B78F8D0D779B2D0FDF34EAD0BCDD1E8C2D6C3F
77C3FAF5DBB76F6F36D5E84801B2E395AF3CEEDFFFFDDF61089787C7B6ED9AF9
F2976FF8F8C597F8511CC449B3D53AE9A4B7FDFD77EF3CECF0C3619CEA028691
E1858516CBE6131862DD6E054E6173C1815ECCDAC810404E5E43864FA5130BFD
21FAA9429F49C4BFA08DE00F3DFDF4D35412694EFE971AADB64D2A22D3B8A67A
63C4023A180B8F163DC3093987F9625F4BF1C66825F04B219DC089D85F583C52
5E8C5916ACC072054CC8719A37AE171DA6727E2EC6E82495F8A94F7DEA861B6E
60645EF4A81468EDB7DF7EF8E1D5AF7EF58F7EF42381A799024E1965B5949EAC
6B141764B57A71F12748C689E7840286158873B1CE31BF44774BB525DF9ABA8D
6E34C58EC9F325CA4FDE977E3C874B308C1C1FD66B0A49169E9F7683D462328A
E018CD30962B426E1CB16F60CDB05D121E5B948484B22594B50F2236D1A9ABC9
0173D2EDA50CE7F815EB99945E58302BDE48A2D6898ABD285D6B39C369BCD6F1
0A7158D1788CB46FEB7223BCBC975AAE16D13921A0D27D718A3A3BACA234F155
DCCF1A003F6379B06A77063DFC5A19AE4FCFEBBCE17063687A7686F69C408899
E6A0654FE5A4B2E802B532E10B666306E95BC0E52A8D81ADBC9052CACCD29CF8
D66CF387C3D89B8B02D64C46A83C4E2970DAE50A98D16C012ACBB9EF7AD7BBEE
BAEB2EB2B8ABBC464860DB6A29B1124501F6172CC577BFFBDD3831D34183A904
73FF8A3CB70D1A2C468ED5E05799C8C0C638F6D863EFBEFB6ECC3A8B8B3928AB
2DA04AA9DAED75D7AFDBE8F783D9F9F9EBAEFDC2D9E79C33D218996BCE95BC92
EDA830802070CBA5BAA5701DACA183317123431B3CB7E6F754123BF5FAD0C107
1FFA9FFFF99B76A75528C26BA946719FCCB4985C4717AFC5F080A3B833DFDCED
87B396DD0F93EE61871DF8FB477F3F3A348C49DA35B9E70BD7DE78E5DF5DEBFB
61BB19DE70E3B5679CF93E5BC7C5DB091CE05887F5533C889FD46A8D76BB5BD4
EC719A309D2C98345E582FCBE95706844A70B99271E4349C79E699D75E7BAD44
8FD967D7CAFB998BF9B20F056C624A053B2A768032A02E92D820165778E4694C
898F45852AC92D8A51AE48E99C351014354C7877C5E78424C4458E3FFE7FFCE8
873FAC14ECF14623E876CA9EF7B727FCCD7DBFFCC5D38F3D592B798D4AB1DFD3
6DAF86471A41DFCF6A0F74739EC08F082AD65DAA6CB7D5E96E9BEB3CFFA0FD76
4DED2DD7EACFEE9AAA558B3B3BFEE8F8F8D4F474AA0159D576B7B318A0C3F440
35EA9CB25EC4EF7CC7DBFFE55FFE85D84B49CF889210F382AF6319458103F072
332E2474198C4A518830F623F97E293963BA4870F24C04C0A566F52D079CFFD2
3B1432350A203377C3199467607DAD6DB401353730F726AF430AB98F7FFCE35F
F8C217B06889B3E3801C73CC31BFF9CD6F98BA86B038E18413E0EBB3AE495485
AC2B1CCFBC14CB7CCF38E38C7FFCC77F64C8E4FCF3CFBFF4D24B694172259B05
18A2FB97D78B13754273C4C434A81C7FBE8FE990426A5E4176905C849B912C40
049AF2EE22F5B853A874E9A74AB64F0A90947AAEDE412D4542A93CC7CC0A13C9
02103177FAE9A77FF5AB5F65E5182EBE79F3662274E405CDF6AC6A69FF25B9F5
6AD93DCB2830B38D06031CF672D6C8048F2486B8A96C28A6E8CCF5FAF0634328
BD21DB5E5328C0685A57AEC02D9DEC763C4BD7F8963227D8CAC3DFFDACEEC84D
33AAE82CECACBBFF2AF5BB52B513F49B496C17BC524D1B4C97FECFCB3E73C567
FEE20DAF86A7281D7EAC9C2FC88C12B31796084FC11C71EDF1B195913D954A13
8613E87DD2AAB60D0E2CC9FBA8BC0538C9851283A26700D3B05C010FCC85D85B
8C0F49ED9308104A5AAE6759FC381827620F8A7D40F34EF85ED44AB69DB9CCE4
984524FD40129BE621BC726C66D9390C10ADB6805C5B13F764DC0B56B55C8775
522E55774FED76B361D5D7CF38581C0B3ACFCB48B20EC67A68D4D7468113F8A9
6EA290B5A09F9B9FEA741730BCAE67753A2DC840C7CE6AF693BE265C2DEAA446
CF9F8D93B6E30519C0AAB366EDC4E4E4EE0C345BB52DE7A52F3DF6DFFFED2741
5A9A680C3B5E34B7B0C38F9AE3E3F5D9D92928065D9AD9872980C59ABA3AAF89
2B849913AC3346A41DE64C63343FFFF9CFC355C2B863E36164CF3AEBACEF7EF7
BBC4368BC68281FFD4534F115C3E40D5C49F07ECF7818F007F448372F548F093
56BCA4DCB81C29FD0776B844084DE098D911CC8C89A9BCA289D5B7C6A3AE1CE1
7075576F75CCCB5FF2ABFFF875A3E20E57CBFD66AB5A281E79D0965DDB9EEDCC
F5466B6EBD5C8AFD5E92C6A552B1DBF6E1A6F22DE0E140EF7BAE46092C8471A9
52EE747BC36BD76CDB3915DACA0FD4F068652E726395CEC0F1D5CC2930C655B9
56AD946BD373F370D361665E74FE79FA8D6C45678BC3A2F21CBCE07EB91BB913
68ED327FC6FA2B7ACFC48008798DB09BD106E798437B45461FD634A781A49AA1
A460BC8466135D7029D116794109CEB20AFC2CE29BC6FE8B5FFCE2FBEEBB4F78
ACCCFD69261139B93C9117A7A36F65C5C4D0AF18222CD40B2FBCF0EAABAFA6F2
E063B0E101B730A3592A47F90A8F155F9CE320A15A0678F1573A948ED10512B7
A689A956AE174FCC78AC32E28A036028316D4D1256B321318605BFB219331D77
795A4E1C4795225B65187232CF3044611A0ACB55DD6A9251601CF4AEC4F5E7D5
0870950C1D51F7071F7CF0C30F3F2C17E115482EAD32625A79FDD56EFD4764B4
81E41275425B103FB0741E63482901E1D6ED77B4D51AC555CD87A5D664BAB648
82E8EC9BA2B2DD5C01074E46B59F684A9D4859BE867459B1B27FA97471C2D0E8
C8BC4E64D8C56269F386CDCF3CF5878DFB6F8433C6C21ED3AB23C51E660432FC
F9CF7FFEBDF7DECBA2F6679E794626425C11E9152872493EB8322E75F9E5979F
7BEEB9C4F1B1060F560E3949544EACB628979622F9FFA8072C7734D38222AE85
4346268256A0E875B37325B94BF7EEDD9B1AF4D7CB277160230F187C96B5BA67
26114B0A0B21345879D5A4D6FEFBEDFFECB6ED70295F71ECFFF5B37BEFAD5786
5ADD56AD5C0BC2BEA59C2CBB6E433EDB56A952A92B7590E7564B85E185392875
A75AA977BAAD30EA8D8EC10185EF5FC0CF5981F230FE343B3B57F4824CFD0441
D80B238DC3B2EC008E72B33DB36EDD9AD9D9E962A930393D39541D8527DD6A76
92B081BF2ABBAF5929C3D94E771EFAC00FB287CF9232FBEFB76572720A1387C7
8322BBE69A6BCE39E79C81221F13C72811E9030E38007F4AF2C69C2262A40F33
64BD9947544BC97E0715DB524A7DDA5F9202112E3A610551463EDF5E89C388F7
654619A6287C237C03A5056B5DCA51F00DA50975F3622FC84543C15BF1394B19
5AD9B355D15323B54AC5758356ABE83A33CD687D5DAD1F6E14146CA43EF6AFE3
66A425B12E12C8047A4C3104834CF754A8D626A716B61EB2E59E879EDE6F53BD
50AD2D74BA937B17124B572505A92A948B3A6FA1D49FFDF90B8F7EC10B6FBDF5
7F3546469A5A7D6AAD502E159E78E20958A0785A080276081850AE226439EC82
1812176DF18D323D21DF987B52E269A698303110703A61E39B314931BFB2B477
44D5CB500A951957146E8AEF71161FF56FFEE66FE0D0AB0C94A48C10C8720F98
5286C96321F6137C161E00EB931802DCE2031FF8C057BEF215769580E4A28C50
46089A8B99341AA22FE9494BF9B8847679162E8527C7CF58485BB76E255B80B9
206524657D126F952E65A2975547108300DD996C5339CEC50CF0A6592D19AD16
D3DF55064C4C2D058E2923403280DD332396CB25A69DB3643337448DCE3DB265
0B24C62406C7CA69CE548680C368DC7FFFFD82D1E54A60753EA3296201FFD1F8
F3C001E25FD2F853B9E747DB112F889FC91C8EA1A63DDD6AF59CA2AB997122DF
5656294A0F59BBA13B3D535591CEF52ABBA441CE96432108C7D7D1582F8C602F
55DD24E9AA34B0756F86673D07A38FA34627D6CC4ECF28A8F372ADDFEBC62A32
25CF6261B1E103E04B2CF85DBB76C91A960881EC14DB686B2FA91F59E7DC95A6
AE91CD25F8184E2EE38E0CEF09D2909FD514F06A8A90F84D951B3AC213200B8F
493A2C5A2650187FE6DB718A712401ADF20003CA740070B0F8BE038C4E82D8E4
1B56B4A475696BEF1B4430DC18C91272B8BAB57EDDC65D7BF68C8FACC96887EB
7064B96471934E3BF0DCF2F0D0B8651D044DECDA8D76332D166A9A31A735B7B0
306739BA22A85EAF4101E385A142C6C7D7ECD93D552DEB6DD6EECCB75AF341D8
E9070B61D42A14E128EB2EA1B6A37B5742E2C3B59D999EEB04BDA1D27A658549
DA0BA23978C0A3A3553FD0DE2FD470E04328975EF98AE37EF293BBC984DE6A2D
66CE49C728FE0106977ED5D4D414859D1484F178AC00E247F011D63ACA203B67
1556CBC878972B609123DC4584C261C45865A496E251455598400651F64C93E0
ACB56BD71E7EF8E177DF7DB7528B5E23F159244551465E4A2287BA72C3CA080A
0C4C269BBAD43D5D70D96EFB876C5DDF999FB3FA3E5C95B1A1214883A14ACD0A
C3EEEC8C15C68D7AB9E0664DDF624D3198F5D66D650C328BA89CC02A541AB5A9
D9D942A331DD6E3D31D95B33E1A58E5B2F8ECCCD2F74822071DC855EBF1BEBE8
CCD89A75381D82A05AAFF7DAADACE543028703DE1E0681429F996F9AD5925EE2
EE95B48D388E26B7BBD97957E5863C55355D67717CC577A1678C73B1D4A99604
C368E2C64DF426AE79C61967B0A5F140C5211E80502606DC84364FAD9203A666
827370E59557B229EFF6ED1AC8063D81C9A56746618723191F234D1857729AB7
7512275256204D7BBA922CD860769C0AC00C200B89A6446296D58B2FE1105DEE
F0ADF8E50077BA0CB232EA4A0960C916615BB01AFC12B7C36A3FE9A493BEFAD5
AFE267229F9551C76FE6D74C81A8560A419BCDD5499EC368369F87B38079E70A
CC2A29D632246319EC08842930B5618EC6BE4158A6AD209AC364AB15BCAECA69
9E843E3617024A373BD188E8B052AB571CE790CD074CEDDC6DB79ABA1F701C3B
9A4132B6163778EA697F57FBBE5D2BEDA409846FA680959FDACAD50D94A07A6B
F53AB6B35E45F5469C26144A625570B844DF086645DE94911BF14AB9410614B0
40B1AEBEFAEA0B2FBC50656963AC70AC07D629D04B619D1ED600FCE3AF7FFDEB
BB77EF96343F0E300D1D33A46F2A60E1B01C38CC5C9F5235CA71A660C7A6BBF8
E28BDFF5AE777DE94B5FA2D06099B295734298EC55CBD5FC8ABF5A96D1AF63E0
416D833B57AADDD5EA390C9545B34786C73E7CC699975D71C5BA351BF64C4D95
BC92EB408B40412EB6FDD2E15FBB50ADD693E48028F08ADE581A57CAA5E1ACF4
A21527BE5750BD7EAB522906617766662FD41E64C7EEDD93D552EA7A7686EAEA
164B769CF4A2A483C3C2085BC5EE76DBEDEE0274A9AEAB53B6CE3586F121876C
7DF0A15F7BC5E8D477BDEDC69BAEC3338C8F8FC058692E7471D8E1CF3BE2F73A
7084297183A09FF5CDAE12B9C3F5846DCC548795776065CB7AA20020FBA4D21C
0F89618178621485DEAAA490499EB0DAC673F21657DC5734B5B8E1055DC996EF
02E6E494735E046FC92538E06773E940111E77DC71BFFAD5AFF0CC4C3AE21B46
264D44A2C97468FA07D4F75E1CAF5F33DCEBB4D64F8C4DEE982AC1E42A394395
4AC149633F74C2B0645B233A13E5E83058AF9F71CDEB4ED4FD9E16FA8D8646BA
2E2CF43E70D687BFF1AD6F3EB97B7EE3011347BFFCE5FFF5F8234FEFDA35BBD0
49421DF3EAA72A7654B13614286BBAD9C4738C4EAC9FCD304AE3E3631FFBD8C7
AEBAF2B3C2E849CF52E5C14C163398FD80397AACCC91A42F552FE151E6621654
8E6C0A110AA9D13C9C2E3536FFC9279FCC46BCB83EFE959EA0A2D518B365080B
6B896A0C53F6E94F7FFAEFFEEEEFCC06F2825D37EBBF4D89CC78232D27BE14E5
084600EF2BF53F6C472324F59483B011A5052F3F54C9B4B0CD6E42B7DC72CB45
175D8427C7080B00B3987DCC560A5CF6D62AF5E2FC990E8468651A07E6EB48C8
876F8A87A4AD403F03F73AEBACB33EF7B9CF89A6C1434A387DE02331241A04D2
A99A1C87036997E5D3BD5C444A4092FA9E65E2CA2876E0C70C840E445C04E3A3
96064EF6AD80ED9CEF565C1D3BE76997B56A3EF040066A60D9AB3C14C1D04BBD
58D41B2C4E2CAD7D17BB16AAECDF34D3C171564FBCD82F09E77A050E298D36C8
D8971DF3F29FFFEC5ED759529A6132A50B948F89039523FCA5BD15CD35060FD2
A525D7023034E355BC85B944250D4C62483B272EB473D24A738DADA8D796D3BD
F17B42BAA4EB94DC8EF03D996EEE1A81679BB967C693CCFD6BDA76AB4DBDA556
094FA74B7BF890CF61F9643F371396965671925EFA3F2FBBF5D6AFEED8B1AB5C
D268DEA2379275FC4D933463CE8C75C938766EA5FAFC6E3BA9963614DC51C7AE
64A2B355AE7838727E7EBA562FC2A9DD3BBD07BB08026E6A726FADA20547ABD5
84B2C45F93B4EF076D1C9F69C7CAB61D4FD56BD5280E376ED8F4C81F1EB39433
D6180AC25EAB375D2ED9E58ADDEECC427FC303D69493B1AE7FAFD786A08CF1D2
41D82F978B94E010555BB66C2173EC5FFDD55FDD73CF3DB829EB3E31020CF731
DD2531678641B88C7805D9BDC2FFB26F6631330A2D6420BC38542FFEF4F297BF
FCDFFEEDDFC8C124F13D331B646E72E9A2C33B52C552859B2EB5F867564E2CBA
D85423B708F3D6DC8BDC78A5389D18AB763B9D6A117B25DEB27E83EAFB0B33D3
23C552E2878D4261AC5A5761BFB3B0502D15D7AD9DD8B16B27EB2C31DA7891F1
F109726F156A23BBF74E568687DB51E83BF6933BA7A07147D78CCEB7BBE3136B
7B71FCC4333B5A89728BAE9F5AD813BD76DFA3C91C06A572D9B652AA34EC8737
BDE94DDFF9CE77705916D172C4A8CC187BA0D9C40932FBC88A84152F47F0D2E2
6DD0D0B68CBA64192802A127272785795138A5A52B19342EB3B38C583267C6C8
04E4F8134F3C814BE1CA871D76D8E38F3F6E565F7076560C41F3003A67787D2A
48DEDAE4D4250F3359D24C3273113D8232357B65925B5BA486B8A47C7D9C4B45
8EBF7EF0831FFCE637BF49036279BD38038C643B11B949E72CCD29A84C5F99D4
6FCA804A304BC2C5094BF1BCF3CE3BFDF4D369F2724245F3116325FEF751471D
F5BBDFFD0E6F87B3181BB09731F58B62131139A0833968DC35B0003EFAD18F32
9B6302E8ECBC971444137E1062F081EAC481D0F7400874F987D364FA85B6418F
256F218067C93D3D0781CE3E2E7C9038AD60DB542B7BE767C7D6AD9DDE3BA9AB
8D926C57B3BC184FE15A1A52E1DB9A7CD2CE60D1D8AB49AAD13A19262B59ECC4
6E25962A94601805C56A418516034E5457260F9444CBC59A1743843E2E93A95C
BA62E6AABC9923F958E033ECDAB58BD92BCEB2EC5CD35BD87F7FDD5027C99B93
322A29EA56B47BFA2783B04C14946C64D9805C1542558B9580DD8D9FA58184B5
AC178E39AD66FC7879827FE50541B7CF0C3548225A8275CAC82A0DD5873520A2
EF8F0C8DCE6963DFF6EC62B61376E1181CD0EDF4F3E5E266DDE337EDBFE9905A
7562666FB7DD0A2B651DD269B51792D4AFD7AB69D6ECA854F6B23490CE70C441
BBD7EB668D0543E8E66E0FA67DBDD787DB6113F798451A7BEF7FFFFB3F73ED67
FEFCF017355B33EDEECC426B8F1FCCDB6EC83AB128A2FC756D4B1B0541E8178B
90683D4D69192DE67D857A973245B613239C54BD82AAA08A252DA29469C9A4CA
2A9405611AD7045BD11EC4150E3EF860F67626728AF6A0D45952B69A10566941
43803EBF64104F588BC5AEB4F21A53562767FBD589E2A856ADB53A9A033C0803
DBB1748313DD984883E53CD70EE1DA5A104985340E474B3AB51B8741C5B527EA
8DBAE3C236C6BB0D15E04AA4C54461037971E25AB1CB12F88C4C00FAD28653AB
2B0E9D48B30DD8DBA766C7D68FC212DE3E3BDDB7ADC6C438FEBA7B72B21929EC
423FD6B0CBD8F17A613CD3EEE04F766989E2547429D2B458289AD2D3CA3F541B
4CE325199BDDA1871E7AEFBDF7323E217AD7AC3B22E851A8FCD9450A7BECED6F
7F3B143CA36749DE1FCCEC2DAFF28A5E167F6305D2FC92123571D6891822D448
7495861CCECD917193E05ED205F0E1996A52B9D5CF0A4B2BC7634B418B10B0C8
477C7DCE3B4F119AADD52258CC2992AA22C9E8A56890D1BC5079A188D9F55619
590CCA5C6E07820CC4D4B3F2FA46FE49A88ECC0E1076DEE60B4742D742B1FDFE
F7BF27FA5400FFB29BA492842333C03A27DCDAD4E27259E9F9B662545CE4AF28
33BA44D89BA44DC87BA76A7187CB6635EBBFE3E98242379F641F8A76B5F137ED
0391D418B4638E39E617BFF8C5809EE6BA357DE534EF4E2D8A5908A4A83F18FB
E5221940A548A1296B2CEDBCE39E989866D444192DC884BD47D86DD95C047F1A
1B1BE3FA372B7FB0AE5EFDEA57FFEC673F636A83DB21C369F6D29C168D096012
A8897EA5D9CD19973032A7C3A4B7946540192ED4E24C0951148BCA14F7924547
B2A2A47D137701E35E428C014B94814F73A8ED9C0651F019CBD52D2DCEC5F25F
832BED8F1486B3188EFEB568628EA64C9B7E8D54C395AFBFFEC60F7EE843A3C3
E3D0855188DB6059E82E3DB80B14B08E91AAD8D68D2A4B05EFCFD6AF3BA05C1C
5D988BBA9DD073355E0383353A0EFF6F2608BB8EABFB1725C9620466B85E7C76
F733A3755C2AE9FBED7AA302831EE3D2E9B65841444538D4D0B12CCD23ED04BD
7EB3DD9D245C4B135BEA714CB385D2CE3080161C343FE895CB1EEC06681D4EA7
20874DFA2A2E7AB1A4B882CDECACAC48496FA8A57978CE0D09AE850A9167D145
83997FF3CD37BFE0052FF8CFFFFC4F59FADC3052BFC14087CA303B827D37F1F1
03E937BE024BF8490029B679A9A00946600F57352B67BF522B371732F669DBCD
546F80575D33363C33338F77A855BD35D562B7DD2ED86AA45E2F2451D2EED53D
776268C4E9B53C6849CCA94A8A490AAB1A8A1A86B59B2960364A4A522BB69CD8
D2C50EFD24ED2511546F5470FA2A6D86413F7BE0050C9BE3B67A7E3F56FDD80A
2DBB1FC55EA1D48CFD014B96E2DEB51DB592A748316DF62F93CA6949B753F5D2
58917A7F5A39F8190AFBC1071F240A494818D8C6915E20573E77A94477CDA626
040AD0DFE514489884220CBA192BF6E8A38F866540CA49116DE6871293AA4B9A
21A606B7F0BEDD2929C7A295466CCB3E223104F8A89C2792DF0B6DAA30FE5846
DF11B552A8CDCEF90807549D0CA332F0A52653AE8817DAF7D2C695D9169A1AB4
4EE40104D7433F29CD4BBDC55B5A11FC48327D315C0656516AF4365619433514
89C0B3890E3BF5D453EFBAEB2E7C8F65B36EDDBA471E79848871EE538AE63F41
ED2E197F51C0A6B38E15F59297BCE43FFEE33F0855630023C989AC93A5DC4F2A
8FA89108880876694D2D1C552AC34EABDC1265F04326828CE2347D04CC8FE5CD
8090D9734C36148771C3860D700A0551214A8BFB8B4D11F02B8B94A4E8DCECA7
2B9C8C2AA7E630ABF0E9808A8BC92C89A0A5640989BF2115F65C48D2145C54BB
E458696B26794B06FC55372C5F5ABD0253FE23D987A283D92EBA644C9A709F8A
01972EA51917254238B3FCBBAA02C6750950A42620690306CEAC69618C11DF68
8D62EB8450DF0FCA45F8B26EA7E78F3446F570F889346311D3468F697AD0707D
6DC6C2518802CFB117E9DA5FF492239F79E649E8CE62091E6A8F4D7270FDD9B9
1DEBC6D7EC9EDE393E3C92AAD02BD8BBA776564B3A468F81C64EE826DDF1DAF8
747B7ABF35FBE1F89E3F1BC659DB064DA616E6AA90A36C8F8D4E5C78E145975C
72311470D6B06131872D3E16F35B42982291C934475A32D1CB8207BA05DCC992
29375335140A92B3E487E81289613265A8F24E2F429DCA064AE434E0B6A1ACA1
47AE71C54BC97B85F0687C7C1CD797C63EBCA9E44BE0EC562BD5F7BFFFFDD75E
778D5E7C6902A3288BE468FFB25C2A56CA65BFD34EC26878A8562D57FEEFE38F
7DF081FBA7F7ECA9178B35D7AE28CB8BD3B8DB9F287B85C4D2E50D49ECC10057
99F6B555C1769595587A48D238C54F2E74B06EBB522CEF5D98EBDA6961B8DEB3
D4EEB9D96E10962AE5DDBD7EB95AEBF861B136B473663E758B53BAE8C5694385
E76B5A191A378D072181E952621DB6E11429E0E65DE8A984ACAC8007FB53328B
54818C3AE248D8E9F7DC730F0D174ABA37BFF9CD77DE79A799915279534EA6ED
E978C901AC9165B69EA968E2F504148A99C283E1E02D5BB63CFDF4D3C4D4E05E
9FFEF4A7AFB8E20A764D10933C6FE1A5D42ADCC26A5956421C4D8AEC7DD7A34B
FAD6649E92C4845ACA0E4DC925C36E2AB064297D9868053CCC5BDFFAD63BEEB8
832433820C2786885B408C5A7ECCCA1395FBFA123FC7954935CCC61BF81E0613
163C8EE7AE7CFBDBDFFEFDEF7F9F7E1B0EE0389C7DF6D9D75E7BADA49FCDE7E7
63534CD1E9A16B6B0A62899D9884621C67A861DC17B61413816621D67F4B010F
AC6A13DD29F106A9ACB59622BACDF8275351C2B2427A1FB2145C74D1455FFAD2
97C87682D7B9F8E28B2FBBEC327911A95FE7BA95E8BA949F5939F75C94374D67
94824EB630E0E2492EB9E4925B6FBDF5E4934FC698737207821FE67A96B73343
F762FC89D3CF53680A5B79B71EEA7BE109661C9B24869CCDE585701234E6F1C7
1D77DC6B5EF39AB3CE3A8B015D485DECDF0B2EB8E0F2CB2F8758E09E15D94251
BC75EB56AC317CF9F5AF7F1D26BE2444EC657DA0EDBC6D1D2FCE152529B3553D
609A0C9FFCE427BFFCE52F63E831706C63275496F80652E99FFFF99FF528B876
16E0B50B6E5977D172CB3052ABD57ABF870DE3727432411FF1093A9D35A5E250
B938E6D9A396AAA489F695F553360AF3F3B37ED0763DCD4309E99DF5A50A36AC
CD3A4FA9B0D369C789065E1D7CC8414F3FFD071DE6B4AC6657ABAEA1EAD0F070
832194A999A7324C4F3751902654B118743B0BAFD5E1A0D76B8D56BB89D9DFBC
79FDCE5D3BE1BEB314878F2A168D2860B3DC9B03CA582566E8FAEBAFC70EC174
9E76DA69F8796063F0747CF39EF7BCE71FFEE11F309D1410101CC4AF4BA98C28
630A2CBC88C814CC05D9F5082F64B776CA0EE2BC92AC7707841A2514FD5DFCE9
94534EC1F4E1013077B82937B36660986F8E8F8D4FCF4C8F8C6A368672B594B5
23C9CAECA02AE617EC8CAFAEE4A89146E3E0430E0C6676CD4ECF3869E26296FB
6AF34879DDF070777E7EADE76168E0FB9692B4A8AC8A63153CC773E04447996C
CBBA372A1BDA37B25CECADAEB2FA49D249A38EAD7CC78213DC0BA3308EFAB56A
B71FC48ED7EA079D386DF6F1280E747337E72B564B69B7C5D15F31C183F77DF1
8B5F0C6908D941892F240912F314FE748C2D0D523228618258548073F12B4C7E
469829ADDEF18E77E0B28F3DF61893BB92E8A265CD083F814BB8F2D5575FFDA1
0F7DE8139FF804142A0E78F7BBDF7DFBEDB7C38A278E89810D338B2CD96B91EC
19EEA14570BEF9A6A9D1377E35854A1BD18CF4AAD59D665AD2388BBC6C1C2B3A
A903D68F39CE964175A28C26E76A299C4D98F584F5D3A440974D27AC0B58C9DB
B76F678842F4A234B4E064F1CAD8084CCBA93C08C15185758BE371114A3D3A4F
705BBFF7BDEF6154E59481E0330D0E0A74FC7BD45147FDE637BFE16220B0885A
84749534AD24E2853FC1B723A5DD3EAA1EFE144D6CFE6A8E305BECA559C91665
F7F264B62453CC7307BA439A113521C5E3BF94F9182E1A8BD47C34FE2C03AA29
0818A2044C462A7AD29CA0AC084213C5E05F56751228233D0F78712934108169
2DC5AC5939BB0E771691861C1F01C9539CB270062AFFAAABAEC22E836376DE79
E7DD74D34D4C29AABCAF115F8D92939966582190E42A2F40B50D220776DA664A
48C2A25C6C18288C21DD2A8C2A5685694CD806F50A6E44DA4189594A247CE50D
09ED02CF80B6B9CA6BDBCDED4A85F4DAD7BEF6C73FFEB1CA3175CF3BECF98F3C
FA58C1AD36EAF0275A9572ADD96D432F66FAA0D30BB3464E4A13C9F603E8DD52
C1192DB863565A0D032B8E123DE07654AB97FA7E2B0C7B43C3356CEA454BA7AF
8760CFE4AECD9B362569F0B6B79D74C38DD7F3E1D9CB082382F7DDB479C3A38F
3EAADDC7600F664D597E6A69B5AD07215BD8E3E318DF997A6DA8D56E4F8C8FF7
FA9DD7BFFE2FEEF8F6774AC5C5601DEB344C108129E5655710149066FC098C5A
6832EAAC4D9B0978113144B642AC6FFC60C6A952831A82213E2E65E24DF0EFA5
975E0A092E5DA74C189E32F002B031CF39E71CF995F385DBE1187C0FA78A6D5C
19AED18BAF58E9FBFD35136BA667F766A18B8CD5B25E85E459989BB72D552F17
6BC5928A42F8BF911F14FA2D0CE0DAB1EA48A96CF783F5438D896AAD3D3B5F58
68B9A956C01565D76C0BFE71BD5C2E16DCCEF48C06586A47557BC0D0A6D0C189
652FC4A92ABACD24DADBEFF66DCBAE94034C71B7D7AB963BBEDFF2C3726364D7
EC8253AD4D37DB6D3FEAE5A4EA94E302BB904D3BA096C4646691C040AE4BC2F5
3852E73B464799D2136925F89D818F502C31EA20123FCD5AA6E3A9B0E1B1D5E9
D4720A184F1354BCCABD10A1EDC587FC181924A225C0632B635AE629A420203A
7A458FC1D48BA6ECA61C7CDDEB5EF7A31FFD48F0E1905692965EAEB059A605C3
E5C1071FC43A84D768E28906702B821292C0AF3C98008EC4CA611C828E382B29
21E320D720D118C9B4722A0F1C803184F079E8A1879CBC23160E60BB2AC292F1
6535FBC094649F44286CB613C6C571BABC2361EA2AF7E6715FFE89C39EE67556
E2A9884E627F495AE4D4FDF40565EA1984A43367E5F50803B8E8FF73EDABF260
2F79365887430743065998A4B8B525D2A3F22E3BE2AD4A593689DEB8A7685CAA
CCA7C43293D4AFC8792C666904C41A717C4F481A330854C034953EFFF9CF9F7D
F6D9C40332F5438A2E9C0521C6623C78749069F886DD51E9A3DB46153E63212A
EFFD2A190DCC3234EB35D75C43863209F84B6A83F13F1C898BDF78E38D1FF9C8
47C82E47252D2EBB50A8F25C7224E09A9FFDEC675901C5665C69D6388E44D662
00B1BCC5A4A864A8808B7FA0E12693D35494B8E311471CF1C0030FE01BE2B725
ADB9AA074C1B47CCA571A8AB5ECF8CBF2923F1E064AD87424D97E47A4E258C93
35A31BB44F9CF9B57DBF07B3CCF5F0345196512F24F6B095965C7BB8E08CDBAA
9E268524D64FD3EDB61B43B538E90761078B84D8E962A11CFA731A9C95EACDDC
F7BBB39DE9934F78DB3DF7DCB3777A4F160977CB95A2D2C95188F17EABDF72ED
4EC6E8D24BB51FAC15B06EA897EDB2A1212CB556A958260B87EBAA0D1BD74DEE
99E182964A7F139C2C424A5C5B46EAA409CC00FEC22CE94973DE35D10D5C25D8
CC6CC3CCEB0B444B0E930C2EC69FE8682C3238D9DFFEF6B7310B2637108514D7
3455382372245260F0934816DE427B5A7E448FA4E7EB4C861FF8C32343F3737A
5156CA3035BDCE5CEBF4F7FDBFDFB9FDB6F985EE960D13636EB8776ABE64AB75
43D58A4A2B892AA71636E5818D869D7565810D8209A8DA6EA5E0603E129D5126
B0328DB299F0531BC3EA17CB7D2B6D27E1421CB654D2B3750D626229BF5EDBB9
676F2F5298B09EA5AC52C52E1567E61666C34115BB18044BF71582962CA0B3B4
01ADA4C6E9254883642A3F6A5F8A1B6C3CAA67495B0A6E8EC92AB3F4501AFB30
CBC5B02763158C7FC21EC2C310A8C5F8AD647C697E617249AA40120361A520FC
FECB5FFEF289279E285E88893B5BEE30899266A08CA683F840FB08415391D04E
975E17723BC1B8AADC91E262E32BCB97A2AA939C5E5E4247184F8C065CFF73CF
3D17F68AA0A625F068E73D7D7118F605438E4CB5703488AFE6F24E73B436BE61
2F4813FF22891BFCFCBCE73DEF91471E51B91535E0E250BECB9697E8B169BA49
1291AF2384FB129D66568806AE3858FF3F14F08A3A5819E159E9D5219978DA16
5CF3E652574A0DC82E7924167AF07472CEE0C30509AF114344E01223738C1B13
8BC4320A711BE4318422D78C870BF489BB46BC1A16D31325C7788670FF0940C9
EC4A209782BB8989BBE0820BBEFFFDEFC3CBA28424253BE12FF44A29B4E9DDD2
6CC253D1AB61D6499625C42F1639DE970D89B90285DF43195C2E621C8B8DC5C2
7AFE2C8D14B924041CC7E5C4B7C038C02279EAA9A7688E53C8D37A5B85586378
98C137E20C3FF4A10F7DEB5BDF22ED08B3688CD8D042D7ED2074C0D3ABD746A6
A7E75DA71C44F1706D1C7B737404B67CBBD569BA8E0DCD8ACDD8E968A4A855A8
B84E15DAD7B5465D7B043FDB165C40278ED2F98569F8BEF54669EFDEDDD0B56C
40313A547874DBA3076D3870A1A9DBDAAC5BB7E6C9279F8C92C075740545B1E4
6172BBDDCEF4FC54BD023FA36BB9BD2485EAED6B7A352BCEFC27162061945D38
E87D1805FDAEE7398D46656676CEB117B3B0564EAD2E05E666964824A0540868
6FBEDFA7B4A5149031349D068CD581071EF8F4D34F4BB7794916F216B425A562
1297C597D4EE5810DCF64EDE108621200A23AA07CCCE3BDFF94EA1D4606047D2
390CE0B0828540472BA3A27BDE61CF7BF8510D37B51CE5F70378C00C44D74B05
BF171CBC79C3B6EDBBD60E55866A75BB35E95AAA562C542C5B75FA9EAFD6D60A
EBC746EB6154482D0F4A3D0CA186BD2472313896D5A0A2D4EDAF7437343F517E
62E187AE570861F63AE9828AE6A3A01D45A16E0C6D6FEBF60F7BDE61FFF5C413
E77DE292ABAEBFF175FFCF0937DD720B36FD4CB0B82D5385CB3E870E8DD315BA
978B28A782140A78A9179436856A2989BFF8611C3D3AB5F8D317BFF8451C7CFE
F9E74B88986B839B4A0224D896B8CBC73FFEF18B2FBE58C0CF02FE1274B45969
C360262F2B9D03E46118321598C90095D200E8C954ABF203DDB54B2EB9E4739F
FB9CCED1649202DE2DC9655714F1E239A9DC2196849F5A0A8761AE9A6E19D692
B428E7B399F9022B67A237DD47B10CA862E9D299ECE5FC9805DCCA2879126397
1BEA6D6F7BDBBDF7DE8BA9C4405D71C515975F7E39A689E468ACEC4FF31E0CBA
0D79E64B309829082FFE953F102949402F3B4A91085ADA75ABA5E4CFD2E9C19C
917D941DFE773FDCCB69D61A8FEB4AE20AE9B2121A2A5406D213A3893D7D44AE
0189F140C233F0C6EF45C7D0E25F5E554FB4844936679275338027992F3C362F
C28010BB59E007F158E81DA639C3AB295D055EC7DDC175280D3C64851035695A
18348028BA31B9B817BE240D9C986BD75E7BED79E79DC7F6A3A456A5FB2EAF49
958773F1FC69569EF7FAD7BFFE8E3BEEE072A53E66B2CF0C6132FB4BB35B19C9
32B57AB9F6735B6CC5894F0DDE3E9A1E0C854B69016F802FF986BA902C1B8A62
A11A06AA54ACA689D3A88F4CCFCE56CB550C66928661E4777A2D5B5923A3430B
DD5EC1AB43FBAAB861A575E841D72DA589B571C301FFF5C8FD071EB0DF41076F
F9AFFFBA7F7E6116B7C012E9B6A68686F4867FCB5FBFF90B377DA15228710314
4B2A4EA08D8A90873BA69E29DA5E3FE955BC8AB23B71E227690F0AD8CEDA16C7
711A47ECB9BB303C343AAFB7108485B566CD68ABBDD06EF505EC201CE25C6A03
A92F53885C7FFDF51FFEF0873101871F7EF8030F3CC075264B4AA24302B6246C
4DD86BA97105E56FC2E52914485C65D6B062F3BFEE75AFFBE94F7F2AAC5B4CAB
D0796236E24D6F7AD35D77DD05298073B128F18329C7A178B66DDB662B073BED
ECB3CFFED8272ED249B8542B15CC20FDE08AE778296CEA78E36863ACD178FC99
1D5B2B6A78A85CB46C2F0EC74B9561C755ED6ED0EA6EAED78AB655551A9605BF
12D2085BC452E990CAB4A56E7B6685A9F253AB877BA46A328A2BC30DBFE04EF5
DAB3A11F7A6E68A7DD7ED0F6BC8576BF13A9C69AE12776CED7C7EB4D3F9C6BF6
DB4E563C40E63CCB16DE92307E0E6D2EB24FD248E688A9DCFCA7F5CA78145EF9
2D6F79CB9D77DE49035C4C166112E5FCB2A72F15B9E4BD784D5AA25293C6EDC7
FD4970006519D53FBD4932CD3214411F0ECE196CF933CF3C139A5E6A66A4252D
5F04070BB590190CB0F20A0D73CF9A4B94301C063F08B012D6C615F73B0EC313
42B5D021C09726DBC0003486917C221504B445D37039529A1F7C4FE638E67AD2
AC12DACA51C774FAE966A9CC808029032188256D560C0B5088FE8DE495393822
4C3917AC57219534DD1A4A6D3C2AE6081767D055E4A354313103CA318482FFE6
37BF8997653E9E3AC3EC7FCC0F69444DA6B3FF13BD2BA773AE71EB37BCE10D0F
3FFC3076AE00686D83B84394716AB01E9A7A5A360501222A2B391194328EA11D
CF9CA309BF97634E3AE9248C0383BA5C512C3FB196E1C6A5164008C5B85099AF
648D38A3505C24B2540418C5A765CC9CA60F871DD60316D89E3D7B2457C8D522
380F0A5E29BB6243055E930637B71293414444B2BA015A0C9201736A8673181B
C0EB40627045E15F3C8914B90DAC7093D7D68C0430DB8D31E122945E6D7A578A
4D3190C59170071737A9E90413C1B1E6E5683A59196721EF68E1A64EB9546C14
BC32EC1E5C157A2E4E8276BF0935FD82171CF5B297BDE45BB7DF9E44F097CA2A
A9D969C3B5873CB7E238C582E3763A1AB39EB9ADF19E49C84AAFD3EF8C34CA70
B37111585A85A2675B6CA9613B1EA627E8F5DB7005E33474B3808C8E3EF577BA
1E663409A39E7E296B3107EC389ECA713ACC826095E075B66CC104EDFFDBDFFE
96DE098698EB66C588900C97B5EC43E64E8CF8C1071F4CDE1C016111B6A68C92
95E38F3F1E3A60C5EB53E2637D24595B4D06E2586047765F0EBEF873BC359355
5400584F54D252DF06A981BF62C16925B47B57210B2231D4C16D16417A96BCA8
1F0E37EA69BFFFC5CF5F77C985E7CFCC775E74C4FE0BBB9EAD595EDC0CABAEDA
B87EC8F603AFD9DB3C321ACECED54BC561AF887D003B109ABCE85A254C7F1C67
E5FCD0134E68295F27036C38BB0B61D4F1AC3995B6556217CB49B1B4B7DBD939
3F5F1CAD0451DC8DE36EAABAA9DD49550F06540C877A687A7EAE502A6E39F890
877EF710DC604C7041DB2801653D551163A1928F111C8A69564BDE4E19BC866C
1DCF20980CBE09D7920492F4B9A2161148A7E940B355DFFBDEF73EC2E5303B5C
5D829EE5CC8A2BC629B38CE222FA37A4FB6138844D2AD5B28A7E79CED5D62793
1D6C846C65FC245213C963045142F097CAF320A6B56EFDB132C50101C4D32952
8E3AEAA8279E78828DD997AB25FE8CFB325B8FB9C3FA24A726212A9492A676E7
F194FEB46328CD898EA6BE5199714C3C1D24F562942F83CBF2071EC6BEB0E4B8
660121362C79EED29C1C918A8A35AC9C653EAACA6D74C1638B03CDE1E5DA9092
A1812192F8B95962BB8FD4C08ADF4B958E543D88CF4D5A63866A08D69124B795
F35D3B79E30D09E9338EFAAA57BDEA273FF98928216A20B2B54C4C4C4C4E4EF2
4D1954E39AC1A5BEF6B5AF7DF0831FC460EA9685C3C318A234AF811C78772BE7
B5A6A7AE3227C4C410D04EA54C932BE021714768472B47E9337C2DD6B0D96145
B42F0EC6015806E79C73CEF9E79F6F16BC397947262E36865EE476B4AE707D98
6B2CF95539990CDB523154C07827179BC970A9F256953483A84754EEF2D20816
7DBA643F0C6C2AB3C9B95410F118280F4EDBADB7DE0A71A305C12A0AB8D70DA3
18C61AC6C883131C84DD72B9343CD2986DFA49ECC4919BE9E0A2EB54E13AEB78
C85C0B22AFD3D10228F023B241359B3072E79515D94E8CA1B36CCDFC4C53A0D5
99CEB0AC107381E3DA14017A209CF94E772149D95F2BEB3AAD98665892FB5139
7801B37FE8A1876EDFBE5DA213FB1640F22753FB72885878FEF6B7BFFDB6DB6E
8352870CE2F19C24E1B35579B67F350137D0CE45AA564CC0C2006E16062C0105
071C7000FC60A21ED8E50D23C3C4069EEAAD6F7D6BA952EEF77AD55AADD36E7B
2C5F863D383CEC477EBFDDC3EA5671325474BD34DEB47E7CD78EBDE5441DB679
78B4580CBA9DD8EF397E7CC4A675AF7DE92B1EF8DF3F850953F0A37212579214
2ABDEC5845CF1981A0B36CCD269B581090BD24EDA54E00BD9BAAA6AB5A8ED577
6DAD800BA5661ACF87FE54B7090F144BAA9B58DDD412053CD94D6B956A37F44F
7CFBC9B7FDD3EDFBEFB7E5F1C71EB373C6AE81A8E9400E4CE5812C95D9C86296
52AC3059CBE96028891C64FCE6F2CB2FBFE28A2B703C0920B181AFBCF24AEC2B
7179C90DC9EDB77CA638D44CB01149840B7EF2939F54995B29470A104332DC37
DE78E3E9A79F2E0F2FDD9CA4F992D9F76D3545C8EF25FBEBE4FD85F88124857C
A1D742EB591222785A8A6F526C4A93A215AFAF9666B994D14E9BE5EC2C6DE768
C80619D856744F29D0AFBBEE3A8C33DD23332AC874A394FD38463743F1392882
F93A661742692366196C8E645CE180734E21D00E3AE82098AD38DD940FDC685C
63ACD8965024A584998917541ABD978122E38199924542716AAE8AE54266F987
7166A80A36C7E5E9423B2A7B418A88245E22EE9644E9981CE16BC2C2800CB4F2
C66B8CFA30A42F424C82A00CB130528D7F313ECF3CF3CC05175C70EDB5D7B2E3
0863F8F22203181A6A59B3DE442E8ECBE2009C2BE4FC1C259C7EDA69A7C1BAC5
34E1A6986E42AE04264637972EB8640A18DA347BD870F6257A8FD714CA233A2D
6296A5594F6261DEA0E9865FF12F8E27163D35DAC0082841A48DE03739A4E2DF
A73945D273D9A3246F044163393538336DA39903051FF1DCB2315653C0810F1B
A717A54141FB701E74A7EEC21EC785F25A2CC83872C2401354B16A0207548BA3
ED56B7D11871EC62E0A773B3AD7A7D388ED24A158FDE0BE3B6B27CAFA0E94B61
1CE3FDA162172372CAD6F41E929271663BBD56D6E7238610CE4C512E02CF2CCF
32502D0985A9CA3B9CD3DAF853C014E626E1C660808576370501C368694E25A6
721B761F962FEBE8B1C18831917672F81EC2E2E1871F4E734A109A96241396BD
2D20ED012145A9D7ED75CBB0E0BADD0D199FF0FCDCDCBAF5EBF7ECDE5DAD55BA
ED6EC1B6610DF97D7FACEA4D8CD6DBCDF9B18233E416AC9EEFA9B85129B9815F
8BD2FD87C74AED56DCF32193F61F1919AF54F07D12F8587A8D2829C01E72DC38
4D7A61D282E39BAA44B96DCF69AA78D68A7B3A310C5D9BF61CCB2FB833A17615
BBB156D55D657512AB17C750C00B49B1E3F7E10107496A39B6DF0B5C4CB11EDB
548C56BC2F594D301A12AA65088EEB5E657E0CC79FE15F9108F23323014ED6D1
59CA09644EA3A5AD6DE96A63303FFBD9CF7EE2139F307393425CC58D8D7FCF38
E30CA85565F47E3685EF721C99E03B7030E60E77E4F1B27E78B0E910AFF881E5
2A21353E958833494CA89CDF40650173566D11D8C25C9A59986B7E4447DA5987
09957B8AD24A5D65716032499955B3036F0DCFE9AB5FFD2AC6841053B12C09FA
8DF386D6B1D1E068205F232C9EAC691968052D3FF05D044EAF96A12C85564922
A203C10938521B376E3CF7DC73CD087062306B9A9E9C64C4CD99E563080A441A
E9A8FF66A441E56C013C5777B26936A5A70B2D3695199DA9D1D05ADE85FA55E5
3CE7B23C84CB9A2FC5861F587898231852E2F02D52E965B6AF6482A59689AA57
2495E9049BBE0AD3B42A3752B93C88B63BF3CC33B1245446372445B72A2F1B91
8010BF17C351421102CCB6F2F6A0924919E0DF3501835479F8F98D6F7CE3BFFE
EBBFE20718DC3007C57C64A401373DF1C413BFF9CD6F32272D9241D246B27AB9
FD6110C0A0A1BA158F9F01008EBF45B7CCACB06C641F28798A0F739F9B4B4D16
37C55C5F7BD32B85A07BBA00085E7E9C68368C52A9502A6BA6BA6EA7CAD383B0
EF0730A08242D12A14DD4E2BF1DCB26397CAA5C61B5F7FC2FFFEE92FB64F4EBE
F088973CF6D803B57AD12B249DDEF442732A4A7BAE037F17DBC9B2350DB50D05
BC08C18F21CB7B41B207B783BECF9E977CFA7AAE83A06F9AA5E24608EE94F248
42FCFFDD5C8EB9D64D5C280596884BDC8E85A7AB09503EA1B85CD863975D76D9
473FFA511A8F52A198E4E4A504EE3293C718A6084AE6CC88BD12421CCCD578E6
09293D821A5CDA84A01F1D9D9B992D788E95A4B0D636AF5F3BBF77328DD4E68D
43F1C242C3B5ABA95D2F7923F5AAEAF5ED857643397F7DEC4BA777EDEAED9DA9
61BF6121418686AA58509B3181050F1386476AF5836618F5131B2B60260E1754
DC293A21746AA4DA38A55C7247861EDDB3C74FA20E1570EA40314319F7A378AA
974419BA20D2ADBBEC343787306FCC7C8B0E867F79D6596799797709CB130629
1364763BC1DE8076FCC0073E806360D562842FBCF04296E1D3C13DF6D8637FF4
A31FE116647F85D0C4F8D322C6A8DE70C30DEF79CF7B842200C348F65622F2B8
A2B66EDDBA63C70E21625C9E3E343F7020AEB9E69A8B2EBAE8965B6E21E84680
97A667CF0DBC0FEB90F2850046A9D4E466675EF9F39FFF3CEE8575B56BD72E52
5E306C2874D6C258B2E2F539ECA61FCC75CE5344E90E08A6E59B45DE88C7336F
C261140F8932578AB9794D6E28696F251A1A7F124A32E84B084D2E78B13E45E3
CAB97C60A941102D25969C84A3B0CCB8D170220BFFACBC9FB49463495190B5B4
1254E50429C71D77DC6B5FFB5A2C57AE1911F1FB9003CB3F1C04717059D296F5
AAF165E191FC813037F35DACBC9B0B4317720B5E8D21105C0DD28923F6CA57BE
F2E73FFFB9247A999A25FD2429B4241E6072434A6DB74C749AD77DD939C5A938
24981D9553B0890A9736AFD44AD80E921BC5BAC51EA4397BD86187BDF39DEF84
298CD7A7F72830756E492A38E9BC69FA9C9247E760D2EDC665E9FF70DF0DB07C
BFE8452FBAFFFEFBB98404C829D525D4F78C19E3215FFDEA577FFBDBDFE60A94
0E3AA6F36D59CB22CFB8316BA579A818505C5E82D5E46623D453DB2630405652
C0ADA69FA5A0F5E086910F959951C5DA6130A1F7AD8389ECF7FC6610B632B454
62A9D29F1D75F46F7EF360AABCE1DADA85767FBFF55BB6EFDE5DB46CC785F7DC
F193A66345A532BC81B8D7EF562BC3F095A17DD39477C7313E947A944EE12192
3482C6E5662B952A6962B5DA73E67E504B0B2831647835A9D397ACFE8AB263C5
1D92E6BD4B05C5C3FA7D729332C3C1F9A0AFBC8F1093A40A18ED17361622F2C5
6B61365156008BF0F0161239116382EB95E7AEDBA0FD5DE860BA14DC451A33DC
EBE3816A70177CBFE6D9AE958C0E5542BF3B6CDB435EA16EBB25C72A3AAA9424
C3CA99289447C35E67AEE9066A5DC5192E78A524AE148BA38DBADA3B5B2E164A
8562A2D2AE1FB530738985ED3813064D2BE9953D28E09E1F433A46C582373AFC
87F9B900EA1B8615DE5787A02DBC333CE05DDDA85AAE2CC05FC77876309E63F3
8BAD2FB47C217D31812104CD5A06F983329059700789A091DA2106A289EBA130
1AF0D238A426B846606ED416B47B70EE17BEF085D34E3B4D0A2EC5434AB35A3E
EA7EB35D01F3976A59F1AE9551AC602298C51728A69942A6F740D9644A93E50A
52653E045D491CC96A1CC823FC4A3001AB7D18CD8280C3AAC06531500C42B290
63DF4D44A8D1C587E39AA7394BEFCAE8333DB8714C81C344A38C8695376FA61F
4661F7C217BEF035AF790DE4ACB4BE60029E83404C1C5D25161A89D3CFB016ED
1E73DBCA8C30004EDD203687191E3311ECE2AEE176AC0C943026AF6C32779A0A
585420716164B72668834B57FD773EB26C70EEAB5EF5AAC71F7FFC61DDDB4DD1
84C28345D162FE8E5D58B81D842ECACCB972354A513B2D1B29B9564B21452AE7
E63CE8A083205ECC0A3D128711F94CCCA3E00FD452E4A02860EE97246FE420B4
F9BC08251E17006F413830DF911E2DCC17320B711948B605B7806EC292268895
F75D919E4C2CB081BEC5521F28F6DC00F7380E80EEC7B04B3CC6045B50EA6223
CB2899A49BB21E2C593492BD50FF1F6B6F02264959A5FB7F91597B7575374BD3
EC4B2320A22088023ACB1D44FFEAA0731144940157560165DF6407511490E541
0404C56D80514747BC5E65B83A5E441904940101071045767AABBD2A33E3BE11
BF8E774E452D3373FF371F1FCCCECA8CF8E25BCEFA9EF7CCCCFC47ECA5EBB4C0
DF4768FE7C21E8D6749974694D9666750E4EA1988E7CD3E27D7753EEE9E4D4F0
A47CA4B66CF0E9A98E7679B6C17A1B6DB6E9568F3CF2D8365BBFE2D1C71FDB7C
F9560540B660811E9E9A1EED1F680E950533050AA97F436DA1AC606DD2146B08
1AD3E8C4C4C874A7386C9D7CAA5C511D9BDE762B6B15BB70DA1D7EAA6DB1AEF3
0F905767BF78F0F904504D8E4497DAD6B44BBF4DB8DA28794409EFCF278FBC22
144548E29C79E699D85F866BD668A2B3D0B43CCA7A200312E8911F671D68BE60
815E8428D97BEFBD7FF4A31F69757B8A9E65ADAE324FD025BFB3936FBCDE407F
5F73726274F3C58BB3B10939AD52C0033DCD8166D7D054AB7B727A59A3D3DDC9
37E8ED5F560AECE991B5D954DEDB9D36D6B5BABB7A6928349D0FB7DBE379369D
35D7B4DB6B537BB8A721D763F5E8C40BC313A359EA0C36A707FBE5EF8EB7724D
CD586A8E750A0F78AAD55E359526B5879A0D29E3EEDE9EE9C9964E6DA760B1E9
75992F7C0B74B2CB663636B102B62BE6F6C0C0DC1C95D2BA501BB3D1461B3DFE
F8E3F4A1824B96CC900F213464FAAF3CC833CE38C3219308B2039669636BA79D
767AF2C927CDE69FE6C9E032D4934F3EF9B39FFDACC3D4B18F026A0F435B8FCC
F3CEB97FCE3EFBECF3CE3B0FEBC121193F02E162EC098B57533FC6F6D20B1888
911DDA4084C81DE800524D82C76BEA730A63C0BC680048520C17EC18829F31F6
4E9533B15C67F7A9E642EEA36E21ECD375F446CE8AD4031A1D0D842A9D330435
3B374F2E50DF4753BA1529891E371B48331B1FD590AD685CE8DFB19B9B335B27
FDE75F8891183097F3A0C7A43C46E3A427B419CDCC7E6CCBC0462A8A874DCE80
0DADD04E73F05677E414D070DA354BDACFFA508F13AB927831BCD96233AB6ADE
20D0C6474F815E4A17D787CEDDBAF31267DCA45D45FB9F32DDE3AC472A713090
D9EDB3CF3EFFFCCFFF3C1FC8C67A2DAB7AEAA4CABA0243C02383B127C9954ABF
DF3CC1A87F379C704088E64EA02FB917B66C0A3AF4DF75B08F93B3EE11C09285
C2CA39CD614C92054058F0428C8D8FB59364BAD4F6BAB45C7B7AA3428B77F594
4163F9AC3A6CE3ADF6D478FB85D34E39FDEAABAF2AFBFBCA8B5F5A8CB2919E7D
667CDBAD56ACBFC1E2175E78EEE9A7FF90A76CC9E2F5FAFB0627C79B25C34661
4C15DD091B5323632FAE59FB522BD7BCCBBED39C92FAEE481D0C0D2D5EB9EA79
1470391D335604892C35EC70EE02E8C4F95E7955FB083CCAA899C8E4EC942155
AA735E07740317440CE987B49903D4AE4D8046EF54DCB091BF9A280A4E9249E3
0842A2B9172D1E624FB7A6A7FBFA0B40967ED5DBD7D71A9FE82985C2404FB7F4
F0605FD7C8C8F4861B76F58CB6D6EBEDDE7870B0576B3735362097A2D9BB3835
3692426E4DF74CB6B4738BFF75F2A5837D8B0707B235C3DDCDAE9E223629F738
8DCABBED34744AD64C4CADED4AE3BDDD533D5D13ED7C78BA3DDA48ADDEEE975A
53938507DC1A2D405BD96819829621BD521B2765B2E2A476A66543A5666B1D71
5521E3A4422407D9DC9205B2544E3CF1C428F55C937AFAE9A7FFE0073FB8FFFE
FB995E1AAA9367A57645136507170B06291309E5AD502FBAE8A273CE39475218
30884B7E5395FE71DA126EB25D77DDF59E7BEEB109B500E8862434D299581FA7
D2B946E405827B81088AC6E08A64FD70BBEDB67BED6B5F7BDB6DB711B74F81C3
0F81423A8381E18553A1315F8A24F63A244848AE84A746E29BA170B62EF77B54
913B3F6A4AFFF22FFFF2FBDFFF3EDAC5ED6B38479E01E8997047B0BD1CEFE164
5D72C925279C7002959340CC76D86187071F7CD0781F2ECB08C976A36E4DBB18
5505AB8645459E528361D181FFE0F3793209FBD70A5B71F8F041B10F5C2B855E
F9AFCA19B75F03314EE1062A0DA34463D3DC62754577BC11A8E5DA551F170FC6
C4E9044850CF24565D428916D1772EB8E002997AAED08329055A373DA0DB50DA
1C6133101BC7D2C237005BAA0F4F3AE9A4B3CE3A8B3A7E169A8BA7AA3F52ECC5
4B3DB78627EB4A5B1D6FC4712C423E51358233B00F691B917146D6230C3B9F7A
6E6D702E339F07D611D3DE69215C82A549DB7CF3CD1F7BEC3114A88DDA34B313
6216BD3787E981FBF3862095466018370104B6EFBAC0FA3C0AB8F4BBD625530B
27AC3DDD48C5D5BA9B9B17FAA2AB87BAA0E969E9E002C9BC68BDE9679E7F4A3F
D6D70706BBD70EBF5C80615B9DAE7CF9B265CBFAFA0B22C0C989A9DEB2CE786C
747CBD259B4B8FE80B05C5DDE2BE46D7E4CBAB9E7E71D5D33DDDADA9E90949BC
BEBE9ED15109CDC62BB6DD7E8F3DF6FCC637BF5C4D816541F13F66460B20C12A
F18AE8716FF3390F40FC67346510BE9189898C5D1EDA55E681A872CEEB033B27
9B7BECB1C75E7FFDF5263137801EB9D0A8BAC7DB9F33E03E55A92FB7A6877CA0
EC16D538F8E083AFFDC217966DB4D18B25F06FF192256BD7ACE9A2584BABDC6C
64EDCEE04073A0BFD9694F6DD4DDDFD36A2FEEEAEED57475A6869ACDF5B3EEDE
C9E9A1AE5CD27730CF063AF9A2942FEEE9DB606860B0BF6FE5EF9F6A668DEEA2
D56897ECC0F18E7470D26CCA091E6EE6C35DCD027BD54963791AC93BE38D7C6D
EA940AB85DE09FB3C6589B10B47CE2AEA952E5CA00992EC229EB44B02C394EDA
965B6EF9F4D34F6B3277DE7967FA393AB611DFFF7BDFCC00A422AE6BAB453AC9
A48F70E2A4AAE85EB37DD04107DD7EFBEDFA5C329D1661E453A9B5B544B01310
DB3698D235C2AF6A3BC7BF82994BEBC8656787D317F879549050A4E555D92202
34818928B78D9B1E9A360B6FE3831FFCE017BFF8C55416947FEB5BDF9A6FFF23
01A8BAE1D1648E3FFAE8A36CC5087BA981B066E3CEA88FE77941997218F55FAD
02FE34FA92F24DD780452CF42B5EF10A0A605069FA8E3BEB112DFCF5AF7FDDA8
88CCE8B6446FDA39C97352A57D8111A0ECA90CB453456A89196018B083E9BDA3
AF76776C1F733C630D5BFAAF83B062F3223253767075E50B2FBCF0DC73CF3546
49E6D7534F3D9555157A79C5609557257CCED31305A9D57063AB515040F52D77
BFF6DA6B8F3BEE383A8349DDB285AC50CC74112B621D830529E65A26A78D0943
128074512F0BA44374E8A1875E7CF1C5EC25B37C1082B287A3034B7A8E640AB2
372A3F0BD8ACAA8CC78CCB03C936C628045BC86A02CBD8C7DA3386B86AC01205
AE1A77EC9A6D831AF63E9C638F45B45ECC482132F8999EE4CFFEECCFEEBCF34E
A29D731FF8DE81F189D1465121546CB6FE9E25D3539A82CDB01699F418C1EEE9
5AAEE95DB278D9E444AB4C514C7775672FBDF442B32B5B33BE72516FCFF0E40B
8312FDF9F89FFDC5EEF7DEFBCB552B8B79EC2A7E2ACBA5A7BF6FB174EBD8D8D4
E0C0626D8091E1228731353DD23F28D7EB9991D1559D348C6DCEC166CD28C098
6FA383BBD19B3BEEB8639F7DF6490BC68538E18DD0A383199F0F357AC61967FC
8FFFF13FEEBBEFBE5441AB48FF447C0A043A6C44BBAD38ACD4B06615BB9E6338
12526077F91AF6AF5BA0B82157540F15C54797BCBE8181FED1F1926DBF51ECB3
BCD5EAE96D4E4D4CF736536FF12CEDC1AEB464703075DA43ED49C9C881AEC6D2
BE9E7E19D163138D89A9CD37DAA8B966E5E2BE8125DDDDFD79A76B7AA2BBD36E
CA5B6DA4FEA9C2266864BA6CA6A1686493A933DDEA8C647D53A93396151A7724
6F8F48B777DAB22986FB7BE48269DC239D6CAC938F68E15B854A1E9E4CDD5DDD
93ADA99EDEBE89A9E2905040D5D55CC750289F89F244269048BB713AEDAACB2F
F2919CA54B81B12075D2B0C1F521448C4042A405F120D1F1A4CA622F614B0DC3
180DE1B1DBE15442AD29A97D3E87709D5B0231D7283932110DCEE33AC04B0E08
6131E77EB3DCA9A916BC0A470EB4430A3AD20ACD44C75C9B260B83BCCCC10B14
45837CE73BDF89C28EFD5EA254B29A77B549AAE072AE5F88A1ECD92FC62C4124
ABF48A2BAE905CFADFFFFB7FA7AA391B4E15E59B9C05D01838FD9E6A087358AC
88B57430897BBDF6B5AF95D36CB0BDFEC408CD622D9BE3031FF880F410F74558
937FC575A30934FCA3B49166CF385D6D14D57CA1DA051C80188AB794A73197A6
E298638EB9FAEAAB5309BBB59286049BA3A1DFCA3F7BE28927F8ED65975DF6F9
CF7F5E168C350A9FEB14E8B7D89A3604A122A164AB111A3C3018B7078E25CE5E
74CDEAFDF7DF6F28BBAD1393D5FBF14D644D36DA31FC1462B9E851F66A4CC3E7
558DA2011991E2021988829465F6C8238FA0F264C3FDF8C73F86D88EB3C9050D
75367FA72BF70CB7B47FCC41237CCDF33EF0C003A9027F44BF2ECBFEA3F82A09
33EA4A75C666D756C71D31D05F14B7F474F735B2EED67463F9F24DC746A7D8F1
A5D0694705DCDFB771BB5524678786D65BBB66987C70892F7D6670B07F626A4D
5F7FF6E2EAA7B57F962E1958BDE6E5A1C1E59C99EEAEDE62EA1A7D52C065EFBC
DE258BD79B98982AA0CE696ACDD873FD7D9DD189D5FDFD89B5C7D4D2339B6A60
CEE11B3AE8D0DC4E3BED4461FE7C072055241B2CCFC239B3ACA27245E8C7FECA
3867266342FCC1FBE3B159F5461DE36DEA3D912A3F89F6477A967FFDD77FD50F
673B5EBCFAFB7BC7272637DD6CB39756AE9E1A1F1FD472AF5D9DF2D4D795693A
87FA7A1AA5425D6FE9D225EDC9028C2CBFA1BBA9F12D1B1CE8CF53B3D51E9C9A
1CECEA5ADCD535D848FABC3B6F7715B190CED2AE9E76AB641F2B4FADF68196A7
95F2A99EA1E9948D65EDE1463E2ADF57DBB1E8D6D059D995E1018FE799B4CA58
A731DA9A9E9C6E4FE5BD13D3933DDD3D537ACCBCD327F93851CAC77C461D0240
2A8E74843BE655C3512C9E6C26E5054754F37FCA29A79C75D6595E7A0B441DAA
D34F3FFDD4534F85FF447318492AA28B1379DBA3BB692EA154B9BF56A251C23A
F8C45D6A3BD3F10C873DC804035D9E73BF3566F64E704CF5924B2E39E79C735C
86CEBD08B6FB743B489016B44129CC007AA3F1DC76DB6DFBEDB79FF7A7E3644C
08C05AC968CBA9582980E63034BD96339EB9630B9DAAFFEA3A4EBF5965DA9E80
37F1CA2BAFFCF8C73F8EB943AC38E2636B0B91059659C93D0DF288238EB8FDF6
DB694263C3CBA0741ED0F8006266B6EA52A86B72C7682B89198528552D499A05
CA5BE0D5A81AA71A189C571C58E0EDCD53C130AEBBEEBAE38F3F1E1962469A4F
7EF2939FFBDCE7888DD98D364A08087D0C0FB857127D7949CFEBE2A00509DEC4
7D6502571F49CDC6473FFAD11B6FBC91EF702EA80024954B4AD819D3E8A367A1
2FBB4FB10DB5885AB0F71CC35D6681E54F3827FAC269A79D76EEB9E752BC6B37
9AC190B073B1A24D103074E4895389A0264C4D883E76F4C15D368CC35C1CC985
D173AA0A2B18773DB25B3DAF519CE752A1D3ADE92CE9A2F2057B170DAE373D95
77773799D03C590117B3363EDD3DD833B4786883DD76DDE3778F3D393DD5D1F3
4B10680EA5809FFED3931B6CB8F899E77EDF4E133D6553C266573E36516CEBEE
060AB8A7A77B51A72D3DD1AF33507818DDE9A597FFB464BD9E763ED2EE4CF40F
140E44E41F5858A000B220DEC5FEC6249FCDE1C98B4013CB09420AD1335F4E77
CF3DF7BCFBEEBB5308E093CF302BA131B78E5BDABD66CCBAE376DB6DF7F0C30F
3BE61C01756EB3E58D48408C0EB5B6C7D907650EA6A0705BBB76A4403615C7A0
045FC83C4F9DC1FE81A2246968E08DAF7FC3BDBFB87B4A4E799E365BD4DD6EB5
B6DC74E3D5CF3DBB6C403E5AF6AE7DDEFCCF77DC29DBBE37CBFAF53FB944D2BE
9D02BDD56CA4F57B0BB5D19A6A35BB7B9A52C659A3D355CCE9F3C353D3593EDE
48A38D3496F209A9E422FC9FBDD06969228ADADFAC7BBAD11CEBA4910217D01A
6BA58D976F7CD249279D70F249438B86D68E0C036E24B6A3C73173270EA554E9
57BFFA5500BDA6644A33C9E8A3E2246E4198C4A210B182E6B3668D2CB8F18CA4
5043EF2A14EC00A3DF5D4E8612A27D96BEC9F9A4D85177E4A82331D91B944BC2
BD8522E954CCC3FF99AEEF358875AAFC7EA0F50C83AA0F806C912D6B61831277
D38E17D059574920F74900CF3E41A84CB37E7A81A23932DFB923F21457137787
45A13538D021F0ED4CA926EA6FFEE66FBEF39DEF00F832F22E852041368B5251
8B456215E8286972E057AC91B784B5B20998640168244E5BA2C91C8E6606007B
B2222E1CFA4FEA608FD3A203894472049703AD4C8219B143CA8080BF641D4A48
2EE0A38F3EEA508D1E61934D36D1339AEA4B8EB2FE290B55A69BEE22B5FD99CF
7C06F493FEC9C83D154830772B7275867D5653AF58549211A78C8A3853AD9D62
7C53DB9059286E8E7F0503B1FBEEBBFFEC673F338302B82D1ECAF482FAC4208F
54611AF408FAE48C33CE90FD6DDB8B5D9795D57D9A46AC5594AB435F9E0AA332
0F3BECB0EBAFBF3E1A0ACE88B3E7EBF9181F30433F9C885AA02E76BD254B57AF
59C5057A7B06FB7A87A48BFBFBD675CFE8E485074C2FA3AC51FAFED35943CA34
EB79C58A9D9EFAFD33DD5D5212AD8D976F323A322D892D39BC64E9A24D365DF6
D043BFD1F78787D7B4D3AA5681C1C9713B87162DEDEF1BD24F365C6FC56F9F7C
68C3A1F5A53B4E3CF998934EFFD89E6FD8E517F7FCAC6C019001B1A1A6D019AF
05040ADBC57C2808F139BF6F8F19B331557401F3CD0F425F3B4072471E832588
437386219826148801B5C21AC98A152BFEFAAFFF5A46BD81D0A09064A13B5A58
F37B78D9B18BEDD24AC955B24FAC59AB71A7ACF9F56F7EF3E0830ED204172A67
7CACDD9A7ECD2BB77FEC91C7D65F3CD4D5D5E8195F2B3F7874CDAA6D36DBE4F9
DF3F7BE2911FFEF637BE363532B5F5FA4372F4FA34211A52BBD39375FA7A7B06
7A7B362B2354E323E38DACC8018F4E4DC8C16D76778DB40AF2E7F10C05DC91E6
97026EE7D9CB794BFE6EA980F585AEB14E3E3C393D3ED16A370BAB6EA0BFB4D9
2727B6D87C8B3F3EFDC73CC46648F8CDCEB6DA8B229E1C957154C059D5DC504F
AD5590D074E3779F49034C3A55AB165BB2FE0487868C80E4DDADB7DE7AE08107
FAB72860EC215CC654226977DC71C7C71E7B0CE4172B45D931F2112616968F68
2DC306F39955640273EEB70584780494E197CC261123569F6606B1E30B45A8E7
2D1096A59344501D5D82DE8D545C9C14DC2C4D0531F0349354204AD505084638
1D1C1986E18251EA8E48C1C851D329062CA62F68AA7FF39BDF1850E302F1686A
44051C593C53E56B42C728C97EF4D1475F7CF1C5C4AB703018862FC29CD0C8C1
195FCA8DB8268BABEFBCE73DEFF9D6B7BED598D9D937FD472F2F1391DBD8F82B
EE7CD8C130741C2A2031071C04E4398E4A010D29DB1E6CBFFDF652C99ABD48A2
E2E66044508159115D774D5DBB6A6D9E2AB2745D1003142C3AE62391704E8D13
E1AE2E033F5C3BA4B33137DE3031B7DA08DD9DA9A9431A50AF18A1CED2FAFA1A
811FDD5D26FE0D37DC00F8D1F29FA98BAC61F18D934A8C047FC0FA3BB2FDC8C3
BEE8A28B901876EBD76D7BC44D5EB5CC4B332B6A30AC905F0694CEB72324A64B
30DEF0D0A2F58647C6B6DAFC15A32393139363E5166F95B0A722068307DC3FB0
787878B45DC2B625C0BBD3C0D2C5CBA4532727082C148FF4EAD7EC74F7DD7795
276DB8AB774C8A59BF2D3A1D35D2B20D37EAEF2F9B177564688FE669BA7FA0E7
8FCFFD6EF34D973DFDCCE34B96AC6B241CFD75D9A4BBECB28BACE03987CFE251
B661B684C6FC5CD05A30D9560F3CF08023C9C8E5F99C128CE8189B8ABD1F40BA
127E246C1225058D20F5A1B691AE038F2066EC5BDEF216C96B7755F2EA20F5F0
E0818C72C67460B0C40707FB4BFC6727350A599035BBC7868707172F9E182DB2
E9EF39E0DD7FF7B5AF4E4E4E2C19EC1F191DDF6883F5BAC7D60CF4F52C1D5AB4
76E54B679F74E217AFB8A2A7D5DA62934DA756BEDC93A581AC31D868CA2290EB
2185BD74E9E2CED4C49AD5AB27C78BA8499E1AA363F2F4DBA9BB39DDE82B1470
9E8F661DFD571EF074D1D7285BDD4C53A5029E4E5D13A931DEEE0C4FC8036E4B
DCCAF31E1CA8D83457AFD2FB2263D49A469A107BC0CB61FE756C346F8404D17C
31099466C61B3945DA1BB263A41A9F7AEA293A8BF9B045843312CD0A38569E44
3CA4669B727EA252117C8E24029FAC5B935DA65D8C4433CCF23626D884B0D2B3
736A06F19CFEA505F46CDDAC0F891FBA3DA24421BD5A2523FEF22FFFF2273FF9
492A73DE301EA7FF081C54C3633ACD8C6622DF492EDCE7C8CD98F557D8FCD3CC
36760B243E53459D88DE750215578620015F7341B6418BEBB8EFABD00569F554
75F18B00375B60B2123478734D539C6DD02CB2D1500342502C137AD7D8171D5B
33FEF380DAA27887FA9556444E794DF6FE6772C029F4EBB52D9242F121DEF0BE
FBEEFBF39FFF5C43D59603E58ED3AC611F7CF0C172CE520918961568B0B47605
2549F800BA94062983C92D0849F01B42E597EEA861E8FB963936135D5043EF07
E23DC042A99795A6B41F9FAAC0463B749B3650C99363CFC781932C505638106D
B967767D8486B17E5A0B021BC8DE58F8402209F547FD313879E2ED3CA3A97598
130799611AC64772843205AFBD7816E634E272E392A38108E3180F36E786D866
6B1DDAA774DF0D3658EFE597D75C73F5F5C71C73FC861B6CA467900AD0EF52D6
297AD8E48517ABF9ECEE19284DC2A523C3134B972C9F9E6A0CF62F7DE9A5D5CB
976DA9679668D0CCEB01FEF4FCB31B6FB8714113B1E685C2D56CB447C756B73B
9312F11A95266E787C7AC9C0D0C9A71CFFE9CF5CD4DB97E9AFB2387BFB64A68D
337248C6B1103160E71CBFC18D3EBA9AE2134E38E1ECB3CF9EF3FBE6ADA47737
7279817202ADCD39E79C73D6596749EF6A3D76DB6DB7FBEEBB0F81AEF538F6D8
636FBBED369D4FE4E9EEBBEF7EEFBDF76A00B0B032E7F2EDFEEAAFFEEA6B5FFB
1A75022008DEF8C637EA74A5A0C53B15DD3106938EFA7BDFFBDE6BAFBD563F91
2E01275C39FA1BBEF8E24B5AEC829372721A9EC281DEC191E1611DBB5C365347
5E636BC5365B3EF3C7A77B5A9D3D767BD5BDF73DBCFD16EBAF7A76E516CB162D
EAEECAE4D569353B9DBEBCD19F35BAF38EB6C8E2C181A25DC40B7F989A683572
0D6CA0A7A74F5250BA3E6B36D64EC9EBED48EF8EE605146B326FB7DA05BD9596
67AADD9A2890D269A29D8D4E7746A75B53AD3C2B5BE848344C416394647B2D7B
F1A517F32A1B8408C03CE73DDE069C3850FD11C988E1298B3973627060882CE5
55EFC29A4034599215701EB805CCAE87AD804AE0D06AB77CFAD39F3EF1C41369
84AE7D1BE114BA17CDE60CFB94D72B7578E38D37220528D3E761719EA01371FB
81F95EB3E35B94AFC0D6E28251BA7AD0F2163925992249B4000E8BF029A1368D
87B363A0EFAB5FFDEA471E7944BE9DEC5D7D53870EC1EA66415FF9CA57341B30
63C4BAED08B159E0B922DABF111A86CA95DC7FFFFDA15839FFFCF3757E5315F8
41194732CB1A8395C5622D038DC5F3DFFFFB7FD709356288ED814F693BC0F5D6
9E6DB35C596DE425E11AF25A66904481032DB3D76E01051CF906CC744802D8DA
88A7A01AC7B80400E454EFA48AE0DADFC76AF4B16297929E908A9292C66602AB
984AA4B19600B71EFA260DE3B2CB2E3BEEB8E388C6A3A46BA94C5B78A6C7FF8B
BFF88B5FFCE217F8BE79208A7266A736B13503259A9B9D8AE60C3B982C0F7F72
DCDBA83AAD1DA94F7DD3ECAADA304583DD929C04030ECC0D91679BC2FA27A033
5CA3ABAEBAEA90430ED1EDB0FE5D2A9DAAF6181E6723104A66A491F3992F6F71
C776500C0BD5C51607BB4B6E4E315F59575FEFD092C5B22C8A62DC225297A61B
45F8B8D5C90B48ACAED1D5DD3535D5921F363A3AD9D73BA86959B268A3D52323
CD34B07CC3E53ADA83038B25C4A49E172D2AA6A335D59C6E8D678D297947532D
ED575D6A7A746274B06F5006DF4BAB5ED864F946139323AB56AFECE9818DB9C7
F0D4F944527C69DFC801928B7CF7DD776B73D00E9360DA9CDF277C0F53959307
3642E7FC3E048744830F3DF4D0BDF7DEFBC31FFE308400248FB1C538B4663765
DF344A22493F82F98DAD12A2A0E4AF464A83832070043D2F6BAF292ADE640D79
88BD038B26C7C6D65FB6ECD8A33E71C185E7ADB764E9CB2B5F6AA47CBB6DB7F9
B7C7FF6DFDF5969E79CC11675FF099159BACD7DFDD688D8E6CBAFED255CF3DBF
E946CB7A3A536DB9B9ED34D8EC2AC4C074AB9915032ED2BE9D5C4BDDC8B3BC93
4D770A6267AD992CAFA92C4D669DB1948FE59DC9029B27059C0F17FF2D0A9326
5AF9682B9F98CE274A585D86D9D76A2FDB60433DC2E8C8F092C54BF4CFE1C975
F588D81CC67B9377D08E970E903BFBF8E38FA7D2C8F56198FD22FBA053A779E3
6B9E55E06FF8A6A4F11AD52B55B80F04A5858B21AFB87AB8BFA90AD09173256A
A7CF4173A089B3B226D2BD77B08C8912BB5403F16A5AD3052234763BE2278E43
6AFBDD72CB2DD8191AAA3ED4B0A5BABEF8C52FEAFD165B6C4107FBB4A0075CDB
75E6F730EC99C8041039D30553EB05DEB011FA504505DC5EB06DA25505694837
74C2AA709F985456A4E8B8E555119A5B35988A2E054A7607457816ED1969C79A
0A741247B6ECEAF205A72C5D19F28ABD4B4F27C5F66FFFF66F7955AA2EFD2DE3
40EF756B8D41C750A3D5F5212C9481321B3497167CD54058EC167C56C83835CF
F8AC46513178DBEE4C14F607D1386007FAB92C037D9318526CA57CF1C5175F74
D1453848A98AE4A50A274809168B224FE3D4534F4D5538D72CD31057C932FBE1
0F7F8865C92348A30345C660B5DE75C076BE09E9546D8FD3CCD41BC109DE532B
68260DF292E0C22C696D529864D025D1A9C2CA991B0EBFCE24ED9E07D752EB13
4D97EEAB152FBCC4F249D32C5064666D9C66F186B39F8C8EB38B3CDF446CB1F9
C67FFCE3B3E5934BE8A745034B46C6A63658BAD1DAB5AB5B9DE93CB51BA990C7
795A37295D3D32B2747D09A0C9462673B233D0B7646242F3DEBDA85F66F8A474
F4B20D37999A6A6FB07E11FD587FC98AB5C32B9B5D53434B9A53AD3523A32B5B
ED427A4BA98F8F8F36BBB2A969CD6F87E05E39EC55B1CF86668A6CCD7C8238C6
A952657F2C20B85D85C6FED029D27F23D75DED15C9EBC1586238732343E15951
D9C885CF570630DDF3B953F5EAD20E0041A0F5D61D5D3AE2820ADB1CECEF3FFF
F33FFFD9CF7E463756A80DCB104AFFF0F0E881071EF09DEF7EAF5C8E4243CB56
EA6EF49756CB748FC4FDF4449624E9FA26C72696F5659B6EBCF18B2F3CD7D3C8
07BA9B69B4BDD5264B573DBF7AD30D06A7C6C69BEDCEFAB226BB7BF242024F35
A437FB5ADD4D7D37155A37CFE4FCCA039E6EEB6FCD76964B648E67693CE5D345
72A218D1CB053957A3A8186EE7A3539DB1E982FCB9931AEDD491206F4FB72450
56AF5C25BBB4ABD19C989AE854063E51201470EC4AC44E3010B1568717D34B84
EB415A01D281DDDEFE9F8DD9D80A26CDCAB31ADA83AB676EBC5895A1C53AE288
232EB9E412AF14DF21D780EC935C8ECC652E19028499552C51D8E0F3455C6AA0
159F7C6364CCAB60FA910895479B2E5056E7BBD454141977FD57CFBBEDB6DB3E
F1C413B45FD4D7DC435317A76B6704003B7F69993BE71D99A55ACC3F969C1973
8B03C4236455B38D54B9E90415F3AA6146ED169856663241675B34C7642AFA46
179183A82F3B37B4EFBEFBFEE8473F2241EE322DE293FAA68E61EC73C5E06B2E
D0C22F1B4064CDC83B1A524EA8CF34DAD88284829C8A82854623BCF2CA2BE5B0
1A306C19885EB1691B1DFDBC6A2BE26080DBB2B912A9C6C2168B7660CEF2D6CA
AA96BD1C10C8A752C8E9CEB64B6ADEB0FB56595BC30C4360D9386A70B5DAF0BB
EFBEFBB7BFFDED549101D8088B7120A85DC05E20E78D7B8D9883545105A4AA80
1065CCADC98FF065E4091E91A124F3BA77B66D6BD3172D8B547963C5279916AC
7F627C4AFBB9A7BB4FFFB77CA34D9E7FE1C566569EAE7CBABFAFB75DC04730F6
8BC8A4D64FAB4ED8C155AA5D5D3DCD46CFE454BEC9465B8E0C4F4F4DE44B976C
A46D3CD8F3CAD1D13583438DB189957D03EDA9D6AAE9D688946E3B5FCB997737
28DEC744425C2DCBDF766800890F1A231ED40E5A40D4D00D29446C583C6CA5F0
145D4636F239DEAD76B37E25C7F7FAEBAF8F1C6959451393CF6CD542A3728C6E
5BDF46D999AA7481AE35B5D08D19F8EC4841EA84ED4C6F031443E48C2D985D9B
594F4F97D4F6D2A1816C7A7264E5CAC16663EBCD37CB5F7A6E6A74BAAF993618
5AD49B6572510B0B6370607CCD70B3A7BB444EB51B5D59DFE0A25462025FD611
5DB278E5DA61ED623DE4AA91D1E189CEFA1B0CBD383A225F7CB29D8FB7F295E3
72D47AE5316B37E5253449A2533EC437BFF94D73DB02B265C0BACBE1871F2E97
0E7621F81439F95AC7547600B4AD0D05779A590E3F5BE42DECF9491643F4C369
744F08594EB015DE78E38D5A65F2466ECE4ABF36237490D4EDB28D5A5E714C42
87892302F501EA04B6E4D7BDEE75BFFAD5AFCE3BEF3C2D19127381714239E744
5A5EF5CE8283C27E8C35563EEBC5A5E0D56384A066169E1F6F5DF7E8753C56B7
7EEB5BDFFAE31FFF98B802CDEFE6BC0ECEB1CB3C7CE20C4C7198D42E20F13924
267904C70CD22C860D0DE3A73FFD69A7EAE7161D9DF8F278AEB9E69AA38E3A0A
0B8F234F99227FB51CF7C0B45175C069C24D57035C493991679E79260AECCD6F
7E7341015B66C4B5C9B51C8E139811222E4434FB6A3C274809A496F91481311B
65163B366A2DB4793A65477A22A8D4FE9A01C695DCA96414D717F409D5475601
E054C0421375902A02430AFE0616AAAC2252045A65A00C2073A3996A3D286BC7
10A1E41A368C0373BE46BBC18F6C72923C7434E03B9A28DD4E97A2B78466039C
23365C348CD8544E36A7C087836DA76F4AD7EAE79498823A0429A9D990BBEF5A
357DAE2DF4C52F7ED154044580CD4A25C2103CDC4EE8B899AADA290C13CC7016
A330F9FB8BF87357B33130A04D3076D9A5979F70E249BD3DBD9353D38527A36B
4ABF34F4FC3810DA0DEB5C047A58DA502A6041A9B16CC38DF7FEABFFEF3BDFBE
7D4ACB93FA36DC60A389D13E29D3C9A9910D371AFAFD9F1ED964F9FA438B7B1E
FBDDA3D2A42EB864F679AF15027F64EBC61C9E29F041C6954B55B51F08678C2F
80FB5E5A6B2F17F22261ED3153B71041F91C4BEC3B226F263B053D912AC4A03B
E56106EA2E3864BA88769E8C2CF434952D589A4804971ECEA730CCEED4A99A84
A3B96B444BA0066AB93104F7809E65516FDE6EA54E7BE960DF92FEDEAE56BBD1
690F35F366E1DEB66470F67535FB9AC5648E8FB5375C5AF2D51535BE991CE03C
6B760A047B9A6A74CB02945E7A79CD9A91C9BCD9DB5C6FD9068F3FF942EF0683
ABD68C2E597FBD675F5CD56964EDAC393ED9EAD6FE999E628FB9778245006588
60A64CA0C139D7D6979E76BF3622C9B1260D4D4C4C18A16053C376F402F3F9F9
CF7F9ECE4B6E8244BA97BC1126512C50915C83DF2755B5893534755E110412F6
4855ABB8BCEAC3A33FC17247E443F7D545BC7FE61C670A0E652390EF6B72F45B
8C065318D65251D134995D20B74005546C4E67FBD5BDDEC0F99B3F6476BFFAD9
8F60F96B06442F19C211E3C6E1074B006497738A6966358BF42210C8489092E6
8A1C30001CE8D86C0387890198F2890015FF756FCA14A20B26F4678AB0339C54
62FFA41288072623CD8A5B7A5DCC6EC89CEB8732A62FB8E082F7BCE73DB2EF4D
E6A3BD071B52F49279A8D90DA79984E8806117F2435909184C2E3CCBABF6F0DA
4EBBEEBAEB3BDEF18ECB2EBB8C47A6AC88F927A88041C6A9F4184CE792850662
69162A9E23CF71E0C83B95EE08B06D2F6F061E369FD926D2756536E008F698BC
48AB09CB8ACE383DBC67BF6C0EEA31A51375C18F7CE423D75D775DAA88658E3F
FE784D850EBB11D16926AA8E616756458D8A20B453D146A6AA288A308BBEF99A
D7BCE6AEBBEE8AA6A817B2DD996E3628C893F86EF4F56A2AC73A79A7D9E82EBF
A0156D15FD7F5BDAB85AE0868E9E77A7996560A8E1540E2D5A9C72F90A93AD4E
BBA8506D143D940606FBA6A6C69B5DB96EF5C637BEE1273FBD73647822E672E2
FB54E565D9E568689766827727F6889F1479D49820C2926624AF51B71B014190
0DF21D7DED6FFEE66FBEF7BDEF45CA3A5EB10A882D8E8189B5EE7E1A5B6FBDF5
8E3BEEF8939FFCC4BA99D30E6E93B580CF5D9316690DE6DC2804DC905954BBFA
5EFAAD6E71F4D147CB5D239645AC296E5C9B7E3D05D95957C1F9D94E4B17752D
E9ED6E8D8D4F8FA5C543597796D65FB478FD458B5AA3A3AB57AD1E1AEADF7CF3
CD9F7FA68013E78DACABBB470A78AA5512B0F4144C59BF7B7ACD365BAE373C3E
26AFAABB7F60CDE898B4ECAAE9EEB6D474A36B786CA2E8C1D429405B834383C3
23631FFDE847FFFEEFFF5E03E6984574438D19C661092A5039CFCE4DA6CAD0F1
2137638ED34856870B6885487DA799A4F634959A15FC05C340D11A4B89B2D11E
C82B08A867D882559F1C71C411B291E5279D75D6595A20FD0AE19E57545F46FD
2C0C8A8CA89FF8B93901C80E12AED4B67451662D15E53673A87F6CCDC81233FB
BE3C324C498833C37FA216F732CD37D584EF7C78233605B5873C25E76A715473
9A6B8F5F83EAF06554608CF9C5C7895347E4DF42267626C64034101A905AE4F4
9774968C3665874FAEB7B4692BDA552BF114E2E129240E6BEBAE7BE9B2D24664
76755917A1BAAA273E057E88AFE01832710E5835F06BE9815153CC4654E9CD0E
3BECF0F8E38FA3F3E22A58D6194EE1008CCF02E1717BE756C3B35781F58A077F
ABADB63AE8A083BEFEF5AF533864EBC17117B05DF19479D1632215939D6813BC
A42C3AAB832115337AF64BE38DCCA1C49177224C6F749CAFBAEA2A0083FAE791
471E099526D65B61A4DA48C427C8AA2691760862CD130140BE89EE7187358DAD
74143BE53F8B29EEE9EE2BF74A9A9A9E2A888B52A7DCEE9D5864EDF68D7A78BD
4701F0F0D5AA37A469CAF846D127FC99679EEBEBEB613A5872B9B88D992D4752
055143EC1AA4CA8BEDE8B23CDDDA4514F7DD77DF6EBBEDE6D405A65FAB7AA552
25B3D87959E5FDF4D34F4781429C0134C409279CF099CF7C469F48526BC34921
3DF9E4937803A6968DC95AC8C75945ADBACE00F35CF4501C18D0B600AD1AE98A
6A5A673E41C695110A3630B7D9661BF9D3A6E764DACD39373BA15258D945FBBF
A209E0D060B70EF7D4D8D4D2819E6DB7DAFA89DF3DB664D1903C8EB1B5938B7A
D2261B2FD3659F7E6ECD661B36E80F29DF576F3A79D6C94AB3BD6FE8A597562E
D960BD3F3DBF6ACB155B3CF1873FAE1A4BEB2FE97976BCC8A33FFBDCB37DBD7D
1393138D2C75F51685CE7DFD831C033DBB5927B3D08DDC92913043AC3C495526
468B026A3DB2A1217CB38A41D74E8619B2E69C4FC2DAF0ADEB6A5B6EB9E55BDF
FA566D06F9C4A4D068958135E38E349A64CE363E440C3CA49939697BCC4402BD
409C172287045D16566048BA46D523C15E145E02DD4FF520DAB1B527AD5DF0D2
4B2FD5667EF5AB5FFDAFFFFAAF009E41472F1021D0B1D21B734E5169CADE860D
D4FC500BD4D9D7E2C679D51E1B601A0AD8A1457BDB6916BF553EB388255E10B3
9BCC9AEB3BE7CB35424F68AA00104C55D06E1D9B15B940007450C45022C15444
922CD74469E7E8AFE456D179E8AD7FF8877F38F0C003ED2CCE56C078113192C7
15E0FEC4D6D127844C30136BD17E6BFDDD77DFFD9E7BEEC17D2BF0100000E1BD
494441542E2771065D01D577DC4E7345372453A8220FF7DE7BEFBBEFBE1BB9A7
0FA9BD36AB0C48A53433BC1AA3E2ACA9F947E7EB9E942A3235679AF509D1C154
D51145866D8A9A2CC73A55BB435633E2FE624E2A4EA6C56C0CA2B87F83199052
552BAC7F9AA1451F7EFAD39FFED8C73E8606D142B8F4068D634467C645232B77
A36AA41C63FD9121DD23E68477AA76DF55B36B4D59A1B0C11DA0897529B854F4
570AE62842C746C30F6676A47A2597748B55ABD65C73CDD5279CF88972FA24AA
B4BDB4DE65B7D112B6A22B4F4C90F59C5B010325B7C0ED842E8A5A276D470AE3
F41432E21E7EF8E138FB1A92A6D5F40898510639774AE23747BC359B3A2A7222
D1EE8818FD577ECC15575CA12DA2BBC01B600FDB8CB8CE55C4B2969A66C5C3D6
145D7EF9E5175C7081E6CD9C004EB72C2010B3AAB37AAADAE4E9BFAF7AD5ABEE
BFFF7E93C44A2B68076BC75C7DF5D5AC57A447E09F8BFABAC727CAB64E033D5D
52C61353DB6FBDF59BF6DAF3CEDB7F985AEDA1FEFE25FDFD5363A32B57BEA43D
B77CE38D56BEF4C70234D8C9476544E725B8B135BD66B83DD6497BECB5EB1D77
DDBF7CC38176D678FEC591ADB7DD5C771F6994E0D5F65419145DD5DDD540CDB4
DA05FE80E242824EB55CB8178E64812607E60ACD8F3ED73789116176ECBCF3CE
7AAE071E78E00F7FF803A83414A49F37550180F9CA6FF89A3BCE6241A351ACD8
CCD7ADE9D596A6BD2E9A4093FCD5AF7E1543673EC549340C09EBA0BA250276DE
7F8892250080390231859732F6C1A59384E36F35A9A7D799679E79C30D37BCEB
5DEFD2B06DC691339BF3BE189DA96AE745D620667910942E829FEF414C709102
7562A36A4DE8C03882D575DED9CC1A0F7F27556E6E4CAF98CBC57E1BD31513C0
8E225848D2E0DD0D5F3B552B40BDA7F88AC2D6C1F24535AD4433F04C6D575263
FA93375E2A03D4844950B7DAE7EC581440ED307A1332399A676DF8584D0E7004
AEC4148A6ADCF69801180882CDEDC236002B6F7FFBDB7FF4A31FA14D63B4C39B
872BC8E6909E267209020E618E2F67608A39120CA979FDEB5F2FA9EB32933C94
1ECDA980795E0D86041F66A50B73B7DE7AEBD7BDEE75B7DF7EBBA3FA0EE3D5FC
57FCFB48BD6E0E7FCC14CA3E990AAA9FE315B82633EF18B81D391D769B022C9C
870DB6C3E4625949CAE402F47553E01BC48003720AB884DB23BFED6D6FBBF3CE
3B8F3DF6586905FD095B490F58F5349C519CA0BB22B000F8107175C20C128057
BEF2950F3EF860750CBA4A18F7AAAC21EB66E961871D76F9E59715CDEA3A8503
F1ECB3CF1728CA66CFD0D0E2027698A6E2A6AC613E39B120001D31883DBAC9C3
6BC36990575E79A59E2856975BCEA6D2F165B5B4D27BEDB5D737BFF94D04CDB5
D75E7BCC31C77074ADA48973BAD12621BE7C66E586B36E8693705AB06F0892A7
D2429799ACAF69B1312C6A3D46D885F3454DC92CB8FB0DC1222D99361673627D
06B4275655FAFC1766534F5769EC6BC7A4EE666AB6D2064B966CBDF9668F3FF4
485F4F5767AA95F2CEFA8383CB37DA70727AE2B9E79E5FD297160D0EB5533E32
36DAD5D3B778E992A9E9B62673A2BB6B64B8B5E9E6CB5A297BE6B917F4F093ED
BCE0A25CB4448B42C5616F6F77C9722CF12DD3A120D678FFFBDF0FB37C2A0324
E496BCD19979866D0C0B08037C657D8DEE757CC26C9B5866CE10F4021E1E0ADE
01318957AD08082CDD1A7DC651C766BDE9A69B3EF4A10F69D7716B1FC248DC93
074E2E933F532EC9ED5826AD35810AE3E7171827AE188513AED66857AD1B3506
6D602BADF960681007D20A97D92664B7C07DF55F69EB430E394463D662E911E0
7FD060F444147BD0FE7D010F9E79D65FA503B8DD9BDEF4A67DF7DDF7C20B2F74
04885D4DB8C2AE6D14E82C684C4B71E8B0749D02B33D5D03C4441C964F905EF2
2E28D3825EBF59360625D7837D0F3EC305AF1217F7DE7B2F6B6149C2860411F2
EE77BFFB0B5FF842B403F085DC8D270FA538C6D3696E5994A81A61BD666792A5
629F60766B0EAFBAEA2A4954492D3FF5C73FFE71B98C279C7002210A660C3963
166BB04E464ABBE09BE30666050382F8258371BC1DB704EFC5D1B5146A49BC8E
F385A001C6E27EA4D05D06D99E02B44236C12EBBEC72C71D7770232723B0095E
F18A57485B91D28E7907EC2479D5BFFCE52F63A839C2F2D18FEB3031155B6D56
B2F43BA2B3FDF6DB3FF4D04331FDE4102333833B2A65BA4E1347C59E2A6FCF09
336C165D5757C1E6A5F7A71B0360A54AD668BA3194B473E4B5CA5B5D3B3CB278
F1C0DA35635B6EB9F99FFDD99FFDE217F7682F923990C12275A25D22E544AB00
5970E6CBB5916BA2356214FCD34A9108B365474D0DBB65A3A962B57E50C1E9D6
C8380C13EF2A6F1A0C284367596F2814CCB623EFF6ECB3CF269EC06CB84A2185
86B2F83A5FFAD2973EF2918FB0038859C54E993EF0A804E37A20DF262AC50F19
B64E8B66F2F8E38FD718F6DE7BEF1FFEF0870B83629807C45024634B55188A29
7502C2AA5D93CCC62A5457D12DB8A7DCD0ED2EEDCF76D11750C35DBEC1FA5393
E3FDDD5D4B0616E9CDEA975737BA25DFD7EF0CAF6C16C2AE21F5DA3FB86868C9
E289228CBC7AFD4D36DB73CF3DAFBDF1EB977FF6E24F9E73EEA2A5EBBDF8C24B
FACE58BBF38A6D573CFEFB270B620F29733A3C77754D4F163EB1F7B19BD035AA
8EE27166524501A66535C3805B20B4AB8EADAC2FA854AE5603612D10D23756D3
69369F1ADB7C98C68E5E6277C26B86334752A32652EDA1F2A4368C8C7425E9B8
D34E3B11B0C1885C40813566316E223B6A8020C91DD9079FF9CC67E6BB0E4428
A67135C873BEEF23949D044D8199447ECF4F7EF2133618EC020B84A04D9741F1
3A621AC0BF315C298473B380198EFF8C5961205A9C08F68CA1DD11FF1155AF3F
2157AAF7BBEDB69B9680343F07C7BD712C0DE49948A5E58176430FA2E3A6EFF3
08185B10C84867E8737335A7121762D59B87D29ABC625436864BB611EE3558DC
A38F3EFA9A6BAED1871A06EDAD305FC063EB8E5A44495D4AB10980BB9CDA0E89
B73A6E430C20A70AFCEC6E25141D3402BF26E22592DEA38071DE382C72BA6473
B8D1C56C54410D84C51B762F617059B77442C42EA40ADCA15C2729AC05B8889E
5D5F63B953204BE0BD54E39FFEF4279E94C09B513B359B0C9C39481AAD9DF692
161181A3D77EFBED27B1CC6EF10620DE76E8A1877EE52B5FD1CCCBEE39EDB4D3
D6B1FC334D5657B13D4016CA9022F38B0404163D84F580C22727C75BAD4E510A
DC9681B668F5EA919E927063EBADE525FF017BA1746E74DF0E116C302C0082AA
32BE29D40F8252123F4B599EA6D7456E7B1B9B6FBED9134FFC510273E9D2C155
2BC7E654C006EBB30F9862C4F7B9E58B82CB934E3AE9739FFB9CE6E8C0030FD4
C675AC80B6E460CA8D6220AA46188A3A5D22EDFAAFBEA30DC197654695E1F72E
72AE86B65A6619BC8A14B061E8B899DBA81D7CF0C15FFBDAD7F2B252029E6102
59BA1AEDB25385DC4EF3BCCC548001D1A8E8F7B8916F9D952CBE663C465451AC
A20FE1EE2896B5C035A7DE9EEE9E46B3276B2EEA1FF8D3EA17A5307B9B69B0B7
68FEDBEEB4B26671AFA1BC48F64FB5F26677A37F70A8D95D142AAC5E33DE9A92
97DFD7D5DDFBF2EA357DFD83A3E38569ADEB4C76A62EB9E492633F7EC2B2E5CB
9E7BFE457D7FBD22B5B3AA591055E66E604279BBE11EA825C35210D9FA9AEE75
E491475E76D96558CDF03A91FEB0F9982A746504FDFAF3F9A694650297004400
7D0FA824521AC1F2E8F3A9EFD321AE965F4C33338E48736292AE5E23C9CD22CA
2F7CFCF1C7237BF39CE3ACB512C1FC6A578D75F38AF2C9711D8BD79A2B6C6689
3CB450C4A39DF3BE902CFA9F923272B69C2900B3E3468A31EF335B01FBC80057
D108F5EC24ADD9C6766A3B81867DB634706BF7541156933376B08A13112721AE
8853CB0C3B7A2366BF324697F41320125BF69A2E7D689E61FA356199B9BE8B4D
6ECC546CF164ED9B55658A761FDDBA27C2DC52C5666AA6017C24DBAFA9CA6AA3
5D70D3DD409354A0BE0F63B94D0AFC60C6C3CCC741FA8553DBA978AF5C10886D
813DC45D28E2689464A5FCB6D6373A2E84E1B41C0472CF3584B94C10DD8EBE4C
F6716376C92FAC70F60C2D49F024EDEF36673588F4CB7022B47B0A1DEAB6DD76
5BB9D7C015991FF45D210F4B6A0E208A24D4C8356450C3B3845224BBEEBAAB1E
0C4FCE530F2D1465BBB19F57EDE5AE3BC6BC39FAE13658EC781C59AD874C03F3
EBEAE2BBEFBEBB0670D5555721DD9CDA7174423B43FFFCC0073E70E38D37D205
3A55AE3DDA85BBBB3450F3223FF5939FFCE41E7BECF18B5FFC82ADECFEA0AC9C
1B3D693AF4E0945739C682818C0675ECAB0670778CCB0E592CBD90C3BAD75E7B
7DFDEB5F8FE64BAA42A0EC66CE30FB0F2BE4FCF3CF3FF5D4536FBDF5D6F7BCE7
3D146F68E68DBB89E42F0CC36081B86BED51D147CF414B864DF44CFF8589904C
33EE85ED000656447E3A25D9597FD18B97FF76951E64D69ADA76C5564F3CF194
6EBCFD762BDEFFFEF76B0EF5B0CDC971E06CC313EDA543BD6B86270706BA245B
FA4BA8F0EA35239C89458B07D6F193347B3990C8884F7DEA53A79F7E3A2922A7
039DC063F73BD9533B33FAE4CC33CF945D053692BEDC8EAFA4D0A40C2A5A176C
A01E107F0888D84116F1C43767A7EAD3CC3A4B99776F7EF39BBFFBDDEF9293D3
E35C78E185A05ED1A94EF0A31B6296B459F51C8C8AA4394F7FDC9A93C48736AA
AC517864F49691C37A2F97542AE17FFECFFFE9048D73A8F6BC1B552B62227EC4
815C2BE598ADE704A9AA89DD669B6D50B79A344E9C233DDC6B3EF737556031DB
079E8DB3CE3A4BBB4B066E5E91213BB3607046166A0EDD1062BBEDB683871520
24C542A807835A5C2C10718E6E399C667AC69EF65499B97A5ED9F40EB4A05951
EDB8137AA8F7BEF7BD7280B41CB82E3A9B1ADEFEFBEFFF8D6F7C0375CECC5F77
DD75871F7EB8B933AD30781CA23BBDE54B13AB1DAED99654944F89D4226A98AA
CC77744B8E3BEE380D00F62E5D9F64BCB1F15821EC7947951A815B26722312D1
A12888738AB3EB243D33198D21D7E6DA6C9AAD20C91F71BAF5279DCA279E78C2
7A84A7C07D02844109B231408628B3E7C146716C0989E7815C997DE523DCA8C8
CCE3B18A7D77F0B87C46D80F5E5F0DE6B0C30E2359E6426AE4AA6EE4A49584A4
961BD3276310B8C95989CAA3218C3B0760A699FA188371F68B55C1508D46A5C7
AADBE3B1996C2C82F8F9AFAEA01BC9522361C6A13534D107E335AF79CD830F3E
085F0926A131B10E0C3A28AF65404F5B2BA36E63CF13C4AB0B039C99F0E16F04
BEB754C11F5CE28D70749D09A3C2E28BC5A07E5E365694B93557800BFA2CB110
46FDCDA980A35C70A8242F7B2C12B13FE4904374AA7565F985F24BF8EB45175D
24BF13FE714E3862C8342E06BA0F0C16C417BA7A4F05E590F89426CE5AE353D3
9DA145FDC323E34B160FDABE5EAFB777F5C8787757319913539323637A70CD5B
3AF3EC4F9E7BDE859B6CBCEC831FF9F0E5975F3E3A3EB5C51645EFB3E9A9BC26
C4A1F92567C1D85057555C649A2C0327D0F9609270322BE5A360C6B11599256D
C282CFB2ACE181BBC0FA5B3BE14D6F7AD35D77DD656E391F781F486F8CAC62E4
B77DE6B49003A712C7326D77D965975FFFFAD7D086D47AC5D8D867B67D689D0B
C802C5CF02E54635DFDDFF34B8CFD41FAE3E4AC17F22A2C8F77D7754AFF1E484
100D2EF32D50667113EA255343B623CFA233A569FCD39FFEC4D4C558B14109F3
3D57AAE8CC38A4AE87E6BCB325D22C0232184BACC5757D7E7ED45147493FD11D
1D8613D28791FC0EDA139715111A954B20CD6D34AF45734C21A1CB29AA06FC4C
D0283E5156E26E00B19341A0A4B5ABECE89795BD142521A39E0373E454ABBE09
37DF69A79D46771DAC647D28175616A73E34F5B4EB882C36CDB941ACD19C94A9
42C63130965592501A5DAADADC0F7955C4E1885AAD0C21D635717231FA238ADB
780B4C93E8EF7AFE3DCF2C9C0CF18B2FBED8C2594F417EDD791FCD2A36A25E94
C85B5FEA9A72EA402FD11F85A403C1BFC62CF2E06C16FADDE7946372E9A5977E
E2139F700B3B92F4CC808BCA4C8C15EBA6E244A13BD6B555E60F0E2644748FF6
9346BCDF7EFB49709B216F016A3AE3B909F4F1DEFCF2B814583714C6110E220E
46D5500CD2BA042D55B126C74C9AA1CFB3EF8E6BAF073EFAE8A36FBAE9267C56
F06CF6FCF493238F3C52721F28A3C649460417D0FDAAB4F0A9A44F329B95EBAF
B07A9CCF48A105ECECFA5168B94C63865CA3B808EE21F7E9D478489FE8A9A53C
0E3CF040F94CAEA3779A765DED764845581CA42AD4E69C0743725706875ED937
2E5A77CB1D742D51F1B7BCE52D77DC718761DBE5CC8F34CBC6445D65444BE207
4D2C437F62A255D676D30417F85E81D2EA6E66D3ED62644B962C1A1B1F9F9C6A
4B43AF1C1EDD68A3F5CB26B8C5140D2CEE1F1B2E365E56F605892462AEB837BC
D9AEA1432C18A43E09ADAA055E349BD8997955B9C15641C4A062211222A0E430
8F33373EF9357602EB5D2FB74DA5684E11F5310CDEB2862FF08CEF7BDFFB6411
E755C7CF583663A4D87C20BBD88F21DA0ABC90053E5C363B9849D73ED6E2C05C
9354A54E07C601F346E5928CB6CF7FFEF305A4AE129759E8880C6788264D5FFE
E4273F29ADC00C585FA62A23BB4033095AE651524F0938CD5C39D17878B8BC1C
70EC215482C68CD78890C1BBA5D167AAB2B9160B0E83A592416F361282FD60C7
23AF1AC7F9DC11BB32188ABD148F1B9E89CD0236A7CEB54ED92DB7DC22F59995
2CB629F0DFE1AEE056523049AA956A63F02BAC635ED5D7BA93A91B1D4651C961
27894618529AE9A1871ED2459C12AE2D81532AA6E4440AC1F296AA460E043E71
67D96F1151E4448999DBB978A3A2408EF8473D8BCC569D68CE78A36A70022709
0118E3E6CCEC51E38B6D547CBD08C31827778ABD86848DB8B068D1D6F0255108
6B4570764177DB84C5A6F160ACA40C35903CA1908FE04116ED5C9E0A41401736
7DA2FD015A327A6CB35F8ECA5A13B884E0E0830F960AD76FDD98364A2B375BC5
26025067B999551D601831C7A66682611C7059F64A0CF6027BA15C8711FEFDDF
FFFD01071CE061103D40BB4BA06B2AD96D59281922501F417731B0E30D94AA70
3D290127535D72CEE0F18750C0663B8B4230869ADB55672B3B01358488770C15
A8BABE85F86C73C1BB90D81D868E26EAAAABAEFAD8C73E46DD8B1E900E2A06D6
EB229B6DBEE5D3A5FF3DB868D1E8C8C8B1C71D77D59557360A013ADDD32B2BB2
1C7C9EFA8A9850E19276751A9CC689E9726B56BE69D64CB90692A5ACABD1ABDD
5978D5A97FD1E0F89A7F27C74855C932F5DC786644A51C17A200ECAFFFFAAFFF
F11FFF51CBAD2593CAD4E31024C005A19D941E4A3FE7F048D6E88924358035E8
9A40949D2FD0B6D79891BF32BDBFFAD5AFD2A650D290996F575D9C91D744A880
EC794B38F5E57D088814BFCD76009C56FA9514F097BEF4253243264F9D4FE3D6
5EB351B25E771ECAAD203A555F7422631A838EF6CE3BEF4C43E2152B56E84F1A
008688637DFAADF6863C5A8734B5379E7CF2C93FFFF33FD734120A06984906A4
55755D741C6836A82D9FD97C70BE4773A4314E782CDCF48601AF60E1A80FE585
4BF74B1AD0D4D6E174943163466E9201C55BC2494833D9F1E22B0BB549967B0E
8F6B0EB5FD1CCDC6CA77E283952278C36F21164DA58EE7D17440708CCE3FFFFC
B3CF3E9BFD73FDF5D74BD65B9ADBDC217A6C411A75465682F03521871F7EB8BC
584960694D9D47C83A0C8FD7C5B5E1356CED81D1F2E56C0ECBCD009A55DF4090
47455162E99A4B918402D44259BEF6B5AFBDF7DE7BFD8035F6348216FA9AA459
5995BA0E558E55CD758E3AEAA8DB6EBB0D73045582CB4E958ABC4F5D210A7C9E
57173FE490431E7EF861CD27F3DFA93A1BDA0240967AC0BA2C9EB4215A0E6CC4
C96C84A64C368FB04D0978E4155F8DFE445F13EA68C09D582FB0DFF465B97FC7
1C730C42E3CC33CF5C878236001DA7533796EDF9D39FFED4140DD21F04D017D0
C1F879AE29C4B4A9A92B6D1A0AD48C3EC0B567D6E2C563D40B9DE190AF8520BE
A3C616B9F84D82EA4EDDA61177DD954E269004CC526DAF830E3AE8E69B6F3665
922654572692A0F5DE7BEFBDEFBAEB2E9D2EAC48997E0F3EF860ED58D622814E
FFE8846B8BCBA1F48E8C638BDB48E3D717A4F00CAA44A0C0A2A25B93869C6FFE
8928186A68EC9246ABFDAA39D1534B8BE365A6807877EDA6368DBE1081FE06F7
97B8B934B478F1F0DAB55DA5D95858E2A3A34B365CBC66E5EA6611AEEB9A1C9B
78DD1B76FFD53DF7F6F4F70EF50CFDEDA187C8C0D749DB74B3CD4A04D66A3DC6
D8F8DA75D8FDB5231B2C2FE829F2B24B562A3AFFFE7BF30CA769A52448E681AA
48556109615E1A1598F99679B0D4D083ECB3CF3EDAC635FA7E9E1DBD68622C18
82E8C40CD686358D7813B805F045B8CEF6DB6FBFC71E7B687D2531F30A00EC33
95CD240C89100A6872D933F0689AC8C5C1D52CC07AFFAB2FF801708CF6DB6F3F
C95FFC952C3459D1BDB4E2DAE4B309C52C323CB7C4C9FDCD3901385C9CE00161
303D3EDD5C606DA48F88F7EAC2E1340709B015F42CF48CD327F08CE2E37A4858
C95A0B60AE9E46D78B732A4DA0C130DEFEF6B7CBD69425115D40804B6C48AA25
517256C07E43CB07FADEC8A3FDEE77BFAB45941D2FA54E78135183B34E3016DD
0C753333EC40A8DB05A2D70D0EF0CE81DAB6A0AC299D04C40269D7B244F35960
3E18AF8E7F000A8B651A314424A793AEF5711D89C033814CAFCB69D81E36AD48
CCE1C67029D77A19E91673161AA744A2F4B4EBEFA3ED48DB256D214D827B35A2
08F119DC83D27701E5EABEDDEC4C7605BC87451FF1AA0F87B36C9A9CB2E96D1B
19D8151A0EC57968549CE46C57FA8B801372797A24354B33190F53051264AA65
7990EA655AF4CF7528680F2BAFAA177475C274F85E2C9843D873BE580C1C6D36
1CD6B4248B269181E298237D38962686C5494D213DE6F9E2BD3F34D8CAE12007
5A3184755CF527DD8B002043A25A1C162AB632B30F9C9895F664D582726CE508
0699532CE276B80C1C27401F522A90CCFF5911E9A52A230E842AD61F93B138F0
C003FFE99FFE893DADBF6A7FBB397CED15CBB11AA1B9A9137B06FA73909C90E6
736D2C8D96F804FC4D5435A48A233A654D5A77713504496F810F18C3274EA530
1A191EDE70D9B2977450F3860B81BA0B177C4A7E4A5BC2A5BF7742EAADC40F17
F5704FFDBE777050EE6D4FB68E51C1C173AC040481D1613C97095578767D47C2
45C735AFA0FB56848CC1A94A3603AEA18D3916052DA84FE43C9D75D65984C163
EB40BD4E3EF9644AA5C128509508ECC00D456C5333F38CB0C6086896D3144A98
085BC5DC70AC6D9D2F545BDB8AB57F9A080CA347FFD52C19D3E7EF138B266A8A
974FE49FD84CDCF3F04873880C594246D7CC3E3D4E59EFB0AE972A97B20D8D49
ED82A2D92F7F0DB8500A5EE991471E79EBADB7423FA42B1F7DF4D1DFF8C63770
7FD9E1FAFC9A6BAEF9D4A73E45E8AE53F5BA8FBC1C28574223660E211D6B13BF
06B54B0B66DCF57AD5AB5E2527CC3A00CE07B3876AF24DAF91420E1EB62CCD95
BB914A7C139363BB3AF38D2E6712D0430E0EBB3CCF31488409C65084C712A0D2
7F213F300226853E5191BF229561455D5CDF4485E3DBD5B8F44DCA485ACDC879
CF9EA347BA9D9E917EC0A90A9D5A5EA50A589742F6074A19E43322C86E77A7A2
9EE529D8EA9844355E237F9FD531A480D0BDB5C9EC1034A60662C785CE140119
18AB2F5F7FFDF5BAE0E9A79F8EBD02CF9AEC096C20ED2B80753C1749AE82E1CE
75A2EC78933DCD26AF8949FBD92F774F74B3523E811259BB1CF0BD1540C400DB
B5670C18B6BE728CB1901461B4C8298E0D3DA4D846CEDE61C6C666095C44F6A9
26C56D31CCE866F045DCC7EE3BC62673D14BD4D031165D73B37C6EB1378978EB
B75424635E35AB965EFA27C7CF4CE22C1591583AA5CFE96D7B9610491C06E4A3
AEF0918F7C842ACFDD77DF5D8627568286212976C001074430055209A7D028B6
CA0B6C64707A4C4F0F96816BA2C4AF79F5AB1E7FFC71BD417C5C72C92545719B
E6A19DF7568DA1362825516A965DD2FEF474B1BBCA46494581AF4DC5EA811A25
8FA3D14C29D4A3D79E5DDF94689095401331767C2A39BD6329ADDD5019191AAA
FBC576959DC34F3AE924BB4A668AD69F64FAECB5D75EC71E7B6CAAEA3438B72E
1B8B217D8C2D7B454879CAA51C12B4EA8D75045A88682F1B6EE3078CF8D539CF
5D33F4FBAAE58039CBA4C97DF8595F808A596871CA2C397C4A909690AC5BA552
544A1251FB4A8F1C87CA8448F369B3E9C8FB314DAE69A2538AC74C493BE773B9
7C8E2B60DFE8BE575D75D505175CA0ED04C1909EEEA1871EB25EC158D4E64101
D8CF73022B4A30F092AE8D71BC2DC6AB11BE88A939974017A4B288D0374457CE
46CBDB3BECB0C3EEBAEB2E02609A043865B1E62342B31108F6355422BDC43034
FF6ECFFCA637BD49EFB52DCF3BEF3CD6C58E353F34D2CDA151DAD6CAB6B315A8
D3A10FB1FBB38A1C0D3198AAF47CAA80DCCCE4FBDEF7BE6F7EF39B59E8EA4803
25761A016AA6313242C75942BCD7DA6F44BA6FFEC421457069CC679E79E68D37
DE88919142A237BA856C7BCD3CD5C9EB20A2654D5756B264906F22D86069604C
2B0455B5A23E2BE358EB8505932AB413C637C25C83B191A1B1E9BDB6A8CE82AC
432433707756DF51C6826AC68220265609D099D11E0C82C37173BECC28C946B7
BD40A058FFD45181FEE38A2BAE38E288237C47C428C1DEB817ED25D480A35945
856A026E7E4599ECA5975E7AC619671C77DC7192028ECB6715E3A6A1D74C8A3C
307C5F4D1692487FD2A43018DB5F665D3107503E8B98268584018796A1A215CC
05E85D682B21B67D361060871D7678F4D147A92EC71566BDBD1B662B603D3E45
F47619F38A1782709613489C46FEC9346AFE757DAC7562EC664830C064C365CB
5FA22D681937D3F44AD14E162B581C2742646EC5A84FB6DE72ABC79F787CF32D
B6D0808B139B25305C599E160D2E1A1E2D33D9CDB2A7CDD4D4D0D2A5C3AB5637
ABDE99B6DEFC5FFC2AE213269E4C655230D62611CFC031D5A3D1701B762DE656
4F2A9BE3CA2BAFB4FDEB623389513C7E8AF11D4F46BC628012AE88AC499179D8
2D806253979A7DC34220DF678770FBCA179616D69B61590BD425D772C0D184B7
16E12298B6460CB09F6DF87AA8A6C6E5D13835EDD0B180988163517E524E1928
4B04B74FEE3BDEF18E071F7CF0F7BFFF3DE3E473D4C3020AD849440EA30B5462
5416CB2F55E623729C7A361DB198EEE90A8D8FACE02510B55538F2F818385BC6
A680B289646111CDEBC5DD7AEBAD65A581FFA26A8E59425568301AB0DCC74660
9A735A94B42206740410A432C44A4211E28154B19AA4AA052AA19AA8F3786423
F6ED95F2736388DC2B22561CF9FAA4E78CC2D173E9CB0EB412D7D5175C836B80
A46B9A63490FDB4FD734351B2B15DD182B30C7E15315FD668977DE79E7DFFCE6
370E8CE7156B450AF85F1F342E58CBF4796EF5A777BFFBDD0F3FFCF0238F3C12
0D82D965487CAEC7D44DA9943119307B83E533E596450A55CBA9EA936B8303B5
EDE442962DC8A413A379CE014424828798578DA24E3EF9E40B2FBC70D75D777D
E08107B035289FC746335B29F21D92F70F7FF8C35FFFFAD789FFC4B5B4F28862
CE3C61CEB3423111ED146A2D5CDC26DDFFF4D34F9BA281330C0BEEA73EF5A973
CF3D97CC90A14F84F875323589316A549B9F7C26481D79EA7ACD984E801D4993
8040D16ED666BAFFFEFB7176513084F2F457DDF76D6F7B9BEC4D07F40C03B6D0
37C0CD90AB9D76DA499B090B1118645E56FAB305ED137B48D01A0C972FF6287E
0698117C945475BCF0639AC2D7C68DD70843929881D7977EC96EB1C7302800D0
7B4C813CB425F03934E5A1D1A7B58C1142169E4E9333B8C6A606F949C145E384
B878064149FB17AA2A996D9330BB1C08E96C58135E20E694FB72A6D08FCB69E0
F9F60F4C2F8842B268BAF28E3BEE283B007E25977C58FE1292D5AF10A3AE35C4
F4893B901574F12E796BFD934D6E4F3455F5EBFA9A5C64DACB106E4901BC1AEB
35AD414D85CD05FDECDB6CB3CDEF7EF73B7403C3405BCF390FB134CBCB14ABEC
A0E4950F6497917400512853CA70FDD986E97C3EC3669B6D0690C73ADE95F1E8
DD76D58DD8B232F2194495E6920D375EE3CCA68A443AD6E158AE924631E8246A
50B30DB2C3BBE6EAF6C6C4B6677670F2E37BA818FAA849FB7CCDAAB5E5965B6E
89D16965E3FFDA8736EF84BFE60EE5116A47590EF5DF262189D039034263D404
DD86FDD428C92065A344A23A176D32ABE83FCC3E9B32CC09DBC6F5E5713F4455
1ACBD5223F31D2202EB10557F4DAED2F49781245074087CCC4F4B4176E45C61E
009B4D3A406F28FA9A570163C523E2CD78CE8CD7BEC91590D436F4528585CE2B
5EAD152B56C8CC649D0E3EF8602A85C0D992AF4D73213B1A818D8B479A5DEDC3
6924DF4EF00781E28AF54F7CE21337DF7CB3BE59F3FC8A1C78F95C8E789333BB
F8E28B3FFDE94F635F1B2E5F7BD59CE9385ADE4728B8658169BBF1B3B9B899F0
08A5A63234A18341AAB559B5CCC32C98CD1CE48D28A17CE28927CA9E2055EF32
27AF42B4F53427D75D771D07C64C3D8E41590177559D8C5D4EAD43458751E35C
BCA79D046230EE0DDE0E84AB44568099381E6B6E236EC711C50CAFB544F5ABC6
11CF7D4DB73BA702361C373A977CC2BAEB9BB1B2A206D66D54C43A91552D55E8
D65893EA833AE77989A3AA9D23A685094C55919205964332911841B7D0346241
02BD710C9C688D73B40B6C668E0FF50E98B324D5509CF6066A9E5FAD02DEDBDE
11C54B2FBD541B12213B9FA76BAB28AFFA1876AAFE04D219C03FF7DF7FFF5B6E
B9C5B5E9B18604598C3E8B2AC44EC27C91030DEC1FFEE11F207B4A65ECCDDD0B
52A89F71002F557A8BF80407D959B6D7BDEE75F7DD779F6E4728D24D1DD2CC08
99A323358B13C3917209DA33F327B03235F723852675F9CC420C0784A1A02F8B
FD5A2833D74150CDE5FAC6DABCCD56C05E749F23E2A8471F7DF4D5575F8DEE41
8299E11C1EE998C48CA715C4864C01B6B1DD24A29E6E2DE3E2490E29B39AAD23
52FCF7BC4C042AC710E37C065FAAC8496C313B85E4221DE3B9BCCDE2094522FD
EDDFFEED9D77DEE90653B6996C31A45915564C88BD29186AE755C0471D75D417
BFF8458C0E6A9CB98D53EB7179E271CA2B12D714407D4E6E2128AD68F566DF7D
F7FDEE77BFABCF1DDF70719B45462D270DA2415786F05A7F220C6238400D2F5D
635D778E87841F0951C7A8531984D4F7A590AC87E67C715A4046A0235D89CB1A
F8EC7924AE5837F8057FDDDD8A524523D7A89A28102BB30FCDAD114C74FBA2BA
3F55B62A959D91E425CAA35A182DC66DF4D4F47B608ACC2AC59462CA59071C7A
E8A1B269D83FB6BDB07C357EFDF398638ED1B21A97D8A83A191BFA4B106236A6
4F1FDA51762D41A7EA19E088565EF5FFA270B053D1A6CF2E147190CAEB9B85B2
31CDF95BDFFA560D157801C6812CB0E38F3F3E1EA19A290D64BA5D76FF65BFE1
CDF327A49223D2736E1EA7514830EB93534E39E5924B2E81374A7F75AC38DA9D
5D65E769ED4CFDF7831FFCA04C280477A362158D52633AF4C48DFB10925B0EB5
259D9B5BD89F9BDDF8322AE01A7D81D10F9E2EA364D9B7F3CD83E5600A192876
94A93C10583EC2911EA451358FF1DEAE29E0F972E718BB0E18B2EBF4FDBDF7DE
FB9E7BEE31C92B7E36D3BECF3EFBC80E70D0D52952E234A4D52DBBB3EAE5C9B7
1F697437E9C93457D593439D5106C6F7F1D1AC20A3C91811BF5C50F38981F5EF
38CA2A879266DAB835051C1F04FD815EC7BEB174F54FC806E244B285CCCCCFF2
916741B64422A6D93BAD1118DA81794767D4866F7C6AC7476B6E7D9C16B6BD5B
1E80754F333D406320D2CC7C934BF3492799F8A59646AC1D1C27171A15893DF3
932D7030B6DA6A2BD30981E377155D0CAEB212D12A24F8091FC2B1C71E7BEFBD
F7FEEC673FE3FBC6739159D443BEF6B5AFBDFBEEBB9DFFF376F4F499E9D486B6
1618274CFBE9D65B6FFDD5AF7E75C30D37487940A1CC2D88B63958879D15AB80
DC7AC11C5511BFCE0238B23FA700754ACF9353FB8E97CD6434790532E76CE415
6127CFCB247823762AAAB3BC621867EBB8B88D1C12A21CA09901D52C8153B936
0ED8CAB694CF3AEBAC73CE39873818A5FDEE55E090A3B121EE7C422F36DD947E
A2D8E9E800C8D9DD7A5D4B00BEA3D67193E7720DA5DE4861FFE217BFF8CD6F7E
133A4CAF6BE2E43CA879ECD0165293C71D77DCE5975F5E64A327279D569FF315
83133544ABCB30F4B9FC06CAC06ABE45FC7E6C9FCE7B979F9AE8C0A1AAF93C30
0E24F16422755404D5BEE64C988B897D40A884461944F9E2A0518DCC32559CCF
5AA3EEB2F939B9C346E0E1D3E35C70C105471C7104E39789832A8AD23962CDA2
1070A035F2A2A4592C6FB3E58CC3B6B5C407AC4F3535D3A9DA7762A2A5AAE48F
1FCE0E41CFF7E2B0002B8B7606F08B34B3C10699170C3EA0945FF8C2170E39E4
1087ACED45617E3542639F88D7D327071C70C04F7EF213CA10407EE916E0A400
609B7D33AF603471056BA1666BC7289410291AA45BE311CCB073EC12383465DC
937E13CFCB6CE0670A295B04A61E9C0C0E6BED5C95C529113E3D2F766A5671C9
756631E93AB68FC8420E2C5BB66CFBEDB7977C60BDC8A7B403736A9A4911684B
BD06076B541CF2C8648718758B2DB6D8420284B5337CD2DE919738421F5CECD0
A848B51AB3380A3D304C52B7C6010FB8500E9837B2E99E7EFA697B3FB507B6A9
C211B2F2B365E40790FD52148396FE93769BC6614E09FB2288981A8D91BD2EA3
DB0905501F922A0DED2EC7EE879302A6AC96407548A4569AC911D2007447B926
54B6CC7786350CD928C86E439CFC7DCB620B1A6BD65A1DB02BB0A374B0FB02B8
312F2960CCA2F2FAD7BFFEBEFBEE937173D5555799E22755E552AE62740E2355
9E9023B4348ED6810134A7232A0FECECB3CF66452CCE3C630645C34FAB877DC7
3BDEF1831FFC00DD40980EAD608C12B81EE6593F69977D732D2F62D9370699B3
2FA9228F6C0726DB5411B3D891258643F8AE53B586F569AFEDE4F9641687446B
AD492075A299E994CCE7B5B5F6F75DAF4C01522AD3841A3F1CFD1A9EDEC82638
F1C41337D96413D348D55E363735A5D834787B847FB1B2993A53F45D73CD3567
9C7186D69A32D3152B563CFEF8E3D8DD79D518CA1E43CCE145F1CD762264EDC8
3FD92F84B283DB5955F1559326BC22FA3A4E1163E0D15C87369B643FBE20ACC8
CBBA06B7AC8F991D6283EEBD862996CFAC44888F19C733DFF92518E35902439B
57B51524B36CE26869D0BE3EB9E4E65299E04434EBBFAE996105E754C0BBECB2
CB830F3ED80E4D8839ADDD55D36E4CAE054CFF39B771CCFE620B52E42971612E
C99B6FBEF9031FF88043EBA893C65C9D28D34C032BCE646326DB1279163419E3
21F70F5B3818523C047617D342672D921D40779DE54C15348F2F634C30E7AF7C
E52B1F7EF8E1AC62ADB2A1996606621D94CE67D285DA99C197707B447632C0D5
98D9A1DAD8F340CB677C0F00BC5A6E4E28AB0F80C60A312EBD259E9F31761099
5B01EB7EC0D558247A3EA7501A918202B66B1503FA4E68936224B711E1FE587F
983F64112C920853E0F822C50CD7B4E9C132C8D4D2BD707D8CDCE6F0588DB9C8
5D23C1C6C9AA960991A281C1DBCE78E31BDFF8F39FFF7CBE03CC3EDB73CF3D65
CFDA0FA6CB29EBDAA8B881E85C64DBCA8E2F8B0416200FE491162831D8C2F4B2
8F0D6490207EF6D967413C1A49EF46CB4C72EC1D96AA06C93A005047E9A6681D
571F9A93D29BD5E94C302F8672B80691580A611C67BF8846582C124E6854ED77
6A0F683B17CBD435A67C18237856C0D1208DF1524BA55AE8B8B6CFBDACC09448
B59296D67FC9E4A5591077E7F2355D9A938873E16A086EE4325522F39D2F2604
0F3885CE9EB153244C3D8DAADFAD76AFD9D05208A62D6C23D632917E96089BB2
E5A43F2D5FBE5C43229B65AD30E7D4D97A8E4E6AAD93419AC54B30E75418101B
D972885D9B8B067D1CD90DD101A6299D33043D5FFD345B825A5B582DF9DCC895
6801DB4CD7BA6BCBDD74D34D727F311FB7D9661B19431A00A8916F7DEB5B5A74
72FF7386A0B9ACAE43AA88B09CBEFFBEF7BDEFF6DB6F974515573326146B7E70
2D329C57E0440E0E25C81413432F6381CCBEE2E0B442FFDDD93B276E7EDFDAE0
44A7A58CAAC130228BFFA52F7DE9139FF804DE2A0892B1F2C5C5CDEE494AD5D8
60C623DD26C162416717AE9613897CE08623188A85508D93694731AF0A6ECD4F
9C9598060DF8924B2E49A181290FE836531C0AF7E54C337955D34CE5E8694CC1
1D775A0AB1CC2D16F2807557FD461BC59EBB6BE7E32660104C0115AEB182D632
17624B5AA3C039E009B5D2251F833223BF05BE1F7455A7A2F58A681D9F49137B
721A7D71590FE0113833CC82E5425611AE5294AD5BF0F99BDFFCE67FFAA77F5A
607EF4FD1D76D881D27BA3371D56F5734951496949977BD5BDEF9D7E4B55F0B0
5971C43B13E609F451F7D7D0C78ED3D6241DB45676670D6AD002E910EA9A4610
9051FEE4273FF9D9CF7E966C2EE931360D03F0303083E4795F78E1853A277E28
275009BD9E7AEAA9DFF9CE771E7AE8A15441D3ED88B3763EB78428C05FF01DCC
52971658F9652101CC8B0EA6180D64B65CFF537B45A442942CEF7DEF7BB5CAC4
DE914ACCC06CC5C392F127077BBC9738F0F6F3703BA8F95BE07C354A88FE934F
3EA97938F7DC732FB8E082934F3EF97BDFFB1E0C85A9340A3980C6B8E916C469
30DBBDE2B60F18EA9C1C17B5DC5EF4D2A85F74C75F1628F66D4C33E30A9DC02E
1955B21D4A1697E1CD399FBC387A4C235EA6E1AFDAF09AE1A79E7A8ADD0BE221
FAC1C40638D7D93C39E0F914B0018FA932A6E1C195DEC22643AFC313F7FEF7BF
FF861B6E702F0A9E9DD0A0532A794501E60AB79AE9C30626366B4194AA321567
316253CB181BAB41B1627ECA097EBD286ED600D89F679E79A62C03E261EC6D17
29392557DBE171296B41142FB4EE426F4D9313786B41EAE29694A0E8B1D119BC
853669321F224286BAD7B6DB6EAB45079D833A80C984A7E690BA603D0BF8DC54
05A8D02CF9CCF28A144C468CCB18E80695469740C4B8551833E6ECBE5D6460D2
51F853798C356F74A1B5246E8CBD32F0C8F32A60FD123E26FB6774938EA7BD16
03C9AAF23EC3D3ED836A648D922FD7CFD3A83AA3F11DFFD0EBE13A3C527431CA
EF69C5083269570A85566C354390CC01228910EB6AFC26AB40C87A0379489A59
C439E7CBA93E831B31825C43C226D3A90368E309A95973B6219AA10111C7C3ED
B4F6DF7FFF7FFCC77FA47ACF9C12F057BB21819BAFA1F01AA1F62696D8F280B8
9258A3917D9ADC790C4E724A3512C9178E31C29A5A6DE311DCC525A60F00FB34
2BF67F172945936BCE8925EE6AE162672B0F9D278C9E88E0D83457083A7E5E73
23CE3FFF7CC9A954F9B254CD4696D0288C78D18FEBCB5FFEF209279CA025B099
CCE31044A10C7FBEF3054A9CE0AA31F9708DB1A3881F7ACF58FD630C19F813BB
C6A659C930DB2BFE6757D5B9B611C8891A556F44AAD1A82489C8D5D9F399CD44
C95A40B3E1BDA6A6325DE004A17A35877BEDB5D71D77DC919548573241707DAC
6B045ECD0C23B740675FCD97039E2F3C80188990AE54D9ACAE77D2A8B446F4E7
C00B0736E5CA63C913C23C54DC624DA6D2A275BDFEEC3224367334C7358C2DB7
DCF2D1471F7528C8AE55940C292860C709BC0AC81CAC434628BB9FD8A195076F
624AAE362DD1868B8E753C02EE8C67CE4BD0705887A09477D96517C8E47184FC
144C38B14F4325D830EEAFB0FDF6DB4BE03BE16552C95AC55AED29BCDCBA8E81
9C44566A51040C022C3F173BDC72CB2D1FF8C00730E62CF1D8575CEAA0830E92
132531EEC4B0F5B44BD7748481E3687E6C67703A90542860B4B56E0D9DD6BC21
880F7FF8C3DFFFFEF7B5846443ED0123E5ED6F99527CB7DD76BBEFBEFB5285F5
C53F8370AB533153BA329295B0E472DA983530FCC7072C55959760BB783C83B9
B2AA5B03C4755E27B744D6FB9D77DE798F3DF6F8CA57BE42C0C135E6914ACD99
5A976C5B07FBF010B84E218D17139FF3CD67C487C74D6313C9510E3B94CC43A7
E20147EC32E048AF9A2A86587B6036A2A35AF23E6624F2CB3551DA37CB972F97
496E78912EAE73CBE1C1ACF10F09A065552DA30BF85EFFFAD7FFCBBFFC8BD988
882C31693EB451816181DA5C6B54FC707C270A2CAB1F7BFF7A23C79D35326800
29FFD18F7EF4073FF881F499E334E8EC85D1C85E5FEA987183102BA96200B0C5
A07B1D7EF8E1D75E7B6D0AD02D2359FCA48DF00207D00835CA9C6A9375187360
1A23BE9CAA660F98989A528246595502A42BC37E9CFE5FBC6038D2B35F71C515
3AF85E14F229367A108B6CB6A8B699F358DD80F1E455982D4053E5B439ED8A6D
E7449AB3DAB3816C163EE489E276F27233C2F914B0C9786993ECFA90BC42A7F3
A156E7F8E38FBFF4D24B1D3FC3AC771C8B7DA243F4A10F7D48BEA6B5883E3CE9
A4933EF7B9CFA50AFB962A6C33ECF479599C9D66B658F001B110B6A71EF91DFD
747EC3936207CBDC7FFBDBDF7EF3CD37C355F9FCF3CF231B61A34C95556429E1
A872ADF8900078CC563896E6BA1A4286849DBDB8B15B5F5CEB1851D36577D861
870F7EF083A79D761A3687F1B996783E53DCD1070A9D6A998CBD0B9280ECFB65
975D26CB380A9F9AA33827542A16769B1ED11FE2E7F02121C31AE0990BC21067
03D409F254E2FBF6DC73CFBFFBBBBFC303D4E125A53DB76092352A29AC335963
9C71C11315C7BA9FAE2B6F4023DB71C71D1F78E00136909BC39809BDAB6A4A6A
EF90427E146AA72AF6B74D67782453D6AE98BE5370F9A1A50483A7ABE1A06BCB
1E79E491D75F7F3D62D4647B29C4C3B30051C92BAE5D6D5CEA7062C289D9707A
3BA6CAC0D7443310E53A9F8CCB2B3033601337445BB1620561468872A2596A72
1FB6235BC1069AE9D7231BB88F41C49721B811FA0EF37A4DA9C6A66B906E5450
34FFF18FAC1DADD0B4DB74A47FF6B39FC17D8317EBD9B8E4924BCE3DF7DC4659
529C2AD05C3C3FF124D86E75A12AC72F9643C449B3B983CCD5BD4E39E51420EE
D8CE182BDAA8AEE7B1AB84505E5801FB8E86D9BB81C774E88FC9DD9D768214F7
C4134FBCFCF2CB892280328D4EA1CB75A2F6F5E637B7545671CE98ED2195AD30
B38AB3CC8583575F7DF531C71C93AA6A40B2EC0B3CD77FE995CF047C727DA766
B14E5AA1A978AAD0E0D109CB2BEABE9AE5C77B2F379155CC08A745897918AF60
2466CC44E0DF6082C83DD57997D772D34D372128AC21D8B1794940381F773DB1
0442CD04662C91912AD080D31FCCE086BCEA2BEAD2388D5923A19F920E0E8EE6
8D37DEF8B18F7DCC510D270E7529A9F32F7DE94B0E25D218CD0DB26647683A15
3DB2F39DD6978D4015CE7BAB4F04A669AE7127005850F19F66E6E6F57DADA6E3
C6696624DC4D1D28764833E1458EB1194D96978851568AEDED4A8A5441DCE3B1
B234A0B744F4F87D71A73CA2DAB352D7936A2B9E75D6599FFDEC67F5A11B35FE
E715B0E1BAF6EEA21B63DEBA5A69FE9C782B6EEABEC529E4BCA195E48C1C76D8
61B7DE7AEBBC0A18575AA3D1B381B589D48C66054A41ABC5185A0A7D37AD004C
B08092C36049C191F5C9499575EC07D3FE78E73BDF29F3215510415B82CE0FA5
D2CAF8DDEF7EA749910121E7C08D055368D6441E94AC30E19488C845A112A4CD
ABCE771A792CBDD7758E3AEAA85B6EB945BEA38B9774293A5DCC27E06CFAB105
DDEF9DBDCB96D57728EDC59E65FBBAD9A4FEBBF7DE7BDF79E79D669E22F2A3A1
66259B040597C41B906B3120CFC9D44D91F27AA2FDF6DB4F9B40C3B63942492B
CFCE4DC9D3C0779A2AF51609B7F11B102531A5E7731275AA03AA2C2ECB11E3FC
31B561031FF1AD1DA8F72012F6D8638F471E790496257E684C1F7AD7053C4884
05CA819C13615D1CEB63C3036F9600C2048E1574404E22E1700DE89455A02D03
9A58AF66D9D8C79A809D03B96EC403A6D0DC5B372536EE18C902EEDDFFC58B73
842581778853080C18234FB73EF5D4536573E88DCC9DADB7DEFAD1471F85108D
D835F201A96A73D9947B3103ED163DB160DDC656AA8C0016850D8652A9150818
E9A67FCA9A64FFDBA45B8089CC54948EDC78BF4523E3820B2E90584F554336D7
BD58FE460007D1299C601C0C4D1ACD30621896C7D7BD346F11C1578BF4F24F76
117C937C4E5F0D30BAF92CBE04E4AABE208BF93BDFF98E3BF7219C357B6F7BDB
DBEEB9E71E1433320D5BF390430E91D3AC4D2EB109FD884F872EF2C4134F383F
68565D43B591365D558FB254119CB503F55E56F135F11466EBE3B2261733E75A
ADDC861FBA6C09CB8C7BD1E0153662EAA01CCC984F015BC2386F92E6B23B9DAD
E36AEE62E0586054C02CAEBEFFAE77BD6BDF7DF77DEF7BDF9B4A0F4733A92795
E7A0B3832DAE277599D6BC0A184200B49A6E09191ED2DC01BA481CE197BBB951
590BA4C853E0E83FBE97C4E8AF7EF5AB73CB976EA1CDDA3557274EAEF696B7BC
E5C73FFEB1B766AADC230D491B9D2D653399C020670C959FAA964A525472D669
83CAF5E54A820002C5E32C2C380BE2F5E6EBC096947C81AED988836833CE77E6
A391E572497615AC9CA9722C9C72485573727AE272BCF95524EE0132A36B4A5E
9C71C6196C535C25FBD07945ED469458F3633E7783D87D0C4C059A55C063FC1B
0D0FFF9827D2E73A9FCF3CF30C4F8449617375B686306738262A11F89A871A7F
15A3949E3100EDAEF031F816DA452C6E2BE02CB0DECCA978DC6599C029A7FDA4
934EBAF4D24BEDB6625E00D2919092A3536377A929604B1CE3094091449F83F0
1DB77609386E8A7E02C85C8796461AFE957B0C479FE9FFFF4BF309AF88FCB38F
7CE423B1F02195242DDA2D5A5C76A959B2CD0CE3ED7DDD75D7C9364DA508DE6E
BBED64B290B4822D879D6C87B2A696626A0607200BE5EF310362BC987FF8F18F
7F5C9681C6A0D38D9D74E595576AA37EFAD39F9EF379316763D9450AA1357635
75269A6ADD2E3656F25A64258E5A2F90628D8A04AA260D1C5AD8628B2D346311
3A0A9883D074CD27B302B63C04799002CF685EF1F34777993BD2739751DD74D3
4D471C7104FEAB5C1459AEEE7A6479EBA28654C5D856AC58410F12D210A67648
C15630A9051934B7FC8AE87A67D9889C39FE079B8D434736B96A26850F788480
38C5431729024518044E992DAC80A304C82B16362DDF2B5FF9CA5FFFFAD71A27
C9534750343FBBEDB6DB2F7FF94B1D61E627AFB86C536570DB532793A591D0F4
56EAE6FEFBEFC78638E59453BEFDED6F6B09F06DE655C00C5D3A5F3F938D1673
9CEDAA6730A78803A6B9069F0684C7017DACBF188F4A15311E5049C60AEF4F0C
A566A1BEA246FA682D9BCA8A6F8B09BAF5012D33C299958BF2B7ABECD1AB5F91
06F784F2D7D34F3FFDE28B2FB63A7486987B69A5910271DE1D346BCCE4968A2F
A4159A4FF3B3CF3EFBDC71C71D78DB795920CF83DB6CC440C94AD8A466094BC8
3396AA4814BB9F8D4B358E39C5C8D136AB466638EB9A674622034DD60C46953E
D1F55914D711A1CCDC15008BDEF98C3493B08D4D8F39EF1E44B3B753AA8873F3
D01BCE71DA3433555C13973A185A91785373FD7455AD063D7E3E44C26270CCC7
68661B3C856E1F56D83BEDB4D3430F3D647646BEF38637BCE1B7BFFDADE656EE
A964964B6FD35C0607BA84A01C9FB804C51938DDEEB39FFDAC548877298462B8
DAA9AA7E8173C7CE314AE8FF9502467C1382324F321D3EB2508C61318D0B92CA
B4085B8523A9B1812A80A02DAB208D9FFBDCE73EFFF9CFFBA8A659544D696662
488BE222CB4EC5328803C0462569C2A14BA5CE38E79C73CE3BEF3C7A2A4B7968
8D1608416B4B90728A8518EDAA799A0591117935ACD9EC8D1D6597D367F072E8
9AFA931D6B7BFFD2F1EF79CF7B2407A456C9FAA7CA97722C074344075F13A533
2BA7561791914101023B3C2A954EC5B79F2AFF815D845474E58873D5E8D714E8
2D712AF413E97B9D384E2B969329AF6DFDC77C30DF21931597382E2EBB4826AC
0C9A1A52CFB131EF019BF2B66E63BC1D7B886490FB14609A984074B6029EEF15
D7917687C63C11DFCE4BB600BD616E1D6F7348DCE155FC4F24734FD90F3B8504
B3A951B02FE755C09AFDDFFCE637FEA7F3FC2E00B01DB7CB2EBBFCB7FFF6DF74
BA4C8F401D2AFA3855E1883C34104C15B90F45605C9F289615A713C3FC15DE47
9A8D4023605BA9BF7CD184C0CE377833431C716B38635E784D8A2EA8AD8C49C1
4E05D9C821C42740461B9E873D2165A32BB8A351CFCC168AF3BD228A8D6DD755
355AA6B5B8A42A15BAEF7BDFFBFED7FFFA5F3A00483AF3FA9226D41B6D38ED33
39BB1AA7BC5E0D09EF53A33DFFFCF3E5BDB1A7EDFA232B9DCF9031AE2BD00888
3D84AD0AD88423E7965BEC66C98BB5E54B7FD238F7D8638FDB6FBF5D3F3FF3CC
33AFB8E20AEA0E11430B94DF9049E27DECB7315B1FF860E058ECBAEBAE9A9038
935457DB20201FDCA85A3F995C0CEB64BE686DCC7DBAD68E78804DF2430F3DF4
CB5FFEB22C0099C03FF8C10F74E6B50D220D53CD37AA85DC5B55C33B0E852142
0490B0D9212E80A7D7F803883E881CA29B213F015FEDFDF91FEEBAFFCC8BF924
8CA4DD088920E59BB67D89874BFA930540F5C6B604A98A3F9315D245D89324AD
C889EAA1F0CC5CC59B66192ED87FCC838FB9E719E8D9C5E5EBA0830E92CF5D2B
1545D5219A1748B151EE820796829FCA61C44EA58BA266065B36A25252D5899C
EE813AB688534CE74EC96C8C5FCB9CE45581562A73FCA067F54F1D43C78D1D65
B513EC7C9CBE403BA054A15CF182DC2FA451B56273D34C763236101636363476
7FBBEAD7841C66903623F44F7DAE1970C59DC5572C1330FD7E6C481CFB5B8082
CC2BCE4E6D217DED75AF7BDDBFFCCBBF689C54D6E232C63ADD3493549248A73F
6727D85AE576D6C1B6ECFF4B0AD82E90E33AD867AF7AD5AB642EFCFCE73F47A0
11FF27C5E072501FFF4649AF4BBB1D4798A519258DFFF0873F4413CD009D853C
602C779F104B31EC1D1ADA1BE6030299D3083CC7E11DB60269CE4EC524670A02
BD07F5C3AC41CC842312931CC8A0D8F6CE4944B608BA9C59D3D8A227ED936328
3CE0345337B8E08C94306A09B08C41E479D951F199679E31ED784FD539B8BB6C
0EEF00EF9CF3F9FAD7BFFE57BFFA152A4A0F22012AA78733CFD6B9E8A28B2886
61F1BC89318D4D2199825D198D8054457725E39C198D655D1A9BFE44576627B4
52085E711AED7C58E8E3E759C1B005BDE3E576E841389FD8FBECFBF9EA2F2914
767234CD22C275F6D7A78BE08AFC4E882ADD67CD867044B0636A38426B472A9B
1FED1F319F59D94192C7E14CD2B484B4CB873EF4A11B6EB8C187DC67DE69CE39
CF11E95BC46E2A4DDB430E39E4C20B2FC4D644DCC38028CBE9ECB3CF4E211EE8
8A17E4B837BF37F67CFBEDBFFAAA014139237A7C1C74DC713661CD47C1CF23F1
4F3C0C4E3AA822311623557BAA8A9B0DF9899EA5E7D0C4B74E4020EC6813ABB1
C1ED83178EBED70589E5F21363C4E67C5EFD70BBEDB67BECB1C70C82C5FA34B1
224700BB012C7124028A3914C75409183881C509D5A99470E3D9BFF5AD6FEDBF
FFFEB14C0B62A276D53F2755954B761BCC301CEB025269B751FCE3835C4B8250
10ACAF49FA9F77DE79243B9C37F1214225233F1918ED7D6271A0FD2269A3871F
7ED89A12AF06398CE1EE4A68D0C81165E9E36FC6EC48C26CF73156D0A600C2F2
7B24732A6B0470847447578EB081ED49CFA78067A78AF2503E67D826C71CBC2D
BA898411691436675E751B7234D4D9076D307D1FCBCC1805D9F1709DE6158E7D
A176848047D004DE9A0422ECDD4AACEB8DCE983D5AC3D890E62869280699356E
411095DDE6D0ABCC5B1D24FB4F1E1ECB0CF2330A71CD0E8D83E0277AE73BDF79
CB2DB7D83B4F55FD0FF6545E35CDB06185E0766910DFD11C9D70C2091FFFF8C7
8D5375CC1C87D8DD3453959FB073BF40F79B886BF7E68BC15B5D5683D1E3FBFC
63CFC6A8033A55BF02879C4A65C3866369880D401F6F74D58E3BEEF8DBDFFEF6
B4D34ED36964C231634D921E5BC16301B03ABAA6EC6EC9299D401ECDFD8E8C3E
23B1FDFDEF7FFF6D6F7B5BD419B52D6EF16100A7897F3B33690EE37B428EEE88
ECBF466A4C9709E515C518A451C86B68EDE6DBE78DD0D48C690483E6D38EAB07
F185F61E44609A5B4D3BBD5322C175ED61F3AA6569BB6AC511FB3448AC6B81F4
4F9032A499F573608FC66411B9E14F6C3099449A61B64D6DAAFFAF5FB641390B
FAEF6DB7DD76C00107A4403DCD1EC6E3C92B2661570DB087D97B975F7EF9F1C7
1F4FF8A11358C4393E94B6EB6BFA8EACB7D9E0A3BC42CB831C74CF4DC206B04C
A08063AD0B47182DC80658B81B154B391B22808305357A0AA07A9632463EB28A
59D0E6913739518D68461360A0A20C69A95F9177A4203586915340BAF04F783D
B555345402152800FB15368C889371C4C04EEA0A871F7EF8CD37DFEC63CE64FE
1FE6DE34D8AAF25CDB7DE75CEB9CAFEA7CA7EAFC49DC7B9BB8897D8B4654D4B2
4763AFB1DB6C63870D880D763422BD8020A2821D2AD8A0A2A8C12606C5BEA334
04151548EC6213F72EB755F975CE8FF3EB9335CFEDB878EF3C73CC39062EC3A9
EF1B3FA8C55A738EF18EB779DAFBB91F674F2241A12610D6420E1D8E130D7165
80DE7AEBAD76691CF6E008ECB0C30E7233B46D5C0C89D9CAB300C39331DC669B
6D2826C448E2EB36832CB123C4AC2793E211AA64E6633BA30D811BDC5FEF9702
EECD0D22E9D5C876D50018A4A64593F9CD37DF60727969ACCEC0D2025AD4D4E9
07930CEA3748C5E8F9E0106F544256FEFC56371A3366CC73CF3D47CE5F5F6364
35E51CF88E087A8764F5E173CE39E7830F3E2072D2DBDED25C3F13E774D53325
567A2BB2479E7D9711130D33B0A827F3173A8C697412498E466E501541B9C605
F46536699D0162F7724DA4BFB15F5C3D62904E23332CA676AE5A2F80FDADAE07
DEC7DB0805F3516033F275CCE4AA79A6F485B4AEBE02B53AB0260313524E9018
31E8DFA7EC6A10588E74136E4BE262BB141ACEB8850B85197845680E627D6C35
4961E87F3B9BBCF2943973E62C5DBA74EDDAB529D7607807F78656DE4E2E0038
7288CC613D2EE7A76DAEE20CFDFAD7BF96208028CA304E9E12C36E0EA9010981
F05CD241E6B9942B9060F640AC2EB5A5122932AA2E7263A9707F5B19549F321E
1031E7CC3A63B3353662C4889B6EBA49E6E0279F7C1233A69CD658971943A396
3B3132DCC8746F7CC0E7BDD44C13999E321408E9692E1D6C5FCE97E5A3AB6252
01C2A056927002E01D84BB6D5CC74B5D2F9BDAAD1656F6924B2E59B56AD57BEF
BDC7AE23BA66B7CC2567BA0FD03F531CA0231B9975A42A426073CD247A10BF34
33FBBAB6D0A38F3EEAAC9659E7AC98BD3FE5330C1A34E8B7BFFDADFE8B1A3699
306B0DCC5013386FDEBC2BAFBCF27F2B5AD973074223F6010C2174F0AFB7A3AD
590CC046EE7D4B157651C446B0A350E10681C6C893B70159063B51981D3022E8
C5A545B4BED0EF18B6894D698320AA25BB3AD192B0B48C4B130974F997701DB5
0F0864F6BFE641469BA611440EBAD69E742317AD344239AB2D60D31C452EA0FF
3D77BC8E0674D4DC884A62CB6E36A3BF723063DED333490D1293EFF881B6F49D
77DE092E8A55FB3EECE129A0BF907D474C27CEAA0B9F7B6BBBBBE849C71C73CC
3BEFBC23F985AD2A83E8C30F3F34C0D86BE9F7348209EB7E43EED6EE9DE75686
F078210E4A6D0F5C2C6B051CB76C2B13957907A38F530E6AB1FC7818DA61A425
B4E47604F9B001FD710F21E6341E6032AE26ACD1C1C607610AD946468D6990E4
FC6B4043A9BD7105C7A915DAB5A6D0BEDEB2D5C7C0F143361F433241554F6EA7
13C318F8CA1A2754C90E84EA24CC9E3D1B74EB94295366CE9C49FE899AE0D29C
C7309AC9FF5286B29B61D5CE6E2374B8A3CC205282F0016BEB66E82DCA62C98E
244E4E32C611B9D27C1A07071305C25DDA17C35FDFD29C686F2C5AB4483E04AA
142C1BEA0A91DDAA2E739274963B0B5C88541FCB1DCB946DBF97DA53E229A650
95E496098815A45889DAC21D79A9A9309B476CFE11CBA3BD497C4C1A81428BD0
94CE05237169162289321B7D8B40D4C5175F7CF7DD77DB868B3DBEAC147D0A1C
AE88E85FBF08921D8BCA279AE7D20C8DCC8B26D32654CA88365DD130AD394729
F4372C555732F9047840424D9D3AF5E69B6FA64651F78F154406584D9F3E7DDA
B469C4E4B1AE74730907C9130DC6993F5C1A7006EEF1DC6C6F97E24172585281
9B8924801695F6D12D30BD8E204ED8A57A117B9C687A8D87FD0327815EF3B4D3
4E7BF6D96789006DC87D73D1B566674330BAB3AA2BE64B49435F9D0A989DA0A7
93AC8CDC0C7E170993193366109FE7B801CB8F3C89FA98564413AE016B576892
3D27550AB8549EEE289A075952C025CA52105E4032C91311D28B5CF75E6508B9
B4619C2B741722F67F83F9C58A640339541B3D6B5BC13560168D4627D0845628
DAB812A5469E11B9C7B1B4D6D4B72822241888E54E4C554FD1EF4DB36517D9B0
E4AAC08587D10CEDA923BBDB7F2B2E4979FD0B19325CF0948549100F1E3C98B6
895023C1736B4063CAB57D555CC45ED44666BFB292638BF4E58E7B1C862A056C
9345AAE5A0830E7AEAA9A7BCF35247FCB3F45DFFB591CB1BBC7B8CE9B025EED1
4645C809D1070E3CF0C0575E79C5772332E9E2CB8DD1957621C254639EB77233
478FEDAAABAE7AFCF1C725F21C45C0F205971483ED1895313A446A0A2CAEFE8D
2C3F042DD04688574C34FED5E7478E1CF9BBDFFD4E9BCA015EBCAB499326C987
FEECB3CF52764C5D451615700C21745D2FBA5C6080A2877C286C8F474A770669
33D1AA2EE5DA01F68016DD640EBC2346AAB75F33D05439868C8C202BA4FD03CC
9E13F1774C66BBA126036BFCF8F19C5F67A3504E7C524792723EFD12B8BEA7A2
743CBDAF1C9722C8EC0F77D23BC48945458159437B19FF8510EBC9BDFC52117A
D5B025C4BB129DA69C63262687B2742C3AAAF35464CD5C5F8409C5BA30BDD4E2
23F18902EAB937DD7493A617FC9AC3275E05C6890A0111620516A58427C13557
487CBDDAB5D75E3B71E2449B560E3098222605A7364637DD6358D7B871E36440
B32D0959E36ED289C4FC2751FEA76CBDC5A89B7E49B15C34A45A8104AD33C560
B7D2D6865E4A8FA6C081E40BEC406C726C1DBE45E911121828AB016E2997CBE3
94DBD48B5B9138F3ADB7DE7AC1051738F4D5CC34C99DF213EDC35BE3F2120397
4C803DB4A7E875E147901C193B76ACD688D36DEBB944034584F5FBE71176B011
4794090416BEB33BFDD5081A0941A92BF0C36E44C891C381F6F2C4A48B8D0ED6
0919A1C71D77DC71CB972FA78EEABF171725F6F22788704696E6AE0A83638F3E
76AA40ABA5FBB8FD85DF85A4C286C015CE15F9AA62E921360EEEF2D5575F4D9C
F0FDF7DF27E3982AAEE86A44CB43B3A1453283A6775BD79B10DC70C910FD9D4A
AC6FF5574CAB370A14A5891DCC02D379A1DE1CAA35E37184233DF6D8631A8C36
9FFE2A714C531DDF01E4DDD9679F2D3B0618428C7FD0FA42679213950A9F1505
ACA7ECB1C71E5F7CF18544C6AC59B3C86EF05C9D01891B1922AFBDF69A4586AC
370D66F8F0E177DE79E75E7BEDA5C72167F52D79C6FA00910C19F2FA9877946E
882E31D601B9AC55D65B1B16DBC89521A84F046BCAF9ECAE8BDE0C4C5829076C
224491A5D448F48E9E7F1B28948A22471007CEBFA41C3FF0D6D2F9DFADB81E79
E411AA89CC17D6CAEDBF8C5B74F0B9D3E0F3C16C14042FA0DFB7DA6A2B6D6FDD
D021567FDE7197D2618C37B47BD4C8D4F9D82551615B70939C723B74341F42BF
95F92828E7D07FCDBB07380356FD2876BAAE8B8322DA45279D74927E96390B02
837C3FC1ED92211BF925CC9E0D431C995DEDA2525323DC099768A64216936BA4
13303A2F7AC0B6D1250DD887A6F3F38473A0A8F560E60D1D6772742AE9921E17
1A0B524FDC7BEFBDD7AF5F1FEFE9184974638C9571E48C673919E720652B1065
A46C7861D9941430075FD32E3342161ED90436BCF488862DF940C4C5C48B8E06
45C885E397F8B2A5704E1C86C52F5205334887DA68C7AE008E14228E7AC49E7B
EEB966CD1A071B4CE385BAE435CDAD644E69903D0E5892F8B7C4DED89DC3CAB9
2774F831399FEDBE1ACF4CB3A64DEFE42E3E2BAE86C14AB6F4099B70F314CA1E
B8950623D9A1E976734087C18D6C24D0DFCC449225058C2714A977531196DC7E
FBED25A963501D848B5E503B72432631D724908747EB60C810DE6199352ABD14
4D9F88432627D53715828E022E65EBA12FF7A14C9BE2AF8FE93D937379DF971E
E15D18F765CA168F7BA092D78C2ABC6422F04B1C419A10FBD44940E88B981D98
0E4C9A7480A4BF26930380B9A359D5E2221CFDFA367DB8308F6C1DE321B1859C
4D81FA83ADA51B12A0462B404B9942B5A5A355A034A74D9BA65790B6D3B04DE5
A10FEBB93AFC6BD7AE056246AA9579D06F62FF41076FED7EA55A05EC885F0A9C
82445653066CEB59471D75D4CA952BF1EAC85203989069F2D65B6F51BF84A742
6C4643D2875D7E63501EF257BF193264C88A152B7816F9E6146C47340DA6AD51
2A9DFB24157A51AFACC9C71D9128A4470B42939C28553D44A74A22D85EAF23DB
2918CD3DED5D837C8AFBDA09C3AD1298402C45FB61A6C73177102A5C3F5481B0
9CFF738537B96A3C07A2535E531E04C025EE730EAC7F00A78288431D6ADAB7DC
72CBFDF6DBEF85175ED01D68DD4D8C07F5C9621154B3026E85E6A43652317180
77E9AF1283044BF0A7B1F370C19D762134058470C18205E79E7BAEF76A4426A3
02382072A0815B4665E62D810C771130DD7A88CA46D049E95B5687ADC02E0253
A69E3B72E4C8175F7C115034792EDE17B75063D3EA7863EB151E78E001D0CE04
A55C4D43E97CABE0D501D49642FED17B0F1B9467617E11F2B4C82D85A00D9DA1
6E5BE6BE9B49987E31067AC9A069C368A2806ED1F626EE79B4FE46A63638D051
CB6EA0EDCA68BED0CCAD6D6B14702353CD610B00E20506D9A9810CEF86989443
3278F060D9A1928F31A7650B8521B971158108E7113B759BBD049C0604B16610
7A3C4B431B01749577229DCDCDD262EC50408CE10CF7373B00110C900AAC56AA
BEBA8ED3A51DBDB96558CD4DF0DB783B8D64CA9429F2BF491EA70A745FD7FFB6
0AF21750A98E3859CC3542B53B1F90D895CEB373206BA35194A87237681A3D8D
9A58994A1A1579CDDED018CA32CB986D1F3CB24A91C9841172B4883DE285A35C
ADB96D51D15D84901435ACC86E1E6A78B64C6FC8BCE49A4804600B73C0F4DF12
213B7683DED4EA3FF6DEE88C94962EE790F0981D82B684ED6C6A12CF087EB9C4
7D6FE8B41813B1EEC06328625FEEB572E081074A73FB592927FEA5B9A5EC5F7F
FD7537E1F8C52F7EC1F275EE1FD43C80C158E1E645C472F5B74A39206FB6526E
2BDA9D96CEF62C5959278FAD959DF6D6ACCE9D3BF7D24B2F95B7A0A5C415862A
5CFFCE9933A719D8EBBAAE0B05AC36C409F8C55A007B1168417473E4D9355ACD
500C3731736A89A5DF669B6DC000DA6CB513C2DD162E5C78C925974405ECD317
7BA9999C67EAD4A9B366CD72390366198A10EF961829FE800E02DBDE410BBB5B
460C31CED23AF28375AA1D3B07DB7DA0E840D017FAE8947691B781712AD477D1
9482C24E664F630396A8DDEEFBFF1FC5A59B137233DD98D7C82DBD3B1F6DB9EA
E1C50C0E742E5DC18036224D7A614BDAD49BBC1133CFF2799340C6A02F12D567
21F42C4340D8301B091D35F5B7DE7AEBD8B163CD7C44EECACC067634AB048D19
6A527B9F4B4777E34BC6CA9FDED0E2D85135897BF94F988AF01598E4AC649AC5
BC6649C1706CF86E674214AC0ADA0EE43D407CBC2B7B4EB6767D56F1C22D7CA1
DF6A6502EEFADEE3D1258D032E35BAA851C0781504C71C37D674B9B96FE96AB5
53AFD9C9E0DCE21B91F524C5E2D7ECE9687F9642953AEF0223CF01071CF0F6DB
6FA7405CDC6C6F29118D037254AD82DB04CB3D05FA5237CB24646A854D988EE6
7D3DA10F286610017037614486F252C8651C38E811EC834652278869EC9BBA39
71AC9B04FEDD2AEAAF6842876A8F2AA7EBFC7BBF59C1F0EEF114A4A071AD968C
AEF49FE8A6AE911822E4F5F2C94210188DE29110C722010C9EC54D9652B50161
994BCCC9AEB6AB12A4BCB5A0FAD3B871E31E7FFC71FAB5C5BD973ADA23A6ACA7
99E1945DDE28EB317DF80C5605DB7843E85B6C01AD330B496FE48BA8670A737F
759434962239DD9EDC1010E49AFBB8B07962B35E9706E07BC5565D0EF899D1DD
91D22882F4DF254B968C1831C2F1BC9838EF0B7DA80C74C75327A4892D821272
37AA56A6B3BEFAEAAB6FBFFD763C6F8AE96DC236338984D9D67C36536EDEE0F8
470C2E22702CEA2510E4C2D2F4C91AAE337896DA11302E61D2C9C53BD2170158
D81E320B105288F0D5983163264C98009E913C311B9E435A6A19122B0CEDB85B
AAE8331A8CF60F45DE111A5C3AB9F6467C161A99402602592CDB4DC919D3707A
DCE5975F7EEDB5D71AFDB0518EE159925ED6E79E7AEAA9B3CE3ACB0DFE62DEA2
D3C78A973BABC762AC481AE0438818EA097D276C9A51C680CAB70D58CAFA200A
9BB9EDAE6DAE663B79377BCBF84999211C4BAC42EF2DFDBBC30E3BC8F97EF8E1
87759EB584871E7A2838408A528CE87144DD1B25C2CADC9FB94677C6E77A9B3A
ABE758BD31595D6FE28462AB40E8497398C1B56A03A5F660A0B1097A05492EDD
EAB0C30E7BEEB9E7FE47EE731E435E1697C86E9E2BB7E38B2FBE6062BD76ACCB
8D37DE78CD35D77080F51BFD1EB6CB184E8CB844BD029855E42066139A98C1A0
F33433D2EE1819FAE49E7BEEB96AD5AA14AC282F3A5BC261676416FBD0FABB91
FBF6686CD48DB8D636C6727D2B922FC60C5B2B978E5FD7F5C24749D91E750238
9E0E6D301D4369C4EDB7DF5EAE92152AED6989554A5411BCD1CFFAFD05175C70
F7DD779B7ECF2418DE36648EB7DB6E3B7D46AFC37675DF4F878E1CBC2D81F862
086EABADB6D2A924C714C110D08DD9E2F97B5AAB8306BC640AA40EDC46942D8D
4CFBFC7F1617481427C8FA8A6621180D5A3BB4889B66EA5F791E5224C3860D73
BD47D77571535B36982361B847F4B4F7B063A9553333D570A608DE184F876233
441F922CA2FDFA19325A9C271CD32843E289EBCD3D9788A01836C8E9B01F4622
494BCCCED4C8A574E7CF9F2FE34C4BAF5533D9A49783DC0A8C024EE2624A1A2A
DF6940DB386885C641145BC33C6ABBB6E45A742680099BEB0EA5C204A28C041A
71104D54C0E3E2468DA70F470BE9110542A702C61F25FE6FA1D1E886F84BEDC9
3E9738728E7A32833D016753C1F7B5B798F3A1F37C9A88D03B6A23D34AE7A5DF
CBB6452BA76CAC61EBA5FE5C580D11A3618694AACF5B5BA7ACABD870BC18916D
FC037341C0B2E67C4F4F7B73DF4680A463685BDC93A7A18D064B22E906519C13
0FE4ED5B99029E407D4CECC1C0AC9782492A56EFA55A9AA4941BB3A7CC4711F3
DCD1EC28410F80C53A575A931AF04EEA5A85C24CEABDCCA959C565DDCA4CDD26
5423D7428416E7C3EC30B13EBD7455CD839D5A7BDE31D4E1D246840EFE0AAF4F
3E1E90A049061A19E60D0E457F85686CF6ECD9B7DC728B7EE3EA5EBB4D8DC0F2
CF89E58444FCA4ED4B769776823C7E08FCAAC077A49AD89CD1224C81B03E85AA
A458DDBB21F76D8CDD8408E9F3617B57D142D2FEA143510A7AD433E99DCF9EC1
FE306F5DD775974575CF3DF710A13153690A641429A8DB9A1415E7CEF68DC6AC
A1CAA7D1FDE9003168D0A08F3FFE98894A4131C78C6CCCEC3AB44B700FD71040
168CBECE7C775E36340D4C61661A01F39F421CD25503E827ED791E542ABC899E
862B476C5BA7F6DE76A6BFC00BF22621B4806B7BD96597C9325BB162455F669B
EA2DFA0450FDE547C35A4AA719900D40140902A1C23B6780A097F6BF11B8ECFF
08712D1D5BDBB8A846B2783A657EA85F13D1ED324BBDA3FEF56BF2FAE09C752B
4960E8F67443323E9687119AAAB7D3BF714D1D368BE374900F1D0980892857AC
674B45DEF39D77DE49ED453A2E74F4EBB88CD3F3C002993E8C9FADF29D5772B6
88547D64BDDE78EA5D0650BA343E39FBB7DE7AABB96A09F4D5E738BB1EE0285F
D2A61452235CA91D9A013C1BE3053B8E785194F576C822E18B561705C364997E
819B104F43CC8D1E3DFA861B6E40DCE3D4BA63319FDC628B2DA047407BB572F9
1030043BC76685B4795E958B724E9E51D98D707EDA481FDE9D21A55C94A27D09
5556D5FD63593A7E0F0690314A6850A33DABD6858DBE64C99233CF3CD3A11E5E
93C83916B43D807E6D128EAEB56C0A054BBC78D4BB5155447A55F6A79B8DC3C2
C37CEA6340C75D9E14E9BA9C13E2D82091D97531FE6654672AAA7BE54C9F72CA
29CB962D2302560F9AB3ED689945110B87A291EB2B480D3A60401487881F4E4C
23F74D6224881E2681C13B3E54C29244058CBDE2A9E8DA3CC3970646B744ED7C
E8BEEDEDA51051F4C9ADDA87E0E390F2D8D0FACDDE7BEFFDD24B2FD1150ADAFA
BED061D057692138D1975C72C9CC9933491EB13A20D2AD8AEA73C0CC1B653958
CF669AEC6B6F87E7DC273AC001805253C8E8F035325B21878E13C7D451F2EE76
350E04F66462DDE82A30243D88958A1C96969636AFF10762280E1F3756BF343A
F0AAD631B17F6D4901C7BDC157CC1885D6C19C351F43C98289569771A360B3FF
4768F59D3245926E157161985972EB6FBCF146B8E7FC314F57699337DA592125
AEE7CC99A301E805F5ACD8EFEEBAEBAED39F0CF9EC34534A411A4F056A888932
32891483AC99B163C76A736A7EB4E1D942FC55FFC61CE5F7E7B459DD405EEBA7
B38769E3AE4155219DAACB703BAC48F6598D07DCAAE8D768522440AA0841D977
A8525AD3BBBB991D7C9D19BDB35CF9B56BD7521C066735247FEE9B143BCCD00A
D7FB3815981D393AE0D9F41B498DF7DF7F9FD3D209ABE1BBF69E29B66BD63603
D876DB6D65E4223ED819EEA39CB2696683DDBF24AE106963BBDEDF548E71E1F4
146DE851A346C11B356DDAB4C993271365AD11582459314422058FCB99527BD1
67D57DBAFEDE44C7CE3A434BABF3C38127584A0DAE9689F827A4D9908871AE40
FFBBC0408EAF8E1F1293C3EFC2410074E6DF801DD7A8A8C88710476E8709C1DA
5790A9D5789090AC9D71C61930AC115A27181E438E40254CAC8FFFCD89457835
039B18138E858E3EF8D9CF7E76E8A1873EF2C8237A0BCA75AA6493D9631CD4E5
F755290F072AADA7BD3939D1A98343A37EDDEDB2104D0515EFB02DABDCA9697C
99AF4DFFD29521859413FD225361F10061A93A17588DEC2514BFEF1F31105687
8CB337B74EA114B526E5E402B3A896BCE2FAAB9C7E99FB3806A65FF68BA3DB5C
40CC53CCF58BCC61FE1D567490209E4D471CA34DC665052C6D072482D6148DDC
3DA26A1DD9F918FDFA79FBEDB71F3468D0430F3D44A538A9106F547BAB46CFB9
A13554BB7A3B4D2CECD024A189A211C6D07F2FBBECB2C58B1743039932CC1888
99E58F21059101022EDE14688B4C3E8A5D4B45AF74644F6E208D442D052F53C8
1EFA72A52BADE50DE682B50D43537BE697BFFCA5862D3D156D1AAD32BDDBBF4F
F5561D98D871DD38D2FA5067D7EBE73FFF39DC6C76F00198541DB0689DA576D0
900B0FF0E476DD75D7AFBEFA4AAF4DAB9C75EBD61994ABE3A77703C3C2DE825F
CDB120D4926999F9167F0273EB7937532B5943A41B8DCF4A1BCEB126CC376D14
626EC01FAA249449303664566AE269CDCC4BE7EDCE968DB171B725D10BBAA2A6
7435735B34C898F449B6A09EAB5FD236CE558C354C6784FEDC1D4F1F8E641751
54A50C3CA959DFCECBAE5B4424910204A0E14FC6D0B434D991471EF9F4D34FC3
A16D9982D54C2307A4274276C08001FA3D7B892CA96EA24322978B574335C6BA
EA5288D52D0B0D4B34A747D7F7429B52C3C3731D946B74547A7859090C626319
A05E82C344B54A45B8D6914FCA06B77F1FD5707C8A441E352443870E7DFDF5D7
4141771D7FCA94C2CDD02530069F6D05A66A43B027B3C6C2F98378D53DDD289E
7A5C6DC8529360DFB3915B80CBDAF8BF8B0B3B7B8F3DF6907D230BD2C8DEBE4C
315B6318E15C3A818D1037B8297574E3D16724707EF5AB5FFDF6B7BFB51F66FE
E4CEDCB917B7E468A68075E232B4854C53F4417B738B02B8F91C53E5243A4C82
2636C2ABC4546A4FBDD18EC4646084EB24A5B561B42E3A0B1F7EF861AAE65CC2
49708B178E83433B483027CB1C342A9584513A68BE3F6DDDF1E3C7CB13D53B22
E1A1DF21BAB6E38E3B6A48B14DC84F7FFA53A9FC4F3EF98454A08F4344D1533B
D7973BE544342535A5546D1D77DC712B56ACC0ECB002F69E890AB824C1DCE7C6
1030F72E32C5981EA489855D24024BB5E71150DFF769A8F1547C8C914AF5D46E
5597D52795A67D995CBEAA3EAF74EA4A383A569D438B89C039D1FB68319AB91B
54AAE8CE6B33C46A3565758258C4106B842EBF5CFABC564B93A079D7F223AD70
CB28844FED66977430D680A3EE558ACD46A2998970825DAB9042FAD6BDFC5AB9
26121C443DE100C74063D08725ADDE7EFBED529D5F6C2651E501334EE78A6260
3C05EC5B245BA8D90F5D2F3838FD5F3D0B90114977C4969EC818C85F92E4E390
A30BB19F484E47C1E75A73968C083CF2CE1634F2B4A4504B0106E6217621ADEF
BAE379230043FCC0F524AD40779072B98EDE0B961F22F0E0547B32B97CABBD12
01754BAD244F7127B8AE13CEA635F83965087ACD7A19BFEDE8ABCF91655FEAA6
694ACFD5D2941AC699D30D0406D302952970BF38F846004E92ED26B5E4014009
071A8860634D3D3DE638D1DD134E3861F9F2E56C39F7E1B0078C68A600577F3D
F6D863253A3FFAE823364CC921F19823EEA611F0CCCDD03D7AE79D77FEF4D34F
51158C07F4492AE48639598D2931B4D08E84F7434FEEF9E1D429D024B338A50E
378ED34A9B57FAA3EB0565CAC8C27070B8B485A29945EE0C4CABE9513989A53D
609B75BBEDB63BE594536EB8E1066F09DAD6F18389BDC03CA2CC6CAD322D7829
443DF9D73E6B3C17ADA23EC2B00C73CEDBD84220EB5BC816A25F2950A0FB354B
E8E898CA41980C1F3E9C226F0904ED408D53BE101A33E572237725EFCD7D9CE4
01EB2C6CA4C0AC3A7829E7D5528002F5D70336B3318E2F50821A8551F5FB66EE
9F63EDD813E8E9199E29A5F80ADC9029870BB0DC013D120C21CC624F2E5E8038
407811F069E4EAB738A4463BB498C7E1D492D8D3CD35695A8C9AF775BB50171D
A600666916ECD0124C46E260BBC5A0420D08081C04717B7D1DB78F86161A1B11
78F65C23334B542D652B5761E2204211C59D3BD56A7F15B0CB6F62085ABFD409
9190E240EADFA953A74E983081D2611366C1474366881A65A82D7865BD2C7B98
47DB8600AE625A7FB6103AC0D451A584995D22CB44733257795AB7DF7EBBC6AF
7F6D4DC756A0A93DE7628F047C033487917326B50B417E60487A2F82AEA9A807
E3FC576D39028F5494C999F8E0830F52F5E5196024A06AA38D652155E5D3A7F6
6E600011A4CE5997D83208B1C8A14B1DA52C5C469622F1A9CE82147AC488110B
162CD04D2EBAE8A2FBEEBBCFADD83A2F760B9A03BF045EEB1883F1BBC7502A67
8D2AF6A8593B57273AEEF12DD83CF8463C85E526756210161CCE50DEEA5F5E16
33CE92C745C3460961531AB05642C9441DDCC868F3382DBBEDB69B3C4BF3AC95
96208630A30705476CF4411DB061B74748F0A851A31E7DF4517A3495FA9A44A0
3ED5804698D3022065CC762A68C089E4459FDBB81C07E4409BD3C25CFB0D371D
2C981691B8140799A44F0AA664E7598BA91C3E1CD124906AB046C64CC4B4694F
E872B1D1B7AE3A759442C293C926FE21BD5F3A2F1D89356BD6AC5FBFDECCA23D
A19D53E7D5F50CB3B1D0DC863E1AC26A20B74BA4BDCF9844939DB296CE864211
E73C0A446ED486BBB43F866E88669F7FFEF93ADB0EF9761E304D9D1E645C4C4F
41551F8B854A17DA05A727DE07A882FEDD6AABADA4244C97436CCA969A76C041
071DF4CC33CF74BD39121CC4AC33C13E15F6C09843A7723B2F7A36EB8BBA09B8
E2924FDFA8A8CFFE8117072362EC0920BB5F324625DDE071BE69DB872D8959A0
A579E4914760C636E4185259305032F01F7CF041DA2D5C71C515F3E7CFD76780
E042194DEB18BBA79DFBD0D36576EB92F55DBACCC866E30CCBBDB39A207A90F1
E93EB49D1A8ECF3B8403B9819E78F1C517CF9D3BB7F3FE292B4B7B45C68F5445
3E30765D6492B2C1EAF867F4186AD61D3FC0C0579DA37DF6D967DDBA753A205A
D03DF6D863EDDAB520D5DD3095ABB40AAEDF6D854A364F26912DBC0DC3C4BA8E
A7950BF7B56D2EBFFCF2C9932793D592FA2995E121D691E38E90F9EBA0174B59
F01815288D9FC8562BD7C4E3A3530B8BEA6DE5DA0A22A27A23FA1F370A76A368
AC78E6A302C62EA153727457E2EAD8176FE42E1D48096879522E30EB342C6236
903E25DA7BA466B1771DB42BB108787E38C5242070F7D105FBEDB7DF5B6FBD05
29A1E939DD8F9999717D91893580CE4512402F37CDBC63E479FFFDF77FF9E597
537BAD0730029309966CAF78CF38755E7D9C52583F01799D75D6594B972EA576
D752BA91F96B4DED8E07FFFD025585A0FB0A1A52D2C020C7227FDE0FBF0CD9C0
B9F92EF49DAEF9565751AE5F6A4843860C79EAA9A75CD7657C32DAC5C9B99EDC
5EDB9C0CC667119ED25FC78C1973F3CD37E31CDBF2658EB89B7E397AF4E8458B
16A18961602925A862452349327969D3A64D2334EDF6F5F520292D8F74C05D77
DD65586F7C040A03F3227230D15305ABB9CA0333418AF4B476F9EAD5AB09599B
FA27B59BB455E39440977CD4D8F4AF660613C4B9D2C81B50025F94AE9A79183B
76ECF5D75F6FEE4979BA37DD7493D98075730A2ADC7815EE270DDB4935BC5B80
BBB42AD37CC258628715E5C74C5AC7DB12E70EB12EB6844588A2DF78A29AC810
82839D138BD36217E478D4CDDCCBA37B4313F8D4618937425B785364BBAB58D5
B4F765FE57E204781E55988C7818DDCDB4B3053282BEC47C57BA897620B1076E
E88219E61CCF467726B91B43DCF13E3680A0CA019CC17E7688CE03A680B06A1F
9ACD389AB3CE16C5640A3A8CB7D68ED2382510D00D6E6BD8A98063AA3E0A3D76
9723318859B6220841C78D63D7C8DEA2B7A6EC609DDFE87C47EDCB2565205B19
0966FC510A065C94AECC18DBACD9DE2F32EECC526E9B4F4A4DBA33AC312BCEC7
D9B14171600AEB33B2921F7AE8214E9FD3254E49985DD2BC3AAE023551A0C3B1
8DDC8F39EA7BCFBFCF32351AE848A781DC5CC4E34CEDFA3546BC4A27881970A9
A4E48F6C4A760EF0460E17E3343D510A7C3E3E2675216828C180989BAB883C99
EB4FF0E2B56F34116ECFAEEFE2A73602378237376FC561E33C0301B508881A4E
7F923E0344EEDE6A5ED7C8CA4BF4A399FB127ADE2D2C8CC14E85158F9EB3DFD3
5F8FADEAB2BD89FB1BADAD58A91C294AAAEED3CA24A0F81C7C5D524CA69CAC45
8D1F3BD1214DBD9D0BF25C5183A00163D9C8CDC5EAAD9FFF29174290001A1A45
DA57D60F3B8A55D38942677862F579923DF8EE006BC91211086139CC2400A697
0D536F70B83E1BAC8D9CA4050B16B886CFD22122992549E5C9BDF7DE7BF63F62
F29EC0209C44C8293EE30EC72513BE744587D81A54C7FB9A6BAE59B26489EC4B
D7E8F383F37F48BDABAEBAEA8E3BEE881DA04B979388F197744F933F7DCB2DB7
60CE5A14F4E6D66C884BB2A70EC59B47C23619C610F90EB740C63C326D45CAFD
0423B289358DDD8BA357473A46BFDF7DF7DDE5DF90706916CD6D58A31AEC8591
2824D1F50874A1CF2C123C7A511A1EF146C7E45051FE8A13B7CEF54648545C65
F0F9FA62EC38C96D510CCEB8EFBDF7DEF445BEF7DE7BB58E7A352CCE2DB6D802
6D2D990077234CCEBFFAD5AF9E7DF6590666CD14315996C6CD4C05D8991BC6D8
8AD85BE3BA1D4873FA0602DA934F3E59E374E36D1AD6791E48DB1358D67B91E3
E318C2C8612B9096A63888CC9EF3E23DB9D91AEDBCC8A140C0E91635F2D05E7B
ED353EE9F422D3CBD9B1A5E2938509058932F2A72FF7C18CDD90520869980836
E227C8145080CE1C8243326F41CA7C612983762B15308F2F1598734E5C7748D5
4AA44D29E976D6CCA8E088A1ED7CA2D321101251854291ABC5A8D3B70E3A1921
6282E89ED03FAB91EB1398352B6903655D7DDB5F8291AA4B4F84B3A92734E673
AF43CC02AC3F6A5EAB220A31DAE315E1155C7D8196F56695BC38FAE8A39F7CF2
49DE1D8224F6812613299F72767973191C9BEB0215E5BA7EF06E66C947719658
DFB6DE7A6B6ACF98077954905CF2155BC76C2D8332348D3BEFBCF39FFEF42738
476B729604575A05F7F58E3BEEE8B8A8C49CE432A9B894633C6C518C21D35DF5
1454E4AEBB60E74F9A3469FEFCF9383416E284D96B72F984D4B0746D9148F2EA
37883C97D3940A1E40751ADD5AA3E04D5FA37BEA63BA1B1B69D0A041EFBFFFBE
3F69239B78AC83D8BC2F4A2BD2E13979ECC62A58BDFAA23B2A1AFB8A67C94233
5D988F7A96DC08B7F1B6764F99CEE2FEFBEF3FF3CC33F190F42F19B8C30F3FFC
85175EE8FABE403420F0F2D9DF90DB4BF35FA012280F83481AB93B35E6AC535A
2528493374A52D81EA1BB928FFEAABAF9E316386C4C5F8F1E365E12D5AB4E8D2
4B2FC562D05C1179D6CDEFBEFBEE51A346FDFEF7BF3FF6D8637D5808FE918C37
9997E6E1A28B2E92B5C47218E64290D975C6A5288533CA29D035E3B01AACE44F
BA941958936C88B163C7A65CA985DD83114C2CCA8830DB1F77DD7597CC885641
6F47628279E675501950BE981D052146EE869C233B13D224074B402FEEB3CF3E
5A74E05D58DE0C8C43643118777E0ADCA829C4667C94D038461A3532A785E601
41610FC7AE604C83F6E5D6B7A5E76E0C9374DDA07E49A832511829501F704E76
DA69A7AFBEFA0A64B2AB27A1D063F963790945087A1313D7992E8E1D892D8C48
C24C66557A73AF78986035A1129DB4D62148EE438B29D4CA78694C4593A1F8B4
EB9E1249EBD7AF4F45B4D3C1B17FFCD21359BC66EE200D3A867C095314DDE2AA
F90766054E449F21CAB121F71EA0860A92901462686693367A8E5E1FEC0F13FA
A4FFF514300AC08026BD0876B13B967038E1BD239BE8AEF500DAB14264956BFE
0DE548ED84919EF9AE0506A5F190E56DE6DEF24CB25673B7DD76D3CE6187C7E2
108448A4B4E5B20B054683FA723B8B1C285CF91A34752B143FE8875D77DDF5CF
7FFEB3FFEA784FCA71A618306F0506E61A83CFADFD52B6864B2F122BC4A8AD1A
3870E01B6FBC0131CB942953A44E0E3EF8601904E4F908D23A004BEE40F71C3D
7A34C5F14C1D1F88A68311C8A5D172BAADC3E25FAFB9E61AE960377633E971CD
7C22550DD4009B22198DAE2D51A698F6D9AAB4330AC24DA64D9BA6A9704B06B3
E7A6C260D212CB389050C2D88A76B6539B4E769AEC938405A292013B84E67A5F
4E8413B4A85E572A32E6584D4EE233E2613BD1BF29B77892BB2267D7FCBB7AC4
F9E79FFFCA2BAFE001632A99AA562F72E289276A6358A8A2D2F431FD6CA48B43
B84C6FA42F341CAF9453F025D1AAAF0C1B366CC1820578D2C8370DDB08E41871
C40487A9307503F73945ADC33872E4C8C58B17EBFE285DDB5EDC13C618F85E62
E246BFD18789035968A47642B7945150A970849881EE1BD404058E70A2DB992F
D04FA81659409A052C0BB685A3C43C184E6083938F3CF2C837DF7C73E2C489B2
E968FFA23BEB29FA0AE11DD35E12A907B5C1C69235C0E482E635E69E63C34BE2
82A482285CE2E08F7FFC2325CFFAF0565B6D25E9C027410178E1379742322C59
4B357CF87059A39046E12EF06AB07CD830ACBA4FA3A8F2266A8725E19A6CAC7E
4479ABBDE32C1E061CAD9AF3923EF009EF6F2EFFFFEF8B400505BBC62EDE79E7
9D12ACE60440E2CB7905340E864E675BAECFCD37DF4C168D53012703484BCEB0
453C334FE178CDFCF32D668923E084A296126164524F5641CB8AD06F65127510
3AC48DB41B2172B1B7A1016B93836FD75B80BEAEE9EBAC3B902CD4429F76DA69
1270700B1353F92EB794370AD42206B58DDF594339E984910425D04B738781C8
4D4518D059C09933672E5CB890BE52925C1ABFDE9DBE082E66450C2183704428
E4D5B728226AE6CEB22638848F02A9AA7F291441983A6FCA1513AB7AEE09279C
20EF2A15BDB924256296BAEBFBDAF7050F41D3025B54A93D95C8B734C8DFFCE6
372B56ACD0B089581885C7A18B1D17F49AFA22A7D25AC1DE556A6F275CD29466
648C3452361FED201A6F61462D5936F3E6CDFBF6DB6FADF5FD52C631914A40DF
47504E2C3437018B3EA691ECB7DF7EEFBEFB2E02331560692DB781A5AE1AB227
A0F32503D12D53BD09ED89192FDDCA95F41C13633522C0FBBBDC6EA82FF7C340
A611D701518FEEE06EA48DF474EA1A9003DE905D4173D103768C16A810BAE381
071E909C7114C7F493F15CA7EC48F4E4E64BDE36B10ECD88998D8E72D506A5C7
DCB871E3A445860C19F2E28B2FC68ECDAEE19B3C79B2A42461318CA094D9A3FA
0A0E5E1D54B435795C8D9EA2FEAE8292A113E471B1BC47A5A9E11C4224C4AB6A
2432BDC13D4D9D3A553FB3DB747FA84FF00BF1B34B74DE9C9C4DB611FCE15724
B1622139603A18E3C78FA799A043D335DD93646168F289736A21060D1AB47AF5
6AF9D325AA2F340AFB29E6CF0804B93EC74C78ADDA22DDFF89970629198A5195
323394F33140F9F50A9A1622AEADCCDBAC8F4923EA93FCAC49AE32ECB83C4BF5
A87E1F92545875AEA337642322EF52E6F8753033A2FD7FF2939F38D6DA2C6884
C9CEFCFAD7BF7EFCF1C7F55E18BBF514AD8E64326CE2E70E1E7246746A3445A6
6225118571E90ABAAAFB63CF9532A6D81CF86150C4C056C60982DFA6119A9B19
D6C4C56BA6C2D8274944741110099E44CADD249958CC0BCC62433D52287968B6
B7808C10390E7BF4362C8E3A2FE65CD3621241FC66F7D5415C10F300234652CC
3902746AF4BCFB32DDBF8EB65EA4AFE027D72C69F561E5BBECB2CB24A6500F24
D7A0D7FD2E7446076688DC2727CD8AD3BD9BEA419612F7A32F13B532C3BAB4DB
77DC7147592D11F11E39C62585D09DBDB9A15EEA50C08D5C6BC7F2D1AD8730AF
67C086720A58F4286063EAC7668D3368F1B255EA208D7349C4DB238907314E9B
9B6653D1B3A85632132DABA66D400D3A2E75C942F5EB33720913ED2222AFA469
CD7D0465A98D24306810DAE8325CB42AA2D06C6F8F8DFEAA0B416FC81DE864B2
593B227AE0ACC1341E3A74E87DF7DD07B796D128FBEEBBAF1486768F2405C579
B006B229F52D8DBE2A5468A82A3FEFB3CF3EAB56AD024B86CF7DF2C927CB0895
EEA790AEAFE8E40A97371160DF8A33499E98945E2AFAF33433C73D25D8A01EFA
A12EAA2F4071BA1B2C77C4B270CE3478F6BDCEA48EB4ADECAAFBA440A2E6DA18
7B72ACB79B052132B063B493E4FABFF4D24B5803CC063310DB95FC2F75F1BE9A
191D575488931D1C7B5AFA70CEF51BE27890891263183E7CF8BDF7DE5B95DAB0
59CDD4B91761CDFC3743073D1BC5C84433CB5B70508A0A75808D2A6D3F1D7BA3
D0FB329F3EC00D9422F128FD558B08EF66D7F150FA0C43426C0A198B946CFCD9
5C88FB87A6C255A0242C775C04721FB2F96476DF70C30DAE743451062927B23F
4EACF05DD43089734B0C6C44EEAF77D7599629990A058FBA8D6902330C13D485
8F25F6268F2CF9114A638CA7DB70716ABABE2F45B71484C04E0C8CDC78027DB1
950B6D23F49D9204B3A3901B721F71F9C71286B8AD7CA5A4B6274C9870FBEDB7
1B6F55625533379FF4F44D37DDC4F6D06CEFBEFBEE52A8F6D1ED0B12FFC342F2
E9B01964DFDDCA5B7FD260A8AD4751495A7655C04EDE7367771120054E93F966
E8959B32BB270040B69C09BF305674134D94AB409BA16F4D4FE831EAA07A2BF3
46917945969AFBC14D480DBD761343EE2FC571FCF1C7CF9E3D9B11BAF632750B
419B66DF2143A72F61BC828BD476B9CEC277456F6C52A56674778D5969735A01
C71AE58D345E350231925D303B9C64BDD5C48913D9AC3A4EBA29E2CC34A49A1D
BD2DD3A1054B8539A0B5D187F57B4A955337B08C332E36DC860D1BB678F1625C
076D5F999C3A605A180D03DC5A5F669E4B8542C256E06A861EABF1EDA835B443
F323CAABAAAEE8CDA422E20403B0063C6AD4A8BBEFBE5B071B69AE4FEAA15565
126C14809A71FCE67B739E2FD6F931FF5A23FD468F28355672806833BEEFE6BA
7A435F3C98EAB4D073E6CC41D3B8909F774148999A0EFB8339EF9C4F5C2237BC
C218BAEAAAABB4A9FEDFE2AA9AFF883D2163E7BA4623AB4D59C0B922950BEC4E
E3D96BAFBDDE78E30DB20FFA3DE5B93AD8580698D5AE52709D5ED7F1B4722B24
77EC6814FD98B5BE54E8C6636F4D1C6B39E073A82A3732E8D24F69164DC1F52E
7A1CFAC315C0BCB5F715B361984869F20D3F71320F9F0662044B0CCDD2175F7C
419006FF8332D98B2EBAE8AEBBEE924BB76EDD3AB45DEA10A00646A5E04BB966
B76A3EF1EACC4E6C4E2559F3D80729BB8FBC781456CDD0D54DA3A5233D8B427D
4B4C25D0B08BB30C920896E31428573506C23C7DA14F063FC4463D067592F570
18195D48E400A54E602FE5389C756A2A7C50A9732F50CCA9B70247B4730DA457
90D8D165726C20A6366CCA9871253254A78C90C720765B3633EBB976800DA99F
F5146D033C60EE49A4C7907EF46EDCB734FF4E39E0CF386DBBA76EC41A869EE1
34737E29F03582183241DD4AEBA5E1912CC38688989EAE5BAEB3C6E1EF75635D
37682337F460CAFC335E26F00142795E0F748369421D168009599725113989AE
E52298F9084DC8407A73DBE09EDC9C98A9744E9A7A067A45D09A3EC213DCB4DC
6564FAF019679C215DE862D04E68DC8FBE5AB91715800B09FAA54B97D23B0C64
2C1693A5554D48D055EDBCAFFB7E3B76CA0EE60E7ACD638E39E6C5175F343775
A9FAAB95CB557DA836CBFB6EAE8BC3D3939B43C8BC63D5A251CC3130CEC02138
A31B36E45E3D5DCBDB98106EE2D2E19A2A8054A81623262C9876D861872FBFFC
D21544B1E0C13446388B70436242F168728D36B471202422755B09D6E9D3A75F
7BEDB55DC7437414D627C292FA8DEC514D141FE045A8A276ADA4E736D2E4562D
8143EE311F69B04F29499902872542965DEA2E5BE0155C0864B88D4628AF5AC6
A8016228BF112346DC73CF3D3ABF5F7DF595A791BA8E58491247EB3DCC7E366F
83394D2D3A3A2FFD69EAD4A953A64C41753169FAA274D575D75DA7DFF705CA33
1B3D3DB98BB68432A977BE6E827A57B32006D9B470ADEB33CEA99BCCAB93438D
3F6DBBEDB61A89DE822081A9D91C3623476BEE3F5869894968EF5D7AE9A5325E
79051786B9CC4F72F8EBAFBF8614052E4F1E5D0A994662BE880FE72070ABE8E1
C42CBE1D7A6E6E1AFF147A1FF1F9A87A4D6FE0B85D0A5477680720BDE8234241
C6F9DA204632980A82EC550A7172EBBE56BEE25677D30B8D61C890216FBEF926
25B89EE179F3E6690F13814332138473596C3334A9E4BF31076CD9B2891CF0C6
2AA5C2E8B3AC71F537195F1AD1B8F946CAE2DE1D007931FD7BD45147BDF0C20B
9ED9CE51A61CF7236D204113415271FA584B1D8373CF3D17AE061A189C7FFEF9
F7DF7F3F063B2327E4E5C2891AE963D4773370D1812EC141711CA91E32DD2A68
481119440B0CB374791956AA95CAB871E366CD9A65DDE02E754495396071D377
15B855AF76C92597AC58B14242CD02AB1427295DB6229904F91FBBECB28B9CD1
AA5C1A715442C4ECBFE8AC732BCD0364C56C71A6452F3B66CC98993367920867
78CC806371C86882C9B1956494C53EA82E12AD79AFB8570DDAF48EE23735AD78
6A2E371B7027380663041662571B78E4C8914B962CA98A7CF4F7B241E6BC9789
A6BB7E3EFAC7846163C13A9D0CB0EA4A9C39CD406E6CB00C2570A79E7AEAF3CF
3F0FC77D5F6E01D9087C2C1087B9DB8FD71AEFBCE6EDEC06F84C514982DE825F
1AEA7534A2B68A14B96C6B8AC539C2A6A941B8DF7EFBEDD24FBC9415867E298D
A593EE3C5F8C6D5AB0E23610C0831E8B0207EA2C74CF050B168C1F3F9EF63808
6597446B18FA18BDEB39FE2E4637DC3A054F111BAB0A9467799532EE526F813D
544A8DA79C8C67D19DD9B13875ADAD2BEBA2FB6BA0A271BFF8639E9CDEDC273B
86B23D4E0C08948DABE17DC44A043EAE4A22CBEBB77314D067D66E373FC4AC44
0A245FDE3650ADB1758D64F2544456869273BCE79E7BBA060F3C9A4B7B060C18
207FD2E456B653B136F4E8529E281EC9E879773FA8449F6CDD8C1E3D5A6ADF85
1936FAA27AD35349D844A8A7F6E8B1C71E2B230290646C475502671B18A6D703
E9CEEF29F0A5C20CACB96362D4F25A43831A4BB973B0959CC64933C11A012D1D
2345A545C2A86400DA2B975D769994BA6E75F5D557CF9F3F9FB351E3419AD94A
0B40AF08DDCD75CF8D76226B475C818CE92B1471975AA469BA587222365D438E
551CCE44381B9962C912AD067CD40A75E888899A794B05108FAD661BC50760FF
FDF77FE79D77860D1BF6E0830FCAE9FCAFFFFA2F363DF49058D08DA2E4D47773
DCC20D6DA00D02B3E6FE396EA06B498406AA09E1627968B4148170F64A759F0E
15F63722128DE812934C4FD1BB547A77D1A24548B11F71FFAA0B303F569A5D81
9AF0462B345720E3AEB925E2DA93DB4A3A830EAB3647D582D8678A38AA24AC3E
2F53F8965B6E292101816D33C97C57F383ADB6C973E43A5ABEAB316B27EB74FB
F3A41535BD529CF265E5D5FDE94F7FE28B383DD41AB84A02EA02EA8E388F646A
8909A15F7115105F98532933273857C5EC1974065A05998B26B6A442E6423347
C1AE7911284F48A1D75C6C746DD6FEFA26192E3349A1963712F146056C6FCFF8
C16857C5AA45829778F3EE25C0875991AAA60B29C4576C076078A58E92B66660
60ECF414FD6113757972DC8F072FCBA99312AA99923F8E86F61B9148BDA38BA1
1BB9B996C195A95B6E985B11FEC15A72BD9F11FBA62B21000330458FD601D13E
ACAA38FDFBD2542DB0639EDAEB707A9520BB202352E676D0C6DA6AABAD48EFD3
BB036B5A6AF28B2FBE30AA0D83345A4C299842CEE5A44220B20B591207940CAB
4945941F5CB1B4EFE1871FBE78F162588B538E5D786FD930EFFABE80B463115E
6A6F6969861D123035028E6D87BBE31C3E8A990809E5AA94D0B14D6DE545BE4F
DD04A811C10D6C4F83413A413755E349816CD2CC9D35EBEEA2024D9D06A3D9EB
DC97BE88161A730F2D3BDA97D9D3B0A57A11C4D8B692FBBC7B49CBBAFC8CF88F
3D307D4BFFD598CF38E38CD75F7F5DF644E472411CE8563487A86ACBC8198E88
0FE254B84D4417F1E62969F8110AD238203C4B5EC7F5637A6BE9B9E820F6F7FE
35EB9B0A852491A4A9937BA7535015B1A090AF99D93165558F1D3B5692221585
827A778D9F9026D23C2A42934F3933D228088AC98DE907F7FA74C8D1D5EADC41
4B294DF9EDB7DFEA4F9C8EAA715A2C103BD5B30E39E490F7DE7B4F1B892202A3
AB4C0EAF3DA0B30FC2D63484FAFA8D37DEA839D1085381CCF22348EDBB75AB49
BE3454D8D74BFB2752341B56865C226B8669EB042D5F44A9E3A294660F13DFB9
4902B61B42574127A1AAE6A72777864685580EC4D3DACA0C1B462D1178B8F7DE
7BAFB8E20AB0321C61A20B64C79C888DF4859C9A94C3A7A99D8897AB11AE9451
2CEE9E022D01782EB466098AECCD8318418A42FA868ED4F080E2E3E730D57E47
DF0A01E2AA21061F49461DFE01706E226EA39453E6C6E7C00E1932E40F7FF883
19D9604ED54421D0B41B31D78C8435059EB3FB5DD7B15201C7B204FD3C7BF6EC
993367368AE6395161F024A632820BAC2AEC6AE89C482FE282A011A3024E21A9
03911077888DF34A663800600E30879010017059FC729DC3E38F3F5EFEF71147
1C21A9147B5475DDD0B1FE0C6C213BA011E0E3D29D9A04973577DE274636287F
8ABFC1DC4601BBA444A2999349B126F3A9D1C2F9100B6131473ACB4EAAD691B7
20A6CDFE062152F5F91D76D84126148C89CCAD3EEFC6359D97FC12D93DCB962D
23A514DBCA968296296B5CC35C7FF2939FC875368F29297F37C1E4F8C1209672
CD831BFEB84EC9E11D78D3AA6C2324085801EA501D57D4B4ECB8E38EDA3F84BF
C8103B7CF4032F6C8856EE8B0752C37166C7CCFF7B71E9E69B51017B2AB83FC8
DB1A030B548B3EB6CB2EBB681E060F1EBC72E54AEBDA940BF7356003C4224A03
A7018DEBC82A62CE7E1EF1616D6CCC477B4B1419D38738D5F617C70A8C24D8AC
11DAAE51B0F9E39DDB7137C3A56C119DF7871E7A883ED991C426153066F410AA
5733A657D090282AD55BE8D103070E94B26FE4EA11346B6CB9135DAE18C93345
94F77C29CE17E3A2DB6DB79DDEC80EA8C63F71E24479F38E42D5D4EBDB31603C
B16AB6A4455A99C28543A7CDA96701C74939801C33E50ECE79F2B12CF17F9090
C60AB0D6B15B576AEF1AC20E89002BB8C36CE5F395E85AA476C2108FDF808356
26DF8E832C858EA3CA68E6BEB4AEA0F3A8806496B22DEC762EB2BF4696408482
794DDBC4850B179E7FFEF953A64C917E6400FBEFBFFFAA55AB6223C5AEE58ED6
F1DD0FAAB371104EE95EEE6C45EB2E90694EBFA7C071D8CA2C3320ADAD35894D
B94D4D7C67832A5D32E1A98FFD9EB03B62C75FFD5506357B3A164AF2AF648D66
99EC2391C02A4F0EAA1744B0F57AAC8E90E0D086C3C1AA29E74839B5E62239C6
465D2FBEACE482164966C1F70D9933E0101FD7E5EA8C93E081591DB0B8AB8817
BA0EC68E4B6FEEA0DED74E7F53BA2EBCF0C2254B9620C87097C1FB6D3252C283
3011FA72AFA4D8C8084E41EFFE54C4FA623990398CF0D4FB32B377A3C0B8EA2B
648E35BD129D6C1897BAA64DF5B56DE6DEE088124E1DDE89812AA4CA7041FA0B
5273DD2AB11FCC73F61B0019FD408317CEED77FD6CEB597581BAB74242740214
AF5A2FE3A49AB9C585F6E7F0E1C39F7FFE79B83C7D5A4DB2EF824BE26C4435E8
C6C15601D7032117DE9E46326AD4A8458B1691B327FC130F94F3C15DC7C932D9
3F767D0E2B6E91A23BEBE90874935AE88B26711C3972A44ED689279EB87CF972
7842503CBAA4EAE6CE9D4BCA80DC9E8FA1E3161BDAFBEBA5F6A6524E5B7A8458
75C481626212ED684078FC13D6395202BB1C8B0AC76693204DD33EA08323C745
0C44F786EE995B6CB10565909037E162729A2EBDF4D2FBEEBB4F7776FF031C47
BBD7D6EE2407D9CFA88618D66E0458357BC3001466C95979C3FBD96054D0D8DC
B7E34E4EA4995984E1562AC5D8FD15EF73B72D90F4D673C90B98119A12ED98C1
8DE2C211FE18D721ABC2CFF7DC738F76385B145673A2084608354269591C5E8C
10D485A0630F321391C7B26EBD091825D2E3AE45D356663F95D8CC1D9CB10DD8
087CEBB6DDA8CCD351D12BD961C508E0846068FB0DF5E8B163C7DE78E38DD6FA
EE4A218BF2FAEBAFD7B104FBD095D52C2E1B51325749F1E24E4873C93EA064B3
EA3EC71D77DC5B6FBDA5910F1D3AF4EDB7DFD6FC38E06C3E01F0F1E6BBB11CD1
670E38E0007DCB4F27AB873BE5C177520F5609686FD092E95A25A08DB8D6E36C
FAD43F62AFBDF692BBA0F15032CE2F23DEA19111B08DC0F3CE6AEA117A966462
8444A69CD0A5C29B0C25CD9509653742E9245212EC1E8D8F6A041667DEACD1A8
220D001492830435A0B69A798EA538B6FAD9EA6E2A473E025BB05FF7AFBA509F
0EA5EA925FFBD1471FD5A45AE8138555A731432B9632EAC7FD85B6DA6AAB934E
3AE9B6DB6E734E2E6682987CEAECBD102C0D2FAECF134D41EBB0E5800463226C
927AD34A173DA12533A9452A42EE3A385AB2CB2FBF5C8A9678604C346A0C9326
4D9A3E7D3ACB41B071FCF8F19F7DF6D9B265CB48BB02B1DE7AEBADA521B431E4
F16B78FA0D68067A0CB83026E2465B994B21756BBA17B575D4825684BA212006
6A8E756A3ABB923B275AB3DF785FEBE956A87A4FEDA95F42860E84122CD43B5E
77DD7593274F6654BBEFBEFBBA75EB52F6BEB0BFA12871E4C3B95BB426388C18
3EC149F544E9A103070EFCF0C30F1943A3C08723580C0626D645C04333AF4D45
9514E3DF71C71DB5C7B45574B7EDB7DF5EE274E79D775EBB762D5AA3A6B20861
6ECC798CA43212DDEDF3CF3FC710715F8DE8C7A7DC94857A7A0D9BD8156C24D8
88B8E6066FC2CE41FD6D2B93E720674AE602EB5BA980B1AC6390992D62A1DC28
7A806B2E3EFEF863EAB253202F751CC3704417DD1B62C720B0C47167414EE967
2939292DCD8E7E09CA91978CEC9AFC0B8889DD8F5DEF57D0CED66FA04136A567
D5FB723E298BA2025237D4AA0F1B364C4F9776C76A236A7AFAE9A73FFEF8E35D
EFE386C4BA21C5EF085F24179F893966A01CAE70D0BFE79D77DEC30F3F0CE297
936C79A77F252CBA92EFD758CA787E11B755D37CC2EDF0E8D8FACA2BAF1075A9
A9578EF87B8CB694C32108326C7CEC301F54A33D2FB9E412D9927C1E919D0244
73F4E8D10B172EA4AE86109039FA5D0762E2DCFAD06B2A6A43F522FBEEBBEF1B
6FBCC1729F71C6198F3DF6180A4CAA4BC6D39D77DEC99F527FAE56AE7065D892
1A12F429343900C7410FD17A50DB8F782E991169113DE5E69B6F1E376E5C1590
DBA916A492FD485D184F0639F76516B0144282680EE008902F4A087036A377CB
FD29D077D9490A7DDAD3A6FA8B03EA7412C4B6A3BB569811D01FB339EE481281
073DDDC4BAE693379AAF6452F0F40889F27F234EC7423F26FC4053EABF3E2C11
6A64F9ABE7622B1C79E491B2D43506EC186D1EEDBD112346B0B14B21D6CEF989
79012060B07A21815347014CCA6E1C265ACA25C2B02A49B0D3012515BDEE5326
774326633D136A8ED52B113615C1CC0E6752B6A7B31081A22EF7407F1B774242
213278A422C92515003A045E528926A4444DF3125369D2B00B160AF70075C214
BE552C86B846F10720EEE4C2A45308FD6A909A64B7D4E37D75BA7588EEBAEBAE
2BAFBCD222CB85E32505CC4CD679C02E3C47AC1C7DF4D12B57AE749728B6087C
BCFE162B0AE4A795DBCD72B1006CBE0DED1D37F94023370971C240337EE18517
4A3E928872ECDA20DB94BD67443049440EA78D4DAA05EC8857BDAF513F78C031
4268E3D420F81AF46623D44FA70C04D36A31A40863D9488392B377AE8173157F
CC983672396C55FBB91ACF3E16EA3472F7EF5471E19A603AE0B8D7746B4FB963
0C69A4280ACD0FE0E23C1317E028BB2208C005FD398E38E288175E78C1BCEA64
68908FC0550C2E4D39BA6EDD00C6B5EAD58C774D856D41DC1B1E34D28A6681AF
6728AB9907F33769C6745864BB9010490585B286A7A77076C82DF5EBFE5517C6
B8BBE099B6BA8AE2943D5C2A156B6416688D2DD69AFBC8380442C319883F5B99
0DD4C10F57EAF3F51B6EB861CE9C3974AD60D71921D1CC5C4E350AA6C4B52251
F3D7BFFED5FBDCDDCAF120ED8523E6A88474C4CE0373353387FA9FFEE99F3430
98B0F481534E39E5C9279F44677BDB388318AF98D94D81E2C6253D4C5794B9CD
4C598A5B8F7CD383D88D006B3028CDAB5563A8E1C3F1492D3A459B7013B9B82B
2A601FB72DB7DC92A085259EB360B8A1A4186CF13BBF03179515B025248EAC83
D5F68E6C33B1401107431A915010FBB62774C3C41F75FD3D75D8407A017001EA
8C6662A7F4B3FE027F60D82678284B45F0594E39D9AE6A050C1DA41F6E1B1A21
D9C4939CCAF16AA6F6B275577E46EF7C230F65CD02F3FE46333A714BF081301A
0214FDA4773BF5D453972E5D6A0A536C3164849CC86BAFBD16441294601140D1
DC142315885F9F49E6C5E9CC9E8AE68926CC8B97F7165B109955938B32BE2315
36574C48EBF784D1C8FB7A96800B113535E2CCF40BFCEC4A0CFFCC4D08BAD67B
72C0025D69CE268E768F375C15E1092058BDCEAC59B3E465CE9E3D7BEEDCB932
3C6B9E4B034A7D60F7DD777FEFBDF7FA6A39A51B99D501B63F76085FD1D8860C
19B27CF9726265EC45F9C1F7DE7B2F796E9BC0359E3AAE0CA1722870F53A35A8
DA1F7131D53675395A1137471CCFFC91AE76B5AC214FA657D07E7089943940F4
57B9FEE3C78FD70E31477FCDFC479E3C83AD5220A831D9322AD6F90E770CD487
F90A75F3C83BF6BF05371683B3F8291BA01640CC79CD38F5A0F9F3E75F7CF1C5
AE08E2D8824DC35221676692042957CD899CBF850B17E272B14529A037451AF1
3D8AC2A9FF71A0252668E226D4E3501B78BA93264DBAF9E69BB186811DF4167D
215328A24343986829A29C3CED36CA1DDE885D4F62F2CEA90DBBD116539AC956
C1D9E949B6B96010965996B0833164E3B3F05391A2AECAC32F8A10F456A0EA44
08C08765E08506306FDEBCB3CF3EDB2018FC1992FD314BAA8922859402EF951D
5FB308185715BB126DB3CD3612C8C71F7FFCD34F3F8DA88CC0AB1A79528F068F
0D6A634905D50706B4BBE093FF8244F32EB5DEF50FB12D105F79E8A187CE39E7
1C7632456536E99AB9DF7C23F4CA8C8EAF3B43A722F0DECA64B7751EF0F4E9D3
AFBFFE7A2AA9A920E25EF6C9BC8766CE9C29D75BCAE9DAE24AEDEC2764FBF403
A5B1E85AA3F9533B16BA66A2010B60927CD7DE0EBDA768F58C04C48A77BAC589
4F3604E72152DBD42C7C2B70935E71C515922C9A476D41FDFE6F7FFB5B2C5A95
50D6C67AE4914790207ACAA5975EBA60C1023A354148C943F937EE69E7807513
02A4555C1F44B64D79AA3B4B765310E9BA676B027FAB93F233E29B2480A032A8
99876620BC445B50F75205AF4724FDF4A73FD59BCA2C93D7EE84B79EE2523149
019D01A8EAA3A964906DD590607A019D78E699673EF0C00384AFFB0B9EAABA34
813A9F7A4DD90ACF3CF38C8BA3FA0A26B83DF6D863FDFAF504667A8AF63E9418
19319B724883FC3D3490B6F14B7D6C089042015183E236D31C47EFA69B6E9A3A
752ABAB695B971FC617040C056C96598DD5073AB91031A9709AF7744D53532F7
02F5FDB8AD29B7736747F504EAE9AEE304C44E89ADDE45239413CCFB229A314F
8F3CF2C8175F7C11C094AB5C8C0A76B180467BECB1C782B18F891B23CC35C894
2B15BB8E67C28409B272308239899AEA01030668B7BB076DCA529B208A21A556
57299732B74233F694ED60A2592CAB8F1B05786626C75070561B1719B41AE702
1A8D942DFE58631A5736722D59C4C701A742AFECBFFFFECF3DF75CACE734B0D4
731B6387262490C8D2BEF230F40159459A7F685CA5CC64BB983CC414FA8EB453
68400AC009FE585063442AE725DA79CDD096B8F3AAFABD5D2F1C1BCB3DCFF929
A79CF2DA6BAFE94FA41B40A1437074D249273DF6D863541563D811A622B4101B
E9A600DF416D9B00C44102F208AC854F7A4FE87FA31F22A0D89BB9EE2069AC7A
B0249D9947E2E70D85775FB6C18307BFF5D65BADA25B834C5A0EB316C37CE586
A1A7D0F589AF6F1224159147D8839A2F629231C1C9E5DE76E42FE35F41398D1C
39522E17E1CD9A3A2D1B8070279105D7EB80FAE1F58969F88D6CEF13C8750731
B89638A8A6D4E80B54A2EC634973795A1BAA49F37D2CB5E4FAAFEC3BC810B4E3
0DF931959A145BD7A617C41BB163F012528EE1573D17CE07A02B7AAF830F3EF8
D5575FAD3798522122351ECD18DB1A5880BEFBFCF3CF93FC4678C9035EBC78B1
FE0ABBACE68AA466BDA7853700FA89BDB47973AB18B02010CF38E30C6D861933
66602E687BC7AE21B6FAF561C40DA460EE6FE300B513879A76BA46EA56B8A7BA
B91CE2AEE3896876244E33D308EB7190C1816F72B3ED94A1EFC6977AC2890C39
4401F81F7B9480D65E7BEDB566CD1AB7FAE0A176E66214AE748121700CC0B89E
943B8B130033DD9B09E0F88C3727A203CF9B7324A90DF31D65A006BFA4C06E58
023DA5422CCADA407DBA6DAD5190080A1EA1DFCB6B97CBD16C270E8CE0DE54B0
1DE8BFC430CC9CC3B993490A5237D6163BA7A6FFC65CB866C0861A8B4B489F80
8A398EC8F4E9A1840AECE64690572B5CDC3FC6201D278B9CAC1873FBECB3CFCA
952B1998E6509F3FE28823E49BCA159E3871A226846A14E328BDCA440BA865F0
96C0A0C76399346992568AD0A92397467239171BBDAF1F7772ED1D39FFE29947
DB2127298F74AF179004D40EE01A3169445CF0FE09927354255E5871FB397D99
FB9D50B19E22EFEBD9679F35D2D30A3815262CC75C43D200F4B86DB6D9867C4A
A502D6825D75D555F4CD26C642121BD6025C7E747ECAD959D4BE83336410F575
F9EC7250284570658EBE0E9EC87871278AAAE69A6533019E29E659D7566E5D62
E4179BCCD124E435FDAA52A6F0361B5C8DA0B70830C0C106E3E4C993B5D56C9D
6872522686B490A26ACBF588175E78A16663EFBDF796A552C2A913ABF781EC3A
1EBDBB3EE658A8839C1C8098304E2128DAD9F6D1CFD5A6C4C0AAE7A6067AE33E
3C92147A742492ED1C27C01CDB8912796447F45C2A714DA7DC088D579129301E
D774B3217913ED7722635586547FAF88C761BA2C6D53361989FDE20391B8321B
095AD98D78B564575E79A5DC41841D625DEA76E6CC99D75F7FFDFCF9F3B53DA0
67E140757D5F039DD8871C7B9B5651C26A30142368CEE56A48DC5098401F27AA
AEC905E867360C1B03D30A3FBE2FF738E110E986DAC614AF6F92A189025C5379
EBBBFA17E5C4DEC6BE779A16CBC0896143AB9867F38BA1901C91F6431DC76A84
E6E75121A58CF1B64A0022AA01482C5AE6B822BF8497B1B6D38B4845AD58B1A2
2FF32A1B9D8AE727D773FDFAF5CCB3D608D66B8FD68128A2DFD8DF0C5E2F3570
E0405900B244B9A13DAA071F7CF0CC33CFF4CA62CEA6ACB95B1D5D8CFCCA9176
90B783381393D75801F3541395C4A5462043FF84F2D0A331EC76DC71C77DF7DD
F7C9279F7494CEF103DD0D2D3868D0A00F3EF800AF915C03A971276B4A94BAA9
DAC72D7DAC73BF7128C8A138AA64C25A2C2DB72FD30FFAA47E8371E9423BB029
F46CD644711E77D861076D78B354DABAFD2E5FEE2FAE276A4EFEF0873FC40C0E
51AE9403CEB2CFB4BE73E6CC4138D01BAA2E04AD2DA54FE8D3D80B31A340B6D2
FAC6FCE3FAEF6DB7DD262B12B9C9DEDA6EBBEDBEFAEA2B9C06FD0630B7568BFE
276832ADDC0F41B17A31F4DF5D76D9E5BCF3CE93C7607C263E74C4345181AAD1
42A544B9145B1F5B521FAECF01EB9EC3860D5BB4681187D380F294B9C7102BE6
73C7B6A5922A156AFEA28B2EBAE38E3BF4457C029B6925025840DA9A167D0094
44D7F1E893175C70C17DF7DDE7FA199BFF4EA8A7C27187EE4E6BD1B53FAE6DD2
68F1D4E4E0E93A87F1C136C0FAAB21BB87C344FF12E74CED5C95881E4CF59828
622ADCCABEEA406240500567126FCBCA7FFCD2C074376D5446689F1200045EA3
2BE31DCCE0652598621C8CE3B370E14259B49C919EDC4F4D0B01341AD150B30F
6B1430093CAC2BC6C0BE92163CE080035E7EF96572A586CDB35D35008DE7AEBB
EED27B9D7CF2C99F161769750D4FEEFEFDF7DF8F643736AD0482AB5A17E249B8
C27403236FAA71EAE6241A7091E109700987F3FAE4BC9CA9415922B61CC4D32B
133680D623D675A4D05C8FC68204276CA0B84F1FB6053975FD0C039AC13B1B72
CFAB94BB11E88692B3AB56AD72C919C6A2C6A9E5D36E41D639CF3A77EEDC3163
C638F8648AC76668C340AD9AA967B1F338328CD30142427A7115621D941FAA3B
00FA654E407B4820ECBEFBEEEFBEFB6E8941281A07FAA43E4F66A799DB3ED2D9
BDE40FB00AE04B4882B0332D8B8C1B8029C8ED0D584A27C8D33FAC800D6A0190
01BC00278175717F201D37F8D72828A272C71D63B5972888C0093CFBECB39F7A
EAA954643780D0A6CC518A89696898D3DB8E8135326B5823F334103DE58BC084
F5AF79C237A1F0883BE100C5C6821AB1DEF090430E912727CDE42C941BAA8395
70EF17AF312BD72A3A1B6AA65812D8096ACA121C5BC7CFD35ABAA0B0140D73C1
A84CC8534F3DF5E9A79FD656C6AE97CA97CF8DA4D30D478C18F1E8A38FCAE494
A35F458CD0C8E56E9EE8E1C3872F5EBC18230B418C0FDA93FB1DB9B08FDF6B4E
88036307D14F148999729910397C962465FBBD46C0B1E73005F415B88DF80DB1
658AE7DC2AA4B75B7F5C824E74784531D4A352B1F1C96C1199AC2F236986DE26
2EE4277AA6A5919C2293875D0C521D9B66E2C4890B162C20305B554E03407ACA
942993264DC2380013B1B972C0C61C68F6D0A0F4F532BCD3C1D2485B21313778
F0E0E5CB975B0B46D8A05E7FD75D77FDFAEBAFB142C85FEA8B4855B28655F35F
1582A6644E17AE9B61F3C4BAB5E1B507F45F0AF90872E05A6148B137A427A48C
CDA540BA9A1A5979E79A6164A8C4961C02ED963BEFBC53B66FD5BC39CD14D399
9A49DD56D3E8E8ABB61F0E5664498B2409A4D8E38AEBF793274F5EBA7429616D
2B361003A95B089A1F1C7234585DC710468EC852900A1BDA5CC72527D8AE24D1
17D617133FD21E943A4FB8BC9004965F87283AFC9DAEC9D6235CE98E92667846
57718E5A99BCBA5411647E122E0497A9B9E102229F228DE26A0BB78EF56CD04E
CA9DADF549C9138DF0B3CF3E837683605E2985ECD8A704A0DE62C08001F2AF9A
B9890253618AA42860E389ABBAAAE48CAD10A75DB54B350C895CAD0BA62AE134
4E2E551BFAAB5E90591D3A74A876940F7BE95D745D79E595B7DC728BB55B4C25
905F70E20630602353B534326F97EB72999C73CF3D572E19199F4A054CD448D7
84091324E6F424B980D267B7DF7E3B6EB806A455C4148A859EEC423FCF4E0F09
18F3B33B2F9DB2475BEFC1E803DB6CB38D16FE2F7FF90B77E8C9ED441A994885
1084167EEBADB77EF5D557D973DA04645E893B11BEE684B015DC2FB3EAB92C8C
DE54CF72F72772788692EA8684FB9853CD95963F72ACC42A498B54A3E3289005
66AC9FA9B8E83A1E8DD6940E7AA26E2BD57EFAE9A73FFCF0C39E494D0B47A82B
24B8191A9E58DE41A65D937345C9C948D483B4197EF39BDFC84382D1A26AFFE8
D86BC9A468D985FBECB38F5C07CB4D3E6099855D657099237BF5217110069A8A
D8652B6D8E0B298CAF5F4A9FA35C4D6B0A26A851B0B4EA932C3D2371634476A0
062C3D77EBADB71AB280D1D61758766B0CC1AE202CED409D3B90A8B1C88D0490
B51DE45CE43880E1B4025B16D85AC6CC998AA7D866AEB3C8355881946D057617
4163BB0EDAD83A6BF813BAEDBFFDDBBF3DF2C823CC2AB961976F72E12D8D1E3D
5AC779EDDAB51B724B4AEF3119131A898C8C2AC385F3821472C11E8E1A963A1C
7FD81C764F5BED2D7D4A97264793C9309C94614FB261A831D5C144F1F7B63706
65EB6A485A23CD06707AA2B2DE1500DFF817BD8BACD76FA40B3FFDF4D3E8EB73
61281078200867E20440F8A5DD852AF29B6A4E08EA38B1E8BE1A2E882AE5FE5D
B9640A30A2629424A4509ADF939BFB6ED2D1EAEF459043534DB930AE0514AA76
FC08B440C372DD75D74992132EE28BA478E938A7AF68C37CFBEDB7BDF972E379
3689462E934B738203EDE0444C88D820C024E2743B11998AF00F79A88D919B9A
038F58349988E671F6ECD973E6CCE1F1A02A4C454940D2345DD2DC684A7B9CF0
E030179C345C61D6A3BEACC5C420AEDC42349815DDE57AC04A8926B9D6DE3B0F
B16E5820A6438DE7A7EFCA219B316386DB23A6C24E24DAAC77D48420DDB0FA6D
503BC6CB23982553936304A4DC71D6AC2EC4DF6A0E3F1D1AF0A7B10CF45F2881
5211388562C68CD929673137B4F7C7A53F57C489C8D1915D565FD8EEC3C916AF
0959B732DF19261A2961D7B631E1B108B595BB15994CCAD0DCAEF7C76A31A795
41F59BE554A7C0A08BF34721324714943BF28B98879D5136E499679EF9C61B6F
80FB30E5ECA1871EBA72E54AB0EE3A11C4124C9DC8B46829AB38B76BCA9062CD
2EE044D72F60AABB043966CB0C9FB4B2C4A5035DA87D857DA97FA9698667DBA8
FBFA28344B697421A02A07AB3C5D865B936FC6EDE64F8485620ED8D88E940BB8
BD796AD0B391FD317534E1313799E684765244173C1568414F6F6FEE65D21B5A
C7EB63F4E942ED91D8327948A4E940831A22604DE0242B9619FD9ACCC8FBDA6B
AF1D76D861165CB2E1647B71643AA14C5CF1A14C2319372A1798376C05ACB148
B50458C7213A2A9A6221752A9C99984173450C66594FD1D7044046A4148D8B15
A92BFFF1A3CAEA48144BBF6A605A4A496C99A7CE976162821439F8E083972F5F
6ED25FF6B99700BE52B28D00179816DBF764211B99D7D681F74851D5C8F5C48E
E41B0E82D42244FABDE2F37D2D1C537B329F234177C2CD35652950AABA95A6F9
376C772314D8E2FD7D2E614C1B62B27D6EBCF1C6CDC84064C628C25F575F7DF5
2DB7DC12C1235806E6DDE5D5860E1DFAE4934FBAD6DE5D96FD9BB87E5D1B9557
190AEE52C2BF9C5E872B2D686C21A5D062DDB1172A40687579D14517C9BC3025
A44F57646FC622E637247DC1F74F2C2EC374810B5C73CD35F3E6CD839DD54831
1D129D192C18F22588EC885FA83A755857A07FAD9F526ED4111527B7C27B4BD9
3BD7319343FF97BFFCE5C30F3FD4DC7AFC2947961C7BB47B9142E48089A2BB8B
54D433CF3C630EE194CB456A283CF14DB5B8DA3F9A01E619158E0783ABC45E22
8A8525E77AAD98EAEB74DAB4E1E55C4A8E984CC3F5BB26796EE4A6BF35E97652
45B6A45D7A5B7F8E08447304AC0C2CF2285639E288235E7EF965EA824A33D3C8
DD005BA1F7577DF953D5A5B99565998A40ABDEC276A1A31A7661EDC3B532CB84
491BFC5CF3D9D96AD1DC1285A6F2CA090BA7AED05296AE244A528E08BA751D92
1DE810B918A346222FBA96E0F2CB2F9702B6056F46681F161F04AE527F7BCD86
3686036C311CE5D699E8121B0AEC551C380A17C1C0B28B30B322139653C8F570
819ACD9302F99A47DE0C14D329735960E290E340B600C2870391F5A27C884A04
820AD4916BB1586B387FF4579422D61E7618445A3449339587F92F6D76B85972
3353EDFAC54D25A95F52989A72800D66A4BF3364A676E63904592ACA6CB6DB6E
3B8821379702767B5AA34BF4F2DA7084715A05190D7130023EFD2558D0B93AF9
E493EFBDF75E16CF8CE735A1B3FEEE9246E821BFF7DE7BBFF7DE7BFC49DB1764
2CF32E6751E7934FDA4701560A25906F18A1CBCDA28D923E06540D83B1A6FC03
0D3470E0C075EBD6390EC63D717A743702C218BF1AC9AEBBEEFAF1C71F7BF3F1
08EF01D46A8CAE10029527B77AF56ACD2467988995672C592F850DF93EB51366
A9E58634094939024398F4FF29AE142899C84C13184CD50257624ECFB5B6A6CB
5E0ABE913F69FBC61E243B2D15B400FA8DE4B2310A464F94F67923301999691C
C98B7C6CE506677C57ABACFFD6B435D4EF355DF7DD771FF0783252C046AC1459
8B187EA4B908A9D312F03526C3FA8AEE082C900D9498506F647209009F9D557C
BEB458325324B2B54CAD4CC1AFABAA4EBD955909FD1413F220A92D5877DB6D37
3AF8EA0314D653A1D113BAF1C4129AFA107DCD8501D1CA4C14ADD070535275DC
B8713367CEF4D8B05009E639E3EB7973D1ADED30CDB3EEFFD1471F69C7024170
90BCB7BD454D89942A85F4B32446AB20BE45F3198EA747833EE3261C49E32BE3
EAC75C4634B0BCEEFA13328A4C133B8A3A226E5E32E04C628C2581EE29B5C9E1
7210252AE00844EAD76239141A131906D9A5F696BDDE4B9164C6C15A62A5A4B4
E97FA59FE557DC7DF7DD6C803BEEB8E3B2CB2E239978DE79E7CD9F3F9FD41245
CC5A7D2D07EDD76EBDF5D63163C6B86AC3A87B3BDF31C318FFEA35A22EDF7010
84C3F721C958D09D42970F08CA31C3B5F0526672DD005BF5F70074BDBC63346E
09326D2C6F4D3C7AC7EEB0C2FABB90BA1B5B2D5AB8117DF70F5E2EE341A15A1F
B3D8980E863B19FF092DAA7D0277A730EDAACF556FE85FCB13A3E5D5791115E7
E8126F81AE84BF42D93D7CF8F0071E78001F4B2EF5C1071F0CEFA38D417D72CE
9C39D75E7BADBE2817560E2BA17E82E73C9DC268760BE63C43D500F427ED10CC
465E3C9A7798F02C072D2EA481E06C9114D3CCFCF9CF7FFEE69B6F0CF727B257
D3F6D10D7D8D2625BBC612CBEE41B5505BE9B837964A27054F09E2843BEE67C5
63AF3B9F70C209CB962DD3DD8C5231F520F1370DBB7EBDF0AE6CFDA4C0ADC8DD
E213A9427EECB1C774677697BE4B9CD00BE733B52174DA71C0D09B8D0ED3BCB5
66E690430E81F5A5669C940E237D0052D4E4DA5BEDED11391DF6B653E87FC75E
F5D419034C36DD8EBB651CABD65F943BE540005E346F9A3D077E6354900FB339
1D38F1C62871ACA6EC6B3A7B1D9D78B3C1E3AED8718F2146161D2389614486CE
1270C4EC2E31F8E19E69E654F21CC65A6AB374E90EC71C73CC902143468D1A15
DD6B6B383768E180332AC3C5D969B0A822EBDCF3CA87C8A9E87F5C013743EF87
AEA5C3CE5BA560C74867E1EA807EE5E930F65806A6C01F49D00B97CC3C0D9034
44CE090ED186DCE2C298A11875B7E08D0644CA705A4499964F5F3CE79C7364F5
8E1E3D9AB445C32F96DA8D0BCE33A926BDCC26737EFDBD78D081071EF8C1071F
8C1F3F5E82383EDD50A95626C4E9AFE78A2C76E11DB356036EEAEFE5ACB34397
C451A9F792BD22A7810EE72E3028ED33BCD278C6482ED2B985DA5CE7170965D7
A3C4D1439CE446A6C66533F145397C3A5A449BF51BED4838D90DFAF006E2BDB0
2B233135DEB91D1A4E604C1C30986829E38893BDE38DF4B1A54B975E70C10550
F2EA719A22C422AC52C06565216EB21289B012086D027744F928A8252874C411
47BCF2CA2B29672211E28401D85D507872869D4BB6B7E4C8330FB53434228926
F6807A305362FAA6CAE0BBE5965BAEBCF24A0C1102686EBAE57C951BDC7298B7
DD76DB534F3D95C072AB5BDDA75D8494898A8C54279C8B04C1BC400B6EBFFDF6
5F7EF9654DFA7CF6ECD9D3A74FA70524A4690041AB9A73E0A9F4E6DEB1E64DB4
24C2B123B1CAC7A096D3075C50D4CAF4738DC032FBE34076CC86CC625930F278
F0743D69A66AA711B5C43774FF2974B72444E7F810E7B1AFA34705AFE362A792
C7D6C817C6A5591BE937CA66307B06AA6BE0C081EBD7AF671EAC0841CE13236D
E56E07517A971E41E0C77B20C6115D7E6D6C542B949C59929428EABCB1CD1F9C
DA4D46176ED503D9AA2E8C068E4054C0769F1AB9D88CFBB3850C80C09D60FC40
1F989398B0074C80FD81191AD985BD7C1C1FBAF2FCF297BF5CBD7A358E0AF68A
6E22EFF9B6DB6E830311F8ED86DC079AD0022BCE878D1CD4A1D63D41F8CB0BFA
7BD8CA9B9277D3E84179B8BE16729FCD9543753D00BD8CF024F43336FEFF555C
D43C0083D2D5DF85242B80648933BB59C61F4D30FC57D2D524D8791CC7862437
7E8074DEA79F7ECA99410B72BCE3E4EB0E5AD1356BD6902B2D51D3D5F44568E5
0A2572514649C424905B1261DA470F9B0C90142189438A10623357EE03B510C5
85F66BB133F4BE92A186071BEDA9FF46578C4646D4C6D086C5A4F929A7762C4A
AA88353845607A29A870569E6BF2E4C90F3EF8A03E60DC1F76009393023CA724
297A3B5A9437027938E01447110969F0318C3C388F582C7CDC9AC5C2D322949D
0A3B5A5F31E4C75307B11A6DC15C5091727A0F694530C9038E4E67E41C4ED9C8
A0EAC9935995DAD09AEA26144AD1B8BEFEF38DC0EC6F1272A75D9AB981154910
F374C63B90B783CE17C3CED56B3F22FCE636DB78309898B178C69FA4040E394E
A3275BC9297B78D1AFC5CE602661FA8CC11B87124BE979A8C12211AF9D7E760E
E946FDF7B4D34E5BB66C997C0669E89453E31804FA4CA9821F31DEC89CCFC460
53E1B739DE83B0A5EC2D856E01ACA65E9FDF98C2429FBCF1C61BAFBAEA2AAC7F
705898AAD4DAC68C98E56AD758F10FBF50C09C41F425212E87A63CEDCCEA9429
53A64E9D4A6C66E6CC993366CCD02FB569414123198CCCD0F8255A39B0082B27
C8EC29D94CC7C1C076813726B537A7775698B7062161EC9B4185E87E3D5AF797
6C97B7C994C2A754D6464C9F8D292C1A0E09E4B15507EF475CADA235B416D2DD
C1C079C97D193A74E8BC79F368E7649FACBF37B7CA71172DCD6355D9CC8F187C
0AFD914C1C0AA68E1891513F5E2DAA5010CD2903B81C4172E196C6490B6BDE3D
C28BAA04BA239F29BB7A1634BA060C18208F10F8347B08AB4DA25F2602EE886F
15D9CC3512F8379C49B5BBCCC68A915B8C620E3C7866FA1070E031A8FD2E91B6
D3A0B3462640881BB266FE23DE84A891ABF2298D4DB9CC91029E1432110E1218
3CEF683648607461B3BDF5965E53CB9A8A0A7D9E0BD5833EA91764BDF4C53973
E68C1B37AE06D86FC992B21F861A762B56DBEC253DC1055D06C5DF680E730BA7
8E9A37DB1FFA3DA58AAC2F81A5DED0F7BEEB3C13978BB4B735EB6204BE89C36C
FBD2328F5736EC60ECD8B1AFBDF6DAFBEFBF4FA90659589E85EE4C2147D05BDB
97BAEBA5D581B31D63D4806AB6AB7E2F0DF7F9E79F0352D368E5F14F9830018E
052771E2364311E2A39B0C39E6627180D8D5F8C429F335A28F097BDAAE8D6176
5687F0F82F7EF18B8F3EFAC8E81E1CA1D871CB6DD10DCD71FCB62F732363BBB7
72113F07A12F379A34A96DCADD732132D2DA3533A1660ABC2571569D87620796
FC7E9FD0FEEA605E0105CCE460B495B00EAEC222E4C072B0644067526E3C8564
8600CE3C86A6FA32CACCD5288DDC4AC1104873B9A422F680DDCC08F122343946
44B3E8840D8C3BE1DC914ED62035CFBAE146160E63C92C621801E45666953244
79737990B880BCB6E58B1EAA177606C8514D92C4FDBDBF268EBE69A6B4BDE69A
6B6EB8E186CD32FE947BAD10E5300D8A3CF5FBEFBF5FB34FB911A8C26DB6D9E6
CB2FBFA4D6DE6CAE34984CB9E20B115362C3661E5CAC529F7BA3BA5C1F23829D
729798E8647366B01B9C1F4AA13284A208FD46968A9C5D6D143C151602251ACB
F0636D8CFE8A0EE6BD0CBA762DAC619344721046DAC40E59DBE643A9E8BF35A9
07DD5036EF238F3CB266CD1A591560D1F59B943590391A9DAA8F9C418E958195
2BD12FFCEC673FD3D4A1991CBCD507E4135C7FFDF558C13A7BFA01125A9D73C2
4ADAAB175C70C1FCF9F3F5527FFDEB5F6B1430F969030C010A1075D0EB6BF269
FCDC083C9DA9B0C1F545C20FEE17C4117657357EE310254FECC98D6FE3CF4C11
067BD77102CF86C60E986E23934B77FD3CD120233952D16F431A2EE528949BF8
3230BD32195967E8599798DDD86DB7DD3EF9E413E705FA7548CF3DF7DCC58B17
A7C00D6738B4A734321345CC660AC08B08FC890A18BA2117437A09F09FF80CD3
850124774D0A1EEBD3CD1377DD7557E9DA18AB8B1D789C89C0DE6586D179365E
4B362BC11E34B70119FAE5B469D3A64F9F6EEB8DB3194BE952EEB8CCEEA27ACD
3EA27EA9D5D443753A56AD5A054F62B4C97C84FD9B1F118566A27A72F752DBA9
D1B78E6A586B8A44E25983070F7EE79D77F46A7BEEB9E71FFFF847570A415C61
0517F1F98DA260156A71271D9C1D4FB9D5A9DE54C75F863565FDD495C0E88E2D
8BE2D7CFFFF22FFF220F4A5FA113017111F93C72D0CF3FFF7C9C6F7660C3FD85
62B6A9139605B1C3E64A00A7DCEC41A33FEDB4D31E7EF861577FA60C8530A136
067B7F153FE673A360F88C14F09BCB838FB12673E621D1E0CD36EC8D731E5569
CC72F586EE5458FD36C1A2CFE1A2F8AA7980699928D6C5175FBC68D122383D52
26EED148C02AB73211012E97C35616A90C9586714C17406EC2710C1BCBC33034
A48345955362256E64FD3066CC98DB6EBB0D8A5A3761345B6CE77BD5181CB61E
802622583996047CE8150F612FF300B0A2BECC9AE530F5660AFE8D3BC0B8290D
7139F7B3C36976BFB69A8845A459C0CBD4DD4CD7A7C93FE8A0835E7EF96562A1
4E3CBBAE9DD7EC6C5D5C72389CB9441C536A427C12054CCA1317B96A9E4F38E1
84E5CB97A7505D5AA3085B455B724D3E43D58B1C78E08112D6104F1A7B95DAFB
1C50B1635B10EB5CFFC5A43BF9E4937FF7BBDF21C8FA7B7ED9B4DA093A14B28A
BCFADE3C6EC70B966ADF7DF75DBD7A752430313820D6BC725A9910706A294480
7DA253C0423BAD48080A3D17474265393584A050E194F8EAABAF78B406039662
437B8F3FCF6464F090504A0580833DE65CB2F680AB781D6BFD2EB7239388A055
A837BFC159716BEDB4D34E3289FCF4A82CE3277F8402B605C9B09D46B5BA6DE5
EA67434D899333819A61ED2E6417FE8F2B74A538F5496F78CB9F520B87941D62
B822B407E0BB75D4C4F5E8BBECB20B181AE7FE51071247FFFAAFFFFAD9679FB9
C29319464C114836BEB85163A1C7DEDA29DB74C8A651A346E96562D8C113EDD4
23384F1B5624B19A99D02BF6F8C482D0B36ABA12B1AB22E4C18C1C550BC980BD
5A3E21AE4291D2D24CAD5BB7CEA97BC76430086288A6D3104193119607A4562F
20E49CC9FE8D2165969CAD7FEAA9A7AE58B18214784DB9975303DC84C4032220
C23D52C0EE6AE6CF3AEBAC3BEEB883B5A3C2A1BF07435371F9E597EB2664F57A
732320E729C171686E6150EA2BB888496D32E0881E4CEDB0494C4E7317C43F21
8BFD5F78E062ECC83CA02CB48F9329F2317B7F443AAA4640A42C37C1137198DD
6F91035CB242229DD68F80E2477215A33C62683A22B0B8DC83DD345B6C4E8F04
1DE0BC7264548D7169930FA71C9C678663F00D894F80D4E3ECEDC6B9DF399F91
50B627B76FB3A1E0F06604B92052AD1489EF59383472EB43EC57D3BDA5E21413
9BAD5A8212B623D277F07B1F5ECAEA4A38385715DACD4A01029D728B6B5E563F
938D325B729C5E175F71A652E187EDB3CF3E6BD7AED57AB1011852C461B9B022
15E22515FDF8DE78E30DB87AAC892356CB2B08C8CE218A584681CF075F8A67C0
8E04F3C92BEBB66C0C6203FAAFEF99DAB9E4BACA2BAB1B398B4B972E95C30043
BE4602F291B0815BD8B542CF0272BD84C781B25280873FA38F4199D7898F4B59
8B951064E416CF39E79C254B96A0C8C1C67234F49A575C71C5A4499348F9B151
BD61B83963604FE2ACA3C8CDE7D368D4E6D8982FBD127451DC4BD789279EF8E4
934FC60017467A4C4BC07B8722D464B9D891E680443F6086A23D38E4098DEABA
492BD1524AA0EBE7A387AA47EBB82217ACF3F4446798203D2125638B01F9856B
D2198A8F2088DEDC73A906B5ABE78E1831E2BEFBEE031282DA267865E405297D
ADABFE5B1512C48070E6D85B3F0A8E4E601DC61A6CC63F8448A14A50CA5EF9FC
F3CFADE4DCD3AD591024514B968A089E36EE6EBBEDF6C1071F68CB6AFEFFF6B7
BF31690658F56496548B422CD694950DF3895048013203BB4D2AAC7B5C0A77D3
6A15CC359A497D7DCE9C39B28BB1D228CFEDD7FBD65CE82797D998EF17238C14
1171118832785F5BF4FEA15F0F2D95803393B1C6D432C5E598C41E5145087A54
A9264D9E1034ECFA8D7CBEF5EBD76B8AB07D238A1E9A717D121DC95B635BC30B
ADBDAA5169DFEA63FA939BB4C34DC80AD6B8D72933F6A5AC3C38114C9AC30CC6
7FB1BBB425468E1C295BD0E101AB5EDB0D508593CE24158D85D1CA1DC16BE41E
D2139D8449ED4815A15D84C0A04183DE7FFFFDBE70A58E9E31BE67CA208312E0
231AF7682FAC3A3D94B07FCA4956F48D5E87EC4F0A49569F74FE75F09F738A81
C5236270311551659253E833433E093C50076CE49DED30E61977903C94F7DB77
45CB739AEED1F50E4147C29BFD063231DAC425D0160BEAF2D1587A1BCBB42257
0699A6934E3AE989279EB0E434E0D4F10383243AAD558BD3283C394D76F799F6
94E90B81C8D0969183863FA0FFEA97C6BB917F6402B13C2CED79629D0293E8D4
E2913A45EE10C3A1822D4E0AC2E8BBDCC55A6BA00DA4C7E303395FE55966D047
1F7DF4ABAFBE4A6E3C15E120047AD7839142576433875581B3B05380589343B2
E1A97DA9114ACA60138D1E3DFAF6DB6F1F3A74E8B265CBD08E44444DF5D7158C
666194324DA6FE0AA8B56AFC7BEEB9A714520A96B5E59DD912D86D3539397287
E604D730B6DB6EBBCF3EFB2CAADBB8BDD0D64831684E916BFD2534B040C49A61
3F697DC911E2BC32451076EA1DE560E90839E0118B29B96C3B9BACAAE49738B6
B3E5965BD209BC555082C7E4A8D60BFE4EA7307A72AF2108891CCFE8D7FBD6CC
033F5840C82979F7DD7739059C0B98D223B8D708AF466018F811CFC59476AED1
429CFBA7DC072D5A90320B201BB1C76026D4BEDC8B9A5D078BF5F4E9D367CD9A
75D861873DFFFCF31C522246BCA04E318AEDAEBBEE1A33668CA3442CB1DB873B
6D89E5571FB2F6C6D6BC118625CA8ADD16A5E4D65B6FADBD576AEF1D11129C77
3692BB19A6400A88DC8F07B06A4896F2ADD0EE25B22618BBDE0A554629D84031
999D42C52D0ACC6CA02E2580F6C115BAFA301081088368E68E8DF1FC7A367CE4
23F922E7483727BCE1BE5B0E232D5FBE5C0E15312A8A59CDD3A7A75855D3BB5A
77EE2C9E26106239A92F6AD86ED4DD79F4A88CEA1C7F0AB5EC86493A56CF808D
7BB515E2A9C00236D6AF14FBC1758E91BF92024EED69EC18D54FD91735D8D616
4F2C58F7DD1CF732E215308D5FFFB4D34E7BEEB9E790CC9BA82B6DE48A496A01
E3567022044395836D738F65260763804F6A4FA411BB83EA925357351E9DBDFF
FCCFFFA473B8967CBFFDF65BB97225567CD7CF130FE134C2008594970FA79F53
AE55D56FB6DD765B2930E9FE534F3DF5D9679F9500E548538B4C01436739164F
E1843BD8587FAABD75307CEC45B9D1186ACC6DCEAA6E4518DC7541064D786FC5
3DE4920FB78C4438F637244BB2930DA76907760F7DAEB61198EAD44E6AE12F6E
686FCB11372B1AC5E78D3A1F53C4C5479F75D659340BD3BB68B134037A77ADA6
7E38F8E083DF7AEBAD5641EECD8AB3DF5C56216F584664BFDEB7E6A21D21B97C
2C1B448C66E6924B2E79F8E1875DA1611562486A4C98F5EBA156C04064D92106
C7953CE01498875371E0D9B748284B7CD00903060C183162C4DCB97351632EFD
72F76B2F819E7EF1C517DF7BEFBDF415D531041A09989F6D96B2A0E45F6D4E57
F7767DAF66687DAD4720431800D15A59A8980BFA4166C1030F3CF0CFFFFCCF1A
EA85175EF8E8A38F6A24BA33A61EC0754F8849EC31565802C2723572A691CBA8
B4B5BEFEFA6B8EBC3FEC525A3019DFE5E6A72903DF527B10A2E4DBF9605A4373
3A22F986AEBDF6DA6BCD9A3511ED2C65AF698C6D2A3A87ED118244718D2F9699
434DB82EB8B3E0B958BB66D14B8D874A361218E79E4B962C39FBECB3213077D4
DA915EAD1A21134030A58ABE562ED9A29609BFA82FD37DA7F6405D0A5DD4B49A
FAD9C68711D77AB48EBF6E3279F2E4B163C73672A998FB17310CA72C2133C01A
7039400C3EC7E081C3D1FE253284603E9052EB5176A65105B1B5B9E7D9713BA3
1DF9FA01071CF0F6DB6F6FDC1255079E129414E8DFD88E0E676152959270C6C7
B34EE66169660E046EA2F161ADA01B8E3DF6D8679E79A6542A5E1A0FA863D8C5
E80A505317CB79F82E774B66F37991B4A1A5B4908364EC0113699311498BA416
5D0949B8A1CD1F493169A01A058C094966C53975D6460F1D356AD4ECD9B38DE6
489B2AF3D07D1037FACA21871CA2E32ABBA1F39C3B6BD5CA94A7DECDFD55C08D
D096DCC14FDDF9DFFFFDDF5F7EF9650962EB6003384165E33601A734B548CAF9
48BF298223053DEDFD468B153258BAB95E19C4A32514734B768A35251FC30FE0
DA36A307CCDC6A07D29264E8D0A12FBDF412BC98443E2195D5F02813C21044EC
C2B4AA4FD6D47377BD62083A82DA6A84F2A44993162F5E2C2F4D9B56B341DCC2
F85E9629B660235C8F564805C8137B8B901A02179D8D7094DBF4EAABAF4ACAB0
64F83D309AB1C724288F3AEAA8279E7822D27575BE975D76AC529C78073C63FB
237BD82983A7FC576D36F8CEBCED356CCA55491CA6A286C49FAF57C07AD0C081
03F5229A96E8495B9EC2874C496E0A9E93CB49DC229A976AE4FA3A8C6C3B55A6
B56121E0223EFEF8E3E55DE833EEDB5DC24896F45C3C4729AB0D22E73C4E77C0
A960F549299AE6890A60B4692B34CCA0B291BC69CA6832C080D8CDC4C38948E1
9F986DD1212E5C266B298844D0179EB168AFF405DAF938E1CD4C214E5F043800
08CD82E7D5B790A8A0319A99C72A86D6489C7B8D3ACDA3CE8D61F039A7D85F74
22A915D8C5B1F338E0049668306AE417A41F25C87A25051D6CA863C68CB9F9E6
9BCD29E1F8832B85A87C4DD988D0332885A4EC040111F9C423E582211B5438D4
7806BC8C0BF3DD96A73E878D7D802C4EC161C544D04694E076DE9AA022B63358
5609176DAFAE949C6E754CC9E0A04183D6AD5BA779A8023791CB2C159BFAC33C
1AA389085555081AC4BCD6C2E111122DD1AC8B1B0B191D3BC6C3B8D65F6EED56
01E6D29DE137C612C4ECE5AC4E983061C68C19FAD811471C218564087723D30E
1B611113D59E014BC688CD76BB08D3FAB8BE08961282FF88007AAAD35115EA09
B6532754F81FB9C8F79BCD03FC85493034BD90E9E36CF5163DDE53C6162119F1
4DABBA4ED52F01EB88738678B5FC8A3B044006157D9C14E3755D64ECFA314B13
EC3F6EEBF2E8D34F3FFDF7BFFFBD7E202604E304451DFA166820C8BD4BB93772
132EA7AEF1804B81C1184471077BFDA0A9C37975308030234A8513CA8B13B262
C3A4D0C991765E1CDEAAF3C58BEBB6DA54FFF11FFF1133FDF163A5EC9BF13BAD
CC0DE99653385E3DB9AF0CD9655EB0157AB0F615AD85C910197D8D81FBE69B6F
D2D13C6AB2D215B5AF858C63C88CD6B0C1F9F3E75F7CF1C58D5C696DB7A49171
DA11A0CE2677233B7AEB12BDD3CC378B26EBB2FE098E9622B129A71A49289883
C19DC46CB2C4EC6F648563AE5897123ED779658E64649561924DD16C9FC1164F
9C7CB65F33B4C98A530A7015820A63729BB95B97E7A7991966BC3A522EB24E22
55A7FF8A31A4DBD6A1A05B19E2AB7F91B931776B90A7230F4ECB9B1BB927F7D9
A05E0ABB0934363B0C80003A0FAFBA464AC65C91BD9F9AA82F8CA629543858F1
1397E78DA64F9F7EDB6DB76954126AEBD7AFD7B734121AC96984DA613A123D15
4D295A01A64BBDBF357DE7E5F83CB4064C572353AA92A421ABAD01C8E899366D
5AD7FBD813758937118846A88E88A7D102C570D056A0CBFFE11796D665975D36
6BD62CAF172263D8B0610F3CF08049F288B4687B498FD2FD1B25844C71C62865
EFA715A08FF26376DF7D77598B7A3532ACD8DA7A0494C5BA9531265CC8E8666E
AEA9BB413A0F08420396B869169D2DFAF5BEF597CDDE94B1C48D4085E38610CD
D0D18537D51C7216AA1440FDFE27BB2C2FF3E38F3FC6B42D01EEBCFA5A8EE1C3
87DF7FFFFD5A3857C1599F69B3E903871F7EF892254B881638F4E793F55DE857
880AD4CCEB4D638F20401BD879FC92A5040F6122827AEBA7D58EA68C959A0032
70899CF2970E9012753E92D21AB25A3A35D75F7FBD067CF5D557CF9E3D1B42BD
6FBEF9863DA9DDB5E79E7BAE5EBDBAE485C4CB9186284C639F4163CB4B760F21
B7780C1D734243B8B6D0B298D966057FFEF39FEB119200B088837403C41A0390
584535D5222907934818F5E57667BA894CE43973E6B8E48F59B5788C6E151A05
5F05463C0D7BC182059A5EC004BA090DA775CF3BEFBC138B070D675ACA46EEB5
858E3CEAA8A364087EFAE9A78CCDE448680DFB4B8C996DEC182117C396BEA72F
3B86057A5ABFD4D4E15460C1B3F18CC3C24B3465214F2C29E01286867F9B057D
18A1665EDC85DD6E951109152C16B8F4D6EFBCF3CE55575D3575EA54EC272FBD
D95A2A2DD346A6B2E3A38423F4AA928C94BD3A45943ABC7272C0B0BA6C0884E0
6455CDEE9642A331CC93AAD01C8A1FEF0791613C7DD7CFCBC47BE2892700DFF3
447AE51A869772479DE88E37721752204EA593D917DA32328320B719CF267922
233AD4A92F576B90AB009B5EC37DDDCA1C966C7437E98C0CB725F8A55E591F36
8E86D45AEAE7C573192D30B156811B4F855620BB1CBD9614BC5B6F59BD97B4A3
2C1882D51676268DD37DB6DF7EFBCF3EFBCC5EDAF4E2C25CC39EEBCB54D571B6
F1339804098579F3E6F15733D96E2E0FD8928245375C40FF95B297D03756DFE0
58E77DE372F7773CA86D5670A79D76D21C9AA0B4F476D66724837410162E5C68
7DA3AF83221C356AD4830F3E88EF185B48D1C284D3CDF8790AB6327B58EBA817
213BC3D81A459131C7DC5177DE9448584D799EBD1F7BC3AD769AFB030F3C70CD
9A350487622F3F936FDB2A251B1D2BFDB84C414A77DB9A72C1566E554B0C2315
607B0A1608EA323044B93107A9BD591E2A243A918EB846A61D76113929CA66C8
D4387C9A7269006164C007C8F766E8A216C7EFE672FBEEBB2FCDC750632E148C
AD21B186D197AE8372821668313A4F2ACDB06777204D05A5B98E1B4D9D1DEC34
B8CC511FCD98639629B094B07051013B266A33C2A686ADD8C30E3B6CE5CA95AC
29F6251F70D4C1B162BEEEDC3FBFE13346C979BD3C9F56C0040990F0B19D5AC9
7A8B5DABFDDFD8FE08A27BA2F78D4C7C0644A3D15F4160C5CCBB794523CD4DA3
BD011306C8C489132549A17F72C939E7199BC54625FDB167CC9871E59557D2CA
E6FF6BEDDC42AD2ADF35FE8DE9BADEB7FF4032D3CC12D3A2881204A573D909CA
2EA428CBECE0A9D42CB5B3655A794ACB434907324AA3A40483AC4CA2ACE8402A
694A7482A88B7DB1F7CD66B7D6DC0FE3F7FF1EDE35E61CA3BDCC7121CBB5C61C
F31BDFE13D3EEFF3DA1E8C502F0265030DA5D65D45E8F6EA6280A8D53AE78140
287842DED4CD009CBB020AC186B3F870BB18769B830A0E953015583CE08AFB72
7BF0E6BA67D68548D75FB9F53A7B28E5CE36246B0D59342F66AB3FBB6CA5CE95
BA20D2E114F634C7B15D2D677A0A130FB183515DAD925B47325137540A858F82
FEAC797D8DCB43B5B3D9ECE7C59EF6BDB9F349E78599685FE16F39C66D034507
319E589EE35A67C706ECD03B265FF7FC1830F4CFCB972FD789EBCB6C532EE532
7C4CDB4002B1B3EB4B8575E1D81A2E5DAF98C9D6A69A3265CAABAFBEEAA2BE98
58F590082973163008A2FD87F7D6CEACC875E3A974AE74E2A652B49AFA039853
095F88F89D54EE76325928787E392834A792BF280382F083FB9A788F71BEB819
69C054A06B4D89E3D9B00233D3A79F166B6FF4047D565E87350DFC0D44B39C4C
65B7C74C7C91292DEDA0DB9A44F546F898E991F1709C9F8AEBD5CED4EE38A08C
B0151A0EC6EE70B14019AF9101204050C3E015B0B1643202270273A727C03ECB
E41C77DC71F2D479B57FFDEB5FE3C78FDFBB772FA6400C6358AD7AD5989CC8E6
E6E6EE84BBB46A7FFEF9A7BDF6D4BFF958EAEF0D1B32E59DCC220E58013BEECA
14B403469F8D88116AA483CB66E48CBFFBEEBBC65978F798E58A70931658B359
41EAC771BBD1446F635BB4815E684790CF362F52A360D550B500EE70E07A3BE3
AB8BD08583BD357CF870B917CC9816D58D6822C9003B8C79338B16F2A841016B
CF69E12B942EDE01D4A4EA8D2476651A7FF4D147847180CF50E816E1825DEB5C
A99502FCAC6DAD0F9206AE9B1F066FBA440B29B64D4F6837D40E5C9E3097112D
DCB76F1FFC8EFFFCC274A0F5505F6E45C79F2015E168F9FE66858AAD1039CEEA
EED7EBC319CB5BB3F38999EB4B251FE3164AFD332C29B45BA84B19D8DFED09DD
67918FB0DCD05972D1A245A0A8B0EA52683C4ACD9BE3077EFD58C7F2CFAF0605
6C5F5973A59981483526CF8AD06B56FF1D3C78B044AA0CF4A54B97222210FAF8
527D81AFAA791D2924259415E5989D69FC51660C850DA6069D8476370C9854F4
ECD9B3B76EDD4AB29348F8EAD5ABF5100D75C18205765750E704BAB0B0539672
E657276A4AF50791B9C813EEADEB1577E2806EF3104291B8758A90B773E923D1
0223C830DD6231454501734EB108E5FBEA65E1A6A054442F822626E2455A34AE
A06900DC9528F246547678857F3B825E1DD68A65CAB86A1A83EE3CFDF4D3F7EC
D9E3FA257D4A4FA364C3BD288C87E5AD3D9346CC7953E9EBA64E9DBA64C91283
0FFEA3BCB4162860B008166B6C39643E5A9613E75010EEB8BDF30113023862E0
8A11642B8615F10A491C52BF24215A654344662AB273B93119216B3C24831450
42DA2EA4703057DD610A43E9185AE8281B304DCC6F434E77506E156E91EAC3CC
5F91A77A17A86D883FF059A7CF89D622E6468E1C79F0E0415797A65C875794ED
4738210D21F798C3A38DB6664C82006DEA9390CA6A39D9B0EC369D25AD14B029
22F316949D75AE76A43053084B3484CAC149AE58B1E2965B6EE178C75E22D40B
EA8DF4044E14A7CB5DC33400F3BBFEF36BEDDAB5B366CD22F8433492C080E15D
C46CF136F011BB3EC7A160BDBB7CB5EDDBB76B32617CAD9B87482142428E9B35
1B101F32277AA64486812A2077E89127B3A9CE10712EC371FE9413F6688B1490
CF7115402D1C7FFCF1201E3CC898CE380AAC40DD5571A93BA13AB1EF166366FC
DC69B52A29317FFEFC279E78429B47338363E1F621CC00B05E824C75B9D2566E
7B87C90BAD1B68233487C37B8E9D428A6086EAF82F536AFA65C3656CBEF48416
5BA81613EFF484A68D8E36A54CA2994245D9E4C9933FF8E0038D818A20E09FB0
0D027903026636D3566EA860A253DBD31596C3CE32B6D4BFB342CA38830A9228
959A8F2431B7990F270577DC915E3FCDA525187F3DB971964B364CB38FB9FC57
D9728DD3A1D9BEE4924B5E7BED35FE2AAF86865176B5B1960C8687454A4F063F
C8A290504819DD9DB2F11A0D59433E0100A68CEA258845EE03CBD55C5D95B58E
EF6EE96726937FD3720DE82059011765ED8DCE404CEB0293035A9C42E8C6F104
D72FB1BAA80A1B71EC211C8BA79E7A4AC78C35704023BE5B730E78A0D7A851A3
5C3E21B574F1C517CB926D4035CF983163DBB66DB043D8BC284289CE983163C8
654AEE6FDEBC197F11117CCE39E77CF6D96704DB89C94316E62E7EE63E95E5B5
65CB16B4949E2C254D4FE9CE0B9C082132D9DAF20FDCEFCFD97E2C2F077F1CB4
944AD66D2E9EEB5AE7AADB56AE5C298B9E09E71D1B22108C07A206149E356B0A
995486610FDBBBBC3730BC1F93F565185ACDDB6FBFFDE9A79F7668D790511225
F49FC070EE7AC52ECE7E7283A156E45EBC29777DE0F704483406397345595FC7
A1C0248D82DB2989AECF8F653CA93F2B562A252FDC0E787248FCBEB2D58A31A2
D1D530CE390557E098CC7FA73F1AD37E76EF52AE2F92E7A761D09AC2AF362877
C841D79A5707121BC79C7C7FBB9E998E44385BB49D696B25D0E07849814B2B65
316AC2A34E6302FC878D21777F49D9B773E60F1F48F7CB8CF8E8A38FBEFEFA6B
1D0D68CC1DE5B6B717213F1AA16E73520610066E4F6C99A51DF55FE5C51BB532
2F7A2A3D1FA38B1D6667BF756EA1BE1A62AF56E87DA429D290E8B02E51036788
53DD2988E84EAC3B17D2C0D1EC14325671C57D3F3C309ABAE5CB9783F6D06B2E
5AB448BA0DBBE7C1071FD4FE99366D9A5BDD500E0008A6F3ECB854D5AF1CCB96
D8693D65233519ACFF5D5EB27588792030792F67DC5C9840FAAF9D3941B5B5F6
EDDB377BF6ECD5AB576BB494B7D13FED6842D038F57AA8661F2C06E388DD0E62
1B5AD756BB152B0B49EE87A23A988DA9F576145713B170E1C255AB56492BFFFE
FBEF644C5DF57114F5AC0DEF65A6154D3769F3BEFA767238FDBD81DF9C4414E8
71B8499D8D37C79B01EB29F448800068E2C4897BF6ECD10C7CFFFDF7EDCCC5C3
CD804A38BACDA151DBE3B2608C034FA560D5A36055D557C8A2778DBCA1613CDC
0434953A57DDF0E38F3F6A73EB66A9285AA390F26998D2143AD873B4103118EF
60585C27432A0B9DD12A7B47C2517CACD6971F62D63366CDC182EABD4C18DBF5
3916401C4EA2020DF5EB0409AC5D680A426CD0F04B0E307878F7AEB11522D3B0
CEEA4A0134C45E35384E274866048CFC88DD9933676ED8B021954953FD5E0245
CAC6D0048310DDB7878336D07AE5E6F9B753E5A4B5B5A65157E4FE5908078D8A
DCB70DD7CD6CC6E8BCE9D3A7AF5FBFBEC2740D8F669D2D65B34F2702BC058745
F3FFCE3BEF5C78E1852954A83333380FB87726AA34813CE24EB34A743486F7AC
7D31C1115F16083A17A46907E54EEF0837E78029E0C13CE5A5E88E470D9E81E8
4465264C98B073E74EA7787DD0C09D6002C634478302EE14AD0EEC239F2BF539
0E7DC753167301D1F8F6D7B9DF622AB53832C7E958D6C8141626974E9907576F
AAD774640EB0ADC626B7E7E5975FE67D51759A10CDD5B871E3E468496D99B739
BABCA9A33C922BB6FE4DD9C04AB9CBA4FB75CA1C91A88F6DACB8C7670AD801F8
2763FB8F46C0217D7076919BEC1E30EBA8162924BA1E464A23D6D5D9ECF3CF3F
7FD7AE5D72D7EEBFFF7E42F68608612D6AB84CA8D4C0175F7C6180437CE03111
1024333C3002C2ADC6A608EE45954AEBD2E06A541A1154DDE6FE2AF6D7D93AED
DC754BEB41798911ED5839FA3D9C3844C5BD665DC74371173170647D4F6EFECA
C16BE5CE272967748A928484D814E71F3FB56B9D2B0B27097EEBADB77ACB5255
59373FB11F30F59A8EC050668D393966CC9803070ED02CB30845C311DDF0CF2F
79F9E6EA428E6B5484D15C24DD17DAACD69D8B254B96AC5CB9525B45DB559FD5
1AB9AAAD6E1EC0F11E3A74E8871F7ED0EAE883575C71C573CF3D479A43671B25
11A7A828DBD322DC2FBEF8E28F3FFEB8AE8F753BB78571C759EF584863107050
F9B057C920DC78E38DCF3FFFFCA9A79E8A768FDE864DC374AC41589DA1CE22B7
CF72655705F6D1EAE8974A0C1F0B929BB50F69009A3246A45D76E79430F9F2CB
2FBB8E8762FA1D3B765C7EF9E5D89DFAF6A54B97CE9831836DCF59C348354B41
C5B575332B031D1CB9890C275E145767A5C05743CCDFF38F9F4D5044CFD4A8B4
793EFFFC73DD49F80AEBD0694B8A458BDC76E2E4934F96A7E5C21BCEA0F507DC
C5ADDCD63AF24C75AE4BEAE6019B9BDD81134933EC033C31B32CA4EC0EC6754C
D9858338851D5E945D4735D4134F3CF1BBEFBE03DC4AAD26E91E52FBEE20CE9F
1CC5A14C142E0EDE88D264FD498EB2E6E1DE7BEFB5FBEB748C212F955393FAC7
4EDAB9BD15C2133A7157005A8A32306C0EFA8A6287A56C165011F7F3CF3F1B72
3876ECD86FBFFD76C00A3832B9C4F3637627C7FA639F0DF31C0DCA9D9ED86418
0E36E210D69C4610CE367CB46040E18D723CBAA6020D02C27C40768FBA9A81F1
00E3D50D1B364C8764DBB66D506F92D5200D0C5C931F3403A3478F96145EBC78
F1B265CB347EBEC8A51D94F710D32E72771A13DF3487D470052EBBEC329929FA
EF1F7FFC8105903220B955D271D3A3501B1D64602B1001C632B076479D6B2AE3
3F44EDF4271D39475D1AC6A355D319983A75AACF3CFCBACE7815256DB80E8F5D
84541A43BA4167E91802A191C89C0AE072F3E7CF7FE699674C8F90729C001AE1
BA79A6888BF0A08F169E7DC33EB104E41DA1D27430B3E8D67CDE6521D291B2D9
1B147C91B9969C69864A5082A6C2CB4F3C0DA1A33D408F6AA498AB2C225C030E
D76335FF29C7725336015316201C01A8F7503C985F11B6E33532A41F000EBF81
0FBCC281EA17A91B0F6E19C45E8ED31A94E0B81D562C707D0727624BB794137B
44C52C0F8D77313027E5E8B78E95CC2343BD52968D988328600EA0FB23B18B0C
F14DA11B4AD4FDBA8DD229DD29D3E4C89123A4C9FBCA5E46B86BBAA4AA651416
E18A20ACE6485BCA217A8BF1E9D3A76FDDBA959433BA0DF7B7C8D49E0EED1243
2208442CC12970BD8E9EE91614069DE0EFA51CBCB111E31D8BCEE6E46A4A51B1
6621654E00219BD0A3C84C1AF8182C41AC1CB30266DA2B4E30AF699B4CDF4BFD
5E2AAD1C597EB26B91FC9666AB56AD9A33674E0A75A15AA0A30941637BF29E46
0AD8D8A97453E9CBED0A9814E0A6AEB288B42F76CE7C96D8D09178C1CD1898DF
9ED034ED1F5E11A7D7CAAD4953A3828F98E448ECE7F6F214B9BB5AD41693D1EA
D8BC1649600DA27D332893EC63F439FBD2755DFCBD318F2E351303FECCAD590E
A06D33939197A9B3CE5577F25793D4639636CC0F9170C3C263C775DED7670F60
146E4D1128668E6D8A410FD7EBB8148A680DDE953B70987FBFB9814F4FEEAA66
9AC06681E5673A53907208E1975F7E31B1178788BC438527A1D9F04A99BA4ECF
94D63CE38C33DE7CF34D942B85A47047803B436CF12F2BCB8A1852C70F43860C
B9FEFAEB1F7FFCF16335FFA99B027641AD9370D75D77DDEBAFBFEE6899BD13F6
302387F908938E34B69D397332BBB4AFEB78384DE82436339A4FDFA2EDFAEBAF
BFDA4074BDD635D75CF3F6DB6F43FD615AC094F1D2AC9A4B0A2379962B85FCED
8E344088812D6E67866305F682D22628AF25BE653212B3010279D34D376DDEBC
593BC79100E9667222FAAF1CFAFBEEBB8F04D3EAD5ABE7CD9B077F4314B97565
487539FB54DA402E1980C77ECB962D93264DD20D326D35000A8E6358DBCC1ECE
60021264DDD102786BE79D77DEA79F7E0A00C5AD9AD9AB5E6E3D07918504763D
2A78585880B48238E5469678BDF09E913348605C26F64C0CC5A75C8E8C18D45C
51D19082C503684EAEC255575DB57DFB767D979B1D01C161F0B8196EE021B1FC
F2CB2FB3AC030661F5766B147FFFFDF7BFF8E28BDAA9AECA30DA3385780BB621
73C1288DCD614B69856EB8E186F5EBD7337AF8D94D22815B40B6D5A9B8BA030F
71746C269AFABBEC8683794B19F280B289DBC8790E360A9B98CD1DEBA1915FBD
B993522B7388BB64194F94FEE44EF9207F5380E347E82CB33D62C488F1E3C76F
DAB4A96E69909B0E71B432F9B88B6E53690936E73879888194000899049FC008
E36A65F6763D907660B6136562CBC7FA2B77A2F612D429005745A3DA31866414
6B53B92899D0A8714F989F1CC266CAC9221701F3226EAD41FA93B3576105F267
39E1BD65138EE69C37A6D5DCB97357AE5C09A2BB4E912F5EBCB8EB79B9F3CE3B
376EDCC83070CEF44B3D50B6D4D0A1432191F0C6D00F7071531FD9CA6D64343F
FA6A4E9FA11880ED712839C2B6209B895FA2C1C4368EAD8E117045C9A0028209
1F117BAB194196B2071F697F5AB97D083754FA8B23106978673805906917E2F7
E65E580DA5EADEBA0C95D9A068C7C180D8B61DCA71E2313EE01EAA6B0D8CA8E8
0B6DA95A815CB395D9874C3CC2DBE90401A38D76AD13D511508D1037BB9633DF
294387EC0B01ED24644A1A95F7D51B11FF4C038F20DA24B292D6099D3061C295
575EA9AD6B4E0CF7C1ADC0562AF674844131726D27A864F5FBB3CE3AEBC08103
349A23205164AA13D60B57102306EA4DBDA98D398FC1DD4BF54CE69916E6DA24
FAAC9E0C6A1A46A318A9AD981171BA383B46EFA3C2C81B0ECA8D5691C0A9749F
F82B2979FD69DAB46932EC162E5C78341E70CA91B4D8080CBEE954065860948D
202C43B1DCC8413FEB85E14BC34E4776C8BAC46C21D872EBADB7CA06A76F65E5
2CFD2DC34E0A3C946C65CC2EC341539927D3629026816B894395CA108A130086
5E47A6116F416623F6CBA4D84B93134539CA0648854B9E64963EF4D043B473E1
6C238990BF29E7B9914D24DD1BD62565154E122565A0B28F8A06A051FD6DDB47
6B7108E718837E89FD010A26E5349839174F39E59443870E996AC07CB9AE754E
D9A2EC0C81B23B6DE520B03099354B92B0123A985CA05E7590CC004C4B697D6F
4317A9229325A5EC8F46A26073931112A726CAA38AB4440D4428FCA0D7D4F46A
8925282FBDF45299925DEF3FE9A493EACE8B5E9650391B2696F3B702A956EC83
E6D44F94D4564B941EE999880307ABB5A088E3E67A7A37FDC442D526A41B12A2
B0B39E5B86029A581F94943972E44803652CC5F4C8323C2117C6D4F51767CFE8
370F3CF0C00B2FBCA08D217367E6CC997EA646488D4D03BBADE3DE31FFE76D8F
FEB6DB104B86B439ED4B10D2700D127BBE0EBE44C4CE7D148C47ABD4E7A4FEA4
5A5E027E636F0CA046CA7021EB7216DD122FE5DE035A086D0046A87B64CA7FF2
C92750A8A6815C8E54936533FFE2FF9497EDC8D8C0C071DD0AFE2E85C4301BC9
01515023D44043A118C1ED1E33C3D0CC13B733CB552A2D00EC42C768BDD01C16
3D13930E8392D9731829F2ADA6C093D8CE5CDF31066601C20169057278DBBBFA
F9DC73CFFDEAABAFE0D0D62F5D6672340B8038ABD80B29D3D018908D1E428C22
5E5DE4106B618D9D33B8CE6D29A500A0724DA1C24C0BF3D34F3F8103AC23B51F
366C18C56194665B0B56F2ED5CB1081273CC39330B5C6710A11A26CFEFC4AD74
1BDE8903C89196CFC1766B474E081B486B79F3CD374B9478F7AC59B3E6EEBBEF
76BACED16CF81A1BD605393B28B7A84A39138FD98525D4DC0BCF9591AEC6EE8A
832D02518313FCB6F4AD45348DA9048FC469EF0A028AEE94DB1FC550BC84ECC3
0F3FCCA94023023234EED103EBFA5EED506B6FAF02961C6F54CA044F3BED340D
C9F5CA9051BB2EB04E014F9F3EFDFDF7DF3F7CF830FF8D8091BAF1743D2F29D0
D75057C67AE17EC97A2380E1639FB283EE167E681DD210CE79CBBC03A04B4082
8D1449361AE68D9D8C7BA161687EF6EDDB6782CFA2ACF6A6ED8A1682EC63CC83
A6ACABBA3EFFF2CB2FDFBF7F3F0ADBD36BE4C75F1DFDC56985994ACBD2A5A2FA
AB7EA65A9730899663DDBA7511E2D0B981C976A183F5D537DD74D3B3CF3E4B4C
15702F0CA3C822E2E42851A6DAD28FD966EBEA2374EB228963598C33AA4B8B18
F3DF9E76ABED8AF67540D841026B0B27568D5B76ACAB2FF3585588D528767084
E028523CB1E72C0E15CC45A9342591574C4B8C9FD95EB7CDD10A7D2CFC0392C4
0C049E6157FBA4A0B309152C5FBEFC9E7BEE615DC84A385386E6FB2B774E4C21
109B424623E506A39DA5FC9CDF2294F6B533556A3B947A9BD3C289062F712BB0
D499BFD326B516EB681430F1D2F8AD64DD89F21358377C3C7ED645383DB9B9B1
7E29DDB376ED5AD762022A93F8B35267D61C2EA6400258816DF9CE6BCA9429BB
77EF8644A69DBB1DE8F9F0A8E997C3870FD75F91E67AB85E8A2E1F28C5ABAFBE
7AFBF6EDCE1960F6B21206472064595D5BC1A9749D639D25C86A0E0337B300B1
9E8ADDA61592612141A3FBC9FFB1CFF0D89A51A9BA01962B19595827FAF80927
9C2005431E5D371072A0ECA14E31B40249B57E78F4D147B53A7A4D16DA704D14
ADA3E5F813B001574A1DBCFF5A813FA8B30C26E574A0790C8A5C77A82F92C9A5
D5D1F8357573E7CE956C95F8E06C8350653C6655EB7A21DFF5404873B0088934
DAF9D65FC9CB82648931DB945B8D767D3809276D037D8596CF189C3ADA6D6309
2BE705A64FE87E34C8BBEEBAEBC9279F7410323AB818558EA8F3AF0BE12485A5
ADA9C877C23BE5FA51D780920234B0B34EE69A467850D9515BA6675C59C3A7CD
69A57FCF3CF3CCBD7BF79AB0B64E016BC6346F950A3D045FD7FEE2AE4F25114B
4F56324D041B8934920B6C00C7E9C5B59710F486C9F0A779F3E63DF5D453AC88
843B485A3DCAECF7CEA6E3EF02FF7121626FEE4063748F370FD8FB8A4758E4E6
19C4F3225974917B82E15CBAB14A0CD75B8BF358C7BAE36DB18B435CE8A350C0
91C02495AACBB4F9D69778A2EE5DEF197025525F68ED97FAC7A511B6C810F61B
2F68DE02AB43E40F2C1C4CD43BEFBC237B8E8A640D29462688B96A3CDA36FAB7
E237A6006966ED4098B67343B64A3EDBAEBF2D6C1FBA8A83E7CA2B9F11AF85EF
1F7008DA5D5D094B226E7A42EF656005AE0AE0006382F192BC1E0A86D7731315
6A16B1864843EABF0E4C4D9C38F1C30F3F7CE081071E79E411279FBA8ED38409
7AA68145BD99A239327F9AE5840D4A3218485B5C21000E7AC76BAFBDF6BDF7DE
D393C1BC013A9F3C79F2962D5BF459CC0B6A005A99DCD5314C3F10330D139253
0DE48FB8BA3D1BD70BB94ABDD222226EDCFF2D3BC0C37EE5789D8B117B42AF75
0AFFEBD6977122DFF51C3373A59CF2A72423851ADF56E00B4407EB87A143874A
FD7B715D6E514704E1487ECCC77300FE4D19530A14FCDD08C7734FADD491648A
EF85056604A934C415575CA18D64E1552106894BA6A1EA75468C18B173E7CEBA
E7FBEC55F84FBADE1F73B1F1BCA49CF5B4BDE24E00C3860D3B78F0A05F10D7BC
1588FB53695C8F1C39F2D24B2F95DA90F27EFAE9A75D74EE860A29E3AE416F80
3F6F687F99021195B18A985CB1E18C0165986229E3A1FED670E487CAF2B914B5
D25F3CA69FC9867288A0D430391D5FDA10FA765D90714973E6CC59B56A9531FF
0693524F4F80C47E4F2A11B991D0D42DC6BDBED61C9E3D138944ADE9F3DB972F
CF00DA0BB38FF54299619D58E37AFBE19038391AA11B2C16B3CAF8490F0D9468
C54F7324A0955930EDB83B4B924237ADB89DE221B51648591ACBAEA2A0167488
89FC2254DB11B8DE40DB4E1931360AD6AD8E3C9CBBBA7FF1E2C572278C21EFAC
F725B5E11C1CD156E6B92FB091636522E250C03C048BB01538355BA1C521707A
37022F42EFA20183B07C00F88D7D533B3A9E324B58235C6C7F5198B860C182CD
9B37736E0D538ABDA353CE84F17A1CBF58B153377EA37B580948AA3518AAFB51
30E848265162DD35D4A8314711992C464E32C667C0063B5138147934339D02E7
ECC9C7A51D299969C2F8B366CD7AE18517887952064D12D41169164C5B473A80
2AA3AE07435F0197A1F52E821B05EF448566523FD45127C688909E3375EAD4B7
DE7A4B3753C95EF1FF8815C7D03A613A7D9DBE65F4E8D1DF7DF79DE6103CA715
6D572A44CF157A05E910DDF422F0E9981457DF3E78F0E0FF2CAFD468D1735C51
E4F40289E40F18102C22CC44AC20B3C1B6D464EAA5EACAA262999383516E8351
F791CEF3A209F9F1C71F35546DBFCB2EBBECA5975E62E74BBE9F75D659BB77EF
A636C9A4C729937A72B65D74A0DD2EEB870D801E623038CAA98CACF0F339E79C
73FEF9E73FF4D0430D83749435950905C3DAF5A5D49A3B74AF85405439C8D95C
D6A2E5D3B0A9A84ED9AA88A9D9AEFDC5CD97E93C025F019A5DEF4BFC00B9D4F5
7B630E1E3B5EDB524B0FF29F6F31DD87C676F7DD776FD8B0810A34A7DE8BCC2E
E778FBA4499376EDDAF5D8638FDD77DF7D710EBD2D23F563F4747B735B8222F4
A88FE7C2997817769A91308622F01A1DC7AA44B32391706A4C0DD45DF6E4CC18
13FF6A918838D5BFBFFDF65B7C7DBFAFF795535D18762EBE003896FA934247F5
66482041A3549A44FA08140E3A35D3A64D7BF2C927392CDA8D38BECE919153B0
2E378031F62D365990316E46E617B9E99F85957CF1C3870F33C37D99613B22F9
236CC256EC8015309EA59E256520DF9F87F68416D3D1E444915061E263E34C0F
659700FFE456EED8B1835D65460BCEA7CCCF9EDC30DCACE558D6DE949D97B720
A02AF499FB01EB4B6FBEF9E6575E7965C89021DF7EFB2DB9641BDD48286A9CBC
571CB8C78D20D9A60FD27DDD9E8A6D25FDAB2591304533699CBAF9820B2E90F7
AC07D2F553C2451B943A076053F2A4DF7FFF7DBB2929473C9CF5AC43751ACACB
7F2BEDD8345ABD9484A33CFB534E39E5CB2FBF345EB172B916455F8A4559941C
40E79D779EDEC57DE099CF76E8888CD647E4310C6D657D8BE92711646E656AA1
80FBC58E1C3B76EC37DF7C136BCD69B24B737B770836905E9F9D3B77EEB265CB
74837EAFADD200C24A1D043729781E1530519C5867161ACAAE68348405662DD2
000026C0D3795E18897D0BCD210E996EA3EB8B9B49B7731F24A2057D99065C9F
B5C780773B7FFEFC75EBD6C9E83124D01E30C1864A8BE5AEFBCA13656C9D29B4
22782D65E4E3C2850B1F7FFC71E9B9FDFBF73778D851CD70EE30239CA0A9F417
D7A3F427C8D5794DB742D1F620F3A7FB9F78E289071F7CD065A09D970C1D9D68
D867490C7164C0AC603FE1CAB3D3162D5AB466CD1ADB9131178019E74463E7E9
EB3AAB516B1AA568411F33533C4A52827E4A1C19944DEA0FF3D173C08757BA20
1059D50FD4C2A6ACAADBF5BC0275173ADB4C0FBC0502966A6CA4478C0D18EF1D
9D48EB8B4E4F74D4A851870E1D8A54AF6C80D4DF8CE3ED20F1B6631D41AF44A7
EDF4EB82019E488091F67E0B8EDE45175D247B4E2ADC2462C0745269B3C648B8
278165A25E9FC839C724054A4B0CB5C80BE9CCC28073C01C30D9179B366D32F8
C8693C4B049CBCA54B97EA7DA475607EB036C2E535D144443CE241F2F2F6EB99
2323AAD8850D45C0315CE6890063AC6570E7C894634D8E343241B7DC72CB1B6F
BC61FE9422906E531066F2397BEA92953A24F2F974DBB061C3E42A698A366EDC
48FA96650354AC4799A0D5C5FEB7DF7EFB8A152B6232BF08A5E22953B13484D4
98100C05C4A5B5A3F19929672B8B46B4B05B4FDB072557C7B7231C7B3369250B
EAA494F7340DFE98671F33673E3ADBE1694E6EBBED36A98A2253D3718CAD1E08
4A3BF889BBA37FEFB8E38EF5EBD793566F063D21A0D97ED84C4E68F95B28A771
10CFAF5CE4DEA55D9F8F67008369CA4ECFDF86403BCF4B0A69113205CE91A76C
05C64699804EA9307193732EE296368088D9F4E54664A8345BE875E7C89ACFFB
4A7B5BF23185D217A76F23F9A2A37345E016EEBC6282D38A87DC794FB7FEE258
36907CB143243177EEDC19E9E22168D35A3418645075A60CAEC47B060862382B
E56DB292A5DA2BE540CE2C125460727427B5AD9A2299AADEF3910ACAFB275A1E
0088527F8868911BC7B139C78D1B77B8BCE20124809732CDB8FE7BF6D9674BEB
5060CADCB673C195035404186271D4FFFF42DDA28A6CB3FA4D234A5F53A7B995
18E4ACB962CAF2A1C290D5CACC6292BD205207E5BE6186FDA61CC967E3B53399
81F17A29070B757C2878A1A25D52970C3D7BC3B5218E70A4AC778841FA50631E
15B9F95E3B13CFA5AC8FB9B39509737A427F2A8FD9EB1E13A0BCEFFF015AB03D
44233550ED0000000049454E44AE426082}
Transparent = True
end
object Label1: TLabel
Left = 104
Top = 83
Width = 195
Height = 18
Caption = 'Das Spiel wird geladen...'
Font.Charset = ANSI_CHARSET
Font.Color = clAqua
Font.Height = -16
Font.Name = 'Arial Rounded MT Bold'
Font.Style = []
ParentFont = False
end
object Label2: TLabel
Left = 56
Top = 21
Width = 313
Height = 64
Caption = 'SpaceMission'
Font.Charset = ANSI_CHARSET
Font.Color = clLime
Font.Height = -48
Font.Name = 'Arial Unicode MS'
Font.Style = [fsBold]
ParentFont = False
end
end
/GamSplash.pas
0,0 → 1,24
unit GamSplash;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
jpeg, ExtCtrls, StdCtrls, Vcl.Imaging.pngimage;
 
type
TSplashForm = class(TForm)
SplashImage: TImage;
Label1: TLabel;
Label2: TLabel;
end;
 
var
SplashForm: TSplashForm;
 
implementation
 
{$R *.DFM}
 
end.
 
/LevEdit.dproj
0,0 → 1,1104
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{c3719792-d463-4c67-a238-ac2b31b77218}</ProjectGuid>
<MainSource>LevEdit.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>LevEdit.exe</DCC_DependencyCheckOutputName>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>20.1</ProjectVersion>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
<ProjectName Condition="'$(ProjectName)'==''">LevEdit</ProjectName>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''">
<Cfg_1_Win64>true</Cfg_1_Win64>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''">
<Cfg_2_Win64>true</Cfg_2_Win64>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<SanitizedProjectName>LevEdit</SanitizedProjectName>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1031</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0</VerInfo_Keys>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<DCC_OutputDRCFile>true</DCC_OutputDRCFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<Icon_MainIcon>LevEdit_Icon.ico</Icon_MainIcon>
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
<AppDPIAwarenessMode>none</AppDPIAwarenessMode>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<Icon_MainIcon>LevEdit_Icon.ico</Icon_MainIcon>
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
<DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<Version>7.0</Version>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_WriteableConstants>True</DCC_WriteableConstants>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_UnitSearchPath>VCL_DELPHIX_D6;VCL_MARKDOWN;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
<DCC_ResourcePath>VCL_DELPHIX_D6;$(DCC_ResourcePath)</DCC_ResourcePath>
<DCC_ObjPath>VCL_DELPHIX_D6;$(DCC_ObjPath)</DCC_ObjPath>
<DCC_IncludePath>VCL_DELPHIX_D6;$(DCC_IncludePath)</DCC_IncludePath>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
<VerInfo_MinorVer>2</VerInfo_MinorVer>
<VerInfo_Keys>CompanyName=ViaThinkSoft;FileDescription=SpaceMission LevelEditor;FileVersion=1.2.2.0;InternalName=SpaceMission LevEdit;LegalCopyright=(C) 2001-2024 Daniel Marschall, ViaThinkSoft;LegalTrademarks=;OriginalFilename=LevEdit.exe;ProductName=SpaceMission;ProductVersion=1.2.2;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
<VerInfo_Release>2</VerInfo_Release>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<Version>7.0</Version>
<DCC_WriteableConstants>True</DCC_WriteableConstants>
<DCC_UnitSearchPath>VCL_DELPHIX_D6;VCL_MARKDOWN;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
<DCC_ResourcePath>VCL_DELPHIX_D6;$(DCC_ResourcePath)</DCC_ResourcePath>
<DCC_ObjPath>VCL_DELPHIX_D6;$(DCC_ObjPath)</DCC_ObjPath>
<DCC_IncludePath>VCL_DELPHIX_D6;$(DCC_IncludePath)</DCC_IncludePath>
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>VCLApplication</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">1</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">Der Leveleditor zu SpaceMission...</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.1.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">SpaceMisson 1.1 - Leveleditor</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">© Copyright 2001 - 2006 ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks">Keine</VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">LevEdit.exe</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">SpaceMission 1.1</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.1.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Webseite">www.viathinksoft.de</VersionInfoKeys>
<VersionInfoKeys Name="Projektleiter">Daniel Marschall - www.daniel-marschall.de</VersionInfoKeys>
</VersionInfoKeys>
<Source>
<Source Name="MainSource">LevEdit.dpr</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k290.bpl">Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp290.bpl">Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server</Excluded_Packages>
</Excluded_Packages>
<Language>
<Language Name="ProjectLang">$00000407</Language>
<Language Name="ActiveLang">ENU</Language>
</Language>
<Resource_DLL_Projects>
<Resource_DLL_Projects Name="Item0">Englisch (Vereinigte Staaten)*$00000409*ENU*ENU</Resource_DLL_Projects>
</Resource_DLL_Projects>
<RDP_Source_Files>
<RDP_Source_Files Name="Item0">LevMain.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item1">LevSplash.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item2">LevSpeicherung.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item3">ComInfo.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item4">LevOptions.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item5">ComHilfe.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item6">LevEdit.drc</RDP_Source_Files>
</RDP_Source_Files>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
<Deployment Version="4">
<DeployFile LocalName="LevEdit.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>LevEdit.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClasses">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidFileProvider">
<Platform Name="Android">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiv7aFile">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDefV21">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStylesV21">
<Platform Name="Android">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStylesV31">
<Platform Name="Android">
<RemoteDir>res\values-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIcon">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v26</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v26</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIconBackground">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIconForeground">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIconMonochrome">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIconV33">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v33</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v33</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Colors">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_ColorsDark">
<Platform Name="Android">
<RemoteDir>res\values-night-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values-night-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon192">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon24">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Strings">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedNotificationIcon">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v24</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v24</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedSplash">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedSplashDark">
<Platform Name="Android">
<RemoteDir>res\drawable-night-anydpi-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-night-anydpi-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedSplashV31">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedSplashV31Dark">
<Platform Name="Android">
<RemoteDir>res\drawable-night-anydpi-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-night-anydpi-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyModule">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="Android64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>0</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>0</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug"/>
<DeployClass Name="ProjectOSXEntitlements"/>
<DeployClass Name="ProjectOSXInfoPList"/>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64x">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements"/>
<DeployClass Name="ProjectiOSInfoPList"/>
<DeployClass Name="ProjectiOSLaunchScreen"/>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iOS_AppStore1024">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon152">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon167">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_SpotLight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon180">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification60">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting87">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSSimARM64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
</Deployment>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="LevMain.pas">
<Form>MainForm</Form>
</DCCReference>
<DCCReference Include="LevSplash.pas">
<Form>SplashForm</Form>
</DCCReference>
<DCCReference Include="LevSpeicherung.pas">
<Form>SpeicherungForm</Form>
</DCCReference>
<DCCReference Include="ComInfo.pas">
<Form>InfoForm</Form>
</DCCReference>
<DCCReference Include="LevOptions.pas">
<Form>LevelForm</Form>
</DCCReference>
<DCCReference Include="ComLevelReader.pas"/>
<DCCReference Include="Global.pas"/>
<DCCReference Include="ComHilfe.pas">
<Form>HilfeForm</Form>
<FormType>dfm</FormType>
</DCCReference>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>
/LevEdit.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/LevSplash.dfm
4,8 → 4,8
BorderIcons = []
BorderStyle = bsNone
Caption = 'Bitte warten...'
ClientHeight = 388
ClientWidth = 533
ClientHeight = 373
ClientWidth = 515
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
12,17 → 12,7625
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poDesktopCenter
OnCreate = FormCreate
PixelsPerInch = 96
Position = poScreenCenter
TextHeight = 13
object SplashImage: TImage
Left = 8
Top = 8
Left = 0
Top = 0
Width = 515
Height = 373
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000002030000
01750802000000FA2A7E410000000970485973000004BB000004BB016E1F0EAE
0000000467414D410000B18E7CFB51930000FFFF4944415478DAACBD09BC1C65
95367EAABAAAABF7BEB7EF9E3D842501059771FD3B8BCBA8333AA38E280E2202
82826C02814058022191254008B223A08220A39F333AE8B88C8EE8F867107101
04C2928424775F7BEFAEEEAAFA9EBE0F7D2CEE4DEE2738FDD3D0B7FAAD7739EF
79CF7ECE6B1886212FFF0441C02FA954AA542A45A351DFF7F170D5AA55CF3EFB
6C5757D7CCCC4C7F7FFFF8F8B8EBBA78DD34CD60F6C3EFDAA165599148043DD8
B6DDD3D333343474E8A1873EF5D453F829DC122FB27FB6AFD7EB788857D0A0D1
68A00D2650AD56F1B0B3B3339FCFA371269329140A68DF6C36D12C168BA1017A
E8E8E8C0DCF024994C562A15CFF3B8043EE7CC39167A8BCD7EF064DBB66D175D
741146C42BB55A0D0FD7AF5F7FC30D3760089DA12E902F62218F3DF618FAC758
E8906BC1ACA6A7A7B93AB6C777AC08FFA2653A9D2E168B0A55B459B264C99E3D
7BB00AFC8AE7E8842DF99DAFEB5EF0213E5832FB673FE81FF3C1CCBBBBBBB123
80D5DFFFFDDFFFEC673FC3D6E009FA674B4C126DD0091ADC7EFBEDC71D775C36
9BC5EB37DE78E329A79C82E70411B6696A6A0A73C017F496CBE5F0A7CE0D9D00
4AF8170DE2F138608EA1B1473A3D4C8CBF2AACF831421FB4C79CB94CAC3D9148
9C77DE79975F7E39F69DDB8A7ED000CD3004FAC18E707A6880113101FCA4F099
FFC1736CF4E4E4A42E8AAB466FE80A3D1355F01048522E97F545DD297D82B1D0
12000FFF0A24E42EE3C381FAFAFA46474715562B56ACD8B56B17BE1044C4528C
F5C10F7EF0473FFA1156818DE043C771F0A74283F3997F1E755D9C0311587744
CF1A61AB33C7776C315A02A461DCC3886CC6368B172F1E1C1CC4EBBA767EC7F4
082534DBBA75EBF9E79F8F11B93B6800ECD21EF0040BC14CD033C80200423C01
B40176B6E41A8190131313D87142000F095BFCA40F89DB3CD77A88B858FE0994
FBC8473EF2C0030F601442ACB7B7975D0163D1833FFB41334E8020E2409C0F77
EAB0C30E7BE6996788B1C43742896DF01DAFE3217673F7EEDD18176B242A7239
A44E5826668EB7D0092189D7F1135A1E7FFCF1BFF8C52F9E7FFE790C8177D127
09C5FEF0165DA10DFE45E71C88E0E5F2F12ECF3BBAC25E5C77DD75F8BECF7E88
541C85070A2FA2434563CE017FE23BB789AB30E6631E07C629C20A89C4A4F8F8
971B06D08F8D8D1164244FE13DD30EB10CB4C73C3EF4A10FDD79E79D3836EF7B
DFFB7EF0831F809AA331E9859209D2381C1EFC4B62C1DD65CFC0216C1E511047
115060E758037AC373B4212831731E338C8B6EB1046027DEC5AF8011CFEAC0C0
00DE226564637C416F981280B87CF9F2175F7C91209BC309385BFC4B228EF6A4
E36122AE6D785C312EFEC44F071E78201EEED8B10343006940A18E39E6986F7F
FBDBD8AA399C80679E678C98AA4C05BD01C50179C01F4F48AF89C1447D3C7CDD
EB5E0714C77256AE5C09D4C492D11E10036CD1214E4E983110E1F0840C069351
020738E05F34E3FC490230134C0CDB71D249278183BEF7BDEF7DF0C107959787
49FF1CC182BB4CE285B961A7B01C7C476F6F7BDBDB1E7EF8612588982D1B808C
E20BD685EF001A0F981E8FFD514CA2019016AFA3FFFBEFBF1F709E33BDA54B97
822451BCE034D01BBE285A921E11FE9C15F18158AD670C5FD6AC59F3777FF777
DFF9CE7740FD716400227085B56BD7DE76DB6DD814BC454A819F80754F3FFD34
90101D02DA980370003F81306114B22E4C9ED8B84F4E8077092525D39C64987B
6197714030DC73CF3D77EAA9A75E7FFDF56F7CE31B21B5E8C9D2A561624A4D30
07E221E1C0556BB7A441847C98872D5BB60CD3566E0AAC00B7BBF7DE7BD192B0
C58BC01F9E65EC9D028DF3241DC764889F60A8679E79E6C5175FCC51C28B0AE3
8F3EC7EBE8937B8781F01645133C21326392447215A17872219262742C1F6787
B48E8B22E7461B1E28C010B322C52486A319491F7AC6CC791C301FCC1FE36269
2035687FCE39E75C7AE9A5389B6849CAA93C35CCADE7EFAF724A4C03E8F18E77
BCE3273FF909C40E0CC16592ABF1BC2C203128CFD3A189C09824A64D91489FAB
50BE0F4E103E3394CD29A743C40001C513808020C34F1852E97578C348CE4838
7898B10C504330498A5A64DD121218B961688FE7E896B848FC03E8F913350000
5D052E0ECDC5903D60FB89A97C573758DAD23A9FA325C7529104F80424807C7A
E2892762CB81E573B416ED81A7050BC78B040E1EEAD1DA2727E0886436A429D0
B1705CD120AC07E8774A103CF9041499D9DFFCCDDF40E4E791A0CAC59F00310C
0138EB7A417A868787A9AC60E3C8EDB04CA21A27CC9EC94238163486B3CF3E1B
DDB2B112418A021212A5C95AB01C6E9F6A033A6DC58A39479A3A9C1E302E1CF3
4757243A6C09D2F0AE77BDEBBBDFFD2E87C35E8360E17491A02C701278CE495B
F554E064023EF815A0C013C53A6CA24AD961F88767AE5B8F1749E61433F55CA8
AEA08A88F236EE08F68EF8F6D6B7BEF557BFFA9512A039E2FC02EBA210805700
28526DE564AA1CF0432114C0C45B541CC99038130010DF5531A284A478C8F928
F5C17248C7EBB31F6211B666E7CE9D9FFBDCE7C0F0B81D175E7821F44BC001BF
A2438002EFE23471379510530B64574AA055100EEB5BBA41DC1DB228BC8E6638
9B18480F386514920BB2072E84FBA2947DD1A245E001E807CF6939A03640798E
1B817F2988E02DBE8B290138E8013FA125A04AB583B88D5F79D6C27C0ECB6763
1E4C9E0B15C0F7B7BF2A27B1074ABDCA7A95A6870D03FBC313EE9A3BFBC11780
94E414107BC31BDEF09BDFFC0688411CD6E3B65F4EA08A921E6F60215AE2FD2D
5BB69C7BEEB96CC99D53D084F198E492E84E0A422E4DA263B63FA405841A3640
993C255C5A36283850542789E702C8068E3AEAA8FBEEBB8F622CDF225A508622
EEAA984F4313CF03814B7A77DA69A7018FF93A9A4166874A88C69C3657C789C9
AC7588E26A5850C2874A19413ADF3A04FC23D1C41061394EA1A7D0507E13D609
F085E41EA3FFE55FFEE50F7FF84325D35826E643FA4B8188A225E826A921190F
8FB7AA11980CF6859091B6DCA7F640341B191909D33B7ED4CEA07C42F9105935
899D2E212C588419A40293980AE050A653C8108C981E280EFE3CE8A083204310
A9A8A0EC4FCB264791B666837F713EB904B2049C5852521E27C596F0AE29330E
7FC1EB7857ED1BF84E2306351BF257FCF99AD7BCE6D7BFFEB5B485564C18B21E
6810608BBD035939F2C8231F7AE821A80E383EE801F0C41C680AC3C416D00988
66619D403FA4929CC9FC7775D7544AA04E404B11D645EE15D67E14261B376EBC
E0820B489ED03F760A10A0DC060403B6A0254833640E7EA1E513679656232A22
1489301CE91A3711CBE77004294546BC48DC50794BF91CD9301AE87288CC611B
143EFCCE9345E11D0351E3E101A784C40E29AAAA4D090F69E409A32B96BC6EDD
BA8B2EBA886C181F2295B415C4E4EC07320A968F3F81CFB46A704A1435303419
C6FE28F8D1471FFDAD6F7D0B13C61E0137F890CC8CD0C04FA4C3181AFF12C9E7
7FC0F074FEF87EF8E187031B0125122E6C04E0433D8688246D81DEA0599020C3
D66260D20B6046D84AC5CD232C28C7E93901A0B1311800239133D3B8B1BF35EF
EFA3D450E54A9935F029E525E9A1F042018D74471185425F98EE68CF7A6054CF
529B38570138F0750C47B98FAC8B3C13DB03D0D35A475EC2C65835DAA001A9BC
D2B8F99C4027031512A4FCFBDFFF3E700ED48D5B129649C3566015045430C717
EC14A081F3008CE131D013CEA1B18FD83E72566EB69ABC6FB9E596534E390518
46E309CD6894D07954F02FDEBAECB2CB366CD8A02A140F30F101F30793A00444
5180679E82ED3E655B95EFB8A1E4F494B0A8117374AE022BA2C4407AA7EC1CF3
4433E027CFF3023211E6061029CC21B87CF39BDF042DC679BEE69A6B48AF4F3A
E9249C90C71E7B4C95DAF0AE2915D01DC42BE816EB8588C06E7926F99C4A003F
58055E5736A9544937827E1DE2F31C1B882CA813CC51F68957FA902F526200D0
3037F0A4279F7C52E51E502B1A9A89AB2452EADE503C24A6A9FC81E76803D219
6651EC533D55EA0653919C4A094F10BD3B2A7D135155B22402A31976075C47DA
A62A328CF99CE0F4D34F872282E79C36AD5ED44D95A92B0F80EE0222C8D7D5B9
0899EFFCF3CF0722A9F95E42FC5E669569AC051DF2F8AB5DE575AF7B1DC426BC
42EE428240FABE75EBD6F5EBD753F3C3736C2E66459EC473CDB52C4015B13A9C
4AB013C0109DEFDDBB57E9158F03B94298DAEC0F4F0025F02A2C01F3E469C5BB
F88EDE4E38E184AF7FFDEB801259F521871CB27DFB76FA6C5A671263ABE30B7F
8293ECD8B14366D573CC00C35364A078A89C196F6198175E78819BC78D516BF5
025CEB95720269B35685C2EAD5AB9F79E619695B2AB012CC0AE72A6C109CCF09
14E7E64C4CC9A83DFBA1E54465616A12442F40507D80BAEAB084CB79EED33A04
9287774932484039131A8E75EDCAA5D5424D3AA2BC010DB8BBD2B6FFA8B74DB5
C8B02F94BFAAA5E2F6DB6F877443370325711E06FADF788C57AE5C09491C2F62
81C4C8B0D0A474108DC94D756EAADCCC315EABF54F66C5283D5ABA3ABEAB9E5E
B6848485C68A991FF8C0077EF4A31FF170F20CEF0F8BD039E56BAC880C1E10A0
71E0EAD90FE68CCE0143AA7D73AC43737CB3EC16BFD2E8846E290F624369C3C5
1098219D19F889DB8AC61C1A2F6274104ABCA23637FE24B3D23AFEE5131A64F6
A7EB287556C2416CA1FE37C73AA4744D719B543B6C16E7F139EEB8E3FEE77FFE
E7E9A79FA6B41B96C4C9096856C2A248A778881830C2F34824E1795163322806
404109923D70686A092AB9530027BA52ADA4C2A726C7F9D6212C04A2034D58C4
1374A586787586D398C9C3CB3DD5F0133DFE615BB132544509BA48293071F26A
96A422AB24857026559C6F46262F54A962CE4E85A9107D726C89B700581C310C
44F8A8B18BD478613F9982426D954436EE3B250309D9F05F326630EA063F9330
AD5AB5EAA9A79EE2C909C34BF939BE63721C80363534C04F7805F3A6556701FD
FD957202DA882824860510F2037C07700129F5C5E936CFE104DC4E7509A0439E
6D501915F9C30229361E4FA8872A6439347829DE020480CAB4A248DBF7A206DC
F97E0269DB49814F071C7000E40B5052503A7D5DAD4312B2AEA84B879059B66C
D9AE5DBBA8D0C9AC3C422B99B4637BE8BDA04446C90BF3C4A2F090E8ABCAB532
332019A10ABE427E409B26DB2832A92514432F59B2E4E31FFFF895575E49A555
2DA7CAC6E658395427E02E9080A213AC852109A4111C941A864E00ABD8B66D1B
64465A1E6846D89F9C81AD446F73027E3873808E123DA566F48685031908F330
BE110FC39E83F047C51D4539527FD5A4156294B6A8B9629934F133B04D0DB8A4
65739067FE673E5994767C81A882DF6E401D97C61FAC9D7A2D6D14F897C48B54
4CA74ACC991395C4810E3AE820B00A5D2F8DF5738297A8A9D39F47030EC90D26
F0E637BFF957BFFA954A601A1B86A18F39E6989B6FBE995C16DD0220444EDA84
F7893F1865CD9A3550A6C933D4A31B769E93D5D1B32AED701A0C87E553520E63
32E40F5A63742DA06378F7BFFEEBBF783418938257F0E7F2E5CBD1C3A9A79EBA
79F36634A34F586DADD8596ABA1AFD41273FB67B4E34DDFE283895187488D38A
C34868A8C848F703158E053CCF24CBDC65CA0A34D1E35D9E7775DCAA4CD0022E
E453323D200404250025ACAA1310CAFA68A9E431C0171E89152B566063C2B3A1
70F7BF651DA2564B54C3BFDCBFB56BD76ED8B041B1194BC0D6AA2CB04F4E10F6
0B291E93C252E8660C2B1E62459FFCE427F1F0AEBBEEDAB3670F40445F05F95F
F80CA8F005D0D11827FB8922D55826251F1AF3A33A41D8E91A264F61AB85CA26
EAD550F99A561A2E21ACEDAA3D545572D21D7A4D20DB628BD5928E7952BD63D0
ADF6C33EE7780E48D4F85DBD1A0A99605E20AC848C783854EF7FFFFBEFBDF75E
B4574D6B8E990B2BC5771E5AAE97409B1F5B12DE6BF2091A15F1E49E7BEEF9D4
A73E4509400342A4CD11C3CE79E504EAA7E159A0C9853494FD84A3696901C727
AC742A33A342C3B1D42683F95F73CD351B376E5457ADE2E102275C2DF8AA83CE
4195397E26BA1F748DCAC0F8D16851EA7073BCD6BA6BFA9606F56A20294D1074
BDA89B477559B4017A00B54E38E1846F7CE31B009A46FD61AA0008B08B7C0802
01B48A700481C61104F3A248C16EC1306834A618A45C5F51825874C515578044
704768BBA615945E0DAE114BA09156A5076E2235091E10D595A9C16032D853F0
8070708784E424EEF81CDB8346972E6CD5D1F010B57F48C8B4A8BA7EF8DCCDF9
F00C127A00B22AA9340FD2A687876192485B880151EBAAABAED28EB05B679F7D
36381E04A8E79E7B8E411D8CC0C1D8CA120041AC4AF9366084B1B1431AB41E16
CFFF4C4E402323F5FDB0D90133BFE38E3B3022F91BC837E6093D668EEF5A42B1
1F61C204960EDAAD4181C0516A0C18823294AA631ADD817FDFF296B73CFAE8A3
D75F7FFDE9A79F4ECCD0E34DAB289A71866A97A4DAC42DC177004DC3B129A4A8
3D81984AFC53AA8D7ED03E6C28449F1ABD4393345D0214B5A46D7D92B63EC84E
48161966CE758503BDC2279F448443681433E91A46E4CE129F002B0001CC326C
22E32B4A88F99027814FAEBEFA6A3A21E948BFECB2CBCE3BEF3C028DE11F0C75
55873C0499A38E3A0A3C03AF533298233086A986E237F608E2022740E2AB944E
7D4E6132AAFED2818101DAC488F9848FBAD0341D045F48DC29A9B071D8A7C58C
0D7A5FB8950A1C1D51631F54329076D43FD9834A3FD42A28EEF050A87D4CC3DB
C902296A7CEC631FFBDEF7BE879680D5D2A54B3FFFF9CF6FDDBA95269DB0E2A5
B1E74AF4C3B100611F2CD921BFAB4750E6C5BCEDCF12400AA5364C5267D213BC
4219140FE9B6A1A1292CD390678028A119E9A3068C92E1A967957C050DCE3CF3
CCDB6EBB0DCB01BB05FE53D8553197890500C81C031A35D470CA05CF11A57E0D
BB22A81790F4B95E4CFBC8238FFCD77FFD57FC497FD8FEAC436A1442B774C5AB
456B9FEDB98FB4AC42D0F9977FF9174AFDDC44E55E61F11708096DE6861B6E60
581169949A075AC3D06BA76E00705D7A9FD5C6A7FC8D2D95D6A0EB9B6EBAE98C
33CEA014A9E44F9D54FF2B9C8084490DE898037815944A68FAC40F2C1B8D39AE
0656EECF634CE860B1AB57AF1E1919A1D84BF54D8D0678171A315AEEDCB913BF
2A55C2AFB4D091AE910A2BE5C2BFC40F1A8548CDF5D4E115025DD33DE8FF94B6
C9E8A31FFD28B693867BC8CB20AF5471D00310FAACB3CED2D41B66C1BCF6B5AF
C5F9F9E0073F78E28927B25B9A65F116F608871FAB231E87D3EBE861631A9DA2
2CD90F26C9FC0CEEF5AA55ABE8049AA35EA876C89DC204FEF33FFF136CF89967
9E9993F477E8A1870280B41662816F7AD39B7EFBDBDFE257BA37D44A80E30DFE
AD245E774163CFD046A3BF487198D1A6CA87BAD383D9A06C100260265EA462AA
BB8F49429423F9C3704466F5618445C270FE145569B461203639D9C5175FCCBC
10CC0A8DE991A3D0A73482832A3551168E06B7DE7AEB71C71DC79F56AE5C094C
A6394E234D756BD4898221D012741073662C23E9F29C6402601D70039BAB640E
9491BB83434DDA8439D081216DD5767EE85158A465D4104F227AC304683FFCDF
E204C0D5356BD660868003E7A3AADB9BDFFC663CA7AC4DCB06C6A58E4E158DA6
3FAC178D8148C05E50DE7FFBB77FC32B684FB30F71523D195FFBDAD78E3EFA68
42AFBFBF1F9301366262A07B20A9D85C9E6ECE44D92D75682200DEA29509AF90
1ECEFF5026C05BA024DBB76F57B56C7F564DE2F99CA00045C27D524B0D8252B3
A49AF82464CA030EA8F44917310E1A094B381AD5E0E92205C10600768C93C59F
38360C10643E024D60127286A83519C887A56EDAB40992320F181057B348FE4C
4E0092F7F8E38F63F618859E525A9F88AC7848675D1888B21F3F01A91E57A152
5E3870281C5DC713CEF83335F22829246D626E1E45549D001E9221D1A0C4734B
EA40E2AE065385AAFA4BE9B0A1124667B81ADF40F7711218BD4A34851E8AE951
E3A3E989EB65749DD24DEC0810059054DF8F92F2F9F93B61BEABC405FF6274C6
9BFEEDDFFEED4F7FFA5369273450D79EE3ACA318A2B113A40224A9340BF060D0
A38B5DC017B4E47A29BC90472A31A5D18F01F21476C2FC896786560E0656317C
000DB0763606707854745673082E519A4700B409FFD213ABF17254AE2FBDF4D2
4B2EB944CF85B2254DD7A4827FC41147FCFEF7BFD78077EE26B7064FE8BCA565
9979C5948B71E29873134E7824CFA6ED1818A2818944360608E9CE6AAE8CC6AE
E0988063EDD8B183C6194D619550580B236D643FF1A614CF4952DFF9CE773EF5
D4530BE4C1FC899C802A94F60CB0335789C79316766A21E1AC497E8006DC68B5
E85236E7290EC70BA1A59A7AC823F58CD09C3B67B6A4A4A4D7D47101490A49A0
3CD83BBC4EFBD81C3FCDFC0FB7296CB223FE2F0C1FE003E374D575B43F1D0288
8D4DFFC31FFE40440A879F802332E4878E7DAA95EA56E149D1D4EB3F72024D30
53D70149218DB614E8F49C2BF9E0D9537799AE90D487E8FBBFA5135C71C51510
C10820CCE49E7BEEF9C4273E41E4507CA5BA1A8EB3DEA74E206D01597383C91B
888E6A1D56C6A088CBF6C66C96166D358C9EC69418114156F49EF7BCE717BFF8
C505175CB061C306325E0DD8A00187A80F717BD7AE5DE1BC415A90989273EFBD
F71E73CC31F8F3E0830F7EF6D967C3145991189D28AD544192280B8E82D7C195
E90E254C34B88B6B51873FA9677817D09E59A9FC53CDE2F3EDD74C4C63CC89CC
4AD36472E1E042B0319054AAB1345FE095B02ECFEC714A5BEA60C7779086134E
38E1C61B6FE441C29F20826A75D1D7C30749457B35A3E1E8423F50BCE749C6AF
1415E9F4E2461BA15C62A237D158A33E5486C517BAD6D927890B78030B005074
00E5D5701A526A99573C80441C9BF5D0430FA97801290F9BFEF0C30F333F566D
65DC262A07CCCEC5582416AC7142295B662308D4814464E3FC3131DA09C3052A
78DC780428C052365746ABBB4F1908DD82FA60ED6AD47E759C200C4F752CB187
70DC47D83CCB66E0D0C016061A314286984C898A749CAFD368A1FA99DA51F11C
2FBEF5AD6FFDD9CF7E46EB1C8F033754655C4D7757231836FA5DEF7AD7D34F3F
CD8A3B980375B805647665A2CC96A034B3B03509D3C391A126BDB0F549AD7CCC
53416365729C39261CAEB962CC26FA013915AA4AE85E9A4098E290DCA88A3187
0A845566CA2F5A2846CD02612B1B3192C841A344B8A007252C1D856D888EB441
2B19529314D90FD64C659CCE2EA39D9B170EDE92B6B158753A8C8B4149B6346F
995C94A9255AFC20EC7333F6551F89DBF099CF7CE6E69B6F56FFA71E6609A5F2
127DD103C005CD1773608004FBA7399870C3BB201FC072124D8DF62324F113DE
A2AEA01BC1883A2AD11C5A836B0F38E00008058027D90350043A2FA82ACB1085
C97A9813686C06DE2281534C007020AB0E0E0EE2C9673FFBD9AF7FFDEB980FA5
481C4E5A63C2F1451A8BC5851038383F982DCDA0546E98484894603417B9DD1C
E71B2838FE5CB76EDDB66DDB8036147ED5972E2FF70349DBE2C165B22B86B260
2D60D2102C1844A4E98D0C3754F5E8F0C30F870E2A21791CA0C671021212ED31
10738BE85D0FC756A9BA76C30D377CF9CB5F663F9809964CAE4C3E47C6AF5202
16889FE84D25E70893300DBA07904920B85846AA7CEA539FFAF6B7BF8D33128E
AB0E47045177E18632A42408E53F868B44A1CD61871D063153B579C56ACC4759
BEB42D727F0E2750C76CD0CE75A7662F6D15904496CC98248FC49D6962AAE553
70C476D08DFCDEF7BEF7C73FFE31FE5473B722A4CC464FCAAC364FA11BA80B15
E781071E00E4D542AED2A45A2F31E7709935761EB4AB9C2D40D9C9068C7665B6
85AD431A17035E8B731A06DA3EDB9F74D2499018A09C91C6D2324C6D895E2B72
7D02211CF8A0A14DE154D6D658241FEA29251B2445A020CC180386900217D129
B0DF68A7BD3148430BC230E58AC71B9C8767FEAEBBEE827CC75788D980267ED5
58913909FAB7DC72CB69A79D8699003AE4752043D0CE5481A542BD3F4EA095AD
146B813D5AD74563F65595518AA0A13BD29631C37E48D25FDA82F127CFCC1C1B
0B28173012844683A96EBFFD76904E8C0B8CC41CE84E00404E3DF554E6A99276
68A6FB71C71D8757743EF44DA936007802BCCAFC9554A9A18C6B04CCD574A8D9
FFE8FCFEFBEFFFE8473FAAA53834BB5BD18EBC8781CC2CDAA1353FE6CB3E4C9B
640325FA5A990E5D61698CB20D677E526157FA8281343D82479D3883570E3DF4
D0279E7882150B0007025C42D9FCEAF1D60DC29F37DD741300CEA375ECB1C702
97D095D67BA0B4AE194012721D318E16FFFEC33FFCC3830F3E4834E629E261D6
2835F5BD4B5B27F8ABBFFAAB5FFEF2973C8DD4F1C947094CD5C61497C8A43101
06136BD674309BD14A3B09115569B15A54284330A28F522D453CEA2B6A4BD180
D170A4A026AF84B343B4F2230685520256C7BA787A4C9478612C2A9A0CBDFDF3
394138965FAB8771DAFA9306EFE30988384E160520B5D5007F202E68581DA398
C8FB49407860D18039C00C8FC416A01312130D9D521133BC5FD0E0DFF4A6377D
E31BDFD0787AEA0484D8FE6278A41D184A66C6E92DA0433024474231054A8216
6EAFA8ABFE39AC1AF4136B042501CD61A22517A5A9A01AB3FE47EB90B4CDCA12
CAE7562B18ED5C5473F0A1B010564595A131569A33D3105D1E5A0DB460F043B8
04A3F26AE6E9A83E1B96D1C2E0A0ED9E6C99E6E6F99C40428626EAC8CC55A136
A05224D992AE224CF4C3E3CEE7041421292CD0AAA0413B120AF9A2A087451186
543E34FA0DF88D7789E2000BABA24262DDB46913378229AC9ACCC2904A15D680
FDE804AF9C75D6595FFAD297D424A2C539280CF2C013C53996F29E305419100C
68609250932FBBECB28B2EBA88F9657A66884346BB842A8D03745A68314E0099
29876A13072DFEEA57BF8ACD2241A46380B51BD9217AC0138D32A07352CBAD48
283496A056149D7F36A82769603EB7150BE7705A76866792D23D73AD955C12EB
68E2A7F8ACF52464D698B37DFB76DAD90104BC1E2E81154EF60E8BD28C47D0F0
210A6EDC2930AD4F7FFAD3E80ACF7162B5768BDA2DB9AE39A61240126B79E185
1754F3A6558A61EF124AC6D443C428A630DCB473EAD94C5C97504E4C5871A477
9A4A9E024AA3F85E1D2708D7B3E32E0037B4E81069162B6062B114E13128F442
B076BAEE805D58324B526AFA15BBA5579CA7921636EC8846D3E1096928F500B2
4C5A20D5FDCB25935BE33BE65098FD68594C365B40C6D7CC0C2ABBEA1D5C208A
9460E1A6F09505AC431AFB4ED954130548D0E8AAA438A279607842DD3D2C04FC
91CC5222A3258BDE2DEA14322BF5A80D9ACF0174B4E4C6E8AE6BBF9C073D7BDC
75DA2EB8DF803BD09DF4541938260722A2D95E684F873879BB395B6F8EDA035E
819008A99076520A26FBB30E69E548A65931438FAC88966235B2AB5B264CF195
31ECD33A64B6EB38324883915B3CF05A1F915E448C4E8A43CECA23A705F27850
89C11A2CCF0E553CE74610D43C0C8CE6D2792AABD6480C094559F088028FB1C5
94B9C2F1308A526A2CA6F08E3F4937D580A3353259908BFBC258263F545A4ADA
128D8A66EC478D452A37E0DF638E3906320B8F160D1D9A7FA7D84885403512D5
1D29DB4A3BB199DD924930FE5251FCBAEBAEFBC217BE40AE46BF3AF19901E67A
DECC509910450F8D62E29CD7AE5DBB65CB16260C87C3C0A46D73E769D7BDD3FC
1D4C0C4F88AEB455AA84443A2E21678F84C47055C7D5AA4945219C304C983329
8F08C0D3C730303DA43C719AD640F1C80F7DF004DB4403AF320C129A7030BBDA
DFFF9C28D23027A040A6653054D8DABC7933A08DD9A267487EC03AB63CE59453
20FA70149E6E3D509A1EAB761B8DD839F9E493EFBBEF3E865768A014319F0667
8D8C20DDE32455750B4B78B431508839E9A493AEBFFEFA7DAE57ADD35A8A8E14
D958B09A08ADFF5A5E93C1C1FB8367D02EC0AC6673068B53475737BBD6EAD7F5
4A5BCA97700565991519687F544E1884CAB207A182911C4FDA128AC69E73F62C
7DCCC07F4E519377488235F1841E794AC1575C7105DEC21AA097B0064078C16A
4FD4A240E1749205FC04E10F74702D17A3529EC69E52A30F1B85D892A4619F7E
021636D1AA871AD21731FD9813142A92F52529C650362285A6649C48BE9E96F8
8CF8B1DE5CAD346954DD982155F414B196D95273ED92E754C417A72E49533CDF
F10CB7DE0C2C1393905822E28B5F2C5886340319B0CD21D397BA9DE8E936C621
8107271EF3D1FFBCED2BBB4CB1572EF6770E66A35DC55857A3F86CC2EB89644A
956235969232082988068EBF6B74381D664326FD49E829B144776D720214A689
C9C7A5E94A0CF301EE79CEE141E6F1E4744F3D6A38F658B5B8C44F3A99EE1D85
B1742A6A35CBE59A6B6662D55A33EDC4E9F809DBE5C88A5481500F10156462A4
1EC5F9F91F7FCA678EC6167E480B2F704CCB8E86836DC2BCDF08DDAE212F8F2C
304297409060D1F64AD68E061FFCE0071F7EF861F40C14D26C89B0B7FC258E12
4B5BF562C72107379F1935AC7CB2297B8D9C199D0EEA01A62856B45928753976
B10E9C485D70EB1DD79D748A1573CBB54AEB6862CB3CB182A82941241BABBAC5
583599127B02A8644A3C906A546235A925B391723EEB2F2BBA533D2B4B432399
64D5342215CBB3EAD2A8661A529554B4B354AE9839C3AFD6CC6AB62F97284C0D
D7121D09AB56C6934632E23419E4AA7AD2DD77DF0DB26BD6BCA634DC25B6541B
D624B88E31D3085276C62F152A209B5133DE104CB627021CAE57FA53D19152B7
DD3DD998AE473D0924E2C53C3F9074F380626E5CF245C976487D265B5859B227
BD642131D353E96CC652D3F5B2D80DC3722395BA8363215288193D8D8E697FBA
D92552320E6CBE66B2F962C92E980DB3DEE7CB684F87E535BC99B2E948AC7ACF
B93FF8CCA5EF77C04393F189C64CBA2B5D1CAE1956D4C4396CD63CE3E05861BB
8343E4F478F57120A86BA4D3B144A90AC1B4191812B552D8F9BA0B98FBD9406A
5913728B5173B2D22C61276D096A76421A95FEA4CC94A58EE9594B92A9F1D24C
2521DD157322D12D6E336B940A4DD731CCA82F55C35F12C48625525B55965179
F8A6FFF9EB933EE126765905A7E99B3D7DC9F1A9092306E049BD2091C0C67A41
9E5B701E681D796B14C290143C890631716B5DD2012A5312BF2AA69595467106
00803C72FEF9E75F78E1858C395497EDFE387130AF5AB55A65A1D3B7CEAF1AD4
82D94B2D2862D0C2A0745CDA85187906DEF9CE77BEE10D6FB8F3CE3BC9B195C3
D311077CFACE77BEF3810F7C80821B43A1C142316334C3D84C4D2465A72F345C
1887AE5D0D0B638E9286F1A2313D13941FF7C909C2466D5A48C06CA05732928F
D23A992D7969B86E9D92242534FBF313287094596A29E639744AE3A03010341E
C6B0B3AA256D38321B40A991A061270F87A60849FD80E2A1722FBD9183FDD39A
8CEF5FFEF2978F3BEE38B578A8CF1648C3902779B92F647F08F4BFFE51E22B6D
C104DBCAD4CD573187F99C400BF86804E79CDCB1B0F9D59C571F4943E9E8C865
50B584CCF4AC8B008C3DE288237EFDEB5FA3DBD7BEF6B5BFFBDDEFA42D1E6986
209941335F8F476A13B629AE23DD557342227657AA3E399D92AC99F20B959AE5
37B0B10959564B77958DDF0AF8703D1DB702F1CBD5663A3B5BF7D868F6D66383
D1D2A29EDED8B833E48EF5C456E76B6E4176A5C58C89ED431517AB0AB923263D
F19815ED18AE8F6425579EF19BD25CDC6F0F96A6C5950137E57724471BA3DB3E
BFE9DCBB6E92A961372DDD855CC96964B2715A54683C8420492776CE4C1B0765
DC17A63A9B9D652B594B4CF565AD922FF1C1F48C8CE7CDA2D8012414C7332392
A94A3938242ADBAB96644CCBF49A53D101A94E487F23392E55CFF0259D8B3467
BC6E5F06A5C35F51B0268C66C98E592D21CA08247021EB0804A058225DF18A20
7D20BA8DCEA4044D99313BCD62C14E24FA2A95DD09AFBF628CE0D7080427916E
3337B1B87CF9F11BEEBEE91B4393430D7722BEC4288D06AD71AD72A4D9E345C7
8DCEA5CDD1B8C45F306C2F519032DE0CFC5C671A1CCD6D0411CBC19E1B861BB8
E98811D4B1232EFE5F15A72A752B660D1C21CB9F6CFEB69936EB8DF285EBCEBC
E6B26D582FB852DAAF4E75744AB199F120ACE17C3A09B1AB781944C88FAFBF76
F3B7AEBB737AF7CC9414834C21559082C4318A13F1C1209B3E78A5196D390FAA
5D66A63C60FA7B0B3DD23329113F5E8A49B950F7E2E9A566AC562E8E432CB06A
1231D275FC271D93A9E2A1871EFAECB3CFAA8EB8F04D47F2F232C0ACBF843FE9
D03DEFBCF30C22AE56D025E924695EB366CD934F3EA9F6A270B16C5A09D858AB
BFA9104DC788AA8134E0AA9F9366E5D5AB57EFDDBB976AC46DB7DD76ECB1C786
27ADF6074825F8154B459FF8BE71E3469DB0BA7A649EC758EB88D11205360066
C0480F4DE3D63810B526A9A0BA4F12A99C201C80A4713E3AE29CC00C99D51834
5F49756AEAB37872EEB9E76EDBB68D8C2DDC27C3E3A872517F57EB0DFD3A7ACD
03357D4658D36EA6A000A305A8D1A716772303632897C68D98A14B725EA96CFE
2A68B75696F6DB3731295EBDA27EE6B7A701416B14D3B814F60CEB562AAE86DD
5146FB920C99556B40EB7FF9CB5F32905A0DA1CA5AC2BEDCF5EBD77FF18B5FE4
49C38B60B43820E8B9255A25ACA59DB1A1C14AA724269695641C804E67FC9A99
B4F3F95A20F6DBFFBFB7FDF3D11F3EE7CC2F9CFCA97FFEEADDF707870D14B60F
0F24FB1AC5BA6F59536E5E220D8949AFDB3F9619979219338C9AE54AD33C30F5
E672ED05D0ED4672B2D6D2F8414263ABEAFD7B2BBBCAF8B34364C6E9902EB1EA
33CDC90D175DB8E9B2CDE903EC99B1464F4A26861329C9C4FA4AD0456ACD2031
60559E7B4978A203F68FF185C988D4BD74538C885188055672D10176FCD9B117
242D465CA283D00B3AAC81E1F2B4F4640ECB8FFD01AC45AA4EB29989A7CC097F
7CEDA9673CF2FFFFD72F7EF37B5926B25BFAABBD19893CDB359598F43BE3CB46
1A2F78DDD8369149893725E544673CB761D9625846B5DA93EB2C4C61908EA2B9
C78B37023CEECB65B64FE5B232EA9B95A60F91270166919449F48089E49DB4D7
510F0A8DA46B3703CFF5932B22EE68F475FE5F3E557BA4D052B21CE99D909217
AB98B55E1F627636966C949A600562465A1BDB841C2E3DAE4CA42389B2E7A6A4
E148CF38F021339E9BC140D69EF8E2AEC376947E0D9D2C133DB0967FDE87A61E
11A7691AE2D772401147EA8144DD485E924BB2F5BDE5A4341BDDE2A5C4DF25AF
E9ECFB75AA24C3E5CE48D6ADD79A62D6B19149C30722CD9219C0399D4D0F8103
556CA7D100DC7351ABB2A8093E2E4559E20D344BD022662A69DF28BDA4FE2E5D
BA14F23743FFFDFD5730D4E724C8200820BF90DD2988934E1ABC1592F638D00B
72053C7CC73BDEF1C31FFE50DAB5EB689632DB17D728D9D24AB0D2362C6A3952
1A64692B00ED03C93BEBACB334C5236CF5D6501635866A346EF8F61246B3A96F
677FD6A13962B55A7EC3C6A57BEFBDF77BDFFB1E8E3AF51812719A118C500109
735FB76CD2DC1CCEC0D2EA9574A53235064FC06CAFBDF65AC2443D0A5BB76E7D
E491477EF4A31FEDD9B3472F075516A2DC9BB6667268D2263AF6B55998147244
8DC5661B2D0ACF15D18877E69967624A50DA1E7EF8619C793057B0494D23F2DB
F743309E988672AA11ACB103FE440BB8D5BE428EBE38CDF020A15CB812AD8618
D152CFB80E2DCBFE27720279B9358F30A4B604A8E20B83DF35754B297E980170
DFF527ED13C06730AEB4EDF57CC8486DBC0E38E03BAB36319D0D2B0219FDF8C7
3F0E3C276EB474F68823F9F1C4AC2FA3719115ED8C9427CD81B43D6C14560CF7
4EDF3216B852582ABDA7BE7E2CF2B4D46BD99D3DF95F8ECBB392F093A64417AF
5EB2FDB9274077E49296B1A863E680786474B8A39C76D2C77927DF7FFED609BB
299B9C6439E7948B53B7966E3FEDC79FFDDA916B26DC7C23180241956A2C2325
373EE0AE9A8A3E595F276F08DEB86BE363FED255F69E9171701867D2DEB428BA
7DAAF72703640000886E28165888BB7D13D6E89252EE14A82CA9E7B60C4B2D65
C74A8D462A766E29488A3162D8122FDEEE0D340E1BB67FF3BAF8B2DF15C631EE
6BDEB0F4774F8E25DDBEB2B15B36486A775FE907A391A14C446AEE79E9682A70
6B15C9D40E9E7C63636F7DF0E73BBCC18ACD1D114B8C683951C995531989EFEA
1DEFF878DFCCDDA38E97EAFA6434B624B7C31897CEDC929DE6DE3B5E10CF929A
6D899993BAB964E5C4DEE79CB494EB0EC695D450F9E4A6D99DEDFFEFFEC9FFD9
EE4C48212ECEF1E26533CD44A1FFA9E523FFF122C86BDCB3A3E964BE9C0702B5
D4925B25BE1BBCAC658EB1D356A3B6B8EBBEC9C95D2589755AA74D277AC51FB4
3B533D7BBE54E9292C1B8F3E6EBB56031C2A11E4BB9BDE07B28D4E438C19C9CE
5AB82662A95B539DD3B13D4BF75A1F88663B0F998C8E267735CA3F9B963DADFD
B5CD78DECF4BB489A125692C6F74BD189D904FCBE24876F08E821453B144D137
CCCE4F2C99EE9F854BBD5AB9633C3A9973ECA411CFE3ECE000FEF55FFFF5430F
3D047E0062B2406C1209AC962BA61C130E313024E40C7969EF0B0588EDCC77E5
F967D6DF2B951659F486EE97A09D77864308BAC38230CC2A7AF7BBDFFDC4134F
300E8C33A3B986BE04AAA8E41C1A1BCE1C1999AD1DC4E872A80BB7DC728B84BC
6DE4490C8F0B57C453283089038C91975DD04F452212CC56FCE05BFC69CED5A0
18EE9E7BEE21D0B5FA42F86A21752A86D37AF5215DA64A2BFDD03D0461CAAE8A
91D6F835DBD7D1842559EA108CDFD592DA7A3F0617C54C6C7C487049B6A86DC8
AC78CB7803BA0AC3691CE12AE5122A03CE00470D0CC3D0EC8181C8DC445D4E98
6AD3A7A2AE05CE96D178AF542750B22EA1C482700C06F39FFD79F5F8E839D054
B2FD71027979A299067186432F7870A07B811FA8BCA22A608BA7C6D3B5F2CC5F
BCE64D8F3CF9A85CDA1BAF46AA5F1E060112EF20A739BAB4BFF97CAC22EF8654
D92FF70FF694D64C5FF7BCF38455F97ED5DE1BEDEAEC1F2D8FFB8D7AAE33979E
2936FD5E5722E39DBB126BC52CF6946E1EEF5ADD3FF9DE99BE20327E7FD93F01
4B5ED47D51A19CC8576BE672BFCB3830D8353C6694CDD71EF8F6C707FF7BD1F1
2B677AF3956BA6E25E975B9DEC5E911CF5CB2B8E5AB12BB54BE23139AFA65759
85D341B2F1AEE960BCFB8CFE89DA887C53A46558B63B631DC1E76AA5CEA2F525
698C8977A5634C44E3DBFC4AA4BCA2D6BF2B3202E5A3B7B97C626F3D9F1C5AFE
E955F9BE42FC8A48B338DA94C8B453974B6549A967EFB6F1545D4A19F407F525
6E058E2FAEEF5662A08A004F7279B1FCA29716E72CA903A16E4A5AC391CCA5F5
A972FD24EF1D777CEDBF3B8EEEEF49F73F77EDEF5EDF58F1DB8E89659389D1E4
581D4C246FC6A5B7121FE93A7A917188E99D37BD78F91B9E1CFB458BD49D17B1
7391F8B9AED1B93C73B2B5E7AB2FC85E711A56B6B373AC308E06A948B2591F58
2CC61E998ABEBD226F4A960AA6FC684CCAB2EC0B8B775706E5869689A6B92962
E693C6964A7C99592ABA52347B9A96274625B6D8A93929294F3AF9DAD9E5C54E
EFE0D5439DAB96953F30DEA8F9C177FD96D7F04289FF215AFD46DD2ED98E952A
7945315A1C2869A74BD6CC92F3564C44A66B37E60582AE9D88D4BCCC66A339E3
176F74635559F6E1D80BCFD79C1D894AC38DF82F098BCC4322B908972A99CF09
683555679EDE2A7FDF7DF79D78E2892F79CFC241F71AA1C11829A63C40200DC7
78FD291F2D4DA32608B35DAF9817390D0E0EB25A0EDD127C8BF457830EC3B7A4
E22DCD2367E02305F333CE3803DC2531FBA1159E9788CACBD31495FB6955262A
C214F4980148C224ED68F139CE64D5060E3FFCF0DFFFFEF76186C71803A35D28
86FE648AE461731656E1CF56BAD6DA0C5EE896C770EC20ADCC582366B86EDDBA
071F7C70FBF6ED3477CCE104B41A318180EE4A26876BBAC6EAD5ABB1EB5080D0
FF91471E096588C9FD0032FAC1B6EA25B71ADCA238B072E54A401233BFFBEEBB
BFF4A52FFDE637BF61215F66EA3326123B059184656D289B283D0DFB4BF82746
0C5F1A4515849FFD89330B73823959056A1BD48C3609E5F7D2FE49249CEF1F0A
5B87007CAC912167E4D6733C37D859F048F4FCE28B2F6A215596DF8078C1EB56
5AD18AA6186939FDC8B3BEF5B5DB46CFE95AD5C8ECFCEA508FA487AABB5B0681
66CB3692EC4E342A95AC6315C69AF56B243D122F7EA51A9D8A0411CB8B067EB9
999044C52CC9ACCDA7EF73D97AC2FDDBA17FFCC99D3F338EA94E2F2F74DE6AE5
F7F419CB07E553D2E8EE34AF9E5E3ED4B113F435318EF6CED0619DB243B63546
A4E99C290372D0EEEE3D816D3823D5DA06C9B9C6F468101C184D6E6AA1FDFCF4
DDE566FFE8590DBB2752B9A6D431D1EBDBA389B4353405E1D81ACD8EC4F2B15A
AC2C5BC5A9C4BC736A86A4FD78CE335E94A81C16FB5069E4A1174F9F91D788F3
3950732BD28C74F5AD1A8B3C2567D8FD93FD23370E1BB5E4AA2302BB9C1A7ABE
98F702893620F78A2731683F8DC5236F1C8CFC83E9593ECE6E738344EA8EB7D1
9578562E9C31E3B61F6F648F4DE7C5956BEBFD1E38540FD69B3AACA7F1682FD6
5BDA5C2D61EDA78A1F9106F89CEF66EA7EE13C1C5719582FC331B137C483479A
C95F471B7B5D0CE9614857527626D1E597871A75AB9E3B3E6176C746BE3E95D8
ED245BBEFBEEF1C4708FD75FEC1AA99D299D999CB9AE962F984D33C08FDD117F
C2A80AB85A79D62EF7291988C971071E7FE771DF0FA47F5C9ECFD8E5CE46AB97
3DD7CBB2F2A2DDDB8622E0A0408E886F476211D74C88E15FD831E38DCB756EB7
BB32929C2A55F315BF2FB8705A3C43BE5C074805F37F4EE4EE6CBAD255941D1A
BA46DAB270B537A5305A04FE7DEF7B1F94090619B682DAC3A17238A2575D7515
F803B3FEB46CD3FFD317B1C0D8D216CFF5C4325B325C588607297CA9024F1DD8
1D7ED2D263E79C73CEB5D75E8BD96EDEBCF9FCF3CFF7DA775E92EE53A834DB97
5D906180BDA107B007DE35C898C870A2B6DE03AC9448B30418FA829E19F7C29C
00DA6AC27E729D3663DD94E5AA9B5EAF11C693134E38E12B5FF90A3B619006B5
0D350DA91CAD99076057581AD3468C7649D4B0CD8A1F901E66C0133358C94E9D
ED0CA394D92A6C2323231AA9C6F43DE5F16C4F3287E5A0138C7BF1C5176FD9B2
85FD00DA0C4F24AD643566E6FEE05D167258B366CDD34F3F1D5E4BB8C20FBE33
9991AA0065F370DCE7ABF884F901FBA4B4A1F63D691BF7683133DAF7F486E726
2FF718CF8FDEA3304106C35B7A68AC3BE8A08340FA3FF6B18F7DED6B5F937619
225D4BC619281823CBFB578DEC7EBE7E798B12C9508B58F46F5F52FAC5D4E2D1
25D3C55A41BC9AE43B1335A3D29CBAC258337DC8D35B9F591CEF1F2C8E5C70D5
FAFFF8E6F79E79F49954EA50B33E34161D4D6EE82B8F4DF45EEB34824AE54B52
2FCAF2F5998A0CD4E3DB9DF3653C2EC605B238911B4FD8F5C268DFA295ABE36F
7DACF640E9F37E8BC25E62D580686E23C8CA9A697976D30AEF865DFDE71F3E31
F5C499D5B3EFBAEB2E9C38C8891A6F8AE373E2D613B7ECBC510A55790033CF44
A5D18A224AC49B56D52FC497C821439D3B329FF52183A04174A2C375AA7667BD
3161F6C911A3B1DFCA8696DD21774566CA2E08C46EAF2BB02765BD58BE34FD96
2294F9B913D925138FD62362BB7127709AE2D6A4D6B2FB1FB261D9B37B4683AC
23CD8271A338A5546D4B293D6A2CBB66912DB11DF242F292E8F0B2A89C5C3AA0
33B5A3D814BB267E3C5E5E74F15DFFBC7E7A93A4C43933D2B062D112B48D664E
AAFEE5C93199597DF1C098744C5DF3F492B12553F78C4587A325A91CF817073F
F3BB67224DDB8A79752FD3B2F09C9F312C3FD854926657261A91DC8C143AA594
2CD8BBB267C54B8DB27797A40B7DD520EF899F887A65C0D790645DCAD06836A5
92CF3A95FF33138C452586936FF764A5385338E9D833BED47343F29944E57B15
A768D78C06E87BC430ED9A5DCBD5E58C44C2082A5BAB66A92BDE04FA155A70DE
508D4F4BF3CA162A055F840863F89717D30D6FBA6D50D5C2100B5F1369B46BB1
A88715C7107BAD95230C25012CF61496AD98326ACCD6EB7815BEC4F94AB78E85
D9B05E26044926C8D15C406396D1BE61584BAB6B72FF4B5EB8593264CED6C166
9F9A378B55312896CE74D02CADE04F6F2A0D291499157C545F3432D56C57F73E
E080032089ABA0142EBF31A7F83BE8359A311B9653D23B81A955AC5AB58A154B
C036C2C9EB1AC518A6EFD24E3E60343D88CED0D0906A73FBF35E680125BA7334
948896347A83FC97970BA5018A36258D3B26A0B466329F73E6AA21C5663F78B2
6DDBB68B2EBA88E61DA6B6AE5FBFFE861B6ED04BE7C37A215FC4421E7BEC3165
D85C0BEBE7BC22EAAF16A17D52701594F4F210AD23A2161E33740590CC8B4462
3138722C1A4883D0159264BDE1EAEBD49B39105378D0B82B0826400BDCCCB26C
62F7A79BF2CD89CC20C84526D836EC62331F14198BE4E28929A3983969596151
A56BCC9ABC63A4A7D2E356EB65ABD4B467330CAA563DDDCC1525D22DE32740E8
30E21B6DB36C95AFA948C38A5E107332CDA253CB9ED0ED343A0BD7156AF1D15C
556A9D0389E972C92ED4CECE4A229F9BB0A6BA16479BE3B91BEB238DCCCA7202
F24BB563B0F6058934A5E7CBFD4C3AC1E48F3FFEF83BEFBCF32505717D6D69A1
672C3D5E07F71ACB4C5C1B89FB76D11A332A0276629D9769BA85D53B7A9EFD77
28EB6214EC4E6954B27D8B0AF66ED91BDDB4B4620C0F4C39C376FA903163FBBF
0FCB5457266EA6FED919BA776F9F7FD074ADE4DE508C3F69B8DF2BC6064148AD
9A04B6659B4DAFBCB9D13FD63172EB4CCF494BC70F1F93CF9B07340FDEB1E9F7
60A29DA72D9906733F7050FE3188C425737976DA8E2C97C28B4DBB3BB0BD4CA1
7CCE806B8E748D5B93995ECB2B366F2C4810499512CEB9D5C9DE66F72D203E65
B95C168D2D1ABA66A8CBCD1683F251A71E7DFF3DDF9082D12DF5D1DC9268716F
FDE29677267749CBDA1FAD9580550144FE2F389274FF62D78A5FDFB5533AA2D1
092BEA5570BA7C4302D07437B33288ED34C6BCCB178B3F2E5F74FB5CA36248CA
EB194E8C39E765EB12C955EDA9AF8C3AA34E4C9C46C2AD04B5D9E871ABBE3958
3A9D1B8A8F7B8B24F3AC55BA29E93423D5D8946CE81677C2D92889864C9F2BD1
F822F7CA31B19A96FBD2790F676B2F108047C332D34D485568F4D6EA432F8951
540BE80AA3C873FFFDF77FE4231F51AFEF0295B5173EAB733C7554CCF5DE8670
197A09DD394E727FCB2DB7AC5BB78E055B284D736EB7DE7AEBC9279F4CD2C6EC
4D0D0FC5FC81C777DF7D373B01153BFBECB381D6BC8A400D205A44C56CDF4E25
ED240B9522F12F74028AD2242B8CE624D90D5F110712F0FAD7BFFE273FF989C6
AA635C66485217A3C24146C2982535259B2FBF914339010B45003E1FFAD08730
7F106268733FF8C10FB0E4A05D2E4642360D5A2768F4A0BD88530DDA55DED4C1
CBFA362ADD6B967FF81A230D6905D3A2FE88B5B36A021447BCA599EE5A321353
026269F9E8F95A8B4A034C32503D200C7C7EB437BD458722AA96B9659A6858D5
982376FC3F31533F4CC0868A79C1051768D5AC85B13D08959267F10C6336A7CC
6C575D550DAF550C555A265F71AC56A60658328E7D4CEAAEF49C981EEF8FCAF5
93CBA6D2BB53450894514B8CB312F55465D970DFEE6DA39D7ECA4AC6C6DD0910
C848D33133D9F8CC58E17A74974E6C2A42DE85105ADE64483A1E3DD3B7536E39
EEDA9F482CCA1C38BA79149C00345E3A66205C476AE26D028E46129FEF88C964
7963A61E29242ECC785288189611A4CA17CC38914E77F34B816A2A21BDE4D65A
2BD22DB1ABA43E6D053738326127374262AFB5A230937E2BF8F53D03BB0F1C8E
79C9DA4DE5F8945441AA979465A4E104523F4FA4479267774765627A8BF4967A
C7AE194B976D484F12A977F8627AD23C5F6A899C7BC55477B56F2239DA6230B6
C855D9D84CA1B63540773DE7CAB823727D579799324E7A71222BB90B964E4148
CFEE8A9E2C89B4155DD73196B4B3123DF1F27F2EEC18F9DE03FF3E74F224548A
C4055D71AC77AB447FDB57F8667E75AAEB99EAA05C6049A6B9F20F8B762E1B8A
3D9BA87DD7CD4CA52B52F462CD0008D88883134C983DB27EB215C773B174BAFD
D3B191642D598E5425DDD2AB0EFAF88AE70EDC2563225F91D8B4D4622D085BA9
6C502AF749624FAC209FCDC8D2829C9B71E2AE55AF457DC8FD8951BB228BC43C
CEF1EDFA01F9C5BBAE1F3CFE5DC7DEF3C3FB9D45C9E2F88C0145EB7CC8624DB9
4C1241BA7279552AD9D4868A2FD54A141A464C8CDA4025331E98CDC28CDC29FD
F925A3C6E02BA2C6EA31D6608D3915EE0CB590E81D43D20EF4A41D194FA808BF
529D205CE1C8685F434A071DE3964013D59BCA0F1E02FF78891DFE541D85F543
3055D61D94D9E01356A760AD957025063C616632893E391E4368345153939BB4
C8A884FC8D9A01A70E525E39A9F3D4E47EAA05186EC58A15CF3DF7DC9C28AE70
A895D693D1E46FE549732CE912BA5F349CAAAA226A10AA1BA3148D4C458B926A
BD20268AF3276A005A20411D395A77259CB1A985A4B4EA51382E8B69C0F45868
8A3876EDF2CB2F3FF1C413B1B36117FDFC0C700A040C7D631B7A9B75B132EB86
3DF6D863D7AC59837FD133B6181AA4EAC2C1BEEE7CFE135134CC096496E932B7
91C14B1AD1B4CF77A942A90B446FD8A6B4C475BD2C10391258D144506F44BC46
B46529B1800B715954DAFA87CAD46AB9F7A9FE1919290C64BC6AA7CC8C4A7F6D
CB48CFF4A2F1DB869293A050B500A2A02703B1BEA9A6A4CB85FCA668D3F7822D
A558D14A27A3E39755A42E875FB8745C3293C61FA2EBA4D4235D574A755CBA23
DD7BFC890E33E27B9677B1550A5CD9B4D832C69A6B2B9294D8C6542D28618919
A7ABBC69B2598E24AF8AB1501DB397B552BD75A1670511F3925A5CECC1F58D96
77F7F288449D6E3737618C24BD442D510E3E17EB4AA4C7B78EB4A65ACF8E18F9
78202DB3C865CE4C2C62AFEB6ACAEEE0E2FACAA9153BBFB22BEEA593B5E64C22
685A31A92565FDA093ECAA6F981CA8F48C75E5AD193F6E45F3474BA2BBE2A456
49355FEF98283B929E5CB1D2CA3C298F676BF64157AE9C96C28C35D2384B66BA
C4DE2CB122868B5B7DA637DD68B846724B6EA8342D97F59B32E29F956C85855E
5B4C4FC6EBA96CAA54AC3AE5EA6592A9A70AFF5E92DF89D38CFB46BDE1F89DD9
2E77CA2F47DD68B96C5FE294FB0239D3ED6F264712E56825DE69F78EFA8358AF
D1E5978EF196F70EBCB87947CBD353EB4907E3C52E7C919E725FC329A7CFEDDD
D3BB237A7E8F5B9B14D36FE501F8768FB3C8AFBB3529E7B715123BB295DBF37D
E6C0587922B05BDE83A867C53647FCBA17DDD8049C87AFC243C7DE647B11ABD9
98E9AFE646E25389B5BDD5E258F0EF22A346BA142D19AFC0A9266DD59919483C
2C94628D70DDA170DA1185598691F080E9E17CA59CC098975DA5A9E4747943DA
658130D61EC117AD8961B52FA9074D619541622726892F604B2CAC419B925AB7
A9FEA8B6AE7783B0EE394DD29AEF1ACE320FBB37FDD0FD27D2CE7EA2D0ADE21E
C941F8FE1969FB0934238F76210AEF5A7666CB962DE79E7B2EDB6B9D99394593
9413840B3918ED4C7469DBAF94D1AABF845E104E8F51F09A2448515DC558CD9B
3DEAA8A3EEBBEF3E6EBD86D872CE1A85A5623E0D4D0AB1A05D47F6B4D34EBBF1
C61B35E0153BBB7BF76E4610A98CACF8A3B77AA92EC87493F085742C60475BFC
F0F0B05AE4A1EA6DD8B0014066718239F7EEFEE9283A4727E05A4E39E5148082
49610B7BDE18A6A555DBDEF6B6B7FDFCE73FA79A4BE6AD26AFD6DA938154A4DF
E82D795E09D4029266BDE514954D628D8AF3F554FF78FF0E19918E202855241A
C836DB7A32D5FCCAB45174A0FBF5ADE819DD399C10AB11CF346253725A2457E8
CC3F58F5769617A593431798522ACAD562B98B83A5831DA7CB2464D5DBA5B760
4F99B166A4685A66AC11AD9C51937E915B5B9188F153326EB590DC9A2B16A682
56DAB921EB5BA2B773ADA3778169C8406B833634C4EC908DE54C2A5D583F6542
ABB9482CA33FEED78AC919299B92F165B3610C1A892D7ECC1B285A15D7C863DC
5490287CA6242B05D36B05FB9F29AB9FEB7BF6CBC5147430299563C5294FBA1B
89892D9568B3C3DD38D35D8D4FC4AA462D99137BB26FA6E55D1DB740A73BCEE8
ABDA56FDAAC1651DD9D2E7974C2577CB959E942BF125627D34598C78E92F07C9
C9FA183414BBDC22BB5032D7FB6EAFC895B3A19C6767A55CEABFD38BBC98F30F
5996DEBE774626C6B6752EF97D72EF77F7CA2464F05890F2EA4663CD8A43C777
4C8FD5A7C0CD929F8E96F726E4DE72BAE9953312293931DF29A6668C7224487B
729E7445BB8BE74DA465A01A8D79EECE3A04D766DCAAFACDFE7AD7897D93D3A3
729B64024906BD537EB36E365B49219E9F753AF2374CD97F4837BE3125237634
11F322ADE490841B9D5E5F969E457269114B93CB3D4C4CAE1123E889C978B72C
DD2323FD1774B95E636AEBB4D3E8A9778C1BF957968619A6C62AFD3386F0A506
5A70E3924B2E8140C772CA5A5C45A3775E8575688EC54AE9977A8CFF886D6DEE
C4104FB21F8CCB6BB334AC93A4137F628674D2B24C9516949659EDE1ECB3CFBE
F2CA2B59F59A7634CAC57A1D2B17CF2FE18B0CB5128BB4EF6960869D86D8F26C
D334AC8611ABFDD132035A0754DA11FA1A864876A2366B866CF13258ADE5C2CA
59AFC22B63EEEB7687F07D8AD28E5632DA19B3BA5EADE7A178337F1F0967A39D
7FCBD83509153A27CFE37D6D645D44388D4A649C222969305B044913FDC8C0D4
BAA58926BA53BC18807924BC2522CC09BCD0EDBEAF8813508A8712FCC637BEF1
C1071F945052C53EDFD5E44CDD564DA4E0437A14D403D1EDF7D9D29CB0C6EBDD
123BB62FD1199BBAFD459990CECFE4A697F7CAE61D9949B770AE74340DF3FA60
0AA2E567ADEC4867FE7BE332DABA47EAD8933EFDECEF9FFCC3AF1E2F4A2D7681
555BDC94756215BB9AD1C9AC2BF94CCABE14BACCE4E4D7EA7222766871C7A505
2F532F35ECC02C8B159592DFEDF54CF40E77BF67B1759F53901DE92B168F6E1F
34BF118356556FD42521F659A69D8955CEADE8753D3CA1ACE2693972F0314B9E
FA3F7BA529E6F9B2DCED1ADC38E9D9DDDE25134EB32B7175A451CBD76EB49BCF
970EFE41EFF8D3C9E9D44E89C66DCF595AECDBD1B77DF9070FCEDF518A25A647
D6554D39D8BF6AF6BE8D7392E235ADABEBD96662F2BA7A6247AE72F3789F1F1D
755CA9A7BAC49C8C14AC40E2FE8A627721F7D96ABE5AF5B74A879D9DFE5CCD1C
F0FD2F36C05A62FFD491757253F7EFE89F48ED591297CAA45849BB1EE9CAA747
7AF62CFAC0CAE0AB663E78A172BE64CB3DF9FF184F0E4A50CD55BACB7D27E646
D345E3C66A30EE453D478CA66BB4A27816F70E4C0CCEA4C59EB8A4D419CBB997
CD548268E054C04F21D8071BC5F1BA925B2CB73A53BAB22EE3D2779F531DEAAB
4727EB41396AF7642AF1626277FD14492D5B92BEB65998B66AC5B2674FCB0AE9
3EB2539A8D89074AE0628D2B3ABCDFD5BD1F57ED32D43BB113969BAF38623A9D
7EE63D99BD3F2A40EB8AAEB532A3A67F9B3955894AA42E9D75F9BC881B49DEE2
49BEAB9CB3ACA951EF555968F87DE9D2A5434343386894145F3A14E1747CB37D
7385925D4DEFD23B5DF747F1C3F95F8C54E1BB7A45140D148CAFA790AE2116CA
03CCF6A5CF3C6F6A6C0D5B2A80A3AF7FFDEB1F79E4115A093EF7B9CF4120255D
E69C9900415EC268D4B0BF170C6FE3C68D6042BC0099927B38C936ECDB0817E8
A76C4B13BCCC4640697E805ACF40AD34FA1EC4056B99C3F0B4942618557F7F3F
AF87D4C2C51AEAB3408DC357CA09A47D7D92D25CBDC6406D5F9A25AEE5C6E673
82F075EDE17195B3D2B3AA090DE1A84D1AA0796F947250AE7A0ED9D51445DAF1
40F1F51E128E82BDBBFDF6DBF7EEDD3B4727083B4E5E1127A06609EC55C7C3C2
752FC8ED342E0BDB0DD51653D26CF3399CC0CFF932252BFC6C49CA13D9A6F377
A960C0EB5B949D1E1D916D62363A0A4649524DE768BBFE9A20F9DB74AF11DBF9
C3612809B958AA546BF851A359AB9962DA86DFB9B163B43413B95272C1B2725F
3D353A9A97819A3D2C5B73D1413327FEC80D538BCBEF18CC3E32906F945AFA7E
0A9D2703A7BCB86E7C36961DEA2F770C39CFC74BCFE5E5713B6B274B8DB299B1
12FF68473AACE99BA679651B03ED0A85024FD396AF5EBDFED1DB3C237A4067CF
8EB127FD6F4E6527250F6AD5B01BE71A81E3661BD298C836EEF30EAC0E3C9D7A
6E85D1552A0713C1542CB06A034DE78C8CF76434F7DAC898331EB9D4CFE513CD
4CB66A0C0727A4EB472C5AFAABE29EF2983C62249E69003BA75B258792B14AD9
4898D5A89F99718AB17AB01EB865755DD2ECCF75FCE1423BFD8C5B3C3023B178
FAD129F98F8962D1890629BF52CB885B17AB6C54B34632BFA82C273A99C1BE60
D18C15294C5F214E75C5C1CB7A9E1879D4BC38ED438BBA0E32BA1DB39C46D3B5
1366B95E03B040EF4DDFCE49666CC354726F3271A7350ECE94AA44271DD7AC27
FC78ED3CDF8FD63BC0118B7D53374F1E122CDF9E7AC176630DA96593CBCC69AF
981A74D63BE517FDDC6DE9A9D854A266B53CF552A8AC10E31F23CEE28EDA78B5
6FD01E7D2C2F3B241E446AC0598C0A8CF502C948EF997F510530C7A66AE6847C
BF901D02A7773A0BF6F4DA8AD9E7FBD788943BA275AFB3519CEA8835F3AF983E
9040016F419F77EDDA45F2FE47E14FE33734C9369C3ACBE3BAF09D0C24F71A09
CAFAA3AC32ADA676994D08E005AA5A2041DDB61AFF47698B4574D571C789856F
8ED44BAB41DCDFFAD6B7FEF4A73FA56DC468DFB5A2644EDA5E4DC6C390B8E04F
2688EA8DCD0C1F22C5A41C0D3A8E21F4A640320CADC74B1A34A71637892FF498
A79E7A4A13CAD4B6AEEE018DD496F6556568C0B29D8018AD3AAFA2084FB0FF5B
A05917576B109181911FE03BF339C2F9C9FBE40466E8122B7608028D3F19C746
919F25F23916334534813C5CCDFF90430EC15B80006F2F083BEAB53E07F75D0B
07913D907FAB7B768E75E8D57102BDB38851D5E0E80B97BE607A0DBFD302C669
10A5E75B874C3BD511756AE5A972C4972E818C13EC0992D2514E8D8BD391CC5B
5E30511B10A948764A7AEC439E8F6E97BAE46CB352F51B80443221A6E7076EC6
4D4C9A2D1F5E24103B22B54A2E2A536E4E7ACB4BC69A7B21480EBC79E931EF39
E6CE4B6EE8E83276E44BF1A4D100D94D400CEEA848B5D6892F07B9B1E9526A42
4A92A8A422CD483DA8795011FB9AD29044F125AD51BD1DDCB5A5E2EC49D65BE6
1D30AC94041358756A7A71D9D86D80024BC98AFBB9AA39D69149554ABE9BAC08
54914612E30E54FAEA963BD539658DF7E6061C6378A62CF18E567D8591F154D0
324B5767AD374B445E484147708D6A039B6CD9526FC556AEAA75BD60031BF32D
4B1A46AF9AC089664C7A6B1092BDBC29B101A98D48DA6B25A65506B2B162A93E
1DF352F5CE52A6B5DE5435535D5990E1783C6DB9E3453F79F467CFFFD9DDD717
228D166F9C2C46BDACED98F95A3ED399A6485AADB6EEADAA7BB6F4955A61437B
336294224610B77B2AE698D1B0BC58532AADF5DA5DA5C2642595E828D93376B1
DFF64620D543BC9772C558D4CA175EDAB16ACFCE19E801D998E41B2D31BF950D
00C8D492665FD99D14A729512312441325B79AEA4C556BC545156B0F647F5FE2
5149C7E3E5DD55D38C15BB6A329E8AF63A6E69A655B1D200B3926CDCA81783FA
2BD7097846C289F12FE30446FB9A08BD23E2EAABAFBEE28A2BDEFEF6B75359E6
E90DEB11F3691093FBC3174EF120F1D8D0F7A07AB4D9BEA490A447FD8A0CBC0B
E737D052A4F79C842FCB9576740DABDBB3AC3193B9C02778433AC90A441BB404
9683EECBEC3D159C3628EFC73EF6B1BBEFBE9BE5E6799D24278F79FED33FFDD3
030F3C406244A339AD196A16A0D19C323EEF9CE115EA7AEF02D51796C3D44C05
9ABFA59D1987EF7A4DB17EC219D17F3E27D0BB90E8402654D7AE5DBB61C3064E
8CB7AF307744932AE673024DC7A3CF46DAB55A83769D74DACDF1102BFAE4273F
898777DD75D79E3D7B78FF381927A354A51DC5AFFA282F95E5256E9A5FC65B9A
09765E63A731428C9252758DB8F4A773D039D621C081F1BE7A3947F8C289F970
D6146BEA944C25A37AB14F8FB1B4C4BEAC2D71DFAB45A56943FC12633A82E548
47B3C3961E3732DC30ED5A23E1598371DB71ABF558C4A87B41C44ABA7E331057
8C201BEFF24B154B56E4B34F0725491B871462DBA529E996613D3B231381C4EB
46A1910E4C501E2756356B52CD49FF14D48BAE646CD2AA8194B7DCD5ADCEAC56
DCA867B6A21F2D23681A81E1DBD64BC931D495B5B079C30824E1B7E8D6A49748
76B88572441A951894918303191C97B867D52241299E90523193906A25ED4B39
27E971D0F098405A96FE6CF71BDE7EE8CFBEFB54C5F1A4E28A6B77E6FA538D7A
A53C38197141229DD28015A996933366CD497846D9AF0566A2C3B0668C427436
BE088F3B339958A930117163D6D26A6DA7D4725E6406D34EA7E255B71AA9D8F5
68C3F0FB821585C8CE5A326216E25EC28856AAAE935EEA4CECF1A4A76FD5A13B
773C94080083DCA27874AF572EBA4530A4A81D0BDCC0173F12355CCF954826E6
16C0829A99A454CAD1A6ED89E545AA7DDE81860C4F4AB21129DB66B9E949E0CF
AED7B00EE9486E2F4E485F2A3AD8888959CDC83F1CF577DFBEEBDB11AF050147
3A1CE99A964A4D0AF1E5B1EA8B934B077A4787C74CD38A4493E55AC5B0835685
BD8E5CD0989646900621AD5991867FF8C1073FBAF72930800EEBA064C3AFC8B8
B72651D833962EF945470CF795D1079AA6E75CFAA2D5E6FFC80948DAA42DE068
6E54F87EBE85750269DF57C37B9AF0842495C581E912048DFBF0873F0C02C124
292DF2A39C803778A8CC152EE1A085F829C7714A6A4E51D347F8CA6C264340D0
66E2EBA9A79EFAAD6F7D0B3C898E628C029A050620ED0AA674CF927A0E0C0CEC
D8B143AD25EAAB90B623DA9FBDBB8A0497448D26B5B3CF3E7BF3E6CDCB962D7B
EEB9E7C82369D7C2015396003860DACA59211A3337824219F95FF8DAB53F8713
D01017CC960A0FD7DB59B76EDD1D77DCC1634FF28D798283CE97ACC34F94CE82
8F32305742B7DFE8CD77F2F2EC6E75CCBEE52D6F79F4D147AFBFFEFAD34F3F1D
AB864266844A3CB17396C5657499721DCAD704A35E3EA1D45FD765ECFFB6BFFD
71025EEE489588B5D38D765EE1FEDE25D2AA9F89A9E3131313FB8C2235A266E0
A3AB00FF491A52F7C44DB664E158C989808876943D48FE652B80FCE004860B9A
9092565808FE1789DA49D7ADE3253B2A2FB147BF4F8CD15C43BCE4E179797C45
B9EB456332C865E38DBC57C8A541F11B43E2E492453F223351E999488DC7A001
482A9F7163A581B25F5CD19D9A9C982AC64BE04FAD429EAE24BD6457B26B7779
3750E59C73CEB9F2CA2B95D5B5B6C37503C925C4AA486DC669B43210EA2070A9
914CA965F76A9577882DF14B531097535D5D9572CDAF759B2B5E7476A5AA565A
B2C3F664BCB1B46771D7EEE1E7BA6235B7E9617F9C660C6CC283702F552B9094
BF72C61892441D343605A1D7F1F2F5CE162FA939FD46D66C8C0D0197BDE599A0
D88C4E79AE59EFF423D565E966A9DA9CB2BB064AE5E15CED1057B677CAB23DF1
DDB156AA6FC7983593310E283466A06AF5E493E3112824D259710AD881BEA80C
A79D781142472C15F32BA6CC06D3F72CE91A1CDB9D71538D6C67901F4E48730A
BA88918B55AA4612475DB20DC9078EF876AF5BC2412DD9A95CB33195AB9FFCFE
931EF8F60F8BB5B16450AB3A29D730BB5A44C999328A4157CBBE2F85744A92A6
3D5DF42BDDDDAB3EFC91BFFFDA57EF00072A16AAF158BC569BC1FEA65CA882E9
4E490651633098723A63C7BEEDDD3FFECECF77754F381312E42CB7DA4C572DDF
8895639027FC46ED15DB0C28EA6921CE3937E7189A31AB219E5A8945235516BE
774D2D063C454A2C9440600638FC20C494DC49AFA5EDE50B07D4EB8D4EB432A9
F157423735EAE57C7A5709D90CAD9CA0A7175E78E1962D5B8E38E288471E7904
0D582B1BEDFBFBFB49F7C1A818B0C8840370148DB161BA108926E7A3890E5ABF
89166A46E6CA6C793E5E104106AB1627757B2AD0F542665A60412B6FBAE9A633
CE38834E02095D02BC40ECCA2BE5042AC3722B3107F0AA9B6FBE1930E1DAF59E
06164BD09BF3E67002095DF48895AE5EBD7A646484323E130F5599C3BB071D74
105AD257A42923F895F2041D42C66CC6228D780B689CF4181186BA0BD039BEF9
CD6F4ADB12481CE34F32EB10D35BD57811C5ABC890FF333F3A9C1D4F64DDA0D0
28670F5B3EFAFC8BB159EB6ECD6991FA5E898D456A128F2D2A368B6216E31123
DE199487C02732996C613C1F8F3A5ECDC70640864F493D58BE667C70346D15A4
86F67149C4A431DD1524F3CD7AB3159E6AB5444BC8342D838655703BC49CB1DC
46CAE89E092A122D4843D0D837CBD37D8E8CD43B5B314DD2D1AA289AD91583A8
5E8D444D0F5C2B689DB572BE022D013A43D248E48382DD69BBD3F5B8677E71C3
951BAFBF72BA3AD5E5CA940C003362D6305493A6996D3AF8ABD0AAE21C894B90
B9E2F22F5E76D1A9B548CD8E8951C2727BD231B718292EF616156AE3C5FE4662
C40730BC54445C2FE3DB915656AD808C962DBF55B91F6A8A1BF35DCF8B36A219
DB9FB0E3925EBA68D9B3A3BB9A563E9B05BCDC62151A561C1AD08D1BAF387BED
29AD1B362239C36D6662B592990793EB4958E385CE94532F59A5CE724753CAC5
64BD4F64B20C68D98D66C39FBD5B24C05E194D538206CE4BABB27442A219A94F
A7833AB4E8295002AB335B9EAEC9F2BAD42C19ED48C84425292634B27A67C39A
AEDB582FF648FCB1A6DD4CA4C49B1637BAC4F1A66AB15AAA9C8C48339FACB682
825B72B3530777379D78220168572AF956286A4B54E888E58C5A61DA69CA8A03
96BFFBA347DF7CDDF569D389D833335579E7FB3FF08B9F3DE4554B60CE3D9D3D
E3D385BAD4B54C80161D7A15FE4556956E616C386844357728E6AC9EAF95D716
38484A29D47C7FCD35D7AC5DBB560BBD312C955C4123882494C915B40B38F315
0A7DE1E2F212E2043CD8E19874721769935ABD309DF229E9205FC74F14E4F19C
0E74DE4A8A2F0C72A5F91B8489F662BE4BF2C7495201A232A1F5FC980301A08D
8D8DA119968C66F8AEF7896BA6AB8462EA59884D66ED6F98EAA64D9B20296BF2
54387DE14FF9EC8F13BCF6B5AF7DFCF1C701348CC28B29687DD2AB8F7993B8F1
F21B7EF6E927A0FCAED7A2B17E6D3870C89CBDCD0DBD71EFB88AF0ED48AA1531
32158D8DD9ACC005104C539A1928CC20312CEA89279E90B62E28B3EA20B32019
7440F514FFBE64E278E5B1587FE647874BFAD28A3D8900B76D29B7881D786610
B10CA9663C6BB2155F28990A08437CBC518E35CD0C089B119F094AC96CC748FE
FF12F726609295D5DDF8B9FBADBAB5F7DE3DD3D3330C302C2218779468CC1792
2F065CE22731B8B04410019961DF666084611F706411028A1F286A48946C6A12
F9DC9098888A802CB34F774F2F555D7BDDBAFBFD9FB7CED4C9659841F1C9F34F
C1334F77F55DDEFBDEF73DE777B6DFA90A5A86AC05BA6A96E3B79DF0961FFFFC
27BEDD914D251584BE234B5070F5AA20B997152D0805918D047E2C5CEBA23E4B
16BC466A88E252110EF50E98AEEE1828F447C6636BAFB103C660AC333857AEAF
7B68C3E68F5EAD19C27AF35C5F3734CFF1A92031461498361CD7B5B229A7DE2D
E4ACA566475813CB2DA8B6741F0A6A6131F040B651D34C8523BBC385B4950D3A
1D13225CDCA2EF8C95D3027C7165342BDC14581D1C6FCA4E457A5795B3A3839D
4A25EA38522417B362EDD6DB662C972055D1BB86E8E7A478D9AEE37BB8F87455
3BF684D7D7BEBFF4627707644464E5E843DFFEE2CEDDBEBBA0C7417E6050D58D
EADC1CDE3752E456C1846E008E2299DD411DCA0A8CB4322D2FB44DE1CD0A2023
41D934CC9495F1DCA0DD69F718A08444B6E010D7DA1EB7616C7CC54C7737BEBC
11F590BAB3D51D94208AA181A05DEBE07CAA0E2AB709BFB417AA38FD03662674
5A68D1D9A514D8BEE86DA07651A6E3F3E63A0A3E6FCBF44CC7700403B5D883B1
7837C4C582E052B80B47C2C139B982D6160A861041816EA95A27EE347D156ED8
74D3E6DB3EBFB454312DDD736C1FF53EC8BAAE52AA216D25CEA9E18EC2BFBDDC
A07D2431DF4BB2108C135D9816F455A822C940E63EAEE42CA65C7B42CAF8EFE6
CD9B118AE2CE5CBB762D9A9F494D20F7F9FD79C31F7FFCF14F3CF104241C0B90
E806C749239CCC43329AE520D75541DF35CF6D5AB9431E8D8A612CC3762EC125
F849B832A9938875F984134E78EAA9A750FAD393E2B9DCA58B4421590C14FEE5
F006AB13D23AE40222638B4D222ED4FAEFB2096EB8E186ABAFBE1A8532A9F687
1E7AE894534EE1C4470AED9081956CD07A409B00FA1962C95EBB4C7121F5FB85
B162604F1D97EF51F627117413D3354FE0AB68025E061C1FC29B123B45921F94
D896C8D0A10A70D23DE419FB9FD204B88C82810CCAFE521B6574B4287541D5F3
B6D750828C0C6DCD106DC99CC05470D3496381F992872F2E3EFCD043B76D7D5E
82D09424D3D0DA8EEDA48B63A350DF5593E3711782505EC453622FE5E85D945F
464FE28B8F015D4D8DBCC042E13C28A3400A2A5E20C9760E2FAB671BA106C3D5
EC9EE26125784AAA099FF982D016CD8CAA878855972F5B3E3D2308048BA58280
8AA86A4AE946B50BB1AAA8B16185B61BA3C4D7A5AC11B49AA626BACA74DD6288
DF151D458EC32550AC58EDAC184A2DCE74D55CBAD19521D07388B4730E34DBE9
C9F1FA9EBD86A636144FB4E4D141EAAAC2E2495B1D5B2417A44CABED74D00ECA
9534BF1A99B2E966EC4ED71FCCE52BB546694DBAF36BDB2A95BC2E44DDB00B61
6CF820BB26FEAAE7BCA0B962D4E856DDB283E3B5CCEC8859B3EB309F161D1310
8A87BAAA3433BE2082CD8A50B422E3CA44A915F402815A2A850ACF8EBAB8CFF3
4AAEA6E8E0562606D3A92E6C0B1D4D89FC66DA0045828E538CD0D49B50F2D9C5
F917F2A5F16A7DAF1E8B66830DD1162D8FCF3BA1E5E6DC9DD948727329B4CE50
33A04A100E3E516E87F2080554EC385E6F6DE37E9151774B4EA865B35264B81D
474F655AC11268BE81BA533674C40DBE877A3E30648882A18965DD6AC36E77A2
5E3B6194964F3EF9245559C16F5D5CC99FC9C949DC2FC29D43BF93C424A94780
17E51139FDA53E99C1ABDC831CB50CDBC93C271F08EE4CDC96DCF396C2ADC924
1F0E6A330933AA8A6BAFBD9662CB44BBFFCA6623D03320284C4D691B54574C16
03425DFC950AD088D599FC18445641D2017A623D49E60709CBE3F0C30FDFBA75
2B299564F0908E640E356ADD8CF378F9E5976FD9B285AAD848A426498AA09F74
4F88980827B8E11C47AA99ED00FA4A91843B0548296F958AE9A85A82EF42C750
C51C0557E1E5E4D2D0EF5D8E33895A01C7496A553A48EF4FD6BB3463D4482ED9
A2875E0A75DF255D4B689DAB31E2837481869E3E3EE38C33EEBEFB6E861ACCD6
77404DB09FAA20E4C1BDF7E8934C34A094042A7063320CAEA0F9FF5913447AA4
C96ACA8E7450C46B40B124ABA576B7AA83EEA108C8C76800A75C35E5DB4B2E1A
10AED83ECB4E3FFDCCCF7DFEAEAEE776EC36983DB78F12A1E8B45C28C2641542
5B9D834C2435211D89C62E3EF8822B4181DE8E3240D224431A6D4508B866F5A0
303CA0CF08AA9ECE70C66C6BA1B3B73A00033618FECABD9EF34ED5FA65B0CD01
E1B20BA22093CEB4ED36CA34D590F594DE6DD972A8A5B46CDB6FC6726058A085
96E2A51B9ABDBC3BAE433C3B38E3044EB63EA24254CB9415BCBED92B455625BD
935D73E8B17B9E7B2A0B9D690D560D8EBFE58477FDF087DF9F5F2C47A15C34D3
CA88AE569DC5162A281928E48638C98F4A29E1D9977D548520DC553E4CEA5375
AFDA82666C09236AD42E4471B50CED60184F510ACD52CBAF8745FFA48FBDEFEF
1FFC96DC4A47913EAC4B8A576B0CC8A96EAAED879EEF0C0E8D54CA750D22CFC0
05ACBB1D0F22B4A2509B498A26FAD4F841387A74AEFA4C33924782C8589D894E
FECB3FBBEFB1BFB1172AA1919E749659A0CE8C4DB73AADB1D621134343BF8AFF
3D2C6B216A179C5C17242F25C529135A79F0E744A22D0A78358A03B400143014
08F0BEC43E8B58340AC496406BC0B25246CAACD84B606BA3D170045579309E57
1CD1DEAC9B534AA56E756E79318B67CE3B1DA350B4CB8BBA8CD8482197F8CA95
2B897AE037B2A41CF013F759F4A5240743B22D227B57504811D316B79AE2E27E
4E84677143A543740F4EA181BE3780E988095AE275C8B34FBD71C85B42E3E1CD
4F0325A1C6AC0F745FF272241137F450305909ECD3609B23D9C7F1957CC5E438
2256353235509311C7354E13DE940B74998F4FEEF7F266D8CB0616FFCC4DC929
95082F4BA6030B3892F86CDC9130A59672F4985FFCE2174F3FFD743A85E6131F
1CFFCA14224C864A0F78CF3DF79C7BEEB944328AD7472DB57AF56A149AA4EAF0
CAE4343F9826E04A3AD6F14C579EE478605386DD7D5C500D2FEF8BC9D749F6FE
3CEAA8A39E7BEE393692F6939EFB89548AD6B08A4D72D642DFCEC341E278B809
28B9BC92951CFF53364154908D6AA0823CB062D55CB5E2B7EB2275B204A9664E
758C612839D05990AA816543A80F0CAE5C6ABD28E8F9ABC25D21C94AECC5FBDC
084AB0C2186CD8953AE2D99134CC68D0755033981D4D158D631CD01019A52227
CA436E402EBC94FA35B8793C4B1F76DE72CC9AC6AEC6F6ED3B3ABDB7311CEBE7
5CF8E96B6EBD5DA41299F0E94F9CF1E0ED0FAC3EEE98E79F7BC190CDC00BF086
411CF891870718BE9A2EE66BADA5E2F0506DAEACC4A01BE9AEEBC180C83D15FF
939B5B835C9C725A688574DCD16CD06AA9E140CAF15DB0BD54001300D3A3BA57
2C58FAA2FB1C22EB35D1B2A657F3A05E498BD335B4239BBDD48CBCE6B93E7E53
B427F26AA91297DBCAD26071ACBB208C0B7FB093EE0C56A3BD222953105A0842
D3C8D6C6F313E097F72A5D14AB301FAD294DCEB5661A6A4B389196062C75C2F1
AAD6A4B46A62ACFAE46EDC9D36545A03865B7771E0B974CE757DD7EB8A68810C
59055A19D0BA66DA571BD9767E6040DB56F387B38DA8091D9106261E56426D2B
AD1E9A9ADEBA2443535E39DC5A5CC4D91E874C2558F0F2010C89E705372D6220
A98A2CC35827130AA3A0B954D4FC966010917AF2097A817BD3326FDB70E73957
9C8E7A5EF05A3BE2E926971F56DD55E9A0DD97F2B594D768C462AA233597CBB4
9A75E9E5D53FEC5478AD9A803236C545709F103446894F397C0F3CF0C025975C
42929D653D77B190A4FF2A46A3FC10CAA3205F1065E6724A8FD5FB901380B88C
70F3A3604240CDD290082148DC535A37799928A3833CBFF40DA1F524370EA537
8C8F8F132B353964D84912BFBC0F25F47B0990726255C72E6FFCF2CC33CFBCFF
FEFBC9D1FFA637BDE9473FFA110E008FA10C7AF68424773BAB1CBA38C530A04F
5341B292AAAE08AA53CC19FA0179E8E75C715D020A7A4A75253F1885FBA9DE9B
1512E7AA422F644DD51B1CD7491A4FC90000F9EEF1FAF846C8487AA5268084A3
898219449DC47001FA044D74777A8AA4D04FDEF7959A80E240644910A4E0B0FC
C184359986DC3169BF843152486468E2BF1B366CB8E28A2BC88947DD359886F6
7F44130C98BAEDF87629FFA63FF8FD6D8FFF50AE2C55504C7C70322357DA3FB4
61BA97697E1AC8934AB43D046D78B49A95BBB0F73F774239525B6A1A95088429
D06DC8E6A1DD5DDD5EFA5F42FEAA5F3686FCC18AE1FA1B2A22057DD1D3B541B3
1237FF6D4990A37970A80D0DC82ECA2D5806237F906B0D8DD9E9368C2CC27521
548DD5CEE0B6C1FAC499132DF785E670A1F4E576757B804033ABE7DA8D4EDA4C
B79DF68DB76C2A8D94AE3E7BC33CDA1FA370C8D16B661E9F4ED97A3DAEA164CF
FF314883D9747ED8DF512DFF5B0D7680146AB1AC5B51C755CC426AACE840A0D4
760ED6579C7AD4AC56D7AF9B0D15599F8ADA1F85B8D8EB78834F360987FCEC84
EDFFFC63753A1AEAC9455CF7C13269D91FBE79E6F09F0AC342C45861B435367F
C71CB455308355CEC48EE2AC768E35E8E4E6B6CC8DF98784602F4973660C9E9A
8A02E3F5C5C99DB55FD57290FAE050BC227DDCDFCAD6C0E4BFFDF207E6A5AA93
0B0015C1B00E03DEB1FFF7F52F3DB7D5AED89AA44A91E4C7BEACA9E96C5AAE4A
5D6828EB879C54377D797B756EC5D3DA6E84E7C3E74053D3ACC288558DF6FCDD
5E7C713AA4BD301E31BD05475220B342CAD5E23DB541587EDA11D3F6EEF45DB6
88870F895E05B01A602708B59485A3FEEEC8E91D33CDF9A614A19960B8A1DB8B
57C3AA6862C79A593849CFB752E72C3FEF3BB7FEBF6DD5E76CA99E95D3757CF9
2538E6DD4795FF63219A89EB763333945F2A57A89E9F5A0AE2BFE4747DAD88E7
820B2E78FCF1C79F7EFA69896531E17416FDA818700792BAD82F5A489A80C135
55FA40CFA3F2E28B2F92FE20BF33B1E443DF1F42A79C76DA69DFFCE637C9734D
EE94642748AE24DA2F8D921D38D4218BC6CC055C491E3D1640FC03572D71B61F
A913D26749473FDA2EA81528C5050F66D75B9CE8F7C63096B130894EA6596677
36394F985E02150CF5D2A1BA84B8DF1A971E901C4D943B4F3340357A34153818
04E6244FC92D8E2F08DF083520A3DC2D3C9EAC2EFC13F3CD91F580A71C79E491
08C351449258A4A2E2037A87384D9322ED38CFD4B085922C93BD25181624253E
CFFC01BD4334F9447C4BDCD7D4D1F360A111AE4F4E0684A81D1BC5187048BC0C
68916CD9B205A10CB710F89FB50910CB747B8B6C60D9D8D2EE5DB8A597FFC9A8
7FB8B578C39EA8A31623AD9B695A9F9CECF80DE7D10674ACE1C17871DA468340
570C2F883283C5B65387C01B82B1B232A79EA46ACB53DD9FB6941F401EF2221F
68635A5992DDC7165101189EA5074106F46C26FDD2C442F6C594AF83FBA942DA
08A57B16DBA1687592F233DDEB532BADE53BCF7A2E35E8766F01F9A4C3F4353B
D20FA7ABDB9B29D3ECD69D5276A0E3740C0BB14BCB884C77B5237F501E9146E7
B6EC55ED7490B34B67E6AA434DB80994364467CB7A667CF8DE186ADE74A98C52
4B72D206981E549D12E81FD0572C3F76EBDDFFA135C0772D503BD685595C1AF2
037EBB62A080D133E0E0B69625500CE1204243C4F325150AEEB21A94E13837FB
E6BCD932CB8F2DE88811C1D77438E293C76EF5E7BB0FCDAFC9BE6EE9455C8B0B
85155A63B1AD39793956E8BEA58F95B2D6E4EEFB7F291A47CB39909AC5CB073A
9D2EDED7A9A3CD55FFA3534F7CE63F9F9EDB3ADFABD612589F24720E6D9E4D13
4BCD5A747F5D1046B5F50A78DAED935D6911D63B8A0DC65A2B548AC53B3DB32D
EF2ACC1B2EC4DDD4B032520B77754A90FFCBFCD0C061DBEEFB4FBD86CF9103B5
A97FDA54553DB8A7137407A4A82C8F6A7E45C44824914620A46A28C5A2B37D36
CAFD69415E95AF7F6F069E90F330E043CBD63AF75CBFF153B7AED73F3E5C50F2
8B776ECDB6851DD7D26C43DEE7CC4876D0E340EF6FFFF9AFDC21BE0A093E62A5
27F24E025F4CF3C91E15829C247A28671F372462D20F7EF083DFFEF6B7290593
4689B7A1EE25885BE9789402681C301705A910DCC07805BC0BD5F792039A3038
5E9C3132B983D6AD5BB779F366AA42228F3995C893079C2848F939994883B0ED
F2E5CB5157D180E901F15C72587116CDA9A79EFAFDEF7F1FE50B993B78223E05
35D7247D401E12669EE0FC71FA2BFDCA340FF46E48EE939B1EFAB614DE9DBEA4
E02D4D268537C930A29A3EB9D730807E20104D7D3D515D5D7EF9E537DC7003F1
68E2BB43759B749DF32B63777CB28D33C041BB40EFB75656AD5AB567CF1EFA99
7C4A149EA5DCD3FDDABAFD9757A4DF32FE9571021C00BD5F8EEA3327F6013501
F111716107F709A07A695421EF7DEF7BFFE55FFE855215B81107D11C31F1D16B
CDA9F8EFD204514A023B1E887509BCCA7024FF9F55F901AFF6E519049ABE6CA4
62B99BEDC20579CDE906F778C34D6D418D539952D070AF5F7FED8D9B36B5FDAA
A44781700A807B7A0EC606E0BA5DCB978AD3521D8622BD0CE13550AA5AE5AF75
8C0518904B4B08C9D3685B888CFD947C482D6AA20611D183B20A56B4EA2F96CD
8FD7ECDB5BB056E498C26D30D25CE92895C6F5F6313F3DEC573F791EAA50CA17
1B9596611A364A680D327AC13C5DAA1C56831AC066C88543C3EFCFEF38669B7E
D1800C6E8C064CCA874657717B694BBA0A72A005C5C8F7CFBAEB630F54BFE46A
01DCE21FB534F2225402A90866052EEEE5E9DC8AA8C7B01437D055B71BA912EE
05B16D719B3A7E1BC5A4A1A6DDBC5DF88005CBA2FADF75E15768DB4CD4A2B9CE
6D91BCDB8ABEE24CB6265ADE4C4D8B202F21881741F3B6B56C687C26DC9ABAD0
725210DFD039AA3C3297F5AA2D6960D25F3AA5A5A421DC04929FB214D1D14C84
8E7D34A8742980208C230D0294C93787C5EDD9DA175B435E4E0B86F766B615CE
1F6AC765E586129ADFAE1A4049A5E7350DB513451F3AEB233FFFF633BBB66F0F
4B6DFD02D333F00ADEEB97269E85B9100AA055B50D8A0CB1BB31020FB19EE3A4
85DAD16405D0940D229144A4C9912CC537FAEAEE6CF0E576AE961D4AE97F75E3
B9975D730D7434D3F3073E35397B6807E63D78A475DF599FBB68C3354DA39506
9D5C23A3A3A3BB77EFA62491DF8DAF0CA85517FDCE748F8CEB7147C9BDA62E88
E5F17E547E493B90892550FA93DF9CF62A8AF8E9E96936DED97BCEF921F82F4A
B164439264761053C511BF0D770A237119F79BBC737D2FF4FBC8CBFDAE2CFB89
B324D11BC1F337BFF9CDCF3CF30CF79361B73EB7151391134922CD47D4F3F4E0
2494B91D04C7459336017DC9A5092CC7E9D1F016D450F3DDEF7EF71BDEF08607
1E7880EAAEA11FABA0BA071CD2638F3DF6A77FFAA754EB443D4F70C6500BE261
28E8F1076A7E89B7989898A07A3476075168975F13954DD0EBC015830793FEE3
84A8576A02AE13847E15052A9B4B2FBD94FC75D404825F04A709ED2701D93574
B038014F0E2B4B5AC7F83D294B2A73C50133F114CD0679A8186ABC52F2523C9C
743F4EE3238F3CC2C1AA641F693CE6E28B2FBEEDB6DBE8ADA155F1894F7C62D3
A64DD0AFF648C69F706DE3C1B7DC720B474AA869D295575E79DD75D7B18E61CE
77760F8AC1588DD2DEC1C55CE5DA0B2FFEEC865B32170F699E52BE6BDE0CC01C
9DA89717C1F2C73E7E1C04B5B97FDA75DCD1AFFBC58F9E1182DB0125560D5978
0F8C8C66E3F85390B9F8F76CB468EFDE3D150EFDEF8F7DF24BDFBEBFD55CD0AE
30326DEBE4F69F4F0C0E5F7FDD755FFADC43A75DF331AB3EEC1A7AA0CC2CF707
6AA9B0EDD6C05F690635E9D2F69811EDF8AC061B5D434EBB1BEC5290F1D581D6
6DBB07ABD9DAB55E414A2F656A690F4CB7E458BE2DB5603DA4168CAEE5420694
4B40970ADD8D7588D2F0909DDA96294AE9BDF945C493E9DA90067AA3B098A9AB
ED5CD768EB5EECE5AE9F6ACCB6E1DEBA159831E4EDD46C4E83E67A09A438D7CC
36AB2D182BC0CDF5A263D51C05F2C1B027D220FCD280D36814D351CD8B602348
8D427C573DEB2B057B62DA98D3AE344ACF0C2F3CB9039A60350B366871B652E8
4886595A502B6A132176285D36A00596BB79D60C51350DB68BD34A13C2DB0DF0
DC7C3B27ABCD5A47817B43BD9AF28A4EAA964148EEE6DA4AD308332E5C66C1EE
D2D0439D72AA0A75A1D8D0903AC2519EFF7A98DD5B40A3663E53118EA1EA900E
465D9F313D2D3C2A1B3D57CF15157FDD68B71A661EF6DD725B946A2C9BF3E720
FCAC60CBC854AD4EB7230F0F8637560E785F631D14CC29E78A5D2D79BC187596
CC2E84D982566C5F5E093C115B4AD70CFB6B2E5A7E3895A834DDE8652B9FFCE4
B4BBB9D108AE40926C4991C86293626F04A63FF399CF48EC6BC6331F7EF8E153
4E3985C8705EE957E53441DAE19CD2434603E12FC2B9F83D0A29DC6CE45C3AFE
F8E3FFE88FFE68C3860D64C5A3D6215E9A9999191C2B85F556AC58313B3BCBDC
3849A633CA4CE5C49BB1B13144E8246AF1F9F1D65BB66CB9E69A6B504A26F120
F4F362E30481DAD4D4142A3C2A11E0C827DD8886C12E20726731390429129292
C9C498FD22C6D4F59344F311471CF1ECB3CFB2BF883D6078305964246799FD8D
4134E9421A1E553EE387893929DCB266CD1A9C3D3223EEBDF7DE8F7DEC63C937
C559589FFAD4A7F0AFF86AF09AF8F3C68D1B934D950F163126D04D821EBF4135
80CA804B1369C1D1FC24BD498CFA93B199576A82640212B3B671A8990646DDD9
68BAA82D33FE9502DDAC74F7C33EFC2BE9127A6BFC4E29BACE3C5494C346FE40
22B9A2AC569C64D2195CF988776793940AE6B940816F4D9179B60269C5E231A4
4E021F86B5232BE6737241F23F98863708F631554D65CB47D6BEFED47033B3E8
B5A5EBB3B1D9826760C5C4A193CF0DFDC70FFE23EA40C91A6C541BC28F2C478A
298FAD2DCEA4450316E13A6F67E12BEDB1DDDA9CEEA1A406134AF2607747A5FB
0F90DBAD2983915CD554C319EFC28EA2DEAD7B22BB3D0BC199002B44EF4CFD3A
C3FBBCA9EC6D869F17C467F9BD6A63035A1D90BD7F289CF36DABAE77D4945168
E42B23A78F282D6DE9AE8E7B79006345E5FCA550ED8C5F39B6379E1BDB98A982
6A9472E77EF2A377DE787D4E2DD564BF03ADBC57F0535D67584EBDD7ECACA9A1
E42A99B96AD02C6D18A8E6AA6845AC3AEDE89DF73E1BC703F9B7FA8DDF6BAE0E
5695FF66B6515521E51B5D6FB0589A6D36F3192B68A43BD9B9910B0A43BB079E
FDFA761154D0D5D4F956D76A8849C0C5B21D86BF3A8032B761B8685E0CC5F9AE
D56A4377E28295B3F99D222CBF17770B942E19A8A6961413464E5E3DF7E56D78
5F282E0DAF1D58DA1E875FAD43188D4606AAA639C501532B9C39E68FEDE91441
DE05F80AE06145AD86C19D0A94A3A96B4B1590FFEAE273BFB0E526CDB525D046
561EF2D2EC0B45AF54876A9C07EBD462E7A89EE554051880D215E279D7AFBFE8
919DFF52FECA8BF5BAA5BEAE1EFC7EA8B44A07BC6F3DB70786C5CBCD40BA7DB9
5D8AF2D5950DF3F7F1D7E1EA3F2C46970F0ED4C2EE67635BB50C98758311C3A8
53AE7C32F39BCA30596EE0623EF4D043B76EDDCAAC3C49227D92DB9C8CF3B2ED
C4F4908443972F5F8EBF12AD02A52DD2FDB8228CCC023629701BE09D888487F3
2369B7C77DDA1976F7739510DE0BBF3CEEB8E37EF0831FB0EF82535C92092A9C
2D839294327CF03AF7DD771FCA38561EEC60895FDE9B9E85233D2949DB65CB96
A1487DE9A597D0BCA23A613C38D9F486FA6BD26CB0CEE0A809CB353253701210
D4531E148EF01DEF78C777BFFB5DD2B2CCF221F71BD7B028A47749A2871E93E9
4889068A5E0ADEFD739FFBDCDAB56BF16A846D93D4CD54614B856F045AD9F996
64EF20D38D9C697070EF1067A4D18BE6C040D2B984A0E19FFEE99F9E78E209B2
6398BE906474B287F07EDE21B60293A1A064E919139C104909190AF8D454BF8D
CBEC80F507FC2B1794E0BC71688A0FE32437BA083E1AB14571A401F5011E8FAB
6BDDBA75F7DC730F9306B2E8C71B31091DC21D5412FC144C97C27E4B9170FCBA
E35E7866CF842A5503B7BBB104F26EEB2AE864F2D286463C0F837783D385F695
C24D7BFFCA5B2E3EE3E2F3EFB8FAF69B6F6FCEB7A508F19B0C2291525410C379
B94C6EC0F9ECCEBC0C4BEB7BD9A89B109416DCDBEA63AD6CE31AC944510AFEC0
D8C8F23F9EFCF1433F334B4BDDA60C8A3E941DA9CD07C1CAD9E2C9A51A2C83AF
FC4AB44CBE16D18A0F9BA2E5F5D462DED42FAAB5F00D5C0FF9CEB85CF0EDBAEB
EACDA10B87CBB945B80786F640F966199CE8D0F5F2D66C24DF726461C70BF657
F34EB986964D4E3396A428547C4586A166B6AA85684BD4F2A05CB63255DDD9FE
3C9AC9329CA90D66BDCA3DB13C0BA695CAB423571B6BFA0BE3EBAC85C80EFEDA
2EC6A5164A41DB960CDD0F83B194E5F98A7D8ED655CAF0200C35A011281EDEE0
461F6CC85C3D2683D9BDAC66781DEFF3BEE16BAD91FCF5E75D7CEB5597E27D53
EB0FEF6E7B51FB066E7C90CF4B0F584EF9DE28B5A0CA9A5E6AA93539DF892A78
DFCE50A7BEC9053FA29232CA084A5FA974A530BE1E46DDD1C646B7BBA766DE0F
F96B972D983370B3091D278B4739D0D465D023F060CCCBDDFAF05F9F77EA87AB
AB0C38B5087BE787FE9F5C9E8F5297162DA55ED91C0F427EA9DE180A0D471D35
7251744A2D5C1E1EF0BE8AB2DCBDAAE96955695329D7C83B37EF1CBA429F19F4
A7EE8EE79F07E766803A14AFC7A7D724C377AC51A5516639CC0A007F40D1BF6D
DB36320E70319F74D2498F3EFA28398D930CFC64FBE2F2E610A3C4A219770EEE
73EA4F403D4FD81992E4ABD9EF93CD679ACD36EEBF6C26EBE33BF4FC308AADB4
8592018D800B2FBAF0D0D5876EDDB675D9B2F199995E7B325970F5E13B354D49
575143F4AAC36408244588B2482457E1A696D1021265F68A1BA0A0440DDA4301
FBD0A5DADBF678A2F8531CEF8B75C852CF8D1E1F3860F2CACC16B9DF4A93C827
F05F9411AF64FB6181C83285B2EC494C43A283234E3DD92808DBA9E70F5E9033
5E5EABFF8E3291288B9F53C4F0D608CF2FBAE822126A2831DFF39EF73CF3CC33
14C62075C2C58084852936CB6DDD92D9532CFE5095A2D4838485442F9D72A592
8C781C39C765840616DA25289A893D826C522668A2B3E84F5CA94E63C0DB3DF4
D043347BC93924F58F17A17A14323B78F9BEEB5DEF3AFCF0C3D1C4A1459C4C24
4D6A02B6D828F4C2D50FF48E4821714643B2DE10DF17FE4CC90294AC45AF9E19
96F007BC208E9F6AA7090651E22F17B193DA2055448B41641C8EA6AC3931E1AD
1B04E3D0AA2BD42575B07865BCAB5D956FCF4A5E10DE674B0B8179B51265B292
693B350F577BC6CC52002994FCAED7D53683370DD90733AD85106EEC16BC626A
03CCC58DE2B9137A0A16EE9A160DEB25B3E40CF88737CB5B5B4AA48E0EAEAA55
E66DDD1F8ABAEAC5D9A566CBFB1620485FE51FBBFB9C9D190B82FF1BD80B9E85
CAE6AC381A97DD3BA24CABD80EEA469CF286DDE5A78FCCC973BE350E9D69DC6E
CA4A283EFD86A53B5FC89E66378F80811B47CEFFD49937DD799BADC6D070870D
A3E5BADD5E846EC233664B2E7CDA5423BF748BBAE445E11D3254DCF4758531C8
6D87194845A75F7CCA176FFD1ADC04BA37E87DBE72CFD9B79F73D9C5A5523A30
4DD7F38C4A1D415CE56EB10F505D59331D0BC65AAAE45FBB370897E5D63715DD
AE5D164364C29D9D6C4B0D8DD245D7AFBD6FEDD5F3C500CE16A55AC3B79B653B
F06FF6D00A495F5D1884D41E585046A2D016957CA289CD62EFDF48E423412F09
36F06DF5CA20F4A6A23B768946099B24797130BAA3BCE2B2E26EBD06EBD5F1C1
C25CB312EB90B572FE4253D6245B2476C553416697DE868BCDA17CC6BEA86215
4717D7CEE315EF931E5C7FD985762E7432752F0045851055FEDC81EF8BAA6178
6369D1A8021E138C58F72F743E902A1A0335DB80E1563A5B75DB41AEB3A2F637
BB61374CC4B09848E9A6AEC3492F0EFB7588DD8B4413D12CA27442E08B6BF88D
6F7CE3534F3DC5FB482211C3A49B37DD74D3FAF5EB117CE1265FB972258A18BA
C1C14B40A53CC2B7DEE58403DA0F56AC58B17DC776B17414DC639A6D0B303532
5A5858A81F7EF894AA23A894CD949ED235498E02DF0D433C20AA3685D33C0E7D
E1D711725F9163DCD24AC7165011F50B8E2EE8D5CFEC13E9A83D22723EC8FDE1
FD86A0F97EEE6CFA70E89BF63069416EDEC4228C6413B312B12EE1803027DD73
B63B9D4EF8915CDEAF49137012147BA25875E1CB4235802F98989F292C416791
FC253382753CA90D3C0B251AB784238F3FFE70FEF9E7A37649F73E543F816F9F
421A491639E8773B6052D2D1D1515C1E548FCDD65BD20EDB2F98CCD6C031C71C
F3F4D34F27151E657C5E70C10577DC71071D4957A00170108B9E8E8B510EA809
924CB1F844E4674B727BC0CB990DF129289D8CE699064303C369C43DC38000FA
B590641BE12DF018EAB2475029D90C030F43858DFBF0AACB2EEEC4C1C85829D8
DD88CF0DABCB012E87655169E6C2AA7AE86474767318E4F90BAAAA0ECADD2537
0A206C16F38566AD895BA1878822DAA6139F81D922C016595A4AC5577452A111
DD04715A4F9F9F0E65A7755F431CD814E4A675BD9EF29400965BF9C5BA04521D
054DCA57BBC68275FB91EB6FFBCC5F97E3B9F6864EE441FEAB83EDDD6158A8A5
AE33C69E1DDB71DFAE62B1546B56337EA6ADB4212FEEBCA27AC85261FBD8A985
965A0FEEC03BACF2AE6B98C5A5ECA7333518014389C3970607D30B4B9A70E028
0D51F0DC82359323BBFFAC5BCFB5E04669304E55AEEB4CC1AA5D572DC2581B2F
A1A1A92390C9B2C6BA17FD50873BBAE9969A1F1B999B9F150D9F83E8B0546E7B
A71EDDA54ABF1CD2EE6D49A94E2C8DBBF16CEA3CE89A8ABE318C0C08AE12120F
36DB560DAD9BBC97AF0DB896E7B4E573B20D44E817574BB151BDC91FA81683FB
D38D60B79C12F3A3DA391F52E675F56ECA854BB47428683F4C19ED6FB3063E5C
D14937967977CF84085837802E8F7937CC59A7CA9D35F1E4DAC1BD90B34AB938
7CA1DDEE4AC66018FB92D98855C328BB268AA173F3B54945BFC6BDE6E3EBAE38
E4E6C2BC55BFD513CF1B0A7F9111E43D30E3CB1644A9C181EE0BE3B0FA82B139
98EB5C86A26A15DCB00BDE31003F293F7CCEF5D73F714BFBF702BCCCDEAFB7D5
06AC39EC8DCF6E7FCED462825F5CC64FB288A009855A698FE397B4F20987F14A
26761C2A9642F9B04F2092D785301DED6DA6FD82BE2FE520E255E91D20F6BFE7
762501E809C0A2A15D989BAF4F4D0D0D0E0EFCEC672F1C7BDC145E677834AD28
92AAA1548B82C041D18FFB5156A496DD0B9F86BD165AE43097441D1D043D5A21
DFEFD84EA7ED365A4EC7F63C17BA54D2224B8ABC8F173E08038843095E0D7A27
7D6AF4610181F382E206712E8A6CF20E91578A4506D752E184E237242293A5AD
636363A847CF3CF34C8A1610CF337B097EB7983EF4E139A7E570C7B7A4CE209F
0FAB7702B32886F04FD478127FBDF0C20B6FBBED361CEDF5D75F7FD9659771CF
4B92FB94C499CC85851EF4C62B50EB12BC05598ADCFD2DA941A53E9D355709E0
BFCB962DC32B73E49FF3C19271721E3677D0A43211A20C827EA2115521109CA1
2BBC8A26208D8E53446E256216A1BFE23AC75BE02B469483AA9DB315E89AF436
3FF1894FDC7DF7DD3403AB56ADA2AE3838BC5DBB76E123E3B3B0F3F08C33CE78
F0C10709FE533E2BC5F9F160A230117EDCB6D6C69569B6724EB639521FFCF421
959BF708B69F5BE6A00DFAB5908AC1BC6B34682BF6A5E51118D905D35C2E3E39
39897342B9B68604C3B7FCEFE96B7FBCAAEB343FED55A600AE85527B79F59669
C491EE2D20074A94023DC87A50B7BA9347178C9F065BF36DC89660E622D0A594
F1B958AB65AB5016956B63A07F1846E756EFF9D6B6CCB9137E63D6BD1B46E591
F9CE0218B0DC1C9FAEEE45BC3AE42F2BCB36E04997F510D77DA543F716B6FA3B
44706250D33EE707BB413D2F0F7251BAA9BC0C8A3BAC199055E804A311B48E05
FB0313F1ADB3CBBC62F96CCFCD44CBAFEB2EE0FEBC60CCCD4A831BF7A2765EB8
6428DF8E1BF7CE15A2523DAA4A3118999463BB855009AE5AD9565E1AB80F86E7
D22F801D6BE3A02D89065E9F057DAD293C4557D9B203F266C8799986960BE5BD
10CAA34134BF1A529F3CA47BF3F62CEAF7CB8A8D947FD4CDD15EA95DFFF8409C
8EC6EFA805A1BAB8AE68959BD6A3434D7BC98F516AC90AA410A5775EB7041F56
D3376A7657832B9A038A55BDB6A3AD84F07FE5C3231B02CB23D83B5D368A53EA
0DD51218D3438B8262A8E51D1A67B78EB7E0D402DC53CF3665FB5C2D5C3538BC
6E36CA43EBF431982C65D63E87EBAC79F5A4B567E120F74DA9574516B8AD4BB5
52FAADE186274FF9D447FFE14BDF9A59D584ED215C5FC027886F1170D710D904
BD46103D4705FB9339D99AA91CC87B4C8973E418C0C58FD2637E7E1ECFC22D40
9DB270AF5D7EF9E512B3DCE036A0BC1772DF1F77DC71BFF8C52F180D1D2C4DD5
D02DC71530BF98CF55962A564AED76512AA5342DACD5BCB7BDEDE8E38F7FDB13
3FF9F1D4D4248AD397B6BE90CBA7745DD57414FE28F53DD407A8157ABAA1B793
A37DA6BD2AED0B30668C8CF0FB07421354EB9DC5C56665A9D56EB99586D00491
7022A1752A6280618C9A00CF3F289930BCBCC2803ED4DA0CFAA18EE1E16162AD
E1B6E6C4D049EDD49321040E5D1048C4D9E3A02EC3614AB1E59AE4DF4D137036
0EFD8AF7A2623D8A61502625515050B440EA7718A6E41CFC06051385F4F1601A
3FAE06E2C1DEF712FBAD5A70CEF14F78351464781714A6F8203445548540E964
D48B86F3F4098F70662AC97D1C158AD1175F7C9139A992F41B780A5E874788C0
9C22D8E449A38329C60589182F8FF695B824393F64C5AE5EBD9A1A3F7083E564
D7FB3FFFF33F7FFCF1C751CE123920BE599C525A03DC3F952264ACB4103711A5
39F9CDA8AD0DFE40157F74775242A8025F78E105FADE84D2E64DF79E73DB8794
1A840580B3D49C64784ABC6CCF8A6DFFFABC3AAF0583019C9E012D8047BAB00B
8A5609AFDFEA34938174BC662CD9CE87201E07B56004B50C3CB8B472A1B853AA
99E70E38A5A591EC70796971C5D2E8F417E611CFAED197AF3CE5CDFFFC95BF15
043BEB2661760F1C2EC1928E4F6F488EBE1172D23195C15F1BEF939B8779A333
7AEBBEA26FD4AF3E6BFDD5B75C299B60DA9693EE4421AC768FDA653D97EA807B
93A646E3E1E588ACAD6E760CBADB8CB34134EFD5B2B93D9DD4AFA2CEAEC1F6AC
978770686C726779BB1AC46ECE4F7F46755A4129CA559637D112B282BC0ACB1A
DA73D606CD431923C1723B33FD95B6B947F5211DA2A0EEB43C07A46C21132BB5
75AEE5FA999BE208BC86E0D31871A179284CCD5DFC7C50E891B9EE06EB6BE9B8
ECD9662039D6B2D2483DA8E6A4D46C3CA79C8D5A4CB1BAE9A5E5AD4BEAE77EE3
CEEFEC6D467A6987F3690870E18CC28A4A6EF7ADCD01B7B894AA094089FF6BCA
447B745E9A0DAF5045AFE9BC88488F7E2DD79D8186D134645D5BEBB57388A5AD
D1AAF4C9D7FFC5C633FE5A95860CAFE983AAA4A5C876F179AD0B34395486A4C1
1DC6CC079EF9E31F3EFA4B272A140FD9397D922BB46F0E56B60A3B6FAE1FF0BE
A5F3B3E521D72C05515BF2AE0E47DC31A9A484CE4CB927FADD9B87F47279F416
CDD6143B74EC92B52A3742BD1111AEE13EE5FCCC64592BA5AD936B9449162051
8A4CDB9992FB256E2C8390F6C4134FFCD297BE4431CF534F3DF5EFFFFEEF69CF
BF4A9A2ADA04A6AEF5283B7C040D87AF59B67C6262EFDCCCF289611455131363
8A1A9BA65EAB57B76E7DB1D56AE02DAD4CCAB2F02444009E84A6608CF64BA0C8
81040AE15E14659A12A36E400D81B2162494F2B1ED7AB586532E77CA15BBD50A
5B3620D242596D7763C7055CB5147B39982648161EC3CBBD43D44A254914CA40
9BA4DEDAB56B376FDE4CC49994054B750FA48AD92C206F1D11F53CF2C823EF7F
FFFB39EAFB3B5481EF57A39B0C6C301060C2674EC3C57BB1BABAE79E7B2EBDF4
52148B78CAE9A79F8EE895C6F6852F7CE1ECB3CFA60544CD99393D14C77FDA69
A7E11AA08BA0B05BB76EDD030F3C408E720A1A51F881E57E9CE81FC9E3A43FA1
40DCB97327F43382983A90D2C0923C1F083BBEF7BDEF412FD515010BF39973A9
3007DB93096C07D404D4F01207B97EFDFA2D5BB6A051C2AF9E59B5A167D01011
05095C767FE13C105F21E92D2EE620354901733A85224074596A9AC4DDBFD99D
25ACB7B061B43391D11E11ACA187C4E676C3F1EA63C24FAD29E9942093E83653
22C53E8BE210265BDA92EBBB56C60A22DF0B5CA1D11B22E95985028A12D9A983
87FF9524D052508DD222053E90C3C1CEB29A5A09F3CE797FB5EEF37FBD39BD94
B7D5C65870C89C685B53CE2AC5613B2C9BCDA60CFFE7FDA77DFF7B3F6E2CEE76
0DAFE84F4641E7F72F7DC73FDFF458A0895E63F941CB6976654F6F0D0857A7B2
940A215D1A564B8BF2B432E70E01CC9754E8E620D34533030700BEAB1AB1E0DC
0914148A206FBCF6EA4BAFBD7678F8F5B5F9795017FC0C22E1928A76BE5E8D70
7BBA962675BC224C5407674B955427D38DDB452F27E74797BC97F0D8A80BB6AC
F5DCE85D6B2C033BC73AB91908BA251BAA45D06B439E561EF10F69C13CA43C1C
088A0148D74D5BF8C6D4AC6AB78AE3C591AAFDAC83F7D2962BAD8E9CAEE2C636
BDD2D0204C3BD595F5F19D85BD5ACBF455C77033AED54EF9A26F654781823B54
8716649CE1B6E541314CCDB8DD8CA79420B3C7681402DCE8D0D4406E892C2B1D
BA2D43D00B9AB1ECB545678E43E2B6E3C9B3614E3C6F564A75B5D92086743CE8
799560B93E346D96C79BCA9C1EEADE01EF3B02CEC2806E2CE5DD426475966C7C
9E508EA1308C4643DADD1B54844D16E62C69D4F66A9AEA5D7CE9B90F3DF4D09E
3D7B98D19DF3D793509252A22141D8C3E98EBC2370D10A772BF4CD0AC6AD94F8
41CC307451CEBB3F902A901459324C458A03CF8F4647D26F3FFE2D280A72E914
6E832074C6C7C7AAB5C5A5A572AD2EE2B129CB2CE4B2F942064F51E4100FF09C
4EB72BB8360433A0DC2BF78B3D49F61535C24DE7B71AB8CB43089D20EE74C246
3B42E4DD75200E5146A05C531B8DB85AB51B2DC7EF0DF060DE212623DACF4144
9A80BAB652560977D1A12656384794C28F8A8D8C29CE6D4FA691E05904A2A19F
E84961497673BF569B20490D4BD9389CA2436F14CD178AF7F287F9B1F15FE8F1
E2D1F794E648B28F9286F15FCA71249F46D2D621F72215E8E10C90CB9E5B0051
6E127D3867793F7B8B2BE0B84F32B145F138C9BBC56601DE6E6A6A6AEBD6AD34
EDA40CF66B9BCC3501EF7AD7BB9E7CF24992C5E4A027B7129AB777DC7147B2C9
01472628D98E729159C5D264128B09C11D7AB364E7D143B132E6683CB743805E
9BD2E9E9E964EDC57E3FEFF30E05919549B73B6D59EF1128B9812E9AC90B2A7C
D05570A3C181B1DAFC02DED8893D4829E0F4F2B506738D4A9356731C82A1998A
6F058037E88A7663A6042E9AC3AA6458B1D39054887BCE529153A04ABEDFE3A2
C1B951A408445605503B25DAC18AB880D1230B42450791A6C7888025A3982FD7
AA387643B63A911D82ABA6A520F2B2CEB00BDD50F642C98594C820D23345AFEB
83EBE2E2082237C29B88B941D594F1EBB6241DB8834A7232930B86B117A5FF72
5B40E8971CD27B67C24166B8E1C445A6B1E12466AA48253B92B2872917996113
2100B2773993F2D57BD51DEC4337E27A29FC97730720C192893F735F2C26FF67
3084C207BF7CDBDBDEF6E31FFF183729F72F6127304780C99B8AFFE2B0F10A08
B666676789CC86163FD7D572DF24DA8907635B6152997D09ECD00FB511E7A59C
686B0CFD9AAF035EA85428566B557CB363A35944FAC71FFFA65C2E2DC9B11A8B
60C0C04069B1BC17C7B6B0B8B75C5EC0976E65F44231572CE6ACB4AEE9B81ADD
6EB76D77DBB1DFDDD7B7200EA3B82B1483E2CB4AA0F9226F288C45B32707979F
23B98111FAAA14671529138456BD0E73F3CDF9856AADD97011A245AF4D139067
1C9FFD431FFA10353FE1928264AE2E4EE5B9E79E8B9601CE0321717E4F743CC9
23EAD3490C0D2483B8D0E3B56A82A44D40AF83797B700C131313279F7C32A27E
7A65C46D47D14BDA4254A680DA822C187A4C1C24B1D7E208A9933B75B720EA7F
928C9C3DC53424D4F58CE423BBB0C9F0E4A63A2C37D9EA4C5AA9245E79A3E21D
F1AC646A33F4E30494E5C9093F244CF141706FE031D56A950E20B18E3F53649B
F413A58DD206A02036AF7EFC13BD1ADC3FCC629D9C5B9A1FE6F3E250C42B3501
8A249C67D4EEC71E7B2CDA31D4E3418403DA6DBA0E7BA28E39E6985FFDEA5778
222A5A6278A68F99323CC72FA86A1BF59065763A4ECE4CA1088CF195B9EED0E0
40B922EC89E191A1C585B295DE17F657445F77912E818A41F41A8BF62548446A
6FE6C34451774FEE4BF1BE852DB0646F152BAA8C1A05016DE8DB61E4C99A1AAB
3AEE2CF010588BAC8D5C3EDDACA3AC19A8D71ABA61786EB7777971BA65C9DD4E
94B114B4451A1DE79AF5D75CB5F19A6236E7D85D3FF40786F145547434C834AD
72905E7BFB698264C50951ED72FF3B5C9CF81EF91550EF71FC86DBACE294AE5C
B912A103F452213EF2918F7CF5AB5FC597CB0B8CD600AD46CA42C64B7DF8C31F
7EF8E187D97AE3362FB81A3FFAD18F7EFBDBDF46FBF577F0E2D275684993B94C
1C651420C4A1FEE11FFEE13FFEE33FE20A44DC46B726F14D9A0C4F39F2C8237F
F9CB5F42C29FC999FEB81FF12238030452D9E02699333939F99EF7BCE791471E
A11071B2DBC761871DF6D24B2FB1A6B9EEBAEBAEBEFAEA836902128F12CB4402
7DF46E28BF90781D284504B418757F14A2EA2ED89DCEFBDFFFFE6FFEEDA3A9B4
11475DDCF2664A191B1D9A9A9A2CE6B33854C340D911F69C506233E3E0E6E7E7
70FF88E621393D9FB38AA56CCAC42977C2A00BB1831B537880047E09A4D88F21
90440E75281290D0EC8C7B8D61D1F45010CA88D6467E10EBCA68E89B1058CDA6
B777BEB2506D561B41A5D27103143A91485495445E130E58A6626359E2D82F43
1242F7C919E19F393794DB0C247D2F72BFBD7BDC6B468FC7AC5FBFFEB39FFD2C
E5E0B29780B3777E67B658FE30E527478C93449BBCD3D8C78DF745D08A460CA7
7512D0C05F718414A4A526424C284D0A0F5FFA8D37DE48E52314BC25A14CAE30
C6E6DCBB913394694ED888619CC5A11446284CA6047D3A742A8746D94A5B022F
8E13889B1F61FE55575DC5F510F4C12BAF5AB5EAD9679FFDF297BFFCF18F7F9C
8EC771E29CE0136DDAB4E9BBDFFDEEBFFEEBBF9239C28572F827BC232129F253
E1D48D8D8DE1FEA701705A30A9165E2DFB69020E0EE17E46D545B3412280AC28
228BC5AB9D78E2898F3DF698DDB50D5DDC0EA530D12B919C32C3206DA59A6E47
4EC99D4EA499BAEFC49A9E0E9CD6CB9601F49238422F36404E59E0C45127947B
2EC900A2180573DCF57C2F86E8BFEA4845D3FB58D1A5C013A335F55ECB907E76
750E522E442E88165D6A2FA71DAF1CA6454D9366288EDD2BB92FE53F75DAA7BE
F5F56FEDD9B1BB5B0AC4812D0F0235972EBA6820FA8E81562654A08B12411ECC
0FD41B35438E03B185C13F78D7CF036A025A2184D9C938A32C5E32CA93996304
59D8D4C6C3504CA148A5065904F393D7A74D447627FECB448A90606887845385
4C90DFADD34B920481B6245DF6E8A38F9E9B9BA356BEE469A4F83F85974E38E1
04541238542204E59C34B2D4E9B288501F7DF4515CF3F825D572921F82B61B27
8932291CB57DA46E5778299C3A5C8DDDDEE7D5E58CC4A97E0CF70852F199FB12
C34DC543581EEF6BB5B37C627C66760F0A7DB45A56AF9E5CB9623293B51488A3
58A8A6E1A10190FCDEDED8D7E5B85EAF5125A7ACF9E99499C9E2D3C6A2D944D8
8D4347788444832351392034414C9A005F6A1C38A807C40A9364D1E24152F428
56C478A37CE419106511AA541AF566276CB5E3A5BA5B6F8A24F16EB7874C45D8
408EFA8088240265A7E07A22466B16D0FB495EEED8434C79FC3D5B0C49BE3CE8
27FBD34264B1CBE55DAF6254D17D93F55F88779897892B186891918626904E6E
FDA40E2040CA9526B41FD808A5F78B8F73DC71C7FDF4A73FA5A49AB3CE3AEBCE
3BEFA4C7A13193FB9B7449322D92243B2ABC8D1B3772DF73AAAB90135D859356
17F348F31A23031C7A1950CCFDC0DE331A2D9511D0CEBFECB2CBAEB9E61A12E8
647D93BD4F99D1DC8388763B9747403F78E3F53E90E85094A4D4C6A778FDEB5F
4F74B390005CA4CF0EE61D62EE45BA1141FE33CE38E3BEFBEEA3EEADB4157163
AF59B3E6D7BFFEB5914111EFE38A96F7F5A8022B6521FAFBF9B3CFDEB6E5D68B
2F5F2B4A8C7069A8067485AFE6A8C304E9088E106D505475337333821D5A34F2
053D9655919487239143E129F2719F9872CA0D5D5AE162E67B03C77D18AA8168
61162B866AF8812FFA62F5DA0F18100429A14E65DFD33A8112425B814003C3D1
70C378AAA76754D1BCC5062592D392652B2D290043F4935406ACA1C5CE5C71A8
E4C4CE125A0C2253CF4CEB19BB563533BAE3347A9D677EB32660CC1EF78946D8
9D4DB629A71210AF14AD1FAACCA7142F32EC280392562CEFA6FD94010545C968
C38B536A001E73FBEDB7DF70C30D547BC88D6CC9B0784D9A8036295E99FD8A84
2F49BDA1F064B3958D1E32A6718590CB8B613EB1D313AAE08A5AD294719F346C
6A6AEABDEF7DEF030F3C4056141FC089794C7E43CCF68875F01BAA37FA0DEF85
03CA9CCF473B13C74A39E694478F400031A2C0178EE88E1747D4307674D5AA81
6513E3F87861E8A38D8ADB3397B5F09D497280AF1001043949BA5D9B72F32545
241AE93AA8B2E88E1D05DD30125E7F34FBC4B044A119AE2F5153805B070D02C7
9605478E7836507531A18AACC5323EBC1679A61467A250B1DDC08F14C7336A8D
70AEDC5D5AAA55CA555C1BBDD44B8504145E90FD397891F7BDEF7DB84B89221F
5E6110903820DA4E3C6BD7AE5D88AF714EA8EE1A2784A037F42B9592CEB464E9
2C49529AD883BD095A499C094AFCA3C432CDAE76E859C1F8036507B33B9BBD19
741D4A6B21FA046E5BC1149E2CBFB8C928BEDCB7BEF5AD8F3FFE3855514889F6
417C5F1A186119B2D3F1570AC972C7661294B42229E83A323282B7A06F487452
9361F61451CD79928B9B8A0068F9B2BB1FB1FF8E1D3B983F9C021E1475601D8C
4322BF19EE705C786429734A2B4D2F6179DA4B2CCA71D828AC5F7CF1454E2248
AAB48369027649E13C1372A2143D4A79A2D809299E7D6D30025126A64A9A28A1
5175DBB1BB819DCEA4E2CC60776151C717676A76E021A2D6636DD21AD966EF12
1E7F3CA3E74E0A21D41084793E6E077C3F6A0F57CA86BCD46908BFBF0A6A43C3
63C45F750883088D5F343E4CC5ACF955A91775947B88C8344C341F6CA7139944
73AF097B20F00D846FA6E929E94243192C968E7DCBEBBEFBA3EFB4ECB699D29C
AEAF6BBAA4FAE974A6B6D42A16B3B5460B65FDFADB2ED978E9CDAFCFAD7E7E76
37E8168E2DA39ADDA02D658C40F5A5C6AB61EAF8150CB5043A39FF823AB9E21A
38E79C7350DE91C4648E13FC1751369A838485E99AA8CE9F7EFA6922DE49A684
D05DC8DC44DBF1AB5FFD2AF42A5DC8FE230F27D187D076C685C45460BFFD879A
20D146E3F4682EEFC7072171CF6D4870CD9F76DA690F3DF410CA74047C44CAC0
C15B72879264A76D42710EDA86D4F28F8C7E0AB0E13CA0DD9F6CD04BCF4ECCF3
90488F0E0EE2B5E37C0A89D95D50C6EDDEBD9B70D9962D5BD6AD5B974C624323
170D0232825018BB9E3B353972F8E1871EBE66943829EDB6E870303458324DA1
1E7543EE956875E9C15C779FDDA7EA084F82183C45C25F510774E308A59B0751
A3F70E4361F24AA28DD0BEC0A3970E233F087B7C733A4206BD871A3490B4D0D7
54C8C9AA114452ACA4BD20DD6844D38BDEFCFCE2CCF4DE7ABDE5A3FD8C36462C
89E4D2681FA311C938D276BC22933A803E24657089E08627E394B934E88064C7
479238E45EB8F9E69B116BBCFDED6F47BB0FFAAC67AFD2B19D3603879538958B
C4312E62822ACCCB4FB602E9576E24871721033359DF40EB9BCD4646255CFCC5
999A78233C92562AEA0944D6846EA0E741C223F1A971C6F05762E0815E7D32DA
AD5FFAD297F02C3C059525775EC3717EE0031FF8FAD7BFCEE58A3824FC978381
5CF9453179A22721D6073A60BF8209E8DB5EF42FEA577C6A2A3E887BCC229C27
C7213B8A3432FBF77E8A8703D1DC139BA403DB6D1C093FA04D002F2FA180BE87
573483ED598438301C242206C1FA6757E550763B3E4976D3323A4E877CF7AF9F
3AB2B57DBE15B7464627B7CE6F4FF518FBED61D35E721450DE75FCBBBFFFC3EF
9B29B3E3B6F1543D1C15494308DF738850F466B30EF8BED256D46A6BA6EA8387
6AA0B770C5FF1923DB0E5A269A501EAA875095D510F56F2C5AD08006AA9335A3
5C2C7CBD2D198291D2F2D1D2D47F6E7FD25035D7B7538A91CEA65A5E4B4D29CD
764B72074483C5B46A648DFAE2AC887207C1C8F884B97B870DB29D56D138FC9B
2F7EF1CA7557CDD4CB2E68A1F46ABDE192659271BF6F20A56310113237EC230C
417D4D7085D026C285BD76EDDABBEEBA8B0C5F520F941140AB3A598CC9611BE2
7664E541989D83C308F2A87E3089AB7EFB0F479BA8F27C3F867642FA1C1E20DB
97D4CF79E79D77CF3DF7D089948E9C2CD6496E191CF9DCDC1CE76D272B87B8AF
1741104AC9835ED781071F7C10EF42F60A5942BFE1BDE075296088AB99189B71
D2497ED12D8F39E618C4CE6C9429928C40A154B08E3A7ACD6187AF42809849A5
29033D651A78A2D2637D30D2946CE793A5839A806C1649EA462218804F88CAC0
157DF7C08B71154755E68D4038A4A8BDCA67843A9041011B43202BA1A1ABA994
D14BDE37244DC74DA12959553145537025ED0656BD11ED5DF41716CABB77CDEE
9D5FAA376CA71B8591E8F72DC5FB686DA47E3705E8F3CA1D5013B06786D8C470
96715A6FBDF55694F2780A558D11D6267D4EEB92140387D99942E737DA04D0EF
5783174721428E45A23CA3341B627D4053E68B5FFC22673771209A340191DEB0
97295949CB3D734854D190F66BF9C2FE13DA66540CC166D0A73FFDE9471F7D94
12EAC93FC3B91014D6A385480604DAA488E5D9A5CEB10AE807A229559F3C45D0
6793C5515121DB15575C71E79D77D243E1EE25394E0FC20912C4560B0962383C
1D573C1168B3C500FD98300B71E8974CC7FDCA414E35613C48DBF2809A40EA11
085231361173B1D39638AF98368ACC2CC42128F4D386E53AAE8410DE52101F09
0EB51050FB2955D19DBC2647302888E4C406E86D580DA1783B50443FFB089428
96A120675A61BB57E20C392303D5D88811E7A766602E9D353B08D464C80EA535
C9A8CED6A4588EE5289D4E054E24DC4A96D6EEB651074825886B90EECA4528E0
7D174B155F1511827400B605CA80AE54157FD19F1A999C5E980E245FCE681947
7315D70D42390D9227BDF3A8774C3F351D4058D7A61BB97DEDD4FEEA931FFAF2
F57FA38A5458CB970EDA11888566D226A06CB137BFF9CD3FF9C94FB8A01DA70E
150042E92BAFBCF2FAEBAFA7F9C4978208E33BDFF90E2E27B2FFF07834D17071
222E618C92243F2718C44CC34440494B88FC51544F4A66E211471CF1C20B2F1C
AC84F6551E8AF206F12970319070E0F80705C36948445F06FD84CEA48B82303B
E5E931FEA62C068AFDE223E0F1F8A4B49289248DE00EE939CE19C5BB73B93B6D
37141A08CB7EA38693383C70E8A187A226C01F2EBAE82204B6E40BC6C77BEB5B
DFFA8D6F7C03ED6F4B58E56DC3903369FDB0C3574E4D8D4F4D2D5B5CD84D08CB
ED8A5887DE270D56B45E2210446435A388232D1DC7B68C3B43F214395464349C
9D38F2A2D8479BA037ADA245B670856A083EC48B44A3571247C608C252A64635
A2A666E01131BE3E358BF68187905F46319AAB37E3F29257ADD66767CB337B2B
73F34B95A58ED313FB2274DCEF248CFFE21EC6D5C6ABE795DE2184C0B862989E
09FAC96AEF7EF7BB9F79E61914A3C9DE29BCEC58E642BF9917C9885729D2E63E
33E465E691704E3DBEEF3BEEB8030531217792D7D0C7A749BE55F250533099A2
327C35B61C4942914143DB86D40C954AE14AC5BD77CB2DB7A0C5FDD39FFE147A
0DAF719DE1F1B81248EE134D13BB56712A38E6C66C1C4C7ECB850EE41D927A9D
21C889C424B8BCACA96481A0097E68AB90638A36098740180AD1FC53410065F1
124D3A9BFFF4579E5836235824D105B9E286ED98837987E8D7640A20C126F238
251F1C97108E07D17AECE1623650363B5157C0FE3CFCDE1F1C339F77661F7F09
76819E4B794AB7F09163DBA9C520AEFEDEAEC39EFADEAFA009868AFAD37403D7
0B5C2DADFAE70482754EEF51D578B9E0A5D0FECF8EE8C0D505338B40D2C52BBF
F3C4B717D3A59F3FF98B999DB3A2B58091E9B471BBC95A5A117D24B3F0963F7E
C34BF985DA776645AFB411809352B006E476909E8FCD5C2EDA0BD57FAEAA5D7D
D3DA1B6EB9E5B6B25D46AD635C1CB97E282AADD092F1E595F1AAED0F6D137CA8
2A0C9EF2BA8AD5C8A595D27CB4EB2BBB85C5125A92FF1A3401F41BBB921B90CB
F8938B965775327783E69FA100055A59139016A72D499CF99436BDDF5EE07EB4
94FF46A0FB605E94830AD07E120A851E497CE3AD3FFCE10FA3FC652846AB8222
16279F7CF2D7BEF635AE95610B3559AAC9255CC949632A01AEAA2181465E537C
4C4A79C76130B6233CC7A959071CFFBE1FE82E28E8C5560D7BA029066E388CC7
A152DABE7D7B141281170C0DA4C7278656AF5E6665B4E1910109A19E17361B0D
11543453BD89883559F121E86D7EAF9F9D0D84BC744D787E542592140F22378A
3A61D0C503A5B8236A13A45895635403862E0B94A9E1320E550521A76C1A8A6E
6829DD34345D55F458D1213674CDC20BBB4124A9D9281EE87475BBE3375BDD72
A5B9B088FA60697AB6B25445D340686ECAEE602C09BD38ED7E69B6BC0A695112
D00BFB1F9C65B4D42835906428F419DF2091268C3A83522199B6E8551432DF91
DDF76879A03266A2374A4B25ADC0194490A8E4626D44A790519CECA3905CFDEC
0FA1F581DF9376813E4F27A10976CD275D90D4EA19CFC5EF519552EC1AE7047F
20070B31A6E1AC22CEA2841C7AFB5CCF42061019131C7BA71A0852B43C1E2639
A75E4982B73E118621F84243256F03677D70AC0CFA6C51ECFFDC2FCB90C43A89
956407E6D7240892EF912D7A9E5EA1D14516664A81E5B5EC4BD9AE66077E781D
803D0A5F981FAF96F6228C2EA4337F59D3A6DCDA4D596838EA157AF0B90E08BC
1415027062C81F7A5865EBB62988B6A78F06FB4518F5E172096D02F82CE4A2A1
A656CEA58B61C3E95CDE850180EBA01067CD465ACE2E745A69DCCAE77FF1139B
CFD8E0C691F679DDD95B2CDDE05633F5743B656B5DB8128AC160FDBA2E8A0D39
1D3BB62B81944BE79A76D34C996ED8C5B737A9E5F76836C47ECE81E675596829
6FBF632A7C9BFFF3E3CABEB998DA04DD7815ACDF218D437C360A65D575424A7F
C4894DA26F4236EF7CE73B7FF6B39F91CAA482419A7C169774304B3AE2854C66
A691FDCDAC8EF43629579BDE02BB40B9CE9F16C37E3556072F958D19FCD1F2C3
8DF9918F7C04E1D1EFB630F6FB7065228D87C0070D9E47087D78419D0AE34483
2C0246AF92954E07B3C380500B550C90C1C14D0F4968701B6081D4A57DD49EFB
B8AE860645F206E70BC23E8F338A451416D6D4E4C4D1AF3B6C70301384DD6CCE
8C83489164427371D803C2A148AF6CBBC24B6BDBED7E48705FD2483665A27CD7
D4589170581DCF6FF97E47940B0B9881978A6425D235D930F17D2B9A2A4BBAA3
8908B386BA01AD044DD1155953408E75530E0D4D4D4792ECF9A1ACE56575D475
D0C056BBB65B6F762B351B35C1CE5D73D333E546ABDDEAEC139AF47699E58699
3EF793CB9C9D4DBD6B70F0E410A063A8E5B2DCEF4F002F2F04A349E74E61AFBE
F2A8F8801637A5C9930D419E74023E9B376F5EB76E1D2E82B56BD7DE78E38D49
4D20F7F9FD79E11E7FFCF14F3CF104BCBC0B1049435284F4C89CCC13F75B4212
FEA5E8021B3A9C9F03890C1C1A15C72418D4E052A66035A3366E8943334338E8
84134E78EAA9A770D173490EC9F43FF9933FF9D18F7EC417C477847B98DA0390
31814F77D55557DD70C30D888C88EFEFA4934EFADEF7BEC7AD0B489D400F7F1D
75D45168E67EF39BDFA4BBD0BB8813954DD02FAB8913157CD2CB4BBB7FFB0FBF
144E842770E7995E5ECF0615A96335C186A34E3BEAB9D73D071BA15803B738E1
74AA25AF2B5FA92DAABE7AADBC1CC6765E393B3E37B5F7A15DE958ED42A00602
44C90329A719497E346274DD7333686134B62C398A0188F4E36188164B971CD5
98FAB5FA4CCABD777499B730B34A824A5B76A1E48D7497799D99DA1BCF79E3CF
323F837B406B957CAB6AB68B8ED2800D91DE91E2BB25C58F1C1F6F2347418C78
CCD045024FC7691706F3F57A67504E3B7E27FA84658F36E15E3097E4912396ED
9EDB0B52305C9BD44199B966E758DD88BE30DC706AA5F11CBD2F5284ECA6A015
C829F3D0D7D3BC6EB9388BDD29C976DCD0033178594227A46B49AA32073B39B4
69E370B3BFF3CF3F7FD3A64DC71E7BEC2F7EF10B0AE41069FC7E5CB64909C06E
12CA4DC26F56AE5C4906F17FCB8753FB68992130A26C313623B86F15E5F1D31C
2639E149431C6C1DD2162673E49501702EE8212E098ED8E3064BF9BEDB2F08E2
36C228987A354A8A1A84E268DF0B0C551A192DAC3972E5A1AB57940672289245
665C1CF04662539DF63FDE861C2C048D05CF8465292A0A4A45D41BC8511CDA9E
D770DD7A10BA71D0C1BB2B6AAC09D7508C681BF501EA0C15D1BF2A1BBAF85517
192222315416659308330D49CE286A0AC44AD6E238AF4AC55A57350C136D9B7A
CD9E5FA8CECCD676ED9A9F9F2F7BBE52AFB763900BF952BD818B209255548C21
44FB22ABDC4091B63437C6213C7BEDB5D7A2004ABAB669B17225173922F0A909
F0E2C3324B07D3D8BD8A10A12E3704DB69871040C095DD53A83673EFD01ED84F
13108022CA1D5415385A8A2D277BFEECB7AF384C4D994854574C16036E00FC95
0AD0B8AC91C35F044F48AC53E530271AF1231C7EF8E15BB76EA589DDAFA98BA0
EC5FB3E685175EC0FB52EB66DCB4975F7EF9962D5B887A88AC6C2EDECEF53E68
2D9D7DF6D95FF8C217A05F654A3087F63F259E128CE2FA3B3C00D11C35F64BBE
0296F23493FBF5FAE0035EAB71C01CF19CFF4E5F7ABE95926B5A084D5930DEC0
A93A8C797069EFCF215821747047DC84AF20485FA206BED9BAB935EA1F3D7FE3
B3D916B40403849681A89E0A4183521374D0E6AFF615DC8B37A4DC516578BED9
36868C4DDDDA620D0F58E3BD7DE7CD4FAD3C696AFAC969BF5B82F60CCE2FDD57
3A6730D62AE9DBC06E8B165AE9A511C7B05337BA9D390F1EE8B593B44131E5B4
96B61BDD2814A49042DD5697D002CFBA7A550A60B33F06C38DB54B82E7274A6B
5EECA5A321DB282F6BE2E314AA796743C319D06149EC1A7C590F3FFC30B3F5B1
BD4B909670FD89279EF8F8E38F73650C2371CAC6211A349480636363F83D2D30
DE9EC95C4FDA62543180173FF9E4931F7BEC31629BC7D329B738C9D4C69963AF
F22AC94945EB933B30FE7768817D6920C469882A137FA5A6BF383C5CC338F87F
FFF77F9F9D9DA50003C50E69004947F4AB2438F162C6C15307432E9FA6E2470A
F2BDE10D6FF8F9CF7F4EC2E188238E78DFFBDE2731E10CCF69DF5853500DE886
8AB85E30C429CAC850696AE5D8F2C99181014B446D85170264E965343E241C49
1988D841EF4305231484149473AA6AF4720EE3D0F1BCBAE70B0791223B8A2A69
2A3EA7A46BB1A6C7C23BA448316E0505BF8F453E9BD22B9F8CE8695102EA2059
92AC879212046A0C3905F29132202C8E4876DCB0DD0ECA157BF79E85D99985E9
998AE7F97F71CA47BFFCD0C3027AA035107AA8374DC324794D9E07E8FB827991
D182A04546E901F80D3970B85915F7876117047B57508AE12266A8C87E0948C0
256E9F422E4BBA3517F4E2CF2B56AC4089C62E3BA66526CF3EE976728FB0033D
093A987284F22FE9BE6415257B34422FE2CDC5D890A817E3F17363E4FDF291C8
718413451D8428439CAC280256EC93653E3EF9151DDFD87147BB9DA8BCF1FB7B
EFBDF7ACB3CEA26921A14F494A6C4D33071F6D5794C5DC7D2CA99FD858664DC0
5CBE49B695DFED43B61D4E08355C63A7C7F278785A5A48C9D04DC3C047565656
EC29E8F9895F1EB97D45DBB9F3977A03BC153AFC590029091E0B0569FE15002F
6AF00D7F282E96ED861A2926C4ED5270E6891F7AE0B16FC58A9FBB2ADBDCD182
FB33604AE94E2B3A1FB4DCF2E8F3D39D9B852BFF8875EA79DFFAD2DA0F7F34E7
E682A21F3B4E3D8C074F5B595939034DFFC8DDC7E73B73CFEEDA61FC3257474B
FCDA0E8CA8B99F1D921B4E1DB777FC1FBEF6CF464A970209771B2D5DB1F85BAD
B23400AB6BF0B128BB5B931EC86A7977A9E91951685893AABAB7FA090F8A9073
869BB72F8201E940B0DB52360EB9DD49B293E6A67548E6020923E8E303260AE4
96A8747A32CE4F4524D4B6889DEF5C4F8EEB875602410A027371BF4F2F15D5D3
C6E41EDA07FC9031CD40908CFBD71A3F781549CD0B92F61417D0E006C79153AA
C87E056E880E899596E4C9AB143DEC3769F4A19DC221749A3462ABA6D7811B53
22E0964C7EEA7F0406C49917A9112862B3D6116B561E71E4EAD280254B017EA3
2B3DA8E5859C16C67B9B6C13BC2571FD533E1F85FB887954D754C1451A3A5188
6AA013C59EA1D9C26BA4E19F640D918F1EEBAA84BA4131225546E5816A40B42C
E8E1819E1AC01B055A188942332F42298C9039A72879D518C5E1C49222C9065A
871D3B9ADEB3B8677A7E37FEBB67E62F3FF2B13BEFBA177A95063184B97C96E8
BDB8108CEB38784D50E3143CE099679E21D38126911607FE4AD0980A46F0311F
78E0814B2EB984243BCB7A12F1241AD855C20C2A54224B1DD3385B947608D18E
52EC81C855D0BE46402DF589B28910822411395EC9CB448C6F84A1E81B5A7CB4
0AD93908BD7C5062A5A6885C92AA6F3F6F49B2CB0DAB3A7C467C0ADA57679E79
E6FDF7DF8F7385C378D39BDE44455B780CD5DF5375182FAFFD0262CC204DEA24
ECB735251F118D8DAD10DA42A841F1FA34C3D4BE98ABFC78CB9195C065D8AFD4
04E48ED80F0C413FA7F0B7FF10DAC5C11F7DF4D1CF3FFF3C4D94DCABF10D7443
AA37E234C07968D2467067EF84B5BA5A8E33FF38E0CCD84EB13974FE9B42352A
ED7C69DBEB5A47CD1CF1DCDDCF83AF1662FDA24B2F7FE0B14776BEF0EBA970C5
AE5C05CEEF643590EE82F4E2E83CB4E09ACEE8F8F0FCF98B3979A579A9BDB8B4
000F186FEC4E6D8FAADD5CD709C2926EBA66ADF3FFF1F626F09A55D59DE83AF3
F4CD77AE5B23F31C7D4693483486BCA7A6CDAF8DB322DA82D20E08C101111144
5110D0872809C6101134240E4934C4D6A76D6BDAB48808028550D4444D771EBE
E97C671EDEDA67DD6FD5A94B552524E9FE7EFC8A7BCF3DDF3E7BEFB3D7BCD67F
BDA70A1D141E45C0F9DA0A1C74E14BB6ADB6BCB71F3213086F0334393C139CA6
79FEEB2FF8D65F7FABBDB8E639C11797BBAE563DA3F7F6396BB23DF80CD8AEA5
065A4FEF4D38D35A3B3AB479497F254C36B61CB865BF624FDD75C90D6FBDFE42
181627318F8361091EBE2CD66FE825963162F19571C351427225AB0EBF825FA7
EA5CD64228EB816816AF201BBDE8A28BD02066305A2AA939E18413D03C2D3B21
8F8F12CFCA1323379475A37FFF07C524C1A5E0DE2245B3D9C1A624A9955CEC89
879F400128FD9450815FFDEA57A3C975ACF97396396957279F7CF2739FFBDC5F
FEF2974F3DF5141E7EE198519437BFF9CD5FFEF29789CAA84FA524FC2DD21AEE
74BE06E49915F3A0F8242469822F62F3A689B3CF3CED9453B7E96616851E7233
9DF4A95862490085264B4445294361F1C175B20AA9A0A62F2B421E884E34619E
FB908539C49ADA5735C530145324886668161016A961657842C4AF0AF2EFC2FD
9A89424A9C69142B718CC2400A93388865C86B8A54B72AD3A80D002A049A6DEA
F53851E6E63BB333CBFBF72F3CF2C863610C9DB69B664365B9E278AE78D9549C
C2BBB92E8A08858B9C8E0ED5BB13F7C1F7443A0EBE1ED2D3F94F78E87143C817
290FBB5D72C130173795B35A4F3DF5547C55243F48945291140C1561FACA8517
5EF8F77FFFF754F94C4A68B913E4D0B9A7AE6364ECC0C179D2FDF82B17E5B261
CEED71E019453AC479297C47E284586A99C6D076C1834BA7166FA693CD25D014
1F2E4756CAAE2D92B2B4ED575F7D35927439A2C574427A1F1527D3BE31E60759
39CC59884770FC705D32060CBD432C09CA59A7F08C9AF37FF143F206C79C9E9E
C65D95B843A79A40509B04BF2BC7FEE71B10A5E6FBFB8101CE27958197563F26
6F85E9EDEA41D4A6A101E60510983A7C398259192CD376BDF1A9ADFB560ED515
6DE04315FCF69D06EC91949B82711DE603A87F664367B65757DDEE491B616656
20C4290EDCDA850EF297C05437367A0B79235EB8BE0EAB5DEB63C22E119D06BA
00B742DD9EE85EBEA03B5674A30FB9A1A9A26B9421EBA11B99BA15A7D1E9A79F
BE77DF1ECF8A2796F2E006ADDB49E1D6B812830C9B7AF6416A262CBFBDDADCA0
AF7C7245F4EF759A63FDC8B5040A3AC13F5069056D4EB9771E717072EB13A809
BF353AEAA40CE1CFC8B0EEBBEF3E3485E9F4E231C6B38A37E4C31EAB3074E6E0
AFE40C219417AA8F61B141879011768F93D54DEF914D0AF88FF30B31A766872D
AE854096366FDE8C6B24D2C08B37DE78E37BDFFB5EDA2EE23CD4FF0E371667FE
BEF7BDEF9E7BEE610FE4BA0FA977749E39831CC99341302910422B65D42FD173
A538FA421808941E410C680A10A923FB2E1C64326CDC387EFAE9DBB66D991E9F
6826A91F85032422A56061B6D560AA6649403E5996017485A23A690E9A227659
913309521902499414A4AAD215B5C786649A4212189A881628A2578DC8A2C09F
350514811E24C9851229923462E4AD6A9266411A87910279156D8266734B81AB
A7E7124A1C5BB404EA04AB2BBD5F3FB1E7D0C1B9877EF9B466401C8169393431
F230A2A14A290DEC892B03E2F399A314054A11C1638A879BA361C4F8E8451278
27E7BD901ACB87920E3D315FCAF1C201D12221772105A219A110393E2A0E482D
743FBE17340E188B82CBA370047C0AD5F752D88D7470AA36A4202A314A8A4195
7BED52974D6AEA4B10A47CAA58C5A65802DA4654714247199F85DF2587159E5A
12FC175C70C14F7EF2133C6164EEE017711514422CA740E443E409CEE7610981
A7162786E6C5ADB7DE8A73266305F799AA4F3FFEF18F7FF8C31FA603C67C9C1D
41EC2F12CA6C9146220F7B671EAEA53C3262CCD2681D45FDDB2A8CE0C8320EFC
B7A6CA469C1BB6BDEA49E1DB8364430C9F5150D5893EE89B4DD03E0835989A6F
B963ABE9CA195E7C3E4CED9998BB776152DFB412AEC49907895C719ABED7BFE6
63975F77DBCD809C373DB97DCFC3C885ABABD057506018A2935F24D9578F04FD
20BF0D6A9A338803435AFA8BEB3F7FD5A73F3AEFC6C6A57AEF84015C95A9A996
5C1F3663A37D4DAC831D7DCC5590083F2D3A6A8559B75AADA0895CB1ABE4607C
C39B5FF7A52FFD0554C6C059925E0D4DF5B4EC2B07836E94369A7967511985F0
E2A206A26FC1E77D98AE588B512C4749C15B280B1E8EECD74D8793FC90E4A3E0
5416EE9B4D805794DA80DC9F22CCD42384B8DB39E79C83E79FDE38657F328829
BD022A0BA0AC628A6FE1CFC86A29528DFA164A293C6314B778E687B39CE957C6
4779B618A5C7FA507103C72D8899C0B08D2B79B13EF6B18FDD75D75DB881E598
139E6D9401D75E7B2DA7CC1DFF1C9200C01DA3D40CCE19A1681F0DC2994B8211
15879E4EBE52C00A2197540BBE8334288A1BEB75F3B4D34F3AF9A42DA3AD8665
AB61E46669A8EBAA900401EA591AE98C0CBC43060195D8901B9DCBAF840F2B97
8B3422819222C085F248C6532C678ADC115E2343D235D08C54D7B23549007D59
C1BFE6BA8A9220A7B2353997052C3BDA04A92AFA1BA4492800B5AAAA5C772AE3
42D196B530CE935495723B8A70C7E3A7F7CDEFDD7368FF81B983FB97D132105E
A038D34D83FC21E488E74AA8323BE06C48283C06A432B054A70FBF30D6EB0524
40216350E0E3CD8419CB99E994178C6F88FCE694C2842CFEE0C183EC1A62EF79
19F396BA23F073CBD9410C1547B28A3B8591A5990FE1B1B8BE17865E14BACE41
05FE81BD58449678CF0B5EF082EDDBB7A340E2CA1DE2DD5CB943795624F97069
A4A951089A20FECB7944EC286376CC6C144A5D1FB8C930816D30A235DE76C71D
77BCFBDDEFE65C2612031C23214710FDC0CED3676691F28B66F7E65105C3BF46
1270863845AD891084A713627712A0732AE44F9DF11178E22679DA6BCEBFDF4B
37FBF029D4D015334A41AE24EF71C05E4DEE884132EB3D3303B75F4FC095EAA9
E957ED4A3F5EBDD155B38A724DAF626E5A09D25A36EBC2A4A1CFE3BBDC146973
1F89131D2A9F025786F1B0D28568BC211D3443397C4EE63DB2ED7DF0F4E7E0B4
60EB8EEBF6B5D4D6E07AA499C8B8C9F7BAA2ADAE80C4D7A2244E1DC389C33881
2483CCAE9AB22667AB2DFFD603F559E533E7DEFAF6575D06F908345736F55003
33963F65C5F9A07953D0EEDB28D4908B045A2F570DCA4B218C04DC10F23F94C5
24D994A79D76DAAE5DBBA84E0ACFCCBAE0131D09D2DF39C6861F3464A97890EF
E73E4B44324C50D4199BE0E7E8C0139D5246C671382959994C867C5CFF432441
99768899D0ACCA763CC7E4E85FDA4FF256E15E115F3DCEFC29F19D0D1A3229CA
E03494D1CB78DD94962D5916BEB9B00809981BA7378B3E3852426E65D4EF4D4B
1B9F689D75D6E91BA6C6AA8E859C3A8ABD2C45335F5625B198204A58129012CA
213812D4445744EDA2125A12C21019BAA8FACD918D07280C728865D46F54D055
1400295A0E142A101E21CD15024A41A32117456745BE12ED02B2E534D5441669
9626A262A1262B759161A48BAEA2BE9F4609CA1E34149C3CD3BC207FE457BF5E
5EEA6DDFBECB1BA4DDBE78CD1BA7371E9C3904A5244B1866F2509319C6C12779
408A36EDE6873EF421DCB29B6EBA090ADD04FFFAB5AF7DED8D6F7C232389AF7B
439C224DBBC1B284C880D3E7A9EE697A7A1A5F123997CE3DF7DC97BEF4A5A826
903307CF0D2190A052C3CE74946433333314EF2DE70B4191E143BC894EC6D4D4
146AE879D1538C4CCECF7FFEF3D75D77DDFCFC3C516F5900B08388A88E4A3449
B433941B3D88DDBBE402221B9F760C86B5DC14C36065F999116318A22711A7C0
25DF7DF7DD94BD47328F223A380736FFD1BEB9E69A6B489251E483042AAD7D5D
EF0E7611501205F7AD2410112EE22FA37150A893EB18D8B2A10C08A2AE32561A
912EC93F7A1775B01CCD598E3B91998005A7BCF58C056D71A0BB0D7F6AF98B4F
BFA871F2C373BB06DBC0F84F279C94B4767CE997202B2C5F095E899E183AE109
6FFACD85D5FEE0BF3D65C7907A481A6A8C2676A62566001538FB7567E3FDFBFF
FB7E5805253646C1F6C0ABB7460EF567A10EDB5E7FF2A2BE1457222DAA0D3E3F
BF39A877D5B072C9C67967F59499E9E8AB8B4FC31AF8CABA5AEB742C1D7FD969
8A599DFBF683D222E839D8D5CAD5D77CECCAF615B2230914541DAA59B5B1DA7C
CD6FBCEE73977FD6491CC21161E0C5E373D272861BC9807BEEB9E76D6F7B1B29
5214FB61A7E23A7649FA2CFB36E95552B4996884CABF495B221D82CD593A30AC
7F1C4B03E02C922F7CE10B78D250D55857A4C9D52AC4B2293F951655F6071004
24DD8FD6FF4F7FFA53EA01CEA7F4589283A8034D61B4067815C7974C444DA4D7
520E1205C0499D82A17DC3095D6B0F4285350CC9D14C1218A78E0BD3500C2063
6F34AB1393CDB3CE3A737C6CA4223A0AC841D8F30783348B55A19E2BB2AAC1D0
27CB098EA48B91FB851E43578A84214D255792C8E08C0416691127903257E8FE
6AA6A989A22299096180E42F2B3D55B88462340884249004E8EEDA191599A346
2E2989849200FF5251D486A1A202AE2385F881005CB1AC11D36A28B2EE07F2DC
ECD2E3DB77EDD933B7BCD4EDF4FC5EAFE8C15BD02DB178CE5820E645294FA411
E38750E909F9726565851043CB2F800C2E0212219006FC956015C8E6A5F7C7F1
316EB5414A01B3A432F035699704B7801360773F4583E964E0C5E73EF7B9FFF4
4FFFC4E712B912C5C418D1908F051F563AF45FFAD29750AD665224BC0472A794
7BD3738A2AAD942C0F3C49A8D6A10D8BE614157FE1CDE5A637D45F9376836506
474DE421881E51116E02EA7AB46A69D86B9E9A93706E156788F2F8B86F8CEBC2
08A9D4C7832C159664CC3EE845D04E52C769C6A3A6715845A510773E6C6BC36D
1EB89307DD433E2E2ED0FBABBFFAAB37BFF9CD44B1429FA839116E489C8B544D
1508F9074582340EF96E307DD4AEF49ED215681378164230A4C34E64CA10A325
380D18E0FFB7349D1E5CFEAAFFF2F92FDC2139158119955B03A927C20C661110
EE8941FEE4EDEFBFEDAFFF4CC09566B251B5C2415F3C7A0CA05FA490423D6C9B
69BCA24C25690F5A53CDD55DB102BE54EA19C06EB44CCE44C19A29C342861247
96542F87CD279E38BF67975ED573531EB81E3ED1CCB47346CE995B999F55E651
1833163FA10AE201388E99C56A32A56010C20A2B31541D06435F10A7F3115971
E637E9192430884733323CA5AB411184C093CFA5A024F5C96745F62B1EC2B9B9
396EAD5156DDC86F43010FA4741C13C5D5F7BEF73D0A6833D835174690A82019
8053454A4175EDE73FFF399DF617BDE845DFFCE63719520C953CF2B21E6B7390
D6E886B4E84F8E6475FC3807F122766B1309BCE52D6FF9EE77BF8BBC8B85BD5C
EAFD2715D5C56BCC9A604470B9C89AB334171182E9C699679EBAED842DD5227C
8FE2C1F37B59863480DA3DD24FA0C826D7B0912420C71C17F2B0B77D4D48009A
02850D5E541D6468910A6CEA4415E8409EAC79921C0AB8511DB5E654D590F662
4D2E0A0B945C80D641224B22862C694A962A399E50D9C91543C0E2E9C209A3E5
6819C505685DAEC896A6376D73C4D06BFDC46CAFBABB77CD3CF4F08E9D4F3DBD
BAD289D752848E69643103856139060E4FFA3B656D52AE0B31DCF7BDEF7DB7DE
7A2B776EA1283F9F6FFA17591BC51238CA7AD96597E1B748972456CB02609D7F
9F380B71E772290337D7E542078EF7AE539DD88BBA67CF1EAE6263CB1D0F0A3E
0829965472C665E302BAE39031999F65DF20512F29D4DC4C953BDBE0B7F834D3
69A1DE7050AAD326764CB030E4ECE2BDFDEDDFFEEDFBEFBF1F86F81F43149335
4BEB9DEF7C271A675EF1816190836C113AFDB49FF8201481F7DE7B2F2E19E910
978CFA1105D289CB94B3AB294CC235C9381AF214A44CEE8946EF82B0D258BF5B
931066D159660072AAD7352B89FDF1D191F9E5995C64F0CB2393A7DFFC89EB2E
FDAFAFABDAEA4280A2C218A956A80487412C28C1A61A04838AE365A11E291A9A
C09AE5E629CECCF051FC6B83C4B3EA8EDFEFCB9236511F5B5D5D411B42ADD7EC
D474177AF8DC3C16FDCEA6C7275EF6A217DFFE777F0BA6F2F257BEEAFEBFF986
0959475242431401E6431C2D0EA5E0CF53B93C2B896A063952AAA065BADE476B
1E59765A436E91A23E96FAA06450007B69B693FB2E67B551F66099FC8F7A7E38
4FE1991E42C6AAA28A302895C5B01F158FF4934F3E490E40D233F0F0105221A1
427DB2F850752763D551362A0CD32EA100BE3DF3CC33FFE11FFE815324CAF32C
A72C53570F8669E164103235B8EB2DD102B391B2CF8AE04B29C44D2890C7DA1F
94649B376F7EE289274892517AF4F1FB9D502A2D3EE8CE3BEF4472A039107F26
2A63EA63BD4D629F29978615B55BA23D0C4A02CB866D5BA74F39E5A4A90D138E
78B582498511DA6B28BA5594044263CA648E01902545B4CD27A99C8B82FFA25D
2B9E95486BA9A649885C1B4FA09626B21A2A9AA70ACB403234D0CD58D5D1F248
F1579DB248259423286C7359121DD1842490502973403641AC14ED016448A8D5
8AD39CA139215B8656370C94049558A977DA83DD3B671E7A70C7638F3F353FB7
E4A3D590AE05498E25096068CDF0EAA89A1A5F0FBE572AF3A32EA0286FBFFEF5
AFC330A185BB6E91C793616699B3946D704A59FBE0073F8852819459D249C9C0
24FF38CE87CA0EB9AB17216EE2E3C805BFAED1423980C9E444EC8F3A37E17564
B2381AFE4C2A18F52BA5D42096049C577A1C494039D75CAE4C1E7906C0A0EE69
8400C179A8149829D7FBC0D048A72F12BD51B2047990089A09EFF9C33FFCC31F
FCE0071424C771F022AB3FF82F05C0E99531340D6F7519FD18F7938422D73FB3
3D44DB4E8C83D2586915640A2021BDE4252FF9E77FFE67D47CC93185D6090A12
1A87D172E8A1B621276186A6ACADD4BC34FEC4B5D75FF5898FE6906DD2A0A7DB
1D3F5173B59E7B12041D90934ACD4A4342D7610C3BDAC6A9D0F41BD6427FD548
3313D4D436DC60806A9589FA5192E98A99A4990A6A73B43EBF3C3B3931BEBC32
9F0A6846F15C90B41C1F007110FBA74C9CB87761E7ED7FFEB977BFF3BD1568EA
92DECF3BAA8D2BCDF97CB2EF4EF447046759CA022971325435124FB40B76D228
AE55C075BD2412F92676DDD46A4A7B69001590970497C03376C10517E02B4B05
22BD4FA521C73A3F9CC84E6715F55F7C8324FF887596853DD123A12E53351907
24983BD39D5CCAC32E23725D90EAC6C88F0C8A85DFA5C3C3A2AB0C529B1715EC
78E44837A263801444EE29024247550FF9C03DF7DC838BC55FC974204B1D8A28
23CF9C5026717A975C72C99FFFF99FAF6BEFBA6E7FC86258330D8B1CD0E3480E
6E5740791994A44E0200451D121DCBAD32ECB1C47920504A3F224980876C64D4
3AE5E413B66EDB58AFD74C55A47F16F91821CA00DC4F24F9C2FFB366169116C0
DB478B2FDB9BA4C9861020BDA0311047199E27A1834001EC9CA218880C3DD674
516D80AA36EA648A8622974C04056D001975932C06D1CA06751053B448C273AE
582806D06A504588D1409D48A22E65E2A55774AD66680D457324ADEEF6E2A7F7
CE3FFCD0CE5F3DBC63EFBE83855D96C3B1DD9779093D82D134E9183D1336991A
844129A78D933BCBC5BDF845FC97380B9E1B9C031E1A525EF04F975E7AE94D37
DD445E4EAE9CC4B7883C8B90A299A1131F6454F432A4D73A49409E1CAECB2705
0A8E44EBC4A38CB7511B556A9BF7AC248134EC180C47F6AB61740AD2F109681E
AF20A9FFC11FFC01EAF578BE298F8D76809541728CB0C2C23F90D70BB533D2F1
F122A957E43262271B8AE437BDE94DB40A7238307A010CFD5DECEDA5C20892EE
F44EB9A68F6245940540B9F09C3E4BBE41FA2E85226EB9E5961B6FBC91564184
BD8668529CA6C9B1A9D9A5851832D5D2E33800152A923AF0931CB4BA5D1978ED
71B4ED42BFEFFA90AFE9C56CAE118B5490DD8F8FB8BE2BF7FD9A61F6F31029BD
62A80112BE27BA162BC2EB04959ADD71DB535B46DB4F234793EB95461BCF3D64
B92AE1433FF0E10F7EF6BA3F9D18D1FB2BAB96ADF5F36A94CA10754CC0D10FA3
8CC8A5EE8F06C8A1A1421A2909D88ADACF12B4A2D10648713C1123D02A52D5CF
43DC59170668B33BB668D9883B89E7B9DCF8E5F81157D227881D518E5CB99B05
0548391E43185CF4456A1384470BF92FE9A02447CBAF983B26952501CF871DDA
FC2BD7AC917B87AA7CC92E24968A93C4D551A90423BEE1B19C9F9FA75F9190EF
BBEFBE7DFBF6B17BA0EC27283304E4F278D2086AE9A83B832B7AFDEB5FFFA31F
FD080727CF3E7B508F7A3F729557BCE215680D107A2B9926D2B0D319990B3855
9CE4F5D75F8FDC862510CEAF2272848A8FAE8B76459222E782C5C086E9D6E9A7
9DBC617A1C15624B5387E67F2CAA63044585C56372D2BFA83C8A5E060383B065
C0A1D75841E24CE3488A454D6881A6291A92656A1EA2816A986098AAA9199A8E
93413338D454813BA4E9321A21B2E89013004A803C4D62240D01DBAEA826727F
341344A4CEC0C359442C44E99AA9A88EA65464D5112EACDC09FC7C7EB6BF7DFB
FE871FDEB173F77EE1204A8F593D54AEA8224940E1F8AF7CE52B687091B382C1
3D58CCC2B0C28B3341F96071AA036D11D72B90F4A611F81E3AC465487D628E77
DD75172AF5A4D552A90E8E836440DAF45125013B34F834A02E83F3C71FF060E1
77A9D887DA02533BA767EB1D2AD339FF4A64CC89B3E47261C9C4DE153602F8C3
AE00BC8712DD883B739C03862617511D6D17D755E20F9FFAD4A7AEBEFA6A829D
A109703F1C4673A4F4734E462C7B54B90716C90F4A88A4FD67B589B1EDC8ED8B
D7CB8D418E281EF44301AB9567E419ADD70CB7179A260C5261209FBE79F3CEFD
075245F8652DC7AAA4F2525F9404E2E3A8250ECE84BC0156BDDAEBAD82A94F57
1A6FBDE0CD37FEBFB73AB696F7624F05CD90622F6F35474572A19235C76AABCB
3D71E22A4ED4EB6ED83435E8B67B5D6FD3746366A693E55AAE169D4AABC6A01D
579C7A26055EE8A369B2AE7E6AED57D4ABEA0E049EE4E7554777F3084970DC50
16A55432EDBC1FD5AC56BF375015BDDAAC777ADD2C6AD31B643F21C14F1DEB08
D15FCB316AD47B3802C7110228E92E7C9291A3E139C1BF1222340793A9F925F5
38C3F755F60EB14240B1FDBC04968ED484FFE2B1E4D03169B7E5B616641FE017
D182BFFDF6DB714C0A17B17788CE3C2EEAE52F7FF90F7FF8439C241E63A5E831
4EB0BB94582F975A4372E1FDB1E88B312569FEA836A1883D56E5E3E5975F7EC7
1D777002210CC3752453C9C785BB47B13112126B1C0F2DFBC287A517B10E2D8C
62A1260B0E059BB74C9D7ACA09A3634D9C80A9AE79A851B324EA0D428FAC5752
51713DB811E4F3A53239E9C8D6D2742C22D91592208030889078A5A22F8D24E7
9A842F06842410499702024BD702450B343DD415B9C02042BE8FCA4D9CA5C29B
84367D2EAA0B709374D194499C2159D3945CC593875FB774CD91554B911D5936
5167F57D343CB54E27DDB56BF9915FEDFAF5937BE717568A785472AC17C0E129
D27939D1853082081D93D4557262E0CF042E583ED68C9149A62579BA91415038
1D7FC03920DBA52665DC850E860900F888E73DEF79BFFAD5AF70EB28824A5FC7
919109A24271F6D967E36B7EFCF1C78F1527A077512EB0620F3E110325C95064
BB8CF4C9250BFF1A9B605DD1D65A76C0B05A9B7387C84EA2C9E44756ED91539E
2B0C18758BF0EF700E78C0A89B39396AA054484159D2A44BD220948DCEE2991B
7052CF32CA4FA72E40575D7515AAF3C8C7CB49BA94588C3A5D5E42A62C0FC5BF
52109BC0B4C9BCA31417FCCA5AFA962A5BF586DF59C5538A6A0B2A40D313A3BD
76A7074AB36AF5563A9AA546B22A585C10A0E63288D6EAE948712303B16082E0
4C8C0C563B754975233F55E1B433CE987DEC891E391B0195A3048A6D5724F9ED
6FBFF08EBFF80BA7D91AF43A10A39E218B721BCB46969D4B60B75A3D549C7D6F
6A7C74717E19B57B5471A36E4F2EB50D389C4823A1B121898E200321BC525D44
BEA79DEA7CBFAF6BA80EAEF5E4343459D14C17D597A1B98C261ACE8562FE706C
9B80539979575105FEC637BE210F7B13512A07A9E794C18C8446B909F81E5166
704B6DCA534A879D54F83A912A3C23624C8C0B0A33B1CC58CB5973EB0E36A54E
E038783668BBC8A9485A3F2529D081C1F38033219397C2E6A4B5B07F92BC26E4
C0A4491E757FC89BC4889954814FB037C7A24782A5A19A21285542E034DEF5AE
777DE94B5FC209708712DE7689A017C6C644BF4DDB411A2BF456159A0D7BD3A6
0D9B374DD51B15D18E589259C89360241798E82659383170A9E4B9A62C3A8650
6649B096A4012E3273B43CA230CDA88C4BA6064392AAE586A9189AA96B569145
2A2481A186A2F65845FD3415E5C55924E589084E8980AF244B2A9DA42C8F04A2
B526E572A4EAA665D64DA3AA6AB622C400FEA70C7C39490D6FA01D3CD07BF4D1
030F3FBA63DFFE59D7F58A264FC76470CAB01F3A2F040F011D6E2E0D23E64EE9
3DA44A97B32FC8E14BFA3E6528B16CA099D3FDA45D52491A859B58A7268C2362
A66548162E7623C7E8B12401C5BE18798A4E0972191CF61DEF78070CB3A4C8DF
45DE79F650932FF55F6913484743F1A49340B6455975A22550751BB3544EC0C0
1BA8020E7FA5F27A02CFA04188DA89F352092B49114A19A26DE47204CEB68242
C1246947E44792956E103596924459866491FCD11FFD1101A332C201497D46B0
218D92F83ED901A42D96AD3AFCA1296B3E5AC2B2E265A9A41B1972CE04B44A4D
EE7B464DEDB96D59552A6ADD1B0C2A8ED319ACF20B65B428DA90A81B44825C33
1BD458967C477DFD6B5EF39DAF7C15F7B8D51C996BCFD75AF51E8AB15C6E9875
3FF09A96D2F15DD1A712C50F8A114991CC4A1E446A25487B72531B35ABFA6C77
3F98A044AA195706D0E12AAAB2925E932BFD2C7434338B8B098CD4E34EC7107F
ACA0C298AA519CFB60009AE6E90017664170D8DD07253DFAF89550AC76505605
6E234965F27FD280E41BC4BF721A1B5A0F149EE10468B2B0E948509C80B8108E
4CEA309D6DC64A816167116EAE476F96DE663AEC5AC1F9E594DAC021E5729D33
B5A1E7B746670C353CFC3AB2D6129E5B4EABE3ACEBE37B7B3876CD78DDC8828E
D397982C21C63EA103CFF8B8E47E603B8698CF5AA880AC334E211746449A588E
B6616A6C7A7A7264A462DB968810C4515194BFE605C69D2D2401DA4112711992
042406D6D90450D232D24C04B5D348F8ACF1179044A35545865C1058AEE9AAA9
E2E34C0D557B23444960EA42A3110EA2224E5074BE4C50C1C9323C0AF210442C
4523218718470039D40CCBB6EAB6D542F3581551045D12350728BA91C39A0BF3
D1A38F1DF8F9834FECD8B177A5DDC9D3634A823256252F8480C5F15FF2A7A33C
20C58D3690B050F860D187524839819D1458D2D3F15BE493610D421D766F87C2
074A5E11CA69A18217669DEB387E39ED1A86862A295394824249EE6452B0B642
CD9E18FE059783178981BEFAD5AFFEBBBFFB3B1C901AE9E0F89C744FE204BF42
D6EEC5175FFC677FF667B40304A4415863B7DD76DB95575E490E771CFCD4534F
25DB853DB36CEC3F131EE33FFCC31BC54A1941C531BD715B1B18BAB0D67D913F
1424A02341F038B42D1FFFF8C76FBEF966DA31600C0F49D32D33F206AD5A75D0
EBD60CDD0B2359349829B24A7503F929441E723B45B3E34493F3EE51AF6B723F
064D606E895EAC31DA4A014A16BD91C5CB71AE82654314564C3918F89262DEF8
E9DBAEFEF0BB73D58A62E19892211E6FB696DAAEAAD5F26425958D34CBD1E8CE
02176923574CF15CE8298683F7D79A8DFECAC258A3B1DAF3934C53C115F3416B
3D0A475B95CE4A1BC7CF7253CA3ACF6AFE6BD7355DBCFCC8D390059BD524D5A7
27AD83F32B89704E28A9DF57846AA6E50237A39716F78BB625B15F180E4692E9
A6EA0589A4D5EA5914E6A12BE762FC3046A3C7CD1514B492AA6B388E81DC3F43
FDBD15058BB42E94A2069EF128C9251D24DBD27D374891852073C107ABB9A418
157C6EE8CD3FAB75E98A8BF3C1EB15C70E7ACB35CB69BB013D57D6ED58C8EED4
D1F11B22330CCF8BA10E7CA460DD9025986C5516E716EC4AB3E7C6387FCDAA36
26A7E60F1EB8EEEA2B3EFBE99BDD10254D3D4A573EF4918F7CE63337A3389204
DA1A7CE883577EFAC61B32E998DE24A22FB9D4B483E413711E32FA49E13B0207
8CE369308C14C5495C6F3ADBB66E9CDA30EA08DEAEE8861A7B841BB1D6C61D95
39B20990F996250189010E17F3E7B0B6286A08F2A2A9A52813C6396B2A0A0329
5244D5328A1C0D0D02C944FB4037D026F04D0D65B2C02815FD2C8524880BF4D3
0CB22EAAEC85EC453992C589874C524659A2C5A651B19D46C519D18DAAA63A45
1D9B9AEB8D3C35A3A4BAB4903CF6F8CCCF7EBE7DFBE34F2D2EAD0CFA476FB154
4E9F801282318A01646D44EA9C8C451089C867294782F505D20BD8E10385E398
4A04F12B9B366D421B13F57D64A39497463C14390BA150D05338CD060ACDA88C
37520E069061C10D9B4859C65776D555577DF2939F3CFBECB3B76FDF8EEFE895
AF7C25C1054BC32E8CA4298BB6A385379397FFFCE73FFF17BFF8055E4433FF79
CF7BDE77BFFB5D566148CC505A08144DC691A5924AC5ADC7B83219177BE18517
DE75D75D9C60BEAE33CC3A03FC7FD387840D474D60E8D3E7C412A5D4816E9DC2
C53A8D54EA5D4C1F5A2F0969D4675142D0CE93152FDC50922E0E7B86EC5ACE92
0839833636120FDC5A12F70682010ACE0E9926019ED230556A4E7AD4EB0A8476
B51A2479EC8BFC3A1019A4BA1F4B961EFA1198957AE47B48578E21F9613E3EB9
75717E9F60AE869D840112DDBB2FBEF0AB5FFB6677801C27540D2395D49A6377
5697905053D13DDC38EDE4891DBB0EE07371E955473DEFC52FFAE93F3F18C438
E755DDAA777B039CCF79BFFFC2DD3B9E9C5FE844997AAC791EEBBAAE84C2EF25
8C7824C8089F1BC552023ACEA7D871556C701E23F1CB8ADDF392565DEAF423D1
B7B318C7D290018BF53AA220DB08C284AEDB3A72066710E4A6EEE3BFFCDCB1A6
E35446F61D5C6C35A4958E8FD72DCB0C3C17C799DAB0F5C0CCB28C9243D665DD
4AA330890245A028897D78B6EB1A69C85665E4D0EC02727C94AD790CE313931F
FDD80DEF7DCF45C8CB122882AE49A40870B3E7BCEAB56FFEF40D576692F9C53B
EF7AE73BDE8EF339EDA4CD3B771F00D93650770A81C6DFBC697CEEE0BC6E987E
2429B26845D9ED778290B07FE46AA5DE13502EC79404643D50F06FEBD6ADC8A3
2871038F3A5ABA5FFFFAD7D9022BF76893D887C30C05C536F2C0E73EE79CADDB
36E1BB719C22B13A0908588668982C3E8A43120B232EC6B1E202B35A660590C9
2949A282110CDB754AF990C628B22F1560A5A01425A522E06E256834085C5225
5224B40F52594970507C0BA2E18DC86812AD0E24399101CD8248D2047257B5DA
74EC86A15775CD12A163458DD4BA6E34DDBED25E81EDBF3EF4B3FBB7EFD8B16F
FFBE43ED76371F369FA3A01FD7C7521497AC2DD4EF48C5E68825AEE2FDEF7F3F
773262606AC65C84C255CA75F6E5E08132EC69950E5B1741E11024E732AA99E4
0CBDEEBAEB2EBDF452E4D1340815D61E4B57658B351FF65526E403CAA861C73D
A57BA2343AFFFCF3BFFDED6F5378A05C6B86CFA534708EC7E2D2262626D00C27
C02CFC133961CAC522F421E712E9C214B523BB07C7C7C9CFCECE723ADD3A10BA
E358C7FF519FB24D4039DDB8ED3831AA2AE264ADB256540E7B309E0AA1C3528B
4D5A5D3E44CBA0700BBBFE90F0D04AB8E28A2B84BB4FE8815AC31E71BDB008C2
CA893A27789B69485216477146A783F6E068D7058B88C59F3453C9B3F4431FBA
F4864F7D4133D4A9E9FA81BD2B78BD395A6FAF147D800D6106A44986967D9AC8
911FE2D7C727ACC5455F2A52C4B3A8607BC5B0684BF8816081625292F801C78F
C3B4D952DBAB22811014A8D56DDF4BE2201A9F74161706C79FE7F1AEE3DC8407
42B4B4121F196D2F3DCD2311D6336B8341CF1F0C55D4BC988FD0F7910C713982
5FE5850688D747C71BCB4B5DC350433F3E7CBF56AC22035913BFAE3DB718C7B0
70C750D2889A8AC3392252F15F3126EE49B58A2CC58842C91BF8CF7A5D39D49B
0DE488FDEE006D13BBA2BA682F15F3A77D6EB450378F035F4C46E09EF96BD7ED
0A7803D8B0A9353BB38A57705DBDAE8FF34C93288ED6B6A8155B21C4C24DE258
A992F7E2200D5C706CA97BF4B842597FE50FA75A509750246D3AA5654CD6353B
82FD83C2BA3750E9D350126CD9BA11D570C7B19075C75140FA1D3B0128D597A3
3AE4A861D549530E4355C350F52B58554C9A17459E41625B86C28CA81100F9E5
04B6345AAE5220347D2517A88E72AAE0BF6885A0B56A08FFACA999421D57041C
0548B10C89666B86613B76D5B6EABA56295A210849906A754D6FB87DA9DB919F
7C72EE7FDDFFEB279F7C7AEFDEFDBDAE478C0917821B843C8EBCCC52099D98E2
99E48B1C1D1D25943D627648EDC82EC9838C8C00390B4A602894774A3166915B
86085DD794068ADC2F0A3F506200316B7A3537DC70C3CD37DFFC4C34DD759240
2E75F05883781A228D90F2CB0FE5A4CC72630318E2EB31880219169425C933BC
F2CA2B6FBAE9264A70A68431BC0DA508E7E150D626810D10C24C5E0085B2BFBE
8C82CE6877FF07240173794E20614750398F9EA7C1228A7FA54FD926E04812F9
4549A213422DDBDD53239BBABD552F19B426ADD5555F14C857501F06AB6FC8A9
F0911430EB89E85D9F20473213C53BEAF548722B6A5D8A351F50350DB76C4583
72BF01151FBA3A588E541741613D59F5961B76B3EF05D59A11F462C14B41312B
DAB2BBA8815EB34756BCB9AAD2683A63EEA0D74D5753884DD93A61CBA94F3CFD
C8447543A7EF5A92D1CF3B6827D49D469EA85EDA41D35D1545C6386B3F8168AC
3E8E0C2B538267357FBCAEA47A2ED62F74EA5C4B73116D3642E80B847B51248D
DC35527559052D89A44C0D00553EC1E0F115A4928E363F720B3D557C23B763E1
26CB701F74434DC2D454AB7ED605D1CBA1A280E442F7E4534E7CE9792FFBD6D7
BFB3DC9F1DAB4E2EB74573AA5AD5F11217C7A9DAAD85DE414BDC6CC480F605DA
25C83D70AFEC67BB2EA326E999D5750712E4E79DF77BBB0FECDCBD7B8F25D706
59BBA18FA491144180EB45898CA70FC7C7F53EE794E71DDA3B1F2761A284AA2D
FB7DE1A54AC1C7F712096775A6C8E0670353B1E21482264A2A1D7AAE029A9E08
479F8356661E748EDB69078FDFC9279FBC6BD7AE729F572EC547DE5506493C2C
093824B256DFA1A184AC9C73F6E99BB74C230B364DE1DA4BE2B00CDE4BC5685C
40548EB3D3BF45637A850D0E6988F0557C3D1BBAD08BEF02370E24FB202F6400
90F99365AE080FC899AAC4AA92A0FDA50B9852E46262C1C8AA6C136D1159152E
26FC626ADA86B86C548435A09A8A6C8A6E978A961B0D5DABF67A52DF5576EF5E
7DE0E7BFDEFEF89E9DBB9E5E5A1459F9E4E7E11C4146E5A41C67CEB02CA79170
890755BA72EEFCC68D1BF7EDDB471841E552407A3D2C71E521EC2D8A1F8A2951
6A17BE362E5620EDF5F4D34FDFBE7DFBBFC8E9385D95D916D907DBB66DC399E4
457F5D327D70707C10D90A343D7CC4EEDDBB39E0C9616D0AEDD21BA46801B7CC
2ECBB3F211BCEBAEBBDEF39EF770B1054A085A2C7E11F59103070E70DBA9B22B
A63CF9FF7D1F56F669D5A79D76DA534F3D558E00F10D2C568F2A09A8C2401EF6
B66398300622A45004921CFED0763B390A9A2056413E6DFAA483334FE30F1618
FBCD1EE0598EB404925C47A628724C45EF30C1FA8E7E5DCA0D2336C22CCCB508
2A48515A45B1FBBD76C56EC5ED38CAA3179CF75B0FFCEC7F8AFB05CE3CF255D9
92AA9AA9F5C2E5E60913EDFD0B426BD60102D9C81DBC1F07C98D440402322858
B43E628CF4BD7E240FA4A69E774359D5B334C27190C39A0ECEB89FA1426B28E0
A6C799E771AEEB115E8AC543A594AEEB93158192ED8A094446240C96C24D0322
6BDCC4FBD7D6ABE4858A2D810DD0935AF6B8177A8116ACDD8FE3E3F550178E03
81402625E140ADD9C98A27444CAC5999AD5B7A375A11F33155E827E0A04A8C62
5CCF90F3D6D5241BA0A0D30C2B8EFC67B7AE960E2B899219388E5C53D2C8C3F1
2DD9F2C1834E7EC4758089C9E985E519F0E4BA31D2F37B5A53375B46EFD0F257
EEF9DA4597BD235B8AF07A2EE7F8BE70F98D0DE39DFD8BB84F78CE2CDDF64517
49A9DA6AF4822E20AF1B1C3DAEC63957ACE8203953062D9534132DA33AC8A090
6B0C84981D67F8145222AFD59D534F3961D3A66953477DBA200F29E3C421F6FE
C33014CC9FC3BA1248642810A53121099F24AC717912066B693605E91563523B
65AA79CE442DBB080F44B2142BA22A3E2B124C25BB9259A66EDBA6EDA0A842CE
256902A4088A2456013D244B3A2A1492A42AA2658D2C5B0D45A9F4DDDCF7F47D
077A0FFE62C7A38FED7D72C72E29B7C9314261C0B3CF3E7BC78E1D04DC81C47C
CD35D7502748F2B75C7BEDB537DE7823152E52974A46A1222E80DF1229584547
6F0A0FAC2BFD852303A41C42A0502D79D8B97B01C918F248505A279962EB04C0
3A4E57BE5E666DFC4546D3FBF0873FFCB9CF7D6E6A6A8AD2B7B9271A95865087
4882C1A06C4EB67EF0065C2337032054BBF223D080C07D181F1FC77BC83B8FE2
ED79CF7BDE430F3D449EA5756B397EF5FC7FA018A0B5E3B37045E79E7BEE830F
3E48BD9C6008E9CEBB57164E65EF102E1CBFF8FDEF7F9F643F0799192495F696
B0AA84EDA5C0A68D1B7C3FFECF7FFCDA2F7FE92BAA5D4FBC48B32B717AC0CC9B
7224AA25F3AA122153F37C43B1C3C43DFAF5DC973CC3025302E4D37D682830F0
5047CE4D30025B89E58A59BDE8CAFF7AFB3D7FEACECC56ECA69B0E2A693DF750
714E43C9873AEA99812A99A89C6AA133618C2F79CB890DA91EE2F8A3ADA9E5F6
1C3F3732B35CF1204E84A2DC30A7F4C9EE4207AF8BFBD38E7092A84E940E9EDD
FCD5C40E1D0850FBCB422D064770D211B37EE26F9ED5DBB5B2B46BD1CF83D046
1683AA7DCEE3AB9112A39D89CFC571E2A466D67BE900BA52131A1EF84AD3F090
69A6999CEB9914CAA153879A0F41207930A29FB875DB9E871E0747A9E6CD7490
08BE5D8118E78F7A37AE4BCF707C2B32238807AA078A37BE75DB1FBCE0457FFD
8D7B9EDDBA9478D2DC804CBF1D75C4BE194586572FC4F1F5B46E2526AED377E2
24698B760E60BCE065BFF7F3FB7E6A8365EBCE72B2045AD09CDED8DE3707351D
3A28CE2CE4617DA90BF85E14154D839A93051ED896D917F9C5B25277529404C8
5EFDA3DB04D2B0853DC514C96BCDBA3FB31D28BCBE65E43B89D2BC8EA4C3AC56
AF6CD93CBD71E364D5115D1EF18A683236A48D7C88C92397C00BCB31C08293AF
A9BDF2919F2C4F868E97AC2C0C866EA28C1F4199FE220493A32D88AA7AA04891
AE27A6816B909D8A30562A558B62DAA6AE0A37918028D28BE7A890AB592A7264
654914072A664D556CD7CDC2D89E9D19FCF297BB1F7B74EFAF9FDC9DA6062BB6
5C764138975C2544A512DC7D09993ED23C7B09386ECC3D2ECE39E79C471F7D94
B9F0DA9E96E02A491220EF78EB5BDFFAC52F7E91BCF030F4F15123DF321A1ACE
046FE690C33A195066FAE5E03C3BFD7056C8AC0983010724B00A0A41538F1DBC
CE0A42B91E823C2784D3C26871A42E9008E4BA740A9BE3CF77DE79E7DBDEF636
AEAC26914666040A068AC4949308FE0F9802656E4E8FA35C2914575471C39220
3FB28DC1BAEF72C498EAC9E5129236891606AEC07D23518A5B3702A34BF1526A
2630019BDFB0F5A03A9B8FA0960D63F968FFA995E067C5F25F04B5CDB5D0ED1B
7E6E4C1FF37A6FC772F83F0484DCF41B37CCF467CF3EE3D4A71E780A46B59A6B
2EFFA20F0B507D5525304343965AB2DD5692F069377A4028B3CE79F620F0369F
32D93BB018D7CD7C26AC07F6DC42BFFE1B35A929F7563A1B2B8DC5CC6F78F6FC
DFB5719E95173A03CDDBB261CA9F6B77D4B4DA37967FD817C816FF8FA18CA8B1
3718552B38CEB39ABF3456F376F7E25F0ADDDF78B1EE4C57DCF6AAEA82B36574
E9E165F88550EAD5172BB5CDF5A0DF93BA8931DD1CEC6A87F7172EF573C1D98C
1C1039AAD237A01554E6FFB62DD8EA2B74B9A558A8ECF52218ADE2FDFE7FCF70
1CFD3CCDDEE0B8EDCEB85EE9E9A8EBA98BFF288CD4C6ABEAEAA836E8B471FE61
555F7D7C29F9B9309294DF958D0913C71F519C67BBAEA0A2694BF9E0A7098C41
E5371D4FF7E534DB5C1B5DCA83E480E73F845207A47361FACC8DB86FE142179F
5B1F58F3FFA30D3E4CBC6EBC9D771C5D4B5706781DDFE3D2B77BD004FBF7ACE6
B6D6E2CCCC8862E7DD93F36EBAF8E06E58CA8C7E8696CFB8827676B0470A8E7A
CEF3021503CFDEBBDEF5AE3BEEB803EDD7C71E7B8C744AEEA68554CFDD6D0FB3
113CB50C32CC9C7D64B43E353936353556AF56FC40B8AD85C65D7016A6136634
2448F83A7DB238629B401EC24F1EC6B890F323B9412AC9875772E427CDF248E0
95E60305D5192D364CD9D0240BA5A7A93915DDB2354347855DB50AF25334438C
9E091C15219B849D543444D06C59357D5F8A636B6EDEFFD5AF9E7E7CFB812776
3CDDED865BB66C41268BAC10B9D8473EF211E4F8C42871BF5EF8C217FEEC673F
6397CEE6CD9B91A391202509F1D18F7EF4EAABAFE62802F27AE40B975C72C927
3FF949549C19580D8615496589CB0E22EA7CC99E65F65C735F3328B28070402E
81293BE258003087E57E3B9CED53CE8FA462B12BAEB8E2B6DB6EA39807D77C91
FD414612672231C616D93DA46550ED28BD5C4AF9E73A499C034A4702DD655712
23C573BF0A8EC4A4FFEE1EC2FF9A0FC70688831355301A391D35CAA95897FFBE
4E5695FD7BF42DAA69E2AE15DC528DB2923239D36C2B1EF8B665F86E282C7D15
8DA72C30A09AD7CC480A210F2C88A41E24E0A8DA208D8F75DD492BF5C4F420E9
C000AAB1400095E440CE74DF6880858A490775E18A1033E2CB0E989E55118E15
E8498132A9A72BAE9A42A282119AA754B6EC77E77C3347D68AAC6AB2D99AEFAC
369596E5C92E44E2B9790F5535034752F24A52356309C711F71B0388337C4EFE
ECE7DF909B9A9FE1F5818EA2780029D40CB3170575A9610668B6A43D25021375
FFE2B9528ED78D008403C89103A58BF644CBA9AC86EEBBDFF89E6F7DF9AF701C
6DBCBAD29B1169A7C86F1518D14625572868383E8C48B85E71BFE7E27C0CB12B
D09343A16BE7A0A510ABD0909AAA2FF4DCB8A2F838BE9FE93944F2B35ED786CA
74B4D2CF405D955C68E610C6D200D056D302BD0E687380983FDA2299C0F48E50
E70FB44D30BE02FDBE1AAB135ABCD4AB68BA9B4463C6B82A4C9EB88752C2440D
18D4049246E1C2EF159EA81C4D19034C05421737E8A8E79CF451EAF749E79011
EFA99082B4D58B2FBEF8EEBBEF2E974C8AA8E0CB5FFEF2EF7DEF7B4400E4F79C
9E9E1A1D69345BD58A6DB86ECF303545022A9780611A0C49029601CC928679A3
191BD46507116504913028BE31B4C7E5C32C32CFCAD075B20026CAFC0C06B21C
1868D319224E601AA896AA8EA3A160D035A190E2E24DCD147FCB91D47391EE54
98FB8A524802D554753B0884A9B9B810FEEAD1034F3E31F3D493FB73652DD047
AA3D14BE118A88C0B05F36875C7886EC5F63C048CA32A2A1C851C00942CCB5B9
0406867D77A9E40A5F01FE4A1163C6827EB69C91ABF6C9F4FBD0873EF4D9CF7E
561E36EFA6D8EFADB7DEFAC0030FFCE0073F3878F020251795E5370CAD3DAA42
E0660C9CBACAB795E7464F6465622D5FA0C851631C2A6A41FC277FF22738A557
BCE215F7DF7F3FCA894F7CE21337DE786319488062D484FD4075616446904CE5
9248129FBCDB3455EA1203436089637D1850884AE7A84E07779E98384583E81E
F2C8B1D64F09C18C935CC6D3A7B7CF6392DC6D341A4875737373466EB7265BB3
9D83A8EB6D7CF519CBC66A60B860669078CDEE48FBBE954BAEBBF4DE07BE1A6F
085C2F30352BB643E740ADF7B782718CBCBE956E8C3A28B1724D6E82B4430D7F
28325B6A7F584DA643AF1F39D54A6078E6D3CEE07B82A18FBE66A4D76C231F8D
7A3938B9B2574B7F1A431F1AAFA987939E1FC49AA2A795D8DA5719A08E1F80F3
87B6BC2DEF0F7CC7AC0C54D7DE5FF17EE8A2AEEDBCC4CE37275E1C69B91ECBD1
54303DF7373378FFE60B371D520E66293297EA40EDDBFBABE2B93E4C5D30D96F
75DC7ED068347B52677C656AFEEE59D4FDC75E37EA8E74FD2846028DEDA8B530
BAFAED651460A89B071383544DE3D51C46C1D86B8975C550798583F3E9753D01
2C6F46E3EDC9C5AF0AA2187FD3983FEEF6FBBE695841E46F92B61CBC733FCE73
E35BA667B5195CAF9E59B8AEF471C87E2C621EC6FFADEB272B7D3C5AB104F55C
DDA527FF5F849CB4FAC715ED2479B5D3D364311F6DB711FFAF10DAE0FC671BEF
6FBB7D1D0CDA67FF3B0370C07A8989FBAF55B4C162288D00EE9BF78F627FEC97
5AC629AA1BBB99A7A495A4393FD2FEE60A98609F673967984BAB6D11F446EB62
B6D9451B2B83B1D78F761BABB99EC7DD1C8FC1B1E6533D54EF7F17051EB45EDB
CC36C59D8EABA97A53AAF576BAC1C3013C0D7A62C9281D14545E4229C9196497
BDCD54B049491FA4F0C1301DE30D6F78C37DF7DD4794C202A05CDB2C48FA8C33
CED8B973277E99B3534E38616BA35E4175DBD4955EAFE3542CE4EC94274ADC2D
1FC23995DB3B940B0854F9B06BB5240644C5C01A2B91B22167C98E900439E7B3
163F488A94C7B930853C544C0DE11D92345D56E5D43015CB960D5D42E66F6828
0904F640D1A3584A132109508146E3A0D0683545D50DC3F651126442126C7FEC
D0934FCEEDDC79A8DD179B42393C1420654F3D6E1997DDC2D077C45A36810211
9608C18F502A0EED0F972FADFB500881581EF54B211E7DFEF9E7134428377E59
8770F7AFD1795932415132463D8ACB177186655E59CE982C737679D88D80AA76
393DAC8C9F4AE78FCACB29B9964E21A593B1AB84BA5A12D010727F3A79646D40
6127919E42D2911C62C48E71045C82E89B547CB80716B788910A74527C348D80
9BC9AE2A5E4EB96481B839A57E92E544051FF844B49DF10A4E8F441777A69387
F8EACF8C6130B6200C01CE08751CC727890545CB6BE10F74C3348F7447336B6A
6F50509D530448F144792D3BB5CFDA78E63F1DFA51A089D227A1B89A30214DAA
BE2A701A0D7F190A5D52D223396A2523D5A41A41E8C9BDBE33181D6DFECE392F
FECE8FBE33956F9007483FA9DE92F70733C21D9148B9998F24A3566CA119106A
835528B2C57467900E9AB1782EDE8FD7DB462F0F41CD45BFE546D4AC66D504E2
48F7DA46370B40F40F9C529483E6583E3600F78B5FBB7DB7BBF3E31FFF446FCE
57C76132D854ED553BD096AAE96C207CA7A6822A7D309A8D199181E3FB4ABF83
36860635B5D68B7BA66FBDF3F7DFF98D1F7FBD0B2B9EB055E0B7FEAFDF7A60FB
031BE469DD455D3D48CC604969E326548C8A9BB83CCEDAFC91052B76607BFAB2
3502233964ABB078C2F3B73EF1C86E399533339BC8276DDF0EC0C7F9AF685D1C
87D63B0E137A8066029265B0ACB671BD74FDCCB1B32EFFE3CBBF7AEF3DFBB2DD
07DC59C582DC450B2BDBA86FBAE62DD7DCF8A737B846673913153662FF95A8E6
D7AB502DCF474DC5BEE1F8E301EAF8CB2E74BC9A5FA0742BA9964E291B1A8306
EE4F6A858B89D0232DD5F273FFA8F3F1CC81B122D685E35B63DAF9EF7FE3273F
7173CB6AADD656C569E98114A9261A15528E0B14E1FD0408381D8F1F12D78103
07CA90A5302C8182A1CF869B7CD0A7DC1B718DA2E9B81307246687043E32DADC
BA6563ABD548056BC22F64867E0443679D5D1E925CD935C47E55BAFFC8242291
30BA864F37F411519DC13A59B2E6654A555954172720FB92F00E09943A4D57EA
6681568D224113D2A508D451745B8488F354A06AC54158C4FB0BCC22A39EC479
94EA41A82D2E054F3E35F3F8AF9F3E3433DF6D2753535384FACD209470A4E385
C3E965BD927FA68871B9CDE9BA282EB1C5B55A8D52F5352B9530CCD1647CF37F
834D40EC9542D0A492B36E4BC9AFF8575C2603103168280CBD822C09D040C199
2067BCF2CA2BFFF11FFFF1A9A79E6200C8B22420AFD1D8D818F23E926AB41B8C
5C74DA69A7A192F1DDEF7E17C77FED6B5F8BA28E241C81F350F10B2D561EB657
E5C661DBB66D5B5C5CC499DF75D75D5FF8C2171E7EF861EAA080D609F979500C
A09546E85A3831CEC73D6C940E5747BF52649B42E2640FF19D380D7A28D31219
88E42CA222415CCEC68D1BF11D71B0442EF5B683A1FB8E0E06CE137F5D3316E3
68CBA68D6F79E3F99FB9F9E60AE8459679E280BDCF7421A83B5043B5A693CDA0
12095A1D7A0A98AB5A3EAE86DAC4F8E8BEFE4E518C1C6B72D2C8AA1DC9ABEAA9
914294683D5063C8CC117BF34AB4474F47A54016D76DE4111EF8DAC6F1330EB5
1F83B051C9AA010C8C0975102CC14081A48AE32BE9682516D743A30B7288E3DB
EAA4070721A86DAA6D9BEB1D4ACC0168C8D27588F1FE15BCFE377FFEAD0BDEF9
26711D75B258ABE81BDC6C3F5EAF412B95A281BA24E62339B267674D57F3AA72
287003926618ABBE78AE67E073C71BA7F6E7DD46BD3AE7ED11F70FD7AB0A8E6F
86E0ADAD2BD6689EB43F8A8A6C704EEC8F5C81810EA3112CCB63FA949FB8F958
F29AFFF2EA7BBE70F788B971C5DF79781CB4BA8A7549493D37D10A6958B913A3
A451BB621C1ADF6A835FAD42D30737AD46E6A8E11FECD6AD4DDD782F8EA345BA
0499677568FFC5FDF50174CD2A344049E366100C9671FE724FCFCCA5E9B1B37E
EF9C97FCCFFB7F7CC8DF4BF76F183D6DB6B31DC71953C757BCC5A8E243EAFE0B
F331571BF6B670355ABBDE50A083F2A499E5FDA2D2232B4E4E96A02D208BD0B3
1096856A4F471DCF361E4EFC811A961083E5BC6D6AEAC9CD54A82538A5471ED6
E3C99541EAD8B0072CB446EADBB66E1A1D6DC9F8EC04B9522EFA111CE91918D6
0C67254F0EC033B8398B84E1D7C9AD545C911991A208151CF915FA288A519431
A7280664050560AA1B394A828A168B58B02E21F317558B6BD50C683869F86F16
4B4110A571A229E21EFC432219519CA19DEA87DAF272F8D4AEB91D3BF6CDCEAF
743A11278F3EE739CF79E49147702B71430E275795D24838FF84190DC199ADAB
F63A6A2CF49956823404AA2D63E330DAC4B39504543806C3808434C4C3A22B17
5D74D157BEF21572F8E01B4786C530EEBCE7340E1B34289CF04810E89B545454
4847C287D0870250B4345C08D51BF262B9B3DBD6AD5BF1A492714ADD0DF166C6
ACA7FBE945201BC541F0B9D75C73CD2DB7DCC2E5F2788E693904DB476D760849
06AFA0DC22C0EDF25ACAB940F8334AA61D3B76902940E10A8EDE2397C7295D72
C9251FFDE84709AF94402E694BA912E7ECB3CF7EECB1C7284ECEB3257F51396F
EAACB3CE42F9F7FDEF7F1F09F2AAABAEBAE9861BF07826198C8D4E2EADAC2AB2
262B7A188560097FCED8687369A52DAC841C1A9613CDA74133C8FAC24E9E3E69
6C6666A96811039AA78516B2C8C27ED68B8C4F21B4A19E56BB465FC9510915CA
ACC88FC19733804DF5E983EE8C70C457ED5EE44191538A5AA41D9A9E11500596
B85874725325A8C6F5B626FC12279EB065CFD3FBC57549E46D1A03713FF262D4
73CDA61CE06354A82496DA33A211CF5D88446D5671338E66CAC8BC94C02C6821
02C92E6AC154319FADADCDFB7A0784A79B9EEB806481D207D5D5A5C9D4EFA4C2
185244301C0C3090D0BB7A3C1AC49DE27E4AE257D120D092D53C32129C0F127D
18A778FFD489CDB9EDED717374515E1629FE1EAC556CC8C2F0AA268E5B1DE483
62F9CA5A5B37B44674D78A46FC8A56692FB893DB5AF3F3AB500558864F7CF0BA
6BFFF43A080BA73CED0F4EB58FFB53E9A174098FD8375D91509245F5043C186D
3596573BE2BA2D7ACFE9892AAE0F4AF3D7C43E18B11635E2A3CE67600AFFD886
A9F1D9D5C522A3174ED8BCE90F9EFBD2EFFCD5F753B4D224DF13F0B5E43E014D
59435424164F0E09FC10AE303900A8851FC5F908D4801121CB9AEB619597E209
1CF1938678C2A363F5A9A989F189515C6F1805521E17D05B4A9E1E05746C9DB6
C81FF1AB52480228987E91CA834ABEA0557908172ED3681C3FC838A11B4A5E08
94048A2CDADC23E58A5C523D35855F48F4DC162D95B5224F4941A1A7A4B9824F
4B42B4AEA32C8D152957155DD674900466757FA044A1B4BCE2EFDEB3F8C41307
0F1C58EA0F62BC2EC96BBD3260584DC60D0B29344AB8E72472CA0DF0D67DF267
F467A7651D35624CB0B7F8E64E3AE9A4DDBB7773DE0E41843E2B49C0F3A117CA
6180134F3C71E7CE9D84964AF05E2427CA4932659B8044118E40CDFC66676719
9F473A1A9054192889368A538948414643932A18280F8A83B41412C011C80E20
871BE556319A235EA799B3238BE1186FBBED36E4DAE4DEA1D2878F7CE4239FFF
FCE7B9F906CB2AFA156FC0853CF4D0431C349687FDAD289582E2E184AA7BDE79
E7FDE8473FA25E9878270575F0EB2809D87C59270968CED9B0E128412DE19B6D
D64771DE9D3ECAB0DC1AA9FB9DB660B19037E24A9006966975823E5AD64A0602
87172C4917D639EA3FA79C73F22F1F79584D653B75645007A2F324A050C9F4D4
8F12BCBF0EB50AD49661314391271A7708688656A53A614DBEFC77FFD3F71FF8
6F870E1D0A21C4EBB596A3A68A1EE084E3548EC32C9490799B799C277A2E4213
B849890809C3EFBCE8771E7EE2A176BF23BCF9720335DE2EB4EBD57ABBDF1EDD
387270769E9E0B423C0542C241122B518424379CBF07EE5863ACE376709E8320
3A79CBD6D9A7E750A33647F4DFFFFDDFBFF75BF79E74C689BFDEB193EE6FC168
1B5612C1772155933813FB6081A983E9151EB41CF20804FE909A829E1B365422
3910B9F07EDF4DDC44344890ECCC71A0BA024B1A68B992875290881AEEC3F311
A75AD49626B46F741DE78FCFC57D438308E789D747B51154355741B850B202FD
08D7A58AB0B9B81F4D1B4BB3A22C522B4A079948060DA98EFBE68BA6A239DE6F
568DBE8FD2C5C47D967205AF9BBAD98FFA1BB74DEF3D70504951A6D80D682DC2
FC51E783F3747407EFA7E7D2F85A6EB4A12DF27735B109228D2A469B4414DF35
279B6834533DECCACA0A1EFE1B6EB801C9E1B2CB2EFBC94F7E822A111117F99F
A9135FB9E91B9E6102342D6391AED13FC7C488801B4D67CB962D9B364D1BBA8C
9220C7372ED28744D23F93655918301C3FAC738F143FCA80B7A532717612000A
398E2476139171206444C907250F1B1EC86A8437EB7872D554D7C4BFA2878140
2B49501729444551AF2015FA03EE6424E759224BA9AE162875929CA01D9BC4ED
768E6B5F598DF6ED5BDEB173E6D0A1E5819F0A08235D62B458CAFAE03DE224F1
32F2E8F17576B9D4FD8EDCF49CD4CF3161060864E181CFA59DFC37E4D2D008D4
19957404E2F8A43B205323140D8E73C825E8DDB22420141DE46BAF7CE52BFFF2
2FFF12CFD9CB5EF632D470A927F03ABC20B9D4359B56C460D464A852E7160AF0
22A3A4C149BB279F2445BDB8009B535A09719E42C714AB47FB17BF4529BFE56A
6D6A204CE84C1C9782232D33BA828AFFC18307CBE8A15078C3F0AFF8757C228A
4CCAA625604162FAB42E7CEFB48130AC7E78A6778886958A762B4444C2E9B7B8
72FD0D37DEF4E94F554CA3BBB298C699634A499CABB5A99EDF4F45782C15683F
99940BA8692D01D1090A8FF0D8968D4BFB0E1605B9A8B5CBD59AD3F38A0C9202
C15600F8C4729616F5AE78BF2E83A901B252F19F54B56A6ED0CBA5D46CD58241
4F5C1C8EB376BF92AF190A43101DBA3E79E296F9D98310A57C1DA93E4943700C
083DA73516FBD12DD7DF7CDB676FDB7B60976AE949EC83268B5651B99C79C908
8A3D255D6D2FE1F846AB1EF63D0813C76ADCFEB9DB2FBCF8ADBA638A3869E45B
8D117FA583F3196D8CAD7497C4A30D454CAD78AE0C468E0C06121C1FA790859E
623A7226C5FDB066D7717CA751999F3B08B681F7D7EBADEE425B381A50FD43D2
370A48A63029965C5A2FCE1F7FF4421ABFE0F4B1A42BB908AF4446AD1976FA13
A3D38B0B8BBAA186B85E4DD21C13178BEBC27D4E62017C6956EDC0EF8BD1648D
C6D78A725FA3624552DA1C6DAE1E9CC5F155D96A541ACB9D85B57DB674F00B93
07B9D1B1E7A3EA7214FBE6483D70BBA022D3D5A25E20CE83D22B00A3D7E037E4
54910B8687329E5AC211020D65EB212572AB0C2AE6273AA554200A7FE2AF7838
919A262626D044E6A8A1C44C84DCD9EC64A8D5EDCD9B37A124B04C3D4ED0A24C
0AE53D139521C3B45176E34029DD85AFAC7196A4A8172B8A06A4C20554D80492
AC2AC31042A16C2A30F423655CF3CC897D020A18F744011DDF9091696AAE6BA9
80A553D0B62DC0EE098F49C6B38B6AA92630781345340F5765532FE27E693EF0
033F889697A334913B9D64DF81D5DDBB6766E6DB7E988B4C536DADB08B9C3604
DD47EE7B4EE8A4E2D275A2EEA832A0DC8B75DBB66DBB76EDC2B59020618422F6
4A512B228EF1B284F8B7D904AC9B97EBA509128A1375D854CC9F01034789C294
3E443C9AEC154E1EE5227316066407D039A3A3C9CD3BE94FA42353491A458C39
6B938E69D9395906975F3BA3C3002FDDC930F4F42DA40794B5D75F7FFD3BDEF1
0EAA655B67B5F0089CCD45DD84E81E8A36E39F088FAFBCA514D8E79424BDD4D5
EB9911E3B59CD161B91C8147893696152B4FD22C8C500026518CCCCA41132A4D
91D38AFC457212C86A92D2710127474ACFBC1819882CC5A253085A0911E448FA
89405D100C4421C81CE4D30654407745184A5C773464CDB16C809FE61590BD24
C39FD1386E3A95102D5A3545EBB782C24416CF4586896C4A9315D5C2D703592F
73E33493490C890E50A0656E54D4C84AA03BB2EF6623D55AB7DF135D0A6418C1
9795C76E98A120C0A12C4D1FC4515E8832A4BF53CF3AF5B15F3D25FC34A6D50F
7CD506C913EB6D8D5756165D5485465B23F3AB2B2393B6B7E8F9D9E175E932AA
BC29AEBB020ACE87AF9BAAE62568D000CE677AF3E4C1F979D44B8BB6A0A09B32
CEB3A9693DB4784AE3E07A7D9C582A9C3A7C5D9390BF64A9808F9046A6C66616
17F17A1613E4124C6D6E2C1DE8E0A0977DE03DB7DFF6673999E5B298B951F885
C24C8CF39BE7FCC6AF1F7F3CC852D5C2791A5D3F4C86E3D33EE03C5BBADE0DA2
337FE3E4C71FDD55354CDBB23A837698E3738F3E1F2504AB6AB4DD10AF8FD51B
ED6EA7DE74DA83013E1D8FB0E8759416D240D4CA0A549E722203B20ED451186B
9A089C7AD1C010028B40AA49CBA42C6AE40C5408B576DA294A49B0C994364EA9
93B6A36FD830B561C3244A822C8FA50C3597B546358C25290DAB04A461BAE43A
D79020A1623652213EA49C1A12AC498261C1C1614950B086B45CB840AB12AC4D
4FA9D3BD8E46A0869ABE085DA0AD8C2A4B41EE057085A415DD2B4581310A0B45
40D7895EC668510471D2EDB9AEE72D2FC728097ABDE4C0A1CEDEBD0BF30BDD30
CA445764016AADB08B0CFF45FEF2C217BEF0C1071F24D87A5CE079E79D879617
25AB1CABB3843CEC07C0FDD3CF3CF3CC871E7A08BF4508C67C2785078651FAB5
AC987CD80FE7D9D6DCD284294AC92F885FEE2DB7DC72C51557D09DFCC432A3E4
4148E125459EFEC485D0870BC54BFE406EFF427C937C6878CEA8A723A9EAC4E2
39851FAFBFE10D6FB8F7DE7BB9FF0645DDB9891BB16956F3C9D15436C84806BC
F7BDEFBDFDF6DB39E115D5A203070E5006116D603E6C7B0B8577885A8290E38B
B4246E7B4BEF82B2BFE81E8A7EB3978F7026D6B2188E96450A431C2732146858
214DC34033E454F455D27201AAA5E602F24D164E4C4B8B421F72CBD1AA5ED8CF
55D4AF33C95751770E030F52C3D2AA413CC8E581F05024762CA5591AE3754371
F025F8D92A68B914A8A8DB0A8CE24835643B4A7DC54E932C50425D181CBA0ABE
74781C1DF07E1172140DE851F1B4912945201CDC6A64C8A61A6589067612086E
2FCA8CB5BCAA343CFC3D892A95F14157A03157278C7677498C23B4635435A67A
AB7D038DE6BCCDF379EBDB2FFCEBBBBF2945729878665DF6C3BE169B92A1E07A
719CA01B0AE345191C9E3F3281024A26C9C24C7671BD768E7B32502B761EA27D
9FDB863110EB4DADB4E2471E3E57D71B783FCEF31D97BDF5B63FFDAC169A7116
E17A95DCC2FBC5FC713FD58CC7875813E3E7A1D80713259398BF6C9B0D7BB4BD
D4714CD3C5F1E5C4CC1C94C4491C9A662B1E24384FA7A5B95E47120ABA6C561D
29D62E3CFFA2BBEFFEB21B2D024A38578C33B56DCBDCDE79DC4F5D57C4F52A48
5DD5AA39D77CE2BAAB3E708D2959B80FF85C73CA0867D2A3CE676DFE261A1092
ADD7AEBDF6EAAB3F75459A874680B7A258B633E1918B855C936391D49569E465
45B2FAC0073E70EDB5D7524C8E1B6CD099277396A800F903B575229B95B5ED23
6C021886D7F0AC22E1A422655843D2DAB8698365A04D10E5494CCC3A0A448E4D
92A524064091D798427E185FA8EC5066F5561AA6DF149C5F883545E534532A5A
2E585296ACB9830A57144902154D02816E8A3429899EC6AA283356E502B74EF6
38B147969461EF4C0DEDA454A83E8537465191E256DB6EAF1B049E1AF849BF1F
2F2CF5F6EE9D9D39B4889A8470A5F91EBBD2C84B430E62920DA45093E7BACC5F
9EF9A128024399968333AC9893D9C18DC3CAE036CCC2A412DA4199EF94ED30EA
CC455042380EA5F17017846CD8E5982C00726870230A9407283628BA4BAA2E75
50F837D822E5CA2C529329EC4C9C977BC9D249207F0BDB16F46B39DDE099560E
0927DA198277E58A168ED9E0E3C8BD290D7BE14291D945E9FF482D244BE866C2
02214D7FDD7AF9D7AD5BB7EEDDBB974D131CE1E28B2F7EFEF39F7FFEF9E79701
9748CFE2D80694708DC87C31469DC15C478793427BB78D2AAD3BD9D7E61359AB
8571CFC445E20FCD9EB3D81C98557D7C213A20D444E43ED5A61118ED78453263
2D00172AA925D7FDD06B86711B556ADD3606ADD09A43E969474DF7C434DB139B
6A1E18813680F10DEA4CA89A0312904411784EB81309A91DDCDDE5CE3BEFBCE8
A28B18775D1E62AAD3CDA300CB4D0B067E3386246F44B2192AF32331AC98764B
20ACE6FD8A85DC693A465DAAB72C898AADF1B8B1A826955A74F9A5EFFACC2D7F
51F564CFB29ABEBF5255FCA4278570823EB124D266F1A02E788606515CCFC793
EAE22042D578ABA6CFC5C86151D1CEAD8DF973E6ACFBB39EDC80AC0313777DEE
AA0F5E7EF9B2231C5BD501D4D4CDB3899B9BABCD4028DA4AA5D90F8389385AA8
A4E03AA039102FC386AC39DBAA54D40E4A77883B6A1C8D010CC6EBBDD5D0301B
69342F0BA8F089B0B9803FA8FE485D979746546530270D6AA8BB2759172A23B2
8B32A105DA0CC82DC0F1AB4ED84BAAA3D96A3F53D73A88D0EEF1BFC7A21764C7
A8C1E021BCE79E7B50252F1B9A5CB40847F64D8361732752D38F95D9CC54C3F8
57C443A83B267B2CB9F0856C7D9E808898D1D9F5FD011E69AAF5C509D8B63235
35B5617AD2B14CE112223857298BC3A02C0990FFAF51757E04E66839998F2501
2D4C9148541494AC1D4512306E73B123B08677AD8961510608E79C468204D042
CCF33EEF82A81B1842A266A2A70D4E529C6954F9E3085C3719B8B12F22C659A7
131C3CB4FAF4BE99B905642BB952D0066BA3AC9F52CFBCDFFDDDDF45EDF5C73F
FE3161421C3F9C4BFCBAACD4E3CFA79C72CA9E3D7B38BD442E7593978F6C95C7
7117BE876645DC102513D58CE0AF48C9A850531D7939FB1EAFE09B46D9C00D7B
496F259811FCD6E4E4244E064A8DA55804AE6B5EF1EF9104304C67629E4BA93B
502A0EA03E946558A4674A02D2B8F9D5F0A7DCD39864405E6AE54696048970EA
A3C0FE3A5AB57C8C46517CE5DC73CF7DF4D147C94C244E4A33A1AF233D53C807
07A73F915F88702638E948BC3E05524593D3A9A876A0959941D7F647569D9566
220F023582543DC739E13165A7D9465EE6D81BA5A867A90DD55FEC4222C1A801
ED55C15CF5692B98552B71E682695713D5EAF6904185E0394DC9EAA59D742431
572602A50366F41B8393779A3BD1F0C03532D63A0C5309B8B31ECE9CAA3DC85C
930AA44572D651411F6912B1EA8084DC6F4611716625B1533420CCD5D30369AF
9EA7A62AF5B258B18D3CCA8CAAEE7B22056E433E3A1B0F8F0E5EDB0000FFFF49
44415420F75B0D73B59BD452A9D700E8A495D12D6E77055281C524BCDE3A38C8
F4BC46BED18343B89855758B16EE6FA9FA2ACA0673AAE12B567AA80FA70DB443
6359BE280D2692FA020435C8512E2C18B27037086F575DAB2F9FD9D51F074F02
DB69F53BAB0A545323B68C5ADE5BD4A1DEABB8E0A58D0674CCE6697A7BD7BEBF
BDE26B97DDFDE119FF505D57078BDA88322643776134541782A80227C10907DC
BD912D8D8CD73A4BDD54D9ACF66613817C19422D87B8D158913B1B56ED593D92
018D180ABD92514EFB4959D7C7A2176426946E47D5452448F067D4CCC826A6D3
4E07BEACA61FF5A0AEFB8C8E8EBEF8C52F7EE4914790C651249453E07058A41A
5401D17460FC82C31163FC03D1214A029C9540422F52FEF1BFD1D1D6C4E458D5
11DD2B45C3884CE89512242409D6B898BC56BC20FA370CA778D40F172F115EF5
5A4302551EFA97D6DCB8521E73B818869D770A6D5AB49C41D1231ADA6845EF1A
1216993BCC37FDFF597B0F38BBCEEA5E74ED72F6D9A7CF999933555D96BB3125
8043800B978417E2102081406E28C6180CD8B8C84D962DDB928BE426DC2BB621
260408B9402EF5BD4730EFC20F880BCD5D92D56634FDF4BEDB5DDFFECF59DA1A
95843CF6EF67F9CC39BB7CFBFBD6B7FAFA2F093CA8CBBB6E93E59612550AE23C
C65CC2750C366C9A35B3DD71E7666B3B774DEEDE33552CD75C2F886AD0D46B36
00CD08914F3E01D8A278161C05475B69C16980BACD84F2CE77BEF35BDFFA1676
1AAAB178D557AC58313B3B0BF94C87453883B0A70A85A1C8459E12D2C775D75D
77C71D77207ECBBC1EF9A0FCD3DAB56B9F7FFE790936886F5DC203FC19481214
AAAB7822FFC497944A257875F46336AAFCBD24019411941708DFE1B7863CE0CF
3C3FE84929F5C94794047A0FFA1F2101C4EDF94FC4C7A0F2A377209EC59A0D2A
27E8B052F0134E3881AFE219606317E19FC37794FCB966CD1AD698F0596A329A
E121416FE1ADFCE868640B16180F69D9B265F3BB76551430E2801B5BB06A03B1
84D3C857571E18DC4B0D8AA9DCF351D2A7FA3A194DAF95D39935FDB5F93D6FAC
D02F4D1A4D8C06B5A9E902AD2AD37ED6C454EA48CCC858F1221384E72E272AFA
A64D630BCBF6E517A8D9226F90AC20D3AC6CBA66FBE5F75CB02AAB1012B1D63C
42588DD1B218780978BA784E50768470226A5F6403F27AAEF1866654068BB33C
DEF762B24C191AD9A74FC7F98CB8DE6D9ACAEE26CF4F0DAD3AA9512A37323B73
B3898AE38F0EE41766A6FD449A5A75EB2DFDCECF8AB158B6D97162C9AE954B34
1ACC523BA4B9E3CDBEC9B1B231651941A69B5C8805838E57CA75BD3A990532CA
CBDC87AFBDF723175C926B356A7AD2B79B699D86EB8373544925CC58CBDB37D0
A51C8DBCA24FDBFEA035D6B2756B76421FCA35662BED74D8512074B22B3C695E
C7C6B206B5C85A789D9FFDF38F5E75E3F736D15C37EB2DEB532958CF370B9499
A3DAA8919D5D5535772BC8EAAA13C2ED0D5BDE4CDB4FB87CA351273355C81AD6
646672A493EEB41C27ADB0D9790705917681B2A98FB85FE4339325851588BC16
679D75D6534F3DF5ECB3CF46351E20484B5A39E25B48AC8882C72DB93F0B7294
DD60EF60178086056C981FCD242195F98AB1A3C635849AE830A9684A073742B5
B7CBCFEBEBCB6633A9783C66EA1AA0E2744DD98C2C0916C9455F7C61B46E5852
5540BD5237490BED458C17254198FA2981C73060A002638B6250B9AD553B1A75
90E9ABDC25555BA099866A59CCFF8636444BEB553985AEADC5E77A7E534523AC
30F32716378D84AE27352DD6AAC79B8DCEEE3DD3CF3DBF6BEF9EA9B073880ACB
45A5EEA2B973100B6FF127D19D8F6116401240B7922FD1324CDCCDB0F55EFDEA
57F3DA073D38BF68272FF1E58900D8BC79F3962D5B9832D80EE0458512CAA731
5F43F92EB82D3465448945E04BEE133EE32D56AD5A259C0E07BCF67F28EF100F
121E7908544CDAA5975E7AEDB5D76260FC2EFC0AE80CACF57A811D2E09A0CB4B
EE29F5AAE731CF7822E401BFD1DFFFFDDFF3978F3EFAE8FEFDFB59C541AC02F2
EF101768CFDEC29E39A2248836758271C3B30A071AC40CF3D0F7BFFFFDBFF8C5
2F90622B1D49A9278699BD9E7AEAA9CF3CF144D5B6533A35BAEEEAC4A9BB8D5F
D3B994BA87628D1575DA670D649BAD2A5D48CB06D213FB1C2BE17733B472CF8A
BD5FDBA502B55A70F259A7EF19986A8E16E952F7C4FA692F267E67B712ED319F
3ED229BCB076EE75BBE8067E9FCC717E6327EB3DDD949E6C389B56F43B54BC66
1FB2E078B901FD443D030B4C01C60D9FB37CF9725612A5A865DBB66D1B366C40
AE842227B7F5FA13CF78F2AF9FA5C17A625FAE1573692E47DF3C40A5583248B7
33A5559FC81FE82BB5EB94C8245B5AF3C4A74F7AF95F5FF0F598ED9BCC83DB6C
47E49CB59F3DEDE5C1DFD13C65627DD9662CB1D7DAF92D55EE101B20778E826B
2CBAB79B9C1F6D262B5AB3C996F8B0DF8E5919D3EB2BB5F6D729A5671AEB3E1B
9FFA9A59DED30A627E86FA6A1BBA34D61A2BAD3C30B72F1B3BA9FAF073F90C0D
ED1BDD4DC538DB9F03E96EA37EDC55AF9D5F9828D7CCECF105AB569CFFC2FE53
66623B02D3FBFCA8D7DC6F959DEEB896AD047E2953FF5F35DA479A9DC8D78CA2
5EDF78E9795F8C7F6521E68D55D315B7E18D0E57F497DFF0F8E8B3BF2DEAF18E
DD39D5A567CB9BE2747B27E6E4D269FD8FFEE88F9E7CF249A6B1952B57F24E44
B3A9A3716A0A9338809E226EE4E825A3A3A3CCA6CBE141A122C81B138560D823
AF7BDDEBFEEAAFFE8A35C223DE5CDCD10297221502D087789BB0D46793974917
A60C5308FF7410186E91D11B8ADF859A9A1B765EB65912B02C8A2B374EA8B2FB
ED107774D1CF8BE800A1BB6A2FB76449A2A148027C804DD053E17B31E75EF2A8
A12D6A2EB03A94E43095CFC7A310C4D4F04D3D907E96EAFC40353553136AEABD
2235259E5DEA30A35010D676CC8EA7E276366E654D23DEAC59A562ED85975EF9
F56F9E679BA0D5F69049AB32B523C8191401C3E195E3C98D06938FC12EA535D8
929A03F15708CA29B3095601240CBB44124011860B28EAE2871E8A8E317273E6
7AEBD7AFBFF1C61BD9CE409E1206C03B190D234143A890121A65D5986FCBEA0C
BCDEF018FEBEFD848F2609D0F93D085B5E47736A79E40F3FFCB0A4EA335DF238
D141E18892400C267CC9160CF36ED03AF362A4F0471B944B77876841DC1BDFF8
46DEAB6C4B7DEE739F13EC58ACD4D16C02C48DE15C92843A1C52CF2C72178DEF
9738F4F85A5E8E99E9030D471B4E1033FC36F9C75D39F4FCD8FEC2F379E77EBF
45954E2C6EE7FDEE79F9ECBC5BFE5A517537B6695D7670477981EAC1D8C6130F
ECDD9FF952A37E9939E00C68B7D7E7FA1B0AB8E6758323A7E9130FCFD227CCD1
7662EACE5ABC499D982ACB3AEEEA753B1B3B1438FB0D2A170EB3C1A609CFB060
728018A22E4A50356ABF9169861956CA81BEF08E53FFE867FFD753DD3D947E80
82E3A97E462638AD465F20FB256AEB34B469CD6CF3003DD61E988F954DC71B26
3A40FA70419FAD0E59F979A3D3354ADA47E285AC33FBA84F732A0367CDABD6EE
7B66CA0A725D32C6D6FBFBC60F1C3F3D3A7F77B7DDAEDA89A068E78DCA9C9722
AAA5683C5836694F5DD54F899D5E69EC9E919BCEBFE5AC6C8BAA9712EDA7B5FF
92DCA53773FF63BC32324977D3D04C6A8E3A6F7CD389A7FFB7F73CF8E59BE87F
C428A11D777D67673FF5FDEDB2C6E08473371B5266DF8D41ABE1D14DF1C0EEEB
6A33F92BFB5AA56EFBCE26F9FD997E375159D348BCD2D850A57A9CEEEC582DBD
1BF7AD0B285D4D680F060BE3EDE327D7BE7C67C7684E903FEE5D57D4DCB6A862
147AF9513773341621604120126126F2A79434C9D208F64934B677342F2EDF41
8032B12FC0B8842FF19790319215CD527FEDDAB59A600741690F427B100E19E6
AB7C592E9BCE645261064E9898EFB761132CE297E9BDE070B088382F1DA9849F
F604C062741A36012441A8D62D4A081807265A45A95C55350FBA6AACCABF9A0E
75350ABB98996C2493EA786C8690D3E11D161B1A1BE87C103E5A735544C18EB1
30B313193B9EB1622CF7E295A2373D3DFFFCF33B9F7BF6E5BDFBA79A2D179280
DF236A16A00B157C2FD18C4614191DCE41964802904510F614E53F7977F10778
60C0A6794501EB1F657651EF102846381ACC08FE57EA9F61D14B18A050280041
8F1F0D9FA3F8D60572045943FC0AF7DE7BEF05175C20987AD2750011D73F8824
004D0BC62D8F8165D57DF7DDB76FDF3E0430A4D58F6AF61BD6B2D1D123C648CC
E5973DF1C4135957858E0F1217B83ABE76DDBA757C26DACD4364E2573E1FC16A
BDD775072AD8E156F6C1A4BA30F42703402A1ECC6A8801097BA0A19058D9206C
AC915A02D7213B93EA54326E723ADDA473880A29D21AD666E5EA74FDDCC0686E
FAFDDE582379E0F1E995B59836D0DF58A83769BA71D3007517BEF8970F3EF3C3
8967EEFCCA4F6FDA95DB6156EE76E97C9B4C3D714BD3F1C9E5C93E9F06560DD6
2EEC763341F2535ABB594DACD3E3B37E719B723E3001BCE52D6FF9D18F7E043A
E13DCF24270E4CA4F94AC35424B6C156D07A6880E374C2582EF3E496A7546F83
F56D8B6DF65432736EDE6CBBF53B66BC38B9570D50AA41D7B5C76B54EEA34687
F241A29431698E1979A2CDEA45B23270E9C842BC4877BBABF61DBF9FF67B2B1A
54A25C4D75C62C6EAB52276EB53BDDBBE8F8EEC81E673A3634D65898CE0C69B5
4ED22EFA414A0BCE6F74530169697D53771D9DD6A2D97DB7EC8FA7529D4B9B5A
3B30FAD3B18F25F441ABBDB1E8F5299008AD3B1238D3F65546470BB49B077D6B
811C2F7121151AA7ECFB7A85CE9AB047CCF67A772477C25CFC25EFFC708DAFA1
64B0A699DD9DAD9A836BDD572E0CD88219F96A6EE6652348F9D9EB0DB7DD696E
A9939FA06E8C6EAD66E7356672CDBBC96F2B47E29E3D7B783E51F202BCA96896
60F4C0AC629302920BCC169133D8D0D24B15B6B2EC234900E17504111E713FCA
F94BE43DFC01EF7AD7BB7EF8C31F62EF083E314B054D4E0DC3035AC8DDD14B52
75914CA7538303F96C369DB4177B156BD4852458743B6A8BBDC9F8FF7807A452
48028C580622097A36412C6213F4125299A7F724013AAB86EDEBD46787424546
F3C3B6C62A6E8C6C229BD57E43F14D4BC9AA830D90156BD7152E453CC1A3B64D
23E593E57BC6D46479EAC0ECCE5D7B77EF3D303B576EA075AAA99173B0A94B10
B61106DB956A52A85422278E96450A0E2EB31A8D3D48560F7234F543119CE8B0
88316A5985830F0F0FB30C97F41BE8AA7C5B66ACD8DE7C1AFF1945D566262BAD
8F25A75EDA55027EE4861B6E604D19D202B1AF3F8824003603B3187E0A6056E1
7D12E866C4D6B443BB951D314E00DAC05B48A2543471480F1BC8F0DDA03AE12D
303F14AA69A2082333954FD67AA82C47B30990632308AF2215B66EDD7AE59557
223D8305C935D75C73CF3DF7A045B3A04B512FBE1546D45CCD57900CF96EA2B4
AEA57D3C1FDC5EA2F57C235209817ECCEF739487878F05EAAF50513F39FDD07E
2BA8153F426F48F7FFFB2D45B247ED86D3BE627E2847FACD83F357145DC74F5E
3BD2CC4C276A63F15BA6CACD207B5DA2DA678F9C5598FEC6CBD6E599FC2BB5F9
BB15E141EF8B4A7A213FD16FC0FA912F47BDB8142F1C9FC02451D092ED2059BB
663ED539A571734337F6581EB537929530BA37784923A97F32D54DFBDD7B1A23
9581399AF588B579BD917073A98C37DFAD93C972C23A3FA54F5ACE374BF946DF
BCA65017546F4AE61985802E20DA4E746186BE59CBFF2A51325A9944B2E17613
6D636834E7B5F57DCD69BA918CEBC8BB52A3CF0785856433B01B571473E6E995
1B2BA9F414D53BFE8DA956D0C8DF3AE86683DAC282D61C1DCECE972E703A1E59
5BB38598E13BDDB90D8D81D8D8CC8DA5911BADE681A6FE60BADE4DFAFA54EAFC
5CCA4CBAF737CB2D7273A5FFFE86F7FFFBFFF38DFAB69436E9065FEAB01D6775
1343E7A6BBBADBFC4AAB5E31E3B97AE746B2CFA7E415547C90CCBA29D93EF2E1
18B985A82B4272E792485534DB42A8319A7BB2C40379C4FBAF5EBD1A396FBCAC
088661C741F5416488FF647A806121D8390725013356E57D0E167BBAB2EDAEAB
64E1F4F0D0605F5F36196796ABDC8EBEA7840924415823D06BD11E4A02146749
63588A401418BDBA33D804CA36385412C02C8024087D4D4ABAA0BA2E50FD1E9C
C5CEC67AA0C047D94009338892F1649885622A479075D0327055CC83794460C4
F841A6EB2990896E27D8B3FB004B82FD13B3730BD54AB511B68453516CC3D7C5
A3BD04E01BDC1C2E63307A7C3E864C86BCE5D9478487ED35D68511921157CCE1
46FA922C52EAE1CAF1ADD0600BA9F4808E92320EEA4118E15948848F26D2C878
90580581CD4B09CE4587363AFE43D904CC31376DDAC44C1986CBE38F3FFEA10F
7D4810A425A10D8339761629F57C62521B0CD9008B478BD4A2433008C88714FD
32F5F3CB22D95F12637A285B479504328130D16097F07DE072C1E24AFA009E2E
7B55246E2613F36A4E733065CF6BD6355695ACDC16C3BC6A8A8AC72F7CF5C5E1
4A21E1B7D2179DF0EC579ED69DC174C9AB7EBE44A5A4B5B5A95F6CB50752B12B
4A29BB601A73B50D0399D2C0FC5D93C98BBA7EC669DFAC4AA15674E2FB367556
EACB2736EFF70C1A08FA17E265BA9AC9A92F7143073B11C20FB3243D6CA91780
417E2D8C48BC2FEB13FC5EA05225BC630B349D8ADFDA28EC1999787481924E6A
811A5BB3B17AC3B9C3239772E753658CCC66D6AB9AC14871CDD675A5F98952AA
C5F22FD98A35C84AAD6CFB1F4CB647B2C1CC24E5C9E898DEBDB47C76643233E1
5F442C07F56D2B8AD7B9B146C9B8D56827EAC916658673CD9942CDDE697729B7
B17F66A83874C1E8EC0D5303A5FCC24325AAA5B2773592CF0D4E3F56D4F27E6A
86EA9BD94E6A17AE527D3049E5BDAED0685F70BBCEFB5D7BD02A24127E393E7F
D90CFF9CB953AF5DE4B39546BEEABD33D04AD60DEA7CA9993B60D41D2D63B865
8306BB7AFDFAE10ECDDB35A73546A9994463458BAE23AA51AA99B02F59B5B0E2
05EDC2D3ECAD3B5B453F76870F62833908CDE3D8397842D86886818D297B19CA
A89C0657B9786E04743ADA4FFB8837C78191C051810C25A87AD1A0E0A21A0AF9
8F2E5DFC33DAF0C201C23FE6F399B19191FE813EE6BCAA3764E8CD51AF4D4CEE
1D1E8DE33BE02FD83CD09EA24DD0E4832A3D50D71AC82225CD5D0C0C18075D43
E1E18585012C065858193EEAAC9508080D70CD57E81131439590A9A695B164DC
0AD56733A1DC39CA53E47ABC01BAA85C539E62259602C763B2F03A6D6F6ABA34
3931B567F7E442A9EE74017DBDC84D60E6A3BC560F8186FC43DBD8CA7B45FD1E
C2BBE9480AA6D6937F1B366CB8F9E69B01D60FA515E26489462CE7F316450E28
ECF7CB2FBFFC81071E882AECC71F7FFCCB2FBF4C3D6FB5DC0D0CFD7013847A9E
416888781D7C063405CE07B30673078C04C00B81E78C30943C25E8154EC31B83
E145C1A5216650C0258E35A9355952032C132BF6103AAF02F359EA96912B25D1
36F4D590CAE7E05024A5205269CC577DE2139FB8EFBEFB248A23687D520F2845
D17468FA83AC8EA4170B9E20DE5758BFCCFC625AB71637876DB7515B51B3E636
B55B691ABC22E55E3FEAD6E29DDB9F1B207DDA64AA3655F5AA9658E1E727AE9E
50F5B45BC6E86A961AA5F4D5541F232A927E7976A8BD6C7AFBDEF47AD72A68C5
ABD5D3C73B66F106B3ABB7531BFB562C1BDA31F10A51B67347994A8171832E89
EDC84D04ED19B98C530A9627FB5ACD7D9E4E5593F77E405E7390F4F95C92AA6D
55BB9CB5A9D9ED73F5B2D952686EE514DDD0585B5CB9EB9EFD94F0D7C4E2AF5C
64C6AB8DCE761AD2ADD94D26594D6B23F57BFDB574C3A544A751B603EADAE477
328520369F2C0697F23459F479C39E1B88FB1315D589662841B3CDBBD2C9B9FE
E4F50BF377B4B4497FEDADD99D892A3348AA1B0AD839D718AC9C347FD36ED2DB
742DD17964F7A5DA3736FA3BA3C5ABA74C67CCDD7E603046CDA6D9BC2547AD85
C2B54A12743364D59424E85CAF343CBA857541B2BB59E5FA77C9D842DEE544B9
3EDADC26DF3C2E3FBCF3BC5D14A3A1AB32B3FC73D0229B0A75AADE4AB1F9D1FA
CDF3038958BB95686F5B509D696E4A9D44C9176E99B3A747DAF74DD3161A5C48
356F377CD63A59F9A18E672B6F8ADFA424A57DDB0558217CE6CC5AA1C081F0A2
BA97E41A6199B055D1F61C5FF216433101B60C2C605CC277C316A65EA4817ACD
2971BED030487DCD9A355353539FFCE4271F7AE821B9E7229147C7812C69388B
1517D5D5861F1A1C1C1A1ECCA553CC79D54E40B23CB18E196ED15E374AA93B15
614011B46AC58F7A1E7F1D8E79CD9594A1450DB78786892EC89A121846A07A73
87918640DD9CFF0749C0E365B61FF62C56EC80ED15CB8A29F4694DF53E0E4D7B
9574C4B7613ED0757D9601ADA6DB68B5272766A7A7E62727A6AB7547C5BB8D83
189C9871E93BBF44448BAB4E2ACBC49514FD468CA1259C7D7474747272F2D5AF
7E35CFF6CE9D3BB106E82B7DC4F3519C053E8E9546F11494B575EBD6BDF8E28B
122945B017FA081461C866A49022E905CEDFA057C48B751768073053E496C15D
F0E8A38F9E7DF6D9428B7C1F50B3804E0B8234C8FAFEFBEF3FFFFCF30132CAF7
07AC1EDBA770C2F09DD1FAE2689260495416F13124BD083E07A81CA6CC1123ED
51F79ADC07294660DCA79C72CA73CF3D274652F47130022459483652F46E9852
5E359E1F24560085427C2F9076FCB2A55209B4B12A08F626C9EFA6736EA06DD6
CB89E69F57DEF383F6FF540EC947022AEAB1CC68A2DB705B6555BFCB2CF2120A
FA569A97EF75B7B2EE648F5FD26DF62586CBEB5EBCFEE9418D3AD7256A57B654
49F0A67EB7501C6B9F72E0FCE72845C377AF9E99DD6D04CCC7ECF696762CD0DB
D7FA522C161569C9545FBB51F2B2E1DFAD98D5355583E39C2A3AD6EAFA809FB0
C83BA0BCEFD4AFDBBE9BF7FC99843E3E7BC5FE74706A7D5B83B4DDCCE5CD6DD9
B643EEB66AAA418DCB75CAFAB16B49F7B29D7C834A7A2A13F76BF596DA43C911
2F359D988B6DC966666B955B83040D0FAFF4761D98CF69E329636AEAD37EC046
F8E344975AF67C10DF6A55E226F99557B9F664400B46DBF04CEF0A379E333A37
782B3714F676E6866FA47A821AB751DFECABCBB7FD3AA922E889C9DB5BE419FA
E5BA6F396492DE1C4B9B075878541DCDDA9261B196A278EB8686D1185AB8B9D6
7F2D39734EFE1E3F3970DC9FBEEEF58FBFED9F2BF56EF6A6B467E7C76C6B47C0
A64387EE70A8364E9B27FB7CBDE9F775AF2952DAA29B595296E946D25FE9F7FF
A1A86DD0128DA0B99D62A63D98E8AFD6CB0D95B9CE0B6B26F54CB55B02B9A25F
EC12555D3CFE2057105BD497ABDA2F861E24F11960FB3375457B3AE921DEFBD7
BFFE757000893D44571C3E1B2178FE77EDDAB5BB77EF068EB228349A34D89220
5B4FB752FCD430B56C3A3D363E32363CA492D03525E014E3EB9517B024105688
3D190D1A4BA840316B03F13A0310417E003E8BDDDBCBC6E9C1534312F02E0E25
0185BE25F50826DB58CC3015BEA9CA208AAB0C9510A24E6191AA73146C4A78FB
B89589C54D309176D76B36BAA572BD566BEEDB3B3137579C9FAB761C952FC4A6
0306CF9C1AE81CBC6C92002A0064516B0073AA47DAA11CD1B9713867A73078CB
27338393EE31D14BA2E7837F81EF8BCECE57499D8854124AD59818A7587829C5
802041BA0285F9CB781C9AED48311D337A44B001AD01BB840709900C297043AE
AA6223AD16BF0EB33C245C8AA623EF1265C74C667C7F9E5B047B0F9704147134
41BF8631046B402C658825798B256C5A9E7BB824401A352C09F047FC49873AE8
A2B2E188F7A79E658D97C554F39078FE016B8A1DCE3373E0C001556866266A6E
39DEE94B0F77CC8FB666EAC6EAFE57ED4EBE9820BD754F6374EA842C0D4CD02E
9766FA12D64CD7A72D2E3556C4EFDE677E901AC7AF886DDDE794C90A0ADD3BE7
0AF3C9B9CF37E91C5DCBA432B7353DF258031FBAF9B85265C2D9E25A19DE7581
D7216313F1BFCCB0C4F98017E4518D8F8FEFDEBBDF4AB971D7D2BACBAB5E9B8C
03961198DD54772870E79B0AFCB99FDC698A27A8D636ECC01CA0551AD527364F
328F8BDD1EB7DC4ECB4AC63F9E327DBBF6E559BBDCF13666FCA4E35DDBA64E8A
D28D2CE5B5B8D15C9877143A92997513D54C8D3EADA5BC60F4EBF93D131E7FC1
54E8B4137EA6459F207D34DBB76F501B76F4F2FEB93B28ED15EAC9390505D1EF
8E6587E69C367DCC74465BDAF3819DCAB6065D6B43D2D283FA35930AD3F3DB79
7DAA6B525CDFC492BE99BEC7AE6B21485FB34FB7CA2C533D9F0A5F3E69AEF802
D9B1BE0BB460F750E5FB3E6D98A38A93DB46159DF2A356E9535D65F7B0CDC16F
DFA6651477C999D8EAC7DD42E7FAB964979A964EF76668BEA25D9908622D6B93
9D8E2F6FED9D769627DD4A9DBEDC50E8A56DDD24C353584EBEF264B84CCFCAF3
F699CF7CE6DE7BEF4571226F015E08DEB3705722DF4C9A83495E22DA49C99751
8000C962D022982B279C70C2DEBD7BA1C24665C9E1EEDF25E8F7F0171DDCB0FC
0056EE78D0FBF6ED8BDA11E1E654F7B162DAF0F0D0EA95AA5D81DA549AA2ADAE
EBB04D004920EE20D84138A25065F00F88246021A018962F887587B4B10CF021
B411D4C9101E07F1D1345BF55D60511016169866DC58042B5556C36295836228
76228B0A6105F5D5F1CB95FAFC5CB954AAEEDFBFBF5454B9B97E9839CA3601C6
BF6CD932C0B7F22617A349EA06846145ABDE0E57188FC1D931EF92D72F251E4B
EA18A2E7DF78E38D9B376F964A10293BE45F590CB0BA2D1D7445A5A530C82168
68F89E956B3E93B930C2D41870B44882425B9269006152B892412BCCD180CA09
060A87128F070DC850EDC5E7A3090CFF247873B01EF892934F3E99D570A651E4
35A3A8F888DE21411E04481CAF056F1E8822FE57D243652196A4A8D1A136E812
EF106C6A1EAAEA2316625F4BD8461614D178F46B5BD27A480E012A87570AC56E
3CC3C0C0401ABEDE8374545697795CD2DFE95AF9C6C5311A98A5BB48B1307EDA
06EAAF2D2B3E38A140EA3F1B42D5FF0369AFE8B15B92DDD94EE23E27538BCFDE
A8998E6F7FBE5BBF8B56EE5AD3DC3233976ED0CA78EE0D235498ADFC438BCEB3
4E7A7EF48527F616A63334A0CFBB15A55F5D1E23C3A2AB1A128B42F91EBF38AF
C533673EDD2DF9DEC3DDF1727A7EBCDEB988B49215DCDCB5BDE1F6C08C7676D2
480FB837EFB79A85AE598DA53A8E4E469906EFB3E67FDB4DDD4FD534A53E3CDC
583543B7109575D541F8928C8255BBB555888D5A863F37B7D0D5299734469617
CEBEF8F2AB3F7D8563B5565F7BDCEE5889B62EE8D5ACAF55733E554CADEFDC53
CB27EFA0F3DBCA47C0DC6F335175B576F5013600CADEB255D49CA3A27F2159B6
59B9CF4DD763AD9CE35DA31C65E6CD54B88D9A0D0A36A6ABF9BAF109D206C97D
848676A48ABAF2D29011A7FE8EF9B9014AEA83EBE7A6C768E8836B66F55762DF
23E70593D6BB0383E46C5C5B35F8D141EA72B351DC677F3FD72E5614F65E6998
45637763975C9BEE9BD6543441CF9D6399C9D50BFF738E3E3EAFD6EE6ECA5492
B564932EA313F69DF0D2775E4AB433A96EB2EDB4EBAE022B35E30923F0D1AE83
F72C5601CA1F227F02C0CEEA39A00198A2F804DE6BA266B1C2819CD12516B314
63CA8E408C50808DF10D5F025D33DA890F5B00AE0B38600F26CBB11878EB5BDF
CA7F3FF1C413303D10C743585969E814E47299552B98552ECB645286AE0262ED
2EBF5E1BDE21A95D845F088EDD285E69541228A7BF1F1C0C8A6A08B2634BFBC2
7315CE62684B04C27C15B044C082286EB3AE6FAAA085AE85718BC5CAA9501D76
E4CE763C1BB3E328D3ED74DD72A93135335F2C5667A70E341A61C9854209B782
45B00C1FD6197FC08B53CF1D246E5F245748EF49796BE13E62221C8DB3A3CC07
169824141D9E2A800F0F3DF4D0D9679FCD2780316DDBB6EDB2CB2E43FE9624CE
F34262B4604CE242111716F83EDCF4D4CBB54742AAE06C036D0D3A05E2E102A3
0D162CCA08326B59A9BFF2CA2BB76EDDCA5731EB671D07AD80A3E2506AD90514
081873D1E00A1D294E103DD6AC5923DA09F82FB610724FA39D5365DEA8577776
C438012AAD1037A61E123B042D9615E4CAB304DF0E2E9715C1372221C4310855
0BEFB872E5CA0F7FF8C3DBB76F478A8152C1F4FE8174D173FACA9FB334ABBEF6
2EEBAD6FF9B39F7CF77FEF7A68BA6F221B6CA9AEA4E5BF2DEC1FF8DCF19D855D
2DDE43A3D6F8C695B5FE1D55E61ECDACF5D9B693EFAADE26F7D21F75FEF8A9EC
CFED6AA23DD0D2CFB3D6EC3E75E7EA67682B8DAEC9745FA20F9DF577F73EFE10
6568FC9CE34AED46FBBE19294E14C43D9ED2BD1FDDE35535F7D1CEF87C7A6EAC
DEBD80F45ADCBFCDB33B03DDB119EBEC7C3BB068FB8CD52A7463353BC393C59C
3870AF31A9D0C84D176A5A3BDE186D7DE165AB46F174FFF8AA74FDCC44DB6B2E
3CB8DF68C4937E27D062F6CAE5737B5E29E4ADB946574165C4DD551F5FB5475B
A0AFD4CC5AC2355A395FAF187EE293A7B4D22FAED93658A622ABF9D317B95438
217EE51ECDE8B483FE4C2C5FF377DB7758D6EEA133EBEFFED157BFBD502E791B
1BC36661768B137CAE4C6F26FB67C7B9835DB7BB8F6E57CC63B493AAB22C0FEA
258B99B766BE77C0301D2D36D4CCB839B755F9D2F4BA699A8B0D54B66502679A
BA6DADDF369EB5285B757F48FDCF8D3B6E2B46D9627E8FCA53F910D10A32D836
EA1F6E561D1A2BD27A2AF8B1DCE644B76A4F6E6FA68254D598316E4EAE7D7ED9
CBDF7899DA66A26BDB09BB1534DB9D26297D57D1181CAD68700BB506A0BC2021
FEFEB4D34E7BF6D967F91B3E13688C9FFAD4A7F827DEFE08DC3221C1078B28A6
A05B623731F949332869BE0BE2974C6EC42A60460B18306A3F11F35B643E1466
46F31067676797D4CD86C244ED24CB3247860A2B562C63553461AB7174147ABF
0A2176BDAE788744124443058B4102E5BF89859B4D0BBC431BA9F78441EFB13E
BC4F8B0CA257AF109019C6D099C5ABCA8698D16B5A498BCD52428D95202DD5A3
752B2C6EE20BF56ED72957DBB3330BC562B9522C75BBBE42CC53F690C211840D
313838C44FE4254166BA4C74341F349AAB23DC768953E26836013076F03DAF3A
FAAB1CDB8680FF075C15B811F08C5F7FFDF59B366D42674A490317F84FE1E3E0
C84C6DA81F79FBDBDFFEDAD7BEF691471EE15FA389ADC86BE29B7FFBDBDF3EF3
CC33A17100E3881922D3229FC68C1E1A0A38FBF8F838EAD144A421B48BD78755
2131555693F9644426401E479404523F41BDEE922C6CAEB8E20A385E00F48680
DB119B05C9BC2D31D496C409647264F96088A0FC0D5204854210FC5141824355
59C6E380A70DD1BA5ACCFDB14CD8B1E2F743B67E4B6B518E7253F146B2434D66
D403ADE30BED9D3B33BEDBB453463B96A04E4557814A669A89C4F2567D8282F8
B2A03E4D036EDF829DA054ECB50BB3CFA8FD11C48895DDA65DF51BEE904F0D4A
F751BD6890E3196E62209DAED64B0EB99EAD9A7F69654DCA4DA3B14485B79871
9341CA6F8D959D26E9937136213AA966A6A97AAED8E1FCF3D726B55DDDA69863
7496797D0D725C6AF05DA772BC6FE8C47AFF4B6E2D3029E93ACD94CA064955A9
9909C9B1DE64538E2A359BFC91D38EDBF3DCDE5C7FE28C0F9FF1C457FFEF8C97
69CDB51A298588AA359C4E2E6C52366BD2E0E0AA85E484F78A6BD06A6B74776C
4AB1258B72737D9578D9E8C48746935395D2699DD17D54744EEA18CF66339469
B3C56098654BB57E1B75CDA9AC9B6EF7D7A9DBDF555392F4A8B5825882EA35C5
933FBDE9A30FDCFA0F566338994E97BBBB5ED54DFCD66AC575B2DA094795F3F1
D30A9ED56E0409CD0906C96FC52BAD981BAB93911A6836EACBA8B37F1D657664
6ABAAB273CDFE9B242BBBC4D7E61743235C546DE506EB43833AFFADE245879F7
0357CF6413306A99BFF3BF9FFDEC676FBBED36701558EDD8D4480D87058FFD08
080A49E5FAEBBFFEEB1FFFF8C72803E2ED2328875044A23E1FA90712030298EA
824D2DD503516A3F84F940F76182466483CF08B7CD2214A86AC8C3F49D8A8F8F
8FF2AE1EE8CF841A3AAB695D9104A13EEE1DD13B247CD3A04566BD4412847EA0
40840136B3AF4614024D1F2A09541FCD304EA0BAD6841163CB8C61B7C34BCE62
08E69817A209A90454D5B84261CF2DCC978BA54AABD60EA535BF42C80BC80B4B
91CD934F7A15BFCED4D414F826E201C2FA71F0E3A4817B548D3D2419EBE89C1D
8B114D3B59825AB1E47C187DB02424DE8B2587FD08C41B542FF3E480359F74D2
49285D16DA92AC4A383170B2A0BF89120DEA144B08969604B40175C74AC3C4C4
04CC88071F7CF0A31FFD685475805F886FFB99CF7C867F65E1C4F7E4CF5BB66C
8936553E5AC4186616183D7FC362808501FA150B8C1DD29FA2DE2461D6D170F1
E192209A80B48851180157970C0DDE87AC64EDDDBB17A0B351B3EF70AB8507C3
2F2B85BB700D510818C00F8241F3C642E29745D6765A093DD9F4CC4C2E5B6B94
B3E9FA2983AFFBF9DEA7694495110C05DAAC1BD07066A063C4E6DCE9612A2CD4
CB41DE49375755DCE34F78EF8E3D2FD5B5C9DC384DED2A698655F7421A2BE8B4
C0268CE1975BA4399AAFDB46CC521D6514804A27B228123054CEE5545FA759F6
D2E16F1D153136B456AB5FF5DF654155A094498EB532B37772C176C9D647CB29
87FC1C75260CBFA3366F56F5571B745EDF747634CDD6B8956877DBFDA97CB3D4
9ED42BE4F8CAF363C5A84B851895129ADB8C1712297EA7C116CD9BFAB06B2557
8FEE9ED83DAE6516B4A6DEF1DA266FFB34F92A8EB86224B773FF4E3212635EEB
00654F3C75F58BCDDFD07ED3706C8DEA06C53BC9CE7F7BE75FFCE4D95FE49D8C
5BDE5BF350459A27A746CA2F1667ED2EDF6D95629476AC76CC8C3BCDC680965B
48754DB7C5824A1B6D349F2D0CE45293F624CDC4546E51CACE36DB4150ABB394
75286B67679216C51AA4B5B485786076B43E4A35629D56CC31F3317FD2253313
D8CCFE6A09DB6CCCDB0E7934DC3FF6E76F79E713FFDFBFED9BDD17A848A5B6BC
B06ADFEC6EB6C0E0F9E9EBEB63D2950A2495F1183A3FA385C4D21851A80B7C9C
25C18F7EF423563504AE2E6AA3C3B729ED46A225EE62DDC2BCE69180F8A3C525
517EA5A121098FF58C33CEF8FEF7BF2FB63CEF20705E5D856A5531D7D0506174
74B830A840334C5E6CF2A39200DC5F22C6D186E98B416342CB012D0C45ABA644
9AD6F3BCF75ADB532F7C1746A47D651F2C4A02D54D4E69F2E487B8437A585FA6
24412A915CB439147C8D32F37976C21A2387EFAECA23DC80C542ABE9144BF54A
B9D6AEA1CC4AE5A77ABE1728694776C28A9909405A22F42A65A251D1CA93C89B
9C27873779D4B92CA1DA2388D91E6787638E5708656202591AE52C4B2481487B
AD970C8E50019E82AE907C5B04302115F8CB37BFF9CD3FFCE10F212AB41E0E9D
DE6B5C23AC100B043F18540C8123C5CB4AC1D19D77DE79F1C517F3DDA0ED4A0D
334512A225BD073E74E946201388E6C0C82B3D9A77086313E545DCA051E7D297
BFFCE5EF7EF7BB3FFBD9CF60C780C781F6B40880C4E1DE21019F88566062E1C4
D440701578D49899C36500F630426BEF7BDFFBF8E44B2EB944EAB00044810143
E26EB97EEBC6EBFF2163FDAE5326276ED81DEFF4357FFC8BE99F53B3A0E9A5C0
723364E6DAF6AC99ED1AB39BFEEA3D0FFCAF7F99B3C3B6C00B669B92F95475D5
90FDAB729B3AB981A6BB60372C2DEBB6824CBA96ABA70EC45CD3E95814BFF2E6
2B6EBAFE965AA3AD42BE66BEE93474DF158026EA614F2907603ED72DFAFDAAD3
D882F23FC5D33C79E435975172221D50DB1F1E1C5AF38EB7FCFC5FBF97AAD51B
A63BE8D2BC4DC99C65CEF0E9F92699A9E1B9D80C6BF3FDFBED723C96E834BB26
A54DCF6D5BAD91C0683A9D6A5F96CAAD55697B4F9315F27486EC36955D4A04CB
CCD169B7EAD61A69ABBFAE15797DEC34651672B37D1D2AF7AF5AF657FFFD8C07
BEF40D7BE08FDBB34FF653AA491537468193C859A9AEBFD0E2658CE75FAFA79E
6A94BD0413B35368B1DC2A4C697B528192085A32D770BA434E67D6F6A99D2296
8C5AF5DCBB2EFDD7F3BE5CA2A94C2AEF37CAB5B8D3B2F8B9CBAD525D8F55DBED
416535301B88F5679C498FE26DABA3E2989A4986BBA2A5972851CB34D848EA7A
693353775B2B29D8CFB2D0EE260C6A3512B9B4A775BB9DB5CB57BDBCFF85783F
EF02AF55F2D9904B0D263EF6B18F7DFDEB5F4731301AE1310B061300CBE62D06
EB59FC45E22E167B0EEC8222D0F44C69D20596FFE5A77CF18B5F849B17D9A580
FCA23025843FB0D1FF918F7CE4C61B6F946A01EAC5D5A2B98E8B9C28E426253E
5523A3DEA887DDEC1CF18C436BE6C7302B4CA6AD6C2ECDE3B378285EB7DB6E05
E4090A9894DDCBFE719D83AE5BEAE11084AADC21A2428FC088069143766014CA
1F27C35D6359763C1E434F06D5C12E1CB08A9F049EABEC03D60A583674DA2D16
A78A2934EA9D688213456A02E848874C96F06E5403F82156FE073FF8C1871F7E
18A2FB6B5FFB9AD427C31D8F8C78247B61BDC5C524778BC2E3403345A0654987
7AEAF51A13734F381A02E37C7356DB592480E1F27D42C3E8F7EE7D864C628C41
120FF8D1AC9E5F7AE9A514A63FB18478C73BDEF1BBDFFD8EAD04BC02850E74E4
334043416C96050674104950A6103B0880A96C2EDC7FFFFD14715FF44A4C0CB4
B68F16BF601E98F098F9B25D02870C928260E2C0498AABF013329AA807A7C18F
7BFCF1C7317BD13914945649FEA148AC05EB88F28868CE867E6843639C26095D
48B1553FC55266BD38908DCFD43A5A4C37BABEAB8758D52D2D4D85364DC5FAA8
558E27529A156F0745AAF21CA4B23E6B9D4E5BD7FCAC67F81E6F46BBA67AB377
6AA97EF28A31957B339CA5996A5AE9F26343F1E27407DD9A023DF9C94F7EB2B4
30FFAFDFFA474757FE24D58CDE48078EBFE9868D57DF70753C8883F8A35D1698
49F1BFC23ED0BA1562DEF652F1845B6D355D668E85245528D5D18788E62857B7
F7B3C2B62E3E385BAD555456AC7FF248EAB9D9F95436D9E0F909D51ADFF113F1
648BD5EED0C12032520B41B061EF222A838DC0748B85E07986579DCF17AD4234
8F834D767BEA3654E66853528A246B4A873EFE15A9D247DB17927707E500B782
B98C617FEA539FE22DCF1A21AB0BAA8229EC29CF54C723E491F078801B11D5EE
A307DF1C2A0E583C9FCFAADBCF7FFE7394DF239F2DEA27B8EAAAAB986859EF11
64147C80BEC513C55ADACD37DFCCF4C99B4226966FCE037EF7BBDFFDAD6F7D0B
247AB44A3444171413E679E169E59131D30C2583B138627244A188C50CB07B1E
8469A9D91F2CF427F9162A461B322983248BD4EFF58A5AD4912926DC3FEA4C3F
5C12881E47472AEA8962DB454F0E733D2CB486C7F79EAFB898AE38A9DF6A75D8
0E28162BD54AB3DDEEB88EAF6203A1A57C7865EFD1568EDF1A4806D42B7685E1
221C4D405DA6A7A7A3A95A0F3EF8E0F9E79F8FAA60D61CB76FDF7EEAA9A7BEFC
F2CBB0DDA05C030E10942D2101B036FE063A26EB0EE8BA2E7325016149BA97EC
7E5415421DE00BA150FCE70F692D2949381280E20133C14D4E4E02F91961095C
05FE0B33223A037C3E5FC5CC517270E1F1E70F175C70014B97647880C9321B85
6B2E8A2247BDD0BD284100CF4141AFD6435196BC29EA75B611D21259FBAA57BD
EA37BFF94D54E0214100E216A178ACACE08A63C062DC483A87886789A25F7FFD
F537DC70038C2D6613BB77EF5EE45F5ABC3FAB552BED65C79DA0EACC83164F6B
CBB14DBD1578594FAFC6B3D429F72957A555A1567AE578B334E9EBB14C590FC8
74124EA7E5D2F81B8E2FFF62678B066C6DAEA927F89D6CBFD64AF55150CEB586
2B5E95AC8E4AE3B153546BF4F38EF6BCF97253755B0CC8B04C4B8BB75B9DD7BF
E1B5FFFED4BF2BE33A74FDA1109D1546265ABC91640062539C7EFAE9BFFAD5AF
28A3788161E5FACCA185D909323AC680E675BC810ABDE3036FFFFABFFE98E54F
DC48A403B3AA353E78E5D9DFD8F6E5AEDB61633BD797E5A79416CA4CDB2A5E12
822B00AD0FB532C22BF55E1F85F7BEF7BDCCB95098C2C3E02FF95F10306AA1A1
1E615DA004083B030FED6999076BA6B00A4C874CB41FFEF087B76CD94287BA70
0FA77FD01BAC70D460C2A90B956EF5EAD5BB76ED829040AEC1F8F8F85FFEE55F
FEE33FFE235FCB940005E81892068E59A908938E31D1D78166C32381C8A1D038
E04D21B5F110E4FCC4E38F3F1E68B81469CD84B738E9A4935E7AE9255C723449
206C56E3D7E0197FF1C517E371655F187A6C314BC96B8BE1C003EBA8FDC61B46
6792CDE532BC6973D9740843A47C388BCEFD9EE335E89517841B52837B0BFE5F
E1FE2A01F550E0CFA8457FB84DB084716BBDCA5E960489F088F58EC5458AA9A2
AAE242797676616E76A15A6DA8F50D8E320B47CA5D114980A44C8C01DC9FFF65
6687A2412811D85AC8B9648EBF61C306291184F017B50B6F0AEB0F7E15147F82
6B838347B38C252F984987BF018B14D8350ABDD2AC149C73CE394C1C7E0FE759
10C97F5F9B20EA61D723FDD1046561C99E1109443D158C298A7F42E349FE9345
E0EDB7DFCEA365FB94A7457A5E82EFC3D189CD26C1799E31BE03B3067E657E04
8ABDA589665443D47A70D6D1A651CB962DE33B63DF620205FF957A625B860D19
26941044AAA6E17D82EE2930AED8B13C064805967CBC703CFF175D7411D01F11
15E70103E6818766DB6E9BC54D90CCE5F28DCAA44E7AC22878C64CDD8991E1D8
8978BB96562D8D13DDF48A93EB3B9FC9FBBA1BA84827E9BEE9939FD07C3DE8F7
E24556AB8276C619EA92DB318AA9F4985B99EBF415A8D9E8EFEB6FCC1E88ABFE
B84685A58245763D964AA48BAD9299B41CD5D18062BA459EAFC70D0142E02578
DBDBDEF6E4934FEED9B3476276C84BE199FF8BBFF88B6F7FFBDB7ECDEDCB0CCC
D7262C5242818FB26935BD011A997A6B7AD52B3B2627F8B6A3392ACDE6E2764A
CF4E2D4CF7E5FADA2AAD4D2D564C29CD66B3D5E4AD373434F4AE77BDEBAB5FFD
AAF812B530B39EC99EA78BE793570DD11AD4E10BB1494B258AA0FF6B11546069
C82341A62826209826AF385452583C47DB1742004266C27325B51A67627F45AB
2CC18590A27334FC2EB1F591170E6051D849A2F1043D70213960E30AB03CE85C
500FC4BC330FEDB8251185FF9424402E20AF8161C045A5F79EAD47142EC30F2B
D454FC58E3A989F1D40F0EE45924C4C38081C48AC1DDA8E7520875310F0A353C
95E2D5E5FD1265C47AA4E7A5E8EC51E00A39010E169C03D38F9704C1C9D05314
5F24054F6913070E4CCF4CCF55ABAC86F8BA7223F33A75974C81C89A23CE91E4
AD47EB8FB078200566C4E8F4C2A4CCF40A468378A672A62593D2361AFC0E2A03
7CF79B376FBEEDB6DB98887143B600000A8FA62B7C7FBE037470212C3068F10B
F17DA255CA5087F90E5A88B8191C1340FBD89240AC3179651E0F5CE13C24BC08
202860C488E704C939D8DB3C6C5E1A3E19E347718D9829E2FA44DD0DDF0D5210
89B628EF40E6B51EB6F7C1B4441D6B92382BD9143CAA356BD6B02A245C3B0ABF
C197A04D1046C8E6058C2D545A40AF94BC61EC40E9754C618898B7BDF4A8A1D0
14E3F3512E84D239F82DB12378E1D25AEC639FFBE83D0F7CA153567DB85BCEDC
603E5F2FF2966EB463CA7D637B5A9BB97DE0B07235FE2767FCFC89E74941A8EA
05DD6DB6CAB1FEBED2BC9BA5FEA2B9CF5C47EE8B6405B14C225777FD8E561CED
1E3F957839C3C68242214A1DC891D76D582D6B15C576502B6925F9C55C4D25BA
E40672D5D9CA486E6CBE3917EDBDCC621B762D4015A39631C05659ABEAD757CD
E96DADDF88D5BC6E779A52BA5D2DB45333566398A73EB12ADDD8339DA4462A99
657EDB26753796768B7D96BC2E4B0AC332B2891CD3B68482E07E11671AAB563C
9F4C244C06804EC1F2F1B47FE10B5FF8D8C73E864C0104C3825E3B2050059409
3F82B849872673078716D0F09245159A2507AC169E8DCF7EF6B30F3CF08074FD
C316901A20B4848468C1E605FA0B94D1CF7CE633AC0E1E8DE762B380B450318A
9A1E307AA90CE713E00882F523505AA267A3331A760ACC11AD578C866453987A
D190EDE1874CD74134F66653C925CF0D3C1FAC3C80AD815988590AB68194D74C
25CBA6D389E1C2E0F048A12F9B512D0542CF3B80AB4061404A828C42D5037608
4AE0906E4A915A2D513F253B4A5CF912F1839A860F6001522E914A65D4E38C10
61224C0A2A576AACEB4D4FCF96CB151EB3A994052BE48FED288F8B78A88E3C53
D2A55D9C866CCDB1ED0F3EC5C635D82258031404F49167E24693484C02335026
653E0D1A28B6223276204159B8C2B46432C5B6BCF8E28B999E009CC9FF32038D
9AD56216F0255227F24FFFF44FEF7BDFFB24EABBA472ED3F736887D6E8CAD200
DC1C8A89003E8336F02E22AED8BABFE28A2BB04FCE3EFBEC2F7EF18B181BEFAB
4F7FFAD330723145921ECAE3FFF8C73FFED8638FE126BC57D7AF5FFFC8238FA0
1501F247A13409DF073BA09E47580251FC2FDB04C8B016FC45C9AD86F30DC3E6
097FCD6B5EF3A31FFD88576A6A6A0A7C1CEF026582427713BE91DC50EAA5EBF1
C8996BA02A5BE0BE21E7D83404DE06CF7FC2A366D2F359E3F7FA13D954B1B39F
D96426990C8ADD7ACAB0AB669C1A158BF23EF5BBD4B73AB16377AB3E9CF58B9D
11CF2EFB9576960C9F8EABD36ED2BB397F6565E581F8946374294C15A596457E
977518AD130F9C0E30BA121AEBE8C957BC265555DB74E62B9EDE4D0FA4EAB38D
34A51B5A031C0DEE4711C9528F12CD3753F2D2F28F0BD64E7476B52D3A75ECE4
67E79EA7389945B263C383B1D57BDABF881B34EE105B3573069DD4FFC72FECFD
398FC736129669B9BEDB725A9A1964FA32DD8603340EBEFF19679CF1DDEF7E17
79C39270F5E10F7FF83BDFF90E6F01F1D4215D4D8F405A458B7BA2753F92E907
1E1AA579AC3EE8E475AF7BDDD34F3F2DF473344DE8BCF3CEFBE637BF09C90409
C4120B355F880108E00A9CECE0545AA44E78D5AA55A13978E4FD05868EF12324
C6FFBEF39DEFDCB163071B67926488F3A3502BD8E950FFC578C26694BEE87084
42D6429996D4C1238EE760DD8C40CA2C2C280F064B8256BB95B013AD760D9318
9AED64C67455CC1EA06D0099160DE4FB474787D9324824E261984F83F90C5B1E
8001EA955C1FAC5F64DD6243F3C09379914316236A1044537420602463241477
CAF661AEA8870845FC46AAAEAFED2C944A3C41B56A43016CF5403D559981662E
59F860B176C13BE24C895A0D3F03AFFD9FFEE99FFEE0073F10BF81D6EB9F05C6
01010E29082340C043B0C09217CC775BB972251ACB80D108E7E2D7E413E07F60
110289224DC6F989921EC04F81124DBD444FE9370285EBF7B509240821732E29
3AB091796F408B9483BF04D28EA442E37B0010014A0F99AFE8F3071926C164D9
B128BB03D387F70CBB450027C4F12806324564B9D8C2D22759901771C0E12066
013F8E772CCFBFA442898D225D9F10F0E0717EE0031F6005F9C9279F04F64634
1B18A749DF8F6821055FF5F8DD0F95336EB66FA0BBBFAE25F5567F7DDDFB4FD9
F195E74666E3D36627EE273AD9165D3040CB72F4EB260DC4C99948254F69DCFF
DBC129BD93D36B67AFA2E3780C75DAD83AB572D2B3B497B42AAD24FB03E9B5B3
851DCB26CD1BBB1A9919A36FDE9B7797D1CA0FADDEEBCFD2503EF55CA9F1EF0D
DA41292DDBA6866778E4502CB03CDD45C5197CEB62B1414652CFF7CD94C9D294
5FA1DAAA356B0DFD0AC33FD9A3E75753373E1EAF4FDE3231EED2A491A40D295A
3947D5B52A8FB3386B3E4A6E4DF9606DC376DAA1AF23667A9AA3C7F56ECD61FA
446EAE8458246B19A63C103B102BC692F100F8335601E42D09C4D89858EE37BD
E94D4F3CF104985A1462011A4CB473B5B8FE8E260940273C4E9E1960F844593C
6E22EE170C03A20B8A1DD8F431361DCE475C977A513DBE90DF8E0709CA416405
23841A4DBD9A24096BC16C824685D80046150D644AF4F1187DD70F66910A7E8E
02FA0C2BBF286CDB42DAA2A32D95526D639BAD3A9BD146081581060609DBCAE5
3203FD7D219881CD2390D26AB14770201145120717D94DC41B239B39BADBA392
20E8952C2D36490849B657C8D6092FD4BC109C4349B2966AE2DC6876231DB8A4
89F2A22438021D68C742998E56159C74D2492FBCF00245BC72606102F3CB1312
ED23017E874602BC48901F50858040872594FE6270FCF169F0F59F7FFEF96C19
00D8802F17FF29880F6E6EBE33DF07098ED81ED0FBFCA3E3A41F8332A2BC1592
00E28DC7303E3EFE9EF7BC87B5FE684347DE36121046348CD9222C18C842B4DF
434E348222B08891D500D6132DA60753802601791FF5DD4BEF2051204474E93D
586C0116852B12F483A01F9ACE0BAF814F2F08BBBF36C243DC77A0C025160F36
2AB25AF94BBE613403079B50EA15F859E9963DA5CF59F95CBEA8CFF8A565171D
571A28FA33A5E0DE7CDB2A8E34AD92D6F5AE49A53C5B7B60416B51A093E1D002
4FC62ACABD6D55BE10DFF3E5974E78AD7DE0B4D4B6E6B5E73DB691D2F513FE7E
746F33D0BE36DDFAA84ED63AFACA4BE66ED28653F4AE11634C6F7F69C7C82495
3F1F4B3E9B2B7E793EDDC9B7A9EE9A0E196479F1AEDB01A341426154FD842701
7E9B8380B53905075CB858AB3403E726DD1AB43B7FDF1C1A4EC6EF6C4EB21172
31B915CA6FA7A64EB92D89D9796DF889C4CC8B0B2C75D28974CA4A571B559604
279E72E2AE175F913C0210BFE446335540B71067112F014F269F2339637C1AAC
4CB8BCA54A1C309FAC9C7DED6B5FC3B40B3239C248B029F933EF4A74F79562DD
23D27FB4C211A6125FC853213C9A575C767494C3224688978AA6501FCE4FC452
17ED1688BFC8ADA2D04D24660DA2B64B6004C1DC51FE097920452D204EF8A044
B3090EC55B8C1E129D55FFF5C21D291464E18C6472B126767C7C94DF7C7AE640
A9C4DB4373C2B83A42AFBCE9FA72A94261201F1ED15831C232A1E1A64B4AA230
7435383A986C1A092F2F1E60E251D40AE91B059519AF1A527393C7DC554E2CDE
B7AA9EB0D96C2917906EF524DC2108482A7B3ACAF8A8579B4A47169B52F12479
8A48AEC5F2401F9484FD2829A3EB3A345CBD87712D908102A48314608C10420E
6E131093EC842894345F1284CDE879D5AFB9E69AEBAFBF1E6DD6F9DFA86D41BD
B0C1EF250996C848BD7748C418D412C5EE17D7243C666BD7AE652346A60B9E93
68DB3C34E11340690AD5EAF5EBD76FDBB60D15F000F8C4544777A07C901019C6
165D62C18896508A904A34E267F60E9E6464225E7BEDB51B366C8886D9C150B0
85821EAE35D260E43E583EF89D9084CA4FFCF8C73FFEE0830F82E6F3942BC52B
5A2A9929B6DD413FFEC9A1923D6B25A97B798292ADB106CDE8E46DB3A862D1B6
7A9F47656DD5DD977EEEA2DB2F31CECB7BCB62DE5DB3B9BA516F0D79B74FF5B5
D67957EC696CF27CCDEFDF9C2826793A5AA98B2831D937FFD53235C8F295A2A6
F90993465B37BCB28256ECBB699FDDCCFAD4D173CA65EF3782BEDCC1083FF5FC
5A227D29D2FF16CBB4C23D6E371D08AEAA9A2B29F9A9788AB25327CEC5DF3E64
25E3679DFE7777FFF61663743079497F8A16A6572DE4FEC7D8EA97F22F3CFD62
67D653ADE329EEB1500E5C3B136FD73A327BD40BC342E3E159428E1C084CD237
F410120D452DD085B1FA921B069ECE07D2C924972C9AB6CECB2700E9FC6AC816
3B868604CA81A904135FB29524044DBD6C25EC7D7863A06740E1F80F333590ED
060AC11DC043C460922C7909EFF7522543F89CF04B69F7248E77AD872F247A95
7C3EB677489D10CD5E8A9E2D799F92DF1D154A3D74071F9A112F613A150FC7A3
A36BD822C8A8AE5A0DA04988C40F4076C2EE835E89326C313316D643863EA54E
C7E9B5013215D6603A0D9B803F68BD0E218EA7C469A7ED28B9E3F03CBAFCA863
F8C58248B1DBA1F54D3E18314602670E34506891920EAF85A09E121B179A9309
1C1D1D9D98989035964C27796BB17025808CCF20593E0D9DEBA34C59FCD7E228
170C0C1010D41F6C6C29EF3A8661889B4795170098E05AA9608092858C2928E9
D117870C809C13EB55DE5720AFE1207ECD6B5EF3CB5FFE12F1C073CF3DF79E7B
EEC1EB60CC2880C02E82391F8DF7B2C0DBB2650B1443497994ADBE24D34CF698
B00C6C150A5D07E2F117EF99D2DCD3699EF965CB96F1C2892B0FEF2B0E2290B1
B42D425738BEDB1BDFF8C65FFDEA57C0A986EB96225D9429931AAF3566D894D4
DEFCBBE19FD27929DADEA04F133D4AA9996C9CF462A64D9BDA343798CCE8CDC4
6C7AFF3AE7AEBA930FFCCF4D5BA94477738B55FA969FE89C6FF49F545FB8304D
17376834D0AE1C185C5B9E7BDE223E815696EEDC3B584CA729B6472F59B94CB2
E4D66E690DEF8D1D78C459935CFE4AB142B64FB6436E47AF274D5208FADD20D4
037DF54BA74B419CCC8E02C3609554014BE4694E81AF65295D1D2AAF2ADD3AE1
945CBA9362F194538CD1CD65F253E69585E0BAB98CE936AFEDC43432EDD595CF
EDA6B4419BBD65DDD109AAC55275BD411D8D2EBE6CE3DDDB6FA1D0A7AFF56ADD
05CC55FA6AC9DA89CE4BBD1A822519E4A8E6C1F2F11DCE3AEBAC471E7944D4DE
83937FA49A7F7C03A72528EDD65B6FDDB87123F8FE31BC46BFD701972F921DF8
CEA2A0401D94021474D516A68C2D03DA8E3299C30F6C37241D01BAEE701E1E3D
E04F166E2F9586076F080D57E617E6210414DA8583DD441B94473D397836BFD5
407F9F659961266C8C85016F52B4A001CB16A83C248A489998ACF141A8224D89
819E41008D1E9183455703F43E8813C511286031C0FC850580D3651D93F9B87B
8C8AAA25CE653A9845EA058765B5D2A11066F846E644DC0E5149C02C8F6994F9
267A5048504E027460494889410C8AEFB366CD1A26082C8CB05DFE9EF56B2677
6694509AA40F41D0AB279090495411007D43793FDA3C80DD4B2628B2BC81321D
0533E16FF883E0A2086C83CC24440E4ADBF92602E22D0807427CE0B314EA8367
9C71C6BFFDDBBF49C30DEA057EE5B9029285B41FA493229C281D9B615F428943
2C7D7878981F2159E7D227443C4541081817C5E28696C3B75AB162C59BDFFCE6
9FFDEC67A8590B294AF174BE270B09090CC0E20158214C253E01CE0D714C512F
9D51193DBA95EF508D5A6ECCA78D34185BA15F5DD66FF0A7A7BDC2FDFD15734A
057CB7F6D9EBCB4C61B63958B96B3E55341AD778039B620BB6635E99CDDBC61C
D5E98A1020E73ECA5F3A5CF267AC2D669A729E1934AEA8B8C620DD35932B53A5
CFB692ED6E83D21766EAF1DA987EF281EDCFEB73D6803D506BCF27C8612B6232
96D59C669E8C3E2ACCD1424D6FA9728160A0DFF0E7BC924A148D595433C83512
09D6DFAB5FFAC6839BFEE6CE7DD73E9FF253DAF698D6707C8A3536962945F655
7A77BDAEE5C6BC5B4AE4F12594DD58AE2753FAD6C6AACEEA9DDD69D25B09970A
AB56EEDBC3F3E3A0EA4AA07329029583205CD46933303000CF1B941580564919
C4126246DB898373DED37E96F875A3FB9D42BD1E9C1A012D0CE9689CF7BF7048
308F7A9A9C745B82D2038620496BD4D332C11E0FC7255B7204918E49C71D77DC
39E79C73F3CD37470DBE2527B3C060CEB077EF5E7E04DF962F8CF647394460D2
61509A4CE53C2C26746185E26D5802C1964CC4795D3399946DC7C36E0166E8C5
31048948E40D9E22EDDD97C895C8F958305DDCFD60BBB02AE04551BA67289C9A
CD76A7D375433502F2E368D37758CA90D6EB4FD28DC69AB018480A92DC004955
16A8EAA89E220C1A95011222C673317592038A3D804EC24C2E679E79E68F7FFC
635E159EF06AB50A251AF100F8C4C4191DEDF82828A43CF25B6EB965EBD6AD6F
7AD39BBEF39DEF500F07EDF08EED51CA906E18D40B66607240C1883D0807847E
802084985C415830096791D4374493D82892EF21C55F2C00D07E47CADFF92796
134C66C20B586DE433F9AD99EFF39F48D1A1504C7EE0031F78ECB1C7F82AF4D7
F37B9DD7789CA8F4962223299217351F2C1EC61FAA7B80AD84F994D236094A31
697DEC631FFBDEF7BE0787095FF2EE77BFFB273FF909FF249E6ED8C7181E341B
B95C499A785F77B66425FC62AC4E5BC89ACAF4DF5CAB6DB61A99AEB63E11182E
A59C7E32DAD54473A8BE76A17FD73545CAE883EB7D7D33CDC692831B93F37DF3
ACC42736EBF1E270F3D6A9D8C6814672E1F4BB964DCE69F3F6FE65D7A51726BB
AD2F76C7AB83935418A44695F675AF5B7B7C519FFCE9DEB78DBDF547DFF9499B
997D4261F9268C78C330A95B4976C9F38D802C3BE6B5131EEB4E5633EB51DD4F
F8414C2737AD3099BB8D1C352A39A2BA4E77F9B487F27766B5AE53D45BD60334
7E80F66D27EF4AA206ADBC81F234FA6BA346DBEA5AC536EE6FDB0B296DBCAF5D
9C0C98B8EC84EED2BDF7DFF52FFFF22F3FFDE94F796579EAE0F18FC202520F2C
16B81DA0435E91919191DFFCE637D874E0EC2CB37939586033FBE30FAC16202A
26E11969DCBDC4954F11B3208AD10675016AC71F4A0C043DBC00F0496C347E2E
6F2B1E1E7264014620E811E2E414BEC173750CCECE176EDFBEFDA28B2E3A44B5
3F8AE48011C063E029BDE4924B366CD8007CAD830A318AF760F002E74B1A11F3
A04F3DF5541EF1AF7FFD6BD6317B91C3450804E9918641FBAE8A01A6D28945FA
B763A1AFDCF62388A4701A207E00E7B8F8A02003422ED3ED051434E4832A5BC1
5B1C15509A85ED2A66D16E853109C775C0D9A19EEB00B03BE20C4A98112B84E6
538847611B6B91869492C00AD55B448564D0E3869219154D2D00EF8300909A58
F909161885DE24303B987B6242C2EEE199BFEDB6DB98CBF31D10A70A7A686260
6DD4C3F010740AA0B6FD676C02EAF5AB411A2B7F03968ABA68D88FAC9DBDF7BD
EF7DF4D147A3353B514910CDAFA79E2216CDF1E855962CD673892223B8727209
0F1EC51062069D77DE79DFF8C63798532050CC4F59B56A150B00D9EAF0D16327
A32053EA2DA21DC031997E881E0AE59D7A88437C21729982B01E82E9965F0A75
9BE83983D60E7847C119067608F44A8A80064B8EF262AB8362D94CFAAD267DF6
23E73E92FB567BB9EBDFBD4017C54F7BB9F3BB1FE8A97D23BCE112E4159331BF
334359CA7FFCB4D2D8EF566E5E5B39BB5B3E71FFF885B9B9AEDBAF77A6AF70B3
43D9E062CDBBC96B76EBA3D70DD4F35EAD55A6CBA86F3A5EFEE70E5563AA57CA
906FFD2D75D7115D4D5465153F9149655FFD27AFF9E1FFFE7FBDA64BBE4141C6
A272173DCBEA0379DFB1CCF68CDDA5985E7032E9BA56A37289E8B6876EDBF8E9
4D093F7E5CDF492F7476D76E9856E6C2A594AE9A75CDCD9C67D512197A744135
78E9927115253BE95AAC699FE3EBF10C7DBD16CC675A54B374EA4B65E79A5ED6
D5EBFEA2051CF4E03AB408A2A298CEC829807B16DF4023812F8EA717332F590C
922116EDC02A697BD18E524B2481A46020E10DA92EFF85B8DA310EE97F87DBE2
FEB06CC055C40326E70B33912E2647F3EEC240870709F43F3434B4B0B070B4F1
0BF0300BCE0B2EB8E0DE7BEFE51903AEE5E2CC44C5E6C16F7B798A3C4D3C1AA9
DF0B75BD98F8FA81CAB9B8ED99DF69BAEA64A3FAC8F38A2658A065B2A9507D8F
C1D50E3E82D491681EAE645B4A6D459894197AABDC45BD9B0581246620CA04F6
51ABB796188BFF61AC867A863C381A6C0249FF124387B7316AEE60BE09E39647
48C2A5D6C3DE11D3817A90FA12CFC0F7C27C014924025F2AC811A762E6CBB785
EF0FC9736F7FFBDB7FF7BBDFF1F9D2274BD22744E9C0AB09C2D4B1ABCCA5CF0C
2AE34535403725F882EEB8E30E66C4D0DC257D1BD24EEFA1F36332F93E0826A3
1393DC4D42BBE0FE306830F310337C2D5FC57CFFAAABAEBAF5D65B4F3FFDF45F
FEF2977C02B0B2F97C5609C1F7A3705D902802C42D681CD8F6626B8B77084637
6C4D417245E60F2243407E851B5378132A3CD0A4017A6BD49B816072349D7789
2302B2BCD6688C27FDC98EAAD03DEDDCD35FF0A632BE51F25B3462D1F5B3995A
2C4E7AD5EE0CB7ED8A7D6AB53D4F57EF51B502F7D3D0DFC6676D876EA754D76F
53BF776F91F6123DA4A5CF4DB7066ADEE589E5FDF9FDC601E6F879ED55A52B7F
9B6D24ABF966F62CD3CAB98D16B56EA395CB56B62B9D85F2BC9D31DB1E4F7EB6
5E6A1A4937D029A8997DC648C92B53A2CEC49DA95B15AB15A2B8919DA43E4B2B
CE06C974A2E15AA36DBB9A0CCA1F9DED4F0CFB771B3C9BD5ECECD0952B835A61
EEEEA7AC4FA4FB83427067C721AD78CA01EB03C1F2F9B5BB1EDA65C7FBDA9DF2
783E3D39532723667B4E475B04BBBCF4D24B79A1110A963A5B487491074CFF3C
C9122A135315AA34D6081422DB279A810667E092C282287FC00AC29CC597C8DB
9101FCFF3FA25E7ED1F191D813F4F01079B428DF8382EFF5DA8D2D01C03FE2FD
E1028D56C883928F16E7C0BC095B081601E5223DCB509F86BB80AD874E9E0CAB
42AC91099B40396BC8237443379006A0D246BBBDD076988713A26001195555D8
A6D3A9B86DF00D51030C3E224AA56407058B1E9E26B23242CEAC4E761D81B453
6E223E81A9815F8969083A45A7E3C87B2FF16E1D4D1C0003955974C8C4A94707
244576720758A63B77EE3CDC3BE41EDA10867A317DC48725584A117F9A642546
79280400D41CD4BBF284BFFEF5AF7FEAA9A72421075998E3E3E3BFFDED6FA1D5
4611DF2812BD80475B7A49D27FE464C40771DFB3E5C1BB5480DE90960AA92019
4414A9E4126924FDD7F45E3BF8833EC39E24C036161287CCC39686D20D5D5B3A
3383B1E272FE098A3C7FCF860282283C27FC014A03EAFB99C6E6E6E6600563C9
24440F0308C684C4DE510301414B3D990AAEC4AF8F2FB1D3F8A14801E06F56AE
5CC9E344F3292902122B500E90B11A33750A757DAED04767D7A9D4A06F299C51
6A91F1398B82EEF01752072A0DBA6C356953E6F5EDBE34B53E439D117237D1EB
97AD7AF293AD6429DB79748777B931FCD2F1ADAFEE56FD26FB28FBD70937659F
B1FB847F5BF30B4A527E2395A8A08DF68D4DED702E1B9D5D3B94B8E837ED2405
555E2DB32F93AB55175477039D743B6D9F57277F75F3EE89D77493BF4A5654A7
B0DDF1E107D86E49EFCECFD04707FA9385E2DD2F2E0B964F34F6F3B3C855E0FD
6BAE3B6E6E4FB1F64051F54CBE707CA6364977AA9F56DCB26AB2B6DFDBEAE936
F97F47B49A5874D9CD78BB1990D14D745557C72095E86F34CB1480CE99362425
543CA8121F6255E037BFF98D88559E79605249953802C56CFC9D79E699FFFCCF
FF8CD22A7043F10E1D9E3913651190047003F042F3BE4352F87FADFEE6680744
11A811881AF014A1DB2086C184FDCE77BEF3073FF88154DD3319034D32CA728F
787FA65E7808A0D442B3040F3FE2F95059500EC9F20F9507128D20891344A1BE
3020AC8D0452A2448EFFB13C507C30EC5EA0A0A3490FBB1007618362851DCDD6
8032CFC90D6B8053903F602B5833F02FE4D2429EC365A7FA9B41AABB41980D8C
EA3613D13995D23A3D8DE46E16BAB4D8E878B1F1D97F2809F87B9CB244760AD1
88E78767960925EA4A5B729891C6E8E2F991AC5E30233843056356AC5AB83E70
1A824848E343E210533FA2E23C18EC04F06E742C90326C3AB4100C5B453A8589
0D7EC4C1A3F840462BC529F0A403A07BFBF6EDEBD7AFE7B5BBF8E28BB76DDB16
9504925F403D7DFF4FFEE44F7EF6B39FD1A1991B52AA2A85BE92CC13F4DA4163
D544EC51CFA729793B52508A51494C42F82F2F1382D530022074974426F9C35B
DFFAD6A79F7E1A211C5C2B8036D11C4149796202608B306A0DC06F0B2B04A920
E8B41CAD4C167A008F3BFFBA6BEFDF705D438F8FDE90335B8DFD371673BEC218
6ADE1450333E7843AD46FE28D19EBB88A658BBA7646A55E2AA995DD40AD6E4B5
574AFDEB8716C666699652B78C25C86952D3A0746DE50CFD0DADABAED877FC7C
7C53D3ED50814626687AE4B2E533AB4AEE144B9FFE95DD3503D6C8330F7E875A
F1D599FE5A71CA20DD61FBE35A37A12FAB7D7E62A84CB359323627BD058BEE2E
E72B03A5DCC2E0679727ADFCBECFFFD6A8F61335FC81CEEAF6F257683F5D68D0
80D7D734CD8A6EB8E9992F36A8D261B955FE30D1F1441D23995ED39E2FF9B7CF
B378B05A89D06BD359A627A71D6ABBCDD3060B2FCDCD41E16506C41308DA831B
44504378BDFEECCFFEEC99679E618E8C0E5F506BB04D24590B0A2B5ADA89E22C
196251492086F2E192807AD6ED473EF291AF7CE52BFC38A4AB1DA308EBF73A82
5E17491E3C53CBE4E46434082150C1002C40D49A498BB522E07FF00C88DFE218
F7E717B9E4924B5887E369E1CF12EA3B12DF53EECA73CF3DF7F1C71F476B0451
E9164F88D6CB09005E14E148EB35F0025F0B7CA3EB2C3A1CF4B0A3248A0B54BE
28AC02C5913DFE326C3FA0129C6331856147615041B53AB04C546349E9070215
08B249A6A6A12B273B3F364C305F3461D20A61283D3DA384AA6984A2A5E7FA43
1D426FA58F9A0CC6D68034A10A139C8C5E94C297F2286164388E98452A14ECF5
3A0151E86D148C62D886D10476B82920E42EBFFCF2871E7A88B9BCD42E51CF8A
E45F5971609D94FFDCBC79F3D6AD5BA3AE6DBF07F52A1C135C0F0A2F531E440B
96EF18D9B4D4535B446D877012B05C747A9040964C545412200620FD3579B488
2D47D5E468D85C582418BADEEB780CB583A999FF44011A20C3786FE83DF06710
277611F4005124E5154E38E1841D3B7640A844571067C21247A889C25AE82BAF
BCF2AEBBEE02B48B38D32017BD5EE307C13C001008B30C7ED6BBDEF5AEEF7FFF
FB22EDA4B44760C2165177BADD01D2172C7FC81E9FED4E525C29CAA6D3EABA85
9439E7BBD4A4611A99B1A7D7B413AF906E51E3641AFCB5E5BD2655FA558C52B3
892CE9532B1A997D9AA719CD608C96EDB37C5A71C0DE994E12EB8AB1629F93F6
F375B34A1D2FDFA02E696DCAA663462556CC2BD0379639292DDF61BDD2D45CC3
A5649CEA6D2319780D8A79234690262A25D34EB155253DA6C79CA04381415A82
823AE5A9DFF4BA256265229B1F199B9D7925EB5B35BD1A142839936D6A7E7F90
2959B5205E3FA5662F507B3A4BD9EAA81B2B074EFC9607EFBDECD273E2B55685
620327AD715E78A9DAF3E748D2B05075346D0C6127AC35B810C80C2E5C419F86
F2843421E90FECF5FA0E2D01A15BC2106547C88222E4030BEF0F152790F2025D
F5431C442682A459A38C94227D5BAFBAEAAAC71E7B8C6500BCA0482E5A124858
F222A822460A06A25CC7C810A15078202F513CC3D063166FA8F7BA6F4B948687
F2377FF3370F3FFC30222A4B52D471996455C3C32EC556180A96192BA71D84B6
8E499486FF5CB76E1D6F5AA041457BEEF0ACA1EFB9549DF0377C0E343E3C1A45
55FF6121F5D1A603E569E026200B985AD1BE6E18AD8C8122B1264979122EC9C3
F8C0073EF0E4934FBEFCF2CBD1EC5210BA981A60BBF08A88298A97F27BEDD1FF
0F6BDF016E5755A6BD7639BDDC967B736F3A692410AA140584D15F0699E12723
088A44414A88940086DE49883409485740616823CCC83FA28C604544541008A8
A1842484F4DBEFE9E7ECF27FFBBC77BFAE9C5BC6CC781E8CE79EB3CFDE6BAFBD
D657DFEFFDD03B130B852DD7B158E59C08E000F4460E06AE60F80188AE906A9F
DA85E62A0D6156DC003580F9D1C9DFC1A6896EF52A2C3E00FE01B4A980FDB08D
0C26904F9C248EC8E9E1BA10AF8C9ED11985F9D68019E7F8D918B9018F84C091
4C144C753958962BBC28FD99822F8C905F4A19FAA93027D916C2AFD7BECA39B1
00A02144679C7BEEB96C2061689C1F54452CFAA33B0213018694281579E8F268
109EC6A8701898D71AEE4E85982E766AE31AD697B42E4F55182D047209F450C8
FF6391AC5CB9F2965B6E41EF04C8538C561CF872A52CD695E33A99742697AF83
792C3B30F0EA2F2C3639183B972E9A1EDE09469288AAA21FF7E23555A9C64BAA
4BA53E918A4D8F0CAA81784BAC6454BCAD2ADD946E1D68DBF8AF1FAA8A8AD562
B49F0827C5D3418E0D33897A0E38BB148E04A14055D0C8A5E1C2BA45794F5A30
59187230E8D3C5E5BDFDF6DB11548101013611152699E4898BC58687AB979DC3
9B619E0C4B94396A23ACF397635849809BFAD6B7BE75E9A597C2C7D563AAC6D8
F54FDC714AC33D370424B198711EB4445621F4886053D2B83234ED877CA0C119
28CEE408D6B5C224944B226BAF5BAC0DB05F999D934E3AE9D9679FC540E581ED
BFFFFE7FF8C31F10ED8188D7A151322F627B02FC87A276440C914BD49F3D0676
C10517DC73CF3D679E79A65C42A4123A30205D3E7EF463AC17AB4FE58D6C3FB9
1DD9637269403F756C65835C6BD004244144CE59F6AA88CB860A031D260B7340
9780469DBD52AE8E9B9501806D117707412CF7FBF6DB6FB3940993061D00D358
261039B7871E7A48FC0C4876CA7A02C3E8E1A9907E07FA064E18DC179D4807B4
A3C83D88452CC31337560C6AEE5596A4226085403CC02130D61004A3ED838785
2985F213F304ACD448A3314CD400EE52612F01D6A642D5C93DA2659B7C78C619
673CF8E0833257328C030F3CF0A5975E9201C83172FBC0628D84D951E520DA00
13B2014B2EC6D0D9679F4D620CD040A199877C020E252A48F80ACC5202042597
9663B033111000FC494E2553812A04B194019FD58B1EB095E43DD22440EEE923
F7B517EF8B385DF86AD8B9B366CD5ABC78F1C5175F8C4709C34E4E8E624F72CF
89F34E235494412A19F0E06EDDB6D50F6157D0FAF2F3B973E7BEF1C61BD031D8
ADF07DE11A7AA6279EB6E904E1E29A72FDA8A35A6545AAE49AA0F197B2D49CBD
66BDBFFA83F668AB2AAB844A6E549BC8BB0E510B64271E1CA0BD3260021FF434
5BC33AA170E4DDB19F04EC1E91FB37DC70834EE08C29924B602D8961BE62C50A
CC1E7007FBEEBB2F36A0D8439FFAD4A77EF9CB5FCA36673D3F942841417A630C
15468C919BA5670C3F1821711992BC418DC558724C5697AC19D929722F18A45E
5E0A898A4028F0177E48CC85F1A3565C26D0D0CAEFF9D0915D184655D0EE503B
973FF0CF06A2283A2CF8562E70DA69A78918A259F4C94F7E52B62289C3B0B209
10924F0E39E490DFFDEE77320BA2AF0E3FFCF0E79F7F5E6E12592059A91022D0
810014EA64B9F273D91872186BA0765513C06BD32BABA1128E3BEEB8279E7802
063BC42E79CC47D50488B3E30CBA49082BC9D2BA2A32D7EA84AD895142CC3B62
441BE16C76B8C484E306D1C000F25DBE85AD4D520A7E258F524E059313B60971
FDB8048D6BE25977DF7DF777DF7D17FA03F97CAA2298A2F8C957BFFAD5679E79
46264A34048BEC1B6A9E47E26718C0012D15C6CC0E3F7410F5C615FA3EC79A81
EF22EF31CFB4B519E81795299B0490593918841F4658028D08BE9E59D1435B0D
D21F5E1A14839C6ADBB66DB22CD1040D5548101F2AA4365221028DC5E4465896
0F64019C33A87C166D88712352099623C4840A5B96C2AB867DC79E27728370CB
1A7480AE0CF4541F6E102E1DB24DB05AA898C9124667CEAD3920218EC7E2E21C
44ECC870D54BA54CE3C90FA9B901A8D33581625940441E4DD42D7BCD89E621B1
23ED78C991B564B6354FDD31B023D39CC90DF528C3893767CB22735C4F793502
6000AD66298FDEE7551EBD5C572C4873441713A511F8C04EB2B5767E346EB8CB
B0FE11C703A73DAFA2079AE8D0EB192C9937391231123445C06010F8C20FA114
11AEA1AB043A55FA9A62576DDEBC99BEE3F8DCA84A6364C26EA52781F3B3EC14
4CF8C0A3CBB74B962C11C90C390C0B0CD9889B6FBE59749E1C802639C32B1FB7
47F6693C51241FE0A661859109998741CAC35E80FD05C8871D766ED3DBF01A5A
8F5934FDC149C26E1E4A5733B23290D6C3D9E4C9C17E9437575F7DB5DC062B47
46AD211CFF853D46383F5C24885799049926F0EFCBB77ABB18355A74083C8274
BE987534B4B662B47095D6B6176101B6A284EEE4AC2233A6A72B10BBC350653F
C83C33CF09C187B81CF63606D3A0DD55E893913D1BD90E99E7E38F3FFEBFFEEB
BF101663EB54F02DB35F87EC43B128C94501150218BE5C052E1D3C5698727077
74F88D08BE55AB5671A5C96F9118973FE1A3E8B86FBDB25D3E972722AB1F03C6
0DCA6F211949BDB268D1A25FFDEA57B2FDE0EE10FF437DE087E520CC2BFA5A2F
7B926430D476D34D375D74D1450CE241DEE191017A0BA6103864D00D308A61EE
60C1134B8674E897BFFCE5471E7984257B903B205051F52E46B810824E5E9D80
1E8A138D09291AF45C1157B519F6F0928725DA4BF60B584CE0F6A1890A5A9C02
454E6C95AE291B9A8C2E5DBA546C6479A67A300015588471332CE385E49786A5
7C4F45A2A653F132665614A568877E73473A13AF55829A92DEA15EC7AD434F9A
54AC37869BD26D50150279B17A91E0916D221624C22F0C1ED2B7237498C2048D
30E58DEC05BD81848C5F8E073218B15FE869DA855806549C88828ADC9793C07D
817205C7143252D004ACDD55A1EB3973E64C343883E1084B02060D4AE245FA31
0532AABCE20A4719DA75F5976E78C96A843DC40E57B40918A5471890110EB652
90CFF7DC734F5106C1572C76807D8DB821A41534219E10CB3D08E4C02260DD1A
6AF4654E658B62047A81156BED20D98DB0833994B33C15D9B7B05861BCA011B3
4C2ECF2CBF5AB972A5A832552FC592F3C3F2DD559F80B11A0C03134D6028E965
F8B47444668326406C17863F5B02E8B5827A1C938B9B790815A2179406C484BB
07A9EA87C5623073F838792F0D9602A4B3596FDF212B1B95D840DC536BC2D982
2A82972ACB914DD8A95FF51239F917DD1174B9432D45AA38EC1052FEE259FB5A
4BD806BE0D864739BDDCD59C3D1807071D749078E8885BAAB067131E16CAB069
BB60DD62C5EAACA23A8E8881323F2419D69BA0118084F40602A488B162C0B2B7
452322942A577742427F15B640F143BE232C09A82EB499459608DB9E8E0E84B2
1FD260C0AA45F25CECA43FFFF9CF7230DAA072F57ADE4E3039CC1556086C05C0
5E450163FD40D72E5CB8F0E5975F460F06CC8F0A5D2BE84E18F80C5FC857C82E
40E1212C8E0223B0B7325408B349F663D0C9A7BB54F40BAEE9056059334859C7
8D98E1AA8A55C9C6D22BAFBCE1EA2BAFF1828FCBB174BCAF3014E424723958CA
0DE45A2441C13D82528280E6064DE085AC7346D8E91626300A7AD91990E5324A
AB48A00C046C5A77351031C318E8BB6085C8AC229E2CE2E888238E78E5955744
F44136CA835BB76E9D5C6BC18205B274C9622B9FC8BF286E07F3920871F9641C
F42A03A4D0EB90C3DCAD20FD95AB8B29E987EC7544D3827D9DEB1F7E09A617EC
06ECD813F8C17A424369863C878E38323FD14D4BC2E181FF613A1408303A7A7A
3735849245EE234B83C7A33735158DB77CF9F2BDF7DE7BCD9A35F22BBD430818
076131192133DFF85DD9469D591DE341C58BC02E90F530A8C7F7099898D2A920
94467F36521340F9CBD431E462860D5820586953E82077F8580C205C72C925F2
13718C54BD3C4ABE7DECB1C7BEF8C52FCAE4639135DCAF11F2AA63D87A2C150D
C58032F6EB251D93274F965B868A3DF4D043FFF11FFFF1DA6BAF453047B40E62
1D3245A83F97C364C58BFF342AAC1E86368BE910FAA328914BDF79E79DF2ACD9
F95957007A72057500B255C21274476911E1060982C005BD522812C838236499
1F993196D9868741F4841912CD637E7EF0831F1C77DC71B82F36FE6572986254
664FE42C82605C96640DA1DC9419209B02E27B9840EC3B5DAF90AE5985F5EA6A
4474482785C57A03380AA5124830C820E55AD89E2C2BC56226F2ADEAD4FC3A31
7DC08956DF059F3FE184679F7D3662D9082E119BE06A8CD01C304DF8A497CC3B
052B61556A653B6B3945591566AD0288AEB2636927573394ED2BC38E46ED68A4
56EA21808D082EC406F41213AF4EC14BDDA946448768BF631AAFB9E61A518767
9E79266D173122BFF18D6F900C4E9EC257BFFAD5EF7FFFFB4842807E91061981
C8787CB4634470C91BEC4DE84BB862E0D9D6AB64E03DCB8264CF6D3D4DA84216
5819F0C9279FFCF0C30F8F857C41B90FB53E1B0592B7A65EB615A403E56CA8D3
1475856AD0AF7DED6B6243204B4CA18DEB72F5C2EF0C3C213BECCF494B164DB2
C46611CF058D23C092A6633375BF03D6CD70F7E39DABFC8DB02A8D85AFF09A51
DC0F298FCD8CF701935D5B9B0C179B479602E8C5313CB22EE366C6EF1C3DD64B
4F3191E58A71797972402EEAD5DEA36A827DF6D9E7CD37DFD4BD728A753D2EA4
42AF65AFBDF6423B75CE898C5FA6579C4759A0575C71051EB9EC5E996D98A832
C93251321E91C24064C933C692D5EF888D3860A4C806903F41AB0086615C94C8
0AE210E0525099E9C4D724D880ADC70D46E89E5C4B3EDC6FBFFD5E7CF1456287
B0AA8CB0E96903C912910C729EEF7CE73BB24CA93CD08009EE97DE9B9E1055DC
293C0F99A879F3E6897B8BF5094B45EF1F80F81E66A3A1A72BB3B2106AE0B313
2D250E321A012201836727C7E8D14B8428DDB0B939B429F00EF208649BA14689
56987C227375C209273CFEF8E3A8828618C54C42C41C79E4916FBCF186A8DBF3
CE3B0F5E20B058EECEFCFBF2DCE1F23728030A622E51155A912C18545A56402E
819C1C641359A70286926C5067270BF763071C209672F78E1D071C78E0EBAFBF
9E88C5A10690C186A403648B4DB2B0EB0F3CF0C0575F7DB57E41131D412CDBF4
55CD3045EFAAAEB6A66AA53438580DBE33544B73B6BB3F785E4EBDE1C73BEFBC
C391433D23CD2E2B4AB6A47833AB56AD62B9C6581963FA76B232FD7A6325AC5B
3488C7F280BB8675E587CD97704EEAEC61DAFC7A4295E10D55C78843E6C890E4
3C22FA4F39E594471E7984521187A9BA13AFA78EED7A3B29B91609B810CE829C
11D52B6B6C2C3986B0A45C51CE8600805E748915C5561F64DF83DB87841F295E
4E3DF554598A30AC451C89B322A75DBC78F18F7EF423116586528D7D90B1F264
75DE71C71D981ADC21F649038B35741D53A6447C2ACDBD6880963361C81E2F78
06645C805442CA450F72899494ADE8876D0BBDB077D52E6902FAB33CAD2CA045
8B163DF5D45308BED31E1F1F3B74D6596789BE45C81841244C051E3086C714A5
8C538EBFEFBEFBE8C61A1ADE19469CDEC30BA515AA6EE3CBE310D3469C00B928
34965C428497083B6A592803A43AB83E743A176249E5F8B973E78A2E9147B362
C58ACB2FBF1C76B41C7CF5D557035941D30637020B1714BBF23988AB00EC83DF
4D681A2423FC1B72C7637F12950FA790D38BC9612B12C4CDE018E9C607664637
D9B0F431E140FE91FE9EABB1214A698448732E60CC1E1B2892291E8F8F9CA64A
6B164813D8A817BEAAB0F796CCCCCC9933376CD80099025F5EAECB4E9648F6A8
B075B01FF6B983B30F61C43A29BDF3EBB265CBEEBFFF7E6A74B5337C884A4E67
1F81D8822AA2954ABE261DD8CA569156C4C60C603306A160D9AA32D44D9B7557
8F738B7940FB074CB218DDD75F7FBD1B712D23E2965426DA52A9969356B4EC0E
5981C44F2613F1FE52CFEDF7DE7AE1F91706B50EBE9D9DD059E8D92ACB5BB612
8C7A1D11DB809B209A685414290B42196E0526827176B44D85CF07B34385D9EF
E5CB9723F84EBE2C151AF5D8D75EC8684BB98727855024AC5E53238AC7018030
81044C85D14E33EC11C4A8C031C71CF3F2CB2FE39851E5158C3FB1176FBFFD76
DC025ED83BB0AA75D812E78DF2446FC607E987A8264F85E91A4E9A21A649C171
F1C517A3AC1473C73DA03BEF7C11CDAA347A3F63E7FA2CDC39D4039366B6D67C
910B8E68076A29A868887EEC55276C1F6184EC6F720BF07C891EE17251611212
37ABE3E86109227A0B2416451E6E0AF4380C5C288D129515C53803828050B93A
FA05721F4E7A83F8232F901E7482294D162AFDB9A24440BE15252D020237880D
19A9B7B6674E15F303F35F4F5953A521CC8DA6D890744C62A34900D48C39A221
9FEEEB5000A930948901E8313D1A59242B84DB27C688685FA807B9288985C1F3
C3943BC98E18DAA2BCC6EA62210288DAE10FE938576A4452F2B1A8751C4B0227
64032CE4BA1B0A627153E4F293338B258ED2717ACC7AECBBA19595CE57D13063
E6CE4CC5486881D389620ED60CD40662C40DD00FD428E1276ED8154369291908
743CC4E6D696DEEE1E64051070838809503795EAF9E79D77F79D7779F5EEAF55
D7E9ECEADABA6D6B045814314DEA2E7B801728058D6F915110C5230A4F477FA2
5E92EE230026E813202B4D4C2559D5A84096BBB8F3E6C7965DFEB572B55FD472
3CA0B95365BBFEAEA0521151D1BEE3F9CA8E541D2FA68C36235B6936FBFAFB22
513B914AF50EF44592899AEF2AA72ABF84690B418C7808A65A36D4BFFCCBBFC8
2224BE0EE2054F8A2645432EBAE175E28927FEF4A73F9555A7734A52BE515A72
CB8F65FBE3E74EBD0F20001414BC38805B1BC20A0A9E9179063FC9398A957FD5
5557898636C2DA171CC6421FE66044241A348E509EC3CA055846E066F1B51E72
90DABA26D043F6B80D3F2CB8C0EEE5ECEB6DDFC54FB9E28A2BC4BA641E95FD89
98FA00C61F420AE83A64E1611EE2B6115EC45E82850EA23A582BBE06E544D6A8
527FC949F6DB6F3F7191C4DA525A0299803906BB98DEC4551AA04A50B094DADC
5A8844D37831762E7A46E68740F5B1006488ADDF73CF3DE79C730E82E0E207E8
6D2E503404AF93296EC66A78E9918BCFD02A5FA8BCE5D9E91A547C76B9BA3C11
314900FC1F5513407620933667CE1C315E706959796C5B4FD74407712F58B0E0
4F7FFA930AD1113A91A71FB6F1A1A2153F52242CF6159E239B08B21E95306A31
BAD7AD5B879D00FB403E419602FA0FC012344733C6ADE881214F9A6B82885498
CF00993683B02A0CE86349109B88A019ABFFB06869C0E2A6C435917B64EF2ACA
6EEA2AB89E884D312CC082505AEB2A0C54C22301732A8DEB063797EDFF6A6E98
802997A74D9FBE71C3873299224383C68D22DFA3B1A64CB6BBB75B86228EBCE3
B94EAD3665EA5434650A826640AFCA6248A521AA66CD9A25730E1B16BC9318B3
1EB6D25F3A824E164FC24CF4E47A94ADEC9865BB11A3AC5CE577B44EE8F7870A
03410F9D20239D8CCAD655554F95ABE2E3B47774746FDFC1923779225081B0C0
E45EC4F810DB5F85207D59ED24FB827572C61967C87623421A930FC3D1189709
4E64971C090523EFE5DEFFF8C73FF20018130D1CAB0D2F5AD24494C924ECBEFB
EEBFFFFDEFCDB069AB0ABD583DB822FB54563B6C23206E182B237C03AE764329
1CE4E709279CF0E28B2F8A6031EEBEFB6E999D0B2EB840B40757338B5A555889
6AEFDC056DA426B0C2C6B68CB521804EF14AA0CBF3CF3FBF70E142F605436D14
5D4E142DCBCF3FFEF18FCB443CF6D863AAEEEAD2B263A1044C36E09D4467C8F2
BAE5965BAEBDF65A621F59F1CF4782370084A9907713163460C5985CF6A44471
265405A0234458C9B432CC8517A00EB88A1FF6DED16709C0245A7378BABA9268
C84813DC42D0025ABBC01DD1CBC7B0C3C11D0BE14E114301C4E8163E9F397326
A0C47AD2DB0871D923316DE3FB042C5F045A4E8FDA5336C175F3C326D523410A
E81600B31D8781A051DE7FE10B5F78FAE9A765CC6BD6ACE10F59798B34924E83
21CB46EC0C2043D85E18021DE06B15AAE7716C349A239867311DDE78E30DF079
20062807A061192AA1E0E14D9C38110D78E500D42260D93CFAE8A35FFEF2971B
101946C85C2BA71551F8EAABAF8AF4A4A1A7429E57B9D3F7DF7F9F8B1F421FA4
AAA89FBAF7DE7BB76EDD7ADE79E7C96F41D78AFDA527BA466E6133EC3911C0DE
5C4724A823EBAAADADAFB73762FF95C34A0E9D38A1BDA7A7BBAB6BD2574E3DF5
DB0F3DD0135A0CA9BA7D06804D20E9643DABE1F52C4256E60D8E2F11B7327271
FE56AF5E4D07143B4B8F8D4C9F3EFD631FFBD8CF7FFACC60C16FEA6C1DDC3194
6C9AE0E72A76D5355465285951D1A42A155557FB5E9F392CD539A15CADB4B5B4
FEEAAE87DDDE814853B6D637944E37950673E948A25C2D55D470FB0A993A3939
BC6A481ED9B04B962CB9E9A69B101B0731BB8C04C13DCC1556A00A1357235FAC
2B82DDADEA6860E463910987B3FE57A2B77149219990C0948A69850C0A57BB0A
F331B0B490E644A90D1BD9CB0A975574F9E597DF7EFBEDA86D3442F6DC8605A0
7F6280631DE509B06E20FAE54FB9B08C89F529AED6A2A4412250F4E0E972E5D1
E66221229C412C655DC0A1A11D6A4DA90021FD91EFC293606D14E3512C7CA31A
23530D30D4F09759DBA5C2649D1EADC21D61C5E0A28C20E187944DB82F54E7FE
D33FFDD30F7EF003F2FC8872FECB5FFEC2506683A5DF20EECD90B25F850E0727
135246AFC052A1D9CE02EC8660820ACDBD913B5F0F20B2C60DCBB42191235BF4
BDF7DE03D85FCE03F62179461F7CF081BE7C1B34018A6621A42EBDF4D2E5CB97
C35A477CC90FCB35B197F0F86002C383214150C362D5390C6478225245BCD2DD
41051FEBA4989AC685108D45B39D6F7CE31BE2516149C84F90AE40621F6B637C
F49E0C006073F6A48466E215E7CD9B27F3C37811560810E86083515A753D1E2B
3C579E8A570414986104A595884340809912312E18FB726660E4116F210E183F
87EA8210912BD235D71D2FB8208126AB96DB2776766FDB164F24AAE54AC4B2E5
818A6AB9E6EAABDA27C8257A975D78E17DDFBE3F572CF986B262B6E10CBB14CC
4B317380CC3F537D08A6333BADF76BC48BF90C848FD0843557ED37ABC6E7177E
F987CFFD57BEDC7FEE154BFFF3D9FFF8E89D0FF75FF42F833D7D895832D6D632
643B564BBAA92DE3D59CDDED66B75CDD63F6DCAB4F597CCD8D372FBFE0D21659
840343B5D0EF5161FB5F465995D6234CBC0151D532A5A2C04E3BEDB43BEFBC53
A674EEDCB96FBDF596D280CBA3BEE83B62E9CE9E3DFBB8E38E7BE0810774E0B5
D290BE639D04F15818F2A024C1E6451E113589D037EC828E5404B0FB7223279E
78E20B2FBC207308AA342C3FF42D80ED6586AD34D93B5DEE572E144830DDA9C4
8B4210D12E0C056B0BBE42C30D34DC06592F1AD63A36338E214F11B468C339D9
39C4083BD8302189CA6CC0849165C5A335EA7072F69C22EC0C1905E2791CAD53
23350D14061687085F99474837F9B91C2CA745E8B0010C209F88E5421F5085B6
A72E8B59C42467869E20FD062ECD1244F69F516171197D1179CC326FF042C8A0
22D6B1B884E0CB94334035227A48D93AB2029E1A48DEAF58B1E28E3BEE90478F
821455B765742808240E1E9CAC69E69046F509D8915C66462F9F46F48CDC4DA8
4ED2C783FB92BB100101F38760369C1CF7C50A0F92A7A24E0A4B02974358569E
02AAAC093005FA88C5F70830928463ACD09CEC10F99795BD871C72C8B1C71E7B
CD35D710906A694D78BC90C714EF81E1031D855C0BDFB2A486250B542A0DE5D9
BA4FA0EAFDA53FF7B9CF3DF4D04372BFB040010F65933823A49AD1DD2CA425F5
58AB5E513152139C73FED2DB6E095A0DDF74E34D975F76595B738B5B730A859C
A50211912F06935CB7268CAAEFB7777594868A30B09811D14962C08682A6D324
1A411D22884549CB886130A54F1DACE2B65D8E4C34DA86FCEE42A6E2C5D5EC45
F387DC4AA9BF734A4BA73354154DD432A5B3E4560CD3DD73F7DD95E365641957
9C8FEDB967617BEFEE9D53177EFC3386A5D276062806B9220033E83B02D5C872
62520F7057E2A6E43D56DA58EB84F1E4A04F571DB980FE2262268A1A164F8E1D
E709A71CF53C7AD00FB307BA56E600648BA13D09C4BDD888E2316CD8B0816021
78E4682028D30EBB56C48E582AE4EC82D8C1D6D0B36E8A1DEDC1FD828D0AE1BB
60C102B110B18688171A35E28C174BBDB91C193180B745A50A57803507B0D720
1464F4F215F6364B01551803A545831828902A8C6C3099819A389A7BFECED598
2A841C307C063D0196189D504C27B9C37A65E8D0D788A05588D992C9959B02DA
97280296C0201E876A0E164FB2F5152BEC5518AE110BE54B5FFA129009089BA0
B30726845B1D77443F06F30399A847DE9596C4C6E554DD44D2BB4ECAFAC013C4
FD32DA08FCEE7F9B319653C91AFDFEF7BF0FF00CD24BFAB40310C566553AA99C
1C2FA2F6E5975F461601EDD26068A3F92D348AE82459D63A7A0D3681BEEA8CB0
231091547ABDC2AC59B3648181255F8DDB13CA0F2B7A9033C7228122871CC71C
C29250F5280DEC5FA05A6100A26A4F85D65510FEAEB766D46F01F10779C4F2B9
CC838C9F6421E4AA43B1217C771883FA4DE97945F1E0456DDC77DF7D3009119E
028642A7385423A24362E9D72A552308BF1B93DA276EEFDE662A639FF97BBDB5
E62D91C99661CE9DB7FB1FDF7E3B99490EC96C7875D2E1F095490FBB23C38D03
43C980A522F6196C529087EBC4153A2C07CF0210B2E0998AA0B73B26DAC9F5F9
F72BB3D594CFB76DCAF7AAAED6A69E7D6B7DC5F6684B4B7A42C5F5A289E8A4CE
095991C29DADC9643C998855C4DFAA56174C9D1177BC933EF3856875181C4568
0C941350EC881C3458A2071F7CF0EF7FFF7B8C9CA53F6349703C3E6844B90B92
8362C3D2DAC0542B2D583DAA26005305721B0C1540F29097C50C7B3000F7012E
2CBBDE8415A762885E69B832AA3796A9924C085A2AB83DBD18987EEE92254BEE
BDF75EC871A41AC85E32520D60887218EAC291BF4634831301510B6307924B54
820C0EE61E5BDEEB4026DA533A4399F8BC6FBEF9265C100443C9962A4A72D3A6
4D085C223F83DD0B7FD9D5BA7DC9BF0814D02D80092696D7E2C58BDD3A6FF8DA
B56BE1E63300CD6D8327874E117AA1ECC8B2174E9158F16220E8402620C018D6
6F90D418BCBCF9D6B7BE75EEB9E792FC84BE2D9D6EDC1188A947EDA6D050E006
897CE699673EFEF8E3227DF4E22CE66945826CDCB8718F3DF69007FAFCF3CF33
0DA546CB18031B03FF0911D27DF6D947AC15392D5C5A266CF05BC853920831A4
AE070D00A5D053A6D800A890405474DF7DF75DBD7A358C329C13FA0F7D96F4AA
0B31F065247239F1FAAFBAEA2A792F2E886CF2F1392087C55CA87D1B52B2D860
C43B0019A1073CD15C65D5AA55E79D779ED2E2BCA404D02BB354E80C51ACC360
E71A8679C17019AAF6980DC283A3278A2833B60CC2320D41E1911963D1FF9964
4AFC00A756111D9089249D5AD50DE0FE7E6BA6A93737680667B60BAED3D1D5E1
99C6E6CDDB2376400206D3A758AAC376E309D3B6E0FD2056894A699189A21165
F078DCD8B6D85C800E822B50C7B2A7DA33E5EEB2A75CBFD96B5E14CB4D16F920
5A2A63EF98DF6265CC0195B0322DED136BBE17B18DD933A667121165F9ED9D6D
B3E74CAF1587AABDBDED622514F24B3E7D218C489112C81BB1FE1632014D99B0
CC50F202AF05F6317696AE6B475D27A407B6766E5D2E274416841F8EB5DEF014
306340B5C0CFA63CE13A24038A6C99E38F3FFEBBDFFD2E860A9B1235F37044A0
1E105D572167FE94295340F643558D4BEFC440C7AC9ADE0B17E63CC9E91A7A00
F105FCECF9E79F2F9B8D1E00A652270A87DC2164532F1D620F0A861A99C091E1
9164F8ACB3CEFACE77BE03650EE1A533C422310BA2447824F2278C7D02C5085F
515AA33BF0AF894621DD3C769D3C4B394F43C71EBDD09A9A19E54EF0722CADDB
25EC1D8E90B3CD1628845702F6800D2C7322F20BF94620A0A189B18E59FA0849
249FECB6DB6E73E7CE7DEDB5D700A585D742980A064C0D04EB1272FCC8238F44
9F6A68DC86642F5A0C81CC67544D4069D8004A63EB4186D45508B586CDCEF924
3933A492FE98287C457083EA5597BC4B972EBDF5D65BD9BD00EB53CE86920B68
4DD637209F244342AD29CAA4914C1B7567C29A8187C4820F62C0117591EB8AB2
84E983C3162E5CF8F4D34F237A8B9F433A002080C360F130AAC0A528A742F364
9808E40164B33F482B784B2C2843D4588575300C01C96957AE5C79F1C517EBE4
C3B6D6629A1A170F3166D94EB516312DB14AE266C4F79C54349988C692A9A026
4B6EA7B9AD75476F4F3C93EACB0F553D956D6EE91F188E8337659BE0C73BAEE3
87A7A5B30515C8C43BF14B8868E148AC6718D4D07CE54A6099999DD18E6326F5
EEDE531DCADB59D3D86858DEDE896A24EB37A713137C3B2A3AA7B5AD696A57E7
3C1943A56044FDF97BCD19ECDB9AB60DDBADA6A391451F3B07CB8F0C22846203
AF8848389F2C28199096C360C6C70EC1DFD23BE042A6C10EA66FCD3ABE712C0F
F6B69463C4AA3BF4D0439F7BEE394C1A6B68B03D613A43E84313D3E0265615B2
9AD539888389343BECB0C35E78E105147241F441BCFCB5C618EB121E1C48D054
BDAE929D0D502687CDAC075E1A78D61A608B725AD474181AE995AB35FEE66411
A2C74431C1D70DBE3F16191BDD292D020EF93B8C6EAE6B02D1816094C30166C8
B3A6573991E05ACCB7279E78421E3C69184626FD75E31D7727024516C4A73FFD
E91FFFF8C7084FB11787AA1BA4DBB66D93B50E294FAE2BBDEEC3A857C1E8B50E
14106489C1606489006B481A2878A62AE4BD61A3151A11E40EC36C3351CCE484
CEC8C6C2B791854B32D5687D073F80CE16860A2F0D6070AC69DCAF1E14969140
0371FD1861FD04412630291063D1CB4D1AEA1FF529E23E247C002486D7D65F5C
3C7852A79F7EFA534F3D85522F8C1604D7ACC9C27EBEEEBAEBAEBFFE7ACC3331
BB080AC99F5FFAD2971E7BEC3178F10D8C6C6AE7CA18BCD199DD54D8430DB246
670C34B44A3A4699080152E3BE1A34B4D8F5C3DC3803FD46BD496DA95C072385
6D0A83D6E38692FF7CB3DE78D65169CB4CBA7EC2F333E2134463A6E7969DDAB4
96F6F5FDDDCD32FDF1C4D9172CBDE2A695D17472A85C94E31329B5B5207BA733
57758B7EBF327DB716F78CC2F0158C00E7697962A9076F443B45AD642416CF95
FA12095BE6D8569661566A514BD55CD30DF8E8BC7AC9B18A458C58C4192A3A1D
56E2E039C61CBF92DEECAA7A462490737624B74F53A57F8FD44983C6A6BE989D
4D64FF61FEFC427FF7EE07ECDBDDFD6E6242A6251D8B140BD5217F523AFD4E77
E29ACF7D5155BC44245A2A15324DE9DC505DAAF87F05537147E051364060A03B
B14118A0A69D3A9664872843F41235F07BEFBDF76F7EF31BA519F57E9DFC0E09
9EB1D0A5CC24C1C647A404068AFA7BBC28CD0CB214E831196C2AEC0AB2740169
C3241535012321FA05B82899A45ABC78F1B7BFFD6D16BBEA452EBAC481CFCB60
22E5293139B47A1A8ACE1A84358A42450A8B0F25561B922D74C0E191405461E7
0342C0DCE629A79CF2F39FFF7CD3A64D3A3E4A7F21A5C9948BFC295A938456B8
29F80ABA26934F3006642C0F3AE8A03FFCE10FE4A830422E235970C82F31CC0D
F356BE5DBE7CF9CD37DF8C1A2EF90A2643432317BCE4C6B15221C59025C3DC62
416345EA959C08418CAA09E425478A7D27E794F100C88F08EC55575DF5FDEF7F
5FEE1D31EB2F7CE10BCF3EFB2C7C02D826B87D56C9EA3B8DAB052A908A4AD6A4
AA9B11348D8139619A8BE533B29780A0951BBCE8A28BAEB9E61A0A7D20CA4994
8B2785B4A1DA391BC491C875B10B98EA44A64EAF005721F30459CF6094C10386
C14B9E286F67DE50D46FC3BD43E018912BE040B01499842081951A177D38AA26
68696AEEED0BE25453264FD9B479135AD044239A46317C11D63E34812CD19A4A
DB66C633929E9735EDE658DCB6C497AAA8AAD7D136C1F1BD8DBDDB6D2BDAE756
65B2DA5B9BDF1B70AC4869DAA4AE6D1B7B4A6E59869B8AAB42599555CC1F5604
813692CF23C11B65A5CAB982885FC3B2DD4013E444478803E1CAA34D58663A9E
8845A262D1966AD57CB55CA856BAE6CCC8A753850EDBE9AA58ADDBCD54BF6BAA
7A43F38911A36CAEFDC49E93EDA1DC4473722411AB1C32731FBB2DDBE6E4ADE4
D4F9ADC9FEC1814D35B9CE8E8F1C6B9A691B43A5D9D9AE13FFCFF1E9543C3F54
6E6E6919E813DBE2AF048BB0932061E9A8E13D7533CB14882B45E1FD587D8669
19C85294F7A89EC362C023009E65C9922577DC714703E2BC41CE20C1030C243D
AABF8B1AC00B3AE6AF8639252CE2EF1004C4B762220819A49868D0017C4FF101
A74CCE205EC9CB2FBF4CE1D2A009860D99308CC05D3712DA848839FA8E02A4DC
308FE4E142D0003D641A269AFB5FCF53C12025FB3CFC26621C1B6E50856C9A4A
33BAA196108E80A92BE344E0184CB074DF60095E79E595B7DE7A2B520E2AB46D
E1CBB3601B3912A64348D08438839EDA41A81A2A4AEE4244A71C29020B730539
2897BBF7DE7BD7AF5F0FE1B86CD93294D2E0F6297446F509CC3A61323C5C0A14
C6D0A04E90DA39F6D8637FF9CB5FCAF9F59A3215A64346D504B8960C55062612
5FE4FB21871C221A054B9F493092A840BD19616B238008E457F22D9690A81678
60E49CA09E63321CEE2F5C0DF96AF6ECD97FFEF39FF120444DCAD359B9722580
BC8C08011E8E9FD35A04F0110F1A8005DC38905D887FE2BAD0F1C8AC401F4031
1039AD63BD74C2AEB1B02B6369026F8464113510D8011E3FAF6F4073B8E3B7ED
A826DB6EB1A26931FB7C33C8E9F9725F155B0511959E425F7B6B575F7EA86552
D7DB1BD6DA86D99E8DF70C168FFAECC1BF7B6DDD87BDB901A35C4BA42BA578CC
EBF1EBD6BDAA730FD53541F0AFE89B488007327DA358AE887F10185E35B728C3
F1EB25C466FD5711C3AEF9AEA7FC39C71DDB53ADEDF08A4E7CC068EE8BB6F639
C9821B5176BF994CFACDBD474D8915FDF2CC6AAA32A14DED3F756669822A5A53
3FDD95ED733A376ED96696B7F44CDA3D63F524F21BA3552BE3C4969D76B12756
932B0FA53537241E4045EF97A9B4C035042E9078AB56ADBAF4D24B9148603B55
50AD80E3612C096E6AAD2F18E5468F23EC685C68E9D2A5B201C9F936EA6365AB
35D0EBA292F4EFA50C98B43710A7A650A388442B1C247F100DA061A546E3C5A5
21AC8B75FA3584638F4C3350BCE2785C11A454CCC0C0EBC77CE9E065A5B594D3
9F810AC9E27951C4CAE5BD987822917124108734F4483D0679C778D4481DA0EA
AA82E962686C62818871E469C95247D1A9E3E57918DA9661A8C0565D7CF1C577
DE79A76E8A4230E9F42F8CADEB04E35042A0D885738A3494DE600BF8D4534F3D
559CD6B56BD7323D339626D01F1CDC29682384BF8C909253FE947FB16728F475
D361D4E810CC0E3983EC1691AAA2A256AC5881EB82BE42F6214AACF5FA7B4224
E90F417310B4CEBE6C50C07810880B4179CB27E249DC72CB2D6CB001B271DA1F
206484B6031523226F78AFC2ECDA25975CF2D8638F81D807EEB5133641C3AAC0
BF586334B9E45EC452915B468008315F6835A5B5FF344268EF38AF064D306756
D00B45E6537CF1279E7822F0E4EA48D0202A14AE68F10A443F5B661032CA1876
CCF3A39E93083A8CC5A676B44FEDEA9421BDF4D26F02F7C1329BDA260C16F3BD
F95C2C99CC3465DFDEEA94D4B683E7EDF1E63B6B9CC0B5507ED42CB9A96A342F
0FDB0BC6535FD5862800B3DE49D2F59CA8A8826CC62916ABCA0B10328E574B5B
111941D57713E94CB95A139FA190CFCBCF63C71D5135ECB2EB3BAAA2AC0123D3
EFB7E5DDACA352393594B6924EF6A323A64D6CEAC9D566CD98346F527A5EC7EC
CE786553FBC73F7AEBB74DAD6D056BC2C4EDBF77529354B21033637EDED9F8E6
BABB2F5FD594C8B8AE512856945F450099A4672A3479B12AF0EC98F9E78ED361
AFE36868D8F2B2C141E5A9EABD0AD6AD5B47D30D9276E2C489E20ABB6377DCDA
638F3D609D005571D45147FDFBBFFF3B19DAFF2E9A4085642406731A68EE1150
CBD671A94A8B575E7DF5D5B233292E4746848C9DA1D986065D47FB273909706F
C4A88C940846C89EBA60C102B97F62A1F4969994EC73E6CC79F7DD777516558A
303E3098B1B8174861F070A107217489E8862F7DE94B3FFDE94F5F7FFD7564AD
172E5CF8EB5FFF5A8C5C6450D4080A5CA5F5E560D9046B593118B637A24500B2
7B8812F2BA806B014543F2AB279F7CF2A4934EE234EA55DFF2438674788019F6
3C82B5ABB4B2F506B42530272044432A42D5D38CF25BA0E659E735AA265061EA
12F601E43ED1E8885FC99F2C26A053A876465231FAD4A009E08411998E88A5D2
E290A214BFF5AD6F91D1847C3E5815BE560FCF552A5FCD9A350B4809B2867861
17396C7B9C0DF90F125B819C00EDC599E794B942F44F699D216411423733D08C
FA09B533240F0E3ED209B86B71CE4403C9F9E518F69EE3E644825AEFAFB7ABD1
21FA0441D16FDDFC4F2682C054C03E5DC70CCA0396951D0DFE332386E97B4EB3
B2DA6329318EA28EEBD52A5515AC9E163B55704AB367CD7DED83772CC876DBCE
39652365D73C4794B2EC8FE68EA6C1DAE0967E39918A17838B31866D863E4139
DB1671E2AA56A8D506E4C3B41DB34CBB502D64820895E578BE689AFE5CAE2C8B
DCA9886E2AFDDF794624661929C3B14CC7F162C55A7349652B1367AF1311A54A
D5CE9E7D67344D147F7E52C7A43D66344D9BD13AD43A7F92DDFBE2867C675BF3
E4FCDACDC5F8DEC9A1E73E34E29954D4B0DBCDF8B55F59A20A5E2C623BA672CB
C3911FD813F0CB413730AA266888CBCBDE07F5F73819606CA8A38F3EFA873FFC
A18E2221A1327A27B09BEC58E7C1E6C5BFE8E5A957F8FE2F5F7EBDBFC2DCB973
8354920A7B9FCA401F7DF4D1254B96C825C5B2938BA19DA4B848B26AE983AB9D
A34314FD4ACF3F842F484932EB928242B70D293BF02D508C726960A11ADC083C
3939E690430E79F5D5574973C45335D4F7EAF84823E46436C256398CD9B15E01
A8D9134F3CF117BFF885480182EB75122115968663842456439D04DC1A39C959
679D75F7DD77EB1C647A4F37B5B3FA44C9B85F270D47212E297D9871E5543450
42AA30B249BF0A50514499004B87E54E9F4FBCAE356BD6B0D5351BF2A8B1A343
58CA90957A3130FC124870409B49B8AF731A420A5363354487D0B203D4EA726B
F3E6CD93E131D16A84E46ECC132086CE6BB1A077DAB469F2861CE3E263115064
681CE9F8A1DE2F5E857D8A40C0C5BEE764045261D12F1C6A20DF3EF7B9CFFDEC
673FC3AFD8615B85813E8474597E8C1013E25AB2A5C566C7CC634DEA1C993AF7
2A013FBBA409A64C9ABCF1A3406F1DF999236525070BD8F72C3374DC8D204710
F38D84AC3ADF1265D0220E99EF455C2FEEA98465C513B6C8BA482CBA6D6B7734
95F8E2A2937FF4C20BEB3FDA986D6E59BF75536773DBD040EFDC29F3FFB0696B
DBE4C30F3BF60BFF70DC5191D6E6A121D34A0E79CA777D00D4032D64D5D3D79D
B1A1EFDDFFE8734FFD6BBEEFDDF9B3A6F46E19CA97F2B2A0B276C4AFBA35DFEB
6A9FF461F7F63EE58A46CD76B5973F39A5EA394AEEDB49C4FC949CA512CDF9D1
82EAF8B39AA2D450E7ECD6B8B7767E36352595340FDA739FB60533A23B3EC847
66A5FAD6D95EB5D74E76191F14B31DB9C29C753D5B07867A67A45AEE3DE31C71
3066CF9CB676C34651680DCCA3084D8F151D92F5205AFFEDB7DF46AD80AC52B1
F481911BEB716093225DA73798C20AE73EC29BB1A243A8216755300066FF030E
E6B15E8411FF7579D19C69287AA48B7AFEF9E78BFF0B9B4BB7F53CAD3F972E2B
F12F2AEE6070E1927AADA3FE135A6A7AB69986AD5EE88F93C8FE14738C51293D
15E9870D0B19E5478192AAE779484044BE1A44B7911EC78D4F9E3C190D229891
1EA909F409254D31C48A2C91AF7DED6BE245C1EA94E522DFA24681016B6A7B4A
673DB1494E7915A28F802FD67D02D26B8F8A77B6B5E6BD78E40807C9BF3209A0
9994ABC8D8803745C21C7A7AA426F0C36E59702701EAE5A51B06A0372E05C132
EBE0C6CA1843ACA3A10A7C142C7A92D7C2B1434282429305F4380F2647CEB368
D1A2471E7904BF65A4556FA7839BE2EA421049CC3771BDB92DE10321E52E5794
81A1F10B7999E4AB030E382024E51F7EC1B4C2CDA2C6C2AFF70B445339C0FE70
069DF7102C2CF27EEFBDF75EBD7A35597239EDFF339F20168D55AAF5F2DDD033
8828D343B1B06802C3CA2833AD6C79938D060B3D2EBA5C8C5715C46DCA6EB5E6
569389A62DF981F6D6D6EDFDFD55DF6FCA366D191ACCCAA248A8DEAAE7659BEF
7FF2679F3AEA6335E5160737753575D611430AA902AF1E35AA4393D4663792B1
D4EF7FBEF6E48507560A0349654FEA98B879C7E6492DE9B86F67ADF85E7BEEFD
978F3E7A77A8779D939FB460DE50675359E51CBFA4DC48C26BB654A462146AD6
4034E665E675ABCA14E3A3D53DBFB5D53627387BCCBCE199878DF4C4EA87AB0B
6632DB944EDBA5B77A2AFD9BDF29E6B3D1894D03C57CAB633C7BF9373A33ED47
1C76E80F7FFEBC1B24685C4F23B2FEC4273EF1CA2BAF20B63C3263BC6CD932B1
EA642FCBD2BAE79E7B906A1E9FADA4A11E9EA073F807F46ED57F57E188F380D5
0A12E9BF0D15FEED2F9C30105F0DE03CB8C328FAC041E45E268BBAEEDD1345AA
EF6A7D76580EF3CD6F7E531C0BA5E12F47D504D84BACA2D4859A8E1D22CA1348
E106EC90D2322D7A5E01215704D659F20A1E21E4EE264E9C08A98D181F68FFBC
F0D5708380C0C382008C470F029A21A3243381175E78E16DB7DD86CF093D5221
0C89A5CE9011A8E7A013AA7322915849699D41553DD8C76EEC2C350277050238
9C4C028D91FE0155A4D2480A47F5099052422A1ECB91405258BB28AED129921A
EA18C6419182565685200D6C1E3A52729E9B6EBA69F9F2E532157A7448C76B32
69CF625A1572104170336B85B9220B02D3272A340E90129401104A00AC043E24
570AFB71022D0EAC3A6AF58D904F1F850B471E79E4B3CF3E4B963AFC8B5B907D
71E5955722CC28A7BAE4924B6EBDF556E86CE2E5FE161BB04113588659736AA9
64D0C9BD5A13819E44F1574C99F51C6D9021888B0230ACB46F270CCBF4CAA224
5266241D8FDB11253A20572B956B22EC55A6A9F9C3C18144C4760D3558752635
35073507B9A19CB2CBED7BFDD35937CF3FFCC8B629CAA95406760CA4D24D810E
103D2312B69E8A909514FC6BD7CC92FFE6AF9FBB73E5D993B391BEEEDE9425F2
A4D8D29234F29568CD5F306BCFD5EBD7BFE7E58B4973EAFFF9E48E52DC4BE6FD
5449F9A65D8E1B41A3B3B21F29FBB56C25E6AAF6DFA96755C7642BB73DD9D63E
B967C7FBE55CE4BABBBF31D092D998DF6AA592D552ACEFDD0D313F63C6B69753
91CDBD3DBB253A26F5798FAEB833198B171CD15CAE2E49E4895C76D965E201B0
06BB0145AA4213136201BEDD381ADA080B2A172F5E2C9A833866E08800A83BE6
9863C4F218BFE31683223AAC40FD0D58B2BFF1C5C21403501C08239A75B276E5
92B23A656A2EBEF862985D400D4212B14B14636D723C3B7EE06C7ED87923A038
AFFF1C1B8FD25985D62EDB54FDCF3ACF9861D33B4E934E114C2E1492DA13A30D
E10B682CA23A689283DA2BB042B2CD1670FAECF3CCB00C7B1082260132DAA877
01945BD3A5122C56BA1DC4B118218F0D22303366CC20A782F81622FBE473F131
C981C3E2384A4FF2CA354478B85C80B682C98FF160FD89E2479F32114037DC70
03E1138853136607613AAA868075C3FE42C84BEB4D87705FBBEFBEFBFEFBEFFF
E4934F623C0D781E3B6C8CCCEA5924E5643CE08E66B89F75E96467535A835926
7211B3927F45C85E71C5156443C375E9C1B03FC448494ABD28AF7BEFBDF7ECB3
CFC6C61E07C74DEB92FE341D59A83742C2A8BF896CD67B91B35AD8087B6DE2A5
DB349C289F0DF2AC40EFFAC8EDCB303C7F988A43B695659BF5B22F71114C71CE
EAF55F533ABA4ABD7DF3274E36067356B198F74BA9482A21CEB1EFCA532B3B65
F995DC726F292F33B5DFFC05AFAEF9D394A6F66A4DD49B59AD96DD8A1F6D8EAF
1DC89F74DEB752938FE9EDCB98C57247CA1F8CD69BC6F8B2B3C40250E542251D
4BCB32D9D2113772EB92836FFFE8A16BDD818DC9881AAA297100271A5E4B3259
1B2826FCE4A0E3BDA7060626ABCCFE9D6533512F45109D9A50665C1981020BDC
1A27938E0EE6FFDFEBD3F6EC8C7EC6FFE8EDEEB6816C6FFBB6CAB656F5DAC0D2
9F3CD436B4FD65A3BBFFDD5AAB39757BADD21CAF5AC54A7FABD9ECF8FDA581B7
6E78D0965395AA89B061220AAC8CB0FBF1381296D481D87DAC8D059E87AC3E2A
ECB33BEA4960B22044AC63C3B072880C84F9AF7646D2CB45653DDF75D75D08CC
508A8A7040DB5478AE72069DD551697573A376B6C1E23494D67A173B93F55672
3F889FC246139570EDB5D7EA4D91C05C06F30D581D4816987E689F023B11538C
A018DA7B6ED8B041448FE861C02B8950DA555D6784B566C8D9C21A85CD4B909F
0AAB5B21A6A166A90CF5A4909E1AA2B7848A274089410BA5335DA3720F816998
C6F2E7962D5BE4E722C745B0E26103A704080A4A16014636C3D648884BB2FE19
3DD1CCB02326560F74AA7CF5E0830F222C2E42500E1095431E0B3D550399CB6E
CC50DEEC884BEE11A5F56340CE1CF205ABB6A1D5418326408581B83B77DC7187
DCA9DCB29C1FADE5F0D0C918AAB74340A41E159EEC3C81D9E61E90539D7AEAA9
6232C30940B30AD86218F6A44993C0A047B541CA3CF91CCB5D7E8B6D43023B88
57BD287D544D408A0B39C9F4E9D3D7AF5FDF80251B6991186197247A3C5FFFFA
D7BFF39DEFA0F4812566721EEA6F62E1105382FFD4804DA08EA7AD40E70F8A6A
58FD9BC17D817D42FE8BDA61FF9C3A2F50213F4C4AD3924A17CA95F6891D5F3C
FE847FBDFFDB53D24DB5FEDEB432A29198E3E3D2750345B9E26105FA241A29CB
AE54664579692B118BCB692BE55AE5C87907AC5EFFD647CAED6B9BB9FF179615
9B26275AA37DFDEB93B5298E57AB54CA56B41E7350A2AB0CD12C33AA8542CFFA
5FFCC7FD1D914269B0777236512C89428A24DD4ADCF49B23A9C30F3EE2A72FFD
B67F82BDBDAB929B145C3940367931DF8A99967832B66FD47B93B989D21F57B7
364F9EB7604ACBBCECF7563C9651992987B5D96D76F10D79E8EE99DFB8ECA52D
6FA7DCA45DF36AF1B253CBC66B7E77C6B407CB6D9D5DBFBBFC9EA0E4DFB3AE5C
7EE58D37DE082E199D4E7C1CF90361429BAC81F449360236BEACE7C30F3FFCA9
A79E1AEB3CBED6D017FB0E8F1E5DC1D9AC17362E491865251F7DF4D1725A9841
101DB367CF964D71F0C107BFFCF2CBF243F970CA9429B2F209736AC82C5A23BA
5DA2BF936C2E033D3F49778CDD887E4F84E2E12C0823C8B740C592F312C629C4
87DE32948A94B46E7249A84A2440D0EA12B136E64F76D527602DB18839628DA8
2D216749B74238E9484D408A28C8149916D9D294F80DD133B91636215913100E
227C1E825E0413940494CA75D75D27E212447530CF79177453BCB0B19C11F662
C3C4EADD7D6102CB5758BB2A04AA36E4339466A542D18283F39C73CEF9EE77BF
2B0F054D9B2165640E91A5F7425E657970ECE20916C9B1A246F27EC9922562EF
CBFCEBCD1AC12AC3A8944CDD19679CF1C4134F6CDAB4894690DA996FC7D01A8A
C92C9D78E2890F3CF0007CA954FD85966430386402EFBCF3CEA54B97AAD0B904
308C17856E90F3C016C1D3013CD7082B4EC6D204D8E4AACE318709FCE77FFEE7
175E78414FFD8D2A2954D8EB9C6C1946487DCC7C7203CA0B2F649874CC95AED7
3106FD7896AA0E3F1743F99A15202E00C870E2D158BE906FC90E73231A41DF7A
39C49CDA39A97BEBA60E33D16C5AADF158D50B1673D5A9065D25C5873087DBAF
4612B1A66C4B5FDFE084B68E801337B0EECC4C36F50F877EEAC7FFEFDFDCAA53
51463A36B35071F26AE36423B223C881977CD38F6752857269A014DC70269EB4
267479B572F7F6CD9D99A893AFBABE9A6007F224617B96E81ED7C99AE9B219D9
9428E4E658FDEDB574609B2A392CA84E336DF17882E955AE953772AF95DBF7EE
DAE7B0793FBEED87D16ABAEA55AC786CCAA78C9EED316B7366FE69C7960A7D9D
139AF3B90FED785FC1EF9C986C7EAF564897E54A91DCD37FF8C4C70F7BF395D7
2A7E41D6A1DEDF14900DBD7B84FE3243627398EDF0DEF4325590CAC02ED96DB7
DDE0C28EAA060E38E080D75E7B4D695037550788CBE72FBEF822009664E8A19B
2B76F38A152BE442B24EC87E0199869836541A821690E786D6BDDC08ABB54476
C19F26290B9AC418A0B030B4CE9C0895C0CDD70D3A021B20F82EB8E08255AB56
4D9B36EDFDF7DF47413262E2B24065FB815554D79CB27B65C4EBD6AD23C711B5
13A7F56FA9A01939B39056627F8992473705191E4A10C0CE41DA58DD1783D631
EAD500C8D332CAC13180531E9A4CCEFC99CF7CE6A1871ED2C3503815C362BA80
A3790BE5216A152252740302629014609220212833A2D43132C9575C7105288E
09F005B61D2B4FBE625BE391691BA83A128FC84BECF7DB6FBF5DEDCC14CF7614
10317BECB1872CCD575E7905460A25DD484D4026741835C8E18320963E964864
B91DBD619E19126DCE9A35EBB4D34EBBE5965BE47688B161AE1B382E2C2A5420
CB8DCB22C6738487CE2A71380A34BAB133A1E42046411ACC380C3B918DA50920
A9E1DAAAB02FE93836231B59EB650462A3C9462065A99EB1A02F8E9FB33F018C
155F6B760487CFD2FA59CAB73C1E1683A77C5801C3EC61A532B256A944722837
9488D67D3ED749066970B31E947326669A5BCC48B45AF3CA05CFA807A37C5100
812B601A2A6205EEBBFC21BE41DE29C7555CBC8E784226B95C73AA1D9D9D95EE
6D535B9BAA85DAD662BE33DB3130B4A339AED695552612ABBAD57ECF9727DD35
B9BD3757D83E5444E1D8C489E95CBEECD65CA7EA3707B965372AEB2DDB1CF1D4
96FC40574BD7FB5E4F6D41725B532E5B0BC6217353D75BF55AE840D5A9DD5B3A
DFF8F76D6A7EF4139F3BF8B757FD52E52CD5EE78057BE16587FDE8B71BA2AF97
92A71F952DD513B946A935E36C2DE4BA92CD7FCA0FCC6D9E5CB3ADA573FEE1EB
175FE495ABE2B810324752A07192B17ED8455C854585C84BF9758618790F7F94
BB7E1CDF11D124EC5352EFC91866CE9C290F94EB81993CB1FC88A1471A03B62C
B1E3F6CEDD58F510B1AF352983B521B770C41147BCF4D24BBE46573E5C638C20
0F94A1086B78D6146A9023D8FF0C19EBCB9A616E9911FC96C903EC28A4671949
00F5B1FC70DF7DF77DF3CD3755D8EE87B99A5D7AE9986B7C420C38A7030A8651
2F1D1C05CE29F9FCFAEBAFBFEAAAAB549D0E5E74099054E4E751757B1C8E2170
2608B340D6408DF3FC3A4DBC18CBB7DD769B5E5E08662744668068024C580603
1D00BE7E1516C7A1A38BDC2398F8CC7A3F58747AC0D90E3DF450B9D07FFEE77F
32B34D3095D292C048DD934A0F2407A8E4A25402A788DEEC1BF12E901A8EE513
C0F416C1B778F162717A54D81148E78480A004F7B2AC1358F408EFB0DA4387D8
EA99F04B2EB94474BC3C56087D64DA116167BE0AB3EDD799FB54E803C1E517CF
065E149A72600FEB68D451350111B1584B72A48CE1A28B2E1A6B89C2B2C16C93
B805914FA49DC01660ECDCFF12D121DCE682050B4410200F375213E855230035
EDB9E79E6BD6AC210E6A5813F8BE593F612A1647719FF80481AA1E1A8C458358
5F5B4B73776FAF6DDAFBEFB5CF9AB756B7C61276AD6ABA557718E763D4CB8195
6802DBB4EA1B471EB1B7FBDC3DFFF4EE5F9A92A2988B86E93A4E90A8F02BA5CE
647AB0982F29DB899B76D21C182CCF77E3384F45793B5425164D6EAF16139178
53536C53CF60C5527E345E28976774B6177ABBDDAACA04CD898D54349E8EA537
E4BA7B6C65ED9F1CECA84502251DF8048148AFF32329C4BDB62BFF8396F20CF7
A67F5DF9F53DCF8A38916A62C852D9854BFFF9C7BFF9E34D272DBD76CBB39D66
D4AB66CBE5885FAA669B12FD1BB6362F985DD8B0DD8F9ADD8FFDA4ADB3B5777B
CFEC59B3D1B30F203DC887F171FD483A8ABCFEE8A38F1AA2A6480521DE024134
162A54D6FC51471DF5F4D34F1B759A67A093D5688431A04405009A3F47E0C808
594C409E8A86A0042813D7D3300C3B6CA60D0909924D1ABEC35CA48CF3802156
0E92CD8379011501BA637FF39BDFBCECB2CB4013AF34C09CF8359FFCE4276169
E232043B02233F6AB75E66C3A8FDC661621AEBA587771020863C5561974AA407
600692044227DD832638FDF4D31F7CF041422D797E766282845ABE7C39986D0C
AD14000A52E72B655703B1E8C559A16F216A06CB48D6D3860D1BE4F8BBEFBEFB
A69B6E426757A41664FC3ABE58960E624122703130594024A626881E7D7A1B60
4E9C67481C00DA80443AE38C33646CBC84D8F2F8973964C06600AEE58A1F155D
0AC751DE10264B51CB6240CC12CAE5316691CBF2091B591B1AF2987C3E702F64
B4E8D583740EA216FFF66FFFF6C52F7E114C73C898C9E5E48EAEBBEE3A648330
78A5396A447629ADD46EAC8C31F1A6322DF2E0E0228FE3B3C23087F642F0170F
116B1B73D5401C465B448515A4E05B1D353AC48C028914E578795E7CD60136D4
AF0B4ED4F65787D90112B1B8F80451CB46DCD9F0BD9A682CC3CAC4934EA91855
5E532C1E313C6C40C7F5A2864A0C930E89E9EF28C36A6D9DF04F471FF3DC733F
91AB6F1DDCD696CCB6B4346D1FEC8D146BCAABED9999E614CB8E5B6E56B1B48A
ADCDF4E772055105D17464FB502DD2627DD0EF669A54AB3F61B054ECA9156DD9
1A6E4D647C2AAA8C9ADA63C2C4426E508CF4849598B8DBEC17D6AE1E9CA4E27B
D8AA8EBC33EAEC45C11D2B518DF56E7D7EC7F697B625E676DEF5F86D6DF9D441
73F64DB526AEFAE63503A581A77EF8A3EABA5CE7D7DBB7EDE8B6EDB6A837C5F7
62C9F284163FD613338DAD439D53276F7DF88703437D3255E2DF106602F93B3E
A31C1C3E39E6CC33CF1431083BC30CDB462A0D12C9CD32EA79E08C32BE22EB10
7E21FA8EC1100761017D5C94D4A0950850D1A4F1D7534724725761A444AF8262
E31DB4A71429044F08922AB051B84FF464023F945D2A83139945779E5DC22943
45E81F7FFCF1F7DD77DF934F3EB968D122A847445A00B462D11384118245722A
6CC219336680BC8CD6EB2E69023DBF477CAE0C69FFFDF79749FCCD6F7E83500C
75006C2B9D491C91385427884895C1C87BF493E10CB217047EC5D25018A472EF
175C7001A4869C448FE9AB30AC4F2317A63DE1225463A0B8C04A42E131A2F3BA
2CA3BB83CA75511B32C30002410FF9A335CE6CE057C178105BC013A46447EEBA
6186C7C70E6109C245057C080E25D6122B42405F289FA0C050460EAD26C70700
95FAFCB0264B9F3DCC9B8E1905B00D3C0DA2FF60B8E05F991F44A5F06481F681
DD240E289A83D3D305926D2C4DD0001B03E7287BFE8D7C6133A3332B541DB872
4F39E514F1C4E561E1B1CAD818A244B4C7D899F58BF5316AE78CB10AF30A5CC3
4C230F3F716358ED8348289318A66535EB4DC744313AF59EF5F120F7D8924DA5
D77FB86EBF797BEED8B4C9706B8552B139590F48BA9E6DA8782C16B54CCF0920
0415C7330D7BF2E4A91B376DB20DBBEA97EB419A20B2B3E7A41903DB7A93C9F8
F67CF79454B35BA888ED9EB0BBA2513B5F14713B988AB57EF6F327BCF8C66BBF
FBCB9B25550C6040D964BE5C10E19E8C25F243A588652E9838399D0CBAD2EFD8
D473CA994B6E7DFCDBEF1943A9BD225E3CA84990B9B1029FC0F45CF14464B1A9
EA966A536BF3E0EA813D0F9B77D95D57BDFEAB3F5B656330BBF53FBEFD93D2BA
6DDE81C9D4AC42DF641531ADA4D73AE4D422DBBA66374D7F3F976FEAB75DC3EE
7FFC571F3BF880356FBF2973230B432C455061633EC7C1E973139D78E2890F3F
FCB0AA3BBE7A0B2F3C05C264C6A90F602523AD22432B70630C9090212684E829
32BA2847E2DB919DC375F1A8428C25C0D3B85F4432FF6A6DC09B40FC413E1213
F5FAEBAF975393E34C85E938F0FE533AB0C39719767E8047ACC36FA05774C7C7
08EB3CD977052CC766D86073642FF5FFF605B3541E920C12DDE6107080B854F5
CC8C588EBA854524064160727579239EC15D77DD05852F1B1BC5537AF49F3A00
7F820F47142C818FD467A8BD82EC5EB162C5D5575F2D2B4FBE15EB95D607C643
DA57B5738A1F6B14484A997014BECA3110E8801EB13C4D2FB9D0278715AA44AF
4293C900383F725119E1B265CB8094051306C85874C530AA26603DA00A934CAC
24D70BA1BD9DBBD843FB422553A819218527CD76AC4910D9E34F426F09A19129
92ADB574E9D25B6EB945C68CDD0563878051199238738093CAC0B0267568D948
4D70F2C9278B0B8F8728C7CB7E9337E354123156AB42DE21D691B007061967F1
A71EA564B2CA0F3B29A9112852C20AD87F7BA7FE1F81F90CFB39B8A90BCE3DEF
8E3BEE08347D3EBFFCFAE5CBAFBB0E656EB66988948A1A762695AE958A9E5B4D
8BC7E63B1537609E88980AAE8568E34424706EFAF2C578343E582DB7C49A7295
5CDC8C797E559EF004D72F794E5225FB5571D6B4B6EECDBD1322769BD59C2FF5
C858E23133928C6EEE2F374D6E7A7DF3603CA22AA98448F65241E4839289B9F8
A20B6FBBF56E794A56AD30A373825F76B60D0C4C9F30E7D59EF7FBC581D8A7D9
89957CE59A2A582D9EEB8B1751AD28A7A6DAA64C2AF56D715E56664CA5174EE8
7EBDA733357F5B748DFA73AAAD181F3A76AA5579B37C74466DCA4532AA1651B1
FE8E6C3931146B99546E3354B6E7911787867B7BD5E0C601A4078C3BD8D4C712
3258CF2C97515A1C18D4F140228D9FEC440C8735E4CC5419F59E04EBD7AFD7E9
E8E50D42AF0CB10033065380B855F822483960006A04DC80F410DCCB04E90C2F
7E9D4E8F644CE8BAC79DDF0047D955493DEA8BE935A2B671576C62A36B39CA14
8833C64FB1C7987683C447F00416BA0805CC0ED9661CAD613A9F0D72E3DCB1CC
64181AF39AA575E524F2523624F2F8441DB00A4FC750A1D10A742437FFE38F3F
FE95AF7C05E20C7724CF52C4F1CA952B81DF2565A90ADB5F203C7243FD056B02
4216528FBC1A2A54CFA4C266551403718C7A613D21BC034D00B3E5D39FFEF44F
7EF213B92911B2AB56AD429A818D5674DB04772DD38E6A8991557EFA4BAE7BE7
9D779E7BEEB9841A03D086FA03F9131D7AE54FD9A2DFFBDEF7F4E029560B8230
BA4C9437F2DC59B622D38B2E6C88FC8ECFEBA26F755D13C849162E5CF8B39FFD
4CDE8B1E42A01F0EB59C563E617508E303549CF215CA0C496BC1C5833246804F
F4381EF23108CFCA02B8F2CA2B7136C04B20A1D89D0DE2033EDC58DD10793B78
C3BED0A958B08A82C4B21510CFF9AE17374D99B28CA78A4E351E54A49979B776
CED95F7BE8D1474496B435653FDCBC3D6629DF5311CBF01CBF2D9B1A1C2A4C0A
982B545C5931359C6496E94E66D2FE8EDEB9BBCDF968FD07D12060E52A33DD1F
B5D69607FC64BCE6B99144BC7728277BB56342C7E6ED3B5AE309B75CDA233DA1
5CA90CA4235B2B855CB122032DCAA8FFAF526595F4927EC92CE5CB86EDC59B63
2AE27AB5BF460EB16161910C54FA6AA5683AB1C08A257B8B7F51C9BEA6C9663C
95E8E9F4931B8BB90E99888CBA3E97A9A672ED99D61DDBFA775D8E2197C9763A
A8F332C226837E9DD180F87DFC89ED00694EBD3E6BD6ACB56BD7FA61B7039D34
6CE46BA7004E88651867316383631D92ADC40FB90674731CF63DC4852CEFE08C
B2ED518C404F1F452BFAAA6AD030FFFB172BAA54E8074110207242C411B6BD1F
36B7D16B4028EFE0E383BC85D301E239E23591F727D8D40C1BFBB187A20AF58A
1F36785261A1202C35C470C02F0FE989E42A42EAB2F3757633762C01B59CCE6A
8007097E4DB959F4449341227807E27B244E6923CB9132783005D1F920EC52D4
F6673FFBD91FFCE00772E439E79C239620B4025046440003DFA6F76C414A5F6F
1F068CBF1C230323FE0CEDFD2001E5577247F7DC738F886998EA22F56424487C
C9CF11BC3676E62E6D78EEC8D3CA854E39E514192D16FAB469D340D9088F441E
1CC1A6EC74462715B7C0E4D3D1471FFDCC33CF408DF15E505C0615FB3F606B50
75F404D8E5E0429167822D4EE50019030B9EA12D60D91D73CC31CF3DF71C9D7D
19001ABBC2B1D6E17DBC34717EECA04004361E01C3116C34364E3415AA82CE16
6BD6B2C9D4603E17B123D3674CFD70DD7ADFF3AD3A2184389BA948908896ABE4
7DB7ABA37D7B4FB7680CF9767247AB53AB0DF4E726B7359787F2F99A9312A151
47F444827CAFAC51A3A644191846C44ED79C21E5CD4C3577A69BCBF97277A9B0
CD777B4D77875B811F9D48C66AAE93AFB81FDF6FDF57DF7873A2526D2A263F1F
88DBDD81A9EDC9602AA64AFF6332972B59BE1D8FCA462B5755351A37ECB8E186
76AD9E580A1E77C4C9175424DA6227DA4B8EE9C5AA7E6CD0AFF6AAD9B14E5133
D3537EB1A5B26253C24D953A32A92DDB8ABB28C7FC7A776EBF4E0B6684ECBF6A
E7EE6C2866E42AD5917278B2865649CA0FF1669CFD8237A460D013C2631D0FC9
0944A2DEB2945A078638FEBCF5D65BC5F230782784030239ABE31175ACFADF4B
13A8BA58C4CCE2FDB1C71EFBCA2BAF80EE51670BD059CC0CAD1FAFD2DA41C8FB
DB6FBFFDF2CB2F6F6B6B033252368FDCC5F6EDDB75E38BBE05BD2D98F3B088A9
DB79A7DCB194A16CDF06DD801A4536F011910186259DF60E9CD570DF647AC9D7
E6878CE7728F22EB45B83CF9E493224410D786850EDD8C56D4B7DC72CBA5975E
4A5B43EE4BEE426E50E7A783C182781742EA40BCA83A364CCE0C2E23643E90C0
649361E211E5BDD8ECBFFDED6FDF7AEB2D12F032E3242FD1550D4443C87F3440
B6467DE8506FF057381E066A808E456449D52366BA3B88A50CAB1F66B511764A
60520A758B575C7185DC353B548FD35144DF420D19636E6FDC3BA297B012C4C9
43C71EF90A406ACC007BFE206B8255C79A12198C1C2C1A0E94B44ACBBAEBE120
4A7C9623C027200786CEB634CE7EC43ED735819CB9ABBD63EB8EED996C76BFFD
F6F9FDEF7E1711715E750C5F2565BD59817F2952408652766BD16422F84279C5
5C3108F8D4E1255D56744232E595ABED56C4AF39A6EB476CCBB0CC925BC93925
591087CEDBBB54C8ED0838BB6ABBB54EDDDC3F5048443F28F6E66C2B95C9166A
95814231DB948DC4631BB775A74CB333935283F9849DE88EFA038667384AE468
C552A9F94D3BFA7B5542354FCA1831B7582BAA2017AE6C34D6D9890433F833A6
A2855A55FECF8A347BC64C2B36A1620CB8850F62134D634B777946A4AB637EEF
7D6F55FB6C953253E55A71D780297FE528A39C957585E6BE54E77CE127220DF0
2DF8EA11F0089A3DF4F4A0A52ED833C7B7B071126C4CA2A575485EC30BC109C6
4EAFB9E69A1B6EB841DFAA40F4899C947528AB11202231400DC452E4F7805A23
72846A4C1A1D1807A39CBB3685636F3CA25F65A38A8C1349C7EE34D806285786
83827A2B153672227B0CD1EB84A0408DC9578B162D12BB4CE61D617A84564907
2D73014C088D6B7A9ABA03045F1EA671A9FE92F388163DFBECB329C7E524C486
12062ABF42CB65A85F6C78D6C1A2B803578140C7D6153313E7019727CE03E67A
9A21009950592E5FBEFC81071E90C3E4CC2CAA028FA97CA2331F30FE2E3745F6
6606A979C0942953444D6266CE3CF3CCBBEEBA0B640F73E6CC11918733C80215
3F809D57751744BC4E5964E3B33290B4032F0670601CC824C80D225BC3C1EB1C
AEAA9E6ABEECB2CBE4B1E236F1F8D09F190790F307DFFE2D0BB24113C86DCACF
6566880026AA62C99225322D58784A4BE9EB952528D859B66C99A825F9E4FAEB
AFBFF6DA6BD9E8AD211B0C56193C0204CA509D833435B62198B2A01274CCF858
93CCD02E9DCBC02E49A6F285BC7C3D73E68C751FACB7EB0E415496B765BB4ECD
366DD10483E5623A91EC291533F198A7DC7CD91135B0F76ED39DDE814CD58B94
9DB48A4CCE647D272080089ACF5866D1AB0D560BF96AF9A2F3CEBFE1CEDBBA62
A9B411115FD730131BBD9C6327F2CD89CE495D1F6CDCD03B3854F383D6340F3F
FCD0A2534F9F18B555D5E94AB7AE2F0F8A2688995171B4E511DAE95451FEBF49
256746626D966757C5B1AA9454D2C6DD8DB8D982A1629E1351154FD5BCCE587C
6A349E96B7C6A6B5F9F7B689DFD13677BAF7DBEEA1FEAA1B1187C1ABEEBA4F80
3924799C58035FF9CA57641142B6EAC0B091FC37A43060A41AB13E9C761C1F9A
5626C21B882DEB159123C7C98C20EC5A76DF42651556050347B4A5864F47500A
9938C5EEA35BCDB1FE1D7D02C84712A0CAD207E71A46894FBC906813110C72BA
29CD4D31C25650489F92B70777840D86F3880015D582C8C93DF7DC73FAE9A7AB
B080562EC1724DB57337023C45915008B293BD0057944DBE72E54A586AF215D8
8A60CAEDB3CF3E2237212900E4A77D8D07207A028BE3EEBBEFBEF0C20B45B234
4017E41272985C856C362ACCA642C0C10E850328C75C577F0141CF06AA2A2C59
C25396C388DF9793C854C88D33718D64B5AA2B2748343116E46C32E7401CA1F4
44261F590A40DC102ED3AB07C6410313F52C3F9427F5E1871F22FE23E609D265
2A7450888E50616130CF2943454E1BFB0D412DF4B1812305870C69F6BFA509B0
1AA1093092FDF6DB4F7C23FA5B7277F2AC65124451E143A86A59BA282B5121DD
371150A8BC01BC829441B847FDBAD8BD56BD8B998EB320951340844049C1AB23
727CD4DB194B1398CA306DABE604136299867283E8505CAEEE7971658802901F
0C544A71659694974CC45BB2992DDBBB0FDB67AF43F7D9EF773F7E3E5DACCDCC
B4E576F42495612BB3CE7564B9B65FB554D1A8557CD773C4DCC9F6F776C70C71
312C3399DE562DAD2BF789591B4BA486F239CF365BDADB7395D2F6BEC1582A66
972BCDAE3DA56BF21B5B3F2CDA46DC1271EEE5DC6A4DC5AAAAE6473CD5A1EC4E
95ED88AAA8234B2002B2EB11FFC65C6546125565E66B05C7AFB75DB6A6A7EC69
DB7EF16BBB58716281D7101B549954366FB87EBEB0AB9A00F22A5E7F2191C92C
178F81FB28AB825CE2D8B6700A19A5815F48A02609D046BDAE48865FFDEA57EF
BCF30E0C47D4A68C537A358E26800027D4155CBF2AB42C0D2C6559AF681D0EB9
29BAEEE1871FA66BC964F4FF00E539CEC6E364C9BDC9649161CDAA370D07DC1B
B38F641DE49D9E1937343A1DA08080AB114D76F2C927DF7BEFBDC02F2A2DBCC3
4CA9EC28967A3329A26B02FD120DDDD664EEE442B26921768DB06B02741B2D6E
7A004AAB8065E996BC649048263FFAE8A3801B21E0206FC496147383CF899C80
AC5087A3804C232254B8849C8100272439682633660524190B2CD96D0D350498
312C5F54CF61C0E484A08BA6971FE3D600B3E1C48E7CC9A545A92006883B8509
82A70C0CDB6EBBED8628194BED748A2E14BBC82588136335AFCCD8B9E79E8B0D
099BFA90430E1151FEB7D4AE376802D8FB840563E5D3C9906FC515138F042C81
340EC42C58BA7429D9F130B7C80061FEE110D05A848DD5908783832F6F301BD0
1C18007B0842BE8FDFC570D4E890512F682A964B9572B9A5B9A95A2CD42A4E5C
7490E33645634E4031A45A5B5A7BFBFBA64C9BB665DBD64AB53A736287932F8A
8BDA69C5DB5C3FAECA73ADAE8A5B8D28CB364CC7F74464970DBF62CB1BAF39D3
BCBA6FD3B468BAB3AD7DE3D68F3ADAA7BDD7B363C8F23F740A89486C409445D0
4152891D71E59597DE7CC76DF1AA3739926DCA645EDDFE512C9D5255CF36ACA2
EFE46B66C5AF544553894ACDAAEC6E91447BA4E816F9181BDEC402F6D3A49810
9E9517E5EB57949F6B4E7AB377FC61755419AEF25CE55888B6DB11B94AC9D835
6267C2C7D99000969FFC092025FC572364DE641819140062F1205A28EB4744F0
9FFEF427C460102E1EE73962A9ABB06B2FA4F138FC6CE3478780560720FBA8A3
8E7AF1C51751BD14944C2A8DDA82920B75B66A67DF533793FFF72F645F514381
711F7AE8A1AFBEFA2AEC41F490429E5D4682080690EF7ABF46F20222D58CD947
6D14823C1D1D1D279C70C2030F3C002D2237882A2D390F0416341FB6BAD2D250
BEC6E1435F044948521D60426114B37C175A572650A618E05478737ABF04CAB5
638F3D76F6ECD980D5DE78E38DD8AED8E17221B911513314B80CA6C1DA856642
A05F569B4C172939C97BA3278A19BF420C10E5F5FC89119685C3DE91CFC55760
B34CAC48B91DC43AE56099D2D34E3B0DAB0D21357803871F7EF841071D74FFFD
F78FC5DFC260086241F0E4101D824895F3CBCFCF3FFF7C3D6085E1B1341F6C28
A0AEA214463B11AC284C027B0EABBF01E9303263AC6786F4D611A80682FDCEBE
750408912F0FF5953239F210019B86434935A02320B8B940EB825410E0553A39
237A19EA68905DCD1807AB3D16AD890F17B5C58297556E780166B42B99549E9F
2F97445C6663C942A59888277BCBC5C9916844FC6ACF9111CC8935CDB053135D
C32E575D65C76425881A70AA6525FF7915E595552D93686E9BDCF197B56B8ACA
C9AA44349529C4A36B7A370F283F194BCA0D6F2DE52D65B4CF98FAEE868D9909
996A4F6E8A9D741DE743559D367DFAF60F65BDF9F2DB5242FEA7C4B8F78372E5
5A7C7224353DEAA5AA9EE5A99DBD76C8A4603F59A2EA5432AAD266A2B0B55CDC
6664CD8E81EE41B7E64695198D596555AAD582FB6DCA740CE6BBD5AEBC680F89
48912D43F0B43C1AD91A8821334FA6F38820DA012C32BE95450BFA2C069174D6
93519F2322DE147A0C4B8EB5BF46668C99A0460059DECF9B374F7C025863818E
D1F124679D75D64D37DDA4573CD300E795FE8E3E01A718A210E130E460314132
B0EBAEBB6ED5AA55207D431681E4EF2A6CC76C840DB3482A075023CA37C04484
E943BC1EF10476AF26AC88B7AC9B697A852A9E2E00C590FE32240A23B1EE456E
32FA01F1CDCA00B00890941B55C772B6030F3CF0139FF884FC50068C0091BC81
71AD420D0FD103C708591C3AFBAA0E711159431221F698E4C8EFBEFBEE8B2FBE
18A29934217206D1B2A79E7AEA15575CD1C0E9AFB46821F0AC9059720C829500
3CE87D3C5498FF6763D87150A4F08D40E641201D66067F42AD22518415CCE581
B17DFDEB5FBFEAAAABA8C6506D8F183D828A9819A65EF5718EB3201BF2046CA8
A0B79ED641E56ED838131EB7FCBB78F1E2EF7DEF7BC89DC89BAF7EF5AB2A547B
2A8CEC31F5AD34D0373C7AD28C53FAC355C208E5FDE9A79F2E4F53EF223556E6
702C1469F01C5D473EED9CD2B56DD3D680AEDA554D8978AC124460B3A2252CBB
AF5C98DC32E1A3FE9E5993A6440AC5FEC1BE8C1D4D3ACE24233EC177F68876A4
3D35E0546386658AB9ED072CD88E65140DA7ECD6648744E2B19AE9178A85782C
B1BD9257A9E68F0A4345CBCFBBB5A41DF32DB3E03A05DF29197EDE519D11ABCB
4A17CB79F17D3EF6C9C3DE7AEDCDD25021EF55B7C8392A414427AE322555A9A6
CA9119410B4AC71E1DEF5FF3A211F12FFC204C640C36F7FF29A70A7EC2F044B3
9989A678D5A854F3AE8C3B60CAB6951137DCD12D95719607B6A118408F3CF288
3C38D436CAEE40E93E4C101693B3FD8911D6E103BF803DA2F7F0D02103235F28
2080FB0EA43BDCCD71F6D7A8285215663868D3B00C68D829C19A83C94CF6082C
7D0817D2DDA8B07C06EB155DD13926EC1C18C5CC5BC2C0019606A0259DC59B5D
A48DF005C83CE0ED2C1162408D776BD4393098BA10E7EBE8A38F7EF0C10755DD
65839B26F7C6CA29D688EA907F96FFD013A264811C6492504FD0215A22778A1E
E5B4FE282620E960FD352439C1F28103A64D9BB675EB5619E4673FFB5931F4E0
70C8133AE288234E3EF964DC0516CDFCF9F3DF59B326B0D4529182B8F266A46E
0519E9A66C7E7050F95E6B6B737F5F9F690799F0622127BB33158B544AB5AED6
586F5F2567A96CC6CA0D88CC329B524DF9826853D73454D51FB34B25874A6B5D
EDBA05406464C3F9B14FBEFBDDEFCA8E924F40E38CF23150443047AA777054A1
A68158677A8DC28E7FFA61D92D4B78E45F48CC4B2EB964C58A15D8BD6C4F8484
3313CBA45C1CEB7E0166E5B4C05E73C3FECFDC72D0B8A00400792AFB21738FC8
DDEDBBEFBE6BD6ACF1432EB0864C15AE48A410DA7002156684545D6207C80402
BC88B99263C4A35AB972257D0E0E0C9E442C11177FCAB48C8869B955474C12D1
549326B4071C50B92111012DE9745F3EDF99CE16F343562CD254516911A786DD
15894D73AD94EB56828CAF97B0935634922BE6A256349D4896F305197A8FEA8F
AA9418F5F1483A93697ABF6F9BD5DCF2C1C08E52C22A96CA93A29962B532A0DC
7CC44FB4B66CD8DEDB2AEE483C552DCBC6340B86199FD8B1BD67B0E894AB56A0
B1AACA97275D279C9035AB0CCF6F3E3453A8166D91BDE96859AC23A71C94D319
2ADA636553CD6EC9DAB27687929359462A912C0C16B2A9E17A58AFDE980FC277
9CE80A75300C4A884BF8A368BCC102405A27840822A607413A1667AD0899BDF6
DAEBA5975E127F11B00879890978CE39E7E054A86D02F258E71CD46B0CC7D98C
90CFA05363698E0AD198E2CA9F79E699DC533482D9C2CB207B1A335410C4E241
BCF7DE7B48588B0989C423FC23C649B0D9642FD178947959B66C99D8F24C7C03
1523774EDFC40BBB47310AEF692D33F59008E4290D2B6C75DA3814B5EC10ADEA
B102B984EC5599773906D5B940E3901AF3CAFA8B0813B93AE24BFBEDB7DFA73E
F5A95B6FBD7564792DE79A928E1D6891EE8374103171C10517C85684CF88E22F
4E970AA1B1D8CC721EB9DCD4A953C19F2A33FCCB5FFE52B48855E76E4C06D355
3222D1C0F0AA2B63E5545ADB824D5B2E954429C5A2C38102DF0B2630914CD73D
A761A49D3C0CDFB3E4A86A15017DAF1EA4F59A9BB3107CA36A02406CE52EE43D
1EDF382B7B573501CC059937F6E034EA5D7D4456AE5FBF1EED7190E1077C5B3E
D1B98275C3BC4113181AB91B5D01E803FC56BE45D44B960A0A2688310509C470
0CBD5E3832D6FDCAB580A192652F87119D8561135FC792636E4511FAAB57AFF6
77EE87013A2F3D95C50D8FC52F330FC643B9907842A2C9F45C3AAE827A1A3205
A8D00F664681A94BE4B1E3C984980E2DADCD03BD03314B59AE8A21FB1D89C522
56369D712B4191446B5A64E8502C1E6DAE9A59DF4EC5A2A209A67A9648A9B25F
F1445229D9B9918A53B18256F6A6A76A6DC9D6C1F260CDB2326D6D1BB66DF194
D5AD8A2A92A9A5131B07B737D971AF5AAB2ACF6E6ADE5C18E877BC4C2A96AAAA
B469D52A45B14CDC44CA4DA7BA07F2A55AA56C29C775AB41415BA009B0FD4C5F
D55A83A989B7C49A2634F9965BF36A0185B6EFED7873C8B054407F2A73E918CA
370D6865DB84D4D65B07ABD09F1EF5F9C20775C36E83301A103FD7FD661CC388
B4F8E564411F9FC98E1200E93A4806D2EDE0302EE0860A447DB58F7A7E842EF4
8A4582DA91CB9437E243CBD5659037DE78A3086A71A603CA038C49EE448ED029
4F95E65C4C9A34499C039869D01372CF720C1C67B058430802D68DA954750E55
067F21D9C904CB0DAFD3DD40EECBE560CB93A0036B9DDBDE0C7B094079888E39
F1C4136FBEF96615521440FFA360951E19A686491191777251B648541A0D085B
6362A8BA1AE014B3AF248BD7D8EC457E2E239719837AC7E68487818A7F39C9A3
8F3EFAE52F7F194FEEF39FFFBCCC3F28CFE4B75BB66C79E6996754AD148B2776
F40E24521911FB5F3BFFC29EFEA15CB1F89BE79E0E74831841D100AB932FD41B
20679ACAB9C1608C96E978662491B2E3A9E2C090326D55CB9BB62F1E94673A01
EA0F2BCD0836CC589A008B4146F5F0C30FCB138738FE7BF904F01D3181279D74
923807A07F612986086B99313D0CCAF4804E9AAB6F063F64AA20B5145848E59C
FF9FB5F700B7AC2CCF86DFD5F6DAF5F473A61798A117156C115B623421620121
91A051312222D2150121A022022223204D0D56D448B000FA0958F83F63C1A0A8
B40C300CD3CF9C7E765FF5BFDF759FF5F8CE993927F9AF3FFBE21AF6D97BEDB5
DEF2BC4F7FEE071A37E81E3FA7D79EE1FDCB2EBB0CD442271E2E23FC1F941E62
02731F17E214589033CF3CF3DBDFFE36912C994DC87ECB4CD612F54D19E5CAB8
E6D9679FA5E7739E30309B0551EB1489228799BA210D0B5C4F08000A6C13FC80
916A42BF50A934BD4F4EFE0207C7FA8E2C191EDB350685A3D7F7C14B47FAFAB7
EFDC814BCB5910189F0FD77A2A95D2CE5DA3C3B846F935AFB8DC2FAD4EDD320E
7E82D364B7C34EB150D46A596A851D0D3AB4FFF2359DB8FBD4E8F396EDCF26DD
FE9E25AB0F3BE4FF3CF2AB5D4103D6EB013D0371B33D1DB7ED5265CA8A475B9D
52C15A5EEC4B1A4D1D75568E3F3CBC3BE84E343ADD386A5B318611679A0BE148
29096CAB1824810BE158F13B612BEE86D9154A85BA537386BBE4149C621807F8
C5EA952B9FDDF60CC3A4F4EF490BDB8520862426CC501CE98AFB22D5F8923042
89ABF262ACE38E3BEE81071E602EC3427E7C4263D14541DF91C800763DA1C7E5
820B2EB8F5D65BE9C19E478D565E9EB6CFFB9BCA101BC050F316980A71AD8BDD
4FA66D890B8571572AE052E343BF10FE7CD7BBDE75D75D7791B69843C203392F
64A772578C084F1C1B703D327D5030F823BDB7F41749333F7AD6D8974A62C882
CE362FFD5CE5899871DE23570AF0B8C1C2BF88844AFC192E84898C44FA10AF11
E6429C7DFA7CA941587BE26D48F9D50D37DC70FAE9A7439CE2E6586EDC73EDDA
B5501545864BEEB060E08815C928059E2BBD6E5EF5AA57BDF295AFE464F17470
25AC9E363826C7B180CC50BCF787F7EBC56FCF054B28875CBFE8F995F1A9E9C1
1E0D818051EDD8B12B6342AE6E54EE15AA49D8EA34E6407D2D8D3190F0082CEC
1DA2BC6734D80422FDDF9204383FBB76ED62B48D317C592B7916A3E2490E974D
058D16BAD90652E52A92703AAAF6E092D421C4AF487D8DD42E351F58DB4F7FFA
D3AC8B56464DF8221D93C4E78B6B0836874F206C700A4C6839EA2BAC5CC1329E
71C6191B366C80E4FBDEF7BEC72882641F0822A96334A2A1545386BBDF5C1F7A
39F02B522CEE206D8504FA9B7E24C93FA60B8B7ECBE999E9B3CE3EFB6B5FFB0A
6C82F56B576DDDBCB5E6FB65DB9D6E37FB7CBFBFB7AFDB6E160B7E0B5A46B753
759DE1A4D063178AAE33E278AB63A71447CDA8957A7E10E91C591D4FB6ECA0D1
0AE3CE8ABEA5E3D39333AA13832E6B3DD3EDF68B5E75CC9D0FDC37AD424B5723
AB25E57E70F9C9349C4A83B4E8CFD4DBABAABD6163B6AA3CDB85A859F2C4E8CE
A96E1829ABA5421AB0444CB6326E0FF9544EFBBAD957B6E774C27646D4BA71B2
6FE9E4CE200E71BDE77890049552E5A57FF1D29FFF3F3F332BF5B8718BE4EAC0
9AFFF9CF7F4E78706EA2F84B08B5CB7C161C7962564A5F52D19EB9E60B491A72
6A28BBFFF00FFF70DB6DB7A579D132555B91E80426A00C90247EF31C2D828448
B2C78B893F843F605E250F9AA958883CB0F860FC8D03490295081B8BB0B00A38
2A38BAC4D910247D21653C836780FA14B33F31D055AB5661A54C8400BC5EF7BA
D73DF5D4539007F34C219AEA1015509D88BB72E49147FEF18F7F14362D8A3963
EE5C38FC8A12487C4ADCB679D0A4B2076256E3E998149541EA6266772D81E8E1
952209286F0450DE14FB389318097434DE847D85300C4A4A2E08BBF770E24CE0
91347C9005D393B168F8508BBD52DFED37DFB8E599277A8A6EB9B7DADCBDFBCE
3BEF847A391D1606FA7BBF74DBCDAD6643F709F78B8E57C2BF519C547CEFE73F
7DB0003A286065F411E946CAD666BBEDD99EB6E6955B2D0E743AFA20056AD742
9C5A5A6CF3CC488BB4FF2D4920CA2FFE3DF7DC736179D00263D8893F17E03C27
6FCA41C78EDC7F9EB3CEDC175A72AC52B6F34672FC8A499F989D69AE9154A45B
D1E27E5EAADBE002D0CA25C75FE506B4CA9D54D4002872B0EF38725C46217B2B
EF2D4AF1AFF6CCCB10CD46FCC2F8D511471C8183CDBC09D0C96B5FFB5A28679C
024F35437A926D223822745D5287BBEAAAAB2EB9F4637A0C693A3234D89C998E
837804C6CAF474D9F18607FBB516D9ED0E56CA50B1A1F762D596699BA05054CE
72B778B05FEDB3EC76DA9DC96C0EDBD5ECA2E4165C65D58399B22E02481DBFDC
F19C461CED6A8F0F0EAD7C6A7C47CB5543D5DAD4F4F4AA721F94D286A79E9D9E
AAF655204BEC465C54F188D76BFB5EDCDFF3FB6DCF4FA471AA9CAE8AA1BEA419
A7CFFEA75804E7AB9EAEEADA9AA2ED6E982580145C2B493166CF75A224C46175
3CA8FC9A2A0E3AF4C0679FDA2419CF2C845C5C12882B924E6F2AE902332CE9FC
2AD323E99D66CA86B4A7C59DCF3EFB6C817CDFFB5CB0BF211D35645CDC3E5144
589328D839740F328B44D2FA1792041213C21BE1C0142D3422211EB66CD96266
1F8159E970AFB85C458F868273DE79E75D74D145983F519A551EA4A52312B766
F98C32B2CEE548F025DD3EA5F520531B59CA44BAA497935BC2BDA1DB5DE0CC54
0E7C4DE216B6C2440B95D718639C1C8F1C334C010AE09BDFFC6658F1F8441A86
B0064D72FC65D524D19EDC4152924C17334FA61C4E5E09B3802E14A260E27A33
C8A98C8C31FE29D99392DD289B7DCC31C7604B58F2ADF3730ABD49D879D31B5E
1B771ACB8607962E5FF1FB3FFCA9D5EE3C335A8F3ACDDB6EDA30D053C1902667
EAAE066689B2EE20899786567666FCA255EF40AEABD8D3A7A8B7A73C35AE73B1
7DD70B2318C85A48EC9353A719BAF2C73FFE71D8A7623CCE03D6FFFF2309084A
C19A32AEAA996425653BB28F4CC7C23292F1B1FE40B232CC67518F26BF631B4B
5C7CD24927FDF8C73FC66A635F7062299E09FE432EFC8B5FFC0277C66F59D182
FBD03FB04844D16C6E418EC02998FE59211B5605731DE841222296FC56BA4C2B
034F65EF733E2FF4C7B83A551F9601D95973666540DB525DA529A0F2D26EADF3
4D4D6229DAED667DBADE53F6BBAD6ED9757BFDD26CB35EC8C47F5F4F6DF7C464
D92F544AFEFA75FB0F876EA11976EAB33DAD6075689583B0913612B782214649
3C9B34FADC9EC1FE8176BDA1D3526D6722C4B3ED2DC1C4506578B2554F7B4ACF
CE4C0D5A6A4975A0E214B64DEF4AFCD26EA8F3C5420C15AB1D0D2B7F49AD2FB1
AD19473D36393AA16303766025993F4877E081D20FAA765295B5D0290669ECF9
6EEAD841A73597434AFA8244483229EBCD79415DDF899A310372D22B7BF19A5E
B651E23592F662672D9204D80AF4433BE0B8E38EFBC637BE41E808A27571D325
EF60EF17B58D792C0264296AEBBA75EBC0B86EBCF1466679AACCDD42A78899A1
B3D0CB3C71E298C1F431C88BB317398F34970587A41A3A07582AF54750767029
DE5306523D04B37BDFFBDEC79635201430AC77BFFBDDD75D771D9E87BBDC7FFF
FD781E212BD800192360C71B86015899292C92D469265DA85C21928C080A18F1
AA4B10469CA72209F009BD757C84246F9988F6CA50D95416BEC7DDF85B928809
D36F5A1292BA6A860AE4646222F856007C4C8962E5FD4599DFC92825B363CDFA
43BA17711F70B737BEF18D947084B5996D75ED34E9B49BC71F7FFC969D636B0F
79E103BFF86D64796E307BF8C107B42676149DB4E85ADD08D370EEFEFE0F8276
CB75ACBEAA06890B53BB6B9742BBE89521DDB7779A2A6A7B5BFE6BB34A835225
6AB7A65C5F45CD0551A605C907CB78F4D14783997EF4A31FFD5FB4097801FD18
14FC5C4912A81891E0C8AF79CD6BBEFFFDEF538182B07FECB1C744B9937E796A
CF88B144E6494BD84DB67F611C82D62D9D75A40D6927272511B41E16D2B9F02D
E316A4403108045EDBCC6BA2614DC9C12A01163C338E2D991B669A90F9739ADD
A4349090CC9DCB45F80A5CF9E10F7FF8F6DB6FC72CF015CBAAC57F4572322581
7EEEE0C0D4E4E4EA35AB766DDF9184F16AA884304FA7663B2AEEF1FD430F3DF4
A8A35E78F7DD774F4FCD8499436699B2FB940B3B73852A1C69F50CD96E27ED36
2D1B722F5249236DF597072009340349929DB3D32D9538BDB56D33E3D54ACF68
7312DB3C1DB4A34E77FDD092BE4235B6D59FB63DD72D7BB34117EA08A4D67EB5
E19AE5B5A3E0F9767DA78A46B184B8B94A2CC74AED8CEA34D4296D022B4A2D6D
DB160A966BD16A2CD899F7DF2B631271D4216C8246DAD62E51FC283123C69404
8BECAFB917729009FF8505BFFEFAEB994CC1A441F6EB96FC519C771C643A1816
920474C213F2994E481663E2B674E5D3823175509C44BA3DC594591C79D0CA91
FF1925121737D57AE625823C44CBC731D49280B392F45233DF80BCC044D493E5
93D6862474492D17173CA8F3DA6BAF65B45A6556B9645BD2052F1133E1EC7447
C8111567A8000A095BB18C4A194A4BA9DB16912678443CBA2CF292E45C334989
1E58C90061DA3E9F45AE6DD6F493D750E0915D7EF0831FBCE5965BE8D6A7B812
939CFDA3059B9A252424CA3DFAC6E521A0638F3D1692981D13C1E58B956A3788
A6DBF1317FF3D6FFFBA7CDDB6613BBD23FD27CFAC883F66B8E6F7FE277BF59BD
6CE8B1279FF28B65B07E2FD2CEA559E8656EC9EE199E08FD838E7ED57833EA6D
AEB055A5C71F99199FE9EF8195B3F1BE1FDF9AB4B7E0082FC4A905678DD09B8B
EB38FF5F258198C0B4E7187092827B3BEF01C9C36056115A3902040339C22ED5
9E59A434DDC06419BE12533ACD3150F12F74AE871F7E18C780C91BA43A025AC8
762F52E963EE29B51948AC9FFEF4A726E424EB4E79CEA94EB17B9DCA33C455D6
3F0386ACDCCDC97BD4CCAB689107D1BD2B2D10B83552100A223CFFFCF3B14DAC
AB2056AEE027CAA1D60CA89021E9EB2636AA5C709D488B2F9D3CDAD3DF68CE42
ED7CD1A107FFFE89A7467A6BB01BDA61B2D2F6FA13D74BA355CA3B4C5587B5EB
A6DB566EA8749667470525AF5228FA53F549306CD7E99D4983C9A413D9D66CD2
EC29F78DB5EB5E4FA5CF2F8EEFDE7DE8B235C79FF4F7377EFD5F9F9B9E984954
4FC971DBF6414B57D8ED70B6DDDC184C371C6F67AC1B68C556A213479D39BF19
2480AB5343210B7CF07B6C6A9CE4ACC376520D8B5DB255E458CA7355100659AF
330F868457B545C9A39E416EBB4896301B6D515B35718559414210727134C579
1755AAB012975A3CA26B12B6A40949A625DD06FC507AB80A4482CA3D280B8D9F
E3E448CC0C1D13EA26CD7B695035C1A4E6E2044CD3A434A37B917A1399B594CB
4B492D6991EB25EAB604E258FB40C7024B30985E4D3A3EF5D453BFF6B5AF9127
5201E451112D9E968479DAB9D6C2384CC40516A9924770AAB806179C73CE39D7
5C730DC3861203E03299BA1BB99519AB4C73683C95E3E798E162F1DE62D1581B
C57DA2A23707F49A2645B6BC48D3C1919189B1DDD5BE3EDF724E38E1842F7CE1
0B92ECF1E31FFF18CBCB434B89F59DEF7C87BBA225A5DB5B499A8E15FFE7D3BB
FA0FFFCB7AE88CF8C1A7CF7F4FAF3D679F523781CD818742EE4A310B419219D5
D715864B0E5D32F042152E1D1C5836353DAAD2829BAEF29D35DFFFB7C374FD66
D255294E85AD12DB776B8E55ECA6DA43427F17B1A3E7D2EDEB730E0DC7D7874D
E77FC35AF774FD44B735830F4199BA0579763C755C3A985B4C0A4801D4CDD8B4
76CABFFDED6F87E299579944BEEEAC1EE89E8269862A51AD31721BC450F7BC88
E8437D7DB8E12C2C367D0C40DC73E9F35A5D0AA25A4FB53EDB2815E7CA4484BA
044AC44CA4111142671103BFB2CB26BE56BA67C5D98855FCC475B79CF6910F26
AAAEBD106D2C421163FEC4BF5C74DD75574F4F778A255DBD147494EBF8110EAC
C2D4342D6B5656A8A864D68AD36A6AC565ED2CE6C9975CB54590C52443547A70
C2B485457EF3CD37136AC9CAEB89181558A86F41560B46887FDD01C6B3D592C1
C1154B963DFFD493E5D4E9F78BF556BD88F318693133D3EC82FBE26855526B24
75D6A8C2FE56697FA732E8149E0D2652179ABBAA075DC7AFCC765BBDD57EAD1B
BBE1F3ADF19523AB76ECDEBEA6B24CB5A376D28E9433E1059167B7DCB4AE5179
022FB27A55A1E6F94BFA964C479DED416347B73D1107ED34EB2C695927BFFB9D
5FFEF2977546BF4E906BF8061693B8D4E6B63E3B3202D8C7AFA48F85A92B5022
2E8EE6EDE47DC1F8A7407D60D94F3FFDF40D1B36B00246E57EEFCB2FBFFC939F
FC24358C3447225844D2C86068ED31AA6FF6D3DEE7C562384A48695E76A9A089
087A18C31BD75D771D4C197C4234B9EDDBB753CCFCE55FFEE54F7EF21391403A
2E6866C80AB60FF35BC4CFC3BC343C839DB62C03AD13237BE10B5FF8BBDFFD8E
F4C70EE3CC5527ED9A0973BC7EDDBA7584B424E94BDB1DC9EF16D2A7438D920D
74CF888DF03B4177C1827EE8431FFACC673E23CD69B9463CE4B0454E3BEDB48B
2FBED844584B0D642EEE1FC16A2467863434AF138865BCA4E2833607FE6423CF
D9E919E8477361004BBDE39DEFBCFFC10777EFDC09D68617A6C041C2A8BAE38E
3BF068E2BBE10EBC0FB303F57EFBB5411FD4DD5A79E84B46D580552C0D7B712D
1863A62F453D56861D02A6A6A6F0067B479C67C9C2C47DC6D2AD456F457DCA9B
9A9EE81FD4F2727ADC7EF8979BFA8B6BC140BEF4956BD2689BB29BA58A0E3287
11D4349D147BF2C927834D1F79E491FFF11FFF314721B513CFB8E0DCD7BFE115
F546338CBB434303382BB3339AC24696F4A8588D8D4DFA5EA9522E3D70FF2F6F
BE6E83DFFD01F118A48A3857B709E093BEE845BAB9232859B3A444150B3E737F
99B3418834CFF51CDFC364BC4281D5CE98B39351DADAB5AB376E7C5AB30D2733
3BB213E115DCB03B27BDD6AF5FCFFA156A0398459CBFE6950A722B412A84A29A
D7A56E9E2488ED5895F63FE3A3371DF5B2578C0CF6E2B93BC676F6ADF0EC8921
50965F54D3D3F566B3BD62F948ABA91EFAF9235FBCF684A0B5C577A18E0C4ECE
3495D5191CE8698C37BA3AE34509CA379F482FE5E2EC43EA6CF4CA67953DA6C3
8D65538B2045CE9304E02BBDE5E2606FFFF4CE9D3DCA1D2896EA9DBAE5179B61
4727E77475C74B68A155C86F65C12658A3CAABEDE28053DCAD1ADD286CA46D57
152328EAE5D2646BA6A57078ADFDF63FF0A5AF7EF5430FFDDFB12D3B5B71BDA8
2AD5DEFED170AA9344ED386C653AA29F3A25C7837A5428F54E87ED5D41732289
1B76DA853590A8388D0F7FC10B1EFDC3A32000AC3E5404C7D0BEC18BB1BF74C7
E11310181601E4C17824E9DFC95BFB8ABB424A344C9D60A17566DC454A31F862
232CA659B38D0AEE8C0FD99095FE030C00ACE6AAABAE327355E6DD1F3FC71B41
FC34BDA37BBF04509D288778CFE4258C84D3B78C16230261249E798C070FE2D2
916B8976AE7273644E7C92E7B20989CAB14F257B896C11974A205B7822CD6D3C
F28D6F7CE37DF7DDC7C6E2D80C8685A9A1D0C945F39F0E1FFC841AA2A00BE06E
1FF9C84720B8F8437EA5B21E8D780FBBFB99679EA145A232AB9F92095FDD74D3
4D679C71C6DAB56B59AC4B99C131D32B4512916CF4BD5B7D928F8BF347CA89E9
3813A3615E4538D35488444D2B47BA6EA9CCAFAAB2144D2D57C2B9D090E3B971
1889D3C3CEFB7DE2CFD7BFFEF5071D74109682309314ECBAB54E5F4F4975776F
DBEC0FAC78E0918DCD4EF493BBBF164F3EEF0FAFC57D98ED8AE948380B7BB479
F36656BBD060A2544ED4EC8E6D8D4A69288A5B41BCFB9BDFFAB26D553C7B70DB
D4F3939313933B211EFAA676CFF6D696CED63B3DA5C156B4190390AC6AAE1E6E
7BFF0F7F75F89187D67A3257AD02338AEBDD7AC5AF242AD1ED0EE3B4E094609A
A789DBEDA8877FFDFBD7BCEE283B6F374455970A44B95C6CB5F027B42D9044A0
1B257A5A7DB355D6D125E3E82B96AF60BB1BFC697B732C8066C1D0F030ABCFDE
F18E7FBCFDF6DB313CECC273CF61E2DAE9049BC02FFCB947B930472E91EC3BB5
162B4780905270A9ED5AC42678C5EB5EFDD18FDD74CCAB0ED591F899B402698F
77712BAD9583B055F032431E3A7B987A6E09B3F9E1AF77BDE5B5073871435B31
56C1AB5A51378803776050279231B1826945922EB51007313B3C9BA96E56066F
B965CB16DE61F1CA234BC75F997FA2D224C59F054B558B25A7DDEE758B038562
A3D50C5DAB95049EE74601E6A13C6891A9EA55D6B0F2965985656EA9C7F1DB81
8E430C8F0C8E4F4ED45BB3AE57C06DFB0607C666A676B76707A07EEE1A1DEC19
484076114C2315C41AD930628286E516BCA2E568D37C1C041A76A6D3B09EF593
8C1C5881090C415A87057DDBCCDB93B18524EF09AAB2EC29EC143803F3DDB183
D0CD3FF1894FB03A4A3002541EF8110C63138F611FEB633405E34A828DE01158
5E69A8C5E826135B98BC4BCC479515BB388BF663373D9966D9E342D7BFFBDDEF
7EF8E1879F78E209BAFEE735D7A4EE6FFA69D8765E9C42F4498ACF93B1008E90
182D9416DA26300F00260C8AA4EF051FC2F6FCB77FFB37723D3BEB68CF90AC14
C2B07A859939FC93F57864E2581DC1A4A49A46A72A149937BDE94D5FFFFAD7D3
BC4D0D2FC0FBBDB7479A75D0BF4C5D9B09EF14771254A0BE4F50339620116680
3F915C265941D3ECA2B39515C826E7A2E7CE317A99C9EAE3A1A79C72CA77BFFB
5DF610B6F36E913D455DA6A15DB1DD8E9B793C5CC70DE3089F80979572A86D5C
5AC97ACC4268FCF55FFF35F38E985B49E98DCB26773EBF76D5F256A85A6961F7
D878296DF717E29D6D9D728A9DA2D38C2D16F05B50E4A38F3EAA327D075366AD
AC46D4687961D72997FA9AADC95235FAC31FFFB3E095671ADDF290FBAE77BFF3
2B77DCE15ACECC4CDD4A0A8E5DD41140BB6EA65588C9F8C14F3EF8F297BFB46F
B0363B3B6381E127984D50EDA969469942119EA9D57A93005A45A9E879F7DCF3
C02D97BD81F92DA2853116CD345F7173D3C8C55358AC8BC507791C7DF4D1A07E
E8165A725BCACD103E689E6A04CD011DF05CB77EFDB3596D9726C52C2D2D8E74
3A94EFFDB91BC4CB5FFEF25FFFFAD7B8E0D24B2FBDFAEAABE779DE45B4B3D25B
507F5981BC50A7FB245E7BE9E5B71FF8F297DBBDA103D28BDC46D0290D152A33
3570BC249D4B0B0E833489AD42A174FF8FBEFFA5CF7DB81C6C77BA69236C278E
3AFA652FDEF2ECC4E8E8732A4FBD1356B5481F5DF106883A423D0C07168BF3E2
17BFF891471E214682CA8B8616910419195B76E6D1D399668E5B4B55CD29D46C
4DD85D2BE9DA59B573D697D2556929B12B1A12D4EEB7BC3ECFAF388537BEE495
CF3FB769E5F2A53FFFCD4F068A7DD39D299DBBA692D2C8D28DBBB7459E5B0FA3
A13ECD1FEBA10EA73A4197250565586E7E19E4D656294C844D9D7690C4186BE0
D8D09522CBE9264980AD4C9372290387C882ED9D602E7048154A626CCAE8FC0E
B2F9DDEF7E278C95B253FAB9923BB3AD589AC106EF737D7837935F83B72E5FBE
9C19ED2033D6EEF1C0D24061FE3DB79278628BA0468B9B4174381C7908F26772
62DEFBFA79396984B4A3F356C49B597D22D0938C1841CF60F68D48C77928C2E4
7296D47672096EB9E51628DAE47DB8E8739FFBDCB9E79E4B6F8CCA95E8BD6356
F3FA47E2D9EC34C0C22EFC4B7A6576A6382EC8D3194C666A3FF1EE191FC664F0
433038C9E827D3C7C67CE8431F82F017BA07EFC0B7EC0484334CC984615F7FFD
F5471D7514DE0B3CC87EFBED8715A723484C3FEE199EC539BEE005DA6B616E83
197023B3E06BFDFAF560BE12B4E08A6339FCACE846BBE9DBADA2AF9954A952C6
2718E796AC22514711DAEDF5071CF0FCF3CF875D0DC776CC31C730687FEFBDF7
CE39792DEFB5AF7DF5433FFBC9E0D0D0B2556B87FAFBA6C7769C7DC66971A1C6
8C05ED31CFD2DD4082EF7DEF7B390C0999B26E301B6DA4693EC5278562090659
13EF33FA59D6DF57ED0433ADD6388E706FBF46A6989E9973F4AF58B1824D0EC4
C87DD3593F01AF8FA344D985BEBEC1208CBBDD90FB95199BADA1C1FEC9C9B1B0
DB5CBE62D9E38FFFE93FBE7E120D4D89C69B089AA2DD9818A29207496D650E00
AED5F432F3B9050336CB50803028654C4119ED9DC9C1755F56CB667C8C59130C
F19D7EFAE9B0201792042A331D3812C9F05BC826F897AFDFF8C4C692EDBEA439
E3EFBF74FDAECDE3ABD70E3EBFEB51E5F9D55A250CBB4CCE2B148ACD46ABD309
FA4BCFDC7EC5FB5C6BDC8953DBF1022B046F1DE85BD96C8E89F68A7F3154AA2C
FFAD2E291A18DF33AF81454FA6EF7871EF507681EE4FE0A8D4CD3A0DF4A556C5
72FD587FD582A5E466715AFADCB03ECA2A29BBA4AC22FEB3B515774CDF7EA363
3B0E59BBFE0F9B1F5EEB2FEF749B591267F44CD228D57A4AC3839B77EC6877BA
D8ECC8B69B49D2A36580532D148B8552EA58F5389A0CDB8DA8BB5D170F684089
D072B0A32DC852706D4B41EDAA556BF546DD76B4FFA4D96E09ABA1DA4AF0AEDD
BB77330B8B704C02D128C54071DE769B9A13BDF9F38A9CE6495CE9E1C8B515EC
746C2B38CF97BFFC65B6FF6581D8BBDEF52E7C42042162496137F1434914DEFB
FEE285168CA345F68B412CEE290B1158CA2E7391DC486652305F918A35FE64A3
111E378C9679D28C4C58590126FDD55A120879D146E66901C7C4EF99C643C923
4A37BD6FDC0C7C051B0D8776EDDAB538F3EC9D42F7BD80DE611090D5994738E1
0E415DA5C79CE846B8153F67E19532BC342AC7689446C48216473307CC17D360
2E145F9238C10A207AA8E9FEC2CDA14D7FFBDBDFE6229A28312A537E593778EC
B1C7FEE8473FD276EBF838ED44F10E9912584AAEB8BBD46AB5C3C7B2C1BC7AFB
74E3D942D1A70601C5B6502A05D05C2C6BBF75EB9E7BE69952B50A1AFAD297BE
34D8DB4788706A2BECD7A855548DF1952C5DBD7ACDAA15055B9DF8B6E3699092
CD61E46C9072F9E597937F49171476AF6466A4563A82D6EA35BDCD461B1A4CB3
AE2B0CC0A460A6C7091407D5A82BCFB5962D5DB365CBA8C668B18A51BA476B01
2B6FA212BFE8EDAF3CE6352B96EFBF6B74AAD588FBFA87F0310BC221E1A228E8
769A38CB4383B5B1F16D0F7DF98B6AF25794DC9814DDD9B96A632B230582FC57
4777E340541B5033F694FB227E1E0DD43E369675CF4D97AF58B163DBCE430F3B
ECB9E79E6BB75AD55AAD91B151186BB695D22D468840D2B0B4A990D328DE2182
D74AC9A1345F5B4812E838811A78FB2537CC287BD774BDD4B77C26EAA495706D
7744F7950B3B94E8DA90551AAFF89ECB4E53D68E5A3168B7C26ACFE04C67A2EC
175BF5D871D30D1B369C79E699B8F30D37DC70D6596789F9BB4F8E601965952C
5B63BC91879C674D7AE02C8246E0DA4E94CCB9437596A5956567A66A895BA828
D789828253A8C7DDB4A0291C62C3819CB0EC92651753DBD5EC28EB0D655B6B62
AFD72DAD5FBEA23D391DB7DB9EAB66BA501AD2319D569482D03B2AF5955E0A28
FBAD30EC2FFA05D8C885220EF66CD89DE83627C3B0994104793A47C88913BB11
452D0D6D6DC58E0599A16552BB0521A10DFDD61C589964FD1D72C821071C70C0
FDF7DF8FE95375907A1113A2D85C407AE4E97D5D284E4046C9AC4895F915F839
C983CDA8ADBC8784327214797EF993FF365CCC177DB92AB3E1168A2B702EBC39
7505B0BE75EBD6C1FAA15D48FE6CA668337AC1B03618269D0DF8E4B8E38EBBE7
9E7BF020CA48723C2CDD9C2420C7944C29A643F1917C3C2D326E80245F8B50A5
BF92D289AE7F225508CE333EA7B4A03773EBD6ADFCA1A03FCAF648E5BDCA545A
13F7952A0FBB806200F3CAD6787AE90B63AAAC1853A66A207B26EE17715E4BE1
ABCAD1BBE4E7BCD53CBAE1A2B34E8A2E7B5021588FF6CD25C99AB56BFFE66FFE
069A828685C37A66BE2CB29E8E110F3CE0E08331A9348C285138000966B89E7F
F80B8F2A577BE2A0FD0F27BC09C2A054EBED264ED0AA3381EA939FFC245BFE62
0C64B2E245E57291946D1BC6414359114C8BA9C946AC95BE6468B8DFB5C3D1D1
B175FBAF7B7EEB36C6915821099D8DA395C4212ED12B5F72C4134F3CD56842D8
5454EA687F97AB196FE657813AEFF85EA1D999B555E2D820717BAA35A7776046
AC7A67E628084719B116CE5A5FE9A82037D86DD6FE44919D593CF4A1835DEA62
B76673F59A35A0A234B148755A42479197D180DEFDD65C762C1E01C3F1C61B6F
A4D663E52DE0E7458C459F2259EEBFFFFE20B9279F7C52424AF324C150B23E2D
F6ED6E6F5FBEDA6B8C6D8BDA6ECD5E1AA4F174BA0DF61FE51683757A5C71A40A
CBD27067A9A03A5DF05B4F6760266AEDD08ACD63DBF1201C1306395970EE2CDC
EB4D62833266AC0C2D66522FE999D68C69FECF7B653E9C749F92A0D7F6DD40BB
EFC6DAB356C1E986BA7858B305CBA9584E41D9569C841A152E89ACB496A4E5CC
4A5851EC5FD2DBB762C992DDE363BB77EFF27B8BBBEA539341BBE8579CC4EE84
6D1CBB725F5FAA411093669A40704E479D7A9CB433DDBFE63878BA955A516C35
55DC50294E4868A5652FC3258B42D8043A15258E489334E8A50C18DC802DF978
5459BD4F87AD74941346C4409DCA82430BD90426E4A7CABD20D4FCE8F3100C4D
42AB819FD0597DF1C5177FE31BDFD8B87123B81358D622F50A4CCB662E354672
C4114740FBBCF6DA6B17971C3CA10C79EA1CB69111CCDD8C6F71DF194C66BA30
B36C449762753DF3F259B3859FC0D6995341545EBE287167C6316EBBED369842
242CB662E7809C3D7BBB2BA33397183BA6B388929C91E173CE3907E799698E8C
5943C63EF2C823662761DE415AD0E030638D20EAC509235916F4F93032C14C70
72433A46D8F78A524D1C26B41F05599EA28EC906F3F22EE805A2F19E18FDA464
7B287868AEE2B724B8B9D4D25673190CB11D3BDCAC3566B33EEB168B51BBE365
2E9DA8DBED1F1AD24CBCDD864C4F8210561B3340B062C4B23EEAA8A37C5B27DF
BDF33DFFECA49115347AABA5A96618DB7ED1F73EF0810FB0938F32A2FDE234C0
2790433FFCE10F89EF8F33D537509A9E1987DDDC696BFA48A1358669D5EF6BB6
9B955225843A1F767A7AAA9D4E4BFB6793B99D355BC9EB74632BADD79B904FFA
B68D19CB49FCA2EA30CA9368A4BB24C07A163502606BAE3BB4D4344185D9BC79
3389B55CAE0A8C28CFDBDC194E3568FE40D60FA7D36E6728AA49A95C86CA5FC8
EC74BDDA71FC837BEE79F39BDE846F4786978EEEDAA5726F98B650751ABAEDD8
73397662474A7C6B9F59A4526AC02279361E21AAEE3E2581B60A8AAAD0B3A231
B5DD8E941DAAFE5A79B2D92AF6D69A382389A2D592D5C7668039815B2D47B006
7516A95BB20A41D549E27A1867874E7CDC6440F35AE3ED932308E54B561E2358
D2C4429415B5C08D38136C1B56219304969DA8DE2419702B85485BFFBB5A9338
03B095AA5E010B54B4DDAAA59378B0B2DD386AEA14B3A40AC96BB9852072D2EE
CAE288EF6818E4DD13E36934EB94CA4DADA5BAC5D4A914CAB6EF35BA41ACE2E9
B03DDA698E2B1D1C8E6CE5941CB7E0F775D334D412066BD9CD7A99CD5A4957C5
4E365DCFF574F81D62200BC5911D91F8697B812A4E3BED34B060ACC935D75C73
E185179A15489209A2F288B1C0182F82356BB689355792B401E94B1E62C2568A
D39FC8698B48E2391A3292D49904BFD0F5CC7CC11B7260B229F0B7934F3EF9E1
871F7EF6D967E9E8679A8F447C4D5595F157B2CD7FFCC77FBCEBAEBBCCC63874
6A699BC05488AC3D51B005C75F10E578A8A459077375589E43CF068F0DB74ABA
4E4A2E87D9B9899CDD8C60B06DBACA1579DA1FB7DC720B181FA99C45CE26CEA8
321AB59B6E6813064E9618B21AA362BDB89DB7FAE4C6300F979EC74D9B3651A7
56466A79D62B4A37A7D5ED30C048B31C475FA33D6B9F065814481643D26ECD82
9584E1D09225F52CBC8905B5D2AC9CC4CAFC1B59A641316B95BE6BFBF6652B57
469D2ECC1A89E0E3F3030F3C101379FBDBDF4E8C33AA211C2D41CC058D43C097
B85F9CB593372F65F891FB2B9DD029B6E9DFE7C445CDE4D1A2E12CFC05FB4E73
4DCAC454AED19B68592AF7ABB2938664619ABFCA7FEB9AEA9280B555AB650E8C
A9413CA81AF2B6D36D77DA585E2A285ACBCE5EB1D1DF42192D99EC1C915FDC29
C9BEFABFCB1B5396AB3C7C453590BA08790A9106AC1CC3D2D9ABEBA4A91BB189
057D4DA437EE1A993EE593AA7AAA1D62AC7694662243EDB766FF57BEE6D55FFD
EA9DAEB263158DF40D6341742F5FCD10FD56148023970A7E27EEC645BB1B7554
37F66C8DC7C359F329CC14A0B3F1FCF3CF873E77C619675C75D555649A73B59F
19F5BA9E5370A18874C1735DDB2984511F747F5DD49B3A7EB165C5139D766F01
8A3D147FA710A47E92B50F89E3C9A0D951B157761BADEE48B11474DA5517BF0E
4AC572FF60DF92E2C0F6ED5B4B457BC592A1CDCF6E1AA8F53BA9B7737AE756E5
05563A9942B5CF16394C868A15D819975F70E1A5D75EDDF0DCB146F3E28F5D72
F9959F887DB79D066977AE3B61070499614AECB336D8DC4711AB0249201C8CFC
EAA28B2E6255364350AF7BDDEB1E7CF0416E1938386162551E4032F16CD4C228
D6B454E81217173A332328A7A5FA55CE9495C3A74BD7EE452401AD3D518EF120
BA3A85EF498B2A0AA18F7DEC635FFEF29761348B38143DDE6CC2CA3F5FFFFAD7
FFEC673FC3659FF9CC672CA96C94F3C3C32399A02A0BC9424B850906CDCEF41B
90A6416A37DF7C331DF4025B4D664A6604A6CF94470EFD924B2EF9F4A73FCDAC
58628149DE8EB478141DED9BDFFC26A41FFD3F0CE0E06EDBB66DA3334A041ACB
8669C42579E7031E72A940863CBCF3CE3B9904C6932C1E556AF7926F4A9F86F4
06C2230E3BECB0471EF9BD5604C239283A70FF817E5D6E8E73B5748906F89E2B
8CD275F249B956EBE2E760C7C512232B507ABEF8C52FFED33BDF59ADD5984B0A
6D376B0B1813240076256527235456067B823FEFBDF75EDC9C2820AC3BC7EBD2
4B2FC5F683083018EC0B7581E1E16150B37076EE111D68E2585346AE0519BA09
7229DF4AA2FA65975D063E42A81C88281000AD3DFC2959D5582BDC5C2CE23599
F7C6CCC33363B3B0B6A964503533D2E7137174505D605544C52F76BA7F4EA781
F4D5DC3FE85A7B964A4AC58DE8FB6273ECF9F4F992404EA9CACC6733C18C1A1F
D7C7CAB0284836A6BA9DE48D27D31C1A8C5635368E4172C951C6F93CF7DC73F1
09A1A4C3EE5C025E94CCE102411AAC3FE08067766CD1A93D71A2D852C252BD4B
97CCEC1EAD94FB8E7DDDEB7F74DF3D83C3C35BB6EBA4EAFEBEFEFAD454946F34
8184711640E7DFFAD6B7F05090074E8A09C30EDD0B9F8F2CD59E4C185E2A0BD6
82E1153D0D4775E8F2957E90EC18D77D0522C782C900330B6319B0BD3E18A3CA
F11DB71D068D24049B1C8D1A4B7AFB76CC4CF766A83F054B1FE75DD3538376D1
B3AD206AF76AB32EF51C7F26EEF8CADBA96B17BD46D0B13DA86C961B267D8552
1A84B56A6D57D0D91434BADAD55C6B773BAD288C2C8D3204834A2F3819719AC8
46EC531290E5D10349FB989C8DD182A1CC0A9776AD048A205CA6C0388B4E831F
529735EBB616C1A6357B4508E8246BB3440D22650AD2B5C818B2BB45EECFAA2C
C29131942B703814066C6446BE8D6BD83C43E5A08AA6DF9BEA027D532A4B789D
534A947AE94B5F6AC96A52AB4AF3FEBD2682ABCAB12924DB9A163D4B6DC5A38A
F7601C1FF9C847642D68CD71ADD93D0677A3678D48763AE13DF36E73E9C91399
95A50CFF97E99EC22E9E7DF6D990EDC49000B9E387DC5191BA6906A306062A45
7799D6596525B3083C8A0D712B1333529AF75A79711C6E9BADEFB3995B094672
F679A7ED3A2E55D4EC1C657A96E3A6AE3ED960B1B8149F13C3A358F0C1BC72DE
91CE64CEF71ED8466363B81DD3619972801112BB5B4A4EBEF0852F6071D882ED
37BFF90D77870616C606FE8B93FFDC73CFB1028522F3A4934E620A8100CF1255
9114409B8C9E44493950B9FE2EE1475EC96FF1A1A45451E4ABCCE7031B8E92C3
54AB0935384F654EFFDC4C71AE84858EB81FFDE847279E78626673A4ECE224A9
D0A0226DC70421138835AA7BE68DF2B3C52CE425EE6276A47B76929083BACF03
66EA925831989EEF7AD7BB5819C4846B2EAF207AD288C40859D344FE6E9A1D72
A840452CE93CE8A083DEF39EF75C7EF9E5D28D44DA206B902EA50B740BE54AA3
53B7A14EFB85C6D46C5F4F6D7AB63ED0579B99AA57CB3A89A3E0FB279C74E25D
77FFFBF8AE891B6FB8FEECB3CE05731A1E1A6E353BCD7673A06F686C7AB7883D
CEE898638EF9E52F7F29270863C681E218F0EFE9A79F7EEB6DB7EA2D28F9B6B2
960D0F8D6EDF01B375D0736B96E7B403CF767B960CFD69E7D66AC12B174BE582
E784493ADBF2D2A4CFAB3A961D401BB2ADDD51735645AE65C330C193C0BDFDD4
1AE8EF57A9DD9A99EEB1DCBE923FD69C29E8307EA9099152CCBA8CB43BDAB281
508955AF5B8CDBDD31158F3BE9B624687A59F0C9B2D3083A01D8DC9C06E0B859
B4320A4D0CD7BDF7514CFCD86855249789E743E06468CD93D713AA40B213556E
B799B01F8B44F2A9D14A46250720006BA62222F75F8420F796343494190E2468
34074C9DC9F483498B01362497A2744145A35F88DC9B66BDE429FC59A29ACE53
BCA005FFE94F7FE2B76632167579B67CE21057AD5AC54C551C12B34A9B1C997E
89238E380277E3D28389DF78E38D04D18DB3AE58663319CA491A07341768649D
79E6991B366CE021945C31563E3379865355B9B7847BCCCA52E9392ED3E11C05
9146D69D903BBC9B094597F13B6D762471CED4ACB9743D694C48283ACB5199E9
1042532274873E057ED1CBD6900122C9ACC523FA8606C197F1E7BFFFFBBF633D
F11574C665CB9631B712D63DC533AD1C2244615258402C0EA4202B2A98E546B3
89F5048F3DF698CAB5450C8CB5812C8310BA115802E11A4EDEC75465B900941F
2AB740DFFFFEF7633C96019062BE606F412659399627A5B2243552CFB072546A
EC080E1B1E87B99B05BD925D4A3163D1E78E9DF532CF6C2677FDAC1AD92F15A9
EA9A99CD7B3BA316C9E2909346BEC0D375D659677DED6B5F63550D5360E53E58
64903A842E03BCE6E34CAF6B6A74B3E00BBA05E64BAC3DEA80DAB6EBA8BE9181
ADA33B54C15661F4E98F5FF19D3BBEBAF5D967D7557A669BB335AFDC0A5BA14E
C07740E33BDAF582EF062A6D45B157AC4C4127C3F6957B9BDD261470DE905E0E
EABC245D0C180470E8A187FEE4273F21F488D4396A375746A28E9A330B063DC7
0AE321CB7FD94B5EBADF61077FE5AE6F75A2102A6E2308870A8501AF5449ED72
EAA820B2E2040ADBA493EE6ECC345434A952F0B6354B8777EE1AD388E8E5B2EA
8447ACDD7FE5D0926D9B9FAB77DBCD24DC529FE975340C101666C4B2AB96075B
B847156D9536970C3F3CFAFC6CB13099841A9A65FB68090A7214AD58B91AB4D1
6AB774A7FA2CDF699FBB694A0232779210FF24115A7903E7D5AB57838C7101F6
1AD6124F2E0F17FB64085B64D6BF84A0F6DE537941E53AF5D4536FB8E1065020
8CE63FFEF18F2296246ECAC8A5E0DC48F617EFC9012FA4B2305A09FA01CB2533
E4BCC85DA92491F5812D1C7BECB15FF9CA57A870D32A12740D933D0A683F2B96
A966595292202B4BA90002828D8F5152415646B23F2FC3497EDFFBDE07EECC6A
5B2A44983363D6CF3CF3CC6016FDA359200E25137A5BD8347DF4D21DD3378269
5C0569EEC191E4F0357380D8920C2A2C9E82D4CE9A0B9E77DE79581D8E646464
045AA778E528C029A541259AF2323A58BB762D0EFC3CDE0492D0161FAC8894AC
4D490B0B56B4E171592554A2717282B93CAD6EBBC3C14C4D4E14334707989AE6
CBD35395B2F6FE4FCECE61AC3EF1C413AC692290355D37100FF8EA820B2EE019
262950E390D6407CB1A0096B45BD80AE3086B668D8514DE0DEDF7DF7DDC71F7F
3CCD23490323B3660731EC1D4682AF60363EFAE8A394BB7434615474AA4A8121
56553BBBB23269B6AA67761323F364A6A26A48408F344A4B881A99C08D98AAD3
41071CF8FCF3CFC308B0ADB9C43E3DE024ABCBCBE1CA2909E6A54E9A92C05499
E7BD4C3C1F0A54CB68414E97A3DC90AE5833E066B61690D4149A141812568999
0BF22CC9CBB20AA534EAAA3429169C7ED72B073144C4C1BDC3CD99B161BF36D1
AD8F146A9997BCEB651E2430CF4DCD99724F6DB2D5768B95896E67DC8E43B0F0
E65C469FD9A74C1A34D959A768E26D1076FE539FFAD487CE3E2B3B2C1644EBFE
AB75A71ACC6159B9089BA0D3ACDBFA2CECFFFB2D9BFA7B6BB3B3F573CF3DEBC9
3FFCE9D15FFE266EB7D6F78E2CABF675A667740B2BCB994DBBB34ADB1A76B9B4
6B667649AD1724B8796AA25628C641868FADAC7626C9FB07FAECE6B4D555B049
D7F50CF63AFEECD4A4A7CF90FD846ACDDACE68C1AA4312B5BB8E65F98E0BA1BF
FFFE0762D8382669E6230AE339BCC8791175D97126E993A550EB676107B51951
D788807BC8218780AAD9269DC994924249910FE2375B558B6B649F9A84E44FD2
E0237484440BE8DB21F828FDFB8CC649899960252D2409F8686A634C58E22132
1B2C923F402CD1A122AE14E1D8A26F092AA894EF5041B14C1C1ED16B70D1E187
1F8EC54A73A0667A75549EB8294D83A1EF808132010E97B129B9CAC38F8C59B3
6E88321623C3D9D8BC793367888951C1C49F279E78E25D77DD4511CA800FAF91
A9529F5279334B668592DCCD947F11068CB8E20DF93BABD22978481F127ED993
E32B91460433C905B8CACE7C467FCA2AF8366B9BC155FFF66FFF967C4D43F56D
DBAA9D4599EFCFB51DB0B05221C3AF6E367A6A3DB3F52C43D471E97AAA37A0EB
CDF955BEFFFDEF536DC46831544EF98E3BEEC08AFDF4A73F15738D0427815F66
E9B08BC54B5EF292DFFEF6B72435B072C83C56E7E14489B1FCA217BD08FBC52E
2B34ADC882B97482BF64368D619A00F31370433C0E37840670E185170ABE2E37
FA7BDFFBDE9BDFFC669543B4F3866623C6BD5F9EE730AF140C8B229F3283B995
788301433F60A88381A2346F2941F385BB4F0E681EA7FFB644CBFC5332D33878
E2FF10D051F28C05D05856461CAA5453D8078AEE78169A50C7AC662F7C2B9012
7A3BD2C4CFD2B9FC381D51EA8081A1F6E4789A95717996D55BABED9E9DC59FAB
8787FF3836B65FB562379A81ED6C4EE2507358BBAE92AD4AD53DDDB5715EC611
DD77F2A1F804C46DD5D3D7DBCD0AD3C52628D8969FA4872D59EE85C9F8E478A9
BF6FEBF4784537BB9E05B7AE958AC5D42E4669AF722A61524954CD2F05BED768
7722CF9E8DC299B01BBACE78D88EB32EC220FB62B144D7710B9A878A5CC7AAA5
49214C7B53F7A0A5AB2AB6373A3ADA0ABA41126D52EDB4521B8D43F0C87AA3D1
57AD75A3D02AD8A582660BFA48528148E2745F4512A6978F1B2730F226FB366B
4E55667142C1A5A407F562C560804AD88C6C4A8003C8791721A797BDEC65BFF9
CD6FACBC539EF4471320E7796D4AA5448E063A9E8ED558E88C502C41D9C26A40
23BCE9A69B28D294815B4E8D99EC4B0AA4A5124B19F8A3E99E45C8229CC0BA2D
CBA89C32D53731284CD816C29B48D34786C518834DF2A6C4900DE46258143167
2EBAE8223035BC977D12FF97CA9D186CACCC9234C96C39E59453A0DBF2CC6339
74364510DC72CB2D1FFAD087C421208A9B4C8162405C46AC6980A6FC777FF777
3FFCE10FA5525C744F8AEE7BEEB9E7A4934EC257928F2FE57FD98BE9B3366C55
BD62764C6EAB0C686BDBE81FED6551040DFC5B2AC3C8B5FD029565BC2632A6E3
6721BE508B482DD58E38E2884B2EB98454487E072DE0B4D34EC3CDF11432DC2B
AFBC12D440B6429F3E970E5F610A7C2395AB2CA0C36574AF898754B2ADAD3C05
93AF78CF7E612CE9A0CB1E2B4F3714AEC79661606076827C69E6AE606D25B161
2EF573CF1C5CA8A2D8CC8C52A9C7C17822EDCD3D9ABFBAF1C61BCF3FFF7C81C7
32951A897E8B12A37213DEC497DDDB53344F12A4796F716676F35428C3889674
9479E529666E923900931D0BEA80E9FB12E94573B6A2D472BFE474DB07567B26
1AB32B0A5E1C859D440DF756A04F2559D7AD94D9A8B6550B52A7B7E7A999D99A
6315622B52CE64D979AAD509B3430432605D0B551FDAD094A604E816C8FBC30E
3BECF1271ECFC80F82C82B17BCE6CCACC67A8EE295E55A214A678206A631A97D
3238983DA393B3158D27A58122FA21A252AB57B9037EB51D74972C59BA73D7A8
57286D0AC63EF7D95B3FFEB9CF6EDCBA39F49D5DED399190E8E264B5B40CE526
18046D58854AAA96FA7D45D79BEEC0A08BC6938653284D45E134CC13E5F4F7F6
4FCFCECCA6A153F6227D8FEC4493D1ABF931FFBD2581CAC303EC53240908140F
38776F7FFBDB7FFEF39F3FFDF4D3FC4AD2DF5FF18A57FCEA57BF4A33DC5C7EC2
1A0596A14816C942DA0CDDC24C522224119324A9F893F308D36346137323193A
C268A1EC0B7F9FF7BAE28A2B3EFBD9CF625476DEEF1D463F243DD1C07842A557
2BE959143BB90995457E452287A2FFD8638FD1C6A5053C873B24A0C192FC97EE
8999278E486AE2D2554A1A1570F22677304305CC791758698111A5AACE30BDF8
79CC7C5E4A0B6C092E906456EAEF82C9271C4D0E3F0B4CE87A6288822BC2D1E2
57C4EA115E0FAB0AC378EAA9A73006E6C92C5BB68CE00D52BE0B11AB375265F9
85DA569DABC56339A2A8C6E4178C0DE8FC30D7657E7AEA67D202E2874950EDF6
CA356BB63DFF3C289C0AE90B5FF8C28F7EF4A3E2EBC4C5E0FB58F63FFCE10FE2
BE90380F816508D4A3D1833333968B23A94152E26BE54D50E99D60E45C2A7184
C75979970C4620409DE79D771EC430E3C32AC7E1C0E38861A28CEC8579BD79D5
9E0E196E10150E58294CD703A1552A251869940410B41C00CD44A8CF843717AD
4A421AA90100257E21D28CB8EF4D2416D38FBFB72420BBFCE0073F78DB6DB7D1
BE8CB33E910C6B3151427A7D98A066F342E252C328DD89B9DA74D9310224BDC6
B4BFC276F61B5A32BD7BC7D1BD4B3A33A3455B75A0A117D5D2C8E984712FB874
B65CBBF1DB825B0F22DF76EB05D5503198F55052EC26DD1D2AC5C6FC313F9B3C
232445A92D905D2031CC6522F664F096692A3681AE068893953DFD154B671F75
3CABE3AAF146ABE865253ED07ABA613155C39E3B903AB5D8AA396EB9580A1B9D
BE5275BA5D770AD5B124184D3A9389B6E940F41371D84892652B97762726BC66
D86FAB925518F02B4EABE36BF15048CB7E5072B7CF4CB4A36EADA77FE7ECB46B
610D2CBB58D8DA9E76FBCA9DE9D65CC20571098D04F77D4A02BA6AB1F85028A1
A47FF7BBDF15679DB41E03E5BFE73DEFB9F5D65BA9804A5D2A0102085BA23217
08E8E1861B6E108701211F16D1D9C994697B096E1B85CDAB5EF5AA071E78800C
D02C939698047D248B782F2511D9F49A9A3DEC4E3CF14468B11C21072CF12AF1
CDA83CDC8B7F314222BF51079D3B3566470B93C425819AE9AE1C0A0B2BE60061
3286CEC8E1BCC4C1C400F4971A0739784CC630D53765A41B2E247B252A689675
70C2181515378665E8C7A0B794C28904419F38383E4685AD8261C1F47C95D70C
63D161B89C7CF2C9A2C7411E60BE26E2AB084EBE37CB7C54DED998FE773C88EC
F2F5AF7F3D341189BECA26513BA0D22132E9AEBBEEE2B7F8EDDD77DF0D2EFCF8
E38FD396A4778211027AE1A16EE0E9A03033DF696F96A78CE837018524CF817E
55DC641E9C3DBD46748E49031FD1684C170D0B3ED9C98E631072174639CFFB4F
6F092B7458564D158916213B32B2191CE53DDD6E18092E83CCC653244BD89CA3
655426327A814708EA09FD99A2C1984B849F808021ADD9CA58DC59A64662FAA0
A094610CD27543528C04898B0E226AE86EAD58DF3DE5A70EEE52ECED0B1CC872
AB3D35F18A48F9E07BB6E3C52144166E54B59C8A8F1B45B16365B5B8DA74AA28
ABD72DE2E76D2B69479D482515D72AB9C5304AC6A14AABE4198CBFDABBB13103
0D62DD81876E7AEA295F7777A8CC046DD69FC37A864AC1800AC5BC19DB703DE2
2BA44B633B4E93754B574E4F4D411F9C0CDBAEE736C26868D5F26D5B775C7EC9
45575F79D588E3C26C396868E58EF16D6B545FD9F3C19B1D3A125C68469017C1
A46A45AEBB338ADA96B2CA5614A67694A584A66AE5506F6BBA51747CA8531694
C272F96D27FDFDE76EFB6290442D1576951DBB76D7B61A3A7CA2A594A4DB936F
CCAB9B93DEBFD4AC69EC62978F3DF6D8EF7CE73BCC6761112B49149B020B1B4B
A172843E261F523192F43072734960A379214C9F2424559C144E0BF1AB798AB9
CA429B74AA0B4891328A9618EA23131356CC534F77024FC7FBDFFF7EB0298A1F
8C44324ACF3CF34C0839C17C140B95A4CBC5C47C851550F92355C0FEB67862CD
0C3CB905411D56AF5E4DD8679CC617BDE845BFFCE52F390122C7419662298F3A
EAA8DFFDEE771A77255769892520485ECC0E12E451A6E898C9E6223F16C9D612
03903C9DD6C6BCD6E4CA805665522053AFC4DD6FE568246C3A4F7E47BF2AB79F
EC065F11BC4919FA32EF60661F838B7DF18B5FFCFBBFFF7B2270903AA5FE882F
E2669B59342A33BF043684F03BE29AFFC637BE816140C8C362A5735919A5DDD2
C8410C3DB38C4BFE95B525B1324C444D44CA4CE679F0C54F22A8EE5275A1320F
9ED00646256752E237EC5277E49147327D82D449AF05614FE8A3102500C715EB
663A0921D1F1134A0833E141E243A24F584627B27992402C45F310D2BC30D1D9
E851A41816B39D8B402D473214B8EFE235C614DEFBDEF7DE74D34DF40EABDCB5
C88C7552B2A98279E5C2AD9FBBF9C3E77D582382694CA46ED9B3933079A5B274
3D97AD7D8E6E9A40552959B60F561084CA7512CBEEC4E035CA73DC02F621B582
54B513ED31A93856C9F192D89E8E8386360BAC46B1B011ECA3ECBFF8A5AF78F2
4F8F61AD66EBD3CB972DD7BDE99B4D661389DF43D66A4E0ABABA261A0F5AED15
61764CB71A2565B554BA6C7864DBD8EE33CF3DEBAAEB6F58B664B83E3D8D61A4
9D4EAFEB75A3F0875FFDE6C51F38B7E87AD75F7DF519A7BFB76AF903FDBDDB26
B7F47ABDCDA855ECEFE93AF678AB11D8A95D2AFDDD716FFCC1F7EF9D9D98C2F3
D62C5BBA65E7AE91DEC146BB5D0F3A071E78F0EF366E746C37716DF03FC8800E
3B10BB4E4F798E51520383C5FCE8A38F827A311DC1A82751F1D051C157B9DF83
D61BF13C78A2091F8DCDD2750F39841C7F4B6D989625CE3515383B435326D090
60D34A892FD69300FB8B4492F908F1C2CBC5E2E190B68CA4AEF7BDEF7DFFFAAF
FF2A37A420A14EA68C923A1AACA283E28D6863FCAD7482E1D921019309088829
34426833727C0E39E4104BA0B884298B0A4C712428928CFD527FE4F6C8684472
EE338BCE2CF4852904E58B1D0BCC879A518A7DAEAC19BAA079253259D2B0AC1C
B38C250BF4D2323CC295227F11B64B8E40E12CFE7DB1DFCDC69694D5CCED51B9
4B5DDCE50C9FC8E9622906253CEE49E81E91FCE25590900EED44366DC66E7DF6
B39FC50510EFCF3CF38C242C127C54F45C0199C053703630069EF3BD6D020A4B
95A7545F7AE9A53086F820DE5CF829DFD0E0E3F819121725C5F48D9046A9EF53
78883FD4AC1B97B098249E72EFE87DC2BE60112ECD5E941034A83141DC8D8964
C2C731123AEE247BCD94796602347F75FDF5D76FD8B0814C90C8A66A4F67919D
BF30482E883425557938CE8C3D50846B8F6AF615010F24539BE955CAA8272071
AE58B274E7E828D46DFCF0E6CF7EE69C0F7CF0D0C1BEFAC4F47A0802ED1183BE
9CD849CC26BD6ED633C077ED822E55D7141D5B2AB09230F3DA76940E1D941DAB
AC1C954036A481638FC541B3E86C09E219470DAD5CFDDC961D7EADA2F1F8E284
9A9CF87525866CAE9BD80407F68F4C8E8D1DB4DFFA99A9E91DD36396B29B0A46
E78ADD63E3CD4EB75A29755ABA120D4B30DC536BB75A034EB1D96DC2105E5F1D
71DAC175575E79D5159F48A2B05274661BF5A9549B046EB132D6691CFE92A31F
FAED2307AFDFFFB96737CDA4EAC0652B1FDFB96D69DFE0AEE909CB761BD0AE40
48B61524693B0AA20CE26E5EAE8E44BF30546C289147597E2F453FE6957CCFF8
307689E5EC250000FFFF49444154E18A2BAEB8EAAAABF01369788E3DC5464BA5
BD34C79DEB8491C778F19E6BC80E71D4C9F889D4242D124966B2D6BCDA75868E
E9D510FC3406C32EBAE8A2CF7CE63352A4468552F806450B4D5E713D61B29C3B
59313E9752F679AD0B2830984A2ED58EAC57A5566D516E982E63DE82E8119015
4F3EF9A469A691A420E5B02E66337795376B26B6A87812E8A561C7024CF8D5AF
7EF5D34F3FFDECB3CFEE33C96F6F3FA0BC843878EA98CB215695C83D411DE0AF
049B850E32DE8171125A85B2825C77821A0A3BE314A8D262FAF4F3B02D06AE39
F4D0439F78E20995433BD10F4BC927880BA6277D1EC32273A14542683C53E725
9D095A322E20B612C5153D362AC35A989732314F128869297D4DCDA6438CFA50
8F90E51589CBF26C1E15FC09298E8DA3D383B29C2441E6C8827E699F24BD2224
A391A04C34AE5566A872F1A5E8814506323C7A8DA4BF317D3E6CDB39AFFB8D32
80C39826C8B512B6CE2431B1C6CC762E928E25D03118305806E490148E89E420
B1B1B24FEC1B91799292CB5340576430D568A9B86FC9E0CCC4582552EB5CAB27
4A97FA3099B37BEA163DA9F6C4E3AF34D6A8B58E2A5A76057497DA71AA9A69D4
48431C270CBD9BC5608BB6AAA47641A307D9184D3768B77C67DCB59E6B46D005
74CF30B015951CB86215F820E996B441DC02A3A57B86D1E2D95CC325850A74FC
89E9A9C172ADD1D2CDE9CBD5F244A355F1DC7618154B05AC026C1ADD81A3AF67
627C661016646A799D6075FFA0DFECAAA0E3ABB4ACDCB5BD03DB67B6FFF50B5F
F38217BCE0CEBBBFB3A9BE3BA99476B71A13A95AD5DB57EEE97D72EBF3955ACF
CEFA6CB1E8CF76BA56991A4992E149D8CACED4B524EEC98ACCA5FECBB4690482
9BC85AA4405152258785F911D4974567259991E9E1CEA79E7AEA9D77DE490729
96E5A0830EC289C642317829F622F3D6E8FF249DE071D0C916EF3167E5F065F4
4813304E42B07C22E19CA147620CFBEFBF3FEE29AD8CC9B5CC3C0E66B8C26421
9403295992FDB0D72CF3320B1E859F33EF0EFC0DF767DA2116FD924B2E811236
07686FFA7365045470E6759464AD00E31E736D6EF226E3E4C8C28B05FAC6B4D0
CDB4161192FF73492036814C4C2481098363BE046158CAACE959120DC236A05C
793D5E8C48531D662F4C61F1471D7514EC32E6C2B34A8B8C92811681D061D893
8C8FDBC6FCE27D962C72C360FCE2DC0A040A87C4B0B6B06C5A3394313C213CD2
04663095596504094C34568CF9F4D34F07E98328B1FD98297F254524E4A7D44A
ECBC7B1F5703F635F823A438C50323E45C49F6AAA3348591CE88519A37D13633
B51855335B8331A949F08E703DEE8687626CA2DA706D993C86AF04B7759F9240
28EDCC33CFBCEFBEFB9E7BEE3909A2A83DB16BA410611E3E15D6FF98638EB9FF
FEFBE7D124D747C00D7512CEE38FAB3C9C48DB941D5E4593D09ED24475310527
54913AB2B7B6265256BD3E9075B54B991964D99E5E3A6A63495AB0FCC42AA52E
2501C4C0B4D28D5CBC2C375F9725DBAA8A0B54EAE3ECFAEE40984CA978AA608F
86F1746A8F820356AAA3ADA6AE54C83C96D75C730D73D258692F5EAF7992E0AA
8BFFE5B2CB2FFFDBD7FCE5430FFDBC542ACFB49B56A9D08DA33484366377C324
B35FEC6215B6DDECD235ABC7B6EE483A51D952B5D41E700A438552218A2B6EA1
DFD27D8FD356A7E4149A71D7EAA93C3D3BDA3F32DC4E9D4D63BB34A444A93CDE
C6F8B0CE7DBB26A7BD8AD627740646AA74DAB535270952C3C1C00D65BA07F708
347FEDB5D79E76DA6938B0243CC96789F366EE175C70C1E73EF739C982A1424D
26804DA7E262E7A0938CC3895F45407B44833EE79C733EFFF9CFE327A79C72CA
BDF7DE0BDB426215FBE4577CCABC3801484597164D4DE1E920CB638F3DF65BDF
FA16CEE03BDEF18E1FFCE00766ED98E09A905748CB452638D02B40E6809113A4
4084A5D9C85A14149A352CFE95FA3B06B420FFB44B4378A24077C9B8712F8116
50B93FDA74CA8BBD6926E3CFABE2210FB532446F412195EA06F53FF60E99F794
2662DC42FECB642F2AFE8CA560E1D2AC9A17B3C0D1C57BCC9C5D3D059F521896
1090E903A15E6C760AE48BF797D45DF62AA04A824FC87A58912B7603A9CACA61
9D446ED36CC21DBEFAD5AFBEE73DEF317DDF5C25620DE1CE92BDC00003AB1056
AF5E8D8DFCD5AF7E25AAC4BC153307BF76ED5A6C396E888B5FFBDAD76ECD5E42
76A478AE065755573C64CA35975A92D548E55C73098C4B05BF044E71CD4B5FFA
D2871F7E587A8EAA2CDE4093564AF94C5187B1C1903FFBECB3550E30276DCEA0
6362D7FEF33FFF530A32E7614CAABCF3387E22B05C98FECB5EF6B24D9B3649DC
4FA8942FFA06193C14331C328FA11DA167F1E69136C8FDA5904265851A189B9D
77CE11B1B7ACDCEF2DEDDBB2F379A79D1CEE15D68671AF8A0B19E45CF6DF9FB3
AAE6E81F9C3E8ADDD876754B19ABA1C24656C46B65EEFBAE76A15BD55855555A
CCAA3196ABC264D899B6AC595B359DC2B865EFB2AD6DEDF63FFDD33B1E7CF041
EC97B80294119C547B7987064A95925F1C1F9FC0773558D251500FA272AD08E9
D469613D97EDDCBED3765CBF526A3471FC753144B7DD29BA4E1AC5CB6B3DC524
2DA6362479187746EC728FEBD73227ED78521F195C323633F54FA79F71CD4D1B
EC5279A2D39A4D55A5A73C39DB2A574ACDA00D1903119046691464158E4A9F94
6A4F8D7445751E2401460C0A04E590DF094484E423504766BA173EC79164C516
79BAF45737D585A38F3EFA91471EA182C502A379D59A698E5C2426382FA60B5A
328FF7C9AF6870339305EFA147FED55FFDD5D5575F2D0C9326056D5F56A57184
82734CDA60CC75EFCA5CBCA1485339C40B380F0EB848502AACF4007319397D58
2138983FFEF18FC934C8E4FF9C732D78AD64556C000961F595AF7C85D6346D61
E2C5B3D40DFFD2C34E66413B8576193550F19388678651FB34C79350FFE388F1
3C5B41D204B94FE2A99897DECE79821DFFFEF7BFC7F2D1A1CF84192657C93911
3F204984EB2EF87F5C1C7A93B97C521E421070E165E4BCD05988966A465304E1
32FD3308CFDCCA83BCF038E8E9589CCB2EBB0CE4422425B3F1B4CA9385B9C8B4
DBF0158CCAA79E7A4A2A03E6D9045478992797E695EE2C3DC327E211125B52E5
490BDC566650D04CE48ACDF3358BE0A413765E5C01E2F0E69B6F16F72063B9E2
8711CF1EC52A4C57AC182D680A3F9219DE6335B0232C5291D68CD27F4AE5517D
1A1C0CF9F2948ABB96A3322358F3288A0966B6016228A5D76216E01AE60BD262
66348F56C5C73EF6B1EBAFBF9E75366440CC0F713AD164D8548E5ADD3B30343E
BD5AA5BD1A9339EDD17EA11C527B0EC39A940D861882406CD7892DBB13859D54
7B4E62E5CCAAB8A9C763D552AB02951F1BE7A8C1B45C4F82868A669402831C57
6A9B520DBF1077031E6D8C017B2D6540F3D43589185B902E65DF4954ABA3FDEC
7ED96FC5A1532C741ABA00ADE879769016DCCCAD1776D7AED97FF3F3CFC0046A
761AB5DE5ABB51C7F88A96F22CB57C6018B7DC39BEBB0F9AC7C88A99898934D1
FBBBBDD3BC7EC30DFF74CE592BD7AC7CE2F96D6EC9ED74234EDA722DCF713349
A0FB1CDB5951719C2195C84136B56F1C13DD143363D9ACED17B214BF9C328297
2AEF14468141264063978D5499A629CE1CDA0D64F7F857B22B19FF33938617E1
57B462C57D4D258915A3543AA979280311525CA3BA4075EB56A1400E4C4AD5A8
1891A3DA79A3785C005375FDFAF50F3DF410FDFEF2733C8BD0C56CE7C03A06EA
58742551A5DB238B945A8F95433C62A0445FE10F88B36A16374BCC8D87567CC4
5C4D49BAA0334B0C257C28FD58FEE759A4F69E8DC3E4B70C6C0A321207C96D20
CE9D58365028DEFAD6B7DE7DF7DDB8926A057828989724B9D2ABC80089E40E9A
AA84F44C2641B0FC44E5A95064DC2411618882DD2DB9BD12EB56595E0AD3E7C5
C117E7EDE198CB44F43791521C06B780A14EBAAA923D3138CDF5E44E51F2D1A7
471471A9D6E6058CB349CDA0B00C4171E1411263D94CEFA17B8AF3E2DD447449
F921A7607A3F99CE210C940F12C290343E395771DE1543653106668B27790B04
26754803327A8A2529801E2D19B0A44A53345A19E6AE3C826E5399A9990421E5
A366362AAD5E9A0B221779BCB57C0AC39E55CBC727775F76FA871EB8EEA6B5CA
8955078AFF1295237D257343B1B35215F0B1200AD99139B534F25A104796D2CD
1DA7128DEC8F1F55955549B424702D35E0D7EA51B791846D5BB52C7757923E1D
471D4FF5963560D9BCDD14BF9CDA2B8BD4B5DD38887A8A252B558D6EDB2F9766
3B6DBFA7A2BB2DD5DBA542410736D2C4514ED1293562DDD8245129B6B319B621
018A50151CBBDDEC622DD2440D56CAC33D3D3B77EE3A686878F7F8D852BFDAB0
AD994EB3EDDA936104522B55714EDB10DAB695856D223D2FC803CC0F8230C984
9F14C4902333D183AE126E9FB04E12032981F32275E1E0D31FC21C53E6345E78
E185575E79A5E4777135A41FA489CDC04D14709434EF4A22DC729188B132D21D
C5409C2786E5B432AB07548701E398C08AFDC52F7E314F7253B7A03A2E75E31C
0F9DDE1FF8C0076EBFFD7666BB304A4709B16EDD3A5800DFFCE63779F4A4F022
CD1119E64E0415796A4F9C214C8C134E3801AB7CD34D3761A1253D4BF8915092
44B479F04464496C532A3598C1CA33264EDE390016CBD2C0FDE3E392E9B54F09
A18CE47DE159E29EA24227A61C452553B52485860113E8EF4C9B31755B6ACD26
909C689A8BA0C51E7FFCF1902BE402ACF3A480614A005B89420179FAE9A71931
A6A5262077A6BC945C058A07137969C58A15784F3811D3D6D9FBC51C38E27FE0
6E340238F1ABAEBAEAD65B6F85D81B1919C16E8268BEF39DEF10A3586C41E9D2
B3902416EECF35613C033B2BE57E54DE8589EFB3B801363ECB38B8477606D644
355F4A464CA0FFBCFF572AD4C25C11D0275686AE4BCA18CA51264751D4E126E7
9F7F3E8C5AB61B224F5159058038C1CCFC5409E353E13243DFF82133B8C518E7
237814C961994945B98B37B0ED30186CEF8A552395ADBB5642E9EB2959B36DBC
894AAEDF89F92CCBB175FB972809B28A623F55A58207BDB813E8441A5BD9896D
7593B869A9D8D65682C62082C98E63A5EC1EC70DE2A056EA6BA6C9F6CE2CAEF7
3DF719DBFB7DD0D688ADDDAEB895654995BDEFFDAD785E076684BE83D7C19A38
965BF2BBAD8E2AF92A8C5510AD1E5E3A3136FA994F5D7BEDD5578FCF8CBB8552
2368F995EAD17FF1B2877EF90BBD3BAD96572C25961DB73B2A8E7B4B25309BA0
D359D63F38A3D1B3EDD8D66D2967C3404B0E9C8846AB50F2834EE828ABB752ED
B4B40FA71376532D135CB16994E1598D33B87239A7F413F2EC53DE8B862BAD02
4C15D374804BE63E9628CD00690E38E080E38E3B6EC3860DFB5C1FD1CA4D5077
53EAD0CEE6D8246CCB236FD6C9A70BD71F304BD3CA0BB0E4260B9D477AB971FF
BFF88BBFF8D9CF7E663668D9FBC50A3895638352B84A85AF9625922B2958FF74
2AF1880AE8B9CA1D2F8C91D29E9A57A74AB2A3764C0B1DCC824690D482E175EA
A9A7DE71C71D18349B599A4B83A564F04DEDE535E24BBAF49141D0CEC224C1DD
44AF274D98DE765C20A8322A77409338280231F7B7BCE52D8F3FFEF8A64D9BE6
958F99780CE60BC3904423C15295465D66C72E321D6A8BF44BB2D726374632B5
F0210749F074D6B5E2579FFAD4A7CE3DF75C69FCBB08715054D0716FE5ED5895
9189CC91902E4F3EF9E4471F7D74E3C68DB27DDC59137C69DECDE53DCE0C268E
457EEF7BDFFBD5AF7E950BAE72D49079BAD2DE125D946E920AFD8DCA086ED363
6E76AD91AA0853E3C67D087A4AF3942781F7610E09C1F84E3FFDF47BEEB987F5
684284266AD8DE6792BE29301D6C0AF3FC4E3AE9A4FBEEBB8FCC948E53A62152
01126EC5E3C091D35D562A55DA9DE66B6A03238DCE8EA475786FA567B61B541C
AB35571A09D6DC8D936614763349E041126408FE31FB2F797E90C65D580659CB
DFD05251A2AB826119F5284B4790FC42B715769415969D6ED41D0F92E794DA59
AB36EB0D656455FE590F5D401238495A2E15D338C93AC364C50EC5027EF6A173
CEBDF5F3373726A7A1A4AC1C5ED6ED74A6EA533DE59EE9D6ACE5B8856AB9D169
A7518833D66D4009287DFCE39FFCC879E7C3B4AE42116C367BB0655D6D2874F5
645DBF56A977DBB6E746B07DDADD6AB5A2B17A3B5D0D469D2625BFD4EAB65365
2556CA088AD86D5492A859B3E6435A6689DD09AE85B3B37DFB766E9FD4EB9820
3A5279CEDE96E47292116052C8DEF42F394B64D352E24EAEB86AD52AE87C5074
AEBEFA6AE83A575C710559B98825F653312B9FE6DD9F18CFA47C9AE94C885AE8
7AE9CD8917B44F06C616F1AE1F7CF0C1FFF55FFF254E0551A3E70EAC79B5E0E4
F14FC9FF33D9AB38E6C42AA14F40464C0F009450A863660621C41771294C2F8A
200EE14F3017C987517B4592C51F459441A5E6036F497302959B14F488C9D24B
0E3BCBC7D49EE55A1215A478E3824AEAE1DE2FAAF312DF274639B707DBC9347F
C661E888A40087320E8D95BD19F01586349BBD546E7249832026C9B1580FB405
93D6CA7B71EC733C621D9BC8EC7C0F8E49A9C6B02D338BF162F857CA004D2369
9F94C4059478C0273FF9C9F3CE3B4FE5A826AC97217C1E3BD898DE2AB98954CF
3379899D375875417AC0AD98F84BE625C0FA324D113CA6F92C879CEE41122763
2AB83F6D4DD32D66EEFEBC170533B545E6DB5D79E595679D7516252587444552
1A0AF2567BD7D964DF168B6567ED74EB00E5C795246D06CBC1D15CE52A46239D
1492208D5B3A1EA0911FDC58151CABA06C27D56565BEEB0571D40E3AB6C69AD3
603E18B1675B454B9594E5A729CCC04E1D5F5B4D379EEC4224A8E1C38FDCEF4D
7FF7CD6FDCB965CB160CE00D6F78C3830F3EA8728C3601F0D95B12B88E0D49A0
D3A6C3204CD5E0D2A177BCF39DB7DE7A7B1C4605982350D253C821A893BA3F04
863134323C3E3E86F5EAE9EF9B1D1B1F1A59323E3AEA174A3DD50A8C8062C12F
7AEE4C7D76B0AF77767AC6AB55A7EB8D8CE366FF25500806FFFAAF5EF77F7EF8
639D916C3B0CF66AC5D1B63ADDACD99F11AB97F67C071D741053B6C4713D07B5
6D38F15812C41C076688880FC4CEF1A9A4253DCF829517D52E14016636B919B0
9DAB1CCC7B6AA93D3B9A90CCA81C08CB5AE47C61CCAC1012BD5E52A517E23F2A
0B1A7330F464301CB8CFEB1924C048988F0E2D96A8CC02E16331874F65263307
8ADF9009A679CF00963549C986F927A39DD81548CB1B6EB80107861C8D3D3D18
2A64C9AE64C55095A662859F930FBEF9CD6F86447DF2C92717CA2E55465D8660
9CD1994EFFB5D99747A2347C43E7959915C05C263BC35353B9A39F6E7D3C8B24
C29B2F942F4C1F25934F7813699929E8F0EC3120FC4292A3E7D971E4B014B1E7
9C730EF88EA8A54C1F7ADBDBDE76EFBDF732177321CAA01D2AC103957BC399B5
26711413705BED8922B588E9CAF94A7E2443E5C4BC5346FB4C08861B6FBC91C3
1655749FE364E89B415DD3AC649D335D4C9C85A0B649E805CFE54F58844193CE
CA31E8050186A7C24C7513FF3E37458C12B567AA2825016D0E3A33257D401C92
D0F8AEB9E61A46F579CE6D037C90273307D2889BADFA2B8AB555613A1E35D656
FC65B1DB2EAAD9266BFA7437E12EB4A538D6180BD08470135BF9DA38B04AB6EB
7B052B6B6A0633B69B262C2980C60D7DC14D63274A6732ECA0D82EC4252708BB
1341B251A9CDC682CB21E2BA75C37D733A4802473F3CCE76A11824B15BF497AD
58BE69E346B7E0479DEEB2254B75B8BE56D54A3C96D4736A7D7DF5F109AF540A
5BED41D86763BA861C72B25AAE42A56F34B32C09DB2995FC46B3155B598823A3
4FE895B33333D0FA615C6E7EE6D93889FD821F0641C12B74C2392613EFE94F97
5E92F804FC84FE6ABABC79D9A1871E0AC2667E8A589926FDA85CD325F1BCE52D
6FF9F5AF7F8DFB1085EC7FE2BD114400EAF892D52ADD7C6191E086140C14068C
3B32886DE5E5A5FBBC3F68ECC52F7EF16F7FFB5B501A942DE82E62BEEFF37A6A
3CD2EDD10C25EEF37ABAD12EB9E4929B6FBE99C39628CB5C0C8F4D5124B3425C
D532681E2D3AAFF178B083BD0BCDB004BCBB60CFD16EA0EA77CA29A7B0C30993
82A129732FE97AE34996A0E5429280BC40AA2519DB91703FE521BE220204519A
659CB8F89FFFF99F31064A0556F66205A905AF5BB7EEA8A38EFAD9CF7E46E70C
83A884CA587C65C53AE320A9E0E31333EC693A5BA4908A106C54C6613C417C8A
B3424C543E9D2913871F7E38CCBA79DAF1BC9794C088C52A9C8EF60A43DF6407
B45448A0426A023EBAD07C69BD12099505F73C87E2FA63087D6F5D7B5E62B164
E24B353231F49940655609881F73F9F2E5201B961490D2C489A4F2745B7A3F05
C409D3211E00941226DBC5797736DE4452FE6582E288A0D9CAEA1BBC612E87CA
C18D313CB0B08D1B3712444B76440245565E259B9DB1A95A6F71CD4C6B59A6D4
0F2A7580EB4FA6DDC4C1EE2451922696EEE4DE4EE36E565E0BCD1662002A7F21
D1409E3E840174750BEA7FAC333453CDAA750EB19D662C2D69E992340D52DDD0
172BBF58DA64798FC601B809D40B5C79DA69A7DD79E79DA0A2B98D5E304EE06B
4D5C6948A00832066B18472A4D56AE5E33363A0AB34063EB820F263AB6EBFABA
9F597B6ABAD6D70F21816F6D656DD8B0E1E28B2FEE349A4114F4F6F65D7AE9A5
1FBEF042C77303DD4E225676D23F38D469B5DACDEC08C3C8C8A48E673B612609
9868C0D67EF6C292008C0C8635298D5E911D3B76C88913FC2BAA44D2C79B6A10
6D02323AB6A691E9835A18555EC43B64EF89260D6DE0539FFA14390CEFCC6A18
E8DA52C6AC8C2C235A360BD91C244B0800C98716625B683C78D6C9279FFCA52F
7D09D7103413375FA8BE817E7E8E5CCE387574EABB9614C733D822DE6D6AB8B4
82E9120557C2652CDC973254395D98E421871C42CC199E9CF5EBD763ADE991E0
AC24D31CEB8EC3BF79F366BCFFF4A73FFD918F7C44C2EB0BA15028A36BB98003
8B0CA76CC0383FFFF9CF4333C55429E8B0B81800670E1A3AE38C33F6C9A130BB
134F3C113AC2534F3D95E6C5818BFB0D855BA90CB503C4870711439B2C46CC4F
A68EF13E3211C91FC79AB0B505179CD5C2C4B7901E32C23417D11104039D442F
1561E99E9D34D49E5E35A9B4121CE985284F20F04439C283B0C86037E4DDF411
E173F2D979F791234D4D04F470C209277CFBDBDF9610B488731ADAAF78C52BF0
94B7BEF5AD2056CC02EC8CE84C8C1CD063406C41EA687C34662A761EBF62348F
46832417C9520821992314080A2C1A6818DB819D5DBD7A354323E284146B8006
659CE36F8B1542B3A050281EFFB6E39EFCC6BFAF51D692FD96EE7A6EDB51D5DE
DD613D5216B6374C34CBEB5A9004DAF3136611E382960456014ABAEE59A68A9A
B41D3B49BB59143BD5B8E896E782A3C7D8B9B14855949B16FDBAEA363B118863
BB525BF744E2921DD4472CDE373D57BD72BBDBF66C0DBE325D9FC1A8AA7DBD85
A23F39AA63F24B972C1D1BDD0DB1656B0C244D30B5FEBE0493EE061095BA04A1
528BD3A4D96A0E0F0C4C4CE954059C8DDEFE81199D659E1635FC57E042E6C17C
57F6E0C040033C37AB7D03F5355A4DDB7582CC3B045101A1D2EDECE11DA26455
395832DD8F3C1A5218240088B4C8E906480D1815A920E17CE761760966E742F4
0FCA140D92078A5128017817BA223D482608CE08B45E33E37121CE8E1B8225E2
57E0E92C489630EF3EAF97B443135869116F92944C5946131B69986199AC41AA
C0A46BB1E83B2C30A6DB5D72D1A86052EDE5A2B3C5185EF426F3B78CB408DB15
B58E6E22322F7AACC868F6193116A7906C3985BCB8C6B0E8444B965A5C1E577E
C8F389B5061BE276AA3D014425C1890AA660E72DF4628106F82066B165CB163C
E8FAEBAF674994A4B8619F3041B3CA57089754951860B36CF1465EC3F271F6B5
B732EC2A65C463F7391EDE90B792F649349B04C75F7C6B0221C51F52528A6766
9FF7673681F05069ED229A359E72E59557425122108588C9D47829C37D47D264
D11947883B1F7DF4D1C44287B2831558BA74291EFAEE77BF5BE51959C267E7BA
01E73143BA894452522CF1A1624A4AB203B75E0A6DCC4435F933CDD0EA89EC84
E1510CF33E18F975D75D772114DE2CBE62961F0A108BCA534A2037E3247C8953
5C1685BB55BC9FA5D617AB3BDA8D520976701CC4DA50C07F4D8249E04CA51AB9
535B031ABD39F574EC56F7170B536DA967A5B8CA5596EF38AE9D60D59AB61574
759D8196229E1D27D6C6D87A5C25BDFD73C8E13C6562AC2FEC1DB20A6E019A6D
27D0018BFEA1A156D06D35EA3D037DB353D32A4E067A7A69D18E4D4EE8EE1C3A
C05B0CBB9D8AAB9B418E4EEEC67E97ABB576A7898370D6D9E772FF1DB71047F1
D2152B46B76F01E1FA96FB92A35F8C25FA8F877F3D599FC1830A452FC08E6488
4B6028894637D22D4BF108531288A64CB2C161C1B2831EE61AC446D105175CF0
852F7C01F6DFD34F3F4DD838959752FEBFBCBD07BC656579F6FDACDD4E9F3953
18CA5066E85545638D9F418D468C48101414E9BD0EBD0E88C288304A57C01701
411051291A8905A32926B1BDB1105440CAD019A69FBECBFAAEB5FE675D3CB34F
110CBE3BF9E19E7DF65EEB594FB9EB755F7712315A3B6FCC36C66C72C3E198C2
68E2797788952024DB8FF2294A9450032EC6649C92129A7FF802A6912A71FDCA
CB41A9C696A80FE334EC17725FB42E34D2A1C8C62D66A900CD6E63B7C0A121EF
1BB074AE152845EDECE308004619342046B98428E78C1F00AE8BAA5153D0005B
8A397EC36428526EAD853FE8A083AEBBEE3A342D83777B295DE4E69B6F3EFAE8
A3514EDA701A1558728DCA7982B6B447927366348BA6542ED49E1EB2C9ECBB5C
408327B8ECD23C5DF0D4534F958F92169DB6DAAADE10976832C7BB204FC5C68C
E9AF25310F3FFCF06BAEB966AAE8903D3307911CAC4748995B29EEF11022C8A6
D4E48E3BEEF89DEF7C672A4D431E828BB70A363D4E2999B4AC0D431EC6854FB4
4D13609AA1711DB8D36525556FBDF5565D81B6CC279F7C3277D1D50E3CF0C050
E45142146DC34171B6D0EAC19BC1A680619471344906FE6B5EF39A5FFCE217CF
3DF71CFE994156D658B8832E83E0A082E3D67828FC212E6C1243D2711C015639
5FAC52574F65E1E0D88E49D77075A4732CDDA9BB6F7963A0AB5A1E196D8C3672
4D90042DC048485AE5A43BAD26CD4625B4BA43A9B39C01EC335A88B4352C4B3C
0D1CB96ADEDFB8564D2AE5E4C9917A7F5269D6AAABEBC3DA56F2141E4DAABF69
D54BF9F3A2CCE2ECD1D4D8A1A4B3D6399A779DAC94AB23CD7A48C2DC8D377AF1
B9672AB58EDECEAED0680E0D48CAB4BABA7A864686F372DCB5737AFB0707D636
42AB56EE9026196D36C61AA31A46BEF7EAD55AA7A6BE6FC6CC756BD776246166
6FDFDA75ABCB21E9EEEC1D1819EA98D1DBDDDBF3CCF3CF68489D337A65646645
6E595D9BC6BE1E8A3444C87564FA25975C72C61967C4FCF3AE662531C64ED0D6
3AE9A493CC7FD32A3816011DC4453FC442A631FEF465193ABA295282CDD046AC
809D470F3222CCDA099B6CB20936B1CD8EA9CE17BE05F230E45A0AB77E2A4D00
E6C2355E61DAAEDDE415342A1DC0BDF7DE5B5AD3369C76E989279EF812DB04B2
95A345423506EC872832DB16A3005615E3FFE237A4D743818034749D130E33AA
7B316A792EBEF8E22BAEB84227DF7731070895560680EB1C6ADEF1E9B802E16F
CD0B49883DF6D8E3FEFBEF77952044690C431FC29663C4821E9F68B25551EC90
86C873E23A845F085660699A16CAA1C0850B174AD6389F11C71362BC3C3E5328
0A2641DF92C562122CBBAD9831F0C1AD87A25C70AA1D066B95D4A77424121FD2
D05040718CFDA5DADE4D7E4281C8CA82723202B3DD5F6935EB4933EDEB92A7DF
D2E93CF3DCD33EB5E4B3ADAC2AB5B3ABBBD7F5225C9F7ACE5058F4DE9498E7B4
3FD3C9E17C7EFCE31FDF669B6D007AEBA90F38E08052D10015A3014CDEA49C9A
A1A08DD237B58564B0F338A0E54C08E84D453937C009923D6CF8B8E79783996C
005DF6ECB3CFE6B4EBBFA5BC4B76A920FDB75D266F588BAE4F30C637ED9B5B6A
8E740E0D6C51ADCAB0DA4CD66FA5DCAC95AB8D6625C90042D9AE6BD535D763A5
CC051869864A2B74B5B2B85035E39848EA210BA82769E6348C24D9D7F45EAEC3
CC90746541A4D668B53490A4ADB18CA56E2874FC21347F1F1A871E7BEC97BFFC
656A682971A0B60EB58708B8E5965B34E7A1307A3C39317B8F6D1433AE87692B
405FAD973D33C48859B0D8D2925C575F7D35610D20DA98E4A6B171A873AA0CB0
936A96E6280CDD4517BFF2CA2B51A240E63EF2918FFCC93A034688174BB692C0
0EDB52D7945188736F5801EC64DA36E0A1A7BA7E5CE51E3B37C64C039D6815CD
BEA69A527089471E79A4D480CEA38480E926B30B865CDD690A741E00FCB8A881
9875AB68B6E7EA62EFAA36F4A1210A3CA78B4271DF9CE60EB9B54E956C0CE923
4C41E511F7724B96B8077AC873BC385CCCBEE36BDECA4418F4891EC71DDA9C5E
674FEBCBBA0BF89F58F11AB2E60F7DD93694ADEB69499C4003A20BEAE9E08527
72671A5B33339B2195D22494CA473FFAD1AF7EF5ABAEDE800DD1FB8CFF9A852A
E478767D47AB363DFA939B6A26DFFDEE77FFF8C73FD635F52B8DD65D32CCE0C4
836BA34882B06579104C95EE2EEDB691EAF8267E294275D6E2F33EB364C9ACB9
7357696E5BCD9D76DAE1C1FFF99F39FD7D9DBD33A5CE75E5DB6EBB6DFFFDF70F
39444197D235A51BDEFCE637C319A993F3E10F7F580BA1ED8178D2D2C8ABF8D8
C73E264BCA5258A7516B87D18793E790AEFD3664962E2B0BE0DBDFFEB6E6D63A
8FC79468D63E317FCBB1C71E7BE79D77EAB2F665B5FFCD5517AF3B4AE5831FFC
E01D77DC81AF4CE6906C364CB4FAFCF6DB6FDF77DF7DA9A964D2B25CFD0BAB6A
49634E395958ADF50D8FCCCDC732165A52B01DE54A47DE086FB4511F4A9BA349
689432E287CCE44F42972C7E3DBE1CCAB43996C3BDC7D23094B7362BA559EC68
46D6DF26E99359D3591A08ADB1E16C1E0642E74349E391B4D19D17D87B12EC45
E1D06B02172D5A24CB1A08169389D9E8397751914F28E6DD3486EAABF84A0AF2
35C7CA77DA6927ADEC65975DA6ED219FCC7443F0AF85F5F1D38E7B4C13F707A5
0202029423A760B3CD3673641B8EB674DA0E5AC4AC889663A219E66E2CA2F908
DC2061DEBC796C69EA87A6C95487C8307505003F0C454F49761D19C749AF43E0
4B3F845118B7C371E3714DE0440786AA8DAF50084DFD09161D4DFA8CAC88FC59
EF9E5074557445B19BE892DA653DDEF296B7FCD77FFD97E989B4BA44A98812E8
0B471D75D435D75C8367A7FF7EEA539F3AF9E493794273CF125870468848DC3B
DFF94E89099AB7917B44498272D1A39E72CA299FF8C427883094F236CBD222FA
FC2B5FF98A842FD3C47EC274C24F3428C5819A18A81AA22C6BA92034058D1397
5648ABC99DC4B4A7E0D9FAD20E1D8F633AA038DCEFEA6E2B03EEABA591007DDD
EB5EA72DFBAD6F7D0BA2FC69D871895AE8BF9A732951ED0352AFB17D61879413
88B2C1F5D63064D17CF2BCF332BC7BB53C564F935A6752ED6C8DD6939EBE7474
38EB3035369C235FD2D06ACCECED1A191E966DEB94750C797AD7BBDE4589C382
050BF6DA6B2F8E8DFE099E4ADF94C662783CB5F4C79BDEF426B94D92DAD2AC3C
08567C296A5E1D8A8A30206400AE1E78E001CA8E8C344B22020036898502C964
6DC2E38F3FDEDB9BD9734778E89210376D7549BC8CCC7BC97109A572686DD855
DDB0D9DAB89EF6A6ADDEA4349266EE941CC0AE6A2DEB0DD9CC6AC786D3563DA7
A5D389EF2E956BE5CCECA8B79A23CDFA682B4DCAD9AF86D24C13247926B927CF
25CCAD5646ABE5B5A97CB8463DA31EAAFEB19C3E29DD33336BE447618AF698C4
194EBF14A1060CA44AFBC1513E8C6B9E17EB3BEEE38DE318B32FFCA57D02D452
DB87718358449BEB58F5DEA93E2D2856C534011F564DB3617C791231CAC8E1B8
E0820B343F4EFF4CE573336FD494E86AC41B394AC86E7B3371CF194DBE9E0E63
4E1B06029B49AFEFB4415C2F15C3F35C56ED7F4E7A1DD730B715573A8A3BCE7A
A1DF9F7BEEB9175E7821263C417C7BF4669DD494EDB9E79E3FFAD18FF45E02C5
F2CB756B212F40D59FBC5D9CC1C7762668EE6773C88837E602C49E728BF6F891
0CE9B3928CE96AE92504AA17856FB94CFD08F9528A00D8EB71E022DE7332A624
80BEFFFDEFBB39B3EB95E29C4ADB0FE1DBD0E75A6C02230EFEB05365D10CE62F
66D5417C13077EE6339FD15A805E2750C38CA11862067F4724A6E144D4F7F5E0
E067F43AE18413A49F6CB3F811FCDEECB32CAEC41FFE62330B8F26F9164F657B
D75B19614E484A1DB54CB69E77EE999FFEF4A711AF2F2C5F81938E00E501E192
7BC31BDE205524012DF359730E949B4E32D4EBFEFDDFFFBDBE46233CBAFEDAC9
23341147AE4C4565BBA954B4A6D0ED8E39E698CB2FBF3C6E38C1812410044A58
6FB458788A73F2D7430F3DE4849663293E75FAD3E2C58BCF39E71CF25E1A219C
4B4825732C0216D42464DD717BFB8607D7CEE828F70C37B7D4FE0C61C3BCED57
25E38F2B75963356E8D04A1BAD663D6BED9C26AD2CC85349F487B22638D304AD
0C605AAA94A596875B2987A1232F33D621DEB85419AB260369181C6BE8E4AC08
E5C792D6F2A4155A2F51B030271A8FB610B381AEB5BB1C0B17F6799C56455810
093008ED2FAD0910CA98A41A1B84E4DAFF4E1A310C0E8564821E44CBA113A115
FFC0073E70D1451719A137E9F5F5A71D77DC719F7DF691C49751A2732487E3DE
7BEF25D2406F095C678EFC54D7E1CC62D46A7EDC61D084E73EF8E6AF35CE3B06
9B4D933F88EF9E149C190E4E98CF11723D44CDA4F349BA17DF0EF25D1BEB014D
402E51FB9B16EA047368CC8D44466DF23C0862C71043516DEBF65BB2C5F03EF0
7DB4E774C0E4EC5F7AE9A5969BF03D00EDC730612A29E7D17F31FA500CBA02C5
AB04CA7511FC29887DB4FC125EFAB2240BCD8CAC399C97D6E1D4C529B062996D
5A869C67493F27B5C00140D018A7444C997C0B0CA00E5BA1055D33A2FF9E7EFA
E97260F12A0C7763BA34604AF042E113E83AA4167423E876DDACD127938D08FC
199DA701EB9B1A86948AFEA44D3C4D454C1CB22344A6274510C0DA8625181353
3B080EBDF6F8892A775464F08F8D5473E2B3ECAAA5ACCA493247926BAB051B3E
FCF8F3AD1C063363EE466B56AE09ADE1AF7DED6BFBEEBB2FC3902BA0D9603B49
1BC150C4A6C42692A0D7B174D90A1E9EC15D5B6CB185F61EE5C761FDB88D4F48
5230BD90BA77FD3D8A8450618880005E4D12FE18F894A03BDF6B1B4AC3D6271A
955650D7D172901141B5686F9F79E6994CA3B79F3E946B5BEBEE59B96A79296D
656D6A429817C2A69D9D8D9191CE8E6A29EF51506ABDA4C6B247A88F5B4ECD90
79EC9201A3795B028D7B44A7209FE18C1D48966029D15E99D72A354AC9582919
68861569EBF9109E0CAD1521B5D92123C0E5DC4E4B6AFC1A2AFD440102B48AC6
DAAE1845915004AE4B61D2A217A70753BC5A9AA02D18EB178D4251C058A8D846
E01539C2AECF4FA6656769C322F2C8FA95AEA937A421AFBFFEFA430F3D741ADF
02618D40B7511BEB2142261846A1F06C5CE616F3DB4F7AFD72D4F9DCC436C442
911E31CE651AAC118578EE9DC5041A2531AE091C2E0C05A645269EF6F14E3BED
44B35654B13690E6E8B1C71E932A060142578010D5D0EA9B92566EE6E7273431
BDBEA953AA355BB468D195575E89AAC48C8A398D2D2B8DF98911E23EA266EEB4
3F0B96033F3186DFF8F033EF2029F54FC9A078194CC9C7F54F3EF9E46BAFBDD6
8D6BDCCD262E6A0B11C8559BE68B5FFC22895CF40DF0124D0B1CB9DFFCE637F7
DE7B6F9D2E8D8AD9C0F0892B06C820C99978F8E1872DF83890C6CF382545746E
AA9309BB1F8B8B01ABB1B9A5355ADCC62FCB148320893F666C106BA41D9BE5B4
D1DB59AA8FE4F54D1DE5E18C7420CC9BDBBFE2C5D55D321C2BB59BBE7247BDD4
F9E37FFB8FFA9AE7EEB9E71EA6FAE31FFF388530071D741051290D00674563D3
27471C718456418A87E76556DD6126AE1BC20E70F98C2B10AD099074C4D9F42C
7A04CF184F645B8F7FC22BAE37862D1894DC56B3ED2D846145C3745784C018C8
0E9769A2111654C0FD6B07564B787736C39695F2A6A1B49144EAC8703F87B0D1
E410BA8F8A74C37885C5381975DACACF9064F068AE0928B9AA95926A465F9ACE
6895B3AF25C9DA507A31A4CF84F4B9345D17D26A67B6D5A55C6FBEF9E6B81A16
E56A5712BB2766B0218B00E31E93AFDD48DCDC5C7BD3F8A0AFD6CB4792C1E016
738EB0A5F466BFFDF6FBDCE73EE7F86AA9A0F2C70B373DF8A4D777AD3BFB1F92
41C769E36FD25F6C9A7EC571BBD6B8A6BD149544C4AEBCDE6B9C575D7595EC63
CAD3A6A963488BA695E33D2627CB8193B5455070B4A7BA545C1C17A2AE5FD995
09C4875C01CAB1226D42CC64D9B265E6F94339C7B6AACF212A2BF686E263435E
5B57C32DE5C5ACC9BDD051D7D51CF0B9E4924BCE3AEBACB4207BE2E2B802F442
D0486474DF74D34D9A56A433B10BB635D01AF64D4CF380216337D9A281E89E7E
4548C4A9574424801C3BCBF020E2A3C8003CEFBCF38C620C91736D5632FF8900
0581783A4A872228A90FE156B474933C72195AC86D79DE687BA19BC1BF92CD73
A70E9CCDA996BF2D90654E3787D743D4EFC5BDD8982266267B96BA8452B39A68
481D6B874643A9ABD43FAFB57628943A425AAFCEE8F8E657BED451CA007077DD
7D6F576F5FD21C23364DF84E8FB9E79E7BCA9880F644CFAB7900C4B5D75E7BE1
83EB01172F5EAC0F3FF1894F9C7FFEF9EED74A10CC15BCA6A009513ECD07C9E9
1C47A57447CFF938157B417FAB33A9017833E08DF135C3B19CA5E76A889B98B9
C4871FEA0E5D44EEF5C5175FACCBEA310757AD1B6ED565F977D7AA7387EB5B55
AB735ACD4AB3B541B9DA0AE381AD717D965F2D7B64B923ADA61FCD6F4633FF20
D7041A43A24B8E935564C1A51034A01792E49924AC09C968A8648B52AD62F09A
5E9E7EA26C006C3B6F06973A22FBF4F8B0D36097E89B8E98856959195EAD170E
4A8CF62E155D803C3C4FBE3D5AE7991DF19F3E4F1026D051D04E527FD599C572
B2089EEA3A3140D9578B23F2543569135261F0777FF7777297436E9AE8FAF44D
41004E7AFD36C8A56EA115C159C70A4162ECB2CB2EBBEFBEFBD2A54BA7795EA6
8B2D1DF31F6777F1EA1271B3DF8DDAF7C9616689F263FB70FC3CFBA130C0D139
31D597139E669125FA1437B374D328373533AD4D283C7A74A3C164380D9ACD77
BDEB5DFFF22FFF02D96428029A9C4362616941F263C669235FFD5021EAFA1657
02A3C96200120CE06E7AC74E75B80C4572DA69A7496A6B32B1735175C692C206
65942DA02643CA707211C1FCC958233F38C13AD9145FFDEA57354BE79E7B2E85
EF135FF6F7431E0763036108188F1B171863E45E7AE9A5706080C2CCB460776D
60302F40EB9D3138DC0A1B2C7CDBEE7BD72B3DF56A5FB531D45F1A3AE1807F28
0FAFBCF882739A8DB137BDE1F5AD52860BA0F24E0F25D78ADA0EC60312FCBBDF
FDEEFFF93FFF473363291C1FCEB428FFD6DD3FF2918FDC75D75D9AB40BF25798
E009C5A5611A3F59166F27FBD4B11FCD127FE10B5FD093E2E7C52B1ED64FFFEE
BFFFFE1A00D2C795192E4C8D530B56DE7809ADC1D11199EE49A3B74B3338B443
28CD0A19A7F4DC0C3C9FA4E58C8A27E4018446B3D1CC3B1B53A09B0F2FD770AD
541FD52AE5D1666B34CD847E3ECE90458E425855CD02469A3819F0CF4919C868
906E2857FB3A3B9C09F3F1E10D9840D77618F260763F97461E79E49132CE6616
2D856307FD2F9D2770793FE69A3B41621A320C1706C5354CA433B15CA7C9F422
BE586BA08CB621FCD26565F069BF61374C7A1D6C444E505CCC6F0C3A42C96C95
44D111087CD30ED934D70F51AB8F2DB7DC72D75D77BDFBEEBB93A2F3AE551131
A8A9E6D3A1AA50F04E9AB5697C425E95956B539BAEE52368EB2A50F0242EB275
223444A63ACE0EE75CCFA69590A9E88A36DBF5CC3E7E990547ECB2180D65ABCD
391327F742C1924DC0274C40A9578A9EC9001208FDC73BC6F5B43601A8767638
3E14E5D0F2D3816F8782CC436FAEBEFAEAE38E3B4EB69B2EDBD6B578AAA9A6CB
0213C8C5C95B007694F0D2D5A4188E38E208948D2C083DAF91768E084DBE8E49
A556ADB44687FBBB3257EFF0238EF9ECD59FEF9B356F756DCB1DFEE63DB33659
B86AB811AA5DAD467DDD9AD56963F4B9F2C2CD861EBCE98C0FCE4E561F7DE269
69C79C9181C1399DA5D5F52C0AA959DD679F7D645EE9FDD1471F9D15C2944666
D4667594D29D5FF7DA2CC3906E10BABBC2F053DDF5FE666565C65D5CED6A8E0C
67504AA99B0DDFB0F6F965A3E5E5A111CAADD09976F5D6B67B7EEC8FA163AC2B
07C5EB7925CA0F38E000060F218A43493424807309C590463CF5C6326807EAAF
071E78E0ADB7DEAA9F6B71A5329F7DF6598284549049DD522D18934AB9085F6A
FB85175E208C7EC821877CE94B5FB241D31AAB3742DAD3D73B5AAF3786476A21
2C9CB3C9AA15CFBF393467572BDD95B4A39C0C8C34563664EC979AB2E54B639D
7931413937FF3545D58C74A854CBB87BC2583564EDC51A1969DD40288D84D260
48F5FFC3DD3DCFD647BA37DCE0B9A79F9DD9DB3BBC6E6D5A042B6035E72C2055
5D1C608612CD809ED7D4236954E44FCC10BBCDBB7D1A74A6A97562D41FB743FA
707DB7218A73F244B14CF7AFC372CB2DB710CB06EA6DF79AE4598C199DC627F6
63F27D3603EE2F89568E43E94F759E79452F2388E262CC72D14E9CD1DAECD61B
0981DB6FBF9D93821C70BFC95774DFD8F20B2F83ECC820F2BFB82680AFD859D6
187E108AD0ADE466C81123FA260B63E7459F03076C8B4AA16334A7C71F7FFC3D
F7DCF3D0430F1144F277744D8A21CA454B740971143BE6B6C5B4D368F1E0FD06
2B8FF8A31D345D8A189A395DF93EDE521BA62DEEE4EEA0271C73FACE29A79C42
AFCA100567A6D9D9EEF975E18517820222B9CA8D70A4AC023D062E6EF2B869F8
947A67CD5DB76AC59C39521E4DE9A6B95BEDF0E2132FECF6B10397AD1EEBEE9F
3BD848560F37AB5DBD9552688C0C5592D6BA7AE7AE73465EF8CF3B069E7B64F5
68E89CB55163DDC0EBB75F58EEEBD5CA120D9397A399BFEEBAEB3236C0D1726F
35D9ED6D7FF5D9CB3F79F4C99FE8EC94406FCDE9098F6765511B66F4FCCD5595
6ABD3CB46912D6A6616DA316CE3AE67BDFBCEFE2C796FDB8395A0A1DADC6686F
A80E74555E0AC8C64C7F846808E0189765A6D5985B22444158F33EC6AB29F9A8
CFA9233386041C373DAB29156427D8CB647B60E5645584B58E4B962E3DE1A413
35B20D66CD5EB57C7967487A4A9D3BB78667D52A61AC21D3B157DE818C95505E
3B5A2FA5A36802CD470E180C1DA194914F944B8D52184BD27AB3551F93F40F5A
575992CDB43C5C2ABD9836EB7DDD2BD7ADDB6CC182A71E7BBC9AF357B3218130
C59B416FA495BFF9CD6F3EF2C82364CEF6DD775F3997B126488AC6857E289815
9068D34BDEB89F5DC8AB7FFEFAAFFFFAEB5FFF7A8CC58AD9E3C9F0853C55CBA9
0475AD6994C563225898A01C7EC1BAE2E7E99FEA7FCEA1A3E05C0FD2D685D0CC
D2D35766FD1922D1CF68E4BEFB505903C153347FFEFCC71E7B2CC9997E34032E
A27AA5F2D9262C819952419E3FFDF72587FFE29A80D28110E5FD086FE990C804
00BEC9335B34A30328D482ACC200D010F9E646F27171D97437DC7003A167AA69
38FC7A4853F4513740FD3DF9098D0D5492834221CA40FA1898DE922DE8581B9D
677AF29791AC2117223020C10472D145172D59B2846789F725A9FCB4E8FA400C
D745CE93CE33B1B86DB7DD56CA8F4FCE3FFF7C5D1FAA51F7B8D0052923242B88
10B4B120DBCAB89AF675CCFEAF14926AE8EC0B8D8EB71F78CC7079E673AB0666
F675AF191C5937D248AA9DD55A67DA1A4B5AF55A29D9205D75D6617B1DBBEF7B
FBFB3AE76DBEED4FFFE317B367F5A6832F8E24354D17DB8048A86EAAB17DEA9A
5B3EF6E15D3699DDFB9B5FACECEA9D17BA5E1C5AD52835FA7AC2BAD124A49559
F5645532D655A90D572AA5E166AB3FA9EA26AB24ED7A9EBAF233B71DBF68FFDE
EE30341C162ED8CA3866C88B106A9A43702F3CEF8E3BEEF8E0830FC6B48E5E65
36128E4B884A20C1B6861C36A3FFFED55FFD9596D8AE619C12B467AD49D6FACA
73E527CEC1645D096B9DABD6ADDD74C1E6CBF2A4EB067337C8944152DD3CAD6F
DADB3363AC2E83AD3B2423215D9E730A759782344157C1C719F2E6C0B590943B
2BF5B4D568355B8D30D6CC5B1697C39A7268D493E134F46DB6E9EF9E7C5237EE
9B396370D51AFD24CD433DDADBD446117677CAC4D9784C316C7647DBBDFDE2E0
9B43A6D30B97B4E882D78AFA35EA2E3A680841B29ACE37948B8E8CA1C0B7B8A3
9FA959A02E06FA6283AF2D9F377D66B854B0C13372433FA1090253FEEAD64960
6C19F613F7708C012021A2B00DB94DC3C663BDFE8CB43C17A7401A31A84FDC17
6BD271EA0BEF7AD7BBFE5FF8041A16214B30A024006DE3C7B5C7321B8F3DF658
87D13D4D4095DCA939291A72E99A927DDACAFA449B9B76456C0E89608AB0DCBC
4253AFDD6FFB310E7A3A56137BACC6ED422FAC2F0352D2F841DCC7782C7E053E
2ACEADE94312E3B6356420C372C1624B0C193195AECFD136CD5487DC95866675
9B6DB679F8E1875D1B4996CF40054742A8A2401B4D0301ECA855E66DB8F1B265
CF967A67BD71B7DD57D62B3337DE3AAD74EE34F4B3E1D17AB5B3ABB327ABC36A
8E0ED54A69B5527EBEDE591A5DB3EEC5677A66CC7AF4D995DBEFB8D37BDFFE96
EE30BC6A246569B49A7A73DE79E75D7FFDF5D9F38EFDE294432F5EF9F49864DF
489851AE6E34D67C26949F9F550F2361EE48F262B5B479335D566ACD2975AE0E
E559A5FA8AEE99E9DAE5B58C07276C10663CD535B07083BE99CBD6FC4A0AC04D
8730149876A49BA337F102C500737B601C39798A5A381873F55BFAB6A2CE3115
39DB5C2D260CD0036A5689706A8F01C0052B95855CF28E026912369A3FFFB9E7
9F0BADB492946412F74A3E9692CDCAB5394DB908C99AC6B0166CCEACBED155EB
BAC2B826C81F2C73933A727EBA0C6394357CCFDEAF4D4ACF55931535299B99AB
0607578C8C567ABA2BB58EC1D5AB92BC6301BB2DA647764D865B7A784F225E63
EC80831B845289406AFFB8F2E6E5E0DF6318E8D65B6F4D630CCE9D6148A1688C
6AAF4E73482459479822388707806CB8309E1BB1ACD3A03059AC182F8BE5A7EB
EFB3CF3EDFFBDEF7F4500C78A79D7692DDF0AAC843948D198D6034A04D0BC957
3401787AFC9218B248E6ECCF70500C10D2AD4974E95ED363BDD29C06F52FAE09
E80D70E595579ABD0E9A013C71327BACBACECFB5D75E7BCC31C720979DFDE319
C0C0384F8039809B89C517EB0C002A71F90F1F0293004FA23902934B89B60B56
C3FA9AC005207108023E58DD82C664404A5CE5CBED603591BC5EB66C19349F7A
10FDF3A9A79E92EC5EB468D1F1C71F0F5511FB80DA9918F538E98B49D326C36E
E52434A306A27133FA50B45D6BDB52D3D534A6E98CBEEE50AE7C68EF7D87461B
63A132DA48FA67CD6D0C3CDB0A259660786430AB83EDA825A1554933CD97942B
2BD68CE8CB19FDEA63BFDF7EE1A6AB07EBCCED49279DA4E1FDF77FFFF77859F8
E8E3B75CF644A5F242EFF63F5A3DF6FA07FFF30B8343BB946B43CDCEB961DDF2
AC3B6F3AD2159E1D091FAA868792D09CB1E99B973FF5C0A61BCE7A6EED93A1B5
7DA3FE58D21AED0A332A330280716B74B3CE21ACF1C6CA45F763C785DA3401A6
09BC20209A10FD9A6190BE80BBF861DC15CEDC762EDBD677886A02D6FCE4273F
79DC71C7CDEA9BB16ACD9A9E997DAB57ADDA6ADB6DFF987B72E55AAD9CB63AC7
1A1B86A42FA4F342A5A3A3B66274A8B3AB9A8CD6BB0B9F20631E2D854A1A6A69
A6155AB9D390649F5724EF9FAB242B92D68B633A53A50B2FBEF4B4D3CFE8CC34
7D536E8254D9CCFED9403FE7CF9FAF05A298864EAE18D1FAA7B900E4B151811F
221419BB8B5FC57154433FA6DAA271B91FE84CFDEA6FFFF66FFFF33FFF537E33
FE3D395E2D90BD13F20ABBEFBEFB77BEF31D683C9018245739BCF07AC6E84C1F
D869E4929B4A119E25B9C81DF527C364A6479DFE7922D1C571DA63D07F029933
000748249AC907D9AD95C32BCFCC9327D0826A71DFF18E77FCFBBFFF3BC6DF54
7941AA2CC713DAAFD6634FE5131C7DF4D15FFFFAD7350B1C5100F560F9F106C8
EA60D611A82DE5FD55B0AF6DD3C508137F5F6B499C51D74728C4C07CCDFED2A5
4B8F3AEA285B01485E5D7F871D76904570E9A5978242F3DE0D13A24392D1546F
6116692F7A4890EAC41C7C00F562F870C8CF157E68889C41BE63056957DA126D
D27936A0DB2E2D76B10BB28C0F39F5D453172F5E1C0AB885FB54ECB2CB2EBBED
B6DB5468B3DECEEAD070D6D97C664FE7C0E0C8B1471E4A2AA2A3A70341D01893
88CFA443AB99A7EB6B1DCB9E797EED6063C156DBBEF8E28A9191E12D36DFE4A9
A79675768E17AB5F71C5159A583D3220A2879EFAC5F37F1CE9EC1C5D5B7A7855
79FEFDFF313BAD6DBBEC855F27B3FFEFD0EA376FBCC506032F0CCEEF9EF5AB5B
DF189A5B271DA574E489306F41D7400843BB0E27CB4275A077C6685FABF4ECCA
4CA083AD8A3B4FC0798716945970E491472E59B224669A6C8B0E3169EC1C2046
44FF5826EDAB4B2EB9E4E4934F36ED25C718650F4616E6060914631F62EAECA1
C1C11298A29EEEE1A1A1193367AE5DB326C30D65E5C461A35A673A3622FF607E
5FFF9A75ABA5DBE796136902A9E252481AA5ACEA583AA3D64A4A496D34698D24
ADBAB4429AAC4BD3E74373559E434E5B19A545AD4A5BD0023A92BE14020A9107
6CF319EC06416A36869387617DDC0476435AB42F250B357D5C3E8E7284A209B0
7E4B169D8D61E04688DAB9384D2AC74EB20CD56B42F2F7BCE73DDFFDEE775DA2
85CFF127519E311F0CF11F349F1E9CE0A1F1A9D330C1FD7922D16E16843DC0BE
6D9A8409D1B63628EA9F91B7708E4777A4D193D77D9AF50AFF0FB04316EE312D
8F29F8F5271D27E97CBC07ED92D7BFFEF5B21F01B739AD64C6B178A7C6A6076C
AB346D70EB09000332F408E6D85ED686B63FC8ABCD7B8A33C6981213C1368845
2491EBFD8CE7B1E77BE38D371E7AE8A18E59992C9EBC10EEADA58C154988AA67
DB5EF8D16D894D04505C5E170A3A1DE7EEFC20615A9FA0BBAB03777278787483
D9B356AE5CA57174D72AAB9B9DBA418000ABAF4FFF6D0D0E69D5BB4AEB86C7D2
5A476F68B464F0572BC990B675AD6BC905E75D7CF1C57A8ADB6FBF5D2209F34D
9AEFB213CF5BF9E27FCDE90B1B6DF8E6E5CD8E77EEF7A63169C9DA9B9A61F558
75DE8BC30B9F1F7CB652DBE0677FF8D663CB9FAECC19E95EB9D9F0B717AF1B4B
FA3BC3586983758DE59271957A662F13EE2011423CC74F811C379B7A589FC431
CE1887A2C08A5ECA21829C511828E9A0256B03E74132C3D29F7DF6D9341C0511
48DD1C05310C437B230B8EAF5EDDD79B37411BCD1A0074CFE81B92D552AB96EB
AD72ABB969DFCC6478A85A2A971A235DAD524F8E316D6655DC59E55835A37CEA
589B34D684AC5371BD15465BE5B5A1352497A2BFA7D94C870624A9935AB536D6
18EAEDEF1B19196A0C3775530D40228F2671FAA7BBB16A0636DA6823C235F00C
BA7134C939FB04EEB7F5B6B7BD4DBEEC4D37DD142248E2C4571B5F902B8A9A45
6F5E87014281F9D121D26EA47041B682F96B755368DA0E3CF0C03BEEB843DB92
D6750E0ABD9C8C715C35ADAFD14D64D75D77FDD5AF7EE57A607307FDC9AE242F
FF954C417461EE0A7FE1AD6F7DABBC25537A58CE00B07CA5647F48062210F675
9CA19CF4FB642BFFE29A00220A3D1EF24E537FD965979D7EFAE9FA4492E2FCF3
CF8FE3B01ABD7945F00701967150CD9065CF40EF6559530A0BB420441889D80E
62DE2194C6A271719DA77B5214E997BFFCE5C30F3F9C38B24EB5B623B4C3B66E
E21AD4A4685DE44BD1051B296FF6A850C0CBE26A6A282D75419D96F3CE3B4F33
33E93C1BB6AC67070561C915226D1767419C6433A46C9A9393C7DCB2BE5837DF
7AFBC11F3F5053DCDBD53D2029561BEEE9AA69808D964E7B323C9AEA4DEF8CEE
356B4766CC9AB7765596BCEC29A563AD46ABD23116CA192C265FFAEF7DEF7BAE
5A3AE9A4933A9B8F35D70CF557C2AC991B3FBDB2F9D3C79FCD7BAF94C2A8E664
C5F55FBB312D6F385C1F2A5566DEFEB57F1D1CDD72C582FEE537EFD7D337A3BC
2EA4B519EBD2A172B53FD5DF6BABDB103BBCAC4D5D4FE728D0A42852BDB9FEFA
EB8F39E618DAE6489D6841290F76DF12BB71E03D7C8C5D0862386912559E8F2F
5367C7D8C868AD52EDC9F7DEDAB56B36D92423633FFDDCB3BF70DD756BD6AD91
15D11C1AE9CF3ADA3437A874351BC3DD19A7907649D208CD56161FCA20B5C3A1
B23A480D86A1244F1824A11EAA2DFD4F6B4C3E47D2CC93BDAD66476765646C44
1FD7CAE306816B1DF04ACF3DF75CE92DD7C1B8A79B85D744F9A59D298D0BE5B2
4177D30764CCA5188A601A6516849558B566D477DAF1710B77F3F3B8FF84F736
76242D62B8E334387AE7097864B9C2123EB10B6E0C4F28921CAF963CB44CA06B
B739B4EDB5831039EBACB3241239AD2ED983B67D1ADF6BFAFB120630A1CB9FC4
566DB5D556E3013B9D04B9D8A63C455B4EFA4BAC5DE49D7166C83EEB5ED71BC7
29FB10D1C6BAB02D4E1CC1C34C60D1C97442B7E04334596D75C2AEB2E3FB311B
D2341525F13AC5AF36EFB8337F51BF1737585FB870A1C404B16364877E85C662
4ED079DE7CA624B24B08D4DD8068831DC97C90ED01F8A143A87B1911CCF1806C
84CA0077108A03A6B1F11B1FEC97B3ABDCB03EE67F0D791C86BD4B1B2F97E3C5
D549E8D471EEBFCEAE8191D1CEAEDEBBEEBD3BD4877AAB8D538F3DACD21C0EAD
E16D763B352DFD7CF9FDCF3C913CF2FF9DFDD0F09695A1C75FECEAD97AF5F0EF
FBFA37942FD41C2CFDE09FAEE96E75F78419734637FFAF7BDEDFECF8FF42E957
A5E1B995DA8BCDB19E5606A39F125BD57614BDB8714EDE0E25CD6343A444F544
18A710DF6AD761EFBB125E3FD7B6049063C47D5B74D12E1D3EBE4F876194EE99
A1979698E1614103F3C5C50430131FE638BA55CAB975097458F7BB2B0355F138
2586484D2341B802C7E78D6F7CA32E4B439EB478F9E992A894D745B0A168E6E1
445712714A23BB41B8D945B61163CBC900715A103B5F0D06046018D7411A58CD
60728108D2178E3BEE38B911F8CA0B162C80E885D31A530091ECA1FB10198836
45486D3662016E34A2EA98D2CC0389132C429456DCA6D0B3BAE5965B3EF4D043
AF54B2CB28BCF9E69BE5C780B74C2272FB57F44AF33630EE5B1ED34E8C1763F3
3D9CD9E90B9A267DC5B6274BE82C6B88A2F9F104B9401CAB01AD4514DEFC7164
26390621D2D59477B9DD311055398FB7DC728B9EC71C93D34368A79AA964FDDE
552EC1A7CBB16E21A9A16D014F211A8212D310DA1B9CA15FD99A46D4C59A8027
02CC40FA01AA3BFC7476B91EFFE8A38FBEFCF2CB6964666ABC5010B24A7F7FF1
8B5F8C7B1BB5098B693015D3CC03CB4494F9D8638F958920875DC62061476027
28A152D406D60E16C73863C329559A21F9EE0FBE5F09CD5A523F64BFBD1AA343
FD7D61CBB71D3663C69A994FCFFFC91FBF9EBEEEDA5F0FFC7CB3AE9ED0F1F4F0
EA6D3BFB57D5474BB530E3D16F7E28A4F37358FC4898D37FE80187DD76E52F1A
E9AF6774ECB07AF4771DDD6174F895ADEF549A80A0BF9EF780030E907380992F
4B59EB0B5FACC39213AF89440B79756B69FD7622719E89E596ACF9E31FFF2871
F0C4134F7046B8884CD42BAFBC123481D651C28B9F18DD60FEAE4935816CFC4B
2FBD1498A00EC52EBBECF2DBDFFE964A08AA6758C7242A259D6ADD6D5D69A234
18D93A787569F4726CCDF1E8364D40FACA8CE29A4C496DCDB0D42DA6031D25E3
429F1095B3F9D526F2DCE936E42E1A886D861AF350B9EA5BE6DA638F3DA66F6A
05DFF7BEF77DEB5BDFC282A10F0125A56465A1F5FFE8473FFAC31FFE50038307
CC87DA2C843C8B790D4076D8E38FE1B671F8913A32BE6076DB57B46FB7D9661B
F0E2E6A1712FE257741DB755D7CFB5251E7DF451891DC996A38E3A8A8E7B8943
F6EEB0414E63AA38B5152F35DFC66960868C27150BDF221490647200C0EFDC77
2CF6D1BCAEFA82B68E36319079D4B89C179D1F079A1C2C2228847D6AA01896D4
546AD327AACD788CCF70BC35E511D390DAE178BFF18BC7D750019310B5307C38
DEDCA10041593DE09C029D8AABCF89EDD2094F737EE28927CA854403B15E8E41
836F990A2FFC4A5FBA059012C3B7CC5F6666A7107117B3136C6BBCA4EDF4FDAE
EEC1E1B1FBBEF7FDE191A1230EF9785F67256D0C9F73CC25FFF49B27FB367A60
E6AA99DFF9E7EF3FBEFAF3A1F1D639E9666BD37A1A9E2A852DC6C26067A88D84
F7D466FF7A6C706D18DBB16BDEE3C3CF6FDDDBF79BE1B150ABCF2DF7AE1A583B
334956BD9CC7890F8C25757C5693885E82953580CFB28926DEDA871201E4E471
8BE34AC6A9B067DAA548E7B8100151A2C585DF549F4BD01C74D0415A624CDA98
1AAB8D7ABE4D13E8875AFA18B8EC326083D989BE42E83D152C2D893863EC19C7
CF159B177E33A94F001700C1DE382A6065690331CE37B43D176E935B55B71991
9A403D883EE771A820C1978A6D5910229A67A38FFC276C35A2F6FAA1FB97C432
1D87C6641B2640244A118ABEBF08B18D37DE586B8A228C67155343EFF5AB3F23
23ED54961E2D6E74F86744F559A9534E3945677CE9D2A56D4D64B3CBF9A8C7F8
01666AE2CBB23B9E3593D07184581854C2C4DA60D3A832D100AA0027783B7A24
BE668CAD9CC810C94FB430D4D04E83C79F280B62147FDB764C8A72360DF5C823
8FBCF6DA6B294FB78D1FD68F42F0092C25EED54318070912A2D21B9E8B1D1CF2
569764F04211826BEB8AA76BF27D1CCFA4E0284728C776EB3411B089E779E217
66E4EDAEE822A97F2E5AB4E8B6DB6E83C1D850719FEAB8FE05498A35373C3090
E3E8CBB77DF5CE175E5CFEF4534FF67656D356A3525FF7BBE72AC3CD27BA06FA
3AFB9FBFF1E6DF56E68E365F7831E96995C6B66A867ADA7AAAD6D71A5B3DA7AF
6BDD68732CED098D553B84D2EF3479D56CAF6EB8EC9950EE78BE35F6B24EC29F
D404EE4F27E1B2E79E7BDE73CF3D3A0B31FB6358BFAECA8CD6647490D471A6D1
CE255B88E416AE9204930581AF6906887860041C48A171F1A97C02CE23FD67D8
932C071D99F473B99577DC710729AE69D69DA3E7AE5378F0CEBD4DDC4E316423
D604140F69245B6CB105FDD35D10F0BAD7BDEE57BFFA5588ECFDD853E155295E
C42435C3F2A24E3EF9649D3ED2721C8A7815D8FF711D03B544BA9A070F5291D6
6088BB72D1A11383D23A8CAC0F1C366E46E21D1EB39423F1F506A882E3A8FC8A
E78AE12D7114F7E5BF40A813C2625BC659E597FFC2B6234363240E7633819624
44BD0E607422063D55AE398DFA18E358699601E7009E2572DDC67FA9E594D0DF
638F3DEEBBEF3E6D4AD82E61C2C228035FE5E49E215FB412B3FAD13F39218869
C9AC254B961C7BECB1EEAF129720BE4C1931BD2640BBB09B91BCCE94C4A567F2
5AE47095F3B6ECAF7FFDEBFFF99FFF1911109B21B15BCDFC4012C991A00590DE
C836B1DC7FED6B5FFBEB5FFFDAE62445CE9A81CD36DBEC98638EF9D4A73E4555
2D4C1E6DD189B4A01309936985692482D93260ECA1CA0FD59544743DBC08A9CB
CA90FED351BFFFFEFBC9D994F30667B5AEEE030F3E3C6D654EEE33CF3EAD71F6
95BB5F1C6CFCF1999FCFE9EA5FB3EE8FDFFCC6FF3DF198C3BE7AED2DCF8D2C4F
CA8DA60655EF96BF3736D2ECE808CDD1EE59B3179C72FA3E4B3EFBA9CED0FDE2
8ABE5618E89FD5B96A6045D2F8DF221D2C76F58CF41C85851FD304EF272DFA7A
B6F226A95A627D4D0FFBDEF7BE573A830E1C219202B168338F059482FAD5BEFB
EE7BF7DD776B8BEA9FDAFC5A4D5D41CEDF6F7EF39B90A36EBEFDED6FEBCA49DE
4B07BE7734415C6CD8B6452181883DE018758DA36C885A9C656D7BD90C77DDDC
44B6F336A367524DE044B10789835E5EBF3732C2A154B4F7887D0EFB049B6FBE
F9E38F3F6E53929DA6A730EB1F8D220089C1EBEEB49C5690A3A1A7D0CED47BB8
9031406390180247E757E7CE25E25A1D2AF24CDA8890D405F5277D5F9AE96B5F
FB1A1926D6F7F4D34FBFE28A2BDEF5AE777DEF7BDFC30E76537B84388FF34A77
A94D464645AFF5F0F2727E6DEBBBF7DE7BFFF8C73F3615028F26E7E0A28B2ECA
AA1C980E242C95B4346777CEB6ED650A33026A8058F046319100EC5BA6000C60
795EF39AD7B0E9D1254EA8C6C862AB19779B627323DF59F2B4A8A3732713DD4B
B2E6C0030F5CBC78F1F435BA713CB72DCB1A268B0E8110258F6FD8A28128A130
01B4037EF6B39FE1ECDBF621B4473AAB0DCFEE24049B5EEFB7DB6EBBDFFFFEF7
4E426A2DB404EC2114B33D2A8251963E0B162C905638E79C7326C6C1DBCC9089
EECBC417D121DC76CA7060ED264466D44D2874A7A41BED91F58C04F434DAACD8
7DE50B69121AF5D03F7BD6E1871D3967CE06799D7947A3B57ACDCAC1F99B2EF8
C52F1F6A350667F7D6FEF9875F5FBE7CB051DF36A9BDD01CEBA9CE783A1D9D3F
38F674ADB549A99C36926737EC7BC373AB1E0E61ED669BEE78C6B9071D7BE299
A1DE9F2493F3B04FCC18B7A53A637DC94E76515828CC491F36AEC69E7CF7BBDF
FDD39FFE94AF8143D7F683E1CE385D6F1E5FDF8D33436E99227AB027B431205A
A7CB376D6611A3A4078D099E4613B8F8D68D1B097F9349D627BBEDB69B16E84F
AEBBA310C4BECDB83E1150175BF1934687426E90D1CAD11A51E3A44729791730
29A67F68530649C189CBD5F42C4F3EF9A49CB6FDF6DBEFB2CB2ED39FCE3CF3CC
4B2EB904111CA2C0720CD3080584D418741415ED2838564EF5D9D87753745D47
DB7EAFBDF6FAE637BFA9BB7FFEF39F3FEBACB3C8DE6FBFFDF6DAE77AA3332BE3
C0F4797ADEB81C9D9160A5E958EDB2CB2E0F3CF0C09F57AFD006C7FAF3EA0C2C
1624C73442D418223A13E65801C80B6354A657382C1895BD06C83BEFEF52CC50
8079D08AAC07D008537751114A6D0BE29EE48CAE7CD04107DD7AEBADD2D53A72
0E9339EB6298309E2677018D931434CB930EDE964E1BA866AA8CB129316860EB
BEA3B83E46501858C2E4E254C68990B844DEFF4499E13D948AB6ABA65ED1F196
F4F9C10F7E8025E2760B0E17B87522F8165BEB26E4B073E633EC37D34804581C
1C94A48EDAA1DE367460CC9A12E359F59ABB41C6BD31B07658E6EFC7F73F50F3
BDDD0EDBAF185AB5E9CC9E271E7961D6C632B1970DAF7E78AC3E70C77DDF4B1A
A1D29AD9086B2AE9868DCAF36963E3903C1B9290B4BABABB1BA56A3AB866839E
BEA175236B6AADDE9034EBCDC9E3DD71BC3E162E610A4D000D0E3122B42F3890
B84903EB18F79920C9C61EF6B463D3B0C4DE4E6498A45C59562E486D0DF125D9
10328FDC1E032FDEC14F0785A78A0EA133CCBCADDF6EBDF5D692652C048F1037
2499BE733ABB0841C34F386EB17E8D53C71335C1C2850B39081FFDE847E5E3CA
8AD74824047FF7BBDFC9F69430C55C68A3078FD156962431DFBBE3A5D8A91A9E
6197A81997BFC56ACC5C0E21074AC22FBBF3CE3BCBE46AE5CDF2B81D150CC81F
6C2F7EA89153401E8A789D5B12317843639CFD769C163B980724EE24F90B2FCE
2B92E0EC3153338502D6380D0DC1A42FDDDD1DA8E080C2F838FEF8E351AE09FB
12A9040A8AB6F2D3E81CF43C009E0B2FBCF0BAEBAE7BECB1C75CA91F0A242261
561658328BC5731EC60FD3E6CC720875D234F5049D6356556D0252B20C185751
F7F5F273C7693A5420A69BEB372645464F8A22D5549C74D249575F7DB5F1E6F6
5A78041779315418EE2020B288E7503115EC1E84350709C161E9E3F09ACD0AA3
05C890E367906070228B58E7444D405228D601B16537D5E23251871D76D80D37
DCE07E15984E64C293A88F36B6155B420FAE9B66A66EAD9C6A8E9B69B5A4F1C8
746D2D5E7C9E3CD366C78285B3864AE9D870AD353C98AC5BFEF8687DF6F3CDBE
FB6E5BDAD1154687B392AA66DA15CAC3D5AA0ED2E8461BCE7DEEF917CBE9BC52
E70B756DC97A7F6F773A3834286530E9F84DFAE857FC68F112A309F07EF4A477
DE7927101497E6B2D024A5A8D18B91E03135055B0E81CB125B8012477688C3DE
AD3D4E5786A7795D282045675F626362524D70CD35D71C7BECB1C40D70D0F5FE
94534E59B26409C155500C31F9D2A4F3E6322B93DD8609CD41278288A6F20974
3BDD5A6A405B172C1CD7218AEB7602B6D8622FD64332E2DE8371E09A69213286
6876F81415689506D28F26B2603164D14B13840288D846711A4F888F7C6CFB7A
B96537A04B9CD5E774F01E779C37C41518F69F61CB87224664ECF89F811D22A5
67226E60E27E96AC83AF5B16948BFE59218F7CC9FCB14569A88F835F61FDDEB0
210A4A22A11076FCC9510B9F52667CC1820552922C615C340BE0D7E52720EA50
D42007583C0018A79F7EFAE5975F2E3D2FD701A71BB8370EA0C3F136D35C9D28
134FA613D619EC1F3D3D5D85A5AF59CB224292B4BA02C6A0CF27135A6AB446C7
465B212757E9EE19181AECEAC91C8534AFDE7C468EB96EA4F56B34B6DE6EBB47
FEF0876C026BE3A765BC19D348AEDED20085DCC61B6F9C09CAFCAF18AA3E6C56
57F80D68759DFF2BAFBCF2ED6F7FFBBFFFFBBF1B3425F313A27CFDCA12CD303B
A439664E529053526148E095240437628164468D336697B446DDEBD60D757549
138C2122F216EC61CEDCB92B5E7CB19A83BEB41FE40D69E337EAF59D76DEF97F
1E78A08213D66CF6F6F50DAC5B77C8C1874010AF61900FD720A98F931BCE69A4
109D5C9656FCC8238F94BC7BEB5BDFFAB39FFD0C4F4BDFD1939219E23B3C5DDC
8E4257D6AE90B94D51159FA01D99071F7BAD3E8919C2CA9AC90CB63B34929944
6B57B3BE8D56736474247B163D75BDBEF1A69B3E9B872E3B24BB8786E66FBEF9
D3CB9695CA890B79AC72D25C61190946FA0764378EA375462CE8B1A5B007D113
9C05833DAC0C90C2C81DD62E2D3AEB4ECCF186A2D300FB0A64DA79E79DF7E94F
7FBA55B43161F698222A31B133600470A502C7D3DC098CC186201932CB2FEB33
C06F8E10B485A4903FEE0F8ADD3D77EE5C0D438E8E569FAD08F9849B48F35FA6
C2DA85B470ECCD5820FAA65209DA429A014C617BF91671DAA8E42F4951389384
28C0149E9808F4698D793BFC219AC075D49EAB508017683162A413A920C0E5A8
01BA6D638B68BAB457750BFD332EE3685324A130296C682605D7E94BB5F75E09
6B4227096D3AB5BD8975EF05175CF0D9CF7E960DCD623BDB161BDAE9FA486400
2A7BECB1C757BEF2157DB2DD76DBFD219795D84414DD982357CF80A26257A199
51C8F00198F8856655FAED073FF8C1BBEEBACBF50D3C0B83D73692F7AAA9FCF8
C73F0E50C4111E26306B12D562D9E84F909A27CEA9F54C9736B25F6DB8F146CB
9E7EAA5C2A4B52D07EB04473E0D1D18C7BF2E9A767CE9E7DF8E1877FF9CB5F5E
BB7A25A665A60092902BAC2C44363C38627C144475D68813E1281C392C028ACE
C2FADD7DF7DB6FBF6F7CE31B34367AF4D147A9E3270F44F7349D900F7DE8439A
7637A00E459A9DA033E1291C6D0A1DD1BEADF1DE9C3D3927526BC30D37A03F73
230D9267B57C21D288425C6274F7DD77BFFFFEFBA514E76FBAA9C6A671683D5A
8DA696400B04F8952DAE07A739C9ADB7DE8A25EE4256B68A3E71968854F65E7B
EDF52FFFF22F3A9FF432E43A945C4853B2810F3DF4D06F7DEB5BF0136022C4D8
50DD54571E7F8AA8D1205F9BD199516A8F35EA3367CD7AFE85E7F3D07898357B
F6AA952BBBA47B0606FAE7CCD137572E5F3E63D62C69E5CB3FB7D4DDA9D86999
2C6E85EEAE9722661C01AAD25C81112263DF36531BE411BBD8C21A59AC097FED
6B5FFBDFFFFDDFAE7C8C53A06D3AC0250E9A2B0D80E1915A78DBDBDEF61FFFF1
1FA1E88A85CFA7EF6FBBEDB6B29D4DE1890AA17815A730CE45992C81BBC39318
CFAD7EEEBC08C340CE72609D5A43821BCD4837313DBE8EF3FBDEF73EA2B2FAB9
B6B724C6FBDFFFFEFBEEBB2F268F21518C1B44DC1209609334B6FA8917E15540
6C6ED4BF83BDCED2D94B4B724E2463B1DA246F7CAFA9CC730D5ECFFBCB5FFE92
24071E033A350E01A545658F0F2977E468F3CFB3CE3AEB339FF98CAEA021699F
9722AEC989A91DA319517B5CDF60F1F1F260A8E475C0741BE9ABDFFEF6B7C09C
AD000C8430A4578396EB20CD461DE39E7BEEA9B59195ED09F26DDAE2B3FC93E9
6609636C00263F064552F408B43FF89AD7BCC6690372772ED08DF14EB6826D6D
59B17945B1C47187F323245345B64F1959E048C8C0C04BF15648B0658F6793D6
CC909D6F7BFBDBB37CE9DA358417FB66CE2857AB2F3CFB6C4DCA6C7878F6061B
10C75F95D7F874F764915C870E25266A1DD5B1916CA577DB6DB77FFDD77FD587
B2CECE39E71C4CF2363B9181612F1349E0D887A25A1B4D63B081775EDC510B2B
CF612BDC2CA7B9305463FFCCA5553BEDB0F3FF3CF83F9572A5D16C6CB5E5561A
B00EE1B3CF3D9B26AD79397DBCE6B7A7B77750673B375E86060737DA78639D2E
29805A9E95C21E191B190D11ABA584B57C02ED3ACDAAD6514FF48FFFF88F0802
221B202CCDD841660534611BA881CC3C8034668FFA61F65528C2296EADCA8430
27681D10842C31FEECC69BCC7FCF7BDE73DF77FF49A3CDC2AC49902A06B2B99A
D45FA9D49FB72D1A1A581B474B0865341B2D34816EFA8E77BCE3073FF881DEC8
C5B9F9E69BDD413E0E8C50C668961E3D23AD8788C51913198AC88611DB7A4F6B
2688E9DB3A11C59A009333EE90C112C79C893AD1FA82D674EFBDF796B5C4AED3
CE5CB468D13EFBEC23DB5CA7BE14B53EE60B080A8DFC84134EB8F6DA6B2D253C
FF46D19065693340412E4DE44D61A874F80009CA0F012EC25F1D8AC80C3FC78E
C64972793FA2D647893D1F631FCCF3C3309C21D861871D7EF7BBDF7153493C8D
6AD75D77FDB77FFB37A2A371AA63A2D06F53F6B6EA74246912C7548488A98C16
725A746A98354E4979FABD1B3D05B7A6B6AB8E09816860DF8E7C84099E81E3CF
719C302D60FA291DEDD934F6A9B3E046DE1C71A2656135C5DC619E3B64EF9563
4CF144BFE42CE7FBC67EBA3390268C738B63972B7B243A24C71F7FFC75D75DA7
3F6946FA721E34C814B3A0445E5B1F72AA5BAC92B8342114D15B3C3B3C182B0C
5B040C236E87A90126055414E2DC7138D0F050B3D5DC222F6487C26C9CAA3709
9D5D5D235A983C4292AD711EDC9764ECC84D6C962AF3D10020CE98495105A180
C30E3B4C7631227E529FC034ABF8C8943EB2B381AB4334462D8C46ABB9E28463
223115D80EF8E3B4DFB2F2962E40E0BA9B47618D663FDC70DE869AF9ECC137DF
E289654F7475760D8F8C87803512E2E61CA45A47D7D8E868297726880B650FDB
DFDFD951957466D54CF1FF810F7C40BB5FE3D4271ACFF7BFFF7D363DF68B5647
F68E13B6AEB48020485B45B341E2C4BDA6350FB1A0A18B00C64D9CD6CBFF586A
7393714CE7CD9DF3DCF3CFA5456087E847A6841A753D57E639A6E9BC3C4CA72D
D591AB90500442CD2622D334A4810C279E99FE7BEAA9A75E73CD35F6FD6DA9B4
250F80A92405AF2466294E1B61135D961A5176BBE68DD434E54E6CE0890001E6
07B1A809D14FD8333022404AC189BBE5965B162F5E0C1E84CC01BA1907AB55F4
F36873F789CD82DC3795106FD29C7C9E101CFE81BE2C83ECB1C71EE349F93014
8C35640DCD3CAF275DBA74A94E3D95D8EC014C34DE1318604B3B695C2A5EAD82
D0DE9930261C1EFB56C18D8A5D4B7ED57941AC5BD31CF08971C36D42D26FACE0
D388B080EBBB5408E917A71E35090B172E945481CF2644E5DFA65AA0B6EEE9A7
9FB6FE7658652AB5E4C214624D2441F199C617113BC8506283B1780C8B15B3E1
A333F406BBD270782289783A5894D6786D993A0E00CF4C3A5B8343CEA2D90880
3824DAC6D86C088D0B7F628DAA379AC7471E792499822180B88A46A25BC3931C
3B31C48ED61F6D29E605224F95C5D3478774FE3798331740822EA2CD9AE5C99B
E394671A275D3957AD5C397FD34D316031528C9BCA7A8897324C141E1F1DC710
F76D3E81ED47A4B3E90D4251B40C265ADB02DDE62E5D98BA2C8DF6779AF754D9
7AEBADE5997A56B510920EFA3C07777501C2239268BFB8B7670621236067DA82
3003F6F6751AD60D1A21E4688D6DB6DDFEE1871E9ABBC1061AEDB379BAA23FE7
950AE9787C8F7A4B881249D9998589423CF2402122D2094585CA2EBBEC227FCE
69BA647D123A20403A72644A352169D1409B1D4B0B5FC484245B28920D0E6E64
5AA43EA299951C47C319DF59EBECB05F257747EE8FECC4471E7E78669E2A8FE3
FE8D1C815B4A4ACCADB696369BC6A9E7C2F76DCB69C7E52CB877A45B5947478D
DC3FD26D64102BCC2A9845B70D9F6896A6055F7F88020EC43F61093520D5F38F
660D79E5A02EEBFC6A8832BD56636EC8C56CB3994B05F521418C105166B27071
01B6076FEC32A631C68189CB8CA7884FB7F3341A338F46CEDFEE4B58BF515A1C
84E4FA7CA2F1B3C41ADED9679F0D9F075E6C4C791B7BCF13131231609D2DE1DA
9436BC8CAEC323F3B5CD36DB4C529E7C95C6AF69D77B040877D47F75D6A4A435
45FAB9213331F1866D778BDC58F270474FD7789E200E8121563872606FE15AA2
6E9058AD2EA1D9B9FDF6DBE10FD1970F38E00039F5CC1106720C90681B53EC5E
E8D6F67921D406CC4E501ED1693B1DE3D485AC495EF6A52F6B9BEA9869843436
78E73BDFF9C31FFE502BDA061DC10B7197E0B4E889A6EBE423CF6C4F7982BFFD
ED6F91D75876434323B9E53BDCD39D91FF8C8E8D66FEFEF050474F6D546B993F
3E11806C720732EEC9CF7DEE73279E78A2460B7D2919A18ECEAC4F8BCCC9240F
476416F1B8699949A24FE62FF0FB2C410C0F887D02377D456CB9BB833E7FC73B
DEF1A31FFD48C3D05F3515648C5D2BC4CE3671266E10D3A8F70B162C90699621
23ABDD0383034948240567F4CD58BB4E9FE445B0A379C5BF642B8CD61A1252A0
595FB0C582C79F785C932093EDB8E38FD3DDE5313CBEECE99979373A49C3FE1C
962AB9A937B56A2215E22374EDB5D702D3A6638C06103781B186764C83E0D8DF
FEEDDFDE7FFFFD780C36B8FC654011AE1A053EC05FE7CD9B2743415A04E72353
931DBD2C2EEE826EBD7ACDEA6AA55A4F4765AAC82D1D1C18E8A8758C33ACD43A
D6AC5B4BA84447A09A778824F65DAD758682553829E0D48D8C37AD1B91A7F585
7917030B49D496D7B598E6430D55FB5326828B579913375286A910E2779287A8
017080F171B3550123A99EF4B5AF7DAD4ECA0D37DC40D7DC187305B736CD5075
7D663E2D0880F1DEAC099CE50A05066FF3CD37D7C6439001858AB3050EBDB2C9
8904C264150AE683366E027D47CFAB23A6371A955302D8B6AE07A6A7ACBE70F1
C5176B75502A982FB120E2657C011E4C4C4D8AF642CD10A831D12C9ACC91A836
EED25819B455D71284777990C6A35B483EC88C78F0C107B1423C4E9F0E7CC17D
F6D947024DEBEBF229BE307FFE7C4D1D851ABA3854956D819C787795D6273F0E
EB03ED325B9ED02432252D00B9FC181C8B4613C3577D452D83064769F8873FFC
E19FFFFCE70F3DF490C5565AD4B8C6CB1026E017750BD9E6DAEE92597BEEB9E7
9D77DE89A5630669C3390C678C7B1187A8041C83C834BC7122CE91225787CB82
960B16050AB3C11013F4D8F22BE73F0C097650B3D524561E4A0D192A1DD59A1E
4F322E6461A1D03FB37F646C94C8FBBDF7DEFBFEF7BF3FB2AD4A84144A792224
4325E663EEEF1FEF3FEC9A007B8E936A021F95B8D112CF0EA096AAEF91FCC5FE
A3FC9292CBA468F3C99549CEEBA6D204C45E1AF5807091269004E44DA60B47D7
7575770E0F8D7476758C0C8F66BCC7B5BCDD7477A62DA406F21E36999CFAFA9D
5FFFE8473F2A537B46EEA74BE025B0DBCADDD1AE688D85C229D4E0B57DBDDF58
598C1AF4BDE4208483660E671393D093D0D44FE867D2066728E71DEDB5AFC0E9
D33F8E373A3FB88C84238606B3077C696F27A52C8193BD6B68BDAAD20152C91A
76B3552D67D2AAA32BCB76701C6EBBEDB6830F3EB860EB7B2EB05E189E059037
6D8D875E8957304888CFD896E9FA8502FCD325510E98A0F84178335738DF3C2C
E92897319A7B7CA226B0210CA74828A225188C268F33F339D45818F86EB36AF0
7E88788A4A45134AAE8F89CDD56AB9E724051C8AF23AD21BBAC599679E79FDF5
D76BB9E5A482D0D571D06F354E3D29142C0CE6E4934FBEF2CA2BC903B555AEA0
236FBDF55699A4DED5244E0884BAF42F76F7F17E0E3CF0C06F7CE31B0CC04D78
783436218937CA6635249D146DB90F7EF0835FFDEA57CDA01726F804067AB905
02F631FA1B20462862B6CC98DD05B4821BDAE83B700471049893F1DD9BAFD469
A79DA699D175D03D161AB1D3691DDC768826C91338DEE28C048C98F6E062AE3A
CA32ED8968ACFA39E97EC78E4254499B4EC0B98788975F3B46DAFEE8A38F9632
C7C443F497F2969031B93C2E703C18975F4A2EE8CBF616090E72BBB68CBCE192
CC42186FB154721571FC083DDD7D834383E3D25F4F97FB073293D35A5A971559
CDD47BAB5EDF74FEA64F3F350E22825EDB016BB648577756BF3E1AD783E4009B
C181B540F7A8AA8B4BB7DA5EEC63C27C566C863037C7B13DE3D1339F40D36384
C2CD8F6F614512F9959559FD39FEBA954BE75A87DCA0ECF15B23DD3D1D4383A3
956AD2A8A75DDD3993E058ABBF6FE69AB56BFA7AFBD60DACEBEDC9D398F94425
E50CC521BF6706EC78F8C8B9263095298621A7C2DBCCDC8D3E870E376B62B555
62CC4228DAA0C3D46DB47E29223B434FB856CB3473C524573A3B3A338468394F
B88554FE41169B2E6765604939CBF1C89D968B94C5F186874A851B8EE56E3685
52B9FA92751CD93A7D7D3D2833E36142D4196922A68EBD4DA434448584A48239
5FFC15C8905BF184A81D3706699B2CE085D0E75CB010C475632B849BDA22498B
8A8156D12A15B5E11631C616229BBEF8C52F1E71C4110EC7B1C7162F5E7CD555
57A1A19DD820A08A7D4A03033DD778FFE77259D2EDF8E38FDF79E79D1F78E001
B601A594F8673092126A0384465493BDED8816FD9A986D6482FD3052896E8D60
0FC6C1F45064B963BA21FC33E33526050E8522AC6D4D40A484C368D9E89DF0BE
F7BD4F3E2E19113345A3CBE31B79578422AC44B362199AADA27B04EA27D60448
4E07A088F66B036B6E2FBAE8A297600E06239BE52DE62728458CA4AC373BD285
18B286B41E6DD0A5F83531586F04882300867BA24BAD2D8C74264D6FBB387E4E
1244FA500F76F9E597B303A4B709B485A213850D0110602C06F113CE0C19AA38
5E69BBC33862D6D255052C337B9D3DE40EC671D8DAECB59EA572D118846DD1F6
5C4E31B5D989A1A0096360445135E0458B165D71C515182C388C567E311938FD
9E9804E43E302D8C20BE5989FA52C471674EBE25755A10A1E452723CD6B472D5
B85920E59185C85BCD18C29B4625DCD3BCDA82B94941E50654EC939FFCE42597
5C8216071005B880D16A18AC9D8C260CCC5060CFE34D1E9B93F8E9AC235AC429
7DE3DF71885DC4D4D697D4E1D734A22F65C0AC82057D9BE13F69122B14990000
21443BFD8C4024E0AE6084694EC9E083E32E3AC86B9C510FD841512AAB4D241C
A2349B4FB1D74E3F39E69863AEBDF6DAB85E37E60E88ED09E0822ECB37576E65
420798389A47E49A334EE9282E17462B179707AFF7B690401C2C59B2E4F4D34F
77D701842FE252CFF8EE77BFFBEFFFFEEF4F3DF55492D8F4714C8B3A1BE3BB08
B5E9BD2E45EF399B5969C10810A21E32F152A605ED8D06499794CB2EBBEC9C73
CE891DB289AFF8E7048B482B86A283824F9F21B9EE636854CB19679CB174E952
54AF31F4965D063E21EE40573309D44E7116B09380F38EEF51D7F11AB1134727
62B16E0A27D9381A3DCFAF89A0D81D3C93E5053A10591057BB58973A9D827988
B8844C4D13A46B920C490B9AAA302149C5EC68DB690C92FEFA891E8CB8B03B54
608EB9138E036DB823543081D54B8B4ED32E991947C2D46AF2610F39E410BE03
87ADBFCF4F5854DD0813D542907FC6505FEFAA52413AD46618C6600FFFD54684
A6DD9B23F634B7DF7EFB471E79C465356C8865CB96C1746DEE2330D70814FCFD
1809E7E735CBA34CBCA38E3AAA1435C3713420F3CBCA15D2D7BCE4198C6BBB22
F21BAF544C3035716B85084B132B45F7B6656CDAD01A36611F36378A0189DF2C
DA28B91E98A315C7DF90D4168BA843CDE4E73FFFF9C30F3FDC09246F096B1AAC
25D2D7566FE06E9DEE9A6629E3874D26031D7200350C4DB8CD4FDAD0D3293329
A84675478A9208937A9E3D06A20A7A0489090D98183A211DA682EF1B69131F4F
04822964744764AEB90330656475699BA18DC8458582883766EA4D22AA8C899A
C0EE29A009EAA462FABF56C1FD17727FEEE0830F9604E4E46AD107F217C294C8
15F306C1A5F6BC159EAB73436EDB41DBA7FD43C6487FD55D7EFFFBDFC73EA821
8EC9045A24EF589F147E05B5DAF4B5C449444E85D2D5CF4F39E5942F7CE10BA4
859D9501C8605A8E52C44F73F2C927CBFE83AD47DF2164241187872A597FD34D
371D76D861C8615D2AA63A0E45B137BC3E9A8DACED920B4A590013CCC5E7337E
0047AF6C084CFAB2751017CBD935333CDC51B671B152AD822771BB2E2BDB5812
1904C66CBA61005DDDF585B7BCE52D3FFCE10F39F6E0976293E48E3BEED86FBF
FD600906C109798B130FFC13290F43990640CD7AABE843690DE707B447157322
926347235AF424059DD154E2A06DDFC49A004BD0A902E41A400B9D96BDF6DAEB
EEBBEFD6D2EA43976B5A9CDD75D75D1FFEF087895A62597B0C31E48E63CC99D4
5DDC89A9B43EFDDCF8866E36B3F6B9F5B16AA54AF8785C7C34EADEF1AD88BD7C
7A425DEF461F3C669845C7EF2163F99EF7BCE7A73FFD29B93E07D6CB053BFA97
BEF4A5830E3A0895309EF6587FB1CC7D96165D28F0A5DC4C31761DDC03A32DF1
EE6809C598DE996D154C13C5C7F44B4F865CCB77F6D9675F73CD359A52085ABC
D6941D68436A48407126BE30A8B5D53FF6B18F61A8E901650E6B7A217674996B
5B0831440E191B00F742871D15A883A99BDADD84FEC4609E1D77DC51E6972EA8
EF13916057B44D881F1FBCAC5CB7B7BDED6DDFFDEE77755FCA7A1120E60DE576
E830DDE5E69B6F3EE28823F485DD77DFFDE73FFFB91E04DDC019BCE8A28B162F
5ECC83A0243403B20EA5622FBCF042668C0B3A5DCC0FC1C519B5614D10D62FD1
8A1F81600BD69ED3246F7CE31B7FF4A31F4D73A2DB9C42EF43F742604F1E7DF4
D1F2831DC106986B7619278DF012CCC767EA1DCCFF10396D9A675DBFAD10671C
57ED1D601B2444DD253D62CB23843831FA90BB69A170AE5D436020813B2EC5AD
741D6A888FBDF71FD0111EE0CA2BAF3CEBACB33028DA08DC3D83CE256AF6B527
306D205DE8CD5F66CCD6E79A085D0DB35D6B06864116B4BC45C77C1C2332E2CA
520371D3A6028DD397494EB6D9D5F36951F08519D5883AB55A8E7091893B6C62
163114D12156CAD69CB53D6B8F73AD75D146A1925EFFD484E89F74FB81419E8B
F0442EADB4207044C2E932373D371F4E52109DEBF03FF0C003DE395867561553
812BDA5E4C722C28B19550CF887240D30CD5EA5F1F82532030A80797C7F6F0C3
0FE32D69F2B53A0E033A046A9560896F881AEFF9103FB55C340931FAD6F95EBC
1CB6C4C488FF9F5CD0892FFFD0540D2EA4025FCF604CEA3E5565937EFB8637BC
E197BFFCE59E7BEE79EFBDF73AC11672F748D7A13C1B0563DFDA8FDC2A085A28
6ED0D7627E30542CA49EDCCBD25347CC4DE727729A4EDC09D89D1C9F071F7C10
CDCD23CBEC95F9AFC7A4623C297A476BF9A4066411BB3444B3F1894F7C02C650
2E2BD5E502BD361104AECC0B41EE8D0D568EBAF43021B8B07154D37E9EA370AE
8522BBA0F7DA9C14D34DBABE939E7AE7143179B587352D7273F96BDCA9C67417
1AF379E79D27DD269B40B77EFAE9A7E324B9C538EFDD6F3114FD89172C58F0C8
238F68A85A44DD2E715A159B97C87569FDF67EB126306AD598BFB0BEADE7B0BB
AC926DB7DDF6273FF909AE3D6A40BB107D535ABFDB5F7C7E208AD18B7DE64DEC
3DEA54953E01D81EF74B41C6C9E4D1C695B090F920D54AE4CABB199881C58196
01D4B9DB21386B64A7D2E9656D3256884700BDAEFDBACB2EBBC8BB04CB456C94
6570C546ABA02D7416DDB6C0CBD704A5824899F0BDCD706C2BF894F4F81A924E
D139E79C034ED71C76F7DC738F4483850BCDCEECC1F08CDC820008593502A9EE
3F1122549C46224DF0EB5FFF9A1C662C52BD615CFA388D4FC0AFE20094AB671D
3335D0904FB4F4501A5C7DF5D58B162D42258340D5AF6EBCF146C90B1B0AB4A8
24F0552EBA04DBAFC7D8345C9563E39026DA48DF916CD57E36F1AD0D110736DB
C2CA7E9C57A409E2661BBAAC9E8BB027415E3060E5A265B9CF4E9B7C490BB210
2046F20C64715348C138E3224A6A2D8DDCB7730C2AA93F7FC9D2279668D787DE
4D2E4A076468AF313698CA516FB2364D106B4DF60CCE9FF6705BB98056D00DC2
9CEDD3B4481C697E8C3DA505AC1B095090A5DFD2945422C5A40BD661ACBEFFEA
07744F3A33C22613B812084DC3A60CCE4A72EF831FFCE0E5975F3E8DA66FDB12
69440F1772B6050DDBF51658CC3E5CD67FDABDB68D506058D877DF7DF73FFCC3
3FE0C8121AD2C21D77DC7137DC70837E8890B7EB6F9E9284888A39D65DE445E8
60A28462AEB553CF3DF75CD9EC1AAEBC122423E72A2E8B9754922D463532A149
E4A30C072D5E5C6866E168CF2EE4A1435D194A45969919318912C74FE3D197A5
8477DD7557ED57A78F6C01918DA1A4882B487C132524A669796A43C608164B0A
3DECA1871ECA352529324282DC8371DE4C8627F340DED59571CEA0B46DA0B07E
1A6AAA575B7428AEACD116D4C835C364086CA4A779E5A45610E9BCCD36DBC892
D50F499F26050D43887250B68243918E7368F2FAEBAFD7361A6F7117110C8C6F
E224CB3FBFB87C79678EFDD02DAB79826770DD409CD161BD2C62267D4C075ED9
E50E825160A5277AF4D14735C9DA5D18134C2C54E100459C70D31B5D445FD314
E94F92AD74E50D79E82629EA66B823107BDD57F6C1BEFBEECB7808513A91532E
DAC74BF138B58EAE226E46F4D65990F2FA3D20C3CB8E0EB1A5B540BA9AC60FE6
F2D4534F95B62364CCAE8B0919E39CBCC58DBB68988C361449635D99FA9B33CE
38E3820B2E2095355E211F99653406E7C81058437FD06027149979D31213BC72
8C51C70DC1CA5FDBF243B14F003384C6C3A85CDFA05503EEEC1A371421EB889B
6E563556168B27564206C58108A0F2C0B00E4E04DF8C13B3A6BA69AECF815F8A
3AF25A3FE15B0358D27DB15DE21E9613354188B80F90D7D89DDAAE1448850224
C6A974ED3AFB8D2B98AF9B53C3F078705A41A445B9BB3E34F05A1FD20F391471
F53DF6D8E3DBDFFE761222E65B6D740DC2BD1D26DDC13E03471D75D417BEF085
B07E4B190AD6296C611C071F7CB08C11F4415BB7E8894693FE79CC31C7C89A33
FE0CDE151223DEF1F18BA40A604AFBBF10B6E85962CE19824E95F53B0C3B77E4
DC038A4ABFB5942788AC0B12A78E0FAD83E6488AB468DEC9EE47211BD7C5C9B4
DA0B7F56C698424D7B4BE85748D9C030D8C03738386E17A1F38CB505E6DAE49D
5415C4358AB48AD5D5F4DF1830D3B670E56AC5649099AD4DEE2107E0978B86EF
F687A6890E794EC0A85813F8B4639A983AD7B85B7EEED010162E916B94504CE6
EED3CE1C3A18A89F6B0F13E1D4F59D3432DEC60208B9E3E8991386EE7418234F
C214E6FF343E018D28ECF3F1A11C5C092CD7372505B687BF9A443A599FE59F84
304161891863726C602613BA48968BFE2D084DE2AB9220A416ADD1D3A2EA886C
B68E986B865B1123695C843455742896AADCDD15003EF5BA8E49C91C6E0AEB63
96AEB9E69A134F3C114F9729620030326912E283E06DD0860B60CFD8770F51AB
12BB806DFB19CDDD56393C8D85E77D1E26707183856D144DC09024B6C0084282
044582EB2910FD76E6F465178B407022917EDA69A7C96A97906C83BDA1C37491
134E38E1B2CB2E1B17405A69F9F83BEDB4D33FFDD33FC9AC7687F4892852BC4E
503D7AA36F6A8FEA5C115D89E92D5DCBAADB3BB314724B5F6EBB0667051B4F4D
A96004F3B4828489A199E67589BBC1385181D79FE4456444F089A81A6B4C6C01
3BA82D7BA389938038FAE8A36FBBED361319528A45CD3015868CD9A428EE6CDC
165D4112F198385BCDA2ADA635013EDA2B4291B28F991F3D05A1701F8C187FE6
C01AB4F504073C8D86023B7BF6B18F7DEC2B5FF98A134A1240706F00DA691514
7EA1704D3217BB94D4C7C6BAB547070793822D352BA50EE378B050B0825B084E
7A421CC6F1AE480AB0907782F37B6C2AFEE97D6582332699DF1A5DEA0727F273
D249275D71C515AE5DDF7AEBAD1F7AE8A150245AAD00C879B68A4E189CC338F3
6CA7CA278587F5FA8629A24353CD43BA7E7758AC4283119816EC7D6B26BF8FD1
D80E7CE1AC58EEE04F68EAA0E8C19E35F709AC3EBA979114508122EE594D9C7E
CD8C5C8ACF7EF6B32649E687082956C111AD897CFA6DD1210D921E679C29068F
FDEB56485E1494EEA73EF529B9E9341075CE8C363821420420CA1094CCA13DC8
581F1014417F9039435CD8A20A51FBC2B854CDE15FD65DBFA2CE792A4D5F8ABA
E4C6E10157ED59AAB8E60BC560D8AEFE79C00107DC74D34D717D1C726C9C18A6
782E0B3AFE84C5CCD3817E2485694AA2977C764C421286C488E25804B93567B7
318ECE3AEB2CED065CC2498FBA8965B8A6CE216E0B32C8D91BC60025AABE4C8C
486B06D91CB4E6B6B89B45BB38B092C0220914B8D8D82D8D4204D82A15CD5AE9
531A93AF79B1A9D1D06E7695475A947D1A260C0F22556F249CBDC6362BD2025D
67A9818585294AEB2558F0B424D61694DBA0B7C214F903B62CB52A9602AD8230
CAA9BFB6A03CE243A3D5B0ED3CC59928FD5CCE10FE7E5CEA6CA18621EC9A1749
CF471E79C40906B0982869026EC48E911A7A4C902A80E249BC4B22138827CCC2
B3C4E9B8B42853079B180AC8470C3943BEDB5A34773C45D7B83846C2585B932C
CD565FC3192E551AD58E50190D834925B41AA1BFBB6FA8BEAED63167CD504728
3D33B327748E740E8F964B616C755F3D24D530DA2A77F6A64375DD7E5EF7CC81
A1D563A1D1DBD3FFE2E0F0F6BBECF8FB877F13EA4DB9A5A5566560681D68664D
820606A0CBD8D6892FF7FF0911119B03BBC8B5B4A02423E0C9EC51EC62DA1807
3430B4F19FFCCD381F4E749B9889793E6C2633E1FC37293AE549891E7AE8A148
10EB2DCE23FE25F4994077F0AA652F2E5AB4E8F2CB2FD7BA7096193C42805593
44D6E9D09725A9DDC0DDE968A390D9E7F8C1EC497EC2AE606E5B05FBD09E7BEE
79E38D3786C299331EDF87C5E971C054AFD67E8651C69906C3A34D82522A5837
5C6B6641D15653094619773FC94B6869023A952581F4E3FC1E78E0815FFBDAD7
5C8F825474031F0D9835CD524A210FEF800B0659CF20489912A97425B4EF67C4
05BBDCC58D1335013003C2D0A83B6C8A52699C998BAFC598277D5943321EC6C2
FA4B5FFA921C1972771CE3B803AD2EAB19D47BA8DFC0594F0CCE96D627A90F51
E13E3BD2AE37F785458E25D1F479011CFC39FDF4D3972E5DEA16CD1C30AC0C7D
D99C9AB68BBFFEF5AF7FE4231FF182B9600D167E0BC46432063D7F18EB6F2D99
0E1E85249A374D29E10B1209F89BCDA85B4888BC602772992BE7C65962EE8524
62B9811568A8FADADE7BEF7DD75D77C988FEC31FFEE0AA542CF4B8158915F677
BEF39DBDF6DACB6DE9B055694EA25922BA15F3F0D86137E06776FE7AF4D147ED
18B11094A71AF916972B1B298F46E1C15D0896A5E33A2BBDB5DEFAD058524942
877E9C0CAD190AF57252A9A78DAE39B3375CBDF2F14B967CE2B4C59FDCF4753B
3EF5C707DF76F07E9DD5CE952FAEDA7CC3CDBF75DD1743A319D2FC0CAFC903D3
A9ACE6D6576EFFF289271EBF72C59AAE4E99414D87D74A052B78DC807EE20BCE
3B769D010B9A6742AC4C2980E63DF6D8E3BEFBEE8B03C7683B8C18AC5A5220EC
D536CA1653152545650CB4DE243CF06291C85A71C8AE817582E9D095AFBAEAAA
534F3D1515651E345D7FFFFDF7BFF7DE7B43CE7FE560E676DB6DA743CDB162F3
EBEE1FFAD08724AA0C167094C951D3982A06D5620FCFD5649CE8D87372B1A71C
7A5D90100A789052C43FC17EE0A18E3CF2C85B6EB9658B2DB67855F633FCA613
B36213318A805C31DEF5432998A4E8360CC6EF6FFEE66FEEBEFB6EEF7947B426
DD3C84FB9CFFB0C58038D23E3CFFFCF3B564F64D4D4297848847C84C8771D6DE
A87C82B3CEA61AD481C8F0F7DBE417A82F2873312B4855DB2C85C092E8B6399F
BDD88E7F618AD26FDDE2CCB84C3DB09650B3F6FBDFFF1EEC071E653C18F35598
9E3E2D10EB684193F5B3AE386B218A783A996CC7595FD611A5EC252EBC34AD3F
0BE3D1E29411E03B2F7F2126C8E95BE9BAD06F2A4C11100292313288162E5CF8
E0830F6AF381290652652D8B0341FD08A6A57150060EB2F46DCCAF3153555C27
8C172CE547779110D5F4BBA74A8CCD0F514B482D8D8E9C7C5BFE9946C51C71FA
C1EFE3E3ADD9D3F19034915A92CED35E8717C48215F63DC265715DB4CD14762C
9B79DCF10DD53463016C04A9BF0E19FDAD9056435AEB6ACD1BEED2591AD145DF
F8F6F70D97075795566CFE9A6D9E5F99052E767DEDEBFFE7D7BFD961C1C2BE5A
ADA75CBAFA9473F4C55277576B6864ABF99B3FFEC813A114D252F98AABAE3AEB
B4D371736156D0C849694C8314201547C8D160364C4888989C32D1A54C0DE96C
41889A6272534E9CFE0A8B975E406FD10A1C402C36C25F7641E2A5216082BDE2
881CCD0D015C002A058B0167A7D15F2E5B6B0B5CD0FA8930B26C4A6D0C9D087B
09B10EC03F6063300F1057E01C1841E0048FFB373021FAD321871C72DD75D739
1443FC20A6348E8DB9FFFD7E46FBC6668D1FC708469F7436645A5049863C3C03
D37E2818A741A96CB3CD36127106A74C7C115D94C57CE5955762621A2106F218
3A2F5DDCB0DA7161C5A7FA879CA3871F7ED8602CBC3C4CC2246A5A8BAD814CE7
4333994CAA091C4EE1524EADB057ECC39A1E968524F4C676C4888B217A7A1EC8
E8A94D6F16EDD2901A7A90BFFBBBBFBBEDB6DBE2702D217B5FA15C34AD462B30
C266D12982E0264A4BFF949C95C54DC024E64F36475E4CFF62221A142494B3AD
9CC5C86DB263DDAE2587613FE4694C3D1405A5B1DC8F67D2841034BD623753ED
295D2B23F1FEFBEF7FF2C9278DF49786B03E609BF2D4A4B958BBD89F43F46091
E9706A7F9B98DA478ECC157AD1413052B8FEA70B23F54F6D62E927FD0AB24273
C248B2EB797529BDE120C53A8F179BB854F081832ED775E4577DFBDBDF2664A4
9994D5A34B71593BF8C6591AA6ED5A07836A92B15AA5ABB4C1E6B31E7FEC898C
89AE2ED7A0D2D33BA339501BEE7F6ADB83E7AF2C6DB566E59CFE4A6B76756874
F59ABE5D5EAFA9D648DEFE96372F7FFAE98DE6CC9C37A367664F7757BDB7ABD1
3866BF8F77D5437D9D9CA7D9CB57ADAC74D71A4363EEED1C26C42D27BE580B1D
75EC27E670871D7638E8A0832EBEF8E2185BD9466A822747BD24B5236DAC443A
2CE87277F2B1631AF270B396491240A3A5851C7E8CED2DEB24CD1B3D9C11675E
4D930240194BE339EEB5E5965BCA00C23642078CE30B8A1EDDEEE086D149B025
6BF05714BBC4EC1706AAF27292996505A7EE183A817E8EA137B6532C243038EC
6EF7F6AAEC67933CC6A72FFE84DEB1081942F1DB6FBFFD11471C71C619679074
24EE129BA4DEB713EB33E26D00C2C59E8714894C5570103EBC8047D94BE39986
72D1ED4B8B21674772448338F1C413972C59C2E82558755DAEC2BE692BBF4273
7A534ED4043AA5679E79E6D9679F2D512555D6C66F054C82F4E6073EF081DB6F
BF3D1491B298658CB41253E0C4200B83754C211BDB1AD329B6294291F197B4C5
5B0C45C6863435EEB30B0B51A19A267D1F1A45D40347913320178C41EA221AB0
E46FEC6543086AE3CE63768E119D0AF827E4CC10547EC5D5AD6D98A21085CBE2
3A2FDBECEEF685BC33802FC99B26923A8B539D8EE41A430C0D1144A11452C173
A0CF0DD7C1F3D017425E0949602A44580E50BF9CE1B88C2B29D8C871FE90D404
799D156845D4434EBD8422476D0E099B02A61BF2619308B33D885963FCB85701
BF36B330466AFD1BF5BCF6CDDBFFDB0F7F5419286FD4B7F133EB9E6BE877BDE1
AF4E99FF8B81A74375A372E3CDB3462BA515CFBE66C136CB72F35CA2AD3E3ABC
E376DBB446D6CD9BD537323C90B666BC66ABCDCA6B567DF8EDFB2563A19A7494
3ACA23F5A1BEEE7113877EBC44A2CBEBF7148B5F60E15C19448C38C644D82695
190138845E6FA1C82119BA73F2C927DF70C30D9AF937BCE10DFACECF7EF6336E
213975CC31C75C70C105761C11FA318F6428228106B3C554953EBF3292E41330
ED30E4105932F810CBC3C34B8B0240B2D3F8F78E37D852C6D3D522EA87139D63
54A0CC146D423AED70AC082559FD84C2A92543A689D209752A940A2AB23564BC
F8A7197BFE97FB39AC0F94B0E0061B4612186B18772DE69B33FBBABB3AC26FAF
5BBB5BC6547902C221A42109E492CE5CBA74A9565C4FA10F891DB5D524273CA7
D9BA613036BF8AEB57BFFCE52F1F77DC716E4A83F8C66B7359F9549A20444D0B
8E3DF6585D4A0FA3670671EC6C891E128AB4984A2944C1194B227385B6E1A228
1A42ED372774F446C4ECB6DB6E4FE6AFB855B2C57747D16791083EB2898AE550
806DF0841CA772EAC9940CFACE9BDEF4261D3CB742433941CA24CD2A4B3606EF
E3255C76D9657233F513CDAD556F980CC56B6003CE10B78ECB9E4D1E675033AD
1734DB3C780CA525D014F7CDF08DB440ECBF72C163CEA1323B1B11003237C82F
3A07C47FE2E4EB01657A1019A3DEC7268F1EFCE8A38F36657FDC80C89AC06140
347A396257D5F7DD1D97026C6D714DBB642E6A00BC84DD4D8EF74B4DA3C28CB1
64F5BC85735E7C6C456FB3B316AA2B9275C9C6A176C0FC66CFD395AED0D99839
F2C74DFB93058DB1E6686B6893991BEA61B525240436DD64A3CE72DADB5959B8
60F36679E6DA157F9CDBD19CDFB5E147DE7BE8EA6734B7CD5A4733A45536B0A6
FDF39FFFBCA433057D6D3663FCC2463366C68C8D669C75D2BEAD7ACB4C41800B
AD1A6FBAE9A6430E39C4EBCB22721E6FBCF146AA64D0EB5CED273FF9C95FFFF5
5F87095CC2A1A0A9D7D4C50C2B8462E0F542D7724269DE109F5C8FC188C950E4
D560990D39C59E1E96B0093E41DBFC7897C674F4487CA301DDB88D426BF34DF1
65BEE600144F170355FFF7FB1978BA49947D8499F934E27075B6DF594C3F5729
EA304819D079E79D77FCF1C7C728FFB6976306E42ACCB18890210665C112978C
24B6404F3FFDF43BEEB8439F9A08DA681F4D10941AC6CF3AD480369BC6274045
DBD8844DC8A91E385B00B61311A28C8BB3CDC4190A0988D3D803EB6D37EF459C
D96B6EABDDE0134A821D118A6323AEFE4576A4056B0D1AD810EC10F5930B79A8
1466F338AF40B1052977FD9CA60844459907821EB817DE769FF9CC67CE3AEB2C
4FDDA47506FE532C2ED9E264380CA3326F705A90AD6B0733C298F1D16839E78A
58D3182310D39371607474F521C1199428D37EDA69A75D7DF5D5906779DDDD89
9EE0926B3B30D0F47379C4975E7A69581F8219229B0B85E7C826378DCD8578B4
2EF0892D893819C6C38EEB92191BAC185A1E4AA123E9AA8E760D86E174FEF0BC
0F6CB466FBD1D18757858D251D43EDC5FE1D37DEE3A9A7D66EB2D5ECCA5A1DEE
74467FBFD6BDA35ADE68EEECB191B55B6EB1C5D870326B76A33EF4DCE88AD1E3
DE7F729030A955870656360BE14E67E04F7EF2939214C0FE263DC984E98D396E
B3FEDC1B8EA66C5C137463C8CD381B5E206AC8226056F321F6204DBC2DBC88B9
EB22102899CC20D6C1EEFF1C2257953D66449FBC0D1AF032E7871D76D86DB7DD
E6A004C370B716538B7FFAD39F968E9454750575DB9CC47512AC9A44F345175D
24DB54D2495796B5EA9C84014E2E48D63C68B321E56C1E395784D9B769DE5550
1777CCE47FB99F21D89F14471327365CA6079F20AB468539351CBAF5CE3BEFFC
D0430F317B86D44FE5535E72C925175E78214C1BC652936320B28A7967143E4B
AC2F8C2FA7DE697F906939FCF0C3BFF8C52F8622A12111E62EA9DA76C67259CF
EB9FB69AC3143E414C5EC6D2B2E7084D683AF44FD0EE718A92C788C5C192254B
CE3DF75C5237C473DCE1D38C954E677903C579275355B3D7C79B10ACDFF5C5E2
C3A0668B42D7E587822ECA959C0ECC8588EBDC7422A8BD66C115BC78F1E2CB2F
BF9CBD188A20C611471C71EDB5D772665C94DB56671017BC90FD835CC1615CD7
31781A0D7B48737E4A7DC7F538E5A28B7D0C6D262C03BF550C81F511F5566684
6C26360FEBE58576192450137D59C71E6D47151891E5134F3CF1AAABAE72349F
97FFC9F89382C4DB82CFC184F1CE3F450F169B0870178628B9152F13D72F37D3
99F3672E7F61555775667DA8D2E81A4BDEDB99BCA1515EB72AEDE96F74374273
A0323ABBBC6CBBD9AD8DE7CD4E43D78C15ABD66CB3CD765B6DB3757D74644E7F
6FB5926C326F83DA50524F9FE9E81CE82ECD58FD68F9843D8FBD60F1394B979C
3BDC2A39FFA9611C7CF0C1D75D771DDA68D293CCC9922891CE08110D7D52506F
E96A8B162DBAE5965B74E2B410781B6941CEE1089BBDFC50043742C1298D856B
38D3FEFBEF7FEBADB76201B818CD3134369B8BD1E2120123D9B1DF3186CA11DD
AC49DAF982990B62FC37B034FC0982D7935258C7C69C7B4E90C00BEBF7B26D3B
C548092684302938281B9A36D45C31F7AAEC67E98FA4E05477CA9D909419A4CF
3FFFFCA54B971248E0BC3B76A4319C70C2093A14309869E44812276FA6AAD5C7
2728150D394CB41CA2C032FA8CD219FD55DF97384A0C2303F3AB21D2E9D8956C
2C273FE301E2E6823EBA53D9383ECFB8637A1EBD4773021F2E15AD8E8C599ECA
56D2C2436EE54C0E46906164BAA6CC901B6EB881B026765F356F36B26EED9A4A
B972E08107DEF38F599AD14B4EA83DCE78B7BD185E8CCD90E6D71BCAF3080E12
22B3C09D98E6D54B568F4C1827A900C81BC3C048682110A7D14C7686DEE5B704
A6622B586BF4A10F7DE8CE3BEF74659929CB3B2BD5B5EBD62E3A71D18D37DFBC
E6FF67ED3DC02D2BCBB3E17795DD4F9BDE1866863A54412C28F99078998089D1
A0A18894DF51902245AA74104601214A110820214014810405D1608C9718EBA7
3475F2C1506660FACC99397DF7B5D67FBFEB3EEBE63DFB9C33F9727D6EBDE6DA
ECB3F75AEF7ACB53EFE77E868702A7284F9B4378277DEE4DECEEE43B24EC4CD8
72B709F3A02795B5280D8423017FD6CB4887A83E85AF35A99D4B5A1B93852CD9
9E9E7CB9189E5B1786673FFAE8A31F78E0016E00CB593BD37A0070DCAAB56A2E
CCAD38EDD4EF7DEF7B24EA61004484ECAEABA192E06E138CE4213EBAA281A17A
C1371FD8DFCCEA9AD90C460EF9DFAD8186E931C54AA5DE9F98B170D7C2AE0BDA
1FDCDA6786776CDF73D785EF3F68BF2D6B5E3960B75DE77597F326194A92C15A
A1BF156C8F76F4F435E7B6CDEE23734E3DF2335E3E196DD5E17318CFF7DAF17B
DFF9AEE77FFF52336A55CAB6CE86C29AF1168A33D53D51070B259264C41861DA
6D581C189465740775D4093955B19E6484CB6429B9CCA960909A0453AACD4CB2
66BC932D3CAD084F813255EA63FC918F7CE4DBDFFE3609CEE45B18C7F3E6F845
83AA8189A56A27928EC05612AD936F463CDB6E2C6BB220324ED9709CB657C144
913149357A7F92FD0C6949978E915B1773411F82C12B7145504BD926806962DF
659E77675BF1525C81F1062F23BF125E71CA79E3D37148A43156B0717C7E5863
C5D439D90BA82D99CFF19CCA722EA1EA2088FFC16808AA715DF50E09CE243B17
9810346D50D21E40F1B033916A9B27BFA00608D66421357CC3F3CF3F9F51303E
249D0C3C1E9C869B6FBE99C8687BD8520361468F6DADE519EF984F1EFFE28B2F
C2DB72F5BC9735919F72FC7A0F9F7AFDFAF57852E81B18656A21243A5257A374
D494EACC70B4B4C7E5C40897C5C00EB58BB87CC9404208C41D77DC018F154F07
C30AB29EE929FC2754CB99679E09C79077E7CEB3157983437112978AA5D3CF3C
13AEFAF0E80896005FC6A528867CA79F9771C22C7EF622C88159BEBFFBBBBF7B
E28927A8ABF062F5B84E971BBFD2FAD2E8E3A24389E2BD82AA6ADD2577844785
6380ED8C23D74E9B10D0ABA5DD80AFDD72CB2D175D74118557ABD1C4FFBA4AE5
715A9E42FE431FFAD05B6FBD4584ABC2683C33C247AADE076AB6EE9B7CB91C8F
56BD85B3E2839746A52037D66EF58DCC58BEB656EFAAB707F2B34CD034B9B7FE
7C71654E6EAC366FFE9CC48BF7DE6FF9E25D17EE18DC3677DE9C52A9F0D6D631
BF15148382976B4766A83532140E272B2FBCCE5BDF34F9B0D855A98D8DB51BCD
7C1036A3B61706713BEAA8D461BF7866E6F1A70B2EB8001E30F5AE4A85950DE6
79C60F21F4D7AC59C34EB6C41AB92C7824F872A9504C56EECE88073E87ED89F9
240684502B698229E5293F175C47711E4D3565C57BDEF39EE79E7B4E8D97A9BD
A45A1407977F26E8A7C9CA77A67CF94EC73D3ED7A5975EEAF6DEEA005E7B13D9
1D4C166825C006EAEAC9279F544A86F5377FC2FDCC6A3582B679CA0E38E0803F
FCE10F7C6AAC1AFC094C3E3636A34F726844CDC013210D21E8973484F2F9CCF6
4DE76BBA4813165D426F2D59B28491A8F17A02555431EA2299F88E77BCE3A597
5E32599B8E1B6FBC116E291503DD2E8A92830F3E1806293C9D294740E425678A
7017D21E901B92B7C35FBFF4A52F417C63583BF109A8C70402234F3D932D26F3
5B71710C0F73A7647277A56B746CB410E65AEDD6AC99B34C18D033A5B4ED4800
4C795F62C2940FA0123259D522539DF470B1489C493309002A714FA828BD6976
4F75250277986AE52FB9E4921B6EB8015FA031CE2DA57A056932712EB17C1A1A
42C732B00D382B63D5B1D9736C7577BDD910E84D9B49BC75FC4F9D587EC8680C
6E81C190DC543B847CB4DC8B3A3CFC1319DBE3ACC31A46CE0824B71907C9803E
E31E2C1457DD934943196E0526E14F1C3923218C296396E1EDC5519B8FE939BC
ED5421CA12EB79958AB030BE46139A202C16DAB5FAEC43F6A92E9D5935EDB0DA
6A079562A55E58F852A350A99706F24977B955361BDFB5DFAEA506FC8C7269F9
FE0774CF9AB1EBEECBEAED68F5ABAFCEAEEC1E0E6FEF6D8E553C6FA8564FBA8A
C519F9FF7AF5A5073F75079B60D79A8DF156A029D484F952BC81FE86BF484F4E
8102D67F3022CC4210173824C494F6C995575E8913C4683E1685F48ED869871F
7EF84F7EF213952FB84C732E2F102D308E6A279A40E9689346B1045B50B501D1
35C4346BAA494DCFE0890C231DBA246BF1A4003D6F319D44F332E264FC040254
187F166FBAE25B1ACB6577D079E40C30F6CBC14037D4D2D79F643F4BFE709E61
B890DBA79D75C16CA42F05C488BC8AD2BE78AAF2F1B2DE7914114CA731D4490B
58915EB7E674CA7983F8229B2CBD6D3D9738593DFA1D4CB0104F42A24AF2CAB9
201339264A1E92494210B1E9564E0A9F816C6A72577C9B2C0FC99D3AE575AEBD
F65ACC028997F1F37BEFBDF794534E61C2872C8018335346F2A498191F1C1828
168ACDC6F865692FF1CCD0C8F2774A082A8C10F79C9C1893DA3EDC2B500CF019
556D38E56C2459EB2B82A9794894B86E679DE45460C1E00683572E25C6B7BEF5
AD934E3A49D56DAC5A52F188CA6AF02F0C1CDBC6CB7854C09044F00CAAF59A5B
684A77D0FDB9AA22E8EF2BE62B9B942916525A42FD4300B90FE8399418126AC4
0E6230F48AD82FD064947CCAA970C7B300CAA4C5D8C71C730C660CD7217837CE
9AF40A7362E773D0E2D02AA5D2D66D5BF3B9BC9732E2A926880E78EC341BE14B
E45F453F8C02AFE52571D29CF781F78CF6E61B4914C6A66CE6EF187C2D3FBF5D
D9FBE581EA32D3FD46C9AB245B172D195BBCFB92A5A1F1F7D973CF5DE72F2C15
72D4CDAFC5854ADCDFE70D5782AE755B5B8D7CD760B4CD1487FEF9B86F045152
AFDA092FF7F48ED6AB5E62DAAD569846CFB1462CA450A717B695A7B676C1FE44
BB33482DBADFE5CB97BFFCF2CB6410C10BB6141C62653BF180BBEFBEFB6BAFBD
261CB371D87BB8A5F11398A53C984ACB898866CAB3EC391DAB5C6A6B93B145E9
16847EE0899805757D024587A451DA59EB4DC57FA63C8F91D3AE47B5A8262B89
571598EB0774E02CE423EA3BEAE887D9FBCA57BEF2A7DACFF83ED697725515B8
10778A23511AA8B522440D79B44C0AE20AB2F69104B9C21EC5AF9813F29C2E93
26C3DCB38E55C9A18E1745376786F3A00E1FE393E3F641A4C52D1C924BB0C708
0F9509930C2A6F217673272CAC8494DD77DF7D10611A37A92E4961846975ABCC
A67CB97D8FF9244AB21F71C411BFF8C52F34664C19B4026699D33D6B866D5057
1D1BF53D0B3EC9974B14C13212D9E07E273C1EB498F8D4A436A4E69748723BA8
749C1C57FAD031E4CE935013E48934AE0CB926595B445E9338332E0DBEC09D81
9F7CF8C31F7EE69967589D60528C390B8CDDD24AD38EC651A729843936097BF5
25594DA98B94704343843CBBAC292C0771AB9998D83053D542B36E8B6740AD75
445E82CFB54032095D2654E64578473EE9AF7FFD6B1A5978407E3E9EB13466C1
FC055B36DBAFCD9E357BCBF6FEC58B17E316D4D65EC630415D2B6B54FC1FF879
29CC57FDD8CC2ECD78CF816326EDC08C096F15C2D2E0586393C91F9C3FF8D966
B3686A03B37ACBF3AB27618E766CDD74C2311F9F35BBA75A1DE99DD9F5FADAD7
E705B30B8591D81B6E9AF25A4C89D7B7EECDD5BDA5C6BF7EE1B64ABE12E1609B
10173729255D18270A7F90DB8E96292787101A763BE12E65040FA3A52660781D
1BF2831FFC20763EC308F4B0D9C60EFFAA42556BC14417A50F3E6101A3385C19
9562A2CED504DEA4161AFC5C81668A5A061219EE6789BEE849B86A2E71AFC95A
C4B0B85D6C310C647780C83B5E8C72E0EE3004EFB9E71E6A26EE1641C25C5B5E
D003A901A1BA59D749440CC51759F4FF24FB39CC5A1373C002404ABE437F7335
393F6E42D864FDB7B9AC2B56AC8063076D217C916E87EFE387071D74D08F7FFC
636DF829E78DCE077E8547C6A5F0ABE38E3BEEE1871FD62A8F3760E3C293794D
E00A2D6787B326FFDA957DD38D80478ED0208C1B3B9B9B987829FC89C06A8AD7
9DDB02C6716F29A76840B1B48FC9998EBE2B769D8686ED2CF76FCB85A969DC1A
8F309A4C4F8AF56CCAFB7283F2F8A9CB072EC83EC6F40D99B62222A2E33ADA52
5C634CE9F1C71FFFED6F7FBBA3C04FE28F9F53FAF3AF24A2F8C217BEA0DE17B4
8519EEC7C6553B0121FF884FC094626CDB366FEEEEEAB64D5A1AF5C00F20E678
472D2E7D2C2EA83FB17D101F5094EE5466AB56AD72FD3055D57778D37AA9E81A
1BFA91471EC1D3611E98A3A3027305071B3FA913BAC938CF2116F1BC04FF3088
4403054F5A1D1D6BB69AEFD8FF006CB00D1B37044E05B8498318ACF79115AC24
C1B88CF34CB7971FCB1BFFE06585DD16B4ABF556A3698AB9B85DCD57AAADB165
89BF098B975FF47CD808E2EA48FDDEBC81182FE74CB3F18D271F2ECCEE7A65F3
9BA3517D8FAEB9B56864CDD6B7B635DA03F55C5FF7C26447757EA178DFB5D799
AD43855692F372A3A6852BE762AF1CF949D9CA14D843D833B49D4F3FFDF4BBEF
BE5BB2C3ADC3320E57A5100A9887FDF6DBEFA5975E524DAC1A28F2F1D59D4DE4
B2AE90750BF1581F204D2044409235539ABCAC54544956A5CC5FA9D451DCC89F
FEF4A75F78E10568F124239253FE8CB81A2969A1B74D96419DF23CF2E4329642
497AEDB5D7C2AD1173A79BE99529A334861E842126EA0FEE3DC6F4FF84FB9907
8D7DCEB1BED8C9309B3EF5A94F3DF1C413D40A3AB9C4E3184771D2CF203406F2
0D7BC0C57CE32790E33FFDE94F594446065652F809C339F9E5E2BE4C5AB8CE1E
8BE3FB81A29056EDB1C71EFBE8A38F92AB44B41B8431715E048F314EB6C72578
99FC5280929B153BE3CE3BEF64E899A60D5D01EE21EAF6E93401E3981A123F21
9E0C033BEBACB3E0D9317C4C54C09A356BF0F943FFF4E0B1C71D3B7BC64C5B5F
3732DC9512D81A8706990C74D3F56426719004933C3BA1D43192952B57623B12
21E02288DDAD3919E0412DE267CD25A4565DD23D33510D0BB5255A957DF7DDF7
AFFFFAAFBFFAD5AF72DBB148909635C40AE60413572E95ABB5EA9CB9B615EDC8
D8A89C44C6D6285F64DC09F2E84E02B9577965B75CE38E3BEE209BD5E493C3C2
4BF6B3350E2701EE423C89CE956BBABA0FCEAA3186CEA914CF3EFBECEBAFBF3E
CC5EEC4B35363AFAD8A38F1D77EC3126CD8850D3B38EDF458E6357B341AEE790
F7D96769B77AFDC25018F51DF59EE19EB0588BA21A8E72E8F983C9C0C272DF60
9CCCA88FEC28CE6C7415FE4FFFF3A5726292D883D9E9E70BF566F3BC1B56BEBE
7573EF82F95D8DA859339B37F78F997ACD4F211CA37EA15E88B66FFCC53F3F91
1F6AC012AEE73DEB1334A24A62C69C9A4446D25987C8F7B45865B0334BA9D88B
0B70A04F4F2B84F64A94354C75E9C7291319B2A039CF7010298B45B2E656E474
444D3BB034425E421BFDF18F7F547337C22B556C2CC75D14E8D2042AFA3BF0C0
0321C8789A20F52013B973A63C8F0C2C4B86FA591BC40EFFDBD5047C2388A388
2E1873A3F86264E9861B6EB8FCF2CBFF24FB995A41A0127F2243304F2B578DEE
02058B404126D3A6500918B30B27A314C2E34BC177B0124C396F02CB2928C43B
AA7B8AA7A831CC13DC58A619B12BBA8D0A68DD9A4FB9843BC9F0A8D9375D303F
6D668411D05190C714653DF03883935F44CAB3E6851127FC561E25D3B6A2CFE5
4FC66D1C9C964A17A343D6F4F0C74F91A66FB7DD76833C7DFAE9A7A7BCAFEC23
39E0DA64DC52780A32B9AAF9498726E09652148E36027E78D965975D74D145BA
14815842ACBA411EE5DB1540A052D4DA2BA0E70AD37146A920E3E384F115B53D
073E81A78613FABBDFFD8E3B4F65B772A85DBA8E242B85D731E0F3326CEACE18
F7A2A26D0266F869A308FCF5BCF3CE83EE140BA100634986FDF5B2EE78828824
59D70721C775E402CF8F93381F8478BA30085B49AC0EA9C2ADEFBEFBEE586518
A7D4E2B2AFED249BB82F0A07FD66CFD17F369C54F351CE6FB41BDDF9A4D65B29
6F4BC6BA43AC58657470DBEBAD575BA616FFD9A717BFFA5FAFD6075A85766968
47A331D8BCE7D1EFAE59B7F13771BF3F5C18DB8493D234DD3B46E2C1309811D5
FB76CDFB8F5FF1E54213ABD04E7ACA51BDEA457E4F648653D1A4DE236A9F2936
66933934507E50B7949B6EB89FDC3EC6A996126882348E784658782FBFFCB25B
04236CA897150F1F71C411BFFAD5AF845D9E4E13B8E2D5CBAA76A0BDF0F3679E
79063F219BACDB2FC1ADC2491C7269AD2F594CC8E6CBF15F72C925B0E7768286
1439BC688EF8435E5CE2BB03B5E1CA749A35E487370E7B18BB71A828F7FF713F
271950D52DF87733F6AEAEC2368006BAE69A6BD42DC0E5F231194482507B5D81
CA95B916715BED447E12D242039AA17E575C786EE311F5C072954C471F1FE1D0
194FD0C2BC1D6F9A98A06794864D0429B34E3DF5D46F7FFBDB83030310CD9882
9151BB89C3F424337CA1782E5D10118988D41B6A0DC6296109260BDEA9BD9110
086E6A051721484E285A3E234B88992B53999514A15BD1A3D9608AF5C20BCF27
1880F3363808210E93BF554CF121B3665A92C866AB3977CEDCADDBB6CE9C3173
FB80B5D3E1A9E06A548DB4AAE85A3151C13A78EE6937702FF4B7F60721804C73
0919E96E2F6D7DFCBB64C9124C17D5B0C9BA20703E19B5834C6793106E77A5B0
A4E085F5C627679C71C6EDB7DF6E176E6444F685483E60D3AD5FBF9E4FC77E67
0C50AAC3A8C91245720A19DD167989C96A0029F544CCC944BD68DF5DF22B9325
42498449B795139B648545E4C42593819B18EB3233467B070AEF307EAF658EEB
090B71908CB49B7EEEF07CC5AB265B93E6F06EEDF91B9F5DDDBB6BB2F7D1F317
EC5870E33F3C33AF111DF1E707FEA667BD5917F76DEB7AF765678C353636EBED
7AAD1DB5ECAD7381F14C2B4EA09C663D7FC303734ADD5BEB23C5382996BB06A3
9AD788CC54003385B0244CD5C2850BE19AA202DE507970A2DC9A09CC39330198
6D8598F139B6192BCC295FB8C35D222F063A602590829FC3E071D05950BB63D9
2B9209534A2279C61D2117B7DFA412DDB409D84E874E39943A6B1D18CC119247
A4E5EAA4C213A14A059386135CAC1DEBAB795F3CD739E79C035780EA53901E99
1AA4DBC190945710691281464AF28B558CB62FAFE06564361D785657045310E9
D00938A7ED21103F1D97F14B25F12CAC6F7F7F2ECD19D8B4104E284E41ABB5DF
FEFBAF82979606DCE0EC7775778FC24BAB8CB362B0D3F21B6FBC01778D49110C
C0D2FB738EF6D9679F2F7EF18BA79C720A0B2544DE4DFB4B7C06AA4272230C5E
D623694A4D807F19FC828CC0BAF2645AD84430CE0A1941F4A7117C6BB4C4D1A2
342E8CC1616AF6DF7FFFA79E7A8A52927B45BCD966A24FD4613270C7487B33B0
2E3676EE48710D528642C03DF2C823D4DB8A2A08D12F1B59F461975E6AF19DA9
0886C5EDA7A1F9EDC562BED568DBE2A01DDBEFFFE6FD30E50606074AC552AD5E
DB67DF7D5F7FFD75C510D5CB421B45BC5D8C990A9BA10A3E824618B593FD8E67
5496D53561B40484C0AAB49876045D0A2ED097BEF425218085B76118CA4F99F1
B9E29ABA2BAEB80256AA443F7117EC0C831FE23B0F3EF820361259B4882C20C7
9698BDA9E72874B8403C81CCA44D0E0FCA1F5552874BE0C2C0F186305FC908E5
8A05223CEDB4D3BEFBDDEFC212247129AB700BA6AB51189DFBC19E516F386A98
7C0C931D06A7A90D984A5F172CFFE6487D91B77CFBF3C35E6F7B9FA3F7F8ED8D
CF6CCF75CD894C756CD5A2D3FE7CF80F23C97F45BB7DF63868EA3068E70BCD5C
3E365EAE15959BED4A3B82BDB9FDE55B1FE9098BC351BD109B5CB134EAB5CB91
5F6B35BD491588F2C64C56556E3296A1238F3CF2A73FFD29E7B0836EAB63F595
44650BCF8F7EF4A3BFFDED6F313F2E470B2787F3A9303DD34BC26163183093A9
84BC8CF6913A983FE79ACA2F9FBCFD3A3401AECC6809A3BB5C445C9CED166834
E03B279E78224E22634AF4EAE44F73C06A961538CDA275AC5CD7470217C79F94
9FB82066F2FBDFFF3E3EBFEEBAEBCE3FFF7CEE67EE4C55AB314A83F7B82F06F3
A94F7DCAA48138D5D8D2B1A02989CB8A079081567A00536A022F6B22CF6A384E
3E4F1966F26FFEE66F60251B8753D2B541F165D203DBA736090E6A3ED5438424
5114E3D61FFEF0877FFCE31F6FDCB001B214C2A1064111D8FA155E47DC186EBF
1A3B63AE82E28CE3513FFFF9CFC34DD3E4724CD4190A6B1A2728E606E93AB602
D3002A2CA4E76E8DFAFEED506B9EF1129310679DCFE561447FF4631FFBE52F7F
49861C78F4D05D2E56952F25840516A6D4661512DB4249E5321E85FDB4EFBEFB
BEF2CA2B4CC672C10287769F3B952639450FE6081BE5CA2BAFA4899A64140EE6
ED9E0D7032180484EB035BC39289CEEC9BB565EB967466EDA3F1A1EC4948E36F
2C2CA439C62DE2428919FBD6E093ACB5ACB8252825D5902FCEDA494E1954159E
9A8DC2E988A8391F7B1AD3A337595F5F3E2904EBA5E94B7C35D2BEE4B2679C9A
A754EDDB5C27C6C5AA13C2CC1BD180C0BF4C0BF3AF34D93A2A0AD5F9920242D5
B07A52156118A79539360CCE89CB9FA1D0B0B622F51C63323857E79F79C915B7
5D1C2FAC4140CF5B5082453F3C5A0F0A6646CEAEE9986F4686CD8C60F6C08B75
936BFEAFB3FEE2675FFCFE4060666032F2EB3F70D171BFFFC1AA91971BBBFD7F
9F186E0C15FCB8E0B7FDA4D18CA3A6976BE7CA7158EC29F9AFDFF15877BE3CE2
4715D8158157F3DA9524578BDE56782E3847B84C7A818953938809C7DE161397
22EF248F634D59EC90EF3262899F28A08417AB820E3DF4509C3293315011BCA4
DD887F7FF2939F1C7EF8E1325155094CC3DFCFE8E2DFFDEE7743CDD0AE22B078
279A00C790E96B5A24D42B7229F0271E40425AC990E1675DF9C4214AAE0885B2
19DBE1F1649D265759659E82B7C8CC67670BFC8965F9DCFC449A48F50659F30F
6D459727436DB5385DC2BCA9644F699BC99A60F26975EBFE781C38CF849F3292
418541BD0E296FFD42CFCC9D37CFDAD6D80069B62C4C0386D5B1B1F90B1658CE
70FC3CE3D3B4C663FDED0630B829AE0375883FC125BAE79E7B6C11B1D8B789B4
C12C271907963895942E27CF09275A79122585CC449FC038C8198595D4980D3A
2A31198B5C5A13542C585C87F13DCE3B5791B24C6D6C5945E992D0054EC75457
277594530B71C1091553B9C9B21D181884889752C532C1882B5021B93A40728A
B627C39AF839D69EAE8CDA0F305A259641423CF973F6ED8354B55655D3C650BA
525CA94D82351A855458877E205E789E3179636257571492E5851DF14D49494D
8E106C1CA708B32888B963D8A7090FEEA2B3680332304DBFE1DA6BAFBDFCF2CB
2BE90B9B9E5B9FB87526FFDD3C878C7738286C2AC743454F02F346674B9BC735
E455B749A784D139E5B469EB89A64D382817F42203D62D633669F2C0520234BD
286CECF317BB6D6D6FDC3E5CEF9A018959181A6CCC2C87D5C176D0ED55FDA4A7
5D1EF87DB57741E5C607AFFDDC0117D40353689A28D7FF89CB4EFDD1233FAA6F
ACEE7EDA07B6E7927CAB94AB77F963611CB5DAB9E1A43C9C94AAA5F61E6FDDF3
DD52506C1683EE9637D6A8B7BC76A1EDB58309DC885A3B5939F4A8281166CD9A
75DE79E7C1289135A09E5F8CAA992C07CBA9E3CF313938A158D0952B5732062D
4272D12450D7D2DAC05DB09F6120737E1854A46942A79C611C26DEB9FF692026
4EA3AA9D68028C878FC3251335349D7E76D7B8FDF6DB4518C75D8A2F60B9D9BD
CBA49DE994FCE7D6C5E2629C6CC5A1FA2785A1DCE24437B6C6BA7DA6E8F15CB0
7B70903106FC099326FFB223F5681C6E707C190383C024E888F34978249D839D
44873412A24589FDC5E958B162058E95C95C67997A148678EAE5CB97BFFAEAAB
445DEB522C9F64883B5F2841865827208B0BD93DDFD73734B8439010B7530B56
FC1FFEE11F6C1334712A2559B106B590FBFCD454B404199114AC48B6AADC5233
D1456058030FF9FAEBAF9F7DF6D977DF7D378D8EC0F3E107D070A62618379FB3
29730397AC8B93EDC0757599095CC89DCB844595460D7FFAE9A73FF8E0836497
15085A892C575BE098E12E0C6ABBCFA24D2031C7FDA7D437CFE77DF7DD87F9E5
4A2B0778F5D557DF72CB2DB8A3FCFAF17ED39532B437B4792BB3144AAC6FA8D5
C582D7CEDA992A48AAEDA5789D5074AE4A66A2FE8C33CEB8F3CE3BD952839B46
ABA62C9108339856A2D097F3C4CDC05DCBF7244C1790CC4B89BDA01E2EB8E002
DAF8DCB898107C08D7EA80030E80D855B08E8314EEC08D6EBB7C47EE8B0BA12A
7CAD9A1BD7FED8C73EF68D6F7C23C9E0ED221CE55E82322633078D231C3F9CF9
3933176C1BDA64CA668F0FCCDF54DF5C4F4C313405BF38D0ACE71BF9DE193D55
6F241E88ABAB5A0BE7CEB8E9DE2FF744B9F77FE01325D377F98D970F26F547EE
BBBFEE0F76FD65F7681F9EA7AFDC9ADFD59A9B6B553C180FF1682BA9E7E3CAC6
077E60EB38F25E975FACD6EB719814DB5E2BF03BD480043A5D162F23D9C69211
128A0717DBB3F0029861124F9A2CAFE876FB62192DA5392F485B5E49662FA3B1
22472F7384E49D3CF9E4939F7CF249D63A312583DD48234C7DB5F09DDB6EBB4D
3B0AA375CBD727BF846E12C5A94492A0102CA767C010B7A65ABAEBAEBBB0B5F0
A45FFDEA5789198539A5F40984F221871C02EF84AE673BEB412B1B4E614F5C9C
ECF7BC69478B0217D787F75FFBDAD7B075F9D4EAB488537CC51557B0598DC9FC
547A154CA5B84DAB266B02CA43C1C479EEA40F088F66C193DBB25BA11796CD2B
34AA7F29AB71C13DF75AFEEAEAD5B3E7CCC1F537A56980BE94DD2F178E77EDC5
65B91918A6934E1A2F12C1CF202FE039C26D7CE18517785D9C1C8C1B261B0F15
6D7F2FA5C9A637401B900928EEDDC946815BE5B4FFFEFB3FF7DC73E3B875FCEB
F99C6228003F4580047E10E6738A45B20253320BE381EE952B40952074142951
376CD8C03A350E18862A5785839754D501A08B6DB2BA01CA56668128732910E9
1DF3D46524D8E3A1D80EE1552C17EAD4A069CACEB60FADD7172E5AB46DCB56EE
3CAC0ACF15110BE90A98729A2BB6DA0B7F4AAB79E3A6C503B05DADBB95B9D558
5EC0D039FB57F018BB72D3CB2A62185893A7427809E324F80EF4162C9120E3B5
C691F8E31FFF6826B5D57EEAA9A760B241DCE3DF279E78422DD1651E32EA42F7
C53DE42249E553B02286DC1BCC46F0E8BA91469E16C1636046601DF186CD1BB0
0730B18C8DD2033369BF5C5761F84EA77233A92086C55C3433878646FCD08BBD
68E961F336265BF27D264C72F5ED2D7F9129548BCDAA198BEB5E2DC86FAA3436
D40E7CFFC1977DED93FFF9F397FD70269EE7A1FBBF35F6C65B957796ABFB8C25
73D30860648276A5D05818561707F5451E4E7AE18D6D8F3DDB1C1B6B844921B1
A44349684A6DBFE11BD727700169B031D914841167BABFEE2370C26927AA0537
63B69C4966EC71C2598DE139EC610CCBA87F3D4439842C89D878E2082FC10F71
3B1637D1F2A35455F882679F52520CE73BF1091415A091CE0B2A0648CD2DE343
94F8ACFF60045258172508F18657C67FEEB5D75E3096C5FECF9026074C7BC5B5
3612A7E0DF647E277D4756817126B1F1B049E42EB3B887A833623DC9F68C0FA9
51FEECCFFEECE73FFFB9719216534687449B4A6782C152F23275D4964B270992
C3B20FBC819059BA64E9DA37D7964B6568C7B33E7F163E5CB2EB92B56F6DE865
F7F2560B3AC0F644A956F1268E1A4216610064F7214A1B4F67C591B4A21A4F8B
7812973BFEF8E31F79E4119312C0617762C7E0CBCC9813B00F097BE491473EF3
CC3384EBB9CA40D34DCC86F6046FE4A7DE405F6FDABFA55EDB6DD96E6FAC79A3
5828D61A6F7741E06F19B35ABA74E9FBDEF7BEFFF88FFF801C21DD0DEB631930
1172603C283691CA42FC886AFE876784C85BBD7A3535301D1DB69C24F5074527
7E0869C8A428218CDC8269D668837AB17290C4681B2F9E917607133B34E4F7BC
F9F3B76CDA2C1B9FA9B9F18DE8997C4A1644679FC1CA06D4AAF1784D6E7D2F65
9550208E9D952864B9C324463BA273F813C5018F96EBEAB9EE94BBF9C86AC7F0
02C6094F0E3E3BD506030BF832CE0006E0725C8BB49CAC672C8BE5E38800190B
F7DEF7BEF797BFFC252681E44B3CC9975D76199C45669E45FBAA8479877B4E94
05BD10B6E7A6BAE26E5195A9EF109253D0B0845B59877123B4A7BB3E5A8B93F6
AEEF9D539D353C1037A21133BBD4BDC38C94ABB9D1ED2D33C378257F4E7BE1D6
97B79A7A73E9FF5ABCF68D75068711AAE02D2BFA677D608FED73B7CE9C536DE5
DACD82819F6BDA5E585B5C692E2947F35BABDF8C7FBA0A0A7EC46F15CCB82680
4F00DBA7C38713E51F0D26ED1619B6EE5360079E7AEAA92CA0A138935C939171
D34D375D7CF1C544E2F11029A2AD1C8378D71992669E53FE168E0C3FF19D3609
6ED74CA1E05502FDDF6A02933985494657C77DC85526C0011B861B1B4FEA7246
090E8B2D8AFBEA821D794A951F9A898DDE145652B852C80B52C0BA1D6139CFB4
74E9169F76DA695FFFFAD74D563B26E3039340FCC585175E78C71D7788AC7727
D121F6AC3DE288235E7CF1452A1B4DA6CB43ECA6284CC6504945D2DBDD333C32
0C356043CA6926F2B1471FFBE4273FD98A4C4F5A328563E0A59622F61EDE78A6
FD36D7560A02A6B3454D6F833A7E460A6D26167CF30C73193871DA01EC5D237C
21FE930685990645EA4A4C3DE1E245BB40A199143F0A21F2977FF9974F3FFDB4
C58626E33725068E479A447D2C7FE34D79CE955D11EDC901071C000945B397A2
4D5E27ABFEE83FE23FA1579E7DF6594254B911F944EC46CD6CAAA4A43A197015
E18ABEF8E2EF89642506941BDA66D2A2B4D6B7D1806E810EE0BF8562D1C40921
DB49CA368A9D0727F7EAABAF6E9B848462C303035E7A42C669C5A2987E1C9F82
92EE9C73CE81C4C45A1041814B710FE9B44C4691426E1E78E081DFFBDEF76474
0BF725882A29B2F15C34DED5A85232889D2F19D613E98D7C35CA143A4C471D75
14A498BCEFC95F231C45A1FF952B579E77DE79E4A492CD284097CAF10878E0C9
84DAB8F5D65B99F2650F5BCE8F7C3BDA9B1210AED32635A0D2719C220FB66960
5A30D40F307DCBC2EA8E76B1511ADCD69A5B58DC68D782A5AD1DCDED959609EA
C6CB994AEE1D737AF26FD5FF4FAED208D6997263D9A672BEBEAB176EF9833FDB
330B4AEDBEA41DD64D3309DAA69498D1072A958D76BAC67CD31516C79AF5A410
941A49DD9B00A6941AC0E00F3EF860F8E56E672E1A2B2E5E5351C1B3CE3AEBF1
C71F67218B402F38E4D75F7F3DE6560CF56A81A9C32B69287C042D368620580F
CFD48238EEE585BB057124F157C9DE74285233910C8E6149E2834F38E184471F
7D9448273C239CD433CE388352C2649062F17DBA012549798147BC8CE28D9792
3F4A7E17F620C197796AFCB437C38F7EF42372DCBA06BBCABC459DC4B484BAAD
F1E0605434B3B8AFA48C95EC99AC095C8C3B7E75E28927DE7FFFFD0C153064C4
6DC9266E6EC9B192D298041BC509C2A1E1A1EEAEEE91518B10B55097288D7604
367102F9D3C3321D1E041B8369D22160D644F5BC1C1B6330E3F63B6C64C850E6
21E9B3332645A5413E51B79C9DF84546B8B4D8EA022A0804E433ECBC7476ECA8
B064100890E4EDC48E8F38E538E3FEB6DB3D6AFB69640076B1FD0D341B14B50D
2585BAB568FD6D4BC8B151A543B148CC6F734EE9698AD5874838ED279638D098
C5D59889EAE880EAA5643B747768E412E6983EE69B5E2678A5F9D2C3DD522324
6EA0F17A28BB5FD92563A85CC611AAF7F5F50C0E0EDFF7CD6F42BE33F4C1A3D8
6102CB5AE4BDA6ABBD147E992BEDD249D1DDF1B36641120126C3054980F2EC71
EF2A40E9B21C1BA7ED8F7148A5DCBA24DE5A03204B1ADD358A0C9E135A7F82A8
4EC79C35DD4B66573CB1B72239BD891065CC9DF57ACA859889566D21DFD56856
3DABA093B9FBCF492AC94832561FAE752DF2DACDC44F4C2117FA3695D28E3D63
A727CCC52DA8EF24F4FC2831CD284872F9B058AA877BE5FC56BCF5CDA8345278
4F5F35DA6442E3174C7C999D2BAAEA206B27E065F544F890054DAEF4997A7DAD
0B6D82102ACD8BDBC98D37DE78F595D7D8486629EF62FC495F8C6D3C77F662CC
7FB53EEA199C1D2F3049105A1F6BB8D6320956B00D6734F0EC3F499C2E7AD0C8
001C9E497CE7CEA9F5907E8095F732E5154F9F1976FFD3CB387F44D902D9F7AD
6F7D8B747BC24148D5294FD951C42AF0251611FF897574E9FB25C17952848B65
629C6CCF64F46209B46A895C496DB29E3CB40BD98A871D67F1A7152B563CFCF0
C36EF7376E7897BF44C41B53022985441212043F878CA561472F8107077781C1
873B323FC46A6A59A20C9C26514C0CE88E811DD94EB6D2C9B26665D41A0246FA
BE6FA679B941334F3116F73C9BAC04439D28689D3182C183B470E142A853CC02
AC752800F5C1C0375961E4B64351A677DC45E8AAD433590FBF941057E8771881
B18DB1589166C367A3A3B0CF9BB5DABC85BBB057BB4D67B169223413AE90C454
98BC2C341374298727CCB2C988BC310C7E998FC96A7BE1F1DDB8A190AF345185
8056188AF69967DECE90130A552804E2E6A3A74916D938B24975CC1CD4401A80
82359422051B2D5E90D515B43BDCEE74DEC4D7746C1CEEAEE57960D08C351FF8
15240E513AFC3E4E144D6CEE7E5AF47CAFF42335C184BDE2F418E15F695CB00F
3B6FCD181437A2DBC78DB34A1B0ACB74F8E187FFEC673F8332568EEE7FA40954
A9243C315D280CC9C5DAABD1AEEA924C9674C93C1E7839B946AB96EBF177D963
9735AFBCB5E0DD0BEB71BD59DA61719E51DA63C64B85A067FCC0CAC5B86D5302
794C806F29E5622F847A28CF7CC7D01B6F95F65B38D6FF66F7E868ABBB161DD8
57886BEDAF26020D13CB20514520B9164815FB533E6F772FDCE2513C76CA2215
B59BAD28B6508B2048E0595E70E1057BEEB1E7ABAFBDBACB2E0BD7AFB7794243
C3CBC70C7879AB3F52182506EC055642A632DD3E9125CFC03783461B1362F079
A60F30B761BA28F8A1FD534AD1947EEEA59A2CD95905D9949A80D83FFCEB0676
F412B08D50516E2709E50E349A5E6E8E97871D22028BCE923AE60B31BDD75C73
CD97BFFC65527589D85C77548C54FAD8B5DC1592A525A14A859B6FBEF9A28B2E
625ADB64B5602E1DC074F3134C6CF4E27A3990EC787C8E10E626D1AEDCA82E57
6B5ABA186ACFD8A4D7E8786837C8E225FC957266D3C98DB757CA64AD8D191551
F300DCF8B0C30E83EB44DBCD389073E20492ACBF3915FB789D5B6A8C43AC3092
6319482A7D038303811FA81D0ABB77F60F6DC33AE78BC52639A720EE31F51874
324ECC446EA90B2FBC304EDB71ACDBB459801F55B1E39A7367CE58BB76AD4A39
EEB8E30EB8961D951D8C3833E670F6D967C3FD64001A8FC9351E4F5DA45B96A9
303CF5C68D1B396085B95DD01424488726E08496CA39F2C630356F320563392F
4B9801A8D2529AEDACF317498669637E4284ACAAF577C36E727EA73B810C3532
648F7FF120ECF44D0DC7E6C3CC67303A4CC12D2E1A57F4BBCC74AE26102E9307
F5CE3BEF3CEDB4D3786B46F314DA16E48C263F5D071D5DCEB98846A6E37D9AEE
C5268B02D53CFAE8A3C71E7BACFEC4061594200C72721E30483CB574BF3DB1D6
618D31775DBD4598D026ADD55F7AC8B2ADA535F64445310F298C623E3C04556C
DD03CC8FFD3F16238A2154FDAEAD85FE77ED6106EA73FDD933DADE2B4FFFC2CC
32E6D825E57BB731128D6130516FD2A8081512D6087A71D9B265988A9DB3BB63
D6532CA0F5696C72ABD55EB264C9EB6FC0FF8622C4A5B0EBEC35E7CDEFDBB265
70EFBD9786F93A6442B1942FE5731E86DC6A4456B3C53B8647ECD9895A7655AD
DC0F7CB81B493056B54B0FFD02DBBADD329895F11D0DED113390E567C38BCD4E
5F93910B5EC64BAFE2762A45F5BC6252D7E53BE00683A8254D349D3F6E48F560
30A903CAADE5C2C9E410507970A711364AB1C0BDAA069671465ACE9F2B638A2D
F4B9CF7DEE861B6E2025140511230414CD6A354C05E09243748083B5B28C4189
30152FD8D384E1D17D113DFB29A79C42209C8BAE36EA04DC6E136C990B738CAC
8CC70CDA2DDD482777324D72C7A80CD926147374AB1EF863D10910602B9C861B
50C303903C408407784F9245AB574D9E24DD8DE644DA67AF95CACD142713A5C5
F7B81A76B417546BD562A158CF3A0AFCDB0FFFEDAFFEEAAFE08977A7397D4C41
39AD2383CD99EA8F1A45ED38CD4ED6F68B8911F50050241103C3D74833C2764E
78040682B024DC5E7A51E88BAF83EA84412A2ED084A94CDFDC7EFBADE79E7B6E
6AFE373809FC49ABD9ECEB4D1DDBA141BC214E77786478564669C7DD49BB463B
C96475A7EE4E9A7245E9F952DE61721E78E001E83C2581D9ED800D0674659C40
365D223A45CC651D9A800310E1920C13A1E2B801B467E451D18592252E1205B7
385CA1BC9DB4A99A4EDC68CBA903142670E5CA95975D76197BFBB8D5D72C1782
CCC5EA6B95E91C847E00AB79AC5ACB17C35AAB5DEC2AD4AB8DDC3B4DB92B1716
C25684498BED64182F6E475E984FAC6360E9AC93D457E07AF424E18E5CA56BF9
BB77FCEF4DF99FBF31DF2FBE951B28BD7B51FB375B39272CC765AA8CFAD5CBCA
A0E42EAB7862AAE70DD22F584D853DEFA507269D4033776EDFA6CD834B97CE99
3D7BD6EF7EF7F241072FB516D2FC320CA13007B111B7DBF5C4BAA4891F782355
AB094C4AE36F18DBF7421B3D6AA75889566BAC5A1F1B6D0C8DD4C7AA4D1CD95A
8BD68A17F8B971D475D43649E4196FE7ABD3A109E80051CE62B72C5DBA14FA5B
7C537ED6018DC69680E9F020718298BC24B8830149189A7FFCE31F69BCEAFB14
A06CEDF7FDEF7FFFA31FFD28D34B34E4C5CD45C36E3A9FC0255F22AD1059254C
8A1381DA265A1D278BB4DE8C8E72842E2E6832AF4647AAC0A49619BECFFA59D1
EBF211442E30199425836CDF7DF725CCCF38E56FA2757245FFFF8DC3ED29FF43
431B2F0676DD2FB94FA8D3CEA25C1C36CDBE99487B9BBDECDE9D337BCEB6FE6D
A5A2F5DF87868720E813BFD5C81E3248F3906C3359C917C9B3469E062C64FFF6
7EBC692638008D7C5A48C26F16E1365AC6ED2EC6FD698DE2734A19BA6C340D5C
0644CECB9E7BEEB97AF5EAE38E3BEE3BDFF90EB1287C2EF5AC800ABCE28A2BE0
91F0DC12A926861FE2FD3AD6D81B2709F1D8C3402169C688BC2C90072B939059
E803CB0119B585EC14F7116FEA1EAA8E3CFC4ECE1EE42C06496D8DDBE129EEBE
FB6E1C2722A6E5C912683877EE5CEC69C5D3944C36595A9EFFE9659D3A4CA68A
148BA4ED4F838847420119022AD44D819A80E846FC96D1AAFF96A560BA179381
54F9D237414636EEF21B2E58B0802A967951FCCBC0A06A4A71E34AB154AFD742
3F2C964B43A3238562BE3EBB599E1356FA8A118E64924AE718F6A35DDF346A12
47B1B1068C4D7DD918673D32CD6DA65099DD78BD59D9EA154CB0C30C4277C064
9B4E13507E313F6C1CA6F4299FB790AFC036B2BC26BD3D3811955258ABB5FBFA
4AB8D8C040F37DEFDBFFB0C3DEF78B5FFE7CE9D25DB12CAB5F7DB9A717672DCC
E521FC71AF26F401B442AA1BD2798E33DFCEF3B9D05D05DBEAB5D1B69A60C7E0
D8D6ADC3FDDB4746471AFD435613C43688142626ED0D9EB42D1D6B326D672A33
153A96DCE026C39861E3114EADB6282C8CA2B4214E9DB60BC3983220B8EB6898
9ACC1D67D94494F538123D092351B802E696211776C9553DA6F204EEDEA6F460
2F9A24E36B611B19FC7BEBADB79E70C2092C87A6634DFE09258D19D69FCEB2F1
9C6EB53CF2F8B9AAD8F805E6EA31B08B2FBEF8C61B6F7431207C4F100D34C14B
2FBDA49E6B4ACDCA099319B7139FE0ED81E9FC330D80473DF2C823FFFDDFFF9D
9E148904E8D188288ABF2406D96484DD2CCE26C84744D8A94F90A3D3877D9C4B
5B4866731DA81AC0641CD1F62798CDEE1E26A8B113A133F879B5DE304EF09AE8
B7347FDB304E1E86F16E6D3BCA6EA90493253F3806ED27319FF03AD085F84FEC
57F9494CE330EEA16E731D9A403722A3863C4A8A2A9C413BF2385AB674193328
CC2B942B2593F12530C02D9CAB99CABB9C4E13309F26C756905997138657667B
673E05A76B9C002A9DD5E93481B469872620190BF304D20A4419E05E3818871E
7AE8AF7EF52B9E0D97FA58CC45E259FC1F6902FA04CC0CB33ED6EDCDA216781C
391FD00587F049AD1029970AB97CD468D66A56887CE3F66F5C71D595FD033B92
A2C9CDF6BBE614BDEEA45D6825569E268CA804396B9063FDF03EF461E9045EEC
E70B413D2E0CFCFBD0410B971D7CFC27FEF1EF6FDDABD8FBE6587F90E1143BA2
433CF018D889279EF8E4934F92E6849F4FF3BC41319F83AAC509C2CED87BF92E
8B172DDAB869FDE24573214A162D5A10841088F981C11DAFBEFACAC848DAC7AD
0B86147E046DD5B420C204DE5E3BF0DB36559CDE060B980B12E806ABDEB09FA1
DE9204CEFBC0507DDBB6B16DFDD5919168A46AE0034056576B098E601CA532C3
56844E3D4ED9C21D9A80A07BB627314E40954749149B423373815CC267F5A871
F3C9CC9CB9E1D920EDADEB65CDFEEEBCF3CE33CF3CD364BC00575D75D545175D
E41E5BE18C4DD673CD753789A4222DDD641658D127AB672DAFE6FEDCDDB17C23
E3529DDDD4D386405E5C841B588D9D4DD6D5CA8803CD2456CF6DDB56CCCA0B72
A4A61819153BA18CE09DE49F264487184097DEA0DA64EC98FA80D05A7ADC9C11
A2BC19F955AC569B40065AE410EEB38C0247F7D1471FFDD8C73EC6DB77003459
B14D241CC1E942B286619E25B2621BCD76DEDB381F2915B799B0DC25ADBD381B
38E3F8179ECD2DB7DCF2E52F7F992C75C2243CF5D4537FFBB77FAB8B70C93900
4115DDBBB81253F59614CA33FB663115FC9EF7BC079A9C9499561374955C6A4C
E324A6B481DC54C17436A3FEC4C921FD8302622C801409A8D24752693228A6CC
137859B9964E38A928F1FEFEFBEF872C334E3D01694A15FC658AD8385A1C3604
2684E8647C81B8E6FFA94FD0C18B491D238A11FC7BC71D777CFEF39F7773C574
5E5D923BFBF8B0ED53B4734FD98211760C0D7ABEE99B3963B4BFDA2EB4CDCCA8
302FC8CFF29302D400CEADF19BB6377494E6633105A19F8F6B71B3D6CC75ED52
FB8FF5F9A2196D9905E5199B5AA3FE8C72EFA6A15A56C3DF9131664D25DEECB7
DF7EAB56ADD278A6B5DD122FF0BD4231F09276B315CF9F577EFF61EFC5E6EF29
976C562FAA2F5CB860C7C0D6EDDBB70D0CDA7C6CA952ECEBE9EEEDEBC24F023F
C2179AF5B15A0DF2AB6EF95CACE0C383373DBF158410A9716B64086B1099A8DE
4EC6C6A2A1D118D2A956374984630E2B301C1A4A76ECA80E8DD45324A0992E3A
144CEC18A37D4B4D807D887F190E1571080BC72852B125C83F2A51CB1DC8181A
4BA0E92274E45D29C7983E95716D321655069D7071FC90A821FA918A7FBA3E01
E51504C24D37DD243DC4BCF1B265CB60FE32338A1584B8A0D52BF630BCC1E195
08E22D4CE6A74A36BA3E90F83054FAC7EA364E08DD776F52BFA0309F5329B5FD
792A3A2C5A348A65FE76F050EDFCE5C92B51908763C571C592400E3EF6D8631D
ED594C8697FAE77FFE674881246514912BA0CE47C938791656AE9A66010C2C97
0D1B36A50F6F91A22E570935245D1BD15DA991596ACA8D431B93AC096AB65DDE
0611BAA503784F8DA5B836AB04B078F4C719AC50DC5CD0DD5D3232547C812B8D
4BB14D28CF3097D90DE57B0ED0F39E7BEE39F9E4939560103E271F169AAD6621
5F808C5EB7DEF627EAEDE91D1A1E82E7AD9E442CDF3393323C6EF4693A4D80C1
68BAF80991E39C5B8CEDCA2BAFBCFCF2CBE98449B273AE64554D4E4CB9184D69
0206B83903F48ED942DDD5D02603F61024C3F0111FAD830449D0D5FF91263059
3F038A12C61928E8D50D5B64E3BC91188798C11E7783CAE5A8D52EE482461542
3B5F6B3469F376457D7533D6CEB5CC4253DAC5F85D1E35461EC21236763A25F9
5C908F0BA383D5E60E6336E64DAB596AFB79130C05ADA0528C86EB4BF7D963ED
FF79CD9B0A454A37C877FA76999DF6EA9AD967F182589F05F3BB61E91F76D8BB
7B7ACA9E9F84894D06CC9A3573EBB68D38FE5BB66EDCB66D0B16B3D295EF9BD1
3363464FA59CCFE5F1408D5A6DB45A1B4D5AE39C3F90F17152B38A2168F9011E
D4E286F0688DC8D45BA651F71AED42D40ABDA43BF0BADA516570D06CDA3CBC79
CB8E81E1A106ACA0F87FA60964551C73CC31102912B86E5F748A11D2E45D7DF5
D5D84BDFFCE6374F3AE92459ABDCAE02FEC91470C1A6824EE038BB94917EC6DC
2E6FDBC54C4BD47272A460DC3E5FCAA2F17642FAE1A0413E90B01AD6E4CA952B
E5867668025659AA2FBA9E42C28417A428563851B225769AE7582E8666B38C9D
3C36E665AD6D2DE8C678AADC5620C44C1F4B781B0F2275C7E2028C00C63BF51E
C68AA9B7347569193A79A04C86EDC5D7DE78E30D4C0D04196902E9585061BA2D
09DD82144A10BA7ECC9AD22B74C367BBEDB61BC6C3208397159AE2E20CE8B380
50CC42CA72971D375C07CC4DBB7323BAD45D0A9AD36D97DEA696361932AC83BA
40D10C4542B8C324C7192B647A568F4F3A7EAA71ED691A863A090233706D3A74
2A75958B6F9335C18063075CC185BD6A9608ABE00170637D7A2F7CB42BD671AE
60E99C77DE795FFFFAD79979C31714675397154E919B10165C441CEBAE93CBA5
E4D27029D5A28FBE202F486DA16263FC4B0241E3D0F46B434B4F63C752EE0BBA
CE7B2559FB0D1E6993611C4C9661126FB638E2052EB429C4036BF9A0E841E227
A54D6BB7263BD233147B3913BAAEC615575C019B8064329C01E217CF38E38CBB
EEBA4B84E70CB19E7FBEED758163682DD05C029D134798D53E1CF2A38F3EFA89
7F79BC54864B0279618AA560C1FC394B97EE3AA3B71B12A6000D164429F6ACC0
8ABFCD9B37119F5EE9C9F7F65466CCEC2E157100EA51BB66923A84898D0019DB
B5C84B5A89697BB6B0C0A2A702E3B593B4BB245C8FA09098C02288DA493E981F
B58AA65D191E6E6EDCDCBF65C7F08EA1767FFF58A36D0B832C50D51A79B8AA85
16D985F33D6E72D7B0989CF7EAD0E5C669DDCAF09D97D5A9119F23FCF1F5D75F
8FB9D5D622445B2A81B28551970E6D2489AC0F691904595F019631AAD58F7B28
28AF346C3706407C8A2B5B495F860DA36A5C2FAD50A329C07D4E51E0F69390D9
C452A4030F3CF0F7BFFFBD0E3B452EBD19B62C75B30226A3E9B46D0652952065
430F8C3B135E3BDBC5B34D8D4B4369C44A4D28A11B5DD11185058D038FA9B9FB
EEBBB18F99CC51D7A7EF7EF7BBF01BA41EDCA6A9EE4BD824F7466AA4C9F23446
EDB1DEE41722ADABCC5559763225949C74214F22D6503185A24371C6EDCC9E30
AC0191A53F79CC54ADBA94CBE84021FBE94F7FFAF1C71F6781381E1C730A4D40
4828D59B1BAED1F0A409DCA66354363222BCB4CE9EE78499586218848EE52A46
93BAC549F399ACAA401D71E9D851F931329664F42C026C7859E51A9157444099
2C01F88E77BC035BB0634D5DD5629C7625240B529D170F2D053D3EE1D7B885D8
85065292ABB920E5D4C56964536808746C5FFC8BEFA88651DAD173AA66743269
0A481E918084FE812D1FCB1A9919A7916C876929B61F757712DB7932BFD9EAB7
3088197D3D1FF98B8FFECB234FD44631455E62C683C82C886589250B355863C8
67A7E89725D8412A69493E8A411366B9ADEDB2CFB578D1C2F51BDEC22396CB66
8F3D765DB664D7AEEE4A609238B11C2473E7CC325E2BB54F0D0DA6C1C1018CDC
6E8C5CAB5C2A7675C30F86DB697B722651DD4684E2BA5D4F13594D90501340EC
26ED3AF4009484F17C63F921E1ED2481DD23716FDC2C98B8BB3616F70F0D0E8F
4523A3C9F6C1C6E0703BED2C9D06D96DDAC08F53011B84E3F1168607D5DA45BB
B4C33855609D8D9B2497496288A973D16E3CE904BC89B0C04C6CDBA7459427E1
0A019D4A45E7DDFD60B25A4B9283D2CE6314C8F5CBDDF76401221F0CF90D791D
B7ED076C26E8302C34841BBC6716C6BB093C5E870281DC88A79C72CA430F3D44
C18D0525D325E3F61FFFF8C7FFEDDFFE0D6631C4328BB40953C4E99601272E23
5CF081071E58B16205FD72056F6903B16B0B35A2A70C09A51B9D35689275EBD6
C9A5E2E46ACAB865F157B214E0DEB82B3FE1CEC627B83ABEEC8253F573F88627
9C7002D75B4D3BF5C245E84029D3C0E430FE842B431F427928A362B21E7238AB
7A63264657DC689DF681A88A4CE6932AB826E9C97A7AE60312A760CF644179E8
6D4846E921C63D79116E083715AF9E441A55987500E7B4BB21027661539A911C
738CF5D30FE06F190157B346E3D8C812943A81C2D2B855FBC44860B625A36991
D10011E117638622F6509A8B2CE5AE32D6647EF6B39FBDFFFEFBA1DD091CE26E
53490A6D029752ED5BDFFAD6F1C71F2F7E6CBA5C8C3E290DCE11D20A93C337D9
F4E3CBF232A65E8BFC3F42B60F39E490175E782149893AA83354450FA3895CAD
DC7526F3CFF0FEF4D34F7FFAE9A7ADCFE741D8995D7759B676CD9B0BE62CD8BA
AD7FD1EC459BFAB744C1B8EE9742E55A2828619CB2236635187564790D5E3871
3639D9AAD76A8D62BED4A8B7ACF16ECBD8CCE2C5F377DB6DD62E8B16627AE13E
79091622ECE9AEE0A4787E3B8DEF35188BAFD5AA4CCF7881051AE5F326F471F7
5ADCAE45B18DFAC7B1DD039E2D348B3C8B808D21FAE110D4ABBE75CC6C78C484
F954A5F9B9C452A3E7E266D14BBAE228A836DAAD38A8370B0343D1A66DB5EDDB
07FAB7EDC0B2A7E67140883C2EA8281C2E023311226CD5AA552ED790AB12583B
8635A2C430191E441C4A7846E84E980214FD984FED76011CD4C9CE38D5097EC6
A3E3260B1387F0DC642C0E102624382249B5DBB79C3A9BCD1C6538BA41D48E68
1EC6892FE09AB495B1C4975C72C965975D86A7C395B98D95205118561A5134E3
1417CAC95139F1A0E138107242AB4EE4B20CAC31EC21E64A9714122A01DE2745
3F6942A86918AAF16466EA6831F5C1BA67C62EBC147108639F7979CA687C41E2
98F110F69D48B2F600C4FF10D1C8C886DA282AA2CD6393648DCC7880DD9638C4
9C747010CAD653B980E4A08B28703F97E5885F71CF91F94FE9294545E4A6D11B
505C4801776E0221D9F91E5B8A2606252C5D1945B1F19F279F7CF233CF3CC35A
279AC364B86375955BC3459A555804C71E7BAC6B33320ECE0108C84430BEDBBA
B223B3246E03CBF5B478316419857539E5BEC65FDFF9CE77FEF6B7BFC560088E
26E6C7259960C130BB35D0C9551A4A61131962541B7884DD76DB6DF5EAD54AE6
2B0048052045A52995EFF2F5AF7F1DF614F6096507C987F143DC1A9B4D3C01CA
76B8D1308A5D3A979C7FC661DC4D8533F6C61B6FB8A15E0AEE76D623DA3DD898
2BFC8BE9623E1C8ECEE8F6D1B1FA9867FC62DE6ECEC84479BFD88C2DCD906271
E458559985443F550B639B1497B7DD761B0EA7CC5EFB74B52A1C022E2E8471A3
D958BAEBBCBDF7DE73EFE5F34998531D1DC6A8E6CC9E095FCB0ABB829F9668D5
18466B34EA7486C27C2BC53735030FFF091D504B62CC7CD3C443E99445264E51
A47EB6439AE5286EB5A334859387699C4F2B3072C6CB45AD5C687AFCB0D08EBD
242837DBE5A1A178DDD6E6E6CD5BD7AFDB383838D26A9B183E46E25970693C4E
2BCB63251CC194281AE32469052FE6CA62BAB05DB185F835C9135A456EFD0AF7
18179464B75871C52463A7F1B871BA8BFB59D31BF1F2264E2B1B12309BAC108C
9BD3B5297529C62A98CD6652906176EE73371E406C2885679291E17B4EB93EC3
9E1277AC012257123BA650D6F3873C086EAC58412D655008D2610801FFC9BDAD
9633B8A30AE5EC617463023AB149C6D7CFD6546427C639813270C9408C9343E6
4BE093F9F3E7E3316011C030243AD34BEB44E01C89F24196BB6255781836FDE1
14333A14670D46D8BB072719D6931AB0F1F0D30965EE9A902F6F22FB87F6C15E
7BED05B5F49BDFFC06EF972F5FFECA2BAFB05912B14F5448EC12ACB60DAA3DE1
9092AC1908EF4BAF48C14A85A714CEE22E8178127AB5E3E51E12262108D9E2A4
41325E7EF9E5441371E175BA0496752FE22678E9840AD1AF0655AA8DC05FE178
C264D3126805F9656A355DCA0D4609F422F8364F8E58A178C2A96FD85F487CAB
628B9333C42FF000B07858E80322CA459ED131757C85D98BC63E1E079BED631F
FBD875D75DA7D274DFE9F64CD5ABBC056E8159C5543CFBECB3ECD3C0732588E1
DBE59AC65F306FC1862D9B1263A72857C86FDFDE9F8AB4B76B474CC6A347C382
505D468D48ED47F5433C1E0D23DC142E26E653AA3DF0FC5CDE9BD957D96FFFE5
7BEDBD5BBB3DD855B272D0528B17AD5E0C52D6874239C5F847AD8C9DA69E8C77
8DB704AB5E82E5863268A4859CCD24C24EDE21DE8830F56FD20A2BAC5D17F444
62DA7E1015F261A9544841FA052F97376D3808DD61506CE3E98372A35D191C8A
376E6D6DD9B2EDCDB51B366EDE3E3854ADD76C81050C272F19E7205168D138F4
569335814AA85C100EFF446549E6679C59F288DC77DF7D7037692D6156E5E9EA
D8B28E9524EDC2F074E8214E11C749A03CBE79C20927FCF0873FC42D38007AA2
4A3B2997E0DA5B78C1C2FBFEF7BFEF6A265C106386A013553006B660C10212F3
50BE8BDB2DC87AA5A8A88BD2CFED2E25E7892A41FE37633398197C81470626D4
CA952BF19E44D334F985D1703907D5AA8B61038BBBD546C77FF0B48B6E9E241E
1D34006E633686B4C6D297BA71CA2D30292015BEA1480D4D86F65572D2A44574
147938BDCC40B864642E384441587CD34BDBE6D04C209C8096BEE0225AAA0E73
C0A4B15ACC20FE7DD7BBDEF5B39FFD4C91076258B933E80F7959BB2BF5545124
DAE586E42EDC73CF3D61718B8A2770BA7E72E14DC6D14D058E0F498E163B44CA
323AF8BCCC856024DC551434D80178CFE1A9E04B6171D9DACA7BE371F0B098A8
33CF3C1316A899D89052905F950473A2587426AEC728EBCECA44083E39ECB0C3
E04C40112A14CECA32FA0DECCD80F7343AC447ABC69C1D211DA69AA942542884
69845D0315A58080F6C064CD279F40D109AA7385FBF09F44C761FFF00DE363F2
BA5422A32A2132EFB3B402C60D2C2C1B35093D58DE854A3E82646D585366F62E
B377BC351ECFD441501285DA917B9E054ADC24E79E7BEE4D37DD44C9858B1F7A
E8A18F3EFA286E55B11D5146615D7495F37BEDBD6CE9D2854B97EEB275CB9BB4
031A351B22C8A75AC7FAAC396E98982BD54EC906D2FD5FF50D447E33F0A3C06F
9AA49EC4CD3869C1274827CD56426077843993E73EF1F29EFD6602CBB054CC11
1A5ECC15F08D04666ED88D276BC2E4F72BED76CFE070B26D7B73C78EC10D1BB6
ADDFD8BF69F3F6FEED6369C18FCD75FB59A930DD50CC868ED8E4E81014309B7C
F1C4719F530A618341316B7528227072B12EA451E126A7AB27C797A686DB53AB
C3D89299CB2B9F76DA694F3FFD34D69DECC5AC1FE64F089127FFE87824DD512A
4946AACA3DC691ABBA3EC9BA2AA9A5AB80335ED632C838083DA6A68E3AEA2868
A3242B7556EDBDFC15D7C0C577301594C6F8136C4DA81F86F1D9319ECE0D4F2B
CB3CA5455803405264288F33CE38C353BC5883C327D8971896143265044BE98C
D3878B53EFC628B80BE9C4B929752F6593C75D38351C10E717DA123202033DF5
D453A1F0E18043B8F0B4C7196BB97200AEB6C4B139E59453049377D971DDC8B2
8BBF74235726F59ED809873C740AD2E16BB6D3B2433AED063478591E6FAA0DCC
3E9EE2031FF8C0534F3D454014A536452D13C8CC3D924DBE83834185D0AE7054
C60CFF62B5C487BAF7DE7B33CD3E25215747BA98D3E836409794A4014EC801B7
859A7BF079D59F84CE07CF03E38FD48E4AFC081922702A3712CD6A467829BBE1
90C13B11F387484FB9E5D6AE5DCB489438E370911B6FBCF18B5FFC226E8D3585
03C7F1339467264241F4721104DA9FAC0D74BB5B5360F1B48B91C664303337F1
C8591A87B1B59A7E004FBF343A9A4AA8D0F4CDE81BEC1F2CE5C7B72517D456C2
6778470D0C4780FEBE2AEC44E5CBC979FDF5D7E38827DFCC99555EB868CE1E7B
EC52E9CACD9D37CB4B5AAD66343C3464C3A4C552AA3B939C1FB452DE79F803CC
4062FD69A5E57336F21306B117344DDC88E3B1A85DC317BD64CCD6267849E827
500385BC6F5DD09C6FFC280CF0807EB110E40BB952BE58C8E5C3209F0479DB68
3C57C1851BEDD80BBBE364D6582D5F1D6B0D8FD4B6F50F6FD90A7DB07DDD86FE
ED3BE01A5843DC4558F2C17936DD35D2AAB13447275D7B49303FCD21930184D6
C85467B728B23A2BEC2E13673AE8A4714AF7930CE3CFFD8FEB63BF4138CAA191
7DE04D85CA171A95BB0506102E822D7AD75D7741BC12A8432B4DF45FAE34D77F
527E620FB0D6552CAD9C04FEEB72A09ACC8B62FB498C1F178732601F6F930155
880BC5444189928B0CD3CBD6B93C95468472CACE49F2E212106A3FF8C10F4860
093B48CC741C1CEF814BE3FB8C5AC815A077C33925271D03B5C6A9DF7303F1EE
5C3049C2F168395DA744615C294372EB7FFEF39FBFF5D65B099EA339E976FC91
95AD127F615D8443A7DDC7023FBE79E73BDF09758A6797B44D9C526FAA7146A8
4CD6DD53C059B785B2DC58A97411E4262973087C2677870944E4A5AD69449DC8
05C29B9B6FBEF98A2BAE206F1296960691C0D493F304AA2B56B95C072C9A690C
17EA4EAB5F0DBB09B051C88E0C3049CACF2AFE77AD1A9109268326AB98803373
CD35D75C7BEDB51A1EBD16AA4C65A768D3B19A040A8CF1315239E198E1915DEE
1317CBC1A99358E172B7B32E89321ED9A148F82E8E841139F503104640D34859
66E33CA3D65668B55BE17819D4F64CE70D6BD37A19C657C0988E25A06EA62A75
71F129A40AE38740A92CDD75D1FE07EC357B76573BAA75F71493761C78FE78EC
344AE968226B8B8C366A69C7C0D10CA410509F75978A90EFB930093C68F7B166
6BA4D51AB3E5C2C622886C557410E7737EA118E4F3412EF4BD7C3D6733CC39E8
0648AF5C900FFC5C60FC245FF4A3422E2CC79EDF6C457EAED70FE737EAF0E6C3
5AB531385CEB1FA84213AC59BB69DDFA6D4323A323636FA7F118D3272ACC0D15
B89A4045B00C3E0BC24BD2782E1FD43F9D60B7CCD8644929063318C65018D3DB
6961ADC92239B31DD62F72C28B6C8DF906EE2297C8DD7D29D8103ADD92B98548
61C94DA58DA1BC85C21562BC90E683347BF0C1076949CB5357D5857C6255A850
6F31692AE386E28227453D38190156FF575E9009605C8D5439E321637620C01B
4ED0EEBBEF0E6FE57BDFFB1E7E4F950E610D13464E131783E60F55B4EF348F35
99EF43B989D7BBDEF5AEDFFDEE77C6A9B72683B1F2FEAE1A3459774CD576738B
07691F024A049AE49C14B6D7E0FC12D4A4181CE55D9C3538E5FAA9531D2300F8
886D1F023F305980A5D16C84A91BEEA271F8506E20853288760145AA0229B48C
F07D587FA4AFE0CF69CB402C5E77DD759C1C21AF88B0A4C662DCDCA4B82969E5
8B2FBEF8CB5FFE32E3EFC6418B2A104FE9CCA09C1C35D1487006947683CE7BFE
F9E73B8C38B71247BB50CF4BC16AB2AA1CFCEB267E265680BF1DFAD42CC95F36
591C86F4007873D555576142883765F81E4FB462C58A7BEFBD977BC6CBD82998
E4A741C0201E14E4D5575FADB54BB2363B5C6E1CB0279F7C1206170182EA5AC1
7A37EA1EE578A6131F9E0393EF90684455D0DF4AB22A21A50A784D32D88C8B15
CF822F717F682E93F66B6A47E9D16DB60BA1376F7EDFF27D97EDB9C79299B37A
20923D98EC29D83FCE5833A3EC852B334C6A491E53CC0C63B64188D314D87A03
3F4EA26AB339D4680CB6A346D21EC3AE09C224674343106106FA003A2384F51F
FA85BCFDCF7C4A6CEC61C5120B0B4D9282E7770561C978412BC671E80DBD1903
B5B0502846B1191CA86EDEB263FD8681B56BA1FAB7355BC1E0E06862FCBEDE99
8343909EB16D0E1A472636DAD8D4D6DCBD6EC341ED79D77757489618395A27DC
6F227BD046E5BABB34701D186BBD7133C9EE01A70CE5F67623EC348C78C693AC
C4951B8CC3108192E2C6F8D581071EF89BDFFCC6659FF6A6651399A29100138D
B0F48F3FFEF85B6EB985CA4660071D67DA4CFA893045AAB921D3A27894158655
C592FDA17C7C9710869763FB1492E788E993C958E255D9785A315C495E97175B
302F2CE441071DF4F39FFF9C6678D645D6FE969C775C7832F3C91BA2F5CA414A
332BBD49FDA63E4422B7EA782291D2A8B19F9B4831A9DB0E5FB83F4DFD912CCF
6EC47265AC3A264DA079F733BE75DFA9B9551482F632EBE3E92DD19DE28DF057
FC27CD1056BA26594F343E2961275A33E8F32F7CE10B26C3C651C39D7AEAA9EC
F124D924D52B1F0253F4D9CF7E16D6B4369F02291CFF59679DC58621EA7DC836
559C16359671437C533EAF1424ED38F690E039C7247383D265640A47C79BF871
8CF0BCF3CE334E484761196920EA2A933A85E40754E73B560E332ECC38325D5B
510D2BCB479DD121D3C51A824BD1F064388ED4F62EE25BD69F620EF211F96251
12F7AD5A4212D1C05407BB2E4B6C4152C3404F8711400DE40B30A7462D435C10
CC9B3373E9B2058B779D376B56C5BAB8290FAAEF4DA0F1E11EA332605F0A32EB
D1E8B16949CFFA7C052B1BDB49040373B0D9B201A2C0AFDB963521A6D7CBE792
5C3EB1EE50E025612B17E0737CE2D9720293B251A464D430C68C57F1FC7CE441
C68589E9094C6F1CCCB21E47ECD71BD1E8687B5B7FF5CDB7B66C58BF65DDFA7E
ECE54F1E7FD23F3DF4B0856CC11B889A119CF5429146895B55EEEAD10E9D4A5C
2FE535D70E56C297BEF4A5238E3802B295C84E2E34259532BA1DDB72B20EE09B
C8699AEDE61115AEE086A455CEF060E0349777DFFB59030002826912912E82F6
A2DAB89A69424C666261BF3B54F2DB43D0B11FB558EB455B89CB625F7DF5AB5F
BDE8A28B18E72418810F82616072D4E0CBEDDBC8532F8AB371861CFC86103D22
79B1A14D5A72A90480C0DDD245C71D77DC6BAFBDF6DC73CF19A7B0D39FD43CD6
0551414613534FE38B96B5728954A7D4AE0C87B18060D5AA55EEDD2941700538
2E70503A18CD3053B7DF7E3B26858521F815FB63503488D3E384134E78E8A187
6840E1B25643B65A10FD36AA13479F59F199679F7DF6B5D75FC3278DD678C4BF
23FF4C6137A56414741D9F430309EA336FDE3C0685252F701176FD950D0EE317
829EF8651229B3ED86D230B8BE5C2B8274299EA8DB896A657DA3DAA2BA5E9AF6
1946C5C1C82E200C59425F907F7AD91DA127457558D6C86CC4E1871FFEC4134F
B0DBF37857862C1AD601A723A9243BCBE35F4D0B193E18A627B2DB35B2C8DEC1
F023771AAC6CC1A2F0A79B6EBAE99A6BAE119A39709A37F19AF83EDC02EE199A
110434BB981F6550A875242F841470CD02BA479405D42254DB0A70533773186C
024873A1D5AE47E371473F2D2049FBCA41C47657F659BE6C9F7DF79839ABE27B
6D7C924F2B0EDBCDC873AA25E416103244AE7FEE646E03328FE673A1E5228DEA
710435301627CD42AE6AA34639FCC9CFE50D34413EF4A01B82421CFA501E5003
B665417A8C5335801BB573516C0BCD9A3166099BB6076E7958988FE1245EE0F9
580BD84CF1BAB7B6BEB56EF39BF8F7ADF59F3AE1E43BBEF10F26AD34484CD4D3
DB3D3234AA242AA7CB8D17A9328019239C149C8BA79F7E9AD51EDC60AE2C63F5
9C9B2DA055E75AF7DAF0AEF075F37CDAC96E3083562F6B1BB181F12FAB656551
B93A46D84D658979050E0C9B0D560E09EF28DFE8F198695EDEC4173F24F7B5FB
35DFA1FFA2714CE7982958DE9A9F7FE73BDF81943669EC8BE949BC81CF7DC619
67C0CF807050E03D603F459D7FDDC9DDE8140A2C62E26F703FDC298D4E56B9A8
8C98EBC0B8811405E2757DB7AB839A7560BDC9244E3663C1992EBDF4D21B6EB8
41544D620EB07D2BD3AD4F11C930821A525E7CF1C5B7DD761B56052ED505175C
40198AEDC22FF3F0F04F26238EC691EAEEEA66A206AEC0899F3AF185175E58F5
5FAB822C6ADCB1C33A5ED20469ED4FC498D549279D74F7DD77BB706093D129BB
A5CB1D31318A605A46B4A95D80B622A1B8239B9D6A0C3866B48E152ABDE79E7B
CE39E71C6A41FE50D96F227DF12F93ED84CA60F6C8F9A5781D535E14DC1DF14D
656219823CF1C41331E7C20EE10B38CF8CD7D14EE72CA90DB27602A500F6284B
11E9BA51DCE38507A4FA178DE5D2A54B3FFEF18FFFFDDFFFBD78BCD98E9CF3E3
EA66CE834B666032E60C7C78FDF5D7DF71C71D6A4765D29E88C6A141E46F1546
70D5BF8EAE2AC34F3EF9E4C71F7F7C975D766119B69F5505329FC91344885D86
644D013CF62E5C1AD3B6FCE4E1AE8BE71DB0DFF2BDF65E962FC6CD06CE579C4F
B756DCF23A925E74FFE9F513392D98868D26E72CB997D507B6134D037694891B
B6B56A3812E602D818450B108DE116908BB450C26326F63F03C8EF54F14313A4
E4D3CD168E3C9481D768B7EA2DDF243D81D75BEA5AE4FBA1F1E1FE948BF9DE56
3BD8B47970E386FE37DFDCF2E28BBF6FB4CCE0C068148F5BFAE5AE4A75D42E7A
4799BA0B9C733F645E014E2D7694C2415E5AC44BFF121B03E2EC873FFC213E14
8042F14F57524F96B67AA3D8BD0A7A64EFF3AFBC11F5903F89D7442F1E6DB7E3
219D63B9FBE4D7EB18C06401D2A10FB893B90329DFB8EE6E1B3EFE44C61CC532
4F1F43CD38E31803318D4C09D0F6158E888F6FD52DB72C9B945160B18B3ABFA1
0CAD1840BD143C8A6F320823338DEE125FAE3210810C5113B2F55C72574EA212
41AA339099CF54B0E88E4D1A376723F873CF3DF71BDFF88664283E84ECB8E492
4B2029D4D375EFBDF75EBD7A3503D62EF31FDB5A7142F32963B62D9B37C9CC19
69397BA30EDD309692154FA909A6F409704702A256AC58B172E54A9386111986
66D139A6028317589636A31C2F412C48F484DF4252933C441D894D5678412B1B
97FDC4273E01F79053CA99E41BC607697C315231B914D3CB189F2EBFFC724846
C6EBF014981FE13184A7565E440E3E137DB808F61C5681010A3EC2D9679F0D55
A464E9785B98B4AE4A4F4AA01BF9A571656C00265474116DDC0E2489A0AB2643
DCD23D579B11059D696932104447D34FA9F7684C5D76D9650F3FFC30B6077FC2
8327D0B0C4AE1B77EEB0DA7868D5433B498B5A7071053F8B191D299BE8AAF211
834FE701E29B4492988DB9FBECB36CD9924573E7CD6847B56603471A56B78533
964B7D1D43A24DE3A57FA50EE027B4A3A3C458BC2B76BB1F7B963BB5EED99282
280C866CED71C183910A4D50C8D96C41607BD558D429DEE7021358F620CF4F9F
188F034DD06C5AD2D67AD46A34039374C327983163492A3EF289078D5386D936
3058DFB17D78D57FBDBE7EDDA6E77EB7265730ADA62996DEB67B08C4803B2BDA
A80EF1DDF17209A825F21866E10E2447052B9045F5681C3F60CA1CB57B78A5CE
4D4627E356AB31E897F523E9C462F04366987184DD9A568E5C0E10FF4494EA74
0F9BCBA2D0AED9E1D62D7177117EA2F9612290EA87868B209D7C40E5E42067CE
3FFFFCAF7CE52B6C208AEF74746EF7A8B5182D7DBBAD8AE741E5DE79E79DF82A
9E070E35E16EC41BE1AEECEF4C6E165CC176A3ECEF57FC744A6D2C7892B04349
DA0582A829CE38B40B414E4986F9A5B472F115F06EAEBCF24A8E879B9E8EBCD8
29B039702F4A93279E78E2E8A38F3659181A72078B812970512E1446B61FA11F
D01A6D341BBD3DB620DBEA06A7A4D04CAADB9A9C3166B504B99F88EA1521CFF1
C71FCFD0BCD02F6E96853340C5C0CFF9C9E2C58BF109971F37C2A6771B2F339A
C74D43443673D114CD982291A7ABD887B28C941EF810DB027631661EBFC2025D
73CD35FFF22FFF42C38DFE810BE816FACB251025D600DB807B63BCCF44A3B1FB
EEBB33746326525C3092C30BE23FD5D98D7A51A5DACC2592F74DE5578CDEF859
AF57DE8E551A324A9458167B1D5161D4139FFEF4A7FFF55FFF95278DEE3F07D3
9376C413D6888FC6688FE2184AFAB9B2862F5ABB42857260B82375393E39E490
438E3AEA2818284412E3D7A55239BDBBED1A673CF822C5E5FBECB1E71E4B66CF
EC2B95C34673348E1A70C9AC26A84318E53C879F4AD121BA5C047A08956B173D
F143F2C7C027306D93347DD3F4FC38F0076DD4A8E0E573265788F2B9785C1398
113FC05F937C888390B06CCD4FFC7612B7E11344A1ED6F10B51B6DE88BEED0EF
AD74CDB53BCACF355A493B0ABDA4DC6CFAF57A6BCDDACD6FBCBEFECDB736AD7B
B31F9E818D02B5E27C719C5393E5DFFE24A62FD95226F309F04454037C2F5B98
8BE86715C2175D74D10F7EF08355AB5605D3B7F99BAC09A40326678C1387A642
B2456C0BC609E5F314D8565A59498D4818CDC4525E3728329D4FA0F223E58D45
DFC4DF7A4E21310F263E8148B9FFFEFB353CE6CC18DB540190F01DB80E1C624A
54F9138C61D8ABC1968431881F4370B0468C8A1A4B4586779381D095C5E5013B
EEB8E3A0DEF1B48C604C1944334ED386C0A1F064201B0F80B38185E47F4A5EF3
38495FC933A02D4FB227CA0B28120C0C4F4541A31ED662A6C3ADA1B119DAFAE0
073FF8E4934FF2F9BBD2172420750C7E3E7BA66D51642DD646BDABD2353A36BA
78975404D76B1D8BE72A0393450CA409BC8C53C1CBA0840C7490CD09B790B090
706424548E02560BB34A248FC8FD4570CD0526624443724B3A653B7B59A3280E
86AA570473E2AB805287E5EE160770BD3099188CDB8A6EB2E6E3BA30A0872FEC
BBEFBE182D574D54FBAE1C574857102391029D74D249509334291428E31D3587
94C8B4AAF04D5CEAC8238F7CECB1C764CD09CEAB803E5D19BA025C3822774D46
FF42DB9C5A4725A06A4B226B3171D8313B4418DFC8C45162434A112F9680CA16
961C61161DF67DB1949B3B6FE6FEFBEFB370C19CEE4A0992BAD9AAC611D6C80F
3D3B93F5665B9AA023FFC1C3AF5416CD23E3D9320808745BF59B408CD7A10C12
D3F2CD4810C203860288E0393055602342B95158FB7E00A721B14567295E894F
07651A45398B228DA3B6AD58E8F1835E8B30CA17F11C58CC661B7B188E422589
73D57AF2E20BABFAB70DFFE10FAF56C7A2A111BB4B7759B4CBBA0DEB4D16E015
E68D5292764CE474CC96C540BF56A850FAF402B22B3E6126E2C5A75C2F574F48
E2771053F31604B0B830771E316E3FF7D4939F8E54A96278A4E3C2342FC4D1B2
65CB206768A2ED244FA06895428E8A9B896B87CC486CB4801DC59A4471BD7084
7A5EB5DA6518E094534E79E081074CE6D762D8D4076F6B20FAD7B807053ADEE0
535AA00C41305BCD07F0B3C64F8C49B17A4B68453D95626A9C32290FB1329107
E6C20B2FBCEAAAABB8EACCA7E13B0C23F0CC70AE3523C944983CBE4F918A1967
D242FD0978ECE528712789025AC11668383CC27801A131CB962E5BB3764DCEF6
7EB57BB41DB5E12544C9047FD338CC591D2ADD6454CFCCF1E22EB4FE68C27007
134227DF4BC48122EDD1537CEE739FFBC77FFCC724A365772933B3D63D2147C5
740B8983A0B921D6B939B8B754CD1F66DD49E50F09ACB566CD1A9E042E659255
87519E12A13C39632C9F80C3660181C9627DD824F0DEE08D62CB4AB2BB75D7DC
B5149A6A5C25F80D03381D9150D904C641F8F176B802F6039419F316AA99A7B1
4C75AB22C40EC01B2FCBC128C2E04FEC43AB0DE04DEAD92014AF848597D10B32
40ACB4B932A54E903A073500C1DE37A37BDEFC19FBEFBFDFDC39B3BA6C4701BF
DE18AE8D8D45712BB4E679E0873993C154A8094C06C667F8450A695C1525B990
92D122389B968B34CD1378F1A8B5FDC33817B68310E2C32A030CD60F86431B12
6AC121B09AC03396988E42D922470B8917B43D1C0AFCA52B08FB0A612197CBB7
A2A456C7875069B38AA5BEC0CFD7EAFEA68DDBFEF887575F7F7D53FFB6A1C1E1
DAF070DAC53EC57C8B4C9E11081E644614794684CEC03A7209185161B8C34BD1
CF6E1D3897CC0DFC9A8C6A77725E7A7280887B89DF275B09DE9C78E289FFF44F
FF44D67D02D9D5B5909678C72679F8E187614ED127132104762CA3C494517EC6
963F5DAED173BAA7B16880720FCF452B102339F4D0437FFBDBDFD205A47C6625
6C47C5835229C467D309E0F7E92E30740C1FE0B2CB2E335958CCFBE637BF79DE
79E7899C88A5F0ACCF628135CD16C585540DCBB32181484113676D6114A33719
CD05BD39A543891B51AC8A373AEBACB36EBBED369218538A29621B64F45ED22B
04D830C6C22B98ACF4979A80CF9C381C9FF8EDE9A79FCEBC4247C9154CCB638E
39464457141FDC5E9A4A89248966756F57298049C3D626ED7FBD6EDD3A57E8DC
72CB2D575E79A597968C990C02EBA6165D8B9ECE29A3EA325868F9CAA8E9885A
BA324B3E262E4572501619523E32033CE58E64B28E2BFB918F7CE4BBDFFDAE4C
5DC1A244A9E40269544F47BF58311F417EB9857035B624E44CB280D3CB30D1F8
CEB9E79E8B0DAA78A06BE9B8DA88CAC36D6A4FCDC455BBFDF6DBA11445F9609C
AE0F1DAF6422DCB0237549E7D8557BD3CD9B9FF1D8F819E17092559F4EB95ED6
50097D88E6384A6C866051DF7EFBEDBD6CB725DD29101012A05A1BC6CD213F8D
0749540FFC71E6478A09AEAF6A35DC4CE6F84130700552BC535A7510B75B91E5
A66E87961DA8EAE7AA9EDFB074A379AC6914E620885BB6055BCEB7D821CFB255
FB9ECD217BB9208E82C460DB5492A06069F1F2B6FA3D979470D994B42E09FC52
2E3FA35C9C55C8F78CB48B033B465F7B75C373CFBFBCFA95353BB60FB6C645F1
B4E84981204C466E4F13CAED152C7AB42F7CE10B5FFBDAD79423954F202EFD8F
7FFCE3BFFEF5AFB1D5D54057D34E56673311A9DCCE3A24AB290D5E38B3495603
CBE131BB193824C73CA4DCF68C60AF5CB9F2F2CB2F576E835E026B56689DA860
C5CBA88E896F94B58AE3B061C306D937941E1A2D3BA0D0E45AB26409740C1F99
980E93650EDC4E24D75E7BED15575CC14753570C0925D666F3147BAAD8C6BF1F
FCE007FFF33FFF533904A820CCA9C9A243AC6C32599C4754FB82CA8AE3412CA1
5E4615C203CC10845A90CB991062578D855535E616942AA5ACC606D82BAC24E0
FA419490FB5EF3EB65141FB2D4583DABDA577751DD96670ACF69190E3AE8A03D
F6D8E3F1C71F97349403EB2A0933B1161A172137B222A44404A93132A9F94D16
5894DCE40B530A0BE5BEFBEEC37BF625967BB4132093716C588E1387E79C73CE
513C249CBE4B62E254CF3345E1C2EAB9AD197C8C332A15A561F1C925975C72E3
8D3762069860500E963FDF6BAFBD56AF5E6D0B1A53C8B3A82388DBE3ECC18CC2
0CF0B2DC27C6C17AEBD15CDCB78A4BB555B0435E7BED3585117622C177FE128C
44A1E7E9327E495A0747BB8CBFC283C014A02D3279BD6084F930AFBD363441A9
0C7F74D15E7BEDB160E1BC8A65E5B333D9688E4113C0188026B0E22CF69503E0
02511374A42BA4785A260DB6B4BD71A869BB01A99D24512E6AFB6123C85543EB
1978859CC9175B611E9E4784FFCC13456AFBB361D212DFB31DD1AC26F0F24150
317ED1588315FE00345E0957B38B82E7F04B855C6FA1004DD0D50A7A0707C65E
5BBDE1B9DFBEFCFB3FBEB279132472DD6E1F6F679AC064DE8C9E8E92411EB6C9
9A469C74D249DFF9CE774C46FC2ED603A646C950B976ED5ACA5C1AEFB423F1C9
DE7BEFBD6AD52AF5B13159573B1D199A416C15E065AD31FD8CD4886A9E15033C
EC38D4F4834D5655CAC00B2BA2E3B4712CC6CCF70A5549B899AC9E0EA71E6F24
FA30CE4F7EF29370A9E5079BCC03489CE6CF6A6B632676DA90FC611E91650DF8
02E43EE433550EB414034D14E376F2D9618780165AA9946EDCD67C60D1B4E2C9
A90CBC89D41934CCF15B97BA8F917DBA546E981BDFC105D97D8CAC5EF40A6956
E3CA5018D4C9E26F089C0E9F2A41224F11A31F34FF49B464B2A22DF79018A7C8
88A85386D8848AF1B236C8987178A058152E1805190D4F1AB038E1D89AACE965
F10B34041EA7ED3404961AB8F4D24BBFF295AF70BAD44D42B3C7FC30AB375848
413F83C360F5ACF2AE8460BAAD63A6B467277F88F7D0E2C49BB2189B9D37A63C
99B4E555008C49BEFBEEBB19FD70432554DE22501268E7AAABAEBAFEFAEBB994
6CEB4ABD8B4923A93AFCEE534E39C5647414F8573C8E84D6607EF827B80E8490
FA19BD87EB200AA1D161F7295580317CE8431FFAC94F7EE2D2D54DA932356F2E
9A3BC9D8B4986DA6149E4E0D70FCAA2DEFE84D642661CFD2CDE6590250AF0DDB
7DD6ECD25E7BEEB674D92EBDBD3DC5D0C23FD3A860033A003A05823C8DFF8CA7
B249E0EA65A50C61D6764DB7A0DE6A1818A106CE40AB19474D9B454F4CCA0713
410D340BF9562E6FAB0D20078AC556908365431721800FE07B91895BC6B6B289
8D57B45DCEFC322C46A801780DA1C579157C2FE7B14B995D8DAE7CAEA790EB0B
72152FD73B3ADC5AF3C6E6E79F5BFDC2F32FBFB1765DBAA68999DE97928E27F8
8D11517A00AE4BCD175B00992CA7E8D618F22CCBB4670C44071FDF241FB0F4BA
7C5C93456F1866600296F128993834A8A3AC0B211956D4245158153566C07828
F42464446BE6D6277774D92229B299E4AC5026B353266ECD4112FCC614A3CC3E
4611F09E5DCF4C66C78B24FCA1871E3AEAA8A3F821FE157F97FD3DAE4EFC09B3
B538FC37DC7003C7A7069678AA9B6FBEF9339FF98CEB296B2D094D21B293687A
E1BD34CB6AE2284B8D66B244273EBCEDB6DBCE3EFB6C4566D40D58A5AADC1F24
9514D294D5E104AA8B44C88D06784E25213D06FDC98DB5E13BA4AC7075830ADF
A866DC564414A9E229A4711A651D0E68EF5F70C105B091B9B1680BD36C84DA7F
E59557F085BBEEBA6BC58A15AA7AE39CA88C9E3A1F8BC2E02071B41DD69FAB8F
3B649CC9E2B00CBCBEFFFDEFFFD18F7EC491AB3CBDE395646D6055A940FF8936
DAA2458B307E6C0F2C93B49D1BE63259B54B38A9B52CE750E50E49C6B1AEF343
36826062C74DDAD712CD0A94D174D05ABB9906E250292E496ADD214D266B0217
4CA2D80B51DBD800A409F96FD902A81D4935C35ED9264BA84CD604F6396CEF31
0811B370D1CC7D96EFB970D15C18C4A55C9841835AD004C65AC78D34EC96D064
C633D238A51AD0FC98AC0D0B83B4AD600C9BB1D5F45A750BA7B2DBDB36248BC3
0467302A144DA1181673855C1EF3DC8426C88596772897F7E184F8B6434EDD40
032451BB15B4A10E4C3E088B90FE7013AC855408A11C6CBEC296AE1583B0920B
BAFCB062435849A55E4B366F1CF9C31FDE7CFEF99757BFF6A60D1045EDFF9BF9
A7266085C4030F3CF0B9CF7D8E89567A355C1AC94D52E3F80ED3789235796DA7
4D80E9F4BB405555F999894D9C28AC4485C2800FE7569A009E3DDC591E795794
617BE0528A72C3C6C5596080E8DE7BEF85C084F0C543D118172AC9646D012975
E98BD00551A4B48383DA384117BC6E4F5FECDF4004B6CC32CC808A6F4CC61E4D
18EBFFCFDA9740595695E7EE33DEB96ECDDDD573B72D2A82A228E6E5F98C2E43
125D0BD09088710271888022623B3109A8382193222046511CA288C664496284
0551630C41A501ED869EE7A1BAE65B773EE7BC6FEFEF9EBF77DD1AD0F7BCCBD5
1655F79E7BCEDEFFFEC7EFFF7E96B285E15FD9507839F3C26FC3CFDB433E1D8B
2D4FA5745D829792855EBF7EFD29A79CC2CE40F61FC8F8173E21EBEC36A31EB7
997E3AB9FEF18D583BB88478337EC388C9269294228C98B5EBAEBBEEA28B2E12
A205A1588AAD7993F6C68BDC4822983FF02031D184FB14FF826DB42C4530FA21
9B2B13DC58C0CB2EBB0C1A5FAE6FCF53931CBA4C0EC2C6982983937227F8165C
D3864B312726C55EB91463BA052D4157CDC04D199F984A66EB86C00996A81350
0A859B96E1A00C7CC6BF92C1B30719095A86F424975C72C9E73EF739C622F0C2
10B023F293F5B17B701CD3B603030311A716C033929C072690A37DE3B944B0B6
7B21E513C9AB26663E01ADDD073EF0812BAEB8224AE710FC419680B9573C0E49
AEE44C2E6109BA08610401B2B0E5861DD04918B8A56ACDDA91679DB06170A80F
F792F525ADD1A6F1AB37AA32788BD0007696D0428B69B4D1445ABFB8156D09EA
AA516F22AC75CC5C1AC74D0207B1B5D29640B3DD66C20C9479DD0BEA41D8083D
D7701041EFB71013C491CE26359B71A2BB0BF030A1664AD2CF05FFDA4BFC38D0
1FCF8541C1F5739E5B705DF8A7B08290B7607232DAB6EDD8A3BFD9F6DB2D3B0F
1F19334EE1A2751AB1F48ED597433F4C6A7EDC5FD2C6B0E268A7EC0597483DE6
1846193A8E8E356A58CA6F02FA10D205B68631F8938647C90EE13DD79897938E
C02285145510CD0381AD3200808A940C199235E2F56D1499B8B962C9A8666D57
4C707D1B376E2492906A93D1B62488548A66E4D22134BFE9A69BC81C41C42631
96BC3EBD619C2F76427462027C2BC7BC30D096212DD4E6F841A644B1CF5B308B
B46354B26CCE6682981CBF49CAC345148A100E4BA9840F7FF9E5977FE2139FE0
EA9F7CF2C94F3CF1846D75C83641200199859877834F0D7DC4690C76DD9C0916
5974C90B89D3C4F09311809376B17BE98809A24EB93ADC6C1B3AC9AE57F92E32
A112C3CE4845B02E225E446B5D70C1059FFDEC67555A46F6D369A0E4A2E94AD9
D3A43158C18DC1BE42995217B38D4B2D941DEA42B9882510BAC0134E38E12D6F
790B34A394E8173B99B6C9E782308103858E0FB20B810E171D617698DB3D1FAC
07D8306AFCF5E69B6FBEF0C20B996C11F414A2C08F7CE4232C1BC83DD8C8638A
F57CC09293125ED2D590013BAE213027912FDD0E99C2B6842550F3B243FC5242
F77035FA8CF44C17BC8E9B8E586038CFA056EE767E4C602ABA89EBABBEDEFCEA
D52BD6AC1E29F716F53862A7D3ECCAF3C9436BF497C7E62CB6EFD07DA6BB2309
340A365F4D5581326F36DBCD4614B38DCB6573B8E3074926EB65826C18E40C8A
545B828CDFD0BDC7BE8783AEDB8BE3A693B4F5D4195DF0755CA703CB8993A666
B40E9CC46DFA6136972D6733253FC87BDA0CE07FDE6CCD6D4799EA6CB06FEFF4
E6CD7B7FBD79EBEE3D072B95AAAE612F6E090440280F82D3C1143C8F95948813
333E8F4743565584413C271B6F22F8348178099A4E59500291256EA22421A58C
C189F01C10220C1052BC24AF0113DA7428F17B388837DC708314BDEC6AAD7854
78529C4AD28BE161F95762E5D9EAFB777FF777F7DF7FFFCE9D3BC5222AE31073
DC21C36B9BC75366953B293D5A3C6FCA8DB2468674903EFCAD38DD36BF8D5080
D9A576DA06BC478EBD3DF50CD7C569C7C3F381C5E2C90F5DEA1262FDCE77BE13
FEA3DC2207ADF199A174848AC749D99760C7F04E29ABD20C30834F20B0B258F8
E5E0B9D650D92EF799995CAE1DD6EBED6F7FFB1D77DC21385A5A3E29C7732E12
7D6136E23231C2A04FFAA1EC3A1835E38E1D3BB8CD5434D8B9ABAFBE9A9C2464
3AA42925E51C3C713C4E971B2B439D9EB6626C6B34F6A6C195A0669436C5252C
81846BF83A7E96E38E11B5D00D17862229B7081938318E220C7803CEB3905E71
EA03110A6CFE90B60952F8B22A83B3813FBDE0052F78F8E187052B652740541A
D54A0F8E321ED3F6EDDB6D2CC0EFD3D1B3D8CBF621E2B9A323167B3FA585070F
1ED9EDB7DF8EA513F850377648998A6521583132B472E5F28181623E9FD31582
56D31CE90E2E8029C17A1D07B303EEA025A019E88A09647DB45B1D6B6866D4D4
212FFE433991A6207555A2A1474910FA591F5F970DE0DA671AB004D9B0AD9D7D
DF659DC04CBE6C9BF41556D2F53AA3B6230409896AE10ACA6D04995C3E57CEE7
FAC3B0E8EB2A021C44B719C3E1CBD5EBD923879B9B1FDBFBCBFFF9DDD6AD3BC7
2626F53D2CB26EB6BD97076171919E2F9E972069D97DEA2F01A4F2C5543ED315
36C440728974496D6D283F130E23ADFE4C0A097E9AEFB42B0AF8F7F39FFF3C87
0952312E5BB68CB01FEA5CAA2099EB47E83CC55BDC057C35DC4D565E29FC3814
CCE9E35F0E18C79DB36C6667BCED09833460C2CBA40C5F9CA86E19AE40D165D8
CD476385594258C73E30923311466C01A5B2D84D4B2BF197904CB01EC2B2B34A
1B2CC555C71A41BB7DF8C31F962B53EDCA3630141223449F4E52318497304091
F2001B11850D5B0A3264E313F3A8E6521EDAA68BD68B4A99593FE9ED92AC85A4
0B5AD6786B5B32249815BA53EE0731B82A2DC08AE36373E08837212E86B4B97A
E98C30460CA270F99B642154A26B71648AC2EA82BB08229315F5054F26352FCF
808CDC226689412B670608885BCA6E425B221E804CA0642C6C4F5EC51B200F08
9C996965655820C84C3421B2BEF2CA2BE3749E5A9276D54AAE4F10E5AC519D73
CE390F3DF450C5F4ECE2CD924514E6802534FE7C1429130E322FF369F1E05C0D
65C564F443E39447BAFB83E60BCB7D85F5EB568DAC182C68DDEE8519BF55256F
44279268343A310116C0B6043403522EB60BDD9D2FD23D0489196AA9DB84F17C
810F15E0343DDDB50C9383731C3859C407610631412D1BE0913547A99E67A92D
41CBB09FC62A86EFE2996414EC48DC6A636D5B2E6C49D0CA668AF9426FB13010
664A815F307D6C7E12F62651B6D92E8D1E693FF6C4815FFCF2F1C79F78F2E8E8
D8ECCCC2F2E658EC7ECA8A0221218C98559A8AA1222347290B5D8CC3B8147833
9595DD4D263062E24D6C1A3B994D4228E36B5EF39A6F7FFBDB36309452278108
6580B022461B3CCE8135EC56A5118674FC080D17BF9D5A9B0F0B1DADE7C318B7
1D76E8BDEF7DEFA73FFD696681A43D88CA96A12D1B9E2343A8CEAD275042D2FD
7222E67789CA49918C37D7078BCCA3A4975D59BDF54C3ED272723F6C14844DC3
4D75469E132EA54A7C0D607625E6EA1CA1726F210CB2A3A3632618A9C0ED40B0
0A01807131D7E940E9376DBAF4D65B6F850F53EE19603543C021E2C64AF33455
B35869C26C212E38F978277E4F3E89389DAE257AC42E1F091F3A3D08BC07D747
4003F5A4D2EABF5AFC45B1A394D0E6D1DECE6F3B126787897E7C0462F7BDEF7D
4F6AB6881810FA09F244B6838B2F94E28C587959BBA590612C1C877DFBF6490D
462A51BC49D694782A9646558A64F041988510F7819655BAF0EDDA127E83D04D
BAE1443A6DF963A95399C67719E4494B43C2740A7157B3E8121A5C8E3AF10567
9F7D3616967964D96E2C02876832BB4A40883D05133683251F5274D921119D06
3E32AB88D1E2C34FD442457B669FB9F5CC2677BC813CC74F262F38E579EBD6AF
761248BBC94EB4EB6494A3D83041449785368FD180D48A0D67B52BBD66A25B79
0035E49F9E9093A40943B6883B86AC54699E09C73415E6DA5872CD4BEA353D07
6A2E72BD362EEAFA0D3DF046239AF4A803C76DBB0A6141D309542E9B2F95FA0A
F9DE4C580A839C2E1D7B7ED32F8799BECA8C3731A61EFFEDFE5FFCD7E35BB7EE
DEB37BFFC4C414FD2196039555C9641049FA13E68125E5C0137AE9A59732B9AA
D4F161D1F820D306CA10EB4A92A0AB2423967EBE20516CB0E9D0331000B6A4D0
E5B50B4ECA9A5B275CD0CC0A10AF48A122D42736633565CA8D4A5D2BBE07EF7F
FFFBDF8F78916E8A8CFC628599C64C467E89C3DE0548C3FBDFF6B6B77DE196CF
D71BF54C9869B6CD4CB0A9C9AC71D05B8D2641502C2832E12F279783C884D0D3
76073BEE2DBD2D1600844C4650AB3CD5D2D806F3456EB5B925B20E3F8F1E8F6D
8C3C65B750CC8C8F4D711772391DBE958ABAE2DA68D65263A53315279CB011DA
1007812BCB80E86B5FFBDA45175D44148DD8F94F7DEA531FFBD8C748652C94A8
F60633A12F562A9DE5749C37DB160EDA09FA1478CFDAB56B77ECD8C1748DA0CA
9638F3C2A4C6AC1F152841D0F83A6222550AFD96AD7DF6B39FFDD4534FD95E6D
94B2AB4B1F13ED1CBE05760E2BC38895781851F1C490D15B4F0C0114EE9CF338
F15736DC917A334A07F6E297F85E865C4B58023900A2D6E99109A589938E0352
2647C4EDE6A251701D83CE260E84286C223A78E577BFFBDD5FF8C217549A36A4
86E551216D6792CEFC5A4CF38A93CE4723BC64C3860D308742EC2A9DC937DE78
E3A64D9B64309134FD6323109BC330FFF0873FA4B7C59846A671DC7DF7DDAF7B
DDEBA4C12759888AB2CB0674D5692EB8E0829B6FBE993D25320EC1E0898F420B
C31F822558BB6E15DCF0422187C76D35EB768F0E110DB6C9F7521E6C5E3FF08E
5355DBDF1EE97A2F4992DBB40447A3F5580000B35E494441544E872D872060C7
F51459E435B7B493784E5D7BFA1E96BDEDBB91877F1185F84AF79DE92C5256BB
E39EA6A3504ECB55ED201F6432F942BE94CF95C3A0684621684B1005E520ECAD
CC385393EE962D87FEF3BF7EBB65CBAE9D3BF74C4F5519D0C7860D0DA24213EE
A42D90CC6B8BFF07B9A5609366074BC709C64C16416C988A815A645ADB9E2D68
6F876453E58BC4174CD2BE7A3F1D354A1BACCCCCD40F7DE843322BCD766BC43B
91B32FB968126A0922D6B60471CA4E61270348F78943C4AD813DA32F0FE9252C
5BAAAD7CF0134F3CF1C9279FE46C98499C1A4F9F9A20A31505FE6D91415D1DCF
EB8870DA757846BACCF3B31594553D47A59067F19D451931005156368D669376
4606FED137E42EDAF53101AEE88EF75811CC97CDE6EDC1584667555368303CFD
A8EB1984DAACAB8C89B791FA952A98F9258805D68B0680918DE808C92C519972
5FE58224C476E7B2CA48B66A314D44DBC90B46E918ACF98A5552E776AAD14907
7093591AC2A44CEF98EDBC70B4D079E79DF7E52F7F599AE9643C0B29EA181ED9
200A68BD6BAEB9861992AEECA10D48785A0C8CB2189FD261EE1DD81C0414FF9E
7CF2C9B8259C4FA153655CA24C74CC0880E68AED2D74695D43494B59E20C1F0A
D575D75D77D55557F168498D7A09CC8FC47CACE949ECCF9734AF91608ACDD578
7CDC1EDE4CDE43019E33DC26684A3851E807409C885FFA7DEA040B5A02829B71
B5AE9E41BD9501CE7CF179273F67CDDA9550C1D92CFC30D56E3518104B1B1D35
979C2C3537F56706D37B52347652FA1DF3F1384DA19BCF2AE9CB637C90181BA0
1C87409A8A2E0FB8B1EFB57CAF1D0671A8694AB1929D4C6C3E8B58040E0D0C36
3E1865F319FDEB4C5147037ED673B37ADAA5172499DE30284D4F3B33156FFBF6
F1FFFEE56F1F7F62C753DB768D1E9D161486F8671463699113F61EBB9A2873A8
84E6805959F624310F6ECB4997EF6F4FDC93CE4A71C2E4AF76CE44A5306BB914
FE93B380A4818B66833564965729FCF6EC04C929D112501FD253E4C0481E045C
9C89EEAE315CBC252E083D1BB82C0F3EF820A96703630612950C9B65E9E92DE3
064E3FFDF42FDD7E874AB1F592B296216572A69852233EE8CC33CFBCEFBEFB1C
D1EFA20278B40417C873C2F60D6651789E6D4A6ED31694E597D901BD5DEBE716
8E8C68BCA076995BBA7453999D366B5A4F3339F05F1473FDB8388486F84E2765
0A23F72F9E995CF6541C1B376E7CE94B5FFAAD6F7D8B6D59CC24C295965643BB
38A12C6A5F61A1606582CB27035E88F391E458D74B92FE5C34447C9FFFFCE7D9
E44C8A6067EE905295BAD804748AADB213D0223A2A9DEA871BC3C3123620A052
6E818CE14D7D3D6D99F0D4B87922671087DE7AEBAD1CF3C93A0AEF8A7EFA1215
5451AFF0BC7029CA3D6DBF8423F82BD707B7C75A3DD78AF00C09E1655C0F91B8
175F7CF12DB7DC2234FA1409F68E4A4D4830154B337625698F82F04E331262EB
0D61C494100AE1A5975E7AC30D3790208C474ED65C1893187A12F5815FE2227C
6A1E5DF6AC2D3169442D941D621D855A0F426B7153EB6FEF29179E75C286D5AB
576643F8D366F79D58804392FD576929585E727D4F755C0DC144F0952822ACA4
A4D429413BC62D36D7341771E81DC3D4D4942E0F345DA7E5798D0C2C8106983A
F9629CCB8638DD7904BA2116D9093449913220564D3DE43AA1A3E0DAFB9E1E59
E3BAB95ECF2BCE54925A35DCBD77FA7F1EDEBAF9B19D5BB66E73923C49CE99CB
851BB175EB5662C7B16B575E7925DC17A9FAC027F8E4273FC94964F678734826
BD04724C51C15147CDF718BAF242AE353C55CD850BB2CB1717A42842814274B1
FB140C314BA24364083681F96F7DEB5BBFF18D6F08390A39DC24445396672C46
1A17B9F0C20BBFF4A52F099191328DABB8080B6C745F9C94A381977AEE739F8B
98804D6DB006B9AC1E91F6E2979CF6AB5FFDEAE8A80E26D66FD8B06BC74E2F1D
7B25F76977710B5F99D45C4F3BEDB4871F7ED8A15AE70D319C6791846FB2692F
6DF67C65A1BB924E4F20A28F5887A1FAE1DDC4781B9DC44BBD636C8B85623B6A
76581C3CC32DDA6C9850A0552CE6ED718C7CBF208E38550D36C02EFDE307686D
7C56FC47D21E70595FF5AA57FDF297BFA48A1195EDA553A7EDF21A0325EA2FE6
E2591762E560B1A624276DEA6315A86B38220D92508389D36A6351680CF003E1
F62297BC19BE4DF04276A6AB8B45846A971D004215D74E87510B0E58A59959E1
6F584C97E124B886128AEB7CEAA9A7C26B60F9842B26983FDD5D9AE2DE84EF8F
0C2DF307E9603139794619470F220EE3C113CE54809C3D5B0C968EC984204F99
24156EF8852F7CE1CF7FFEF32EB817C26A585365EA13FC93ED7041B91027EAA4
1C7C8217600E5712C44F0B409A6F0970BC219FF6BC2661B58203D4532EAE5DB3
72D5AAE5A5829EF288D3AA878C59C056D1EC940761A2969581E1A0B7EBCE7DC5
493BCD8748C93AB2D244B17C0591FE71A29B8A634D3251F71CC4AFED6C06ABE7
168A3A58299672AC6967435F87C19AA22834DFE3ABC48F237DE45D47578FBC6C
8FEFE12CC78D56FEE081D9471ED9FED8E69DBFDDB23D8A8E13EBCBD05946D292
1D65AB849C23EC8B08A1B2EAC6E2A93CEF79CFDBBC79B3ED3FCD7F49564DCEBB
A477842A8D3E87E0AD711B575F7DF5A64D9B4493524E24A9259CC114665A08B6
74910B594454A0BDB624BBE96061A62588C7112F2A4E59C8D83948D9A3833E07
45AD9D06EC729C219A26A76D8363AAF65248A70CCB638A4CD2A7977C5A873BD9
6EEFA68C0A0E84EF13C00F9D11192D49F5442757B899083DC63AC766773CC78B
922835037A02E56C55A7DD9FFFBCE76F7ECC30E0170A95591880383D279D2F95
79BF90067C29ADA29B9268124181F71369830D60863A49B944F027381DBFFBDD
EFA46B4C14873DE156596D4A2C110B5D225E9CF9BE589E5A62026EF6F9E79FFF
831FFC80F4CB542BF69BA53EE9A6DC0C4C9E7018D349279DF4F8E38FF36CD8A5
21665D1800C101A7A7AC2CD6111A6C69B3949D9680D4EE91C1419A302F65018D
167C2EE975641B2707E6D04E53B8B1F8648DA58346D03D7E60FC6ED3D2C91966
FE144FC756352F7DDD71C71DEF79CF7B684BB82CD0DAF00179DB74CF17BC4F5A
7D95F21B46E97411CEC196C383EDC03D33DC46D08638497803791A71F38C6BE5
60734359FD639B31D94778CEFFD0EC90006A850A454C918EDF07CB23CB874646
86CAA562ADAEA352ED711BCD653B925E4A8E1DCF9DA2AACD43EBF8AC5D7EA954
8FCD7D2496CFA38D81E31EBFE1B92FF8714DCD579ACC7A2EBCA25626EB660227
9757B96C502886B97C9009E1B0FB3903CAF0828CBE7AEC688412CEBD191EA3EF
23C8BB3EB606417CEED0E1DA6F7EB3EB89C7F7FE6EEBAEA929CD29808D800C7C
F9CB5FBEECB2CB18D63344FED33FFDD35FFCE217A2E9D6AC5903C9E772D1425C
71C515975F7EB954112081108F8B2EBA08B1386711DAD8745BED4AE7A3637188
DA6E964ADD052942B0D8C65E6E368E71EE109978E8195317B12F87B132841F6E
3E4C084FAE10A54863BC08899D89622E88FE34CDC077BFFBDD73CE390717176A
74D11E8C803B8046A733A32256A6221B98A21AE2956CA76D4BD2E9946421D3A4
02A1F623EA8748AAE34D7D2A05CC24E97C2BA19A8132C283895B4A211690C947
3FFAD14F7CE2131081B6CE76E8D9A75A3EF40711BA762A42CDA85E2E95A76626
870707F1A673CF3DF7861B3FA38C6F58999DD15CE84E9C7A408A97B5C370CEB4
227BAD9D438426C226D19767F842EB67B3C0D36DF4CC846465F1E64BFFA7B29A
81B1DF64CB8042812D79F0C107BB467BCA8B09254A157C6D52FAE1365EF9CA57
22F885E2A059665E2B499B5F6877A9E024F0820CB17382DBC37282003D4576B9
ECB46ACF7FFEF31F7DF45156A5781106AAE49CB23164025E26EF05DE80DFC3EF
5EA262AC16E25913574052AB76EAEFB6DB6EC34115662EBA05AC0CD9B84C566B
E8202BE38C304DCC6A076D0F2B1C02BA5D2226502990890E8E38DD320B411A38
080AE2AD3230120788FA5DD81511E6BFE94D6F829EBAF9E69BB91A62024505FF
4196808380CE3BEFBCBBEEBA8BADE6AA939684C8B557AE1C191CE8EDEB2F15F3
994A653A930D3CA7836A537307A6DBBDCACA468E261D9F572C41FA436A2D5C7E
247509DDE33B9BC476A383AB8989E25AAC665DB79E0963C4047EA0B21988AB5F
2804300C61E0906F391B64F5DF123C42A2E14EA6A8817366CAD9593FCC631FDA
EDFCD1238DDF6CDEBBE577079EDCB227F1427A2174EDA98604ED2D50E0AE6A8A
A8331951479491A40AC883C020D8464FC9156C7FDCCED5C8A9274801270E4AE9
DE7BEF650A0B911C84C446BA43B993F1857EBACC0C20393F897E39325DA56CC4
54B8D2F048F74898110498207745BC29D687C5369B4645CEA0C0D061B81B4D53
C46529346A43CDC19B3972E8B0C494D060703155EA2DD189171010816D1C55A9
0586494C2EB77C136152724EDEF18E773011C6E347148A4A9BD93AFD1A01E289
4E4CA02D96A1AD34EA43995BC91C9B38DA633000A36347FBCA7DD333BA628E07
C830E608DC148CD514A789D1092D108CEDB5D75E2B34794ECAF9DEB546724858
2E1667C1A69A12974ABA55290A42AC6F773938BF474FE9F1EE0C73F2A5B140C6
B4726FB81F52AB50694D9F193D193D48F1954E6038D1A4B4248E8D469EDCDACE
DC49DF52B6116E223E17997BF12F7C96DB6FBF9D27CA0E23E66B34080D9D14DA
519AD82EFAD5673EF3994CB990D2044E9C14A6BAB05278CF2DB7DCF2C10F7E50
66A00A3904735FF474F0713924B265CED375C089DC53D1F374D1A51226223E0E
2EC8DEBA24E52C62715840C9B80D6AA2AE521B150D0305BBAEB8843DE81245BB
B1282D156A65BD61C3BADE7211EE7636F4A6A7270BC51C343B71A2F2A5B625E8
360388F4DDE383CC2C33A03B063ABACF9139CCF11C4B90885A343FE0CC26ADC4
813855E186657476C80942D777A34CD6CBE5DD0CBCC64065025882820EA7F48C
62276A6B4B00C985F3672293C0F3A19AF2355882585B82C71FDBBF65CBA1A79E
DA3F31A38F216B4BDC0EE9F32295BF3068F2800B508DE6939C66CC0110EFCFF5
E99A91DE65099CB96C6002EE1002121B5F7FDD75D7C103900CAD6466F8036E86
3C42FC0D76D00ED3554A0A445F8748D9209D174B4BA0E651A30BA091274EF8E9
F0FB33CE38E39E7BEE11678B4A86812F19497B7B0C08B032E3998B144A5A63E3
79C220643B14DE7FFEF9E77FF5AB5FC5AAC2633E74E810018DB675E1B377540D
EF49F06DCC48F0105E73CD35F0F785569E428CC763C10D0B77D75D5F8727C522
F5C478053E82966FFD80595F4FD4CEC22ACC56EAFD03E5B1F123F97C3636BD41
3A300FB38D66757878706C7CB4D96E14F2F0F7E1FFC2CEB54AA51CBEE5F0E1A3
6675F22C13C5915ABB4EB70B985D775970EE4C92899935634AD4B6F952B6A68E
5E785AC5D3BE9C941185A51BEE87F4317AD6A0151955CF7D75CD180095D2342D
882C52696C211E37ED1F1F4174AE6371922CD6E5C0988907093FBCFBDDEFBEE9
A69BE8D4B0930BF706F1FAA77FFA27AA636578847832550A53639595FCA33CA8
5449CAB8392C45BCFDED6F4700CBE145D2EA45BD4CCD15A563F3B820713A678D
8F493B217E992404E496A8CAA90E106B420809F116F4A4CDD5E5CE655990A5E0
E197BE0A5A174693F2A4AC030B55A26D6BF1FE4B2FBD14C24F5B1EA7432F0413
625723ED0CACE473841519DFCE33254631C55F68D53030D8B76EEDAAFEFEDE48
034775763413CE51E8E2B3BBA9F4267359316C03301744A401A31D7EBA344744
4FABCB9674CC55E4BBBABBB8ADDC9AA3B3439AA52E08BD72D6B055C32404DABA
98DC35ABDBBA449C444EBDDA68D5E163C51DCEA24CB9DD4A9A51586F044747EB
5B9E3CF0C46F77ED3F70786AA23D32320219E0328AFEB5B576D77ADA591406C4
D2BED7A5F1C533A00FC70118769B5817DFB0B8DBBC139C539A67FA01927510C6
37519DB42BD29463F7D3481955A0E46C0491628F3C5A578E48E21EB200B1C158
2A1952E364E25A10A26F7CD35B7EFCE31F1F1B1DCD983AA5261431036B0F1F3E
D0DBD7872F9A9E9A5A6E167CD63C0B5425EF4172DAF4515EF8C2176EDEBC599F
6265F5B8D200B080297821B6B6325FC1A00C0B847B0DC32C3D68D25E7B6E36D1
DC150811359F49262CF99EC612C451902F64C6C78F96FBF2A63615CFCED6B432
CABA533353898A7A7B4AB5DA6CA355CB66E0A8362163C562A761249BC9F3D035
753254192E5C72C8A43656B7B0478EEA48BFF838661DD3FCFEFF9F25604919CF
8E55660E074FCDFDC0975E70C105F7DD77DFD6AD5BC90DF7FAD7BFFEC1071F24
5184BE5B93C197A55FECFAD2049BA4A38538A943B836878787C965B8C475AEBC
F2CA4F7FFAD392D063065F52F614A9E73CE7394F3EF924EF4D40B4AC5FB1AB85
B307F003769CD835C10B50ABD25790A2AE4A8146122CDBA31DF812788F045B76
A6C54B874CF1CD8CA8E274F6008FB132232711E74A1B39C3733537DE97562CF9
6AD6BD701D1249AA34472F2CA7D83522469274921FFB2D9822206A4559C805FC
E6C081035DDF22C030820E98F8E682DBB90E1234B1FE615C5AF3BC03E5F5EB56
0F0EF6BB2AC69D4204F43C82B933783B121B0B247481C8C03609E9C7995632BF
718591C2940AE67EA49377F632A68D39821970BD162C41984960098A414BD782
430707138626B5C77080E0F07A710B5169336AB5034FBF077F683B99662B6EB6
825A233876ACF1E4B6435BB7EE3E78786C72B22971F929A79CF2E8A38FF2C888
66174B208F4C175ECABC0CA9ED35E95A1079619D61EFE1388AA3433964A25C92
EFD2786C4FAAF9F8C73F7EC51557400CF07E1C3AFA558C4E24D3CB43CA16078A
197E49CA68FCCB0886D00349008891233ECDB120857CB1BEC59FD7AC59F3CE77
BE13B7C18BE34E28451236696474A94CD073D46E3B06E6A77BD16BB5DEFEF2E4
C4440E8E0BC208D824984033A56A6CF4185596DC95201B29990EB787C953195D
4BE702A1D0B7BFFD6DFC8CFB90CE69C61766355DB60D6742C389DA8A74433BB4
4A58CC667A340F498267869F1F22209DA98CF5F517A76726203CCA2494B23956
266B33D58981BEFE8989B14D1FB8F4FBDFFFDEF61DDB104FE0F9023F80AEC00F
AED2AAF0F0D183B96C8E698D66838AC338594EDB3E005255FB235A02EE251BB5
EC205DC829A90DF106ACDE6B5EF39A471E7964D7AE5DCAF2E597C0C50B140722
423E3BFCF0D297BEF4473FFA91E0F159FFE128B7C52C016B5932DF03624D6257
BB515CDC226965A4CB8FEB0B65933296FEAD6F7D2BB69E5A0F6F664158596DEB
947EB6E4484F032359CE0650A683815C6C04A40917AE6B4D8295321567D8119D
CC53210D2E7827429C2F7EF18BD4B344B8B19C28BA40F62549B902C59DC4B93A
EBACB3FEEDDFFE6DDBB66DB425CF7AD6B3B66FDF0ED3FE8637BC81AC612A6539
9684215B5E893A65228BF4B41225D882345FA8649C11CB892B56AC208BA44A47
52531FF5F5976009101C877A3A4DA4C9DDBC0E4DA6ADF1554A9A62EBBE2E83D1
F5B3E7A8B492CC21022AD5FB919801311E1466CF77433DDDBEEDFAADC04FC28C
0E02727EC37C36C1C94DFB930353CD2B40A0DAADA8DDD417CC84705A7D981C04
B4B55AAB5673666BEED87873D7CED16DDBF71D3E32516D754867B1FEA79F7EFA
030F3CC08C102B3A52F511ECAC50BC6CDCB8110A171A50BCE3052D013B48283F
CA627921FA8B7B218011270505301A60142EFE2E5BD858C122D2FFB6DB6E83CF
277BCA84FBC5175FFC95AF7C05F7230822F68E28430F878BC8E3085AAF4B6C98
06E4D9612A12774B3C854DF1A2E68EA9E147FA074C5B35A4DD94DFB47E6FB54A
BAD747276CB2B91C278268BFEDD0A142B158ADCC0AA0D12E633035D7B1C47C6C
295FE0C8BDFFFDEF97F930BC690E1097D0C1207606EAB56605EE8F0721C8D4EA
0DCF093361219B29877E29897DCD8DDE44CC58822508424DC2BE77DF8E998A8E
C7755D3EA30E1D3AD0532E85A17FE0F01E84A6307ED395C9DE72AF7EFE66647C
6ADFB01BB513950C1A6E263C6E2E9BD795F45A338A75522C4E5A569620EAF038
EAE1C36914F9FF6709981610D60495F2F5934287C6805BCEB4202B84A232DAE9
30EE252C01B699A034C82E6CDE39E79CF38D6F7C838D63CC81AC5AB50A8A9877
BE34BE5EA5ACDDA44D6507A3CDFBCF9FC5C97ACB5BDE0269A6B2239A0D6F637B
AD440CCA6A3827B296E22EDEDC35D75CF3D9CF7E96368CE86C5E5C52315DB72A
07C34D478A33B7C6243EF3BF2AF59248D2C0D413EEFF431FFA10E493A50E490A
759D2E5922A1FD59BB762D6CB36C1C5B25E052B10F08928FE725AD3C597DB002
5879E9E6A3FD8072C1B940EC351FCAC9C7910800FBC55975FFF55FFF25EC5BFC
46FC89988BFDFBF7E2B3BD7D3D6BD7AC5CB66C281BEA661A980058021B2D2A3E
BBA8123597365554A1AD16B58DD7EAD5215662AE31383EB5C9EE47F37C2C178B
01317CB040FF4F3352E4BC96C67398A633C613048F7A4E99164B257A13335978
81FA80B45B6A6AAA323959AFD6BCE9A968DFFEF16DDBF61D3C34566977B2372C
C610D7C0F97442DF6D57D19891C35ABDF9CD6FFE977FF917A233EDD6C86ECB67
B43CDBFB2103380277DF7D373E7BC20927406B75813B59489359F012C58A0F81
AB913142A255FC274134E21620E0D8BB772F69F2D80C8CAB216A849301C30F25
204EA4EDA412E9C42AAC247FA4A75D9C744A35DE431FDD2E8B4A6B2D635069AB
82B8C261E2E0100ABC3261849332EA4BC3801DA9409EFFF11FFFF177BFFB9D23
27075F396B5E92F0921125D75D771D3E805D213A8AFC2DB95C015B1E069AC269
A6329BCB147593A19BF5BDBCE7E6559C8131C0E2077E318E5BC552F8EC13D7EF
D9BB7DFFFEDDAC0D1E3D7600FABDB7DCA39CA85C2EEDDDB773DDBAB5DB776E0F
0C8A0096BBD16A687A22DDC7A805A2AFBF8C1D456897D1A63767120E6C05EA04
6E1AD2A6352F629F66946832C53F8A25A04FC7540FB3CF8C2B2101D0CE8CD738
0E09126007014264681BD4F92FE16CA07DA5CF4BDB23137B2EB9E492DB6FBF5D
E6532F781D9911CF6608112FEEA01C3666BAD9492B58029B6451644E7A20393E
01C2D4D55BFF8C673C63F7EEDDD08F4276C82FC5373280B071994CC753DD2F68
09A274E4D3FAF5EB39CC80D15262689D18953A293B3CCB30D27C6BBBC9DC2637
ED40E6E9555686076A8821851C72E996E7321203463E54CAAA0CDE113A96F996
C04D792F9861E3AC3A76C9210441B00F2BC225E5505893BD71CABDA535AB578C
8C2CCB65020E30F7DC9867B59D8E62EF60E19DE38EB09DD8491679F9CA495173
54F89D5664C79D131374FEA6B3BA58072F13BA70DA3C3F817F6F2C8197D3F922
486F5B23C313F9ACEFAA42C7AE782E2784E3BEB47BDB888F8D4F8F8FC10DF7AB
35E7F0C129588203FB8F4EB53AD46C946D049D3FFCE10F5FFDEA57DF73CF3DF4
D6D9B5675B02FEFB177FF1173FFBD9CF88FDEB6A69B22D813DCC43F69DD3A248
E3C8D5A0A4C939955E62493CB2DE20CCF3B6C0F326ED51DB7CA76C93C4DF5FFA
D297B0E32290768E6BFEC9C5055FFCE217C36920E39EB41174F934D406420D29
C9253A6775F3A2BAFFEA57BF8A6017DFCB48543032AED55F263503793A4750B4
CC4691218F69221C06386537DF7CF3FBDEF73EE19359BE7C98E5DC42BE3CAB77
C5CF657471BFA7D4E738814AE0D2E0DFC0F77286972A13477E657672B63AB976
DDC8F40C8CF3184B7989D2CE72B1943F7AF47033AE9DF49C139FD8F298BE896C
303E39EE39BAA0A787FBB5DB555D4C767DC7E73984BA33E6B763DF7C4F4FD163
078D26538F9AAD56B31DB71D95FACE7F8CEC109318CCB2498587F3A049364250
0D8B93ACA672C2061D90A5313052A7C29A639D65102BBD06FC067ECDD6AD5B05
63BED87548CB2CCCAC443E283317B3AB8F41D29D321C941E1085091A1C7FE2D8
2FFA2F22E8526EC5CF679D75D6CF7FFE73BC4D06531317888B40B8F19E57BCE2
15DFFBDEF7E87FD9F44D0B6687D8AB8C379F77DE79DFFFFEF7890EE46C716570
4ADBB66D53C6E5BFEFBEFBFEFCCFFF9C87B60B62AF52E4E571F936FD92BC6D46
369235A2B72550575C90990126C4A0C7117F307E272D1D3E7BE18517DE74D34D
4B6787B850F6200A359764DF56673DE5FCAA95CB57AC585ECC67F1347062E0C1
8825E0A1EDE4739339D1805D52560BCD3176DA9A5D2EED3873ECC8A0CB12F03F
4D2EC8D79620703D33CDD8704BF8A1D73627A86D865F461D33E0BAA197519EE1
2F7295AF172913694BD09E9E6C4C4E56A626EAD0C3F59A73E4D0F4F6EDFB0F1D
3C5A5309799B991C235980B266BDA9B9D921DE189D1546518981C92F961DB239
B258E995BE3031150C8BE3747894B4AA60471088FFE0073FB0296768D4C90125
CB4E5F1BBB498F907BC4B17DE4199B1FB5D8516362DA92210374E705EF0E7DFB
DAD7BEF61BDFF806EE1CAE0364927106542EFE046D202008A1C03189788D8D9C
98E0BC3F1F8B0FAFB9566B04BEE93F68D40BF902A91EB5B9728E0F6512D34B28
0721249A478C2B72D24927E14860AB20A65D212DBF9EAD16CD66DD18D8A05E6B
E77245575789A0ADF0459950779FE754E2476D8D20CA668A70DE8DE26EED3DBC
33A77B1FDA6126D080355D7B728E4D1D2BE74B85225CCEC2966DBF2B647378C3
A5EF7F0F5664CFBE3DD018B90C23A93A2156B96C81792E5CD39847BDF7819FA5
6FA47493335643AF723B6EFDB12C81C010A5178C0CB40C14A4D9BDE358A5C94D
957278D0855C02172F7745EA121C0F3C29A9A6A42986BA521AE896B058B8C89B
DEF426C8B4060F98B48CDDFC2153F7921482E9A6CDCFAF7FFDEBE19D112E4D9F
9A23E7E8470B2893E002A93F6FD9B2C531D43A3C60F81482533844AC2449ED81
7A50F2E38B558C49988AC3004786B935F6FBE0FD36250B7BD36452BC8DC790A5
389EF448BBCAA55B5BA2759A67A9D8DB8BC95667926D488421F1DF82156329C2
0B60897FC551C22F196A33919892013435B14A3E58BE6C10DE556F4F5163E7A2
9658023BCBAC039D780EEF905D1BB35FC7A1386D1398061D6D2FDE7F8A23EAAE
186B2A094F4F3636F560DDEA0CCDA9C142BA0E87C3A52D01692A5827C8F89EF2
133385B30DBBE17B59E57A515B4D4E366B55FC2F6AD4DD89C9E6BE3DA3BB771D
3C363A5137B6D326C0A7A2A751B49F2549078AC1549F7CF2C9FFF11FFF41F160
F692867CC18A318BB48C80D99DA02CC0828D5813775BE607887B642772056083
3B61DE5FA5E4894ECA23429FC0460788F294428E7D939221E0E3BB8682947D06
89613FB5B94F704BB7DC72CBA5975E4ACA0052D37798349DC4A8C1CECE722571
E5FEBEC16363C7386CBA325B11746562D5E4F9110A9810FE3B42798A18961390
3962D72670762DF26B65547EA3D1D22357836CD4761AADE6739F7DF26FB73E55
CA957B7A7A3D37D36C449073CD68EB8787270EAF59B672F4D8A176D4A1323515
670DEA9A6D55727E065E3C0C5AB531B36AC50A0DC2CDB439276B627C6A667606
01072DE7C0C0208F6526D47E2E5431F3182A2178160F8AF3D3D426BC59FB235A
025B87DA04D1E49E13A27319B3275373F97B660F65B4DEFC176D8C9446991D92
11609486EBAFBF1E2E2A645106C7CF7F51FA654885B07B2ED69C22AF2E380D4B
67329715BFE7FC00C932A974BC8F747B4856574EB52085A46FBE2BEA97B32128
529B8F9A6FB639BA11287CF39BDF94EE42F6FDCB86DABEB08C0C72D3D66B463C
3069422D875FFEE55FFEE58F7FFC637AEE02E9E120401C6958D33BEFBC93C315
C48B978C939D8CB2AD823CA670D633C8A36A9079D7E97D9A6D0ADC81FEF2B265
43B004D01BCC0E3131D865095A6AE1CE32D7E2B7B13DD04CE233E44ACB03E934
CDA4E9CC7BF17EB408E9C968FA34E99135B00401226E8232624364D409E334D3
9CD2DCA5DA88C7AD043107627444090A763784A26B359DD9D9F8F0C1A99D3B0E
ECD9751851422BD12D32A79E7AEA534F3D450E70CF1A3A66DF3CD50E579B0473
584FF69A2C66F6549A1D626A851195C4EEB23BA2D06C0A1665315D0BEF058FAD
4DEE6F0FA015BE2C52315E695E94BA249D802BD34DE6C7F136A281FD8F8C9859
6BE4C915C426EBC6381D5807FC529A7C1D030F1B1CD4FD6E95CA6CA9544C34FE
6D165F0533D06A43019A56A4FDFBF2B97CB5564DE6B6288AE8F256996E791A9E
7AA60264540B04B2DE68968AE546BDFD96379F7FCF3DDFCBE77A4647C736AC7F
26BEEBC8E1314D4AE2F83395A90F7C60D3C73E7D4D4F98D72E869ED3AD0CD2C6
779D6CADDA28F514021F0BDA3C36335E0A0BCD56CD0FE0493512AFC94A9167C8
F66ACD1A4255BDCDAD4EA73E44C875824AAD9E718BE59E815A35D642EC434EEB
AD76B58998A0558B0C850BC4DF409562DD6699682A248A829CC6B3CF3EFBDE7B
EF256E8C71287E4F7E41BAE14B7760893965065CFC3E9B990E0BB861C30678C7
3FF9C94FE8830BC3B678C70B5E9F3E2FAE40703489C5E96B407494C9F960A70F
1D3AC4FB24ED38E3475C1F9EF59BDFFCE69B6EBAC949BBCFEC393F6A4954AB94
D462337BEBEAABAF16C8E9FC972139EEF8472498D29CE9F0C28CE97504731545
19439B054F2297CB1AA843840051C7D75192CD659CC465D4257C41AC63BB7359
92ECF2A9B248B5A4682FE185984C6CD30D37DC70E1851732034694277EBEECB2
CB3EF2918FF09D32131CAB8DB0E6AAABAE9271254219648FD5BBF8E28B3FFDE9
4FBFEE75AF43F8C52E48EE35B78C01B832B14E6281C7A5D8C0EB382EEED32F15
0AE5DE52B958D00DC65A5B274907F9605AF6D3226D2B9983B84F16E92A909DF5
55A725CD0F3A0822A7C39415104B0ACD6E422AAD93F1BF8C7E1F14BA196FA98D
873606F8177AA8D85B9CAA4E3BA103F73F9F0BABB3333DC57CCB699B5B8C12D8
9830C0E66672DA672FB447DA813F36331D35DDED8F6EDFB7E3C896A7F64C559B
580E6828F880AB57AF81F585CB0A0F32D6C0F3E3BC6CE22C4BB24818CE99ABC1
0272827192D222D85D02AA438599A762B5A9986D383FBF8E2C58F0BE6520AE34
5ED10B116A7496943FF8C10FC21BE3B748EBBED00C937CCC264711B740B8F328
0FAED5854AC75C3C24280AA87B4A085D13DEFFA64D9B6EBDF556E192A31F263D
95F67120BC423213E29CD10A4A1B0425B0AB73D3595A2338294F9E1837BF136E
F89920BF62C5AA5D7BF6E2E79E7C8FA37CDC61BD86404C0F1DC377C0E55F35BC
A25A999EAE4EF6F594210410CBDE72FFCC4C0D5164FF40F9E081C38383CB88D6
D22728C2B325ADA44E150953618043B4BDD3ADB8F17FFEF7FFFED97FFE6CF9F0
0A189256137E47DC5249291C0C35380AE16BA3CB12E8C64927D2FFBA665A6072
1C3AA613A0C67994AA0BFBF784435F7E5E22AB036D8B8DBFE8A28BA070D904CF
0C207341E253F866DC31DD6AB1A9DC0C0ADC821787E4E1B2CA2431A4C3456C18
6C0042044298E14A4B214E9838550A226203B0981061885AECB984839642F3FC
E73F7FF3E6CD9D61448B088AFD5F0648A6390787962FE3A355CDD980A6E03811
5DCF37218B79B4A69EA5654C177E0D7F87196196A0B19E44302FF8B5B1A1B9C7
329231540E95FD204C4693D902DF2ED0723AE9580DDC06F172493AAB952CD658
37BB00684FF14B4C2BC9FAF5EB1137E3E061D95FF9CA5722BC20BE500E0E3F2E
74E80444897360D65F17693575652E572CE56109F205AD495DA713614466DE98
146963D79333DF55B276E64142B5764F3A9D65DA85F7A5300C690C1D0E23337E
91E901728D31700CE39182F3E4E90F622BB5DB9E0954B5510FB3F055DD7C2E53
9D9E2984997C2EE7680BDE6188F13321B16A3A63EB9567A276AEB777DFDEC3BB
B6EE7D6AEB9EC7B7EEAC2B3F69357B8AA599CA0CDEABB367ED8E6331DF1992D8
0EA703426E4FA26598C5AE3DA1F2951093119B665C30E457F427C81B68FBE6B6
0A168E6BBE817BC451DB360D0F44113F4B19992C0E0C228986A2A5A7DD92D8D1
49BBC4F9296925635CC5C88FFA8189D3356BD6ECD9B3C7A6E4C3152069DBB76F
E715ECB03BB1E6719E74D2494F3CF1840D6E144B4075248DD3E2170A5AC91EB4
B7144FBDAC856022CB3DC5D94A2D8A937CB654AD3787FA97F7F50D9CFAC217FF
CB3FDF97CDE671AE6B357D9847A7469FB17AFDA1C307960F2D1F1D3D62A8758E
B55A517F3FF669D4F702C4357B8FEC1BE95F0959D4363370EBF52A1C8B8999A9
52B1305E399671BDA1E1FECAEC64AD560D42B6F2BA956A2597C9B59A0916B894
EDD7021F430A758A13960071432B4264504718474BA00C820896208995AD49ED
D4306701B230C5F5C5C64071D325594C531393801FDEF296B77CF7BBDFC523C8
B844958E255056CFD4BBDFFD6EF88F070E1CA03AE09D2CD1670047E0FAEBAFE7
DD0A8D5A7F7F3FEE8D24D57013DEF7BEF7F124E04E985E148F830FC87FA58AC5
2CBFB4312F6609A810A5C68B9FFFE44FFEE481071E58F0FDF96C0EB1E78A9115
070F1DC421676E070E3F5CC5DEBEBEC98989B24994E3AE60323F77FDF54AB753
E982076282528F6E91C70FF9424E03BED28A9FD09ADA195B11CB8E476205FB5D
67800D0782D27BD9CB5EF6D39FFE947FC55290559025626CCA8D37DEC8EC10A9
0C697824E74B13289DE4A25CE6AF984451714A7E492757601EFC810EAC799C44
A33C0337A707BE646109F47C927C467BF07E273D0D37C8BC596BDBC871256D4D
D775416370BC4092743ACB0C17909B566563CD18AA93CBC72D01C4D051E9F826
58020DE548CC844BFDD96C6F307E6C62CDCA55A11B1CDCB5EF39EB37B6679B5F
BEFD0765A7E303E82202FB9975455A556335BCAEEFCCD79F736CBA72E8E0B15F
FDE6C9DF6CDF85A04F3553BAFC761B82313BA331C7E552CFB1F1311B06E3A43C
715D88BBD34F3FFDBFFFFBBF2FB8E082CF7CE6332CF6D8231CF8A2CCE02040BA
D8C98CA32D0CC76A6E9585EF7FC94B5E82CB4A7FBB7C9DD484F02D64C7E3F161
BB95327003048E081FE984919F8E0E9F14D5E4F808C133533D5DCCA0EC926153
177CA0246D30E21C2AE61BDEFFFEF7DF76DB6D7A0E414F0F7ECF9675AA20BCE7
CFFEECCF70877876A64C05462891AE63A8B738365C783645193EBD25901CAE93
8E7DC7457BCBA5A9A9999E52AF4A703C14C203CF0B07FA87F61EDC5FCC946A8D
566FA91F1168B55A79FFA6F7DD7CF38D49EC9185BCAA5F7543454BB291ECD1A3
A3081120B46C7B8309C966C37CAE746C7C142AB45CCE5766C71D0F3F140F1F3D
383C34FCF6B7BFFD1FFEE14EDCCF283C85627FA30EAF29CE67FA3319C49D2E6C
40A359C5BFED486F83C9B746AA53EFA225700824C76E516F920C8BA35778DAE1
399E78E28930CEF7DF7F3FD43A1B3A165B1FC78C5CA60BB976ED5AFC8B4BB1E5
42EAB792F5930F0A2007C1E0F9E79F7FE595572E767DF6F1C9F8AA2ED2024295
24F3C352B0A45FED728290EEB2FE4F4766314B604781CC90B01A26B336E7DF27
560007F5E1871F26B39832D09D580F43D7A9E143070F668C57CE86098DDEA956
43D3E4A2C3055337ABE37499DB79F9CB5FFED0430F7188F1E5975FAE94F44375
A454B4BFD41EF1665E59605D32D00D8F497A57CD869222CA9976E3A3497FA93C
0E44823729A320A88FA89B1C6BA81645083FE3234F3DF5149E948562D96BA955
3829EB94141EECB26426744BA5627F6F4FB95CD203617221512E71D2360E5DA7
2B3B72946D097864162C1BF087C0E9F0928A31E8608D62652C81A297ACFB0134
4015BF090D6D7594C05AA8B6A91EEB27A8FBF5E503C3F5A97A4185F7DDF3EF38
6CB3E38D82AB8AAEEF2469663032F1B7D9422FF40E372327ABA6EBAA50CE37BD
EC81CAEC34FED66C78618893E09243B7D92CE60AC38383FB0F1F8A2D224895B6
4D382905A1D40C94F1CDD31442779796D44265D0D8F1D2A6F506F919428BEBC3
4B403C47854BD406E1F95D251FBC939CE774F95966808DC10965CF0145A28BB8
0C1FA18CD9E22A57A65215EF47A570265692E9C7105FC0EC25353B2B4FB60B02
89E27005BE99BE3F2F2BCD744C204B4319F58FE0AA8F8B905AE425D54E0A1F2B
D4A562F6D0A1D130C0BD46BDE581A88DF5D5F5DBD5ABD662D7F61E3C30D03354
AB36E0C5E7F359C40181669EC899D207D98363130ACDCCD666579AA93590DE72
CF40A3D1822C8561360C4AF97C66DFFE5DADB8D2D75B9C993DD66C55580F99AA
4CAC5DBD7AEFBEBDF95C51F30EB59342BE1CB7836C2E8497D0842568D49A6DC4
2B78F296EF25ED084BAC655AC38ADA4A3236DC306E098E31FC14B2F109447D85
A95D4B1D78C1C521BB3A93BFF8CFB7BDED6D77DC7107B750EAF2CA9A6E41C521
081361705A6CFDD9024602517C6AF5EAD53B76EC607959DAB5ECC886B53501C3
90F49F254A92D3D1E561126389EC904A87B8B1A5569926CFBFFAABBF4208B2E0
9B996727CA13DFC2429C8EB8C300EA4ABB8B093C4253E8E60FB5DA00076A1ADF
50C3211A0DFCBEDD6C89078D47F8F0873FFCC94F7ED2B5E802BB2C012BE4A4E5
10BC93937650F349F9FBBBEEBAEBBCF3CE63C50B9FE5AD32358783CD7583FAC0
D5102E9C7DF6D93FFCE10F850A54F438EDAB4A099A08EB96E38DA3C8E5E509B4
F1639244E64764FE8190C8C295EEEBEB191EEC370C07615647051D56EA56BB21
092272AA4812436877BBF6514C42C60B9914A131E8C40B9E134706B5E9256209
E0D2692DECE5F49082189AB78D105AB71468EC90EF0471C60D7B83FC4871E8CE
1BBF0A938EF7F5BAA5463CE3EB6A844E0A1B63A20CED975355492ECC8E36EB99
7C76AC5A47600501457419E60BD57A2DF1DC679FF89C2D4FFC161B8990A35C2A
4D56665C8B8C214991EF321ACB31187919632ED3C2BB723E760D5FECF77C2090
4AC34AD69671AC76EFDE2D250ADF9A412F8D6CF0D5BEF8C52F926011B741400D
B43CB6157FA5405289F33CCA2C71CA06058F1CFB921E6470D0D51BC45C0D034A
F1D51C33E2023E963816B80D9E32AA7E9A0731847459DC940D9B7E0F6D00A494
23B5058DCAE8594CEFD35802BE9BD92B3CCFAB5F75FA238FFCFAE081C370161D
E5978A7DB861E8717D141DBF1D25BE1B96CB7DF57AB5529B5EB17C244E746A72
FF81C365DD70A0B5525F5FF9E0E8C18C17BCF8C52FDEBC7933747A7FDF50B3A1
630BD70987FA578F8F1F85771F84D1D8C4C13869F40F200A99A8B767D6AD5973
E0C0BE16B4BCEB2F5B3672E0D061EC75211CC4F93196000E72A5D96EC4899EDD
EA3A51AC4723684BE0B809D39278FE55AB56614B68C9110140DD20D4204B0F1B
D609A2C5D230E9BFC4E270F5F959CE029584328FBA2DA3CAE2DBC19967067C09
2C10FD0808010C00259B09075CFC965B6E41584A11E4B7E3B9A03ABFF0852FB0
0866A7F5D4DC196D4E3A426FB1AC148E81C07238F7CD06442DB00EC6131C59B1
E250DA5F962136AE5ADDF08C67ECDCB1431FB020409845944EB3D1667B36A1FD
4C64D7F46F3AFE115D33AA4BC99ECDCF0ED923A0C5BBB15BC91895D3F2CD2F77
13B4875861D7AE5D323FCE5E370183F274D94014221A782CF144975C7209A448
E015FCBDA45F597EE7F593747A949C6A7D651F716A79D9D0607F7F2FE4C17558
E1EC0CD98EE2CE07957F5C9149B7818896A072252C08DD20557F9D11F669B860
1A0B8E0F6E710C29A91E31630C6DA49296A693238A347097177B268F1EFBD583
BF989C4A46941ACA151BB5D9507352C3E5340F92186E8C2821D351808F16338F
CD4C2D476411BB08D3AAD9F049C4DC3DFDE333539952E1B43FFD5F3FFFF9CF1B
B55AE07838A38D24B2DB1EF9385E3A81CE3E0B4A2919BA27CA5DD4A54A395D64
B3EC8C909C02A9280803BF4AC7F77261ED62A134BE708226676C08FC5AEACF4E
DAF7C03094C0E56BAFBD16CE1334AFD80665DC351C4FC9B588D6EE02C5DAB10E
33018EE9CDB4C7357BE96459BA14780422DF64655C6BBC2E5B7C38F89D288C38
9D926DF3252F9A1D92E4A3C8998E92CA9AC1B1A96924F29EEB673205CF0D19B3
E472F839D36AEA0EA623E347D6AD5CB3FFC0BE7C310783315DA916733DA6F3A0
CD6EB2673D0BCED933B76EDD5AA9541158382ADB6C2471E49672C3996C786CEC
A0725AB9BC3B531987B4C0B11E182AECDABBA3BFB717323D33338B8380A390F1
B3AE2AE4721AF8D0D05469555802D30C09E96E9AC1AD6D2C052C414BA7A1B573
C15A2BA911789C984F4C0C8754971FB1444C203965E175225451F6A90BAEA0A9
930E1F86022251499236762D767D9106B12E8259D6FAC2C8A88DF127C33EBE85
F326291CD878D88917BDE8458F3CF2885C990CD88BB53D27E9842695D6B8969E
DA98CDA7A818B25318278559971B6FBCF19DEF78C73253079E9C98F04C7814B5
E2A2F1B9B0342593E06AE82A1102083D5215FE178E90B074B076B7E0F7B2B4C3
260C98E15FFFFAD75C7CA16992CA3C7EC009C45F49A8C77665A9A22B434CB47F
FF7E9A55FC95C2401639C935D9C021A9DAB128F28C673C83D65A7AE5545ACF94
F7F35988FE4AE1B3018788F99E5328E48606FA878707F56C3E5F58258C76509D
DE02580295664E2420E8F2883B7EBFC96279B19FE2A73BC680F021DCA0FE4F4F
C696B98EA918C78E56B5AE3E3291AB230927637A0BFAA793FF7CF03FA27AB2AA
90EBF58299E9E9023E11273D69BAA91D47FA59CDED6A7C60AC7AE14CD4663241
08576A5A5FCE1B8BA35D4E7636A9B794BB66E3861D7B7643E9FABAC817C50B81
EEF99F2CBC41851985D394CA9C9376DB51958B22E66763333B0C8E4B9CCED2B0
2D01DFC0232F34533CC27617886034042C2EA2E518CA4FFCB56BA0A14D02219A
1AFFE24892119AD3BC6512B23241000B51625A6CDBC624211661E7CE9DD2FF48
554E73C84E524937D9B1889332ED3374C6579086880BC2711D8228395E3E594C
232C583176B4E705EF52057E269F2B4DCDCC0EF40E55AB35F3DDD9C999CA70DF
B2E9E98AEE4909F47CBE20A35BCFC2A0D0A84793954948B6A793F651E005E572
C940A39C463D5E3EBCB6DDD2FD29AD1A020B2C69AD500C95D3ACD5A711C9CE54
265A6AA25FB7DEB54E3EF9B9BFFAD5AF601D35E19D1F38DA3BCCEAEF6A37AAD5
4A2BA2018074B71813E000BA9E6AD435651EC34CD9663E1714D645175D240B0A
3D489D22C8E2C5D6878B6E03FFE9484A8B8A087717A05EA67175419EED173F2E
997DE958A6872BF32C71FF975F7E397C520E5722868C5BC688155778D7BBDE75
D34D371103F3B48318F1157FFDD77FFDE31FFF1882CEFA36793516951326F88D
A6D356CDA4804852A80C13162215DC00CBEFD3383989CB94914A4B1A71674EAA
4EE8DB597B49A9AB8550A4F419F97E7B2AA7AD7F95D543C45E4A665189EA2169
364E05CD1E3BC63FFEF18F633DB974CC26C166E0ECD1BCD9706C21D0A7D1654A
41F84524E2E6C7F1061C3C881602C734A147908FF6C911480CF4F59A37F4F794
0A10F234B961724191F60423A7A3F7EDD4904A99E9241A10EEEEA4C9DD89C412
386CBB51A46689C51270EA64A472FA6DBA770CEFC0D95781E930D8F3C3FF745A
ADBC728772D9C96AB51F6BAB61012A5F7334C7A90EBDE3962E14E02BF4573713
8DD9C8E4DC562D1E2E951AED68C6550766AB3BB3FDB371EB5873A60503053B04
E73A9385F3E6A615758966246015A7DE4D8715E2E4C2E9211BA33274D0D47D70
C284980BF7CC740A13EB32274A2C81E4E5D4DC5EF48E614B8173A46C52C6DFB2
6546262925294134C308822C5874A44F80F7E00E3FF4A10FE108509C10644300
D8A22B819D4CA1A087AE4CE8435712FF22FAFFDEF7BEB767CF1E5E13DA1F57E0
209D0B2EB800575EB76E9DF05DB275864A4020AD12FD7CE73BDF39FFFCF3C995
2D4D12CC47E934065784F6C149D9E8D4927873AE9AEF6B9BE328CD7A313D33ED
A8CC60DF10BCFB899929180368E189C9B1C181C14AD5F8EFBAD558A789FC306B
CE89E3BB71B3A19D9D0D1B36EED9BD1FFBD5D73BA889E782FE4CD63443B7A0BE
F186D976722C4AA6A2B6AB939B6E2B8A89FE7666A6AB084120518343FD58C689
C963AD560362D68A5A1E7C9CA466108E081211CA3A23CB57EEDDDB2183C43362
116FB8E106394E42524F213BF3CC337FF2939F40B63EFAD18F42C9127B4B51A0
D2B117841C84940FDB0799BF6EB0E7575C7105DC5ECF0C32644293748C2AC5AB
B0C873EEB9E77EF9CB5F5EEC3A6E3A0786396B19C3C29096EA895C3D4F3B5965
FE8B1ED619679CF1C0030F404AC8FA20418F8EF68E1C11D0AAE43DE980F0B3D4
BC500E922AD56A31D127BFDEA8E7D2163C1B8F4077CFCE62F16696C056911C89
17E175349B664A5F6337BBC94DDA3842A1F297493E72B0ED5911D215CC428B70
6EE323F82C753AFE8A6082FD3E023A92B05DAA32A2A718CD98D8ABFFD8B1F1FE
011CDD693CC7C8C8B2B56BD70EF6F4403D418C67676788456AB6E02D452D03D9
8C53723AFA95E25E086A88E96FBD2C0D8915B8802916DC9D9350928F67836C2B
74271002660B5EA359D2EAA351EC2B4D7EFF3F11E36434485C05B1D26D01AE06
9866B4A7E7458DA88E5BC3F32A4D5511252A9BC4D3AD063C82AC9F2D41AF45D1
4C43CFA7DD826DCD8607E3B8E67BF51ACC815AB17ECDC1BDBB4914494926CCD1
F6CD6DEBEEA44C8E527E77D2B92E9247C269C2F2BEF6B5AFBDFBEEBB8575D18E
0644000414C0A891C787840BB83861360C3A6598A0AC9897BE78B7641F122206
1A0F961938EB850220353F6E9F943A94956AB67784422860078126C29C40F567
CD8B8182346CB2942B4871AE893DA7814BF7894F7C02EE0E8BA3F8209BF6F5AD
AC5CB9F294534ED9BC79B300AE97C0CC30B230D59B592CF7DBCE7F47B3D55CB5
7255650A7219CDD61BAB47D64E4D4E4FD7A6FA7B7AABB54AA4BD2A6890C24C65
76BA329BCD9672597D86232C858AFB4A032F3AF5B403FB0F1F3E7CD43799CAE9
A94636A775AB8AFC484720CD28198FD484EE0B4B1AAED7AE37B05519DD90D486
3805F5C8EDC917474686B6ED78AAB75C1C9F3A96CBE46A8D6AE027AD364C2BF4
6FCFD8F8849302DFF9D83CB136FF3E91C8ECE71690A500F0A158B1A9704960E1
376DDA4431C245B07ADC2742C104C835FFE5A5738FB180F01AFEFEEFFFFE2B5F
F90A7308D8632CA9F4B2B292B118D39C54AA29CDE79C730E5C06BB83DFB54635
3C2DCBC582F7A94C6044CA39E98C2542EEB39FFD2CB908C9DF29830AD8E129F3
7934FA766686BD8E72655A828C554953294D90E45E1909D9F9E2C52C012B0D5C
0A3B5422F64E46B632404E526200665A6C6B2DC11C4769DA137554CA9D27C53D
A232589DA6ED6161809BCECF12642203B964DC9BB29A480D34303735052777E8
C8D1513D07C6D7D6F4E4934FEEC966355567E0D66A70A1B4FB566F54F592389D
4E021A039622C4644A5E483494D79658EA788FBDCE2AA46CED5D7A27683B3537
AE396A59FFB05F6D64AAB5437B77CF4CCF6EACE9E0C57335B504D6D1D3403C6D
0F8C49803F17381A89AAE3BC968ADB51EC27C9ACD2ED3C81EB171D8DE06BA916
CEF16CB678A4551F0FC3DDB3D56C98ABC771A5DD28F4F756C627A5BF5DE44188
F8A5009E3E8B626A143FD36DE7BE509DB1C346A52C092A7587BB2E222FC21368
98BB40AB241A71D229025D1446B268C49249A30019C3247094A75056CE594896
9274A286B22212C927CB0D6B0289FE7E48266142325A80FF2963CE58B8E20D33
D9056522D364E161F0A82AE366F10E717BB485B8882E91F2CF2C3C6265D9A197
3CDDBC56F360FCD458B9A73C353D552E0CE9DEB046BBB7A79F45BCFDFBF7B655
13820F492995CAEDC88525C865CBBD656899CA8AA10DA640AF06FA870E1C3834
5BAFF6147A023F030F488FCB0E324E1CC49197C4385263ED78A2DE9881839F2F
C25FD130F9E9A90ACE7BBDD15CBE6C9D192003EBEDE5F2E1F4F464A44B5EBA8C
DD0BA335A503FF95AB961DD87F04C111F4A67801425E685B60FCE7FBDEF7BE6F
7DEB5B448311B246BDDF952FB655898DEE5A22EB623728702625F79ECA88B442
D2B2B89825A08840DD60F5647A011604DF8E7B58B366CD79E79D77E38D376213
972E472FF6EAE27464F59BADB9F852C443279E78224C29590BF1386481E78308
77CA0A5340CE849946B3E1B91D25C8C00BCA419A06E4E4DB25E2646E0FED62D9
B95B6EB9E5BDEF7D2F1D7F6A7C52CDD8ADD4F813A375AC1595789C7297CA75D8
6388A5A3D5EF9A3C45D9E00D9F74D249679D7516DC3AD618F02FE2B6D7BFFEF5
541C7833FEFAF5AF7F1DEE82AE8BA4450801758825202E10BF81193874E848A9
54686BB0830E5E87870736AE5B8B2BC04E98A450ABA65FB37ACAB793D690D398
402C8138AA92D0D0DF1879A9C4742C01D7B31D47B64E1435946DA99AE724D9A0
9C2B4C6FDB5D9CAA3913152CE2723D645C370D682A31DDA3192BCB18E811F761
0897AC8A38A0DD6C99A9810DD3C5E3B94E2E569A8D122728174CCD369C3073CC
75B6E2D995DB33B462E7D851AF5C607D4E66CC5191D15DE51D7AE9604ED93BE9
DA65244A63ACCC3C0C958E15E36A0B35489292EDA8B44EA0E631AFAC5EBDFAE0
C1831072FCFEB4D34EFBC94F7E92A41DE37606BFEB24E266B0FB070E1C80327D
E31BDF48CA2F6824A6D3F1B6134E3861FBF6ED4C31DD77DF7DA79F7E3ABD01A9
F7382981EEFC93CE3B24A925AB7174F999C9E48C612603059ACC785DFAE6E8E5
08570A4D88E4C40863C529EE608D6DB4E9FCA972F32D014F4B6F6FBFBE0FCF8C
8E6935E19E9BD4A7F7F76FBBE8A1871E7A72C7965C98A937EB1B376E786AFB36
6C504F61B0D574F3C5BE81FE917AAD393B8DA7CA7B2ECC72429E06DC8CEECBC8
2B4D5701318BC2388220C1FB9F68C5138983F0A29ECBFBCD56051A7F621CEE5B
2F2C0A1C4A9C1CDC43A5325D6D56201408296AB58AE7278D663D089C7C3E3B35
3DA3AB5C71877E920B21D46CC254E398D9F49AFBDA0CDA3DF7DC73E1B6E3F750
6D36C5E0F2E5CBB11904DA73C588380A0C4246060FCD5F37D7F4B8338D68AB21
E6196C8CDAD27D0CD8E00B2EB8E0CE3BEF644A4AA59925916C861D6CABF94363
02658C16A7CBE2E2887884B591450B2CCBD7BEF635EA4D3725CF2078D986EE11
9ACD8555C613914665A9A2DB3FC7D64C8FDFC71270901C6EEC924B2E41A48277
420CE0F84841CB33939818604912D93EC36EDAB88FB01D4F8447130FCEF601E9
5E71BB79F221F6F7DC73CFDFFEEDDFAAB915450E5480E4DC7AEBAD6F7EF39BB9
024C85C9570BB1B04ADD2FB37DBD3395295C19ABDA5BCCC38EE2379ECEDC2666
8A7A0DC634B252437C49D95F5AB1A8133B5090B6348B51DDA7D6481D5F58DBFD
CC39FEAC93C4193F6827877FB96575ACD67B419F1B4CB6AABC7BDFB8F9BE094D
F0C962D6EC66A205009660BA596516B26D2C41CBD0D365E304561A7162369FF1
2AB5D2F0C06F8E8EAD3CE1590F3EF5A41714FFFECA8FBCF7AA2BD3E49512461D
59A838652697A9A5D4CB5C6769F9E6FB79B2F02F84FFC89123EC4616BDCFF591
3A33359E1DB1E1295EF8C2174265B3BF9D53D5284BACF488BBA32C6F983EB8D0
BFC3497AECB1C7982556A6EC4C0BC1F1DAA27368B0696644FE6D4BE0A4341276
772A891BA49D4599F4805C4D2C01C7F35121D8092E88252E287C6238171CC881
EB700E8F4365443B2CD5CB25D805041A0157D87C0A01A546BC1E3D3CBE61FDC6
F1F1A9A9C99956120DF50D8C4E1CD9B87EC38B5FF2E2FF79F8D7539355F89495
E9C8F54AF95C7972B2E23B83857C096E259B0F8AC57C65766ADFE15D7D85B0D3
121C655C27E363C5DC9956044B30DD6CD5E2A41A2550DF71AD595B36B8029141
B5D5EEEF196CB70CA1901B359AD57C415B82466B16A1BB1F684FE1E39FB8FAC6
1B6E1E1B9B602398044A36CB4D924EF8E422D22AB0B04C33408C29F909440590
AF42BA607E1F0BCA2F8516A053CFC40BBB99B8EB52FD5FF03AB8554ED42315B6
4A710ECC5C5347D8D46FD1E2A31116BB4F322F3DFFF9CFC76148D2267E3E2CC1
F8525512101EE44128185FF08217FCE637BF91584A7007366EAFCB12D80A5A6E
E369EF53B4B654EC85919BACBFF83D5B1A059DDD85EB5556A30D3E75D555575D
71C51532FA433AF2445AB0C8F0FBEEBAEB2E9E6DCEF814041A35FB37BFF94DBC
47A0E58283E2F792D41EB70A95F5EA57FF15A20AB637EA650C9D562B593D3200
9D084B902F64C33030BE7F0356A199E6B5A8F785AF54A525502E38D5815EE7B6
C88FC947BB9D28DFEED4B3F3E68E17CCC4CDC4750A913BB3F9A9F56D6F65EC04
493B4A07827BCAA1A531457E05DDAEB3E19172033F52CE8C99658C178250AC1D
1CC3D05185D8C9AB24D48C435E7F14555C752C528794E686AC660BBB5BCDA9C0
1D2AF51013C144076E8928B8F996808F0C15F6EC673FFB89279E60CA8E497CFC
70D14517DD7BEFBD70E36CE61FC15E0BAC4B2C816D9B29E4ECF8B16B4542952A
F269C34024238765A1CB254E37E37BDA9B33CE38E391471EE1F83FFEB50B272A
219D442AD290C44662EA1C395F2F7FF9CB7FFAD39FDA6530C90E2933360A2F27
9DE441E9A2EF4BCD86B791A79A12CEE0F2FAEBAF77EC232175F3A59B0C9441B9
BEE005A7DE7FFFFD4383CBB05EFBF6EF734C2E3156CEDA95CFA0FB0CFD3E3933
3E3CB46CB6D208BC1E04EB49541859B171B07FF5E4C44CA316562A55CF0DA7A6
6672B98CE7C7515C534E94CDE86E00BD5C6DC497595882484D34DBE3B5C6B80F
EF33A9F5F517A7A6C7A09510948C8E8E150A7DAB56ADF9ED934F96B2A599FA54
291FCE5627F2F94CA53A89150A336E2613FCCDDFFEF59D5FFA2A753A9680BC02
767F1D13BECC6060B164D165596C3673D1D4B29D3CF058629CFFC578721C33F3
84B34FB9C8D217C6D38B7D62E31FBC12421416BC0EC949540A8FC1FB7163305A
708D376DDA848BE09A6433457881772E96655AECC5FB240B0A64487AD0F02F61
7358ABF7BCE73D37DF7C3313E81278E21E58A37ED9CB5EF6B39FFD6C6A4667BA
70767DD353DA6A36B346B1363B1A630E0180B22CE8EF690C10CB13FA29112E71
A2425FEAA46C4252569D7F4DBE411C029A2B098E252C90E41B3FC5C63DC1A1F2
ACE20DD808010B0A01AADC0C5F9CFD875B42388BEF5DB66C68D7AE5DB86DCDD3
60262986A10EE94AA502FED7532E99DC5403BE2C0B0F6209E495583444AE3514
A5CB1228A7539F740CA7B4BCEDB825F6DC38D4CD01C55A7BFAF1A7461AAA0F82
AD544FE0699239EE8B49F4699C10962569E971E24AE30295E3D5A3D66C5B0FA3
699B3E32C40781A38A896E4363AEE09983A5A3D333879B2ACC87E32DB5ADD59C
CC668FC54DD58C65DAB0642DE83D48078660B2136B8C97480BDD561235F222CC
C1629119B6CECF0EC5E96C48FA0D1C4220697DD181C44F737305D160C7526CEC
62BA46E61A315217B8043D7779165ECD1609B93DA901C857E067C497EF7AD7BB
E46AF822DCDBC73EF63104B24291CB22993C1D3D39C19773A144837DF0831FE4
C4567C9CA52C5CE40D6F788343C9E6ADCBC796E0E0A4E363EC9B86ABCF4CCF32
EF59CCF7C0375A31B27AEFDEFDED24EE2FF78E4F1D2B177BE05484410196009B
D26E65FB7AD7950A439599E64CA5E6B99965CB5698327DD86CCD28B7DED353A8
5526D93AA362DF7542D76935DAA3B5C6685B557B8A85667B6AE333D7EEDDB7DD
B492E68E1C1B5DB77AE38B5EF427FFF3F06FF61F380001CF6413C76BB6A35AB5
5611DE21E5A8676C583F3E3E49EDCF0DC3BA3007221D64FCD9E6EAA1A72992C7
6DB8FAEAAB3FF9C94FE252440DD123C00DC3897EF5AB5FFDA94F7D6A310B6A33
0E09973AF112745AB197975F7EF9E73FFF794AD582D721C881010A0D0905974D
F6F6B86A6176FC832C818C5B90CE49A15D64C40A63C39C86CC0C71E70EF0618C
E2FAFAF4C2DFC8A4F4299D6123D5A7C13239739BC89688B1C49CD3F18188E3D8
C46672884AE93A78A8EC148D54D4F9AF602D58A121690C03207AA3BC14FD44B6
2213E48E67E4EED31DC3CF2CF370F13B6CA396BBE0A6D4EE3436706799D1CE18
4256449808AF9546D184C62FF1A0D0962D1F364E465B8F0D4E4301497C53B9D8
29231B4EAAA23915635A02FDFF9A8BF43837A7EDE1EA34FD74353339DBDC7774
44A9126EA610649A262BE228D803CD5F6A285CF0FE76DCD2A392753940D3CF23
98A8B59AB5186F71A655326BFA140A89195EA879099D2CFEE2A96AA4A6CC5CD9
493FB343C547DC486990A74E787EFDEB5F67194FA5E94DDB4B70AD9794CDC57F
57E9681059840573FA1DC39836FF77F55772BBE9D3604FED81330844E09F5148
C41EDB3524785D9087D80C0521E48CF19340486C1C5A970DE0ADDA7D0F6206E8
924A33818C414CAC6E247E8BB8EFAC9DC875F02FF409B40ABD16BC93392BB10D
5414279F7CB223894B69C991AF5CE2049A5101A63A516DC4491C06E1A7AEFBCC
15575C556B344BF972A3DECAE561A8E152C5B97C396ABB512B544939F0FAB3D9
E5D9B0CF73B3D57A6D7868F9AA95EB1F7FFCF17AA30A67DF0F5BA59E6C6562CA
48ADF29C4037AF79AD7AF348B57158436B0AC1E8F4FE67AE5FB36DD7968C1F94
CB7D13E333575EF5D17FF887AF1D1B9DC4577FE5CB77BEEB82F30A257F6CFC30
5CAAE999A9BE3EED2A0E0DF78D1E9DA092C2B1A7D1B64777319FC0A2257501B9
92484F2DB932AEB2A48F9C94A247364F5891E7BF64D68DCD07CB2B485E48A5C3
B996B8CEB5D75E7BC30D37D00E3158866B4CBB25D1221BB296CE322DF6120A55
5E8D74862AC5ADF34B49EF2C855F493230B4A26BDC8A0C01272C848148232608
4CE37BD46A4B6A422DE2AADB25CDA52BF012F0C686E388788FD89ACE2620C2F9
D1801C42E2BE70DBF61C1E35372CA01913D79B4C2476C3118E2B510334F636C8
95490395C23698A0E8EF1B8EE2569AB79D4C478A66716ACC0AA8DEDEDCEA35AB
8C318B386ECC2E77CBFDF337C249C71D34C75B422E165D44AB7AEEDCC9BABC60
267692663CB1EF405F3D19566A3D1CBB4625F1E3420B5BAC07DCB463D5C21DEB
BCADAB89E1FDC4775C4D4B1D45263208DB715469C33CF8334E3CEB6A2F2C13A9
7C12E73D3F97F1B36DA8255DEDA836A3E9249EF073FB7D674FABDE88621A723A
E9BC491BF326864A00B224FF611D8853C648F72F4136A1CCB4B8F2716515C945
D4B93592DB14CA362A07E68BB041175F7CF1673EF319E9859611980236914E31
C6FAF44524DB4CE40F511EC24FECCC652AE58BD461420E313232C2413AF8AC34
4F48B14D88D35927100BC19C123B1828724247DA756F76AAA3E3161195C552E1
59679D75FFFDF74BFB9C8DBB521D7E73FD0CD94CBEDEA8FB9E8F55711D776860
B05AAD1BFBE19A6100FA9DBAE4A222B8059ED31BFACBE276B1B777CDE444DD75
825CB6E7D8C4E8BA35ABEA8D9938A9D71BB388FCE2A4E5AAA209799C7C36ACCC
4EE472AADC9BDF7D6047A90065D474DC5690C1A3C6AD76B35EAF720B5F72DACB
1E7B74DBDEC38796F50ECDD6C67A7A9D434776260ECE6A58AF3573393AB645D8
A728D6445E886CF59025DF31B84397075B543967620883EBFF43C575C1176D0F
AE063D7ED14517C92C3DC74C8B847013AB4EA00E3D083130E24A880FB2E0F555
9A1BA53667F406ED868BC35FFEF8C73F4EFAF2381DBF459F9A1FB165628947E0
B001CA16A585DA84A2A62C6086B4E0D2F38D53864E9CAE7DFBF6493F244F9118
2D21CF122EF5C5D65FD2B2D465D4E644D94B0311FD328623765F056BB9820D95
F608FE55DE2C07C94D292284F4893BF5AA57BDEA473FFA11911B0203C301867B
48CD62B304CA17318F2114175DD0B5F4F1A056DC65CB0756AE5C5E2CE5A1F07D
270B99E7C3E292E61B1303C7EAB0C7708E13630E1B62240E66A7E32C71EC556D
A72F3F80D56CF4EF1C5D9DB8EDC029B5A2756E76C66FABC8F48B787056DC5AA3
558BB50A713D3F64E539D6FDC6BA510DC17BD4AEE9D491996843F89021292A2A
27E76B9E233F09676103E21AC20308F14EE53DE11C1F6426590E0125F38C08C0
46A5B4981272B9161148575A5BA680503245BDF265A3938F574AF859C7639E76
B65209D211F09AE2EDC811C7DCA15CA4DD398931C598A55A7285DD7CF3CDB68F
AF2CCCA8883AAD1A3DA73865D9E3314FD26E1BDA249E2F1A0FFAE80C2E697588
7AE713491BB65A28CB2AFC7DAC644015D0EFE7BD396A2EBF823215BF279E7842
344ED75124678359567764F9086CE6E0E010AEBB77F73EF3F01A4B00879EC649
7B3AF8659209DCFE6C6644453DBD7DAB8E1DC593BBE59EFEB1B163A59E9C1F24
B5FA54B184E337D38E1AE5D2725C5F9363A87698C1FEC14E34AAD599D8417C14
797E8C5F6A5FA45D9786FE4C581C9BAA8EF4AF191D3F9CCF61B52A95D9B1628F
16975A55F4A6BB7C996ECC430403BB0575BFE903975E7DF5D5BDBD3D9C520B0D
B57BF76E65EC22D5F182EEEAFFF38B591768017C1D0D18010950CAAC2FF13658
A214B818EF810D960B6E87BCD8124824928C5EA1302983AC6000844BB19241D5
0FCD8E0BCA504C7867F6787AFB452163C822852665A5A158E8930C98741810EA
4A9405EF013783C7E72C2AFC95D685251CF2C791E617B7441F7F094BC09FED19
B6CEDCEE5FE98460369F1A4154B35408180DB0470C228D1B667B91B2DAC2DD94
D1880FC5A5C31DD2E470AE8E7D4DE13C60F186A3DF94B1D6C3C3C3B83805D82E
DEDA690D3F503DE5DCB26543838303F942D6778CD14D341CA05AADD0F668E474
AE40CF8CC68C5A4F96DA46AC77FA0CBCC0768D25B904AF1F2A6560D7B12E4BA0
4DBE21F14D945B8FA25A121BA8A8E3AB444F8C527A705960BA8B71CE1116D4DB
2DFD83693DF73470C8CBBB2A749D3AD49CCAD454321DD7633D13D9580215BBBE
F62AA432473F973E843797D7DD5653783FB6ECCC33CFBCFDF6DBF17E44C6906A
6E6B174482FD07F4721CD31D62BB0B5D66400B55E2B0E97DD9F2E54710104038
E1139B0F2616EB387DB2489BDED06637C1DBAEBCF2CACB2EBB4CA9EEFE1E8178
D16717C4879A8B7A903B5FBD7AF525975CF2E10F7F9848507209D37FC2BF6442
C577C1C9C352E0E30B561625A5A64C1580953C9E3E9546459D67B7331BBC0F42
18BB5077D6A53B63110B793D77427FD0D7030E27C7A7286781AF557592983E64
2FACD66B815FCC068361B0AC59CBF594574C4FB6C220DFDF3F303A7AB45A9BCE
E6BC99D9B1356B56CECE4E359AD5E5CBD672A848DCAE0F0FE30C1F98983C5A2A
E5C726F6C200F88113C01BD1C9860E6847CBD044D551E1C4ECF49AE52B27A70F
F9617D7CF290998711EB068566DBB811C10B5FF0A2471F7D148770D7EE5D6615
D818D2B0BD0C4E01E32C2A480C37EC8F620924D1816DC377BDE215AF803B49AF
9CC9168A8232B82C5BEFA894218B30E4C5787898C5A2938B1DC47EC3EC413B63
EF056B1F9B210184BEE0D1F0B0DBB76FC707D7AF5F0F252EF88DC5AE0F63F937
7FF337FFFCCFFF8C2BD3D86CDCB871CB962D1CD2FDD6B7BEF5B6DB6E7BDEF39E
F7D8638F1D9F66616A80B673C7ABE13F6FBCF1C66BAEB986993A9E617606E037
36667789FB91348E20A17187781081CDB1FBFFE4934FC64D4A0D8CBA528684D8
791E2F9DCD49479297E5A538C080737B700249252468311E78687C4EBB651581
893B761B897B412D86B0FB3BDFF98E68FF381D5AC2F67BFC9739999AD6A5A79C
5FB162F9D0D060E86733998078E5D96AC5E43D229512EDC9DA0A3C54329FF3F2
0F99C4A27496CA733BC2479A83BBC7D7A88E2558EB642A8126BE68C37B4A74DD
B9A9926AA241A289EE2DD08DC759E5C108E3B67281AF497F636D0CDA5152370F
06A5075D10A8084F855034546143D7939B0819E2D412C4EAF8EDD11E90174B88
5BC4E1103369F76CABD48A4B358BCD3D52B1978BDB65FFAE3AA863BD32D97C65
66E659CF7EF6936604375E7D8668960122FD71E6A9185306BE4B27809E904A2B
A9AE45A3BB605586A139EE96A24ECF0C37C6111AB6232EA541B680B139866E04
9E1D0A8AA75E4E193F28C82B56B398E3E151651F1FBB656927E82439B61EA147
23E47C765E285D7A9787568F274BE20DEB379C73CEEB3FF5A94FE5B305FE89A9
215C1C5A584F9B9B9ACC657B73E132D7E9AB4CE1EBD7341B4E4F6900CB373939
D168CE42B323261818ECADD72BE313A37DBD83783C5D9F71D4D070DFD123FBA7
2AA37DE5DE7A7302860D0104EC415B6F410DEB6CD8592BC34323074647078A83
A7BCE0B99B1FFFE5B1C9DD9B36BDE7FACF7D26970B60AE8E1D1B37AB995BB572
CDF61D7AFA0F3C1A4D12529932EBA8FD389951ECA563459DB4C1EF8F951DC2BA
532E85A9185B0E4DA1E65296532F48528F6247E21AF17917BC3E090FB0AAF814
D410B91BA96199EFE63123C2077BFFB6B7BDED4B5FFA1291032AF57397400F53
1C99D21595CD0346818116DEB163873401510AD9AB219E974AF3FBB03DB85B02
C0114DDF7AEBAD907E3234B06643C7963F2CB6A44C82B966E60479F7E82ED9E1
08FE4A680AC742C9AC66BBB759BA31A844A0C739074D29256001FC400A62465D
2A35D8DC266C1097D7350C392C189C71C6190F3DF4105349AC4348160E4A8A5E
AA10085BDD76F8CF162D816620F5710A7A714BC57CC1D056670DF9BECE274039
33D12CD40549DA09453D257EAE5D61769DE3D3836D346AA4F99FDAC37B27D72A
AF1D3AC5661B9660368C5B89AAEB0163DAEC341D8D106D685239851020EB3979
E504510C51C3FF34C1987242DF6F44714DA78C35012AA201B7AD99328EC62AE3
7A6DC79D552DC7A8FF9DCAFFAD668B4F2854649AC3DDDE71C71DF02A7ACD8023
19F9226EB55444F186534E39052B2CDB240E846DDA79EEE8C8ABB9A865DB12D8
E05A88C1E73EF73988250466EDDAB5B8379D76CB153AF615973282CD30348E3A
A1C0B5D75E0B358877B26F402802F9150207B29D3C38529004A1A2B27398D277
CD69C66CE1A48CC924321C79BC1F9FE502DAC393E50C324466F07DFEF9E7E3C8
CB100566532555D5617315678D922AE3DCEC572A589262734B661CDD673F73FD
55575D854DD76F3066C00007D8C7E155AA33AE930BBD7EC40449BBA7BF7FDDCC
74D3F7B24180B351C9EBEE0188470BD100CCE481B1BDC3E561B82D3AB39F0911
204F4D8E29A7E9EBC9AA0D3D17C98F1C37D61DF8461A7C5FE3F0B6EE7C2AEF95
7A7BCB07C7761773AE1F36F285607CE2B0CEDBFA994A853211786EC06DA8CC56
023FE8EDEB3118189D5CA32D4D52226F51CD4BB031FFA12F1E78FA2F7449CE3D
F7DC7FFDD77F25A7340FA4EDE9C89875E60459E517B294F9AF24ED57900DEDA2
48925AA54AC9FD05844E9AE8A7ED28249904A58A4E0391F8EE3CB2208A13255B
B2F04C4A12712B05737C8A07D81E326E33CA2D969D4B0CA734DE830DE29A9C7A
EAA9679E79260EA44A9D18816FDB12EEA503D1E0AD3FF399CF7CE08107C87349
684717E7A89BF282F13D77DE79275BC6485DC7EE90C870B6DBF689AB8123C7E2
1049D3A0262EBBEC32411CF0CD5DB38C8C4AF26909B05DC68784B9D2EE6D7F5F
19C64C5312A94E45017EBC619CE87C90AB2A4026C1A8881AE252C0C397F589D3
D13A7AEF34DB5DBC7CFF342D41A1D95E672C01CE5BB5AE5BC8C412D4342E5503
C673C61284119C7D5D0F08F5BC33077E292C810ED875CAC88525F0A236BEE970
8418C23596A0ED261D4BF03B150FAF188116E30A3BE940EC38A5B412B6515B12
046C4AEF4D9C0FCA9B54E92978F6306195D26AD90C8CCEDC971878FCE9DE7BEF
3DFBECB39D4ED3E251D72CA91624663C984D493A03FE847496D1330B72B61B2D
F004362A32CFC36CADD0F7520B31334C213438823C7437761F824480AC8C1444
60FDD18F7E946949891E6C6092D8390A2AD171506B3254EAB8399405B52D81DD
4061EB32E67F3AA9E76299F00CD87E9D356EC4BEC7714B9A7C1426019E8AAE78
E49C7A1516A2D4D7B3AEA7B86A7878E3BE3D70066BFD7D4353539341E8B4233D
CB7E7A6662646468720A515E96529BD76D1D9566A35228666AF50A96DDD1E355
13A5B547CBC88DD64A6F7CE31BEEBEFB1B26CE0A834CFCDBAD0FC71AD0DCC2A7
66671B9038C266EB755DD828E475777BB5465661F25E4D8A9B40B2C037BEF18D
5FF8C217F04BC248FED0CEACC55EDC1EE2CD2937CC32D3E8AA942648DE4F3B0F
6507F93EEDB4D3FEFDDFFF6F6BEF016E5959DDFFBF7B9F72CFEDF7CE0CD38161
1810B02120266804630A26121088A189A022A0A052A409D2BB5190AAA0A2A118
51C2DF8098444C548812414CF2A3481B8632334CBFF5F4B3FFDF777FEE5EF3CE
B94586789E79E639F79C7DF67ECB7A575FDFF5AFD8B6D3716A9255B495FA0920
712262491A9414E0A95DD68295D372F3CD378B37E973740D1D3010D8A79B0247
08DF0852047F2E3F9775AC5B49877AFAE9A7A32097DF3CD76DE1EED06A0E6B64
34F18DE9CB4DD5E4D65EF8F42CEF1BE5312CD188D2020892CAA9E3338E89CC2B
A5083F7A90FD09B358B870216801986230232290381CD0B3A832216B90F08676
53D2452BF0F8E38F3330EB63A32DA07A1CA18ECBC86581DC246BCC908E909638
A41BA5AABF8FD0BA81BEDEBE149C8EC6F79CF454A44D1494F9CEE1696A0AD21A
B44E5E61F141BDDE0C0D0290297D515EC137FB5EB8727489CBD78BCE2481F7DD
D5BCB4A9A741E0F1B476AC19B9824454CE95A25CB1D1EC70917404EF6D4D92AA
749AD46EF04231979392558C5A9AD29A5AB3E8723AB4A351C34DD804B927A2A4
996C764D8BE1C2D4DA32618C0CD83E0AA370BE59571997593FA6C6A1FC9AA140
66AA79C22797344E9CD08EC288EFAC9947094BF986F724D71BBECD0604DF0A78
822F894DCF1DA9D2B063D42353A0DB724645036050DA4DF42C30445DD6FD8290
86E807DB02B66C8037147E69B9444596A4A06B2603DB596CC334455DF6F9CF7F
FE820B2ED01BCB7A4A4824404545125A3BD6E92481140BD6516F64F989955C79
A5EF2C5AABA40939FE9F0F15A471CBDA7875BCAB2B5FADB8A8D5DB2F49D0BD78
9BB94B57BDBA697CAC3A38307F7878A8DE28F7F48AD10F8D97472409EA8DCAC8
A854666F024B7190EEDFA8576437C862E8EEEE9412E4D174BD2410ED4A32A755
ACF54A8AFC5E2875169E5DF1FFBA4BAEDE1CCE177CEA73A5E273DEF01868A63B
2CD99108C19CD973D6AD5FE77BBAFA72BB1E00F526AB0F6F7EF39B0F3DF45074
CCFFFB2B0CEB9B77C502655150A54C1AC0C1071F2CCB5723110580800F3CC80C
368A0182B27162372FBDF412E5F2D8B92B56AC60761C128F0EB46A152482678C
EE3153DEDCD2960DD8C7B0EA0CE23B0AA07AF90985CA96CDC281C43DA2BB61B2
C0052053AD12908DBA409FAF5EBD7A8688B19BCAD8B73C71432368CB2E2771DE
A5AE338BE069005A643D4E6F64583CF1C4134F3DF514C5C0A045514367094260
59536B6D29C8DCDF7EE58206D4AC8955FA6847ACFDA4653A6543B563DC0CD38A
8A85286D7DE5DB1D7BE32C67954D3998BEEF0D9BEA83F0A0B0AFB2B92652E1B1
19BC28AC4570BE08D92D5A3DBE432009C63B64E3B7EAB566230D4A6853C7522E
DF02812EF2A567051F3020B9C8CF623C2D4B46A30923C6A3B5463E2A965D3292
D429F3599E4A029F929A46E9C4D7A4873DFAE8A368C156BD8F8D857B87F26F31
3E9D1A7DB26CD9B2E5CB97EB73E9E0FA64BFFDF67BE8A18724AA65EABDF0C20B
CDB409C1273EF1893BEEB883740078749857DA260C52E925865EEFEFEF4DBD70
5EA2C912DBB871C8C5F9CD4D11B4983077BFAA2D4E130A012F6254467571000A
69493EAD0C00035FB46E2B5D4AC313B520B4A02892C10093C7D368082E7A9095
CA8686782B68FDE6B2F430D1AA7E2E3E404F4D112D0D70585E874D6014CC6F70
16B751922D961E910120FBC7A40EA251C980CE625F7ABD1F43B1A0D1FB9B8C95
C79B6E34769D8568B058989B34FA2409CA637A564FAD12FBC5891ABBEEB66CCD
DA57640D485F913C88E27A9AF838562B57248A2509F205E7B3D462CDDCA7997A
0357564ED56399A6C4E16DE772656CDDF0AAC1BED2D0B0CCD0114F693E0F2F27
228657F4F50D9C7DD61724097DA8CD791946476FEF714A5D4361B5377D41615B
D3618BBE8117D60959373ACF24EDC0072DDFD16D991B674202FDD74DEFBDB1DA
45A2D0160647AB354FCB873FFCE11FFFF8C7467C849EF074871C76F20B1AB062
2EBBEC3DEF79CF7FFDD77FE941B874920C3198F99E70C20937DC708369C7B07B
EBBE69496CC830CAFDF4FFA73EF529D92BB42A9C396B9604683CAAA832CD0C08
DA9E025F30D08B66D66F0305939CF46DB7DD56DCE4BFFFFBBF758D8C1214F6B0
951520F83AA5F867758A30650C1ADAFC4B990D5A31539B45B3760BC71F7FFC4D
37DD24D2D23561015A32012FBC4595696A51A54DC9D3598BA40707077C0FDE7C
446023EDC0E1D35A8843E017B29473AB38B323ACE369E875A11C6DB4644C4493
25412972F5462A33A258FAD458D3E70EB5FCE97113DD2B7D15717E020FDC355B
BE263969B47C4A78EC924E59ABB21872B11E56701D63496B936F66E32581B709
E2C420C14D790775D9123DE30C89DAA42C130CBD9D2CA0F5014E0220614B2433
CF6AD8DC78F22B17D304A99E659434E9A62149E089C110C3B2FEA6496B0297C1
F2B02DD9CC3283C384CED00FD6268ADAF4156BA565EECDD0C999A9E31319DB46
3F61D0D89091ECB66DADF7B6C0D20858FC6623003E823B1535D38A893EFDE993
6FBCF14631B462512BDB48F5F7A68C805623DFDDD9EBE35D8D147CC33B31ABD2
5C72D21C92DCA2854B5F7C71DD60DFB6954AA9BF7771D2CA17F2DD3A1E857CD1
173B54CBCD66355FF08D5B9B2D6D52ABD1AC1472328A1B1D45C9CC8D29965C8E
0809A31FAD7827405F579FCF8F6C942BD591726553AD31D47263512CC6E7E369
CDC6C4E465A6B49ADAB654394AAA745224466F1463A09E5A208B0D6ACFCC8B1D
9E6A17B4EE31CE1B7A3FA086B089B94621AA9209A2AF0E3AE8A0EF7DEF7B6870
B974C935B4B45833D2A12B163CCD49DE8E8F8D75F7F48CA5EE8E62667EA6AD60
7C0D4EBDD698357B70C3FA8DF9421A75ACB7380C40A010AA7559E69C357B425B
7469C03397F93DA7CB136BE3BC5A9CCB2FBFFCD4534FC5E103DD8BA39D79E699
320D4521B036548AE9BC6AD64701F4A4934E3AE99A6BAEA1EC803C39DDE18003
0EB8F7DE7B61A62E8DE71B2001FC9D8280E38E3B4E0263A207643A249766CDE2
689632A845D66F61D09C5BE0E3D1A1AC88448FBEE28A2B6432EB0E071E78E00F
7EF08370133FF0810F3CFCF0C37A288FB6DE4158D65DE90B160691201288F549
60F02BDD990C6ED69C9B93BC61189C5A07D9438CCA9CCE882BD3EF10787A10F8
452978B03FD2625B6926E8C4E6FA6E5C0D875FB86D7F119CE4C0587EA1775988
12C7C6BB47AB0B6BC93C17179D077DAFE4927CD2EA8A72DD51BE98C4627BA349
7D386A49CE970A12504929713D8562219797D9E0B148138F2DE1A187A27CC5DB
EF49874B7A5C53FF2F6A0D568AAD8DC978A5598F73F98D8DE82597AC2F1556A5
23D18C340BCF10327BCB4DFF6271C25C47F2AD5B19EC8F0BA24190967593363D
C0748238E843090F0CCB125FCFB968AB5699B913D4D6BE426CE0B0FC78CAF315
CFD8596BE60785E9A1B1B5EF8004091D1BAE19C3DA6597DD9E7DF6D94A85BC91
2E89ABB1B14A6F4F7FAB9ECFC505EF856C799FB574EEB1B11171F65C21A9D61B
85A8279FEF9B3DB8A4D5EA6BD64BC57C6FA5DC4C53353CDFEF1FE8ADD5C7CAE5
91DEBEAE346A97AFD6CAE3A343DB6EBBE0FF3DFBDB9DB75FAA6B3EF6B18FE9B8
6E28AF5F30B8C0434F7BF5A740BB065D3C36BEA15A1F6EB6C69368DC45B21BBC
4D907A2029B9F492A0E54B60A2CEAEBCCEF6DD77DF9D040DCA5981850B17BEF6
DA6B606DEEBDF7DEBFFCE52F5971519EAC04F27C5C867A1865FDE1426FCC8A15
2B5843B236F91FD6E095AA89565D13CEFAD4A6914A1559A8A052F5AA5F92EE4A
C3A3BC781BD05A3281E1A3A5F088A7CF7B37170DCA3B4A9E6407FA3677EC0313
5197AD5CB99293C018E0FEC63A2D5F45FB85C89F218B14962461ACFBD0BEC6F4
6EEB01676EFA194ECE79E79D77E595575AF1272977A605737477DD75D7DFFDEE
7730081236A04FAC7B3AB5690BF4060CB8B0CF043C9A78B2B54FB0931002D549
C653B8A0557AFBDBDF0EA859947619034184E81CE51D471E79E4430F3D245B01
67118FD39571DA9C406AAC9E85241373BFEDB6DB8E39E698934F3EF9F6DB6F17
7793ECBCF5D65B9143FA96708B1D3A383B09AFE4296A48B808C842694B1D8EB2
F62C8455E6CF1FE8EEEEC4F5AC83E31D5F519262C345E4DE58D32E5EB89E99A9
8162EA353C341ED52BC5F1CAE0586D6E2BE94B4DFEA66F41E3C144BBF24511AA
7E556ED6A58CD4A3B4F55CD37B87BAF31E8AB1DAA8971BFACA5F5FF54EA49C77
094F48020F38B120DF5B2BB80D8DB16ABD25DA5E9B442FB86443A9305A99509E
3492EDB7DF5ED61BBB632E0A978594D84482046F7EF39B9F78E289B02D8C569E
C407B33E0DB3FD2FFEE22FB47778E1EDB6A6BA85BD68A0A865CB96FDFAD7BFE6
2B4CC6050B16186CE564E64B41AF19E5A6F5FF41244192E1D399FF0AA7A2E126
858EA019827C6E12FA2FEF0953FB0187E0AE5915E244418AA6445B1CB7855911
A7506B5D9981DF512C748E8D97F34EFAF98078AE74556F504B4795DDD0911F1A
5BBFCDEC793DDD83EBD679C574DE363B27CDCE449662AB873A52916BB143BBD2
92351079A1E315DBD5AB57CE9F3B7BC59A17962DDC6160B0EFD1277C1BDEC30E
3CEC77BF7BEAF1A71FED2BF688FABB7B7CBFBD9191B14A65AC5C196A24E262B5
382FDDB89A5623CB28706EC2BECE9924D0533863D2C8B40AF87939F628CE38BE
51D3D0B235D30F7EF083F7DF7FBFFE04FA58D78006AAFDC095A4CB0E3DF4D007
1E7880BE42BCF07E44192E601A5C1A4F3FCF61754AE6B6D256E0626EB1EFF152
59B060DEAA557A7AB15CAB9B994935E37C91E3AA558B162F9424FBFEF7BF2FE2
C34D51ADD4BA7BBAC646B668D6687133833E8E32BC23EB236FC98B219799818C
F6DA6BAF471E79C4A5EEEFB4BE69DC650A1A397F2074A22C4F8756A2935CCF5E
5A349D22B1720EBF195E66D51293C08E818BEDB2CB2E4F6789DEDA8B638F3DF6
AEBBEE02E85117EB864CD6DCA9342506CDD150DD8978BB2DD1BEDA96C80C2946
45DF445CD8C454704D7CE10B5F209264831721A101E002D67B8C035B01DD5914
282A02DE1CC70E094596158373C03060DAE459F89A3777B0ABBBA451A589289D
A9A7A899A6CF4ED8ACAD2D5FA26D632E76DE532F46C12781D6AAA5A1913995FA
C228EA8B7C8C20F61D9463D6BF45869BF708C56369C71B29269DB9A2CBC5B209
C69A3EB09C8F5DB54560D96B352551488A6437AB5068E563C9D5F196371A64DF
3DE7DC7097F8450CB7D514DEF39EF7FCE217BFC00642CD62497151C09790B5EF
7BDFFBC4AC692EC4A650AE61586CE6E2D6DDA45848F14248204BE05D61CBEBB0
FB2C3B4BA716CC2FD25BA7A4675D402D274E02CCC13F60F6F9DCB973292261CC
EC1A7E5D975AF65465F374DE4F777EA79404665B446DFE2C73139D75D659F7DC
73CF33CF3CC3E9D50F00B2D86E3B1F8714FB2EA5AAA84CCC5247B794D9D875CD
EA9F53F02D2DEBA9F3D4F362D167331ADB3434EC9149F37D7D3DF35A4977B35E
1CE8DF26EF16AC5BBB41FB9ACB47AFAE7A699B39FD73E7CD7E71C573A94227B5
AB67B0BFF7A9679F78EB2EBBFDE6E9C7767FD3DBEAB5E613CB9F18E8E8E928E5
653D2C5ABCA05C1EDDB869BD3E6FB6648988BA2A1203515CF3058CD25AE2A4D9
48D216EB698EB60FF3783F9A248121F3A0DD13F72B05BDB442B311AE24F60104
8539EB43AB90BD31D51835C1DA8A4D64EFA5B6056A0B960476DF4E3BED244D93
72798D649F7DF6F9D9CF7E263691A479B85ACAAEEE6EADBF574944C469C52322
21ED029FE6328B7389672513B28748E0EEBBEF2EB3404F39E594536EB9E516CA
BB7038D27DC108CB3C8946F4535292BEC27E7799454C89721A589B58048DFFE5
975F9E5927325EC6B2D3D45B3F913CC066C76FC37B98949E75F4D1477FF39BDF
B4A019453400C598C5E05275C97A559255C26971A98CC45FA40F3560324F88D8
4B15D5FF5A22DD599F68A9316EAC3CD518344597A4A847198EA154484DC49AE1
982DAF2752D5499AB26E4831076306BBC20A47309270F8B0C8920DDAB8430E39
84198551C77025A542A4E9BCDEB09048C08A92C99E6276E54CEB679B886A84C9
8551568936B4A992EF2A267123373236AFEE964987486300DD2ED79452157B10
BA287185242A2691FE1F918868F95698FE0EBE6978B39AB4D256EE4E2750ECBE
969AB64802190A1DB16F7B596F782131E4E217E3E8B9A8592915DC58DDB23FA9
9387178536413877CC5924A596945C5E7405A696648814F627E42D1B11B161A7
181AB3FB1BBE4B08FCA99FF8A84C4A6C53D2B379F3C342F7DCF4BDF6B6F615CA
7E728E09F3805461C93FF6F4196CFA5CD01B2AB7659FA8141822BBCEDC97AC23
597D0011B3FA24BC6B8229471B4D57AA7F6CAC5AAB357371A1AB38CB27985665
8A46A9884ECA9571C98362A7AB546A0B162C5CBF7EB4A77B9B4D43D5AED2EC52
476F315AEAB1E1E6CCD35356AD7E79C1C2B9F3E7CF59F1D28BBE70AFE65396D7
0CBDB2EB925D56BEFAD2278FFFC4D5D75F3DAB73D6ECD9BE0F5A4FAFAC818EF5
EBD7943AA5798D8DD72A3997F8C288B8DA4ACAADA492B89AC7DB8A52D4C434DA
8A24F09022627C71036009BD27C8899703055F14B970E1C2952B5786AA347680
3417D828D95DF825F45E6F24003054E189BA0FEAA7815787E11D0B30844D8138
C0DA542A15BDC08FA3AA140DA936D52A4C5FC75A2A994B19907E353E36366FFE
7C4932DDC4C73C5E5B63740C30326AD169A79D36A524B0DC06CA0228984C66C4
FEBCFEFAEB3FF399CF1098D59F0CD5F89D9EAE67DD78E38D447DA7CB4142CD87
BFC3A9ADD107F46D506B19285B17D95F784E4C424719CA9B45EAD0B569BAE982
ACF31D77DC51DB4D5359DDFFA4934EBAEDB6DB3C9C491AA26F2BF16784DFFAD6
B774CF934F3E994E20C45A88F0B769E5E22FA79F7EFAB9E79EBB68D122564394
231BC5A08D2C1D80F65221768264219813868066EE35919C668153488F008723
3CA796A59ECB5260240AD39E193974C342A148EB0543DD21879D2A87B63410BD
19DB30DACA175AC5285FAD2C68BA9DA3DC822429BA567747A7F4FD8A4CFCC815
73F9529C2F365D2C465FD8DC43ADE51DB14903C4A19CCE61AB9CF898701CA599
A6A9E4F08E088FA8EAD33936E68ACB5DB2C2D52B857C575CA42C03CD1A9C0FCD
B7CDE99164B0D269A2A067E592910F3EF8A0340F2DF889279E78E5955746199E
A3E195A2E61BB8827E28AAD091E7B84163A4D87354D189AD87A02E40619AB95F
8B81CAB9ACAAE60F987DAED991A780A1837464A896C6ED0233FA0DD804131101
BBCE2E429590D2F4C20B2FC0C52CAD254583F1D75B6D571CE73D904F942BE567
75144B69AE6D92253CC8404CC6EB9BF6D87DCF3DDEB1D77DF7FFCBC60DA3CDA4
B8CDECC59B368D76C4DBF5F50DB49A11F0BC1D1D059FA81625DA27591BE3E5E1
39B3FA376E7AADBF4F96E3BAED976C373CECB536098338A7ADCA972B632FAD7E
B1949AC0A2F95CBED94AAAB5FA58ADA183544FB3923C79E287D5307DAFD5D84B
51C90918C792254B70085A4DA009D524EB28897DB0C30E3B8895840909C632DA
D01DAC22919FA3264B614CF97EB7F17D3C0FD05F4F9AC06ACFB29A75994A281A
95727987A54B97BFF042871862A5B2FDF64B57BCF8E2DC94538C02A79E7EAEDD
83FEB082ADFFF50CDE21036E32DF20AEB0E924013C37845841E44816F22B7143
715BB8E7742741F7D1B23FF7DC73D655860C397D65713F0BD95996BD610990B9
C0B91573D757745DA5C6CD65269D0596F5FEC0030F7CE8A1877419B7357B08D0
59C6A955D2F651F563560EAFB6C1A08B7164CCC2B3A23F4BF3A0A4D9A56A178B
CC8E707FADC0D34F3F2D99F4B5AF7D4DE3C177C49DE9ABCE27A03C199453DB32
4E70A2B890A6F34CBC3CE443FA65988F6F19B7C9E6CEE9136DBD4139F579F475
D72C76340ABE89E0FC56B2435C98EF5AC566AD2BA513CB6F2EC4FE0169DDD844
0157BD5147FBF5ECC9D75CE56A4953EA58C31BB54E9A57D16B654959B497D344
9C54EB35C5FC2BADFAFA465387B26FA09F083C34A3A384B906D11653205BE44D
880AE3825A7DAB9F47C7E727F806A9F908A39E4B972E5DB16205C96044FB30D1
900AB8C43977FBEDB7DF4F7EF213767F8608B04133584EB0350AFE8348823FFF
F33FD76191C00B3B9586FD4B5E4FBA870BFA27B74902EBEEB739143365703954
B838FF975E7A790A1723DBB923CDB7F51D2BBB7DEBB168B07756A12036E47DC4
8D662D17473DBDDD23639BD272A16D376E1A2E16F4A7348C9C8F9E265DB3676F
53AFB5AA95A4A7A7977A1FFF94AAB676749BB9B3366E5859EA8CA5E2143BA2E5
AF3EBFE376DB25AEC9115DB37675DD55FB3BFB87CBC37D5DBD51DCF43CBC312E
49D0F0790D133D095C629230967DA0D3EABD0A798F6B86C288528643C0CEBC95
59A1516AF0FBEEBBEF4F7FFA53738573A4B9C07419AC3397BA89894D0144835F
3BCD1EC919BC0C31430A086BF51A2752474B3A4C247214D18B85D52A6060CD9E
33E7539FFAD425975CA2EBA52ABEFCD2AB6CB95679A2F74BB5DA3F3090CF798D
95FEDABAED29A79C82628BC23539626CAC075B04540649C79FFFFCE75352126A
08393C329B34776BA14720043FBE19F5337B87F4DCA38E3A8AA6AF06E06E7A99
75DD4B02A04AB2A10E3BECB0BBEFBE9B28AE294ABA068F0ACCDD7A7458FCF9A9
A79E620A561E6C6848700D723AADB3B90683E1887987E1A8C5D794F11AB9A0FA
49CC453B2E9AB9207DE94392DC4466E80D3074973668B4C0A31E24DA0073188A
B27A66789305C09194C601CD1A98B88F47A603F0CD2B3FDE09908FB22C8F5678
A649A08741D9E64CE06FCAC072F9511F59D32173735C243130E8928EC82D8C5D
218A4BCE37B149F3445BF5C835647F345D3E17CB50F019A31248D81652C9A362
2D69549CC74E4AF2A9406A26AEE5D6E75C47DC51AE37D7BAE6DA626EBD6BD66B
4957941F4F1A74A37459EA8BD659EB8983D10A86CD26A01B0A88205085F93991
B2C80303543768072DB26C771186D61674237650E4F1E4934F9A2BB895F627D0
8E8749A8FAD5741DA850112CAAC4D1FE03DA04BE074C8A326BE8C518C4A2314D
1C2209738AA69340D379873454CD4E94B91981CE72095C069766B84B1C5DF45F
74DBEE6ECD7C4C74D6DDDD3B365689A37C311EE8EEEAD1EF6AB5467ACF86FE49
5B8FF3E4AD77FAA4E4A6D4F2AE91E16AE471229AFAB3BF6F4E67A9AF5A91242F
C10BD6AE8C172E9ABF6AF54B73E7F48C95D7572BC3DD3DC5BEFEAEA1E135E6E8
B49646BE93B89701D57ABD2C31D06C79D7908B1A3EE339E7F00E510D97D6D045
2986F6661C7373D4480DC1A247FB08AB93F4AD3533A28A2FCC1D0E51A0C93785
3B64E56C895593FA0AE7B4FC3DCA108D2602121EFC3DD2DF310052DA5A6D41B3
59EA9C0827C8C81A9C25B9B8E1DAAF7E55FC5DA75EB261FDBA7585540DF18A4F
868E8BB6CED88CE9CC9045EA322C7B64039D58A6A378147FAD183939B8C825EA
F4A1619D9F73CE39575F7D358E97E94E024017F81E593AEC5373F173595BB771
97E98086C792A498A6D697559F03F669C69CB17E00098C9B603699DCC2D1C7FE
6AFA5FFCE217AFB8E20AF0623506A05A74812E63C590520C2FC4AFE6DB507302
C6E3EFFFFEEF3FF7B9CFF1087E4558926F0D05FDAEBBEE3AF2C8232D66A36F45
DB0099B9ACAE6AB2AE9632DF5CE211E126747DFD6F4145AB0F0DF3D9B9D800DD
D272217FFCE7CEE9DF50AED4AB320DE2DE241970CD3EF1B5BC5BD270BDB11B28
76E65BAE5CAB0CBB4494D4CCB942D3878BF3399F2114F9D6F662424E47BA2B2A
55937AD979C48C56DE5B1E9A9036F2E59C2B4679D18A0CD5F51DA9A256770371
E76852BFFCF2CBAFBCF24A6DA2717F48A22D986F84D1E6CD43E5A23F87657F5A
E40044077DDB4651E67BDC7FFFFD7FF8C31FD2F3CEF2F1C31DA724730675DBCC
65978654018699AE0E666B5F6D2ABF79F376DE79E7952B578A722072B67B665B
7C4A9B005AD5024661DA2CC5F72EABC30476C232D333C6C7C8B034FDD18EBC42
90932428163AF2F9928C458D2A499AB4D22E4A6D6D16F2717F2EEAF29FBBBA2C
C54A75A4BBC7C76CFD81C915CBE38DCE8E595D9D83FBFCF1BEBF79EC899757BD
FAE69DDFBA62C5F242476B7076C7CAD5CF365BE363D58D051F252AF8B276DF10
ABC325393F115F25264E3654AD6D12AD8AC22D6E6363C6A169FEE529173A445A
E605DE4314749706CF40D4D6CCFAA342041EC1226B506CD46977CEB62F679179
E38929A0F1E64E2F6164AC23AD2FF0436A343B8A69E64CB5D659EA18AD54CD99
6E0CA295F54299FC9A4E47B07C3B1A1870085199354796822877D886D7CA91F0
8AE252430482B5A29FEB3090F5A1FBB8D4E703C22B963B286F2039EB5652EE3E
F2918F5C73CD35567D6635CC6D2C604ACAB6FA47D94CD2C72DE5F4F5BF001095
86A551E1D3C78D009BA0460C46CF34C1FE94C038FBECB3C31EA86165102B79C8
2187DC77DF7D880AB3B9C3FF43DC7C919F16072BD3C2986C1FB46779B751862F
6D7E274B3442DE600FA1D871FFB0312D7078704CEBAA48E21C8A912E86A92126
FF34CE75B59A03690B3397D6180FF9FF759E5B8DA6EB2FC68D5AAB90F726C968
C3CDEDEF9837D45989EBA3716DDCD52B13F1615776B9A4BFFF95A10D23698EA9
267CE2A73FF58D5BBE59AFD506670D5066C1D2852964686C6101541846B66462
73F7B5613B8788B6C60A3835286A53D283A10A1A86C4B1C71EFB96B7BCE5A493
4E223F8D94EEB62A8436661244555F6F27ABAD7DE1E90561DB380F386906D2E7
B2EC150C6553645D9635670D211C4154565FBF21AA661D53B9971519649D7AD8
B329244147B194CB75341B138088491A406ABA726769A0981F8C922E0F03978B
EA8DB1F1F2D07065636FC997E9575BD5F7FEF17EBFFAE56335976CBBCD0EABD7
AE9D3B6BE1D0A69146AB3138D0BB6AD38B7DA58214F952673E4D396D4A72944A
5DB9581AB1AF83F72EFE64BC52DB58AE6E485C0549A0F14BBF23B78C60519B93
310AD007AD22898324A640E4E0F0C30FBFF3CE3B7599819CD8E10CFBBAF02B0C
1A9A0CB755EA65F541131B439B6CC3B7B06676763DAB5D8CA3F172A5BBCB67E8
160BF95A7D82809A59C3234B257699CE381DC54CF73975E7744D70A9C33D4CD5
A7FCFDA5975E0A55333403A42079DC7CCEC9115B97591D6A6D5A375194668AC5
6D6874FA53D7C046F18DE857D61998BBCD9C8D876036AE015EF40C91BDE95E18
DD9FFCE427AFBDF65ADEE36EFAD33FFD53E9E9F0506B506E95E13FF8C10F0E3D
F4500B1D013E6A74C5D921E71D45C46D29032CC19F8DD3B9FBC0073EF0DDEF7E
F7C20B2F3CFFFCF343900C6325CDA01769B8A7C6EF0CD618E406AA2309AA1B27
D28E9F7EFAE952C0A1584941E93A94F8251936B8CB2C456CA9B7E92845F19CD8
F53BDFBEB20CE084B4B15663FBAEBEA45EABD42B4517F576F6AC2C8F2CEEEDAB
949BB5A85E7535EF13926A96B88D497E248E56B57CF3B37A211E6AD4AB4DB778
DB6D5F79E9D5B45479B38946CB0744725875612116F04858044417A695A6A037
10309516DA35309CE17DA62C5BA1D60C7E7F0E94A5125155804B59142B9170DD
75D7511808558429F861E5F65675B7DDDA9781D348F0535EAE532C5E67D01761
48CCC60330A25DE0D2081C80779B6D2E105CC5040D878B468FE61D0294663A49
50887AC5A0F3B90EAD83C778481A38885A51ADBF6F6EEC7AEBD5BC4F192A7A10
A16AB5DCD1D9DAB8717D3519CFBBB8E16A83BD83CB76DCF9D1DF3EBA78FEE24D
1B470606E68C0C8FA79E4E1F00A827E50573178C8D966BB546DE3BB73B7D65CB
442E50AB5A1B1D2BAF69241E784EB4E1BC662185D1599AB02586869038480253
C3AD79AF2D1CDC5F6F76D96597175E78019C7A8207F81C7573EA2D2C55145668
9C3DB46DF153111244A7FBCE77BE73C4114710E945B3B014348F2AD5D7FBDA9A
B50BE6CFC300943C906550ADD593AC7192C1345A19EA56519225DBDD72CB2D1F
FDE8475D00438B3A4C36116C0ED874119005BDAD0D1991528C623CB3FA95A853
B444C6C10D37DC70CA29A7B0E0BA156E2B5B6A987ED83BDA6588F3E832D34932
F6D44019B9D51FFDD11F3DF8E0835B7BA84C0DC4DA336076BC6A9AA9B9DAACB6
40BB2F367AD555571D7FFCF1A66184AE4217000BDB8287CA23516E93A64C592B
40031336B4CD886CCBF2725B16CA4172E2563041538D77DB6DB7279F7C926C5D
D0B3F546548AE6A8B90071A30180DECC528057AC6B066AB55971343F9FEF4F92
42DD0399D63D2A75AEE462A9035DC58ED76AE3DBE73B652078CD2F8ACA1DB2FA
1B7A9B823344E349E1B5C46D70CD55CEF7E01C6DF94832AF42BE23D7728B962C
A65E2F34AAD28AA509ACEFA54B97EEB5D75E92CA560562C0CE2C9AED8EF5FBB5
9D32E79BD19B599C339C17931656EF12FE5C03239E4F9A49D8150E0D2904C0E0
86A42A31A9E9BCAF5BFBD2200F38E000ED2C3130B7655F19CA53183F69D3C603
0DC035C97A63F0F328B7651FDA3695CABC2266164C2B09E2EE524757215FF292
C0FB15EAFE5FAB592CC5A58EFE46ADA3D5E8E8EA1CD4F67BD74A3E1A1E79AD5A
1BCBE55DB1233AF8900FDEF5DDEF946B6383FDFD62EBDB2EDEE1D557D6542B8D
3DF6D85B7429762CC93A3A52F145B951219F93859810A5F181BEEAC6B1F2A691
D17592046250920428E062B69AFFB265CB805D835F840D84DB760BE477CE9E91
8BDE2C5AB4481C4D2ADB030F3CC05A9B82660AE93DF7DCF3B77FFBB7F8D3709B
D83136B3C0BC31B459A75616B3374CEB7659222FDE7F7A6D16F23A83F55983DE
7747A7F82443A26F9BC5E4D7CC35C336772DE6673EF3998B2FBE581FBEFBDDEF
7EF8E18743C2D0C4016893DA15F2A610CFCE65C976F408B3C3137670B4F3095D
857AA8CBC0B3A8D4259FC45C22338C9F7452DDC73707CEDC9BAFFF6560674802
52FEA1047C08CC4EC3C0AC11C99D7AEAA9D2DC119C612A301C04E30C2279D39B
DE44450EAF36378251055CFB84134EB8F5D65B1127932501E61A72DAD012D17F
F1E32124CE38E30C895EC06E2D330A996AC0E3D6E7043AB7684A92354D8CB216
BBBE45CFF070B70455CECDD27D9ABE32C0AB602ECEF717D60E55177517936A4D
DB59A927833DA5A1D14A5741E680C7A8CBA7FF0DB9E825D77CCDB5EA395F7186
61DBD9DB551E199FD53F581ED54CBC29604624C11EA426D6B35138DBA1F32886
60A9711AB9F9C4449F70B09D76DAE9F9E79FE7266C01478C58543C7D0B58A361
13DBE4AA9106425D115D94257EACED57D85CC4CC7AA23586A3672AFC1FAAE22C
2CB5D39FA44E697D706958811B179BF5CF8165CC18E83AD75A4FAFE287F1434B
4AA58F8A141F2A9E107D6EC229C64CDA25413E1237E92E16BA5ACD449A7B2A06
3C332D945CAB998F5ADD9DA559A5A2ACBF421C79A3A9D11AABD7ABE5CA489CAB
AF1B7E75DE9C818D9BD648CDC8E56B6363D5D9B3E6AEDF3012BB8EB7BFED1DCF
FCEE590F9950E8893CEE53673ED7993AA044C705DFE2351A1B195D3F34BCA6DE
1C4E1187E2B4EB930F54885CF6DE7BEF7FFBB77F03C225646D930F6794622B69
112DF00B8E26FC4EA4405A9B28407C017B53FF4BE1123B20EF1380493BBA4986
DF676C2BCC35E41A9285DBFC487CD56A36777FFBEEBFFD6F3F00E4414F77CFE8
D8682E3320FE2092208C64BA2D6B6E6D415C869A4B63EEB62C6678E8E73FFFF9
0B2FBC10BFBF560F441D931061EA2DE51A8C99FEDA5A70EC1EC0E910AE96C633
B3EE46DA2B142FA9BFFFFEFB8B0F6ED58932660AC09C2943C48DF0A15B62928C
80B3CF3E9BB1019967796871D086D765A950EF7AD7BB1E79E4912977C772F66C
B589A6584F059628CCF4C8051DD5DBC23F5653CDE14DD2B6E42E350874046EBB
ED36E06C35AA1D76D8418A246571204F18B033AC419FB3591381F414D2A4CBB9
7EB1456D65EC8B0362DFB9AC352BE74A0537BBA7EFB575C39D69D3020DB3A319
49A45453D0949ACBAF73F10A575FEFE9D7A5C0D7CEA727353C6EB158482197EB
19E8D7C9D2F034CEFBEEBB2FC4D5102D01938EE3C877A79A54A462AD93901997
5F7EB936C86531182DC81E7BECF19BDFFC064909980AC1AAE97AFF910A21CAA4
F6DBCE9711B3B90AD00CF02B581103044040C2A009A1EDB42C773BB2A4FE502F
F35011BED223C8D780DB1010B2D387998B2E8BD72BECB01DB9CCC66432C491F4
BF0E955650869BB926D11D3C1CB47F4D96041DD22C5349E0730A53319036EC2E
B4AAB5566771A0BB7356AB2931502AE47DDE95B6F695575F59B468FE9AB52B9B
2D19E13A6CD5CE8E42AE507DEF9FECF7E0833F7549BEBBBB6FD3A6E139B3E70E
0F8F7696FA9A8D2869160BF9AEA20F48E41ACD8A6449BE581B2F6F2A5737F920
411E2749EC92B856F74BAF6D5BBEDC43F4803D69819430426007320CAC85FC0B
6544FAA66EA8BD17D7BBEEBAEB885C59E6D977BFFBDDC30F3FDC6500962E9004
E6CACF0EADE73569D1FCC674C937A37D584647CA80FADFF7BEF7E96CB03B26E4
014F7593BC43D3D1CA749CD43259AD4120048D6681E50B7C34A2C24247A65585
F131FAD403D1E1DC845FEEAB5FFDEAC9279FCC2250D6A00FCF3AEBACEBAFBF5E
8B2C0DCE82F9C61CAD54D88ED37453B3220697A25752F0F1063A0B6997537493
D5F45720EE4A6529656BFBEEBBEF638F3DA6F5973C80E3500FA167196F42C980
1784D86740514DF95CCBE520DE4B31B3F5724802B46A784DA878BA20DE60C04D
1C6CAB8BA4D52DABC787A62402CA4DA3660BEF6BD6C71D779C6486C4E15FFFF5
5F6BCA5A135F643B36DE6AD472E2DA1206B9B83797EF6825AED99A9D34E7964A
A3958A18EA22E71B5B826E2CB361CC35475DB3E6E2AACB6B875647CD6ACEFFC4
A55CD827E7D57D3EDEE8C848C1F72074B03022D5946AEA3EE85BA40059770D4D
81844E1297E1CE48623C456F79CB5BC46AB547B67D12159865862F446670880A
33796BF0DD61B352696C029297085E77438D4B7100BBB008098385B943F48A08
23495B459FD3BD3032F0C7EAFE94B89F79E6995FFFFAD7391774DF93361FF688
B6E8A6F50EC1DCC9A57528136B44E60037D57B493CE05C2C0293A92A537B8790
049A75AB1967177B1C8828D7ACD4EABD5DB3A3A4345AAE6E33B060606070F5EA
3549B3249D5DCF5DBB6E75AB559BBD4DCFF0C85A9908B5E6A6EEAEEED1F1D1CE
8ECE72D5635F0FF4CAB4A9150B9D91D3CD0BAEA50775797E5A1F1F19198E0BE5
6A6D54B2245F68E6F2E4CCE56476F4F4960C371FEB38E4296184C038B5F97CB4
645A13FD9CEE2261192A258EE090803A60186164E6E243DC9CA2974902F1CFEC
29226E7F6EAFBDF6DAE38F3F3E5BCF0912341125614AC0164D10F190F6551E9E
3262FC06E204566526C641A70BA00E2EBBECB273CE39477F36B36E5CC4F45AD6
FD3C5B4333815D263899B8E130C3CEC21C7F2625EA2261092EC051DF6BAFBD1E
7DF4511B21252C3364C5595C01170DB18DAD8D18C352C104742997B4266EBAA1
066CDDE70D1F14CB89D5B37475DBA33016156D89091CEE91D58BDA27D25AE8C7
D02609DC960828A1FA625B8F5963C57A96E26C8E72A21DD26390FD58F9B680B8
A4C45245D8A64B4E80A3E4F2F5B48AD8FBB27271A70C7AF18456B25D67CFF8D8
68DDD5170DCE1B1D1B19AE8D978AA572AD224565344AC6A2A42643B615355D54
16AF8F5A2E3B7C6953CE64A07F6078D41776895BD13FCBD402B3503500CD1748
7D922CB41D279E78E2CD37DFBCCF3EFB3CFCF0C3DCD0B0701078705EFCB4B0B5
10051A3DC6AAF926BF74013845669619F804F62E0D368E39E698AF7DED6B56EC
4264D81A1DC3A67D6A6614117DD1B738F7FE5028F76C96CE14223FC5A3F5533B
F2C823EFBCF34EAC5840C0E844A291A36069ADA8BA2733F00B5FF8C2EDB7DFFE
D4534F4586A567184C56616FC0C516344EE91EDA6D9704B9285FEA90B6DED96A
BAB42F920F1A7B2746325E6F24FD3DB3CAE38D5ACBEDBC64D7254B963EFFFCF2
7C346BCD9A75B09859B3FA9E79E17FB75D3CFFE5579647B9B2B7AB929A04C0D8
F8488A6FAA43D8531EAFF5F40CE4E3DE6AD957098821BBA851AE8CE68BD57AA3
D24ACA71AE9EB87AEA1B4D240964315862B28574984B1827B0956DA5B07C5A07
CB2E47E3E0E796B0D5F64334053B6F2EB3FADB22C6E9272E6DEFEC7089B854F3
D5566DD8B009B1147AAEA88B261B9AB1595BBB4A657CCA2CD2AD95045186CECF
D687D00BFA102BC4657E523CD76DC8DBCC919158176FDC5FC69BCCCCD23110CD
C978D72A11CE32EEC618243C4E38E1846BAEB9868A4DCAA966A8EDD4B30E3EF8
E07FF9977FD17E89955802FED6AE034F4FD28E8362C4E66091E5A7D1A276B1F5
FA8A0A2F5233A32D3B4E9BD2678C23EC52192E3B6FCCA14C362D7FA2A685DEA1
D001683A41283FAC5E8491187A3CD46B90FD5AD8CF7EF6B396DA6439F86E5274
D06C626CB282076D112BCF25291E413E896413F83A81FEBEE1A1A1DEEE9E6F7C
E3960F1FF677A5DECECA78D975E4BBCB8DF138CDE710CF9719D0F43D75524E91
9E85A415BB388A93BAAF2DF29DD764578B783424AD153D7B41CF354C37ABDB00
EE45A362553105105729F681AF189534954EF3A52F7D49933589487A0CCD6D7E
6F3F703DEB88238EB8F7DE7B6970C6B9B02050C888796288E069AF5077B4FED8
49D65F7AABE873BA17CE55B066ED8D0B5AB301342295EEBAEBAED39AB0CB80E6
CAF8BBE5965BE02AD661AD7D398CD361E0180E3BDFFA3054C56BFAC5622C2B80
A66092C191CB759706378D0C2D9CB7B8516FADD9B0BAA7B32B8A5B1E9E28CA61
DBFAF84FA55ACCF56CBB78C9EA55EB0AF16CD14A47B1A7AFD747F94A3E9D3ADE
75B75D7EF9CB5F8AB7AC1B7D35F63DF2EA122B1D62F68DEA9CC159F95CE7F868
B2EB2E6F7BE4B78F75E58A3B2CDDEEA0833EF8D51BCF9F357B60D5AA57655F4A
72E878767615ABD55AABE90F0F91250B4586FB84A14A58129E9504782C0858EA
878D3B5855BAA17A455BF61AC30B49D9141F8A3D891C4F3DF554590056016FA8
CB903EC827D89556EB084B0DE11243003B2ABC7492F91C3C00CCC024EB041B16
FAB6D9432E533361E561026BB425C22D3A3BF7C47F8AE2EFB21669B4496965AF
304326CC2C02398EFBC02809AEA6B270C30C3845D3BDA2B415E801071CF0E083
0F6AFA006523A8F4388D0A2B875585A9192A99A882A5B3DA5DCEA7B5B6875C69
ED8433DD0C0217C47BC3FA2CB4AD3016159671C2E5256C4839D3328AE6716761
B94FCEED236A42B09D0A76503450DB99E90CEBC652E3A683F2353BDDCDEC36A4
17DB61592121A9C4D383DDBB2D23F671D0A911DF9A059C58A209DC943462C978
664EE59CE1455EAC0BE0A7B0952DFBC0BA3F121F3EFCF0C3EFB9E71E5D2CFE48
967088ED3AE5BAE105E13210EE702BE97156824AD4C1051962040EA927479CBB
AC358D198EADA0E50E8E2F3AA35831CDEB7F596641A88A8517A0D15AB08DC40A
7D62021287873357F9E40DB6EF42E45E4487DF75DFC25AE415E50B929612ED5E
12A45D8BE39D96EE3C3434B26EFDBADE9EDE4A65ACDA28177CE1A108C26F49A9
D4353252965ADC59E8ABD46B5DF9795ABDFEBE6DBABBFA366E1C4AE9A6B1C79E
EF78E4918775E76287EF6F2CAD5F0FAF376A6958B26BC9F63BAD7871D59AD736
7677F57676C9DC8A97BFF2ACF87F8AC231AA1BD41BBEB24C3FAFD59A71949300
7CC73BDE418B2E5B3E92BD58F756D6DA224488C38EB35C3D4335B0450FD7CA6A
5675CC442E56C9C236583AB358FFF3CF3FDF069942EABAE80CA663F816E4A1C3
1A40A9B41F220688597113ABD47759160D30AB764360998D5387839FB2828935
31445F7341B8344446679568A26F6287C518DACAE838901ECE3E0364FDBBBFFB
BBEF7FFFFB760843EF1C4AEED632855CD63B13C83926AB9B2020AFBEFAEAF3CE
3B4F6B45D2A4955BCB2E16AF7FD7BBDEF59FFFF99F1A39329BA56E136396E664
C5D8E64E41C2594830CEDA856BD3F5D00B2EB8C01087083BE3FDD74EFDEFFFFE
2FAAD5873EF4A1471E7964C58A152CBE0875FBEDB77FE69967D6AC5943FA87D6
79D1A24534E7D143F513DD1332B0A6A43347D419B9A5545ACD9DB929AC3C1B72
A580C365186A21AB9DF2FE515036E532C7A615E8B2EF2C0BBDDAB15AA03A082F
14AEAFFF658A1A8C9EB837C0AE3A837AA2F69A0711167EDBDBDEF63FFFF33FA1
926E891B53DE1F03ABAD6E834ED4DB6DB7DDFBDFFFFEBBEEBA0B8B997225B8AA
4902432B71291E49887AE2B2F644803F1E78E081F7DD771FE53B6F00A728C9B0
D15CC6B40D10C8A5813A4AA3E112E42F98E6619E6D174407A795046649F1BFB9
DA25095A89883B2A147312EDCD86078E485AD165975C75F5557F3F3E5E2E164B
23A343E2B8B5E6784F57D7A878B4F39EF162A1E4AD895AD24CE29ECEBEF172B2
DDA225AFBEBA66A06F7621AF81D650D02A9571B1F279F37418D6556B633DBD9D
1B37ADD5CF67CFE99365393E5EEB2CF5AE58B9FC4B575C71FA599F5D387FEEAA
D52FEAFE9DA552B9322631A02BBDF3B5A9716E16956DFD765CE68204585FAC21
6CDB0235B36A52E240C3076F07519F4AB592B51E0CBD4FE63C81CA710485B63C
0131733A9922008215FEFA8F7DEC63DFFDEE77A5B74A78D8A99E376F1E190BA6
45927BA7A7DC7FFFFD071D7490DE876073E87A20F14E197735CFA965BFD949D6
8792A08F3FFE38DE4F0C0E8D7CEFBDF77EECB1C7ACF1611494B986B70D6FA8D1
EAA858FA9A1644D76BCC3A54C71C73CC57BEF2152BCADBAA63E0B6ECE5841217
A508F53E057E60402C75B7DD76D38A69A9B517D621009F27228DA818E16E2D3B
DC16DEDDCA5A8E4033E63F313DCB0053ED2C85E520FC044D9940285B239E4E72
B739E82D2B01A68CF580FA0F27456DB4CE97C82A2B4E9E81832401BA00425717
8B8C759F952B57D27CE990430EB9E1861BC8918B325C1AF2DF5E4F9D8A85B518
150CC5A82E5C730B9FD0AD01171016F61BAB8389B6EC5B69B177F0578873D889
2318865D85EB69060984B5A46F0938EB7F825EEC38A94AF40532F729112FA2AF
BA9EBAAB24002B2496A0976E88BE02B20B3D4E6696B833AC035484B0C1930679
6B7822EC77BEF39D4F3EF9A4E64BB127F808F8308F3CF2C83BEEB843176316FC
1E9BA0954142B637A24AF289133774C50E2F572509B4C8B20CF271B1A7A76F6C
54F49AABD62BBAA6B7BB73646CD845CD74513CF88F844447B16B6CB43A67CEDC
35EB36F6750F0C8F8D75C4BDF3E72DD26D9BCD543375858E8ECEAE4EDF72A452
2D77754BD28EC7B9D6F0D82BBAFF86A10D85B83067CEACD7D6BC2AD9B071A357
D06AF55A7F7F6F8A2FAFE347A77217FA529096508941EBE80D986B0F3DF41016
B719B31C693108AD947437DD1049400814975F2EEB2C0A5B812CC28C5B97E511
592CA10D2ECA8EBD59FA544BEA889A0C301E6469EF6D9F138045B13DF3CC3341
5C30FF0F2498642F17E8ECE6DC844693AC09AA213FC35BD17CF93981A656065F
6A2E9724788594AAD538F1C4136FB9E51656CC6DE97E71994F93F579038E0294
713C033AAB66F67274E93D67AD0D193066BE316ECE0F8013E6E4316DD73009E2
AC65104114FC452E9340047EF13C706A7822CC42D24E86022EFBB6C6F76C2BC0
4DC41BF55B0D5B5AA7FED41448FAD665CC6BF7DD7727AD39CA10B96766D32E13
4BE684E438E84F0A0009AE72BA411980575A3DF3EFE550A1F380424BFD848633
F068AC46EBBF76F1C5179F7BEEB92077F1DCADDD77F32E5AEED6C2850B2FBCF0
C2E38E3B8E35D7829F74D249F88848F3C57EC5E183277686DE7C040BADC4E7D0
430F952D6B6AF144AD4F1AFA32BF319A81791A5CD01DD3D40263D3BA9260062E
2C34D419FA75CFB0BF3081364C0E0BBCC3B22C50872B1B7168D591E1264E2B09
2C9F2FC4FDF00E815A229B40C75F92C0AB0F4D9D9362B391F474F58C8E8FCF1A
98333C34DA486A83FDFD1B87D6A548709E500A45AD82CF29EEEF1F1C1A1A957D
A07FBABEC78398D6251E5ACD7CA559DF71DB9D46865A7DBD83E5B49CD0AB33B9
664F6F616C7CA3CBAFA5A6A6B3AB63EDFAD55D9DC5F1F288543A6F828C0CA129
A795E2AD6A750233B93B7D91C61766C1BB80B122EDACDEDD657932540CA0BF8B
D7BFF7BDEFFDD5AF7E25E98A91AB55D66DC3DC535A7159E64033E8A86EF0B994
F60173AD9F13B0353FB5D561F12B33AECD3785BF1E17B61E217AD5C0C6D217BF
62A76C8F3578129CA794042ECB50B43824AA8A16E1AD6F7DEBD1471F7DEAA9A7
1ACFC2EC0DD1B6ED3D1E4F5C2BA183458307C680A25997A65E686058639C13A3
E3371049238152EC1295D6F68229E0AE254A1405F516D0094926566C699690E9
8F56A865A2D7FAEB86765E2809AC509CDA7D332EC16A254C42C84D7700413334
16ADA049BBA6CB60FDA87BF8F7C8B3B2840ECE663C63DF5A7A0E1A396935FEEA
AFFEEA9E7BEEE1D1181C5A90C30E3BECA69B6E32D0B7FFA32410E76579C3802D
C637BE14764A3FA1DC693AFC9F19F6DD64AA9E489A007612D11797A9472E8BDE
9305676DABF5619CB68B98F2FE26695C605BC759E70FD904D2D2AC0E5FF3322D
012D4A84F7C20B2F109017B57FE8431FFAA77FFA276BF14D5504F737BB70E60A
CAE95E0C0CD50A1FB2C5C3DA1C5FB011AEA7FA876C5D6681793453C43874A599
17CCE2049A7E2A091A690F8062DA07C6CDDB66DEA64DC3D57A5D7A7533A9C751
0AF9D06CA44C2D5FF5ED185D6F4F7FA5DCA8A6779E337BCEBAF5EBE8B1D172D1
D2EDDEB472E5EAA459EAEF9B3332D4E8EE9AE5DD7F95E1BE81DCA6A1B55161C3
C8D848970F3B8FCA309935BB7FFDFAB5713CC1D353787A9D6A1700AF6FF6E9C7
194283A57918C3B2362956D8096B336A0801060C83C105DDC138AE16D4856EAC
D3BD6D068B2952A0DAE5B1C71EA38C9607C18330D6C09B25658D7D225101C44D
5475941A4E3BCA08DE121EAAA3A84941166CFF0CDE21537FA20CE98C0B202F14
67124C25084579F409007A17743397412984D40C0493310222E7125D9FFBDCE7
4E3FFD74DD87589926A559EBCAADE508515A1BA59BE84132D8CDCF60414B0DFB
E4934FBEF6DA6BA98D00C5364C27437B32005AF3257272906A614D83754343AB
08CB2DAD7B8F2D2CE958707048E88C33CED06042703DB23C5DD039804C15988E
E6256166D627F0449A17C7D052B3A693A006C9E9B2980D62CF9A628A6E49DF74
9979FA07F10E69AFA962231B5B9F5B7340607DF589762DF4646ED5BE5B7829F4
0E8510B0BAF32BAFBCA29173B4A971A1E08B4A02EB6534DD0BD31F9726BA8E15
A9988A0DFD6885A9C06560BAF9BEFBEEFB1FFFF11F781DC064C47D04B9F239DD
056CE92CDD6EABD601F703C6849D598B075026C2F8B5E320E210E822B3488F93
7176C105175861CAB49280DDC5C4B0F3ECD722576A3435EE56A1187B6C518FEB
E025C1C5175D74D18517D79BCDAE52D7B8EF77EF6BC04A9DF9A1E171DFC82817
953A8B95724DA7A6B7B77F7464BC56AF6DBBEDA2975FF62DE0F549E4F27FF581
83EEF9C1FF17C5AD38EA8C5ABDA5E2A0D7CDEBC34934DA4ACA1DA5B87FA0F785
E5CF69D8F3E66D634722CE79E5D41B161D05AC016660AE0094B8D0CFCB1C0D1B
C042C1E48A99C3D7C04F5CE0EB64E14C5B1447DB73CF3D7562A50471E6930CB0
D332FFA2ACCDA11D5A32BBD11F69AA4E6B4C5415D3FBE0411CE9308CCCD87492
713DEB3E21108A41A66843BEF0852F589A699B3C98928368A8A266C81735D662
BC96D7E8B2A88625F9B94938771834A863B85C5D2653697819363F09B1D5B6EA
2498B20623B06E360C555B03AF310D9A011868041EDBB00260321436FA9A190D
E0DC5106654B0D7B2567E9BCF3CEBBF0C20B91D3A88D7887496F65FDE9BD8EA3
1F160FD958665A3806462B6129DE7AC925979C75D6593BEFBCF333CF3C63888A
33F8BB2959B090064D345D8A0E1B7601A250CEE204FFC788B125B420A7CD4AFB
C4273E71DB6DB79181469A0382706B43444900B884DD2FD5C79C212EE8CF9C4B
3B869A90F0585EB36611F983754C797F2BAAC0CBF7E52F7FF9CC33CFC472A51B
92C132BACC0FE9B244320D83A210BDD1361162C482970274D555570104FB9EF7
BC47D2423FD183305EDF9877C8740E9036CC2FD2A65499CC08731A0977E3EB66
13678A13E8EAFDF6DBEF81071E40EAE218495AB97AA3EAD1F08BA2F5B4883C95
0411485EFE31B1F798E6E34A7534F2B8E91D694FA5566F6FF7C848EAC61DD846
AC40AAD5F0C8A6C1C1DE4A755C7C5CBFEA2CF5942BF542B15CAFE53B8BDBB856
77CAE86BA395358383A556B370C8211FFAF6B76FF36D0D62525F52401EDF6F40
F678A5BFAF777878441B44D20BEE144B56831DA01A901E60E998A147CFCE80A5
C1415596CA69DFDACE71560D1197930057D2A2B532CC4E2B3D255F280A0A475D
86510A500C014C97A5F1B17912E0975E7A29EF930C92C504C3443FCBD4560544
884E8D679F7DF665975DE6A6CA22B5BCF5380082B7C2C5D01FC872692577DB6D
B7A79E7ACA56D20E809BCA26901CD229D23961CCE43B611173FF7CD64D1A79B3
B592C080DEB81BC5962E8B7F98CB8EE47A97F9B810BD5623C28253B6CADC116F
28E996686B2898D2A1B411A10A1F6505775106286264C3CAD8B1846B9817880B
4C17614F71FA9172861F89380A7FBAACD78D21C4CC6013C0822DCEECB246BE38
BEF0D493D400FE6ED80BC168F20D6491E22CB281F12DE190B06DB8CB9480ADDD
7776306CBAE232931ABB938582A8AC4D88097B764167B62DE732E4B096FDEC02
AF9D0BB2A269883401E199F2166B344D169C05693465F23BAC8BB20B305DC2F6
186F6C1DA007291F1233871F7EF83FFCC33F18BD19A4A0CB7CE3D68924AC3D34
1614D959B29204AC665EBE41EEDAB596098390775BC61B8D7ACC520B436A9C2E
2D9F4106327F6A3891A8265A3506DCCA2CBA3E174FD4B66101B82D7BB0598EA3
95F0585E8D3ED14DF42B1E6A13365F10BA8984DCFEFBEFCF42589101AE0F8393
0D750D721220BBBC4BE1A846475ADE4ECA77F7F69089689CD10589E72EA82442
D90F0B4F5813940ECB5C9E7CF0A200B502EA413787A44E3EF964207760E230C1
638F3DF6EB5FFF3A77E027D69C8B28023249CAA6AC07B355591C2B393CEDB4D3
BEF6B5AF1105B1F401CB0222F2195623BA19FBBE5A16A0C176C286689370C619
676830A23A6D682B8345823CF84958313FDD2B492139B51D96268FCE05E73543
07659CE311E28BB4559684D950E66CD1C43548AD701B80BE2569A0EF9B880506
A30D493B843339E8A083448DC71F7FFC35D75C8327D6BA0860E093B618660D18
F198B5D736CE9078EC3D4F27CAA245B673CAB78635695508B404B03401CB360E
232B2E886FB102610B23CE0ECFB5C474CBD06BA3F038C08AC793667445DE874D
B04DF9888292BD68522ABCE904960339832DE502DFA92504C2C4CCBEB45831B7
323C1FABD773997F55FA900C02C3200A0B0B004C4409C08565B464092C33F415
60B57570C42439230CD24C4C93D0A8B36DA1500B9C4CAC15294700AD58F2931E
BCFDF6DBBFF8E28B5482E834C243916C0683154A02180755309671840188A20A
7E2CDD628DC8708CEA59B2166FBDF5569990F02CA2704956858195876736242F
8B71593191C18161195816ACC4891E94E61795AC5D252FC3C7C7BF6C1C902C43
1A6783D0A23D66F3FC5AD73D351C71C411F7FDE847AFAD792D9F3E854CF01924
01A66B280938215A191C448813DB0B37C9F1E23203565A008E0838A935470B73
D7647BEAB4B3F2D43459B882C815A5F3200D5038264204B7D2C2210B172EC41C
06F18D7C644B54C7E1830E612279064900929D75FD846A5D5A68C6D6C320F420
73AA6A6020D7B3382EC51D030972F20B0B06A3BBADFB905606AF2E9DCDF5742B
FD0FABC92098B62C5B634028D122A7A38E3A4A0F92164691368BA34FE86F2A8A
D565E015EA435D4F3F4B97E51D9AE1C200503800D1E49CB7B989D0E98C718729
D1211F445F4196584C224C7BD557C830481D740DD6C1F891DE9F7FFEF9975F7E
B9655599956CF81FE6F631F54B9BA2036264136549EBB4FF8CB242BCD696BD4F
5C00C3D7F6B2BA7100F335664C7936A2B5259AA4BD6F93041442E14BB4E4FAC9
61557B997F386C4E875B18233E09403E780FCF318792CE23CE4FC43C2146838C
CE656DAE2D88A8EB111E22FE2BAFBCF2D4534F35ED244CD068AB3D84C142B1F4
9541C8111B3017B1F9668DC8D100347E99F83AD786CD1CB9008DC8E4BC66FEC7
7FFCC73FFEF18FEDC3F7BEF7BDBFFDED6F3FFDE94F8B019994B6EA35B30DCD44
02EC141B9C788B157C5E7FFDF5679F7DB648FFC9279FB48999DF404F3CE9A493
2EBDF452288C25A3D01CC1D8DCB2858EED99CB3C9B6F79CB5B9E7EFA696A6EC1
2B37F840CBC15FB66C19B2E7631FFB1873FCEA57BF7AE699671ABC01075E8FD0
9BA38F3E5A638615324DAF604A37ECF466FB41071FFCE8A38F3EFBFC73D05958
B2DB46D69B0DB174A1808CE7A8BCFBDDEFFEE94F7F8A3A6025215352BC59E5A1
EB8355B29435729F427F5798900E9BC66C1295E80E7AFF99CF7CE6BAEBAEB32A
18032E360421242E875F671E1F055E1DCB08449141DECCECBF36A5583B2E36B1
DD76DB893A4D11D64D4469B7DD761B490EDABEE79E7B4E3FDC61871D44BBA07F
CF707FF1DF430F3DF4873FFCA1EE8CB0D1763FF1C4135AD87DF7DDF79FFFF99F
398421266518C46BB3F1DB24014C9FDA08ACAB1017DE65262FF93376B24E39E5
941B6FBC916C6EDB8B36740ACB48210B45C3A36D16B9EA56D40A3F7559D981C9
09D3FE747F9C87080397155486F9CD2E30C451548DCCC867BDE9A69B2EBAE8A2
C30E3B4C5431A52470411E840E9A1690F8B3189F7E6E84644612F954930D62AB
C5758113230A7A8B1A84325D2167C85A9E521258E41F268887038B6D4AFAC16A
2703D55283D8325374E0189C11B194BDF6DAEB17BFF80501E1B00593E810896B
8C5B6716F10CFD2F5DBA54E3A1A4C6B0CD93ACC8D93CDB53F61570414359B879
92D59AC19F0D228100320A9FD5C06B6DB19B37274A512765597DE652A75010ED
9EEC668B20A1D059D08F61A13EB8AC0CEA7DEF7B9F581B8030BA0C6C58FD10EB
0922B6647F24AD91A935F0D3FFBA5ED74004E1961B1D50AB4D391FFC88C3898B
831478EBEB8BFA0F0523C9C3968438FAAD74D60C3D3297AD9260224DA8D851AD
55172E58B86EC3864AB5D29D8968F6AF8D4C8D285D96FC40741AAFB4E4E239E7
9C831F80B34186C374146F5E8528054CD7CA9029A415606B93ACA9007531FA13
7B4E1B74EEB9E75E72C925E692B69A356B53634864A818187068D0C8065DFFE1
0F7F589C025BCD0412BA8F652E4EC7A9D18074730D4FD79B73C965990F6800F4
09D05A7DFCE31FFFFAD7BF4EBCCB05AEC5E9743AB43F032B7699BB0CD730DE4E
2D05AD22496AD2E30CA21956D566D2859220C9C03C0C4200A5812DD39D350B92
A6A467D0F210D165B51A14A01A33324D5CBFC5DE820BA0CC5A2F1A710D517268
ACC0B2DBBC192E6868635C3BCA50F3D04989E502A181CFBD91F506B7323AFC72
F4B1B1D62EB8A1EC6E18AF885206F0CD6F7E53AA95CBF238CD21FCD6B7BE5592
D8866AE07A2161230388C6E32A60FA7BEEB9E7C1071F2CA2D57B04CC94E76206
EF90814C9873D8C0C3A7D424426C660B22A2882C5FBE9C59E3A5E0ACE9136ADD
3141F4C6F775181F7FD39BDEA459839FAA3F9185704E312291F7F1C71F2F7507
838C479800B0383CF43CB9AF002A978582409270594CD40C2F6DB134E377BEF3
9D77DC71C77EFBEDF7E0830F1A048576EAED6F7FFB19679C614EBFCD692161DC
328C0DC0E01009644C62BF4C96AB5608031158FB9710D24EABA0D15085087FD1
575A4ADD0D77709265CDC323B47FFA1550B471D0D4257472194D68D8DA06E88F
A3222EA60329531735ED231FF9C8FDF7DFAF67BDFFFDEFBFF7DE7B5D1A79D3AF
C4DA4E38E1040E037E402B17824FE98D317ABF61E5F240BFB758CBB56A2ECE35
5A4D50620C7DA1CD83C9688BE94BEFCDF9833587F9621A9C0483ACA2C9DE21B6
99EA4DF3985B6E125E6F2B3089B35E7AE862541851726CDBC1692145CAFAF050
7C672E4BF46582462018C3294E3FFDF46BAFBDD6A55D322CE0CCC123CB62BA93
163A43753D2177BB20AC20C5D76171239C03A63D4D777FBC8E68EE28D7A650BB
CCFCC7214E2E078623E787450B61C5DA2401DE271718796DF04A2ECB43B7C40C
CD823E0A4B962C11655A94C205E159EE6FB17473555903351D5A59B1B874C262
E6D0F7D816910AE910CA414F84C38AE48E3AEAA89B6FBE197037EB7CE9B24008
B6A9155DBB2DE304B6C5211281D9EE4C1C0FADCEBBC4D8C30F3F1C46985D16DE
982E2A431E8E7414236F54A5D0E67E9D92202CD1704122DC74F4631B4AD60D0B
AE9B68FB649B126CB0CCBA30834ED7CBF8FBF6B7BF8D2716572A7242DA4F5BC7
78046DDA86AB03629B5212209926F715B07E6A40214939FBD18F7EA4C5874260
352E45BC30FD49CA8AFEC460D51375E800799DD856689AB68B61BF1AD2EA397B
30C728AB88838FB4E923F4BB609FCC11069B138BD1F8F489466FEAA74B7D35FB
ECB3CF9FFCC99F88F1D9294539C2BCD0DD24879F7FFEF92F7EF18B5FFAD29710
7493B3E3A32CB51C23481CEA861B6E902AF1B39FFD8CD991BA60A2C2E27BCB96
2D9389100A76364CC2F3D1471FC5128CB3FE4436EC8928B4F369FE9B8636CD9B
BFC0DB13D58A45CC424A0D092EC932ED5CE667842B51AE42DA3E2A1890E86EAA
EC4CE6CE2C684CC8525B410301315C344853DC9D6C2EC71B6E4B4227A5401E1E
7CED5ACBB5D0575EC6A5F000B051BD39E49043EEB9E71EBC2228B99081862D6E
AE0FFFE66FFEE67BDFFB9E4577A73C69B892445444BAF4A76EFBC0030FE83E9A
B221D10313CD5A895B8942F4393A1D690533E0B490564197F666D65A87A80F60
CBA18FD1CE092639FA4DC86EDA24013905864C950B3AAF81A9A9A7845DB7F4D5
11471C71F7DD775B88CB5A58877DCF2D038A0C3D03E0E404E131D7C2DA1393AC
F5A00DCC6AC58DABDAC48DD84C2272C061131076D82C9E97E57AB67987C29537
E1A743A1AD31578334CDABAEBACA2E236CC30A873E7A44859B2A5460A3A27E4A
DFEAFEE8DA53C6CFA6F30E35B3B6B52EB5C3C2C4E82989074916E62671283454
824C24768721040BE9932B68969C4BDD09E4DDE9DCC948B2F211931C9889166B
99EC1D6A6DD935DDFC8D96C88E61277940620B01156E8B3A82FF96D458440877
63EF6C1D3C0FD52E4ADC3DF5D453CC9385D3EA8BDF599D3A8408878A32B80297
6970C69DDB909ED869B43917641A1050C2F380EB19EE6F88D056BCC371B28C28
6B9360D7186A20D7301E8B4692FFE332645A98BB9600E02743DF6DA64D7FC8FB
248D0F130FEDC6B6D380097D35D34B2F75143D3B7B65950F5D26590A13076632
A58688602C4E57FAD29A6BD6FAAD183474201D4A52D9F4A6362B98A0B4196DFA
4436E637BEF10D2B60094B07B88638BFB99571911D7DF4D1B7DF7E3B7BAD15B0
8C207B03CE2DCE1F6430D9F40CC362C550154FDC75D75D3DD0799A4A3103B668
E8D97401A41A4F4756857D3125A834605466582146F19437373FAFB520E55487
5834B05A3BF6BBECB2CBD34F3F6DE5931CB6E9E204D6C72D0CC3E88640DE4BA8
FFD99FFDD9F7BFFF7D5224EEBCF3CEE38E3B0E6763B265BA8EDDD6188A959284
04930B7A1487B46466CD94EA2D1CD0028116C3832FE8E794CDDF76DB6D21F622
93B2E89AA1A82659FD799216CA311273DC53A9608D2E346BED9776102FAB9E28
7A139342968415795180E36B2E533B3850B895C54A15B8EBAEBB4C3998AC694D
270976DE7967D1A4A1B39952F87B2581A802DF4E5B8A79486950FE8E3BEEB87C
F972CBCD25484BF4851C65ADC95FFEE55FFEEBBFFE6B92E5B382862B45FE1FFF
F11F0D7E71CA88B145AD9A5BF61520CD44FCFDF0C30FBFF5D65B0DBC56B3C37B
894263A25D5CE2BEFBEEC349852F57DB07596E8E18EBC1DA3CED163100CE4FD8
032F0C0587896BD0479421911198E200A3E09826AE496A5656B264FA0B0F323D
14D3860958F1083A97994BB68BFCAFCF3FF9C94F7EEB5BDFA2AA08E33D09E0DD
31110C77080322AC17334C50E2D58C415ACCFEFBEF7FE38D376A41885B1247D1
442EBAE8A2B3CF3E3B977815A395B4162C5CF4EACA57932C8560BA88B11DD15C
D680D4D8229CD1D2D2F512419C77DE7916316EF35CBB2CC06ED978C6DDD80517
5460DA61836B5B16636ECB36E8D6F5C932E1A0049721B6221D4DD136BF996985
612AB0A90B935FE6C4B428B7419F1A30B286A44302882C54075BB1423F37A377
C86D59F2C3E7323D7FFDEB5F8BCD49A858F61E8A8E4EE9CF7FFE73EC0C53E4A7
9304499634850719C2B063A2DF6A90325FF6D8630F494DC3873031E3B6C4B470
81F26408B5A89956F5C287D01E20D56184C065DA58E8CE6A533BC2F1BB402133
C52B6C3667DB84872ACAB2395DE06B62F0A6FA308BB3CE3AEB8A2BAEE02CBB54
65C1BCB3160E86D2413E61086B1107C0B4EC82399DD0678D8DA0A94CB6954302
0825C1B9E79EABD344F759AB018CB356E4935FA6DD1F78E081F7DE7B2F0CC1FC
AEE47184D11A97B94F5D60EFA2E8D80EB6B22E6696BC870F56C78D0825E771CA
2C52C25193FB0AE87FE21637DD7493D891A1526AB466315876A5FE3740401758
481603DF2C0C4C93B2E5A0CC9AB8539C755FB2A0B1E91766E9A00F92BAA063FC
ED6F7F1B1FBDC1CE40D304A8094D73961868188F9A7287C23A17B38E295A21EB
C37E0EC00BAA07A7EB3BDFF98E44221E0397C61EC82B95EA2DB92AFE08767933
EB10124D95943D99E384046D53D0E7CB962DDB7DF7DD7FF8C31F5A5CDA650973
9C2B3E34BF21EA550A9AE44CF365D1E002D234A5358B539348673942E49813CD
16499D76DA69A27B6E9ECFFA50B65E0756A50BC0F4BFF4A52F49D481A1661265
26CC4B97C4A9F15715BF4B5501EF82488FEBC0A0CF2E154D964A13690FDEE55A
6B94BABB2B6956866779D5CDED01421916266E3300F2B2AC343F3CCC61401E7E
71FDF5D77FF4A31FB5DA639CF89FFDEC673535A4BE79BD30CE344EC224A6CD84
3AAF9D1F58800136989F21348527AF731B4559AC4B1ACCCD37DF6CE5DC3CC8C4
A1019DB6FDD03EB78059087FE432C42DC97283BBC1F960092424D102516918AE
2EC8DF430E61107367626CD2A82EBEF862837DB69476F35458E6C557BEF21591
22868E853A43991AD627DBA9674F2542C4856501A053E3D3237FC1CC41835520
4F019662AD112CCE84E7A4CD7408D5A33061814498E9504F184078D2A3ACAE82
93AB6FB1CB2DA9019AC7E5687E3C5D23A5E497BFFCA5A9C5E61A32F07033CD0D
3AD36209966833B3266485AE98957CC59A7FE0031FF8D18F7EA4C98A06C2CE4E
9105BEF89958183611933104349304F6488BFC98DE6A1510886E780D1E67C667
AA93732E995E6B9E6186AC7EF8AAA42FB3245C801CC9DAE1D1D2D8B4435658B8
78F1E277BFFBDD0F3DF410A96F22741D0CAB1D7D3D9200A5187B9948A395046B
9A7A283A26EA33B536064FE432E96D6871BAD509279C20814FF194AEC15760D5
1F24C3B8ACBDA295CB5AFF3C3D82F418D3435DA0ADBC7E4960F91E06238CAB6D
BA7D71715A612773A1AFCFFBB8D29A863E6F7F8C80EA1E7610F427A7D6E8ECE9
91402BA44A43AB311191E359ACA7CB605CCD2B6DAA89F9FAC9AD9A4C21162FC1
A205F482BB99FA12A73D114911D6055A34DAFB916CFEF9CF7F5EE6B618DF76DB
6D474404394DB703B2AAD0B819F9CC35D2D34902DD5CB6C89D77DEA9F7867B11
1E8130F0DBC637DB2441DB7BAC4CAAD2CCBF6C6825F82E0E3DF4D09FFCE4277A
EEB6DB6E2BBD72C99225BA52EB60C0FAFA5F3A81F83E49105A2B8A7EC4C5B432
CF3EFB2CB995B063CE026409799B41603D50A349999D2E000733C30293C20A42
51EC50080CC03997356DC620E39461DACA923EFDF4D34D677253C587210010E0
2D03C73CCF33788DCC82B1ADC44DC71ADA95585A6D9D2D3850F8F476D965172D
A025D7A22293127AFEF9E75F7DF5D5F8792EBBECB2934E3AA9EDB9B656D36966
E4861E74D041FFFEEFFF7EC00107DC7EFBEDD2D19F7CF2499C1F483E4A5EF6DE
7BEFC71F7F9CE882BFBFA9F9C8C9FDF7DF5F9632064B9BA7350CBE859681C903
DE9371C4218C82BA06975985FA5C17D0B2B58DE74E595E1BBE4C77081D8B50AA
B5887341A20E0100B4722BCD40C124971C0C51ACF5B620E1CCC200876023EB5C
1A05B02DB82664B27DF9CB5FD6D32500C23C2833757959E5A41810C810C479B4
5640194B5AE80E9AC21D77DC71D4514711B124F615F69C226B9613A8A7608A4D
7EDC949220F4595174261ABAFBEEBB433A9E41128803EDF5CE778AB887366D9A
3D67CEB1C71E7BCD35D768FDC84615057574F82E72DA312F9E9389DE49B95495
6E785CC2188E6F7E644816598EFB02B39A434B2E3F7CC138A0D988B8B3659649
E7B2FA41F38798670C7A461E4B824A0C58F5BF9DBDD0203010371E2DD679F0C1
07EBFD75D75D4782F574A4329D24D0DD76DA69A7E79E7B0EEF28E29F686A2815
A6930461DE811D1974A328CB033CE6986324D276DC71479D766B88C49586D669
2E29944D485A5C4993020391DD31E35E5F69D6C0459893CA160AD2856B5B0C1C
B3156086D0C916EAE976071B24FC34CEF0B5B4831AF333CF3CC3D4306BD85F70
1BB9DE5896CB5245AC4B55123409D79FE295E283747932AE126DD977BA6D1F27
5FA3478878407805B443040F03D4E7AFBCF28AA189E0784715666510D8065B8B
7DAF37565E10A790763AFB38E1B1F2C9D89E814F86364158C3648D57AD409A5A
D4CD3681CB72F5B0C524AFB4DC966C60AE67D8442809428EECD222495B5612DB
91E758BEDCDC5CCFA8CCA17FC95CE4D3CD30F420B94042A217E01E41B762C0A8
0C2C3DC93F2ECBE7C364B606069624176D9986E1A6816933498084B7C13342DC
7F2E08EB9983488472C515577CFCE31FA784D820D25CE096653044C9F4A755AE
87ED32E20C23D7B20C4965B3601A5E38D4E19939949D43FC3F21160241177CBB
333493E9EEED19D5614BDB3497328C33AF48D66A7DA97AE2B2428189A86316A7
49703636A6586193041A1B455B61A14D92A672E27360D8A6A1DB657BEEB9E763
8F3D86AE475E998422A4680DCE5852CC32DDF0D39FFEB46C321C6B345ED6B760
FE80C681A981DD00403A1B1176F4DC2A49E0B2E44E3325CD533AD97FE2B6F4A5
98E40E9982F985C3FC3ADD590625FDD1E02C96B68B3BC8E2FC486E2C7B9C0100
ECA0BD61129116C5A9B183893D4AEA2455265A9370893889611981AD89CB127F
0D08811500B8DB8A284506C71D77DCCD37DF6CF33DF7DC7365B5582C138D5B3B
2845049002B386C3B0B965B820FEAD4785E508FC5E9F44B895BCC75E9F2CCC78
AF45D39A1BFBB6E41FF3E6137C25D8AEB9882D1027472921E72DEC7C80BBCFE0
5127BFD81D03F542EB3587B946ABC5B4B5DD4212184E4538BD5CD081CB60DAC2
B06DB8C449D047093A231601C76734C8220EAA2589C7197045DB3DA7DC09F399
429A2EF329B73288472B3CA1ECDB7A0FE0C2C30C3739A915D1F5D6F54267203C
69C6C7A75B6E08C848D9C66F19811C06B012A13CFD2FE2336C06BB15B6308CE9
A28B2EFAE217BFA8F75A798B3E19FC8E464B1534E104C3A581C1A1E859FF0A5D
637EB9192481CB74492BFE94427DCA29A78833BAA08E74DA7D7149B1A3E3D24B
2FA50389EEBBCDDCB96B5346D393B57082174FC8308DBCBB7B3CB514BDD65F6F
589BCC36491F0575186DC53EE889D61C8684167350B4D59C4BF7111F3498687D
250E72FAE9A71B0B08F3A4C56E241B2EBEF86297A551324D7D280A09FB595A5A
9DCB42085B2509809720C61812038A7928DE5C80EB6507818987DE8CB60DC279
7DE79D777EE8431F7219F0910B3AEBB6E1AE47299A77D851E3CD6F7EF3934F3E
892B06DB5A275AEB6029CB1C25D48E0B2EB8E0C61B6F94BED586AAD6D6259133
65069C9D2033B9C25C1D7DC81CF52CD95EA79D761AA769E79D77D6AD34363B1D
A273A494C10AB954FFB06413B342F0139AF267FA789C01B44D6BFB06C2C0E8D0
A2110C7EE1C2855A64F1D9C58B179F73CE39DFF9CE777EF5AB5F210F7478F544
094BD3F970FC5A313F1C4CCC417A3A6BAEF7D64C4616CCFDF7DF4FAE4A9B2E3F
E520F10A80D5614718C16F3583869BC90FFF7F1A8323CA70A77C930000000049
454E44AE426082}
Transparent = True
end
object v: TLabel
Left = 16
Top = 8
Width = 236
Height = 48
Caption = 'SpaceMission'
Font.Charset = ANSI_CHARSET
Font.Color = clLime
Font.Height = 48
Font.Name = 'Arial Unicode MS'
Font.Style = [fsBold]
ParentFont = False
end
object Label1: TLabel
Left = 88
Top = 54
Width = 130
Height = 26
Caption = 'Level-Editor'
Font.Charset = ANSI_CHARSET
Font.Color = clAqua
Font.Height = -22
Font.Name = 'Arial Rounded MT Bold'
Font.Style = []
ParentFont = False
end
end
/LevSplash.pas
4,12 → 4,13
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
jpeg, ExtCtrls, StdCtrls;
jpeg, ExtCtrls, StdCtrls, Vcl.Imaging.pngimage;
 
type
TSplashForm = class(TForm)
SplashImage: TImage;
procedure FormCreate(Sender: TObject);
v: TLabel;
Label1: TLabel;
end;
 
var
22,14 → 23,5
 
{$R *.DFM}
 
procedure TSplashForm.FormCreate(Sender: TObject);
var
FDirectory: string;
begin
if copy(extractfiledir(application.ExeName), length(extractfiledir(application.ExeName))-1, 2) = ':\' then FDirectory := ''
else FDirectory := extractfiledir(application.ExeName)+'\';
SplashImage.Picture.loadfromfile(FDirectory+'Bilder\LevSplash.jpg');
end;
 
end.
 
/SpaceMission.dproj
0,0 → 1,1088
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{32c160e6-f499-4896-b557-825a5c8617f1}</ProjectGuid>
<MainSource>SpaceMission.dpr</MainSource>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>SpaceMission.exe</DCC_DependencyCheckOutputName>
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>20.1</ProjectVersion>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
<ProjectName Condition="'$(ProjectName)'==''">SpaceMission</ProjectName>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<SanitizedProjectName>SpaceMission</SanitizedProjectName>
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Locale>1031</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0</VerInfo_Keys>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<DCC_OutputDRCFile>true</DCC_OutputDRCFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<Icon_MainIcon>SpaceMission_Icon.ico</Icon_MainIcon>
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
<VerInfo_MinorVer>0</VerInfo_MinorVer>
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
<AppDPIAwarenessMode>none</AppDPIAwarenessMode>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<Icon_MainIcon>SpaceMission_Icon.ico</Icon_MainIcon>
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<Version>7.0</Version>
<DCC_DebugInformation>0</DCC_DebugInformation>
<DCC_WriteableConstants>True</DCC_WriteableConstants>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_UnitSearchPath>VCL_DELPHIX_D6;VCL_MARKDOWN;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
<DCC_ResourcePath>VCL_DELPHIX_D6;VCL_PJVERSIONINFO;$(DCC_ResourcePath)</DCC_ResourcePath>
<DCC_ObjPath>VCL_DELPHIX_D6;VCL_PJVERSIONINFO;$(DCC_ObjPath)</DCC_ObjPath>
<DCC_IncludePath>VCL_DELPHIX_D6;VCL_PJVERSIONINFO;$(DCC_IncludePath)</DCC_IncludePath>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
<VerInfo_MinorVer>2</VerInfo_MinorVer>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_Keys>CompanyName=ViaThinkSoft;FileDescription=SpaceMission;FileVersion=1.2.2.0;InternalName=SpaceMission;LegalCopyright=(C) 2001-2024 Daniel Marschall, ViaThinkSoft;LegalTrademarks=;OriginalFilename=SpaceMission.exe;ProductName=SpaceMission;ProductVersion=1.2.2;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
<VerInfo_Release>2</VerInfo_Release>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<Version>7.0</Version>
<DCC_WriteableConstants>True</DCC_WriteableConstants>
<DCC_UnitSearchPath>VCL_DELPHIX_D6;VCL_MARKDOWN;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
<DCC_ResourcePath>VCL_DELPHIX_D6;VCL_PJVERSIONINFO;$(DCC_ResourcePath)</DCC_ResourcePath>
<DCC_ObjPath>VCL_DELPHIX_D6;VCL_PJVERSIONINFO;$(DCC_ObjPath)</DCC_ObjPath>
<DCC_IncludePath>VCL_DELPHIX_D6;VCL_PJVERSIONINFO;$(DCC_IncludePath)</DCC_IncludePath>
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
<Debugger_RunParams>&quot;C:\Users\dmarschall\AppData\Local\Temp\SpaceMissionTest.sav&quot;</Debugger_RunParams>
<VerInfo_MinorVer>0</VerInfo_MinorVer>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)</VerInfo_Keys>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>VCLApplication</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Parameters>
<Parameters Name="UseLauncher">False</Parameters>
<Parameters Name="LoadAllSymbols">True</Parameters>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters>
</Parameters>
<VersionInfo>
<VersionInfo Name="IncludeVerInfo">True</VersionInfo>
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfo Name="MinorVer">1</VersionInfo>
<VersionInfo Name="Release">0</VersionInfo>
<VersionInfo Name="Build">0</VersionInfo>
<VersionInfo Name="Debug">False</VersionInfo>
<VersionInfo Name="PreRelease">False</VersionInfo>
<VersionInfo Name="Special">False</VersionInfo>
<VersionInfo Name="Private">False</VersionInfo>
<VersionInfo Name="DLL">False</VersionInfo>
<VersionInfo Name="Locale">1031</VersionInfo>
<VersionInfo Name="CodePage">1252</VersionInfo>
</VersionInfo>
<VersionInfoKeys>
<VersionInfoKeys Name="CompanyName">ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="FileDescription">Ein spannendes Weltraumspiel...</VersionInfoKeys>
<VersionInfoKeys Name="FileVersion">1.1.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName">SpaceMission 1.1</VersionInfoKeys>
<VersionInfoKeys Name="LegalCopyright">© Copyright 2001 - 2006 ViaThinkSoft</VersionInfoKeys>
<VersionInfoKeys Name="LegalTrademarks">Keine</VersionInfoKeys>
<VersionInfoKeys Name="OriginalFilename">SpaceMission.exe</VersionInfoKeys>
<VersionInfoKeys Name="ProductName">SpaceMission 1.1</VersionInfoKeys>
<VersionInfoKeys Name="ProductVersion">1.1.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Homepage">www.viathinksoft.de</VersionInfoKeys>
<VersionInfoKeys Name="Projektleiter">Daniel Marschall - www.daniel-marschall.de</VersionInfoKeys>
</VersionInfoKeys>
<Source>
<Source Name="MainSource">SpaceMission.dpr</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k290.bpl">Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp290.bpl">Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server</Excluded_Packages>
</Excluded_Packages>
<Language>
<Language Name="ProjectLang">$00000407</Language>
<Language Name="ActiveLang">ENU</Language>
</Language>
<Resource_DLL_Projects>
<Resource_DLL_Projects Name="Item0">Englisch (Vereinigte Staaten)*$00000409*ENU*ENU</Resource_DLL_Projects>
</Resource_DLL_Projects>
<RDP_Source_Files>
<RDP_Source_Files Name="Item0">GamMain.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item1">GamSplash.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item2">GamSpeicherung.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item3">ComInfo.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item4">GamCheat.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item5">ComHilfe.dfm</RDP_Source_Files>
<RDP_Source_Files Name="Item6">SpaceMission.drc</RDP_Source_Files>
</RDP_Source_Files>
</Delphi.Personality>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
<Deployment Version="4">
<DeployFile LocalName="SpaceMission.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>SpaceMission.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClasses">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>classes</RemoteDir>
<Operation>64</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidFileProvider">
<Platform Name="Android">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiv7aFile">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDefV21">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStylesV21">
<Platform Name="Android">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStylesV31">
<Platform Name="Android">
<RemoteDir>res\values-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIcon">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v26</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v26</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIconBackground">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIconForeground">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIconMonochrome">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_AdaptiveIconV33">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v33</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v33</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Colors">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_ColorsDark">
<Platform Name="Android">
<RemoteDir>res\values-night-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values-night-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon192">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon24">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_NotificationIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xxxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_Strings">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedNotificationIcon">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v24</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v24</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedSplash">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedSplashDark">
<Platform Name="Android">
<RemoteDir>res\drawable-night-anydpi-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-night-anydpi-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedSplashV31">
<Platform Name="Android">
<RemoteDir>res\drawable-anydpi-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-anydpi-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_VectorizedSplashV31Dark">
<Platform Name="Android">
<RemoteDir>res\drawable-night-anydpi-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>res\drawable-night-anydpi-v31</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyModule">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="Android64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>0</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>0</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug"/>
<DeployClass Name="ProjectOSXEntitlements"/>
<DeployClass Name="ProjectOSXInfoPList"/>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Android64">
<RemoteDir>library\lib\arm64-v8a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSXARM64">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOutput_Android32">
<Platform Name="Android64">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64x">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements"/>
<DeployClass Name="ProjectiOSInfoPList"/>
<DeployClass Name="ProjectiOSLaunchScreen"/>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iOS_AppStore1024">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon152">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_AppIcon167">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_SpotLight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_AppIcon180">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark2x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_LaunchDark3x">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification40">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Notification60">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting58">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Setting87">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight120">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Spotlight80">
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimARM64">
<RemoteDir>..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSSimARM64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
</Deployment>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="GamMain.pas">
<Form>MainForm</Form>
</DCCReference>
<DCCReference Include="GamSplash.pas">
<Form>SplashForm</Form>
</DCCReference>
<DCCReference Include="GamSpeicherung.pas">
<Form>SpeicherungForm</Form>
</DCCReference>
<DCCReference Include="ComInfo.pas">
<Form>InfoForm</Form>
</DCCReference>
<DCCReference Include="GamCheat.pas">
<Form>CheatForm</Form>
</DCCReference>
<DCCReference Include="ComLevelReader.pas"/>
<DCCReference Include="Global.pas"/>
<DCCReference Include="ComHilfe.pas">
<Form>HilfeForm</Form>
<FormType>dfm</FormType>
</DCCReference>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>
/_InnoSetup/SpaceMission.iss
1,114 → 1,63
; SpaceMission Setup Script for InnoSetup 5.1.12
; SpaceMission Setup Script for InnoSetup
; by Daniel Marschall
 
; http://www.daniel-marschall.de/
 
; Shut-Down Game?!
 
[Setup]
AppName=SpaceMission
AppVerName=SpaceMission 1.1
AppVersion=1.1
AppCopyright=© Copyright 2001 - 2007 ViaThinkSoft.
AppVerName=SpaceMission 1.2.2
AppVersion=1.2.2
AppCopyright=© Copyright 2001 - 2024 ViaThinkSoft
AppPublisher=ViaThinkSoft
AppPublisherURL=http://www.viathinksoft.de/
AppSupportURL=http://www.daniel-marschall.de/
AppUpdatesURL=http://www.viathinksoft.de/
DefaultDirName={pf}\SpaceMission
AppPublisherURL=https://www.viathinksoft.de/
AppSupportURL=https://www.daniel-marschall.de/
AppUpdatesURL=https://www.viathinksoft.de/
DefaultDirName={autopf}\SpaceMission
DefaultGroupName=SpaceMission
VersionInfoCompany=ViaThinkSoft
VersionInfoCopyright=© Copyright 2001 - 2007 ViaThinkSoft.
VersionInfoCopyright=© Copyright 2001 - 2024 ViaThinkSoft
VersionInfoDescription=SpraceMission Setup
VersionInfoTextVersion=1.0.0.0
VersionInfoVersion=1.1
Compression=zip/9
VersionInfoVersion=1.2.2
PrivilegesRequiredOverridesAllowed=dialog
UsePreviousPrivileges=no
ShowLanguageDialog=no
OutputBaseFilename=SpaceMission_Setup
OutputDir=.
; Configure Sign Tool in InnoSetup at "Tools => Configure Sign Tools" (adjust the path to your SVN repository location)
; Name = sign_single
; Command = "C:\SVN\...\sign_single.bat" $f
SignTool=sign_single
SignedUninstaller=yes
 
[Languages]
Name: en; MessagesFile: "compiler:Default.isl"
Name: de; MessagesFile: "compiler:Languages\German.isl"
 
[LangOptions]
LanguageName=Deutsch
LanguageID=$0407
 
[Tasks]
Name: "desktopicon"; Description: "Erstelle eine Verknüpfung auf dem &Desktop"; GroupDescription: "Programmverknüpfungen:"; MinVersion: 4,4
Name: "levedit"; Description: "Installiere den &Leveleditor"; GroupDescription: "Zusatzprogramme:"; MinVersion: 4,4
Name: "compiler"; Description: "Installiere den Level&compiler"; GroupDescription: "Zusatzprogramme:"; MinVersion: 4,4
 
[Files]
Source: "..\SpaceMission.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\LevEdit.exe"; DestDir: "{app}"; Flags: ignoreversion; Tasks: levedit
Source: "..\Compiler.exe"; DestDir: "{app}"; Flags: ignoreversion; Tasks: compiler
Source: "..\Dokumentation.pdf"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\Bilder\Auswahl.bmp"; DestDir: "{app}\Bilder"; Flags: ignoreversion; Tasks: levedit
Source: "..\Bilder\Delphi.bmp"; DestDir: "{app}\Bilder"; Flags: ignoreversion
Source: "..\Bilder\LevSplash.jpg"; DestDir: "{app}\Bilder"; Flags: ignoreversion; Tasks: levedit
Source: "..\Bilder\SplSplash.jpg"; DestDir: "{app}\Bilder"; Flags: ignoreversion
Source: "..\SpaceMission.exe"; DestDir: "{app}"; Flags: ignoreversion signonce
Source: "..\LevEdit.exe"; DestDir: "{app}"; Flags: ignoreversion signonce
Source: "..\SpaceMission.enu"; DestDir: "{app}"; Flags: ignoreversion signonce
Source: "..\LevEdit.enu"; DestDir: "{app}"; Flags: ignoreversion signonce
Source: "..\Help\*.md"; DestDir: "{app}\Help"; Flags: ignoreversion
Source: "..\Help\*.css"; DestDir: "{app}\Help"; Flags: ignoreversion
Source: "..\DirectX\Graphics.dxg"; DestDir: "{app}\DirectX"; Flags: ignoreversion
Source: "..\DirectX\Music.dxm"; DestDir: "{app}\DirectX"; Flags: ignoreversion
Source: "..\DirectX\Sound.dxw"; DestDir: "{app}\DirectX"; Flags: ignoreversion
Source: "..\DirectX\Graphic.dxg"; DestDir: "{app}\DirectX"; Flags: ignoreversion
Source: "..\Einstellungen\SpaceMission.ini"; DestDir: "{app}\Einstellungen"; Flags: ignoreversion
Source: "..\Levels\Level 1.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 2.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 3.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 4.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 5.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 6.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 7.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 8.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 9.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 10.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 11.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 12.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 13.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 14.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 15.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 16.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 17.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 18.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 19.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 20.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 21.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 22.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 23.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 24.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 25.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 26.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 27.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 28.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 29.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 30.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Levels\Level 31.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
Source: "..\Musik\Boss.mid"; DestDir: "{app}\Musik"; Flags: ignoreversion
Source: "..\Musik\Game.mid"; DestDir: "{app}\Musik"; Flags: ignoreversion
Source: "..\Musik\Scene.mid"; DestDir: "{app}\Musik"; Flags: ignoreversion
Source: "..\Musik\Title.mid"; DestDir: "{app}\Musik"; Flags: ignoreversion
Source: "..\Texte\Mitwirkende.txt"; DestDir: "{app}\Texte"; Flags: ignoreversion
Source: "..\Levels\*.lev"; DestDir: "{app}\Levels"; Flags: ignoreversion
 
[Dirs]
Name: "{app}\Spielstände"
Name: "{app}\Levels"
Name: "{app}\Eingabe"; Tasks: compiler
Name: "{app}\Ausgabe"; Tasks: compiler
Name: "{app}\Temp"; Tasks: compiler
Name: "{app}\Temp\1"; Tasks: compiler
Name: "{app}\Temp\2"; Tasks: compiler
Name: "{group}\Webseiten"
Name: "{group}\Ordner"
;[Dirs]
;Name: "{group}\Webseiten"
 
[Icons]
Name: "{group}\Webseiten\Daniel Marschalls Webportal"; Filename: "http://www.daniel-marschall.de/"
Name: "{group}\Webseiten\ViaThinkSoft"; Filename: "http://www.viathinksoft.de/"
Name: "{group}\Webseiten\Projektseite auf ViaThinkSoft"; Filename: "http://www.viathinksoft.de/index.php?page=projektanzeige&seite=projekt-19"
;Name: "{group}\Webseiten\Daniel Marschall"; Filename: "https://www.daniel-marschall.de/"
;Name: "{group}\Webseiten\ViaThinkSoft"; Filename: "https://www.viathinksoft.de/"
;Name: "{group}\Webseiten\Projektseite auf ViaThinkSoft"; Filename: "https://www.viathinksoft.de/index.php?page=projektanzeige&seite=projekt-19"
Name: "{group}\SpaceMission"; Filename: "{app}\SpaceMission.exe"
Name: "{group}\Dokumentation"; Filename: "{app}\Dokumentation.pdf"
Name: "{group}\Leveleditor"; Filename: "{app}\LevEdit.exe"; Tasks: levedit
Name: "{group}\Levelcompiler"; Filename: "{app}\Compiler.exe"; Tasks: compiler
Name: "{group}\Ordner\Levelordner"; Filename: "{app}\Levels\"
Name: "{group}\Ordner\Spielstände"; Filename: "{app}\Spielstände\"
Name: "{group}\Ordner\Compiler Eingabeordner"; Filename: "{app}\Eingabe\"; Tasks: compiler
Name: "{group}\Ordner\Compiler Ausgabeordner"; Filename: "{app}\Ausgabe\"; Tasks: compiler
Name: "{userdesktop}\SpaceMission"; Filename: "{app}\SpaceMission.exe"; MinVersion: 4,4; Tasks: desktopicon
Name: "{group}\SpaceMission deinstallieren"; Filename: "{uninstallexe}"
Name: "{group}\SpaceMission Level Editor"; Filename: "{app}\LevEdit.exe"
Name: "{autodesktop}\SpaceMission"; Filename: "{app}\SpaceMission.exe"; MinVersion: 4,4; Tasks: desktopicon
Name: "{autodesktop}\SpaceMission Level Editor"; Filename: "{app}\LevEdit.exe"; MinVersion: 4,4; Tasks: desktopicon
 
[Run]
Filename: "{app}\SpaceMission.exe"; Description: "SpaceMission starten"; Flags: nowait postinstall skipifsilent
/_InnoSetup
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/GamMain.pas
0,0 → 1,2673
unit GamMain;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, DIB, DXClass, DXSprite, DXDraws, DXInput, DXSounds,
ShellAPI, DirectX{$IF CompilerVersion >= 23.0},
System.UITypes{$IFEND}, ComLevelReader, DirectMusic, Global;
 
type
TGameScene = (
gsNone,
gsTitle,
gsMain,
gsGameOver,
gsNewLevel,
gsWin
);
 
TGameInterval = (
giLeicht,
giMittel,
giSchwer,
giMaster
);
 
TBackground = class(TBackgroundSprite)
strict private
FSpeed: Double;
strict protected
procedure DoMove(MoveCount: Integer); override;
public
property Speed: Double read FSpeed write FSpeed;
end;
 
TBackgroundSpecial = class(TBackgroundSprite)
strict private
FSpeed: Double;
strict protected
procedure DoMove(MoveCount: Integer); override;
public
property Speed: Double read FSpeed write FSpeed;
end;
 
TExplosion = class(TImageSprite)
strict private
FCounter: Integer;
strict protected
procedure DoMove(MoveCount: Integer); override;
public
constructor Create(AParent: TSprite); override;
end;
 
TPlayerOrEnemyOrItemState = (
pesUnknown,
pesNormal,
pesExploding, // only boss, as preparation of pesDead
pesDead,
pesDeadVanished,
pesFlyaway, // only player at mission end
pesEntering,
pesHovering // only some kind of enemies
);
 
TPlayerOrEnemyOrItem = class abstract (TImageSprite)
strict protected
FState: TPlayerOrEnemyOrItemState;
public
property State: TPlayerOrEnemyOrItemState read FState;
end;
 
TPlayerSprite = class(TPlayerOrEnemyOrItem)
private
FTamaCount: Integer; // accessed by TPlayerTamaSprite.Destroy
strict private
FCounter: Integer;
FOldTamaTime: Integer;
strict protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override;
public
constructor Create(AParent: TSprite); override;
procedure FlyAway;
end;
 
TPlayerTamaSprite = class(TImageSprite)
strict private
FPlayerSprite: TPlayerSprite;
strict protected
property PlayerSprite: TPlayerSprite read FPlayerSprite write FPlayerSprite;
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override;
public
constructor Create(AParent: TSprite; APlayerSprite: TPlayerSprite); reintroduce;
destructor Destroy; override;
end;
 
TEnemyClass = class of TEnemy;
TEnemy = class abstract (TPlayerOrEnemyOrItem)
strict protected
FCounter: Integer;
FLife: integer;
procedure HitEnemy(ADead: Boolean); virtual;
public
property Life: integer read FLife;
procedure Hit(AHitStrength: integer = 1);
constructor Create(AParent: TSprite; ALifes: integer); reintroduce; virtual;
destructor Destroy; override;
end;
 
TEnemyTama = class(TImageSprite)
strict private
FEnemySprite: TSprite;
strict protected
property EnemySprite: TSprite read FEnemySprite write FEnemySprite;
procedure DoMove(MoveCount: Integer); override;
public
constructor Create(AParent: TSprite; AEnemySprite: TSprite); reintroduce;
end;
 
TEnemyMeteor = class(TEnemy)
strict protected
procedure DoMove(MoveCount: Integer); override;
procedure HitEnemy(ADead: Boolean); override;
public
constructor Create(AParent: TSprite; ALifes: integer); override;
end;
 
TEnemyUFO = class(TEnemy)
strict protected
procedure DoMove(MoveCount: Integer); override;
procedure HitEnemy(ADead: Boolean); override;
public
constructor Create(AParent: TSprite; ALifes: integer); override;
end;
 
TEnemyUFO2 = class(TEnemy)
strict private
FCounter: Integer;
FTamaCount: Integer;
FOldTamaTime: Integer;
strict protected
procedure DoMove(MoveCount: Integer); override;
procedure HitEnemy(ADead: Boolean); override;
public
constructor Create(AParent: TSprite; ALifes: integer); override;
end;
 
TEnemyAttacker = class(TEnemy)
strict protected
procedure DoMove(MoveCount: Integer); override;
procedure HitEnemy(ADead: Boolean); override;
public
constructor Create(AParent: TSprite; ALifes: integer); override;
end;
 
TEnemyAttacker2 = class(TEnemy)
strict private
FCounter: Integer;
FTamaF: Integer;
FTamaT: Integer;
FPutTama: Boolean;
strict protected
procedure DoMove(MoveCount: Integer); override;
procedure HitEnemy(ADead: Boolean); override;
public
constructor Create(AParent: TSprite; ALifes: integer); override;
end;
 
TEnemyAttacker3 = class(TEnemy)
strict private
FCounter: Integer;
FTamaCount: Integer;
FOldTamaTime: Integer;
strict protected
procedure DoMove(MoveCount: Integer); override;
procedure HitEnemy(ADead: Boolean); override;
public
constructor Create(AParent: TSprite; ALifes: integer); override;
end;
 
TEnemyBoss = class(TEnemy)
strict private
FCounter: Integer;
FTamaF: Integer;
FTamaT: Integer;
FPutTama: Boolean;
waiter1, waiter2: integer;
strict protected
procedure DoMove(MoveCount: Integer); override;
procedure HitEnemy(ADead: Boolean); override;
public
constructor Create(AParent: TSprite; ALifes: integer); override;
destructor Destroy; override;
end;
 
TItemClass = class of TItem;
TItem = class abstract (TPlayerOrEnemyOrItem)
strict protected
procedure DoMove(MoveCount: Integer); override;
public
procedure Collected; virtual;
end;
 
TItemMedikit = class(TItem)
public
procedure Collected; override;
constructor Create(AParent: TSprite); override;
end;
 
TMainForm = class(TDXForm)
MainMenu: TMainMenu;
Spiel: TMenuItem;
GameStart: TMenuItem;
GamePause: TMenuItem;
Beenden: TMenuItem;
Einstellungen: TMenuItem;
OptionMusic: TMenuItem;
Hilfe: TMenuItem;
OptionSound: TMenuItem;
Leer3: TMenuItem;
Spielstand: TMenuItem;
Leer5: TMenuItem;
Neustart: TMenuItem;
Spielgeschwindigkeit: TMenuItem;
Leicht: TMenuItem;
Mittel: TMenuItem;
Schwer: TMenuItem;
Informationen: TMenuItem;
Leer6: TMenuItem;
Leer1: TMenuItem;
Cheat: TMenuItem;
CheckUpdates: TMenuItem;
Master: TMenuItem;
Hilfe1: TMenuItem;
N1: TMenuItem;
Wasgibtesneues1: TMenuItem;
procedure DXDrawFinalize(Sender: TObject);
procedure DXDrawInitialize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
procedure DXTimerActivate(Sender: TObject);
procedure DXTimerDeactivate(Sender: TObject);
procedure DXDrawInitializing(Sender: TObject);
procedure GameStartClick(Sender: TObject);
procedure GamePauseClick(Sender: TObject);
procedure BeendenClick(Sender: TObject);
procedure OptionSoundClick(Sender: TObject);
procedure OptionMusicClick(Sender: TObject);
procedure SpielstandClick(Sender: TObject);
procedure NeustartClick(Sender: TObject);
procedure LeichtClick(Sender: TObject);
procedure MittelClick(Sender: TObject);
procedure SchwerClick(Sender: TObject);
procedure MasterClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure InformationenClick(Sender: TObject);
procedure CheatClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure CheckUpdatesClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure HilfeTopicClick(Sender: TObject);
private
ProgrammGestartet: boolean;
FSpeed: integer;
FScene: TGameScene;
FMusic: TSpaceMissionMusicTrack;
FBlink: DWORD;
FBlinkTime: DWORD;
FFrame, FAngle, FCounter, FEnemyAdventPos: Integer;
PlayerSprite: TPlayerSprite;
TimerCS: TRTLCriticalSection;
procedure StartScene(Scene: TGameScene);
procedure EndScene;
procedure BlinkStart;
procedure BlinkUpdate;
procedure StartSceneTitle;
procedure SceneTitle;
procedure EndSceneTitle;
procedure StartSceneMain;
procedure SceneMain;
procedure EndSceneMain;
procedure StartSceneGameOver;
procedure SceneGameOver;
procedure EndSceneGameOver;
procedure StartSceneWin;
procedure SceneWin;
procedure EndSceneWin;
procedure StartSceneNewLevel;
procedure SceneNewLevel;
procedure EndSceneNewLevel;
procedure LevelNeuStarten;
private
{ Diverse temporäre Variablen }
Crash2: integer;
EnemyCounter: integer;
Crash: boolean;
crashsound: boolean;
public
FNextScene: TGameScene;
FScore: Integer;
FBoss: TEnemyBoss;
FNotSave: boolean;
FLife: integer;
FLevel: integer;
FGameMode: TGameMode;
FLifeAtLevelStart: integer;
FScoreAtLevelStart: integer;
FLevelDataAlreadyLoaded: boolean;
FRestEnemies: integer;
FCheats: TCheatSet;
{ VCL-Ersatz }
dxdraw: TDxDraw;
imagelist: TDxImageList;
spriteengine: tdxspriteengine;
dxsound: tdxsound;
dxmusic: tdxmusic;
wavelist: tdxwavelist;
dxinput: tdxinput;
dxtimer: tdxtimer;
{ Level-Routinen }
LevelData: TLevelData;
procedure NewLevel(lev: integer);
procedure ResetLevelData;
{ Musik-Routinen }
procedure MusicSwitchTrack(Name: TSpaceMissionMusicTrack);
procedure PlayMusic(Name: TSpaceMissionMusicTrack);
procedure StopMusic(Name: TSpaceMissionMusicTrack);
procedure ResumeMusic(Name: TSpaceMissionMusicTrack);
procedure PauseMusic(Name: TSpaceMissionMusicTrack);
{ Sound-Routinen }
procedure PlaySound(Sound: TSpaceMissionSound; Wait: Boolean);
{ Grafik-Routinen }
function GetSpriteGraphic(Sprite: TSpaceMissionGraphicSprite): TPictureCollectionItem;
{ Initialisiations-Routinen }
procedure DXInit;
procedure SoundInit;
procedure MusicInit;
{ Einstellungs-Routinen }
procedure LoadOptions;
procedure WriteOptions;
{ Farb-Routinen }
function ComposeColor(Dest, Src: TRGBQuad; Percent: Integer): TRGBQuad;
procedure PalleteAnim(Col: TRGBQuad; Time: Integer);
end;
 
var
MainForm: TMainForm;
 
implementation
 
uses
GamSplash, GamSpeicherung, ComInfo, GamCheat, MMSystem, Registry,
ComHilfe;
 
{$R *.DFM}
 
const
DXInputButton = [isButton1, isButton2, isButton3,
isButton4, isButton5, isButton6, isButton7, isButton8, isButton9, isButton10, isButton11,
isButton12, isButton13, isButton14, isButton15, isButton16, isButton17, isButton18,
isButton19, isButton20, isButton21, isButton22, isButton23, isButton24, isButton25,
isButton26, isButton27, isButton28, isButton29, isButton30, isButton31, isButton32];
 
resourcestring
SWeiterMitLeertaste = 'Weiter mit Leertaste';
 
{ TBackground }
 
procedure TBackground.DoMove(MoveCount: Integer);
var
ran: integer;
bgs: TBackgroundSpecial;
begin
inherited DoMove(MoveCount);
X := X - MoveCount*(60/1000)*FSpeed;
ran := Random(1500);
if ran = 150 then
begin
bgs := TBackgroundSpecial.Create(mainform.SpriteEngine.Engine);
bgs.SetMapSize(1, 1);
bgs.Image := MainForm.GetSpriteGraphic(smgBackgroundPlanet1);
bgs.Width := Image.Width;
bgs.Height := Image.Height;
bgs.Y := random(mainform.dxdraw.height);
bgs.X := mainform.dxdraw.width;
ran := Random(2);
if ran = 0 then
begin
bgs.Z := -20;
bgs.Speed := 1.8;
end
else if ran = 1 then
begin
bgs.Z := -40;
bgs.Speed := 0.8;
end
else if ran = 2 then
begin
bgs.Z := -60;
bgs.Speed := 0.3;
end;
end
else if ran = 500 then
begin
bgs := TBackgroundSpecial.Create(mainform.SpriteEngine.Engine);
bgs.SetMapSize(1, 1);
ran := Random(4);
if ran = 0 then
bgs.Image := MainForm.GetSpriteGraphic(smgBackgroundRed)
else if ran = 1 then
bgs.Image := MainForm.GetSpriteGraphic(smgBackgroundBlue)
else if ran = 2 then
bgs.Image := MainForm.GetSpriteGraphic(smgBackgroundYellow)
else if ran = 3 then
bgs.Image := MainForm.GetSpriteGraphic(smgHintergrundRot);
bgs.Width := Image.Width;
bgs.Height := Image.Height;
 
bgs.Y := random(mainform.dxdraw.height);
bgs.X := mainform.dxdraw.width;
 
{ ran := Random(2);
if ran = 0 then
begin
bgs.Z := -20;
bgs.Speed := 1.8;
end
else if ran = 1 then
begin
bgs.Z := -40;
bgs.Speed := 0.8;
end
else if ran = 2 then
begin }
bgs.Z := -60;
bgs.Speed := 0.3;
{ end; }
end;
end;
 
{ TBackgroundSpecial }
 
procedure TBackgroundSpecial.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
X := X - MoveCount*(60/1000)*FSpeed;
if X < -Width then Dead;
end;
 
{ TExplosion }
 
constructor TExplosion.Create(AParent: TSprite);
begin
inherited Create(AParent);
mainform.PlaySound(smsExplosion, false);
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
AnimPos := Random(AnimCount);
end;
 
procedure TExplosion.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
inc(FCounter, MoveCount);
if FCounter > 2999 then dead;
end;
 
{ TPlayerSprite }
 
constructor TPlayerSprite.Create(AParent: TSprite);
begin
inherited Create(AParent);
FState := pesEntering;
Image := MainForm.GetSpriteGraphic(smgMachine);
Width := Image.Width;
Height := Image.Height;
X := -70{20};
Y := mainform.dxdraw.surfaceHeight / 2 - (height / 2);
Z := 2;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
end;
 
procedure TPlayerSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if (Sprite is TItem) then
begin
TItem(Sprite).Collected;
end
else if ((Sprite is TEnemy) or (Sprite is TEnemyTama)) and not (ctInfiniteLives in mainform.FCheats) then
begin
if not mainform.crash then
begin
dec(MainForm.FLife);
mainform.Crash := true;
if MainForm.Flife=0 then
begin
MainForm.PlaySound(smsExplosion, false);
Collisioned := false;
FCounter := 0;
FState := pesDead;
Done := false;
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := False;
AnimSpeed := DEFAULT_ANIMSPEED;
AnimPos := 0;
end;
end
else
begin
if not mainform.crashsound then
begin
MainForm.PlaySound(smsHit, False);
mainform.crashsound := true;
end;
end;
end;
end;
 
procedure TPlayerSprite.DoMove(MoveCount: Integer);
const
WegduesKonstante = 1.75;
begin
inherited DoMove(MoveCount);
if State = pesNormal then
begin
if isUp in MainForm.DXInput.States then Y := Y - (250/1000)*MoveCount;
if isDown in MainForm.DXInput.States then Y := Y + (250/1000)*MoveCount;
if isLeft in MainForm.DXInput.States then X := X - (250/1000)*MoveCount;
if isRight in MainForm.DXInput.States then X := X + (250/1000)*MoveCount;
if X<0 then X := 0;
if X>mainform.dxdraw.surfacewidth-Width then X := mainform.dxdraw.surfacewidth-Width;
if Y<0 then Y := 0;
if Y>mainform.dxdraw.surfaceheight-Height then Y := mainform.dxdraw.surfaceheight-Height;
if isButton1 in MainForm.DXInput.States then
begin
if (FTamaCount<8) and (FCounter-FOldTamaTime>=100) then
begin
Inc(FTamaCount);
with TPlayerTamaSprite.Create(Engine, Self) do
begin
X := Self.X+Self.Width;
Y := Self.Y+Self.Height div 2-Height div 2;
Z := 10;
end;
FOldTamaTime := FCounter;
end;
end;
Collision;
end
else if State = pesDead then
begin
if FCounter>200 then
begin
FCounter := 0;
FState := pesDeadVanished;
Visible := false; // Cannot use "Dead;" because we need to still be able to handle pesDeadVanished
end;
end
else if State = pesDeadVanished then
begin
if FCounter>2000 then
begin
MainForm.LevelNeuStarten;
(*
MainForm.FNextScene := gsGameOver;
MainForm.PlaySound(smsSceneMov, false);
MainForm.PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
*)
end;
end
else if State = pesFlyaway then
begin
X := X + MoveCount*(300/1000) * (X/MainForm.DXDraw.Width + WegduesKonstante);
if X > MainForm.DXDraw.Width+Width then
begin
Dead;
inc(mainform.FLevel);
MainForm.FLevelDataAlreadyLoaded := false; // allow NewLevel() to work again
MainForm.FNextScene := gsNewLevel;
MainForm.PlaySound(smsSceneMov, false);
MainForm.PalleteAnim(RGBQuad(0, 0, 0), 300);
end;
end
else if State = pesEntering then
begin
X := X + MoveCount*(300/1000);
if X > 19 then FState := pesNormal;
end;
inc(FCounter, MoveCount);
end;
 
procedure TPlayerSprite.FlyAway;
begin
FState := pesFlyaway;
end;
 
{ TPlayerTamaSprite }
 
constructor TPlayerTamaSprite.Create(AParent: TSprite; APlayerSprite: TPlayerSprite);
begin
inherited Create(AParent);
FPlayerSprite := APlayerSprite;
Image := MainForm.GetSpriteGraphic(smgBounce);
Z := 2;
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
MainForm.PlaySound(smsShoot, False);
end;
 
destructor TPlayerTamaSprite.Destroy;
begin
inherited Destroy;
Dec(FPlayerSprite.FTamaCount);
end;
 
procedure TPlayerTamaSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if (Sprite is TEnemy) and not (Sprite is TEnemyTama) then
begin
TEnemy(Sprite).Hit;
Dead;
end;
Done := False;
end;
 
procedure TPlayerTamaSprite.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
X := X+(800/1000)*MoveCount;
if X>=mainform.dxdraw.surfacewidth then Dead;
Collision;
end;
 
{ TEnemy }
 
constructor TEnemy.Create(AParent: TSprite; ALifes: integer);
begin
inherited Create(AParent);
FLife := ALifes;
inc(mainform.EnemyCounter);
end;
 
destructor TEnemy.Destroy;
begin
inherited Destroy;
dec(mainform.EnemyCounter);
end;
 
procedure TEnemy.Hit(AHitStrength: integer = 1);
begin
Dec(FLife, AHitStrength);
if FLife<=0 then
begin
Collisioned := False;
HitEnemy(True);
end
else
HitEnemy(False);
end;
 
procedure TEnemy.HitEnemy(ADead: Boolean);
begin
if ADead then
MainForm.PlaySound(smsExplosion, False)
else
MainForm.PlaySound(smsHit, False);
end;
 
{ TEnemyTama }
 
constructor TEnemyTama.Create(AParent: TSprite; AEnemySprite: TSprite);
begin
inherited Create(AParent);
FEnemySprite := AEnemySprite;
Image := MainForm.GetSpriteGraphic(smgBounce2);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
MainForm.PlaySound(smsShoot, False);
end;
 
procedure TEnemyTama.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
X := X - MoveCount*(600/1000);
if X < -Width then Dead;
end;
 
{ TEnemyMeteor }
 
constructor TEnemyMeteor.Create(AParent: TSprite; ALifes: integer);
begin
inherited Create(AParent, ALifes);
FState := pesNormal;
Image := MainForm.GetSpriteGraphic(smgEnemyMeteor);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
PixelCheck := True;
end;
 
procedure TEnemyMeteor.HitEnemy(ADead: Boolean);
begin
inherited HitEnemy(False);
 
if ADead then Collisioned := True;
end;
 
procedure TEnemyMeteor.DoMove(MoveCount: Integer);
begin
X := X - MoveCount*(250/1000);
if X < -Width then Dead;
end;
 
{ TEnemyUFO }
 
constructor TEnemyUFO.Create(AParent: TSprite; ALifes: integer);
begin
inherited Create(AParent, ALifes);
FState := pesNormal;
Image := MainForm.GetSpriteGraphic(smgEnemyDisk);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
end;
 
procedure TEnemyUFO.HitEnemy(ADead: Boolean);
begin
inherited HitEnemy(ADead);
 
if ADead then
begin
FState := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 1000);
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := False;
AnimSpeed := DEFAULT_ANIMSPEED;
AnimPos := 0;
end
else
begin
Inc(MainForm.FScore, 100);
end;
end;
 
procedure TEnemyUFO.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if State = pesNormal then
begin
X := X - MoveCount*(300/1000);
Y := Y + Cos256(FCounter div 15)*2;
if X < -Width then Dead;
end
else if State = pesDead then
begin
X := X - MoveCount*(300/1000);
if FCounter>200 then
begin
FState := pesDeadVanished;
Dead;
end;
end;
inc(FCounter, MoveCount);
end;
 
{ TEnemyUFO2 }
 
constructor TEnemyUFO2.Create(AParent: TSprite; ALifes: integer);
begin
inherited Create(AParent, ALifes);
FState := pesNormal;
Image := MainForm.GetSpriteGraphic(smgEnemyDisk2);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
end;
 
procedure TEnemyUFO2.HitEnemy(ADead: Boolean);
begin
inherited HitEnemy(ADead);
 
if ADead then
begin
FState := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 1000);
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := False;
AnimSpeed := DEFAULT_ANIMSPEED;
AnimPos := 0;
end
else
begin
Inc(MainForm.FScore, 100);
end;
end;
 
procedure TEnemyUFO2.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if State = pesNormal then
begin
X := X - MoveCount*(300/1000);
Y := Y + Cos256(FCounter div 15)*2;
if X < -Width then Dead;
if FCounter-FOldTamaTime>=100 then
begin
Inc(FTamaCount);
with TEnemyTama.Create(Engine, Self) do
begin
X := Self.X;
Y := Self.Y+Self.Height div 2-Height div 2;
Z := 10;
end;
FOldTamaTime := FCounter;
end;
end
else if State = pesDead then
begin
X := X - MoveCount*(300/1000);
if FCounter>200 then
begin
FState := pesDeadVanished;
Dead;
end;
end;
inc(FCounter, MoveCount);
end;
 
{ TEnemyAttacker }
 
constructor TEnemyAttacker.Create(AParent: TSprite; ALifes: integer);
begin
inherited Create(AParent, ALifes);
FState := pesNormal;
Image := MainForm.GetSpriteGraphic(smgEnemyAttacker);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
PixelCheck := True;
end;
 
procedure TEnemyAttacker.HitEnemy(ADead: Boolean);
begin
inherited HitEnemy(ADead);
 
if ADead then
begin
FState := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 1000);
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := False;
AnimSpeed := DEFAULT_ANIMSPEED;
AnimPos := 0;
end
else
begin
Inc(MainForm.FScore, 100);
end;
end;
 
procedure TEnemyAttacker.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if State = pesNormal then
begin
X := X - MoveCount*(300/1000)-FCounter div 128;
if X < -Width then Dead;
end
else if State = pesDead then
begin
X := X - MoveCount*(300/1000);
if FCounter>200 then
begin
FState := pesDeadVanished;
Dead;
end;
end;
inc(FCounter, MoveCount);
end;
 
{ TEnemyAttacker2 }
 
constructor TEnemyAttacker2.Create(AParent: TSprite; ALifes: integer);
begin
inherited Create(AParent, ALifes);
FState := pesEntering;
Image := MainForm.GetSpriteGraphic(smgEnemyAttacker2);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
PixelCheck := True;
end;
 
procedure TEnemyAttacker2.HitEnemy(ADead: Boolean);
begin
inherited HitEnemy(ADead);
 
if ADead then
begin
FState := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 5000);
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := False;
AnimSpeed := DEFAULT_ANIMSPEED;
AnimPos := 0;
end
else
begin
Inc(MainForm.FScore, 100);
end;
end;
 
procedure TEnemyAttacker2.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if State = pesEntering then
begin
if X>((mainform.dxdraw.width/4) + (mainform.dxdraw.width/2) - (width/2)){450} then
X := X - MoveCount*(300/1000)
else
begin
Collisioned := True;
FState := pesHovering;
FPutTama := True;
end;
Y := Y + Cos256(FCounter div 15)*5;
end
else if State = pesHovering then
begin
Y := Y + Cos256(FCounter div 15)*5;
if FPutTama then
begin
if FTamaT>100 then
begin
with TEnemyTama.Create(Engine, Self) do
begin
Z := 1;
X := Self.X-Width;
Y := Self.Y+Self.Height div 2-Height div 2;
end;
Inc(FTamaF);
if FTamaF>Random(30) then FPutTama := False;
FTamaT := 0;
end;
FTamaT := FTamaT + MoveCount;
end
else
begin
FTamaT := FTamaT + MoveCount;
if FTamaT>2000+Random(500) then
begin
FPutTama := True;
FTamaF := 0;
FTamaT := 0;
end;
end;
end
else if State = pesDead then
begin
if FCounter>200 then
begin
FState := pesDeadVanished;
Dead;
end;
end;
inc(FCounter, MoveCount);
end;
 
{ TEnemyAttacker3 }
 
constructor TEnemyAttacker3.Create(AParent: TSprite; ALifes: integer);
begin
inherited Create(AParent, ALifes);
FState := pesNormal;
Image := MainForm.GetSpriteGraphic(smgEnemyAttacker3);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
PixelCheck := True;
end;
 
procedure TEnemyAttacker3.HitEnemy(ADead: Boolean);
begin
inherited HitEnemy(ADead);
 
if ADead then
begin
FState := pesDead;
FCounter := 0;
Inc(MainForm.FScore, 5000);
Image := MainForm.GetSpriteGraphic(smgExplosion);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := False;
AnimSpeed := DEFAULT_ANIMSPEED;
AnimPos := 0;
end
else
begin
Inc(MainForm.FScore, 100);
end;
end;
 
procedure TEnemyAttacker3.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if State = pesNormal then
begin
X := X - (250/1000)*MoveCount;
if X < -Width then Dead;
if FCounter-FOldTamaTime>=100 then
begin
Inc(FTamaCount);
with TEnemyTama.Create(Engine, Self) do
begin
X := Self.X;
Y := Self.Y+Self.Height div 2-Height div 2;
Z := 10;
end;
FOldTamaTime := FCounter;
end;
end
else if State = pesDead then
begin
if FCounter>200 then
begin
FState := pesDeadVanished;
Dead;
end;
end;
inc(FCounter, MoveCount);
end;
 
{ TEnemyBoss }
 
constructor TEnemyBoss.Create(AParent: TSprite; ALifes: integer);
begin
inherited Create(AParent, ALifes);
FState := pesEntering;
Image := MainForm.GetSpriteGraphic(smgEnemyBoss);
Width := Image.Width;
Height := Image.Height;
MainForm.MusicSwitchTrack(smmBoss);
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
PixelCheck := True;
Collisioned := False;
MainForm.FBoss := Self;
waiter1 := 0;
waiter2 := 0;
end;
 
procedure TEnemyBoss.HitEnemy(ADead: Boolean);
begin
inherited HitEnemy(ADead);
 
if ADead then
begin
FState := pesExploding; // not pesDead for the boss!
FCounter := 0;
Inc(MainForm.FScore, 100000);
end
else
begin
Inc(MainForm.FScore, 100);
end;
end;
 
destructor TEnemyBoss.Destroy;
begin
MainForm.FBoss := nil;
inherited;
end;
 
procedure TEnemyBoss.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
if State = pesEntering then
begin
if X>((mainform.dxdraw.width/4) + (mainform.dxdraw.width/2) - (width/4)){450} then
X := X - MoveCount*(300/1000)
else
begin
Collisioned := True;
FState := pesHovering;
FPutTama := True;
end;
Y := Y + Cos256(FCounter div 15)*5;
end
else if State = pesHovering then
begin
Y := Y + Cos256(FCounter div 15)*5;
if FPutTama then
begin
if FTamaT>100 then
begin
with TEnemyTama.Create(Engine, Self) do
begin
Z := 1;
X := Self.X-Width;
Y := Self.Y+Self.Height div 2-Height div 2;
end;
Inc(FTamaF);
if FTamaF>Random(30) then FPutTama := False;
FTamaT := 0;
end;
FTamaT := FTamaT + MoveCount;
end
else
begin
FTamaT := FTamaT + MoveCount;
if FTamaT>2000+Random(500) then
begin
FPutTama := True;
FTamaF := 0;
FTamaT := 0;
end;
end;
end
else if State = pesExploding then
begin
inc(waiter1);
if waiter1 = 3 then
begin
waiter1 := 0;
inc(waiter2);
if waiter2 <= 20 then
begin
with TExplosion.Create(Engine) do
begin
Z := 10;
X := Self.X+Random(Self.Width)-16;
Y := Self.Y+Random(Self.Height)-16;
end;
end
else
begin
Inc(MainForm.FScore, 10000);
FState := pesDead;
end;
end;
end
else if State = pesDead then
begin
if FCounter>4000 then
begin
FState := pesDeadVanished;
Dead;
end;
end;
inc(FCounter, MoveCount);
end;
 
{ TItem }
 
procedure TItem.Collected;
begin
MainForm.PlaySound(smsItemCollected, false);
Dead;
end;
 
procedure TItem.DoMove(MoveCount: Integer);
begin
X := X - MoveCount*(250/1000);
if X < -Width then Dead;
end;
 
{ TItemMedikit }
 
procedure TItemMedikit.Collected;
begin
Inc(MainForm.FLife);
inherited;
end;
 
constructor TItemMedikit.Create(AParent: TSprite);
begin
inherited Create(AParent);
FState := pesNormal;
Image := MainForm.GetSpriteGraphic(smgItemMedikit);
Width := Image.Width;
Height := Image.Height;
AnimCount := Image.PatternCount;
AnimLooped := True;
AnimSpeed := DEFAULT_ANIMSPEED;
PixelCheck := True;
end;
 
{ TMainForm }
 
procedure TMainForm.FormCreate(Sender: TObject);
resourcestring
SAppTitle = 'SpaceMission %s';
begin
Randomize;
 
LevelData := TLevelData.Create;
 
{ Beginne VCL-Ersatz }
dxtimer := tdxtimer.Create(self);
dxtimer.Interval := 33;
dxtimer.OnActivate := DXTimerActivate;
dxtimer.OnDeactivate := DXTimerDeactivate;
dxtimer.OnTimer := DXTimerTimer;
dxtimer.ActiveOnly := false;
dxtimer.Enabled := false;
 
dxdraw := tdxdraw.Create(self);
dxdraw.Parent := self;
dxdraw.Align := alClient;
dxdraw.Left := 0;
dxdraw.Top := 0;
dxdraw.Width := ClientWidth;
dxdraw.Height := ClientHeight;
dxdraw.AutoInitialize := False;
dxdraw.AutoSize := False;
dxdraw.Color := clBlack;
(*
dxdraw.Display.BitCount := 24;
dxdraw.Display.FixedBitCount := False;
dxdraw.Display.FixedRatio := False;
dxdraw.Display.FixedSize := False;
dxdraw.Display.Height := 600;
dxdraw.Display.Width := 800;
*)
dxdraw.Options := [doAllowReboot, doWaitVBlank, doAllowPalette256, doCenter, {doRetainedMode,} doHardware, doSelectDriver];
dxdraw.TabOrder := 0;
dxdraw.Visible := true;
dxdraw.OnFinalize := DXDrawFinalize;
dxdraw.OnInitialize := DXDrawInitialize;
dxdraw.OnInitializing := DXDrawInitializing;
 
dxsound := tdxsound.Create(self);
dxsound.AutoInitialize := false;
 
dxmusic := TDXMusic.Create(self);
dxmusic.DXSound := dxsound;
 
dxinput := tdxinput.Create(self);
dxinput.Joystick.ForceFeedback := true;
dxinput.Keyboard.ForceFeedback := true;
 
wavelist := tdxwavelist.Create(self);
wavelist.DXSound := dxsound;
 
imagelist := tdximagelist.create(self);
imagelist.DXDraw := dxdraw;
 
spriteengine := tdxspriteengine.create(self);
spriteengine.DXDraw := dxdraw;
 
InitializeCriticalSection(TimerCS);
 
{ Ende VCL-Ersatz }
 
Application.Title := Format(SAppTitle, [ProgramVersion]);
LoadOptions;
DXInit;
SoundInit;
MusicInit;
 
GameStartClick(GameStart);
end;
 
procedure TMainForm.GameStartClick(Sender: TObject);
begin
StartScene(gsTitle);
end;
 
function TMainForm.GetSpriteGraphic(
Sprite: TSpaceMissionGraphicSprite): TPictureCollectionItem;
begin
if (Sprite<>smgNone) and (imagelist.Items.Count >= Ord(Sprite)) then
result := imagelist.Items.Items[Ord(Sprite)-1]
else
result := nil;
end;
 
procedure TMainForm.HilfeTopicClick(Sender: TObject);
// Please keep this code in-sync with LevMain.pas
var
bakTimerEnabled: boolean;
begin
bakTimerEnabled := dxtimer.Enabled;
try
dxtimer.Enabled := false;
HilfeForm.Caption := TMenuItem(Sender).Caption;
HilfeForm.Caption := StringReplace(HilfeForm.Caption, '&&', #1, [rfReplaceAll]);
HilfeForm.Caption := StringReplace(HilfeForm.Caption, '&', '', [rfReplaceAll]);
HilfeForm.Caption := StringReplace(HilfeForm.Caption, #1, '&', [rfReplaceAll]);
HilfeForm.ShowMarkDownHelp(OwnDirectory+TMenuItem(Sender).Hint);
HilfeForm.ShowModal;
finally
dxtimer.Enabled := bakTimerEnabled;
end;
end;
 
procedure TMainForm.GamePauseClick(Sender: TObject);
begin
GamePause.Checked := not GamePause.Checked;
DXTimer.Enabled := not GamePause.Checked;
if GamePause.Checked then
begin
if Assigned(DXTimer.OnDeactivate) then
DXTimer.OnDeactivate(DXTimer);
end
else
begin
if Assigned(DXTimer.OnActivate) then
DXTimer.OnActivate(DXTimer);
end;
end;
 
procedure TMainForm.DXInit;
begin
try
Imagelist.Items.LoadFromFile(OwnDirectory+DxgFile);
ImageList.Items.MakeColorTable;
DXDraw.ColorTable := ImageList.Items.ColorTable;
DXDraw.DefColorTable := ImageList.Items.ColorTable;
DXDraw.UpdatePalette;
DXDraw.Finalize;
DXDraw.Options := DXDraw.Options - [doFullScreen];
DXDraw.autosize := true;
DXDraw.Initialize;
except
//Imagelist.Items.clear;
//application.terminate;
end;
end;
 
procedure TMainForm.CheckUpdatesClick(Sender: TObject);
begin
CheckForUpdates('spacemission', ProgramVersion); // do not localize
end;
 
procedure TMainForm.BeendenClick(Sender: TObject);
begin
close;
end;
 
procedure TMainForm.OptionSoundClick(Sender: TObject);
begin
OptionSound.Checked := not OptionSound.Checked;
SoundInit;
WriteOptions;
end;
 
procedure TMainForm.SoundInit;
begin
if (WaveOutGetNumDevs < 1) or not FileExists(OwnDirectory+DxwFile) then
begin
OptionSound.Checked := false;
OptionSound.Enabled := False;
exit;
end;
 
if OptionSound.Checked then
begin
if not DXSound.Initialized then
begin
try
DXSound.Initialize;
WaveList.Items.LoadFromFile(OwnDirectory+DxwFile);
except
OptionSound.enabled := False;
WaveList.items.clear;
end;
end;
end
else DXSound.Finalize;
end;
 
procedure TMainForm.MusicInit;
var
i: integer;
begin
if (WaveOutGetNumDevs < 1) or not FileExists(OwnDirectory+DxmFile) then
begin
optionmusic.Checked := false;
optionmusic.Enabled := False;
exit;
end;
 
try
dxmusic.Midis.LoadFromFile(OwnDirectory+DxmFile);
for i := 0 to dxmusic.Midis.Count-1 do
begin
if not dxmusic.Midis.Items[i].IsInitialized then
begin
dxmusic.Midis.Items[i].Init; // TODO: for some reason, AddPort is very slow!
dxmusic.Midis.Items[i].Load;
end;
end;
except
optionmusic.enabled := false;
end;
end;
 
procedure TMainForm.DXDrawInitializing(Sender: TObject);
begin
if doFullScreen in DXDraw.Options then
begin
BorderStyle := bsNone;
DXDraw.Cursor := crNone;
end
else
begin
BorderStyle := bsSingle;
DXDraw.Cursor := crDefault;
end;
end;
 
procedure TMainForm.DXDrawInitialize(Sender: TObject);
begin
if Assigned(DXTimer) then DXTimer.Enabled := True;
end;
 
procedure TMainForm.DXDrawFinalize(Sender: TObject);
begin
if Assigned(DXTimer) then DXTimer.Enabled := False;
end;
 
procedure TMainForm.DXTimerActivate(Sender: TObject);
begin
if TDxTimer(Sender).Tag > 0 then
TDxTimer(Sender).Tag := TDxTimer(Sender).Tag - 1; // es können mehrere activate/deactivate vorkommen, wegen dem Pause-Button
if TDxTimer(Sender).Tag > 0 then
exit;
Caption := Application.Title;
if not ProgrammGestartet then
begin
Programmgestartet := true;
exit;
end;
ResumeMusic(FMusic);
end;
 
procedure TMainForm.DXTimerDeactivate(Sender: TObject);
resourcestring
SPauseTitle = '%s [Pause]';
begin
TDxTimer(Sender).Tag := TDxTimer(Sender).Tag + 1;
Caption := Format(SPauseTitle, [Application.Title]);
PauseMusic(FMusic);
end;
 
procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
EnterCriticalSection(TimerCS);
try
if crash then
begin
inc(Crash2);
if crash2 = 30 then
begin
Crash2 := 0;
crash := false;
crashsound := false;
end;
end;
if not DXDraw.CanDraw then exit;
DXInput.Update;
case FScene of
gsTitle : SceneTitle;
gsMain : SceneMain;
gsGameOver: SceneGameOver;
gsWin : SceneWin;
gsNewLevel: SceneNewLevel;
end;
if FNextScene<>gsNone then
begin
StartScene(FNextScene);
FNextScene := gsNone;
end;
DXDraw.Flip;
finally
LeaveCriticalSection(TimerCS);
end;
end;
 
procedure TMainForm.BlinkStart;
begin
FBlink := 0;
FBlinkTime := GetTickCount;
end;
 
procedure TMainForm.WriteOptions;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(RegistrySettingsKey, true) then
begin
Reg.WriteBool(MusicSettingKey, OptionMusic.checked);
Reg.WriteBool(SoundSettingKey, OptionSound.checked);
Reg.WriteInteger(SpeedSettingKey, Ord(FSpeed));
Reg.DeleteValue('Speed'); // deprecated. Replaced by GameSpeed
Reg.CloseKey;
end;
finally
FreeAndNil(Reg);
end;
end;
 
procedure TMainForm.LoadOptions;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(RegistrySettingsKey, true) then
begin
if Reg.ValueExists(MusicSettingKey) then
optionmusic.checked := Reg.ReadBool(MusicSettingKey)
else
optionmusic.checked := true; // default
 
if Reg.ValueExists(SoundSettingKey) then
optionsound.checked := Reg.ReadBool(SoundSettingKey)
else
optionsound.checked := true; // default
 
if Reg.ValueExists(SpeedSettingKey) then
FSpeed := Reg.ReadInteger(SpeedSettingKey)
else
FSpeed := SpeedMedium; // default
 
Leicht.Checked := FSpeed = SpeedEasy;
Mittel.Checked := FSpeed = SpeedMedium;
Schwer.Checked := FSpeed = SpeedHard;
Master.Checked := FSpeed = SpeedMaster;
 
Reg.CloseKey;
end;
finally
FreeAndNil(Reg);
end;
WriteOptions;
end;
 
procedure TMainForm.BlinkUpdate;
begin
if GetTickCount<>FBlinkTime then
begin
FBlink := FBlink + (GetTickCount-FBlinkTime);
FBlinkTime := GetTickCount;
end;
end;
 
procedure TMainForm.PlaySound(Sound: TSpaceMissionSound; Wait: Boolean);
begin
if (Sound<>smsNone) and (OptionSound.Checked) and (OptionSound.Enabled) and (WaveList.Items.Count >= Ord(Sound)) then
WaveList.Items.Items[Ord(Sound)-1].Play(Wait);
end;
 
procedure TMainForm.MusicSwitchTrack(Name: TSpaceMissionMusicTrack);
begin
if (not mainform.active) and (mainform.visible) then //1st Programmstart
exit;
if (OptionMusic.checked) and (OptionMusic.enabled) then
begin
StopMusic(FMusic);
PlayMusic(Name);
end;
FMusic := Name;
end;
 
function TMainForm.ComposeColor(Dest, Src: TRGBQuad; Percent: Integer): TRGBQuad;
begin
with Result do
begin
rgbRed := Src.rgbRed+((Dest.rgbRed-Src.rgbRed)*Percent div 256);
rgbGreen := Src.rgbGreen+((Dest.rgbGreen-Src.rgbGreen)*Percent div 256);
rgbBlue := Src.rgbBlue+((Dest.rgbBlue-Src.rgbBlue)*Percent div 256);
rgbReserved := 0;
end;
end;
 
procedure TMainForm.PalleteAnim(Col: TRGBQuad; Time: Integer);
var
i: Integer;
t, t2: DWORD;
ChangePalette: Boolean;
c: Integer;
begin
if DXDraw.Initialized then
begin
c := DXDraw.Surface.ColorMatch(RGB(Col.rgbRed, Col.rgbGreen, Col.rgbBlue));
ChangePalette := False;
if DXDraw.CanPaletteAnimation then
begin
t := GetTickCount;
while Abs(GetTickCount-t)<Time do
begin
t2 := Trunc(Abs(GetTickCount-t)/Time*255);
for i := 0 to 255 do
DXDraw.ColorTable[i] := ComposeColor(Col, DXDraw.DefColorTable[i], t2);
DXDraw.UpdatePalette;
ChangePalette := True;
end;
end
else
begin
Sleep(Time);
end;
for i := 0 to 4 do
begin
DXDraw.Surface.Fill(c);
DXDraw.Flip;
end;
if ChangePalette then
begin
DXDraw.ColorTable := DXDraw.DefColorTable;
DXDraw.UpdatePalette;
end;
DXDraw.Surface.Fill(c);
DXDraw.Flip;
end;
end;
 
procedure TMainForm.StartScene(Scene: TGameScene);
begin
EndScene;
DXInput.States := DXInput.States - DXInputButton;
FScene := Scene;
BlinkStart;
case FScene of
gsTitle : StartSceneTitle;
gsMain : StartSceneMain;
gsGameOver: StartSceneGameOver;
gsWin : StartSceneWin;
gsNewLevel: StartSceneNewLevel;
end;
end;
 
procedure TMainForm.StartSceneTitle;
begin
sleep(500);
FCheats := [];
FLife := StartLives;
FLevel := 0;
FScore := 0;
FLevelDataAlreadyLoaded := false; // do allow NewLevel() to work again
FNotSave := true;
Cheat.enabled := false;
Neustart.enabled := false;
GamePause.enabled := false;
GameStart.enabled := false;
Spielgeschwindigkeit.enabled := false;
mainform.Visible := true;
MusicSwitchTrack(smmTitle);
end;
 
procedure TMainForm.StartSceneMain;
{var
i, j: Integer;}
begin
sleep(500);
FCounter := 0;
if not FLevelDataAlreadyLoaded then NewLevel(FLevel);
FRestEnemies := Length(LevelData.EnemyAdventTable);
FLifeAtLevelStart := FLife; // Das ist wichtig, wenn man neu starten möchte
FScoreAtLevelStart := FScore; //
MusicSwitchTrack(smmGame);
FEnemyAdventPos := 0;
FFrame := -4;
PlayerSprite := TPlayerSprite.Create(SpriteEngine.Engine);
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := MainForm.GetSpriteGraphic(smgStar3);
Z := -13;
Y := 40;
Speed := 1 / 2;
Tile := True;
end;
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := MainForm.GetSpriteGraphic(smgStar2);
Z := -12;
Y := 30;
Speed := 1;
Tile := True;
end;
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := MainForm.GetSpriteGraphic(smgStar1);
Z := -11;
Y := 10;
Speed := 2;
Tile := True;
end;
{with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(200, 10);
Y := 10;
Z := -13;
Speed := 1 / 2;
Tile := True;
for i := 0 to MapHeight-1 do
begin
for j := 0 to MapWidth-1 do
begin
Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 8);
if Random(100)<95 then Chips[j, i] := -1;
end;
end;
end;
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(200, 10);
Y := 30;
Z := -12;
Speed := 1;
Tile := True;
for i := 0 to MapHeight-1 do
begin
for j := 0 to MapWidth-1 do
begin
Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 4);
if Random(100)<95 then Chips[j, i] := -1;
end;
end;
end;
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(200, 10);
Y := 40;
Z := -11;
Speed := 2;
Tile := True;
for i := 0 to MapHeight-1 do
begin
for j := 0 to MapWidth-1 do
begin
Chips[j, i] := Image.PatternCount-Random(Image.PatternCount div 2);
if Random(100)<95 then Chips[j, i] := -1;
end;
end;
end;}
FNotSave := false;
Cheat.enabled := true;
Neustart.enabled := true;
GamePause.enabled := true;
GameStart.enabled := true;
Spielgeschwindigkeit.enabled := true;
end;
 
procedure TMainForm.StartSceneGameOver;
begin
sleep(500);
FNotSave := true; // Wenn man speichert, würde man LevelAdventTable vom vorherigen Level machen, das wär müll!
Cheat.enabled := false;
Spielgeschwindigkeit.enabled := false;
Neustart.enabled := false;
GamePause.enabled := false;
MusicSwitchTrack(smmScene);
end;
 
procedure TMainForm.StartSceneWin;
begin
sleep(500);
FNotSave := true; // Wenn man speichert, würde man LevelAdventTable vom vorherigen Level machen, das wär müll!
Cheat.enabled := false;
Spielgeschwindigkeit.enabled := false;
Neustart.enabled := false;
GamePause.enabled := false;
MusicSwitchTrack(smmScene);
end;
 
procedure TMainForm.EndScene;
begin
case FScene of
gsTitle : EndSceneTitle;
gsMain : EndSceneMain;
gsGameOver: EndSceneGameOver;
gsWin : EndSceneWin;
gsNewLevel: EndSceneNewLevel;
end;
end;
 
procedure TMainForm.EndSceneTitle;
begin
{ Ende Title }
end;
 
procedure TMainForm.EndSceneMain;
begin
SpriteEngine.Engine.Clear;
end;
 
procedure TMainForm.EndSceneGameOver;
begin
{ Ende GameOver }
end;
 
procedure TMainForm.EndSceneWin;
begin
{ Ende Win }
end;
 
procedure TMainForm.ResetLevelData;
begin
LevelData.Clear;
FRestEnemies := 0;
end;
 
procedure TMainForm.NewLevel(lev: integer);
resourcestring
SLevelInvalid = 'Die Datei für Level %d ist ungültig. Level wird übersprungen!';
var
act: integer;
Enemies: array[1..32] of TEnemyType;
numEnemies: integer;
e: TEnemyAdvent;
bossPosition: integer;
levFile: TLevelFile;
begin
ResetLevelData;
if FGameMode = gmRandom then
begin
{$REGION 'Random game'}
Enemies[1] := etEnemyAttacker; // ab Lev 1
Enemies[2] := etEnemyMeteor; // ab Lev 1
Enemies[3] := etEnemyUFO; // ab Lev 1
Enemies[4] := etEnemyAttacker; // ab Lev 2
Enemies[5] := etEnemyMeteor; // ab Lev 3
Enemies[6] := etEnemyUFO; // ab Lev 4
Enemies[7] := etEnemyAttacker; // ab Lev 5
Enemies[8] := etEnemyMeteor; // ab Lev 6
Enemies[9] := etEnemyUFO; // ab Lev 7
Enemies[10] := etEnemyAttacker; // ab Lev 8
Enemies[11] := etEnemyMeteor; // ab Lev 9
Enemies[12] := etEnemyUFO; // ab Lev 10
Enemies[13] := etEnemyAttacker; // ab Lev 11
Enemies[14] := etEnemyMeteor; // ab Lev 12
Enemies[15] := etEnemyUFO; // ab Lev 13
Enemies[16] := etEnemyAttacker3; // ab Lev 14
Enemies[17] := etEnemyAttacker; // ab Lev 15
Enemies[18] := etEnemyMeteor; // ab Lev 16
Enemies[19] := etEnemyUFO; // ab Lev 17
Enemies[20] := etEnemyUFO2; // ab Lev 18
Enemies[21] := etEnemyAttacker; // ab Lev 19
Enemies[22] := etEnemyMeteor; // ab Lev 20
Enemies[23] := etEnemyUFO; // ab Lev 21
Enemies[24] := etEnemyAttacker2; // ab Lev 22
Enemies[25] := etEnemyMeteor; // ab Lev 23
Enemies[26] := etEnemyUFO; // ab Lev 24
Enemies[27] := etEnemyAttacker; // ab Lev 25
Enemies[28] := etEnemyAttacker; // ab Lev 26
Enemies[29] := etEnemyAttacker2; // ab Lev 27
Enemies[30] := etEnemyAttacker3; // ab Lev 28
Enemies[31] := etEnemyUFO; // ab Lev 29
Enemies[32] := etEnemyUFO2; // ab Lev 30
numEnemies := lev*RandomLevelAdditionalEnemiesPerLevel;
SetLength(LevelData.EnemyAdventTable, numEnemies);
for act := 0 to numEnemies-1 do
begin
e.enemyType := Enemies[min(random(lev+2)+1, High(Enemies))];
if e.enemyType = etEnemyAttacker2 then
begin
//e.enemyType := Enemies[min(random(lev+2)+1, High(Enemies))];
if Random(2) = 0 then e.enemyType := etEnemyAttacker3;
end;
e.x := 85-(lev+(random(lev))*2){O_o};
if e.x < 1 then e.x := 1; // passiert bei großen Levels
e.x := act*30 + random(e.x);
e.y := random((LevEditRows-1)*LevEditRasterH);
if e.enemyType = etEnemyAttacker2 then
begin
e.lifes := random(6)+1{O_o};
end
else
begin
if lev > RandomLevelMaxEnemyLives then
begin
e.lifes := random(RandomLevelMaxEnemyLives)+1;
end
else
begin
e.lifes := random(lev)+1;
end;
end;
 
if (act-1) mod RandomLevelMedikitEveryX = 0 then
begin
e.enemyType := etItemMedikit;
e.lifes := 0;
end;
 
LevelData.EnemyAdventTable[act] := e;
end;
 
if lev < 5 then
begin
// Level 1-4: No boss
bossPosition := -1;
end
else if lev < 10 then
begin
// Level 5-9: Boss is at the end of the level
bossPosition := numEnemies-1;
end
else
begin
// Starting with Level 10: Boss at 75% of the level
bossPosition := round(0.75 * numEnemies);
end;
 
if LevelData.EnemyAdventTable[bossPosition].enemyType = etItemMedikit then
Inc(bossPosition);
 
if bossPosition >= 0 then
begin
e.enemyType := etEnemyBoss;
//e.x := lev*75*30{O_o} div lev;
e.x := LevelData.EnemyAdventTable[bossPosition-1].x;
e.y := (dxdraw.surfaceheight div 2) - (MainForm.GetSpriteGraphic(smgEnemyBoss).height div 2);
e.lifes := lev*5;
LevelData.EnemyAdventTable[bossPosition] := e;
end;
 
{$ENDREGION}
end
else
begin
{$REGION 'Normal game'}
levFile := GetLevelFileName(lev,false);
if levFile.found then
begin
try
LevelData.RasterErzwingen := false;
LevelData.LoadFromFile(levFile.fileLocation);
except
showmessage(Format(SLevelInvalid, [lev]));
ResetLevelData; // empty level = the player will continue with the next level
end;
end;
{$ENDREGION}
end;
FLevelDataAlreadyLoaded := true; // nicht nochmal NewLevel() aufrufen. Erst wieder wenn man gewonnen hat.
end;
 
var
TitleWasPressed: TDxInputState = isButton32;
 
procedure TMainForm.SceneTitle;
resourcestring
SNormalGame = 'Normales Spiel';
SRandomGame = 'Zufalls-Level';
SLevelEditor = 'Level-Editor';
var
Logo: TPictureCollectionItem;
colo1, colo2: TColor;
begin
DXDraw.Surface.Fill(0);
Logo := GetSpriteGraphic(smgLogo);
{Logo.DrawWaveX(DXDraw.Surface, (dxdraw.surfaceWidth div 2) - 181, 65, Logo.Width, Logo.Height, 0,
Trunc(16 - Cos256(FBlink div 60) * 16), 32, -FBlink div 5);}
Logo.DrawWaveX(DXDraw.Surface, trunc((dxdraw.surfaceWidth / 2) - (Logo.Width / 2)), 65, Logo.Width, Logo.Height, 0,
2, 80, Fangle * 4);
inc(Fangle);
 
if FGameMode = gmUnknown then FGameMode := gmLevels;
 
if (isUp in MainForm.DXInput.States) then TitleWasPressed := isUp;
if (TitleWasPressed=isUp) and not (isUp in MainForm.DXInput.States) then
begin
TitleWasPressed := isButton32;
if (Ord(FGameMode) <> 1) then
FGameMode := TGameMode(Ord(FGameMode)-1);
end;
 
if (isDown in MainForm.DXInput.States) then TitleWasPressed := isDown;
if (TitleWasPressed=isDown) and not (isDown in MainForm.DXInput.States) then
begin
TitleWasPressed := isButton32;
if (FGameMode <> High(TGameMode)) then
FGameMode := TGameMode(Ord(FGameMode)+1);
end;
 
DXDraw.Surface.Canvas.Brush.Style := bsClear;
DXDraw.Surface.Canvas.Font.Size := 30;
 
{$REGION 'Menu point: Normal Level'}
if FGameMode = gmLevels then
begin
colo1 := clMaroon;
colo2 := clRed;
end
else
begin
colo1 := clOlive;
colo2 := clYellow;
end;
DXDraw.Surface.Canvas.Font.Color := colo1;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-152, (dxdraw.surfaceheight div 2)-52, SNormalGame);
if FGameMode = gmLevels then
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-185, (dxdraw.surfaceheight div 2)-52, '>');
DXDraw.Surface.Canvas.Font.Color := colo2;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-150, (dxdraw.surfaceheight div 2)-50, SNormalGame);
if FGameMode = gmLevels then
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-185, (dxdraw.surfaceheight div 2)-50, '>');
{$ENDREGION}
 
{$REGION 'Menu point: Random Level'}
if FGameMode = gmRandom then
begin
colo1 := clMaroon;
colo2 := clRed;
end
else
begin
colo1 := clOlive;
colo2 := clYellow;
end;
DXDraw.Surface.Canvas.Font.Color := colo1;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-152, (dxdraw.surfaceheight div 2)-2, SRandomGame);
if FGameMode = gmRandom then
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-187, (dxdraw.surfaceheight div 2)-2, '>');
DXDraw.Surface.Canvas.Font.Color := colo2;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-150, (dxdraw.surfaceheight div 2), SRandomGame);
if FGameMode = gmRandom then
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-185, (dxdraw.surfaceheight div 2), '>');
{$ENDREGION}
 
{$REGION 'Menu point: Level Editor'}
if FGameMode = gmEditor then
begin
colo1 := clMaroon;
colo2 := clRed;
end
else
begin
colo1 := clOlive;
colo2 := clYellow;
end;
DXDraw.Surface.Canvas.Font.Color := colo1;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-152, (dxdraw.surfaceheight div 2)+48, SLevelEditor);
if FGameMode = gmEditor then
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-185, (dxdraw.surfaceheight div 2)+48, '>');
DXDraw.Surface.Canvas.Font.Color := colo2;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-150, (dxdraw.surfaceheight div 2)+50, SLevelEditor);
if FGameMode = gmEditor then
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-185, (dxdraw.surfaceheight div 2)+50, '>');
{$ENDREGION}
 
{ if (FBlink div 300) mod 2=0 then
begin
DXDraw.Surface.Canvas.Font.Color := clGreen;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-187, dxdraw.surfaceheight-117, SWeiterMitLeertaste);
DXDraw.Surface.Canvas.Font.Color := clLime;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-185, dxdraw.surfaceheight-115, SWeiterMitLeertaste);
end; }
BlinkUpdate;
DXDraw.Surface.Canvas.Release;
 
// Weiter mit Leertaste oder Enter
if (isButton1 in DXInput.States) or (isButton2 in DXInput.States) then
begin
FLevel := 1;
if FGameMode = gmEditor then
begin
ShellExecute(0, 'open', PChar(OwnDirectory+LevEditExe), '', PChar(OwnDirectory), SW_NORMAL); // do not localize
Close;
exit;
end;
if ((FGameMode=gmLevels) and not GetLevelFileName(FLevel,false).found) or
((FGameMode=gmRandom) and (FLevel > MaxPossibleLevels)) then
begin
//PlaySound('Frage', False);
exit;
end;
PlaySound(smsSceneMov, False);
PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
StartScene(gsMain);
end;
end;
 
procedure TMainForm.SceneMain;
resourcestring
SMissionSuccessful = 'Mission erfolgreich!';
SMissionFailed = 'Mission gescheitert!';
SPunkte = 'Punkte: %s';
SLevel = 'Level: %d';
SLifes = 'Leben: %d';
SInfLifes = '';
SBossLifes = 'Boss: %d';
SEinheiten = 'Einheiten: %d';
var
Enemy: TSprite;
spriteClass: TClass;
tmpEnemyAnzeige: integer;
begin
SpriteEngine.Move(FSpeed);
SpriteEngine.Dead;
while (FEnemyAdventPos >= Low(LevelData.EnemyAdventTable)) and
(FEnemyAdventPos <= High(LevelData.EnemyAdventTable)) and
((LevelData.EnemyAdventTable[FEnemyAdventPos].x / 4) <= FFrame) and
(FRestEnemies > 0) do
begin
Dec(FRestEnemies);
with LevelData.EnemyAdventTable[FEnemyAdventPos] do
begin
spriteClass := nil;
case enemyType of
//etUnknown: ;
etEnemyAttacker: spriteClass := TEnemyAttacker;
etEnemyAttacker2: spriteClass := TEnemyAttacker2;
etEnemyAttacker3: spriteClass := TEnemyAttacker3;
etEnemyMeteor: spriteClass := TEnemyMeteor;
etEnemyUFO: spriteClass := TEnemyUFO;
etEnemyUFO2: spriteClass := TEnemyUFO2;
etEnemyBoss: spriteClass := TEnemyBoss;
etItemMedikit: spriteClass := TItemMedikit;
end;
if spriteClass <> nil then
begin
Enemy := nil;
if spriteClass.InheritsFrom(TEnemy) then
Enemy := TEnemyClass(spriteClass).Create(SpriteEngine.Engine, lifes)
else if spriteClass.InheritsFrom(TItem) then
Enemy := TItemClass(spriteClass).Create(SpriteEngine.Engine)
else
Assert(False);
Enemy.x := dxdraw.surfacewidth;
//Enemy.y := y;
if y <> 0 then
Enemy.y := dxdraw.surfaceheight / ((LevEditRows*LevEditRasterH) / y)
else
Enemy.y := 0;
end;
end;
Inc(FEnemyAdventPos);
end;
Inc(FFrame);
DXDraw.Surface.Fill(0);
if FNextScene=gsNone then
begin
SpriteEngine.Draw;
DXDraw.Surface.Canvas.Brush.Style := bsClear;
DXDraw.Surface.Canvas.Font.Size := 20;
if flife > 0 then
begin
{$REGION 'Anzeige Punkte'}
DXDraw.Surface.Canvas.Font.Color := clOlive;
DXDraw.Surface.Canvas.Textout(9, 9, Format(SPunkte, [FloatToStrF(FScore,ffNumber,14,0)]));
DXDraw.Surface.Canvas.Font.Color := clYellow;
DXDraw.Surface.Canvas.Textout(10, 10, Format(SPunkte, [FloatToStrF(FScore,ffNumber,14,0)]));
{$ENDREGION}
 
{$REGION 'Anzeige Level'}
DXDraw.Surface.Canvas.Font.Color := clMaroon;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-141, 9, Format(SLevel, [flevel]));
DXDraw.Surface.Canvas.Font.Color := clRed;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-140, 10, Format(SLevel, [flevel]));
{$ENDREGION}
 
{$REGION 'Lebensanzeige'}
if FLife<0 then FLife := 0;
if ctInfiniteLives in FCheats then
begin
DXDraw.Surface.Canvas.Font.Color := clPurple;
DXDraw.Surface.Canvas.Textout(9, dxdraw.surfaceheight-41, SInfLifes);
DXDraw.Surface.Canvas.Font.Color := clFuchsia;
DXDraw.Surface.Canvas.Textout(10, dxdraw.surfaceheight-40, SInfLifes);
end
else
begin
if ((Flife = 1) and ((FBlink div 300) mod 2=0)) or (Flife <> 1) then
begin
DXDraw.Surface.Canvas.Font.Color := clPurple;
DXDraw.Surface.Canvas.Textout(9, dxdraw.surfaceheight-41, Format(SLifes, [flife]));
DXDraw.Surface.Canvas.Font.Color := clFuchsia;
DXDraw.Surface.Canvas.Textout(10, dxdraw.surfaceheight-40, Format(SLifes, [flife]));
end;
if Flife = 1 then BlinkUpdate;
end;
{$ENDREGION}
 
{$REGION 'Anzeige Einheiten und Boss Leben'}
 
tmpEnemyAnzeige := EnemyCounter{Auf Bildschirm} + FRestEnemies{In der Warteschlange};
if Assigned(FBoss) and (FBoss.State<>pesDeadVanished) then Dec(tmpEnemyAnzeige);
 
if Assigned(FBoss) and (FBoss.Life>0) then
begin
if (tmpEnemyAnzeige>0) then
begin
DXDraw.Surface.Canvas.Font.Color := clGreen;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-191, dxdraw.surfaceheight-81, Format(SBossLifes, [FBoss.Life]));
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-191, dxdraw.surfaceheight-41, Format(SEinheiten, [tmpEnemyAnzeige]));
DXDraw.Surface.Canvas.Font.Color := clLime;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-190, dxdraw.surfaceheight-80, Format(SBossLifes, [FBoss.Life]));
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-190, dxdraw.surfaceheight-40, Format(SEinheiten, [tmpEnemyAnzeige]));
end
else
begin
DXDraw.Surface.Canvas.Font.Color := clGreen;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-191, dxdraw.surfaceheight-41, Format(SBossLifes, [FBoss.Life]));
DXDraw.Surface.Canvas.Font.Color := clLime;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-190, dxdraw.surfaceheight-40, Format(SBossLifes, [FBoss.Life]));
end;
end
else if tmpEnemyAnzeige>0 then
begin
DXDraw.Surface.Canvas.Font.Color := clGreen;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-191, dxdraw.surfaceheight-41, Format(SEinheiten, [tmpEnemyAnzeige]));
DXDraw.Surface.Canvas.Font.Color := clLime;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-190, dxdraw.surfaceheight-40, Format(SEinheiten, [tmpEnemyAnzeige]));
end;
{$ENDREGION}
 
{$REGION 'Anzeige Mission erfolgreich/gescheitert'}
if (EnemyCounter=0) and (FRestEnemies=0) then
begin
DXDraw.Surface.Canvas.Font.Color := clGreen;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-251, dxdraw.surfaceheight-41, SMissionSuccessful);
DXDraw.Surface.Canvas.Font.Color := clLime;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-250, dxdraw.surfaceheight-40, SMissionSuccessful);
DXDraw.Surface.Canvas.Release;
Sleep(1);
inc(FCounter);
if FCounter>150{200} then PlayerSprite.FlyAway;
end;
{$ENDREGION}
end
else
begin
DXDraw.Surface.Canvas.Font.Color := clMaroon;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-251, dxdraw.surfaceheight-41, SMissionFailed);
DXDraw.Surface.Canvas.Font.Color := clRed;
DXDraw.Surface.Canvas.Textout(dxdraw.surfacewidth-250, dxdraw.surfaceheight-40, SMissionFailed);
end;
DXDraw.Surface.Canvas.Release;
end;
end;
 
procedure TMainForm.SceneGameOver;
resourcestring
SGameOver = 'Game Over!';
begin
DXDraw.Surface.Fill(0);
 
FNotSave := true;
Cheat.enabled := false;
GamePause.enabled := false;
Neustart.enabled := false;
Brush.Style := bsClear;
DXDraw.Surface.Canvas.Font.Size := 35;
DXDraw.Surface.Canvas.Font.Color := clMaroon;
DXDraw.Surface.Canvas.Textout((dxdraw.surfacewidth div 2)-127, 98, SGameOver);
DXDraw.Surface.Canvas.Font.Color := clRed;
DXDraw.Surface.Canvas.Textout((dxdraw.surfacewidth div 2)-125, 100, SGameOver);
if (FBlink div 300) mod 2=0 then
begin
DXDraw.Surface.Canvas.Font.Size := 30;
DXDraw.Surface.Canvas.Font.Color := clOlive;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-187, dxdraw.surfaceheight-117, SWeiterMitLeertaste);
DXDraw.Surface.Canvas.Font.Color := clYellow;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-185, dxdraw.surfaceheight-115, SWeiterMitLeertaste);
end;
BlinkUpdate;
DXDraw.Surface.Canvas.Release;
 
// Weiter mit Leertaste oder Enter
if (isButton1 in DXInput.States) or (isButton2 in DXInput.States) then
begin
PlaySound(smsSceneMov, False);
PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
StartScene(gsTitle);
end;
end;
 
procedure TMainForm.SceneWin;
resourcestring
SGewonnen = 'Gewonnen!';
begin
DXDraw.Surface.Fill(0);
 
FNotSave := true;
Cheat.enabled := false;
GamePause.enabled := false;
Neustart.enabled := false;
 
DXDraw.Surface.Canvas.Brush.Style := bsClear;
DXDraw.Surface.Canvas.Font.Size := 35;
DXDraw.Surface.Canvas.Font.Color := clMaroon;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-127, 98, SGewonnen);
DXDraw.Surface.Canvas.Font.Color := clRed;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-125, 100, SGewonnen);
if (FBlink div 300) mod 2=0 then
begin
DXDraw.Surface.Canvas.Font.Size := 30;
DXDraw.Surface.Canvas.Font.Color := clOlive;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-187, dxdraw.surfaceheight-117, SWeiterMitLeertaste);
DXDraw.Surface.Canvas.Font.Color := clYellow;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-185, dxdraw.surfaceheight-115, SWeiterMitLeertaste);
end;
BlinkUpdate;
DXDraw.Surface.Canvas.Release;
 
// Weiter mit Leertaste oder Enter
if (isButton1 in DXInput.States) or (isButton2 in DXInput.States) then
begin
PlaySound(smsSceneMov, False);
PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
StartScene(gsTitle);
end;
end;
 
procedure TMainForm.StartSceneNewLevel;
begin
sleep(500);
FNotSave := true; // Wenn man speichert, würde man LevelAdventTable vom vorherigen Level machen, das wär müll!
Cheat.enabled := false;
Neustart.enabled := false;
GamePause.enabled := false;
GameStart.enabled := true;
Spielgeschwindigkeit.enabled := false;
Spielgeschwindigkeit.enabled := false;
if ((FGameMode=gmLevels) and not GetLevelFileName(FLevel,false).found)
// or ((FGameMode=gmRandom) and (FLevel > 25))
or (FLevel > MaxPossibleLevels) then
begin
//PlaySound('SceneMov', False);
PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
StartScene(gsWin);
exit;
end;
MusicSwitchTrack(smmScene);
end;
 
procedure TMainForm.EndSceneNewLevel;
begin
{ Ende NewLevel }
end;
 
procedure TMainForm.SceneNewLevel;
resourcestring
SLevelScene = 'Level %d';
begin
DXDraw.Surface.Fill(0);
 
DXDraw.Surface.Canvas.Brush.Style := bsClear;
DXDraw.Surface.Canvas.Font.Size := 40;
DXDraw.Surface.Canvas.Font.Color := clMaroon;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-(83+(length(inttostr(flevel))*22)), 98, Format(SLevelScene, [flevel]));
DXDraw.Surface.Canvas.Font.Color := clRed;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-(81+(length(inttostr(flevel))*22)), 100, Format(SLevelScene, [flevel]));
if (FBlink div 300) mod 2=0 then
begin
DXDraw.Surface.Canvas.Font.Size := 30;
DXDraw.Surface.Canvas.Font.Color := clOlive;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-187, dxdraw.surfaceheight-117, SWeiterMitLeertaste);
DXDraw.Surface.Canvas.Font.Color := clYellow;
DXDraw.Surface.Canvas.Textout((dxdraw.surfaceWidth div 2)-185, dxdraw.surfaceheight-115, SWeiterMitLeertaste);
end;
BlinkUpdate;
DXDraw.Surface.Canvas.Release;
 
// Weiter mit Leertaste oder Enter
if (isButton1 in DXInput.States) or (isButton2 in DXInput.States) then
begin
PlaySound(smsSceneMov, False);
PalleteAnim(RGBQuad(0, 0, 0), 300);
Sleep(200);
StartScene(gsMain);
end;
end;
 
procedure TMainForm.OptionMusicClick(Sender: TObject);
begin
OptionMusic.Checked := not OptionMusic.Checked;
if OptionMusic.Checked then
begin
MusicSwitchTrack(FMusic)
end
else
begin
StopMusic(FMusic);
end;
WriteOptions;
end;
 
procedure TMainForm.PlayMusic(Name: TSpaceMissionMusicTrack);
begin
if not OptionMusic.checked then exit;
if Ord(Name) > dxmusic.Midis.Count then exit;
dxmusic.Midis.Items[Ord(Name)-1].Play;
end;
 
procedure TMainForm.StopMusic(Name: TSpaceMissionMusicTrack);
begin
if Name = smmNone then exit;
if Ord(Name) > dxmusic.Midis.Count then exit;
dxmusic.Midis.Items[Ord(Name)-1].Stop;
end;
 
procedure TMainForm.ResumeMusic(Name: TSpaceMissionMusicTrack);
begin
if not OptionMusic.checked then exit;
if Ord(Name) > dxmusic.Midis.Count then exit;
dxmusic.Midis.Items[Ord(Name)-1].Play; // TODO: how to pause/resume instead play/stop
end;
 
procedure TMainForm.PauseMusic(Name: TSpaceMissionMusicTrack);
begin
if Name = smmNone then exit;
if Ord(Name) > dxmusic.Midis.Count then exit;
dxmusic.Midis.Items[Ord(Name)-1].Stop; // TODO: how to pause/resume instead play/stop
end;
 
procedure TMainForm.SpielstandClick(Sender: TObject);
begin
speicherungform.showmodal;
end;
 
procedure TMainForm.LevelNeuStarten;
begin
FNextScene := gsNewLevel;
FLife := FLifeAtLevelStart;
FScore := FScoreAtLevelStart;
end;
 
procedure TMainForm.NeustartClick(Sender: TObject);
begin
LevelNeuStarten;
end;
 
procedure TMainForm.LeichtClick(Sender: TObject);
begin
leicht.checked := true;
FSpeed := SpeedEasy;
writeoptions;
end;
 
procedure TMainForm.MittelClick(Sender: TObject);
begin
mittel.checked := true;
FSpeed := SpeedMedium;
writeoptions;
end;
 
procedure TMainForm.SchwerClick(Sender: TObject);
begin
schwer.checked := true;
FSpeed := SpeedHard;
writeoptions;
end;
 
procedure TMainForm.MasterClick(Sender: TObject);
begin
master.checked := true;
FSpeed := SpeedMaster;
writeoptions;
end;
 
procedure TMainForm.FormShow(Sender: TObject);
resourcestring
SFileError = 'Die Datei kann von SpaceMission nicht geöffnet werden!';
var
SavGame: TSaveData;
begin
if Assigned(SplashForm) then
begin
SplashForm.Hide;
FreeAndNil(SplashForm);
end;
 
dxtimer.Enabled := true;
dxtimer.ActiveOnly := true;
 
ResetLevelData;
if (paramcount > 0) and (fileexists(paramstr(1))) and (ExtractFileExt(paramstr(1)).ToLower = '.sav') then
begin
SavGame := TSaveData.Create;
try
try
SavGame.LoadFromFile(paramstr(1));
FScore := SavGame.Score;
FLife := SavGame.Life;
FLevel := SavGame.Level;
FGameMode := SavGame.GameMode;
FLevelDataAlreadyLoaded := true; // do not call NewLevel() in StartSceneMain
if Assigned(SavGame.LevelData) then
begin
LevelData.Assign(SavGame.LevelData);
end;
except
on E: Exception do
begin
showmessage(SFileError + ' ' +E.Message);
GameStartClick(GameStart);
exit;
end;
end;
finally
FreeAndNil(SavGame);
end;
//FNextScene := gsNewLevel;
StartScene(gsNewLevel);
exit;
end;
end;
 
procedure TMainForm.InformationenClick(Sender: TObject);
begin
dxtimer.enabled := false;
InfoForm.showmodal;
if not mainform.gamepause.checked then mainform.dxtimer.enabled := true;
end;
 
procedure TMainForm.CheatClick(Sender: TObject);
begin
CheatForm.showmodal;
end;
 
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if optionMusic.checked then StopMusic(FMusic);
SpriteEngine.Engine.Clear;
dxsound.Finalize;
dxinput.Destroy;
DXTimer.Enabled := False;
end;
 
procedure TMainForm.FormDestroy(Sender: TObject);
begin
FreeAndNil(imagelist);
FreeAndNil(spriteengine);
FreeAndNil(dxdraw);
FreeAndNil(wavelist);
FreeAndNil(dxmusic);
FreeAndNil(dxsound);
//FreeAndNil(dxinput);
FreeAndNil(dxtimer);
DeleteCriticalSection(TimerCS);
FreeAndNil(LevelData);
end;
 
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean);
{************************************************************
* Procedure PostKeyEx32
*
* Parameters:
* key : virtual keycode of the key to send. For printable
* keys this is simply the ANSI code (Ord(character)).
* shift : state of the modifier keys. This is a set, so you
* can set several of these keys (shift, control, alt,
* mouse buttons) in tandem. The TShiftState type is
* declared in the Classes Unit.
* specialkey: normally this should be False. Set it to True to
* specify a key on the numeric keypad, for example.
* Description:
* Uses keybd_event to manufacture a series of key events matching
* the passed parameters. The events go to the control with focus.
* Note that for characters key is always the upper-case version of
* the character. Sending without any modifier keys will result in
* a lower-case character, sending it with [ssShift] will result
* in an upper-case character!
// Code by P. Below
************************************************************}
type
TShiftKeyInfo = record
shift: Byte;
vkey: Byte;
end;
byteset = set of 0..7;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl); vkey: VK_CONTROL),
(shift: Ord(ssShift); vkey: VK_SHIFT),
(shift: Ord(ssAlt); vkey: VK_MENU));
var
flag: DWORD;
bShift: ByteSet absolute shift;
i: Integer;
begin
for i := 1 to 3 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
end; { For }
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;
 
keybd_event(key, MapvirtualKey(key, 0), flag, 0);
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0);
 
for i := 3 downto 1 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
KEYEVENTF_KEYUP, 0);
end; { For }
end; { PostKeyEx32 }
 
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_ESCAPE then
begin
// TODO: Unfortunately, you cannot see if it is already popup. It would be great if ESC closes the main menu...
Key := 0;
PostKeyEx32(Ord('S'), [ssAlt], False);
end;
end;
 
end.
 
/TODO.md
0,0 → 1,62
 
# SpaceMission TODO
 
## Kleinigkeiten
 
- Es wäre schön, wenn die größe der Spezialhintergründe (Planeten) abhängig von wäre, wie weit entfernt sie ist (Layer 1,2,3)
- wenn man getroffen ist, sollte man blinken, sodass man sieht, ab wann man wieder verwundbar ist
- Improve Sound effects
- Hintergrund besser und Abwechslungsreicher
- Levels besser
- Schrift rechts (Boss: X) soll rechtsbündig sein
- Punkte: Integer-Höchstwert erkennen und dann nicht mehr weiterzählen!
- lev: anzeige - welche datei offen ist!
- punktegebung optimieren
- Bei Pause => Entweder alles grau werden lassen, oder vielleicht ganz groß Pause in die Bildschirmmitte schreiben
 
## Ideen
 
- Neue Einheit: Ufo, das im Kreis fliegt und nicht weggeht
- Neues Item: 10 Sekunden unverwundbarkeit item
- Neues Item: Geld Geschenk item
- Boss schwieriger machen: Er soll auch nach links und rechts gehen?
- Spiellogik: Wenn man gegen einen gegner fliegt, soll er schaden haben!
- Cooldown für Laser? Limitierung der Schüsse (Kanone wird heiß).
- Highscore Liste
- "Throwback" nach einem hit. Nach Treffer, zurückgeschleudert werden
- Anderer Soundeffekt, wenn man selbst getroffen ist
- Leveleditor: "unsaubere" levels akzeptieren! komet mit 1+ leben, einheiten, die nicht auf der linie sind.
- Netzwerkspiel?
- Leveleditor: Ober - / Unterfelder? (was meinte ich damit?)
- Leveleditor: Höchstens 9999 enemies?
- Leveleditor "rückgängig" funktion
- Cheat for next Level ect. (Johnny Crash?)
- Verschiedene Dinge bei schnelligkeit anders?! z.B. Boss-Explore, Schießende Einheiten (Tamas)
- Tama 1 must damage PL. Sprite!
- Tama 2 must damage EN. Sprite!
- Tama 1 und Tama 2 könnten sich gegenseitig kaputt machen?
- Speicherung: Umbenennen - Button?
- Multiplayer (2 Spieler fliegen durch eine Map)
 
## Repro, Unklar, Fragen
 
- Que: Gibt es eine neuere Version des Shoot-Samples (nicht mehr vorhanden in aktueller DelphiX)
- Leveleditor performance oder deadlock probleme? bei vielen einheiten wird das sehr langsam? algo verbessern?
- Leveleditor Probleme mit Schiebebildchen... (was meinte ich damit?)
- Leveleditor Wenn Level gelöscht, dass gerade geladen ist, dann LevChanged = true!
- Leveleditor Boss überschneidet Einheiten ?
- Bei Musik am Anfang bei nicht Focus Anfangsquäker?
- Zeitverschiebung: Texpl dauert länger als Tboss.kill;
- Cheat1 (unverwundbarkeit) mit Kollisionsgeräusch?
- Wenn 0 Levels => Procedur in MainMenu verbessern!
- Wenn Kollision von PlayerSprite vorrüber ist, muss der KollisionsTimer sofort wieder auf Null gehen!
- Wenn keine Soundkarte dann auch kein Sound!
- Spielgeschw. & BGSpeed vereinen
- Dec(live) bei attacker1 manchmal kein Ton?
- Sequences (was meinte ich damit?)
- Rnd: Soll Boss-Live auch RND?
- leicht, mittel, schwer: falsche fps bei langsameren grafikkarten?
- lev: überall ok = focus!
- systemmodus auswählen (move rechnungen ausführen?) oder ein rechenlabel mit dem status anzeigen
- SM: Soll bei Verwaltung lieber statt dem ersten satz bei status was anderes hin? Levelart: Normales Level.
Wenn es bleiben soll, dann den satz verbessern. Das Level ist ein Zufallslevel
/_Private/ToDo.txt
File deleted
/_Private/Dokumentation.doc
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/_Private/Schnecke.bmp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/_Private/Totenkopf.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/_Private/Font.txt
File deleted
/_Private/Schnecke.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/_Private/Thumbs.db
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/_Private/Versions.txt
File deleted
/_Private/Totenkopf.bmp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/_Private/ToDo.doc
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/_Private/medikit.bmp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/_Private/medikit.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/_Private/medikit.psd
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/_Private/VCL.txt
0,0 → 1,16
 
VCL_DELPHIX_D6
(un)DelphiX 1.0.22.0
Name: delphix_all_in_one_22
Version: 19 November 2023
Compatible with Delphi 6, Turbo Delphi (2006), Delphi XE4, Delphi 12 Athens
Source: http://www.micrel.cz/Dx/
(C) Copyright 1996-2000 by Hiroyuki Hori
(C) Copyright 2004-2023 by Jaro Benes.
The rules governing the use of (un)DelphiX or other tools source code are based on the general Open Source Definition, available at http://www.opensource.org and with consideration shared rights.
This software is provided "as is" and is without warranty of any kind. The author(s) of this software does not warrant, guarantee or make any representations regarding the use or results of use of this software in terms of reliability, accuracy or fitness for purpose. You assume the entire risk of direct or indirect, consequential or inconsequential results from the correct or incorrect usage of this software even if the author has been informed of the possibilities of such damage. Neither the author nor anybody connected to this software in any way can assume any responsibility.
 
VCL_MARKDOWN
Source: https://github.com/grahamegrieve/delphi-markdown
(c) 2011+, Health Intersections Pty Ltd
Apache 2.0 License
/_Private/DevTools/DXGDumper.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/_Private/DevTools/dxgEdit.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/_Private/DevTools/dxmEdit.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/_Private/DevTools/dxwEdit.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/_Private/Shoot (DelphiX 2000.07.17).zip
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/_Private
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/Global.pas
0,0 → 1,319
unit Global;
 
interface
 
const
ProgramVersion = '1.2.2';
LevEditRasterW = 48;
LevEditRasterH = 32;
LevEditRows = 15; // Attention: if you change this, you also need to change the LevEditor GUI!
LevEditCols = 13; // Attention: if you change this, you also need to change the LevEditor GUI!
MaxPossibleEnemyLives = 999;
MaxPossibleLevels = 999;
RegistrySettingsKey = 'SOFTWARE\ViaThinkSoft\SpaceMission\Settings'; // do not localize
MusicSettingKey = 'Music'; // do not localize
SoundSettingKey = 'Sound'; // do not localize
SpeedSettingKey = 'GameSpeed'; // do not localize
DefaultLevelLength = 1200;
StartLives = 6;
SpeedEasy = 650 div 60; // 10
SpeedMedium = 1000 div 60; // 16
SpeedHard = 1350 div 60; // 22
SpeedMaster = 2000 div 60; // 33
DEFAULT_ANIMSPEED = 15/1000;
BossWidth = 4;
BossHeight = 2;
SpaceMissionExe = 'SpaceMission.exe'; // do not localize
LevEditExe = 'LevEdit.exe'; // do not localize
DxgFile = 'DirectX\Graphics.dxg'; // do not localize
DxwFile = 'DirectX\Sound.dxw'; // do not localize
DxmFile = 'DirectX\Music.dxm'; // do not localize
RandomLevelMaxEnemyLives = 10;
RandomLevelMedikitEveryX = 250;
RandomLevelAdditionalEnemiesPerLevel = 75; // Zufalls-Level
 
const
// Cheat1 = 'Kmkjk'+#39+'Khyc';
Cheat1 = #75+#109+#107+#106+#107+#127+#39+#75+#104+#121+#99; {Johnny Cash}
 
resourcestring
Cheat1Text = 'Unendlich Leben!';
 
type
TCheat = (ctUnknown, ctInfiniteLives);
TCheatSet = set of TCheat;
 
// DirectX\Music.dxm
TSpaceMissionMusicTrack = (
smmNone,
smmBoss, // dxmusic.Midis[0]
smmGame, // dxmusic.Midis[1]
smmScene, // dxmusic.Midis[2]
smmTitle // dxmusic.Midis[3]
);
 
// DirectX\Graphics.dxg
TSpaceMissionGraphicSprite = (
smgNone,
smgEnemyDisk, // ImageList.Items.Item[0]
smgEnemyAttacker, // ImageList.Items.Item[1]
smgEnemyBoss, // ImageList.Items.Item[2]
smgBounce, // ImageList.Items.Item[3]
smgMachine, // ImageList.Items.Item[4]
smgEnemyAttacker2, // ImageList.Items.Item[5]
smgEnemyAttacker3, // ImageList.Items.Item[6]
smgEnemyMeteor, // ImageList.Items.Item[7]
smgBounce2, // ImageList.Items.Item[8]
smgEnemyDisk2, // ImageList.Items.Item[9]
smgLogo, // ImageList.Items.Item[10]
smgExplosion, // ImageList.Items.Item[11]
smgBackgroundPlanet1, // ImageList.Items.Item[12]
smgMatrix, // ImageList.Items.Item[13]
smgStar1, // ImageList.Items.Item[14]
smgStar2, // ImageList.Items.Item[15]
smgStar3, // ImageList.Items.Item[16]
smgBackgroundBlue, // ImageList.Items.Item[17]
smgBackgroundRed, // ImageList.Items.Item[18]
smgBackgroundYellow, // ImageList.Items.Item[19]
smgHintergrundRot, // ImageList.Items.Item[20]
smgItemMedikit // ImageList.Items.Item[21]
);
 
// DirectX\Sound.dxw
TSpaceMissionSound = (
smsNone,
smsSceneMov, // WaveList.Items.Item[0]
smsExplosion, // WaveList.Items.Item[1]
smsHit, // WaveList.Items.Item[2]
smsShoot, // WaveList.Items.Item[3]
smsItemCollected // WaveList.Items.Item[4]
);
 
function OwnDirectory: string;
 
const
FOLDERID_SavedGames: TGuid = '{4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4}'; // do not localize
 
// Useful functions
procedure SpaceMission_SwitchLanguage;
function GetKnownFolderPath(const rfid: TGUID): string;
function KillTask(ExeFileName: string): Integer;
procedure CheckForUpdates(ViaThinkSoftProjectName: string; AVersion: string);
 
implementation
 
uses
Windows, SysUtils, Dialogs, ActiveX, ShlObj, TlHelp32, wininet, Forms, ShellAPI,
System.UITypes;
 
procedure SwitchLanguage(newLang: string);
var
oldHInst: hInst;
newHInst: hInst;
bakOverride: string;
FileName: array [0..MAX_PATH] of Char;
Module: PLibModule;
begin
Module := LibModuleList;
GetModuleFileName(Module.Instance, FileName, Length(FileName));
 
bakOverride := GetLocaleOverride('');
try
SetLocaleOverride(newLang);
 
// Note: SetLocaleOverride() alone does not work, because LibModuleList.ResInstance
// is already set and won't be re-set by the FindResourceHInstance()!
newHInst := LoadResourceModule(FileName);
if newHInst = 0 then newHInst := Module.Instance;
 
oldHInst := Module.ResInstance;
Module.ResInstance := newHInst;
FreeLibrary(oldHInst);
except
SetLocaleOverride(bakOverride);
end;
end;
 
function GetUserDefaultUILanguage: LANGID; stdcall; external 'kernel32';
 
procedure SpaceMission_SwitchLanguage;
const
BaseLanguage = LANG_GERMAN;
DesiredFallbackLanguage = 'ENU'; // English USA
begin
// We need this because of a tricky problem...
// Our base language is German (DE), and we have a translation for English USA (ENU)
// If the system locale is not exactly ENU (even ENG is not accepted), then the base language (German) will be used.
// But much more people are speaking English than German. So we need to force the system to use ENU instead of DE.
// This decision if we choose DE or ENU is done by the language selected during setup.
if (GetLocaleOverride('') = '') and
((GetUserDefaultUILanguage and $FF) <> BaseLanguage) then
begin
SwitchLanguage(DesiredFallbackLanguage);
end;
end;
 
function GetKnownFolderPath(const rfid: TGUID): string;
var
OutPath: PWideChar;
begin
// https://www.delphipraxis.net/135471-unit-zur-verwendung-von-shgetknownfolderpath.html
if ShGetKnownFolderPath(rfid, 0, 0, OutPath) {>= 0} = S_OK then
begin
Result := OutPath;
// From MSDN
// ppszPath [out]
// Type: PWSTR*
// When this method returns, contains the address of a pointer to a null-terminated Unicode string that specifies the path of the known folder
// The calling process is responsible for freeing this resource once it is no longer needed by calling CoTaskMemFree.
// The returned path does not include a trailing backslash. For example, "C:\Users" is returned rather than "C:\Users\".
CoTaskMemFree(OutPath);
end
else
begin
Result := '';
end;
end;
 
// https://stackoverflow.com/questions/43774320/how-to-kill-a-process-by-name
function KillTask(ExeFileName: string): Integer;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
 
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(
OpenProcess(PROCESS_TERMINATE,
BOOL(0),
FProcessEntry32.th32ProcessID),
0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
 
function OwnDirectory: string;
begin
result := extractfilepath(paramstr(0));
end;
 
// https://www.delphipraxis.net/post43515.html , fixed , works for Delphi 12 Athens
function GetHTML(AUrl: string): RawByteString;
var
databuffer : array[0..4095] of ansichar; // SIC! ansichar!
ResStr : ansistring; // SIC! ansistring
hSession, hfile: hInternet;
dwindex,dwcodelen,dwread,dwNumber: cardinal;
dwcode : array[1..20] of char;
res : pchar;
Str : pansichar; // SIC! pansichar
begin
ResStr:='';
if (system.pos('http://',lowercase(AUrl))=0) and // do not localize
(system.pos('https://',lowercase(AUrl))=0) then // do not localize
AUrl:='http://'+AUrl; // do not localize
 
// Hinzugefügt
if Assigned(Application) then Application.ProcessMessages;
 
hSession:=InternetOpen('InetURL:/1.0', // do not localize
INTERNET_OPEN_TYPE_PRECONFIG,
nil,
nil,
0);
if assigned(hsession) then
begin
// Hinzugefügt
if Assigned(Application) then application.ProcessMessages;
 
hfile:=InternetOpenUrl(
hsession,
pchar(AUrl),
nil,
0,
INTERNET_FLAG_RELOAD,
0);
dwIndex := 0;
dwCodeLen := 10;
 
// Hinzugefügt
if Assigned(Application) then application.ProcessMessages;
 
HttpQueryInfo(hfile,
HTTP_QUERY_STATUS_CODE,
@dwcode,
dwcodeLen,
dwIndex);
res := pchar(@dwcode);
dwNumber := sizeof(databuffer)-1;
if (res ='200') or (res = '302') then // do not localize
begin
while (InternetReadfile(hfile,
@databuffer,
dwNumber,
DwRead)) do
begin
 
// Hinzugefügt
if Assigned(Application) then application.ProcessMessages;
 
if dwRead =0 then
break;
databuffer[dwread]:=#0;
Str := pansichar(@databuffer);
resStr := resStr + Str;
end;
end
else
ResStr := 'Status:'+AnsiString(res); // do not localize
if assigned(hfile) then
InternetCloseHandle(hfile);
end;
 
// Hinzugefügt
if Assigned(Application) then application.ProcessMessages;
 
InternetCloseHandle(hsession);
Result := resStr;
end;
 
procedure CheckForUpdates(ViaThinkSoftProjectName: string; AVersion: string);
resourcestring
SDownloadError = 'Ein Fehler ist aufgetreten. Wahrscheinlich ist keine Internetverbindung aufgebaut, oder der der ViaThinkSoft-Server vorübergehend offline.';
SNewProgramVersionAvailable = 'Eine neue Programmversion ist vorhanden. Möchten Sie diese jetzt herunterladen?';
SNoUpdateAvailable = 'Es ist keine neue Programmversion vorhanden.';
var
cont: RawByteString;
begin
cont := GetHTML('https://www.viathinksoft.de/update/?id='+ViaThinkSoftProjectName); // do not localize
if copy(cont, 0, 7) = 'Status:' then
begin
MessageDlg(SDownloadError, mtError, [mbOk], 0);
end
else
begin
if string(cont) <> AVersion then
begin
if MessageDlg(SNewProgramVersionAvailable, mtConfirmation, mbYesNoCancel, 0) = mrYes then
shellexecute(application.handle, 'open', pchar('https://www.viathinksoft.de/update/?id=@'+ViaThinkSoftProjectName), '', '', sw_normal); // do not localize
end
else
begin
MessageDlg(SNoUpdateAvailable, mtInformation, [mbOk], 0);
end;
end;
end;
 
end.
/LevEdit.dpr
1,37 → 1,43
program LevEdit;
 
{$Description 'SpaceMission Leveleditor 1.1'}
 
{%ToDo 'LevEdit.todo'}
 
uses
Windows,
{$IF CompilerVersion >= 23.0}
System.UITypes,
{$IFEND }
Forms,
Dialogs,
SysUtils,
MMSystem,
LevMain in 'LevMain.pas' {MainForm},
LevText in 'LevText.pas' {TextForm},
LevSplash in 'LevSplash.pas' {SplashForm},
LevSpeicherung in 'LevSpeicherung.pas' {SpeicherungForm},
LevInfo in 'LevInfo.pas' {InfoForm},
LevSource in 'LevSource.pas' {SourceForm},
LevOptions in 'LevOptions.pas' {LevelForm};
ComInfo in 'ComInfo.pas' {InfoForm},
LevOptions in 'LevOptions.pas' {LevelForm},
ComLevelReader in 'ComLevelReader.pas',
Global in 'Global.pas',
ComHilfe in 'ComHilfe.pas' {HilfeForm};
 
{$R *.RES}
 
var
Fehler: boolean;
Sem: THandle;
directory: string;
 
resourcestring
SAlreadyStarted = 'Der Editor wurde bereits gestartet.';
STitel = 'SpaceMission Level-Editor';
SFileMissing = '%s fehlt. Bitte installieren Sie SpaceMission erneut.';
 
const
SemaphoreName = 'SpaceMission Level Editor';
 
begin
SpaceMission_SwitchLanguage;
{ Programm schon gestartet? }
Sem := CreateSemaphore(nil, 0, 1, 'SpaceMission Leveleditor');
Sem := CreateSemaphore(nil, 0, 1, SemaphoreName);
if (Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then
begin
CloseHandle(Sem);
MessageDlg('Der Editor wurde bereits gestartet.', mtInformation, [mbOK], 0);
MessageDlg(SAlreadyStarted, mtInformation, [mbOK], 0);
exit;
end;
SplashForm := TSplashForm.Create(Application);
38,27 → 44,19
SplashForm.Show;
SplashForm.Update;
Application.Initialize;
Application.showmainform := False;
Application.Title := 'SpaceMission 1.1 - Leveleditor';
Fehler := false;
directory := extractfilepath(paramstr(0));
// if not fileexists(directory+'Bilder\Auswahl.bmp') then Fehler := true;
if not fileexists(directory+'DirectX\Graphic.dxg') then Fehler := true;
// if not fileexists(directory+'Texte\Mitwirkende.txt') then Fehler := true;
// if not fileexists(directory+'Dateien.doc') then Fehler := true;
if Fehler then
Application.ShowMainform := False;
Application.MainFormOnTaskBar := true;
Application.Title := STitel;
if not fileexists(OwnDirectory+DxgFile) then
begin
MessageDLG('Dateien, die die Programmstabilität gewährleisten, sind ' +
'nicht mehr vorhanden!'+#13#10+'Bitte installieren Sie SpaceMission erneut...',
mtWarning, [mbOK], 0);
MessageDLG(Format(SFilemissing, [DxgFile]), mtError, [mbOK], 0);
exit;
end;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TTextForm, TextForm);
Application.CreateForm(TSpeicherungForm, SpeicherungForm);
Application.CreateForm(TInfoForm, InfoForm);
Application.CreateForm(TSourceForm, SourceForm);
Application.CreateForm(TLevelForm, LevelForm);
Application.CreateForm(THilfeForm, HilfeForm);
Application.Run;
end.
 
/LevMain.pas
5,7 → 5,8
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, MMSystem,
Dialogs, StdCtrls, ExtCtrls, Menus, DIB, DXClass, DXSprite, DXDraws,
DXSounds, Spin, ComCtrls, PjVersionInfo;
DXSounds, Spin, ComCtrls{$IF CompilerVersion >= 23.0}, System.UITypes,
WinAPI.DirectDraw{$ENDIF}, DirectX, ComLevelReader, Global, IOUtils;
 
type
TMainForm = class(TDXForm)
13,11 → 14,9
Spiel: TMenuItem;
Beenden: TMenuItem;
Hilfe: TMenuItem;
Mitarbeiter: TMenuItem;
Leer1: TMenuItem;
Level: TMenuItem;
Informationen: TMenuItem;
Leer2: TMenuItem;
Enemy1: TRadioButton;
Enemy2: TRadioButton;
Enemy3: TRadioButton;
43,12 → 42,20
SLabel4a: TLabel;
SLabel4b: TLabel;
LivesLabel: TLabel;
Quelltext1: TMenuItem;
StatusBar: TStatusBar;
N1: TMenuItem;
Spielfelderweitern1: TMenuItem;
LivesEdt: TEdit;
Lives: TUpDown;
SidePanel: TPanel;
LivesEdit: TSpinEdit;
AlleLeveldateienaktualisieren1: TMenuItem;
N2: TMenuItem;
Leveltesten1: TMenuItem;
Hilfe1: TMenuItem;
N3: TMenuItem;
AufUpdatesprfen1: TMenuItem;
N4: TMenuItem;
WasgibtesNeues1: TMenuItem;
Enemy8: TRadioButton;
procedure DXDrawFinalize(Sender: TObject);
procedure DXDrawInitialize(Sender: TObject);
procedure FormCreate(Sender: TObject);
55,7 → 62,6
procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
procedure BeendenClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure MitarbeiterClick(Sender: TObject);
procedure LevelClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure InformationenClick(Sender: TObject);
63,40 → 69,40
procedure DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure EnemyClick(Sender: TObject);
procedure EnemyAdd(x, y, art, lives: integer);
procedure NeuClick(Sender: TObject);
procedure DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Quelltext1Click(Sender: TObject);
procedure Spielfelderweitern1Click(Sender: TObject);
procedure ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure LivesClick(Sender: TObject; Button: TUDBtnType);
procedure LivesEdtKeyPress(Sender: TObject; var Key: Char);
procedure LivesEdtChange(Sender: TObject);
procedure AlleLeveldateienaktualisieren1Click(Sender: TObject);
procedure Leveltesten1Click(Sender: TObject);
procedure HilfeTopicClick(Sender: TObject);
procedure AufUpdatesprfen1Click(Sender: TObject);
private
function GetTestlevelFilename: string;
public
{ VCL-Ersatz }
spriteengine: tdxspriteengine;
versioninfo: tpjversioninfo;
dxtimer: tdxtimer;
imagelist: tdximagelist;
dxdraw: tdxdraw;
{ Variablen }
FDirectory: string;
FEngineVersion: string;
FMenuItem: integer;
Enemys: TStrings;
ArtChecked: integer;
LiveEdit: integer;
LevData: TLevelData;
ScrollP: integer;
AltScrollPos: integer;
Boss: boolean;
LevChanged: boolean;
NumEnemys: integer;
function SelectedEnemyType: TEnemyType;
{ Grafik-Routinen }
function GetSpriteGraphic(Sprite: TSpaceMissionGraphicSprite): TPictureCollectionItem;
{ Level-Routinen }
procedure EnemyCreate(x, y: integer);
procedure EnemyCreateSprite(x, y: integer; AEnemyType: TEnemyType; ALives: integer);
procedure DestroyLevel;
procedure RefreshFromLevData;
procedure AnzeigeAct;
{ Initialisiations-Routinen }
procedure DXInit;
104,107 → 110,99
{ Farb-Routinen }
function ComposeColor(Dest, Src: TRGBQuad; Percent: Integer): TRGBQuad;
procedure PalleteAnim(Col: TRGBQuad; Time: Integer);
{ Sonstiges }
procedure LivesChange(newval: integer);
end;
 
var
MainForm: TMainForm;
 
const
FCompVersion = '1.0';
 
implementation
 
uses
LevSplash, LevSpeicherung, LevText, LevInfo, LevSource, LevOptions;
LevSplash, LevSpeicherung, ComInfo, LevOptions, ShellAPI, ComHilfe;
 
const
FileError = 'Die Datei kann von SpaceMission nicht geöffnet werden!';
status_info = ' Zeigen Sie mit dem Mauszeiger auf eine Einheit, um deren Eigenschaften anzuzeigen...';
status_lives = ' Leben: ';
status_nolives = ' Einheit hat keine Lebensangabe';
RasterW = 48;
RasterH = 32;
 
{$R *.DFM}
 
{$R WindowsXP.res}
resourcestring
status_info = 'Zeigen Sie mit dem Mauszeiger auf eine Einheit, um deren Eigenschaften anzuzeigen...';
 
type
TBackground = class(TBackgroundSprite)
protected
strict protected
procedure DoMove(MoveCount: Integer); override;
end;
 
TEnemy = class(TImageSprite)
private
Lives: integer;
Art: integer;
XCor: integer;
CorInit: boolean;
protected
TEnemyOrItem = class(TImageSprite)
strict private
FLives: integer;
FEnemyType: TEnemyType;
FXCor: integer;
FCorInit: boolean;
strict protected
procedure DoMove(MoveCount: Integer); override;
public
constructor Create(AParent: TSprite); override;
constructor Create(AParent: TSprite; AEnemyType: TEnemyType; ALives: Integer); reintroduce;
end;
 
procedure TMainForm.DXInit;
{ TBackground }
 
procedure TBackground.DoMove(MoveCount: Integer);
begin
Imagelist.Items.LoadFromFile(FDirectory+'DirectX\Graphic.dxg');
ImageList.Items.MakeColorTable;
DXDraw.ColorTable := ImageList.Items.ColorTable;
DXDraw.DefColorTable := ImageList.Items.ColorTable;
DXDraw.UpdatePalette;
DXDraw.Initialize;
X := -(MainForm.ScrollP * LevEditRasterW);
end;
 
procedure TEnemy.DoMove(MoveCount: Integer);
{ TEnemy }
 
procedure TEnemyOrItem.DoMove(MoveCount: Integer);
begin
if not CorInit then
if not FCorInit then
begin
XCor := trunc(x) + (MainForm.ScrollP * RasterW);
CorInit := true;
FXCor := trunc(x) + (MainForm.ScrollP * LevEditRasterW);
FCorInit := true;
end;
if MainForm.Enemys.IndexOf(floattostr(XCor)+'-'+floattostr(y)+':'+
inttostr(Art)+'('+inttostr(Lives)+')') = -1 then dead;
X := XCor - (MainForm.ScrollP * RasterW);
if MainForm.LevData.IndexOfEnemy(FXCor, integer(round(Y)), FEnemyType, FLives) = -1 then dead;
X := FXCor - (MainForm.ScrollP * LevEditRasterW);
end;
 
procedure TBackground.DoMove(MoveCount: Integer);
constructor TEnemyOrItem.Create(AParent: TSprite; AEnemyType: TEnemyType; ALives: Integer);
begin
X := -(MainForm.ScrollP * RasterW);
end;
inherited Create(AParent);
if AEnemyType = etEnemyAttacker then Image := MainForm.GetSpriteGraphic(smgEnemyAttacker);
if AEnemyType = etEnemyAttacker2 then Image := MainForm.GetSpriteGraphic(smgEnemyAttacker2);
if AEnemyType = etEnemyAttacker3 then Image := MainForm.GetSpriteGraphic(smgEnemyAttacker3);
if AEnemyType = etEnemyMeteor then Image := MainForm.GetSpriteGraphic(smgEnemyMeteor);
if AEnemyType = etEnemyUFO then Image := MainForm.GetSpriteGraphic(smgEnemyDisk);
if AEnemyType = etEnemyUFO2 then Image := MainForm.GetSpriteGraphic(smgEnemyDisk2);
if AEnemyType = etEnemyBoss then Image := MainForm.GetSpriteGraphic(smgEnemyBoss);
if AEnemyType = etItemMedikit then Image := MainForm.GetSpriteGraphic(smgItemMedikit);
 
constructor TEnemy.Create(AParent: TSprite);
begin
inherited Create(AParent);
if MainForm.ArtChecked = 1 then Image := MainForm.ImageList.Items.Find('Enemy-Attacker');
if MainForm.ArtChecked = 2 then Image := MainForm.ImageList.Items.Find('Enemy-Attacker2');
if MainForm.ArtChecked = 3 then Image := MainForm.ImageList.Items.Find('Enemy-Attacker3');
if MainForm.ArtChecked = 4 then Image := MainForm.ImageList.Items.Find('Enemy-Meteor');
if MainForm.ArtChecked = 5 then Image := MainForm.ImageList.Items.Find('Enemy-Disk');
if MainForm.ArtChecked = 6 then Image := MainForm.ImageList.Items.Find('Enemy-Disk2');
if MainForm.ArtChecked = 7 then Image := MainForm.ImageList.Items.Find('Enemy-Boss');
if MainForm.ArtChecked = 4 then Lives := 0 else Lives := MainForm.LiveEdit;
Art := MainForm.ArtChecked;
if not EnemyTypeHasLives(AEnemyType) then
FLives := 0
else
FLives := ALives;
FEnemyType := AEnemyType;
Width := Image.Width;
Height := Image.Height;
PixelCheck := True;
end;
 
{ TMainForm }
 
procedure TMainForm.DXInit;
begin
Imagelist.Items.LoadFromFile(OwnDirectory+DxgFile);
ImageList.Items.MakeColorTable;
DXDraw.ColorTable := ImageList.Items.ColorTable;
DXDraw.DefColorTable := ImageList.Items.ColorTable;
DXDraw.UpdatePalette;
DXDraw.Initialize;
end;
 
procedure TMainForm.FormCreate(Sender: TObject);
var
Ergebnis: string;
daten: textfile;
i: integer;
punkt: integer;
ok: boolean;
resourcestring
SFileError = 'Die Datei kann von SpaceMission nicht geöffnet werden!';
SCaption = 'SpaceMission %s - Level-Editor';
begin
{ VCL-Ersatz start }
 
versioninfo := tpjversioninfo.create(self);
 
dxtimer := tdxtimer.create(self);
dxtimer.Interval := 100;
dxtimer.ActiveOnly := false;
215,11 → 213,12
dxdraw.Parent := self;
dxdraw.Left := 0;
dxdraw.Top := 0;
dxdraw.Width := 640;
dxdraw.Height := 480;
dxdraw.Width := SidePanel.Left;
dxdraw.Height := ScrollBar.Top;
dxdraw.AutoInitialize := False;
dxdraw.AutoSize := False;
dxdraw.Color := clBlack;
(*
dxdraw.Display.BitCount := 24;
dxdraw.Display.FixedBitCount := False;
dxdraw.Display.FixedRatio := False;
226,7 → 225,8
dxdraw.Display.FixedSize := False;
dxdraw.Display.Height := 600;
dxdraw.Display.Width := 800;
dxdraw.Options := [doAllowReboot, doWaitVBlank, doAllowPalette256, doCenter, doRetainedMode, doHardware, doSelectDriver];
*)
dxdraw.Options := [doAllowReboot, doWaitVBlank, doAllowPalette256, doCenter, {doRetainedMode,} doHardware, doSelectDriver];
dxdraw.OnFinalize := DXDrawFinalize;
dxdraw.OnInitialize := DXDrawInitialize;
dxdraw.ParentShowHint := False;
243,57 → 243,54
 
{ VCL-Ersatz ende }
 
ArtChecked := 1;
LiveEdit := 1;
StatusBar.SimpleText := ' ' + status_info;
 
LivesEdit.MinValue := 1;
LivesEdit.MaxValue := MaxPossibleEnemyLives;
LivesEdit.Value := 1;
 
Enemy1.Checked := true;
EnemyClick(Enemy1);
// Leeres Level am Anfang braucht keine Beenden-Bestätigung.
// LevChanged := true;
punkt := 0;
FDirectory := extractfilepath(paramstr(0));
versioninfo.filename := paramstr(0);
for i := 1 to length(versioninfo.ProductVersion) do
begin
if copy(versioninfo.ProductVersion, i, 1) = '.' then inc(punkt);
if punkt < 2 then fengineversion :=
fengineversion+copy(versioninfo.ProductVersion, i, 1);
end;
//Application.Title := 'SpaceMission '+FEngineVersion+' - Leveleditor';
Caption := 'SpaceMission '+FEngineVersion+' - Leveleditor';
 
//Application.Title := Format(SCaption, [ProgramVersion]);
Caption := Format(SCaption, [ProgramVersion]);
DXInit;
if (paramcount > 0) and (fileexists(paramstr(1))) then
LevData := TLevelData.create;
ProgramInit;
DestroyLevel;
if (paramcount > 0) and (fileexists(paramstr(1))) and (ExtractFileExt(paramstr(1)).ToLower = '.lev') then
begin
AssignFile(daten, paramstr(1));
Reset(daten);
ok := true;
ReadLN(daten, Ergebnis);
if Ergebnis <> '; SpaceMission '+FCompVersion then ok := false;
ReadLN(daten, Ergebnis);
if ergebnis <> '; LEV-File' then ok := false;
if not ok then
try
LevData.RasterErzwingen := true;
LevData.LoadFromFile(paramstr(1));
except
on E: Exception do
begin
showmessage(FileError);
CloseFile(daten);
ProgramInit;
exit;
showmessage(SFileError + ' ' +E.Message);
DestroyLevel;
end;
{ Laden }
CloseFile(daten);
exit;
end;
if fileexists(fdirectory+'Bilder\Auswahl.bmp') then
Image1.Picture.LoadFromFile(fdirectory+'Bilder\Auswahl.bmp');
{else
SelPanel.visible := false;}
ProgramInit;
RefreshFromLevData;
LevChanged := false;
AnzeigeAct;
end;
end;
 
procedure TMainForm.FormDestroy(Sender: TObject);
var
tmp: string;
begin
Enemys.Free;
//spriteengine.Free;
versioninfo.free;
dxtimer.Free;
imagelist.Free;
dxdraw.free;
FreeAndNil(dxdraw);
FreeAndNil(LevData);
//FreeAndNil(spriteengine);
FreeAndNil(dxtimer);
FreeAndNil(imagelist);
tmp := GetTestlevelFilename;
 
// SpaceMission.exe only loads a file once, so we can delete any test level
if FileExists(tmp) then DeleteFile(GetTestlevelFilename);
end;
 
procedure TMainForm.BeendenClick(Sender: TObject);
303,12 → 300,12
 
procedure TMainForm.DXDrawInitialize(Sender: TObject);
begin
DXTimer.Enabled := True;
if Assigned(DXTimer) then DXTimer.Enabled := True;
end;
 
procedure TMainForm.DXDrawFinalize(Sender: TObject);
begin
DXTimer.Enabled := False;
if Assigned(DXTimer) then DXTimer.Enabled := False;
end;
 
procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
376,13 → 373,12
{var
i, j: Integer;}
begin
Enemys := TStringList.create;
sleep(500);
//PlayerSprite
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := mainform.ImageList.Items.Find('Star3');
Image := MainForm.GetSpriteGraphic(smgStar3);
Z := -13;
Y := 40;
Tile := True;
390,7 → 386,7
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := mainform.ImageList.Items.Find('Star2');
Image := MainForm.GetSpriteGraphic(smgStar2);
Z := -12;
Y := 30;
Tile := True;
398,7 → 394,7
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := mainform.ImageList.Items.Find('Star1');
Image := MainForm.GetSpriteGraphic(smgStar1);
Z := -11;
Y := 10;
Tile := True;
406,7 → 402,7
with TBackground.Create(SpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := mainform.ImageList.Items.Find('Matrix');
Image := MainForm.GetSpriteGraphic(smgMatrix);
Z := -10;
Tile := True;
end;
462,18 → 458,23
mainform.Visible := true;
end;
 
procedure TMainForm.MitarbeiterClick(Sender: TObject);
procedure TMainForm.RefreshFromLevData;
var
i: integer;
begin
if not fileexists(mainform.fdirectory+'Texte\Mitwirkende.txt') then
MainForm.ScrollBar.Max := MainForm.LevData.LevelEditorLength;
for i := 0 to MainForm.LevData.CountEnemies - 1 do
begin
MessageDLG('Die Datei "Texte\Mitwirkende.txt" ist nicht mehr vorhanden. Die Aktion wird abgebrochen!',
mtWarning, [mbOK], 0);
end
else
begin
TextForm.memo1.lines.loadfromfile(mainform.FDirectory+'Texte\Mitwirkende.txt');
TextForm.showmodal;
MainForm.EnemyCreateSprite(
MainForm.LevData.EnemyAdventTable[i].x,
MainForm.LevData.EnemyAdventTable[i].y,
MainForm.LevData.EnemyAdventTable[i].enemyType,
MainForm.LevData.EnemyAdventTable[i].lifes
);
end;
MainForm.NumEnemys := MainForm.LevData.CountEnemies;
MainForm.Boss := MainForm.LevData.HasBoss;
AnzeigeAct;
end;
 
procedure TMainForm.LevelClick(Sender: TObject);
481,18 → 482,82
speicherungform.showmodal;
end;
 
procedure TMainForm.Leveltesten1Click(Sender: TObject);
var
sav: TSaveData;
tmp: string;
begin
KillTask(SpaceMissionExe);
 
sav := TSaveData.Create;
try
sav.Score := 0;
sav.Life := 6;
if Assigned(SpeicherungForm) then
sav.Level := SpeicherungForm.LevelNumber.Value
else
sav.Level := 1;
sav.GameMode := gmLevels;
sav.LevelData := TlevelData.Create;
sav.LevelData.Assign(LevData);
tmp := GetTestlevelFilename;
sav.SaveToFile(tmp);
ShellExecute(Handle, 'open', PChar(OwnDirectory+SpaceMissionExe), PChar('"'+tmp+'"'), PChar(OwnDirectory), SW_NORMAL); // do not localize
finally
FreeAndNil(sav);
end;
end;
 
procedure TMainForm.FormShow(Sender: TObject);
begin
if Assigned(SplashForm) then
begin
SplashForm.Hide;
SplashForm.Free;
FreeAndNil(SplashForm);
end;
 
dxtimer.Enabled := true;
dxtimer.ActiveOnly := true;
end;
 
function TMainForm.GetSpriteGraphic(
Sprite: TSpaceMissionGraphicSprite): TPictureCollectionItem;
begin
if (Sprite<>smgNone) and (imagelist.Items.Count >= Ord(Sprite)) then
result := imagelist.Items.Items[Ord(Sprite)-1]
else
result := nil;
end;
 
function TMainForm.GetTestlevelFilename: string;
begin
result := IncludeTrailingPathDelimiter(TPath.GetTempPath) + 'SpaceMissionTest.sav'; // do not localize
end;
 
procedure TMainForm.HilfeTopicClick(Sender: TObject);
// Please keep this code in-sync with GamMain.pas
var
bakTimerEnabled: boolean;
begin
bakTimerEnabled := dxtimer.Enabled;
try
dxtimer.Enabled := false;
HilfeForm.Caption := TMenuItem(Sender).Caption;
HilfeForm.Caption := StringReplace(HilfeForm.Caption, '&&', #1, [rfReplaceAll]);
HilfeForm.Caption := StringReplace(HilfeForm.Caption, '&', '', [rfReplaceAll]);
HilfeForm.Caption := StringReplace(HilfeForm.Caption, #1, '&', [rfReplaceAll]);
HilfeForm.ShowMarkDownHelp(OwnDirectory+TMenuItem(Sender).Hint);
HilfeForm.ShowModal;
finally
dxtimer.Enabled := bakTimerEnabled;
end;
end;
 
procedure TMainForm.InformationenClick(Sender: TObject);
begin
mainform.dxtimer.enabled := false;
InfoForm.showmodal;
mainform.dxtimer.enabled := true;
end;
 
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
504,31 → 569,33
procedure TMainForm.DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
i, j, k, l, ex, ey: integer;
i: TEnemyType;
j, k, l, ex, ey: integer;
ok, breaked: boolean;
begin
ex := trunc(x/RasterW) * RasterW;
ey := trunc(y/RasterH) * RasterH;
EnemyCreate(ex, ey);
ex := trunc(x/LevEditRasterW) * LevEditRasterW;
ey := trunc(y/LevEditRasterH) * LevEditRasterH;
EnemyCreateSprite(ex, ey, SelectedEnemyType, LivesEdit.Value);
breaked := false;
{ Setzen }
if Button = mbLeft then
begin
ok := true;
if (ArtChecked = 7) and boss then ok := false
if (SelectedEnemyType = etEnemyBoss) and boss then
ok := false // boss already exists
else
begin
for i := 1 to 7 do
for i := Low(TEnemyType) to High(TEnemyType) do
begin
for j := 0 to 999 do
for j := 0 to MaxPossibleEnemyLives do
begin
if boss then
begin
for k := 0 to 3 do
for k := 0 to BossWidth-1 do
begin
for l := 0 to 1 do
for l := 0 to BossHeight-2 do
begin
if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':7('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + ((ScrollP - k) * LevEditRasterW), ey - (LevEditRasterH * l), etEnemyBoss, j) <> -1 then
begin
ok := false;
break;
538,8 → 605,7
end;
if not ok then break;
end;
if Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(i)+'('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + (ScrollP * LevEditRasterW), ey, i, j) <> -1 then
begin
ok := false;
break;
550,14 → 616,12
end;
if ok then
begin
if ArtChecked <> 4 then
Enemys.Add(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(ArtChecked)+'('+inttostr(LiveEdit)+')')
if EnemyTypeHasLives(SelectedEnemyType) then
LevData.AddEnemy(ex + (ScrollP * LevEditRasterW), ey, SelectedEnemyType, LivesEdit.Value)
else
Enemys.Add(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(ArtChecked)+'(0)');
LevData.AddEnemy(ex + (ScrollP * LevEditRasterW), ey, SelectedEnemyType, 0);
inc(NumEnemys);
if ArtChecked = 7 then boss := true;
if SelectedEnemyType = etEnemyBoss then boss := true;
end
else beep;
end
564,19 → 628,19
{ Löschen }
else if Button = mbRight then
begin
for i := 1 to 7 do
for i := Low(TEnemyType) to High(TEnemyType) do
begin
for j := 0 to 999 do
for j := 0 to MaxPossibleEnemyLives do
begin
if boss and (i = 7) then
if boss and (i = etEnemyBoss) then
begin
for k := 0 to 3 do
for k := 0 to BossWidth - 1 do
begin
for l := 0 to 1 do
for l := 0 to BossHeight - 1 do
begin
if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + ((ScrollP - k) * LevEditRasterW), ey - (LevEditRasterH * l), i, j) <> -1 then
begin
Enemys.Delete(Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')'));
LevData.DeleteEnemy(ex + ((ScrollP - k) * LevEditRasterW), ey - (LevEditRasterH * l), i, j);
Boss := false;
dec(NumEnemys);
breaked := true;
586,12 → 650,10
if breaked then break;
end;
end;
if Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(i)+'('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + (ScrollP * LevEditRasterW), ey, i, j) <> -1 then
begin
Enemys.Delete(Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+
':'+inttostr(i)+'('+inttostr(j)+')'));
if i = 7 then Boss := false;
LevData.DeleteEnemy(ex + (ScrollP * LevEditRasterW), ey, i, j);
if i = etEnemyBoss then Boss := false;
dec(NumEnemys);
breaked := true;
break;
605,26 → 667,20
end;
 
procedure TMainForm.EnemyClick(Sender: TObject);
var
et: TEnemyType;
begin
if sender = Enemy1 then ArtChecked := 1;
if sender = Enemy2 then ArtChecked := 2;
if sender = Enemy3 then ArtChecked := 3;
if sender = Enemy4 then ArtChecked := 4;
if sender = Enemy5 then ArtChecked := 5;
if sender = Enemy6 then ArtChecked := 6;
if sender = Enemy7 then ArtChecked := 7;
Image1.Left := -(87 * (ArtChecked - 1)) + 1;
Lives.Enabled := sender <> Enemy4;
LivesLabel.Enabled := sender <> Enemy4;
if sender = Enemy4 then LivesEdt.Font.Color := clBtnShadow // andere farbe?
else LivesEdt.Font.Color := clWindowText;
et := SelectedEnemyType;
Image1.Left := -(87 * (Ord(et) - 1)) + 1;
LivesEdit.Enabled := EnemyTypeHasLives(et);
LivesLabel.Enabled := EnemyTypeHasLives(et);
end;
 
procedure TMainForm.EnemyCreate(x, y: integer);
procedure TMainForm.EnemyCreateSprite(x, y: integer; AEnemyType: TEnemyType; ALives: integer);
var
Enemy: TSprite;
begin
Enemy := TEnemy.Create(SpriteEngine.Engine);
Enemy := TEnemyOrItem.Create(SpriteEngine.Engine, AEnemyType, ALives);
Enemy.x := x;
Enemy.y := y;
end;
631,76 → 687,107
 
procedure TMainForm.DestroyLevel;
begin
ScrollBar.Position := 0;
Enemys.Clear;
ScrollBar.Position := 0; // this doesn't call ScrollBarScroll()
ScrollP := 0;
LevData.Clear;
ScrollBar.Max := LevData.LevelEditorLength;
NumEnemys := 0;
Boss := false;
LevChanged := true;
Lives.Position := 1;
LivesChange(Lives.Position);
LivesEdit.Value := 1;
Enemy1.Checked := true;
EnemyClick(Enemy1);
AnzeigeAct;
end;
 
procedure TMainForm.AlleLeveldateienaktualisieren1Click(Sender: TObject);
var
i: integer;
begin
// Just for internal/development purposes
for i := 1 to MaxPossibleLevels do
begin
if FileExists('Levels\Level '+IntToStr(i)+'.lev') then
begin
LevData.RasterErzwingen := true;
LevData.LoadFromFile('Levels\Level '+IntToStr(i)+'.lev');
LevData.SaveToFile('Levels\Level '+IntToStr(i)+'.lev');
end;
end;
end;
 
procedure TMainForm.AnzeigeAct;
resourcestring
SYes = 'Ja';
SNo = 'Nein';
begin
SLabel1b.Caption := inttostr(NumEnemys);
if Boss then SLabel2b.Caption := 'Ja' else SLabel2b.Caption := 'Nein';
if Boss then SLabel2b.Caption := SYes else SLabel2b.Caption := SNo;
SLabel3b.Caption := inttostr(ScrollBar.Max);
if LevChanged then
begin
SLabel4a.Font.Color := $00000096;
SLabel4b.Font.Color := $00000096;
SLabel4b.Caption := 'Nein';
SLabel4b.Caption := SNo;
end
else
begin
SLabel4a.Font.Color := $00009600;
SLabel4b.Font.Color := $00009600;
SLabel4b.Caption := 'Ja';
SLabel4b.Caption := SYes;
end;
end;
 
procedure TMainForm.EnemyAdd(x, y, art, lives: integer);
procedure TMainForm.AufUpdatesprfen1Click(Sender: TObject);
begin
Enemys.Add(inttostr(x)+'-'+inttostr(y)+':'+inttostr(art)+'('+inttostr(lives)+')');
CheckForUpdates('spacemission', ProgramVersion); // do not localize
end;
 
procedure TMainForm.NeuClick(Sender: TObject);
resourcestring
SReallyDeleteLevel = 'Level wirklich löschen?';
begin
if MessageDlg('Level wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
if MessageDlg(SReallyDeleteLevel, mtConfirmation, mbYesNoCancel, 0) = mrYes then
DestroyLevel;
end;
 
procedure TMainForm.DXDrawMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
resourcestring
status_lives = 'Leben: ';
status_nolives = 'Einheit hat keine Lebensangabe';
SUnknownEnemyType = '???';
var
ex, ey, i, j, k, l, wert: integer;
i: TEnemyType;
ex, ey, j, k, l: integer;
lifes: integer;
enemyType: TEnemyType;
enemyName: string;
breaked: boolean;
begin
if sender <> DxDraw then
begin
StatusBar.SimpleText := status_info;
StatusBar.SimpleText := ' ' + status_info;
exit;
end;
ex := trunc(x/RasterW) * RasterW;
ey := trunc(y/RasterH) * RasterH;
wert := -1;
ex := trunc(x/LevEditRasterW) * LevEditRasterW;
ey := trunc(y/LevEditRasterH) * LevEditRasterH;
lifes := -1;
enemyType := etUnknown;
breaked := false;
for i := 1 to 7 do
for i := Low(TEnemyType) to High(TEnemyType) do
begin
for j := 0 to 999 do
for j := 0 to MaxPossibleEnemyLives do
begin
if boss and (i = 7) then
if boss and (i = etEnemyBoss) then
begin
for k := 0 to 3 do
for k := 0 to BossWidth - 1 do
begin
for l := 0 to 1 do
for l := 0 to BossHeight - 1 do
begin
if Enemys.IndexOf(floattostr(ex + ((ScrollP - k) * RasterW))+'-'+floattostr(ey - (RasterH * l))+':'+inttostr(i)+'('+inttostr(j)+')') <> -1 then
if LevData.IndexOfEnemy(ex + ((ScrollP - k) * LevEditRasterW), ey - (LevEditRasterH * l), i, j) <> -1 then
begin
wert := j;
lifes := j;
breaked := true;
break;
end;
708,10 → 795,10
if breaked then break;
end;
end;
if (breaked = false) and (Enemys.IndexOf(floattostr(ex + (ScrollP * RasterW))+'-'+floattostr(ey)+':'+
inttostr(i)+'('+inttostr(j)+')') <> -1) then
if (breaked = false) and (LevData.IndexOfEnemy(ex + (ScrollP * LevEditRasterW), ey, i, j) <> -1) then
begin
wert := j;
lifes := j;
enemyType := i;
breaked := true;
break;
end;
718,29 → 805,34
end;
if breaked then break;
end;
if wert <> -1 then
if lifes <> -1 then
begin
if wert > 0 then
StatusBar.SimpleText := status_lives + inttostr(wert)
if Ord(enemyType) = 1 then enemyName := Enemy1.Caption
else if Ord(enemyType) = 2 then enemyName := Enemy2.Caption
else if Ord(enemyType) = 3 then enemyName := Enemy3.Caption
else if Ord(enemyType) = 4 then enemyName := Enemy4.Caption
else if Ord(enemyType) = 5 then enemyName := Enemy5.Caption
else if Ord(enemyType) = 6 then enemyName := Enemy6.Caption
else if Ord(enemyType) = 7 then enemyName := Enemy7.Caption
else if Ord(enemyType) = 8 then enemyName := Enemy8.Caption
else enemyName := SUnknownEnemyType;
if lifes > 0 then
StatusBar.SimpleText := ' ' + enemyName + ' - ' + status_lives + inttostr(lifes)
else
StatusBar.SimpleText := status_nolives;
StatusBar.SimpleText := ' ' + enemyName + ' - ' + status_nolives;
end
else
StatusBar.SimpleText := status_info;
StatusBar.SimpleText := ' ' + status_info;
end;
 
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
resourcestring
SExitWithoutSave = 'Beenden ohne abspeichern?';
begin
if LevChanged then
CanClose := MessageDlg('Beenden ohne abspeichern?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
if Assigned(LevData) and LevChanged and (LevData.CountEnemies>0) then
CanClose := MessageDlg(SExitWithoutSave, mtConfirmation, mbYesNoCancel, 0) = mrYes;
end;
 
procedure TMainForm.Quelltext1Click(Sender: TObject);
begin
SourceForm.Aktualisieren;
SourceForm.showmodal;
end;
 
procedure TMainForm.Spielfelderweitern1Click(Sender: TObject);
begin
LevelForm.Aktualisieren;
753,28 → 845,18
ScrollP := ScrollPos;
end;
 
procedure TMainForm.LivesChange(newval: integer);
function TMainForm.SelectedEnemyType: TEnemyType;
begin
LiveEdit := newval;
livesedt.Text := inttostr(LiveEdit);
lives.Position := newval;
if Enemy1.Checked then result := etEnemyAttacker
else if Enemy2.Checked then result := etEnemyAttacker2
else if Enemy3.Checked then result := etEnemyAttacker3
else if Enemy4.Checked then result := etEnemyMeteor
else if Enemy5.Checked then result := etEnemyUFO
else if Enemy6.Checked then result := etEnemyUFO2
else if Enemy7.Checked then result := etEnemyBoss
else if Enemy8.Checked then result := etItemMedikit
else result := etUnknown;
end;
 
procedure TMainForm.LivesClick(Sender: TObject; Button: TUDBtnType);
begin
LivesChange(lives.Position);
end;
 
procedure TMainForm.LivesEdtKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in [#13, #08, '0'..'9']) then
Key := #0;
end;
 
procedure TMainForm.LivesEdtChange(Sender: TObject);
begin
LivesChange(strtoint(livesedt.text));
end;
 
end.
 
/SpaceMission.dpr
1,34 → 1,43
program SpaceMission;
 
{$Description 'SpaceMission 1.1'}
 
uses
Windows,
{$IF CompilerVersion >= 23.0}
System.UITypes,
{$IFEND }
Forms,
Dialogs,
SysUtils,
MMSystem,
SplMain in 'SplMain.pas' {MainForm},
SplText in 'SplText.pas' {TextForm},
SplSplash in 'SplSplash.pas' {SplashForm},
SplSpeicherung in 'SplSpeicherung.pas' {SpeicherungForm},
SplInfo in 'SplInfo.pas' {InfoForm},
SplCheat in 'SplCheat.pas' {CheatForm};
GamMain in 'GamMain.pas' {MainForm},
GamSplash in 'GamSplash.pas' {SplashForm},
GamSpeicherung in 'GamSpeicherung.pas' {SpeicherungForm},
ComInfo in 'ComInfo.pas' {InfoForm},
GamCheat in 'GamCheat.pas' {CheatForm},
ComLevelReader in 'ComLevelReader.pas',
Global in 'Global.pas',
ComHilfe in 'ComHilfe.pas' {HilfeForm};
 
{$R *.RES}
 
var
Fehler: boolean;
Sem: THandle;
directory: string;
 
resourcestring
SAlreadyStarted = 'Das Spiel wurde bereits gestartet.';
STitel = 'SpaceMission';
SFileMissing = '%s fehlt. Bitte installieren Sie SpaceMission erneut.';
 
const
SemaphoreName = 'SpaceMission';
 
begin
SpaceMission_SwitchLanguage;
{ Programm schon gestartet? }
Sem := CreateSemaphore(nil, 0, 1, 'SpaceMission');
Sem := CreateSemaphore(nil, 0, 1, SemaphoreName);
if (Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then
begin
CloseHandle(Sem);
MessageDlg('Das Spiel wurde bereits gestartet.', mtInformation, [mbOK], 0);
MessageDlg(SAlreadyStarted, mtInformation, [mbOK], 0);
exit;
end;
SplashForm := TSplashForm.Create(Application);
35,38 → 44,19
SplashForm.Show;
SplashForm.Update;
Application.Initialize;
Application.showmainform := False;
Application.Title := 'SpaceMission';
{ Dateien vorhanden? }
Fehler := false;
directory := extractfilepath(paramstr(0));
if not fileexists(directory+'Bilder\Delphi.bmp') then Fehler := true;
if not fileexists(directory+'Bilder\SplSplash.jpg') then Fehler := true;
if not fileexists(directory+'DirectX\Graphic.dxg') then Fehler := true;
if not fileexists(directory+'DirectX\Sound.dxw') then Fehler := true;
if not fileexists(directory+'Musik\Boss.mid') then Fehler := true;
if not fileexists(directory+'Musik\Game.mid') then Fehler := true;
if not fileexists(directory+'Musik\Scene.mid') then Fehler := true;
if not fileexists(directory+'Musik\Title.mid') then Fehler := true;
//if not fileexists(directory+'Texte\Mitwirkende.txt') then Fehler := true;
if Fehler then
Application.ShowMainform := False;
Application.MainFormOnTaskBar := true;
Application.Title := STitel;
if not fileexists(OwnDirectory+DxgFile) then
begin
MessageDLG('Dateien, die die Programmstabilität gewährleisten, sind ' +
'nicht mehr vorhanden!'+#13#10+'Bitte installieren Sie SpaceMission erneut...',
mtWarning, [mbOK], 0);
MessageDLG(Format(SFileMissing, [DxgFile]), mtError, [mbOK], 0);
exit;
end;
{ Keine Soundkarte?! }
if WaveOutGetNumDevs < 1 then
MessageDlg('Es wurde keine Soundkarte gefunden!' + #13#10 +
'Entweder ist keine Soundkarte angeschlossen oder sie ist nicht ' +
'ordnungsgemäß installiert.' + #13#10 + 'Es können daher keine Musik und ' +
'keine Geräusche abgespielt werden.', mtError, [mbOK], 0);
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TTextForm, TextForm);
Application.CreateForm(TSpeicherungForm, SpeicherungForm);
Application.CreateForm(TInfoForm, InfoForm);
Application.CreateForm(TCheatForm, CheatForm);
Application.CreateForm(THilfeForm, HilfeForm);
Application.Run;
end.
 
/SpaceMission.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/.gitignore
0,0 → 1,36
# https://github.com/github/gitignore/blob/main/Delphi.gitignore
 
# Delphi compiler-generated binaries (safe to delete)
*.bpl
*.bpi
*.dcp
*.drc
*.map
*.dres
*.rsm
*.tds
*.dcu
*.lib
 
# Delphi autogenerated files (duplicated info)
*.cfg
*.hpp
*Resource.rc
 
# Delphi local files (user-specific info)
*.local
*.identcache
*.projdata
*.tvsconfig
*.dsk
 
# Delphi history and backups
__history/
__recovery/
*.~*
 
# Castalia statistics file (since XE7 Castalia is distributed with Delphi)
*.stat
 
# English binary
.ENU
/ComInfo.dfm
0,0 → 1,190
object InfoForm: TInfoForm
Left = 289
Top = 184
BorderStyle = bsDialog
Caption = 'Informationen'
ClientHeight = 343
ClientWidth = 384
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poMainFormCenter
OnCreate = FormCreate
DesignSize = (
384
343)
TextHeight = 13
object HomeLbl: TLabel
Left = 32
Top = 136
Width = 48
Height = 13
Caption = 'Webseite:'
Transparent = True
end
object Image: TImage
Left = 8
Top = 8
Width = 65
Height = 57
Center = True
Picture.Data = {
07544269746D617076020000424D760200000000000076000000280000002000
0000200000000100040000000000000200000000000000000000100000000000
000000000000000080000080000000808000800000008000800080800000C0C0
C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF
FF00000000000000000000000000000000000EE8787878EEEEEEE03F30878EEE
EEE00EE8787878EEEEEEE03F30878EEEEEE00EE8787878EEEEEEE03F30878EEE
EEE00EE8787878EEEEEEE03F30878EEEEEE00887787877788888803F3088787E
EEE00788787878878887803F3088887EEEE00788887888878887803F3088887E
EEE00877888887788888703F308887EEEEE00888777778888888037883088888
8EE007777777777777703787883087777EE00888888888888803787378830888
8880088888888888803787378788308888800777777777880378737373788308
88E00888888888803787373737378830EEE00887777778800001111111111100
EEE00888888888888899B999B99999EEEEE00888888888888899B9B99BB9B9EE
EEE0088888888888899BB9BB99BB99EEEEE0078888888888899B999B999999EE
EEE0087788888778899B9B9BB9BB99EEEEE00888778778888E9B9B9BB9999EEE
EEE0088888788888EE9B99B9BB9BEEEEEEE00EE8888888EEEEE999B9999EEEEE
EEE00EEEE888EEEEEEEE99BB999EEEEEEEE00EEEEE8EEEEEEEEEE999B9EEEEEE
EEE00EEEEE8EEEEEEEEEEEE999EEEEEEEEE00EEEEE8EEEEEEEEEEEEE99EEEEEE
EEE00EEEEE8EEEEEEEEEEEEE9EEEEEEEEEE00EEEEE8EEEEEEEEEEEEEEEEEEEEE
EEE00EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00000000000000000000000000000
0000}
Stretch = True
end
object FirmaLbl: TLabel
Left = 88
Top = 8
Width = 74
Height = 13
Caption = 'ViaThinkSoft'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
Transparent = True
end
object NameLbl: TLabel
Left = 104
Top = 24
Width = 66
Height = 13
Caption = 'SpaceMission'
Transparent = True
end
object VersionLbl: TLabel
Left = 232
Top = 24
Width = 35
Height = 13
Caption = 'Version'
Transparent = True
end
object EMailLbl: TLabel
Left = 32
Top = 120
Width = 32
Height = 13
Caption = 'E-Mail:'
Transparent = True
end
object CopyrightLbl: TLabel
Left = 8
Top = 80
Width = 264
Height = 13
Caption = #169' Copyright 2001 - 2024 Daniel Marschall, ViaThinkSoft'
Transparent = True
end
object Copyright2Lbl: TLabel
Left = 8
Top = 96
Width = 117
Height = 13
Caption = 'Alle Rechte vorbehalten!'
Transparent = True
end
object URL2: TLabel
Left = 152
Top = 136
Width = 117
Height = 13
Cursor = crHandPoint
Caption = 'www.daniel-marschall.de'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
Transparent = True
OnClick = WebsiteClick
end
object URL1: TLabel
Left = 152
Top = 120
Width = 118
Height = 13
Cursor = crHandPoint
Caption = 'info@daniel-marschall.de'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
Transparent = True
OnClick = EMailClick
end
object OkBtn: TButton
Left = 273
Top = 310
Width = 107
Height = 25
Anchors = [akRight, akBottom]
Cancel = True
Caption = 'OK'
Default = True
TabOrder = 0
OnClick = OkBtnClick
end
object MemoMitwirkende: TMemo
Left = 8
Top = 168
Width = 372
Height = 128
Anchors = [akLeft, akTop, akRight, akBottom]
Lines.Strings = (
'SpaceMission wurde von Daniel Marschall auf Basis eines Codebeis' +
'piels '
'von Hiroyuki Hori f'#252'r DelphiX 2000 entwickelt.'
''
'Entwickelt mit Embarcadero Delphi.'
'Setup erstellt mit InnoSetup.'
'Sicherheitszertifikat von HickelSOFT Huth GmbH.'
''
'Verwendete Komponenten: (un)DelphiX'
'Quellcode: http://www.micrel.cz/Dx/'
'(C) Copyright 1996-2000 by Hiroyuki Hori'
'(C) Copyright 2004-2023 by Jaro Benes.'
''
'sowie Delphi MarkDown'
'Quellcode: https://github.com/grahamegrieve/delphi-markdown'
'(c) 2011+, Health Intersections Pty Ltd'
'Apache 2.0 Lizenz'
''
'Musik von Savage Peachers Software.'
'Sound- und Grafikquellen unbekannt.'
'Levels von Daniel Marschall, Patrick B'#252'ssecker und Andreas '
'K'#252'belsbeck.')
ReadOnly = True
ScrollBars = ssVertical
TabOrder = 1
end
end
/GamMain.dfm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Help/DE_Changelog.md
0,0 → 1,74
# Changelog
 
SpaceMission 1.2.2:
- BUGFIX: Items können nun auch eingesammelt werden, wenn man einen infinite lives Cheat aktiviert hat
- BUGFIX: Fehlerkorrektur bei der Anzeige der restlichen Einheiten bei Missionsende
- Übersetzung des Spiels von Deutsch nach Englisch.
 
SpaceMission 1.2.1:
- Neue Einheit: Medikit Item
- Zufallslevel:
- Alle 250 Einheiten erhält man ein Medikit
- Ab Level 25 steigt die Anzahl an auftretenden stärkeren Gegnertypen
- BUGFIX: Nach dem der Boss besiegt wurde, war die angezeigte Gegner-Anzeige eins zu wenig oder ist verschwunden
- BUGFIX: Leveleditor Speicherndialog Frage "Level ersetzen?" Abfrage kommt nun wieder, wenn man ein Selbsterstelltes Level überschreiben möchte
- BUGFIX: Die Geschwindigkeitseinstellung im Menü wurde falsch angezeigt, wenn das Spiel gestartet wurde
- BUGFIX: Zufallslevel: Manche Einheiten sind nicht aufgetaucht, da sie zu weit unten generiert wurden. Korrigiert.
- Mit einer Registry-Änderung kann die Geschwindigkeit nun beliebig eingestellt werden. Registry Schlüssel "Computer\HKEY_CURRENT_USER\Software\ViaThinkSoft\SpaceMission\Settings", Schalter "GameSpeed". Standardwerte: Leicht 10, Mittel 16, Schwer 22, Meister 33.
 
SpaceMission 1.2:
- Inhaltliche Änderungen am Spiel:
- Boss besiegen gibt nun 10.000 Punkte anstelle 1.000
- "Neu starten" Menüpunkt startet nun das Level neu mit den bei Levelstart vorhandenen Punkten und Leben, anstelle von ganz vorne neu zu beginnen
- Anzeige Restliche Einheiten ist nun Einzeige Einheiten gesamt, d.h. auch die, die auf dem Bildschirm sind (außer Boss)
- Man kann nun nicht mehr "Game over" gehen. Das Level startet neu, wenn man gestorben ist.
- Aus technischen Gründen ist es nicht mehr möglich zu speichern, wenn die Anzeige "Level ..., Weiter mit Leertaste" kommt. Man kann jedoch das Level starten und sofort dann mit F4 speichern.
- Zufallslevel:
- Ab sofort 1 Einheit weniger pro Level
- Ab sofort Level 1-4 ohne Boss, Level 5-9 mit Boss am Ende, und ab Level 10 Boss in der Mitte vom Level
- Bei höheren Levels ist die Lebensenergie von Gegnern nun auf 10 gedeckelt
- Attackierer 2 kommt nun häufiger vor
- Zufallslevel größer als Level 25 ist nun möglich.
- Änderungen am Level Editor:
- "Quelltext" Fenster entfernt
- Gegner-Typ-Name steht nun in der Statusleiste unten
- Der Leveleditor hat nun eine "Level testen" Funktion
- Technische Änderungen:
- Es wird nun DirectMusic anstelle MCI zum Abspielen von Musik verwendet. Der Klang ist besser und es gibt weniger Lags.
- Fenster sind nun in Bildschirm-Mitte und nicht mehr Desktop-Mitte (das macht einen Unterschied bei Multi-Monitor-Systemen).
- DPlayX.dll wird nicht länger geladen, sodass Windows 11 keine Warnung zeigt, dass DirectPlay nicht installiert ist
- Spielstände und eigene Levels werden in den Ordner "Gespeicherte Spiele" gesichert (anstelle in den mittlerweile geschützten Programmdateien-Ordner)
- Einstellungen werden in die Windows Registry gesichert anstelle in eine INI-Datei
- Quellcode stark verbessert und "redactored"
- Neue LEV und SAV Dateiformate.
- LEV und SAV Dateien teilen sich das gleiche Format.
- Es gibt keinen Zwang mehr, die Gegner nach X-Koordinaten zu sortieren.
- Jeder Gegner wird in einer einzelnen Zeile dargestellt; das Format ist daher sehr übersichtlich
- Spielstände beinhalten nun die Original-Leveldateien, sodass das wiederherzustellende Spiel exakt gleich aussieht
- Eigenschaften "Level-Name" und "Level Autor" hinzugefügt.
- "ESC" Taste pausiert das Spiel und öffnet das Menü
- "Level-Konverter" entfernt. Anstelle lesen das Level-Editor und das Spiel nun alle Formate seit SpaceMission 0.2 ein.
- Bugfix: Pause wurde nicht in Titelzeile geschrieben, wenn das Spiel pausiert wurde
- Bugfix: Wenn man pause gemacht hat und fenster wechselt und wieder zurückwechselt, wurde Pause aufgehoben.
- Bugfix: Zwei Fenster wurden in der Taskleiste angezeigt
- "Vollbild" und "Breitbild" Feature entfernt, da es nie richtig funktioniert hat
- Level Editor kann nun über das Hauptmenü aufgerufen werden
 
Version 1.1:
- Bugfixes
- Veröffentlichung als OpenSource
 
Version 1.0:
- Bugfixes
- Die erste vollständige Version von SpaceMission.
- Ein neuer Leveleditor wurde programmiert.
 
Version 0.4:
- Bugfixes
- Nun auch mit einem Leveleditor.
 
Version 0.3:
- Bugfixes
 
Version 0.2:
- Die erste Beta-Version von SpaceMission.
/Help/DE_General.md
0,0 → 1,98
# SpaceMission 1.2.1 Dokumentation
 
Bitte auch lesen: [Was ist neu in Version 1.2.2?](DE_Changelog.md)
 
## Beschreibung
SpaceMission ist ein klassisches Weltraumspiel, beidem Sie durch einen Kometenhagel fliegen,
UFOs und andere Raumschiffe abschießen müssen. Es gibt 31 Levels sowie
Zufallslevels, d.h. Levels die vom Computer durch Zufall erstellt werden.
Mit dem eingebauten Leveleditor können Sie auch Ihre eigenen Levels
erstellen. Viel Spaß mit SpaceMission.
 
### Gute Levels gesucht:
Wenn Sie gute Levels erstellt haben und diese in der nächsten Version veröffentlichen möchten,
senden Sie sie bitte per E-Mail an info@daniel-marschall.de
 
## Bedienung/Steuerung
### SpaceMission
Im Menü wählen Sie den Menüpunkt mit den Pfeiltasten aus. Drücken Sie die Leertaste,
um fortzufahren. Im Spiel steuern Sie das Raumschiff mit den Pfeiltasten. Mit der
Leertaste schießen Sie.
 
### Leveleditor
Wählen Sie rechts einen Einheitentyp aus, unten können Sie die Leben einstellen.
Kometen sind unzerstörbar und haben somit keine Leben. Anschließend setzen Sie mit
der Linken Maustaste eine Einheit auf das Spielfeld. Klicken Sie mit der rechten
Maustaste auf eine Einheit, um sie zu löschen. Wenn Sie die Leben einer Einheit löschen
möchten, müssen Sie sie löschen und wieder neu setzen.
 
## Spielstände
Vergessen Sie nicht, Ihren Spielstand zu sichern.
Sie können das Spiel sichern, sobald ein Level gestartet hat.
Im Spielstand sind Punktestand und Leben sowie eine Kopie des Levels gespeichert.
Punktestand und Leben beziehen sich auf den **Anfang** des Levels. Sie können
nicht in der Mitte eines Levels sichern.
 
## Quelltext
Der Quelltext des Spiels ist öffentlich. SpaceMission kann von jedem verändert
oder weiterentwickelt werden. Voraussetzung ist die Programmier-Umgebung Embarcadero Delphi.
 
Quelltext unter www.github.com/danielmarschall/spacemission
 
 
## Aufbau von Spielstand- und Leveldateien
Savegame- und Level-Dateien teilen das gleiche Format; eine Savedatei ist eine erweiterte Leveldatei.
 
[Beschreibung der OID auf OIDplus](https://hosted.oidplus.com/viathinksoft/?goto=oid%3A1.3.6.1.4.1.37476.2.8.1.1)
 
[1.3.6.1.4.1.37476.2.8.1.1]
Score ... (nur vorhanden wenn Datei ein Spielstand ist)
Lives ... (nur vorhanden wenn Datei ein Spielstand ist)
Level ... (nur vorhanden wenn Datei ein Spielstand ist)
Mode ... (nur vorhanden wenn Datei ein Spielstand ist; 1=Normal, 2=Zufall)
Name ...
Author ...
Width ... (Standard 1200; nur für Leveleditor relevant)
Enemy <Typ> <XCoord> <YCoord> <Leben>
Enemy <Typ> <XCoord> <YCoord> <Leben>; Kommentarzeile am Ende einer Gegner-Zeile
Enemy <Typ> <XCoord> <YCoord> <Leben>
Enemy ...
; Kommentar-Zeile
 
Anmerkungen:
- Alle Level-Dateien müssen den Namen "Level [Level-Nr].lev" haben, bzw. alle Spielstanddateien müssen "[Name].sav" lauten.
- Die Reihenfolge der Zeilen ist beliebig. Die erste Zeile muss jedoch exakt stimmen.
- Leere Zeilen sind erlaubt
- Das Schlüsselwort `Enemy` gilt sowohl für Gegner als auch für Items.
- `<Typ>` = Gegner Typ
 
* 1=Attackierer typ 1 (blau)
* 2=Attackierer typ 2 (braun)
* 3=Attackierer typ 3 (rot)
* 4=Meteor
* 5=UFO typ 1 (grün)
* 6=UFO typ 2 (orange)
* 7=Boss
* 8=Medikit
 
- `<XCoord>` = Gegner X-Koordinate (muss durch 48 teilbar sein, wenn Level mit Leveleditor bearbeitet werden soll)
- `<YCoord>` = Gegner Y-Koordinate (muss durch 32 teilbar sein, wenn Level mit Leveleditor bearbeitet werden soll)
- `<Leben>` = Gegner Leben (keine relevanz für Kometen und Items)
 
## Cheat
 
Bitte beachten Sie, dass die Verwendung von Cheats Ihnen den Spielspaß verderben kann!
 
Wenn Sie dennoch Cheats anwenden möchten:
 
- Cheat für unendliche Leben: Countrysänger der "Man in Black" in 1971 veröffentlicht hat.
 
## Lizenzbedingungen
 
Lizenziert unter den Bedingungen der Apache 2.0 Lizenz,
d.h. die Weitergabe ist ausdrücklich erwünscht!
 
## Autor
 
Homepage: www.daniel-marschall.de
E-Mail: info@daniel-marschall.de
/Help/EN_Changelog.md
0,0 → 1,74
# Changelog
 
SpaceMission 1.2.2:
- BUGFIX: Items can now also be collected if you have activated an infinite lives cheat
- BUGFIX: Bug fix when displaying remaining units at mission end
- Translation of the game from German to English.
 
SpaceMission 1.2.1:
- New unit: Medikit Item
- Random level:
- You get a Medikit every 250 units
- From level 25 onwards, the number of stronger enemy types that appear increases
- BUGFIX: After the boss was defeated, the displayed enemy display was one too few or disappeared
- BUGFIX: Level editor save dialog question "Replace level?" The query now appears again if you want to overwrite a self-created level
- BUGFIX: The speed setting in the menu was displayed incorrectly when starting the game
- BUGFIX: Random level: Some units didn't appear because they were generated too far down. Corrected.
- With a registry change, the speed can now be set as desired. Registry key "Computer\HKEY_CURRENT_USER\Software\ViaThinkSoft\SpaceMission\Settings", switch "GameSpeed". Default stats: Easy 10, Medium 16, Hard 22, Master 33.
 
Space Mission 1.2:
- Content changes to the game:
- Defeating a boss now gives 10,000 points instead of 1,000
- "Restart" menu item now restarts the level with the points and lives present at the start of the level, instead of starting over from the beginning
- Remaining units display is now showing total units, i.e. including those that are on the screen (except boss)
- You can no longer go “Game Over”. The level restarts when you die.
- For technical reasons it is no longer possible to save when the message "Level ..., continue with spacebar" appears. However, you can start the level and then immediately save it with F4.
- Random level:
- From now on 1 unit less per level
- From now on levels 1-4 without a boss, levels 5-9 with a boss at the end, and from level 10 a boss in the middle of the level
- At higher levels, the health of enemies is now capped at 10
- Attacker 2 now appears more frequently
- Random level greater than level 25 is now possible.
- Changes to the level editor:
- "Source code" window removed
- Enemy type name is now in the status bar at the bottom
- The level editor now has a "test level" function
- Technical changes:
- DirectMusic is now used instead of MCI to play music. The sound is better and there is less lag.
- Windows are now in the middle of the screen and no longer in the middle of the desktop (this makes a difference in multi-monitor systems).
- DPlayX.dll no longer loads, so Windows 11 does not show a warning that DirectPlay is not installed
- Saved games and custom levels are saved to the "Saved Games" folder (instead of the now protected Program Files folder)
- Settings are saved to the Windows registry instead of an INI file
- Source code greatly improved and redacted
- New LEV and SAV file formats.
- LEV and SAV files share the same format.
- There is no longer any need to sort enemies by X coordinates.
- Each enemy is displayed on a single line; The format is therefore very clear
- Savegames now include the original level files, so the game being restored looks exactly the same
- Added "Level Name" and "Level Author" properties.
- "ESC" key pauses the game and opens the menu
- "Level converter" removed. Instead, the level editor and the game now read all formats since SpaceMission 0.2.
- Bugfix: Pause was not written in the title bar when the game was paused
- Bug fix: If you took a break and changed windows and then changed back again, the break was canceled.
- Bugfix: Two windows were displayed in the taskbar
- Removed "Fullscreen" and "Widescreen" features as they never worked properly
- Level Editor can now be accessed from the main menu
 
Version 1.1:
- Bug fixes
- Publication as OpenSource
 
Version 1.0:
- Bug fixes
- The first full version of SpaceMission.
- A new level editor has been programmed.
 
Version 0.4:
- Bug fixes
- Now also with a level editor.
 
Version 0.3:
- Bug fixes
 
Version 0.2:
- The first beta version of SpaceMission.
/Help/EN_General.md
0,0 → 1,98
# SpaceMission 1.2.1 documentation
 
Please also read: [What's new in version 1.2.2?](EN_Changelog.md)
 
## Description
SpaceMission is a classic space game where you fly through a hail of comets,
Having to shoot down UFOs and other spaceships. There are 31 levels as well
Random levels, i.e. levels that are created by the computer by chance.
With the built-in level editor you can also create your own levels
create. Have fun with SpaceMission.
 
### Looking for good levels:
If you have created good levels and want to release them in the next version,
please send them by email to info@daniel-marschall.de
 
## Operation/control
### Space Mission
In the menu, select the menu item using the arrow keys. Press the space bar,
to continue. In the game you control the spaceship using the arrow keys. With the
Space bar shoot.
 
### Level editor
Select a unit type on the right, you can set the lives below.
Comets are indestructible and therefore have no life. Then you place your bet
Place a unit on the field using the left mouse button. Right click
Click on a unit to delete it. When you delete a unit's lives
you have to delete them and reset them again.
 
## Scores
Don't forget to save your save.
You can save the game once a level has started.
The game saves your score and lives as well as a copy of the level.
Scores and lives refer to the **beginning** of the level. You can
do not save in the middle of a level.
 
## Source code
The game's source code is public. SpaceMission can be modified by anyone
or be further developed. The prerequisite is the Embarcadero Delphi programming environment.
 
Source code at www.github.com/danielmarschall/spacemission
 
 
## Creation of savegame and level files
Savegame and level files share the same format; a save file is an extended level file.
 
[Description of the OID on OIDplus](https://hosted.oidplus.com/viathinksoft/?goto=oid%3A1.3.6.1.4.1.37476.2.8.1.1)
 
[1.3.6.1.4.1.37476.2.8.1.1]
Score ... (only available if file is a score)
Lives ... (only available if file is a saved game)
Level ... (only available if file is a saved game)
Mode ... (only available if file is a saved game; 1=Normal, 2=Random)
Name ...
Author ...
Width ... (default 1200; only relevant for level editor)
Enemy <Type> <XCoord> <YCoord> <Life>
Enemy <Type> <XCoord> <YCoord> <Life>; Comment line at the end of an opponent line
Enemy <Type> <XCoord> <YCoord> <Life>
Enemy ...
; Comment line
 
Remarks:
- All level files must have the name "Level [Level-Nr].lev" or all save files must be named "[Name].sav".
- The order of the lines is arbitrary. However, the first line must be exactly correct.
- Empty lines are allowed
- The keyword 'Enemy' applies to both enemies and items.
- `<Type>` = enemy type
 
* 1=Attacker type 1 (blau)
* 2=Attacker type 2 (braun)
* 3=Attacker type 3 (rot)
* 4=Meteor
* 5=UFO type 1 (green)
* 6=UFO type 2 (orange)
* 7=Boss
* 8=Medikit
 
- `<XCoord>` = Enemy X coordinate (must be divisible by 48 if level is to be edited with level editor)
- `<YCoord>` = Enemy Y coordinate (must be divisible by 32 if level is to be edited with level editor)
- `<Life>` = enemy life (no relevance for comets and items)
 
##Cheat
 
Please note that using cheats can spoil your fun!
 
If you still want to use cheats:
 
- Cheat for Infinite Lives: Country singer who released "Man in Black" in 1971.
 
## License Terms
 
Licensed under the terms of the Apache 2.0 License,
i.e. sharing is expressly desired!
 
## Author
 
Homepage: www.daniel-marschall.de
Email: info@daniel-marschall.de
/Help/Style.css
0,0 → 1,9
body {
color:#EEE;
background-color:#222;
font-family: Arial, Helvetica, sans-serif;
}
 
a:link, a:hover, a:active, a:visited {
color:yellow;
}
/LevMain.dfm
4,8 → 4,8
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'Leveleditor'
ClientHeight = 536
ClientWidth = 753
ClientHeight = 517
ClientWidth = 741
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
14,8 → 14,7
Font.Style = []
KeyPreview = True
Menu = MainMenu
OldCreateOrder = True
Position = poDesktopCenter
Position = poScreenCenter
Scaled = False
OnClose = FormClose
OnCloseQuery = FormCloseQuery
23,10 → 22,36
OnDestroy = FormDestroy
OnMouseMove = DXDrawMouseMove
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object ScrollBar: TScrollBar
Left = 0
Top = 480
Width = 632
Height = 17
Max = 1200
PageSize = 0
TabOrder = 0
OnScroll = ScrollBarScroll
end
object StatusBar: TStatusBar
Left = 0
Top = 498
Width = 741
Height = 19
Panels = <>
SimplePanel = True
OnMouseMove = DXDrawMouseMove
end
object SidePanel: TPanel
Left = 632
Top = 0
Width = 109
Height = 498
Align = alRight
BevelOuter = bvNone
TabOrder = 2
object Bevel1: TBevel
Left = 648
Left = 4
Top = 200
Width = 97
Height = 2
33,15 → 58,36
Shape = bsBottomLine
end
object Bevel2: TBevel
Left = 648
Left = 4
Top = 392
Width = 97
Height = 2
Shape = bsBottomLine
end
object Bevel3: TBevel
Left = 4
Top = 320
Width = 97
Height = 2
Shape = bsBottomLine
end
object LivesLabel: TLabel
Left = 8
Top = 332
Width = 33
Height = 13
Caption = 'Leben:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object SelLabel: TLabel
Left = 648
Top = 0
Left = 8
Top = 4
Width = 43
Height = 13
Caption = 'Auswahl:'
53,15 → 99,22
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object Bevel3: TBevel
Left = 648
Top = 320
Width = 97
Height = 2
Shape = bsBottomLine
object SLabel0: TLabel
Left = 8
Top = 400
Width = 84
Height = 13
Caption = 'Level-Information:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object SLabel1a: TLabel
Left = 652
Left = 8
Top = 424
Width = 47
Height = 13
68,8 → 121,16
Caption = 'Einheiten:'
OnMouseMove = DXDrawMouseMove
end
object SLabel1b: TLabel
Left = 76
Top = 424
Width = 6
Height = 13
Caption = '0'
OnMouseMove = DXDrawMouseMove
end
object SLabel2a: TLabel
Left = 652
Left = 8
Top = 440
Width = 26
Height = 13
76,16 → 137,8
Caption = 'Boss:'
OnMouseMove = DXDrawMouseMove
end
object SLabel1b: TLabel
Left = 720
Top = 424
Width = 6
Height = 13
Caption = '0'
OnMouseMove = DXDrawMouseMove
end
object SLabel2b: TLabel
Left = 720
Left = 76
Top = 440
Width = 22
Height = 13
92,22 → 145,8
Caption = 'Nein'
OnMouseMove = DXDrawMouseMove
end
object SLabel0: TLabel
Left = 648
Top = 400
Width = 84
Height = 13
Caption = 'Level-Information:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object SLabel3a: TLabel
Left = 652
Left = 8
Top = 456
Width = 32
Height = 13
115,7 → 154,7
OnMouseMove = DXDrawMouseMove
end
object SLabel3b: TLabel
Left = 720
Left = 76
Top = 456
Width = 24
Height = 13
123,7 → 162,7
OnMouseMove = DXDrawMouseMove
end
object SLabel4a: TLabel
Left = 652
Left = 8
Top = 480
Width = 60
Height = 13
137,7 → 176,7
OnMouseMove = DXDrawMouseMove
end
object SLabel4b: TLabel
Left = 720
Left = 76
Top = 480
Width = 22
Height = 13
150,26 → 189,12
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object LivesLabel: TLabel
Left = 648
Top = 332
Width = 33
Height = 13
Caption = 'Leben:'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnMouseMove = DXDrawMouseMove
end
object Enemy1: TRadioButton
Left = 652
Left = 8
Top = 24
Width = 73
Width = 93
Height = 17
Caption = 'Attackierer'
Caption = 'Angreifer Typ 1'
Checked = True
TabOrder = 0
TabStop = True
177,28 → 202,28
OnMouseMove = DXDrawMouseMove
end
object Enemy2: TRadioButton
Left = 652
Top = 48
Width = 82
Left = 8
Top = 44
Width = 93
Height = 17
Caption = 'Attackierer 2'
Caption = 'Angreifer Typ 2'
TabOrder = 1
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object Enemy3: TRadioButton
Left = 652
Top = 72
Width = 82
Left = 8
Top = 64
Width = 93
Height = 17
Caption = 'Attackierer 3'
Caption = 'Angreifer Typ 3'
TabOrder = 2
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object Enemy4: TRadioButton
Left = 652
Top = 96
Left = 8
Top = 84
Width = 55
Height = 17
Caption = 'Meteor'
207,8 → 232,8
OnMouseMove = DXDrawMouseMove
end
object Enemy5: TRadioButton
Left = 652
Top = 120
Left = 8
Top = 104
Width = 44
Height = 17
Caption = 'UFO'
217,8 → 242,8
OnMouseMove = DXDrawMouseMove
end
object Enemy6: TRadioButton
Left = 652
Top = 144
Left = 8
Top = 124
Width = 53
Height = 17
Caption = 'UFO 2'
227,8 → 252,8
OnMouseMove = DXDrawMouseMove
end
object Enemy7: TRadioButton
Left = 652
Top = 168
Left = 8
Top = 144
Width = 45
Height = 17
Caption = 'Boss'
236,93 → 261,5833
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object ScrollBar: TScrollBar
Left = 0
Top = 480
Width = 640
Height = 17
Max = 1200
PageSize = 0
TabOrder = 7
OnScroll = ScrollBarScroll
end
object SelPanel: TPanel
Left = 652
Left = 8
Top = 216
Width = 89
Height = 89
Color = clWhite
TabOrder = 8
TabOrder = 7
OnMouseMove = DXDrawMouseMove
object Image1: TImage
Left = 1
Top = 1
Width = 610
Width = 697
Height = 88
AutoSize = True
Picture.Data = {
07544269746D617056CF0200424D56CF0200000000003600000028000000B902
000058000000010018000000000020CF0200120B0000120B0000000000000000
0000FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFFD0D9FF93A9FF5B7A
FF3258FF1844FF113DFF113EFF113EFF113EFF113EFF113EFF113DFF113DFF23
4CFF4266FF728CFFA9BAFFF3F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F7FFA2B5
FF4D71FF0E3EFF0135FF0032FF0032FF0135FF0236FF0236FF0236FF0236FF02
36FF0236FF0236FF0236FF0034FF0033FF002FFF0538FF2A56FF7491FFC5D2FF
FCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFE9495A500003300003300003300003300003300003300
00330000330000330000330000330000330000330000339495A5FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFECF1FF8AA5FF3360FF0038FF0036FF003AFF013BFF023BFF023BFF023BFF02
3BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF023BFF
013AFF0038FF0033FF0C42FF557BFFB8C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEADADBB58587A58587A58587A31315A00003300003300
0033000048000048000048000048000048000048000048000048000048000048
00004831316358587A58587A58587A58587A757489FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE6B98730042080042080042080042080042084A
7B52FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE689AFF0052FA0052FA0052FA0052
FA0052FA4384FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFEFFFFC9D6FF557FFF013FFF003BFF0140FF0241FF0240FF02
40FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF0240FF
0240FF0240FF0240FF0240FF0240FF0241FF0241FF003EFF003AFF0743FF88A5
FFECF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE86899600003300003300
0033000033000033000033000048000048000048000048000048000048000048
0000480000480000480000480000480000480000330000330000330000332929
52FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEEDEDEDA5B58CA5B58CA5B58CA5B58C45744600420800
42080042080042080042082963318CAD948CAD948CAD948CAD94DADADBFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFA8CB5FF8CB5FF8CB5FF8CB5FF3377
FE0052FA0052FA0052FA0052FA0052FA266AFE8CB5FF8CB5FF8CB5FF8CB5FFD9
E7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FBFF7EA2FF0D4EFF0043FF0146FF02
47FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF
0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247FF0247
FF0247FF0247FF0045FF0041FF346AFFD7E2FFFEFEFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE868996000033000033000033000033000033000033000048000048000048
0000480000480000480000480000480000480000480000480000480000480000
48000048000033000033292952FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECAD6C831520031520031
5200315200174A00004208004208004208004208004208004208004208004208
004208004208A5BAA7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FAA5BDFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9F0FF6492FF00
45FF004CFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF
024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024E
FF024EFF024EFF024EFF024EFF024EFF024EFF024EFF024EFF0048FF1056FFA0
BDFFFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEDADADB000033000033000048000048000048000033000033000048
0000480000480000480000480000580000580000580000580000580000580000
58000058000058000058000048000048000048000048000048000033DADADBFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE526B2249631049631049
6310425A16315200315200315200315200174A00004208004208004208004208
0042080042080042080042080042080042080852181853211853211853211853
21F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE266AFE1663
FE1663FE1663FE1663FE0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA105AFE1663FE1663FE
1663FE1663FEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFE3EDFF2D72FF0050FF0254FF0255FF0255FF0255FF0255FF0255FF0255FF
0255FF0255FF0254FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052
FF0052FF0052FF0052FF0053FF0255FF0255FF0255FF0255FF0255FF0255FF02
55FF0255FF0255FF0051FF0152FF8FB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB58587A000048000048000048000048
0000480000480000480000480000480000480000580000580000580000580000
5800005800005800005800005800005800005800005800005800005800005800
005800004800003358587AADADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBC6A6BBC6A6BB
C6A6315200315200315200315200315200315200315200315200315200174A00
0042080042080042080042080042080042080042080042080042080042080042
080042080042082963315A8463F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9C6
FFA9C6FFA9C6FF105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA266AFE538CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFEEF4FF4084FF0057FF005BFF015CFF015CFF015CFF
015CFF015CFF015CFF015CFF015CFF015BFF025CFF1065FF1065FF1065FF1065
FF1065FF1065FF1065FF1065FF1065FF1065FF1065FF0961FF015BFF015CFF01
5CFF015CFF015CFF015CFF015CFF015CFF015CFF015CFF0059FF065CFF95BBFF
FEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEC6C8D658587A000033
0000580000580000580000580000580000480000480000480000480000480000
5800005800005800005800005800005800005800006D00006D00006D00006D00
006D00006D00005800005800005800004800003300003358587ACACACACACACA
EAEEFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEF7F7EF315200315200315200315200315200315200315200315200315200
315200315200315200174A000042080042080042080042080042080042080042
080042080042080042080042080042080042087BA984FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEEFF7FC0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA77A5FFFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF4FF5798FF005EFF0163FF
0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0060FF0F6C
FFE2EDFFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0F5FFF0
F5FF78ADFF0059FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF0163FF
0163FF0163FF0061FF0260FFA5C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE1818420000480000480000580000580000580000580000580000480000
4800004800004800005800005800005800005800005800005800005800005800
006D00006D00006D00006D00006D00006D000058000058000058000048000033
000033000033000033000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE9CA584547331315200315200315200315200315200
315200315200315200315200315200315200315200174A000042080042080042
080042080042080042080042080042080042080042080042080042080C2B0511
4816326639F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF3377FE0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004A
F7004AE9125AED3377FEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFF
72ADFF0063FF016AFF016BFF016BFF016BFF016BFF016BFF016BFF016BFF016B
FF016BFF016BFF0068FF1074FFF4F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF82B6FF0060FF016BFF016BFF016BFF016BFF
016BFF016BFF016BFF016BFF016BFF016BFF016BFF0067FF056BFFE1EDFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE948C8C5A635A
5A635A4E4E4E4E4E4E948C8CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE94
8C8C5A635A5A635A4E4E4E4E4E4E948C8CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFE948C8C5A635A5A635A4E4E4E4E4E4E948C8CFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE1818420000480000480000580000580000
5800005800005800004800004800004800004800005800005800005800005800
005800005800005800005800006D00006D00006D00006D00006D00006D000058
000058000058000048000048000033000033000033000033CACACAFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB7DBB96B8B38255A00315200
3152003152003152003152003152003152003152003152003152003152003152
00174A0000420800420800420800420800420800420800420800420800420800
42080042080042080C2B05004208004208B5C6B5D8EAD9FEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE538CFE10
5AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA004AF7004AE9004AE90052FAB5CEFFD9E7FEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFB5D7FF0573FF0072FF0173FF0173FF0173FF0173FF0173
FF0173FF0173FF0173FF0173FF0173FF0173FF0071FF107CFFF0F7FFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80B9FF0069FF
0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173FF0173
FF0173FF006EFF3D95FFF5FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
8686865A635A6E6E6E6E6E6E5A635A4E4E4E969696F7F7EFFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFE8686865A635A6E6E6E6E6E6E5A635A4E4E4E969696F7F7EFFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFE8686865A635A6E6E6E6E6E6E5A635A4E4E4E969696F7
F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADADBB73739473739400104A0000
4800005800006D00006D00006D00005800005800005800005800004800004800
005800005800005800005800005800005800005800006D00006D00006D00006D
00006D00006D00006D0000580000580000580000580000480000480000330000
3300003358587AADADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECEDED6
0084000084000084003152003152003152003152003152003152003152003152
00315200315200315200315200174A0000420800420800420800420800420800
42080042080042080042080042080042080042080C2B05004208004208004208
638C65FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFED9E7FE266AFE266AFE266AFE0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9004AE900
52FA0052FA689AFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF5FF1C89FF0077FF017BFF017B
FF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF017BFF00
79FF1083FFF0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFF80BDFF0072FF017BFF017BFF017BFF017BFF017BFF017BFF017B
FF017BFF017BFF017BFF017BFF017BFF017BFF0076FF92C7FFFCFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE6E6E6E8686868686866E6E6E6E6E6E6E6E6E5A635A5A635AA8A8A8F7F7
EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFE6E6E6E8686868686866E6E6E6E6E6E6E6E6E5A635A5A635A
A8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E8686868686866E6E6E6E6E6E6E6E6E5A
635A5A635AA8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB5858
7A00003300003300004800005800006D00006D00006D00006D00006D00005800
005800005800004800004800005800005800006D00005800005800005800006D
00006D00006D00006D00006D00006D00006D0000580000580000580000580000
5800004800004800004800003300003300003358587ADADADBFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE75AF7442A542008400008400008400087401255A003152003152
00315200315200315200315200315200315200315200315200244A00244A0000
42080042080042080042080042080042080042080042080042080042080C2B05
0042080042080042080042081853214A7B52D8EAD9FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE8CB5FF5A94FF266AFE266AFE266AFE1663FE105AFE
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
4AE9004AE9004AE9004AF70052FA0052FA1663FE4384FED9E7FEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83C2
FF007BFF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF01
83FF0183FF0183FF0183FF0081FF108AFFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C1FF0079FF0183FF0183FF0183
FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF0183FF00
81FF0483FFCEE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEEDEDED7B847B948C8C6E6E6E7B847B7B847B7B847B5A635A5A63
5A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B948C8C6E6E6E7B847B7B847B7B847B
5A635A5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B948C8C6E6E6E7B847B7B
847B7B847B5A635A5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00
006D00006D00006D00005800005800005800005800005800005800006D00006D
00005800005800006D00006D00005800006D00006D00006D0000580000580000
5800005800005800005800005800005800004800004800004800004800004800
0048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFED8EAD92E962E0084000084000084000084
00008400087401255A0031520031520031520031520031520031520031520031
5200315200315200315200004208004208004208004208004208004208004208
0042080042080C2B050C2B05004208004208004208004208004208004208ADC6
B5EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FCD9E7FE538CFE266AFE266AFE
266AFE266AFE266AFE1663FE105AFE0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA004AE9004AE90052FA0052FA0052FA0052FA0052FA
0052FAA9C6FFEAEEFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEF7F7EFCACACA7B847B7B847B0E0F0E0E0F0E0E0F0E
0E0F0E0E0F0E1018212118212118212118212118210E0F0E0E0F0E0E0F0E0E0F
0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E
0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E6E6E6EB5ADADFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFE4F2FF1D96FF0088FF018AFF018AFF018AFF018AFF018AFF01
8AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF0088FF1091FFF0F8FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C5
FF0082FF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF018AFF01
8AFF018AFF018AFF018AFF018AFF0085FF59B2FFFDFEFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEEDEDED969696948C8C6E6E6E7B847B7B847B7B84
7B8686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED969696948C8C6E6E6E7B847B
7B847B7B847B8686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED969696948C8C6E
6E6E7B847B7B847B7B847B8686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD29295200004800005800005800005800
006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D
00006D00006D00006D00006D00005800005800006D00006D0000580000580000
6D00006D00005800005800004800004800004800005800005800005800005800
0058000058000058000058000058000048292952292952757489FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA7D6AA0084000084
0000840000840000840000840000840000840000840031520031520031520031
5200315200315200315200315200315200315200315200004208004208004208
0042080042080042080042080042080042080C2B050C2B050042080042080042
08004208004208004208004208397342FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBDD6FF
266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AE9004AE90052FA
0052FA0052FA0052FA0052FA0052FA0052FA3377FEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEEDEDEDDADADB6E6E6E6E6E6E4E4E4E0E0F0E0E0F0E0E0F0E
1018212118212118213030304239424239424239424239424239424239423030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030211821211821211821211821211821
2118210E0F0E303030B5ADADF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFF60BBFF008DFF0192FF0191FF01
91FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF
0191FF008FFF1098FFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFF80C9FF008AFF0191FF0191FF0191FF0191FF0191FF01
91FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0191FF0090FF0792FF
D4EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696966E6E6E7B84
7B7B847B8686868686868686866E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB969696
6E6E6E7B847B7B847B8686868686868686866E6E6E5A635A5A635AB5ADADEDED
EDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDA
DADB9696966E6E6E7B847B7B847B8686868686868686866E6E6E5A635A5A635A
B5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300
004800005800005800005800006D00006D00006D00005800005800006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D0000580000580000
6D00006D00005800005800005800005800005800005800004800004800004800
0058000058000058000058000058000058000058000058000058000048000033
00003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FE75AF7442A54200840000840000840000840000840000840000840000840000
8400087401255A00315200315200315200315200315200315200315200315200
3152000042080042080042080042080042080042080042080042080C2B050042
08004208004208004208004208004208004208004208004208185321638C65CE
DED6FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE8CB5FF689AFF266AFE266AFE266AFE266AFE266AFE266AFE266A
FE266AFE266AFE1663FE105AFE0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7
004AE9004AE9004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA1663
FE689AFFCADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEF7F7EFEDEDED9696966E6E6E5A635A0E0F0E0E0F0E101821211821
3030303030304239424239424239424239424239424239424239424239424239
4242394242394230303042394230303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030302118210E0F0E423942B5ADADFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1F3FF05
99FF0097FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF
0198FF0198FF0198FF0198FF0198FF0096FF109EFFF0F9FFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80CCFF0091FF0198FF01
98FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF0198FF
0198FF0198FF0198FF0093FF79C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADA
DB9696967B847B7B847B8686868686868686868686866E6E6E5A635A5A635AB5
ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEDADADB9696967B847B7B847B8686868686868686868686866E6E6E5A63
5A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEDADADB9696967B847B7B847B868686868686868686868686
6E6E6E5A635A5A635AB5ADADEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEB3B3CD00003300004800005800005800005800006D00006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D0000
6D00006D00006D00006D00006D00006D00005800005800005800005800005800
005800004800004800004800005800005800005800005800005800006D00006D
00005800005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE2E962E00840000840000840000840000840000
8400008400008400008400008400008400087401315200315200315200315200
3152003152003152003152003152000042080042080042080042080042080042
080042080042080C2B0500420800420800420800420800420800420800420800
4208004208004208004208A5BAA7F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE427BFE266AFE266AFE266AFE266A
FE266AFE266AFE266AFE266AFE266AFE266AFE266AFE1663FE0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA004AF7004AE9004AE90052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FAA9C6FFEFF7FCFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEEDEDEDDADADBA8A8A85A635A4239420E0F0E211821303030303030
4239424E4E4E4239424239424239424E4E4E4239424239424239424239424239
4242394242394242394242394242394242394242394242394242394230303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
303030301018210E0F0E5A635AA8A8A8F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFA5DDFF009DFF019FFF019FFF019FFF019FFF019FFF019FFF
019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF009DFF10A5
FFF0F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFF80D0FF0098FF019FFF019FFF019FFF019FFF019FFF019FFF019FFF019FFF
019FFF019FFF019FFF019FFF019FFF019FFF019FFF009DFF27ADFFF5FBFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEDADADB9696967B847B8686868686868686868686868686866E
6E6E5A635A5A635AA8A8A8EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B8686868686868686868686
868686866E6E6E5A635A5A635AA8A8A8EDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696967B847B868686868686
8686868686868686866E6E6E5A635A5A635AA8A8A8EDEDEDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD000033000048000058000058
00005800005800006D00006D00006D00006D00006D00005800005800006D0000
6D00006D00006D00006D00006D00005800006D00006D00006D00005800005800
0058000058000058000058000058000048000048000048000048000048000058
00005800006D00006D00006D00006D00005800004800004800003358587AFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE637A2D2D6B0900
8400008400008400008400008400008400008400008400008400008400008400
008400255A003152003152003152003152003152003152003152000042080042
080042080042080042080042080042080042080C2B0500420800420800420800
42080042080042080042080042080042080042080042080042082A542AFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE266A
FE105AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE26
6AFE266AFE266AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA004AF7004AE9004AE90052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA26
6AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB423942211821303030423942423942
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239424E4E4E4239424239
4242394242394242394242394242394242394242394242394242394242394242
3942423942303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
303030303030303030303030303030303030303030301018210E0F0E4239426E
6E6EDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FCFF3BBAFF00A3FF01A5FF01A5FF
01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5
FF01A5FF01A5FF00A3FF10ABFFF0FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF80D3FF009FFF01A5FF01A5FF01A5FF01A5FF
01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5FF01A5
FF00A5FF04A5FFB2E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA86868686868686868686
8686868686857B7A6E6E6E5A635A5A635A5A635AEDEDEDFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA8686868686
86868686868686868686857B7A6E6E6E5A635A5A635A5A635AEDEDEDFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA
868686868686868686868686868686857B7A6E6E6E5A635A5A635A5A635AEDED
EDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD
00003300004800005800005800005800005800006D00006D00006D00006D0000
6D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00
006D00006D000058000058000058000058000058000058000048000048000033
00003300004800004800004800005800006D00006D00006D00006D0000580000
4800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDA
DECEA5AD84526B222D6B092D6B092D6B09087401008400008400008400008400
008400008400008400008400008400087401255A003152003152003152003152
0031520031520000420800420800420800420800420800420800420800420800
4208004208004208004208004208004208004208004208004208004208004208
004208004208085218779C7BCAD6C8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFECADBFE77A5FF105AFE105AFE1663FE1663FE1663FE266AFE266AFE26
6AFE266AFE266AFE266AFE266AFE266AFE266AFE1663FE105AFE0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA004A
E9004AE9004AE9004AF70052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA105AFE77A5FFCADBFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADB5B54E4E4E
1018212118213030304239424239424E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239
4242394242394242394242394242394242394242394242394242394242394242
3942423942423942423942423942303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30303030302118210E0F0E0E0F0E1018216E6E6EDADADBFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBF3FF
05ACFF00A9FF00AAFF00AAFF00AAFF00AAFF00AAFF00A7FF00A4FF00A4FF00A4
FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A3FF00AAFFEFFAFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77D2FF009EFF
00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A4FF00A5FF00AA
FF00AAFF00AAFF00AAFF00AAFF00AAFF00A7FF75D1FFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDA
DADBA8A8A88686864E4E4E4E4E4E5A635A857B7A5A635A5A635A5A635A33444A
DE8484FF9494FF9494FF9494FF9494FF9494FF9494FF9494FFABABFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEDADADBA8A8A88686864E4E4E4E4E4E5A635A857B7A5A635A5A635A5A
635A33444A8484B99292D19292D19292D19292D19292D19292D19292D1B3B3CD
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEDADADBA8A8A88686864E4E4E4E4E4E5A635A857B7A5A63
5A5A635A5A635A33444A84DEDE94F6F994F6F994F6F994F6F994F6F994F6F994
F6F9ABFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE9495A59495A56363840000330000580000580000580000580000580000
6D00006D00006D00006D00006D00006D00006D00006D00006D00005800005800
005800006D00006D00006D00006D00006D00006D000058000058000058000058
00005800004800004800003300003300004800004800005800005800006D0000
6D00006D00006D0000580000580000480000483131639495A5FEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEAABD9C4963104963104963104963104963102D6B09
0084000084000084000084000084000084000084000084000084000084000874
0131520031520031520031520031520031520000420800420800420800420800
42080042080C2B050C2B05004208004208004208004208004208004208004208
0042080042080042080042080042080042080042080042088CAD94FEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98B9FF0052FA0052FA0052FA0052FA00
52FA105AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE
266AFE1663FE0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA004AE9004AE90052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FF
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFECACACA5A635A5A635A1018213030304239423030302118213030302118
2121182142394242394242394242394242394242394242394242394242394242
3942423942423942423942423942423942423942303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30303030303030303030303030303030303030303030302118210E0F0E0E0F0E
1018215A635ADADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFBFEBFF00B0FF00AFFF00AFFF00AFFF00AFFF00AFFF00AD
FF40C3FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80
D6FF87D9FFF8FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFC0EBFF80D4FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7FF80D7
FF80D7FF80D7FF78D4FF08B2FF00AFFF00AFFF00AFFF00AFFF00AFFF00AEFF47
C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBB9696964239420E0F0E101821525A63
5A635A5A635A5A635A052136B51808D81605D81605D81605D81605D81605D816
05D81605E74A39FFABABFFABABFFABABFFABABFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBB9696964239420E0F0E10
1821525A635A635A5A635A5A635A05213600006D212184212184212184212184
21218421218421218455499994ADCE94ADCE94ADCEB3B3CDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBB9696964239
420E0F0E101821525A635A635A5A635A5A635A05213600B1B100D8D800D8D800
D8D800D8D800D8D800D8D800D8D831E7E7ABFFFFABFFFFABFFFFABFFFFFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0000330000330000330000480000580000
5800005800005800005800006D00006D00006D00006D00006D00006D00005800
005800005800005800005800005800005800005800006D00006D00006D00006D
0000580000580000580000580000580000580000480000480000480000480000
4800005800005800006D00006D00006D00006D00006D00005800004800004800
0048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA5BAA72A542A425A16
4963104963104963104963104963104963104963100084000084000084000084
00008400008400008400008400008400255A003152003152000C2B050E0F0E0E
0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0C2B050C2B05004208004208004208
0042080042080042080042080042080042080042080042080042080042080042
080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA5BDFF26
6AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFE266AFE
266AFE266AFE266AFE266AFE266AFE266AFE266AFE105AFE0052FA0052FA0529
6F0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0035AF004AE90052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEEDEDED9696964E4E4E4239425A635A5A635A4239424E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E42394242394242394230303021182121182110182110
1821303030303030303030423942423942423942423942423942423942423942
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030301018210E0F0E0E0F0E1018215A635AF7F7EFFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9DE2FF00B4FF00B4FF00B4
FF00B4FF00B4FF00B4FF00AFFF89DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10B9FF00B3FF00B4FF00
B4FF00B4FF00B4FF00B3FF1ABDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB
8689960017330017330017335A635A5A635A4E4E4E0C2849895A26A56B29A56B
29A56B29A56B29A56B29A56B29A56B29B55221D81605D81605D81605DE2110FF
ABABFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBB
BBBBBBBBBB8689960017330017330017335A635A5A635A4E4E4E0C28494A358C
5549995549995549995549995549995549995549994A358C0404850404850404
85212184B3B3CDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEDADADBBBBBBBBBBBBB8689960017330017330017335A635A5A635A4E4E4E0C
28490C737306878706878706878706878706878706878706878706878700D8D8
00D8D800D8D800D8D8ABFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0000330000
4800004800004800005800005800005800005800005800006D00006D00006D00
006D00006D00006D000058000058000058000058000058000058000058000058
00006D00006D00006D00006D0000580000580000580000580000580000580000
4800004800004800004800004800005800005800006D00006D00006D00006D00
006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEAABD9C2A542A425A164963104963104963104963104963104963104963
1008740108740108740100840000840000840000840000840000840008740125
5A002431090E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E
0E0F0E0C2B050042080042080042080042080042080042080042080042080042
080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFE98B9FF1663FE0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA1663FE1663FE1663FE266AFE266AFE266AFE266AFE266AFE266A
FE1663FE105AFE002D9400185200173300173300173300173300173300173300
173305296F002D94002D940243CC0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFECACACA5A635A4E4E4E4E4E4E5A635A6E6E6E6E6E
6E5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E423942423942423942303030211821211821211821101821211821
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030301018210E0F
0E0E0F0E303030423942CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF84DDFF00B4FF00B8FF00B8FF00B8FF00B8FF00B8FF00B3FF80DBFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
FBFF0FBCFF00B7FF00B8FF00B8FF00B8FF00B8FF00B8FF0FBCFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEDADADBBBBBBBBBBBBB9495A52139520017330521364E4E4E4E4E4E0C28
49001733B79670DAB587DAB587DAB587DAB587D6AD7BC69C6BC69C6BB1865089
5A267B52188B51128B5112FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB9495A52139520017330521364E4E4E
4E4E4E0C28490017335256B56F68D76F68D76F68D76F68D7847BEF9292D19292
D18484B952427B432A7A432A7A432A7A040485FEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEDADADBBBBBBBBBBBBB9495A521395200173305
21364E4E4E4E4E4E0C28490017334E8E8952A59C52A59C52A59C52A59C52A59C
4E8E894E8E894E8E890687870C737306878706878702FFFFFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00
006D00006D00006D00006D00006D00006D00006D000058000058000058000058
00005800005800005800005800006D00006D00006D00006D0000580000580000
5800005800005800005800004800004800004800005800005800005800006D00
006D00006D00006D00006D00006D000058000048000048000048000033FEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEAABD9C4963104963104963104963104963
1049631049631049631049631049631049631049631000840000840000840000
84000084000084000084000874010E0F0E0E0F0E0C2B050C2B050C2B050C2B05
0C2B050C2B050C2B050E0F0E0E0F0E0E0F0E0C2B050042080042080042080042
080042080042080042080042080042080042080042080042080042088CAD94FE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98B9FF0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA266AFE266A
FE266AFE266AFE266AFE266AFE266AFE2965D60E0F0E0521360D468D0D468D0D
468D0D468D0D468D0D468D0D468D0013280E0F0E0E0F0E002D940052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA9696964239424239425A635A6E6E
6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424E4E4E423942423942
4239424239423030303030303030301018212118211018210E0F0E1018212118
2130303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030302118211018210E0F0E0E0F
0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E101821303030969696FE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF3ECCFF00B9FF00BBFF00BBFF00BBFF00BBFF00
BBFF00B6FF80DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF0FBFF0FBFFF00BAFF00BBFF00BBFF00BBFF00BBFF
00BBFF0FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDCACACACACACACACACA99A8AF2139
520521360013280017330C28490C2849C6C8D6EDEDEDEDEDEDEDEDEDEDEDEDC6
BDBD9C948C9C948C9C948C857B7A5242298B51128B5112FF0202FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDCACACACACACACACACA
99A8AF2139520521360013280017330C28490C284905296F0404850404850404
850404855549999495A59495A59495A575748939314A432A7A432A7A040485FE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDCACACACA
CACACACACA99A8AF2139520521360013280017330C28490C28497BC6D694F6F9
94F6F994F6F994F6F994ADCE8494948494948494947B847B2139520687870687
8702FFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800
005800006D00006D00006D00006D00006D00006D00006D00006D00006D000058
0000580000580000580000480000480000580000580000580000580000580000
6D00006D00006D00006D00005800005800005800005800005800005800005800
005800005800006D00006D00006D00006D00006D00006D000058000058000048
000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBC6A65973
2849631044692532663944692549631059732859732859732859732844733632
66394963104963104963100874010084000084000C2B050E0F0E0C2B05214718
3266393266393266393266397BA98486BC8A86BC8A2A542A0C2B050E0F0E0C2B
0500420800420800420800420800420800420800420800420800420800420800
42080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
98B9FF105AFE0052FA105AFE266AFE105AFE0052FA105AFE105AFE105AFE105A
FE1663FE266AFE266AFE266AFE266AFE266AFE266AFE266AFE05296F00132805
296F0035AF0243CC0243CC0243CC0243CC1863EF216BEF216BEF0243CC002D94
0E0F0E002D940052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696965A635A4239425A63
5A5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4239424239424239424239424239424239424239424239424239424239
424239423030303030302118212118212118211018210E0F0E0E0F0E0E0F0E0E
0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E
0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E1018212118212118212118212118
2121182121182121182121182121182121182121182121182121182121182110
18210E0F0E0E0F0E0E0F0E211821FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23C6FF00BCFF00
BDFF00BDFF00BDFF00BDFF00BDFF00B8FF80DEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC1FF00BCFF
00BDFF00BDFF00BDFF00BDFF00BDFF0FC1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDDADADBCACA
CACACACACACACACACACAADADBB2139520C28490C2849213952213952857B7A94
8C8C948C8C948C8C948C8CB79670CE9C5ACE9C5AB186508B51128B51128B5112
8B5112FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
DADADBCACACACACACACACACACACACAADADBB2139520C28490C28492139522139
527574898689968689968689968689968484B9847BEF847BEF6F68D7432A7A43
2A7A432A7A432A7A212184FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
F7F7EFEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDDADADBCACACACACACACACACACACACAADADBB2139520C28490C2849
2139522139527792858494948494948494948494944E8E89318C84318C84318C
8406878706878706878706878702FFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00
003300004800004800004800005800006D00006D00006D00006D00006D00006D
0000580000580000580000580000480000480000480000480000480000480000
5800005800005800005800006D00006D00006D00006D00005800005800005800
005800005800005800005800005800006D00006D00006D00006D000058000058
000058000058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFED1D4B69CA584597328526B18446925447336446925526B1859732859
7328597328597328547331447336526B184469254469252D6B09087401005800
0C2B050E0F0E1148162A542A397342779C7B779C7B779C7BB7DBB9ADDEB59CCE
A55487563266390E0F0E0C2B0504461000420800420800420800420800420800
4208004208004208004208004208004208004208638C65ADC6B5FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEB5CEFF689AFF105AFE105AFE105AFE1663FE105AFE105A
FE105AFE105AFE105AFE105AFE1663FE1663FE1663FE266AFE266AFE266AFE18
63EF0944B70018520017330D468D0944B70243CC5284E75284E75284E7689AFF
538CFE266AFE125AED0243CC00104A0035AF004AE90052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA689AFFA9C6FFFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696963030
304E4E4E5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E
6E6E6E6E6E6E6E6E5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4239424239424239424239424239
4242394242394242394242394242394242394230303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30303030303030303030303030303030301018210E0F0E0E0F0EFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF14C4FF00BEFF00BEFF00BEFF00BEFF00BEFF00BEFF00B9FF80DFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFF0FBFF0FC2FF00BDFF00BEFF00BEFF00BEFF00BEFF00BEFF0FC2FFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE6E6E6E5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A
5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E868686CACACACACACACACACACACACACACACA96969696969696
9696969696969696895A268B51128B51128B51128B51128B51128B51128B5112
B53910FF0202FF0202FF0202FF0202FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE6E6E6E5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A
635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E868686CACACACACACACACACACACACACACACA9696
969696969696969696969696964A358C432A7A432A7A432A7A432A7A432A7A43
2A7A432A7A31217B040485040485040485040485FEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A5A635A5A635A5A635A5A635A5A63
5A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACACACACACACACACACACA
CACACA9696969696969696969696969696960687870687870687870687870687
8706878706878706878700B1B102FFFF02FFFF02FFFF02FFFFFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800005800006D00006D
00006D00006D00006D0000580000580000580000580000480000480000330000
3300004800004800004800004800004800005800005800005800005800006D00
006D00006D00006D00005800005800005800005800005800006D00006D00006D
00006D00006D0000580000580000580000580000580000480000480000480000
33FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE59732859732859732859732859732859
7328597328597328597328597328597328597328597328597328597328547331
397342597328425A160E0F0E0C2B05044610397342397342397342FEFEFEFEFE
FEFEFEFEFEFEFEDEE9ED9CCEA59CCEA586BC8A11481611481611481600420800
4208004208004208004208004208004208004208004208004208004208004208
004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE105AFE105AFE105AFE105A
FE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE10
5AFE1663FE266AFE105AFE0944B70E0F0E0018520D468D0243CC0243CC0243CC
FEFEFEFEFEFEFEFEFEFEFEFEBDD6FF266AFE266AFE266AFE004AE9004AE9004A
E90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE5A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E
6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E5A635A4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E42394242394242394242394242394242394242394230303042
3942303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
303030101821FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11C3FF00BEFF00BEFF00BEFF00BEFF
00BEFF00BEFF00B9FF80DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC2FF00BDFF00BEFF00BEFF00BE
FF00BEFF00BEFF0FC2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFE5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A
5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACAADB5B596969696
9696969696948C8C2118212118210C28490C2849D81605FF0202FF0202FF0202
FF0202FF0202FF0202FF0202FF5252FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE5A635A5A635A5A635A5A635A5A635A5A635A5A
635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686CACACAADB5
B5969696969696969696948C8C2118212118210C28490C284904048504048504
04850404850404850404850404850404855256B5FEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE5A635A5A635A5A635A5A635A5A63
5A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686
CACACAADB5B5969696969696969696948C8C2118212118210C28490C284900DE
E702FFFF02FFFF02FFFF02FFFF02FFFF02FFFF02FFFF52FFFFFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE000033000048000048
00004800005800006D00006D00006D00006D00006D0000580000580000580000
5800004800004800003300003300004800004800004800004800004800005800
005800005800005800006D00006D00006D00006D000058000058000058000058
00005800006D00006D00006D00006D00006D0000580000580000580000580000
58000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE59732859
7328597328597328597328597328597328597328597328597328597328597328
597328597328597328597328597328597328425A160E0F0E0C2B050C2B050446
10779C7BDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECF7EC8CB5945487560C
2B05114816114816004208004208004208004208004208004208004208004208
004208004208004208004208004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE10
5AFE105AFE105AFE105AFE105AFE105AFE1663FE105AFE0944B70E0F0E05296F
002D940243CC6B94E7CADBFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FCCADBFE689A
FF3773EF0035AF0243CC004AE90052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3030304239425A635A5A635A5A
635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E
6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E42
3942423942303030423942303030423942303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030305A635AFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1CC4FF
00BCFF00BDFF00BDFF00BDFF00BDFF00BDFF00B8FF80DEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FC1
FF00BCFF00BDFF00BDFF00BDFF00BDFF00BDFF0FC1FFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9663238B51128B5112
655A565A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A63
5A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E86868696969696969696969696969696
96969696966E6E6E4E4E4EBBBBBBBBBBBBB5ADAD0E0F0E0E0F0EEDEDEDFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE2556930D
468D0D468D4A5A6B5A635A5A635A5A635A5A635A5A635A5A635A5A635A5A635A
5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E8686869696969696969696
969696969696969696966E6E6E4E4E4EBBBBBBBBBBBBB5ADAD0E0F0E0E0F0EED
EDEDFEFEFEEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCEFF7FCFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FE0404850404850404854242635A635A5A635A5A635A5A635A5A635A5A635A5A
635A5A635A5A635A5A635A4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E868686969696
9696969696969696969696969696966E6E6E4E4E4EBBBBBBBBBBBBB5ADAD0E0F
0E0E0F0EEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE00003300004800004800004800005800006D00006D00006D00006D0000
6D00005800005800005800005800004800004800003300003300004800004800
004800004800005800005800005800005800005800006D00006D00006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D0000
58000058000058000058000058000048000048000048000033FEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFE597328597328637A2D637A2D637A2D637A2D637A2D637A2D
637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D637A2D597328425A
160E0F0E0E0F0E0C2B050042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFE8CAD8C5487560C2B05114816114816004208004208004208004208
004208004208004208004208004208004208004208004208004208004208FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE105AFE105AFE105AFE105AFE105AFE105AFE10
5AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE105AFE
105AFE0944B70E0F0E05296F002D940243CC8CADE7FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFE77A5FF3773EF002D940243CC004AE90052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE948C8C4E4E4E2118213030304239424E4E4E4E4E4E5A635A5A635A6E6E6E
6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E423942423942423942303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030302118210E0F0E868686FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF2FC7FF00B9FF00BBFF00BBFF00BBFF00BBFF00BBFF00B6
FF80DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFF0FBFF0FBFFF00BAFF00BBFF00BBFF00BBFF00BBFF00BBFF0F
BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEF7EFEDA57B42A56B29895A267B52187B52187B52187B52187B52187B52
187B52187B52187B5218895A26B5ADAD0E0F0E0E0F0E21182110182110182110
18211018211018211018211018211018212118213030304239424E4E4EADB5B5
001328001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEEAEEFA4A73AF2963A5255693255693255693255693255693
255693255693255693255693255693255693B5ADAD0E0F0E0E0F0E2118211018
211018211018211018211018211018211018211018212118213030304239424E
4E4EADB5B5001328001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFA0303EC0303EC0000AD04048504048504
0485040485040485040485040485040485040485212184B5ADAD0E0F0E0E0F0E
2118211018211018211018211018211018211018211018211018212118213030
304239424E4E4EADB5B5001328001328F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0000330000480000480000480000580000
6D00006D00006D00006D00006D00005800005800005800005800004800004800
0048000048000033000033000048000058000058000058000058000058000058
00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D0000
6D00006D00006D00005800005800005800005800005800005800004800004800
0048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE597328637A2D6B8B386B8B38
6B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B386B8B
386B8B386B8B38637A2D425A160E0F0E0E0F0E0C2B050042088CAD94FEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8CAD8C5487560C2B05114816114816
0042080042080042080042080042080042080042080042080042080042080042
08004208004208004208FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE105AFE1663FE26
6AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE266AFE
266AFE266AFE266AFE266AFE105AFE0944B70E0F0E05296F002D940243CC8CAD
E7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF3773EF002D9402
43CC004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EF9696964E4E4E303030
3030304239424E4E4E4E4E4E4E4E4E4E4E4E5A635A5A635A5A635A4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E
4E4E4E4E4E4E4E4E4E4239424239424239424239423030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030301018214E4E
4E969696FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61D3FF00B4FF00B7FF00B7
FF00B7FF00B7FF00B7FF00B2FF80DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FBFF0FBBFF00B6FF00B7FF00
B7FF00B7FF00B7FF00B7FF0FBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7EFEDEDE9DEB186509663238B51
128B51128B51128B51128B51128B51128B51128B51128B5112895A2630303021
18210E0F0E0E0F0E0E0F0E211821303030303030303030303030303030303030
4E4E4EADB5B5ADB5B5CACACAA8A8A8001328F7F7EFFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFADEE9ED5A84B5
2556932556930D468D0D468D0D468D0D468D0D468D0D468D0D468D2556932556
933030302118210E0F0E0E0F0E0E0F0E21182130303030303030303030303030
30303030304E4E4EADB5B5ADB5B5CACACAA8A8A8001328F7F7EFFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED8D8FFD8
D8FF3535EF0303EC0000AD040485040485040485040485040485040485040485
0404852121843030302118210E0F0E0E0F0E0E0F0E2118213030303030303030
303030303030303030304E4E4EADB5B5ADB5B5CACACAA8A8A8001328F7F7EFFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0000330000
4800004800004800005800006D00006D00006D00006D00006D00006D00005800
0058000058000058000048000048000048000048000048000048000058000058
00005800005800006D00006D00006D00006D00006D00006D0000580000580000
5800005800005800006D00006D00006D00006D00006D00005800005800005800
0058000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
6B8B386B8B386B8B38769147769147769147769147769147769147849C4E8CAA
578CAA5777A55A739C63739C63739C63739C63849C4E5A73420E0F0E0E0F0E0C
2B05004208296331548756FEFEFEFEFEFEFEFEFEFEFEFED8EAD994B59C6B9873
5487560C2B051148161148160042080042080042080042080042080042080042
08004208004208004208004208004208004208004208FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFE1663FE1663FE266AFE2973FE2973FE2973FE2973FE2973FE2973FE
3377FE3377FE3377FE3377FE2973FE2973FE2973FE2973FE266AFE295AB50E0F
0E05296F002D940243CC2965D6527BDEFEFEFEFEFEFEFEFEFEFEFEFED9E7FE84
ADFF538CFE3773EF002D940243CC004AE90052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FAFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEEDEDED8686863030303030304239424239424E4E4E4E4E
4E4E4E4E4E4E4E42394230303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030423942423942423942
4239424239424239424239424239424239424239424239424239424239424239
4230303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030302118212118
21303030868686C6BDBDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF9BE2FF00B1FF00B3FF00B3FF00B3FF00B3FF00B3FF00AEFF81DAFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2
FBFF0FB8FF00B2FF00B3FF00B3FF00B3FF00B3FF00B3FF14B9FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEEDE9DEE8D7C7B796709663239663239663239663239663238B51128B
51128B51128B5112A8A8A8969696303030303030303030303030303030303030
3030304E4E4E5A635A5A635A7B847BCACACACACACACACACACACACA99A8AFFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEDEE9EDD6DEEF6B8CBD2556932556932556932556932556
930D468D0D468D0D468D255693A8A8A896969630303030303030303030303030
30303030303030304E4E4E5A635A5A635A7B847BCACACACACACACACACACACACA
99A8AFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFED8D8FFC6C6FF4A4AEF0303EC0303EC0303EC
0303EC0000D9040485040485040485040485A8A8A89696963030303030303030
303030303030303030303030304E4E4E5A635A5A635A7B847BCACACACACACACA
CACACACACA99A8AFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE00003300004800004800004800005800006D00006D00006D00
006D00006D00006D00006D00006D00006D000058000058000048000058000058
00005800005800005800005800006D00006D00006D00006D00006D00006D0000
6D00006D00005800005800005800005800005800006D00006D00006D00006D00
006D00006D00006D00006D000058000058000048000048000048000033FEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFE849C4E7691476B8B38849C4E849C4E849C4E849C
4E849C4E849C4E8CAA5792B26D92B26D92B26D75AF7475AF7475AF7475AF7492
B26D7691470E0F0E0C2B050C2B05004208004208004208D8EAD9EDEDEDEDEDED
EDEDEDB7DBB963946B5487564574460C2B051148161148160042080042080042
080042080042080042080042080042080042080042080042080042081052182A
542AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3377FE3377FE266AFE3377FE3377FE
3377FE3377FE3377FE3377FE427BFE4384FE4384FE3377FE3377FE3377FE3377
FE3377FE3377FE2965D600082505296F002D940944B70243CC0243CCD9E7FED9
E7FED9E7FED9E7FEB5CEFF4384FE3377FE2965D6002D940035AF004AE90052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA105AFE266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBB
BB7B847B4239423030304239424239424E4E4E42394230303030303030303030
3030303030303030303030303030303030303030423942423942423942423942
4239424239424239424239424239424239424239424239424239423030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030301018211018211018211018210E0F0E0E0F
0E0E0F0E0E0F0E4E4E4EBBBBBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFB0E6FF00AEFF00AEFF00AEFF00AEFF00AEFF00
AEFF00A8FF81D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF1FBFF0FB3FF00ADFF00AEFF00AEFF00AEFF00AEFF
00ADFF31BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDE9DEE8D7C7E8D7C7E8
D7C7E8D7C7DAB587966323966323966323966323B18650BBBBBB969696423942
3030304E4E4E5A635A5A635A5A635A5A635A6E6E6E948C8CCACACACACACACACA
CACACACACACACACACACADADADBB5ADADF7EFEDFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDEE9EDC6D6
E7C6D6E7C6D6E7C6D6E794ADCE2556932556932556932556935A84B5BBBBBB96
96964239423030304E4E4E5A635A5A635A5A635A5A635A6E6E6E948C8CCACACA
CACACACACACACACACACACACACACACADADADBB5ADADF7EFEDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
D8D8FFB5B5FFB5B5FFB5B5FFB5B5FF7B7BF70000D90000D90000D90000D93535
EFBBBBBB9696964239423030304E4E4E5A635A5A635A5A635A5A635A6E6E6E94
8C8CCACACACACACACACACACACACACACACACACACADADADBB5ADADF7EFEDFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00003300004800004800004800
005800006D00006D00006D00006D00006D00006D00006D00006D00006D00006D
00005800005800005800005800005800006D00006D00006D00006D00006D0000
6D00006D00006D00006D00005800005800005800005800005800005800005800
005800006D00006D00006D00006D00006D00006D00006D00006D000058000048
000048000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6849C
4E849C4E849C4E92B26D92B26D8CAA5775AF7492B26D92B26D92B26D92B26D86
BC8AA5C674ADD08C9CCEA5A5C674A5C6749CCEA53030300E0F0E0C2B05004208
00420800420818532139734239734245744663946B2147180C2B050E0F0E0C2B
0500420800420800420800420800420800420800420800420800420800420800
42080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
A9C6FF3377FE3377FE2973FE266AFE266AFE266AFE3377FE427BFE4384FE4384
FE4384FE4384FE4384FE538CFE689AFF689AFF5A94FF2973FE0C28490E0F0E0D
468D0035AF0243CC0243CC0243CC0243CC0243CC125AED4384FE0944B705296F
0E0F0E002D940052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB7B847B42394230303030
3030303030303030423942423942423942423942423942423942423942423942
4E4E4E4239424239424239424239424239424239424239424239424239424239
4242394230303042394230303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030302118211018211018211018210E0F0E0E0F0E0E0F0E0E0F0E1018211018
211018213030301018210E0F0E868686BBBBBBFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0EFFF02A9FF00
A8FF00A9FF00A9FF00A9FF00A9FF00A7FF24B4FF48C0FF48C0FF48C0FF48C0FF
48C0FF48C0FF48C0FF48C0FF48C0FF48BFFF52C4FFF4FCFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4E0FF48BCFF48C0FF48
C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF48C0FF43BFFF04AAFF00A8FF
00A9FF00A9FF00A9FF00A9FF00A6FF63CBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF7EFEDD1D4B6D1D4B6D1D4B6D1D4B6
D1D4B6BBBBBBBBBBBB9696965A635A6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E
6E948C8CBBBBBBDADADBCACACACACACACACACACACACACACACAADB5B5DADADBF7
F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFAB6C8DAB6C8DAB6
C8DAB6C8DAB6C8DABBBBBBBBBBBB9696965A635A6E6E6E6E6E6E6E6E6E6E6E6E
6E6E6E6E6E6E948C8CBBBBBBDADADBCACACACACACACACACACACACACACACAADB5
B5DADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFAA5A5
FFA5A5FFA5A5FFA5A5FFA5A5FFBBBBBBBBBBBB9696965A635A6E6E6E6E6E6E6E
6E6E6E6E6E6E6E6E6E6E6E948C8CBBBBBBDADADBCACACACACACACACACACACACA
CACACAADB5B5DADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE00
003300004800004800004800005800006D00006D00006D00006D00006D00006D
00006D00006D00006D00006D00005800005800005800005800005800006D0000
6D00006D00005800005800006D00006D00005800005800005800005800004800
004800004800004800004800005800005800005800006D00006D00006D00006D
00006D00006D000058000048000048000048000033FEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFED1D4B6849C4E77A55A8CAA5792B26D92B26D92B26D92B26D92
B26D95BD8492B26DA5BD77A5BD7798CA94ADD08CADD08CADD08C98CA94ADD08C
739C635667350E0F0E0C2B050C2B050C2B050C2B052147182147182147182A54
2A0C2B050E0F0E0E0F0E0C2B0500420800420800420800420800420800420800
42080042080042080042080042080042080042088CAD94FEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEA9C6FF3377FE3377FE2973FE266AFE266AFE266A
FE266AFE3377FE4384FE4384FE4384FE4384FE5A94FF538CFE4384FE689AFF68
9AFF538CFE4A73AF25569300173305296F0035AF0035AF0035AF0035AF0035AF
0944B7295AB50018520017330E0F0E002D940052FA0052FA0052FA0052FA0052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEBBBBBB7B847B3030300E0F0E423942423942423942423942
4239424239424239424239424239424239424239424239424239424239424239
4242394242394242394242394242394242394230303030303030303030303030
3030303030303030303030303030303030303030303030211821101821101821
1018210E0F0E0E0F0E0E0F0E0E0F0E1018211018211018212118213030303030
303030303030303030303030302118213030304E4E4ECACACAFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFEEF9FF1AABFF00A0FF00A2FF00A2FF00A2FF00A2FF00A2FF00A0FF
009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009CFF04A4
FFEFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFF7ACFFF0097FF009EFF009EFF009EFF009EFF009EFF009EFF009EFF009EFF
009EFF009EFF00A1FF00A2FF00A2FF00A2FF00A2FF00A2FF02A0FF94D9FFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDBBBBBBA8A8A87B847B6E6E
6EA8A8A8CACACACACACA9696966E6E6E948C8CB5ADADCACACACACACACACACACA
CACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDBBBBBBA8A8A8
7B847B6E6E6EA8A8A8CACACACACACA9696966E6E6E948C8CB5ADADCACACACACA
CACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDEDEDEDBB
BBBBA8A8A87B847B6E6E6EA8A8A8CACACACACACA9696966E6E6E948C8CB5ADAD
CACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE00003300003300003300004800005800006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D0000580000580000
5800005800005800006D00006D00006D00005800005800006D00006D00005800
0058000058000058000048000048000048000048000048000058000058000058
00006D00006D00006D00006D00006D00006D0000580000480000480000480000
33FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6849C4E75AF7475AF7492
B26D92B26D92B26D92B26D95BD8486BC8AA5C674A5C674A5C6749CCEA5ADD08C
ADD08C9CCEA598CA94A5C674A5C67492B26D0E0F0E0E0F0E0C2B050C2B050C2B
050C2B050C2B050C2B050C2B050E0F0E0E0F0E0E0F0E0C2B0500420800420800
4208004208004208004208004208004208004208004208004208004208004208
8CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9C6FF3377FE3377
FE2973FE266AFE266AFE266AFE266AFE3377FE3377FE4384FE4384FE4384FE68
9AFF538CFE3377FE5A94FF689AFF689AFF689AFF5A84DE0E0F0E001852002D94
002D94002D94002D94002D94002D94002D940008250E0F0E0E0F0E002D940052
FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB2118210E0F0E
0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F
0E0E0F0E10182110182110182110182110182110182110182110182110182110
18211018211018211018211018211018211018210E0F0E0E0F0E0E0F0E0E0F0E
0E0F0E1018211018211018212118213030303030303030303030303030303030
303030303030303030303030303030303030301018214E4E4E948C8CEDEDEDFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFF74C9FF0099FF009BFF009CFF
009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009C
FF009CFF009CFF009AFF0FA1FFF0F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF80CEFF0095FF009CFF009CFF009CFF009CFF
009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009CFF009C
FF009BFF0FA1FFD8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEEDEDEDDADADBCACACABBBBBBEDEDEDFEFEFEFEFEFEDADADB9696965A635A6E
6E6E969696A8A8A8CACACACACACACACACACACACACACACACACACADADADBDADADB
F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEEDEDEDDADADBCACACABBBBBBEDEDEDFEFEFEFEFEFEDADADB9696
965A635A6E6E6E969696A8A8A8CACACACACACACACACACACACACACACACACACADA
DADBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEEDEDEDDADADBCACACABBBBBBEDEDEDFEFEFEFEFEFE
DADADB9696965A635A6E6E6E969696A8A8A8CACACACACACACACACACACACACACA
CACACACADADADBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9495A59495A5636384
00003300005800005800006D00006D00006D00006D00006D00006D00006D0000
6D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00
006D00006D00006D000058000058000058000058000048000048000048000048
00004800005800005800005800006D00006D00006D00006D00006D0000580000
580000480000483131639495A5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1
D4B692B26D92B26D92B26D86BC8AA5BD77A5C674A5C674A5C674A5C6749CCEA5
ADD08CADD08CADD08CADD08C9CCEA5A5C674A5BD7786BC8A92B26D92B26D86BC
8A3266390E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0C2B0500420831
5200315200315200004208004208004208004208004208004208004208004208
0042080042080042080042088CAD94FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFE98B9FF266AFE266AFE266AFE427BFE3377FE2973FE2973FE2973FE29
73FE2973FE2973FE2973FE2973FE4384FE689AFF4384FE4384FE4384FE4384FE
4384FE427BFE21397B0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E0035
AF004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA8CB5FFFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFE0E0F0E1018213030304239423030302118212118212118212118212118
212118212118212118211018211018211018211018211018211018211018210E
0F0E0E0F0E0E0F0E0E0F0E0E0F0E0E0F0E101821101821101821211821211821
3030303030303030303030303030303030303030303030303030303030303030
303030303030303030303030303030303030303030302118210E0F0E4E4E4ECA
CACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
C7E8FF0093FF0093FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094
FF0094FF0094FF0094FF0094FF0094FF0094FF0092FF0F9BFFF0F9FFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80CAFF008DFF
0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094FF0094
FF0094FF0094FF0094FF0094FF0090FF4AB3FFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEDADADB9696969696964E4E4E5A635A969696CACACACACACACACACA
CACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEDADADB9696969696964E4E4E5A635A969696CACACACA
CACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB9696969696964E4E4E5A635A9696
96CACACACACACACACACACACACACACACACACACACACACADADADBF7F7EFFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800006D0000
6D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00
006D00006D00005800006D00006D00006D00006D000058000058000058000058
00004800003300003300004800004800004800004800005800005800006D0000
6D00006D00006D00005800004800004800003358587AFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEEDE9DEBDD6A595BD8495BD8495BD8495BD84ADD08C
ADD08CADD08CA5C6749CCEA59CCEA5ADD08CADD08CADD08C98CA9495BD8495BD
8495BD8492B26D92B26D95BD845A73423142182431092431092431092431090C
2B05004208005800005800174A00244A00315200174A00004208004208004208
004208004208004208004208004208004208085218779C7BCAD6C8FEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECADBFE8CB5FF3377FE2973FE427BFE33
77FE2973FE2973FE3377FE4384FE2973FE2973FE2973FE4384FE538CFE689AFF
4384FE4384FE4384FE4384FE4384FE4384FE295AB521397B21397B05296F0529
6F05296F05296F21397B2965D6125AED004AF70052FA0052FA0052FA0052FA00
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA105AFE77A5FFCADBFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADBCAD6C85A635A5A635A1018213030
304239424239424E4E4E4E4E4E4E4E4E42394242394242394242394242394242
3942423942423942423942303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303021182130
3030948C8CDADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFF4FAFF2EA0FF0087FF008BFF008BFF008BFF008B
FF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF00
89FF0F92FFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFF80C5FF0083FF008BFF008BFF008BFF008BFF008BFF008BFF008B
FF008BFF008BFF008BFF008BFF008BFF008BFF008BFF008BFF0288FFB4DDFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B847B4E4E4E
423942969696A8A8A8CACACACACACACACACACACACACACACABBBBBBDADADBF7F7
EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED7B
847B4E4E4E423942969696A8A8A8CACACACACACACACACACACACACACACABBBBBB
DADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEEDEDED7B847B4E4E4E423942969696A8A8A8CACACACACACACACACACACACACA
CACABBBBBBDADADBF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD0000330000480000
5800005800005800006D00006D00006D00006D00006D00006D00006D00006D00
006D00006D00006D00006D00006D00005800005800006D00006D00006D000058
0000580000580000480000480000480000330000330000480000480000480000
4800005800005800006D00006D00006D00006D00005800004800004800003358
587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98CA94
95BD84A5C67498CA949CCEA59CCEA5ADD08CADD08C9CCEA59CCEA59CCEA5A5C6
74A5C674A5C67486BC8A86BC8A92B26D92B26D92B26D92B26D849C4E6B8B3859
7328526B224963104963102D6B09008400008400087401004208244A00315200
315200174A000042080042080042080042080042080042080042080042082A54
2AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE4384FE3377FE427BFE3377FE2973FE2973FE538CFE689AFF2973FE2973FE
2973FE689AFF689AFF689AFF4384FE4384FE4384FE4384FE4384FE4384FE3377
FE3377FE4384FE266AFE0052FA0052FA1663FE4384FE4384FE3377FE004AE900
52FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA
0052FA266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEDADADBCACACA5A635A30303021182130303042394242394242
3942423942423942423942423942423942423942423942423942423942303030
3030303030303030303030303030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30300E0F0E4E4E4E948C8CEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0E0FF0383
FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF00
83FF0083FF0083FF0083FF0081FF0F8BFFF0F8FFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80C2FF007AFF0083FF0083FF0083
FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF0083FF00
84FF0080FF2998FFF9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEEDEDED8686866E6E6E4239424E4E4E969696969696B5ADADBBBB
BBCACACABBBBBBBBBBBBCACACAEDEDEDEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEEDEDED8686866E6E6E4239424E4E4E969696969696
B5ADADBBBBBBCACACABBBBBBBBBBBBCACACAEDEDEDEDEDEDFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDED8686866E6E6E4239424E4E4E96
9696969696B5ADADBBBBBBCACACABBBBBBBBBBBBCACACAEDEDEDEDEDEDFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEB3B3CD00003300004800005800005800005800006D00006D00006D00006D00
006D00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D
00006D00006D00006D0000580000580000580000480000480000480000480000
4800004800004800005800005800005800006D00006D00006D00006D00006D00
005800004800004800003358587AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEADD08CA5C674A5C67498CA949CCEA5ADD08CADD08CADD0
8C9CCEA598CA94A5C674A5C674A5C674A5C674A5C674A5BD7786BC8A92B26D8C
AA57849C4E7691476B8B384963104963104963104963102D6B09008400008400
0084000084000058000042083152003152003152000042080042080042080042
080042080042080042082A542AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFE538CFE3377FE427BFE3377FE3377FE689AFF
689AFF689AFF2973FE4384FE689AFF689AFF689AFF689AFF689AFF538CFE2973
FE3377FE4384FE3377FE3377FE3377FE105AFE0052FA0052FA0052FA1663FE43
84FE4384FE3377FE3377FE125AED004AE90052FA0052FA0052FA0052FA0052FA
0052FA0052FA0052FA0052FA0052FA266AFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEDEDEDED
EDED948C8C4E4E4E211821423942423942423942423942423942423942423942
4239424239424239424239423030303030303030303030303030303030303030
3030303030303030303030303030303030303030303030303030303030303030
30302118211018212118216E6E6ECACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFBFDFF4CA4FF0078FF007DFF007DFF007DFF007DFF007DFF00
7DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007BFF0F85FFF0F7FF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80BE
FF0073FF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF007DFF00
7DFF007DFF007DFF007DFF007CFF0079FF9BCCFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E6E6E
6E6E6E6E4E4E4E6E6E6E969696969696B5ADADBBBBBBBBBBBBBBBBBBCACACAF7
F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
6E6E6E6E6E6E6E6E6E4E4E4E6E6E6E969696969696B5ADADBBBBBBBBBBBBBBBB
BBCACACAF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFE6E6E6E6E6E6E6E6E6E4E4E4E6E6E6E969696969696B5ADADBBBBBB
BBBBBBBBBBBBCACACAF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD00003300004800005800005800005800
005800005800005800005800005800006D00006D00006D00006D00006D00006D
00006D00006D00006D00006D00006D00006D00006D0000580000580000580000
4800004800004800004800004800004800004800005800005800005800006D00
006D00006D00006D00006D00005800004800003300003358587AFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADD08CADD08CA5C67498CA
949CCEA5ADD08CADD08CADD08C98CA94ADD08CA5C674A5C674A5BD77A5BD77A5
C674A5BD7786BC8A92B26D8CAA577691476B8B386B8B38446925446925496310
4963102D6B090084000084000084000084000058000042083152003152003152
00174A00004208004208004208004208004208457446779C7BFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE538CFE4384FE
538CFE3377FE3377FE538CFE538CFE538CFE4384FE538CFE689AFF689AFF689A
FF5A94FF689AFF5A94FF2973FE3377FE4384FE3377FE2973FE266AFE105AFE10
5AFE0052FA0052FA1663FE4384FE4384FE4384FE4384FE125AED004AE90052FA
0052FA0052FA0052FA0052FA0052FA0052FA0052FA0052FA427BFE77A5FFFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFECACACA6E6E6E211821211821
4239424239424239424239424239424239424239424239424239423030304239
4230303030303030303030303030303030303030303010182110182110182110
18214239427B847B7B847B7B847B948C8CEDEDEDF7F7EFFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7E9FF0173FF0074FF00
75FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF
0075FF0073FF0F7DFFF0F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFF80BAFF006BFF0075FF0075FF0075FF0075FF0075FF00
75FF0075FF0075FF0075FF0075FF0075FF0075FF0075FF0070FF5EA8FFF8FBFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A4239423030306E6E6E96
9696B5ADADADB5B5BBBBBBCACACAEDEDEDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A4239423030
306E6E6E969696B5ADADADB5B5BBBBBBCACACAEDEDEDFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE6E6E6E5A635A
4239423030306E6E6E969696B5ADADADB5B5BBBBBBCACACAEDEDEDFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB3B3CD29295200
004800005800005800005800005800005800005800005800005800006D00006D
00006D00006D00006D00006D00006D00006D00006D00006D00006D00006D0000
6D00006D00005800005800004800004800004800004800004800004800004800
005800005800006D00006D00006D00006D00006D000058000058000048292952
292952757489FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEA7D6AA9CCEA5ADD08C9CCEA59CCEA59CCEA59CCEA59CCEA5A5C674A5C674A5
C674A5C674A5BD7786BC8AA5BD77A5BD7786BC8A92B26D8CAA576B8B38637A2D
5973283973424469254963104963102D6B090084000084000084000084000058
00004208315200315200315200315200244A00004208004208004208004208AD
C6B5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE538CFE4384FE689AFF3377FE2973FE2973FE2973FE3377FE689A
FF689AFF689AFF689AFF5A94FF4384FE689AFF5A94FF2973FE3377FE4384FE33
77FE266AFE105AFE266AFE1663FE0052FA0052FA1663FE4384FE4384FE4384FE
4384FE125AED004AE90052FA0052FA0052FA0052FA0052FA0052FA0052FA0052
FA0052FAB5CEFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEF7F7EFCACACA4E4E4E1018211018211018211018211018211018
211018211018211018211018211018211018210E0F0E5A635A7B847B7B847B7B
847BEDEDEDF7F7EFF7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF62A6FF0069FF006EFF006EFF006EFF006EFF006EFF006EFF006EFF
006EFF006EFF006EFF006EFF006EFF006BFF0F77FFF0F6FFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80B7FF0064FF006EFF00
6EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF006EFF
006CFF0772FFD9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFE8686864E4E4E5A635A4E4E4E6E6E6EA8A8A8B5ADADB5ADADA8A8A8F7F7EF
F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE8686864E4E4E5A635A4E4E4E6E6E6EA8A8A8B5ADADB5ADADA8
A8A8F7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFE8686864E4E4E5A635A4E4E4E6E6E6EA8A8A8B5AD
ADB5ADADA8A8A8F7F7EFF7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFE000033000048000048000048000058000058000058
0000580000580000580000580000580000580000580000580000580000580000
6D00006D00006D00006D00006D00006D00005800005800005800005800004800
004800004800005800005800005800006D00006D00006D00006D000058000058
000058000048000033FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEF7F7EFD8EAD99CCEA59CCEA59CCEA59CCEA59C
CEA59CCEA5A5C674A5C674A5C67486BC8A86BC8A86BC8A86BC8A86BC8A92B26D
849C4E7691476B8B38637A2D5973283973424469254963104963104963102D6B
09087401008400008400008400087401004208244A0031520031520031520024
4A00004208326639D8EAD9F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEAEEFAA9C6FF3377FE3377FE2973
FE2973FE2973FE3377FE689AFF689AFF689AFF538CFE4384FE4384FE4384FE43
84FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA
0052FA105AFE3377FE4384FE4384FE3377FE3377FE004AE90052FA0052FA0052
FA0052FA0052FA0052FA3377FED9E7FEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF3FF277EFF0060FF0067FF0067FF
0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0064FF0F70
FFF0F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFF80B3FF005CFF0067FF0067FF0067FF0067FF0067FF0067FF0067FF0067FF
0067FF0067FF0067FF0066FF005EFF9BC3FFFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696964E4E4E4E4E4E
655A56969696969696A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9696964E
4E4E4E4E4E655A56969696969696A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FE9696964E4E4E4E4E4E655A56969696969696A8A8A8A8A8A8FEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB58587A000033
0000330000480000580000580000580000580000580000580000580000580000
5800005800005800006D00006D00006D00006D00006D00006D00006D00006D00
006D00005800005800005800005800005800005800005800006D00006D00006D
00006D00005800004800004800003358587ADADADBFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECF7ECB7
DBB9A7D6AA9CCEA59CCEA59CCEA59CCEA5A5C674A5C674A5C67486BC8A86BC8A
86BC8A86BC8A86BC8A8CAA577691476B8B386B8B38637A2D5973283973424469
2549631049631049631049631008740100840000840000840000840000420817
4A00315200315200315200315200457446779C7BFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FED9E7FE689AFF3377FE2973FE2973FE2973FE3377FE689AFF689AFF689AFF43
84FE4384FE4384FE4384FE3377FE2973FE3377FE3377FE3377FE266AFE105AFE
266AFE1663FE0052FA0052FA0052FA0052FA3377FE4384FE4384FE4384FE3377
FE004AE9004AF70052FA0052FA0052FA0052FA3377FE77A5FFFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
CDE0FF1F71FF005CFF005FFF005FFF005FFF005FFF005FFF005FFF005FFF005F
FF005FFF005FFF005CFF106AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFF89B5FF0053FF005FFF005FFF005FFF005FFF
005FFF005FFF005FFF005FFF005FFF005FFF005FFF0059FF5F9BFFFDFEFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEBBBBBB3030304E4E4EA8A8A8A8A8A8A8A8A8FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB3030304E4E4EA8A8A8A8A8A8
A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEBBBBBB3030304E4E4EA8
A8A8A8A8A8A8A8A8FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEADADBB73739473739400104A0000480000580000580000580000
5800005800005800005800006D00006D00006D00006D00006D00006D00006D00
006D00006D00006D00006D00006D00006D00006D00005800005800005800006D
00006D00006D00006D00006D00005800004800004800004858587AADADBBFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEB7DBB99CCEA59CCEA59CCEA59CCEA5A5C674
A5C674A5C67486BC8A86BC8A86BC8A86BC8A86BC8A849C4E7691476B8B386B8B
38637A2D59732839734244692549631049631049631049631008740100840000
8400008400008400004208174A00315200315200315200315200DADECEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE689AFF2973FE2973FE2973FE33
77FE689AFF689AFF689AFF4384FE4384FE4384FE4384FE3377FE2973FE3377FE
3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA0052FA3377
FE4384FE4384FE4384FE3377FE004AE9004AF70052FA0052FA0052FA0052FACA
DBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBDEFF0358FF0055FF0058FF0058FF0058
FF0058FF0058FF0058FF0058FF0058FF0058FF0056FF085DFF78A6FF80ABFF80
ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF80ABFF4082FF0052FF
0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0058FF0053
FF2E75FFF0F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE1818420000
4800004800004800004800004800004800005800005800006D00006D00006D00
006D00006D00006D00005800005800005800005800006D00006D00006D00006D
00005800005800006D00006D00006D00006D00006D0000580000480000480000
33000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEECF7ECECF7EC
ECF7ECBDD6A5A5C674A5C674A5BD7786BC8A86BC8A86BC8A92B26D92B26D8CAA
57849C4E7691476B8B386B8B38637A2D59732839734244692549631049631049
63104963102D6B092D6B09008400008400008400087401005800044610315200
769147D1D4B6F7F7EFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED9
E7FECADBFECADBFE84ADFF5A94FF689AFF5A94FF538CFE4384FE3377FE3377FE
3377FE3377FE2973FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052
FA0052FA0052FA0052FA105AFE1663FE4384FE4384FE3377FE2973FE105AFE00
4AE90052FA4384FEBDD6FFEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFA0BF
FF0453FF004EFF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052FF00
52FF0051FF0047FF0046FF0046FF0046FF0046FF0046FF0046FF0046FF0046FF
0046FF0046FF004CFF0052FF0052FF0052FF0052FF0052FF0052FF0052FF0052
FF0052FF0051FF004CFF407DFFE5EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFE18184200004800004800004800004800004800004800005800
005800006D00006D00006D00006D00006D00006D000058000058000058000058
00006D00006D00006D00006D00005800005800006D00006D00006D00006D0000
6D000058000048000048000033000033CACACAFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6ADD08CA5C67495BD8486BC8A86BC
8A95BD8492B26D92B26D8CAA57849C4E7691476B8B386B8B38637A2D59732839
73424469254963104963104963104963104963102D6B09008400008400008400
0084000058000042085667359CA584FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEB5CEFF84ADFF689AFF538CFE
4384FE4384FE3377FE2973FE2973FE2973FE2973FE3377FE3377FE3377FE266A
FE105AFE266AFE1663FE0052FA0052FA0052FA0052FA0052FA105AFE4384FE43
84FE4384FE4384FE266AFE004AE93377FE84ADFFFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFC3D5FF1E5EFF0045FF004AFF004BFF004BFF00
4BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF
004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004BFF004B
FF004BFF004BFF004BFF004BFF0049FF0046FF5284FFE8F0FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEC6C8D658587A00003300003300
004800004800004800005800005800005800006D00006D00006D00006D00006D
00006D00006D00006D00005800006D00006D00006D00006D00006D00006D0000
5800006D00006D00006D00005800005800003358587ACACACACACACAEAEEFAFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEA5C67495BD8486BC8A86BC8A95BD8492B26D92B26D8CAA57849C4E7691476B
8B386B8B38637A2D597328397342446925496310496310496310496310496310
2D6B09008400008400008400008400005800004208EFF7FCFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE689AFF538CFE4384FE4384FE3377FE2973FE2973FE2973FE2973
FE3377FE3377FE3377FE266AFE105AFE266AFE1663FE0052FA0052FA0052FA00
52FA0052FA105AFE4384FE4384FE4384FE4384FE266AFE004AE9EFF7FCFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3D4FF1C
57FF0042FF0044FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF
0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0045
FF0045FF0045FF0045FF0045FF0045FF0045FF0045FF0041FF0547FF6992FFE8
EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEADADBB58587A000033000033000048000048000048000048000058000058
00005800006D00006D00006D00006D00006D00006D0000580000580000580000
5800005800006D00005800004800005800005800005800005800004858587AAD
ADBBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFE95BD8486BC8A86BC8A86BC8A95BD8492B26D8C
AA57849C4E7691476B8B386B8B386B8B38637A2D597328547331446925496310
4963104963104963104963104963102D6B090874010084000084000874010874
01ECF7ECFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEFF7FC538CFE4384FE4384FE4384FE3377
FE2973FE2973FE2973FE3377FE3377FE3377FE3377FE266AFE105AFE1663FE10
5AFE0052FA0052FA0052FA0052FA0052FA105AFE1663FE3377FE4384FE4384FE
3377FE266AFEEFF7FCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFD6E1FF6188FF0641FF003BFF003DFF003FFF003FFF
003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003F
FF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003FFF003CFF00
37FF1C51FFA7BDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEDADADB000033000033000048000048
0000480000480000480000480000480000580000580000580000580000580000
5800005800005800005800005800005800005800004800003300004800004800
0048000048000033DADADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE98CA9498CA9498
CA9486BC8A95BD8492B26D849C4E7691476B8B386B8B386B8B386B8B38637A2D
597328597328526B224963104963104963104963104963104963104963100874
01008400008400008400008400D8EAD9ECF7ECFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE538C
FE538CFE538CFE4384FE3377FE2973FE2973FE2973FE3377FE3377FE3377FE33
77FE266AFE105AFE105AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA
0052FA2973FE4384FE4384FE4384FE4384FEEAEEFAEFF7FCFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFBECDFF
4771FF083EFF0034FF0039FF0039FF003AFF003AFF003AFF003AFF003AFF003A
FF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF003AFF00
39FF0037FF0035FF1347FF7291FFE1E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFE8689960000330000330000330000330000480000480000480000
4800004800004800004800004800004800004800004800004800004800004800
0033000033000033000033000033292952FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFE92B26D92B26D75AF74849C4E849C4E849C4E
7691476B8B386B8B38637A2D597328597328526B224963104963104963104963
1049631049631049631008740100840000840000840000840000840075AF74FE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3377FE3377FE427BFE2973FE29
73FE2973FE3377FE3377FE3377FE266AFE105AFE105AFE105AFE0052FA0052FA
0052FA0052FA0052FA0052FA0052FA2973FE4384FE4384FE4384FE4384FE4384
FE8CB5FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFF7F9FFB9C8FF2C57FF0334FF0031FF0032FF0034
FF0034FF0035FF0035FF0035FF0035FF0035FF0035FF0035FF0035FF0035FF00
34FF0034FF0034FF0030FF0033FF0738FF6382FFDCE3FFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE8689960000330000330000330000
3300003300003300004800004800004800004800004800004800004800004800
0048000048000048000048000033000033000033000033000033292952FEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFED1D4B6D1D4B6
CAD6C8D1D4B6BDD6A5BDD6A58CAA576B8B386B8B38637A2D597328597328526B
2249631049631049631049631049631049631049631077A55A86BC8A86BC8A86
BC8A86BC8A86BC8AB7DBB9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEA9
C6FFA9C6FFA9C6FFA5BDFF98B9FF98B9FF538CFE3377FE3377FE266AFE105AFE
105AFE105AFE0052FA0052FA0052FA0052FA0052FA0052FA0052FA689AFFA9C6
FFA9C6FFA9C6FFA9C6FFA9C6FFCADBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF0
FFBDCAFF6D89FF214BFF0332FF0031FF0030FF0028FF002DFF002FFF0031FF00
30FF002EFF002AFF002CFF0132FF0031FF0735FF385DFFA3B4FFD9E1FFFAFBFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEADAD
BB58587A58587A58587A31315A00003300003300003300004800004800004800
004800004800004800004800004800004800004800004831316358587A58587A
58587A58587A757489FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9CA5846B8B386B8B
38637A2D597328597328526B2249631049631049631049631049631049631049
6310BBC6A6FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE77A5FF
3377FE3377FE266AFE105AFE105AFE105AFE0052FA0052FA0052FA0052FA0052
FA0052FA0052FAA9C6FFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEEFFC6D1FFAFBDFF899FFF5B
78FF375AFF254BFF113BFF1B44FF2A50FF4F6EFF6984FF99ABFFB7C4FFD5DDFF
F4F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE9495A500003300003300
0033000033000033000033000033000033000033000033000033000033000033
0000339495A5FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FF00}
OnMouseMove = DXDrawMouseMove
end
end
object StatusBar: TStatusBar
Left = 0
Top = 517
Width = 753
Height = 19
Panels = <>
SimpleText =
' Zeigen Sie mit dem Mauszeiger auf eine Einheit, um deren Eigens' +
'chaften anzuzeigen...'
OnMouseMove = DXDrawMouseMove
object LivesEdit: TSpinEdit
Left = 8
Top = 355
Width = 81
Height = 22
MaxValue = 0
MinValue = 0
TabOrder = 8
Value = 1
end
object LivesEdt: TEdit
Left = 648
Top = 360
Width = 73
Height = 21
TabOrder = 10
Text = '1'
OnChange = LivesEdtChange
OnKeyPress = LivesEdtKeyPress
object Enemy8: TRadioButton
Left = 8
Top = 164
Width = 65
Height = 17
Caption = 'Medikit'
TabOrder = 9
OnClick = EnemyClick
OnMouseMove = DXDrawMouseMove
end
object Lives: TUpDown
Left = 720
Top = 360
Width = 17
Height = 19
Min = 1
Max = 999
Position = 1
TabOrder = 11
OnClick = LivesClick
OnMouseMove = DXDrawMouseMove
end
object MainMenu: TMainMenu
Left = 8
Top = 8
Left = 32
Top = 16
object Spiel: TMenuItem
Caption = '&Datei'
object Neu: TMenuItem
Caption = '&Neu'
ShortCut = 16462
OnClick = NeuClick
end
object N2: TMenuItem
Caption = '-'
end
object Level: TMenuItem
Caption = '&Verwaltung...'
ShortCut = 115
Caption = '&Laden/Speichern...'
ShortCut = 16463
OnClick = LevelClick
end
object Quelltext1: TMenuItem
Caption = '&Quelltext...'
ShortCut = 116
OnClick = Quelltext1Click
object AlleLeveldateienaktualisieren1: TMenuItem
Caption = 'Alle Leveldateien aktualisieren'
Visible = False
OnClick = AlleLeveldateienaktualisieren1Click
end
object Leveltesten1: TMenuItem
Caption = 'Level testen'
OnClick = Leveltesten1Click
end
object N1: TMenuItem
Caption = '-'
end
object Neu: TMenuItem
Caption = '&Neu'
ShortCut = 117
OnClick = NeuClick
end
object Spielfelderweitern1: TMenuItem
Caption = 'Leveleigenschaften...'
ShortCut = 118
OnClick = Spielfelderweitern1Click
end
object Leer1: TMenuItem
336,19 → 6101,34
end
object Hilfe: TMenuItem
Caption = '&Hilfe'
object Mitarbeiter: TMenuItem
Caption = '&Mitwirkende...'
ShortCut = 120
OnClick = MitarbeiterClick
object Hilfe1: TMenuItem
Caption = 'Allgemeines'
GroupIndex = 1
Hint = 'Help\DE_General.md'
OnClick = HilfeTopicClick
end
object Leer2: TMenuItem
object WasgibtesNeues1: TMenuItem
Caption = 'Was gibt es Neues?'
GroupIndex = 1
Hint = 'Help\DE_Changelog.md'
OnClick = HilfeTopicClick
end
object N4: TMenuItem
Caption = '-'
GroupIndex = 1
end
object AufUpdatesprfen1: TMenuItem
Caption = 'Auf Updates pr'#252'fen'
GroupIndex = 1
OnClick = AufUpdatesprfen1Click
end
object N3: TMenuItem
Caption = '-'
GroupIndex = 1
end
object Informationen: TMenuItem
Caption = '&Informationen...'
GroupIndex = 1
ShortCut = 121
OnClick = InformationenClick
end
end
/_SpacemissionGroup.groupproj
0,0 → 1,72
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{43F4FBBE-B306-42B6-A01A-6B1898E07D6A}</ProjectGuid>
</PropertyGroup>
<ItemGroup>
<Projects Include="LevEdit.dproj">
<Dependencies/>
</Projects>
<Projects Include="SpaceMission.dproj">
<Dependencies/>
</Projects>
<Projects Include="ENU\LevEdit_ENU.bdsproj">
<Dependencies/>
</Projects>
<Projects Include="ENU\SpaceMission_ENU.bdsproj">
<Dependencies/>
</Projects>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Default.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
<Default.Personality/>
</BorlandProject>
</ProjectExtensions>
<Target Name="LevEdit">
<MSBuild Projects="LevEdit.dproj"/>
</Target>
<Target Name="LevEdit:Clean">
<MSBuild Projects="LevEdit.dproj" Targets="Clean"/>
</Target>
<Target Name="LevEdit:Make">
<MSBuild Projects="LevEdit.dproj" Targets="Make"/>
</Target>
<Target Name="SpaceMission">
<MSBuild Projects="SpaceMission.dproj"/>
</Target>
<Target Name="SpaceMission:Clean">
<MSBuild Projects="SpaceMission.dproj" Targets="Clean"/>
</Target>
<Target Name="SpaceMission:Make">
<MSBuild Projects="SpaceMission.dproj" Targets="Make"/>
</Target>
<Target Name="LevEdit_ENU">
<MSBuild Projects="ENU\LevEdit_ENU.bdsproj"/>
</Target>
<Target Name="LevEdit_ENU:Clean">
<MSBuild Projects="ENU\LevEdit_ENU.bdsproj" Targets="Clean"/>
</Target>
<Target Name="LevEdit_ENU:Make">
<MSBuild Projects="ENU\LevEdit_ENU.bdsproj" Targets="Make"/>
</Target>
<Target Name="SpaceMission_ENU">
<MSBuild Projects="ENU\SpaceMission_ENU.bdsproj"/>
</Target>
<Target Name="SpaceMission_ENU:Clean">
<MSBuild Projects="ENU\SpaceMission_ENU.bdsproj" Targets="Clean"/>
</Target>
<Target Name="SpaceMission_ENU:Make">
<MSBuild Projects="ENU\SpaceMission_ENU.bdsproj" Targets="Make"/>
</Target>
<Target Name="Build">
<CallTarget Targets="LevEdit;SpaceMission;LevEdit_ENU;SpaceMission_ENU"/>
</Target>
<Target Name="Clean">
<CallTarget Targets="LevEdit:Clean;SpaceMission:Clean;LevEdit_ENU:Clean;SpaceMission_ENU:Clean"/>
</Target>
<Target Name="Make">
<CallTarget Targets="LevEdit:Make;SpaceMission:Make;LevEdit_ENU:Make;SpaceMission_ENU:Make"/>
</Target>
<Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/>
</Project>
/GamCheat.dfm
0,0 → 1,104
object CheatForm: TCheatForm
Left = 275
Top = 165
BorderStyle = bsDialog
Caption = 'Cheatverwaltung'
ClientHeight = 233
ClientWidth = 313
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poMainFormCenter
OnHide = FormHide
OnShow = FormShow
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 8
Width = 152
Height = 13
Caption = 'Bitte geben Sie einen Cheat ein!'
end
object Label3: TLabel
Left = 200
Top = 8
Width = 106
Height = 13
Cursor = crHandPoint
Caption = 'Herausgeber anfragen'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
Visible = False
OnClick = Label3Click
end
object CheatEdit: TEdit
Left = 8
Top = 32
Width = 297
Height = 21
Cursor = crIBeam
Ctl3D = True
ParentCtl3D = False
PasswordChar = '*'
TabOrder = 0
OnKeyPress = CheatEditKeyPress
end
object OKBtn: TButton
Left = 192
Top = 200
Width = 115
Height = 25
Caption = 'OK'
Default = True
TabOrder = 1
OnClick = OKBtnClick
end
object AbbBtn: TButton
Left = 8
Top = 200
Width = 113
Height = 25
Cancel = True
Caption = 'Abbrechen'
TabOrder = 2
OnClick = AbbBtnClick
end
object GroupBox1: TGroupBox
Left = 8
Top = 64
Width = 297
Height = 129
Caption = 'Aktivierte Cheats'
TabOrder = 3
object Label2: TLabel
Left = 8
Top = 104
Width = 89
Height = 13
Cursor = crHandPoint
Caption = 'Cheat deaktivieren'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnClick = Label2Click
end
object CheatBox: TListBox
Left = 8
Top = 24
Width = 281
Height = 73
ItemHeight = 13
TabOrder = 0
end
end
end
/GamCheat.pas
0,0 → 1,145
unit GamCheat;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ShellAPI{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
 
type
TCheatForm = class(TForm)
Label1: TLabel;
CheatEdit: TEdit;
OKBtn: TButton;
AbbBtn: TButton;
GroupBox1: TGroupBox;
CheatBox: TListBox;
Label2: TLabel;
Label3: TLabel;
procedure AbbBtnClick(Sender: TObject);
procedure OKBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure CheatEditKeyPress(Sender: TObject; var Key: Char);
procedure Label2Click(Sender: TObject);
procedure Label3Click(Sender: TObject);
public
procedure SearchCheats;
end;
 
var
CheatForm: TCheatForm;
 
implementation
 
uses
GamMain, Global;
 
{$R *.DFM}
 
procedure TCheatForm.AbbBtnClick(Sender: TObject);
begin
close;
end;
 
procedure TCheatForm.SearchCheats;
begin
Cheatbox.Items.Clear;
if ctInfiniteLives in mainform.FCheats then Cheatbox.Items.Append(Cheat1Text);
end;
 
procedure TCheatForm.OKBtnClick(Sender: TObject);
resourcestring
SCheatUnlocked = 'Dieser Cheat wurde freigeschaltet!';
SCheckAlreadyUnlocked = 'Dieser Cheat wurde bereits freigeschaltet!';
SNoCheat = 'Dies ist kein offizieller Cheat!';
var
temp: string;
i, j: integer;
begin
temp := '';
j := 0;
 
if CheatEdit.text = '' then
begin
Close;
Exit;
end;
 
for i := 1 to length(CheatEdit.text) do
begin
inc(j);
temp := temp + chr(byte(copy(CheatEdit.text, i, 1)[1]) xor j);
end;
{$REGION 'Check and unlock Cheat 1 (Infinite lives)'}
if lowercase(temp) = lowercase(Cheat1) then
begin
if ctInfiniteLives in mainform.FCheats then
showmessage(SCheckAlreadyUnlocked)
else
begin
showmessage(SCheatUnlocked);
Include(mainform.FCheats, ctInfiniteLives);
SearchCheats;
end;
close;
end
{$ENDREGION}
else
begin
showmessage(SNoCheat);
CheatEdit.text := '';
CheatEdit.setfocus;
end;
end;
 
procedure TCheatForm.FormShow(Sender: TObject);
begin
mainform.dxtimer.enabled := false;
SearchCheats;
CheatEdit.text := '';
CheatEdit.setfocus;
end;
 
procedure TCheatForm.FormHide(Sender: TObject);
begin
if not mainform.gamepause.checked then mainform.dxtimer.enabled := true;
end;
 
procedure TCheatForm.CheatEditKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
// key := #0;
OKBtn.click;
end;
end;
 
procedure TCheatForm.Label2Click(Sender: TObject);
resourcestring
SDisableCheat = 'Diesen Cheat wirklich deaktivieren?';
SCheatDisabled = 'Dieser Cheat wurde deaktiviert!';
begin
{$REGION 'Disable Cheat 1 (Infinite lives)'}
if not CheatBox.items.IndexOf(Cheat1Text) = -1 then
begin
if CheatBox.Selected[CheatBox.items.IndexOf(Cheat1Text)] then
begin
if MessageDlg(SDisableCheat, mtConfirmation, mbYesNoCancel, 0) = mrYes then
begin
Exclude(mainform.FCheats, ctInfiniteLives);
showmessage(SCheatDisabled);
SearchCheats;
end;
end;
end;
{$ENDREGION}
end;
 
procedure TCheatForm.Label3Click(Sender: TObject);
begin
shellexecute(handle, 'open', pchar('mailto:daniel-marschall@viathinksoft.de?subject=Cheats für SpaceMission '+ProgramVersion), '', '', 1); // do not localize
end;
 
end.
 
/GamSpeicherung.pas
0,0 → 1,415
unit GamSpeicherung;
 
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Spin{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
 
type
TSpeicherungForm = class(TForm)
Bevel1: TBevel;
LadenBtn: TButton;
LoeschenBtn: TButton;
AktualisierenBtn: TButton;
SpeichernBtn: TButton;
AbbrechenBtn: TButton;
LevelListBox: TListBox;
Label2: TLabel;
Label3: TLabel;
Label1: TLabel;
LevelName: TEdit;
ElPanel1: TPanel;
li4a: TLabel;
li1: TLabel;
li3b: TLabel;
li3a: TLabel;
li4b: TLabel;
liu: TLabel;
liw: TLabel;
li2a: TLabel;
li2b: TLabel;
procedure LoeschenBtnClick(Sender: TObject);
procedure LadenBtnClick(Sender: TObject);
procedure SpeichernBtnClick(Sender: TObject);
procedure LevelListBoxClick(Sender: TObject);
procedure LevelNameChange(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DsFancyButton2Click(Sender: TObject);
procedure AbbrechenBtnClick(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure LevelListBoxDblClick(Sender: TObject);
private
function GetSpielstandVerzeichnisSystem: string;
function GetSpielstandVerzeichnisUser: string;
function GetSaveGameFileName(SpielstandName: string; forceuserdir: boolean): string;
public
procedure SearchSaves;
end;
 
var
SpeicherungForm: TSpeicherungForm;
 
implementation
 
uses
Global, GamMain, ComLevelReader;
 
{$R *.DFM}
 
resourcestring
SSaveGameFileNotFound = 'Spielstandsdatei nicht gefunden';
SNa = 'n/a';
SSaveGameFolder = 'Spielstände';
SSaveGameSubFolder = 'SpaceMission';
 
{ TSpeicherungForm }
 
procedure TSpeicherungForm.SearchSaves;
var
sr: TSearchRec;
res: integer;
begin
LevelName.text := '';
LevelListBox.items.clear;
li1.visible := false;
li2a.visible := false;
li2b.visible := false;
li3a.visible := false;
li3b.visible := false;
li4a.visible := false;
li4b.visible := false;
liu.visible := false;
liw.visible := true;
li1.caption := SNa;
li2b.caption := SNa;
li3b.caption := SNa;
li4b.caption := SNa;
LadenBtn.enabled := false;
LoeschenBtn.enabled := false;
res := FindFirst(IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisSystem)+'*.sav', 0, sr);
try
while (res = 0) do
begin
if (sr.name <> '.') and (sr.name <> '..') then
LevelListBox.items.Add(ChangeFileExt(sr.Name, ''));
res := FindNext(sr);
end;
finally
FindClose(sr);
end;
res := FindFirst(IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisUser)+'*.sav', 0, sr);
try
while (res = 0) do
begin
// Anmerkung: Contains() oder IndexOf() sind nicht case-sensitive
if (sr.name <> '.') and (sr.name <> '..') and (LevelListBox.Items.IndexOf(ChangeFileExt(sr.Name, ''))=-1) then
LevelListBox.items.Add(ChangeFileExt(sr.Name, ''));
res := FindNext(sr);
end;
finally
FindClose(sr);
end;
LevelListBox.Sorted := true;
end;
 
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
resourcestring
SDeleteSaveGame = 'Diesen Spielstand wirklich löschen?';
var
fil: string;
begin
if LevelListBox.ItemIndex = -1 then exit;
 
if MessageDlg(SDeleteSaveGame, mtConfirmation, mbYesNoCancel, 0) = mrYes then
begin
li1.visible := false;
li2a.visible := false;
li2b.visible := false;
li3a.visible := false;
li3b.visible := false;
li4a.visible := false;
li4b.visible := false;
liu.visible := false;
liw.visible := false;
li1.caption := SNa;
li2b.caption := SNa;
li3b.caption := SNa;
li4b.caption := SNa;
LadenBtn.enabled := false;
LoeschenBtn.enabled := false;
fil := GetSaveGameFileName(LevelListBox.Items.strings[LevelListBox.itemindex], false);
if not fileexists(fil) then raise Exception.Create(SSaveGameFileNotFound);
deletefile(fil);
searchsaves;
end;
end;
 
function TSpeicherungForm.GetSaveGameFileName(SpielstandName: string; forceuserdir: boolean): string;
var
usr, sys: string;
begin
usr := IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisUser) + SpielstandName + '.sav'; // ab SpaceMission 1.2+ // do not localize
sys := IncludeTrailingPathDelimiter(GetSpielstandVerzeichnisSystem) + SpielstandName + '.sav'; // alte Versionen von SpaceMission <1.2 // do not localize
if fileexists(usr) or forceuserdir then exit(usr);
if fileexists(sys) then exit(sys);
exit(usr);
end;
 
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
var
SavGame: TSaveData;
fil: string;
begin
if LevelListBox.ItemIndex = -1 then exit;
 
if LevelListBox.items.count = 0 then
begin
li1.visible := false;
li2a.visible := false;
li2b.visible := false;
li3a.visible := false;
li3b.visible := false;
li4a.visible := false;
li4b.visible := false;
liu.visible := false;
liw.visible := false;
li1.caption := SNa;
li2b.caption := SNa;
li3b.caption := SNa;
li4b.caption := SNa;
LadenBtn.enabled := false;
LoeschenBtn.enabled := false;
end;
{if liu.visible or (LevelListBox.items.count=0) then
exit;}
SavGame := TSaveData.Create;
try
fil := GetSaveGameFileName(LevelListBox.Items.strings[LevelListBox.itemindex], false);
if not fileexists(fil) then raise Exception.Create(SSaveGameFileNotFound);
SavGame.LoadFromFile(fil);
mainform.FScore := SavGame.Score;
mainform.FLife := SavGame.Life;
mainform.FLevel := SavGame.Level;
mainform.FGameMode := SavGame.GameMode;
MainForm.FLevelDataAlreadyLoaded := true; // do not call NewLevel() in StartSceneMain
if Assigned(SavGame.LevelData) then
begin
MainForm.LevelData.Assign(SavGame.LevelData);
end;
finally
FreeAndNil(SavGame);
end;
mainform.playsound(smsSceneMov, false);
mainform.FNextScene := gsNewLevel;
mainform.FCheats := [];
close;
end;
 
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
resourcestring
SNoValidSaveGameName = 'Dies ist kein gültiger Spielstandname!';
SEmptySaveGameName = 'Bitte geben Sie einen Namen für den Spielstand ein';
SReplaceSaveGame = 'Spielstand ist bereits vorhanden. Ersetzen?';
var
SavGame: TSaveData;
i: integer;
begin
if Levelname.text = '' then
begin
MessageDlg(SEmptySaveGameName, mtError, [mbOK], 0);
LevelName.setfocus;
exit;
end;
for i := 1 to length(LevelName.text) do
begin
if (copy(LevelName.text, i, 1) = '\') or
(copy(LevelName.text, i, 1) = '/') or
(copy(LevelName.text, i, 1) = ':') or
(copy(LevelName.text, i, 1) = '*') or
(copy(LevelName.text, i, 1) = '?') or
(copy(LevelName.text, i, 1) = '"') or
(copy(LevelName.text, i, 1) = '<') or
(copy(LevelName.text, i, 1) = '>') or
(copy(LevelName.text, i, 1) = '|') then
begin
MessageDlg(SNoValidSaveGameName, mtError, [mbOK], 0);
LevelName.setfocus;
exit;
end;
end;
if LevelListBox.items.IndexOf(LevelName.text) > -1 then
begin
if MessageDlg(SReplaceSaveGame, mtConfirmation, mbYesNoCancel, 0) <> mrYes then
exit;
end;
 
SavGame := TSaveData.Create;
try
SavGame.Score := mainform.FScoreAtLevelStart;//mainform.FScore;
SavGame.Life := mainform.FLifeAtLevelStart;//mainform.FLife;
SavGame.Level := mainform.FLevel;
SavGame.GameMode := mainform.FGameMode;
if not Assigned(SavGame.LevelData) then SavGame.LevelData := TLevelData.Create;
SavGame.LevelData.Assign(mainForm.LevelData);
SavGame.SaveToFile(GetSaveGameFileName(LevelName.text, true));
finally
FreeAndNil(SavGame);
end;
 
SearchSaves;
end;
 
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
resourcestring
SNoNA = 'n/a';
SIsNormalLevel = 'Das Level ist ein norm. Level';
SIsRandomLevel = 'Das Level ist ein Zufallslevel';
SHasAttachedLevel = '%s mit Karte';
var
SavGame: TSaveData;
Punkte, Leben, Level: integer;
BeinhaltetLevelDaten: boolean;
Art: TGameMode;
fil: string;
begin
ladenbtn.enabled := true;
loeschenbtn.enabled := true;
li1.visible := false;
li2a.visible := false;
li2b.visible := false;
li3a.visible := false;
li3b.visible := false;
li4a.visible := false;
li4b.visible := false;
liu.visible := false;
liw.visible := false;
li1.caption := SNoNA;
li2b.caption := SNoNA;
li3b.caption := SNoNA;
li4b.caption := SNoNA;
if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
begin
ladenbtn.enabled := false;
loeschenbtn.enabled := false;
liw.visible := true;
exit;
end;
LevelName.Text := LevelListBox.Items.strings[LevelListBox.itemindex];
 
SavGame := TSaveData.Create;
try
try
fil := GetSaveGameFileName(LevelListBox.Items.strings[LevelListBox.itemindex], false);
if not fileexists(fil) then raise Exception.Create(SSaveGameFileNotFound);
SavGame.LoadFromFile(fil);
Punkte := SavGame.Score;
Leben := SavGame.Life;
Level := SavGame.Level;
Art := SavGame.GameMode;
BeinhaltetLevelDaten := Assigned(SavGame.LevelData);
except
liu.visible := true;
ladenbtn.enabled := false;
exit;
end;
finally
FreeAndNil(SavGame);
end;
li1.visible := true;
li2a.visible := true;
li2b.visible := true;
li3a.visible := true;
li3b.visible := true;
li4a.visible := true;
li4b.visible := true;
if Art = gmLevels then
li1.caption := SIsNormalLevel
else
li1.caption := SIsRandomLevel;
if BeinhaltetLevelDaten then
li1.Caption := Format(SHasAttachedLevel, [li1.Caption]);
li2b.caption := FloatToStrF(Punkte,ffNumber,14,0);
li3b.caption := inttostr(Level);
li4b.caption := inttostr(Leben);
end;
 
procedure TSpeicherungForm.LevelNameChange(Sender: TObject);
begin
//listbox1.Items.indexof('Level '+spinedit1.text);
end;
 
procedure TSpeicherungForm.Button4Click(Sender: TObject);
begin
mainform.dxtimer.enabled := not mainform.gamepause.checked;
close;
end;
 
procedure TSpeicherungForm.FormShow(Sender: TObject);
begin
mainform.dxtimer.enabled := false;
SearchSaves;
if mainform.FNotSave then
begin
label1.enabled := false;
LevelName.enabled := false;
SpeichernBtn.enabled := false;
end
else
begin
label1.enabled := true;
LevelName.enabled := true;
SpeichernBtn.enabled := true;
end;
end;
 
function TSpeicherungForm.GetSpielstandVerzeichnisSystem: string;
begin
// nicht mehr verwendet seit version 1.2
result := OwnDirectory + SSaveGameFolder;
end;
 
function TSpeicherungForm.GetSpielstandVerzeichnisUser: string;
begin
try
result := GetKnownFolderPath(FOLDERID_SavedGames);
except
result := '';
end;
if result = '' then
begin
// Pre Vista
result := OwnDirectory + SSaveGameFolder;
end
else
begin
result := IncludeTrailingPathDelimiter(result);
result := result + SSaveGameSubFolder;
end;
result := IncludeTrailingPathDelimiter(result);
ForceDirectories(result);
end;
 
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
begin
SearchSaves;
end;
 
procedure TSpeicherungForm.AbbrechenBtnClick(Sender: TObject);
begin
close;
end;
 
procedure TSpeicherungForm.FormHide(Sender: TObject);
begin
if not mainform.gamepause.checked then mainform.dxtimer.enabled := true;
end;
 
procedure TSpeicherungForm.LevelListBoxDblClick(Sender: TObject);
begin
LadenBtn.click;
end;
 
end.
 
/GamSpeicherung.dfm
0,0 → 1,202
object SpeicherungForm: TSpeicherungForm
Left = 280
Top = 152
BorderStyle = bsDialog
Caption = 'Spielst'#228'nde'
ClientHeight = 424
ClientWidth = 447
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Position = poMainFormCenter
OnHide = FormHide
OnShow = FormShow
TextHeight = 13
object Bevel1: TBevel
Left = 8
Top = 56
Width = 433
Height = 2
Shape = bsBottomLine
end
object Label2: TLabel
Left = 8
Top = 72
Width = 58
Height = 13
Caption = 'Spielst'#228'nde:'
end
object Label3: TLabel
Left = 8
Top = 336
Width = 67
Height = 13
Caption = 'Informationen:'
end
object Label1: TLabel
Left = 8
Top = 20
Width = 78
Height = 13
Caption = 'Spielstandname:'
Enabled = False
end
object LadenBtn: TButton
Left = 336
Top = 72
Width = 105
Height = 25
Caption = '&Laden'
Enabled = False
TabOrder = 0
OnClick = LadenBtnClick
end
object LoeschenBtn: TButton
Left = 336
Top = 104
Width = 105
Height = 25
Caption = 'L'#246'&schen'
Enabled = False
TabOrder = 1
OnClick = LoeschenBtnClick
end
object AktualisierenBtn: TButton
Left = 336
Top = 144
Width = 105
Height = 25
Caption = '&Aktualisieren'
TabOrder = 2
OnClick = DsFancyButton2Click
end
object SpeichernBtn: TButton
Left = 336
Top = 16
Width = 105
Height = 25
Caption = '&Speichern'
Enabled = False
TabOrder = 3
OnClick = SpeichernBtnClick
end
object AbbrechenBtn: TButton
Left = 336
Top = 392
Width = 105
Height = 25
Cancel = True
Caption = 'Schli&e'#223'en'
Default = True
ModalResult = 1
TabOrder = 4
OnClick = AbbrechenBtnClick
end
object LevelListBox: TListBox
Left = 112
Top = 72
Width = 201
Height = 249
ItemHeight = 13
TabOrder = 5
OnClick = LevelListBoxClick
OnDblClick = LevelListBoxDblClick
end
object LevelName: TEdit
Left = 112
Top = 16
Width = 201
Height = 21
Enabled = False
TabOrder = 6
end
object ElPanel1: TPanel
Left = 112
Top = 336
Width = 201
Height = 81
BevelOuter = bvLowered
Color = clWindow
TabOrder = 7
object li4a: TLabel
Left = 8
Top = 56
Width = 33
Height = 13
Caption = 'Leben:'
end
object li1: TLabel
Left = 8
Top = 8
Width = 17
Height = 13
Caption = 'n/a'
end
object li3b: TLabel
Left = 96
Top = 40
Width = 17
Height = 13
Caption = 'n/a'
end
object li3a: TLabel
Left = 8
Top = 40
Width = 29
Height = 13
Caption = 'Level:'
end
object li4b: TLabel
Left = 96
Top = 56
Width = 17
Height = 13
Caption = 'n/a'
end
object liu: TLabel
Left = 8
Top = 8
Width = 156
Height = 13
Caption = 'Der Spielstand ist nicht einlesbar!'
Font.Charset = DEFAULT_CHARSET
Font.Color = clMaroon
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
Visible = False
end
object liw: TLabel
Left = 8
Top = 8
Width = 160
Height = 13
Caption = 'Bitte w'#228'hlen Sie einen Spielstand.'
Font.Charset = DEFAULT_CHARSET
Font.Color = clNavy
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
Visible = False
end
object li2a: TLabel
Left = 8
Top = 24
Width = 37
Height = 13
Caption = 'Punkte:'
end
object li2b: TLabel
Left = 96
Top = 24
Width = 17
Height = 13
Caption = 'n/a'
end
end
end
/LevSpeicherung.dfm
1,11 → 1,10
object SpeicherungForm: TSpeicherungForm
Left = 281
Top = 153
BorderIcons = [biSystemMenu]
BorderStyle = bsSingle
BorderStyle = bsDialog
Caption = 'Levels'
ClientHeight = 409
ClientWidth = 449
ClientHeight = 424
ClientWidth = 447
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
12,11 → 11,10
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
OnCreate = FormCreate
OnHide = FormHide
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object Bevel1: TBevel
Left = 8
28,23 → 26,23
object Label2: TLabel
Left = 8
Top = 72
Width = 58
Width = 34
Height = 13
Caption = 'Spielst'#228'nde:'
Caption = 'Levels:'
end
object Label3: TLabel
Left = 8
Top = 336
Width = 92
Width = 67
Height = 13
Caption = 'Levelinformationen:'
Caption = 'Informationen:'
end
object Label1: TLabel
Left = 8
Top = 20
Width = 78
Width = 55
Height = 13
Caption = 'Spielstandname:'
Caption = 'Levelname:'
end
object LadenBtn: TButton
Left = 336
86,7 → 84,7
end
object AbbrechenBtn: TButton
Left = 336
Top = 376
Top = 391
Width = 105
Height = 25
Cancel = True
104,13 → 102,12
ItemHeight = 13
TabOrder = 5
OnClick = LevelListBoxClick
OnDblClick = LevelListBoxDblClick
end
object ElPanel1: TPanel
Left = 112
Top = 336
Width = 201
Height = 65
Height = 80
BevelOuter = bvLowered
Color = clWindow
TabOrder = 6
173,9 → 170,9
object liw: TLabel
Left = 8
Top = 8
Width = 104
Width = 125
Height = 13
Caption = 'W'#228'hlen Sie ein Level.'
Caption = 'Bitte w'#228'hlen Sie ein Level.'
Font.Charset = DEFAULT_CHARSET
Font.Color = clNavy
Font.Height = -11
184,27 → 181,22
ParentFont = False
Visible = False
end
object li4: TLabel
Left = 8
Top = 56
Width = 118
Height = 13
Caption = 'Name / Autor unbekannt'
end
object SpinEditEdt: TEdit
end
object LevelNumber: TSpinEdit
Left = 112
Top = 20
Width = 185
Height = 21
MaxLength = 4
Top = 16
Width = 201
Height = 22
MaxValue = 0
MinValue = 0
TabOrder = 7
Text = '1'
OnChange = SpinEditEdtChange
OnKeyPress = SpinEditEdtKeyPress
Value = 0
end
object SpinEdit: TUpDown
Left = 296
Top = 22
Width = 17
Height = 19
Min = 1
Max = 9999
Position = 1
TabOrder = 8
OnClick = SpinEditClick
end
end
/ComHilfe.pas
0,0 → 1,107
unit ComHilfe;
 
interface
 
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleCtrls, SHDocVw;
 
type
THilfeForm = class(TForm)
WebBrowser1: TWebBrowser;
procedure WebBrowser1BeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; const URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
private
FDirectory: string;
public
procedure ShowHTMLHelp(AHTML: string);
procedure ShowMarkDownHelp(AMarkDownFile: string);
end;
 
var
HilfeForm: THilfeForm;
 
implementation
 
uses
MarkDownProcessor, ShellAPI, Global;
 
{$R *.dfm}
 
procedure THilfeForm.ShowHTMLHelp(AHTML: string);
var
DOC: Variant;
begin
if not Assigned(WebBrowser1.Document) then
WebBrowser1.Navigate('about:blank'); // do not localize
 
DOC := WebBrowser1.Document;
DOC.Clear;
DOC.Write(AHTML);
Doc.Close;
end;
 
procedure THilfeForm.ShowMarkDownHelp(AMarkDownFile: string);
var
md: TMarkdownProcessor;
slHtml, slCss: TStringList;
cssFile: string;
begin
FDirectory := ExtractFilePath(AMarkDownFile);
slHtml := TStringList.Create();
slCss := TStringList.Create();
try
slHtml.LoadFromFile(AMarkDownFile);
cssFile := IncludeTrailingPathDelimiter(FDirectory) + 'Style.css'; // do not localize
if FileExists(cssFile) then
slCss.LoadFromFile(cssFile);
md := TMarkdownProcessor.CreateDialect(mdCommonMark);
try
//md.AllowUnsafe := true;
ShowHTMLHelp(
'<html>'+ // do not localize
'<head>'+ // do not localize
'<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'+ // do not localize
'<style>'+slCss.Text+'</style>'+ // do not localize
'</head>'+ // do not localize
'<body>'+ // do not localize
md.process(UTF8ToString(RawByteString(slHtml.Text)))+
'</body>'+ // do not localize
'</html>'); // do not localize
finally
FreeAndNil(md);
end;
finally
FreeAndNil(slHtml);
FreeAndNil(slCss);
end;
end;
 
procedure THilfeForm.WebBrowser1BeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; const URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if SameText(Copy(URL,1,7),'http://') or // do not localize
SameText(Copy(URL,1,8),'https://') or // do not localize
SameText(Copy(URL,1,7),'mailto:') then // do not localize
begin
// Links in default Browser anzeigen
ShellExecute(handle, 'open', PChar(string(URL)), '', '', SW_NORMAL); // do not localize
Cancel := true;
end
else if SameText(ExtractFileExt(URL), '.md') then // do not localize
begin
if SameText(Copy(URL,1,6), 'about:') then // do not localize
ShowMarkDownHelp(IncludeTrailingPathDelimiter(FDirectory) + Copy(URL,7,Length(URL)))
else
ShowMarkDownHelp(URL);
Cancel := true;
end
else
begin
Cancel := false;
end;
end;
 
end.
/ComInfo.pas
0,0 → 1,62
unit ComInfo;
interface
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ShellAPI, ExtCtrls;
 
type
TInfoForm = class(TForm)
OkBtn: TButton;
HomeLbl: TLabel;
Image: TImage;
FirmaLbl: TLabel;
NameLbl: TLabel;
VersionLbl: TLabel;
EMailLbl: TLabel;
CopyrightLbl: TLabel;
Copyright2Lbl: TLabel;
URL2: TLabel;
URL1: TLabel;
MemoMitwirkende: TMemo;
procedure OkBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure WebsiteClick(Sender: TObject);
procedure EMailClick(Sender: TObject);
end;
 
var
InfoForm: TInfoForm;
 
implementation
 
uses
Global;
 
{$R *.DFM}
 
procedure TInfoForm.OkBtnClick(Sender: TObject);
begin
close;
end;
 
procedure TInfoForm.FormCreate(Sender: TObject);
resourcestring
SVersion = 'Version %s';
begin
VersionLbl.caption := Format(SVersion, [ProgramVersion]);
end;
 
procedure TInfoForm.WebsiteClick(Sender: TObject);
begin
ShellExecute(application.Handle, 'open', pchar('https://'+url2.caption+'/'), nil, nil, SW_SHOW); // do not localize
end;
 
procedure TInfoForm.EMailClick(Sender: TObject);
begin
ShellExecute(application.Handle, 'open', pchar('mailto:'+url1.Caption+'?subject=SpaceMission ' + ProgramVersion), nil, nil, SW_SHOW); // do not localize
end;
 
end.
 
/LevOptions.dfm
1,11 → 1,10
object LevelForm: TLevelForm
Left = 195
Top = 103
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
BorderStyle = bsDialog
Caption = 'Leveleigenschaften'
ClientHeight = 252
ClientWidth = 388
ClientHeight = 251
ClientWidth = 384
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
12,11 → 11,9
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poMainFormCenter
OnHide = FormHide
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object ElPopupButton1: TButton
Left = 280
52,6 → 49,20
Height = 13
Caption = 'Gr'#246#223'e des Spielfeldes:'
end
object Label2: TLabel
Left = 16
Top = 136
Width = 124
Height = 13
Caption = 'Interner Name des Levels:'
end
object Label3: TLabel
Left = 16
Top = 168
Width = 57
Height = 13
Caption = 'Level-Autor:'
end
object Panel1: TPanel
Left = 16
Top = 56
58,6 → 69,7
Width = 329
Height = 57
Color = clInfoBk
ParentBackground = False
TabOrder = 0
object ElLabel1: TLabel
Left = 8
75,40 → 87,45
object ElLabel2: TLabel
Left = 80
Top = 10
Width = 225
Width = 228
Height = 39
Caption =
'Die Spielfeldgr'#246#223'e wird nur von dem Leveleditor'#13#10'ben'#246'tigt. Das '#228 +
'ndern dieser Gr'#246#223'e wirkt sich'#13#10'nicht auf die Gr'#246#223'e der Levels au' +
's.'
'Die Spielfeldgr'#246#223'e wird nur von dem Leveleditor '#13#10'ben'#246'tigt. Das ' +
#196'ndern dieser Gr'#246#223'e wirkt sich '#13#10'nicht auf die Gr'#246#223'e der Levels ' +
'aus.'
Color = clInfoBk
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentColor = False
ParentFont = False
end
end
object GroesseEdt: TEdit
object Groesse: TSpinEdit
Left = 144
Top = 28
Width = 185
Height = 21
MaxLength = 4
Width = 121
Height = 22
MaxValue = 65000
MinValue = 100
TabOrder = 1
Text = '1200'
OnChange = GroesseEdtChange
OnKeyPress = GroesseEdtKeyPress
Value = 1200
end
object Groesse: TUpDown
Left = 328
Top = 30
Width = 17
Height = 19
Max = 9999
Position = 1
object LevName: TEdit
Left = 167
Top = 133
Width = 178
Height = 21
TabOrder = 2
OnClick = GroesseClick
end
object LevAuthor: TEdit
Left = 167
Top = 160
Width = 178
Height = 21
TabOrder = 3
end
end
end
/LevSpeicherung.pas
4,7 → 4,7
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Spin, ComCtrls;
StdCtrls, ExtCtrls, Spin, ComCtrls{$IF CompilerVersion >= 23.0}, System.UITypes{$IFEND};
 
type
TSpeicherungForm = class(TForm)
25,10 → 25,10
li2b: TLabel;
li2a: TLabel;
li3b: TLabel;
li4: TLabel;
liu: TLabel;
liw: TLabel;
SpinEditEdt: TEdit;
SpinEdit: TUpDown;
LevelNumber: TSpinEdit;
procedure LoeschenBtnClick(Sender: TObject);
procedure LadenBtnClick(Sender: TObject);
procedure SpeichernBtnClick(Sender: TObject);
38,35 → 38,33
procedure DsFancyButton2Click(Sender: TObject);
procedure AbbrechenBtnClick(Sender: TObject);
procedure LevelNameChange(Sender: TObject);
procedure LevelListBoxDblClick(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure SpinEditClick(Sender: TObject; Button: TUDBtnType);
procedure SpinEditEdtKeyPress(Sender: TObject; var Key: Char);
procedure SpinEditEdtChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
function GetListBoxSelectedLevelNumber: integer;
public
procedure SearchLevels;
function RightStr(str: string; count: integer): string;
function Filter(n: integer; s: string): string;
end;
 
var
SpeicherungForm: TSpeicherungForm;
 
const
FCompVersion = '1.0';
 
implementation
 
uses
LevMain;
Global, LevMain, ComLevelReader;
 
{$R *.DFM}
 
resourcestring
SLevelListBox = 'Level %d';
SSelbsterstellt = 'Selbsterstellt';
SLevelFileNotFound = 'Leveldatei nicht gefunden';
 
procedure TSpeicherungForm.SearchLevels;
var
{sr: TSearchRec;
res: integer;}
i: integer;
fil: TLevelFile;
begin
//SpinEdit.Value := 1;
LevelListBox.items.clear;
76,40 → 74,34
li1b.visible := false;
li2b.visible := false;
li3b.visible := false;
li4.visible := false;
liu.Visible := false;
liw.visible := true;
LadenBtn.enabled := false;
LoeschenBtn.enabled := false;
{res := FindFirst(mainform.fdirectory+'Levels\*.lev', 0, sr);
try
while (res = 0) do
for i := 1 to MaxPossibleLevels do
begin
if (sr.name <> '.') and (sr.name <> '..') then
LevelListBox.items.Add(copy(sr.Name, 0, length(sr.name)-4));
res := FindNext(sr);
end;
finally
FindClose(sr);
end;}
for i := 1 to 9999 do
fil := GetLevelFileName(i, false);
if fil.found then
begin
if fileexists(mainform.fdirectory+'Levels\Level '+inttostr(i)+'.lev') then
LevelListBox.items.Add('Level ' + inttostr(i));
if fil.isUser then
LevelListBox.items.Add(Format(SLevelListBox, [i])+' ('+SSelbsterstellt+')')
else
LevelListBox.items.Add(Format(SLevelListBox, [i]));
end;
end;
end;
 
procedure TSpeicherungForm.LoeschenBtnClick(Sender: TObject);
resourcestring
SReallyDeleteLevel = 'Dieses Level wirklich löschen?';
var
Markiert: boolean;
i: integer;
fil: TLevelFile;
begin
Markiert := false;
for i := 0 to LevelListBox.items.Count-1 do
if LevelListBox.ItemIndex = -1 then exit;
 
if MessageDlg(SReallyDeleteLevel, mtConfirmation, mbYesNoCancel, 0) = mrYes then
begin
if LevelListBox.Selected[i] then Markiert := true;
end;
if not Markiert then exit;
if MessageDlg('Dieses Level wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
li1a.visible := false;
li2a.visible := false;
li3a.visible := false;
116,154 → 108,59
li1b.visible := false;
li2b.visible := false;
li3b.visible := false;
li4.visible := false;
liu.visible := false;
liw.visible := true;
LadenBtn.enabled := false;
LoeschenBtn.enabled := false;
deletefile(mainform.FDirectory+'Levels\'+
LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
fil := GetLevelFileName(GetListBoxSelectedLevelNumber,false);
if not fil.found then raise Exception.Create(SLevelFileNotFound);
deletefile(fil.fileLocation);
SearchLevels;
end;
end;
 
procedure TSpeicherungForm.LadenBtnClick(Sender: TObject);
resourcestring
SLoadNewLevelAndDiscardChanges = 'Neues Level laden und Änderungen verwerfen?';
var
Markiert: boolean;
i, TempArtMain, TempLiveMain: integer;
SavGame: textfile;
Ergebnis: array[1..5] of string;
fil: TLevelFile;
begin
Markiert := false;
for i := 0 to LevelListBox.items.Count-1 do
if LevelListBox.ItemIndex = -1 then exit;
 
if MainForm.LevChanged and (MainForm.LevData.CountEnemies>0) then
begin
if LevelListBox.Selected[i] then Markiert := true;
if MessageDlg(SLoadNewLevelAndDiscardChanges, mtConfirmation, mbYesNoCancel, 0) <> mrYes then exit;
end;
if not Markiert then exit;
if LevelListBox.items.count = 0 then
begin
li1a.visible := false;
li2a.visible := false;
li3a.visible := false;
li1b.visible := false;
li2b.visible := false;
li3b.visible := false;
liw.visible := true;
LadenBtn.enabled := false;
LoeschenBtn.enabled := false;
end;
 
// Da Button bei ungültigen Level deaktiviert wird, ist das nicht mehr nötig.
{if liu.visible or (LevelListBox.items.count=0) then
exit;}
// Vorbereiten
 
MainForm.DestroyLevel;
MainForm.LevData.RasterErzwingen := true;
fil := GetLevelFileName(GetListBoxSelectedLevelNumber,false);
if not fil.found then raise Exception.Create(SLevelFileNotFound);
MainForm.LevData.LoadFromFile(fil.fileLocation);
MainForm.RefreshFromLevData;
MainForm.LevChanged := false;
// Öffnen
AssignFile(SavGame, mainform.FDirectory+'Levels\'+
LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
Reset(SavGame);
// Laden
ReadLN(SavGame); // --> Copyrightinfo
ReadLN(SavGame); // --> Copyrightinfo
ReadLN(SavGame, Ergebnis[5]); // --> Länge der Karte
MainForm.ScrollBar.Max := strtoint(Ergebnis[5]);
MainForm.Enemys.Clear;
TempArtMain := MainForm.ArtChecked;
TempLiveMain := MainForm.LiveEdit;
while not seekEoF(SavGame) do
begin
ReadLN(SavGame, Ergebnis[3]);
ReadLN(SavGame, Ergebnis[1]);
ReadLN(SavGame, Ergebnis[2]);
ReadLN(SavGame, Ergebnis[4]);
MainForm.EnemyAdd(strtoint(Ergebnis[1]), strtoint(Ergebnis[2]), strtoint(Ergebnis[3]), strtoint(Ergebnis[4]));
MainForm.ArtChecked := strtoint(Ergebnis[3]);
MainForm.LiveEdit := strtoint(Ergebnis[4]);
MainForm.EnemyCreate(strtoint(Ergebnis[1]), strtoint(Ergebnis[2]));
inc(MainForm.NumEnemys);
if Ergebnis[3] = '7' then MainForm.Boss := true;
end;
MainForm.LiveEdit := TempLiveMain;
MainForm.ArtChecked := TempArtMain;
// Schließen
CloseFile(SavGame);
// Nacharbeiten
MainForm.AnzeigeAct;
close;
end;
 
function TSpeicherungForm.RightStr(str: string; count: integer): string;
begin
result := copy(str, length(str)-(count-1), count);
end;
 
function TSpeicherungForm.Filter(n: integer; s: string): string;
var
i, last: integer;
start, start2: boolean;
temp: string;
begin
last := 0;
start := false;
start2 := false;
temp := '';
if n = 1 then
begin
for i := 1 to length(s)+1 do
begin
if copy(s, i, 1) = '-' then
begin
last := i;
break;
end;
end;
temp := copy(s, 1, last-1);
end;
if n = 2 then
begin
for i := 1 to length(s)+1 do
begin
if start2 then start := true;
if copy(s, i, 1) = '-' then start2 := true;
if (copy(s, i, 1) = ':') and start then break;
if start then temp := temp + copy(s, i, 1)
end;
end;
if n = 3 then
begin
for i := 1 to length(s)+1 do
begin
if start2 then start := true;
if copy(s, i, 1) = ':' then start2 := true;
if (copy(s, i, 1) = '(') and start then break;
if start then temp := temp + copy(s, i, 1)
end;
end;
if n = 4 then
begin
for i := 1 to length(s)+1 do
begin
if start2 then start := true;
if copy(s, i, 1) = '(' then start2 := true;
if (copy(s, i, 1) = ')') and start then break;
if start then temp := temp + copy(s, i, 1)
end;
end;
result := temp;
end;
 
procedure TSpeicherungForm.SpeichernBtnClick(Sender: TObject);
var
SavGame: textfile;
i, j: integer;
puffer: string;
resourcestring
SLevelIsEmpty = 'Das Level ist leer!';
SLevelAlreadyExists = 'Level ist bereits vorhanden. Ersetzen?';
SNoValidLevelName = 'Dies ist kein gültiger Levelname!';
begin
if mainform.Enemys.count = 0 then
if MainForm.LevData.CountEnemies = 0 then
begin
MessageDlg('Das Level ist leer!', mtError, [mbOK], 0);
SpinEdit.SetFocus;
MessageDlg(SLevelIsEmpty, mtError, [mbOK], 0);
LevelNumber.SetFocus;
exit;
end;
{for i := 0 to length(LevelName.text) do
{for i := 1 to length(LevelName.text) do
begin
if (copy(LevelName.text, i, 1) = '\') or
(copy(LevelName.text, i, 1) = '/') or
275,45 → 172,22
(copy(LevelName.text, i, 1) = '>') or
(copy(LevelName.text, i, 1) = '|') then
begin
MessageDlg('Dies ist kein gültiger Levelname!', mtError, [mbOK], 0);
MessageDlg(SNoValidLevelName, mtError, [mbOK], 0);
LevelName.SetFocus;
exit;
end;
end;}
if LevelListBox.items.IndexOf('Level ' + inttostr(SpinEdit.Position)) > -1 then
if (LevelListBox.items.IndexOf(Format(SLevelListBox, [LevelNumber.Value])) > -1) or
(LevelListBox.items.IndexOf(Format(SLevelListBox, [LevelNumber.Value])+' ('+SSelbsterstellt+')') > -1) then
begin
if MessageDlg('Level ist bereits vorhanden. Ersetzen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
if MessageDlg(SLevelAlreadyExists, mtConfirmation, mbYesNoCancel, 0) <> mrYes then
exit;
end;
// Öffnen oder erstellen
AssignFile(SavGame, mainform.FDirectory+'Levels\Level '+inttostr(SpinEdit.Position)+'.lev');
Rewrite(SavGame);
// Sortierung
for j := 0 to mainform.enemys.Count - 2 do
begin
for i := 0 to mainform.enemys.Count - 2 do
begin
if strtoint(filter(1, mainform.enemys.Strings[i])) > strtoint(filter(1, mainform.enemys.Strings[i + 1])) then
begin
puffer := mainform.enemys.Strings[i];
mainform.enemys.Strings[i] := mainform.enemys.Strings[i + 1];
mainform.enemys.Strings[i + 1] := puffer;
end;
end;
end;
 
// Speichern
WriteLN(SavGame, '; SpaceMission ' + FCompVersion);
WriteLN(SavGame, '; LEV-File');
WriteLN(SavGame, inttostr(MainForm.ScrollBar.Max)); // --> Länge der Karte
for i := 0 to mainform.enemys.count-1 do
begin
WriteLN(SavGame, filter(3, mainform.enemys.Strings[i]));
WriteLN(SavGame, filter(1, mainform.enemys.Strings[i]));
WriteLN(SavGame, filter(2, mainform.enemys.Strings[i]));
WriteLN(SavGame, filter(4, mainform.enemys.Strings[i]));
end;
// Schließen
CloseFile(SavGame);
MainForm.LevData.LevelEditorLength := MainForm.ScrollBar.Max;
MainForm.LevData.SaveToFile(GetLevelFileName(LevelNumber.Value,true).fileLocation);
 
// Nacharbeiten
MainForm.LevChanged := false;
MainForm.AnzeigeAct;
321,10 → 195,17
end;
 
procedure TSpeicherungForm.LevelListBoxClick(Sender: TObject);
resourcestring
SYes = 'Ja';
SNo = 'Nein';
SFields = '%d Felder';
SXbyY = '%s von %s';
var
Ergebnis, boss, l, temp: string;
SavGame: textfile;
x, a: integer;
LevelData: TLevelData;
boss: boolean;
i: Integer;
anzahlEinheiten: integer;
fil: TLevelFile;
begin
li1a.visible := false;
li2a.visible := false;
332,6 → 213,7
li1b.visible := false;
li2b.visible := false;
li3b.visible := false;
li4.visible := false;
liu.visible := false;
liw.visible := false;
if (LevelListBox.items.count=0) or (LevelListBox.itemindex = -1) then
341,47 → 223,27
liw.visible := true;
exit;
end;
temp := LevelListBox.Items.strings[LevelListBox.itemindex];
SpinEdit.Position := strtoint(RightStr(temp, length(temp)-6));
AssignFile(SavGame, mainform.FDirectory+'Levels\'+
LevelListBox.Items.strings[LevelListBox.itemindex]+'.lev');
Reset(SavGame);
ReadLN(SavGame, Ergebnis);
if Ergebnis <> '; SpaceMission '+FCompVersion then
LevelNumber.Value := GetListBoxSelectedLevelNumber;
 
LevelData := TLevelData.Create;
try
try
LevelData.RasterErzwingen := true;
 
fil := GetLevelFileName(GetListBoxSelectedLevelNumber,false);
if not fil.found then raise Exception.Create(SLevelFileNotFound);
LevelData.LoadFromFile(fil.fileLocation);
 
boss := false;
anzahlEinheiten := Length(LevelData.EnemyAdventTable);
for i := 0 to anzahlEinheiten - 1 do
begin
liu.visible := true;
LadenBtn.enabled := false;
CloseFile(SavGame);
exit;
end;
ReadLN(SavGame, Ergebnis);
if Ergebnis <> '; LEV-File' then
if LevelData.EnemyAdventTable[i].enemyType = etEnemyBoss then
begin
liu.visible := true;
LadenBtn.enabled := false;
CloseFile(SavGame);
exit;
boss := true;
end;
ReadLN(SavGame, l);
x := 0;
a := 0;
boss := 'Nein';
while not SeekEOF(SavGame) do
begin
ReadLN(SavGame, Ergebnis);
inc(a);
if a = 5 then a := 1;
if (a = 1) and (Ergebnis = '7') then boss := 'Ja';
inc(x);
end;
CloseFile(SavGame);
if a <> 4 then
begin
liu.visible := true;
LadenBtn.enabled := false;
end
else
begin
 
li1a.visible := true;
li2a.visible := true;
li3a.visible := true;
388,13 → 250,24
li1b.visible := true;
li2b.visible := true;
li3b.visible := true;
li4.visible := true;
LadenBtn.enabled := true;
LoeschenBtn.enabled := true;
li1b.caption := inttostr(trunc(x / 4));
li2b.caption := boss;
li3b.caption := l + ' Felder';
li1b.caption := inttostr(anzahlEinheiten);
if boss then
li2b.caption := SYes
else
li2b.caption := SNo;
li3b.caption := Format(SFields, [LevelData.LevelEditorLength]);
li4.Caption := Trim(Format(SXbyY, [LevelData.LevelName, LevelData.LevelAuthor]));
finally
FreeAndNil(LevelData);
end;
except
liu.visible := true;
LadenBtn.enabled := false;
end;
end;
 
procedure TSpeicherungForm.Button4Click(Sender: TObject);
begin
407,6 → 280,23
SearchLevels;
end;
 
function TSpeicherungForm.GetListBoxSelectedLevelNumber: integer;
var
i: integer;
begin
result := -1;
if LevelListBox.itemindex = -1 then exit;
for i := 1 to MaxPossibleLevels do
begin
if (LevelListBox.Items.strings[LevelListBox.itemindex] = Format(SLevelListBox, [i])) or
(LevelListBox.Items.strings[LevelListBox.itemindex] = Format(SLevelListBox, [i])+' ('+SSelbstErstellt+')') then
begin
result := i;
exit;
end;
end;
end;
 
procedure TSpeicherungForm.DsFancyButton2Click(Sender: TObject);
begin
SearchLevels;
422,9 → 312,11
{...}
end;
 
procedure TSpeicherungForm.LevelListBoxDblClick(Sender: TObject);
procedure TSpeicherungForm.FormCreate(Sender: TObject);
begin
LadenBtn.click;
LevelNumber.MinValue := 1;
LevelNumber.MaxValue := MaxPossibleLevels;
LevelNumber.Value := 1;
end;
 
procedure TSpeicherungForm.FormHide(Sender: TObject);
432,23 → 324,5
mainform.dxtimer.enabled := true;
end;
 
procedure TSpeicherungForm.SpinEditClick(Sender: TObject;
Button: TUDBtnType);
begin
SpinEditEdt.Text := inttostr(SpinEdit.position);
end;
 
procedure TSpeicherungForm.SpinEditEdtKeyPress(Sender: TObject;
var Key: Char);
begin
if not (Key in [#13, #08, '0'..'9']) then
Key := #0;
end;
 
procedure TSpeicherungForm.SpinEditEdtChange(Sender: TObject);
begin
SpinEdit.Position := strtoint(SpinEditEdt.text);
end;
 
end.
 
/DirectX/Graphic.dxg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/DirectX/Graphics.dxg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/DirectX/Sound.dxw
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/DirectX/Music.dxm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/DirectX
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/ComHilfe.dfm
0,0 → 1,29
object HilfeForm: THilfeForm
Left = 0
Top = 0
ClientHeight = 484
ClientWidth = 730
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = []
Position = poMainFormCenter
TextHeight = 15
object WebBrowser1: TWebBrowser
Left = 0
Top = 0
Width = 730
Height = 484
Align = alClient
TabOrder = 0
OnBeforeNavigate2 = WebBrowser1BeforeNavigate2
ControlData = {
4C000000734B0000063200000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
end
/README.md
0,0 → 1,8
 
# SpaceMission
 
The game SpaceMission developed by Daniel Marschall is a simple space game, similar to Astroids or similar classics, in which you have to fly through a hail of comets and shoot down UFOs and other spaceships. It is equipped with a level editor and can also generation of random levels as well as 31 predefined levels. Despite the simple way of playing, the game is fun and easy to play, especially during short breaks.
 
SpaceMission, Version 1.0 was rated 90% by Gamer AG and was published in the magazines PC Games and Chip.
 
Licensed under the terms of the Apache 2.0 license.
/VCL_MARKDOWN/MarkdownCommonMark.pas
0,0 → 1,3697
Unit MarkdownCommonMark;
 
{
Copyright (c) 2011+, Health Intersections Pty Ltd (http://www.healthintersections.com.au)
All rights reserved.
 
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of HL7 nor the names of its contributors may be used to
endorse or promote products derived from this software without specific
prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
}
 
{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
 
{
How to use this - see MarkdownProcessor; this unit is not intended to be used directly
 
Still to do:
- link references
- follow up on a few failing tests that I don't understand - see mode : too-hard
- test under FPC
 
not planned to be supported
- HTML blocks
 
note: tests related to link references and HTML blocks run (to check that the processing doesn't blow up), but output comparison is never checked
 
note about GFM:
the GFM tests and the CommonMark tests disagree about proper
processing of lists indented more than 3 spaces. This is probably
just poor quality in the GFM tests, which do have a number of inconsistencies
}
{$IFDEF FPC}
{$WARN 4105 off : Implicit string type conversion with potential data loss from "$1" to "$2"}
{$WARN 4044 off : Comparison might be always false due to range of constant and expression}
{$ENDIF}
interface
 
uses
SysUtils, Classes, Math, Generics.Collections, Character,
MarkdownUnicodeUtils,
{$IFDEF FPC}
RegExpr,
UnicodeData,
{$ELSE}
System.RegularExpressions,
{$ENDIF}
MarkdownHTMLEntities,
MarkdownProcessor;
 
const
LENGTH_INCREMENT = 116;
EMAIL_REGEX = '^[a-zA-Z0-9.!#$%&''*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$';
TEST_STYLING = false; // set this true to check style tracking while doing unit tests (10% speed hit)
 
type
TCommonMarkStyle = (cmUnknown, cmText, cmEntity, cmControlChar, cmDelimiter, cmCode, cmURL, cmTableMarker, cmDel);
 
{$IFDEF FPC}
 
{ TStringBuilder }
TStringBuilder = class
private
FBuild : String;
FLength : integer;
public
procedure clear;
procedure append(c : char); overload;
procedure append(s : String); overload;
function toString : String; override;
end;
 
{ TRegEx }
TRegEx = class
public
class function isMatch(cnt, regex : String) : boolean;
end;
 
{$ENDIF}
TCMWhitespaceMode = (wsLeave, wsTrim, wsStrip);
// parser location tracking is done to support syntax highlighting. The parser won't report any errors from the markdown
TLocation = record
line : integer;
col : integer;
end;
 
// Abstract Syntax Tree
 
// inlines
TCMTextNode = class
private
FName: String;
FAttrs: TDictionary<String, String>;
FContent : String;
FBuild : String;
FLength : integer;
FOpener, FCloser : boolean;
FActive: boolean;
FPos : TLocation; // start offset in this text
// Start : Integer;
function GetAttrs: TDictionary<String, String>;
 
function renderAttrs : String;
procedure render(b : TStringBuilder);
function getText : String;
procedure SetName(const Value: String);
procedure SetActive(const Value: boolean);
public
constructor Create(loc : TLocation);
destructor Destroy; override;
 
property name : String read FName write SetName; // '' means just a test node
property attrs : TDictionary<String,String> read GetAttrs;
property opener : boolean read FOpener write FOpener;
property closer : boolean read FCloser write FCloser;
property active : boolean read FActive write SetActive;
 
procedure addText(ch : char); overload;
procedure addText(s : String); overload;
procedure removeChars(count : integer);
function isEmpty : boolean;
end;
 
TCMTextNodes = class (TObjectList<TCMTextNode>)
public
function addOpener(loc : TLocation; name : String) : TCMTextNode;
function addText(loc : TLocation; cnt : String) : TCMTextNode; // if the last is text and active, add to that
function addTextNode(loc : TLocation; cnt : String) : TCMTextNode; // always make a new node, and make it inactive
function addCloser(loc : TLocation; name : String) : TCMTextNode;
 
// image parsing
function plainTextSince(node : TCMTextNode) : String;
procedure removeAfter(node : TCMTextNode);
 
// emph processing
procedure addOpenerAfter(name : String; node : TCMTextNode); // line/col = 0,0
procedure addCloserBefore(name : String; node : TCMTextNode); // line/col = 0,0
end;
 
// blocks
TCMBlock = class abstract (TObject)
private
FClosed: boolean;
FLine : integer;
protected
procedure render(parent : TCMBlock; b : TStringBuilder); virtual; abstract;
function wsMode : TCMWhitespaceMode; virtual;
public
constructor Create(line : Integer);
property closed : boolean read FClosed write FClosed;
property line : Integer read FLine;
end;
 
TCMContainerBlock = class abstract (TCMBlock)
private
FBlocks: TObjectList<TCMBlock>;
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
public
constructor Create(line : Integer);
destructor Destroy; override;
 
property blocks : TObjectList<TCMBlock> read FBlocks;
end;
 
TCommonMarkDocument = class (TCMContainerBlock);
 
TCMParagraphBlock = class (TCMContainerBlock)
private
FHeader: integer;
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
public
function isPlainPara : boolean; virtual;
property header : integer read FHeader write FHeader;
end;
 
TCMQuoteBlock = class (TCMParagraphBlock)
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
public
function isPlainPara : boolean; override;
end;
 
TCMListBlock = class (TCMContainerBlock)
private
FOrdered: boolean;
FStart: String;
FMarker: String;
FLoose: boolean;
FLastIndent: integer;
FBaseIndent: integer;
FHasSeenEmptyLine : boolean; // parser state
function grace : integer;
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
public
property ordered : boolean read FOrdered write FOrdered;
property baseIndent : integer read FBaseIndent write FBaseIndent;
property lastIndent : integer read FLastIndent write FLastIndent;
property start : String read FStart write FStart;
property marker : String read FMarker write FMarker;
property loose : boolean read FLoose write FLoose;
end;
 
TCMListItemBlock = class (TCMParagraphBlock)
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
public
function isPlainPara : boolean; override;
end;
 
TCMHeadingBlock = class (TCMContainerBlock)
private
FLevel: integer;
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
public
constructor Create(line, level : Integer);
property level : integer read FLevel write FLevel;
end;
 
TCMCodeBlock = class (TCMContainerBlock)
private
FFenced: boolean;
FLang: String;
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
function wsMode : TCMWhitespaceMode; override;
public
property fenced : boolean read FFenced write FFenced;
property lang : String read FLang write FLang;
end;
 
// contained blocks are cells
TCMTableRowBlock = class (TCMContainerBlock)
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
end;
 
TTextAlign = (taLeft, taCenter, taRight);
 
// contained blocks are rows. The first row is the title row
TCMTableBlock = class (TCMContainerBlock)
private
FColumns: TArray<TTextAlign>;
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
public
property columns : TArray<TTextAlign> read FColumns;
end;
 
TCMLeafBlock = class abstract (TCMBlock);
 
TCMThematicBreakBlock = class (TCMLeafBlock)
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
end;
 
TCMTextBlock = class (TCMLeafBlock)
private
FText: String;
FNodes : TCMTextNodes;
protected
procedure render(parent : TCMBlock; b : TStringBuilder); override;
public
constructor Create(line : integer; text : String);
destructor Destroy; override;
property text : String read FText write FText;
end;
 
// Parser Infrastructure
TCommonMarkEngine = class;
 
TCMLine = class
private
FLine : String;
FIndex : integer;
FCursor : integer; // fCursor is the corrected character cursor, not the character offset
FMark : integer;
FStyling : boolean;
FStyles : Array of TCommonMarkStyle;
FBlockOffset : integer;
FBlockPreSpaces : integer;
procedure getOffset(position : integer; out index : integer; out preSpaces : integer);
procedure reset;
procedure markBlock(stop : integer);
procedure markStyle(stop : integer; style : TCommonMarkStyle);
procedure updateStyle(start, length : integer; style : TCommonMarkStyle);
procedure markRemainder(style : TCommonMarkStyle);
function GetStyle(index: integer): TCommonMarkStyle;
function GetStyleCount: integer;
public
constructor create(styling : boolean; line : string; index : integer);
procedure mark;
procedure rewind;
procedure advance(len : integer); // advance x number of spaces or characters
procedure skipWS; // advance from the current cursor until not pointing at whitespace
function isEmpty : boolean; // is cursor at end of string
function focus : String; // what is left after cursor
function countWS : integer; // whitespace count from cursor
function isWhitespace : boolean; // if everything after cursor is whitespace
property Styles[index : integer] : TCommonMarkStyle read GetStyle;
property StyleCount : integer read GetStyleCount;
end;
 
TCMBlockProcessingContext = (bpGeneral, bpCodeBlock, bpFencedCodeBlock);
TCMBlockProcessor = class abstract (TObject)
protected
FParent : TCMBlockProcessor;
 
// this procedure processes a line for nested blocks
// return true if the block is done.
// if false, modify the line, removing prepended characters, and remember to grab the characters as you go
function processLine(line : TCMLine; root : boolean; context : TCMBlockProcessingContext; isGFM : boolean; var isLazy : boolean) : boolean; virtual; abstract;
function isList(ordered : boolean; marker : String; indent : integer) : boolean; virtual;
function inListOrQuote : boolean; virtual;
function parser : TCommonMarkEngine; virtual;
public
constructor Create(processor : TCMBlockProcessor);
end;
 
// this anchors the chain
TCMDocumentProcessor = class (TCMBlockProcessor)
private
FParser : TCommonMarkEngine;
protected
function processLine(line : TCMLine; root : boolean; context : TCMBlockProcessingContext; isGFM : boolean; var isLazy : boolean) : boolean; override;
function parser : TCommonMarkEngine; override;
public
constructor Create(parser : TCommonMarkEngine);
end;
 
TCMQuoteProcessor = class (TCMBlockProcessor)
private
quote : TCMQuoteBlock;
protected
function processLine(line : TCMLine; root : boolean; context : TCMBlockProcessingContext; isGFM : boolean; var isLazy : boolean) : boolean; override;
function inListOrQuote : boolean; override;
public
constructor Create(processor : TCMBlockProcessor; q : TCMQuoteBlock);
end;
 
TCMListProcessor = class (TCMBlockProcessor)
private
FList : TCMListBlock;
FItem : TCMListItemBlock;
FHasContent : boolean;
FEmptyLine : integer;
protected
function processLine(line : TCMLine; root : boolean; context : TCMBlockProcessingContext; isGFM : boolean; var isLazy : boolean) : boolean; override;
function isList(ordered : boolean; marker : String; indent : integer) : boolean; override;
function inListOrQuote : boolean; override;
public
constructor Create(processor : TCMBlockProcessor; list : TCMListBlock; item : TCMListItemBlock);
destructor Destroy; override;
end;
 
TCMTextLexer = class
private
FText : String;
FCursor : integer;
FMark, FMarkCol, FMarkLine : Integer;
FBuilder : TStringBuilder;
FLine : integer;
FCol : integer;
FStartLine : integer;
FLines : TObjectList<TCMLine>;
FStyling : boolean;
function GetDone: boolean;
function GetPeek: char;
function GetPeekNext: char;
function GetPeekLast: char;
function GetPeekEndRun: char;
public
constructor Create(text : String; lines : TObjectList<TCMLine>; startline : integer; styling : boolean);
destructor Destroy; override;
 
procedure mark;
procedure rewind;
 
property done : boolean read GetDone;
property peek : char read GetPeek;
property peekNext : char read GetPeekNext;
property peekLast : char read GetPeekLast;
property peekEndRun : char read GetPeekEndRun;
function peekRun(checkBefore : boolean): String;
function peekLen(length : integer) : String;
function peekUntil(chs : TSysCharSet) : String;
function peekWhile(chs : TSysCharSet) : String;
function grab(style : TCommonMarkStyle) : char; overload;
function grabRun(style : TCommonMarkStyle) : String; overload;
function grab(style : TCommonMarkStyle; length : integer) : String; overload;
function has(s : string) : boolean;
function runExistsAfter(s : String) : boolean;
function runExistsAfterBeforeChar(s : String; c : char) : boolean;
procedure skipWS;
function location : TLocation;
end;
 
TCMDelimiterMode = (dmNeither, dmOpener, dmCloser, dmBoth);
TCMDelimiter = class
private
Fmode: TCMDelimiterMode;
Fdelimiter: String;
Factive: boolean;
FNode: TCMTextNode;
public
constructor Create(node : TCMTextNode; delimiter : String; mode : TCMDelimiterMode);
 
function isOpener : boolean;
function isCloser : boolean;
property node : TCMTextNode read FNode;
property delimiter : String read Fdelimiter write Fdelimiter;
property active : boolean read Factive write Factive;
property mode : TCMDelimiterMode read Fmode write Fmode;
function isEmph : boolean;
end;
 
TCommonMarkEngine = class
private
FLines : TObjectList<TCMLine>;
FCurrentLine : integer;
FBuilder : TStringBuilder;
FEntities : TDictionary<String, String>;
FStack : TObjectList<TCMDelimiter>;
FStyling : boolean;
FGFMExtensions : boolean;
 
// line operations
procedure parseLines(src : String);
function grabLine : TCMLine;
function peekLine : TCMLine;
procedure redoLine;
function done : boolean;
 
// string operations
function allCharsSame(s : String) : boolean;
function copyTo(s : String; chs : TSysCharSet) : String;
function after(s : String; chs : TSysCharSet) : String;
function copyWhile(s : String; chs : TSysCharSet) : String;
function startsWithWS(s : String; c : char; out length : integer; wsLen : integer = 3) : boolean; overload;
function startsWithWS(s : String; c : String; out length : integer; wsLen : integer = 3) : boolean; overload;
function countWS(s : String) : integer;
function lengthWSCorrected(s : String) : integer;
function removeWS(s : String; count : integer) : String;
function stripWhitespace(s : String) : String;
function htmlEscape(s : String) : String; overload;
function htmlEscape(c : char) : String; overload;
function urlEscape(s : String; ignoreExisting : boolean = false) : String; overload;
function urlEscape(c : UnicodeChar) : String; overload;
function parseEntityString(entity : String): String;
 
 
function isEndOfTable(line : TCMLine) : boolean;
procedure parseTableLine(t : TCMTableBlock; line : TCMLine);
 
// status
function inPara(blocks : TObjectList<TCMBlock>; canBeQuote : boolean) : boolean;
function inList(blocks : TObjectList<TCMBlock>; ordered : boolean; marker : String; indent : integer; grace : integer; out list : TCMListBlock) : boolean;
function isBlock(cont : TCMBlock; blocks : TObjectList<TCMBlock>; line : String; wsLen : integer = 3) : boolean;
 
// block parsing
 
function parseThematicBreak(blocks : TObjectList<TCMBlock>; line : TCMLine) : boolean;
function parseHeader(blocks : TObjectList<TCMBlock>; line : TCMLine) : boolean;
function parseCodeBlock(blocks : TObjectList<TCMBlock>; line : TCMLine; processor : TCMBlockProcessor) : boolean;
function parseFencedCodeBlock(blocks : TObjectList<TCMBlock>; line : TCMLine; processor : TCMBlockProcessor) : boolean;
function parseSeTextHeader(blocks : TObjectList<TCMBlock>; line : TCMLine; isLazy : boolean; processor : TCMBlockProcessor) : boolean;
function parseQuoteBlock(blocks : TObjectList<TCMBlock>; line : TCMLine; processor : TCMBlockProcessor) : boolean;
function parseUListBlock(blocks : TObjectList<TCMBlock>; line : TCMLine; processor : TCMBlockProcessor) : boolean;
function parseOListBlock(blocks : TObjectList<TCMBlock>; line : TCMLine; processor : TCMBlockProcessor) : boolean;
function parseTableBlock(blocks : TObjectList<TCMBlock>; line : TCMLine; processor : TCMBlockProcessor) : boolean;
procedure parse(block : TCMContainerBlock; processor : TCMBlockProcessor); overload;
 
// link references
procedure parseLinkReferences;
 
// inlines
function hasEmailAddress(lexer: TCMTextLexer; var len : integer) : boolean;
procedure parseTextEscape(lexer : TCMTextLexer; nodes: TCMTextNodes; wsMode : TCMWhitespaceMode);
procedure parseEntity(lexer : TCMTextLexer; nodes : TCMTextNodes; wsMode : TCMWhitespaceMode);
function parseEntityInner(lexer : TCMTextLexer) : String;
procedure parseBackTick(lexer : TCMTextLexer; nodes: TCMTextNodes; wsMode : TCMWhitespaceMode);
procedure parseTilde(lexer : TCMTextLexer; nodes: TCMTextNodes; wsMode : TCMWhitespaceMode);
procedure parseAutoLink(lexer : TCMTextLexer; nodes : TCMTextNodes; wsMode : TCMWhitespaceMode);
procedure parseExtendedAutoLinkWeb(lexer : TCMTextLexer; nodes : TCMTextNodes; wsMode : TCMWhitespaceMode; start, linkStart : String);
procedure parseExtendedAutoLinkEmail(lexer : TCMTextLexer; nodes : TCMTextNodes; len : integer);
procedure parseDelimiter(lexer : TCMTextLexer; nodes : TCMTextNodes; wsMode : TCMWhitespaceMode; canRun : boolean);
procedure parseCloseDelimiter(lexer : TCMTextLexer; nodes : TCMTextNodes; wsMode : TCMWhitespaceMode);
function processInlineLink(lexer : TCMTextLexer; nodes : TCMTextNodes; del : TCMDelimiter) : boolean;
procedure parseTextCore(lexer : TCMTextLexer; nodes : TCMTextNodes; wsMode : TCMWhitespaceMode);
procedure parseText(lexer : TCMTextLexer; nodes : TCMTextNodes; wsMode : TCMWhitespaceMode);
function processText(text : String; wsMode : TCMWhitespaceMode; startLine : integer) : TCMTextNodes;
procedure parseInline(blocks : TObjectList<TCMBlock>; line : String);
procedure processInlines(block : TCMBlock; wsMode : TCMWhitespaceMode);
procedure processEmphasis(nodes : TCMTextNodes; stopDel : TCMDelimiter);
 
procedure checkLines;
public
Constructor Create;
Destructor Destroy; override;
property GFMExtensions : boolean read FGFMExtensions write FGFMExtensions;
 
class function process(src : String; gfm : boolean) : String;
 
// divided into 2 steps in case some consumer wants to process the syntax tree
class function parse(src : String; gfm : boolean) : TCommonMarkDocument; overload;
class function parseStyles(src : String; gfm : boolean) : TObjectList<TCMLine>; overload;
class function render(doc : TCommonMarkDocument) : String;
end;
 
TCommonMarkProcessor = class (TMarkdownProcessor)
protected
function GetAllowUnSafe: boolean; override;
procedure SetAllowUnSafe(const value: boolean); override;
public
function process(source : String) : String; override; // want to process the syntax tree? Use the TCommonMarkEngine Directly
end;
 
 
implementation
 
function null_loc : TLocation;
begin
result.line := 0;
result.col := 0;
end;
 
procedure debug(s : String);
begin
// writeln(s);
end;
 
function isWhitespaceChar(ch: char): boolean;
begin
result := CharInSet(ch, [#10, #9, ' ']);
end;
 
function isWhitespace(s: String): boolean;
var
ch : char;
begin
result := true;
for ch in s do
if not isWhitespaceChar(ch) then
exit(false);
end;
 
function isEscapable(ch : char) : boolean;
begin
result := CharInSet(ch, ['!', '"', '#', '$', '%', '&', '''', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?',
'@', '[', '\', ']', '^', '_', '`', '{', '|', '}', '~']);
end;
 
function isUnicodePunctuation(ch : char) : boolean;
{$IFDEF FPC}
var
NType: byte;
{$ENDIF}
begin
{$IFDEF FPC}
case ch of
'0'..'9',
'a'..'z',
'A'..'Z',
'_': exit(false);
end;
 
if Ord(ch)<128 then
Result:= true
else if Ord(ch) >= LOW_SURROGATE_BEGIN then
exit(true)
else
begin
NType:= GetProps(Ord(ch))^.Category;
Result := not (NType<=UGC_OtherNumber);
end;
{$ELSE}
result := (ch.GetUnicodeCategory in [TUnicodeCategory.ucConnectPunctuation, TUnicodeCategory.ucDashPunctuation, TUnicodeCategory.ucClosePunctuation,
TUnicodeCategory.ucFinalPunctuation, TUnicodeCategory.ucInitialPunctuation, TUnicodeCategory.ucOtherPunctuation, TUnicodeCategory.ucOpenPunctuation, TUnicodeCategory.ucMathSymbol]);
{$ENDIF}
end;
 
{$IFDEF FPC}
 
{ TRegEx }
 
class function TRegEx.isMatch(cnt, regex: String): boolean;
var
r : TRegExpr;
begin
if cnt = '' then
result := false
else
begin
r := TRegExpr.create(regex);
try
result := r.exec(cnt);
finally
r.free;
end;
end;
end;
 
{ TStringBuilder }
 
procedure TStringBuilder.clear;
begin
FLength := 0;
end;
 
procedure TStringBuilder.append(c: char);
begin
if FLength+1 > FBuild.Length then
setLength(FBuild, FBuild.Length+LENGTH_INCREMENT);
inc(FLength);
FBuild[FLength] := c;
end;
 
procedure TStringBuilder.append(s: String);
var
i : integer;
begin
if FLength+length(s) > FBuild.Length then
setLength(FBuild, FBuild.Length+length(s)+LENGTH_INCREMENT);
for i := 1 to length(s) do
FBuild[FLength+i] := s[i];
inc(FLength, length(s));
end;
 
function TStringBuilder.toString: String;
begin
result := Copy(FBuild, 1, FLength);
end;
 
{$ENDIF}
 
{ TCMTextNode }
 
procedure TCMTextNode.addText(s: String);
var
ch : char;
begin
for ch in s do
addText(ch);
end;
 
constructor TCMTextNode.Create;
begin
inherited Create;
FActive := true;
FPos := loc;
end;
 
procedure TCMTextNode.addText(ch: char);
begin
if FLength+1 > FBuild.Length then
setLength(FBuild, FBuild.Length+LENGTH_INCREMENT);
inc(FLength);
FBuild[FLength] := ch;
end;
 
destructor TCMTextNode.Destroy;
begin
FAttrs.Free;
inherited;
end;
 
function TCMTextNode.GetAttrs: TDictionary<String, String>;
begin
if FAttrs = nil then
FAttrs := TDictionary<String, String>.create;
result := FAttrs;
end;
 
function TCMTextNode.getText: String;
begin
Active := false;
result := FContent;
end;
 
function TCMTextNode.isEmpty: boolean;
begin
result := FContent = '';
end;
 
procedure TCMTextNode.removeChars(count : integer);
begin
active := false;
delete(FContent, 1, count);
end;
 
procedure TCMTextNode.render(b: TStringBuilder);
begin
if FOpener then
begin
b.Append('<');
b.Append(FName);
b.Append(renderAttrs);
if FCloser then
b.Append(' />')
else
b.Append('>');
end
else if FCloser then
begin
b.Append('</');
b.Append(FName);
b.Append('>');
end
else
begin
active := false;
b.Append(Copy(FContent, 1, FLength));
end;
end;
 
function TCMTextNode.renderAttrs: String;
var
s : String;
begin
result := '';
if FAttrs <> nil then
begin
// arbitrary order to pass the standard tests
if FAttrs.TryGetValue('src', s) then
result := result + ' src="'+s+'"';
if FAttrs.TryGetValue('alt', s) then
result := result + ' alt="'+s+'"';
if FAttrs.TryGetValue('href', s) then
result := result + ' href="'+s+'"';
if FAttrs.TryGetValue('title', s) then
result := result + ' title="'+s+'"';
for s in FAttrs.Keys do
if (s <> 'src') and (s <> 'alt') and (s <> 'href') and (s <> 'title') then
result := result + ' '+s+'="'+FAttrs[s]+'"';
end;
end;
 
procedure TCMTextNode.SetActive(const Value: boolean);
begin
if active <> Value then
begin
Factive := value;
if not active then
FContent := Copy(FBuild, 1, FLength);
end;
end;
 
procedure TCMTextNode.SetName(const Value: String);
begin
FContent := '';
FLength := 0;
FName := Value;
active := false;
end;
 
{ TCMTextNodes }
 
function TCMTextNodes.addCloser(loc : TLocation; name: String): TCMTextNode;
begin
if count > 0 then
last.active := false;
result := TCMTextNode.Create(loc);
add(result);
result.name := name;
result.closer := true;
end;
 
procedure TCMTextNodes.addCloserBefore(name: String; node: TCMTextNode);
var
n : TCMTextNode;
begin
n := TCMTextNode.Create(null_loc);
insert(IndexOf(node), n);
n.name := name;
n.closer := true;
end;
 
function TCMTextNodes.addOpener(loc : TLocation; name: String): TCMTextNode;
begin
if count > 0 then
last.active := false;
result := TCMTextNode.Create(loc);
add(result);
result.name := name;
result.opener := true;
end;
 
procedure TCMTextNodes.addOpenerAfter(name: String; node: TCMTextNode);
var
n : TCMTextNode;
begin
n := TCMTextNode.Create(null_loc);
Insert(IndexOf(node)+1, n);
n.name := name;
n.opener := true;
end;
 
function TCMTextNodes.addText(loc : TLocation; cnt: String): TCMTextNode;
begin
if (count = 0) or (not last.active or last.opener or last.closer) then
begin
result := TCMTextNode.Create(loc);
add(result);
end
else
result := last;
result.addText(cnt);
end;
 
function TCMTextNodes.addTextNode(loc : TLocation; cnt: String): TCMTextNode;
begin
if count > 0 then
last.active := false;
result := TCMTextNode.Create(loc);
add(result);
result.addText(cnt);
result.active := false;
end;
 
function TCMTextNodes.plainTextSince(node: TCMTextNode): String;
var
i : integer;
begin
result := '';
for i := IndexOf(node)+1 to count - 1 do
if Items[i].name = 'img' then
result := result + Items[i].attrs['alt']
else
result := result + Items[i].getText;
end;
 
procedure TCMTextNodes.removeAfter(node: TCMTextNode);
var
i : integer;
ndx : integer;
begin
ndx := indexOf(node);
for i := count - 1 downto ndx + 1 do
Delete(i);
end;
 
{ TCMBlock }
 
constructor TCMBlock.Create(line: Integer);
begin
Inherited Create;
FLine := line;
end;
 
function TCMBlock.wsMode: TCMWhitespaceMode;
begin
result := wsTrim;
end;
 
{ TCMContainerBlock }
 
constructor TCMContainerBlock.Create;
begin
inherited create(line);
FBlocks := TObjectList<TCMBlock>.create(true);
end;
 
destructor TCMContainerBlock.Destroy;
begin
FBlocks.Free;
inherited Destroy;
end;
 
procedure TCMContainerBlock.render(parent : TCMBlock; b: TStringBuilder);
var
c : TCMBlock;
begin
for c in FBlocks do
c.render(self, b);
end;
 
{ TCMParagraphBlock }
 
function TCMParagraphBlock.isPlainPara: boolean;
begin
result := FHeader = 0;
end;
 
procedure TCMParagraphBlock.render(parent : TCMBlock; b: TStringBuilder);
var
c : TCMBlock;
first : boolean;
begin
case header of
0: b.Append('<p>');
1: b.Append('<h1>');
2: b.Append('<h2>');
end;
first := true;
for c in FBlocks do
begin
if first then
first := false
else
b.Append(#10);
c.render(self, b);
end;
case header of
0: b.Append('</p>');
1: b.Append('</h1>');
2: b.Append('</h2>');
end;
b.Append(#10);
end;
 
{ TCMQuoteBlock }
 
function TCMQuoteBlock.isPlainPara: boolean;
begin
result := false;
end;
 
procedure TCMQuoteBlock.render(parent : TCMBlock; b: TStringBuilder);
var
c : TCMBlock;
begin
b.Append('<blockquote>'#10);
for c in FBlocks do
c.render(self, b);
b.Append('</blockquote>'#10);
end;
 
{ TCMListBlock }
 
function TCMListBlock.grace: integer;
begin
if ordered then
result := 2
else
result := 1;
end;
 
procedure TCMListBlock.render(parent : TCMBlock; b: TStringBuilder);
var
c : TCMBlock;
begin
if not ordered then
b.Append('<ul>'#10)
else if start = '1' then
b.Append('<ol>'#10)
else
b.Append('<ol start="'+start+'">'#10);
for c in FBlocks do
c.render(self, b);
if ordered then
b.Append('</ol>'#10)
else
b.Append('</ul>'#10);
end;
 
{ TCMListItemBlock }
 
function TCMListItemBlock.isPlainPara: boolean;
begin
result := false;
end;
 
procedure TCMListItemBlock.render(parent : TCMBlock; b: TStringBuilder);
var
c, cp : TCMBlock;
first, rFirst : boolean;
begin
if Blocks.Count = 0 then
b.Append('<li>')
else
begin
b.Append('<li>');
rFirst := true;
for c in FBlocks do
if (c is TCMParagraphBlock) and (c as TCMParagraphBlock).isPlainPara and not (parent as TCMListBlock).loose then
begin
first := true;
for cp in (c as TCMParagraphBlock).Blocks do
begin
if first then
first := false
else
b.Append(#10);
cp.render(self, b);
end;
end
else
begin
if rFirst then
begin
rFirst := false;
b.Append(#10);
end;
c.render(self, b);
end;
end;
b.Append('</li>'#10);
end;
 
{ TCMHeadingBlock }
 
constructor TCMHeadingBlock.Create(line, level: Integer);
begin
Inherited Create(line);
FLevel := level;
end;
 
procedure TCMHeadingBlock.render(parent : TCMBlock; b: TStringBuilder);
begin
b.Append('<h'+inttostr(FLevel)+'>');
inherited render(parent, b);
b.Append('</h'+inttostr(FLevel)+'>');
b.Append(#10);
end;
 
{ TCMCodeBlock }
 
procedure TCMCodeBlock.render(parent : TCMBlock; b: TStringBuilder);
var
c : TCMBlock;
begin
if lang <> '' then
b.Append('<pre><code class="language-'+lang+'">')
else
b.Append('<pre><code>');
for c in FBlocks do
begin
c.render(self, b);
b.Append(#10);
end;
b.Append('</code></pre>');
b.Append(#10);
end;
 
function TCMCodeBlock.wsMode: TCMWhitespaceMode;
begin
result := wsLeave;
end;
 
{ TCMThematicBreakBlock }
 
procedure TCMThematicBreakBlock.render(parent : TCMBlock; b: TStringBuilder);
begin
b.Append('<hr />');
b.Append(#10);
end;
 
{ TCMTextBlock }
 
constructor TCMTextBlock.Create(line : integer; text: String);
begin
inherited Create(line);
FText := text;
end;
 
destructor TCMTextBlock.Destroy;
begin
FNodes.Free;
inherited;
end;
 
procedure TCMTextBlock.render(parent : TCMBlock; b: TStringBuilder);
var
n : TCMTextNode;
begin
for n in FNodes do
n.render(b);
end;
 
{ TCMLine }
 
procedure TCMLine.reset;
var
i : integer;
begin
FCursor := 1;
if FStyling then
begin
SetLength(FStyles, length(FLine));
for i := 0 to length(FLine) - 1 do
FStyles[i] := cmUnknown;
end;
end;
 
procedure TCMLine.rewind;
begin
FCursor := FMark;
end;
 
procedure TCMLine.advance(len: integer);
begin
inc(FCursor, len);
markBlock(FCursor-1);
end;
 
function TCMLine.isEmpty: boolean;
var
index, preSpaces: integer;
begin
getOffset(FCursor, index, preSpaces);
result := (preSpaces = 0) and (index > FLine.Length);
end;
 
function TCMLine.isWhitespace: boolean;
var
index, preSpaces, i: integer;
begin
getOffset(FCursor, index, preSpaces);
result := true;
for i := index to FLine.Length do
if not isWhitespaceChar(Fline[i]) then
exit(false);
end;
 
procedure TCMLine.mark;
begin
FMark := FCursor;
end;
 
procedure TCMLine.markBlock(stop: integer);
var
i : integer;
begin
getOffset(stop+1, i, FBlockPreSpaces);
FBlockOffset := i-1;
markStyle(FBlockOffset, cmControlChar);
end;
 
procedure TCMLine.markRemainder(style: TCommonMarkStyle);
var
i : integer;
begin
if not FStyling then
exit;
 
i := Length(FStyles) - 1;
while (i >=0) and (FStyles[i] = cmUnknown) do
begin
FStyles[i] := style;
dec(i);
end;
end;
 
procedure TCMLine.markStyle(stop: integer; style: TCommonMarkStyle);
var
i : integer;
begin
if not FStyling then
exit;
for i := 0 to Min(stop, FLine.length) - 1 do
FStyles[i] := style;
end;
 
function TCMLine.countWS: integer;
var
index, preSpaces, c, len: integer;
begin
getOffset(FCursor, index, preSpaces);
result := preSpaces;
c := FCursor + preSpaces; // for tab stop tracking
while (index <= FLine.Length) and isWhitespaceChar(FLine[index]) do
begin
if FLine[index] = #9 then
begin
len := (c - 1) mod 4;
if len = 0 then
len := 4;
end
else
len := 1;
inc(c, len);
inc(result, len);
inc(index);
end;
end;
 
constructor TCMLine.create(styling : boolean; line: string; index: integer);
begin
inherited create;
FStyling := styling;
FLine := line;
FIndex := index;
reset;
end;
 
function TCMLine.focus: String;
var
index, preSpaces, i: integer;
begin
getOffset(FCursor, index, preSpaces);
SetLength(result, preSpaces);
for i := 1 to result.Length do
result[i] := ' ';
result := result+FLine.Substring(index-1);
end;
 
procedure TCMLine.getOffset(position : integer; out index, preSpaces: integer);
var
c, len : integer;
begin
c := 1;
index := 1;
while (c < position) and (index <= Fline.length) do
begin
if FLine[index] = #9 then
len := 4 - ((c - 1) mod 4)
else
len := 1;
inc(index, 1);
inc(c, len);
end;
if index > Fline.length then
preSpaces := 0
else
preSpaces := c - position;
end;
 
function TCMLine.GetStyle(index: integer): TCommonMarkStyle;
begin
result := FStyles[index];
end;
 
function TCMLine.GetStyleCount: integer;
begin
result := length(FStyles);
end;
 
procedure TCMLine.skipWS;
var
index, preSpaces, c, len: integer;
begin
getOffset(FCursor, index, preSpaces);
c := FCursor + preSpaces; // for tab stop tracking
while (index <= FLine.Length) and isWhitespaceChar(FLine[index]) do
begin
if FLine[index] = #9 then
begin
len := c mod 4;
if len = 0 then
len := 4;
end
else
len := 1;
inc(c, len);
inc(index);
end;
FCursor := c;
end;
 
procedure TCMLine.updateStyle(start, length: integer; style: TCommonMarkStyle);
var
i : integer;
begin
if not FStyling then
exit;
for i := start + FBlockOffset to Min(start + FBlockOffset + length, FLine.length) - 1 do
FStyles[i] := style;
end;
 
{ TCMBlockProcessor }
 
constructor TCMBlockProcessor.Create(processor: TCMBlockProcessor);
begin
inherited Create;
FParent := processor;
end;
 
function TCMBlockProcessor.inListOrQuote: boolean;
begin
result := false;
end;
 
function TCMBlockProcessor.isList(ordered: boolean; marker: String; indent: integer): boolean;
begin
result := false;
end;
 
function TCMBlockProcessor.parser: TCommonMarkEngine;
begin
result := FParent.parser;
end;
 
{ TCMDocumentProcessor }
 
constructor TCMDocumentProcessor.Create(parser : TCommonMarkEngine);
begin
inherited Create(nil);
FParser := parser;
end;
 
function TCMDocumentProcessor.parser: TCommonMarkEngine;
begin
result := FParser;
end;
 
function TCMDocumentProcessor.processLine(line: TCMLine; root : boolean; context : TCMBlockProcessingContext; isGFM : boolean; var isLazy : boolean): boolean;
begin
result := false; // document is only ended by end of source
isLazy := false;
end;
 
{ TCMQuoteProcessor }
 
constructor TCMQuoteProcessor.Create(processor : TCMBlockProcessor; q: TCMQuoteBlock);
begin
inherited Create(processor);
quote := q;
end;
 
function TCMQuoteProcessor.inListOrQuote: boolean;
begin
result := true;
end;
 
function TCMQuoteProcessor.processLine(line: TCMLine; root : boolean; context : TCMBlockProcessingContext; isGFM : boolean; var isLazy : boolean): boolean;
var
len : integer;
begin
result := FParent.processLine(line, false, context, isGFM, isLazy);
if not result then
begin
if parser.startsWithWS(line.focus, '>', len) then
begin
line.advance(len);
if not line.isEmpty and isWhitespaceChar(line.focus[1]) then
line.advance(1);
end
else if root then // only can do that else we walk into descendents
begin
// decide whether the block is a continuation, or the end.
// it's the end if it's empty, or it starts a new kind of block
// plain text isn't the end of the block (lazy :-( )
if line.isWhitespace then
result := true
else if parser.isBlock(quote, quote.FBlocks, line.focus) then
result := true
else if not parser.inPara(quote.blocks, false) then
result := true
else
isLazy := true;
end;
end
end;
 
{ TCMListProcessor }
 
constructor TCMListProcessor.Create(processor: TCMBlockProcessor; list : TCMListBlock; item: TCMListItemBlock);
begin
inherited Create(processor);
Flist := list;
Fitem := item;
FEmptyLine := -1;
end;
 
destructor TCMListProcessor.Destroy;
begin
if FList.FHasSeenEmptyLine and not FList.FLoose and (FParent is TCMListProcessor) then
(FParent as TCMListProcessor).FList.FHasSeenEmptyLine := true;
inherited;
end;
 
function TCMListProcessor.inListOrQuote: boolean;
begin
result := true;
end;
 
function TCMListProcessor.isList(ordered: boolean; marker: String; indent: integer): boolean;
begin
result := (FList.ordered = ordered) and (FList.marker = marker) and (indent < FList.lastIndent + 1);
end;
 
function TCMListProcessor.processLine(line: TCMLine; root: boolean; context : TCMBlockProcessingContext; isGFM : boolean; var isLazy : boolean): boolean;
var
len : integer;
cws, linc : integer;
begin
result := FParent.processLine(line, false, context, isGFM, isLazy);
if not result then
begin
cws := line.countWS;
linc := parser.FCurrentLine;
if linc = FItem.line then
line.advance(FList.lastIndent)
else if cws >= FList.LastIndent then
begin
len := cws;
if len > FList.lastIndent+1 then
len := FList.baseIndent;
line.advance(len);
end
else if isGFM and (cws > 3) and (line.focus.Trim.StartsWith('-')) then
result := false
else if not line.isWhitespace and parser.isBlock(FList, FItem.blocks, line.focus, FList.lastIndent+FList.grace) then
begin
result := true;
end;
 
if root then
begin
if not line.isWhiteSpace then
begin
FHasContent := true;
if root and not result and FList.FHasSeenEmptyLine then
FList.loose := true;
end
else if not result then
begin
isLazy := true;
if not FHasContent then
begin
if FEmptyLine = -1 then
FEmptyLine := linc
else if FEmptyLine <> parser.FCurrentLine then
result := true;
end;
if (context = bpGeneral) and (linc <> FItem.line) then
FList.FHasSeenEmptyLine := true;
end;
end;
end;
end;
 
 
{ TCMTextLexer }
 
constructor TCMTextLexer.Create(text: String; lines : TObjectList<TCMLine>; startline : integer; styling : boolean);
begin
inherited Create;
FText := text;
FCursor := 1;
FBuilder := TStringBuilder.create;
FLines := lines;
FStartLine := startline;
FLine := 0;
FCol := 1;
FStyling := styling;
end;
 
destructor TCMTextLexer.Destroy;
begin
FBuilder.Free;
inherited;
end;
 
procedure TCMTextLexer.rewind;
begin
FCursor := FMark;
FLine := FMarkLine;
FCol := FMarkCol;
end;
 
function TCMTextLexer.runExistsAfter(s: String): boolean;
var
i, len : integer;
begin
len := s.Length;
i := FCursor + len + 1;
result := false;
while i+len <= FText.Length + 1 do
begin
if (copy(FText, i, len) = s) and (FText[i-1] <> s[1]) and ((i+len = FText.Length+1) or (FText[i+len] <> s[1])) then
exit(true);
inc(i);
end;
end;
 
function TCMTextLexer.runExistsAfterBeforeChar(s: String; c : char): boolean;
var
i, len : integer;
begin
len := s.Length;
i := FCursor + len;
result := false;
while i+len <= FText.Length + 1 do
begin
if FText[i] = c then
exit(false);
if (copy(FText, i, len) = s) and (FText[i-1] <> s[1]) and ((i+len = FText.Length+1) or (FText[i+len] <> s[1])) then
exit(true);
inc(i);
end;
end;
 
procedure TCMTextLexer.skipWS;
begin
while isWhitespaceChar(peek) do
grab(cmText);
end;
 
function TCMTextLexer.GetDone: boolean;
begin
result := FCursor > FText.Length;
end;
 
function TCMTextLexer.GetPeek: char;
begin
if done then
result := #0
else
result := FText[FCursor];
end;
 
function TCMTextLexer.GetPeekEndRun: char;
var
i : integer;
c : char;
begin
if FCursor >= FText.Length then
result := #0
else
begin
i := FCursor;
c := FText[i];
while (i <= FText.Length) and (FText[i] = c) do
inc(i);
if i > FText.Length then
result := #0
else
result := FText[i];
end;
end;
 
function TCMTextLexer.GetPeekLast: char;
begin
if FCursor = 1 then
result := #0
else
result := FText[FCursor-1];
end;
 
function TCMTextLexer.GetPeekNext: char;
begin
if FCursor >= FText.Length then
result := #0
else
result := FText[FCursor+1];
end;
 
function TCMTextLexer.peekRun(checkBefore : boolean): String;
var
i : integer;
c : char;
begin
FBuilder.clear;
c := peek;
i := FCursor;
if checkBefore and (i > 2) and (FText[i-1] = c) then
exit('');
 
while (i <= FText.Length) and (FText[i] = c) do
begin
FBuilder.Append(c);
inc(i);
end;
result := FBuilder.ToString;
end;
 
function TCMTextLexer.grab(style : TCommonMarkStyle; length: integer): String;
var
i : integer;
begin
FBuilder.clear;
for i := 1 to length do
if not done then
FBuilder.Append(grab(style));
result := FBuilder.toString;
end;
 
function TCMTextLexer.grabRun(style : TCommonMarkStyle): String;
var
c : char;
begin
FBuilder.Clear;
c := peek;
while peek = c do
FBuilder.append(grab(style));
result := FBuilder.ToString;
end;
 
function TCMTextLexer.grab(style : TCommonMarkStyle): char;
var
line : TCMLine;
begin
if done then
result := #0
else
begin
// first task: mark the character we are grabbing with the specified style
result := FText[FCursor];
if result <> #10 then
begin
line := FLines[FStartLine + FLine];
if FStyling and (FCol - 1 >= line.FBlockPreSpaces) then
begin
if FCol - 1 + line.FBlockOffset - line.FBlockPreSpaces >= length(line.FStyles) then
raise EMarkdownProcessor.create('problem');
line.FStyles[FCol - 1 + line.FBlockOffset - line.FBlockPreSpaces] := style;
end;
end;
inc(FCursor);
if result = #10 then
begin
FCol := 1;
inc(FLine);
end
else
inc(FCol);
end;
end;
 
function TCMTextLexer.has(s: string): boolean;
begin
result := peekLen(s.Length) = s;
end;
 
function TCMTextLexer.location: TLocation;
begin
result.line := FLine + FStartLine;
result.col := FCol;
end;
 
procedure TCMTextLexer.mark;
begin
FMark := FCursor;
FMarkLine := FLine;
FMarkCol := FCol;
end;
 
function TCMTextLexer.peekUntil(chs : TSysCharSet) : String;
var
i : integer;
begin
FBuilder.clear;
i := FCursor;
while (i <= FText.Length) and not CharInSet(FText[i], chs) do
begin
FBuilder.Append(FText[i]);
inc(i);
end;
if (i > FText.Length) then
result := ''
else
result := FBuilder.ToString;
end;
 
function TCMTextLexer.peekWhile(chs: TSysCharSet): String;
var
i : integer;
begin
FBuilder.clear;
i := FCursor;
while (i <= FText.Length) and CharInSet(FText[i], chs) do
begin
FBuilder.Append(FText[i]);
inc(i);
end;
result := FBuilder.ToString;
end;
 
function TCMTextLexer.peekLen(length: integer): String;
var
i : integer;
begin
FBuilder.clear;
for i := FCursor to FCursor+length-1 do
begin
if i <= FText.Length then
FBuilder.Append(FText[i]);
end;
result := FBuilder.ToString;
end;
 
{ TCMDelimiter }
 
constructor TCMDelimiter.Create(node: TCMTextNode; delimiter : String; mode: TCMDelimiterMode);
begin
inherited create;
FNode := node;
FMode := mode;
Fdelimiter := delimiter;
FActive := true;
end;
 
function TCMDelimiter.isCloser: boolean;
begin
result := mode in [dmCloser, dmBoth];
end;
 
function TCMDelimiter.isEmph: boolean;
begin
result := (delimiter <> '[') and (delimiter <> '![');
end;
 
function TCMDelimiter.isOpener: boolean;
begin
result := mode in [dmOpener, dmBoth];
end;
 
{ TCommonMarkEngine }
 
class function TCommonMarkEngine.parse(src: String; gfm : boolean): TCommonMarkDocument;
var
this : TCommonMarkEngine;
doc : TCMDocumentProcessor;
begin
this := TCommonMarkEngine.Create;
try
this.FStyling := TEST_STYLING;
this.parseLines(src.Replace(#13#10, #10).replace(#13, #10));
this.GFMExtensions := gfm;
doc := TCMDocumentProcessor.Create(this);
try
result := TCommonMarkDocument.Create(1);
this.parse(result, doc);
this.parseLinkReferences;
this.processInlines(result, wsTrim);
this.checkLines;
finally
doc.Free;
end;
finally
this.free;
end;
end;
 
class function TCommonMarkEngine.parseStyles(src: String; gfm : boolean): TObjectList<TCMLine>;
var
this : TCommonMarkEngine;
doc : TCMDocumentProcessor;
obj : TCommonMarkDocument;
begin
this := TCommonMarkEngine.Create;
try
this.FStyling := true;
this.parseLines(src.Replace(#13#10, #10).replace(#13, #10));
this.GFMExtensions := gfm;
doc := TCMDocumentProcessor.Create(this);
try
obj := TCommonMarkDocument.Create(1);
try
this.parse(obj, doc);
this.parseLinkReferences;
this.processInlines(obj, wsTrim);
result := this.FLines;
this.FLines := nil;
finally
obj.Free;
end;
finally
doc.Free;
end;
finally
this.free;
end;
end;
 
class function TCommonMarkEngine.render(doc: TCommonMarkDocument): String;
var
b : TStringBuilder;
begin
b := TStringBuilder.Create;
try
doc.render(nil, b);
result := b.ToString;
finally
b.Free;
end;
end;
 
constructor TCommonMarkEngine.Create;
begin
inherited Create;
FGFMExtensions := true;
FBuilder := TStringBuilder.Create;
FStack := TObjectList<TCMDelimiter>.Create(true);
FLines := TObjectList<TCMLine>.create(true);
FEntities := TDictionary<String, String>.create;
registerEntities(FEntities);
end;
 
destructor TCommonMarkEngine.Destroy;
begin
FEntities.Free;
FStack.Free;
FBuilder.Free;
FLines.Free;
inherited;
end;
 
function TCommonMarkEngine.grabLine: TCMLine;
begin
inc(FCurrentLine);
result := FLines[FCurrentLine];
result.reset;
end;
 
function TCommonMarkEngine.peekLine: TCMLine;
begin
if FCurrentLine = FLines.Count - 1 then
result := nil
else
result := FLines[FCurrentLine+1];
end;
 
procedure TCommonMarkEngine.redoLine;
begin
FLines[FCurrentLine].reset;
dec(FCurrentLine);
end;
 
function TCommonMarkEngine.done: boolean;
begin
result := FCurrentLine = FLines.Count - 1
end;
 
 
function TCommonMarkEngine.htmlEscape(c : char): String;
begin
case c of
'<' : result := '&lt;';
'>' : result := '&gt;';
'"' : result := '&quot;';
'&' : result := '&amp;';
else
result := c;
end;
end;
 
function TCommonMarkEngine.htmlEscape(s: String): String;
var
ch : char;
begin
FBuilder.Clear;
for ch in s do
FBuilder.Append(htmlEscape(ch));
result := FBuilder.ToString;
end;
 
function TCommonMarkEngine.after(s: String; chs: TSysCharSet): String;
var
i : integer;
begin
if (s = '') then
exit(s);
 
i := 0;
while (i < length(s)) and CharInSet(s[i+1], chs) do
inc(i);
result := s.Substring(i);
end;
 
function TCommonMarkEngine.allCharsSame(s : String) : boolean;
var
i : integer;
begin
result := true;
for i := 2 to length(s) do
if s[i] <> s[1] then
exit(false);
end;
 
const
STYLE_CODES : array [TCommonMarkStyle] of String = ('?', '.', '&', 'C', 'D', 'X', 'u', 't', '~');
 
procedure TCommonMarkEngine.checkLines;
var
i : integer;
l : TCMLine;
begin
if not TEST_STYLING then
exit;
 
// for l in FLines do
// begin
// for i := 0 to length(l.FStyles) - 1 do
// write(STYLE_CODES[l.FStyles[i]]);
// writeln;
// end;
for l in FLines do
for i := 0 to length(l.FStyles) - 1 do
if l.FStyles[i] = cmUnknown then
raise EMarkdownProcessor.Create('Unknown style @ '+inttostr(l.FIndex)+', '+inttostr(i));
end;
 
function TCommonMarkEngine.copyTo(s : String; chs : TSysCharSet) : String;
var
i : integer;
begin
i := 1;
while (i <= s.Length) and not CharInSet(s[i], chs) do
inc(i);
if i > s.Length then
result := s
else
result := copy(s, 1, i-1);
end;
 
function TCommonMarkEngine.copyWhile(s : String; chs : TSysCharSet) : String;
var
i : integer;
begin
i := 1;
while (i <= s.Length) and CharInSet(s[i], chs) do
inc(i);
if i > s.Length then
result := s
else
result := copy(s, 1, i-1);
end;
 
// allows up to 3 spaces before c; returns the length to remove from the front as well as a boolean for whether to match
function TCommonMarkEngine.startsWithWS(s : String; c : char; out length : integer; wsLen : integer = 3) : boolean;
var
i : integer;
begin
if s = '' then
exit(false);
 
length := 1;
for i := 1 to wsLen do
begin
if (s.Length >= length) and (s[length] = ' ') then
inc(length);
end;
result := s[length] = c;
end;
 
function TCommonMarkEngine.startsWithWS(s : String; c : String; out length : integer; wsLen : integer = 3) : boolean;
var
i : integer;
begin
if s = '' then
exit(false);
 
length := 1;
for i := 1 to wsLen do
begin
if (s.Length >= length) and (s[length] = ' ') then
inc(length);
end;
result := copy(s, length, c.Length) = c;
end;
 
function TCommonMarkEngine.lengthWSCorrected(s : String) : integer;
var
i : integer;
begin
result := 0;
for i := 1 to length(s) do
if s[i] = #9 then
inc(result, 4)
else
inc(result, 1);
end;
 
function TCommonMarkEngine.countWS(s : String) : integer;
var
i : integer;
begin
result := 0;
i := 0;
while (i < s.Length) and CharInSet(s[i+1], [' ', #9]) do
begin
if s[i+1] = #9 then
inc(result, 4)
else
inc(result);
inc(i);
end;
end;
 
function TCommonMarkEngine.removeWS(s: String; count: integer): String;
var
i, j, c : integer;
begin
i := 0;
c := 0;
while (i <= s.Length) and (c < count) do
begin
inc(i);
if (i <= s.Length) then
if s[i] = ' ' then
inc(c)
else if s[i] = #9 then
inc(c, 4)
else
break;
end;
if c > count then
begin
SetLength(result, c-count);
for j := 1 to result.length do
result[j] := ' ';
result := result + s.Substring(i)
end
else
result := s.Substring(i);
end;
 
function TCommonMarkEngine.stripWhitespace(s: String): String;
var
ch : Char;
begin
FBuilder.Clear;
for ch in s do
if not isWhitespace(ch) then
FBuilder.append(ch);
result := FBuilder.ToString;
end;
 
function TCommonMarkEngine.urlEscape(c: UnicodeChar): String;
var
b : TBytes;
i : integer;
begin
case c of
'&' : result := '&amp;'; // not escaped in URL but is escaped in html
'\', '[', ']', '"', '`' : result := '%'+inttoHex(ord(c), 2).ToUpper;
else if ord(c) > 126 then
begin
b := TEncoding.UTF8.GetBytes(c);
result := '';
for i := 0 to length(b) - 1 do
result := result + '%'+inttoHex(b[i], 2).ToUpper;
end
else if ord(c) > 126 then
result := '%'+inttoHex(ord(c), 2).ToUpper
else
result := c;
end;
end;
 
function TCommonMarkEngine.urlEscape(s: String; ignoreExisting : boolean = false): String;
var
ch : UnicodeChar;
cs : String;
begin
FBuilder.Clear;
for ch in unicodeChars(s) do
begin
if ignoreExisting {and (ch = '%') and (StrToIntDef('X'+copy(s, i+1, 2), -1) <> -1)} then
begin
cs := ch;
FBuilder.Append(cs);
end
else
FBuilder.Append(urlEscape(ch));
end;
result := FBuilder.ToString;
end;
 
function TCommonMarkEngine.inList(blocks: TObjectList<TCMBlock>; ordered: boolean; marker : String; indent : integer; grace : integer; out list: TCMListBlock): boolean;
begin
result := (blocks.Count > 0) and (blocks.Last is TCMListBlock);
if result then
begin
list := blocks.Last as TCMListBlock;
result := not list.closed and (list.ordered = ordered) and (list.marker = marker)
and (indent <= list.LastIndent + grace);
end;
end;
 
function TCommonMarkEngine.inPara(blocks: TObjectList<TCMBlock>; canBeQuote : boolean): boolean;
begin
result := (blocks.Count > 0) and (blocks.Last is TCMParagraphBlock) and not (blocks.Last as TCMParagraphBlock).closed and ((blocks.Last as TCMParagraphBlock).header = 0);
if result and not canBeQuote and not (blocks.Last as TCMParagraphBlock).isPlainPara then
result := false;
end;
 
function TCommonMarkEngine.isBlock(cont : TCMBlock; blocks : TObjectList<TCMBlock>; line: String; wsLen : integer = 3): boolean;
function inOrderedList : boolean;
begin
result := (cont is TCMListBlock) and (cont as TCMListBlock).ordered;
end;
var
len : integer;
s, t : String;
p : boolean;
begin
if startsWithWS(line, '*', len, wsLen) then
exit(true);
if startsWithWS(line, '-', len, wsLen) then
exit(true);
if startsWithWS(line, '+', len, wsLen) then
exit(true);
if startsWithWS(line, '___', len) then
exit(true);
if startsWithWS(line, '#', len) then
exit(true);
if startsWithWS(line, '`', len) then
exit(true);
if startsWithWS(line, '~', len) then
exit(true);
if startsWithWS(line, '>', len) then
exit(true);
if (countWS(line) >= 4) and not InPara(blocks, false) then // code block
exit(true);
p := (blocks.count > 0) and (blocks.last is TCMParagraphBlock) and not (blocks.last.closed);
// ok now look for ordered list
len := countWS(line);
s := removeWS(line, len);
t := copyWhile(s, ['0'..'9']);
if t.Length > 0 then
begin
if not p or (t = '1') or inOrderedList then
begin
s := s.Substring(t.Length);
if (s <> '') then
begin
if (s = ')') or (s = '.') or s.StartsWith(') ') or s.StartsWith('. ') then
exit(true);
end;
end;
end;
 
result := not p;
end;
 
 
function TCommonMarkEngine.isEndOfTable(line: TCMLine): boolean;
var
s : String;
begin
if line = nil then
exit(true);
s := line.FLine;
result := (s.Trim = '') or s.StartsWith('>') or line.FLine.StartsWith(' ') or s.StartsWith('#') or s.StartsWith('~');
end;
 
function TCommonMarkEngine.parseThematicBreak(blocks : TObjectList<TCMBlock>; line: TCMLine): boolean;
var
s : String;
begin
if line.countWS >= 4 then
exit(false);
s := stripWhitespace(line.focus);
if (s.StartsWith('***') or s.StartsWith('---') or s.StartsWith('___')) and AllCharsSame(s) then
begin
blocks.Add(TCMThematicBreakBlock.Create(FCurrentLine));
line.markStyle(line.FLine.Length, cmControlChar);
result := true;
end
else
result := false;
end;
 
function TCommonMarkEngine.parseUListBlock(blocks: TObjectList<TCMBlock>; line: TCMLine; processor: TCMBlockProcessor): boolean;
var
list : TCMListBlock;
li : TCMListItemBlock;
lp : TCMListProcessor;
i, i2 : integer;
s, m : String;
begin
if line.isEmpty then
exit(false);
if line.countWS >= 4 then
begin
m := after(line.focus, [' ']);
if (m = '') or not inList(blocks, false, m[1], line.countWS, 1, list) then
exit(false);
end;
i := line.countWS;
s := line.focus;
if (s.length < 1+i) then
exit(false);
if not CharInSet(s[1+i], ['+', '-', '*']) then
exit(false);
m := s[1+i];
s := s.Substring(1+i);
if isWhitespace(s) and inPara(blocks, false) then
exit(false);
if isWhitespace(s) then // nothing after if it's the only thing on the line
i2 := 1
else
begin
i2 := countWS(s);
if (i2 = 0) then
exit(false);
if (i2 >= 5) then
i2 := 1;
end;
if not inList(blocks, false, m, i+i2+1, 1, list) then
begin
list := TCMListBlock.Create(FCurrentLine);
blocks.add(list);
list.ordered := false;
list.BaseIndent := i+i2+1;
list.lastIndent := list.BaseIndent;
list.marker := m;
end
else
list.Lastindent := i+i2+1;
li := TCMListItemBlock.Create(FCurrentLine);
list.blocks.Add(li);
result := true;
redoLine;
// now, instead of grabbing the >, we recurse and get the processor to do that
lp := TCMListProcessor.Create(processor, list, li);
try
parse(li, lp);
finally
lp.Free;
end;
end;
 
function TCommonMarkEngine.parseHeader(blocks : TObjectList<TCMBlock>; line: TCMLine): boolean;
var
len : integer;
ls, s : String;
b : TCMHeadingBlock;
begin
if line.countWS >= 4 then
exit(false);
ls := line.focus.Trim;
if ls.StartsWith('# ') or ls.StartsWith('#'#9) or (ls = '#') then
len := 1
else if ls.StartsWith('## ') or ls.StartsWith('##'#9) or (ls = '##') then
len := 2
else if ls.StartsWith('### ') or ls.StartsWith('###'#9) or (ls = '###') then
len := 3
else if ls.StartsWith('#### ') or ls.StartsWith('####'#9) or (ls = '####') then
len := 4
else if ls.StartsWith('##### ') or ls.StartsWith('#####'#9) or (ls = '#####') then
len := 5
else if ls.StartsWith('###### ') or ls.StartsWith('######'#9) or (ls = '######') then
len := 6
else
exit(False);
result := true;
b := TCMHeadingBlock.Create(FCurrentLine, len);
blocks.Add(b);
line.markBlock(len);
line.skipWS;
s := ls.substring(len);
if not isWhitespace(s) then
begin
len := length(s);
while (len > 0) and (s[len] = '#') do
dec(len);
if (len = 0) then
s := ''
else if (s[len] = ' ') then
s := copy(s, 1, len-1);
end;
line.markRemainder(cmText);
parseInline(b.blocks, s);
end;
 
procedure TCommonMarkEngine.parseInline(blocks : TObjectList<TCMBlock>; line : String);
var
b : TCMTextBlock;
begin
if (blocks.Count > 0) and (blocks.Last is TCMTextBlock) then
begin
b := blocks.Last as TCMTextBlock;
b.FText := b.FText+#10+line;
end
else
blocks.Add(TCMTextBlock.create(FCurrentLine, line));
end;
 
function TCommonMarkEngine.parseOListBlock(blocks: TObjectList<TCMBlock>; line: TCMLine; processor: TCMBlockProcessor): boolean;
var
list : TCMListBlock;
li : TCMListItemBlock;
lp : TCMListProcessor;
i, i2 : integer;
s,sl, m, ls : String;
begin
result := false;
if line.isEmpty then
exit(false);
if line.countWS >= 4 then
begin
m := after(line.focus, [' ']);
m := after(m, ['0'..'9']);
if (m = '') or not inList(blocks, true, m[1], line.countWS, 2, list) then
exit(false);
end;
i := line.countWS;
line.mark;
try
line.skipWS;
ls := line.focus;
s := copyWhile(ls, ['0'..'9']);
if (s = '') or (length(s) > 9) then
exit(false);
if not CharInSet(ls[s.Length+1], ['.', ')']) then
exit(false);
if inPara(blocks, false) and (s <> '1') then
exit(false); // rule 267
m := ls[s.Length+1];
i := i+s.Length+1;
sl := ls.Substring(s.Length+1);
if isWhitespace(sl) and inPara(blocks, false) then
exit(false);
result := true;
finally
if not result then
line.rewind;
end;
if isWhitespace(sl) then // nothing after if it's the only thing on the line
i2 := 1
else
begin
i2 := countWS(sl);
if (i2 = 0) then
exit(false);
if (i2 >= 5) then
i2 := 1;
end;
if not inList(blocks, true, m, i+i2, 2, list) then
begin
list := TCMListBlock.Create(FCurrentLine);
blocks.add(list);
list.ordered := true;
list.baseIndent := i+i2;
list.lastIndent := list.baseIndent;
list.marker := m;
s := after(s, ['0']);
if s = '' then
s := '0';
list.start := s;
end
else
list.lastIndent := i+i2;
li := TCMListItemBlock.Create(FCurrentLine);
list.blocks.Add(li);
redoLine;
// now, instead of grabbing the >, we recurse and get the processor to do that
lp := TCMListProcessor.Create(processor, list, li);
try
parse(li, lp);
finally
lp.Free;
end;
end;
 
function TCommonMarkEngine.parseQuoteBlock(blocks: TObjectList<TCMBlock>; line: TCMLine; processor : TCMBlockProcessor): boolean;
var
s : String;
q : TCMQuoteBlock;
qp : TCMQuoteProcessor;
begin
if line.countWS >= 4 then
exit(false);
s := line.focus.Trim;
if not s.StartsWith('>') then
exit(false);
q := TCMQuoteBlock.Create(FCurrentLine);
blocks.add(q);
result := true;
redoline;
// now, instead of grabbing the >, we recurse and get the processor to do that
qp := TCMQuoteProcessor.Create(processor, q);
try
parse(q, qp);
finally
qp.Free;
end;
q.closed := true;
end;
 
function TCommonMarkEngine.parseSeTextHeader(blocks : TObjectList<TCMBlock>; line: TCMLine; isLazy : boolean; processor : TCMBlockProcessor): boolean;
var
p : TCMParagraphBlock;
s : String;
begin
if line.countWS >= 4 then
exit(false);
if blocks.Count = 0 then
exit(false);
if not inPara(blocks, false) then
exit(false);
p := blocks.Last as TCMParagraphBlock;
if p.closed then
exit(false);
if p.header <> 0 then
exit(false);
if isLazy and processor.inListOrQuote then
exit(false);
s := line.focus.Trim;
if s = '' then
exit(false);
if not allCharsSame(s) then
exit(false);
 
if s[1] = '-' then
begin
p.header := 2;
line.markStyle(line.FLine.Length, cmControlChar);
exit(true);
end
else if s[1] = '=' then
begin
p.header := 1;
line.markStyle(line.FLine.Length, cmControlChar);
exit(true);
end
else
exit(false);
end;
 
function TCommonMarkEngine.parseCodeBlock(blocks : TObjectList<TCMBlock>; line: TCMLine; processor : TCMBlockProcessor): boolean;
var
c : TCMCodeBlock;
s : String;
more : boolean;
isLazy : boolean;
indent : integer;
begin
indent := line.countWS;
if indent < 4 then
exit(false);
indent := 4;
if line.isWhitespace then
exit(false);
if inPara(blocks, true) then
exit(false);
result := true;
c := TCMCodeBlock.Create(FCurrentLine);
blocks.Add(c);
line.advance(indent);
s := line.focus;
repeat
c.FBlocks.Add(TCMTextBlock.Create(line.FIndex, s));
if done then
more := false
else
begin
line := peekLine;
if (line = nil) or processor.processLine(line, true, bpCodeBlock, FGFMExtensions, isLazy) then
break;
s := line.focus;
if lengthWSCorrected(s) <= indent then
more := isWhitespace(s)
else
more := countWS(s) >= indent;
if more then
begin
line := grabLine;
processor.processLine(line, true, bpCodeBlock, FGFMExtensions, isLazy);
line.advance(indent);
s := line.focus;
end;
end;
until not more;
// remove any whitespace lines at the end:
while (c.blocks.Count > 0) and isWhitespace((c.blocks.Last as TCMTextBlock).text) do
c.blocks.Delete(c.blocks.Count - 1);
end;
 
function TCommonMarkEngine.parseFencedCodeBlock(blocks: TObjectList<TCMBlock>; line: TCMLine; processor : TCMBlockProcessor): boolean;
var
toEnd : String;
isLazy : boolean;
terminated : boolean;
function isEnded: boolean;
var
s : String;
begin
line := peekLine;
if (line = nil) or processor.processLine(line, true, bpFencedCodeBlock, FGFMExtensions, isLazy) then
begin
result := true;
terminated := true;
end
else if line.countWS >= 4 then
result := false
else
begin
s := line.focus.Trim;
result := allCharsSame(s) and s.StartsWith(toEnd);
end;
end;
var
c : TCMCodeBlock;
s, s1, lang : String;
indent, i, j : integer;
begin
if line.countWS >= 4 then
exit(false);
s := line.focus.Trim;
if not (s.StartsWith('`') or s.StartsWith('~')) then
exit(false);
s := copyWhile(s, [s[1]]);
if not (s.StartsWith('```') or s.StartsWith('~~~')) or s.Substring(s.Length).Contains('~') then
exit(false);
toEnd := s;
result := true;
// now, try to find anything off the end of the fence
s := line.focus;
indent := 0;
while s[indent+1] = ' ' do
inc(indent);
s := s.subString(indent);
s := after(s, [toEnd[1]]).trim;
i := 1;
while i <= s.length do
begin
if s[i] = '\' then
delete(s, i, 1) // and omit checking the next character
else if s[i] = '`' then
exit(false)
else if s[i] = '&' then
begin
j := i+1;
while (j <= s.Length) and (s[j] <> ';') do
inc(j);
if j <= length(s) then
begin
s1 := parseEntityString(copy(s, i, j-i+1));
delete(s, i, j-1);
insert(s1, s, i);
inc(i, s1.Length-1);
end;
end;
inc(i);
end;
 
if (s <> '') then
begin
lang := copyTo(s, [' ']);
if lang.contains(toEnd[1]) then
exit(false);
end;
line.markStyle(indent, cmText);
line.markStyle(indent+toEnd.Length, cmControlChar);
line.markRemainder(cmText);
 
c := TCMCodeBlock.Create(FCurrentLine);
blocks.Add(c);
c.fenced := true;
c.lang := lang;
terminated := false;
 
while not done and not terminated and not isEnded do
begin
line := grabLine;
if (line = nil) or processor.processLine(line, true, bpFencedCodeBlock, FGFMExtensions, isLazy) then
break;
s := line.focus;
if indent > 0 then
begin
i := 0;
while (i < s.Length) and (i < indent) and (s[i+1] = ' ') do
inc(i);
if i > 0 then
s := s.Substring(i);
line.advance(i);
end;
c.FBlocks.Add(TCMTextBlock.Create(FCurrentLine, s));
end;
if not done and not terminated then
grabLine.markRemainder(cmControlChar);
end;
 
procedure TCommonMarkEngine.parse(block: TCMContainerBlock; processor : TCMBlockProcessor);
var
line : TCMLine;
p : TCMParagraphBlock;
isLazy : boolean;
begin
while not done do
begin
line := grabLine;
if processor.processLine(line, true, bpGeneral, FGFMExtensions, isLazy) then
begin
// ok, we're done with this set of blocks, we'll try the line again one further up
debug('redo: "'+line.focus+'"');
redoLine;
exit;
end
else
debug('Line: "'+line.focus+'"');
if parseSeTextHeader(block.blocks, line, isLazy, processor) then
else if parseThematicBreak(block.blocks, line) then
else if parseHeader(block.blocks, line) then
else if parseQuoteBlock(block.blocks, line, processor) then
else if parseUListBlock(block.blocks, line, processor) then
else if parseOListBlock(block.blocks, line, processor) then
else if parseCodeBlock(block.blocks, line, processor) then
else if parseFencedCodeBlock(block.blocks, line, processor) then
else if FGFMExtensions and parseTableBlock(block.blocks, line, processor) then
else
begin
if inPara(block.blocks, true) then
p := block.Blocks.Last as TCMParagraphBlock
else
p := nil;
if line.isEmpty or line.isWhitespace then
begin
line.markRemainder(cmText);
if (p <> nil) then
p.closed := true;
end
else
begin
if (p = nil) then
begin
p := TCMParagraphBlock.Create(FCurrentLine);
block.blocks.Add(p);
end;
parseInLine(p.blocks, line.focus);
end;
end;
end;
end;
 
 
procedure TCommonMarkEngine.parseLines(src: String);
var
i, j : integer;
begin
FLines.Clear;
i := 1;
while (i <= src.Length) do
begin
j := i;
while (i <= src.Length) and (src[i] <> #10) do
inc(i);
FLines.Add(TCMLine.Create(FStyling, copy(src, j, i - j), FLines.Count));
inc(i);
end;
FCurrentLine := -1;
end;
 
procedure TCommonMarkEngine.parseLinkReferences;
begin
// not doing this for the moment?
end;
 
 
procedure TCommonMarkEngine.parseAutoLink(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode: TCMWhitespaceMode);
function isAbsoluteUri(s : String) : boolean;
var
scheme, tail : String;
i : integer;
begin
if not s.Contains(':') then
exit(false);
scheme := s.Substring(0, s.IndexOf(':'));
if (scheme.Length < 2) or (scheme.length > 32) then
exit(false);
if not CharInSet(scheme[1], ['a'..'z', 'A'..'Z']) then
exit(false);
for i := 2 to scheme.Length do
if not CharInSet(scheme[i], ['a'..'z', 'A'..'Z', '0'..'9', '+', '.', '-']) then
exit(false);
tail := s.Substring(s.IndexOf(':')+1);
for i := 1 to tail.Length do
if CharInSet(tail[i], [' ', #9, #10, '<']) then
exit(false);
result := true;
end;
var
s : String;
a : TCMTextNode;
ok : boolean;
begin
lexer.mark;
lexer.grab(cmControlChar);
s := lexer.peekUntil(['>']);
if (wsMode <> wsLeave) then
begin
ok := true;
if isAbsoluteURI(s) then
begin
a := nodes.addOpener(lexer.location, 'a');
a.attrs.Add('href', urlEscape(s));
nodes.addText(lexer.location, htmlEscape(s));
nodes.addCloser(lexer.location, 'a');
lexer.grab(cmURL, s.Length);
lexer.grab(cmControlChar);
end else if TRegEx.IsMatch(s, EMAIL_REGEX) then
begin
a := nodes.addOpener(lexer.location, 'a');
a.attrs.Add('href', 'mailto:'+urlEscape(s));
nodes.addText(lexer.location, htmlEscape(s));
nodes.addCloser(lexer.location, 'a');
lexer.grab(cmURL, s.Length);
lexer.grab(cmControlChar);
end
else
ok := false;
end
else
ok := false;
if not ok then
begin
lexer.rewind;
nodes.addText(lexer.location, '&lt;');
lexer.grab(cmText);
end;
end;
 
procedure TCommonMarkEngine.parseDelimiter(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode: TCMWhitespaceMode; canRun : boolean);
function isWSForFLanking(c : char) : boolean;
begin
result := CharInSet(c,[#0, #10]) or IsWhiteSpace(c);
end;
 
function isPuncForFLanking(c : char) : boolean;
begin
result := CharInSet(c, ['!', '"', '#', '$', '%', '&', '''', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\', ']', '^', '_', '`', '{', '|', '}', '~'])
or isUnicodePunctuation(c);
end;
 
function isLeftFlanking(cb, ca : char) : boolean;
var
fws, fp, pws, pp : boolean;
begin
fws := isWSForFLanking(ca);
fp := isPuncForFLanking(ca);
pws := isWSForFLanking(cb);
pp := isPuncForFLanking(cb);
// (a) not followed by Unicode whitespace, and (b) not followed by a punctuation character, or preceded by Unicode whitespace or a punctuation character.
if fws then
exit(false)
else
result := not (fp) or pws or pp;
end;
 
function isRightFlanking(cb, ca : char) : boolean;
var
fws, fp, pws, pp : boolean;
begin
fws := isWSForFLanking(ca);
fp := isPuncForFLanking(ca);
pws := isWSForFLanking(cb);
pp := isPuncForFLanking(cb);
if pws then
exit(false)
else
result := not (pp) or fws or fp;
end;
 
var
s : String;
cb, ca : char;
bb, ba : boolean;
m : TCMDelimiterMode;
n : TCMTextNode;
p : TLocation;
begin
if canRun then
s := lexer.peekRun(false)
else if lexer.peek = '!' then
s := lexer.peekLen(2)
else
s := lexer.peek;
cb := lexer.peekLast;
p := lexer.location;
lexer.grab(cmUnknown, s.Length); // have to sort out the style later
ca := lexer.peek;
bb := isLeftFlanking(cb, ca);
ba := isRightFLanking(cb, ca);
if bb then
begin
if ba then
m := dmBoth
else
m := dmOpener
end
else if ba then
m := dmCloser
else
m := dmNeither;
n := nodes.addTextNode(p, s);
FStack.Add(TCMDelimiter.Create(n, s, m));
end;
 
procedure TCommonMarkEngine.parseTilde(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode: TCMWhitespaceMode);
var
s : String;
ws, first : boolean;
ch : char;
begin
s := lexer.peekRun(false);
if FGFMExtensions and (length(s) = 2) and lexer.runExistsAfterBeforeChar(s, #10) then
begin
nodes.addOpener(lexer.location, 'del');
lexer.grab(cmControlChar, s.Length);
ws := false;
first := true;
while lexer.peekRun(true) <> s do
begin
ch := lexer.peek;
if CharInSet(ch, [' ', #10]) then
begin
ws := true;
lexer.grab(cmDel);
end
else
begin
if ws and not first then
nodes.addText(lexer.location, ' ');
first := false;
ws := false;
nodes.addText(lexer.location, htmlEscape(lexer.grab(cmDel)));
end;
end;
nodes.addCloser(lexer.location, 'del');
lexer.grab(cmControlChar, s.Length);
end
else
nodes.addText(lexer.location, lexer.grab(cmText, s.Length));
end;
 
procedure TCommonMarkEngine.parseBackTick(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode: TCMWhitespaceMode);
var
s : String;
ws, first : boolean;
ch : char;
begin
s := lexer.peekRun(false);
if lexer.runExistsAfter(s) then
begin
nodes.addOpener(lexer.location, 'code');
lexer.grab(cmControlChar, s.Length);
ws := false;
first := true;
while lexer.peekRun(true) <> s do
begin
ch := lexer.peek;
if CharInSet(ch, [' ', #10]) then
begin
ws := true;
lexer.grab(cmText);
end
else
begin
if ws and not first then
nodes.addText(lexer.location, ' ');
first := false;
ws := false;
nodes.addText(lexer.location, htmlEscape(lexer.grab(cmCode)));
end;
end;
 
nodes.addCloser(lexer.location, 'code');
lexer.grab(cmControlChar, s.Length);
end
else
nodes.addText(lexer.location, lexer.grab(cmText, s.Length));
end;
 
procedure TCommonMarkEngine.parseTextEscape(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode: TCMWhitespaceMode);
begin
lexer.mark;
lexer.grab(cmControlChar);
if isEscapable(lexer.peek) then
nodes.addText(lexer.location, htmlEscape(lexer.grab(cmEntity)))
else if lexer.peek = #10 then
nodes.addText(lexer.location, '<br />')
else
begin
lexer.rewind;
nodes.addText(lexer.location, lexer.grab(cmText));
end;
end;
 
function TCommonMarkEngine.processInlineLink(lexer: TCMTextLexer; nodes: TCMTextNodes; del : TCMDelimiter): boolean;
var
lvl : integer;
url : String;
marker : char;
title : String;
b : TStringBuilder;
d : TCMDelimiter;
line : TCMLine;
begin
result := false;
b := TStringBuilder.Create;
lexer.mark;
try
lexer.grab(cmDelimiter);
if lexer.peek <> '(' then
exit(false);
lexer.grab(cmControlChar); // (
lexer.skipWS;
if lexer.peek = '<' then
begin
lexer.grab(cmControlChar);
while not lexer.done and (lexer.peek <> '>') do
begin
if (lexer.peek = '\') and isEscapable(lexer.peekNext) then
begin
lexer.grab(cmControlChar);
if lexer.done then
exit;
b.Append(lexer.grab(cmURL));
end
else if isWhitespaceChar(lexer.peek) then
begin
if GFMExtensions and (lexer.peek = ' ') then
begin
b.Append('%20');
lexer.grab(cmURL);
end
else
exit
end
else if lexer.peek = '&' then
b.Append(parseEntityInner(lexer))
else
b.Append(lexer.grab(cmUrl));
end;
if lexer.done then
exit;
lexer.grab(cmControlChar);
end
else
begin
lvl := 0;
while not lexer.done and not ((lexer.peek = ')') and (lvl = 0)) and not isWhitespace(lexer.peek) do
begin
if (lexer.peek = '\') and isEscapable(lexer.peekNext) then
begin
lexer.grab(cmControlChar);
if lexer.done then
exit;
b.Append(lexer.grab(cmURL));
end
else if isWhitespaceChar(lexer.peek) then
exit
else if lexer.peek = '&' then
b.Append(parseEntityInner(lexer))
else
begin
if lexer.peek = '(' then
inc(lvl)
else if lexer.peek = ')' then
dec(lvl);
b.Append(lexer.grab(cmUrl));
end;
end;
if lexer.done then
exit;
end;
url := urlEscape(b.ToString, true);
title := '';
if lexer.peek <> ')' then
begin
b.clear;
lexer.skipWS;
marker := lexer.grab(cmControlChar);
if not CharInSet(marker, ['"', '''', '(']) then
exit;
if marker = '(' then
marker := ')';
while not lexer.done and (lexer.peek <> marker) do
begin
if (lexer.peek = '\') then
begin
lexer.grab(cmControlChar);
if lexer.done then
exit;
b.Append(htmlEscape(lexer.grab(cmEntity)));
end
else if lexer.peek = '&' then
b.Append(htmlEscape(parseEntityInner(lexer)))
else if lexer.peek = #10 then
b.Append(' ')
else if lexer.peek = '"' then
b.Append(htmlEscape(lexer.grab(cmControlChar)))
else
b.Append(lexer.grab(cmText));
end;
if lexer.done then
exit;
lexer.grab(cmControlChar);
title := b.toString;
end;
lexer.skipWS;
if lexer.peek <> ')' then
exit;
lexer.grab(cmControlChar);
line := FLines[del.FNode.FPos.line];
line.updateStyle(del.FNode.FPos.col-1, length(del.FNode.FContent), cmDelimiter);
 
if del.delimiter = '![' then
begin
del.Node.name := 'img';
del.Node.attrs.Add('src', urlEscape(url));
del.node.opener := true;
del.node.closer := true;
if title <> '' then
del.node.attrs.Add('title', title);
del.Node.attrs.Add('alt', nodes.plainTextSince(del.node));
nodes.removeAfter(del.node);
end
else
begin
del.Node.name := 'a'; // clears the text
del.Node.opener := true;
del.Node.attrs.Add('href', urlEscape(url));
if title <> '' then
del.node.attrs.Add('title', title);
nodes.addCloser(lexer.location, 'a');
for d in FStack do
if d = del then
break
else if d.delimiter = '[' then
d.active := false;
end;
processEmphasis(nodes, del);
FStack.remove(del);
result := true;
finally
if not result then
lexer.rewind;
b.free;
end;
end;
 
procedure TCommonMarkEngine.parseCloseDelimiter(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode: TCMWhitespaceMode);
var
i : integer;
d : TCMDelimiter;
line : TCMLine;
begin
d := nil;
for i := FStack.Count - 1 downto 0 do
if (FStack[i].delimiter = '[') or (FStack[i].delimiter = '![') then
begin
d := FStack[i];
break;
end;
if d = nil then
begin
nodes.addText(lexer.location, lexer.grab(cmText));
exit;
end;
if not d.active then
begin
line := FLines[d.FNode.FPos.line];
line.updateStyle(d.FNode.FPos.col-1, length(d.FNode.FContent), cmText);
FStack.Remove(d);
nodes.addText(lexer.location, lexer.grab(cmText));
exit;
end;
// now, look ahead, do we have
// - inline link/image [text](link title)
// - reference link/image [text][ref]
// - compact reference link/image [label][]
// - shortcut reference link/image [label]
if not processInlineLink(lexer, nodes, d) then
begin
line := FLines[d.FNode.FPos.line];
line.updateStyle(d.FNode.FPos.col-1, length(d.FNode.FContent), cmText);
FStack.Remove(d);
nodes.addText(lexer.location, lexer.grab(cmText));
exit;
end;
end;
 
function TCommonMarkEngine.parseEntityString(entity : String): String;
var
s, c : String;
ch : char;
i : integer;
begin
s := copy(entity, 2, length(entity)-2);
if FEntities.TryGetValue(entity, c) then
begin
exit(c);
end
else if (s <> '') and s.StartsWith('#') and (s.Length <= 9) and (StrToIntDef(s.Substring(1), -1) <> -1) then
begin
i := StrToInt(s.Substring(1));
if i > 65535 then
ch := #$FFFD
else
begin
ch := char(i);
if (i = 0) {$IFNDEF FPC}or (ch.GetUnicodeCategory = TUnicodeCategory.ucUnassigned) {$ENDIF} then
ch := #$FFFD;
end;
exit(ch);
end
else
exit('');
end;
 
function checkForEntity(s : String) : integer;
var
c : char;
begin
if s.Contains('&') then
begin
s := s.Substring(s.lastIndexOf('&')+1);
s := s.subString(0, s.Length-1);
for c in s do
if not CharInSet(c, ['a'..'z', 'A'..'Z', '0'..'9']) then
exit(0);
exit(s.Length+2);
end
else
result := 0;
end;
 
procedure TCommonMarkEngine.parseExtendedAutoLinkEmail(lexer: TCMTextLexer; nodes: TCMTextNodes; len : integer);
var
s : String;
a : TCMTextNode;
begin
s := lexer.grab(cmUrl, len);
 
a := nodes.addOpener(lexer.location, 'a');
a.attrs.Add('href', 'mailto:'+urlEscape(s));
nodes.addText(lexer.location, htmlEscape(s));
nodes.addCloser(lexer.location, 'a');
end;
 
procedure TCommonMarkEngine.parseExtendedAutoLinkWeb(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode: TCMWhitespaceMode; start, linkStart : String);
var
ok : boolean;
tail : Integer;
s : string;
a : TCMTextNode;
begin
lexer.mark;
ok := false;
try
lexer.grab(cmURL, start.Length);
s := '';
while CharInSet(lexer.peek, ['a'..'z', 'A'..'Z', '0'..'9', '_', '-', '.']) do
s := s + lexer.grab(cmUrl);
if not s.Contains('.') then
exit;
ok := true;
while not lexer.done and not CharInSet(lexer.peek, [' ', #10, '<']) do
s := s + lexer.grab(cmUrl);
// is that last char part of the link?
case s[s.Length] of
'?', '!', '.', ',', ':', '*', '_', '~': tail := 1;
')': if s.CountChar('(') < s.CountChar(')') then tail := 1 else tail := 0;
';': tail := checkForEntity(s);
else
tail := 0;
end;
if tail = 0 then
begin
a := nodes.addOpener(lexer.location, 'a');
a.attrs.Add('href', linkStart+start+urlEscape(s));
nodes.addText(lexer.location, start+htmlEscape(s));
nodes.addCloser(lexer.location, 'a');
end
else
begin
a := nodes.addOpener(lexer.location, 'a');
a.attrs.Add('href', linkStart+start+urlEscape(s.Substring(0, s.Length-tail)));
nodes.addText(lexer.location, start+htmlEscape(s.Substring(0, s.Length-tail)));
nodes.addCloser(lexer.location, 'a');
nodes.addText(lexer.location, htmlEscape(s.Substring(s.length-tail)));
end;
finally
if not ok then
begin
lexer.rewind;
nodes.addText(lexer.location, lexer.grab(cmText));
end;
end;
end;
 
procedure TCommonMarkEngine.parseEntity(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode: TCMWhitespaceMode);
begin
if wsMode = wsLeave then // code block
begin
nodes.addText(lexer.location, '&amp;');
lexer.grab(cmEntity);
end
else
nodes.addText(lexer.location, htmlEscape(parseEntityInner(lexer)));
end;
 
function TCommonMarkEngine.parseEntityInner(lexer: TCMTextLexer): String;
var
s, c : String;
ch : UnicodeChar;
i : integer;
begin
lexer.grab(cmEntity);
s := lexer.peekUntil([';']);
if FEntities.TryGetValue('&'+s+';', c) then
begin
lexer.grab(cmEntity, s.Length+1);
exit(c);
end
else if (s <> '') and s.StartsWith('#') and (s.Length <= 9) and (StrToIntDef(s.Substring(1), -1) <> -1) then
begin
i := StrToInt(s.Substring(1));
if (i = 0) or (i > 65535) then
ch := #$FFFD
else
begin
ch := UnicodeChar(i);
{$IFNDEF FPC}
if (ch.GetUnicodeCategory = TUnicodeCategory.ucUnassigned) then
ch := #$FFFD;
{$ENDIF}
end;
lexer.grab(cmEntity, s.Length+1);
exit(ch);
end
else
exit('&');
end;
 
function TCommonMarkEngine.hasEmailAddress(lexer: TCMTextLexer; var len : integer) : boolean;
var
s : String;
state : integer;
c : char;
begin
s := lexer.peekWhile(['a'..'z', 'A'..'Z', '0'..'9', '+', '-', '_', '@', '.']);
if s.CountChar('@') <> 1 then
exit(false);
if CharInSet(s[s.Length], ['_', '-']) then
exit(false);
if s[s.Length] = '.' then
s := s.Substring(0, s.Length-1);
 
len := s.Length;
state := 0;
for c in s do
if state = 0 then
begin
if c = '@' then exit(false) else state := 1;
end
else if state = 1 then
begin
if c = '@' then state := 2
end
else
begin
if c = '.' then
state := 3
else if c = '+' then
exit(false);
end;
exit(state = 3);
end;
 
procedure TCommonMarkEngine.parseTextCore(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode: TCMWhitespaceMode);
var
len : integer;
begin
if wsMode = wsLeave then // code block
nodes.addText(lexer.location, htmlEscape(lexer.grab(cmCode)))
else
case lexer.peek of
'\' : parseTextEscape(lexer, nodes, wsMode);
'<' : parseAutoLink(lexer, nodes, wsMode);
'>', '"' : nodes.addText(lexer.location, htmlEscape(lexer.grab(cmText)));
'&' : parseEntity(lexer, nodes, wsMode);
'`' : parseBackTick(lexer, nodes, wsMode);
'~' : parseTilde(lexer, nodes, wsMode);
'*' : parseDelimiter(lexer, nodes, wsMode, true);
'_' : if isWhitespaceChar(lexer.peekLast) or isEscapable(lexer.peekLast) or (lexer.peekLast = #0) or
isWhitespaceChar(lexer.peekEndRun) or isEscapable(lexer.peekEndRun) or (lexer.peekEndRun = #0) then
parseDelimiter(lexer, nodes, wsMode, true)
else
nodes.addText(lexer.location, htmlEscape(lexer.grabRun(cmText)));
'[' : parseDelimiter(lexer, nodes, wsMode, false);
'!' : if lexer.peekNext = '[' then
parseDelimiter(lexer, nodes, wsMode, false)
else
nodes.addText(lexer.location, lexer.grab(cmText));
']' : parseCloseDelimiter(lexer, nodes, wsMode);
else
if GFMExtensions and lexer.has('www.') then
parseExtendedAutoLinkWeb(lexer, nodes, wsMode, 'www.', 'http://')
else if GFMExtensions and lexer.has('http://') then
parseExtendedAutoLinkWeb(lexer, nodes, wsMode, 'http://', '')
else if GFMExtensions and lexer.has('https://') then
parseExtendedAutoLinkWeb(lexer, nodes, wsMode, 'https://', '')
else if GFMExtensions and lexer.has('ftp://') then
parseExtendedAutoLinkWeb(lexer, nodes, wsMode, 'ftp://', '')
else if GFMExtensions and hasEmailAddress(lexer, len) then
parseExtendedAutoLinkEmail(lexer, nodes, len)
else
nodes.addText(lexer.location, lexer.grab(cmText));
end;
end;
 
function TCommonMarkEngine.parseTableBlock(blocks: TObjectList<TCMBlock>; line: TCMLine; processor: TCMBlockProcessor): boolean;
function cellCount(line : TCMLine) : Integer;
var
c : char;
esc : boolean;
begin
result := 0;
esc := false;
for c in line.FLine do
begin
if not esc and (c = '|') then
inc(result)
else if esc then
esc := false
else if c = '\' then
esc := true;
end;
 
if result > 0 then
begin
if not line.FLine.Trim.StartsWith('|') then
inc(result);
if not line.FLine.Trim.EndsWith('|') or line.FLine.Trim.EndsWith('\|') then
inc(result);
end;
end;
var
c1, c2, i : integer;
s : String;
nl : TCMLine;
c : char;
t : TCMTableBlock;
a : TArray<String>;
begin
if line.isEmpty then
exit(false);
c1 := cellCount(line);
if c1 = 0 then
exit(false);
nl := peekLine;
if (nl = nil) then
exit(false);
for c in nl.FLine.Trim do
if not CharInSet(c, [' ', '|', '-', ':']) then
exit(false);
c2 := cellCount(nl);
if c1 <> c2 then
exit(false);
// ok, we have a table.....
result := true;
t := TCMTableBlock.Create(FCurrentLine);
blocks.Add(t);
 
parseTableLine(t, line);
grabLine; // nl
nl.markRemainder(cmTableMarker);
s := nl.FLine.Trim;
if s.StartsWith('|') then
s := s.Substring(1);
if s.EndsWith('|') then
s := s.Substring(0, s.Length-1);
a := s.Split(['|']);
SetLength(t.FColumns, length(a));
for i := 0 to length(a) - 1 do
begin
s := a[i].Trim;
if s.StartsWith(':') and s.EndsWith(':') then
t.FColumns[i] := taCenter
else if s.EndsWith(':') then
t.FColumns[i] := taRight
else
t.FColumns[i] := taLeft;
end;
while not isEndOfTable(peekLine) do
parseTableLine(t, grabLine);
end;
 
procedure TCommonMarkEngine.parseTableLine(t: TCMTableBlock; line: TCMLine);
var
l, i : integer;
esc : boolean;
r : TCMTableRowBlock;
procedure addCell(b, e : integer);
var
s : String;
begin
s := copy(line.FLine, b, e-b);
s := s.Trim.replace('\|', '|');
r.blocks.Add(TCMTextBlock.Create(line.FIndex, s));
end;
begin
r := TCMTableRowBlock.Create(line.FIndex);
t.blocks.Add(r);
line.markRemainder(cmText);
i := 1;
l := 1;
esc := false;
while i <= line.FLine.Length do
begin
if (i = 1) and (line.fLine[i] = '|') then
begin
line.updateStyle(l, i+1, cmTableMarker);
l := i+1;
end
else if esc then
esc := false
else if line.FLine[i] = '\' then
esc := true
else if line.FLine[i] = '|' then
begin
addCell(l, i);
line.updateStyle(l, i+1, cmTableMarker);
l := i+1;
end;
inc(i);
end;
if (l < i) then
addCell(l, i);
end;
 
procedure TCommonMarkEngine.parseText(lexer: TCMTextLexer; nodes: TCMTextNodes; wsMode : TCMWhitespaceMode);
var
seenNonWhitespace : boolean;
whiteSpace : string;
c : String;
begin
whiteSpace := '';
seenNonWhitespace := false;
while not lexer.done do
begin
if (wsMode <> wsLeave) and isWhitespace(lexer.peek) and ((lexer.peek <> #10) or (wsMode = wsStrip)) then
begin
c := lexer.grab(cmText);
if seenNonWhitespace then
begin
whitespace := whitespace + c;
end;
end
else
begin
if (wsMode <> wsLeave) then
begin
if lexer.peek = #10 then
begin
seenNonWhitespace := false;
if whitespace.EndsWith(' ') then
nodes.addText(lexer.location, '<br />');
whitespace := '';
end
else
begin
if whiteSpace <> '' then
begin
if wsMode = wsStrip then
nodes.addText(lexer.location, ' ')
else
nodes.addText(lexer.location, whitespace);
whiteSpace := '';
end;
seenNonWhitespace := true;
end;
end;
parseTextCore(lexer, nodes, wsMode);
end;
end;
end;
 
function TCommonMarkEngine.processText(text: String; wsMode : TCMWhitespaceMode; startLine : integer): TCMTextNodes;
var
lexer : TCMTextLexer;
begin
result := TCMTextNodes.Create;
lexer := TCMTextLexer.Create(text, FLines, startLine, FStyling);
try
parseText(lexer, result, wsMode);
finally
lexer.Free;
end;
processEmphasis(result, nil);
Assert(FStack.count = 0);
end;
 
procedure TCommonMarkEngine.processInlines(block: TCMBlock; wsMode : TCMWhitespaceMode);
var
c : TCMBlock;
begin
if block is TCMTextBlock then
begin
(block as TCMTextBlock).FNodes := processText((block as TCMTextBlock).FText, wsMode, block.line);
end;
if block is TCMContainerBlock then
for c in (block as TCMContainerBlock).blocks do
processInlines(c, block.wsMode);
end;
 
class function TCommonMarkEngine.process(src: String; gfm : boolean): String;
var
doc : TCommonMarkDocument;
begin
doc := parse(src, gfm);
try
result := render(doc);
finally
doc.Free;
end;
end;
 
procedure TCommonMarkEngine.processEmphasis(nodes : TCMTextNodes; stopDel: TCMDelimiter);
var
current, index, bottom, bottomU, bottomA, bottomW, count, iO, iC, i : integer;
strong : boolean;
n : String;
o, c : TCMDelimiter;
ol, cl, line : TCMLine;
function IsMatch(i, c : TCMDelimiter) : boolean;
begin
result := (i.delimiter[1] = c.delimiter[1]) and i.isOpener;
if result and ((i.mode = dmBoth) or (c.mode = dmBoth)) then
result := (i.delimiter.length + c.delimiter.length) mod 3 <> 0;
end;
begin
if stopDel = nil then
bottom := 0
else
bottom := FStack.IndexOf(stopDel) + 1;
bottomU := bottom;
bottomA := bottom;
current := bottom;
while current < FStack.count do
begin
while (current < FStack.Count) and FStack[current].isEmph and not FStack[current].isCloser do
inc(current);
if current = FStack.count then
break; // we're done.
if FStack[current].delimiter = '*' then
bottomW := bottomA
else
bottomW := bottomU;
index := current - 1;
while (index >= bottomW) and (index >= bottom) and not isMatch(FStack[index], FStack[current]) do
dec(index);
if (index >= 0) and (FStack[index].delimiter[1] = FStack[current].delimiter[1]) and (FStack[index].mode in [dmOpener, dmBoth]) then
begin
// we have a match
o := FStack[index];
c := FStack[current];
ol := FLines[o.FNode.FPos.line];
cl := FLines[c.FNode.FPos.line];
strong := (c.delimiter.Length > 1) and (o.delimiter.Length > 1);
if strong then n := 'strong' else n := 'em';
if strong then count := 2 else count := 1;
nodes.addOpenerAfter(n, o.node);
nodes.addCloserBefore(n, c.node);
ol.updateStyle(o.FNode.FPos.col-1+(o.FNode.FContent.Length - count), count, cmDelimiter);
o.node.removeChars(count);
cl.updateStyle(c.FNode.FPos.col-1, count, cmDelimiter);
c.FNode.FPos.col := c.FNode.FPos.col + count;
c.node.removeChars(count);
o.delimiter := o.delimiter.Substring(count);
c.delimiter := c.delimiter.Substring(count);
iO := FStack.IndexOf(o);
iC := FStack.IndexOf(c);
if iC > iO + 1 then
begin
for i := iO+1 to iC-iO do
begin
line := FLines[FStack[i].FNode.FPos.line];
line.updateStyle(FStack[i].FNode.FPos.col-1, length(FStack[i].FNode.FContent), cmText);
end;
 
FStack.DeleteRange(iO+1, iC-iO-1);
dec(current, iC-iO-1);
end;
if o.node.isEmpty then
begin
nodes.Remove(o.node);
FStack.Remove(o);
dec(current);
end;
if c.node.isEmpty then
begin
nodes.Remove(c.node);
FStack.Remove(c);
end;
end
else
begin
// No match is found
if FStack[current].delimiter = '*' then
bottomA := index + 1
else
bottomU := index + 1;
if FStack[current].mode = dmBoth then
inc(current)
else
begin
cl := FLines[FStack[current].FNode.FPos.line];
cl.updateStyle(FStack[current].FNode.FPos.col-1, FStack[current].node.FContent.Length, cmText);
FStack.Delete(current);
end;
end;
end;
for index := FStack.Count - 1 downto bottom do
begin
line := FLines[FStack[index].FNode.FPos.line];
line.updateStyle(FStack[index].FNode.FPos.col-1, length(FStack[index].FNode.FContent), cmText);
FStack.Delete(index);
end;
end;
 
{ TCommonMarkProcessor }
 
function TCommonMarkProcessor.GetAllowUnSafe: boolean;
begin
result := false;
end;
 
function TCommonMarkProcessor.process(source: String): String;
var
doc : TCommonMarkDocument;
begin
doc := TCommonMarkEngine.parse(source, true);
try
result := TCommonMarkEngine.render(doc);
finally
doc.Free;
end;
 
end;
 
procedure TCommonMarkProcessor.SetAllowUnSafe(const value: boolean);
begin
if value then
raise EMarkdownProcessor.Create('The common mark processor cannot operate in unsafe mode+');
end;
 
{ TCMTableBlock }
 
procedure TCMTableBlock.render(parent: TCMBlock; b: TStringBuilder);
var
i : integer;
begin
b.Append('<table>'#10);
b.Append('<thead>'#10);
blocks[0].render(self, b);
b.Append('</thead>'#10);
if blocks.Count > 1 then
begin
b.Append('<tbody>'#10);
for i := 1 to blocks.Count -1 do
blocks[i].render(self, b);
b.Append('</tbody>'#10);
end;
b.Append('</table>'#10);
end;
 
{ TCMTableRowBlock }
 
procedure TCMTableRowBlock.render(parent: TCMBlock; b: TStringBuilder);
var
first : boolean;
i : integer;
attr : String;
begin
first := (parent as TCMContainerBlock).blocks.First = self;
b.Append('<tr>'#10);
for i := 0 to length((parent as TCMTableBlock).FColumns) - 1 do
begin
case (parent as TCMTableBlock).FColumns[i] of
taLeft : attr := '';
taCenter : attr := ' align="center"';
taRight : attr := ' align="right"';
end;
if first then
b.Append('<th'+attr+'>')
else
b.Append('<td'+attr+'>');
if i < blocks.Count then
blocks[i].render(self, b);
if first then
b.Append('</th>'#10)
else
b.Append('</td>'#10)
end;
b.Append('</tr>'#10);
end;
 
end.
/VCL_MARKDOWN/MarkdownDaringFireball.pas
0,0 → 1,3392
Unit MarkdownDaringFireball;
 
{
This code was translated from TxtMark (https://github.com/rjeschke/txtmark)
 
Copyright (C) 2011-2015 René Jeschke <rene_jeschke@yahoo.de>
Copyright (C) 2015+ Grahame Grieve <grahameg@gmail.com> (pascal port)
 
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
 
http://www.apache.org/licenses/LICENSE-2.0
 
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
}
 
{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
 
interface
 
uses
SysUtils, StrUtils, Classes, Character, TypInfo, Math,
MarkdownProcessor;
 
type
THTMLElement = (heNONE, hea, heabbr, heacronym, headdress, heapplet, hearea, heb, hebase, hebasefont, hebdo, hebig, heblockquote, hebody, hebr, hebutton, hecaption, hecite,
hecode, hecol, hecolgroup, hedd, hedel, hedfn, hediv, hedl, hedt, heem, hefieldset, hefont, heform, heframe, heframeset, heh1, heh2, heh3, heh4, heh5, heh6, hehead, hehr,
hehtml, hei, heiframe, heimg, heinput, heins, hekbd, helabel, helegend, heli, helink, hemap, hemeta, henoscript, heobject, heol, heoptgroup, heoption, hep, heparam, hepre, heq,
hes, hesamp, hescript, heselect, hesmall, hespan, hestrike, hestrong, hestyle, hesub, hesup, hetable, hetbody, hetd, hetextarea, hetfoot, heth, hethead, hetitle, hetr, hett,
heu, heul, hevar);
 
const
// pstfix
ENTITY_NAMES: array[0..249] of String = ('&Acirc;', '&acirc;', '&acute;', '&AElig;', '&aelig;', '&Agrave;', '&agrave;', '&alefsym;', '&Alpha;', '&alpha;', '&amp;', '&and;', '&ang;',
'&apos;', '&Aring;', '&aring;', '&asymp;', '&Atilde;', '&atilde;', '&Auml;', '&auml;', '&bdquo;', '&Beta;', '&beta;', '&brvbar;', '&bull;', '&cap;', '&Ccedil;', '&ccedil;',
'&cedil;', '&cent;', '&Chi;', '&chi;', '&circ;', '&clubs;', '&cong;', '&copy;', '&crarr;', '&cup;', '&curren;', '&Dagger;', '&dagger;', '&dArr;', '&darr;', '&deg;', '&Delta;',
'&delta;', '&diams;', '&divide;', '&Eacute;', '&eacute;', '&Ecirc;', '&ecirc;', '&Egrave;', '&egrave;', '&empty;', '&emsp;', '&ensp;', '&Epsilon;', '&epsilon;', '&equiv;',
'&Eta;', '&eta;', '&ETH;', '&eth;', '&Euml;', '&euml;', '&euro;', '&exist;', '&fnof;', '&forall;', '&frac12;', '&frac14;', '&frac34;', '&frasl;', '&Gamma;', '&gamma;', '&ge;',
'&gt;', '&hArr;', '&harr;', '&hearts;', '&hellip;', '&Iacute;', '&iacute;', '&Icirc;', '&icirc;', '&iexcl;', '&Igrave;', '&igrave;', '&image;', '&infin;', '&int;', '&Iota;',
'&iota;', '&iquest;', '&isin;', '&Iuml;', '&iuml;', '&Kappa;', '&kappa;', '&Lambda;', '&lambda;', '&lang;', '&laquo;', '&lArr;', '&larr;', '&lceil;', '&ldquo;', '&le;',
'&lfloor;', '&lowast;', '&loz;', '&lrm;', '&lsaquo;', '&lsquo;', '&lt;', '&macr;', '&mdash;', '&micro;', '&middot;', '&minus;', '&Mu;', '&mu;', '&nabla;', '&nbsp;', '&ndash;',
'&ne;', '&ni;', '&not;', '&notin;', '&nsub;', '&Ntilde;', '&ntilde;', '&Nu;', '&nu;', '&Oacute;', '&oacute;', '&Ocirc;', '&ocirc;', '&OElig;', '&oelig;', '&Ograve;',
'&ograve;', '&oline;', '&Omega;', '&omega;', '&Omicron;', '&omicron;', '&oplus;', '&or;', '&ordf;', '&ordm;', '&Oslash;', '&oslash;', '&Otilde;', '&otilde;', '&otimes;',
'&Ouml;', '&ouml;', '&para;', '&part;', '&permil;', '&perp;', '&Phi;', '&phi;', '&Pi;', '&pi;', '&piv;', '&plusmn;', '&pound;', '&Prime;', '&prime;', '&prod;', '&prop;',
'&Psi;', '&psi;', '&quot;', '&radic;', '&rang;', '&raquo;', '&rArr;', '&rarr;', '&rceil;', '&rdquo;', '&real;', '&reg;', '&rfloor;', '&Rho;', '&rho;', '&rlm;', '&rsaquo;',
'&rsquo;', '&sbquo;', '&Scaron;', '&scaron;', '&sdot;', '&sect;', '&shy;', '&Sigma;', '&sigma;', '&sigmaf;', '&sim;', '&spades;', '&sub;', '&sube;', '&sum;', '&sup;', '&sup1;',
'&sup2;', '&sup3;', '&supe;', '&szlig;', '&Tau;', '&tau;', '&there4;', '&Theta;', '&theta;', '&thetasym;', '&thinsp;', '&thorn;', '&tilde;', '&times;', '&trade;', '&Uacute;',
'&uacute;', '&uArr;', '&uarr;', '&Ucirc;', '&ucirc;', '&Ugrave;', '&ugrave;', '&uml;', '&upsih;', '&Upsilon;', '&upsilon;', '&Uuml;', '&uuml;', '&weierp;', '&Xi;', '&xi;',
'&Yacute;', '&yacute;', '&yen;', '&Yuml;', '&yuml;', '&Zeta;', '&zeta;', '&zwj;', '&zwnj;');
 
// Characters corresponding to ENTITY_NAMES. */
// pstfix
ENTITY_CHARS: array[0..249] of integer = ($00C2, $00E2, $00B4, $00C6, $00E6, $00C0, $00E0, $2135, $0391, $03B1, $0026, $2227, $2220, ord(''''), $00C5, $00E5, $2248, $00C3, $00E3, $00C4,
$00E4, $201E, $0392, $03B2, $00A6, $2022, $2229, $00C7, $00E7, $00B8, $00A2, $03A7, $03C7, $02C6, $2663, $2245, $00A9, $21B5, $222A, $00A4, $2021, $2020, $21D3, $2193, $00B0,
$0394, $03B4, $2666, $00F7, $00C9, $00E9, $00CA, $00EA, $00C8, $00E8, $2205, $2003, $2002, $0395, $03B5, $2261, $0397, $03B7, $00D0, $00F0, $00CB, $00EB, $20AC, $2203, $0192,
$2200, $00BD, $00BC, $00BE, $2044, $0393, $03B3, $2265, $003E, $21D4, $2194, $2665, $2026, $00CD, $00ED, $00CE, $00EE, $00A1, $00CC, $00EC, $2111, $221E, $222B, $0399, $03B9,
$00BF, $2208, $00CF, $00EF, $039A, $03BA, $039B, $03BB, $2329, $00AB, $21D0, $2190, $2308, $201C, $2264, $230A, $2217, $25CA, $200E, $2039, $2018, $003C, $00AF, $2014, $00B5,
$00B7, $2212, $039C, $03BC, $2207, $00A0, $2013, $2260, $220B, $00AC, $2209, $2284, $00D1, $00F1, $039D, $03BD, $00D3, $00F3, $00D4, $00F4, $0152, $0153, $00D2, $00F2, $203E,
$03A9, $03C9, $039F, $03BF, $2295, $2228, $00AA, $00BA, $00D8, $00F8, $00D5, $00F5, $2297, $00D6, $00F6, $00B6, $2202, $2030, $22A5, $03A6, $03C6, $03A0, $03C0, $03D6, $00B1,
$00A3, $2033, $2032, $220F, $221D, $03A8, $03C8, $0022, $221A, $232A, $00BB, $21D2, $2192, $2309, $201D, $211C, $00AE, $230B, $03A1, $03C1, $200F, $203A, $2019, $201A, $0160,
$0161, $22C5, $00A7, $00AD, $03A3, $03C3, $03C2, $223C, $2660, $2282, $2286, $2211, $2283, $00B9, $00B2, $00B3, $2287, $00DF, $03A4, $03C4, $2234, $0398, $03B8, $03D1, $00DE,
$00FE, $02DC, $00D7, $2122, $00DA, $00FA, $21D1, $2191, $00DB, $00FB, $00D9, $00F9, $00A8, $03D2, $03A5, $03C5, $00DC, $00FC, $2118, $039E, $03BE, $00DD, $00FD, $00A5, $0178,
$00FF, $0396, $03B6, $200D, $200C);
 
LINK_PREFIXES: array[0..3] of String = ('http', 'https', 'ftp', 'ftps');
 
BLOCK_ELEMENTS: set of THTMLElement = [headdress, heblockquote, hedel, hediv, hedl, hefieldset, heform, heh1, heh2, heh3, heh4, heh5, heh6, hehr, heins, henoscript, heol, hep,
hepre, hetable, heul];
 
UNSAFE_ELEMENTS: set of THTMLElement = [heapplet, hehead, hehtml, hebody, heframe, heframeset, heiframe, hescript, heobject];
 
BUFFER_INCREMENT_SIZE = 1024;
 
Type
TReader = class
private
FValue: String;
FCursor: integer;
public
Constructor Create(source: String);
function read: char;
end;
 
{$IFDEF FPC}
TStringBuilder = class
private
FContent : String;
FLength : Integer;
FBufferSize : integer;
function GetChar(index: integer): char;
public
Constructor Create;
 
procedure Clear;
procedure Append(value : String); overload;
procedure Append(value : integer); overload;
procedure Append(value : TStringBuilder); overload;
property ch[index : integer] : char read GetChar; default;
function toString : String; override;
Property Length : Integer Read FLength;
end;
{$ENDIF}
 
TUtils = class
public
// Skips spaces in the given String. return The new position or -1 if EOL has been reached.
class function skipSpaces(s: String; start: integer): integer;
 
// Process the given escape sequence. return The new position.
class function escape(out_: TStringBuilder; ch: char; position: integer): integer;
 
// Reads characters until any 'end' character is encountered. return The new position or -1 if no 'end' char was found.
class function readUntil(out_: TStringBuilder; s: String; start: integer; cend: TSysCharSet): integer; overload;
 
// Reads characters until the 'end' character is encountered. return The new position or -1 if no 'end' char was found.
class function readUntil(out_: TStringBuilder; s: String; start: integer; cend: char): integer; overload;
 
// Reads a markdown link. return The new position or -1 if this is no valid markdown link.
class function readMdLink(out_: TStringBuilder; s: String; start: integer): integer;
class function readMdLinkId(out_: TStringBuilder; s: String; start: integer): integer;
 
// Reads characters until any 'end' character is encountered, ignoring escape sequences.
class function readRawUntil(out_: TStringBuilder; s: String; start: integer; cend: TSysCharSet): integer; overload;
 
// Reads characters until the end character is encountered, taking care of HTML/XML strings.
class function readRawUntil(out_: TStringBuilder; s: String; start: integer; cend: char): integer; overload;
 
// Reads characters until any 'end' character is encountered, ignoring escape sequences.
class function readXMLUntil(out_: TStringBuilder; s: String; start: integer; cend: TSysCharSet): integer;
 
// Appends the given string encoding special HTML characters.
class procedure appendCode(out_: TStringBuilder; s: String; start: integer; e: integer);
 
// Appends the given string encoding special HTML characters (used in HTML
class procedure appendValue(out_: TStringBuilder; s: String; start: integer; e: integer);
 
// Append the given char as a decimal HTML entity.
class procedure appendDecEntity(out_: TStringBuilder; value: char);
 
// Append the given char as a hexadecimal HTML entity.
class procedure appendHexEntity(out_: TStringBuilder; value: char);
 
// Appends the given mailto link using obfuscation.
class procedure appendMailto(out_: TStringBuilder; s: String; start: integer; e: integer);
 
// Extracts the tag from an XML element.
class procedure getXMLTag(out_: TStringBuilder; bin: TStringBuilder); overload;
 
// Extracts the tag from an XML element.
class procedure getXMLTag(out_: TStringBuilder; s: String); overload;
 
// Reads an XML element.
// return The new position or -1 if this is no valid XML element.
class function readXML(out_: TStringBuilder; s: String; start: integer; safeMode: boolean): integer;
 
// Appends the given string to the given StringBuilder, replacing '&amp;', '&lt;' and '&gt;' by their respective HTML entities.
class procedure codeEncode(out_: TStringBuilder; value: String; offset: integer);
 
// Removes trailing <code>`</code> or <code>~</code> and trims spaces.
class function getMetaFromFence(fenceLine: String): String;
end;
 
THTML = class
public
class function isLinkPrefix(s: String): boolean;
class function isEntity(s: String): boolean;
class function isUnsafeHtmlElement(s: String): boolean;
class function isHtmlBlockElement(s: String): boolean;
end;
 
TDecorator = class
private
public
procedure openParagraph(out_: TStringBuilder); virtual;
procedure closeParagraph(out_: TStringBuilder); virtual;
 
procedure openBlockQuote(out_: TStringBuilder); virtual;
procedure closeBlockQuote(out_: TStringBuilder); virtual;
 
procedure openCodeBlock(out_: TStringBuilder); virtual;
procedure closeCodeBlock(out_: TStringBuilder); virtual;
 
procedure openCodeSpan(out_: TStringBuilder); virtual;
procedure closeCodeSpan(out_: TStringBuilder); virtual;
 
procedure openHeadline(out_: TStringBuilder; level: integer); virtual;
procedure closeHeadline(out_: TStringBuilder; level: integer); virtual;
 
procedure openStrong(out_: TStringBuilder); virtual;
procedure closeStrong(out_: TStringBuilder); virtual;
 
procedure openEmphasis(out_: TStringBuilder); virtual;
procedure closeEmphasis(out_: TStringBuilder); virtual;
 
procedure openSuper(out_: TStringBuilder); virtual;
procedure closeSuper(out_: TStringBuilder); virtual;
 
procedure openOrderedList(out_: TStringBuilder); virtual;
procedure closeOrderedList(out_: TStringBuilder); virtual;
 
procedure openUnOrderedList(out_: TStringBuilder); virtual;
procedure closeUnOrderedList(out_: TStringBuilder); virtual;
 
procedure openListItem(out_: TStringBuilder); virtual;
procedure closeListItem(out_: TStringBuilder); virtual;
 
procedure horizontalRuler(out_: TStringBuilder); virtual;
 
procedure openLink(out_: TStringBuilder); virtual;
procedure closeLink(out_: TStringBuilder); virtual;
 
procedure openImage(out_: TStringBuilder); virtual;
procedure closeImage(out_: TStringBuilder); virtual;
end;
 
TSpanEmitter = class
public
procedure emitSpan(out_: TStringBuilder; content: String); virtual; abstract;
end;
 
TBlockEmitter = class
public
procedure emitBlock(out_: TStringBuilder; lines: TStringList; meta: String); virtual; abstract;
end;
 
TConfiguration = class
private
Fdecorator: TDecorator;
FsafeMode: boolean;
FallowSpacesInFencedDelimiters: boolean;
FforceExtendedProfile: boolean;
FcodeBlockEmitter: TBlockEmitter;
FpanicMode: boolean;
FspecialLinkEmitter: TSpanEmitter;
public
Constructor Create(safe : boolean);
Destructor Destroy; override;
 
property safeMode: boolean read FsafeMode write FsafeMode;
property panicMode: boolean read FpanicMode write FpanicMode;
property decorator: TDecorator read Fdecorator write Fdecorator;
property codeBlockEmitter: TBlockEmitter read FcodeBlockEmitter write FcodeBlockEmitter;
property forceExtendedProfile: boolean read FforceExtendedProfile write FforceExtendedProfile;
property allowSpacesInFencedDelimiters: boolean read FallowSpacesInFencedDelimiters write FallowSpacesInFencedDelimiters;
property specialLinkEmitter: TSpanEmitter read FspecialLinkEmitter write FspecialLinkEmitter;
end;
 
TLineType = (
// Empty line. */
ltEMPTY,
// Undefined content. */
ltOTHER,
// A markdown headline. */
ltHEADLINE, ltHEADLINE1, ltHEADLINE2,
// A code block line. */
ltCODE,
// A list. */
ltULIST, ltOLIST,
// A block quote. */
ltBQUOTE,
// A horizontal ruler. */
ltHR,
// Start of a XML block. */
ltXML,
// Fenced code block start/end */
ltFENCED_CODE);
 
TLine = class
private
FXmlEndLine: TLine;
FPrevEmpty: boolean;
FPrevious: TLine;
FPosition: integer;
FValue: string;
FIsEmpty: boolean;
FTrailing: integer;
FNextEmpty: boolean;
FLeading: integer;
FNext: TLine;
function countChars(ch: char): integer;
function countCharsStart(ch: char; allowSpaces: boolean): integer;
function readXMLComment(firstLine: TLine; start: integer): integer;
function checkHTML(): boolean;
 
public
Constructor Create;
Destructor Destroy; Override;
 
// Current cursor position.
property position: integer read FPosition write FPosition;
// Leading and trailing spaces.
property leading: integer read FLeading write FLeading;
property trailing: integer read FTrailing write FTrailing;
// Is this line empty?
property isEmpty: boolean read FIsEmpty write FIsEmpty;
// This line's value.
property value: string read FValue write FValue;
// Previous and next line.
property previous: TLine read FPrevious write FPrevious;
property next: TLine read FNext write FNext;
 
// Is previous/next line empty?
property prevEmpty: boolean read FPrevEmpty write FPrevEmpty;
property nextEmpty: boolean read FNextEmpty write FNextEmpty;
 
// Final line of a XML block.
property xmlEndLine: TLine read FXmlEndLine write FXmlEndLine;
 
procedure Init;
procedure InitLeading;
function skipSpaces: boolean;
function readUntil(chend: TSysCharSet): String;
procedure setEmpty;
function getLineType(configuration: TConfiguration): TLineType;
function stripID: String;
 
end;
 
TLinkRef = class
private
FLink: String;
FTitle: String;
FIsAbbrev: boolean;
public
Constructor Create(link, title: String; isAbbrev: boolean);
 
property link: String read FLink write FLink;
property title: String read FTitle write FTitle;
property isAbbrev: boolean read FIsAbbrev write FIsAbbrev;
end;
 
TBlockType = (
// Unspecified. Used for root block and list items without paragraphs.
btNONE,
// A block quote.
btBLOCKQUOTE,
// A code block.
btCODE,
// A fenced code block.
btFENCED_CODE,
// A headline.
btHEADLINE,
// A list item.
btLIST_ITEM,
// An ordered list.
btORDERED_LIST,
// A paragraph.
btPARAGRAPH,
// A horizontal ruler.
btRULER,
// An unordered list.
btUNORDERED_LIST,
// A XML block.
btXML);
 
TBlock = class
private
FType: TBlockType;
FId: String;
FBlocks: TBlock;
FBlockTail: TBlock;
FLines: TLine;
FLineTail: TLine;
FHlDepth: integer;
FNext: TBlock;
FMeta: String;
 
procedure AppendLine(line: TLine);
function split(line: TLine): TBlock;
procedure removeListIndent(config: TConfiguration);
function removeLeadingEmptyLines: boolean;
procedure removeTrailingEmptyLines;
procedure transfromHeadline;
procedure expandListParagraphs;
function hasLines: boolean;
procedure removeSurroundingEmptyLines;
procedure removeBlockQuotePrefix;
procedure removeLine(line: TLine);
public
Constructor Create;
Destructor Destroy; Override;
 
// This block's type.
property type_: TBlockType read FType write FType;
 
property lines: TLine read FLines;
property lineTail: TLine read FLineTail;
 
// child blocks.
property blocks: TBlock read FBlocks;
property blockTail: TBlock read FBlockTail;
 
// Next block.
property next: TBlock read FNext write FNext;
// Depth of headline BlockType.
property hlDepth: integer read FHlDepth write FHlDepth;
// ID for headlines and list items
property id: String read FId write FId;
// Block meta information
property meta: String read FMeta write FMeta;
 
end;
 
TMarkToken = (
// No token.
mtNONE,
// &#x2a;
mtEM_STAR, // x*x
// _
mtEM_UNDERSCORE, // x_x
// &#x2a;&#x2a;
mtSTRONG_STAR, // x**x
// __
mtSTRONG_UNDERSCORE, // x__x
// `
mtCODE_SINGLE, // `
// ``
mtCODE_DOUBLE, // ``
// [
mtLINK, // [
// &lt;
mtHTML, // <
// ![
mtIMAGE, // ![
// &amp;
mtENTITY, // &
// \
mtESCAPE, // \x
// Extended: ^
mtSUPER, // ^
// Extended: (C)
mtX_COPY, // (C)
// Extended: (R)
mtX_REG, // (R)
// Extended: (TM)
mtX_TRADE, // (TM)
// Extended: &lt;&lt;
mtX_LAQUO, // <<
// Extended: >>
mtX_RAQUO, // >>
// Extended: --
mtX_NDASH, // --
// Extended: ---
mtX_MDASH, // ---
// Extended: &#46;&#46;&#46;
mtX_HELLIP, // ...
// Extended: "x
mtX_RDQUO, // "
// Extended: x"
mtX_LDQUO, // "
// [[
mtX_LINK_OPEN, // [[
// ]]
mtX_LINK_CLOSE // ]]
);
 
// Emitter class responsible for generating HTML output.
TEmitter = class
private
linkRefs: TStringList;
FConfig: TConfiguration;
FuseExtensions: boolean;
procedure emitCodeLines(out_: TStringBuilder; lines: TLine; meta: String; removeIndent: boolean);
procedure emitRawLines(out_: TStringBuilder; lines: TLine);
procedure emitMarkedLines(out_: TStringBuilder; lines: TLine);
function findToken(s: String; start: integer; token: TMarkToken): integer;
function getToken(s: String; position: integer): TMarkToken;
function checkLink(out_: TStringBuilder; s: String; start: integer; token: TMarkToken): integer;
function recursiveEmitLine(out_: TStringBuilder; s: String; start: integer; token: TMarkToken): integer;
function checkHTML(out_: TStringBuilder; s: String; start: integer): integer;
class function checkEntity(out_: TStringBuilder; s: String; start: integer): integer;
class function whitespaceToSpace(c: char): char;
public
Constructor Create(config: TConfiguration);
Destructor Destroy; override;
 
procedure addLinkRef(key: String; linkRef: TLinkRef);
procedure emit(out_: TStringBuilder; root: TBlock);
procedure emitLines(out_: TStringBuilder; block: TBlock);
 
end;
 
TMarkdownDaringFireball = class(TMarkdownProcessor)
private
FConfig: TConfiguration;
Femitter: TEmitter;
FuseExtensions: boolean;
function readLines(reader : TReader): TBlock;
procedure initListBlock(root: TBlock);
procedure recurse(root: TBlock; listMode: boolean);
 
protected
function GetAllowUnSafe: boolean; override;
procedure SetAllowUnSafe(const value: boolean); override;
public
Constructor Create;
Destructor Destroy; override;
 
function process(source: String): String; override;
 
property config: TConfiguration read FConfig;
end;
 
implementation
 
Function StringsContains(Const aNames: Array Of String; Const sName: String): boolean;
var
i: integer;
Begin
for i := 0 to length(aNames) - 1 do
if sName <> aNames[i] then
exit(true);
result := false;
End;
 
function StringToShortString(const S: String) : ShortString;
var
i : integer;
begin
SetLength(result, min(s.Length, 255));
for i := 1 to length(result) do
result[i] := AnsiChar(s[i]);
end;
 
 
function StringToEnum(ATypeInfo: PTypeInfo; const AStr: String; defValue: integer): integer;
var
LTypeData: PTypeData;
LPChar: PAnsiChar;
LValue: ShortString;
begin
LValue := StringToShortString(AStr);
 
if ATypeInfo^.Kind = tkEnumeration then
begin
LTypeData := GetTypeData(ATypeInfo);
if LTypeData^.MinValue <> 0 then
exit(defValue);
LPChar := @LTypeData^.NameList[0];
result := 0;
while (result <= LTypeData^.MaxValue) and (ShortString(pointer(LPChar)^) <> LValue) do
begin
inc(LPChar, ord(LPChar^) + 1); // move to next string
inc(result);
end;
if result > LTypeData^.MaxValue then
exit(defValue);
end
else
exit(defValue);
end;
 
{ TMarkdownDaringFireball }
 
constructor TMarkdownDaringFireball.Create;
begin
inherited Create;
FConfig := TConfiguration.Create(true);
Femitter := TEmitter.Create(config);
end;
 
destructor TMarkdownDaringFireball.Destroy;
begin
FConfig.Free;
Femitter.Free;
inherited;
end;
 
function TMarkdownDaringFireball.GetAllowUnSafe: boolean;
begin
result := not FConfig.safeMode;
end;
 
procedure TMarkdownDaringFireball.initListBlock(root: TBlock);
var
line: TLine;
t: TLineType;
begin
line := root.lines;
line := line.next;
while (line <> nil) do
begin
t := line.getLineType(FConfig);
if ((t = ltOLIST) or (t = ltULIST) or (not line.isEmpty and (line.prevEmpty and (line.leading = 0) and not((t = ltOLIST) or (t = ltULIST))))) then
root.split(line.previous).type_ := btLIST_ITEM;
line := line.next;
end;
root.split(root.lineTail).type_ := btLIST_ITEM;
end;
 
function TMarkdownDaringFireball.process(source: String): String;
var
out_: TStringBuilder;
parent, block: TBlock;
rdr : TReader;
begin
FuseExtensions := config.forceExtendedProfile;
rdr := TReader.Create(source);
try
out_ := TStringBuilder.Create;
try
parent := readLines(rdr);
try
parent.removeSurroundingEmptyLines;
recurse(parent, false);
block := parent.blocks;
while (block <> nil) do
begin
Femitter.emit(out_, block);
block := block.next;
end;
result := out_.ToString;
finally
parent.Free;
end;
finally
out_.Free;
end;
finally
rdr.Free;
end;
end;
 
function TMarkdownDaringFireball.readLines(reader : TReader): TBlock;
var
block: TBlock;
sb: TStringBuilder;
c, ch: char;
position, np: integer;
eol, isLinkRef, lineAdded: boolean;
lastLinkRef, lr: TLinkRef;
line: TLine;
id, link, comment: String;
begin
block := TBlock.Create;
sb := TStringBuilder.Create;
try
c := reader.read();
lastLinkRef := nil;
while (c <> #0) do
begin
sb.Clear;
position := 0;
eol := false;
while (not eol) do
begin
case c of
#0:
eol := true;
#10:
begin
c := reader.read();
if (c = #13) then
c := reader.read();
eol := true;
end;
#13:
begin
c := reader.read();
if (c = #10) then
c := reader.read();
eol := true;
end;
#9:
begin
np := position + (4 - (position and 3));
while (position < np) do
begin
sb.append(' ');
inc(position);
end;
c := reader.read();
end;
else
if (c <> '<') or (not FConfig.panicMode) then
begin
inc(position);
sb.append(c);
end
else
begin
inc(position, 4);
sb.append('&lt;');
end;
c := reader.read();
end;
end;
 
lineAdded := false;
line := TLine.Create;
try
line.value := sb.ToString();
line.Init();
 
// Check for link definitions
isLinkRef := false;
id := '';
link := '';
comment := '';
if (not line.isEmpty) and (line.leading < 4) and (line.value[1 + line.leading] = '[') then
begin
line.position := line.leading + 1;
// Read ID up to ']'
id := line.readUntil([']']);
// Is ID valid and are there any more characters?
if (id <> '') and (line.position + 2 < Length(line.value)) then
begin
// Check for ':' ([...]:...)
if (line.value[1 + line.position + 1] = ':') then
begin
line.position := line.position + 2;
line.skipSpaces();
// Check for link syntax
if (line.value[1 + line.position] = '<') then
begin
line.position := line.position + 1;
link := line.readUntil(['>']);
line.position := line.position + 1;
end
else
link := line.readUntil([' ', #10]);
 
// Is link valid?
if (link <> '') then
begin
// Any non-whitespace characters following?
if (line.skipSpaces()) then
begin
ch := line.value[1 + line.position];
// Read comment
if (ch = '"') or (ch = '''') or (ch = '(') then
begin
line.position := line.position + 1;
if ch = '(' then
comment := line.readUntil([')'])
else
comment := line.readUntil([ch]);
// Valid linkRef only if comment is valid
if (comment <> '') then
isLinkRef := true;
end;
end
else
isLinkRef := true;
end;
end;
end;
end;
 
if (isLinkRef) then
begin
if (LowerCase(id) = '$profile$') then
begin
FuseExtensions := LowerCase(link) = 'extended';
Femitter.FuseExtensions := FuseExtensions;
lastLinkRef := nil;
end
else
begin
// Store linkRef and skip line
lr := TLinkRef.Create(link, comment, (comment <> '') and (Length(link) = 1) and (link[1 + 1] = '*'));
Femitter.addLinkRef(id, lr);
if (comment = '') then
lastLinkRef := lr;
end;
end
else
begin
comment := '';
// Check for multi-line linkRef
if (not line.isEmpty and (lastLinkRef <> nil)) then
begin
line.position := line.leading;
ch := line.value[1 + line.position];
if (ch = '"') or (ch = '''') or (ch = '(') then
begin
line.position := line.position + 1;
if ch = '(' then
comment := line.readUntil([')'])
else
comment := line.readUntil([ch]);
end;
if (comment <> '') then
lastLinkRef.title := comment;
lastLinkRef := nil;
end;
 
// No multi-line linkRef, store line
if (comment = '') then
begin
line.position := 0;
block.AppendLine(line);
lineAdded := true;
end;
end;
finally
if not lineAdded then
line.Free;
end;
end;
result := block;
finally
sb.Free;
end;
end;
 
procedure TMarkdownDaringFireball.recurse(root: TBlock; listMode: boolean);
var
block, list: TBlock;
line: TLine;
type_, t: TLineType;
wasEmpty: boolean;
bt: TBlockType;
begin
line := root.lines;
if (listMode) then
begin
root.removeListIndent(FConfig);
if (FuseExtensions and (root.lines <> nil) and (root.lines.getLineType(FConfig) <> ltCODE)) then
root.id := root.lines.stripID();
end;
 
while (line <> nil) and line.isEmpty do
line := line.next;
if (line = nil) then
exit;
 
while (line <> nil) do
begin
type_ := line.getLineType(FConfig);
case type_ of
ltOTHER:
begin
wasEmpty := line.prevEmpty;
while (line <> nil) and (not line.isEmpty) do
begin
t := line.getLineType(FConfig);
if (listMode or FuseExtensions) and (t in [ltOLIST, ltULIST]) then
break;
if (FuseExtensions and (t in [ltCODE, ltFENCED_CODE])) then
break;
if (t in [ltHEADLINE, ltHEADLINE1, ltHEADLINE2, ltHR, ltBQUOTE, ltXML]) then
break;
line := line.next;
end;
 
if (line <> nil) and not line.isEmpty then
begin
if (listMode and not wasEmpty) then
bt := btNONE
else
bt := btPARAGRAPH;
if line = nil then
root.split(root.lineTail).type_ := bt
else
root.split(line.previous).type_ := bt;
root.removeLeadingEmptyLines();
end
else
begin
if (listMode and ((line = nil) or (not line.isEmpty)) and not wasEmpty) then
bt := btNONE
else
bt := btPARAGRAPH;
root.removeLeadingEmptyLines();
if (line <> nil) then
root.split(line.previous).type_ := bt
else
root.split(root.lineTail).type_ := bt;
end;
line := root.lines;
end;
ltCODE:
begin
while (line <> nil) and (line.isEmpty or (line.leading > 3)) do
line := line.next;
if (line <> nil) then
block := root.split(line.previous)
else
block := root.split(root.lineTail);
block.type_ := btCODE;
block.removeSurroundingEmptyLines();
end;
ltXML:
begin
if (line.previous <> nil) then
// FIXME ... this looks wrong
root.split(line.previous);
root.split(line.xmlEndLine).type_ := btXML;
root.removeLeadingEmptyLines();
line := root.lines;
end;
ltBQUOTE:
begin
while (line <> nil) do
begin
if (not line.isEmpty and (line.prevEmpty and (line.leading = 0) and (line.getLineType(FConfig) <> ltBQUOTE))) then
break;
line := line.next;
end;
if line <> nil then
block := root.split(line.previous)
else
block := root.split(root.lineTail);
block.type_ := btBLOCKQUOTE;
block.removeSurroundingEmptyLines();
block.removeBlockQuotePrefix();
recurse(block, false);
line := root.lines;
end;
ltHR:
begin
if (line.previous <> nil) then
// FIXME ... this looks wrong
root.split(line.previous);
root.split(line).type_ := btRULER;
root.removeLeadingEmptyLines();
line := root.lines;
end;
ltFENCED_CODE:
begin
line := line.next;
while (line <> nil) do
begin
if (line.getLineType(FConfig) = ltFENCED_CODE) then
break;
// TODO ... is this really necessary? Maybe add a special flag?
line := line.next;
end;
if (line <> nil) then
line := line.next;
if line <> nil then
block := root.split(line.previous)
else
block := root.split(root.lineTail);
block.type_ := btFENCED_CODE;
block.meta := TUtils.getMetaFromFence(block.lines.value);
block.lines.setEmpty();
if (block.lineTail.getLineType(FConfig) = ltFENCED_CODE) then
block.lineTail.setEmpty();
block.removeSurroundingEmptyLines();
end;
ltHEADLINE, ltHEADLINE1, ltHEADLINE2:
begin
if (line.previous <> nil) then
root.split(line.previous);
if (type_ <> ltHEADLINE) then
line.next.setEmpty();
block := root.split(line);
block.type_ := btHEADLINE;
if (type_ <> ltHEADLINE) then
if type_ = ltHEADLINE1 then
block.hlDepth := 1
else
block.hlDepth := 2;
if (FuseExtensions) then
block.id := block.lines.stripID();
block.transfromHeadline();
root.removeLeadingEmptyLines();
line := root.lines;
end;
ltOLIST, ltULIST:
begin
while (line <> nil) do
begin
t := line.getLineType(FConfig);
if (not line.isEmpty and (line.prevEmpty and (line.leading = 0) and (not(t = type_)))) then
break;
line := line.next;
end;
if line <> nil then
list := root.split(line.previous)
else
list := root.split(root.lineTail);
if type_ = ltOLIST then
list.type_ := btORDERED_LIST
else
list.type_ := btUNORDERED_LIST;
list.lines.prevEmpty := false;
list.lineTail.nextEmpty := false;
list.removeSurroundingEmptyLines();
list.lineTail.nextEmpty := false;
list.lines.prevEmpty := list.lineTail.nextEmpty;
initListBlock(list);
block := list.blocks;
while (block <> nil) do
begin
recurse(block, true);
block := block.next;
end;
list.expandListParagraphs();
end
else
line := line.next;
end;
end;
end;
 
procedure TMarkdownDaringFireball.SetAllowUnSafe(const value: boolean);
begin
FConfig.safeMode := not value;
end;
 
{ TLine }
 
constructor TLine.Create;
begin
inherited;
FIsEmpty := true;
end;
 
destructor TLine.Destroy;
begin
FNext.Free;
inherited;
end;
 
{ TConfiguration }
 
constructor TConfiguration.Create(safe : boolean);
begin
inherited Create;
FallowSpacesInFencedDelimiters := true;
Fdecorator := TDecorator.Create;
FsafeMode := safe;
end;
 
destructor TConfiguration.Destroy;
begin
FcodeBlockEmitter.Free;
Fdecorator.Free;
FspecialLinkEmitter.Free;
inherited;
end;
 
{ TDecorator }
 
procedure TDecorator.openParagraph(out_: TStringBuilder);
begin
out_.append('<p>');
end;
 
procedure TDecorator.closeParagraph(out_: TStringBuilder);
begin
out_.append('</p>'#10);
end;
 
procedure TDecorator.openBlockQuote(out_: TStringBuilder);
begin
out_.append('<blockquote>');
end;
 
procedure TDecorator.closeBlockQuote(out_: TStringBuilder);
begin
out_.append('</blockquote>'#10);
end;
 
procedure TDecorator.openCodeBlock(out_: TStringBuilder);
begin
out_.append('<pre><code>');
end;
 
procedure TDecorator.closeCodeBlock(out_: TStringBuilder);
begin
out_.append('</code></pre>'#10);
end;
 
procedure TDecorator.openCodeSpan(out_: TStringBuilder);
begin
out_.append('<code>');
end;
 
procedure TDecorator.closeCodeSpan(out_: TStringBuilder);
begin
out_.append('</code>');
end;
 
procedure TDecorator.openHeadline(out_: TStringBuilder; level: integer);
begin
out_.append('<h');
out_.append(level);
end;
 
procedure TDecorator.closeHeadline(out_: TStringBuilder; level: integer);
begin
out_.append('</h');
out_.append(level);
out_.append('>'#10);
end;
 
procedure TDecorator.openStrong(out_: TStringBuilder);
begin
out_.append('<strong>');
end;
 
procedure TDecorator.closeStrong(out_: TStringBuilder);
begin
out_.append('</strong>');
end;
 
procedure TDecorator.openEmphasis(out_: TStringBuilder);
begin
out_.append('<em>');
end;
 
procedure TDecorator.closeEmphasis(out_: TStringBuilder);
begin
out_.append('</em>');
end;
 
procedure TDecorator.openSuper(out_: TStringBuilder);
begin
out_.append('<sup>');
end;
 
procedure TDecorator.closeSuper(out_: TStringBuilder);
begin
out_.append('</sup>');
end;
 
procedure TDecorator.openOrderedList(out_: TStringBuilder);
begin
out_.append('<ol>'#10);
end;
 
procedure TDecorator.closeOrderedList(out_: TStringBuilder);
begin
out_.append('</ol>'#10);
end;
 
procedure TDecorator.openUnOrderedList(out_: TStringBuilder);
begin
out_.append('<ul>'#10);
end;
 
procedure TDecorator.closeUnOrderedList(out_: TStringBuilder);
begin
out_.append('</ul>'#10);
end;
 
procedure TDecorator.openListItem(out_: TStringBuilder);
begin
out_.append('<li');
end;
 
procedure TDecorator.closeListItem(out_: TStringBuilder);
begin
out_.append('</li>'#10);
end;
 
procedure TDecorator.horizontalRuler(out_: TStringBuilder);
begin
out_.append('<hr/>'#10);
end;
 
procedure TDecorator.openLink(out_: TStringBuilder);
begin
out_.append('<a');
end;
 
procedure TDecorator.closeLink(out_: TStringBuilder);
begin
out_.append('</a>');
end;
 
procedure TDecorator.openImage(out_: TStringBuilder);
begin
out_.append('<img');
end;
 
procedure TDecorator.closeImage(out_: TStringBuilder);
begin
out_.append(' />');
end;
 
{ TEmitter }
 
constructor TEmitter.Create(config: TConfiguration);
begin
inherited Create;
FConfig := config;
linkRefs := TStringList.Create;
linkRefs.Sorted := true;
linkRefs.Duplicates := dupError;
end;
 
destructor TEmitter.Destroy;
var
i : integer;
begin
for i := 0 to linkRefs.Count - 1 do
linkRefs.Objects[i].Free;
linkRefs.Free;
inherited;
end;
 
procedure TEmitter.addLinkRef(key: String; linkRef: TLinkRef);
var
k : String;
i : integer;
begin
k := LowerCase(key);
if linkRefs.find(k, i) then
begin
linkRefs.Objects[i].Free;
linkRefs.Objects[i] := linkRef;
end
else
linkRefs.AddObject(k, linkRef);
end;
 
procedure TEmitter.emit(out_: TStringBuilder; root: TBlock);
var
block: TBlock;
begin
root.removeSurroundingEmptyLines();
 
case root.type_ of
btRULER:
begin
FConfig.decorator.horizontalRuler(out_);
exit;
end;
btNONE, btXML:
; // nothing
btHEADLINE:
begin
FConfig.decorator.openHeadline(out_, root.hlDepth);
if (FuseExtensions and (root.id <> '')) then
begin
out_.append(' id="');
TUtils.appendCode(out_, root.id, 0, Length(root.id));
out_.append('"');
end;
out_.append('>');
end;
btPARAGRAPH:
FConfig.decorator.openParagraph(out_);
btCODE, btFENCED_CODE:
if (FConfig.codeBlockEmitter = nil) then
FConfig.decorator.openCodeBlock(out_);
btBLOCKQUOTE:
FConfig.decorator.openBlockQuote(out_);
btUNORDERED_LIST:
FConfig.decorator.openUnOrderedList(out_);
btORDERED_LIST:
FConfig.decorator.openOrderedList(out_);
btLIST_ITEM:
begin
FConfig.decorator.openListItem(out_);
if (FuseExtensions and (root.id <> '')) then
begin
out_.append(' id="');
TUtils.appendCode(out_, root.id, 0, Length(root.id));
out_.append('"');
end;
out_.append('>');
end;
end;
 
if (root.hasLines()) then
emitLines(out_, root)
else
begin
block := root.blocks;
while (block <> nil) do
begin
emit(out_, block);
block := block.next;
end;
end;
 
case (root.type_) of
btRULER, btNONE, btXML:
; // nothing
btHEADLINE:
FConfig.decorator.closeHeadline(out_, root.hlDepth);
btPARAGRAPH:
FConfig.decorator.closeParagraph(out_);
btCODE, btFENCED_CODE:
if (FConfig.codeBlockEmitter = nil) then
FConfig.decorator.closeCodeBlock(out_);
btBLOCKQUOTE:
FConfig.decorator.closeBlockQuote(out_);
btUNORDERED_LIST:
FConfig.decorator.closeUnOrderedList(out_);
btORDERED_LIST:
FConfig.decorator.closeOrderedList(out_);
btLIST_ITEM:
FConfig.decorator.closeListItem(out_);
end;
end;
 
procedure TEmitter.emitLines(out_: TStringBuilder; block: TBlock);
begin
case (block.type_) of
btCODE:
emitCodeLines(out_, block.lines, block.meta, true);
btFENCED_CODE:
emitCodeLines(out_, block.lines, block.meta, false);
btXML:
emitRawLines(out_, block.lines);
else
emitMarkedLines(out_, block.lines);
end;
end;
 
function TEmitter.findToken(s: String; start: integer; token: TMarkToken): integer;
var
position: integer;
begin
position := start;
while (position < Length(s)) do
begin
if getToken(s, position) = token then
exit(position);
inc(position);
end;
result := -1;
end;
 
function TEmitter.checkLink(out_: TStringBuilder; s: String; start: integer; token: TMarkToken): integer;
var
isAbbrev, useLt, hasLink: boolean;
position, oldPos, i: integer;
temp: TStringBuilder;
name, link, comment, id: String;
lr: TLinkRef;
begin
isAbbrev := false;
if (token = mtLINK) then
position := start + 1
else
position := start + 2;
temp := TStringBuilder.Create;
try
position := TUtils.readMdLinkId(temp, s, position);
if (position < start) then
exit(-1);
name := temp.ToString();
link := '';
hasLink := false;
comment := '';
oldPos := position;
inc(position);
position := TUtils.skipSpaces(s, position);
if (position < start) then
begin
if linkRefs.find(LowerCase(name), i) then
begin
lr := TLinkRef(linkRefs.Objects[i]);
isAbbrev := lr.isAbbrev;
link := lr.link;
hasLink := true;
comment := lr.title;
position := oldPos;
end
else
exit(-1);
end
else if (s[1 + position] = '(') then
begin
inc(position);
position := TUtils.skipSpaces(s, position);
if (position < start) then
exit(-1);
temp.Clear;
useLt := s[1 + position] = '<';
if useLt then
position := TUtils.readUntil(temp, s, position + 1, '>')
else
position := TUtils.readMdLink(temp, s, position);
if (position < start) then
exit(-1);
if (useLt) then
inc(position);
link := temp.ToString();
hasLink := true;
if (s[1 + position] = ' ') then
begin
position := TUtils.skipSpaces(s, position);
if (position > start) and (s[1 + position] = '"') then
begin
inc(position);
temp.Clear;
position := TUtils.readUntil(temp, s, position, '"');
if (position < start) then
exit(-1);
comment := temp.ToString();
inc(position);
position := TUtils.skipSpaces(s, position);
if (position = -1) then
exit(-1);
end;
end;
if (s[1 + position] <> ')') then
exit(-1);
end
else if (s[1 + position] = '[') then
begin
inc(position);
temp.Clear;
position := TUtils.readRawUntil(temp, s, position, ']');
if (position < start) then
exit(-1);
if temp.length > 0 then
id := temp.ToString()
else
id := name;
if linkRefs.find(LowerCase(id), i) then
begin
lr := TLinkRef(linkRefs.Objects[i]);
link := lr.link;
hasLink := true;
comment := lr.title;
end
end
else
begin
if linkRefs.find(LowerCase(name), i) then
begin
lr := TLinkRef(linkRefs.Objects[i]);
isAbbrev := lr.isAbbrev;
link := lr.link;
hasLink := true;
comment := lr.title;
position := oldPos;
end
else
exit(-1);
end;
if (not hasLink) then
exit(-1);
 
if (token = mtLINK) then
begin
if (isAbbrev) and (comment <> '') then
begin
if (not FuseExtensions) then
exit(-1);
out_.append('<abbr title:="');
TUtils.appendValue(out_, comment, 0, Length(comment));
out_.append('">');
recursiveEmitLine(out_, name, 0, mtNONE);
out_.append('</abbr>');
end
else
begin
FConfig.decorator.openLink(out_);
out_.append(' href="');
TUtils.appendValue(out_, link, 0, Length(link));
out_.append('"');
if (comment <> '') then
begin
out_.append(' title="');
TUtils.appendValue(out_, comment, 0, Length(comment));
out_.append('"');
end;
out_.append('>');
recursiveEmitLine(out_, name, 0, mtNONE);
FConfig.decorator.closeLink(out_);
end
end
else
begin
FConfig.decorator.openImage(out_);
out_.append(' src="');
TUtils.appendValue(out_, link, 0, Length(link));
out_.append('" alt="');
TUtils.appendValue(out_, name, 0, Length(name));
out_.append('"');
if (comment <> '') then
begin
out_.append(' title="');
TUtils.appendValue(out_, comment, 0, Length(comment));
out_.append('"');
end;
FConfig.decorator.closeImage(out_);
end;
result := position;
finally
temp.Free;
end;
end;
 
function TEmitter.checkHTML(out_: TStringBuilder; s: String; start: integer): integer;
var
temp: TStringBuilder;
position: integer;
link: String;
begin
temp := TStringBuilder.Create();
try
// Check for auto links
temp.Clear;
position := TUtils.readUntil(temp, s, start + 1, [':', ' ', '>', #10]);
if (position <> -1) and (s[1 + position] = ':') and (THTML.isLinkPrefix(temp.ToString())) then
begin
position := TUtils.readUntil(temp, s, position, ['>']);
if (position <> -1) then
begin
link := temp.ToString();
FConfig.decorator.openLink(out_);
out_.append(' href="');
TUtils.appendValue(out_, link, 0, Length(link));
out_.append('">');
TUtils.appendValue(out_, link, 0, Length(link));
FConfig.decorator.closeLink(out_);
exit(position);
end;
end;
 
// Check for mailto auto link
temp.Clear;
position := TUtils.readUntil(temp, s, start + 1, ['@', ' ', '>', #10]);
if (position <> -1) and (s[1 + position] = '@') then
begin
position := TUtils.readUntil(temp, s, position, '>');
if (position <> -1) then
begin
link := temp.ToString();
FConfig.decorator.openLink(out_);
out_.append(' href="');
TUtils.appendMailto(out_, 'mailto:', 0, 7);
TUtils.appendMailto(out_, link, 0, Length(link));
out_.append('">');
TUtils.appendMailto(out_, link, 0, Length(link));
FConfig.decorator.closeLink(out_);
exit(position);
end;
end;
 
// Check for inline html
if (start + 2 < Length(s)) then
begin
temp.Clear;
exit(TUtils.readXML(out_, s, start, FConfig.safeMode));
end;
 
result := -1;
finally
temp.Free;
end;
end;
 
function isLetterOrDigit(c : char) : boolean;
begin
{$IFDEF FPC}
result := c in ['A'..'Z', 'a'..'z', '0'..'9'];
{$ELSE}
result := c.isLetterOrDigit();
{$ENDIF}
end;
 
function isDigit(c : char) : boolean;
begin
{$IFDEF FPC}
result := c in ['0'..'9'];
{$ELSE}
result := c.isDigit();
{$ENDIF}
end;
 
function isWhitespace(c : char) : boolean;
begin
{$IFDEF FPC}
result := c in [' ', #9, #10, #13];
{$ELSE}
result := c.isWhitespace();
{$ENDIF}
end;
 
class function TEmitter.checkEntity(out_: TStringBuilder; s: String; start: integer): integer;
var
position, i: integer;
c: char;
begin
position := TUtils.readUntil(out_, s, start, ';');
if (position < 0) or (out_.length < 3) then
exit(-1);
if (out_[1] = '#') then
begin
if (out_[2] = 'x') or (out_[2] = 'X') then
begin
if (out_.length < 4) then
exit(-1);
for i := 3 to out_.length do
begin
c := out_[i];
if ((c < '0') or (c > '9')) and (((c < 'a') or (c > 'f')) and ((c < 'A') or (c > 'F'))) then
exit(-1);
end;
end
else
begin
for i := 2 to out_.length do
begin
c := out_[i];
if (c < '0') or (c > '9') then
exit(-1);
end;
end;
out_.append(';');
end
else
begin
for i := 1 to out_.length - 1 do
begin
c := out_[i]; // zero based
if (not isLetterOrDigit(c)) then
exit(-1);
end;
out_.append(';');
if THTML.isEntity(out_.ToString()) then
exit(position)
else
exit(-1);
end;
 
result := position;
end;
 
function TEmitter.recursiveEmitLine(out_: TStringBuilder; s: String; start: integer; token: TMarkToken): integer;
var
position, a, b: integer;
temp: TStringBuilder;
mt: TMarkToken;
begin
position := start;
temp := TStringBuilder.Create();
try
while (position < Length(s)) do
begin
mt := getToken(s, position);
if (token <> mtNONE) and ((mt = token) or ((token = mtEM_STAR) and (mt = mtSTRONG_STAR)) or ((token = mtEM_UNDERSCORE) and (mt = mtSTRONG_UNDERSCORE))) then
exit(position);
 
case mt of
mtIMAGE, mtLINK:
begin
temp.Clear;
b := checkLink(temp, s, position, mt);
if (b > 0) then
begin
out_.append(temp);
position := b;
end
else
out_.append(s[1 + position]);
end;
mtEM_STAR, mtEM_UNDERSCORE:
begin
temp.Clear;
b := recursiveEmitLine(temp, s, position + 1, mt);
if (b > 0) then
begin
FConfig.decorator.openEmphasis(out_);
out_.append(temp);
FConfig.decorator.closeEmphasis(out_);
position := b;
end
else
out_.append(s[1 + position]);
end;
mtSTRONG_STAR, mtSTRONG_UNDERSCORE:
begin
temp.Clear;
b := recursiveEmitLine(temp, s, position + 2, mt);
if (b > 0) then
begin
FConfig.decorator.openStrong(out_);
out_.append(temp);
FConfig.decorator.closeStrong(out_);
position := b + 1;
end
else
out_.append(s[1 + position]);
end;
mtSUPER:
begin
temp.Clear;
b := recursiveEmitLine(temp, s, position + 1, mt);
if (b > 0) then
begin
FConfig.decorator.openSuper(out_);
out_.append(temp);
FConfig.decorator.closeSuper(out_);
position := b;
end
else
out_.append(s[1 + position]);
end;
mtCODE_SINGLE, mtCODE_DOUBLE:
begin
if mt = mtCODE_DOUBLE then
a := position + 2
else
a := position + 1;
b := findToken(s, a, mt);
if (b > 0) then
begin
if mt = mtCODE_DOUBLE then
position := b + 1
else
position := b + 0;
while (a < b) and (s[1 + a] = ' ') do
inc(a);
if (a < b) then
begin
while (s[1 + b - 1] = ' ') do
dec(b);
end;
FConfig.decorator.openCodeSpan(out_);
TUtils.appendCode(out_, s, a, b);
FConfig.decorator.closeCodeSpan(out_);
end
else
out_.append(s[1 + position]);
end;
mtHTML:
begin
temp.Clear;
b := checkHTML(temp, s, position);
if (b > 0) then
begin
out_.append(temp);
position := b;
end
else
out_.append('&lt;');
end;
mtENTITY:
begin
temp.Clear;
b := checkEntity(temp, s, position);
if (b > 0) then
begin
out_.append(temp);
position := b;
end
else
out_.append('&amp;');
end;
mtX_LINK_OPEN:
begin
temp.Clear;
b := recursiveEmitLine(temp, s, position + 2, mtX_LINK_CLOSE);
if (b > 0) and (FConfig.specialLinkEmitter <> nil) then
begin
FConfig.specialLinkEmitter.emitSpan(out_, temp.ToString());
position := b + 1;
end
else
out_.append(s[1 + position]);
end;
mtX_COPY:
begin
out_.append('&copy;');
inc(position, 2);
end;
mtX_REG:
begin
out_.append('&reg;');
inc(position, 2);
end;
mtX_TRADE:
begin
out_.append('&trade;');
inc(position, 3);
end;
mtX_NDASH:
begin
out_.append('&ndash;');
inc(position);
end;
mtX_MDASH:
begin
out_.append('&mdash;');
inc(position, 2);
end;
mtX_HELLIP:
begin
out_.append('&hellip;');
inc(position, 2);
end;
mtX_LAQUO:
begin
out_.append('&laquo;');
inc(position);
end;
mtX_RAQUO:
begin
out_.append('&raquo;');
inc(position);
end;
mtX_RDQUO:
out_.append('&rdquo;');
mtX_LDQUO:
out_.append('&ldquo;');
mtESCAPE:
begin
inc(position);
out_.append(s[1 + position]);
end;
// $FALL-THROUGH$
else
out_.append(s[1 + position]);
end;
inc(position);
end;
result := -1;
finally
temp.Free;
end;
end;
 
class function TEmitter.whitespaceToSpace(c: char): char;
begin
if isWhitespace(c) then
result := ' '
else
result := c;
end;
 
function TEmitter.getToken(s: String; position: integer): TMarkToken;
var
c0, c, c1, c2, c3: char;
begin
 
result := mtNONE;
if (position > 0) then
c0 := whitespaceToSpace(s[1 + position - 1])
else
c0 := ' ';
c := whitespaceToSpace(s[1 + position]);
if (position + 1 < Length(s)) then
c1 := whitespaceToSpace(s[1 + position + 1])
else
c1 := ' ';
if (position + 2 < Length(s)) then
c2 := whitespaceToSpace(s[1 + position + 2])
else
c2 := ' ';
if (position + 3 < Length(s)) then
c3 := whitespaceToSpace(s[1 + position + 3])
else
c3 := ' ';
 
case (c) of
'*':
if (c1 = '*') then
begin
if (c0 <> ' ') or (c2 <> ' ') then
exit(mtSTRONG_STAR)
else
exit(mtEM_STAR);
end
else if (c0 <> ' ') or (c1 <> ' ') then
exit(mtEM_STAR)
else
exit(mtNONE);
'_':
if (c1 = '_') then
begin
if (c0 <> ' ') or (c2 <> ' ') then
exit(mtSTRONG_UNDERSCORE)
else
exit(mtEM_UNDERSCORE);
end
else if (FuseExtensions) then
begin
if (isLetterOrDigit(c0)) and (c0 <> '_') and (isLetterOrDigit(c1)) then
exit(mtNONE)
else
exit(mtEM_UNDERSCORE);
end
else if (c0 <> ' ') or (c1 <> ' ') then
exit(mtEM_UNDERSCORE)
else
exit(mtNONE);
'!':
if (c1 = '[') then
exit(mtIMAGE)
else
exit(mtNONE);
'[':
if (FuseExtensions) and (c1 = '[') then
exit(mtX_LINK_OPEN)
else
exit(mtLINK);
']':
if (FuseExtensions) and (c1 = ']') then
exit(mtX_LINK_CLOSE)
else
exit(mtNONE);
'`':
if (c1 = '`') then
exit(mtCODE_DOUBLE)
else
exit(mtCODE_SINGLE);
'\':
if CharInSet(c1, ['\', '[', ']', '(', ')', '{', '}', '#', '"', '''', '.', '>', '<', '*', '+', '-', '_', '!', '`', '~', '^']) then
exit(mtESCAPE)
else
exit(mtNONE);
'<':
if (FuseExtensions) and (c1 = '<') then
exit(mtX_LAQUO)
else
exit(mtHTML);
'&':
exit(mtENTITY);
else
if (FuseExtensions) then
case (c) of
'-':
if (c1 = '-') and (c2 = '-') then
exit(mtX_MDASH)
else
exit(mtX_NDASH);
'^':
if (c0 = '^') or (c1 = '^') then
exit(mtNONE)
else
exit(mtSUPER);
'>':
if (c1 = '>') then
exit(mtX_RAQUO);
'.':
if (c1 = '.') and (c2 = '.') then
exit(mtX_HELLIP);
'(':
begin
if (c1 = 'C') and (c2 = ')') then
exit(mtX_COPY);
if (c1 = 'R') and (c2 = ')') then
exit(mtX_REG);
if (c1 = 'T') and (c2 = 'M') and (c3 = ')') then
exit(mtX_TRADE);
end;
'"':
begin
if (not isLetterOrDigit(c0)) and (c1 <> ' ') then
exit(mtX_LDQUO);
if (c0 <> ' ') and (not isLetterOrDigit(c1)) then
exit(mtX_RDQUO);
exit(mtNONE);
end;
end;
end;
end;
 
procedure TEmitter.emitMarkedLines(out_: TStringBuilder; lines: TLine);
var
s: TStringBuilder;
line: TLine;
begin
s := TStringBuilder.Create();
try
line := lines;
while (line <> nil) do
begin
if (not line.isEmpty) then
begin
// s.append(line.value.substring(line.leading, line.value.length - line.trailing)); PSTfix
s.Append( Copy(line.value, line.leading + 1, Length(line.value) - line.trailing));
if (line.trailing >= 2) then
s.append('<br />');
end;
if (line.next <> nil) then
s.append(#10);
line := line.next;
end;
recursiveEmitLine(out_, s.ToString(), 0, mtNONE);
finally
s.Free;
end;
end;
 
procedure TEmitter.emitRawLines(out_: TStringBuilder; lines: TLine);
var
s: String;
line: TLine;
temp: TStringBuilder;
position, t: integer;
begin
line := lines;
if (FConfig.safeMode) then
begin
temp := TStringBuilder.Create();
try
while (line <> nil) do
begin
if (not line.isEmpty) then
temp.append(line.value);
temp.append(#10);
line := line.next;
end;
s := temp.ToString();
position := 0;
while position < length(s) do
begin
if (s[1 + position] = '<') then
begin
temp.Clear;
t := TUtils.readXML(temp, s, position, FConfig.safeMode);
if (t <> -1) then
begin
out_.append(temp);
position := t;
end
else
out_.append(s[1 + position]);
end
else
out_.append(s[1 + position]);
inc(position);
end
finally
temp.Free;
end;
end
else
begin
while (line <> nil) do
begin
if (not line.isEmpty) then
out_.append(line.value);
out_.append(#10);
line := line.next;
end;
end;
end;
 
procedure TEmitter.emitCodeLines(out_: TStringBuilder; lines: TLine; meta: String; removeIndent: boolean);
var
line: TLine;
list: TStringList;
i, sp: integer;
c: char;
begin
line := lines;
if (FConfig.codeBlockEmitter <> nil) then
begin
list := TStringList.Create;
try
while (line <> nil) do
begin
if (line.isEmpty) then
list.add('')
else if removeIndent then
// list.add(line.value.substring(4)) P{STfix
list.Add( Copy(line.value, 5))
else
list.add(line.value);
line := line.next;
end;
FConfig.codeBlockEmitter.emitBlock(out_, list, meta);
finally
list.Free
end
end
else
begin
while (line <> nil) do
begin
if (not line.isEmpty) then
begin
if removeIndent then
sp := 4
else
sp := 0;
for i := sp to Length(line.value) - 1 do
begin
c := line.value[1 + i];
case c of
'&':
out_.append('&amp;');
'<':
out_.append('&lt;');
'>':
out_.append('&gt;');
else
out_.append(c);
end;
end;
end;
out_.append(#10);
line := line.next;
end;
end;
end;
 
{ TReader }
 
constructor TReader.Create(source: String);
begin
inherited Create;
FValue := source;
FCursor := 0;
end;
 
function TReader.read: char;
begin
inc(FCursor);
if FCursor > Length(FValue) then
result := #0
else
result := FValue[FCursor];
end;
 
{ TUtils }
 
class function TUtils.skipSpaces(s: String; start: integer): integer;
var
position: integer;
begin
position := start;
while (position < Length(s)) and ((s[1 + position] = ' ') or (s[1 + position] = #10)) do
inc(position);
if position < Length(s) then
result := position
else
result := -1;
end;
 
class function TUtils.escape(out_: TStringBuilder; ch: char; position: integer): integer;
begin
if CharInSet(ch, ['\', '[', ']', '(', ')', '{', '}', '#', '"', '''', '.', '>', '<', '*', '+', '-', '_', '!', '`', '^']) then
begin
out_.append(ch);
result := position + 1;
end
else
begin
out_.append('\');
result := position;
end;
end;
 
class function TUtils.readUntil(out_: TStringBuilder; s: String; start: integer; cend: TSysCharSet): integer;
var
position: integer;
ch: char;
begin
position := start;
while (position < Length(s)) do
begin
ch := s[1 + position];
if (ch = '\') and (position + 1 < Length(s)) then
position := escape(out_, s[1 + position + 1], position)
else
begin
if CharInSet(ch, cend) then
break
else
out_.append(ch);
end;
inc(position);
end;
if position = Length(s) then
result := -1
else
result := position;
end;
 
class function TUtils.readUntil(out_: TStringBuilder; s: String; start: integer; cend: char): integer;
var
position: integer;
ch: char;
begin
position := start;
while (position < Length(s)) do
begin
ch := s[1 + position];
if (ch = '\') and (position + 1 < Length(s)) then
position := escape(out_, s[1 + position + 1], position)
else
begin
if (ch = cend) then
break;
out_.append(ch);
end;
inc(position);
end;
if position = Length(s) then
result := -1
else
result := position;
end;
 
class function TUtils.readMdLink(out_: TStringBuilder; s: String; start: integer): integer;
var
position, counter: integer;
ch: char;
endReached: boolean;
begin
position := start;
counter := 1;
while (position < Length(s)) do
begin
ch := s[1 + position];
if (ch = '\') and (position + 1 < Length(s)) then
position := escape(out_, s[1 + position + 1], position)
else
begin
endReached := false;
case ch of
'(':
inc(counter);
' ':
if (counter = 1) then
endReached := true;
')':
begin
dec(counter);
if (counter = 0) then
endReached := true;
end;
end;
if (endReached) then
break;
out_.append(ch);
end;
inc(position);
end;
if position = Length(s) then
result := -1
else
result := position;
end;
 
class function TUtils.readMdLinkId(out_: TStringBuilder; s: String; start: integer): integer;
var
position, counter: integer;
ch: char;
endReached: boolean;
begin
position := start;
counter := 1;
while (position < Length(s)) do
begin
ch := s[1 + position];
endReached := false;
case ch of
#10:
out_.append(' ');
'[':
begin
inc(counter);
out_.append(ch);
end;
']':
begin
dec(counter);
if (counter = 0) then
endReached := true
else
out_.append(ch);
end;
else
out_.append(ch);
end;
if (endReached) then
break;
inc(position);
end;
if position = Length(s) then
result := -1
else
result := position;
end;
 
class function TUtils.readRawUntil(out_: TStringBuilder; s: String; start: integer; cend: TSysCharSet): integer;
var
position: integer;
ch: char;
begin
position := start;
while (position < Length(s)) do
begin
ch := s[1 + position];
if CharInSet(ch, cend) then
break;
out_.append(ch);
inc(position);
end;
if position = Length(s) then
result := -1
else
result := position;
end;
 
class function TUtils.readRawUntil(out_: TStringBuilder; s: String; start: integer; cend: char): integer;
var
position: integer;
ch: char;
begin
position := start;
while (position < Length(s)) do
begin
ch := s[1 + position];
if (ch = cend) then
break;
out_.append(ch);
inc(position);
end;
if position = Length(s) then
result := -1
else
result := position;
end;
 
class function TUtils.readXMLUntil(out_: TStringBuilder; s: String; start: integer; cend: TSysCharSet): integer;
var
position : integer;
ch, stringChar: char;
inString: boolean;
begin
position := start;
inString := false;
stringChar := #0;
while (position < Length(s)) do
begin
ch := s[1 + position];
if (inString) then
begin
if (ch = '\') then
begin
out_.append(ch);
inc(position);
if (position < Length(s)) then
begin
out_.append(ch);
inc(position);
end;
continue;
end;
if (ch = stringChar) then
begin
inString := false;
out_.append(ch);
inc(position);
continue;
end;
end;
if CharInSet(ch, ['"', '''']) then
begin
inString := true;
stringChar := ch;
end;
if (not inString) then
begin
if CharInSet(ch, cend) then
break;
end;
out_.append(ch);
inc(position);
end;
if position = Length(s) then
result := -1
else
result := position;
end;
 
class procedure TUtils.appendCode(out_: TStringBuilder; s: String; start: integer; e: integer);
var
i: integer;
c: char;
begin
for i := start to e - 1 do
begin
c := s[1 + i];
case c of
'&':
out_.append('&amp;');
'<':
out_.append('&lt;');
'>':
out_.append('&gt;');
else
out_.append(c);
end;
end;
end;
 
class procedure TUtils.appendValue(out_: TStringBuilder; s: String; start: integer; e: integer);
var
i: integer;
c: char;
begin
for i := start to e - 1 do
begin
c := s[1 + i];
case c of
'&':
out_.append('&amp;');
'<':
out_.append('&lt;');
'>':
out_.append('&gt;');
'"':
out_.append('&quot;');
'''':
out_.append('&apos;');
else
out_.append(c);
end;
end;
end;
 
class procedure TUtils.appendDecEntity(out_: TStringBuilder; value: char);
begin
out_.append('&#');
out_.append(IntToStr(ord(value)));
out_.append(';');
end;
 
class procedure TUtils.appendHexEntity(out_: TStringBuilder; value: char);
begin
out_.append('&#');
out_.append(IntToHex(ord(value), 2));
out_.append(';');
end;
 
class procedure TUtils.appendMailto(out_: TStringBuilder; s: String; start: integer; e: integer);
var
i: integer;
c: char;
begin
for i := start to e - 1 do
begin
c := s[1 + i];
if CharInSet(c, ['&', '<', '>', '"', '''']) then
appendHexEntity(out_, c)
else
out_.append(c);
end;
end;
 
class procedure TUtils.getXMLTag(out_: TStringBuilder; bin: TStringBuilder);
var
position: integer;
begin
position := 1;
if (bin[1] = '/') then
inc(position);
while (isLetterOrDigit(bin[position])) do
begin
out_.append(bin[position]);
inc(position)
end;
end;
 
class procedure TUtils.getXMLTag(out_: TStringBuilder; s: String);
var
position: integer;
begin
if (1 + 1 > s.length) then
exit;
 
position := 1;
if (s[1 + 1] = '/') then
inc(position);
while (isLetterOrDigit(s[1 + position])) do
begin
out_.append(s[1 + position]);
inc(position)
end;
end;
 
class function TUtils.readXML(out_: TStringBuilder; s: String; start: integer; safeMode: boolean): integer;
var
position: integer;
isCloseTag: boolean;
temp: TStringBuilder;
tag: String;
begin
if (1 + start + 1) > s.length then
exit(start);
 
if (s[1 + start + 1] = '/') then
begin
isCloseTag := true;
position := start + 2;
end
else if (s[1 + start + 1] = '!') then
begin
out_.append('<!');
exit(start + 1);
end
else
begin
isCloseTag := false;
position := start + 1;
end;
 
if (safeMode) then
begin
temp := TStringBuilder.Create();
try
position := readXMLUntil(temp, s, position, [' ', '/', '>']);
if (position = -1) then
exit(-1);
// tag := temp.ToString().trim().ToLower; PSTFix
tag := LowerCase( Trim( temp.ToString));
if (THTML.isUnsafeHtmlElement(tag)) then
out_.append('&lt;')
else
out_.append('<');
if (isCloseTag) then
out_.append('/');
out_.append(temp);
finally
temp.Free;
end;
end
else
begin
out_.append('<');
if (isCloseTag) then
out_.append('/');
position := readXMLUntil(out_, s, position, [' ', '/', '>']);
end;
if (position = -1) then
exit(-1);
position := readXMLUntil(out_, s, position, ['/', '>']);
if (position = -1) then
exit(-1);
 
if (s[1 + position] = '/') then
begin
out_.append(' /');
position := readXMLUntil(out_, s, position + 1, ['>']);
if (position = -1) then
exit(-1);
end;
 
if (s[1 + position] = '>') then
begin
out_.append('>');
exit(position);
end;
result := -1;
end;
 
class procedure TUtils.codeEncode(out_: TStringBuilder; value: String; offset: integer);
var
i: integer;
c: char;
begin
for i := offset to Length(value) - 1 do
begin
c := value[1 + i];
case c of
'&':
out_.append('&amp;');
'<':
out_.append('&lt;');
'>':
out_.append('&gt;');
else
out_.append(c);
end;
end;
end;
 
class function TUtils.getMetaFromFence(fenceLine: String): String;
var
i: integer;
c: char;
begin
for i := 0 to Length(fenceLine) - 1 do
begin
c := fenceLine[1 + i];
if (not isWhitespace(c)) and (c <> '`') and (c <> '~') then
// exit(fenceLine.substring(i).trim()); PSTfix
Exit( Trim( Copy(fenceLine, i+1)));
end;
result := '';
end;
 
{ THTML }
 
class function THTML.isHtmlBlockElement(s: String): boolean;
var
ht: THTMLElement;
begin
ht := THTMLElement(StringToEnum(TypeInfo(THTMLElement), 'he' + s, ord(heNONE)));
result := ht in BLOCK_ELEMENTS;
end;
 
class function THTML.isLinkPrefix(s: String): boolean;
begin
result := StringsContains(LINK_PREFIXES, s);
end;
 
class function THTML.isEntity(s: String): boolean;
begin
result := StringsContains(ENTITY_NAMES, s);
end;
 
class function THTML.isUnsafeHtmlElement(s: String): boolean;
var
ht: THTMLElement;
begin
ht := THTMLElement(StringToEnum(TypeInfo(THTMLElement), s, ord(heNONE)));
result := ht in UNSAFE_ELEMENTS;
end;
 
{ TLine }
 
procedure TLine.Init();
begin
FLeading := 0;
while (leading < Length(value)) and (value[1 + leading] = ' ') do
inc(FLeading);
 
if (leading = Length(value)) then
setEmpty()
else
begin
isEmpty := false;
trailing := 0;
while (value[1 + Length(value) - trailing - 1] = ' ') do
inc(FTrailing);
end;
end;
 
procedure TLine.InitLeading();
begin
FLeading := 0;
while (leading < Length(value)) and (value[1 + leading] = ' ') do
inc(FLeading);
if (leading = Length(value)) then
setEmpty();
end;
 
// TODO use Util#skipSpaces
function TLine.skipSpaces(): boolean;
begin
while (position < Length(value)) and (value[1 + position] = ' ') do
inc(FPosition);
result := position < Length(value);
end;
 
// TODO use Util#readUntil
function TLine.readUntil(chend: TSysCharSet): String;
var
sb: TStringBuilder;
pos: integer;
ch, c: char;
begin
sb := TStringBuilder.Create();
try
pos := self.position;
while (pos < Length(value)) do
begin
ch := value[1 + pos];
if (ch = '\') and (pos + 1 < Length(value)) then
begin
c := value[1 + pos + 1];
if CharInSet(c, ['\', '[', ']', '(', ')', '{', '}', '#', '"', '''', '.', '>', '*', '+', '-', '_', '!', '`', '~']) then
begin
sb.append(c);
inc(pos);
end
else
begin
sb.append(ch);
break;
end;
end
else if CharInSet(ch, chend) then
break
else
sb.append(ch);
inc(pos);
end;
 
if (pos < Length(value)) then
ch := value[1 + pos]
else
ch := #10;
if CharInSet(ch, chend) then
begin
self.position := pos;
result := sb.ToString();
end
else
result := '';
finally
sb.Free;
end;
end;
 
procedure TLine.setEmpty();
begin
value := '';
leading := 0;
trailing := 0;
isEmpty := true;
if (previous <> nil) then
previous.nextEmpty := true;
if (next <> nil) then
next.prevEmpty := true;
end;
 
function TLine.countChars(ch: char): integer;
var
count, i: integer;
c: char;
begin
count := 0;
for i := 0 to Length(value) - 1 do
begin
c := value[1 + i];
if (c = ' ') then
continue;
if (c = ch) then
begin
inc(count);
continue;
end;
count := 0;
break;
end;
result := count;
end;
 
function TLine.countCharsStart(ch: char; allowSpaces: boolean): integer;
var
count, i: integer;
c: char;
begin
count := 0;
for i := 0 to Length(value) - 1 do
begin
c := value[1 + i];
if (c = ' ') and (allowSpaces) then
begin
continue;
end;
if (c = ch) then
inc(count)
else
break;
end;
result := count;
end;
 
function TLine.getLineType(configuration: TConfiguration): TLineType;
var
i: integer;
begin
if (isEmpty) then
exit(ltEMPTY);
 
if (leading > 3) then
exit(ltCODE);
 
if (value[1 + leading] = '#') then
exit(ltHEADLINE);
 
if (value[1 + leading] = '>') then
exit(ltBQUOTE);
 
if (configuration.forceExtendedProfile) then
begin
if (Length(value) - leading - trailing > 2) then
begin
if (value[1 + leading] = '`') and (countCharsStart('`', configuration.allowSpacesInFencedDelimiters) >= 3) then
exit(ltFENCED_CODE);
if (value[1 + leading] = '~') and (countCharsStart('~', configuration.allowSpacesInFencedDelimiters) >= 3) then
exit(ltFENCED_CODE);
end;
end;
 
if (Length(value) - leading - trailing > 2) and ((value[1 + leading] = '*') or (value[1 + leading] = '-') or (value[1 + leading] = '_')) then
begin
if (countChars(value[1 + leading]) >= 3) then
exit(ltHR);
end;
 
if (Length(value) - leading >= 2) and (value[1 + leading + 1] = ' ') then
begin
if CharInSet(value[1 + leading], ['*', '-', '+']) then
exit(ltULIST);
end;
 
if (Length(value) - leading >= 3) and (isDigit(value[1 + leading])) then
begin
i := leading + 1;
while (i < Length(value)) and (isDigit(value[1 + i])) do
inc(i);
if (i + 1 < Length(value)) and (value[1 + i] = '.') and (value[1 + i + 1] = ' ') then
exit(ltOLIST);
end;
 
if (value[1 + leading] = '<') then
begin
if (checkHTML()) then
exit(ltXML);
end;
 
if (next <> nil) and (not next.isEmpty) then
begin
if ((next.value[1 + 0] = '-')) and ((next.countChars('-') > 0)) then
exit(ltHEADLINE2);
if ((next.value[1 + 0] = '=')) and ((next.countChars('=') > 0)) then
exit(ltHEADLINE1);
end;
 
exit(ltOTHER);
end;
 
function TLine.readXMLComment(firstLine: TLine; start: integer): integer;
var
line: TLine;
pos: integer;
begin
line := firstLine;
if (start + 3 < Length(line.value)) then
begin
if (line.value[1 + 2] = '-') and (line.value[1 + 3] = '-') then
begin
pos := start + 4;
while (line <> nil) do
begin
while (pos < Length(line.value)) and (line.value[1 + pos] <> '-') do
inc(pos);
if (pos = Length(line.value)) then
begin
line := line.next;
pos := 0;
end
else
begin
if (pos + 2 < Length(line.value)) then
begin
if (line.value[1 + pos + 1] = '-') and (line.value[1 + pos + 2] = '>') then
begin
xmlEndLine := line;
exit(pos + 3);
end;
end;
inc(pos);
end;
end;
end;
end;
exit(-1);
end;
 
// FIXME ... hack
function TLine.stripID(): String;
var
p, start: integer;
found: boolean;
id: String;
begin
if (isEmpty or (value[1 + Length(value) - trailing - 1] <> '}')) then
exit('');
 
p := leading;
found := false;
while (p < Length(value)) and (not found) do
begin
case value[1 + p] of
'\':
begin
if (p + 1 < Length(value)) then
begin
if (value[1 + p + 1]) = '{' then
begin
inc(p);
break;
end;
end;
inc(p);
break;
end;
'{':
begin
found := true;
break;
end
else
begin
inc(p);
break;
end;
end;
end;
 
if (found) then
begin
if (p + 1 < Length(value)) and (value[1 + p + 1] = '#') then
begin
start := p + 2;
p := start;
found := false;
while (p < Length(value)) and (not found) do
begin
case (value[1 + p]) of
'\':
begin
if (p + 1 < Length(value)) then
begin
if (value[1 + p + 1]) = '}' then
inc(p);
end;
inc(p);
end;
'}':
begin
found := true;
end;
else
begin
inc(p);
end;
end;
 
if (found) then
begin
// id := value.substring(start, p).trim(); PSTfix
id := Trim( Copy(value, start + 1, p));
if (leading <> 0) then
begin
// value := value.substring(0, leading) + value.substring(leading, start - 2).trim(); PSTfix
value := Copy(value, 1, leading) + Trim( Copy( value, leading + 1, start -2));
end
else
begin
// value := value.substring(leading, start - 2).trim(); PSTFix
value := Trim( Copy(value, leading +1, start -2));
end;
trailing := 0;
if (Length(id) > 0) then
exit(id)
else
exit('');
end;
end;
end;
end;
exit('');
end;
 
function TLine.checkHTML: boolean;
var
tags: TStringList;
temp: TStringBuilder;
element, tag: String;
line: TLine;
newPos: integer;
begin
result := false;
tags := TStringList.Create();
temp := TStringBuilder.Create();
try
position := leading;
if (value.length >= 1 + leading + 1) and (value[1 + leading + 1] = '!') then
begin
if (readXMLComment(self, leading) > 0) then
begin
exit(true);
end;
end;
position := TUtils.readXML(temp, value, leading, false);
if (position > -1) then
begin
element := temp.ToString();
temp.Clear;
TUtils.getXMLTag(temp, element);
tag := LowerCase(temp.ToString());
if (not THTML.isHtmlBlockElement(tag)) then
exit(false);
// if (tag.equals('hr') or element.endsWith('/>')) then PSTFix
if (tag = 'hr') or AnsiEndsText('/>', element) then
 
begin
xmlEndLine := self;
exit(true);
end;
tags.add(tag);
 
line := self;
while (line <> nil) do
begin
while (position < Length(line.value)) and ((line.value[1 + position] <> '<') or (position = Length(line.value)-1)) do
inc(FPosition);
if (position >= Length(line.value)) then
begin
line := line.next;
position := 0;
end
else
begin
temp.Clear;
newPos := TUtils.readXML(temp, line.value, position, false);
if (newPos > 0) then
begin
element := temp.ToString();
temp.Clear;
TUtils.getXMLTag(temp, element);
tag := LowerCase(temp.ToString());
if (THTML.isHtmlBlockElement(tag)) and (tag <> 'hr') and (not AnsiEndsText('/>', element)) then
begin
if (element[1 + 1] = '/') then
begin
if (tags[tags.Count - 1] <> tag) then
exit(false);
tags.Delete(tags.count - 1);
end
else
tags.add(tag);
end;
if (tags.count = 0) then
begin
xmlEndLine := line;
break;
end;
position := newPos;
end
else
begin
inc(FPosition);
end;
end;
end;
result := tags.count = 0;
end;
finally
temp.Free;
tags.Free;
end;
end;
 
{ TLinkRef }
 
constructor TLinkRef.Create(link, title: String; isAbbrev: boolean);
begin
inherited Create;
FLink := link;
FTitle := title;
FIsAbbrev := isAbbrev;
end;
 
{ TBlock }
 
constructor TBlock.Create;
begin
inherited;
end;
 
destructor TBlock.Destroy;
begin
FLines.Free;
FBlocks.Free;
FNext.free;
inherited;
end;
 
procedure TBlock.AppendLine(line: TLine);
begin
if (self.lineTail = nil) then
begin
self.FLines := line;
self.FLineTail := line;
end
else
begin
self.lineTail.nextEmpty := line.isEmpty;
line.prevEmpty := self.lineTail.isEmpty;
line.previous := self.lineTail;
self.lineTail.next := line;
self.FLineTail := line;
end;
 
end;
 
procedure TBlock.expandListParagraphs;
var
outer: TBlock;
inner: TBlock;
hasParagraph: boolean;
begin
if (self.type_ <> btORDERED_LIST) and (self.type_ <> btUNORDERED_LIST) then
exit;
 
outer := self.blocks;
hasParagraph := false;
while (outer <> nil) and (not hasParagraph) do
begin
if (outer.type_ = btLIST_ITEM) then
begin
inner := outer.blocks;
while (inner <> nil) and (not hasParagraph) do
begin
if (inner.type_ = btPARAGRAPH) then
begin
hasParagraph := true;
end;
inner := inner.next;
end;
end;
outer := outer.next;
end;
 
if (hasParagraph) then
begin
outer := self.blocks;
while (outer <> nil) do
begin
if (outer.type_ = btLIST_ITEM) then
begin
inner := outer.blocks;
while (inner <> nil) do
begin
if (inner.type_ = btNONE) then
begin
inner.type_ := btPARAGRAPH;
end;
inner := inner.next;
end;
end;
outer := outer.next;
end;
end;
end;
 
function TBlock.hasLines: boolean;
begin
result := lines <> nil;
end;
 
procedure TBlock.removeLine(line: TLine);
begin
if (line.previous = nil) then
begin
self.FLines := line.next;
end
else
begin
line.previous.next := line.next;
end;
 
if (line.next = nil) then
begin
self.FLineTail := line.previous;
end
else
begin
line.next.previous := line.previous;
end;
line.previous := nil;
 
line.next := nil;
line.free;
end;
 
procedure TBlock.removeBlockQuotePrefix;
var
line: TLine;
rem: integer;
begin
line := self.lines;
while (line <> nil) do
begin
if (not line.isEmpty) then
begin
if (line.value[1 + line.leading] = '>') then
begin
rem := line.leading + 1;
if (line.leading + 1 < Length(line.value)) and (line.value[1 + line.leading + 1] = ' ') then
begin
inc(rem);
end;
line.value := Copy(line.value, rem+1);
line.InitLeading();
end;
end;
line := line.next;
end;
end;
 
function TBlock.removeLeadingEmptyLines: boolean;
var
wasEmpty: boolean;
line: TLine;
begin
wasEmpty := false;
line := self.lines;
while (line <> nil) and (line.isEmpty) do
begin
self.removeLine(line);
line := self.lines;
wasEmpty := true;
end;
result := wasEmpty;
 
end;
 
procedure TBlock.removeTrailingEmptyLines;
var
line: TLine;
begin
line := self.lineTail;
while (line <> nil) and (line.isEmpty) do
begin
self.removeLine(line);
line := self.lineTail;
end;
end;
 
procedure TBlock.removeListIndent(config: TConfiguration);
var
line: TLine;
begin
line := self.lines;
while (line <> nil) do
begin
if (not line.isEmpty) then
begin
case (line.getLineType(config)) of
ltULIST:
// line.value := line.value.substring(line.leading + 2); PSTfix
line.value := Copy(line.value, line.leading +3);
ltOLIST:
// line.value := line.value.substring(line.value.indexOf('.') + 2); pstfix
line.value := Copy(line.value, pos('.', line.value) + 2);
else
// line.value := line.value.substring(Math.min(line.leading, 4)); pstfix
line.value := Copy(line.value, Math.Min(line.leading + 1, 5));
end;
line.InitLeading();
end;
line := line.next;
end;
 
end;
 
procedure TBlock.removeSurroundingEmptyLines;
begin
if (self.lines <> nil) then
begin
self.removeTrailingEmptyLines();
self.removeLeadingEmptyLines();
end;
 
end;
 
function TBlock.split(line: TLine): TBlock;
var
block: TBlock;
begin
block := TBlock.Create();
block.FLines := self.lines;
block.FLineTail := line;
self.FLines := line.next;
line.next := nil;
if (self.lines = nil) then
begin
self.FLineTail := nil;
end
else
begin
self.lines.previous := nil;
end;
 
if (self.blocks = nil) then
begin
self.FBlocks := block;
self.FBlockTail := block;
end
else
begin
self.blockTail.next := block;
self.FBlockTail := block;
end;
result := block;
end;
 
procedure TBlock.transfromHeadline;
var
level, start, end_: integer;
line: TLine;
begin
if (self.hlDepth > 0) then
begin
exit;
end;
level := 0;
line := self.lines;
if (line.isEmpty) then
begin
exit;
end;
start := line.leading;
while (start < Length(line.value)) and (line.value[1 + start] = '#') do
begin
inc(level);
inc(start);
end;
while (start < Length(line.value)) and (line.value[1 + start] = ' ') do
begin
inc(start);
end;
if (start >= Length(line.value)) then
begin
line.setEmpty();
end
else
begin
end_ := Length(line.value) - line.trailing - 1;
while (line.value[1 + end_] = '#') do
begin
dec(end_);
end;
while (line.value[1 + end_] = ' ') do
begin
dec(end_);
end;
line.value := Copy(line.value, start+1, end_-start+1);
line.leading := 0;
line.trailing := 0;
end;
self.hlDepth := Math.min(level, 6);
 
end;
 
{$IFDEF FPC}
{ TStringBuilder }
 
constructor TStringBuilder.Create;
begin
Inherited;
FBufferSize := BUFFER_INCREMENT_SIZE;
end;
 
procedure TStringBuilder.Append(value: TStringBuilder);
begin
append(value.ToString);
end;
 
procedure TStringBuilder.Append(value: integer);
begin
append(inttostr(value));
end;
 
procedure TStringBuilder.Append(value: String);
begin
If (value <> '') Then
Begin
If FLength + System.Length(value) > System.Length(FContent) Then
SetLength(FContent, System.Length(FContent) + Math.Max(FBufferSize, System.Length(value)));
 
Move(value[1], FContent[FLength + 1], System.Length(value) * SizeOf(Char));
 
Inc(FLength, System.Length(value));
End;
end;
 
procedure TStringBuilder.Clear;
begin
FContent := '';
FLength := 0;
end;
 
function TStringBuilder.GetChar(index: integer): char;
begin
if (index < 0) or (index >= Length) then
raise EMarkdownProcessor.Create('Out of bounds');
result := FContent[index+1];
end;
 
 
function TStringBuilder.toString: String;
begin
Result := Copy(FContent, 1, FLength);
end;
 
{$ENDIF}
 
end.
/VCL_MARKDOWN/MarkdownHTMLEntities.pas
0,0 → 1,2180
unit MarkdownHTMLEntities;
 
// from https://html.spec.whatwg.org/entities.json
 
{
Copyright (c) 2011+, Health Intersections Pty Ltd (http://www.healthintersections.com.au)
All rights reserved.
 
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of HL7 nor the names of its contributors may be used to
endorse or promote products derived from this software without specific
prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
}
{$IFDEF FPC}
{$WARN 4108 off : Unicode constant cast with potential data loss}
{$ENDIF}
 
interface
 
{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
 
uses
SysUtils, Generics.Collections;
 
procedure registerEntities(dict : TDictionary<String,String>);
 
implementation
 
procedure registerEntities(dict : TDictionary<String,String>);
procedure add(name, value : {$IFDEF FPC}UTF8String{$ELSE}String{$ENDIF});
begin
dict.add(name, value);
end;
begin
add('&AElig;', #$00C6);
add('&AMP;', #$0026);
add('&Aacute;', #$00C1);
add('&Abreve;', #$0102);
add('&Acirc;', #$00C2);
add('&Acy;', #$0410);
add('&Afr;', #$D835#$DD04);
add('&Agrave;', #$00C0);
add('&Alpha;', #$0391);
add('&Amacr;', #$0100);
add('&And;', #$2A53);
add('&Aogon;', #$0104);
add('&Aopf;', #$D835#$DD38);
add('&ApplyFunction;', #$2061);
add('&Aring;', #$00C5);
add('&Ascr;', #$D835#$DC9C);
add('&Assign;', #$2254);
add('&Atilde;', #$00C3);
add('&Auml;', #$00C4);
add('&Backslash;', #$2216);
add('&Barv;', #$2AE7);
add('&Barwed;', #$2306);
add('&Bcy;', #$0411);
add('&Because;', #$2235);
add('&Bernoullis;', #$212C);
add('&Beta;', #$0392);
add('&Bfr;', #$D835#$DD05);
add('&Bopf;', #$D835#$DD39);
add('&Breve;', #$02D8);
add('&Bscr;', #$212C);
add('&Bumpeq;', #$224E);
add('&CHcy;', #$0427);
add('&COPY;', #$00A9);
add('&Cacute;', #$0106);
add('&Cap;', #$22D2);
add('&CapitalDifferentialD;', #$2145);
add('&Cayleys;', #$212D);
add('&Ccaron;', #$010C);
add('&Ccedil;', #$00C7);
add('&Ccirc;', #$0108);
add('&Cconint;', #$2230);
add('&Cdot;', #$010A);
add('&Cedilla;', #$00B8);
add('&CenterDot;', #$00B7);
add('&Cfr;', #$212D);
add('&Chi;', #$03A7);
add('&CircleDot;', #$2299);
add('&CircleMinus;', #$2296);
add('&CirclePlus;', #$2295);
add('&CircleTimes;', #$2297);
add('&ClockwiseContourIntegral;', #$2232);
add('&CloseCurlyDoubleQuote;', #$201D);
add('&CloseCurlyQuote;', #$2019);
add('&Colon;', #$2237);
add('&Colone;', #$2A74);
add('&Congruent;', #$2261);
add('&Conint;', #$222F);
add('&ContourIntegral;', #$222E);
add('&Copf;', #$2102);
add('&Coproduct;', #$2210);
add('&CounterClockwiseContourIntegral;', #$2233);
add('&Cross;', #$2A2F);
add('&Cscr;', #$D835#$DC9E);
add('&Cup;', #$22D3);
add('&CupCap;', #$224D);
add('&DD;', #$2145);
add('&DDotrahd;', #$2911);
add('&DJcy;', #$0402);
add('&DScy;', #$0405);
add('&DZcy;', #$040F);
add('&Dagger;', #$2021);
add('&Darr;', #$21A1);
add('&Dashv;', #$2AE4);
add('&Dcaron;', #$010E);
add('&Dcy;', #$0414);
add('&Del;', #$2207);
add('&Delta;', #$0394);
add('&Dfr;', #$D835#$DD07);
add('&DiacriticalAcute;', #$00B4);
add('&DiacriticalDot;', #$02D9);
add('&DiacriticalDoubleAcute;', #$02DD);
add('&DiacriticalGrave;', #$0060);
add('&DiacriticalTilde;', #$02DC);
add('&Diamond;', #$22C4);
add('&DifferentialD;', #$2146);
add('&Dopf;', #$D835#$DD3B);
add('&Dot;', #$00A8);
add('&DotDot;', #$20DC);
add('&DotEqual;', #$2250);
add('&DoubleContourIntegral;', #$222F);
add('&DoubleDot;', #$00A8);
add('&DoubleDownArrow;', #$21D3);
add('&DoubleLeftArrow;', #$21D0);
add('&DoubleLeftRightArrow;', #$21D4);
add('&DoubleLeftTee;', #$2AE4);
add('&DoubleLongLeftArrow;', #$27F8);
add('&DoubleLongLeftRightArrow;', #$27FA);
add('&DoubleLongRightArrow;', #$27F9);
add('&DoubleRightArrow;', #$21D2);
add('&DoubleRightTee;', #$22A8);
add('&DoubleUpArrow;', #$21D1);
add('&DoubleUpDownArrow;', #$21D5);
add('&DoubleVerticalBar;', #$2225);
add('&DownArrow;', #$2193);
add('&DownArrowBar;', #$2913);
add('&DownArrowUpArrow;', #$21F5);
add('&DownBreve;', #$0311);
add('&DownLeftRightVector;', #$2950);
add('&DownLeftTeeVector;', #$295E);
add('&DownLeftVector;', #$21BD);
add('&DownLeftVectorBar;', #$2956);
add('&DownRightTeeVector;', #$295F);
add('&DownRightVector;', #$21C1);
add('&DownRightVectorBar;', #$2957);
add('&DownTee;', #$22A4);
add('&DownTeeArrow;', #$21A7);
add('&Downarrow;', #$21D3);
add('&Dscr;', #$D835#$DC9F);
add('&Dstrok;', #$0110);
add('&ENG;', #$014A);
add('&ETH;', #$00D0);
add('&Eacute;', #$00C9);
add('&Ecaron;', #$011A);
add('&Ecirc;', #$00CA);
add('&Ecy;', #$042D);
add('&Edot;', #$0116);
add('&Efr;', #$D835#$DD08);
add('&Egrave;', #$00C8);
add('&Element;', #$2208);
add('&Emacr;', #$0112);
add('&EmptySmallSquare;', #$25FB);
add('&EmptyVerySmallSquare;', #$25AB);
add('&Eogon;', #$0118);
add('&Eopf;', #$D835#$DD3C);
add('&Epsilon;', #$0395);
add('&Equal;', #$2A75);
add('&EqualTilde;', #$2242);
add('&Equilibrium;', #$21CC);
add('&Escr;', #$2130);
add('&Esim;', #$2A73);
add('&Eta;', #$0397);
add('&Euml;', #$00CB);
add('&Exists;', #$2203);
add('&ExponentialE;', #$2147);
add('&Fcy;', #$0424);
add('&Ffr;', #$D835#$DD09);
add('&FilledSmallSquare;', #$25FC);
add('&FilledVerySmallSquare;', #$25AA);
add('&Fopf;', #$D835#$DD3D);
add('&ForAll;', #$2200);
add('&Fouriertrf;', #$2131);
add('&Fscr;', #$2131);
add('&GJcy;', #$0403);
add('&GT;', #$003E);
add('&Gamma;', #$0393);
add('&Gammad;', #$03DC);
add('&Gbreve;', #$011E);
add('&Gcedil;', #$0122);
add('&Gcirc;', #$011C);
add('&Gcy;', #$0413);
add('&Gdot;', #$0120);
add('&Gfr;', #$D835#$DD0A);
add('&Gg;', #$22D9);
add('&Gopf;', #$D835#$DD3E);
add('&GreaterEqual;', #$2265);
add('&GreaterEqualLess;', #$22DB);
add('&GreaterFullEqual;', #$2267);
add('&GreaterGreater;', #$2AA2);
add('&GreaterLess;', #$2277);
add('&GreaterSlantEqual;', #$2A7E);
add('&GreaterTilde;', #$2273);
add('&Gscr;', #$D835#$DCA2);
add('&Gt;', #$226B);
add('&HARDcy;', #$042A);
add('&Hacek;', #$02C7);
add('&Hat;', #$005E);
add('&Hcirc;', #$0124);
add('&Hfr;', #$210C);
add('&HilbertSpace;', #$210B);
add('&Hopf;', #$210D);
add('&HorizontalLine;', #$2500);
add('&Hscr;', #$210B);
add('&Hstrok;', #$0126);
add('&HumpDownHump;', #$224E);
add('&HumpEqual;', #$224F);
add('&IEcy;', #$0415);
add('&IJlig;', #$0132);
add('&IOcy;', #$0401);
add('&Iacute;', #$00CD);
add('&Icirc;', #$00CE);
add('&Icy;', #$0418);
add('&Idot;', #$0130);
add('&Ifr;', #$2111);
add('&Igrave;', #$00CC);
add('&Im;', #$2111);
add('&Imacr;', #$012A);
add('&ImaginaryI;', #$2148);
add('&Implies;', #$21D2);
add('&Int;', #$222C);
add('&Integral;', #$222B);
add('&Intersection;', #$22C2);
add('&InvisibleComma;', #$2063);
add('&InvisibleTimes;', #$2062);
add('&Iogon;', #$012E);
add('&Iopf;', #$D835#$DD40);
add('&Iota;', #$0399);
add('&Iscr;', #$2110);
add('&Itilde;', #$0128);
add('&Iukcy;', #$0406);
add('&Iuml;', #$00CF);
add('&Jcirc;', #$0134);
add('&Jcy;', #$0419);
add('&Jfr;', #$D835#$DD0D);
add('&Jopf;', #$D835#$DD41);
add('&Jscr;', #$D835#$DCA5);
add('&Jsercy;', #$0408);
add('&Jukcy;', #$0404);
add('&KHcy;', #$0425);
add('&KJcy;', #$040C);
add('&Kappa;', #$039A);
add('&Kcedil;', #$0136);
add('&Kcy;', #$041A);
add('&Kfr;', #$D835#$DD0E);
add('&Kopf;', #$D835#$DD42);
add('&Kscr;', #$D835#$DCA6);
add('&LJcy;', #$0409);
add('&LT;', #$003C);
add('&Lacute;', #$0139);
add('&Lambda;', #$039B);
add('&Lang;', #$27EA);
add('&Laplacetrf;', #$2112);
add('&Larr;', #$219E);
add('&Lcaron;', #$013D);
add('&Lcedil;', #$013B);
add('&Lcy;', #$041B);
add('&LeftAngleBracket;', #$27E8);
add('&LeftArrow;', #$2190);
add('&LeftArrowBar;', #$21E4);
add('&LeftArrowRightArrow;', #$21C6);
add('&LeftCeiling;', #$2308);
add('&LeftDoubleBracket;', #$27E6);
add('&LeftDownTeeVector;', #$2961);
add('&LeftDownVector;', #$21C3);
add('&LeftDownVectorBar;', #$2959);
add('&LeftFloor;', #$230A);
add('&LeftRightArrow;', #$2194);
add('&LeftRightVector;', #$294E);
add('&LeftTee;', #$22A3);
add('&LeftTeeArrow;', #$21A4);
add('&LeftTeeVector;', #$295A);
add('&LeftTriangle;', #$22B2);
add('&LeftTriangleBar;', #$29CF);
add('&LeftTriangleEqual;', #$22B4);
add('&LeftUpDownVector;', #$2951);
add('&LeftUpTeeVector;', #$2960);
add('&LeftUpVector;', #$21BF);
add('&LeftUpVectorBar;', #$2958);
add('&LeftVector;', #$21BC);
add('&LeftVectorBar;', #$2952);
add('&Leftarrow;', #$21D0);
add('&Leftrightarrow;', #$21D4);
add('&LessEqualGreater;', #$22DA);
add('&LessFullEqual;', #$2266);
add('&LessGreater;', #$2276);
add('&LessLess;', #$2AA1);
add('&LessSlantEqual;', #$2A7D);
add('&LessTilde;', #$2272);
add('&Lfr;', #$D835#$DD0F);
add('&Ll;', #$22D8);
add('&Lleftarrow;', #$21DA);
add('&Lmidot;', #$013F);
add('&LongLeftArrow;', #$27F5);
add('&LongLeftRightArrow;', #$27F7);
add('&LongRightArrow;', #$27F6);
add('&Longleftarrow;', #$27F8);
add('&Longleftrightarrow;', #$27FA);
add('&Longrightarrow;', #$27F9);
add('&Lopf;', #$D835#$DD43);
add('&LowerLeftArrow;', #$2199);
add('&LowerRightArrow;', #$2198);
add('&Lscr;', #$2112);
add('&Lsh;', #$21B0);
add('&Lstrok;', #$0141);
add('&Lt;', #$226A);
add('&Map;', #$2905);
add('&Mcy;', #$041C);
add('&MediumSpace;', #$205F);
add('&Mellintrf;', #$2133);
add('&Mfr;', #$D835#$DD10);
add('&MinusPlus;', #$2213);
add('&Mopf;', #$D835#$DD44);
add('&Mscr;', #$2133);
add('&Mu;', #$039C);
add('&NJcy;', #$040A);
add('&Nacute;', #$0143);
add('&Ncaron;', #$0147);
add('&Ncedil;', #$0145);
add('&Ncy;', #$041D);
add('&NegativeMediumSpace;', #$200B);
add('&NegativeThickSpace;', #$200B);
add('&NegativeThinSpace;', #$200B);
add('&NegativeVeryThinSpace;', #$200B);
add('&NestedGreaterGreater;', #$226B);
add('&NestedLessLess;', #$226A);
add('&NewLine;', #$000A);
add('&Nfr;', #$D835#$DD11);
add('&NoBreak;', #$2060);
add('&NonBreakingSpace;', #$00A0);
add('&Nopf;', #$2115);
add('&Not;', #$2AEC);
add('&NotCongruent;', #$2262);
add('&NotCupCap;', #$226D);
add('&NotDoubleVerticalBar;', #$2226);
add('&NotElement;', #$2209);
add('&NotEqual;', #$2260);
add('&NotEqualTilde;', #$2242#$0338);
add('&NotExists;', #$2204);
add('&NotGreater;', #$226F);
add('&NotGreaterEqual;', #$2271);
add('&NotGreaterFullEqual;', #$2267#$033);
add('&NotGreaterGreater;', #$226B#$033);
add('&NotGreaterLess;', #$2279);
add('&NotGreaterSlantEqual;', #$2A7E#$0338);
add('&NotGreaterTilde;', #$2275);
add('&NotHumpDownHump;', #$224E#$0338);
add('&NotHumpEqual;', #$224F#$0338);
add('&NotLeftTriangle;', #$22EA);
add('&NotLeftTriangleBar;', #$29CF#$0338);
add('&NotLeftTriangleEqual;', #$22EC);
add('&NotLess;', #$226E);
add('&NotLessEqual;', #$2270);
add('&NotLessGreater;', #$2278);
add('&NotLessLess;', #$226A#$0338);
add('&NotLessSlantEqual;', #$2A7D#$0338);
add('&NotLessTilde;', #$2274);
add('&NotNestedGreaterGreater;', #$2AA2#$0338);
add('&NotNestedLessLess;', #$2AA1#$0338);
add('&NotPrecedes;', #$2280);
add('&NotPrecedesEqual;', #$2AAF#$0338);
add('&NotPrecedesSlantEqual;', #$22E0);
add('&NotReverseElement;', #$220C);
add('&NotRightTriangle;', #$22EB);
add('&NotRightTriangleBar;', #$29D0#$0338);
add('&NotRightTriangleEqual;', #$22ED);
add('&NotSquareSubset;', #$228F#$0338);
add('&NotSquareSubsetEqual;', #$22E2);
add('&NotSquareSuperset;', #$2290#$0338);
add('&NotSquareSupersetEqual;', #$22E3);
add('&NotSubset;', #$2282#$20D2);
add('&NotSubsetEqual;', #$2288);
add('&NotSucceeds;', #$2281);
add('&NotSucceedsEqual;', #$2AB0#$0338);
add('&NotSucceedsSlantEqual;', #$22E1);
add('&NotSucceedsTilde;', #$227F#$0338);
add('&NotSuperset;', #$2283#$20D2);
add('&NotSupersetEqual;', #$2289);
add('&NotTilde;', #$2241);
add('&NotTildeEqual;', #$2244);
add('&NotTildeFullEqual;', #$2247);
add('&NotTildeTilde;', #$2249);
add('&NotVerticalBar;', #$2224);
add('&Nscr;', #$D835#$DCA9);
add('&Ntilde;', #$00D1);
add('&Nu;', #$039D);
add('&OElig;', #$0152);
add('&Oacute;', #$00D3);
add('&Ocirc;', #$00D4);
add('&Ocy;', #$041E);
add('&Odblac;', #$0150);
add('&Ofr;', #$D835#$DD12);
add('&Ograve;', #$00D2);
add('&Omacr;', #$014C);
add('&Omega;', #$03A9);
add('&Omicron;', #$039F);
add('&Oopf;', #$D835#$DD46);
add('&OpenCurlyDoubleQuote;', #$201C);
add('&OpenCurlyQuote;', #$2018);
add('&Or;', #$2A54);
add('&Oscr;', #$D835#$DCAA);
add('&Oslash;', #$00D8);
add('&Otilde;', #$00D5);
add('&Otimes;', #$2A37);
add('&Ouml;', #$00D6);
add('&OverBar;', #$203E);
add('&OverBrace;', #$23DE);
add('&OverBracket;', #$23B4);
add('&OverParenthesis;', #$23DC);
add('&PartialD;', #$2202);
add('&Pcy;', #$041F);
add('&Pfr;', #$D835#$DD13);
add('&Phi;', #$03A6);
add('&Pi;', #$03A0);
add('&PlusMinus;', #$00B1);
add('&Poincareplane;', #$210C);
add('&Popf;', #$2119);
add('&Pr;', #$2ABB);
add('&Precedes;', #$227A);
add('&PrecedesEqual;', #$2AAF);
add('&PrecedesSlantEqual;', #$227C);
add('&PrecedesTilde;', #$227E);
add('&Prime;', #$2033);
add('&Product;', #$220F);
add('&Proportion;', #$2237);
add('&Proportional;', #$221D);
add('&Pscr;', #$D835#$DCAB);
add('&Psi;', #$03A8);
add('&QUOT;', #$0022);
add('&Qfr;', #$D835#$DD14);
add('&Qopf;', #$211A);
add('&Qscr;', #$D835#$DCAC);
add('&RBarr;', #$2910);
add('&REG;', #$00AE);
add('&Racute;', #$0154);
add('&Rang;', #$27EB);
add('&Rarr;', #$21A0);
add('&Rarrtl;', #$2916);
add('&Rcaron;', #$0158);
add('&Rcedil;', #$0156);
add('&Rcy;', #$0420);
add('&Re;', #$211C);
add('&ReverseElement;', #$220B);
add('&ReverseEquilibrium;', #$21CB);
add('&ReverseUpEquilibrium;', #$296F);
add('&Rfr;', #$211C);
add('&Rho;', #$03A1);
add('&RightAngleBracket;', #$27E9);
add('&RightArrow;', #$2192);
add('&RightArrowBar;', #$21E5);
add('&RightArrowLeftArrow;', #$21C4);
add('&RightCeiling;', #$2309);
add('&RightDoubleBracket;', #$27E7);
add('&RightDownTeeVector;', #$295D);
add('&RightDownVector;', #$21C2);
add('&RightDownVectorBar;', #$2955);
add('&RightFloor;', #$230B);
add('&RightTee;', #$22A2);
add('&RightTeeArrow;', #$21A6);
add('&RightTeeVector;', #$295B);
add('&RightTriangle;', #$22B3);
add('&RightTriangleBar;', #$29D0);
add('&RightTriangleEqual;', #$22B5);
add('&RightUpDownVector;', #$294F);
add('&RightUpTeeVector;', #$295C);
add('&RightUpVector;', #$21BE);
add('&RightUpVectorBar;', #$2954);
add('&RightVector;', #$21C0);
add('&RightVectorBar;', #$2953);
add('&Rightarrow;', #$21D2);
add('&Ropf;', #$211D);
add('&RoundImplies;', #$2970);
add('&Rrightarrow;', #$21DB);
add('&Rscr;', #$211B);
add('&Rsh;', #$21B1);
add('&RuleDelayed;', #$29F4);
add('&SHCHcy;', #$0429);
add('&SHcy;', #$0428);
add('&SOFTcy;', #$042C);
add('&Sacute;', #$015A);
add('&Sc;', #$2ABC);
add('&Scaron;', #$0160);
add('&Scedil;', #$015E);
add('&Scirc;', #$015C);
add('&Scy;', #$0421);
add('&Sfr;', #$D835#$DD16);
add('&ShortDownArrow;', #$2193);
add('&ShortLeftArrow;', #$2190);
add('&ShortRightArrow;', #$2192);
add('&ShortUpArrow;', #$2191);
add('&Sigma;', #$03A3);
add('&SmallCircle;', #$2218);
add('&Sopf;', #$D835#$DD4A);
add('&Sqrt;', #$221A);
add('&Square;', #$25A1);
add('&SquareIntersection;', #$2293);
add('&SquareSubset;', #$228F);
add('&SquareSubsetEqual;', #$2291);
add('&SquareSuperset;', #$2290);
add('&SquareSupersetEqual;', #$2292);
add('&SquareUnion;', #$2294);
add('&Sscr;', #$D835#$DCAE);
add('&Star;', #$22C6);
add('&Sub;', #$22D0);
add('&Subset;', #$22D0);
add('&SubsetEqual;', #$2286);
add('&Succeeds;', #$227B);
add('&SucceedsEqual;', #$2AB0);
add('&SucceedsSlantEqual;', #$227D);
add('&SucceedsTilde;', #$227F);
add('&SuchThat;', #$220B);
add('&Sum;', #$2211);
add('&Sup;', #$22D1);
add('&Superset;', #$2283);
add('&SupersetEqual;', #$2287);
add('&Supset;', #$22D1);
add('&THORN;', #$00DE);
add('&TRADE;', #$2122);
add('&TSHcy;', #$040B);
add('&TScy;', #$0426);
add('&Tab;', #$0009);
add('&Tau;', #$03A4);
add('&Tcaron;', #$0164);
add('&Tcedil;', #$0162);
add('&Tcy;', #$0422);
add('&Tfr;', #$D835#$DD17);
add('&Therefore;', #$2234);
add('&Theta;', #$0398);
add('&ThickSpace;', #$205F#$200A);
add('&ThinSpace;', #$2009);
add('&Tilde;', #$223C);
add('&TildeEqual;', #$2243);
add('&TildeFullEqual;', #$2245);
add('&TildeTilde;', #$2248);
add('&Topf;', #$D835#$DD4B);
add('&TripleDot;', #$20DB);
add('&Tscr;', #$D835#$DCAF);
add('&Tstrok;', #$0166);
add('&Uacute;', #$00DA);
add('&Uarr;', #$219F);
add('&Uarrocir;', #$2949);
add('&Ubrcy;', #$040E);
add('&Ubreve;', #$016C);
add('&Ucirc;', #$00DB);
add('&Ucy;', #$0423);
add('&Udblac;', #$0170);
add('&Ufr;', #$D835#$DD18);
add('&Ugrave;', #$00D9);
add('&Umacr;', #$016A);
add('&UnderBar;', #$005F);
add('&UnderBrace;', #$23DF);
add('&UnderBracket;', #$23B5);
add('&UnderParenthesis;', #$23DD);
add('&Union;', #$22C3);
add('&UnionPlus;', #$228E);
add('&Uogon;', #$0172);
add('&Uopf;', #$D835#$DD4C);
add('&UpArrow;', #$2191);
add('&UpArrowBar;', #$2912);
add('&UpArrowDownArrow;', #$21C5);
add('&UpDownArrow;', #$2195);
add('&UpEquilibrium;', #$296E);
add('&UpTee;', #$22A5);
add('&UpTeeArrow;', #$21A5);
add('&Uparrow;', #$21D1);
add('&Updownarrow;', #$21D5);
add('&UpperLeftArrow;', #$2196);
add('&UpperRightArrow;', #$2197);
add('&Upsi;', #$03D2);
add('&Upsilon;', #$03A5);
add('&Uring;', #$016E);
add('&Uscr;', #$D835#$DCB0);
add('&Utilde;', #$0168);
add('&Uuml;', #$00DC);
add('&VDash;', #$22AB);
add('&Vbar;', #$2AEB);
add('&Vcy;', #$0412);
add('&Vdash;', #$22A9);
add('&Vdashl;', #$2AE6);
add('&Vee;', #$22C1);
add('&Verbar;', #$2016);
add('&Vert;', #$2016);
add('&VerticalBar;', #$2223);
add('&VerticalLine;', #$007C);
add('&VerticalSeparator;', #$2758);
add('&VerticalTilde;', #$2240);
add('&VeryThinSpace;', #$200A);
add('&Vfr;', #$D835#$DD19);
add('&Vopf;', #$D835#$DD4D);
add('&Vscr;', #$D835#$DCB1);
add('&Vvdash;', #$22AA);
add('&Wcirc;', #$0174);
add('&Wedge;', #$22C0);
add('&Wfr;', #$D835#$DD1A);
add('&Wopf;', #$D835#$DD4E);
add('&Wscr;', #$D835#$DCB2);
add('&Xfr;', #$D835#$DD1B);
add('&Xi;', #$039E);
add('&Xopf;', #$D835#$DD4F);
add('&Xscr;', #$D835#$DCB3);
add('&YAcy;', #$042F);
add('&YIcy;', #$0407);
add('&YUcy;', #$042E);
add('&Yacute;', #$00DD);
add('&Ycirc;', #$0176);
add('&Ycy;', #$042B);
add('&Yfr;', #$D835#$DD1C);
add('&Yopf;', #$D835#$DD50);
add('&Yscr;', #$D835#$DCB4);
add('&Yuml;', #$0178);
add('&ZHcy;', #$0416);
add('&Zacute;', #$0179);
add('&Zcaron;', #$017D);
add('&Zcy;', #$0417);
add('&Zdot;', #$017B);
add('&ZeroWidthSpace;', #$200B);
add('&Zeta;', #$0396);
add('&Zfr;', #$2128);
add('&Zopf;', #$2124);
add('&Zscr;', #$D835#$DCB5);
add('&aacute;', #$00E1);
add('&abreve;', #$0103);
add('&ac;', #$223E);
add('&acE;', #$223E#$0333);
add('&acd;', #$223F);
add('&acirc;', #$00E2);
add('&acute;', #$00B4);
add('&acy;', #$0430);
add('&aelig;', #$00E6);
add('&af;', #$2061);
add('&afr;', #$D835#$DD1E);
add('&agrave;', #$00E0);
add('&alefsym;', #$2135);
add('&aleph;', #$2135);
add('&alpha;', #$03B1);
add('&amacr;', #$0101);
add('&amalg;', #$2A3F);
add('&amp;', #$0026);
add('&and;', #$2227);
add('&andand;', #$2A55);
add('&andd;', #$2A5C);
add('&andslope;', #$2A58);
add('&andv;', #$2A5A);
add('&ang;', #$2220);
add('&ange;', #$29A4);
add('&angle;', #$2220);
add('&angmsd;', #$2221);
add('&angmsdaa;', #$29A8);
add('&angmsdab;', #$29A9);
add('&angmsdac;', #$29AA);
add('&angmsdad;', #$29AB);
add('&angmsdae;', #$29AC);
add('&angmsdaf;', #$29AD);
add('&angmsdag;', #$29AE);
add('&angmsdah;', #$29AF);
add('&angrt;', #$221F);
add('&angrtvb;', #$22BE);
add('&angrtvbd;', #$299D);
add('&angsph;', #$2222);
add('&angst;', #$00C5);
add('&angzarr;', #$237C);
add('&aogon;', #$0105);
add('&aopf;', #$D835#$DD52);
add('&ap;', #$2248);
add('&apE;', #$2A70);
add('&apacir;', #$2A6F);
add('&ape;', #$224A);
add('&apid;', #$224B);
add('&apos;', #$0027);
add('&approx;', #$2248);
add('&approxeq;', #$224A);
add('&aring;', #$00E5);
add('&ascr;', #$D835#$DCB6);
add('&ast;', #$002A);
add('&asymp;', #$2248);
add('&asympeq;', #$224D);
add('&atilde;', #$00E3);
add('&auml;', #$00E4);
add('&awconint;', #$2233);
add('&awint;', #$2A11);
add('&bNot;', #$2AED);
add('&backcong;', #$224C);
add('&backepsilon;', #$03F6);
add('&backprime;', #$2035);
add('&backsim;', #$223D);
add('&backsimeq;', #$22CD);
add('&barvee;', #$22BD);
add('&barwed;', #$2305);
add('&barwedge;', #$2305);
add('&bbrk;', #$23B5);
add('&bbrktbrk;', #$23B6);
add('&bcong;', #$224C);
add('&bcy;', #$0431);
add('&bdquo;', #$201E);
add('&becaus;', #$2235);
add('&because;', #$2235);
add('&bemptyv;', #$29B0);
add('&bepsi;', #$03F6);
add('&bernou;', #$212C);
add('&beta;', #$03B2);
add('&beth;', #$2136);
add('&between;', #$226C);
add('&bfr;', #$D835#$DD1F);
add('&bigcap;', #$22C2);
add('&bigcirc;', #$25EF);
add('&bigcup;', #$22C3);
add('&bigodot;', #$2A00);
add('&bigoplus;', #$2A01);
add('&bigotimes;', #$2A02);
add('&bigsqcup;', #$2A06);
add('&bigstar;', #$2605);
add('&bigtriangledown;', #$25BD);
add('&bigtriangleup;', #$25B3);
add('&biguplus;', #$2A04);
add('&bigvee;', #$22C1);
add('&bigwedge;', #$22C0);
add('&bkarow;', #$290D);
add('&blacklozenge;', #$29EB);
add('&blacksquare;', #$25AA);
add('&blacktriangle;', #$25B4);
add('&blacktriangledown;', #$25BE);
add('&blacktriangleleft;', #$25C2);
add('&blacktriangleright;', #$25B8);
add('&blank;', #$2423);
add('&blk12;', #$2592);
add('&blk14;', #$2591);
add('&blk34;', #$2593);
add('&block;', #$2588);
add('&bne;', #$003D#$20E5);
add('&bnequiv;', #$2261#$20E5);
add('&bnot;', #$2310);
add('&bopf;', #$D835#$DD53);
add('&bot;', #$22A5);
add('&bottom;', #$22A5);
add('&bowtie;', #$22C8);
add('&boxDL;', #$2557);
add('&boxDR;', #$2554);
add('&boxDl;', #$2556);
add('&boxDr;', #$2553);
add('&boxH;', #$2550);
add('&boxHD;', #$2566);
add('&boxHU;', #$2569);
add('&boxHd;', #$2564);
add('&boxHu;', #$2567);
add('&boxUL;', #$255D);
add('&boxUR;', #$255A);
add('&boxUl;', #$255C);
add('&boxUr;', #$2559);
add('&boxV;', #$2551);
add('&boxVH;', #$256C);
add('&boxVL;', #$2563);
add('&boxVR;', #$2560);
add('&boxVh;', #$256B);
add('&boxVl;', #$2562);
add('&boxVr;', #$255F);
add('&boxbox;', #$29C9);
add('&boxdL;', #$2555);
add('&boxdR;', #$2552);
add('&boxdl;', #$2510);
add('&boxdr;', #$250C);
add('&boxh;', #$2500);
add('&boxhD;', #$2565);
add('&boxhU;', #$2568);
add('&boxhd;', #$252C);
add('&boxhu;', #$2534);
add('&boxminus;', #$229F);
add('&boxplus;', #$229E);
add('&boxtimes;', #$22A0);
add('&boxuL;', #$255B);
add('&boxuR;', #$2558);
add('&boxul;', #$2518);
add('&boxur;', #$2514);
add('&boxv;', #$2502);
add('&boxvH;', #$256A);
add('&boxvL;', #$2561);
add('&boxvR;', #$255E);
add('&boxvh;', #$253C);
add('&boxvl;', #$2524);
add('&boxvr;', #$251C);
add('&bprime;', #$2035);
add('&breve;', #$02D8);
add('&brvbar;', #$00A6);
add('&bscr;', #$D835#$DCB7);
add('&bsemi;', #$204F);
add('&bsim;', #$223D);
add('&bsime;', #$22CD);
add('&bsol;', #$005C);
add('&bsolb;', #$29C5);
add('&bsolhsub;', #$27C8);
add('&bull;', #$2022);
add('&bullet;', #$2022);
add('&bump;', #$224E);
add('&bumpE;', #$2AAE);
add('&bumpe;', #$224F);
add('&bumpeq;', #$224F);
add('&cacute;', #$0107);
add('&cap;', #$2229);
add('&capand;', #$2A44);
add('&capbrcup;', #$2A49);
add('&capcap;', #$2A4B);
add('&capcup;', #$2A47);
add('&capdot;', #$2A40);
add('&caps;', #$2229#$FE00);
add('&caret;', #$2041);
add('&caron;', #$02C7);
add('&ccaps;', #$2A4D);
add('&ccaron;', #$010D);
add('&ccedil;', #$00E7);
add('&ccirc;', #$0109);
add('&ccups;', #$2A4C);
add('&ccupssm;', #$2A50);
add('&cdot;', #$010B);
add('&cedil;', #$00B8);
add('&cemptyv;', #$29B2);
add('&cent;', #$00A2);
add('&centerdot;', #$00B7);
add('&cfr;', #$D835#$DD20);
add('&chcy;', #$0447);
add('&check;', #$2713);
add('&checkmark;', #$2713);
add('&chi;', #$03C7);
add('&cir;', #$25CB);
add('&cirE;', #$29C3);
add('&circ;', #$02C6);
add('&circeq;', #$2257);
add('&circlearrowleft;', #$21BA);
add('&circlearrowright;', #$21BB);
add('&circledR;', #$00AE);
add('&circledS;', #$24C8);
add('&circledast;', #$229B);
add('&circledcirc;', #$229A);
add('&circleddash;', #$229D);
add('&cire;', #$2257);
add('&cirfnint;', #$2A10);
add('&cirmid;', #$2AEF);
add('&cirscir;', #$29C2);
add('&clubs;', #$2663);
add('&clubsuit;', #$2663);
add('&colon;', #$003A);
add('&colone;', #$2254);
add('&coloneq;', #$2254);
add('&comma;', #$002C);
add('&commat;', #$0040);
add('&comp;', #$2201);
add('&compfn;', #$2218);
add('&complement;', #$2201);
add('&complexes;', #$2102);
add('&cong;', #$2245);
add('&congdot;', #$2A6D);
add('&conint;', #$222E);
add('&copf;', #$D835#$DD54);
add('&coprod;', #$2210);
add('&copy;', #$00A9);
add('&copysr;', #$2117);
add('&crarr;', #$21B5);
add('&cross;', #$2717);
add('&cscr;', #$D835#$DCB8);
add('&csub;', #$2ACF);
add('&csube;', #$2AD1);
add('&csup;', #$2AD0);
add('&csupe;', #$2AD2);
add('&ctdot;', #$22EF);
add('&cudarrl;', #$2938);
add('&cudarrr;', #$2935);
add('&cuepr;', #$22DE);
add('&cuesc;', #$22DF);
add('&cularr;', #$21B6);
add('&cularrp;', #$293D);
add('&cup;', #$222A);
add('&cupbrcap;', #$2A48);
add('&cupcap;', #$2A46);
add('&cupcup;', #$2A4A);
add('&cupdot;', #$228D);
add('&cupor;', #$2A45);
add('&cups;', #$222A#$FE00);
add('&curarr;', #$21B7);
add('&curarrm;', #$293C);
add('&curlyeqprec;', #$22DE);
add('&curlyeqsucc;', #$22DF);
add('&curlyvee;', #$22CE);
add('&curlywedge;', #$22CF);
add('&curren;', #$00A4);
add('&curvearrowleft;', #$21B6);
add('&curvearrowright;', #$21B7);
add('&cuvee;', #$22CE);
add('&cuwed;', #$22CF);
add('&cwconint;', #$2232);
add('&cwint;', #$2231);
add('&cylcty;', #$232D);
add('&dArr;', #$21D3);
add('&dHar;', #$2965);
add('&dagger;', #$2020);
add('&daleth;', #$2138);
add('&darr;', #$2193);
add('&dash;', #$2010);
add('&dashv;', #$22A3);
add('&dbkarow;', #$290F);
add('&dblac;', #$02DD);
add('&dcaron;', #$010F);
add('&dcy;', #$0434);
add('&dd;', #$2146);
add('&ddagger;', #$2021);
add('&ddarr;', #$21CA);
add('&ddotseq;', #$2A77);
add('&deg;', #$00B0);
add('&delta;', #$03B4);
add('&demptyv;', #$29B1);
add('&dfisht;', #$297F);
add('&dfr;', #$D835#$DD21);
add('&dharl;', #$21C3);
add('&dharr;', #$21C2);
add('&diam;', #$22C4);
add('&diamond;', #$22C4);
add('&diamondsuit;', #$2666);
add('&diams;', #$2666);
add('&die;', #$00A8);
add('&digamma;', #$03DD);
add('&disin;', #$22F2);
add('&div;', #$00F7);
add('&divide;', #$00F7);
add('&divideontimes;', #$22C7);
add('&divonx;', #$22C7);
add('&djcy;', #$0452);
add('&dlcorn;', #$231E);
add('&dlcrop;', #$230D);
add('&dollar;', #$0024);
add('&dopf;', #$D835#$DD55);
add('&dot;', #$02D9);
add('&doteq;', #$2250);
add('&doteqdot;', #$2251);
add('&dotminus;', #$2238);
add('&dotplus;', #$2214);
add('&dotsquare;', #$22A1);
add('&doublebarwedge;', #$2306);
add('&downarrow;', #$2193);
add('&downdownarrows;', #$21CA);
add('&downharpoonleft;', #$21C3);
add('&downharpoonright;', #$21C2);
add('&drbkarow;', #$2910);
add('&drcorn;', #$231F);
add('&drcrop;', #$230C);
add('&dscr;', #$D835#$DCB9);
add('&dscy;', #$0455);
add('&dsol;', #$29F6);
add('&dstrok;', #$0111);
add('&dtdot;', #$22F1);
add('&dtri;', #$25BF);
add('&dtrif;', #$25BE);
add('&duarr;', #$21F5);
add('&duhar;', #$296F);
add('&dwangle;', #$29A6);
add('&dzcy;', #$045F);
add('&dzigrarr;', #$27FF);
add('&eDDot;', #$2A77);
add('&eDot;', #$2251);
add('&eacute;', #$00E9);
add('&easter;', #$2A6E);
add('&ecaron;', #$011B);
add('&ecir;', #$2256);
add('&ecirc;', #$00EA);
add('&ecolon;', #$2255);
add('&ecy;', #$044D);
add('&edot;', #$0117);
add('&ee;', #$2147);
add('&efDot;', #$2252);
add('&efr;', #$D835#$DD22);
add('&eg;', #$2A9A);
add('&egrave;', #$00E8);
add('&egs;', #$2A96);
add('&egsdot;', #$2A98);
add('&el;', #$2A99);
add('&elinters;', #$23E7);
add('&ell;', #$2113);
add('&els;', #$2A95);
add('&elsdot;', #$2A97);
add('&emacr;', #$0113);
add('&empty;', #$2205);
add('&emptyset;', #$2205);
add('&emptyv;', #$2205);
add('&emsp13;', #$2004);
add('&emsp14;', #$2005);
add('&emsp;', #$2003);
add('&eng;', #$014B);
add('&ensp;', #$2002);
add('&eogon;', #$0119);
add('&eopf;', #$D835#$DD56);
add('&epar;', #$22D5);
add('&eparsl;', #$29E3);
add('&eplus;', #$2A71);
add('&epsi;', #$03B5);
add('&epsilon;', #$03B5);
add('&epsiv;', #$03F5);
add('&eqcirc;', #$2256);
add('&eqcolon;', #$2255);
add('&eqsim;', #$2242);
add('&eqslantgtr;', #$2A96);
add('&eqslantless;', #$2A95);
add('&equals;', #$003D);
add('&equest;', #$225F);
add('&equiv;', #$2261);
add('&equivDD;', #$2A78);
add('&eqvparsl;', #$29E5);
add('&erDot;', #$2253);
add('&erarr;', #$2971);
add('&escr;', #$212F);
add('&esdot;', #$2250);
add('&esim;', #$2242);
add('&eta;', #$03B7);
add('&eth;', #$00F0);
add('&euml;', #$00EB);
add('&euro;', #$20AC);
add('&excl;', #$0021);
add('&exist;', #$2203);
add('&expectation;', #$2130);
add('&exponentiale;', #$2147);
add('&fallingdotseq;', #$2252);
add('&fcy;', #$0444);
add('&female;', #$2640);
add('&ffilig;', #$FB03);
add('&fflig;', #$FB00);
add('&ffllig;', #$FB04);
add('&ffr;', #$D835#$DD23);
add('&filig;', #$FB01);
add('&fjlig;', #$0066#$006A);
add('&flat;', #$266D);
add('&fllig;', #$FB02);
add('&fltns;', #$25B1);
add('&fnof;', #$0192);
add('&fopf;', #$D835#$DD57);
add('&forall;', #$2200);
add('&fork;', #$22D4);
add('&forkv;', #$2AD9);
add('&fpartint;', #$2A0D);
add('&frac12;', #$00BD);
add('&frac13;', #$2153);
add('&frac14;', #$00BC);
add('&frac15;', #$2155);
add('&frac16;', #$2159);
add('&frac18;', #$215B);
add('&frac23;', #$2154);
add('&frac25;', #$2156);
add('&frac34;', #$00BE);
add('&frac35;', #$2157);
add('&frac38;', #$215C);
add('&frac45;', #$2158);
add('&frac56;', #$215A);
add('&frac58;', #$215D);
add('&frac78;', #$215E);
add('&frasl;', #$2044);
add('&frown;', #$2322);
add('&fscr;', #$D835#$DCBB);
add('&gE;', #$2267);
add('&gEl;', #$2A8C);
add('&gacute;', #$01F5);
add('&gamma;', #$03B3);
add('&gammad;', #$03DD);
add('&gap;', #$2A86);
add('&gbreve;', #$011F);
add('&gcirc;', #$011D);
add('&gcy;', #$0433);
add('&gdot;', #$0121);
add('&ge;', #$2265);
add('&gel;', #$22DB);
add('&geq;', #$2265);
add('&geqq;', #$2267);
add('&geqslant;', #$2A7E);
add('&ges;', #$2A7E);
add('&gescc;', #$2AA9);
add('&gesdot;', #$2A80);
add('&gesdoto;', #$2A82);
add('&gesdotol;', #$2A84);
add('&gesl;', #$22DB#$FE00);
add('&gesles;', #$2A94);
add('&gfr;', #$D835#$DD24);
add('&gg;', #$226B);
add('&ggg;', #$22D9);
add('&gimel;', #$2137);
add('&gjcy;', #$0453);
add('&gl;', #$2277);
add('&glE;', #$2A92);
add('&gla;', #$2AA5);
add('&glj;', #$2AA4);
add('&gnE;', #$2269);
add('&gnap;', #$2A8A);
add('&gnapprox;', #$2A8A);
add('&gne;', #$2A88);
add('&gneq;', #$2A88);
add('&gneqq;', #$2269);
add('&gnsim;', #$22E7);
add('&gopf;', #$D835#$DD58);
add('&grave;', #$0060);
add('&gscr;', #$210A);
add('&gsim;', #$2273);
add('&gsime;', #$2A8E);
add('&gsiml;', #$2A90);
add('&gt;', #$003E);
add('&gtcc;', #$2AA7);
add('&gtcir;', #$2A7A);
add('&gtdot;', #$22D7);
add('&gtlPar;', #$2995);
add('&gtquest;', #$2A7C);
add('&gtrapprox;', #$2A86);
add('&gtrarr;', #$2978);
add('&gtrdot;', #$22D7);
add('&gtreqless;', #$22DB);
add('&gtreqqless;', #$2A8C);
add('&gtrless;', #$2277);
add('&gtrsim;', #$2273);
add('&gvertneqq;', #$2269#$FE00);
add('&gvnE;', #$2269#$FE00);
add('&hArr;', #$21D4);
add('&hairsp;', #$200A);
add('&half;', #$00BD);
add('&hamilt;', #$210B);
add('&hardcy;', #$044A);
add('&harr;', #$2194);
add('&harrcir;', #$2948);
add('&harrw;', #$21AD);
add('&hbar;', #$210F);
add('&hcirc;', #$0125);
add('&hearts;', #$2665);
add('&heartsuit;', #$2665);
add('&hellip;', #$2026);
add('&hercon;', #$22B9);
add('&hfr;', #$D835#$DD25);
add('&hksearow;', #$2925);
add('&hkswarow;', #$2926);
add('&hoarr;', #$21FF);
add('&homtht;', #$223B);
add('&hookleftarrow;', #$21A9);
add('&hookrightarrow;', #$21AA);
add('&hopf;', #$D835#$DD59);
add('&horbar;', #$2015);
add('&hscr;', #$D835#$DCBD);
add('&hslash;', #$210F);
add('&hstrok;', #$0127);
add('&hybull;', #$2043);
add('&hyphen;', #$2010);
add('&iacute;', #$00ED);
add('&ic;', #$2063);
add('&icirc;', #$00EE);
add('&icy;', #$0438);
add('&iecy;', #$0435);
add('&iexcl;', #$00A1);
add('&iff;', #$21D4);
add('&ifr;', #$D835#$DD26);
add('&igrave;', #$00EC);
add('&ii;', #$2148);
add('&iiiint;', #$2A0C);
add('&iiint;', #$222D);
add('&iinfin;', #$29DC);
add('&iiota;', #$2129);
add('&ijlig;', #$0133);
add('&imacr;', #$012B);
add('&image;', #$2111);
add('&imagline;', #$2110);
add('&imagpart;', #$2111);
add('&imath;', #$0131);
add('&imof;', #$22B7);
add('&imped;', #$01B5);
add('&in;', #$2208);
add('&incare;', #$2105);
add('&infin;', #$221E);
add('&infintie;', #$29DD);
add('&inodot;', #$0131);
add('&int;', #$222B);
add('&intcal;', #$22BA);
add('&integers;', #$2124);
add('&intercal;', #$22BA);
add('&intlarhk;', #$2A17);
add('&intprod;', #$2A3C);
add('&iocy;', #$0451);
add('&iogon;', #$012F);
add('&iopf;', #$D835#$DD5A);
add('&iota;', #$03B9);
add('&iprod;', #$2A3C);
add('&iquest;', #$00BF);
add('&iscr;', #$D835#$DCBE);
add('&isin;', #$2208);
add('&isinE;', #$22F9);
add('&isindot;', #$22F5);
add('&isins;', #$22F4);
add('&isinsv;', #$22F3);
add('&isinv;', #$2208);
add('&it;', #$2062);
add('&itilde;', #$0129);
add('&iukcy;', #$0456);
add('&iuml;', #$00EF);
add('&jcirc;', #$0135);
add('&jcy;', #$0439);
add('&jfr;', #$D835#$DD27);
add('&jmath;', #$0237);
add('&jopf;', #$D835#$DD5B);
add('&jscr;', #$D835#$DCBF);
add('&jsercy;', #$0458);
add('&jukcy;', #$0454);
add('&kappa;', #$03BA);
add('&kappav;', #$03F0);
add('&kcedil;', #$0137);
add('&kcy;', #$043A);
add('&kfr;', #$D835#$DD28);
add('&kgreen;', #$0138);
add('&khcy;', #$0445);
add('&kjcy;', #$045C);
add('&kopf;', #$D835#$DD5C);
add('&kscr;', #$D835#$DCC0);
add('&lAarr;', #$21DA);
add('&lArr;', #$21D0);
add('&lAtail;', #$291B);
add('&lBarr;', #$290E);
add('&lE;', #$2266);
add('&lEg;', #$2A8B);
add('&lHar;', #$2962);
add('&lacute;', #$013A);
add('&laemptyv;', #$29B4);
add('&lagran;', #$2112);
add('&lambda;', #$03BB);
add('&lang;', #$27E8);
add('&langd;', #$2991);
add('&langle;', #$27E8);
add('&lap;', #$2A85);
add('&laquo;', #$00AB);
add('&larr;', #$2190);
add('&larrb;', #$21E4);
add('&larrbfs;', #$291F);
add('&larrfs;', #$291D);
add('&larrhk;', #$21A9);
add('&larrlp;', #$21AB);
add('&larrpl;', #$2939);
add('&larrsim;', #$2973);
add('&larrtl;', #$21A2);
add('&lat;', #$2AAB);
add('&latail;', #$2919);
add('&late;', #$2AAD);
add('&lates;', #$2AAD#$FE00);
add('&lbarr;', #$290C);
add('&lbbrk;', #$2772);
add('&lbrace;', #$007B);
add('&lbrack;', #$005B);
add('&lbrke;', #$298B);
add('&lbrksld;', #$298F);
add('&lbrkslu;', #$298D);
add('&lcaron;', #$013E);
add('&lcedil;', #$013C);
add('&lceil;', #$2308);
add('&lcub;', #$007B);
add('&lcy;', #$043B);
add('&ldca;', #$2936);
add('&ldquo;', #$201C);
add('&ldquor;', #$201E);
add('&ldrdhar;', #$2967);
add('&ldrushar;', #$294B);
add('&ldsh;', #$21B2);
add('&le;', #$2264);
add('&leftarrow;', #$2190);
add('&leftarrowtail;', #$21A2);
add('&leftharpoondown;', #$21BD);
add('&leftharpoonup;', #$21BC);
add('&leftleftarrows;', #$21C7);
add('&leftrightarrow;', #$2194);
add('&leftrightarrows;', #$21C6);
add('&leftrightharpoons;', #$21CB);
add('&leftrightsquigarrow;', #$21AD);
add('&leftthreetimes;', #$22CB);
add('&leg;', #$22DA);
add('&leq;', #$2264);
add('&leqq;', #$2266);
add('&leqslant;', #$2A7D);
add('&les;', #$2A7D);
add('&lescc;', #$2AA8);
add('&lesdot;', #$2A7F);
add('&lesdoto;', #$2A81);
add('&lesdotor;', #$2A83);
add('&lesg;', #$22DA#$FE00);
add('&lesges;', #$2A93);
add('&lessapprox;', #$2A85);
add('&lessdot;', #$22D6);
add('&lesseqgtr;', #$22DA);
add('&lesseqqgtr;', #$2A8B);
add('&lessgtr;', #$2276);
add('&lesssim;', #$2272);
add('&lfisht;', #$297C);
add('&lfloor;', #$230A);
add('&lfr;', #$D835#$DD29);
add('&lg;', #$2276);
add('&lgE;', #$2A91);
add('&lhard;', #$21BD);
add('&lharu;', #$21BC);
add('&lharul;', #$296A);
add('&lhblk;', #$2584);
add('&ljcy;', #$0459);
add('&ll;', #$226A);
add('&llarr;', #$21C7);
add('&llcorner;', #$231E);
add('&llhard;', #$296B);
add('&lltri;', #$25FA);
add('&lmidot;', #$0140);
add('&lmoust;', #$23B0);
add('&lmoustache;', #$23B0);
add('&lnE;', #$2268);
add('&lnap;', #$2A89);
add('&lnapprox;', #$2A89);
add('&lne;', #$2A87);
add('&lneq;', #$2A87);
add('&lneqq;', #$2268);
add('&lnsim;', #$22E6);
add('&loang;', #$27EC);
add('&loarr;', #$21FD);
add('&lobrk;', #$27E6);
add('&longleftarrow;', #$27F5);
add('&longleftrightarrow;', #$27F7);
add('&longmapsto;', #$27FC);
add('&longrightarrow;', #$27F6);
add('&looparrowleft;', #$21AB);
add('&looparrowright;', #$21AC);
add('&lopar;', #$2985);
add('&lopf;', #$D835#$DD5D);
add('&loplus;', #$2A2D);
add('&lotimes;', #$2A34);
add('&lowast;', #$2217);
add('&lowbar;', #$005F);
add('&loz;', #$25CA);
add('&lozenge;', #$25CA);
add('&lozf;', #$29EB);
add('&lpar;', #$0028);
add('&lparlt;', #$2993);
add('&lrarr;', #$21C6);
add('&lrcorner;', #$231F);
add('&lrhar;', #$21CB);
add('&lrhard;', #$296D);
add('&lrm;', #$200E);
add('&lrtri;', #$22BF);
add('&lsaquo;', #$2039);
add('&lscr;', #$D835#$DCC1);
add('&lsh;', #$21B0);
add('&lsim;', #$2272);
add('&lsime;', #$2A8D);
add('&lsimg;', #$2A8F);
add('&lsqb;', #$005B);
add('&lsquo;', #$2018);
add('&lsquor;', #$201A);
add('&lstrok;', #$0142);
add('&lt;', #$003C);
add('&ltcc;', #$2AA6);
add('&ltcir;', #$2A79);
add('&ltdot;', #$22D6);
add('&lthree;', #$22CB);
add('&ltimes;', #$22C9);
add('&ltlarr;', #$2976);
add('&ltquest;', #$2A7B);
add('&ltrPar;', #$2996);
add('&ltri;', #$25C3);
add('&ltrie;', #$22B4);
add('&ltrif;', #$25C2);
add('&lurdshar;', #$294A);
add('&luruhar;', #$2966);
add('&lvertneqq;', #$2268#$FE00);
add('&lvnE;', #$2268#$FE00);
add('&mDDot;', #$223A);
add('&macr;', #$00AF);
add('&male;', #$2642);
add('&malt;', #$2720);
add('&maltese;', #$2720);
add('&map;', #$21A6);
add('&mapsto;', #$21A6);
add('&mapstodown;', #$21A7);
add('&mapstoleft;', #$21A4);
add('&mapstoup;', #$21A5);
add('&marker;', #$25AE);
add('&mcomma;', #$2A29);
add('&mcy;', #$043C);
add('&mdash;', #$2014);
add('&measuredangle;', #$2221);
add('&mfr;', #$D835#$DD2A);
add('&mho;', #$2127);
add('&micro;', #$00B5);
add('&mid;', #$2223);
add('&midast;', #$002A);
add('&midcir;', #$2AF0);
add('&middot;', #$00B7);
add('&minus;', #$2212);
add('&minusb;', #$229F);
add('&minusd;', #$2238);
add('&minusdu;', #$2A2A);
add('&mlcp;', #$2ADB);
add('&mldr;', #$2026);
add('&mnplus;', #$2213);
add('&models;', #$22A7);
add('&mopf;', #$D835#$DD5E);
add('&mp;', #$2213);
add('&mscr;', #$D835#$DCC2);
add('&mstpos;', #$223E);
add('&mu;', #$03BC);
add('&multimap;', #$22B8);
add('&mumap;', #$22B8);
add('&nGg;', #$22D9#$0338);
add('&nGt;', #$226B#$20D2);
add('&nGtv;', #$226B#$0338);
add('&nLeftarrow;', #$21CD);
add('&nLeftrightarrow;', #$21CE);
add('&nLl;', #$22D8#$0338);
add('&nLt;', #$226A#$20D2);
add('&nLtv;', #$226A#$0338);
add('&nRightarrow;', #$21CF);
add('&nVDash;', #$22AF);
add('&nVdash;', #$22AE);
add('&nabla;', #$2207);
add('&nacute;', #$0144);
add('&nang;', #$2220#$20D2);
add('&nap;', #$2249);
add('&napE;', #$2A70#$0338);
add('&napid;', #$224B#$0338);
add('&napos;', #$0149);
add('&napprox;', #$2249);
add('&natur;', #$266E);
add('&natural;', #$266E);
add('&naturals;', #$2115);
add('&nbsp;', #$00A0);
add('&nbump;', #$224E#$0338);
add('&nbumpe;', #$224F#$0338);
add('&ncap;', #$2A43);
add('&ncaron;', #$0148);
add('&ncedil;', #$0146);
add('&ncong;', #$2247);
add('&ncongdot;', #$2A6D#$0338);
add('&ncup;', #$2A42);
add('&ncy;', #$043D);
add('&ndash;', #$2013);
add('&ne;', #$2260);
add('&neArr;', #$21D7);
add('&nearhk;', #$2924);
add('&nearr;', #$2197);
add('&nearrow;', #$2197);
add('&nedot;', #$2250#$0338);
add('&nequiv;', #$2262);
add('&nesear;', #$2928);
add('&nesim;', #$2242#$0338);
add('&nexist;', #$2204);
add('&nexists;', #$2204);
add('&nfr;', #$D835#$DD2B);
add('&ngE;', #$2267#$0338);
add('&nge;', #$2271);
add('&ngeq;', #$2271);
add('&ngeqq;', #$2267#$0338);
add('&ngeqslant;', #$2A7E#$0338);
add('&nges;', #$2A7E#$0338);
add('&ngsim;', #$2275);
add('&ngt;', #$226F);
add('&ngtr;', #$226F);
add('&nhArr;', #$21CE);
add('&nharr;', #$21AE);
add('&nhpar;', #$2AF2);
add('&ni;', #$220B);
add('&nis;', #$22FC);
add('&nisd;', #$22FA);
add('&niv;', #$220B);
add('&njcy;', #$045A);
add('&nlArr;', #$21CD);
add('&nlE;', #$2266#$0338);
add('&nlarr;', #$219A);
add('&nldr;', #$2025);
add('&nle;', #$2270);
add('&nleftarrow;', #$219A);
add('&nleftrightarrow;', #$21AE);
add('&nleq;', #$2270);
add('&nleqq;', #$2266#$0338);
add('&nleqslant;', #$2A7D#$0338);
add('&nles;', #$2A7D#$0338);
add('&nless;', #$226E);
add('&nlsim;', #$2274);
add('&nlt;', #$226E);
add('&nltri;', #$22EA);
add('&nltrie;', #$22EC);
add('&nmid;', #$2224);
add('&nopf;', #$D835#$DD5F);
add('&not;', #$00AC);
add('&notin;', #$2209);
add('&notinE;', #$22F9#$0338);
add('&notindot;', #$22F5#$0338);
add('&notinva;', #$2209);
add('&notinvb;', #$22F7);
add('&notinvc;', #$22F6);
add('&notni;', #$220C);
add('&notniva;', #$220C);
add('&notnivb;', #$22FE);
add('&notnivc;', #$22FD);
add('&npar;', #$2226);
add('&nparallel;', #$2226);
add('&nparsl;', #$2AFD#$20E5);
add('&npart;', #$2202#$0338);
add('&npolint;', #$2A14);
add('&npr;', #$2280);
add('&nprcue;', #$22E0);
add('&npre;', #$2AAF#$0338);
add('&nprec;', #$2280);
add('&npreceq;', #$2AAF#$0338);
add('&nrArr;', #$21CF);
add('&nrarr;', #$219B);
add('&nrarrc;', #$2933#$0338);
add('&nrarrw;', #$219D#$0338);
add('&nrightarrow;', #$219B);
add('&nrtri;', #$22EB);
add('&nrtrie;', #$22ED);
add('&nsc;', #$2281);
add('&nsccue;', #$22E1);
add('&nsce;', #$2AB0#$0338);
add('&nscr;', #$D835#$DCC3);
add('&nshortmid;', #$2224);
add('&nshortparallel;', #$2226);
add('&nsim;', #$2241);
add('&nsime;', #$2244);
add('&nsimeq;', #$2244);
add('&nsmid;', #$2224);
add('&nspar;', #$2226);
add('&nsqsube;', #$22E2);
add('&nsqsupe;', #$22E3);
add('&nsub;', #$2284);
add('&nsubE;', #$2AC5#$0338);
add('&nsube;', #$2288);
add('&nsubset;', #$2282#$20D2);
add('&nsubseteq;', #$2288);
add('&nsubseteqq;', #$2AC5#$0338);
add('&nsucc;', #$2281);
add('&nsucceq;', #$2AB0#$0338);
add('&nsup;', #$2285);
add('&nsupE;', #$2AC6#$0338);
add('&nsupe;', #$2289);
add('&nsupset;', #$2283#$20D2);
add('&nsupseteq;', #$2289);
add('&nsupseteqq;', #$2AC6#$0338);
add('&ntgl;', #$2279);
add('&ntilde;', #$00F1);
add('&ntlg;', #$2278);
add('&ntriangleleft;', #$22EA);
add('&ntrianglelefteq;', #$22EC);
add('&ntriangleright;', #$22EB);
add('&ntrianglerighteq;', #$22ED);
add('&nu;', #$03BD);
add('&num;', #$0023);
add('&numero;', #$2116);
add('&numsp;', #$2007);
add('&nvDash;', #$22AD);
add('&nvHarr;', #$2904);
add('&nvap;', #$224D#$20D2);
add('&nvdash;', #$22AC);
add('&nvge;', #$2265#$20D2);
add('&nvgt;', #$003E#$20D2);
add('&nvinfin;', #$29DE);
add('&nvlArr;', #$2902);
add('&nvle;', #$2264#$20D2);
add('&nvlt;', #$003C#$20D2);
add('&nvltrie;', #$22B4#$20D2);
add('&nvrArr;', #$2903);
add('&nvrtrie;', #$22B5#$20D2);
add('&nvsim;', #$223C#$20D2);
add('&nwArr;', #$21D6);
add('&nwarhk;', #$2923);
add('&nwarr;', #$2196);
add('&nwarrow;', #$2196);
add('&nwnear;', #$2927);
add('&oS;', #$24C8);
add('&oacute;', #$00F3);
add('&oast;', #$229B);
add('&ocir;', #$229A);
add('&ocirc;', #$00F4);
add('&ocy;', #$043E);
add('&odash;', #$229D);
add('&odblac;', #$0151);
add('&odiv;', #$2A38);
add('&odot;', #$2299);
add('&odsold;', #$29BC);
add('&oelig;', #$0153);
add('&ofcir;', #$29BF);
add('&ofr;', #$D835#$DD2C);
add('&ogon;', #$02DB);
add('&ograve;', #$00F2);
add('&ogt;', #$29C1);
add('&ohbar;', #$29B5);
add('&ohm;', #$03A9);
add('&oint;', #$222E);
add('&olarr;', #$21BA);
add('&olcir;', #$29BE);
add('&olcross;', #$29BB);
add('&oline;', #$203E);
add('&olt;', #$29C0);
add('&omacr;', #$014D);
add('&omega;', #$03C9);
add('&omicron;', #$03BF);
add('&omid;', #$29B6);
add('&ominus;', #$2296);
add('&oopf;', #$D835#$DD60);
add('&opar;', #$29B7);
add('&operp;', #$29B9);
add('&oplus;', #$2295);
add('&or;', #$2228);
add('&orarr;', #$21BB);
add('&ord;', #$2A5D);
add('&order;', #$2134);
add('&orderof;', #$2134);
add('&ordf;', #$00AA);
add('&ordm;', #$00BA);
add('&origof;', #$22B6);
add('&oror;', #$2A56);
add('&orslope;', #$2A57);
add('&orv;', #$2A5B);
add('&oscr;', #$2134);
add('&oslash;', #$00F8);
add('&osol;', #$2298);
add('&otilde;', #$00F5);
add('&otimes;', #$2297);
add('&otimesas;', #$2A36);
add('&ouml;', #$00F6);
add('&ovbar;', #$233D);
add('&par;', #$2225);
add('&para;', #$00B6);
add('&parallel;', #$2225);
add('&parsim;', #$2AF3);
add('&parsl;', #$2AFD);
add('&part;', #$2202);
add('&pcy;', #$043F);
add('&percnt;', #$0025);
add('&period;', #$002E);
add('&permil;', #$2030);
add('&perp;', #$22A5);
add('&pertenk;', #$2031);
add('&pfr;', #$D835#$DD2D);
add('&phi;', #$03C6);
add('&phiv;', #$03D5);
add('&phmmat;', #$2133);
add('&phone;', #$260E);
add('&pi;', #$03C0);
add('&pitchfork;', #$22D4);
add('&piv;', #$03D6);
add('&planck;', #$210F);
add('&planckh;', #$210E);
add('&plankv;', #$210F);
add('&plus;', #$002B);
add('&plusacir;', #$2A23);
add('&plusb;', #$229E);
add('&pluscir;', #$2A22);
add('&plusdo;', #$2214);
add('&plusdu;', #$2A25);
add('&pluse;', #$2A72);
add('&plusmn;', #$00B1);
add('&plussim;', #$2A26);
add('&plustwo;', #$2A27);
add('&pm;', #$00B1);
add('&pointint;', #$2A15);
add('&popf;', #$D835#$DD61);
add('&pound;', #$00A3);
add('&pr;', #$227A);
add('&prE;', #$2AB3);
add('&prap;', #$2AB7);
add('&prcue;', #$227C);
add('&pre;', #$2AAF);
add('&prec;', #$227A);
add('&precapprox;', #$2AB7);
add('&preccurlyeq;', #$227C);
add('&preceq;', #$2AAF);
add('&precnapprox;', #$2AB9);
add('&precneqq;', #$2AB5);
add('&precnsim;', #$22E8);
add('&precsim;', #$227E);
add('&prime;', #$2032);
add('&primes;', #$2119);
add('&prnE;', #$2AB5);
add('&prnap;', #$2AB9);
add('&prnsim;', #$22E8);
add('&prod;', #$220F);
add('&profalar;', #$232E);
add('&profline;', #$2312);
add('&profsurf;', #$2313);
add('&prop;', #$221D);
add('&propto;', #$221D);
add('&prsim;', #$227E);
add('&prurel;', #$22B0);
add('&pscr;', #$D835#$DCC5);
add('&psi;', #$03C8);
add('&puncsp;', #$2008);
add('&qfr;', #$D835#$DD2E);
add('&qint;', #$2A0C);
add('&qopf;', #$D835#$DD62);
add('&qprime;', #$2057);
add('&qscr;', #$D835#$DCC6);
add('&quaternions;', #$210D);
add('&quatint;', #$2A16);
add('&quest;', #$003F);
add('&questeq;', #$225F);
add('&quot;', #$0022);
add('&rAarr;', #$21DB);
add('&rArr;', #$21D2);
add('&rAtail;', #$291C);
add('&rBarr;', #$290F);
add('&rHar;', #$2964);
add('&race;', #$223D#$0331);
add('&racute;', #$0155);
add('&radic;', #$221A);
add('&raemptyv;', #$29B3);
add('&rang;', #$27E9);
add('&rangd;', #$2992);
add('&range;', #$29A5);
add('&rangle;', #$27E9);
add('&raquo;', #$00BB);
add('&rarr;', #$2192);
add('&rarrap;', #$2975);
add('&rarrb;', #$21E5);
add('&rarrbfs;', #$2920);
add('&rarrc;', #$2933);
add('&rarrfs;', #$291E);
add('&rarrhk;', #$21AA);
add('&rarrlp;', #$21AC);
add('&rarrpl;', #$2945);
add('&rarrsim;', #$2974);
add('&rarrtl;', #$21A3);
add('&rarrw;', #$219D);
add('&ratail;', #$291A);
add('&ratio;', #$2236);
add('&rationals;', #$211A);
add('&rbarr;', #$290D);
add('&rbbrk;', #$2773);
add('&rbrace;', #$007D);
add('&rbrack;', #$005D);
add('&rbrke;', #$298C);
add('&rbrksld;', #$298E);
add('&rbrkslu;', #$2990);
add('&rcaron;', #$0159);
add('&rcedil;', #$0157);
add('&rceil;', #$2309);
add('&rcub;', #$007D);
add('&rcy;', #$0440);
add('&rdca;', #$2937);
add('&rdldhar;', #$2969);
add('&rdquo;', #$201D);
add('&rdquor;', #$201D);
add('&rdsh;', #$21B3);
add('&real;', #$211C);
add('&realine;', #$211B);
add('&realpart;', #$211C);
add('&reals;', #$211D);
add('&rect;', #$25AD);
add('&reg;', #$00AE);
add('&rfisht;', #$297D);
add('&rfloor;', #$230B);
add('&rfr;', #$D835#$DD2F);
add('&rhard;', #$21C1);
add('&rharu;', #$21C0);
add('&rharul;', #$296C);
add('&rho;', #$03C1);
add('&rhov;', #$03F1);
add('&rightarrow;', #$2192);
add('&rightarrowtail;', #$21A3);
add('&rightharpoondown;', #$21C1);
add('&rightharpoonup;', #$21C0);
add('&rightleftarrows;', #$21C4);
add('&rightleftharpoons;', #$21CC);
add('&rightrightarrows;', #$21C9);
add('&rightsquigarrow;', #$219D);
add('&rightthreetimes;', #$22CC);
add('&ring;', #$02DA);
add('&risingdotseq;', #$2253);
add('&rlarr;', #$21C4);
add('&rlhar;', #$21CC);
add('&rlm;', #$200F);
add('&rmoust;', #$23B1);
add('&rmoustache;', #$23B1);
add('&rnmid;', #$2AEE);
add('&roang;', #$27ED);
add('&roarr;', #$21FE);
add('&robrk;', #$27E7);
add('&ropar;', #$2986);
add('&ropf;', #$D835#$DD63);
add('&roplus;', #$2A2E);
add('&rotimes;', #$2A35);
add('&rpar;', #$0029);
add('&rpargt;', #$2994);
add('&rppolint;', #$2A12);
add('&rrarr;', #$21C9);
add('&rsaquo;', #$203A);
add('&rscr;', #$D835#$DCC7);
add('&rsh;', #$21B1);
add('&rsqb;', #$005D);
add('&rsquo;', #$2019);
add('&rsquor;', #$2019);
add('&rthree;', #$22CC);
add('&rtimes;', #$22CA);
add('&rtri;', #$25B9);
add('&rtrie;', #$22B5);
add('&rtrif;', #$25B8);
add('&rtriltri;', #$29CE);
add('&ruluhar;', #$2968);
add('&rx;', #$211E);
add('&sacute;', #$015B);
add('&sbquo;', #$201A);
add('&sc;', #$227B);
add('&scE;', #$2AB4);
add('&scap;', #$2AB8);
add('&scaron;', #$0161);
add('&sccue;', #$227D);
add('&sce;', #$2AB0);
add('&scedil;', #$015F);
add('&scirc;', #$015D);
add('&scnE;', #$2AB6);
add('&scnap;', #$2ABA);
add('&scnsim;', #$22E9);
add('&scpolint;', #$2A13);
add('&scsim;', #$227F);
add('&scy;', #$0441);
add('&sdot;', #$22C5);
add('&sdotb;', #$22A1);
add('&sdote;', #$2A66);
add('&seArr;', #$21D8);
add('&searhk;', #$2925);
add('&searr;', #$2198);
add('&searrow;', #$2198);
add('&sect;', #$00A7);
add('&semi;', #$003B);
add('&seswar;', #$2929);
add('&setminus;', #$2216);
add('&setmn;', #$2216);
add('&sext;', #$2736);
add('&sfr;', #$D835#$DD30);
add('&sfrown;', #$2322);
add('&sharp;', #$266F);
add('&shchcy;', #$0449);
add('&shcy;', #$0448);
add('&shortmid;', #$2223);
add('&shortparallel;', #$2225);
add('&shy;', #$00AD);
add('&sigma;', #$03C3);
add('&sigmaf;', #$03C2);
add('&sigmav;', #$03C2);
add('&sim;', #$223C);
add('&simdot;', #$2A6A);
add('&sime;', #$2243);
add('&simeq;', #$2243);
add('&simg;', #$2A9E);
add('&simgE;', #$2AA0);
add('&siml;', #$2A9D);
add('&simlE;', #$2A9F);
add('&simne;', #$2246);
add('&simplus;', #$2A24);
add('&simrarr;', #$2972);
add('&slarr;', #$2190);
add('&smallsetminus;', #$2216);
add('&smashp;', #$2A33);
add('&smeparsl;', #$29E4);
add('&smid;', #$2223);
add('&smile;', #$2323);
add('&smt;', #$2AAA);
add('&smte;', #$2AAC);
add('&smtes;', #$2AAC#$FE00);
add('&softcy;', #$044C);
add('&sol;', #$002F);
add('&solb;', #$29C4);
add('&solbar;', #$233F);
add('&sopf;', #$D835#$DD64);
add('&spades;', #$2660);
add('&spadesuit;', #$2660);
add('&spar;', #$2225);
add('&sqcap;', #$2293);
add('&sqcaps;', #$2293#$FE00);
add('&sqcup;', #$2294);
add('&sqcups;', #$2294#$FE00);
add('&sqsub;', #$228F);
add('&sqsube;', #$2291);
add('&sqsubset;', #$228F);
add('&sqsubseteq;', #$2291);
add('&sqsup;', #$2290);
add('&sqsupe;', #$2292);
add('&sqsupset;', #$2290);
add('&sqsupseteq;', #$2292);
add('&squ;', #$25A1);
add('&square;', #$25A1);
add('&squarf;', #$25AA);
add('&squf;', #$25AA);
add('&srarr;', #$2192);
add('&sscr;', #$D835#$DCC8);
add('&ssetmn;', #$2216);
add('&ssmile;', #$2323);
add('&sstarf;', #$22C6);
add('&star;', #$2606);
add('&starf;', #$2605);
add('&straightepsilon;', #$03F5);
add('&straightphi;', #$03D5);
add('&strns;', #$00AF);
add('&sub;', #$2282);
add('&subE;', #$2AC5);
add('&subdot;', #$2ABD);
add('&sube;', #$2286);
add('&subedot;', #$2AC3);
add('&submult;', #$2AC1);
add('&subnE;', #$2ACB);
add('&subne;', #$228A);
add('&subplus;', #$2ABF);
add('&subrarr;', #$2979);
add('&subset;', #$2282);
add('&subseteq;', #$2286);
add('&subseteqq;', #$2AC5);
add('&subsetneq;', #$228A);
add('&subsetneqq;', #$2ACB);
add('&subsim;', #$2AC7);
add('&subsub;', #$2AD5);
add('&subsup;', #$2AD3);
add('&succ;', #$227B);
add('&succapprox;', #$2AB8);
add('&succcurlyeq;', #$227D);
add('&succeq;', #$2AB0);
add('&succnapprox;', #$2ABA);
add('&succneqq;', #$2AB6);
add('&succnsim;', #$22E9);
add('&succsim;', #$227F);
add('&sum;', #$2211);
add('&sung;', #$266A);
add('&sup1;', #$00B9);
add('&sup2;', #$00B2);
add('&sup3;', #$00B3);
add('&sup;', #$2283);
add('&supE;', #$2AC6);
add('&supdot;', #$2ABE);
add('&supdsub;', #$2AD8);
add('&supe;', #$2287);
add('&supedot;', #$2AC4);
add('&suphsol;', #$27C9);
add('&suphsub;', #$2AD7);
add('&suplarr;', #$297B);
add('&supmult;', #$2AC2);
add('&supnE;', #$2ACC);
add('&supne;', #$228B);
add('&supplus;', #$2AC0);
add('&supset;', #$2283);
add('&supseteq;', #$2287);
add('&supseteqq;', #$2AC6);
add('&supsetneq;', #$228B);
add('&supsetneqq;', #$2ACC);
add('&supsim;', #$2AC8);
add('&supsub;', #$2AD4);
add('&supsup;', #$2AD6);
add('&swArr;', #$21D9);
add('&swarhk;', #$2926);
add('&swarr;', #$2199);
add('&swarrow;', #$2199);
add('&swnwar;', #$292A);
add('&szlig;', #$00DF);
add('&target;', #$2316);
add('&tau;', #$03C4);
add('&tbrk;', #$23B4);
add('&tcaron;', #$0165);
add('&tcedil;', #$0163);
add('&tcy;', #$0442);
add('&tdot;', #$20DB);
add('&telrec;', #$2315);
add('&tfr;', #$D835#$DD31);
add('&there4;', #$2234);
add('&therefore;', #$2234);
add('&theta;', #$03B8);
add('&thetasym;', #$03D1);
add('&thetav;', #$03D1);
add('&thickapprox;', #$2248);
add('&thicksim;', #$223C);
add('&thinsp;', #$2009);
add('&thkap;', #$2248);
add('&thksim;', #$223C);
add('&thorn;', #$00FE);
add('&tilde;', #$02DC);
add('&times;', #$00D7);
add('&timesb;', #$22A0);
add('&timesbar;', #$2A31);
add('&timesd;', #$2A30);
add('&tint;', #$222D);
add('&toea;', #$2928);
add('&top;', #$22A4);
add('&topbot;', #$2336);
add('&topcir;', #$2AF1);
add('&topf;', #$D835#$DD65);
add('&topfork;', #$2ADA);
add('&tosa;', #$2929);
add('&tprime;', #$2034);
add('&trade;', #$2122);
add('&triangle;', #$25B5);
add('&triangledown;', #$25BF);
add('&triangleleft;', #$25C3);
add('&trianglelefteq;', #$22B4);
add('&triangleq;', #$225C);
add('&triangleright;', #$25B9);
add('&trianglerighteq;', #$22B5);
add('&tridot;', #$25EC);
add('&trie;', #$225C);
add('&triminus;', #$2A3A);
add('&triplus;', #$2A39);
add('&trisb;', #$29CD);
add('&tritime;', #$2A3B);
add('&trpezium;', #$23E2);
add('&tscr;', #$D835#$DCC9);
add('&tscy;', #$0446);
add('&tshcy;', #$045B);
add('&tstrok;', #$0167);
add('&twixt;', #$226C);
add('&twoheadleftarrow;', #$219E);
add('&twoheadrightarrow;', #$21A0);
add('&uArr;', #$21D1);
add('&uHar;', #$2963);
add('&uacute;', #$00FA);
add('&uarr;', #$2191);
add('&ubrcy;', #$045E);
add('&ubreve;', #$016D);
add('&ucirc;', #$00FB);
add('&ucy;', #$0443);
add('&udarr;', #$21C5);
add('&udblac;', #$0171);
add('&udhar;', #$296E);
add('&ufisht;', #$297E);
add('&ufr;', #$D835#$DD32);
add('&ugrave;', #$00F9);
add('&uharl;', #$21BF);
add('&uharr;', #$21BE);
add('&uhblk;', #$2580);
add('&ulcorn;', #$231C);
add('&ulcorner;', #$231C);
add('&ulcrop;', #$230F);
add('&ultri;', #$25F8);
add('&umacr;', #$016B);
add('&uml;', #$00A8);
add('&uogon;', #$0173);
add('&uopf;', #$D835#$DD66);
add('&uparrow;', #$2191);
add('&updownarrow;', #$2195);
add('&upharpoonleft;', #$21BF);
add('&upharpoonright;', #$21BE);
add('&uplus;', #$228E);
add('&upsi;', #$03C5);
add('&upsih;', #$03D2);
add('&upsilon;', #$03C5);
add('&upuparrows;', #$21C8);
add('&urcorn;', #$231D);
add('&urcorner;', #$231D);
add('&urcrop;', #$230E);
add('&uring;', #$016F);
add('&urtri;', #$25F9);
add('&uscr;', #$D835#$DCCA);
add('&utdot;', #$22F0);
add('&utilde;', #$0169);
add('&utri;', #$25B5);
add('&utrif;', #$25B4);
add('&uuarr;', #$21C8);
add('&uuml;', #$00FC);
add('&uwangle;', #$29A7);
add('&vArr;', #$21D5);
add('&vBar;', #$2AE8);
add('&vBarv;', #$2AE9);
add('&vDash;', #$22A8);
add('&vangrt;', #$299C);
add('&varepsilon;', #$03F5);
add('&varkappa;', #$03F0);
add('&varnothing;', #$2205);
add('&varphi;', #$03D5);
add('&varpi;', #$03D6);
add('&varpropto;', #$221D);
add('&varr;', #$2195);
add('&varrho;', #$03F1);
add('&varsigma;', #$03C2);
add('&varsubsetneq;', #$228A#$FE00);
add('&varsubsetneqq;', #$2ACB#$FE00);
add('&varsupsetneq;', #$228B#$FE00);
add('&varsupsetneqq;', #$2ACC#$FE00);
add('&vartheta;', #$03D1);
add('&vartriangleleft;', #$22B2);
add('&vartriangleright;', #$22B3);
add('&vcy;', #$0432);
add('&vdash;', #$22A2);
add('&vee;', #$2228);
add('&veebar;', #$22BB);
add('&veeeq;', #$225A);
add('&vellip;', #$22EE);
add('&verbar;', #$007C);
add('&vert;', #$007C);
add('&vfr;', #$D835#$DD33);
add('&vltri;', #$22B2);
add('&vnsub;', #$2282#$20D2);
add('&vnsup;', #$2283#$20D2);
add('&vopf;', #$D835#$DD67);
add('&vprop;', #$221D);
add('&vrtri;', #$22B3);
add('&vscr;', #$D835#$DCCB);
add('&vsubnE;', #$2ACB#$FE00);
add('&vsubne;', #$228A#$FE00);
add('&vsupnE;', #$2ACC#$FE00);
add('&vsupne;', #$228B#$FE00);
add('&vzigzag;', #$299A);
add('&wcirc;', #$0175);
add('&wedbar;', #$2A5F);
add('&wedge;', #$2227);
add('&wedgeq;', #$2259);
add('&weierp;', #$2118);
add('&wfr;', #$D835#$DD34);
add('&wopf;', #$D835#$DD68);
add('&wp;', #$2118);
add('&wr;', #$2240);
add('&wreath;', #$2240);
add('&wscr;', #$D835#$DCCC);
add('&xcap;', #$22C2);
add('&xcirc;', #$25EF);
add('&xcup;', #$22C3);
add('&xdtri;', #$25BD);
add('&xfr;', #$D835#$DD35);
add('&xhArr;', #$27FA);
add('&xharr;', #$27F7);
add('&xi;', #$03BE);
add('&xlArr;', #$27F8);
add('&xlarr;', #$27F5);
add('&xmap;', #$27FC);
add('&xnis;', #$22FB);
add('&xodot;', #$2A00);
add('&xopf;', #$D835#$DD69);
add('&xoplus;', #$2A01);
add('&xotime;', #$2A02);
add('&xrArr;', #$27F9);
add('&xrarr;', #$27F6);
add('&xscr;', #$D835#$DCCD);
add('&xsqcup;', #$2A06);
add('&xuplus;', #$2A04);
add('&xutri;', #$25B3);
add('&xvee;', #$22C1);
add('&xwedge;', #$22C0);
add('&yacute;', #$00FD);
add('&yacy;', #$044F);
add('&ycirc;', #$0177);
add('&ycy;', #$044B);
add('&yen;', #$00A5);
add('&yfr;', #$D835#$DD36);
add('&yicy;', #$0457);
add('&yopf;', #$D835#$DD6A);
add('&yscr;', #$D835#$DCCE);
add('&yucy;', #$044E);
add('&yuml;', #$00FF);
add('&zacute;', #$017A);
add('&zcaron;', #$017E);
add('&zcy;', #$0437);
add('&zdot;', #$017C);
add('&zeetrf;', #$2128);
add('&zeta;', #$03B6);
add('&zfr;', #$D835#$DD37);
add('&zhcy;', #$0436);
add('&zigrarr;', #$21DD);
add('&zopf;', #$D835#$DD6B);
add('&zscr;', #$D835#$DCCF);
add('&zwj;', #$200D);
add('&zwnj;', #$200C);
end;
 
end.
/VCL_MARKDOWN/MarkdownProcessor.pas
0,0 → 1,99
{
Copyright (c) 2011+, Health Intersections Pty Ltd (http://www.healthintersections.com.au)
All rights reserved.
 
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of HL7 nor the names of its contributors may be used to
endorse or promote products derived from this software without specific
prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
}
 
{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
 
 
{
How to process markdown:
 
function processMarkdown(markdownSource : String) : String;
var
proc : TMarkdownProcessor;
begin
proc := TMarkdownProcessor.createDialect(mdDaringFireball); // or flavor of your choice
try
proc.unsafe := false;
result := proc.process(markdownSource);
finally
proc.free;
end;
end;
 
}
 
{
Contribution Credits
--------------------
- Pavel Stugel - revisions for support of older Delphi versions and FPC
}
 
 
Unit MarkdownProcessor;
 
interface
 
uses
SysUtils;
 
Type
TMarkdownProcessorDialect = (mdDaringFireball, mdCommonMark{, mdAsciiDoc});
 
EMarkdownProcessor = class (Exception);
 
TMarkdownProcessor = class abstract
protected
function GetAllowUnSafe: boolean; virtual; abstract;
procedure SetAllowUnSafe(const Value: boolean); virtual; abstract;
public
class function CreateDialect(dialect : TMarkdownProcessorDialect) : TMarkdownProcessor;
 
// when AllowUnsafe = true, then the processor can create scripts etc.
property AllowUnsafe : boolean read GetAllowUnSafe write SetAllowUnSafe;
function process(source : String) : String; virtual; abstract;
end;
 
implementation
 
uses
MarkdownDaringFireball,
MarkdownCommonMark;
 
{ TMarkdownProcessor }
 
class function TMarkdownProcessor.CreateDialect(dialect: TMarkdownProcessorDialect): TMarkdownProcessor;
begin
case dialect of
mdDaringFireball : result := TMarkdownDaringFireball.Create;
mdCommonMark : result := TCommonMarkProcessor.Create;
else
raise EMarkdownProcessor.Create('Unknown Markdown dialect');
end;
end;
 
end.
/VCL_MARKDOWN/MarkdownUnicodeUtils.pas
0,0 → 1,74
unit MarkdownUnicodeUtils;
 
{
Copyright (c) 2011+, Health Intersections Pty Ltd (http://www.healthintersections.com.au)
All rights reserved.
 
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of HL7 nor the names of its contributors may be used to
endorse or promote products derived from this software without specific
prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
}
 
{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
 
interface
 
uses
SysUtils;
 
{$IFNDEF FPC}
type
UnicodeChar = char;
{$ENDIF}
 
function unicodeChars(s : String) : TArray<UnicodeChar>;
 
implementation
 
{$IFDEF FPC}
 
function unicodeChars(s : String) : TArray<UnicodeChar>;
var
i, l: integer;
us: UnicodeString;
begin
us := UTF8Decode(s);
l := Length(us);
SetLength(result, l);
for i:=1 to l do result[i-1] := us[i];
end;
 
{$ELSE}
 
function unicodeChars(s : String) : TArray<UnicodeChar>;
var
i : Integer;
begin
SetLength(result, length(s));
for i := 1 to length(s) do
result[i-1] := s[i];
end;
 
{$ENDIF}
 
end.
 
/VCL_MARKDOWN
Property changes:
Added: svn:global-ignores
+*.dcu
/Levels/Level 1.lev
1,99 → 1,29
; SpaceMission 1.0
; LEV-File
1200
5
144
32
1
5
144
384
1
5
240
128
1
5
336
288
1
1
576
64
1
1
672
448
1
1
768
256
1
1
864
64
1
1
960
384
1
5
1104
128
1
5
1296
32
1
5
1296
192
1
1
1392
416
1
1
1440
384
1
1
1488
352
1
1
1536
320
1
1
1584
320
1
1
1632
320
1
4
1632
32
 
1
1680
320
1
4
1872
32
 
4
1968
256
 
4
1968
384
 
4
2112
96
 
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 1
Author Daniel Marschall
Width 1200
; Type XCoord YCoord Lives
Enemy 5 144 32 1
Enemy 5 144 384 1
Enemy 5 240 128 1
Enemy 5 336 288 1
Enemy 1 576 64 1
Enemy 1 672 448 1
Enemy 1 768 256 1
Enemy 1 864 64 1
Enemy 1 960 384 1
Enemy 5 1104 128 1
Enemy 5 1296 32 1
Enemy 5 1296 192 1
Enemy 1 1392 416 1
Enemy 1 1440 384 1
Enemy 1 1488 352 1
Enemy 1 1536 320 1
Enemy 1 1584 320 1
Enemy 4 1632 32 0
Enemy 1 1632 320 1
Enemy 1 1680 320 1
Enemy 4 1872 32 0
Enemy 4 1968 256 0
Enemy 4 1968 384 0
Enemy 4 2112 96 0
/Levels/Level 10.lev
1,147 → 1,41
; SpaceMission 1.0
; LEV-File
1200
4
192
32
 
4
336
288
 
4
384
96
 
5
480
416
3
5
480
224
3
5
480
32
3
6
480
128
3
6
480
320
3
4
624
64
 
4
720
352
 
1
864
64
3
1
864
352
3
1
864
224
3
1
864
192
3
4
1008
32
 
4
1056
256
 
4
1200
64
 
4
1248
288
 
6
1392
64
3
6
1392
352
3
6
1392
192
1
6
1392
224
1
4
1536
64
 
4
1536
384
 
4
1584
256
 
4
1680
128
 
5
1728
64
1
5
1728
352
1
4
2016
32
 
4
2016
320
 
4
2112
128
 
4
2304
32
 
4
2352
288
 
3
2688
224
8
1
2688
192
8
1
2688
256
8
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 10
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 4 192 32 0
Enemy 4 336 288 0
Enemy 4 384 96 0
Enemy 5 480 32 3
Enemy 6 480 128 3
Enemy 5 480 224 3
Enemy 6 480 320 3
Enemy 5 480 416 3
Enemy 4 624 64 0
Enemy 4 720 352 0
Enemy 1 864 64 3
Enemy 1 864 192 3
Enemy 1 864 224 3
Enemy 1 864 352 3
Enemy 4 1008 32 0
Enemy 4 1056 256 0
Enemy 4 1200 64 0
Enemy 4 1248 288 0
Enemy 6 1392 64 3
Enemy 6 1392 192 1
Enemy 6 1392 224 1
Enemy 6 1392 352 3
Enemy 4 1536 64 0
Enemy 4 1536 384 0
Enemy 4 1584 256 0
Enemy 4 1680 128 0
Enemy 5 1728 64 1
Enemy 5 1728 352 1
Enemy 4 2016 32 0
Enemy 4 2016 320 0
Enemy 4 2112 128 0
Enemy 4 2304 32 0
Enemy 4 2352 288 0
Enemy 1 2688 192 8
Enemy 3 2688 224 8
Enemy 1 2688 256 8
/Levels/Level 11.lev
1,139 → 1,39
; SpaceMission 1.0
; LEV-File
1200
1
48
192
1
1
96
256
1
5
240
160
1
5
240
288
6
5
240
128
3
5
288
32
1
3
432
256
1
5
480
352
3
5
528
128
3
3
528
64
3
5
816
32
4
2
864
384
4
2
1008
96
4
5
1008
160
4
3
1152
32
4
1
1152
384
4
1
1296
192
4
6
1344
160
4
6
1392
64
4
6
1392
320
4
3
1488
256
4
6
1584
384
4
2
1824
192
4
2
1872
384
4
2
1968
32
4
2
2208
416
4
2
2352
288
4
1
2496
384
1
2
2544
32
4
2
2736
352
4
6
2784
64
5
1
2784
192
1
6
3024
352
5
7
3360
256
7
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 11
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 1 48 192 1
Enemy 1 96 256 1
Enemy 5 240 128 3
Enemy 5 240 160 1
Enemy 5 240 288 6
Enemy 5 288 32 1
Enemy 3 432 256 1
Enemy 5 480 352 3
Enemy 3 528 64 3
Enemy 5 528 128 3
Enemy 5 816 32 4
Enemy 2 864 384 4
Enemy 2 1008 96 4
Enemy 5 1008 160 4
Enemy 3 1152 32 4
Enemy 1 1152 384 4
Enemy 1 1296 192 4
Enemy 6 1344 160 4
Enemy 6 1392 64 4
Enemy 6 1392 320 4
Enemy 3 1488 256 4
Enemy 6 1584 384 4
Enemy 2 1824 192 4
Enemy 2 1872 384 4
Enemy 2 1968 32 4
Enemy 2 2208 416 4
Enemy 2 2352 288 4
Enemy 1 2496 384 1
Enemy 2 2544 32 4
Enemy 2 2736 352 4
Enemy 6 2784 64 5
Enemy 1 2784 192 1
Enemy 6 3024 352 5
Enemy 7 3360 256 7
/Levels/Level 12.lev
1,131 → 1,37
; SpaceMission 1.0
; LEV-File
1200
4
288
32
 
4
384
416
 
1
480
96
3
1
480
320
3
2
480
160
3
2
480
256
3
3
480
224
3
3
480
192
3
1
480
128
3
1
480
288
3
4
528
64
 
4
672
288
 
4
912
64
 
4
1008
384
 
5
1056
160
3
6
1056
192
3
5
1056
224
3
4
1104
96
 
4
1296
32
 
4
1392
384
 
1
1536
224
3
1
1536
192
3
4
1632
64
 
4
1680
320
 
4
1872
32
 
4
1872
416
 
4
2160
384
 
4
2256
96
 
3
2256
224
9
6
2256
256
9
6
2256
192
9
4
2448
352
 
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 12
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 4 288 32 0
Enemy 4 384 416 0
Enemy 1 480 96 3
Enemy 1 480 128 3
Enemy 2 480 160 3
Enemy 3 480 192 3
Enemy 3 480 224 3
Enemy 2 480 256 3
Enemy 1 480 288 3
Enemy 1 480 320 3
Enemy 4 528 64 0
Enemy 4 672 288 0
Enemy 4 912 64 0
Enemy 4 1008 384 0
Enemy 5 1056 160 3
Enemy 6 1056 192 3
Enemy 5 1056 224 3
Enemy 4 1104 96 0
Enemy 4 1296 32 0
Enemy 4 1392 384 0
Enemy 1 1536 192 3
Enemy 1 1536 224 3
Enemy 4 1632 64 0
Enemy 4 1680 320 0
Enemy 4 1872 32 0
Enemy 4 1872 416 0
Enemy 4 2160 384 0
Enemy 4 2256 96 0
Enemy 6 2256 192 9
Enemy 3 2256 224 9
Enemy 6 2256 256 9
Enemy 4 2448 352 0
/Levels/Level 13.lev
1,107 → 1,31
; SpaceMission 1.0
; LEV-File
1200
1
336
32
4
1
336
224
4
1
336
416
4
4
336
256
 
4
384
160
 
2
432
32
4
2
432
224
4
2
432
416
4
3
528
32
4
3
528
224
4
3
528
416
4
4
528
352
 
4
672
32
 
4
720
320
 
4
960
256
 
4
1056
32
 
6
1104
160
4
6
1104
288
4
6
1104
224
4
4
1248
320
 
4
1392
64
 
1
1680
160
10
5
1680
192
10
1
1680
224
10
4
1824
96
 
4
1920
320
 
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 13
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 1 336 32 4
Enemy 1 336 224 4
Enemy 4 336 256 0
Enemy 1 336 416 4
Enemy 4 384 160 0
Enemy 2 432 32 4
Enemy 2 432 224 4
Enemy 2 432 416 4
Enemy 3 528 32 4
Enemy 3 528 224 4
Enemy 4 528 352 0
Enemy 3 528 416 4
Enemy 4 672 32 0
Enemy 4 720 320 0
Enemy 4 960 256 0
Enemy 4 1056 32 0
Enemy 6 1104 160 4
Enemy 6 1104 224 4
Enemy 6 1104 288 4
Enemy 4 1248 320 0
Enemy 4 1392 64 0
Enemy 1 1680 160 10
Enemy 5 1680 192 10
Enemy 1 1680 224 10
Enemy 4 1824 96 0
Enemy 4 1920 320 0
/Levels/Level 14.lev
1,223 → 1,60
; SpaceMission 1.0
; LEV-File
1200
1
96
224
4
1
240
384
4
1
336
32
4
1
576
160
4
5
672
128
4
5
768
320
4
5
864
128
4
5
1104
32
4
3
1104
224
4
5
1152
416
4
1
1296
96
3
1
1392
352
3
6
1440
192
3
6
1632
32
3
5
1632
416
4
3
1680
128
4
3
1776
224
4
3
1824
32
4
5
1872
320
4
2
1968
96
4
5
1968
320
4
2
2112
160
4
6
2256
416
4
6
2256
384
4
3
2352
32
4
3
2352
192
4
6
2400
384
4
6
2400
448
4
3
2544
96
4
3
2688
384
4
2
2736
64
4
2
2832
160
4
2
3024
32
4
5
3072
224
4
5
3264
352
5
6
3312
64
4
6
3408
384
4
5
3504
160
5
6
3552
224
4
6
3648
384
4
6
3648
64
4
6
3744
256
4
6
3840
448
4
5
3888
64
5
5
4032
352
5
5
4128
192
5
6
4176
448
4
5
4224
32
5
2
4272
160
5
1
4416
320
3
1
4464
32
3
2
4608
416
1
2
4656
256
1
2
4656
64
1
7
5184
224
8
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 14
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 1 96 224 4
Enemy 1 240 384 4
Enemy 1 336 32 4
Enemy 1 576 160 4
Enemy 5 672 128 4
Enemy 5 768 320 4
Enemy 5 864 128 4
Enemy 5 1104 32 4
Enemy 3 1104 224 4
Enemy 5 1152 416 4
Enemy 1 1296 96 3
Enemy 1 1392 352 3
Enemy 6 1440 192 3
Enemy 6 1632 32 3
Enemy 5 1632 416 4
Enemy 3 1680 128 4
Enemy 3 1776 224 4
Enemy 3 1824 32 4
Enemy 5 1872 320 4
Enemy 2 1968 96 4
Enemy 5 1968 320 4
Enemy 2 2112 160 4
Enemy 6 2256 384 4
Enemy 6 2256 416 4
Enemy 3 2352 32 4
Enemy 3 2352 192 4
Enemy 6 2400 384 4
Enemy 6 2400 448 4
Enemy 3 2544 96 4
Enemy 3 2688 384 4
Enemy 2 2736 64 4
Enemy 2 2832 160 4
Enemy 2 3024 32 4
Enemy 5 3072 224 4
Enemy 5 3264 352 5
Enemy 6 3312 64 4
Enemy 6 3408 384 4
Enemy 5 3504 160 5
Enemy 6 3552 224 4
Enemy 6 3648 64 4
Enemy 6 3648 384 4
Enemy 6 3744 256 4
Enemy 6 3840 448 4
Enemy 5 3888 64 5
Enemy 5 4032 352 5
Enemy 5 4128 192 5
Enemy 6 4176 448 4
Enemy 5 4224 32 5
Enemy 2 4272 160 5
Enemy 1 4416 320 3
Enemy 1 4464 32 3
Enemy 2 4608 416 1
Enemy 2 4656 64 1
Enemy 2 4656 256 1
Enemy 7 5184 224 8
/Levels/Level 15.lev
1,203 → 1,55
; SpaceMission 1.0
; LEV-File
1200
3
 
64
6
3
192
224
6
3
432
96
6
3
432
352
6
4
528
64
 
4
624
288
 
3
672
256
6
4
768
416
 
4
768
32
 
3
1008
160
6
3
1056
352
6
3
1152
96
9
3
1152
320
9
1
1344
128
9
1
1440
352
9
6
1440
64
9
6
1632
32
9
6
1776
160
9
6
1872
64
9
6
2064
416
9
6
2112
128
9
6
2160
320
9
3
2208
32
9
3
2256
416
9
2
2448
160
9
4
2496
96
 
2
2640
160
9
2
2640
192
9
4
2688
416
 
5
2832
160
9
2
2880
64
9
4
2976
448
 
5
3120
288
9
5
3216
96
9
6
3216
384
9
6
3360
64
9
6
3408
192
9
6
3456
384
9
1
3648
64
9
1
3696
384
9
1
3744
128
9
1
3936
64
9
1
3936
256
9
6
4128
160
9
6
4272
96
9
6
4272
448
9
1
4368
320
9
1
4416
32
14
1
4464
224
9
7
5232
224
14
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 15
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 3 0 64 6
Enemy 3 192 224 6
Enemy 3 432 96 6
Enemy 3 432 352 6
Enemy 4 528 64 0
Enemy 4 624 288 0
Enemy 3 672 256 6
Enemy 4 768 32 0
Enemy 4 768 416 0
Enemy 3 1008 160 6
Enemy 3 1056 352 6
Enemy 3 1152 96 9
Enemy 3 1152 320 9
Enemy 1 1344 128 9
Enemy 6 1440 64 9
Enemy 1 1440 352 9
Enemy 6 1632 32 9
Enemy 6 1776 160 9
Enemy 6 1872 64 9
Enemy 6 2064 416 9
Enemy 6 2112 128 9
Enemy 6 2160 320 9
Enemy 3 2208 32 9
Enemy 3 2256 416 9
Enemy 2 2448 160 9
Enemy 4 2496 96 0
Enemy 2 2640 160 9
Enemy 2 2640 192 9
Enemy 4 2688 416 0
Enemy 5 2832 160 9
Enemy 2 2880 64 9
Enemy 4 2976 448 0
Enemy 5 3120 288 9
Enemy 5 3216 96 9
Enemy 6 3216 384 9
Enemy 6 3360 64 9
Enemy 6 3408 192 9
Enemy 6 3456 384 9
Enemy 1 3648 64 9
Enemy 1 3696 384 9
Enemy 1 3744 128 9
Enemy 1 3936 64 9
Enemy 1 3936 256 9
Enemy 6 4128 160 9
Enemy 6 4272 96 9
Enemy 6 4272 448 9
Enemy 1 4368 320 9
Enemy 1 4416 32 14
Enemy 1 4464 224 9
Enemy 7 5232 224 14
/Levels/Level 16.lev
1,303 → 1,80
; SpaceMission 1.0
; LEV-File
1200
4
192
64
 
4
192
384
 
4
240
256
 
1
384
32
1
1
384
416
1
1
384
224
1
1
384
288
1
1
384
160
1
1
432
64
1
1
432
384
1
1
432
224
1
1
432
256
1
1
432
192
1
4
576
160
 
4
576
416
 
4
624
32
 
2
768
32
1
2
768
160
1
2
768
224
1
2
768
288
1
2
768
416
1
2
816
64
1
2
816
192
1
2
816
224
1
2
816
256
1
2
816
384
1
4
912
64
 
4
960
384
 
4
1152
160
 
3
1200
32
1
3
1200
160
1
3
1200
288
1
3
1200
224
1
3
1200
416
1
3
1248
64
1
3
1248
192
1
3
1248
224
1
3
1248
256
1
3
1248
384
1
4
1488
32
 
4
1536
256
 
4
1584
352
 
5
1776
32
1
5
1776
160
1
5
1776
288
1
5
1776
224
1
5
1776
416
1
5
1824
64
1
5
1824
192
1
5
1824
224
1
5
1824
256
1
5
1824
384
1
4
1968
32
 
4
2064
96
 
4
2112
224
 
4
2112
288
 
6
2256
32
1
6
2256
160
1
6
2256
288
1
6
2256
224
1
6
2256
416
1
6
2304
64
1
6
2304
192
1
6
2304
224
1
6
2304
256
1
6
2304
384
1
4
2496
64
 
4
2496
384
 
4
2640
224
 
5
2832
192
15
5
2832
224
15
5
2832
256
15
5
2832
288
15
5
2832
320
15
5
2832
160
15
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 16
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 4 192 64 0
Enemy 4 192 384 0
Enemy 4 240 256 0
Enemy 1 384 32 1
Enemy 1 384 160 1
Enemy 1 384 224 1
Enemy 1 384 288 1
Enemy 1 384 416 1
Enemy 1 432 64 1
Enemy 1 432 192 1
Enemy 1 432 224 1
Enemy 1 432 256 1
Enemy 1 432 384 1
Enemy 4 576 160 0
Enemy 4 576 416 0
Enemy 4 624 32 0
Enemy 2 768 32 1
Enemy 2 768 160 1
Enemy 2 768 224 1
Enemy 2 768 288 1
Enemy 2 768 416 1
Enemy 2 816 64 1
Enemy 2 816 192 1
Enemy 2 816 224 1
Enemy 2 816 256 1
Enemy 2 816 384 1
Enemy 4 912 64 0
Enemy 4 960 384 0
Enemy 4 1152 160 0
Enemy 3 1200 32 1
Enemy 3 1200 160 1
Enemy 3 1200 224 1
Enemy 3 1200 288 1
Enemy 3 1200 416 1
Enemy 3 1248 64 1
Enemy 3 1248 192 1
Enemy 3 1248 224 1
Enemy 3 1248 256 1
Enemy 3 1248 384 1
Enemy 4 1488 32 0
Enemy 4 1536 256 0
Enemy 4 1584 352 0
Enemy 5 1776 32 1
Enemy 5 1776 160 1
Enemy 5 1776 224 1
Enemy 5 1776 288 1
Enemy 5 1776 416 1
Enemy 5 1824 64 1
Enemy 5 1824 192 1
Enemy 5 1824 224 1
Enemy 5 1824 256 1
Enemy 5 1824 384 1
Enemy 4 1968 32 0
Enemy 4 2064 96 0
Enemy 4 2112 224 0
Enemy 4 2112 288 0
Enemy 6 2256 32 1
Enemy 6 2256 160 1
Enemy 6 2256 224 1
Enemy 6 2256 288 1
Enemy 6 2256 416 1
Enemy 6 2304 64 1
Enemy 6 2304 192 1
Enemy 6 2304 224 1
Enemy 6 2304 256 1
Enemy 6 2304 384 1
Enemy 4 2496 64 0
Enemy 4 2496 384 0
Enemy 4 2640 224 0
Enemy 5 2832 160 15
Enemy 5 2832 192 15
Enemy 5 2832 224 15
Enemy 5 2832 256 15
Enemy 5 2832 288 15
Enemy 5 2832 320 15
/Levels/Level 17.lev
1,171 → 1,47
; SpaceMission 1.0
; LEV-File
1200
3
144
128
1
3
336
352
1
4
432
128
 
4
480
 
 
3
528
224
12
3
768
64
12
4
768
192
 
3
864
416
12
3
912
96
12
4
912
192
 
5
1152
160
12
5
1200
384
12
3
1248
256
12
3
1296
64
12
4
1392
320
 
4
1392
64
 
4
1536
224
 
5
1536
416
12
4
1584
32
 
3
1632
352
12
3
1632
192
12
3
1872
160
12
3
2064
320
12
1
2304
64
12
1
2400
448
12
1
2496
224
12
5
2592
32
14
5
2784
256
12
5
2784
32
14
5
2832
384
12
2
2976
384
16
2
3024
256
16
4
3072
96
 
4
3216
320
 
4
3312
96
 
4
3360
288
 
2
3408
32
16
2
3504
448
16
2
3648
192
12
2
3648
320
12
3
3648
32
12
7
4368
256
16
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 17
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 3 144 128 1
Enemy 3 336 352 1
Enemy 4 432 128 0
Enemy 4 480 0 0
Enemy 3 528 224 12
Enemy 3 768 64 12
Enemy 4 768 192 0
Enemy 3 864 416 12
Enemy 3 912 96 12
Enemy 4 912 192 0
Enemy 5 1152 160 12
Enemy 5 1200 384 12
Enemy 3 1248 256 12
Enemy 3 1296 64 12
Enemy 4 1392 64 0
Enemy 4 1392 320 0
Enemy 4 1536 224 0
Enemy 5 1536 416 12
Enemy 4 1584 32 0
Enemy 3 1632 192 12
Enemy 3 1632 352 12
Enemy 3 1872 160 12
Enemy 3 2064 320 12
Enemy 1 2304 64 12
Enemy 1 2400 448 12
Enemy 1 2496 224 12
Enemy 5 2592 32 14
Enemy 5 2784 32 14
Enemy 5 2784 256 12
Enemy 5 2832 384 12
Enemy 2 2976 384 16
Enemy 2 3024 256 16
Enemy 4 3072 96 0
Enemy 4 3216 320 0
Enemy 4 3312 96 0
Enemy 4 3360 288 0
Enemy 2 3408 32 16
Enemy 2 3504 448 16
Enemy 3 3648 32 12
Enemy 2 3648 192 12
Enemy 2 3648 320 12
Enemy 7 4368 256 16
/Levels/Level 18.lev
1,255 → 1,68
; SpaceMission 1.0
; LEV-File
1200
6
144
160
1
6
192
384
1
6
240
32
1
6
336
160
1
6
384
384
1
6
480
192
1
2
672
96
1
2
720
32
1
3
1008
352
3
3
1248
448
3
3
1392
128
3
5
1536
352
5
5
1584
64
5
5
1632
416
5
5
1680
352
5
5
1728
64
5
5
1824
448
5
6
2064
32
6
6
2064
128
6
6
2064
256
6
3
2976
64
5
3
3024
160
5
3
3024
288
5
3
3120
384
5
2
3456
32
5
2
3456
128
5
2
3552
416
5
5
3744
160
3
5
3936
96
3
5
3984
384
3
1
4368
256
3
1
4416
32
3
1
4416
416
3
6
4800
448
9
6
4896
128
3
6
5040
448
6
6
5040
32
6
3
5328
64
2
3
5472
256
1
3
5472
160
1
3
5472
320
1
1
5904
448
8
1
5904
416
8
1
5904
384
8
1
5904
320
8
1
5904
352
8
1
5904
288
8
1
6000
320
8
1
6000
352
8
1
6000
384
8
1
6000
416
8
1
6000
448
8
1
6000
288
8
1
6048
448
8
1
6048
288
8
1
6048
352
8
1
6048
384
8
1
6096
320
8
1
6096
352
8
1
6096
384
8
1
6096
416
8
1
6096
448
8
1
6096
288
8
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 18
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 6 144 160 1
Enemy 6 192 384 1
Enemy 6 240 32 1
Enemy 6 336 160 1
Enemy 6 384 384 1
Enemy 6 480 192 1
Enemy 2 672 96 1
Enemy 2 720 32 1
Enemy 3 1008 352 3
Enemy 3 1248 448 3
Enemy 3 1392 128 3
Enemy 5 1536 352 5
Enemy 5 1584 64 5
Enemy 5 1632 416 5
Enemy 5 1680 352 5
Enemy 5 1728 64 5
Enemy 5 1824 448 5
Enemy 6 2064 32 6
Enemy 6 2064 128 6
Enemy 6 2064 256 6
Enemy 3 2976 64 5
Enemy 3 3024 160 5
Enemy 3 3024 288 5
Enemy 3 3120 384 5
Enemy 2 3456 32 5
Enemy 2 3456 128 5
Enemy 2 3552 416 5
Enemy 5 3744 160 3
Enemy 5 3936 96 3
Enemy 5 3984 384 3
Enemy 1 4368 256 3
Enemy 1 4416 32 3
Enemy 1 4416 416 3
Enemy 6 4800 448 9
Enemy 6 4896 128 3
Enemy 6 5040 32 6
Enemy 6 5040 448 6
Enemy 3 5328 64 2
Enemy 3 5472 160 1
Enemy 3 5472 256 1
Enemy 3 5472 320 1
Enemy 1 5904 288 8
Enemy 1 5904 320 8
Enemy 1 5904 352 8
Enemy 1 5904 384 8
Enemy 1 5904 416 8
Enemy 1 5904 448 8
Enemy 1 6000 288 8
Enemy 1 6000 320 8
Enemy 1 6000 352 8
Enemy 1 6000 384 8
Enemy 1 6000 416 8
Enemy 1 6000 448 8
Enemy 1 6048 288 8
Enemy 1 6048 352 8
Enemy 1 6048 384 8
Enemy 1 6048 448 8
Enemy 1 6096 288 8
Enemy 1 6096 320 8
Enemy 1 6096 352 8
Enemy 1 6096 384 8
Enemy 1 6096 416 8
Enemy 1 6096 448 8
/Levels/Level 19.lev
1,263 → 1,70
; SpaceMission 1.0
; LEV-File
1200
1
240
128
1
1
288
64
1
1
480
288
1
1
528
64
1
5
720
128
7
5
864
320
7
5
912
416
7
5
960
32
7
6
1200
352
7
6
1296
 
7
6
1296
256
7
6
1392
416
7
6
1488
96
7
2
1728
384
7
2
1824
224
7
2
1872
448
7
4
2304
128
 
4
2304
352
 
2
2688
352
7
4
2736
64
 
6
2832
448
7
6
2832
 
7
3
3072
320
7
3
3168
160
7
3
3168
384
7
5
3456
32
7
5
3600
416
7
4
3696
224
 
4
3792
416
 
4
3840
64
 
3
4032
320
7
3
4032
448
7
3
4080
96
7
4
4176
448
 
1
4416
192
7
1
4608
96
7
1
4608
416
7
3
4704
288
5
5
4896
64
5
1
4944
448
5
3
4992
416
5
5
5184
32
5
5
5184
96
5
5
5232
224
5
2
5952
64
5
2
5952
96
5
2
5952
224
5
2
5952
416
5
2
6048
416
5
6
6240
128
5
6
6240
192
5
6
6240
416
5
6
6288
416
5
6
6288
384
5
4
6384
64
 
4
6480
128
 
4
6528
256
 
6
6576
32
7
6
6672
96
7
6
6672
256
7
5
6816
 
7
5
6864
96
7
5
6960
384
7
5
7104
416
7
7
7296
256
16
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 19
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 1 240 128 1
Enemy 1 288 64 1
Enemy 1 480 288 1
Enemy 1 528 64 1
Enemy 5 720 128 7
Enemy 5 864 320 7
Enemy 5 912 416 7
Enemy 5 960 32 7
Enemy 6 1200 352 7
Enemy 6 1296 0 7
Enemy 6 1296 256 7
Enemy 6 1392 416 7
Enemy 6 1488 96 7
Enemy 2 1728 384 7
Enemy 2 1824 224 7
Enemy 2 1872 448 7
Enemy 4 2304 128 0
Enemy 4 2304 352 0
Enemy 2 2688 352 7
Enemy 4 2736 64 0
Enemy 6 2832 0 7
Enemy 6 2832 448 7
Enemy 3 3072 320 7
Enemy 3 3168 160 7
Enemy 3 3168 384 7
Enemy 5 3456 32 7
Enemy 5 3600 416 7
Enemy 4 3696 224 0
Enemy 4 3792 416 0
Enemy 4 3840 64 0
Enemy 3 4032 320 7
Enemy 3 4032 448 7
Enemy 3 4080 96 7
Enemy 4 4176 448 0
Enemy 1 4416 192 7
Enemy 1 4608 96 7
Enemy 1 4608 416 7
Enemy 3 4704 288 5
Enemy 5 4896 64 5
Enemy 1 4944 448 5
Enemy 3 4992 416 5
Enemy 5 5184 32 5
Enemy 5 5184 96 5
Enemy 5 5232 224 5
Enemy 2 5952 64 5
Enemy 2 5952 96 5
Enemy 2 5952 224 5
Enemy 2 5952 416 5
Enemy 2 6048 416 5
Enemy 6 6240 128 5
Enemy 6 6240 192 5
Enemy 6 6240 416 5
Enemy 6 6288 384 5
Enemy 6 6288 416 5
Enemy 4 6384 64 0
Enemy 4 6480 128 0
Enemy 4 6528 256 0
Enemy 6 6576 32 7
Enemy 6 6672 96 7
Enemy 6 6672 256 7
Enemy 5 6816 0 7
Enemy 5 6864 96 7
Enemy 5 6960 384 7
Enemy 5 7104 416 7
Enemy 7 7296 256 16
/Levels/Level 2.lev
1,79 → 1,24
; SpaceMission 1.0
; LEV-File
1200
1
432
64
1
1
432
384
1
1
432
224
1
1
912
64
1
1
912
384
1
1
912
224
1
1
1392
64
1
1
1392
224
1
1
1392
384
1
1
1872
64
1
1
1872
224
1
1
1872
384
1
5
2256
128
1
5
2400
320
1
5
2496
64
1
5
2544
256
1
3
3120
192
3
3
3120
224
3
3
3120
256
3
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 2
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 1 432 64 1
Enemy 1 432 224 1
Enemy 1 432 384 1
Enemy 1 912 64 1
Enemy 1 912 224 1
Enemy 1 912 384 1
Enemy 1 1392 64 1
Enemy 1 1392 224 1
Enemy 1 1392 384 1
Enemy 1 1872 64 1
Enemy 1 1872 224 1
Enemy 1 1872 384 1
Enemy 5 2256 128 1
Enemy 5 2400 320 1
Enemy 5 2496 64 1
Enemy 5 2544 256 1
Enemy 3 3120 192 3
Enemy 3 3120 224 3
Enemy 3 3120 256 3
/Levels/Level 20.lev
1,195 → 1,53
; SpaceMission 1.0
; LEV-File
1200
1
96
352
1
1
240
224
1
1
528
32
1
1
576
416
1
1
624
448
8
1
960
 
8
1
1008
448
8
1
1104
256
8
1
1296
448
8
1
1344
 
8
5
1632
416
8
5
1776
32
8
5
1872
224
8
5
2064
448
8
5
2064
64
8
5
2112
288
8
2
2160
96
1
2
2448
288
1
2
2544
96
1
2
2640
448
1
6
2880
 
8
6
2880
448
8
6
3024
384
8
6
3024
96
8
4
3024
32
 
4
3120
416
 
4
3408
64
 
6
3456
256
8
3
3696
160
5
1
4080
352
5
1
4224
64
5
1
4320
288
5
1
4464
160
5
1
4608
448
5
1
4704
288
1
1
4848
96
1
3
4992
64
1
3
4992
384
6
3
5088
256
1
6
5472
416
6
4
5616
224
 
6
5616
448
6
4
5712
32
 
6
5712
416
6
4
5808
416
 
6
5952
96
6
7
6000
224
6
6
6000
128
6
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 20
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 1 96 352 1
Enemy 1 240 224 1
Enemy 1 528 32 1
Enemy 1 576 416 1
Enemy 1 624 448 8
Enemy 1 960 0 8
Enemy 1 1008 448 8
Enemy 1 1104 256 8
Enemy 1 1296 448 8
Enemy 1 1344 0 8
Enemy 5 1632 416 8
Enemy 5 1776 32 8
Enemy 5 1872 224 8
Enemy 5 2064 64 8
Enemy 5 2064 448 8
Enemy 5 2112 288 8
Enemy 2 2160 96 1
Enemy 2 2448 288 1
Enemy 2 2544 96 1
Enemy 2 2640 448 1
Enemy 6 2880 0 8
Enemy 6 2880 448 8
Enemy 4 3024 32 0
Enemy 6 3024 96 8
Enemy 6 3024 384 8
Enemy 4 3120 416 0
Enemy 4 3408 64 0
Enemy 6 3456 256 8
Enemy 3 3696 160 5
Enemy 1 4080 352 5
Enemy 1 4224 64 5
Enemy 1 4320 288 5
Enemy 1 4464 160 5
Enemy 1 4608 448 5
Enemy 1 4704 288 1
Enemy 1 4848 96 1
Enemy 3 4992 64 1
Enemy 3 4992 384 6
Enemy 3 5088 256 1
Enemy 6 5472 416 6
Enemy 4 5616 224 0
Enemy 6 5616 448 6
Enemy 4 5712 32 0
Enemy 6 5712 416 6
Enemy 4 5808 416 0
Enemy 6 5952 96 6
Enemy 6 6000 128 6
Enemy 7 6000 224 6
/Levels/Level 21.lev
1,183 → 1,50
; SpaceMission 1.0
; LEV-File
1200
6
96
64
10
6
240
320
10
6
432
224
10
4
432
32
 
4
528
352
 
5
768
384
14
5
816
128
14
5
816
320
14
5
816
384
14
5
864
352
14
5
960
416
14
5
960
384
14
5
1104
384
14
5
1104
96
14
3
1104
256
14
3
1824
416
7
3
2016
96
7
3
2016
256
7
3
2304
32
7
3
2304
128
7
3
2304
352
1
2
2592
224
7
2
2640
192
7
2
2640
256
7
2
2688
256
7
2
2688
192
7
2
2736
224
7
3
2928
448
1
2
3120
448
6
2
3456
448
6
2
3504
32
6
5
3504
128
6
2
3600
448
6
2
3696
448
6
2
3696
384
6
5
3744
128
6
6
3792
256
3
6
3840
288
3
6
3936
224
3
6
4128
192
3
3
4272
32
3
3
4272
160
3
3
4464
416
3
3
4608
192
3
3
4656
352
3
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 21
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 6 96 64 10
Enemy 6 240 320 10
Enemy 4 432 32 0
Enemy 6 432 224 10
Enemy 4 528 352 0
Enemy 5 768 384 14
Enemy 5 816 128 14
Enemy 5 816 320 14
Enemy 5 816 384 14
Enemy 5 864 352 14
Enemy 5 960 384 14
Enemy 5 960 416 14
Enemy 5 1104 96 14
Enemy 3 1104 256 14
Enemy 5 1104 384 14
Enemy 3 1824 416 7
Enemy 3 2016 96 7
Enemy 3 2016 256 7
Enemy 3 2304 32 7
Enemy 3 2304 128 7
Enemy 3 2304 352 1
Enemy 2 2592 224 7
Enemy 2 2640 192 7
Enemy 2 2640 256 7
Enemy 2 2688 192 7
Enemy 2 2688 256 7
Enemy 2 2736 224 7
Enemy 3 2928 448 1
Enemy 2 3120 448 6
Enemy 2 3456 448 6
Enemy 2 3504 32 6
Enemy 5 3504 128 6
Enemy 2 3600 448 6
Enemy 2 3696 384 6
Enemy 2 3696 448 6
Enemy 5 3744 128 6
Enemy 6 3792 256 3
Enemy 6 3840 288 3
Enemy 6 3936 224 3
Enemy 6 4128 192 3
Enemy 3 4272 32 3
Enemy 3 4272 160 3
Enemy 3 4464 416 3
Enemy 3 4608 192 3
Enemy 3 4656 352 3
/Levels/Level 22.lev
1,255 → 1,68
; SpaceMission 1.0
; LEV-File
1200
1
384
32
1
1
384
64
1
1
384
96
1
1
384
416
1
1
384
384
1
1
384
352
1
5
384
192
1
5
384
224
1
5
384
256
1
6
432
192
1
6
432
224
1
6
432
256
1
2
432
32
1
2
432
64
1
2
432
96
1
2
432
352
1
2
432
384
1
2
432
416
1
5
480
192
1
5
480
224
1
5
480
256
1
3
480
32
1
3
480
96
1
3
480
64
1
3
480
352
1
3
480
384
1
3
480
416
1
1
576
32
1
1
576
64
1
1
576
96
1
1
576
352
1
1
576
384
1
1
576
416
1
5
576
192
1
5
576
224
1
5
576
256
1
6
624
192
1
6
624
224
1
6
624
256
1
2
624
32
1
2
624
64
1
2
624
96
1
2
624
352
1
2
624
384
1
2
624
416
1
3
672
32
1
3
672
64
1
3
672
96
1
3
672
352
1
3
672
384
1
3
672
416
1
5
672
192
1
5
672
224
1
5
672
256
1
4
960
96
 
4
1056
32
 
4
1056
320
 
4
1200
256
 
4
1248
384
 
4
1392
288
 
4
1488
64
 
4
1680
384
 
3
1728
224
10
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 22
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 1 384 32 1
Enemy 1 384 64 1
Enemy 1 384 96 1
Enemy 5 384 192 1
Enemy 5 384 224 1
Enemy 5 384 256 1
Enemy 1 384 352 1
Enemy 1 384 384 1
Enemy 1 384 416 1
Enemy 2 432 32 1
Enemy 2 432 64 1
Enemy 2 432 96 1
Enemy 6 432 192 1
Enemy 6 432 224 1
Enemy 6 432 256 1
Enemy 2 432 352 1
Enemy 2 432 384 1
Enemy 2 432 416 1
Enemy 3 480 32 1
Enemy 3 480 64 1
Enemy 3 480 96 1
Enemy 5 480 192 1
Enemy 5 480 224 1
Enemy 5 480 256 1
Enemy 3 480 352 1
Enemy 3 480 384 1
Enemy 3 480 416 1
Enemy 1 576 32 1
Enemy 1 576 64 1
Enemy 1 576 96 1
Enemy 5 576 192 1
Enemy 5 576 224 1
Enemy 5 576 256 1
Enemy 1 576 352 1
Enemy 1 576 384 1
Enemy 1 576 416 1
Enemy 2 624 32 1
Enemy 2 624 64 1
Enemy 2 624 96 1
Enemy 6 624 192 1
Enemy 6 624 224 1
Enemy 6 624 256 1
Enemy 2 624 352 1
Enemy 2 624 384 1
Enemy 2 624 416 1
Enemy 3 672 32 1
Enemy 3 672 64 1
Enemy 3 672 96 1
Enemy 5 672 192 1
Enemy 5 672 224 1
Enemy 5 672 256 1
Enemy 3 672 352 1
Enemy 3 672 384 1
Enemy 3 672 416 1
Enemy 4 960 96 0
Enemy 4 1056 32 0
Enemy 4 1056 320 0
Enemy 4 1200 256 0
Enemy 4 1248 384 0
Enemy 4 1392 288 0
Enemy 4 1488 64 0
Enemy 4 1680 384 0
Enemy 3 1728 224 10
/Levels/Level 23.lev
1,251 → 1,67
; SpaceMission 1.0
; LEV-File
1200
7
432
224
12
3
768
64
40
3
816
256
40
3
864
384
40
5
1056
96
40
5
1248
416
15
5
1296
32
40
5
1296
128
40
2
1440
256
15
2
2160
128
15
2
2208
352
15
2
2256
64
15
2
2304
288
15
2
2352
 
15
2
2352
224
15
2
2496
352
15
6
2928
320
3
6
2928
256
3
6
2928
224
3
6
2928
288
3
6
2928
192
3
6
2928
160
3
6
2928
128
3
6
2976
128
3
6
2976
224
3
6
3024
128
3
6
3024
224
3
6
3072
128
3
6
3072
160
3
6
3072
192
3
6
3072
224
3
6
3072
288
3
6
3072
256
3
6
3072
320
3
6
3216
192
3
6
3216
224
3
6
3216
256
3
6
3216
288
3
6
3216
320
3
6
3264
224
3
6
3312
224
3
6
3312
256
3
6
3312
288
3
6
3312
320
3
6
3408
224
3
6
3408
256
3
6
3408
320
3
6
3408
288
3
6
3456
224
3
6
3456
320
3
6
3504
224
3
6
3504
320
3
6
3504
128
3
6
3504
160
3
6
3504
192
3
6
3504
256
3
6
3504
288
3
6
3600
224
3
6
3600
256
3
6
3600
288
3
6
3600
320
3
6
3600
160
3
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 23
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 7 432 224 12
Enemy 3 768 64 40
Enemy 3 816 256 40
Enemy 3 864 384 40
Enemy 5 1056 96 40
Enemy 5 1248 416 15
Enemy 5 1296 32 40
Enemy 5 1296 128 40
Enemy 2 1440 256 15
Enemy 2 2160 128 15
Enemy 2 2208 352 15
Enemy 2 2256 64 15
Enemy 2 2304 288 15
Enemy 2 2352 0 15
Enemy 2 2352 224 15
Enemy 2 2496 352 15
Enemy 6 2928 128 3
Enemy 6 2928 160 3
Enemy 6 2928 192 3
Enemy 6 2928 224 3
Enemy 6 2928 256 3
Enemy 6 2928 288 3
Enemy 6 2928 320 3
Enemy 6 2976 128 3
Enemy 6 2976 224 3
Enemy 6 3024 128 3
Enemy 6 3024 224 3
Enemy 6 3072 128 3
Enemy 6 3072 160 3
Enemy 6 3072 192 3
Enemy 6 3072 224 3
Enemy 6 3072 256 3
Enemy 6 3072 288 3
Enemy 6 3072 320 3
Enemy 6 3216 192 3
Enemy 6 3216 224 3
Enemy 6 3216 256 3
Enemy 6 3216 288 3
Enemy 6 3216 320 3
Enemy 6 3264 224 3
Enemy 6 3312 224 3
Enemy 6 3312 256 3
Enemy 6 3312 288 3
Enemy 6 3312 320 3
Enemy 6 3408 224 3
Enemy 6 3408 256 3
Enemy 6 3408 288 3
Enemy 6 3408 320 3
Enemy 6 3456 224 3
Enemy 6 3456 320 3
Enemy 6 3504 128 3
Enemy 6 3504 160 3
Enemy 6 3504 192 3
Enemy 6 3504 224 3
Enemy 6 3504 256 3
Enemy 6 3504 288 3
Enemy 6 3504 320 3
Enemy 6 3600 160 3
Enemy 6 3600 224 3
Enemy 6 3600 256 3
Enemy 6 3600 288 3
Enemy 6 3600 320 3
/Levels/Level 24.lev
1,403 → 1,105
; SpaceMission 1.0
; LEV-File
1200
1
192
64
1
1
288
192
1
1
288
352
1
1
288
64
1
1
336
256
1
1
384
160
1
1
432
352
1
1
816
384
16
1
864
384
16
1
864
352
16
1
912
320
16
1
912
288
16
1
960
288
16
1
1008
288
16
1
1056
256
16
1
1104
192
16
1
1152
160
16
1
1152
96
16
1
1296
448
16
4
1968
 
 
4
2016
128
 
4
2016
416
 
6
2016
352
8
6
2064
352
8
6
2064
224
8
4
2112
128
 
4
2160
96
 
4
2160
32
 
4
2160
160
 
6
2160
288
8
4
2208
32
 
4
2208
416
 
6
2256
320
8
4
2304
192
 
4
2304
416
 
6
2304
288
8
6
2304
352
8
4
2352
96
 
6
2496
192
8
6
2544
64
8
6
2544
160
8
6
2544
320
8
6
2592
128
8
6
2640
192
8
6
2640
128
8
6
2688
128
8
6
2736
256
8
6
2784
384
8
6
2880
352
8
6
2880
96
8
6
2880
128
8
6
2928
224
8
6
2976
384
8
6
2976
64
8
6
3168
32
12
6
3216
32
12
6
3264
32
12
6
3312
32
12
6
3360
32
12
6
3360
96
12
6
3360
160
12
6
3408
288
12
6
3456
352
12
6
3456
384
12
6
3456
448
12
6
3504
416
12
6
3552
416
12
6
3552
448
12
6
3600
448
12
1
3936
352
12
1
3936
416
12
1
3984
288
12
1
3984
128
12
1
4032
64
12
1
4080
160
12
6
4128
 
2
6
4128
32
2
6
4128
256
2
6
4128
352
2
6
4128
416
2
6
4128
384
2
6
4176
96
2
6
4176
384
2
6
4176
224
2
6
4176
160
2
6
4224
224
2
5
4320
64
3
5
4320
128
3
5
4368
 
3
5
4368
192
3
5
4368
288
3
5
4368
352
3
5
4368
416
3
2
4752
96
9
2
4752
192
9
2
4800
32
9
2
4800
288
9
2
4896
352
9
2
4992
352
9
2
4992
32
9
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 24
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 1 192 64 1
Enemy 1 288 64 1
Enemy 1 288 192 1
Enemy 1 288 352 1
Enemy 1 336 256 1
Enemy 1 384 160 1
Enemy 1 432 352 1
Enemy 1 816 384 16
Enemy 1 864 352 16
Enemy 1 864 384 16
Enemy 1 912 288 16
Enemy 1 912 320 16
Enemy 1 960 288 16
Enemy 1 1008 288 16
Enemy 1 1056 256 16
Enemy 1 1104 192 16
Enemy 1 1152 96 16
Enemy 1 1152 160 16
Enemy 1 1296 448 16
Enemy 4 1968 0 0
Enemy 4 2016 128 0
Enemy 6 2016 352 8
Enemy 4 2016 416 0
Enemy 6 2064 224 8
Enemy 6 2064 352 8
Enemy 4 2112 128 0
Enemy 4 2160 32 0
Enemy 4 2160 96 0
Enemy 4 2160 160 0
Enemy 6 2160 288 8
Enemy 4 2208 32 0
Enemy 4 2208 416 0
Enemy 6 2256 320 8
Enemy 4 2304 192 0
Enemy 6 2304 288 8
Enemy 6 2304 352 8
Enemy 4 2304 416 0
Enemy 4 2352 96 0
Enemy 6 2496 192 8
Enemy 6 2544 64 8
Enemy 6 2544 160 8
Enemy 6 2544 320 8
Enemy 6 2592 128 8
Enemy 6 2640 128 8
Enemy 6 2640 192 8
Enemy 6 2688 128 8
Enemy 6 2736 256 8
Enemy 6 2784 384 8
Enemy 6 2880 96 8
Enemy 6 2880 128 8
Enemy 6 2880 352 8
Enemy 6 2928 224 8
Enemy 6 2976 64 8
Enemy 6 2976 384 8
Enemy 6 3168 32 12
Enemy 6 3216 32 12
Enemy 6 3264 32 12
Enemy 6 3312 32 12
Enemy 6 3360 32 12
Enemy 6 3360 96 12
Enemy 6 3360 160 12
Enemy 6 3408 288 12
Enemy 6 3456 352 12
Enemy 6 3456 384 12
Enemy 6 3456 448 12
Enemy 6 3504 416 12
Enemy 6 3552 416 12
Enemy 6 3552 448 12
Enemy 6 3600 448 12
Enemy 1 3936 352 12
Enemy 1 3936 416 12
Enemy 1 3984 128 12
Enemy 1 3984 288 12
Enemy 1 4032 64 12
Enemy 1 4080 160 12
Enemy 6 4128 0 2
Enemy 6 4128 32 2
Enemy 6 4128 256 2
Enemy 6 4128 352 2
Enemy 6 4128 384 2
Enemy 6 4128 416 2
Enemy 6 4176 96 2
Enemy 6 4176 160 2
Enemy 6 4176 224 2
Enemy 6 4176 384 2
Enemy 6 4224 224 2
Enemy 5 4320 64 3
Enemy 5 4320 128 3
Enemy 5 4368 0 3
Enemy 5 4368 192 3
Enemy 5 4368 288 3
Enemy 5 4368 352 3
Enemy 5 4368 416 3
Enemy 2 4752 96 9
Enemy 2 4752 192 9
Enemy 2 4800 32 9
Enemy 2 4800 288 9
Enemy 2 4896 352 9
Enemy 2 4992 32 9
Enemy 2 4992 352 9
/Levels/Level 25.lev
1,119 → 1,34
; SpaceMission 1.0
; LEV-File
1200
4
240
32
 
1
336
96
5
4
384
288
 
4
528
64
 
4
528
384
 
4
528
192
 
1
672
32
5
1
672
416
5
4
768
352
 
1
816
192
5
2
864
64
5
4
912
160
 
1
1008
352
5
4
1152
32
 
2
1296
288
5
4
1440
320
 
2
1488
64
5
4
1680
96
 
6
1680
384
5
4
1776
320
 
5
1776
64
5
4
2064
64
 
4
2064
288
 
4
2352
320
 
4
2352
64
 
5
2496
64
5
5
2496
384
5
3
2880
224
14
3
2880
192
14
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 25
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 4 240 32 0
Enemy 1 336 96 5
Enemy 4 384 288 0
Enemy 4 528 64 0
Enemy 4 528 192 0
Enemy 4 528 384 0
Enemy 1 672 32 5
Enemy 1 672 416 5
Enemy 4 768 352 0
Enemy 1 816 192 5
Enemy 2 864 64 5
Enemy 4 912 160 0
Enemy 1 1008 352 5
Enemy 4 1152 32 0
Enemy 2 1296 288 5
Enemy 4 1440 320 0
Enemy 2 1488 64 5
Enemy 4 1680 96 0
Enemy 6 1680 384 5
Enemy 5 1776 64 5
Enemy 4 1776 320 0
Enemy 4 2064 64 0
Enemy 4 2064 288 0
Enemy 4 2352 64 0
Enemy 4 2352 320 0
Enemy 5 2496 64 5
Enemy 5 2496 384 5
Enemy 3 2880 192 14
Enemy 3 2880 224 14
/Levels/Level 26.lev
1,203 → 1,55
; SpaceMission 1.0
; LEV-File
1200
5
240
320
1
5
240
288
1
5
240
256
1
5
240
224
1
5
240
192
1
5
240
160
1
5
240
128
1
5
288
128
1
5
288
320
1
5
336
160
1
5
336
192
1
5
336
224
1
5
336
256
1
5
336
288
1
5
432
320
1
5
432
288
1
5
432
256
1
5
432
224
1
5
432
192
1
5
432
160
1
5
432
128
1
5
480
160
1
5
528
192
1
5
576
224
1
5
624
192
1
5
672
160
1
5
720
128
1
5
720
160
1
5
720
192
1
5
720
224
1
5
720
256
1
5
720
288
1
5
720
320
1
5
816
160
1
5
816
192
1
5
816
224
1
5
816
256
1
5
816
288
1
5
864
128
1
5
864
320
1
5
960
160
1
5
960
192
1
5
960
224
1
5
960
320
1
5
1008
128
1
5
1008
224
1
5
1008
320
1
5
1056
128
1
5
1056
256
1
5
1056
288
1
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 26
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 5 240 128 1
Enemy 5 240 160 1
Enemy 5 240 192 1
Enemy 5 240 224 1
Enemy 5 240 256 1
Enemy 5 240 288 1
Enemy 5 240 320 1
Enemy 5 288 128 1
Enemy 5 288 320 1
Enemy 5 336 160 1
Enemy 5 336 192 1
Enemy 5 336 224 1
Enemy 5 336 256 1
Enemy 5 336 288 1
Enemy 5 432 128 1
Enemy 5 432 160 1
Enemy 5 432 192 1
Enemy 5 432 224 1
Enemy 5 432 256 1
Enemy 5 432 288 1
Enemy 5 432 320 1
Enemy 5 480 160 1
Enemy 5 528 192 1
Enemy 5 576 224 1
Enemy 5 624 192 1
Enemy 5 672 160 1
Enemy 5 720 128 1
Enemy 5 720 160 1
Enemy 5 720 192 1
Enemy 5 720 224 1
Enemy 5 720 256 1
Enemy 5 720 288 1
Enemy 5 720 320 1
Enemy 5 816 160 1
Enemy 5 816 192 1
Enemy 5 816 224 1
Enemy 5 816 256 1
Enemy 5 816 288 1
Enemy 5 864 128 1
Enemy 5 864 320 1
Enemy 5 960 160 1
Enemy 5 960 192 1
Enemy 5 960 224 1
Enemy 5 960 320 1
Enemy 5 1008 128 1
Enemy 5 1008 224 1
Enemy 5 1008 320 1
Enemy 5 1056 128 1
Enemy 5 1056 256 1
Enemy 5 1056 288 1
/Levels/Level 27.lev
1,91 → 1,27
; SpaceMission 1.0
; LEV-File
1200
4
48
32
 
4
288
384
 
4
480
288
 
1
528
224
10
4
576
64
 
4
768
96
 
4
960
96
 
4
960
320
 
4
1104
352
 
4
1200
128
 
2
1200
224
10
4
1344
288
 
4
1440
192
 
4
1584
192
 
4
1584
96
 
4
1632
384
 
4
1680
224
 
5
1680
32
10
6
1680
416
10
4
1776
352
 
4
1824
96
 
3
1920
224
10
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 27
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 4 48 32 0
Enemy 4 288 384 0
Enemy 4 480 288 0
Enemy 1 528 224 10
Enemy 4 576 64 0
Enemy 4 768 96 0
Enemy 4 960 96 0
Enemy 4 960 320 0
Enemy 4 1104 352 0
Enemy 4 1200 128 0
Enemy 2 1200 224 10
Enemy 4 1344 288 0
Enemy 4 1440 192 0
Enemy 4 1584 96 0
Enemy 4 1584 192 0
Enemy 4 1632 384 0
Enemy 5 1680 32 10
Enemy 4 1680 224 0
Enemy 6 1680 416 10
Enemy 4 1776 352 0
Enemy 4 1824 96 0
Enemy 3 1920 224 10
/Levels/Level 28.lev
1,79 → 1,24
; SpaceMission 1.0
; LEV-File
1200
5
96
128
1
2
240
224
30
4
288
352
 
4
336
224
 
1
336
64
30
4
384
128
 
4
384
352
 
1
432
320
30
1
528
384
30
1
528
224
30
1
672
128
30
4
816
288
 
6
912
128
30
6
960
416
30
6
1104
224
30
5
1200
96
30
3
1536
192
30
3
1632
128
30
3
1632
288
30
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 28
Author Daniel Marschall
Width 1200
; Type XCoord YCoord Lives
Enemy 5 96 128 1
Enemy 2 240 224 30
Enemy 4 288 352 0
Enemy 1 336 64 30
Enemy 4 336 224 0
Enemy 4 384 128 0
Enemy 4 384 352 0
Enemy 1 432 320 30
Enemy 1 528 224 30
Enemy 1 528 384 30
Enemy 1 672 128 30
Enemy 4 816 288 0
Enemy 6 912 128 30
Enemy 6 960 416 30
Enemy 6 1104 224 30
Enemy 5 1200 96 30
Enemy 3 1536 192 30
Enemy 3 1632 128 30
Enemy 3 1632 288 30
/Levels/Level 29.lev
1,175 → 1,48
; SpaceMission 1.0
; LEV-File
1200
1
96
 
1
1
96
64
1
1
144
32
1
1
144
96
1
5
384
32
1
5
528
320
1
5
624
96
1
5
720
352
1
3
1008
96
1
1
1008
288
1
1
1056
448
1
1
1104
192
1
1
1152
416
1
1
1200
32
1
1
1248
320
1
1
1248
128
1
1
1392
288
1
4
1392
192
1
1
1440
64
1
1
1440
224
1
1
1440
416
1
1
1536
96
1
4
1536
160
1
4
1536
32
1
4
1536
384
1
1
1584
320
1
4
1584
224
1
1
1632
160
1
4
1632
96
1
4
1680
256
1
1
1728
64
1
1
1728
352
1
1
1776
160
1
4
1872
160
1
4
1920
64
1
4
1920
288
1
6
1968
224
1
6
2064
288
1
6
2064
96
1
6
2112
384
1
5
2160
32
1
2
2256
192
1
7
2496
192
30
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 29
Author Daniel Marschall
Width 1200
; Type XCoord YCoord Lives
Enemy 1 96 0 1
Enemy 1 96 64 1
Enemy 1 144 32 1
Enemy 1 144 96 1
Enemy 5 384 32 1
Enemy 5 528 320 1
Enemy 5 624 96 1
Enemy 5 720 352 1
Enemy 3 1008 96 1
Enemy 1 1008 288 1
Enemy 1 1056 448 1
Enemy 1 1104 192 1
Enemy 1 1152 416 1
Enemy 1 1200 32 1
Enemy 1 1248 128 1
Enemy 1 1248 320 1
Enemy 4 1392 192 0
Enemy 1 1392 288 1
Enemy 1 1440 64 1
Enemy 1 1440 224 1
Enemy 1 1440 416 1
Enemy 4 1536 32 0
Enemy 1 1536 96 1
Enemy 4 1536 160 0
Enemy 4 1536 384 0
Enemy 4 1584 224 0
Enemy 1 1584 320 1
Enemy 4 1632 96 0
Enemy 1 1632 160 1
Enemy 4 1680 256 0
Enemy 1 1728 64 1
Enemy 1 1728 352 1
Enemy 1 1776 160 1
Enemy 4 1872 160 0
Enemy 4 1920 64 0
Enemy 4 1920 288 0
Enemy 6 1968 224 1
Enemy 6 2064 96 1
Enemy 6 2064 288 1
Enemy 6 2112 384 1
Enemy 5 2160 32 1
Enemy 2 2256 192 1
Enemy 7 2496 192 30
/Levels/Level 3.lev
1,55 → 1,18
; SpaceMission 1.0
; LEV-File
1200
1
624
64
1
1
624
192
1
1
624
256
1
1
624
384
1
5
1104
160
1
5
1104
320
1
5
1104
128
1
5
1104
288
1
1
1584
160
1
1
1584
256
1
6
2160
160
2
6
2160
288
2
6
2160
224
2
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 3
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 1 624 64 1
Enemy 1 624 192 1
Enemy 1 624 256 1
Enemy 1 624 384 1
Enemy 5 1104 128 1
Enemy 5 1104 160 1
Enemy 5 1104 288 1
Enemy 5 1104 320 1
Enemy 1 1584 160 1
Enemy 1 1584 256 1
Enemy 6 2160 160 2
Enemy 6 2160 224 2
Enemy 6 2160 288 2
/Levels/Level 30.lev
1,1103 → 1,280
; SpaceMission 1.0
; LEV-File
1200
3
48
 
1
3
48
448
1
3
96
32
1
3
96
416
1
3
144
384
1
3
144
64
1
3
192
352
1
3
192
96
1
3
240
320
1
3
240
128
1
3
288
288
1
3
288
160
1
3
336
256
1
3
336
192
1
5
336
64
1
5
336
384
1
6
384
224
1
4
432
32
 
4
432
160
 
4
480
192
 
4
480
224
 
1
480
448
1
4
528
96
 
4
528
416
 
4
576
32
 
7
576
224
99
4
624
96
 
4
624
416
 
4
672
32
 
4
672
448
 
1
672
64
1
1
672
416
1
4
720
64
 
4
720
128
 
4
768
384
 
4
768
160
 
4
768
224
 
1
816
448
99
4
864
32
 
4
864
96
 
4
912
288
 
4
960
320
 
4
960
64
 
4
1008
416
 
4
1056
448
 
1
1056
224
1
4
1104
192
 
4
1104
128
 
4
1152
416
 
4
1152
320
 
4
1200
224
 
4
1296
64
 
1
1296
384
1
4
1392
256
 
4
1440
32
 
1
1488
224
1
4
1536
448
 
4
1584
96
 
4
1584
256
 
4
1728
352
 
1
1728
32
1
4
1776
160
 
4
1920
32
 
4
1920
416
 
1
1920
320
1
4
2064
256
 
4
2064
 
 
4
2208
64
 
1
2208
192
1
4
2256
320
 
1
2352
32
1
4
2352
128
 
1
2400
384
1
4
2400
320
 
2
2448
160
1
4
2496
64
 
4
2496
416
 
2
2592
384
1
3
2592
32
1
4
2592
224
 
4
2640
416
 
4
2688
128
 
4
2688
352
 
5
2736
32
4
5
2736
192
4
5
2736
352
4
4
2784
256
 
5
2784
416
4
4
2784
64
 
4
2784
32
 
4
2832
128
 
4
2832
320
 
4
2832
192
 
4
2880
384
 
4
2880
448
 
4
2880
128
 
4
2880
416
 
4
2928
256
 
1
2976
320
5
4
3024
64
 
4
3024
384
 
4
3072
224
 
2
3072
96
3
3
3120
416
4
4
3216
64
 
4
3216
352
 
4
3264
160
 
3
3360
128
5
4
3408
32
 
4
3408
352
 
4
3408
224
 
3
3456
384
5
4
3552
160
 
3
3552
224
5
4
3600
384
 
4
3696
224
 
4
3696
 
 
1
3744
352
5
1
3792
96
5
4
3840
352
 
4
3936
64
 
4
4032
416
 
4
4032
192
 
3
4032
 
5
4
4128
64
 
4
4176
288
 
1
4176
 
5
4
4224
160
 
4
4272
384
 
3
4272
256
5
2
4320
96
3
4
4368
352
 
4
4368
224
 
4
4416
64
 
1
4464
320
5
4
4512
160
 
4
4512
320
 
4
4512
448
 
4
4608
32
 
4
4656
416
 
4
4656
128
 
4
4704
256
 
3
4752
 
5
4
4800
96
 
4
4800
384
 
4
4848
160
 
3
4848
256
5
4
4896
352
 
4
4944
32
 
4
4944
192
 
3
4944
128
5
4
5040
256
 
4
5040
96
 
4
5040
384
 
1
5040
 
5
4
5088
64
 
1
5088
160
5
4
5184
352
 
4
5184
 
 
4
5232
224
 
4
5280
96
 
4
5280
320
 
4
5376
64
 
4
5376
192
 
4
5424
416
 
4
5520
224
 
1
5520
64
5
4
5568
384
 
4
5616
64
 
2
5616
128
3
4
5664
224
 
3
5664
320
5
4
5760
384
 
4
5760
32
 
1
5760
288
5
4
5808
96
 
3
5808
192
5
4
5904
352
 
1
5904
32
5
4
5952
192
 
4
6000
64
 
4
6000
352
 
4
6096
160
 
4
6096
320
 
3
6096
32
5
4
6144
352
 
3
6144
64
5
1
6144
256
5
3
6192
96
5
1
6192
416
5
4
6240
32
 
4
6288
192
 
4
6288
288
 
4
6336
416
 
4
6384
288
 
4
6384
 
 
1
6384
128
5
4
6432
96
 
4
6432
416
 
1
6432
352
5
4
6528
128
 
4
6528
320
 
1
6528
 
5
1
6576
416
5
4
6624
416
 
4
6624
64
 
4
6624
256
 
3
6672
448
5
4
6720
128
 
4
6720
32
 
3
6768
320
5
1
6816
96
5
4
6864
352
 
4
6864
224
 
4
6912
32
 
1
6960
352
5
2
7008
160
3
4
7056
 
 
4
7104
192
 
4
7104
288
 
4
7104
64
 
4
7152
416
 
4
7200
384
 
4
7200
128
 
1
7200
64
5
1
7248
224
5
1
7248
416
5
4
7296
32
 
4
7344
128
 
4
7344
288
 
4
7344
384
 
3
7392
 
5
4
7440
224
 
4
7488
352
 
4
7488
64
 
1
7488
128
5
1
7584
320
5
4
7632
192
 
4
7680
64
 
1
7680
 
5
3
7728
384
5
4
7776
288
 
4
7824
160
 
3
7824
32
5
1
7872
416
5
4
7920
64
 
1
7920
192
5
4
7968
352
 
4
8064
192
 
1
8160
160
5
1
8160
128
5
1
8160
96
5
1
8160
64
5
1
8160
32
5
1
8160
 
5
2
8304
352
3
1
8400
288
5
1
8448
448
5
1
8448
256
5
1
8496
416
5
1
8496
224
5
1
8544
384
5
1
8544
192
5
1
8592
352
5
1
8592
160
5
1
8640
128
5
1
8640
320
5
1
8688
96
5
1
8688
288
5
1
8736
64
5
1
8736
256
5
1
8784
32
5
1
8784
224
5
1
8832
 
5
1
8832
192
5
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 30
Author Daniel Marschall
Width 1200
; Type XCoord YCoord Lives
Enemy 3 48 0 1
Enemy 3 48 448 1
Enemy 3 96 32 1
Enemy 3 96 416 1
Enemy 3 144 64 1
Enemy 3 144 384 1
Enemy 3 192 96 1
Enemy 3 192 352 1
Enemy 3 240 128 1
Enemy 3 240 320 1
Enemy 3 288 160 1
Enemy 3 288 288 1
Enemy 5 336 64 1
Enemy 3 336 192 1
Enemy 3 336 256 1
Enemy 5 336 384 1
Enemy 6 384 224 1
Enemy 4 432 32 0
Enemy 4 432 160 0
Enemy 4 480 192 0
Enemy 4 480 224 0
Enemy 1 480 448 1
Enemy 4 528 96 0
Enemy 4 528 416 0
Enemy 4 576 32 0
Enemy 7 576 224 99
Enemy 4 624 96 0
Enemy 4 624 416 0
Enemy 4 672 32 0
Enemy 1 672 64 1
Enemy 1 672 416 1
Enemy 4 672 448 0
Enemy 4 720 64 0
Enemy 4 720 128 0
Enemy 4 768 160 0
Enemy 4 768 224 0
Enemy 4 768 384 0
Enemy 1 816 448 99
Enemy 4 864 32 0
Enemy 4 864 96 0
Enemy 4 912 288 0
Enemy 4 960 64 0
Enemy 4 960 320 0
Enemy 4 1008 416 0
Enemy 1 1056 224 1
Enemy 4 1056 448 0
Enemy 4 1104 128 0
Enemy 4 1104 192 0
Enemy 4 1152 320 0
Enemy 4 1152 416 0
Enemy 4 1200 224 0
Enemy 4 1296 64 0
Enemy 1 1296 384 1
Enemy 4 1392 256 0
Enemy 4 1440 32 0
Enemy 1 1488 224 1
Enemy 4 1536 448 0
Enemy 4 1584 96 0
Enemy 4 1584 256 0
Enemy 1 1728 32 1
Enemy 4 1728 352 0
Enemy 4 1776 160 0
Enemy 4 1920 32 0
Enemy 1 1920 320 1
Enemy 4 1920 416 0
Enemy 4 2064 0 0
Enemy 4 2064 256 0
Enemy 4 2208 64 0
Enemy 1 2208 192 1
Enemy 4 2256 320 0
Enemy 1 2352 32 1
Enemy 4 2352 128 0
Enemy 4 2400 320 0
Enemy 1 2400 384 1
Enemy 2 2448 160 1
Enemy 4 2496 64 0
Enemy 4 2496 416 0
Enemy 3 2592 32 1
Enemy 4 2592 224 0
Enemy 2 2592 384 1
Enemy 4 2640 416 0
Enemy 4 2688 128 0
Enemy 4 2688 352 0
Enemy 5 2736 32 4
Enemy 5 2736 192 4
Enemy 5 2736 352 4
Enemy 4 2784 32 0
Enemy 4 2784 64 0
Enemy 4 2784 256 0
Enemy 5 2784 416 4
Enemy 4 2832 128 0
Enemy 4 2832 192 0
Enemy 4 2832 320 0
Enemy 4 2880 128 0
Enemy 4 2880 384 0
Enemy 4 2880 416 0
Enemy 4 2880 448 0
Enemy 4 2928 256 0
Enemy 1 2976 320 5
Enemy 4 3024 64 0
Enemy 4 3024 384 0
Enemy 2 3072 96 3
Enemy 4 3072 224 0
Enemy 3 3120 416 4
Enemy 4 3216 64 0
Enemy 4 3216 352 0
Enemy 4 3264 160 0
Enemy 3 3360 128 5
Enemy 4 3408 32 0
Enemy 4 3408 224 0
Enemy 4 3408 352 0
Enemy 3 3456 384 5
Enemy 4 3552 160 0
Enemy 3 3552 224 5
Enemy 4 3600 384 0
Enemy 4 3696 0 0
Enemy 4 3696 224 0
Enemy 1 3744 352 5
Enemy 1 3792 96 5
Enemy 4 3840 352 0
Enemy 4 3936 64 0
Enemy 3 4032 0 5
Enemy 4 4032 192 0
Enemy 4 4032 416 0
Enemy 4 4128 64 0
Enemy 1 4176 0 5
Enemy 4 4176 288 0
Enemy 4 4224 160 0
Enemy 3 4272 256 5
Enemy 4 4272 384 0
Enemy 2 4320 96 3
Enemy 4 4368 224 0
Enemy 4 4368 352 0
Enemy 4 4416 64 0
Enemy 1 4464 320 5
Enemy 4 4512 160 0
Enemy 4 4512 320 0
Enemy 4 4512 448 0
Enemy 4 4608 32 0
Enemy 4 4656 128 0
Enemy 4 4656 416 0
Enemy 4 4704 256 0
Enemy 3 4752 0 5
Enemy 4 4800 96 0
Enemy 4 4800 384 0
Enemy 4 4848 160 0
Enemy 3 4848 256 5
Enemy 4 4896 352 0
Enemy 4 4944 32 0
Enemy 3 4944 128 5
Enemy 4 4944 192 0
Enemy 1 5040 0 5
Enemy 4 5040 96 0
Enemy 4 5040 256 0
Enemy 4 5040 384 0
Enemy 4 5088 64 0
Enemy 1 5088 160 5
Enemy 4 5184 0 0
Enemy 4 5184 352 0
Enemy 4 5232 224 0
Enemy 4 5280 96 0
Enemy 4 5280 320 0
Enemy 4 5376 64 0
Enemy 4 5376 192 0
Enemy 4 5424 416 0
Enemy 1 5520 64 5
Enemy 4 5520 224 0
Enemy 4 5568 384 0
Enemy 4 5616 64 0
Enemy 2 5616 128 3
Enemy 4 5664 224 0
Enemy 3 5664 320 5
Enemy 4 5760 32 0
Enemy 1 5760 288 5
Enemy 4 5760 384 0
Enemy 4 5808 96 0
Enemy 3 5808 192 5
Enemy 1 5904 32 5
Enemy 4 5904 352 0
Enemy 4 5952 192 0
Enemy 4 6000 64 0
Enemy 4 6000 352 0
Enemy 3 6096 32 5
Enemy 4 6096 160 0
Enemy 4 6096 320 0
Enemy 3 6144 64 5
Enemy 1 6144 256 5
Enemy 4 6144 352 0
Enemy 3 6192 96 5
Enemy 1 6192 416 5
Enemy 4 6240 32 0
Enemy 4 6288 192 0
Enemy 4 6288 288 0
Enemy 4 6336 416 0
Enemy 4 6384 0 0
Enemy 1 6384 128 5
Enemy 4 6384 288 0
Enemy 4 6432 96 0
Enemy 1 6432 352 5
Enemy 4 6432 416 0
Enemy 1 6528 0 5
Enemy 4 6528 128 0
Enemy 4 6528 320 0
Enemy 1 6576 416 5
Enemy 4 6624 64 0
Enemy 4 6624 256 0
Enemy 4 6624 416 0
Enemy 3 6672 448 5
Enemy 4 6720 32 0
Enemy 4 6720 128 0
Enemy 3 6768 320 5
Enemy 1 6816 96 5
Enemy 4 6864 224 0
Enemy 4 6864 352 0
Enemy 4 6912 32 0
Enemy 1 6960 352 5
Enemy 2 7008 160 3
Enemy 4 7056 0 0
Enemy 4 7104 64 0
Enemy 4 7104 192 0
Enemy 4 7104 288 0
Enemy 4 7152 416 0
Enemy 1 7200 64 5
Enemy 4 7200 128 0
Enemy 4 7200 384 0
Enemy 1 7248 224 5
Enemy 1 7248 416 5
Enemy 4 7296 32 0
Enemy 4 7344 128 0
Enemy 4 7344 288 0
Enemy 4 7344 384 0
Enemy 3 7392 0 5
Enemy 4 7440 224 0
Enemy 4 7488 64 0
Enemy 1 7488 128 5
Enemy 4 7488 352 0
Enemy 1 7584 320 5
Enemy 4 7632 192 0
Enemy 1 7680 0 5
Enemy 4 7680 64 0
Enemy 3 7728 384 5
Enemy 4 7776 288 0
Enemy 3 7824 32 5
Enemy 4 7824 160 0
Enemy 1 7872 416 5
Enemy 4 7920 64 0
Enemy 1 7920 192 5
Enemy 4 7968 352 0
Enemy 4 8064 192 0
Enemy 1 8160 0 5
Enemy 1 8160 32 5
Enemy 1 8160 64 5
Enemy 1 8160 96 5
Enemy 1 8160 128 5
Enemy 1 8160 160 5
Enemy 2 8304 352 3
Enemy 1 8400 288 5
Enemy 1 8448 256 5
Enemy 1 8448 448 5
Enemy 1 8496 224 5
Enemy 1 8496 416 5
Enemy 1 8544 192 5
Enemy 1 8544 384 5
Enemy 1 8592 160 5
Enemy 1 8592 352 5
Enemy 1 8640 128 5
Enemy 1 8640 320 5
Enemy 1 8688 96 5
Enemy 1 8688 288 5
Enemy 1 8736 64 5
Enemy 1 8736 256 5
Enemy 1 8784 32 5
Enemy 1 8784 224 5
Enemy 1 8832 0 5
Enemy 1 8832 192 5
/Levels/Level 31.lev
1,755 → 1,193
; SpaceMission 1.0
; LEV-File
1200
4
48
32
 
4
48
64
 
4
48
96
 
4
48
128
 
4
48
160
 
4
48
192
 
4
96
160
 
4
144
128
 
4
192
160
 
4
240
192
 
4
240
160
 
4
240
128
 
4
240
64
 
4
240
32
 
4
240
96
 
4
336
32
 
4
336
64
 
4
336
96
 
4
336
128
 
4
336
160
 
4
336
192
 
4
384
192
 
4
384
32
 
4
384
96
 
4
384
128
 
4
432
192
 
4
432
32
 
4
432
128
 
4
432
96
 
4
528
32
 
4
528
64
 
4
528
96
 
4
528
128
 
4
528
160
 
4
528
192
 
4
576
192
 
4
624
192
 
4
720
192
 
4
720
160
 
4
720
128
 
4
720
96
 
4
720
64
 
4
720
32
 
4
768
192
 
4
816
192
 
4
960
192
 
4
960
160
 
4
960
96
 
4
960
128
 
4
960
64
 
4
960
32
 
4
1008
32
 
4
1008
192
 
4
1056
160
 
4
1056
128
 
4
1056
96
 
4
1056
64
 
4
1152
96
 
4
1152
64
 
4
1152
128
 
4
1152
160
 
4
1200
192
 
4
1200
32
 
4
1248
160
 
4
1248
128
 
4
1248
96
 
4
1248
64
 
4
1344
192
 
4
1344
160
 
4
1344
128
 
4
1344
96
 
4
1344
64
 
4
1344
32
 
4
1392
64
 
4
1392
96
 
4
1392
128
 
4
1440
192
 
4
1440
160
 
4
1440
128
 
4
1488
192
 
4
1488
160
 
4
1488
128
 
4
1488
96
 
4
1488
64
 
4
1488
32
 
4
1584
32
 
4
1584
64
 
4
1584
96
 
4
1584
128
 
4
1584
160
 
4
1584
192
 
4
1632
192
 
4
1632
32
 
4
1632
96
 
4
1632
128
 
4
1680
192
 
4
1680
32
 
4
1680
96
 
4
1680
128
 
4
1776
32
 
4
1776
96
 
4
1776
64
 
4
1776
128
 
4
1776
192
 
4
1872
192
 
4
1872
128
 
4
1872
96
 
4
1872
64
 
4
1872
32
 
4
1968
32
 
4
1968
64
 
4
1968
96
 
4
1968
128
 
4
1968
192
 
1
2064
448
1
1
2064
 
1
1
2112
416
1
1
2112
32
1
1
2160
448
1
1
2160
 
1
1
2208
416
1
1
2208
32
1
1
2256
448
1
1
2256
 
1
1
2304
416
1
1
2304
32
1
1
2352
448
1
1
2352
 
1
1
2400
416
1
1
2400
32
1
1
2448
448
1
1
2448
 
1
1
2496
32
1
1
2496
416
1
1
2544
 
1
1
2544
448
1
1
2592
32
1
1
2592
416
1
1
2640
448
1
1
2640
 
1
1
2688
416
1
1
2688
32
1
1
2736
448
1
1
2736
 
1
1
2784
416
1
1
2784
32
1
1
2832
448
1
1
2832
 
1
1
2880
416
1
1
2880
32
1
1
2928
448
1
1
2928
 
1
1
2976
416
1
1
2976
32
1
1
3024
384
1
1
3024
64
1
1
3072
352
1
1
3072
96
1
4
3072
416
 
4
3072
32
 
4
3120
64
 
4
3120
384
 
4
3168
32
 
4
3168
416
 
4
3168
352
 
4
3168
96
 
4
3216
352
 
4
3216
96
 
4
3264
352
 
4
3264
96
 
6
3264
32
1
6
3264
416
1
4
3312
352
 
4
3312
96
 
4
3360
96
 
4
3360
352
 
4
3408
96
 
4
3408
352
 
4
3456
96
 
4
3456
352
 
3
3504
64
1
3
3504
384
1
3
3552
32
1
3
3552
416
1
3
3600
 
1
3
3600
448
1
5
3696
416
1
5
3696
32
1
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 31
Author Daniel Marschall
Width 1200
; Type XCoord YCoord Lives
Enemy 4 48 32 0
Enemy 4 48 64 0
Enemy 4 48 96 0
Enemy 4 48 128 0
Enemy 4 48 160 0
Enemy 4 48 192 0
Enemy 4 96 160 0
Enemy 4 144 128 0
Enemy 4 192 160 0
Enemy 4 240 32 0
Enemy 4 240 64 0
Enemy 4 240 96 0
Enemy 4 240 128 0
Enemy 4 240 160 0
Enemy 4 240 192 0
Enemy 4 336 32 0
Enemy 4 336 64 0
Enemy 4 336 96 0
Enemy 4 336 128 0
Enemy 4 336 160 0
Enemy 4 336 192 0
Enemy 4 384 32 0
Enemy 4 384 96 0
Enemy 4 384 128 0
Enemy 4 384 192 0
Enemy 4 432 32 0
Enemy 4 432 96 0
Enemy 4 432 128 0
Enemy 4 432 192 0
Enemy 4 528 32 0
Enemy 4 528 64 0
Enemy 4 528 96 0
Enemy 4 528 128 0
Enemy 4 528 160 0
Enemy 4 528 192 0
Enemy 4 576 192 0
Enemy 4 624 192 0
Enemy 4 720 32 0
Enemy 4 720 64 0
Enemy 4 720 96 0
Enemy 4 720 128 0
Enemy 4 720 160 0
Enemy 4 720 192 0
Enemy 4 768 192 0
Enemy 4 816 192 0
Enemy 4 960 32 0
Enemy 4 960 64 0
Enemy 4 960 96 0
Enemy 4 960 128 0
Enemy 4 960 160 0
Enemy 4 960 192 0
Enemy 4 1008 32 0
Enemy 4 1008 192 0
Enemy 4 1056 64 0
Enemy 4 1056 96 0
Enemy 4 1056 128 0
Enemy 4 1056 160 0
Enemy 4 1152 64 0
Enemy 4 1152 96 0
Enemy 4 1152 128 0
Enemy 4 1152 160 0
Enemy 4 1200 32 0
Enemy 4 1200 192 0
Enemy 4 1248 64 0
Enemy 4 1248 96 0
Enemy 4 1248 128 0
Enemy 4 1248 160 0
Enemy 4 1344 32 0
Enemy 4 1344 64 0
Enemy 4 1344 96 0
Enemy 4 1344 128 0
Enemy 4 1344 160 0
Enemy 4 1344 192 0
Enemy 4 1392 64 0
Enemy 4 1392 96 0
Enemy 4 1392 128 0
Enemy 4 1440 128 0
Enemy 4 1440 160 0
Enemy 4 1440 192 0
Enemy 4 1488 32 0
Enemy 4 1488 64 0
Enemy 4 1488 96 0
Enemy 4 1488 128 0
Enemy 4 1488 160 0
Enemy 4 1488 192 0
Enemy 4 1584 32 0
Enemy 4 1584 64 0
Enemy 4 1584 96 0
Enemy 4 1584 128 0
Enemy 4 1584 160 0
Enemy 4 1584 192 0
Enemy 4 1632 32 0
Enemy 4 1632 96 0
Enemy 4 1632 128 0
Enemy 4 1632 192 0
Enemy 4 1680 32 0
Enemy 4 1680 96 0
Enemy 4 1680 128 0
Enemy 4 1680 192 0
Enemy 4 1776 32 0
Enemy 4 1776 64 0
Enemy 4 1776 96 0
Enemy 4 1776 128 0
Enemy 4 1776 192 0
Enemy 4 1872 32 0
Enemy 4 1872 64 0
Enemy 4 1872 96 0
Enemy 4 1872 128 0
Enemy 4 1872 192 0
Enemy 4 1968 32 0
Enemy 4 1968 64 0
Enemy 4 1968 96 0
Enemy 4 1968 128 0
Enemy 4 1968 192 0
Enemy 1 2064 0 1
Enemy 1 2064 448 1
Enemy 1 2112 32 1
Enemy 1 2112 416 1
Enemy 1 2160 0 1
Enemy 1 2160 448 1
Enemy 1 2208 32 1
Enemy 1 2208 416 1
Enemy 1 2256 0 1
Enemy 1 2256 448 1
Enemy 1 2304 32 1
Enemy 1 2304 416 1
Enemy 1 2352 0 1
Enemy 1 2352 448 1
Enemy 1 2400 32 1
Enemy 1 2400 416 1
Enemy 1 2448 0 1
Enemy 1 2448 448 1
Enemy 1 2496 32 1
Enemy 1 2496 416 1
Enemy 1 2544 0 1
Enemy 1 2544 448 1
Enemy 1 2592 32 1
Enemy 1 2592 416 1
Enemy 1 2640 0 1
Enemy 1 2640 448 1
Enemy 1 2688 32 1
Enemy 1 2688 416 1
Enemy 1 2736 0 1
Enemy 1 2736 448 1
Enemy 1 2784 32 1
Enemy 1 2784 416 1
Enemy 1 2832 0 1
Enemy 1 2832 448 1
Enemy 1 2880 32 1
Enemy 1 2880 416 1
Enemy 1 2928 0 1
Enemy 1 2928 448 1
Enemy 1 2976 32 1
Enemy 1 2976 416 1
Enemy 1 3024 64 1
Enemy 1 3024 384 1
Enemy 4 3072 32 0
Enemy 1 3072 96 1
Enemy 1 3072 352 1
Enemy 4 3072 416 0
Enemy 4 3120 64 0
Enemy 4 3120 384 0
Enemy 4 3168 32 0
Enemy 4 3168 96 0
Enemy 4 3168 352 0
Enemy 4 3168 416 0
Enemy 4 3216 96 0
Enemy 4 3216 352 0
Enemy 6 3264 32 1
Enemy 4 3264 96 0
Enemy 4 3264 352 0
Enemy 6 3264 416 1
Enemy 4 3312 96 0
Enemy 4 3312 352 0
Enemy 4 3360 96 0
Enemy 4 3360 352 0
Enemy 4 3408 96 0
Enemy 4 3408 352 0
Enemy 4 3456 96 0
Enemy 4 3456 352 0
Enemy 3 3504 64 1
Enemy 3 3504 384 1
Enemy 3 3552 32 1
Enemy 3 3552 416 1
Enemy 3 3600 0 1
Enemy 3 3600 448 1
Enemy 5 3696 32 1
Enemy 5 3696 416 1
/Levels/Level 4.lev
1,63 → 1,20
; SpaceMission 1.0
; LEV-File
1200
1
480
224
1
1
528
160
1
1
528
288
1
5
528
192
1
5
528
256
1
6
1248
96
2
6
1248
352
2
1
1872
96
2
1
1872
352
2
1
1872
224
2
5
2400
64
2
5
2400
384
2
1
2976
224
4
1
2976
192
4
1
2976
256
4
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 4
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 1 480 224 1
Enemy 1 528 160 1
Enemy 5 528 192 1
Enemy 5 528 256 1
Enemy 1 528 288 1
Enemy 6 1248 96 2
Enemy 6 1248 352 2
Enemy 1 1872 96 2
Enemy 1 1872 224 2
Enemy 1 1872 352 2
Enemy 5 2400 64 2
Enemy 5 2400 384 2
Enemy 1 2976 192 4
Enemy 1 2976 224 4
Enemy 1 2976 256 4
/Levels/Level 5.lev
1,83 → 1,25
; SpaceMission 1.0
; LEV-File
1200
5
336
96
1
5
336
384
1
5
912
352
1
5
1152
384
1
5
1200
64
1
6
1392
320
2
6
1632
384
2
6
1680
32
2
1
1968
64
1
3
2352
64
1
2
2736
128
1
6
2832
128
2
6
2976
448
2
6
3072
352
2
6
3408
32
2
1
3504
384
1
1
3648
448
1
6
3696
32
2
3
3936
64
2
7
4608
256
5
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 5
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 5 336 96 1
Enemy 5 336 384 1
Enemy 5 912 352 1
Enemy 5 1152 384 1
Enemy 5 1200 64 1
Enemy 6 1392 320 2
Enemy 6 1632 384 2
Enemy 6 1680 32 2
Enemy 1 1968 64 1
Enemy 3 2352 64 1
Enemy 2 2736 128 1
Enemy 6 2832 128 2
Enemy 6 2976 448 2
Enemy 6 3072 352 2
Enemy 6 3408 32 2
Enemy 1 3504 384 1
Enemy 1 3648 448 1
Enemy 6 3696 32 2
Enemy 3 3936 64 2
Enemy 7 4608 256 5
/Levels/Level 6.lev
1,159 → 1,44
; SpaceMission 1.0
; LEV-File
1200
1
576
64
1
1
576
384
1
1
576
288
1
1
576
160
1
1
576
224
1
1
624
64
1
1
624
160
1
1
624
224
1
1
624
288
1
1
624
384
1
5
912
160
1
5
912
288
1
5
912
224
1
5
960
160
1
5
960
288
1
5
960
224
1
5
1008
224
1
5
1008
160
1
5
1008
288
1
2
1104
160
1
2
1104
224
1
2
1104
288
1
2
1152
288
1
2
1152
224
1
2
1152
160
1
2
1200
288
1
2
1200
224
1
2
1200
160
1
6
1296
160
1
6
1296
224
1
6
1296
288
1
6
1344
288
1
6
1344
224
1
6
1344
160
1
6
1392
288
1
6
1392
224
1
6
1392
160
1
3
2064
192
5
3
2064
256
5
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 6
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 1 576 64 1
Enemy 1 576 160 1
Enemy 1 576 224 1
Enemy 1 576 288 1
Enemy 1 576 384 1
Enemy 1 624 64 1
Enemy 1 624 160 1
Enemy 1 624 224 1
Enemy 1 624 288 1
Enemy 1 624 384 1
Enemy 5 912 160 1
Enemy 5 912 224 1
Enemy 5 912 288 1
Enemy 5 960 160 1
Enemy 5 960 224 1
Enemy 5 960 288 1
Enemy 5 1008 160 1
Enemy 5 1008 224 1
Enemy 5 1008 288 1
Enemy 2 1104 160 1
Enemy 2 1104 224 1
Enemy 2 1104 288 1
Enemy 2 1152 160 1
Enemy 2 1152 224 1
Enemy 2 1152 288 1
Enemy 2 1200 160 1
Enemy 2 1200 224 1
Enemy 2 1200 288 1
Enemy 6 1296 160 1
Enemy 6 1296 224 1
Enemy 6 1296 288 1
Enemy 6 1344 160 1
Enemy 6 1344 224 1
Enemy 6 1344 288 1
Enemy 6 1392 160 1
Enemy 6 1392 224 1
Enemy 6 1392 288 1
Enemy 3 2064 192 5
Enemy 3 2064 256 5
/Levels/Level 7.lev
1,235 → 1,63
; SpaceMission 1.0
; LEV-File
1200
1
48
256
1
1
144
416
1
1
192
96
1
1
240
160
1
1
288
256
1
1
336
288
1
1
480
224
1
1
480
320
1
5
1056
160
1
2
1056
416
1
1
1104
64
1
2
1152
96
1
5
1248
416
1
5
1248
160
1
3
1488
224
1
5
1536
384
1
2
1680
160
1
2
1968
320
1
2
1968
448
1
1
2016
96
2
1
2112
384
5
1
2160
128
5
6
2208
352
1
6
2256
320
1
6
2256
384
1
6
2304
64
1
1
2304
256
5
6
2352
192
1
2
2400
416
1
1
2400
128
1
2
2448
256
1
6
2496
128
1
1
2496
192
1
2
2544
64
1
1
2544
352
5
1
2592
256
5
6
2688
288
1
6
2688
64
1
1
2880
96
1
1
2928
416
1
2
3120
416
1
5
3168
256
1
1
3216
320
1
6
3312
384
1
5
3408
64
1
2
3456
256
1
1
3552
256
1
6
3600
192
1
5
3600
416
1
5
3696
128
1
5
3792
256
1
2
3936
32
1
5
3984
320
1
5
4080
64
1
2
4080
288
1
2
4128
416
1
1
4176
224
2
7
4560
224
7
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 7
Author Andreas Kübelsbeck
Width 1200
; Type XCoord YCoord Lives
Enemy 1 48 256 1
Enemy 1 144 416 1
Enemy 1 192 96 1
Enemy 1 240 160 1
Enemy 1 288 256 1
Enemy 1 336 288 1
Enemy 1 480 224 1
Enemy 1 480 320 1
Enemy 5 1056 160 1
Enemy 2 1056 416 1
Enemy 1 1104 64 1
Enemy 2 1152 96 1
Enemy 5 1248 160 1
Enemy 5 1248 416 1
Enemy 3 1488 224 1
Enemy 5 1536 384 1
Enemy 2 1680 160 1
Enemy 2 1968 320 1
Enemy 2 1968 448 1
Enemy 1 2016 96 2
Enemy 1 2112 384 5
Enemy 1 2160 128 5
Enemy 6 2208 352 1
Enemy 6 2256 320 1
Enemy 6 2256 384 1
Enemy 6 2304 64 1
Enemy 1 2304 256 5
Enemy 6 2352 192 1
Enemy 1 2400 128 1
Enemy 2 2400 416 1
Enemy 2 2448 256 1
Enemy 6 2496 128 1
Enemy 1 2496 192 1
Enemy 2 2544 64 1
Enemy 1 2544 352 5
Enemy 1 2592 256 5
Enemy 6 2688 64 1
Enemy 6 2688 288 1
Enemy 1 2880 96 1
Enemy 1 2928 416 1
Enemy 2 3120 416 1
Enemy 5 3168 256 1
Enemy 1 3216 320 1
Enemy 6 3312 384 1
Enemy 5 3408 64 1
Enemy 2 3456 256 1
Enemy 1 3552 256 1
Enemy 6 3600 192 1
Enemy 5 3600 416 1
Enemy 5 3696 128 1
Enemy 5 3792 256 1
Enemy 2 3936 32 1
Enemy 5 3984 320 1
Enemy 5 4080 64 1
Enemy 2 4080 288 1
Enemy 2 4128 416 1
Enemy 1 4176 224 2
Enemy 7 4560 224 7
/Levels/Level 8.lev
1,95 → 1,28
; SpaceMission 1.0
; LEV-File
1200
4
240
288
 
4
336
64
 
3
432
224
2
2
432
192
2
2
432
256
2
1
432
160
2
1
432
288
2
4
576
352
 
4
672
224
 
4
768
320
 
3
960
224
2
2
1008
192
2
2
1008
256
2
1
1056
160
2
1
1056
288
2
6
1056
224
2
2
1104
192
2
2
1104
256
2
3
1152
224
2
5
1776
224
5
5
1776
256
5
6
1824
224
5
6
1824
256
5
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 8
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 4 240 288 0
Enemy 4 336 64 0
Enemy 1 432 160 2
Enemy 2 432 192 2
Enemy 3 432 224 2
Enemy 2 432 256 2
Enemy 1 432 288 2
Enemy 4 576 352 0
Enemy 4 672 224 0
Enemy 4 768 320 0
Enemy 3 960 224 2
Enemy 2 1008 192 2
Enemy 2 1008 256 2
Enemy 1 1056 160 2
Enemy 6 1056 224 2
Enemy 1 1056 288 2
Enemy 2 1104 192 2
Enemy 2 1104 256 2
Enemy 3 1152 224 2
Enemy 5 1776 224 5
Enemy 5 1776 256 5
Enemy 6 1824 224 5
Enemy 6 1824 256 5
/Levels/Level 9.lev
1,155 → 1,43
; SpaceMission 1.0
; LEV-File
1200
4
240
128
 
4
288
352
 
1
384
64
2
1
384
384
2
1
384
224
2
2
432
64
2
2
432
224
2
2
432
384
2
3
480
64
2
3
480
224
2
3
480
384
2
4
624
128
 
4
768
64
 
4
864
224
 
4
864
416
 
4
912
32
 
5
1104
96
2
5
1104
352
2
5
1104
224
2
4
1296
192
 
4
1440
64
 
6
1536
320
2
6
1680
96
2
4
1728
160
 
4
1824
320
 
6
2016
64
2
6
2112
384
2
6
2208
128
2
6
2352
288
2
4
2400
64
 
4
2544
416
 
4
2592
128
 
4
2880
64
 
4
2880
320
 
4
2976
160
 
3
3456
160
7
3
3456
192
7
3
3456
224
7
[1.3.6.1.4.1.37476.2.8.1.1]
Name Level 9
Author Patrick Büssecker
Width 1200
; Type XCoord YCoord Lives
Enemy 4 240 128 0
Enemy 4 288 352 0
Enemy 1 384 64 2
Enemy 1 384 224 2
Enemy 1 384 384 2
Enemy 2 432 64 2
Enemy 2 432 224 2
Enemy 2 432 384 2
Enemy 3 480 64 2
Enemy 3 480 224 2
Enemy 3 480 384 2
Enemy 4 624 128 0
Enemy 4 768 64 0
Enemy 4 864 224 0
Enemy 4 864 416 0
Enemy 4 912 32 0
Enemy 5 1104 96 2
Enemy 5 1104 224 2
Enemy 5 1104 352 2
Enemy 4 1296 192 0
Enemy 4 1440 64 0
Enemy 6 1536 320 2
Enemy 6 1680 96 2
Enemy 4 1728 160 0
Enemy 4 1824 320 0
Enemy 6 2016 64 2
Enemy 6 2112 384 2
Enemy 6 2208 128 2
Enemy 6 2352 288 2
Enemy 4 2400 64 0
Enemy 4 2544 416 0
Enemy 4 2592 128 0
Enemy 4 2880 64 0
Enemy 4 2880 320 0
Enemy 4 2976 160 0
Enemy 3 3456 160 7
Enemy 3 3456 192 7
Enemy 3 3456 224 7
/Levels
Property changes:
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
/LevOptions.pas
15,15 → 15,15
Panel1: TPanel;
ElLabel1: TLabel;
ElLabel2: TLabel;
GroesseEdt: TEdit;
Groesse: TUpDown;
Groesse: TSpinEdit;
Label2: TLabel;
Label3: TLabel;
LevName: TEdit;
LevAuthor: TEdit;
procedure ElPopupButton1Click(Sender: TObject);
procedure ElPopupButton2Click(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure GroesseClick(Sender: TObject; Button: TUDBtnType);
procedure GroesseEdtKeyPress(Sender: TObject; var Key: Char);
procedure GroesseEdtChange(Sender: TObject);
public
procedure Aktualisieren;
end;
39,12 → 39,16
 
procedure TLevelForm.Aktualisieren;
begin
Groesse.Position := MainForm.ScrollBar.Max;
Groesse.Value := MainForm.ScrollBar.Max;
LevName.Text := MainForm.LevData.LevelName;
LevAuthor.Text := MainForm.LevData.LevelAuthor;
end;
 
procedure TLevelForm.ElPopupButton1Click(Sender: TObject);
begin
MainForm.ScrollBar.Max := Groesse.Position;
MainForm.ScrollBar.Max := Groesse.Value;
MainForm.LevData.LevelName := LevName.Text;
MainForm.LevData.LevelAuthor := LevAuthor.Text;
MainForm.AnzeigeAct;
close;
end;
64,20 → 68,4
mainform.dxtimer.enabled := false;
end;
 
procedure TLevelForm.GroesseClick(Sender: TObject; Button: TUDBtnType);
begin
groesseedt.Text := inttostr(groesse.position);
end;
 
procedure TLevelForm.GroesseEdtKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in [#13, #08, '0'..'9']) then
Key := #0;
end;
 
procedure TLevelForm.GroesseEdtChange(Sender: TObject);
begin
groesse.Position := strtoint(groesseedt.text);
end;
 
end.
/AuthentiCode Sign/sign_single.bat
0,0 → 1,25
@echo off
 
if "%~1"=="" goto :done
 
echo Sign %1 ...
 
>NUL 2>&1 "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\signtool.exe" verify /pa %1 && (
echo File %1 is already signed, skipping
exit /b 0
) || (
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\signtool.exe" sign /a /tr http://timestamp.globalsign.com/tsa/r6advanced1 /td SHA256 /fd SHA256 /n "HickelSOFT" /v %1
>NUL 2>&1 "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\signtool.exe" verify /pa %1 && (
echo File %1 is sucessfully signed!
exit /b 0
) || (
echo ERROR while signing file %1 !
echo.
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\signtool.exe" sign /a /tr http://timestamp.globalsign.com/tsa/r6advanced1 /td SHA256 /fd SHA256 /n "HickelSOFT" /v %1
echo.
pause.
exit /b 1
)
)
 
:done
/LICENSE
0,0 → 1,202
 
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
 
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 
1. Definitions.
 
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
 
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
 
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
 
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
 
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
 
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
 
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
 
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
 
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
 
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
 
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
 
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
 
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
 
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
 
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
 
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
 
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
 
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
 
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
 
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
 
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
 
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
 
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
 
END OF TERMS AND CONDITIONS
 
APPENDIX: How to apply the Apache License to your work.
 
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
 
Copyright 2018 Daniel Marschall, ViaThinkSoft
 
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
 
http://www.apache.org/licenses/LICENSE-2.0
 
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
/LevEdit_Icon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SpaceMission_Icon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/.
Property changes:
Added: svn:global-ignores
+__recovery
+*.otares
Added: svn:ignore
+*.local
+*.dcu
+*.~*
+*.identcache
+*.tvsconfig
+__history
+*.exe
+TODO.bak
+*.drc
+*.ENU